diff --git a/saved_models/server/API_result.csv b/saved_models/server/API_result.csv new file mode 100644 index 0000000000000000000000000000000000000000..565996226282f9d21ef12506265983d7376abf89 --- /dev/null +++ b/saved_models/server/API_result.csv @@ -0,0 +1 @@ +SI,admin-e,2023-02-22-20:07:48 diff --git a/saved_models/server/config.json b/saved_models/server/config.json new file mode 100644 index 0000000000000000000000000000000000000000..f09482775eddfaf9fc1f4c861482ab1276a929df --- /dev/null +++ b/saved_models/server/config.json @@ -0,0 +1,23 @@ +{ + "embeddings": [ + { + "tensorName": "CIFAR10 with images", + "tensorShape": [ + 10000, + 784 + ], + "tensorPath": "https://storage.googleapis.com/embedding-projector/data/mnist_10k_784d_tensors.bytes", + "metadataPath": "https://gist.githubusercontent.com/hzf1174/3a7e85af7d09ebdfafac3d4d3ba5e71f/raw/502ad8aedc40fab7e56db917c57b48eaf0bd28fa/metadata.csv", + "sprite": { + "imagePath": "cifar10.png", + "singleImageDim": [ + 32, + 32 + ] + } + } + ], + "modelCheckpointPath": "Demo datasets", + "ServerIP": "localhost", + "ServerPort": "5001" +} diff --git a/saved_models/server/iteration_structure.json b/saved_models/server/iteration_structure.json new file mode 100644 index 0000000000000000000000000000000000000000..16003b5de508f75224da850d0c6b5e0a827a5642 --- /dev/null +++ b/saved_models/server/iteration_structure.json @@ -0,0 +1 @@ +[{"value": 1, "name": "1", "pid": ""},{"value": 2, "name": "checkpoint", "pid": 1}, {"value": 3, "name": "checkpoint", "pid": 2}, {"value": 4, "name": "checkpoint", "pid": 3}, {"value": 5, "name": "checkpoint", "pid": 4}, {"value": 6, "name": "checkpoint", "pid": 5}, {"value": 7, "name": "checkpoint", "pid": 6}, {"value": 8, "name": "checkpoint", "pid": 7}, {"value": 9, "name": "checkpoint", "pid": 8}, {"value": 10, "name": "checkpoint", "pid": 9}, {"value": 11, "name": "checkpoint", "pid": 10}, {"value": 12, "name": "checkpoint", "pid": 11}, {"value": 13, "name": "checkpoint", "pid": 12}, {"value": 14, "name": "checkpoint", "pid": 13}, {"value": 15, "name": "checkpoint", "pid": 14}, {"value": 16, "name": "checkpoint", "pid": 15}, {"value": 17, "name": "checkpoint", "pid": 16}, {"value": 18, "name": "checkpoint", "pid": 17}, {"value": 19, "name": "checkpoint", "pid": 18}, {"value": 20, "name": "checkpoint", "pid": 19}, {"value": 21, "name": "checkpoint", "pid": 20}, {"value": 22, "name": "checkpoint", "pid": 21}, {"value": 23, "name": "checkpoint", "pid": 22}, {"value": 24, "name": "checkpoint", "pid": 23}, {"value": 25, "name": "checkpoint", "pid": 24}, {"value": 26, "name": "checkpoint", "pid": 25}, {"value": 27, "name": "checkpoint", "pid": 26}, {"value": 28, "name": "checkpoint", "pid": 27}, {"value": 29, "name": "checkpoint", "pid": 28}, {"value": 30, "name": "checkpoint", "pid": 29}, {"value": 31, "name": "checkpoint", "pid": 30}, {"value": 32, "name": "checkpoint", "pid": 31}, {"value": 33, "name": "checkpoint", "pid": 32}, {"value": 34, "name": "checkpoint", "pid": 33}, {"value": 35, "name": "checkpoint", "pid": 34}, {"value": 36, "name": "checkpoint", "pid": 35}, {"value": 37, "name": "checkpoint", "pid": 36}, {"value": 38, "name": "checkpoint", "pid": 37}, {"value": 39, "name": "checkpoint", "pid": 38}, {"value": 40, "name": "checkpoint", "pid": 39}, {"value": 41, "name": "checkpoint", "pid": 40}, {"value": 42, "name": "checkpoint", "pid": 41}, {"value": 43, "name": "checkpoint", "pid": 42}, {"value": 44, "name": "checkpoint", "pid": 43}, {"value": 45, "name": "checkpoint", "pid": 44}, {"value": 46, "name": "checkpoint", "pid": 45}, {"value": 47, "name": "checkpoint", "pid": 46}, {"value": 48, "name": "checkpoint", "pid": 47}, {"value": 49, "name": "checkpoint", "pid": 48}, {"value": 50, "name": "checkpoint", "pid": 49}, {"value": 51, "name": "checkpoint", "pid": 50}, {"value": 52, "name": "checkpoint", "pid": 51}, {"value": 53, "name": "checkpoint", "pid": 52}, {"value": 54, "name": "checkpoint", "pid": 53}, {"value": 55, "name": "checkpoint", "pid": 54}, {"value": 56, "name": "checkpoint", "pid": 55}, {"value": 57, "name": "checkpoint", "pid": 56}, {"value": 58, "name": "checkpoint", "pid": 57}, {"value": 59, "name": "checkpoint", "pid": 58}, {"value": 60, "name": "checkpoint", "pid": 59}, {"value": 61, "name": "checkpoint", "pid": 60}, {"value": 62, "name": "checkpoint", "pid": 61}, {"value": 63, "name": "checkpoint", "pid": 62}, {"value": 64, "name": "checkpoint", "pid": 63}, {"value": 65, "name": "checkpoint", "pid": 64}, {"value": 66, "name": "checkpoint", "pid": 65}, {"value": 67, "name": "checkpoint", "pid": 66}, {"value": 68, "name": "checkpoint", "pid": 67}, {"value": 69, "name": "checkpoint", "pid": 68}, {"value": 70, "name": "checkpoint", "pid": 69}, {"value": 71, "name": "checkpoint", "pid": 70}, {"value": 72, "name": "checkpoint", "pid": 71}, {"value": 73, "name": "checkpoint", "pid": 72}, {"value": 74, "name": "checkpoint", "pid": 73}, {"value": 75, "name": "checkpoint", "pid": 74}, {"value": 76, "name": "checkpoint", "pid": 75}, {"value": 77, "name": "checkpoint", "pid": 76}, {"value": 78, "name": "checkpoint", "pid": 77}, {"value": 79, "name": "checkpoint", "pid": 78}, {"value": 80, "name": "checkpoint", "pid": 79}, {"value": 81, "name": "checkpoint", "pid": 80}, {"value": 82, "name": "checkpoint", "pid": 81}, {"value": 83, "name": "checkpoint", "pid": 82}, {"value": 84, "name": "checkpoint", "pid": 83}, {"value": 85, "name": "checkpoint", "pid": 84}, {"value": 86, "name": "checkpoint", "pid": 85}, {"value": 87, "name": "checkpoint", "pid": 86}, {"value": 88, "name": "checkpoint", "pid": 87}, {"value": 89, "name": "checkpoint", "pid": 88}, {"value": 90, "name": "checkpoint", "pid": 89}, {"value": 91, "name": "checkpoint", "pid": 90}, {"value": 92, "name": "checkpoint", "pid": 91}, {"value": 93, "name": "checkpoint", "pid": 92}, {"value": 94, "name": "checkpoint", "pid": 93}, {"value": 95, "name": "checkpoint", "pid": 94}, {"value": 96, "name": "checkpoint", "pid": 95}, {"value": 97, "name": "checkpoint", "pid": 96}, {"value": 98, "name": "checkpoint", "pid": 97}, {"value": 99, "name": "checkpoint", "pid": 98}, {"value": 100, "name": "checkpoint", "pid": 99}, {"value": 101, "name": "checkpoint", "pid": 100}, {"value": 102, "name": "checkpoint", "pid": 101}, {"value": 103, "name": "checkpoint", "pid": 102}, {"value": 104, "name": "checkpoint", "pid": 103}, {"value": 105, "name": "checkpoint", "pid": 104}, {"value": 106, "name": "checkpoint", "pid": 105}, {"value": 107, "name": "checkpoint", "pid": 106}, {"value": 108, "name": "checkpoint", "pid": 107}, {"value": 109, "name": "checkpoint", "pid": 108}, {"value": 110, "name": "checkpoint", "pid": 109}, {"value": 111, "name": "checkpoint", "pid": 110}, {"value": 112, "name": "checkpoint", "pid": 111}, {"value": 113, "name": "checkpoint", "pid": 112}, {"value": 114, "name": "checkpoint", "pid": 113}, {"value": 115, "name": "checkpoint", "pid": 114}, {"value": 116, "name": "checkpoint", "pid": 115}, {"value": 117, "name": "checkpoint", "pid": 116}, {"value": 118, "name": "checkpoint", "pid": 117}, {"value": 119, "name": "checkpoint", "pid": 118}, {"value": 120, "name": "checkpoint", "pid": 119}, {"value": 121, "name": "checkpoint", "pid": 120}, {"value": 122, "name": "checkpoint", "pid": 121}, {"value": 123, "name": "checkpoint", "pid": 122}, {"value": 124, "name": "checkpoint", "pid": 123}, {"value": 125, "name": "checkpoint", "pid": 124}, {"value": 126, "name": "checkpoint", "pid": 125}, {"value": 127, "name": "checkpoint", "pid": 126}, {"value": 128, "name": "checkpoint", "pid": 127}, {"value": 129, "name": "checkpoint", "pid": 128}, {"value": 130, "name": "checkpoint", "pid": 129}, {"value": 131, "name": "checkpoint", "pid": 130}, {"value": 132, "name": "checkpoint", "pid": 131}, {"value": 133, "name": "checkpoint", "pid": 132}, {"value": 134, "name": "checkpoint", "pid": 133}, {"value": 135, "name": "checkpoint", "pid": 134}, {"value": 136, "name": "checkpoint", "pid": 135}, {"value": 137, "name": "checkpoint", "pid": 136}, {"value": 138, "name": "checkpoint", "pid": 137}, {"value": 139, "name": "checkpoint", "pid": 138}, {"value": 140, "name": "checkpoint", "pid": 139}, {"value": 141, "name": "checkpoint", "pid": 140}, {"value": 142, "name": "checkpoint", "pid": 141}, {"value": 143, "name": "checkpoint", "pid": 142}, {"value": 144, "name": "checkpoint", "pid": 143}, {"value": 145, "name": "checkpoint", "pid": 144}, {"value": 146, "name": "checkpoint", "pid": 145}, {"value": 147, "name": "checkpoint", "pid": 146}, {"value": 148, "name": "checkpoint", "pid": 147}, {"value": 149, "name": "checkpoint", "pid": 148}, {"value": 150, "name": "checkpoint", "pid": 149}, {"value": 151, "name": "checkpoint", "pid": 150}, {"value": 152, "name": "checkpoint", "pid": 151}, {"value": 153, "name": "checkpoint", "pid": 152}, {"value": 154, "name": "checkpoint", "pid": 153}, {"value": 155, "name": "checkpoint", "pid": 154}, {"value": 156, "name": "checkpoint", "pid": 155}, {"value": 157, "name": "checkpoint", "pid": 156}, {"value": 158, "name": "checkpoint", "pid": 157}, {"value": 159, "name": "checkpoint", "pid": 158}, {"value": 160, "name": "checkpoint", "pid": 159}, {"value": 161, "name": "checkpoint", "pid": 160}, {"value": 162, "name": "checkpoint", "pid": 161}, {"value": 163, "name": "checkpoint", "pid": 162}, {"value": 164, "name": "checkpoint", "pid": 163}, {"value": 165, "name": "checkpoint", "pid": 164}, {"value": 166, "name": "checkpoint", "pid": 165}, {"value": 167, "name": "checkpoint", "pid": 166}, {"value": 168, "name": "checkpoint", "pid": 167}, {"value": 169, "name": "checkpoint", "pid": 168}, {"value": 170, "name": "checkpoint", "pid": 169}, {"value": 171, "name": "checkpoint", "pid": 170}, {"value": 172, "name": "checkpoint", "pid": 171}, {"value": 173, "name": "checkpoint", "pid": 172}, {"value": 174, "name": "checkpoint", "pid": 173}, {"value": 175, "name": "checkpoint", "pid": 174}, {"value": 176, "name": "checkpoint", "pid": 175}, {"value": 177, "name": "checkpoint", "pid": 176}, {"value": 178, "name": "checkpoint", "pid": 177}, {"value": 179, "name": "checkpoint", "pid": 178}, {"value": 180, "name": "checkpoint", "pid": 179}, {"value": 181, "name": "checkpoint", "pid": 180}, {"value": 182, "name": "checkpoint", "pid": 181}, {"value": 183, "name": "checkpoint", "pid": 182}, {"value": 184, "name": "checkpoint", "pid": 183}, {"value": 185, "name": "checkpoint", "pid": 184}, {"value": 186, "name": "checkpoint", "pid": 185}, {"value": 187, "name": "checkpoint", "pid": 186}, {"value": 188, "name": "checkpoint", "pid": 187}, {"value": 189, "name": "checkpoint", "pid": 188}, {"value": 190, "name": "checkpoint", "pid": 189}, {"value": 191, "name": "checkpoint", "pid": 190}, {"value": 192, "name": "checkpoint", "pid": 191}, {"value": 193, "name": "checkpoint", "pid": 192}, {"value": 194, "name": "checkpoint", "pid": 193}, {"value": 195, "name": "checkpoint", "pid": 194}, {"value": 196, "name": "checkpoint", "pid": 195}, {"value": 197, "name": "checkpoint", "pid": 196}, {"value": 198, "name": "checkpoint", "pid": 197}, {"value": 199, "name": "checkpoint", "pid": 198}] \ No newline at end of file diff --git a/saved_models/server/res.json b/saved_models/server/res.json new file mode 100644 index 0000000000000000000000000000000000000000..7db5c3ca6ec516869bd3f8ea39d128d98f4e4c4f --- /dev/null +++ b/saved_models/server/res.json @@ -0,0 +1,180008 @@ +{ + "1": [ + [2.1972548961639404, 5.592989921569824], + [7.350590705871582, -1.9344900846481323], + [8.7725191116333, -3.2714149951934814], + [-4.897489070892334, 7.412941932678223], + [-1.4587115049362183, 12.400467872619629], + [-1.007910966873169, 10.937529563903809], + [1.185845136642456, 0.4963762164115906], + [-1.9937031269073486, 1.9417110681533813], + [2.707597494125366, -5.103120803833008], + [-3.18796706199646, -0.9566024541854858], + [-3.663708209991455, 7.9816436767578125], + [-1.836958408355713, 1.9143377542495728], + [-1.7588109970092773, 1.7344890832901], + [-2.980910539627075, -1.075429916381836], + [6.119336128234863, -2.9411981105804443], + [7.1480278968811035, -3.7886621952056885], + [8.197775840759277, -2.543823480606079], + [-3.543645143508911, -1.8771494626998901], + [-3.4024946689605713, -0.8445069789886475], + [-0.30048805475234985, 2.6362693309783936], + [-5.433444499969482, 5.341676712036133], + [-3.17667555809021, -2.006499767303467], + [1.4223734140396118, 7.0486226081848145], + [3.1494123935699463, 6.4687275886535645], + [-0.6750431656837463, -1.7116471529006958], + [1.9939467906951904, 5.846436023712158], + [-6.2417521476745605, -0.5774203538894653], + [-1.3845186233520508, -0.4798653721809387], + [-4.532286167144775, 6.088061332702637], + [0.3690922260284424, -5.6501688957214355], + [0.5686789155006409, -8.26894760131836], + [7.018786907196045, -3.053283929824829], + [-1.369301438331604, 12.075016021728516], + [-3.4250123500823975, -0.5046785473823547], + [-5.065993785858154, 7.610679626464844], + [0.3343861699104309, -6.080325603485107], + [-4.982550144195557, -0.8911927938461304], + [-1.378393530845642, 0.5600764751434326], + [-3.3942339420318604, -1.4549912214279175], + [-0.8041698932647705, -2.12104868888855], + [-2.9792444705963135, -2.6603991985321045], + [0.12417655438184738, -1.117121696472168], + [1.1541996002197266, 0.3033478856086731], + [-2.036489248275757, 2.606146812438965], + [-0.5917307734489441, 10.029129981994629], + [-0.7515282034873962, 9.727163314819336], + [-0.7555352449417114, 10.275754928588867], + [0.566744863986969, -6.209293365478516], + [0.32827699184417725, -0.7633214592933655], + [0.6549959778785706, -8.356107711791992], + [4.300517559051514, -5.691973686218262], + [-3.5538299083709717, -1.6297553777694702], + [-1.932704210281372, -0.5390501022338867], + [6.75464391708374, -3.7473559379577637], + [-0.27762266993522644, -1.6396299600601196], + [0.7986845970153809, -0.5672858953475952], + [-2.8730149269104004, -1.2234114408493042], + [0.04535355418920517, -1.0012277364730835], + [1.2542129755020142, 0.3018190562725067], + [-2.707319974899292, 0.5060149431228638], + [-0.8150919079780579, 10.85978889465332], + [-1.2781890630722046, 11.588233947753906], + [2.6961021423339844, -4.5525970458984375], + [1.869519829750061, 2.989690065383911], + [-0.7038752436637878, 11.003053665161133], + [-1.398673176765442, 12.254520416259766], + [-4.683847904205322, 6.215926647186279], + [7.486481666564941, -2.7499425411224365], + [-1.7667632102966309, 1.5041619539260864], + [2.8749709129333496, -4.714677810668945], + [0.2290167212486267, -6.126773834228516], + [6.346505641937256, -2.3009843826293945], + [6.210216522216797, -0.9067142009735107], + [-1.3728408813476562, 0.5710344314575195], + [-2.7970733642578125, -1.9048843383789062], + [-0.4246593713760376, 9.753616333007812], + [8.816513061523438, -3.1620523929595947], + [0.310197114944458, -6.360290050506592], + [-3.105468511581421, -0.8868853449821472], + [-0.2840888500213623, 8.856759071350098], + [0.49370020627975464, -6.424069404602051], + [-3.560880184173584, -1.5620747804641724], + [-5.518357753753662, 7.216471195220947], + [-3.442298412322998, -1.2390199899673462], + [-2.7033064365386963, 3.9450531005859375], + [-2.066472291946411, 0.44763869047164917], + [-4.952428340911865, 7.080626487731934], + [-0.6763467192649841, 1.3082009553909302], + [7.17128324508667, -1.9492484331130981], + [0.1944136917591095, -4.2110419273376465], + [0.003194950520992279, -4.026415824890137], + [-5.853283405303955, -1.1186357736587524], + [0.7026192545890808, -7.417109489440918], + [0.6476649641990662, -7.621501922607422], + [-0.5308416485786438, 8.153423309326172], + [3.184701681137085, 6.281628608703613], + [-0.30126482248306274, 9.863636016845703], + [-0.38982415199279785, 9.356637954711914], + [-5.319129943847656, 7.254344940185547], + [-0.7330949306488037, 9.529621124267578], + [2.4157185554504395, -4.715716361999512], + [-5.232817649841309, -1.013491153717041], + [5.641274452209473, -1.7041795253753662], + [1.7682485580444336, 5.744745254516602], + [3.7726492881774902, 6.557413101196289], + [-1.6882364749908447, 13.32265853881836], + [1.9983313083648682, -4.795580863952637], + [-3.631200075149536, -1.6815811395645142], + [-0.3123486042022705, -1.5442622900009155], + [8.188443183898926, -3.466822385787964], + [6.348851203918457, -2.6976494789123535], + [0.4664025902748108, -6.50662088394165], + [-1.392134428024292, 12.3092679977417], + [-0.8863396048545837, 8.638012886047363], + [-2.02608585357666, 1.8468053340911865], + [0.6158366203308105, -7.460806369781494], + [0.45164698362350464, -6.183728218078613], + [2.3821184635162354, 6.031159400939941], + [2.270139455795288, 3.8324105739593506], + [-1.3318202495574951, 11.510656356811523], + [2.113193988800049, 0.40160849690437317], + [1.8837924003601074, 0.38355010747909546], + [7.273924827575684, -3.129399299621582], + [0.1978245973587036, 1.3361308574676514], + [4.002747058868408, 6.733917713165283], + [3.2895946502685547, 6.934109687805176], + [-1.3931552171707153, 11.610941886901855], + [6.884365081787109, -2.790036916732788], + [-4.3344902992248535, -1.9360498189926147], + [0.5864540934562683, -7.770881652832031], + [1.6801066398620605, 0.9938231706619263], + [-0.7466093897819519, 1.225793719291687], + [4.050484657287598, 7.1850786209106445], + [-1.8397786617279053, 0.4726596474647522], + [-0.8471848368644714, 10.147690773010254], + [2.7192025184631348, -5.373078346252441], + [-1.1148664951324463, 10.54061508178711], + [-0.8466008305549622, 10.846400260925293], + [-0.11885193735361099, -2.701181650161743], + [2.3433187007904053, -4.784806728363037], + [1.361270785331726, -5.615750312805176], + [-4.63722562789917, 5.647722244262695], + [0.5068904757499695, -4.471536636352539], + [4.562545299530029, 7.616971969604492], + [1.9531071186065674, 0.507434070110321], + [-4.609286785125732, 5.649341583251953], + [2.3746936321258545, 2.3259713649749756], + [7.218451499938965, -2.712195634841919], + [-3.997844934463501, -2.329623222351074], + [-4.862232685089111, 6.866608142852783], + [-4.202754020690918, -1.7395888566970825], + [-0.27649012207984924, -3.177860975265503], + [-1.9572821855545044, 1.6310845613479614], + [-3.746771812438965, 5.893516540527344], + [1.6136510372161865, 5.822061538696289], + [2.433171033859253, -4.860461711883545], + [-4.047911167144775, -2.463844060897827], + [-3.744896650314331, -2.0784215927124023], + [-4.7838664054870605, 6.28284215927124], + [0.9008121490478516, -4.354038715362549], + [-1.3846207857131958, 11.932332992553711], + [3.03623366355896, -4.807916164398193], + [-2.93544602394104, 2.369537591934204], + [-1.875737190246582, 1.3988046646118164], + [2.443675994873047, 5.894021987915039], + [1.0013506412506104, -7.685532569885254], + [5.709754943847656, -3.0669384002685547], + [-3.9786555767059326, -2.37214732170105], + [-0.660298228263855, 9.769359588623047], + [-5.402158737182617, -0.6974762678146362], + [2.1612513065338135, -3.726306915283203], + [-2.4560868740081787, -0.9109669923782349], + [-1.8324942588806152, 2.2826969623565674], + [-3.1536006927490234, -2.083237886428833], + [-3.6618096828460693, -0.02974802628159523], + [-6.312554359436035, 8.427295684814453], + [-1.456674575805664, 11.841569900512695], + [-1.2583343982696533, -3.6289169788360596], + [-3.0231151580810547, 3.5619935989379883], + [-0.7445441484451294, -2.712430238723755], + [-3.4256222248077393, 5.8094353675842285], + [-1.8980967998504639, -0.14574548602104187], + [-4.7634358406066895, -2.409752130508423], + [-3.4591755867004395, -1.925896406173706], + [-1.2311346530914307, 10.794244766235352], + [7.198482036590576, -3.5737717151641846], + [8.053197860717773, -2.4559786319732666], + [5.050564765930176, 7.884539604187012], + [8.766202926635742, -2.79571270942688], + [6.0993266105651855, -2.8292806148529053], + [1.7874999046325684, -5.190829277038574], + [1.1836485862731934, -5.068807125091553], + [3.0357184410095215, -4.979498863220215], + [2.6345040798187256, -4.537391185760498], + [2.2473177909851074, 3.7320663928985596], + [-3.2311089038848877, -1.4372340440750122], + [1.6013484001159668, 1.5759519338607788], + [-3.8116509914398193, -1.6985266208648682], + [-3.2907874584198, -2.70223069190979], + [0.6655430197715759, -7.7922563552856445], + [1.0049595832824707, 4.813820838928223], + [-1.3217846155166626, 11.718978881835938], + [8.729390144348145, -2.6241819858551025], + [-5.402364730834961, -1.2872557640075684], + [1.0291216373443604, 5.155670166015625], + [6.681834697723389, -2.652407646179199], + [-1.092456579208374, 10.226398468017578], + [-4.841765403747559, -0.4908294677734375], + [5.182328701019287, -2.225740909576416], + [2.869323253631592, 7.110508918762207], + [3.125927209854126, 7.04868745803833], + [-1.4199843406677246, -2.158259868621826], + [-0.8168444633483887, 9.525306701660156], + [0.6244829893112183, -8.202834129333496], + [7.371779918670654, -3.0714237689971924], + [-4.016025066375732, -1.9453314542770386], + [2.7112162113189697, -4.436087608337402], + [-5.53525972366333, 2.580117702484131], + [2.067270278930664, 0.45451390743255615], + [8.7725191116333, -2.901101589202881], + [0.6302074790000916, -6.679599761962891], + [2.92060923576355, -4.547310829162598], + [2.955878734588623, -4.870913982391357], + [6.867687225341797, -5.011709213256836], + [1.9010246992111206, 5.751693248748779], + [7.9844746589660645, -2.531764507293701], + [-1.1204513311386108, 11.227519989013672], + [-0.14013469219207764, 9.088759422302246], + [2.266329765319824, 6.380908489227295], + [-4.544593811035156, -0.973358154296875], + [6.5544753074646, -3.6047561168670654], + [2.5022659301757812, 6.327681541442871], + [2.297576427459717, 4.80369758605957], + [0.29229414463043213, -6.175357818603516], + [1.3799738883972168, 5.622102737426758], + [2.3054404258728027, 5.906093120574951], + [-1.2221544981002808, 10.935955047607422], + [-1.9552981853485107, 2.0132064819335938], + [-1.3774505853652954, 12.184270858764648], + [5.738164901733398, -1.5773903131484985], + [2.661705732345581, -5.095394134521484], + [-2.3006680011749268, 2.5171725749969482], + [2.056452989578247, 5.004306316375732], + [3.910687208175659, 7.08864688873291], + [2.5978147983551025, -5.904231548309326], + [1.8067423105239868, 5.674033164978027], + [2.7193987369537354, -4.3701677322387695], + [-3.2477619647979736, 4.611537456512451], + [5.678928852081299, -2.3408620357513428], + [0.34845781326293945, -4.648494243621826], + [-0.7029816508293152, 10.201976776123047], + [-3.882075071334839, -0.7046121954917908], + [2.8874692916870117, -4.565802574157715], + [-3.635784387588501, -1.3196967840194702], + [-5.2061333656311035, 7.608778953552246], + [-1.2434576749801636, 11.274559020996094], + [-1.8392802476882935, 1.856420636177063], + [-0.6953907608985901, 10.187437057495117], + [-4.066222667694092, -1.5748199224472046], + [1.7483106851577759, -5.038345813751221], + [-4.409070014953613, 1.3910740613937378], + [-0.6857442259788513, 10.297086715698242], + [-1.2312973737716675, 11.2296781539917], + [-3.3506176471710205, 5.215147495269775], + [0.6147741079330444, -7.356773376464844], + [7.190366268157959, -2.485140562057495], + [-5.753591060638428, -1.2211235761642456], + [-2.456791639328003, 1.8464083671569824], + [-5.445754528045654, 4.188255786895752], + [9.689814567565918, -2.9069020748138428], + [5.891082763671875, -1.6036213636398315], + [0.21710354089736938, -1.0657203197479248], + [-4.270117282867432, 5.801211833953857], + [6.858625888824463, -3.251851797103882], + [4.624824047088623, -0.7645655274391174], + [-1.2474056482315063, 10.886087417602539], + [0.4332922697067261, -6.616434097290039], + [-4.171814441680908, -2.0871195793151855], + [7.9447855949401855, -2.342244863510132], + [0.6028910279273987, -7.539301872253418], + [2.7822377681732178, -4.664783477783203], + [0.22057685256004333, -5.157131195068359], + [-0.4962760806083679, 9.09019660949707], + [-0.7429499626159668, 8.912031173706055], + [0.5110867023468018, -7.108994483947754], + [-3.052380323410034, -1.5468353033065796], + [3.885268211364746, 6.743350982666016], + [-3.5775411128997803, -1.1761480569839478], + [1.4812474250793457, 1.7785661220550537], + [-1.8766956329345703, 2.046403169631958], + [2.7607386112213135, -4.637706756591797], + [1.9831950664520264, -4.132376670837402], + [1.258465051651001, 4.163578510284424], + [0.7703296542167664, -7.078649520874023], + [-1.9054834842681885, 1.6418853998184204], + [6.278048992156982, -4.389806747436523], + [-4.031829357147217, 5.166751861572266], + [-3.868295192718506, -3.1425156593322754], + [-2.7012078762054443, -0.9323168992996216], + [-4.080519199371338, 5.74936580657959], + [0.1385732889175415, -5.479668140411377], + [5.359487533569336, -1.2194173336029053], + [-1.0025625228881836, 9.299531936645508], + [0.27174997329711914, -5.722388744354248], + [-0.9790179133415222, 10.073184967041016], + [-3.774613380432129, 0.6631882190704346], + [-0.44003015756607056, 9.290401458740234], + [8.580292701721191, -2.598865270614624], + [0.7201013565063477, -7.808412551879883], + [2.4271187782287598, -4.81778621673584], + [0.4886189103126526, -5.59785795211792], + [-1.2255347967147827, 11.241477966308594], + [-1.0350886583328247, 10.31405258178711], + [3.929297685623169, 6.930088520050049], + [-4.71603536605835, -0.41052621603012085], + [-4.7819976806640625, -1.2244950532913208], + [8.648993492126465, -2.6260721683502197], + [0.5699851512908936, -7.411452293395996], + [-1.3750439882278442, 1.307003140449524], + [6.36045503616333, -2.0688588619232178], + [-2.356292247772217, 2.171962022781372], + [-1.7596137523651123, 0.9540648460388184], + [6.126449108123779, -2.079453706741333], + [-1.3527032136917114, 11.550320625305176], + [-3.7125823497772217, -3.5476927757263184], + [-1.017823338508606, 10.94352912902832], + [1.7800912857055664, 5.278946399688721], + [3.7850208282470703, 6.8668317794799805], + [2.7991392612457275, -4.651000022888184], + [-1.9584667682647705, 2.4653310775756836], + [-0.7843133807182312, 10.243024826049805], + [-3.5833184719085693, -1.2505184412002563], + [0.39545124769210815, -6.046947479248047], + [-3.111131429672241, -0.7327184677124023], + [-3.8223702907562256, -1.7417871952056885], + [0.6556372046470642, -0.3200106620788574], + [-3.709411859512329, 6.453699111938477], + [1.1665008068084717, 5.248811721801758], + [-2.788111448287964, -0.3463178277015686], + [-3.2075257301330566, -2.6782875061035156], + [6.084379196166992, -2.0512492656707764], + [0.6819965243339539, -8.769001007080078], + [-0.8181626796722412, 5.312991619110107], + [-5.186950206756592, 6.347702980041504], + [0.740902304649353, -8.55341911315918], + [-2.4149956703186035, 5.636063575744629], + [-0.5905007719993591, 0.3788135349750519], + [2.491260290145874, 6.1862101554870605], + [0.3220660090446472, -7.264675140380859], + [0.20713147521018982, -5.363890171051025], + [2.316596269607544, 5.667088508605957], + [1.0017729997634888, 8.918756484985352], + [0.47651374340057373, -6.396018028259277], + [3.008762836456299, -5.086644649505615], + [-1.260561227798462, 11.441753387451172], + [5.17076301574707, 7.951452732086182], + [0.6012762188911438, -3.217632532119751], + [6.3218092918396, -2.751516580581665], + [-0.8191905617713928, -0.5882464647293091], + [-1.631481409072876, -0.9139614105224609], + [2.1705496311187744, -4.909828186035156], + [1.841092586517334, 5.718598365783691], + [-1.8225483894348145, 1.1175127029418945], + [0.6976277232170105, -5.059586524963379], + [-0.7546033263206482, 10.03492546081543], + [2.9381778240203857, -4.979769229888916], + [-3.2593472003936768, -1.3722831010818481], + [-4.815823078155518, -0.7809298038482666], + [2.4781367778778076, 6.104175567626953], + [7.605222225189209, -2.303049325942993], + [-3.067434310913086, -0.7416927814483643], + [0.6646937727928162, -8.362312316894531], + [-5.658493518829346, 7.858135223388672], + [0.7136386036872864, -9.264558792114258], + [-4.738338947296143, -3.877883195877075], + [-0.8903924822807312, 9.993692398071289], + [0.6766966581344604, -7.533278465270996], + [-6.0750203132629395, -0.8894968032836914], + [-1.0699645280838013, 4.17165994644165], + [2.6792690753936768, -5.434995174407959], + [-4.006572246551514, -2.20640230178833], + [-4.183197975158691, 7.251682281494141], + [-1.2929797172546387, 1.637227177619934], + [0.8636442422866821, -0.30674588680267334], + [-3.011147975921631, -0.7617522478103638], + [7.634398937225342, -2.3275606632232666], + [-1.7106667757034302, 1.4985921382904053], + [3.3853235244750977, 6.829449653625488], + [-2.85424542427063, -0.07159745693206787], + [-0.5217025279998779, 9.604198455810547], + [-4.184448719024658, 5.236185073852539], + [-1.9252336025238037, 1.521902084350586], + [0.31735098361968994, -5.929052352905273], + [-0.2877771258354187, 8.9637451171875], + [-2.004641532897949, 1.8831404447555542], + [-3.863299608230591, -1.358699917793274], + [0.5309105515480042, 8.281317710876465], + [4.694951057434082, -5.0092363357543945], + [-1.8224904537200928, 5.969974517822266], + [-2.6524996757507324, 4.890518665313721], + [-0.49057453870773315, -0.5286425352096558], + [1.3222761154174805, -6.074887752532959], + [0.4723377823829651, -0.6738353967666626], + [-0.043781884014606476, -4.418492317199707], + [1.857381820678711, -7.33439302444458], + [0.7131684422492981, -8.196033477783203], + [9.79814624786377, -2.9556753635406494], + [0.4336234927177429, -6.319791316986084], + [6.924069881439209, -2.3128130435943604], + [1.2531088590621948, 5.780032634735107], + [2.1851136684417725, -4.591986179351807], + [-0.3454428017139435, -2.090491533279419], + [-1.9099314212799072, 2.399707317352295], + [-0.8427103757858276, 0.9730968475341797], + [-4.78053617477417, 5.8166093826293945], + [0.5161466598510742, -7.060965538024902], + [-3.7265279293060303, -1.6961766481399536], + [0.5014346837997437, -7.969513893127441], + [3.1271414756774902, -5.196193218231201], + [6.6261091232299805, -1.5534279346466064], + [-3.589695692062378, 5.93937873840332], + [0.9167508482933044, 1.0570398569107056], + [-2.0286765098571777, 2.420053482055664], + [-1.0826987028121948, -0.7946147918701172], + [-3.8275110721588135, -1.602733850479126], + [-0.18851077556610107, -2.0348384380340576], + [-5.076125144958496, -3.7958500385284424], + [-1.258949875831604, 11.10317611694336], + [5.429098606109619, -1.7914820909500122], + [-4.656559467315674, 4.139980792999268], + [3.1135432720184326, -4.810796737670898], + [-3.029583692550659, -2.471019983291626], + [-1.2532316446304321, 11.105119705200195], + [-2.756169319152832, -1.7952872514724731], + [-4.749698162078857, 4.2458295822143555], + [-5.471504211425781, 5.07159423828125], + [0.9119746685028076, -7.046092987060547], + [2.316354751586914, 5.5464982986450195], + [8.166703224182129, -3.3555185794830322], + [0.28666239976882935, -6.737630844116211], + [-1.8913955688476562, 1.4959274530410767], + [1.9602210521697998, -5.410221099853516], + [2.692882776260376, -4.591846466064453], + [8.122321128845215, -3.250601291656494], + [7.603449821472168, -3.0159075260162354], + [-5.205801963806152, -1.1292635202407837], + [-4.220360279083252, -0.03433019295334816], + [0.1744593381881714, -4.053038120269775], + [0.8485047221183777, -7.746224880218506], + [-3.5376596450805664, 5.73793888092041], + [-3.1944472789764404, -1.0975500345230103], + [1.7634841203689575, 4.868041515350342], + [3.6379523277282715, 6.756114482879639], + [1.007190227508545, -6.04764461517334], + [-1.547498345375061, 12.286590576171875], + [0.05444961041212082, -5.126559257507324], + [1.9560372829437256, -5.52146577835083], + [0.6151617765426636, -7.361948490142822], + [0.34330183267593384, -5.956283092498779], + [0.6323220729827881, -6.014239311218262], + [-0.3498084545135498, 8.138093948364258], + [-1.2405740022659302, 10.89781665802002], + [-3.74729323387146, -2.6082963943481445], + [0.07414310425519943, -1.2951780557632446], + [1.9437458515167236, 6.462993144989014], + [2.4566824436187744, -4.812124252319336], + [-1.098950743675232, 10.76546859741211], + [0.6231639385223389, -6.852171897888184], + [0.6885133981704712, -8.592596054077148], + [-2.0013935565948486, 0.6339184641838074], + [-1.5408252477645874, 1.6520217657089233], + [-2.571136951446533, -3.8672540187835693], + [7.877787113189697, -3.196331739425659], + [2.445234775543213, 5.5249834060668945], + [-0.12179385870695114, -0.9306973218917847], + [2.4408926963806152, -4.643621921539307], + [-4.569507598876953, -1.4266489744186401], + [0.9233899712562561, -4.244180679321289], + [-3.3080925941467285, -1.2290525436401367], + [-3.9648635387420654, -0.7329312562942505], + [7.3022589683532715, -3.3246009349823], + [0.6211649775505066, -8.114936828613281], + [-1.1052350997924805, 11.209367752075195], + [1.7598446607589722, 2.058372735977173], + [-3.328437328338623, 5.250802993774414], + [2.2373251914978027, -4.684664726257324], + [-1.134824514389038, 10.827310562133789], + [2.1618845462799072, -4.47055721282959], + [1.2209020853042603, 5.153916835784912], + [-4.342157363891602, 6.157001972198486], + [-1.919050931930542, -0.07525515556335449], + [-4.311378479003906, -2.803516149520874], + [-2.530646800994873, -0.6370636224746704], + [-0.9191678166389465, 9.398345947265625], + [-4.623556613922119, -1.2390408515930176], + [3.617239236831665, 1.845470666885376], + [1.2527011632919312, -4.15244197845459], + [1.967987298965454, -5.377686500549316], + [-1.2752685546875, 10.964054107666016], + [-1.7681097984313965, -0.3206339478492737], + [-3.543682813644409, -2.1399013996124268], + [2.2781224250793457, -4.287714004516602], + [-0.6611003279685974, 0.8307890295982361], + [2.6924755573272705, -4.446396350860596], + [0.3700641393661499, -7.185312747955322], + [-3.4505741596221924, 5.272222518920898], + [-0.2495477795600891, 8.252116203308105], + [2.3025500774383545, -4.339295864105225], + [8.829642295837402, -2.6774957180023193], + [2.9240758419036865, -4.468949794769287], + [-0.1502138376235962, -1.3084537982940674], + [7.597291946411133, -2.651904344558716], + [9.502453804016113, -2.9149906635284424], + [1.31636643409729, 0.36165738105773926], + [-0.19093158841133118, 5.040277481079102], + [-0.5914424061775208, -1.845105767250061], + [-1.278009057044983, 0.8885892629623413], + [-3.630810022354126, -0.5152836441993713], + [2.947192907333374, -4.763070106506348], + [2.8184468746185303, -4.48787260055542], + [-4.8492279052734375, 6.21588134765625], + [-4.569307804107666, 4.52571439743042], + [-0.20531660318374634, -1.3932334184646606], + [-1.5579241514205933, 0.6483327150344849], + [-0.5818096399307251, 11.22889518737793], + [2.7393174171447754, 6.480433464050293], + [-3.9427454471588135, 6.35161018371582], + [0.5728402733802795, -6.496598243713379], + [-6.037118911743164, 8.405801773071289], + [4.396517276763916, 7.501672744750977], + [8.750706672668457, -3.252610206604004], + [-1.1615341901779175, 1.1147832870483398], + [-0.2642173171043396, 7.2036452293396], + [1.389589786529541, 0.695816695690155], + [-3.614098310470581, -5.1762495040893555], + [-3.070606231689453, -1.7366336584091187], + [-1.1397286653518677, 11.181270599365234], + [-4.219104766845703, 5.239025115966797], + [0.7179878354072571, -4.941145896911621], + [1.3450942039489746, -0.0393054224550724], + [2.2504401206970215, 3.237961769104004], + [9.058308601379395, -2.917992353439331], + [-3.432386875152588, -2.118370771408081], + [-5.101236343383789, 7.199878692626953], + [-0.33782508969306946, -0.790946364402771], + [-2.8021767139434814, 2.621602773666382], + [2.941696882247925, -4.519718170166016], + [-1.2002822160720825, 11.571771621704102], + [-3.9121038913726807, -1.8809654712677002], + [-4.499688148498535, 5.996767520904541], + [-4.520798206329346, -1.7479318380355835], + [-1.942724585533142, 2.5230047702789307], + [2.322587251663208, 4.480135440826416], + [5.2663397789001465, -5.803646087646484], + [2.842986822128296, -4.929285049438477], + [0.36256974935531616, -5.988903045654297], + [2.347541093826294, 5.472394943237305], + [0.2863958477973938, -5.917148590087891], + [-0.3650166988372803, -1.47516667842865], + [0.055185817182064056, -2.45127534866333], + [1.4301167726516724, -0.23972851037979126], + [1.198486328125, 6.186627388000488], + [2.339017868041992, -5.549552917480469], + [-3.2129733562469482, 1.3759514093399048], + [0.6139135360717773, -7.085877418518066], + [-0.773137629032135, 9.717473983764648], + [2.6803646087646484, -4.855344772338867], + [2.170949697494507, -4.998556137084961], + [-1.2663172483444214, 11.7095365524292], + [-3.6890742778778076, -1.0627256631851196], + [-1.8930519819259644, 0.46274518966674805], + [2.8602983951568604, 5.437262535095215], + [-2.971569538116455, 6.129010200500488], + [-0.3238586485385895, -3.6302530765533447], + [2.8902347087860107, -4.4854021072387695], + [-3.97171688079834, 5.853977680206299], + [-1.0296529531478882, 10.527324676513672], + [6.384798049926758, -3.864502191543579], + [-0.3731082081794739, 8.699384689331055], + [7.976903438568115, -3.586911916732788], + [-1.2215425968170166, 9.878644943237305], + [-5.106594085693359, 6.399468421936035], + [6.337053298950195, -1.347652554512024], + [-3.061784267425537, -0.8710817098617554], + [1.8983869552612305, -4.549779891967773], + [2.608586549758911, -4.8422956466674805], + [0.7350161671638489, -0.367361843585968], + [2.5129363536834717, 6.824830055236816], + [2.1278345584869385, 3.998547315597534], + [-1.3337247371673584, 0.558121383190155], + [-1.3562902212142944, 10.248733520507812], + [2.325049638748169, 5.578112602233887], + [1.7835334539413452, -4.792588233947754], + [-0.9943655133247375, 10.848527908325195], + [6.756855487823486, -2.3735225200653076], + [-2.0414345264434814, 2.764526605606079], + [3.0585122108459473, -4.939635753631592], + [-3.6233861446380615, -0.3402336835861206], + [0.4942890405654907, -7.711446285247803], + [-0.2710462212562561, 7.816520690917969], + [0.6188420653343201, -8.134056091308594], + [2.4930663108825684, -4.5868682861328125], + [1.5157502889633179, -4.944650650024414], + [-3.499307632446289, -1.1746536493301392], + [1.4559377431869507, -6.131165981292725], + [0.4681820273399353, -7.250202178955078], + [-1.1196997165679932, 10.830556869506836], + [-3.554640531539917, -2.6844570636749268], + [0.4045677185058594, -6.824071407318115], + [2.6920790672302246, -4.459217071533203], + [2.8525049686431885, -4.42478609085083], + [-2.3591275215148926, -0.4158419072628021], + [-0.6160227060317993, 10.334529876708984], + [7.889051914215088, -2.226048231124878], + [0.7264769077301025, -8.016122817993164], + [6.40494441986084, -1.7735025882720947], + [-4.364664554595947, 6.125266075134277], + [-0.718822181224823, 10.190649032592773], + [-0.012563444674015045, -3.9723050594329834], + [4.491441249847412, 7.663946151733398], + [0.34123533964157104, -6.06431770324707], + [-0.710353434085846, -0.9284177422523499], + [-3.480358362197876, 6.3952317237854], + [-2.05214262008667, 2.010181427001953], + [-3.4590036869049072, -1.668221354484558], + [2.504852533340454, 6.480769157409668], + [0.4837959408760071, -4.269869327545166], + [-0.20358365774154663, 9.143945693969727], + [0.7904145121574402, -7.189029693603516], + [-3.9282798767089844, -1.7234432697296143], + [-0.1070263460278511, -3.415574312210083], + [2.4993948936462402, -4.0980329513549805], + [-5.030354022979736, 7.271754741668701], + [-3.8683865070343018, -1.7910184860229492], + [8.477145195007324, -2.899024724960327], + [6.222269535064697, -1.4165997505187988], + [-1.8690857887268066, 1.325762391090393], + [0.4432947039604187, -7.676540851593018], + [-3.422351360321045, -1.191593050956726], + [-3.6485626697540283, -1.4546931982040405], + [-3.252922773361206, -1.217835545539856], + [-2.0438449382781982, 1.5954718589782715], + [-1.9327542781829834, 4.8402557373046875], + [6.818965911865234, -1.7079440355300903], + [-1.3732680082321167, 11.954893112182617], + [4.713711261749268, 7.51249885559082], + [0.842940628528595, -3.929986000061035], + [-3.423520803451538, -1.0482394695281982], + [0.5334202647209167, -4.142800331115723], + [-2.01092267036438, -1.7112399339675903], + [0.66350919008255, -8.306293487548828], + [4.416469097137451, 7.294529914855957], + [0.00879213958978653, -3.1761300563812256], + [-3.9433021545410156, -2.3132033348083496], + [-1.894134759902954, 0.7144449353218079], + [3.0546886920928955, 5.118438243865967], + [2.5112712383270264, -4.785092830657959], + [6.259328365325928, -2.250215768814087], + [0.38033366203308105, -6.3407745361328125], + [7.388204574584961, -3.865431547164917], + [-4.439708232879639, 5.767979145050049], + [-4.110252857208252, 4.786069869995117], + [-2.5871691703796387, 3.324998140335083], + [0.302517294883728, -6.127267837524414], + [6.240245342254639, -3.691422700881958], + [-2.52135968208313, 6.159685134887695], + [8.528563499450684, -2.8630824089050293], + [0.18646764755249023, 4.007364273071289], + [7.36161994934082, -2.033329486846924], + [0.31793636083602905, -4.908943176269531], + [-3.693342924118042, -2.086469888687134], + [-3.199859380722046, 3.4932034015655518], + [7.241893768310547, -2.9250071048736572], + [0.582837700843811, 0.40329650044441223], + [-3.5539801120758057, 5.647670269012451], + [-4.073477268218994, -4.067624568939209], + [-1.3508691787719727, 12.207530975341797], + [-5.692748546600342, 7.854788303375244], + [-4.852019786834717, 1.1409512758255005], + [6.069185733795166, -2.511584520339966], + [-1.0528669357299805, 9.765316009521484], + [-3.7540814876556396, -2.988786458969116], + [1.8975728750228882, 3.7673025131225586], + [6.94951057434082, -3.484241247177124], + [-3.638450860977173, 3.211826801300049], + [-3.1065590381622314, -1.0108649730682373], + [0.23041820526123047, -5.334438323974609], + [0.5975267291069031, -8.355094909667969], + [-1.9250433444976807, 0.4813811779022217], + [-0.8040652275085449, -1.1337889432907104], + [-1.1949639320373535, 10.41715145111084], + [-4.522613048553467, -0.9256871938705444], + [3.2215657234191895, 5.854141712188721], + [-2.7840497493743896, 5.1627044677734375], + [0.681537926197052, -7.550556182861328], + [1.0657498836517334, -6.0109429359436035], + [2.2633378505706787, 0.6978763341903687], + [0.7165369391441345, -4.555366516113281], + [0.7013466954231262, -8.760549545288086], + [-0.6824825406074524, 10.02577018737793], + [0.5305849313735962, -7.096224308013916], + [1.7669332027435303, 2.9359285831451416], + [-4.267004013061523, 4.1174445152282715], + [-3.5675048828125, -1.5903640985488892], + [3.132180690765381, -3.6026651859283447], + [-4.224178791046143, 6.084836959838867], + [7.747156143188477, -2.581130266189575], + [1.6234264373779297, -5.864350318908691], + [0.6029544472694397, -7.4135565757751465], + [-0.028730668127536774, -5.472626686096191], + [2.2793798446655273, 5.165665626525879], + [-5.2838263511657715, 6.851737976074219], + [-3.408165216445923, 3.024345636367798], + [0.34741151332855225, -5.976090908050537], + [-1.0654118061065674, 10.207935333251953], + [2.343763589859009, -4.739260673522949], + [2.572918176651001, -4.121263027191162], + [1.4495656490325928, 3.5892221927642822], + [2.3850018978118896, 5.120577335357666], + [7.977585315704346, -2.901596784591675], + [2.3970980644226074, 5.455992221832275], + [1.4879709482192993, 2.5030908584594727], + [-1.4333834648132324, 0.10044229030609131], + [2.825956344604492, -0.5437114238739014], + [-0.5425184369087219, -1.4740742444992065], + [0.4420499801635742, -5.13819694519043], + [-3.9891505241394043, -2.114947557449341], + [-4.508562088012695, 3.8711798191070557], + [2.0685956478118896, 5.429218292236328], + [-3.981895685195923, -3.390462875366211], + [-4.623717784881592, -0.7044804096221924], + [0.5677347779273987, -7.807651519775391], + [-3.8183302879333496, -1.1149760484695435], + [0.14339381456375122, -5.53715705871582], + [-1.4969499111175537, -3.6578209400177], + [0.6265864372253418, -8.049755096435547], + [2.845093011856079, -4.682851791381836], + [2.826101064682007, -0.3120298385620117], + [2.7584216594696045, 6.018336296081543], + [0.5757633447647095, -4.592576503753662], + [-4.2027692794799805, 0.1227458119392395], + [2.1221609115600586, -5.949977397918701], + [1.541184663772583, 1.9941293001174927], + [-1.097540259361267, 11.022720336914062], + [-2.0010321140289307, 0.3083398938179016], + [-2.1408371925354004, 6.231283187866211], + [-1.8414422273635864, 2.0038774013519287], + [0.030314795672893524, 7.316258430480957], + [0.43538719415664673, -6.779730319976807], + [5.989772319793701, -3.399247884750366], + [-3.231677770614624, -0.2668815851211548], + [-3.881218671798706, -2.8669440746307373], + [0.8389975428581238, -9.347043991088867], + [-0.7490635514259338, 10.469911575317383], + [-2.400233745574951, 0.08113545179367065], + [-3.5520193576812744, -2.2064096927642822], + [-0.44900405406951904, 9.47484016418457], + [0.6227421164512634, -8.218910217285156], + [-5.890282154083252, 4.262818336486816], + [-1.839134931564331, 2.144355058670044], + [-1.8429099321365356, 1.7997653484344482], + [-1.2498595714569092, 11.195127487182617], + [-3.4471373558044434, -1.5553261041641235], + [6.80296516418457, -3.9412665367126465], + [-4.003158092498779, 6.7922186851501465], + [0.6443389654159546, -7.621883869171143], + [2.791551351547241, -4.540426254272461], + [-3.5408403873443604, -0.9867690801620483], + [6.9894843101501465, -1.9780616760253906], + [0.7040482759475708, 6.740612030029297], + [-0.40071529150009155, 3.975060224533081], + [-1.2662042379379272, 1.6285830736160278], + [-1.2601221799850464, 11.23219108581543], + [2.8750417232513428, -4.554914474487305], + [-3.674053192138672, -0.37943434715270996], + [-0.19658082723617554, -1.52837073802948], + [-3.9395484924316406, -0.605300784111023], + [2.5856635570526123, -4.96834659576416], + [0.6922044157981873, 2.992455244064331], + [1.3156424760818481, 0.38480448722839355], + [-3.586050271987915, 5.094331741333008], + [1.4791104793548584, 5.162051200866699], + [0.7456210851669312, -8.346251487731934], + [0.6461641788482666, -8.779747009277344], + [-1.988527774810791, -3.8103930950164795], + [-4.124111652374268, -1.3106955289840698], + [0.6328421235084534, -6.852165222167969], + [0.9926230311393738, -4.707218647003174], + [0.7534322142601013, -3.869065284729004], + [-1.5951673984527588, 1.6397396326065063], + [0.830106794834137, -0.575812816619873], + [8.793251991271973, -2.8913562297821045], + [-3.5236458778381348, -0.9339585900306702], + [2.9324779510498047, -4.978946685791016], + [-1.9872008562088013, 2.0269551277160645], + [2.897472858428955, -4.818681716918945], + [1.6019936800003052, 1.9073423147201538], + [-2.000231981277466, 2.2935664653778076], + [0.28586137294769287, 4.569631576538086], + [0.5745800137519836, -7.420745849609375], + [1.1845166683197021, 0.25655609369277954], + [-0.7062386870384216, 3.3848793506622314], + [1.2927534580230713, 0.2609947919845581], + [0.19002079963684082, -4.566230297088623], + [-1.0124257802963257, -0.07756692171096802], + [-4.0476837158203125, -1.2405842542648315], + [-4.706249713897705, -0.5413362383842468], + [4.228263854980469, 7.352071285247803], + [-0.007596112787723541, -4.580228805541992], + [-5.780470371246338, -2.09385347366333], + [-2.4800150394439697, -1.5227235555648804], + [3.1792709827423096, -4.802036762237549], + [0.7281145453453064, -4.907052040100098], + [-3.725266218185425, -1.972025752067566], + [-4.324183940887451, -3.3089215755462646], + [-0.5087777972221375, 9.843537330627441], + [-5.097973823547363, 7.254082679748535], + [-3.750596761703491, -3.5343620777130127], + [1.2693698406219482, 5.980062007904053], + [-3.2575647830963135, -0.10953861474990845], + [-1.449499487876892, -0.67847740650177], + [-3.509629964828491, -1.9788519144058228], + [0.6407195925712585, -7.933311462402344], + [-1.224403977394104, 10.628826141357422], + [5.308037281036377, -3.825732946395874], + [-1.973030924797058, 1.2534246444702148], + [2.331181764602661, -4.58784294128418], + [1.356292963027954, -0.1358475685119629], + [8.484709739685059, -2.458008289337158], + [-0.0538678839802742, -0.7893906235694885], + [0.4995899796485901, -0.825210690498352], + [-3.980652093887329, 5.729184627532959], + [-3.3759782314300537, -1.1624512672424316], + [-1.0959622859954834, 10.325932502746582], + [-1.328419804573059, 11.079434394836426], + [-0.32935410737991333, 8.099554061889648], + [5.169475078582764, 8.278810501098633], + [3.5266003608703613, 6.756381511688232], + [4.157701015472412, 7.0746259689331055], + [-3.8268744945526123, -2.5167577266693115], + [-1.309372067451477, 11.297281265258789], + [-0.05277717858552933, 8.226850509643555], + [-0.6545316576957703, 1.2692466974258423], + [1.6508405208587646, -6.3431549072265625], + [-3.4972784519195557, 3.992333173751831], + [-4.05124568939209, -1.615273356437683], + [1.0581626892089844, -4.970640182495117], + [-0.6789757013320923, 1.2838605642318726], + [-1.0255954265594482, 10.558941841125488], + [2.326478958129883, 0.6786904335021973], + [-3.3956308364868164, -0.6800681352615356], + [-3.442779302597046, -2.0476913452148438], + [-0.6470513343811035, -3.4882724285125732], + [-3.45176100730896, -0.9595093727111816], + [2.285494089126587, 5.526639938354492], + [-0.164622962474823, 8.786235809326172], + [-5.081092357635498, 7.09681510925293], + [-4.119181156158447, -1.483930230140686], + [-2.864076614379883, -0.20557624101638794], + [2.916161298751831, -4.304934024810791], + [2.8644497394561768, -4.437670707702637], + [-5.365533351898193, -0.8850921392440796], + [0.7451483607292175, -4.8912529945373535], + [0.663615882396698, 6.7604546546936035], + [0.3286280632019043, -5.710613250732422], + [-2.679300546646118, -0.6304879188537598], + [0.644950807094574, -6.3189239501953125], + [8.877448081970215, -3.0604007244110107], + [-4.226294040679932, 5.220799446105957], + [-4.117547512054443, -0.654892086982727], + [3.1206111907958984, -5.302416801452637], + [0.7286264896392822, -7.865427017211914], + [0.8248010277748108, -8.037522315979004], + [3.0141923427581787, -4.823655605316162], + [-0.20399421453475952, 10.081296920776367], + [-3.8302042484283447, -3.2907919883728027], + [-3.762328863143921, -0.17685288190841675], + [6.241658687591553, -1.3891948461532593], + [-3.9436681270599365, -1.4375736713409424], + [-1.155957579612732, 10.637189865112305], + [2.579400062561035, -4.368269920349121], + [8.790777206420898, -2.641993761062622], + [-4.484806537628174, -0.27940797805786133], + [6.2873663902282715, -1.970008373260498], + [6.791053771972656, -2.611812114715576], + [-0.13727927207946777, -2.8718535900115967], + [-0.7103670239448547, 9.96672248840332], + [2.135050058364868, 0.7229628562927246], + [2.1562302112579346, -4.038939952850342], + [0.20938068628311157, -4.4517083168029785], + [8.393792152404785, -2.49043345451355], + [2.9550540447235107, -4.630758762359619], + [2.667670726776123, -4.939830780029297], + [-1.0981196165084839, 0.21892708539962769], + [-3.8599069118499756, -1.5428920984268188], + [-4.957295894622803, -0.5550340414047241], + [3.8711788654327393, 6.730644226074219], + [2.5440821647644043, -4.013622283935547], + [-1.469927191734314, 1.3420484066009521], + [2.07487416267395, 6.091352462768555], + [8.01726245880127, -2.344604253768921], + [2.604907274246216, -4.855147838592529], + [0.754600465297699, -9.193964958190918], + [0.4716064929962158, 5.363523960113525], + [-3.284886598587036, -1.2133796215057373], + [0.4673447608947754, -6.648266792297363], + [0.7052513957023621, -8.270881652832031], + [1.6275724172592163, 2.0203206539154053], + [-4.157924175262451, -3.2862813472747803], + [0.8466876149177551, -7.690969467163086], + [1.4442929029464722, 0.45615309476852417], + [0.43135982751846313, -6.678980827331543], + [0.29006069898605347, -4.607192039489746], + [-0.5871075987815857, -1.4140329360961914], + [4.6880035400390625, 7.602750301361084], + [6.951052188873291, -4.175717830657959], + [-0.8967379331588745, 0.8018976449966431], + [-0.6603310704231262, 10.412850379943848], + [-4.136580944061279, -2.893054723739624], + [-3.261168956756592, -2.314088821411133], + [4.312077045440674, 7.181607723236084], + [1.6949818134307861, 3.6996071338653564], + [-4.6606268882751465, -0.840408980846405], + [-0.17805993556976318, -1.4991562366485596], + [1.9592461585998535, 1.8180469274520874], + [-2.8444619178771973, 4.957372665405273], + [-1.9068678617477417, 0.9895747900009155], + [0.25547555088996887, -4.641852378845215], + [0.1860184371471405, -5.180808067321777], + [4.793092250823975, 7.766570091247559], + [-3.4104530811309814, 4.831387519836426], + [3.946889638900757, 7.070287704467773], + [-3.9404327869415283, -2.6102075576782227], + [0.6252936720848083, -0.3637202978134155], + [-4.09265661239624, 5.7219929695129395], + [5.522326946258545, -1.6438449621200562], + [-0.8467246890068054, 10.103384971618652], + [3.96403431892395, 7.436504364013672], + [0.7597202062606812, -6.634103298187256], + [-3.412410020828247, 6.787593364715576], + [0.7184771299362183, -7.222820281982422], + [-3.0722901821136475, -1.0398132801055908], + [-1.4395356178283691, 12.243642807006836], + [2.3861143589019775, -4.380053997039795], + [-3.359022378921509, -3.19621205329895], + [-4.740828037261963, 6.916238784790039], + [2.5038037300109863, -4.927644729614258], + [-0.6677895784378052, 9.856496810913086], + [-2.0236735343933105, 2.0248093605041504], + [-5.53292179107666, -0.8751571178436279], + [6.9761271476745605, -3.355633020401001], + [-4.946633815765381, 5.931865692138672], + [-1.9539241790771484, 1.7174780368804932], + [7.757956027984619, -2.1734957695007324], + [0.9523683190345764, -5.978978157043457], + [-4.112766742706299, -1.108718991279602], + [-1.4658775329589844, 1.177812099456787], + [1.1829519271850586, 0.2597314417362213], + [1.6976426839828491, -3.983384609222412], + [-4.488414764404297, 5.752135276794434], + [-1.09104585647583, -0.792686939239502], + [3.0820019245147705, 5.756880760192871], + [-1.0290182828903198, 10.944873809814453], + [1.984499216079712, 0.6037580966949463], + [6.1959428787231445, -1.1906265020370483], + [0.9476397633552551, -6.705623149871826], + [-5.178507328033447, 5.418416976928711], + [2.601698637008667, -4.492186069488525], + [-1.9271496534347534, -0.13761800527572632], + [-4.8780646324157715, -0.9133069515228271], + [5.526037693023682, -2.0961878299713135], + [2.5984911918640137, -4.637943267822266], + [-1.838162899017334, 1.9965163469314575], + [-2.239778518676758, 0.2663539946079254], + [0.9288263916969299, -6.3552045822143555], + [1.7083470821380615, 0.2111230492591858], + [-2.9851720333099365, 5.641856670379639], + [-1.3545457124710083, 11.124549865722656], + [-0.8270760178565979, 11.249863624572754], + [0.3473163843154907, 1.3983204364776611], + [-0.4669499397277832, 9.496503829956055], + [-3.523313045501709, -1.1944880485534668], + [-2.763779878616333, 3.018909215927124], + [0.7975888848304749, -8.325528144836426], + [-4.342318058013916, -2.893155336380005], + [2.1716361045837402, 5.31226921081543], + [1.2309247255325317, 1.6826330423355103], + [2.625486135482788, -4.435583114624023], + [-3.941519260406494, -2.008929491043091], + [1.3892698287963867, -6.733423233032227], + [1.8761711120605469, 2.1625747680664062], + [-1.1470059156417847, 11.365072250366211], + [-4.585066318511963, 0.07551705837249756], + [-3.1307625770568848, -1.6785811185836792], + [-1.367327332496643, 0.6795307397842407], + [-4.010977268218994, -1.7545360326766968], + [-0.981216549873352, -2.2342216968536377], + [-1.097403883934021, 10.918519973754883], + [-5.228387355804443, -0.9729970693588257], + [-4.142980575561523, -2.465639352798462], + [5.5503716468811035, -1.3944284915924072], + [-5.349668025970459, 6.766423225402832], + [-3.219194173812866, -1.3348277807235718], + [-0.7246967554092407, -1.4262369871139526], + [-5.610165119171143, 5.643644332885742], + [-3.3215389251708984, 5.721146583557129], + [-0.9960017800331116, 10.752448081970215], + [-3.8665106296539307, 5.97236442565918], + [-1.4199821949005127, -0.8379775285720825], + [0.0072360560297966, -3.611753225326538], + [-3.1231563091278076, -1.140147089958191], + [2.903517961502075, -4.721170425415039], + [0.5199294686317444, -7.921588897705078], + [1.0329209566116333, 5.2014265060424805], + [1.537179946899414, -4.435867786407471], + [-3.6852431297302246, -4.198145866394043], + [4.3433380126953125, 7.754975318908691], + [3.166410446166992, 5.6343488693237305], + [-3.326573371887207, 5.267516613006592], + [-2.069528102874756, 2.3152999877929688], + [-1.1875455379486084, 10.697611808776855], + [-1.051972508430481, 10.353597640991211], + [-4.296101093292236, 5.525676250457764], + [3.1851813793182373, 6.1546173095703125], + [0.9039612412452698, -0.41673743724823], + [-0.7322787642478943, -0.9039565324783325], + [5.905553340911865, -2.7641615867614746], + [4.044217109680176, 7.242950916290283], + [8.249634742736816, -2.59419846534729], + [-0.549205482006073, 10.626529693603516], + [-3.6268017292022705, -1.0743440389633179], + [2.3969695568084717, 5.892402648925781], + [2.7756361961364746, -4.379584312438965], + [-1.8822762966156006, -3.0731170177459717], + [5.293954372406006, -1.439566969871521], + [1.5994694232940674, 4.659955024719238], + [1.7011587619781494, -4.243293762207031], + [-0.8879976868629456, 10.304086685180664], + [2.749915838241577, 5.733686447143555], + [1.1534411907196045, -5.834371566772461], + [-3.114445209503174, -1.0821782350540161], + [-4.46279764175415, -1.8490225076675415], + [0.22430634498596191, 0.6807385683059692], + [7.954182147979736, -2.7421131134033203], + [2.633770704269409, -6.197325229644775], + [7.784158706665039, -3.133992910385132], + [-1.7232706546783447, 1.7633659839630127], + [2.276848077774048, 5.879040718078613], + [-4.758465766906738, 1.8599050045013428], + [6.3156232833862305, -1.679282307624817], + [1.3743877410888672, 1.5442074537277222], + [2.9260854721069336, 6.51832389831543], + [-1.4051038026809692, 12.148880958557129], + [2.0194733142852783, 5.506959915161133], + [-3.616945266723633, -0.6732426285743713], + [1.1536556482315063, 4.4015607833862305], + [1.6242082118988037, -5.564428329467773], + [-3.36702036857605, -1.3887090682983398], + [2.235938310623169, -4.150028705596924], + [5.5688042640686035, -1.614495038986206], + [1.2650413513183594, -5.683106422424316], + [-2.65940260887146, -4.02161979675293], + [5.9221673011779785, -2.373699426651001], + [2.1876909732818604, 6.074204444885254], + [-1.0552213191986084, 10.465736389160156], + [1.443869709968567, 0.0677327811717987], + [-4.173277378082275, -2.0326144695281982], + [0.18232694268226624, -4.720841407775879], + [-0.5220829844474792, 10.311161041259766], + [-4.8272624015808105, 6.701699256896973], + [-3.429508686065674, -1.548688530921936], + [-1.9789726734161377, -0.22813421487808228], + [-4.095526695251465, -2.472238540649414], + [6.793053150177002, -3.1800501346588135], + [-4.280458927154541, -0.4829455614089966], + [5.6635894775390625, -1.2917178869247437], + [-3.5596673488616943, -1.2250165939331055], + [0.8324259519577026, -0.08040231466293335], + [7.102987766265869, -3.4943034648895264], + [-1.2142730951309204, 10.981199264526367], + [1.8582005500793457, -4.296289443969727], + [-3.9298737049102783, -3.465006113052368], + [7.91750431060791, -3.208305597305298], + [-2.024075508117676, -0.47698473930358887], + [0.849678635597229, -4.890605926513672], + [3.575183391571045, 6.662624359130859], + [0.5704177021980286, -7.102954387664795], + [2.8499209880828857, -4.823453903198242], + [-4.225411891937256, -2.075404644012451], + [1.1729069948196411, -4.999489784240723], + [-0.8725324273109436, 10.864412307739258], + [-5.258083820343018, -4.539687156677246], + [1.7152987718582153, -5.8056230545043945], + [-2.8661816120147705, -2.5376265048980713], + [-1.3835046291351318, 0.8802872896194458], + [-1.2514091730117798, 11.48154354095459], + [-4.472217082977295, -3.5993592739105225], + [0.46481966972351074, -6.561978340148926], + [-4.7294721603393555, -1.1921530961990356], + [9.028694152832031, -2.803358316421509], + [-5.416422367095947, 1.912767767906189], + [2.2410812377929688, 4.605225563049316], + [9.007376670837402, -2.670445680618286], + [-0.8526187539100647, 9.550492286682129], + [-1.4358925819396973, -0.520318329334259], + [4.094285011291504, -4.6617631912231445], + [2.8643763065338135, -4.712859630584717], + [1.6803231239318848, 2.20467209815979], + [0.24657008051872253, -4.441349983215332], + [-3.2495853900909424, -0.8243287801742554], + [-0.040163554251194, -1.10454523563385], + [-3.60905122756958, -2.3802883625030518], + [6.573103427886963, -3.144646406173706], + [-2.079472541809082, 0.3479224443435669], + [9.054170608520508, -2.8541018962860107], + [5.9311957359313965, -1.2056738138198853], + [4.12059211730957, -4.2978105545043945], + [6.746820449829102, -1.5392826795578003], + [0.599506676197052, -6.039187431335449], + [5.774536609649658, -4.276509761810303], + [-5.618220329284668, -1.175238013267517], + [-4.046804904937744, -2.3588318824768066], + [-1.0275980234146118, -0.5592042207717896], + [0.6496596932411194, -7.348833084106445], + [-3.202960729598999, -0.6134666204452515], + [-2.0643956661224365, 2.412414073944092], + [5.122996807098389, 8.229188919067383], + [-3.9370052814483643, -1.6076163053512573], + [-4.7977824211120605, -1.8864623308181763], + [2.1128063201904297, 1.6812347173690796], + [0.743018627166748, -8.5596923828125], + [0.45521682500839233, -6.639013767242432], + [2.271099328994751, 5.656604290008545], + [-3.9779248237609863, -2.208101987838745], + [-4.538553714752197, -2.7640907764434814], + [-2.0461907386779785, 2.279447555541992], + [-1.8250510692596436, 5.678216934204102], + [7.037116527557373, -2.50365948677063], + [2.3294646739959717, -3.313284158706665], + [0.12386300414800644, -4.394670486450195], + [7.518982410430908, -2.5694382190704346], + [2.4256603717803955, -4.012512683868408], + [0.7892996668815613, -7.105373382568359], + [-4.9450764656066895, 6.338468551635742], + [0.6969606876373291, -8.534355163574219], + [-1.126846194267273, 10.40226936340332], + [0.4538331627845764, -0.4383428394794464], + [0.6558547616004944, -7.225349426269531], + [-4.194421291351318, 7.179920673370361], + [-2.5240654945373535, 2.304680824279785], + [6.082711696624756, -4.403322696685791], + [2.5980193614959717, -4.123354434967041], + [-4.247007846832275, -2.2186553478240967], + [-0.9634978175163269, 10.367891311645508], + [1.1896367073059082, 4.784870624542236], + [4.800681114196777, 7.769454002380371], + [-1.6275537014007568, -2.2782771587371826], + [-3.338578939437866, -1.5366849899291992], + [0.7170722484588623, -5.160933971405029], + [0.9964337944984436, 8.15237045288086], + [-5.183887004852295, -1.6438978910446167], + [2.1496992111206055, 5.293561935424805], + [2.827246904373169, -4.741751670837402], + [-0.20498722791671753, -3.385798692703247], + [-0.7832196354866028, 0.3821081817150116], + [-2.125913143157959, 0.779409646987915], + [0.668809711933136, -7.295453071594238], + [-0.8168333172798157, -3.1140854358673096], + [0.3419831395149231, -6.784954071044922], + [-5.639976978302002, 5.9295196533203125], + [5.67620325088501, -1.5394536256790161], + [7.659641265869141, -2.2720088958740234], + [-4.146069049835205, -2.782594680786133], + [-2.115382194519043, 2.2616689205169678], + [1.1869629621505737, 5.362837314605713], + [1.3648611307144165, 4.9857497215271], + [1.572681188583374, 5.001321792602539], + [1.3491742610931396, -5.436150550842285], + [0.5241616368293762, -7.675385475158691], + [-2.164827585220337, 2.1861860752105713], + [0.6075586676597595, -0.6569743156433105], + [0.9420076012611389, -6.3042378425598145], + [-6.450184345245361, 8.41424560546875], + [5.136887073516846, -4.0151591300964355], + [0.7782636284828186, -0.4897373914718628], + [0.5793974995613098, -6.070648193359375], + [9.42775821685791, -2.7884225845336914], + [0.15274262428283691, -5.125967025756836], + [0.35803377628326416, -5.386960029602051], + [0.26794323325157166, -1.0106914043426514], + [7.2671332359313965, -1.9362952709197998], + [1.4852304458618164, 4.806697845458984], + [0.9695315957069397, 4.551573753356934], + [-3.515159845352173, -2.185335874557495], + [2.715266466140747, 5.504558086395264], + [0.5674467086791992, -6.217012405395508], + [-5.08615255355835, -0.9061990976333618], + [-1.486926794052124, 1.4645285606384277], + [-3.892935276031494, -1.9151817560195923], + [-3.5354955196380615, -1.9803706407546997], + [-2.0193841457366943, 0.16629618406295776], + [8.032227516174316, -2.495523691177368], + [-3.6158668994903564, -1.3411757946014404], + [-1.6826050281524658, -1.065850019454956], + [-3.443516254425049, -0.9549056887626648], + [0.5785831212997437, -7.579531192779541], + [-4.073431968688965, -2.7734386920928955], + [2.095518112182617, 0.8315614461898804], + [6.468603610992432, -2.908724546432495], + [1.7931289672851562, 0.6757566332817078], + [2.451988935470581, 5.198736190795898], + [0.8443195223808289, -6.577929973602295], + [-4.118933200836182, 5.709657192230225], + [6.790241241455078, -2.4544646739959717], + [0.7048957943916321, -8.307400703430176], + [-1.8018672466278076, 2.046537160873413], + [0.9491990208625793, -7.284238815307617], + [9.750754356384277, -2.9748499393463135], + [-2.726979970932007, 2.9662461280822754], + [0.8773625493049622, -0.44439852237701416], + [3.6943321228027344, 6.312136650085449], + [-4.792270660400391, 6.918975830078125], + [1.8281124830245972, -2.6506519317626953], + [-0.7317012548446655, 9.44852352142334], + [-3.1383631229400635, -1.120713233947754], + [-3.0552759170532227, -1.144395351409912], + [-1.8883185386657715, 2.295520305633545], + [0.610831618309021, -7.0345940589904785], + [3.781214952468872, 6.95660924911499], + [2.874997615814209, -4.630711555480957], + [2.758890390396118, -4.494412422180176], + [8.799626350402832, -2.9761807918548584], + [6.363956451416016, -4.336999893188477], + [7.560317039489746, -2.8907742500305176], + [0.7125622034072876, -5.657326698303223], + [7.104272842407227, -2.5760891437530518], + [2.1847565174102783, -4.406801223754883], + [3.088909387588501, 6.123404026031494], + [-3.573002338409424, 6.415681838989258], + [1.7962186336517334, -3.4856975078582764], + [-1.1789547204971313, 11.41916275024414], + [5.63393497467041, -2.0538952350616455], + [-0.786836564540863, 10.336690902709961], + [0.421165406703949, -6.530107021331787], + [-2.7247657775878906, -2.627352476119995], + [2.4466450214385986, -4.314682960510254], + [4.459414005279541, 7.3119707107543945], + [7.126223564147949, -2.512369394302368], + [4.1453986167907715, 7.378480911254883], + [0.7134672999382019, -8.645848274230957], + [2.4216530323028564, -4.402803421020508], + [-1.149750828742981, 11.317435264587402], + [0.6579941511154175, -5.603815078735352], + [6.773011684417725, -2.5612852573394775], + [0.3695015013217926, -4.936362266540527], + [2.82030987739563, -4.963841915130615], + [-5.364718914031982, 7.416225433349609], + [-4.190634727478027, -0.870874285697937], + [0.4733128547668457, -0.8203926086425781], + [1.0931907892227173, 6.453084945678711], + [0.8451157212257385, -7.351147651672363], + [3.4333364963531494, -5.286259651184082], + [8.457226753234863, -2.818145751953125], + [7.868437767028809, -3.911787748336792], + [-5.204267978668213, 6.615251541137695], + [-3.4319145679473877, -1.1200250387191772], + [0.46218323707580566, -5.5609965324401855], + [-0.3154961168766022, -1.7307411432266235], + [-3.6207802295684814, 5.648659706115723], + [-1.6010229587554932, -0.5844415426254272], + [0.446561336517334, -6.418335914611816], + [-4.0275983810424805, -2.0827629566192627], + [-1.5911604166030884, -0.2199912667274475], + [-2.4038102626800537, 0.24962440133094788], + [-4.661679744720459, -4.435556411743164], + [-1.6538163423538208, 1.5208815336227417], + [-2.062983989715576, 1.6999355554580688], + [7.7419891357421875, -2.510524034500122], + [0.6541430950164795, -7.718080520629883], + [8.016707420349121, -2.769655227661133], + [-3.8370702266693115, -1.289644718170166], + [-3.559068441390991, -1.1841931343078613], + [2.073837995529175, -5.031804084777832], + [-0.45079925656318665, -1.2217391729354858], + [-4.514430999755859, 5.968142032623291], + [0.39521098136901855, -0.46716272830963135], + [-4.350895404815674, -1.8976191282272339], + [-1.3431185483932495, 11.711196899414062], + [0.20577219128608704, -3.8428361415863037], + [2.421398401260376, -5.9763569831848145], + [5.617092609405518, -1.905855417251587], + [-1.6066627502441406, 0.17678558826446533], + [2.801027297973633, -4.879543304443359], + [-0.19450312852859497, 8.795063972473145], + [-5.01443338394165, 6.200621604919434], + [0.6048699021339417, 0.7914344072341919], + [0.35857146978378296, -6.753890037536621], + [-5.215019226074219, 6.416367053985596], + [-3.9636785984039307, -2.4120633602142334], + [-4.201404571533203, 6.763345718383789], + [2.4811718463897705, -4.451216220855713], + [-0.4159093499183655, 8.70215129852295], + [-1.6803922653198242, 0.7637003660202026], + [-4.349122047424316, 5.750170707702637], + [-0.5726388692855835, 9.466434478759766], + [-0.6166529059410095, 9.687078475952148], + [6.837899684906006, -5.433623313903809], + [1.6201165914535522, 1.3158353567123413], + [-0.24698209762573242, -3.1651451587677], + [-1.9672694206237793, 1.2289392948150635], + [-3.6705901622772217, -1.6171364784240723], + [-5.154822826385498, 6.9144086837768555], + [-0.07128370553255081, -0.0066575296223163605], + [-3.7049076557159424, 5.953448295593262], + [2.232379674911499, -4.273399353027344], + [-3.9703896045684814, 6.20897102355957], + [-2.4690444469451904, -0.6697567701339722], + [2.1045851707458496, 5.9737443923950195], + [2.4073193073272705, 5.256707191467285], + [0.48099297285079956, -6.349288463592529], + [0.9227153658866882, 9.146702766418457], + [-5.353566646575928, 5.187078475952148], + [5.759021282196045, -2.491114854812622], + [2.5671207904815674, -4.951692581176758], + [-4.068314552307129, 4.956040859222412], + [4.28540563583374, -2.4242630004882812], + [6.883242607116699, -1.7885775566101074], + [3.854029417037964, 7.302156448364258], + [-0.6188129782676697, -1.5743340253829956], + [0.7350121140480042, -6.278284072875977], + [-4.26204252243042, -2.9296419620513916], + [-3.1812517642974854, -2.302776336669922], + [6.213335037231445, -1.5033286809921265], + [3.8422768115997314, 1.0045346021652222], + [1.5393370389938354, 1.8480006456375122], + [0.6577852964401245, -6.2599310874938965], + [2.9623868465423584, -4.6485700607299805], + [1.948951005935669, -5.018039226531982], + [0.6446616053581238, -7.037418842315674], + [-5.1213860511779785, 4.213451862335205], + [0.09199809283018112, -5.6265974044799805], + [-2.160228967666626, -0.0244026817381382], + [0.07872035354375839, -5.634476661682129], + [6.545653343200684, -2.153210401535034], + [0.06074567884206772, -4.7014360427856445], + [-4.345743656158447, -1.0795793533325195], + [-2.4769394397735596, -0.9351769685745239], + [-5.026813507080078, 6.51654577255249], + [-3.2864627838134766, -0.8381779193878174], + [-4.0069899559021, 5.429710388183594], + [-3.442964553833008, 5.147069931030273], + [-3.452136516571045, -0.9108794927597046], + [-0.2035600244998932, -0.5594974756240845], + [6.633213520050049, -4.312832832336426], + [1.4111406803131104, -0.11735135316848755], + [-3.45080304145813, -2.3673908710479736], + [-0.668064534664154, 10.044124603271484], + [3.004861831665039, -4.863317489624023], + [-4.329910755157471, -1.3357335329055786], + [-1.1807481050491333, -1.0858043432235718], + [4.485433578491211, 7.515683174133301], + [8.418397903442383, -2.8943378925323486], + [2.877185583114624, 5.402430534362793], + [-3.430692434310913, -0.8260906934738159], + [-1.2425687313079834, 11.007148742675781], + [-1.878917932510376, 0.7653212547302246], + [-4.916362285614014, 6.79649543762207], + [4.09714937210083, 7.311836242675781], + [-2.9954476356506348, -2.347362518310547], + [-3.7606327533721924, 3.974515676498413], + [5.870547771453857, -4.157349586486816], + [-2.9727070331573486, -0.7573678493499756], + [0.04217313975095749, -2.8467342853546143], + [-2.2621102333068848, 6.419093608856201], + [2.1178274154663086, 4.623561859130859], + [2.9880173206329346, -4.91564416885376], + [0.29512953758239746, -6.837066650390625], + [0.7035179138183594, -4.639333724975586], + [6.248554229736328, -3.830174207687378], + [7.6072797775268555, -3.7075600624084473], + [-0.24883544445037842, 9.421354293823242], + [0.5006780028343201, -5.857195854187012], + [1.077094554901123, -6.856083393096924], + [2.802079916000366, -4.828853607177734], + [7.700253963470459, -2.379392385482788], + [-5.409651279449463, 7.192170143127441], + [-3.1983964443206787, -2.035538911819458], + [-4.8994340896606445, 4.691610336303711], + [-4.8037428855896, 5.726078987121582], + [-0.9496757388114929, 10.676563262939453], + [9.504969596862793, -2.7882816791534424], + [3.1038899421691895, -5.003374099731445], + [2.8175036907196045, -4.577780723571777], + [4.155333995819092, 7.251428604125977], + [-1.1011677980422974, 11.101325988769531], + [-3.2499167919158936, -0.9390468597412109], + [-5.3999104499816895, 6.854172706604004], + [3.1958510875701904, -5.412439346313477], + [1.962444543838501, -4.437295913696289], + [2.960076093673706, -4.664854049682617], + [0.7138403058052063, -9.120160102844238], + [-3.635999917984009, -2.0085508823394775], + [2.1033730506896973, -3.8924291133880615], + [3.51924729347229, 6.923269271850586], + [2.609112024307251, -4.7669267654418945], + [-3.3462893962860107, -1.0948059558868408], + [-4.600067138671875, 6.812664031982422], + [-2.8894684314727783, 6.896780014038086], + [-0.2074158787727356, 8.335678100585938], + [-0.28291165828704834, -1.2798248529434204], + [-1.4607797861099243, 12.291035652160645], + [-3.4181647300720215, -1.7138015031814575], + [-1.532704472541809, 0.9853746891021729], + [-0.13629764318466187, 8.974042892456055], + [-2.173203706741333, 2.0315330028533936], + [-0.8595925569534302, -1.594030737876892], + [2.834092378616333, -4.929007053375244], + [0.22651135921478271, -6.248423099517822], + [6.511965274810791, -1.5389467477798462], + [-3.9655826091766357, -2.5093469619750977], + [-3.0259768962860107, -0.6774094104766846], + [-0.481373131275177, 9.281688690185547], + [6.104504585266113, -1.818192720413208], + [-3.686819076538086, -2.46353816986084], + [0.4281083941459656, -6.897650718688965], + [-2.676006555557251, 6.640444755554199], + [-4.024816036224365, -0.8392446041107178], + [-3.6387739181518555, -0.8495519161224365], + [0.371665894985199, -6.994865417480469], + [2.8570897579193115, -4.602881908416748], + [1.1727749109268188, -0.32998591661453247], + [1.3457574844360352, -5.645225524902344], + [0.05337565392255783, -5.3205366134643555], + [6.583889484405518, -2.1596832275390625], + [0.7545886635780334, -9.232149124145508], + [-4.4828386306762695, 4.666932582855225], + [0.49930697679519653, 5.6099700927734375], + [7.692182540893555, -2.603837728500366], + [0.13432496786117554, -6.027551651000977], + [2.7867956161499023, -4.481361389160156], + [1.0505280494689941, -0.19148290157318115], + [-1.7587125301361084, 1.2607067823410034], + [5.959218978881836, -1.5181902647018433], + [-4.1197686195373535, -2.2178752422332764], + [1.7836711406707764, 2.1820027828216553], + [-1.6194630861282349, 1.1349660158157349], + [-0.41140222549438477, 9.150644302368164], + [2.2467548847198486, 6.587148666381836], + [-1.4171878099441528, 11.595209121704102], + [-3.836336374282837, -0.6276313066482544], + [-3.2873969078063965, 3.1698975563049316], + [-4.665179252624512, 1.8333179950714111], + [2.5656352043151855, -4.484583854675293], + [5.710220813751221, 8.578012466430664], + [0.8971492052078247, -6.557032108306885], + [-1.4058992862701416, 11.798006057739258], + [8.490522384643555, -3.16865611076355], + [-4.951574325561523, 7.225041389465332], + [-0.41966554522514343, -1.4942594766616821], + [-2.006037950515747, -2.0451254844665527], + [-3.3176963329315186, -2.7299368381500244], + [-4.071330547332764, -0.5294854044914246], + [9.437932014465332, -2.7645676136016846], + [0.525572657585144, -7.359527111053467], + [-0.7134822010993958, 9.759345054626465], + [6.177718639373779, -1.9763073921203613], + [0.6339377164840698, -8.30505084991455], + [9.136038780212402, -3.2410948276519775], + [2.84100604057312, -3.181983232498169], + [-2.1866614818573, 0.04594206437468529], + [0.23978722095489502, -6.262061595916748], + [-4.821407794952393, 6.20656681060791], + [10.191020965576172, -3.0829052925109863], + [0.35624563694000244, -6.588465690612793], + [0.3455767333507538, -5.266510009765625], + [-0.4144356846809387, -2.1172597408294678], + [-1.1170711517333984, 11.433181762695312], + [0.7067771553993225, -7.21722412109375], + [1.4734389781951904, 0.15056674182415009], + [2.122563600540161, -4.747861862182617], + [2.3968937397003174, -2.8577306270599365], + [7.274703502655029, -4.009216785430908], + [0.19135546684265137, -4.177117824554443], + [-2.0754644870758057, 2.000553846359253], + [4.121649265289307, 7.3417510986328125], + [5.365725517272949, 8.206793785095215], + [0.2939748764038086, -5.331221103668213], + [-5.318126201629639, -1.4428589344024658], + [-2.144655466079712, 0.17886054515838623], + [-2.1090385913848877, -0.910401463508606], + [-2.123098850250244, 1.9036058187484741], + [-4.956556797027588, 5.967547416687012], + [0.26031559705734253, -6.498075485229492], + [0.6466375589370728, -8.236360549926758], + [-1.18046236038208, 11.091894149780273], + [-4.016023635864258, 3.485621690750122], + [-3.461909532546997, -1.332798719406128], + [1.524153232574463, 1.8273024559020996], + [-2.1078834533691406, 2.6866588592529297], + [0.8204943537712097, -4.820338249206543], + [0.02482091635465622, -4.1913933753967285], + [-0.6528354287147522, -1.2138699293136597], + [-1.030999779701233, 11.511075973510742], + [-5.432187557220459, -4.369429588317871], + [7.836794376373291, -3.3682782649993896], + [6.2021002769470215, -1.7708286046981812], + [2.659414052963257, -4.427552700042725], + [0.9397568106651306, -7.638202667236328], + [2.911064386367798, -4.823932647705078], + [0.9691711068153381, -5.010995388031006], + [1.156115174293518, -6.148377895355225], + [-3.5662543773651123, -2.007781744003296], + [4.83355712890625, -4.03895902633667], + [-3.8286988735198975, -4.446197509765625], + [0.6912172436714172, -8.21951675415039], + [0.38783174753189087, -6.165037155151367], + [0.38582539558410645, -4.979649543762207], + [-3.993534803390503, -2.3235037326812744], + [-1.9232841730117798, 1.8598531484603882], + [-3.8859951496124268, -2.249964714050293], + [-1.0195934772491455, 10.129334449768066], + [-2.876401901245117, -2.59647536277771], + [0.1017419621348381, -5.85975456237793], + [1.0546607971191406, 0.438066303730011], + [0.672883927822113, -8.649635314941406], + [0.35308200120925903, 5.410516738891602], + [-5.473465919494629, 4.752141952514648], + [-0.26013892889022827, -1.7509608268737793], + [-4.074678897857666, -0.860531210899353], + [3.144848108291626, 6.482025623321533], + [2.021911859512329, 0.5570000410079956], + [4.0547261238098145, 6.820267200469971], + [0.2781911790370941, -5.528656959533691], + [0.4228845238685608, -7.31846284866333], + [-4.25846004486084, -0.9970354437828064], + [-4.6655802726745605, 5.685957908630371], + [-0.25955671072006226, 7.136171340942383], + [3.2559916973114014, 6.538850784301758], + [-1.7851539850234985, 1.4997414350509644], + [-3.7059292793273926, -0.6635560989379883], + [0.27771931886672974, -6.713857173919678], + [-0.6987127661705017, 10.674647331237793], + [1.1119768619537354, -4.000456809997559], + [-1.4295734167099, 1.448235273361206], + [-2.062732458114624, 2.1627931594848633], + [-4.587757110595703, -3.5190927982330322], + [-4.014766216278076, -0.9688330292701721], + [-0.5526859164237976, 9.552218437194824], + [-0.5732462406158447, 9.871217727661133], + [-2.4879231452941895, 2.475008726119995], + [2.4809908866882324, 5.821258544921875], + [-1.2574762105941772, 11.82547664642334], + [-2.492802858352661, 1.5364328622817993], + [-3.823498487472534, -0.9827781319618225], + [-3.836148500442505, -1.4012445211410522], + [1.798269510269165, 5.920541763305664], + [-3.6291615962982178, -0.6851540803909302], + [-5.6130852699279785, 4.220973968505859], + [2.865189790725708, -4.592752456665039], + [-1.2357773780822754, 11.592146873474121], + [-3.4935548305511475, -1.1682026386260986], + [-1.1601299047470093, 1.031275987625122], + [-1.260435938835144, 1.4547926187515259], + [2.344848155975342, 5.829054832458496], + [2.357778310775757, -4.087985038757324], + [-1.4985519647598267, 12.254596710205078], + [-1.1378538608551025, -0.5370360016822815], + [-4.345125198364258, -2.7500810623168945], + [-4.067407131195068, -1.0040597915649414], + [-3.5392606258392334, -1.8612066507339478], + [-1.0971943140029907, 10.362225532531738], + [-1.2563036680221558, 11.236679077148438], + [5.606273174285889, -1.2473783493041992], + [-5.370632171630859, 1.70148766040802], + [-1.3777427673339844, 12.250556945800781], + [-5.058054447174072, 6.701364040374756], + [1.0102654695510864, -4.6155853271484375], + [-1.9057658910751343, 2.01766300201416], + [-1.1180651187896729, 11.20492935180664], + [-0.4668794274330139, 9.380271911621094], + [-2.8633368015289307, 5.687453269958496], + [-1.8891159296035767, 1.3606754541397095], + [-2.1931514739990234, 1.5511599779129028], + [-1.6973042488098145, 0.5244280099868774], + [4.243260860443115, 6.976601600646973], + [4.837878704071045, 7.5290961265563965], + [4.837939739227295, -4.357393264770508], + [8.60751724243164, -2.569667339324951], + [-2.499919891357422, -3.7175090312957764], + [0.6385813355445862, -8.443597793579102], + [9.83000373840332, -2.9238412380218506], + [-3.6720035076141357, -2.232858180999756], + [-3.703533411026001, 5.0930867195129395], + [2.3994147777557373, -5.078348159790039], + [0.6760318279266357, -8.644914627075195], + [1.8602880239486694, 0.6547837257385254], + [2.0408689975738525, 5.85331916809082], + [2.8136017322540283, -4.346213340759277], + [0.6792640089988708, -7.9021477699279785], + [-1.3070060014724731, 11.260308265686035], + [-3.8720877170562744, -3.3157403469085693], + [0.5505409836769104, -8.018489837646484], + [9.985504150390625, -2.9943034648895264], + [-2.645629644393921, -1.355552077293396], + [-1.1192641258239746, 9.79479694366455], + [-0.41484642028808594, 8.914514541625977], + [-0.08848918229341507, -0.9313196539878845], + [0.9480231404304504, -6.632288932800293], + [-4.4446234703063965, -1.306479573249817], + [0.8722221255302429, -0.25271424651145935], + [6.522149562835693, -3.044450044631958], + [-0.28701597452163696, 8.414716720581055], + [6.002853870391846, -3.349418878555298], + [2.672125816345215, 5.370400428771973], + [-0.5581251382827759, -0.8059106469154358], + [-5.264743328094482, 5.1496195793151855], + [2.5797436237335205, -4.790675163269043], + [2.538015127182007, -4.366965293884277], + [-4.473128318786621, 5.709217071533203], + [5.535770893096924, -1.2979179620742798], + [0.6267759799957275, -0.44436490535736084], + [-1.2884230613708496, 11.699666976928711], + [8.435185432434082, -2.7072954177856445], + [-4.16497278213501, 6.979127883911133], + [-4.285339832305908, 6.217342376708984], + [-3.753753900527954, -0.7086966633796692], + [0.6947558522224426, -8.99349594116211], + [0.5230957865715027, 5.302824020385742], + [6.265067100524902, 9.161711692810059], + [1.7771203517913818, -5.691918849945068], + [-5.192911624908447, 4.805273056030273], + [-0.9873082041740417, 10.514955520629883], + [0.720709502696991, -7.708521842956543], + [8.269424438476562, -2.493072748184204], + [-4.88886022567749, -4.390825271606445], + [3.2226197719573975, 6.366929054260254], + [-3.161759614944458, -1.1200668811798096], + [4.833775043487549, 7.534353256225586], + [5.9038405418396, -2.9012653827667236], + [-4.723930835723877, 5.9965057373046875], + [-4.515912055969238, 5.447803497314453], + [1.0788867473602295, 0.229841947555542], + [2.235152006149292, 5.458914756774902], + [2.1543822288513184, -4.635947227478027], + [-3.9768478870391846, 5.538005828857422], + [0.6701480746269226, -6.353442192077637], + [1.6770315170288086, 5.552244663238525], + [-3.0808796882629395, -2.1567742824554443], + [8.312627792358398, -3.1687915325164795], + [2.8725664615631104, -4.696687698364258], + [-2.385612964630127, 2.093674421310425], + [-1.1868735551834106, 10.581762313842773], + [7.681051731109619, -2.3749208450317383], + [-3.186103582382202, -2.6163361072540283], + [-4.856667995452881, 5.858374118804932], + [-5.0258259773254395, -1.1911553144454956], + [-4.84728479385376, -4.7679572105407715], + [-5.0396952629089355, 2.3891048431396484], + [-4.3811211585998535, -1.5105239152908325], + [-3.80307936668396, 5.944286823272705], + [-1.1276097297668457, 9.821264266967773], + [-4.298389434814453, -2.7948415279388428], + [-3.8540756702423096, -2.3146636486053467], + [1.0130090713500977, -4.935525417327881], + [1.6832466125488281, -5.672493934631348], + [2.9475953578948975, -4.640560626983643], + [-2.7408463954925537, 4.811837196350098], + [-3.7005889415740967, -1.7775306701660156], + [0.6030769348144531, -7.736468315124512], + [2.0837647914886475, -5.513371467590332], + [1.1745383739471436, 1.4687103033065796], + [0.6849201917648315, -5.711245536804199], + [7.101591110229492, -2.5647270679473877], + [2.952831983566284, -4.897035121917725], + [0.4553329348564148, -6.487956523895264], + [1.7550456523895264, 2.0955631732940674], + [0.06827878206968307, -4.799493789672852], + [1.5734564065933228, -0.11936740577220917], + [1.703132152557373, 4.818264007568359], + [-1.8487204313278198, 1.8151192665100098], + [2.723571300506592, -4.883329391479492], + [-1.4753094911575317, 12.441021919250488], + [-0.24991148710250854, 9.162981986999512], + [2.712916135787964, -4.5565385818481445], + [0.6303759813308716, -7.3712310791015625], + [-4.652885913848877, -1.1479105949401855], + [2.7573435306549072, -4.3789262771606445], + [2.8013269901275635, 4.885622978210449], + [2.9930436611175537, -4.918622016906738], + [-0.913046658039093, 10.849319458007812], + [1.7719345092773438, 5.451465606689453], + [-4.50068998336792, -4.653829574584961], + [-2.2082300186157227, 6.4118804931640625], + [-0.5168015956878662, 0.018555480986833572], + [-1.4420394897460938, 12.492668151855469], + [-4.242164134979248, 5.047074794769287], + [-4.017470359802246, -1.912123203277588], + [-0.5829073190689087, 9.651620864868164], + [-1.6443731784820557, 1.1928328275680542], + [2.5942275524139404, -5.155365943908691], + [-5.740415573120117, -0.7952702045440674], + [1.026189923286438, -7.223871231079102], + [0.8176592588424683, -4.98570442199707], + [-4.2013325691223145, -0.8516989350318909], + [-3.9641196727752686, -0.03102368488907814], + [-0.010085619986057281, -4.370969772338867], + [7.344065189361572, -2.228685140609741], + [-0.3416749835014343, 9.028417587280273], + [0.4263361692428589, -6.433256149291992], + [0.7745586037635803, -8.30182933807373], + [-0.8786242008209229, -0.881667971611023], + [0.5714603066444397, -7.473628044128418], + [-5.452882289886475, 6.863980293273926], + [-4.005523204803467, -1.3109354972839355], + [5.244692325592041, -2.0186612606048584], + [0.7711233496665955, -7.308696746826172], + [-1.952176570892334, 1.9091240167617798], + [-4.140974521636963, -2.0359387397766113], + [5.793316841125488, -3.8519368171691895], + [-4.518303394317627, -2.87192702293396], + [2.7375080585479736, -4.917568206787109], + [-0.13881036639213562, -0.9332825541496277], + [-3.0173604488372803, -1.1643551588058472], + [-5.021533489227295, -0.7085188031196594], + [-0.8347896933555603, 10.607015609741211], + [7.82844352722168, -4.158180236816406], + [0.9922612309455872, -4.242615222930908], + [-0.09935588389635086, -2.8313400745391846], + [-4.231828212738037, 6.675034046173096], + [-2.271754026412964, 2.1389687061309814], + [1.8565484285354614, 3.907055139541626], + [-1.408340334892273, 11.766871452331543], + [2.67513370513916, -4.371589660644531], + [2.3168952465057373, 5.8806257247924805], + [8.224569320678711, -2.4336025714874268], + [-4.845291614532471, -1.38386070728302], + [-0.8481269478797913, 10.155966758728027], + [-4.213817596435547, -0.9838732481002808], + [-2.040022373199463, 2.380824327468872], + [-2.9323232173919678, 2.786041021347046], + [0.4621770977973938, -7.10578727722168], + [2.1197969913482666, 5.334676742553711], + [-2.028380870819092, 0.5065186023712158], + [3.832848310470581, 6.9262590408325195], + [6.8711981773376465, -1.9731113910675049], + [-2.832185983657837, -0.8382779955863953], + [-3.903618574142456, 7.1621198654174805], + [-1.157435417175293, 10.548820495605469], + [5.8357415199279785, -1.1450673341751099], + [1.684753179550171, -4.685492515563965], + [-3.4581260681152344, -2.1012697219848633], + [2.821960687637329, -4.900631904602051], + [1.5081725120544434, 1.7541834115982056], + [-0.044429607689380646, -1.4155795574188232], + [-3.014681100845337, -1.2641342878341675], + [0.6444432735443115, -5.951146125793457], + [0.5909697413444519, -5.130236625671387], + [0.5493548512458801, -7.637007713317871], + [-1.8361430168151855, 1.9060002565383911], + [0.4413023591041565, -6.7901763916015625], + [-1.589347004890442, 5.885986804962158], + [2.705469846725464, 4.645061492919922], + [-4.992303371429443, 5.19323205947876], + [2.4091367721557617, -5.135476112365723], + [-1.871829628944397, 1.7276798486709595], + [5.907756328582764, -1.3683408498764038], + [4.647644519805908, 7.557068347930908], + [-0.22613024711608887, 8.320175170898438], + [-0.34282588958740234, 0.2323373556137085], + [-4.460295677185059, -0.9412885904312134], + [2.6640703678131104, -4.210879325866699], + [2.920719623565674, -4.681982040405273], + [-4.8002095222473145, -1.1797727346420288], + [6.487984657287598, -1.5639230012893677], + [7.73761510848999, -2.453608274459839], + [2.106157064437866, -4.630101203918457], + [-5.140453815460205, 4.194169521331787], + [0.18214821815490723, -1.0371804237365723], + [-4.325689792633057, -1.425453543663025], + [0.20766884088516235, -4.994650840759277], + [-3.172933340072632, -1.2624733448028564], + [-0.9049286842346191, 10.50960922241211], + [1.0634881258010864, -6.466708183288574], + [-2.1129066944122314, 0.5500175952911377], + [-2.2390995025634766, -1.5213916301727295], + [-4.683556079864502, -0.7224019765853882], + [-3.9983928203582764, -2.7748897075653076], + [0.2147405743598938, -5.675582408905029], + [2.011542558670044, 0.5358291864395142], + [1.2778925895690918, 1.9942559003829956], + [-1.248592495918274, 11.158659934997559], + [-3.3597309589385986, 5.202620506286621], + [0.9451494812965393, -5.0685834884643555], + [-0.25210893154144287, 0.9372624158859253], + [3.5127153396606445, -3.7415544986724854], + [-3.1114423274993896, 3.6836891174316406], + [6.734335422515869, -2.806469440460205], + [1.0902373790740967, -6.308795928955078], + [1.114238977432251, 4.7231340408325195], + [-1.0089538097381592, 10.342703819274902], + [1.4677751064300537, 0.001385953277349472], + [-3.4925591945648193, -1.9647995233535767], + [5.740928649902344, 8.589057922363281], + [0.11810871213674545, -4.32468843460083], + [-3.827172040939331, 6.033451080322266], + [-4.4875359535217285, -2.4705159664154053], + [-1.895511269569397, 2.225231885910034], + [1.4549226760864258, 5.120142936706543], + [-1.906512975692749, 1.8114985227584839], + [2.8403446674346924, 4.6541829109191895], + [-3.3171913623809814, -1.538260817527771], + [0.7291283011436462, -8.665318489074707], + [0.9231908917427063, -0.1445499211549759], + [-5.255822658538818, 7.361724853515625], + [-5.287456512451172, 7.638252258300781], + [-3.5138652324676514, -1.0818300247192383], + [0.4152681827545166, -7.4399003982543945], + [0.47603535652160645, -5.994228363037109], + [-0.421700656414032, -1.9261753559112549], + [1.0679993629455566, 5.667422771453857], + [-1.2563750743865967, 11.534690856933594], + [2.9011449813842773, -6.120063781738281], + [2.4230263233184814, -5.274433135986328], + [-3.1928136348724365, -0.9320750832557678], + [0.7163781523704529, -9.309678077697754], + [-2.1639788150787354, 0.9340200424194336], + [-4.46333646774292, 5.762722969055176], + [8.271167755126953, -3.971322774887085], + [-3.0388906002044678, 3.136143445968628], + [6.10601282119751, -1.32412850856781], + [0.041121117770671844, -3.750983476638794], + [0.5607050061225891, -7.745967388153076], + [-1.964746356010437, 3.401326894760132], + [-1.9710065126419067, 2.0457286834716797], + [-3.1424386501312256, -0.8928616642951965], + [-2.11436128616333, -1.2724930047988892], + [0.9284715056419373, 5.771903991699219], + [1.9016458988189697, 6.05551815032959], + [1.210756540298462, 0.4490368962287903], + [-3.6872143745422363, -0.6457928419113159], + [-3.7077977657318115, 3.922802686691284], + [-4.382040500640869, -1.979153037071228], + [-3.8801867961883545, -0.1563812494277954], + [-0.9656792879104614, 1.2278648614883423], + [1.8781042098999023, 1.1651692390441895], + [-3.791851043701172, -1.6551557779312134], + [-3.4677608013153076, -0.7441310882568359], + [-2.502964496612549, -2.8134634494781494], + [-3.5174334049224854, -3.0867531299591064], + [-3.8483121395111084, -3.2700507640838623], + [-0.23435541987419128, -1.6435760259628296], + [-5.557835102081299, 3.902712345123291], + [2.44451642036438, 0.7120774388313293], + [2.6516737937927246, -4.3395676612854], + [-3.5969290733337402, 4.709009647369385], + [1.935809850692749, 1.294510841369629], + [-3.8796775341033936, -1.0058016777038574], + [-2.1752564907073975, 0.09733730554580688], + [-1.9612053632736206, 1.836969256401062], + [2.7426130771636963, -4.902576446533203], + [-3.8798959255218506, -2.6192069053649902], + [1.0805315971374512, -0.15766876935958862], + [2.6542794704437256, -4.534697532653809], + [-1.9319512844085693, -0.3627687692642212], + [0.20834001898765564, -4.360307693481445], + [-3.4744277000427246, -2.0468597412109375], + [-5.1086859703063965, 5.015669345855713], + [0.8664445877075195, -0.5189180970191956], + [8.540144920349121, -2.631805419921875], + [-1.009204387664795, 10.989128112792969], + [0.9154610633850098, -4.784595012664795], + [0.8107389211654663, -6.530065536499023], + [0.7291452288627625, -9.160667419433594], + [-3.7401506900787354, -1.1152440309524536], + [-1.491186499595642, 6.059940338134766], + [-3.470757007598877, -2.7308239936828613], + [2.2616655826568604, 4.760402679443359], + [0.9612269997596741, -5.044635772705078], + [0.6013981699943542, -7.501193046569824], + [-3.5968363285064697, -1.035550832748413], + [-3.6707966327667236, 6.465431213378906], + [-4.8364152908325195, 7.267421722412109], + [-4.002969741821289, 5.4684062004089355], + [0.5677008628845215, -4.71275520324707], + [0.4064069986343384, -5.524483680725098], + [0.39580637216567993, -7.283871173858643], + [-3.3498270511627197, -2.3471176624298096], + [0.4879377484321594, -7.067340850830078], + [0.8565475940704346, -6.004770278930664], + [-2.524620532989502, 6.189541816711426], + [-4.028530120849609, 3.7274792194366455], + [-1.9252492189407349, 2.3238332271575928], + [-2.9485995769500732, -0.9289649128913879], + [-3.1363842487335205, -0.9851874113082886], + [-2.640711545944214, 2.5518946647644043], + [-4.334522724151611, -0.9085943698883057], + [-1.9179986715316772, 1.797202229499817], + [-5.577384948730469, -0.8240073919296265], + [-1.7519134283065796, 2.1395630836486816], + [-2.0125997066497803, 0.08235663175582886], + [-1.9505246877670288, 2.6115612983703613], + [-1.3127624988555908, 11.670154571533203], + [-1.174250602722168, 1.616941213607788], + [0.9737005829811096, -6.735084056854248], + [-5.472874164581299, 5.380436420440674], + [-1.8338607549667358, 1.9415339231491089], + [10.016213417053223, -2.984365940093994], + [-0.903506338596344, 9.942960739135742], + [-3.0192453861236572, -0.3239927291870117], + [-2.407625913619995, 2.3529016971588135], + [-3.2061500549316406, 4.883583068847656], + [-4.093751907348633, -4.783107757568359], + [7.989434719085693, -3.232187509536743], + [0.9978381991386414, -5.472475528717041], + [1.1703386306762695, -5.383145809173584], + [-2.0948643684387207, 2.031062602996826], + [-5.044205665588379, -0.8311741352081299], + [3.930795431137085, 7.308802604675293], + [0.822729229927063, -0.6370760798454285], + [-4.881460666656494, -0.8842703104019165], + [-0.33512240648269653, 8.885496139526367], + [-0.3546717166900635, -1.2606072425842285], + [-3.243614673614502, -2.0559041500091553], + [0.7099916934967041, -4.698360443115234], + [1.390636920928955, -4.468020915985107], + [-3.5968375205993652, 5.71697998046875], + [0.9068408608436584, -6.229065418243408], + [-1.9739232063293457, 1.5988982915878296], + [3.4656484127044678, -1.80307137966156], + [2.345973014831543, 4.024012565612793], + [-2.0874311923980713, 2.415071487426758], + [-1.928261399269104, 1.6236052513122559], + [-1.1502232551574707, -0.557817816734314], + [-3.183974027633667, -0.8876631855964661], + [-4.210826873779297, 6.144967555999756], + [0.7083746194839478, -7.3791890144348145], + [0.2705615162849426, -5.216853141784668], + [-4.546693801879883, 5.873330116271973], + [-3.5155231952667236, -1.2260582447052002], + [2.7202634811401367, -3.7126083374023438], + [8.241192817687988, -2.412311553955078], + [-4.1336822509765625, 6.944735527038574], + [-4.665816783905029, -3.208937883377075], + [1.0127465724945068, 3.442318916320801], + [2.6863911151885986, 6.007190227508545], + [-3.659693717956543, 4.407344818115234], + [-1.4175217151641846, 12.234947204589844], + [-0.19754952192306519, 8.341083526611328], + [2.023833990097046, 4.789100646972656], + [-2.8926854133605957, -0.9818222522735596], + [0.7282798290252686, -5.797672748565674], + [-4.242130279541016, -2.1598293781280518], + [-4.860300064086914, 4.694502830505371], + [-6.114603519439697, 8.152663230895996], + [0.6221155524253845, -6.07523250579834], + [2.4951696395874023, 6.18544340133667], + [2.616281270980835, 6.646112442016602], + [2.805803060531616, -4.803244590759277], + [-3.3391928672790527, -1.233885645866394], + [4.446846961975098, 7.2106218338012695], + [0.8060234189033508, -8.113290786743164], + [-5.368610858917236, -0.9271988868713379], + [-4.37219762802124, -1.9797049760818481], + [-3.941673994064331, -1.0624949932098389], + [-0.416053831577301, -2.897092580795288], + [-5.073944568634033, -0.876040518283844], + [-4.363128185272217, -0.8165795803070068], + [3.295642137527466, -5.133767604827881], + [0.9957988858222961, 3.5928945541381836], + [-4.412682056427002, -1.5237032175064087], + [1.3519480228424072, -4.6966681480407715], + [1.3430883884429932, 1.9798001050949097], + [5.758832931518555, -2.5515830516815186], + [-1.1980699300765991, 11.279261589050293], + [-5.186840057373047, 7.716974258422852], + [5.403947353363037, -2.1316959857940674], + [0.7949609756469727, -4.388248920440674], + [0.3135386109352112, -5.881865501403809], + [2.7937822341918945, 4.510441780090332], + [-0.7510883808135986, -3.5236570835113525], + [0.32746636867523193, -6.204745769500732], + [-0.012297280132770538, -5.355559825897217], + [0.9184363484382629, 8.10403060913086], + [-1.116201400756836, 5.85004997253418], + [-3.7394959926605225, 5.561578273773193], + [-1.08390212059021, 10.31439208984375], + [-4.746612071990967, -3.5997464656829834], + [7.465126991271973, -2.1884870529174805], + [0.0361112579703331, -4.644043922424316], + [4.533255100250244, 7.441088676452637], + [0.5326504111289978, -4.566540718078613], + [-0.7708213329315186, -1.1763800382614136], + [-2.727210760116577, 4.847771167755127], + [-3.8045246601104736, -1.8990391492843628], + [2.657831907272339, -4.173452377319336], + [2.6831586360931396, 0.4545959234237671], + [2.3098413944244385, -4.666028022766113], + [-1.9115475416183472, 2.1614882946014404], + [-2.782233238220215, -3.162536382675171], + [1.5749835968017578, -7.096384048461914], + [-4.318619251251221, 4.562963962554932], + [6.758531093597412, -2.0999114513397217], + [6.344905853271484, -4.378293991088867], + [2.9587514400482178, -4.643174648284912], + [1.0370712280273438, 0.2573706805706024], + [-0.8344199061393738, 10.263256072998047], + [2.042978286743164, -5.46290922164917], + [-0.40411874651908875, -2.2030558586120605], + [-1.8776646852493286, 1.761440634727478], + [-3.572526454925537, 4.8629469871521], + [0.25914710760116577, 4.542355060577393], + [-1.6137703657150269, -0.6771370768547058], + [1.4759912490844727, -4.123944282531738], + [0.6536346077919006, -4.156777858734131], + [0.6883897185325623, -8.142193794250488], + [-2.528186559677124, 0.18323522806167603], + [9.58423137664795, -3.041043519973755], + [-4.260988235473633, -1.2137922048568726], + [1.8474987745285034, -4.168393135070801], + [3.659834146499634, -1.8476215600967407], + [7.6727824211120605, -2.3210866451263428], + [0.6088530421257019, -7.099282264709473], + [-3.423527479171753, 3.0342233180999756], + [-0.48639702796936035, 9.519360542297363], + [8.282960891723633, -2.869511365890503], + [-5.093862056732178, 0.8863945007324219], + [-4.072478771209717, -3.3021304607391357], + [0.7509286999702454, -7.334436893463135], + [-3.515159845352173, -1.7160757780075073], + [-1.1050124168395996, 10.480262756347656], + [-1.1544755697250366, 1.749266505241394], + [2.509754180908203, -5.245780944824219], + [6.057925701141357, -2.0287728309631348], + [1.7856810092926025, 2.246776580810547], + [0.6160758137702942, -7.984170436859131], + [0.6197008490562439, -8.405961990356445], + [-3.210622549057007, -1.0984508991241455], + [-1.2992812395095825, 11.542999267578125], + [0.7362047433853149, -5.4148173332214355], + [-0.6368800401687622, 9.37014389038086], + [-3.1520237922668457, 4.067196846008301], + [1.7283694744110107, 3.8298909664154053], + [-3.298977851867676, -0.7698845863342285], + [3.5727901458740234, 7.242807865142822], + [-0.29095935821533203, -1.5914283990859985], + [-2.3292012214660645, -0.0026675499975681305], + [-0.861572802066803, 10.2891845703125], + [6.047070026397705, -1.9239599704742432], + [-4.178438663482666, -0.5424637198448181], + [-2.221973180770874, 0.8961845636367798], + [1.390339732170105, 4.36852502822876], + [6.743481159210205, -1.5194604396820068], + [-0.9106821417808533, 10.882579803466797], + [0.5628170967102051, -6.564907073974609], + [-3.8034560680389404, -2.066157817840576], + [6.965906143188477, -2.3849587440490723], + [-0.3961907625198364, 5.493375778198242], + [-5.010107517242432, -1.228131890296936], + [7.314993381500244, -2.355663299560547], + [-2.7128264904022217, -1.588091492652893], + [0.6315657496452332, -7.832733154296875], + [5.833491802215576, -5.600235939025879], + [0.3400130271911621, -5.277313232421875], + [-1.736989140510559, 0.9442415237426758], + [0.46601980924606323, -5.158021450042725], + [5.404171943664551, -3.9430480003356934], + [0.37997907400131226, -6.687150955200195], + [-0.39796918630599976, 9.632416725158691], + [-3.8933656215667725, -1.7943236827850342], + [2.1619961261749268, 3.8375446796417236], + [1.9714884757995605, -3.640925884246826], + [-3.9065921306610107, -3.4860942363739014], + [-0.8746145367622375, 10.910850524902344], + [-3.127579927444458, -1.8787401914596558], + [-1.9470469951629639, 2.003652572631836], + [-1.689590573310852, 1.3896610736846924], + [1.976619005203247, 1.0840226411819458], + [2.099348783493042, -4.749637603759766], + [0.24551883339881897, -4.024538040161133], + [0.28376755118370056, -0.985110878944397], + [-0.5298914909362793, -1.0945309400558472], + [-3.8315560817718506, -2.493152141571045], + [-4.6687211990356445, -1.6963316202163696], + [-3.44010853767395, -1.0479274988174438], + [-0.652034342288971, 10.119589805603027], + [-4.600749492645264, 6.102222442626953], + [8.747493743896484, -2.7620341777801514], + [0.844271719455719, 0.6649500727653503], + [-4.18366003036499, 4.409445762634277], + [-3.602297067642212, -2.435368537902832], + [0.7675395607948303, -0.5074673295021057], + [1.2918741703033447, 0.26409220695495605], + [-3.7879347801208496, -1.2526150941848755], + [1.5453338623046875, 1.778106689453125], + [-1.124506950378418, 11.35324478149414], + [-4.380432605743408, -2.9042179584503174], + [2.6356639862060547, -4.237717151641846], + [8.262675285339355, -2.469813346862793], + [0.9991961121559143, 0.040776368230581284], + [1.7902247905731201, 2.6474430561065674], + [4.7641987800598145, 7.549192905426025], + [-1.0475842952728271, 9.929445266723633], + [-1.9349048137664795, 1.5127159357070923], + [-1.8171218633651733, -0.34238797426223755], + [-4.057097434997559, -3.5920536518096924], + [-4.403413772583008, 6.144569396972656], + [-2.043044090270996, 6.298332691192627], + [0.3965311646461487, -7.605437278747559], + [-5.117377758026123, -5.28236198425293], + [2.990591526031494, -4.662925720214844], + [2.6739931106567383, -4.411107540130615], + [2.8553178310394287, 5.258698463439941], + [2.1741549968719482, 4.172892093658447], + [-1.0786895751953125, 0.5882649421691895], + [-1.2305190563201904, -0.9027364253997803], + [1.5389841794967651, 5.9601545333862305], + [-3.7273948192596436, 5.513744354248047], + [-3.2575337886810303, -1.3919048309326172], + [-1.3513429164886475, 11.316417694091797], + [-2.7493040561676025, 2.750741720199585], + [-3.9976015090942383, -2.186417818069458], + [2.4300625324249268, 0.652266263961792], + [-4.930437088012695, 5.2334747314453125], + [-5.323204517364502, 4.710741996765137], + [4.632662296295166, 7.629907131195068], + [0.4421824812889099, -4.844738006591797], + [-1.8850171566009521, 5.160040855407715], + [-5.0407795906066895, -0.8654078841209412], + [1.6158790588378906, -5.350620269775391], + [7.615173816680908, -2.6312973499298096], + [1.0382657051086426, 0.6055862307548523], + [-5.564473628997803, 6.004006385803223], + [-3.7784502506256104, -1.883809208869934], + [0.7452143430709839, 0.05827438458800316], + [2.0492794513702393, 5.606983184814453], + [-1.545971155166626, 1.7615351676940918], + [1.350466012954712, 0.3293895125389099], + [-3.445120334625244, -1.0302637815475464], + [-0.2503138780593872, -1.8525817394256592], + [-2.6337602138519287, 2.668605089187622], + [-2.704360008239746, 2.780672073364258], + [-3.3307178020477295, -1.2989518642425537], + [0.6395989060401917, -6.5177812576293945], + [-1.143456220626831, 10.656473159790039], + [-3.460958242416382, 5.179256439208984], + [0.6017966866493225, -8.449508666992188], + [0.7785993814468384, 5.730282306671143], + [-3.8190314769744873, -1.703193187713623], + [-3.432176351547241, -2.2845230102539062], + [-1.2681947946548462, 11.92149829864502], + [4.473141193389893, 7.551669120788574], + [-2.8918163776397705, 0.620529055595398], + [1.8148475885391235, 3.4705944061279297], + [-0.6157413125038147, 10.461670875549316], + [-3.6388769149780273, 3.58457350730896], + [-5.729340553283691, 7.728512763977051], + [1.206077218055725, -5.7517499923706055], + [6.752029895782471, -3.1160788536071777], + [6.960565090179443, -2.381566286087036], + [-2.063555955886841, -0.28997746109962463], + [2.3730661869049072, -4.109443187713623], + [2.1650230884552, -4.436842441558838], + [-2.2828447818756104, -2.4541611671447754], + [1.4627118110656738, 0.24108541011810303], + [-2.854243516921997, 6.259116172790527], + [-4.432401180267334, -2.379791259765625], + [2.6987905502319336, -4.574037075042725], + [-3.5188748836517334, -1.1735469102859497], + [-1.6701160669326782, -1.22776198387146], + [0.6770687699317932, -8.402290344238281], + [-0.48133379220962524, 9.723638534545898], + [0.9047209620475769, -6.589166641235352], + [2.543931007385254, -4.425748825073242], + [-1.1368298530578613, 10.435636520385742], + [-4.411076068878174, -1.5820775032043457], + [-3.1832005977630615, 6.797256946563721], + [2.171980381011963, -5.898082256317139], + [-0.4077267348766327, -1.3753937482833862], + [-5.419754981994629, 8.091635704040527], + [1.849772334098816, 5.701484680175781], + [-1.3557116985321045, 11.344658851623535], + [-3.4436070919036865, -1.697853922843933], + [-4.167728424072266, -3.20646595954895], + [-3.6204147338867188, -2.5951945781707764], + [-0.734563410282135, 10.346297264099121], + [-1.4446765184402466, 12.330918312072754], + [4.721596717834473, -0.46192193031311035], + [6.8986639976501465, -3.9736199378967285], + [-3.672983169555664, -2.348748207092285], + [0.7248691916465759, -7.381695747375488], + [-5.457255840301514, 6.5149736404418945], + [0.6070385575294495, -0.17577114701271057], + [8.27073860168457, -3.057258367538452], + [0.09247412532567978, -4.402037143707275], + [-4.019440174102783, -2.183647394180298], + [-2.9087865352630615, 3.068777084350586], + [-4.352445125579834, 5.500580787658691], + [1.4032665491104126, 0.6782334446907043], + [-4.438293933868408, -1.342228651046753], + [8.040726661682129, -2.632197618484497], + [-0.64542156457901, 10.093608856201172], + [1.6045968532562256, -5.90020751953125], + [0.8214026689529419, -0.09962667524814606], + [2.2401845455169678, 4.193903923034668], + [-1.4685968160629272, 12.031496047973633], + [0.37365448474884033, -6.421114921569824], + [9.21391773223877, -2.8901398181915283], + [-2.004866123199463, 2.1064963340759277], + [6.4270920753479, -1.654331088066101], + [1.6001626253128052, -6.668365001678467], + [-4.168050289154053, 4.781273365020752], + [-2.3481674194335938, -1.0216264724731445], + [2.241612672805786, -4.205713272094727], + [-4.930218696594238, 6.890181541442871], + [7.788800239562988, -2.660139322280884], + [7.658199310302734, -2.729766607284546], + [-2.9401609897613525, 6.531981945037842], + [5.143496036529541, -3.9733121395111084], + [0.9138068556785583, -5.338634490966797], + [8.12856674194336, -2.9809298515319824], + [4.081515789031982, -3.829498052597046], + [2.3269665241241455, -5.353898525238037], + [1.4466279745101929, 4.716635704040527], + [-4.0237956047058105, -1.2904467582702637], + [0.5853930711746216, -5.15873908996582], + [-5.465664386749268, 6.960126876831055], + [2.4999611377716064, 5.320030689239502], + [-1.0652081966400146, 10.876399040222168], + [-1.8078075647354126, 0.594176173210144], + [1.1590063571929932, -5.87186861038208], + [0.13058876991271973, -4.702903747558594], + [-3.4949305057525635, -1.4497374296188354], + [0.7105735540390015, -6.44597053527832], + [0.0818311795592308, -4.503518581390381], + [-4.126513957977295, 6.190878868103027], + [-5.14050817489624, 6.3718061447143555], + [-4.290378093719482, -3.079292058944702], + [0.7613743543624878, -4.702668190002441], + [-5.142879962921143, 6.851657867431641], + [-3.6947057247161865, -1.969178318977356], + [-4.315961837768555, -2.951838254928589], + [2.3341774940490723, 3.7321436405181885], + [-4.040389537811279, -2.7821879386901855], + [-1.6665271520614624, 1.3153678178787231], + [-3.6109554767608643, 3.849600076675415], + [-5.79658317565918, 4.443317890167236], + [-3.9423305988311768, -1.9028961658477783], + [0.10916709154844284, -5.550642013549805], + [0.5569161176681519, -7.116687297821045], + [-1.3091554641723633, 11.213509559631348], + [-0.9093862175941467, 10.637109756469727], + [5.449497222900391, -1.2434425354003906], + [3.993455171585083, 7.421631336212158], + [-3.622814655303955, 6.833893299102783], + [-4.0310516357421875, -1.935482382774353], + [2.9588799476623535, -4.578549385070801], + [-0.9894266128540039, 1.046830654144287], + [-4.378288269042969, 6.643936634063721], + [0.6750523447990417, -9.310589790344238], + [-0.7229772210121155, 10.619562149047852], + [-2.626035213470459, 0.3530231714248657], + [-3.9181101322174072, -2.430633306503296], + [0.2671036720275879, -6.294594764709473], + [0.14244049787521362, 5.463087558746338], + [0.44689667224884033, -6.5725603103637695], + [0.9699984192848206, -5.4225263595581055], + [2.4558770656585693, 6.00806999206543], + [2.0230002403259277, 6.226381301879883], + [-1.2716459035873413, 11.456907272338867], + [-2.6589503288269043, -0.7562047243118286], + [-5.676382064819336, -0.6591876745223999], + [-4.202045917510986, -0.5979489684104919], + [2.3734047412872314, -5.297177314758301], + [6.112822532653809, -1.2871545553207397], + [5.522243022918701, 8.342466354370117], + [-1.7789838314056396, 0.5048258304595947], + [2.560344934463501, 6.388792037963867], + [0.6135115027427673, -7.789327144622803], + [-3.9643852710723877, 3.874781370162964], + [-3.2067480087280273, -1.219107747077942], + [-1.4349007606506348, 12.171477317810059], + [-0.2215251326560974, 8.796460151672363], + [-3.698878049850464, 6.172889709472656], + [-1.5422790050506592, 12.07856273651123], + [5.691786289215088, -3.8292980194091797], + [2.865893840789795, -3.2409698963165283], + [-0.2692587375640869, 8.266082763671875], + [6.71401309967041, -4.680699348449707], + [1.957340955734253, 5.112067222595215], + [-0.22843801975250244, 9.080029487609863], + [-2.0534465312957764, 1.308510422706604], + [1.496259093284607, 0.020671363919973373], + [-3.5238068103790283, -0.38178694248199463], + [-4.689122676849365, 6.478305816650391], + [-2.3929555416107178, -2.467512845993042], + [2.660902738571167, 5.777519702911377], + [2.414181709289551, 6.126605033874512], + [-5.289261341094971, 3.3476955890655518], + [3.9611189365386963, -3.8013699054718018], + [0.9831900000572205, 6.1442365646362305], + [-5.617555141448975, 7.049924850463867], + [-1.7915523052215576, 1.7847241163253784], + [8.745468139648438, -2.6959288120269775], + [5.973550319671631, -1.6261087656021118], + [-2.960650682449341, -1.2124251127243042], + [-3.8072807788848877, -2.8580238819122314], + [-0.31967514753341675, 10.412055969238281], + [-4.271500110626221, -0.8446139097213745], + [7.617370128631592, -3.1330978870391846], + [3.1923022270202637, -3.418574571609497], + [1.7073237895965576, 3.6435794830322266], + [-1.1794627904891968, -0.22996044158935547], + [1.3619965314865112, 4.220888137817383], + [8.143010139465332, -2.655595064163208], + [-2.919201374053955, -1.225339651107788], + [0.9930047392845154, 0.184091717004776], + [-3.6092755794525146, -2.5098326206207275], + [-0.0011274293065071106, -1.1304787397384644], + [-0.43848085403442383, 8.748941421508789], + [-0.9493959546089172, 1.1322104930877686], + [-1.1889606714248657, 10.931266784667969], + [-1.8214479684829712, 1.3631765842437744], + [0.6514697670936584, -8.538226127624512], + [2.772584915161133, -4.806293487548828], + [-5.090696811676025, 1.5143922567367554], + [2.198051691055298, -4.448318958282471], + [-3.0758304595947266, -0.9157174825668335], + [0.5249760746955872, -3.590029001235962], + [-1.279484748840332, 11.471309661865234], + [-4.033649921417236, 5.3126091957092285], + [0.9390258193016052, -6.2063140869140625], + [-3.766730308532715, 4.002538681030273], + [9.328507423400879, -2.9113752841949463], + [1.046459436416626, -5.739109039306641], + [-3.119535207748413, -1.4076862335205078], + [-1.2626489400863647, -3.7570574283599854], + [1.7690272331237793, 4.473589897155762], + [-4.377654552459717, -0.020638946443796158], + [8.235620498657227, -2.636075258255005], + [-1.4998607635498047, 9.91995620727539], + [2.3352768421173096, 0.6362757086753845], + [0.7415919899940491, -6.353280544281006], + [0.40787047147750854, -7.557049751281738], + [-0.13943174481391907, -1.510299801826477], + [2.769012212753296, -4.3448686599731445], + [0.7246490120887756, -9.271657943725586], + [-0.26242589950561523, -1.6907281875610352], + [5.765803337097168, -1.312780737876892], + [-4.407752513885498, -0.7577489614486694], + [1.531587839126587, 0.32766979932785034], + [0.5370321869850159, -7.7140913009643555], + [6.869226455688477, -2.127988576889038], + [9.234489440917969, -2.8357579708099365], + [-2.9414010047912598, -0.9265949130058289], + [0.8276561498641968, -5.257826328277588], + [1.0400400161743164, -5.500596523284912], + [2.304651975631714, 4.897315979003906], + [9.01475715637207, -2.6875264644622803], + [-1.7666817903518677, 2.3225018978118896], + [-5.28372049331665, -0.6108740568161011], + [-1.8920925855636597, 2.5059146881103516], + [-3.77856183052063, -2.9189326763153076], + [-1.5767050981521606, 12.730094909667969], + [-4.242459774017334, 6.403077125549316], + [4.981837749481201, 7.827855110168457], + [0.5659985542297363, -8.027200698852539], + [-2.086829900741577, -2.7387144565582275], + [-4.27979850769043, -2.3022167682647705], + [2.6411402225494385, -4.491537570953369], + [2.5968799591064453, 5.852945327758789], + [-2.8823728561401367, -0.7522375583648682], + [-1.639733076095581, -0.7620353698730469], + [-0.331229567527771, -1.1487022638320923], + [-4.1446027755737305, -4.009688377380371], + [-0.9074856042861938, 8.776453018188477], + [-4.805084705352783, -0.5008928775787354], + [-4.6826395988464355, -0.7291819453239441], + [-0.3896450996398926, -1.9698989391326904], + [-0.13093531131744385, -3.623677968978882], + [6.17293119430542, -2.7419745922088623], + [8.820454597473145, -2.7167794704437256], + [1.411842942237854, -4.320941925048828], + [2.3707823753356934, -5.4360456466674805], + [-3.5862009525299072, 3.5012800693511963], + [-3.880035161972046, -1.970701813697815], + [-4.6171040534973145, 6.679758071899414], + [0.2317773997783661, -4.408267974853516], + [1.0978344678878784, 0.21404817700386047], + [3.049124240875244, -5.193819046020508], + [-0.6409422159194946, 10.132608413696289], + [-0.9741331338882446, 9.497488021850586], + [0.5659560561180115, -6.569410800933838], + [-1.448065161705017, 0.7578474283218384], + [1.7602752447128296, 2.2517452239990234], + [-0.8049481511116028, 10.859027862548828], + [3.1690990924835205, -4.923058986663818], + [-2.090540885925293, 1.528300166130066], + [-1.8084913492202759, 2.2703638076782227], + [-3.4385759830474854, -1.9825602769851685], + [-1.3316854238510132, 0.5385119915008545], + [3.6752395629882812, 6.991664886474609], + [0.4594023823738098, -7.761037349700928], + [-4.183332920074463, 5.151195526123047], + [0.8140249848365784, -8.845046997070312], + [-3.974910020828247, 0.0756833553314209], + [-2.374753475189209, -0.14787232875823975], + [-3.6897408962249756, -1.7003494501113892], + [5.290894031524658, 8.297057151794434], + [1.1478524208068848, -5.049576282501221], + [-4.29290246963501, -1.7533668279647827], + [-3.7942612171173096, -2.738560199737549], + [2.7217187881469727, 6.061092376708984], + [-5.263503551483154, -0.5982463955879211], + [-0.2751452326774597, 6.869813919067383], + [-3.4852983951568604, -1.5328261852264404], + [-5.4688334465026855, 7.106388092041016], + [-4.235012054443359, -2.653566360473633], + [2.277728319168091, -4.011688709259033], + [-3.8190340995788574, 6.059304714202881], + [-4.766982078552246, 5.952493667602539], + [0.7222945094108582, -9.02659797668457], + [0.6185072064399719, -7.012184143066406], + [-1.2802261114120483, 11.618496894836426], + [0.5401458144187927, -7.848045349121094], + [4.761611461639404, 7.7669901847839355], + [-3.8990113735198975, -1.7381527423858643], + [2.632605791091919, -4.616778373718262], + [0.44415682554244995, -5.772787094116211], + [-1.2625716924667358, 11.445621490478516], + [1.653343915939331, -5.114971160888672], + [-2.0881845951080322, 2.257751941680908], + [-0.33613771200180054, 8.324420928955078], + [-3.5060813426971436, -0.836561381816864], + [-0.7798696160316467, 10.068007469177246], + [1.2405089139938354, -5.671065807342529], + [0.6031726598739624, -6.834738731384277], + [0.6284688115119934, -0.4405542016029358], + [7.045535564422607, -3.038264036178589], + [2.514838933944702, -4.560204029083252], + [2.497664213180542, 5.52433967590332], + [-3.5262880325317383, -2.7823712825775146], + [2.8635106086730957, -5.1523847579956055], + [-5.710515022277832, 7.117016315460205], + [-4.214416980743408, -1.3497124910354614], + [-4.7132954597473145, 6.599587440490723], + [-1.0497567653656006, 10.012496948242188], + [0.5826197266578674, -7.9761857986450195], + [-3.984668254852295, -0.9787448644638062], + [6.600496768951416, -1.6099919080734253], + [0.5436151623725891, -4.384865760803223], + [0.022843442857265472, -1.285107135772705], + [0.6674910187721252, -8.894838333129883], + [-3.2390925884246826, -0.78841632604599], + [0.7041324973106384, -8.24151611328125], + [2.7144625186920166, -4.891583442687988], + [-0.9458073973655701, 10.167179107666016], + [-1.10834538936615, 11.214388847351074], + [-3.976466417312622, -2.2287375926971436], + [-2.2386271953582764, 0.01989775523543358], + [0.7131479382514954, -8.359746932983398], + [0.49035775661468506, -7.677392959594727], + [-5.406357288360596, 5.293173313140869], + [2.7488644123077393, -4.333921432495117], + [1.605688214302063, -4.656853675842285], + [4.992616653442383, -4.148036003112793], + [-5.6045241355896, 5.808403968811035], + [-1.376306414604187, 12.031234741210938], + [-0.2532106041908264, -1.6027075052261353], + [-0.23596477508544922, 8.428210258483887], + [-1.350833535194397, 11.345672607421875], + [-0.10413176566362381, -1.0978457927703857], + [1.9996769428253174, -4.30092191696167], + [-4.250319957733154, 4.28257417678833], + [0.7999431490898132, -9.388669967651367], + [-1.9312387704849243, 2.107059955596924], + [4.866612434387207, 7.6970367431640625], + [0.3855472207069397, -5.669789791107178], + [5.640964031219482, -1.2624284029006958], + [0.7090429067611694, -7.812973499298096], + [1.9255189895629883, 4.775085926055908], + [-1.8510186672210693, 1.8657145500183105], + [-1.7288709878921509, 1.7373238801956177], + [-4.244947910308838, -1.6786855459213257], + [2.7614521980285645, -4.481019020080566], + [1.1616361141204834, -0.16638077795505524], + [-3.4500091075897217, 6.104050636291504], + [-0.5776181221008301, -0.9424120187759399], + [2.0973963737487793, -3.842571496963501], + [-2.9875099658966064, 5.037944793701172], + [5.365522861480713, -4.957326412200928], + [1.0533602237701416, -6.674272537231445], + [-0.632381796836853, -1.077273964881897], + [-2.0067052841186523, 2.2565715312957764], + [-1.976379632949829, 1.9513031244277954], + [2.49038028717041, 5.816705226898193], + [-0.7077519297599792, 10.382460594177246], + [-1.0283550024032593, 10.78691577911377], + [8.839637756347656, -2.84560489654541], + [8.044388771057129, -2.4933993816375732], + [-1.5452995300292969, 1.3943053483963013], + [-3.629279851913452, -2.657926321029663], + [-3.651352643966675, 0.43799155950546265], + [0.6943797469139099, -4.593344688415527], + [4.187629699707031, 7.490546703338623], + [0.29886454343795776, -6.668641090393066], + [0.3906736373901367, -5.382760047912598], + [2.067420244216919, -6.042168617248535], + [0.3264769911766052, -4.962959289550781], + [6.653457164764404, -2.9981980323791504], + [-3.7613441944122314, -2.528898000717163], + [2.0443310737609863, 6.154566764831543], + [-1.551975131034851, 12.106053352355957], + [0.8097752928733826, -7.684301853179932], + [1.4651908874511719, -6.8586835861206055], + [-0.024058617651462555, -4.424310684204102], + [-6.423072338104248, 8.588769912719727], + [-3.7593863010406494, -4.442897796630859], + [2.1106293201446533, 5.3448805809021], + [-5.068917274475098, -0.9949971437454224], + [0.6324973702430725, 8.335893630981445], + [-3.7328858375549316, 7.492175102233887], + [-2.9569308757781982, -2.2141029834747314], + [-1.1398541927337646, -3.465524911880493], + [2.19036602973938, -4.22819709777832], + [6.170413494110107, -1.7158514261245728], + [-2.911231756210327, -1.219478964805603], + [9.043862342834473, -2.815706729888916], + [-4.4670796394348145, -1.4095743894577026], + [-5.66001558303833, 7.250062942504883], + [7.094905376434326, -3.106818437576294], + [-4.621671199798584, -1.4730781316757202], + [6.296504497528076, -2.5736424922943115], + [-3.5142085552215576, -1.378214716911316], + [0.48795467615127563, -5.822637557983398], + [2.734192132949829, -4.539846420288086], + [1.7410708665847778, 0.47013169527053833], + [1.9211950302124023, 5.5203962326049805], + [1.1374998092651367, 1.5457696914672852], + [1.5684596300125122, 2.6322591304779053], + [-1.220629334449768, 0.2904950976371765], + [1.439346432685852, -0.07226991653442383], + [-1.5726940631866455, 1.4385409355163574], + [-4.266751289367676, -0.28566795587539673], + [1.1893260478973389, 0.19837632775306702], + [0.3622441291809082, -5.278129577636719], + [-0.7233873605728149, 10.70956802368164], + [0.12582749128341675, -0.9130758047103882], + [7.989928722381592, -2.581446409225464], + [7.907740116119385, -2.5340752601623535], + [-4.073747634887695, -2.8654744625091553], + [-0.2683364450931549, -1.54304039478302], + [6.675779819488525, -3.4177181720733643], + [2.4110443592071533, -4.896596431732178], + [-2.7589406967163086, 3.329723596572876], + [-0.05931220203638077, -4.328347206115723], + [-1.9845863580703735, -0.7270067930221558], + [2.277188301086426, 6.584317207336426], + [1.7903625965118408, 2.188075304031372], + [1.138218641281128, -6.848978042602539], + [-3.690136671066284, -1.3991948366165161], + [-1.8689402341842651, 2.1007580757141113], + [-0.09702775627374649, -2.9939568042755127], + [-5.643092155456543, -0.7178586721420288], + [-1.864775538444519, 1.5641429424285889], + [-4.4859771728515625, -1.624564528465271], + [-3.7365448474884033, -2.172795057296753], + [4.58358907699585, 7.487643241882324], + [2.017498016357422, 0.6812471151351929], + [-1.4620206356048584, 10.141105651855469], + [-0.6912717223167419, 9.752305030822754], + [-0.8875765204429626, 11.118724822998047], + [2.547489881515503, 5.811446189880371], + [9.282929420471191, -2.9211504459381104], + [-4.838815689086914, 7.340231418609619], + [0.6641213297843933, -8.115562438964844], + [1.3311247825622559, 1.380271315574646], + [-3.3650028705596924, 4.828738212585449], + [2.316659927368164, -4.218834400177002], + [0.6176325678825378, -7.908810138702393], + [-2.8654775619506836, -1.165371060371399], + [-3.9716498851776123, 6.543337821960449], + [-5.583864688873291, -0.8655127882957458], + [-1.6069132089614868, 13.241059303283691], + [0.24821549654006958, 8.640949249267578], + [-0.8150259852409363, 10.354618072509766], + [7.9076409339904785, -2.5716946125030518], + [3.0325207710266113, -4.768265724182129], + [-1.48197603225708, 12.72102165222168], + [-1.113713026046753, 10.582008361816406], + [-1.27788507938385, -0.6293082237243652], + [5.758577823638916, -4.183005332946777], + [-5.205103397369385, 6.8256120681762695], + [3.211012125015259, -5.011710166931152], + [2.79239559173584, -3.7683990001678467], + [-3.6878907680511475, -1.0048978328704834], + [-0.26854461431503296, -2.1828677654266357], + [1.7674648761749268, 3.6353511810302734], + [-1.0513545274734497, 10.919767379760742], + [0.8713733553886414, -10.39399528503418], + [2.2339611053466797, -4.9224958419799805], + [-1.0688890218734741, 10.31124496459961], + [-1.8137032985687256, 1.6407023668289185], + [3.9412753582000732, 7.141139984130859], + [0.9178000092506409, -6.844205379486084], + [-4.644747257232666, -2.0577027797698975], + [4.84148645401001, 7.78940486907959], + [-5.010499477386475, -0.57068932056427], + [2.256469964981079, 5.494646072387695], + [-1.8694486618041992, 1.7948936223983765], + [5.316914081573486, -1.2192113399505615], + [1.1875392198562622, -5.220117568969727], + [-1.9186879396438599, 2.043215274810791], + [-3.656710386276245, -0.05043518915772438], + [0.7809475064277649, -6.5096211433410645], + [0.9758836627006531, -5.3363237380981445], + [-1.1480114459991455, 10.604249954223633], + [-0.5005078315734863, 0.4736347198486328], + [0.37916868925094604, -6.684626579284668], + [-2.2632651329040527, -0.9024152755737305], + [1.232923150062561, -0.07372614741325378], + [-4.388605117797852, 4.92388916015625], + [-3.68751859664917, -2.022056818008423], + [7.158817291259766, -4.930480480194092], + [2.6942317485809326, 6.244953155517578], + [7.695681095123291, -2.4373960494995117], + [-0.47736895084381104, 5.660606861114502], + [-1.4752756357192993, -0.6942464709281921], + [-3.647001028060913, 0.12305200099945068], + [-1.4440622329711914, 12.552689552307129], + [-4.67590856552124, 5.465624809265137], + [-0.4648202657699585, 10.280082702636719], + [1.958890676498413, 5.800326347351074], + [8.063831329345703, -2.3150553703308105], + [0.7643913626670837, -8.877408981323242], + [-1.0369116067886353, -3.210066080093384], + [1.3741209506988525, -4.550584316253662], + [8.389508247375488, -2.7401490211486816], + [8.014191627502441, -3.4512927532196045], + [2.4418177604675293, 6.3810648918151855], + [0.7590858340263367, -8.890303611755371], + [2.184459924697876, -4.646957874298096], + [-0.21957671642303467, -1.7713326215744019], + [0.6291406750679016, -7.153369903564453], + [2.748364210128784, -4.936742305755615], + [8.732593536376953, -3.1877734661102295], + [8.147637367248535, -2.804884672164917], + [1.9528312683105469, -5.336020469665527], + [-5.027657508850098, 7.383689880371094], + [-4.993116855621338, -1.299478530883789], + [-1.7914625406265259, 0.36296167969703674], + [3.612968921661377, 6.942118167877197], + [-1.5461946725845337, 1.1324071884155273], + [0.8108935952186584, -7.14830207824707], + [1.4243292808532715, 3.483764886856079], + [-2.3054163455963135, 5.499974250793457], + [6.775135517120361, -2.1796329021453857], + [-1.3202499151229858, 11.541435241699219], + [-3.7559268474578857, -3.004333257675171], + [3.0527751445770264, -5.147442817687988], + [0.9814414381980896, -4.729150772094727], + [0.6169381737709045, -7.584643363952637], + [-1.3208262920379639, 11.68979263305664], + [0.43282079696655273, -7.818544387817383], + [2.829709768295288, -4.7271928787231445], + [9.36755084991455, -2.952974557876587], + [-3.4310362339019775, -1.3766456842422485], + [2.6740612983703613, -3.4053871631622314], + [6.1114182472229, -1.4837538003921509], + [-3.759553909301758, -1.7771079540252686], + [-1.938507318496704, -0.6067148447036743], + [2.7745072841644287, -4.465077877044678], + [5.964513301849365, -2.8646340370178223], + [-5.092703342437744, 6.984234809875488], + [-5.604257583618164, 7.220123767852783], + [3.0046229362487793, 6.657927513122559], + [0.7627862691879272, -6.573315620422363], + [7.886447429656982, -2.83204984664917], + [-2.1134438514709473, 2.331904649734497], + [-0.5338691473007202, -0.8160707950592041], + [2.983881711959839, -4.8731889724731445], + [0.7547651529312134, -4.676658630371094], + [-2.6058316230773926, -1.059519648551941], + [1.048465371131897, -0.4576157331466675], + [0.23662686347961426, -5.531164169311523], + [3.766549825668335, 7.134032726287842], + [-3.9949703216552734, -2.9249892234802246], + [-2.584944725036621, -3.9979302883148193], + [1.3346397876739502, -5.085987091064453], + [-4.347153186798096, -1.9177190065383911], + [2.7764761447906494, -4.658934593200684], + [1.7117574214935303, 3.93107533454895], + [-3.7298686504364014, 5.964690208435059], + [-0.6789798140525818, 8.412893295288086], + [0.4800192713737488, -6.5542707443237305], + [2.337752103805542, 5.585322380065918], + [1.379246711730957, 0.6183748245239258], + [-4.045045852661133, -1.429495930671692], + [1.8261933326721191, 4.991012096405029], + [2.06807279586792, 0.8219157457351685], + [-2.8282673358917236, -1.1607502698898315], + [-2.6111857891082764, -0.182664155960083], + [-1.8975913524627686, 1.212282657623291], + [0.7257922887802124, -0.07396423816680908], + [-5.020977020263672, 6.922135829925537], + [-4.430227279663086, -3.426877737045288], + [-4.20803165435791, 5.060705184936523], + [8.05997371673584, -2.9309332370758057], + [1.178274154663086, -5.6331892013549805], + [-0.250322550535202, -1.3661812543869019], + [-3.5766513347625732, -2.596848726272583], + [-5.407785415649414, 6.924358367919922], + [-3.765571355819702, -2.0068392753601074], + [-3.7397279739379883, 5.767830848693848], + [4.542425155639648, 7.351827621459961], + [0.5922831892967224, -7.781682968139648], + [0.919894278049469, -6.4066009521484375], + [-3.962477207183838, 3.976430654525757], + [-3.368364095687866, -2.4479174613952637], + [0.8372593522071838, -6.353020191192627], + [0.8326442837715149, -0.1421068012714386], + [0.7434746026992798, -8.426405906677246], + [5.469869613647461, -3.924643039703369], + [-3.727431535720825, -2.418430805206299], + [-5.055389881134033, -1.2178220748901367], + [-2.54414439201355, 2.5455851554870605], + [-3.2641537189483643, 5.669910430908203], + [-4.152502536773682, -3.2146213054656982], + [-1.2496352195739746, 10.932775497436523], + [-0.6965362429618835, 10.502851486206055], + [4.6274800300598145, 7.73073148727417], + [-4.335907936096191, -3.5572335720062256], + [-0.47335249185562134, 9.763874053955078], + [3.2692110538482666, -5.0438618659973145], + [-2.9315478801727295, -2.159555196762085], + [-5.198525428771973, 4.95488166809082], + [2.5834720134735107, -4.622071266174316], + [-3.6055991649627686, -1.7151224613189697], + [1.8625564575195312, 1.2639390230178833], + [0.9727299809455872, -4.360756874084473], + [-3.73058819770813, -0.7694711089134216], + [2.881277322769165, -4.774204254150391], + [-0.13678133487701416, -2.495105743408203], + [0.13077741861343384, -5.5499114990234375], + [1.2058331966400146, -5.642317295074463], + [-0.0903078094124794, -2.751030683517456], + [-3.4855263233184814, -1.6367205381393433], + [-1.6713922023773193, 1.110744595527649], + [-4.251725673675537, -2.7530739307403564], + [-3.4739675521850586, -1.6805919408798218], + [2.992642641067505, -4.650476455688477], + [-2.7604174613952637, 0.4602500796318054], + [1.0692222118377686, 4.400055408477783], + [-0.376517653465271, 9.456831932067871], + [-0.45896315574645996, 8.774230003356934], + [2.2287940979003906, -4.180110931396484], + [0.16729187965393066, -4.499432563781738], + [-0.9211259484291077, 10.585858345031738], + [6.045602321624756, -2.02620005607605], + [8.853848457336426, -2.64874529838562], + [1.9326508045196533, 0.8736253976821899], + [0.38497862219810486, -4.5515828132629395], + [8.386502265930176, -2.8054137229919434], + [-0.5243898034095764, 9.939325332641602], + [-4.212296009063721, -3.211303949356079], + [2.5878639221191406, 0.6114680767059326], + [-0.48854947090148926, 9.033662796020508], + [-4.199097156524658, -1.2136671543121338], + [6.935952186584473, -2.3607349395751953], + [7.657354354858398, -2.570056676864624], + [-0.8268598914146423, 10.382253646850586], + [0.3402438163757324, -4.958595275878906], + [-0.7302910089492798, 10.138629913330078], + [-0.5460629463195801, -1.0731568336486816], + [0.46656543016433716, -7.527244567871094], + [1.300907850265503, 4.529585361480713], + [-0.5680177807807922, 9.652708053588867], + [-3.602097988128662, 5.198498249053955], + [0.8870216012001038, 1.6118583679199219], + [2.770371198654175, -4.3292083740234375], + [-4.76190710067749, 5.299283981323242], + [0.8962345123291016, -6.510307312011719], + [-4.642786502838135, -1.0430220365524292], + [-3.353400707244873, -1.0892492532730103], + [-0.634674072265625, -1.7997020483016968], + [-1.6205440759658813, -0.34372514486312866], + [-4.526579856872559, -0.639535665512085], + [3.2996134757995605, 6.027129173278809], + [0.7606909871101379, 5.784887313842773], + [-3.735853910446167, -0.9327359199523926], + [0.1559678316116333, -5.867312431335449], + [-2.4102251529693604, -1.5023105144500732], + [0.5513564944267273, -0.9760997295379639], + [-1.0880677700042725, 1.0967315435409546], + [9.599191665649414, -2.9247608184814453], + [-3.8219525814056396, -2.4534428119659424], + [-0.6477149128913879, 10.187368392944336], + [2.349571466445923, 5.488232612609863], + [2.8982999324798584, -4.658514022827148], + [2.434115409851074, -3.879673719406128], + [0.8860107064247131, -0.16486075520515442], + [-0.18080252408981323, 8.862127304077148], + [-1.9850401878356934, 0.7426168918609619], + [-1.1031101942062378, 11.092256546020508], + [2.663001775741577, -4.603657245635986], + [0.6829357743263245, -7.206178188323975], + [2.3425133228302, -4.858728408813477], + [0.547184944152832, -6.330239295959473], + [-1.9705642461776733, 2.1037306785583496], + [0.41824787855148315, -7.053049087524414], + [-3.6546781063079834, -0.6243778467178345], + [-1.9407627582550049, 0.5411716103553772], + [1.7331782579421997, -4.138838291168213], + [1.8298988342285156, 1.3027377128601074], + [0.8951625227928162, -5.837205410003662], + [-2.7650411128997803, -0.026885155588388443], + [2.7455625534057617, -4.433291435241699], + [0.5924045443534851, -0.3389570713043213], + [2.8369927406311035, -4.704098701477051], + [6.976358413696289, -2.369298219680786], + [3.012249708175659, -5.2357072830200195], + [3.1231696605682373, -4.842831134796143], + [-3.2433817386627197, 5.015592575073242], + [-1.5293889045715332, 5.064608097076416], + [-2.09482741355896, 0.39430710673332214], + [0.26099276542663574, -6.576289176940918], + [-0.40618735551834106, 9.974593162536621], + [-0.37210583686828613, -0.7283315658569336], + [-1.4636335372924805, 12.579277038574219], + [-1.0301488637924194, 10.977954864501953], + [7.022187232971191, -2.981821298599243], + [-5.263577461242676, 6.998939514160156], + [3.7546331882476807, 6.646481037139893], + [-4.771838188171387, 6.452675819396973], + [-0.035549528896808624, -4.5961737632751465], + [-2.00864839553833, 1.8477882146835327], + [-3.998059034347534, 5.902225494384766], + [3.2158257961273193, 6.570833683013916], + [-0.4808153510093689, 9.417743682861328], + [5.639664173126221, -1.3523162603378296], + [-4.189866542816162, 5.735500335693359], + [6.4685444831848145, -3.425858974456787], + [-1.3181939125061035, 10.654157638549805], + [-4.3124680519104, 6.9532389640808105], + [-3.9974634647369385, -1.9515141248703003], + [-1.0052679777145386, 9.84716796875], + [-0.4336470365524292, 9.83681869506836], + [0.2376037836074829, -5.90982723236084], + [-0.034116871654987335, 7.952495574951172], + [0.452131450176239, -5.489422798156738], + [-0.6191522479057312, 9.625110626220703], + [-2.6478517055511475, -1.2085081338882446], + [-1.1785593032836914, 11.187201499938965], + [-1.919645071029663, 0.649022102355957], + [6.913992404937744, -3.6696064472198486], + [2.3918588161468506, 0.7130097150802612], + [0.3385986089706421, -6.5994553565979], + [-3.3679139614105225, 4.844762802124023], + [2.5069668292999268, -3.8181278705596924], + [1.3926259279251099, -4.174067974090576], + [0.591035783290863, -6.329811096191406], + [-0.11677635461091995, -1.069647192955017], + [0.6153063774108887, -6.63571834564209], + [-1.508427381515503, 12.225113868713379], + [0.4858194589614868, -6.201927661895752], + [-3.4654808044433594, -2.0042572021484375], + [0.3206872045993805, -5.440840721130371], + [2.044989824295044, 5.42850399017334], + [-0.1095530167222023, -2.8282248973846436], + [1.4761073589324951, 0.09204564988613129], + [-0.33803465962409973, -1.4352774620056152], + [1.7023268938064575, -0.27794593572616577], + [2.3270416259765625, 6.21280574798584], + [3.0057010650634766, 7.220334053039551], + [2.850731611251831, -4.688349723815918], + [2.7913453578948975, 6.6228532791137695], + [1.6004667282104492, 1.2926933765411377], + [0.30938324332237244, -4.224708080291748], + [-4.05048131942749, -2.36370587348938], + [-0.1879519522190094, -2.1208691596984863], + [3.1655027866363525, -4.94155216217041], + [7.96666955947876, -2.8723175525665283], + [0.5263996124267578, -6.473101615905762], + [0.6328125, -6.815793037414551], + [-0.702580451965332, 9.808807373046875], + [-5.167335033416748, 4.868940353393555], + [1.1517372131347656, -6.026278018951416], + [9.398026466369629, -2.761117696762085], + [-1.3290258646011353, 11.358678817749023], + [5.218342304229736, 8.004646301269531], + [-1.9727786779403687, 2.3705127239227295], + [7.276082992553711, -4.245565414428711], + [-1.8436691761016846, -0.6601117253303528], + [-3.3398311138153076, -1.037297010421753], + [4.125210285186768, 7.312109470367432], + [-1.7321467399597168, -0.4118867516517639], + [0.795605480670929, -7.031859397888184], + [-4.790863513946533, 6.967845439910889], + [-2.5081357955932617, -1.1848877668380737], + [0.38321101665496826, -6.265582084655762], + [-5.883360862731934, 7.89284610748291], + [-4.825708389282227, 4.320711135864258], + [-3.7773189544677734, -1.4977387189865112], + [-0.09070707112550735, -1.9047613143920898], + [-4.405375003814697, -1.6491831541061401], + [-3.160922050476074, 5.352614879608154], + [-5.284033298492432, 7.01163387298584], + [-3.9892592430114746, -2.736567258834839], + [-0.4826185405254364, -2.535163164138794], + [7.260268688201904, -2.852229118347168], + [4.483072280883789, 7.283428192138672], + [5.442249298095703, -1.2319512367248535], + [-4.194477558135986, 6.572491645812988], + [-1.7808396816253662, 1.2423018217086792], + [-4.353809356689453, 5.224494934082031], + [2.470365524291992, -4.104784965515137], + [-0.9871050715446472, 2.652015447616577], + [-3.745940923690796, -2.0541436672210693], + [7.0655293464660645, -2.7623703479766846], + [2.5202300548553467, -3.8467867374420166], + [5.3804612159729, -1.2052583694458008], + [7.328068256378174, -2.302661657333374], + [-2.745216131210327, 5.417178153991699], + [-2.9474589824676514, 3.830576181411743], + [1.0886993408203125, -7.024375915527344], + [0.7332698702812195, 5.579193115234375], + [1.6543078422546387, 2.685814142227173], + [1.2933350801467896, -5.445547580718994], + [0.39568185806274414, -5.772487640380859], + [-1.0120718479156494, 10.828387260437012], + [2.6803767681121826, -4.42969274520874], + [0.8993632197380066, -5.196911334991455], + [-3.0853958129882812, -1.1541508436203003], + [6.2828192710876465, -5.143895149230957], + [-5.045915603637695, -1.2322055101394653], + [2.480853796005249, -5.1029253005981445], + [0.8509014844894409, -5.720333576202393], + [-2.3943305015563965, -0.8970613479614258], + [3.9144415855407715, 7.143172740936279], + [0.7719377875328064, -0.5202690958976746], + [2.2067654132843018, 4.668410778045654], + [-3.1634395122528076, -2.1228363513946533], + [2.1722607612609863, 5.332465171813965], + [2.619148015975952, -4.361293792724609], + [-4.1583571434021, 6.969246864318848], + [-3.564595937728882, -1.0331051349639893], + [-3.0066230297088623, -2.162836790084839], + [0.2457643747329712, -6.182036876678467], + [-1.1579755544662476, 3.005070209503174], + [-3.7236177921295166, -1.2739932537078857], + [0.578299343585968, -6.071516990661621], + [0.6702893972396851, -5.515912055969238], + [-4.856000900268555, 5.420995235443115], + [2.197688341140747, -3.80680251121521], + [7.706217288970947, -2.7736246585845947], + [2.975456953048706, -4.769509792327881], + [3.523463249206543, 6.426320552825928], + [6.16852331161499, -1.3419808149337769], + [-1.3492885828018188, -0.8833454847335815], + [-0.9489293694496155, 10.435812950134277], + [0.7660450339317322, -6.001765727996826], + [0.4665566086769104, -6.807758331298828], + [7.1078362464904785, -2.2093262672424316], + [0.7729361057281494, -6.835263729095459], + [-4.4765400886535645, -3.1143381595611572], + [0.6055086851119995, -7.613581657409668], + [2.420814037322998, 6.160586833953857], + [1.541191577911377, 1.72945237159729], + [0.4274137616157532, -5.298119068145752], + [4.291200160980225, 7.45375919342041], + [-1.8916670083999634, 1.72511625289917], + [2.372194528579712, 4.739753246307373], + [0.28219226002693176, 4.431085109710693], + [2.9036710262298584, 5.780219554901123], + [-1.3625277280807495, 0.7002393007278442], + [2.290290594100952, -4.314202308654785], + [0.7057541012763977, -0.8828403949737549], + [-4.968542098999023, 5.488940238952637], + [-1.9186592102050781, 2.0573253631591797], + [4.543008804321289, 7.383450508117676], + [2.6906259059906006, -4.363334655761719], + [2.374232530593872, -4.512490272521973], + [-1.7306907176971436, 1.1300878524780273], + [0.774995744228363, 0.8329695463180542], + [1.4507155418395996, 2.080104112625122], + [-3.5005128383636475, -2.28320574760437], + [8.178299903869629, -2.3534252643585205], + [-4.96592378616333, -2.3883252143859863], + [2.618436336517334, -4.412569046020508], + [2.103546142578125, 0.4626409411430359], + [1.933150053024292, 4.4087042808532715], + [-2.751457929611206, 5.579615116119385], + [6.37451696395874, -1.431780219078064], + [0.28582918643951416, 1.7195534706115723], + [0.6902444958686829, -0.6875473856925964], + [-0.3660471439361572, 8.309107780456543], + [-4.5254740715026855, 6.376482009887695], + [0.37086594104766846, -7.225646018981934], + [1.8431334495544434, 5.315949440002441], + [2.4222137928009033, 4.9669904708862305], + [-5.31589937210083, 7.267316818237305], + [-3.522030830383301, -1.0668286085128784], + [-4.610647201538086, 6.661425590515137], + [-2.589477777481079, -0.77459317445755], + [-5.253098964691162, -0.9371222257614136], + [2.6781117916107178, 5.194022178649902], + [-0.1088898554444313, -4.80043363571167], + [7.684112071990967, -2.6874935626983643], + [7.638362407684326, -2.7347629070281982], + [-3.486067056655884, -1.2538888454437256], + [-0.3372480869293213, 8.554343223571777], + [1.9602258205413818, 6.2806549072265625], + [0.7933410406112671, -6.936219215393066], + [1.1015093326568604, 0.3176736533641815], + [-1.3542211055755615, 1.567341923713684], + [7.401601791381836, -3.6846120357513428], + [-3.890432119369507, -3.236405372619629], + [-3.9819319248199463, -1.5429728031158447], + [-4.277883052825928, -2.543062925338745], + [5.858623027801514, -0.9032990336418152], + [2.1403591632843018, 2.784437894821167], + [-1.3752659559249878, 11.243034362792969], + [-3.7445640563964844, -2.2411136627197266], + [-3.2703750133514404, -2.3531382083892822], + [5.808282375335693, -1.3807564973831177], + [1.0543804168701172, -5.501963138580322], + [-1.4389106035232544, 11.897712707519531], + [-3.5182113647460938, -0.877315878868103], + [-6.233922481536865, 5.581293106079102], + [-2.5148308277130127, -2.5230793952941895], + [-1.4948545694351196, -1.293961524963379], + [-3.5555102825164795, 5.289434432983398], + [-1.0475623607635498, -1.093520998954773], + [8.476058006286621, -2.7952308654785156], + [2.231517791748047, 5.660714626312256], + [-1.33591890335083, 11.211832046508789], + [-3.1045334339141846, -0.7674986124038696], + [-4.07722282409668, 5.912663459777832], + [0.07080589979887009, -4.93217658996582], + [1.3090322017669678, -3.6457974910736084], + [2.7194933891296387, -4.668710708618164], + [-4.255531311035156, -2.4027082920074463], + [-3.5453641414642334, -1.1866604089736938], + [0.4561188817024231, -7.399435997009277], + [-4.198070049285889, -0.5723201036453247], + [-5.391377925872803, 6.7826828956604], + [8.103535652160645, -2.4256508350372314], + [-2.4853322505950928, -1.5906099081039429], + [-3.5540902614593506, 0.8778917789459229], + [2.2175772190093994, 5.793079376220703], + [0.2424594759941101, -6.698522567749023], + [-1.112864375114441, 1.5295794010162354], + [0.6591687798500061, -9.134245872497559], + [-4.850741863250732, 0.3539085388183594], + [0.273248553276062, -6.768841743469238], + [-1.8312854766845703, 1.7511003017425537], + [-3.716521978378296, -1.9418104887008667], + [3.587855577468872, -5.162662982940674], + [-5.048094749450684, -1.5483864545822144], + [2.7653648853302, -5.072229862213135], + [-1.2495888471603394, 10.687524795532227], + [-5.655170917510986, -4.8410234451293945], + [8.032255172729492, -2.5920650959014893], + [-0.6233597993850708, 10.192383766174316], + [0.5985398888587952, -7.355230331420898], + [-0.4668080806732178, 9.849796295166016], + [2.955634832382202, -4.792003154754639], + [1.5543709993362427, -7.214875221252441], + [2.939779043197632, -5.01800537109375], + [0.6219246983528137, -4.962848663330078], + [-4.302712440490723, -2.8664305210113525], + [2.30666184425354, 5.3539719581604], + [-1.9378712177276611, 1.0184440612792969], + [-0.18078309297561646, 9.338336944580078], + [0.4655318260192871, -6.942082405090332], + [1.203647255897522, 0.35868003964424133], + [7.438607692718506, -2.4529240131378174], + [0.6521077752113342, -8.083909034729004], + [-4.980754852294922, 6.50947380065918], + [-1.1440598964691162, 10.899538040161133], + [7.308578014373779, -2.302546739578247], + [-3.6359264850616455, -1.8483952283859253], + [-4.9345269203186035, -1.2790642976760864], + [-3.7610232830047607, -3.0422494411468506], + [-0.6340981125831604, 1.1105767488479614], + [-4.728816986083984, -1.3267544507980347], + [-1.5672039985656738, 12.175983428955078], + [-0.7683917880058289, 10.552033424377441], + [-4.0727972984313965, -1.4040755033493042], + [7.837557792663574, -3.4963266849517822], + [-0.5773215889930725, -1.3845585584640503], + [1.1267163753509521, -5.409514904022217], + [4.3970770835876465, 7.611947059631348], + [0.48759686946868896, -7.475574493408203], + [1.4224363565444946, -4.6390838623046875], + [2.7281527519226074, -4.314053535461426], + [1.9451539516448975, 4.961381435394287], + [2.599053382873535, 5.85351037979126], + [8.473319053649902, -3.3124635219573975], + [-0.493902325630188, 8.290435791015625], + [6.88575553894043, -1.8496679067611694], + [0.7296932339668274, -5.232429504394531], + [-2.252450704574585, -1.468584418296814], + [0.3804740309715271, -6.158031463623047], + [-0.6453407406806946, 10.187373161315918], + [-1.6625807285308838, 1.6750617027282715], + [-3.6819684505462646, -0.6858254671096802], + [1.648629903793335, 5.920068740844727], + [-4.613945484161377, -3.9088680744171143], + [-3.89375376701355, -0.9097840785980225], + [-5.106319427490234, 1.0054774284362793], + [-3.9249939918518066, -0.7934136390686035], + [1.7645816802978516, 4.75478982925415], + [-4.902167797088623, 4.600942611694336], + [0.7448554039001465, -7.975045204162598], + [0.7730585932731628, -7.770466327667236], + [2.649238348007202, -4.325498104095459], + [-3.6653902530670166, 5.723857879638672], + [-0.48366472125053406, -1.1254637241363525], + [1.455745816230774, -0.3874465227127075], + [-1.8233616352081299, -0.804095983505249], + [-0.07212860137224197, 6.789666175842285], + [3.024552583694458, -4.695441722869873], + [6.5092926025390625, 9.38405990600586], + [2.163693904876709, -4.312929153442383], + [-2.7867684364318848, -1.2192209959030151], + [-3.517946481704712, -0.7751337885856628], + [8.899659156799316, -2.651533365249634], + [7.527059078216553, -2.5309503078460693], + [0.42648816108703613, -6.5982866287231445], + [7.247323036193848, -2.332684278488159], + [2.847830057144165, -4.493900775909424], + [-0.9931343197822571, 10.377618789672852], + [-3.7441275119781494, -2.2608816623687744], + [-0.7404929995536804, -3.2968475818634033], + [-3.5415990352630615, -1.6114308834075928], + [-2.3290648460388184, 0.5732593536376953], + [0.33525651693344116, -6.2101945877075195], + [2.337130069732666, -6.477949142456055], + [-1.724744200706482, 2.0858376026153564], + [2.454763889312744, 4.8445725440979], + [0.6457733511924744, -8.430532455444336], + [1.6872994899749756, 1.1733527183532715], + [-0.1828746199607849, 8.060236930847168], + [-2.991060495376587, -0.8466068506240845], + [5.626795291900635, -3.804979085922241], + [-5.00209379196167, 3.719759941101074], + [-1.8336485624313354, 1.2411073446273804], + [-3.1895110607147217, -0.7969196438789368], + [-3.6750361919403076, -1.3565934896469116], + [7.77047872543335, -2.4582793712615967], + [0.600581169128418, -3.080472230911255], + [-2.0422098636627197, 1.8319042921066284], + [-4.5078887939453125, -3.751699209213257], + [-4.952216625213623, -4.5171003341674805], + [4.45905065536499, 7.567573547363281], + [2.5012025833129883, -4.15534782409668], + [-3.2325308322906494, -1.314115047454834], + [-1.5511369705200195, 0.6283716559410095], + [-5.06632137298584, -3.689439058303833], + [2.2844386100769043, -4.6802496910095215], + [2.5211496353149414, -4.114175319671631], + [-0.034715063869953156, -4.546546936035156], + [-4.081003189086914, -2.9948337078094482], + [-4.655232906341553, -3.590005397796631], + [1.7434245347976685, 0.8534690737724304], + [0.664675235748291, -6.41391658782959], + [-2.4396097660064697, 6.468625068664551], + [-3.64756178855896, -0.10405576229095459], + [2.183152675628662, 5.187587738037109], + [2.3142740726470947, -4.671976089477539], + [3.9729416370391846, -4.686799049377441], + [-4.230978965759277, -2.533364772796631], + [-4.337321758270264, -0.9529547095298767], + [-3.675773859024048, -2.471426486968994], + [-4.7851762771606445, -3.8089675903320312], + [7.287890911102295, -2.127174139022827], + [-2.577840805053711, -1.2137089967727661], + [-3.421783924102783, -0.8502684235572815], + [-2.1716487407684326, 6.080434799194336], + [8.010285377502441, -2.860844612121582], + [0.6912403702735901, -6.93591833114624], + [1.8074650764465332, 0.3078773319721222], + [-3.2930474281311035, 4.992210388183594], + [-1.1795047521591187, 10.415586471557617], + [0.6171901822090149, -8.141654968261719], + [-0.046026743948459625, -4.7407708168029785], + [-2.422640085220337, -0.4401127099990845], + [-2.86367130279541, -1.1600629091262817], + [-3.55228590965271, -0.9601791501045227], + [-4.662380218505859, 1.905264973640442], + [-1.2041490077972412, -3.259695529937744], + [0.5574657917022705, -5.536411285400391], + [-1.005731463432312, 0.20282000303268433], + [1.9276487827301025, 1.015771746635437], + [-4.685537815093994, -0.52361661195755], + [-4.303671836853027, -3.87027907371521], + [1.6332895755767822, 2.7188777923583984], + [0.7874195575714111, -7.482483863830566], + [-4.139058589935303, -2.6832871437072754], + [8.564702033996582, -2.9469168186187744], + [2.4464471340179443, 4.9883270263671875], + [-3.3412978649139404, -0.40842628479003906], + [7.818696022033691, -2.731031894683838], + [2.0385537147521973, 5.153879642486572], + [0.45178353786468506, -7.354204177856445], + [-0.20886951684951782, -1.7536872625350952], + [-3.5499398708343506, -1.72840416431427], + [3.226653814315796, 6.124105930328369], + [-2.0530362129211426, 2.313400983810425], + [-2.865321636199951, -2.164433240890503], + [1.2919609546661377, -0.5875717401504517], + [1.772385835647583, -7.246063232421875], + [-0.19161057472229004, 6.778507232666016], + [-1.668827772140503, 1.3983620405197144], + [2.9204156398773193, -5.663522720336914], + [2.8466529846191406, -4.555031776428223], + [3.715221643447876, -5.1896514892578125], + [-3.7376909255981445, 6.544372081756592], + [1.7111241817474365, 4.025301933288574], + [-3.424433469772339, 4.213437080383301], + [-3.7643165588378906, -1.8558940887451172], + [-4.8245649337768555, -3.8580610752105713], + [-3.8214681148529053, 0.4020373225212097], + [1.940958023071289, 5.47733211517334], + [0.365053653717041, -6.817530632019043], + [-3.163367986679077, 4.95420503616333], + [-2.220310926437378, 4.167428970336914], + [3.9164364337921143, 6.954901218414307], + [6.22758150100708, -3.3899500370025635], + [-3.172706127166748, -2.6759798526763916], + [-1.36888587474823, 11.643808364868164], + [-0.8798632621765137, 10.378158569335938], + [6.832499980926514, -4.033510684967041], + [-0.7348032593727112, 10.566606521606445], + [5.470680236816406, -1.7315269708633423], + [2.004425287246704, 0.4247317314147949], + [0.6744380593299866, -5.7373456954956055], + [7.887553691864014, -3.154930353164673], + [-0.9060459733009338, 10.913532257080078], + [9.268960952758789, -2.81913685798645], + [2.942913293838501, -4.652447700500488], + [1.6338646411895752, 6.799324035644531], + [-3.4098541736602783, -1.2555367946624756], + [2.012329578399658, 3.977689504623413], + [2.0716235637664795, -5.3566694259643555], + [1.5451979637145996, 0.31726574897766113], + [0.5689935088157654, -7.153066158294678], + [8.854362487792969, -3.1117846965789795], + [-5.824759006500244, -0.6146143674850464], + [-2.732797145843506, -1.7124212980270386], + [1.722557783126831, -5.785343170166016], + [-2.4105162620544434, -0.6618109941482544], + [-5.119809627532959, 5.847641468048096], + [1.9660375118255615, 0.7848532199859619], + [0.3745952248573303, -0.6945610046386719], + [0.5041510462760925, -4.947963714599609], + [7.327856540679932, -2.155674695968628], + [-1.1682791709899902, 11.344658851623535], + [2.851527690887451, -4.61091423034668], + [0.19402295351028442, -6.206210613250732], + [-4.874880313873291, 7.452073574066162], + [-1.0595978498458862, 0.7835900783538818], + [-0.42869073152542114, 5.112673759460449], + [0.8437789082527161, -7.183844566345215], + [-3.7722856998443604, -2.7315666675567627], + [-1.8578789234161377, -0.8895558714866638], + [2.740323305130005, 6.497868537902832], + [9.786662101745605, -2.915163278579712], + [0.5945114493370056, -4.424441337585449], + [2.60347580909729, -4.174530982971191], + [-4.464448928833008, -2.702458143234253], + [-0.03985140472650528, -4.22299337387085], + [-1.8686603307724, 1.7393221855163574], + [-0.9549809098243713, 10.273977279663086], + [-3.315690279006958, -0.21360528469085693], + [-0.6593682765960693, 1.416190505027771], + [9.024271011352539, -2.7224624156951904], + [0.5797820091247559, -6.498689651489258], + [-3.444615125656128, -2.307152032852173], + [-2.7330594062805176, 2.893054723739624], + [-3.2682297229766846, -1.3142930269241333], + [-0.5302531123161316, -1.6357260942459106], + [-0.2689239978790283, -4.013683319091797], + [-5.565332889556885, 5.443304061889648], + [-1.7390280961990356, 1.907583236694336], + [-1.1816309690475464, 10.563680648803711], + [-3.599362373352051, -1.233707070350647], + [-3.603039026260376, -0.74177086353302], + [-3.0344340801239014, 4.93184757232666], + [-3.3312296867370605, -1.1684706211090088], + [0.39076387882232666, 4.824300765991211], + [0.1468597650527954, -1.1072396039962769], + [0.6902236938476562, -7.007214069366455], + [-3.7744367122650146, -2.3248062133789062], + [2.2751781940460205, -3.7401342391967773], + [0.5184463858604431, -6.962639808654785], + [-3.260936975479126, 5.894934177398682], + [2.2223100662231445, 0.7658225893974304], + [7.6923346519470215, -2.4138219356536865], + [2.000189781188965, 2.4765820503234863], + [-4.6330485343933105, 6.644732475280762], + [0.9212141633033752, 0.1371169537305832], + [-5.562831401824951, -1.2786508798599243], + [2.3579366207122803, -4.2308244705200195], + [0.5751557946205139, -7.040685176849365], + [2.697118043899536, -4.425569534301758], + [-3.155714988708496, 5.424999237060547], + [-3.895824670791626, -1.833978295326233], + [0.8401004672050476, -4.604768753051758], + [-2.6917152404785156, -1.4835267066955566], + [2.215053081512451, -3.8370044231414795], + [1.420612096786499, 5.502357006072998], + [1.6639536619186401, -4.05023193359375], + [0.837536633014679, -6.136296272277832], + [-4.794806957244873, 4.57236909866333], + [-1.254992127418518, 11.181093215942383], + [6.2979278564453125, -1.9042565822601318], + [-1.9468213319778442, 2.1184725761413574], + [0.5631332397460938, -8.0697603225708], + [2.388472080230713, -5.392695426940918], + [-3.784634828567505, -1.602576732635498], + [0.19502711296081543, -5.373088836669922], + [-5.086330413818359, 6.466489791870117], + [3.1683008670806885, 6.656717777252197], + [2.8882272243499756, -4.666865825653076], + [1.911434531211853, 0.8652581572532654], + [-4.86233377456665, 5.901765823364258], + [5.42348575592041, -3.030611276626587], + [-3.82478928565979, -1.2475242614746094], + [0.8015578389167786, -9.488101959228516], + [2.8785135746002197, -4.475674629211426], + [-0.6839463114738464, -1.614473819732666], + [0.5211938619613647, -6.658135890960693], + [2.7964494228363037, -4.400276184082031], + [2.4859092235565186, -6.53743839263916], + [0.6427872776985168, -8.151256561279297], + [0.6514307260513306, -8.506811141967773], + [-0.2570439577102661, 8.343639373779297], + [-0.21358266472816467, -0.7735061049461365], + [-3.698140859603882, -1.6637624502182007], + [-4.157474517822266, -0.9486466646194458], + [4.038330078125, 6.977841377258301], + [7.5182976722717285, -2.22375750541687], + [-1.726637601852417, 1.072928786277771], + [0.6727958917617798, -7.68709659576416], + [2.1217782497406006, -5.6252946853637695], + [-0.9438412189483643, 9.985487937927246], + [0.6660535335540771, -7.2537360191345215], + [-2.814098834991455, -0.05445242300629616], + [1.9229393005371094, 1.0999165773391724], + [2.4472031593322754, -3.969313144683838], + [-3.3760268688201904, -1.2081423997879028], + [0.3890048861503601, -6.52324104309082], + [2.7113993167877197, -4.910130500793457], + [-3.2889797687530518, 6.079921722412109], + [-4.780561923980713, -2.029069185256958], + [-1.1351687908172607, -1.8452837467193604], + [1.6166143417358398, -5.271564960479736], + [-2.0498173236846924, 1.8936593532562256], + [5.676686763763428, -3.7695791721343994], + [-0.7937304973602295, -0.7611674070358276], + [1.8543775081634521, -7.230624675750732], + [0.4679921269416809, -7.641668796539307], + [7.357856273651123, -3.439016580581665], + [-1.7673087120056152, 1.409783959388733], + [-5.516443729400635, -0.813073456287384], + [-0.4476567506790161, 9.08178997039795], + [-3.771843194961548, -2.7345006465911865], + [0.47438788414001465, -5.583798885345459], + [-0.01583860069513321, -3.5621092319488525], + [-4.0781402587890625, -3.9628067016601562], + [-4.328007221221924, 0.37385445833206177], + [2.1534438133239746, 0.45954596996307373], + [-3.568455457687378, -1.5169919729232788], + [-1.4375700950622559, 1.6881239414215088], + [0.5594249367713928, -7.583454608917236], + [-5.18002986907959, 1.499515175819397], + [-4.878227233886719, 6.544556617736816], + [-0.8018491864204407, 10.455146789550781], + [-0.3705413341522217, 9.714181900024414], + [1.8545218706130981, -4.482163429260254], + [-0.5673877596855164, 9.33178997039795], + [0.27680057287216187, -6.2967424392700195], + [-2.7594544887542725, 6.6786208152771], + [0.7158190011978149, -4.029839038848877], + [-5.409185886383057, -1.998189926147461], + [5.8988752365112305, -2.880537271499634], + [-1.284934639930725, 11.95166015625], + [-3.807112455368042, -1.6051667928695679], + [-1.0893338918685913, 1.3287949562072754], + [1.4388924837112427, -5.364870071411133], + [-3.2401649951934814, -1.1045050621032715], + [8.442967414855957, -2.5766875743865967], + [-5.422239780426025, 7.444701194763184], + [-3.9160022735595703, -2.712113857269287], + [0.8306482434272766, 0.13211004436016083], + [0.6718685030937195, -5.85064697265625], + [-2.5459232330322266, -1.336837649345398], + [-2.3543379306793213, -0.6823580265045166], + [-0.9688780903816223, 9.929889678955078], + [-1.9602519273757935, 2.139653205871582], + [2.1479737758636475, 3.7631475925445557], + [-0.04364798218011856, -1.5846129655838013], + [0.841312825679779, 7.623932838439941], + [-0.8753412961959839, 10.580680847167969], + [2.5547709465026855, -3.9931795597076416], + [2.407984972000122, -4.40155029296875], + [8.56334114074707, -2.7047133445739746], + [-4.361785888671875, 6.3595404624938965], + [7.763656139373779, -2.53059983253479], + [-4.1240925788879395, -3.019272804260254], + [-0.6463497281074524, 9.569063186645508], + [4.677005290985107, 7.891565322875977], + [-2.186534881591797, 0.21918714046478271], + [-0.83245450258255, 10.598154067993164], + [1.6188299655914307, 5.940389633178711], + [0.34865447878837585, -5.25718879699707], + [0.9335736632347107, 0.1446821689605713], + [-3.8101675510406494, 5.945443153381348], + [3.0268337726593018, -5.079351425170898], + [-3.309007406234741, -2.726534605026245], + [-3.9895520210266113, -2.6865735054016113], + [5.520329475402832, -1.2045649290084839], + [0.7390586733818054, -0.42188072204589844], + [8.5213041305542, -2.711344003677368], + [3.443692445755005, -3.98240327835083], + [-5.265379905700684, -3.8628270626068115], + [-1.865063190460205, 1.16901433467865], + [-2.4765570163726807, -1.1556669473648071], + [0.4352021813392639, -4.422035217285156], + [2.2459475994110107, -3.194464921951294], + [-3.643906831741333, -2.4109957218170166], + [-2.4420971870422363, 1.5206701755523682], + [-4.863352298736572, 6.400315284729004], + [-1.9454371929168701, 1.6781316995620728], + [3.5291783809661865, 6.496435165405273], + [0.8013445138931274, -0.578467607498169], + [2.117382049560547, 5.084543228149414], + [0.011314831674098969, -4.7142863273620605], + [-3.883610725402832, -0.4100129008293152], + [0.5224040150642395, -0.7225882411003113], + [0.6828884482383728, -5.825726509094238], + [-3.896044969558716, 6.6936187744140625], + [0.5010285973548889, -6.844935894012451], + [-0.24211454391479492, 7.1840925216674805], + [-2.3688533306121826, -1.646904468536377], + [0.06389709562063217, -0.5198619961738586], + [-5.1775078773498535, -1.0388741493225098], + [-3.8183157444000244, -1.4266175031661987], + [2.870788335800171, -4.5067925453186035], + [-2.201237201690674, -0.9099560976028442], + [-3.6576988697052, -2.346768856048584], + [-1.436978816986084, 11.620559692382812], + [-3.6557536125183105, -2.4101569652557373], + [0.8727927803993225, -5.1469526290893555], + [0.9055038094520569, -5.626794815063477], + [-4.236346244812012, -1.6941758394241333], + [-3.36134934425354, -1.2969212532043457], + [-2.1503536701202393, -1.248214840888977], + [-3.728264331817627, -2.160640001296997], + [-5.087027072906494, 2.6078829765319824], + [-3.888164758682251, -1.3556698560714722], + [0.944972574710846, -4.1884613037109375], + [6.140112400054932, -1.6237434148788452], + [-4.853368282318115, 5.416066646575928], + [-5.420793056488037, 5.460886001586914], + [0.8687389492988586, -6.598143100738525], + [-0.5023373961448669, 9.825284004211426], + [2.192767381668091, -3.061629056930542], + [2.5943410396575928, -4.863133430480957], + [3.8089988231658936, 6.776026725769043], + [-2.6201624870300293, -2.5014286041259766], + [-4.2823405265808105, -1.8103781938552856], + [-2.2273306846618652, 1.763792872428894], + [0.6106941103935242, -0.9811680912971497], + [-3.869335412979126, -1.2876685857772827], + [1.8353362083435059, 0.24458956718444824], + [9.572535514831543, -2.8245866298675537], + [1.033899188041687, -8.027851104736328], + [7.2592339515686035, -3.686537981033325], + [-0.23863202333450317, 3.7696211338043213], + [-1.8830859661102295, 0.6990267038345337], + [2.640909194946289, -4.808738708496094], + [-0.8151247501373291, 10.91458511352539], + [0.8364424109458923, -0.3693077564239502], + [-1.4311128854751587, 12.151020050048828], + [-4.544790744781494, -0.6717538237571716], + [-2.385183334350586, -0.7853373289108276], + [1.0082571506500244, -0.2706044316291809], + [8.537482261657715, -2.6340935230255127], + [-3.539184808731079, -1.0903233289718628], + [-3.6311638355255127, -3.646012544631958], + [-3.6419425010681152, -2.6166279315948486], + [2.8689093589782715, -3.744464159011841], + [-3.7551205158233643, 4.857341766357422], + [-4.191240310668945, -2.180588722229004], + [-0.587066113948822, -2.2282607555389404], + [2.236065626144409, -4.653923034667969], + [-5.002336025238037, -4.202319622039795], + [-3.484734535217285, -2.028554916381836], + [2.7346413135528564, 5.392165184020996], + [6.3275065422058105, -4.347782611846924], + [-3.5631630420684814, -1.63454008102417], + [2.9209811687469482, -4.566770076751709], + [2.624509334564209, 6.198179244995117], + [-0.9684378504753113, 10.589044570922852], + [1.1411488056182861, 1.1452910900115967], + [-5.409067630767822, 7.699277877807617], + [1.2021002769470215, 1.2751747369766235], + [0.36146020889282227, -5.25705623626709], + [8.300642013549805, -2.5547056198120117], + [-0.17125633358955383, -1.7345693111419678], + [-1.133527159690857, 11.364276885986328], + [5.523303508758545, -1.2474981546401978], + [-3.8548741340637207, -1.9430691003799438], + [0.5865100026130676, -7.613622188568115], + [2.567364454269409, -5.662110328674316], + [-1.221089243888855, 0.2789257764816284], + [3.0440971851348877, -4.938765525817871], + [-4.347637176513672, 6.316161155700684], + [0.017939619719982147, -4.302274227142334], + [2.1955597400665283, 5.203976631164551], + [-3.5444300174713135, 5.634573459625244], + [-1.2333760261535645, 10.050220489501953], + [-4.40976095199585, -0.3632766008377075], + [1.4832769632339478, 4.583964824676514], + [7.640281677246094, -2.7852060794830322], + [-4.558040142059326, 6.570030212402344], + [4.4672369956970215, 7.160301208496094], + [1.5225286483764648, -6.25007438659668], + [-0.5308475494384766, 4.1876540184021], + [6.658102512359619, -1.8101855516433716], + [-0.30069056153297424, 5.072644233703613], + [-4.758825778961182, 6.704142093658447], + [-1.303227424621582, 1.3267720937728882], + [0.5697740912437439, -4.321447849273682], + [0.49557632207870483, -7.8511247634887695], + [8.919445991516113, -2.6473958492279053], + [-3.57303524017334, 5.226405620574951], + [-4.3440632820129395, 6.764195442199707], + [-4.674114227294922, 4.781113624572754], + [-0.5423856973648071, 7.567410469055176], + [7.4982991218566895, -2.18571400642395], + [-1.9506032466888428, 1.7803837060928345], + [-1.4351359605789185, 1.6553106307983398], + [6.295475482940674, -1.2734700441360474], + [-3.9571309089660645, -1.0162527561187744], + [-3.5956170558929443, -1.7265198230743408], + [0.6250993013381958, -8.703470230102539], + [0.19650429487228394, -5.951326370239258], + [-3.225295066833496, -0.5698239803314209], + [-3.57865834236145, -1.9382623434066772], + [-3.5910933017730713, -0.006906989961862564], + [1.0073639154434204, -5.777331829071045], + [2.551109552383423, 5.64069938659668], + [-1.2286914587020874, 11.293221473693848], + [-5.517630577087402, 4.112677574157715], + [-0.152056485414505, -4.80042839050293], + [2.559835195541382, 0.948904275894165], + [-0.11380103975534439, -0.9464069604873657], + [-4.184991836547852, 5.499787330627441], + [3.177686929702759, -3.931993246078491], + [-3.4300262928009033, -1.176566481590271], + [1.9891767501831055, 5.460440635681152], + [0.5671625137329102, -7.952049732208252], + [-3.9043405055999756, -1.722643494606018], + [-2.668046236038208, 4.326014995574951], + [1.4732589721679688, 5.48472261428833], + [-4.899920463562012, -1.8792840242385864], + [1.9394910335540771, 2.925067186355591], + [0.6703780293464661, -8.068380355834961], + [-5.930925369262695, -0.7883316278457642], + [-2.250755548477173, -0.02979356423020363], + [-1.8866257667541504, 2.024707794189453], + [0.43773841857910156, -7.863648414611816], + [-4.4878411293029785, -1.1473960876464844], + [-0.13029924035072327, -1.4698071479797363], + [-3.5260753631591797, -0.9337620735168457], + [-2.8334505558013916, -0.6112064719200134], + [4.292051792144775, -4.377715587615967], + [-4.64199686050415, -4.461239337921143], + [-1.8121682405471802, 1.4549940824508667], + [0.431618869304657, -6.025979995727539], + [1.1222279071807861, 0.33485376834869385], + [2.704198122024536, -4.061210632324219], + [0.48451775312423706, -7.466183662414551], + [-0.04399896413087845, -4.023101806640625], + [-1.9372951984405518, 5.4849724769592285], + [1.6130951642990112, 5.329432487487793], + [2.719850778579712, 6.187665939331055], + [-0.32840800285339355, 0.4837937355041504], + [-3.555774450302124, -1.031666874885559], + [-2.6990416049957275, -1.1494733095169067], + [-4.275167942047119, -0.6546164751052856], + [-3.7752468585968018, -1.273419737815857], + [-3.3501598834991455, -3.612579107284546], + [5.80350923538208, -1.1774145364761353], + [6.051692485809326, -2.5417025089263916], + [6.245757579803467, -3.0251376628875732], + [-3.500720262527466, 5.567514419555664], + [3.754117012023926, 0.9665571451187134], + [-0.7312123775482178, 9.962018966674805], + [7.882696151733398, -2.3576362133026123], + [3.887688398361206, 7.233078956604004], + [-3.5420053005218506, -1.4126933813095093], + [-1.3270845413208008, 11.498636245727539], + [0.6090412735939026, -5.2596330642700195], + [3.9387614727020264, -5.840954780578613], + [-1.3703269958496094, -0.8899688720703125], + [0.29145753383636475, -5.765559196472168], + [-1.4924472570419312, -0.698359489440918], + [-1.8889293670654297, 1.6269532442092896], + [-4.2397027015686035, 5.891888618469238], + [8.507003784179688, -2.555111885070801], + [3.704523801803589, -3.431459426879883], + [-3.2467708587646484, -1.1674402952194214], + [-4.049637317657471, -2.8916280269622803], + [-4.543144226074219, -1.1319745779037476], + [0.5128964781761169, -5.738835334777832], + [-2.9549098014831543, -2.5144665241241455], + [-0.6899034380912781, 9.93990707397461], + [4.260762691497803, 7.410638332366943], + [-2.08581280708313, 0.5022743940353394], + [-1.726240634918213, 1.6666064262390137], + [2.2025272846221924, -4.956128120422363], + [2.9335429668426514, -5.057754993438721], + [1.077810525894165, -5.237450122833252], + [-2.0622916221618652, 2.605095624923706], + [6.4621262550354, -3.1704742908477783], + [0.41401347517967224, -4.85549783706665], + [-5.011894226074219, 7.181450843811035], + [2.5550014972686768, 6.4531450271606445], + [-4.29166841506958, -2.6455700397491455], + [7.02947473526001, -4.260744094848633], + [2.891911506652832, -4.552463531494141], + [-4.679842948913574, 4.805116653442383], + [0.12841564416885376, -5.350946426391602], + [0.8593239188194275, -3.8001606464385986], + [2.8802969455718994, -4.67402982711792], + [1.48701012134552, 0.7319300174713135], + [6.4912428855896, -3.462503671646118], + [-3.7374813556671143, -2.400702953338623], + [3.028704881668091, -3.9807465076446533], + [6.06144380569458, -1.2451919317245483], + [1.5515851974487305, -4.578861236572266], + [1.0392637252807617, 0.2258974313735962], + [-5.046665668487549, -0.8151993751525879], + [0.31132203340530396, -5.896490097045898], + [6.489657878875732, -2.2052419185638428], + [-2.525516986846924, 2.2706079483032227], + [-4.920125484466553, -0.930485188961029], + [-1.8914579153060913, 1.334758996963501], + [5.802598476409912, -1.087943434715271], + [-3.620054244995117, -2.248722791671753], + [-4.822473526000977, -0.9464660286903381], + [-1.2808716297149658, 0.12421134114265442], + [0.838521420955658, 6.9798054695129395], + [7.412815570831299, -2.188884973526001], + [5.981777667999268, -1.860001802444458], + [-0.7792875170707703, 9.944202423095703], + [-0.7108685374259949, 8.76978588104248], + [-1.0290180444717407, 10.903239250183105], + [-3.62363600730896, -1.796644687652588], + [1.9578187465667725, 2.5567378997802734], + [-0.26320070028305054, 5.841007709503174], + [0.6006991267204285, -7.448988437652588], + [7.5250563621521, -2.221153497695923], + [-4.6118950843811035, -3.3190066814422607], + [-3.421569585800171, 5.179548740386963], + [0.38365426659584045, -3.2889046669006348], + [2.512953042984009, -4.222670078277588], + [1.2288042306900024, -7.067389011383057], + [8.460076332092285, -2.4937620162963867], + [-0.4359283447265625, -1.0932034254074097], + [0.001576833426952362, -5.812549591064453], + [-0.922273576259613, -2.360245943069458], + [2.2739064693450928, 4.660724639892578], + [10.019025802612305, -2.9706828594207764], + [0.12491559237241745, 9.509857177734375], + [-1.5112779140472412, -0.784990668296814], + [1.9575436115264893, -4.339599609375], + [2.74544358253479, -4.112663269042969], + [5.778310298919678, 8.641426086425781], + [1.7864577770233154, 4.239962577819824], + [-3.0611088275909424, 5.358110427856445], + [7.3297505378723145, -3.1954920291900635], + [1.9596517086029053, 5.6006879806518555], + [-3.5355851650238037, -1.9456359148025513], + [-6.184511661529541, 8.55451774597168], + [0.30712658166885376, -6.947972774505615], + [-5.007739067077637, 6.918492794036865], + [8.24118709564209, -2.4611284732818604], + [1.91545569896698, 0.4277549982070923], + [0.2154192328453064, -3.908477783203125], + [0.3814261555671692, -5.495931625366211], + [-3.559659242630005, 4.796478748321533], + [0.3252869248390198, -6.421140193939209], + [8.87790298461914, -2.7507078647613525], + [0.35201019048690796, 5.374894618988037], + [-2.3484175205230713, 2.0707499980926514], + [8.466225624084473, -2.5395967960357666], + [0.8687179684638977, -8.359298706054688], + [5.997546195983887, -1.0865732431411743], + [-1.6426228284835815, -0.681057333946228], + [7.250842094421387, -2.079287528991699], + [6.90714168548584, -4.077483177185059], + [8.4193754196167, -2.66666579246521], + [4.23074197769165, 6.918128967285156], + [-1.4700822830200195, -0.6534470915794373], + [-5.472668170928955, -1.0042884349822998], + [4.719128608703613, 7.649792194366455], + [0.5823444128036499, -7.109490394592285], + [3.6245710849761963, 6.825718879699707], + [0.6681163907051086, -7.4017744064331055], + [-2.939332962036133, -1.9162307977676392], + [-0.747044026851654, -1.3723939657211304], + [1.9692680835723877, 5.932435035705566], + [-3.4781222343444824, 5.7061357498168945], + [-3.8363072872161865, 5.791898727416992], + [9.413237571716309, -3.0272295475006104], + [1.2195528745651245, -5.508401393890381], + [2.9959137439727783, -6.778881549835205], + [7.030211925506592, -1.9395458698272705], + [-3.20182466506958, 3.6997504234313965], + [0.7143017649650574, 7.126114845275879], + [1.0944663286209106, -5.883846282958984], + [-1.6033329963684082, 0.5975599884986877], + [-1.095162034034729, 10.593233108520508], + [-4.633808612823486, -1.3578451871871948], + [-2.8028202056884766, 5.288392066955566], + [2.1568715572357178, 4.934225082397461], + [0.571085512638092, -8.280197143554688], + [-4.921463489532471, 6.742803573608398], + [-1.2548115253448486, 1.0481908321380615], + [-0.6005728244781494, 9.963013648986816], + [-1.1417694091796875, 10.740755081176758], + [-5.670494556427002, 5.928536891937256], + [8.29312801361084, -3.13147234916687], + [2.7402942180633545, -4.5740742683410645], + [2.449044704437256, 5.671921730041504], + [2.9380252361297607, -4.5923357009887695], + [0.6990692615509033, -8.319632530212402], + [-0.7816080451011658, 0.66107177734375], + [-1.5500965118408203, 12.704357147216797], + [0.2528998851776123, 8.26047420501709], + [2.5629403591156006, -4.860170364379883], + [-3.696981191635132, -1.5326377153396606], + [-3.442063570022583, -1.3929693698883057], + [-3.6230218410491943, -1.5539213418960571], + [-4.076984405517578, -0.3180481195449829], + [-4.034908771514893, 6.022668838500977], + [-4.515548229217529, 3.059053897857666], + [-3.4721901416778564, -3.069803237915039], + [-3.2694482803344727, -0.6432127952575684], + [2.3139395713806152, 5.965575695037842], + [7.353501796722412, -2.8426663875579834], + [-5.448424816131592, -1.2144838571548462], + [-4.852414131164551, 7.264297008514404], + [-4.239182949066162, -0.5120654106140137], + [-4.886728286743164, 5.228997230529785], + [1.816633701324463, 2.275233507156372], + [-2.823018789291382, 4.853583335876465], + [-3.518096923828125, -1.2855292558670044], + [-1.2055001258850098, 9.268159866333008], + [2.698560953140259, -4.303827285766602], + [2.745603084564209, -4.493152618408203], + [8.151803016662598, -2.4277613162994385], + [-4.016613006591797, -3.151944398880005], + [-0.5138306617736816, 0.7183530926704407], + [0.1352570652961731, -5.467235565185547], + [1.1427726745605469, -6.280871391296387], + [-0.162661612033844, -1.5047905445098877], + [-5.0266852378845215, -0.7999268770217896], + [-0.5562616586685181, 9.638928413391113], + [7.5468573570251465, -2.5559678077697754], + [3.225146532058716, 6.397623062133789], + [-5.601553440093994, 4.529967784881592], + [1.2434096336364746, -5.6348443031311035], + [-3.907245397567749, -3.7809808254241943], + [-0.9274798035621643, 10.416391372680664], + [1.7035328149795532, 5.844232559204102], + [-0.5038577914237976, 9.746000289916992], + [-2.6161723136901855, -1.7774299383163452], + [1.7898328304290771, 5.6053009033203125], + [0.4495720863342285, -0.2241654396057129], + [-3.645026683807373, -1.4445358514785767], + [0.9490044713020325, -0.5134010910987854], + [-3.378920078277588, -0.24087274074554443], + [5.641900062561035, -1.316361427307129], + [0.7792151570320129, -6.346277236938477], + [-2.4593963623046875, -1.0427459478378296], + [0.889798104763031, -0.4035593569278717], + [5.816121578216553, -1.5845712423324585], + [5.708593845367432, -1.1178492307662964], + [-3.7417595386505127, -2.2872231006622314], + [-3.760420083999634, -1.90172278881073], + [-1.132029414176941, -0.7470518350601196], + [-0.7591696381568909, 5.19194221496582], + [-4.732715606689453, 5.182044506072998], + [-4.686151504516602, 3.5246388912200928], + [1.4640603065490723, -6.554123878479004], + [-4.104345798492432, -0.681492269039154], + [-3.9503817558288574, 5.620194435119629], + [0.31048282980918884, -5.004761695861816], + [4.036951541900635, 7.2423882484436035], + [1.5733728408813477, 5.4847540855407715], + [-1.9130737781524658, 1.979835867881775], + [-4.874571323394775, -0.9986893534660339], + [-0.45840609073638916, 9.543354034423828], + [0.9911063313484192, 5.307427883148193], + [-2.976210355758667, -3.044466018676758], + [-0.7500987648963928, 9.73061752319336], + [2.68009877204895, -4.326837539672852], + [-4.485376834869385, -0.7008671760559082], + [-1.5741747617721558, -1.0733808279037476], + [0.4125625491142273, -6.656920909881592], + [-3.82415771484375, 6.638556957244873], + [-2.0624186992645264, 2.658149480819702], + [-5.427185535430908, -0.914685845375061], + [8.4480562210083, -3.0028672218322754], + [4.409679412841797, -5.412398338317871], + [-5.14508056640625, 5.068490982055664], + [-0.9038183689117432, 10.524375915527344], + [1.3298101425170898, 4.5814208984375], + [-1.951332449913025, 0.649631679058075], + [1.4197824001312256, 4.889407634735107], + [2.447108507156372, 5.474830627441406], + [-1.2832649946212769, 11.21412467956543], + [-3.450453042984009, -2.3011839389801025], + [0.7804120182991028, -7.976110458374023], + [-1.303931474685669, 11.912784576416016], + [0.4531480073928833, -7.131875038146973], + [2.9398224353790283, -4.796162128448486], + [2.7871711254119873, 5.0372090339660645], + [-4.906263828277588, -0.7465000152587891], + [-1.8897441625595093, 2.509760618209839], + [-1.2553913593292236, 10.991691589355469], + [-3.718714475631714, -1.7007663249969482], + [8.956913948059082, -2.76857590675354], + [-4.4386420249938965, 5.777731895446777], + [-1.3068156242370605, 11.498285293579102], + [2.7975082397460938, 5.786746025085449], + [0.3630831241607666, -6.29827880859375], + [-4.03296422958374, -0.39901256561279297], + [-1.807316780090332, 1.2644094228744507], + [2.4683449268341064, 0.6435456871986389], + [3.4470226764678955, 2.1333653926849365], + [0.6102096438407898, -0.48167136311531067], + [0.19553321599960327, -5.486937046051025], + [-1.0116347074508667, -0.6286244988441467], + [6.094174861907959, -1.5926417112350464], + [-0.7551489472389221, 9.908145904541016], + [0.5915480256080627, -8.111101150512695], + [-4.536224842071533, -3.52687406539917], + [-2.187006711959839, 1.6774379014968872], + [-3.785137176513672, 5.675899982452393], + [0.04520701617002487, -0.767322838306427], + [1.4934172630310059, -5.512688159942627], + [10.181777000427246, -3.016495943069458], + [0.49106913805007935, -7.007001876831055], + [3.093836784362793, -5.086378574371338], + [5.042445659637451, 7.882294654846191], + [-3.008949041366577, 3.6560328006744385], + [-3.732672929763794, -1.0103105306625366], + [-3.8264248371124268, -1.191916823387146], + [1.0178961753845215, 4.813065528869629], + [-4.225983619689941, 6.430655479431152], + [-4.079235076904297, -3.639497995376587], + [0.5420183539390564, 3.3431522846221924], + [-0.02364344149827957, -3.628889799118042], + [-0.395791232585907, -0.3532381057739258], + [-1.431178331375122, 11.65327262878418], + [-2.92586350440979, 3.253272294998169], + [4.366950988769531, 7.540375709533691], + [2.267102003097534, -4.322381019592285], + [-4.920839309692383, -1.3226726055145264], + [7.58121395111084, -2.2146317958831787], + [-1.5493160486221313, 0.9634886980056763], + [9.278009414672852, -2.8764142990112305], + [-1.6295294761657715, -0.6986839771270752], + [0.48234421014785767, -7.269310474395752], + [3.771162748336792, -3.3027894496917725], + [9.019134521484375, -3.132629871368408], + [1.824681043624878, 3.073542356491089], + [4.129026889801025, -5.066338062286377], + [1.782064437866211, -4.288211822509766], + [-0.8844050765037537, 10.74875259399414], + [7.312478542327881, -2.1071650981903076], + [-4.200719833374023, -1.1758328676223755], + [1.4899396896362305, 1.7672784328460693], + [-2.3348639011383057, -0.027434591203927994], + [0.5724004507064819, -7.398380279541016], + [4.848409175872803, 7.864861488342285], + [0.48726731538772583, -5.800146102905273], + [-1.6161234378814697, -0.9265389442443848], + [6.758168697357178, -2.3516664505004883], + [-4.264099597930908, 0.3148202896118164], + [0.332026869058609, 0.8105624914169312], + [2.355442762374878, -5.104912757873535], + [-0.7548573613166809, 10.157529830932617], + [0.12747180461883545, -4.874711990356445], + [0.010401032865047455, -0.8574388027191162], + [-1.8611100912094116, -0.2617254853248596], + [0.6577260494232178, -5.9048309326171875], + [2.8172197341918945, -4.554810523986816], + [-4.411619186401367, -1.1733064651489258], + [0.6549997329711914, -7.858558654785156], + [-1.330693244934082, 11.643407821655273], + [-5.054078102111816, 6.012842178344727], + [0.7109526991844177, -9.179643630981445], + [-5.389631271362305, -0.9288487434387207], + [6.314309597015381, -4.6687421798706055], + [5.0352463722229, 8.035938262939453], + [-3.6927249431610107, 5.532639026641846], + [-1.6441717147827148, -0.1527390480041504], + [6.606886386871338, -4.791840553283691], + [-3.5255753993988037, -2.461987257003784], + [-4.967750072479248, -3.925635576248169], + [0.5094749927520752, -7.478209972381592], + [-3.4177634716033936, 4.437117099761963], + [-2.386817216873169, -1.0970386266708374], + [7.21718168258667, -3.4679062366485596], + [-1.4857791662216187, 12.399218559265137], + [8.181926727294922, -2.7323429584503174], + [-1.1113463640213013, 9.883478164672852], + [-5.292120933532715, 6.536382675170898], + [1.6380199193954468, 3.837257146835327], + [-3.4178130626678467, -1.360784649848938], + [7.6384477615356445, -3.4158313274383545], + [7.352466106414795, -3.4450747966766357], + [7.122440814971924, -4.473612308502197], + [1.9307045936584473, -4.741889953613281], + [6.919704914093018, -1.4987611770629883], + [0.4285130500793457, -5.472171306610107], + [-0.6279450058937073, 9.90442943572998], + [-0.8298112154006958, 9.34040355682373], + [-4.220191478729248, 5.945160388946533], + [-0.7129435539245605, 10.211030006408691], + [0.9193239212036133, -7.173545837402344], + [-2.3845489025115967, 0.349700927734375], + [0.32545143365859985, -6.480312347412109], + [4.425585746765137, -4.199785232543945], + [6.172938823699951, 9.089753150939941], + [2.4921398162841797, 4.017919540405273], + [2.2842581272125244, 0.9054934978485107], + [-3.8766424655914307, 6.158768177032471], + [0.4301466941833496, -3.439450740814209], + [0.1791875660419464, -2.4161126613616943], + [-5.845333576202393, 8.032814025878906], + [0.18822064995765686, -4.781192302703857], + [2.1397273540496826, -3.946824789047241], + [0.31939828395843506, -6.867533206939697], + [1.2553423643112183, 0.3950168192386627], + [-2.4500811100006104, -0.038286689668893814], + [-0.6162343621253967, 10.540931701660156], + [-1.6028815507888794, 0.6666703820228577], + [-3.4493651390075684, -0.9531497955322266], + [-4.038010120391846, 6.177029132843018], + [-1.5502163171768188, 0.5501183867454529], + [-3.8732378482818604, -2.2622768878936768], + [-3.7150590419769287, -4.026997089385986], + [1.4312584400177002, -0.03075994923710823], + [0.24530839920043945, -5.9506025314331055], + [0.08307915180921555, -1.1807664632797241], + [-0.19135183095932007, 8.1499662399292], + [-2.5076000690460205, -1.4226460456848145], + [-4.390555381774902, -3.72196102142334], + [2.942005157470703, -4.641088485717773], + [-3.8397233486175537, -2.5904600620269775], + [2.8442721366882324, -4.696810245513916], + [-5.0370025634765625, 7.864904403686523], + [0.6986429691314697, -8.941502571105957], + [2.8973591327667236, -5.031530380249023], + [-4.454921722412109, 5.461224555969238], + [8.147568702697754, -3.1810925006866455], + [-2.495936155319214, 2.4585790634155273], + [1.5181388854980469, 5.676469326019287], + [7.716684341430664, -2.7223052978515625], + [3.2009074687957764, -3.6254425048828125], + [0.6517025828361511, -7.982642650604248], + [2.5326106548309326, -4.178565502166748], + [-2.1746485233306885, 1.4474955797195435], + [0.5827406048774719, -4.550991058349609], + [7.102715492248535, -3.8476011753082275], + [-0.33839529752731323, 8.686821937561035], + [-4.349597930908203, 5.556722640991211], + [5.310096263885498, 8.278266906738281], + [6.348987102508545, -4.04861307144165], + [-1.1539647579193115, 1.4734715223312378], + [-3.035370111465454, 4.254757404327393], + [-1.2814242839813232, 11.243243217468262], + [2.2517330646514893, 4.968250274658203], + [-1.0127019882202148, 11.266349792480469], + [-4.443531513214111, -4.251331329345703], + [2.064544916152954, 4.049015045166016], + [-3.145641565322876, -2.6489577293395996], + [-0.6086171865463257, 1.0855907201766968], + [-0.36632364988327026, -0.4754056930541992], + [0.9600799679756165, -5.0621795654296875], + [-5.374793529510498, 5.22647762298584], + [-4.380253791809082, -3.4964616298675537], + [1.97935152053833, -4.303633689880371], + [-3.57718825340271, -2.1356470584869385], + [2.6531693935394287, -5.080862045288086], + [-3.534538507461548, -2.6821064949035645], + [8.194697380065918, -2.7573227882385254], + [-1.267055869102478, 11.068660736083984], + [-4.6721510887146, -1.2892097234725952], + [4.566242694854736, -2.112591028213501], + [0.24216407537460327, -5.3318047523498535], + [-3.689981698989868, -0.8117780685424805], + [-0.9933781027793884, 10.28335952758789], + [-1.443760633468628, -1.514426350593567], + [-1.2862929105758667, 11.23343276977539], + [0.19364774227142334, -5.472841262817383], + [2.899052381515503, 6.437108039855957], + [-0.9794888496398926, 0.8886494040489197], + [0.49804651737213135, 1.499057650566101], + [0.7705244421958923, -7.19312858581543], + [-4.846803188323975, -1.2088087797164917], + [-4.381707668304443, -1.364300012588501], + [-0.5983449816703796, 10.156856536865234], + [4.115142345428467, 7.564284324645996], + [-0.5070653557777405, -1.0198484659194946], + [-1.9707839488983154, 1.1963640451431274], + [-3.52779221534729, -1.240705132484436], + [1.6352276802062988, 4.558492660522461], + [0.7736409306526184, -8.897212982177734], + [7.729334354400635, -2.510667562484741], + [2.8416597843170166, -4.657212734222412], + [0.35957950353622437, -6.740548610687256], + [0.6479120850563049, -4.731931686401367], + [-4.029329299926758, 5.9268622398376465], + [-4.736844539642334, -0.8826570510864258], + [-0.08122161775827408, -4.261157989501953], + [-3.501356363296509, -0.6863322257995605], + [2.9695780277252197, -4.763335227966309], + [-0.741452157497406, 1.5511215925216675], + [-0.27067503333091736, -1.0073437690734863], + [-0.30670779943466187, 10.102460861206055], + [-0.696076512336731, 10.103172302246094], + [7.787855625152588, -2.950441598892212], + [-3.135896921157837, -2.020211696624756], + [-5.546983242034912, 7.324638366699219], + [-4.313504219055176, -2.921653985977173], + [3.4991252422332764, -3.2476627826690674], + [0.9947713017463684, -6.318994522094727], + [-0.3148426413536072, 9.207746505737305], + [0.7351839542388916, -5.790706157684326], + [7.200850009918213, -2.923307180404663], + [1.768352746963501, 4.260419845581055], + [2.3140175342559814, -5.003178596496582], + [0.03341894596815109, -1.0017908811569214], + [-3.976153612136841, 5.655949115753174], + [-1.949776291847229, 1.193366289138794], + [-2.381619930267334, 4.683917999267578], + [0.0003298148512840271, -4.658844947814941], + [-5.552620887756348, 4.817085266113281], + [1.3449375629425049, -4.939294815063477], + [-1.2217177152633667, 1.4773852825164795], + [0.7158958911895752, -7.41115665435791], + [0.6402360796928406, -7.002697467803955], + [1.4459301233291626, 3.0084753036499023], + [-5.87951135635376, 3.701991319656372], + [1.993260145187378, 4.8874311447143555], + [-1.6532975435256958, 1.1615103483200073], + [3.6971211433410645, -4.135034084320068], + [0.3793110251426697, -5.138370037078857], + [8.855332374572754, -2.792937994003296], + [7.077524662017822, -2.0154457092285156], + [-0.593357264995575, -1.6525909900665283], + [6.633988380432129, -2.2536075115203857], + [-3.4990875720977783, -1.4294401407241821], + [-3.442189931869507, -0.9314464330673218], + [-4.027306079864502, -1.6838574409484863], + [-1.7579960823059082, 1.7953605651855469], + [-1.905910849571228, 2.3459770679473877], + [1.1553730964660645, 5.795289516448975], + [-1.8820933103561401, 1.1132336854934692], + [0.8245461583137512, -5.262351036071777], + [0.5940223336219788, -7.800814628601074], + [0.29366058111190796, -6.0125837326049805], + [-1.0129636526107788, 1.849600911140442], + [-3.6786720752716064, -0.7554338574409485], + [-1.059959053993225, 10.2475004196167], + [4.546931743621826, -0.23554694652557373], + [2.5575618743896484, 6.291303634643555], + [-4.895682334899902, -0.6659814715385437], + [-2.2005627155303955, 2.5202882289886475], + [-4.614948272705078, 0.41557660698890686], + [2.5589237213134766, 0.7693368196487427], + [-0.3212510347366333, 3.3645832538604736], + [2.6586482524871826, -4.484902858734131], + [2.9284963607788086, -4.593213081359863], + [1.603092908859253, 4.691386699676514], + [3.8000831604003906, 6.617455959320068], + [0.7002805471420288, -8.477092742919922], + [0.38650256395339966, -5.535611629486084], + [-4.640477657318115, -0.6211838722229004], + [-1.1636168956756592, 10.095593452453613], + [-0.5726238489151001, 10.030187606811523], + [-1.1563763618469238, 10.47930908203125], + [-4.245545864105225, -2.23400616645813], + [-2.6247241497039795, 5.802502632141113], + [-2.8002755641937256, 5.933077812194824], + [4.357194423675537, 7.171850681304932], + [-4.484930515289307, 7.154433250427246], + [-1.5579040050506592, 0.48987090587615967], + [1.5994572639465332, 5.039584159851074], + [-0.10269207507371902, -4.181355953216553], + [-4.264063358306885, -0.6821238398551941], + [6.0420660972595215, -3.066383123397827], + [-1.95589280128479, 2.1939468383789062], + [-0.22614786028862, -1.8696619272232056], + [-2.0209951400756836, 2.210597276687622], + [6.0809526443481445, -1.8526266813278198], + [1.7298407554626465, 1.1597872972488403], + [1.8864893913269043, -5.727015495300293], + [-3.3043172359466553, -1.197582483291626], + [-1.8070603609085083, 0.4733649492263794], + [-4.42946195602417, -3.0187642574310303], + [-0.4155610203742981, 9.378725051879883], + [-0.22509807348251343, -0.9140766859054565], + [-1.933422327041626, 5.1222734451293945], + [-5.406924247741699, -1.0350086688995361], + [-3.5100176334381104, -2.052659034729004], + [1.1555604934692383, 5.966613292694092], + [-4.567356586456299, -2.8695602416992188], + [-2.833970308303833, 1.4614473581314087], + [-4.893781661987305, 6.105853080749512], + [3.163517475128174, 6.8114094734191895], + [5.733312129974365, -0.8865979313850403], + [-0.02978575974702835, 7.657670021057129], + [-3.112760305404663, -0.8013162612915039], + [-2.0001981258392334, 0.47180885076522827], + [0.6219590902328491, 2.3730194568634033], + [7.406973361968994, -2.6701862812042236], + [-5.243751049041748, 3.5151236057281494], + [1.7356882095336914, 1.1277459859848022], + [-1.820441722869873, -0.1052463948726654], + [2.9499599933624268, -4.690793991088867], + [0.7806361317634583, -8.761302947998047], + [5.898346424102783, -3.2672438621520996], + [-2.3327958583831787, 5.931345462799072], + [4.282285213470459, 7.12579345703125], + [-1.0534931421279907, 10.339105606079102], + [-4.32847261428833, -0.7284882664680481], + [2.0222671031951904, 6.450737953186035], + [3.121155023574829, 6.344748497009277], + [-3.6386661529541016, -1.252506136894226], + [6.381487846374512, -2.0203495025634766], + [-5.128866195678711, -0.9494717717170715], + [2.1727676391601562, 3.6224358081817627], + [-2.9182560443878174, -2.5720908641815186], + [0.7350358366966248, -0.5038526654243469], + [0.7563049793243408, -8.537720680236816], + [-4.948597431182861, 4.472589492797852], + [-3.563823699951172, -1.0155991315841675], + [-4.632125377655029, 5.825575828552246], + [2.402517557144165, -4.173670291900635], + [1.703918218612671, 2.8029463291168213], + [-4.711656093597412, -3.805084466934204], + [0.7229982018470764, -8.705897331237793], + [0.5707875490188599, -5.52852725982666], + [8.049015045166016, -2.450230598449707], + [0.33377188444137573, -6.457801342010498], + [-4.285757541656494, -1.0186189413070679], + [-1.0990796089172363, 5.140050411224365], + [0.4611780643463135, -0.7249351143836975], + [-0.6560897827148438, 9.429317474365234], + [2.7248284816741943, -4.646650314331055], + [-1.1788324117660522, 10.734723091125488], + [0.3790636658668518, -6.1680779457092285], + [-5.577534198760986, 6.894626140594482], + [-3.8173558712005615, -1.416843295097351], + [-4.883124828338623, 6.264517784118652], + [0.9244008660316467, -5.2560200691223145], + [-4.174710273742676, -1.401004433631897], + [-1.8805049657821655, 2.0162277221679688], + [-1.1668750047683716, 9.434295654296875], + [-0.2916366457939148, 7.189123153686523], + [2.5604090690612793, 5.887997627258301], + [-1.8411445617675781, 1.7543617486953735], + [-1.7531191110610962, -1.9330532550811768], + [-4.438336372375488, 6.358570098876953], + [-0.7652691006660461, 9.7052001953125], + [1.433933973312378, 2.4721248149871826], + [-2.0196030139923096, 2.50909423828125], + [-3.4223673343658447, -2.692376136779785], + [2.580576181411743, 0.7399795055389404], + [3.0527522563934326, 5.513772964477539], + [2.2084498405456543, -4.006574630737305], + [0.5664770007133484, -7.389081001281738], + [-5.486924648284912, 4.027775287628174], + [4.941135883331299, 8.105311393737793], + [-4.799561977386475, 5.734092712402344], + [-2.3439443111419678, -1.7964884042739868], + [-5.344182968139648, -0.5586827397346497], + [0.5115414261817932, -0.037659622728824615], + [-5.047337055206299, 4.660240173339844], + [-1.1606494188308716, 11.191855430603027], + [1.8988487720489502, 4.65882682800293], + [0.6635162830352783, -8.027056694030762], + [-2.591198682785034, -1.3751810789108276], + [0.4073526859283447, -5.373857498168945], + [2.9239485263824463, -4.605599403381348], + [-0.6823994517326355, 10.107702255249023], + [1.3180208206176758, -5.586167812347412], + [3.9186182022094727, 6.940804481506348], + [0.059847645461559296, -0.8681243658065796], + [2.65958571434021, -4.27958869934082], + [0.6472803950309753, -0.6045805215835571], + [-5.7706451416015625, 7.679032802581787], + [-4.972448825836182, 5.6008195877075195], + [7.34067440032959, -2.346717357635498], + [7.519280910491943, -2.171613931655884], + [-1.429060697555542, 1.7778700590133667], + [1.066229224205017, 5.771531581878662], + [-1.8469138145446777, 0.5770233869552612], + [-3.977349042892456, 5.877660751342773], + [-0.31030505895614624, -1.205617070198059], + [-4.022280216217041, -1.3000596761703491], + [2.9484944343566895, -4.932574272155762], + [0.7260180711746216, 6.796011924743652], + [-4.126677989959717, 6.376768112182617], + [2.75284481048584, -4.544435501098633], + [1.9394433498382568, -3.7755537033081055], + [-2.0371203422546387, 5.625374794006348], + [0.20937034487724304, -0.41534745693206787], + [0.6437862515449524, -8.070585250854492], + [-0.04906166344881058, 8.122448921203613], + [-2.176636219024658, -1.7713583707809448], + [-3.760242462158203, 5.9177751541137695], + [2.8315746784210205, -4.432109832763672], + [2.811551570892334, 5.688257694244385], + [2.0018739700317383, 5.0971503257751465], + [-1.994222640991211, 1.9270102977752686], + [1.7541100978851318, 0.5035887956619263], + [0.41633254289627075, -6.081424713134766], + [0.6072192192077637, -7.7906599044799805], + [0.9048164486885071, -6.864605903625488], + [-0.19126558303833008, 2.2201013565063477], + [-1.3226410150527954, -0.5202375054359436], + [-5.775196552276611, -1.2054131031036377], + [-0.2572612762451172, 8.325820922851562], + [5.855483531951904, -4.077410697937012], + [8.058859825134277, -2.903393030166626], + [-2.11539363861084, 0.5909432768821716], + [-1.38533353805542, 1.5161453485488892], + [0.5423462986946106, -8.075485229492188], + [-0.19536924362182617, 7.4927144050598145], + [-1.170973300933838, 1.027766466140747], + [6.458793640136719, -3.2688076496124268], + [-3.3738980293273926, 4.360906600952148], + [-1.8921775817871094, 1.4659022092819214], + [-4.058593273162842, -4.210470676422119], + [6.662031650543213, -3.0691235065460205], + [0.024636410176753998, -0.9139001965522766], + [-2.0032429695129395, 2.186800479888916], + [1.655103087425232, 2.85988450050354], + [-2.101574659347534, 1.2320480346679688], + [-1.2472729682922363, 10.93140983581543], + [-4.518225193023682, 6.994603157043457], + [-5.049435138702393, 6.986667633056641], + [-1.2536051273345947, 0.8999777436256409], + [-0.21253925561904907, 7.142833232879639], + [-4.3107404708862305, -1.556329607963562], + [0.9846406579017639, -4.666848659515381], + [-3.0127804279327393, -1.2890039682388306], + [0.6418722867965698, -8.727203369140625], + [0.5155171155929565, -7.627185821533203], + [0.7795782685279846, -6.832236289978027], + [2.0067648887634277, -4.338586330413818], + [0.41424810886383057, -7.040329933166504], + [2.915710687637329, -4.6635284423828125], + [0.20865923166275024, -4.533633232116699], + [0.5567638278007507, 2.2521705627441406], + [2.3709793090820312, -5.249059677124023], + [2.7447612285614014, 5.232838153839111], + [3.6706130504608154, 7.0180535316467285], + [-2.387138605117798, 2.9519407749176025], + [0.6567064523696899, -7.868296146392822], + [0.4588029384613037, -7.294787883758545], + [2.871307134628296, -4.835280418395996], + [3.514699935913086, 7.154117584228516], + [-1.5643945932388306, 1.017383098602295], + [0.5399263501167297, -5.874283790588379], + [2.5081980228424072, -5.071154594421387], + [-5.385556697845459, -0.8201490044593811], + [8.194478988647461, -2.4495608806610107], + [-4.724695682525635, 5.934850215911865], + [7.279172420501709, -3.5170490741729736], + [2.27345609664917, -5.031847953796387], + [-0.04545069485902786, -2.7286570072174072], + [-5.054087162017822, -1.3850780725479126], + [0.36811161041259766, -6.548530578613281], + [-5.357678413391113, 6.885670185089111], + [-4.71812629699707, 6.085371017456055], + [2.7021238803863525, -4.439145565032959], + [-1.042130947113037, 10.644938468933105], + [2.7098701000213623, -4.487461090087891], + [-4.38648796081543, 2.825302839279175], + [-4.757077693939209, -0.957689642906189], + [2.7603700160980225, -5.190550327301025], + [0.3626764416694641, 4.1248884201049805], + [-5.436426162719727, 5.979528427124023], + [0.9196344017982483, 0.13103017210960388], + [-3.9676296710968018, 5.434913635253906], + [1.983776330947876, -4.76885986328125], + [3.642193555831909, 6.665009498596191], + [-4.118261337280273, -0.2670888900756836], + [0.5769446492195129, -7.3968963623046875], + [-3.5723321437835693, -2.2878029346466064], + [1.8206552267074585, -4.850481033325195], + [0.19398736953735352, -6.705132007598877], + [-0.9878968000411987, 0.6445772051811218], + [-3.4900074005126953, -2.0941073894500732], + [-2.954542636871338, 5.072094440460205], + [-1.8085827827453613, 1.227270245552063], + [0.7723804116249084, -4.392643451690674], + [2.725316286087036, -4.7242326736450195], + [7.644294261932373, -2.8137547969818115], + [0.4492279887199402, -6.621932029724121], + [-2.960313081741333, 6.182437896728516], + [4.640692234039307, 7.617680549621582], + [-1.6010358333587646, 1.2004081010818481], + [0.1147560402750969, 7.803954124450684], + [-0.5644842386245728, 9.936318397521973], + [-2.983800172805786, 6.044425010681152], + [-4.263537406921387, -0.789149284362793], + [-4.398617267608643, -3.3272688388824463], + [-3.06280255317688, 0.03582381829619408], + [-0.0354812815785408, 9.2020845413208], + [-0.556919276714325, 0.9626749753952026], + [-0.26409482955932617, 8.856745719909668], + [9.613581657409668, -2.953882932662964], + [-4.756782054901123, 0.17134976387023926], + [0.31737375259399414, -7.22712516784668], + [0.5967838168144226, -7.667095184326172], + [-0.6044338345527649, 4.866722106933594], + [5.6648430824279785, -1.6512970924377441], + [-1.9666812419891357, -0.3100789785385132], + [-3.025730848312378, -1.5394684076309204], + [5.443118572235107, -3.190615653991699], + [8.919325828552246, -2.981320381164551], + [6.59060525894165, -3.4031574726104736], + [-3.9898595809936523, -1.865350365638733], + [-3.2182223796844482, -1.5818356275558472], + [0.5515238642692566, -7.48065185546875], + [0.11790453642606735, 5.5004472732543945], + [-5.961915493011475, -1.1238884925842285], + [0.43104612827301025, -6.851123809814453], + [-1.358931064605713, 11.475518226623535], + [0.4456831216812134, -5.7872314453125], + [-0.8053303360939026, 10.756053924560547], + [0.18706566095352173, -5.042726993560791], + [0.5546622276306152, -0.6998997926712036], + [-1.9529632329940796, 2.212564468383789], + [-0.874904215335846, 10.288006782531738], + [-4.173171520233154, 5.720155715942383], + [-0.7440081238746643, 9.8531494140625], + [-4.247716903686523, -0.829897403717041], + [-3.824477195739746, -2.8383677005767822], + [-0.9751865267753601, 11.200996398925781], + [8.57307243347168, -2.6411025524139404], + [1.4833097457885742, -4.341303825378418], + [-4.20540714263916, -2.2801270484924316], + [-0.28257888555526733, -1.3079546689987183], + [0.7556273937225342, -6.87405252456665], + [0.4073304533958435, -5.16317081451416], + [0.5027197599411011, -7.402657508850098], + [8.996508598327637, -2.7342939376831055], + [-2.4905457496643066, -1.270938754081726], + [0.5011039972305298, -5.855882167816162], + [8.182121276855469, -2.549705743789673], + [-0.2052541971206665, -1.8628700971603394], + [1.6682298183441162, 1.6982711553573608], + [2.3224871158599854, 5.418246269226074], + [0.08417122811079025, -4.778512001037598], + [-1.1262637376785278, 10.709339141845703], + [2.4894158840179443, -4.206230640411377], + [-2.9930832386016846, 6.881279945373535], + [-6.284400939941406, 8.189912796020508], + [2.946552038192749, -5.079345226287842], + [-3.588378429412842, 6.0702924728393555], + [-0.8096610903739929, 10.377248764038086], + [-1.219208836555481, 1.4879248142242432], + [0.49484628438949585, -6.686504364013672], + [-4.334089756011963, -1.4640594720840454], + [2.1094672679901123, 5.5949554443359375], + [-1.4969794750213623, 13.009492874145508], + [4.943723201751709, 7.742976188659668], + [-1.3209490776062012, -0.5971119403839111], + [-1.669582486152649, 1.5198066234588623], + [-4.455369472503662, 6.703360557556152], + [-5.182023048400879, 6.7070817947387695], + [-1.7780709266662598, 2.177180528640747], + [2.838954210281372, -4.525160789489746], + [-0.43345844745635986, -1.1028579473495483], + [-1.9412868022918701, 0.529514729976654], + [-5.357539653778076, 4.600667953491211], + [-1.9880659580230713, 0.8039442300796509], + [-3.762040853500366, -2.1609678268432617], + [2.8725836277008057, 6.310534477233887], + [1.3636716604232788, 5.984368324279785], + [-3.310628890991211, -0.7262119650840759], + [-4.325028896331787, -2.939511775970459], + [8.255732536315918, -2.65085768699646], + [2.7952768802642822, -4.8512797355651855], + [0.6142850518226624, 6.866461753845215], + [0.723767101764679, -9.686744689941406], + [0.5540181398391724, -7.446442604064941], + [4.276521682739258, -3.409571886062622], + [-4.67702054977417, 4.837130069732666], + [-3.3562545776367188, -1.1754820346832275], + [3.2470638751983643, 6.681408882141113], + [9.346978187561035, -2.9329745769500732], + [4.242100715637207, 7.18179178237915], + [-0.04757804423570633, -3.404515504837036], + [-3.3049476146698, -3.2197532653808594], + [0.7456209063529968, -8.232133865356445], + [0.557457685470581, 5.131414413452148], + [-3.7464234828948975, -1.6750000715255737], + [0.006717614829540253, 9.096593856811523], + [-3.594163656234741, -2.6843602657318115], + [-0.23803934454917908, -3.281024932861328], + [1.3054604530334473, -0.013624642044305801], + [-2.9413516521453857, 2.9209892749786377], + [-4.282384872436523, -1.0438246726989746], + [-2.854196786880493, 5.885791301727295], + [1.7241308689117432, 4.614991188049316], + [0.7047458291053772, -0.5189928412437439], + [1.6060044765472412, -5.746387481689453], + [-2.167020559310913, 1.307145595550537], + [1.9826586246490479, 5.268204689025879], + [-4.156116485595703, -1.2515028715133667], + [9.663599967956543, -2.942173719406128], + [-1.5751183032989502, -1.6783387660980225], + [-5.8234639167785645, 7.934805870056152], + [-5.4118733406066895, -1.0844937562942505], + [3.826580762863159, 6.896529197692871], + [-3.195146322250366, -0.6373158097267151], + [-1.8625746965408325, 1.9996427297592163], + [-0.11645913869142532, 9.158578872680664], + [-1.350611686706543, 10.981666564941406], + [-0.7814925909042358, 0.21577033400535583], + [1.4393235445022583, -5.205069541931152], + [-4.379902362823486, 5.538854122161865], + [-3.8540427684783936, -1.530455231666565], + [-4.395386695861816, -0.9606007933616638], + [1.7532373666763306, 6.216187477111816], + [-4.09814977645874, -2.1303818225860596], + [4.667862892150879, 7.732608795166016], + [-0.09651599079370499, -2.600944757461548], + [7.0923309326171875, -4.09114408493042], + [0.07035397738218307, -2.9785521030426025], + [-2.995276689529419, -2.177509069442749], + [4.4804253578186035, 0.03173535689711571], + [-0.2757453918457031, 9.784472465515137], + [-1.1999657154083252, 10.639352798461914], + [-2.412235975265503, 1.1658247709274292], + [1.8837288618087769, -4.842039585113525], + [-4.846730709075928, -0.8017005920410156], + [-4.203802108764648, -3.321646213531494], + [-0.33632320165634155, 8.249507904052734], + [-4.6861371994018555, -2.686833381652832], + [3.5248377323150635, -3.5877814292907715], + [-4.211201190948486, -1.9655179977416992], + [0.6354478001594543, -7.576205730438232], + [2.683116912841797, -4.340595245361328], + [0.4228670597076416, -7.310054302215576], + [1.2779772281646729, -0.1818852573633194], + [-4.1378960609436035, -1.118646502494812], + [6.8512043952941895, -3.606790542602539], + [2.1379494667053223, -5.796544551849365], + [-4.166345119476318, -0.5792598724365234], + [0.5182740688323975, -6.924617290496826], + [1.4100942611694336, -5.634804725646973], + [-2.333022117614746, 2.1932218074798584], + [-3.6758575439453125, -1.9151378870010376], + [-2.622022867202759, 2.925356149673462], + [0.42746978998184204, 5.494746208190918], + [1.2739406824111938, 0.5726866722106934], + [0.3265005946159363, -5.2501373291015625], + [-3.6333401203155518, -1.457625150680542], + [-1.3113800287246704, 0.9654667377471924], + [-3.7561442852020264, -1.3381214141845703], + [1.7058805227279663, -0.4887939393520355], + [0.4979010224342346, -5.06581974029541], + [0.8393735289573669, -5.950934410095215], + [0.5128721594810486, -6.365907669067383], + [1.0992095470428467, 1.3660203218460083], + [-1.3409271240234375, 12.1810302734375], + [-0.470384418964386, -0.7296828031539917], + [-3.0847833156585693, -2.507622480392456], + [-3.2163028717041016, -1.3649526834487915], + [-1.1757798194885254, 10.65609073638916], + [-3.003164529800415, 1.6831858158111572], + [1.4720594882965088, -5.781440734863281], + [-1.1482865810394287, 0.7807958126068115], + [-1.2043291330337524, 11.105981826782227], + [2.8435604572296143, -4.637696266174316], + [6.007401943206787, -4.117824554443359], + [-4.655068397521973, 4.26085090637207], + [0.5668327212333679, -7.757838249206543], + [-0.6867807507514954, 10.179808616638184], + [-1.8126447200775146, 1.4148067235946655], + [3.049975633621216, -4.967495918273926], + [6.609385967254639, -1.7736115455627441], + [-1.0189661979675293, -0.12710162997245789], + [-2.0739986896514893, -0.1573493480682373], + [-0.04360658675432205, -1.1423096656799316], + [-3.838738441467285, -2.6568126678466797], + [-2.1341183185577393, 2.407987356185913], + [2.7788829803466797, -4.621095180511475], + [1.5815610885620117, 3.7665340900421143], + [0.7561702132225037, -9.236047744750977], + [-1.3027786016464233, 11.557347297668457], + [-0.49582648277282715, -1.384528398513794], + [-1.6726582050323486, -1.065118432044983], + [6.310105800628662, -4.337031364440918], + [-1.234649419784546, 5.986771583557129], + [-5.083736896514893, 4.041638374328613], + [0.5339629054069519, -7.415949821472168], + [0.5241991281509399, -5.283318996429443], + [0.1233779713511467, -5.656928062438965], + [2.158780813217163, 0.7857227325439453], + [-5.587902069091797, 7.501972198486328], + [1.3064533472061157, 9.36766242980957], + [-4.667863845825195, -3.8480231761932373], + [-3.317948579788208, -0.9853140711784363], + [-4.580106735229492, -1.1577532291412354], + [-3.2902638912200928, -1.889702320098877], + [-1.0242055654525757, 11.305416107177734], + [-3.407870054244995, -2.9080045223236084], + [-3.8663532733917236, -2.520944356918335], + [7.563561916351318, -2.3105528354644775], + [0.5897510647773743, -6.880388259887695], + [-0.7178148627281189, 8.764379501342773], + [2.6941816806793213, -4.8850555419921875], + [0.6363697648048401, -6.633030414581299], + [8.925887107849121, -3.0155303478240967], + [-3.5431103706359863, -1.6051934957504272], + [1.007950782775879, -6.955910682678223], + [-3.9078030586242676, 4.079498291015625], + [8.211372375488281, -2.5611512660980225], + [2.9618003368377686, 6.543152809143066], + [-3.6231048107147217, -1.6917725801467896], + [-3.535921812057495, -1.5452550649642944], + [-3.5729424953460693, -0.9731329679489136], + [2.704834222793579, 4.613157272338867], + [1.9872713088989258, -5.144267559051514], + [0.858060359954834, -5.590301036834717], + [-1.3670477867126465, 11.935953140258789], + [-1.7762086391448975, 1.9594639539718628], + [-1.9639403820037842, 0.8014919757843018], + [-2.313323974609375, 1.9772683382034302], + [-1.2972691059112549, 11.897022247314453], + [-2.9784910678863525, -0.6763468980789185], + [0.7191519141197205, -8.918437957763672], + [-1.4616128206253052, 12.216963768005371], + [-4.5169901847839355, 6.381155967712402], + [-0.6103308796882629, 10.704729080200195], + [0.8740424513816833, -7.565265655517578], + [-4.639451503753662, -1.563153624534607], + [-1.228094458580017, 11.118946075439453], + [8.179078102111816, -2.8512983322143555], + [0.08001219481229782, -5.293290138244629], + [2.6237704753875732, 5.938615798950195], + [-5.785146236419678, -0.6392729878425598], + [1.3745403289794922, 5.252631664276123], + [0.9603069424629211, -6.848112106323242], + [-4.129166126251221, -2.8632900714874268], + [-4.227396011352539, 5.938035011291504], + [0.6028743386268616, -7.662348747253418], + [2.969390630722046, -4.956696510314941], + [-0.06349111348390579, 8.446586608886719], + [0.3579803705215454, -6.242623329162598], + [0.9948228001594543, -4.427849769592285], + [-3.9128856658935547, -2.6438186168670654], + [0.8029879331588745, -4.065518379211426], + [-2.337852716445923, -1.1327537298202515], + [-1.9421635866165161, 1.800639033317566], + [1.9495117664337158, 2.673409938812256], + [8.899039268493652, -2.88325572013855], + [-1.161331295967102, 11.22851276397705], + [6.524778842926025, -3.248962640762329], + [5.873358726501465, -2.5772287845611572], + [1.018489956855774, -0.04317450895905495], + [-1.8623535633087158, 1.7184852361679077], + [0.9099332690238953, 5.330373764038086], + [-1.268710732460022, 11.376070976257324], + [0.9668704867362976, -7.422984600067139], + [7.612222194671631, -2.5623795986175537], + [2.7078487873077393, -4.268928527832031], + [2.7142975330352783, -4.853853225708008], + [1.9331018924713135, 4.974422454833984], + [0.6566621661186218, -8.512746810913086], + [-0.23745474219322205, -2.4462413787841797], + [0.7551098465919495, -6.856392860412598], + [-4.6775336265563965, -4.761352062225342], + [0.7516564726829529, -9.441179275512695], + [0.8781472444534302, -5.511964797973633], + [7.399972915649414, -2.235687255859375], + [-0.3156110644340515, -1.2444994449615479], + [2.2843315601348877, 5.978492736816406], + [3.7358508110046387, 6.683583736419678], + [-3.5858309268951416, 0.01606946811079979], + [0.9155771136283875, -0.11499181389808655], + [-0.8927817940711975, 9.804944038391113], + [-3.9908857345581055, -1.7742090225219727], + [2.8065617084503174, -4.615264415740967], + [8.399365425109863, -2.643315553665161], + [-1.5728238821029663, 1.255831003189087], + [-4.808373928070068, 3.9464497566223145], + [-0.6756197810173035, 10.090497970581055], + [1.1240313053131104, -0.28451189398765564], + [2.7684569358825684, -5.12979793548584], + [6.920673847198486, -1.9368664026260376], + [1.0215606689453125, -7.529582977294922], + [-1.092173457145691, -0.965772807598114], + [0.9759798645973206, -5.604526519775391], + [7.668449401855469, -3.43182635307312], + [9.153336524963379, -2.9635322093963623], + [-0.5306932926177979, 9.578595161437988], + [-0.7867463827133179, 10.333049774169922], + [-4.9445881843566895, -3.684004545211792], + [-0.4777120351791382, -4.3326416015625], + [-2.614170551300049, 5.263437271118164], + [9.8438081741333, -2.9619667530059814], + [-4.453596115112305, -0.870970606803894], + [-1.6151540279388428, 12.956130027770996], + [-3.5016672611236572, -2.1244797706604004], + [0.3050365149974823, -5.112595081329346], + [0.41076821088790894, -6.520715236663818], + [-0.4172205328941345, -1.3646421432495117], + [-0.15490829944610596, 8.795557975769043], + [1.6444827318191528, 5.3832292556762695], + [6.216808795928955, -1.7892730236053467], + [0.6295695304870605, -4.197059154510498], + [-3.5997416973114014, -1.2988508939743042], + [-3.6075170040130615, -2.672685384750366], + [-4.365291595458984, 4.758255958557129], + [7.904417514801025, -2.3500428199768066], + [2.804741144180298, 6.274589538574219], + [0.3027383089065552, -5.957988739013672], + [2.713501214981079, -4.80082893371582], + [0.9404492974281311, 0.4540746212005615], + [5.767820358276367, -1.2957707643508911], + [8.450018882751465, -2.9661600589752197], + [-1.7027784585952759, 1.728899598121643], + [0.7452064156532288, -4.985339641571045], + [2.370959997177124, -4.604087829589844], + [0.3830854296684265, -5.477802276611328], + [-0.9773699045181274, 9.64776611328125], + [0.6321892142295837, -7.169144153594971], + [0.3305719494819641, -4.925991058349609], + [-5.575976371765137, -1.3447951078414917], + [2.304049253463745, -4.990703582763672], + [2.6015231609344482, 5.589926719665527], + [0.3374773859977722, -5.062773704528809], + [-1.0557042360305786, 10.352519989013672], + [-3.449449300765991, -1.9008187055587769], + [0.1671513319015503, 6.519715309143066], + [-1.195873737335205, 10.608438491821289], + [1.324433445930481, -3.587930202484131], + [-3.7368409633636475, 6.150616645812988], + [7.098182201385498, -1.7990083694458008], + [3.4559123516082764, 7.016942977905273], + [-5.361853122711182, -0.28221094608306885], + [3.741004705429077, -3.960371255874634], + [0.7894403338432312, -4.6557159423828125], + [-3.588721990585327, -0.6009577512741089], + [0.5440829396247864, -7.513789653778076], + [-5.129459381103516, -0.9119642972946167], + [6.932607173919678, -2.3253633975982666], + [-1.8930240869522095, 0.07656854391098022], + [1.2117137908935547, -4.630856513977051], + [5.057657718658447, 7.876086235046387], + [0.10082533210515976, 1.196941614151001], + [6.415220737457275, -1.7081538438796997], + [-4.540167331695557, 6.274389266967773], + [3.9711382389068604, 7.039334297180176], + [2.1930673122406006, -6.343928813934326], + [9.596465110778809, -2.939786911010742], + [0.16613391041755676, -5.345260143280029], + [-1.7054862976074219, 1.3721576929092407], + [-4.085668563842773, 6.024717807769775], + [-1.5612989664077759, 1.1657170057296753], + [0.750080406665802, -8.825624465942383], + [9.932089805603027, -2.968820095062256], + [6.620038032531738, -2.1336252689361572], + [-3.502852201461792, -1.0509437322616577], + [2.4186177253723145, 4.146130561828613], + [-3.597759962081909, -2.1016104221343994], + [-3.1380581855773926, 4.470013618469238], + [-0.9768735766410828, 9.636880874633789], + [-3.756368398666382, -1.3390272855758667], + [-4.09438943862915, -2.065516233444214], + [-3.9015533924102783, -2.457747220993042], + [-1.5840883255004883, -1.2033849954605103], + [7.11496639251709, -2.2456181049346924], + [0.7014263272285461, -4.502289295196533], + [-0.1622765064239502, -1.3201453685760498], + [5.9639434814453125, -3.3048055171966553], + [-3.05210542678833, -1.0674302577972412], + [-1.8407199382781982, 1.6943544149398804], + [-5.663343906402588, 7.760425567626953], + [6.597442150115967, -3.4226672649383545], + [-2.822254180908203, 5.309869289398193], + [-2.8058393001556396, 6.042862415313721], + [2.8144423961639404, -4.708211421966553], + [-2.033679723739624, 2.6291286945343018], + [2.3055953979492188, -4.668069839477539], + [-2.049743413925171, 2.2219786643981934], + [-3.424302101135254, 5.472044944763184], + [-4.454622745513916, 1.8445290327072144], + [2.369338274002075, -6.313020706176758], + [2.7109487056732178, -4.34022331237793], + [0.8720950484275818, -0.3945541977882385], + [-5.202645778656006, -1.1313048601150513], + [0.46852535009384155, -7.36958646774292], + [0.7194510102272034, -5.342084884643555], + [2.83415150642395, -4.736888885498047], + [2.8732211589813232, -4.919433116912842], + [-5.2495341300964355, 6.1656084060668945], + [0.7136312127113342, -7.04612398147583], + [0.5345445275306702, -4.328438758850098], + [-3.295057535171509, -1.5986616611480713], + [-1.6972787380218506, 1.05884850025177], + [-0.6736342906951904, -1.5881364345550537], + [4.293436527252197, 7.362868309020996], + [2.2050435543060303, 0.7143502831459045], + [-3.8394691944122314, -2.748380184173584], + [2.746711015701294, 6.468509197235107], + [8.726509094238281, -2.6502721309661865], + [-1.569463849067688, 1.0400089025497437], + [-4.259410381317139, -0.9079523086547852], + [-2.3675448894500732, -1.0730153322219849], + [-1.2698402404785156, 11.208930969238281], + [-3.255638837814331, -1.7792545557022095], + [-4.431044578552246, 4.537543296813965], + [3.0841336250305176, -2.437390089035034], + [-0.5233762860298157, 4.361484050750732], + [-5.446277141571045, 7.2334136962890625], + [-1.6101441383361816, -0.5551488399505615], + [0.751512348651886, -9.082144737243652], + [-3.1673128604888916, 3.312891721725464], + [-0.45910754799842834, -1.6344648599624634], + [8.255970001220703, -2.371741533279419], + [0.3604242503643036, -3.7076146602630615], + [4.372776508331299, 7.5411176681518555], + [4.359676837921143, 7.387810707092285], + [-3.802532911300659, 6.201618194580078], + [7.6244988441467285, -3.5338404178619385], + [4.763350963592529, -4.598664283752441], + [-3.4677369594573975, 5.57735013961792], + [2.747004985809326, -4.219137668609619], + [3.0059378147125244, -5.059780597686768], + [0.7338539958000183, -9.017505645751953], + [-4.096323013305664, -0.07918435335159302], + [2.145143985748291, -4.626729965209961], + [-0.4072699546813965, 9.57045841217041], + [-5.081197738647461, 6.424633026123047], + [-1.3367502689361572, 11.387008666992188], + [0.5972476601600647, -6.7365922927856445], + [5.939370632171631, -2.933417558670044], + [3.5823519229888916, 7.126794815063477], + [8.401798248291016, -3.237872838973999], + [-0.6277809739112854, 10.528912544250488], + [2.5193426609039307, 4.450995445251465], + [1.782682180404663, 1.394429326057434], + [0.4239288568496704, -5.1028032302856445], + [-5.981181621551514, 7.988894462585449], + [1.7097008228302002, -6.7395429611206055], + [-1.1406595706939697, 10.544886589050293], + [0.06699230521917343, -0.371865451335907], + [1.5228787660598755, 1.9639972448349], + [1.455329179763794, -6.936522483825684], + [5.462403297424316, -2.612166166305542], + [2.5150704383850098, -4.290916442871094], + [-3.1367015838623047, 6.141499042510986], + [-2.3037960529327393, 2.1005423069000244], + [8.201379776000977, -3.172344923019409], + [6.769262790679932, -3.4798643589019775], + [3.980879068374634, 6.8906941413879395], + [1.4159703254699707, 5.063052654266357], + [0.5080272555351257, -7.3563432693481445], + [-3.825479745864868, -4.232460975646973], + [1.8241028785705566, 3.161964178085327], + [-2.1858012676239014, 2.024540901184082], + [-3.630862236022949, -1.206555962562561], + [2.8794405460357666, 5.895408630371094], + [-1.966192364692688, 2.397507667541504], + [2.7439072132110596, -5.020421028137207], + [-2.031968116760254, 1.0075536966323853], + [-3.819199800491333, -1.5887521505355835], + [-1.2520772218704224, 11.23277473449707], + [0.6493688821792603, -7.980975151062012], + [-1.3115243911743164, -2.138615131378174], + [2.2562127113342285, -3.8325655460357666], + [-5.577521800994873, 5.454530715942383], + [-2.696553945541382, -1.0719188451766968], + [-0.20583432912826538, 1.8919116258621216], + [2.8803374767303467, -4.879308223724365], + [4.366672992706299, 7.6432085037231445], + [-0.20499584078788757, -1.545364499092102], + [2.452139377593994, -4.7597808837890625], + [-2.659647226333618, -1.4527009725570679], + [-3.0961854457855225, 3.454697608947754], + [-0.28504300117492676, 5.384333610534668], + [1.8903568983078003, 0.785232663154602], + [2.5616040229797363, -4.421693801879883], + [-2.964724063873291, -0.6872776746749878], + [-5.118645191192627, -4.083016395568848], + [2.7425827980041504, -4.95001745223999], + [0.5509409308433533, -7.605467796325684], + [-2.372846841812134, -2.787367582321167], + [6.771569728851318, -2.8374316692352295], + [3.3190181255340576, -2.0511701107025146], + [-1.2436734437942505, 1.532252550125122], + [1.9127182960510254, -7.000518798828125], + [-4.206618785858154, -3.0232536792755127], + [2.563497304916382, -4.444748878479004], + [-1.9803636074066162, 5.798582077026367], + [2.3127665519714355, -3.927544355392456], + [-1.14744234085083, 8.841961860656738], + [-3.773932933807373, -0.5172370076179504], + [2.8558919429779053, -4.207551002502441], + [2.9976441860198975, -3.0566246509552], + [2.1567904949188232, 1.0346161127090454], + [2.473721742630005, 6.409121036529541], + [2.7034616470336914, -4.257030010223389], + [-2.10709285736084, 1.2045307159423828], + [2.6959190368652344, -4.447037696838379], + [-4.879273891448975, -1.8180381059646606], + [-3.6248528957366943, -1.395689606666565], + [2.3278987407684326, -4.116576194763184], + [-3.7219932079315186, -2.2874815464019775], + [-5.268145561218262, 6.986268997192383], + [-1.201853632926941, 10.86132526397705], + [-0.18379798531532288, -1.8623011112213135], + [6.329155921936035, -2.6838905811309814], + [1.1185235977172852, -3.316936731338501], + [-4.431173324584961, -1.0211985111236572], + [8.108305931091309, -3.0129222869873047], + [0.5765078663825989, 1.0557163953781128], + [2.1538937091827393, -4.077932357788086], + [2.923387289047241, -4.755078315734863], + [-4.109766960144043, -1.929002285003662], + [-4.451500415802002, -3.813307523727417], + [2.6893484592437744, -4.98192834854126], + [2.866962194442749, -4.548763751983643], + [0.2873716950416565, -6.377019882202148], + [0.6720893383026123, -6.686567306518555], + [-2.3108444213867188, -1.3264158964157104], + [-1.4274924993515015, 12.206377029418945], + [-5.197260856628418, 7.127168655395508], + [-1.3269190788269043, 11.393938064575195], + [0.32526224851608276, -6.169291973114014], + [2.9481074810028076, -4.757843017578125], + [0.8635407090187073, -8.0035982131958], + [-1.2405941486358643, -1.0150424242019653], + [4.186238765716553, -4.116774082183838], + [-4.816127300262451, 7.301752090454102], + [7.43942403793335, -2.7870662212371826], + [-1.1139823198318481, 10.749300003051758], + [2.112206220626831, -4.273257255554199], + [0.8613887429237366, -7.5244927406311035], + [0.5711503624916077, -5.455934047698975], + [2.3955471515655518, 5.769961833953857], + [-2.787006139755249, 5.098272323608398], + [-1.806565761566162, 1.5318273305892944], + [-2.127553701400757, 0.8323728442192078], + [-3.460306167602539, -3.639370918273926], + [3.5700509548187256, 6.3201398849487305], + [-3.4116427898406982, -0.7808313369750977], + [1.0888820886611938, 6.559933185577393], + [-3.516517162322998, -1.7427335977554321], + [1.6895052194595337, -4.016472339630127], + [-0.4802248179912567, -1.336053729057312], + [-3.8210177421569824, -0.3688954710960388], + [-3.8456647396087646, -1.9687886238098145], + [-1.537845253944397, 2.1635963916778564], + [-3.5950162410736084, -1.3183180093765259], + [-3.9487290382385254, 6.889520168304443], + [-2.0041472911834717, 1.6014381647109985], + [-3.6180806159973145, -0.7562708258628845], + [1.3375282287597656, 0.018407534807920456], + [6.6466593742370605, -3.337857961654663], + [-3.8142101764678955, -2.3552114963531494], + [3.181462526321411, -5.31384801864624], + [2.026089906692505, -4.823011875152588], + [-3.7343392372131348, -2.1392276287078857], + [-1.9070188999176025, 1.490613579750061], + [1.316154956817627, 1.1609997749328613], + [0.26176565885543823, -4.53508996963501], + [2.8379528522491455, -4.78834867477417], + [-2.1059155464172363, -0.6091539263725281], + [4.690039157867432, 7.437192916870117], + [-2.9963600635528564, -0.12582015991210938], + [-0.5780835151672363, 0.6596678495407104], + [-0.4503348767757416, -1.38041090965271], + [-1.6642580032348633, 2.0958750247955322], + [4.034214496612549, 7.269268035888672], + [-4.800057888031006, 6.0545806884765625], + [0.3611298203468323, -6.235409736633301], + [1.9140726327896118, 3.511843204498291], + [0.4434800148010254, -4.567707061767578], + [-1.4101972579956055, 11.820383071899414], + [1.9342916011810303, -5.023324012756348], + [3.503293514251709, 6.447653770446777], + [-4.103705406188965, -1.4002695083618164], + [7.097368240356445, -4.312402725219727], + [0.8640567660331726, -5.591639518737793], + [1.2093945741653442, 0.21445778012275696], + [4.831023693084717, -4.216611385345459], + [-1.5144003629684448, 12.184267044067383], + [0.5816020965576172, -8.794537544250488], + [1.17885422706604, -6.108635902404785], + [-4.0078959465026855, -2.1455509662628174], + [-4.056797981262207, -0.868331253528595], + [-2.8233482837677, -2.01308274269104], + [3.0265402793884277, -5.121829032897949], + [1.5015021562576294, -5.846463680267334], + [0.5869461297988892, -7.056265830993652], + [4.317104339599609, 7.1288065910339355], + [-0.989678680896759, 10.869871139526367], + [-1.3652307987213135, 1.0250601768493652], + [0.7367722392082214, -5.765417098999023], + [-0.7436684370040894, -1.680330753326416], + [2.0843348503112793, 0.4754796624183655], + [-0.5890450477600098, 9.693014144897461], + [1.3745079040527344, -4.771563529968262], + [-2.0117244720458984, -0.997803270816803], + [0.5519130825996399, -5.7707085609436035], + [-0.8741018176078796, 4.596354007720947], + [-4.342452049255371, 2.9172074794769287], + [-2.5285696983337402, 2.5244364738464355], + [-1.4203662872314453, 1.8584880828857422], + [0.4004303216934204, -7.104921817779541], + [0.6466767191886902, -8.37549877166748], + [-1.4196339845657349, 11.897270202636719], + [-1.5930252075195312, 3.669773817062378], + [-1.0715149641036987, 11.313100814819336], + [-1.2169194221496582, 11.223001480102539], + [3.871478319168091, 7.3716721534729], + [2.7339272499084473, 5.387794494628906], + [2.4009511470794678, 5.4405341148376465], + [-0.7353352904319763, 10.692320823669434], + [-3.5490639209747314, -0.79277104139328], + [4.078117847442627, 6.840393543243408], + [0.6345909833908081, -8.096895217895508], + [-1.31005859375, 11.296220779418945], + [-3.855635404586792, -1.3838882446289062], + [2.9342126846313477, -4.553016662597656], + [-4.998819828033447, 3.821221113204956], + [0.6182539463043213, -7.318601608276367], + [-1.4362432956695557, 12.15178108215332], + [-2.5116355419158936, 5.803189277648926], + [-4.160429954528809, 6.026275634765625], + [-4.239238262176514, -1.4035067558288574], + [-3.8893983364105225, 7.098230361938477], + [-5.6927008628845215, -0.7634900808334351], + [6.023970603942871, -1.8978813886642456], + [2.780637502670288, -4.223888874053955], + [2.496742010116577, 5.645047664642334], + [0.6241872310638428, -7.510501861572266], + [-3.6532018184661865, -2.0294389724731445], + [-5.139711856842041, 6.037196636199951], + [8.20234489440918, -2.448303461074829], + [2.0416224002838135, 0.6668686270713806], + [1.0676956176757812, -5.984160423278809], + [6.312056064605713, -1.9131630659103394], + [2.725080728530884, -3.2506492137908936], + [2.760913133621216, -4.785825729370117], + [-0.1654813289642334, 0.11656436324119568], + [-1.124719500541687, 10.67580795288086], + [-5.466101169586182, 3.4564764499664307], + [2.8125388622283936, -4.766009330749512], + [2.4322547912597656, 4.202183723449707], + [-2.3123154640197754, -1.474637746810913], + [-4.052500247955322, -1.0040113925933838], + [-1.3101511001586914, 10.979534149169922], + [5.423120498657227, -1.74624502658844], + [-4.63702917098999, 6.120450973510742], + [5.609877109527588, -2.211853504180908], + [-2.688075065612793, -1.158939242362976], + [2.7628238201141357, -4.725766658782959], + [-5.609717845916748, 7.364790916442871], + [-2.79933762550354, -1.2756353616714478], + [1.0076868534088135, -7.42386531829834], + [7.519612789154053, -3.0790188312530518], + [-1.2890068292617798, 11.559305191040039], + [-4.35844087600708, -1.5416887998580933], + [1.9149854183197021, -5.763241767883301], + [-1.7103626728057861, 1.8835463523864746], + [-3.948026180267334, -1.7368189096450806], + [-4.513622760772705, 7.071624755859375], + [2.3336434364318848, 5.114439487457275], + [1.473830223083496, 2.49238920211792], + [-2.7876548767089844, -0.8500234484672546], + [6.465301036834717, -1.7386393547058105], + [0.7297483682632446, -6.773618698120117], + [-3.49407958984375, -1.717628002166748], + [1.4084376096725464, 1.5750592947006226], + [-3.6364734172821045, -2.0375986099243164], + [-3.7456653118133545, -1.06195867061615], + [-0.3509783148765564, 7.649296283721924], + [8.693965911865234, -2.6360294818878174], + [0.8103063106536865, -5.960306167602539], + [7.564350605010986, -2.4968948364257812], + [1.1047959327697754, 0.7258448600769043], + [-0.40454214811325073, 9.403938293457031], + [-1.722080945968628, 13.501777648925781], + [0.6020568013191223, -6.821282863616943], + [-0.18837600946426392, 7.096625328063965], + [-4.110598564147949, 0.16789531707763672], + [-0.7322531342506409, 10.515247344970703], + [2.996610403060913, 6.6426825523376465], + [0.16328191757202148, -5.5720744132995605], + [-0.5448722839355469, 8.595025062561035], + [0.2728474736213684, 6.855532169342041], + [-3.6527445316314697, -0.8925338983535767], + [-1.8093405961990356, 1.7799698114395142], + [2.7021822929382324, 6.567241191864014], + [1.1414388418197632, 0.37818261981010437], + [-2.783019781112671, 3.0413732528686523], + [0.6516876220703125, -6.065453052520752], + [-3.3834261894226074, 5.807033538818359], + [0.9569030404090881, -7.236546993255615], + [5.796992778778076, -4.018954277038574], + [-2.57041335105896, 6.180239200592041], + [0.7514388561248779, -6.984827518463135], + [-2.5111448764801025, -1.2196062803268433], + [-2.178760051727295, 1.0926355123519897], + [-4.1094889640808105, -2.7137668132781982], + [0.5822169780731201, -8.089768409729004], + [-4.053800106048584, 7.212031364440918], + [0.3517243266105652, -5.5563249588012695], + [7.293045520782471, -2.1498217582702637], + [2.662970542907715, 5.581480979919434], + [-3.4162328243255615, 2.0603747367858887], + [-3.891944169998169, -0.7298145890235901], + [-1.7931501865386963, 1.3532392978668213], + [6.824463367462158, -1.9912514686584473], + [-6.156087398529053, -0.9223146438598633], + [-2.377279043197632, 0.7429221868515015], + [2.0259554386138916, -4.16185188293457], + [-3.779813051223755, -2.3359556198120117], + [0.6819537281990051, -7.585169315338135], + [-5.512791156768799, 5.380999565124512], + [-0.7528555989265442, 10.43220329284668], + [-3.997238874435425, -1.6925307512283325], + [2.6973214149475098, -4.3683695793151855], + [4.493983268737793, 7.592581748962402], + [7.642058372497559, -3.5557963848114014], + [-2.349337339401245, -1.581915020942688], + [-1.6138101816177368, 1.2254936695098877], + [2.1464061737060547, 4.997617244720459], + [-0.9550763964653015, 1.5189329385757446], + [-1.9837902784347534, 0.47988593578338623], + [-3.7332375049591064, -1.3990001678466797], + [-4.893385410308838, 6.7475385665893555], + [-0.03661779314279556, -2.3333773612976074], + [-0.7497473359107971, 2.649797201156616], + [0.7032278180122375, 6.604692459106445], + [-5.6183552742004395, 7.6585187911987305], + [-1.8517076969146729, -1.3748342990875244], + [1.062828540802002, -7.155754566192627], + [1.6722415685653687, -2.931722640991211], + [7.011289596557617, -4.1514506340026855], + [-4.971078395843506, -0.8291888236999512], + [2.5389111042022705, -4.246698379516602], + [-2.0465621948242188, 0.6006324887275696], + [-2.036550283432007, 5.405416965484619], + [-0.7484628558158875, 10.355331420898438], + [6.461728096008301, -3.743699073791504], + [5.349495887756348, -3.96421217918396], + [7.910459041595459, -2.365250825881958], + [-3.746513605117798, -2.247321367263794], + [-1.5354682207107544, 4.962943077087402], + [0.44504714012145996, -6.091721057891846], + [5.851052284240723, -2.3588969707489014], + [-0.6301591396331787, 9.446846008300781], + [2.8839848041534424, 6.200620651245117], + [-4.146494388580322, -0.7772794961929321], + [1.446516990661621, 1.4720344543457031], + [-5.39802360534668, -0.730318009853363], + [0.6339014172554016, -8.227209091186523], + [-3.2517755031585693, -3.169440269470215], + [1.943361520767212, -3.1735613346099854], + [2.956641912460327, -5.141599178314209], + [0.9832144379615784, -5.846273422241211], + [0.5764613747596741, -8.479866981506348], + [2.495084047317505, 6.540824890136719], + [5.606301784515381, -1.7606526613235474], + [-2.0183868408203125, 5.126931190490723], + [0.6970389485359192, -4.768866539001465], + [-0.5139383673667908, 10.484357833862305], + [-4.181606769561768, -2.4775068759918213], + [-1.807964563369751, 1.7217434644699097], + [-1.451932668685913, 12.141559600830078], + [0.6310625076293945, -6.647972106933594], + [9.918126106262207, -2.969189405441284], + [-0.8734868168830872, 9.064191818237305], + [0.9024623036384583, 4.596323013305664], + [-1.7029321193695068, -0.6157525181770325], + [-3.949683904647827, -1.1413155794143677], + [-4.100954532623291, -0.763451099395752], + [-3.605455160140991, -1.2762445211410522], + [1.5216031074523926, 1.804061770439148], + [-0.3922045826911926, 8.825740814208984], + [-3.1984336376190186, -0.9687298536300659], + [-1.8863463401794434, 0.83351731300354], + [0.5786659717559814, -6.017426490783691], + [-1.7790169715881348, 2.1496376991271973], + [-2.165663242340088, -2.150681734085083], + [1.4902122020721436, 1.3289090394973755], + [-4.766361236572266, 5.766609191894531], + [-3.186113119125366, -0.4038684368133545], + [-2.8272531032562256, -0.5307599902153015], + [2.1517980098724365, 5.232513904571533], + [-0.627917468547821, -1.043866515159607], + [2.4515087604522705, 6.253515720367432], + [-0.3580307364463806, 9.009300231933594], + [-2.9399523735046387, -0.8655458688735962], + [0.5861832499504089, 6.974539756774902], + [-3.8985531330108643, -0.8377469778060913], + [1.090505599975586, 4.488706588745117], + [0.10375665873289108, -4.978792190551758], + [0.8868163824081421, -3.5574755668640137], + [0.8909147381782532, -0.475105881690979], + [6.541043758392334, -2.9681460857391357], + [0.7432375550270081, 1.7157310247421265], + [-4.25564432144165, -3.022907018661499], + [0.058841876685619354, -4.341700077056885], + [-0.6809640526771545, 9.730155944824219], + [8.14776611328125, -3.5513226985931396], + [-1.9666674137115479, 1.7858850955963135], + [6.750730037689209, -1.9762479066848755], + [-5.6959686279296875, 7.013481616973877], + [1.8657608032226562, 4.335321426391602], + [-5.455033302307129, 7.806609630584717], + [-1.2047628164291382, 11.295403480529785], + [9.400446891784668, -2.842885732650757], + [-0.540485143661499, 9.998377799987793], + [-4.165538311004639, -0.2204725742340088], + [1.0188795328140259, 2.898118734359741], + [-0.4660596251487732, 10.087969779968262], + [-2.1255266666412354, -1.9241019487380981], + [0.000887356698513031, -1.4570168256759644], + [-2.892284870147705, -1.5102064609527588], + [2.1120822429656982, -4.462862968444824], + [0.9361490607261658, -7.267101287841797], + [2.78041934967041, -4.674070835113525], + [-3.447277307510376, -2.650411367416382], + [-0.17186963558197021, 8.771862983703613], + [-1.9020134210586548, 1.8566192388534546], + [4.225560665130615, 7.299312591552734], + [-1.1114723682403564, 0.9443581700325012], + [7.081480503082275, -2.4475858211517334], + [-3.2648606300354004, -1.1749621629714966], + [0.24112045764923096, -6.316369533538818], + [7.75187349319458, -3.4080140590667725], + [1.668379783630371, 1.3232935667037964], + [1.845064640045166, 0.7606104016304016], + [1.6048407554626465, 5.129790306091309], + [-2.117112398147583, 0.9996824264526367], + [2.312633752822876, 5.659323215484619], + [7.091464519500732, -2.9989798069000244], + [-0.18686872720718384, 8.622421264648438], + [7.066494941711426, -2.7130324840545654], + [-0.8322018980979919, -2.7999608516693115], + [0.3818044662475586, -6.1446428298950195], + [-1.3349179029464722, -1.04035222530365], + [2.587885618209839, 6.337860584259033], + [2.754148483276367, 6.1901140213012695], + [-0.23174431920051575, -1.695960521697998], + [-4.422164440155029, 5.841771125793457], + [-5.083094120025635, 6.842296600341797], + [-1.08046555519104, 10.512897491455078], + [-0.12090808898210526, 0.5472924709320068], + [-4.266098976135254, -1.2120152711868286], + [1.4504196643829346, 1.7341715097427368], + [2.709930181503296, -4.480515480041504], + [7.484513282775879, -2.99410080909729], + [-5.422120571136475, 6.382909774780273], + [-1.458622694015503, 1.5230571031570435], + [-0.7021214962005615, -1.3091871738433838], + [-3.9981870651245117, -2.0273895263671875], + [0.9610565304756165, -6.331083297729492], + [-4.07591438293457, -0.9037065505981445], + [0.7599572539329529, -4.471745014190674], + [0.40146613121032715, -7.025476455688477], + [0.6089251041412354, -5.344330310821533], + [-0.49873632192611694, 10.418556213378906], + [-1.225921869277954, 11.169224739074707], + [7.258894443511963, -2.7828128337860107], + [4.839848518371582, -5.647386074066162], + [-1.7965543270111084, 0.5937490463256836], + [-3.3572287559509277, -1.0693796873092651], + [-1.351163387298584, 11.739373207092285], + [6.367336750030518, -2.223173141479492], + [-0.2181302011013031, -2.9289908409118652], + [-4.730632305145264, -3.775756359100342], + [1.6819889545440674, 4.911203384399414], + [-0.07750881463289261, 8.255423545837402], + [6.458037376403809, -3.560255765914917], + [-3.650132179260254, -0.6155682802200317], + [0.7516300082206726, -8.224184036254883], + [-0.6451080441474915, 9.935925483703613], + [-4.002755165100098, 5.504003047943115], + [6.144367694854736, -2.454000234603882], + [0.962571918964386, -5.835457801818848], + [0.6480671167373657, -0.5290307998657227], + [0.29701805114746094, -6.016221046447754], + [2.8785712718963623, -4.817745685577393], + [-3.6730167865753174, -0.058144692331552505], + [0.3988953232765198, -0.8091222643852234], + [-1.7343170642852783, 1.1544514894485474], + [-3.2824642658233643, 0.06176721677184105], + [2.7962653636932373, -5.1619486808776855], + [1.7266461849212646, 4.945626735687256], + [-1.0657274723052979, 10.743585586547852], + [0.4911084771156311, -4.921836853027344], + [0.04047279804944992, -5.214127063751221], + [-2.8833558559417725, 4.209747314453125], + [8.7384033203125, -2.9029314517974854], + [-3.1927826404571533, 5.311050891876221], + [-1.6364331245422363, 5.694755554199219], + [0.7511900663375854, -5.856987476348877], + [-1.6007634401321411, 12.557809829711914], + [0.38842761516571045, -5.247868061065674], + [5.6726603507995605, -1.2262582778930664], + [7.7618279457092285, -2.384265661239624], + [-1.007968783378601, 10.72494125366211], + [-5.267100811004639, 7.253681182861328], + [0.7892791032791138, -0.20103976130485535], + [-1.5638386011123657, 1.7187634706497192], + [-0.03450123220682144, -1.1851686239242554], + [-1.529689908027649, 0.9824587106704712], + [-3.327244520187378, -1.0768978595733643], + [-1.2752609252929688, 11.098684310913086], + [8.097426414489746, -2.940814971923828], + [2.5665197372436523, -4.173762321472168], + [2.923227548599243, -4.61808967590332], + [-0.6465585231781006, 9.752143859863281], + [0.7739560604095459, -0.22468116879463196], + [0.17451775074005127, -6.091819763183594], + [2.213967800140381, -4.287100315093994], + [1.5919878482818604, -4.824550151824951], + [1.5943114757537842, 1.1498757600784302], + [-0.5027569532394409, 9.23037052154541], + [-1.8404223918914795, 1.2715827226638794], + [0.9210531115531921, -4.861274719238281], + [-5.641091823577881, 3.7896480560302734], + [-0.6851935386657715, 10.429348945617676], + [0.4229940176010132, -5.222440719604492], + [-5.388062000274658, 6.887613296508789], + [-3.905888319015503, -1.5755740404129028], + [-0.48629873991012573, 9.908217430114746], + [-0.050101228058338165, 7.538022041320801], + [-1.884393572807312, 5.851679801940918], + [-4.96691370010376, 6.594559669494629], + [-3.2875401973724365, -1.0868912935256958], + [0.45796966552734375, -6.9077558517456055], + [-3.901654005050659, -3.0572121143341064], + [4.1046576499938965, 7.075775146484375], + [-1.8236991167068481, 0.908163845539093], + [-4.763790607452393, 3.8912837505340576], + [7.115737438201904, -3.621734380722046], + [2.4677326679229736, -4.238628387451172], + [2.1713263988494873, -5.869122505187988], + [-3.6937856674194336, -1.5104156732559204], + [6.338526248931885, -1.7566288709640503], + [-1.4403438568115234, 2.217890739440918], + [-3.259080171585083, -0.7261630892753601], + [2.678034782409668, -5.230241298675537], + [-1.3303847312927246, 0.8239434957504272], + [-3.171537160873413, -0.4919920563697815], + [1.46015202999115, 1.4410048723220825], + [-1.145391583442688, 11.57252311706543], + [2.7153568267822266, -4.303745269775391], + [3.0136091709136963, -5.14986515045166], + [-3.2891287803649902, 4.676792144775391], + [6.56857442855835, -2.5237672328948975], + [-1.1030082702636719, 9.597042083740234], + [-3.0010945796966553, -2.780866861343384], + [-5.482559680938721, 7.30783224105835], + [-0.579963207244873, -1.076995849609375], + [2.1580276489257812, 6.456718444824219], + [2.904374361038208, 6.268091201782227], + [7.0183258056640625, -3.11061692237854], + [2.2697649002075195, 0.6328737735748291], + [-1.803555965423584, 0.6861878037452698], + [-0.12169326096773148, -1.2060061693191528], + [0.7384673357009888, -5.051929473876953], + [-4.766721248626709, 4.899768829345703], + [-0.23829692602157593, -0.8358186483383179], + [6.4521098136901855, -2.3918845653533936], + [-1.1036019325256348, 10.864465713500977], + [2.9858336448669434, 6.027126789093018], + [-3.75262188911438, -0.7651136517524719], + [0.6384793519973755, -7.613683700561523], + [-1.5010108947753906, -2.496952772140503], + [8.831332206726074, -2.725713014602661], + [-3.2887251377105713, -0.8466007113456726], + [-1.7843130826950073, 4.957275390625], + [-0.35199490189552307, -3.02972412109375], + [9.0320463180542, -2.7537763118743896], + [-0.7362611293792725, 10.139957427978516], + [1.294134259223938, -5.1251115798950195], + [-2.8583836555480957, 2.852172613143921], + [0.40923893451690674, -6.282791614532471], + [6.056670665740967, -1.134954810142517], + [7.540843486785889, -3.521503210067749], + [-0.8948245644569397, 1.1509392261505127], + [5.214352607727051, 8.140472412109375], + [-3.450029134750366, -1.562398076057434], + [8.88076400756836, -2.677672863006592], + [-5.32361364364624, -0.659424901008606], + [0.740922749042511, -9.017991065979004], + [0.3104168772697449, -5.376101970672607], + [0.4916003346443176, -8.180338859558105], + [-1.6489248275756836, 1.377691626548767], + [-1.4642270803451538, 0.8743216395378113], + [0.5684288740158081, -7.440746307373047], + [-1.8686963319778442, 1.997522234916687], + [-3.710789918899536, -0.9512186050415039], + [7.229886054992676, -3.3173015117645264], + [0.5001640319824219, -7.320681095123291], + [5.641117095947266, -4.617610931396484], + [-0.14010000228881836, -0.8433355689048767], + [5.761070728302002, -1.9963291883468628], + [-2.618168592453003, -1.896445631980896], + [-2.3400425910949707, 0.06956666707992554], + [-0.5509212017059326, 8.174822807312012], + [3.5998947620391846, 7.27581262588501], + [2.210578680038452, -3.7566981315612793], + [0.16235551238059998, -1.2351744174957275], + [0.45697563886642456, -6.798730850219727], + [-4.750228404998779, 7.0800557136535645], + [-1.6795250177383423, -2.5584449768066406], + [-1.1338809728622437, 10.858469009399414], + [-4.365519046783447, 6.336997032165527], + [-0.7999868392944336, -2.956855535507202], + [-3.396005392074585, -2.5477497577667236], + [3.167276382446289, -5.376726150512695], + [0.7668346762657166, -9.372644424438477], + [-3.7076451778411865, 5.9901580810546875], + [7.133273601531982, -1.931784749031067], + [6.944755554199219, -1.9674415588378906], + [2.8880903720855713, 5.468801498413086], + [7.094921112060547, -2.4399359226226807], + [-0.6140313744544983, 5.438803672790527], + [-1.2460129261016846, 11.496903419494629], + [-1.4249975681304932, 1.814681053161621], + [-3.687317132949829, 5.206975936889648], + [1.7631773948669434, 5.3641767501831055], + [3.1706182956695557, -4.907678127288818], + [1.7578222751617432, 5.564665794372559], + [0.6486087441444397, -7.517948627471924], + [-1.900148630142212, 1.2701988220214844], + [-4.949143886566162, 3.1500210762023926], + [2.4066410064697266, -4.032580375671387], + [5.34523868560791, -3.1006863117218018], + [-3.6418237686157227, -2.7844767570495605], + [-1.930985450744629, 1.7461012601852417], + [-3.5565364360809326, -1.4093905687332153], + [-0.03330365568399429, -4.627777099609375], + [0.5758245587348938, -7.0872344970703125], + [-3.5664732456207275, -0.01346767321228981], + [2.904062271118164, -4.469048500061035], + [3.8726091384887695, 6.8669843673706055], + [3.534398317337036, 6.598526954650879], + [1.7578368186950684, 5.773225784301758], + [3.066352367401123, -6.037810802459717], + [2.707287073135376, -4.310895919799805], + [-3.1199705600738525, -1.6295350790023804], + [2.7674219608306885, 5.472591876983643], + [3.8168866634368896, 6.838798522949219], + [7.509474277496338, -2.492990493774414], + [6.64785623550415, -2.091538906097412], + [-4.216590404510498, 1.074275016784668], + [-1.960532307624817, 2.015822649002075], + [4.4296393394470215, -2.0432541370391846], + [-0.2803681492805481, 9.54297161102295], + [10.12819766998291, -3.0255982875823975], + [-4.44936990737915, -2.0081233978271484], + [-0.7772772312164307, 10.1447114944458], + [0.7144691348075867, -8.867898941040039], + [-0.6391482949256897, 9.730463981628418], + [-1.55045747756958, -1.6818393468856812], + [6.153059482574463, -4.580005168914795], + [6.666138172149658, -2.2569918632507324], + [-2.1503562927246094, 2.102266550064087], + [6.758727550506592, -2.7088239192962646], + [5.008559703826904, 7.786224842071533], + [-4.217800617218018, -3.053365468978882], + [-3.520742177963257, -0.8010934591293335], + [-1.9037247896194458, 1.3964695930480957], + [4.62528657913208, 7.522992134094238], + [-1.8051257133483887, 1.2568461894989014], + [1.0738176107406616, -5.695817947387695], + [-5.363125324249268, 6.57803201675415], + [0.12230765074491501, -5.359711647033691], + [-4.490614414215088, -0.9641653895378113], + [7.696040153503418, -2.9416353702545166], + [1.3693249225616455, -5.922157287597656], + [-1.0971534252166748, -0.5260728597640991], + [1.242586612701416, 4.349287033081055], + [0.3269903063774109, -5.149209499359131], + [-4.035913944244385, -2.2194912433624268], + [0.5994005799293518, -8.162195205688477], + [0.023618631064891815, -4.134530067443848], + [3.048231840133667, -3.73309326171875], + [-1.7749335765838623, -0.670473575592041], + [9.046064376831055, -3.1104767322540283], + [2.6444547176361084, 4.9231696128845215], + [-1.5145339965820312, 12.369396209716797], + [-3.0525104999542236, -2.2221271991729736], + [-1.406023621559143, 12.223028182983398], + [0.3851168751716614, -6.834185600280762], + [1.7242487668991089, 1.90913987159729], + [-2.5226471424102783, -0.8863850235939026], + [0.7081842422485352, -7.801723480224609], + [2.1371772289276123, -4.203330039978027], + [0.8044784069061279, -5.8326520919799805], + [2.469045400619507, 5.566961765289307], + [-3.2374308109283447, -1.2495768070220947], + [-3.0128300189971924, -1.293312430381775], + [0.33987879753112793, -6.019036293029785], + [-0.9459307789802551, 10.578142166137695], + [0.3353015184402466, -6.211635589599609], + [3.2379937171936035, 6.251236915588379], + [-1.6635229587554932, 1.990573763847351], + [9.249289512634277, -2.771634817123413], + [-1.3054357767105103, 11.073493957519531], + [-3.9041717052459717, -3.460071086883545], + [-4.15922212600708, 1.9600991010665894], + [0.3936566710472107, -6.851102828979492], + [-4.3551177978515625, 6.851823806762695], + [2.39345645904541, 4.888904094696045], + [1.0632494688034058, -0.506589949131012], + [-4.395702838897705, -1.566079020500183], + [2.727982759475708, -4.13669490814209], + [-3.1150152683258057, 2.6921515464782715], + [-3.9231417179107666, -2.2542059421539307], + [-2.015354871749878, 2.2781107425689697], + [-3.260420083999634, -0.7064578533172607], + [-4.55626106262207, 5.996691703796387], + [2.6295831203460693, -4.614109516143799], + [6.5518574714660645, -2.4698522090911865], + [2.504380464553833, -4.326525688171387], + [-4.749753475189209, -0.8452178835868835], + [1.94720458984375, 5.2647247314453125], + [0.6830787658691406, -8.700714111328125], + [-4.744208812713623, -3.4208288192749023], + [0.5398386716842651, -5.090766906738281], + [-0.7783920168876648, 9.781402587890625], + [7.87354040145874, -2.335594892501831], + [-4.0751118659973145, 4.736437797546387], + [-3.811596632003784, -1.0104659795761108], + [6.628971576690674, -3.555324077606201], + [8.130328178405762, -2.9534192085266113], + [8.715519905090332, -2.6983683109283447], + [-4.241428852081299, -2.946376085281372], + [0.31493741273880005, -6.418598175048828], + [1.0261013507843018, -4.810493469238281], + [1.7935616970062256, -4.857337951660156], + [2.384185552597046, 0.6874484419822693], + [0.8298949599266052, -7.6326189041137695], + [-1.922378659248352, 4.590732574462891], + [-1.827451467514038, -0.44915130734443665], + [-3.6966960430145264, -0.6407626867294312], + [8.181315422058105, -2.611510992050171], + [0.9929171204566956, -6.564284801483154], + [-3.847993850708008, -1.029815912246704], + [-5.213478088378906, -1.5026041269302368], + [2.4558608531951904, -4.819533824920654], + [0.628573477268219, -8.056079864501953], + [2.4876720905303955, -4.764422416687012], + [-0.18107688426971436, 4.495759010314941], + [0.5615357756614685, -8.213372230529785], + [8.158170700073242, -3.1250529289245605], + [0.17559218406677246, 0.885177493095398], + [2.761704683303833, -4.7499542236328125], + [-5.23220682144165, 4.67494010925293], + [-0.8429990410804749, 9.668384552001953], + [-5.208690643310547, 6.762918472290039], + [0.4814196825027466, 6.29853630065918], + [-4.265881061553955, -1.2402960062026978], + [-3.8075809478759766, -1.0743603706359863], + [0.3150760233402252, -5.279443740844727], + [-4.858093738555908, 5.723554611206055], + [9.125332832336426, -2.8413245677948], + [-1.721644401550293, -2.3936727046966553], + [-1.8789429664611816, 1.8639793395996094], + [7.736958026885986, -3.6450817584991455], + [-4.67882776260376, -2.426025152206421], + [-4.181157112121582, 6.492705821990967], + [-3.5016636848449707, -0.456576406955719], + [-3.436389207839966, -1.7538955211639404], + [-2.7594521045684814, -1.9674229621887207], + [-4.464919567108154, -2.673185110092163], + [0.6518202424049377, -0.603034257888794], + [-3.3111941814422607, -0.6498695611953735], + [0.6204808354377747, 6.7492804527282715], + [-3.8904807567596436, -2.6611573696136475], + [-3.811833620071411, -2.024217367172241], + [6.296281337738037, -4.04376745223999], + [-0.6001248359680176, 8.769163131713867], + [5.031778812408447, 8.173770904541016], + [-1.829552173614502, -2.1102397441864014], + [-0.6314442157745361, 9.465660095214844], + [0.84175044298172, -7.707006454467773], + [-3.5799152851104736, -2.073028802871704], + [-2.0211124420166016, 1.7400869131088257], + [-0.88205486536026, 10.723133087158203], + [-4.351266384124756, -1.2220960855484009], + [0.6181643605232239, -5.195797920227051], + [0.8877819180488586, 6.439406394958496], + [0.813466489315033, -4.95217752456665], + [10.689072608947754, -3.248577356338501], + [-1.5866422653198242, 0.8623595833778381], + [4.811443328857422, 7.701419353485107], + [0.7641585469245911, -0.395587682723999], + [0.5747732520103455, -6.325876235961914], + [1.0725558996200562, -7.139143943786621], + [-0.07916469126939774, 8.40861701965332], + [0.8750244379043579, 2.068121910095215], + [7.091492176055908, -2.2192187309265137], + [0.6114252209663391, -8.185006141662598], + [-4.148627758026123, -0.5957022905349731], + [0.36115217208862305, -7.084505558013916], + [-1.7025878429412842, 1.9940117597579956], + [0.9614889025688171, 0.10720747709274292], + [1.0543971061706543, -5.914479732513428], + [-5.079145908355713, -1.513806700706482], + [0.011757247149944305, -5.345597267150879], + [-4.698243618011475, -0.8011204600334167], + [-1.843035101890564, 1.7432479858398438], + [-1.9219450950622559, 1.3147536516189575], + [-3.5770041942596436, -1.320881962776184], + [-3.9140822887420654, -1.7436436414718628], + [2.948878526687622, -4.613739967346191], + [-2.6126656532287598, -1.8228893280029297], + [-4.139065742492676, 6.333952903747559], + [1.4762799739837646, -7.19316291809082], + [0.7775827646255493, -0.19396331906318665], + [7.553635597229004, -3.977591037750244], + [-0.5897614359855652, 9.403278350830078], + [-3.893838405609131, -1.3601469993591309], + [-0.412927508354187, -1.4063597917556763], + [-3.5284125804901123, -1.9956642389297485], + [1.2951828241348267, -4.7945966720581055], + [6.178471565246582, -3.755504608154297], + [0.41405773162841797, 6.083281517028809], + [-0.8521149754524231, 10.649114608764648], + [-2.05509614944458, 2.416673183441162], + [-4.186348915100098, -3.206141471862793], + [7.764425754547119, -2.286045789718628], + [-2.3951196670532227, 2.2774300575256348], + [-1.8673057556152344, 1.7575689554214478], + [-3.9003446102142334, -1.4537180662155151], + [1.375381350517273, -6.979491233825684], + [-1.4431931972503662, 11.806415557861328], + [-0.3311731219291687, 9.607294082641602], + [8.487509727478027, -3.0884816646575928], + [-4.857693672180176, 6.808651924133301], + [-0.3657550811767578, -1.998327612876892], + [-1.1389769315719604, 10.987944602966309], + [4.62722635269165, -3.8967716693878174], + [1.7273385524749756, 0.5721886157989502], + [-0.44570839405059814, -1.5074697732925415], + [0.7254830598831177, -0.3769243657588959], + [3.4191248416900635, -5.536508083343506], + [-4.057840824127197, -1.584709644317627], + [-1.2395116090774536, 1.1194096803665161], + [1.6741485595703125, -6.4413957595825195], + [-2.604203939437866, 4.358631134033203], + [3.7308061122894287, 6.933896064758301], + [1.7070047855377197, 3.9650065898895264], + [0.5794550180435181, -4.552509784698486], + [7.835297107696533, -2.843964099884033], + [-3.636779546737671, -1.2250298261642456], + [0.3796202540397644, -6.646327972412109], + [1.1719245910644531, 4.773468971252441], + [0.6363786458969116, -5.687844276428223], + [-1.3963595628738403, 11.760885238647461], + [8.431794166564941, -2.974226236343384], + [-3.5526530742645264, -0.3910914659500122], + [-4.110279083251953, -3.3572630882263184], + [-5.965090751647949, 8.145454406738281], + [-0.8693352937698364, 10.33859634399414], + [2.126171350479126, 6.333926677703857], + [-2.0448155403137207, 2.304198741912842], + [-4.0315961837768555, -1.6735726594924927], + [-4.089502811431885, -0.9152586460113525], + [2.7963340282440186, -4.689582824707031], + [-4.130610466003418, -1.4353030920028687], + [7.266635417938232, -2.101008176803589], + [-0.7385267019271851, -1.2236199378967285], + [0.7894679307937622, -7.195503234863281], + [7.759345531463623, -3.0410616397857666], + [-4.296388626098633, -2.65885853767395], + [-4.468240261077881, 6.226125717163086], + [-0.8218889236450195, 1.3940094709396362], + [1.8900724649429321, 0.2460869550704956], + [-4.7315802574157715, -0.507901668548584], + [8.005409240722656, -3.552704095840454], + [7.851944446563721, -2.2893173694610596], + [-5.120112895965576, -4.302410125732422], + [0.7936543822288513, -7.794553756713867], + [-4.452479839324951, -1.6788221597671509], + [-0.41491496562957764, 9.742029190063477], + [-1.4231878519058228, 0.6507423520088196], + [1.419547200202942, 1.5191253423690796], + [1.1543896198272705, -4.284428596496582], + [-1.8289536237716675, 1.8223315477371216], + [7.36338996887207, -3.115253448486328], + [8.741433143615723, -2.587766408920288], + [2.8012406826019287, -7.091967582702637], + [-5.698819637298584, 4.620987415313721], + [-3.0571365356445312, 4.542397975921631], + [-3.0524885654449463, -1.9777777194976807], + [-0.8478063941001892, 10.133305549621582], + [1.0934264659881592, -4.467386245727539], + [-0.7890422344207764, 10.014310836791992], + [1.9222030639648438, -5.212523460388184], + [-4.261056900024414, 5.127481460571289], + [-0.4428408741950989, 10.00395393371582], + [-3.801776170730591, 5.588291645050049], + [1.8703819513320923, 0.5810189843177795], + [-1.4220682382583618, 11.634085655212402], + [0.6603082418441772, 0.7293555736541748], + [8.267653465270996, -2.854022264480591], + [1.2610552310943604, 1.8217130899429321], + [1.5582106113433838, 1.4063602685928345], + [0.6830452680587769, -7.207602500915527], + [1.6736671924591064, -5.068190574645996], + [0.45437371730804443, -7.851273536682129], + [-0.5405036211013794, 8.954621315002441], + [2.6543619632720947, -3.432518720626831], + [-2.7956020832061768, -1.789216160774231], + [-3.7019364833831787, -2.454049825668335], + [1.481398344039917, 1.371569275856018], + [2.069136381149292, -3.763498067855835], + [0.6814242005348206, -8.079208374023438], + [-0.6069151163101196, 9.518932342529297], + [-3.6492927074432373, -2.245846748352051], + [-1.624881386756897, 0.2080913484096527], + [-5.676734447479248, 7.611223220825195], + [7.914529323577881, -2.5742266178131104], + [-4.363318920135498, -2.296830177307129], + [-0.039487577974796295, -2.1817805767059326], + [0.5135299563407898, -6.867585182189941], + [1.88053297996521, -4.488076210021973], + [0.6526546478271484, -7.725550651550293], + [0.19633811712265015, -0.9145879745483398], + [2.6633718013763428, 6.5808305740356445], + [8.431166648864746, -2.8006553649902344], + [-0.9469881653785706, 10.73088264465332], + [-4.400665760040283, -0.7624254822731018], + [0.13169032335281372, -5.73340368270874], + [-1.456274151802063, 12.186506271362305], + [1.9609646797180176, -5.437344074249268], + [9.123990058898926, -2.7479140758514404], + [-4.418426513671875, 6.306099891662598], + [-4.326334476470947, -2.9953317642211914], + [6.442309856414795, -2.054452419281006], + [4.42770528793335, -3.4915573596954346], + [0.6311073303222656, -5.6775126457214355], + [-1.8478963375091553, 1.4565211534500122], + [2.9669628143310547, -4.812176704406738], + [-4.444698333740234, 6.964302062988281], + [-4.4448466300964355, 3.2797434329986572], + [-4.223249912261963, -1.5012235641479492], + [2.1531710624694824, 5.5862135887146], + [-0.8528294563293457, 1.9034067392349243], + [-3.4350802898406982, -1.405305027961731], + [5.27942419052124, -1.5799237489700317], + [-1.2022279500961304, 10.670652389526367], + [0.2866319417953491, -5.732037544250488], + [-1.1407291889190674, 10.382823944091797], + [-1.0829200744628906, -0.6246835589408875], + [2.6568076610565186, -4.8806843757629395], + [8.127472877502441, -3.5228304862976074], + [1.9819228649139404, 6.125875473022461], + [-3.3216516971588135, -2.446042537689209], + [5.63146448135376, -1.4835046529769897], + [7.8850202560424805, -2.9488744735717773], + [6.531075954437256, -2.784675121307373], + [4.021030426025391, 7.060593605041504], + [-3.339423894882202, -1.1321624517440796], + [0.3959261178970337, -7.27418327331543], + [5.666093826293945, -2.984668254852295], + [-3.313422918319702, -1.263674259185791], + [1.0624868869781494, -5.840245723724365], + [-3.307842254638672, -1.6826850175857544], + [2.989206552505493, -5.659458637237549], + [0.5004890561103821, -6.7819390296936035], + [-0.4189044237136841, -1.7563196420669556], + [-3.0992438793182373, 5.153544902801514], + [-3.8357536792755127, -1.151379942893982], + [-3.9166243076324463, 6.012673377990723], + [0.10775046795606613, -5.505964756011963], + [4.594240665435791, 7.469273567199707], + [-0.8078758120536804, 10.962005615234375], + [-1.9777169227600098, -0.6414209604263306], + [2.1695051193237305, 5.789772033691406], + [-1.1300022602081299, -1.392247200012207], + [-1.5763825178146362, -2.703651189804077], + [-1.0752850770950317, 10.647928237915039], + [1.7913132905960083, 2.0712192058563232], + [2.700836420059204, -4.1440629959106445], + [-0.024702705442905426, -4.232226371765137], + [1.244236946105957, 5.67334508895874], + [0.6379672884941101, -8.050525665283203], + [-3.935755491256714, -1.0999764204025269], + [-5.646113872528076, 6.256277084350586], + [-0.32925868034362793, 9.938340187072754], + [3.931129217147827, 7.029480457305908], + [1.864008903503418, 2.3162271976470947], + [-4.142332553863525, -0.34349149465560913], + [-4.744574546813965, 7.195422172546387], + [1.4630944728851318, 2.1033427715301514], + [0.7348176836967468, -5.00514030456543], + [0.4763675332069397, -4.537771224975586], + [2.198676109313965, -4.654446601867676], + [9.245163917541504, -2.7999966144561768], + [2.159942150115967, -4.034255027770996], + [-4.159947395324707, -1.1590567827224731], + [-4.63187837600708, -3.626220464706421], + [-1.4839894771575928, 1.2890936136245728], + [-3.6491658687591553, -2.552075147628784], + [-1.4450045824050903, 1.619020938873291], + [0.3553542494773865, -6.8800048828125], + [-3.776822328567505, 5.980371475219727], + [2.469625234603882, 6.342410564422607], + [-3.6498429775238037, -1.180866003036499], + [-3.275259256362915, 6.430067539215088], + [0.4386528730392456, -6.68102502822876], + [-3.6593964099884033, -1.1746569871902466], + [2.307682752609253, 6.177208423614502], + [-2.3347747325897217, -0.6385337710380554], + [4.743097305297852, -3.5881147384643555], + [-2.587794065475464, 2.646095037460327], + [-3.138127565383911, -1.5126112699508667], + [2.802142381668091, -4.720149993896484], + [-0.8320032954216003, 7.719440937042236], + [3.011369466781616, -4.669425010681152], + [-1.8546605110168457, 1.8992722034454346], + [0.3280028700828552, -5.657112121582031], + [-4.004209995269775, -2.6723172664642334], + [-1.6536933183670044, -0.803800106048584], + [0.3717084527015686, -7.7204084396362305], + [0.22285515069961548, -4.682700157165527], + [-0.8359262943267822, 10.313547134399414], + [-4.2559356689453125, -3.0548362731933594], + [-2.604950428009033, -0.681755542755127], + [-0.017880387604236603, -4.523688793182373], + [2.171743154525757, 5.7089996337890625], + [4.02777624130249, -4.43997859954834], + [0.8203324675559998, -7.405933856964111], + [-1.8887721300125122, 0.31113603711128235], + [-2.6411006450653076, -1.1966181993484497], + [-4.403133869171143, 6.9490556716918945], + [-1.1762638092041016, 11.442886352539062], + [0.6657772660255432, -8.77335262298584], + [-2.0478475093841553, 2.6448605060577393], + [8.65039348602295, -2.6119978427886963], + [0.6346657872200012, -5.6239728927612305], + [-2.241276264190674, 2.021483898162842], + [0.6906821727752686, -7.392147541046143], + [6.915409564971924, -4.478995323181152], + [1.381333827972412, -5.005897521972656], + [-2.8435428142547607, -1.3671022653579712], + [-1.2321796417236328, 0.768160879611969], + [-4.834671497344971, -3.3639228343963623], + [0.027971826493740082, -4.1753339767456055], + [-1.8423937559127808, 0.9912214279174805], + [7.8039374351501465, -2.277599811553955], + [-1.7967846393585205, 1.9784265756607056], + [3.1101574897766113, 6.624256610870361], + [-5.8618245124816895, 7.839527130126953], + [2.788665533065796, -4.432188034057617], + [-4.385717391967773, 3.356398344039917], + [1.8542132377624512, 4.345607280731201], + [-4.785773754119873, 6.940564155578613], + [-0.7567436099052429, 10.535018920898438], + [-1.207066297531128, 1.3891212940216064], + [5.797574043273926, -1.5961967706680298], + [1.5894060134887695, -5.861933708190918], + [0.524512767791748, -6.254554748535156], + [1.7895854711532593, 5.380127906799316], + [-3.2597897052764893, -0.6781406402587891], + [-1.8064793348312378, 0.737873375415802], + [-3.0812418460845947, -0.5695800185203552], + [-4.030036449432373, -2.1786510944366455], + [8.15522289276123, -2.913992166519165], + [-3.3595337867736816, -0.6237049698829651], + [0.46246808767318726, -7.034372329711914], + [-1.677645206451416, 1.7929787635803223], + [-1.5603926181793213, 12.624765396118164], + [3.33730149269104, -4.313193321228027], + [2.7355854511260986, -4.523770332336426], + [-3.618286371231079, -2.090787172317505], + [-3.1242659091949463, -0.4778442978858948], + [-0.8719281554222107, 10.525323867797852], + [-1.221334457397461, 8.933832168579102], + [-2.2294979095458984, 2.1804726123809814], + [-4.789123058319092, 6.619217872619629], + [0.5996901988983154, -6.5946125984191895], + [-3.389849901199341, 6.355119228363037], + [-1.382954716682434, 11.938188552856445], + [1.2429618835449219, -3.19392466545105], + [0.5381825566291809, -3.7742843627929688], + [5.599862575531006, -1.2693349123001099], + [2.7910521030426025, -4.29452657699585], + [-2.173403024673462, 2.4873175621032715], + [-1.1070438623428345, 10.501163482666016], + [0.35958826541900635, -5.058605194091797], + [0.7029452323913574, 1.2965611219406128], + [-0.06694025546312332, -5.42313289642334], + [-4.711651802062988, 6.722806453704834], + [6.032203197479248, -1.9229965209960938], + [0.6975725293159485, -5.7005109786987305], + [-4.9035563468933105, 6.480784893035889], + [-3.569087266921997, -3.712212562561035], + [-0.7508226633071899, 10.016218185424805], + [-4.457269668579102, -3.36897873878479], + [2.5757553577423096, 5.9893951416015625], + [-1.307798981666565, 11.613995552062988], + [2.191894054412842, -4.290919303894043], + [1.0065475702285767, 0.04343342408537865], + [-5.1506266593933105, -3.8996095657348633], + [-3.938692569732666, -1.0906587839126587], + [6.633772373199463, -5.369246959686279], + [-5.655097961425781, -4.461771011352539], + [-0.5475526452064514, 8.98939323425293], + [-1.2508865594863892, 1.3936954736709595], + [0.7018739581108093, -6.498991966247559], + [-3.870908260345459, 5.634754180908203], + [1.8022747039794922, 6.141565799713135], + [-1.321069359779358, 0.7836681604385376], + [1.1934332847595215, -0.04827776923775673], + [-5.18869161605835, -1.325928807258606], + [-3.4368255138397217, -1.4708808660507202], + [-4.001523971557617, -2.9487006664276123], + [7.422360897064209, -3.235700845718384], + [0.8663470149040222, -7.252618789672852], + [-3.5186233520507812, -1.4489431381225586], + [0.7909987568855286, -6.200717926025391], + [2.952928304672241, -4.907021522521973], + [0.22788316011428833, -4.8832550048828125], + [3.1467161178588867, 6.291231155395508], + [0.5337180495262146, -4.929555416107178], + [-4.526942253112793, -3.0892279148101807], + [-1.1574723720550537, 11.160879135131836], + [8.777215003967285, -2.746966600418091], + [-1.07772696018219, -1.1836352348327637], + [-1.9801127910614014, 0.41128602623939514], + [0.8145342469215393, -5.855029106140137], + [7.777221202850342, -2.532827138900757], + [5.997635841369629, -4.380945205688477], + [0.5910288095474243, -4.767828941345215], + [7.413841724395752, -3.9596362113952637], + [1.8650388717651367, -5.194192409515381], + [-4.085483074188232, -0.839597761631012], + [-0.49756139516830444, -1.263330101966858], + [-1.997697114944458, -3.014000177383423], + [4.6481499671936035, -4.387021064758301], + [2.2052342891693115, -5.11121940612793], + [2.841367483139038, -4.563704967498779], + [-4.106936454772949, 0.7097920775413513], + [-3.6855201721191406, -1.5774857997894287], + [1.5730235576629639, 5.974280834197998], + [1.8134297132492065, 4.626343727111816], + [-4.038473129272461, 5.949845790863037], + [10.37000846862793, -3.104665756225586], + [1.6866679191589355, 4.771303176879883], + [0.47139543294906616, -7.0664777755737305], + [7.674394130706787, -2.359308958053589], + [-1.3974782228469849, 11.79847526550293], + [-4.1715826988220215, -2.974811315536499], + [0.45969468355178833, -4.876020431518555], + [0.614625871181488, -7.890911102294922], + [2.1444671154022217, 1.8739887475967407], + [-1.6464900970458984, 2.4329097270965576], + [2.4662277698516846, -4.224921226501465], + [-0.2512325644493103, 1.7136727571487427], + [7.823611736297607, -2.975755453109741], + [-5.422818660736084, 5.219934940338135], + [-0.7434173822402954, 9.776309967041016], + [-3.6932480335235596, -2.184471607208252], + [-0.36792629957199097, 9.451238632202148], + [1.7509104013442993, 3.95527720451355], + [-2.303741693496704, -3.260422706604004], + [4.018890857696533, 7.3721723556518555], + [0.2972564101219177, -6.500179290771484], + [-5.456614971160889, 5.02909517288208], + [-0.031249679625034332, -1.4563571214675903], + [1.6611922979354858, -4.822470664978027], + [-5.318873882293701, -4.26567268371582], + [4.994130611419678, -1.3880869150161743], + [3.7589786052703857, 6.776675224304199], + [-4.555505275726318, 6.481639385223389], + [-4.885640621185303, 5.266861915588379], + [2.7451083660125732, -4.965363502502441], + [2.868530035018921, -4.711208820343018], + [2.9158356189727783, 5.340664863586426], + [0.6309998035430908, -0.30320775508880615], + [-3.721421480178833, -0.838796079158783], + [-3.9710919857025146, -2.242367744445801], + [4.5067219734191895, -3.4631290435791016], + [-0.9299486875534058, 10.769948959350586], + [-4.332720756530762, -0.165543794631958], + [-4.131433010101318, 7.552050590515137], + [-1.2145206928253174, -0.9752439260482788], + [1.4387905597686768, 5.229772090911865], + [1.574251651763916, 1.4739128351211548], + [6.966676235198975, -1.7577043771743774], + [0.2990404963493347, -6.539218902587891], + [-2.057621955871582, 1.2886066436767578], + [0.6227313876152039, -5.012899875640869], + [-4.530186176300049, 4.999246597290039], + [0.3416937589645386, -6.36020040512085], + [3.1110689640045166, -4.850302696228027], + [-2.593209981918335, 2.6253116130828857], + [-4.355928897857666, 6.403039455413818], + [2.870227098464966, -4.957333564758301], + [-0.038956351578235626, -4.381098747253418], + [-1.9847347736358643, 1.4976863861083984], + [-2.3673763275146484, -1.30705726146698], + [-1.7641938924789429, 1.5453048944473267], + [7.943591594696045, -2.704068899154663], + [9.507078170776367, -2.919537305831909], + [-1.0031019449234009, 10.469221115112305], + [-5.038488864898682, 5.223030090332031], + [2.7726809978485107, -4.615861892700195], + [-4.95487642288208, -2.0568926334381104], + [-1.8458728790283203, 0.813771665096283], + [-4.521488666534424, 5.970145225524902], + [-6.528955936431885, -0.6550586223602295], + [0.7883687615394592, -4.415338516235352], + [-0.6625970005989075, 6.480813980102539], + [2.5896923542022705, -4.466889381408691], + [2.5380964279174805, -4.0828022956848145], + [0.05452843755483627, -4.849504470825195], + [-1.3795866966247559, 11.892463684082031], + [0.6856253743171692, -8.583641052246094], + [2.062509298324585, -5.6302056312561035], + [0.41946929693222046, -7.2916154861450195], + [0.3814404606819153, -6.395315170288086], + [0.08654951304197311, -6.268448829650879], + [-4.653639316558838, 2.2123687267303467], + [-1.1197092533111572, 1.5107953548431396], + [-1.2611420154571533, 11.176246643066406], + [-3.911449909210205, -2.4733831882476807], + [0.43776392936706543, -5.570355415344238], + [-3.33251690864563, -1.6104967594146729], + [-4.025668144226074, -1.7712591886520386], + [2.2220284938812256, 5.670248985290527], + [-1.8416591882705688, -3.186453104019165], + [0.4758402705192566, -6.475075721740723], + [1.5787925720214844, 0.34141942858695984], + [8.544501304626465, -2.659637212753296], + [0.6627793312072754, -9.038997650146484], + [-3.2850773334503174, -4.389588356018066], + [-0.0708974078297615, 8.703727722167969], + [0.38330405950546265, -7.237989902496338], + [4.806804180145264, -5.615645885467529], + [5.515365123748779, -1.670549750328064], + [-0.948756754398346, 10.549406051635742], + [-2.189671516418457, -1.3622492551803589], + [5.0400710105896, -2.8411529064178467], + [6.2333879470825195, -3.494898796081543], + [-0.004842646420001984, -5.860584735870361], + [-4.776205062866211, -0.5482722520828247], + [-3.4976632595062256, -1.427320122718811], + [-1.9953776597976685, 1.8740893602371216], + [-0.8836970925331116, 10.183831214904785], + [0.6951726078987122, -8.743023872375488], + [2.697589159011841, -4.021925926208496], + [2.8011512756347656, -3.1075611114501953], + [2.4265668392181396, -5.103798866271973], + [0.7110322713851929, -7.304083824157715], + [-3.1182968616485596, 3.495465040206909], + [0.21435606479644775, -6.901784420013428], + [-2.415828227996826, 2.4244208335876465], + [-0.534548282623291, -0.7247467041015625], + [-3.151557445526123, -1.6664477586746216], + [0.44378727674484253, -6.849334716796875], + [-0.2106873095035553, 0.0455453135073185], + [-1.1390221118927002, 1.350058674812317], + [-0.7917818427085876, 10.346611022949219], + [-5.163293361663818, 5.938350200653076], + [2.3948166370391846, -5.234035491943359], + [1.4247417449951172, 4.563851833343506], + [-3.504645347595215, -1.2358776330947876], + [5.268242359161377, -1.233482003211975], + [1.051694393157959, 6.329550266265869], + [0.7550157308578491, -5.0866522789001465], + [2.332836389541626, 6.3048553466796875], + [7.791329860687256, -2.235532283782959], + [-3.9166038036346436, 5.749258995056152], + [7.620817184448242, -4.438511848449707], + [-4.766517162322998, 5.84385347366333], + [-1.610025405883789, 0.7474188804626465], + [0.6772878766059875, -0.6326872110366821], + [8.852311134338379, -2.754558801651001], + [0.5877609252929688, -7.790521621704102], + [-3.4987103939056396, -1.38532555103302], + [0.8237977623939514, -7.343510627746582], + [5.572852611541748, -3.3144586086273193], + [-4.272084712982178, -3.55454421043396], + [1.474721908569336, 0.1123596578836441], + [0.6047359704971313, -3.605422019958496], + [-1.4710174798965454, 12.043436050415039], + [-5.4774861335754395, 6.241925239562988], + [-5.0519633293151855, 6.9816060066223145], + [-0.3554598391056061, -0.7097339630126953], + [-3.9807169437408447, -2.285593271255493], + [-1.1046380996704102, 4.8723907470703125], + [0.670579195022583, -5.29866886138916], + [-1.88140869140625, -1.0512244701385498], + [-3.1657207012176514, -1.370353102684021], + [-0.5186245441436768, -3.9171314239501953], + [-3.3771111965179443, -1.2169312238693237], + [-1.130287528038025, 11.333826065063477], + [0.5377880334854126, -5.79334831237793], + [-3.636080741882324, -2.662775754928589], + [8.440045356750488, -3.1946370601654053], + [3.0884714126586914, 6.25411319732666], + [8.500999450683594, -2.763171434402466], + [-2.4821929931640625, -1.8080483675003052], + [8.427184104919434, -3.4400646686553955], + [-3.7897849082946777, 6.319220542907715], + [-1.1263117790222168, 11.438121795654297], + [0.29232341051101685, -5.833723068237305], + [-2.1168434619903564, -0.07395762205123901], + [6.646763324737549, -2.1045498847961426], + [2.4615590572357178, -4.208194732666016], + [-3.1504600048065186, -1.065792441368103], + [1.7791507244110107, 6.1646904945373535], + [-5.067370891571045, -3.714803457260132], + [-1.9428859949111938, -1.097535490989685], + [-5.703969478607178, 2.640110969543457], + [2.0004987716674805, -4.008049011230469], + [0.10492318123579025, 0.5814476013183594], + [6.50993013381958, -2.229064464569092], + [-2.2859795093536377, -2.5513572692871094], + [0.7759602665901184, -8.05008316040039], + [2.979325532913208, -4.814319610595703], + [-4.99322509765625, 5.2204790115356445], + [8.531194686889648, -2.9481239318847656], + [-3.6983835697174072, -2.198704719543457], + [-1.3660221099853516, 0.25148606300354004], + [-0.03962022811174393, -3.92496657371521], + [-4.310510158538818, -1.274165391921997], + [0.6770005822181702, -8.55168342590332], + [0.16866552829742432, -5.554927825927734], + [-1.392737627029419, 11.889739990234375], + [-2.659770965576172, -1.7026394605636597], + [7.750686168670654, -2.5892457962036133], + [0.5763974785804749, -7.1533660888671875], + [-0.5438824892044067, 9.916397094726562], + [-0.34726548194885254, -1.4754732847213745], + [-4.667553901672363, -2.1820590496063232], + [-4.086429595947266, -1.254226565361023], + [0.5521866083145142, -6.318546295166016], + [-2.9083948135375977, -0.882733166217804], + [-0.6631426215171814, 10.068828582763672], + [0.5193892121315002, -7.424846172332764], + [-1.425915241241455, 1.8087027072906494], + [-2.4331560134887695, 1.2971607446670532], + [-0.6165810227394104, 9.907432556152344], + [5.356561660766602, -1.2039823532104492], + [-3.242403745651245, -1.2709890604019165], + [0.6862519383430481, 1.511593222618103], + [-3.055979013442993, -1.476359248161316], + [7.406724452972412, -3.7509734630584717], + [-4.339084625244141, 6.596438407897949], + [0.7306445240974426, -9.022268295288086], + [2.1271612644195557, -4.507937431335449], + [6.89175271987915, -2.977736473083496], + [-3.1825926303863525, -1.408988356590271], + [-3.82320237159729, -0.23685485124588013], + [0.36922621726989746, -6.136261463165283], + [-2.7712955474853516, -1.0892540216445923], + [-3.6449737548828125, -1.4115129709243774], + [1.4741413593292236, 2.9724299907684326], + [-4.132497310638428, -2.346778631210327], + [2.2559235095977783, 6.562666893005371], + [2.284233808517456, 6.190953731536865], + [-3.1880786418914795, -1.1835803985595703], + [0.45244526863098145, -5.4090962409973145], + [2.508735418319702, -4.246365547180176], + [-4.037548542022705, -1.3658634424209595], + [-1.223522663116455, 1.0412983894348145], + [-3.6202170848846436, -3.1149773597717285], + [-4.3425774574279785, 6.274531364440918], + [-3.486743211746216, -1.252852201461792], + [-3.2213947772979736, -1.7066200971603394], + [1.0274147987365723, -0.49023789167404175], + [2.4630820751190186, 5.744325637817383], + [-2.9760308265686035, -0.30081647634506226], + [-0.7619338035583496, 10.061027526855469], + [-5.191468715667725, 4.772549629211426], + [5.8654913902282715, -3.152663230895996], + [0.44376641511917114, -7.317395210266113], + [0.7189595103263855, -9.321487426757812], + [6.2317214012146, -2.298492670059204], + [0.5405262112617493, -4.293697834014893], + [9.138100624084473, -3.043253183364868], + [-1.9432142972946167, 0.2068297266960144], + [3.3032658100128174, 6.45237922668457], + [-3.8079283237457275, 3.7786757946014404], + [-1.2177860736846924, 10.928017616271973], + [-1.1758407354354858, 10.876764297485352], + [-1.2289713621139526, 11.034086227416992], + [1.349599838256836, -5.268510818481445], + [0.6836976408958435, -8.664703369140625], + [2.2107253074645996, 5.3767852783203125], + [2.080393075942993, 0.7240923643112183], + [2.501685857772827, 6.095123291015625], + [-5.32932710647583, 5.603124618530273], + [7.046494960784912, -3.2717995643615723], + [-1.2102969884872437, 10.984766960144043], + [-3.5501253604888916, -1.906732201576233], + [2.3559653759002686, -4.067946434020996], + [1.3915331363677979, -0.19804272055625916], + [2.5275797843933105, -4.0344696044921875], + [-4.035642147064209, -0.1627674698829651], + [-1.1764168739318848, 11.087895393371582], + [-0.3600773215293884, 9.883481979370117], + [2.6423890590667725, -3.8360564708709717], + [2.5143420696258545, -3.2881674766540527], + [-4.804953098297119, -4.0411858558654785], + [-1.340624451637268, 12.011709213256836], + [0.538762629032135, -6.161208629608154], + [0.5893247723579407, -5.1696014404296875], + [-5.028477191925049, 5.8277812004089355], + [5.873672008514404, 8.811426162719727], + [1.766886830329895, 2.242934465408325], + [-2.4881303310394287, 2.5719611644744873], + [4.207896709442139, 7.284287452697754], + [6.386288166046143, -1.7251582145690918], + [7.857017517089844, -2.549896478652954], + [-3.168207883834839, -1.56557297706604], + [-1.0476993322372437, 10.345037460327148], + [2.4592976570129395, -4.206613540649414], + [0.14963552355766296, -4.956927299499512], + [-3.918715715408325, -2.45363450050354], + [1.618186116218567, 2.0655691623687744], + [-2.580409526824951, 2.7365033626556396], + [8.68521499633789, -2.937777280807495], + [4.048882007598877, -3.6411209106445312], + [0.9956119656562805, -5.70743465423584], + [-1.0906695127487183, 10.641520500183105], + [-3.9033377170562744, -1.0717121362686157], + [7.824699878692627, -3.9499309062957764], + [-2.00091814994812, 1.2025076150894165], + [0.6282160878181458, -6.270758628845215], + [2.796189546585083, -4.980245590209961], + [-4.9789509773254395, -1.1496187448501587], + [-3.8907506465911865, 6.6424479484558105], + [-4.6186604499816895, -1.0154790878295898], + [0.7259906530380249, -7.214762210845947], + [6.321184158325195, -1.6205662488937378], + [2.177173376083374, 4.862297534942627], + [-1.354604959487915, 2.4577083587646484], + [6.753636837005615, -3.1264514923095703], + [-5.553895473480225, 7.437931537628174], + [2.276756525039673, -4.509803771972656], + [1.0643996000289917, -0.024830523878335953], + [6.291059970855713, -1.2748650312423706], + [3.7516496181488037, 7.408714294433594], + [-5.35042667388916, 8.22377872467041], + [-4.866647243499756, 5.19419527053833], + [2.4988133907318115, -4.288979530334473], + [10.071463584899902, -3.044128179550171], + [-3.482912540435791, -1.3924460411071777], + [-3.2730021476745605, -0.9785139560699463], + [-4.322854995727539, -0.3226798176765442], + [0.5536278486251831, -6.020837783813477], + [0.6453565955162048, -7.451470375061035], + [-1.408235788345337, -0.24232488870620728], + [0.39722931385040283, -6.690029621124268], + [-1.3546704053878784, 10.877942085266113], + [2.3006808757781982, -4.8788957595825195], + [1.7922921180725098, 5.625674724578857], + [-3.809380292892456, 3.3918769359588623], + [7.039991855621338, -3.2134053707122803], + [-0.8720532655715942, 10.018098831176758], + [-1.7878575325012207, 0.6092483997344971], + [-3.2003281116485596, -1.082925796508789], + [-3.9621565341949463, -1.4689178466796875], + [-4.31920051574707, -2.362926721572876], + [8.368552207946777, -2.497246026992798], + [-3.2625527381896973, -1.0045678615570068], + [-5.127807140350342, 7.038440227508545], + [-3.8647043704986572, 5.7089643478393555], + [-3.7196719646453857, -1.8196073770523071], + [-5.197544574737549, 6.08098030090332], + [-3.527165651321411, -1.0523302555084229], + [-4.515356540679932, -1.4336247444152832], + [2.520092725753784, 0.8705856800079346], + [0.9913249611854553, -0.14462098479270935], + [-4.15125036239624, 4.437875747680664], + [-2.43491530418396, -2.0707898139953613], + [2.095398187637329, 5.839371681213379], + [-3.9687819480895996, 4.844947814941406], + [-4.004131317138672, -3.6756179332733154], + [-3.7277355194091797, -0.3660711646080017], + [-4.197967052459717, -1.7892276048660278], + [-1.9402180910110474, 2.1742632389068604], + [1.4286589622497559, -4.658536434173584], + [-3.4676566123962402, -2.358635902404785], + [0.6290453672409058, -6.813989639282227], + [-0.7565961480140686, -3.857497453689575], + [-5.1025776863098145, -1.2362018823623657], + [2.4147069454193115, 5.792023658752441], + [2.411064863204956, -4.385685920715332], + [-1.1426784992218018, 11.454636573791504], + [-0.43333056569099426, -1.57212233543396], + [1.2945654392242432, 0.6070798635482788], + [-3.749072790145874, -1.519943356513977], + [1.6269395351409912, 1.5379778146743774], + [-1.2201423645019531, 9.757518768310547], + [0.589570164680481, -4.461175441741943], + [-1.3595829010009766, 12.069377899169922], + [-2.1049914360046387, 5.680320739746094], + [-1.9442788362503052, 1.893866777420044], + [-0.10397119075059891, -1.6588116884231567], + [9.128355979919434, -2.772883892059326], + [1.1750991344451904, -5.664941787719727], + [-0.6650031805038452, 1.1319183111190796], + [0.31031543016433716, -6.406411170959473], + [-1.329366683959961, 11.518768310546875], + [0.2862705588340759, -5.449556350708008], + [-3.4857702255249023, 5.392453193664551], + [-0.8427994847297668, 10.281448364257812], + [8.83377742767334, -2.6709442138671875], + [0.6048723459243774, 4.361028671264648], + [2.9244816303253174, -4.805490493774414], + [-4.129126071929932, -3.971827507019043], + [-3.5091323852539062, 1.4393147230148315], + [-0.6372233629226685, 6.755517959594727], + [-4.996476650238037, 2.980571746826172], + [1.9184353351593018, 5.388550758361816], + [-3.38946270942688, -1.813753366470337], + [1.616313099861145, 5.289963245391846], + [-1.9087008237838745, 2.202205181121826], + [-5.657567501068115, -1.1298630237579346], + [-0.9269026517868042, 1.3517379760742188], + [6.484683513641357, -2.0500571727752686], + [-2.0099430084228516, -0.5956352949142456], + [0.294930636882782, -6.512104034423828], + [0.6508022546768188, -5.59787654876709], + [2.453843355178833, 3.870826482772827], + [-4.045607566833496, -1.1530996561050415], + [6.0571184158325195, -4.0787248611450195], + [0.42963433265686035, -3.4988410472869873], + [-3.3883323669433594, 5.783403396606445], + [1.8089085817337036, 6.185805797576904], + [7.879225254058838, -2.8278915882110596], + [-0.7032804489135742, 9.544092178344727], + [-3.508711576461792, -1.5065351724624634], + [-1.1825535297393799, 1.2434940338134766], + [-1.1030124425888062, 10.347429275512695], + [4.669837951660156, 7.428088188171387], + [-3.1311302185058594, 4.711241722106934], + [8.35261344909668, -2.672534227371216], + [0.6611690521240234, -7.996857643127441], + [2.6961824893951416, 5.256613731384277], + [-1.4360851049423218, -0.2916412651538849], + [-3.552744150161743, -2.3237035274505615], + [-3.8053176403045654, 6.920444488525391], + [1.5260404348373413, 3.0274412631988525], + [5.539485931396484, -2.130540609359741], + [-1.5701860189437866, 1.3040677309036255], + [-0.2905016839504242, -4.077225685119629], + [-1.3811177015304565, 11.953614234924316], + [5.863173961639404, -1.4013606309890747], + [-1.7018204927444458, 1.1911145448684692], + [8.71259593963623, -2.5568606853485107], + [-5.336120128631592, 7.042059898376465], + [-2.0960888862609863, -1.12876558303833], + [1.1658201217651367, -5.114414691925049], + [-5.689375400543213, 6.882930278778076], + [7.412601947784424, -2.4699625968933105], + [2.1744816303253174, 4.691930770874023], + [-1.1264888048171997, 11.137584686279297], + [1.8145936727523804, 0.47357428073883057], + [4.97776460647583, 7.863305568695068], + [-5.125016212463379, 7.224630832672119], + [-1.9180927276611328, 1.9389399290084839], + [3.676654100418091, 6.821928977966309], + [-2.071815252304077, 0.7531328201293945], + [-1.462813377380371, 12.286394119262695], + [-3.512425422668457, 6.357672691345215], + [-4.406165599822998, -0.7782723903656006], + [0.4762462377548218, -5.773862838745117], + [-3.2359859943389893, -1.152036428451538], + [-1.9786285161972046, 1.33399498462677], + [0.7289852499961853, -7.863262176513672], + [-4.896188735961914, -1.0104601383209229], + [7.242029666900635, -2.2326509952545166], + [-5.18995475769043, 6.588041305541992], + [0.47811025381088257, -8.108017921447754], + [0.550826907157898, -7.502068042755127], + [0.7437743544578552, -4.743463516235352], + [1.7208497524261475, 0.7897891998291016], + [3.4447782039642334, -2.8776869773864746], + [-1.9765386581420898, -1.3701375722885132], + [-0.6784918308258057, 10.643009185791016], + [-3.9175145626068115, 5.959542274475098], + [-2.3744654655456543, -0.48548123240470886], + [-2.5520668029785156, 2.672215223312378], + [2.78497052192688, -4.595485210418701], + [1.328552484512329, 0.04692816361784935], + [0.1182170882821083, -3.876086950302124], + [-1.2379567623138428, 11.278895378112793], + [-1.0744479894638062, 1.2274086475372314], + [-0.24741438031196594, -1.288102388381958], + [0.8567001223564148, -8.926786422729492], + [-2.075753688812256, 2.437681198120117], + [-2.5927436351776123, -0.8175147771835327], + [-3.5439469814300537, 5.503378868103027], + [-3.4042184352874756, -1.4408138990402222], + [-3.6341826915740967, -2.070272445678711], + [-0.004769273102283478, -4.6952290534973145], + [-3.204240560531616, -1.091636061668396], + [2.2026071548461914, 5.756954193115234], + [3.3800220489501953, -4.467601776123047], + [-3.9531314373016357, -2.7381999492645264], + [-3.2025396823883057, 6.669248580932617], + [-3.451876401901245, -2.3026089668273926], + [-0.03752870112657547, -3.214937925338745], + [2.813667058944702, -4.412661075592041], + [-3.3080193996429443, -1.3908604383468628], + [-5.620378494262695, 5.281586170196533], + [-0.5771310329437256, -1.2886053323745728], + [2.6936585903167725, -4.230234622955322], + [-0.5267475247383118, 9.7540283203125], + [-4.907071590423584, -0.7069385051727295], + [-1.0354515314102173, 10.176072120666504], + [0.3963507413864136, 5.064699649810791], + [-4.383040904998779, -1.45510733127594], + [-4.59421968460083, -2.5868754386901855], + [-0.4234618544578552, 10.351612091064453], + [0.4089076519012451, -7.508254051208496], + [-3.67207407951355, -1.6223270893096924], + [-0.7009209990501404, 10.17706298828125], + [8.082950592041016, -2.7149384021759033], + [-3.4862353801727295, -1.4391703605651855], + [4.495662212371826, -3.0730502605438232], + [6.756819248199463, -1.8956769704818726], + [-5.260874271392822, 5.517577171325684], + [1.0338762998580933, 0.008443530648946762], + [-1.2971283197402954, 0.7647994756698608], + [6.410252094268799, -1.9734039306640625], + [6.526462554931641, -1.3717631101608276], + [-1.518561601638794, 12.949134826660156], + [0.2049623727798462, 5.961517333984375], + [-3.7447805404663086, -1.3103266954421997], + [1.3836803436279297, 3.92287540435791], + [0.7048579454421997, -7.872913360595703], + [-1.3519648313522339, 11.886665344238281], + [-1.2744613885879517, 0.14013344049453735], + [0.5511585474014282, -6.909407138824463], + [0.598290741443634, -7.337695598602295], + [-1.2660603523254395, 11.262789726257324], + [0.5485062599182129, -7.403958320617676], + [-3.559309959411621, -2.4316229820251465], + [0.3686530888080597, -4.732302665710449], + [2.7697861194610596, -4.674709320068359], + [0.3052511215209961, -6.0518670082092285], + [8.051891326904297, -2.873312473297119], + [0.5455694198608398, -7.496448040008545], + [-1.0016411542892456, 9.448511123657227], + [7.453794479370117, -2.5572009086608887], + [-4.876897811889648, -1.7480112314224243], + [-2.0645651817321777, 2.470179557800293], + [-5.127867221832275, 6.657684326171875], + [-0.38894158601760864, -1.600563645362854], + [-4.529722690582275, 5.54067325592041], + [-0.36771360039711, -2.0180704593658447], + [4.413107395172119, 7.484539031982422], + [0.3567444086074829, -5.668545722961426], + [0.7268467545509338, -7.239223003387451], + [-4.840630054473877, -1.521670937538147], + [2.2332708835601807, 2.8864686489105225], + [0.6624705195426941, -8.782930374145508], + [2.016784429550171, -4.230812072753906], + [-2.0327744483947754, 1.983868956565857], + [0.39933454990386963, -6.183688163757324], + [0.663576066493988, -6.365182876586914], + [-1.3421237468719482, 1.9620071649551392], + [6.628263473510742, -3.170600652694702], + [2.1160929203033447, -5.147278785705566], + [-3.19693922996521, -1.0245953798294067], + [-4.681212902069092, -1.1251953840255737], + [2.1421141624450684, 5.745694160461426], + [2.277482271194458, -4.308368682861328], + [-0.25042465329170227, -1.3049812316894531], + [-1.6480958461761475, 2.2919435501098633], + [0.38326793909072876, -6.890401363372803], + [-1.230901837348938, 11.285009384155273], + [0.8772111535072327, 0.10291166603565216], + [7.313259601593018, -3.011389970779419], + [-0.27623504400253296, -1.1333227157592773], + [-4.421192646026611, 6.862877368927002], + [4.756629467010498, 7.548213005065918], + [3.0050384998321533, 6.709307670593262], + [2.8807806968688965, -4.74687385559082], + [-3.6058144569396973, -2.405003786087036], + [-1.4931694269180298, 12.306715965270996], + [-4.167832374572754, 5.970924377441406], + [-4.691457271575928, -1.029269814491272], + [-2.140141010284424, -0.8981934189796448], + [-1.0319125652313232, -3.260220766067505], + [0.6734073758125305, -8.214988708496094], + [7.408172130584717, -4.394806385040283], + [1.8751918077468872, 2.3831827640533447], + [0.747668445110321, -6.761994361877441], + [-1.3690178394317627, 11.51923942565918], + [-4.994222164154053, 5.068410873413086], + [1.4921902418136597, 5.765132904052734], + [1.2647395133972168, -5.007345199584961], + [-4.862996578216553, -1.1979349851608276], + [-1.2784647941589355, 11.379829406738281], + [2.202587842941284, -4.779390335083008], + [-3.9413468837738037, -2.5726349353790283], + [0.3021904230117798, -4.932776927947998], + [10.051742553710938, -3.1066529750823975], + [8.349088668823242, -2.6583149433135986], + [0.3978763222694397, -7.59496545791626], + [-2.0396106243133545, 1.8413294553756714], + [3.263489007949829, 6.58425760269165], + [-4.153598785400391, -3.392274856567383], + [-2.4146478176116943, -1.9439696073532104], + [-0.13904860615730286, -2.507225751876831], + [-0.8206491470336914, 10.604818344116211], + [1.6076570749282837, 5.351532459259033], + [2.1564218997955322, 0.3373039960861206], + [-1.7177923917770386, 0.39022302627563477], + [-4.156763553619385, 5.591480255126953], + [-1.212803840637207, 5.4924187660217285], + [-2.197157621383667, 5.8723039627075195], + [-0.41028279066085815, 9.30197525024414], + [2.9496841430664062, 6.615551948547363], + [-2.41019606590271, -1.757994532585144], + [-0.761665403842926, 9.978204727172852], + [8.206236839294434, -3.074383497238159], + [-1.2338167428970337, -2.977099895477295], + [1.2749882936477661, -5.063882827758789], + [-1.9745863676071167, 2.1009998321533203], + [0.0716443583369255, 2.7535107135772705], + [-3.442314624786377, -0.7637051343917847], + [2.0644309520721436, 6.142437934875488], + [-1.2615910768508911, 11.446335792541504], + [-2.479069232940674, 5.816745758056641], + [-4.500670433044434, -1.378827691078186], + [0.6182309985160828, -0.6019712686538696], + [-0.16397923231124878, 8.08449649810791], + [-1.3835179805755615, -0.6115649938583374], + [1.9268944263458252, -4.747532844543457], + [2.1452620029449463, 4.569324493408203], + [-5.082961559295654, 6.858563423156738], + [2.2015533447265625, 5.809378623962402], + [2.958855152130127, -3.481247901916504], + [-5.118058204650879, 6.763046741485596], + [-3.8841135501861572, -2.175661087036133], + [-0.48412030935287476, -1.4959861040115356], + [2.146263837814331, -4.091072082519531], + [0.4245026707649231, -6.1193461418151855], + [5.623496055603027, -1.3030979633331299], + [-1.9745795726776123, 1.838754415512085], + [-3.3281571865081787, -1.489432692527771], + [-4.3001627922058105, -3.2161529064178467], + [1.7598724365234375, 0.10670480132102966], + [-3.374260663986206, 5.271366119384766], + [2.621697187423706, 4.898411750793457], + [-2.0149757862091064, 2.3408262729644775], + [-0.5505362749099731, -1.793592095375061], + [-0.2658073902130127, 8.783608436584473], + [-3.542733907699585, -0.6513985395431519], + [-5.204730033874512, -0.825319230556488], + [-4.43464994430542, -1.5818904638290405], + [3.1256463527679443, 6.8127899169921875], + [-0.9515206217765808, 10.457122802734375], + [-1.2986114025115967, 11.30059814453125], + [1.6489545106887817, 5.140171051025391], + [-1.341927170753479, 1.6331576108932495], + [-4.80719518661499, 5.183981895446777], + [1.9961917400360107, 1.039615273475647], + [2.82810378074646, 5.873369216918945], + [2.5076205730438232, -4.315002918243408], + [2.2346670627593994, 0.623859167098999], + [0.6303827166557312, -8.257157325744629], + [0.676023542881012, -8.409805297851562], + [-4.536586761474609, 4.182445049285889], + [3.3953280448913574, 5.663891315460205], + [-3.6172189712524414, -0.8317631483078003], + [2.8484933376312256, -4.486799240112305], + [-2.163454055786133, 5.929225444793701], + [1.2019916772842407, 4.622589111328125], + [-3.8468000888824463, -2.3795554637908936], + [0.9903455376625061, -4.889342308044434], + [-2.049595355987549, 2.6736419200897217], + [2.735964298248291, -4.818060398101807], + [-1.3377131223678589, 11.6122407913208], + [7.656754970550537, -3.1224677562713623], + [5.146712779998779, 8.321674346923828], + [0.5096614956855774, -7.160811901092529], + [-4.734020709991455, -4.42052698135376], + [-1.997429370880127, -1.588342547416687], + [2.746752977371216, 6.444788455963135], + [-2.6208767890930176, -0.1395789384841919], + [3.512234687805176, 6.877144813537598], + [-4.580424785614014, 6.700030326843262], + [10.114994049072266, -2.994373083114624], + [4.773069858551025, 7.83549690246582], + [-5.5668559074401855, 4.070402145385742], + [-1.7974169254302979, 1.339584231376648], + [-1.9599218368530273, -1.3776835203170776], + [-3.789393663406372, -0.9753386378288269], + [6.405328750610352, -5.321560859680176], + [-4.1599345207214355, 6.651154518127441], + [-2.583004951477051, -3.6230289936065674], + [-1.2219992876052856, 11.201406478881836], + [-4.548614978790283, 5.779519081115723], + [5.952940940856934, 8.679120063781738], + [4.933447360992432, 7.675280570983887], + [-1.7804181575775146, 2.2333288192749023], + [0.057443760335445404, 8.468766212463379], + [-3.394012212753296, -1.149526834487915], + [2.7139570713043213, -5.269279956817627], + [1.5406516790390015, 0.5013623833656311], + [0.8972479701042175, -7.07362174987793], + [-0.9586623907089233, 10.301141738891602], + [2.171869993209839, 5.857804298400879], + [9.125164985656738, -2.740234136581421], + [0.7553338408470154, -0.27934232354164124], + [1.595760464668274, 4.678586006164551], + [0.18722409009933472, -5.854006767272949], + [-1.2072176933288574, 11.380548477172852], + [1.9805023670196533, 5.4754838943481445], + [-2.079693555831909, 0.30074456334114075], + [0.6199882626533508, -7.76923942565918], + [1.0015307664871216, 5.044902801513672], + [-3.7137815952301025, 0.19145339727401733], + [-3.745990753173828, -0.5685601234436035], + [0.38751211762428284, -5.278289794921875], + [-0.42270389199256897, -1.536665439605713], + [-0.3064218759536743, 9.034564971923828], + [-4.563887596130371, 6.440521240234375], + [-3.6718757152557373, -1.7387442588806152], + [-4.4396538734436035, 5.923896789550781], + [0.5583819150924683, -7.704206466674805], + [-1.7526652812957764, 1.190654993057251], + [3.112414598464966, -3.3555617332458496], + [3.318047285079956, 6.672079086303711], + [-3.7236576080322266, -0.7956557869911194], + [-2.1028642654418945, 1.80372154712677], + [-4.7482452392578125, 6.718072891235352], + [0.5735636353492737, -8.266334533691406], + [8.869732856750488, -2.823549509048462], + [3.3062422275543213, 6.451003074645996], + [-1.9104270935058594, 2.318995714187622], + [-5.375365734100342, -0.7147457003593445], + [-3.3873212337493896, -1.2095431089401245], + [-0.5064152479171753, 2.5280046463012695], + [-3.8145334720611572, -1.3219335079193115], + [1.7962701320648193, 6.667352676391602], + [8.177037239074707, -2.3522722721099854], + [-1.8069825172424316, -0.8867596983909607], + [0.7858893275260925, 3.3973405361175537], + [5.490971565246582, 8.355810165405273], + [1.4914528131484985, 1.5909658670425415], + [-5.684562683105469, -0.8067533373832703], + [-3.508127212524414, -1.0642138719558716], + [-4.602232456207275, 4.366249084472656], + [7.224450588226318, -2.1282155513763428], + [-2.082057237625122, 2.303736448287964], + [-1.1497275829315186, 10.465431213378906], + [-4.609817028045654, -0.4050074815750122], + [-3.5726735591888428, 5.674605369567871], + [5.174136161804199, 7.891293525695801], + [1.5833706855773926, 0.7643439173698425], + [-4.977902412414551, 5.387554168701172], + [-3.9670941829681396, -0.20533162355422974], + [-5.954528331756592, -1.5258091688156128], + [0.6569192409515381, -6.907448768615723], + [1.5784002542495728, -4.953171730041504], + [-0.1621834635734558, 8.059769630432129], + [-2.1028618812561035, 0.5482794046401978], + [-1.7739161252975464, 2.1418960094451904], + [-4.188162326812744, -0.9401216506958008], + [0.46820127964019775, -4.831183910369873], + [-1.7532093524932861, -1.208767294883728], + [0.270618200302124, -5.127209663391113], + [0.287595272064209, -4.974951267242432], + [-4.259467601776123, -0.9985029697418213], + [-0.556746780872345, 9.85490608215332], + [0.7230117917060852, -8.276083946228027], + [8.560891151428223, -2.8010761737823486], + [-4.441208839416504, 6.142380714416504], + [-5.313631534576416, 7.160747528076172], + [-4.116213321685791, 5.554044723510742], + [0.5040149092674255, -0.6790784597396851], + [-0.83919757604599, -2.2190182209014893], + [-0.24702799320220947, -3.1364660263061523], + [0.6706307530403137, -7.5089430809021], + [0.4420349597930908, -4.798094272613525], + [-3.0958993434906006, -1.2701297998428345], + [4.303251266479492, 7.059930324554443], + [0.4275076389312744, -0.7284369468688965], + [-1.9772263765335083, -1.1477270126342773], + [-1.2812726497650146, 11.328401565551758], + [-1.7792571783065796, 1.7952079772949219], + [7.061323642730713, -2.4997596740722656], + [0.4753988981246948, -6.46845817565918], + [2.6451380252838135, -4.491689682006836], + [-0.13948309421539307, -0.9813889265060425], + [0.7286219000816345, -6.651203632354736], + [-0.8145220875740051, 10.096927642822266], + [2.146820068359375, -4.200143814086914], + [2.5589258670806885, -4.523797512054443], + [-1.8317474126815796, 2.017524003982544], + [0.8799225091934204, -0.4205476641654968], + [-3.780730962753296, -1.6214148998260498], + [-4.3372063636779785, 6.214346408843994], + [-4.808656692504883, -0.9862706661224365], + [0.22107315063476562, -0.822376012802124], + [-0.7115525007247925, 10.87739086151123], + [0.7400460839271545, -5.491189956665039], + [-1.4551308155059814, 0.9061925411224365], + [-3.9487016201019287, -3.6459951400756836], + [8.545634269714355, -2.6903231143951416], + [8.879769325256348, -2.8012497425079346], + [-0.9843239188194275, 0.7357572317123413], + [2.8988521099090576, -4.710893154144287], + [1.4411120414733887, 6.17903995513916], + [-1.4810512065887451, -1.0105959177017212], + [-4.292571544647217, -1.7187806367874146], + [0.5752791166305542, -8.131795883178711], + [1.7495596408843994, -4.624771595001221], + [-4.2594709396362305, 6.211743354797363], + [-3.679377794265747, 3.664902687072754], + [-5.8001580238342285, 6.433568954467773], + [-1.2101529836654663, 1.0965869426727295], + [-0.47773194313049316, 9.482341766357422], + [7.50341272354126, -2.275484085083008], + [-3.2934234142303467, -0.9830436706542969], + [-0.32064980268478394, 8.718570709228516], + [0.9562358260154724, -0.29961028695106506], + [-0.5793175101280212, 9.015167236328125], + [9.280912399291992, -2.853417158126831], + [0.8256416916847229, -8.807455062866211], + [3.373856782913208, 6.774998664855957], + [0.5125545859336853, -7.785113334655762], + [6.696605205535889, -2.061180830001831], + [2.794280529022217, -5.025463104248047], + [-1.1665422916412354, 10.988445281982422], + [-5.972763538360596, -1.1409066915512085], + [-1.2065167427062988, 11.75813102722168], + [8.12653923034668, -2.946565866470337], + [0.8664188385009766, 4.597139835357666], + [-0.5519785284996033, 6.512759685516357], + [-3.1885859966278076, -1.1779800653457642], + [-4.088395118713379, -3.2305967807769775], + [-2.53056001663208, 2.7055299282073975], + [-0.15274834632873535, -3.0935699939727783], + [-1.1302015781402588, 11.254866600036621], + [2.7192752361297607, -4.619577407836914], + [-1.4925944805145264, -0.25184690952301025], + [-5.540400505065918, 7.256636142730713], + [0.2375192642211914, -6.194181442260742], + [-1.5097848176956177, 12.344491004943848], + [-3.5415189266204834, -0.7958250045776367], + [0.13716745376586914, -5.416912078857422], + [2.240084171295166, 5.744915962219238], + [0.7809627056121826, -6.36557674407959], + [0.9446409344673157, -6.62141227722168], + [-3.779960870742798, -1.6538169384002686], + [-3.7263920307159424, -1.1504889726638794], + [-1.129882574081421, -0.9419714212417603], + [6.700370788574219, -2.420625686645508], + [9.321012496948242, -2.9322257041931152], + [1.777632236480713, 2.065385103225708], + [-1.2619800567626953, 1.497473955154419], + [-1.078181266784668, 1.4239938259124756], + [-4.067505359649658, -2.5309972763061523], + [-3.212409019470215, -2.66245174407959], + [-1.1789630651474, -0.450321763753891], + [-1.292609453201294, -0.9176587462425232], + [-1.379820704460144, 11.839242935180664], + [0.6412169933319092, -7.821364402770996], + [-0.17045718431472778, 8.911077499389648], + [2.0911221504211426, 1.0522375106811523], + [8.063629150390625, -3.0785744190216064], + [6.518779754638672, -1.5874799489974976], + [-0.04424817115068436, 8.224115371704102], + [6.023332118988037, -1.378182291984558], + [-1.3505020141601562, 11.63479995727539], + [-2.373507499694824, 5.701760292053223], + [0.7582561373710632, -8.511180877685547], + [1.43289315700531, 5.211634159088135], + [-2.733677387237549, 2.205456256866455], + [-4.412503719329834, -1.969214916229248], + [6.0031352043151855, -3.1058733463287354], + [-0.2704862952232361, -3.4531776905059814], + [2.6717071533203125, -4.274560451507568], + [2.8165035247802734, -4.934344291687012], + [0.666615903377533, -8.28926944732666], + [-4.999567031860352, 6.405707359313965], + [2.093308210372925, 5.083413600921631], + [2.919032335281372, 6.544009208679199], + [0.4908456802368164, -5.309867858886719], + [-4.120921611785889, -1.1947792768478394], + [-1.1931512355804443, 11.398202896118164], + [-1.903626799583435, 1.7580775022506714], + [9.472153663635254, -2.971606731414795], + [2.309107780456543, -4.40173864364624], + [-3.3858742713928223, -0.9915934801101685], + [-4.551511287689209, -3.3600265979766846], + [-1.0953781604766846, 10.545339584350586], + [-3.6038100719451904, -1.6060713529586792], + [-0.9716811776161194, 10.202213287353516], + [-1.4941973686218262, 1.601693034172058], + [0.5418310761451721, -7.962252616882324], + [0.18697994947433472, 7.344476222991943], + [-0.4588800072669983, 10.241350173950195], + [-0.44416290521621704, -2.6425864696502686], + [-1.7782973051071167, 1.4038705825805664], + [2.918078899383545, -4.791467666625977], + [3.5156538486480713, 6.696946144104004], + [-5.9887213706970215, -0.8571761846542358], + [1.6944338083267212, -5.4438886642456055], + [-3.8949239253997803, -2.730464458465576], + [4.252533912658691, 7.174190521240234], + [6.111435890197754, -1.2346546649932861], + [2.5579593181610107, 6.19553279876709], + [-4.064783096313477, 3.6327340602874756], + [4.932374477386475, 7.714845657348633], + [2.917048215866089, 5.688315391540527], + [-0.7722962498664856, 10.127652168273926], + [-1.841231107711792, 1.197589635848999], + [-3.760317325592041, -1.7694412469863892], + [2.856642961502075, 5.940160751342773], + [-1.2762870788574219, -0.3762447237968445], + [2.44746732711792, -4.484935760498047], + [1.186678409576416, 0.026677723973989487], + [-3.352228879928589, -1.2997866868972778], + [-2.0400521755218506, 1.7081867456436157], + [-2.699878215789795, -1.618271827697754], + [0.5433573126792908, -8.12466812133789], + [2.556069850921631, -4.348887920379639], + [1.0699901580810547, -6.170632362365723], + [-1.8227673768997192, 0.7199842929840088], + [-0.31871235370635986, 9.497112274169922], + [5.78009033203125, -1.2255922555923462], + [1.8199315071105957, -5.286733627319336], + [1.7707103490829468, 5.469358444213867], + [-1.4581135511398315, 12.621674537658691], + [-4.6481709480285645, 7.174862861633301], + [-3.1421926021575928, -2.895688772201538], + [1.9875726699829102, 2.2740559577941895], + [2.969919443130493, -4.958688735961914], + [-0.26104867458343506, 0.10812899470329285], + [1.8240551948547363, -5.235114574432373], + [-2.011779546737671, 1.8315086364746094], + [3.155081033706665, 6.4686279296875], + [-2.9939005374908447, -0.5554983615875244], + [-1.3916743993759155, 11.587895393371582], + [-4.3662519454956055, 4.840649604797363], + [-4.354918003082275, -3.2000644207000732], + [-3.2957122325897217, -1.2091552019119263], + [1.3194153308868408, 5.321545600891113], + [-0.5499631762504578, 9.752691268920898], + [1.2121270895004272, -5.332237243652344], + [-1.4257975816726685, 12.021675109863281], + [-4.9390549659729, -0.478981614112854], + [1.843039870262146, -4.7734198570251465], + [2.4620702266693115, -4.357584476470947], + [-5.8674092292785645, -0.910342276096344], + [2.0119266510009766, -3.8279929161071777], + [-2.1420321464538574, 1.3728185892105103], + [-2.006880760192871, 2.363964319229126], + [-3.529951333999634, -1.46161949634552], + [1.9874324798583984, 6.104494094848633], + [2.9027090072631836, -4.2974443435668945], + [-4.131762981414795, -2.136608600616455], + [-0.9164732098579407, 10.027704238891602], + [-0.22867238521575928, -1.8966290950775146], + [-1.9137485027313232, 2.2332561016082764], + [0.5222722887992859, -4.959319591522217], + [-0.16049349308013916, -1.3412084579467773], + [2.7975447177886963, -4.749795436859131], + [3.2872321605682373, 7.0727643966674805], + [-0.5377893447875977, -3.0667905807495117], + [2.9697067737579346, -4.909079074859619], + [-4.5973219871521, -2.124070882797241], + [-0.9051835536956787, 1.4638378620147705], + [-3.3198506832122803, 5.296903610229492], + [2.7282965183258057, 5.832249641418457], + [5.50206995010376, -1.2311246395111084], + [-4.38587760925293, -0.09775358438491821], + [-0.40387314558029175, 8.561155319213867], + [-1.2028950452804565, 11.09766960144043], + [-4.002679824829102, -2.6657330989837646], + [-0.1591324806213379, -1.5351616144180298], + [1.2396583557128906, 1.4587668180465698], + [-1.7223429679870605, 1.554489016532898], + [-0.6308606863021851, 10.001689910888672], + [-1.2458457946777344, 10.87824821472168], + [-1.1856801509857178, 1.7850233316421509], + [-3.051522970199585, 3.250244379043579], + [3.444424629211426, -3.746155023574829], + [4.470913410186768, 7.327857494354248], + [2.268529176712036, -4.662625312805176], + [0.00428270548582077, 0.7452185153961182], + [-1.9390132427215576, 2.5423896312713623], + [-0.2322397232055664, 9.035369873046875], + [2.69008469581604, 5.697644233703613], + [2.7754366397857666, -4.399956703186035], + [-0.5116687417030334, 10.305298805236816], + [2.400132417678833, 5.515338897705078], + [0.5088732838630676, -7.471091270446777], + [6.6079607009887695, -1.5795140266418457], + [6.282516002655029, -3.1848506927490234], + [1.5421552658081055, 0.3014146387577057], + [1.6408742666244507, 5.622603416442871], + [-5.725257873535156, 7.367376804351807], + [-3.040698289871216, 5.152168273925781], + [-5.149074077606201, 6.279943943023682], + [0.7564809322357178, -6.624298572540283], + [-1.7795764207839966, 0.27031174302101135], + [1.3168375492095947, 0.5613836646080017], + [-6.135499477386475, 7.983417510986328], + [8.258177757263184, -2.4898722171783447], + [1.8424370288848877, -4.633389472961426], + [-3.6432907581329346, -0.8963461518287659], + [2.7994415760040283, -4.328974723815918], + [-4.702661037445068, -0.3321620225906372], + [-3.0306613445281982, -1.196770191192627], + [-1.1433260440826416, 10.457806587219238], + [0.6660521626472473, 1.3375276327133179], + [-2.2981152534484863, -1.9042330980300903], + [0.8645473122596741, 5.089360237121582], + [-4.1004180908203125, -0.36979949474334717], + [1.7581887245178223, 1.2285979986190796], + [-1.3755393028259277, -1.8920774459838867], + [0.6027265787124634, -8.003567695617676], + [1.598492980003357, 4.956205368041992], + [1.7413933277130127, -5.453440189361572], + [5.584378719329834, -1.0778477191925049], + [2.8318045139312744, -4.370972633361816], + [0.9315078854560852, 0.3101927936077118], + [-1.773616075515747, 1.1804399490356445], + [-1.8073136806488037, 2.3556435108184814], + [-3.8279073238372803, -3.557861566543579], + [0.6855862736701965, -7.083653926849365], + [-3.7304418087005615, -1.5374233722686768], + [-1.0864579677581787, 10.91431999206543], + [4.264644622802734, -3.0677707195281982], + [-1.5029680728912354, 12.317106246948242], + [-3.2982819080352783, -1.1553694009780884], + [-2.6853787899017334, -2.526024103164673], + [-5.234870433807373, -5.029041767120361], + [-2.975234270095825, 4.8675384521484375], + [-2.6949946880340576, -1.3216263055801392], + [-4.3461198806762695, 6.5552167892456055], + [-3.9565913677215576, -2.8254566192626953], + [-5.109217643737793, 6.547911643981934], + [-3.4260857105255127, -1.0369932651519775], + [1.8705270290374756, -3.2151482105255127], + [2.7370035648345947, -5.582819938659668], + [-4.342078685760498, -1.098585844039917], + [0.0028176233172416687, -0.9279803037643433], + [-0.9210407137870789, 10.238262176513672], + [2.8812811374664307, 0.7158465385437012], + [7.07072114944458, -2.897165060043335], + [2.188270330429077, 3.7635319232940674], + [-0.9775902628898621, 10.07202434539795], + [7.423370838165283, -2.7267024517059326], + [-5.263744831085205, 6.51028299331665], + [-1.1978247165679932, 1.0271881818771362], + [2.384822130203247, 5.148032188415527], + [0.44316232204437256, -5.120404243469238], + [-0.22395485639572144, 8.862932205200195], + [-0.8670594096183777, 10.66651439666748], + [-3.616537094116211, 3.8980209827423096], + [2.942809820175171, -4.870993614196777], + [-1.1838456392288208, 10.888338088989258], + [7.314300537109375, -2.007770299911499], + [2.072356700897217, 0.8291966915130615], + [-3.9404735565185547, -0.2624357342720032], + [8.959805488586426, -2.9136531352996826], + [0.5073267817497253, -7.7395853996276855], + [-3.788970708847046, -0.398586630821228], + [8.833739280700684, -2.6831443309783936], + [0.6350999474525452, -4.745426654815674], + [1.0544342994689941, -6.586797714233398], + [2.2189137935638428, -5.442468643188477], + [-4.557637691497803, 2.501107692718506], + [-2.5708258152008057, 6.1508402824401855], + [-0.7156398296356201, 6.849020957946777], + [-3.282565116882324, -1.1659733057022095], + [-3.900001287460327, -2.1319546699523926], + [-0.5556853413581848, 7.857280731201172], + [1.7518864870071411, -5.192091941833496], + [0.945219099521637, 0.06685325503349304], + [3.1818182468414307, 5.791624069213867], + [0.6910444498062134, -6.928343772888184], + [0.927727997303009, -7.371460437774658], + [0.07969626039266586, -4.210884094238281], + [-0.3410971760749817, 9.62821102142334], + [0.4619535207748413, -6.140329837799072], + [-3.4559261798858643, 7.1806182861328125], + [3.8566198348999023, 7.420619964599609], + [0.9625044465065002, 4.74147367477417], + [-3.701920747756958, 5.12586784362793], + [-1.1514822244644165, 11.402650833129883], + [0.5626769661903381, -7.34166145324707], + [-5.021152973175049, -0.7419123649597168], + [-0.6631348729133606, 10.777399063110352], + [1.4584071636199951, 6.046630382537842], + [-0.8318756818771362, 9.473073959350586], + [7.4146647453308105, -2.4206655025482178], + [4.570029258728027, 7.735217094421387], + [-3.0526134967803955, -0.9768770933151245], + [-1.1216580867767334, 10.575054168701172], + [2.507075071334839, 5.547205924987793], + [6.60006856918335, -1.7859331369400024], + [-2.0970053672790527, 5.775527000427246], + [1.0951812267303467, 4.88480281829834], + [2.9374732971191406, -4.656283855438232], + [-3.8526108264923096, 6.505733489990234], + [2.0684070587158203, 0.4389553368091583], + [-3.5744307041168213, -1.6615608930587769], + [1.3274519443511963, 3.783315896987915], + [0.49924856424331665, -7.397482872009277], + [2.99324631690979, -4.80976676940918], + [2.444143295288086, 6.060920715332031], + [-3.587770462036133, 5.0324554443359375], + [7.346125602722168, -3.5868828296661377], + [0.31768715381622314, -6.283211708068848], + [-0.6642757058143616, 0.5803619623184204], + [0.6359285712242126, -7.675791263580322], + [-1.4267476797103882, 11.783432960510254], + [-0.3863708972930908, -2.6179487705230713], + [-4.873045444488525, -3.6424787044525146], + [-4.092034816741943, -2.8920445442199707], + [-0.9502870440483093, 10.602826118469238], + [1.8487268686294556, 4.567627906799316], + [-3.7335283756256104, -2.2755444049835205], + [-0.5841575264930725, 9.362548828125], + [-3.215632438659668, -1.0906308889389038], + [1.59309983253479, -5.354032516479492], + [-2.942509889602661, -2.9464399814605713], + [-1.7396693229675293, 1.5131348371505737], + [-1.3723548650741577, 11.811056137084961], + [0.7641389966011047, 5.964901924133301], + [-0.43663161993026733, 9.563220977783203], + [1.8508579730987549, 0.728305459022522], + [-1.123266577720642, 10.58084774017334], + [0.544266402721405, -7.4066009521484375], + [0.5886867642402649, -8.140244483947754], + [2.9939842224121094, -4.797881603240967], + [2.0593926906585693, -4.208412170410156], + [2.2058002948760986, 0.34878259897232056], + [2.5640323162078857, -4.202529430389404], + [-0.4899870753288269, -2.4458930492401123], + [-2.174790143966675, 0.5759154558181763], + [-4.038950443267822, -1.0944194793701172], + [-3.9904801845550537, -1.4743682146072388], + [-4.281157970428467, -3.083479166030884], + [-3.957078218460083, 6.033933639526367], + [5.7569193840026855, -1.4542733430862427], + [-4.622983455657959, 7.1041340827941895], + [-1.5806411504745483, 0.2618362307548523], + [0.6675744652748108, 5.796666145324707], + [-0.19263827800750732, 9.290794372558594], + [4.096123695373535, -3.6474101543426514], + [-4.00166654586792, 5.870253086090088], + [6.388693809509277, -1.2814184427261353], + [-1.968571424484253, 2.410785675048828], + [-4.924446105957031, 5.409491539001465], + [-4.117612361907959, -0.9893011450767517], + [3.1036956310272217, -3.98877215385437], + [1.8793370723724365, 1.0412863492965698], + [8.262986183166504, -2.5645105838775635], + [-3.4687955379486084, 3.287055730819702], + [-1.044456958770752, 1.4563668966293335], + [-3.104764223098755, -3.2062084674835205], + [-1.924724817276001, -0.35155051946640015], + [0.6461575031280518, -8.570837020874023], + [3.9048690795898438, 7.155539035797119], + [-2.6456298828125, -1.0215317010879517], + [-1.2941136360168457, 11.361980438232422], + [-3.0200345516204834, -0.628919780254364], + [4.905381679534912, -4.11838436126709], + [1.9441983699798584, 0.7464967966079712], + [1.4927620887756348, 1.6289499998092651], + [5.973584175109863, -2.087949275970459], + [-1.9778099060058594, 2.557858943939209], + [2.331929922103882, -4.600030899047852], + [2.6540424823760986, -4.980313777923584], + [0.43244296312332153, -7.410398960113525], + [0.5533510446548462, -6.810959815979004], + [-3.5552079677581787, 3.8453824520111084], + [-3.26228404045105, -0.8751071691513062], + [-0.8234531283378601, 9.60953426361084], + [-1.2511588335037231, 11.016672134399414], + [1.989070177078247, 5.101125240325928], + [-3.843843698501587, -2.487067222595215], + [3.548007011413574, -4.604463577270508], + [-1.5058104991912842, 2.1236512660980225], + [-5.523125171661377, 6.786977767944336], + [1.9542582035064697, 5.459273338317871], + [0.7877062559127808, -0.3885384798049927], + [-2.809197425842285, 2.780043601989746], + [-1.8965154886245728, 2.0162198543548584], + [2.5777881145477295, -4.332785606384277], + [-1.8607707023620605, 1.7293989658355713], + [-2.211669683456421, -1.9752155542373657], + [-0.3961668014526367, -3.06548810005188], + [-0.8154154419898987, 1.5331231355667114], + [5.228499889373779, 8.214672088623047], + [-5.095629692077637, 5.744001865386963], + [4.9251837730407715, 7.775668621063232], + [0.16394221782684326, -3.2099874019622803], + [0.31216108798980713, -6.3712477684021], + [2.6805965900421143, -4.677534580230713], + [8.61500072479248, -2.714198350906372], + [3.5204670429229736, 6.635618209838867], + [8.811379432678223, -2.85710072517395], + [0.6926444172859192, -2.767784833908081], + [2.7122385501861572, 5.665340423583984], + [0.6379507780075073, -3.37749981880188], + [2.131824254989624, -4.906363487243652], + [-0.05625546723604202, -0.8344836235046387], + [-0.8017531037330627, 10.06302261352539], + [-4.082707405090332, -1.0590568780899048], + [-3.885098457336426, -0.20876407623291016], + [2.9050023555755615, -4.666818618774414], + [-3.9770946502685547, 2.7765021324157715], + [0.4742676615715027, -6.537193298339844], + [-5.836939334869385, 7.985406875610352], + [-1.4495699405670166, 0.8867834210395813], + [2.5515215396881104, 4.150952339172363], + [-4.70582914352417, -4.1954450607299805], + [-3.5175621509552, -1.880385398864746], + [0.4407575726509094, -5.302130699157715], + [0.2717950940132141, -6.653457164764404], + [1.4080630540847778, -4.769793510437012], + [1.5498366355895996, 4.037636756896973], + [-3.7325875759124756, -0.7493375539779663], + [2.306291341781616, 5.884235382080078], + [-3.3073501586914062, -0.7242954969406128], + [2.726335287094116, -5.036171913146973], + [2.3640315532684326, -4.817163944244385], + [-3.282658815383911, -1.1233136653900146], + [8.044178009033203, -3.4110429286956787], + [-2.37870717048645, -0.4160137176513672], + [9.39898681640625, -2.878216505050659], + [-3.6288836002349854, -1.562958836555481], + [1.3389217853546143, 4.433867454528809], + [0.8142778873443604, 0.2348753809928894], + [0.40670621395111084, -5.371824264526367], + [-1.8056824207305908, 1.30367112159729], + [-1.1097474098205566, 10.564506530761719], + [-4.95431661605835, 6.289243698120117], + [-2.265369176864624, 2.9913792610168457], + [7.1727294921875, -2.139230966567993], + [2.295400857925415, -6.719395637512207], + [-2.3045477867126465, 5.350569725036621], + [0.3213469386100769, 7.911152362823486], + [1.9674785137176514, 5.99533748626709], + [-1.8301650285720825, 1.0641982555389404], + [-6.014690399169922, -1.060255527496338], + [-0.7164281010627747, 10.408946990966797], + [-1.2362664937973022, 1.664161205291748], + [1.616360068321228, 1.8018909692764282], + [-1.3280465602874756, -2.1148483753204346], + [2.3616650104522705, 5.491289138793945], + [-4.596192836761475, -0.38766202330589294], + [0.7497800588607788, -6.268238067626953], + [-3.6359426975250244, -1.9292875528335571], + [0.7116479277610779, -7.994353294372559], + [2.599958896636963, -4.102862358093262], + [-3.439394235610962, 5.083675384521484], + [-0.012160874903202057, -0.9462490081787109], + [-0.7310770153999329, -0.9659609794616699], + [-3.402838945388794, -1.5719035863876343], + [-3.1075451374053955, 3.209774971008301], + [-1.065067172050476, 10.807151794433594], + [-1.506876826286316, -0.5186009407043457], + [2.6761293411254883, -4.238635063171387], + [-3.635640859603882, -2.407618999481201], + [-0.3753994405269623, -1.5015383958816528], + [-4.15154504776001, -1.4425023794174194], + [2.550218343734741, -4.246188163757324], + [2.896801710128784, -4.777096748352051], + [1.5424050092697144, -4.974447727203369], + [0.8692330718040466, -5.581496715545654], + [2.8555822372436523, -4.86865234375], + [-3.940803289413452, -3.249030351638794], + [8.51731014251709, -2.79964280128479], + [-5.423071384429932, -4.938503265380859], + [0.6534163355827332, -5.161424160003662], + [-3.238278388977051, -1.131484866142273], + [2.813035726547241, -5.064287185668945], + [-5.599026679992676, 6.172074317932129], + [-2.1218678951263428, -0.5172175168991089], + [-3.935044527053833, -1.1515249013900757], + [-3.4676220417022705, -1.0365278720855713], + [-4.848309516906738, -1.392987608909607], + [-1.615077257156372, 12.938349723815918], + [-3.634340286254883, -0.5427154302597046], + [4.005897045135498, -3.707214593887329], + [1.4827055931091309, -6.080130577087402], + [-5.518090724945068, -2.1739628314971924], + [2.212707281112671, -4.0506439208984375], + [-0.624243974685669, 9.862076759338379], + [2.6730432510375977, -4.686426639556885], + [-5.823128700256348, -1.1864618062973022], + [2.488992691040039, 6.209766387939453], + [9.092352867126465, -2.7868049144744873], + [-3.3771307468414307, 5.416667938232422], + [1.4730448722839355, 1.107984185218811], + [1.5165140628814697, 3.9363510608673096], + [-3.4889681339263916, -1.2052885293960571], + [-4.3759074211120605, -2.5436220169067383], + [-3.21366810798645, -0.8772711753845215], + [0.2814364433288574, -0.007180474698543549], + [-3.337346315383911, -0.7051887512207031], + [2.6011407375335693, 4.516951560974121], + [0.7062394618988037, -8.717155456542969], + [-1.1574878692626953, 10.697551727294922], + [-0.3833591043949127, -1.0672760009765625], + [5.632286548614502, -1.2198295593261719], + [-0.8147909045219421, 10.987693786621094], + [3.114551544189453, -3.9948360919952393], + [-3.20683217048645, -2.6960391998291016], + [1.6884279251098633, 1.1667178869247437], + [1.2298223972320557, -4.928277015686035], + [-3.4160139560699463, -1.3703383207321167], + [-3.286612033843994, 5.098215103149414], + [-3.1665477752685547, 6.023298740386963], + [3.058392286300659, -3.9368958473205566], + [-4.374476432800293, -3.4475700855255127], + [-2.1259799003601074, -3.166902780532837], + [-3.415982723236084, -0.673852264881134], + [-3.488567590713501, -2.429136037826538], + [-3.2538468837738037, -1.22928786277771], + [-4.160398006439209, -2.135098695755005], + [-4.334909439086914, 6.890758514404297], + [-4.1347527503967285, -2.8172192573547363], + [0.9260758757591248, 0.12243786454200745], + [0.7546044588088989, -0.416201651096344], + [8.927168846130371, -2.6620376110076904], + [2.577967882156372, -6.802591323852539], + [3.0150306224823, -4.876870632171631], + [2.273577928543091, -6.43634033203125], + [0.387603223323822, -5.698714256286621], + [1.5147978067398071, 3.8757286071777344], + [-1.2066019773483276, 10.839151382446289], + [0.4160481095314026, -7.185918807983398], + [-3.7747020721435547, -0.13460314273834229], + [-1.1773878335952759, 10.937812805175781], + [-0.4374699592590332, 9.175637245178223], + [0.24608182907104492, -4.823925018310547], + [0.6862786412239075, -7.804710388183594], + [-3.7956387996673584, -1.0837607383728027], + [-3.7018015384674072, -2.1314234733581543], + [-2.228989839553833, 2.346360445022583], + [0.7330774664878845, -9.229011535644531], + [1.179063081741333, -0.02745715156197548], + [-2.6924076080322266, -1.1909856796264648], + [-3.726235866546631, -1.259813904762268], + [0.8940398097038269, -7.163266181945801], + [-5.701992511749268, 7.207457542419434], + [-0.9513055086135864, -2.2619004249572754], + [0.14063939452171326, -5.555794715881348], + [-2.037025213241577, 1.452379584312439], + [-3.4670188426971436, -2.0761895179748535], + [-1.618987798690796, 1.1931023597717285], + [2.093172073364258, 0.7089102268218994], + [-3.228764533996582, -1.725137710571289], + [0.5901158452033997, -7.671447277069092], + [-1.6270978450775146, 1.4386403560638428], + [-0.9782044291496277, 10.052742004394531], + [6.303799629211426, -3.230546712875366], + [-3.7221226692199707, -1.3483043909072876], + [-1.4284279346466064, 1.6637771129608154], + [2.165724754333496, 4.636711597442627], + [0.5774348378181458, -7.725056171417236], + [-1.927403450012207, 2.0170276165008545], + [-1.0616575479507446, -0.9417296648025513], + [-4.11199951171875, 2.5270743370056152], + [-5.07938814163208, 0.7649199962615967], + [0.03538339585065842, -4.15919303894043], + [1.8138598203659058, 1.1874386072158813], + [9.068167686462402, -2.7767131328582764], + [-0.03985802084207535, -3.980846643447876], + [0.6564266085624695, -7.522424697875977], + [-5.015932083129883, -0.915068507194519], + [-0.47851628065109253, 9.596028327941895], + [5.809198379516602, 8.633323669433594], + [1.4428833723068237, -4.795742988586426], + [0.07837396115064621, -5.534171104431152], + [-5.222313404083252, 7.216517448425293], + [-2.3381779193878174, 2.5263941287994385], + [-0.9921845197677612, -0.6529109477996826], + [-1.3508867025375366, 11.277307510375977], + [2.5107409954071045, -4.830209732055664], + [-0.9509781002998352, -0.9069849848747253], + [-3.2359137535095215, -1.0760267972946167], + [1.0877318382263184, -6.438898086547852], + [0.44198793172836304, 5.937206268310547], + [-2.656161069869995, -1.3964730501174927], + [-3.083411455154419, -1.6124132871627808], + [-3.65002179145813, -2.2153117656707764], + [-4.96003532409668, -1.7396901845932007], + [1.8647592067718506, -4.628311634063721], + [5.285715579986572, 8.166243553161621], + [0.41972750425338745, -2.2452704906463623], + [-3.434429407119751, -0.6041061878204346], + [-4.186887741088867, -1.244552493095398], + [-3.246800184249878, -2.301884651184082], + [2.2160089015960693, -5.272480487823486], + [-0.48312753438949585, 9.709355354309082], + [4.604740619659424, 7.606025695800781], + [6.523208141326904, -3.9858949184417725], + [-3.6247785091400146, -2.249861001968384], + [3.4816055297851562, 6.707878589630127], + [0.5612287521362305, -7.29799747467041], + [6.319234371185303, -3.4787790775299072], + [7.367727756500244, -2.6327250003814697], + [-3.7702083587646484, -3.231980562210083], + [6.516583442687988, 9.710275650024414], + [2.843703031539917, -4.607997894287109], + [5.737283229827881, -5.510371208190918], + [1.7961657047271729, 5.539322376251221], + [0.6759104132652283, -8.661497116088867], + [1.995619535446167, 6.128215789794922], + [-1.5668540000915527, -3.0854079723358154], + [-2.428353786468506, 6.865660190582275], + [-1.1402572393417358, 10.279670715332031], + [0.6340906023979187, -8.525623321533203], + [-3.671398401260376, -1.251992106437683], + [-1.57369863986969, 1.3585387468338013], + [-4.6453680992126465, -1.9122637510299683], + [-3.6911966800689697, -1.3024111986160278], + [-1.4536250829696655, 12.085554122924805], + [8.749919891357422, -2.9030964374542236], + [0.8105859160423279, -6.513178825378418], + [-4.8322014808654785, 2.4155540466308594], + [3.467623472213745, 6.504996299743652], + [-1.6426105499267578, -0.5017997622489929], + [2.649397611618042, 5.645735740661621], + [-4.636916637420654, -0.658563494682312], + [-3.7078092098236084, 5.854129791259766], + [-3.4529569149017334, -2.1185195446014404], + [-1.1901626586914062, 10.713923454284668], + [0.02105795592069626, 5.81099796295166], + [-2.1378400325775146, 1.7382298707962036], + [-3.7088263034820557, 4.946238040924072], + [1.9023542404174805, 0.29428011178970337], + [7.5629401206970215, -2.2954773902893066], + [2.025688648223877, 3.1191346645355225], + [4.330044746398926, 7.024469375610352], + [-0.4737117886543274, -1.684734582901001], + [-4.497777462005615, -2.8081185817718506], + [2.7660346031188965, -4.390978813171387], + [1.8644516468048096, -5.232744216918945], + [-3.7977607250213623, 5.788876533508301], + [-0.939166247844696, 10.041524887084961], + [-2.69600510597229, 2.269803762435913], + [-1.1353967189788818, 10.685754776000977], + [2.4756877422332764, -4.763615608215332], + [-0.5235695838928223, 8.824309349060059], + [-0.9421097636222839, 10.47590446472168], + [0.23719778656959534, -5.071267127990723], + [-1.2186739444732666, 1.375119686126709], + [8.17119026184082, -2.512324810028076], + [-4.841411590576172, -4.508678436279297], + [2.7016513347625732, -5.0577850341796875], + [-5.186481952667236, 5.798244476318359], + [-5.153840065002441, 7.035872459411621], + [-0.5912317633628845, 9.937389373779297], + [2.1865272521972656, 0.588271975517273], + [0.5244078040122986, -7.098584175109863], + [-0.6053003668785095, 9.899896621704102], + [-4.805139064788818, 7.034059524536133], + [8.525513648986816, -2.781787872314453], + [-0.7377855777740479, -0.5208078622817993], + [-2.8390259742736816, -0.7998795509338379], + [-3.3714759349823, -1.9965378046035767], + [2.92104434967041, -4.486739158630371], + [-4.453553199768066, -0.47833502292633057], + [2.5605690479278564, 0.5966546535491943], + [-3.087087392807007, -0.7820307612419128], + [1.6671725511550903, -4.871443271636963], + [0.6185833811759949, -8.839180946350098], + [-1.033032774925232, 11.097311973571777], + [-3.000412702560425, -1.2171889543533325], + [-1.9360055923461914, 1.1466259956359863], + [2.408829927444458, 5.443813800811768], + [2.996640920639038, 5.802798271179199], + [-4.891878128051758, 5.477893829345703], + [-3.9578301906585693, -1.8608373403549194], + [-4.8647661209106445, -3.5814273357391357], + [0.3858039379119873, -6.064131259918213], + [1.6379637718200684, 4.327845573425293], + [-3.685482978820801, 5.288710594177246], + [-1.34419846534729, 1.3375095129013062], + [-1.1577258110046387, 11.206672668457031], + [-2.0711898803710938, 2.2792809009552], + [-1.137293815612793, 10.933710098266602], + [0.7289918065071106, -8.019490242004395], + [0.7351822257041931, -8.061716079711914], + [0.723733127117157, -7.457162857055664], + [1.6301803588867188, 0.828874945640564], + [-3.1358392238616943, 3.5087428092956543], + [-0.48745885491371155, -2.8444466590881348], + [-1.9426331520080566, 2.2254908084869385], + [4.790829181671143, -4.442181587219238], + [4.3582963943481445, 7.326724052429199], + [-0.36443644762039185, -1.3416732549667358], + [6.72329568862915, -1.7153962850570679], + [-0.6140240430831909, 10.668144226074219], + [2.715320348739624, 5.891513824462891], + [-1.3361718654632568, -1.24801504611969], + [5.474828720092773, 8.412637710571289], + [-1.4420958757400513, 12.008722305297852], + [-4.2921648025512695, -1.2569615840911865], + [0.609483540058136, -8.00362777709961], + [-3.30839467048645, -1.91232168674469], + [-3.674661159515381, -1.2344021797180176], + [0.5803358554840088, -5.743257522583008], + [1.5204757452011108, 6.766396522521973], + [-1.4439480304718018, 12.846176147460938], + [-0.29988932609558105, 9.126550674438477], + [-2.8579916954040527, -1.684688687324524], + [5.919618129730225, -3.781991481781006], + [-2.9155378341674805, -1.499752163887024], + [-3.5226047039031982, -1.8384045362472534], + [-4.435221195220947, -0.3588138818740845], + [-3.634997606277466, 5.041533470153809], + [-1.326744794845581, 11.662124633789062], + [-1.234082818031311, 11.246728897094727], + [-4.618932723999023, 7.273127555847168], + [1.8079688549041748, -7.476318359375], + [2.7309226989746094, -4.464913845062256], + [-5.457841873168945, 6.735268592834473], + [-0.1984807252883911, -1.610456943511963], + [-4.8474345207214355, 2.7845771312713623], + [-4.954389572143555, 7.016307353973389], + [2.098926067352295, -4.220265865325928], + [-2.8913190364837646, -1.2702133655548096], + [-5.587464809417725, 7.891995429992676], + [-3.8287203311920166, -1.010728359222412], + [-1.086390733718872, 11.036438941955566], + [-0.0060756877064704895, 8.177057266235352], + [-1.7568122148513794, 1.583872675895691], + [8.33735466003418, -2.646929979324341], + [-0.5182411074638367, 10.237407684326172], + [-1.2579439878463745, 10.841442108154297], + [2.9227168560028076, -4.87161922454834], + [0.6228285431861877, -6.152447700500488], + [-0.820418655872345, 10.414068222045898], + [0.5962769985198975, -5.244049549102783], + [-0.8421000242233276, -0.9185253381729126], + [-1.249428629875183, 10.569662094116211], + [-4.526350021362305, 6.128290176391602], + [0.5574415326118469, -4.492470741271973], + [2.754547357559204, -4.642523288726807], + [-1.4051893949508667, 1.2340378761291504], + [-4.79074239730835, 5.510671615600586], + [2.7296507358551025, -4.638444900512695], + [2.763869047164917, 5.565970420837402], + [-3.1895501613616943, -0.7857288122177124], + [-3.0121185779571533, 0.5518710017204285], + [9.979851722717285, -3.050452470779419], + [1.7519967555999756, 5.638265609741211], + [2.396134376525879, 6.053495407104492], + [-4.385886192321777, 4.698278427124023], + [-4.600562572479248, -0.9081686735153198], + [1.0420047044754028, -6.324769973754883], + [-2.0797808170318604, 5.799914360046387], + [-2.1303317546844482, 1.3286219835281372], + [7.465318202972412, -2.546034097671509], + [-1.8763275146484375, 1.6842790842056274], + [-1.1364407539367676, 10.947020530700684], + [-1.8054734468460083, -1.0042567253112793], + [-0.9030607342720032, -1.353134274482727], + [-4.348620891571045, 6.672581672668457], + [-2.042116403579712, 2.5347988605499268], + [-1.142479658126831, -2.0980470180511475], + [-5.0095109939575195, 6.767051696777344], + [-0.205926775932312, 7.505669116973877], + [0.6750323176383972, -8.590085983276367], + [1.2359435558319092, 0.9652687311172485], + [-3.3695807456970215, -1.0790151357650757], + [-4.673161506652832, -1.552767276763916], + [2.1794233322143555, -5.305065155029297], + [8.98328685760498, -2.8037502765655518], + [1.237167239189148, -5.388322830200195], + [-0.08271313458681107, 7.350078582763672], + [-3.2279393672943115, -3.2869622707366943], + [5.693099498748779, -1.3896316289901733], + [8.943541526794434, -2.797964334487915], + [-2.3795080184936523, 2.390380620956421], + [3.6934375762939453, 1.196806788444519], + [1.774204969406128, 5.301116943359375], + [0.7388563752174377, -8.683219909667969], + [-4.5534257888793945, 6.195252418518066], + [-3.089245080947876, -2.0038256645202637], + [-4.15826940536499, -1.4156520366668701], + [-3.6859161853790283, -1.4101945161819458], + [-0.54085773229599, 9.429891586303711], + [-4.2622504234313965, -3.632105588912964], + [-1.2036662101745605, 11.353227615356445], + [2.8441178798675537, -5.074728488922119], + [-4.2714338302612305, -1.259093165397644], + [2.8477108478546143, -4.868367671966553], + [2.74582576751709, -5.04428243637085], + [-4.229166030883789, -2.9477450847625732], + [-3.926140069961548, 5.997743606567383], + [-0.426768034696579, 7.903590202331543], + [-0.4822400212287903, 9.64470100402832], + [-4.5392165184021, -0.8038811087608337], + [1.6905179023742676, -5.795307159423828], + [7.951951503753662, -3.654186964035034], + [-1.2353192567825317, 11.354519844055176], + [2.406116247177124, -4.49617862701416], + [0.6275584697723389, -7.127163887023926], + [0.6487846374511719, -5.556058883666992], + [-2.454536199569702, -1.5131558179855347], + [3.105707883834839, -4.9532999992370605], + [-1.0637602806091309, 9.857358932495117], + [-0.18766984343528748, -1.462243676185608], + [-1.879284143447876, 2.033107042312622], + [2.331493377685547, -4.416175842285156], + [0.80213862657547, 0.016894560307264328], + [8.538400650024414, -3.058619260787964], + [-3.3578102588653564, -1.9507848024368286], + [2.4319398403167725, -3.793909788131714], + [6.367403507232666, -2.6700689792633057], + [6.386160850524902, -3.870312452316284], + [2.633119821548462, 5.599461555480957], + [-4.667931079864502, 5.396424770355225], + [-3.666344404220581, -1.5414172410964966], + [7.61245584487915, -2.978634834289551], + [0.4226335883140564, -6.663008689880371], + [-1.6019291877746582, 0.5654934644699097], + [1.0389893054962158, -6.361134052276611], + [1.191478967666626, -0.13345935940742493], + [0.11530023068189621, -3.813321113586426], + [1.524929165840149, -4.067538261413574], + [2.039055585861206, -3.965261936187744], + [-3.5475127696990967, -1.1466346979141235], + [0.3471797704696655, -6.4048004150390625], + [5.041835308074951, -5.212317943572998], + [-0.09754201024770737, -3.6809117794036865], + [4.975010395050049, 7.69754695892334], + [-3.8131401538848877, -1.230231523513794], + [-1.1107113361358643, 10.084457397460938], + [-3.6893470287323, -2.6129908561706543], + [0.8371725082397461, -0.3100266754627228], + [-3.393740653991699, -1.4052625894546509], + [7.592986583709717, -2.541581392288208], + [0.05447649210691452, -1.5553900003433228], + [1.5942083597183228, 5.1430487632751465], + [-1.6962594985961914, -0.026779059320688248], + [-4.845118522644043, -0.9033403396606445], + [3.81890606880188, -4.121942520141602], + [-3.6763155460357666, -1.5614843368530273], + [3.3083317279815674, 7.090805530548096], + [-3.850743055343628, -0.9081413149833679], + [-1.849137544631958, 2.2117550373077393], + [-3.657426118850708, -1.226574420928955], + [0.30703532695770264, -5.978672027587891], + [3.559516668319702, 6.429749965667725], + [0.14443707466125488, -2.4676082134246826], + [-4.062885284423828, 0.31883224844932556], + [7.399343013763428, -3.5845577716827393], + [-0.9797212481498718, 10.6953125], + [2.119943380355835, -4.803579807281494], + [2.92816424369812, -5.028608322143555], + [-4.241346836090088, -1.3518342971801758], + [1.9845166206359863, -4.57190465927124], + [0.3909875750541687, -5.76383113861084], + [-3.3613498210906982, -1.0877193212509155], + [0.8443660736083984, -7.42788028717041], + [-1.1269372701644897, 10.558328628540039], + [0.5872324705123901, -7.70892333984375], + [0.6173757314682007, -6.921477794647217], + [-2.094531774520874, 1.0796767473220825], + [3.0041401386260986, -4.535423755645752], + [2.542314291000366, -3.975221872329712], + [0.30599749088287354, -6.953310966491699], + [-3.4980623722076416, -2.801832675933838], + [0.522887647151947, -6.924622535705566], + [6.823463439941406, -2.2576444149017334], + [-0.8515664935112, 9.235860824584961], + [2.780240058898926, -4.810193061828613], + [-1.1332075595855713, -2.2846553325653076], + [-1.3675665855407715, 5.23106575012207], + [-0.8569894433021545, -0.6147843599319458], + [0.44773077964782715, -5.673531532287598], + [-3.4998302459716797, 5.005362510681152], + [0.5731522440910339, -7.622473239898682], + [0.4758973717689514, -4.862125396728516], + [0.8892757296562195, -0.2552278935909271], + [2.710664987564087, -4.935599327087402], + [2.2346737384796143, 5.462388515472412], + [1.5782110691070557, 1.642346978187561], + [-0.5355911254882812, 9.397672653198242], + [0.5657382607460022, -7.822635650634766], + [0.7990146279335022, -7.892678737640381], + [-1.5345656871795654, 12.938599586486816], + [0.3951225280761719, -5.158592224121094], + [-4.778878211975098, 5.027825355529785], + [-2.173337459564209, -1.4160196781158447], + [-1.935352087020874, -0.8929687142372131], + [3.196077346801758, -4.958045482635498], + [2.8912160396575928, -4.646491527557373], + [0.9744279980659485, -5.094402313232422], + [0.880527913570404, -7.737504959106445], + [4.465755462646484, 7.15075159072876], + [0.5195138454437256, -5.709831714630127], + [-0.5064031481742859, 9.824161529541016], + [3.509260892868042, 6.7415971755981445], + [1.012887954711914, 0.0002981536090373993], + [0.6331136226654053, -5.922277450561523], + [-1.131068468093872, 0.12345051765441895], + [-3.779273271560669, -1.9795641899108887], + [-2.5128958225250244, 2.558783769607544], + [0.4860868453979492, -7.341645240783691], + [-1.2150837182998657, 11.058696746826172], + [2.0816709995269775, 6.004467964172363], + [0.5334414839744568, -8.194154739379883], + [-4.105504989624023, -1.522063970565796], + [0.9816493391990662, 0.8048304319381714], + [2.471801280975342, 5.213857173919678], + [7.0616607666015625, -2.1467020511627197], + [1.2587025165557861, -0.033587414771318436], + [-0.6915627121925354, 10.392943382263184], + [-3.1486241817474365, 5.01954984664917], + [-1.5130201578140259, 0.7879401445388794], + [-5.204069137573242, 7.043522834777832], + [-3.6898534297943115, -2.4723989963531494], + [2.733182907104492, -4.78146505355835], + [-4.146081447601318, -0.953152060508728], + [-4.1559977531433105, 5.361098289489746], + [-1.9630595445632935, 0.633137047290802], + [-2.059734344482422, 2.42268705368042], + [-4.470837593078613, -1.3754061460494995], + [-3.6340172290802, -0.8661069869995117], + [-1.9085520505905151, 1.9622725248336792], + [2.1788136959075928, -5.665544033050537], + [9.65466594696045, -2.8827579021453857], + [8.858172416687012, -3.331555128097534], + [-0.9029677510261536, 9.926088333129883], + [0.649235188961029, -9.001326560974121], + [-5.518823146820068, 4.7607035636901855], + [2.1384224891662598, 5.4759674072265625], + [0.28847378492355347, -5.091674327850342], + [-0.4473918378353119, 6.726034641265869], + [-3.189802408218384, -2.2072112560272217], + [-1.2070953845977783, 10.935073852539062], + [1.8272216320037842, -3.5624818801879883], + [0.38210201263427734, -5.016783714294434], + [-2.358711004257202, 2.377509355545044], + [5.265646457672119, -3.487483501434326], + [-3.7178494930267334, -1.5535556077957153], + [-3.6820595264434814, 6.651486396789551], + [2.1404967308044434, 3.2563977241516113], + [-0.49754589796066284, 9.964536666870117], + [0.7191381454467773, -6.839272975921631], + [2.0001626014709473, 1.3426340818405151], + [-1.3668138980865479, 1.9805866479873657], + [4.20601749420166, 7.392767429351807], + [0.5881489515304565, -7.501587867736816], + [-3.677621603012085, -1.521044373512268], + [6.87910795211792, -1.560560703277588], + [-4.234683513641357, 5.250430583953857], + [-0.5097213387489319, -1.2186365127563477], + [-0.28771156072616577, 9.605995178222656], + [-1.201892614364624, 0.951815128326416], + [0.6647221446037292, -7.25376033782959], + [-0.7022369503974915, 10.058760643005371], + [-3.7149715423583984, -0.8348857164382935], + [-3.997957468032837, 5.341808795928955], + [-3.818772077560425, -1.265670895576477], + [-1.648665189743042, 1.6248514652252197], + [-1.0519638061523438, 10.462890625], + [-1.7691943645477295, 0.9113723039627075], + [-1.1599161624908447, 11.239982604980469], + [8.031004905700684, -2.5165817737579346], + [-2.059657096862793, 2.325378894805908], + [2.994030714035034, -5.043807506561279], + [-0.99610835313797, 1.2717862129211426], + [0.36125630140304565, -5.426808834075928], + [-2.568697929382324, 2.805412530899048], + [3.0355091094970703, -5.209927082061768], + [-3.6062071323394775, -1.001250982284546], + [-0.08306369930505753, -4.976461410522461], + [2.5690276622772217, -4.610795974731445], + [-2.3061912059783936, 1.5081928968429565], + [-4.767504692077637, 3.930293083190918], + [-1.9763062000274658, -1.8466869592666626], + [-0.5528466701507568, 0.6887956857681274], + [-0.4407995343208313, 10.082124710083008], + [-4.109549045562744, 6.1327595710754395], + [-3.526435613632202, 3.1909666061401367], + [-4.083895206451416, 5.779145240783691], + [-4.39288854598999, 4.734729766845703], + [2.7048392295837402, -3.2655107975006104], + [7.635257244110107, -2.7651641368865967], + [1.4248919486999512, 5.740516662597656], + [1.956214427947998, -6.106521129608154], + [7.293658256530762, -4.615060806274414], + [4.922320365905762, 7.894050598144531], + [1.6074551343917847, 0.05381154641509056], + [-4.6010565757751465, 6.9088263511657715], + [0.3276941776275635, -5.997591972351074], + [-5.782054901123047, 7.331965446472168], + [-2.0267856121063232, 1.6224607229232788], + [3.765354871749878, 6.520051002502441], + [2.720095634460449, -4.621326446533203], + [-1.2396785020828247, 11.422490119934082], + [-1.9468079805374146, 0.6415706872940063], + [0.331935316324234, -5.146747589111328], + [-0.1494179368019104, 7.301119327545166], + [-2.2331507205963135, -0.7696868181228638], + [1.0375676155090332, 4.939166069030762], + [2.921592950820923, -5.017826080322266], + [0.6823641657829285, -6.997973442077637], + [2.5775110721588135, 5.399593353271484], + [-0.5491125583648682, 9.980525970458984], + [2.609416961669922, 6.096879482269287], + [-3.3092291355133057, -1.127961277961731], + [7.875766277313232, -2.2374465465545654], + [0.27133530378341675, -4.633528709411621], + [0.9199195504188538, -5.771624565124512], + [1.049255132675171, -6.205636024475098], + [-4.274684429168701, 3.7306108474731445], + [6.11608362197876, -4.682514667510986], + [0.942727267742157, -0.5211871862411499], + [-0.6946659684181213, 10.470258712768555], + [0.9554515480995178, -6.199313163757324], + [-0.3194223642349243, -1.4479929208755493], + [0.23051869869232178, -5.767366409301758], + [0.6182418465614319, -7.697892665863037], + [0.31317561864852905, -5.514205455780029], + [-3.9340271949768066, -0.8089699149131775], + [-1.9958339929580688, 1.2824057340621948], + [-3.810826063156128, -0.9093064069747925], + [2.164659261703491, -4.476665496826172], + [2.4107472896575928, 5.4515061378479], + [-3.345625638961792, 6.042093276977539], + [-3.824667453765869, -1.3568693399429321], + [-2.943941593170166, 3.0537500381469727], + [-0.7348441481590271, 10.018817901611328], + [0.661750316619873, -6.071900367736816], + [1.4191617965698242, 5.480943202972412], + [-4.840033054351807, 6.701054096221924], + [-3.8726110458374023, -2.637629270553589], + [3.4784252643585205, -4.2068586349487305], + [-2.4429478645324707, -1.3600574731826782], + [-5.272077560424805, -0.9589101672172546], + [-3.3898494243621826, -0.8360084891319275], + [-2.338399887084961, 0.21796190738677979], + [-0.1839541792869568, 8.235605239868164], + [-2.327561378479004, 0.2876565456390381], + [-3.0822932720184326, -1.0066783428192139], + [-3.315284252166748, 1.8721548318862915], + [8.792218208312988, -2.791001796722412], + [0.7543372511863708, 0.5271283984184265], + [-1.5604530572891235, -3.3786985874176025], + [-4.298326015472412, 6.166014194488525], + [7.911148548126221, -2.2159230709075928], + [3.090773344039917, 2.424999475479126], + [0.6769298911094666, -7.367676258087158], + [6.867519855499268, -2.0721466541290283], + [1.1431794166564941, -6.0689897537231445], + [2.2731943130493164, 0.5322748422622681], + [-3.300306797027588, -1.892541766166687], + [8.469807624816895, -2.732401132583618], + [2.27982234954834, -1.576456904411316], + [0.5375737547874451, -6.23464298248291], + [0.8538764715194702, 4.998470783233643], + [2.3594908714294434, -4.862687110900879], + [7.992315769195557, -3.1416876316070557], + [7.849697589874268, -2.3058531284332275], + [0.603687047958374, 5.810207366943359], + [-1.225985050201416, 10.60261344909668], + [-0.6656555533409119, 9.667923927307129], + [5.600355625152588, -1.068385362625122], + [-1.1442179679870605, 10.164636611938477], + [2.6078882217407227, 6.270183563232422], + [8.612909317016602, -2.8624162673950195], + [-5.357477188110352, 6.752725601196289], + [-0.4861288368701935, -0.5165358781814575], + [2.7796056270599365, 0.8360034823417664], + [2.383864402770996, 5.61174201965332], + [2.7759861946105957, -4.2440338134765625], + [-2.3143770694732666, 0.2784816026687622], + [-0.3060951828956604, 9.652602195739746], + [-5.058900833129883, 1.1219898462295532], + [2.8107149600982666, 4.982643127441406], + [-0.9212032556533813, 9.426072120666504], + [-1.1076651811599731, 10.457752227783203], + [-1.1350905895233154, 10.283318519592285], + [3.3015918731689453, -4.912294387817383], + [-1.3547754287719727, 1.5892210006713867], + [-2.0914463996887207, -0.9431504011154175], + [0.5259188413619995, -7.214425086975098], + [-0.5462451577186584, 9.973777770996094], + [-4.765609264373779, -4.027781009674072], + [2.960761070251465, -5.0074262619018555], + [0.6512870192527771, -6.6452741622924805], + [3.6518430709838867, 6.7025957107543945], + [-4.294629096984863, 6.571501731872559], + [-4.354090213775635, -1.4652148485183716], + [-0.3391978144645691, 9.533501625061035], + [-1.9317970275878906, 1.8442751169204712], + [2.442464590072632, -3.8936142921447754], + [-1.5800518989562988, 13.1912841796875], + [-0.017212040722370148, -0.4674498438835144], + [0.539663553237915, -5.644956588745117], + [1.8864551782608032, 2.6858770847320557], + [-4.3965678215026855, -1.0360877513885498], + [-4.050247669219971, 4.6537275314331055], + [2.5981361865997314, -4.570829391479492], + [0.5209379196166992, -4.43540620803833], + [8.097355842590332, -2.5770885944366455], + [0.40588003396987915, -5.369198799133301], + [3.0152552127838135, -5.115320205688477], + [-5.176852703094482, -0.9025987386703491], + [-3.44397234916687, -2.454423427581787], + [-4.011322975158691, 4.874709129333496], + [7.28572416305542, -2.0404348373413086], + [-3.651336669921875, -0.3396066427230835], + [3.2714993953704834, 6.574929237365723], + [-2.8407797813415527, -2.3956661224365234], + [-3.1436235904693604, -1.3690377473831177], + [0.6992071866989136, -7.955139636993408], + [-1.8060895204544067, 0.5072746276855469], + [7.752833843231201, -2.5083587169647217], + [-1.083599328994751, 10.329950332641602], + [1.099696397781372, 0.03519618138670921], + [0.4386333227157593, -4.7010393142700195], + [8.90125560760498, -2.6506435871124268], + [7.25253438949585, -2.1387579441070557], + [-4.368830680847168, -0.5768409967422485], + [0.14717721939086914, -0.8624089360237122], + [-4.464319229125977, 6.0312299728393555], + [-4.421748638153076, -0.19345945119857788], + [-3.9167046546936035, -2.545320749282837], + [0.557868242263794, -7.186329364776611], + [-4.4568586349487305, -1.124798059463501], + [0.6938595771789551, -8.110596656799316], + [-3.9923927783966064, -2.0356199741363525], + [-1.3685307502746582, 11.753544807434082], + [-3.7506821155548096, 5.702765464782715], + [-4.220959186553955, -2.7036001682281494], + [-0.9676366448402405, 11.107358932495117], + [-1.0407606363296509, 10.665861129760742], + [-3.891514778137207, -1.8975051641464233], + [-0.42806053161621094, -2.1441762447357178], + [-2.1470744609832764, 1.3460127115249634], + [0.393351674079895, -6.501535415649414], + [1.482011318206787, -4.145838737487793], + [0.4339672923088074, -7.306962013244629], + [-4.260390281677246, -3.5314104557037354], + [8.794693946838379, -2.80826735496521], + [0.8679579496383667, -4.671154022216797], + [0.7340216636657715, -8.292450904846191], + [-4.293375492095947, -0.8902005553245544], + [2.7261390686035156, -4.565994739532471], + [2.9320895671844482, -5.924742698669434], + [1.0049294233322144, -7.787023067474365], + [8.059216499328613, -2.9536211490631104], + [2.6081748008728027, -5.640077114105225], + [-1.0448061227798462, 5.669978141784668], + [-0.757233738899231, 10.376445770263672], + [-0.004555530846118927, -4.057129383087158], + [0.5215628147125244, -4.995113372802734], + [3.9424612522125244, 6.988924980163574], + [-1.9563075304031372, 2.179110288619995], + [0.6257680654525757, -8.18086051940918], + [-3.899078607559204, -0.3996613621711731], + [-5.138604640960693, -0.8391668200492859], + [-2.9756405353546143, -0.894770622253418], + [6.436470985412598, -3.1662790775299072], + [1.8636534214019775, 4.718908309936523], + [0.8292796015739441, 1.9870864152908325], + [0.2592008113861084, -5.523926734924316], + [-2.0524446964263916, 2.461447238922119], + [0.8624258637428284, -7.83765983581543], + [-4.0341715812683105, 6.392772674560547], + [-3.6891682147979736, -1.1001750230789185], + [-0.93632572889328, 1.1048463582992554], + [-3.2313406467437744, -1.1058980226516724], + [-4.235830783843994, -4.5630645751953125], + [-2.4665029048919678, -0.11930131912231445], + [-1.2955912351608276, 0.2520478665828705], + [1.1790599822998047, -0.14388945698738098], + [-2.148254632949829, 2.0161654949188232], + [1.9065792560577393, 5.366308689117432], + [-0.7045726180076599, 10.652545928955078], + [-3.2338874340057373, 5.282872676849365], + [2.301074743270874, 4.077732086181641], + [1.4900693893432617, 4.969812393188477], + [4.914664268493652, 7.9650983810424805], + [0.6561126708984375, -8.173248291015625], + [-1.0316412448883057, 9.981624603271484], + [0.4565882086753845, -5.688175678253174], + [-1.981916069984436, 2.5972890853881836], + [-4.1674723625183105, 3.479497194290161], + [-1.3729158639907837, 2.13838529586792], + [-1.0900790691375732, 10.152457237243652], + [-1.8084396123886108, 0.08890223503112793], + [2.7780206203460693, -4.615984916687012], + [-4.1696977615356445, -1.190375566482544], + [1.022667646408081, -4.503249168395996], + [-4.2916340827941895, -0.5673133134841919], + [4.595505237579346, -5.681535720825195], + [-1.138230323791504, -2.5030179023742676], + [-1.0290803909301758, 3.4509077072143555], + [-1.4162790775299072, 11.969091415405273], + [0.5958604216575623, -7.146627902984619], + [1.8153350353240967, 5.776669979095459], + [-0.5021117329597473, -1.307315468788147], + [-1.8170639276504517, -0.5859478712081909], + [-3.4327809810638428, -2.1164045333862305], + [0.6075941920280457, -8.066404342651367], + [2.2473247051239014, 5.501101493835449], + [2.1752283573150635, -5.268601417541504], + [-0.02424553781747818, -1.2540314197540283], + [1.2015798091888428, 1.6276925802230835], + [-2.8815009593963623, -1.9389395713806152], + [5.24384069442749, -2.28950572013855], + [6.054013729095459, -2.638366460800171], + [-5.001035213470459, 5.914117813110352], + [5.0724968910217285, -2.0640063285827637], + [3.032287120819092, -5.086825370788574], + [0.16610214114189148, -0.5991528630256653], + [1.4671624898910522, -5.96964168548584], + [2.9387619495391846, 6.565023899078369], + [-0.6803339123725891, 10.115945816040039], + [-1.6615912914276123, 13.326647758483887], + [-2.7563207149505615, -1.1077678203582764], + [-3.744588613510132, -0.8479719161987305], + [0.5082337260246277, -6.898553371429443], + [1.3703811168670654, 3.428489923477173], + [2.73755145072937, 4.967045783996582], + [0.03121086210012436, -5.297197341918945], + [-3.7534117698669434, -0.65498948097229], + [-4.028167724609375, -3.069103240966797], + [2.7994625568389893, -4.79730749130249], + [-4.765791893005371, -0.9894708395004272], + [-5.000782489776611, -3.6252405643463135], + [-1.1713370084762573, 0.19126400351524353], + [-1.486643671989441, 12.34323501586914], + [-0.20230066776275635, 9.362983703613281], + [2.4754889011383057, 0.623060941696167], + [-0.031315095722675323, -4.3991475105285645], + [5.835956573486328, -2.3485395908355713], + [-2.0920073986053467, -1.5511081218719482], + [2.609670877456665, 5.332784652709961], + [-2.193162202835083, -0.6557073593139648], + [0.5675801634788513, -7.7741780281066895], + [-0.22416990995407104, 9.543136596679688], + [-1.4169777631759644, 1.4614347219467163], + [1.802303433418274, -4.127196311950684], + [-0.8536478877067566, 10.608144760131836], + [5.763624668121338, -0.538661003112793], + [0.5790831446647644, -7.552966117858887], + [-0.14937251806259155, -3.1602203845977783], + [6.972033977508545, -2.649648904800415], + [6.014161586761475, -4.124650955200195], + [-0.14594131708145142, 4.802942752838135], + [-1.920683741569519, 1.5106041431427002], + [-2.2923784255981445, 1.540318250656128], + [-4.123162269592285, 6.615939140319824], + [-0.6827422976493835, -1.0257461071014404], + [0.2589861750602722, -5.333159446716309], + [2.5781800746917725, 5.98686408996582], + [2.904451370239258, -5.1143999099731445], + [-4.020097732543945, -1.0657917261123657], + [8.051085472106934, -2.7128169536590576], + [0.5243638157844543, -6.476846694946289], + [7.178730487823486, -2.68996262550354], + [0.5393971800804138, -0.7757860422134399], + [-3.671952962875366, -0.894209623336792], + [0.6526676416397095, -6.554121971130371], + [-1.5916714668273926, -1.6898845434188843], + [-5.596574306488037, -0.6462169885635376], + [-3.831324815750122, 5.970867156982422], + [1.7004165649414062, 4.383378505706787], + [-1.345198392868042, 11.650123596191406], + [-0.5193806290626526, 9.953455924987793], + [0.7168408036231995, -7.088509559631348], + [6.550381183624268, -1.3730419874191284], + [1.533745527267456, 5.1764912605285645], + [7.95355749130249, -2.6446444988250732], + [-2.211498498916626, 6.032793045043945], + [0.753535270690918, -4.04575777053833], + [5.894176006317139, -1.1051682233810425], + [-3.1125924587249756, -1.1784029006958008], + [-1.9558842182159424, 1.2571443319320679], + [-1.6663873195648193, 2.249269962310791], + [-4.70601224899292, -0.8921657800674438], + [0.5301268100738525, -6.826720237731934], + [0.28247305750846863, -5.499576568603516], + [1.559549331665039, 4.883683681488037], + [-3.143146514892578, -1.0759553909301758], + [0.25633299350738525, -3.557699680328369], + [0.5156591534614563, -7.067040920257568], + [0.37884587049484253, -5.758444786071777], + [-2.95037841796875, -0.812699556350708], + [-4.295347690582275, 7.064164638519287], + [2.391122817993164, -5.751702308654785], + [-2.1829211711883545, -0.8390260934829712], + [-1.2033153772354126, 11.160730361938477], + [2.4533939361572266, 4.400528907775879], + [-3.8592865467071533, -1.3642903566360474], + [0.7928318977355957, -6.164497375488281], + [-2.2682626247406006, 2.121046543121338], + [1.3314634561538696, -4.777422904968262], + [1.5093021392822266, 0.2982632517814636], + [9.919124603271484, -2.9891297817230225], + [8.201117515563965, -2.393582582473755], + [-2.0462169647216797, 1.9076207876205444], + [-5.506038665771484, -0.8282989263534546], + [0.9535383582115173, -5.849422454833984], + [2.1350464820861816, 0.5969252586364746], + [2.5274150371551514, -4.322623252868652], + [0.6252032518386841, 6.685553073883057], + [-2.2252979278564453, -1.2842533588409424], + [0.6413519978523254, -0.5826488137245178], + [-0.47925645112991333, 8.848388671875], + [-0.09129098802804947, -2.549253225326538], + [-1.5047677755355835, -0.7047373056411743], + [0.49531489610671997, -6.192355155944824], + [-5.696648120880127, 2.841710090637207], + [-2.328773021697998, 6.115700721740723], + [2.2796194553375244, 4.473124980926514], + [8.54409122467041, -2.5089330673217773], + [-1.8126838207244873, 1.4695602655410767], + [-0.3377884030342102, -1.8653090000152588], + [-4.059034824371338, 6.811212539672852], + [-3.6462738513946533, -1.1484850645065308], + [1.7253015041351318, -5.911520957946777], + [3.6658689975738525, -4.533190727233887], + [1.6245005130767822, 5.650878429412842], + [2.188035249710083, 3.607457160949707], + [-3.6831398010253906, 4.054686546325684], + [0.9025741219520569, -7.835636138916016], + [0.7254625558853149, -8.672351837158203], + [0.6488067507743835, -9.116138458251953], + [3.232567548751831, -5.216553688049316], + [0.34093397855758667, -0.8797383308410645], + [1.9112904071807861, 5.483304023742676], + [1.9113277196884155, 5.253808498382568], + [-0.9073330760002136, 10.009134292602539], + [-2.6670749187469482, -3.6011087894439697], + [0.7310566306114197, -5.405063629150391], + [7.227579593658447, -3.3976669311523438], + [-3.520890951156616, -2.523313045501709], + [1.774032473564148, 6.378749847412109], + [-0.011491723358631134, 8.131977081298828], + [-5.128856182098389, 6.376274108886719], + [0.3330756425857544, -6.20462703704834], + [-2.16847825050354, 1.4975316524505615], + [-5.703442096710205, -1.3614333868026733], + [-0.6324626803398132, 9.483335494995117], + [0.7494181990623474, -5.303215026855469], + [5.859166622161865, -1.9210189580917358], + [0.6581342816352844, -7.6323089599609375], + [0.6186922192573547, 7.5443115234375], + [4.842617511749268, 7.795962333679199], + [5.25425386428833, 8.089679718017578], + [5.558827877044678, -3.536548376083374], + [2.5309572219848633, -4.806059837341309], + [-4.159980297088623, 5.319779396057129], + [0.5961988568305969, -9.103961944580078], + [-2.9939544200897217, -0.4982905387878418], + [-3.9989442825317383, -1.3520935773849487], + [-1.1615709066390991, 11.898576736450195], + [1.5019419193267822, 3.3046467304229736], + [9.198352813720703, -2.7982442378997803], + [-5.7145161628723145, 3.468215227127075], + [3.0963730812072754, -3.7473156452178955], + [1.2791563272476196, -5.482099533081055], + [2.7437736988067627, -4.5147833824157715], + [5.023896217346191, 8.02029800415039], + [1.301330804824829, 6.958355903625488], + [-0.019020266830921173, -4.015786647796631], + [-3.9390175342559814, -2.4596946239471436], + [9.449009895324707, -3.0988614559173584], + [-4.47758674621582, -1.8814984560012817], + [4.550316333770752, -3.121014356613159], + [2.2228519916534424, 5.901381969451904], + [-2.0771427154541016, -1.4216524362564087], + [1.271411657333374, -0.06494426727294922], + [0.6876886487007141, -9.194665908813477], + [1.3763916492462158, 0.20315834879875183], + [-4.834793567657471, -3.9902234077453613], + [-1.234948754310608, 4.349420070648193], + [-3.755596160888672, -0.9745627045631409], + [0.5846839547157288, -6.950807094573975], + [3.0693931579589844, 6.482809066772461], + [-0.5698462128639221, -0.37836360931396484], + [2.9699809551239014, -5.090250015258789], + [2.6861603260040283, -4.283827781677246], + [-4.568995952606201, -1.3668078184127808], + [-6.026376724243164, -0.7163258194923401], + [-5.370269775390625, -1.2421108484268188], + [2.1452016830444336, -4.537144660949707], + [-1.10087251663208, -0.5469611883163452], + [2.2836153507232666, 6.077151298522949], + [2.4677958488464355, 6.019748210906982], + [-1.0572988986968994, 10.22431755065918], + [-1.8478689193725586, 1.7984566688537598], + [-0.6917850971221924, -0.6323223114013672], + [-1.8918869495391846, 1.3964192867279053], + [-4.1648688316345215, -2.3977904319763184], + [-3.8466196060180664, -2.08366060256958], + [0.18232625722885132, 5.60495138168335], + [3.1084353923797607, -4.772445201873779], + [-0.012409456074237823, -4.483672142028809], + [0.2909733057022095, -5.526916980743408], + [2.922903299331665, -4.913055419921875], + [-4.5898823738098145, 6.399562358856201], + [-4.588720798492432, 5.274051189422607], + [1.7084331512451172, -5.165937423706055], + [1.1749601364135742, 3.494108200073242], + [-3.4104278087615967, -2.58540415763855], + [-4.464700222015381, -1.685681939125061], + [-1.8719695806503296, 1.9425636529922485], + [2.0061628818511963, 5.866640090942383], + [-3.8739848136901855, -1.8209682703018188], + [0.33085519075393677, -5.7521796226501465], + [-4.3700056076049805, -1.460269570350647], + [3.3880183696746826, -4.167891502380371], + [-1.1662867069244385, 12.006257057189941], + [-1.235273003578186, 10.39640998840332], + [2.682873010635376, 6.051177501678467], + [8.679739952087402, -2.7592551708221436], + [0.7352087497711182, -8.778221130371094], + [2.010749101638794, 5.144387245178223], + [-1.9752943515777588, 2.252809524536133], + [1.5897903442382812, 2.065579414367676], + [-3.4536945819854736, 6.066399097442627], + [-4.3681159019470215, -0.7448619604110718], + [-4.567887783050537, 6.343894958496094], + [5.505318641662598, 8.163019180297852], + [4.9809064865112305, -4.043977737426758], + [2.448059320449829, 6.485925197601318], + [0.34093916416168213, -6.418739318847656], + [0.47693079710006714, -1.2671257257461548], + [2.395508050918579, -3.9914467334747314], + [6.923465251922607, -2.0152251720428467], + [0.6933225393295288, 5.115222930908203], + [0.38697105646133423, -3.711869239807129], + [-0.693188488483429, 1.2669626474380493], + [0.6881923079490662, -8.07961654663086], + [-4.54221773147583, 5.5331878662109375], + [1.623095989227295, 1.6630467176437378], + [-4.4515061378479, 1.1681820154190063], + [0.8085830807685852, -9.066740036010742], + [-0.16609293222427368, 3.673252820968628], + [-1.3414617776870728, 11.610705375671387], + [0.5913398861885071, -7.42509651184082], + [6.26593542098999, -3.526139497756958], + [-3.4031708240509033, -1.3724156618118286], + [6.163411617279053, -1.4064264297485352], + [-0.6535400748252869, 10.407279968261719], + [1.806724190711975, 2.9983251094818115], + [0.273342102766037, -3.2712912559509277], + [-1.3240175247192383, 11.661500930786133], + [-1.4515759944915771, 12.078761100769043], + [-0.5320391654968262, 8.565690040588379], + [0.7160349488258362, -7.7956342697143555], + [0.6054204106330872, -8.385381698608398], + [0.5255295634269714, -6.92864465713501], + [0.7406995296478271, -7.1090497970581055], + [1.755013346672058, 2.099236488342285], + [-2.993939161300659, -0.9524933695793152], + [0.7184635996818542, -8.101897239685059], + [7.159402370452881, -2.257688522338867], + [-5.2487359046936035, -1.142391324043274], + [-4.358828067779541, -0.9958746433258057], + [-1.4359958171844482, 0.6442683935165405], + [-1.050240159034729, 10.428625106811523], + [4.258372783660889, 7.218784332275391], + [-2.017364263534546, 0.2808440923690796], + [7.0931477546691895, -2.912032127380371], + [2.473499059677124, -5.333311557769775], + [1.6283087730407715, 0.2850216031074524], + [2.191410779953003, -5.122733116149902], + [-4.645759582519531, 5.920172214508057], + [-1.6071605682373047, 1.806882381439209], + [2.7524030208587646, -7.093173503875732], + [-3.612093687057495, 5.59782075881958], + [1.3167822360992432, -7.375450611114502], + [-0.5605638027191162, 9.877087593078613], + [1.6518771648406982, -4.922607898712158], + [0.7390866279602051, -0.6473071575164795], + [-3.649811267852783, 0.3517991304397583], + [1.9040181636810303, -5.242049694061279], + [-0.886561393737793, 10.531004905700684], + [7.539416790008545, -2.4393393993377686], + [6.363152503967285, -4.683985710144043], + [-1.3597288131713867, 11.929386138916016], + [-0.704102098941803, -0.2904093861579895], + [-1.543391466140747, 0.04848262295126915], + [-1.5383074283599854, 13.077348709106445], + [-3.641347646713257, 5.725539207458496], + [0.6086698174476624, -7.52227783203125], + [-5.046581268310547, -1.0259429216384888], + [-4.219421863555908, -2.9685544967651367], + [-0.9441763758659363, 11.259459495544434], + [0.24508655071258545, -6.083795547485352], + [-3.6655988693237305, -1.0367103815078735], + [2.998993158340454, -4.640219211578369], + [5.366884708404541, -2.5694022178649902], + [-4.549804210662842, -3.492177724838257], + [9.917845726013184, -3.0119855403900146], + [-1.8273757696151733, 2.1533944606781006], + [-4.152172565460205, 6.234353065490723], + [1.5925302505493164, 1.939866065979004], + [6.815520763397217, -1.7785544395446777], + [8.479089736938477, -2.6630923748016357], + [0.6426807045936584, -8.518550872802734], + [-1.2043097019195557, -1.392428994178772], + [1.2446255683898926, -4.948000907897949], + [1.4407066106796265, -5.175039291381836], + [-3.018418312072754, -1.9377716779708862], + [6.273040294647217, -2.2060787677764893], + [-3.8569867610931396, -1.5705713033676147], + [0.4627096652984619, -3.8665049076080322], + [0.6807531118392944, -6.6350202560424805], + [-4.092713832855225, -1.7832309007644653], + [1.8364441394805908, 0.7860978841781616], + [-3.4077136516571045, -0.7651238441467285], + [7.745632648468018, -2.8364908695220947], + [0.4388427734375, -6.199741363525391], + [-5.8423848152160645, -1.0638641119003296], + [-5.076343059539795, -0.679911732673645], + [0.6626188158988953, -4.978751182556152], + [-3.2518980503082275, -1.4028849601745605], + [0.859605610370636, -0.44106143712997437], + [0.9313234686851501, -0.3380398452281952], + [-3.028549909591675, -0.09152036905288696], + [2.186660051345825, -5.49334192276001], + [1.658029317855835, 0.24357959628105164], + [2.149296998977661, 3.773266315460205], + [3.3244526386260986, 6.761348724365234], + [1.744340419769287, 0.726178765296936], + [0.7398333549499512, -5.1181440353393555], + [-0.955873429775238, 9.173727035522461], + [-1.4812424182891846, 12.001575469970703], + [-2.2631025314331055, 2.12475323677063], + [-3.3828141689300537, 5.518991470336914], + [-0.6084403395652771, -2.497277021408081], + [-4.556171417236328, -0.8113131523132324], + [2.7594926357269287, -4.4473700523376465], + [-1.0805058479309082, 10.460670471191406], + [-1.8340269327163696, 5.244256973266602], + [-4.297791957855225, -1.5429813861846924], + [-4.356112957000732, 6.192224025726318], + [0.7656946778297424, -9.227553367614746], + [1.779401183128357, 2.320622205734253], + [-2.5910942554473877, 2.728999376296997], + [-3.701425313949585, -3.2867469787597656], + [-0.5981202721595764, 9.893941879272461], + [0.7572295069694519, -8.47943115234375], + [-1.2285820245742798, 11.610309600830078], + [-0.5635812878608704, -2.4336955547332764], + [-4.032404899597168, -0.8729876279830933], + [1.5568726062774658, 4.367790699005127], + [0.7687955498695374, 3.1414806842803955], + [-1.9352350234985352, -1.3329194784164429], + [-1.1827635765075684, 11.199173927307129], + [-4.148927211761475, -2.5867888927459717], + [0.6449533700942993, -7.339450359344482], + [1.073785424232483, -5.396944046020508], + [-1.3313801288604736, 11.301200866699219], + [-1.4214705228805542, 0.6489144563674927], + [-1.9753566980361938, 0.46734124422073364], + [-2.462404727935791, -1.6438417434692383], + [-3.5840213298797607, -2.7052175998687744], + [3.450103282928467, 6.936611175537109], + [0.689276397228241, -8.57349967956543], + [-4.078295707702637, 2.693016290664673], + [0.41562849283218384, -5.900929927825928], + [-5.352232456207275, -0.8206127285957336], + [-0.6184858679771423, 7.449423313140869], + [3.4193270206451416, 6.625881195068359], + [8.211254119873047, -2.4253618717193604], + [2.057692050933838, -4.504551410675049], + [2.351301431655884, 6.131265640258789], + [-1.157568335533142, 11.02920150756836], + [0.6057274341583252, -7.327895164489746], + [-0.0559237077832222, -5.588199615478516], + [0.9136966466903687, -0.5467525124549866], + [-4.054836273193359, -1.1237400770187378], + [-1.2480772733688354, 10.786502838134766], + [1.0773389339447021, -5.958379745483398], + [-3.1600852012634277, -0.7342835068702698], + [0.5970969200134277, -5.549432754516602], + [-1.248253583908081, 11.119596481323242], + [4.955594539642334, -3.5413596630096436], + [-1.5044382810592651, 12.424006462097168], + [-0.6693423390388489, 9.771350860595703], + [2.489525318145752, -4.306770324707031], + [-4.175215721130371, -1.6954737901687622], + [1.8037506341934204, 5.585070610046387], + [-1.1060324907302856, 10.840073585510254], + [-5.55689001083374, 4.421077728271484], + [-2.389075994491577, -1.3645212650299072], + [3.0154266357421875, -4.741977214813232], + [-3.373971700668335, 5.29554557800293], + [-0.07833147794008255, -1.6530280113220215], + [-1.1147353649139404, 1.7193992137908936], + [1.8037924766540527, 3.9646594524383545], + [-3.041355848312378, -3.5849459171295166], + [1.811525583267212, -5.008542060852051], + [0.5298969149589539, -7.180550575256348], + [0.4866730570793152, -5.3012495040893555], + [-1.482706904411316, 12.239891052246094], + [6.315440654754639, -1.508129596710205], + [-3.784315347671509, -0.08376055955886841], + [-5.1218485832214355, 4.302511215209961], + [2.862100839614868, -4.853218078613281], + [0.7096914052963257, -6.949944496154785], + [4.646728515625, -3.9336535930633545], + [-4.264593124389648, -1.4195722341537476], + [-4.111507415771484, -3.499098300933838], + [2.0137996673583984, 6.609261989593506], + [-4.851481914520264, 5.925958633422852], + [0.14642584323883057, -4.875277519226074], + [-3.907597780227661, -0.8887253999710083], + [-4.676302909851074, 5.665198802947998], + [0.6247541308403015, -6.92436408996582], + [-3.201340675354004, -0.895401120185852], + [-4.4692182540893555, 6.187798976898193], + [-4.486656188964844, -1.5397063493728638], + [-4.057546615600586, -1.4309942722320557], + [-3.5919229984283447, 5.704538345336914], + [1.546211838722229, -0.07850465178489685], + [-3.199523448944092, -2.0269181728363037], + [-3.866502046585083, -0.8552678823471069], + [1.9881396293640137, -5.373563766479492], + [1.555586338043213, -7.317766189575195], + [-4.72042989730835, -4.772454261779785], + [2.206522226333618, -4.119969367980957], + [-4.917231559753418, 6.541531085968018], + [0.6676526665687561, -8.281393051147461], + [1.2641233205795288, -5.277073860168457], + [0.22523468732833862, -4.459211349487305], + [1.1355245113372803, -0.20755235850811005], + [-3.7577226161956787, -1.9514445066452026], + [-3.142371416091919, -1.1761152744293213], + [2.695706605911255, -4.637539386749268], + [-4.159986972808838, 5.450969696044922], + [1.4855012893676758, 0.2127482295036316], + [5.805454730987549, -2.4583961963653564], + [-3.276148796081543, -1.1185095310211182], + [1.341027021408081, -3.6193487644195557], + [1.3315361738204956, -5.122384548187256], + [-3.118616819381714, -1.0680564641952515], + [-3.5658977031707764, -0.321549654006958], + [-0.3320555090904236, -1.4726442098617554], + [-4.954578399658203, -0.5202609300613403], + [-5.80968713760376, 5.035431385040283], + [7.468283176422119, -2.8221166133880615], + [-3.2973203659057617, -1.3210266828536987], + [0.48856955766677856, -6.322919845581055], + [1.674213171005249, 3.9527270793914795], + [-1.314529538154602, 12.390917778015137], + [8.512190818786621, -2.8035011291503906], + [0.16958332061767578, -6.214990139007568], + [0.6591551899909973, -9.069771766662598], + [7.273779392242432, -2.3969333171844482], + [-1.7681889533996582, 1.0168904066085815], + [-1.3672962188720703, 11.498750686645508], + [-3.6291725635528564, -1.3389358520507812], + [-4.970898151397705, 1.2703535556793213], + [7.573300838470459, -2.9984195232391357], + [0.8561294674873352, -0.6695500016212463], + [-1.4595987796783447, 12.126798629760742], + [-1.830772876739502, 1.0871882438659668], + [-1.2093405723571777, 11.636422157287598], + [6.581308841705322, -3.1128571033477783], + [5.138265132904053, 8.016958236694336], + [9.557807922363281, -2.8261044025421143], + [-2.109924793243408, 2.101053476333618], + [-2.10508131980896, 2.319967746734619], + [0.5334195494651794, -7.611542701721191], + [-0.057209618389606476, -5.153094291687012], + [-1.766972303390503, 2.240337610244751], + [-2.59759259223938, 2.927124261856079], + [8.136351585388184, -2.7998201847076416], + [8.607527732849121, -3.0467026233673096], + [-5.089808464050293, -1.228866696357727], + [-3.9334964752197266, -2.8084568977355957], + [-0.029253192245960236, -4.7777862548828125], + [-0.6310257911682129, -1.827551245689392], + [7.236990451812744, -2.981576919555664], + [0.5955373048782349, -4.917407989501953], + [-3.387094259262085, -0.6219540238380432], + [-3.9645700454711914, -2.472700357437134], + [1.5409655570983887, -5.685211658477783], + [-4.936831951141357, -4.402911186218262], + [2.879427671432495, -4.705630779266357], + [-3.524625062942505, -1.0101126432418823], + [4.788130283355713, -2.541398048400879], + [-1.3390854597091675, 11.836387634277344], + [-0.18399658799171448, -2.5327813625335693], + [-4.2390594482421875, -2.4169366359710693], + [2.8480145931243896, 5.653803825378418], + [-5.0430474281311035, -0.8696054816246033], + [1.821375846862793, -4.399700164794922], + [-3.0818350315093994, -1.103905439376831], + [-1.2588613033294678, 10.854411125183105], + [-0.10517130047082901, -1.6875574588775635], + [-0.5233219861984253, -0.8918699026107788], + [0.7038305997848511, -7.7088117599487305], + [-2.080375909805298, 0.52837073802948], + [-3.136087417602539, 6.423869609832764], + [-1.8923066854476929, 1.7612601518630981], + [-0.7154820561408997, 10.26268196105957], + [-3.218012571334839, -1.1397820711135864], + [-0.6967233419418335, 6.029139041900635], + [-4.006911277770996, -1.2999600172042847], + [-1.2629770040512085, 11.236927032470703], + [-2.6727848052978516, 2.8069357872009277], + [-3.6372852325439453, 6.57188606262207], + [-4.3149847984313965, -2.9345266819000244], + [7.917698383331299, -2.3012120723724365], + [0.5472719669342041, -7.177032947540283], + [-3.3456709384918213, -1.3999115228652954], + [-0.6290616989135742, 0.27994799613952637], + [2.274641513824463, -4.181296348571777], + [0.7159128785133362, -8.301310539245605], + [-1.7349621057510376, 0.20606857538223267], + [-4.21700382232666, 4.474667072296143], + [-0.8982216715812683, -0.5854088664054871], + [1.49225652217865, 3.9709184169769287], + [6.361828327178955, -2.5652339458465576], + [0.587435781955719, -8.030686378479004], + [1.1628152132034302, -0.047331247478723526], + [-1.6036120653152466, 0.9982333183288574], + [-6.431061744689941, 8.998617172241211], + [-2.675072431564331, 2.7331862449645996], + [-3.5753159523010254, -1.0513750314712524], + [-1.051242709159851, 10.356260299682617], + [-2.1047251224517822, 2.3934006690979004], + [-3.4914989471435547, -2.5032260417938232], + [-1.269347071647644, 11.287995338439941], + [0.7506558895111084, -4.755232334136963], + [0.6834819912910461, -4.578475475311279], + [0.10430752485990524, -1.3108088970184326], + [-2.78728985786438, 6.152466773986816], + [-5.905555725097656, 4.686520576477051], + [-3.9234871864318848, -0.9601410627365112], + [-5.433013916015625, -0.8337136507034302], + [0.6909239292144775, -8.622264862060547], + [0.55129474401474, -6.382271766662598], + [2.596254825592041, -4.949632167816162], + [-3.3661510944366455, -1.5005263090133667], + [-4.302628040313721, -0.9124910831451416], + [1.0015172958374023, -6.478960037231445], + [7.5729804039001465, -3.0801007747650146], + [-0.6580144762992859, 10.125692367553711], + [-1.8672772645950317, 0.4427762031555176], + [-2.3725788593292236, 1.9554520845413208], + [0.5687537789344788, -7.462498664855957], + [1.89536714553833, 5.368430137634277], + [8.507336616516113, -2.6869003772735596], + [-2.360776424407959, -1.0039494037628174], + [-4.368053913116455, 4.178704261779785], + [2.5137064456939697, -4.757748126983643], + [-3.5667355060577393, -1.7382851839065552], + [2.637279987335205, -4.476845741271973], + [-2.1100783348083496, -2.04815936088562], + [2.4487526416778564, -4.325115203857422], + [9.836231231689453, -2.9598095417022705], + [-5.227546215057373, 6.904437065124512], + [-4.556995868682861, 6.054050922393799], + [-3.050516366958618, 5.886783123016357], + [2.8309762477874756, -3.6711466312408447], + [-4.404630661010742, -3.288342237472534], + [-4.771646499633789, 1.078225016593933], + [-3.3345658779144287, 3.7440197467803955], + [0.5113528370857239, -5.496167182922363], + [0.5709096789360046, -0.5908875465393066], + [-4.00881290435791, -2.6184096336364746], + [7.9544854164123535, -2.4229319095611572], + [2.0516164302825928, -4.332586288452148], + [-2.957775354385376, -1.069405198097229], + [4.6315436363220215, -0.5200584530830383], + [0.8933734893798828, 0.42485877871513367], + [0.7509487271308899, -0.5741884708404541], + [4.936882495880127, -4.770139694213867], + [2.479220151901245, -3.9017059803009033], + [0.6303994059562683, -7.898643493652344], + [-3.885772705078125, -1.4177078008651733], + [-4.555418968200684, 6.070362567901611], + [2.8482110500335693, -4.608030796051025], + [-0.6145070791244507, 7.234497547149658], + [-1.4297133684158325, 12.34523868560791], + [-1.110475778579712, 10.725105285644531], + [7.011161804199219, -2.523517608642578], + [2.7680978775024414, -4.523968696594238], + [-1.3973329067230225, 1.0283900499343872], + [4.011438846588135, 7.134357452392578], + [-1.2577424049377441, 11.690470695495605], + [4.910132884979248, 7.768794059753418], + [-3.7944438457489014, 2.945687770843506], + [6.102965354919434, -1.861706256866455], + [-2.789583921432495, 0.4133462905883789], + [0.9096177220344543, -7.142523765563965], + [-0.1145361140370369, -0.8787382245063782], + [8.079161643981934, -2.8981494903564453], + [1.4999041557312012, 2.087482213973999], + [-0.47286760807037354, 9.638221740722656], + [2.1472151279449463, 6.20646858215332], + [0.5715068578720093, -7.621037006378174], + [0.5880522131919861, -7.533941268920898], + [2.698895215988159, -4.649776458740234], + [1.67854905128479, 4.2665181159973145], + [-5.407628536224365, 6.952570915222168], + [7.683074474334717, -2.1668202877044678], + [-1.2545921802520752, 11.282419204711914], + [-1.2122458219528198, 11.18519115447998], + [0.40248286724090576, -6.940875053405762], + [-3.8929357528686523, -1.6863130331039429], + [0.7056643962860107, -6.82880973815918], + [2.322948455810547, 0.7994588613510132], + [1.1617519855499268, -5.13969087600708], + [-4.302911758422852, 6.135372161865234], + [-1.522871494293213, -1.6077905893325806], + [6.751443862915039, -3.0589146614074707], + [0.26044535636901855, -4.66837215423584], + [2.7692387104034424, 6.358887672424316], + [-1.929002046585083, 1.9535082578659058], + [-2.791200637817383, 5.61591100692749], + [-4.255143642425537, -3.2805309295654297], + [-4.835259914398193, -4.436465263366699], + [-2.251328468322754, -0.8072391152381897], + [0.26880526542663574, -5.329043388366699], + [-3.694868803024292, -0.06052279844880104], + [2.985020399093628, -4.633588790893555], + [-2.4221768379211426, 2.5557150840759277], + [-0.3939945697784424, 7.265955924987793], + [3.1674978733062744, -4.347111225128174], + [-3.9554641246795654, 5.054750919342041], + [-5.081183910369873, 5.3756842613220215], + [1.8891454935073853, 3.7079570293426514], + [-0.3542836904525757, 9.821039199829102], + [-1.2958239316940308, 11.380905151367188], + [1.031920313835144, -0.02504858747124672], + [0.6053646206855774, -7.368597030639648], + [5.676684856414795, -3.530405282974243], + [-1.2969248294830322, 11.44324016571045], + [-0.9732247591018677, 1.1446343660354614], + [1.1702682971954346, 0.6278517246246338], + [2.316143274307251, -4.461029529571533], + [2.462270975112915, -4.374946594238281], + [-0.6210296750068665, -1.3149948120117188], + [0.001180998980998993, 6.965090751647949], + [-4.881618022918701, 6.854305267333984], + [-2.104874849319458, 3.1929972171783447], + [4.952104568481445, -4.266049861907959], + [0.25829046964645386, 5.322660446166992], + [-3.113158702850342, 3.499072790145874], + [1.9367473125457764, 5.0151872634887695], + [0.16743487119674683, -2.9338512420654297], + [-4.072869300842285, 1.831274390220642], + [0.5990014672279358, -6.2307047843933105], + [-3.5385842323303223, -1.8321796655654907], + [-4.162388801574707, -2.0763661861419678], + [-1.277547001838684, 1.1224746704101562], + [-1.8584635257720947, 1.206295132637024], + [-3.6493475437164307, -2.6520063877105713], + [6.567087650299072, -2.69419002532959], + [-4.213228702545166, -4.066554069519043], + [-3.3175811767578125, -1.3759230375289917], + [-4.545568466186523, 6.155029773712158], + [8.503310203552246, -2.917623281478882], + [8.142937660217285, -2.7409465312957764], + [-4.058077335357666, -0.7719756960868835], + [-1.933600902557373, 1.8177767992019653], + [1.02181077003479, 5.151800155639648], + [7.768526554107666, -3.459723711013794], + [-4.266072750091553, -2.8733904361724854], + [2.8117287158966064, -4.547722816467285], + [1.099480152130127, 5.603272438049316], + [-0.6644819974899292, 0.2484750747680664], + [0.5720179080963135, -8.278326034545898], + [-1.6305115222930908, 1.679286003112793], + [9.174714088439941, -2.7988011837005615], + [-0.7225294709205627, -0.5390923023223877], + [2.7709367275238037, -4.571324348449707], + [-2.941577434539795, -0.6811205148696899], + [-2.7512829303741455, 3.0072176456451416], + [1.1469510793685913, -5.37270975112915], + [-5.331845760345459, 5.334181308746338], + [0.627961277961731, -8.681673049926758], + [2.7784974575042725, -4.849536895751953], + [2.8636507987976074, -4.599865913391113], + [1.0941287279129028, 7.840195655822754], + [0.16334348917007446, -3.8052480220794678], + [-0.6958494782447815, 10.628154754638672], + [0.3875614404678345, -0.6037487387657166], + [2.8405842781066895, -5.117432117462158], + [9.315789222717285, -2.894827365875244], + [-3.5602104663848877, 3.9076802730560303], + [-0.921974241733551, -0.5360193848609924], + [0.7007673382759094, -8.156235694885254], + [-0.27394503355026245, 0.1397237479686737], + [-2.1882097721099854, 1.9059182405471802], + [-0.8339077830314636, -1.9594589471817017], + [5.830428600311279, -2.777966260910034], + [-0.319707453250885, 8.782489776611328], + [-4.434709072113037, 6.277416229248047], + [2.6957974433898926, -4.954981803894043], + [0.7874594926834106, -0.3246716856956482], + [3.0190980434417725, -4.76615047454834], + [2.118462085723877, 5.174783706665039], + [-1.2304809093475342, 0.7730810642242432], + [-0.45156991481781006, 9.725297927856445], + [-0.7114564180374146, 10.552189826965332], + [0.796576738357544, -6.746993541717529], + [-0.7961738705635071, 10.299641609191895], + [-6.075345993041992, 4.9524407386779785], + [1.868493914604187, 6.013960361480713], + [0.5778690576553345, -6.572224140167236], + [-2.4254894256591797, 6.069828033447266], + [-2.0186874866485596, 0.6175365447998047], + [-1.0736024379730225, 10.351335525512695], + [4.141969203948975, 7.367685794830322], + [0.3626270294189453, -5.317359924316406], + [-1.4461731910705566, 12.041610717773438], + [8.360587120056152, -2.6638848781585693], + [7.877683162689209, -2.345158338546753], + [2.611419200897217, -5.226781368255615], + [-1.0908608436584473, 10.249865531921387], + [2.2989206314086914, 5.1976118087768555], + [8.23099422454834, -3.002572774887085], + [-0.5163455605506897, 10.522634506225586], + [2.0846140384674072, -4.886275291442871], + [9.41248607635498, -2.8553831577301025], + [0.6531550288200378, -7.548375606536865], + [-0.6961039900779724, 9.72509765625], + [-1.268163800239563, 10.836746215820312], + [-1.9916965961456299, 0.9899301528930664], + [-0.6874524354934692, 10.510062217712402], + [1.6588287353515625, -4.780364036560059], + [8.443073272705078, -3.0206849575042725], + [-0.6145268082618713, 9.155847549438477], + [0.598676860332489, -8.023590087890625], + [0.7868052124977112, -8.771832466125488], + [-2.088214874267578, -1.6833440065383911], + [-2.112304449081421, 2.14988112449646], + [-5.082086086273193, 6.095224857330322], + [-5.28251314163208, 7.1636738777160645], + [-0.2376386821269989, -1.0753804445266724], + [-2.764251947402954, -1.7369906902313232], + [-0.3725478947162628, -1.3263311386108398], + [-3.8514902591705322, -2.102376937866211], + [-0.3535439372062683, 9.769834518432617], + [2.860036611557007, -4.518613815307617], + [0.15683451294898987, -3.583566427230835], + [-4.200198650360107, -2.715418815612793], + [-0.9380011558532715, 8.823549270629883], + [-5.333619594573975, -1.6805225610733032], + [-1.745840072631836, 2.316790819168091], + [1.9612174034118652, -4.323976516723633], + [0.7704066634178162, -6.129154205322266], + [-1.700248122215271, 0.7639349102973938], + [-3.653285264968872, 0.16912180185317993], + [-4.643641948699951, -0.6840023398399353], + [-3.1132142543792725, -1.4250887632369995], + [-0.8863323330879211, 10.75167465209961], + [-1.7616792917251587, -0.23634544014930725], + [7.237204074859619, -2.210017681121826], + [4.863619327545166, 7.5579142570495605], + [-1.9381427764892578, 1.7859127521514893], + [-2.408761739730835, -0.5497558116912842], + [-4.376491069793701, -1.4319871664047241], + [-0.7900213003158569, 10.232362747192383], + [-2.976532220840454, 3.114004373550415], + [-5.396714687347412, -0.9780164957046509], + [1.1519049406051636, 1.353469967842102], + [4.775270938873291, 7.695716857910156], + [1.1827303171157837, 6.322409152984619], + [7.962501049041748, -2.501182794570923], + [-0.427354097366333, 7.324793815612793], + [-1.385618805885315, 0.32091596722602844], + [-0.1304168999195099, -1.5572013854980469], + [-3.226513624191284, -0.9036105871200562], + [2.5786242485046387, -4.332716941833496], + [0.5133273601531982, -5.663727760314941], + [-1.8434336185455322, 1.7805767059326172], + [-3.72515606880188, -2.4120876789093018], + [-1.41586172580719, 12.16055679321289], + [0.6039929986000061, -6.337671279907227], + [-2.676119089126587, 0.8484338521957397], + [-1.1958881616592407, 10.696102142333984], + [-1.9214084148406982, 0.18965566158294678], + [1.2116303443908691, 0.2978668212890625], + [-1.025388479232788, 10.800052642822266], + [-3.313199281692505, 0.07361692190170288], + [-5.6174235343933105, 7.290433883666992], + [-4.848893165588379, 5.764407157897949], + [7.313805103302002, -2.3395936489105225], + [2.1411349773406982, 5.317028999328613], + [0.4628745913505554, -0.9475839734077454], + [-1.204699158668518, -1.846509575843811], + [2.5666818618774414, -4.889333248138428], + [2.979811429977417, -4.642080307006836], + [0.5832887291908264, -8.483457565307617], + [-5.412783145904541, 7.208139419555664], + [-3.3238980770111084, 2.560041904449463], + [2.1176836490631104, 1.3308342695236206], + [-1.3854105472564697, 1.3429021835327148], + [-2.4196693897247314, 0.31312114000320435], + [2.3718996047973633, 4.2129693031311035], + [-4.426488876342773, -2.0464303493499756], + [-1.5108394622802734, 1.444259524345398], + [3.0901408195495605, 6.649284362792969], + [2.556586980819702, -5.098082542419434], + [-4.369526386260986, -0.7344788312911987], + [7.288625240325928, -2.1364099979400635], + [2.674724578857422, 4.9512104988098145], + [-5.1319499015808105, 6.0536274909973145], + [-1.9254812002182007, 2.697453260421753], + [-5.392299175262451, 6.571129322052002], + [0.3919970393180847, -6.638721466064453], + [5.617480278015137, -2.770561456680298], + [3.0305111408233643, -2.647869348526001], + [6.942819118499756, -4.296446800231934], + [-1.9949796199798584, 2.193978786468506], + [0.642017662525177, -8.017454147338867], + [0.8165663480758667, -7.062010765075684], + [-3.675503969192505, -3.160144805908203], + [0.4114781618118286, -6.571603775024414], + [-4.165097713470459, -0.03306126967072487], + [2.787018060684204, -4.576356410980225], + [2.839536428451538, -4.611701011657715], + [-0.4054662585258484, 8.978729248046875], + [3.1069068908691406, -4.945952415466309], + [0.014943532645702362, -4.147109508514404], + [5.368750095367432, -2.0104870796203613], + [-5.131805419921875, 2.693713903427124], + [2.6436262130737305, -4.469008445739746], + [7.562502384185791, -2.7398386001586914], + [-4.327944278717041, -3.0481302738189697], + [-4.245991230010986, -2.5716989040374756], + [0.77181476354599, -2.6777050495147705], + [0.3194211721420288, -5.213764667510986], + [2.810159921646118, -4.740717887878418], + [2.2069504261016846, 6.746020793914795], + [-4.228250980377197, -0.8403371572494507], + [-2.131094455718994, 1.1957905292510986], + [-2.358297348022461, -0.8709678649902344], + [-4.039045333862305, -1.909608244895935], + [-3.9783594608306885, 6.653477668762207], + [0.6477452516555786, -8.155774116516113], + [-4.759190082550049, -1.1112405061721802], + [-1.9835364818572998, 1.607279896736145], + [-4.961884498596191, 4.208174228668213], + [4.371578216552734, -4.708445072174072], + [-1.2801921367645264, 10.883478164672852], + [5.2317633628845215, -3.033942937850952], + [-0.5860058665275574, 9.851757049560547], + [-1.1053690910339355, 10.25162124633789], + [-2.8703060150146484, -0.36872178316116333], + [0.5502210855484009, -7.8465576171875], + [-1.2751781940460205, 11.089975357055664], + [4.102035045623779, 7.0265703201293945], + [3.2901809215545654, -6.401050090789795], + [-0.4721111059188843, 7.423694610595703], + [2.3945679664611816, -3.7877109050750732], + [-4.787046432495117, 3.9575459957122803], + [0.5573524236679077, -6.951684951782227], + [3.6902987957000732, 6.705259799957275], + [-2.887678384780884, -1.454124093055725], + [-5.3990302085876465, 6.099294185638428], + [-0.1215304508805275, -1.3939577341079712], + [3.4626057147979736, -3.694023847579956], + [-1.7326422929763794, 2.243086576461792], + [2.7834863662719727, 6.240144729614258], + [0.3914359211921692, -5.6431403160095215], + [0.4408521056175232, -4.265934944152832], + [-0.06359092146158218, -3.764116048812866], + [1.2383968830108643, -0.2442159354686737], + [-5.11654806137085, -0.6875457167625427], + [-0.4820014238357544, 6.288938999176025], + [5.58772611618042, -1.174073338508606], + [2.1329095363616943, -3.967796564102173], + [-2.08998703956604, 2.381528377532959], + [-1.118051290512085, 1.3192881345748901], + [-4.631241798400879, 4.907922744750977], + [1.9592795372009277, -4.444060802459717], + [-3.6992814540863037, -0.7535409927368164], + [2.6436171531677246, -4.548339366912842], + [-1.1137454509735107, 0.9195014834403992], + [6.173201084136963, -3.5351953506469727], + [-0.2635180354118347, -1.6765056848526], + [6.968608856201172, -4.254205226898193], + [-0.03509307652711868, 7.921756744384766], + [-0.6287927031517029, 9.297443389892578], + [-4.025085926055908, -2.623739242553711], + [-3.879755973815918, -1.8536813259124756], + [-3.7493526935577393, 0.6783379316329956], + [0.7219067811965942, -8.182427406311035], + [0.9028841853141785, 6.291868686676025], + [-0.9759467840194702, 9.513280868530273], + [-3.493001699447632, -1.354034185409546], + [1.7776360511779785, 4.513164043426514], + [-3.5751283168792725, -1.7032395601272583], + [-2.449716567993164, -1.460333228111267], + [-2.059041738510132, 2.0329205989837646], + [0.7114062905311584, -9.452625274658203], + [-1.5389823913574219, -2.6633222103118896], + [-0.2613956332206726, 9.614948272705078], + [-1.7753180265426636, 1.7295928001403809], + [-1.7800819873809814, 1.0683188438415527], + [0.5217097997665405, -7.217972755432129], + [-3.9454708099365234, -2.9464328289031982], + [2.469400644302368, 3.959644079208374], + [8.575398445129395, -2.7122254371643066], + [0.19617131352424622, -0.7618494629859924], + [-1.859869360923767, 1.7514182329177856], + [-1.3128948211669922, 0.17712774872779846], + [0.704273521900177, -8.678125381469727], + [9.290860176086426, -2.7364284992218018], + [-2.2939653396606445, -1.707645058631897], + [-3.1975040435791016, -2.9536545276641846], + [-0.4313737154006958, 9.211204528808594], + [5.701422214508057, -1.5153526067733765], + [0.41093313694000244, -5.685757637023926], + [-4.748002052307129, 0.7006416320800781], + [-4.192785739898682, -0.8419613242149353], + [6.778331279754639, -2.9204394817352295], + [2.4868600368499756, 6.191478252410889], + [-2.05304217338562, 0.719413697719574], + [-3.6516058444976807, 6.082383155822754], + [3.0935347080230713, -4.82728910446167], + [0.7769540548324585, -6.013650894165039], + [-3.8355939388275146, -1.0734211206436157], + [3.0046982765197754, -2.9608638286590576], + [0.35440123081207275, -1.0941849946975708], + [-0.29926246404647827, 7.716758728027344], + [-3.040278196334839, 6.633736610412598], + [7.088862895965576, -2.937290668487549], + [0.8005974888801575, -6.983393669128418], + [2.3325459957122803, -4.393259525299072], + [1.4622845649719238, 2.360212564468384], + [-3.8803293704986572, 4.252984523773193], + [0.9262779355049133, -6.874253273010254], + [-1.2766121625900269, 11.355566024780273], + [0.25882378220558167, -4.150801658630371], + [1.2008509635925293, -2.1339945793151855], + [0.4998459815979004, -6.647972106933594], + [6.080962181091309, -1.879889965057373], + [-2.60673189163208, 6.45358419418335], + [5.132810115814209, -3.239203691482544], + [-4.266053199768066, -1.3992722034454346], + [2.396090030670166, -3.710638999938965], + [7.7998528480529785, -2.783452033996582], + [1.9812991619110107, 0.6698108911514282], + [-5.967803001403809, -0.8470481038093567], + [-0.7023478746414185, 9.632894515991211], + [-5.316177845001221, 5.634730339050293], + [-2.9499752521514893, -1.659084677696228], + [-1.464308500289917, 12.441024780273438], + [-4.171268463134766, -3.2531707286834717], + [-1.3695491552352905, 11.831350326538086], + [0.3229544162750244, -6.276209831237793], + [2.1171610355377197, -4.129270553588867], + [-3.693526029586792, -3.642817497253418], + [1.0336664915084839, 1.593230128288269], + [5.735178470611572, -0.9145759344100952], + [0.8399403095245361, -4.844583511352539], + [1.9606225490570068, 4.796751976013184], + [-5.264049530029297, 4.520171165466309], + [-3.785356044769287, -1.9151896238327026], + [0.5258995294570923, -7.818820476531982], + [5.968017578125, -2.932825803756714], + [0.277381956577301, -5.88577938079834], + [-0.36828047037124634, 10.616886138916016], + [0.41242510080337524, -6.329207420349121], + [5.7330498695373535, -1.3051738739013672], + [-1.2324142456054688, 11.370417594909668], + [0.32453829050064087, -5.754823684692383], + [-1.7695780992507935, 1.968960165977478], + [3.4078385829925537, 6.644202709197998], + [2.579669237136841, 5.739371299743652], + [-3.0654866695404053, -0.07771933078765869], + [-0.5122890472412109, 0.666359543800354], + [1.7543389797210693, 1.0833593606948853], + [1.664231777191162, 4.669552803039551], + [5.892758846282959, -2.906545877456665], + [-4.031700134277344, -1.5876604318618774], + [-5.8963942527771, 6.353991508483887], + [-4.375571250915527, -2.6294734477996826], + [-1.4390164613723755, 12.301231384277344], + [7.170461654663086, -4.0649542808532715], + [2.909451723098755, 2.0939910411834717], + [4.188289165496826, 7.334965229034424], + [-4.872526168823242, 6.542778015136719], + [2.798926830291748, -4.539488315582275], + [2.585700750350952, -4.465027332305908], + [0.9537323117256165, 4.947818756103516], + [0.8899721503257751, -7.367734909057617], + [-4.299835681915283, 5.7424750328063965], + [7.52241849899292, -2.4125537872314453], + [-4.779865264892578, -3.5138747692108154], + [5.995105743408203, -4.004731178283691], + [7.352193355560303, -2.552565813064575], + [-3.137220621109009, -0.9518144130706787], + [6.54763650894165, -2.809748888015747], + [8.84838581085205, -2.989619493484497], + [0.9316678643226624, -7.791481018066406], + [1.4123947620391846, 0.3473132252693176], + [2.0665557384490967, 0.3933039903640747], + [-1.731307029724121, 0.1846974790096283], + [-4.292709827423096, -1.0950506925582886], + [-3.94516921043396, -2.987478494644165], + [-0.9859212040901184, 9.987979888916016], + [1.201977014541626, -6.166841506958008], + [6.142591953277588, -3.989895820617676], + [-3.826528787612915, -2.2819437980651855], + [2.9280881881713867, -4.693478107452393], + [0.5441226959228516, -7.8765788078308105], + [3.104142904281616, -4.738813400268555], + [-0.8035016655921936, 6.344809055328369], + [0.8160196542739868, -5.273232460021973], + [0.6129267811775208, -7.8958024978637695], + [0.5537185668945312, -7.466587066650391], + [-2.119446039199829, 0.9085820913314819], + [-1.2111833095550537, 4.876364231109619], + [2.138079881668091, -4.222322463989258], + [1.488875389099121, 0.2083899974822998], + [1.5486785173416138, 5.172280788421631], + [-3.576552629470825, -1.5718472003936768], + [2.356653928756714, -0.6831955909729004], + [-4.11137056350708, -4.081363677978516], + [4.89389705657959, 7.927575588226318], + [0.5738317370414734, -7.296087265014648], + [-1.0613420009613037, 11.162700653076172], + [2.1392781734466553, -3.934777021408081], + [-2.6377575397491455, -1.428104281425476], + [2.7924797534942627, 5.940383434295654], + [3.798218250274658, 6.552206039428711], + [0.19485676288604736, -4.740900039672852], + [-0.19573980569839478, 8.273503303527832], + [-3.5808379650115967, -1.2818313837051392], + [2.3962106704711914, 6.106435775756836], + [-2.9435462951660156, -1.9075744152069092], + [2.837735414505005, -4.418875217437744], + [-3.6645233631134033, -1.3524216413497925], + [-1.3837294578552246, -0.2250516414642334], + [0.1942652463912964, -6.150936603546143], + [3.1540353298187256, -3.8322136402130127], + [-1.238426923751831, 11.29389762878418], + [-1.9878712892532349, 1.927476167678833], + [6.765801906585693, -3.341765880584717], + [-4.6474103927612305, 6.315784454345703], + [0.12655776739120483, -5.471824645996094], + [0.6780831217765808, -7.221022129058838], + [-3.643162250518799, 5.548737049102783], + [3.6592025756835938, 6.563969135284424], + [2.6198716163635254, -4.0978193283081055], + [-1.2552956342697144, 11.130084991455078], + [-3.7979331016540527, -1.9842206239700317], + [-2.782963514328003, -1.6699416637420654], + [9.956942558288574, -3.0230562686920166], + [-1.9492952823638916, 1.4887478351593018], + [0.7440767288208008, -7.737005710601807], + [-5.514064311981201, 7.290631294250488], + [-1.1753007173538208, 10.778491973876953], + [-1.9919637441635132, 2.0806026458740234], + [-3.956488847732544, -2.5423800945281982], + [2.5345847606658936, -4.679436206817627], + [-1.8365439176559448, 0.36826393008232117], + [-3.779902696609497, 7.645270347595215], + [1.93239164352417, -4.083429336547852], + [-2.1744120121002197, 2.551586151123047], + [-4.228033542633057, -0.36242926120758057], + [0.12893635034561157, -3.579025983810425], + [-4.2411980628967285, 6.918600082397461], + [-6.245354175567627, 8.3558349609375], + [1.3994982242584229, -5.2602949142456055], + [-5.711451053619385, 7.4998016357421875], + [-1.9361687898635864, 2.0575382709503174], + [-4.916715145111084, 6.775181293487549], + [0.00983574241399765, -0.5897505879402161], + [-2.7268993854522705, -2.459043025970459], + [-3.2640442848205566, -1.0888673067092896], + [2.5790581703186035, -4.614397048950195], + [-0.7547561526298523, 10.122642517089844], + [-1.6073453426361084, 1.1812760829925537], + [2.111266851425171, -4.345990180969238], + [-4.5552825927734375, -3.9086573123931885], + [-1.984076738357544, 0.7186006307601929], + [0.7621169686317444, -6.624164581298828], + [2.790226697921753, -5.198553085327148], + [-1.8106353282928467, 2.1734251976013184], + [-3.961402416229248, -2.7585809230804443], + [-3.442915678024292, 0.8045226335525513], + [-1.5666431188583374, 2.383537530899048], + [-3.020267963409424, -0.8723173141479492], + [-0.7213321328163147, 9.720441818237305], + [7.029675006866455, -2.280690908432007], + [0.3245525360107422, -5.613916397094727], + [6.160467624664307, -3.0634002685546875], + [0.6889840364456177, -0.29939061403274536], + [-0.4917812943458557, 5.477869033813477], + [-0.3318498730659485, 8.252789497375488], + [-5.301948070526123, 5.856529712677002], + [2.8574888706207275, -3.6767749786376953], + [0.4297577142715454, -6.744086265563965], + [4.596877574920654, 7.453173637390137], + [-0.7171031832695007, -2.6060049533843994], + [-0.793878436088562, 10.331756591796875], + [6.301900386810303, -3.3758599758148193], + [-1.438305139541626, 1.4396560192108154], + [-4.216797828674316, -2.0791709423065186], + [-3.3846182823181152, -1.3483695983886719], + [5.499337673187256, 8.353578567504883], + [-3.7226951122283936, -0.6131912469863892], + [5.30281400680542, -2.844179153442383], + [2.3450722694396973, -4.514819145202637], + [0.1114911362528801, -5.618462562561035], + [-3.796659231185913, -1.910090446472168], + [7.748475074768066, -2.4858715534210205], + [1.79862642288208, 5.315884590148926], + [1.491346836090088, 1.6887239217758179], + [-3.908576250076294, -1.6727968454360962], + [6.86907434463501, -3.3285653591156006], + [-0.4211136996746063, -1.7787039279937744], + [2.543396234512329, -4.184871673583984], + [0.3738797903060913, -6.085046768188477], + [0.24010932445526123, -6.727109909057617], + [0.6242385506629944, -4.783083915710449], + [-1.3504093885421753, 11.459592819213867], + [-1.6490236520767212, 0.7136791348457336], + [1.9766380786895752, 2.3320655822753906], + [6.3253607749938965, -3.3255040645599365], + [0.6286414265632629, -6.73075532913208], + [2.147507905960083, 2.8575589656829834], + [0.5488048791885376, -7.947628974914551], + [3.0701310634613037, -5.069428443908691], + [2.2554984092712402, 3.587932586669922], + [-4.397590637207031, -1.911210060119629], + [8.646794319152832, -2.7761125564575195], + [-3.473479747772217, 3.55822491645813], + [-1.1673288345336914, 10.86386775970459], + [0.3266822099685669, -4.931090354919434], + [3.5541813373565674, 6.820050239562988], + [-1.9922220706939697, 1.9495441913604736], + [-3.8065202236175537, 5.7906718254089355], + [3.072730302810669, -5.068353652954102], + [5.405056476593018, 8.247066497802734], + [-2.0641837120056152, 2.8806066513061523], + [-3.098736047744751, -2.6739301681518555], + [-4.186977863311768, -1.2166619300842285], + [-4.469476222991943, 6.657498359680176], + [-3.5030949115753174, -1.3879148960113525], + [-3.761202096939087, -1.8000682592391968], + [-0.14411818981170654, 7.768670082092285], + [2.271315336227417, 5.822912216186523], + [7.204463481903076, -2.193178415298462], + [-3.5023043155670166, -3.527294397354126], + [0.6993128657341003, -7.7235565185546875], + [-1.3892579078674316, 12.036951065063477], + [0.32262763381004333, -4.776704788208008], + [-3.778686285018921, 6.116601943969727], + [2.9315898418426514, -4.927212715148926], + [6.951820373535156, -4.533827781677246], + [-4.959070682525635, 6.234565258026123], + [-0.09384510666131973, -3.069960355758667], + [1.8211643695831299, 2.287268877029419], + [8.803500175476074, -2.630671262741089], + [0.4238397479057312, -7.195400238037109], + [-3.5499682426452637, -1.1016072034835815], + [0.4890439510345459, -4.885284423828125], + [-0.790574312210083, 10.498144149780273], + [-4.499141216278076, -0.8593639135360718], + [0.8163413405418396, -6.4108171463012695], + [-3.513486623764038, 5.168797969818115], + [0.15779569745063782, -5.113834381103516], + [-0.9570005536079407, 10.857574462890625], + [-5.327895641326904, 5.708266258239746], + [0.31260770559310913, -6.245210647583008], + [2.9698944091796875, -4.982683181762695], + [0.5995787978172302, -3.4089009761810303], + [1.3298499584197998, -5.729219436645508], + [-3.187361478805542, 5.633238792419434], + [-5.610031604766846, 5.278398513793945], + [-3.528902292251587, -0.8852646350860596], + [1.33941650390625, 3.3568408489227295], + [2.438429594039917, 6.068480968475342], + [2.2508795261383057, -3.824641466140747], + [-3.9735355377197266, -1.4614675045013428], + [6.011706352233887, -1.9133177995681763], + [9.295642852783203, -2.7826058864593506], + [6.030124187469482, -3.05485200881958], + [2.344963550567627, -6.842897891998291], + [4.834352016448975, 7.732746124267578], + [-3.862387180328369, -1.8737307786941528], + [0.8510286211967468, -6.028745651245117], + [2.371586799621582, -4.037140369415283], + [-0.15900492668151855, -2.531581163406372], + [-4.263462543487549, -1.0275652408599854], + [-3.252352476119995, -1.473427653312683], + [8.888236999511719, -2.82350492477417], + [2.3855807781219482, -3.6407392024993896], + [1.0768598318099976, -0.053615812212228775], + [5.037002086639404, -3.7426512241363525], + [-4.41439962387085, -1.5551782846450806], + [2.3702707290649414, 4.114452362060547], + [-1.0849090814590454, 11.201419830322266], + [-0.8483626246452332, 10.019290924072266], + [-1.776242733001709, 0.4820076823234558], + [2.4560112953186035, 3.8824384212493896], + [7.812352657318115, -2.3554296493530273], + [-0.11432681232690811, -1.7414733171463013], + [-1.2152352333068848, 10.249820709228516], + [-4.893636703491211, 2.309086561203003], + [3.53442120552063, 6.7845916748046875], + [-4.176445484161377, -1.2048609256744385], + [-3.0628867149353027, -0.618187427520752], + [2.3256123065948486, 1.0956496000289917], + [-0.6503230929374695, 10.155325889587402], + [2.7657759189605713, -4.311678409576416], + [-0.9768881797790527, 10.297506332397461], + [0.5180445313453674, -7.834841251373291], + [0.6632764935493469, -6.8868865966796875], + [0.6292364597320557, -7.97262716293335], + [-4.700507640838623, 4.751523494720459], + [-5.122068881988525, 6.751131057739258], + [0.77064448595047, -8.810559272766113], + [2.7637946605682373, -4.58682918548584], + [0.5458421111106873, -8.114960670471191], + [8.3749418258667, -2.627207040786743], + [6.704624652862549, -1.8185656070709229], + [1.1587631702423096, 1.2689133882522583], + [1.1727230548858643, -5.853593826293945], + [1.252970576286316, -5.231200695037842], + [-0.563434362411499, 8.471487045288086], + [-1.7956444025039673, 1.668168306350708], + [-0.30300962924957275, 5.9678239822387695], + [-4.005207061767578, -2.380059003829956], + [-1.4237216711044312, -1.0617384910583496], + [0.5458828210830688, -6.7395501136779785], + [1.8597784042358398, -5.436019420623779], + [0.6903690695762634, -9.348777770996094], + [-0.15959373116493225, -1.4478398561477661], + [-1.8063238859176636, 0.9359217286109924], + [-1.6807105541229248, 13.230975151062012], + [-3.2849066257476807, -0.7029634714126587], + [-1.0381213426589966, 1.124260425567627], + [-5.2914509773254395, 6.998771667480469], + [2.9808237552642822, 6.590048313140869], + [-0.22729259729385376, 7.895884990692139], + [-2.1558773517608643, 2.130262613296509], + [4.694077014923096, 7.507996082305908], + [-1.4541125297546387, 12.288761138916016], + [1.1592416763305664, -1.0979870557785034], + [1.5646262168884277, 5.27032470703125], + [6.600522994995117, -3.2469966411590576], + [3.0639963150024414, -4.768319129943848], + [-0.5577932000160217, -1.6179628372192383], + [0.6436560153961182, -6.231510162353516], + [-1.2399011850357056, 11.467574119567871], + [1.0975065231323242, -6.393222332000732], + [6.4500203132629395, -2.7897164821624756], + [-1.142677903175354, 5.393337249755859], + [-3.413356304168701, -1.9041115045547485], + [-5.526075839996338, -1.4501782655715942], + [-0.9640507698059082, -0.8271774053573608], + [-4.885262966156006, 2.160754680633545], + [5.094173431396484, 8.03547477722168], + [-4.208188533782959, -2.1953399181365967], + [-5.045738697052002, 6.170424461364746], + [7.676204681396484, -2.240133047103882], + [-3.5065958499908447, -1.176047444343567], + [2.6051549911499023, -4.564089775085449], + [2.9228742122650146, -4.725862503051758], + [-1.7537014484405518, 1.173288345336914], + [-3.774773597717285, -1.3883949518203735], + [4.374814510345459, 7.528011798858643], + [-0.967593252658844, 10.04289436340332], + [0.0712571069598198, -4.098658561706543], + [8.70907211303711, -2.8292734622955322], + [2.3679864406585693, -3.9670159816741943], + [3.4414210319519043, -3.7011735439300537], + [-1.3141236305236816, 11.09935188293457], + [1.905347228050232, 3.5807158946990967], + [-3.4333431720733643, 0.4597175717353821], + [0.6676093935966492, -7.119730472564697], + [2.766627788543701, -4.438869476318359], + [0.6138630509376526, -7.2716169357299805], + [0.5457695126533508, -6.145510673522949], + [1.9172230958938599, 2.723492383956909], + [5.9401984214782715, 8.860163688659668], + [-0.34232544898986816, 8.684000015258789], + [-0.2881838083267212, -1.191200852394104], + [-4.373027324676514, -0.8343273401260376], + [2.389847993850708, 4.931259632110596], + [2.2269229888916016, 4.464775085449219], + [-2.984379768371582, -0.7703567743301392], + [0.9534607529640198, -4.592717170715332], + [-4.031754970550537, -2.1772077083587646], + [-3.718454360961914, -1.4542659521102905], + [2.4647903442382812, -4.655593395233154], + [-0.15302836894989014, -0.8971133232116699], + [-0.01638907939195633, 8.385405540466309], + [6.123191833496094, -1.2168371677398682], + [0.640222430229187, -8.119157791137695], + [-4.07963752746582, 5.990546226501465], + [1.9469993114471436, 5.14179801940918], + [8.568723678588867, -3.4226186275482178], + [0.08898382633924484, -3.094571113586426], + [-3.7567873001098633, -2.132173538208008], + [7.7812604904174805, -4.1092352867126465], + [-2.951855421066284, 4.184640884399414], + [-0.6967038512229919, 10.677571296691895], + [-4.095178127288818, 5.762783050537109], + [-1.431172490119934, -0.5637502074241638], + [0.20896729826927185, 0.4741624593734741], + [-4.443072319030762, -0.4377923011779785], + [-5.525419235229492, 7.074802398681641], + [2.6423556804656982, -5.451068878173828], + [-3.2526514530181885, 7.025195121765137], + [-4.89921760559082, -0.7072032690048218], + [0.6451711058616638, -7.409689903259277], + [1.0584428310394287, 6.9091339111328125], + [1.5656089782714844, -4.854833602905273], + [2.9953083992004395, -4.864309310913086], + [2.425457715988159, 6.4066691398620605], + [0.3568097949028015, 0.352213978767395], + [-5.216956615447998, -1.014344573020935], + [-3.67189621925354, -0.8893011808395386], + [-1.9263463020324707, 1.5824060440063477], + [-3.7364308834075928, -0.812362015247345], + [-4.713583469390869, -3.6580214500427246], + [1.8094658851623535, 0.2839199900627136], + [7.8098931312561035, -2.9590227603912354], + [3.1819489002227783, 6.541683197021484], + [0.7776389122009277, -7.23898983001709], + [0.07798736542463303, -3.7012548446655273], + [-5.359415531158447, -1.8989417552947998], + [1.5554487705230713, 4.840245246887207], + [2.100215196609497, 1.3240519762039185], + [-4.857538223266602, 6.590262413024902], + [8.492172241210938, -2.5518805980682373], + [-4.873631477355957, -3.03678297996521], + [-0.7423441410064697, 10.131736755371094], + [3.070181131362915, 7.044493675231934], + [0.5908657312393188, -8.023319244384766], + [-3.366626739501953, -2.0902788639068604], + [-4.420839309692383, -0.64568692445755], + [-1.1834475994110107, 0.16390880942344666], + [-4.298940181732178, -1.0884743928909302], + [-2.074784994125366, 1.2237401008605957], + [6.5356597900390625, -3.7372004985809326], + [2.1260855197906494, -4.865567207336426], + [-1.4302889108657837, 11.92259407043457], + [-3.510209321975708, -2.0789644718170166], + [-0.0024157240986824036, -3.5631744861602783], + [2.003257989883423, -4.404617786407471], + [0.7518187761306763, -7.207634925842285], + [-1.9826679229736328, -0.7799173593521118], + [7.9586710929870605, -2.3586037158966064], + [-4.415918827056885, 4.063788414001465], + [2.043091058731079, 5.1759419441223145], + [2.13374400138855, 5.149253845214844], + [-0.053912706673145294, -1.0668059587478638], + [-2.9843697547912598, -1.4936243295669556], + [-1.8238292932510376, 1.8755422830581665], + [-4.941871166229248, 5.875572204589844], + [1.8478310108184814, 2.4313905239105225], + [-5.324366092681885, 6.946240425109863], + [0.848635733127594, -4.977187156677246], + [2.5983359813690186, -4.450577735900879], + [-2.030681610107422, 1.9325032234191895], + [3.13103985786438, 6.679914474487305], + [6.229578495025635, -4.549826622009277], + [-1.1832408905029297, 10.87497329711914], + [5.982829570770264, -1.4892528057098389], + [-3.8865416049957275, -3.1777596473693848], + [5.647156238555908, -3.8926327228546143], + [-2.3685927391052246, 2.311413049697876], + [-0.2818078100681305, -0.44771575927734375], + [-1.1457439661026, 11.204557418823242], + [0.026803307235240936, -0.9706563949584961], + [7.974040508270264, -3.0172460079193115], + [-0.6856897473335266, -0.5489524602890015], + [2.1422383785247803, -4.0707597732543945], + [0.5560702681541443, -6.5510430335998535], + [-3.533646583557129, -0.9065676927566528], + [-1.5707210302352905, 1.1497249603271484], + [-1.3458820581436157, 1.479568600654602], + [-3.067124605178833, -0.8386270403862], + [2.0890207290649414, -3.9634244441986084], + [-0.03830001503229141, -5.011994361877441], + [-3.6659042835235596, -1.8594740629196167], + [8.275944709777832, -2.48266863822937], + [0.557931125164032, -7.622814178466797], + [-4.876022815704346, 5.970244407653809], + [5.412293910980225, -1.2633737325668335], + [4.3780837059021, 7.066896438598633], + [-4.741235256195068, 0.6350958943367004], + [-1.8775558471679688, 1.4136230945587158], + [0.35188376903533936, -4.904732704162598], + [1.9088480472564697, 3.146746873855591], + [3.898258686065674, 7.414206504821777], + [-1.941088318824768, 1.9556554555892944], + [1.7252938747406006, 0.7019214034080505], + [2.275672674179077, 5.697141647338867], + [7.98069429397583, -2.370206117630005], + [-2.4977543354034424, -0.7248064875602722], + [7.737478733062744, -2.274085760116577], + [1.7903060913085938, 3.879441022872925], + [1.7429149150848389, -4.426149368286133], + [-0.3095288872718811, 9.17996883392334], + [-3.238696813583374, -1.129443883895874], + [-0.6821860671043396, 0.4922446012496948], + [-4.400148868560791, 5.953607082366943], + [-1.596948504447937, 12.725809097290039], + [-1.151890516281128, 10.744651794433594], + [0.6783185601234436, -5.969056129455566], + [-3.11718487739563, 2.590365171432495], + [0.20365983247756958, -4.771214485168457], + [-2.1803174018859863, 5.822534561157227], + [0.6324307322502136, -8.664722442626953], + [2.438823938369751, -4.419873237609863], + [0.20893269777297974, -5.686384201049805], + [0.5818889737129211, -4.2312822341918945], + [7.373013973236084, -3.0555708408355713], + [2.911134958267212, -4.457319259643555], + [5.702846050262451, -3.8213117122650146], + [-4.251307010650635, -2.314692974090576], + [1.990429162979126, -4.668765544891357], + [-1.4604177474975586, 12.241142272949219], + [-1.1843053102493286, 11.492818832397461], + [1.817223310470581, -5.7079925537109375], + [-0.24043148756027222, 7.617883682250977], + [9.34273910522461, -3.036078691482544], + [-1.3393816947937012, 1.49716317653656], + [-0.47669732570648193, -0.9876502752304077], + [-4.98087215423584, 4.554912090301514], + [-3.7753260135650635, -2.8187825679779053], + [3.996264696121216, 6.742002487182617], + [-5.2080793380737305, 6.096437931060791], + [8.600563049316406, -3.3385651111602783], + [3.5831305980682373, 6.9655561447143555], + [-1.7719240188598633, 2.449721574783325], + [-3.062823534011841, -2.6408989429473877], + [0.6368576884269714, -8.06913948059082], + [2.0098254680633545, -4.715729713439941], + [-2.852750539779663, -0.7366280555725098], + [-3.741232395172119, -2.3493854999542236], + [0.12479888647794724, -3.0401501655578613], + [-4.2138352394104, -3.2211620807647705], + [0.4408226013183594, -5.935790061950684], + [-4.826595783233643, 1.5372930765151978], + [0.47446209192276, -7.362285614013672], + [1.6709095239639282, 1.3333178758621216], + [0.5699169039726257, -6.213531970977783], + [0.28400957584381104, -6.939641952514648], + [-5.1298699378967285, -0.8332695364952087], + [-1.8259410858154297, 0.827265739440918], + [-3.9571564197540283, -1.5641018152236938], + [0.39896726608276367, -6.775066375732422], + [0.9005515575408936, 0.3268396854400635], + [-3.427263021469116, -0.8772545456886292], + [-1.4324904680252075, -0.7835068106651306], + [-2.521169900894165, -0.8919531106948853], + [-3.7226805686950684, -1.9513965845108032], + [9.429441452026367, -2.9079232215881348], + [5.085216999053955, 8.085807800292969], + [-3.3335044384002686, -0.7579684257507324], + [-4.693085193634033, -0.8736424446105957], + [2.8247339725494385, -4.342147350311279], + [-3.7373955249786377, -1.3169203996658325], + [7.636804103851318, -3.4538638591766357], + [-1.4733129739761353, 12.137184143066406], + [-1.7435519695281982, 2.5010979175567627], + [-4.101266860961914, -1.1653441190719604], + [0.6694822907447815, -8.402131080627441], + [0.41764402389526367, -5.116811752319336], + [0.9779120087623596, -5.7884087562561035], + [-3.0921995639801025, 2.776433229446411], + [-3.8292434215545654, -1.6876550912857056], + [-0.4225238561630249, 10.411290168762207], + [-1.1169418096542358, 10.409074783325195], + [0.1545892357826233, -5.583548545837402], + [2.115320920944214, 5.208505630493164], + [1.0325345993041992, 4.014554500579834], + [-1.6289665699005127, 13.334409713745117], + [5.1759934425354, 8.030467987060547], + [2.7290048599243164, -4.449462890625], + [1.0534474849700928, -7.545614242553711], + [0.9378989338874817, -5.242220878601074], + [-1.3196765184402466, 12.048575401306152], + [0.699905514717102, -8.010415077209473], + [-2.671041488647461, 2.906735420227051], + [-0.14673012495040894, -1.6982277631759644], + [-2.748023271560669, 2.875779867172241], + [-3.6674301624298096, -1.2554705142974854], + [0.4703911542892456, -0.7412693500518799], + [-4.289373397827148, -0.16288435459136963], + [-0.5869686007499695, 9.890861511230469], + [9.260041236877441, -3.000303030014038], + [-3.617011547088623, -2.966665029525757], + [-4.3462958335876465, 0.41711753606796265], + [-1.9985270500183105, 4.275843620300293], + [8.85866641998291, -2.9175117015838623], + [-1.4282811880111694, -0.7808843851089478], + [-5.521388053894043, 7.530521392822266], + [-2.0093696117401123, -1.636885643005371], + [3.1691620349884033, -4.921386241912842], + [-3.2339375019073486, -1.5197805166244507], + [2.8870253562927246, -4.569980621337891], + [0.3380572199821472, -4.78420352935791], + [1.584165334701538, 0.3015221357345581], + [-4.3777289390563965, 1.2965091466903687], + [5.548766613006592, -1.7159658670425415], + [2.3142313957214355, -3.877807855606079], + [0.058105431497097015, -0.8832150101661682], + [-5.562184810638428, 7.071223258972168], + [1.5422885417938232, 1.7123442888259888], + [-2.74082350730896, -1.7737177610397339], + [2.844721794128418, 5.919427394866943], + [-4.349475860595703, -1.0669039487838745], + [6.811531066894531, -3.443608522415161], + [-4.237720489501953, 5.3708415031433105], + [2.351531982421875, 5.693382740020752], + [-1.9912941455841064, 0.41376611590385437], + [0.7132944464683533, -8.563371658325195], + [-6.392367839813232, 8.326568603515625], + [-5.093839168548584, 5.9631805419921875], + [-1.2645708322525024, 11.037370681762695], + [2.544677495956421, -4.462445259094238], + [1.7203294038772583, 4.709890365600586], + [-0.2903848886489868, -1.4485222101211548], + [-2.0892555713653564, 1.9210125207901], + [-3.337137460708618, 5.178560733795166], + [-3.8131706714630127, 0.8009659647941589], + [-1.4677528142929077, 12.135114669799805], + [0.9343333840370178, -7.767126083374023], + [-1.383490800857544, 1.2715132236480713], + [0.4897581934928894, -6.76717472076416], + [6.2078166007995605, -1.1974859237670898], + [-2.7549734115600586, -2.3429019451141357], + [2.9005229473114014, -5.211683750152588], + [0.770504891872406, -7.493045806884766], + [-0.9951676726341248, 9.656045913696289], + [1.4132764339447021, 4.7444915771484375], + [8.840409278869629, -2.7567756175994873], + [-5.076735973358154, -3.555668830871582], + [0.7063376903533936, -7.692157745361328], + [0.531303882598877, -6.942109107971191], + [1.8900659084320068, 0.6431498527526855], + [2.525151491165161, -3.9727985858917236], + [-4.165090560913086, -2.9919307231903076], + [-5.182310581207275, 4.752737045288086], + [0.8065177798271179, -8.639031410217285], + [-0.9911758899688721, -4.335576057434082], + [1.5549575090408325, -4.573099136352539], + [-3.5808632373809814, -1.427289605140686], + [2.2073848247528076, 3.6888034343719482], + [-3.757195234298706, 5.890982627868652], + [8.348051071166992, -2.4130678176879883], + [-3.252049207687378, -3.2063684463500977], + [-2.4945099353790283, -0.7092442512512207], + [3.5037360191345215, -0.12726658582687378], + [-0.34617680311203003, 8.275976181030273], + [0.47760146856307983, -5.982262134552002], + [-1.4787704944610596, 12.10126781463623], + [-0.2518249452114105, -2.245927333831787], + [0.14360088109970093, -4.397177219390869], + [1.5935261249542236, 5.490270137786865], + [5.32879114151001, 8.451569557189941], + [-1.1542168855667114, 11.511434555053711], + [0.6349624991416931, -1.082385540008545], + [-1.324083924293518, 1.00028657913208], + [-0.7460712790489197, 6.110072135925293], + [-0.46292316913604736, 9.898069381713867], + [5.543379783630371, -2.110137701034546], + [0.6180934906005859, -6.981985092163086], + [3.0158045291900635, 6.596045970916748], + [2.8656532764434814, -4.822233200073242], + [2.1315577030181885, 5.031327724456787], + [0.25879549980163574, -5.724085330963135], + [0.5750623345375061, -7.201805114746094], + [6.370800495147705, -1.4151359796524048], + [1.9131906032562256, 0.1379731297492981], + [-6.164088249206543, -0.8283637762069702], + [-1.5914521217346191, 1.378440260887146], + [2.4080379009246826, 4.9787187576293945], + [0.15578344464302063, -1.4439705610275269], + [6.92856502532959, -1.8293523788452148], + [2.465360164642334, -4.727253437042236], + [3.0141942501068115, -4.650862693786621], + [-1.3625404834747314, 4.664913654327393], + [-3.643126964569092, -1.0108228921890259], + [0.7367557883262634, -8.267388343811035], + [3.925523519515991, 7.192788124084473], + [8.888298034667969, -2.741508722305298], + [-4.069874286651611, -2.5263473987579346], + [8.515085220336914, -3.075753927230835], + [0.7521041631698608, -5.027408599853516], + [-2.425840139389038, -2.026812791824341], + [-0.286431223154068, -1.2425076961517334], + [0.6333234906196594, -8.154767990112305], + [0.6570976376533508, 9.61689567565918], + [1.7763326168060303, 2.292752981185913], + [-3.6501386165618896, 5.416710376739502], + [0.8916564583778381, -4.844826698303223], + [-1.7323366403579712, 1.6984564065933228], + [-3.9242377281188965, -1.552479863166809], + [-2.982928991317749, -2.639681816101074], + [-3.4860048294067383, -0.8910685181617737], + [7.187692642211914, -2.218315362930298], + [0.9331422448158264, -4.444085121154785], + [0.7112275958061218, -8.143577575683594], + [-2.731753349304199, -0.5643695592880249], + [-2.4302756786346436, -2.3649978637695312], + [2.097458600997925, -4.772915840148926], + [-1.7594144344329834, 0.4861682653427124], + [-3.1697561740875244, 1.9916085004806519], + [1.3655903339385986, 1.5525633096694946], + [-1.6530989408493042, 0.2886755168437958], + [-3.1665635108947754, 0.2702675461769104], + [-1.4035266637802124, -2.9075300693511963], + [-1.426145315170288, 11.993839263916016], + [-3.3450512886047363, -2.569949150085449], + [5.321371078491211, -2.6392951011657715], + [-1.9663223028182983, -0.062062088400125504], + [0.3505859971046448, 4.253326892852783], + [0.8376816511154175, -7.880596160888672], + [3.5996711254119873, -3.590837001800537], + [5.618701934814453, -1.1639180183410645], + [2.541598081588745, -4.467563629150391], + [3.20088267326355, 5.89561653137207], + [2.999922037124634, -4.957578659057617], + [-3.1811838150024414, -2.098024845123291], + [0.8720178008079529, -6.529865741729736], + [-1.2075186967849731, 0.04242464527487755], + [-2.960753917694092, -0.3990253806114197], + [2.814265489578247, -4.690211296081543], + [-0.045534826815128326, -3.5612542629241943], + [-1.397384524345398, 9.593720436096191], + [2.340480089187622, 3.688079595565796], + [-0.9209849238395691, -0.07304662466049194], + [-4.839470863342285, 1.5177299976348877], + [-0.4636470675468445, 9.749460220336914], + [2.872959852218628, 5.861423969268799], + [2.5797860622406006, 5.161436080932617], + [2.133690357208252, -4.253291130065918], + [0.8010293841362, -0.023835372179746628], + [-4.145878314971924, -1.3633860349655151], + [-1.5374209880828857, 1.63865327835083], + [6.1722211837768555, -1.53667414188385], + [2.629544973373413, -4.454747200012207], + [-4.011326789855957, -1.3318461179733276], + [4.575841903686523, -3.689033269882202], + [-4.423689365386963, -2.791238307952881], + [-1.8866724967956543, 0.9964659214019775], + [0.6856902837753296, -6.754829406738281], + [-1.0068575143814087, 11.479681968688965], + [0.3054376244544983, -5.979910373687744], + [-0.3416474759578705, 0.16952091455459595], + [-3.25590181350708, 6.1867170333862305], + [-0.6741397976875305, -1.6703397035598755], + [1.1389670372009277, -6.593141078948975], + [-4.02324104309082, 6.339776039123535], + [6.857766628265381, -3.013537645339966], + [-3.35219407081604, 5.60398006439209], + [-0.47932732105255127, -1.7601773738861084], + [-0.9714071154594421, 1.3381508588790894], + [-2.047250270843506, 1.93608558177948], + [-4.13569450378418, 6.542830467224121], + [-4.91936731338501, 5.428919315338135], + [-0.6028075218200684, 9.234315872192383], + [-1.0357553958892822, 10.65081787109375], + [0.6404940485954285, -8.36225700378418], + [-0.3254375159740448, 5.983038902282715], + [0.46565794944763184, -6.4433698654174805], + [-0.30517077445983887, 9.062644958496094], + [2.625981092453003, -4.530939102172852], + [-1.7411000728607178, 5.787936210632324], + [-5.549179553985596, 7.203544616699219], + [-1.7268953323364258, 1.91803777217865], + [0.7793958783149719, -0.15963274240493774], + [0.1502818465232849, -1.0347028970718384], + [2.4094297885894775, 0.6807836294174194], + [2.703794479370117, 4.405048847198486], + [1.8819109201431274, -5.428665637969971], + [0.9771855473518372, -0.54444420337677], + [-0.86484295129776, 10.245849609375], + [0.41824841499328613, -6.654139518737793], + [2.278264045715332, 0.723501980304718], + [2.2081918716430664, -5.331710338592529], + [-5.303412914276123, 4.379360198974609], + [-4.341598033905029, 5.767258644104004], + [2.159738540649414, 5.552844047546387], + [-3.8719146251678467, -2.6271674633026123], + [8.31467056274414, -2.8657662868499756], + [0.5322412848472595, -7.860187530517578], + [-0.6879134178161621, 10.296138763427734], + [-0.6994737982749939, 10.513542175292969], + [2.841108560562134, -4.678233623504639], + [-2.631819248199463, -2.0581214427948], + [-0.6753686666488647, 9.486217498779297], + [-1.5204538106918335, 12.059219360351562], + [2.4451065063476562, -5.523304462432861], + [7.647511959075928, -3.1389033794403076], + [0.6427304148674011, -8.15631103515625], + [2.1962931156158447, 4.972380638122559], + [-2.0462262630462646, 4.880915641784668], + [3.002530574798584, -4.683223724365234], + [-3.2640130519866943, 4.584918022155762], + [-4.3488898277282715, -3.5232577323913574], + [-1.8445219993591309, 1.1531490087509155], + [5.364644527435303, -1.2706058025360107], + [-5.4249091148376465, 6.916689872741699], + [3.344640016555786, 6.4354143142700195], + [-0.3841080069541931, -0.6879987120628357], + [1.099312424659729, 0.34184902906417847], + [1.1661020517349243, 6.180918216705322], + [2.47666597366333, -4.545320510864258], + [1.070597529411316, -0.08026689291000366], + [8.905976295471191, -3.3257951736450195], + [1.7712764739990234, 3.1994521617889404], + [0.4466663599014282, -6.2600789070129395], + [-1.9757206439971924, 1.8047893047332764], + [-0.17089247703552246, 7.989162445068359], + [-4.978610038757324, 5.727354049682617], + [-4.035577774047852, -2.0115807056427], + [-3.7455592155456543, -0.9426227807998657], + [-1.269185185432434, 10.853292465209961], + [1.093828797340393, -5.510799884796143], + [-1.886891484260559, -2.114992380142212], + [-4.735499382019043, 6.189877510070801], + [-5.764941215515137, 6.891901016235352], + [0.37761807441711426, -6.1922807693481445], + [-1.3150683641433716, -1.051156759262085], + [2.4425532817840576, -4.343642234802246], + [8.854303359985352, -3.157453775405884], + [-3.2357327938079834, -1.7301985025405884], + [2.3014018535614014, 5.993439197540283], + [-0.6378113031387329, 9.677597045898438], + [1.0688436031341553, -0.3512810170650482], + [0.46675580739974976, -5.507944583892822], + [2.2150228023529053, 0.9287205934524536], + [-0.4629107117652893, -1.126825213432312], + [-1.8134561777114868, -0.323194682598114], + [-0.3689405918121338, 10.005277633666992], + [-0.5505871176719666, 9.486994743347168], + [-1.1547863483428955, 10.931568145751953], + [0.04574649780988693, -0.871077299118042], + [-3.4999935626983643, -1.146751046180725], + [-1.804273247718811, 1.7734487056732178], + [-1.80289626121521, -1.2185087203979492], + [2.1567599773406982, 0.8181732296943665], + [-4.63689661026001, 4.15396785736084], + [-3.5466790199279785, -0.47007548809051514], + [-5.358966827392578, 6.986239433288574], + [-3.6761462688446045, 4.935037612915039], + [0.3082578182220459, -5.2496232986450195], + [-1.1851500272750854, 10.712925910949707], + [0.8012186884880066, -9.163131713867188], + [0.711489200592041, -0.5602214932441711], + [5.628386974334717, -1.4947357177734375], + [2.7195582389831543, -4.396156311035156], + [-4.760383605957031, -0.2913891673088074], + [-0.657810389995575, 9.78482437133789], + [-1.3201967477798462, 11.692741394042969], + [1.605736494064331, 2.0473837852478027], + [0.7277659773826599, -4.8593034744262695], + [-4.084561824798584, -2.2427337169647217], + [6.321537017822266, -3.3832664489746094], + [-3.1281704902648926, -2.5820584297180176], + [6.093010425567627, -3.3404316902160645], + [-4.479103088378906, -1.0786534547805786], + [-1.0297014713287354, 10.516144752502441], + [0.5549389123916626, -7.496440887451172], + [-4.797337532043457, -0.6678767204284668], + [-5.213570594787598, -1.005899429321289], + [0.7240187525749207, -6.925125598907471], + [-4.829850673675537, 6.118860244750977], + [0.38126665353775024, -6.565221786499023], + [2.6086883544921875, -4.33111572265625], + [-4.512819290161133, 6.558518886566162], + [0.42783766984939575, -7.5856146812438965], + [-0.4082532525062561, 9.77927017211914], + [-1.3040369749069214, 0.9052284955978394], + [-2.096788167953491, -0.5577202439308167], + [3.5805399417877197, -5.079153060913086], + [-3.2896430492401123, -1.6129902601242065], + [2.1974737644195557, 5.853185653686523], + [9.333775520324707, -2.7953503131866455], + [2.4988081455230713, -4.607065200805664], + [-1.9463801383972168, 2.5640270709991455], + [-0.37951013445854187, -1.2560328245162964], + [2.6300508975982666, -5.092618465423584], + [-0.27056580781936646, -2.2479469776153564], + [-3.3976569175720215, -1.0688375234603882], + [-4.3592658042907715, 7.18145751953125], + [-3.810153007507324, -2.814748525619507], + [0.7572051882743835, -0.7375068664550781], + [1.916862964630127, 5.6060380935668945], + [-1.9079344272613525, 2.2638015747070312], + [-5.136878490447998, 7.149044513702393], + [0.22294896841049194, -6.6249847412109375], + [-1.7811567783355713, 1.1038450002670288], + [-3.2531707286834717, -1.8235551118850708], + [-4.168826580047607, -3.3928680419921875], + [1.7687363624572754, 2.1672606468200684], + [2.6513068675994873, -4.399471282958984], + [2.6021058559417725, -5.158249855041504], + [-0.6432293057441711, 10.607354164123535], + [6.067428112030029, -3.011780261993408], + [2.148560047149658, -4.719150066375732], + [-3.3815999031066895, -1.326006293296814], + [-4.136268138885498, 6.885647773742676], + [2.4724369049072266, -4.05458927154541], + [-0.35605692863464355, 9.464774131774902], + [1.9534287452697754, 3.5048584938049316], + [6.3481125831604, -2.8056085109710693], + [-2.2126357555389404, 4.679162979125977], + [-1.6170889139175415, -2.515263319015503], + [0.3976864218711853, -7.14444637298584], + [-1.1297109127044678, 11.379759788513184], + [-0.5064644813537598, -1.1628113985061646], + [-0.9119420647621155, -0.6574333906173706], + [-2.8553507328033447, 6.128687381744385], + [1.9503908157348633, 5.697703838348389], + [3.0641841888427734, -4.7784504890441895], + [2.7949235439300537, -4.600627899169922], + [-4.5802083015441895, 3.9676191806793213], + [0.4879223108291626, -7.905785083770752], + [-3.1957149505615234, -1.1922274827957153], + [-1.196409821510315, 11.590557098388672], + [2.744309186935425, -4.360124111175537], + [-3.6470224857330322, -1.310529112815857], + [0.5144519209861755, -7.570751667022705], + [-2.228269338607788, 2.671942949295044], + [5.882278919219971, -1.0917102098464966], + [0.682918906211853, -6.464323043823242], + [2.755905866622925, -4.555170059204102], + [7.997405529022217, -3.1217806339263916], + [-3.352128267288208, -0.9235769510269165], + [0.6958484053611755, -0.8499571084976196], + [4.090643882751465, 6.777012825012207], + [-3.4903619289398193, -1.1736862659454346], + [-0.7782160043716431, 8.815716743469238], + [2.9446909427642822, -4.5043535232543945], + [8.40691089630127, -2.4932029247283936], + [1.9968698024749756, -4.103693962097168], + [-4.7268195152282715, 7.2087249755859375], + [2.3693344593048096, -4.39471435546875], + [0.3358708322048187, -5.532254219055176], + [-3.4801461696624756, -3.2561464309692383], + [-2.908088207244873, 3.0110063552856445], + [-1.116314172744751, 10.990167617797852], + [-5.146641731262207, 7.157332420349121], + [2.8758578300476074, -4.757624626159668], + [2.964240312576294, -4.4996867179870605], + [-3.52995228767395, -1.189802646636963], + [6.855034828186035, -2.759002923965454], + [0.5877435207366943, -7.389142990112305], + [0.3605545163154602, -7.381948947906494], + [-3.4228498935699463, -2.122680902481079], + [2.6295931339263916, -4.908178806304932], + [-5.02538537979126, -0.6726123690605164], + [7.497082233428955, -3.5863401889801025], + [-3.6341733932495117, -1.037805199623108], + [-1.6973164081573486, -2.868607759475708], + [6.704291820526123, -2.5230629444122314], + [8.13371753692627, -3.3068745136260986], + [2.211789131164551, 6.100557327270508], + [-3.973846673965454, -2.5011701583862305], + [5.649209499359131, -4.238245487213135], + [2.0741236209869385, 3.4624998569488525], + [-3.83840274810791, -1.929595947265625], + [-1.2660332918167114, 1.7148747444152832], + [0.74239182472229, -0.4049099087715149], + [-5.861746311187744, 7.645400047302246], + [0.3824477195739746, -5.947458267211914], + [6.139512538909912, -1.1080056428909302], + [0.8850622177124023, -0.6436771750450134], + [-1.1742233037948608, 11.49460220336914], + [0.680378794670105, -7.983895301818848], + [-2.965136766433716, 3.222057580947876], + [-4.759223461151123, -1.3307229280471802], + [8.948779106140137, -2.577443838119507], + [2.3355793952941895, -4.514581203460693], + [1.5345966815948486, -5.087657928466797], + [-5.436278343200684, 7.759037494659424], + [-1.9792001247406006, 1.6426626443862915], + [0.9858257174491882, -5.547691345214844], + [1.7145016193389893, 4.7673749923706055], + [7.049920082092285, -2.406663179397583], + [-2.927513599395752, -1.4595296382904053], + [3.1849312782287598, -4.955573558807373], + [-4.765201568603516, 6.703272342681885], + [2.0287275314331055, 5.994828224182129], + [0.1059780940413475, -4.432796478271484], + [-0.17390364408493042, -1.0703116655349731], + [-2.0826284885406494, 1.892382264137268], + [2.62809157371521, 6.693759918212891], + [-4.3700337409973145, -0.6511686444282532], + [-3.597313165664673, -1.1241024732589722], + [6.373241424560547, -3.1608941555023193], + [-1.842297911643982, -0.7692275047302246], + [-0.9497901797294617, 1.3900574445724487], + [1.3997478485107422, 5.6297688484191895], + [2.222066640853882, -5.183708190917969], + [-0.7947647571563721, 10.118721008300781], + [-1.1094512939453125, 11.15081787109375], + [-3.4226720333099365, -1.2857736349105835], + [2.7924392223358154, -4.581882476806641], + [-3.241450071334839, -1.5473148822784424], + [-4.151360034942627, 6.4916582107543945], + [-5.424673080444336, 6.580996513366699], + [0.4872448444366455, -5.452216148376465], + [-2.453375816345215, -0.8981351852416992], + [1.6661027669906616, 6.187694549560547], + [-1.4212604761123657, 11.912341117858887], + [0.598171055316925, -6.258876800537109], + [3.0517194271087646, 6.212586402893066], + [0.11264946311712265, -4.238945007324219], + [5.794488430023193, 8.746393203735352], + [1.5420520305633545, -6.579499244689941], + [-3.1871044635772705, -1.5815671682357788], + [0.4892922639846802, -5.846363067626953], + [4.1917405128479, 7.242589473724365], + [1.786208152770996, 1.9943856000900269], + [0.06673174351453781, -3.5088260173797607], + [-0.49261051416397095, 9.117386817932129], + [-0.6799340844154358, 10.500840187072754], + [0.2733965814113617, -4.828174114227295], + [-2.5274479389190674, 0.26637566089630127], + [2.706308126449585, 6.372453689575195], + [-2.2660088539123535, -2.009615659713745], + [3.8307340145111084, -3.148451566696167], + [-4.405946731567383, 1.4935401678085327], + [-1.9539012908935547, 1.9463146924972534], + [-0.9834179282188416, 10.739846229553223], + [-3.2396504878997803, 4.476673603057861], + [-5.438612461090088, 7.0037994384765625], + [-3.9935662746429443, 6.168661117553711], + [-3.2546989917755127, -1.1148885488510132], + [-4.963534355163574, 6.965394496917725], + [0.9439652562141418, -5.264773368835449], + [-0.8006826043128967, 11.021154403686523], + [-3.3344743251800537, 5.4870171546936035], + [-5.714733600616455, -0.7391709685325623], + [2.6158792972564697, 4.693292617797852], + [-3.312326669692993, 5.750514030456543], + [2.747175931930542, -4.691258430480957], + [8.786327362060547, -2.9122910499572754], + [2.028477907180786, 3.8534693717956543], + [-1.8314554691314697, 1.8597581386566162], + [0.21834415197372437, -6.567892551422119], + [-4.395205497741699, 6.51807975769043], + [0.23619723320007324, -4.974021911621094], + [-4.7375969886779785, -3.7711873054504395], + [-3.1684203147888184, -0.5471256375312805], + [-1.8971823453903198, 1.3379188776016235], + [2.6670591831207275, -4.5334062576293945], + [3.6329305171966553, 6.5861592292785645], + [0.7025722861289978, -5.8776936531066895], + [0.5291928648948669, -5.758519172668457], + [0.4277993440628052, -6.199324607849121], + [0.7041897773742676, -8.135810852050781], + [2.263061761856079, 0.6327377557754517], + [1.6128178834915161, 3.1134021282196045], + [-3.5552897453308105, -2.1791720390319824], + [-2.0385069847106934, 2.2204620838165283], + [-0.6272166967391968, 10.051025390625], + [7.402734756469727, -3.619290590286255], + [2.163971185684204, 3.6880905628204346], + [-1.3825994729995728, 12.119156837463379], + [7.660254001617432, -2.8681480884552], + [-3.694242000579834, -2.3216025829315186], + [7.201234817504883, -3.6062729358673096], + [0.6553073525428772, -7.658205032348633], + [2.392432928085327, 5.856000900268555], + [-3.9633352756500244, -2.9867732524871826], + [-3.3809971809387207, 5.783052444458008], + [-0.718070924282074, -1.4123884439468384], + [2.8319225311279297, -4.78038215637207], + [0.41435062885284424, -6.246767997741699], + [1.4219785928726196, 5.97810697555542], + [2.4163248538970947, -5.181382179260254], + [-1.0627566576004028, 10.49092960357666], + [-1.889615535736084, -1.5076204538345337], + [-3.9078762531280518, 4.920017242431641], + [5.896790981292725, -4.96952486038208], + [2.4983816146850586, -5.5303497314453125], + [1.3912360668182373, -0.2804417908191681], + [3.0059609413146973, 6.366022109985352], + [1.510022521018982, -4.3944902420043945], + [-4.079648971557617, -1.6038769483566284], + [0.5252416133880615, -5.394582748413086], + [-3.7005064487457275, -3.0447518825531006], + [-2.8654606342315674, 0.08615070581436157], + [-2.033905267715454, 0.4051365852355957], + [-3.629279375076294, -1.1501919031143188], + [-3.317978858947754, -1.1101164817810059], + [-0.9036905169487, 10.560142517089844], + [0.8909093141555786, 4.512422561645508], + [3.962056875228882, 6.695442199707031], + [-3.3024675846099854, -1.3194180727005005], + [-3.274243116378784, -0.8135241270065308], + [-3.563286066055298, -1.1988259553909302], + [6.668975353240967, -3.739288091659546], + [1.4116716384887695, -4.831667423248291], + [-2.7467291355133057, 4.427929878234863], + [-3.4219024181365967, -0.8246666193008423], + [2.9016737937927246, 6.300106048583984], + [-5.465297222137451, 7.003215312957764], + [-0.44392120838165283, 11.225996017456055], + [-3.9913275241851807, -0.8818886876106262], + [-2.142707109451294, 1.0625636577606201], + [-5.041957378387451, 6.8870038986206055], + [0.3878961205482483, -6.883152484893799], + [-1.0197685956954956, 11.129794120788574], + [4.4185051918029785, 7.189054489135742], + [-3.8594276905059814, -1.2939542531967163], + [-0.6147063970565796, 9.361388206481934], + [-2.01967453956604, 5.502898693084717], + [0.6974658966064453, -8.538553237915039], + [0.42016011476516724, -6.262310981750488], + [-0.5483986139297485, 6.424529075622559], + [2.218604326248169, 5.586485862731934], + [-1.1156469583511353, 9.956947326660156], + [1.1696808338165283, 4.841876983642578], + [-3.4287643432617188, -1.1717486381530762], + [2.739821434020996, -4.619482040405273], + [-4.261542320251465, -2.280795097351074], + [1.098558783531189, -7.501123428344727], + [7.005099296569824, -2.466935873031616], + [-1.3174370527267456, 11.46066951751709], + [-3.7200427055358887, -3.5912885665893555], + [-0.46390992403030396, -0.9203733801841736], + [-5.272545337677002, 4.698857307434082], + [0.7119972109794617, -8.121583938598633], + [-1.8440661430358887, -2.283822774887085], + [0.19071948528289795, -6.060075759887695], + [0.4829198718070984, 6.251185417175293], + [-0.9560953974723816, 9.693487167358398], + [-3.328232526779175, -1.3096764087677002], + [-0.7125774621963501, 10.305303573608398], + [-1.3160288333892822, -1.5261439085006714], + [2.8438735008239746, -4.782590866088867], + [2.631427764892578, -4.571454048156738], + [-0.7479314804077148, 10.105063438415527], + [-3.6336305141448975, 6.297370910644531], + [6.983371734619141, -3.8291985988616943], + [0.7305828928947449, -6.43812894821167], + [-4.888495445251465, 6.351074695587158], + [4.342894077301025, -4.385828971862793], + [0.6840205788612366, -6.7390360832214355], + [-1.8604815006256104, 1.8758761882781982], + [-1.82170832157135, -0.9468126893043518], + [-0.4527280330657959, 9.590725898742676], + [-1.067827820777893, 10.852884292602539], + [0.6432635188102722, -7.521549224853516], + [0.0012340769171714783, -3.850832223892212], + [-4.018905162811279, -0.7403081059455872], + [-0.8066051006317139, 9.200420379638672], + [-3.430684804916382, -1.725743293762207], + [1.45729398727417, 0.1797761470079422], + [4.011925220489502, 6.9420576095581055], + [7.697927474975586, -2.9475491046905518], + [2.1689956188201904, 0.38075751066207886], + [0.24804556369781494, -0.6751012802124023], + [2.0088250637054443, -4.308291435241699], + [-1.759176254272461, 0.6880469918251038], + [-4.138156890869141, 2.7827069759368896], + [-5.1080169677734375, -2.0671980381011963], + [-3.343949556350708, -1.030294418334961], + [0.5107564926147461, -7.332246780395508], + [6.223688125610352, -1.7742763757705688], + [-4.4080328941345215, -0.8062819838523865], + [3.7641260623931885, -3.9736294746398926], + [-3.6386847496032715, -0.7572180032730103], + [-3.4856951236724854, -1.2273472547531128], + [0.628840982913971, 0.39381611347198486], + [0.04093938320875168, -5.430085182189941], + [-0.15743231773376465, 7.588319301605225], + [7.777693271636963, -3.45691180229187], + [0.3536716103553772, -6.974058151245117], + [-0.05804754048585892, -4.4676923751831055], + [2.999868154525757, -4.839015007019043], + [-0.3030746579170227, 0.3327721059322357], + [3.0683791637420654, 6.4568071365356445], + [0.6623111963272095, -7.457292556762695], + [-4.309914588928223, -1.9971598386764526], + [0.2823028266429901, -4.646517753601074], + [2.5868723392486572, 5.1941070556640625], + [-5.284193992614746, -3.6607601642608643], + [-4.782888412475586, -1.8438822031021118], + [1.0845584869384766, -6.448892593383789], + [-0.9779725670814514, 10.97964859008789], + [-3.4176852703094482, -1.4689823389053345], + [0.40242093801498413, -7.3147053718566895], + [0.2397385835647583, -5.344278335571289], + [6.8884429931640625, -1.8133342266082764], + [-3.874474287033081, 6.150994777679443], + [-1.0649608373641968, 11.083837509155273], + [-1.9030952453613281, 1.8747023344039917], + [1.6994051933288574, -4.446035385131836], + [3.7641403675079346, 7.105986595153809], + [-0.14179176092147827, 8.622512817382812], + [0.8484346270561218, -4.945276260375977], + [-4.396294116973877, -0.3865910768508911], + [6.7636590003967285, -5.178097724914551], + [-0.677532970905304, 10.212961196899414], + [8.102882385253906, -2.4095659255981445], + [-1.4623318910598755, -0.5902200937271118], + [-3.337496280670166, 4.626361846923828], + [-5.871097564697266, 4.3155999183654785], + [2.361583948135376, -5.6000871658325195], + [1.1381490230560303, 0.662706196308136], + [-4.069711208343506, -0.3496572971343994], + [2.0024266242980957, 0.20666742324829102], + [5.5200724601745605, -1.2305258512496948], + [-2.7735722064971924, 2.713412046432495], + [-1.7399322986602783, -0.0893431305885315], + [-2.8983497619628906, 3.2072925567626953], + [4.82838773727417, -3.6077568531036377], + [5.796698093414307, -4.045286178588867], + [4.961343288421631, -3.3596105575561523], + [-3.9546396732330322, 4.80663537979126], + [-5.0034708976745605, 7.454745769500732], + [-1.555465817451477, 1.4553405046463013], + [-1.5162630081176758, 12.148185729980469], + [0.5775753855705261, -8.030652046203613], + [-4.2957072257995605, 5.6668596267700195], + [-4.22313117980957, -1.5444602966308594], + [1.2034244537353516, 4.66246223449707], + [-4.806523323059082, -0.48504042625427246], + [8.385725975036621, -3.2414238452911377], + [2.7967376708984375, -4.729228496551514], + [-1.6396806240081787, -2.537601947784424], + [1.8713430166244507, 5.865274906158447], + [2.8396551609039307, -4.8428826332092285], + [-3.645034074783325, -1.6825357675552368], + [2.10302734375, 5.474521636962891], + [2.2200591564178467, 5.426748752593994], + [-1.6400973796844482, 3.1631484031677246], + [4.637341022491455, 7.374751567840576], + [-1.7399184703826904, 1.4708428382873535], + [-0.25190800428390503, 7.36639928817749], + [0.7045037150382996, -6.1565470695495605], + [0.6883059740066528, -8.422584533691406], + [0.3064209818840027, -5.175637245178223], + [2.0017082691192627, 0.24658960103988647], + [-4.128781318664551, -1.9400960206985474], + [1.0839093923568726, -5.612583160400391], + [-0.21943870186805725, -1.3958295583724976], + [8.021167755126953, -3.2923316955566406], + [1.8260514736175537, 2.6385581493377686], + [-1.687598466873169, 3.26049542427063], + [-0.6437216997146606, 9.903975486755371], + [-1.4145511388778687, 6.078739643096924], + [-3.718890905380249, -1.2716366052627563], + [0.07556938380002975, 8.281973838806152], + [5.639123916625977, -1.2414050102233887], + [-1.2186301946640015, 10.977884292602539], + [-3.5282528400421143, -3.161515712738037], + [-0.718235433101654, 10.209341049194336], + [2.0377695560455322, 5.3698625564575195], + [3.83874249458313, 7.203157424926758], + [2.037134885787964, -4.3810553550720215], + [1.4056735038757324, -4.362196922302246], + [-3.772599220275879, -1.16006338596344], + [-4.453067779541016, 7.873715400695801], + [-0.14122623205184937, 2.589077949523926], + [0.6370250582695007, -6.322700500488281], + [-0.7882704138755798, 4.68073034286499], + [0.8115178346633911, -7.235439300537109], + [-3.686116933822632, -1.1824225187301636], + [4.019465923309326, 7.366764068603516], + [3.967458963394165, 6.849244594573975], + [-3.954693555831909, -2.8436529636383057], + [-4.920175075531006, 7.209284782409668], + [2.8849759101867676, -4.532283782958984], + [-3.9802896976470947, -1.0207844972610474], + [0.8415670990943909, -0.3870968818664551], + [4.365963459014893, 7.055753707885742], + [0.7158200144767761, -6.788874626159668], + [-3.7898755073547363, -2.3187625408172607], + [-0.8661104440689087, 10.198962211608887], + [-4.730982780456543, 6.3742594718933105], + [0.7231380343437195, -7.746660232543945], + [-3.8175504207611084, -1.125024437904358], + [-0.6390742659568787, 9.817614555358887], + [-0.018937237560749054, -5.465609550476074], + [-2.012739658355713, 2.143418312072754], + [-1.2049709558486938, -0.38585364818573], + [7.60610294342041, -1.9947513341903687], + [0.6884641051292419, -8.642961502075195], + [-4.679809093475342, 6.360042572021484], + [-4.377842426300049, -3.3281919956207275], + [-1.9701749086380005, 0.8571674227714539], + [1.7502045631408691, -5.344615459442139], + [1.165757179260254, 1.2096017599105835], + [-2.591829299926758, 0.256355881690979], + [-0.5219725966453552, 9.963064193725586], + [-0.2632564902305603, 9.553397178649902], + [-1.7406460046768188, 2.0423192977905273], + [-1.2273402214050293, 1.529461145401001], + [2.984360694885254, -4.21010684967041], + [0.6218093037605286, -7.693902969360352], + [-4.527316570281982, -0.9371592998504639], + [-1.9908473491668701, 1.461036205291748], + [-3.639204978942871, 5.784976482391357], + [-1.6856846809387207, 0.8018261194229126], + [-3.505628824234009, -0.9884303212165833], + [-0.2640257477760315, 9.012234687805176], + [0.4095454812049866, -7.3806071281433105], + [-4.065804481506348, 5.913416862487793], + [3.008601427078247, 6.337239742279053], + [6.475358009338379, 9.22910213470459], + [-0.09466607123613358, 8.247016906738281], + [-6.562166690826416, 8.899276733398438], + [6.1894211769104, -2.2592546939849854], + [1.0630329847335815, 0.14177262783050537], + [5.680107593536377, 8.698331832885742], + [-5.624017238616943, 7.619034767150879], + [-3.7071454524993896, -3.3258981704711914], + [0.4073280096054077, -7.167068004608154], + [-4.715294361114502, 5.890068054199219], + [3.780742883682251, 6.774115085601807], + [0.6300088167190552, -7.025795936584473], + [2.669389486312866, -5.06664514541626], + [-3.13558030128479, -1.6469378471374512], + [-5.161494731903076, 6.287125110626221], + [2.758378744125366, -4.722812175750732], + [0.9774418473243713, -5.355837821960449], + [-4.157520771026611, -0.9060275554656982], + [5.095328330993652, -1.1413233280181885], + [-2.807577610015869, -2.0932929515838623], + [-1.3922380208969116, 0.5383861064910889], + [-0.5916890501976013, 9.586095809936523], + [7.291924953460693, -3.715914726257324], + [-0.7514340877532959, 1.6781233549118042], + [-1.2019163370132446, 1.4783997535705566], + [7.507089138031006, -2.3123862743377686], + [-1.2694249153137207, 11.184236526489258], + [-0.5558040738105774, 8.17534065246582], + [0.5594771504402161, -4.71248722076416], + [-4.145875453948975, -1.708737850189209], + [-1.1099205017089844, -0.4917646646499634], + [-1.6462960243225098, 1.3215669393539429], + [-4.488964080810547, -1.0172916650772095], + [-2.4527416229248047, -1.0194987058639526], + [2.209998846054077, -6.283534049987793], + [6.233503818511963, -3.638723611831665], + [-0.05219540745019913, -1.1539069414138794], + [-1.2510343790054321, 10.914647102355957], + [-3.3985416889190674, -1.8165688514709473], + [7.269449710845947, -3.0859038829803467], + [-0.007839418947696686, -4.692998886108398], + [-2.8419032096862793, -0.6637527346611023], + [1.115033745765686, -5.379287242889404], + [2.7775678634643555, -4.325108528137207], + [2.2781994342803955, 4.317317008972168], + [2.803948163986206, -4.337523460388184], + [2.2507529258728027, -4.744015693664551], + [-1.0842539072036743, 10.786548614501953], + [-3.1961350440979004, -1.4675191640853882], + [2.6837103366851807, -5.34096622467041], + [-0.4068727493286133, 9.500350952148438], + [-3.5734617710113525, -1.4877985715866089], + [-4.613750457763672, 5.741064548492432], + [-2.1431660652160645, 1.8215608596801758], + [-1.554045557975769, 12.993171691894531], + [-3.3652756214141846, -0.7217257022857666], + [4.404292106628418, 7.504083633422852], + [-0.9921624660491943, 10.337227821350098], + [0.43439000844955444, -4.212767601013184], + [0.7012835144996643, -4.795018196105957], + [4.223378658294678, 7.347384929656982], + [-2.254180669784546, 2.1596086025238037], + [2.0026137828826904, -5.95085334777832], + [-3.428373336791992, 5.596257209777832], + [1.0347987413406372, 6.100286960601807], + [8.205373764038086, -2.7525386810302734], + [-3.640127420425415, -1.9080852270126343], + [3.1877925395965576, -5.00335168838501], + [-1.383684515953064, 1.4614543914794922], + [5.2249932289123535, -2.153946876525879], + [8.704455375671387, -2.772814989089966], + [0.4717664122581482, -5.090422630310059], + [-3.489502191543579, -2.2565910816192627], + [-3.5590169429779053, -1.7513959407806396], + [-2.1014652252197266, 2.3858072757720947], + [4.237559795379639, 7.253742218017578], + [7.718872547149658, -2.253981828689575], + [0.6689052581787109, -8.501824378967285], + [-4.5992207527160645, 2.2490720748901367], + [-1.445483922958374, 8.854562759399414], + [-1.0971816778182983, 10.57351303100586], + [-3.36391544342041, 5.18953800201416], + [0.338470995426178, -5.3698225021362305], + [-3.2494590282440186, 6.537142753601074], + [-3.6306352615356445, -1.0545939207077026], + [5.623052597045898, -1.2890630960464478], + [2.58026123046875, -4.849792957305908], + [-1.9355239868164062, 1.5190808773040771], + [0.7532159686088562, -9.529687881469727], + [2.8907225131988525, -4.618197441101074], + [-3.320762872695923, -1.289014220237732], + [6.671326160430908, -2.9546010494232178], + [-1.5930166244506836, 2.2413551807403564], + [1.8873307704925537, -5.982625484466553], + [3.397268772125244, -4.651881217956543], + [0.6252227425575256, -8.127490997314453], + [7.599064826965332, -2.9614524841308594], + [0.07541205734014511, -3.8273415565490723], + [0.4924868941307068, -7.428857803344727], + [-0.030414916574954987, -4.196280479431152], + [0.40402960777282715, -6.0424909591674805], + [-4.604687690734863, 6.22442102432251], + [1.9544808864593506, 1.545638918876648], + [-2.107356071472168, -0.2049911618232727], + [-0.6964923739433289, 10.525235176086426], + [-3.0265190601348877, -0.550334632396698], + [0.18139976263046265, -5.974824905395508], + [-2.5275166034698486, -1.8264387845993042], + [9.395204544067383, -2.890751838684082], + [-2.3897054195404053, -0.5673884153366089], + [7.410643100738525, -3.525566816329956], + [2.8499162197113037, -5.024330139160156], + [0.3747459650039673, -4.330004692077637], + [0.6618905663490295, -5.879453182220459], + [-4.432124614715576, 5.689086437225342], + [-1.53328275680542, 11.941804885864258], + [-1.2544715404510498, 10.78643798828125], + [-2.583002805709839, 2.692847728729248], + [1.407780408859253, -3.889064073562622], + [2.092562437057495, -4.211145401000977], + [1.7406120300292969, 4.714824199676514], + [-4.9581193923950195, 5.299892425537109], + [-4.785701274871826, -3.4689435958862305], + [3.2787861824035645, 6.635416030883789], + [-5.447514057159424, -0.6990631222724915], + [-1.2014000415802002, 9.41392993927002], + [-4.374353408813477, 5.843522548675537], + [0.8919952511787415, -5.041967868804932], + [-3.414278745651245, -2.032604217529297], + [-4.2952141761779785, -1.8306869268417358], + [2.147299289703369, 5.171679973602295], + [-2.0178332328796387, 1.6548892259597778], + [-3.017136812210083, -0.9902966022491455], + [-4.926839828491211, -1.1459180116653442], + [0.14101380109786987, 8.536599159240723], + [-0.9212812781333923, 11.017335891723633], + [-3.1068625450134277, -1.0768510103225708], + [-1.4803376197814941, 11.998470306396484], + [2.922372341156006, -4.709892749786377], + [-3.3430025577545166, -1.3259865045547485], + [-5.581206798553467, -0.8144692182540894], + [-1.7150214910507202, -1.1842238903045654], + [0.788673996925354, 2.2032759189605713], + [-4.463296890258789, 3.8994271755218506], + [0.765099823474884, -7.429062366485596], + [3.6341874599456787, 0.004693087190389633], + [2.3817217350006104, 6.138103485107422], + [4.2024827003479, 7.686426162719727], + [-2.205148935317993, 0.10310757160186768], + [0.7854841947555542, -5.480461120605469], + [1.6826744079589844, 5.196260452270508], + [0.761674702167511, -0.8480567932128906], + [0.3563454747200012, -6.759844779968262], + [-4.13970947265625, -2.736574411392212], + [-3.5191922187805176, 5.536942481994629], + [5.728297710418701, -1.3104416131973267], + [-3.84222149848938, -1.6608308553695679], + [-5.139108657836914, 6.041192531585693], + [2.3784079551696777, 6.192811489105225], + [0.49008965492248535, -7.1729841232299805], + [-2.748126745223999, -0.27694249153137207], + [-1.1832367181777954, 2.0889885425567627], + [0.6316004395484924, -8.1168794631958], + [-1.6999473571777344, 0.46102380752563477], + [0.0177798792719841, -4.057215213775635], + [-2.667710781097412, 4.3614726066589355], + [6.185497283935547, -2.3926074504852295], + [4.508514404296875, 7.432896614074707], + [-4.358630657196045, 4.972098350524902], + [-3.4973082542419434, 5.673135757446289], + [-1.9486570358276367, -2.0826356410980225], + [-4.9655985832214355, 6.732929229736328], + [-2.078037738800049, 1.3147709369659424], + [-2.467588186264038, -0.7733187675476074], + [2.467477321624756, 4.804283618927002], + [2.0651791095733643, -3.8445773124694824], + [-1.446317434310913, 12.073816299438477], + [-2.5348429679870605, -2.9680228233337402], + [-0.5094335675239563, 9.853593826293945], + [-1.7579396963119507, 1.5000171661376953], + [3.4390416145324707, -3.4563043117523193], + [-1.0561224222183228, -1.5436259508132935], + [-0.5941293835639954, 2.5655548572540283], + [-0.1875200867652893, 7.283298492431641], + [-4.428945541381836, 6.466639518737793], + [0.08675714582204819, -2.1332638263702393], + [0.4642896056175232, -4.727466583251953], + [0.049539320170879364, -1.21538245677948], + [0.9402666687965393, -0.056103963404893875], + [-3.203730821609497, -0.5710201263427734], + [0.5957315564155579, -7.7723259925842285], + [-5.275617599487305, -0.9794076085090637], + [2.642728567123413, -4.180857181549072], + [7.5497918128967285, -2.312328338623047], + [-5.248395919799805, 4.999953269958496], + [-1.270438313484192, 11.348511695861816], + [-1.358694076538086, 11.509965896606445], + [-3.8861653804779053, 5.513059139251709], + [-0.5366110801696777, 9.766325950622559], + [5.257380962371826, -3.5959346294403076], + [-3.3574464321136475, -1.341729998588562], + [-3.7040274143218994, -0.7483958005905151], + [-3.471337080001831, -1.2433269023895264], + [2.4731080532073975, 5.481343746185303], + [9.062963485717773, -2.798402786254883], + [0.16451188921928406, -4.9900407791137695], + [0.7839847207069397, -5.322150230407715], + [2.41414213180542, 6.579895496368408], + [7.880312442779541, -2.5858500003814697], + [-1.3628053665161133, 2.7173166275024414], + [1.0318864583969116, 0.40583062171936035], + [-2.4256274700164795, 5.811643600463867], + [0.4441457986831665, -6.373682022094727], + [0.5982617735862732, -8.631011962890625], + [0.7751139402389526, -6.857209205627441], + [2.816579580307007, -4.846436023712158], + [-1.8913490772247314, 2.3041627407073975], + [0.10908227413892746, -4.902595520019531], + [-0.7418835163116455, 9.989994049072266], + [3.0039849281311035, -4.769778251647949], + [4.918471813201904, 7.991132736206055], + [1.672509789466858, -5.003663063049316], + [0.52202308177948, -7.536850452423096], + [-0.8776101469993591, 10.447311401367188], + [-3.035303831100464, 3.3862953186035156], + [-1.8365050554275513, 0.3224230408668518], + [2.95540714263916, -5.3566694259643555], + [-0.15493279695510864, -2.0579957962036133], + [-0.9668598771095276, 0.6603025794029236], + [-3.1561081409454346, -1.1888396739959717], + [2.9689929485321045, -4.744050979614258], + [2.5205695629119873, -4.292252540588379], + [3.2029213905334473, -6.799312591552734], + [2.6936452388763428, -4.721444129943848], + [5.177565097808838, -4.741150379180908], + [4.260654926300049, -3.6263625621795654], + [-0.3580285310745239, -1.7945700883865356], + [1.971257209777832, -5.36306619644165], + [6.535520553588867, -1.6970456838607788], + [-1.1432653665542603, 10.898713111877441], + [2.0825328826904297, -3.0746023654937744], + [-2.16483998298645, -2.5900604724884033], + [-2.054976224899292, 2.0949463844299316], + [-4.333495616912842, 6.048115253448486], + [0.7111071348190308, -5.961933612823486], + [0.30202221870422363, -6.279568672180176], + [0.8498838543891907, -4.488020420074463], + [1.0841572284698486, -5.267496109008789], + [0.3818356394767761, -6.80625057220459], + [2.5448782444000244, -4.307651042938232], + [-3.7434940338134766, 4.6613993644714355], + [-5.154061794281006, -1.039194941520691], + [-1.7941759824752808, 2.2156918048858643], + [7.453135013580322, -2.501467704772949], + [-2.0650482177734375, 1.8325769901275635], + [-2.754431962966919, 2.620802164077759], + [8.140027046203613, -2.7967145442962646], + [0.14183050394058228, -4.498291492462158], + [2.1033008098602295, 5.9323577880859375], + [7.467098712921143, -2.3191721439361572], + [2.9094669818878174, -4.7736968994140625], + [-0.32151639461517334, 8.771318435668945], + [-3.8077986240386963, -1.4879740476608276], + [5.215597629547119, -2.550616979598999], + [2.84316086769104, -5.035431861877441], + [-3.8188812732696533, -1.7918621301651], + [-4.274174213409424, -3.666090965270996], + [-5.4347429275512695, -0.9306795001029968], + [-4.2170023918151855, -1.9204224348068237], + [-3.4810290336608887, -1.6048712730407715], + [3.5298264026641846, -5.8705878257751465], + [-3.461060047149658, -1.6045987606048584], + [-1.0245822668075562, 10.091364860534668], + [0.6924837231636047, -6.691518783569336], + [4.261643886566162, 7.582827568054199], + [-1.851465106010437, 1.0329675674438477], + [-4.564405918121338, -0.9649790525436401], + [0.42219293117523193, -7.31105899810791], + [7.835937023162842, -2.3529815673828125], + [0.6714455485343933, -8.555014610290527], + [0.8562356233596802, -4.9890289306640625], + [0.7488849759101868, -6.2521467208862305], + [1.616471529006958, -6.577544212341309], + [3.076692581176758, -4.7395195960998535], + [2.8342154026031494, -4.738715171813965], + [0.43930405378341675, -6.603432655334473], + [-2.0193982124328613, 0.3751710057258606], + [0.5641869902610779, -7.909509181976318], + [-4.447235107421875, -1.0361982583999634], + [9.19545841217041, -2.8622162342071533], + [0.8689802289009094, -6.9691009521484375], + [2.7968997955322266, -4.687862396240234], + [1.8529962301254272, 4.688986301422119], + [2.9392285346984863, -4.825002193450928], + [-1.9064851999282837, 1.6338902711868286], + [-1.726505994796753, 0.9792611598968506], + [1.8194890022277832, 5.001047134399414], + [-5.272647857666016, 6.730724811553955], + [8.223724365234375, -2.56809401512146], + [-0.768753170967102, 10.49758529663086], + [0.9882804751396179, -5.029546737670898], + [2.567652463912964, -4.1866302490234375], + [0.7003298997879028, -5.931457042694092], + [1.9836699962615967, 5.58200740814209], + [2.0568416118621826, 3.20186448097229], + [-3.0635883808135986, -0.19018208980560303], + [-0.3189852237701416, 8.980010032653809], + [-0.40714728832244873, -0.8381343483924866], + [-2.627337694168091, -0.7346738576889038], + [-1.1350982189178467, 10.716680526733398], + [-1.258412480354309, 10.941694259643555], + [1.848724365234375, 4.982110023498535], + [0.6765915751457214, -7.334242820739746], + [-3.5372660160064697, -2.385059118270874], + [-5.172818183898926, 7.273902893066406], + [-1.2032970190048218, -0.2566031813621521], + [1.7277331352233887, -4.719354152679443], + [4.918286323547363, -4.3896284103393555], + [-1.893733024597168, 1.5045245885849], + [1.0639948844909668, -4.147815704345703], + [7.661207675933838, -3.8886239528656006], + [1.3314340114593506, 3.62552809715271], + [7.333279132843018, -2.019543170928955], + [2.5465028285980225, -3.8538453578948975], + [-1.1085716485977173, 10.475357055664062], + [-1.2288007736206055, 0.08898553252220154], + [2.054765462875366, 5.159949779510498], + [5.977694988250732, -3.0219810009002686], + [3.120335817337036, -5.330898284912109], + [-4.734760761260986, -4.7030510902404785], + [-4.495729923248291, -1.0630422830581665], + [-1.4440771341323853, 0.6337321996688843], + [-3.256060838699341, 6.9054460525512695], + [1.4342806339263916, -4.69459342956543], + [-1.2704566717147827, 11.460000991821289], + [8.522850036621094, -2.673750162124634], + [-0.21018216013908386, -2.5688178539276123], + [6.228667259216309, -2.0693132877349854], + [0.4003337323665619, -0.7553792595863342], + [-5.744008541107178, 7.950336456298828], + [-0.5725004076957703, 9.348790168762207], + [0.6871570944786072, -6.256539821624756], + [2.408512830734253, -5.211581230163574], + [0.04164537042379379, -1.0800789594650269], + [-3.1116509437561035, -1.821889042854309], + [0.03701763600111008, 0.9304193258285522], + [0.9120869040489197, -5.75579833984375], + [5.418732166290283, 8.299318313598633], + [0.6445502042770386, -6.3087382316589355], + [2.7921864986419678, -4.420065879821777], + [-0.84759122133255, 10.315019607543945], + [0.6299359202384949, 3.551922082901001], + [7.650575160980225, -2.6539723873138428], + [-0.5146075487136841, -2.8070085048675537], + [-3.6959102153778076, -1.2225323915481567], + [2.467752456665039, -4.822261333465576], + [0.4456477165222168, -0.4837977886199951], + [-3.9256036281585693, -2.9563400745391846], + [4.940016746520996, -3.5354435443878174], + [0.28566503524780273, -5.918953895568848], + [-4.844868183135986, -3.0392415523529053], + [0.41105085611343384, -5.240467548370361], + [-4.413665294647217, 6.382882118225098], + [1.8979623317718506, -5.026295185089111], + [-3.7733371257781982, -1.1881896257400513], + [-3.6896679401397705, -0.7057653665542603], + [-4.019920349121094, 6.397743225097656], + [-1.3393676280975342, 11.630910873413086], + [8.479111671447754, -2.5447990894317627], + [-1.917119026184082, 2.2353081703186035], + [-3.531756639480591, -2.195042848587036], + [-4.776066303253174, -3.366039514541626], + [0.8063373565673828, -7.89490270614624], + [1.5618953704833984, -4.076120853424072], + [-5.3793511390686035, -0.7761455774307251], + [0.6112458109855652, -0.5333073139190674], + [5.7711358070373535, -1.807239294052124], + [0.41706323623657227, -5.017607688903809], + [4.087813854217529, 7.159675121307373], + [-3.6180999279022217, -2.4679720401763916], + [2.0737054347991943, 0.20099738240242004], + [2.2431793212890625, -4.423424243927002], + [-2.5029196739196777, -0.26498281955718994], + [0.013379327952861786, -4.1436767578125], + [2.6001741886138916, -4.4876298904418945], + [-1.585493803024292, -0.5963743925094604], + [-3.9781510829925537, -1.502672791481018], + [-3.760833978652954, -1.9506462812423706], + [-4.596171855926514, -0.8661056756973267], + [2.2928528785705566, -5.233158111572266], + [0.8092944622039795, -7.060957908630371], + [2.1751015186309814, 5.340346336364746], + [1.6267259120941162, -5.2975053787231445], + [-1.2108020782470703, 11.389976501464844], + [-4.059359550476074, 6.29646635055542], + [8.354569435119629, -3.1852548122406006], + [0.12200304120779037, -4.764412879943848], + [-1.0038100481033325, 10.742057800292969], + [0.5396217107772827, -7.319463729858398], + [-3.8929636478424072, -1.4616507291793823], + [-1.3283883333206177, 11.752351760864258], + [-4.383447170257568, -1.4493660926818848], + [0.6165237426757812, -8.363649368286133], + [1.614646077156067, -5.858205318450928], + [0.3441298007965088, -1.1792502403259277], + [-1.3317461013793945, 10.947622299194336], + [-2.020625114440918, 0.37700626254081726], + [-3.9741575717926025, 2.400010824203491], + [-0.2246227264404297, -1.6326287984848022], + [-5.449243068695068, -1.1859833002090454], + [-3.2744905948638916, -1.256513237953186], + [-3.7710952758789062, -1.2584208250045776], + [-1.775578498840332, -1.3143779039382935], + [-1.9523006677627563, 0.8301166296005249], + [6.270126819610596, -1.6652514934539795], + [-3.6764981746673584, -1.536037802696228], + [-0.07761908322572708, -1.3995088338851929], + [0.3304048180580139, -5.691255569458008], + [-4.635142803192139, -3.134481430053711], + [-5.018896102905273, 6.166820526123047], + [7.0271124839782715, -2.223534345626831], + [1.0201014280319214, -5.387802600860596], + [2.901012659072876, -4.68056583404541], + [-1.013276219367981, 11.064979553222656], + [-5.040831565856934, 6.77902889251709], + [-4.750685214996338, 5.125614166259766], + [-0.4529969096183777, 9.267311096191406], + [-0.02126298099756241, -5.57453727722168], + [4.114923477172852, -0.8387758135795593], + [-2.9733386039733887, -1.0764237642288208], + [0.9085658192634583, -6.055011749267578], + [-3.8643434047698975, -1.5038400888442993], + [-4.198605537414551, 7.008903503417969], + [0.5139276385307312, -7.468961238861084], + [-1.429208517074585, -2.8561501502990723], + [-4.554378032684326, -0.6387653350830078], + [-4.052943706512451, 5.730277061462402], + [2.3049275875091553, -6.227687835693359], + [7.458820819854736, -1.9636515378952026], + [-2.596799612045288, -0.8855730295181274], + [0.7370731830596924, -2.987147092819214], + [6.90427827835083, -4.702419281005859], + [6.645511150360107, -1.2986449003219604], + [-0.14111146330833435, -3.379185438156128], + [7.60739278793335, -2.85432505607605], + [-0.02867460995912552, -2.2520737648010254], + [0.5702352523803711, -8.286218643188477], + [-4.296527862548828, 5.331692218780518], + [-4.955595016479492, 1.4676501750946045], + [0.19192275404930115, -5.52686882019043], + [-1.9508683681488037, -0.7647160291671753], + [1.1224966049194336, -7.242844581604004], + [1.2854151725769043, -0.2141411304473877], + [-3.001497507095337, -1.1544431447982788], + [-1.5661028623580933, 1.3181954622268677], + [-3.985280990600586, -0.6500893831253052], + [-4.142200946807861, -2.8140575885772705], + [1.9835357666015625, 5.102033615112305], + [2.9061472415924072, -4.725333213806152], + [0.2680020332336426, -4.763935089111328], + [0.6938478946685791, -8.081741333007812], + [-3.6541736125946045, -2.0492186546325684], + [-4.519424915313721, -3.345708131790161], + [0.6304672956466675, -7.253317356109619], + [5.028192520141602, 7.961479187011719], + [-3.710731267929077, -1.0102874040603638], + [-3.6472232341766357, 4.240264892578125], + [6.5834832191467285, -1.7263736724853516], + [-0.9551934003829956, -0.8608474731445312], + [-1.3224884271621704, 11.559192657470703], + [7.8738694190979, -3.1756958961486816], + [2.571300745010376, -4.534889221191406], + [-4.344648361206055, 4.534450531005859], + [1.0584251880645752, -5.990638732910156], + [0.5917039513587952, -4.4999308586120605], + [-1.9507982730865479, 1.5989643335342407], + [0.9856156706809998, -5.7356977462768555], + [1.889817476272583, -5.439295768737793], + [-1.141889214515686, 11.300724983215332], + [4.760787487030029, 7.490164756774902], + [10.406937599182129, -3.1228091716766357], + [-0.640849769115448, -0.40987375378608704], + [-1.181381344795227, 9.422271728515625], + [-6.199835300445557, 4.780525207519531], + [2.670063018798828, -4.653385162353516], + [-2.3850390911102295, 2.4162702560424805], + [-5.249326229095459, 7.445459842681885], + [-1.8305468559265137, -0.2520720958709717], + [-3.407592535018921, -3.251716136932373], + [-3.385298013687134, -1.6305309534072876], + [3.0297672748565674, -5.0842695236206055], + [-1.1366909742355347, 10.580320358276367], + [0.6015251874923706, -5.184541702270508], + [-1.9357823133468628, 1.7689738273620605], + [-2.6575968265533447, 2.7271885871887207], + [0.5399792194366455, -6.838956832885742], + [-1.2064887285232544, -2.8758656978607178], + [3.8807122707366943, 6.8805999755859375], + [4.439030170440674, 7.499536037445068], + [-2.0334854125976562, 1.5158627033233643], + [0.7052429914474487, -8.72846508026123], + [0.5577803254127502, -5.078509330749512], + [-4.3345561027526855, -2.3510677814483643], + [-3.8620407581329346, -1.8840893507003784], + [-3.807204008102417, -1.2318888902664185], + [-4.000217914581299, -1.0770457983016968], + [7.738532543182373, -2.4626049995422363], + [-1.8614078760147095, 0.40572941303253174], + [-4.270803451538086, 6.17603874206543], + [-1.7458579540252686, 2.343815565109253], + [4.886562824249268, 7.783147811889648], + [0.615522563457489, -5.906831741333008], + [-4.68020486831665, -1.1732558012008667], + [-3.8750360012054443, -1.01560640335083], + [-3.423825740814209, -2.417022466659546], + [-0.9567270874977112, 10.65530014038086], + [-1.3386435508728027, 11.650897979736328], + [1.0506601333618164, -4.844522953033447], + [-1.0058441162109375, 10.481886863708496], + [2.339228391647339, -5.3996076583862305], + [-3.2793474197387695, -1.8892425298690796], + [0.6473513841629028, -8.574141502380371], + [-4.654837608337402, -0.483434796333313], + [-1.0065566301345825, 10.92404556274414], + [0.5218607783317566, -7.738174915313721], + [0.7620505690574646, -9.24477767944336], + [5.271214485168457, 8.127243041992188], + [-2.1252269744873047, 1.438308835029602], + [6.597534656524658, -1.8951823711395264], + [1.7105615139007568, 1.2298303842544556], + [-2.3434014320373535, -0.8378727436065674], + [-3.332834005355835, -1.0786755084991455], + [2.07749342918396, -3.790179491043091], + [-4.224462509155273, -3.4067323207855225], + [-4.471821308135986, -0.1162824034690857], + [2.124896287918091, 1.03762686252594], + [0.4671107530593872, -7.310742378234863], + [5.849602222442627, -1.2268733978271484], + [0.3738346993923187, -0.7649999260902405], + [-4.3596343994140625, 2.974884033203125], + [-5.742743968963623, 7.537944793701172], + [1.0693143606185913, 0.005718942731618881], + [1.7836527824401855, 5.667908191680908], + [-0.5254055857658386, -3.2659313678741455], + [-1.9416788816452026, 1.50567626953125], + [-1.6022491455078125, 1.2758280038833618], + [-2.5453097820281982, -1.4421247243881226], + [2.113628625869751, 5.656461715698242], + [0.22534191608428955, -6.166461944580078], + [-2.450946092605591, 0.3384183645248413], + [-4.326413631439209, -3.1974241733551025], + [-0.756949245929718, -0.8611451387405396], + [-2.886188268661499, 4.453798294067383], + [1.4073680639266968, -5.643813610076904], + [0.38894951343536377, -7.363256931304932], + [0.22800785303115845, -0.9136961102485657], + [-2.8144962787628174, 5.900792121887207], + [3.5804765224456787, -3.327307939529419], + [-4.602743625640869, -2.0555808544158936], + [1.2975730895996094, -0.2862728238105774], + [2.5903525352478027, -4.650203704833984], + [5.701968193054199, -1.1352735757827759], + [-4.763011932373047, 5.878974437713623], + [2.046673536300659, 1.480216145515442], + [0.6909129023551941, -7.5729570388793945], + [-3.5994083881378174, -0.2516254186630249], + [5.974721431732178, -2.003547191619873], + [0.7095513939857483, -6.766451358795166], + [-2.0038325786590576, 2.5814568996429443], + [7.477638244628906, -2.657742500305176], + [-1.8518085479736328, 1.6273092031478882], + [0.3889343738555908, -5.589045524597168], + [3.967724084854126, -3.9485013484954834], + [6.7150559425354, -1.9405580759048462], + [-1.1322424411773682, 10.148204803466797], + [0.668088972568512, -0.6689552068710327], + [-1.610693335533142, 5.831051826477051], + [-0.5730378031730652, 9.790456771850586], + [2.1555144786834717, 5.652797222137451], + [-3.59560489654541, -1.8544769287109375], + [-4.80220365524292, 5.629707336425781], + [0.5582842230796814, -5.264433860778809], + [2.06439471244812, 5.2985687255859375], + [2.467693328857422, 6.154388427734375], + [0.6752880215644836, -9.137801170349121], + [2.223395586013794, -4.5664896965026855], + [5.574803829193115, -4.07586669921875], + [-2.776521921157837, 2.810680866241455], + [-4.672845840454102, 6.573309898376465], + [-1.2542513608932495, 11.092568397521973], + [-2.724670171737671, 2.864605665206909], + [-0.8088918328285217, 10.377639770507812], + [2.483164072036743, -4.405496597290039], + [2.984118700027466, -4.6796770095825195], + [1.7984304428100586, 5.730982303619385], + [-0.742997407913208, 10.101017951965332], + [4.479522228240967, 7.7821946144104], + [1.1656290292739868, -7.464023590087891], + [-0.22040057182312012, -1.4558051824569702], + [-0.8969915509223938, 10.650039672851562], + [-4.536688327789307, -0.9130849838256836], + [-5.230088233947754, 6.725420951843262], + [-1.1670703887939453, 11.515661239624023], + [3.851400136947632, -4.007905960083008], + [-4.388132572174072, 3.7765393257141113], + [8.0877685546875, -3.0508501529693604], + [9.009233474731445, -2.717345714569092], + [0.28735584020614624, -5.433618545532227], + [-3.936879873275757, 4.446867942810059], + [7.673009872436523, -3.273829698562622], + [2.8016364574432373, -4.331891059875488], + [2.2823235988616943, -3.870035409927368], + [1.6362805366516113, 2.044843912124634], + [-2.68332839012146, 2.7663938999176025], + [0.6395357847213745, -6.200947284698486], + [-4.10515022277832, -3.2634987831115723], + [-4.595905780792236, -1.9390300512313843], + [-2.022822141647339, -1.6136720180511475], + [1.9250378608703613, 3.1013591289520264], + [-1.7705154418945312, 1.5269955396652222], + [2.287777900695801, -4.820770740509033], + [0.4809567332267761, -5.748424053192139], + [0.8566232323646545, -7.249251365661621], + [2.0575473308563232, 5.881163120269775], + [1.8363591432571411, -5.307697296142578], + [-0.31103724241256714, 9.737678527832031], + [-1.2281103134155273, 11.235633850097656], + [2.7622482776641846, -4.623607158660889], + [0.458747923374176, -6.7248311042785645], + [1.4939680099487305, -4.74330472946167], + [-0.5327712297439575, -1.6628934144973755], + [-2.4802589416503906, -2.8208162784576416], + [-2.06424880027771, 2.5610148906707764], + [0.6691703200340271, -7.3516316413879395], + [1.3491647243499756, -5.64301872253418], + [3.181223154067993, -4.954713821411133], + [0.3466532826423645, -6.989910125732422], + [0.6895995736122131, -9.137139320373535], + [-3.9059078693389893, -2.163020610809326], + [-3.8859317302703857, -2.1463756561279297], + [-1.4348564147949219, 11.900501251220703], + [-3.6899282932281494, -0.9208820462226868], + [-1.4163976907730103, -1.571649432182312], + [-1.961732029914856, -4.31840705871582], + [-3.2909533977508545, -1.3420226573944092], + [8.793059349060059, -3.2904226779937744], + [-4.699029922485352, 6.849211692810059], + [1.373927354812622, 0.44345566630363464], + [-5.15149450302124, 6.80804443359375], + [2.986931085586548, -4.826711177825928], + [-3.8250491619110107, -4.1047868728637695], + [4.95473575592041, 7.666748046875], + [-4.177866458892822, -1.3226491212844849], + [-1.007409930229187, -0.5648977160453796], + [0.32688039541244507, -4.927457332611084], + [2.794423818588257, -4.532291889190674], + [-4.536776542663574, -2.498547077178955], + [-4.10513973236084, -3.4898393154144287], + [0.9621489644050598, -5.049510955810547], + [0.4452108144760132, 0.35038357973098755], + [0.5812875032424927, -8.093367576599121], + [-1.054010272026062, 10.647008895874023], + [0.39247122406959534, -3.81606388092041], + [0.691552460193634, -8.288572311401367], + [6.110780239105225, -3.6963789463043213], + [2.8484442234039307, 6.279165744781494], + [-4.629639148712158, 7.044255256652832], + [0.1207115575671196, -2.499689817428589], + [2.9659626483917236, -4.833016395568848], + [-4.425482273101807, -1.908347249031067], + [8.427648544311523, -3.0509355068206787], + [-3.4871978759765625, -1.4430999755859375], + [1.838507890701294, 3.741044759750366], + [0.6565821766853333, -5.532985210418701], + [-2.6029980182647705, 2.9491829872131348], + [1.56046462059021, -5.828007698059082], + [0.6923328638076782, -7.240191459655762], + [-1.780920147895813, 1.1216953992843628], + [-3.515294313430786, -0.8139481544494629], + [0.6830773949623108, -8.672840118408203], + [3.5895187854766846, 6.9969024658203125], + [-3.9926538467407227, 1.1365326642990112], + [-1.2872822284698486, 1.0281167030334473], + [1.0681082010269165, -5.485471725463867], + [-3.2180657386779785, -2.042684555053711], + [3.9669134616851807, 6.501654624938965], + [-4.09097957611084, 4.092312812805176], + [-3.961268186569214, -2.2535595893859863], + [0.7563794255256653, -9.668649673461914], + [1.8430460691452026, 0.43797123432159424], + [9.467047691345215, -2.8335301876068115], + [-3.3178985118865967, -2.2852230072021484], + [-5.410437107086182, -0.9096404314041138], + [-3.720956802368164, -0.575574517250061], + [-0.188504159450531, 8.846345901489258], + [-1.120696783065796, 11.090149879455566], + [-3.0911471843719482, -0.7556540369987488], + [0.05012514442205429, -4.62680721282959], + [7.10446310043335, -3.114488363265991], + [-4.052740573883057, -1.3894020318984985], + [-3.522420883178711, -1.345733880996704], + [-1.2784980535507202, 1.224307894706726], + [-0.3168204426765442, 8.539461135864258], + [-1.8690636157989502, 0.38375478982925415], + [4.980576992034912, 7.85044527053833], + [-4.001692295074463, 0.28401803970336914], + [-3.5377097129821777, -3.3803324699401855], + [-4.238801002502441, -2.1622955799102783], + [0.7357292771339417, -9.01077938079834], + [8.327265739440918, -3.2956430912017822], + [2.3495917320251465, -4.547758102416992], + [0.07743852585554123, -6.3524041175842285], + [-5.326287746429443, 4.600552558898926], + [-4.903400421142578, 7.165937900543213], + [1.9803059101104736, 0.8133021593093872], + [-3.8457915782928467, -2.430812120437622], + [9.538398742675781, -2.879249334335327], + [-2.9117071628570557, -0.623816192150116], + [-1.3504966497421265, 11.435420989990234], + [-2.320673942565918, 0.42709881067276], + [3.817868709564209, -4.86679744720459], + [2.9208080768585205, 6.537450313568115], + [2.6696255207061768, -4.661073684692383], + [0.5326928496360779, -7.11271333694458], + [1.3372197151184082, -6.12339973449707], + [-1.1408556699752808, 0.6744670867919922], + [-2.0485079288482666, 1.80312979221344], + [0.293038934469223, -5.162899494171143], + [7.078818321228027, -3.6583330631256104], + [0.8585334420204163, -6.6114935874938965], + [6.135349273681641, 8.977463722229004], + [-4.012543678283691, -1.099435567855835], + [1.691673755645752, -4.688215255737305], + [0.19125080108642578, 9.194822311401367], + [0.3659136891365051, -6.527853488922119], + [-1.1089661121368408, -0.9172344207763672], + [-3.386885166168213, -1.5376627445220947], + [-0.9834100604057312, 10.791942596435547], + [6.811558246612549, -1.8848975896835327], + [0.4886883497238159, 5.847752571105957], + [9.447758674621582, -2.975774049758911], + [4.171826362609863, 7.400180816650391], + [-0.31682974100112915, 7.550800800323486], + [0.4614192247390747, -7.1710591316223145], + [-0.5823870301246643, 9.227546691894531], + [0.5307785868644714, -4.819634437561035], + [8.423836708068848, -2.696737766265869], + [-3.362687349319458, -2.5573716163635254], + [-4.339430332183838, 5.22074031829834], + [0.024015121161937714, -4.0305047035217285], + [-4.5710129737854, -4.520861625671387], + [0.5778000950813293, -8.197714805603027], + [2.1527767181396484, -4.780453681945801], + [6.950138092041016, -2.7661705017089844], + [-0.1570994257926941, -1.6579228639602661], + [-4.89763069152832, 4.958528995513916], + [0.9064536094665527, -4.1429338455200195], + [1.8405230045318604, -5.034920692443848], + [7.321367263793945, -4.241677284240723], + [0.5603556632995605, -7.3685760498046875], + [-2.6980841159820557, 2.762834072113037], + [-3.4936459064483643, -0.5950077772140503], + [5.276587009429932, 8.197942733764648], + [-1.9050586223602295, 0.8706216216087341], + [2.8835830688476562, -4.854461669921875], + [0.06036867946386337, -4.242675304412842], + [-1.0872451066970825, 9.865425109863281], + [-2.722482442855835, -2.0090959072113037], + [2.7586512565612793, 6.340806007385254], + [2.144015073776245, -3.624709129333496], + [-2.794351816177368, 3.0265040397644043], + [0.013309173285961151, 7.794987201690674], + [0.598227322101593, -1.2328009605407715], + [-0.8496749401092529, 10.196540832519531], + [5.823660373687744, -1.1010392904281616], + [-1.9620007276535034, 5.969255447387695], + [7.303683757781982, -2.8601863384246826], + [8.756793022155762, -2.706942558288574], + [-3.397580146789551, -2.117445230484009], + [5.520729064941406, -4.08186149597168], + [0.1712193489074707, -4.57260799407959], + [-5.888748645782471, 4.73637056350708], + [-3.955984592437744, -2.4944560527801514], + [3.241132974624634, -5.196632385253906], + [1.6833162307739258, 3.8188416957855225], + [0.4439327120780945, -5.094840049743652], + [-1.0326604843139648, 10.88437271118164], + [0.010089926421642303, 7.766957759857178], + [2.3311026096343994, 4.86281681060791], + [-0.5441851615905762, -2.7749722003936768], + [-0.7477712035179138, -2.822913408279419], + [-3.3687446117401123, -1.5449293851852417], + [5.563721656799316, -1.6277810335159302], + [-0.38448846340179443, 9.883840560913086], + [0.7485310435295105, -9.68968391418457], + [1.6029443740844727, -4.661279201507568], + [-3.8867528438568115, 5.7828216552734375], + [1.1750352382659912, -6.753626823425293], + [-4.245737552642822, 6.0585832595825195], + [-2.4061615467071533, -0.24581468105316162], + [7.485186576843262, -2.2908475399017334], + [-4.496907711029053, -1.5127464532852173], + [0.7426850199699402, -8.835906028747559], + [2.7091875076293945, -3.758544683456421], + [-3.254152536392212, -1.4094101190567017], + [1.5731732845306396, -6.0276312828063965], + [-0.6335405707359314, 9.458812713623047], + [-0.38943591713905334, -1.0533250570297241], + [-3.143507242202759, -1.628213882446289], + [-3.0655627250671387, -2.8745484352111816], + [-3.9851772785186768, -3.0749013423919678], + [2.889678716659546, -4.540185451507568], + [-4.189736366271973, 5.115339756011963], + [0.7024021744728088, 0.08126339316368103], + [0.7422580122947693, -8.458093643188477], + [-0.3485909104347229, 9.397278785705566], + [-4.259067058563232, -0.7701616287231445], + [-5.383388042449951, -0.6781266927719116], + [-1.844058632850647, 1.1106170415878296], + [0.4875642657279968, -6.1075029373168945], + [-1.8021291494369507, 0.6222831010818481], + [-1.8121488094329834, 2.1187238693237305], + [-2.611564874649048, 6.033006191253662], + [2.725717544555664, -4.266842365264893], + [-3.8075854778289795, 6.6682586669921875], + [-4.615025997161865, -3.59686541557312], + [-1.3321897983551025, 1.7788749933242798], + [-2.351907253265381, -0.9449427723884583], + [4.268524169921875, -0.23570051789283752], + [-1.2988394498825073, 11.340407371520996], + [-4.591098785400391, -1.1889270544052124], + [-2.105286121368408, 0.6368311047554016], + [-0.23646759986877441, -0.24964867532253265], + [-1.8558839559555054, 1.7013685703277588], + [-1.487451434135437, 1.2426104545593262], + [-3.806767225265503, 5.91323184967041], + [2.2985658645629883, 5.530028343200684], + [-3.2278387546539307, 6.697840690612793], + [0.2637368440628052, -5.211846351623535], + [-2.7795045375823975, -1.0600022077560425], + [0.6480738520622253, -8.716630935668945], + [7.303502559661865, -2.490666151046753], + [-0.1978226900100708, 9.41595458984375], + [0.8071001768112183, -6.827888488769531], + [-3.8650705814361572, -1.1473937034606934], + [0.6436603665351868, -0.5326224565505981], + [7.541057586669922, -2.055335760116577], + [-5.8156867027282715, 7.276210784912109], + [1.8656690120697021, 0.6645486354827881], + [0.3606998324394226, -5.690281391143799], + [1.9355132579803467, -4.200340270996094], + [-2.742135763168335, 5.700888156890869], + [-2.0538253784179688, 0.668892502784729], + [3.097461462020874, -4.827230453491211], + [-2.90791916847229, -1.769088625907898], + [-0.9189329743385315, 6.0484795570373535], + [4.070932865142822, 7.067114353179932], + [-0.6289725303649902, 9.493133544921875], + [0.20657938718795776, -6.063155174255371], + [-1.19209623336792, 11.054689407348633], + [-4.478949546813965, 6.254931449890137], + [-3.220932722091675, -1.4512704610824585], + [-0.9784970879554749, 6.242856979370117], + [-4.49696683883667, 5.84617280960083], + [1.4390075206756592, -5.917533874511719], + [-3.1384122371673584, -0.8852778077125549], + [2.4212725162506104, -5.419529914855957], + [2.238637924194336, 5.528408050537109], + [2.300363779067993, -5.94504451751709], + [1.9274625778198242, 5.357112884521484], + [2.717397689819336, -4.250298500061035], + [-3.7318499088287354, -2.6485095024108887], + [-3.2161777019500732, -1.570544958114624], + [0.511128842830658, -6.127227306365967], + [-0.624943733215332, -1.1139857769012451], + [2.747514486312866, -4.570390701293945], + [-3.430765390396118, -0.26982414722442627], + [9.25701904296875, -2.9256105422973633], + [-4.457231521606445, -1.4027010202407837], + [-1.2084306478500366, 0.604404091835022], + [2.6783359050750732, 0.7836476564407349], + [7.828696250915527, -3.085162878036499], + [1.7213716506958008, 1.8921879529953003], + [3.7416956424713135, 7.005796909332275], + [-3.9251821041107178, -1.058670163154602], + [4.5157999992370605, 8.150882720947266], + [2.4323160648345947, 5.730674743652344], + [1.788993239402771, 2.39009690284729], + [6.601158618927002, -3.829935312271118], + [-3.5368592739105225, -1.9425338506698608], + [6.501470565795898, -1.774985671043396], + [1.8441197872161865, 1.6549237966537476], + [-2.9354519844055176, -1.944113850593567], + [2.4124796390533447, 5.088249206542969], + [-5.459167957305908, 5.763985633850098], + [-5.54688024520874, -1.2830630540847778], + [-5.0128254890441895, -0.8806712627410889], + [-4.401439189910889, 6.079948425292969], + [-5.445085048675537, 6.968089580535889], + [0.26877421140670776, -5.011029243469238], + [2.3791098594665527, 4.432104110717773], + [0.36521685123443604, -6.878463268280029], + [0.5262629389762878, -7.612739086151123], + [2.0977518558502197, -4.262974262237549], + [-2.56878399848938, 2.76397442817688], + [-4.9905104637146, -0.31441688537597656], + [0.6372345685958862, -0.5291629433631897], + [-4.52391242980957, -0.8275096416473389], + [-4.207963466644287, -0.4793233871459961], + [2.0157506465911865, -4.841944694519043], + [-0.42162030935287476, 8.811546325683594], + [-1.546931505203247, 12.629220962524414], + [3.262397527694702, -5.388941764831543], + [-3.4086904525756836, 6.061567783355713], + [-4.284323215484619, -0.6360955238342285], + [1.1034319400787354, -0.3761947751045227], + [-0.8672829270362854, 10.0586519241333], + [-3.1790683269500732, 4.293539047241211], + [-3.7120959758758545, -1.400748610496521], + [6.523305416107178, -1.762982964515686], + [-6.073586940765381, 7.8126397132873535], + [3.1241109371185303, -4.973048686981201], + [2.909815549850464, -4.765450954437256], + [-0.6690613627433777, -1.6557053327560425], + [-0.6865866184234619, 10.492000579833984], + [0.5945661664009094, -5.1690473556518555], + [-5.682575225830078, 5.216577529907227], + [2.62494158744812, -4.579058647155762], + [0.39657682180404663, -5.612485408782959], + [-4.908097743988037, 6.662934303283691], + [8.010785102844238, -2.564448595046997], + [4.508206844329834, 7.613893985748291], + [3.5781147480010986, 7.288240909576416], + [1.9001188278198242, -4.238429069519043], + [0.5693874955177307, -7.045326232910156], + [-2.2138538360595703, 1.0699036121368408], + [-0.07311791926622391, 8.691884994506836], + [0.7918910384178162, -7.60614538192749], + [2.131944417953491, 0.5438520908355713], + [-1.098202109336853, 11.37874984741211], + [-5.101105213165283, -1.9016852378845215], + [-3.2445969581604004, 4.84529447555542], + [-3.646458864212036, -3.146479368209839], + [8.200800895690918, -2.8289830684661865], + [1.058722734451294, -5.541131019592285], + [-1.5313960313796997, 0.5764180421829224], + [-3.606419324874878, -1.358878493309021], + [-0.8393875956535339, 10.821203231811523], + [-0.5440770387649536, 10.083410263061523], + [0.2329983115196228, -5.849159240722656], + [2.4628684520721436, 0.8726491928100586], + [-2.9334375858306885, -2.4174630641937256], + [2.741044044494629, -4.763459205627441], + [0.5562105178833008, -7.3888654708862305], + [-0.34110915660858154, 9.122766494750977], + [0.35752254724502563, -6.946499824523926], + [3.44083833694458, 7.364689350128174], + [3.9955837726593018, -3.4744179248809814], + [-3.8020026683807373, -1.8997077941894531], + [0.503947913646698, -0.736111044883728], + [1.891838550567627, -4.875990390777588], + [0.55288165807724, -7.2287445068359375], + [2.4719297885894775, 0.7170549631118774], + [-5.47702169418335, -4.372406959533691], + [-0.6319658160209656, 0.26661667227745056], + [0.5296855568885803, -5.976025581359863], + [-3.0543110370635986, -0.14547711610794067], + [-5.063525199890137, 5.656388759613037], + [-3.877610445022583, 5.936803817749023], + [0.5182420611381531, -6.934874534606934], + [1.3040435314178467, -7.75944185256958], + [-3.9547436237335205, -2.3940718173980713], + [-3.9367926120758057, -0.5372878909111023], + [0.30843493342399597, -5.867058753967285], + [5.7128801345825195, -3.0562775135040283], + [-4.870741844177246, -0.7208009362220764], + [0.8227347731590271, -8.687520027160645], + [0.5283432602882385, -5.161294937133789], + [0.41193217039108276, -6.255505561828613], + [-3.975053548812866, -2.0550734996795654], + [-4.659588813781738, 4.349766731262207], + [-3.363415241241455, -1.4522713422775269], + [0.3758366107940674, -4.182133674621582], + [-4.203279972076416, 6.277727127075195], + [-1.050121784210205, 11.324874877929688], + [4.580716609954834, 7.613959312438965], + [-2.037578821182251, 2.282952308654785], + [-3.6088526248931885, -1.0242524147033691], + [2.3294425010681152, 5.317836761474609], + [2.8701906204223633, -4.541496276855469], + [-2.9474878311157227, -0.729107141494751], + [3.996901750564575, 7.064958095550537], + [-5.158470153808594, 6.388156890869141], + [-3.186610460281372, 3.091768503189087], + [0.5011664628982544, 4.798799991607666], + [0.1737852692604065, 6.565825462341309], + [1.1676597595214844, -5.302615165710449], + [1.1547038555145264, 0.1260237693786621], + [-1.8344838619232178, 0.8601878881454468], + [-4.709585666656494, -0.9442639350891113], + [4.7507429122924805, -2.7884128093719482], + [0.4072679877281189, -6.404544830322266], + [-5.210197925567627, -1.6386793851852417], + [0.669098436832428, -8.641109466552734], + [-3.076319932937622, -1.3986120223999023], + [2.5821285247802734, -4.362586975097656], + [0.3887592554092407, -5.501284599304199], + [0.743150532245636, -8.410853385925293], + [-2.0415821075439453, -1.99135422706604], + [-3.3681681156158447, -3.9969286918640137], + [3.2096803188323975, -4.2641777992248535], + [-3.885256052017212, 6.248378276824951], + [-2.806988477706909, 3.048851490020752], + [5.48629903793335, 8.267382621765137], + [-4.561734676361084, -1.2218061685562134], + [-2.1786916255950928, -1.1015654802322388], + [2.7118680477142334, -4.915453910827637], + [2.3519346714019775, 5.2490997314453125], + [-4.012227535247803, -1.7781399488449097], + [-3.5422914028167725, -2.334651231765747], + [0.6457342505455017, -7.804866313934326], + [-3.954568386077881, 5.940891265869141], + [6.132418155670166, -3.8187594413757324], + [1.2911827564239502, -5.556283950805664], + [-2.885159730911255, -1.5227712392807007], + [0.35164690017700195, -5.391610145568848], + [0.40576255321502686, -5.5326690673828125], + [0.5367843508720398, -7.821737766265869], + [-2.7071945667266846, 4.4584879875183105], + [-1.0554206371307373, 10.932619094848633], + [-4.0964202880859375, -3.882303476333618], + [-0.34141260385513306, -1.8650585412979126], + [9.23296070098877, -2.8769335746765137], + [2.9471280574798584, -4.654140472412109], + [-0.8852854371070862, -1.1775853633880615], + [-1.8805404901504517, 1.4179288148880005], + [-0.2719491422176361, -1.471449851989746], + [2.019714832305908, 3.6509335041046143], + [2.5049281120300293, -4.268435478210449], + [0.995076596736908, 4.740471839904785], + [2.327648878097534, 5.317786693572998], + [-4.444214820861816, -2.7945492267608643], + [0.5978870391845703, -7.464454650878906], + [6.678267002105713, -4.403556823730469], + [-3.457792043685913, -1.6035758256912231], + [1.8644828796386719, 3.3866188526153564], + [2.0356979370117188, 0.9091484546661377], + [0.8258332014083862, -7.711541652679443], + [5.648644924163818, 8.644012451171875], + [-3.3339407444000244, 3.554147243499756], + [-4.942002773284912, -0.7568955421447754], + [9.797699928283691, -2.9842841625213623], + [1.1911735534667969, -5.804018020629883], + [-0.14577922224998474, -0.1587933450937271], + [0.5740682482719421, -5.858830451965332], + [-1.5640568733215332, 1.5319300889968872], + [-1.4519914388656616, 12.147663116455078], + [4.705170154571533, 7.54435920715332], + [-0.46628445386886597, 9.883880615234375], + [-4.005949020385742, -2.262115240097046], + [-1.312583565711975, -1.3237000703811646], + [0.5986619591712952, -8.293953895568848], + [-2.0104925632476807, -0.6954584717750549], + [-5.350053787231445, 6.608213424682617], + [-0.08075732737779617, 7.716189384460449], + [1.1112775802612305, -4.766713619232178], + [-2.822678804397583, -0.7430260181427002], + [-4.462576389312744, -0.45112746953964233], + [-3.856527090072632, -1.9069948196411133], + [1.2911655902862549, -6.43316650390625], + [-0.1135687306523323, -1.004962682723999], + [4.946109771728516, 7.954446792602539], + [-5.9215874671936035, 4.452888488769531], + [7.741451740264893, -2.39302134513855], + [7.9269118309021, -3.335624933242798], + [7.928712368011475, -2.7621991634368896], + [-5.838077545166016, 3.80192494392395], + [-1.3330491781234741, 11.249408721923828], + [-3.736070394515991, -0.7123379111289978], + [-1.064697504043579, 10.744756698608398], + [-1.0774827003479004, 10.75634765625], + [-0.5379638671875, 8.119060516357422], + [2.6340057849884033, 5.775361061096191], + [-2.3441314697265625, -0.850886881351471], + [-0.051230259239673615, -5.701251983642578], + [-5.5375494956970215, 4.205835819244385], + [9.341739654541016, -2.915771484375], + [8.32486629486084, -2.4674248695373535], + [2.8723719120025635, -4.764030456542969], + [-2.358649492263794, -1.5427192449569702], + [-3.814887762069702, -1.5093910694122314], + [-3.221740245819092, -1.0168731212615967], + [-3.3756234645843506, -2.518076181411743], + [-1.57379949092865, 1.8886656761169434], + [1.512055516242981, 4.164847373962402], + [2.8081257343292236, -4.350488662719727], + [2.9705538749694824, -5.145430564880371], + [5.8102126121521, 8.65410041809082], + [0.5701593160629272, -6.676687240600586], + [2.5827431678771973, -5.832590103149414], + [-3.932729959487915, -1.7189292907714844], + [-2.5188093185424805, 2.483128547668457], + [-3.8892061710357666, -3.009941339492798], + [0.30136817693710327, -5.7498860359191895], + [7.007270812988281, -1.91639244556427], + [2.769744396209717, -4.586108684539795], + [2.423647403717041, -5.794867038726807], + [-4.519565105438232, -2.9140326976776123], + [-3.360394239425659, -0.5715793371200562], + [-2.7466306686401367, 3.005666971206665], + [-0.49713802337646484, 9.629337310791016], + [-3.8494491577148438, -2.0847668647766113], + [-4.487242698669434, -3.0839884281158447], + [-4.116509914398193, -2.6562020778656006], + [-0.47370803356170654, -3.1477434635162354], + [1.8356585502624512, 2.6003687381744385], + [0.8532533049583435, -8.444794654846191], + [6.359612941741943, -1.6020458936691284], + [0.43930673599243164, -0.7378537654876709], + [7.565829753875732, -2.4867827892303467], + [3.5006580352783203, -5.731082439422607], + [-3.7504689693450928, -2.8941495418548584], + [-0.15960586071014404, -1.400614619255066], + [0.7393222451210022, -9.211024284362793], + [1.5029516220092773, -5.442577362060547], + [0.5784035325050354, -6.56777811050415], + [-1.2626652717590332, 11.19197940826416], + [1.5911839008331299, -5.204459190368652], + [3.5154552459716797, 6.384127616882324], + [-3.652367353439331, -1.2474111318588257], + [-4.563809394836426, -1.1432937383651733], + [7.691856861114502, -3.2902958393096924], + [-3.7757174968719482, -1.7566155195236206], + [-2.1490895748138428, -3.352172374725342], + [0.3241608738899231, -6.4405059814453125], + [-4.177985668182373, -1.4607430696487427], + [-3.4436984062194824, -2.59074330329895], + [0.07572918385267258, -0.5441393256187439], + [2.51769757270813, 6.138625621795654], + [0.26825305819511414, -5.695425987243652], + [0.015537314116954803, -0.371978759765625], + [2.195258378982544, 1.1442067623138428], + [-3.5855019092559814, -1.5570400953292847], + [-1.3439815044403076, 11.735871315002441], + [0.1591261625289917, -4.769257068634033], + [1.8289450407028198, 1.652572751045227], + [-3.679609537124634, -1.7508418560028076], + [2.447462797164917, -4.349856376647949], + [-1.429015040397644, -0.8460233211517334], + [-2.9785573482513428, -0.9331222176551819], + [-1.8017253875732422, 0.5896379351615906], + [-1.8681366443634033, -1.8482388257980347], + [-5.0063042640686035, -1.193469762802124], + [2.49117374420166, -4.029870510101318], + [2.7855093479156494, -4.546184539794922], + [0.3720226287841797, -7.535347938537598], + [-2.9272332191467285, 6.407458305358887], + [7.858270645141602, -2.414976119995117], + [-3.9327380657196045, -1.0434666872024536], + [3.7318637371063232, 6.846811771392822], + [7.612304210662842, -2.983755350112915], + [-2.026366949081421, 2.0969927310943604], + [4.508767127990723, 7.250202178955078], + [0.5832722187042236, -7.869236469268799], + [-3.5118303298950195, -2.1466643810272217], + [0.36489468812942505, -6.3072662353515625], + [4.661134719848633, 7.564457416534424], + [-2.4435040950775146, -2.0953361988067627], + [1.2260029315948486, -0.16655658185482025], + [-4.790970802307129, -0.8067101240158081], + [-1.189941644668579, 11.185722351074219], + [0.4626426696777344, -6.9388837814331055], + [6.233309268951416, -3.5054500102996826], + [-3.9903595447540283, 4.952153205871582], + [6.9577789306640625, -1.831743597984314], + [0.4733710289001465, -5.178119659423828], + [0.4444563388824463, -6.138080596923828], + [9.726313591003418, -2.914999485015869], + [-4.37579870223999, -1.8239821195602417], + [-0.43003010749816895, 9.70999526977539], + [1.586885929107666, 3.8050458431243896], + [-3.9102022647857666, -0.38709282875061035], + [0.6509547829627991, -5.337280750274658], + [-3.2115790843963623, -0.8681156635284424], + [0.5616847276687622, -4.8854265213012695], + [0.40771257877349854, -6.56926965713501], + [1.6694594621658325, 5.360579967498779], + [0.4754405617713928, -7.787110805511475], + [2.1333887577056885, 0.9968668222427368], + [-1.4451253414154053, 11.93228530883789], + [-0.44403713941574097, 9.27153205871582], + [2.781259298324585, -4.485930442810059], + [-0.9732257127761841, 8.490789413452148], + [2.4993960857391357, 4.754738807678223], + [-3.6786320209503174, 5.946020126342773], + [2.353048801422119, -4.7016377449035645], + [-4.5083537101745605, 5.471591472625732], + [-5.501370906829834, 4.697062969207764], + [0.8718941807746887, -7.696713447570801], + [-0.4702349305152893, -1.5292612314224243], + [3.6566338539123535, -3.7392079830169678], + [-4.953334331512451, 6.39179801940918], + [1.3192362785339355, -6.395908355712891], + [-0.9058540463447571, -2.1255500316619873], + [-3.99396014213562, -0.20879918336868286], + [5.609496593475342, -1.2400561571121216], + [-3.3630807399749756, -1.6049445867538452], + [-3.4870822429656982, 2.7514607906341553], + [2.8253488540649414, -5.047323226928711], + [-3.762570381164551, -2.787426471710205], + [0.6536353826522827, -8.307108879089355], + [-0.6025839447975159, 10.387596130371094], + [2.3815810680389404, -4.280393600463867], + [3.0564076900482178, -4.512462615966797], + [-3.5804941654205322, -2.752119302749634], + [-3.228841781616211, -0.9101152420043945], + [-3.980804920196533, -3.0717737674713135], + [0.5699982047080994, -0.5945735573768616], + [-3.966660976409912, -1.111671805381775], + [2.5926132202148438, -3.7917661666870117], + [4.975504398345947, 8.036136627197266], + [-3.194223642349243, -1.5517456531524658], + [8.036965370178223, -2.9354360103607178], + [0.4662858843803406, -7.593934059143066], + [2.455228567123413, -5.098302364349365], + [-2.1319949626922607, -0.921242356300354], + [-4.575825214385986, 6.661995887756348], + [0.48791229724884033, -7.39063835144043], + [-1.6819157600402832, 2.404539108276367], + [-5.526137828826904, 6.088473796844482], + [1.4654121398925781, -6.41550350189209], + [-1.9419918060302734, 1.8633769750595093], + [-3.2997186183929443, -2.6673717498779297], + [0.6499729752540588, 0.7650562524795532], + [3.9819796085357666, 7.612504005432129], + [0.002036653459072113, -1.212851643562317], + [0.4853041172027588, -5.918686389923096], + [2.4410083293914795, 4.474756240844727], + [-2.848912000656128, 4.659529685974121], + [7.5795183181762695, -2.325866460800171], + [-3.353126049041748, -1.1342017650604248], + [-4.236691951751709, -1.2618248462677002], + [-1.1364766359329224, -0.867034375667572], + [7.150442123413086, -2.014976739883423], + [0.791919469833374, -7.538919925689697], + [-4.472653865814209, -0.856593668460846], + [-4.293524265289307, 6.085386753082275], + [0.5274564027786255, -5.401968002319336], + [-1.181228756904602, 11.559196472167969], + [0.6075145602226257, -7.814427852630615], + [-3.5866739749908447, -1.1606531143188477], + [1.0116796493530273, -6.765911102294922], + [0.28551018238067627, -6.498449325561523], + [2.3769609928131104, -3.3028194904327393], + [4.69249153137207, -0.7540521621704102], + [5.73181676864624, -1.566879391670227], + [0.8134754300117493, -6.416190147399902], + [5.116216659545898, 8.715560913085938], + [6.93133020401001, -1.655941367149353], + [0.5838537216186523, -5.352838516235352], + [0.7442065477371216, -4.3058953285217285], + [-3.637089252471924, -1.4189118146896362], + [-2.785414457321167, 6.188057899475098], + [7.517037391662598, -2.09395432472229], + [-3.9736714363098145, -2.885355234146118], + [2.347972869873047, 6.47266960144043], + [2.3691463470458984, 3.9352364540100098], + [-3.558875560760498, -1.3678399324417114], + [-2.282820701599121, -1.2117482423782349], + [-4.579870700836182, -3.3330600261688232], + [-1.856937050819397, 1.424317717552185], + [-4.933929443359375, -1.8622843027114868], + [0.8628698587417603, -5.681222438812256], + [-0.012814678251743317, -4.818397045135498], + [2.3044707775115967, -5.0628533363342285], + [-3.3269526958465576, -3.1535470485687256], + [-2.954254150390625, -2.42797589302063], + [-3.205231189727783, -1.0391294956207275], + [2.017301082611084, 5.640937328338623], + [9.008667945861816, -2.6849029064178467], + [-3.6987555027008057, -0.602745771408081], + [-0.569052517414093, 0.9122310876846313], + [2.0076701641082764, 1.0945461988449097], + [-0.3759700059890747, 8.913175582885742], + [2.498323917388916, -4.865374565124512], + [-2.0003042221069336, 2.8157644271850586], + [-3.259474277496338, -0.8014640808105469], + [-0.39718523621559143, -0.5906726717948914], + [-1.389186978340149, -3.4706661701202393], + [-0.11322910338640213, -4.674525260925293], + [1.1932275295257568, -5.130563259124756], + [-3.929399251937866, -1.4478625059127808], + [3.066913366317749, -5.146578788757324], + [5.04144811630249, 7.788278102874756], + [-3.608903646469116, -1.889975905418396], + [-2.747447967529297, -0.7216197848320007], + [-0.33944523334503174, -4.0033955574035645], + [-1.862470030784607, 2.706834554672241], + [-4.214911937713623, -0.8524794578552246], + [1.5107049942016602, -6.174917221069336], + [-4.218899250030518, -1.5217446088790894], + [1.1550066471099854, 0.32747411727905273], + [-1.819667100906372, 1.348387598991394], + [0.432939350605011, -7.442529201507568], + [-4.203110218048096, -1.1051154136657715], + [1.7477290630340576, 5.553557395935059], + [-5.008026599884033, -1.4387930631637573], + [8.977229118347168, -2.7200443744659424], + [-0.3290203809738159, 9.275721549987793], + [0.536395788192749, -0.8450002074241638], + [3.5956029891967773, 6.852869987487793], + [-3.3230416774749756, -1.5492339134216309], + [-0.8943575024604797, -2.1753435134887695], + [1.7951148748397827, -5.488906383514404], + [-0.5974973440170288, 9.966028213500977], + [2.7852578163146973, -4.385315895080566], + [2.244058132171631, 5.841071128845215], + [-3.7318880558013916, -1.318461537361145], + [5.836472034454346, 8.784980773925781], + [0.19141703844070435, -5.578759670257568], + [6.270815372467041, -2.6261138916015625], + [0.5355530381202698, -6.969225883483887], + [0.4146198332309723, -4.419013977050781], + [-4.784307956695557, -3.9303343296051025], + [-1.6471730470657349, 1.4478458166122437], + [2.036855936050415, -4.417692184448242], + [-4.789580345153809, -0.7387039661407471], + [-0.2254384458065033, -1.9655643701553345], + [1.9508259296417236, 5.529728412628174], + [1.3366245031356812, 1.6217284202575684], + [10.419629096984863, -3.111860513687134], + [1.0258395671844482, -5.641332149505615], + [0.6766558289527893, -0.5848278403282166], + [-0.6079062223434448, -3.505296468734741], + [-3.4867546558380127, -1.241310715675354], + [7.2712483406066895, -1.9587135314941406], + [-4.767672538757324, -1.1026027202606201], + [-3.2721874713897705, -0.7588597536087036], + [-1.9970736503601074, 0.20621538162231445], + [1.425018548965454, 4.965370178222656], + [0.6504915356636047, -6.466385364532471], + [0.9191597104072571, 4.860429763793945], + [-0.6333732008934021, 9.566810607910156], + [-3.6341490745544434, -2.40529465675354], + [1.8518561124801636, 5.83497953414917], + [-5.683125019073486, 3.252479076385498], + [9.600020408630371, -2.8752362728118896], + [0.9370998740196228, -6.626622200012207], + [-4.774389743804932, 5.887033462524414], + [-5.081082344055176, 4.914196014404297], + [-1.1943964958190918, 10.883993148803711], + [2.385179281234741, 6.081056118011475], + [-4.785081386566162, -4.033591270446777], + [-1.8819383382797241, 4.633401393890381], + [-1.344965934753418, 11.433626174926758], + [2.9845356941223145, 6.435904026031494], + [-4.177801132202148, 0.86199951171875], + [-2.785536050796509, 2.881751775741577], + [-2.5148637294769287, -1.1068118810653687], + [2.5835750102996826, 6.060005187988281], + [2.6345531940460205, -5.392468452453613], + [-1.9246584177017212, 2.084254264831543], + [0.8890286684036255, -0.4819067716598511], + [0.5353649258613586, -7.167502403259277], + [-1.1070356369018555, 1.5570238828659058], + [-0.34406548738479614, 8.841268539428711], + [-3.3199193477630615, -1.981622576713562], + [1.559899091720581, 0.19066667556762695], + [-1.515820860862732, 12.34640884399414], + [7.115896701812744, -1.8797273635864258], + [-4.062205791473389, 1.307242512702942], + [0.6153270602226257, -7.878825664520264], + [0.46149569749832153, -8.158390998840332], + [0.5236570835113525, -5.762086391448975], + [-0.8503017425537109, 10.405743598937988], + [-2.5326783657073975, -2.1360390186309814], + [1.411932349205017, 5.25880241394043], + [6.062856197357178, -1.414548635482788], + [0.3162115216255188, -7.081644058227539], + [2.3743603229522705, 5.924705505371094], + [-0.11853382736444473, -2.920558214187622], + [-3.564237117767334, -0.9443315267562866], + [-4.993442535400391, 5.452220439910889], + [0.8068525195121765, -0.5184136629104614], + [-2.0608971118927, 0.2764061689376831], + [2.5051639080047607, 6.2864789962768555], + [4.1957526206970215, 7.838301181793213], + [0.2114352583885193, -5.010627746582031], + [-4.411572456359863, -3.0854151248931885], + [-3.9705307483673096, -2.2492477893829346], + [1.5560097694396973, 1.3863246440887451], + [-1.2372113466262817, 10.827557563781738], + [1.548673152923584, 4.692787170410156], + [-1.3323458433151245, 1.4056698083877563], + [-4.041625022888184, -1.3296135663986206], + [-3.867077589035034, 3.934009313583374], + [-5.024653911590576, -1.9059088230133057], + [-3.3283534049987793, -2.2998178005218506], + [0.6436047554016113, -8.476295471191406], + [-0.4057157039642334, -0.7434536218643188], + [0.745251476764679, -5.637331008911133], + [1.7119444608688354, 1.423822045326233], + [0.7414165735244751, -0.5614400506019592], + [0.2494441568851471, -5.000247001647949], + [7.550825595855713, -2.273594379425049], + [-4.403663158416748, -1.9778691530227661], + [2.648721218109131, 5.975857734680176], + [-1.7219293117523193, 1.0598300695419312], + [-1.3345766067504883, -1.0740422010421753], + [-4.520784378051758, -3.79780650138855], + [-3.992481231689453, -3.7097647190093994], + [0.6308470368385315, -4.902937889099121], + [-3.3324320316314697, -1.7248539924621582], + [2.468543291091919, 5.835010051727295], + [-2.61858868598938, -1.0904985666275024], + [2.237807035446167, 6.157356262207031], + [-2.0807511806488037, 2.5582120418548584], + [-0.42583167552948, 9.121662139892578], + [0.04332595318555832, -4.10152006149292], + [1.4733772277832031, -1.5274916887283325], + [-0.31270939111709595, 8.472859382629395], + [0.36102521419525146, -4.868608474731445], + [0.5853696465492249, -7.4304327964782715], + [-4.194681644439697, -1.1241828203201294], + [-4.611990451812744, -1.4749583005905151], + [-0.2551884353160858, -2.5373804569244385], + [0.25429022312164307, -6.246600151062012], + [-5.441446781158447, 3.485520839691162], + [-4.088420867919922, 3.3378849029541016], + [-1.5005371570587158, 11.883315086364746], + [-2.2453484535217285, 2.1737961769104004], + [-2.3256032466888428, 2.2230193614959717], + [9.141818046569824, -2.804861545562744], + [-0.4078443646430969, -1.2451046705245972], + [0.09368281811475754, -5.352897644042969], + [2.67077374458313, -5.417956829071045], + [-0.2887077033519745, 5.707857608795166], + [2.9491841793060303, -4.881198883056641], + [-4.059893608093262, -2.8415486812591553], + [-4.261772632598877, -1.2315274477005005], + [-4.458247184753418, -2.989384412765503], + [-3.328874111175537, -2.272054672241211], + [-2.2029731273651123, -1.661998987197876], + [-3.3783881664276123, -2.31459903717041], + [-1.294560194015503, 11.360502243041992], + [-4.844667434692383, -1.6138321161270142], + [5.665234088897705, -1.6400965452194214], + [-2.240368604660034, -0.5317621231079102], + [2.5335404872894287, -5.091782569885254], + [-1.9007847309112549, 1.2378029823303223], + [2.0733797550201416, -5.022336006164551], + [6.267849445343018, -2.504631280899048], + [2.3405869007110596, -3.7572476863861084], + [-4.0699896812438965, 4.879852294921875], + [-2.395812749862671, -2.3719680309295654], + [4.2245330810546875, 7.020840644836426], + [0.6989254951477051, -6.953683853149414], + [-3.7849557399749756, 6.031991958618164], + [-1.357484221458435, -1.1374496221542358], + [-4.8396525382995605, -1.711591362953186], + [0.36106646060943604, -6.57855224609375], + [0.6865082383155823, -7.468792915344238], + [-0.30228155851364136, 9.208395004272461], + [5.360642433166504, -1.4905037879943848], + [7.596651554107666, -2.144602060317993], + [-0.22185435891151428, -1.2143932580947876], + [-5.333550930023193, -5.549380302429199], + [-1.9544785022735596, 2.4968039989471436], + [-4.811647891998291, 5.706742286682129], + [-1.450278401374817, 12.43751335144043], + [-3.917895555496216, -2.091646194458008], + [3.7928216457366943, -4.164459228515625], + [-3.785092830657959, -1.762058138847351], + [-5.099982738494873, 7.673168659210205], + [-1.8620980978012085, 1.2044514417648315], + [-0.06820011883974075, 8.476526260375977], + [2.404862880706787, -5.600536346435547], + [-5.071570873260498, -2.1854445934295654], + [-3.6511642932891846, -0.3224114179611206], + [-0.7827083468437195, 10.493876457214355], + [5.850615978240967, -1.2529739141464233], + [-3.46708345413208, -1.2995308637619019], + [0.6163766980171204, -7.996739387512207], + [-3.7855453491210938, -3.0874826908111572], + [0.8652096390724182, 4.944702625274658], + [-1.2201768159866333, -1.304038405418396], + [2.2767558097839355, 6.144454002380371], + [-3.9788076877593994, -1.5025519132614136], + [8.739788055419922, -2.6089985370635986], + [-3.903201103210449, 5.999090671539307], + [-0.2700374722480774, 8.958056449890137], + [-3.452373743057251, -1.1372895240783691], + [0.12315814942121506, -5.8231201171875], + [-0.7027850151062012, 10.01736831665039], + [8.782720565795898, -2.6029915809631348], + [1.1002371311187744, -0.13441303372383118], + [9.7242431640625, -2.927525281906128], + [-4.191858291625977, 4.373358726501465], + [5.2479071617126465, -1.2648037672042847], + [7.184625148773193, -2.2038378715515137], + [-0.9339160919189453, 0.9093157052993774], + [0.4298136830329895, -6.674076080322266], + [7.658877849578857, -2.155431032180786], + [-5.968814373016357, -1.3944244384765625], + [8.472718238830566, -3.3298466205596924], + [-1.3193557262420654, 11.442112922668457], + [2.0264220237731934, -4.104876518249512], + [-0.6635404229164124, -2.673769474029541], + [0.3834088444709778, -6.666748523712158], + [1.9900362491607666, 3.788640260696411], + [0.5882817506790161, -6.682955741882324], + [-3.5962111949920654, -1.379104495048523], + [-3.576381206512451, 5.067321300506592], + [3.1937901973724365, -4.5371294021606445], + [-4.7295918464660645, 7.2978620529174805], + [-3.753218412399292, -0.3368934392929077], + [2.983035087585449, -4.9613752365112305], + [-2.058377504348755, 2.163071632385254], + [-1.0745677947998047, 10.237699508666992], + [0.5898215770721436, -7.543214797973633], + [-4.1596808433532715, 5.878660678863525], + [-0.877961277961731, 10.5732421875], + [-5.2920145988464355, 4.382665634155273], + [3.0693695545196533, -5.092742919921875], + [2.817516565322876, -4.409232139587402], + [-5.025942325592041, 0.7615115642547607], + [-1.3472940921783447, 11.780566215515137], + [-0.8803569674491882, 10.745414733886719], + [-1.1077806949615479, -0.8901418447494507], + [-4.5968241691589355, 6.018634796142578], + [0.5510492324829102, -8.422752380371094], + [1.4550671577453613, 5.139537811279297], + [-0.8727211952209473, 10.742776870727539], + [-1.3450980186462402, 5.2236008644104], + [0.2758980989456177, -4.9102630615234375], + [-0.4155731201171875, 7.800710678100586], + [8.19478702545166, -2.504584789276123], + [-3.746289014816284, 5.892960071563721], + [1.6194605827331543, -4.584522247314453], + [7.703464031219482, -2.386077880859375], + [2.9251511096954346, -4.7557373046875], + [6.576695442199707, -2.135551929473877], + [0.3294708728790283, -5.332883834838867], + [-2.6162619590759277, -0.9258551597595215], + [8.185433387756348, -2.4902279376983643], + [2.8827333450317383, -4.62808895111084], + [9.928694725036621, -3.0131518840789795], + [-4.448596000671387, -2.694195032119751], + [3.2180240154266357, -4.993405818939209], + [1.7929861545562744, 3.6376876831054688], + [-3.882828950881958, -1.5655863285064697], + [5.520898818969727, -3.124993085861206], + [-1.8142539262771606, 2.3635430335998535], + [0.8569760918617249, -0.12385880947113037], + [-0.5848496556282043, 9.084634780883789], + [-2.7849090099334717, 0.21976834535598755], + [3.6227824687957764, 6.4739990234375], + [-3.9331939220428467, -2.049696207046509], + [-1.5370330810546875, 0.4879099130630493], + [2.350919723510742, -7.2260637283325195], + [2.9749867916107178, -4.65472412109375], + [-0.6621415019035339, 9.500762939453125], + [1.2999844551086426, -5.213399887084961], + [2.398763418197632, -4.344865798950195], + [0.05216168612241745, -3.685678720474243], + [0.6148661971092224, -7.6788835525512695], + [-0.5515778064727783, 9.684457778930664], + [6.031154155731201, -1.9432134628295898], + [-1.9792487621307373, 2.0796260833740234], + [-3.511402130126953, -3.88991117477417], + [6.699716567993164, -3.6681301593780518], + [-3.393357038497925, -1.5843989849090576], + [-2.0172665119171143, 7.258570671081543], + [-1.5055773258209229, 5.107845783233643], + [3.0556886196136475, -5.247027397155762], + [-3.913811445236206, -1.0054922103881836], + [0.9036070704460144, -0.47584542632102966], + [0.08226650208234787, -4.508001327514648], + [-0.3642609715461731, 10.05989933013916], + [-3.876352071762085, -1.3761039972305298], + [0.471111536026001, -7.4516401290893555], + [4.840698719024658, 7.7876386642456055], + [-3.3361663818359375, 6.0819292068481445], + [-4.164735317230225, -2.7651283740997314], + [-3.745854616165161, -1.942928433418274], + [0.9465417265892029, 3.3669822216033936], + [-3.4832265377044678, -0.639756441116333], + [-1.419596552848816, 11.833609580993652], + [2.0644071102142334, 0.5050452947616577], + [3.9814484119415283, -6.598238468170166], + [0.9679940342903137, -7.615364074707031], + [4.995697498321533, 8.001157760620117], + [-1.1783784627914429, 10.837158203125], + [-0.9480780959129333, 9.7815523147583], + [0.668205201625824, 5.4252824783325195], + [-2.388058662414551, 2.2550623416900635], + [-4.89723539352417, 5.926599502563477], + [0.576368510723114, -5.482954502105713], + [1.9591987133026123, 3.289573907852173], + [4.195559978485107, -3.137728691101074], + [-4.299771785736084, -0.5865716338157654], + [2.8755290508270264, 6.812973976135254], + [0.11186858266592026, -4.982766628265381], + [-2.609799861907959, 2.847116470336914], + [1.483804702758789, 5.194202423095703], + [6.584815502166748, -1.9953511953353882], + [7.152599811553955, -2.7475807666778564], + [9.098822593688965, -2.777667284011841], + [0.8250381946563721, -7.999149322509766], + [-3.9769127368927, -2.2905290126800537], + [5.17680025100708, -2.68184494972229], + [-0.4860331416130066, 10.42016887664795], + [2.6973869800567627, -4.583551406860352], + [1.5953571796417236, 1.7112849950790405], + [2.914576768875122, -4.6724019050598145], + [-4.005088806152344, -0.8666914701461792], + [-1.933406114578247, 1.4466053247451782], + [-1.3829127550125122, 8.948751449584961], + [0.48754459619522095, -5.757728576660156], + [3.9274160861968994, 7.445103645324707], + [3.1041836738586426, -5.056344509124756], + [6.29083776473999, -3.715472936630249], + [-3.2199151515960693, -0.48421335220336914], + [2.7959353923797607, -4.393364906311035], + [7.850795745849609, -2.4940693378448486], + [7.734538555145264, -2.384755849838257], + [-0.8275144696235657, 10.97972583770752], + [-3.6525635719299316, -1.2275665998458862], + [5.95249605178833, -3.5486905574798584], + [1.1233770847320557, -6.659291744232178], + [-0.751324474811554, 9.653017044067383], + [2.4201035499572754, 0.6018368005752563], + [9.243346214294434, -2.7532553672790527], + [-0.950967013835907, 10.147815704345703], + [1.770650029182434, 4.411449909210205], + [7.418030261993408, -2.2642157077789307], + [5.411178112030029, -2.9570820331573486], + [2.383354902267456, 4.725805759429932], + [0.5036585927009583, -7.72161865234375], + [-1.2624213695526123, 11.268096923828125], + [2.7087302207946777, -4.320765018463135], + [-3.0642611980438232, -1.5906094312667847], + [-0.6389830112457275, 10.307501792907715], + [0.2953101396560669, -6.212969779968262], + [-2.1519992351531982, 2.1823697090148926], + [-0.860038161277771, 10.684232711791992], + [2.062643527984619, 5.668878555297852], + [9.282301902770996, -2.937856912612915], + [-3.863880157470703, -2.816581964492798], + [-1.2356212139129639, 11.20562744140625], + [6.36527681350708, -3.9993221759796143], + [-3.1256492137908936, -0.3626757860183716], + [1.9560375213623047, 1.3910574913024902], + [1.8559340238571167, -4.393532752990723], + [-0.9849751591682434, 11.615095138549805], + [-0.805158793926239, 9.64593505859375], + [0.651585578918457, -5.892592906951904], + [0.2248632311820984, -5.5500688552856445], + [2.897257089614868, 4.948882579803467], + [-4.859407901763916, -4.9618706703186035], + [-0.4674839377403259, -1.3817800283432007], + [-3.7170891761779785, -0.9737045168876648], + [9.67186450958252, -2.9882466793060303], + [-1.435377597808838, 12.257745742797852], + [5.611824989318848, -1.107154369354248], + [-3.9912965297698975, -1.1884443759918213], + [4.645126819610596, 7.636534690856934], + [7.2842230796813965, -2.4191343784332275], + [0.30826789140701294, -6.6356072425842285], + [-3.7373569011688232, -2.701963424682617], + [0.5335342884063721, -5.921355247497559], + [-4.365367412567139, 1.4495837688446045], + [-3.812021493911743, -2.9007396697998047], + [1.3965274095535278, 5.942619323730469], + [-4.513193607330322, -1.5083805322647095], + [1.8643572330474854, 5.341109275817871], + [1.9360630512237549, 2.862947702407837], + [1.8882992267608643, 1.5305336713790894], + [2.101936101913452, 0.6512743830680847], + [0.35577279329299927, -5.900844573974609], + [5.503541469573975, 8.602228164672852], + [2.8964684009552, 2.2309367656707764], + [-4.155100345611572, -3.6454579830169678], + [2.047175407409668, 5.461750030517578], + [-5.014285564422607, -3.889751672744751], + [-5.1818976402282715, -0.664624035358429], + [-2.941467523574829, -0.7479895353317261], + [-3.7492992877960205, -1.1663241386413574], + [-2.0704829692840576, 2.089301109313965], + [-1.0581552982330322, 1.5544089078903198], + [-3.5728957653045654, -1.470009446144104], + [-0.2799476981163025, 8.096641540527344], + [-0.5160554051399231, -1.701635718345642], + [1.5982608795166016, -3.8187646865844727], + [7.584417343139648, -2.513007402420044], + [2.9018495082855225, 6.618047714233398], + [1.1634515523910522, -5.592302322387695], + [-1.3187570571899414, 10.910677909851074], + [2.269028902053833, 5.93931770324707], + [-4.498978137969971, -0.32597094774246216], + [-3.4963772296905518, -2.216636896133423], + [3.0811986923217773, 6.2195820808410645], + [9.07915210723877, -2.8148860931396484], + [4.3878302574157715, 7.437189102172852], + [-4.903442859649658, 6.651100158691406], + [-4.282127380371094, -1.2259193658828735], + [-6.249745845794678, 8.231866836547852], + [0.3955935537815094, -3.9040169715881348], + [0.4155845046043396, -5.951410293579102], + [0.3629031777381897, -6.533300399780273], + [-4.018430233001709, -2.990170478820801], + [-2.6211202144622803, -1.4896773099899292], + [-4.165717124938965, 6.557068347930908], + [-3.514600992202759, -1.5990214347839355], + [-1.175544023513794, 10.551279067993164], + [0.6914708614349365, -7.462799072265625], + [-3.2099525928497314, 6.334001064300537], + [-3.6064417362213135, -2.011772871017456], + [9.053406715393066, -2.7751548290252686], + [0.7307611107826233, -7.156338691711426], + [8.1148681640625, -2.614881992340088], + [10.796598434448242, -3.255089521408081], + [0.6897887587547302, -9.24808120727539], + [-0.7843517661094666, 9.782781600952148], + [7.706503391265869, -2.509417772293091], + [-1.1973061561584473, 1.158994436264038], + [0.7735285758972168, -0.46108558773994446], + [1.7171223163604736, 2.145308494567871], + [-2.1164469718933105, -0.2870633602142334], + [-0.5576790571212769, 8.343597412109375], + [0.6957431435585022, -8.481061935424805], + [1.3776363134384155, 4.5489349365234375], + [-4.783998966217041, 7.200817108154297], + [-0.1504485011100769, 8.383478164672852], + [-0.7562750577926636, 10.122453689575195], + [-2.110788106918335, 1.6653391122817993], + [1.40211021900177, 0.6640077829360962], + [-3.4956815242767334, -1.6872730255126953], + [-1.337945818901062, 11.510865211486816], + [0.2540866434574127, -3.1672213077545166], + [3.0207581520080566, -4.723502159118652], + [-0.7047649025917053, -1.2351813316345215], + [-3.958111524581909, -2.8290579319000244], + [-1.2873724699020386, 0.6129074096679688], + [7.967373371124268, -2.5787298679351807], + [3.0807034969329834, -4.798953056335449], + [0.6696453094482422, -7.119422912597656], + [2.0790202617645264, 3.6543800830841064], + [0.8759368062019348, -5.8050336837768555], + [0.7351711392402649, -6.876351356506348], + [9.245285987854004, -2.807276725769043], + [-0.7040039896965027, 10.109766960144043], + [0.42866384983062744, -6.493936061859131], + [8.251042366027832, -2.6458451747894287], + [-4.3407769203186035, 5.600353717803955], + [2.9240548610687256, -4.6522746086120605], + [-3.6104936599731445, -1.8629382848739624], + [-1.776180624961853, 4.946100234985352], + [0.6842411756515503, -0.5600426197052002], + [0.8553224205970764, -8.412899017333984], + [-0.6339725255966187, -0.9532325267791748], + [7.854599952697754, -3.7007744312286377], + [-0.07136542350053787, -1.355610728263855], + [1.540748119354248, 0.9285093545913696], + [-1.2771683931350708, 11.286660194396973], + [-4.888423442840576, -4.0594892501831055], + [-3.3766353130340576, -2.684985876083374], + [-2.8963816165924072, 6.460855484008789], + [1.675673246383667, 5.206467151641846], + [-1.4119004011154175, 12.074834823608398], + [2.5540413856506348, 4.697238922119141], + [6.301767826080322, -1.6974259614944458], + [-0.2170761227607727, -1.6246259212493896], + [-4.1083574295043945, -1.6444011926651], + [-3.7250874042510986, 6.032830715179443], + [5.5181145668029785, -1.2449814081192017], + [-0.6260742545127869, 9.778961181640625], + [2.663133382797241, -4.523000717163086], + [-3.2442169189453125, -1.248920202255249], + [0.45986825227737427, -1.9360363483428955], + [1.8429439067840576, 5.86855411529541], + [7.219212055206299, -1.9560474157333374], + [0.4624573588371277, -7.754219055175781], + [-3.396353006362915, -1.3884477615356445], + [-1.6115591526031494, 1.7072598934173584], + [0.6635870337486267, -8.26162338256836], + [-3.1903109550476074, 5.368447780609131], + [-1.941641092300415, 1.7992126941680908], + [-1.3161959648132324, 1.5964279174804688], + [1.7869741916656494, -4.2664899826049805], + [-0.7228942513465881, -0.33178481459617615], + [0.5046749711036682, -6.980471611022949], + [-3.797287702560425, -0.06918966770172119], + [-1.8974827527999878, 2.4856224060058594], + [-3.5125653743743896, -0.9634857177734375], + [-2.1115779876708984, 1.4538848400115967], + [0.29400211572647095, -5.45658540725708], + [-0.37428683042526245, 8.167196273803711], + [2.654705047607422, 5.829837322235107], + [-4.291061878204346, -3.69799542427063], + [-3.6806507110595703, -1.7409671545028687], + [-3.8916571140289307, -2.0607972145080566], + [-4.75871467590332, -1.420833945274353], + [7.049996852874756, -4.417699813842773], + [-0.43369966745376587, 9.572929382324219], + [-2.683211088180542, -0.6437908411026001], + [-3.9186646938323975, 5.976921081542969], + [-5.142210483551025, 6.601827144622803], + [-3.82824444770813, -2.199488878250122], + [-4.6471734046936035, 6.267908096313477], + [2.634904146194458, -5.088223934173584], + [-3.382781982421875, -0.9742704629898071], + [-0.4030863642692566, 9.324325561523438], + [2.501225709915161, -4.139383316040039], + [-1.8532347679138184, 0.9173355102539062], + [-4.202764987945557, -0.550430417060852], + [-4.500311374664307, 4.486352920532227], + [0.6895987391471863, -5.545284271240234], + [0.5909556150436401, -6.498288154602051], + [-3.777117967605591, 5.335452079772949], + [0.04151489585638046, -3.623427152633667], + [-3.7490410804748535, -1.3129605054855347], + [3.1615383625030518, 6.477751731872559], + [6.566657543182373, -2.558009386062622], + [-1.2829883098602295, 1.6754060983657837], + [-4.498971462249756, 6.039144039154053], + [5.3439154624938965, -5.989577293395996], + [-3.280352830886841, -1.9487968683242798], + [-3.0585434436798096, -2.520723581314087], + [1.8074830770492554, 1.7165900468826294], + [8.95400619506836, -2.7944862842559814], + [0.6210994124412537, -0.7810100317001343], + [1.2250308990478516, -0.17468132078647614], + [4.087782382965088, -4.003344535827637], + [0.5248438119888306, -7.185519218444824], + [-4.056581974029541, -0.2556535601615906], + [9.490254402160645, -2.9349687099456787], + [-1.0489132404327393, 10.146295547485352], + [1.2352163791656494, 0.45744800567626953], + [-4.400588512420654, 5.676276683807373], + [-3.569305658340454, -3.5608911514282227], + [-1.1712967157363892, -0.7108460664749146], + [-1.35614013671875, 11.407575607299805], + [3.067548990249634, -4.467907428741455], + [0.6604260206222534, -7.084885597229004], + [2.239222288131714, -5.007267475128174], + [-4.453535556793213, -2.821815252304077], + [2.3405439853668213, -4.710463523864746], + [-0.6594257354736328, 10.120380401611328], + [-5.503046989440918, -0.6267553567886353], + [1.7041430473327637, 3.967250108718872], + [2.8663508892059326, 6.51717472076416], + [-3.8005974292755127, -2.3046367168426514], + [2.923461675643921, -4.60689640045166], + [2.7532260417938232, -4.282738208770752], + [0.6988685727119446, -7.351451396942139], + [-3.058338165283203, -0.1063917875289917], + [-0.38107120990753174, 9.198485374450684], + [2.019843339920044, 6.5300493240356445], + [0.5093931555747986, -6.12861442565918], + [0.8250551223754883, -8.093459129333496], + [0.48983287811279297, -5.680438995361328], + [0.27480199933052063, -5.193519592285156], + [-1.344980001449585, 11.875152587890625], + [1.0383731126785278, 4.3134026527404785], + [1.4092450141906738, -5.403312683105469], + [-0.22232744097709656, -1.1442055702209473], + [-0.38172441720962524, 9.219632148742676], + [-0.2457275688648224, -1.5208462476730347], + [-2.654810667037964, -2.8230791091918945], + [-0.03785545378923416, -1.0974833965301514], + [-3.5279781818389893, -2.6748108863830566], + [-6.207900524139404, 8.113618850708008], + [-4.056815147399902, 4.2428364753723145], + [-4.945980072021484, 4.757852554321289], + [-3.629072904586792, -2.2302396297454834], + [-5.084158897399902, -0.5742765665054321], + [-4.601881504058838, 6.464405536651611], + [5.673282623291016, -3.2641918659210205], + [3.884742498397827, 6.764434814453125], + [-3.9620602130889893, -2.5668959617614746], + [1.3299965858459473, 2.095808506011963], + [-4.412114143371582, 4.333789825439453], + [1.199388861656189, -0.07706713676452637], + [0.725574254989624, -8.073291778564453], + [-3.3854334354400635, -1.0702956914901733], + [0.5969586372375488, -7.511753082275391], + [6.493581771850586, -1.3252921104431152], + [6.237555503845215, -3.747225046157837], + [3.053196430206299, -5.3592047691345215], + [2.3669819831848145, 0.7851858139038086], + [0.7423505187034607, -6.908284664154053], + [-3.376289129257202, 5.679912567138672], + [0.619305431842804, -7.694372653961182], + [-2.6661176681518555, -1.3607521057128906], + [3.020951986312866, -4.63543701171875], + [6.018283367156982, -1.418502688407898], + [-2.1577775478363037, 0.7923614978790283], + [-1.890086054801941, 1.620489478111267], + [-3.6088249683380127, 5.981508255004883], + [-3.272691011428833, -1.7369296550750732], + [-1.2006726264953613, 8.773576736450195], + [-1.3317248821258545, 11.809059143066406], + [0.5703905820846558, -5.484877586364746], + [-4.9200029373168945, 7.022735118865967], + [0.6015779972076416, -8.503125190734863], + [2.36271071434021, 0.31839191913604736], + [0.024904780089855194, 5.245172023773193], + [-0.3242000937461853, -1.7177339792251587], + [1.159417986869812, 1.6528559923171997], + [0.6427227854728699, -8.217540740966797], + [0.7675040364265442, 8.19062328338623], + [1.479738712310791, -4.390079975128174], + [-0.9259589314460754, 10.301952362060547], + [-4.958798885345459, 6.54388952255249], + [5.457547187805176, 8.284383773803711], + [0.4269034266471863, 4.847212791442871], + [-5.085943698883057, -1.318027377128601], + [-0.4299051761627197, 7.306058883666992], + [-0.38631540536880493, 9.897013664245605], + [1.7863624095916748, 2.316603183746338], + [-1.5120662450790405, 1.9346237182617188], + [0.8358224034309387, -6.731909275054932], + [-3.696716070175171, -0.7119795083999634], + [2.477020025253296, -4.525629043579102], + [2.538992166519165, -4.928213119506836], + [1.344233751296997, -6.2898125648498535], + [-4.580262660980225, -3.156336545944214], + [1.1251366138458252, 5.551630973815918], + [-4.025104999542236, 5.969662189483643], + [-3.658975601196289, 0.019614513963460922], + [6.8222174644470215, -3.546276807785034], + [1.049635648727417, -0.05335367098450661], + [2.8060500621795654, -4.597413063049316], + [1.9019784927368164, 5.221925735473633], + [-3.292314052581787, -1.3765300512313843], + [0.1781265139579773, -6.108027458190918], + [-3.82122540473938, 4.075692176818848], + [1.2896180152893066, 0.3097284436225891], + [1.0465935468673706, -0.4476470351219177], + [4.808862209320068, -3.6405680179595947], + [-2.949737787246704, 4.200081825256348], + [-4.079119682312012, -2.6801083087921143], + [-1.784142017364502, 0.4901527166366577], + [-4.820202350616455, 6.1222639083862305], + [1.1724516153335571, -4.526850700378418], + [-0.3035277724266052, 9.066496849060059], + [2.117764949798584, 6.101729393005371], + [1.9516253471374512, -5.49050235748291], + [8.334634780883789, -3.329617738723755], + [1.4444143772125244, 4.795729637145996], + [-1.9727152585983276, -0.7507294416427612], + [-3.491389036178589, -2.9223806858062744], + [-3.664358377456665, 6.228628635406494], + [-4.913869857788086, -1.554529070854187], + [7.8083720207214355, -2.7899773120880127], + [0.41156357526779175, -6.7656073570251465], + [0.9478461146354675, -7.747071266174316], + [1.9120426177978516, 2.777395486831665], + [-0.34834614396095276, -1.4480077028274536], + [-3.5587475299835205, -1.2749042510986328], + [1.8246012926101685, 2.3861701488494873], + [-1.0656828880310059, -1.1459906101226807], + [5.0958733558654785, -3.2804315090179443], + [2.8353519439697266, 6.688917636871338], + [-1.5996675491333008, 1.300421953201294], + [1.3061013221740723, 5.267528533935547], + [2.861818313598633, -4.990747451782227], + [0.47891688346862793, -0.6995416283607483], + [-5.43081521987915, 6.565140247344971], + [-1.5291625261306763, 1.768221139907837], + [2.507585287094116, -4.269662857055664], + [-0.27371150255203247, 8.065388679504395], + [-5.563991069793701, 7.457854747772217], + [-1.1360602378845215, 10.031244277954102], + [0.5734778642654419, -7.429360389709473], + [0.5253523588180542, -6.831151962280273], + [0.739339292049408, -9.045637130737305], + [3.3283441066741943, 7.06085205078125], + [0.20244312286376953, -4.897307395935059], + [1.94437575340271, 3.1800670623779297], + [2.984248399734497, 5.852009296417236], + [8.25178337097168, -2.7200734615325928], + [-1.8536691665649414, 2.1190059185028076], + [0.5495736002922058, -6.904454708099365], + [-0.9460210204124451, 10.473006248474121], + [-4.447692394256592, -1.2699655294418335], + [6.430192947387695, -2.872361421585083], + [2.4638659954071045, -4.994222164154053], + [0.026943199336528778, 4.886956214904785], + [-2.2429234981536865, 1.3866709470748901], + [0.5677660703659058, -0.7088964581489563], + [1.361344814300537, 4.83768892288208], + [1.529949426651001, 0.28404632210731506], + [-0.9728590250015259, 10.06492805480957], + [1.9876658916473389, 7.132139682769775], + [-0.9171213507652283, 10.133581161499023], + [-2.8373286724090576, -0.7963366508483887], + [-2.220396041870117, -2.282027244567871], + [0.5860944986343384, -7.542682647705078], + [-3.4906654357910156, -1.107921838760376], + [-1.1350386142730713, 10.71286392211914], + [1.015923261642456, 8.103883743286133], + [0.702713668346405, -6.879266738891602], + [4.42120361328125, 7.616379261016846], + [-2.1425719261169434, 5.368380546569824], + [0.11961423605680466, -3.5937118530273438], + [1.5285053253173828, 1.5498607158660889], + [6.4663801193237305, -2.7222039699554443], + [0.6341500878334045, -8.59542465209961], + [8.823308944702148, -2.719874620437622], + [-1.3091745376586914, 11.659278869628906], + [2.687570571899414, -4.7159247398376465], + [4.219343662261963, 7.035365581512451], + [0.35077744722366333, -4.309746742248535], + [-3.8001863956451416, -3.0846164226531982], + [-3.3559229373931885, -1.4005513191223145], + [0.09697108715772629, -5.544956684112549], + [-1.4065864086151123, 12.001340866088867], + [0.5675593614578247, -8.022124290466309], + [0.44507795572280884, -6.364816665649414], + [0.5230202078819275, -0.9739658832550049], + [-4.685068607330322, 7.925968170166016], + [-5.28595495223999, -0.5767092704772949], + [2.0652472972869873, 5.297063827514648], + [0.5594568848609924, -6.261237144470215], + [0.6909560561180115, -6.33384895324707], + [-0.35722285509109497, 8.927483558654785], + [5.02739143371582, 7.697219371795654], + [-4.378292083740234, -3.1842219829559326], + [0.4592878818511963, -6.763782501220703], + [-4.965036869049072, 6.228008270263672], + [8.032605171203613, -2.28694224357605], + [5.808202266693115, -1.1820285320281982], + [2.2878541946411133, -5.4690423011779785], + [-4.3414435386657715, -2.209810972213745], + [-4.393160343170166, -2.828080892562866], + [2.676443576812744, -4.443814277648926], + [-4.5325798988342285, -0.9584668278694153], + [2.4375431537628174, -4.16459846496582], + [5.883950710296631, -2.8344192504882812], + [-5.121448516845703, 6.356956481933594], + [0.4963732361793518, -7.4094133377075195], + [-3.3498213291168213, -1.0119554996490479], + [-1.962050437927246, 2.338675022125244], + [6.253047466278076, -3.1198360919952393], + [-1.6488831043243408, 1.7455835342407227], + [-1.2289284467697144, 11.260372161865234], + [1.3536908626556396, 5.106776714324951], + [-0.3142242431640625, 9.794207572937012], + [-3.7814180850982666, 5.739827632904053], + [-0.3040473461151123, 8.614384651184082], + [0.30744659900665283, -6.771928787231445], + [0.9863001704216003, 0.7613666653633118], + [0.09980910271406174, -0.8374510407447815], + [-2.4224355220794678, 5.397785186767578], + [1.1876378059387207, 0.6963963508605957], + [-5.2900004386901855, 5.512749195098877], + [-4.265286922454834, -1.0921916961669922], + [7.8121867179870605, -3.1718103885650635], + [-3.7203309535980225, -1.254102110862732], + [-1.2409074306488037, 11.200881958007812], + [2.93465518951416, -4.816461563110352], + [8.029815673828125, -2.4559810161590576], + [-4.653054237365723, 6.397820472717285], + [-3.617847442626953, -0.7143577933311462], + [-3.277425527572632, 0.02765708789229393], + [2.6914827823638916, -4.101443290710449], + [0.3722013831138611, -6.571406364440918], + [2.362535238265991, 5.859126567840576], + [-0.8555559515953064, 10.390239715576172], + [-3.2056236267089844, 6.096296787261963], + [2.7274892330169678, -4.58831787109375], + [2.09859561920166, -4.216802597045898], + [-1.539167046546936, 12.304956436157227], + [3.1199519634246826, -5.217806816101074], + [0.5537819862365723, -6.961781024932861], + [0.6588395833969116, -8.676066398620605], + [-4.00287389755249, -1.2484649419784546], + [-4.4848761558532715, 5.453235149383545], + [0.6552104353904724, -8.518560409545898], + [-4.293030738830566, 6.307155132293701], + [-3.757452964782715, -2.160508394241333], + [-5.440422534942627, 4.175563335418701], + [1.451313853263855, 1.774227499961853], + [1.9262001514434814, 4.587213516235352], + [0.4715079069137573, -7.279231071472168], + [1.7403138875961304, 2.063330888748169], + [-1.428096055984497, -0.9947865009307861], + [-0.0246242955327034, 0.5771584510803223], + [-3.3925578594207764, 5.063549995422363], + [-3.2600181102752686, -1.688502550125122], + [-3.271097421646118, -1.7914572954177856], + [1.7928770780563354, 5.156925201416016], + [-3.5782182216644287, -2.011451244354248], + [2.5061421394348145, 0.6733762621879578], + [0.20807665586471558, -6.267919063568115], + [-0.8989418148994446, 10.013460159301758], + [5.356550693511963, 8.223102569580078], + [9.359286308288574, -2.775062084197998], + [1.0864849090576172, -5.75929594039917], + [-3.8544251918792725, 6.029788970947266], + [-3.5594441890716553, -0.4783998131752014], + [-4.204794406890869, 0.9910091161727905], + [-1.6727817058563232, 0.9705797433853149], + [-1.190684199333191, 10.881102561950684], + [9.439623832702637, -2.9232523441314697], + [-5.778887748718262, 2.237375497817993], + [-0.1903896927833557, -1.8359088897705078], + [-0.5500685572624207, 9.522298812866211], + [-2.619961977005005, -0.16661930084228516], + [-1.306057095527649, 11.776556015014648], + [0.7377739548683167, -8.789591789245605], + [2.563692808151245, 4.083309173583984], + [-1.0695722103118896, 10.899624824523926], + [2.3634750843048096, 5.684966087341309], + [-1.161429524421692, 10.674973487854004], + [-1.0421335697174072, 11.431415557861328], + [1.8614187240600586, 4.246336936950684], + [2.8987295627593994, -4.8307204246521], + [-0.2528667747974396, -1.9964953660964966], + [-3.272775411605835, 0.27305781841278076], + [0.4765157699584961, -6.6549530029296875], + [2.6050007343292236, -4.956172943115234], + [-2.4646246433258057, -1.3162747621536255], + [1.7553741931915283, -4.846368789672852], + [0.36580467224121094, -5.764298439025879], + [-0.02028108388185501, -4.10749626159668], + [0.4687647819519043, -7.328167915344238], + [9.22105884552002, -2.989790201187134], + [-0.9889629483222961, 10.921382904052734], + [-3.20770525932312, -1.2521905899047852], + [-0.8683320879936218, 10.302797317504883], + [6.264151096343994, -1.9093250036239624], + [7.405050754547119, -3.347241163253784], + [0.11998333781957626, -1.1447199583053589], + [2.6570537090301514, -4.593391418457031], + [-3.311990976333618, -2.0071637630462646], + [0.6062436103820801, 6.225103378295898], + [0.6185120940208435, -7.862887859344482], + [-1.7504541873931885, -2.081517457962036], + [2.5929677486419678, -4.75678014755249], + [-5.6417460441589355, -0.7998303771018982], + [2.0271613597869873, -4.917924880981445], + [2.3022959232330322, -4.828969478607178], + [-3.1972477436065674, 0.6704932451248169], + [2.4055638313293457, 4.365982532501221], + [1.9671485424041748, 0.2888159155845642], + [1.6402417421340942, -5.518218994140625], + [-3.405665874481201, -1.3461114168167114], + [0.6695718169212341, 9.383875846862793], + [-3.888700246810913, 6.596430778503418], + [-3.2354748249053955, -1.2339503765106201], + [2.769171953201294, -4.4245147705078125], + [2.805265188217163, -4.898035049438477], + [-3.6523542404174805, 5.942832946777344], + [0.6011521220207214, -7.710355758666992], + [1.916579008102417, 3.5818097591400146], + [-3.586679697036743, -1.3993314504623413], + [2.262305498123169, 0.47855156660079956], + [-3.977952718734741, 6.220707416534424], + [4.61133337020874, 7.512187480926514], + [-2.364882707595825, -0.8417896032333374], + [-4.282952785491943, -2.2749664783477783], + [-3.3099334239959717, 5.226897239685059], + [2.118762254714966, 5.618200302124023], + [-0.8023003339767456, -0.13011159002780914], + [-2.4702084064483643, 2.4740946292877197], + [2.23970890045166, 3.7870709896087646], + [1.2811144590377808, 5.5801544189453125], + [-3.3550846576690674, -1.3870735168457031], + [0.4868854284286499, -4.507671356201172], + [-5.724637508392334, -0.8440588116645813], + [0.5543715357780457, -7.54331111907959], + [-2.788499116897583, 2.844144821166992], + [-0.7518513798713684, 10.434307098388672], + [-1.9591091871261597, 0.8156324625015259], + [0.4690321683883667, -6.3858418464660645], + [-0.8407428860664368, 10.602121353149414], + [-0.9601536989212036, 10.926271438598633], + [3.0261802673339844, -4.360252857208252], + [0.6675455570220947, -7.022277355194092], + [-3.246687412261963, -2.8563504219055176], + [0.5187897086143494, -7.631227970123291], + [-3.4044129848480225, -1.0044444799423218], + [1.5900483131408691, 3.9890763759613037], + [-3.5470783710479736, -3.0078303813934326], + [0.8356702923774719, 4.429601669311523], + [-3.00346040725708, -0.5057688355445862], + [-2.651745557785034, -3.757969379425049], + [-2.0136818885803223, 1.842421054840088], + [-1.71187162399292, 1.9088795185089111], + [4.545003414154053, -0.3006110191345215], + [-1.1603515148162842, -2.9716694355010986], + [-1.2882214784622192, 11.257917404174805], + [9.814175605773926, -2.9546124935150146], + [2.7844979763031006, -5.030759334564209], + [1.7337658405303955, 0.8804298639297485], + [2.5227646827697754, -3.8464341163635254], + [0.4697546362876892, -6.802717208862305], + [-3.4884870052337646, 5.3632493019104], + [2.348860263824463, 5.142731189727783], + [-4.182076930999756, -0.8026605844497681], + [-2.4389734268188477, -0.49839866161346436], + [0.7682867646217346, -7.803179740905762], + [0.9367709755897522, -6.284636497497559], + [6.07858943939209, -1.318647861480713], + [0.6408053040504456, -4.835035800933838], + [-5.674097537994385, 7.923861503601074], + [5.795627117156982, -1.3030034303665161], + [2.3002617359161377, 5.795831680297852], + [-0.6995708346366882, 10.413677215576172], + [0.2988929748535156, -6.26396369934082], + [0.3502503037452698, -5.431021690368652], + [-0.40912219882011414, -1.3874841928482056], + [2.788830518722534, -4.312201976776123], + [-1.6303097009658813, -0.24152815341949463], + [0.6364266872406006, -8.75550651550293], + [-1.9067516326904297, 0.4851670265197754], + [-0.5761512517929077, -3.4292495250701904], + [1.4680575132369995, 4.895633697509766], + [-3.781519651412964, -1.8376774787902832], + [-1.0978615283966064, 9.992701530456543], + [-1.3059086799621582, 12.023615837097168], + [2.569035291671753, -4.863463401794434], + [-5.337690353393555, -1.5413439273834229], + [6.9197611808776855, -4.008822441101074], + [-1.1964211463928223, 11.219989776611328], + [-4.438107967376709, -3.7977726459503174], + [-4.957674026489258, 6.524350166320801], + [-0.9543380737304688, 10.524932861328125], + [0.6903419494628906, -5.206036567687988], + [-3.3999691009521484, 3.501823663711548], + [2.647399663925171, -4.280020236968994], + [-0.6644088625907898, -1.1187225580215454], + [6.670806407928467, -3.395581007003784], + [-4.231695652008057, -1.764011025428772], + [-4.01848030090332, -2.0812716484069824], + [-0.4115063548088074, 9.069705963134766], + [-1.271217942237854, 11.909208297729492], + [-0.45430320501327515, 0.9697109460830688], + [0.026142023503780365, -4.842436790466309], + [-0.35829561948776245, 10.021387100219727], + [0.6545285582542419, -7.501225471496582], + [0.37545210123062134, -6.182454586029053], + [-0.7665697932243347, 9.846475601196289], + [-1.3774861097335815, 11.154199600219727], + [-4.179370403289795, 4.870383262634277], + [1.083861231803894, -5.350815773010254], + [0.9877957701683044, 4.83543586730957], + [-1.3850020170211792, 11.493380546569824], + [-0.2854212522506714, 5.460171699523926], + [2.665374994277954, 5.401764869689941], + [-1.2364422082901, 10.749431610107422], + [-3.954752206802368, 3.49780011177063], + [-0.40374794602394104, 7.470634460449219], + [-4.8691725730896, 5.867372512817383], + [-3.871990442276001, -3.0364267826080322], + [-0.9258521199226379, 10.391216278076172], + [4.9630866050720215, -2.7453181743621826], + [-5.099788665771484, 6.7330121994018555], + [8.299189567565918, -2.590444326400757], + [6.99008846282959, -3.621572732925415], + [-4.1603851318359375, 3.060617685317993], + [-0.01054287701845169, -4.963757514953613], + [2.981266975402832, -4.858083724975586], + [0.8544542193412781, -5.369192600250244], + [-2.28204345703125, -0.7602769732475281], + [1.8096123933792114, 4.300697326660156], + [-3.3918063640594482, -4.270653247833252], + [0.40174931287765503, -6.47314453125], + [1.2082394361495972, -5.1848344802856445], + [0.6301419734954834, -7.855151653289795], + [-1.3904523849487305, -2.7080471515655518], + [-2.1633975505828857, 0.11261653900146484], + [0.6727617979049683, -8.959920883178711], + [-4.327720642089844, -1.4085416793823242], + [-1.5042587518692017, -2.773639678955078], + [-3.490551233291626, 5.533343315124512], + [-3.793565511703491, 1.6547552347183228], + [-3.0627195835113525, 4.339184761047363], + [-3.501429796218872, 5.364616870880127], + [-1.468064546585083, 12.281742095947266], + [-0.5384834408760071, 9.582388877868652], + [2.0588228702545166, 4.670430660247803], + [1.6715660095214844, 0.25924280285835266], + [0.887592613697052, 4.928295135498047], + [-1.0374153852462769, 10.467325210571289], + [-4.246368885040283, -2.899080514907837], + [-3.5048470497131348, -0.7530481815338135], + [0.6442150473594666, -5.106480121612549], + [0.45689862966537476, -7.139214038848877], + [0.5595972537994385, -6.881008625030518], + [1.8940101861953735, 2.5650525093078613], + [9.648813247680664, -2.9494988918304443], + [-0.8624148964881897, 11.1536865234375], + [0.49399334192276, -5.318803310394287], + [-1.2207865715026855, 12.109413146972656], + [2.3149311542510986, -5.359523773193359], + [-0.6186276078224182, -0.5355344414710999], + [2.3108644485473633, -4.272475242614746], + [3.3778111934661865, 6.918505668640137], + [0.3468438386917114, -6.443938255310059], + [2.043142318725586, 5.162075519561768], + [-4.656915664672852, -3.419968843460083], + [7.896454334259033, -2.3710601329803467], + [1.298785924911499, 4.635969161987305], + [-0.3729265034198761, -2.8727359771728516], + [0.005825571715831757, -4.670241832733154], + [-0.3319607377052307, -1.792441725730896], + [0.593165934085846, -8.17303466796875], + [-2.940986394882202, 3.064795732498169], + [-1.9098896980285645, 0.8549277782440186], + [-2.125244617462158, -0.967095673084259], + [1.492415428161621, 5.688725471496582], + [-4.113630771636963, 5.166573524475098], + [2.6020400524139404, 6.343657493591309], + [-4.082372188568115, -1.041771411895752], + [-3.6619906425476074, -1.763532280921936], + [2.333688735961914, -4.264991283416748], + [-0.7064656019210815, 10.104745864868164], + [1.2506108283996582, 2.98813796043396], + [0.817409098148346, -8.703499794006348], + [2.277425527572632, 0.46789538860321045], + [-2.9099559783935547, 4.943307876586914], + [-1.2068431377410889, 10.496795654296875], + [3.797121524810791, 6.967696189880371], + [-0.5608097314834595, -1.2522497177124023], + [-0.8982490301132202, 1.079392671585083], + [-4.056100845336914, -1.0842736959457397], + [8.4008150100708, -2.5727219581604004], + [-0.5002673864364624, 8.413604736328125], + [8.353141784667969, -3.201876401901245], + [-3.4450266361236572, -2.5818703174591064], + [1.258009672164917, 1.7359102964401245], + [-1.1456845998764038, 11.295724868774414], + [-0.08736933022737503, 9.197510719299316], + [-4.708149433135986, -3.5867719650268555], + [-4.811976909637451, -1.0720458030700684], + [8.470674514770508, -2.667571783065796], + [0.19396930932998657, -5.548424243927002], + [-2.2171809673309326, 0.4486865997314453], + [2.148042678833008, -4.056406021118164], + [2.623868942260742, 6.425639629364014], + [-1.2766779661178589, 1.4906916618347168], + [-1.0671809911727905, 4.726202487945557], + [0.41233962774276733, -6.712399959564209], + [2.7631771564483643, -4.56629753112793], + [2.4896597862243652, -5.654409885406494], + [-1.8849987983703613, 1.3659125566482544], + [3.228809118270874, -5.321718215942383], + [-0.669762909412384, 9.597728729248047], + [5.738372325897217, -1.501829981803894], + [-3.510528802871704, 5.334212303161621], + [1.9103477001190186, 5.894749164581299], + [-5.346168041229248, 7.560338973999023], + [0.4444662928581238, -6.961893081665039], + [1.2546539306640625, -5.0269975662231445], + [2.0814743041992188, 7.156669616699219], + [-1.1342191696166992, 11.305776596069336], + [7.262933731079102, -3.3075287342071533], + [0.4932463765144348, -7.031491756439209], + [-4.875991344451904, 5.308533668518066], + [-3.223238706588745, 5.5072221755981445], + [0.6529335379600525, -6.081293106079102], + [2.140977621078491, -5.351333141326904], + [0.7014011144638062, -7.484106063842773], + [0.578413724899292, -8.187440872192383], + [1.7443263530731201, 0.45422422885894775], + [3.1457359790802, -4.937727928161621], + [0.7509179711341858, -4.45316219329834], + [-1.2520084381103516, 11.206787109375], + [-4.020593643188477, -0.3201855421066284], + [2.9878225326538086, -4.87318229675293], + [-1.1138650178909302, 9.635848999023438], + [0.042731039226055145, -5.582069396972656], + [0.6050962805747986, -6.778080940246582], + [0.49543875455856323, -6.724153995513916], + [-2.48717999458313, -2.216806411743164], + [-1.631801962852478, 1.5232568979263306], + [0.6167773008346558, -4.14378547668457], + [2.2923192977905273, 4.965201377868652], + [5.190317153930664, -5.137636661529541], + [-3.9405999183654785, -1.5577651262283325], + [-1.3495018482208252, -2.2956924438476562], + [1.7396291494369507, -4.638360977172852], + [-1.9702601432800293, 0.5141721367835999], + [-5.381564140319824, -0.8643436431884766], + [4.107492923736572, 7.193187713623047], + [2.052088499069214, -5.604875564575195], + [1.895150899887085, -4.587977409362793], + [-2.768247604370117, 4.22305965423584], + [2.0899553298950195, 5.65791654586792], + [-3.5196826457977295, 4.446877479553223], + [0.7413713335990906, 5.816784381866455], + [1.7907111644744873, 0.20950967073440552], + [0.30543389916419983, 2.6342220306396484], + [0.5995745062828064, -0.5182240605354309], + [-0.5883695483207703, 10.064781188964844], + [3.0304596424102783, -4.653930187225342], + [-2.8113064765930176, 6.011457920074463], + [-5.45301628112793, -1.000133752822876], + [-0.07642275840044022, -3.348703145980835], + [2.2332265377044678, 3.819866180419922], + [2.047758102416992, -5.163589000701904], + [1.122997522354126, 5.90088415145874], + [1.698720932006836, 4.76042366027832], + [7.934976100921631, -3.2489120960235596], + [0.5870500206947327, -8.06149673461914], + [0.9041065573692322, -0.07652044296264648], + [-1.6273690462112427, 1.4171863794326782], + [-1.7561168670654297, 1.689858078956604], + [0.9527503848075867, -0.08067703247070312], + [-2.3729255199432373, -1.1296011209487915], + [7.254284381866455, -2.473529100418091], + [-3.045171022415161, -1.5912150144577026], + [1.7121495008468628, -5.050803184509277], + [-1.0208373069763184, 9.120810508728027], + [-0.0299360528588295, -4.333539962768555], + [-1.5181199312210083, -1.0887151956558228], + [-0.28697147965431213, -0.9804849624633789], + [-1.4090131521224976, 0.8461542129516602], + [-3.3863232135772705, -0.8640086054801941], + [-3.0490102767944336, 3.228379487991333], + [0.6079875230789185, -7.559435844421387], + [-3.096949815750122, 6.863913059234619], + [0.6871384978294373, -5.07305908203125], + [-3.368818998336792, -3.100858449935913], + [2.897691488265991, -5.022006034851074], + [0.7074179649353027, -5.20953369140625], + [6.794894695281982, -2.9587340354919434], + [-5.679244518280029, 4.989357948303223], + [-3.8469808101654053, -1.0648326873779297], + [-0.586328387260437, 9.647276878356934], + [1.5813050270080566, -5.634247303009033], + [-3.592383861541748, -2.06866717338562], + [-4.794243812561035, 4.392679214477539], + [2.8242881298065186, -4.329882621765137], + [0.4454260468482971, -3.582404375076294], + [0.6115964651107788, -7.716141700744629], + [0.48771989345550537, -5.981686592102051], + [5.799837589263916, -1.2823518514633179], + [1.1151673793792725, 5.692922592163086], + [0.4499262571334839, -4.980238437652588], + [6.606810569763184, -5.364590644836426], + [5.026397228240967, -2.9758872985839844], + [0.5615662932395935, -7.0260138511657715], + [-5.068482875823975, -1.7918665409088135], + [0.0031650885939598083, -1.406431794166565], + [-1.8910390138626099, 1.2294131517410278], + [2.6724274158477783, -4.272771835327148], + [0.47750091552734375, -5.4679059982299805], + [-5.756865978240967, 3.8689351081848145], + [2.022033214569092, -5.691708564758301], + [0.14157938957214355, -4.832427978515625], + [0.398753821849823, -5.4897685050964355], + [0.5390551090240479, -6.2078752517700195], + [-4.911597728729248, 4.739978790283203], + [0.8077327609062195, -4.52197265625], + [2.247004270553589, 4.923449516296387], + [1.2224655151367188, -6.385311603546143], + [-4.808363914489746, -3.856689929962158], + [-0.985318124294281, -2.983691692352295], + [-0.19594287872314453, 7.396505355834961], + [0.5316895842552185, -5.189523696899414], + [-3.0091280937194824, -1.4624412059783936], + [0.15450549125671387, -5.919857978820801], + [2.4175076484680176, -4.750625133514404], + [-1.2432212829589844, 11.14576530456543], + [-4.948657989501953, 7.112676620483398], + [-1.1227085590362549, 9.90146255493164], + [1.85368812084198, 4.910666465759277], + [2.976548910140991, 6.37933349609375], + [2.1344873905181885, 4.313715934753418], + [-1.963474988937378, 2.0666215419769287], + [-1.4986393451690674, -0.684253990650177], + [-1.5242362022399902, 2.1572070121765137], + [-5.363613128662109, 7.239418983459473], + [5.787458419799805, -1.1820911169052124], + [0.1440441608428955, -5.27538537979126], + [-4.662225723266602, 5.087972640991211], + [0.6832480430603027, -8.97802448272705], + [-1.6584970951080322, 1.0543382167816162], + [2.3802735805511475, 0.5362367630004883], + [-1.6253819465637207, 12.741861343383789], + [-0.8054353594779968, 10.509644508361816], + [-5.0506062507629395, 5.4089813232421875], + [0.5820457339286804, -7.400050640106201], + [7.618908405303955, -3.8726561069488525], + [0.3256361484527588, -6.613100051879883], + [2.650883436203003, -4.46097469329834], + [2.4920504093170166, -4.892253875732422], + [-3.9136927127838135, -2.7926785945892334], + [-3.4795949459075928, -1.3433774709701538], + [-3.5843992233276367, -1.400452971458435], + [-1.166015386581421, 10.906349182128906], + [-3.4840192794799805, -0.7870722413063049], + [0.8987815380096436, -5.163466453552246], + [4.9196319580078125, -3.308196783065796], + [-3.5295450687408447, -1.087334156036377], + [0.7193959355354309, -8.53448486328125], + [1.591851830482483, 4.404268741607666], + [7.363437175750732, -3.265679121017456], + [-5.032130718231201, -3.8522870540618896], + [2.6209495067596436, -4.672056674957275], + [-4.328310012817383, -1.2575515508651733], + [-4.458420276641846, -3.6422841548919678], + [5.955776691436768, -1.3036695718765259], + [2.4452602863311768, 4.647266864776611], + [8.176300048828125, -2.4012529850006104], + [5.249260902404785, -1.253618836402893], + [-4.808713436126709, -3.147055149078369], + [-1.8374978303909302, 1.2845250368118286], + [-1.9818283319473267, 1.8909971714019775], + [-4.135295391082764, -1.9177696704864502], + [7.147370338439941, -3.6386966705322266], + [-3.4755494594573975, -1.194014549255371], + [0.4553236961364746, -1.2660669088363647], + [-3.8063414096832275, -3.580034017562866], + [-1.4284886121749878, 0.8132264018058777], + [-3.384018659591675, -2.6228384971618652], + [2.282323122024536, 0.5924311876296997], + [-0.9887087345123291, 10.887006759643555], + [-1.605431318283081, -0.04530465975403786], + [-6.157577037811279, 3.9499011039733887], + [-4.560801029205322, -4.165093898773193], + [0.6337580680847168, -5.853759288787842], + [-3.668259382247925, 5.992115020751953], + [-3.7879505157470703, -3.383962631225586], + [-1.3972365856170654, -0.8021954298019409], + [-0.3251087963581085, -0.9335927963256836], + [-0.3451980948448181, -1.014500379562378], + [2.4961774349212646, -4.799683570861816], + [1.2603378295898438, -6.298933982849121], + [2.1376631259918213, 3.499924898147583], + [7.513638973236084, -2.3880178928375244], + [-0.37913718819618225, -3.049104928970337], + [-3.7255847454071045, 7.709164619445801], + [-3.11344313621521, 6.874356269836426], + [-0.7928487658500671, 9.577459335327148], + [-4.119666576385498, -3.0957679748535156], + [-0.4533177614212036, 9.899826049804688], + [-3.6178505420684814, -0.8365228772163391], + [0.615570604801178, 1.7746609449386597], + [4.735512733459473, 7.546104907989502], + [-5.584765911102295, -0.6766929626464844], + [2.4441580772399902, -4.855605125427246], + [2.1076924800872803, -4.542902946472168], + [-3.963951349258423, -0.49286413192749023], + [-0.3356223702430725, -1.3543225526809692], + [-5.096889019012451, 6.5116143226623535], + [1.8680088520050049, 5.892904281616211], + [3.0257608890533447, -4.929291725158691], + [5.4755096435546875, -3.5883243083953857], + [-0.06804455071687698, -1.6876031160354614], + [4.9201788902282715, -1.7893468141555786], + [2.4772026538848877, 4.002115726470947], + [1.5503427982330322, -6.69737434387207], + [-5.171093463897705, 5.811793804168701], + [-5.219996452331543, -1.3193755149841309], + [7.744473934173584, -3.595804452896118], + [2.170121431350708, -5.779795169830322], + [2.856780767440796, -4.80649471282959], + [-2.806734323501587, -0.9519538879394531], + [-4.774662017822266, 5.370188236236572], + [-3.072406768798828, -1.1040512323379517], + [3.500107765197754, 6.700495719909668], + [-1.043296456336975, 10.741266250610352], + [-3.97473406791687, -3.344043731689453], + [-0.8065099120140076, 10.265142440795898], + [-0.6196385025978088, -1.6645967960357666], + [5.757455348968506, 8.893150329589844], + [-1.7808268070220947, -0.542873740196228], + [1.6962237358093262, -5.624052047729492], + [-2.987436294555664, -0.16628533601760864], + [-0.3604990243911743, 10.350421905517578], + [-0.9534458518028259, 10.227375030517578], + [-4.001277446746826, -2.9863440990448], + [-4.275831699371338, -1.5719162225723267], + [1.5198254585266113, 4.851067543029785], + [-1.8304704427719116, 2.1442503929138184], + [0.8898009657859802, -7.883151054382324], + [1.3820946216583252, 5.346621036529541], + [0.05498652905225754, 4.053356170654297], + [6.900480270385742, -4.859103202819824], + [5.362385272979736, 0.08687275648117065], + [-4.760749340057373, -1.660573959350586], + [0.6258167028427124, -7.8910932540893555], + [1.5203262567520142, 7.112818717956543], + [-4.177181243896484, -1.1399189233779907], + [-1.3990422487258911, 12.077789306640625], + [6.334845066070557, -2.1562116146087646], + [-0.46942561864852905, -0.08698570728302002], + [2.6343281269073486, -5.077284336090088], + [-4.316099643707275, -0.6307189464569092], + [-1.1799230575561523, 10.888993263244629], + [-3.904888868331909, -2.820040702819824], + [2.6857430934906006, -3.859722375869751], + [1.0028407573699951, 0.14030417799949646], + [-3.7081754207611084, -2.1385271549224854], + [8.999775886535645, -2.72149658203125], + [5.56904935836792, -1.6449122428894043], + [-4.5002264976501465, -3.546839475631714], + [-0.8188837766647339, -1.4360359907150269], + [-2.2425107955932617, 6.097296237945557], + [-2.0368361473083496, 2.500839948654175], + [0.27605748176574707, -6.213667869567871], + [0.986982524394989, -6.40917444229126], + [-2.790156841278076, -3.4866578578948975], + [9.44681453704834, -2.86626935005188], + [-3.8886537551879883, 6.289437294006348], + [6.8399271965026855, -4.758447647094727], + [-5.4202799797058105, 6.563209533691406], + [2.411590099334717, 5.925185680389404], + [-1.007538080215454, -1.185998558998108], + [0.7190124988555908, -8.037677764892578], + [-0.10997042804956436, -1.2824605703353882], + [5.627326011657715, -1.2518559694290161], + [-3.938866376876831, -0.9064719080924988], + [-3.720752716064453, 5.714317321777344], + [-4.814307689666748, 1.8030157089233398], + [0.6520454287528992, -8.897378921508789], + [2.0785610675811768, 1.0926629304885864], + [-1.1142832040786743, 10.949390411376953], + [1.47552490234375, -0.14278054237365723], + [-0.6189178824424744, -0.8993468880653381], + [4.1818647384643555, 7.374090194702148], + [8.075986862182617, -2.796194076538086], + [-3.777723550796509, -1.2566102743148804], + [-3.0365004539489746, -0.7875549793243408], + [-1.7437658309936523, 1.0058590173721313], + [2.4418747425079346, 5.789961814880371], + [-1.2707982063293457, 11.386543273925781], + [-3.5935707092285156, -1.8984029293060303], + [-3.505488872528076, -1.3761502504348755], + [3.993779420852661, -4.5722246170043945], + [1.4661340713500977, 5.099701881408691], + [-2.6897807121276855, 2.7186996936798096], + [-5.682775974273682, 5.039536476135254], + [-0.21499085426330566, 3.283953905105591], + [-0.25737395882606506, -1.2256447076797485], + [-1.2101033926010132, -0.7116917371749878], + [-1.241653323173523, 1.2452658414840698], + [-4.9889445304870605, -4.282078266143799], + [2.4726827144622803, 0.7549390196800232], + [-5.6129536628723145, 7.108870506286621], + [1.6483821868896484, -5.623208999633789], + [8.471905708312988, -3.053875207901001], + [-3.501544713973999, -1.6776896715164185], + [-1.103643536567688, 11.089195251464844], + [0.19944101572036743, -4.908208847045898], + [1.4382790327072144, -5.552093982696533], + [-1.277239441871643, 1.6750441789627075], + [6.856881618499756, -2.071535348892212], + [-5.090134143829346, -1.0447109937667847], + [6.871339321136475, -2.1813242435455322], + [5.905472755432129, -4.273094177246094], + [0.12165891379117966, -5.310715198516846], + [1.0491467714309692, -0.48905473947525024], + [7.782584190368652, -3.6264779567718506], + [-2.5471036434173584, 2.281616449356079], + [-1.2651547193527222, 0.49647754430770874], + [6.1550984382629395, -1.2155126333236694], + [-3.325190305709839, -2.424457311630249], + [-5.680530548095703, 4.049314498901367], + [6.1174397468566895, -1.7105296850204468], + [-0.2242957353591919, 8.529399871826172], + [0.06751810759305954, -1.5687650442123413], + [1.583911418914795, 0.33800655603408813], + [-1.885227918624878, 2.27360463142395], + [-4.685419082641602, 6.106685638427734], + [-0.08797026425600052, -2.081529378890991], + [2.4043233394622803, -4.780022144317627], + [-4.195762634277344, -2.594816207885742], + [-4.779050827026367, 7.085907936096191], + [-4.058685302734375, -2.6810824871063232], + [7.986884593963623, -2.9026877880096436], + [0.6601341962814331, -8.215229034423828], + [2.140293836593628, -4.561738014221191], + [-1.1290706396102905, 11.328207015991211], + [-1.9534989595413208, 1.782318115234375], + [-0.848264217376709, 0.9940935373306274], + [0.4109606146812439, 8.720425605773926], + [4.178793907165527, 7.1989545822143555], + [-4.272461891174316, 6.0982208251953125], + [-1.6966156959533691, 2.4315881729125977], + [1.701659917831421, 5.443502426147461], + [0.5633469223976135, -5.950063228607178], + [-0.7258131504058838, 11.039567947387695], + [1.6240791082382202, 1.6878656148910522], + [-0.7202603220939636, 10.128293991088867], + [-2.4705569744110107, 2.5077178478240967], + [8.748000144958496, -2.503221035003662], + [0.6680397987365723, -4.515219688415527], + [3.0937156677246094, -4.828710556030273], + [-2.3559131622314453, -2.4769175052642822], + [0.8293816447257996, -7.428665637969971], + [-3.6614716053009033, -1.5120469331741333], + [-1.9254562854766846, 1.9881500005722046], + [1.4903534650802612, 1.3861196041107178], + [-0.1817074418067932, -1.0753538608551025], + [0.6091107726097107, -7.39200496673584], + [-0.7817028164863586, 11.360479354858398], + [-4.485002517700195, 4.860199928283691], + [4.604578018188477, -3.55454683303833], + [-4.233274936676025, -0.9673831462860107], + [-2.4272353649139404, 2.092806816101074], + [5.697694301605225, -2.318265676498413], + [1.940453052520752, -5.669834136962891], + [2.6628339290618896, -4.4849853515625], + [-2.2374789714813232, 2.1988582611083984], + [0.5489511489868164, -7.931466579437256], + [1.9982397556304932, 4.209161281585693], + [-0.20571774244308472, 8.555695533752441], + [0.5291229486465454, -6.112642288208008], + [-3.574427843093872, -2.1549391746520996], + [-3.7030670642852783, -2.684849500656128], + [-0.41303783655166626, 0.6202284693717957], + [2.4140753746032715, -5.235995292663574], + [2.6449646949768066, -4.80422306060791], + [-0.7080566883087158, 10.452690124511719], + [-1.1666902303695679, 10.537139892578125], + [8.511305809020996, -2.537745714187622], + [-4.6373982429504395, -0.981293797492981], + [0.5339757800102234, -7.695305824279785], + [0.24939805269241333, 0.405055969953537], + [2.626546859741211, 6.793000221252441], + [-3.451608419418335, -1.1212338209152222], + [3.269193410873413, 6.1950788497924805], + [1.7248764038085938, 0.34763818979263306], + [-3.2706844806671143, -1.5169379711151123], + [-1.3340517282485962, -1.8213428258895874], + [0.6872625350952148, -6.845143795013428], + [-3.906611442565918, -1.7009793519973755], + [-2.6659722328186035, 2.7617671489715576], + [3.7163925170898438, 7.376529693603516], + [8.205838203430176, -3.193707227706909], + [0.12784790992736816, -5.49552583694458], + [-2.3374903202056885, -1.2973824739456177], + [2.2449147701263428, -3.98075270652771], + [6.710422039031982, -3.2388298511505127], + [-1.807765007019043, 0.9124455451965332], + [-4.256414890289307, 5.510335922241211], + [2.3431310653686523, 4.009438991546631], + [-5.328853607177734, 7.010785102844238], + [-3.52134108543396, -1.369052767753601], + [3.4450037479400635, 6.696489334106445], + [-1.335516333580017, 11.189690589904785], + [2.826232671737671, -4.628007888793945], + [-2.8406379222869873, -1.813201904296875], + [-3.3964996337890625, 6.302161693572998], + [5.202366828918457, 8.093978881835938], + [-3.1769726276397705, 3.1577837467193604], + [2.2632298469543457, -3.8968570232391357], + [1.139573097229004, -6.986027240753174], + [0.5382638573646545, -7.348458766937256], + [0.42067259550094604, -6.280383110046387], + [-3.4958930015563965, 5.351006507873535], + [0.9645243287086487, -5.287170886993408], + [-3.621563196182251, 5.590487003326416], + [1.115126132965088, -5.722684860229492], + [-0.0945674255490303, 8.189151763916016], + [-3.2738254070281982, -1.1172504425048828], + [-0.28864848613739014, 9.118415832519531], + [2.585529327392578, -6.771438121795654], + [0.6713546514511108, -8.839553833007812], + [2.153743267059326, 0.6445004940032959], + [0.7695702910423279, -7.18686580657959], + [-3.1453373432159424, -0.6353228092193604], + [6.391380786895752, -3.4339354038238525], + [-2.9144556522369385, -1.292214035987854], + [1.0948363542556763, 5.929407119750977], + [-3.5626060962677, -1.1928141117095947], + [-4.036239147186279, 5.9895219802856445], + [1.4449591636657715, 5.803588390350342], + [-0.6394700407981873, 10.37102222442627], + [-3.8962793350219727, -3.4469964504241943], + [2.732156276702881, -4.555521011352539], + [2.6328508853912354, 6.245738983154297], + [-3.6657116413116455, -2.153944492340088], + [-3.7234795093536377, -2.331242799758911], + [2.674466371536255, -4.667447566986084], + [8.61434268951416, -2.6796393394470215], + [0.4944078326225281, -7.412616729736328], + [-2.8632280826568604, -0.7226247787475586], + [-1.9366252422332764, 1.6597076654434204], + [-2.6498091220855713, -3.635045289993286], + [7.183265209197998, -1.9936766624450684], + [-0.7350798845291138, 10.465657234191895], + [-1.8615623712539673, 2.0162956714630127], + [-4.376202583312988, 6.029983997344971], + [-2.2072360515594482, 1.6736125946044922], + [-1.9174513816833496, 2.613487482070923], + [-4.048924922943115, 5.994268417358398], + [-1.3423094749450684, -0.879176914691925], + [-1.7440204620361328, 1.7501375675201416], + [-1.4890657663345337, 12.117246627807617], + [-3.630924701690674, -0.7292537689208984], + [-3.806724786758423, -2.625286340713501], + [1.8059601783752441, 5.645874977111816], + [-3.9883034229278564, -1.1468983888626099], + [-0.7248817086219788, -3.1943881511688232], + [1.2268199920654297, -4.512972831726074], + [-1.4243980646133423, 12.267019271850586], + [4.671164512634277, -3.6698691844940186], + [-3.3903145790100098, 6.837622165679932], + [-4.80964994430542, 6.768646240234375], + [1.872854471206665, 0.9468021392822266], + [2.9090499877929688, -4.765681266784668], + [-4.125782012939453, 4.452322483062744], + [6.408680438995361, -1.8010516166687012], + [-2.646480083465576, 2.7221028804779053], + [-1.0052237510681152, 10.162418365478516], + [3.101832151412964, -4.882436752319336], + [0.5642567873001099, -7.218759536743164], + [3.070772886276245, -4.780416488647461], + [-4.099273681640625, 3.8379409313201904], + [-5.394631862640381, -1.8602102994918823], + [-0.03958124667406082, -0.9169803261756897], + [-4.026459217071533, -0.24944090843200684], + [8.943161964416504, -2.7242534160614014], + [2.197955846786499, 5.098598003387451], + [-0.9359892010688782, 10.448307037353516], + [2.0646188259124756, -5.511989593505859], + [1.1471115350723267, -0.009221348911523819], + [4.075628757476807, -4.469696998596191], + [1.187239170074463, 4.743426322937012], + [2.4931304454803467, -4.508296012878418], + [-0.7143629193305969, 10.503753662109375], + [-4.046496391296387, -0.5605281591415405], + [0.7912725210189819, -7.077742576599121], + [0.5718038082122803, -5.2975287437438965], + [1.3326166868209839, 4.611423015594482], + [-4.016035556793213, -1.4964848756790161], + [5.187163829803467, 7.8979811668396], + [-2.4090511798858643, 2.454566240310669], + [-1.5309330224990845, 1.6693055629730225], + [-1.1273998022079468, -1.1824567317962646], + [2.7397701740264893, -4.613387107849121], + [0.8499078750610352, -0.04408219829201698], + [-0.4670487642288208, 9.488201141357422], + [-0.6888630390167236, 9.677629470825195], + [6.305253982543945, -2.4898979663848877], + [-4.633136749267578, 6.8839521408081055], + [2.1541035175323486, 4.396378040313721], + [1.4845048189163208, -4.518692493438721], + [1.602715253829956, -4.276509761810303], + [-1.9599609375, 1.7351994514465332], + [-1.761874794960022, 1.6554738283157349], + [0.002845458686351776, 8.902495384216309], + [-0.9099323749542236, 10.015206336975098], + [-3.9443137645721436, -0.8253180980682373], + [2.898975133895874, -4.9724440574646], + [2.9116127490997314, 6.195697784423828], + [2.6445939540863037, -4.354632377624512], + [-1.112411379814148, -3.1856439113616943], + [-2.275141716003418, -1.2585712671279907], + [1.0516295433044434, -7.627084732055664], + [0.8988103866577148, -7.883273601531982], + [-2.803544759750366, -1.1860642433166504], + [-4.049219608306885, -2.579197645187378], + [-1.290462613105774, 11.451326370239258], + [0.4110531210899353, -6.8698883056640625], + [0.6647682785987854, -9.328451156616211], + [-1.0498898029327393, 10.365789413452148], + [2.0274219512939453, -4.551527976989746], + [-1.4595221281051636, 12.218530654907227], + [-1.4568487405776978, 12.057868957519531], + [-2.9254424571990967, 6.028933525085449], + [1.1109018325805664, -5.98416805267334], + [-1.2775154113769531, 11.548578262329102], + [1.2121328115463257, 1.6550630331039429], + [-1.8748120069503784, 0.3626762628555298], + [2.164877414703369, -4.457962989807129], + [-0.11394030600786209, 7.407148361206055], + [-2.365844249725342, -1.2197383642196655], + [-1.3269802331924438, 11.629261016845703], + [0.24315041303634644, -4.530230522155762], + [-4.388913631439209, -2.7877280712127686], + [2.1457273960113525, -3.953339099884033], + [2.012385129928589, 5.502378940582275], + [1.596498966217041, 5.053782939910889], + [1.2133903503417969, -6.5098090171813965], + [0.6127638220787048, -8.086566925048828], + [-2.7548720836639404, -1.3937063217163086], + [2.7561118602752686, -4.737357139587402], + [0.9928039908409119, 8.31259536743164], + [-0.12098131328821182, -1.1481460332870483], + [-1.82591712474823, 1.580304503440857], + [-2.242021083831787, 0.04417085275053978], + [-5.564873218536377, -1.0263988971710205], + [0.36116862297058105, -6.241077423095703], + [0.9413370490074158, 0.5231601595878601], + [-1.2040441036224365, 10.721527099609375], + [-1.788569450378418, -0.8616697192192078], + [8.122443199157715, -2.8764379024505615], + [-0.8817949295043945, 8.306666374206543], + [-0.7296529412269592, 10.046843528747559], + [2.574380397796631, -4.284145832061768], + [-3.837841510772705, -0.9602755308151245], + [-3.035029649734497, -1.125817894935608], + [1.777660846710205, -4.682564735412598], + [5.903959274291992, -1.850995659828186], + [-4.399956226348877, -0.9227215051651001], + [-0.7912115454673767, 9.78022575378418], + [0.8172415494918823, 0.16936200857162476], + [-3.608630418777466, 8.085482597351074], + [0.288402259349823, -5.765658378601074], + [-2.4910900592803955, -1.6133054494857788], + [-3.827559471130371, -2.45025372505188], + [6.52554988861084, -1.5883419513702393], + [-1.0667537450790405, 10.3372802734375], + [-4.242808818817139, -1.0027220249176025], + [-3.3190243244171143, -1.2878369092941284], + [0.3197120428085327, -7.081914901733398], + [-3.6691133975982666, 5.745505332946777], + [-3.6192238330841064, -0.8945903778076172], + [-0.4012301564216614, 9.332801818847656], + [-5.077836990356445, 1.6275814771652222], + [8.540226936340332, -3.1654016971588135], + [-4.546127796173096, -0.4875524044036865], + [-3.4983410835266113, -2.059389352798462], + [-3.6281931400299072, 4.614541053771973], + [8.512601852416992, -2.5619776248931885], + [-1.4571641683578491, 12.489635467529297], + [0.7668766975402832, -5.360503196716309], + [8.586718559265137, -3.365562915802002], + [-1.0673998594284058, -1.5997282266616821], + [-1.3842428922653198, 11.665560722351074], + [-0.44059669971466064, 7.338369369506836], + [-1.8673255443572998, 1.7200566530227661], + [-2.0045711994171143, -0.11934131383895874], + [-0.09199351817369461, 0.7195475101470947], + [6.840936183929443, -2.5587780475616455], + [-4.094610214233398, -2.7451744079589844], + [-5.542043209075928, -1.1673206090927124], + [-4.845925331115723, 6.226846694946289], + [0.18212464451789856, -5.016022682189941], + [0.6744006872177124, -7.263840198516846], + [0.933776319026947, -0.46444377303123474], + [1.5688207149505615, -5.221567630767822], + [-1.6817207336425781, 1.8426133394241333], + [-2.0737316608428955, 0.9761403799057007], + [0.533636748790741, -5.140919208526611], + [-5.316806793212891, 7.403214931488037], + [-1.9141281843185425, 1.8035199642181396], + [-0.8425464630126953, 9.948249816894531], + [6.466446876525879, -1.3979673385620117], + [-4.989721298217773, -0.7327079772949219], + [3.4677510261535645, -5.326922416687012], + [8.770082473754883, -2.8718199729919434], + [3.675351858139038, -3.3153932094573975], + [4.753091335296631, -3.551424264907837], + [-1.357163906097412, 11.821149826049805], + [0.8636787533760071, -3.8263297080993652], + [2.4019224643707275, -5.870558261871338], + [-1.9846651554107666, 2.1291918754577637], + [-0.552560031414032, 10.204259872436523], + [0.8566381931304932, -6.682969093322754], + [-5.20626974105835, 5.302434921264648], + [-3.7230312824249268, -0.7638586759567261], + [-1.9530829191207886, 2.040457248687744], + [2.6054749488830566, -4.73630952835083], + [0.6930623054504395, -6.774454593658447], + [6.794127941131592, -2.246457815170288], + [5.635388374328613, 8.39260482788086], + [-2.4971365928649902, -0.228563129901886], + [2.9062798023223877, -4.883910179138184], + [-4.675442695617676, 6.238483428955078], + [-2.4293596744537354, -0.026461664587259293], + [-5.315804481506348, 6.581599235534668], + [4.76486349105835, -5.794276237487793], + [-5.39708137512207, 6.973196029663086], + [-1.0809931755065918, 1.3869376182556152], + [2.261798858642578, -4.071393966674805], + [0.1728261113166809, -5.174160957336426], + [1.2455321550369263, 5.782983779907227], + [0.18029266595840454, -5.834519386291504], + [-0.3986895680427551, 9.849370956420898], + [-1.1925597190856934, 11.11094856262207], + [0.12413882464170456, -6.062804222106934], + [0.8481481671333313, -4.744864463806152], + [0.3639426827430725, -6.849435806274414], + [1.5945603847503662, 4.404388427734375], + [-1.2951797246932983, 11.45931625366211], + [-3.0695035457611084, 4.041118621826172], + [-1.6710408926010132, 1.063799262046814], + [-1.2910863161087036, 11.07479190826416], + [2.633988380432129, -4.59735631942749], + [-0.9363785982131958, -1.362740159034729], + [0.5396730303764343, -7.325702667236328], + [-0.6692410111427307, 7.3545660972595215], + [-1.3150877952575684, -2.623140335083008], + [2.474858045578003, 6.218757629394531], + [0.5713523030281067, -5.044391632080078], + [-3.9115641117095947, -1.960930585861206], + [2.277702808380127, 4.203282356262207], + [-3.727541208267212, -1.9623688459396362], + [0.5315248370170593, -6.703511714935303], + [-1.3342002630233765, 11.34411334991455], + [-4.633157730102539, -0.8987571597099304], + [2.239063024520874, -4.405342102050781], + [0.4005265235900879, -6.0031633377075195], + [-1.346222162246704, 11.763519287109375], + [-4.084792613983154, -2.4583261013031006], + [-4.474730491638184, -1.3630589246749878], + [3.5165603160858154, -0.33930331468582153], + [0.4652045965194702, -7.060935974121094], + [-3.162954092025757, -0.17997610569000244], + [-4.0600786209106445, -0.32976311445236206], + [7.427786350250244, -4.283116340637207], + [-5.432724952697754, -1.902769923210144], + [-1.4607840776443481, 12.239277839660645], + [4.972949504852295, 7.821936130523682], + [-4.947111129760742, -4.030137062072754], + [0.5882055163383484, -7.484414577484131], + [3.817944288253784, -5.001859188079834], + [8.085203170776367, -2.76111102104187], + [1.4645670652389526, 0.03801455721259117], + [2.707623243331909, -4.755345344543457], + [-2.9973270893096924, -2.309155225753784], + [8.835258483886719, -2.6817896366119385], + [0.372439444065094, -6.477298736572266], + [2.24873423576355, 5.286641597747803], + [-3.131432294845581, -1.17984139919281], + [7.513793468475342, -2.3841171264648438], + [2.674638032913208, -4.5814313888549805], + [1.7680015563964844, 4.95684814453125], + [1.2936030626296997, 0.020490463823080063], + [-3.293560266494751, -1.2862476110458374], + [-1.7817678451538086, 1.740925908088684], + [3.0339183807373047, -2.9668610095977783], + [0.22084492444992065, -5.074253082275391], + [0.539550244808197, -8.277999877929688], + [0.3297446370124817, -5.445826530456543], + [-0.846859872341156, 10.833702087402344], + [0.6595792174339294, -4.869035720825195], + [0.2972428798675537, -6.924415588378906], + [-5.084213733673096, -0.8154444694519043], + [-1.6054563522338867, 2.045801877975464], + [-4.163668155670166, -1.9192296266555786], + [-3.962400436401367, -1.2957144975662231], + [2.807349920272827, -4.367304801940918], + [-0.5922494530677795, 9.73348617553711], + [-3.4675819873809814, -2.7381958961486816], + [0.38121962547302246, -6.277771949768066], + [-1.1444776058197021, 10.632858276367188], + [-2.987189531326294, -1.2299485206604004], + [3.3357980251312256, 6.317868709564209], + [-4.369556903839111, 4.437107563018799], + [-4.108715534210205, -2.952331781387329], + [-3.418914794921875, -1.6066125631332397], + [-1.8322333097457886, 0.7850213646888733], + [0.5907217860221863, -7.871227264404297], + [0.6548236012458801, -5.4053497314453125], + [-0.8401762843132019, 10.433616638183594], + [3.0325586795806885, -4.7592573165893555], + [0.6789048910140991, -6.6562089920043945], + [-3.412154197692871, -3.057325839996338], + [-3.7770702838897705, -3.490770101547241], + [-1.7403085231781006, 1.0747512578964233], + [1.8245424032211304, 1.2836970090866089], + [0.6913342475891113, -6.586770057678223], + [2.8180603981018066, -4.6539626121521], + [4.733853816986084, 8.044462203979492], + [-1.1649082899093628, 11.184375762939453], + [-1.5104249715805054, 1.395246148109436], + [2.030264139175415, 3.7736878395080566], + [-2.8826725482940674, -1.8903908729553223], + [-0.4272068738937378, 9.037961959838867], + [2.8344619274139404, 4.98590612411499], + [-1.882264494895935, -2.168443441390991], + [8.97454833984375, -2.8246259689331055], + [-2.1846232414245605, 1.6228073835372925], + [2.837402105331421, 6.137570381164551], + [6.895260334014893, -3.8222296237945557], + [-0.5411496758460999, 9.876855850219727], + [0.03003864735364914, 0.6421234011650085], + [2.666376829147339, -5.646354675292969], + [-2.658698797225952, 0.40326690673828125], + [6.391806602478027, -1.7018080949783325], + [-5.754242420196533, 8.210270881652832], + [-1.7690980434417725, 2.133574962615967], + [-0.9650158286094666, 0.4899815320968628], + [-0.01591474562883377, 7.394964218139648], + [8.874502182006836, -2.6944806575775146], + [2.6175553798675537, -4.362283229827881], + [3.259233236312866, 6.269094944000244], + [-0.10276228934526443, -1.9899944067001343], + [-4.64860725402832, -3.3719804286956787], + [1.492179036140442, 5.900957107543945], + [-1.2850604057312012, 11.107948303222656], + [-4.537965774536133, 6.262099266052246], + [-2.552685022354126, 5.4648942947387695], + [-1.5404528379440308, -0.46204113960266113], + [7.234663963317871, -2.4964678287506104], + [-0.24214023351669312, 8.484284400939941], + [-3.736377716064453, -2.2217977046966553], + [-2.341827869415283, -1.29795503616333], + [-1.3593862056732178, 11.92727279663086], + [2.840776205062866, 6.231285572052002], + [0.0016390606760978699, -4.659550666809082], + [7.308619022369385, -3.598215341567993], + [-1.078075647354126, 11.17005443572998], + [3.0083887577056885, -4.9613237380981445], + [0.3372564911842346, -5.711724281311035], + [-3.049018621444702, -2.1686911582946777], + [7.0911865234375, -2.0646398067474365], + [-2.7275307178497314, -3.1589138507843018], + [1.19844651222229, 5.432280540466309], + [0.15926536917686462, -1.178669810295105], + [0.5970476269721985, -5.661133766174316], + [1.7372496128082275, -6.5486555099487305], + [-1.1189839839935303, 10.932937622070312], + [-3.7556116580963135, -1.4209096431732178], + [4.376882076263428, 7.189650535583496], + [2.6987531185150146, -5.0495100021362305], + [-4.376644611358643, -0.7493810057640076], + [-1.7729265689849854, 1.811427116394043], + [7.858947277069092, -2.306166887283325], + [0.22427964210510254, -4.445056915283203], + [0.5690418481826782, -8.142862319946289], + [2.7680866718292236, -4.906229019165039], + [2.0866308212280273, 5.360537052154541], + [1.5712004899978638, -4.126700401306152], + [-3.1690688133239746, -0.8290464878082275], + [-0.018566660583019257, -0.9944273829460144], + [1.5835044384002686, 2.7655866146087646], + [0.6987375617027283, -8.523136138916016], + [-1.3997498750686646, 1.5022724866867065], + [-4.732469081878662, 5.944418907165527], + [3.638963460922241, 6.815953254699707], + [-1.10895836353302, 1.2127175331115723], + [-4.169981956481934, 5.305444717407227], + [-4.588737964630127, -4.855422019958496], + [3.6247453689575195, 6.925536155700684], + [-4.002455711364746, -0.25345325469970703], + [-3.820784330368042, -3.565302610397339], + [-1.5350724458694458, 12.242990493774414], + [-2.5563902854919434, -0.6707721948623657], + [-1.829230546951294, 1.9890614748001099], + [0.6614182591438293, -8.238641738891602], + [0.8804431557655334, -0.5611382126808167], + [-4.814489841461182, 5.992037773132324], + [2.738065004348755, -4.528103351593018], + [-3.0496315956115723, -2.2633211612701416], + [7.79331636428833, -2.3435065746307373], + [-1.8540172576904297, 1.894083023071289], + [-3.619150400161743, -0.6303952932357788], + [-0.3995727300643921, -2.2000136375427246], + [-4.236224174499512, -3.4521241188049316], + [-2.3651249408721924, -0.5513883829116821], + [-3.7312939167022705, -0.7346619963645935], + [0.5781735181808472, -7.867531776428223], + [-0.7205206751823425, 10.726706504821777], + [8.14428997039795, -3.015901565551758], + [0.8217999339103699, 4.9593610763549805], + [-4.0663909912109375, 6.977458953857422], + [6.477576732635498, -1.77737557888031], + [-4.868480205535889, 6.201796054840088], + [-2.5460402965545654, -0.007949832826852798], + [6.306047439575195, -3.2446324825286865], + [-5.76688814163208, 5.079490661621094], + [-1.177963137626648, -1.9096224308013916], + [-1.2790838479995728, 11.607793807983398], + [-1.2852083444595337, 11.349761962890625], + [-2.1135597229003906, 0.38075941801071167], + [1.4508659839630127, 4.082139015197754], + [-3.38183331489563, -1.4168301820755005], + [-4.586822986602783, -1.611006736755371], + [0.02576243132352829, -4.143353462219238], + [-2.5684726238250732, 2.8985812664031982], + [0.5717148184776306, -8.255232810974121], + [2.1684582233428955, 0.9036452770233154], + [2.228482961654663, -6.171294212341309], + [0.424352765083313, -5.366506576538086], + [0.566436231136322, -8.40285873413086], + [0.23310565948486328, -6.659932613372803], + [-5.023168563842773, 6.606960296630859], + [-0.7488835453987122, -1.3708375692367554], + [2.267616033554077, -5.318643569946289], + [-1.2254326343536377, 11.05231761932373], + [-4.21273136138916, -0.8595830798149109], + [-3.634925127029419, -2.9558074474334717], + [-1.8052853345870972, 1.4190974235534668], + [6.206533432006836, -4.60997200012207], + [-1.38399338722229, 11.979129791259766], + [-0.7047759294509888, 10.600347518920898], + [2.7647578716278076, -4.677775859832764], + [-1.2562639713287354, 10.943449020385742], + [2.002608060836792, 0.6825779676437378], + [-1.0409317016601562, 11.204099655151367], + [-3.3831703662872314, -1.880691647529602], + [-3.9920151233673096, -2.6207799911499023], + [-3.4992520809173584, -1.3403548002243042], + [0.4097480773925781, -5.268939971923828], + [-1.219389796257019, -3.302767038345337], + [1.3123966455459595, 1.7206103801727295], + [-3.0803849697113037, -0.35592013597488403], + [-3.8466596603393555, -2.7590579986572266], + [-3.723494291305542, -1.0889980792999268], + [-2.9561800956726074, -0.8593158721923828], + [7.165600299835205, -1.9738023281097412], + [-1.715755820274353, -1.6242163181304932], + [-3.8481099605560303, -2.6835319995880127], + [1.6411221027374268, -3.9647459983825684], + [-3.8297550678253174, -0.6113804578781128], + [0.6202805638313293, -8.667315483093262], + [1.2642848491668701, 5.4098663330078125], + [-0.24115198850631714, 8.605679512023926], + [6.519803047180176, -2.316276788711548], + [-0.35029709339141846, 9.238456726074219], + [6.873098850250244, -3.46598219871521], + [2.9996156692504883, -4.841442108154297], + [-1.896331548690796, 1.6099313497543335], + [-1.6177196502685547, 1.0888704061508179], + [-4.74662446975708, 6.197071552276611], + [1.9209520816802979, 0.8284188508987427], + [-1.3693677186965942, 0.6447353959083557], + [-1.8361968994140625, -0.3995881676673889], + [1.4354463815689087, 0.5725862979888916], + [2.2760868072509766, -4.624340057373047], + [-0.5496315360069275, -1.2633155584335327], + [-3.2399258613586426, -0.43278980255126953], + [-0.3108970522880554, 7.947824478149414], + [0.5849226713180542, -0.6238361597061157], + [-5.1527862548828125, 7.058354377746582], + [-1.8842294216156006, 1.4118175506591797], + [-3.0896689891815186, -1.156766414642334], + [-5.500093936920166, 7.0881853103637695], + [0.11045225709676743, -5.437376976013184], + [-2.0878543853759766, 1.7157107591629028], + [-3.4461452960968018, -1.747477650642395], + [-0.6417787075042725, -0.9357518553733826], + [-4.5322089195251465, -1.2471184730529785], + [-3.0151565074920654, -1.4679404497146606], + [0.229406476020813, -5.8082275390625], + [0.10232549160718918, -1.107477068901062], + [-2.9993398189544678, 6.109919548034668], + [-2.0350379943847656, 4.156064987182617], + [2.6292598247528076, -4.165322780609131], + [-0.4743773937225342, 9.467317581176758], + [-3.5297553539276123, 1.9798005819320679], + [-0.6924145817756653, 10.24006462097168], + [5.9915547370910645, -0.7744743824005127], + [8.64249038696289, -2.9388082027435303], + [0.773048460483551, -5.097529411315918], + [-0.442366361618042, -0.8673144578933716], + [-1.362119197845459, 11.693626403808594], + [1.7856724262237549, -5.284885883331299], + [0.48186224699020386, -5.662126541137695], + [-1.6710320711135864, 1.3670716285705566], + [2.141237497329712, -5.181857109069824], + [2.91394305229187, 5.871227741241455], + [-0.7885397672653198, -1.0204018354415894], + [8.85715389251709, -2.735203504562378], + [0.271644651889801, 5.695825099945068], + [-3.7529728412628174, 5.313315391540527], + [1.301841139793396, -5.067036151885986], + [0.8519958257675171, -6.276545524597168], + [-3.3874552249908447, -1.455147624015808], + [-0.37148579955101013, -2.136526584625244], + [2.1990280151367188, -3.564469575881958], + [-4.221665382385254, -3.0620367527008057], + [-0.996198832988739, 8.621429443359375], + [1.9801628589630127, 1.33863365650177], + [-4.06673002243042, 6.762080192565918], + [8.264437675476074, -2.3519961833953857], + [0.5826718211174011, -1.043397068977356], + [5.816472053527832, -3.8244314193725586], + [-0.9219421744346619, 9.207998275756836], + [0.7067651152610779, -8.441478729248047], + [2.4953200817108154, -5.385909557342529], + [0.659494936466217, -8.318469047546387], + [-1.1418358087539673, 10.582025527954102], + [-4.080013751983643, -1.3489843606948853], + [-2.714571237564087, -1.4075998067855835], + [2.569112539291382, -4.507752895355225], + [2.5588901042938232, 6.614888668060303], + [-1.2237014770507812, 11.406766891479492], + [-0.5446904897689819, 0.9397062063217163], + [0.39516472816467285, -6.665664196014404], + [2.9813644886016846, 6.236817359924316], + [5.267977237701416, -2.172654867172241], + [8.356664657592773, -2.562371015548706], + [1.5910804271697998, -4.732430458068848], + [-4.10641622543335, 4.029675006866455], + [1.2966680526733398, 0.5609065294265747], + [0.7442785501480103, -0.48259130120277405], + [4.558940410614014, -5.729872226715088], + [5.57501745223999, -1.229007363319397], + [2.410017967224121, 6.748012542724609], + [-4.693411350250244, -3.4235055446624756], + [7.800796985626221, -2.3023898601531982], + [-1.7569994926452637, 0.30295294523239136], + [0.36092936992645264, -5.3581767082214355], + [-3.834444761276245, -1.3871248960494995], + [2.2785332202911377, -4.805495262145996], + [-1.3394681215286255, 1.5620208978652954], + [-4.400355815887451, -2.5827033519744873], + [-0.7277621626853943, 1.0064740180969238], + [1.5347166061401367, 6.394741058349609], + [3.024026870727539, -5.083595275878906], + [-2.5728375911712646, -1.8792788982391357], + [0.47467732429504395, -6.997763633728027], + [8.053656578063965, -2.448690176010132], + [-3.660433053970337, -1.7301536798477173], + [-3.2418363094329834, -1.5546772480010986], + [-3.6107490062713623, 5.559772491455078], + [0.6136190295219421, -4.2614240646362305], + [0.364714652299881, -5.676888465881348], + [7.242305278778076, -2.3626887798309326], + [3.0578715801239014, 5.520715713500977], + [-1.2845717668533325, 11.614431381225586], + [1.6313302516937256, 5.842995643615723], + [0.510551393032074, -7.434808731079102], + [2.433736801147461, -3.7703144550323486], + [8.55209732055664, -2.5844013690948486], + [-3.8417043685913086, -1.4245903491973877], + [-2.255099296569824, 0.12287569046020508], + [-2.0284130573272705, 1.8245984315872192], + [-0.8952128887176514, 9.646818161010742], + [-1.55171537399292, -1.1277281045913696], + [-1.5033396482467651, 1.563733458518982], + [-1.6189603805541992, 1.8388186693191528], + [-1.382126808166504, 1.9352182149887085], + [2.8479156494140625, -3.988377809524536], + [8.283799171447754, -2.5286171436309814], + [8.302191734313965, -2.8200736045837402], + [0.6995017528533936, -8.482905387878418], + [1.666159987449646, 5.447621822357178], + [6.288729667663574, -1.6292957067489624], + [-5.020937919616699, 7.080238342285156], + [2.9408395290374756, -5.058279991149902], + [-2.8265886306762695, -1.5390969514846802], + [3.6286613941192627, -4.164833068847656], + [1.1829743385314941, 3.291152238845825], + [2.291921615600586, 4.781122207641602], + [-5.476612091064453, 6.866142272949219], + [-0.7162006497383118, -1.8691165447235107], + [-3.6261394023895264, -1.4219149351119995], + [-0.46795541048049927, 0.8118518590927124], + [-3.49067759513855, 5.549519062042236], + [-3.4701616764068604, -1.0677026510238647], + [0.35948842763900757, -6.929688453674316], + [0.4875808358192444, -3.688735246658325], + [6.518970489501953, -2.997894763946533], + [0.8838794231414795, -6.275683879852295], + [0.45148104429244995, -7.640099048614502], + [-0.7797537446022034, 9.794147491455078], + [2.664681911468506, 6.048009872436523], + [2.379887104034424, -4.777730464935303], + [-3.603645086288452, -2.0679352283477783], + [0.07269635051488876, -3.8930554389953613], + [9.587214469909668, -2.86968994140625], + [0.7988887429237366, 0.008753489702939987], + [-1.2953588962554932, 1.6365958452224731], + [3.1592297554016113, 6.467949867248535], + [-0.5266442894935608, -1.4768213033676147], + [-2.163412570953369, 4.1428937911987305], + [-1.1710370779037476, -1.9800480604171753], + [1.871732234954834, 5.151632308959961], + [0.4020121991634369, -0.7973619699478149], + [-1.2469491958618164, 7.101718902587891], + [-0.9938777089118958, 11.474220275878906], + [0.30230748653411865, -6.466799259185791], + [1.0333518981933594, -5.155189514160156], + [2.133702039718628, -5.110546112060547], + [6.495401382446289, -2.0719950199127197], + [-0.6615838408470154, 10.939830780029297], + [-1.9232072830200195, 2.6629769802093506], + [-0.2615048289299011, -2.0079543590545654], + [2.388807535171509, -4.510103225708008], + [2.303067684173584, -4.698178291320801], + [-3.770888566970825, 5.74237585067749], + [-3.7423694133758545, 4.211010932922363], + [4.567492961883545, -0.6693347692489624], + [-1.6809654235839844, 0.8125522136688232], + [0.11304184049367905, -4.003016948699951], + [4.739090919494629, 7.609714508056641], + [-0.5118127465248108, -1.0709425210952759], + [1.0599126815795898, -5.7567853927612305], + [1.175755500793457, -0.05940014496445656], + [0.9676902890205383, -4.863650321960449], + [1.4025577306747437, 1.419755458831787], + [1.7595478296279907, 1.6004446744918823], + [-5.0728325843811035, -0.647984504699707], + [3.732696533203125, 6.848000526428223], + [4.50875997543335, 7.426526069641113], + [-1.9160349369049072, 1.9167943000793457], + [-3.9467251300811768, -0.9589568376541138], + [-0.8654366731643677, 10.794836044311523], + [-2.9976842403411865, 2.8983840942382812], + [-1.3937779664993286, 9.965598106384277], + [-0.31263428926467896, -1.2724072933197021], + [-2.571828842163086, 5.621953964233398], + [2.2540900707244873, -4.350471019744873], + [-1.7210663557052612, 2.144688129425049], + [-3.56136417388916, 5.174201488494873], + [1.8123340606689453, 6.138039588928223], + [-5.383872032165527, 4.2850847244262695], + [7.529295444488525, -3.134821653366089], + [4.5726637840271, 7.480824947357178], + [-3.828641653060913, -2.4604687690734863], + [0.7096596360206604, -9.07756519317627], + [0.4381839632987976, -4.897981643676758], + [0.660306990146637, -8.324868202209473], + [1.513932228088379, -4.884686470031738], + [-3.570035219192505, -2.627725124359131], + [-1.4935671091079712, 11.79555606842041], + [-3.4166929721832275, -1.1155694723129272], + [-4.843184471130371, 5.372435569763184], + [0.13657891750335693, -2.5842690467834473], + [-2.9985334873199463, 5.9967474937438965], + [0.4028826355934143, -6.896873474121094], + [-1.511720061302185, 12.800918579101562], + [-0.21194177865982056, 0.2189875841140747], + [-0.7524926066398621, 11.23422622680664], + [-4.874485492706299, -0.9364087581634521], + [-6.034545421600342, 4.272857189178467], + [0.6904889941215515, -6.627625942230225], + [9.073430061340332, -2.8068225383758545], + [6.761261463165283, -3.3522210121154785], + [2.664149284362793, -4.313936233520508], + [-0.5963194966316223, 0.01033828780055046], + [-4.025437355041504, 4.79919958114624], + [3.4618537425994873, 7.107704162597656], + [0.43332040309906006, -5.365059852600098], + [2.4202640056610107, -4.705944538116455], + [-1.9546992778778076, 2.0173864364624023], + [0.5551354289054871, -7.775834560394287], + [2.629157543182373, 6.190220832824707], + [1.4841996431350708, 1.2907202243804932], + [1.001539707183838, -0.1207532286643982], + [0.8973426222801208, -0.3843843638896942], + [-0.8569186329841614, 10.495840072631836], + [0.29775866866111755, -5.209397315979004], + [0.5812877416610718, -7.437483310699463], + [7.607717037200928, -2.652883529663086], + [-1.5776021480560303, -1.4863778352737427], + [-2.6237900257110596, -1.70261549949646], + [-2.8048059940338135, 3.095118999481201], + [1.7526333332061768, 6.239534378051758], + [5.907935619354248, 8.833782196044922], + [0.1765366792678833, -5.693758010864258], + [-3.454533338546753, 5.242273330688477], + [-4.660902500152588, 4.359205722808838], + [2.018425226211548, 5.291669845581055], + [2.5398619174957275, -4.279801368713379], + [-5.204791069030762, -0.7144793272018433], + [8.835061073303223, -2.754315137863159], + [6.187082767486572, -3.370002269744873], + [-0.05381942540407181, 9.552600860595703], + [0.28802990913391113, -5.873047828674316], + [1.5722064971923828, -7.450927257537842], + [-1.2269306182861328, 11.026517868041992], + [-1.0922362804412842, 10.235343933105469], + [1.6348108053207397, -6.783498764038086], + [3.5634119510650635, 7.068089962005615], + [6.462026596069336, -2.6939122676849365], + [1.701686143875122, -6.442059516906738], + [-1.479087471961975, 1.5814448595046997], + [2.4789204597473145, 4.521477699279785], + [-2.0604119300842285, 1.9536749124526978], + [-3.6432790756225586, -2.4076077938079834], + [-3.2768518924713135, -0.7136446833610535], + [3.25227689743042, -5.087664604187012], + [8.391371726989746, -2.5511608123779297], + [-3.124499559402466, -2.2513344287872314], + [0.9934939742088318, -6.547299385070801], + [-0.97043776512146, 10.614015579223633], + [-0.06691271811723709, -4.938961029052734], + [-1.9282976388931274, 1.8232593536376953], + [-1.2524981498718262, 11.201339721679688], + [0.35392528772354126, -5.362579345703125], + [-3.7415006160736084, -2.2593796253204346], + [6.1830668449401855, -1.8088101148605347], + [-3.391291379928589, -0.37083733081817627], + [6.940520763397217, -3.0394656658172607], + [0.6980889439582825, -6.564692497253418], + [-3.393051862716675, 6.2488017082214355], + [-1.4014360904693604, 12.098858833312988], + [3.0178701877593994, -5.162354469299316], + [-2.700087308883667, 5.490199565887451], + [1.1091878414154053, 7.397645950317383], + [5.469706058502197, -1.267999291419983], + [-3.689399003982544, 2.572730541229248], + [-0.6021409630775452, -3.1294620037078857], + [0.3591926097869873, -5.157929420471191], + [2.388705015182495, 0.8356356024742126], + [-0.7318805456161499, 10.904374122619629], + [-1.1023615598678589, 10.403129577636719], + [3.0803844928741455, -4.866004467010498], + [0.7759342789649963, -4.59981107711792], + [-3.4272239208221436, -0.9713226556777954], + [-3.24967885017395, -2.045699119567871], + [0.7988743782043457, -6.544709205627441], + [5.594637393951416, 8.336613655090332], + [-5.269958019256592, -4.008653163909912], + [-4.0329813957214355, -0.6089286208152771], + [2.689523458480835, -4.295262813568115], + [-0.7375293374061584, -1.6360751390457153], + [-0.38187676668167114, 9.270223617553711], + [2.33077335357666, 0.7731471657752991], + [0.22647172212600708, -0.9172782897949219], + [-1.0133891105651855, 10.15650463104248], + [1.0349292755126953, -0.48057061433792114], + [-6.3911590576171875, -1.0967059135437012], + [0.5029127597808838, -7.829526901245117], + [2.764652967453003, -5.01031494140625], + [-1.350311040878296, 11.965987205505371], + [1.524405837059021, 2.333937406539917], + [-0.13965004682540894, 8.208876609802246], + [-2.630557060241699, -0.792861819267273], + [1.3621917963027954, -0.07474291324615479], + [-4.437526226043701, 5.771548748016357], + [-1.821305751800537, 0.2945517599582672], + [0.4797806739807129, -7.5768327713012695], + [-0.7831098437309265, 10.392013549804688], + [3.4830825328826904, -4.98865270614624], + [2.1068010330200195, 5.090116500854492], + [1.9505283832550049, -5.137543678283691], + [1.5018582344055176, -6.0854811668396], + [2.4431092739105225, -4.743001461029053], + [5.117292881011963, -0.8529829978942871], + [0.6258402466773987, -8.35959243774414], + [-3.8533775806427, -2.0855181217193604], + [5.515916347503662, -2.802300214767456], + [-4.027292251586914, -1.9128907918930054], + [3.193270444869995, -5.044376850128174], + [0.7459923624992371, -7.446873664855957], + [-3.1995904445648193, 0.008603092283010483], + [1.0453474521636963, -0.2895093858242035], + [5.692739009857178, -1.3127583265304565], + [2.887322425842285, -5.13070821762085], + [6.339125633239746, -2.4034171104431152], + [1.7459521293640137, 5.092370510101318], + [-3.8659555912017822, -0.6611117720603943], + [1.7348321676254272, -4.38727331161499], + [-3.554791212081909, -2.750650644302368], + [-5.219051837921143, -0.631603479385376], + [0.9594596028327942, -7.342632293701172], + [-3.3668758869171143, -0.3800581097602844], + [2.17082142829895, 5.061549186706543], + [-2.4371676445007324, 0.1221078634262085], + [-2.9607715606689453, -1.8700226545333862], + [8.018851280212402, -2.4860472679138184], + [2.6814355850219727, 6.185480117797852], + [-4.890299320220947, -1.1220672130584717], + [-3.4015207290649414, -0.39702486991882324], + [-0.9872346520423889, 10.208943367004395], + [-3.858822822570801, -0.8749992251396179], + [-2.101496458053589, 2.252694845199585], + [3.9088308811187744, -3.7859487533569336], + [2.3305814266204834, 4.814104080200195], + [-0.7503076195716858, 11.227598190307617], + [6.3169708251953125, -2.5603115558624268], + [-4.004672527313232, -2.665536403656006], + [0.44790059328079224, -4.210963249206543], + [-3.8552074432373047, -1.4509875774383545], + [0.5342405438423157, -8.186989784240723], + [2.502473831176758, -4.541147232055664], + [-1.0006855726242065, 10.096105575561523], + [2.503004789352417, -4.497436046600342], + [1.1958138942718506, 5.434268474578857], + [-3.614629030227661, -1.6881486177444458], + [1.575706124305725, 2.8759491443634033], + [5.853011131286621, -3.613739252090454], + [1.191446304321289, -4.72074031829834], + [-2.016397476196289, 2.233968496322632], + [2.0305168628692627, -4.112693786621094], + [-3.199812173843384, -2.2040722370147705], + [2.7288196086883545, 2.989924669265747], + [0.38215869665145874, -5.945013999938965], + [0.3163556158542633, -5.299336910247803], + [0.15808019042015076, -2.913012742996216], + [0.7207050919532776, -6.511161804199219], + [-3.4868013858795166, -0.6742697358131409], + [-4.905299186706543, 4.068249702453613], + [-1.9920997619628906, 0.2974494695663452], + [2.9704701900482178, -5.219670295715332], + [0.009511701762676239, 3.9279258251190186], + [3.933656930923462, 6.834598541259766], + [0.7215089201927185, -7.060601234436035], + [-0.5057610869407654, -1.8929975032806396], + [-1.954255223274231, 2.1815786361694336], + [-0.039254941046237946, -3.518373966217041], + [0.42825084924697876, -5.884228706359863], + [4.750299453735352, -2.2530295848846436], + [-0.6720882058143616, 9.33455753326416], + [-0.05640239268541336, -3.926162004470825], + [-3.951782703399658, -1.8865857124328613], + [-1.7164645195007324, 0.8194326758384705], + [-5.387596607208252, 6.847866535186768], + [-1.3080404996871948, 11.470672607421875], + [0.5648781657218933, 0.19206809997558594], + [0.337196409702301, -6.016267776489258], + [0.31289541721343994, -6.028053283691406], + [-1.1329965591430664, -2.446519613265991], + [-5.414538860321045, 4.639427185058594], + [-3.9310975074768066, -0.7323117256164551], + [-4.5886640548706055, 5.824119567871094], + [-3.130556344985962, -0.9818478226661682], + [1.5856142044067383, -5.40342903137207], + [-0.6925237774848938, 10.029497146606445], + [-2.3191885948181152, -1.288644790649414], + [1.4644614458084106, 0.10548987984657288], + [0.6738372445106506, -8.570110321044922], + [-3.8957326412200928, -1.0279728174209595], + [7.800952911376953, -2.3913605213165283], + [-2.110872983932495, 3.153895854949951], + [-3.7647135257720947, 6.191383361816406], + [8.86538028717041, -2.6509010791778564], + [0.5402680039405823, -4.552994728088379], + [-0.891599714756012, 10.253591537475586], + [0.6768349409103394, -7.874176025390625], + [8.951830863952637, -2.7583868503570557], + [7.6891770362854, -2.7551047801971436], + [0.26194947957992554, -5.762325286865234], + [2.871823310852051, -4.752756118774414], + [0.31389665603637695, -5.651628017425537], + [3.0913867950439453, -5.032305717468262], + [-0.19336754083633423, -1.4147857427597046], + [-3.614994525909424, -2.2673819065093994], + [0.293148934841156, -5.064285755157471], + [-3.183511972427368, -0.980891227722168], + [-4.352797508239746, -3.077347993850708], + [-3.4953835010528564, -1.1125413179397583], + [-4.380574703216553, 6.658639907836914], + [-1.4872922897338867, -1.5091564655303955], + [2.9072577953338623, 6.714278697967529], + [3.2299439907073975, -4.997010231018066], + [-3.6032750606536865, -1.7357197999954224], + [-3.6343886852264404, -1.415597915649414], + [-2.5832059383392334, 6.419888496398926], + [-2.898452043533325, 5.459083557128906], + [-3.0830185413360596, -1.9572762250900269], + [1.6004095077514648, -5.850598335266113], + [-2.9600367546081543, 5.265056133270264], + [2.1302855014801025, 4.350734233856201], + [2.7330710887908936, -4.332753658294678], + [-0.1257387399673462, 8.805448532104492], + [3.0486197471618652, -5.135122776031494], + [-1.9285144805908203, 1.6115645170211792], + [-1.1765422821044922, 11.112090110778809], + [-1.172932505607605, -1.3201271295547485], + [6.682754993438721, -2.849489688873291], + [-4.802774906158447, -1.8031262159347534], + [-1.0846199989318848, 10.787317276000977], + [4.8871541023254395, -3.7166976928710938], + [-2.1283252239227295, -0.8661577701568604], + [6.774848937988281, -2.653787851333618], + [7.9938063621521, -2.4042599201202393], + [-2.7780888080596924, -0.8548130989074707], + [-2.716514825820923, -1.3707181215286255], + [-3.5870189666748047, 5.617794990539551], + [-2.8252336978912354, 5.357723236083984], + [0.5078670978546143, -6.357645034790039], + [6.695493698120117, -1.935028076171875], + [0.8094087839126587, -7.362739562988281], + [0.30218422412872314, -5.232527256011963], + [0.7414640188217163, -8.77092170715332], + [-3.4721124172210693, 0.30862921476364136], + [0.7683488130569458, -6.62802791595459], + [5.73895788192749, -4.437942981719971], + [-1.8344810009002686, -0.011039558798074722], + [2.625056028366089, 5.868298053741455], + [2.2914392948150635, -5.308389663696289], + [-2.1567680835723877, -2.8020687103271484], + [-0.2117156982421875, 8.760937690734863], + [4.032163143157959, 6.933587074279785], + [7.44052267074585, -2.744173288345337], + [-3.805631399154663, -1.3999392986297607], + [-5.16041898727417, 5.379147529602051], + [-2.7282588481903076, 5.01364278793335], + [2.2349693775177, -4.909989356994629], + [2.490143060684204, -4.50717830657959], + [7.529829502105713, -2.6018526554107666], + [2.695930242538452, -5.05683708190918], + [0.5322672724723816, -4.146007537841797], + [-3.263037919998169, -1.1402474641799927], + [3.6578681468963623, 7.029024600982666], + [0.8738163113594055, -0.29893290996551514], + [3.070253610610962, 5.986176013946533], + [-2.0698208808898926, -1.1230777502059937], + [2.321805477142334, -4.418196678161621], + [6.52141809463501, -2.3640897274017334], + [-1.1549557447433472, 10.583524703979492], + [-1.7608758211135864, 1.3309158086776733], + [-0.7244375944137573, 8.777456283569336], + [2.6173455715179443, -5.342154026031494], + [6.052031993865967, -3.4823741912841797], + [6.93773889541626, -3.334078550338745], + [1.8365609645843506, -4.785816669464111], + [0.39863622188568115, -6.131877899169922], + [-3.3443169593811035, -0.9504798650741577], + [-0.9719820022583008, 1.088568091392517], + [-4.258296489715576, -0.6803380250930786], + [5.791970252990723, -5.413043975830078], + [0.5974482297897339, -4.49735164642334], + [0.8143221735954285, 7.401383399963379], + [2.6320960521698, 4.463405132293701], + [-1.0925065279006958, 10.75036334991455], + [2.168753147125244, 5.8444719314575195], + [-0.2422856092453003, -2.628718614578247], + [-3.464437246322632, -1.54075026512146], + [1.5629185438156128, 0.23985034227371216], + [-3.690037488937378, 4.8328142166137695], + [0.8843126893043518, 0.4176905155181885], + [-5.179542541503906, 5.691110610961914], + [-0.8129307627677917, 10.723730087280273], + [-3.9837405681610107, 5.517523765563965], + [-2.3712048530578613, -1.9123414754867554], + [-1.0360307693481445, 10.704095840454102], + [7.798723220825195, -2.79160475730896], + [-1.2691090106964111, 11.719035148620605], + [-5.006710529327393, 5.176681995391846], + [1.9733951091766357, 0.40706416964530945], + [6.900589466094971, -3.029381036758423], + [-5.605454444885254, 6.260501861572266], + [-3.389165163040161, -2.0895841121673584], + [-1.14708411693573, 10.608048439025879], + [-1.9707268476486206, 0.8168611526489258], + [5.870731353759766, 8.7290678024292], + [-2.346989631652832, -0.6804924607276917], + [-2.9244868755340576, -0.5527067184448242], + [-0.2963728904724121, 7.9709062576293945], + [8.605179786682129, -2.821455240249634], + [1.668367862701416, 5.317203521728516], + [8.286890983581543, -2.693463087081909], + [2.501892566680908, 6.3213982582092285], + [-1.0439214706420898, 10.546490669250488], + [-3.9538276195526123, 6.022593021392822], + [-2.024583101272583, 3.003373622894287], + [-3.1196930408477783, 1.2576730251312256], + [5.378186225891113, -2.389566659927368], + [-1.921355128288269, 2.0388529300689697], + [-1.8337373733520508, 1.8472265005111694], + [7.1261067390441895, -4.621849060058594], + [-3.7691893577575684, -2.0874335765838623], + [-4.862623691558838, -0.8554569482803345], + [0.4840881824493408, 0.07972359657287598], + [7.53464412689209, -3.222578287124634], + [1.7823011875152588, -3.8893930912017822], + [2.1742687225341797, 5.028720378875732], + [9.521368980407715, -2.89044189453125], + [-2.7061755657196045, 0.4430522918701172], + [0.772491455078125, -7.7481536865234375], + [0.840294361114502, -6.57215690612793], + [1.276496171951294, 4.783946990966797], + [1.4576036930084229, 3.108922243118286], + [0.8811657428741455, 4.7461161613464355], + [2.009251117706299, 4.038318157196045], + [1.5687761306762695, 4.669447898864746], + [8.814873695373535, -3.1352412700653076], + [-0.7347429394721985, 9.698684692382812], + [6.666720867156982, -1.8631737232208252], + [2.7639801502227783, -4.319841384887695], + [-3.649395227432251, -1.3579984903335571], + [0.7995023727416992, -0.423048734664917], + [-3.8861472606658936, -0.9559923410415649], + [0.9822515845298767, 0.2129974663257599], + [1.8750619888305664, 3.027148485183716], + [2.4053733348846436, -4.358264446258545], + [0.5718474984169006, -7.289235591888428], + [-2.003035306930542, 2.212726593017578], + [2.1173739433288574, 3.267836809158325], + [4.51702356338501, -0.503332793712616], + [-1.055079698562622, 10.476663589477539], + [-4.577847957611084, -1.6393805742263794], + [-0.20139449834823608, 7.806682586669922], + [3.919245958328247, -3.462590456008911], + [2.2986764907836914, -5.662933349609375], + [-3.82185959815979, -1.1332770586013794], + [5.648850917816162, -3.3128607273101807], + [-4.509970188140869, 5.479190826416016], + [0.5753150582313538, -4.83362340927124], + [-4.48588752746582, 0.20595866441726685], + [2.5114829540252686, 0.5510607957839966], + [-5.882501602172852, 5.177157878875732], + [0.4490540027618408, -6.976335525512695], + [0.8211603760719299, -6.277410507202148], + [0.5768182277679443, -7.445244789123535], + [0.7865743041038513, -5.028368949890137], + [0.2682228088378906, -0.8315545320510864], + [2.19665789604187, 3.848942995071411], + [-0.8067501187324524, 10.623077392578125], + [-3.711726427078247, -2.222517728805542], + [0.6198841333389282, -7.393131256103516], + [-1.9243091344833374, -1.3466897010803223], + [-1.2565815448760986, 11.042448043823242], + [2.9624826908111572, 5.487290382385254], + [-1.3372348546981812, 11.70681095123291], + [0.6633085012435913, -5.06276798248291], + [0.11005067080259323, 6.146664619445801], + [0.44175124168395996, -0.3272421360015869], + [-1.173264503479004, 11.45065689086914], + [0.6454090476036072, -8.069740295410156], + [2.738675355911255, -4.327892780303955], + [-1.427978515625, 12.122657775878906], + [0.5135042071342468, -0.39021381735801697], + [2.623540163040161, -5.419458389282227], + [-3.714005708694458, 5.624905109405518], + [-0.01054210215806961, -3.729886293411255], + [0.7538388967514038, -5.021534442901611], + [-0.6865096688270569, 10.036211013793945], + [2.6552908420562744, -4.958230495452881], + [0.10429679602384567, -5.751834869384766], + [0.7449072003364563, -9.67372989654541], + [-5.446929454803467, -1.4138222932815552], + [-4.6986188888549805, 4.512096881866455], + [0.6961175203323364, -8.188077926635742], + [-2.7806475162506104, -1.3173412084579468], + [1.6825761795043945, 4.322920799255371], + [5.57420539855957, -1.802130103111267], + [1.6486148834228516, -4.444937229156494], + [7.358118057250977, -3.816807270050049], + [9.070528984069824, -2.790424346923828], + [-2.8284428119659424, 3.642181873321533], + [-4.000824928283691, -2.4839391708374023], + [-3.78596568107605, -1.230290412902832], + [1.501000165939331, -5.510134696960449], + [-3.7415707111358643, 6.131771087646484], + [0.5959168076515198, -7.971958160400391], + [-0.48255205154418945, 9.659879684448242], + [-1.271092176437378, -0.34376344084739685], + [0.9073191285133362, -0.022188205271959305], + [0.5867225527763367, -8.725337982177734], + [6.012050628662109, -3.9180681705474854], + [-4.731832981109619, 4.828709602355957], + [0.6977910399436951, -6.906913757324219], + [-1.3920328617095947, 11.84334945678711], + [-2.7353923320770264, -1.9572855234146118], + [3.0355899333953857, -4.764640808105469], + [-4.340651988983154, 5.753018379211426], + [-2.2427988052368164, 2.253730058670044], + [7.335264682769775, -2.1487648487091064], + [5.492671966552734, 8.512984275817871], + [-4.330206871032715, 3.711425304412842], + [-2.0183017253875732, 1.9851771593093872], + [2.9891726970672607, -5.363468170166016], + [0.5685533285140991, -7.886180877685547], + [-0.5992023944854736, 9.905112266540527], + [6.439192295074463, -1.282457709312439], + [-0.697245180606842, 10.775314331054688], + [0.6063185930252075, -4.334670066833496], + [-0.4778462052345276, 9.347078323364258], + [-1.87865149974823, 1.3293507099151611], + [2.6068477630615234, 0.6872150301933289], + [0.6373391151428223, -7.873813629150391], + [-4.136433124542236, 7.130194664001465], + [3.288360118865967, -6.4662370681762695], + [1.3200104236602783, 4.85167121887207], + [6.480177402496338, -2.2389817237854004], + [-4.915499687194824, -2.3131613731384277], + [-1.5527021884918213, 12.489397048950195], + [-5.509936809539795, 7.257894992828369], + [8.240962028503418, -2.4522335529327393], + [-3.4162158966064453, -0.6413640975952148], + [2.6663873195648193, -4.880701065063477], + [-6.077422618865967, -1.3436614274978638], + [-5.132724285125732, -1.0342118740081787], + [0.4435437321662903, -7.163488388061523], + [4.233273029327393, 7.561688423156738], + [6.504781246185303, -3.6171276569366455], + [-3.06496262550354, -1.0762872695922852], + [7.30100679397583, -2.564487934112549], + [3.4293212890625, 6.5756916999816895], + [2.193751335144043, 5.255483627319336], + [-1.302283763885498, 11.457761764526367], + [2.4054200649261475, -4.368338108062744], + [-0.6178953051567078, 10.32003116607666], + [-3.3250696659088135, -0.3445683717727661], + [-4.152772903442383, -2.6005241870880127], + [-3.053746223449707, 4.843537330627441], + [-3.5950019359588623, -1.189200520515442], + [2.6786916255950928, -4.631093978881836], + [-2.2605066299438477, -1.3403834104537964], + [-2.134699821472168, 1.818711280822754], + [1.0562154054641724, 5.710091590881348], + [1.138045310974121, -5.032347202301025], + [0.06788437813520432, -5.209824085235596], + [-2.873283624649048, -0.28473520278930664], + [-2.2454464435577393, -0.5598480105400085], + [0.623177170753479, -5.424238204956055], + [1.556810736656189, 4.038475036621094], + [-1.2190132141113281, 4.264545440673828], + [-0.4706230163574219, 8.663228034973145], + [-3.9916322231292725, -1.06501042842865], + [-1.9449156522750854, 1.5358103513717651], + [-5.906251430511475, 7.704447269439697], + [-1.1585263013839722, 11.042513847351074], + [-3.7241950035095215, -2.10123610496521], + [-4.3035359382629395, 5.533273696899414], + [-3.0850541591644287, 3.394230604171753], + [-2.6304779052734375, -2.0625193119049072], + [-0.8335588574409485, 5.539896011352539], + [-0.8601426482200623, 1.3425194025039673], + [0.615447998046875, -7.541877746582031], + [-0.44968658685684204, 10.190606117248535], + [-3.7876718044281006, -0.9759145379066467], + [3.225428819656372, -5.115828514099121], + [1.753490924835205, 1.2459789514541626], + [2.3247854709625244, 4.7233781814575195], + [-5.53619909286499, -0.9774311184883118], + [2.5476953983306885, -4.814966201782227], + [-3.7304494380950928, 5.404591083526611], + [-3.690178871154785, -2.062694787979126], + [-1.675909161567688, 2.2420313358306885], + [10.209278106689453, -3.075122117996216], + [7.071402549743652, -3.414975643157959], + [0.6559181809425354, -8.68359375], + [4.24275541305542, 7.087612628936768], + [0.6791238188743591, -6.986243724822998], + [1.8335424661636353, -3.8878586292266846], + [1.2385542392730713, 6.001473426818848], + [5.229919910430908, -1.100347876548767], + [-0.3487356901168823, -1.9189345836639404], + [-3.260392427444458, -0.9191668629646301], + [-5.104720115661621, 7.129662036895752], + [-1.1412304639816284, 10.025739669799805], + [-2.4109675884246826, 2.093966484069824], + [-3.3614509105682373, -1.2522090673446655], + [-3.3745577335357666, -0.739657998085022], + [-1.7804402112960815, 1.0295923948287964], + [-5.478582382202148, 6.193199634552002], + [1.9473490715026855, -5.87911319732666], + [-4.019067764282227, -2.529510021209717], + [3.003648042678833, -4.709029197692871], + [2.8658034801483154, -5.057624340057373], + [-3.805821180343628, -2.7768661975860596], + [-3.1341445446014404, 5.105743408203125], + [-2.441749334335327, 5.6540117263793945], + [-3.8791980743408203, -1.9782297611236572], + [1.568978190422058, 1.052369236946106], + [1.444106936454773, 4.908999919891357], + [3.063002824783325, -0.2834736704826355], + [-3.402101993560791, -1.3381832838058472], + [-3.482891798019409, -1.227331519126892], + [1.7908298969268799, -5.068562030792236], + [-3.7569916248321533, 5.9233317375183105], + [-1.1763688325881958, 11.077845573425293], + [-3.7537567615509033, 6.671674728393555], + [-0.2967931032180786, 8.738348007202148], + [-0.7488006949424744, 10.661760330200195], + [-4.11312198638916, -3.0311689376831055], + [-0.813092052936554, 10.293758392333984], + [-4.849294662475586, 5.282672882080078], + [-2.881967067718506, -1.3177173137664795], + [-2.66567063331604, 0.14589214324951172], + [1.8610286712646484, 5.339656829833984], + [-4.2304863929748535, -3.3652093410491943], + [-1.2097251415252686, 10.60529899597168], + [-1.1305549144744873, 10.946767807006836], + [-0.5518208742141724, 9.212039947509766], + [8.206788063049316, -3.4481637477874756], + [3.4565813541412354, 6.777416229248047], + [6.740947723388672, -2.835195779800415], + [-3.912444829940796, -1.6984809637069702], + [2.313237190246582, 0.9551404714584351], + [-0.0321926549077034, -3.725433588027954], + [-3.30476450920105, -0.662097692489624], + [-4.1481757164001465, -2.4267215728759766], + [7.712601184844971, -2.60368013381958], + [-0.3126020133495331, -0.49610400199890137], + [-3.481757402420044, -1.5295661687850952], + [-3.904364824295044, 5.949212074279785], + [8.255284309387207, -2.7626264095306396], + [-2.353630304336548, -1.301698088645935], + [-2.8857107162475586, -0.22048354148864746], + [0.9918414950370789, -5.659388542175293], + [-0.8932583332061768, 9.238258361816406], + [7.113646984100342, -4.887514114379883], + [-5.039982318878174, -3.6159493923187256], + [-3.9692399501800537, -0.7816842794418335], + [2.072885036468506, -4.796291828155518], + [3.1758813858032227, -3.755619764328003], + [-4.84905481338501, -1.6054502725601196], + [-4.665444850921631, -0.8870171308517456], + [-4.414253234863281, -0.6035864353179932], + [-2.0925779342651367, -3.4210853576660156], + [-3.2093048095703125, -1.7902051210403442], + [-0.553330659866333, 10.589117050170898], + [-4.080380439758301, 6.204890251159668], + [1.3862868547439575, -5.764237880706787], + [-2.9327192306518555, 5.162121295928955], + [0.044074706733226776, 4.903996467590332], + [1.4956185817718506, 5.030282497406006], + [-4.943070888519287, 6.643170356750488], + [2.3254446983337402, 4.3551225662231445], + [-1.2919749021530151, 0.6993151903152466], + [-3.6061854362487793, 3.8611416816711426], + [2.6854147911071777, -4.649138450622559], + [2.5909018516540527, -4.06252908706665], + [-6.030612468719482, -0.8801149129867554], + [-1.0593162775039673, 10.624490737915039], + [2.6547393798828125, -3.971069097518921], + [-2.2860629558563232, -0.9984265565872192], + [-3.051760196685791, 6.470698356628418], + [0.57444167137146, -7.563473701477051], + [6.438884258270264, -2.646381139755249], + [1.1171356439590454, -4.979330539703369], + [-0.28035974502563477, 7.845367431640625], + [1.7067688703536987, 3.3756349086761475], + [-2.0042028427124023, 2.4325292110443115], + [2.2415659427642822, -5.5369415283203125], + [9.274012565612793, -2.86750864982605], + [-4.53626012802124, 6.420434474945068], + [-0.5756796002388, 11.062705993652344], + [0.10636430233716965, 7.026237964630127], + [2.411176919937134, 0.7514826059341431], + [-4.470943450927734, -0.5391883850097656], + [-0.34034016728401184, 5.171058654785156], + [-2.123878002166748, 2.0831336975097656], + [-1.1940250396728516, 10.311905860900879], + [-0.2696504592895508, 8.85899543762207], + [0.6284019351005554, -8.482372283935547], + [-4.294814586639404, -1.0868611335754395], + [6.4434733390808105, -3.656374216079712], + [-0.6311792731285095, 10.061291694641113], + [-4.905055522918701, 5.282412528991699], + [-1.2156771421432495, 11.454267501831055], + [-3.145214796066284, 2.903228282928467], + [-4.970241069793701, -3.9922688007354736], + [8.32414436340332, -2.8065614700317383], + [1.762023687362671, 2.1021156311035156], + [0.9488912224769592, -6.483244895935059], + [0.9849961400032043, -8.354957580566406], + [-1.2918505668640137, 1.5699968338012695], + [-3.191479206085205, 4.928083419799805], + [7.969569683074951, -2.4614670276641846], + [3.3808672428131104, 6.174327373504639], + [-0.016220368444919586, -0.7027504444122314], + [-2.8574259281158447, 3.1335794925689697], + [-5.602660655975342, 7.290482044219971], + [1.8818124532699585, 0.6571687459945679], + [-4.626565933227539, -2.034111261367798], + [-2.396074056625366, 3.3755643367767334], + [-4.443310737609863, -1.8084527254104614], + [-1.182150959968567, 10.789857864379883], + [-4.271385669708252, -3.309206485748291], + [1.502409815788269, 0.6759059429168701], + [-1.4464030265808105, -0.7638082504272461], + [-1.2717416286468506, 11.35059928894043], + [1.6582372188568115, -5.722513198852539], + [5.595494747161865, 8.595259666442871], + [6.654163360595703, -1.5962039232254028], + [8.259370803833008, -2.34210467338562], + [-0.42114388942718506, 8.252726554870605], + [-2.859311819076538, -1.8673385381698608], + [-4.011348247528076, -2.7117691040039062], + [-1.1467067003250122, -0.7858770489692688], + [-4.639082908630371, 6.490146636962891], + [0.5518260598182678, -5.431685924530029], + [2.1940948963165283, -5.270561218261719], + [-3.3845925331115723, -0.43133020401000977], + [-1.9124208688735962, 0.7731071710586548], + [-0.7009042501449585, 10.231091499328613], + [-3.711498498916626, 4.067490577697754], + [8.161675453186035, -2.706866502761841], + [-6.088527202606201, 8.279861450195312], + [-2.4817802906036377, -1.1539561748504639], + [-3.578270435333252, -1.8346155881881714], + [0.7136676907539368, -8.364295959472656], + [-0.6576976180076599, 10.198542594909668], + [-3.3462612628936768, -1.1774276494979858], + [-1.1432135105133057, -0.5554183721542358], + [-0.04317844659090042, -5.685719966888428], + [-3.669039011001587, -2.3535730838775635], + [-4.292820453643799, -1.0679340362548828], + [3.6302831172943115, -4.731404781341553], + [0.6218705773353577, -7.876346111297607], + [-2.2580230236053467, -2.026951789855957], + [-2.0734195709228516, -0.2474968135356903], + [-0.9904324412345886, -0.8196601867675781], + [0.8605706095695496, -10.162817001342773], + [-1.6002240180969238, 12.772441864013672], + [-2.2703380584716797, 2.101567268371582], + [2.4028289318084717, 4.199394226074219], + [2.814521551132202, -4.987594127655029], + [1.3923473358154297, 2.0001919269561768], + [-4.373929023742676, 5.766133785247803], + [1.384838581085205, -5.067131042480469], + [0.36806005239486694, -4.925243377685547], + [0.16695290803909302, -6.001352787017822], + [0.6751729846000671, -8.623224258422852], + [2.29062557220459, 5.017635345458984], + [-0.024122752249240875, -4.527108192443848], + [-0.7090012431144714, 4.3743510246276855], + [0.4071824550628662, -5.709946632385254], + [-2.0222134590148926, 1.8822435140609741], + [-2.289839744567871, -1.0534383058547974], + [-0.8582242131233215, 9.915384292602539], + [0.8396152257919312, -0.41313475370407104], + [-4.859105587005615, 6.935131072998047], + [-4.513881683349609, -2.1166837215423584], + [2.0918376445770264, -3.4698643684387207], + [-3.542361259460449, -1.3146376609802246], + [-3.815732002258301, 5.728190898895264], + [-3.302607536315918, 4.958705902099609], + [0.7080803513526917, -8.882583618164062], + [0.5886188745498657, -0.7024614214897156], + [0.3831782937049866, -5.683309078216553], + [0.714402973651886, -0.15337762236595154], + [1.038147211074829, 0.6312003135681152], + [3.0221850872039795, -4.625611305236816], + [-3.1425464153289795, -0.8922595381736755], + [-4.4673261642456055, -3.9336764812469482], + [-4.219496726989746, -2.413801431655884], + [1.6892335414886475, 4.89699649810791], + [1.2461270093917847, 4.175647735595703], + [-5.3771071434021, 4.806435585021973], + [-1.158277153968811, 10.674570083618164], + [1.8889193534851074, -4.053699016571045], + [-0.26286935806274414, 8.358753204345703], + [-0.38193434476852417, 8.3390531539917], + [0.662975013256073, -8.503100395202637], + [6.214130401611328, -3.7668235301971436], + [-3.2895922660827637, -1.1054458618164062], + [-3.6135571002960205, -1.276746153831482], + [5.671806812286377, -1.236148715019226], + [-2.188460111618042, -1.9698512554168701], + [0.7529252767562866, -0.4699021577835083], + [2.1611921787261963, -5.284193992614746], + [5.920727252960205, -2.550370454788208], + [3.5770750045776367, 6.791008949279785], + [7.656080722808838, -2.3668129444122314], + [-1.871795892715454, -0.9462411403656006], + [-3.8930816650390625, 6.297208786010742], + [-0.4864477515220642, 9.096842765808105], + [1.5551072359085083, -5.811265468597412], + [-2.8743324279785156, -2.121980905532837], + [-4.072671413421631, -3.2488620281219482], + [0.8538021445274353, -5.462317943572998], + [0.2499902844429016, -0.7000987529754639], + [3.1354787349700928, 6.852294921875], + [8.424095153808594, -2.9007110595703125], + [1.5537986755371094, -7.432895183563232], + [-1.4345816373825073, 1.4381123781204224], + [-0.7359433770179749, -3.0925967693328857], + [2.2562057971954346, -5.437192440032959], + [0.4616349935531616, -6.572872161865234], + [0.25796326994895935, 0.17320694029331207], + [-1.1864101886749268, 1.6516804695129395], + [6.877913951873779, -2.670456886291504], + [7.653390884399414, -2.176172971725464], + [1.8375684022903442, 1.54831063747406], + [4.896562576293945, 7.827306270599365], + [-1.130240559577942, 10.401877403259277], + [-1.9925239086151123, 2.244910717010498], + [0.6260856986045837, -7.71612548828125], + [-1.3867216110229492, 12.094717025756836], + [7.750458717346191, -2.299762725830078], + [-0.05968485027551651, -0.8102306723594666], + [2.555661201477051, -4.212411403656006], + [1.9051623344421387, -4.320211410522461], + [-1.0272855758666992, 10.208891868591309], + [0.45322340726852417, -7.009526252746582], + [2.904188871383667, -5.077013969421387], + [1.1057416200637817, 5.333423614501953], + [0.6517485976219177, -9.232549667358398], + [-2.993281602859497, -1.879304051399231], + [-1.7520098686218262, 2.4925553798675537], + [0.3784116506576538, -6.848761558532715], + [7.913476467132568, -2.685880661010742], + [-1.8260345458984375, 1.5977548360824585], + [-0.5343616604804993, 0.37535685300827026], + [6.966509819030762, -2.5524344444274902], + [-4.003474712371826, -2.6062374114990234], + [-1.6869723796844482, 1.3712389469146729], + [-5.283411026000977, -4.7335662841796875], + [8.102274894714355, -2.9567410945892334], + [-3.3268933296203613, -1.4511116743087769], + [-5.298288822174072, 7.683818340301514], + [-4.615541934967041, -3.05249285697937], + [-0.051262564957141876, -1.1936817169189453], + [-0.025058425962924957, -4.88172721862793], + [-4.011129856109619, -0.942306399345398], + [-0.15477979183197021, 8.032617568969727], + [-3.54358172416687, -1.761454701423645], + [-2.1892364025115967, 2.7578928470611572], + [-4.3908915519714355, -0.604712963104248], + [-4.387187480926514, 5.144653797149658], + [-1.0618139505386353, 4.715932369232178], + [-4.333292007446289, -0.35439860820770264], + [-0.3988078236579895, 10.567150115966797], + [-3.381073236465454, -1.4021817445755005], + [-0.8302367329597473, 10.306148529052734], + [2.7937238216400146, 6.187800407409668], + [-1.6836202144622803, 1.9459890127182007], + [-3.7384746074676514, 4.927314758300781], + [-6.149399280548096, 3.293266773223877], + [3.068040132522583, -4.771248817443848], + [-2.7021939754486084, -2.714827299118042], + [-1.1811293363571167, 11.551567077636719], + [2.1486475467681885, 0.8840681314468384], + [-1.3261200189590454, 11.68701457977295], + [0.23851755261421204, -4.60988712310791], + [-4.04782772064209, 6.328519821166992], + [0.3085440397262573, -6.061939716339111], + [4.910834789276123, -1.8753973245620728], + [-1.972882866859436, 2.4751052856445312], + [-3.307906150817871, 5.338269233703613], + [-3.245103120803833, -0.9388665556907654], + [4.128895282745361, 7.310006141662598], + [-3.7709286212921143, 5.943503379821777], + [-3.550689935684204, -1.511236310005188], + [2.4762227535247803, -3.9693663120269775], + [-2.4854109287261963, -1.2010927200317383], + [-3.140125036239624, 5.474573135375977], + [-3.2857255935668945, -1.580846905708313], + [-2.3834803104400635, -0.8608174324035645], + [7.230995178222656, -3.5354888439178467], + [0.06829946488142014, -4.220502853393555], + [2.7952513694763184, 6.271313667297363], + [0.2816293239593506, -6.8214569091796875], + [-2.5020906925201416, -1.3474725484848022], + [0.5306158065795898, 1.0098196268081665], + [7.078094482421875, -3.2794830799102783], + [-3.5721065998077393, 0.03898638114333153], + [-3.85217547416687, -2.0369651317596436], + [3.126067638397217, 7.040970802307129], + [1.2025749683380127, 2.012758255004883], + [-0.7368332743644714, -0.028729815036058426], + [4.662855625152588, -3.1732594966888428], + [7.384620666503906, -2.7592406272888184], + [7.593254566192627, -2.507901906967163], + [-0.009766437113285065, -3.937084436416626], + [2.9231996536254883, -4.595115661621094], + [-0.028784967958927155, -4.411134719848633], + [-4.022000312805176, 5.761219501495361], + [-4.195361614227295, 5.712580680847168], + [-0.2573625147342682, -1.339005947113037], + [2.601525068283081, -4.2493181228637695], + [2.2882657051086426, -3.933730125427246], + [-1.3230257034301758, 11.531825065612793], + [6.131328105926514, -4.377659320831299], + [-1.7300257682800293, 1.8926011323928833], + [-3.7431037425994873, 5.99564266204834], + [6.249878406524658, -4.634317398071289], + [4.33887243270874, 7.923079013824463], + [1.7634751796722412, 2.920405387878418], + [5.751028060913086, -1.3493303060531616], + [1.6824731826782227, 1.3380554914474487], + [-3.112866163253784, -1.5456548929214478], + [-4.88551139831543, -4.04539155960083], + [0.1391010284423828, -5.476868152618408], + [0.04021628946065903, 0.9189023971557617], + [-1.596299409866333, 1.4901845455169678], + [-0.9729673266410828, 10.010159492492676], + [-4.749351978302002, 6.8019118309021], + [0.758465588092804, -0.5044522881507874], + [-4.484210014343262, 6.6111931800842285], + [2.304521322250366, -3.982158899307251], + [0.5871000289916992, -6.680258750915527], + [-0.05839834362268448, -4.127604007720947], + [0.1542544960975647, -5.366657257080078], + [-5.607748508453369, 7.01397705078125], + [-0.44372105598449707, 9.953140258789062], + [0.427201509475708, -7.504364967346191], + [0.8091637492179871, 4.144975185394287], + [0.32605451345443726, -6.39146089553833], + [-3.4355180263519287, -1.0185331106185913], + [-3.866455316543579, 6.319293022155762], + [0.21696636080741882, -4.638815879821777], + [1.1951375007629395, -5.89772891998291], + [-1.424486517906189, 1.2081468105316162], + [-1.548008680343628, -1.9306198358535767], + [-5.161372661590576, -0.9249757528305054], + [-0.028895914554595947, -3.3628740310668945], + [7.8717780113220215, -2.5647523403167725], + [0.855807363986969, 6.0820159912109375], + [0.635775089263916, -7.899857521057129], + [7.172699451446533, -4.185599327087402], + [-2.5951595306396484, -1.884696125984192], + [3.0810165405273438, -4.912510871887207], + [0.4051162600517273, -7.3041462898254395], + [-2.6933538913726807, -0.883193850517273], + [-3.1376888751983643, -1.970068097114563], + [8.287426948547363, -2.6328954696655273], + [-2.023256540298462, 1.1307766437530518], + [0.6319500207901001, -7.448904991149902], + [0.2820829749107361, -6.291815757751465], + [-0.6362178325653076, 9.9724702835083], + [-3.652651786804199, 2.5159554481506348], + [4.429855823516846, -2.606168031692505], + [-0.32590752840042114, 8.209769248962402], + [-4.556010723114014, -0.7686498165130615], + [0.44712769985198975, -7.300374507904053], + [5.142598628997803, 7.896369934082031], + [0.06436621397733688, -2.9423775672912598], + [-3.01814866065979, -1.0688284635543823], + [5.352023601531982, 8.162872314453125], + [-3.4253833293914795, -2.369835615158081], + [2.5123939514160156, 4.896615028381348], + [1.9201011657714844, -4.140020847320557], + [-1.2860130071640015, 1.1190992593765259], + [0.6204030513763428, -7.855257034301758], + [0.45691317319869995, 9.029497146606445], + [2.3648693561553955, 6.1882219314575195], + [2.025381326675415, -5.819623947143555], + [0.8935441970825195, -5.582259178161621], + [-5.066239833831787, 3.3969802856445312], + [-1.23224675655365, 1.6954245567321777], + [6.14132833480835, -3.4392809867858887], + [-1.4034030437469482, 11.704607009887695], + [-3.414783000946045, 5.802504539489746], + [0.6709597706794739, -0.5448685884475708], + [8.92223072052002, -2.782928228378296], + [-5.776945114135742, 7.444021224975586], + [-4.177561283111572, 4.606444358825684], + [-0.47807395458221436, -0.7329185009002686], + [0.7383058667182922, -9.299993515014648], + [-4.720439434051514, -4.35819673538208], + [-1.2078717947006226, 11.28948974609375], + [-4.134230613708496, -0.4075644612312317], + [2.9226486682891846, -4.827947616577148], + [-1.839928388595581, 1.3651070594787598], + [0.6520829200744629, -0.5832756757736206], + [-1.2120518684387207, 1.4003335237503052], + [-3.323570489883423, 0.33426907658576965], + [-1.990413784980774, 2.3386476039886475], + [-3.0555918216705322, 3.386239528656006], + [-1.5562355518341064, 12.46190357208252], + [-5.155508518218994, 6.539363861083984], + [-1.3497843742370605, 11.194845199584961], + [-0.9163303971290588, 10.03639030456543], + [-2.397028923034668, -1.648642897605896], + [-0.6239349246025085, 10.226568222045898], + [0.6449312567710876, -4.237998962402344], + [1.4564133882522583, 1.6965261697769165], + [-0.8959476351737976, 10.529394149780273], + [-5.050086975097656, 7.123597145080566], + [-3.2701926231384277, -0.163163423538208], + [7.608073711395264, -4.00412654876709], + [-5.103281497955322, 5.791678428649902], + [2.560096263885498, -4.3110833168029785], + [0.5441760420799255, -6.790069103240967], + [-3.3827648162841797, -3.8637211322784424], + [4.340887546539307, 7.1351423263549805], + [1.3972315788269043, -5.633780479431152], + [-1.940690517425537, 1.7037063837051392], + [2.0986711978912354, 4.593134880065918], + [-4.152215480804443, 5.7139177322387695], + [-5.613974571228027, 3.802830457687378], + [-1.9209675788879395, 2.23297381401062], + [-0.07994861155748367, -4.430280685424805], + [-2.0651564598083496, 1.8936246633529663], + [6.822982311248779, -2.107067108154297], + [2.594965934753418, -4.503055095672607], + [-0.6439353823661804, 0.4892396330833435], + [-0.3748401999473572, -1.9486137628555298], + [-3.5906484127044678, -1.4501351118087769], + [5.250378131866455, -2.8654520511627197], + [7.294334888458252, -4.696764945983887], + [-3.988323926925659, -2.888848066329956], + [-1.2352756261825562, 11.371881484985352], + [-5.662850856781006, 7.684779167175293], + [2.536907911300659, 6.357170581817627], + [-0.9775209426879883, -0.6101253032684326], + [0.40248411893844604, -6.363077163696289], + [-4.441658020019531, -1.7044013738632202], + [-4.772922039031982, 5.914272308349609], + [-2.0294225215911865, 2.257810115814209], + [-1.4417698383331299, 12.107531547546387], + [1.2227692604064941, -5.957863807678223], + [-3.173340082168579, -1.2817747592926025], + [7.2386088371276855, -2.236130952835083], + [1.4302829504013062, -5.033994197845459], + [5.663482189178467, -4.5334272384643555], + [0.11622460931539536, -5.130270957946777], + [-0.4129801392555237, 9.837606430053711], + [-1.213573694229126, 11.137282371520996], + [-0.17803320288658142, -1.1507586240768433], + [3.3719520568847656, -3.6843554973602295], + [2.211223840713501, -5.15013313293457], + [-0.12919801473617554, -2.133084535598755], + [-1.0544735193252563, 1.878764271736145], + [-2.184547185897827, 2.2341511249542236], + [-3.1067347526550293, -1.8516875505447388], + [9.319073677062988, -2.836771249771118], + [0.2917901873588562, -6.00298547744751], + [1.579420566558838, 1.6650818586349487], + [8.3346586227417, -3.430206298828125], + [-3.218693256378174, -1.7884892225265503], + [3.1397693157196045, -5.4572272300720215], + [0.745528519153595, -0.5467392206192017], + [-4.8167901039123535, 5.2148919105529785], + [0.616406261920929, -8.412270545959473], + [2.9310200214385986, -4.878488540649414], + [5.038012981414795, 7.9448628425598145], + [0.2647790312767029, 0.33203423023223877], + [-0.9483562111854553, 10.621767044067383], + [-0.8232374787330627, 1.4143764972686768], + [-5.027827739715576, 4.8872833251953125], + [-0.29543888568878174, 6.588380336761475], + [-3.371649980545044, -0.6191613674163818], + [0.6855022311210632, -8.63846206665039], + [5.460874080657959, -1.2888551950454712], + [-1.778468132019043, 1.713592529296875], + [-2.365262985229492, -1.5470502376556396], + [0.9738255143165588, -4.926298141479492], + [-1.0231062173843384, 10.053912162780762], + [0.6450475454330444, -7.287439823150635], + [2.0521652698516846, 5.738472938537598], + [8.33859920501709, -2.604071855545044], + [1.616011142730713, 0.7316919565200806], + [0.7170236110687256, -6.340572357177734], + [-0.5051997900009155, 9.710359573364258], + [6.436182022094727, -1.5024949312210083], + [0.11910750716924667, -4.466993808746338], + [2.7103054523468018, -4.442739486694336], + [-3.903886079788208, -2.343848466873169], + [-5.154407501220703, -0.9989460706710815], + [7.1489763259887695, -4.110748291015625], + [1.3506684303283691, -7.126930236816406], + [-0.6810035109519958, 1.6106455326080322], + [-0.6152027249336243, 10.109023094177246], + [7.274857997894287, -3.0533456802368164], + [-0.19808799028396606, -2.2969508171081543], + [0.08040203899145126, -1.0273374319076538], + [4.365396022796631, -0.9539440870285034], + [7.245932579040527, -2.2015302181243896], + [2.226621389389038, 5.591017723083496], + [-2.850273370742798, -4.036261081695557], + [-0.5305641889572144, -0.8295599222183228], + [0.27140671014785767, -6.42180061340332], + [0.23766136169433594, 5.436971664428711], + [-0.6937435865402222, 9.448551177978516], + [0.7244870066642761, -4.442349433898926], + [2.9533743858337402, -4.8274641036987305], + [-4.225430011749268, 5.309023857116699], + [-3.332275867462158, -1.3008508682250977], + [0.655271589756012, -7.538254737854004], + [0.518794596195221, -6.8119049072265625], + [0.4728088974952698, -7.100320339202881], + [-1.9425609111785889, 2.0009782314300537], + [-1.430873155593872, -0.7051936984062195], + [-3.777326822280884, -0.9525046944618225], + [-4.112183094024658, 5.682638168334961], + [-1.639361023902893, 1.2259234189987183], + [-4.046023368835449, -1.3863109350204468], + [-3.8903329372406006, -1.9394114017486572], + [-1.445478916168213, -0.7942831516265869], + [3.9198734760284424, -5.1335673332214355], + [-0.998795211315155, 9.790464401245117], + [0.5848003625869751, -6.611196994781494], + [0.10456394404172897, -5.849086761474609], + [-1.3064112663269043, 11.434986114501953], + [-0.8053937554359436, 9.144275665283203], + [-1.9379249811172485, 0.34238994121551514], + [-3.738286018371582, -1.831404685974121], + [4.082265853881836, 7.476638317108154], + [7.394197463989258, -2.332340717315674], + [-1.4159786701202393, 11.623886108398438], + [3.1145715713500977, 6.7250823974609375], + [0.9566166996955872, -6.306958198547363], + [6.556576251983643, -1.4304982423782349], + [-3.154918909072876, -0.9583238959312439], + [-0.9085041880607605, 10.22941780090332], + [1.4283802509307861, 3.4644834995269775], + [0.9617688059806824, 6.174774646759033], + [8.287079811096191, -2.4259393215179443], + [-4.795101165771484, 5.557826995849609], + [-1.9766913652420044, 0.8030225038528442], + [-1.4046423435211182, 12.149269104003906], + [-1.1243181228637695, 11.346391677856445], + [0.6780866384506226, -6.179502010345459], + [-5.235024452209473, 7.004258155822754], + [-3.4077513217926025, -2.2340025901794434], + [-0.6697791218757629, 10.015402793884277], + [-1.2991787195205688, 11.453908920288086], + [8.861148834228516, -2.7247025966644287], + [-3.8327274322509766, -1.3831058740615845], + [-0.5304118990898132, -3.669816255569458], + [0.7004414796829224, -5.78618049621582], + [2.8726587295532227, -4.782849311828613], + [-4.0883331298828125, -3.1587274074554443], + [-1.8386489152908325, 1.8985475301742554], + [-5.067333698272705, 6.950071334838867], + [-1.868225336074829, -3.198857069015503], + [0.6218491196632385, -7.927523612976074], + [-4.511446952819824, 5.567652702331543], + [5.937230110168457, -3.477539300918579], + [-0.7986131906509399, 1.3662536144256592], + [-0.4109247922897339, 9.364179611206055], + [2.7802016735076904, -4.338128089904785], + [-1.7364606857299805, 0.737214207649231], + [7.841832637786865, -3.61055064201355], + [3.9102303981781006, -3.3795557022094727], + [-3.5687644481658936, -1.2451579570770264], + [1.7781388759613037, 5.190002918243408], + [-0.3463008999824524, 7.766092777252197], + [-1.1488769054412842, 10.745418548583984], + [3.368114471435547, 6.89756965637207], + [0.8562684655189514, -8.369160652160645], + [-1.4767118692398071, 12.137645721435547], + [0.7643824219703674, -7.808892250061035], + [0.6586272120475769, -5.8455705642700195], + [6.7239603996276855, -2.15781569480896], + [5.736420154571533, 8.695025444030762], + [-0.6695985198020935, 3.5680391788482666], + [-5.278627872467041, 4.752991676330566], + [-1.9076895713806152, 0.4223574697971344], + [-3.0754144191741943, 4.509800434112549], + [-2.524811029434204, 5.545257568359375], + [-0.44992852210998535, -1.4908287525177002], + [-3.1698555946350098, 5.470614433288574], + [-1.1145740747451782, 1.1137572526931763], + [6.98947811126709, -3.3428761959075928], + [7.918621063232422, -2.5894362926483154], + [8.691266059875488, -3.013129711151123], + [2.404374837875366, -4.535561561584473], + [-3.920996904373169, 6.417438507080078], + [0.7495145201683044, -8.74474811553955], + [-3.637495756149292, 0.19744157791137695], + [1.5882775783538818, 1.0778073072433472], + [-4.553692817687988, 1.5657068490982056], + [4.410464763641357, -3.7924697399139404], + [7.488098621368408, -4.387563228607178], + [-4.300005912780762, 6.75199031829834], + [-4.159504413604736, -1.5842047929763794], + [-3.5183064937591553, -1.406826138496399], + [-4.65224027633667, 5.994777679443359], + [-1.93996262550354, 2.357100009918213], + [-4.45844030380249, 0.004568573087453842], + [-4.839552402496338, -3.245089530944824], + [-5.007347583770752, -1.0581375360488892], + [3.1461453437805176, -4.827264785766602], + [-2.272606611251831, 2.1361188888549805], + [-0.11277032643556595, -4.081334114074707], + [-3.803252696990967, 5.334409236907959], + [0.6272762417793274, -7.9687018394470215], + [9.08479118347168, -2.8173248767852783], + [2.294818639755249, -4.085904121398926], + [0.4625663161277771, -0.5566942691802979], + [-3.0436813831329346, 3.0194895267486572], + [-4.349013328552246, -0.5994205474853516], + [0.965238630771637, -5.914764404296875], + [3.2639620304107666, -3.766373634338379], + [-0.7634792923927307, 9.939884185791016], + [1.2925711870193481, -4.432913780212402], + [1.6491504907608032, 0.9202819466590881], + [-3.4943623542785645, -1.4833580255508423], + [0.7179076075553894, -7.97050666809082], + [-1.3388272523880005, 11.461421012878418], + [1.0949002504348755, -6.540098190307617], + [-5.902438640594482, 5.034980773925781], + [-0.3952150046825409, -1.0188881158828735], + [-2.9964282512664795, 5.143795967102051], + [-1.8703233003616333, 2.38157320022583], + [4.820747375488281, 7.553979873657227], + [-4.951541900634766, -0.978293776512146], + [2.4806363582611084, -5.27190637588501], + [-4.186290740966797, 6.1032633781433105], + [3.7065932750701904, 6.865957260131836], + [6.984245777130127, -1.832075834274292], + [9.14114761352539, -2.8620316982269287], + [-1.9811402559280396, 0.9352492094039917], + [-4.83277702331543, 7.135634422302246], + [1.9379923343658447, -4.550588607788086], + [-3.7597265243530273, -1.7127206325531006], + [0.3772185444831848, -6.358898162841797], + [5.42216157913208, -1.8828309774398804], + [5.987083911895752, -2.1061770915985107], + [-5.308976650238037, 6.92920446395874], + [0.0599764809012413, -2.488520860671997], + [0.4554482102394104, 0.5520923137664795], + [3.0226638317108154, 6.689357757568359], + [1.629845380783081, 5.650461196899414], + [-3.899840831756592, -1.2794338464736938], + [2.6204521656036377, -5.058574676513672], + [2.3913352489471436, 5.141667366027832], + [7.638839244842529, -2.424879789352417], + [0.46392637491226196, -4.25037145614624], + [-2.1298317909240723, 4.541157245635986], + [1.440653681755066, 4.939175128936768], + [-1.2707011699676514, 1.4255622625350952], + [2.260361909866333, 5.691253185272217], + [-2.563218593597412, -2.052589178085327], + [-1.7265571355819702, 2.1143648624420166], + [0.818676233291626, 5.287701606750488], + [-5.199851036071777, 7.07596492767334], + [-1.9149764776229858, 1.8099910020828247], + [3.714033603668213, -3.928609848022461], + [2.4200994968414307, 6.626206398010254], + [4.034122943878174, 7.192203521728516], + [0.07514908164739609, -4.324038505554199], + [-1.8646140098571777, 1.2646235227584839], + [1.9206788539886475, -3.6211202144622803], + [-0.8671011328697205, 11.118725776672363], + [-5.1431450843811035, 6.96139669418335], + [-3.5053985118865967, 5.154662132263184], + [0.48417526483535767, 0.30811622738838196], + [0.34409284591674805, -4.5883073806762695], + [2.2816855907440186, -4.478174209594727], + [-6.172969341278076, 8.227007865905762], + [-4.136000156402588, -2.6697845458984375], + [-3.5027973651885986, -1.3778493404388428], + [0.5153834223747253, -7.163238525390625], + [-2.6478123664855957, 2.8247811794281006], + [0.5572481751441956, -7.144941329956055], + [-0.021847106516361237, -0.49744972586631775], + [-2.83322811126709, 5.77656888961792], + [-3.5343801975250244, -1.9216378927230835], + [1.7233433723449707, 0.20948714017868042], + [-0.49103444814682007, 9.998734474182129], + [2.5677850246429443, 5.400655746459961], + [5.970315456390381, -1.2516015768051147], + [-1.5092675685882568, 12.79611587524414], + [-4.123768329620361, -2.2062087059020996], + [-3.2531750202178955, 4.709832191467285], + [1.909122347831726, -5.174441814422607], + [0.7076302766799927, -8.369817733764648], + [-4.410600185394287, 5.485921382904053], + [-1.285871148109436, 11.79788875579834], + [-3.702512741088867, -2.801652669906616], + [-5.091075420379639, 6.887864112854004], + [-1.6812807321548462, 0.904434084892273], + [0.472769558429718, -0.06307253241539001], + [-3.9103498458862305, -1.9696372747421265], + [0.1396515667438507, -1.0882774591445923], + [0.4191727042198181, -1.898695945739746], + [-1.3602757453918457, 12.230978012084961], + [-4.498432636260986, -3.8817508220672607], + [0.802727460861206, 4.0841898918151855], + [1.362154483795166, 4.245508193969727], + [-1.2916696071624756, -0.3252861201763153], + [-3.8782150745391846, -1.791622519493103], + [-3.825770616531372, -2.1423802375793457], + [7.3909125328063965, -2.277806282043457], + [1.1928179264068604, -6.403103351593018], + [-4.163613796234131, 0.5110858082771301], + [-1.7692760229110718, 1.8665295839309692], + [6.906266689300537, -2.1471331119537354], + [0.5920388102531433, -0.39012157917022705], + [0.6690152883529663, -7.818240165710449], + [-4.966883182525635, 5.881330490112305], + [-5.601600170135498, -4.1947479248046875], + [1.5442206859588623, -5.596240520477295], + [1.4742473363876343, -5.291610240936279], + [-0.23444461822509766, 4.220117568969727], + [9.624035835266113, -2.95595383644104], + [-4.548126220703125, -3.4961659908294678], + [-0.10234520584344864, -1.020999550819397], + [0.7097743153572083, -6.434315204620361], + [-5.116678714752197, 4.961358547210693], + [-3.820512533187866, -3.3102033138275146], + [4.687255382537842, 7.701464653015137], + [-4.587915897369385, -0.7970730662345886], + [-4.175086498260498, -1.4135814905166626], + [0.33997297286987305, -6.214330673217773], + [5.953393459320068, -2.0498580932617188], + [-1.084323763847351, -1.9178898334503174], + [-0.33476153016090393, -1.6934220790863037], + [0.12509852647781372, -5.458056449890137], + [-5.120639324188232, 3.6840479373931885], + [2.6058509349823, -4.342139720916748], + [2.894503355026245, -5.084633827209473], + [3.608853578567505, -6.045597076416016], + [-0.6512062549591064, 10.05870246887207], + [2.8187382221221924, -4.555682182312012], + [0.3197903037071228, 2.5227434635162354], + [-0.9926149845123291, 10.159830093383789], + [-0.4842159152030945, 9.469940185546875], + [1.9237234592437744, -3.880154848098755], + [0.7338399291038513, 5.3697967529296875], + [-0.9615610241889954, -0.7629531025886536], + [-3.2781312465667725, -1.1960933208465576], + [-0.9077447056770325, 10.589298248291016], + [9.857708930969238, -2.965131998062134], + [-3.2252414226531982, -1.4857454299926758], + [1.1323225498199463, -5.083940505981445], + [-4.616919040679932, 7.014584064483643], + [1.0288803577423096, -5.999006271362305], + [2.552903890609741, -4.505809783935547], + [2.227538824081421, -5.861992359161377], + [-4.338902950286865, -1.874146580696106], + [6.979402542114258, -2.573317766189575], + [0.5131208896636963, -6.243376731872559], + [-2.4867441654205322, -0.6918872594833374], + [-3.4310190677642822, -1.7422266006469727], + [-4.776081085205078, -1.0668331384658813], + [2.755401372909546, -5.328743934631348], + [-1.7809510231018066, 3.6123602390289307], + [-1.9283063411712646, 1.4811041355133057], + [-0.03726062923669815, -4.711821556091309], + [-0.6191400289535522, 7.773773670196533], + [-1.8949015140533447, 2.0421335697174072], + [-3.548363447189331, -1.4447625875473022], + [7.0220723152160645, -2.713017702102661], + [-4.7388014793396, 5.015070915222168], + [-1.7177332639694214, 1.6934378147125244], + [3.518338918685913, 6.454880714416504], + [-1.1608116626739502, 5.656405448913574], + [-3.0486831665039062, -2.4734370708465576], + [-0.37342363595962524, 5.051499366760254], + [-5.56133508682251, -4.397531032562256], + [-4.718267440795898, -1.3276396989822388], + [0.7575742602348328, -0.5852408409118652], + [3.0084245204925537, -4.80586051940918], + [1.0732636451721191, -6.097577095031738], + [4.689552307128906, 8.083736419677734], + [0.02503853291273117, -2.5856740474700928], + [-1.8800878524780273, 1.2952245473861694], + [-1.7280850410461426, 1.7682981491088867], + [-0.25202926993370056, -1.6562930345535278], + [-1.3047575950622559, 1.172563910484314], + [-1.8774961233139038, -0.9675973057746887], + [-3.4726150035858154, -2.084592580795288], + [-3.6266696453094482, -1.751867413520813], + [0.12056808918714523, 8.34301471710205], + [8.819931030273438, -2.65529465675354], + [2.7348713874816895, -4.707392692565918], + [1.8378394842147827, -4.153347969055176], + [1.8531619310379028, 2.4599318504333496], + [0.9857357144355774, 0.48043960332870483], + [2.113738775253296, 0.9773967266082764], + [-1.6299577951431274, -0.43539971113204956], + [4.082711696624756, 7.451691627502441], + [-4.034482955932617, 1.0254371166229248], + [1.5634872913360596, -4.326613426208496], + [-4.023470878601074, 3.4898834228515625], + [-1.2413722276687622, 10.503358840942383], + [0.42584729194641113, -4.934298515319824], + [0.1847895383834839, -6.333605766296387], + [-5.073107719421387, -1.5703388452529907], + [-2.7462503910064697, -2.0970618724823], + [-1.1065555810928345, 3.028247594833374], + [0.7006096243858337, -8.478241920471191], + [8.249671936035156, -2.8468868732452393], + [6.808047771453857, -2.4389402866363525], + [-0.11916876584291458, -0.4348073899745941], + [-4.474451541900635, 6.313318729400635], + [-4.34042501449585, 6.3414788246154785], + [-2.568263053894043, 2.318572998046875], + [-4.748525142669678, 4.846634864807129], + [0.9436758160591125, -4.865749359130859], + [-4.830585956573486, 4.800848007202148], + [-4.317011833190918, -1.8735344409942627], + [2.2924177646636963, 0.5909062623977661], + [-4.050451278686523, -1.180665135383606], + [-0.6809126734733582, 9.878335952758789], + [0.5157526135444641, -8.166936874389648], + [-4.3816633224487305, -3.869379758834839], + [-2.912351131439209, 5.305607318878174], + [-1.8907634019851685, -0.7428314685821533], + [-4.480459690093994, -2.5217483043670654], + [-1.6664791107177734, 1.0237163305282593], + [-1.024157166481018, 0.04748481139540672], + [8.1255521774292, -3.0667593479156494], + [-0.773516058921814, 8.49077033996582], + [-0.8100911974906921, 10.00473690032959], + [0.6445062756538391, -8.864952087402344], + [0.46358102560043335, -7.258526802062988], + [-1.9358631372451782, 1.168501853942871], + [8.17890453338623, -2.330584764480591], + [-3.7696053981781006, 5.827470302581787], + [2.0856778621673584, -4.705256462097168], + [-0.18196481466293335, -1.5859920978546143], + [6.892360687255859, -3.3961985111236572], + [0.6301763653755188, 0.18512199819087982], + [-3.07189679145813, 4.4251298904418945], + [-5.1598944664001465, 4.081367015838623], + [-3.889538526535034, -0.5944164395332336], + [0.8869336247444153, -4.2370100021362305], + [-0.37171733379364014, 6.447612762451172], + [-0.7787186503410339, 3.086352586746216], + [4.494494915008545, -3.7953453063964844], + [-2.3286256790161133, 2.7731709480285645], + [2.8622257709503174, -4.974357604980469], + [4.422119617462158, 7.416618347167969], + [9.101011276245117, -2.7309842109680176], + [2.4346885681152344, -4.546015739440918], + [-2.882628917694092, 3.8208227157592773], + [0.36947405338287354, 6.173083782196045], + [1.3438528776168823, 0.030742917209863663], + [0.6091374158859253, -4.761716842651367], + [2.6579954624176025, -4.229465007781982], + [2.459028720855713, -4.009433746337891], + [0.46710890531539917, 5.248044013977051], + [0.5029510259628296, -0.8323483467102051], + [-0.9406252503395081, -0.4165059030056], + [-0.7982175946235657, 11.139970779418945], + [-1.8194482326507568, -0.7972908020019531], + [1.338186264038086, 3.891852617263794], + [0.9483012557029724, -0.5231566429138184], + [-0.0010743215680122375, -4.690621852874756], + [-3.3320846557617188, -2.5645315647125244], + [-0.45384812355041504, -1.2987197637557983], + [1.3609182834625244, -0.04114112630486488], + [-1.2740483283996582, 10.789932250976562], + [1.3442106246948242, 4.741913795471191], + [2.6747281551361084, -4.628507614135742], + [6.220717906951904, -2.5805861949920654], + [0.2799665331840515, -6.7017011642456055], + [-0.7480909824371338, 9.421380996704102], + [-2.934443235397339, -1.1464029550552368], + [-1.270491123199463, 11.182575225830078], + [-4.0891194343566895, 6.827630519866943], + [-3.9231646060943604, 6.200807571411133], + [2.623661756515503, -5.119976043701172], + [-0.9240120053291321, 10.241878509521484], + [0.5118620991706848, -6.558752059936523], + [-5.4560112953186035, 1.2649232149124146], + [-5.344999313354492, 5.8200225830078125], + [-0.3384384512901306, 10.10842514038086], + [0.5782150030136108, -0.5594181418418884], + [-3.630756139755249, -1.357599139213562], + [-1.706713080406189, 2.2390189170837402], + [-2.6070187091827393, 2.6925601959228516], + [-0.9812586307525635, 7.741753578186035], + [-1.6139765977859497, 0.9457805156707764], + [1.883622646331787, -4.8394365310668945], + [0.3963779807090759, -6.161595344543457], + [6.579243183135986, -4.849702835083008], + [-4.250865459442139, 6.551144599914551], + [2.5757205486297607, -4.2836503982543945], + [-0.9111648797988892, 10.335132598876953], + [2.8309504985809326, -4.620067119598389], + [1.3727308511734009, 6.5447540283203125], + [-1.3893451690673828, 11.767768859863281], + [-3.827401876449585, -1.7673438787460327], + [3.1924967765808105, -3.73972225189209], + [0.5134631395339966, -6.993574142456055], + [-0.4102170467376709, 9.788053512573242], + [-5.170877933502197, 6.546207904815674], + [6.287905216217041, -1.3161565065383911], + [-3.622831106185913, -2.6378159523010254], + [-4.343841552734375, 6.401951789855957], + [2.7881791591644287, -4.61885404586792], + [1.3300825357437134, 4.894381046295166], + [6.404526233673096, -2.535977602005005], + [-4.6871337890625, 4.070301055908203], + [0.46325981616973877, -6.2305779457092285], + [-5.372945308685303, 5.090794563293457], + [1.9853408336639404, 3.1669952869415283], + [-1.0467462539672852, 11.00162410736084], + [2.6164674758911133, -4.151943206787109], + [-1.4791351556777954, 0.5081189274787903], + [-5.026469707489014, 7.136010646820068], + [0.8883146047592163, 4.639272212982178], + [7.239360332489014, -3.414768934249878], + [-5.22582483291626, -5.1883111000061035], + [-1.854934573173523, 2.1864378452301025], + [6.567356586456299, -5.23519229888916], + [0.6969245672225952, -5.142555236816406], + [-1.223935604095459, 11.106424331665039], + [2.2561614513397217, -4.607539176940918], + [7.0650787353515625, -2.0522990226745605], + [-1.868233323097229, -0.6152380704879761], + [-1.0693289041519165, 11.071020126342773], + [-4.361718654632568, 6.993801116943359], + [2.3388140201568604, 4.957818984985352], + [-5.368542671203613, 5.963655471801758], + [-3.5154976844787598, -2.636376142501831], + [0.4605613946914673, -5.177284240722656], + [-1.0117343664169312, 0.721441388130188], + [-3.813445806503296, 4.96147346496582], + [-1.2490324974060059, 11.810323715209961], + [5.120538234710693, -4.858874797821045], + [-3.5074141025543213, 5.125696659088135], + [-0.5072698593139648, -1.179556131362915], + [-2.4620158672332764, 6.527704238891602], + [8.276185989379883, -2.9412660598754883], + [0.4974602460861206, 1.796205759048462], + [1.5859177112579346, 3.7437689304351807], + [-5.554745197296143, -0.9331528544425964], + [-4.9255242347717285, 5.486594200134277], + [0.5242819786071777, -2.7998664379119873], + [-5.695504188537598, 2.8962860107421875], + [-5.00311803817749, 0.4604905843734741], + [0.5317046046257019, -6.216569900512695], + [0.5390726923942566, -0.610588550567627], + [2.5220468044281006, 3.0276050567626953], + [-1.8613221645355225, 1.7881320714950562], + [5.824754238128662, -2.3715598583221436], + [-0.6037552952766418, -1.0429883003234863], + [-4.998023509979248, -4.384612083435059], + [-5.434875011444092, -4.468750953674316], + [-5.266209125518799, 6.345590114593506], + [5.2678399085998535, -3.4323503971099854], + [-5.632071495056152, 8.10189437866211], + [1.9239270687103271, 0.8274620771408081], + [-1.6706212759017944, 0.5591872930526733], + [-5.046407222747803, -1.5338367223739624], + [-1.9579252004623413, 1.937061071395874], + [2.0343544483184814, 5.18953800201416], + [-5.5020670890808105, -0.6579884886741638], + [-3.1343438625335693, -0.5947719812393188], + [-3.5302069187164307, 6.064028739929199], + [-2.974564790725708, 2.9263627529144287], + [0.8235726952552795, -7.263630390167236], + [-1.5246034860610962, -1.6285682916641235], + [1.197823405265808, -5.193520545959473], + [0.6613077521324158, -8.117566108703613], + [0.9534304738044739, -7.53253173828125], + [4.30803108215332, 7.05495548248291], + [4.724062442779541, 7.643874168395996], + [-0.1614914834499359, -3.8779103755950928], + [9.199766159057617, -2.832184076309204], + [6.888191223144531, -2.2854955196380615], + [-3.2452690601348877, -0.7354664206504822], + [-3.455919027328491, 7.65436315536499], + [-5.232370853424072, 4.73853874206543], + [0.7517600059509277, -8.430720329284668], + [2.7080867290496826, 5.191224575042725], + [-4.03615665435791, -1.9516292810440063], + [-3.7473304271698, -2.609196424484253], + [-4.518631458282471, -1.0658884048461914], + [-4.493729591369629, 1.4687044620513916], + [-1.2689428329467773, 11.402589797973633], + [-0.8732684254646301, -3.582313060760498], + [5.895920276641846, -3.096494197845459], + [-0.9438578486442566, 10.632514953613281], + [-4.1915974617004395, -2.1689066886901855], + [0.0709918662905693, 7.384987831115723], + [8.745766639709473, -2.6684410572052], + [1.14022958278656, -7.144828796386719], + [-3.284461259841919, -1.8936502933502197], + [2.6624934673309326, 6.550589084625244], + [-3.7803409099578857, 5.526243209838867], + [-3.8110463619232178, -2.703219413757324], + [-2.365787982940674, -1.1991541385650635], + [-2.556290864944458, 2.389286756515503], + [-0.6242209076881409, 9.268549919128418], + [-0.17753958702087402, 8.8126220703125], + [-1.6094915866851807, 1.910223126411438], + [3.440356969833374, 6.756818771362305], + [2.6876468658447266, -5.234987258911133], + [-2.0127387046813965, 2.5150678157806396], + [4.399853229522705, 7.588658332824707], + [6.188733100891113, -1.2343806028366089], + [-3.051955461502075, -1.3636674880981445], + [-4.429601192474365, -1.235717535018921], + [-0.45787084102630615, -1.3545528650283813], + [0.8696079254150391, -5.506770133972168], + [8.332735061645508, -2.752438545227051], + [2.135120391845703, -4.091120719909668], + [-3.3611199855804443, -1.3967257738113403], + [-4.442863941192627, -0.9523305892944336], + [2.5304648876190186, 6.200610160827637], + [-0.26415491104125977, 8.31792163848877], + [-4.808840274810791, 6.76138973236084], + [-4.535960674285889, 5.0684380531311035], + [7.0229926109313965, -2.413182497024536], + [1.5985004901885986, 5.53916072845459], + [0.4425501823425293, -7.2939133644104], + [5.8205108642578125, 8.720617294311523], + [-1.6388449668884277, 1.2843141555786133], + [0.45993274450302124, -7.296364784240723], + [-3.350032091140747, 5.374182224273682], + [9.697854042053223, -2.9904067516326904], + [-3.461747646331787, -2.543802499771118], + [2.222637891769409, -5.216507911682129], + [0.5850499272346497, -8.315192222595215], + [-5.550753593444824, 7.7151336669921875], + [0.2552296221256256, -5.50571870803833], + [2.541724920272827, -4.838956832885742], + [-5.5035400390625, 5.109718322753906], + [-2.6753342151641846, 2.795210123062134], + [-1.4211430549621582, 11.320039749145508], + [-3.3310253620147705, -0.6876987218856812], + [-4.442036151885986, -1.2581490278244019], + [-2.4209563732147217, -2.141589879989624], + [-1.1382098197937012, 3.2780516147613525], + [-4.1247053146362305, -2.7194249629974365], + [5.078891277313232, -3.9767844676971436], + [-3.88395619392395, 4.0285210609436035], + [2.5254836082458496, -3.958139181137085], + [3.0467710494995117, 5.998431205749512], + [-4.161529541015625, 6.5856122970581055], + [2.2903802394866943, -4.616899490356445], + [1.634597897529602, 7.2579851150512695], + [8.425919532775879, -2.4850668907165527], + [3.0544779300689697, 6.334172248840332], + [-2.7815330028533936, -0.39073702692985535], + [0.7370215058326721, -8.198911666870117], + [7.443536758422852, -2.5148980617523193], + [-2.78437876701355, -1.4030693769454956], + [8.762190818786621, -3.03568434715271], + [-0.2145303189754486, -1.4083553552627563], + [3.0244598388671875, 6.74721622467041], + [-2.88857364654541, -1.6866087913513184], + [-1.7485556602478027, 0.9979331493377686], + [2.424529790878296, 4.782926559448242], + [2.116231679916382, 3.222585916519165], + [-1.1635632514953613, 0.2022271752357483], + [4.764638423919678, 7.623125076293945], + [-1.0986647605895996, 9.524139404296875], + [1.8882873058319092, -5.129878997802734], + [0.7091251611709595, -7.26005744934082], + [-1.732965350151062, 1.2483768463134766], + [2.8136050701141357, -4.039667129516602], + [-2.2771475315093994, 0.006138082593679428], + [2.4795212745666504, 5.621885776519775], + [2.4308865070343018, -4.123438835144043], + [1.5369293689727783, 4.780043601989746], + [-0.6886717081069946, 9.682844161987305], + [4.924605846405029, 7.689821720123291], + [0.1525690257549286, -5.414651393890381], + [1.5801085233688354, -0.03828922286629677], + [-1.8149315118789673, 0.7541948556900024], + [7.33549690246582, -2.8010141849517822], + [-3.6094493865966797, -1.0637763738632202], + [-1.727177619934082, 1.3490291833877563], + [-0.8103650808334351, 10.227794647216797], + [2.5081753730773926, 5.2504496574401855], + [-1.1612002849578857, 10.666476249694824], + [5.639154434204102, -1.1602519750595093], + [2.240234136581421, 5.313131809234619], + [1.4679853916168213, 5.815966606140137], + [1.3621587753295898, 0.09261313080787659], + [9.674555778503418, -3.085221767425537], + [-1.9908366203308105, 0.007962580770254135], + [-0.8276895880699158, -1.0676950216293335], + [-0.7686513662338257, 9.7584810256958], + [1.3631691932678223, -5.320102691650391], + [4.2921576499938965, 7.595278263092041], + [-2.3267440795898438, 0.2639598250389099], + [-1.1368889808654785, 1.8470615148544312], + [-3.486900568008423, -1.3481844663619995], + [4.930018901824951, -0.6830801963806152], + [6.366097927093506, 9.215675354003906], + [0.7734508514404297, -5.957446098327637], + [2.167234182357788, 5.195828914642334], + [0.73701411485672, -5.773541450500488], + [-3.39007568359375, -1.1417393684387207], + [-2.8983824253082275, -1.0435303449630737], + [9.722065925598145, -2.9031784534454346], + [-5.66072416305542, -1.0106977224349976], + [-3.7583248615264893, -2.389331817626953], + [5.545451641082764, -3.555178642272949], + [0.5516373515129089, -5.5647077560424805], + [0.34437865018844604, -6.541985034942627], + [0.5226801037788391, -0.5147492289543152], + [-3.4337236881256104, -1.5433646440505981], + [5.7244486808776855, -1.834654688835144], + [7.089264392852783, -2.347369432449341], + [3.5486717224121094, -3.583674669265747], + [2.651212453842163, 5.991217613220215], + [-0.42961597442626953, -1.279403805732727], + [-4.8314948081970215, 5.622701644897461], + [7.360971450805664, -2.091637134552002], + [0.6170110702514648, -8.11174201965332], + [-2.284391164779663, 2.167429208755493], + [-2.0126991271972656, 1.1496104001998901], + [-1.3764853477478027, 12.126644134521484], + [6.496993541717529, -1.8578238487243652], + [0.7645954489707947, -8.331448554992676], + [-0.9994134902954102, -1.3148653507232666], + [7.205303192138672, -2.9767701625823975], + [-4.3583149909973145, 4.510347366333008], + [-4.101511478424072, -0.15452849864959717], + [4.118314266204834, 6.906464099884033], + [-4.403737545013428, -0.9911685585975647], + [2.4901974201202393, 0.6490769386291504], + [0.3537582755088806, 5.775235176086426], + [2.340829372406006, -3.4442269802093506], + [1.2894515991210938, -5.628316879272461], + [0.5364342331886292, -7.64118766784668], + [-1.2136261463165283, 10.287030220031738], + [0.7519592642784119, -7.6328582763671875], + [3.6330175399780273, 6.861560344696045], + [-1.7338591814041138, 1.699695110321045], + [1.6867624521255493, 1.3673754930496216], + [-0.23072516918182373, 8.735092163085938], + [-1.7791961431503296, 1.6991612911224365], + [0.10679008811712265, -2.328524351119995], + [-3.173556089401245, -0.6545708775520325], + [6.548156261444092, -2.218642234802246], + [-0.013276882469654083, -4.1724853515625], + [-0.05220506340265274, -4.142797470092773], + [-4.754947185516357, 6.7748212814331055], + [-4.0056047439575195, -1.546897053718567], + [0.4793316721916199, -6.020208358764648], + [-4.5842156410217285, -0.9668633937835693], + [-4.409474849700928, -2.8571953773498535], + [0.42726224660873413, -6.54105281829834], + [-2.477964162826538, 2.5342538356781006], + [-2.64910626411438, -2.080883264541626], + [-0.005496792495250702, -1.3170626163482666], + [1.1524677276611328, -5.185104846954346], + [-1.9469454288482666, 1.9648445844650269], + [0.6146625876426697, -8.479023933410645], + [-3.314870595932007, -0.7688945531845093], + [-0.27649855613708496, -0.6645355224609375], + [-6.196717739105225, 8.505111694335938], + [8.36331558227539, -2.9643261432647705], + [7.66864538192749, -2.991642713546753], + [-3.0268149375915527, 5.446260452270508], + [1.745596170425415, 2.251237392425537], + [-3.7791645526885986, -0.5268971920013428], + [-0.43406224250793457, -1.8316038846969604], + [0.601989209651947, -5.315058708190918], + [-2.053753614425659, 0.13922536373138428], + [0.3496621251106262, -6.331255912780762], + [6.891167640686035, -2.7231719493865967], + [-1.293862223625183, 11.271920204162598], + [-2.7267353534698486, 6.229405879974365], + [0.6822633147239685, -8.216499328613281], + [-4.87226676940918, -1.1038005352020264], + [-5.412532329559326, 7.262380599975586], + [-4.417265892028809, -1.9116495847702026], + [-2.4439890384674072, -2.267137289047241], + [1.5858306884765625, -6.555485248565674], + [8.971657752990723, -2.681485652923584], + [2.348459482192993, 0.36998283863067627], + [2.4043056964874268, -4.01420259475708], + [-0.8804249167442322, 10.220849990844727], + [4.071544170379639, 7.327445983886719], + [2.4265196323394775, -4.479002475738525], + [1.4993090629577637, 2.8032329082489014], + [-3.7815096378326416, -0.9042155742645264], + [-1.8210680484771729, 0.6027288436889648], + [-4.301992893218994, 6.888694763183594], + [-3.341970205307007, -0.6551634669303894], + [-4.409830093383789, 6.069929599761963], + [8.065953254699707, -3.672515392303467], + [-1.1135804653167725, 11.16767692565918], + [0.4104577898979187, -6.9486002922058105], + [3.510652780532837, -4.156303405761719], + [-3.854663610458374, -1.4800487756729126], + [-4.266870021820068, -3.0423343181610107], + [-3.31307053565979, -1.414774775505066], + [-3.9510087966918945, 5.982885360717773], + [2.38407826423645, 4.288418769836426], + [8.481751441955566, -2.8494250774383545], + [-2.724867820739746, -0.9773722887039185], + [1.3421657085418701, 0.6227372288703918], + [-0.7096186280250549, 9.875280380249023], + [0.5964712500572205, -5.101930618286133], + [1.6553192138671875, 5.367272853851318], + [-4.173953533172607, -1.849634051322937], + [6.606065273284912, -2.904601812362671], + [1.2040174007415771, -4.251070976257324], + [0.860451340675354, -0.08256036043167114], + [7.315464973449707, -2.177377939224243], + [0.35453128814697266, -6.702985763549805], + [1.0058412551879883, 6.352831840515137], + [1.7498282194137573, 5.326357841491699], + [-1.8170766830444336, 0.8455196022987366], + [-1.1018255949020386, 10.98584270477295], + [-5.270694255828857, 6.9292120933532715], + [8.210545539855957, -3.0939762592315674], + [2.675199508666992, -4.542123794555664], + [-3.869706392288208, 0.022581037133932114], + [1.704834222793579, 0.6936519742012024], + [-4.186197757720947, 3.7262542247772217], + [-1.6656007766723633, -0.8099762201309204], + [-4.824269771575928, 6.5951738357543945], + [8.743643760681152, -2.6632800102233887], + [-0.23794138431549072, 9.483535766601562], + [-2.757843017578125, -1.561414122581482], + [-3.801466941833496, -1.8901102542877197], + [-1.4143046140670776, 2.2690012454986572], + [8.369623184204102, -2.833838939666748], + [0.3352177143096924, -2.1016719341278076], + [2.497807741165161, 4.785602569580078], + [-0.6116864085197449, -1.2950810194015503], + [0.11766277998685837, -4.983469486236572], + [2.097747802734375, 0.7694669961929321], + [5.911011219024658, -1.9150673151016235], + [-2.1322686672210693, -1.1813291311264038], + [-5.847024440765381, -0.8852219581604004], + [3.4844179153442383, 6.265044689178467], + [-4.250058650970459, -3.078829765319824], + [2.2023961544036865, 5.9045729637146], + [6.605679035186768, -2.9656097888946533], + [-1.7374873161315918, -2.195552110671997], + [2.6584632396698, -4.4492340087890625], + [-2.133671522140503, -1.4728769063949585], + [0.5474235415458679, -7.718162536621094], + [-3.5329267978668213, -1.2340067625045776], + [0.844124436378479, 5.2879719734191895], + [-3.1949431896209717, -1.206952691078186], + [-1.2297232151031494, -3.041104555130005], + [1.7832610607147217, 2.066014289855957], + [3.005960702896118, 6.622234344482422], + [1.793611764907837, 5.131356239318848], + [-3.3903839588165283, -1.6347898244857788], + [-4.679754257202148, -2.128363609313965], + [-1.9139269590377808, 2.2120072841644287], + [0.5765131711959839, -7.749363899230957], + [2.2230539321899414, -5.475980281829834], + [-4.060116291046143, 4.6383466720581055], + [2.0827600955963135, -4.546926021575928], + [0.5639426708221436, -7.695420742034912], + [2.5487992763519287, -5.337679862976074], + [-3.7761991024017334, -1.4518462419509888], + [-5.060731410980225, 6.243880271911621], + [6.667777061462402, -4.267148017883301], + [-1.7865304946899414, 0.9861893653869629], + [-4.524440765380859, -1.6143437623977661], + [-2.67124080657959, -1.072588324546814], + [-1.3434362411499023, 11.642457008361816], + [5.887864589691162, -4.536314964294434], + [2.733313798904419, -4.447942733764648], + [-3.374211072921753, -0.47043371200561523], + [6.219411373138428, -3.42692494392395], + [-4.746969699859619, 7.346736907958984], + [-5.290215492248535, 6.490056037902832], + [0.27525246143341064, -5.7499189376831055], + [-3.7155375480651855, 5.9851179122924805], + [-2.778559923171997, -1.1890482902526855], + [0.5354525446891785, -6.251823425292969], + [-4.134424686431885, 6.139128684997559], + [2.9330403804779053, -4.666289329528809], + [-0.7924712300300598, 9.679601669311523], + [1.9395029544830322, 0.3508974313735962], + [5.859846591949463, -1.6536009311676025], + [6.607089519500732, -1.7156676054000854], + [-4.352999687194824, -0.9139065146446228], + [-4.5433125495910645, -1.0790451765060425], + [-5.586531162261963, 4.23689603805542], + [0.7485911250114441, -5.783442497253418], + [-4.27179479598999, -1.5509227514266968], + [-1.1208744049072266, 1.7435487508773804], + [-1.563062071800232, 1.2003625631332397], + [4.870005130767822, 7.65033483505249], + [-0.39880210161209106, 9.740954399108887], + [-0.6629202365875244, 9.41062068939209], + [-0.9662335515022278, 9.21617317199707], + [2.238369941711426, -3.9886419773101807], + [0.3117225170135498, -5.839991092681885], + [-3.1982905864715576, -1.3881821632385254], + [-2.7814924716949463, -0.693804144859314], + [6.062498569488525, -2.2928621768951416], + [-1.3064360618591309, 11.752829551696777], + [-4.125267505645752, 4.304812908172607], + [-4.220203876495361, 4.009298324584961], + [0.3131565451622009, -6.069019317626953], + [0.08231081813573837, -0.830986499786377], + [-0.5849316716194153, 9.610273361206055], + [2.4781806468963623, -5.896951198577881], + [0.5740272998809814, -6.228780269622803], + [-0.9384891986846924, -1.2688401937484741], + [-2.0372331142425537, 1.3855276107788086], + [3.8434598445892334, 7.381633281707764], + [-1.4228516817092896, 0.002131875604391098], + [-4.2217512130737305, -2.963343381881714], + [5.617489337921143, 8.5617036819458], + [-0.5277439951896667, 10.052948951721191], + [-1.5834996700286865, 1.625066876411438], + [0.6571017503738403, -0.2619164288043976], + [-2.127035140991211, -1.1238633394241333], + [-0.247503399848938, 9.36813735961914], + [-3.4463937282562256, -1.119310975074768], + [-1.7097076177597046, -1.0863614082336426], + [7.114283561706543, -2.414327621459961], + [-1.657256841659546, -1.0392159223556519], + [0.6387139558792114, -8.324604034423828], + [-3.7374916076660156, -1.315684199333191], + [-1.3697322607040405, 11.53459644317627], + [-4.235876560211182, 6.264707565307617], + [-0.6597087979316711, 9.641363143920898], + [0.6553410887718201, -8.826251983642578], + [1.0043995380401611, -0.2550761103630066], + [-3.665990114212036, -1.292845368385315], + [-3.9865500926971436, -2.306241989135742], + [-2.929497480392456, -0.3018920421600342], + [1.9034658670425415, 2.2375028133392334], + [-0.6930209994316101, 10.139589309692383], + [-2.7478420734405518, -0.6335155963897705], + [0.3459656834602356, -6.098947048187256], + [0.8766698837280273, -5.790170192718506], + [1.6286948919296265, -4.556746482849121], + [-0.877520740032196, -2.6832096576690674], + [-5.302967071533203, -1.0313665866851807], + [2.955376625061035, -4.545623779296875], + [2.703087091445923, -4.624266624450684], + [0.46970176696777344, -4.775778770446777], + [-1.3614048957824707, 1.636618733406067], + [-2.9080231189727783, -1.0593197345733643], + [-2.5885355472564697, 2.7736473083496094], + [-0.37425532937049866, 6.631566047668457], + [2.88784122467041, -4.09194278717041], + [1.3496177196502686, -6.282777786254883], + [5.979455947875977, -3.6667463779449463], + [1.257952094078064, -5.880463600158691], + [4.020778179168701, -5.3735175132751465], + [2.6902735233306885, -4.008326530456543], + [-3.723182201385498, -1.0267423391342163], + [-4.331934928894043, -4.304732322692871], + [6.448978900909424, -3.8942530155181885], + [1.115401268005371, 5.003164291381836], + [-2.290147066116333, 4.942667007446289], + [-4.1442179679870605, -3.5170443058013916], + [-4.024667739868164, -0.453851580619812], + [-3.482774019241333, 5.201959609985352], + [4.470320224761963, 7.5015177726745605], + [-3.6452248096466064, 3.964681386947632], + [-4.203554630279541, -1.024520754814148], + [3.024270534515381, -4.790337085723877], + [0.3652700185775757, -5.143164157867432], + [-3.954070568084717, 6.4868340492248535], + [2.109937906265259, 5.007674217224121], + [7.816929817199707, -2.9844412803649902], + [4.463469982147217, 7.572049617767334], + [1.2282452583312988, -6.219088554382324], + [0.6868451237678528, -8.071033477783203], + [-4.74699068069458, 5.372925281524658], + [-2.365682601928711, 0.26671504974365234], + [0.9427143931388855, -0.11920234560966492], + [-0.7306153774261475, 10.393935203552246], + [-1.3900057077407837, 1.6553109884262085], + [-1.938368320465088, -0.06508797407150269], + [1.425998568534851, 4.8604230880737305], + [-4.185990810394287, -1.3700519800186157], + [-4.160015106201172, -2.549327850341797], + [-0.2584090828895569, 9.43999195098877], + [-1.783527135848999, 0.9616698026657104], + [-4.480942726135254, -3.7525665760040283], + [-1.9362335205078125, 2.5478994846343994], + [2.1815345287323, -5.603791236877441], + [8.704362869262695, -3.1614489555358887], + [1.6394027471542358, 0.3266769349575043], + [-4.064729690551758, -2.9672586917877197], + [-4.20780611038208, -1.8037015199661255], + [-3.7890963554382324, -0.9993785619735718], + [7.080991744995117, -2.7914769649505615], + [2.571368932723999, -4.690884590148926], + [8.798323631286621, -2.895253896713257], + [2.193565607070923, 3.4125499725341797], + [-4.978496074676514, 5.721108436584473], + [-2.9720356464385986, -2.51567006111145], + [0.6573920845985413, -8.48331069946289], + [-0.04775650054216385, -5.067199230194092], + [5.523744106292725, -1.2161353826522827], + [7.326137542724609, -2.3379549980163574], + [-3.973008394241333, -0.5398423075675964], + [7.357640743255615, -2.1930854320526123], + [3.2271392345428467, 6.393922328948975], + [-1.240835428237915, 12.039085388183594], + [1.6323281526565552, 4.365616798400879], + [-4.263786792755127, -0.7709420919418335], + [-0.7853170037269592, 10.186029434204102], + [5.398464679718018, 8.256510734558105], + [-2.7035114765167236, 2.892021417617798], + [-3.6113839149475098, -1.1519852876663208], + [-2.1633501052856445, -2.0394113063812256], + [-1.1082834005355835, 10.800774574279785], + [-4.682065963745117, 3.942995309829712], + [0.364990770816803, -7.23342227935791], + [-4.112764358520508, -0.5744962692260742], + [-1.9201581478118896, -0.7201712131500244], + [-3.62314510345459, 5.905351638793945], + [-1.5374481678009033, 1.0332403182983398], + [7.921966075897217, -2.306487798690796], + [-0.1767568588256836, 8.130744934082031], + [-1.9228434562683105, -3.4649300575256348], + [0.29856136441230774, -1.2205266952514648], + [5.829487323760986, -3.518599271774292], + [-5.117916107177734, 7.182676792144775], + [4.572019100189209, -3.2243525981903076], + [-4.710646629333496, -3.1364471912384033], + [-3.814150333404541, 6.361166000366211], + [1.799931287765503, 5.236514091491699], + [-4.085958003997803, -1.1581683158874512], + [1.8459348678588867, -5.035799980163574], + [-1.1466530561447144, 1.6434122323989868], + [0.46880048513412476, -6.40633487701416], + [-4.699632167816162, 6.792081832885742], + [2.8728504180908203, -4.867648124694824], + [-2.857149124145508, -1.2293940782546997], + [1.1488878726959229, -4.6949076652526855], + [0.453888475894928, -0.19406045973300934], + [-0.5864054560661316, 9.695392608642578], + [-4.038129806518555, -0.7695086002349854], + [2.1429994106292725, 1.1028028726577759], + [-0.870385468006134, 11.331555366516113], + [4.5632643699646, 8.216901779174805], + [-1.1372135877609253, 10.31773567199707], + [-3.407405138015747, -1.2788721323013306], + [-2.1164774894714355, 1.9424861669540405], + [-5.274810314178467, 5.921695709228516], + [4.419577121734619, -3.336876153945923], + [0.9720620512962341, -0.4343549609184265], + [-2.573056697845459, -1.195892572402954], + [-4.447036266326904, -3.3108441829681396], + [-2.3401124477386475, 2.548632860183716], + [-4.767408847808838, 7.304396629333496], + [1.705585241317749, -6.710354328155518], + [0.604854941368103, -5.302065849304199], + [-1.3217527866363525, 11.754369735717773], + [1.711574673652649, -4.023439884185791], + [0.5855034589767456, -6.784590244293213], + [2.4138693809509277, 5.907415866851807], + [-5.505424976348877, 7.30249547958374], + [3.6789066791534424, 7.127391815185547], + [-0.152177095413208, -1.0388833284378052], + [-5.52729606628418, -1.0588533878326416], + [0.6901596188545227, -5.037720203399658], + [-3.5746469497680664, 6.0847063064575195], + [-1.2154582738876343, 11.054372787475586], + [-5.867667198181152, -0.9206060171127319], + [-4.256628513336182, -2.5121095180511475], + [-5.221414089202881, -0.8128430247306824], + [-0.8228891491889954, 9.64115047454834], + [0.5072621703147888, -6.847757339477539], + [-4.61536169052124, -0.8069853782653809], + [-3.1435747146606445, 6.418412208557129], + [2.99023175239563, -5.134753227233887], + [-1.1384451389312744, 10.375368118286133], + [1.430999994277954, 2.9343018531799316], + [4.0523271560668945, 7.238877296447754], + [-1.8348186016082764, 1.7269150018692017], + [-1.1775485277175903, 10.232806205749512], + [-1.036397933959961, 10.30616569519043], + [-1.2107584476470947, 11.40123176574707], + [6.863752365112305, -2.482435464859009], + [1.064362645149231, -0.07429254055023193], + [0.7952994108200073, -8.000818252563477], + [6.504650592803955, -5.082796573638916], + [-3.7734298706054688, -1.3299249410629272], + [1.5508055686950684, 3.890000104904175], + [-1.0133312940597534, 9.463804244995117], + [-5.169225692749023, -0.7358196377754211], + [-3.7023229598999023, -1.1355953216552734], + [0.45599639415740967, -5.495800495147705], + [0.6516719460487366, -8.183110237121582], + [1.650399088859558, 4.296566009521484], + [-4.144939422607422, -2.5376765727996826], + [-1.6540966033935547, -2.227682113647461], + [0.9690715670585632, -0.16444435715675354], + [1.5827429294586182, 4.713171482086182], + [-3.629004955291748, -0.2528243660926819], + [7.274528503417969, -2.159208059310913], + [-1.9631788730621338, 1.8049732446670532], + [-4.311141490936279, 6.829188346862793], + [0.641528308391571, -8.144791603088379], + [5.263920307159424, 7.952552795410156], + [-3.8939340114593506, -2.8900294303894043], + [-1.225364327430725, 11.053024291992188], + [-4.18297004699707, 6.641174793243408], + [-3.6677544116973877, -2.4788708686828613], + [1.7126061916351318, 5.830849647521973], + [2.702298402786255, -4.634021759033203], + [2.3624110221862793, -4.374312400817871], + [-3.642263889312744, -1.7961623668670654], + [-4.536956310272217, 3.3268883228302], + [0.421719491481781, -6.935538291931152], + [7.314392566680908, -3.1030378341674805], + [-1.4874367713928223, 12.545743942260742], + [1.8523635864257812, 4.003259181976318], + [1.5081676244735718, 4.642037391662598], + [-3.722240447998047, -2.3406436443328857], + [0.5954621434211731, -6.938662528991699], + [5.919949531555176, -3.322979688644409], + [0.6311315298080444, -8.3477201461792], + [-4.178187847137451, 5.593202590942383], + [2.5909206867218018, -4.30328893661499], + [1.5375401973724365, -4.612469673156738], + [-0.7798452973365784, 9.665525436401367], + [6.5207438468933105, -2.8439762592315674], + [-2.423530340194702, 2.0398383140563965], + [0.17854541540145874, -6.311958312988281], + [-3.8784172534942627, -1.497162103652954], + [0.33438023924827576, -3.5189545154571533], + [-1.2112923860549927, 10.469698905944824], + [4.182396411895752, 7.1788482666015625], + [5.246762752532959, -3.9478819370269775], + [0.2521311640739441, 5.780449390411377], + [0.4721256494522095, -5.975464344024658], + [1.513250470161438, 5.156520843505859], + [-0.7999871373176575, 10.091913223266602], + [-5.194817066192627, 6.87428092956543], + [1.6291322708129883, -3.9719655513763428], + [-1.7079758644104004, 1.4715324640274048], + [0.3019326329231262, -0.6667574644088745], + [-4.053593158721924, -1.7214804887771606], + [-1.1796619892120361, 11.276063919067383], + [-5.450320243835449, 7.756205081939697], + [-3.7829859256744385, 6.393439292907715], + [-3.4644808769226074, -2.058546781539917], + [-1.0245915651321411, 10.459001541137695], + [2.201704740524292, -0.2572895884513855], + [-4.8492889404296875, 6.572626113891602], + [2.287348985671997, 5.945789337158203], + [-5.2668070793151855, 6.965166091918945], + [-5.144860744476318, 7.137072563171387], + [2.649467706680298, 5.569468975067139], + [-1.5085361003875732, 12.518118858337402], + [0.9379957318305969, 4.8950724601745605], + [-5.607510566711426, 5.213253021240234], + [-4.750560760498047, 6.633921146392822], + [-0.5699933767318726, 0.9381975531578064], + [6.281375408172607, -3.6149351596832275], + [0.6173319816589355, -8.118997573852539], + [0.5902836918830872, -7.909517288208008], + [-1.8798471689224243, 2.0863287448883057], + [1.6527972221374512, -5.361628532409668], + [-3.5949132442474365, -1.0172616243362427], + [0.6142652630805969, -7.554779052734375], + [-2.1526944637298584, 0.9545719623565674], + [0.5842070579528809, -9.178403854370117], + [-4.0515055656433105, -2.408311605453491], + [-2.9248063564300537, -0.7280275225639343], + [0.36159107089042664, -5.013918876647949], + [2.9631285667419434, 5.938350677490234], + [2.7609059810638428, -4.361597061157227], + [0.5812637805938721, -7.814358234405518], + [-4.637880802154541, 0.5448574423789978], + [-3.9136874675750732, -2.280184268951416], + [-0.7495880722999573, 10.939139366149902], + [-1.239632248878479, 11.309222221374512], + [-0.3405023217201233, 9.233577728271484], + [1.045465350151062, -0.43492406606674194], + [7.737740993499756, -3.301429033279419], + [-5.75062370300293, -1.1257127523422241], + [-0.6796993613243103, -0.9167125225067139], + [-2.379420518875122, 0.29522812366485596], + [6.215831279754639, -2.3758251667022705], + [6.181003093719482, -4.268832206726074], + [-1.9237914085388184, 1.028574824333191], + [1.5605372190475464, 0.3755793869495392], + [1.504272699356079, 4.080343246459961], + [6.1657490730285645, -1.6750688552856445], + [0.6681224703788757, -8.012962341308594], + [0.5224546194076538, -7.970728397369385], + [1.9473721981048584, -4.600861072540283], + [-0.553962767124176, 8.309165954589844], + [-3.5500235557556152, -3.1999032497406006], + [-3.683809995651245, 5.630694389343262], + [-0.9876952171325684, 10.724072456359863], + [-3.6487317085266113, 5.321006774902344], + [-1.9794323444366455, 2.508235454559326], + [0.5321047306060791, -5.0004167556762695], + [0.5492388606071472, -6.539914131164551], + [-4.798044204711914, 6.1771135330200195], + [-0.9721922278404236, 10.308856964111328], + [-1.0116875171661377, -0.48510780930519104], + [1.9617881774902344, 1.6374801397323608], + [6.221941947937012, -1.3587945699691772], + [1.2451368570327759, 1.0657304525375366], + [8.718231201171875, -2.9714646339416504], + [1.0051612854003906, -0.18175062537193298], + [1.622969150543213, -6.633477687835693], + [-3.8631279468536377, -2.2523610591888428], + [1.9338622093200684, 7.4636921882629395], + [0.3492852449417114, -0.060112062841653824], + [0.31442028284072876, -6.117373466491699], + [-3.3108599185943604, -1.1163361072540283], + [-3.8720715045928955, 6.477155685424805], + [-0.7152485251426697, 10.077266693115234], + [0.37246084213256836, -0.6687614917755127], + [-1.303092360496521, 0.810025691986084], + [1.1299351453781128, 6.469436168670654], + [-0.9383326768875122, 10.52920913696289], + [0.238764226436615, -5.41555118560791], + [-3.553741216659546, -1.4659937620162964], + [-1.9312492609024048, 0.7536240220069885], + [5.068493843078613, -2.745701313018799], + [-3.949580430984497, -2.0075979232788086], + [2.601179361343384, -4.492722511291504], + [1.6510393619537354, 6.245952606201172], + [-1.3664262294769287, 11.609715461730957], + [-0.39158064126968384, 7.901741981506348], + [4.723147869110107, -0.48926565051078796], + [0.4202846884727478, -6.28726863861084], + [-1.7795642614364624, 1.1969023942947388], + [-4.34674596786499, -0.7518601417541504], + [2.9566118717193604, -4.6928324699401855], + [5.280056476593018, -4.783318519592285], + [2.9810898303985596, -4.952756881713867], + [1.4243239164352417, -4.403201103210449], + [2.513978958129883, -4.304373741149902], + [1.7008981704711914, -4.843255519866943], + [2.1739180088043213, 0.611059308052063], + [0.47020024061203003, -5.990608215332031], + [1.155583143234253, -5.963688850402832], + [-4.144374370574951, 6.381433963775635], + [-2.845881938934326, 6.848474502563477], + [-2.1601905822753906, 2.0895230770111084], + [0.058362625539302826, -4.530190467834473], + [0.8776135444641113, -7.776851654052734], + [2.810528516769409, -4.689059257507324], + [2.509887933731079, -4.575405597686768], + [1.9797418117523193, 4.893089294433594], + [-0.7343260645866394, 9.50698471069336], + [-1.3314599990844727, 11.539271354675293], + [0.8290833830833435, 5.34134578704834], + [3.3563082218170166, -5.166846752166748], + [0.3423813581466675, -6.982075214385986], + [8.827052116394043, -2.922865152359009], + [-0.4540993571281433, -1.2766021490097046], + [-0.2978876829147339, -1.9467284679412842], + [-4.457233428955078, -1.0770968198776245], + [-3.7459583282470703, -1.085928201675415], + [-3.0083627700805664, -1.1082866191864014], + [-5.453609943389893, 6.98828649520874], + [-1.5699200630187988, 0.5184177160263062], + [-4.8104472160339355, 5.382754325866699], + [-0.7221891283988953, 10.19532585144043], + [-1.7481398582458496, 1.3019462823867798], + [2.899811029434204, -4.540968894958496], + [-0.47644007205963135, -1.6201280355453491], + [1.4648933410644531, -4.806969165802002], + [3.460583448410034, 6.929304599761963], + [9.6021728515625, -2.9197170734405518], + [-3.8071064949035645, -1.8835688829421997], + [1.6263492107391357, 0.6157150268554688], + [-1.41592538356781, 11.77908706665039], + [-3.9234139919281006, 6.024877548217773], + [2.725023031234741, 6.416615009307861], + [1.8984160423278809, 0.8041591644287109], + [-4.35184907913208, -2.0333449840545654], + [1.7224549055099487, 0.7790531516075134], + [0.667114794254303, -7.899988174438477], + [5.800502300262451, -1.2189959287643433], + [-4.220758438110352, 5.915533065795898], + [3.3341338634490967, 6.803462982177734], + [-0.3622714877128601, 8.7293701171875], + [-4.495564937591553, 6.568732738494873], + [-1.8995047807693481, 6.2715911865234375], + [-4.166687488555908, 4.700344085693359], + [-0.5539054870605469, 9.309873580932617], + [-0.6097737550735474, 9.897988319396973], + [2.951303720474243, -4.678755760192871], + [-3.9320528507232666, -1.862315058708191], + [2.099634885787964, 1.0221079587936401], + [-3.953119993209839, 5.137670993804932], + [1.2376024723052979, 5.088590621948242], + [2.8664376735687256, -4.691136360168457], + [0.5920474529266357, -7.947201728820801], + [0.535637617111206, -8.025154113769531], + [-0.9242043495178223, -3.006808042526245], + [7.551684856414795, -2.5353524684906006], + [3.0479395389556885, -5.453913688659668], + [-5.4889750480651855, -0.8069136142730713], + [-3.6433212757110596, 5.755046367645264], + [-5.192997455596924, 4.665449142456055], + [-3.994192123413086, -0.4460359811782837], + [-4.898741722106934, -4.424230575561523], + [8.690055847167969, -2.547940969467163], + [2.8532681465148926, -4.931626796722412], + [0.24781328439712524, -5.150771141052246], + [9.571630477905273, -2.996978521347046], + [-1.2053723335266113, 1.913742184638977], + [-0.29806774854660034, 8.399272918701172], + [10.632054328918457, -3.1655027866363525], + [6.149036407470703, -3.0066587924957275], + [1.7695567607879639, 0.5620230436325073], + [-0.6884152293205261, 10.02750015258789], + [1.2017226219177246, 5.038142204284668], + [2.4909446239471436, -5.435875415802002], + [2.8590385913848877, -5.479353427886963], + [1.8271435499191284, 0.21002548933029175], + [0.6160975694656372, -4.8821868896484375], + [0.9754975438117981, 7.656694412231445], + [0.24213162064552307, -3.815584182739258], + [-1.0444430112838745, 10.051101684570312], + [-0.03308785706758499, -1.122249722480774], + [-0.4893042743206024, -2.3334109783172607], + [0.6161149144172668, -7.512622833251953], + [-4.716407299041748, -1.9667818546295166], + [-1.4544315338134766, -1.2773042917251587], + [-0.949091374874115, 10.734081268310547], + [-1.319785475730896, 11.662630081176758], + [-1.14476478099823, 0.7766577005386353], + [-0.20012831687927246, -3.160513162612915], + [-4.277672290802002, -0.23172450065612793], + [-5.295230388641357, 7.020205020904541], + [3.0912363529205322, -4.8465895652771], + [1.1608307361602783, 2.065922975540161], + [-5.142930030822754, 6.822143077850342], + [5.608247756958008, -1.0437090396881104], + [-1.904536247253418, -0.4574987292289734], + [0.886637270450592, -6.045315742492676], + [2.6276257038116455, 4.920416831970215], + [-4.28878116607666, 6.649590492248535], + [-3.527317762374878, -1.5509580373764038], + [6.000386714935303, -3.8204264640808105], + [6.017121315002441, -1.0174111127853394], + [1.5311305522918701, -5.970193386077881], + [-3.822622060775757, -3.235555410385132], + [8.670807838439941, -3.1953928470611572], + [-3.4347164630889893, -1.1165268421173096], + [1.207760214805603, 0.17072850465774536], + [-1.9735305309295654, 2.1206214427948], + [-3.748502731323242, -1.537021279335022], + [0.5383070111274719, -6.840689659118652], + [0.3669254183769226, -6.45826530456543], + [-3.6957929134368896, -2.24711537361145], + [-3.299797296524048, 4.568063735961914], + [-1.2391327619552612, 10.937416076660156], + [-3.61150860786438, -1.093798041343689], + [-0.7084188461303711, 10.007426261901855], + [-3.392958879470825, -1.2958474159240723], + [-1.471303939819336, 13.045186042785645], + [-0.9670731425285339, 5.938637733459473], + [-2.9856274127960205, 4.911699295043945], + [2.5969104766845703, -4.840207099914551], + [-0.6730868220329285, 9.290868759155273], + [-3.7604732513427734, -0.4518350064754486], + [-0.7985506653785706, 9.911619186401367], + [-1.2654590606689453, 12.025991439819336], + [7.419375896453857, -3.5272419452667236], + [-2.7342886924743652, -0.6156940460205078], + [8.53657054901123, -2.6421236991882324], + [-4.881339073181152, -0.8067828416824341], + [1.474222183227539, 1.6616331338882446], + [0.8452982902526855, -7.133665084838867], + [-1.090343713760376, 10.813085556030273], + [2.5900588035583496, -4.3595967292785645], + [8.69721508026123, -2.8939335346221924], + [2.629826784133911, -4.818192005157471], + [-3.789719581604004, -1.1727879047393799], + [-3.2607572078704834, -5.172943115234375], + [2.219820261001587, 5.372450828552246], + [6.431098461151123, -1.7542614936828613], + [-1.0659509897232056, -2.895040512084961], + [1.0557162761688232, -0.23708583414554596], + [-6.198972225189209, -0.9179671406745911], + [0.6093332171440125, -6.8641204833984375], + [2.8485419750213623, -4.939645290374756], + [-3.02589750289917, 0.9043196439743042], + [-0.8340755701065063, 9.457483291625977], + [2.878429651260376, 5.856352806091309], + [-1.8937627077102661, 0.4507524073123932], + [-3.8316380977630615, 5.840078353881836], + [-1.7171460390090942, -0.35368451476097107], + [5.966593265533447, -1.1564513444900513], + [-1.1963149309158325, 11.34323501586914], + [0.9169774651527405, -4.745939254760742], + [-5.184401988983154, -1.0554633140563965], + [-1.4179284572601318, 11.72203540802002], + [2.6430766582489014, -4.413032531738281], + [-2.625413417816162, 6.328646659851074], + [8.240809440612793, -2.9865736961364746], + [-1.0976482629776, 10.689861297607422], + [7.133584499359131, -1.9535188674926758], + [7.830395698547363, -2.310556650161743], + [-3.2771050930023193, -2.7190887928009033], + [2.4664571285247803, 4.041686058044434], + [-0.16436466574668884, -2.3609087467193604], + [0.825177013874054, 3.0081961154937744], + [-4.429271221160889, 6.712859630584717], + [-2.1961896419525146, -1.0557993650436401], + [-1.4827284812927246, 11.828143119812012], + [-3.6143441200256348, -0.5418173670768738], + [-3.41955304145813, -1.9337801933288574], + [2.849191427230835, -4.405040264129639], + [-2.310154438018799, 2.2664036750793457], + [-0.6615386605262756, 10.643638610839844], + [-4.080057621002197, -3.3136322498321533], + [-3.579864501953125, -0.9132057428359985], + [2.0168278217315674, 3.2879245281219482], + [-0.11809266358613968, 9.683942794799805], + [-3.772484064102173, 4.444272041320801], + [3.7726242542266846, -3.2518742084503174], + [-2.750359296798706, -1.6156152486801147], + [-2.471930980682373, -0.5121087431907654], + [-1.9564825296401978, 0.9409651756286621], + [-2.087209939956665, -1.977941632270813], + [-2.504493474960327, -1.7030091285705566], + [-1.3520538806915283, 11.392425537109375], + [1.5856190919876099, 5.628940582275391], + [2.722869873046875, -4.421758651733398], + [2.7599399089813232, 5.493329048156738], + [0.6083059310913086, -0.6352888345718384], + [-0.21017462015151978, 9.326132774353027], + [-3.5942556858062744, -2.380220651626587], + [2.4249587059020996, 6.211136817932129], + [9.23279094696045, -2.8377461433410645], + [-3.9177956581115723, -1.2057405710220337], + [-3.744255781173706, -0.25453001260757446], + [-0.862528383731842, -0.5961195230484009], + [6.915696620941162, -4.074292182922363], + [-2.1087820529937744, 2.429502010345459], + [5.008891582489014, 7.833247184753418], + [-2.0036182403564453, 1.3849554061889648], + [7.200298309326172, -2.441052198410034], + [0.8815070986747742, 5.496855735778809], + [0.7437613606452942, -8.551340103149414], + [0.538623034954071, -0.5882142186164856], + [0.5458311438560486, 6.509524345397949], + [1.2736605405807495, 2.858677387237549], + [1.0402286052703857, -6.028266906738281], + [-0.7322500348091125, 10.457525253295898], + [1.2852234840393066, 5.431258201599121], + [-3.710543155670166, -1.7963453531265259], + [2.801947593688965, -5.161114692687988], + [-2.11828351020813, -2.7075538635253906], + [1.0305829048156738, 0.11235669255256653], + [6.804383277893066, -1.8881967067718506], + [0.6577457785606384, -7.251208305358887], + [-3.9515421390533447, -0.18695050477981567], + [8.084391593933105, -2.575965404510498], + [-1.469061017036438, 1.3615562915802002], + [1.84830904006958, -5.093136787414551], + [0.4254339337348938, -5.535492897033691], + [-2.542346715927124, -2.2059454917907715], + [5.448460102081299, 8.113537788391113], + [0.43418556451797485, 0.5122722387313843], + [0.7851173281669617, -8.976936340332031], + [-5.372068405151367, -4.351576328277588], + [-3.005560874938965, 3.2337605953216553], + [0.6061567068099976, -7.034503936767578], + [1.935805320739746, 1.213498592376709], + [-1.4183422327041626, 0.9448999762535095], + [-5.1265387535095215, -0.796821117401123], + [-0.9123575091362, 10.252151489257812], + [-4.428378582000732, -0.596092700958252], + [8.62369441986084, -3.038203001022339], + [-4.398955821990967, -1.9678019285202026], + [-1.669790267944336, 1.6942812204360962], + [-3.8375251293182373, -1.1781880855560303], + [-3.6414921283721924, -1.588883399963379], + [-3.61733078956604, -1.8960165977478027], + [0.3589063286781311, -5.936953067779541], + [-3.483762502670288, 6.808712959289551], + [2.3460166454315186, -3.9455056190490723], + [0.7300251126289368, -7.118348121643066], + [-0.7619621157646179, 9.878057479858398], + [3.3651282787323, 0.7994512915611267], + [1.9079524278640747, 0.5379905700683594], + [0.45251721143722534, -7.758537769317627], + [0.644044041633606, -8.11973762512207], + [-4.132065296173096, -1.045027256011963], + [-3.544536590576172, -0.8724060654640198], + [7.096240043640137, -2.577953338623047], + [1.9584274291992188, 4.870720863342285], + [-3.6866872310638428, -1.0689626932144165], + [-2.0902414321899414, -0.6564724445343018], + [-1.9284076690673828, 2.1096251010894775], + [2.2887063026428223, 6.216700553894043], + [1.2842752933502197, -5.545600414276123], + [-1.7769086360931396, 1.0515891313552856], + [-4.406589508056641, -1.4962421655654907], + [-0.8931859135627747, 10.394003868103027], + [0.7389065027236938, -6.234164237976074], + [-1.2041232585906982, 10.953767776489258], + [0.6393067836761475, -7.235641002655029], + [0.8384355902671814, -10.200376510620117], + [0.043070994317531586, -5.038848876953125], + [-3.275169849395752, 3.070651054382324], + [0.4917140603065491, -1.0220588445663452], + [-3.2846157550811768, -1.4960600137710571], + [2.3717494010925293, -4.073892116546631], + [0.6071775555610657, -8.43383502960205], + [-3.656536817550659, -0.8061731457710266], + [0.2965070307254791, -4.077226638793945], + [-0.026396431028842926, -4.375129699707031], + [-1.1726417541503906, 10.779497146606445], + [2.3773107528686523, -3.9580743312835693], + [0.046466387808322906, -0.8993865251541138], + [0.7087791562080383, -7.188454627990723], + [6.404909133911133, -2.730668306350708], + [1.7940480709075928, 2.734570026397705], + [-0.04919803887605667, 8.765480041503906], + [1.1719870567321777, 4.991522789001465], + [6.048281192779541, -1.942216157913208], + [0.6667144298553467, -4.532559394836426], + [-0.459309458732605, -1.1149650812149048], + [1.1890760660171509, 2.3613474369049072], + [-5.34180212020874, 6.296427249908447], + [-1.627532958984375, 0.9734145402908325], + [2.507540702819824, -4.647064208984375], + [-3.7743308544158936, -0.7284116148948669], + [-0.23284673690795898, -2.116020917892456], + [2.8564467430114746, -4.5720696449279785], + [-3.295919895172119, -1.3075531721115112], + [-3.210813283920288, -0.7023577094078064], + [-4.976643085479736, 4.549839973449707], + [-0.2508220076560974, 0.34161198139190674], + [-5.144883632659912, 5.932390213012695], + [1.3149282932281494, -4.545748710632324], + [7.4471869468688965, -2.1688082218170166], + [1.5462374687194824, 1.869910478591919], + [0.5079559683799744, -7.16930627822876], + [7.178192615509033, -2.192167282104492], + [-4.990054607391357, 7.589703559875488], + [0.5009713768959045, -4.208706855773926], + [2.7832083702087402, -4.460036277770996], + [1.9455511569976807, -4.776263236999512], + [-1.4620963335037231, -1.124655842781067], + [5.573644161224365, -1.5383955240249634], + [0.537470281124115, -7.983744144439697], + [-1.6862964630126953, -0.5988451242446899], + [-1.9894740581512451, 2.5069663524627686], + [-0.5875183939933777, 10.024412155151367], + [2.62237548828125, -4.073783874511719], + [7.383126735687256, -3.0149104595184326], + [-3.604201078414917, -1.0085241794586182], + [-5.095398902893066, 6.666761875152588], + [-4.476687431335449, -2.8954577445983887], + [0.33508896827697754, -4.313443660736084], + [-3.3518145084381104, -1.3462353944778442], + [-1.963347315788269, 1.2164115905761719], + [5.835696697235107, -2.2861740589141846], + [-0.25914081931114197, -1.5314565896987915], + [-3.5693843364715576, -1.3180795907974243], + [0.5524742007255554, -7.281449794769287], + [-3.559211492538452, 5.4870781898498535], + [2.169109582901001, -4.764114856719971], + [0.2698330879211426, -3.9689648151397705], + [5.109550952911377, -1.7143001556396484], + [2.842546224594116, -4.455055236816406], + [-3.4184539318084717, -2.341097593307495], + [-5.576013088226318, -1.2195018529891968], + [-3.6521944999694824, -1.5749645233154297], + [2.5458834171295166, -5.462292194366455], + [0.28278475999832153, -5.430393218994141], + [0.067250095307827, -3.856679677963257], + [-3.431602716445923, -0.5759607553482056], + [1.5745594501495361, -7.200254917144775], + [2.3333351612091064, 5.257122993469238], + [-1.4406014680862427, 11.939911842346191], + [2.571403980255127, 5.176820755004883], + [-3.0284740924835205, 5.2441840171813965], + [2.7969863414764404, -4.477531433105469], + [7.104843616485596, -3.0550153255462646], + [-1.058262586593628, 10.79870319366455], + [-3.7115237712860107, -1.5125142335891724], + [-3.4240338802337646, -2.1668097972869873], + [-2.130856513977051, 1.8914308547973633], + [-2.4529197216033936, 1.2682405710220337], + [2.6516788005828857, 5.432945251464844], + [0.01822792738676071, -3.650233745574951], + [-2.883880853652954, -0.6780165433883667], + [-3.653198480606079, -1.0509861707687378], + [1.7898648977279663, 1.3218952417373657], + [5.73396110534668, -1.1022324562072754], + [-0.3631208539009094, -1.6008156538009644], + [7.0425639152526855, -3.292935609817505], + [-2.0264835357666016, 0.4824405908584595], + [-1.5618023872375488, -3.598871946334839], + [0.034972213208675385, -0.8291572332382202], + [1.5732688903808594, 0.05072372779250145], + [0.3092551827430725, 7.123326301574707], + [-0.46016377210617065, 9.059045791625977], + [-2.47998046875, -1.7324432134628296], + [4.555409908294678, 7.531954288482666], + [-3.504506826400757, -1.2029725313186646], + [-1.361328125, 11.916130065917969], + [-3.6824464797973633, -2.625279426574707], + [-3.3590004444122314, 5.300406455993652], + [3.561798572540283, 7.133465766906738], + [0.45236295461654663, -5.197271347045898], + [6.127201080322266, -2.102958917617798], + [5.042404651641846, 7.826415538787842], + [-0.8205649256706238, -1.2150124311447144], + [-4.001908302307129, -0.518593966960907], + [-1.558701515197754, -0.38382014632225037], + [-3.956446886062622, 0.18264329433441162], + [-1.804340124130249, 1.0485920906066895], + [-3.270441770553589, 3.2659366130828857], + [8.57938289642334, -2.8868589401245117], + [-3.5604326725006104, -1.338849663734436], + [2.2788469791412354, 5.66637659072876], + [0.23459935188293457, -6.1322503089904785], + [4.760807514190674, -5.038958549499512], + [-0.6956295371055603, 9.390474319458008], + [-5.393496990203857, 4.688388347625732], + [3.1155130863189697, 6.814179420471191], + [-4.534329891204834, -1.1964951753616333], + [0.6506332755088806, -7.053493499755859], + [1.370497703552246, -5.75551700592041], + [-1.4490834474563599, 12.132935523986816], + [-4.27522611618042, -1.096880555152893], + [-2.423844814300537, -1.3470550775527954], + [0.4423519968986511, -4.957304000854492], + [7.345982074737549, -2.7929797172546387], + [-1.3764840364456177, 12.200401306152344], + [-5.378544330596924, -0.6567861437797546], + [-1.1617999076843262, 11.267335891723633], + [-1.6423624753952026, 2.927295684814453], + [-3.479088068008423, -1.1368907690048218], + [0.16820213198661804, -3.4104597568511963], + [-1.1544815301895142, 10.540277481079102], + [-0.028411664068698883, -1.9709287881851196], + [-1.5343420505523682, 1.8082118034362793], + [-1.8788986206054688, 1.5444821119308472], + [2.560133457183838, -4.748844146728516], + [1.2372359037399292, 0.07771718502044678], + [-1.2307696342468262, 11.49435806274414], + [0.9962934851646423, -0.07936233282089233], + [-1.6307951211929321, 1.2099034786224365], + [-1.8692436218261719, 1.600157380104065], + [-3.2472851276397705, 6.91216516494751], + [0.04930197447538376, -1.289087176322937], + [-3.3626227378845215, -1.488998532295227], + [-1.1614978313446045, 10.415603637695312], + [-1.2607600688934326, 10.842151641845703], + [-0.6036357283592224, 4.936049938201904], + [-1.2740191221237183, 0.918906569480896], + [-2.244710922241211, -2.3017642498016357], + [2.1737401485443115, 0.9331303238868713], + [2.5656745433807373, -4.623746871948242], + [-4.262917995452881, -3.2252554893493652], + [5.598141193389893, -4.409178733825684], + [-1.478959321975708, -0.8067183494567871], + [7.379355430603027, -2.674438714981079], + [-4.350159168243408, -3.2450315952301025], + [0.6458905935287476, -8.7608642578125], + [2.3493385314941406, -5.522978782653809], + [1.0643532276153564, -0.4855231046676636], + [6.621849536895752, -4.39685583114624], + [-2.720714807510376, -0.4717007577419281], + [2.3528785705566406, 0.4084659516811371], + [7.477245330810547, -2.43994402885437], + [6.75351095199585, -2.5100133419036865], + [0.6675919890403748, -6.159951210021973], + [1.052438497543335, -0.21987676620483398], + [0.7220054268836975, -3.5521788597106934], + [2.19864559173584, 5.012555122375488], + [0.8366251587867737, -7.0050811767578125], + [6.449552536010742, -4.022007465362549], + [0.8157954812049866, 8.609841346740723], + [5.58516263961792, -1.6672453880310059], + [1.0694293975830078, 7.039306640625], + [0.6776895523071289, -8.274806022644043], + [-0.6290050148963928, 10.128173828125], + [3.021376371383667, 6.65988302230835], + [-5.456265926361084, 6.230286121368408], + [2.820204496383667, 6.391504287719727], + [-4.5734543800354, -0.8058545589447021], + [2.872103452682495, -4.479944229125977], + [2.9479787349700928, -4.785507678985596], + [-4.183895587921143, 6.309009552001953], + [0.23812773823738098, -4.433620929718018], + [3.0141079425811768, -6.996224880218506], + [1.0272274017333984, -4.5829572677612305], + [-1.2189303636550903, 11.026107788085938], + [5.460745334625244, -1.2321698665618896], + [-3.3120276927948, -3.306727170944214], + [0.24227330088615417, -4.101737022399902], + [-3.746272563934326, -1.8006327152252197], + [-0.821025550365448, 10.842074394226074], + [-0.7573421001434326, 9.595600128173828], + [2.079843282699585, -4.821869373321533], + [-4.4651689529418945, 6.056685447692871], + [2.173987627029419, -4.69840145111084], + [-1.2185349464416504, 10.913058280944824], + [-3.639946699142456, 4.9664106369018555], + [-1.3906692266464233, 12.149618148803711], + [1.4998773336410522, -4.919684886932373], + [-1.9728392362594604, 0.8156537413597107], + [7.415489673614502, -3.016868829727173], + [-0.7456018924713135, 0.27958762645721436], + [9.077729225158691, -2.65651273727417], + [-1.4314664602279663, 1.6031098365783691], + [-3.4007062911987305, 3.4009618759155273], + [3.0542070865631104, 5.933099746704102], + [0.3351341187953949, -4.626657009124756], + [0.023100458085536957, -5.158979415893555], + [0.46201038360595703, -6.752466678619385], + [-5.7035603523254395, 4.928173065185547], + [1.1365684270858765, 0.0405651293694973], + [0.7626004219055176, -8.342117309570312], + [-1.6956249475479126, 1.4612571001052856], + [-5.287471771240234, 7.415282726287842], + [1.9397127628326416, 5.828454971313477], + [6.06530237197876, -1.390797734260559], + [6.078897476196289, -3.968782663345337], + [0.6542905569076538, -5.932381629943848], + [-3.200089931488037, -2.8013198375701904], + [-0.02263302356004715, -4.229546070098877], + [-2.2469310760498047, -2.0141916275024414], + [0.6515197157859802, -8.152835845947266], + [-2.5608322620391846, 2.460275173187256], + [1.7257959842681885, -5.655572891235352], + [0.6687588095664978, -8.609176635742188], + [8.6972017288208, -2.731177568435669], + [2.7692782878875732, -4.71529483795166], + [-4.4713006019592285, -1.4182218313217163], + [-5.097248554229736, -0.6734602451324463], + [0.7304068207740784, -5.591845512390137], + [-2.1094067096710205, 0.6470261812210083], + [2.625260591506958, 0.5239046216011047], + [5.569891452789307, 8.411629676818848], + [2.978691577911377, -4.637284278869629], + [-4.31003999710083, 6.328766822814941], + [1.5881707668304443, -6.121694087982178], + [-0.34924638271331787, 10.303586959838867], + [2.045417070388794, 5.076884746551514], + [-2.176908254623413, -0.9379154443740845], + [-3.6734554767608643, -1.141626238822937], + [3.1654086112976074, -5.197885513305664], + [-1.0723621845245361, 10.850024223327637], + [-3.575634717941284, -4.497701644897461], + [-4.1371235847473145, 5.212734222412109], + [-5.848337650299072, 7.696095943450928], + [0.7775387167930603, -7.314052581787109], + [-3.228456497192383, 3.654663324356079], + [1.5936927795410156, -5.8880228996276855], + [2.666130304336548, -5.32614278793335], + [2.0989396572113037, -4.24555778503418], + [7.980129718780518, -2.8652710914611816], + [6.560635566711426, -1.6684787273406982], + [-1.2330048084259033, 0.8143831491470337], + [-1.8156015872955322, 1.850489616394043], + [0.5312328338623047, -7.837892055511475], + [2.892094373703003, -5.088996887207031], + [0.3820454478263855, -5.908698081970215], + [-1.2797877788543701, 1.7328990697860718], + [-4.202384948730469, -3.095654249191284], + [-2.6454052925109863, 4.315205097198486], + [8.699724197387695, -2.7774837017059326], + [2.5066139698028564, 5.9341840744018555], + [-4.36480188369751, -1.5790656805038452], + [0.010360367596149445, -3.2248265743255615], + [2.816603422164917, -4.469449996948242], + [-3.934640645980835, -1.3300611972808838], + [-0.7847642302513123, 9.503942489624023], + [3.1798319816589355, -4.107116222381592], + [0.4263952970504761, -7.11759090423584], + [1.3795114755630493, -5.9793171882629395], + [-1.8361238241195679, 0.5996010303497314], + [5.812709808349609, -1.5441097021102905], + [-3.7837295532226562, -1.5785257816314697], + [-0.03806162625551224, -4.265957832336426], + [-3.1878278255462646, -2.1645967960357666], + [2.644731283187866, -5.019275665283203], + [-3.7284936904907227, -1.7580326795578003], + [0.26945143938064575, -6.051878929138184], + [-0.2837299704551697, 8.948193550109863], + [-1.9001988172531128, 1.9835962057113647], + [-1.4285564422607422, 11.904983520507812], + [-3.3651504516601562, 5.110156059265137], + [5.5804057121276855, -1.4006353616714478], + [-1.286012887954712, 1.5464911460876465], + [1.451704502105713, -0.038174960762262344], + [1.5396649837493896, 4.765771865844727], + [2.5687382221221924, -4.7101287841796875], + [-4.096590042114258, 6.384916305541992], + [-0.7438284158706665, 9.994487762451172], + [-5.2561869621276855, 6.740283012390137], + [0.45702022314071655, -6.49873685836792], + [0.4833756685256958, -6.160594463348389], + [-1.9530589580535889, 0.5057903528213501], + [-3.5280730724334717, -2.58591628074646], + [0.6802292466163635, -7.986977577209473], + [-1.9041603803634644, 1.3136298656463623], + [-4.024078845977783, -3.7898247241973877], + [-1.4360483884811401, 12.100889205932617], + [-2.555708169937134, 5.3057403564453125], + [0.6374539136886597, -8.051566123962402], + [-1.9859459400177002, 0.78267502784729], + [2.0918376445770264, -5.742597579956055], + [-4.752548694610596, 6.1284685134887695], + [-6.012730121612549, 7.874878883361816], + [1.568253993988037, -5.650692462921143], + [-0.08261001855134964, 7.854650020599365], + [-1.2590370178222656, 1.0482944250106812], + [-3.014160633087158, -2.7416343688964844], + [-5.235291004180908, 4.835135459899902], + [2.922334671020508, 5.962532043457031], + [0.44801491498947144, -0.7941590547561646], + [8.347686767578125, -2.6505048274993896], + [-4.3693976402282715, -2.245464563369751], + [5.861513614654541, -2.2173550128936768], + [0.8440850377082825, -3.4753291606903076], + [0.6789649128913879, -0.07935851812362671], + [0.2255173623561859, -3.0192644596099854], + [-3.0804455280303955, -0.800879955291748], + [-3.657423973083496, -1.5270016193389893], + [-0.64801025390625, 9.980827331542969], + [-3.0369722843170166, 0.9043866991996765], + [0.4557186961174011, -7.217138767242432], + [0.771303117275238, -7.566874980926514], + [1.9878225326538086, 0.15674759447574615], + [-1.5727298259735107, -1.601285696029663], + [2.538214683532715, -4.397120475769043], + [1.0275555849075317, 6.1960320472717285], + [0.9898833632469177, -5.66676139831543], + [-5.361566543579102, 6.66440486907959], + [-0.23588106036186218, -1.4729589223861694], + [2.1100878715515137, 5.368674278259277], + [-0.7376767992973328, 10.605733871459961], + [-2.3336360454559326, 1.4233136177062988], + [0.4434962868690491, -5.868886947631836], + [7.225188732147217, -3.4714159965515137], + [-2.8140697479248047, -0.9002528190612793], + [-5.331623554229736, -1.0043600797653198], + [-1.2067831754684448, 1.5129421949386597], + [0.5454433560371399, -6.684950828552246], + [5.179124355316162, -1.227988839149475], + [0.018465720117092133, -1.3045471906661987], + [3.9642961025238037, -0.02487427368760109], + [7.474666118621826, -2.6634397506713867], + [0.7676800489425659, -6.572996616363525], + [-1.7639656066894531, -2.999415636062622], + [5.579751491546631, -1.625055193901062], + [0.43789178133010864, -6.137605667114258], + [2.2743051052093506, -4.274621486663818], + [-3.6655099391937256, 5.273489952087402], + [-4.022907257080078, 5.871078014373779], + [4.462367057800293, 7.297732353210449], + [1.3602511882781982, 4.9210638999938965], + [-4.885990142822266, 5.477153778076172], + [0.6266912221908569, -8.288095474243164], + [2.7937562465667725, -4.5008087158203125], + [-4.142501354217529, -2.4809305667877197], + [-1.0027707815170288, 10.115327835083008], + [-0.02929902821779251, 7.959100723266602], + [-1.295653223991394, 11.041265487670898], + [-2.064004898071289, 0.24457275867462158], + [0.3861585259437561, -6.6303839683532715], + [2.048495054244995, -6.8272600173950195], + [-3.3730344772338867, 6.222978591918945], + [8.947813987731934, -2.664445638656616], + [5.385909557342529, -2.071873903274536], + [4.97882080078125, -3.2259676456451416], + [3.965233087539673, 0.46898186206817627], + [2.2460319995880127, -4.222035884857178], + [-1.8434433937072754, 0.5559943914413452], + [-1.858993649482727, 14.179607391357422], + [6.16984224319458, -1.2285696268081665], + [-5.116514682769775, 2.427225351333618], + [-6.06798791885376, 8.191604614257812], + [-2.1519031524658203, 0.36886030435562134], + [0.1633862853050232, -4.239846706390381], + [5.607395648956299, -1.2887253761291504], + [-1.2340004444122314, 10.952714920043945], + [-4.152183532714844, -2.948420763015747], + [-3.5812108516693115, -1.2792589664459229], + [-3.7593047618865967, -1.9020781517028809], + [-0.5989480018615723, 9.705838203430176], + [5.95112419128418, -2.3725426197052], + [0.4691663980484009, -0.7930407524108887], + [-1.3189382553100586, 11.751416206359863], + [-0.8882368803024292, 10.151447296142578], + [-4.704699516296387, -3.3336987495422363], + [-0.353399395942688, 8.084617614746094], + [-0.15705379843711853, -2.020827293395996], + [-3.428628444671631, -2.1922693252563477], + [2.1773841381073, -4.256556987762451], + [-1.3326685428619385, -1.2776652574539185], + [-0.30321770906448364, 1.030746579170227], + [-2.6507890224456787, -0.6890687346458435], + [-0.44274210929870605, 5.605242729187012], + [-0.993341863155365, 10.724172592163086], + [3.509657859802246, 6.791213035583496], + [0.5377359986305237, -0.649879515171051], + [-0.7801569700241089, -2.9667770862579346], + [0.4142022132873535, -4.654378890991211], + [-3.904984712600708, -3.0050015449523926], + [0.6832007169723511, -8.915298461914062], + [7.995048999786377, -3.3513970375061035], + [-4.639878273010254, 6.882458209991455], + [-4.007366180419922, -2.0598948001861572], + [-4.3448381423950195, -0.41547954082489014], + [0.6571316123008728, -8.644559860229492], + [-1.3075486421585083, 1.6348047256469727], + [-1.1795144081115723, 10.841102600097656], + [-1.588781714439392, 1.2083219289779663], + [0.9941142201423645, -5.164656162261963], + [8.0859956741333, -3.3431336879730225], + [1.8568947315216064, 0.6782508492469788], + [2.420377731323242, -5.703865051269531], + [0.9900112748146057, -5.821043491363525], + [-0.6713946461677551, -0.9739810228347778], + [7.628256320953369, -2.8984878063201904], + [0.6739537119865417, -5.269322395324707], + [-0.6761265397071838, 11.018774032592773], + [-0.7040809392929077, 10.457640647888184], + [-4.040543079376221, -3.016359567642212], + [-2.0321238040924072, -0.9167133569717407], + [0.8281962275505066, -8.502613067626953], + [0.15662240982055664, -1.2258400917053223], + [2.4714508056640625, -5.425519943237305], + [0.33331936597824097, -6.161485195159912], + [5.937210559844971, -5.858811378479004], + [-0.03245563060045242, -5.273469924926758], + [0.12429355829954147, -1.1146553754806519], + [-0.3883054852485657, 8.85538101196289], + [-4.704804420471191, -3.9935431480407715], + [-3.1328954696655273, -0.5442538261413574], + [-3.8846728801727295, -0.32672128081321716], + [-1.9966650009155273, 2.3263368606567383], + [-1.066983938217163, 10.093954086303711], + [-0.20473062992095947, -1.9830071926116943], + [2.1987545490264893, 0.8682370781898499], + [-3.4110045433044434, 5.820889472961426], + [7.905794620513916, -2.8148505687713623], + [2.898838520050049, -4.684845447540283], + [-1.2766220569610596, 11.650760650634766], + [-0.6668203473091125, 6.172253608703613], + [2.7269561290740967, 6.727063179016113], + [-1.691220998764038, 1.0846161842346191], + [-3.5838778018951416, -1.1887016296386719], + [2.7193799018859863, -5.909940242767334], + [4.405728816986084, 7.592190265655518], + [-1.217766523361206, 10.975872039794922], + [0.3325777053833008, -5.686790466308594], + [2.7362911701202393, -4.59309196472168], + [-4.203469753265381, -1.3683801889419556], + [1.0022573471069336, -6.0705976486206055], + [6.770857810974121, -2.1430342197418213], + [-2.8901801109313965, -0.8073491454124451], + [-4.008039951324463, -1.345047116279602], + [1.2745463848114014, -6.276675224304199], + [6.912516117095947, -3.011432409286499], + [-1.979098916053772, 2.0632576942443848], + [2.0441253185272217, 0.5783028602600098], + [-1.5073424577713013, 1.728719711303711], + [0.15946459770202637, -4.980531692504883], + [1.1516669988632202, -0.28191837668418884], + [-4.076427936553955, -0.28219521045684814], + [8.328009605407715, -2.785259962081909], + [-2.048529624938965, -0.8468489050865173], + [-3.455819845199585, 5.443597793579102], + [-1.603371024131775, -0.9611396789550781], + [-3.9359679222106934, -2.736572504043579], + [1.704986572265625, 4.498201370239258], + [-3.4110467433929443, -0.7361797094345093], + [-2.360466718673706, -0.5409209132194519], + [9.349656105041504, -2.877849817276001], + [-0.9267775416374207, -1.2838783264160156], + [-2.530167818069458, -0.9868859052658081], + [-1.435430884361267, 12.334009170532227], + [-3.5532734394073486, -1.3525234460830688], + [2.2447891235351562, 3.3272171020507812], + [-1.2917242050170898, 10.899250984191895], + [1.0717122554779053, -1.7955138683319092], + [6.313095569610596, -4.484396934509277], + [0.6095161437988281, -7.947049140930176], + [0.9761176705360413, 0.37889862060546875], + [8.119651794433594, -2.371304750442505], + [-3.554511785507202, -2.28061842918396], + [0.5171770453453064, -8.40633773803711], + [-1.9740347862243652, 2.7291743755340576], + [-5.30277156829834, -4.191756248474121], + [8.31130599975586, -2.6014745235443115], + [-0.6000767350196838, -1.5835884809494019], + [0.8730422854423523, -7.103083610534668], + [2.9802732467651367, -4.662801742553711], + [6.434024333953857, -1.5048677921295166], + [-3.9893648624420166, 5.923664093017578], + [-4.398720741271973, 5.398201942443848], + [-1.2669858932495117, 11.310981750488281], + [2.6433064937591553, 5.951974868774414], + [5.190234661102295, 8.231727600097656], + [2.900378942489624, -4.854184150695801], + [0.14156228303909302, -5.7552595138549805], + [3.4681732654571533, 6.4376220703125], + [0.9859965443611145, -7.409988880157471], + [0.38882702589035034, -6.784525394439697], + [1.386779546737671, 5.041350364685059], + [6.9637932777404785, -3.2499606609344482], + [4.121790409088135, -3.8526742458343506], + [6.89645528793335, -2.369351625442505], + [0.7613363862037659, -9.115433692932129], + [2.036626100540161, 5.66080379486084], + [-1.8179891109466553, 1.2136412858963013], + [-1.1273250579833984, 10.410528182983398], + [-5.45599365234375, -1.3116449117660522], + [-3.1290524005889893, -0.4926316738128662], + [-2.4132230281829834, -0.8040019869804382], + [2.0013444423675537, 4.60101318359375], + [-5.600562572479248, -0.9311655759811401], + [-0.6254765391349792, -2.9289724826812744], + [6.8088154792785645, -2.2183284759521484], + [-3.4112064838409424, -1.049570918083191], + [1.4308557510375977, 5.264692306518555], + [-1.1738721132278442, 10.757955551147461], + [-1.2902319431304932, -2.534203290939331], + [0.6602810025215149, -3.9761157035827637], + [7.768616199493408, -2.408644437789917], + [2.821963310241699, -5.538018226623535], + [1.2904080152511597, 0.2509177327156067], + [2.043323040008545, 0.5684407949447632], + [-1.860835313796997, 2.380289077758789], + [-2.9064905643463135, -0.6208288073539734], + [-4.197194576263428, -2.793982982635498], + [0.2634219527244568, -6.276817321777344], + [-4.495629787445068, 1.4468904733657837], + [3.0086796283721924, -4.71099853515625], + [0.6123030185699463, -7.7856125831604], + [2.3521363735198975, 6.1185808181762695], + [2.9130334854125977, -4.531122207641602], + [0.61281818151474, 2.3884437084198], + [-3.790300130844116, -0.5636389851570129], + [-1.4515482187271118, 12.545666694641113], + [4.5312933921813965, 7.832358360290527], + [2.845463275909424, -4.19488000869751], + [-3.7791826725006104, -3.724543333053589], + [-4.332264423370361, -0.5580516457557678], + [-4.233270168304443, 6.367671966552734], + [-3.5736677646636963, 6.082911491394043], + [2.682060480117798, -4.328454494476318], + [-4.365871429443359, -3.3790671825408936], + [-1.4669997692108154, 12.525627136230469], + [-3.367574453353882, -0.5038620829582214], + [-2.408531427383423, 2.9680659770965576], + [1.6738688945770264, 1.746095895767212], + [1.9009618759155273, 0.7858096957206726], + [1.5148987770080566, 7.159351825714111], + [2.9398882389068604, -4.560406684875488], + [-2.860311269760132, -2.3874456882476807], + [-3.841783285140991, 5.7052321434021], + [0.10650970786809921, -1.2083855867385864], + [9.199183464050293, -2.824896812438965], + [6.483871936798096, -5.3674516677856445], + [-3.335921049118042, -1.2267481088638306], + [0.4876846671104431, -6.996320724487305], + [1.697005271911621, 5.501897811889648], + [0.859040379524231, -4.753469467163086], + [-2.934095859527588, -2.288010597229004], + [6.555976867675781, -1.7130002975463867], + [1.3390867710113525, 3.2497942447662354], + [0.46107327938079834, -6.757406234741211], + [2.999764919281006, -4.699888706207275], + [6.789419651031494, -3.2837417125701904], + [-0.7578063607215881, -1.71148681640625], + [0.5312559604644775, -7.226629257202148], + [-3.8976998329162598, 0.46629661321640015], + [-3.6301615238189697, 4.24749755859375], + [-3.9227051734924316, 5.943910598754883], + [-3.3033955097198486, 3.621398687362671], + [-5.433495044708252, 7.626090049743652], + [2.547248601913452, -4.127230644226074], + [-2.181654214859009, -1.8718749284744263], + [-1.8414090871810913, 2.4401092529296875], + [-4.039835453033447, -1.781715989112854], + [-2.5145063400268555, -3.0832607746124268], + [-1.206597924232483, 11.40407943725586], + [0.1874619424343109, -4.334030628204346], + [3.012552261352539, -4.75468111038208], + [-0.47315824031829834, 9.728763580322266], + [-3.609757661819458, -0.7661110162734985], + [3.0438554286956787, -4.761273384094238], + [-1.699953556060791, 1.1530784368515015], + [4.117817401885986, 7.464694976806641], + [2.744288682937622, -4.2588934898376465], + [8.0426025390625, -2.7628355026245117], + [-3.3239738941192627, 4.374164581298828], + [6.672586441040039, -2.575978994369507], + [2.793832778930664, -4.875685691833496], + [-1.8422123193740845, 2.0071208477020264], + [-4.682035446166992, 5.6494951248168945], + [-4.4183030128479, 6.554668426513672], + [0.9140351414680481, -6.687673568725586], + [6.66135835647583, -4.094047546386719], + [2.37164044380188, 5.543117523193359], + [-1.4095065593719482, 11.74915885925293], + [7.215643882751465, -2.9041268825531006], + [0.39529716968536377, -6.4164581298828125], + [0.5882042050361633, -5.8828935623168945], + [-3.9973981380462646, -1.9009405374526978], + [-4.949751377105713, 0.47655999660491943], + [-2.101323366165161, 6.051122665405273], + [0.7202261090278625, -9.30604076385498], + [1.4683412313461304, 0.5747789144515991], + [1.9295697212219238, 4.948808193206787], + [2.600318431854248, 4.26582145690918], + [0.776162326335907, -8.974910736083984], + [-3.844210147857666, -0.6014111042022705], + [-0.32476505637168884, 0.9784992933273315], + [-1.242304801940918, -0.08555173873901367], + [-2.9917845726013184, -0.8219444751739502], + [-2.5767593383789062, 2.587440013885498], + [2.338632345199585, 5.5516767501831055], + [2.378469705581665, 5.897217750549316], + [2.8475754261016846, -4.655239105224609], + [-3.3541438579559326, -1.894055962562561], + [1.0351510047912598, -8.293440818786621], + [2.929309606552124, -4.484511852264404], + [2.4595210552215576, -4.554343223571777], + [-5.385140895843506, 4.920961380004883], + [-4.106544017791748, 7.1468424797058105], + [-3.3795950412750244, 4.388451099395752], + [8.629605293273926, -2.5386202335357666], + [-3.302255868911743, 6.05189323425293], + [7.955739498138428, -2.689763069152832], + [2.255817174911499, -3.99434494972229], + [0.5946112275123596, -6.99543571472168], + [-3.541947841644287, -1.4915279150009155], + [8.682290077209473, -2.7344789505004883], + [-3.8880112171173096, -2.564049005508423], + [1.6151330471038818, 4.044730186462402], + [-4.748180866241455, -1.1155993938446045], + [-0.9073925018310547, -0.5067790746688843], + [-3.3834726810455322, -1.1984686851501465], + [0.5884249210357666, -6.840950012207031], + [0.20730847120285034, -5.783970355987549], + [0.6526196002960205, -8.02199935913086], + [2.236642360687256, -4.64213752746582], + [6.480437755584717, -1.8753710985183716], + [-3.9109649658203125, -2.5500922203063965], + [5.635292053222656, -3.5271098613739014], + [-4.5682597160339355, -1.3066972494125366], + [-2.8196146488189697, -0.8617222309112549], + [-5.015508651733398, -1.2217892408370972], + [2.607525587081909, 5.455625534057617], + [-3.2089173793792725, -1.7222609519958496], + [1.4623513221740723, -5.891635894775391], + [-5.128750324249268, 6.105180740356445], + [-1.185577392578125, 10.933647155761719], + [-4.511894226074219, -3.980701208114624], + [1.9309399127960205, 4.568508148193359], + [-1.2482260465621948, 5.972623825073242], + [-3.156390428543091, -1.1051651239395142], + [0.8766258358955383, -5.485542297363281], + [-1.076301097869873, 10.271530151367188], + [-2.278519868850708, 0.1964229941368103], + [9.210482597351074, -2.782888650894165], + [0.6692444682121277, -7.849588871002197], + [0.6666955947875977, -8.471192359924316], + [0.8411115407943726, -7.5359015464782715], + [-1.076140284538269, 10.326278686523438], + [-0.540428876876831, 5.142488479614258], + [-1.7074742317199707, 2.2405471801757812], + [2.0532329082489014, -3.6527340412139893], + [0.32881563901901245, -7.371491432189941], + [-3.5642831325531006, -1.3103511333465576], + [-3.598243236541748, -1.0708619356155396], + [1.0840413570404053, 5.091158390045166], + [-0.9751961827278137, 10.365121841430664], + [0.19998663663864136, -5.6364922523498535], + [-1.9286739826202393, 2.044968605041504], + [-3.4145309925079346, -1.5285757780075073], + [0.5776185393333435, -7.746391296386719], + [6.350982189178467, -1.7575232982635498], + [-0.4178355634212494, -1.0886095762252808], + [0.80588299036026, -0.3594895303249359], + [0.691269040107727, -0.7850654125213623], + [0.5522535443305969, -6.942913055419922], + [-3.3404040336608887, -0.8448776006698608], + [0.7430129647254944, 4.377299785614014], + [-1.4567620754241943, 12.674553871154785], + [-1.1016325950622559, 9.987377166748047], + [-0.9138191342353821, 10.355650901794434], + [-2.8251073360443115, -3.0721981525421143], + [0.742994487285614, -9.13158130645752], + [-3.364286184310913, -2.394523859024048], + [0.3152901530265808, -4.496613502502441], + [-2.5272066593170166, -0.6841462850570679], + [-4.6084136962890625, -1.124406099319458], + [1.9982101917266846, 5.5486369132995605], + [0.44615602493286133, 5.3619465827941895], + [-1.3992960453033447, 5.447717189788818], + [-3.7224838733673096, 5.477472305297852], + [-0.7686565518379211, 10.072172164916992], + [-1.9246244430541992, 1.0893638134002686], + [2.2758424282073975, 4.323737144470215], + [7.893860340118408, -2.2444450855255127], + [5.616379737854004, -1.352903962135315], + [0.4311482310295105, -7.118171691894531], + [-0.7902937531471252, 10.013626098632812], + [7.69540548324585, -2.8545169830322266], + [2.922294855117798, -3.969252347946167], + [2.3149421215057373, -4.178294658660889], + [-0.1142309382557869, 8.414713859558105], + [7.883167743682861, -2.20322585105896], + [-3.1140005588531494, 4.232748985290527], + [7.723461627960205, -2.7290165424346924], + [8.85604190826416, -2.7018091678619385], + [1.5836997032165527, 5.812931537628174], + [-3.8422634601593018, -1.6159402132034302], + [-6.034960746765137, 7.979768753051758], + [1.4524147510528564, 3.8661129474639893], + [-0.6601414084434509, 9.642776489257812], + [2.806149959564209, -4.619895935058594], + [-0.4831804037094116, -0.7839553356170654], + [-3.8728559017181396, -2.9074923992156982], + [2.220212936401367, 5.116024971008301], + [7.336819171905518, -2.446476697921753], + [-1.0705829858779907, 10.153960227966309], + [6.111515045166016, -2.1851418018341064], + [-4.488829135894775, 4.898477554321289], + [-0.15751633048057556, -1.3969635963439941], + [8.02367877960205, -3.1490888595581055], + [-2.378119707107544, 2.3758676052093506], + [-3.521732807159424, -0.9325158596038818], + [2.6719980239868164, -4.400643348693848], + [-2.8480474948883057, 7.076839447021484], + [1.2727057933807373, 2.0504310131073], + [-4.1881818771362305, -2.2740318775177], + [0.33105093240737915, -6.8448357582092285], + [0.8420631289482117, -7.505403518676758], + [-0.8012545704841614, -1.1293407678604126], + [-4.4596943855285645, -0.7205582857131958], + [-4.057949542999268, -0.9464900493621826], + [-0.558133602142334, 10.165599822998047], + [2.863900899887085, -4.514993667602539], + [6.242512226104736, -4.447379112243652], + [0.413421094417572, -7.707112789154053], + [-2.0891809463500977, 2.1461312770843506], + [0.7994725108146667, -7.571214199066162], + [0.8934500217437744, 4.180731773376465], + [-2.834193468093872, 5.37109375], + [0.6672183871269226, -8.865970611572266], + [-1.320898413658142, 11.69146728515625], + [2.179680585861206, 4.35377311706543], + [-2.6672098636627197, 5.175111293792725], + [6.709653377532959, -2.5390889644622803], + [6.616179943084717, -2.6485111713409424], + [-2.587660551071167, 1.2469398975372314], + [1.0595823526382446, 2.347538709640503], + [-2.691248655319214, -0.43324339389801025], + [-5.101378917694092, -0.9818369150161743], + [0.6456690430641174, -7.8076982498168945], + [-3.3041508197784424, 4.68220329284668], + [1.5285561084747314, -5.672993183135986], + [2.946416139602661, -4.511363983154297], + [0.9298316836357117, -6.439857006072998], + [-2.2276015281677246, 2.192047357559204], + [-2.023002862930298, -2.5993921756744385], + [-1.721272349357605, 1.779003620147705], + [4.870634078979492, -2.7828269004821777], + [-3.632464647293091, -1.0289946794509888], + [2.4330155849456787, -5.534262657165527], + [-4.248407363891602, -3.212420701980591], + [-5.205343723297119, 6.675590515136719], + [0.5086038708686829, -0.7622628808021545], + [-4.323869705200195, -1.022267460823059], + [-0.9005640745162964, -2.7635462284088135], + [-3.1402297019958496, -0.8322014808654785], + [8.304936408996582, -2.7945444583892822], + [-1.8719711303710938, 0.9243015050888062], + [-0.7607215642929077, 1.4082462787628174], + [-0.6760526895523071, -1.3983899354934692], + [4.472218990325928, 7.394794940948486], + [-3.8639535903930664, 6.87225866317749], + [1.7343695163726807, 5.7550859451293945], + [-0.40623849630355835, -1.2773042917251587], + [-5.778870105743408, 5.521697998046875], + [-0.8445999026298523, 10.719316482543945], + [-2.2683911323547363, 6.329590797424316], + [4.092980861663818, 6.99650764465332], + [2.342142343521118, -4.690243721008301], + [0.5176060795783997, -6.752264976501465], + [0.21226805448532104, 0.9073807597160339], + [-0.9790566563606262, 11.170177459716797], + [-4.805752277374268, -0.6371521353721619], + [9.260322570800781, -2.7389230728149414], + [-0.9841544032096863, 10.825491905212402], + [2.086747884750366, 0.9036546945571899], + [6.8704447746276855, -2.5027849674224854], + [2.2295706272125244, -5.270298480987549], + [0.19979238510131836, -5.7808942794799805], + [2.3845303058624268, 3.770482301712036], + [6.823153972625732, -1.6743069887161255], + [-2.7832157611846924, 4.666881561279297], + [2.0703659057617188, 4.086956977844238], + [2.3719489574432373, 0.49273252487182617], + [2.755108594894409, -4.699816703796387], + [0.1612471342086792, -4.590239524841309], + [-3.3875913619995117, -0.9042192101478577], + [1.4908556938171387, -4.882444381713867], + [2.923917531967163, 5.2761054039001465], + [3.0595014095306396, -5.035796165466309], + [-3.670344591140747, -2.571093797683716], + [6.272206783294678, -1.9728890657424927], + [2.355494976043701, -4.838602066040039], + [-3.91548490524292, -4.758513450622559], + [-2.7669200897216797, 6.177506446838379], + [-1.2373747825622559, -0.6941736340522766], + [0.5179551243782043, -7.34081506729126], + [-5.057562351226807, -0.8168576955795288], + [-1.7164018154144287, 0.5883878469467163], + [8.357287406921387, -3.2651174068450928], + [8.924529075622559, -2.8489439487457275], + [0.9091813564300537, -6.26750373840332], + [-0.7471851706504822, 10.541150093078613], + [-1.180962085723877, 11.507511138916016], + [-0.02546120434999466, -4.127926826477051], + [2.142611026763916, 5.511748313903809], + [-3.5007846355438232, -1.2702678442001343], + [0.10843198746442795, -0.7597944736480713], + [1.6552436351776123, -5.098077774047852], + [0.25695300102233887, 8.210387229919434], + [6.431826591491699, -3.50749135017395], + [-1.5942732095718384, -0.8898283839225769], + [7.820489883422852, -2.7589638233184814], + [1.0134358406066895, -6.493624687194824], + [-2.2359440326690674, -2.1340548992156982], + [-1.1592857837677002, 10.41972541809082], + [4.738015651702881, -4.022075176239014], + [9.205172538757324, -2.822876453399658], + [-1.1223732233047485, 10.185274124145508], + [-0.01773495227098465, 9.004343032836914], + [6.3163228034973145, -3.7102906703948975], + [2.3414502143859863, -5.305352687835693], + [1.0107684135437012, -6.236902236938477], + [-2.9671056270599365, -0.7964096665382385], + [1.5473459959030151, 1.748313546180725], + [0.32039451599121094, -5.678808212280273], + [0.6893338561058044, -6.075944900512695], + [5.919654369354248, -2.72049617767334], + [5.891557693481445, -2.05039381980896], + [7.025449752807617, -2.4027910232543945], + [3.1744420528411865, -5.3338518142700195], + [0.3546915352344513, 0.43999049067497253], + [-3.276324987411499, -1.2050936222076416], + [-4.1168107986450195, -2.013728141784668], + [1.1482524871826172, 0.7494044899940491], + [0.12893718481063843, -4.54247522354126], + [5.679030895233154, -1.3497127294540405], + [-1.2104406356811523, 11.501653671264648], + [-3.895775556564331, -1.5938544273376465], + [1.0659191608428955, 0.34251174330711365], + [-1.7260916233062744, -3.710294485092163], + [-3.7880618572235107, 4.380078315734863], + [-1.6383944749832153, 2.122037887573242], + [-3.565703868865967, -0.9528236389160156], + [0.7153177857398987, -9.373466491699219], + [-0.22365617752075195, 9.363761901855469], + [-3.685026168823242, -1.042975664138794], + [-0.47797393798828125, 10.760902404785156], + [2.0409462451934814, 5.235170364379883], + [-3.8050010204315186, -1.3462988138198853], + [-5.124761581420898, -1.1473067998886108], + [-4.424516201019287, -0.26276397705078125], + [2.805722951889038, 6.199337005615234], + [1.47161865234375, 0.7173908948898315], + [3.7251698970794678, 6.814465522766113], + [4.2921576499938965, -5.03554105758667], + [-2.0851659774780273, 2.167552947998047], + [-1.266775131225586, 11.621173858642578], + [-1.332282543182373, 11.537008285522461], + [-3.637018918991089, -1.033005952835083], + [-0.3091740012168884, 2.5605013370513916], + [-0.257923424243927, 9.704745292663574], + [-0.8243863582611084, 10.562082290649414], + [-4.930634021759033, -1.6303154230117798], + [-5.947676181793213, 7.982718467712402], + [8.463104248046875, -2.9430453777313232], + [-1.602816104888916, 12.60932445526123], + [5.1726298332214355, -4.274123191833496], + [0.46291935443878174, -6.890887260437012], + [-0.9409622550010681, 10.971283912658691], + [1.7730801105499268, 3.60660982131958], + [2.6009485721588135, -4.306107997894287], + [-5.304281711578369, -0.8063912391662598], + [-4.828729152679443, -3.459803581237793], + [3.7267351150512695, 6.914948463439941], + [-0.08522287756204605, -3.6737847328186035], + [0.3311207592487335, -4.5807785987854], + [0.6099353432655334, -8.88854694366455], + [1.1357691287994385, 1.1006191968917847], + [-3.7923879623413086, -2.155909776687622], + [-1.9686801433563232, -1.332715630531311], + [-1.2628268003463745, -0.8841773271560669], + [1.489488959312439, -0.06505930423736572], + [-3.6509740352630615, -1.0828477144241333], + [2.1113357543945312, -4.215873718261719], + [0.6495382785797119, -8.512392044067383], + [2.259737014770508, 3.8315181732177734], + [-3.8129565715789795, -4.209996223449707], + [-3.206683874130249, -1.1786471605300903], + [-2.9718337059020996, -1.4926263093948364], + [-4.057022571563721, -2.630531072616577], + [-5.398597240447998, -4.396090507507324], + [-0.9076734781265259, 10.722575187683105], + [1.4982647895812988, -6.010531425476074], + [-4.699190139770508, 6.3801798820495605], + [4.180252552032471, -0.886169970035553], + [-1.1787383556365967, -0.43781134486198425], + [-2.6274735927581787, -0.5683647394180298], + [-1.552812099456787, -2.3825418949127197], + [-0.9547885060310364, -0.7192927598953247], + [-3.7453553676605225, -1.1435284614562988], + [5.545177459716797, -1.3982292413711548], + [-0.46155494451522827, 8.550363540649414], + [-2.286846160888672, -2.5509133338928223], + [-3.234767198562622, 5.756921768188477], + [-0.8308140635490417, 10.5069580078125], + [-3.7011642456054688, -1.094469666481018], + [-1.9576812982559204, 1.8837779760360718], + [2.5312206745147705, -4.451430797576904], + [-3.6229593753814697, -1.0367687940597534], + [8.08731746673584, -2.8586976528167725], + [-0.021120794117450714, -1.269659161567688], + [2.839243173599243, -4.965151786804199], + [7.285044193267822, -2.021158456802368], + [-2.518519639968872, -0.8416351079940796], + [-2.434659481048584, -3.7726314067840576], + [-1.715070128440857, 1.4495115280151367], + [0.417993426322937, -7.074347496032715], + [-1.8809888362884521, 0.7219616770744324], + [-4.71681547164917, -0.6228973269462585], + [-1.8576792478561401, 1.4294856786727905], + [-1.3620373010635376, 11.736915588378906], + [2.8276472091674805, -4.675664901733398], + [0.667598307132721, -8.477499008178711], + [2.945136308670044, -4.889003753662109], + [2.2536556720733643, 0.523304283618927], + [-1.0933516025543213, 9.765791893005371], + [-1.0925710201263428, -2.95528507232666], + [0.5642802715301514, -7.9090704917907715], + [-3.302680253982544, -1.5583552122116089], + [0.43529170751571655, -5.961853504180908], + [-2.0996286869049072, 1.840186357498169], + [0.5753096342086792, -8.591703414916992], + [1.5658793449401855, 5.039696216583252], + [-5.0142316818237305, 7.209527969360352], + [-1.78656005859375, 0.9368453621864319], + [4.652573108673096, 7.640308380126953], + [-5.236423015594482, 6.604573726654053], + [2.735281467437744, -5.206525802612305], + [2.5439534187316895, -5.121064186096191], + [-0.6385421752929688, 10.176277160644531], + [8.723578453063965, -2.6604321002960205], + [-1.306595802307129, 11.39016056060791], + [-5.943312168121338, -0.9124224185943604], + [-3.791485548019409, -1.9881640672683716], + [-1.2373932600021362, 11.421491622924805], + [-2.4289608001708984, 2.4926087856292725], + [-0.367866575717926, 9.790351867675781], + [2.0616819858551025, -5.224562644958496], + [-3.0309133529663086, 7.312849044799805], + [-0.44233953952789307, 1.6642365455627441], + [-3.522681474685669, -2.5895330905914307], + [2.8090097904205322, -4.570001125335693], + [2.24345064163208, -5.335590362548828], + [1.75616455078125, 6.360909461975098], + [2.669816017150879, 5.892160415649414], + [-3.555957794189453, -1.0560259819030762], + [-4.065512180328369, 6.882150650024414], + [0.8998416066169739, -6.503629207611084], + [0.17621344327926636, -5.884134292602539], + [-1.9170475006103516, 1.1906826496124268], + [-4.205513000488281, -0.8016226887702942], + [-1.3596118688583374, 1.4174503087997437], + [-3.513078451156616, -0.8974031805992126], + [-3.2860095500946045, -1.0461333990097046], + [-4.12129545211792, -2.4453320503234863], + [3.846524715423584, 6.868424415588379], + [2.9480183124542236, -4.561147689819336], + [0.2728017568588257, -5.654818534851074], + [-4.146848201751709, 5.443750381469727], + [-4.701684474945068, 5.892871379852295], + [-2.815178155899048, 2.9966843128204346], + [-4.739958763122559, 6.368677616119385], + [-1.7676373720169067, 2.2906105518341064], + [-1.2333295345306396, 11.21130657196045], + [1.6124615669250488, 5.146196365356445], + [5.8281965255737305, -1.8399808406829834], + [8.725497245788574, -2.743260145187378], + [-3.8652989864349365, -3.7510905265808105], + [1.8450202941894531, 3.2229158878326416], + [-4.56126070022583, 6.622793197631836], + [-4.468245029449463, 4.6422014236450195], + [-3.1939444541931152, 5.011716842651367], + [-3.246410608291626, -0.9392310380935669], + [0.7880521416664124, -7.3787078857421875], + [-4.013942241668701, 6.316532135009766], + [1.262188196182251, -6.7115983963012695], + [1.7717775106430054, 0.4862637519836426], + [-3.4988973140716553, -0.13904628157615662], + [-4.113961219787598, 6.366642475128174], + [3.1459033489227295, -4.995616912841797], + [-3.8105595111846924, -2.7470767498016357], + [-1.3293392658233643, -0.026448938995599747], + [8.559246063232422, -3.23136305809021], + [2.6398494243621826, -4.352745056152344], + [1.1302767992019653, -6.16231632232666], + [-4.795767784118652, -1.508804202079773], + [-4.41618537902832, 5.923948764801025], + [0.9039953351020813, -0.5344734191894531], + [-4.285240173339844, -1.4264283180236816], + [-5.439731121063232, 5.988330841064453], + [6.629554748535156, -1.9966050386428833], + [8.753385543823242, -2.933119535446167], + [6.733642578125, -1.6044315099716187], + [0.8224290013313293, -9.838079452514648], + [2.554870128631592, 4.792661190032959], + [0.5219742655754089, -5.3034467697143555], + [2.121574640274048, 5.463445663452148], + [1.954904317855835, 4.59929895401001], + [8.245503425598145, -3.0088963508605957], + [1.6087062358856201, -4.736314296722412], + [-2.182598829269409, -1.085905909538269], + [0.6011698842048645, -6.891327857971191], + [-1.7431769371032715, 0.9007753729820251], + [-3.3406822681427, 4.958934783935547], + [6.2005743980407715, -1.1509698629379272], + [-3.6251885890960693, 1.2243582010269165], + [6.619612216949463, -1.3635836839675903], + [1.4353219270706177, 0.5850722193717957], + [4.945525169372559, 7.809676647186279], + [-0.780962347984314, -0.8531526327133179], + [-0.8900145888328552, 10.58084487915039], + [1.7114049196243286, -5.972712516784668], + [-4.5207200050354, -3.036064863204956], + [1.7685303688049316, -4.67719841003418], + [-3.8890326023101807, -2.7226295471191406], + [-3.7904677391052246, -2.5776126384735107], + [-3.4197659492492676, -3.403573751449585], + [-4.144110202789307, 4.655276298522949], + [-1.0942853689193726, 10.523093223571777], + [-1.4024133682250977, 12.413293838500977], + [0.7073113918304443, -8.545007705688477], + [1.6494719982147217, 5.4610276222229], + [-1.715026617050171, 1.9761017560958862], + [1.6352803707122803, -4.858769416809082], + [6.20081901550293, -1.82701575756073], + [-2.04767107963562, 2.3082025051116943], + [-0.6733903288841248, 5.171062469482422], + [-2.837324857711792, -1.4493690729141235], + [-0.3468194007873535, 9.457456588745117], + [-0.6434042453765869, -0.19726568460464478], + [-4.103105545043945, -1.8679629564285278], + [-3.5421411991119385, -0.8299059867858887], + [-5.023874759674072, 5.541229248046875], + [0.6454759240150452, -5.395150184631348], + [-1.2529155015945435, 11.081075668334961], + [1.4295482635498047, -8.11815071105957], + [-3.7096469402313232, -2.7223334312438965], + [-0.5107730031013489, 9.20871353149414], + [-4.523065090179443, -3.891324758529663], + [-1.2831929922103882, 11.792022705078125], + [-5.4949822425842285, 5.785639762878418], + [1.4821052551269531, 5.211749076843262], + [-4.123386383056641, 5.676193714141846], + [-1.1790097951889038, 11.152639389038086], + [0.5147222280502319, -6.599725723266602], + [-1.4324431419372559, 11.740331649780273], + [0.7291728854179382, -9.123832702636719], + [8.613947868347168, -2.5536065101623535], + [-4.318183898925781, 7.301149368286133], + [-5.1778883934021, 6.670865058898926], + [-4.232799053192139, -3.0076186656951904], + [3.3485867977142334, 0.7064114809036255], + [-0.5363673567771912, -3.8073933124542236], + [0.5528854727745056, -7.39392614364624], + [8.788060188293457, -2.6487157344818115], + [1.6321144104003906, 1.0322160720825195], + [-0.6789578795433044, 10.77746868133545], + [-4.0425310134887695, -1.1227444410324097], + [5.933719635009766, -1.3590638637542725], + [2.454580545425415, -5.04746675491333], + [0.39029744267463684, -5.012808322906494], + [-3.0503995418548584, 5.523728370666504], + [-0.02153307944536209, 10.079766273498535], + [1.7389957904815674, 4.014469146728516], + [-3.1303086280822754, -1.4335651397705078], + [7.1560187339782715, -2.082821846008301], + [-0.7730383276939392, 6.073678970336914], + [1.2847504615783691, -4.764245986938477], + [-3.9895577430725098, -0.8044440150260925], + [3.865483045578003, -3.3324129581451416], + [-1.4239718914031982, 12.0455322265625], + [-1.2168477773666382, 10.940803527832031], + [2.590366840362549, -4.199395656585693], + [-0.4371015429496765, 9.999038696289062], + [7.143918991088867, -3.9361441135406494], + [-2.6532742977142334, 0.5249269008636475], + [-1.6561706066131592, 1.7139376401901245], + [1.2633655071258545, 2.0710599422454834], + [-0.6370067000389099, 10.14908218383789], + [3.0359201431274414, 6.82822322845459], + [9.613725662231445, -2.9843826293945312], + [3.7595555782318115, 7.333351135253906], + [-1.3955963850021362, 1.3637654781341553], + [-1.4345115423202515, 11.967551231384277], + [-4.161085605621338, 0.7868273854255676], + [5.124250411987305, -4.476879119873047], + [-1.8096680641174316, 1.857407808303833], + [-3.758169412612915, -2.237924814224243], + [1.8719524145126343, -3.9195961952209473], + [-0.6822296977043152, 9.573707580566406], + [-3.835923671722412, -4.097040176391602], + [2.723475217819214, -4.338510990142822], + [1.8431189060211182, -7.172482013702393], + [1.6731455326080322, -5.240811347961426], + [2.620042085647583, -4.483979225158691], + [-0.8437944054603577, 9.45279312133789], + [0.4282687306404114, -6.721080780029297], + [1.6397689580917358, 0.7904146909713745], + [-0.4529474377632141, 10.090495109558105], + [-4.117778778076172, -1.321541666984558], + [1.3280953168869019, 6.345107078552246], + [3.00059175491333, -4.735634803771973], + [6.7356109619140625, -3.7547643184661865], + [0.030963949859142303, 8.587179183959961], + [0.4685209393501282, -5.147731781005859], + [-3.9337244033813477, -1.3005460500717163], + [2.132673501968384, 6.049886226654053], + [0.3995966911315918, -6.049253463745117], + [-3.112861394882202, -2.3456919193267822], + [2.480046033859253, -5.228504180908203], + [6.317768573760986, 9.097807884216309], + [-1.2322982549667358, 10.939653396606445], + [-1.0155317783355713, 10.125886917114258], + [-0.7759421467781067, 10.426334381103516], + [-1.318332552909851, -0.5640745162963867], + [2.3286924362182617, -4.015740394592285], + [3.871767282485962, 7.40814208984375], + [-4.160848140716553, -1.219704270362854], + [-2.101433753967285, 1.833299994468689], + [-4.612359523773193, 7.236179351806641], + [-5.327968120574951, 4.322838306427002], + [-1.9203096628189087, 0.7612795233726501], + [-3.452324628829956, -0.7200513482093811], + [7.103050708770752, -3.5450284481048584], + [-3.0196874141693115, -0.9572161436080933], + [0.21268677711486816, -0.27260375022888184], + [-3.894016981124878, 4.713511943817139], + [3.2465927600860596, -1.6080535650253296], + [-3.6106033325195312, -0.9854848384857178], + [2.710463762283325, -4.7450175285339355], + [-5.600426197052002, 5.584551811218262], + [-2.491508960723877, 2.493762731552124], + [-3.6880524158477783, -1.6112611293792725], + [6.924976825714111, -1.9286017417907715], + [-3.5589096546173096, -1.780214548110962], + [2.426603317260742, -6.763237953186035], + [-3.3726003170013428, -1.3784900903701782], + [0.45171481370925903, -7.083240509033203], + [0.46888071298599243, -4.630356788635254], + [-3.90480375289917, -1.4084059000015259], + [-1.2630305290222168, 0.43126577138900757], + [3.480060338973999, 6.716156482696533], + [8.470846176147461, -2.553541660308838], + [-4.399984836578369, -1.6086574792861938], + [2.66300892829895, -4.119113922119141], + [-0.09144289046525955, -4.0679030418396], + [-3.784323215484619, -1.8846458196640015], + [5.169641017913818, -3.687349319458008], + [-5.117525577545166, -1.0631681680679321], + [8.416765213012695, -2.7083804607391357], + [-2.451956272125244, -0.28672146797180176], + [0.2952038049697876, -6.189662456512451], + [2.37629771232605, -2.9049508571624756], + [4.052567958831787, 7.104799270629883], + [2.7157187461853027, -4.610267639160156], + [-3.3926548957824707, -1.316926121711731], + [4.140416145324707, 7.62086296081543], + [0.2601177990436554, -4.960659503936768], + [-4.565989971160889, 4.786923408508301], + [-5.409173965454102, 7.0368733406066895], + [-2.704068183898926, -1.3562973737716675], + [0.7744314074516296, -8.751559257507324], + [-1.7312575578689575, 0.1658874750137329], + [0.5288152098655701, -7.559228420257568], + [-4.191141605377197, 6.0775980949401855], + [0.5673499703407288, -7.423974990844727], + [-0.8500173687934875, -0.9404740929603577], + [0.026917241513729095, -1.0884302854537964], + [1.674465537071228, 5.396332740783691], + [0.11806722730398178, -5.369267463684082], + [1.784818172454834, 0.04659883305430412], + [6.0153279304504395, -1.5723035335540771], + [-1.2381373643875122, 11.10042667388916], + [0.11355888098478317, -4.249854564666748], + [0.7694445848464966, -5.736732006072998], + [-3.823784112930298, -2.2671780586242676], + [-1.478935718536377, 1.1419031620025635], + [-4.249697208404541, -1.7117971181869507], + [7.304090976715088, -2.3310892581939697], + [-3.6691431999206543, -1.1668940782546997], + [9.353880882263184, -2.7933013439178467], + [0.7026787996292114, -8.163158416748047], + [0.9145668148994446, -7.73654842376709], + [-3.1273789405822754, -4.471564292907715], + [-2.6270101070404053, -0.8719162940979004], + [-3.5668461322784424, -0.9931094646453857], + [3.7452232837677, 6.987250328063965], + [-1.2751895189285278, 11.89406681060791], + [0.7268357276916504, -6.322953224182129], + [5.744628429412842, -3.1839516162872314], + [7.276284694671631, -3.6527419090270996], + [-2.3735768795013428, 0.717913031578064], + [5.757548809051514, -1.1666489839553833], + [-1.0981086492538452, 9.793073654174805], + [-1.9819365739822388, 1.6006616353988647], + [0.9999962449073792, -0.13049852848052979], + [0.5445480942726135, -7.28941535949707], + [-0.6903843879699707, 5.163726806640625], + [-0.3698195517063141, -1.4508289098739624], + [4.894856929779053, 7.637618064880371], + [-2.1295578479766846, 1.7294833660125732], + [2.9660370349884033, -4.714807510375977], + [-3.6628007888793945, -1.8174636363983154], + [-0.26292699575424194, -2.204425573348999], + [-4.996277332305908, 5.914142608642578], + [-4.738297939300537, -0.9995871782302856], + [1.9259464740753174, -3.6640279293060303], + [-0.2584924101829529, 9.099170684814453], + [-0.2608322203159332, -1.4388614892959595], + [-0.6777352690696716, 10.270851135253906], + [-1.919645071029663, 0.5648471713066101], + [2.185887098312378, -4.6152262687683105], + [-5.266659736633301, 7.410872459411621], + [5.0804572105407715, 8.010608673095703], + [0.43155723810195923, -6.75739860534668], + [0.10753922909498215, -0.8051139116287231], + [-1.3635629415512085, 11.53525161743164], + [-0.1753343939781189, 7.141656875610352], + [-3.6556880474090576, -0.9947534799575806], + [0.0917220339179039, -5.253757476806641], + [9.07719612121582, -2.7962839603424072], + [0.9408493638038635, -6.486391067504883], + [0.3813472390174866, -6.283738136291504], + [8.748554229736328, -3.0472257137298584], + [2.299278736114502, 6.708072185516357], + [-4.751393795013428, -1.1502972841262817], + [-3.2674784660339355, 5.505285263061523], + [-5.249047756195068, 6.9771294593811035], + [-5.154373645782471, 4.564764976501465], + [-4.080923557281494, -2.1545839309692383], + [2.857536554336548, -4.471402645111084], + [-5.38454008102417, 6.957031726837158], + [1.4451112747192383, 5.489662170410156], + [-3.447387456893921, -1.4094120264053345], + [2.4576001167297363, 5.821647644042969], + [0.5445581674575806, -8.066091537475586], + [-5.822595119476318, -1.3172274827957153], + [0.6065269112586975, -8.281302452087402], + [-2.0608174800872803, 2.000636577606201], + [8.689995765686035, -2.9757895469665527], + [-3.021871328353882, -1.6353546380996704], + [-1.3033533096313477, 1.1365960836410522], + [-4.915736198425293, 6.655617713928223], + [4.300635814666748, -3.9197304248809814], + [5.427116394042969, -4.459590911865234], + [-0.16451531648635864, -4.010869979858398], + [-2.43039870262146, -2.7828428745269775], + [0.6696756482124329, -8.45102310180664], + [2.5776617527008057, -4.444125175476074], + [2.8565189838409424, -4.363340377807617], + [-0.2838321328163147, 9.246731758117676], + [2.865065336227417, -4.505476951599121], + [6.827916622161865, -3.8150007724761963], + [2.454798936843872, 6.2579803466796875], + [4.142135143280029, 7.6612396240234375], + [0.6018690466880798, -7.124948978424072], + [0.5904065370559692, -5.6879401206970215], + [8.168365478515625, -2.603374719619751], + [-1.058575987815857, 1.7541316747665405], + [0.6145997643470764, -8.566332817077637], + [0.5778579115867615, -3.041156530380249], + [3.0870656967163086, -4.9933671951293945], + [-1.443235993385315, 1.91338050365448], + [-2.0020618438720703, 0.5979799032211304], + [6.242741107940674, -4.1063995361328125], + [-2.744194507598877, -0.6628080606460571], + [-0.892772376537323, -0.9382765293121338], + [-3.3876259326934814, -1.210768222808838], + [-0.6358250379562378, 10.165563583374023], + [-0.6518152356147766, 3.7482173442840576], + [-3.493525981903076, -3.079843759536743], + [0.43919461965560913, -4.763982772827148], + [2.6121294498443604, 5.769924163818359], + [7.592312335968018, -2.6573052406311035], + [-3.678114652633667, 4.697339057922363], + [1.3309332132339478, 0.820887565612793], + [-4.037425518035889, -1.1756818294525146], + [0.42834222316741943, -7.5324387550354], + [2.502903699874878, 6.214385032653809], + [-0.8796461224555969, 1.288521647453308], + [2.0580599308013916, 4.0763092041015625], + [0.5039761662483215, -7.326822280883789], + [5.709293365478516, -3.4568722248077393], + [-0.0588594451546669, -3.742384672164917], + [0.7009947299957275, -8.05954360961914], + [1.249412178993225, 5.153477668762207], + [-0.9799765944480896, 10.467815399169922], + [-0.37888962030410767, -1.6732791662216187], + [2.355834484100342, -4.706150054931641], + [4.503777980804443, 7.546627044677734], + [-0.23816311359405518, 8.667415618896484], + [2.7634921073913574, -4.117137908935547], + [-4.3886590003967285, 5.077033042907715], + [-0.509090006351471, -1.2548640966415405], + [9.438801765441895, -2.8499338626861572], + [-3.961848497390747, -1.4674361944198608], + [-0.5851083397865295, 9.71180534362793], + [-0.6748954653739929, 10.116562843322754], + [1.5856356620788574, 0.9456266164779663], + [8.397430419921875, -2.6252171993255615], + [-0.6309484839439392, 9.75943374633789], + [2.694064140319824, -5.06104040145874], + [0.6320303082466125, -6.303039073944092], + [0.616711437702179, -6.307855606079102], + [-0.35931581258773804, 9.674724578857422], + [0.8102355003356934, -8.30035400390625], + [1.984419822692871, -4.525323867797852], + [0.7844186425209045, -6.859498977661133], + [-2.450162172317505, -1.4016512632369995], + [2.259356737136841, 3.8011486530303955], + [9.128981590270996, -2.7345547676086426], + [-1.8269089460372925, 2.2872250080108643], + [2.2738006114959717, 3.573073387145996], + [0.4736078977584839, -5.960129737854004], + [0.5080539584159851, -8.015491485595703], + [1.5962775945663452, 5.936862468719482], + [4.9435834884643555, 7.922647953033447], + [-5.133687496185303, -3.6953089237213135], + [0.43262189626693726, -6.680992126464844], + [0.7912519574165344, 6.398119926452637], + [-0.45677313208580017, -1.8159321546554565], + [7.211366176605225, -2.9764504432678223], + [6.221429824829102, -2.1908881664276123], + [-2.986816644668579, -1.3400224447250366], + [-4.125871658325195, -2.4858856201171875], + [-1.1905854940414429, 10.381312370300293], + [2.347524404525757, 5.490556240081787], + [1.6227033138275146, -3.4342639446258545], + [0.6699405312538147, -8.508033752441406], + [2.254974365234375, 6.378612518310547], + [0.33714091777801514, -1.1488639116287231], + [5.769591808319092, -3.083026885986328], + [-3.5729877948760986, -1.7719635963439941], + [2.1688225269317627, -5.374060153961182], + [0.6575044393539429, -9.107412338256836], + [0.10318874567747116, 0.8155440092086792], + [-1.0910682678222656, 11.244185447692871], + [-2.972831964492798, 3.1893441677093506], + [0.6919887661933899, -8.050128936767578], + [8.633588790893555, -3.1563374996185303], + [-3.7518985271453857, -0.9967066049575806], + [-5.468543529510498, 4.824512958526611], + [8.407917976379395, -3.1673130989074707], + [-2.3725547790527344, 0.08971172571182251], + [7.002068519592285, -2.380840301513672], + [5.921652317047119, -4.8329291343688965], + [-4.292709827423096, -5.03574275970459], + [-4.953000545501709, 6.766885280609131], + [0.14855152368545532, -5.303560256958008], + [-1.0527364015579224, 10.165788650512695], + [-0.41885143518447876, 9.426169395446777], + [7.588557720184326, -4.237631797790527], + [2.8363146781921387, -4.931512355804443], + [1.3588290214538574, 5.470338344573975], + [-0.1325429379940033, -0.5740361213684082], + [-1.1487199068069458, 10.262645721435547], + [-1.25217866897583, 11.596826553344727], + [5.9927544593811035, -1.826128602027893], + [0.5772801637649536, -6.467982769012451], + [-4.38823938369751, -2.863731622695923], + [-0.1867324709892273, 8.125030517578125], + [2.8221771717071533, -6.367938995361328], + [1.9174220561981201, -5.568029403686523], + [-0.5147254467010498, 8.454090118408203], + [2.855879306793213, 5.719997406005859], + [-0.5070323348045349, 10.261390686035156], + [-0.2571302056312561, 8.946242332458496], + [-5.307891368865967, 3.791808605194092], + [4.250833988189697, 7.193577766418457], + [0.4501788020133972, -5.14139986038208], + [-0.876823365688324, 8.505480766296387], + [2.859060287475586, -4.789204120635986], + [1.1578189134597778, -0.33875787258148193], + [1.7511491775512695, 5.225419998168945], + [-4.956521511077881, -3.554291009902954], + [-1.270659327507019, 11.868626594543457], + [2.270418405532837, 5.773077011108398], + [9.377459526062012, -2.870744466781616], + [-3.9847958087921143, -3.712235689163208], + [-1.892934799194336, 0.758120059967041], + [-2.0393788814544678, -0.5770361423492432], + [-3.7867372035980225, -1.1095362901687622], + [3.640874147415161, 6.985967636108398], + [2.076307773590088, 2.751779794692993], + [0.53431236743927, -6.386629104614258], + [-0.5065548419952393, -0.7777732014656067], + [-4.183256149291992, -1.3024377822875977], + [-2.6857810020446777, -2.736757516860962], + [0.8694726824760437, -5.510049819946289], + [1.0937186479568481, 0.20768487453460693], + [-1.3453587293624878, 11.848276138305664], + [1.6502186059951782, 5.135704517364502], + [1.087967038154602, -6.724776744842529], + [-0.9482216238975525, 10.490901947021484], + [-0.4719499349594116, 9.250275611877441], + [-2.5607428550720215, -0.8970032930374146], + [-3.970207691192627, -2.047346591949463], + [0.7229966521263123, -6.4190216064453125], + [-1.7043044567108154, 5.745067596435547], + [2.701157808303833, -4.149534225463867], + [-0.7746506333351135, 10.295425415039062], + [-0.08502507954835892, -3.2172434329986572], + [-3.8083207607269287, -1.5115740299224854], + [-4.164453983306885, -1.4565500020980835], + [-3.0918314456939697, 4.9306840896606445], + [-3.4113359451293945, 3.727057933807373], + [1.7692452669143677, 0.2521023750305176], + [1.9504950046539307, 6.113546371459961], + [2.2373766899108887, -4.675566673278809], + [0.5863559246063232, -7.631746768951416], + [0.5788525938987732, -1.1031699180603027], + [2.434842824935913, -4.699193954467773], + [-0.11579365283250809, 8.708295822143555], + [-4.02377986907959, -2.3478496074676514], + [-4.755227088928223, -1.3218947649002075], + [-1.3995802402496338, 11.893680572509766], + [2.5130538940429688, -4.4815778732299805], + [7.781414985656738, -2.423713445663452], + [-3.610978364944458, -1.4561818838119507], + [-2.006357431411743, 5.626643180847168], + [1.7326194047927856, 1.1459077596664429], + [-4.188055515289307, -0.8716393709182739], + [7.556763648986816, -2.2543530464172363], + [2.9662859439849854, 6.14251708984375], + [0.28974562883377075, -4.404604911804199], + [0.7968102097511292, -0.588954508304596], + [1.995197057723999, -5.889594078063965], + [-2.93401837348938, -1.2383590936660767], + [-0.302837073802948, -0.6156454086303711], + [2.443559408187866, -4.9626030921936035], + [0.7912588119506836, -7.163453102111816], + [-4.999141693115234, 4.131181716918945], + [1.8367308378219604, 4.818045616149902], + [0.6822912096977234, -7.554005146026611], + [0.5386409163475037, -6.216490745544434], + [-0.5167611837387085, -2.7373745441436768], + [0.6376101970672607, -8.916756629943848], + [9.174059867858887, -2.8097681999206543], + [1.1233601570129395, -5.61557674407959], + [0.7749679684638977, -4.480430603027344], + [8.576786994934082, -3.1456139087677], + [2.176910877227783, -4.265033721923828], + [-1.0326752662658691, 10.77226734161377], + [1.186381220817566, -0.21993595361709595], + [-0.07462499290704727, -4.172817230224609], + [1.4087039232254028, -5.455759525299072], + [-3.838982343673706, 1.2657477855682373], + [-1.2438565492630005, 11.470464706420898], + [8.4291410446167, -2.7139575481414795], + [-3.691570997238159, -1.2901006937026978], + [-3.0880722999572754, -0.7111538648605347], + [2.670419216156006, 5.988518238067627], + [8.408735275268555, -2.531261682510376], + [2.24150013923645, 6.406853199005127], + [1.6361157894134521, 0.09746238589286804], + [-1.9129960536956787, 0.6133028268814087], + [-3.650566339492798, 4.170574188232422], + [-4.194335460662842, -2.9312946796417236], + [-1.7995398044586182, 1.8719093799591064], + [-1.9309641122817993, 0.1503635048866272], + [2.1493031978607178, 0.6813182234764099], + [1.995675802230835, 0.8670379519462585], + [3.835526943206787, -3.3424739837646484], + [0.31122660636901855, -4.722846031188965], + [0.7972536087036133, -7.251163482666016], + [-0.7039349675178528, 10.287599563598633], + [-4.410461902618408, -0.6573562622070312], + [2.3209664821624756, -5.023858070373535], + [0.6113151907920837, -8.182233810424805], + [0.4061277508735657, -6.37440824508667], + [-3.940382242202759, 5.218310356140137], + [2.812467336654663, -4.532994747161865], + [-4.576171398162842, -1.9371968507766724], + [-3.7567741870880127, -1.5493013858795166], + [6.210690975189209, -1.705039381980896], + [3.018664598464966, -4.875187873840332], + [0.7295917868614197, -6.831409931182861], + [0.7004286050796509, -7.191385746002197], + [-0.7702558040618896, 10.392486572265625], + [-2.022462844848633, 2.6488375663757324], + [-4.3688788414001465, -4.66862154006958], + [-4.650163650512695, 5.437826633453369], + [-3.985887289047241, -1.3740814924240112], + [-3.4473512172698975, -0.09699106216430664], + [1.456954002380371, 1.4349026679992676], + [0.7645578980445862, -5.204158782958984], + [0.936333954334259, -5.337436676025391], + [9.838659286499023, -2.947688341140747], + [-0.0985083356499672, -3.588271379470825], + [-2.129270315170288, 2.4421606063842773], + [-0.8012590408325195, 10.417867660522461], + [-4.521948337554932, -0.5945043563842773], + [-1.9669556617736816, 1.938699722290039], + [-3.6290507316589355, 5.257137298583984], + [-5.028422832489014, -1.9608665704727173], + [-4.719483375549316, -0.9391500353813171], + [1.3916435241699219, 1.8488640785217285], + [2.7435340881347656, -4.404048919677734], + [1.9693398475646973, 4.731173515319824], + [2.841088056564331, -4.351161956787109], + [1.4933472871780396, 0.17536182701587677], + [-4.187270641326904, 4.770387172698975], + [-0.46337151527404785, -0.5703539252281189], + [0.6779417991638184, -7.613807678222656], + [-0.5505508780479431, 5.44364595413208], + [2.104132652282715, 5.841984748840332], + [-2.7575275897979736, -3.2364754676818848], + [2.2653167247772217, 6.173835754394531], + [3.195233106613159, 6.07268762588501], + [9.284161567687988, -2.9261648654937744], + [7.248557090759277, -2.6504533290863037], + [-4.191668510437012, -0.8924611806869507], + [-2.5672237873077393, -0.7155081033706665], + [0.6016919612884521, -6.80748176574707], + [7.329030513763428, -4.546163082122803], + [8.532013893127441, -2.6946144104003906], + [-1.8961188793182373, 7.37970495223999], + [-4.756681442260742, 4.433061599731445], + [-3.7576186656951904, 4.666071891784668], + [0.5120803713798523, -7.239064693450928], + [-2.0692882537841797, 2.259730100631714], + [0.4286324381828308, -6.563482284545898], + [-3.698356866836548, -1.0616008043289185], + [2.8417160511016846, -4.5756611824035645], + [-1.891516923904419, 1.3848857879638672], + [2.571286201477051, -4.282452583312988], + [-3.7149903774261475, -1.8936821222305298], + [-3.3829705715179443, -0.9391098022460938], + [5.751077175140381, -1.2784165143966675], + [3.323748826980591, 6.146118640899658], + [-4.050166606903076, -1.512107491493225], + [-5.75174617767334, 7.254612922668457], + [-4.359456539154053, -1.3096580505371094], + [5.700497150421143, -1.3472846746444702], + [0.5359172821044922, -7.57606840133667], + [-1.3633977174758911, 11.84749984741211], + [-2.2403476238250732, -1.2552536725997925], + [0.8911744952201843, -7.550176620483398], + [-1.4423084259033203, 12.271001815795898], + [0.2529505491256714, -5.972160339355469], + [2.0237233638763428, -3.4788339138031006], + [-0.6834723353385925, 10.261882781982422], + [-0.6223328113555908, 8.35619831085205], + [1.0597796440124512, -5.471141338348389], + [0.7445222735404968, -5.627988338470459], + [-1.5279825925827026, 1.7202917337417603], + [0.9796217083930969, -7.571399211883545], + [8.474444389343262, -3.3158392906188965], + [-3.2008283138275146, 3.708305597305298], + [7.8862996101379395, -2.5231032371520996], + [1.343316912651062, -3.625845193862915], + [8.166723251342773, -2.849040985107422], + [2.85221266746521, -3.315962314605713], + [-3.6704049110412598, -1.1997854709625244], + [-1.9419806003570557, 0.010343309491872787], + [-1.239075779914856, 10.991963386535645], + [-1.5158134698867798, 12.776744842529297], + [0.4300295114517212, 4.309663772583008], + [0.9065125584602356, -5.173399448394775], + [-3.725965738296509, -1.577478051185608], + [-1.0117626190185547, 10.7115478515625], + [4.546545505523682, 7.703981876373291], + [-0.4319301247596741, -2.198664426803589], + [2.169407606124878, -5.34480094909668], + [-3.6659305095672607, 4.789360046386719], + [-3.590740442276001, -0.06636470556259155], + [0.39926832914352417, -6.093122482299805], + [0.627143144607544, -6.745965957641602], + [-0.0008454397320747375, -3.937981367111206], + [0.6929927468299866, -8.003819465637207], + [-0.8686099648475647, 1.3002921342849731], + [5.569171905517578, -5.447513103485107], + [1.4888231754302979, 5.778352737426758], + [-1.4013516902923584, 11.749387741088867], + [1.8296427726745605, 4.125157833099365], + [-1.1861095428466797, 1.5198832750320435], + [-3.508955240249634, -1.756673812866211], + [0.545880913734436, -5.214104652404785], + [-4.9180803298950195, -0.8633682727813721], + [-2.416245698928833, 5.722712516784668], + [-2.0186312198638916, 2.242535352706909], + [-4.526742458343506, 6.370598793029785], + [-5.193389892578125, -4.987114906311035], + [-0.6571510434150696, -1.4314249753952026], + [-0.8007940649986267, 1.1650302410125732], + [0.19238561391830444, -5.1580352783203125], + [-5.0081706047058105, -1.2053769826889038], + [0.8275294899940491, -0.4322652220726013], + [-3.7435286045074463, 4.855021953582764], + [-3.984546661376953, -4.057898044586182], + [0.5730828642845154, -7.32993221282959], + [-3.2878053188323975, 5.593181610107422], + [0.35038745403289795, -6.385818958282471], + [1.5442140102386475, 2.662701368331909], + [-5.388309478759766, 7.714756011962891], + [0.3319090008735657, -7.265471935272217], + [-1.0428317785263062, 10.317434310913086], + [2.8339030742645264, -4.704060077667236], + [0.509583055973053, -5.217514991760254], + [0.4710536003112793, -4.29404354095459], + [2.689074754714966, -4.428691864013672], + [0.610710620880127, -7.635985374450684], + [-1.7526079416275024, 1.6765663623809814], + [-0.5695490837097168, -0.7300753593444824], + [4.723775863647461, 7.544564247131348], + [-3.2151296138763428, 6.219490051269531], + [0.6429266333580017, -6.483868598937988], + [5.741230487823486, -1.2833913564682007], + [-2.8747317790985107, -2.096386671066284], + [-3.4261109828948975, -2.135101795196533], + [6.04925012588501, -3.7102012634277344], + [-3.8855903148651123, -1.542527198791504], + [1.347635269165039, -4.229097366333008], + [-1.7730636596679688, 0.820258617401123], + [2.545306921005249, -5.163692474365234], + [0.048074059188365936, 7.7097392082214355], + [8.67577838897705, -2.556946039199829], + [1.3878573179244995, 1.7790063619613647], + [-3.738481283187866, 1.2444511651992798], + [-0.1656225025653839, -1.6727509498596191], + [-0.2940402626991272, 9.784104347229004], + [-3.689175844192505, -1.5935629606246948], + [-5.251485347747803, -0.7249183058738708], + [-2.0164170265197754, 0.23342663049697876], + [-4.12025785446167, -1.5778086185455322], + [6.9682183265686035, -2.1410725116729736], + [0.7256763577461243, 4.742672443389893], + [-1.7949750423431396, 5.4926605224609375], + [-3.6003987789154053, -3.9315168857574463], + [-1.3987994194030762, 11.78657341003418], + [-1.7018600702285767, -0.9234486818313599], + [-3.3641273975372314, 5.073202133178711], + [5.9315714836120605, -4.582324981689453], + [-4.762801647186279, 7.499291896820068], + [-0.6639646887779236, 9.944625854492188], + [0.6108306050300598, 2.57731556892395], + [3.8306305408477783, 6.454634189605713], + [-3.950810194015503, 6.065789699554443], + [0.22859740257263184, 5.937686920166016], + [-0.5210498571395874, 9.772001266479492], + [0.6314678192138672, -0.6575027108192444], + [1.2988457679748535, -5.338216304779053], + [-0.7245202660560608, -0.8815776705741882], + [5.357468128204346, 8.431303024291992], + [1.5512199401855469, -5.3950934410095215], + [-1.7547566890716553, 1.3781068325042725], + [-4.057711601257324, -1.3532201051712036], + [2.612318277359009, 6.019083023071289], + [0.5550385117530823, -5.292245388031006], + [1.0077459812164307, -5.910213470458984], + [-1.866532564163208, 1.2842601537704468], + [-4.289595127105713, 5.968742847442627], + [2.0262954235076904, 0.2816748023033142], + [-3.3383586406707764, -1.3138549327850342], + [0.5949390530586243, -8.271785736083984], + [2.560551881790161, 5.430785179138184], + [-1.771007776260376, 1.429542064666748], + [-2.8193719387054443, 5.424258232116699], + [3.8875279426574707, 7.243124961853027], + [-3.215207815170288, -0.6617863178253174], + [7.205311298370361, -2.0231635570526123], + [-1.5228852033615112, 12.602278709411621], + [-2.730269193649292, 2.9008376598358154], + [0.48867267370224, -4.859334945678711], + [2.0519399642944336, 5.788938045501709], + [-4.353937149047852, 6.19730281829834], + [-2.3903677463531494, 6.099447250366211], + [-1.1193064451217651, 11.41889762878418], + [-1.7537686824798584, 0.37487679719924927], + [2.7154414653778076, -5.098801136016846], + [6.0044145584106445, -0.6736499667167664], + [-0.41666609048843384, 8.013404846191406], + [-3.2444775104522705, -1.3741198778152466], + [4.6896138191223145, -3.6839439868927], + [-1.6423110961914062, 12.822896003723145], + [-4.646668910980225, 5.409663200378418], + [-5.265772342681885, -5.274047374725342], + [1.106832504272461, 5.75873327255249], + [4.315505504608154, 7.413866996765137], + [-1.0360443592071533, -2.3088929653167725], + [0.21619415283203125, -5.366696357727051], + [8.612980842590332, -2.793874979019165], + [2.674255132675171, -4.258867263793945], + [3.1654698848724365, 6.57818603515625], + [2.4466190338134766, 6.099142074584961], + [2.1742844581604004, 4.837902069091797], + [-2.166918992996216, -0.7987546920776367], + [-1.15635347366333, 10.195501327514648], + [5.293054103851318, -1.0969411134719849], + [-5.831976890563965, 8.041305541992188], + [-1.1434595584869385, 10.805719375610352], + [2.5577051639556885, -4.390594482421875], + [-3.4782512187957764, -2.0987324714660645], + [-2.313509225845337, -3.596734046936035], + [-5.3054070472717285, 7.335067272186279], + [-2.4217379093170166, -1.3792306184768677], + [-4.727893352508545, -1.0429614782333374], + [-1.8897912502288818, 1.8105382919311523], + [2.656637191772461, -4.824946403503418], + [-2.011178731918335, 2.2134830951690674], + [-3.9296984672546387, -2.5600979328155518], + [0.6241843700408936, -6.8783063888549805], + [-0.4964541792869568, 9.442035675048828], + [-1.616063117980957, 3.196009874343872], + [-4.523435592651367, 6.795111179351807], + [2.3420848846435547, -4.691405296325684], + [2.5599663257598877, -4.278036117553711], + [-1.2960013151168823, 11.407703399658203], + [-2.649240493774414, 0.2394883632659912], + [1.049302101135254, -5.523130416870117], + [6.62250280380249, -3.5760557651519775], + [2.000321865081787, -4.9265007972717285], + [-3.5878360271453857, -1.172615647315979], + [-3.4011032581329346, 5.114903926849365], + [0.24552303552627563, -5.540589809417725], + [-4.968775272369385, 5.860474109649658], + [-4.726144790649414, 6.487892150878906], + [-1.397542119026184, 1.600719928741455], + [2.9627063274383545, -5.007323265075684], + [-3.9698984622955322, -2.043837547302246], + [6.960460186004639, -2.60981822013855], + [-2.006183624267578, 2.2170522212982178], + [-4.250472068786621, -0.3017125725746155], + [-3.6211347579956055, 4.1418538093566895], + [-1.3562524318695068, 1.0765128135681152], + [-2.941490888595581, -1.0690630674362183], + [-3.9197938442230225, -2.225022554397583], + [-1.526691198348999, 10.137659072875977], + [-1.4674303531646729, 12.208951950073242], + [-1.8197729587554932, 0.9922749996185303], + [-2.078054428100586, -1.830146312713623], + [-3.558701276779175, -1.5114986896514893], + [-0.08905864506959915, -5.081856727600098], + [-4.076266288757324, 2.975327253341675], + [2.5903732776641846, -4.420414447784424], + [3.486034631729126, -3.496086597442627], + [-3.701319694519043, -1.1079589128494263], + [-4.986170768737793, -4.358067989349365], + [1.590000033378601, 0.0011896751821041107], + [-4.300013065338135, -0.7057297229766846], + [-4.4884419441223145, -3.471818208694458], + [-4.665750026702881, -0.438015341758728], + [-4.926058292388916, -1.6306099891662598], + [-1.7257859706878662, 13.541927337646484], + [2.542663335800171, 5.933712005615234], + [-4.073023796081543, 0.03573840484023094], + [-4.36777925491333, -4.046566009521484], + [-1.1019738912582397, 10.025254249572754], + [-4.299882411956787, 4.59449577331543], + [-3.3812811374664307, -1.9754483699798584], + [1.2981386184692383, 1.4675755500793457], + [-3.380326509475708, -0.7603936791419983], + [-3.49413800239563, 4.702393531799316], + [-3.5234453678131104, -1.4177669286727905], + [-1.1985162496566772, 11.31982421875], + [1.9269275665283203, -4.63640022277832], + [2.0263984203338623, 3.0678763389587402], + [1.3447386026382446, 4.806356906890869], + [0.42989295721054077, -5.372622013092041], + [-1.9676774740219116, 2.4854259490966797], + [8.29726791381836, -3.366076946258545], + [0.24142098426818848, 4.719539165496826], + [-3.673784017562866, 5.699315071105957], + [0.3079874515533447, 0.43861836194992065], + [2.717430353164673, -4.9619460105896], + [2.8629133701324463, 5.821094512939453], + [2.807936429977417, -4.592963218688965], + [-2.5990092754364014, 6.458975315093994], + [6.974285125732422, -1.959779977798462], + [2.0684754848480225, 3.635220766067505], + [-0.5348067879676819, -0.24964316189289093], + [0.3867403268814087, -5.454925537109375], + [2.4708683490753174, 5.228548049926758], + [0.8908150792121887, -5.755716800689697], + [-0.02846021205186844, -3.878730297088623], + [-1.405471682548523, 12.117971420288086], + [0.19700133800506592, -3.3631227016448975], + [2.6405746936798096, -3.70709490776062], + [-2.12785267829895, -0.8065685033798218], + [-5.108749866485596, -1.0694926977157593], + [0.2595357894897461, -5.843674182891846], + [-1.0644516944885254, 11.18663215637207], + [-0.4455220699310303, 9.445491790771484], + [0.4997950792312622, -0.6392961740493774], + [9.643295288085938, -2.9994559288024902], + [7.560953140258789, -3.115929365158081], + [2.64306640625, -4.417257785797119], + [7.213133811950684, -2.263105630874634], + [-5.055647373199463, 6.387681484222412], + [-3.6382157802581787, -1.8039201498031616], + [10.134523391723633, -3.024477005004883], + [-0.46599090099334717, -3.5741899013519287], + [-3.9500837326049805, -1.32135009765625], + [6.1203789710998535, -3.206883668899536], + [-4.567792892456055, -0.8954342603683472], + [-4.491283416748047, 5.449217796325684], + [2.662278413772583, 4.663521766662598], + [8.858329772949219, -2.7284514904022217], + [0.24371099472045898, -6.218513011932373], + [-0.4880569577217102, 10.047659873962402], + [-4.469813346862793, 3.7518746852874756], + [0.6633856892585754, -4.181880950927734], + [-4.5094828605651855, -3.254197359085083], + [-0.978455126285553, 11.042821884155273], + [4.40216588973999, 7.4703874588012695], + [5.775623798370361, 8.721017837524414], + [-2.4294209480285645, 4.422976016998291], + [-0.4725940227508545, 9.497370719909668], + [0.6539027094841003, -4.5998406410217285], + [-4.150086879730225, 4.747372150421143], + [1.0037972927093506, -6.291989326477051], + [2.3077445030212402, -4.671000957489014], + [6.394369602203369, -4.7543487548828125], + [-0.8345028758049011, 10.551399230957031], + [-4.503340721130371, -1.494951605796814], + [-1.4787318706512451, 12.472519874572754], + [1.7087496519088745, 0.17620834708213806], + [2.4688303470611572, -5.240187644958496], + [-1.3001558780670166, 0.16209420561790466], + [2.160573720932007, 6.301502704620361], + [1.974869728088379, 0.5653782486915588], + [1.8988773822784424, 4.911399841308594], + [1.439112901687622, -5.032963752746582], + [2.4551823139190674, 3.886591672897339], + [0.6746500134468079, -8.026678085327148], + [4.589808940887451, 7.575730323791504], + [2.2455201148986816, 0.7178348302841187], + [-1.4268370866775513, 12.242703437805176], + [7.997307300567627, -2.50636887550354], + [-1.5626996755599976, 5.611241340637207], + [0.41908639669418335, -0.08885285258293152], + [-1.304134488105774, 11.861540794372559], + [0.9566085934638977, 6.8765869140625], + [-1.188724160194397, 10.836397171020508], + [1.653261423110962, -3.556328058242798], + [-1.8237581253051758, 0.6811011433601379], + [-1.1571598052978516, 10.792667388916016], + [-3.7170262336730957, -1.6017714738845825], + [-0.027031727135181427, -4.743305683135986], + [2.990553617477417, -4.815770149230957], + [0.2539415955543518, 4.960646629333496], + [-1.3391449451446533, 11.444133758544922], + [-2.101862668991089, -1.1588846445083618], + [1.9353446960449219, -6.81272029876709], + [0.6053403615951538, -7.042575836181641], + [0.045747511088848114, -5.799074172973633], + [6.008724212646484, -3.4840285778045654], + [2.6225597858428955, 4.733777046203613], + [-1.0278979539871216, -0.6226451992988586], + [-3.5504918098449707, -1.3390491008758545], + [0.08089440315961838, -4.5429840087890625], + [-5.753524303436279, 7.502010822296143], + [-0.4680188298225403, 7.973335266113281], + [-1.3654524087905884, 11.629310607910156], + [-4.187136173248291, -2.9918057918548584], + [0.7623206377029419, -0.8206879496574402], + [-0.05484398454427719, -2.1590707302093506], + [-3.5177929401397705, -1.5043388605117798], + [-3.444448947906494, 7.0167236328125], + [-3.5418522357940674, -2.4785232543945312], + [1.1663258075714111, 0.025839772075414658], + [-4.071911811828613, -1.6240113973617554], + [-0.5786229372024536, 9.635272979736328], + [-1.4580600261688232, 1.9104650020599365], + [2.791064500808716, -4.75762939453125], + [5.244237422943115, -4.330008029937744], + [-3.9504194259643555, -1.6884530782699585], + [-0.5374086499214172, -1.7987571954727173], + [0.4797133207321167, -5.341348648071289], + [2.3256850242614746, 6.111634254455566], + [2.873375654220581, -4.518718719482422], + [3.592510938644409, 6.452852249145508], + [-3.5853145122528076, 5.555352210998535], + [1.3391746282577515, -5.549553871154785], + [-1.8109182119369507, 5.714018821716309], + [-3.925118923187256, -2.340078353881836], + [-3.7465832233428955, -2.186483860015869], + [1.7325921058654785, 4.03732967376709], + [-3.268735647201538, -2.2747397422790527], + [0.8878293633460999, 6.647603988647461], + [1.5285632610321045, -4.614300727844238], + [-5.098144054412842, 6.7014546394348145], + [-5.346852779388428, 2.7733380794525146], + [7.061676979064941, -1.8585487604141235], + [-3.2561283111572266, -1.096148133277893], + [-1.5044260025024414, 2.11729097366333], + [-1.9798851013183594, 2.3366823196411133], + [2.7960784435272217, -4.458684921264648], + [-1.744074821472168, 0.7172641754150391], + [0.24677947163581848, -5.101335525512695], + [-5.243658542633057, -4.561326503753662], + [-0.05659408122301102, 8.131866455078125], + [-4.6736931800842285, -5.4336771965026855], + [-2.9583799839019775, 3.3064825534820557], + [2.424670457839966, -4.780533313751221], + [-5.9213948249816895, -0.9544082880020142], + [-1.4549853801727295, 12.324281692504883], + [3.0854575634002686, -5.4292473793029785], + [0.36671167612075806, -0.6194463968276978], + [2.8998806476593018, 0.7596081495285034], + [-5.0611891746521, 6.070711135864258], + [1.4155875444412231, -5.536027908325195], + [-4.334380149841309, -0.7749215364456177], + [-2.0681488513946533, 1.05647611618042], + [-4.2426066398620605, 5.522761344909668], + [1.6097357273101807, -4.19500732421875], + [0.7308763861656189, -4.160010814666748], + [-0.5866389870643616, -0.8070081472396851], + [7.755892276763916, -3.6419973373413086], + [-4.928336143493652, -0.04363322630524635], + [0.5952492952346802, -7.052957534790039], + [-3.2376863956451416, -2.689718008041382], + [-3.683011770248413, -1.3152728080749512], + [0.3125459551811218, -6.754295349121094], + [-3.8659722805023193, -2.023484706878662], + [0.5359013676643372, -0.8575756549835205], + [-3.9064929485321045, -1.897141456604004], + [-4.186361789703369, -1.3275965452194214], + [-0.6787459850311279, 0.8144311904907227], + [0.5868481993675232, -7.967913627624512], + [-1.9250850677490234, -1.0035476684570312], + [-1.614668369293213, 0.3327379822731018], + [-3.062272787094116, -0.7445446252822876], + [0.6720206141471863, -7.952840805053711], + [-1.4569180011749268, 12.518009185791016], + [-0.5253274440765381, -1.2353330850601196], + [-3.8098134994506836, 7.01537561416626], + [7.851101398468018, -2.7420456409454346], + [2.1332907676696777, 5.965720176696777], + [0.8134285807609558, -5.081638336181641], + [7.03604793548584, -2.417555809020996], + [0.369232177734375, -5.512598037719727], + [-3.429856061935425, -1.6781002283096313], + [-3.422959804534912, 5.762711524963379], + [2.8897457122802734, -4.66843318939209], + [3.009798526763916, -4.414815902709961], + [-3.809823751449585, -2.6640093326568604], + [0.8659687042236328, -5.487405300140381], + [0.30420124530792236, 6.977713584899902], + [0.7853425145149231, -4.234124183654785], + [0.7213558554649353, -0.7326747179031372], + [-0.8179171681404114, 10.48436164855957], + [-0.9474748969078064, 10.793142318725586], + [1.0846611261367798, -5.914294242858887], + [-3.1834304332733154, -1.1333805322647095], + [-4.711520195007324, -0.9770476818084717], + [0.4812493324279785, -7.546355724334717], + [0.4231308698654175, -6.997754096984863], + [-0.8344276547431946, 9.85957145690918], + [-2.4363553524017334, -2.0105783939361572], + [7.132107257843018, -3.5875558853149414], + [-3.774460554122925, 5.943953514099121], + [-4.417789459228516, -3.246497869491577], + [-1.6703765392303467, 0.6442002058029175], + [3.7385826110839844, 7.029924392700195], + [1.0156296491622925, -5.230266571044922], + [9.646382331848145, -2.993927001953125], + [-2.5775067806243896, 2.840027093887329], + [-6.012336254119873, 5.069972991943359], + [-4.178433418273926, 6.182031631469727], + [-3.267791986465454, -0.9670706391334534], + [-3.8477773666381836, -3.8331289291381836], + [2.737123727798462, -4.260209083557129], + [-4.307392597198486, -2.827224016189575], + [0.8758950233459473, -0.3841133713722229], + [0.6411809921264648, -7.78716516494751], + [4.41370964050293, -6.317232131958008], + [-3.389785051345825, 3.775022268295288], + [6.793813705444336, -1.812916874885559], + [7.92588472366333, -2.278071403503418], + [-3.916888475418091, -2.0395853519439697], + [2.77699613571167, -4.402759075164795], + [2.8762104511260986, -4.692472457885742], + [0.8471612930297852, -5.986555576324463], + [-1.2950645685195923, 11.566969871520996], + [2.7923367023468018, -4.345219135284424], + [7.204441547393799, -3.6910085678100586], + [9.134533882141113, -2.7808315753936768], + [-1.1224873065948486, -3.459254264831543], + [-0.682939887046814, -2.700798749923706], + [2.9486618041992188, -4.797317028045654], + [-0.9502520561218262, -0.607283353805542], + [-0.7500839233398438, 10.165266990661621], + [-0.19362473487854004, -2.325296640396118], + [7.58428430557251, -2.596667528152466], + [-3.357928991317749, -1.28536856174469], + [7.674354076385498, -2.5548741817474365], + [0.5713085532188416, 7.210545539855957], + [9.03378963470459, -2.70576548576355], + [0.434323787689209, 5.410109519958496], + [-4.646447658538818, 0.17585331201553345], + [-3.3849165439605713, -1.5000274181365967], + [-1.9443696737289429, 2.5596108436584473], + [-4.752378463745117, -2.050405502319336], + [-0.18164938688278198, -3.7241342067718506], + [-5.220132827758789, 6.90744161605835], + [-0.12304619699716568, -2.3053557872772217], + [-2.93866229057312, -2.501514196395874], + [0.7246050238609314, -9.061910629272461], + [5.596545696258545, -1.3626446723937988], + [-3.8029019832611084, -1.5932153463363647], + [-1.1871740818023682, -2.524275064468384], + [-3.0207433700561523, -2.0936825275421143], + [-0.33164674043655396, 8.619656562805176], + [2.6705150604248047, -3.9895951747894287], + [-1.2254226207733154, 11.53988265991211], + [2.126234769821167, 4.4577107429504395], + [-3.7050983905792236, -0.852727472782135], + [6.961227893829346, -3.7121469974517822], + [8.428874015808105, -2.6564910411834717], + [-1.8066211938858032, 0.8007439374923706], + [-4.949215888977051, 0.49247586727142334], + [-3.888873815536499, -3.6944377422332764], + [0.8490881323814392, -8.603562355041504], + [2.793827533721924, -5.002452373504639], + [-5.27716064453125, -4.127409934997559], + [1.7901384830474854, -4.130429267883301], + [3.4462814331054688, 7.130317211151123], + [-5.625795841217041, 5.265362739562988], + [-3.541372299194336, -0.7493885159492493], + [-0.615696132183075, -3.095268487930298], + [4.745229244232178, 7.699288368225098], + [7.279148578643799, -1.9997353553771973], + [-1.0009843111038208, -0.6527724266052246], + [-1.6866402626037598, 2.4184529781341553], + [-1.162034511566162, 0.9782434701919556], + [6.407852649688721, -2.373345375061035], + [-1.7851712703704834, 1.3379305601119995], + [1.5782698392868042, -7.330406188964844], + [0.4882815480232239, -6.8867716789245605], + [-2.4669716358184814, -1.1941847801208496], + [-0.8713359236717224, 10.088623046875], + [-1.9796733856201172, 2.40952730178833], + [2.8292152881622314, 5.322890281677246], + [-5.212460994720459, 4.108964920043945], + [-0.15239930152893066, -1.138452410697937], + [-0.17835059762001038, -1.8397493362426758], + [0.7260975241661072, -5.55908203125], + [4.632478713989258, 7.562737464904785], + [-2.171776056289673, -1.8432763814926147], + [0.49195045232772827, -6.824483871459961], + [3.1789867877960205, 6.296056270599365], + [9.074634552001953, -2.7800776958465576], + [2.980217695236206, -5.265707969665527], + [0.647996723651886, -7.154210567474365], + [-0.6799418330192566, 10.751619338989258], + [0.6729633808135986, -7.582812786102295], + [1.698825716972351, 4.5467729568481445], + [-5.108973979949951, 5.834273338317871], + [8.635385513305664, -2.7561686038970947], + [1.177340030670166, -6.378703594207764], + [-1.2730743885040283, 10.43356990814209], + [-3.596804618835449, -1.6916334629058838], + [0.6726362705230713, -0.3926565647125244], + [8.763888359069824, -2.8109683990478516], + [7.942538738250732, -3.3306467533111572], + [7.996213436126709, -2.53082275390625], + [0.6284374594688416, -7.887432098388672], + [7.880117416381836, -2.3087522983551025], + [-4.069879055023193, -1.214002013206482], + [-1.94427490234375, 2.5173027515411377], + [-0.6984933018684387, -0.18441754579544067], + [-1.464468240737915, -0.7821895480155945], + [8.133404731750488, -3.079765558242798], + [0.6078063249588013, -8.30173110961914], + [-1.0714514255523682, 10.991327285766602], + [-1.2707463502883911, 1.2834504842758179], + [-1.45344877243042, 12.181461334228516], + [8.76223087310791, -2.567065715789795], + [0.26016148924827576, -4.374274253845215], + [-2.9942550659179688, -0.11306005716323853], + [5.985507488250732, -4.508374214172363], + [5.831689357757568, -1.3251961469650269], + [-4.397549152374268, 4.560942649841309], + [-1.3526926040649414, 1.4745994806289673], + [0.35433119535446167, -6.847123146057129], + [-0.0492141917347908, 8.597128868103027], + [3.0300042629241943, 6.009808540344238], + [-0.9120323657989502, 1.1627081632614136], + [0.5206072926521301, -5.738117218017578], + [4.356001377105713, 7.441247940063477], + [9.363530158996582, -2.7941854000091553], + [-2.397084951400757, -3.903818130493164], + [-3.33744740486145, -2.283651113510132], + [-3.9802684783935547, -1.8600375652313232], + [-4.486019611358643, -4.019331932067871], + [2.408975839614868, 5.429207801818848], + [-3.2835659980773926, -1.2670170068740845], + [-0.5706143379211426, 10.112695693969727], + [-0.6097738146781921, 8.738348960876465], + [0.3955090641975403, -6.970762252807617], + [-1.7351518869400024, 1.3574427366256714], + [0.6525295376777649, -4.91524600982666], + [0.3923354744911194, -6.776862144470215], + [1.6299858093261719, -6.958044052124023], + [-4.50057315826416, 4.165329933166504], + [-4.13707971572876, -1.5399284362792969], + [-3.6200854778289795, -1.3284518718719482], + [-1.9071414470672607, 1.6499865055084229], + [0.3628549575805664, -6.712860107421875], + [8.314130783081055, -2.6349308490753174], + [6.760842800140381, -3.712010622024536], + [3.510823965072632, 6.65654993057251], + [-2.0896878242492676, 1.550437331199646], + [3.4024856090545654, -0.8009506464004517], + [2.3483922481536865, 5.8189616203308105], + [2.3750076293945312, 5.135949611663818], + [-0.836671769618988, -1.8959225416183472], + [1.387040615081787, 3.669574022293091], + [0.38797712326049805, -3.6559717655181885], + [-1.1410077810287476, 5.156581878662109], + [-0.41831278800964355, 9.76085090637207], + [-1.7171106338500977, 1.3201202154159546], + [-4.331704616546631, 5.460538864135742], + [3.081195116043091, 6.9268903732299805], + [-1.9056079387664795, 5.691409111022949], + [-0.8312879204750061, 10.627948760986328], + [2.918088912963867, -4.969950199127197], + [-1.5805414915084839, 0.714451789855957], + [-2.0959622859954834, -2.6336827278137207], + [1.675330400466919, 5.1211113929748535], + [1.58466637134552, 1.8696647882461548], + [-1.9692858457565308, 1.5831114053726196], + [-4.881843566894531, 4.252096652984619], + [-3.222423791885376, 5.244453430175781], + [-3.3382532596588135, -0.7458670139312744], + [2.7445414066314697, -4.557346343994141], + [-0.05640537291765213, 7.808511734008789], + [0.5694039463996887, -7.361435413360596], + [-1.164628028869629, 11.156698226928711], + [-2.4835705757141113, -0.9928710460662842], + [4.733042240142822, 7.435265064239502], + [-1.4156244993209839, 1.639622449874878], + [1.7203127145767212, -3.9203531742095947], + [-0.23806452751159668, -1.1882872581481934], + [-1.5146600008010864, -0.7849202752113342], + [2.9331610202789307, -4.706270217895508], + [-4.358912467956543, 6.753216743469238], + [-1.1822043657302856, 11.204217910766602], + [5.664432525634766, -4.92564582824707], + [-3.5857744216918945, -1.5609866380691528], + [-4.148355960845947, 5.7031965255737305], + [-3.9908974170684814, -2.859264612197876], + [-0.5907335877418518, 8.96436595916748], + [-0.642131507396698, 9.74426555633545], + [-3.1133346557617188, -1.554241418838501], + [0.6893795728683472, -6.110754489898682], + [-0.8296549916267395, 10.21732234954834], + [2.8866188526153564, -4.979732036590576], + [0.49132925271987915, 7.496786117553711], + [5.937157154083252, -1.262865662574768], + [0.33870047330856323, 4.9066643714904785], + [6.324090480804443, -1.8554333448410034], + [-4.547018051147461, -1.5540831089019775], + [0.4973021149635315, -6.943698883056641], + [-3.4896578788757324, -2.306476593017578], + [2.1482834815979004, 0.6131798624992371], + [2.7943692207336426, -4.744070529937744], + [-3.0052947998046875, -1.4173249006271362], + [-0.20780742168426514, 7.5376176834106445], + [-1.895951271057129, 0.5330877900123596], + [0.439827561378479, -6.431835651397705], + [2.9135990142822266, -4.6949944496154785], + [-0.9670990705490112, -1.5137325525283813], + [-4.4365153312683105, -3.4698517322540283], + [0.8995253443717957, -0.29336535930633545], + [1.35575270652771, 4.735282897949219], + [-0.6764490008354187, -0.7077530026435852], + [-3.33001971244812, -2.0484092235565186], + [-0.16895940899848938, -2.646468162536621], + [-3.5723774433135986, -1.025847315788269], + [3.5597188472747803, 7.077727317810059], + [-2.022287130355835, 0.9695461988449097], + [0.4653323292732239, -0.7236348986625671], + [0.02719997614622116, 6.412795066833496], + [10.522815704345703, -3.1608314514160156], + [-1.3521432876586914, 1.3883792161941528], + [4.555720806121826, -1.0885649919509888], + [-0.701740562915802, 10.121891975402832], + [0.30729538202285767, 5.343681335449219], + [-3.0709030628204346, -0.6708071231842041], + [0.73110431432724, -9.497270584106445], + [0.5317539572715759, -0.47379958629608154], + [6.602484226226807, -5.439589023590088], + [1.64823579788208, 5.314192771911621], + [-0.8408632278442383, 9.080527305603027], + [0.5075464844703674, -6.040955066680908], + [0.6195067763328552, -7.59089469909668], + [2.952619791030884, -4.975564002990723], + [-1.915796160697937, 1.9216943979263306], + [-4.003748416900635, -1.8617628812789917], + [0.404898464679718, -6.335877895355225], + [-3.9678080081939697, -2.1874477863311768], + [2.8267648220062256, -4.903863430023193], + [7.567293167114258, -2.290715217590332], + [-4.3526411056518555, 6.054569721221924], + [0.8218287825584412, -7.162946701049805], + [8.147475242614746, -2.834716796875], + [-0.4457606077194214, 9.591960906982422], + [2.8454763889312744, -4.635219573974609], + [-3.506089925765991, -1.3762990236282349], + [9.096447944641113, -2.7308874130249023], + [-3.8366754055023193, -2.0700089931488037], + [1.4606544971466064, -4.998267650604248], + [-1.0270888805389404, 10.517868041992188], + [-1.6692373752593994, 0.2402248978614807], + [-2.1332051753997803, 0.4824977517127991], + [2.645233631134033, 4.547948360443115], + [-3.5095579624176025, -1.5425206422805786], + [-5.173073768615723, -1.4874876737594604], + [4.503891944885254, 7.630708694458008], + [-1.1261296272277832, 0.8637923002243042], + [-3.296156406402588, -1.8749650716781616], + [2.7618651390075684, -4.721475601196289], + [0.5885263085365295, -8.436361312866211], + [-0.8583433032035828, 10.724020004272461], + [-3.5205957889556885, 5.524641036987305], + [-5.1324849128723145, 6.973768711090088], + [-1.5424498319625854, -3.18432879447937], + [-0.09315863996744156, -4.092884063720703], + [-2.00439715385437, 2.023728609085083], + [3.225358724594116, -4.981593608856201], + [2.5679945945739746, -4.1587443351745605], + [-5.350565433502197, 6.2930006980896], + [-0.25318804383277893, -1.3583639860153198], + [-1.5981495380401611, 1.9982024431228638], + [2.7179269790649414, -4.82266902923584], + [-0.4518941044807434, -1.0008808374404907], + [-3.5403435230255127, -0.8650642037391663], + [-1.5610125064849854, -1.048643708229065], + [1.792677402496338, 2.8281562328338623], + [-3.3797152042388916, -2.90765118598938], + [-0.996886670589447, 9.642305374145508], + [-1.9157761335372925, 0.8058735132217407], + [1.7665952444076538, -4.748190402984619], + [2.8101730346679688, -4.705899715423584], + [-1.7614306211471558, 0.7959723472595215], + [-5.0431132316589355, -4.239562511444092], + [-4.012206554412842, -0.8911871910095215], + [2.9402916431427, 5.927002906799316], + [1.499643325805664, -5.480426788330078], + [-0.8305791020393372, 10.285788536071777], + [-5.629322052001953, 7.700685501098633], + [1.4869482517242432, 1.548032283782959], + [1.7844603061676025, -4.756851673126221], + [0.9103876948356628, -5.489248275756836], + [-1.3757250308990479, 1.8151365518569946], + [8.006633758544922, -2.4284427165985107], + [-0.45739829540252686, -1.0983339548110962], + [2.7553746700286865, -4.6290178298950195], + [-3.6895220279693604, -1.3087522983551025], + [-4.697263240814209, -3.345346689224243], + [2.6457369327545166, -4.375882625579834], + [1.9328632354736328, 4.220584869384766], + [2.2131612300872803, 5.955874919891357], + [0.19645044207572937, -5.180882453918457], + [7.076794624328613, -4.348546981811523], + [-3.869232416152954, -2.659788131713867], + [2.0821731090545654, -4.20723819732666], + [0.6920502781867981, -4.6045732498168945], + [-3.832263231277466, -0.20366984605789185], + [-2.6615304946899414, 0.22572994232177734], + [-1.2450417280197144, 11.092578887939453], + [-0.05638457089662552, 8.10271167755127], + [8.897393226623535, -2.906778573989868], + [0.2363581359386444, -2.8416645526885986], + [-3.024047374725342, 4.862063884735107], + [-4.528049468994141, -0.6008310914039612], + [-3.277435064315796, -1.0557903051376343], + [-6.004446506500244, -1.0758461952209473], + [-2.9790141582489014, -2.94773268699646], + [1.9507062435150146, -4.479461669921875], + [1.1761772632598877, 0.002271156758069992], + [0.7421571612358093, -8.618544578552246], + [2.885394334793091, -4.915592193603516], + [1.0201938152313232, -4.965030670166016], + [-1.7234256267547607, 1.085280418395996], + [-3.604365348815918, 5.785520076751709], + [-2.943619966506958, 6.615048885345459], + [1.9164522886276245, 0.6677438616752625], + [2.3118629455566406, -4.64860200881958], + [0.7398721575737, -8.361865997314453], + [2.29386305809021, -4.599026679992676], + [-3.3182313442230225, -1.0093494653701782], + [0.7075744867324829, -8.85268497467041], + [1.0233505964279175, -0.531444787979126], + [7.452106952667236, -2.1142055988311768], + [-1.0444988012313843, 11.008682250976562], + [-3.8797404766082764, 4.724054336547852], + [1.5738710165023804, 3.3873021602630615], + [6.223503589630127, -2.5071229934692383], + [-0.45408740639686584, -0.7436069250106812], + [0.40846502780914307, -6.57507848739624], + [-3.1160895824432373, 0.014221306890249252], + [6.920634746551514, -3.889725685119629], + [0.31841254234313965, -5.940670967102051], + [0.6276518106460571, -8.656457901000977], + [1.5476770401000977, 5.657113075256348], + [0.3404833972454071, -4.714905738830566], + [0.9837005734443665, -7.118387699127197], + [-2.1953787803649902, 2.2146172523498535], + [2.6019294261932373, -4.471887111663818], + [2.5000522136688232, -4.138195991516113], + [-3.9797749519348145, -1.4032284021377563], + [-0.8063125014305115, 10.576154708862305], + [4.762978553771973, 7.679263114929199], + [1.8336105346679688, 0.21471726894378662], + [7.938710689544678, -2.372736692428589], + [-1.839557409286499, -0.008035007864236832], + [-1.2659000158309937, 11.380135536193848], + [-3.2805304527282715, -1.6772741079330444], + [0.13708031177520752, -5.730783939361572], + [0.7613971829414368, -6.761222839355469], + [2.7933437824249268, -4.161629676818848], + [-4.51929235458374, -1.1100977659225464], + [-0.49662330746650696, -2.2814412117004395], + [8.679831504821777, -2.817115545272827], + [2.6421377658843994, -4.561282157897949], + [-3.8049709796905518, -3.827939033508301], + [-1.0458545684814453, 10.397136688232422], + [0.2822231352329254, -4.3235039710998535], + [-4.032227039337158, -1.2874835729599], + [-0.7015413045883179, -2.362030506134033], + [1.4672845602035522, 1.3789371252059937], + [-3.734968423843384, -1.4958815574645996], + [9.377314567565918, -2.9001104831695557], + [-3.9531772136688232, -2.607982873916626], + [-1.0057733058929443, 10.943330764770508], + [-0.6937552094459534, 10.272163391113281], + [0.1359649896621704, -5.26970100402832], + [0.4381369352340698, -6.884567737579346], + [3.0804004669189453, 6.387581825256348], + [-1.0993722677230835, 2.0842044353485107], + [6.587393283843994, -1.839802861213684], + [2.9091522693634033, -4.638216972351074], + [1.8701847791671753, 6.415522575378418], + [-2.082573652267456, 1.845347285270691], + [1.4636354446411133, 4.952149868011475], + [0.16296392679214478, 6.2826032638549805], + [-1.4656797647476196, -2.967418909072876], + [-5.586065769195557, -0.6415959000587463], + [8.202303886413574, -2.5384838581085205], + [1.1521577835083008, 5.340825080871582], + [-3.475050210952759, -2.612905263900757], + [-0.30289268493652344, 9.04111099243164], + [-3.161573648452759, 5.390326499938965], + [0.8279738426208496, 2.9958994388580322], + [2.6000149250030518, -4.680039882659912], + [0.22293967008590698, -5.981873512268066], + [0.9280664324760437, -5.065782070159912], + [1.177060842514038, -0.17813456058502197], + [5.25955867767334, 8.000743865966797], + [1.9150633811950684, -4.6293182373046875], + [-5.27075719833374, 7.437686920166016], + [0.508121132850647, -7.401543617248535], + [2.765763521194458, -6.293923854827881], + [-3.018911123275757, 0.4167594313621521], + [-0.6081354022026062, 9.483784675598145], + [-3.828835964202881, -1.9953218698501587], + [-0.48652201890945435, -1.263317584991455], + [-2.445183515548706, -0.34211620688438416], + [0.43006861209869385, -6.215798377990723], + [-0.5177940726280212, -0.0033477768301963806], + [4.4648919105529785, 7.548108100891113], + [-3.829390287399292, -0.9454896450042725], + [1.8341337442398071, 6.696310043334961], + [-0.5974072813987732, -1.4911469221115112], + [-3.533923387527466, -1.3250155448913574], + [0.387198805809021, -5.3435516357421875], + [-3.729776620864868, -1.3464114665985107], + [-2.9374117851257324, 4.829655647277832], + [-3.6399784088134766, 5.330671310424805], + [0.27372831106185913, -6.124343395233154], + [-2.038172721862793, 1.8728418350219727], + [-4.54767370223999, 6.8959479331970215], + [-4.813605785369873, -4.602926254272461], + [1.1322293281555176, -5.856562614440918], + [1.3782120943069458, 0.7711553573608398], + [0.6913149952888489, -5.087796688079834], + [0.7605283856391907, -8.704078674316406], + [0.6988186240196228, -8.659673690795898], + [-3.7530901432037354, 5.850442886352539], + [5.075507164001465, -1.7070996761322021], + [0.5552281737327576, -7.985105991363525], + [-1.2254410982131958, 10.471248626708984], + [-2.220088243484497, -1.668304443359375], + [2.1240904331207275, -4.390729904174805], + [0.7371384501457214, -8.187439918518066], + [2.9958837032318115, -4.827972412109375], + [4.5367655754089355, 7.354829788208008], + [3.975374460220337, 7.119049072265625], + [-2.4148848056793213, -0.4493487477302551], + [-0.6131460070610046, 9.627141952514648], + [0.5705736875534058, -5.251219749450684], + [-1.7591456174850464, 0.9369069337844849], + [-3.8301100730895996, 6.943202972412109], + [0.41464102268218994, -5.243553161621094], + [-0.20595717430114746, 8.403651237487793], + [-3.7102415561676025, -1.7691611051559448], + [-2.7962706089019775, 0.07224595546722412], + [-3.201799154281616, -2.015580654144287], + [-2.8977136611938477, 6.496566295623779], + [-0.5127049088478088, 10.506650924682617], + [0.7093318104743958, -0.4795878529548645], + [-1.1125479936599731, -0.26658958196640015], + [-4.45030403137207, -1.305266261100769], + [1.903143048286438, 5.326671600341797], + [-1.9043910503387451, 1.637992262840271], + [2.018893241882324, -4.237138271331787], + [-0.8503801226615906, -1.8043361902236938], + [-2.408491849899292, -1.363423228263855], + [2.7273731231689453, 5.81204891204834], + [-0.9743732810020447, 10.297998428344727], + [-0.8748645186424255, 10.569364547729492], + [-0.9291761517524719, 10.375306129455566], + [-3.254878282546997, -0.25081464648246765], + [-4.192427635192871, -0.8403735756874084], + [4.21524715423584, 7.224143028259277], + [6.525977611541748, -2.38173508644104], + [1.5657401084899902, -4.527488708496094], + [-1.5368988513946533, 1.2537193298339844], + [-2.5290064811706543, 5.469297409057617], + [-3.8190455436706543, 4.78118896484375], + [2.854525566101074, 6.2069854736328125], + [7.5429606437683105, -2.283695936203003], + [4.761345863342285, -1.3972326517105103], + [-0.446111798286438, 8.538440704345703], + [-3.5932300090789795, -2.5119175910949707], + [-3.5017037391662598, -2.4091291427612305], + [-2.9115331172943115, -0.4766589403152466], + [2.737344264984131, -4.299764156341553], + [-2.1838133335113525, 2.7630255222320557], + [2.6211514472961426, 4.368688106536865], + [-0.8408834934234619, 1.553863525390625], + [2.218881368637085, 5.73128604888916], + [-1.2002023458480835, 11.663159370422363], + [8.619624137878418, -3.197054386138916], + [-4.212250232696533, -0.8017196655273438], + [9.851153373718262, -2.9896953105926514], + [0.4799531102180481, -6.056292533874512], + [1.4973021745681763, 5.6056718826293945], + [-0.07534129172563553, -3.9146482944488525], + [9.900376319885254, -2.9730851650238037], + [0.5975849032402039, -7.524069786071777], + [-3.419428586959839, -1.780173659324646], + [0.3741341233253479, -0.7374235391616821], + [-5.068974494934082, 6.222055435180664], + [-3.789069175720215, -1.3667043447494507], + [2.9840004444122314, -5.174115180969238], + [0.40612882375717163, -7.739558219909668], + [8.15290355682373, -2.4513094425201416], + [2.440100908279419, 4.542649269104004], + [-3.6273083686828613, -0.9409629106521606], + [1.9298036098480225, 1.0105745792388916], + [-5.933880805969238, -0.680436909198761], + [-5.167698383331299, 5.887912273406982], + [0.24615871906280518, -5.2953901290893555], + [1.720710039138794, 1.9843424558639526], + [-1.5688661336898804, 12.326509475708008], + [2.1902129650115967, -4.173349380493164], + [3.022279977798462, -4.970613479614258], + [2.129197359085083, 5.725161075592041], + [0.25784915685653687, -5.939741134643555], + [2.885122060775757, -4.64475154876709], + [0.6698114275932312, -6.843620300292969], + [-5.181210041046143, 4.099521636962891], + [-0.010298378765583038, -2.7440264225006104], + [0.12890374660491943, -5.358051300048828], + [-3.8779077529907227, -1.6421762704849243], + [-0.39809828996658325, 10.693111419677734], + [-4.7388482093811035, -0.19715523719787598], + [0.5996387600898743, -6.644333839416504], + [0.5253314971923828, -7.421343803405762], + [1.7778452634811401, -4.861763954162598], + [-3.4128258228302, -1.1265321969985962], + [7.116011142730713, -3.667440891265869], + [1.5932238101959229, -4.502094268798828], + [2.3864753246307373, 4.09505558013916], + [2.8849563598632812, -4.5308837890625], + [-5.152507781982422, 6.53139591217041], + [-2.0236995220184326, -3.561710834503174], + [-3.4920802116394043, -1.1313444375991821], + [-1.8890788555145264, 1.5616440773010254], + [0.6116535663604736, -8.179051399230957], + [-4.646047592163086, 4.770331382751465], + [-3.9206159114837646, 6.256392002105713], + [-1.2633811235427856, 1.2395867109298706], + [2.4330525398254395, -6.262768745422363], + [2.047244071960449, 6.069344520568848], + [-3.660285234451294, -1.2119652032852173], + [-5.229612827301025, 6.710183143615723], + [-6.0861382484436035, -1.0621734857559204], + [-2.1525704860687256, 0.48929476737976074], + [-3.7894175052642822, -1.4854449033737183], + [-1.239285945892334, 11.560147285461426], + [-4.152940273284912, -0.8677411079406738], + [-1.0751060247421265, 10.477653503417969], + [-3.7914369106292725, -2.5017495155334473], + [-2.1494786739349365, 0.8730841875076294], + [-0.46187710762023926, 0.5408791899681091], + [2.0569140911102295, 0.8402343392372131], + [2.942147970199585, 6.352279186248779], + [2.3883652687072754, -4.157320976257324], + [-1.0632164478302002, 5.175478935241699], + [5.97864294052124, -2.8693349361419678], + [0.7028060555458069, -9.432035446166992], + [-0.7754234075546265, 10.698726654052734], + [5.250630855560303, 8.417413711547852], + [-3.686976671218872, -3.1508450508117676], + [-1.6608359813690186, 1.778011679649353], + [3.567460775375366, -1.701318621635437], + [7.725905418395996, -3.1972925662994385], + [-0.09258873015642166, 0.7341673374176025], + [1.261385202407837, -5.346345901489258], + [1.7972362041473389, 5.132135391235352], + [-3.2999117374420166, 5.164697647094727], + [0.4602453112602234, -5.31025505065918], + [0.5076638460159302, -7.223995208740234], + [-5.403985500335693, 7.629739761352539], + [5.910391807556152, -1.2633026838302612], + [7.5439910888671875, -2.280573606491089], + [-4.275379180908203, -2.684049367904663], + [-2.0278241634368896, -2.6040685176849365], + [-4.391831874847412, -1.0939370393753052], + [-1.5833966732025146, 2.009262800216675], + [2.678447723388672, -4.112992286682129], + [0.3756982684135437, -6.684764385223389], + [0.3396586775779724, 7.315770626068115], + [-2.01284122467041, 1.4006472826004028], + [-1.046838641166687, 1.6407238245010376], + [-3.81953763961792, -1.4739712476730347], + [-4.9279561042785645, 6.3177289962768555], + [0.7055368423461914, -7.560981750488281], + [-3.417668581008911, -1.197670817375183], + [8.246026992797852, -2.993826150894165], + [5.189659595489502, 8.176712036132812], + [-4.481261730194092, 2.7092366218566895], + [-0.6426747441291809, 10.580265045166016], + [-0.419683039188385, -0.9534511566162109], + [-1.2681281566619873, 11.024316787719727], + [-3.1392924785614014, -0.38867732882499695], + [-0.4095321297645569, -1.3995634317398071], + [2.803504228591919, -4.710079669952393], + [-4.184576988220215, -0.9686117172241211], + [-3.8555564880371094, -2.5000407695770264], + [-2.2204513549804688, -1.0772827863693237], + [-3.5847408771514893, 0.18822619318962097], + [0.32263803482055664, -6.506038665771484], + [7.87571382522583, -2.894881010055542], + [-2.522122621536255, -0.672454297542572], + [5.803560733795166, -3.3514697551727295], + [-3.928058385848999, -1.4857288599014282], + [-1.3863210678100586, 11.968719482421875], + [0.6725340485572815, -5.689688205718994], + [-3.655104637145996, 0.7720729112625122], + [-4.494546413421631, -1.3488963842391968], + [-2.666294813156128, -1.4162406921386719], + [-3.5160419940948486, 6.188963890075684], + [-0.023646987974643707, -0.9230717420578003], + [-3.1981282234191895, -1.702063798904419], + [0.7280116081237793, -5.310276985168457], + [-0.7061331272125244, 9.783132553100586], + [-1.8537120819091797, 1.7939428091049194], + [-3.7846436500549316, 1.5062676668167114], + [-1.1231420040130615, 10.949359893798828], + [-3.36677622795105, -0.22704601287841797], + [0.9057043790817261, -0.2808261215686798], + [-3.3247032165527344, -0.8691402077674866], + [-4.302041053771973, -1.0413552522659302], + [9.503677368164062, -2.9573442935943604], + [-1.11985182762146, -0.6147400140762329], + [-5.3190226554870605, 5.906693935394287], + [-1.6075685024261475, 2.1948800086975098], + [2.6870944499969482, -4.595775604248047], + [-3.879823684692383, 5.4892473220825195], + [1.7971534729003906, 5.0126752853393555], + [-0.8615366220474243, 10.246002197265625], + [0.8407419919967651, -0.45974665880203247], + [0.130056232213974, -4.76839542388916], + [9.369490623474121, -2.9030213356018066], + [-4.757742881774902, -0.48660027980804443], + [-1.8072837591171265, 1.2616616487503052], + [1.7358829975128174, -4.656937122344971], + [-5.037330150604248, 3.814817428588867], + [2.007502317428589, 0.24996241927146912], + [-2.083665609359741, 2.292410373687744], + [0.7594278454780579, -6.603462219238281], + [0.3011437952518463, -4.615684986114502], + [-5.096365451812744, 6.935003757476807], + [0.6481390595436096, -4.809948921203613], + [1.3404213190078735, 5.782159805297852], + [0.22010362148284912, -4.892333507537842], + [-5.156432628631592, -4.2015228271484375], + [-1.7745486497879028, 0.8579126596450806], + [8.551373481750488, -2.6419832706451416], + [2.166832685470581, -3.756248712539673], + [2.6318767070770264, -4.688011646270752], + [-3.595392942428589, -2.224306344985962], + [-1.8111871480941772, 1.6634364128112793], + [-0.535338819026947, 10.208102226257324], + [-1.3179274797439575, 0.95183265209198], + [-4.068479537963867, -0.0820273756980896], + [-4.544628620147705, -3.977632522583008], + [1.4312553405761719, -4.464035987854004], + [-3.5770578384399414, 5.4575514793396], + [-1.952172040939331, 2.305042028427124], + [0.14519983530044556, -5.6818108558654785], + [-0.2063084840774536, 9.310930252075195], + [-0.5048646926879883, 9.714916229248047], + [-2.1961140632629395, 0.6514673829078674], + [1.0661946535110474, -0.26294493675231934], + [2.5522825717926025, -4.392237186431885], + [-4.834238529205322, -0.8872002363204956], + [2.8939082622528076, 6.290836811065674], + [2.129093885421753, 5.266819477081299], + [-3.9454455375671387, -0.9633228778839111], + [2.605241060256958, -4.255622386932373], + [-1.373457431793213, 0.45134615898132324], + [-2.3540875911712646, -0.23863601684570312], + [0.8149800896644592, -8.610536575317383], + [9.6798734664917, -2.906616449356079], + [4.365304946899414, 7.275768756866455], + [-3.3899857997894287, -3.6111209392547607], + [2.344255208969116, 5.407412528991699], + [6.364428520202637, 9.179884910583496], + [-4.205289363861084, 6.243138313293457], + [0.5465491414070129, -8.412290573120117], + [2.9107401371002197, -4.538726806640625], + [6.156703472137451, -1.2548081874847412], + [2.727794885635376, -4.047778606414795], + [-1.3687942028045654, 1.888627052307129], + [-1.7510592937469482, 5.625371932983398], + [5.757473468780518, -1.0659468173980713], + [3.927039384841919, -2.2130377292633057], + [0.5698563456535339, -3.749882698059082], + [5.169529438018799, 7.991157531738281], + [-1.2081272602081299, 11.277612686157227], + [-2.213548183441162, 1.352334976196289], + [6.234661102294922, -4.715980052947998], + [2.5188419818878174, -5.222799301147461], + [-3.348630666732788, 5.354838848114014], + [-3.3939993381500244, -1.2774215936660767], + [2.7945711612701416, -4.68876838684082], + [-1.2966822385787964, 11.303655624389648], + [-4.2300496101379395, -3.0277516841888428], + [0.08042042702436447, -5.279496192932129], + [2.9699037075042725, -4.611114501953125], + [5.963049411773682, -4.187441825866699], + [6.643828868865967, -3.756967544555664], + [-3.724087953567505, -2.1933114528656006], + [-3.5923655033111572, -2.235515594482422], + [-4.3134636878967285, -1.583910584449768], + [3.2126619815826416, 6.330163955688477], + [5.745480537414551, -4.457305431365967], + [1.3386805057525635, -0.1766519844532013], + [0.07147230952978134, -3.2944259643554688], + [-2.9245269298553467, -3.236238718032837], + [-3.5493123531341553, -1.9869879484176636], + [-2.052649736404419, 0.09763067960739136], + [0.37891459465026855, -7.474860668182373], + [-2.0536043643951416, 2.9260036945343018], + [6.946475505828857, -5.459626197814941], + [-2.724285364151001, -1.3882551193237305], + [-3.4660439491271973, -1.2608109712600708], + [-0.9110073447227478, 10.615105628967285], + [-2.9442851543426514, -0.532803475856781], + [4.5571370124816895, 7.375229358673096], + [1.8025181293487549, 2.1677162647247314], + [-2.5203375816345215, -0.4870240092277527], + [0.6305996775627136, -0.7249467372894287], + [-1.8904602527618408, 1.860595941543579], + [-1.361847162246704, 1.561482548713684], + [0.464474618434906, -6.795229911804199], + [-4.73798942565918, 6.463544845581055], + [2.7821547985076904, -4.523133754730225], + [-1.2728009223937988, 11.236787796020508], + [4.746309280395508, 7.722399711608887], + [2.484868288040161, 5.90336275100708], + [-1.8685061931610107, 5.565000057220459], + [-4.465687274932861, -4.019497871398926], + [0.3822925388813019, -4.369080543518066], + [-2.9339587688446045, -3.6704328060150146], + [-1.754335641860962, 0.8080962896347046], + [-3.597881555557251, 5.603177070617676], + [0.5551525950431824, -7.881912708282471], + [2.1462929248809814, 5.461511135101318], + [0.4280814528465271, -6.604409217834473], + [-3.579815626144409, 5.928290843963623], + [2.486276865005493, -4.416000843048096], + [-4.497334957122803, -3.9231088161468506], + [2.699355363845825, -4.671796798706055], + [2.7284183502197266, 6.398547172546387], + [2.032886028289795, 4.85292911529541], + [1.1924649477005005, -0.19785064458847046], + [-2.4433751106262207, -2.7621424198150635], + [0.7668207287788391, -8.6891508102417], + [0.4537714719772339, -4.8412933349609375], + [1.537083625793457, -4.115406036376953], + [2.553255796432495, -4.594623565673828], + [1.1545870304107666, 4.605807304382324], + [-4.741663455963135, -2.4224801063537598], + [-2.1425411701202393, 1.5440620183944702], + [3.594080686569214, 6.953453540802002], + [-4.41237735748291, 6.381439208984375], + [2.051381826400757, -4.3937273025512695], + [0.6719159483909607, -8.000617980957031], + [-0.14952105283737183, 8.201841354370117], + [-3.972339153289795, -2.4352614879608154], + [-3.7732584476470947, 7.288393974304199], + [-4.279801845550537, 5.600701332092285], + [-3.1968634128570557, -0.8759666085243225], + [0.5811747908592224, -7.5077385902404785], + [2.804094076156616, -4.8067097663879395], + [-5.28914213180542, 4.590145587921143], + [1.2004231214523315, 0.6988813877105713], + [-4.367526531219482, -3.3254177570343018], + [1.82235586643219, 0.5366880297660828], + [-2.707365036010742, 0.045183952897787094], + [-4.092963218688965, 0.31963425874710083], + [-3.147946834564209, -1.1837159395217896], + [-0.4638506770133972, 9.06521224975586], + [9.3284273147583, -2.8253562450408936], + [-1.324134111404419, 0.9166889190673828], + [8.390334129333496, -3.2754530906677246], + [-4.459293842315674, -3.462580680847168], + [2.5937998294830322, -4.315543174743652], + [2.0648305416107178, -5.747272491455078], + [1.565061330795288, 1.5597593784332275], + [-3.940012216567993, -2.4056198596954346], + [6.644774436950684, -2.023499011993408], + [-1.4139575958251953, 12.115224838256836], + [2.0921151638031006, 0.972507119178772], + [-4.307394981384277, -0.7782655954360962], + [1.9926385879516602, 0.577564001083374], + [1.876364827156067, -4.848935127258301], + [-0.7878562808036804, 9.791472434997559], + [3.9811408519744873, 7.407121658325195], + [1.8252637386322021, 6.263918876647949], + [1.2261426448822021, -5.071244239807129], + [-5.2118449211120605, 5.3523406982421875], + [0.8449706435203552, -7.287308692932129], + [2.1413650512695312, -4.755703449249268], + [0.7022791504859924, 0.8273393511772156], + [-4.011341094970703, -1.793684959411621], + [-3.5216193199157715, -1.2283951044082642], + [-2.9752984046936035, 5.180886268615723], + [2.1162731647491455, 5.8843231201171875], + [6.191654682159424, -2.518679141998291], + [-1.7747677564620972, 1.2225010395050049], + [8.022051811218262, -2.3336031436920166], + [-3.6056344509124756, 4.604156017303467], + [-1.158951759338379, 10.586271286010742], + [-0.7825790047645569, 10.018946647644043], + [1.6387066841125488, -5.137126922607422], + [-3.157726526260376, -0.8459123969078064], + [2.2733826637268066, -4.545806884765625], + [2.6300466060638428, -4.318000793457031], + [0.2572823166847229, 8.368598937988281], + [0.7515579462051392, -6.699326992034912], + [1.1916742324829102, 0.2517237663269043], + [0.8663428425788879, -5.0025458335876465], + [0.3768584132194519, -6.389303207397461], + [-0.6104445457458496, 9.81613826751709], + [3.3880116939544678, 6.974579334259033], + [-1.4164140224456787, 11.380229949951172], + [-4.070668697357178, -1.3609076738357544], + [-4.144493103027344, -1.2599670886993408], + [-1.071736454963684, 0.47807955741882324], + [-4.587589263916016, -3.5668251514434814], + [-2.069324016571045, 1.9288641214370728], + [6.5708231925964355, -1.949718713760376], + [-4.003261089324951, 5.610749244689941], + [-0.08476603776216507, 8.753110885620117], + [7.949038982391357, -2.425149917602539], + [2.48222017288208, -4.547083377838135], + [0.5195271372795105, -6.697227478027344], + [-1.441725492477417, 1.87525475025177], + [-1.4368584156036377, 12.04697322845459], + [0.6459488272666931, -7.3549909591674805], + [-1.4711350202560425, 11.977628707885742], + [-4.354813098907471, 5.934531211853027], + [2.960548162460327, -4.567016124725342], + [-1.86527681350708, 1.9604462385177612], + [-0.6746720671653748, 9.818208694458008], + [2.531534433364868, -0.6763269901275635], + [1.5914632081985474, -7.051711559295654], + [-3.8657124042510986, 6.000760078430176], + [0.5907935500144958, -7.9611711502075195], + [1.6548607349395752, -4.35640287399292], + [-3.1279070377349854, -0.6838811635971069], + [2.577932119369507, -4.7361040115356445], + [2.937537908554077, -6.785301208496094], + [-1.3669346570968628, 0.6391212940216064], + [-1.2270433902740479, 0.9605040550231934], + [0.4436548352241516, -7.504743576049805], + [-3.9205009937286377, -1.6127409934997559], + [8.278459548950195, -3.158914804458618], + [-0.3827820420265198, 9.025156021118164], + [2.0336012840270996, 0.4352118968963623], + [2.151824712753296, -3.8354036808013916], + [-0.5330653786659241, 9.654977798461914], + [1.5331599712371826, -0.0732274055480957], + [-3.2101495265960693, -2.9068381786346436], + [2.0634939670562744, 3.5147266387939453], + [-1.9139164686203003, 1.9046292304992676], + [3.7112576961517334, 6.706447124481201], + [2.746753215789795, -4.188223838806152], + [2.9445884227752686, -4.891322135925293], + [0.8450872898101807, -5.031243801116943], + [2.7176849842071533, -4.445915222167969], + [-3.8885481357574463, -0.5085446238517761], + [-0.4580715298652649, 1.1620476245880127], + [-3.131462335586548, -2.14485764503479], + [-5.251655101776123, -3.709385633468628], + [1.2001028060913086, 0.4746928811073303], + [-4.485261917114258, 6.727077007293701], + [-3.9862449169158936, -1.7823275327682495], + [2.616204023361206, 5.730573654174805], + [0.4167168140411377, -6.697640419006348], + [-3.6193602085113525, 5.414396286010742], + [-2.2338790893554688, -1.0694373846054077], + [6.716518878936768, -3.549921751022339], + [2.4305129051208496, -4.7425079345703125], + [4.673912048339844, 7.398985862731934], + [-3.5495054721832275, -1.0342681407928467], + [-0.9356797933578491, 9.75491714477539], + [0.6803151965141296, -6.571960926055908], + [2.0711848735809326, 1.3337924480438232], + [0.8770409822463989, -0.5894247889518738], + [-3.92053484916687, -0.76446533203125], + [8.571213722229004, -3.631782293319702], + [5.681535720825195, -1.3914819955825806], + [-1.96364426612854, 1.556636095046997], + [-1.2924818992614746, 11.396102905273438], + [1.895829200744629, 0.6478109955787659], + [-1.2046465873718262, 10.920554161071777], + [-4.934080123901367, -0.912940263748169], + [1.4983680248260498, 0.0885341465473175], + [0.961100161075592, -0.4392912685871124], + [-3.492467164993286, -1.7096245288848877], + [9.74283504486084, -2.9357783794403076], + [6.74866247177124, -2.6853535175323486], + [7.440961837768555, -2.0492138862609863], + [-1.482467532157898, -2.3804523944854736], + [1.2385976314544678, -6.0667195320129395], + [-4.143303394317627, -3.2169077396392822], + [0.22709637880325317, -6.459530353546143], + [0.5405016541481018, -4.883911609649658], + [0.43086111545562744, -6.45619010925293], + [0.538659930229187, -7.73875617980957], + [-4.363936901092529, -0.9380668997764587], + [-4.219089508056641, -2.8521158695220947], + [-3.6676418781280518, -1.7945131063461304], + [-3.7402937412261963, -2.5707900524139404], + [-3.4948039054870605, -2.8612899780273438], + [4.406149387359619, -3.737413167953491], + [-2.052802085876465, -2.951097249984741], + [-0.8123914003372192, 9.845680236816406], + [2.7355103492736816, -5.129790306091309], + [7.96610689163208, -2.4775922298431396], + [-0.18543773889541626, 8.390043258666992], + [-4.6734538078308105, -0.488506555557251], + [-0.600432813167572, 0.774976909160614], + [2.2288315296173096, -7.239158630371094], + [2.921499490737915, -4.629985809326172], + [-1.2542463541030884, 11.224814414978027], + [6.892064571380615, -1.8221107721328735], + [-0.32112187147140503, 9.128927230834961], + [-4.781460285186768, -0.7112568616867065], + [-0.3385835289955139, -2.161566972732544], + [7.3195905685424805, -4.679894924163818], + [-0.6931303143501282, 8.537179946899414], + [-1.6840436458587646, 1.3479660749435425], + [3.0137829780578613, -5.110965728759766], + [0.7611897587776184, -5.506019115447998], + [1.7367256879806519, 5.821525573730469], + [1.5640556812286377, -4.097427845001221], + [7.466965198516846, -3.537947177886963], + [2.689483880996704, -4.556997299194336], + [0.0652145966887474, -5.056188106536865], + [-4.10925817489624, -2.5379831790924072], + [9.205781936645508, -2.7722365856170654], + [5.2087626457214355, 8.246026992797852], + [-1.7860502004623413, 0.47322845458984375], + [0.39945274591445923, -6.754096031188965], + [-1.2680516242980957, 1.242200255393982], + [7.174386501312256, -2.6032748222351074], + [3.117033004760742, -3.8989012241363525], + [-4.757736682891846, 5.356677055358887], + [0.5523828268051147, -8.333658218383789], + [2.751526117324829, -3.1895029544830322], + [-1.2323421239852905, 11.901406288146973], + [-4.51406717300415, 5.896933555603027], + [2.925196886062622, -4.670418739318848], + [-4.133707523345947, 6.085743427276611], + [-4.581397533416748, -0.8698825836181641], + [-3.571629762649536, -1.2183955907821655], + [2.848912477493286, 5.694190502166748], + [6.164722442626953, -1.3560307025909424], + [-3.3554720878601074, 5.752919673919678], + [0.1188015267252922, -4.530038356781006], + [2.148608922958374, 5.1771440505981445], + [-5.6241326332092285, 6.619293212890625], + [2.2148401737213135, -4.130086898803711], + [-1.8652137517929077, 2.022796869277954], + [-5.183750152587891, 4.577836513519287], + [-1.2282527685165405, 11.204896926879883], + [1.170353889465332, 6.997334957122803], + [2.486936092376709, -5.400921821594238], + [-0.8637304306030273, -1.5357774496078491], + [-3.121464490890503, 5.975538730621338], + [-2.6267218589782715, -2.3856608867645264], + [1.2542593479156494, -6.6437153816223145], + [-1.366318941116333, 12.180423736572266], + [-4.115655899047852, 0.210232675075531], + [-5.675059795379639, 7.791069030761719], + [-2.9826204776763916, 3.00209641456604], + [-5.2230224609375, 6.488649368286133], + [0.3245684802532196, -4.418612480163574], + [1.2582534551620483, -4.648580551147461], + [0.6909530162811279, -8.179035186767578], + [2.8527634143829346, -4.736134052276611], + [0.5517256259918213, -5.721264839172363], + [2.563161611557007, -4.5224504470825195], + [-1.977643609046936, 2.217024087905884], + [-0.6146205067634583, 10.389101028442383], + [-3.310692310333252, -2.8060483932495117], + [6.925244331359863, -3.7906529903411865], + [0.4698060154914856, -6.251896858215332], + [2.0520126819610596, -4.991555690765381], + [-1.195825457572937, 5.108124732971191], + [9.3750581741333, -2.878990411758423], + [1.6706407070159912, 5.19389533996582], + [-3.7052438259124756, -1.3842096328735352], + [0.5620536208152771, -5.321343898773193], + [0.42695993185043335, -6.270445823669434], + [0.6151098608970642, -0.6327728629112244], + [-0.9825121760368347, -3.7577996253967285], + [0.5279316306114197, -7.842411994934082], + [-5.194962024688721, -1.8894222974777222], + [-0.9786933660507202, 8.527994155883789], + [7.870217800140381, -2.4188144207000732], + [0.6189885139465332, -5.461490154266357], + [-3.7484853267669678, -1.1181259155273438], + [-0.8675629496574402, -1.1893079280853271], + [0.19171059131622314, -5.993021011352539], + [-3.628446340560913, -1.2002447843551636], + [1.0613021850585938, 4.366891860961914], + [-3.751089334487915, -1.2343049049377441], + [5.205390453338623, 8.097249984741211], + [-2.008653402328491, 1.5267106294631958], + [0.6589903235435486, 6.049286842346191], + [1.8347151279449463, 6.151493072509766], + [-0.08987779170274734, -2.8515231609344482], + [-3.3332269191741943, -2.3979716300964355], + [-1.864099383354187, 0.8892258405685425], + [-4.993334770202637, 7.165920257568359], + [-3.15364670753479, 6.041558265686035], + [6.667241096496582, -4.281894683837891], + [8.713565826416016, -2.710859775543213], + [-1.1478710174560547, 11.201194763183594], + [2.373795509338379, 0.9390230178833008], + [-1.9128410816192627, 0.9574421644210815], + [1.7674471139907837, 0.5110170245170593], + [-2.2557010650634766, -2.132459878921509], + [1.6308350563049316, 5.242768287658691], + [-1.6473541259765625, 6.497089385986328], + [0.7911754250526428, -0.45887601375579834], + [-3.6282026767730713, -1.2658637762069702], + [2.2761385440826416, 0.6411596536636353], + [-3.258885622024536, -1.4101158380508423], + [-1.4827816486358643, 12.371797561645508], + [-4.6422319412231445, 4.629283905029297], + [1.1457581520080566, -4.65426778793335], + [0.568939745426178, -8.287713050842285], + [-3.4226343631744385, -2.8121824264526367], + [4.0669121742248535, 7.326391220092773], + [-3.413818836212158, -1.0546969175338745], + [3.16574764251709, -5.178463935852051], + [5.867891788482666, -1.2422685623168945], + [5.451667308807373, -1.5019975900650024], + [0.608479380607605, -7.754068374633789], + [-1.4710068702697754, -0.777685284614563], + [-0.5381239652633667, 10.442686080932617], + [0.1400814950466156, -4.980495929718018], + [-2.602593421936035, 6.198609352111816], + [0.5990082025527954, -7.865234851837158], + [1.0113564729690552, -7.72632360458374], + [-1.299239993095398, 11.087512969970703], + [-1.4035149812698364, 11.783576011657715], + [3.266231060028076, 6.57835578918457], + [3.910978317260742, 7.093435287475586], + [-3.3067984580993652, 3.0452377796173096], + [-4.775515079498291, 5.298874855041504], + [-3.861750364303589, -3.7548999786376953], + [-1.357582926750183, 1.74605131149292], + [0.33608391880989075, -4.8808112144470215], + [-2.411609172821045, 2.3590247631073], + [2.7095160484313965, -4.824707508087158], + [-4.1374993324279785, 6.467343330383301], + [-4.060240268707275, -3.0243499279022217], + [0.5495005249977112, -6.639774322509766], + [-3.7775089740753174, -2.278862714767456], + [-1.717958927154541, 0.9118306636810303], + [-1.9786242246627808, 1.9520004987716675], + [4.754678249359131, -0.05577320232987404], + [0.8870680928230286, -8.258269309997559], + [-1.2378616333007812, 10.984895706176758], + [-1.2877442836761475, 11.472333908081055], + [-3.7821757793426514, -2.18131947517395], + [-0.7406623959541321, 10.12877082824707], + [6.337368488311768, -3.668329954147339], + [-5.1553521156311035, 7.782209396362305], + [-0.8709688782691956, 9.87985610961914], + [2.804011821746826, -4.509713172912598], + [1.7509126663208008, -4.358937740325928], + [0.4811857342720032, -7.634018421173096], + [0.5174000859260559, 5.276487350463867], + [8.003110885620117, -2.682676076889038], + [-1.4708459377288818, 1.6464096307754517], + [-3.6048836708068848, -0.7156449556350708], + [0.8553059101104736, -7.786837100982666], + [0.5821607708930969, -5.213592529296875], + [-3.842498540878296, -1.052009105682373], + [8.794885635375977, -2.553025007247925], + [1.3156843185424805, 3.5767006874084473], + [-3.6070492267608643, -3.196030378341675], + [-3.2817904949188232, -1.2257304191589355], + [6.995952129364014, -1.744321346282959], + [1.1846401691436768, 0.08217617869377136], + [-4.155648708343506, -1.2817312479019165], + [2.8334457874298096, -5.09050178527832], + [0.6915057897567749, -8.215435981750488], + [1.1679279804229736, 3.7512781620025635], + [0.7483376860618591, -9.314631462097168], + [-4.752987861633301, -1.0737305879592896], + [0.37273478507995605, -6.698617458343506], + [5.366551399230957, -3.0576858520507812], + [6.956474781036377, -2.7073428630828857], + [-3.69124174118042, -3.2892677783966064], + [1.9449331760406494, -4.4953508377075195], + [-3.9888174533843994, 0.1929471492767334], + [-1.0194939374923706, 10.851127624511719], + [-1.0620073080062866, -3.0289738178253174], + [8.395302772521973, -2.647348642349243], + [-0.384740948677063, -0.7642362117767334], + [5.779591083526611, 8.567978858947754], + [-4.950128555297852, -4.148120403289795], + [8.076712608337402, -3.139180898666382], + [7.408971309661865, -2.2182488441467285], + [-3.6826674938201904, -0.72945636510849], + [-3.281808853149414, -1.131731629371643], + [-4.882068157196045, -3.3450229167938232], + [-1.6595004796981812, 1.7336753606796265], + [-1.337730884552002, 0.9154946804046631], + [3.4737606048583984, 6.989009857177734], + [-2.387784481048584, -0.3665001392364502], + [2.550029993057251, 3.9628970623016357], + [1.5947222709655762, -5.03821325302124], + [2.0386369228363037, 6.163876533508301], + [0.7165000438690186, -8.627226829528809], + [6.1632256507873535, -3.3275086879730225], + [-3.9172146320343018, -1.8029204607009888], + [-0.3657839298248291, 9.157065391540527], + [-3.6367523670196533, -1.2134486436843872], + [-3.892075300216675, 5.229256629943848], + [-4.03097677230835, -2.394090414047241], + [-3.922118902206421, -1.4541735649108887], + [0.30562543869018555, -1.0558794736862183], + [-2.8106141090393066, -1.0179017782211304], + [9.734430313110352, -2.8974874019622803], + [5.570761203765869, 8.305718421936035], + [2.633237838745117, -4.448578834533691], + [1.400719165802002, 6.2653489112854], + [0.4874858856201172, -5.202308654785156], + [-0.7218376994132996, 10.195720672607422], + [-0.1301584243774414, -1.0941894054412842], + [2.3664565086364746, -4.327174186706543], + [-1.670422077178955, -0.024662915617227554], + [-4.318215847015381, -0.9394062757492065], + [0.6964148879051208, -7.516108512878418], + [4.843870162963867, 7.7390007972717285], + [1.524216651916504, -3.5045597553253174], + [-0.17057788372039795, 8.320274353027344], + [-4.014626979827881, -2.4738500118255615], + [0.5045343041419983, -7.573210716247559], + [-3.7032320499420166, -0.8388825058937073], + [-1.8994524478912354, -0.8684440851211548], + [5.532256603240967, -1.4033782482147217], + [0.7881074547767639, -4.419777870178223], + [1.0269461870193481, -7.1998090744018555], + [-1.583902359008789, 1.5444297790527344], + [1.7488667964935303, -5.773672580718994], + [-4.2477850914001465, -2.449510335922241], + [1.9209070205688477, 5.71442985534668], + [-5.410369396209717, 7.242062568664551], + [0.645229160785675, -5.9414167404174805], + [2.4146318435668945, -4.477067470550537], + [0.5682092308998108, -7.425363540649414], + [-1.099810242652893, 10.820087432861328], + [1.9070388078689575, 5.114530563354492], + [2.7820255756378174, -4.528296947479248], + [-4.530723571777344, -1.9373788833618164], + [-4.8260931968688965, -4.330962181091309], + [-3.6332743167877197, -1.9118332862854004], + [-3.3662495613098145, -1.9418359994888306], + [-3.5090324878692627, -1.5362610816955566], + [-1.9558131694793701, 1.413108229637146], + [0.6439523696899414, -8.631207466125488], + [2.2707364559173584, -4.885544776916504], + [-4.095306396484375, -1.868859887123108], + [0.6968347430229187, -8.190973281860352], + [-0.730018675327301, 10.108955383300781], + [0.6660715937614441, -5.374662399291992], + [-2.082472801208496, 0.3486596941947937], + [8.518802642822266, -2.5969440937042236], + [2.5673513412475586, -4.012256145477295], + [2.8433167934417725, -4.811541557312012], + [-3.5598509311676025, 3.8947858810424805], + [5.27815580368042, 8.341511726379395], + [0.21868258714675903, -4.968588829040527], + [1.8043113946914673, 5.468080520629883], + [0.449496328830719, -5.296876907348633], + [-3.397190809249878, -2.231827974319458], + [-5.282372951507568, 4.723681449890137], + [0.8915454149246216, -0.45994457602500916], + [-5.549501895904541, 6.728487014770508], + [-0.922003448009491, 10.826515197753906], + [-2.209620237350464, 5.4846110343933105], + [6.9163594245910645, -2.209684371948242], + [-4.620858669281006, -0.4701327085494995], + [7.105103015899658, -2.1978442668914795], + [2.785410165786743, -4.384915828704834], + [0.48237085342407227, -4.8054094314575195], + [-0.630813479423523, 9.26055908203125], + [-0.9803538918495178, 10.309527397155762], + [0.3645230531692505, 5.593410968780518], + [0.3217725157737732, -5.4358906745910645], + [0.15241113305091858, -3.6005024909973145], + [-0.8605801463127136, -2.639869451522827], + [-5.220463275909424, 6.606934547424316], + [-4.663223743438721, -1.4164003133773804], + [-4.4036054611206055, 0.07907313108444214], + [-2.086129903793335, 2.488633871078491], + [-0.6953645348548889, 9.484572410583496], + [-1.58578360080719, 1.6641327142715454], + [0.6463767886161804, -7.425690650939941], + [0.8247990012168884, -9.053215980529785], + [0.3992261290550232, -6.9207763671875], + [-3.493166208267212, -0.9575822949409485], + [1.6952424049377441, -5.984133720397949], + [0.015003256499767303, -5.741639137268066], + [-2.5075995922088623, -3.690218448638916], + [8.864262580871582, -2.714959144592285], + [7.616369724273682, -2.7351889610290527], + [-2.150202751159668, 1.9040030241012573], + [-4.429645538330078, -1.2868198156356812], + [6.121819019317627, -2.067833423614502], + [2.127988576889038, 4.721579551696777], + [8.231595039367676, -2.7649595737457275], + [-0.884795606136322, 10.391142845153809], + [-5.340566158294678, -1.7545080184936523], + [-0.4568938612937927, 10.212648391723633], + [0.6102091670036316, -8.256059646606445], + [-3.460367441177368, -1.8856701850891113], + [0.47413885593414307, -7.237434387207031], + [-4.1933465003967285, -1.0939319133758545], + [7.709820747375488, -2.209671974182129], + [1.9990735054016113, 6.150290012359619], + [-3.2623140811920166, -0.9572845697402954], + [-2.632122278213501, -1.3628203868865967], + [2.5968430042266846, -4.511406898498535], + [0.09551527351140976, -0.9357566833496094], + [2.116940975189209, 5.396162509918213], + [0.7426349520683289, -5.499755859375], + [0.513106644153595, -7.301681041717529], + [-1.1303684711456299, 10.562435150146484], + [0.42408037185668945, -5.147985458374023], + [3.0423049926757812, -5.063086986541748], + [-4.956540584564209, 6.06571102142334], + [-5.172932147979736, -1.0478458404541016], + [6.895491123199463, -2.363764524459839], + [-4.729817867279053, -0.9620769619941711], + [2.8576877117156982, -4.710376739501953], + [0.5953244566917419, -6.894007205963135], + [6.083035945892334, -4.358382701873779], + [-3.1593613624572754, -2.1368672847747803], + [0.6303761601448059, -7.25457763671875], + [3.743828535079956, 6.523897647857666], + [0.3681084215641022, -0.4498107135295868], + [4.959206581115723, 7.731108665466309], + [-3.520615339279175, -0.6546047925949097], + [8.478633880615234, -3.3363728523254395], + [-4.366257190704346, 6.586172103881836], + [-4.237637996673584, -1.1921318769454956], + [7.951608180999756, -2.8828725814819336], + [0.6124675869941711, -7.8847270011901855], + [0.6021645069122314, -5.285819053649902], + [-4.027613162994385, -0.07953441143035889], + [-0.09133494645357132, -2.0802204608917236], + [-2.069192409515381, 0.388674795627594], + [5.80564546585083, -1.2790546417236328], + [-2.137053966522217, 2.5608787536621094], + [6.248376369476318, -2.5727639198303223], + [1.8645439147949219, -4.537299156188965], + [2.9521446228027344, -4.697993278503418], + [-1.346968412399292, 12.250341415405273], + [-2.6552209854125977, -0.7850319147109985], + [0.5610941648483276, -7.7034478187561035], + [2.957838296890259, 5.838343620300293], + [2.407268762588501, -4.697930335998535], + [0.5307996869087219, -7.593747138977051], + [2.761591672897339, -5.1781463623046875], + [-0.2237347960472107, 9.271846771240234], + [2.1635398864746094, -4.563301086425781], + [-2.0000979900360107, -0.2690800726413727], + [4.830132961273193, 7.617323875427246], + [1.0114532709121704, -4.420856475830078], + [0.03763481229543686, -0.9809499979019165], + [2.118189811706543, 3.8259732723236084], + [4.306364059448242, 7.4248247146606445], + [-3.8345654010772705, -1.9854605197906494], + [2.739795446395874, -4.748800277709961], + [-3.349696397781372, 5.55317497253418], + [-0.26684123277664185, 7.944500923156738], + [-1.0556927919387817, 11.26435375213623], + [-4.889357566833496, 5.9251909255981445], + [6.2154765129089355, -3.8968148231506348], + [-0.27048182487487793, 8.245985984802246], + [1.9976332187652588, 4.795296669006348], + [0.791549026966095, -4.480277061462402], + [-4.734043598175049, -2.2753686904907227], + [-5.143277645111084, -1.0313526391983032], + [2.3371388912200928, -4.4387736320495605], + [-0.07287461310625076, -2.9608137607574463], + [-4.51662015914917, -3.452824354171753], + [-1.8852195739746094, 1.1678086519241333], + [-3.4262802600860596, -1.394587755203247], + [1.7688697576522827, 1.9805454015731812], + [-0.35995718836784363, -0.9816531538963318], + [-2.5537211894989014, -0.9634097814559937], + [-3.7976114749908447, -2.73579740524292], + [-4.075566291809082, 6.220407962799072], + [-1.125300407409668, 0.902237057685852], + [-2.713496208190918, -1.4584239721298218], + [-0.580115556716919, 9.594265937805176], + [0.4068080186843872, -6.0114264488220215], + [-1.3023549318313599, 11.157346725463867], + [1.7044187784194946, -5.067370414733887], + [-3.9006049633026123, 6.605895519256592], + [-2.6522727012634277, -2.1673426628112793], + [-3.8845176696777344, 4.248386859893799], + [1.0807479619979858, -5.949507236480713], + [2.754753828048706, -4.5314788818359375], + [0.38379967212677, -6.643830299377441], + [5.507174968719482, -3.7155885696411133], + [2.0794084072113037, -4.321598052978516], + [-3.5462191104888916, -2.776461362838745], + [-3.1951467990875244, -2.9063456058502197], + [-4.547551155090332, 5.6389031410217285], + [-1.9378834962844849, 0.8424331545829773], + [0.6439846158027649, -4.302835464477539], + [-1.2077654600143433, 10.764043807983398], + [1.2594937086105347, 1.1031183004379272], + [-4.975722312927246, -0.6650287508964539], + [1.893097162246704, 5.358956336975098], + [-1.1285181045532227, 10.081524848937988], + [2.440676212310791, -5.348094463348389], + [-5.05676794052124, -1.2594889402389526], + [1.1712790727615356, -6.124004364013672], + [2.683246374130249, 4.52610969543457], + [6.533057689666748, -2.083345413208008], + [-3.9143154621124268, -2.6749956607818604], + [-1.4567718505859375, 1.0058257579803467], + [-0.1641702651977539, 1.1363905668258667], + [0.018155626952648163, -4.800809383392334], + [3.054941415786743, -4.712337970733643], + [0.6693981289863586, -8.379236221313477], + [-1.3165910243988037, 2.652125597000122], + [-4.213862895965576, 5.253023147583008], + [7.383394718170166, -2.3033103942871094], + [-2.1110079288482666, 2.784756898880005], + [-3.0388591289520264, -2.0789849758148193], + [-1.060139536857605, 11.394813537597656], + [5.8649702072143555, -1.6287349462509155], + [2.009442090988159, 0.22989198565483093], + [0.024129144847393036, -1.3235923051834106], + [-1.8266596794128418, 1.7518149614334106], + [2.039628505706787, 0.717745304107666], + [-4.12686014175415, 6.72421932220459], + [-3.0702083110809326, -2.4807724952697754], + [0.726390540599823, -6.404078006744385], + [-3.1323020458221436, -1.6883174180984497], + [0.4071340560913086, -5.96046781539917], + [-0.5769987106323242, -1.8861137628555298], + [2.2198922634124756, -5.2519731521606445], + [-2.9016640186309814, 3.0173511505126953], + [0.46394121646881104, -7.086023807525635], + [0.028848938643932343, -5.097894668579102], + [0.11308180540800095, -4.35417366027832], + [0.5095663666725159, -4.069267272949219], + [1.2353005409240723, 1.126583456993103], + [-3.0404748916625977, 2.441025972366333], + [-2.3740732669830322, -0.984676718711853], + [-0.884270966053009, -2.989288091659546], + [1.2978328466415405, 1.8914998769760132], + [-1.0009129047393799, -0.5333865284919739], + [-0.707750141620636, 10.576652526855469], + [2.5924344062805176, -4.781612396240234], + [1.4867022037506104, 4.639523506164551], + [-4.757726192474365, -0.6861848831176758], + [2.2237839698791504, 5.805154323577881], + [1.0944719314575195, -0.3832651674747467], + [0.8688057065010071, -8.040969848632812], + [0.9409376978874207, 7.176884651184082], + [0.37204599380493164, -4.624564170837402], + [-4.5330095291137695, 4.7284321784973145], + [0.19448238611221313, -1.2471379041671753], + [0.9689076542854309, -6.891845703125], + [1.3402597904205322, 5.807875633239746], + [1.5449625253677368, 5.338622093200684], + [-4.219708442687988, -1.746132493019104], + [-0.19997447729110718, -0.9428073763847351], + [-0.9714917540550232, 10.451318740844727], + [8.000938415527344, -2.9963786602020264], + [-0.8687536120414734, 0.9443150758743286], + [-3.2047059535980225, -1.3250778913497925], + [-3.214207649230957, -1.0387990474700928], + [-1.8361175060272217, 2.4465079307556152], + [7.398216724395752, -2.7098166942596436], + [-3.986964702606201, -1.6318036317825317], + [-1.80082106590271, 0.8237342238426208], + [2.5907607078552246, -4.2815985679626465], + [-2.2533414363861084, -1.629454255104065], + [2.4209182262420654, -3.8571841716766357], + [1.9653825759887695, -5.817602157592773], + [-4.448227882385254, -1.7247868776321411], + [-3.920234441757202, 0.19704490900039673], + [1.8752548694610596, 0.5402629375457764], + [1.5141651630401611, 0.342691570520401], + [-2.0283432006835938, 2.2196404933929443], + [8.613646507263184, -2.5313944816589355], + [-4.657576560974121, 6.166220664978027], + [-3.0755302906036377, 4.56008243560791], + [-3.230302572250366, -2.6402666568756104], + [-3.4984803199768066, 5.711430549621582], + [-1.0413182973861694, 10.372011184692383], + [8.706396102905273, -2.7654197216033936], + [0.05554983764886856, -1.1327916383743286], + [1.7492871284484863, 5.277504920959473], + [2.83197021484375, -4.677224159240723], + [-1.818232774734497, -0.6705177426338196], + [-1.7464056015014648, -1.1538681983947754], + [-3.478800058364868, -0.19573718309402466], + [0.5264906287193298, -7.266138553619385], + [-3.580134153366089, -2.0285816192626953], + [1.6317977905273438, 3.984881639480591], + [-3.2828900814056396, -0.6623331904411316], + [0.6213951706886292, -7.590747833251953], + [-1.8651543855667114, 0.8497751355171204], + [6.8448920249938965, -3.6082727909088135], + [-0.5456604957580566, 0.5922976136207581], + [2.328450918197632, 6.019560813903809], + [0.8484002947807312, -8.534767150878906], + [0.7987433075904846, -6.298078536987305], + [-5.559237003326416, 4.592543601989746], + [-4.812803745269775, 4.888956546783447], + [0.48170536756515503, -6.8421711921691895], + [-0.3088943064212799, -0.6788508296012878], + [-3.3409335613250732, 3.6913723945617676], + [9.25438404083252, -2.7903621196746826], + [8.711715698242188, -2.9075920581817627], + [-4.362593173980713, -1.4537111520767212], + [-1.426270604133606, 12.04281997680664], + [-4.044164180755615, -1.984576940536499], + [0.674985945224762, -8.313196182250977], + [-2.0884644985198975, -1.2887712717056274], + [-0.35443514585494995, -1.3239206075668335], + [0.673855721950531, -5.33697509765625], + [-0.6903445720672607, -0.5635597109794617], + [8.709725379943848, -2.665302276611328], + [-2.1187098026275635, 2.9212350845336914], + [-0.732004702091217, 10.101455688476562], + [7.684814453125, -2.315659761428833], + [4.486858367919922, 7.543136119842529], + [-3.0485999584198, 2.9428718090057373], + [0.7542827725410461, -8.051473617553711], + [-1.159147024154663, 0.3910011649131775], + [-5.457986354827881, 6.438396453857422], + [0.7626693248748779, 5.8569231033325195], + [4.853273868560791, -4.127492904663086], + [-0.5150220394134521, 10.599222183227539], + [8.078408241271973, -2.5382070541381836], + [-2.394658327102661, -1.1028505563735962], + [-0.7815520167350769, 10.479785919189453], + [2.729100227355957, -4.349331855773926], + [-4.688589572906494, 6.676438331604004], + [-4.219577789306641, -1.1573086977005005], + [0.4137811064720154, -5.818583965301514], + [0.5136455297470093, -7.106937408447266], + [-3.7844812870025635, -1.5662552118301392], + [-2.796142101287842, -1.0093982219696045], + [-2.605102777481079, 2.7951223850250244], + [1.9321935176849365, 3.088531017303467], + [6.7680583000183105, -3.3150813579559326], + [-1.2826454639434814, 11.280498504638672], + [-1.497788429260254, 1.572731852531433], + [-3.3802568912506104, 3.524419069290161], + [-4.5889692306518555, -0.20649957656860352], + [-1.3581222295761108, -0.5462228059768677], + [0.5320703387260437, -5.866578102111816], + [0.7144917845726013, -0.43770140409469604], + [-1.8414084911346436, 5.704069137573242], + [0.650608241558075, -7.910215854644775], + [7.354786396026611, -3.4383544921875], + [-3.9463860988616943, -2.718310594558716], + [-4.502808094024658, -2.9090466499328613], + [2.6725709438323975, -5.9510087966918945], + [1.3858904838562012, 0.012491565197706223], + [-3.472355604171753, -0.8383173942565918], + [0.49415475130081177, -7.053850173950195], + [-3.808936834335327, 5.899733543395996], + [-1.364558458328247, 11.59522819519043], + [2.234457492828369, -3.5741121768951416], + [-3.7567524909973145, 1.507761836051941], + [-4.324244499206543, -1.2098699808120728], + [-6.01836633682251, 7.961832046508789], + [0.7749852538108826, -3.301497220993042], + [0.05761813372373581, -5.535675048828125], + [-1.9251761436462402, 1.8935511112213135], + [-1.924739956855774, 1.1454722881317139], + [-3.418494462966919, -1.4434102773666382], + [6.073098659515381, -1.3660719394683838], + [-3.940840005874634, -1.842276692390442], + [6.56323766708374, -2.24149227142334], + [-1.2373106479644775, 11.000457763671875], + [9.713418960571289, -2.9372642040252686], + [6.1519694328308105, -3.0390498638153076], + [2.207904100418091, -4.579067707061768], + [0.6447476148605347, -4.820884704589844], + [1.5262842178344727, 0.1426336020231247], + [-3.9035356044769287, 6.073478698730469], + [-1.7812297344207764, 0.07802462577819824], + [-4.1858344078063965, -3.9625866413116455], + [-0.725678563117981, 10.646868705749512], + [-0.33263346552848816, -1.8100210428237915], + [5.687946796417236, -1.2532603740692139], + [5.503285884857178, 8.430209159851074], + [5.66856050491333, -1.7408326864242554], + [-3.7769532203674316, -2.560638189315796], + [7.333000659942627, -3.3323585987091064], + [0.3644025921821594, -5.885876655578613], + [0.4669172167778015, -6.561097145080566], + [-2.266730546951294, -1.9125473499298096], + [-0.06470976024866104, -1.1303279399871826], + [2.69450044631958, -4.520724296569824], + [0.6824297308921814, 4.060474395751953], + [-0.10754192620515823, -0.7173540592193604], + [7.915146827697754, -2.790555000305176], + [-3.668717384338379, 6.619254112243652], + [2.8125176429748535, -4.717132091522217], + [8.028021812438965, -2.8435277938842773], + [-5.005061149597168, -2.0147600173950195], + [-1.1504017114639282, 10.70059871673584], + [-1.1433260440826416, 1.2115535736083984], + [-0.6565595269203186, -1.0872979164123535], + [-3.3437507152557373, 0.6893641948699951], + [0.7394590973854065, -8.05150032043457], + [-4.544031620025635, -0.6824975609779358], + [-3.2162373065948486, -1.0774555206298828], + [-1.912746548652649, 0.4454408288002014], + [0.5531513094902039, -7.629002094268799], + [-1.5851242542266846, -0.10804638266563416], + [-0.36425283551216125, -1.272966980934143], + [-1.9611639976501465, 0.6630597710609436], + [-2.5377962589263916, 2.667191982269287], + [0.6636900305747986, -6.8728437423706055], + [-1.874101996421814, 1.4306080341339111], + [-2.5126776695251465, -1.495653748512268], + [0.6967962980270386, -7.134032249450684], + [-0.16852176189422607, 8.420711517333984], + [-3.3440122604370117, 5.418079376220703], + [-4.461567401885986, -1.365336298942566], + [2.2330124378204346, -6.116424560546875], + [4.84080696105957, 7.792717933654785], + [-3.763566017150879, -1.5527011156082153], + [-0.834212064743042, 10.82461166381836], + [-4.202591896057129, 6.0226030349731445], + [-5.243526935577393, 7.184953689575195], + [-0.9256381988525391, 8.834704399108887], + [0.5514053106307983, -6.830947399139404], + [6.2653985023498535, -4.849819183349609], + [4.542516231536865, -1.0182344913482666], + [-3.9957778453826904, -0.8467502593994141], + [2.945279598236084, -4.859879970550537], + [-3.4533498287200928, -1.2416224479675293], + [1.3093421459197998, -5.123764514923096], + [2.934650182723999, -4.602060317993164], + [-2.0345780849456787, 1.2243990898132324], + [-1.6519560813903809, 1.2075297832489014], + [4.065178871154785, 7.034254550933838], + [4.929305553436279, 7.9266357421875], + [-2.54594349861145, 5.826798439025879], + [-5.722477912902832, -0.7955033183097839], + [-3.414384603500366, -3.6351559162139893], + [7.010654449462891, -3.080936908721924], + [2.0539348125457764, 0.5989089608192444], + [-5.432793140411377, 7.050736427307129], + [-4.9442548751831055, -1.256508469581604], + [0.8075256943702698, -0.276824951171875], + [6.286618709564209, -3.0622353553771973], + [0.9420585036277771, 6.698312759399414], + [-1.9188615083694458, 1.420382022857666], + [8.2568998336792, -3.110673666000366], + [-3.581123113632202, -1.2585721015930176], + [-2.746361494064331, -1.753045916557312], + [0.2207128405570984, -4.143304824829102], + [-2.0895094871520996, 2.0537593364715576], + [-3.693246603012085, -1.9466297626495361], + [0.19730067253112793, -6.067780494689941], + [1.0305275917053223, -0.46898844838142395], + [0.7084378004074097, -0.5390854477882385], + [-5.374161720275879, 6.810270309448242], + [7.531324863433838, -3.508931875228882], + [-0.4695647358894348, 0.8609848022460938], + [0.8842043876647949, -5.838457107543945], + [0.46283918619155884, -7.641928672790527], + [-0.9588449001312256, 10.251489639282227], + [-4.570287227630615, -1.8362723588943481], + [-1.4036474227905273, 12.098928451538086], + [-2.823620557785034, -0.6982142925262451], + [-1.565588116645813, 12.849468231201172], + [1.949429988861084, 5.880780220031738], + [-3.913501501083374, 6.708074569702148], + [-0.7445973753929138, 0.4319089949131012], + [-1.0025335550308228, 10.532308578491211], + [-3.803908109664917, -0.4101451635360718], + [-1.8129448890686035, 6.017199516296387], + [-0.574447751045227, 10.411125183105469], + [-4.448505401611328, 6.271482467651367], + [-4.254456520080566, -3.8884687423706055], + [-4.037978172302246, 5.6515045166015625], + [-1.7860230207443237, 0.3131035268306732], + [-4.987035751342773, 5.828532695770264], + [1.0732274055480957, -0.18651944398880005], + [1.7341108322143555, -5.247418403625488], + [-3.504074811935425, -1.4120429754257202], + [-3.9203543663024902, -0.7527960538864136], + [-1.9710395336151123, 1.9057559967041016], + [-4.79151725769043, -1.7882742881774902], + [-0.6004473567008972, 9.59177017211914], + [5.808775424957275, -2.773624897003174], + [-4.991307258605957, 5.026018142700195], + [2.606139659881592, -4.724753379821777], + [0.16573786735534668, -5.019545555114746], + [8.247591018676758, -2.4816386699676514], + [-4.9072465896606445, 6.107518196105957], + [-4.017467021942139, -1.9592618942260742], + [-3.2035701274871826, 0.7253273725509644], + [-1.6923106908798218, -1.6844297647476196], + [2.787252187728882, -4.715489387512207], + [0.5376015901565552, -8.107220649719238], + [-1.0418788194656372, 10.467399597167969], + [3.1501047611236572, 5.887691020965576], + [-3.862730026245117, -1.3259433507919312], + [-1.3652080297470093, 11.14652156829834], + [-0.40095019340515137, 8.807703018188477], + [6.794064521789551, -1.7955687046051025], + [-4.113937854766846, -2.123764753341675], + [6.865133762359619, -3.1455705165863037], + [-3.9676010608673096, -1.029534101486206], + [-1.3022114038467407, 11.422840118408203], + [-1.8473366498947144, -0.8129638433456421], + [0.4437252879142761, -7.096274375915527], + [0.44790512323379517, -7.400481224060059], + [-0.2805641293525696, 0.8429216742515564], + [1.7549151182174683, 5.590892791748047], + [-4.694191932678223, -0.8489248752593994], + [-5.277402400970459, -1.0205405950546265], + [7.739529132843018, -2.905106782913208], + [-0.6737801432609558, 9.556547164916992], + [-1.0691107511520386, 10.454902648925781], + [2.3152077198028564, 6.147414684295654], + [1.097968578338623, -4.4791741371154785], + [0.6249644160270691, -7.114331245422363], + [-0.824067234992981, -0.7045952677726746], + [9.04633617401123, -2.7756288051605225], + [-4.262736797332764, -3.360391139984131], + [-1.1710453033447266, 1.341992974281311], + [2.569180727005005, 6.698000907897949], + [2.8115599155426025, -4.369569778442383], + [-2.773158311843872, 4.728034496307373], + [5.3501787185668945, 8.406808853149414], + [-5.026946544647217, 6.406189918518066], + [2.3989856243133545, -3.937345266342163], + [-3.189178705215454, -0.8574716448783875], + [-5.259640216827393, 2.600961446762085], + [-4.135657787322998, 6.496237754821777], + [7.882628440856934, -2.4970738887786865], + [-3.507439374923706, -1.60797119140625], + [-2.040692090988159, 2.566756010055542], + [-5.252009868621826, 6.368151664733887], + [-2.6018433570861816, 5.304695129394531], + [-0.12060344964265823, 7.995622634887695], + [5.213505268096924, -3.550183057785034], + [-3.6488654613494873, -2.329867124557495], + [4.426505088806152, -0.0004689730703830719], + [-1.250166654586792, 11.589715957641602], + [0.7480422854423523, -6.459994316101074], + [-4.3534417152404785, 3.516570806503296], + [0.5761908888816833, -7.6656904220581055], + [3.643500804901123, -4.266887664794922], + [3.1212921142578125, -4.845337867736816], + [-4.567416667938232, 4.723787784576416], + [-1.5362051725387573, 12.572988510131836], + [8.131083488464355, -2.731055974960327], + [-1.684348464012146, 0.09971266984939575], + [1.0480530261993408, 0.3153482675552368], + [-3.915999174118042, 0.006774064153432846], + [0.651358425617218, -4.051778793334961], + [-1.0982391834259033, 10.668636322021484], + [-4.018064022064209, -1.2699817419052124], + [1.8175984621047974, -4.5350470542907715], + [-3.239957571029663, 0.3151402473449707], + [-4.041767120361328, 0.3922785520553589], + [-4.201918125152588, 0.8321344256401062], + [1.3922736644744873, 6.226867198944092], + [-0.9712371230125427, 10.866619110107422], + [2.3591549396514893, -4.709271430969238], + [-4.406430721282959, 6.119449615478516], + [8.372563362121582, -2.7067060470581055], + [-0.9481654763221741, 9.937386512756348], + [1.1930149793624878, 1.5566402673721313], + [2.3708078861236572, 5.508970260620117], + [-2.055797815322876, 0.5051146745681763], + [7.866226673126221, -3.72450852394104], + [-2.3318562507629395, 2.185868263244629], + [-0.6847726702690125, 5.976842880249023], + [2.52872633934021, -4.256004810333252], + [0.033093295991420746, -3.096646785736084], + [2.053884744644165, 5.955442428588867], + [0.7090122103691101, -5.900356769561768], + [-3.490572690963745, -1.6931443214416504], + [1.747003436088562, 6.027644634246826], + [7.027696132659912, -2.1499431133270264], + [-1.334326982498169, 11.897406578063965], + [-0.178544282913208, 7.451727390289307], + [-3.059640645980835, -0.18252450227737427], + [2.913656711578369, -4.6832499504089355], + [-4.883564472198486, 6.452880382537842], + [-3.1333277225494385, -1.2258143424987793], + [-0.7619305849075317, 9.721419334411621], + [-1.2608708143234253, 10.375870704650879], + [-0.2583540678024292, -3.2932240962982178], + [0.7926483750343323, -7.004765510559082], + [-1.2450964450836182, 10.837570190429688], + [-1.0756747722625732, 10.823320388793945], + [-0.10257218033075333, -2.39564847946167], + [-2.916856050491333, -0.9228368997573853], + [-4.771378993988037, -0.6880309581756592], + [0.2879263162612915, -4.570423126220703], + [-4.176436901092529, -1.6559475660324097], + [-1.4028394222259521, 12.045792579650879], + [-1.7902913093566895, 2.0655436515808105], + [-4.238577842712402, -2.8664090633392334], + [-1.0993236303329468, -0.6559475660324097], + [-5.188130855560303, 6.478470802307129], + [0.7902511954307556, -5.609365463256836], + [2.7343218326568604, -4.433138847351074], + [3.768005132675171, 6.776247978210449], + [-2.6567602157592773, -1.022775411605835], + [9.020960807800293, -2.7359280586242676], + [-1.8827645778656006, 1.0835809707641602], + [2.9806225299835205, -4.469338417053223], + [7.7309889793396, -3.488456964492798], + [-0.9475110173225403, 10.456993103027344], + [-3.153886556625366, -1.4734687805175781], + [-3.8760392665863037, -1.8651734590530396], + [7.721253871917725, -2.9913275241851807], + [0.09237118810415268, -1.0967637300491333], + [-2.0601816177368164, 2.3919975757598877], + [-1.8315417766571045, 0.29697853326797485], + [6.5256876945495605, -3.6037492752075195], + [5.900641441345215, -1.0252732038497925], + [1.515398383140564, -5.564715385437012], + [1.4757075309753418, 4.5048112869262695], + [2.8410651683807373, -4.688398361206055], + [-4.7386884689331055, 3.6001412868499756], + [-2.0589070320129395, -2.152885675430298], + [5.011356830596924, 8.024646759033203], + [-0.6568030118942261, 9.838090896606445], + [-4.187105178833008, -2.6523444652557373], + [-0.929919958114624, -0.8397019505500793], + [-3.715977668762207, -2.4274353981018066], + [-3.5376193523406982, -1.7141276597976685], + [-1.7535340785980225, 6.4466938972473145], + [-2.488267660140991, -0.6929092407226562], + [-0.711317241191864, 9.611516952514648], + [-4.923041820526123, -0.9255901575088501], + [2.5564639568328857, -5.019890785217285], + [-1.1491823196411133, 10.815403938293457], + [6.852043628692627, -1.9522696733474731], + [2.5857203006744385, -4.16914176940918], + [1.6525120735168457, -5.366419792175293], + [-2.8410351276397705, -1.6567463874816895], + [0.4554319977760315, -5.758723258972168], + [5.831250190734863, -4.462342262268066], + [-1.2358355522155762, 11.020112037658691], + [-5.6493682861328125, 7.040108680725098], + [-1.1765471696853638, 10.79636001586914], + [-2.0750527381896973, 1.820679783821106], + [0.4199092984199524, -7.6020379066467285], + [-4.052453517913818, -0.21386462450027466], + [0.26431769132614136, -6.891129493713379], + [0.6914008855819702, -6.748153209686279], + [0.6215424537658691, -6.156770706176758], + [-4.0574951171875, -2.206007242202759], + [-2.031937837600708, 0.6998613476753235], + [0.01663946360349655, -5.034587860107422], + [-1.903382420539856, 0.6616849899291992], + [0.6445639729499817, -8.392499923706055], + [7.073179721832275, -3.765284299850464], + [2.666090726852417, 4.094250679016113], + [-2.0573625564575195, 2.512270450592041], + [-1.8848499059677124, 2.967543840408325], + [0.3210221529006958, -5.707757472991943], + [2.207524061203003, 3.9844038486480713], + [0.4612002372741699, -4.501729965209961], + [-4.143540859222412, -1.04616379737854], + [2.4750478267669678, -4.413252830505371], + [-4.41810941696167, 0.28165972232818604], + [-5.244697093963623, 6.336009502410889], + [-1.8197402954101562, 1.8520921468734741], + [-2.67857027053833, -1.2916396856307983], + [-2.040933609008789, -0.7156393527984619], + [-5.693744659423828, 7.281403064727783], + [0.7948365807533264, -5.046113014221191], + [2.8800251483917236, -4.732158184051514], + [-4.9153218269348145, 7.097783088684082], + [2.912081480026245, -4.570961952209473], + [4.95259428024292, -1.8532112836837769], + [7.5288567543029785, -2.3686816692352295], + [6.132937908172607, -3.366774797439575], + [0.8839871883392334, -7.730347633361816], + [-4.3277058601379395, 1.5276559591293335], + [0.6048007607460022, -6.914425373077393], + [1.9644107818603516, 4.819155216217041], + [2.8246448040008545, -4.423360347747803], + [-0.8790343999862671, 9.230281829833984], + [-0.5909975171089172, 10.162100791931152], + [5.980428218841553, -3.7587742805480957], + [5.454359531402588, -2.591982126235962], + [6.826670169830322, -3.4324729442596436], + [0.16997191309928894, -4.740253448486328], + [0.4409322142601013, -5.066496849060059], + [7.889812469482422, -3.349217653274536], + [2.4781572818756104, 5.94244384765625], + [1.915937066078186, 5.063894271850586], + [0.5678372383117676, -7.589657783508301], + [-0.7110056281089783, 11.157564163208008], + [7.5345892906188965, -3.0469400882720947], + [6.41124963760376, -3.101149797439575], + [-3.226361036300659, -1.280840516090393], + [1.7803739309310913, 3.2717344760894775], + [-4.6642913818359375, -2.7980427742004395], + [-4.246371269226074, 6.446172714233398], + [1.745136022567749, 4.231346607208252], + [-0.03974778205156326, -5.319093227386475], + [-0.9309223294258118, 10.343832015991211], + [9.226075172424316, -2.898923635482788], + [-4.8805365562438965, 6.993179798126221], + [-4.2622222900390625, 6.36718225479126], + [-1.7041198015213013, 0.9764869213104248], + [3.3812944889068604, 6.865708827972412], + [-3.5569307804107666, -1.7050062417984009], + [0.297601580619812, -5.592414855957031], + [-0.15224546194076538, -1.1501082181930542], + [2.0465481281280518, -4.585085391998291], + [0.7739247679710388, -8.08056354522705], + [-4.080296516418457, -3.228904962539673], + [-1.4230245351791382, 11.710724830627441], + [1.0926368236541748, 1.5742933750152588], + [1.5568619966506958, 5.950108528137207], + [-5.540249347686768, 3.8137590885162354], + [6.881171703338623, -2.9256837368011475], + [-5.053952693939209, 6.261041641235352], + [3.5507848262786865, 6.895220756530762], + [3.1391849517822266, -4.803391456604004], + [5.39817476272583, 8.241618156433105], + [-5.297377109527588, -4.470278739929199], + [6.690826892852783, -2.154829978942871], + [-1.340002179145813, 12.016154289245605], + [-4.397561550140381, 5.9769978523254395], + [-4.198509693145752, -0.5377885699272156], + [2.827955484390259, -4.62087345123291], + [-0.0574115589261055, -3.710503339767456], + [0.47907543182373047, 7.211248874664307], + [1.0745837688446045, -5.899814605712891], + [-3.858259916305542, -0.7521650791168213], + [2.950618267059326, -4.595162868499756], + [-0.6931643486022949, 9.99947452545166], + [4.578031063079834, -3.909322500228882], + [-4.439697742462158, 6.6962809562683105], + [7.944709300994873, -3.2437326908111572], + [-4.36474084854126, -2.9583282470703125], + [6.013622760772705, -4.614199638366699], + [1.9050006866455078, -4.9066619873046875], + [-4.749091625213623, -1.4583605527877808], + [-3.8500235080718994, -1.3260928392410278], + [1.051186203956604, -5.081044673919678], + [0.35767626762390137, -6.867698669433594], + [0.9902752041816711, -6.333746910095215], + [-0.4156154692173004, 5.103748321533203], + [2.4240386486053467, 5.2278337478637695], + [3.217076539993286, -3.9652674198150635], + [-1.5005403757095337, -0.4122537076473236], + [-0.761208713054657, -1.082785725593567], + [-0.31677091121673584, 6.730592727661133], + [1.6651371717453003, 1.8947399854660034], + [-3.4421842098236084, -0.806404173374176], + [-3.7312514781951904, 0.6496069431304932], + [0.4404565095901489, -7.279169082641602], + [0.37286198139190674, -6.381659507751465], + [0.008714191615581512, -0.029500313103199005], + [-0.16539669036865234, -1.5803627967834473], + [-1.6334298849105835, 1.578446626663208], + [-0.6799024343490601, 10.049383163452148], + [-3.5913240909576416, 5.724953651428223], + [-1.8050421476364136, 1.324600100517273], + [5.980816841125488, -4.444883346557617], + [0.46305912733078003, -6.442368507385254], + [-2.830094337463379, -0.49951404333114624], + [5.949233055114746, -2.35166072845459], + [-5.677114963531494, -1.032607078552246], + [1.492567539215088, -5.741316795349121], + [-4.278308391571045, -3.5450143814086914], + [-2.0147900581359863, 1.5984086990356445], + [-3.119312047958374, -2.1950812339782715], + [-4.167417526245117, -2.2348952293395996], + [1.7259129285812378, 4.791017532348633], + [-2.0069873332977295, 1.1464256048202515], + [-0.8835505843162537, 10.45494270324707], + [1.1923677921295166, -7.252627372741699], + [2.7735743522644043, 6.563139915466309], + [2.490736246109009, 5.9968719482421875], + [-1.1462864875793457, 9.829347610473633], + [-1.184574007987976, 10.331171035766602], + [7.714359283447266, -3.122512102127075], + [0.4464884400367737, 5.988579273223877], + [3.770359516143799, -4.504207611083984], + [-0.9767147898674011, 10.17108154296875], + [0.11526631563901901, -4.963910102844238], + [0.17818355560302734, -6.162036895751953], + [-1.9277106523513794, 1.9654768705368042], + [-1.2805562019348145, 11.543289184570312], + [-5.3950910568237305, 7.6320905685424805], + [2.6413867473602295, -4.814461708068848], + [7.981349468231201, -3.2594778537750244], + [-1.539613127708435, 0.8367141485214233], + [0.6162117123603821, -8.137781143188477], + [-3.472658395767212, 3.9849140644073486], + [-3.9358434677124023, -1.042385458946228], + [-3.305356740951538, -1.3983421325683594], + [-3.682997941970825, -0.475805401802063], + [-0.7658087015151978, 10.825666427612305], + [-4.413598537445068, 5.231716632843018], + [2.1763362884521484, 0.7348885536193848], + [-1.3154994249343872, -2.6453917026519775], + [-0.4153146743774414, -1.6949695348739624], + [4.8083271980285645, -4.217177391052246], + [-0.47589123249053955, -1.320228099822998], + [-4.444571018218994, 6.669681549072266], + [1.417553186416626, -6.0031538009643555], + [-1.1368682384490967, 10.958703994750977], + [-0.726554811000824, 9.537026405334473], + [-1.898444414138794, 1.1870521306991577], + [0.3276263475418091, -6.119895935058594], + [8.389877319335938, -3.1598551273345947], + [-3.888465166091919, -1.2319802045822144], + [1.6851146221160889, 4.887685298919678], + [-3.286498785018921, -0.9849458932876587], + [-4.575049877166748, -3.0519192218780518], + [9.972307205200195, -3.0363495349884033], + [-1.4988762140274048, 2.124492645263672], + [-5.381091594696045, 6.9171600341796875], + [0.25041669607162476, -6.434872627258301], + [1.3445087671279907, 6.336999893188477], + [-0.016503699123859406, -3.3336193561553955], + [0.7300339341163635, -7.2085161209106445], + [-5.128732681274414, -0.9364785552024841], + [-3.5905466079711914, -2.3247597217559814], + [-0.9989929795265198, 9.91142749786377], + [2.6088340282440186, 0.461334764957428], + [0.6832992434501648, -7.767014980316162], + [-5.703442096710205, 7.307897090911865], + [0.7669973969459534, -8.934497833251953], + [0.29912883043289185, -0.1264217048883438], + [-1.991328477859497, 2.4544248580932617], + [2.776914119720459, -4.897411346435547], + [0.6391808390617371, -7.067473411560059], + [-4.087231636047363, -0.8852424621582031], + [-4.175608158111572, -0.2955639362335205], + [-1.9601078033447266, 2.4222183227539062], + [0.3827691674232483, -4.611507415771484], + [2.613010883331299, 5.371670246124268], + [-0.741159975528717, 10.100378036499023], + [-3.500847578048706, -2.1917409896850586], + [5.433315753936768, -1.3008822202682495], + [-4.261196613311768, -0.5999691486358643], + [0.7082321047782898, -7.8535614013671875], + [2.6801226139068604, -4.290478706359863], + [-3.1251332759857178, -0.9370929598808289], + [6.140163898468018, -3.4329581260681152], + [-1.226534366607666, 1.7385125160217285], + [-3.4086554050445557, -1.4678927659988403], + [2.908033609390259, 4.356512069702148], + [-1.0419195890426636, -0.9916589260101318], + [3.8260610103607178, -4.269557952880859], + [0.21109098196029663, -5.820961952209473], + [-3.96999454498291, -0.31357693672180176], + [-0.983717143535614, -0.5889743566513062], + [6.653359413146973, -1.5365501642227173], + [6.0174784660339355, -1.695736050605774], + [5.514775276184082, -1.1833645105361938], + [2.3417482376098633, -4.82029914855957], + [-2.317289352416992, -0.4381463825702667], + [0.3200773298740387, -1.1197426319122314], + [0.491347074508667, 1.3154213428497314], + [-3.539548873901367, -1.711116909980774], + [1.3181252479553223, -5.2962446212768555], + [-2.109126329421997, 2.080422878265381], + [1.1725578308105469, -5.915365219116211], + [2.611278533935547, -4.800963401794434], + [-5.172275543212891, 7.272246360778809], + [-4.732023239135742, -0.062273088842630386], + [1.8561079502105713, -4.029882907867432], + [3.0150506496429443, 5.9866132736206055], + [-3.563450574874878, -2.461435556411743], + [-1.6370168924331665, 5.158413410186768], + [0.6979580521583557, -8.746755599975586], + [0.6232444047927856, -7.879539489746094], + [0.5925922393798828, -8.121797561645508], + [-4.046335697174072, -2.067403554916382], + [-0.7014850974082947, 10.057313919067383], + [-3.7305989265441895, -2.7989919185638428], + [-3.853942632675171, -1.358612060546875], + [-0.6211667060852051, 9.683889389038086], + [-0.9828646779060364, 10.71423625946045], + [-1.1670429706573486, 10.72365951538086], + [-1.285549521446228, -0.6980693340301514], + [-1.219678521156311, 11.247819900512695], + [1.5474319458007812, 6.137319564819336], + [2.6112701892852783, -4.037412166595459], + [-3.564954996109009, -0.3104795217514038], + [5.167119026184082, -1.1570965051651], + [1.5595178604125977, 4.7151594161987305], + [-4.635798931121826, -0.7796894311904907], + [8.796769142150879, -2.8143091201782227], + [5.199031829833984, 8.069611549377441], + [0.7660883069038391, -9.35400390625], + [0.5384844541549683, -6.3516526222229], + [-0.3896358609199524, 10.187143325805664], + [-3.4012343883514404, -1.0652848482131958], + [-3.1103885173797607, 1.474959373474121], + [-1.9069660902023315, 1.53941810131073], + [0.6323819160461426, -8.685821533203125], + [-6.184525012969971, 8.516092300415039], + [-0.5313870310783386, 9.527961730957031], + [0.7526152729988098, -6.537327289581299], + [0.13607105612754822, 0.03469127044081688], + [-3.619762659072876, -1.5773365497589111], + [3.9551002979278564, -3.3661892414093018], + [9.131507873535156, -2.817918539047241], + [-3.7605652809143066, -2.2501204013824463], + [6.375279903411865, -2.6393582820892334], + [0.6649237275123596, -8.296222686767578], + [0.3133498430252075, -6.307024002075195], + [-3.913883924484253, -2.3648035526275635], + [-2.7472550868988037, 6.0641984939575195], + [-0.7934516668319702, 10.124065399169922], + [1.7473180294036865, 1.789784550666809], + [-0.8015826344490051, 4.509723663330078], + [1.6794815063476562, 1.4870060682296753], + [-4.811058521270752, -0.9695818424224854], + [-3.2770917415618896, 6.383966445922852], + [0.7445380091667175, -8.608762741088867], + [-4.235795497894287, 3.438828229904175], + [-3.868666648864746, 5.359478950500488], + [1.805845856666565, 3.25309157371521], + [-3.5801568031311035, -1.9789179563522339], + [-2.798722505569458, 3.054550886154175], + [2.1855082511901855, -5.938568592071533], + [-1.4007937908172607, 12.044535636901855], + [-5.977370738983154, 7.691143989562988], + [-5.546773433685303, -0.5752348899841309], + [0.9182954430580139, -0.26503902673721313], + [1.822293996810913, 2.00274395942688], + [0.6551055312156677, -0.6961871981620789], + [-2.107707977294922, 6.324481010437012], + [0.7172164916992188, -0.1306731402873993], + [6.6149163246154785, -3.144002676010132], + [-2.4473390579223633, -0.27994853258132935], + [2.152480363845825, -4.280300140380859], + [-4.475310325622559, -0.8062320947647095], + [1.5238304138183594, -4.996402740478516], + [4.153188228607178, 7.367256164550781], + [-4.211653232574463, -2.954627752304077], + [0.16761288046836853, -5.3058881759643555], + [3.8197591304779053, 6.957683563232422], + [0.5993361473083496, -7.560051918029785], + [2.5614633560180664, -3.5677096843719482], + [-0.744839608669281, 10.172311782836914], + [-1.7178303003311157, 1.895700454711914], + [-1.2699166536331177, -1.0221105813980103], + [-4.173686981201172, -2.865011692047119], + [-0.454081654548645, 9.867942810058594], + [-1.0253527164459229, 9.95429801940918], + [-4.8653483390808105, 6.827973365783691], + [2.724137544631958, -5.217219352722168], + [-3.9950437545776367, -2.5101919174194336], + [-0.8212123513221741, 10.524040222167969], + [-4.660217761993408, 4.155803680419922], + [2.9257466793060303, 6.947463512420654], + [0.656970202922821, -8.010350227355957], + [-3.546970844268799, 6.081172943115234], + [0.44970476627349854, -5.232040882110596], + [0.6589246392250061, -8.232735633850098], + [-1.1698278188705444, 10.952009201049805], + [-1.290873408317566, 10.818740844726562], + [2.1718101501464844, -4.402544975280762], + [3.505429744720459, 6.775935173034668], + [-0.03522384911775589, -3.8054141998291016], + [-1.8162754774093628, 1.3631510734558105], + [-5.584384441375732, 6.602108001708984], + [6.715548992156982, -2.8921658992767334], + [2.01936936378479, -5.040725231170654], + [2.0771358013153076, -3.5816962718963623], + [0.8118078708648682, -3.819408655166626], + [-4.9325947761535645, 6.979882717132568], + [-4.329336166381836, -2.6519663333892822], + [0.02130257338285446, -4.258768558502197], + [-0.5228549242019653, 0.7008939981460571], + [0.33106428384780884, -6.283309459686279], + [-1.96058189868927, 1.5592646598815918], + [1.296504259109497, 0.44083672761917114], + [0.008572928607463837, -3.8813741207122803], + [-3.6702587604522705, -3.4063363075256348], + [-1.805700421333313, 0.7591344714164734], + [2.765350341796875, 5.947967529296875], + [-2.0947017669677734, -0.9030603766441345], + [0.4279472827911377, -7.353161334991455], + [1.573953628540039, 5.647291660308838], + [-0.2681065797805786, 7.974987983703613], + [0.477836549282074, -6.016392707824707], + [-1.9189151525497437, 1.871863603591919], + [0.6393359303474426, -7.785220146179199], + [0.9964129328727722, -5.113443851470947], + [8.764749526977539, -2.7874715328216553], + [1.5825469493865967, 0.14922629296779633], + [-1.591966986656189, 1.0870164632797241], + [2.842432737350464, -4.721323490142822], + [-4.732577800750732, 6.6764960289001465], + [-0.6820471882820129, -1.534959077835083], + [0.36310911178588867, -6.095585823059082], + [-0.9528983235359192, 10.688115119934082], + [3.2242815494537354, 6.178324222564697], + [0.26881545782089233, -5.412115097045898], + [-3.2056257724761963, 3.927802562713623], + [2.8579909801483154, -4.691772937774658], + [0.5509141683578491, -7.586874008178711], + [-1.0470141172409058, 11.038896560668945], + [-3.5944550037384033, 5.264415740966797], + [2.7374889850616455, -4.18825626373291], + [5.71589994430542, -1.3497594594955444], + [-4.147480487823486, -3.005100727081299], + [-3.4905850887298584, -0.6223205327987671], + [2.9858789443969727, -4.557311058044434], + [2.735292673110962, -4.2511067390441895], + [-1.756739854812622, 1.443713665008545], + [-0.1773025393486023, -1.3734396696090698], + [-3.921717405319214, -1.695876955986023], + [1.9634373188018799, -4.766759395599365], + [-5.046609878540039, -3.858750104904175], + [0.4134204387664795, -5.312472820281982], + [3.5491225719451904, 6.665925979614258], + [6.9978108406066895, -2.224290132522583], + [-0.3529936671257019, 9.216121673583984], + [3.8652682304382324, -5.017571449279785], + [-5.4488301277160645, -0.9015973806381226], + [3.8994638919830322, 7.3063740730285645], + [-0.05840287357568741, -0.6104987859725952], + [-1.9141898155212402, 1.2036291360855103], + [-3.5918052196502686, 3.8936922550201416], + [1.4865578413009644, 4.6431732177734375], + [6.541804790496826, -2.2209856510162354], + [0.49596142768859863, -7.112754821777344], + [1.7843044996261597, -5.398282527923584], + [-2.140284538269043, 0.39557966589927673], + [-4.290857315063477, -0.8414849638938904], + [-0.046153463423252106, 0.42430776357650757], + [-2.990332841873169, 0.14690017700195312], + [-3.58232045173645, -1.8004190921783447], + [2.6096994876861572, 6.2594099044799805], + [2.7858006954193115, 5.656395435333252], + [0.728306770324707, -7.723443508148193], + [6.691693305969238, -2.2254981994628906], + [0.47427672147750854, 9.181901931762695], + [2.867375135421753, -4.459024429321289], + [2.4199092388153076, 5.729549407958984], + [-1.3173542022705078, 1.548697829246521], + [-0.6045316457748413, -1.1333461999893188], + [-2.4270050525665283, 0.8784963488578796], + [-3.124314546585083, -5.237260818481445], + [-5.5881266593933105, -0.8353877663612366], + [-3.8101768493652344, -1.3612536191940308], + [-4.489994049072266, -0.5138307809829712], + [0.38651812076568604, -6.485381126403809], + [1.9193485975265503, 2.9464340209960938], + [5.4791388511657715, -2.923316717147827], + [1.7619554996490479, 0.8516305685043335], + [0.5263596177101135, -6.608510971069336], + [2.9820125102996826, -5.259241104125977], + [2.8800058364868164, -4.585268497467041], + [-0.5885545611381531, 9.938127517700195], + [-3.2812178134918213, -1.8773670196533203], + [-3.7552380561828613, 7.167862415313721], + [0.3987674117088318, -5.07615852355957], + [-4.561235427856445, 3.4764554500579834], + [-0.47506314516067505, 9.569856643676758], + [0.950245201587677, -5.866377353668213], + [-3.7722389698028564, 6.310315132141113], + [-3.893486738204956, -0.9169067740440369], + [1.7476093769073486, 2.120645523071289], + [1.2570385932922363, -5.600518226623535], + [-3.428234338760376, -2.137847661972046], + [-3.6941890716552734, 5.948511123657227], + [-0.323536217212677, -1.8833643198013306], + [-1.3864809274673462, 12.301872253417969], + [-0.7258545160293579, 9.941766738891602], + [-5.0838236808776855, -1.674064040184021], + [-3.1589925289154053, -2.5150306224823], + [-6.679427623748779, 9.039700508117676], + [-0.3909309506416321, -1.0559403896331787], + [-2.8496172428131104, 3.2155539989471436], + [-2.7222952842712402, -0.34433406591415405], + [2.4607319831848145, -4.3022003173828125], + [-0.16165220737457275, -1.5577648878097534], + [-2.440483331680298, -1.510074496269226], + [-3.2496654987335205, -0.9257323741912842], + [7.093630790710449, -2.413938522338867], + [8.776339530944824, -3.02919602394104], + [0.5583657026290894, -5.655599117279053], + [-2.8190524578094482, -1.4426872730255127], + [-2.0371336936950684, 1.36316978931427], + [-1.2329972982406616, -0.8171891570091248], + [-1.1314380168914795, 11.055027961730957], + [-1.2421711683273315, -2.1399524211883545], + [-3.7654197216033936, -1.8897523880004883], + [-2.388371706008911, -0.9828387498855591], + [0.4733366370201111, 5.5049028396606445], + [-1.409116268157959, 12.061412811279297], + [-2.2551262378692627, -0.03795892372727394], + [3.069592237472534, -4.9819183349609375], + [-3.818943738937378, -1.4940348863601685], + [-3.964155435562134, -2.5204954147338867], + [-3.945753812789917, -3.672447919845581], + [-2.424643039703369, 0.13056662678718567], + [0.5221366882324219, -8.231321334838867], + [-4.069610118865967, -1.665711522102356], + [-1.1626036167144775, 11.752111434936523], + [2.9764018058776855, -4.661186218261719], + [-2.586498260498047, -1.6825222969055176], + [-4.850994110107422, -1.0304666757583618], + [-2.858569860458374, -2.1112654209136963], + [5.067224979400635, 7.95416259765625], + [-1.945258617401123, 1.9662059545516968], + [8.062363624572754, -2.358193874359131], + [-2.0206170082092285, -2.2717719078063965], + [0.39832526445388794, -7.308701038360596], + [2.3559234142303467, 5.86429500579834], + [-1.4730159044265747, -0.2416313886642456], + [2.318037509918213, -4.451145172119141], + [-3.5155551433563232, -0.3805508613586426], + [-1.2741643190383911, -0.8643742799758911], + [-4.694686412811279, 5.8145036697387695], + [2.1536405086517334, 5.503266334533691], + [0.6709302663803101, -8.36881160736084], + [0.7523953914642334, 6.189169883728027], + [0.29565197229385376, 6.249693870544434], + [-5.182930946350098, 7.216094017028809], + [-0.6234918236732483, 1.115466833114624], + [2.299821615219116, -3.9622561931610107], + [-3.523197650909424, -1.4981324672698975], + [1.6901471614837646, 0.7794244289398193], + [2.7488155364990234, 6.07342529296875], + [-0.44667255878448486, 9.774770736694336], + [2.3681259155273438, 4.7424116134643555], + [-3.476282835006714, 5.63234806060791], + [-2.9990956783294678, -0.767777681350708], + [2.053147077560425, -4.425699710845947], + [-1.115907907485962, 11.092025756835938], + [-4.612966537475586, 6.904983043670654], + [-4.364957809448242, -1.2977374792099], + [-3.8842499256134033, -2.0305283069610596], + [-4.729556083679199, 6.159135818481445], + [0.6171991229057312, -7.158867835998535], + [0.29576927423477173, -4.784426689147949], + [-2.407839059829712, -0.25068187713623047], + [0.6143506169319153, -8.747323989868164], + [1.7127816677093506, -4.468132972717285], + [7.32099723815918, -2.3138937950134277], + [0.5508778095245361, 4.723130702972412], + [-3.1914775371551514, -1.3804937601089478], + [0.6865007281303406, -6.8261518478393555], + [-5.30983304977417, 4.549420356750488], + [7.657933235168457, -3.0933544635772705], + [-0.7338137626647949, 5.140422344207764], + [-5.4820075035095215, 4.33923864364624], + [-5.8752360343933105, 8.07634162902832], + [0.6800695061683655, -0.6831021904945374], + [-4.802147388458252, 0.4288511276245117], + [-3.537809133529663, -2.898826837539673], + [2.5041134357452393, 4.339615821838379], + [-5.4002180099487305, 6.767500877380371], + [-4.820458889007568, -0.630746603012085], + [-3.7380995750427246, -0.9020639657974243], + [2.465550184249878, -0.2118401825428009], + [3.4965951442718506, 6.238822937011719], + [-5.030869960784912, 7.077698230743408], + [2.0186069011688232, 3.5144691467285156], + [0.23704248666763306, -4.582350254058838], + [3.001070499420166, -4.810946464538574], + [-4.688272953033447, -0.1872817873954773], + [-4.699017524719238, -0.8459200263023376], + [-3.221792459487915, -1.134379506111145], + [-4.27941370010376, 7.178621768951416], + [-1.2948724031448364, 11.672586441040039], + [-3.5310330390930176, -1.6174018383026123], + [-3.8645217418670654, 5.5931396484375], + [-1.953770637512207, 0.9718590974807739], + [-5.701028347015381, -0.6883131861686707], + [1.9551360607147217, 5.843767166137695], + [1.9258835315704346, -4.26709508895874], + [-1.1366465091705322, 10.895212173461914], + [-4.6269850730896, -0.8437408208847046], + [-2.6359474658966064, -2.4776206016540527], + [4.724132061004639, -3.0203592777252197], + [-1.6361147165298462, 2.0512535572052], + [6.493500709533691, -2.777878522872925], + [-0.4365074634552002, 9.333269119262695], + [0.6084928512573242, -6.782761573791504], + [-1.7116951942443848, 0.6459075212478638], + [-1.8990957736968994, -0.9103897213935852], + [6.160058498382568, -4.245927810668945], + [-4.985330104827881, 6.580440521240234], + [-4.817197322845459, 1.3012856245040894], + [-2.1030874252319336, 1.9213786125183105], + [9.768702507019043, -2.966956853866577], + [0.2527446746826172, 5.446343421936035], + [0.20765343308448792, -3.4329402446746826], + [-1.5434736013412476, 1.5671035051345825], + [0.5836560130119324, -7.417126178741455], + [7.585490703582764, -2.3113768100738525], + [2.6464288234710693, -4.409814834594727], + [-0.3041251599788666, -1.5896276235580444], + [-4.015176296234131, -0.4908561706542969], + [-3.8159334659576416, -2.3672409057617188], + [-1.4283409118652344, 1.187802791595459], + [7.751633167266846, -2.702758550643921], + [0.6684918999671936, -8.605819702148438], + [2.4195315837860107, -4.969921588897705], + [1.2154501676559448, -6.773168087005615], + [-1.9003372192382812, 2.1314008235931396], + [-1.118666648864746, 5.238245964050293], + [2.413022756576538, 5.200013160705566], + [-3.6226251125335693, -1.6566659212112427], + [-0.9301592707633972, 10.318351745605469], + [-4.790419101715088, -0.5673499703407288], + [-0.8441328406333923, 5.807950496673584], + [3.1890337467193604, -4.946800708770752], + [4.458788871765137, -4.159646034240723], + [-2.8361384868621826, -2.3435165882110596], + [-3.4395649433135986, -1.6478331089019775], + [1.603670597076416, -5.063312530517578], + [-3.488349437713623, -1.2597620487213135], + [-4.511116981506348, -0.9660583734512329], + [0.45924586057662964, -4.924218654632568], + [-2.89844012260437, 6.987771987915039], + [-3.977325201034546, -1.4420543909072876], + [-4.813896179199219, -1.4881761074066162], + [1.5993441343307495, -4.462576866149902], + [-3.652151584625244, -1.6270753145217896], + [6.303884506225586, -4.06982421875], + [-0.37815743684768677, -2.064234495162964], + [8.787260055541992, -2.629192590713501], + [-1.3284697532653809, 11.751296997070312], + [-0.41525208950042725, -3.7090718746185303], + [-0.5859842300415039, -1.8214540481567383], + [0.5219892859458923, -5.384527683258057], + [-1.5929943323135376, 1.1118229627609253], + [0.6954185962677002, -6.015415191650391], + [0.6437249779701233, -4.861889839172363], + [2.6109418869018555, -4.910836696624756], + [-1.139755129814148, 10.784869194030762], + [-1.3419561386108398, 1.6781671047210693], + [8.094304084777832, -2.577868700027466], + [2.0354065895080566, 3.326366662979126], + [-0.21053221821784973, -1.2593969106674194], + [1.9267587661743164, -3.9252209663391113], + [2.9517621994018555, -4.969147682189941], + [6.535647392272949, -4.495108127593994], + [-1.9517290592193604, -0.17521867156028748], + [8.233924865722656, -3.48000168800354], + [5.204873561859131, -1.215366244316101], + [0.2564545273780823, -5.914989471435547], + [-3.3533518314361572, -1.199636459350586], + [-1.9173564910888672, 0.7880018949508667], + [1.8494760990142822, -6.520613193511963], + [2.624990701675415, -4.6938300132751465], + [0.6453810334205627, -4.556286811828613], + [2.8163533210754395, -4.482815265655518], + [1.8227415084838867, 6.084506034851074], + [8.493176460266113, -3.165634870529175], + [0.7509151101112366, -9.220420837402344], + [-4.8681864738464355, 4.735986709594727], + [-0.9292394518852234, 10.224974632263184], + [-1.4068894386291504, 12.01700496673584], + [2.0240259170532227, -4.120126724243164], + [-1.2519229650497437, 0.20009461045265198], + [7.516992568969727, -2.8817906379699707], + [-2.017239809036255, 0.8925009965896606], + [9.153359413146973, -2.808072566986084], + [-2.0928335189819336, -0.7928541302680969], + [-3.973566770553589, -0.7464699149131775], + [-4.842010021209717, 6.7671217918396], + [1.6382778882980347, 5.471695899963379], + [0.28684738278388977, -4.573651313781738], + [0.6053411364555359, -7.49610710144043], + [0.38246214389801025, -6.507019996643066], + [2.400251626968384, 5.632493019104004], + [4.808797836303711, -3.8125925064086914], + [-0.11035356670618057, -3.57069730758667], + [-2.7207887172698975, -1.3409945964813232], + [5.030714988708496, -4.301441192626953], + [2.2913870811462402, 6.145902156829834], + [6.823962688446045, -2.305584669113159], + [0.29457539319992065, -5.780518531799316], + [0.6067243814468384, -0.016940291970968246], + [0.8091198205947876, -5.4820661544799805], + [2.199615001678467, 6.348639488220215], + [-3.7208120822906494, -1.8169034719467163], + [-4.696160316467285, 2.838336706161499], + [-3.7081661224365234, -1.3036760091781616], + [0.33667388558387756, -0.8464289307594299], + [-0.927997887134552, 11.077497482299805], + [-5.2285380363464355, 5.457609176635742], + [0.5476634502410889, -7.422126293182373], + [-4.419261932373047, 5.532871246337891], + [1.5232096910476685, 3.644813299179077], + [2.0518929958343506, 5.804286003112793], + [0.2360246479511261, -4.151143550872803], + [-2.9415056705474854, 6.357909679412842], + [-2.890517473220825, -0.8630623817443848], + [-1.2360111474990845, 0.8086156845092773], + [-0.3850400745868683, -1.2669169902801514], + [0.10852613300085068, -4.935148239135742], + [0.2328200340270996, -1.1959819793701172], + [2.148531436920166, 0.6472321152687073], + [0.3256937265396118, -6.3196282386779785], + [1.995086908340454, -3.68387508392334], + [-4.029391288757324, -1.649449110031128], + [2.4276750087738037, -4.192964553833008], + [-3.413701295852661, -0.8859362602233887], + [-4.0686750411987305, -2.820535182952881], + [2.4117674827575684, 5.914434432983398], + [-5.432427883148193, 6.9700493812561035], + [0.5817506313323975, -7.105200290679932], + [8.428534507751465, -2.5580356121063232], + [-0.1773938536643982, 4.092123508453369], + [1.8233895301818848, -5.690683364868164], + [-0.6116870641708374, 0.3618580996990204], + [2.5890469551086426, -4.284725666046143], + [-4.240386486053467, -1.113460898399353], + [0.49768203496932983, -8.049493789672852], + [-5.071386814117432, 7.148528099060059], + [-1.319483995437622, 11.800716400146484], + [8.052714347839355, -2.3877675533294678], + [-4.2415313720703125, 6.875082492828369], + [-1.3394802808761597, 11.795782089233398], + [0.6699897646903992, -0.5271058678627014], + [-1.7972849607467651, 0.7247304916381836], + [2.9099109172821045, 6.16712760925293], + [-1.504175066947937, 12.918251037597656], + [-1.2534431219100952, 11.263483047485352], + [-1.3848700523376465, 12.356830596923828], + [-1.8511240482330322, 0.6324530243873596], + [-0.6260157823562622, 8.135245323181152], + [-0.20626771450042725, 3.4897170066833496], + [0.14736098051071167, -0.4476744830608368], + [0.7594138979911804, -0.502074658870697], + [0.7311815023422241, -6.284728050231934], + [-3.4180939197540283, -2.3774616718292236], + [-5.270900249481201, 7.199345588684082], + [-3.5528385639190674, -1.5030978918075562], + [0.5886956453323364, -0.3356441855430603], + [1.6426184177398682, 2.4941742420196533], + [1.5026768445968628, 3.3674285411834717], + [-4.938420295715332, -0.5750372409820557], + [-0.3189919590950012, 8.656513214111328], + [0.5426133871078491, -7.5560688972473145], + [-4.814464569091797, -0.8945522904396057], + [1.7077646255493164, 4.752814292907715], + [-0.18406516313552856, 7.9979400634765625], + [4.224870681762695, 7.1695990562438965], + [4.194271564483643, 7.175334930419922], + [6.425447940826416, -4.617482662200928], + [-3.351985216140747, -1.4500460624694824], + [-1.0578696727752686, 9.585428237915039], + [-4.247269153594971, -1.3367937803268433], + [1.6854565143585205, -0.1777423620223999], + [-4.6453094482421875, -0.7318689227104187], + [-4.590717315673828, 6.46265172958374], + [-3.4751408100128174, 4.714972496032715], + [-5.369425296783447, 5.576546669006348], + [-5.510286808013916, 7.313244819641113], + [-3.6104719638824463, -1.3320887088775635], + [-4.33040714263916, -1.0315309762954712], + [-3.7388014793395996, -1.0923117399215698], + [-0.5194393992424011, 0.7674916386604309], + [-4.058091640472412, -1.8538271188735962], + [0.7046990394592285, -7.215999126434326], + [1.8707740306854248, -4.058129787445068], + [-0.6051210761070251, 10.280584335327148], + [3.098698377609253, -5.440906047821045], + [-1.195725440979004, 10.897311210632324], + [8.311229705810547, -2.5014188289642334], + [0.6348214149475098, -7.824624538421631], + [-1.906408667564392, 2.0662856101989746], + [-1.891728401184082, 1.9546719789505005], + [-0.42158418893814087, 9.147039413452148], + [1.7180249691009521, -4.936193466186523], + [1.4107537269592285, -4.9954938888549805], + [-2.6382040977478027, -3.4777791500091553], + [-2.7336785793304443, -0.44465577602386475], + [-3.9212746620178223, 5.622440338134766], + [-2.2068209648132324, 1.7157591581344604], + [-3.8141818046569824, -3.682337999343872], + [-0.963862955570221, 9.879608154296875], + [-4.128533363342285, -1.847663164138794], + [-1.149329662322998, 10.851375579833984], + [-2.215029716491699, 0.46823394298553467], + [1.452021598815918, -5.124001502990723], + [-2.9743940830230713, -1.0325204133987427], + [5.071854591369629, 7.796751022338867], + [-5.745397567749023, 7.796953201293945], + [-2.690946340560913, 6.213657379150391], + [2.1078481674194336, -4.493307590484619], + [-1.386580467224121, 11.862232208251953], + [-0.9155784249305725, 5.031077861785889], + [-3.580369234085083, -1.152776837348938], + [0.6110686659812927, -8.09304141998291], + [8.343748092651367, -2.8255484104156494], + [-1.3604974746704102, 11.916650772094727], + [-4.944187164306641, -4.5529303550720215], + [0.9219568371772766, -4.906843185424805], + [4.015888690948486, 6.777620315551758], + [7.434250831604004, -3.2531747817993164], + [4.1409478187561035, 7.282684326171875], + [-3.831254720687866, -1.1004778146743774], + [6.097217082977295, -2.2237179279327393], + [-1.7193937301635742, 0.4652690887451172], + [-5.1949849128723145, -0.9089514017105103], + [-0.7497631907463074, 10.502938270568848], + [-1.973351001739502, 1.7729566097259521], + [0.48415517807006836, -7.282910346984863], + [-2.1647536754608154, -1.6494776010513306], + [1.5848840475082397, -5.818971633911133], + [0.6903666257858276, -7.072890281677246], + [-5.26904821395874, -2.0186827182769775], + [0.7259315848350525, -9.17795467376709], + [-2.470830202102661, 2.485926866531372], + [2.6236064434051514, -4.661333084106445], + [-4.366081714630127, -1.3357346057891846], + [-0.2032005786895752, 8.761857986450195], + [1.9406814575195312, 0.4781773090362549], + [0.6694385409355164, -6.926177024841309], + [2.059675931930542, -4.028963088989258], + [1.9249727725982666, 4.348369121551514], + [-3.8497474193573, 0.49218571186065674], + [2.435482978820801, 5.386223793029785], + [-3.98852276802063, 6.237672805786133], + [-3.833636522293091, -2.008817195892334], + [-3.104701280593872, -1.6943639516830444], + [-4.321282863616943, 5.297061920166016], + [-3.6231791973114014, -1.3777613639831543], + [-3.29455828666687, -1.7812658548355103], + [-3.7280733585357666, -1.2006922960281372], + [-1.366851806640625, 9.255866050720215], + [-1.1854711771011353, 0.596223771572113], + [-4.342799663543701, -0.7478256225585938], + [2.816913604736328, -5.767762660980225], + [6.667789936065674, -1.7387269735336304], + [-4.470943450927734, 0.532177746295929], + [-4.045578479766846, -2.414138078689575], + [-2.537713050842285, -1.0377957820892334], + [0.656858503818512, -7.302486896514893], + [-3.6470885276794434, -0.8636348247528076], + [0.33285194635391235, -6.0953569412231445], + [5.926270961761475, -1.2499058246612549], + [6.336843967437744, -1.497449517250061], + [-1.2709527015686035, 1.0663729906082153], + [8.656158447265625, -2.586745500564575], + [0.09235884994268417, -5.153386116027832], + [-1.759020447731018, -1.0334398746490479], + [-2.029339075088501, 2.528031349182129], + [0.5382014513015747, -6.832676887512207], + [-4.32227087020874, 6.152056694030762], + [0.5034441351890564, 0.7206791639328003], + [2.4304614067077637, 6.074653625488281], + [-1.162606120109558, 11.213715553283691], + [-5.190610408782959, 7.585737228393555], + [-1.0981431007385254, 10.660650253295898], + [3.9018242359161377, -4.114965438842773], + [-0.6345149874687195, 10.490230560302734], + [0.8245773911476135, 0.6874889135360718], + [-1.2833822965621948, 11.375906944274902], + [-3.9737465381622314, -2.546910524368286], + [-4.362282752990723, 4.747056007385254], + [-3.804448366165161, -1.0338064432144165], + [-3.664191484451294, -1.2253366708755493], + [0.9952818751335144, -5.219354629516602], + [-3.826046943664551, 6.132784843444824], + [-3.8935024738311768, -2.553880214691162], + [0.9657289385795593, -7.419363975524902], + [-0.6319942474365234, 9.370382308959961], + [0.6024841666221619, -8.140076637268066], + [3.131502866744995, -4.894739151000977], + [6.20979642868042, -1.1029049158096313], + [-0.009546764194965363, -5.045434474945068], + [1.0472769737243652, -6.086217880249023], + [2.7400712966918945, -4.668337821960449], + [0.6882711052894592, -4.589218616485596], + [4.5360188484191895, -3.9811878204345703], + [5.514788627624512, -2.71927809715271], + [-1.151100516319275, 10.875903129577637], + [-2.5167009830474854, -0.5846097469329834], + [0.04220486432313919, -4.021694660186768], + [4.682221412658691, -3.3390700817108154], + [2.7421011924743652, -4.578228950500488], + [-0.6759138107299805, -1.270775556564331], + [1.0114325284957886, -4.179708003997803], + [-3.636052131652832, 5.685764312744141], + [0.5747495889663696, -7.762856483459473], + [9.426779747009277, -2.882594347000122], + [0.4335620403289795, -7.528614044189453], + [0.6868405342102051, -7.153616905212402], + [-0.6939277648925781, 10.222511291503906], + [1.450354814529419, -5.693911552429199], + [-3.6977128982543945, -2.067425489425659], + [-3.733342409133911, -1.9288381338119507], + [2.183861017227173, -4.134552955627441], + [4.186793804168701, 7.450457572937012], + [6.817884922027588, -2.4189493656158447], + [3.3489434719085693, 6.253091812133789], + [-3.263181209564209, 6.3896026611328125], + [-1.814039707183838, -2.26880145072937], + [-5.032363414764404, 6.091799736022949], + [-1.2686173915863037, 11.376056671142578], + [0.8132374286651611, 4.884739875793457], + [-3.922698974609375, -1.2766729593276978], + [-1.754022240638733, 0.9250597953796387], + [1.1546554565429688, -4.803061008453369], + [1.9956085681915283, -5.509466171264648], + [2.538649320602417, -3.4552505016326904], + [-2.2749500274658203, -3.4197051525115967], + [-0.6316129565238953, 9.870119094848633], + [-3.546727418899536, -1.9592790603637695], + [3.780353307723999, -3.1600100994110107], + [-1.2749289274215698, 11.352152824401855], + [0.7538481950759888, -5.7662200927734375], + [-3.368119478225708, -0.25609147548675537], + [2.250295877456665, -4.367658615112305], + [4.051566123962402, 7.681135177612305], + [2.874985456466675, -4.794841766357422], + [0.6333957314491272, 6.0806779861450195], + [-2.2895703315734863, -1.2123245000839233], + [-0.8332808613777161, -2.277667760848999], + [3.8795111179351807, 7.0455522537231445], + [-4.490455150604248, -0.9343070983886719], + [2.7892043590545654, -5.2200164794921875], + [2.2548887729644775, -4.828094482421875], + [-0.9994332194328308, 9.717842102050781], + [-3.6357743740081787, 5.024648666381836], + [-2.9284772872924805, -1.7024619579315186], + [-1.3738648891448975, 12.163673400878906], + [0.7006856799125671, 1.6261481046676636], + [-3.123873233795166, 5.328069686889648], + [6.261837005615234, -4.1714959144592285], + [7.545711994171143, -2.6012074947357178], + [6.93378210067749, -3.1261799335479736], + [5.860474586486816, -2.641686201095581], + [-3.468348979949951, -1.2805646657943726], + [-3.943902015686035, 6.280455112457275], + [1.3860517740249634, -5.5883073806762695], + [1.3474775552749634, -5.505444526672363], + [-4.981751918792725, -0.8070093393325806], + [-3.358527421951294, -1.2236639261245728], + [1.2279937267303467, 0.00837865099310875], + [5.0506978034973145, 8.076131820678711], + [-3.4910995960235596, -0.7774813175201416], + [-4.787557601928711, -1.2397199869155884], + [2.787736654281616, -4.830610275268555], + [-3.757028102874756, -1.7785040140151978], + [0.6758150458335876, -8.737854957580566], + [2.3705923557281494, 0.9258855581283569], + [-2.983151912689209, -1.1240781545639038], + [1.6434926986694336, 3.920433759689331], + [-1.3094017505645752, 11.777872085571289], + [0.6982758641242981, -9.229663848876953], + [1.0834805965423584, 0.5458697080612183], + [0.6879158616065979, -9.08479118347168], + [2.935509443283081, -4.495275497436523], + [1.6932255029678345, 5.092321395874023], + [-3.7205374240875244, -4.216309547424316], + [1.2244868278503418, -5.503981590270996], + [-1.3423435688018799, 1.4472533464431763], + [1.491705298423767, 0.721890389919281], + [-0.33932381868362427, 9.865952491760254], + [0.5673094391822815, -0.8160150051116943], + [4.247330188751221, 7.307058811187744], + [-0.6695259213447571, 10.367938995361328], + [3.2398669719696045, -5.595231533050537], + [-1.819252848625183, -0.9580892324447632], + [6.847015857696533, -2.5018320083618164], + [0.2381799817085266, 5.430849075317383], + [-0.2894347906112671, 9.227035522460938], + [0.6813842058181763, -8.901142120361328], + [0.8556987643241882, -0.2668697237968445], + [-1.048721194267273, 10.772502899169922], + [0.5568013787269592, -7.546633243560791], + [1.2264089584350586, 5.298895835876465], + [-0.9168819785118103, -0.520848274230957], + [2.0677382946014404, 5.073012828826904], + [-4.21894645690918, -3.7710444927215576], + [1.802384614944458, 0.24234920740127563], + [-3.5576117038726807, 6.333086013793945], + [-0.7467554211616516, 1.020195722579956], + [0.7607185244560242, -6.615833282470703], + [-1.8802307844161987, 1.3937036991119385], + [0.7681393623352051, -6.765095233917236], + [0.3888576030731201, -6.09025764465332], + [-0.09506017714738846, -2.9423906803131104], + [-4.054565906524658, -1.5274375677108765], + [0.6183457374572754, -5.4483184814453125], + [-3.301347494125366, 5.171632289886475], + [0.6565619111061096, -6.305710792541504], + [-1.5274949073791504, -1.7515193223953247], + [-1.3767198324203491, 1.3998346328735352], + [-2.1708157062530518, -2.731980562210083], + [6.286295413970947, -1.5183664560317993], + [0.6790769696235657, -0.6821894645690918], + [-0.5175910592079163, -1.3059698343276978], + [-2.079181671142578, 2.496140718460083], + [2.6229732036590576, 4.946396827697754], + [-5.314759731292725, -0.9166005849838257], + [0.47128361463546753, -7.317784786224365], + [-3.9057486057281494, 6.539987564086914], + [3.182478189468384, 6.651679515838623], + [7.3733954429626465, -2.190150499343872], + [-5.47769832611084, 6.701251029968262], + [0.009280942380428314, -0.6479324698448181], + [-2.9323458671569824, 3.1457455158233643], + [0.589122474193573, -5.084649085998535], + [-0.8732573390007019, 10.410101890563965], + [-3.757704019546509, -1.3145856857299805], + [0.5838305950164795, -7.387829303741455], + [-1.5771293640136719, 12.279386520385742], + [2.0074775218963623, -4.691239356994629], + [2.0542144775390625, 6.001062393188477], + [1.4694421291351318, -3.6398792266845703], + [7.90645170211792, -2.4527225494384766], + [6.703629970550537, -1.754023551940918], + [-2.173548698425293, -2.182263135910034], + [0.4542311429977417, -6.906339645385742], + [-5.241893291473389, -4.376117706298828], + [2.5344443321228027, -4.959331035614014], + [-0.3384881615638733, 9.817232131958008], + [0.5622631907463074, -8.034588813781738], + [-1.8704547882080078, 1.086143136024475], + [1.593815565109253, -5.947373390197754], + [4.746927738189697, 7.721926689147949], + [-4.878645896911621, 6.212392807006836], + [0.4655424952507019, -6.143572807312012], + [1.1796000003814697, -3.2986271381378174], + [8.933444023132324, -2.862812042236328], + [-2.700157642364502, 3.0188701152801514], + [-4.117175579071045, -2.8908627033233643], + [-0.3989298343658447, 9.274162292480469], + [2.731125593185425, -4.516303062438965], + [-2.6914916038513184, 0.30309855937957764], + [-0.8944818377494812, 10.546031951904297], + [2.866105318069458, -4.445383071899414], + [0.18891465663909912, -6.069735527038574], + [0.3920302987098694, -6.814519882202148], + [0.7892184257507324, 4.78893518447876], + [-4.275828838348389, -1.8988946676254272], + [-3.3547534942626953, -1.0466583967208862], + [-5.9063639640808105, -1.1361596584320068], + [0.5717157125473022, -5.105682373046875], + [3.680424213409424, 7.06511116027832], + [-4.28334379196167, 6.923768520355225], + [-3.7921149730682373, -1.334854006767273], + [-4.578406810760498, -1.1442899703979492], + [0.6908255219459534, -5.252865791320801], + [-0.004717521369457245, -0.8333819508552551], + [6.622532367706299, -1.7850805521011353], + [5.597787380218506, -1.2894984483718872], + [6.961277484893799, -2.002021551132202], + [-1.051539659500122, 11.12723159790039], + [0.3664127588272095, -5.3921027183532715], + [-4.457550525665283, 0.3993741273880005], + [-3.253445625305176, 5.4260172843933105], + [-2.8939168453216553, -0.31605908274650574], + [-3.968630313873291, 5.261307716369629], + [-0.06562519818544388, 7.985068321228027], + [-3.0332629680633545, -2.376943826675415], + [0.014424972236156464, -1.0626013278961182], + [-1.4374374151229858, 1.6779502630233765], + [0.29234302043914795, -4.185056209564209], + [-3.575185537338257, -0.4197862148284912], + [-0.34226876497268677, 8.303009033203125], + [2.069350242614746, -4.347005844116211], + [2.0728933811187744, 0.616314172744751], + [3.0570735931396484, -4.790095329284668], + [4.469818115234375, -5.924832344055176], + [-5.321450710296631, 6.575418472290039], + [-5.562160491943359, 7.460844993591309], + [-0.840128481388092, -0.7222965955734253], + [5.652656078338623, -1.1923885345458984], + [0.5445482134819031, -7.451493263244629], + [-5.599148273468018, 4.294788837432861], + [-0.016081519424915314, -3.92811918258667], + [-0.41469818353652954, 9.077581405639648], + [1.3359988927841187, -5.928586006164551], + [1.5766236782073975, 5.281169891357422], + [2.862952709197998, -4.783127784729004], + [7.462763786315918, -3.3507652282714844], + [-0.364638090133667, 5.768800735473633], + [-0.9385462403297424, 10.11890983581543], + [1.8419480323791504, -5.17642879486084], + [-3.6975953578948975, -1.8131195306777954], + [7.542349815368652, -2.0365355014801025], + [2.029618501663208, 0.7509991526603699], + [-3.4002268314361572, -2.070667028427124], + [1.6904270648956299, 0.5241154432296753], + [-0.27578121423721313, 9.22589111328125], + [7.395320415496826, -2.6782515048980713], + [8.279918670654297, -3.0255234241485596], + [2.370755434036255, -4.6152544021606445], + [-2.053328514099121, 1.020733118057251], + [9.23286247253418, -2.7554941177368164], + [-1.1604927778244019, 11.109848022460938], + [-1.736303687095642, 0.8922055959701538], + [0.46797555685043335, -7.156310081481934], + [6.375124454498291, -2.4789469242095947], + [-3.391697406768799, -1.4555073976516724], + [-4.367389678955078, -1.7869569063186646], + [1.112424373626709, -6.11006498336792], + [3.0061910152435303, 5.892119407653809], + [-3.6567673683166504, -2.378229856491089], + [2.599592447280884, 5.536004543304443], + [-0.5978865623474121, 0.39489424228668213], + [-4.702426433563232, -0.9124881625175476], + [-3.768763542175293, -2.3193395137786865], + [6.498329162597656, -1.8979886770248413], + [0.4019860625267029, -7.485171318054199], + [0.3197903633117676, -7.227575778961182], + [1.2586249113082886, 0.8055313229560852], + [5.900284290313721, -1.8398430347442627], + [-4.558618068695068, 6.458928108215332], + [-1.6494977474212646, 0.36736777424812317], + [0.6006001234054565, -4.283982276916504], + [0.5379824042320251, -6.784523963928223], + [2.9027466773986816, -5.006767272949219], + [-0.5659065246582031, -0.7476634979248047], + [-2.5836799144744873, -1.1715537309646606], + [2.7075283527374268, -4.384865760803223], + [4.4487433433532715, 7.510039329528809], + [-1.718016505241394, 1.0160340070724487], + [1.0297527313232422, -7.242449760437012], + [0.6883608102798462, -7.286051273345947], + [6.616638660430908, -4.319150447845459], + [2.87772536277771, -5.184116840362549], + [1.8862857818603516, 0.6939852237701416], + [9.899168968200684, -2.937507390975952], + [-5.786424160003662, -0.8437067270278931], + [-3.665407657623291, -4.040459156036377], + [2.412633180618286, -4.7321624755859375], + [2.28294038772583, 6.148210048675537], + [9.151257514953613, -2.7408852577209473], + [2.962822675704956, -4.456478118896484], + [6.192214012145996, -1.337700366973877], + [-3.8791325092315674, -0.9008380174636841], + [0.478901207447052, -6.922653675079346], + [0.6515450477600098, -8.6743745803833], + [-0.25839963555336, -1.2566442489624023], + [-1.2195369005203247, 11.44162654876709], + [2.6897356510162354, -4.2283616065979], + [0.8233270645141602, -5.5692925453186035], + [2.339736223220825, -6.057260513305664], + [5.287743091583252, -4.562068462371826], + [-1.421679973602295, -2.1038265228271484], + [-0.3031587600708008, 9.323077201843262], + [-4.247411251068115, -4.046141624450684], + [-1.232116937637329, -2.373260021209717], + [3.8844125270843506, 7.248851776123047], + [6.922488689422607, -2.3820691108703613], + [-1.0673096179962158, 10.1675443649292], + [1.8429639339447021, 1.512985110282898], + [0.4065026342868805, -5.621821880340576], + [2.04038405418396, -4.774810791015625], + [1.5468202829360962, -4.667782783508301], + [-1.6406131982803345, 1.454032301902771], + [-1.2534751892089844, 10.951313018798828], + [0.6123624444007874, -7.955008506774902], + [-1.802079439163208, 1.97793447971344], + [-1.1586312055587769, 11.684856414794922], + [-1.414959192276001, 11.844788551330566], + [-4.100813865661621, -2.7569327354431152], + [0.9424958825111389, -4.669281482696533], + [2.6694605350494385, -4.424612998962402], + [-0.5132753252983093, 9.25771713256836], + [0.37079739570617676, -6.423986434936523], + [-1.4857274293899536, 12.214335441589355], + [-0.8050128221511841, 10.447149276733398], + [-0.17461943626403809, -0.8130889534950256], + [0.5481097102165222, 5.2705888748168945], + [2.951585531234741, -4.6991987228393555], + [1.404740810394287, -5.4441914558410645], + [0.4830792546272278, -7.796685218811035], + [4.39364767074585, -6.100793361663818], + [-5.294287204742432, -0.9171994924545288], + [-1.2841829061508179, 10.988804817199707], + [2.6662914752960205, -4.328100204467773], + [0.5386809706687927, -6.372209072113037], + [-0.7514916658401489, 9.983104705810547], + [1.1216330528259277, -5.720176696777344], + [3.468820810317993, 7.124542236328125], + [-4.589426517486572, 0.12018054723739624], + [-4.060612678527832, -2.4634087085723877], + [-5.3998942375183105, 5.244419574737549], + [-5.007919788360596, 0.8048083782196045], + [3.264841318130493, 6.395681381225586], + [-4.37000036239624, 5.807811737060547], + [-1.862597107887268, -0.12850451469421387], + [-1.1616017818450928, 11.32467269897461], + [1.9292998313903809, -4.1474504470825195], + [-4.993823051452637, -3.7840967178344727], + [-0.9321553111076355, 10.146434783935547], + [-3.601673126220703, 5.553921699523926], + [0.328188419342041, -4.753080368041992], + [-1.9827382564544678, 1.1727526187896729], + [-1.0770695209503174, 10.860563278198242], + [-5.097764015197754, 6.786736488342285], + [-0.961055338382721, 10.652931213378906], + [-3.118230104446411, -1.6020830869674683], + [1.6707712411880493, -5.82705020904541], + [1.8971803188323975, -5.150028228759766], + [8.53796100616455, -2.5372822284698486], + [1.524350881576538, 6.243984699249268], + [1.7816025018692017, 5.729696273803711], + [0.8882226347923279, -7.3838911056518555], + [-1.7550901174545288, 1.6369117498397827], + [0.707528293132782, -5.749422550201416], + [2.228330135345459, 0.4330715835094452], + [0.39805078506469727, 1.5746678113937378], + [1.8057332038879395, -4.987334728240967], + [-0.3625803589820862, 8.69482707977295], + [1.2569808959960938, -0.1696614772081375], + [1.3715918064117432, -6.26621150970459], + [7.821630954742432, -3.250617504119873], + [2.767054319381714, 6.497637748718262], + [-0.3630904257297516, -2.805222749710083], + [3.1296896934509277, 6.581462860107422], + [3.1352829933166504, 6.19911527633667], + [7.871410369873047, -2.3373796939849854], + [-0.09983868151903152, -0.6898864507675171], + [-0.3273847699165344, -3.7393083572387695], + [-3.214172601699829, -2.3166747093200684], + [-1.562658429145813, 0.5654370188713074], + [-3.9487807750701904, -1.7130707502365112], + [-4.026325225830078, 7.00296688079834], + [-0.2530987858772278, 9.520378112792969], + [2.1588807106018066, -3.822610378265381], + [0.6261479258537292, -6.9123640060424805], + [2.613593339920044, 6.240518093109131], + [-4.624390125274658, 4.294557094573975], + [0.308258593082428, -5.751159191131592], + [0.3620132803916931, -6.277523040771484], + [-0.5194604992866516, -1.0182658433914185], + [-1.770677924156189, 2.1284072399139404], + [-3.2900593280792236, -0.5896796584129333], + [1.672538161277771, 5.682027816772461], + [5.123215198516846, -3.6503989696502686], + [-4.876035213470459, 6.5853471755981445], + [0.6857991814613342, -8.745307922363281], + [7.896193981170654, -2.402082681655884], + [-3.700136184692383, 5.1293535232543945], + [8.048495292663574, -2.4265382289886475], + [0.6296293139457703, -4.7603983879089355], + [-1.4850478172302246, 12.943755149841309], + [5.487094402313232, 8.604395866394043], + [0.4861847758293152, -7.90635871887207], + [0.44108760356903076, 2.4517321586608887], + [-4.835951805114746, 5.793905258178711], + [0.15642017126083374, -5.557218551635742], + [-0.9201528429985046, 9.934657096862793], + [-3.924720525741577, -1.5464776754379272], + [-4.010152339935303, -2.4584219455718994], + [0.7828259468078613, -0.5342046618461609], + [1.0823668241500854, 1.4382535219192505], + [-0.9270175099372864, 10.690561294555664], + [2.7450990676879883, -4.38547945022583], + [-0.13637623190879822, -1.3016363382339478], + [-0.8830855488777161, 10.351469993591309], + [-0.8170408606529236, 9.415900230407715], + [1.38914954662323, 0.07559151947498322], + [-1.9068739414215088, -0.5591609477996826], + [2.888174295425415, 4.995403289794922], + [-1.768309473991394, 1.7367056608200073], + [-3.622997999191284, -0.10792309045791626], + [0.1412208378314972, -4.432126998901367], + [7.249406337738037, -2.9907500743865967], + [0.7403176426887512, -8.330673217773438], + [1.9172208309173584, 5.23087215423584], + [7.329727649688721, -2.3375539779663086], + [8.046753883361816, -2.6571929454803467], + [-1.0625014305114746, 11.662330627441406], + [-0.35040849447250366, 10.14327621459961], + [-0.9559720158576965, 10.442230224609375], + [1.023497462272644, 0.01701807603240013], + [-4.716623306274414, -3.9390978813171387], + [-3.7656266689300537, -2.1416220664978027], + [0.9982200264930725, -6.500369071960449], + [1.900246262550354, -4.5222086906433105], + [0.4559393525123596, 3.066202402114868], + [-1.0697109699249268, 10.337198257446289], + [-1.1608731746673584, 10.377294540405273], + [1.8461133241653442, -4.217552185058594], + [-3.369189739227295, -1.2446584701538086], + [8.030211448669434, -3.180234670639038], + [-3.3981714248657227, 5.500120639801025], + [-4.610561370849609, 5.960200309753418], + [-4.124840259552002, -1.349295973777771], + [0.3612598776817322, -3.921321153640747], + [-0.18942242860794067, 7.89145565032959], + [0.8933832049369812, -5.5015034675598145], + [-0.4303297698497772, -2.8127949237823486], + [-4.575641632080078, -0.5974942445755005], + [1.6533185243606567, 6.3613362312316895], + [-1.6588727235794067, 1.432079792022705], + [-0.20132854580879211, -1.1891062259674072], + [-0.3524776101112366, 5.3899736404418945], + [-1.2403682470321655, -0.645989179611206], + [-1.9495558738708496, 2.0294296741485596], + [-1.3725929260253906, 1.3525499105453491], + [1.5942302942276, 4.462887287139893], + [-2.516904354095459, 2.5324461460113525], + [2.292853355407715, 5.325260162353516], + [-4.96461296081543, 7.064043045043945], + [4.4440226554870605, -4.545585632324219], + [-5.17634916305542, 5.406451225280762], + [0.4738224148750305, -7.7768683433532715], + [6.031835556030273, -1.5897332429885864], + [-1.9162803888320923, 1.996393084526062], + [7.386026382446289, -2.978532552719116], + [-0.9959002137184143, 10.33906078338623], + [0.4058363437652588, -5.301792621612549], + [2.459918260574341, 3.288025140762329], + [2.282663583755493, -4.609416484832764], + [-1.505679965019226, -2.8950624465942383], + [-1.8876924514770508, 1.4583412408828735], + [8.513834953308105, -2.49082350730896], + [0.6368986964225769, -6.304130554199219], + [-1.196048378944397, 1.8818658590316772], + [-3.699758768081665, 5.8979811668396], + [1.3148815631866455, -5.8226399421691895], + [-4.524536609649658, 6.592075347900391], + [-0.35516101121902466, 9.553388595581055], + [1.591192603111267, 0.37858206033706665], + [2.8348379135131836, -4.455950736999512], + [0.8794992566108704, -6.625484943389893], + [-0.7429176568984985, 9.221309661865234], + [7.0607380867004395, -2.3730528354644775], + [2.6532161235809326, -4.806751251220703], + [-1.1945149898529053, 10.753192901611328], + [6.604860782623291, -2.9608287811279297], + [1.614961862564087, -7.066755294799805], + [-3.808838367462158, -1.565557837486267], + [-2.7216854095458984, -1.0735937356948853], + [2.5535762310028076, 5.941015720367432], + [-3.721639394760132, -1.7678825855255127], + [4.4929986000061035, 7.620247840881348], + [-3.9818437099456787, -2.9809534549713135], + [-4.346676349639893, 6.912267684936523], + [0.6538288593292236, -7.809452533721924], + [5.497894287109375, -2.235292911529541], + [2.829282760620117, 5.890682220458984], + [4.3666672706604, 7.483857154846191], + [0.5237283110618591, -6.726446151733398], + [0.5068798065185547, -2.6366937160491943], + [2.563232660293579, 5.222583770751953], + [-1.3819233179092407, 12.120206832885742], + [-4.511139392852783, -0.5624465942382812], + [-0.7777380347251892, 10.629022598266602], + [1.4372708797454834, 5.338391304016113], + [2.33019757270813, 4.474074840545654], + [2.895606756210327, -4.854886054992676], + [-0.8944133520126343, 10.035255432128906], + [-3.3073723316192627, -2.634836435317993], + [0.25129759311676025, -5.533260345458984], + [-3.1697821617126465, -1.91100013256073], + [0.5513838529586792, -4.220612049102783], + [2.9709889888763428, -4.608331680297852], + [5.582838535308838, -1.2830976247787476], + [5.327233791351318, -1.3514174222946167], + [2.717984437942505, 6.3663177490234375], + [2.3484718799591064, -4.289444446563721], + [8.395594596862793, -2.86094069480896], + [-3.436671018600464, 4.608049392700195], + [2.035623788833618, -5.14912748336792], + [-0.02429909259080887, 8.401744842529297], + [-1.4037359952926636, 11.574928283691406], + [-1.8189570903778076, -1.6868330240249634], + [6.820102214813232, -2.8922784328460693], + [2.8958208560943604, -4.848136901855469], + [6.308190822601318, -1.8571319580078125], + [-4.411619663238525, 6.127353668212891], + [0.050594262778759, -5.2820024490356445], + [2.808561086654663, -4.337183952331543], + [-2.7239503860473633, -1.1574819087982178], + [-1.9389398097991943, -0.18297147750854492], + [-5.708336353302002, -0.811939537525177], + [2.547590970993042, -3.9294135570526123], + [-5.615278244018555, -0.7266839742660522], + [-2.615234375, 3.3990886211395264], + [-4.448439121246338, -0.6876780986785889], + [-5.114465713500977, 6.99247932434082], + [-4.80667781829834, 7.162982940673828], + [-3.5718438625335693, -0.13326925039291382], + [0.737082839012146, -8.012922286987305], + [-1.1740573644638062, 10.912582397460938], + [-0.8588371872901917, 1.1782780885696411], + [3.909787178039551, 6.9459333419799805], + [0.30322861671447754, -6.222293853759766], + [3.939439058303833, -3.388450860977173], + [1.657295823097229, 2.496090888977051], + [0.6759461164474487, -7.489223003387451], + [1.8802423477172852, 5.462740898132324], + [-5.1419806480407715, 5.699938774108887], + [-1.9564738273620605, 1.718263864517212], + [0.41001439094543457, -7.294208526611328], + [1.6275360584259033, 6.212584495544434], + [-3.8056516647338867, -1.9512625932693481], + [0.5925449132919312, -5.791520118713379], + [2.9040610790252686, -4.652484893798828], + [0.6330429911613464, -8.114405632019043], + [2.454591989517212, 4.2844438552856445], + [-5.482090950012207, 4.1892476081848145], + [-0.5669641494750977, 9.16058349609375], + [-2.157620668411255, -1.8409661054611206], + [1.8881645202636719, -2.547193765640259], + [-4.115790843963623, -2.5633914470672607], + [-2.0612263679504395, 1.2935168743133545], + [-3.1799166202545166, 4.52791690826416], + [-0.8245570063591003, 10.176067352294922], + [10.011675834655762, -3.0767133235931396], + [0.47212380170822144, -5.2515034675598145], + [0.800783097743988, -4.590329647064209], + [-1.928908348083496, 1.0398646593093872], + [-3.2113330364227295, -1.3551990985870361], + [0.6419571042060852, -8.827066421508789], + [0.3289405107498169, -5.630410671234131], + [-4.6542582511901855, 5.896173477172852], + [-0.9662360548973083, 10.685714721679688], + [3.586519718170166, 6.994349956512451], + [1.7067307233810425, -4.1463727951049805], + [-3.7885167598724365, -2.658292293548584], + [-1.8301376104354858, 1.4116190671920776], + [8.873648643493652, -2.651839017868042], + [-3.525146245956421, -2.443333864212036], + [8.097434997558594, -2.5462725162506104], + [-3.685264825820923, -2.0999443531036377], + [0.5303213596343994, -7.23863410949707], + [3.9843876361846924, -3.9179012775421143], + [-1.217572569847107, 10.778428077697754], + [-6.0932745933532715, -0.7392885088920593], + [-4.533018589019775, 5.097407341003418], + [-5.38828182220459, -0.919757604598999], + [-0.004902280867099762, -4.402063846588135], + [-3.9949676990509033, -0.4791639447212219], + [-1.2506481409072876, 11.748554229736328], + [-5.625535488128662, 5.277924060821533], + [-2.8502447605133057, -1.1150692701339722], + [0.612402617931366, -7.760951995849609], + [4.150880336761475, 6.93636417388916], + [-1.9594008922576904, 2.4739432334899902], + [2.6157162189483643, -3.6346356868743896], + [-1.2297512292861938, 11.340429306030273], + [3.083859920501709, -4.822023391723633], + [-2.8753790855407715, -1.7257672548294067], + [2.2798614501953125, 5.675447463989258], + [0.3215470612049103, 0.05483051761984825], + [5.567611217498779, 8.379293441772461], + [-5.054044246673584, 4.132990837097168], + [1.3145866394042969, -0.057768259197473526], + [-3.530733108520508, -2.106337308883667], + [2.4971282482147217, -3.968961000442505], + [3.657012701034546, 6.274221420288086], + [3.5671443939208984, 6.669396877288818], + [1.9026087522506714, 0.45773494243621826], + [-0.05755496770143509, -4.387170791625977], + [-2.880596876144409, 5.989977836608887], + [1.816406488418579, -4.496131896972656], + [0.84224534034729, -7.293597221374512], + [0.8637176156044006, -7.354347229003906], + [2.604144811630249, -6.336696147918701], + [-3.8240396976470947, -1.702457070350647], + [3.2881476879119873, 5.658535003662109], + [0.7056180238723755, -4.595076560974121], + [-3.7520720958709717, -1.380452275276184], + [2.2707526683807373, -4.268875598907471], + [-3.0316174030303955, -0.41708967089653015], + [0.7894418835639954, -4.15250825881958], + [-2.9681317806243896, -0.9130204916000366], + [0.5150372982025146, -7.170494079589844], + [-4.457987308502197, -1.3747797012329102], + [-1.0007195472717285, 10.44236946105957], + [1.8622424602508545, 0.1252884417772293], + [1.9086027145385742, -6.2393693923950195], + [-4.578456401824951, -4.2092061042785645], + [-2.814316987991333, 2.7621915340423584], + [-1.5243701934814453, -2.3188297748565674], + [-3.8985748291015625, -3.431964635848999], + [0.053145699203014374, -3.905890941619873], + [0.6316621899604797, -7.550150394439697], + [9.52495288848877, -2.8513991832733154], + [-1.334334135055542, 4.553867340087891], + [6.833089351654053, -2.3953375816345215], + [-3.389864206314087, 6.7224531173706055], + [-2.474005699157715, 2.41394305229187], + [-4.063167095184326, -1.060594081878662], + [0.6450480818748474, -7.983018398284912], + [3.465834856033325, 6.683943748474121], + [-1.2541742324829102, 11.273843765258789], + [0.4485217332839966, -6.882497787475586], + [-4.130198955535889, -1.2309719324111938], + [3.7045092582702637, -1.4853272438049316], + [-0.905034601688385, 9.387596130371094], + [-5.084131240844727, 6.748635292053223], + [-3.0519590377807617, -1.2725316286087036], + [-1.3498592376708984, 12.131084442138672], + [-4.520469665527344, 7.001101493835449], + [-2.1839520931243896, 0.9074786305427551], + [-2.7826895713806152, 2.98888897895813], + [3.1194612979888916, 7.1569719314575195], + [-5.466259002685547, -0.729893147945404], + [-1.0678486824035645, 1.5670559406280518], + [0.20469528436660767, -5.603421688079834], + [-1.4612196683883667, 12.226985931396484], + [1.2740598917007446, 4.890118598937988], + [1.888436198234558, 0.34573981165885925], + [4.871992588043213, 7.856072902679443], + [0.7404965758323669, -9.341845512390137], + [6.741748332977295, -1.8056718111038208], + [-0.4022122025489807, 9.770658493041992], + [6.872116565704346, -5.233595848083496], + [-2.0108466148376465, 0.24590885639190674], + [5.652017116546631, 8.239410400390625], + [5.845223903656006, -1.4662851095199585], + [1.8006343841552734, 0.2608470618724823], + [-2.37221097946167, 1.6869914531707764], + [-1.9570375680923462, 1.0378375053405762], + [-0.5598773956298828, -1.0271368026733398], + [-5.139232158660889, -0.9361667037010193], + [-1.0618318319320679, 10.083900451660156], + [0.7482491731643677, -8.281171798706055], + [-4.062008380889893, -0.8682854175567627], + [-0.8995620608329773, 1.6273905038833618], + [-1.8461581468582153, 1.7413760423660278], + [-3.0957095623016357, 3.2373273372650146], + [7.2909255027771, -2.2763423919677734], + [2.8800718784332275, -3.850489377975464], + [-0.4146110415458679, 9.630817413330078], + [-1.7243468761444092, 0.7530528903007507], + [6.16066312789917, -3.387026786804199], + [0.525161623954773, -5.822203159332275], + [-3.866257429122925, -0.8836091756820679], + [-3.6487345695495605, 6.692000389099121], + [-1.4160571098327637, 11.83899974822998], + [0.6327226758003235, -7.938201427459717], + [-1.9341927766799927, 1.605897068977356], + [5.335610866546631, -1.2000223398208618], + [-3.231374979019165, -1.1985141038894653], + [1.620643138885498, -5.758213043212891], + [-3.570178985595703, -1.430235505104065], + [2.9789154529571533, 5.938755512237549], + [-3.702636957168579, -4.1042962074279785], + [0.8202383518218994, -6.538556098937988], + [-4.32527494430542, -2.2774524688720703], + [1.0848462581634521, -5.879743576049805], + [-4.642037868499756, -0.7427287697792053], + [0.4440807104110718, 0.8050274848937988], + [3.987379789352417, 6.7664899826049805], + [9.6019926071167, -2.8898909091949463], + [2.7134201526641846, -5.262185096740723], + [0.9937394261360168, -0.38538938760757446], + [-2.9261910915374756, 2.8329949378967285], + [-1.5225874185562134, 12.654085159301758], + [7.118213176727295, -2.2399022579193115], + [-1.2445214986801147, -0.8184859156608582], + [2.8850035667419434, -5.154775142669678], + [-0.8481835126876831, 10.519180297851562], + [-1.1523373126983643, 10.111093521118164], + [-1.082250952720642, 4.440684795379639], + [0.5478610396385193, -7.594534873962402], + [1.23093843460083, -0.24885281920433044], + [2.444978713989258, 5.532273769378662], + [-3.60674786567688, -1.1373045444488525], + [-3.116892099380493, -2.272808790206909], + [-0.6954657435417175, 5.585697174072266], + [-1.1076040267944336, 11.478500366210938], + [-0.7689059972763062, 10.385421752929688], + [4.741611003875732, -2.1738157272338867], + [-1.3766392469406128, 11.205184936523438], + [-1.3088055849075317, 11.573631286621094], + [2.300654172897339, 4.854624271392822], + [-3.992022752761841, -1.3466957807540894], + [2.6945042610168457, -4.488052845001221], + [0.6582311987876892, -8.702874183654785], + [-0.3987395763397217, 9.490777969360352], + [2.305961847305298, -3.5723087787628174], + [-2.2958810329437256, 5.858654499053955], + [1.4768478870391846, 0.41567492485046387], + [-0.08753002434968948, -2.6248083114624023], + [5.943299293518066, -3.7382171154022217], + [2.398369073867798, -4.9829535484313965], + [0.5559116005897522, -6.901618957519531], + [-4.421640396118164, -1.1940590143203735], + [1.6718406677246094, 2.222059488296509], + [3.113931894302368, -4.8364386558532715], + [8.1409912109375, -2.5466701984405518], + [-5.235087871551514, 5.158755779266357], + [2.6591298580169678, -4.024941921234131], + [-2.8103439807891846, 4.957657337188721], + [-5.2882161140441895, -0.7671445608139038], + [0.5223236680030823, -6.328364849090576], + [-4.7207136154174805, 6.347482204437256], + [2.1113839149475098, 5.276810646057129], + [-1.4407199621200562, 11.80756950378418], + [-3.658414602279663, -5.048647403717041], + [-1.1007952690124512, 10.934768676757812], + [-0.9589044451713562, 10.215538024902344], + [6.138879776000977, -2.073906421661377], + [1.7107243537902832, 3.911052703857422], + [7.907498359680176, -2.7623705863952637], + [-1.9972171783447266, 2.4316771030426025], + [-3.5816869735717773, -2.8118371963500977], + [-4.793044567108154, 7.284661769866943], + [-5.097553730010986, 6.933854103088379], + [-0.1041015163064003, -5.094082355499268], + [-2.8890223503112793, -3.7786245346069336], + [-4.497577667236328, 6.925712585449219], + [1.0819282531738281, 4.410453796386719], + [-5.0658135414123535, -0.9619892239570618], + [-5.579222202301025, 6.418002605438232], + [0.6211464405059814, -8.888962745666504], + [-0.7517040967941284, 10.401932716369629], + [-4.362454414367676, 6.250946998596191], + [-3.552117347717285, -0.7902565002441406], + [-1.170500636100769, 10.85043716430664], + [1.8584505319595337, -3.9825313091278076], + [0.2836868166923523, 1.367377519607544], + [1.6808565855026245, -4.0294342041015625], + [4.033726692199707, -5.555192470550537], + [1.7196447849273682, 5.00845193862915], + [0.9008559584617615, -0.5147036910057068], + [-1.0430545806884766, 11.445653915405273], + [-3.6775150299072266, -1.241546869277954], + [0.07902847975492477, -4.84537935256958], + [5.740996837615967, -1.2882150411605835], + [-0.5123345851898193, -3.2142956256866455], + [-2.178260564804077, 4.771947860717773], + [8.384263038635254, -2.5118110179901123], + [6.866682052612305, -1.8174521923065186], + [-1.220373272895813, -0.8311878442764282], + [-1.03859543800354, 10.742996215820312], + [1.9385960102081299, 5.89937686920166], + [0.398514986038208, -5.712978839874268], + [-0.714866042137146, 9.824077606201172], + [7.623564720153809, -3.550200939178467], + [-3.983759641647339, -2.0385570526123047], + [8.008179664611816, -2.350360631942749], + [-5.249807834625244, 4.45943546295166], + [1.314121961593628, 2.848029136657715], + [0.8046191334724426, -0.4875074028968811], + [-1.8939698934555054, 2.1020278930664062], + [2.61545467376709, -4.500219345092773], + [0.4241190552711487, -7.907737731933594], + [4.718743801116943, 7.82790994644165], + [0.4659452438354492, -4.920660018920898], + [-1.063071608543396, 10.473697662353516], + [0.47890472412109375, -7.170464515686035], + [0.6819877028465271, -6.5164361000061035], + [0.43639445304870605, -5.118945598602295], + [-1.2875088453292847, 11.599684715270996], + [-3.7864248752593994, -3.6315758228302], + [6.8133864402771, -4.8722968101501465], + [4.272751331329346, -5.713858127593994], + [-1.2255759239196777, 10.582904815673828], + [-3.8873679637908936, -1.1758486032485962], + [1.661020278930664, 0.7199803590774536], + [2.6701459884643555, -4.282672882080078], + [8.435683250427246, -2.6081249713897705], + [0.8223668932914734, -7.209310054779053], + [-1.83782958984375, 1.6696668863296509], + [-1.296001672744751, 11.391006469726562], + [1.386738896369934, -5.775900363922119], + [1.6682511568069458, 4.020853519439697], + [0.6632516980171204, -7.660836696624756], + [1.0805115699768066, -4.488195419311523], + [-5.483326435089111, 2.8386545181274414], + [-4.04396390914917, 5.461954116821289], + [-5.6060895919799805, 7.319618225097656], + [2.4076428413391113, -5.4755048751831055], + [-3.9831652641296387, 4.509099006652832], + [-1.1191939115524292, 0.12080749869346619], + [-4.118527889251709, -1.0288046598434448], + [2.7332794666290283, -4.482602596282959], + [-4.41029691696167, -3.733710527420044], + [0.3701249361038208, -6.5667948722839355], + [-3.4813709259033203, 5.277618408203125], + [-0.7651452422142029, -1.5265729427337646], + [-0.14735689759254456, -2.169621229171753], + [2.644728660583496, -4.4063920974731445], + [2.8775599002838135, 6.045382499694824], + [-3.3485867977142334, -1.1521438360214233], + [-3.9590530395507812, -2.7789347171783447], + [2.61752986907959, -4.97808837890625], + [-1.1110676527023315, 1.5726832151412964], + [-1.9468028545379639, 2.610283613204956], + [-1.2320854663848877, 11.524093627929688], + [-4.172596454620361, -2.891295909881592], + [0.37539225816726685, -6.5320024490356445], + [5.845546245574951, -2.4086995124816895], + [-3.743455410003662, -1.18213951587677], + [0.5135063529014587, -6.9887471199035645], + [-2.1067423820495605, 2.4409663677215576], + [-3.905958414077759, -1.931749939918518], + [-3.6059138774871826, -1.9501591920852661], + [0.6060015559196472, -4.061054229736328], + [-1.1877622604370117, 10.152216911315918], + [-4.584096908569336, 6.020266532897949], + [3.113530397415161, 2.789429187774658], + [-1.0370370149612427, 9.987220764160156], + [1.9381792545318604, 2.812159776687622], + [1.247973918914795, -0.2218368500471115], + [-4.415396690368652, -2.904541015625], + [-3.317674398422241, -0.9126324653625488], + [0.53582763671875, -5.33852481842041], + [9.123112678527832, -2.720442295074463], + [7.7713303565979, -2.328211545944214], + [-0.6890599727630615, 10.021296501159668], + [-2.5562844276428223, 5.792434215545654], + [-1.2705867290496826, 11.664219856262207], + [2.8995249271392822, -4.525156021118164], + [2.160285711288452, -4.846329689025879], + [2.76233172416687, -5.266001224517822], + [0.7319032549858093, -5.012568473815918], + [2.8156111240386963, -4.748201370239258], + [1.5597238540649414, 4.512126445770264], + [2.5541293621063232, 3.0264086723327637], + [-1.0980020761489868, 1.0160911083221436], + [-2.0471274852752686, 1.8454495668411255], + [-5.900296688079834, 4.860162734985352], + [1.0445899963378906, -4.923595428466797], + [0.28170621395111084, -6.8347015380859375], + [0.6848720908164978, -6.34196662902832], + [-5.495367527008057, 3.161494016647339], + [0.7805034518241882, -6.269584655761719], + [-0.9554863572120667, 10.764243125915527], + [0.950636088848114, -6.295727729797363], + [3.4952707290649414, 6.968606472015381], + [1.9466655254364014, -3.5075395107269287], + [1.6587003469467163, 4.3506669998168945], + [-2.029170274734497, 0.10163813829421997], + [-0.20884987711906433, 3.9524877071380615], + [-0.7612026929855347, 8.67207145690918], + [-1.8941344022750854, 0.5729621052742004], + [-3.5461721420288086, -3.1040055751800537], + [2.554957151412964, -4.660736083984375], + [-0.5189180374145508, -3.9818034172058105], + [-3.8564741611480713, 5.529735565185547], + [0.5682238936424255, -7.600060939788818], + [-4.858066558837891, 6.645778179168701], + [-0.7010511159896851, 0.8385599851608276], + [-2.5673818588256836, -2.744715929031372], + [-3.698876142501831, -1.249954342842102], + [-5.0854363441467285, 6.021513938903809], + [-0.9940776228904724, 9.771875381469727], + [-1.5085959434509277, 1.469403862953186], + [5.406698226928711, -2.9009830951690674], + [-1.483393907546997, 11.746255874633789], + [0.5718176960945129, -0.6649094223976135], + [-1.1717649698257446, 10.930456161499023], + [5.12063455581665, -2.2752485275268555], + [-2.8516151905059814, -1.5564603805541992], + [7.556656360626221, -3.42588210105896], + [2.219022035598755, -5.2601799964904785], + [0.6023722290992737, -7.791929244995117], + [2.52229380607605, -4.740952968597412], + [6.7861328125, -2.2598109245300293], + [-5.033718109130859, 3.7197539806365967], + [5.248643398284912, -4.362979888916016], + [-2.6570146083831787, 2.712287187576294], + [-1.4981825351715088, 1.6347979307174683], + [0.49981433153152466, -6.651594161987305], + [-4.670961856842041, 6.729809761047363], + [-3.8692474365234375, -2.9113881587982178], + [0.0008962973952293396, -4.2099690437316895], + [2.7165355682373047, 6.297947883605957], + [8.966879844665527, -2.78403377532959], + [-3.4006869792938232, -1.117346167564392], + [-4.486929416656494, -3.6258625984191895], + [-1.1898300647735596, 1.380920648574829], + [0.6651468276977539, 4.264015197753906], + [7.300835132598877, -3.242387294769287], + [1.1466145515441895, -0.24712997674942017], + [4.17061710357666, 7.0330810546875], + [5.014388084411621, 7.907135963439941], + [-2.219794511795044, 6.000888824462891], + [0.47937798500061035, -7.093948841094971], + [2.9779016971588135, -4.269441604614258], + [4.279739856719971, 7.284599304199219], + [-0.07498124986886978, -4.609392166137695], + [-4.414624214172363, 6.27016544342041], + [1.8685007095336914, 3.051375150680542], + [-5.079398155212402, -1.2274307012557983], + [-2.0187437534332275, 1.4560290575027466], + [-4.630961894989014, -0.7600995302200317], + [-1.155146837234497, 10.71064567565918], + [-2.964315891265869, -2.5357701778411865], + [-0.913363516330719, 1.6763676404953003], + [7.082126140594482, -3.7897989749908447], + [-3.3716084957122803, -1.3293485641479492], + [2.657365083694458, -4.357957363128662], + [7.525609493255615, -2.0578019618988037], + [8.591506004333496, -3.265031099319458], + [2.01967716217041, -4.671043872833252], + [-3.165818452835083, -2.2278170585632324], + [-3.186861038208008, -2.095489740371704], + [8.19743824005127, -3.530301570892334], + [-2.058197259902954, 1.3398579359054565], + [-3.943277359008789, 4.065639972686768], + [2.0758278369903564, -5.693338394165039], + [-0.9665970206260681, 10.310216903686523], + [-3.6228392124176025, 5.782285213470459], + [0.6924028992652893, -8.893774032592773], + [0.7500502467155457, -6.846610069274902], + [-1.5424752235412598, 1.9950953722000122], + [-4.634298324584961, 3.022648572921753], + [5.236966609954834, -2.199568033218384], + [-4.3297271728515625, 5.180920600891113], + [1.0282037258148193, 0.8865785002708435], + [2.2145402431488037, -4.586165428161621], + [-2.96875, 0.007302340120077133], + [0.7799632549285889, -5.475006103515625], + [-0.910772979259491, -0.7183749675750732], + [-0.6894803643226624, 9.895225524902344], + [-1.327215313911438, 11.586343765258789], + [0.45827823877334595, -0.8795239329338074], + [-3.818086862564087, -1.220237135887146], + [5.180501461029053, -2.492567300796509], + [-2.533564329147339, -2.174612283706665], + [-2.624387264251709, -0.8996237516403198], + [0.31963950395584106, -6.812041282653809], + [0.3536001145839691, -4.836019039154053], + [8.275922775268555, -2.6136586666107178], + [-1.0031888484954834, 9.906715393066406], + [7.6904449462890625, -3.1799752712249756], + [0.5841553807258606, -6.082464218139648], + [-1.767099142074585, 1.713922381401062], + [7.250236988067627, -2.158369779586792], + [1.8126577138900757, 0.2962024211883545], + [0.6177839636802673, -8.13408374786377], + [2.173339605331421, -4.415125846862793], + [0.450369656085968, -4.6816205978393555], + [-0.20477885007858276, 9.068147659301758], + [-4.468387603759766, 4.350452423095703], + [-1.0948127508163452, 11.251291275024414], + [-5.488786220550537, 2.7030928134918213], + [-4.20714807510376, -0.5726801156997681], + [-4.058883190155029, -2.2583210468292236], + [-0.9514550566673279, 10.83487319946289], + [-1.389061689376831, 11.68001937866211], + [2.6365838050842285, 5.559378147125244], + [-3.4619600772857666, 4.968769073486328], + [1.281524658203125, -0.09528398513793945], + [4.1818156242370605, -3.759784460067749], + [0.3175756335258484, -5.824919700622559], + [-1.3673436641693115, 11.860811233520508], + [0.48734021186828613, 0.9263855218887329], + [2.745527982711792, -4.521984577178955], + [1.858485460281372, -4.55510950088501], + [0.021888189017772675, 4.563600063323975], + [1.9109387397766113, -4.95105504989624], + [4.032739162445068, 6.948484420776367], + [-3.7199742794036865, -2.0658161640167236], + [-1.2945207357406616, 11.39836597442627], + [1.9615364074707031, 5.335609436035156], + [0.720192551612854, -8.410554885864258], + [0.5101739168167114, -7.482783317565918], + [-1.3300416469573975, 1.257135033607483], + [-0.25389549136161804, -1.653882622718811], + [1.7624492645263672, -4.386012077331543], + [2.8252944946289062, -4.473649024963379], + [6.212744235992432, -2.3054826259613037], + [1.601201057434082, 0.9178920388221741], + [2.240522861480713, 5.689221382141113], + [-1.3907700777053833, 11.695956230163574], + [-3.5836753845214844, -1.7965294122695923], + [-3.46681809425354, -3.0298235416412354], + [2.3959031105041504, -4.130951881408691], + [5.723727703094482, -1.0786956548690796], + [-3.7105705738067627, 5.7025604248046875], + [-3.423168420791626, 5.672104358673096], + [-1.0727475881576538, 8.772342681884766], + [2.380707025527954, -3.8942339420318604], + [0.7123237252235413, -5.648550033569336], + [1.962829828262329, -4.273068904876709], + [-5.534553050994873, -1.0973511934280396], + [-4.475644111633301, 6.698174953460693], + [6.774105548858643, -1.538615107536316], + [-0.5692670345306396, -0.6470632553100586], + [3.017484426498413, -4.122533798217773], + [5.1810150146484375, -3.8764989376068115], + [-5.600071430206299, -4.367535591125488], + [0.7003801465034485, -8.294232368469238], + [0.656669557094574, -8.129981994628906], + [-4.53995943069458, -0.935218334197998], + [0.5582820773124695, -8.045483589172363], + [7.806699275970459, -3.094083309173584], + [6.129952430725098, -1.4563239812850952], + [0.3734897971153259, -6.538055419921875], + [-3.8513667583465576, 5.740822792053223], + [-0.7935713529586792, 10.40230941772461], + [1.5150723457336426, 5.801767826080322], + [0.6970469355583191, -4.837891578674316], + [3.0488839149475098, -5.132503509521484], + [7.355841159820557, -2.527181386947632], + [2.767545461654663, -4.291445732116699], + [-5.2774200439453125, 6.744865417480469], + [2.185009241104126, 3.467207670211792], + [-2.1890783309936523, 1.09577476978302], + [2.723306894302368, -4.250877380371094], + [4.6885504722595215, -5.250205039978027], + [6.830358028411865, -3.4934961795806885], + [1.053270936012268, -0.3778952956199646], + [-1.101637363433838, 0.6261412501335144], + [0.32138490676879883, -6.780986785888672], + [7.6834025382995605, -2.3302643299102783], + [-3.632530689239502, -1.572290301322937], + [-0.325084388256073, -1.1619552373886108], + [-5.412759780883789, 2.9503445625305176], + [-1.1549361944198608, 1.8283377885818481], + [-3.328587770462036, -1.4802855253219604], + [-5.236555099487305, 7.150809288024902], + [6.930580139160156, -4.488752365112305], + [-0.337402880191803, 8.127270698547363], + [-1.2527035474777222, 11.212661743164062], + [2.115025043487549, -3.7416012287139893], + [0.7654697895050049, -0.5147809982299805], + [-4.624688148498535, 0.1522032618522644], + [-2.7093238830566406, -1.8075288534164429], + [3.999927282333374, -3.4756581783294678], + [1.1962122917175293, -0.03815481439232826], + [1.6443486213684082, -4.825810432434082], + [8.891792297363281, -2.671412944793701], + [5.842133045196533, -3.516136884689331], + [-1.8265631198883057, 1.795399785041809], + [1.3666377067565918, 5.319448471069336], + [0.8881449699401855, -4.384666442871094], + [1.1284630298614502, 6.3470892906188965], + [-2.6984031200408936, 5.000298976898193], + [-0.42453163862228394, -0.8485252857208252], + [1.3084235191345215, 5.055758953094482], + [2.8577303886413574, -4.390585422515869], + [7.866970062255859, -3.4724433422088623], + [0.6426646113395691, -4.684704303741455], + [6.3487324714660645, -2.8140599727630615], + [8.922207832336426, -2.785963773727417], + [-0.9597391486167908, 10.738080978393555], + [0.2856789529323578, -4.190486431121826], + [0.5261947512626648, -7.826117515563965], + [5.218054294586182, -2.1008498668670654], + [-4.020500659942627, -1.3856240510940552], + [0.5441073775291443, -4.73007345199585], + [0.7936343550682068, -4.42008638381958], + [-3.2931838035583496, -0.8579074144363403], + [-0.6740890741348267, 10.558405876159668], + [-1.2056471109390259, 11.17294692993164], + [-1.0286846160888672, 10.757640838623047], + [1.0800089836120605, -7.011394500732422], + [0.3667715787887573, -6.464815139770508], + [1.8315894603729248, -5.526090621948242], + [-2.7081825733184814, -1.8239814043045044], + [-2.6781601905822754, 2.6449646949768066], + [-4.0964813232421875, 0.05721073970198631], + [8.085829734802246, -2.7909927368164062], + [-3.792388916015625, -1.0949960947036743], + [0.6446139812469482, -8.770784378051758], + [-1.2419387102127075, 11.034622192382812], + [2.6901447772979736, -4.631470203399658], + [7.686561584472656, -3.0501558780670166], + [-4.7567925453186035, -4.553889751434326], + [-3.3857662677764893, -1.3845834732055664], + [2.93294358253479, -4.787419319152832], + [3.050412893295288, -4.08120059967041], + [-0.5550011396408081, 9.1555814743042], + [-3.64916729927063, -1.7782891988754272], + [-3.4126169681549072, -1.3831679821014404], + [-0.7970318794250488, -0.7593222856521606], + [-5.125422954559326, -0.47668665647506714], + [-3.673595666885376, -1.2763601541519165], + [-4.485934257507324, 2.107297420501709], + [-4.2038726806640625, -2.4488723278045654], + [8.423763275146484, -2.814875364303589], + [-3.664350748062134, -2.5320141315460205], + [-1.8885304927825928, 0.3852383494377136], + [-1.439575433731079, 12.729498863220215], + [5.653904914855957, -1.2533005475997925], + [1.5364527702331543, 3.4263482093811035], + [-3.514207124710083, -2.918656587600708], + [6.643954277038574, -3.0636160373687744], + [-1.1216962337493896, 9.896265029907227], + [0.9060620665550232, -6.155704498291016], + [2.799344778060913, -5.209911346435547], + [-4.688687801361084, 5.143578052520752], + [-1.9111573696136475, -0.7235957980155945], + [2.0557196140289307, -6.296876430511475], + [-4.573262691497803, -3.4277327060699463], + [-4.904669761657715, 7.251378059387207], + [5.548743724822998, -1.2231720685958862], + [1.3402656316757202, 3.511120557785034], + [0.683194100856781, -6.98423433303833], + [-4.360156536102295, 0.2646796703338623], + [7.260191440582275, -3.6350481510162354], + [-1.5572426319122314, 0.7638639211654663], + [2.516188859939575, 0.6533398628234863], + [-4.645619869232178, -0.6169216632843018], + [1.145728349685669, -4.528098106384277], + [2.1101715564727783, 4.356886863708496], + [2.6520915031433105, 6.407930374145508], + [-4.186029434204102, 4.910660743713379], + [5.536068439483643, -1.6380127668380737], + [8.076040267944336, -2.4085543155670166], + [-1.30104660987854, 11.725018501281738], + [-4.04238224029541, -2.564074754714966], + [1.0335118770599365, 1.7222591638565063], + [5.423803329467773, 8.169533729553223], + [-1.7362948656082153, 1.1675750017166138], + [0.8096226453781128, -0.5113130211830139], + [0.623507022857666, -0.6504581570625305], + [8.043341636657715, -2.379511594772339], + [-0.41711902618408203, 11.380720138549805], + [0.6387568712234497, -8.416009902954102], + [-3.4458365440368652, -1.0968540906906128], + [2.709444761276245, -4.4799346923828125], + [-3.616901397705078, -1.5614080429077148], + [-3.8953919410705566, -1.543030858039856], + [-0.9671366810798645, 1.895363450050354], + [7.157476425170898, -3.418128490447998], + [-1.6801053285598755, 2.2146878242492676], + [0.1964157223701477, -5.894661903381348], + [-3.425168037414551, 6.492059707641602], + [-0.7792852520942688, 9.637744903564453], + [0.659137487411499, -7.499348163604736], + [-4.601364612579346, -0.6531712412834167], + [-4.821805000305176, 3.0361804962158203], + [2.8917572498321533, -4.478781223297119], + [5.1511101722717285, -1.101514458656311], + [-3.5957372188568115, -1.672394871711731], + [2.597425937652588, -4.649017333984375], + [1.3266973495483398, 4.319148063659668], + [-2.0028164386749268, 1.3977519273757935], + [9.167343139648438, -2.8862297534942627], + [-1.229276418685913, 11.118921279907227], + [-4.037275314331055, -2.6329686641693115], + [-2.4110076427459717, 2.365790367126465], + [7.201341152191162, -2.5405218601226807], + [-5.020214557647705, 5.787950038909912], + [3.606271982192993, 6.585027694702148], + [-4.56988000869751, 2.8186147212982178], + [-1.7435414791107178, 2.0621750354766846], + [0.024326108396053314, -4.08449649810791], + [-1.2779884338378906, 11.09065055847168], + [-1.683560848236084, -1.8868199586868286], + [-4.793885231018066, 6.536022186279297], + [-0.7101748585700989, 9.653942108154297], + [7.747198581695557, -2.8205080032348633], + [-5.406664848327637, 5.160218715667725], + [0.249100923538208, -0.08530610799789429], + [-1.5456297397613525, 12.695733070373535], + [8.190736770629883, -2.6367242336273193], + [0.5898123979568481, -8.04174518585205], + [0.6212906241416931, -7.074646472930908], + [1.9997270107269287, -4.97761869430542], + [5.070112228393555, 8.21767807006836], + [0.5152934193611145, -5.289827346801758], + [2.949230432510376, -4.688129425048828], + [0.673575222492218, -8.340550422668457], + [-3.3378026485443115, -1.0297425985336304], + [-1.8431309461593628, 0.8238154649734497], + [-5.02173376083374, 5.3720316886901855], + [-1.2916271686553955, -1.273506760597229], + [1.155600905418396, 4.168656826019287], + [0.516090452671051, -6.585343360900879], + [3.1065590381622314, -4.92640495300293], + [0.8423332571983337, -5.053717613220215], + [5.132119655609131, -3.675361156463623], + [-5.718265533447266, 7.65336799621582], + [0.1543910801410675, -3.6487817764282227], + [-1.1746596097946167, 10.27695083618164], + [-4.377213001251221, 0.8274498581886292], + [-1.111899971961975, 11.338577270507812], + [0.7097679972648621, -0.6729227304458618], + [-3.3512635231018066, -1.157773494720459], + [0.25131839513778687, 0.15283077955245972], + [-1.9331557750701904, 1.4934179782867432], + [7.968612194061279, -2.615657329559326], + [-5.96865701675415, 5.809048175811768], + [-1.4787266254425049, 2.2240538597106934], + [-0.21546322107315063, 8.001163482666016], + [-0.6322715878486633, 10.456571578979492], + [-3.5416057109832764, -2.031949043273926], + [1.1747605800628662, -6.236224174499512], + [2.0820744037628174, -4.322963237762451], + [-5.102572917938232, 6.73244571685791], + [6.279461860656738, -3.417893409729004], + [0.4507846236228943, -2.591137647628784], + [-3.2651121616363525, -1.0667978525161743], + [-3.574336290359497, -3.8047945499420166], + [2.977437973022461, -4.828366756439209], + [-3.553212881088257, -1.5040878057479858], + [1.2101974487304688, 4.830717086791992], + [0.6741445064544678, -8.54617691040039], + [-1.4686161279678345, 11.999013900756836], + [-2.6369564533233643, 6.2683329582214355], + [-3.342442274093628, -1.188623070716858], + [-1.7532219886779785, -2.977903127670288], + [2.5165786743164062, -4.423279762268066], + [7.368895530700684, -2.2457573413848877], + [2.832984685897827, -4.411218643188477], + [-4.359656810760498, -3.877595901489258], + [7.751928806304932, -2.942868947982788], + [-3.891183614730835, 4.800463676452637], + [-0.446294903755188, 10.201086044311523], + [-3.3090195655822754, -1.2572650909423828], + [-4.46781587600708, -1.0423024892807007], + [8.101963996887207, -2.81089186668396], + [-4.756103515625, -4.80051851272583], + [8.676981925964355, -2.6144609451293945], + [-1.6710560321807861, 1.5489906072616577], + [-3.341827154159546, 0.032013650983572006], + [-5.218426704406738, 5.959380149841309], + [-3.8893916606903076, 6.025890827178955], + [-1.3063123226165771, -0.15646642446517944], + [7.323989391326904, -3.5094943046569824], + [-0.8463792204856873, -0.6199129819869995], + [1.276265263557434, 5.934054374694824], + [1.8545019626617432, -4.121699333190918], + [6.578645706176758, -3.2746918201446533], + [0.031172864139080048, -1.6608706712722778], + [-3.5917422771453857, 5.567334175109863], + [0.2880703806877136, -5.795676231384277], + [-0.10863388329744339, 9.23159122467041], + [0.3565971255302429, -5.556307792663574], + [-1.3941009044647217, 11.540452003479004], + [-3.9273531436920166, -1.956608772277832], + [-2.9337799549102783, 5.022130966186523], + [-3.868450880050659, -2.6459453105926514], + [2.7905502319335938, -5.164496421813965], + [0.4806599020957947, -0.3302486538887024], + [-3.621361017227173, -1.1717795133590698], + [7.428798198699951, -2.9648473262786865], + [6.633663654327393, -2.835327386856079], + [-1.231421709060669, -0.6848316788673401], + [3.5334558486938477, -3.7036542892456055], + [0.02328350394964218, -4.8256025314331055], + [-2.476748466491699, 2.4998064041137695], + [1.6109142303466797, 3.982867479324341], + [-1.3731882572174072, 11.410313606262207], + [0.6428267359733582, -7.093473434448242], + [4.743056774139404, 7.729450225830078], + [0.8225723505020142, -6.58607292175293], + [-3.4061105251312256, -1.1895860433578491], + [-0.5090286135673523, -0.8733546733856201], + [-3.5028188228607178, -2.8768913745880127], + [-3.684471607208252, -1.2551344633102417], + [-4.712489604949951, -1.9003833532333374], + [8.021148681640625, -2.510495901107788], + [1.3437246084213257, 4.7932844161987305], + [-4.197974681854248, -1.7856773138046265], + [0.7206259369850159, -9.044443130493164], + [-5.139549732208252, 7.027734279632568], + [-4.445094108581543, -3.3215880393981934], + [-1.9834712743759155, 1.3175734281539917], + [-5.063991069793701, -1.3520530462265015], + [-3.8519444465637207, -2.5029327869415283], + [7.921903133392334, -3.4838905334472656], + [-4.377110958099365, -0.7964544296264648], + [-4.031299591064453, -2.702197551727295], + [6.935604095458984, -3.9188077449798584], + [-2.88303804397583, -0.8120737671852112], + [0.5595646500587463, -7.223486423492432], + [-4.574398517608643, -1.2048403024673462], + [5.35371732711792, -2.3120405673980713], + [1.4277136325836182, 1.5166329145431519], + [5.770891189575195, 8.47447395324707], + [0.12711328268051147, -5.048067092895508], + [-5.210978031158447, -1.1021956205368042], + [-0.35950034856796265, 2.550943374633789], + [-2.43939471244812, 1.403365969657898], + [-0.1297430396080017, 8.59201431274414], + [-1.3379602432250977, 4.585500717163086], + [-0.5974185466766357, 1.019274115562439], + [2.8083508014678955, -4.382962226867676], + [2.2138774394989014, 2.5395116806030273], + [-2.9668591022491455, 4.412202835083008], + [0.7965341210365295, -6.940425872802734], + [0.7335694432258606, -6.9954376220703125], + [0.5302490592002869, -7.416343688964844], + [1.1565399169921875, -6.171948432922363], + [1.0087130069732666, -6.03624153137207], + [0.5702266097068787, -6.86636209487915], + [1.7252466678619385, -4.315011024475098], + [0.5721532106399536, -1.026914358139038], + [8.571179389953613, -3.0209624767303467], + [0.24996140599250793, -5.253939628601074], + [-3.582092046737671, -0.8323615789413452], + [-4.673757076263428, -0.9387140870094299], + [2.985093116760254, -4.88838529586792], + [-4.903797626495361, 5.230416297912598], + [-4.667858600616455, 5.241328716278076], + [-4.059159755706787, 3.7668874263763428], + [0.4965869188308716, -6.717517852783203], + [6.694882869720459, -1.568192720413208], + [-1.319634199142456, -2.4744999408721924], + [0.5414917469024658, -7.171097755432129], + [0.5147057771682739, -0.7982619404792786], + [-5.7024712562561035, 7.796245574951172], + [-3.4678690433502197, -1.626000165939331], + [-5.945587635040283, 5.557341575622559], + [0.8990289568901062, -7.784881114959717], + [-5.760258197784424, -0.6587759852409363], + [-1.9467124938964844, 2.092750310897827], + [2.777778148651123, -5.184868812561035], + [6.360154151916504, -1.8522624969482422], + [0.5774849057197571, -6.529331684112549], + [-4.658721446990967, 6.315385818481445], + [-4.852748394012451, 4.149521827697754], + [1.9780910015106201, 4.019765377044678], + [0.24857360124588013, 5.370336055755615], + [-3.9202940464019775, -1.691020131111145], + [6.307141304016113, -1.5723021030426025], + [-3.606975555419922, 4.438782691955566], + [-0.982658326625824, 9.401103019714355], + [-0.953857958316803, 10.206294059753418], + [-4.409643650054932, -3.4892985820770264], + [0.7469595670700073, -8.443662643432617], + [8.270787239074707, -2.9243669509887695], + [1.6406564712524414, 4.696393966674805], + [5.931686878204346, -2.5708348751068115], + [2.6041128635406494, -5.143877983093262], + [1.2811553478240967, -8.093511581420898], + [-1.8088479042053223, -1.7062140703201294], + [0.4822356104850769, 0.6406798362731934], + [2.1564488410949707, 6.212671279907227], + [1.8217248916625977, 4.1451945304870605], + [-1.2821288108825684, 11.509188652038574], + [-5.853666305541992, -4.8926310539245605], + [-3.860272169113159, -2.4794270992279053], + [4.069909572601318, 6.889405250549316], + [2.8311028480529785, -4.371736526489258], + [-1.3554322719573975, 12.343591690063477], + [-2.03165602684021, 0.5678223371505737], + [0.5876598358154297, -8.155614852905273], + [-2.187648057937622, 1.8390913009643555], + [6.010669231414795, -1.871448278427124], + [4.384624004364014, -2.9796905517578125], + [0.6670936346054077, -0.5248686075210571], + [-2.4496641159057617, 2.512152910232544], + [-1.7676359415054321, 0.8575602173805237], + [-1.8669103384017944, 1.1337864398956299], + [1.9775288105010986, -3.4701805114746094], + [1.2874335050582886, -4.908079147338867], + [0.4836985468864441, -5.391075134277344], + [-3.8539788722991943, -1.125545620918274], + [-3.2560465335845947, -1.0978447198867798], + [5.634363174438477, 8.463142395019531], + [-1.1654502153396606, 10.56944465637207], + [2.76460337638855, -5.0808305740356445], + [2.005746841430664, 3.753431558609009], + [-4.329883098602295, -0.8598259091377258], + [-2.1098666191101074, -0.1733253002166748], + [-4.002199172973633, -4.254162788391113], + [-4.354470252990723, -0.23333704471588135], + [1.5759862661361694, 1.744698166847229], + [8.40202808380127, -2.4284889698028564], + [-3.2862067222595215, -1.281176209449768], + [-4.04591703414917, -2.1813323497772217], + [2.836031436920166, -4.749053478240967], + [-1.130307912826538, -1.1427768468856812], + [2.7984278202056885, -4.7715253829956055], + [-2.1071741580963135, 2.466425895690918], + [2.6421806812286377, -4.705403804779053], + [-4.886114597320557, 7.440868377685547], + [1.0537292957305908, 6.28392219543457], + [0.8480246663093567, 7.175085067749023], + [-0.7799910306930542, 10.221332550048828], + [1.890214204788208, 2.6034774780273438], + [-0.9702875018119812, 9.394674301147461], + [0.6811328530311584, -5.058139324188232], + [-0.9347019791603088, -2.5863535404205322], + [-4.622845649719238, 5.658411979675293], + [0.42598652839660645, -0.027598578482866287], + [-0.019223429262638092, -3.9145138263702393], + [3.1569879055023193, -5.38279390335083], + [-1.0405393838882446, 0.44735050201416016], + [-2.093745708465576, -3.4378762245178223], + [0.20083358883857727, -5.190351486206055], + [0.4697486162185669, -0.6914488673210144], + [4.830082416534424, -2.7408511638641357], + [1.2529239654541016, -3.953068494796753], + [0.7135381102561951, -7.666835308074951], + [-4.777258396148682, -0.7266305685043335], + [0.6419065594673157, -8.344733238220215], + [8.575319290161133, -3.0241010189056396], + [-0.220124751329422, -2.954167127609253], + [-4.821888446807861, 5.212840557098389], + [0.6553850173950195, -7.424797058105469], + [-1.1159534454345703, 11.131406784057617], + [-1.3562750816345215, 11.80669116973877], + [2.264308214187622, 4.679288864135742], + [-0.4111964702606201, 6.332481861114502], + [4.899740695953369, -3.6125054359436035], + [-2.218463659286499, -1.94922935962677], + [-1.9296820163726807, 1.0442842245101929], + [-0.4407004714012146, 9.645383834838867], + [0.605637788772583, -5.250822067260742], + [-2.9910476207733154, -2.48176908493042], + [4.63610315322876, -3.849061965942383], + [0.642977774143219, -8.006115913391113], + [-2.4782235622406006, 0.5551615357398987], + [5.750166416168213, -1.2483543157577515], + [2.425121545791626, -5.01175594329834], + [0.7236549258232117, -0.5550428628921509], + [-0.5943668484687805, -1.2414637804031372], + [7.238519191741943, -3.2481818199157715], + [0.9031122922897339, -5.197218894958496], + [-3.412883996963501, -3.367013692855835], + [-0.5763742327690125, 9.793133735656738], + [-1.846178412437439, 0.9572397470474243], + [1.2152889966964722, -5.276342391967773], + [-0.5658009648323059, 9.975125312805176], + [6.189476013183594, -3.2697479724884033], + [7.289504051208496, -2.6969029903411865], + [-4.318020343780518, 6.542037010192871], + [-0.052245862782001495, -3.5984554290771484], + [-3.29296612739563, -1.1321592330932617], + [-2.407463312149048, 4.464847564697266], + [1.8955110311508179, 0.27055394649505615], + [2.6659862995147705, -4.756810665130615], + [-2.1508758068084717, 2.079533815383911], + [0.32090502977371216, -5.850820541381836], + [-1.009357213973999, 1.2877005338668823], + [3.25582218170166, -5.023833274841309], + [-0.0316438153386116, -0.745957612991333], + [6.695462703704834, -2.9218952655792236], + [2.2892234325408936, 6.474764823913574], + [-1.8972538709640503, -0.588720977306366], + [-4.353644371032715, -3.7285492420196533], + [-3.4948458671569824, -1.7442771196365356], + [-5.097212314605713, 7.2493205070495605], + [-3.9493191242218018, -1.4048460721969604], + [-3.7884504795074463, -1.4603419303894043], + [-3.6420247554779053, -2.473784923553467], + [-1.2829819917678833, -1.858892798423767], + [4.659271240234375, 7.365847587585449], + [-1.3436815738677979, 1.771117091178894], + [2.5649778842926025, -4.005751132965088], + [-1.715120792388916, -1.6745651960372925], + [-2.1226308345794678, 4.996081352233887], + [-0.5367308855056763, -1.0201499462127686], + [7.9289116859436035, -3.211536407470703], + [0.7805931568145752, -5.557980060577393], + [2.821418285369873, -0.2990949749946594], + [5.07442045211792, -2.7566404342651367], + [-3.7824904918670654, -1.6731396913528442], + [-4.5014801025390625, -3.3792214393615723], + [-4.9338812828063965, 7.335144996643066], + [0.7574527859687805, -8.303844451904297], + [2.4188897609710693, -4.7433247566223145], + [0.4267374873161316, -6.340299129486084], + [-1.0596425533294678, 10.79055404663086], + [2.516164541244507, 4.444531440734863], + [3.2530837059020996, 5.953313827514648], + [2.735072612762451, -4.764233112335205], + [3.480477809906006, 6.64112663269043], + [-0.7053061723709106, 9.616341590881348], + [7.7048797607421875, -3.8659136295318604], + [-0.17325687408447266, -1.3099805116653442], + [2.0740933418273926, 3.820812940597534], + [1.977855920791626, 3.1742360591888428], + [2.3548624515533447, -4.360212326049805], + [-4.3547892570495605, -2.9987080097198486], + [0.6484688520431519, -7.298976421356201], + [-3.040102243423462, 4.414584159851074], + [-0.8402101397514343, 10.446697235107422], + [-4.202208995819092, -1.4825934171676636], + [-4.78940486907959, 5.936124324798584], + [-2.910259485244751, 7.01564359664917], + [-3.291552782058716, 5.341787338256836], + [-4.579680919647217, -0.6626235842704773], + [3.2384886741638184, -4.965435028076172], + [6.870347499847412, -2.3758461475372314], + [-6.0707244873046875, 8.502938270568848], + [2.660536289215088, 4.745114803314209], + [-4.899864196777344, -2.135236978530884], + [2.048854112625122, 5.910033226013184], + [-0.7711428999900818, 10.386008262634277], + [5.979827404022217, -3.878495216369629], + [-3.601776361465454, -0.9816771745681763], + [-3.9539988040924072, -1.7158787250518799], + [-1.809253454208374, 2.2721645832061768], + [0.6377242207527161, -8.22115707397461], + [2.8207173347473145, 4.37173318862915], + [-3.0097100734710693, 6.449868202209473], + [-1.748945713043213, 2.324788808822632], + [8.087284088134766, -2.347766637802124], + [-5.261898517608643, -0.754393994808197], + [-0.8755186796188354, 5.7930827140808105], + [-0.3505740761756897, 8.912471771240234], + [1.1683673858642578, -4.762632369995117], + [0.5046424865722656, -0.491422563791275], + [0.3214593529701233, -5.389459609985352], + [0.6689168214797974, -5.634241104125977], + [-0.7063912749290466, 10.174139022827148], + [-3.7002909183502197, -1.8268896341323853], + [0.8552750945091248, -6.785419464111328], + [-3.5772368907928467, -0.9889847040176392], + [-4.090110778808594, 5.042904853820801], + [-0.20347627997398376, -1.1001657247543335], + [-4.199384689331055, -0.6599302291870117], + [0.5745062232017517, -8.019173622131348], + [-1.2208483219146729, 11.536617279052734], + [-0.8968966007232666, 10.372655868530273], + [-3.381056547164917, -3.4728612899780273], + [-0.10568184405565262, -2.6085927486419678], + [7.848819732666016, -2.7803471088409424], + [1.2224822044372559, 4.754453659057617], + [-4.138697624206543, -1.4736863374710083], + [-3.7854700088500977, -1.318583369255066], + [-1.416608452796936, 11.761663436889648], + [5.6088714599609375, -1.8069368600845337], + [-1.5423427820205688, 1.329172968864441], + [-1.1076350212097168, 1.4780291318893433], + [-3.8384034633636475, -2.508014440536499], + [1.711560606956482, -6.19635009765625], + [2.769319534301758, -4.587825298309326], + [8.413414001464844, -2.9462528228759766], + [2.7513856887817383, -4.949020862579346], + [1.1885945796966553, -4.106387138366699], + [1.63699471950531, 4.6664323806762695], + [-3.9850971698760986, -2.798741579055786], + [1.6500954627990723, 4.440840721130371], + [-4.383792877197266, 5.3524274826049805], + [0.6201421618461609, -5.150206565856934], + [-3.3288631439208984, -1.1808937788009644], + [-3.1185882091522217, -0.7277190685272217], + [6.793406009674072, -2.908320665359497], + [2.643927812576294, -4.913220405578613], + [-3.8030452728271484, -0.9151468276977539], + [0.055646948516368866, -4.383525848388672], + [-0.887593686580658, 10.35004997253418], + [0.00491517037153244, -0.8750383853912354], + [-1.9351627826690674, 2.370958089828491], + [6.289440155029297, -3.1410398483276367], + [9.409418106079102, -2.8154430389404297], + [-3.074587345123291, 4.459796905517578], + [-3.1690611839294434, -0.836470365524292], + [-0.09364605695009232, -3.6769583225250244], + [-4.198272228240967, 0.9305542707443237], + [2.6278913021087646, -4.276288986206055], + [1.1508429050445557, -6.968570232391357], + [8.647109985351562, -2.5933518409729004], + [-3.938828706741333, -1.269493579864502], + [0.3714684844017029, -6.34792947769165], + [4.59378719329834, 7.528348445892334], + [-3.9792377948760986, -1.7148267030715942], + [3.0012662410736084, 6.85173225402832], + [-3.9694724082946777, -1.4901108741760254], + [-1.088148593902588, 0.5082007646560669], + [0.9081297516822815, 0.04700642451643944], + [6.654235363006592, -2.4862477779388428], + [0.6977627873420715, -9.162830352783203], + [0.2701913118362427, -6.29303503036499], + [-1.7324786186218262, 2.5105926990509033], + [-1.3901879787445068, 11.750442504882812], + [3.074751138687134, -5.492812156677246], + [4.297211170196533, 7.076587677001953], + [0.7332128882408142, -9.07345199584961], + [-0.46734291315078735, 10.845158576965332], + [-3.4484095573425293, -1.3983790874481201], + [-1.0183939933776855, 11.066886901855469], + [1.9224319458007812, 4.785993576049805], + [0.8671110272407532, -0.4063781201839447], + [-1.9579322338104248, 1.6606460809707642], + [-3.568760633468628, -1.8241865634918213], + [-1.1467934846878052, 10.725711822509766], + [-2.805337905883789, -0.9460188150405884], + [-2.5424907207489014, -0.9855477809906006], + [5.744884490966797, -1.324283242225647], + [-1.7162634134292603, 1.3847156763076782], + [-4.733077526092529, 5.370359420776367], + [0.7322677373886108, -0.8633609414100647], + [-0.806145429611206, 10.84186840057373], + [1.5978550910949707, -4.105252742767334], + [-4.7433271408081055, 6.411609649658203], + [2.476789951324463, 5.751546859741211], + [0.32623064517974854, -5.328797817230225], + [-0.08819515258073807, 8.048629760742188], + [-3.6864724159240723, -0.7321104407310486], + [0.7171560525894165, -7.434803009033203], + [-0.45817238092422485, 9.786335945129395], + [2.807939052581787, -4.35712194442749], + [5.231394290924072, 7.982706069946289], + [5.23000955581665, 8.404064178466797], + [-0.41647404432296753, 8.726781845092773], + [6.130548000335693, 8.883729934692383], + [-1.8664190769195557, 1.2686976194381714], + [-1.3867297172546387, 11.6737060546875], + [-4.364355087280273, -1.4902584552764893], + [-0.9668383598327637, 10.228544235229492], + [-3.7080862522125244, -3.8194668292999268], + [-0.31241559982299805, -0.6235507130622864], + [8.22748851776123, -2.9914357662200928], + [-1.9862620830535889, 1.027165174484253], + [7.93295431137085, -2.392302989959717], + [-3.445667028427124, -0.6334266066551208], + [-4.376127243041992, -4.073697090148926], + [0.7171669602394104, -8.536888122558594], + [0.07234852761030197, 5.3957719802856445], + [2.259134292602539, 6.312149524688721], + [-2.738835573196411, -1.374474048614502], + [0.6849377751350403, -8.134881973266602], + [6.576643943786621, -2.910270929336548], + [-3.451399087905884, -2.12695050239563], + [0.9839972853660583, 6.412435054779053], + [-0.3520146608352661, 10.000724792480469], + [-0.6152686476707458, 10.266975402832031], + [-1.4299875497817993, 12.027158737182617], + [6.518310070037842, -3.825700283050537], + [-1.7675683498382568, 5.180173873901367], + [-0.8407275676727295, 9.462625503540039], + [2.5447499752044678, -4.349081993103027], + [4.559537887573242, -4.216872215270996], + [2.4067039489746094, -5.015115737915039], + [-0.5300966501235962, 0.15430259704589844], + [-4.264893531799316, 6.796708106994629], + [-3.9522054195404053, -3.606231212615967], + [-0.7408813834190369, 5.254902362823486], + [3.854832887649536, 6.963226318359375], + [6.804159641265869, -3.012505531311035], + [-3.619689702987671, -1.9708517789840698], + [1.5457541942596436, 0.5448824167251587], + [-3.9780046939849854, -1.080264687538147], + [0.8520877957344055, -4.572969913482666], + [0.08906786888837814, -6.416501045227051], + [4.864330291748047, -0.7242189645767212], + [1.2612491846084595, -5.393765449523926], + [-5.47040319442749, -0.7935522794723511], + [-0.8039812445640564, 11.079364776611328], + [0.9960270524024963, -7.8824462890625], + [4.062926769256592, 7.373786926269531], + [0.06844007223844528, -3.4680237770080566], + [-3.3032405376434326, 3.4577014446258545], + [-2.5952861309051514, 2.7463884353637695], + [5.568066120147705, -1.2389720678329468], + [0.8042758703231812, -7.709848403930664], + [-3.4966037273406982, -1.6967016458511353], + [0.11539887636899948, -3.55022931098938], + [-2.4249398708343506, 2.088151216506958], + [-0.19100508093833923, -1.1946555376052856], + [0.5242440104484558, -6.293543338775635], + [1.808130145072937, 0.5354580879211426], + [-3.381883382797241, -1.1335397958755493], + [-1.905164361000061, 1.9970380067825317], + [8.60169506072998, -2.615114450454712], + [-1.417826533317566, 1.181394100189209], + [0.6377683281898499, -5.953778266906738], + [0.3398726284503937, -5.422393798828125], + [-4.319631576538086, -1.632662296295166], + [2.505054235458374, -4.850224494934082], + [-5.60619592666626, 2.7584898471832275], + [-0.4816771149635315, 10.06822395324707], + [-4.354650020599365, -1.3196903467178345], + [-2.0856881141662598, 0.44023194909095764], + [-4.153334140777588, 5.279991149902344], + [-3.6517040729522705, -0.7995412349700928], + [-3.968545436859131, 6.303937911987305], + [5.566116809844971, -2.224597215652466], + [2.8520169258117676, -4.70837926864624], + [0.39819908142089844, -6.169836044311523], + [-4.604321479797363, -0.8606925010681152], + [-3.6769320964813232, 5.924790382385254], + [-0.7233409285545349, 10.567386627197266], + [0.3693544268608093, -6.002929210662842], + [2.925485849380493, -4.808659076690674], + [-5.085203647613525, 5.2354607582092285], + [-3.8600165843963623, 7.9063920974731445], + [6.858012676239014, -2.5032284259796143], + [-1.2360122203826904, 11.357267379760742], + [6.9370927810668945, -1.8428688049316406], + [-3.7121894359588623, 5.772828102111816], + [5.864337921142578, -1.4911741018295288], + [0.5617713332176208, -0.2744009792804718], + [6.737783908843994, -2.1674416065216064], + [2.5261402130126953, 5.38465690612793], + [-3.2655436992645264, -1.5638209581375122], + [0.42870843410491943, -7.029386043548584], + [7.761846542358398, -3.3435442447662354], + [-3.9545934200286865, -0.696946382522583], + [6.489330768585205, -2.3577494621276855], + [-1.0175426006317139, 10.239106178283691], + [0.3280615210533142, -6.440308570861816], + [-1.3483004570007324, 11.777216911315918], + [7.7272725105285645, -2.3074424266815186], + [0.7387527823448181, -8.676759719848633], + [1.4751577377319336, -0.47927841544151306], + [-3.93117356300354, 3.4176552295684814], + [2.0984253883361816, 0.6730427742004395], + [-2.966768980026245, 0.645451545715332], + [2.8147289752960205, -4.424208641052246], + [-3.2220962047576904, 5.226737022399902], + [-4.066183090209961, -1.6465307474136353], + [-1.0843427181243896, 10.835121154785156], + [-2.4611117839813232, -0.32739150524139404], + [1.5462456941604614, -5.558298110961914], + [0.451121985912323, -6.877573013305664], + [-1.5901837348937988, 1.5323286056518555], + [-2.1530845165252686, 0.7742598652839661], + [5.689457416534424, -1.2788792848587036], + [8.006808280944824, -2.6871097087860107], + [-4.572520732879639, 6.996546268463135], + [-4.2738213539123535, -3.323007822036743], + [-4.38817024230957, 5.937745571136475], + [6.536066055297852, -1.9365609884262085], + [6.100194454193115, -3.0124032497406006], + [-3.5872089862823486, -1.6725587844848633], + [0.6779353022575378, -8.433135986328125], + [0.46606016159057617, -6.625089645385742], + [2.507553815841675, 7.017865180969238], + [0.35281556844711304, -5.558866500854492], + [-3.2164199352264404, -1.1746350526809692], + [0.577582597732544, -7.888332366943359], + [0.4522004723548889, -5.981192588806152], + [-0.6688879728317261, 9.61931037902832], + [6.537609577178955, -5.115398406982422], + [-1.6660304069519043, 0.7775880694389343], + [6.687419414520264, -1.4657784700393677], + [0.6496269106864929, -8.467191696166992], + [-1.8239059448242188, 0.9657284021377563], + [-2.89150333404541, 6.535617351531982], + [-4.511723041534424, 6.830963611602783], + [-1.9723223447799683, 1.4414970874786377], + [-6.023474216461182, 8.136297225952148], + [2.4828572273254395, -6.954507827758789], + [-3.063530445098877, -1.1521672010421753], + [8.296805381774902, -2.4687440395355225], + [-3.290268659591675, -1.807388186454773], + [-5.547974109649658, 4.505441665649414], + [1.5970807075500488, -0.1048838347196579], + [-1.2393046617507935, 11.141112327575684], + [-4.388976097106934, 7.591434955596924], + [4.338508129119873, -3.9307031631469727], + [0.5443493723869324, -6.671886920928955], + [-4.438967227935791, -2.0185513496398926], + [-1.2656675577163696, 12.14700698852539], + [2.2195162773132324, -5.479800224304199], + [-1.6636943817138672, 1.4351105690002441], + [9.034344673156738, -2.728189706802368], + [-0.635147750377655, 10.224950790405273], + [-1.7213070392608643, 1.7254520654678345], + [-3.9961531162261963, -2.374436855316162], + [-0.8779793381690979, -1.445304036140442], + [-3.8540103435516357, -1.8844250440597534], + [-3.7654542922973633, -0.5064185857772827], + [-1.2998770475387573, 10.874768257141113], + [-1.0023387670516968, -0.6445638537406921], + [-3.4518072605133057, -2.0630948543548584], + [-5.053777694702148, 7.113400936126709], + [-4.770587921142578, -0.9107457399368286], + [-3.619788885116577, -1.8238003253936768], + [6.421256065368652, -2.4261748790740967], + [2.115015745162964, -4.7887396812438965], + [-3.3829338550567627, -1.8476051092147827], + [3.7306220531463623, 6.889748573303223], + [1.682054042816162, 4.726999282836914], + [0.3679330348968506, -6.663801193237305], + [-4.245535373687744, -2.0051441192626953], + [7.267427921295166, -2.177574396133423], + [-3.017136335372925, 3.476348638534546], + [2.0413501262664795, 5.347897052764893], + [-3.2070276737213135, 4.380431175231934], + [-3.325862169265747, -0.9835809469223022], + [-4.1083455085754395, -1.128512978553772], + [-2.0004336833953857, 5.907853126525879], + [-3.626821756362915, 5.67393684387207], + [0.5612000823020935, -0.7560654878616333], + [1.7648029327392578, -6.161842346191406], + [0.8396146297454834, -0.48081013560295105], + [-3.9222865104675293, -0.0191500224173069], + [8.04478931427002, -2.582730531692505], + [-3.7987091541290283, -1.557426929473877], + [0.4067782163619995, -7.038370132446289], + [2.2827770709991455, -4.398829460144043], + [-0.5887085795402527, 8.9827880859375], + [5.6939377784729, -4.509878158569336], + [0.7266654372215271, -5.705301761627197], + [-3.5493457317352295, 3.6868784427642822], + [3.437751054763794, 6.925097465515137], + [-1.289066195487976, 10.882761001586914], + [2.7950823307037354, -5.337124824523926], + [3.7073371410369873, 7.123385429382324], + [0.5981516242027283, -7.967841148376465], + [-1.2081197500228882, 10.390741348266602], + [3.903599739074707, 6.921648979187012], + [-1.9875918626785278, 2.044860601425171], + [2.0328562259674072, -4.670191764831543], + [-1.5751780271530151, 13.019954681396484], + [-1.3253034353256226, 11.776376724243164], + [0.5481536388397217, -7.535364151000977], + [0.5634381771087646, -6.180098056793213], + [-3.985621213912964, -0.98093581199646], + [0.42767632007598877, -5.511212348937988], + [0.350554883480072, -0.5357480049133301], + [0.6836916208267212, -6.315763473510742], + [2.6583497524261475, 4.763329029083252], + [-4.869576930999756, 0.18524783849716187], + [-0.9629618525505066, -0.6143039464950562], + [1.3729147911071777, 1.9721719026565552], + [0.5246618390083313, -0.8657351732254028], + [2.987388849258423, 6.611860752105713], + [4.134646892547607, 7.555346965789795], + [-3.516339063644409, 6.302886009216309], + [7.054104328155518, -4.016845703125], + [0.5617839694023132, -7.8407979011535645], + [0.008302383124828339, -0.9387818574905396], + [-3.469465494155884, 5.456999778747559], + [-4.320881366729736, -4.959197998046875], + [4.103237628936768, 7.115721225738525], + [-2.7871205806732178, -3.000422716140747], + [3.1948206424713135, 1.7648695707321167], + [0.6862562298774719, -8.330926895141602], + [-3.665848970413208, -0.8809430599212646], + [3.8553876876831055, 7.099079132080078], + [5.839828014373779, -3.703394651412964], + [0.3685084581375122, -0.5082319378852844], + [-0.7145670652389526, 10.373205184936523], + [0.504527747631073, -6.552058696746826], + [2.7979347705841064, -4.901437759399414], + [-2.7110354900360107, -3.9962050914764404], + [-3.5732948780059814, -1.2613312005996704], + [-1.2915301322937012, 11.508331298828125], + [0.6879624724388123, -9.679628372192383], + [-3.398961305618286, -1.4031078815460205], + [-1.0803146362304688, 10.881492614746094], + [0.04958181828260422, -1.434452772140503], + [0.4900715947151184, -7.382080078125], + [-1.5945258140563965, 0.7295659780502319], + [-2.641176223754883, -1.398883581161499], + [8.794696807861328, -3.156745195388794], + [-3.1664421558380127, -1.3691476583480835], + [1.299432635307312, 1.5205165147781372], + [-0.6809515357017517, 10.11894416809082], + [6.504095077514648, -3.0824928283691406], + [-1.3695783615112305, 10.809473037719727], + [0.2933776378631592, -5.594391822814941], + [-5.140995502471924, 4.7034382820129395], + [-0.8614432215690613, 0.35938847064971924], + [0.7018256783485413, -8.567649841308594], + [-3.493328809738159, 4.797408103942871], + [0.8763152956962585, -0.5634697675704956], + [-1.0407923460006714, 0.3453994393348694], + [-1.8527092933654785, 1.714090347290039], + [-1.417290449142456, 0.8824191689491272], + [2.3963210582733154, -5.407129764556885], + [-2.3293726444244385, 1.9779022932052612], + [4.818807125091553, 7.714109420776367], + [0.37371981143951416, -5.326513290405273], + [8.191903114318848, -2.3929545879364014], + [-0.9913709163665771, -0.815078854560852], + [1.8791236877441406, -5.126339435577393], + [8.139430046081543, -2.800400972366333], + [-1.3562349081039429, 11.771949768066406], + [-0.6856263875961304, 9.997492790222168], + [1.8749345541000366, 4.562911033630371], + [5.137284278869629, 8.097406387329102], + [-3.5702059268951416, -1.7974668741226196], + [5.241064548492432, 8.125100135803223], + [2.857417345046997, -4.756145000457764], + [-1.705855369567871, 1.9000285863876343], + [-4.126820087432861, -1.917453408241272], + [-3.0469460487365723, 6.219692230224609], + [-2.7921926975250244, 2.9895517826080322], + [-3.8282628059387207, -0.843979001045227], + [-1.6409143209457397, 0.30155184864997864], + [1.613579511642456, 5.132551670074463], + [7.07924747467041, -2.4651215076446533], + [-1.2244669198989868, 11.886154174804688], + [0.6639476418495178, -8.47937297821045], + [1.7660731077194214, 4.325796127319336], + [-1.6585904359817505, 5.931339740753174], + [5.402498722076416, 7.935314655303955], + [4.592098712921143, 7.808231830596924], + [-3.904808282852173, -2.892103672027588], + [2.793463945388794, 5.837912559509277], + [0.9495742917060852, -5.865857124328613], + [-1.2296570539474487, 10.471492767333984], + [-3.119699716567993, 0.984049916267395], + [-3.11293625831604, 4.443554401397705], + [-3.3954885005950928, 6.642317771911621], + [2.6144440174102783, 6.030786991119385], + [4.334777355194092, 7.485018730163574], + [-4.40596342086792, -0.7775899171829224], + [-0.56627357006073, 9.320318222045898], + [-3.820530652999878, -1.2284637689590454], + [5.623085021972656, -1.2224419116973877], + [-3.1962053775787354, -0.9408601522445679], + [-4.135179042816162, 5.853681564331055], + [0.7116675972938538, -7.13968563079834], + [-3.33345103263855, 5.022570610046387], + [-1.1794252395629883, 10.302261352539062], + [0.5427345633506775, -0.32074278593063354], + [2.032546281814575, -5.014365196228027], + [-2.5863516330718994, -0.8199215531349182], + [-0.6008995175361633, 0.5179669260978699], + [-3.9404823780059814, -1.1307216882705688], + [-3.6761367321014404, -1.3470160961151123], + [-0.9948146939277649, 10.859305381774902], + [-1.7473280429840088, 1.1124153137207031], + [-1.8979424238204956, 1.366886854171753], + [-1.2159918546676636, 10.985824584960938], + [0.7708930373191833, -9.038551330566406], + [1.4806196689605713, 3.3269686698913574], + [-1.8701541423797607, -0.8200452327728271], + [0.3218390643596649, -4.793797492980957], + [-2.955392837524414, -2.086054801940918], + [-1.0908066034317017, 10.086530685424805], + [0.7032279372215271, 4.875190734863281], + [1.6737804412841797, -2.120992422103882], + [0.37805336713790894, -5.150150775909424], + [-2.9389102458953857, -2.104736566543579], + [2.561340570449829, 5.234905242919922], + [-1.500917911529541, 12.952718734741211], + [-1.3759297132492065, 12.135960578918457], + [-0.6359873414039612, 10.07182502746582], + [-0.4978005886077881, 8.744453430175781], + [-1.9166982173919678, 0.6880853176116943], + [-0.9789103865623474, 4.764926910400391], + [3.0114004611968994, -4.921744346618652], + [2.7274036407470703, -4.335342884063721], + [-4.506285667419434, -0.8428488969802856], + [0.2395932674407959, -4.386525630950928], + [1.9117697477340698, 6.161910533905029], + [-1.9088679552078247, 1.086585521697998], + [-3.0568923950195312, -1.3781040906906128], + [-3.1857173442840576, -1.9589225053787231], + [0.6712304949760437, -8.666706085205078], + [0.9631139636039734, -4.906967639923096], + [0.6175147891044617, -6.528392791748047], + [-3.327488660812378, -0.997377336025238], + [-4.410469055175781, -2.999959707260132], + [-3.641327142715454, -0.8243559002876282], + [-1.7082511186599731, 0.6182656288146973], + [-0.16287142038345337, 7.773984909057617], + [-2.983351707458496, -1.9829808473587036], + [-3.44469952583313, 4.973934650421143], + [0.5839051008224487, -5.988370895385742], + [-0.6689878106117249, 10.25609016418457], + [-3.922095537185669, -1.1167978048324585], + [-0.5111986398696899, 8.887953758239746], + [-0.41574716567993164, 10.2359619140625], + [-3.0921518802642822, -2.147083044052124], + [0.23113799095153809, -4.751808166503906], + [-4.030529499053955, -0.831508994102478], + [2.7580907344818115, -4.814138412475586], + [-3.2992446422576904, -1.9417005777359009], + [3.1495656967163086, 5.703330039978027], + [-2.698596239089966, -1.9646474123001099], + [-1.6174342632293701, -1.4540040493011475], + [-5.76408576965332, 3.2173311710357666], + [0.22915512323379517, -6.173725128173828], + [8.204266548156738, -3.0442054271698], + [-4.346978187561035, -2.885746479034424], + [0.5753914713859558, -7.794251441955566], + [-4.059276103973389, -2.5398201942443848], + [-0.6529170870780945, 9.855327606201172], + [-5.030090808868408, 7.338088512420654], + [5.697157382965088, 8.556818962097168], + [2.6206154823303223, -5.685770511627197], + [-0.23968786001205444, -1.0660583972930908], + [6.334995269775391, -1.7388083934783936], + [0.7291643023490906, -3.429429531097412], + [-2.9113404750823975, 3.1443371772766113], + [-3.6312615871429443, -2.34770131111145], + [-1.797565221786499, -1.759748101234436], + [0.3566213846206665, 7.882678031921387], + [-0.5234688520431519, -1.6028729677200317], + [0.572492241859436, -7.821688652038574], + [-0.3357998728752136, 6.892252445220947], + [-1.4119869470596313, 11.774595260620117], + [8.734210014343262, -2.5476605892181396], + [-3.7113354206085205, -1.2508995532989502], + [-1.2628467082977295, 1.3064345121383667], + [1.8207707405090332, -6.168635368347168], + [-3.5960559844970703, -1.2449654340744019], + [-3.4556925296783447, 3.3332645893096924], + [0.6581888198852539, -9.11275863647461], + [1.1212694644927979, -0.04565601423382759], + [-2.6968142986297607, -0.950067400932312], + [-4.948069095611572, 4.254767417907715], + [-0.7698964476585388, 9.750560760498047], + [-4.422947883605957, -0.9337145686149597], + [-0.7677939534187317, 10.761011123657227], + [2.68994402885437, -4.65958309173584], + [8.059281349182129, -2.3797824382781982], + [-5.31367301940918, 1.826307773590088], + [-3.1301894187927246, -0.2992720603942871], + [-0.5867658257484436, -1.6324812173843384], + [-3.6271679401397705, -3.475447654724121], + [1.9594714641571045, -5.16765832901001], + [-1.455955147743225, 12.314966201782227], + [0.17614132165908813, -4.4727067947387695], + [-1.027673363685608, 10.442380905151367], + [7.284411907196045, -3.0659677982330322], + [4.9590044021606445, 7.993707656860352], + [1.7131283283233643, -4.8597025871276855], + [-4.25702428817749, -2.6526615619659424], + [-1.4665005207061768, 12.404340744018555], + [1.2541019916534424, 1.2391141653060913], + [-4.190815448760986, -0.5172147750854492], + [-0.6919083595275879, 9.958824157714844], + [-5.066082954406738, 4.698827743530273], + [-5.142963409423828, -1.038182258605957], + [-1.8420284986495972, 1.6424660682678223], + [0.3994603753089905, -1.0550737380981445], + [-0.6349428296089172, -2.074350595474243], + [2.748375177383423, 5.797064781188965], + [1.6286530494689941, 4.661927223205566], + [7.469428539276123, -2.394427537918091], + [-5.66112756729126, 5.241025924682617], + [2.0337586402893066, -4.3805251121521], + [-1.187111735343933, -0.7231329679489136], + [0.9316835999488831, 6.487457752227783], + [-2.5631511211395264, -1.0917130708694458], + [3.0202629566192627, -5.12193489074707], + [7.456500053405762, -3.1551239490509033], + [-4.385508060455322, 6.154078006744385], + [-0.5716843008995056, 9.206781387329102], + [-0.8095876574516296, 9.708751678466797], + [-1.985942006111145, 1.9848848581314087], + [2.835550308227539, 4.941318511962891], + [-1.178433895111084, 11.017351150512695], + [1.0805972814559937, -5.459356307983398], + [-3.7308900356292725, -1.3367985486984253], + [0.867182195186615, -7.387764930725098], + [-4.388027667999268, -2.21242094039917], + [0.6265658140182495, -0.2313431203365326], + [-4.389042854309082, 5.387866020202637], + [-0.14670822024345398, -0.8006348609924316], + [-0.11176208406686783, -1.044706106185913], + [-4.139224529266357, -1.2697466611862183], + [-4.484760761260986, 5.838353157043457], + [2.7338802814483643, -4.615179061889648], + [-5.1847453117370605, 3.071164608001709], + [-1.3697185516357422, 11.921859741210938], + [-3.0536768436431885, -1.1286535263061523], + [4.042934894561768, -2.8219244480133057], + [-3.9008023738861084, 6.3645524978637695], + [-1.8339920043945312, 1.807022213935852], + [0.523534893989563, -5.031888008117676], + [-1.0638455152511597, 10.902359962463379], + [-3.3813607692718506, -1.3201061487197876], + [2.5508525371551514, -4.674925804138184], + [1.4654897451400757, 5.4743804931640625], + [-1.9020711183547974, 0.7646257877349854], + [-2.321047067642212, 1.9872750043869019], + [0.14017993211746216, -0.6431968212127686], + [-1.279173493385315, 11.316749572753906], + [2.884835958480835, 6.246746063232422], + [2.4573209285736084, -4.194073677062988], + [-0.8370447754859924, 10.453741073608398], + [-0.26267051696777344, 8.907342910766602], + [2.8619463443756104, 6.2767415046691895], + [-0.149046391248703, -1.1876115798950195], + [-6.059084415435791, 8.09305191040039], + [2.734905958175659, -4.439098358154297], + [8.835498809814453, -2.822338342666626], + [0.3134080767631531, -5.090576171875], + [0.4670514464378357, -6.949409484863281], + [-3.1119306087493896, -0.2940034866333008], + [-4.910733699798584, -0.8150342702865601], + [7.163718223571777, -2.7328641414642334], + [-3.918354034423828, 5.943999767303467], + [-1.225380539894104, 11.501575469970703], + [-2.9689342975616455, 5.8436079025268555], + [-3.6387507915496826, -1.6741350889205933], + [0.8319079279899597, 3.9775211811065674], + [-4.307047367095947, -1.2070237398147583], + [2.2306041717529297, 3.775099277496338], + [0.9924729466438293, -3.1623737812042236], + [-0.6978380084037781, 10.99205207824707], + [-1.4008793830871582, 11.896902084350586], + [-2.0816357135772705, 1.369127869606018], + [-2.3063814640045166, 0.22241824865341187], + [7.59977388381958, -2.171719551086426], + [0.2435113787651062, -5.826352119445801], + [-0.7214995622634888, -3.795621633529663], + [1.2707995176315308, 5.939765930175781], + [-3.9855153560638428, -0.6898052096366882], + [1.8801730871200562, 0.4674278497695923], + [-3.8093960285186768, -1.8904584646224976], + [-0.1881633996963501, -1.5032802820205688], + [-1.2200654745101929, 11.279561996459961], + [-1.1520464420318604, 5.686384677886963], + [-2.890915632247925, 2.9260756969451904], + [1.5125095844268799, 7.153772354125977], + [-4.712421894073486, -1.1041111946105957], + [-1.9003225564956665, 1.72323739528656], + [1.0450607538223267, -0.10739755630493164], + [1.2710028886795044, 0.27260905504226685], + [5.736734390258789, 8.51698112487793], + [1.4415616989135742, -5.259001731872559], + [-1.8965229988098145, -0.6127915978431702], + [-4.292368412017822, 5.971505165100098], + [2.3855249881744385, -4.437950611114502], + [-3.1499974727630615, -0.9451202154159546], + [2.9157309532165527, -4.540992259979248], + [0.41005170345306396, -5.869865417480469], + [-4.20979642868042, 7.682945251464844], + [2.869203567504883, -4.547546863555908], + [-4.51539945602417, 6.571310997009277], + [2.113621234893799, -5.359373569488525], + [2.61989164352417, -4.365777492523193], + [-0.5733801126480103, 8.308584213256836], + [-0.1808164119720459, 8.66079044342041], + [-0.6547311544418335, 7.650199890136719], + [0.6518355011940002, -7.532750129699707], + [2.9373841285705566, -4.644989013671875], + [-4.4592180252075195, -3.0351147651672363], + [-2.476210355758667, -0.6902060508728027], + [-1.8142660856246948, 0.9627870321273804], + [-4.604163646697998, -0.5136517286300659], + [1.603228211402893, 0.16476204991340637], + [-2.16786527633667, 2.433213710784912], + [-0.8294431567192078, 10.551814079284668], + [4.534658432006836, -1.5869014263153076], + [7.536927223205566, -2.325629711151123], + [-1.9681658744812012, 1.8591753244400024], + [2.310302972793579, -4.631494522094727], + [-1.7382762432098389, 0.21212419867515564], + [1.2798130512237549, 0.12668196856975555], + [-1.1754411458969116, -0.6007487773895264], + [-0.2523035407066345, 9.401477813720703], + [6.753206729888916, -2.786698579788208], + [-4.549039840698242, 3.979125738143921], + [-0.8926021456718445, 10.302806854248047], + [0.6060354709625244, -8.080526351928711], + [0.7104551196098328, -8.348838806152344], + [-0.3973979353904724, 5.304441928863525], + [-4.4513840675354, -1.1197056770324707], + [-3.700270414352417, 4.001221179962158], + [-3.6103670597076416, -0.8464382886886597], + [7.317665100097656, -3.498882532119751], + [-1.9924328327178955, 2.7136478424072266], + [0.47792404890060425, -6.6169939041137695], + [-5.726382255554199, 5.186344623565674], + [0.15520060062408447, -4.298096179962158], + [-5.6604838371276855, 6.764779090881348], + [-4.1487135887146, -1.4781221151351929], + [-4.319413185119629, 4.935029983520508], + [0.5799121260643005, -6.936401844024658], + [8.422011375427246, -2.8527636528015137], + [-1.3638362884521484, 2.0900614261627197], + [-1.9660431146621704, -0.5343867540359497], + [-4.205769062042236, 4.549500465393066], + [-0.6933983564376831, 10.2522611618042], + [0.548008918762207, -6.685639381408691], + [6.786073207855225, -2.5770294666290283], + [-3.9438745975494385, -2.793454885482788], + [-3.1255276203155518, -1.0895062685012817], + [-3.9047324657440186, -2.8057186603546143], + [8.013382911682129, -2.2962300777435303], + [-4.257706165313721, -1.0247992277145386], + [2.3222880363464355, -4.0994157791137695], + [-0.716732382774353, 8.890037536621094], + [7.4170308113098145, -3.288618326187134], + [-2.214249849319458, -2.25727915763855], + [-0.4128653407096863, 0.43936222791671753], + [4.3766913414001465, 7.383547782897949], + [0.6717172265052795, -7.960034370422363], + [0.4712640047073364, -5.958085060119629], + [9.148036003112793, -2.7809154987335205], + [3.2605109214782715, -4.7330522537231445], + [0.5457394123077393, -7.248617649078369], + [-4.8111138343811035, 5.673938751220703], + [-1.8539537191390991, 2.188169002532959], + [1.2027316093444824, -4.375425338745117], + [2.598024606704712, -4.744356155395508], + [-3.949739694595337, -1.7897511720657349], + [6.63002872467041, -4.268305778503418], + [7.299682140350342, -3.4711320400238037], + [-2.7005856037139893, 2.7325475215911865], + [-0.4058449864387512, 5.800628662109375], + [-1.520269513130188, 1.606055736541748], + [-1.3339372873306274, 11.632226943969727], + [-3.641716718673706, -2.0179789066314697], + [5.330798149108887, -1.2847580909729004], + [-1.3510137796401978, 11.714956283569336], + [-3.293898105621338, -0.862055778503418], + [1.479015827178955, -5.977704048156738], + [-4.750887393951416, -0.6800179481506348], + [8.075007438659668, -2.350095748901367], + [0.33550000190734863, -5.383524417877197], + [0.6545202136039734, -8.638154983520508], + [-4.295120716094971, -3.604403495788574], + [0.8475767970085144, -0.5773569941520691], + [3.1072161197662354, -4.846652984619141], + [-1.8576053380966187, 2.6643800735473633], + [-1.8337808847427368, 5.672589302062988], + [-3.8398144245147705, -2.9996700286865234], + [1.5606521368026733, 2.0242807865142822], + [-5.555149078369141, 4.699024677276611], + [0.647637665271759, -8.1390962600708], + [-0.3394920229911804, 8.987052917480469], + [1.228535532951355, -0.19024305045604706], + [-4.178746700286865, 6.174264907836914], + [-1.948849081993103, 0.26165831089019775], + [-4.051927089691162, -2.7540063858032227], + [0.7596703171730042, -9.184122085571289], + [3.591022253036499, -3.6449785232543945], + [3.188135862350464, -5.272320747375488], + [-4.620068550109863, 6.275016784667969], + [0.849353551864624, -6.525426864624023], + [9.66283130645752, -2.9536609649658203], + [1.6272385120391846, 5.397097587585449], + [-0.7345370054244995, 1.1890722513198853], + [0.5335504412651062, -6.493837356567383], + [-1.4462895393371582, 11.843347549438477], + [0.5207080245018005, -6.909273147583008], + [-2.850679636001587, 4.559206008911133], + [0.8195123672485352, -6.361591339111328], + [0.5981671214103699, -8.299560546875], + [7.050953388214111, -3.6907103061676025], + [-4.3125901222229, -1.4176253080368042], + [2.6553642749786377, -5.148198127746582], + [-1.2954033613204956, 11.356151580810547], + [-3.750945806503296, -1.4634016752243042], + [0.5403987765312195, -7.224438190460205], + [-5.330456256866455, -0.8406153917312622], + [-4.407532215118408, -0.7205008268356323], + [-0.7608318328857422, -1.1315770149230957], + [-1.6417893171310425, 1.9305521249771118], + [-1.3059465885162354, 0.9120728373527527], + [2.9416282176971436, -5.117808818817139], + [0.7343587279319763, -6.498082160949707], + [-4.628808498382568, -2.0093719959259033], + [1.9925062656402588, 0.6199032068252563], + [7.019678592681885, 9.848895072937012], + [-1.2488226890563965, 10.94395923614502], + [-3.141634702682495, -0.974553108215332], + [1.0566985607147217, -5.412982940673828], + [0.6170406341552734, -8.525798797607422], + [1.8849143981933594, -5.599043846130371], + [5.434915542602539, -3.1529347896575928], + [0.23238444328308105, -6.185151100158691], + [-2.917440891265869, -1.6409176588058472], + [10.083301544189453, -3.0264720916748047], + [7.36288595199585, -2.3318498134613037], + [-4.646912574768066, 2.8759653568267822], + [-0.6462367177009583, -2.7954723834991455], + [-3.6554911136627197, -1.678553581237793], + [0.8956137895584106, -5.042620658874512], + [1.4764294624328613, -6.433666229248047], + [-1.8092833757400513, 2.535895586013794], + [-1.28842031955719, -0.9402123689651489], + [-3.736333131790161, 5.662966728210449], + [2.0220062732696533, 1.049538254737854], + [-0.9700900912284851, -0.46092507243156433], + [-1.6806083917617798, 1.2355327606201172], + [-4.229709148406982, -0.8178884983062744], + [1.2482929229736328, -5.698105335235596], + [0.5566420555114746, -0.783247709274292], + [-1.4994299411773682, -2.438079595565796], + [1.6365894079208374, 7.03887414932251], + [-3.4473655223846436, -1.5303276777267456], + [-3.25750994682312, -2.298795461654663], + [0.8891552090644836, -0.009933356195688248], + [-1.693522572517395, 1.3855857849121094], + [-5.4384613037109375, 7.495941162109375], + [-2.0314745903015137, 1.1845747232437134], + [-3.5128049850463867, -1.7480133771896362], + [-3.8491270542144775, 5.660151481628418], + [-4.447528839111328, 6.528012275695801], + [-1.3708817958831787, 11.555328369140625], + [2.392533302307129, 5.952056884765625], + [-0.9873475432395935, 10.384105682373047], + [-4.767939567565918, -0.9894739985466003], + [-3.4138920307159424, 2.452275276184082], + [-3.1971585750579834, 2.803130865097046], + [2.716341495513916, -4.365875244140625], + [1.9186362028121948, 4.802297115325928], + [6.722940444946289, -2.125170946121216], + [-0.6280166506767273, 10.194332122802734], + [-1.7372608184814453, -0.9721447825431824], + [7.002452850341797, -2.1276071071624756], + [-4.017239093780518, -2.582698106765747], + [1.0196888446807861, -4.586139678955078], + [0.3700249195098877, -5.265113353729248], + [2.411933183670044, -4.725252151489258], + [-4.747583866119385, -0.8309378623962402], + [-1.1658915281295776, 11.080432891845703], + [-0.8679378032684326, 9.817092895507812], + [1.6231987476348877, 5.6111040115356445], + [-4.426299095153809, 5.91349983215332], + [-3.3621532917022705, -2.256621837615967], + [2.439699411392212, 5.3508501052856445], + [-3.0721962451934814, -0.9857353568077087], + [0.591647207736969, -8.090938568115234], + [0.09322654455900192, -5.7187299728393555], + [-3.063378095626831, -1.2327252626419067], + [-0.9923427700996399, 1.5533488988876343], + [0.31479573249816895, -6.937867641448975], + [2.2906153202056885, -3.7408294677734375], + [-3.6700191497802734, -2.0652339458465576], + [2.55531644821167, -4.1644744873046875], + [0.5960108041763306, -7.64640998840332], + [-3.0027363300323486, -1.009973406791687], + [-4.180448055267334, -2.4240176677703857], + [-0.04816073924303055, -3.9058563709259033], + [0.1459493339061737, -4.0136871337890625], + [-2.2354907989501953, 1.4424666166305542], + [-5.022385120391846, 6.857734680175781], + [2.749075174331665, -4.939994812011719], + [2.089421033859253, 2.9219276905059814], + [2.095688581466675, 6.361297130584717], + [3.3279526233673096, 6.603283882141113], + [-1.286702275276184, 11.368261337280273], + [-2.6719675064086914, -0.34969544410705566], + [-0.9950752854347229, 9.762495040893555], + [2.8878061771392822, -4.437573432922363], + [-1.5333936214447021, 2.263134002685547], + [-3.9440882205963135, -1.1123987436294556], + [-3.9066965579986572, -1.5132473707199097], + [0.05523531883955002, 0.16892899572849274], + [1.1548717021942139, -6.2995100021362305], + [1.6589701175689697, 1.534872055053711], + [-4.8168463706970215, 4.356128692626953], + [0.6367465853691101, -6.899522304534912], + [0.3037397265434265, -6.725639343261719], + [2.181286573410034, 4.1607136726379395], + [6.659273147583008, -5.349559783935547], + [0.28539732098579407, -0.9745326042175293], + [4.616760730743408, 7.740678310394287], + [5.297696590423584, -1.283920168876648], + [-1.3749960660934448, 0.8410853743553162], + [5.855512619018555, -2.6358144283294678], + [0.27383217215538025, -0.8382822275161743], + [-3.688779592514038, -1.6047722101211548], + [0.2252521812915802, 0.17099687457084656], + [2.394075870513916, -4.041135311126709], + [-3.015366315841675, -1.917169451713562], + [1.9672186374664307, -4.6663818359375], + [-4.417220115661621, -2.3212225437164307], + [8.165277481079102, -2.466064214706421], + [-1.1816582679748535, 11.143087387084961], + [5.653529167175293, -1.5885292291641235], + [-1.4092360734939575, 11.949369430541992], + [-3.485114812850952, -3.9756319522857666], + [-3.6022350788116455, -1.8192343711853027], + [-2.7439963817596436, -1.301127552986145], + [-0.4548329710960388, 9.459871292114258], + [-1.5215805768966675, -0.747189998626709], + [-1.2606228590011597, 11.597562789916992], + [0.36272087693214417, -2.965738296508789], + [-4.232398986816406, -0.5095751881599426], + [2.246467351913452, -5.532867908477783], + [3.163487672805786, 6.843964576721191], + [-0.9662478566169739, 11.175302505493164], + [-4.4466552734375, -2.4239015579223633], + [1.4428225755691528, 3.230118751525879], + [0.25450968742370605, -4.752234935760498], + [-1.2870268821716309, 11.73886489868164], + [-3.8283798694610596, -0.9883450269699097], + [0.2663418650627136, -5.529800891876221], + [3.434263229370117, 6.952966213226318], + [-4.950601100921631, 7.048318386077881], + [-0.5178456902503967, 0.7952098846435547], + [1.7659194469451904, 5.239127159118652], + [-4.78623628616333, -3.996999979019165], + [0.13821756839752197, -1.3701061010360718], + [-4.83500862121582, -1.584696650505066], + [0.2892802357673645, -5.366802215576172], + [0.5954477190971375, -7.756033897399902], + [0.060944221913814545, -4.423148155212402], + [-1.1472209692001343, 0.9272409677505493], + [0.5928746461868286, -8.031831741333008], + [-2.188302993774414, -2.6789023876190186], + [3.0195162296295166, -4.7863850593566895], + [-3.873573064804077, -1.3049689531326294], + [-3.5318822860717773, -0.9203594923019409], + [-2.0962984561920166, 1.7439756393432617], + [-3.3486080169677734, -3.198310136795044], + [-1.4918859004974365, 1.4208258390426636], + [-2.620739698410034, -1.2396823167800903], + [9.449030876159668, -2.9973833560943604], + [-4.989129066467285, 7.3245930671691895], + [0.5087659358978271, -7.991004943847656], + [-1.0081530809402466, 10.750734329223633], + [0.17985397577285767, 8.947659492492676], + [-3.992741107940674, -1.2494267225265503], + [2.7914812564849854, -5.3154683113098145], + [-2.5975866317749023, -0.653742790222168], + [5.8613717555999756e-5, -4.220231056213379], + [-4.650765895843506, -1.5856873989105225], + [-5.2129034996032715, 0.417025625705719], + [-0.6886991858482361, 10.111349105834961], + [-5.410942554473877, -0.7073801159858704], + [0.033135078847408295, -3.9391775131225586], + [-5.4213738441467285, -3.8069632053375244], + [-2.6399190425872803, -1.3813073635101318], + [-4.126219272613525, -0.3516414761543274], + [0.5673413276672363, -7.8246965408325195], + [1.044406533241272, -0.02262723818421364], + [0.8179104924201965, -8.030320167541504], + [-3.207002878189087, 3.181534767150879], + [0.5017335414886475, -0.7107515931129456], + [2.681384801864624, 5.993020057678223], + [-3.435922622680664, -1.5925599336624146], + [-0.5972211956977844, 10.051166534423828], + [0.7536881566047668, -9.116159439086914], + [0.7515338063240051, -4.949134826660156], + [-2.0652456283569336, 0.330421507358551], + [-1.3748619556427002, 11.895566940307617], + [2.3559463024139404, 5.015840530395508], + [-4.072316646575928, 4.734952449798584], + [-1.905727505683899, 1.5837922096252441], + [2.731295347213745, -4.600786209106445], + [0.38216036558151245, 5.813925266265869], + [-3.529101610183716, -0.9228178262710571], + [1.0293375253677368, -4.543676376342773], + [-2.0328636169433594, 2.0982022285461426], + [-3.4327638149261475, -1.7351740598678589], + [-1.540939450263977, 1.297883152961731], + [-0.9234502911567688, -3.1909916400909424], + [0.6153900027275085, -5.679978847503662], + [-0.1339535117149353, -2.3283822536468506], + [8.55937671661377, -2.8543546199798584], + [-1.0154997110366821, 10.851348876953125], + [-1.1127160787582397, 11.025558471679688], + [-4.701849937438965, 3.8667166233062744], + [1.1296849250793457, -4.648427486419678], + [-0.17259946465492249, -1.3326489925384521], + [0.5426555871963501, -6.794857025146484], + [-4.774911403656006, -0.7459700703620911], + [-0.5926164388656616, 10.06777286529541], + [0.777451753616333, -7.400620937347412], + [-2.4461920261383057, 4.295605659484863], + [4.251419544219971, 7.265445709228516], + [4.104150772094727, 6.831968307495117], + [-3.334378957748413, -2.385627508163452], + [-3.94184947013855, -2.6349780559539795], + [-1.5387381315231323, -0.7212990522384644], + [-5.587436199188232, -0.8135273456573486], + [8.824642181396484, -2.963512420654297], + [0.24980884790420532, -5.037703037261963], + [8.011634826660156, -2.3215017318725586], + [8.140198707580566, -2.9993114471435547], + [-2.9429404735565186, -0.5907416939735413], + [3.1204941272735596, -5.024672508239746], + [6.427325248718262, -2.583524465560913], + [-4.166355609893799, -1.874200463294983], + [-3.6861989498138428, -1.7108609676361084], + [0.49520838260650635, -7.212859153747559], + [7.445176601409912, -3.7495663166046143], + [-1.90339994430542, -1.0661638975143433], + [-2.60312557220459, 2.80639386177063], + [-2.9115817546844482, -0.7758237719535828], + [-4.241230487823486, -1.8659993410110474], + [-0.9936524629592896, 9.734764099121094], + [0.46224015951156616, -4.4856767654418945], + [-3.56122088432312, -2.876483201980591], + [-3.8091862201690674, -1.1007639169692993], + [-2.164417028427124, -0.18846911191940308], + [8.62547779083252, -2.7693798542022705], + [-0.9664165377616882, 11.429317474365234], + [-3.9933578968048096, -1.7877057790756226], + [-0.3690887689590454, 9.538736343383789], + [0.6260406374931335, -8.521245956420898], + [4.626054763793945, 7.820916175842285], + [-3.9318013191223145, -2.6803596019744873], + [-2.3891913890838623, 2.446497917175293], + [-0.5938576459884644, 9.593332290649414], + [-3.9139938354492188, 6.161087989807129], + [2.4056246280670166, -4.548298358917236], + [2.224489688873291, 4.866176605224609], + [2.7794764041900635, 6.20930814743042], + [3.513028144836426, -3.7891294956207275], + [-5.710851669311523, 5.9090375900268555], + [5.810081958770752, -2.755727529525757], + [0.36789363622665405, -6.3562541007995605], + [-1.367171287536621, 12.180288314819336], + [1.1680870056152344, 1.3674015998840332], + [2.85040283203125, -4.42390775680542], + [-1.5312237739562988, 1.1024823188781738], + [8.81064224243164, -2.9978201389312744], + [-1.1826473474502563, 10.603755950927734], + [-2.0353446006774902, 1.9804068803787231], + [8.213274955749512, -2.4916341304779053], + [1.826871395111084, 1.194950819015503], + [-4.004292964935303, -2.735091209411621], + [0.3541228175163269, -6.716093063354492], + [-2.2526652812957764, 5.537901878356934], + [-4.719996452331543, 6.2668232917785645], + [-1.4794288873672485, 0.977432370185852], + [-0.5838496088981628, -0.9237312078475952], + [0.7797334790229797, -7.047557353973389], + [2.584162712097168, 6.2469072341918945], + [-4.120827674865723, 6.466611385345459], + [0.29705554246902466, -6.5811848640441895], + [-3.7591941356658936, 5.901994228363037], + [-3.741288423538208, -1.1423333883285522], + [1.3069238662719727, -5.160861015319824], + [-0.56312495470047, -1.3243281841278076], + [-1.365006685256958, 11.691823959350586], + [-0.32731395959854126, 9.384632110595703], + [0.9469268918037415, -0.7130982279777527], + [-3.3590028285980225, -2.1306803226470947], + [-3.647512674331665, -1.440840721130371], + [-3.0365960597991943, 3.7069015502929688], + [-4.70653772354126, 6.874451637268066], + [-0.833448052406311, 8.986466407775879], + [-1.1400971412658691, 11.276798248291016], + [-0.4534148573875427, 9.5463285446167], + [-3.818620204925537, 5.720520496368408], + [2.766447067260742, 6.120950222015381], + [2.2497832775115967, -6.2299017906188965], + [1.6753766536712646, 0.6353031396865845], + [5.195251941680908, -1.433076024055481], + [-5.164440631866455, 4.847334861755371], + [0.6056094765663147, -7.720988750457764], + [6.1682538986206055, -3.642444610595703], + [1.3608717918395996, -5.551262855529785], + [-5.319664478302002, -0.8197019696235657], + [5.742796897888184, -3.682450532913208], + [-3.3929662704467773, 5.5828142166137695], + [0.3300905227661133, -5.739194393157959], + [-1.120719075202942, 10.183533668518066], + [-4.455648422241211, -2.8970725536346436], + [0.5697590708732605, -6.65532112121582], + [6.048144340515137, -2.2881054878234863], + [0.5685140490531921, -8.00854778289795], + [1.1412489414215088, -5.558289051055908], + [0.3329048156738281, -6.347291946411133], + [2.6957600116729736, 5.89934778213501], + [-1.6123378276824951, 12.993416786193848], + [-3.3254663944244385, -2.053670883178711], + [2.6757924556732178, 5.811226844787598], + [7.22437047958374, -3.5934102535247803], + [0.33758145570755005, -6.373725891113281], + [2.733480453491211, -4.277773857116699], + [-1.2106167078018188, 11.068869590759277], + [-4.176269054412842, 5.856335639953613], + [-0.15778756141662598, -1.1151260137557983], + [-1.1006815433502197, 9.93898868560791], + [0.45866912603378296, -6.874764442443848], + [-3.3722167015075684, 6.083527088165283], + [-3.583198308944702, -1.097540020942688], + [8.738377571105957, -2.8055579662323], + [-1.1339236497879028, 10.949407577514648], + [0.3537958264350891, -6.594365119934082], + [-2.3699750900268555, 4.2120232582092285], + [8.338709831237793, -2.71814227104187], + [0.6573339104652405, -8.597968101501465], + [-4.099828243255615, 0.1110222339630127], + [1.6553947925567627, 5.941494464874268], + [-4.839277267456055, -0.8172343969345093], + [8.48127269744873, -2.8431801795959473], + [-4.909632205963135, 5.635612487792969], + [-0.4488774538040161, 5.418966293334961], + [2.7018158435821533, -4.1885833740234375], + [-1.2943857908248901, 11.344135284423828], + [-4.283124923706055, -1.8192085027694702], + [-2.4011008739471436, -0.81269770860672], + [0.4893715977668762, -6.49452543258667], + [3.6982834339141846, 6.788212299346924], + [-3.7532010078430176, 3.341296911239624], + [1.7738615274429321, 2.825303554534912], + [-3.692080020904541, -2.345616340637207], + [2.480677843093872, 6.118457794189453], + [0.026414059102535248, -3.784162998199463], + [-3.390251398086548, -3.106285572052002], + [0.8614785075187683, -6.7462239265441895], + [-3.598144292831421, -1.3446379899978638], + [2.062129020690918, -4.275997161865234], + [-3.553701162338257, -2.441955327987671], + [7.035820960998535, -2.1305086612701416], + [-3.3919646739959717, -0.9627460241317749], + [2.977008581161499, -4.142759323120117], + [0.06118600815534592, 3.494359016418457], + [2.259361505508423, 5.340158462524414], + [-1.2746683359146118, 11.132859230041504], + [-1.9710191488265991, 1.534062147140503], + [5.2032294273376465, 8.126805305480957], + [-5.000331401824951, -3.7898106575012207], + [5.926285266876221, -3.807464122772217], + [-3.5404112339019775, 5.149815559387207], + [-0.05401176959276199, 9.29751968383789], + [-4.784762859344482, 2.161074638366699], + [-1.1380109786987305, 10.73673152923584], + [0.5124651789665222, -7.508436679840088], + [-0.6441584229469299, -0.7940537929534912], + [-4.182060718536377, -1.1620099544525146], + [1.148971676826477, -0.2845022976398468], + [6.264786720275879, -2.786228895187378], + [2.616077184677124, 5.992795944213867], + [-0.39346396923065186, -1.09756600856781], + [-4.9250359535217285, -1.8073991537094116], + [0.9335466027259827, -0.22956451773643494], + [0.2133306860923767, -5.379251003265381], + [-2.659790515899658, 5.350136756896973], + [-4.0160393714904785, 5.563880920410156], + [2.7128632068634033, -4.216122627258301], + [0.7230004668235779, -0.53591388463974], + [6.746047496795654, -3.487090826034546], + [-3.984332799911499, 6.289064407348633], + [0.5954417586326599, -7.521335601806641], + [-5.36240291595459, 5.390064239501953], + [0.5327465534210205, -6.451907157897949], + [1.890733242034912, -4.655571937561035], + [-0.5390499234199524, 5.9495391845703125], + [5.966197490692139, -3.0313727855682373], + [-0.4387536644935608, 8.800597190856934], + [4.0845866203308105, 7.115555286407471], + [1.558175802230835, -5.313960075378418], + [-0.8183104395866394, -1.6019443273544312], + [1.6694276332855225, 5.343386650085449], + [-0.2932494282722473, 7.330423831939697], + [5.8816237449646, -2.260016441345215], + [-4.366078853607178, -3.0645389556884766], + [8.184593200683594, -2.3615567684173584], + [6.837437152862549, -2.6800389289855957], + [-3.526493549346924, -2.227203845977783], + [-1.482424020767212, -0.7770349383354187], + [1.5170550346374512, 0.14316073060035706], + [0.5489827394485474, -6.837000846862793], + [1.5308500528335571, 4.999427318572998], + [-1.662724256515503, 0.7051241993904114], + [0.656844973564148, -7.0967230796813965], + [0.8042941093444824, -4.27528715133667], + [2.070446014404297, 4.21622896194458], + [-0.10235107690095901, -1.1580148935317993], + [8.87575912475586, -2.8124706745147705], + [-3.9807426929473877, -2.154693365097046], + [4.33425235748291, 7.292211532592773], + [0.8449459075927734, -7.772468090057373], + [-1.033506989479065, 10.850458145141602], + [2.294311761856079, 3.8760054111480713], + [2.8843424320220947, -4.853372573852539], + [1.9857957363128662, -4.926790714263916], + [7.503428936004639, -2.7382423877716064], + [-1.1608027219772339, -0.4510125517845154], + [0.32486492395401, -5.620663642883301], + [-0.622985303401947, -0.7332332730293274], + [7.224938869476318, -2.3916923999786377], + [-1.1453303098678589, 11.02104377746582], + [2.9597110748291016, -4.727234840393066], + [0.6075504422187805, -0.6804107427597046], + [-3.499077081680298, -2.8292412757873535], + [-3.3672473430633545, -1.131940245628357], + [-0.10215688496828079, -3.9642608165740967], + [-3.9135258197784424, -1.9617863893508911], + [1.4537057876586914, 0.16860464215278625], + [-1.990033745765686, 1.7843101024627686], + [3.1404213905334473, -5.3510589599609375], + [0.5034991502761841, -7.639270782470703], + [-1.0074478387832642, 11.704019546508789], + [0.5024836659431458, -5.050607681274414], + [8.77431869506836, -2.631577968597412], + [1.8636627197265625, 5.475756645202637], + [-1.7491804361343384, -0.5549600720405579], + [-1.8879539966583252, 2.292320728302002], + [0.9232398867607117, -4.743700981140137], + [-3.218151807785034, 2.474151849746704], + [1.2065836191177368, 6.2407941818237305], + [5.519636631011963, -1.4441243410110474], + [7.160547733306885, -2.08201265335083], + [2.065897226333618, 0.4703672528266907], + [-0.95889812707901, 9.963109970092773], + [-1.8745557069778442, 2.049227476119995], + [7.667893409729004, -2.9288718700408936], + [-0.92206209897995, 10.37588119506836], + [1.6496891975402832, 5.483213901519775], + [1.2785062789916992, 5.066811561584473], + [-3.3120310306549072, -0.7398782968521118], + [-4.07218074798584, -0.978432834148407], + [1.8108510971069336, 3.3037030696868896], + [2.377826452255249, -5.348038673400879], + [1.5642598867416382, -4.6103363037109375], + [-3.4866771697998047, -1.1073302030563354], + [-1.2777467966079712, 11.562984466552734], + [3.172248601913452, 6.179692268371582], + [2.853510618209839, -4.955114364624023], + [2.373025894165039, 5.245129108428955], + [0.7251983284950256, -8.771245956420898], + [-1.4153045415878296, 11.699853897094727], + [0.19388294219970703, -5.847333908081055], + [-0.08662385493516922, -0.6522964835166931], + [2.1400458812713623, 0.5312086939811707], + [-1.42802894115448, 11.83714485168457], + [-4.974340438842773, 1.4477481842041016], + [-4.199336528778076, -2.6079204082489014], + [0.6899374127388, -9.174689292907715], + [-1.2738914489746094, 11.622490882873535], + [-0.26918330788612366, -2.159792423248291], + [6.605462074279785, -4.113027572631836], + [-1.8040001392364502, 0.958214282989502], + [-4.021563529968262, -0.22716975212097168], + [8.390307426452637, -2.8883535861968994], + [-2.377047300338745, 0.5395694971084595], + [0.6394930481910706, -7.951078414916992], + [2.6418488025665283, -4.310072898864746], + [-3.934359312057495, -2.1001083850860596], + [-3.94734787940979, -2.687046766281128], + [0.9594891667366028, -6.120896339416504], + [-4.130459308624268, -3.257277727127075], + [3.317770481109619, -3.4150233268737793], + [-1.5831629037857056, 0.9179829359054565], + [-5.286462306976318, 6.587845325469971], + [3.3535211086273193, 6.342641353607178], + [1.3291099071502686, 0.6706069111824036], + [0.6128161549568176, -5.339712142944336], + [2.7269675731658936, -4.228038311004639], + [-1.8364840745925903, -4.150791645050049], + [-2.131610870361328, -1.1285312175750732], + [-1.8749037981033325, 1.9431816339492798], + [-4.176927089691162, 5.157350540161133], + [0.8496828675270081, 0.021268542855978012], + [-3.5306882858276367, -1.429247260093689], + [-0.508631706237793, 9.876113891601562], + [-2.0712430477142334, 0.02105921134352684], + [-0.9547174572944641, 12.105552673339844], + [2.880836248397827, 6.2644877433776855], + [0.772297739982605, -7.395940780639648], + [-1.2214605808258057, 11.608612060546875], + [0.10752805322408676, -3.3960444927215576], + [-3.688896417617798, -1.3696860074996948], + [-0.711294412612915, 10.551697731018066], + [-0.09616855531930923, -1.3350909948349], + [-3.6091458797454834, -0.20606344938278198], + [2.841400384902954, -4.7747321128845215], + [-4.3357062339782715, -0.7820121049880981], + [-1.0874340534210205, 9.84847640991211], + [-1.9811428785324097, 2.3189237117767334], + [-0.23613181710243225, 0.8259232044219971], + [-2.466534376144409, -3.4278571605682373], + [1.0307527780532837, -4.564465522766113], + [1.9270131587982178, 5.094879150390625], + [2.5402350425720215, 0.8358052372932434], + [-1.3241690397262573, 12.003227233886719], + [0.530439555644989, -5.002232551574707], + [-1.3604402542114258, -0.24295574426651], + [-1.3807313442230225, 11.955652236938477], + [0.9653714299201965, -5.7751569747924805], + [2.7704036235809326, -4.902153968811035], + [4.828192710876465, 7.533900737762451], + [-0.01114160567522049, -4.521391868591309], + [-3.56217885017395, -0.9249712228775024], + [2.766496419906616, -4.568896293640137], + [-0.8204156160354614, 10.036611557006836], + [0.5119678974151611, -6.174392223358154], + [1.8998923301696777, 1.0678048133850098], + [-5.647995948791504, 4.472355842590332], + [0.40043509006500244, -6.639975547790527], + [8.304726600646973, -2.5117299556732178], + [-1.5062389373779297, -0.06371182203292847], + [-4.794053554534912, -4.08664083480835], + [-3.6262762546539307, -0.9971663951873779], + [7.9275641441345215, -2.7038800716400146], + [0.8699667453765869, 5.080791473388672], + [0.5371610522270203, -4.615200042724609], + [-1.5525139570236206, 12.630467414855957], + [-3.5579137802124023, -2.4053986072540283], + [-3.689096212387085, -2.295078754425049], + [-5.768957614898682, -2.1641476154327393], + [-4.848794460296631, 4.203319549560547], + [1.1595935821533203, -0.43800950050354004], + [-0.9731845259666443, -2.721529960632324], + [6.531005382537842, -2.7892069816589355], + [0.6734361052513123, -8.691449165344238], + [0.17006593942642212, -5.465434551239014], + [7.86010217666626, -2.251871347427368], + [7.7274298667907715, -2.549165964126587], + [3.3669188022613525, 6.591692924499512], + [0.6082606911659241, -8.426528930664062], + [-2.5497324466705322, 2.5808234214782715], + [-3.3413684368133545, 5.001526832580566], + [-1.0633538961410522, 11.353404998779297], + [-2.7948572635650635, -2.554227828979492], + [-3.3717968463897705, -1.0380550622940063], + [1.2438796758651733, 3.3966081142425537], + [-4.804262638092041, 6.536372661590576], + [-5.120968341827393, -0.744026243686676], + [0.5280685424804688, -7.64390754699707], + [-5.15809965133667, 4.125146389007568], + [0.4306233525276184, -4.459041595458984], + [1.3521981239318848, 6.334245681762695], + [2.8399999141693115, -5.044795513153076], + [1.4488190412521362, -5.857517242431641], + [-1.0429611206054688, 10.570289611816406], + [-2.4924139976501465, -0.8244283199310303], + [-1.9582974910736084, 1.8192580938339233], + [-0.33752161264419556, 9.348352432250977], + [0.04602435976266861, -0.8895183205604553], + [-2.001479148864746, 2.2012691497802734], + [-3.5255911350250244, -0.9684297442436218], + [2.1708357334136963, -4.708211898803711], + [-4.155595779418945, -2.315201997756958], + [3.401029586791992, 6.694655895233154], + [-4.326898574829102, -1.574454665184021], + [7.79951286315918, -2.4123852252960205], + [3.0000736713409424, -4.572203636169434], + [-2.9820268154144287, -2.801252841949463], + [8.181926727294922, -3.2868499755859375], + [-1.0447165966033936, 10.835147857666016], + [1.1306794881820679, 4.361774921417236], + [-1.080079436302185, 11.162881851196289], + [-1.6349583864212036, -0.7810099124908447], + [-5.141249179840088, 7.209123611450195], + [-1.1587473154067993, 9.67903995513916], + [1.7249207496643066, -3.328228712081909], + [2.7273504734039307, -4.300570487976074], + [0.606488823890686, -0.6647955775260925], + [8.630331993103027, -2.8167531490325928], + [-3.697678804397583, -1.3201426267623901], + [-3.996860980987549, -1.4352188110351562], + [9.472769737243652, -2.8418209552764893], + [-0.036981500685214996, -4.228147506713867], + [-0.05134863406419754, -3.7665629386901855], + [-1.8727917671203613, 1.889818787574768], + [7.881008148193359, -3.9335548877716064], + [-1.790027379989624, 2.2044930458068848], + [1.4907833337783813, 0.2976473867893219], + [2.796593427658081, -4.475503921508789], + [-4.613598346710205, -1.169651746749878], + [-2.06835675239563, 1.772172451019287], + [0.8241866230964661, -8.333550453186035], + [-2.4110476970672607, 2.4087765216827393], + [6.495733261108398, -2.0671098232269287], + [-0.8903401494026184, 10.230165481567383], + [3.1395461559295654, -4.884969234466553], + [4.2593255043029785, -1.6367937326431274], + [6.670153617858887, -1.887313723564148], + [-1.9979653358459473, 2.2885994911193848], + [9.284682273864746, -2.9143123626708984], + [-3.7065792083740234, -1.2743061780929565], + [2.9392073154449463, -4.397741794586182], + [-1.5093610286712646, 2.364753484725952], + [-3.450983762741089, 5.511580944061279], + [-0.7769801020622253, 1.1466575860977173], + [-0.6959933042526245, 10.297867774963379], + [2.5863654613494873, -4.479821681976318], + [-0.617885410785675, 9.268959045410156], + [-3.8323657512664795, -1.438710331916809], + [1.701087236404419, 0.29159873723983765], + [-4.414350986480713, 2.235516309738159], + [-1.5704610347747803, 12.591814041137695], + [-3.715681314468384, -2.1500136852264404], + [2.735689878463745, -4.447685241699219], + [1.151197910308838, -5.787664413452148], + [4.911478042602539, -3.1120212078094482], + [-3.618049144744873, -1.3831956386566162], + [4.395426273345947, 7.2866010665893555], + [1.9728748798370361, 5.310542106628418], + [9.042080879211426, -2.7604598999023438], + [-5.016287326812744, -0.6630606055259705], + [-4.451254367828369, 5.073558807373047], + [1.1949127912521362, 5.772745132446289], + [-3.200150728225708, 5.1128435134887695], + [-1.7864606380462646, 2.418063163757324], + [-1.524055004119873, 1.2564669847488403], + [-1.2449595928192139, 11.00755786895752], + [-0.6435966491699219, 9.829296112060547], + [0.4956369996070862, -4.841266632080078], + [-3.635807752609253, -2.113100290298462], + [9.387378692626953, -2.853938102722168], + [0.658890962600708, 0.8988243937492371], + [-1.018094778060913, 10.421256065368652], + [1.8002498149871826, 5.193694591522217], + [2.4831702709198, 0.5372970104217529], + [6.901619911193848, -2.242928981781006], + [1.530085563659668, -4.269859790802002], + [-1.6052016019821167, -1.2967733144760132], + [-1.5965425968170166, 1.2633339166641235], + [6.022848606109619, -3.6591274738311768], + [-1.0175573825836182, -1.9826139211654663], + [0.8217610716819763, -0.3984764814376831], + [-4.315883159637451, -1.0537707805633545], + [-4.00522518157959, -3.33553147315979], + [-2.99338960647583, 4.09516716003418], + [2.7520089149475098, -3.7329070568084717], + [0.6849240064620972, -9.098194122314453], + [-4.2556538581848145, -1.2317875623703003], + [-4.3421311378479, 5.895319938659668], + [2.6924664974212646, -4.348963260650635], + [-1.6501543521881104, 1.9912031888961792], + [-0.9799349904060364, 10.672386169433594], + [2.492762327194214, 3.669715404510498], + [7.163076400756836, -2.1405889987945557], + [-4.371236324310303, -3.0551695823669434], + [-0.5794488191604614, 10.347953796386719], + [-4.786488056182861, 7.073108196258545], + [2.9079749584198, 6.317699432373047], + [0.06149130314588547, -2.6010727882385254], + [-5.556204319000244, -0.7496857643127441], + [4.195197105407715, 7.268081188201904], + [-3.0217511653900146, 5.3264312744140625], + [6.22158145904541, -1.19180166721344], + [-4.7600860595703125, 4.082773685455322], + [1.0913898944854736, 5.564846992492676], + [-4.202969074249268, -1.3324323892593384], + [-4.463261127471924, -1.1507823467254639], + [5.565001010894775, 8.509730339050293], + [2.483807325363159, -4.349294662475586], + [-1.4485219717025757, 5.146097183227539], + [-1.3188341856002808, -0.29530027508735657], + [0.5540820360183716, -7.403302192687988], + [-4.075887203216553, -1.1447230577468872], + [-1.09551203250885, 9.896001815795898], + [1.7402782440185547, 5.636308670043945], + [-1.998019814491272, 2.2170188426971436], + [-3.1752493381500244, -0.9790393114089966], + [9.050705909729004, -2.757028579711914], + [0.7379778623580933, -4.760137557983398], + [-4.14743185043335, 3.857738733291626], + [1.1194539070129395, -6.582121849060059], + [1.6542766094207764, 2.911900281906128], + [2.849933385848999, 0.7341153621673584], + [6.120485782623291, -3.622093677520752], + [0.0701778456568718, 5.673714637756348], + [-0.34103894233703613, 9.701395034790039], + [-4.367640495300293, -2.2960402965545654], + [-4.0285258293151855, 4.712252616882324], + [-5.6761088371276855, 5.453490734100342], + [-0.09303120523691177, -0.9639396667480469], + [-1.0772005319595337, 9.954806327819824], + [6.50085973739624, -1.6274852752685547], + [0.7164909243583679, -9.466198921203613], + [3.622938871383667, -4.144789218902588], + [8.23604679107666, -3.077439069747925], + [-4.978774547576904, -1.4155511856079102], + [-2.0199992656707764, 1.1341410875320435], + [8.744975090026855, -2.5707390308380127], + [-3.2147207260131836, -1.5325655937194824], + [1.0025837421417236, -6.476259231567383], + [1.9996764659881592, 5.230477333068848], + [-0.30522871017456055, 7.879509925842285], + [1.6978106498718262, -5.283318042755127], + [-4.600063800811768, -1.4928518533706665], + [5.4684648513793945, -1.9931659698486328], + [2.6027305126190186, 5.969570636749268], + [1.258467197418213, 6.164699077606201], + [1.907525658607483, 5.458706855773926], + [2.1809825897216797, 0.9055593013763428], + [-2.0343098640441895, 1.8141359090805054], + [-0.020325101912021637, -4.138303756713867], + [-3.4413399696350098, -1.6214851140975952], + [1.6251146793365479, 5.035650253295898], + [0.22237718105316162, -6.382649898529053], + [-5.107345104217529, 7.646945476531982], + [-4.65696382522583, 7.275304794311523], + [8.436812400817871, -2.958803176879883], + [-0.9003115892410278, 10.276092529296875], + [-2.5378968715667725, -0.8899510502815247], + [-0.2358373999595642, 9.049928665161133], + [10.010491371154785, -3.0584557056427], + [6.476434230804443, -4.0662841796875], + [-0.7024016976356506, 9.983477592468262], + [8.57013988494873, -2.584686040878296], + [0.3405959904193878, -4.204145908355713], + [-1.1122208833694458, 10.758354187011719], + [0.38566476106643677, -6.114110946655273], + [6.948753833770752, -2.5026280879974365], + [2.491325855255127, -4.2228546142578125], + [0.026181839406490326, -2.2222371101379395], + [1.0697004795074463, -5.185405731201172], + [-3.1767964363098145, -1.7372010946273804], + [4.035313129425049, -3.57198166847229], + [-0.5264197587966919, 9.846643447875977], + [0.8950261473655701, -5.063780784606934], + [0.7710919380187988, -0.6158979535102844], + [1.7575478553771973, 1.9642773866653442], + [-5.579050064086914, -1.2038129568099976], + [6.558925628662109, -1.6901015043258667], + [-5.001612186431885, 6.421492576599121], + [0.7364442944526672, -8.925117492675781], + [-2.3989791870117188, 4.529411315917969], + [-3.0546398162841797, -1.0486148595809937], + [0.4468701481819153, -7.530919075012207], + [0.5094963312149048, -0.45752429962158203], + [0.6634126901626587, 4.796419143676758], + [1.0249820947647095, -0.69548100233078], + [1.8292515277862549, 1.221300482749939], + [2.4028074741363525, -3.9776861667633057], + [6.732003688812256, -2.5322554111480713], + [-2.7414495944976807, 2.9029226303100586], + [0.3736628293991089, -5.686737060546875], + [1.5215873718261719, 5.338983535766602], + [-3.414478063583374, -1.3515533208847046], + [-3.7513949871063232, 6.051176071166992], + [-4.53448486328125, -0.5174379944801331], + [0.8237369656562805, -8.970979690551758], + [-0.303849458694458, 9.55614185333252], + [8.19851016998291, -3.1015708446502686], + [-3.758096218109131, -0.5568298101425171], + [2.1635329723358154, -4.059830665588379], + [9.461463928222656, -2.988682985305786], + [-2.5681989192962646, 6.108586311340332], + [4.902637481689453, 7.896210670471191], + [-3.8776533603668213, -0.7430381178855896], + [7.304661273956299, -3.156438112258911], + [0.7664657831192017, -3.857276678085327], + [-3.479384660720825, 5.710752964019775], + [-5.097570896148682, 5.8158860206604], + [-3.9248759746551514, 0.1796642541885376], + [-1.0095502138137817, -0.006077323108911514], + [-0.3668398857116699, 10.173919677734375], + [0.5756757259368896, -6.875563621520996], + [3.8113346099853516, 6.339179039001465], + [2.887500047683716, -5.0705366134643555], + [0.47866880893707275, -7.207339286804199], + [-3.381638765335083, -1.1847854852676392], + [-3.5664494037628174, -1.3120174407958984], + [-2.067979335784912, -0.7155026197433472], + [0.4300868511199951, -5.174790859222412], + [-1.9636303186416626, 1.1983448266983032], + [6.802584171295166, -2.2080748081207275], + [-3.7301294803619385, -2.6071178913116455], + [-1.0339909791946411, 10.765813827514648], + [-1.1260305643081665, 1.77793550491333], + [0.5361473560333252, -7.411557197570801], + [0.41818493604660034, -7.069079399108887], + [-2.923379421234131, -0.8908811807632446], + [-1.2308708429336548, -2.3366730213165283], + [1.63680100440979, 1.5840593576431274], + [1.5725297927856445, 1.9028154611587524], + [0.4879908561706543, -6.417597770690918], + [-4.352192401885986, -0.8549494743347168], + [1.1622284650802612, 3.5667974948883057], + [-0.3327562212944031, 8.26801872253418], + [-1.937709093093872, 2.1879162788391113], + [2.168278455734253, 5.012938976287842], + [-1.5967183113098145, -1.093041181564331], + [-0.7474287152290344, 10.75980281829834], + [-2.0677411556243896, 1.746856451034546], + [-1.9548174142837524, 2.1626243591308594], + [0.5899425745010376, -8.149415969848633], + [0.1278553605079651, -5.557343006134033], + [2.344839572906494, -4.724271297454834], + [-0.839563250541687, -0.9888041019439697], + [-4.117448329925537, 5.974099159240723], + [-2.765632152557373, 6.0463972091674805], + [2.841728925704956, -4.831360816955566], + [-1.4072327613830566, 12.034152030944824], + [0.17939668893814087, -5.211215019226074], + [3.96925950050354, 7.16160249710083], + [2.290280342102051, 4.951014041900635], + [-4.557148456573486, -5.148707389831543], + [1.1279183626174927, 1.6664260625839233], + [2.5106115341186523, 4.001515865325928], + [4.443374156951904, 7.344354629516602], + [0.4850096106529236, -6.8605852127075195], + [-3.317878246307373, -1.866632103919983], + [-1.1295236349105835, 10.452165603637695], + [-2.902294874191284, -0.4485940933227539], + [0.43762362003326416, -4.919445991516113], + [5.351525783538818, -3.631848096847534], + [0.6698357462882996, -4.394789218902588], + [-0.6686207056045532, 9.662849426269531], + [0.9479246735572815, -0.30423977971076965], + [5.140716552734375, -1.3299788236618042], + [-3.7879865169525146, 5.9476318359375], + [-1.244327187538147, 10.488435745239258], + [3.06882643699646, -4.653900146484375], + [2.509667158126831, -4.4738311767578125], + [-3.9748432636260986, -1.4137684106826782], + [1.725677728652954, 2.266125202178955], + [2.5797057151794434, -5.208695411682129], + [2.4966397285461426, 5.569999694824219], + [2.8586437702178955, -4.064702987670898], + [1.105992317199707, 4.967324256896973], + [5.661121368408203, 8.412944793701172], + [-1.9380974769592285, 1.0500198602676392], + [-4.297369480133057, -1.8458962440490723], + [-4.125305652618408, 6.046929359436035], + [-1.3439768552780151, 11.344568252563477], + [-1.743575096130371, 0.476526141166687], + [-1.4103745222091675, 11.917983055114746], + [4.2544169425964355, 7.3725104331970215], + [7.038424491882324, -3.092522382736206], + [6.510745048522949, -2.0770456790924072], + [-2.1494789123535156, -0.8889491558074951], + [-5.152402400970459, -1.075240135192871], + [-3.3004109859466553, -2.358855962753296], + [8.544306755065918, -3.610222578048706], + [-3.1334784030914307, -1.8025621175765991], + [-3.18422532081604, -1.6444188356399536], + [1.3590636253356934, 0.15319722890853882], + [0.7667983174324036, -0.3743748068809509], + [1.5577552318572998, -5.120800018310547], + [-1.4219956398010254, 0.8947703838348389], + [7.57648229598999, -2.5277750492095947], + [1.6723527908325195, 5.80601692199707], + [-0.812381386756897, 9.738353729248047], + [2.917574644088745, -4.870628833770752], + [0.6073975563049316, -8.205913543701172], + [2.303353786468506, -5.058382511138916], + [2.6530635356903076, -4.5049333572387695], + [8.098856925964355, -3.519845724105835], + [-1.9967750310897827, 5.092400074005127], + [-1.591539978981018, 1.421997308731079], + [3.1180989742279053, -4.758807182312012], + [2.5580132007598877, -4.082549095153809], + [-5.371592998504639, 7.068755626678467], + [-0.5142639875411987, 9.730512619018555], + [-3.3456928730010986, -1.247413158416748], + [-1.720536708831787, 0.8083793520927429], + [-0.9319905042648315, 9.39010238647461], + [1.9641683101654053, 5.572503089904785], + [6.359553813934326, -3.114725351333618], + [0.5124586820602417, -7.553199768066406], + [4.613364219665527, 7.318507194519043], + [2.911019802093506, -4.887812614440918], + [-3.2284724712371826, -1.3303930759429932], + [-2.088359832763672, 2.353689432144165], + [2.256511926651001, 0.5981120467185974], + [-2.8683156967163086, -1.4714657068252563], + [2.3917195796966553, 5.514280796051025], + [-3.4285194873809814, -1.4563862085342407], + [-0.564038872718811, 4.580924034118652], + [-4.603935241699219, 4.777250289916992], + [1.2835636138916016, 3.0018060207366943], + [1.2340943813323975, 4.249307632446289], + [-0.10945416241884232, -0.8643530607223511], + [1.4223188161849976, -3.718482732772827], + [1.2883944511413574, 4.835718154907227], + [-3.4153497219085693, -1.4388314485549927], + [-1.2958729267120361, 11.149969100952148], + [-1.9074599742889404, 1.0766559839248657], + [-1.680347204208374, 2.213597297668457], + [-1.3383996486663818, 11.56830883026123], + [0.5668646097183228, -7.360390663146973], + [-5.107481002807617, 5.766467094421387], + [-3.647035837173462, 5.7674431800842285], + [1.4788508415222168, 4.599991798400879], + [2.4287009239196777, 4.557456016540527], + [-1.2874675989151, 11.348808288574219], + [7.644922733306885, -2.381417989730835], + [-1.9813587665557861, 0.4404264986515045], + [0.619306743144989, -8.38818645477295], + [-3.3857970237731934, 5.114579677581787], + [0.2217787206172943, -4.507392883300781], + [7.802565097808838, -3.4070510864257812], + [-2.5921809673309326, -1.9049149751663208], + [0.5189082026481628, -0.9705349802970886], + [1.499788522720337, 5.494082450866699], + [2.973543167114258, -4.903017997741699], + [1.534542441368103, 5.672674179077148], + [-1.837752103805542, -2.8538293838500977], + [0.5345123410224915, -4.969700336456299], + [-2.4538471698760986, -0.8115555644035339], + [-3.6255245208740234, -0.7860047221183777], + [0.48841989040374756, -4.373767852783203], + [7.933656215667725, -2.8242504596710205], + [2.0817906856536865, -3.978715181350708], + [0.755199134349823, -4.462924003601074], + [-1.226697325706482, 1.4723159074783325], + [2.3185911178588867, 5.274940013885498], + [0.8495976328849792, -6.335888862609863], + [2.1574838161468506, 4.130268096923828], + [2.9239706993103027, -4.554388523101807], + [0.2842308282852173, -1.039508581161499], + [8.277377128601074, -2.8809235095977783], + [-5.21619987487793, 5.581136703491211], + [-0.2819322943687439, 8.137414932250977], + [0.7971078157424927, -4.8042683601379395], + [-5.332005023956299, 4.959822654724121], + [-5.00549840927124, 6.875678062438965], + [-3.896103858947754, -2.8732283115386963], + [2.5495471954345703, -4.194378852844238], + [-4.118266582489014, -2.9327852725982666], + [3.007369041442871, -0.6956075429916382], + [0.2582165598869324, -5.521449089050293], + [0.5435000061988831, -7.7118449211120605], + [2.3059284687042236, -6.145878791809082], + [-1.4379595518112183, 12.428386688232422], + [8.6867036819458, -2.8286259174346924], + [-1.3377735614776611, 11.75135612487793], + [-0.8963131308555603, -1.3350205421447754], + [-0.14215707778930664, -2.9638967514038086], + [8.110875129699707, -3.0941100120544434], + [0.06891217082738876, -4.661213397979736], + [-0.06737039238214493, -5.245593070983887], + [1.1097480058670044, 5.884456634521484], + [-5.491382598876953, 7.740319728851318], + [-0.03291205316781998, -4.02523136138916], + [-0.6518798470497131, 10.152922630310059], + [-3.2779757976531982, -1.2138768434524536], + [0.7176770567893982, -8.291339874267578], + [2.5775203704833984, -5.73632287979126], + [-3.890821695327759, -1.9360696077346802], + [-0.8603278398513794, 10.300130844116211], + [-3.4029390811920166, -2.4243698120117188], + [7.039109230041504, -3.0947256088256836], + [-4.157044887542725, -0.9857209920883179], + [0.9084845185279846, -5.375297546386719], + [0.794066846370697, -6.8800578117370605], + [-2.9950220584869385, -1.591002345085144], + [1.5140334367752075, -4.017472743988037], + [0.5701573491096497, -0.5478806495666504], + [-3.203049421310425, -1.3186951875686646], + [1.3648474216461182, -5.336175441741943], + [0.3575044870376587, -4.620957374572754], + [0.7759516835212708, -8.278188705444336], + [-1.9198296070098877, 2.111046075820923], + [-1.9584712982177734, 1.8419018983840942], + [-2.3604087829589844, -0.7960798740386963], + [4.815230846405029, 7.832029342651367], + [8.187898635864258, -2.4610252380371094], + [-3.0281665325164795, 1.976538062095642], + [2.7504284381866455, -4.836740493774414], + [-1.402710199356079, 1.2147204875946045], + [2.0563347339630127, 6.115591526031494], + [1.1881282329559326, -5.847484588623047], + [-1.2890068292617798, 11.64006233215332], + [3.6835663318634033, 6.833014965057373], + [7.594825267791748, -2.42781662940979], + [-3.9470887184143066, -0.8561732172966003], + [-2.9199564456939697, -1.9654698371887207], + [-5.077232360839844, 1.0306212902069092], + [2.4536657333374023, 4.768096446990967], + [1.6297024488449097, 1.2704194784164429], + [2.7269222736358643, -4.398387908935547], + [-3.2891719341278076, -2.076998233795166], + [-3.4175031185150146, -1.1951037645339966], + [1.4111881256103516, 0.28340137004852295], + [2.30387282371521, 3.9002633094787598], + [5.121353626251221, 7.86392879486084], + [-2.161036252975464, 2.078840732574463], + [-3.0389387607574463, -0.9154576063156128], + [7.338679790496826, -3.7704131603240967], + [-4.29140567779541, -0.7518161535263062], + [-1.5501561164855957, 12.749303817749023], + [5.567840099334717, 8.484687805175781], + [0.8936684131622314, 0.07787221670150757], + [2.4353933334350586, 4.347832202911377], + [2.7436115741729736, -4.769937515258789], + [2.5606849193573, 6.3293609619140625], + [-0.3666355609893799, 9.2379732131958], + [-2.792634963989258, 3.068035840988159], + [-0.9353761672973633, 10.16079044342041], + [-3.7247674465179443, -2.1564416885375977], + [8.592984199523926, -2.8604326248168945], + [-1.6188722848892212, 13.393627166748047], + [-5.733370304107666, -1.2409247159957886], + [1.208721399307251, 0.635044276714325], + [7.5756516456604, -2.2885377407073975], + [-1.6803494691848755, 1.7577418088912964], + [0.251186728477478, -6.73958158493042], + [6.569277286529541, -2.8136370182037354], + [-3.802555561065674, -1.914616346359253], + [5.891830921173096, -2.8434059619903564], + [1.0809588432312012, -5.834187984466553], + [-2.4739081859588623, -4.3709917068481445], + [2.7432773113250732, -4.476225852966309], + [8.727720260620117, -2.7954599857330322], + [0.3491622805595398, -5.345911026000977], + [2.810699224472046, -4.513458251953125], + [2.4125702381134033, -6.424424648284912], + [9.302939414978027, -3.080897569656372], + [2.142165422439575, -4.382575988769531], + [0.42293864488601685, -7.2909345626831055], + [-3.8023033142089844, -2.611650228500366], + [4.2323079109191895, 7.137331962585449], + [-3.2174055576324463, -0.4781353175640106], + [0.4445645809173584, 0.8511796593666077], + [-4.65529203414917, 5.458725929260254], + [0.6873356699943542, -8.086414337158203], + [-5.024234294891357, 6.357691764831543], + [2.7618396282196045, -4.551263809204102], + [-4.83976411819458, -3.516559362411499], + [-1.3242456912994385, -0.674408495426178], + [-5.295976638793945, 4.268344402313232], + [-1.9889600276947021, 2.211498498916626], + [1.9985992908477783, 5.133547306060791], + [0.7174423336982727, -7.213497638702393], + [2.498115062713623, 5.289299964904785], + [-5.147881507873535, 6.452752113342285], + [5.969656467437744, -2.7511231899261475], + [-1.2354764938354492, 0.16293391585350037], + [7.178781986236572, -2.3848001956939697], + [-0.8562027812004089, 10.917184829711914], + [-1.7740044593811035, 0.4651041030883789], + [0.8286721706390381, -6.776470184326172], + [0.3345947861671448, -5.553946495056152], + [-3.8849198818206787, -1.884942889213562], + [2.742903232574463, -4.8327484130859375], + [8.096601486206055, -2.9066390991210938], + [6.350048542022705, -3.257169723510742], + [2.400810956954956, 6.117002964019775], + [0.37942326068878174, -4.958778381347656], + [1.4140058755874634, 5.670773029327393], + [-3.9113340377807617, -0.18289446830749512], + [4.172494411468506, 7.171119213104248], + [2.9350552558898926, -4.862960338592529], + [2.6233038902282715, -4.844473838806152], + [0.6491140127182007, -8.93781852722168], + [-1.1766265630722046, 11.061606407165527], + [-2.6090800762176514, -0.6584471464157104], + [6.013529300689697, -1.0898375511169434], + [-1.862372875213623, -0.3329331576824188], + [-4.113348007202148, -1.1485308408737183], + [-2.182602643966675, -0.026776794344186783], + [-2.932077646255493, -1.9244122505187988], + [0.3970673680305481, -7.186582565307617], + [0.5261536240577698, -7.5296807289123535], + [-3.3885867595672607, -1.9459316730499268], + [-1.4903538227081299, 0.8134748339653015], + [-5.482621669769287, 6.166935920715332], + [-0.03214741498231888, 4.43679666519165], + [0.6755908131599426, -8.097469329833984], + [-1.199676752090454, 9.48117446899414], + [7.191691875457764, -3.8035271167755127], + [0.2983182966709137, -4.77180290222168], + [-3.2971580028533936, -0.4733787775039673], + [1.3444777727127075, -6.885162830352783], + [2.4065706729888916, 6.390473365783691], + [0.13680320978164673, -3.7713286876678467], + [-0.820763349533081, 9.806052207946777], + [-5.01570463180542, 6.060157299041748], + [0.5376558303833008, -7.816226482391357], + [-4.6155219078063965, 6.249912738800049], + [2.7965269088745117, -5.34470272064209], + [-1.6739460229873657, 1.4717875719070435], + [4.814403533935547, 8.11067008972168], + [0.5447121262550354, -8.02123737335205], + [0.4768992066383362, -7.619223594665527], + [8.60626220703125, -2.6530044078826904], + [0.8020074963569641, -6.447713375091553], + [-2.1954710483551025, -1.5392175912857056], + [-4.24180269241333, -1.7968019247055054], + [-3.9127910137176514, -3.634458303451538], + [-3.4111812114715576, -2.5455620288848877], + [0.5032605528831482, -6.574275493621826], + [0.6883627772331238, -8.700777053833008], + [-0.5419403910636902, 3.7167069911956787], + [-4.131295680999756, -1.198715329170227], + [0.6194708347320557, -7.419864654541016], + [6.325870513916016, -1.814524531364441], + [-3.3460867404937744, -2.550302267074585], + [-1.677650809288025, 1.192988395690918], + [-0.3996541500091553, 8.548883438110352], + [7.125930309295654, -2.2407491207122803], + [-5.1052727699279785, 6.658189296722412], + [-5.936629295349121, -0.844905436038971], + [-4.64923095703125, 5.807122707366943], + [-4.867743968963623, 6.894716262817383], + [1.6474714279174805, -5.172657489776611], + [8.6775541305542, -2.981537103652954], + [1.203446388244629, -5.1437578201293945], + [3.6413047313690186, 6.943024635314941], + [0.8791677951812744, -7.614712715148926], + [-5.070085525512695, 6.457024097442627], + [-4.233967304229736, -1.1100200414657593], + [0.7934390306472778, -8.164326667785645], + [-4.75321626663208, 6.902597904205322], + [2.9985263347625732, -4.987673759460449], + [-2.019174814224243, 0.8456178307533264], + [0.5043626427650452, -5.024468421936035], + [1.0956032276153564, -5.320178985595703], + [-3.746896505355835, -2.7278504371643066], + [5.633177280426025, -1.2948564291000366], + [-1.2777348756790161, 11.329598426818848], + [-2.0615320205688477, 2.0215296745300293], + [-2.5840137004852295, 2.7794272899627686], + [0.6435096859931946, -7.815600872039795], + [-1.1715644598007202, 11.075803756713867], + [2.8105227947235107, -4.4918670654296875], + [2.758960485458374, -4.032188892364502], + [-0.12480498105287552, 9.478277206420898], + [8.996626853942871, -3.135126829147339], + [-1.5757808685302734, 1.3889491558074951], + [1.5376904010772705, 2.1372854709625244], + [-2.003211736679077, 2.1455769538879395], + [0.3943147659301758, 6.392148494720459], + [-0.5425209403038025, 9.911918640136719], + [1.6612908840179443, -5.079263210296631], + [0.22694504261016846, -5.4574875831604], + [-4.391128063201904, -3.7284634113311768], + [-1.2014130353927612, 10.723742485046387], + [0.5290058851242065, -7.789144515991211], + [-1.5664254426956177, 0.384753942489624], + [1.0883903503417969, -3.999992609024048], + [0.4552355408668518, -6.750609874725342], + [2.4478790760040283, -4.774614334106445], + [6.152361869812012, -2.012798309326172], + [0.7958484888076782, -5.701874732971191], + [2.9401819705963135, -4.825767517089844], + [0.100006602704525, -4.454429626464844], + [-0.9993793368339539, 0.7724756598472595], + [7.738555908203125, -2.309311866760254], + [-4.272793292999268, -0.6384057998657227], + [1.1617110967636108, -6.061943054199219], + [-1.343807339668274, 12.236950874328613], + [2.8531734943389893, -4.529502868652344], + [0.7778012156486511, -8.747386932373047], + [-1.8470194339752197, 1.6075687408447266], + [-0.7020511031150818, 10.21902847290039], + [-4.16785192489624, 7.142387390136719], + [2.630859613418579, -4.642800331115723], + [3.02700138092041, -4.717477798461914], + [2.820378541946411, -4.536739349365234], + [-4.3575263023376465, 4.464472770690918], + [-3.2799129486083984, -1.9052753448486328], + [7.29365873336792, -1.948870062828064], + [2.024606227874756, 3.508589744567871], + [6.271990776062012, -3.469271421432495], + [4.474662780761719, 7.681816101074219], + [-5.321887016296387, 7.053287506103516], + [-3.2246439456939697, -0.8505469560623169], + [1.0458929538726807, 6.439550399780273], + [0.46577972173690796, -4.758571624755859], + [2.017263889312744, -4.32923698425293], + [-5.624410152435303, 3.839097738265991], + [-4.614072322845459, -0.8718270063400269], + [5.348119258880615, -1.297074794769287], + [-0.8106487393379211, 10.333637237548828], + [5.417425632476807, 8.437077522277832], + [-0.9858422875404358, 1.1205989122390747], + [2.4120991230010986, -4.752863883972168], + [0.9364979863166809, -6.322310924530029], + [-0.9762978553771973, -1.5467995405197144], + [2.5278332233428955, -5.250280857086182], + [6.80976676940918, -1.8787214756011963], + [-0.6459934115409851, 9.858975410461426], + [2.619554281234741, 6.230323791503906], + [-1.5396476984024048, 12.288739204406738], + [-5.023809909820557, 4.688270568847656], + [0.5698038935661316, -7.343231201171875], + [-0.717339038848877, 9.636331558227539], + [-0.9712910652160645, 8.854043960571289], + [-3.7593908309936523, -1.787047028541565], + [-4.141937255859375, 4.3760175704956055], + [6.798991680145264, -1.887709140777588], + [0.961499035358429, -0.4024965763092041], + [-3.252032518386841, -2.0420525074005127], + [2.76727032661438, -5.057686805725098], + [5.787785053253174, -1.2869080305099487], + [-1.9190449714660645, 0.9660159349441528], + [0.6934776902198792, -5.8191118240356445], + [2.605787992477417, 0.7986757755279541], + [4.061323642730713, 7.254806041717529], + [-3.322504758834839, -1.2646503448486328], + [-1.3638962507247925, 0.3470255136489868], + [3.0183053016662598, 6.459289073944092], + [-1.3990652561187744, -0.9660001397132874], + [0.9976268410682678, 7.195276260375977], + [2.342066526412964, 0.49687594175338745], + [0.6100219488143921, -6.734448432922363], + [-5.552398204803467, 3.291011095046997], + [-1.379361867904663, 11.674830436706543], + [-3.509652853012085, 1.0289936065673828], + [-1.3350322246551514, 11.915397644042969], + [0.6951417326927185, -6.9993181228637695], + [-1.7132757902145386, 0.7903616428375244], + [7.7208356857299805, -2.4907634258270264], + [2.916205406188965, 5.356932640075684], + [-2.1804192066192627, 2.2414674758911133], + [-0.9678285717964172, 10.783697128295898], + [1.5530192852020264, 0.27207818627357483], + [5.588534355163574, -2.638788938522339], + [-3.254561185836792, -1.3484728336334229], + [-1.393998146057129, 11.507298469543457], + [2.6600892543792725, -5.463324546813965], + [-3.108475685119629, -2.0551681518554688], + [-0.9855455756187439, 10.39970588684082], + [-4.712230682373047, 6.720492839813232], + [0.8256862759590149, -7.4271697998046875], + [-0.03042937070131302, 0.28715401887893677], + [-2.749075412750244, 0.035249944776296616], + [-1.4413111209869385, -1.4914295673370361], + [-5.100334644317627, -0.7454970479011536], + [-3.898239850997925, 5.992413520812988], + [0.6619486808776855, -5.878445625305176], + [1.3799551725387573, 4.439882278442383], + [0.8293985724449158, -7.476889610290527], + [-4.210529804229736, -0.7728403210639954], + [-4.152495384216309, -1.1833654642105103], + [-4.337244033813477, -3.238954782485962], + [0.02054562419652939, -4.466310501098633], + [2.0280745029449463, 3.562448024749756], + [0.6502874493598938, -8.28253173828125], + [2.6228420734405518, -5.48422384262085], + [-4.468418598175049, 4.99003791809082], + [2.560986280441284, 4.981657981872559], + [2.4464378356933594, 5.590622425079346], + [9.094693183898926, -2.769596576690674], + [-3.3642542362213135, 5.921162128448486], + [-1.4080809354782104, 11.816497802734375], + [2.6326143741607666, -4.456728935241699], + [-0.8369733095169067, -3.5954039096832275], + [2.6800873279571533, -4.449080467224121], + [-5.358391761779785, -0.7175137996673584], + [0.6480916142463684, -7.659185409545898], + [5.791749477386475, -3.3260366916656494], + [-2.4030096530914307, -0.3913254141807556], + [-3.4392688274383545, -2.3494861125946045], + [-3.5376269817352295, 5.723738670349121], + [6.189857006072998, -1.1989046335220337], + [-2.159018039703369, 2.1276278495788574], + [-3.680401086807251, -1.904220461845398], + [0.5337337255477905, -7.676591396331787], + [2.4144206047058105, -4.497802734375], + [-3.0502970218658447, 2.57839035987854], + [7.049376964569092, -3.06400728225708], + [6.6775593757629395, -1.8262468576431274], + [0.4397592544555664, -5.732781887054443], + [4.960577487945557, -5.153189182281494], + [7.049245834350586, -4.1904401779174805], + [-3.4701015949249268, -1.1711198091506958], + [-1.3847429752349854, -3.059492349624634], + [-1.1711450815200806, 11.056268692016602], + [-1.0672073364257812, 11.017926216125488], + [0.8172187209129333, -5.629871368408203], + [-3.5713894367218018, 7.240062713623047], + [-4.730433464050293, -0.415505051612854], + [1.929800271987915, 4.207569122314453], + [-1.3455636501312256, 0.6126856207847595], + [-3.932283401489258, 3.8293089866638184], + [6.672021865844727, -2.472858428955078], + [7.298871040344238, -2.3105146884918213], + [-4.3730854988098145, -0.9639472365379333], + [-1.4498988389968872, 1.7454091310501099], + [-5.359315395355225, 6.252971649169922], + [-2.6298930644989014, 1.123653769493103], + [-3.628577470779419, -1.205829381942749], + [0.9860730767250061, -6.6277594566345215], + [-3.239109992980957, -1.0449330806732178], + [0.6326455473899841, -5.522786617279053], + [5.359922885894775, 8.002765655517578], + [6.047082901000977, -1.647465705871582], + [2.180471420288086, 0.6001421809196472], + [-1.365071177482605, 11.743804931640625], + [-2.2187111377716064, -1.01534104347229], + [-4.952969551086426, -0.9987947344779968], + [-4.675897598266602, -3.2369115352630615], + [-2.4390995502471924, -0.8879055380821228], + [-1.01089608669281, 10.920637130737305], + [9.469766616821289, -2.941166639328003], + [-1.4310319423675537, 10.241166114807129], + [5.362198829650879, -3.075762987136841], + [-1.6872060298919678, 1.9256691932678223], + [-2.7951629161834717, -0.7373459339141846], + [-1.9252907037734985, 1.8082001209259033], + [-3.7229504585266113, -2.203645944595337], + [-0.27376872301101685, -0.8699464797973633], + [-4.195366382598877, -1.5723942518234253], + [-0.7068974375724792, 10.234907150268555], + [2.6285367012023926, 0.7666488289833069], + [0.5137012004852295, -7.1197509765625], + [0.4228816628456116, -7.299972057342529], + [-3.11833119392395, -1.0987040996551514], + [-3.6554362773895264, -1.4156911373138428], + [4.2661213874816895, -0.024465803056955338], + [-1.9452693462371826, 0.5779138803482056], + [-3.972320556640625, 4.332802772521973], + [7.009110450744629, -2.3630549907684326], + [-4.252368450164795, -2.0174026489257812], + [8.443377494812012, -2.833280324935913], + [0.6931156516075134, -0.6048376560211182], + [-3.630232095718384, -1.4894102811813354], + [6.331596851348877, -1.646299123764038], + [-0.614995539188385, 7.571956157684326], + [-4.56094217300415, 5.394909381866455], + [0.6358113884925842, 4.41135835647583], + [-3.8210434913635254, -0.5781683921813965], + [-3.8492157459259033, -2.500648260116577], + [-1.00458562374115, 10.720786094665527], + [3.7692320346832275, -3.6350460052490234], + [-5.080985069274902, 7.180359363555908], + [-1.5329296588897705, 12.533882141113281], + [6.04625940322876, -1.2797737121582031], + [-0.6892308592796326, 10.297361373901367], + [-0.9400041699409485, 11.392375946044922], + [2.2953033447265625, -3.1870484352111816], + [-5.402633190155029, 5.402767181396484], + [-3.31064772605896, -1.2993580102920532], + [8.042198181152344, -2.86946177482605], + [3.001882314682007, 6.308690547943115], + [-1.5746403932571411, 1.2196762561798096], + [0.5062071681022644, -7.209552764892578], + [-1.9745372533798218, 2.058122158050537], + [2.5219321250915527, -4.625566482543945], + [-1.4323885440826416, 1.0797044038772583], + [6.202978610992432, -2.257359743118286], + [-3.6766650676727295, -1.6664644479751587], + [0.2980824410915375, -5.372466564178467], + [3.7434756755828857, -5.9995622634887695], + [2.7035787105560303, -4.520284175872803], + [-5.858207702636719, -0.8303574323654175], + [-0.8226666450500488, -0.8724169731140137], + [0.6851629614830017, -5.954284191131592], + [5.967562198638916, -4.572057247161865], + [-0.4340810179710388, -1.626045823097229], + [-2.867492914199829, -2.0388646125793457], + [-0.7272245287895203, 10.349632263183594], + [-2.9845454692840576, -1.1986494064331055], + [-1.1838743686676025, 11.135394096374512], + [1.7187893390655518, 2.1465115547180176], + [6.700191974639893, -2.093247413635254], + [-1.9872426986694336, -1.212631344795227], + [0.7006017565727234, -8.450448989868164], + [-4.927326679229736, -0.9257582426071167], + [1.3061391115188599, -4.722097396850586], + [-1.5525044202804565, 12.828283309936523], + [7.664501667022705, -3.777163505554199], + [-4.512814998626709, -0.32825809717178345], + [5.474656581878662, -2.220874309539795], + [0.9708128571510315, -6.682740211486816], + [-5.9160027503967285, 6.362009048461914], + [-3.1254942417144775, -0.7388118505477905], + [-3.6729962825775146, -1.5237736701965332], + [2.516371250152588, -4.042684555053711], + [-5.400384426116943, 7.538390159606934], + [2.7491116523742676, -4.481004238128662], + [8.220202445983887, -2.7796242237091064], + [8.777153968811035, -2.7160212993621826], + [-1.95014488697052, 1.689831018447876], + [7.468657970428467, -4.002715587615967], + [-1.9771753549575806, 1.2512439489364624], + [-1.87611722946167, 0.8610764741897583], + [-3.8584563732147217, -1.4261549711227417], + [2.938863515853882, -5.1409149169921875], + [0.623138964176178, -8.213714599609375], + [1.7686033248901367, -4.617396354675293], + [0.6355450749397278, -7.999170303344727], + [0.7483620047569275, 0.8444086313247681], + [-4.7276740074157715, -2.9353280067443848], + [-4.304581165313721, -0.7801535129547119], + [-4.423971652984619, -0.7041208744049072], + [0.5385730862617493, -7.275903224945068], + [1.7546223402023315, -3.9452526569366455], + [2.702036142349243, 5.929193496704102], + [0.4273476004600525, -7.619261741638184], + [-4.560158729553223, -2.475888252258301], + [-3.6864917278289795, -1.4189696311950684], + [6.701589107513428, -2.510624885559082], + [-5.0853962898254395, 5.906963348388672], + [-1.4022427797317505, 11.702798843383789], + [-1.2886285781860352, 11.758949279785156], + [0.54844069480896, -8.549152374267578], + [-3.946833848953247, -1.3977240324020386], + [0.7280839681625366, -6.32843542098999], + [6.734256744384766, -1.7533360719680786], + [1.7309842109680176, 0.18364419043064117], + [5.6985087394714355, -1.8918730020523071], + [-3.5515334606170654, -0.3803393244743347], + [-3.0956146717071533, -1.0886486768722534], + [-0.8200792670249939, 10.671530723571777], + [-3.4094111919403076, -1.283852458000183], + [-1.4791208505630493, 12.380237579345703], + [-2.5902371406555176, -0.503400444984436], + [-4.726036071777344, 5.613578796386719], + [-3.4820659160614014, -1.4439647197723389], + [7.670662879943848, -2.072944402694702], + [-3.6377952098846436, -0.9134400486946106], + [2.9030325412750244, -4.783332824707031], + [-5.244104862213135, -3.761111259460449], + [-3.5533549785614014, -0.8664618730545044], + [-0.3253674805164337, -1.2781277894973755], + [2.599006175994873, -4.814206123352051], + [2.6637208461761475, -4.930179595947266], + [8.928435325622559, -3.009138822555542], + [2.0065996646881104, 0.47883546352386475], + [-4.083650588989258, -2.0590195655822754], + [-2.859923839569092, 5.163093090057373], + [-1.2917065620422363, 11.091669082641602], + [1.4762799739837646, -5.196433067321777], + [2.9489691257476807, -5.022884845733643], + [2.057755708694458, -3.8453800678253174], + [-3.79260516166687, -3.0802531242370605], + [0.4953157305717468, -5.385710716247559], + [2.7595362663269043, 6.530381202697754], + [0.7407817840576172, -7.5681562423706055], + [1.812735915184021, 5.230986595153809], + [-1.318322777748108, 11.218328475952148], + [-3.956479787826538, -1.0804964303970337], + [-3.5498392581939697, -0.9361494779586792], + [6.601083755493164, -4.6540350914001465], + [2.9591238498687744, -4.975018501281738], + [-1.205984354019165, 10.703207015991211], + [7.35410737991333, -2.929821729660034], + [-4.869420528411865, -3.7772023677825928], + [-3.0404131412506104, -1.15752112865448], + [-0.1570562720298767, 4.731681823730469], + [1.3200008869171143, 4.765067100524902], + [-1.4950898885726929, 12.367473602294922], + [0.6289222240447998, -6.897003173828125], + [-1.9344661235809326, 1.952194094657898], + [-4.74731969833374, -4.407057285308838], + [-0.2693743109703064, 8.58747673034668], + [-0.7248044610023499, 10.405174255371094], + [0.7635501027107239, -9.43723201751709], + [2.570544958114624, -4.038064002990723], + [-0.5717946887016296, -1.0150368213653564], + [0.5604996085166931, 4.764731407165527], + [2.311692476272583, -4.718101501464844], + [1.5751502513885498, 1.5790432691574097], + [0.6858392357826233, -7.8954362869262695], + [0.3562707304954529, -6.717337131500244], + [-5.730499267578125, 5.729333877563477], + [-1.5049301385879517, -0.3768937885761261], + [9.188836097717285, -2.8008081912994385], + [-5.305910110473633, 2.357762336730957], + [8.038697242736816, -2.3404343128204346], + [2.1161937713623047, 6.096119403839111], + [-4.658415794372559, -1.1281386613845825], + [2.7216742038726807, -4.542527198791504], + [0.364723801612854, -6.15765905380249], + [2.6396119594573975, 6.409325122833252], + [-1.8765157461166382, -1.6219607591629028], + [5.8044114112854, -3.4134514331817627], + [2.918649196624756, -4.825118541717529], + [4.258055210113525, 7.576061725616455], + [-0.2182268500328064, 7.934417724609375], + [-0.01209980994462967, 2.0273523330688477], + [2.3522801399230957, 5.922656059265137], + [7.045577526092529, -2.011930465698242], + [0.23970603942871094, -5.475705146789551], + [-3.4535200595855713, -1.4571999311447144], + [-1.404137372970581, 11.592273712158203], + [-4.340760707855225, -0.9804078340530396], + [5.287276744842529, -3.4371495246887207], + [-0.21823912858963013, 9.116434097290039], + [1.0197219848632812, 1.4020071029663086], + [-4.429320335388184, -3.094149589538574], + [-1.850974440574646, 0.7366914749145508], + [2.667680501937866, 5.8437347412109375], + [2.177528142929077, 1.0560054779052734], + [-0.5483624339103699, 10.106826782226562], + [0.1568734049797058, -5.399022102355957], + [3.054804563522339, -4.725678443908691], + [8.312017440795898, -2.404371976852417], + [4.516481876373291, 7.661459922790527], + [-3.061230421066284, 6.414893627166748], + [-1.3114733695983887, 11.517826080322266], + [-2.5502889156341553, 2.6058578491210938], + [-4.629236221313477, -0.851064920425415], + [-3.1849782466888428, -3.5004618167877197], + [-0.815867006778717, -1.1180604696273804], + [5.490513324737549, -1.2566238641738892], + [0.4498389959335327, -6.602778911590576], + [3.47399640083313, 6.30802059173584], + [5.930642604827881, -1.2929060459136963], + [2.1404974460601807, 2.975449323654175], + [2.9048707485198975, -4.638027191162109], + [-1.4710263013839722, 12.287271499633789], + [1.5130882263183594, 1.4102517366409302], + [-1.4359571933746338, 12.89569091796875], + [-1.1771245002746582, 11.295753479003906], + [-3.329421281814575, 5.43103551864624], + [-4.25782585144043, 6.376392841339111], + [-0.08437792211771011, -1.9564948081970215], + [-0.6638530492782593, 9.393756866455078], + [2.507173776626587, 5.27147102355957], + [-3.9541728496551514, -3.1786768436431885], + [-2.881495475769043, 3.232863426208496], + [-1.4968243837356567, 12.309475898742676], + [0.4284999370574951, -4.163719177246094], + [-3.090942144393921, -0.8726736903190613], + [2.5377142429351807, 5.991252899169922], + [3.7653582096099854, 6.621793746948242], + [-1.045951247215271, 1.213015079498291], + [8.520206451416016, -2.9762110710144043], + [1.8844956159591675, -5.8496928215026855], + [-4.788566589355469, 4.409941673278809], + [0.6851229071617126, -5.19435977935791], + [0.1041431650519371, -1.2124545574188232], + [-3.6045491695404053, 0.3506859540939331], + [-0.636231541633606, 9.643312454223633], + [-6.388805866241455, 8.556297302246094], + [2.6318581104278564, 6.435673713684082], + [-3.6657865047454834, -1.0134066343307495], + [-4.471459865570068, -3.1002860069274902], + [7.098401069641113, -4.250377178192139], + [7.4088521003723145, -3.048901319503784], + [-1.353175163269043, 11.02613353729248], + [7.520570278167725, -3.7373557090759277], + [1.6362054347991943, 5.184164047241211], + [-4.238861560821533, 4.4692864418029785], + [2.5942981243133545, -4.484814167022705], + [2.92368745803833, -6.508295059204102], + [8.079083442687988, -2.6292765140533447], + [-0.5964906215667725, -1.9018641710281372], + [-1.4297926425933838, 11.73776626586914], + [0.2605811357498169, -5.941562175750732], + [0.485479474067688, -6.647864818572998], + [0.21834510564804077, -6.660978317260742], + [-2.4454996585845947, 2.4388930797576904], + [2.532728910446167, -3.0506322383880615], + [2.0739736557006836, 5.158829212188721], + [-3.765259027481079, -1.3519034385681152], + [-1.1514273881912231, 10.822362899780273], + [2.2143940925598145, 0.7586508989334106], + [-4.915444374084473, 4.55947208404541], + [4.424378871917725, 7.477283477783203], + [-1.6531139612197876, 1.89949369430542], + [-1.3743903636932373, 11.750417709350586], + [-0.028843112289905548, 8.674114227294922], + [2.330491781234741, -5.185976982116699], + [-0.018795795738697052, 6.860581398010254], + [1.4029977321624756, 0.7450742721557617], + [7.164313793182373, -2.0653440952301025], + [-3.773519515991211, -2.8533918857574463], + [2.587221384048462, 5.348264694213867], + [-1.7333523035049438, -0.8126049041748047], + [2.9904325008392334, -4.759128570556641], + [7.4882683753967285, -2.2128193378448486], + [1.5525057315826416, 5.854896545410156], + [-1.3734537363052368, 11.26297378540039], + [0.3660643696784973, -5.369399070739746], + [2.06706166267395, 5.636950492858887], + [-3.8564488887786865, -3.6218109130859375], + [6.7994303703308105, -2.589555501937866], + [0.7778371572494507, -7.28973388671875], + [2.900080442428589, -4.5597968101501465], + [-3.9837610721588135, -2.540008068084717], + [-0.10353750735521317, 8.704263687133789], + [2.0273149013519287, 5.757352828979492], + [-4.993902683258057, 7.357550621032715], + [0.15800487995147705, -5.832655429840088], + [-0.30823057889938354, 8.628412246704102], + [-3.8619742393493652, 4.332738876342773], + [-0.77652907371521, 11.256341934204102], + [-3.769641637802124, -2.192903518676758], + [8.186782836914062, -3.0663487911224365], + [-1.2726985216140747, 11.012767791748047], + [2.353597402572632, 3.849869728088379], + [9.051085472106934, -2.783799886703491], + [0.6482952237129211, -8.664464950561523], + [-0.02058250457048416, -4.458086013793945], + [-4.1968865394592285, -1.3920053243637085], + [-5.2672295570373535, -4.447469711303711], + [0.5597659945487976, -5.734137535095215], + [-4.483199119567871, -0.22492623329162598], + [0.6022775173187256, -4.511466979980469], + [1.7412943840026855, 4.684894561767578], + [-3.1833884716033936, 5.6901164054870605], + [-3.6351916790008545, -3.806981325149536], + [9.188803672790527, -2.737652540206909], + [-1.5883179903030396, 1.7836819887161255], + [2.794325590133667, 6.287656307220459], + [1.3102314472198486, 1.2088745832443237], + [-3.0019495487213135, -1.513304352760315], + [3.006944179534912, -4.730626106262207], + [8.249922752380371, -2.8480169773101807], + [-5.1235127449035645, -1.5685595273971558], + [-5.211356163024902, 6.931694030761719], + [0.740628719329834, -6.045544147491455], + [8.436359405517578, -3.335716485977173], + [5.125246524810791, 8.304166793823242], + [2.361304998397827, 5.171747207641602], + [-0.7163837552070618, -3.6260547637939453], + [8.61097526550293, -2.482557535171509], + [0.5765665173530579, -8.300466537475586], + [-2.498166799545288, -1.4236925840377808], + [-0.7423231601715088, -0.33589738607406616], + [2.6560208797454834, -4.247754096984863], + [-1.225764274597168, 11.194124221801758], + [-5.716166019439697, -0.893008828163147], + [6.851598262786865, -3.5587897300720215], + [-3.4449453353881836, -1.1907422542572021], + [0.43615013360977173, -5.832307815551758], + [-0.055595315992832184, -4.251725196838379], + [6.40132474899292, -3.741352081298828], + [-1.0409693717956543, 10.361468315124512], + [-4.476350784301758, -1.737120509147644], + [-0.3485383987426758, 9.612464904785156], + [-3.2580583095550537, -2.1025593280792236], + [-3.1913177967071533, -3.5017523765563965], + [0.5841172933578491, -7.455936908721924], + [-0.7500206828117371, 10.328655242919922], + [7.92991304397583, -2.5947656631469727], + [-3.806452989578247, -2.025611400604248], + [9.411295890808105, -2.889390707015991], + [-1.9227242469787598, 1.6530364751815796], + [3.6216113567352295, -4.203856945037842], + [-3.625234842300415, -0.8208119869232178], + [0.8247703909873962, -7.338212966918945], + [4.051645278930664, -3.891354560852051], + [0.6384038925170898, -6.486124515533447], + [-3.543771982192993, -1.9385043382644653], + [-2.325385093688965, -2.029702663421631], + [3.2517805099487305, 5.691802024841309], + [0.6387015581130981, -6.90762996673584], + [0.46172094345092773, -6.387833118438721], + [-3.597825527191162, -2.202979326248169], + [-3.19366192817688, -0.9239224195480347], + [3.974479913711548, 7.310396194458008], + [0.42107242345809937, -7.274202346801758], + [0.4163771867752075, -5.1139116287231445], + [2.0959372520446777, -4.5834856033325195], + [-0.5283119082450867, -3.666513204574585], + [-3.9427080154418945, -1.2769534587860107], + [0.7843762040138245, -8.204214096069336], + [1.7793965339660645, 2.9915497303009033], + [0.3941870927810669, -6.665940761566162], + [-3.8945400714874268, 4.275982856750488], + [-5.143463611602783, 5.840977668762207], + [-2.715141534805298, 3.248180389404297], + [-1.4204487800598145, 1.6854007244110107], + [0.8287503123283386, -5.467994213104248], + [-0.2723456025123596, -0.7733955979347229], + [0.48283153772354126, -6.904425621032715], + [-0.17082643508911133, 9.439355850219727], + [1.5410423278808594, -5.247363090515137], + [-3.1406900882720947, -1.8438799381256104], + [-4.015352725982666, -1.9580724239349365], + [0.612781822681427, -4.645443439483643], + [-2.1018097400665283, -2.0350213050842285], + [-1.3134559392929077, 11.98357105255127], + [2.6573126316070557, 2.076673984527588], + [0.6771672368049622, -8.32794189453125], + [-2.7473909854888916, 0.3076053857803345], + [-1.3499451875686646, 11.805826187133789], + [2.061117172241211, -5.71321439743042], + [0.8732189536094666, -5.4339447021484375], + [0.048685841262340546, 8.989916801452637], + [1.7662839889526367, -3.80263352394104], + [-3.0848748683929443, -1.5621651411056519], + [5.826354026794434, -1.0739151239395142], + [-0.06260151416063309, -3.4982383251190186], + [-2.627077341079712, -1.5824006795883179], + [5.930516719818115, 8.758344650268555], + [0.7733860611915588, -9.514232635498047], + [-3.53369402885437, 5.858344078063965], + [2.108154058456421, 4.5644426345825195], + [-0.09325189143419266, 8.557979583740234], + [1.1828405857086182, -0.1587824821472168], + [-1.1916887760162354, 10.740806579589844], + [4.515735149383545, 7.503147125244141], + [-3.701810836791992, -1.4309855699539185], + [1.6892726421356201, -0.0267365463078022], + [2.5443947315216064, -6.130401611328125], + [-5.47318696975708, 7.234322547912598], + [-2.6479651927948, 2.8723771572113037], + [7.219870090484619, -2.2999660968780518], + [6.593954086303711, -4.028552055358887], + [-0.0004083588719367981, -4.103984832763672], + [9.115084648132324, -2.8903303146362305], + [-3.954047441482544, -2.2674505710601807], + [2.2177443504333496, -4.245018005371094], + [0.25142011046409607, -3.9904961585998535], + [2.8030998706817627, -4.3779191970825195], + [-4.332912921905518, -2.2094852924346924], + [-1.333051085472107, 1.4456956386566162], + [-0.9447210431098938, 10.308189392089844], + [-2.410200595855713, -0.8763469457626343], + [-4.93648099899292, 4.529815673828125], + [0.26537954807281494, -6.385563373565674], + [-3.7228963375091553, 5.744399070739746], + [-0.5851420164108276, 0.49637532234191895], + [2.3261075019836426, 3.969619035720825], + [4.625204563140869, 7.4102983474731445], + [-0.7848329544067383, 10.755541801452637], + [2.757572889328003, -4.6820292472839355], + [-1.761319875717163, 0.3411100208759308], + [-0.7255677580833435, 10.62252140045166], + [1.6894562244415283, 1.895829439163208], + [-4.923992156982422, 6.328815460205078], + [2.035590887069702, 4.899152755737305], + [-1.18097984790802, -0.9646527767181396], + [-4.019250392913818, -2.687494993209839], + [-3.8702850341796875, -1.2855077981948853], + [2.72133469581604, -4.542750835418701], + [8.914249420166016, -2.9104578495025635], + [-0.38730573654174805, -1.973922610282898], + [1.9897162914276123, -5.29718017578125], + [-2.2845373153686523, 2.233253002166748], + [-2.9101998805999756, -0.9991490840911865], + [-0.8112130761146545, 10.327775955200195], + [-1.8904006481170654, -3.392695188522339], + [-3.5069992542266846, -0.6208015084266663], + [2.746293306350708, -4.599104404449463], + [0.6919272541999817, -8.338249206542969], + [-1.2062116861343384, 11.160798072814941], + [0.5507979989051819, -7.601865291595459], + [-4.608431816101074, 6.078061103820801], + [-1.9431326389312744, 1.8898552656173706], + [-1.3988593816757202, 11.742023468017578], + [2.786994218826294, -4.556125640869141], + [-2.978606939315796, -2.608153820037842], + [6.117506504058838, -2.344407796859741], + [-5.211659908294678, 5.381031036376953], + [2.1446452140808105, -5.926673412322998], + [2.92629075050354, -4.653323173522949], + [0.26186639070510864, -4.010461330413818], + [-0.6236630082130432, 9.847585678100586], + [-2.9063198566436768, -1.753409743309021], + [-4.491251468658447, -0.8405677080154419], + [-2.31278395652771, -1.5065053701400757], + [-0.9345939755439758, 10.765921592712402], + [-0.6306621432304382, 10.123559951782227], + [-1.290462613105774, 4.995307922363281], + [-0.3791952431201935, -1.1991419792175293], + [-0.9012213349342346, 11.02147388458252], + [0.24561667442321777, -5.605943202972412], + [-2.224202871322632, -0.2879713773727417], + [-4.255275249481201, 4.847445487976074], + [-0.7661593556404114, 11.383587837219238], + [2.7253646850585938, -4.562829971313477], + [-0.9500903487205505, 1.150467872619629], + [-3.9037375450134277, -4.83694314956665], + [5.421679496765137, -3.1825177669525146], + [0.2403378188610077, -4.822340965270996], + [0.5777658820152283, -4.700155258178711], + [7.364389419555664, -2.31420636177063], + [3.053027868270874, 5.968546390533447], + [2.267437219619751, 5.586705684661865], + [-1.2563354969024658, 11.718535423278809], + [2.1580557823181152, -4.428873062133789], + [-4.7160964012146, 2.966332197189331], + [8.584880828857422, -3.299128770828247], + [-0.9455646276473999, 10.373849868774414], + [-0.4667678773403168, 5.788636207580566], + [-0.4010544419288635, 9.488901138305664], + [-3.8276844024658203, -2.632254123687744], + [0.8092021346092224, -5.330603122711182], + [-4.114847660064697, -2.9565980434417725], + [-3.765267848968506, -0.7177758812904358], + [0.7944549918174744, -8.991506576538086], + [0.4638928771018982, -7.275951385498047], + [8.100831031799316, -2.49704909324646], + [5.860534191131592, -1.2179056406021118], + [7.24183464050293, -2.119962453842163], + [-0.22183221578598022, -1.1047422885894775], + [5.182931423187256, 8.229874610900879], + [-5.182395935058594, 5.0364532470703125], + [-1.9648070335388184, 1.8705521821975708], + [0.008090175688266754, -0.8357950448989868], + [3.1147372722625732, -4.892011642456055], + [0.5972582101821899, -8.126909255981445], + [-4.1132636070251465, -4.1996941566467285], + [-4.864640712738037, 5.480912208557129], + [-3.02053165435791, 3.1684107780456543], + [-3.1384708881378174, -0.5083269476890564], + [0.6968214511871338, -8.462141990661621], + [-2.0931811332702637, 0.6299837827682495], + [2.4474411010742188, -4.486506938934326], + [1.0222432613372803, 5.149406433105469], + [0.49888986349105835, -7.525014877319336], + [4.352941036224365, -3.9013731479644775], + [-3.6642067432403564, 5.948391914367676], + [0.646086573600769, -8.216007232666016], + [-1.406683087348938, 11.844470977783203], + [-3.7543249130249023, -1.8473608493804932], + [-2.8945162296295166, -1.007326364517212], + [-1.687678337097168, -2.216136932373047], + [3.3862340450286865, 6.814316749572754], + [-0.683040201663971, 10.421327590942383], + [0.9017731547355652, -8.187349319458008], + [-3.739940643310547, -1.0737224817276], + [9.015192985534668, -2.9757821559906006], + [-5.795210361480713, 5.896958351135254], + [-4.285781383514404, 6.330704689025879], + [0.5368427634239197, -6.283487319946289], + [-1.3602498769760132, 11.574601173400879], + [-1.4451805353164673, 11.724570274353027], + [-3.508495330810547, 6.426142692565918], + [8.127314567565918, -2.9744937419891357], + [5.161375522613525, 7.773788928985596], + [-4.1342244148254395, -3.2880091667175293], + [1.950453519821167, 1.3908089399337769], + [0.6507963538169861, -6.566380977630615], + [1.2074569463729858, -0.2624666392803192], + [-3.0828089714050293, 3.1969454288482666], + [9.304709434509277, -3.0875027179718018], + [-4.21286678314209, -0.3789747357368469], + [-0.8629597425460815, 10.485419273376465], + [-0.6482496857643127, 9.904257774353027], + [-1.1257314682006836, 4.608329772949219], + [6.3045220375061035, -3.031450033187866], + [0.578975260257721, -7.717710494995117], + [-0.6478633284568787, 10.22226333618164], + [-2.009124994277954, 0.8105140328407288], + [-5.062743663787842, -5.335480213165283], + [-1.569924235343933, -0.10668700933456421], + [-5.0157246589660645, 6.941187858581543], + [0.8752198219299316, -7.526098251342773], + [6.585348129272461, -1.6724461317062378], + [-4.160566806793213, -0.019204143434762955], + [4.5840229988098145, 7.628094673156738], + [-3.010868787765503, -1.1662205457687378], + [2.1232545375823975, -3.6550400257110596], + [-0.48283588886260986, -1.3155369758605957], + [-3.6393892765045166, 2.8925435543060303], + [0.6054987907409668, -7.8387770652771], + [-4.612660884857178, -3.4744529724121094], + [-1.2244255542755127, -0.09075266122817993], + [0.3587440252304077, -6.664554595947266], + [-1.433985710144043, 12.187531471252441], + [-4.1236252784729, 6.522496223449707], + [2.7443931102752686, -4.716860294342041], + [2.697324514389038, -5.108980178833008], + [-0.3833628296852112, -2.694063901901245], + [-1.078355073928833, 11.094083786010742], + [0.647918701171875, -8.247907638549805], + [5.20871114730835, -1.4074559211730957], + [0.8942714333534241, 0.6461628079414368], + [7.165451526641846, -4.243783950805664], + [-1.9015432596206665, -2.0159003734588623], + [-4.5700907707214355, 5.340494155883789], + [-1.9982144832611084, 2.1770763397216797], + [-1.9799907207489014, 1.1420135498046875], + [-3.658478260040283, -1.949872374534607], + [0.2573090195655823, -0.6251189112663269], + [2.0296850204467773, 5.012738227844238], + [2.675776243209839, -3.616790294647217], + [-1.4129542112350464, 11.775382995605469], + [-1.2623889446258545, 11.208097457885742], + [0.4709862470626831, -7.001154899597168], + [-4.281425476074219, 6.385311126708984], + [0.8147610425949097, -7.519195556640625], + [-5.37766695022583, 4.634275913238525], + [-3.7900400161743164, -2.568885087966919], + [4.7398858070373535, -4.0435285568237305], + [0.6754459738731384, -8.046305656433105], + [2.800856351852417, -4.557486057281494], + [0.7713671326637268, -7.1924028396606445], + [-0.8758660554885864, 10.489051818847656], + [-0.15547341108322144, 7.904147624969482], + [0.5190473794937134, -7.351195335388184], + [-2.6571600437164307, -1.9241048097610474], + [-4.1754536628723145, 5.522296905517578], + [-1.0537742376327515, 10.81026554107666], + [-1.9598608016967773, 1.6701282262802124], + [-3.5519702434539795, -1.6374961137771606], + [-4.747070789337158, -1.5945857763290405], + [-1.14317786693573, 1.2518240213394165], + [0.3295188546180725, -6.182259559631348], + [5.653906345367432, -1.2726553678512573], + [-1.1056691408157349, 10.730257034301758], + [6.417332172393799, -1.2187942266464233], + [6.240115165710449, -2.835618257522583], + [0.5143976211547852, -6.760967254638672], + [-3.3379099369049072, -0.72129887342453], + [-1.531508207321167, 12.87939167022705], + [3.0135202407836914, -4.688563346862793], + [9.393637657165527, -2.8996660709381104], + [1.144705057144165, 1.421895146369934], + [-4.255819320678711, -1.4396637678146362], + [-1.6881376504898071, 1.2603131532669067], + [-1.6131411790847778, 0.6997402310371399], + [7.5872955322265625, -3.1068127155303955], + [8.890202522277832, -2.900987386703491], + [-1.1267093420028687, 10.814857482910156], + [-0.4701438546180725, -1.5999199151992798], + [-4.724424839019775, -0.8511863946914673], + [8.049283027648926, -2.6472811698913574], + [-0.6211718320846558, 10.113131523132324], + [-2.0844993591308594, 2.7487406730651855], + [0.5186686515808105, -7.623693943023682], + [-0.028232134878635406, -4.827286720275879], + [-5.03533935546875, 6.73835563659668], + [-1.1575740575790405, 10.675243377685547], + [4.587356090545654, 7.375728607177734], + [5.658191204071045, -3.0375452041625977], + [-3.415740728378296, -1.3459490537643433], + [-4.040591239929199, -1.036910891532898], + [-5.01020622253418, 5.570995330810547], + [2.861152410507202, -5.1674604415893555], + [0.4889271855354309, -5.7262725830078125], + [1.7306901216506958, 1.828698754310608], + [-4.062214374542236, -1.8418183326721191], + [-2.4046618938446045, 5.8957061767578125], + [-2.6909191608428955, -2.299344778060913], + [-3.978861093521118, -3.480433225631714], + [6.316757678985596, -4.618234157562256], + [0.560587465763092, -7.701051712036133], + [7.301575183868408, -4.399954319000244], + [0.710311233997345, -8.27714729309082], + [0.779425323009491, -8.514216423034668], + [2.131669521331787, 0.8203741312026978], + [0.7621771693229675, -9.091922760009766], + [-0.18641191720962524, -2.5342788696289062], + [5.259348392486572, 8.131749153137207], + [8.292203903198242, -2.677767276763916], + [-3.7871768474578857, -3.2839083671569824], + [3.960829019546509, 6.85194206237793], + [-3.6744086742401123, 1.3751484155654907], + [-5.252730846405029, -3.544753313064575], + [-3.4975430965423584, -0.7455235719680786], + [-4.396636486053467, 5.145267486572266], + [-1.3829421997070312, 11.714685440063477], + [1.716503381729126, 2.3376317024230957], + [-3.4862797260284424, -2.905034303665161], + [0.8548417687416077, 6.468680381774902], + [-5.033779144287109, 5.862941265106201], + [-5.01951265335083, 5.721007347106934], + [0.8176390528678894, 3.5641167163848877], + [0.8011842370033264, -5.540297031402588], + [-3.295732021331787, -1.2246536016464233], + [-3.641753911972046, -1.1373038291931152], + [-3.641108751296997, 5.675346851348877], + [-1.4379031658172607, 4.624037265777588], + [-3.4561259746551514, -0.7965511679649353], + [-3.765329122543335, -0.5207154750823975], + [0.4481160044670105, -6.03856086730957], + [-3.9767472743988037, -0.66834956407547], + [1.7875316143035889, 2.19911789894104], + [-0.5835068821907043, 5.919100761413574], + [3.794483184814453, 6.808353900909424], + [2.831263542175293, 5.040862560272217], + [-3.5225374698638916, 5.570089817047119], + [-1.4706043004989624, 1.8607465028762817], + [0.47403544187545776, -7.271018981933594], + [0.40279489755630493, -7.545359134674072], + [-0.5231804251670837, 9.846900939941406], + [0.6405013799667358, -7.019614219665527], + [-1.2641534805297852, 10.939046859741211], + [0.37898319959640503, -7.194887161254883], + [-2.0207512378692627, 0.4242528975009918], + [3.035680055618286, -6.17417049407959], + [-0.4398995339870453, -0.8436181545257568], + [0.48129522800445557, -7.4453654289245605], + [-3.904371500015259, 6.080561637878418], + [-4.452544212341309, -3.223999261856079], + [2.6551601886749268, -4.587146759033203], + [2.8138160705566406, -4.934772968292236], + [0.9832887053489685, -5.600277900695801], + [0.5046284794807434, -5.048213958740234], + [1.7971338033676147, -5.454535961151123], + [9.597407341003418, -2.8821189403533936], + [1.620089054107666, 2.2575762271881104], + [0.5215393900871277, -7.605475425720215], + [-3.924471139907837, -0.3290674686431885], + [1.8911253213882446, -3.9164772033691406], + [-1.9664535522460938, 2.0890281200408936], + [-0.127875417470932, -1.1724015474319458], + [0.9762747883796692, -6.246535301208496], + [1.5822876691818237, 7.088313579559326], + [-3.8250677585601807, -1.8796186447143555], + [-4.1767191886901855, -4.306046485900879], + [-3.279747247695923, -1.0893983840942383], + [-3.0963103771209717, -1.107771635055542], + [0.8546140789985657, -0.213455468416214], + [0.12204175442457199, 5.266912460327148], + [-2.4026143550872803, -0.3730756640434265], + [6.271132946014404, -2.4078123569488525], + [1.5070222616195679, 0.024654950946569443], + [-3.8615610599517822, -2.150010347366333], + [6.759949684143066, -1.7910094261169434], + [0.6831398606300354, -7.333343029022217], + [-3.968444585800171, -3.1968674659729004], + [-2.805734157562256, 2.6755940914154053], + [-0.17257153987884521, 9.15764331817627], + [3.2164528369903564, 6.683734893798828], + [9.503459930419922, -2.876429796218872], + [-0.10924174636602402, -0.9156798124313354], + [0.4608084559440613, -7.665570259094238], + [0.651160478591919, -8.39050006866455], + [0.7133506536483765, -5.702361106872559], + [6.8692779541015625, -2.1595804691314697], + [0.1263144612312317, 7.976639747619629], + [-1.2332069873809814, 11.03966236114502], + [-3.405047655105591, -1.167454719543457], + [-4.418002605438232, -0.7002012729644775], + [3.870145559310913, 7.068637847900391], + [-3.6165993213653564, -0.2480403184890747], + [8.623665809631348, -2.8096678256988525], + [7.498992443084717, -2.7330682277679443], + [1.5020484924316406, 4.313063621520996], + [-4.948379993438721, -0.961203932762146], + [1.7838268280029297, 0.7975671291351318], + [0.7233783602714539, -8.16484546661377], + [2.042390823364258, 2.8282229900360107], + [1.2771351337432861, -4.536344528198242], + [8.450583457946777, -2.5339009761810303], + [-0.5417903661727905, -0.6366392374038696], + [2.7278687953948975, -4.606825828552246], + [-4.266448020935059, 0.8659471273422241], + [0.08672746270895004, -4.65220832824707], + [1.8028006553649902, 5.510906219482422], + [-3.6190154552459717, -1.824479103088379], + [0.4258460998535156, -7.439795017242432], + [-0.651650607585907, 10.219029426574707], + [1.3796238899230957, -4.322972297668457], + [2.7851955890655518, -4.505666732788086], + [-4.52257776260376, -0.9956855177879333], + [0.6750876307487488, -4.486454963684082], + [-4.815435409545898, -0.931327760219574], + [2.9170730113983154, -4.511776924133301], + [2.1851389408111572, -4.7481818199157715], + [-2.5127367973327637, -1.7629133462905884], + [0.5832899808883667, -7.662582874298096], + [0.45478391647338867, -6.943951606750488], + [-3.5386722087860107, -1.0710393190383911], + [-1.2406470775604248, 1.3072986602783203], + [2.4198079109191895, -4.246291160583496], + [3.0655839443206787, -5.127710342407227], + [2.815594434738159, -4.333785533905029], + [-0.6780384182929993, 9.767568588256836], + [-5.0503458976745605, -3.437629222869873], + [0.7565690279006958, -7.9184980392456055], + [2.794159173965454, -4.319238662719727], + [2.8226723670959473, -4.648777961730957], + [-1.3596278429031372, 11.949886322021484], + [-3.729569673538208, 3.3067479133605957], + [-3.411783456802368, 6.7011823654174805], + [10.22938060760498, -3.0713226795196533], + [-0.4303971230983734, -0.5199699997901917], + [-0.5393635034561157, -0.9986317753791809], + [0.7998458743095398, -0.32329222559928894], + [-1.1085630655288696, 11.268026351928711], + [-0.560199499130249, -3.5237765312194824], + [-4.743846416473389, 5.220075607299805], + [-4.24160623550415, 2.6674931049346924], + [-5.042072772979736, 6.59500789642334], + [1.2438218593597412, 3.6965229511260986], + [0.5594534277915955, -0.6252660155296326], + [-0.9841467142105103, 5.628974914550781], + [-2.081104278564453, 0.9992989301681519], + [3.636399030685425, 7.056901454925537], + [-2.030259609222412, 2.4932217597961426], + [-3.5928444862365723, 4.910920143127441], + [-1.9518479108810425, 0.562932014465332], + [2.5943050384521484, -4.531721115112305], + [7.309424877166748, -2.040475606918335], + [-1.0454049110412598, -2.7584145069122314], + [-2.9226582050323486, -1.2835026979446411], + [0.4503551721572876, -6.64324951171875], + [4.3392815589904785, -5.037352561950684], + [0.4656616449356079, -5.614840507507324], + [-1.9338644742965698, 2.316201686859131], + [0.5754681825637817, -7.502888202667236], + [-3.908797025680542, -2.3258206844329834], + [-4.466418266296387, 4.397829532623291], + [1.9204504489898682, 1.2126014232635498], + [-5.588352680206299, 6.614439010620117], + [1.7883987426757812, 5.75620174407959], + [-3.8680992126464844, -1.1966413259506226], + [0.3843926787376404, -6.839485168457031], + [-3.420344591140747, -1.2480559349060059], + [-4.504739761352539, 5.49968147277832], + [0.7227864265441895, 2.7267472743988037], + [-4.894531726837158, 6.941442966461182], + [-0.0756378248333931, 8.978479385375977], + [2.3660147190093994, -3.9639670848846436], + [4.338258266448975, 7.453310966491699], + [-4.107181072235107, 5.948692798614502], + [2.911893129348755, -4.570127010345459], + [-0.9741612076759338, 1.1847360134124756], + [-5.046546459197998, -3.7559473514556885], + [0.7736815810203552, -8.536680221557617], + [-1.3978850841522217, 0.2659028470516205], + [6.42610502243042, -1.5035722255706787], + [-4.481277942657471, -0.4787406921386719], + [1.282289743423462, -6.041680335998535], + [-3.4182016849517822, -1.6027594804763794], + [-2.8537724018096924, -0.9663487672805786], + [3.199596643447876, -5.014282703399658], + [-2.8581931591033936, -1.2178966999053955], + [-5.53518533706665, 4.76249885559082], + [0.9868319630622864, -5.4418439865112305], + [0.958476722240448, -5.14243221282959], + [-4.015222072601318, -2.0245347023010254], + [-4.828501224517822, 6.954859733581543], + [-1.3283511400222778, 11.669532775878906], + [-4.400192737579346, 5.7081098556518555], + [-4.747207164764404, 3.328667402267456], + [-3.7587642669677734, -2.01235294342041], + [-3.285585641860962, -1.53020179271698], + [-1.3497878313064575, 11.639267921447754], + [0.6637163162231445, -8.215944290161133], + [1.0066514015197754, 1.6896647214889526], + [-3.1556360721588135, 6.764456272125244], + [0.6598950624465942, -8.732627868652344], + [-3.309234380722046, -1.0868154764175415], + [-4.468708515167236, 0.7717849016189575], + [-5.022645473480225, 2.5972514152526855], + [0.7457753419876099, -2.8622686862945557], + [-4.293976306915283, -0.8410676121711731], + [2.1370818614959717, 5.233638286590576], + [0.4360774755477905, -7.5275444984436035], + [-1.564376950263977, 1.2264938354492188], + [-4.821268081665039, 6.992868900299072], + [-3.465646743774414, -0.939186155796051], + [-3.3109140396118164, 4.978621482849121], + [8.146478652954102, -2.9895098209381104], + [-2.6447296142578125, -0.6729638576507568], + [0.7452213168144226, -7.395125389099121], + [4.913672924041748, 7.7505083084106445], + [-3.668699026107788, 4.015381813049316], + [1.987459659576416, 5.177415370941162], + [3.380051374435425, -3.820415735244751], + [-1.4093122482299805, 1.3811233043670654], + [0.6758481860160828, 0.38234320282936096], + [-2.760671377182007, 2.8230628967285156], + [1.7887532711029053, -5.80497932434082], + [2.860327959060669, -4.612205505371094], + [-5.208040714263916, 3.1040446758270264], + [-1.0829524993896484, 1.1099776029586792], + [-1.4606642723083496, 12.59936237335205], + [3.2660274505615234, 6.390277862548828], + [0.32429489493370056, -0.3330717980861664], + [-4.754910945892334, 6.82736873626709], + [-3.8048593997955322, -2.375882387161255], + [-5.9048614501953125, -0.8216212391853333], + [-4.242831707000732, -1.1123528480529785], + [3.683706521987915, 6.997705936431885], + [-3.5828890800476074, -0.9870638251304626], + [3.537353277206421, 7.0226263999938965], + [-1.1775474548339844, 10.334609985351562], + [-3.8048818111419678, 6.010910511016846], + [-2.7739250659942627, -1.453529953956604], + [1.7890516519546509, -5.707073211669922], + [-3.100783586502075, -1.0017200708389282], + [2.6527979373931885, -4.329687118530273], + [2.205861806869507, 5.234837532043457], + [7.756936550140381, -2.987562417984009], + [0.4033653140068054, -6.9071574211120605], + [4.951485633850098, 7.736810684204102], + [-3.890019178390503, 5.104090690612793], + [-4.980035305023193, 6.935797214508057], + [1.3594322204589844, -3.5775630474090576], + [1.5542832612991333, 3.2924697399139404], + [0.5515493750572205, -8.099472045898438], + [1.9064102172851562, 6.204038619995117], + [-5.5952606201171875, 7.137538433074951], + [-3.742931604385376, -1.4923189878463745], + [-1.5973916053771973, 12.773537635803223], + [-1.1369199752807617, 0.539267897605896], + [7.339395046234131, -2.496263265609741], + [2.3460710048675537, -4.267834663391113], + [-3.872185468673706, 0.32815998792648315], + [0.4172181487083435, -5.278405666351318], + [3.087838888168335, 6.50187873840332], + [-1.945162296295166, 0.19069647789001465], + [-0.48994091153144836, -1.0680633783340454], + [-3.518558979034424, 7.1495866775512695], + [1.8727643489837646, -3.435925245285034], + [-0.37884634733200073, -0.9157395362854004], + [-1.7125450372695923, 0.031820591539144516], + [-0.5351731777191162, -0.9364860653877258], + [2.8828318119049072, -4.998973846435547], + [-3.268422842025757, -1.1734613180160522], + [2.535599946975708, -3.714524745941162], + [-2.569110631942749, 2.7536776065826416], + [-3.4586732387542725, -1.3016563653945923], + [0.46541285514831543, -4.8980937004089355], + [-0.16058394312858582, -1.4537593126296997], + [0.5375205874443054, 7.145797252655029], + [-1.8051429986953735, 1.606645107269287], + [-4.495221138000488, -3.375845432281494], + [-0.4585115313529968, 0.6425859928131104], + [-1.422904372215271, 1.8513017892837524], + [-2.4066131114959717, 2.3524835109710693], + [2.605638265609741, 6.38776159286499], + [0.356050968170166, -6.644927501678467], + [-3.7789180278778076, 6.2313361167907715], + [4.29773473739624, 7.564731597900391], + [-5.24320125579834, -1.0215588808059692], + [-1.298875093460083, 11.848062515258789], + [-0.9932535290718079, 10.428905487060547], + [-4.556272029876709, 6.238769054412842], + [0.8676518797874451, -0.005344662815332413], + [1.8528704643249512, 0.25959664583206177], + [3.900791883468628, 7.072018623352051], + [2.6294729709625244, -4.356764793395996], + [-1.657997965812683, 1.9100638628005981], + [0.5359423160552979, -7.245697975158691], + [-0.5751072764396667, 9.965107917785645], + [-3.4665675163269043, 6.500395774841309], + [3.014981508255005, -4.694610595703125], + [0.6321946978569031, -0.029637794941663742], + [-0.999510645866394, 10.537965774536133], + [0.007816188037395477, 4.811646461486816], + [4.30615758895874, 0.7291173338890076], + [0.5684201121330261, -7.966047286987305], + [-1.8894466161727905, 1.9145618677139282], + [-1.9278815984725952, 0.9893215894699097], + [-4.9901862144470215, 5.8584184646606445], + [0.8105428218841553, -8.037847518920898], + [0.6864049434661865, -6.454139709472656], + [2.489354372024536, -4.085443496704102], + [-0.3162606358528137, 5.742952823638916], + [-1.0326435565948486, -0.45354849100112915], + [-2.1521308422088623, 1.0246925354003906], + [-4.036235332489014, -1.738086223602295], + [2.6105456352233887, 6.571322441101074], + [-0.6369163393974304, -3.709430694580078], + [-2.9916977882385254, -1.3747410774230957], + [-2.442683696746826, -3.2596116065979004], + [-3.182382345199585, 3.8142378330230713], + [2.1093623638153076, 5.149709224700928], + [2.378356695175171, 5.265159606933594], + [0.7262557148933411, -8.5170316696167], + [-4.72246789932251, -0.9753534197807312], + [-4.970888137817383, -3.390836477279663], + [7.3155951499938965, -3.004363775253296], + [-0.903969943523407, -3.244488477706909], + [-0.07257355004549026, -3.2614810466766357], + [-0.37124496698379517, 9.651890754699707], + [8.069908142089844, -2.4412784576416016], + [-0.9443244338035583, 10.388846397399902], + [4.48958683013916, 7.371189117431641], + [-2.846074342727661, 6.235857009887695], + [-0.8812702298164368, 10.59017562866211], + [-4.320924282073975, -2.8776917457580566], + [-1.8448914289474487, 2.344716787338257], + [0.7034969329833984, -8.874004364013672], + [1.251293659210205, 5.270674705505371], + [2.757784366607666, 5.946585178375244], + [-0.8910978436470032, 5.786444664001465], + [-0.5600031018257141, 10.002201080322266], + [2.9728243350982666, -5.018298625946045], + [-0.027661539614200592, -1.466969609260559], + [-0.41032692790031433, -1.2451144456863403], + [-0.7799025177955627, 10.39244270324707], + [0.10466831177473068, -3.6082682609558105], + [-3.4041588306427, -1.883244276046753], + [-1.3850514888763428, 0.8778277039527893], + [0.6891099810600281, -8.410943984985352], + [2.906688928604126, -4.608157634735107], + [5.1883978843688965, -4.551323413848877], + [-0.8877146244049072, 10.220598220825195], + [-0.5208747982978821, 9.26663589477539], + [-1.7551369667053223, 0.8074451684951782], + [2.217115640640259, 6.112210750579834], + [2.7578508853912354, -4.79172420501709], + [-5.967438220977783, -0.8906383514404297], + [1.7679500579833984, 5.046919822692871], + [1.719690203666687, 1.2693790197372437], + [0.027359895408153534, -4.740283012390137], + [-2.8611695766448975, 2.7280237674713135], + [-4.443338871002197, 5.471722602844238], + [-5.382180690765381, 4.462749481201172], + [-1.7699604034423828, -3.6360275745391846], + [-0.674460232257843, 9.700153350830078], + [2.2959177494049072, 5.490505695343018], + [7.553988456726074, -2.4610931873321533], + [2.625777244567871, -4.758302211761475], + [0.4911046624183655, -4.518929958343506], + [0.5838184952735901, -7.384219646453857], + [3.658282518386841, 7.325679302215576], + [-2.6922624111175537, -1.120885968208313], + [-1.5626296997070312, 12.110198020935059], + [-3.484553575515747, -0.8112837672233582], + [6.954885959625244, -2.148732900619507], + [7.518029689788818, -2.3832805156707764], + [2.9864814281463623, -4.778858184814453], + [-3.5882978439331055, -1.8071706295013428], + [3.0170938968658447, -4.996705055236816], + [-5.026972770690918, 6.781736850738525], + [-2.2260282039642334, -2.31821608543396], + [0.3332762122154236, -6.776585102081299], + [-6.129906177520752, 8.127273559570312], + [-0.23914363980293274, -1.539825439453125], + [-2.8913190364837646, -0.7147123217582703], + [-1.4423710107803345, 12.245511054992676], + [7.901041030883789, -3.016118049621582], + [0.9180589318275452, -0.24608008563518524], + [0.3009571433067322, -4.149626731872559], + [-4.5171685218811035, 6.50007438659668], + [1.7688112258911133, 5.547330856323242], + [-4.0893144607543945, -2.925011396408081], + [0.7674235701560974, -8.692264556884766], + [-4.18709135055542, -1.087173581123352], + [2.581383466720581, -4.591137886047363], + [2.311185598373413, 0.6744322180747986], + [2.1253271102905273, -3.6764800548553467], + [3.700871706008911, 6.639956474304199], + [-0.8825401663780212, 1.0705926418304443], + [2.6763594150543213, 0.7374036312103271], + [2.548194646835327, 5.866508483886719], + [7.401525020599365, -2.4166481494903564], + [0.6181520819664001, -8.671037673950195], + [-0.29176509380340576, -1.0721747875213623], + [2.2897417545318604, 6.163589000701904], + [2.6684200763702393, -4.92690372467041], + [-0.11632248014211655, -1.4371919631958008], + [2.9995579719543457, -4.6758551597595215], + [-1.920846939086914, 2.375762462615967], + [-1.0963457822799683, 10.246174812316895], + [-1.7498667240142822, 1.3446768522262573], + [-0.4862017035484314, 9.663165092468262], + [2.8089396953582764, -4.513176918029785], + [-0.9743945002555847, 11.228615760803223], + [-1.2691378593444824, -0.7122306823730469], + [5.447452545166016, -1.2887424230575562], + [7.778205871582031, -3.3900210857391357], + [0.229557067155838, -3.953922748565674], + [-4.684145927429199, -3.4341022968292236], + [2.82983660697937, -4.8982038497924805], + [-3.6517174243927, -0.6024988889694214], + [-3.1255581378936768, -1.3272576332092285], + [-3.0657668113708496, -2.3589909076690674], + [-4.085036277770996, -0.9930291175842285], + [2.0127408504486084, 5.362430095672607], + [7.015061855316162, -3.418856143951416], + [-1.1165708303451538, 11.28618049621582], + [-5.607901096343994, -1.396751046180725], + [-0.9789066910743713, 10.416241645812988], + [-0.5448286533355713, -1.0489567518234253], + [-3.831404447555542, -2.2642805576324463], + [0.36500686407089233, -6.230266094207764], + [4.872281074523926, 7.74259090423584], + [-2.69895339012146, 3.085258722305298], + [-1.3582557439804077, 11.841182708740234], + [0.6721928715705872, -7.753643989562988], + [-1.2943546772003174, 11.87886905670166], + [2.0571978092193604, -5.15458869934082], + [-2.9953830242156982, -0.9600440859794617], + [-3.194948434829712, -0.9851586818695068], + [1.0562162399291992, -5.316548824310303], + [3.770430326461792, 6.9789533615112305], + [-3.0766801834106445, -1.1155487298965454], + [2.835125684738159, -4.408866882324219], + [-2.0795400142669678, 0.8120744228363037], + [-1.8980400562286377, 1.608401894569397], + [-4.959654331207275, -0.5152984261512756], + [0.7042437195777893, -9.262134552001953], + [0.0806490108370781, -5.502469062805176], + [-3.6204824447631836, -1.9289960861206055], + [1.8440024852752686, 4.780745029449463], + [2.2399637699127197, 0.7233548164367676], + [-3.782160520553589, -2.7361056804656982], + [2.3516948223114014, -5.465881824493408], + [1.2582988739013672, 0.3512965738773346], + [-1.6323364973068237, -0.5024740099906921], + [7.585768222808838, -3.3424625396728516], + [0.6452394723892212, -8.163987159729004], + [2.9282681941986084, -4.034157752990723], + [7.566253185272217, -3.1087417602539062], + [0.7365995645523071, -6.044808387756348], + [0.8516791462898254, -5.821290016174316], + [0.6532864570617676, -7.245493412017822], + [-4.831552505493164, 6.172001838684082], + [-4.344049453735352, 6.456686973571777], + [-1.2282145023345947, 11.31856918334961], + [1.4814484119415283, -0.014693770557641983], + [-1.5756839513778687, 1.572488784790039], + [-4.167635440826416, -0.6327012777328491], + [2.696563959121704, -4.283339500427246], + [-1.1611765623092651, 10.926783561706543], + [0.521236002445221, -7.920878887176514], + [-2.169219493865967, 2.035682201385498], + [-3.0151636600494385, 3.1116371154785156], + [-1.9547845125198364, 1.2069467306137085], + [0.44354677200317383, -7.746158123016357], + [-0.6904559135437012, 5.001750946044922], + [5.816181659698486, -4.433954238891602], + [2.4759280681610107, 5.669605255126953], + [-4.678704738616943, 1.4402154684066772], + [1.1706855297088623, -0.2755592167377472], + [-1.662650227546692, -0.17202293872833252], + [-0.93984454870224, 10.437795639038086], + [2.5724995136260986, -4.518169403076172], + [2.650858163833618, -4.930088996887207], + [8.728049278259277, -2.7553484439849854], + [4.848710060119629, 7.851077079772949], + [-1.9672131538391113, 0.33309078216552734], + [4.236608028411865, -4.015199661254883], + [2.7464616298675537, -4.893342971801758], + [-0.00481211394071579, -1.1039141416549683], + [2.2471532821655273, -5.703986167907715], + [-3.937178134918213, -2.7109081745147705], + [2.7410354614257812, -4.660426139831543], + [7.017492771148682, -4.74445915222168], + [1.0769598484039307, 0.722260594367981], + [-1.9290258884429932, 1.7084746360778809], + [-3.212937593460083, -2.6972787380218506], + [2.6873419284820557, -4.44743013381958], + [3.3404786586761475, 6.501157760620117], + [-1.1932897567749023, 10.982791900634766], + [-3.2800114154815674, -1.1808818578720093], + [-1.6722887754440308, 13.337930679321289], + [-3.7891852855682373, -1.3643132448196411], + [0.39606839418411255, 7.216526985168457], + [0.28017348051071167, -6.085092067718506], + [-3.944143533706665, -2.418598175048828], + [-3.286660671234131, 4.215813159942627], + [7.610753059387207, -2.4383251667022705], + [0.648485004901886, -8.565740585327148], + [-1.431323528289795, 3.6493337154388428], + [2.0688316822052, 5.515201568603516], + [-3.927744150161743, 3.5942306518554688], + [-0.10999909788370132, -3.728721857070923], + [0.729033887386322, -0.470930278301239], + [-1.137784481048584, 11.549575805664062], + [-1.0105760097503662, 10.917244911193848], + [1.1900668144226074, 6.99666690826416], + [-4.1026530265808105, 6.221826076507568], + [-3.2668685913085938, 2.700977325439453], + [1.8542752265930176, 5.258909225463867], + [-4.022685527801514, 3.742164373397827], + [-4.097793102264404, -2.969768762588501], + [-1.9332700967788696, 1.5651143789291382], + [6.638430118560791, -2.563570261001587], + [0.7066742777824402, -8.123491287231445], + [0.13738468289375305, -0.8118319511413574], + [-0.4659425616264343, 9.268216133117676], + [2.415398359298706, -3.3771305084228516], + [-2.8790268898010254, -1.0593386888504028], + [-1.2788559198379517, 11.010433197021484], + [-2.9670379161834717, -1.0396169424057007], + [0.66739422082901, -8.199408531188965], + [1.9739186763763428, 6.597908020019531], + [1.0901744365692139, 5.801922798156738], + [-4.122656345367432, -2.9479074478149414], + [-3.261507749557495, -2.3644464015960693], + [1.8345979452133179, 1.016215205192566], + [-0.5291021466255188, 9.402076721191406], + [-0.35112759470939636, -1.802162766456604], + [0.40916693210601807, -4.52846622467041], + [2.2632365226745605, -4.31656551361084], + [0.7103563547134399, -6.143435955047607], + [0.795537531375885, -8.126766204833984], + [-2.9761319160461426, -0.928652286529541], + [-3.9271838665008545, -2.910672903060913], + [-0.8987970948219299, 10.944430351257324], + [0.3358567953109741, -5.901846885681152], + [2.5128636360168457, 0.6697776317596436], + [-3.3652617931365967, -1.0812633037567139], + [0.666680634021759, 4.765340805053711], + [6.3482866287231445, -1.9460735321044922], + [0.6616079211235046, -5.379900932312012], + [2.7940175533294678, -4.86043643951416], + [0.4758644104003906, -7.660252571105957], + [0.6166573762893677, -7.9859819412231445], + [0.8244285583496094, -7.13156795501709], + [0.4914657473564148, -5.5583319664001465], + [-4.641473770141602, -2.220959424972534], + [0.44078558683395386, -6.642827987670898], + [0.16197794675827026, -1.000656247138977], + [-1.075025200843811, 10.511533737182617], + [-1.4466848373413086, 0.29302841424942017], + [0.3833884596824646, -7.042078971862793], + [0.6553203463554382, -8.410257339477539], + [-0.8455962538719177, 8.071126937866211], + [-0.8371654152870178, 10.924245834350586], + [-3.7078182697296143, -1.5045931339263916], + [-0.19313514232635498, -1.4045913219451904], + [-4.457004547119141, -2.8096933364868164], + [-3.1372482776641846, -2.7579379081726074], + [-1.1790858507156372, 11.435151100158691], + [0.7655704617500305, -6.337024688720703], + [-1.042946219444275, 9.997730255126953], + [-0.8577337265014648, 10.819549560546875], + [-0.822020947933197, 9.890419960021973], + [-2.303354024887085, -1.3555798530578613], + [0.6440325975418091, -7.829163074493408], + [-1.8568106889724731, 1.6912164688110352], + [-0.11378765851259232, 9.140085220336914], + [-3.71748423576355, -1.0021436214447021], + [-2.2230489253997803, 0.3795541524887085], + [-1.1196653842926025, -0.3754419684410095], + [-4.350864887237549, -1.15483820438385], + [-1.9873781204223633, -1.2972352504730225], + [0.5841224789619446, -7.814296722412109], + [-3.32405686378479, -0.8909507989883423], + [0.6816314458847046, -4.5273566246032715], + [1.968442678451538, 4.9153337478637695], + [-1.0392670631408691, 9.84084415435791], + [2.4325356483459473, -4.723042964935303], + [-1.3955729007720947, 0.09700596332550049], + [-2.4040191173553467, 1.1375383138656616], + [-2.579741954803467, 1.1000398397445679], + [-3.4261577129364014, -0.9032344818115234], + [-3.062596559524536, -0.7461802363395691], + [-5.369774341583252, 5.55755090713501], + [-4.345359802246094, 4.800814628601074], + [-3.5686113834381104, -2.168205499649048], + [0.20187664031982422, -4.679222106933594], + [-5.072866439819336, -1.3154915571212769], + [0.5308452248573303, -5.347323894500732], + [2.9798314571380615, -4.662362098693848], + [1.7237915992736816, -4.9399800300598145], + [2.621814489364624, -4.366096496582031], + [-4.030169486999512, -2.485454559326172], + [-2.220254898071289, 1.1663883924484253], + [0.9280087351799011, -5.156789779663086], + [0.8132421374320984, -5.807757377624512], + [0.7382991909980774, -7.630866050720215], + [-0.649199903011322, 8.753594398498535], + [-3.4952402114868164, -1.461530327796936], + [-4.017521381378174, -1.4388549327850342], + [-3.384716510772705, -1.7079904079437256], + [-4.150142192840576, -1.2708572149276733], + [-4.362265586853027, 6.608607292175293], + [0.7949739694595337, -7.513303756713867], + [-4.8728928565979, 2.3011550903320312], + [-4.06040096282959, -1.1702104806900024], + [-3.6313540935516357, -1.3946598768234253], + [2.154101610183716, 5.6567559242248535], + [0.12953436374664307, -3.964635133743286], + [-1.3358322381973267, -0.6605437994003296], + [1.0408411026000977, -4.7255144119262695], + [-4.954855918884277, -0.8391181826591492], + [-4.076406002044678, -1.9476169347763062], + [0.6696784496307373, -6.534059524536133], + [0.06504669040441513, -5.180978298187256], + [0.7944201827049255, -0.5147970914840698], + [-0.7283884286880493, 10.725028991699219], + [-5.402616024017334, 4.4250288009643555], + [-1.959301471710205, 1.8392746448516846], + [0.6065070033073425, -6.957386016845703], + [0.6101779341697693, -0.7103915810585022], + [-1.9731168746948242, 2.2895290851593018], + [0.7185147404670715, -8.178367614746094], + [-1.9169596433639526, 0.6138347387313843], + [-3.557558536529541, -1.4825369119644165], + [-2.2691404819488525, -0.8263421058654785], + [0.4225583076477051, -6.877542018890381], + [7.316671848297119, -4.9619140625], + [0.3703432083129883, -6.764334678649902], + [-3.6458044052124023, -1.7846540212631226], + [-1.301953673362732, 11.661520004272461], + [-0.7763175964355469, 10.713542938232422], + [-1.5653977394104004, 12.423877716064453], + [-3.197843313217163, -1.0398225784301758], + [0.3567640781402588, -7.363281726837158], + [-2.357379198074341, 2.336909770965576], + [-4.555007457733154, -3.473238229751587], + [7.773595809936523, -2.4400579929351807], + [-4.001768112182617, 6.105721950531006], + [-2.2150216102600098, -1.335501790046692], + [0.6892690062522888, -8.542491912841797], + [-4.331470966339111, 6.110443592071533], + [0.483972430229187, -6.6730637550354], + [1.2564858198165894, 6.3252763748168945], + [-3.2933948040008545, 5.393197536468506], + [2.4398181438446045, 4.615175247192383], + [1.6987324953079224, 3.493281364440918], + [1.6023083925247192, 0.3411775231361389], + [-1.9609386920928955, -0.80162513256073], + [8.892090797424316, -2.6910388469696045], + [3.6628129482269287, 6.445188045501709], + [-4.3072285652160645, 5.097241401672363], + [-0.5779236555099487, 9.601003646850586], + [-4.559507846832275, 7.624179363250732], + [2.5039050579071045, 0.6692714691162109], + [8.1060209274292, -2.7385783195495605], + [-2.2639310359954834, 0.2210363745689392], + [-2.6341793537139893, 0.43222030997276306], + [-1.350373387336731, 11.470416069030762], + [-5.2785115242004395, -1.0073096752166748], + [-0.5662539005279541, 9.287152290344238], + [-3.662367105484009, -1.418226957321167], + [-1.9665839672088623, 0.7811325788497925], + [-3.9326441287994385, -0.539035439491272], + [0.7607504725456238, -0.2991339862346649], + [-4.2322564125061035, 6.915220260620117], + [-0.9199346899986267, 9.203447341918945], + [-3.693378210067749, -1.3881570100784302], + [0.4295310378074646, -7.22874116897583], + [8.624271392822266, -2.645153284072876], + [0.19623392820358276, -6.678686141967773], + [5.727323055267334, -1.4799723625183105], + [2.0949172973632812, -4.365328788757324], + [1.5373154878616333, 5.398104667663574], + [-1.4574898481369019, 0.770478367805481], + [-0.6797037720680237, 10.189630508422852], + [-3.212867498397827, -0.26363712549209595], + [6.597888469696045, -4.611137866973877], + [2.165318250656128, -0.12713368237018585], + [2.5934154987335205, -5.14143180847168], + [-1.810700535774231, 1.3256876468658447], + [3.05169939994812, -3.6130313873291016], + [0.7109645009040833, -5.710818767547607], + [-1.224066972732544, 10.594472885131836], + [-1.2699918746948242, -1.6098369359970093], + [-4.921764373779297, 1.781707525253296], + [-1.8503307104110718, 1.4030979871749878], + [-2.863771915435791, 4.989325046539307], + [-0.5646474361419678, 10.391650199890137], + [0.6269678473472595, -7.94494104385376], + [0.6677064299583435, -5.870769023895264], + [0.4083630442619324, -7.274148464202881], + [2.2583210468292236, 4.887641906738281], + [1.5487780570983887, 3.1367058753967285], + [-3.281196355819702, -1.4264376163482666], + [-1.7936052083969116, 1.7428501844406128], + [1.6578168869018555, 5.984560489654541], + [0.5107921957969666, -4.352219581604004], + [-5.119518756866455, 6.944509506225586], + [-4.295043468475342, 6.770552635192871], + [1.8479282855987549, -4.808164596557617], + [-1.120453953742981, 1.4955636262893677], + [0.5209027528762817, -6.563573837280273], + [-3.9155921936035156, 5.932757377624512], + [0.8303954005241394, -7.776428699493408], + [-3.9156620502471924, -2.417724847793579], + [0.2162044644355774, -3.4680495262145996], + [-5.909731864929199, 3.353019952774048], + [-3.8777549266815186, -2.8184924125671387], + [-4.024620056152344, 1.4060204029083252], + [1.9820544719696045, 4.867398262023926], + [-3.2624099254608154, -0.6500107049942017], + [7.9664788246154785, -3.103436231613159], + [-0.6810507774353027, 9.94460678100586], + [0.42113375663757324, -6.775677680969238], + [-0.5271462798118591, 9.942907333374023], + [2.320573091506958, -3.887449026107788], + [-1.2097007036209106, 1.738418698310852], + [-0.4435114860534668, 6.473920822143555], + [2.0472636222839355, 0.6421409249305725], + [1.8109910488128662, -5.189196586608887], + [-1.6168994903564453, 2.2632389068603516], + [-0.8426085710525513, -1.2829110622406006], + [-3.773780584335327, 5.067226886749268], + [-4.265902042388916, -2.6528708934783936], + [2.292124032974243, 6.271119594573975], + [2.907241106033325, -4.529447555541992], + [9.313021659851074, -2.893216848373413], + [-4.496005058288574, -1.3376659154891968], + [-0.6050450801849365, 9.90965461730957], + [-3.8000924587249756, -0.5177816152572632], + [-0.03939882665872574, -4.08074951171875], + [-3.4279873371124268, -0.5043684840202332], + [-0.383807897567749, -2.321383237838745], + [2.4173672199249268, 5.06892204284668], + [-5.171717166900635, 6.240626335144043], + [-6.000678539276123, -0.7063886523246765], + [0.5584791302680969, -8.625905990600586], + [2.5121209621429443, -4.33530330657959], + [8.194511413574219, -2.6592540740966797], + [-1.0711653232574463, 10.982946395874023], + [-0.4898887872695923, 9.706452369689941], + [-3.967975378036499, -2.9516913890838623], + [0.6103712320327759, -7.435789108276367], + [3.005204439163208, -4.906065940856934], + [2.960083246231079, 2.405996322631836], + [-3.4161288738250732, -3.290337085723877], + [0.9269796013832092, -5.851266860961914], + [2.051908254623413, 5.233253002166748], + [2.724553346633911, 5.940338134765625], + [0.01040446013212204, -1.2487167119979858], + [2.765772581100464, -4.990716457366943], + [1.9553248882293701, 0.9500646591186523], + [-4.4063897132873535, 6.991989612579346], + [-2.5102107524871826, 6.4539031982421875], + [-4.997174263000488, 7.543862819671631], + [7.424548625946045, -2.214519739151001], + [-0.6951749920845032, 9.866372108459473], + [2.25970721244812, 5.386110305786133], + [6.892354965209961, -2.803584337234497], + [-3.9043362140655518, -2.9597203731536865], + [-0.8070147037506104, 10.341209411621094], + [-1.6988509893417358, 2.458925724029541], + [-1.5963664054870605, 1.9333711862564087], + [2.4960896968841553, -6.008658409118652], + [-0.18025895953178406, -3.408442258834839], + [-3.5934245586395264, 5.567172050476074], + [-0.15201199054718018, -1.771094799041748], + [-0.04979027062654495, 5.51824951171875], + [3.5800223350524902, 6.67936897277832], + [-3.3971009254455566, -1.701236367225647], + [-0.008051939308643341, 7.5517473220825195], + [0.3178873658180237, -6.410138130187988], + [6.658938407897949, -1.7220609188079834], + [0.7788747549057007, -6.070467948913574], + [1.251030445098877, -0.9062716960906982], + [-2.3726818561553955, -1.6242135763168335], + [-3.487269878387451, -1.250956416130066], + [-0.7831825017929077, -0.7522095441818237], + [1.6595096588134766, 1.5359742641448975], + [-0.37656813859939575, 8.655749320983887], + [-3.964693784713745, 4.861058235168457], + [2.4143152236938477, 6.523054599761963], + [0.710606038570404, -8.034693717956543], + [-4.084305286407471, -2.228583812713623], + [-0.8654521703720093, 10.60307788848877], + [-5.1070637702941895, 6.0216064453125], + [-3.6249094009399414, 5.476589202880859], + [-4.7533040046691895, 7.308309555053711], + [-3.7985188961029053, 6.591548442840576], + [-1.1496200561523438, 10.437984466552734], + [0.7969099879264832, -9.008419036865234], + [0.13460534811019897, -1.0697910785675049], + [-4.728609085083008, 6.045467376708984], + [4.235489368438721, 7.139700889587402], + [-3.9823148250579834, -1.2811511754989624], + [-4.68296480178833, 6.373167991638184], + [-3.6662161350250244, -2.425053596496582], + [-0.6547524333000183, -1.385907769203186], + [-3.265448570251465, -1.7364693880081177], + [1.8779569864273071, 5.5744218826293945], + [0.5981273055076599, -0.7118716239929199], + [2.6535451412200928, -4.092930793762207], + [-2.167595386505127, -0.08479315042495728], + [-2.4625518321990967, -1.304645299911499], + [-1.5950559377670288, 1.3891692161560059], + [-3.504539728164673, 3.0962891578674316], + [0.10008978098630905, -6.261137962341309], + [0.7334917783737183, 4.096935272216797], + [0.7637119889259338, -6.724874019622803], + [-5.546027183532715, 7.015591621398926], + [-1.374909520149231, 12.110799789428711], + [0.30122900009155273, -6.681900978088379], + [8.695364952087402, -2.628546953201294], + [0.39188241958618164, -6.642586708068848], + [-1.3791035413742065, 11.487329483032227], + [-1.1796038150787354, 1.1819846630096436], + [-4.115667343139648, -4.421695709228516], + [0.5728689432144165, -5.2389116287231445], + [-0.4817773401737213, -1.4242008924484253], + [6.84588623046875, -3.1997177600860596], + [2.3364319801330566, 5.379255294799805], + [2.4827609062194824, -4.292150974273682], + [-3.352130651473999, -1.426538109779358], + [2.1447675228118896, -4.431347846984863], + [2.630652666091919, 5.50947904586792], + [-1.6360445022583008, 4.953656196594238], + [4.007002353668213, 7.355251312255859], + [3.7052810192108154, -6.156599998474121], + [0.7297398447990417, -9.816900253295898], + [-0.49003157019615173, -0.6007936000823975], + [-1.1843767166137695, 10.440584182739258], + [-2.592707872390747, 4.445462226867676], + [-0.23945310711860657, -0.38326942920684814], + [1.7970161437988281, 4.30213737487793], + [-1.312039852142334, -0.7081612944602966], + [-0.04494074732065201, -3.8811686038970947], + [-2.129976272583008, 2.2220242023468018], + [-0.18482589721679688, 8.611335754394531], + [2.5888350009918213, -4.228209495544434], + [0.6545863747596741, -5.051851749420166], + [0.6746072173118591, -7.368647575378418], + [-3.0748400688171387, -0.7518115639686584], + [-0.5395253300666809, -0.8820300102233887], + [-3.2060697078704834, -1.2821067571640015], + [1.8170591592788696, 5.296419620513916], + [-4.30201530456543, 6.711050033569336], + [0.9833739399909973, -0.32429084181785583], + [-0.13621383905410767, -1.8969318866729736], + [-1.7767016887664795, 2.277961015701294], + [-3.669356346130371, 6.0912580490112305], + [9.268688201904297, -2.8558189868927], + [-0.932828962802887, 5.174488067626953], + [2.6163220405578613, -4.303060531616211], + [0.7692378759384155, -7.338433265686035], + [2.684278964996338, -5.004342079162598], + [-3.578963041305542, -1.0532461404800415], + [-2.7786829471588135, -2.0472614765167236], + [8.436003684997559, -2.7262120246887207], + [7.045778751373291, -2.9516444206237793], + [2.50053334236145, -4.1669511795043945], + [-5.612569332122803, -1.2355568408966064], + [8.66582202911377, -2.8381359577178955], + [2.9265053272247314, 6.489579200744629], + [-0.4937165379524231, -1.223088264465332], + [2.9605164527893066, -4.8875346183776855], + [0.4733890891075134, -7.092325210571289], + [4.96705436706543, -0.9900259375572205], + [0.1718892753124237, -4.809083938598633], + [-3.9355924129486084, -1.8651775121688843], + [2.3772575855255127, -4.452639102935791], + [2.4398434162139893, 3.897639513015747], + [-4.6147847175598145, -0.6679236888885498], + [2.6833040714263916, -4.576500415802002], + [-5.151721477508545, 5.405248641967773], + [-1.2298730611801147, 11.545818328857422], + [3.6250529289245605, -4.389493942260742], + [-4.026738166809082, 6.15001106262207], + [3.1461374759674072, 5.511442184448242], + [-3.45332670211792, -0.024948958307504654], + [-2.132538080215454, -1.3794208765029907], + [-5.467852592468262, 6.8111066818237305], + [1.2590720653533936, -0.02353939786553383], + [0.6058374047279358, -8.565584182739258], + [0.3946753740310669, -6.560483932495117], + [2.5968270301818848, -4.273372650146484], + [-1.3755152225494385, 11.978288650512695], + [-4.030109405517578, -1.0194882154464722], + [-0.36055225133895874, -1.3510388135910034], + [-3.5212414264678955, 3.3551647663116455], + [0.7108672857284546, -7.071562767028809], + [2.3743817806243896, -4.848039627075195], + [3.752638578414917, -3.899099588394165], + [-3.3615477085113525, -1.6757653951644897], + [-0.5056716799736023, 9.855789184570312], + [1.4648118019104004, 1.0014479160308838], + [-0.23951852321624756, 9.21003532409668], + [-4.211387634277344, -1.0504181385040283], + [0.5846406817436218, -6.043611526489258], + [-2.9092705249786377, -0.7808074951171875], + [7.487619400024414, -3.446573495864868], + [0.9978067278862, -4.076084613800049], + [-3.42382550239563, -3.207409143447876], + [1.516143560409546, 5.737488746643066], + [-3.6785085201263428, -2.8745996952056885], + [-1.7631878852844238, 1.0822309255599976], + [0.9870877861976624, -5.217519760131836], + [-3.437487840652466, -1.463783860206604], + [-3.977771043777466, 6.047665119171143], + [3.0062758922576904, -4.902571678161621], + [5.544849872589111, -1.1681948900222778], + [-4.232812881469727, -0.8221542835235596], + [8.911288261413574, -2.6941349506378174], + [-3.7407591342926025, -1.79927659034729], + [-4.580970764160156, 4.659518241882324], + [-6.039710521697998, -1.169366717338562], + [0.04272424429655075, -3.5240185260772705], + [2.0400240421295166, 5.824399948120117], + [2.7117116451263428, -4.284853935241699], + [-1.3505451679229736, 11.986593246459961], + [-2.81532621383667, -0.7422270774841309], + [0.5123609900474548, 4.070415496826172], + [-4.769718170166016, -1.4566227197647095], + [0.5105659365653992, -7.808422088623047], + [-2.0451555252075195, 0.9827028512954712], + [2.7102537155151367, -4.358126640319824], + [0.9644587635993958, -7.667407989501953], + [-1.7867491245269775, 1.417568564414978], + [-3.6794803142547607, 5.310496807098389], + [1.5671710968017578, -5.049471378326416], + [0.6054605841636658, -7.306545257568359], + [-4.968730926513672, 7.185858726501465], + [3.2882707118988037, -5.068693161010742], + [6.497763633728027, -5.965801239013672], + [-1.2236829996109009, 11.52060604095459], + [-4.010969638824463, -2.420051097869873], + [-5.125878810882568, -1.201759696006775], + [-4.486963748931885, 6.411405563354492], + [7.632030010223389, -2.1337783336639404], + [1.6582083702087402, 0.9303732514381409], + [-3.705432415008545, -1.6439406871795654], + [-3.413813352584839, -1.4901701211929321], + [8.844550132751465, -2.6469361782073975], + [1.372774600982666, 1.891523003578186], + [-1.9979331493377686, 2.2365431785583496], + [-3.611114263534546, 5.376224517822266], + [-1.8596609830856323, 0.5319264531135559], + [4.860113143920898, 8.055971145629883], + [-0.9062994122505188, 10.041435241699219], + [-3.946225881576538, -2.6872875690460205], + [-1.9093592166900635, 1.8846275806427002], + [0.6815559267997742, -8.963066101074219], + [-0.8304404616355896, 10.387025833129883], + [-1.9477510452270508, 2.1692659854888916], + [1.6811951398849487, 1.4708746671676636], + [-1.1151869297027588, -1.0684632062911987], + [5.0135817527771, -4.994021415710449], + [0.302520751953125, -5.877572536468506], + [-4.646798610687256, -2.9512479305267334], + [-3.26794171333313, -2.3497745990753174], + [2.8088796138763428, 3.5614330768585205], + [0.3478902578353882, -5.825263977050781], + [-3.628483295440674, -2.3913137912750244], + [-0.9916800856590271, 10.673015594482422], + [4.536065578460693, 7.694537162780762], + [-1.916674017906189, 2.481203317642212], + [-0.20953118801116943, 8.724320411682129], + [0.545090913772583, -7.8804216384887695], + [0.5030744075775146, -7.219446182250977], + [-1.8094419240951538, 1.0834907293319702], + [2.9590747356414795, -4.887369155883789], + [-1.1793346405029297, 10.938238143920898], + [-4.98884391784668, 6.008780002593994], + [-1.2825605869293213, 11.428943634033203], + [-3.64806866645813, -1.1198662519454956], + [6.277999401092529, -2.2088277339935303], + [0.34847819805145264, -6.373780250549316], + [-1.380289912223816, 12.545145034790039], + [-0.08702967315912247, -5.075623512268066], + [-2.0734219551086426, -2.472336530685425], + [-2.148030996322632, -1.5523029565811157], + [2.2311160564422607, -5.076781749725342], + [7.274438381195068, -3.9572255611419678], + [6.34518575668335, -1.2682112455368042], + [2.9293665885925293, -5.001524925231934], + [-4.358338356018066, -1.5257996320724487], + [-3.043132781982422, -2.6204020977020264], + [-4.434664726257324, 6.318610668182373], + [-3.9667880535125732, 5.594520568847656], + [-3.494701862335205, -1.6114022731781006], + [1.9019556045532227, 5.791365623474121], + [-3.2867767810821533, -1.0038671493530273], + [-3.2802670001983643, -1.0370864868164062], + [2.2939493656158447, 5.411442756652832], + [-3.695107936859131, -0.6046305894851685], + [-4.883147239685059, 3.0030055046081543], + [0.6399869322776794, -8.879337310791016], + [1.5919787883758545, 3.7389729022979736], + [0.48144859075546265, -0.24595826864242554], + [7.245310306549072, -3.2988932132720947], + [6.821340084075928, -3.8121767044067383], + [-4.350496292114258, -0.7856125831604004], + [-4.028986930847168, 1.2492088079452515], + [0.4410465359687805, -5.790124893188477], + [-1.3657355308532715, 11.84504222869873], + [3.187497138977051, -3.859968662261963], + [8.722519874572754, -3.0061404705047607], + [-4.30531120300293, -2.65596079826355], + [-4.088674068450928, -2.4370315074920654], + [5.49707555770874, -1.2781788110733032], + [-3.1230051517486572, -1.421270728111267], + [0.5032745003700256, -6.229584693908691], + [2.4827072620391846, -4.360902786254883], + [-2.710710287094116, -1.3572266101837158], + [-3.859492063522339, -2.101963996887207], + [-3.4145729541778564, -0.4585915207862854], + [-3.7326278686523438, -0.2774549722671509], + [1.1912846565246582, -0.42655909061431885], + [-3.733717679977417, 6.297399997711182], + [-3.378577709197998, -1.2723562717437744], + [1.1373720169067383, -5.306938171386719], + [2.74352765083313, -4.28712272644043], + [-3.0218732357025146, -2.197727918624878], + [0.5046988725662231, 0.7597671151161194], + [-4.345324993133545, 6.483494758605957], + [-5.0372633934021, -1.0876420736312866], + [0.23786482214927673, 0.7109440565109253], + [-4.903762340545654, 7.213229656219482], + [-3.569920778274536, -2.3314478397369385], + [-2.358386516571045, -1.7207087278366089], + [5.254742622375488, 8.26163101196289], + [-1.8617279529571533, 1.3032482862472534], + [2.7156925201416016, 5.679025650024414], + [0.9985278248786926, 5.7803635597229], + [-1.1333153247833252, 10.761153221130371], + [0.1685672402381897, -2.767993211746216], + [-3.8231959342956543, -2.187474489212036], + [-1.3249808549880981, 11.622243881225586], + [-1.4044393301010132, -0.6413498520851135], + [-3.7120156288146973, -1.0560370683670044], + [1.963834285736084, -6.336023330688477], + [2.2486412525177, -5.578606128692627], + [0.01466979831457138, -0.6379925012588501], + [3.183950662612915, -4.9619293212890625], + [5.93519926071167, -0.7981371879577637], + [-5.382425308227539, -3.4439873695373535], + [2.7742698192596436, -4.741881370544434], + [1.172316312789917, -0.1417357325553894], + [0.7649187445640564, -9.567296981811523], + [-1.2645028829574585, 10.76028060913086], + [-3.110801935195923, -1.1886563301086426], + [-3.928931474685669, -1.9454811811447144], + [-0.5596064925193787, 9.787946701049805], + [-2.715949535369873, 3.2179439067840576], + [1.5053918361663818, -1.4051262140274048], + [-3.403184413909912, 4.04500675201416], + [2.486980438232422, 4.732899188995361], + [-3.1203129291534424, -1.1641432046890259], + [-5.441371440887451, -1.0041402578353882], + [3.8565666675567627, -4.258873462677002], + [8.337328910827637, -2.610755205154419], + [3.4070394039154053, 6.255695343017578], + [-0.9365796446800232, 10.653726577758789], + [-2.4241583347320557, 2.4279892444610596], + [0.755628764629364, -9.041086196899414], + [-4.214094161987305, -0.7175223231315613], + [0.6321324706077576, -5.231314659118652], + [-4.831839561462402, 7.091395378112793], + [1.6750948429107666, 3.8632259368896484], + [2.9306223392486572, -3.8297348022460938], + [-1.41083562374115, 12.09803295135498], + [0.6426191926002502, -7.495501518249512], + [-3.571765661239624, -1.6097909212112427], + [2.812476396560669, -4.580705642700195], + [-4.772073268890381, 4.96558952331543], + [2.2355003356933594, 4.064651012420654], + [-2.5951178073883057, -0.702648401260376], + [1.2725505828857422, -4.876272201538086], + [-2.855137586593628, -1.8403276205062866], + [-2.1320436000823975, -0.5124931931495667], + [2.801319122314453, -4.839061260223389], + [1.6666854619979858, 3.010267972946167], + [-3.069762706756592, -0.9021801948547363], + [0.9434452652931213, -5.385451316833496], + [-2.591360330581665, -3.457042932510376], + [-3.2295267581939697, -1.0610986948013306], + [0.0012148842215538025, -5.403146743774414], + [-3.981607675552368, -2.0118448734283447], + [6.248257160186768, -3.0575807094573975], + [2.8345577716827393, -4.526941299438477], + [-5.003955364227295, -0.6175739765167236], + [6.382786273956299, -1.7305620908737183], + [-3.534914970397949, -3.478182792663574], + [-4.082004070281982, 3.7291781902313232], + [-1.039456844329834, 1.0589866638183594], + [0.7946634888648987, -0.5380678772926331], + [2.3638484477996826, -5.4354681968688965], + [-5.14124870300293, -0.906196117401123], + [0.6123581528663635, -8.281597137451172], + [4.2536468505859375, 7.2616472244262695], + [0.5271685719490051, -7.61724853515625], + [3.089165210723877, -3.499516248703003], + [5.0180888175964355, -1.8082447052001953], + [-4.221180438995361, -2.4395253658294678], + [2.9515113830566406, 2.546323299407959], + [0.5379189252853394, 0.777106523513794], + [2.375504732131958, -4.751777648925781], + [-1.9531242847442627, 1.631027102470398], + [2.8126091957092285, -4.77165412902832], + [1.8537153005599976, 0.5714762210845947], + [2.2966668605804443, -5.30842924118042], + [7.487475395202637, -3.9059488773345947], + [2.698373556137085, -4.561793327331543], + [2.2655961513519287, 5.013545036315918], + [0.60039883852005, -5.592874526977539], + [0.5369073152542114, -6.312335968017578], + [-3.40198016166687, -1.3969618082046509], + [-3.288177490234375, -0.9120925664901733], + [7.921890735626221, -2.808764934539795], + [-4.046457767486572, 5.939974784851074], + [-5.558188438415527, 7.5005927085876465], + [-3.199901580810547, -1.1253013610839844], + [0.804810643196106, -5.539541244506836], + [-4.7495808601379395, -0.8539871573448181], + [-4.662367343902588, -0.7023665904998779], + [-3.5805952548980713, -1.3320504426956177], + [-2.818302631378174, -1.6022207736968994], + [-3.185415506362915, -1.6683293581008911], + [-5.36224889755249, 5.3355889320373535], + [-2.620802879333496, -2.5143632888793945], + [-2.0416154861450195, -0.006248150020837784], + [-4.563137054443359, 6.096691131591797], + [1.61134934425354, -6.1205315589904785], + [-4.9958624839782715, 6.837436676025391], + [-3.771813154220581, -1.8169543743133545], + [1.410408616065979, -6.296659469604492], + [8.829718589782715, -2.6991665363311768], + [-4.175519943237305, 6.146130561828613], + [1.1785279512405396, -7.354366779327393], + [2.502937078475952, -6.657966613769531], + [-1.8668186664581299, 1.6457972526550293], + [0.8009632229804993, -5.146888732910156], + [2.274157762527466, -4.038114070892334], + [-1.8780337572097778, 1.2336879968643188], + [0.45188820362091064, -6.625035762786865], + [3.1296520233154297, 6.130400657653809], + [2.2338993549346924, -3.879854440689087], + [2.4244344234466553, 6.047300338745117], + [2.7935078144073486, -4.539198875427246], + [0.3616536259651184, -6.692535400390625], + [-5.756449222564697, 7.114653587341309], + [-0.7666099071502686, 10.692363739013672], + [8.501097679138184, -2.944319009780884], + [-0.06871680170297623, -4.798862934112549], + [-4.338463306427002, -1.0654815435409546], + [0.2709904909133911, -5.6825408935546875], + [-1.9628440141677856, 2.093552827835083], + [-2.7881710529327393, -1.9037604331970215], + [-5.320230960845947, 6.404109001159668], + [1.8535375595092773, -6.549527645111084], + [1.0190200805664062, -6.835509300231934], + [-1.7768536806106567, -0.13343465328216553], + [0.512915849685669, -7.330690383911133], + [-1.9197427034378052, 1.9726327657699585], + [-3.844773530960083, -0.6053990721702576], + [-4.763432025909424, 6.44244909286499], + [-0.9696382880210876, 0.7344058156013489], + [1.6876094341278076, 6.394521713256836], + [0.5728601813316345, -7.855523586273193], + [-1.269728422164917, 11.706174850463867], + [-4.910521030426025, 6.935394763946533], + [-1.4883880615234375, 0.741030752658844], + [0.755849301815033, -8.107375144958496], + [-3.9485299587249756, -3.182180643081665], + [2.3291544914245605, 3.97004771232605], + [2.064577341079712, -4.025572299957275], + [-3.5081565380096436, 5.882451057434082], + [-4.497227191925049, -1.1387611627578735], + [-3.4637250900268555, -1.8558231592178345], + [-0.6758286356925964, 10.15732192993164], + [3.3542063236236572, 6.377463340759277], + [2.5703394412994385, 5.693416595458984], + [0.021960876882076263, -4.432981967926025], + [0.6600163578987122, -0.5684241652488708], + [5.825864315032959, -2.0181081295013428], + [-0.20801645517349243, -1.7493032217025757], + [-4.3359456062316895, 6.118804931640625], + [1.6580469608306885, 5.23773193359375], + [-2.4484760761260986, -2.401705503463745], + [-0.6560969352722168, 10.014183044433594], + [0.9737480282783508, -6.699980735778809], + [0.06652673333883286, 8.086762428283691], + [-4.474593639373779, -3.086397886276245], + [4.1368727684021, 7.1545305252075195], + [-1.1541963815689087, 11.146710395812988], + [0.6453610062599182, -8.321725845336914], + [1.8385308980941772, 4.046144008636475], + [-4.210620403289795, -3.0495169162750244], + [-5.488065242767334, 5.611064434051514], + [1.5740634202957153, 1.135637640953064], + [-2.6235053539276123, -0.6127172708511353], + [-2.8004884719848633, -1.6245392560958862], + [2.8675506114959717, 6.542197227478027], + [2.8770885467529297, 6.644369602203369], + [-0.38848036527633667, 8.591772079467773], + [1.141201376914978, -7.919350624084473], + [0.3652420938014984, -4.788313865661621], + [2.598076581954956, -4.592106819152832], + [-1.139951229095459, 11.261360168457031], + [-1.00089693069458, 11.106983184814453], + [-1.3049417734146118, -2.9194958209991455], + [1.8762997388839722, 0.7919371724128723], + [-5.140840530395508, 6.103296756744385], + [2.164080858230591, -4.591801643371582], + [0.7173164486885071, -6.045295238494873], + [-4.241475582122803, 5.290825843811035], + [-2.7050087451934814, -1.6189836263656616], + [-1.77519690990448, 0.919887363910675], + [0.577892541885376, 5.684161186218262], + [-0.7825021743774414, 9.671887397766113], + [-2.77040696144104, 1.757771372795105], + [1.3699991703033447, -5.133549690246582], + [-3.773087739944458, -2.0162875652313232], + [-4.997009754180908, 5.661866188049316], + [-0.7397493124008179, 10.010376930236816], + [-2.3056282997131348, -0.7762866020202637], + [-0.43233317136764526, 9.643491744995117], + [0.31668704748153687, -4.868952751159668], + [-1.9393824338912964, 2.3222925662994385], + [2.2778100967407227, 6.054965019226074], + [5.042623519897461, 8.321324348449707], + [-5.993818283081055, 8.163908004760742], + [0.6245992183685303, -6.335846900939941], + [-0.6917487978935242, 10.39744758605957], + [-3.061858892440796, -0.6270449161529541], + [0.39141952991485596, -5.65932035446167], + [0.7978736758232117, -0.6595211029052734], + [-3.6119260787963867, -0.29190337657928467], + [-3.4350109100341797, 3.215632200241089], + [0.9152081608772278, -0.3786122798919678], + [2.8438236713409424, -4.706066131591797], + [-0.9847368597984314, 1.5519088506698608], + [-3.0575778484344482, 3.528714895248413], + [0.6643243432044983, -7.965920448303223], + [5.064151763916016, 7.922264099121094], + [-5.034517765045166, 6.509012699127197], + [-3.2757294178009033, -2.314990282058716], + [-1.8099514245986938, -0.23803991079330444], + [-1.8430505990982056, 2.008077621459961], + [5.7929205894470215, -2.1323578357696533], + [-2.064725160598755, 5.215407848358154], + [-3.6747727394104004, -0.8276898860931396], + [2.3499715328216553, 6.273889064788818], + [1.3953737020492554, 0.26929664611816406], + [2.5539822578430176, -4.674243927001953], + [-5.0905442237854, -5.1928839683532715], + [-1.3942328691482544, -0.6343050599098206], + [0.6221518516540527, -7.403185844421387], + [2.699295997619629, -4.499505519866943], + [5.823194980621338, -1.2221070528030396], + [2.7089335918426514, -3.9671075344085693], + [-1.3332109451293945, 11.627925872802734], + [-1.40279221534729, 12.194056510925293], + [1.770491600036621, 0.9138699769973755], + [1.383316159248352, 0.2792542576789856], + [2.491370916366577, 5.687528610229492], + [2.3960936069488525, 6.443681240081787], + [-1.2185933589935303, 10.807331085205078], + [-0.4836845397949219, 2.917844533920288], + [-1.8368964195251465, 0.2985594570636749], + [-3.867016077041626, -2.0428216457366943], + [-2.855767250061035, -2.1061925888061523], + [0.20461899042129517, -5.308347225189209], + [2.120021104812622, 0.5892633199691772], + [0.4631378650665283, -4.672744274139404], + [-4.408824443817139, -1.3429619073867798], + [1.951019048690796, -4.655783653259277], + [-1.0093042850494385, -4.1808013916015625], + [-1.060461163520813, 11.488794326782227], + [-1.6962417364120483, 2.041262626647949], + [1.5221012830734253, 0.4618983864784241], + [-0.4303135275840759, -1.549129605293274], + [0.7573221325874329, -7.585246562957764], + [-4.118645668029785, 6.867713451385498], + [0.7306347489356995, 6.744268417358398], + [-4.04547643661499, -0.08319658041000366], + [-3.976757287979126, -1.4279921054840088], + [3.758936643600464, 7.132007122039795], + [7.246114253997803, -2.8737523555755615], + [-1.2380024194717407, 1.3372915983200073], + [3.2031400203704834, -4.9189934730529785], + [1.4256036281585693, -0.26125091314315796], + [-2.9646248817443848, -1.604810118675232], + [-5.079294681549072, 4.894979476928711], + [0.6809377074241638, -9.028619766235352], + [-3.8996479511260986, -1.496557593345642], + [3.145685911178589, -4.867995262145996], + [-0.6943454146385193, 10.30789852142334], + [8.486348152160645, -3.505298137664795], + [-2.5673627853393555, -1.0965267419815063], + [-1.7495635747909546, 0.2363937795162201], + [-5.6112060546875, 7.200611114501953], + [-4.486938953399658, -0.67750483751297], + [2.4759037494659424, -4.3237152099609375], + [-1.1870216131210327, 0.9532612562179565], + [-5.271399021148682, -1.0906527042388916], + [-4.037672519683838, 5.759017467498779], + [-2.408865213394165, -1.4728482961654663], + [1.5967657566070557, -0.08733800053596497], + [-1.2778475284576416, 1.3311793804168701], + [-3.882614850997925, -1.545507550239563], + [-5.587289333343506, 7.361749649047852], + [-0.13880586624145508, 8.537248611450195], + [-0.7130756974220276, 9.859132766723633], + [-2.9400312900543213, 4.714120864868164], + [9.2302885055542, -2.8050954341888428], + [1.7998887300491333, 5.700352191925049], + [8.119490623474121, -2.9497504234313965], + [0.25265800952911377, -5.720156669616699], + [1.7213088274002075, 4.382486820220947], + [-2.0593090057373047, 1.2593731880187988], + [0.9871304631233215, -6.427154541015625], + [0.45162850618362427, -5.743075370788574], + [-3.7619736194610596, -0.9269527196884155], + [4.16984224319458, 7.290823936462402], + [8.162165641784668, -2.9138944149017334], + [-1.0706311464309692, 11.015976905822754], + [-1.3175808191299438, 11.302839279174805], + [0.7185544371604919, -8.512311935424805], + [-1.092129111289978, 0.5660578012466431], + [8.653276443481445, -2.661905527114868], + [2.3085362911224365, 3.8028900623321533], + [-2.6639559268951416, -2.65000319480896], + [-4.884410858154297, -1.8144830465316772], + [-1.2337210178375244, -1.0963222980499268], + [-3.764639139175415, -1.8944072723388672], + [-0.05862096697092056, -3.163418769836426], + [3.600296974182129, 6.925614356994629], + [-2.5760624408721924, -1.0709203481674194], + [1.845312476158142, -4.146459102630615], + [3.3117592334747314, 1.6456965208053589], + [0.46501606702804565, -0.9751757383346558], + [1.6655175685882568, 5.949959754943848], + [9.800354957580566, -2.9601891040802], + [-4.124398708343506, 5.873381614685059], + [-0.8493834137916565, 10.28878402709961], + [6.793962478637695, -2.191624879837036], + [0.5477994084358215, -6.44844913482666], + [-4.924938678741455, -1.6277281045913696], + [-4.117290019989014, -0.9583937525749207], + [0.7605378031730652, 4.082448959350586], + [2.0801165103912354, 5.583711624145508], + [0.31143540143966675, -6.440306663513184], + [0.5594304800033569, -0.6937309503555298], + [6.705108165740967, -3.6664721965789795], + [0.7436713576316833, -7.842025279998779], + [2.178720235824585, -5.178554534912109], + [0.33644282817840576, -3.7797091007232666], + [-0.9638465046882629, 1.2656227350234985], + [0.6619065999984741, -7.784503936767578], + [5.0582499504089355, -3.2709858417510986], + [-4.469335079193115, -0.9425094723701477], + [-4.406218528747559, -2.9756827354431152], + [6.749207019805908, -2.0641939640045166], + [5.569209575653076, -1.1872044801712036], + [6.624059200286865, -5.211060047149658], + [-4.21248197555542, -2.6306536197662354], + [2.9232773780822754, -4.9475297927856445], + [9.373315811157227, -2.911759614944458], + [-1.3612959384918213, 1.587325096130371], + [0.5486932992935181, -7.114235877990723], + [-0.2508586645126343, -1.5651216506958008], + [2.285963773727417, 3.3382174968719482], + [5.984105587005615, -3.127919912338257], + [-4.362351894378662, -1.5730921030044556], + [-4.437561511993408, 4.3696722984313965], + [-4.071169853210449, -1.5447523593902588], + [-1.3900889158248901, -1.6944315433502197], + [-1.5393437147140503, 12.40493392944336], + [0.6311554908752441, -7.539839744567871], + [-3.9454524517059326, -2.1686620712280273], + [-3.943174123764038, -1.2465709447860718], + [-4.663865089416504, -3.6980364322662354], + [-2.803611993789673, -0.9541724920272827], + [-2.0927534103393555, 2.279014825820923], + [-3.0384981632232666, -2.031437397003174], + [0.7437390685081482, -0.4951041340827942], + [2.9982032775878906, -4.652293682098389], + [-3.244842290878296, -2.0907628536224365], + [1.233280897140503, -5.198028564453125], + [2.836533546447754, -4.061643600463867], + [8.579981803894043, -2.745764970779419], + [0.7262899279594421, -9.02676010131836], + [8.275842666625977, -3.068479299545288], + [2.775066614151001, 6.291190147399902], + [-2.1137895584106445, -2.0110082626342773], + [-3.929807186126709, -0.8777434825897217], + [1.1296086311340332, -6.3162736892700195], + [-1.821530818939209, 1.4894874095916748], + [-4.229630947113037, 6.056746959686279], + [-5.388232707977295, 5.865530490875244], + [0.6935822367668152, -8.362048149108887], + [5.862337589263916, -1.4456995725631714], + [0.30643725395202637, -6.997723579406738], + [-3.7771811485290527, -1.6379419565200806], + [8.012654304504395, -2.638495683670044], + [1.0458308458328247, 4.809732913970947], + [2.5756375789642334, -4.644645690917969], + [-2.4469985961914062, 2.373387575149536], + [8.363577842712402, -2.7889697551727295], + [2.417637348175049, 0.5217227935791016], + [-1.419105052947998, 12.110269546508789], + [0.6412486433982849, -7.455854415893555], + [6.907169342041016, -2.3931338787078857], + [1.3659275770187378, 1.6756139993667603], + [1.416003704071045, 1.8232026100158691], + [-4.475666522979736, -0.6693965792655945], + [-0.16954028606414795, 4.914680004119873], + [3.464897871017456, 6.865409851074219], + [-1.8920049667358398, 1.6690312623977661], + [-4.064873218536377, 5.955648422241211], + [7.412397861480713, -2.351003408432007], + [-1.7529475688934326, -2.067079782485962], + [-4.119790554046631, -2.3690035343170166], + [-3.882126569747925, -2.2403643131256104], + [-3.5601189136505127, -2.086200475692749], + [-1.3387473821640015, 11.68610954284668], + [5.142942905426025, 8.086068153381348], + [0.5593639612197876, -7.710994243621826], + [-1.2635070085525513, 11.145269393920898], + [7.43583869934082, -4.534563064575195], + [-3.356355905532837, -3.2601778507232666], + [-1.2233302593231201, 11.181619644165039], + [0.19221314787864685, -4.4281768798828125], + [-0.6927009224891663, 10.873086929321289], + [0.7367474436759949, -9.31692123413086], + [3.0900168418884277, 6.543486595153809], + [2.399945020675659, 5.724602699279785], + [-0.7683550119400024, 1.3961923122406006], + [-3.956331491470337, -1.2670843601226807], + [0.7417064309120178, -9.238032341003418], + [2.32939076423645, 5.676230430603027], + [-1.3744466304779053, 11.970157623291016], + [3.8302299976348877, 7.131805896759033], + [0.7169304490089417, -7.645402908325195], + [-1.0074617862701416, 9.758731842041016], + [3.1734418869018555, -3.156672716140747], + [-3.712820291519165, -1.9377464056015015], + [1.623237133026123, 1.112648367881775], + [-3.226962089538574, -1.1181620359420776], + [1.120104432106018, -6.411124229431152], + [-4.509720325469971, 5.228753089904785], + [-5.099192142486572, 4.808576583862305], + [8.454386711120605, -2.560925245285034], + [-4.339888095855713, -2.5321831703186035], + [1.0337340831756592, 5.7498579025268555], + [-0.5485621094703674, 0.43836215138435364], + [2.5506279468536377, -4.179300308227539], + [-4.239744186401367, -1.4598833322525024], + [-2.5031793117523193, 2.674548387527466], + [1.6705445051193237, -5.356872081756592], + [2.8804478645324707, -4.841734886169434], + [-0.6372900605201721, -0.9969424605369568], + [1.4726842641830444, 5.116127967834473], + [2.63883376121521, -4.596771717071533], + [8.983335494995117, -2.7856810092926025], + [-5.170987606048584, 7.054658889770508], + [-1.1616994142532349, 10.482429504394531], + [-4.448177814483643, 4.5454864501953125], + [9.180951118469238, -2.7903263568878174], + [-5.557095050811768, 4.574466228485107], + [-0.2215876281261444, -1.8540992736816406], + [0.6169953942298889, 8.122318267822266], + [7.910670280456543, -2.7187862396240234], + [1.2732864618301392, 3.6266355514526367], + [0.4476654529571533, -4.928622245788574], + [5.702630519866943, -4.182476997375488], + [0.9994954466819763, -5.247260093688965], + [-3.24688720703125, -1.5051254034042358], + [-1.2704943418502808, 11.925602912902832], + [0.5342439413070679, -4.6056227684021], + [-3.4219954013824463, 4.792957305908203], + [-6.1408610343933105, 5.556151390075684], + [1.6387271881103516, -4.757612228393555], + [-3.06059193611145, -0.880086362361908], + [-1.9189019203186035, 0.7358518838882446], + [-3.414719343185425, -2.3254170417785645], + [-2.9243547916412354, -0.4562261700630188], + [6.972263813018799, -4.516616344451904], + [0.6944699287414551, -6.30433988571167], + [-3.3244547843933105, -1.7891075611114502], + [2.543623208999634, 5.132726192474365], + [2.697277069091797, -4.53438663482666], + [-1.2884438037872314, 11.41161060333252], + [-4.560657024383545, 4.522023677825928], + [0.25956612825393677, -6.336020469665527], + [0.7359851002693176, -8.892847061157227], + [-3.7303225994110107, 6.426591873168945], + [0.1276167631149292, -5.147724628448486], + [2.8086702823638916, -4.4376630783081055], + [-3.0524511337280273, 4.953541278839111], + [2.419593095779419, -4.762133598327637], + [6.612718105316162, -1.9504783153533936], + [2.3975484371185303, 6.470670700073242], + [8.4536771774292, -2.3827168941497803], + [-3.4585328102111816, -2.9067928791046143], + [-4.228607654571533, -0.7079617977142334], + [-0.2824031710624695, -1.714340090751648], + [2.68271803855896, -4.374717712402344], + [1.8465934991836548, 4.424998760223389], + [-1.0523508787155151, 9.780536651611328], + [-0.6357768177986145, 9.05811882019043], + [-3.382465362548828, -0.8393008708953857], + [-3.8501429557800293, -1.5124424695968628], + [0.49078983068466187, -6.8595991134643555], + [-0.5525973439216614, 0.5100065469741821], + [0.7069816589355469, -8.799283027648926], + [-2.028301477432251, 2.0044326782226562], + [-1.9686965942382812, 1.7762442827224731], + [-4.3522539138793945, -2.631211280822754], + [-1.2103209495544434, 11.015046119689941], + [-0.35279884934425354, -0.8578481674194336], + [2.8623557090759277, -4.6104512214660645], + [-1.7217543125152588, -1.111575722694397], + [1.3098044395446777, -4.251498699188232], + [-4.517444610595703, -3.1684536933898926], + [-4.476353168487549, -3.267704963684082], + [2.5668036937713623, 0.6893694400787354], + [1.9439878463745117, 2.612921714782715], + [0.6107210516929626, -7.4888529777526855], + [0.562813937664032, -8.010849952697754], + [-3.2369115352630615, -3.1498804092407227], + [-1.483115553855896, 12.230923652648926], + [-3.5816025733947754, -2.265345811843872], + [2.8503711223602295, -4.716068267822266], + [-3.6418089866638184, -1.0166287422180176], + [0.7944278120994568, -7.7309064865112305], + [-1.1248714923858643, -0.866306483745575], + [0.716087818145752, -4.570683002471924], + [0.8016321659088135, -0.2721143364906311], + [2.871135950088501, -4.5844502449035645], + [1.2888462543487549, 3.9470221996307373], + [1.866854190826416, 5.5697712898254395], + [2.7500243186950684, -4.459823131561279], + [-1.4684377908706665, 0.3479902744293213], + [-1.627542495727539, 1.3177839517593384], + [-3.32092022895813, -2.60846209526062], + [1.7315423488616943, -5.762796401977539], + [-1.6999293565750122, 2.030282497406006], + [2.57139253616333, 4.974452972412109], + [2.528285503387451, -4.377031326293945], + [5.34197473526001, 8.237019538879395], + [0.7226009964942932, -8.654552459716797], + [7.570884704589844, -3.738710641860962], + [0.3353725075721741, -5.463251113891602], + [-1.9871976375579834, 2.3372244834899902], + [1.9153552055358887, 0.695742666721344], + [2.8877904415130615, 6.135089874267578], + [2.6358602046966553, 5.664233684539795], + [0.5212215781211853, -7.073732852935791], + [-1.9853936433792114, 1.8949435949325562], + [6.042271137237549, -1.2992277145385742], + [-3.8791966438293457, -1.2685065269470215], + [4.265140533447266, 7.074190616607666], + [-4.614138126373291, 7.175498008728027], + [1.759079098701477, 3.8932902812957764], + [2.4416146278381348, -4.3940300941467285], + [-2.7760462760925293, 5.30571174621582], + [2.8487303256988525, -4.886082649230957], + [-1.9389851093292236, -0.48688945174217224], + [6.447264671325684, -1.3918124437332153], + [-0.09354562312364578, 0.18557582795619965], + [2.1317403316497803, -4.550689697265625], + [-3.0607714653015137, -2.7075765132904053], + [5.483767032623291, -3.7633697986602783], + [0.12947076559066772, 0.991977334022522], + [-3.7305538654327393, -1.642112374305725], + [2.370149612426758, -4.119436264038086], + [0.7054561376571655, -8.424816131591797], + [5.581149578094482, -1.2220994234085083], + [2.198474645614624, 4.621859550476074], + [7.181703567504883, -3.1159250736236572], + [-0.26198309659957886, 9.11075496673584], + [4.949014186859131, 7.9923200607299805], + [-3.3436782360076904, -0.7508514523506165], + [-4.319464206695557, 1.7285401821136475], + [1.1628081798553467, -3.023439645767212], + [4.586971282958984, 7.588818550109863], + [-3.681563377380371, 0.8477075695991516], + [-4.245148181915283, -2.2458183765411377], + [2.9459824562072754, -4.925394058227539], + [2.7498867511749268, -4.719821929931641], + [1.56831693649292, 2.7204301357269287], + [-1.1017491817474365, 10.090490341186523], + [0.42084723711013794, -7.699878215789795], + [2.000962018966675, 4.4581193923950195], + [-4.246203899383545, -0.54244065284729], + [2.412311315536499, 5.030734539031982], + [0.1922745704650879, 7.065220355987549], + [0.7032390236854553, -4.147747039794922], + [-1.1360020637512207, 10.275138854980469], + [-1.4201676845550537, 2.0199947357177734], + [5.517967700958252, -3.2067556381225586], + [-3.7275006771087646, -1.6920257806777954], + [6.70695686340332, -3.840888023376465], + [-5.123298645019531, -1.4401942491531372], + [1.7322429418563843, -3.7873482704162598], + [-3.176041603088379, -1.7424341440200806], + [-2.0227320194244385, 1.7282708883285522], + [-1.2900135517120361, 11.43397331237793], + [0.6862336993217468, -9.045669555664062], + [-3.0732877254486084, -0.8393408060073853], + [4.792786121368408, -1.4129282236099243], + [3.6642472743988037, 1.726545810699463], + [8.027153968811035, -2.6386096477508545], + [-0.2852942645549774, -1.5907570123672485], + [-1.575174331665039, 0.4364599585533142], + [0.2037310004234314, -3.6610867977142334], + [1.7120416164398193, 1.4863859415054321], + [-1.4437507390975952, 12.442911148071289], + [-2.8499906063079834, -0.7403106689453125], + [0.7192900776863098, -6.731873512268066], + [6.327983379364014, -5.290756702423096], + [1.7428933382034302, 2.090559720993042], + [6.529224872589111, -1.0279513597488403], + [-5.343912601470947, 5.429751396179199], + [1.992631435394287, -4.592469692230225], + [4.849553108215332, 7.731800079345703], + [-2.1454081535339355, 1.7762118577957153], + [-3.910787343978882, -2.3964061737060547], + [-3.9042556285858154, -1.9267483949661255], + [1.640380859375, 0.6878331899642944], + [-2.9511020183563232, -2.5892865657806396], + [-3.3664984703063965, -2.5513291358947754], + [-0.7613069415092468, -1.5365623235702515], + [-3.6222896575927734, -0.5104659199714661], + [8.154158592224121, -2.3826191425323486], + [-2.158818483352661, 2.116140842437744], + [0.556198239326477, -8.532876968383789], + [0.23908215761184692, -6.43848991394043], + [-0.28105998039245605, 9.228014945983887], + [7.036466598510742, -2.148820161819458], + [-1.0878803730010986, 11.20632553100586], + [-3.2690742015838623, -1.4727908372879028], + [-1.0581245422363281, 11.236618041992188], + [-1.1125307083129883, 10.944076538085938], + [-1.0059664249420166, 9.607767105102539], + [-0.3774084448814392, 9.66098403930664], + [0.8123367428779602, -9.190908432006836], + [-4.963892459869385, 6.032787322998047], + [-1.3107612133026123, 11.198620796203613], + [1.2364404201507568, -0.24440062046051025], + [0.8075953125953674, -7.251132488250732], + [-4.353977203369141, 6.129678726196289], + [-4.701625347137451, -1.0344456434249878], + [-2.020148515701294, -1.5621784925460815], + [-1.2715508937835693, 11.304762840270996], + [1.3749183416366577, 0.9189539551734924], + [-0.36541253328323364, 8.869967460632324], + [-5.278020858764648, 6.622448444366455], + [2.036210060119629, 1.1357181072235107], + [2.2284464836120605, 6.075747489929199], + [-0.8950350880622864, 11.102410316467285], + [0.5367268323898315, -7.928413391113281], + [0.6004142165184021, -8.338744163513184], + [-4.701634407043457, -3.4448952674865723], + [-1.8044317960739136, 1.2980862855911255], + [-1.5029942989349365, 12.367920875549316], + [2.723846673965454, -4.415606498718262], + [-1.7871019840240479, 2.2999589443206787], + [-2.735151529312134, -1.3730157613754272], + [2.001201868057251, 5.015681743621826], + [-0.6304524540901184, 10.23123550415039], + [-0.7584761381149292, -1.1724046468734741], + [0.3763032555580139, -6.064724922180176], + [-4.034238338470459, -1.3614000082015991], + [0.7686418890953064, -3.6158998012542725], + [-3.8699793815612793, -1.4013713598251343], + [-3.6338260173797607, 5.90444278717041], + [-4.687163829803467, -0.8069436550140381], + [3.1011838912963867, -5.181265354156494], + [-3.255164384841919, 5.259406089782715], + [-4.193521976470947, -2.8908817768096924], + [-1.0983119010925293, 10.310941696166992], + [0.4427489638328552, -6.489795684814453], + [3.454831838607788, 6.482104778289795], + [-0.5610045790672302, 6.969895362854004], + [1.4729905128479004, 3.1139862537384033], + [-3.1780431270599365, -0.8460698127746582], + [2.422525644302368, -5.413599967956543], + [3.831510305404663, -3.701279878616333], + [4.708864212036133, 7.644630432128906], + [1.3846091032028198, 5.071895599365234], + [0.5878023505210876, -7.8684797286987305], + [0.6574329733848572, -8.800995826721191], + [-2.88537335395813, -2.8159005641937256], + [-0.745629608631134, 10.068737030029297], + [-1.8905785083770752, 1.698397159576416], + [-3.9642369747161865, 5.651812553405762], + [5.678029537200928, -1.4877703189849854], + [8.251029968261719, -2.3788223266601562], + [-5.218847751617432, -4.396104335784912], + [-0.8136499524116516, 9.900857925415039], + [-3.485386610031128, 5.967264652252197], + [2.850341558456421, -4.442889213562012], + [-5.094562530517578, 7.063960075378418], + [-3.8710153102874756, -2.9370739459991455], + [2.698995590209961, 5.755976676940918], + [0.656669020652771, -5.139996528625488], + [-3.731623649597168, -0.881338894367218], + [-1.850692629814148, 0.7917965054512024], + [-1.859545350074768, 2.570352077484131], + [-4.869034290313721, 6.843019485473633], + [0.8585736155509949, -7.159609794616699], + [-1.1339776515960693, 11.797974586486816], + [-3.88039231300354, -2.7447519302368164], + [1.9387900829315186, 5.14628791809082], + [-3.830240488052368, 0.36806392669677734], + [0.7752540707588196, 4.928548812866211], + [-2.514866352081299, -1.5109909772872925], + [-1.2088022232055664, 11.153525352478027], + [2.6119728088378906, -4.733316898345947], + [-4.165771961212158, -3.032567024230957], + [2.941805601119995, -4.545513153076172], + [-4.163074493408203, -0.9262463450431824], + [7.762989521026611, -2.290433168411255], + [7.168907642364502, -2.2416114807128906], + [-1.3178545236587524, 11.272371292114258], + [0.4437364339828491, -7.503378391265869], + [-4.209270477294922, -4.362112045288086], + [-5.4601640701293945, 7.008796691894531], + [1.5051437616348267, 2.3077995777130127], + [-6.279569625854492, 8.293307304382324], + [3.082343816757202, -5.196828365325928], + [-3.0709285736083984, -0.6914633512496948], + [2.063525438308716, 5.437070846557617], + [8.552688598632812, -3.0144858360290527], + [-2.8969309329986572, 5.631900787353516], + [-0.13792097568511963, -1.2312091588974], + [2.8511016368865967, 6.2101311683654785], + [-2.910315752029419, -2.0977072715759277], + [-0.5100728869438171, 6.082390785217285], + [0.48470550775527954, 0.1542697250843048], + [0.7527639269828796, -7.798007488250732], + [-2.1062557697296143, 2.077955484390259], + [6.082142353057861, -1.438256025314331], + [8.397011756896973, -2.958523988723755], + [4.196549892425537, 7.279532432556152], + [0.38907116651535034, 3.822497606277466], + [-2.1735482215881348, 1.1787880659103394], + [2.1004421710968018, 0.7674423456192017], + [-3.2058355808258057, -1.2461167573928833], + [0.6394205689430237, -0.5081340074539185], + [-3.3924646377563477, 5.077427864074707], + [3.0711865425109863, -3.389827013015747], + [2.4684059619903564, 5.5008440017700195], + [-0.5824440717697144, 9.581809997558594], + [-0.480155885219574, 10.286039352416992], + [0.7077236771583557, -5.559195518493652], + [-4.160744667053223, -0.3939734697341919], + [-5.125133991241455, -0.8635450005531311], + [2.092261552810669, 5.044178485870361], + [-5.14213752746582, -3.942126512527466], + [-3.1314361095428467, -0.5081431269645691], + [0.6480622291564941, -8.263893127441406], + [3.35593581199646, 6.516314506530762], + [1.0360167026519775, 0.2181808352470398], + [2.5337698459625244, 4.005831718444824], + [0.4350860118865967, -6.719525337219238], + [-3.586303472518921, 5.055536270141602], + [-3.6772420406341553, -1.9361732006072998], + [2.1018288135528564, 3.9282491207122803], + [-1.6249074935913086, 2.3083255290985107], + [0.6112435460090637, -7.56800651550293], + [-1.6826043128967285, 1.5953668355941772], + [-6.165107727050781, 4.505618095397949], + [0.41965460777282715, -4.934103488922119], + [1.2618223428726196, -0.12285839021205902], + [1.4985564947128296, 2.331989049911499], + [0.22552627325057983, -6.755959987640381], + [2.3047964572906494, 5.593369007110596], + [1.5930966138839722, 2.0476574897766113], + [0.5961945652961731, -7.763288497924805], + [2.191817045211792, 5.216484069824219], + [1.421360969543457, 5.248760223388672], + [-0.8882554173469543, 9.902992248535156], + [-4.792508602142334, 6.703642845153809], + [9.18561840057373, -2.8196043968200684], + [-3.310246229171753, -1.2391587495803833], + [2.4632513523101807, -4.4334001541137695], + [1.812070608139038, -5.0685906410217285], + [6.301777362823486, -3.3495595455169678], + [1.0687782764434814, -4.939783096313477], + [-1.801211953163147, 0.9740042686462402], + [0.28555411100387573, -5.880225658416748], + [-3.392329454421997, -2.077471971511841], + [-3.473816156387329, 3.5280866622924805], + [8.237860679626465, -2.380932331085205], + [7.07711935043335, -2.390589714050293], + [6.08383321762085, -1.259614109992981], + [2.5198309421539307, 5.447314262390137], + [1.0894310474395752, 2.7088522911071777], + [-0.6286344528198242, 10.304460525512695], + [-2.402024030685425, -1.1658846139907837], + [-0.5089413523674011, 9.8341064453125], + [-4.123347759246826, -0.9700908660888672], + [2.7744336128234863, -4.58500337600708], + [-3.1654839515686035, -1.3457564115524292], + [-0.9172059893608093, 10.785329818725586], + [2.8300118446350098, -4.433427333831787], + [-0.7072073817253113, 10.750423431396484], + [-4.836048126220703, 6.8356733322143555], + [0.8254315257072449, -5.114388465881348], + [1.823103427886963, 5.64838981628418], + [-3.417645215988159, -1.0228265523910522], + [2.050858736038208, -5.945507049560547], + [-2.1962904930114746, 2.740755319595337], + [-1.300297737121582, 10.981538772583008], + [8.592179298400879, -3.269454002380371], + [-0.7654427886009216, 10.148902893066406], + [7.265251636505127, -1.9862730503082275], + [2.167287826538086, 5.993924617767334], + [-0.2579169273376465, 8.87488079071045], + [-0.6671027541160583, 9.406758308410645], + [-3.865950345993042, -0.9249098300933838], + [-3.2229621410369873, -2.148275852203369], + [-0.7669183611869812, 10.175180435180664], + [-5.3877058029174805, 6.536599159240723], + [1.4483304023742676, 5.635201454162598], + [-4.9202961921691895, 5.30647611618042], + [-1.8990440368652344, -1.4134408235549927], + [-1.610560655593872, 0.6887295246124268], + [7.49229097366333, -2.558229684829712], + [2.111499309539795, -4.624810695648193], + [-4.807255268096924, -0.3372100591659546], + [6.410274028778076, -1.695853590965271], + [2.499168634414673, -4.640465259552002], + [-1.8868327140808105, -1.3694825172424316], + [-0.29169440269470215, 5.277329444885254], + [1.5371367931365967, -4.091512680053711], + [0.621986985206604, -8.39337158203125], + [6.767919063568115, -1.9327495098114014], + [-1.5075234174728394, 1.821810007095337], + [-0.6073081493377686, 9.658775329589844], + [1.3394126892089844, 5.567228317260742], + [0.40646958351135254, -7.743126392364502], + [-2.5019171237945557, 2.5752532482147217], + [0.47416430711746216, -6.711352348327637], + [7.39935827255249, -2.187889814376831], + [-5.008733749389648, 6.920893669128418], + [-0.8060479760169983, 10.180440902709961], + [0.8620837926864624, -7.175013542175293], + [1.1254348754882812, -4.188996315002441], + [-1.0798943042755127, -2.352947235107422], + [1.945681095123291, 5.273288726806641], + [-4.424184322357178, -2.0837764739990234], + [0.2666935920715332, -5.4441680908203125], + [0.29699236154556274, -5.146864414215088], + [8.992924690246582, -2.7792046070098877], + [0.7473810911178589, -7.869687557220459], + [6.455483436584473, -2.021238327026367], + [-0.8733026385307312, 10.825958251953125], + [0.42626744508743286, -5.548964023590088], + [8.07362174987793, -2.5204737186431885], + [-3.8536388874053955, 5.598123073577881], + [2.6389575004577637, 5.394585609436035], + [2.899493932723999, -4.922621726989746], + [-1.9960201978683472, 1.1220436096191406], + [5.585384845733643, 8.569724082946777], + [3.8435232639312744, 7.2338361740112305], + [6.1952362060546875, -3.8041813373565674], + [-1.1662116050720215, 10.519618034362793], + [-3.6326472759246826, -2.4131884574890137], + [-1.4429004192352295, 11.79478931427002], + [0.5115493535995483, -7.717853546142578], + [0.08717607706785202, -5.136340141296387], + [2.176699638366699, 5.890902042388916], + [-4.120547771453857, -0.8766695857048035], + [-0.9194532036781311, 11.688819885253906], + [0.5809746980667114, -1.0249508619308472], + [3.2187280654907227, -4.966375350952148], + [-3.4683732986450195, -1.6644963026046753], + [5.561426639556885, -2.692436933517456], + [7.957296848297119, -2.465275764465332], + [-0.8779056668281555, 10.990913391113281], + [-1.7266377210617065, 1.8720256090164185], + [-6.013095378875732, -0.9908056855201721], + [-4.024090766906738, -0.6828511953353882], + [0.17069950699806213, -1.0451691150665283], + [3.1426241397857666, 6.652920722961426], + [3.194995164871216, -5.235639572143555], + [-3.170866012573242, -1.3397594690322876], + [1.394486665725708, -5.7209672927856445], + [-0.09298787266016006, -0.6087208986282349], + [-0.9628235697746277, 9.452767372131348], + [-0.5426737070083618, -1.6264961957931519], + [-3.6798665523529053, -1.1699942350387573], + [-3.625783681869507, -1.9930810928344727], + [0.7595455050468445, -6.952198028564453], + [1.4523868560791016, -4.84194803237915], + [-3.473879098892212, -1.3945835828781128], + [-0.9207105040550232, -1.978040099143982], + [-0.437477707862854, 9.833352088928223], + [-0.33939826488494873, -0.8382846117019653], + [0.6633802652359009, -5.206966400146484], + [-2.736459493637085, -1.1829534769058228], + [-3.53354811668396, -1.570988655090332], + [-1.1795310974121094, 1.8560054302215576], + [-4.682870864868164, -1.2830016613006592], + [-3.4339561462402344, -0.9831602573394775], + [-4.913715362548828, -0.8349972367286682], + [-5.000855445861816, -1.5981581211090088], + [-3.5317587852478027, -1.905157446861267], + [6.879420280456543, -4.963196754455566], + [-1.9631435871124268, 2.1785051822662354], + [2.5361545085906982, -4.911889553070068], + [-3.391352891921997, -1.2017394304275513], + [0.6358139514923096, -7.469141960144043], + [1.9327428340911865, 6.106612682342529], + [-1.8668498992919922, 1.1087031364440918], + [1.9242124557495117, 0.37104693055152893], + [4.217073440551758, 7.235591888427734], + [1.2534751892089844, -0.23663991689682007], + [0.8743135333061218, -4.780941009521484], + [-0.37958961725234985, -0.6975690722465515], + [-5.204625606536865, -1.0524026155471802], + [8.743979454040527, -2.9652152061462402], + [-3.4033730030059814, -0.9582712650299072], + [-1.2217739820480347, 10.789807319641113], + [1.5210118293762207, 1.9442919492721558], + [-0.7471476793289185, 10.983009338378906], + [2.6460814476013184, -4.636442184448242], + [4.989480495452881, -4.564346790313721], + [-3.5335705280303955, -3.1632046699523926], + [2.1072146892547607, -4.7833051681518555], + [2.2042019367218018, -5.154167175292969], + [-2.573957920074463, 4.7117791175842285], + [4.811269760131836, -3.7886455059051514], + [-5.139238357543945, 4.6163740158081055], + [-3.8356449604034424, -1.96199631690979], + [1.7909314632415771, 0.3593449890613556], + [-0.2620009183883667, -1.502767562866211], + [2.137639284133911, -4.547356605529785], + [-3.72832989692688, -3.0134665966033936], + [0.7513290047645569, -8.694777488708496], + [1.8360052108764648, 1.2211612462997437], + [1.7914173603057861, -4.54992151260376], + [4.309455394744873, 7.237936973571777], + [7.802323818206787, -2.255122184753418], + [5.773146152496338, -2.5490927696228027], + [-5.247792720794678, -2.2939443588256836], + [0.3331972360610962, -6.528747081756592], + [7.835642337799072, -2.2567026615142822], + [-0.9422724843025208, 11.009855270385742], + [-5.14096212387085, 4.502711296081543], + [2.6343233585357666, -4.87815523147583], + [6.23958158493042, -4.660348892211914], + [-3.509359121322632, -1.1703264713287354], + [-1.8604631423950195, 0.9408267736434937], + [0.6862416863441467, -8.256990432739258], + [2.72029709815979, -4.524909019470215], + [-3.219297409057617, -2.1612327098846436], + [7.148716926574707, -2.0710957050323486], + [2.1880698204040527, 4.434604167938232], + [-4.610987186431885, 7.343994140625], + [-3.967468023300171, -0.9230735301971436], + [-0.7742733359336853, 10.029205322265625], + [-2.7299444675445557, 2.9392356872558594], + [2.307913064956665, -4.233321666717529], + [-0.27126336097717285, 8.769547462463379], + [3.208904504776001, 6.298178672790527], + [2.497420310974121, 5.99057674407959], + [6.907132148742676, -1.940496563911438], + [2.763585090637207, -4.6286492347717285], + [8.37450122833252, -2.503009557723999], + [2.7083513736724854, -4.864980697631836], + [0.6839733719825745, -4.850569248199463], + [-3.277926206588745, -1.0572140216827393], + [-3.368741512298584, -1.5635706186294556], + [7.215761184692383, -2.9122402667999268], + [-1.866828203201294, 1.5876438617706299], + [0.2467615008354187, -5.734621047973633], + [0.5656514763832092, -0.8454714417457581], + [-4.392139434814453, 6.474267959594727], + [0.5479980111122131, -7.40242862701416], + [-1.6855347156524658, 0.4537771940231323], + [4.00595235824585, 7.180675506591797], + [8.8429536819458, -2.6201682090759277], + [-0.35954391956329346, 8.55715274810791], + [-0.5669976472854614, 9.386398315429688], + [-5.728211402893066, 7.655385971069336], + [2.5140793323516846, -4.456965446472168], + [-3.51396107673645, -2.7111518383026123], + [2.311438798904419, 0.8858503699302673], + [-0.6289861798286438, 8.659443855285645], + [-2.1074719429016113, -1.91874361038208], + [0.8879892230033875, -6.696268558502197], + [-5.0909600257873535, 7.199853420257568], + [-0.6837894320487976, 10.274568557739258], + [6.306847095489502, -1.5347980260849], + [4.492640018463135, -0.7944809794425964], + [-3.338042974472046, -1.3116029500961304], + [7.231287479400635, -3.4661924839019775], + [0.10949524492025375, -1.1661676168441772], + [-1.1864514350891113, 10.963151931762695], + [-4.124938488006592, 6.369041442871094], + [7.647751331329346, -2.7114739418029785], + [8.043500900268555, -2.2960851192474365], + [0.27089548110961914, -6.686824798583984], + [-4.611056804656982, -0.32286787033081055], + [7.511028289794922, -2.4037044048309326], + [9.075697898864746, -2.733842611312866], + [0.4781419038772583, -5.645027160644531], + [-2.480440139770508, 2.6861417293548584], + [1.2400891780853271, -7.437967777252197], + [0.07986795157194138, -5.330780029296875], + [1.6063963174819946, -5.7564826011657715], + [-4.556196689605713, -0.7213870286941528], + [2.938101053237915, -4.458889961242676], + [0.5885438919067383, -6.447159767150879], + [-0.6802448034286499, 8.914321899414062], + [-1.6929347515106201, 2.0900819301605225], + [-1.863961935043335, 1.5100038051605225], + [2.7811734676361084, -4.553083419799805], + [2.6304571628570557, -5.579485893249512], + [-1.9942057132720947, 1.6591421365737915], + [8.235566139221191, -2.799750566482544], + [-5.351132392883301, -1.050331711769104], + [1.748205304145813, 0.3177773356437683], + [7.1399641036987305, -2.2087528705596924], + [2.9850339889526367, -4.936483383178711], + [0.290904700756073, -6.662753582000732], + [-3.8484296798706055, -0.9591827988624573], + [9.876358985900879, -2.921226739883423], + [-2.812553644180298, -1.8638904094696045], + [-4.709871292114258, 4.84136962890625], + [0.7032939791679382, -9.345489501953125], + [4.159350872039795, 6.8703765869140625], + [-3.294705390930176, -2.2125837802886963], + [-2.3424391746520996, 2.353487491607666], + [-3.754232168197632, -1.0895198583602905], + [-1.861628770828247, -1.950315237045288], + [-3.452347755432129, -1.0936089754104614], + [6.374073028564453, -2.439035654067993], + [-3.198272943496704, -0.18696719408035278], + [0.8058762550354004, -6.795384407043457], + [2.7417373657226562, -4.343575477600098], + [1.526257872581482, 2.103837251663208], + [0.0019534453749656677, -1.6358835697174072], + [-3.1240200996398926, 3.418534517288208], + [3.0550246238708496, -4.218122482299805], + [-2.830054998397827, 2.768540620803833], + [-2.049943208694458, -3.834970235824585], + [0.8615529537200928, -5.052130699157715], + [-2.1640448570251465, 1.3492770195007324], + [1.3492519855499268, -4.838523864746094], + [0.7828043103218079, -9.680479049682617], + [-4.9390177726745605, -3.689642906188965], + [-3.7208168506622314, 5.482546806335449], + [-0.9957649111747742, -1.8401468992233276], + [0.6859006285667419, -8.34184455871582], + [-1.8595746755599976, 0.8175936937332153], + [0.8359563946723938, -5.951000213623047], + [-0.6278986930847168, 7.806671619415283], + [-0.6355380415916443, 10.254823684692383], + [-3.675734043121338, 5.54904842376709], + [1.0333549976348877, -5.396356582641602], + [-5.24193000793457, 5.9472551345825195], + [-3.5091183185577393, -1.0328073501586914], + [-3.671658515930176, 6.140560150146484], + [2.6600706577301025, -4.268061637878418], + [3.1191294193267822, 6.3900580406188965], + [1.9521052837371826, -3.7450008392333984], + [-4.317195415496826, -0.011878881603479385], + [0.4800165295600891, -6.195363998413086], + [0.5136575698852539, -5.115568161010742], + [0.3599628806114197, -6.6604390144348145], + [3.842581033706665, 6.9112114906311035], + [-4.770742893218994, 0.23731762170791626], + [1.621262788772583, 5.462344169616699], + [-3.8944032192230225, -1.2793349027633667], + [-1.1698392629623413, 11.137224197387695], + [0.09725413471460342, -0.815030038356781], + [-2.6545796394348145, -2.1810574531555176], + [-1.7703180313110352, 1.7353030443191528], + [-2.217952251434326, -1.4720382690429688], + [1.4310137033462524, 0.10186479985713959], + [-4.300632476806641, -3.184480667114258], + [-5.968089580535889, -1.0965598821640015], + [-1.5002362728118896, 12.444610595703125], + [-3.119804620742798, -2.0882978439331055], + [-3.586076498031616, -2.3283193111419678], + [-0.7689458727836609, 10.14101505279541], + [-0.8658162951469421, 10.304271697998047], + [-1.2514046430587769, 11.44921588897705], + [0.5440828204154968, -7.8120856285095215], + [0.7509731650352478, -9.19067096710205], + [-3.933351993560791, 6.300990104675293], + [-0.10554654151201248, 8.354866027832031], + [-3.1277103424072266, -1.2586374282836914], + [2.2869651317596436, 5.823616981506348], + [-1.895434856414795, 1.7975001335144043], + [1.348941445350647, 0.007303740829229355], + [-3.6258461475372314, -3.178520441055298], + [-1.935638189315796, 1.4073822498321533], + [-4.017697811126709, -1.9072729349136353], + [-5.175127029418945, 5.075835227966309], + [1.2440478801727295, -3.4355413913726807], + [6.86043119430542, -4.379561424255371], + [-0.9296467900276184, -1.4359216690063477], + [2.9214112758636475, 0.8909422159194946], + [5.642365455627441, -2.57145619392395], + [-1.099761962890625, -0.5985273122787476], + [0.39970993995666504, -6.261449813842773], + [1.4978954792022705, 0.1531074345111847], + [8.41085147857666, -2.3951666355133057], + [0.33438384532928467, -6.3133087158203125], + [-0.01869381219148636, -1.2516720294952393], + [5.674067497253418, -1.9772480726242065], + [-2.4586641788482666, -0.6001273393630981], + [1.6529133319854736, 1.7649625539779663], + [9.397862434387207, -2.9287593364715576], + [-3.521226167678833, -0.6739411354064941], + [1.8578705787658691, 6.010868072509766], + [-5.180716037750244, 4.967705249786377], + [-0.05620405822992325, -3.6814520359039307], + [5.665309429168701, -1.8564096689224243], + [0.22862741351127625, -5.428589344024658], + [0.683303713798523, -8.651375770568848], + [2.71307635307312, -4.494106292724609], + [0.3904736638069153, -6.6448564529418945], + [-1.8879728317260742, 2.145573854446411], + [-0.6785756945610046, 9.992091178894043], + [-4.942568778991699, 5.688784599304199], + [2.729828357696533, 5.802748680114746], + [0.37457507848739624, -6.802949905395508], + [3.947293519973755, -4.323650360107422], + [-3.846081018447876, -1.931789755821228], + [0.5987003445625305, -0.1995108276605606], + [-1.4774680137634277, 12.511062622070312], + [-3.250971555709839, -0.873227596282959], + [-1.2322931289672852, 10.43244743347168], + [-0.6661664843559265, 10.23348617553711], + [-4.081019878387451, -4.196028232574463], + [-0.28997913002967834, -1.2845696210861206], + [3.0286824703216553, 6.811929225921631], + [-1.299904465675354, 11.594464302062988], + [1.6463053226470947, 2.2842462062835693], + [0.057237230241298676, -3.130624532699585], + [-3.8060333728790283, -2.057997703552246], + [2.2645037174224854, 7.217008590698242], + [-4.240751266479492, -2.897803544998169], + [3.7156381607055664, 6.686895370483398], + [1.0343735218048096, -5.8382415771484375], + [6.546165466308594, -1.295236587524414], + [1.580389142036438, 1.7972224950790405], + [-4.17804479598999, -2.848222494125366], + [8.677878379821777, -2.64216947555542], + [0.3501068949699402, -3.4251315593719482], + [-0.2167166769504547, -1.3141323328018188], + [-3.640338182449341, -2.9983298778533936], + [-5.453599452972412, 6.664435386657715], + [1.0252723693847656, -5.56303071975708], + [-1.615289330482483, 0.6718838214874268], + [-5.108266353607178, 7.749978542327881], + [-3.7441890239715576, -1.4113131761550903], + [-3.614610433578491, 4.039955139160156], + [0.6697681546211243, -6.777442932128906], + [-1.8034995794296265, 2.0746607780456543], + [6.189909934997559, -2.8651633262634277], + [3.598822832107544, 2.1313769817352295], + [-5.158207416534424, 6.875167369842529], + [-3.405313730239868, -2.6293585300445557], + [-1.9443777799606323, 1.7189911603927612], + [5.046583652496338, -1.2283633947372437], + [-0.3842465877532959, 4.114999771118164], + [-0.024735964834690094, -4.713202476501465], + [7.6449456214904785, -2.55656099319458], + [-2.8381431102752686, 2.5493361949920654], + [-3.4972691535949707, -1.8552974462509155], + [8.792290687561035, -2.729593515396118], + [-2.3203625679016113, 5.822445392608643], + [-5.145186424255371, 6.949828147888184], + [-0.6143881678581238, -0.971126139163971], + [6.408349514007568, -4.041245937347412], + [1.3428442478179932, 0.23052960634231567], + [1.5945117473602295, 4.704617500305176], + [-2.469026803970337, 2.361159563064575], + [-3.5436699390411377, -0.9954898357391357], + [-0.07233875244855881, -0.7321277856826782], + [-5.418339252471924, 4.410329818725586], + [6.543945789337158, -2.0302112102508545], + [0.7785007953643799, -6.3351922035217285], + [-1.8049157857894897, -0.46919554471969604], + [0.7393905520439148, -7.719803810119629], + [-0.27189844846725464, 9.16496467590332], + [-4.587479591369629, 6.055575370788574], + [-1.6321200132369995, -3.689457654953003], + [0.43834471702575684, -7.990664958953857], + [5.760766506195068, -4.608737468719482], + [7.927182674407959, -2.8586580753326416], + [-3.9902918338775635, -0.7309111952781677], + [-5.311136722564697, 6.477987766265869], + [-2.523420810699463, 2.481330394744873], + [6.825249671936035, -2.0041964054107666], + [-1.1338982582092285, 11.247674942016602], + [-4.831122875213623, 6.26085901260376], + [-0.6507381796836853, -1.4017904996871948], + [5.200409889221191, -3.6412289142608643], + [-3.81897234916687, -0.8490014672279358], + [-2.2785112857818604, 0.22809427976608276], + [-5.44492244720459, -1.5086746215820312], + [2.0424916744232178, 3.550995111465454], + [-1.9421778917312622, -0.09551280736923218], + [-3.8810153007507324, -1.4904502630233765], + [2.7837631702423096, -4.6882734298706055], + [-0.493378221988678, -1.3378018140792847], + [-2.9712724685668945, 5.73160982131958], + [-4.549632549285889, 4.02293586730957], + [-3.78600811958313, -3.178372621536255], + [6.459467887878418, -3.4552009105682373], + [6.876373291015625, -2.5431010723114014], + [-0.18194180727005005, 8.90944766998291], + [-3.3350942134857178, -1.0449118614196777], + [2.1983885765075684, 4.592123508453369], + [0.703066349029541, -4.9093170166015625], + [-4.9558210372924805, -1.0545567274093628], + [7.717593669891357, -2.2617244720458984], + [-3.9172022342681885, -1.6380800008773804], + [0.7357051372528076, 7.205831527709961], + [-1.3658896684646606, 11.4805326461792], + [0.5496889352798462, -7.060031890869141], + [4.610635757446289, -0.6845515966415405], + [-1.2680470943450928, 11.218853950500488], + [-5.199211120605469, 6.7165069580078125], + [-3.35071063041687, -1.1880550384521484], + [-3.8416342735290527, -2.1708567142486572], + [1.957329511642456, 4.768566131591797], + [-5.380624294281006, 7.120373725891113], + [-1.900812029838562, 2.118673086166382], + [2.295466184616089, -6.830476760864258], + [-4.176007270812988, -1.5500556230545044], + [-3.7693331241607666, 0.7718484997749329], + [-0.04356444627046585, -4.784237861633301], + [-3.6219639778137207, 5.6127705574035645], + [0.5322512984275818, -0.5734288692474365], + [-2.8427412509918213, 3.549360513687134], + [-2.1118321418762207, 1.2694135904312134], + [-1.248703956604004, -3.231370687484741], + [-5.036745071411133, 3.3124921321868896], + [2.868248224258423, -4.51775598526001], + [-0.25943583250045776, 9.206995964050293], + [1.4896574020385742, 1.6996163129806519], + [-1.9152498245239258, 2.0128138065338135], + [-5.330342769622803, 6.520029067993164], + [-2.1075708866119385, 1.831634283065796], + [-3.7752559185028076, -1.0760421752929688], + [-1.3385475873947144, 11.543389320373535], + [-4.97666597366333, -1.5020674467086792], + [-3.8846278190612793, -1.6146646738052368], + [5.576903820037842, -2.3144562244415283], + [-3.179562568664551, -1.189274787902832], + [-1.9117820262908936, 1.7608392238616943], + [-2.0313656330108643, -2.1881771087646484], + [-3.4199435710906982, -0.7258833050727844], + [0.3858415484428406, -6.524641990661621], + [-2.7750744819641113, -1.081093430519104], + [-0.8041045665740967, 10.56141185760498], + [-1.9407179355621338, 2.0987021923065186], + [-0.7398120760917664, -1.3502823114395142], + [0.4697778820991516, -7.20271110534668], + [5.754316806793213, 8.545747756958008], + [-4.358214855194092, -4.346743583679199], + [1.0904179811477661, 4.0856146812438965], + [0.5542268753051758, -7.044325828552246], + [2.7818167209625244, -4.860589981079102], + [-4.602281093597412, 5.288056373596191], + [2.812171697616577, -4.452386856079102], + [-3.8209621906280518, 4.930111885070801], + [0.9620148539543152, -4.764888763427734], + [-0.9895545244216919, -1.2028769254684448], + [-4.626953601837158, 5.763643264770508], + [-0.33596736192703247, 8.011104583740234], + [-1.5796159505844116, 0.6556706428527832], + [9.913912773132324, -2.957003355026245], + [-1.1334633827209473, 0.8688733577728271], + [-2.8060262203216553, -0.7534642219543457], + [-1.1060423851013184, 10.657678604125977], + [-5.105251312255859, 4.591439247131348], + [-0.7831726670265198, 10.28111457824707], + [2.6339364051818848, -4.155982971191406], + [0.1238965317606926, -5.638762474060059], + [1.4461791515350342, 5.644487380981445], + [7.229984283447266, -2.138150215148926], + [7.681735992431641, -3.9151532649993896], + [-3.6565306186676025, -0.7643072009086609], + [2.143253803253174, -4.062458038330078], + [6.498276710510254, -1.3156360387802124], + [-3.892698049545288, 5.851299285888672], + [-1.803329586982727, 0.6111032962799072], + [2.115607976913452, -3.602370500564575], + [-3.5130674839019775, -1.8114017248153687], + [-0.5704162120819092, 9.222169876098633], + [2.7113869190216064, -4.383805751800537], + [-0.5550830960273743, 9.884662628173828], + [-5.816311836242676, 7.539963245391846], + [-3.72758412361145, -2.877041816711426], + [6.046815872192383, -2.912353277206421], + [1.727172613143921, 2.2653145790100098], + [0.055387936532497406, -1.0661492347717285], + [-4.044768333435059, -2.5305123329162598], + [-0.2539137005805969, 7.44090461730957], + [-2.9747817516326904, -1.7195576429367065], + [0.6006003618240356, -3.613375425338745], + [-2.1819896697998047, -1.623003363609314], + [-1.8759984970092773, 1.7222625017166138], + [-4.966978549957275, -1.0012935400009155], + [-0.904182493686676, -0.3327655792236328], + [3.9393885135650635, 7.202021598815918], + [2.6222403049468994, -5.033691883087158], + [2.6744749546051025, 0.506816029548645], + [-3.253669261932373, -1.649972677230835], + [8.5164155960083, -2.8339812755584717], + [-2.905478000640869, -1.2785677909851074], + [6.847529411315918, -1.8433815240859985], + [-1.3415956497192383, 1.2498371601104736], + [-3.6748251914978027, -1.2744351625442505], + [0.7947136163711548, -5.85446834564209], + [-0.3015201687812805, -2.001023054122925], + [2.6011338233947754, -5.361710548400879], + [-3.620762348175049, 5.593303680419922], + [1.0691795349121094, 2.074594736099243], + [1.749390721321106, -3.6529436111450195], + [2.7318427562713623, -4.743722915649414], + [1.0128395557403564, -0.06945216655731201], + [-2.64896297454834, 2.3414359092712402], + [-0.9266670942306519, 1.2864760160446167], + [0.5495120882987976, -7.425026893615723], + [-1.359688639640808, 11.606942176818848], + [-3.7477149963378906, -1.8069380521774292], + [1.653494119644165, -4.581475734710693], + [4.259220600128174, 0.3342844545841217], + [1.3009477853775024, -0.23518545925617218], + [-1.7120850086212158, 0.4668816328048706], + [-0.22208631038665771, -1.7461539506912231], + [2.4314420223236084, -4.41389274597168], + [-0.43810027837753296, 9.957319259643555], + [0.4465411305427551, -3.8543646335601807], + [-3.6067564487457275, -2.0300841331481934], + [-5.224613666534424, 5.683551788330078], + [-5.010990142822266, 4.034869194030762], + [0.10779591649770737, -5.01411247253418], + [0.7855492234230042, -8.55806827545166], + [0.08731775730848312, -1.0522810220718384], + [-1.2020530700683594, 10.084994316101074], + [-4.9182353019714355, 7.156615257263184], + [0.507313072681427, -7.366054534912109], + [8.306675910949707, -2.9616878032684326], + [-0.8517471551895142, -1.376643419265747], + [0.7304819226264954, -6.31072473526001], + [2.277618169784546, 5.940110206604004], + [-0.7700269818305969, 9.820960998535156], + [2.342519998550415, 3.7240662574768066], + [7.985528469085693, -2.3945553302764893], + [-3.7266743183135986, -1.4380196332931519], + [0.4522510766983032, -5.095115661621094], + [-5.352197647094727, 4.988380432128906], + [-0.774152398109436, 0.929923415184021], + [-3.628450632095337, -1.9840242862701416], + [-4.296837329864502, 5.047205924987793], + [9.25655746459961, -2.789088487625122], + [-0.4828519821166992, 9.164884567260742], + [-3.743840456008911, -1.0876446962356567], + [-4.804848670959473, -1.5786112546920776], + [2.244208812713623, 5.369108200073242], + [1.1763525009155273, -6.564256191253662], + [-1.2736904621124268, 10.971531867980957], + [7.815488815307617, -2.6113786697387695], + [0.231855571269989, -5.663150310516357], + [7.08413553237915, -3.5288939476013184], + [-5.2652997970581055, 6.053548812866211], + [-4.957046031951904, 5.644919395446777], + [5.033136367797852, -5.966711044311523], + [1.2196550369262695, -4.311405181884766], + [-3.848022699356079, -1.7759709358215332], + [-0.6400284767150879, -3.0216004848480225], + [1.946333408355713, -4.572665691375732], + [-3.225837469100952, 3.648225784301758], + [-4.272330284118652, 4.352488994598389], + [-1.148616075515747, 9.752765655517578], + [-1.9615042209625244, 0.27012354135513306], + [-1.9693387746810913, 1.510248064994812], + [7.482094764709473, -2.635781764984131], + [0.4436914920806885, -4.910763740539551], + [0.6331794261932373, -7.9679951667785645], + [-3.261723279953003, -0.829176664352417], + [-4.1801862716674805, 6.585752487182617], + [7.549041271209717, -2.741928815841675], + [0.3556508421897888, -0.2847781479358673], + [0.3450656533241272, -7.117359638214111], + [0.5185292363166809, -8.365133285522461], + [1.7229889631271362, 3.451573610305786], + [-4.326275825500488, 6.574109077453613], + [3.4911530017852783, 6.555986404418945], + [-0.5305550694465637, 9.69860553741455], + [-3.7413227558135986, -1.8010720014572144], + [-1.969582200050354, 2.0036096572875977], + [-2.0706088542938232, 1.745374321937561], + [2.3702540397644043, -4.74063777923584], + [2.6646981239318848, -4.411953449249268], + [7.225822925567627, -2.349923849105835], + [0.33764219284057617, -6.004518508911133], + [-1.577991008758545, 1.5282166004180908], + [0.6475786566734314, -5.802584648132324], + [0.4380301833152771, -6.7246503829956055], + [-2.3187973499298096, 4.2158308029174805], + [-4.405901908874512, -1.3588308095932007], + [-3.3656833171844482, -2.4176597595214844], + [-4.179956436157227, -3.0905840396881104], + [2.667593240737915, -5.028266429901123], + [2.9396471977233887, -4.998023986816406], + [-3.7726030349731445, -0.9101424813270569], + [6.722296714782715, -3.0651473999023438], + [0.6162974834442139, -4.099724292755127], + [2.2044308185577393, 0.8383881449699402], + [-1.0040708780288696, 10.409990310668945], + [0.8003328442573547, 0.3182995021343231], + [0.5478776097297668, -7.904123306274414], + [1.7712470293045044, 4.7406158447265625], + [-5.834179401397705, -0.8846009373664856], + [-3.0920519828796387, -0.9806830286979675], + [-2.795254945755005, -1.0675528049468994], + [0.22769016027450562, -6.126685619354248], + [0.4399745464324951, -7.123173713684082], + [1.4349710941314697, 3.75287127494812], + [8.37180233001709, -2.8503713607788086], + [-0.8665195107460022, 10.544151306152344], + [9.303333282470703, -2.8592793941497803], + [0.09610279649496078, -5.4365997314453125], + [1.5330263376235962, 5.154246807098389], + [1.9552958011627197, 5.399930477142334], + [-0.7780944108963013, 9.96816349029541], + [-5.090542316436768, -1.477450966835022], + [0.9954141974449158, -0.442372590303421], + [-3.5668766498565674, -1.2625007629394531], + [-2.730409622192383, -0.989091157913208], + [-3.539968252182007, -2.1949703693389893], + [2.5034286975860596, 6.174541473388672], + [0.02921273559331894, -4.549034118652344], + [0.7591531872749329, -0.6850113868713379], + [-1.9168567657470703, 2.224090814590454], + [0.006784670054912567, 8.669696807861328], + [-5.051852703094482, 6.617407321929932], + [-0.6876221299171448, 9.833930969238281], + [2.7350943088531494, 6.732779502868652], + [-0.07445356994867325, -0.7317215800285339], + [0.7726325392723083, -7.216621398925781], + [-5.739039897918701, 4.739696979522705], + [-6.344686985015869, 8.276735305786133], + [-0.8452420830726624, 5.622588634490967], + [-3.2798144817352295, -1.150420069694519], + [-4.316329002380371, -2.8166496753692627], + [-2.404167413711548, -0.6645294427871704], + [6.610641002655029, -2.7676446437835693], + [6.325589179992676, -1.1981260776519775], + [0.6378195881843567, -5.772645473480225], + [-5.389208793640137, -0.9106300473213196], + [-4.5850419998168945, -1.5992711782455444], + [-2.095778465270996, 2.2880728244781494], + [1.909369707107544, 5.048720836639404], + [6.464698314666748, -1.1437045335769653], + [7.778335094451904, -3.6675708293914795], + [4.394857883453369, 7.116683006286621], + [1.0099493265151978, -0.2920759618282318], + [6.9694671630859375, -2.7162516117095947], + [-3.516352653503418, 3.0319836139678955], + [2.767897844314575, -4.303877353668213], + [-4.209909915924072, -1.9706369638442993], + [-3.1076464653015137, -0.8765775561332703], + [2.6896867752075195, 6.693171501159668], + [2.7626378536224365, -5.865163803100586], + [-1.1078003644943237, 10.6033935546875], + [-1.0794554948806763, 10.756235122680664], + [-2.9849793910980225, -1.1417241096496582], + [-0.252208948135376, 8.535146713256836], + [7.511023998260498, -2.334820508956909], + [3.2328879833221436, 6.2990217208862305], + [-3.907092571258545, 6.208935737609863], + [-4.312648296356201, -1.6743707656860352], + [0.6493445038795471, -8.643404006958008], + [-0.0774703100323677, 4.350982666015625], + [-5.6738433837890625, 7.6142120361328125], + [-3.777726650238037, -2.901839017868042], + [-1.3715358972549438, -3.23584246635437], + [-3.293215036392212, -1.2731590270996094], + [-0.5893056392669678, 7.9158935546875], + [-3.2070672512054443, 5.381414890289307], + [-1.6991760730743408, 0.5646711587905884], + [8.237844467163086, -2.917691946029663], + [0.40697866678237915, -7.059037208557129], + [5.74147367477417, -2.022394895553589], + [-0.7242078185081482, 0.6678900122642517], + [-3.27266788482666, -2.2838118076324463], + [8.187956809997559, -2.3673040866851807], + [-3.7088277339935303, -1.2159303426742554], + [-0.029175467789173126, 8.34577751159668], + [-1.9188213348388672, 6.200062274932861], + [0.7869147658348083, -7.183544158935547], + [0.1196819469332695, -5.33319091796875], + [-1.7343240976333618, 1.8278849124908447], + [-3.838805913925171, -1.0810214281082153], + [-1.9088150262832642, -2.334313154220581], + [7.785484790802002, -2.8338234424591064], + [-4.41330623626709, 3.815854072570801], + [7.028156757354736, -1.8519599437713623], + [-0.534699022769928, -0.5053738355636597], + [2.3050377368927, 4.900660514831543], + [-3.591721773147583, -1.3733115196228027], + [-3.7579891681671143, 5.154330730438232], + [-3.2876555919647217, -0.562364935874939], + [4.964311599731445, -0.9889101982116699], + [1.6306763887405396, 1.9681316614151], + [0.6981980204582214, -8.257445335388184], + [2.0151736736297607, -5.27501106262207], + [-1.7358256578445435, 0.6619073152542114], + [-3.762794256210327, 4.094699382781982], + [6.204998016357422, -3.5075619220733643], + [0.4918714165687561, -7.2384185791015625], + [0.45093685388565063, -5.434200286865234], + [1.9397315979003906, 5.515920639038086], + [-0.9307305216789246, 9.959142684936523], + [0.7851321697235107, -8.54214096069336], + [-2.528575897216797, -2.340897798538208], + [-4.112306118011475, 6.7844390869140625], + [-1.0489916801452637, 1.5850434303283691], + [2.0254716873168945, 5.628560543060303], + [5.687776565551758, -1.1228631734848022], + [0.8124019503593445, -4.680736541748047], + [-1.4217019081115723, -0.5366016030311584], + [-2.061239242553711, 2.6638574600219727], + [-3.6676321029663086, -1.0723220109939575], + [-2.112968921661377, 1.8611056804656982], + [8.198773384094238, -2.9094502925872803], + [0.6751464605331421, -6.262794494628906], + [1.9379591941833496, 1.3539472818374634], + [-5.6420817375183105, 5.054880142211914], + [-1.5353742837905884, 12.170328140258789], + [-1.4981157779693604, 12.311542510986328], + [6.926302909851074, -2.0603675842285156], + [0.6079249978065491, -5.558858394622803], + [6.577931880950928, -4.614171981811523], + [-4.916893005371094, 6.319870471954346], + [-1.0072743892669678, 10.957601547241211], + [-1.6448469161987305, -0.6638038754463196], + [0.3186091184616089, -5.5998663902282715], + [-3.378037214279175, 1.2209004163742065], + [0.3882656693458557, -5.4174089431762695], + [-4.795145511627197, 7.208288192749023], + [-3.6661083698272705, -2.408539056777954], + [-4.1401686668396, -3.7825329303741455], + [-3.5282366275787354, -1.516161322593689], + [-4.020722389221191, -1.662076473236084], + [-3.5408570766448975, -0.4955357313156128], + [0.9040595293045044, -6.231110572814941], + [-3.412963390350342, -1.1772410869598389], + [-5.147399425506592, 6.216561317443848], + [-5.742745399475098, 7.744753837585449], + [-1.1583462953567505, 10.833319664001465], + [0.6410253643989563, -8.37818717956543], + [-1.9913079738616943, 1.5250277519226074], + [1.0384957790374756, 4.823092937469482], + [-2.4605348110198975, -1.1549338102340698], + [-4.943881511688232, 6.187433242797852], + [-4.14114236831665, 6.008167266845703], + [-5.167155742645264, -1.157824993133545], + [-4.216375350952148, -3.438296318054199], + [-3.737805128097534, -1.200316071510315], + [-4.933149814605713, -3.7205560207366943], + [-2.279514789581299, 2.2274489402770996], + [-5.277040004730225, 5.441337585449219], + [-0.6478157639503479, 9.988446235656738], + [1.4310483932495117, 4.714316368103027], + [-2.666640520095825, -0.9531489610671997], + [0.905918300151825, -7.711801528930664], + [-2.08372163772583, 1.4707918167114258], + [-3.6356396675109863, -0.6571683287620544], + [0.6019125580787659, -6.48338508605957], + [-4.524856090545654, -1.55475914478302], + [-4.99041748046875, 6.190450191497803], + [5.55649471282959, -1.5882176160812378], + [-0.8750962615013123, 10.254837036132812], + [0.00826176255941391, -4.063392639160156], + [6.035489559173584, -1.4155105352401733], + [2.9705758094787598, -4.931839942932129], + [-1.425201177597046, -1.2327604293823242], + [2.588088035583496, -4.132281303405762], + [-3.009366273880005, 3.1440961360931396], + [7.7435383796691895, -3.0154545307159424], + [-3.153942346572876, -1.1931965351104736], + [-4.329691410064697, 5.514928340911865], + [-2.3765580654144287, 1.472286343574524], + [8.591574668884277, -2.915663242340088], + [2.077946424484253, 3.6084461212158203], + [-1.2241847515106201, 11.823259353637695], + [3.110659122467041, -5.134121894836426], + [-0.026489652693271637, -4.494480133056641], + [-5.142810821533203, -1.0748817920684814], + [-1.2453333139419556, 1.400641679763794], + [6.532105922698975, -1.9878153800964355], + [-3.168306589126587, -0.9355033040046692], + [-4.765661716461182, 6.158700942993164], + [-2.9480979442596436, -0.9611603021621704], + [-1.4611754417419434, 12.022001266479492], + [2.7251594066619873, -4.814772605895996], + [0.16616231203079224, 9.229986190795898], + [-3.945669412612915, -1.024693489074707], + [0.22534668445587158, -4.852173805236816], + [-3.6952197551727295, -1.2666701078414917], + [0.07766707986593246, -4.804494857788086], + [0.8896633982658386, -6.419702529907227], + [-0.5154869556427002, 10.071702003479004], + [-3.129582643508911, -1.3572262525558472], + [-4.510732173919678, -2.1297054290771484], + [2.366147756576538, -3.8522558212280273], + [1.069948434829712, 6.436822891235352], + [-1.1069177389144897, 10.390165328979492], + [-4.696590900421143, -1.8138774633407593], + [-4.163699150085449, -0.9505635499954224], + [-5.299253940582275, 3.8085501194000244], + [-0.6857823133468628, 8.991092681884766], + [0.31900596618652344, -6.368541717529297], + [-3.9524612426757812, -2.979952335357666], + [0.22417646646499634, -6.262788772583008], + [2.7169883251190186, -4.712120056152344], + [-0.8358353972434998, -0.8594018220901489], + [-1.6162192821502686, -2.0493814945220947], + [-0.6288474798202515, 10.875303268432617], + [-4.389272212982178, 6.351010322570801], + [0.6543846726417542, -6.603052139282227], + [2.4740612506866455, 1.5679452419281006], + [-2.774419069290161, 3.0644712448120117], + [-2.0177793502807617, -1.6044814586639404], + [-4.011918544769287, -1.7775485515594482], + [8.713055610656738, -2.606633424758911], + [-4.18135404586792, -2.827185869216919], + [4.434645175933838, -3.618739366531372], + [-3.864454984664917, 4.9708075523376465], + [3.917609453201294, 6.872237205505371], + [-1.9443291425704956, 1.8715143203735352], + [0.3800870180130005, -5.516850471496582], + [-3.356954574584961, -0.41616910696029663], + [6.069048881530762, -2.9137046337127686], + [-0.635366678237915, -3.2447547912597656], + [0.5874099135398865, -6.9822998046875], + [-4.954309940338135, 5.305224418640137], + [-4.370694637298584, 5.870421409606934], + [-3.490736246109009, -0.6723980903625488], + [-3.951498031616211, -2.285454511642456], + [-0.2808181047439575, 9.225120544433594], + [4.761544227600098, -0.8380817174911499], + [0.47683805227279663, -0.7176080346107483], + [0.07718562334775925, -0.11465708911418915], + [2.8016273975372314, -4.701652526855469], + [8.04687786102295, -2.4726667404174805], + [1.8033530712127686, -6.074620246887207], + [-5.643432140350342, 7.686708450317383], + [-0.022406049072742462, -1.866257905960083], + [0.5711368918418884, -7.592533111572266], + [-3.0595901012420654, -1.2307482957839966], + [-4.214200496673584, -0.6163266897201538], + [-0.2993543744087219, 8.507169723510742], + [-0.9916991591453552, 10.110937118530273], + [-1.4418929815292358, 1.2723376750946045], + [-0.6823729276657104, 8.467228889465332], + [-5.002172946929932, 7.160543441772461], + [0.7536846995353699, -6.563770294189453], + [0.6099321246147156, -8.123296737670898], + [0.35021698474884033, -4.449050426483154], + [2.0456173419952393, 0.4423615336418152], + [-0.8204876780509949, 1.723493218421936], + [-1.77287757396698, -1.0417295694351196], + [1.7235524654388428, 5.671273231506348], + [-0.3686116337776184, 9.482390403747559], + [-6.0528388023376465, -0.9681649804115295], + [0.928561270236969, 3.055910110473633], + [-0.5892067551612854, -1.3183069229125977], + [-3.379868745803833, 5.316952705383301], + [-2.095525026321411, 2.0168874263763428], + [5.381344318389893, -1.2269724607467651], + [1.9752752780914307, -5.558283805847168], + [0.573867678642273, -7.665411472320557], + [2.801314115524292, -5.324618816375732], + [0.3462834358215332, 8.016396522521973], + [8.435441017150879, -3.29724383354187], + [-4.972507953643799, 6.58929443359375], + [7.569854259490967, -2.797901153564453], + [7.2178955078125, -2.3746373653411865], + [-3.9697930812835693, -2.6574275493621826], + [4.888272762298584, 7.748003005981445], + [-2.592677354812622, -2.217956304550171], + [3.9543464183807373, -0.8678478002548218], + [-2.8474605083465576, -2.118212938308716], + [-0.556763231754303, 9.972956657409668], + [-5.083516597747803, -1.2568556070327759], + [2.8509886264801025, -4.93969202041626], + [1.796897530555725, 3.543428421020508], + [2.9782254695892334, -4.790656566619873], + [-3.898834466934204, -2.666165590286255], + [1.7942100763320923, -0.30965396761894226], + [2.394465208053589, 4.276604175567627], + [0.8636680841445923, -7.138767242431641], + [-3.4090816974639893, -2.5471677780151367], + [8.296879768371582, -3.5073981285095215], + [-4.575431823730469, -0.4970911741256714], + [4.491282939910889, 7.767123699188232], + [-1.4028401374816895, 1.3366731405258179], + [2.4690334796905518, -4.227216720581055], + [8.742578506469727, -2.87515926361084], + [-4.177016735076904, 5.8505730628967285], + [4.8929619789123535, 7.786520957946777], + [-0.26975080370903015, -1.1015256643295288], + [6.0886735916137695, -2.2994725704193115], + [2.8413407802581787, -4.542332172393799], + [0.5550343990325928, -5.5880866050720215], + [-3.0938708782196045, 5.137333393096924], + [-0.30294135212898254, -0.8763186931610107], + [-2.312758445739746, 2.1966214179992676], + [0.6804554462432861, -7.189935207366943], + [2.259662628173828, 5.119538307189941], + [-4.622151851654053, -4.3820390701293945], + [2.6617329120635986, -4.190319061279297], + [0.5632447600364685, 3.7902772426605225], + [5.689357757568359, -1.393936276435852], + [-2.00136661529541, 2.292755126953125], + [-0.9992359280586243, 10.736572265625], + [-3.8622968196868896, -1.4148240089416504], + [-5.529324054718018, 7.35089111328125], + [2.6898648738861084, 5.908777713775635], + [4.073940753936768, -4.740738868713379], + [-2.7726891040802, -2.7346112728118896], + [-3.2407896518707275, 5.5626020431518555], + [2.347338914871216, 5.400952339172363], + [-4.313056945800781, 5.919673919677734], + [-2.966658115386963, 5.59244441986084], + [-3.4495298862457275, -1.4717010259628296], + [2.356900453567505, -4.1334943771362305], + [-5.212704181671143, 6.2797064781188965], + [7.965453624725342, -3.5784332752227783], + [-2.105570077896118, 2.1259281635284424], + [-3.267155408859253, -1.334484338760376], + [2.292747974395752, -4.653033256530762], + [4.451539993286133, -1.5654209852218628], + [-4.850595951080322, 4.5958251953125], + [-3.7972166538238525, -0.7534521818161011], + [-1.0042887926101685, 10.543020248413086], + [-3.929797649383545, 2.3602097034454346], + [-1.3674229383468628, 11.599621772766113], + [-1.3637607097625732, 11.71737289428711], + [0.31158584356307983, 0.01254143938422203], + [-2.7819736003875732, -2.0560879707336426], + [-3.6369831562042236, -2.4229276180267334], + [-5.233651161193848, 6.181989669799805], + [2.375945568084717, -5.066922187805176], + [-1.6755963563919067, -0.18537849187850952], + [-5.222630500793457, 6.422353744506836], + [-4.07069730758667, -0.5963152647018433], + [1.667907953262329, 4.719911575317383], + [1.7616195678710938, -6.336327075958252], + [-0.07077134400606155, -5.313398838043213], + [-4.8383073806762695, 5.938085556030273], + [-4.452550411224365, -1.7703971862792969], + [-0.21651345491409302, 9.37436294555664], + [7.792509078979492, -2.3558175563812256], + [0.4033128023147583, -5.704914093017578], + [0.5849253535270691, 5.305116653442383], + [-1.6308315992355347, 2.1024515628814697], + [-5.534925937652588, -0.7394371628761292], + [0.5193362832069397, -7.3429765701293945], + [0.5686277747154236, -7.741890907287598], + [0.8937738537788391, -8.132797241210938], + [-4.86990213394165, 6.9283552169799805], + [-3.358854055404663, 4.483443260192871], + [1.1020795106887817, 0.138703852891922], + [0.6296337246894836, -7.2802228927612305], + [-3.3454535007476807, -0.20679205656051636], + [-3.157301664352417, -1.3427149057388306], + [1.2821464538574219, -5.2320709228515625], + [6.941993236541748, -1.8458397388458252], + [2.1601545810699463, -3.7846031188964844], + [2.2438342571258545, 4.748680114746094], + [0.5488829016685486, -7.761319160461426], + [4.631579875946045, -4.093541145324707], + [0.933434784412384, -6.137488842010498], + [-5.438675403594971, -0.9782649278640747], + [-0.4659891128540039, 10.00554084777832], + [-2.8636462688446045, -1.1970646381378174], + [0.5400317311286926, -7.140155792236328], + [-3.4847171306610107, -1.1818552017211914], + [-5.461117744445801, 6.7471795082092285], + [-1.58235502243042, 12.976747512817383], + [10.573451042175293, -3.148364782333374], + [0.8410915732383728, -6.581683158874512], + [2.467533588409424, 4.862853050231934], + [-1.6467125415802002, 2.1271984577178955], + [-1.790844440460205, 0.8858192563056946], + [-5.31959342956543, 7.788679599761963], + [1.465677261352539, 3.9583423137664795], + [-4.771857738494873, 7.011321067810059], + [-4.390110492706299, -3.609487295150757], + [6.43782901763916, -2.4193131923675537], + [1.03541898727417, -5.448850631713867], + [-0.7258103489875793, -1.285253882408142], + [0.7599133849143982, -8.888044357299805], + [0.4779335856437683, -4.304505348205566], + [-4.476849555969238, -3.014197587966919], + [-3.6502790451049805, -1.6691564321517944], + [4.1533308029174805, 6.9099578857421875], + [-1.2236034870147705, 11.21871280670166], + [-5.3949408531188965, 6.914283752441406], + [-3.4530889987945557, -1.3563201427459717], + [-4.527595520019531, 6.851951599121094], + [-4.808204650878906, 6.2962141036987305], + [-0.03455314785242081, -4.291468620300293], + [5.761882781982422, -4.062405586242676], + [-4.510472774505615, -4.237778663635254], + [2.569622755050659, 6.244268894195557], + [-0.994091272354126, 6.031301021575928], + [-5.448361873626709, -0.9313137531280518], + [2.186067819595337, 0.5085458159446716], + [-2.4724056720733643, 0.17410176992416382], + [2.957266092300415, 6.208253860473633], + [-4.4570794105529785, 6.365534782409668], + [1.675323247909546, 0.9340367913246155], + [-1.718950867652893, 0.2846749722957611], + [-0.6292783617973328, 0.6009659767150879], + [6.831946849822998, -2.293142080307007], + [2.7547991275787354, 0.7058354020118713], + [-3.4366540908813477, -1.4203730821609497], + [1.8982714414596558, 5.073607444763184], + [0.6233938336372375, -6.857190132141113], + [-1.4556357860565186, 12.08581256866455], + [-3.645920991897583, 0.3773103952407837], + [2.6743109226226807, -4.5998101234436035], + [-5.185196399688721, 6.510718822479248], + [2.1733620166778564, 0.6040374040603638], + [-5.247701644897461, 6.323895454406738], + [-5.501738548278809, 5.005224704742432], + [-3.2012996673583984, -2.7039084434509277], + [0.9839680790901184, -5.0948486328125], + [0.8529060482978821, -7.207089900970459], + [0.1527845561504364, -0.9091000556945801], + [0.615305483341217, -0.24774684011936188], + [-3.4504430294036865, 5.10538387298584], + [-4.799190044403076, 5.995575904846191], + [0.4295058250427246, -6.828557968139648], + [2.1788899898529053, 5.816097259521484], + [2.1909823417663574, 5.941848278045654], + [-3.5245113372802734, -0.9546661376953125], + [-1.1891818046569824, 11.110485076904297], + [2.9421215057373047, -4.539650917053223], + [0.764614999294281, 4.875583171844482], + [-0.1457487940788269, 6.743344306945801], + [-1.7835243940353394, 13.930021286010742], + [-2.7035539150238037, 2.389000654220581], + [-1.2810983657836914, 11.445858001708984], + [-3.916206121444702, -2.2896993160247803], + [-3.3956961631774902, -1.2823809385299683], + [2.150690793991089, -4.055083751678467], + [0.3185657262802124, -5.78188419342041], + [-1.0658812522888184, -0.6948508024215698], + [-5.1741766929626465, 6.883537292480469], + [-4.464400768280029, 7.071872711181641], + [-3.787515163421631, -1.5777612924575806], + [2.425466537475586, 0.633022129535675], + [0.40399134159088135, -6.428630828857422], + [7.125707149505615, -2.702101707458496], + [6.977540493011475, -3.340442419052124], + [-3.5786406993865967, -0.819798469543457], + [-3.425471544265747, -0.19130051136016846], + [6.58566951751709, -3.6401898860931396], + [-2.3285319805145264, -1.0869972705841064], + [-2.5133302211761475, 2.581838369369507], + [-3.651578187942505, -1.6667083501815796], + [-5.447885036468506, 3.512394905090332], + [2.7030792236328125, -4.515433311462402], + [0.5119290351867676, -6.556085586547852], + [-4.1374311447143555, 6.5283660888671875], + [-5.179972171783447, 6.883168697357178], + [2.600963830947876, -4.414732456207275], + [0.574940025806427, -7.559441089630127], + [-0.16534656286239624, 9.280097961425781], + [-2.892630100250244, -1.3341730833053589], + [0.7979648113250732, 1.7887104749679565], + [2.673229694366455, -4.0139946937561035], + [0.8696749210357666, -0.27399706840515137], + [-0.673130989074707, 4.552474021911621], + [-5.752150058746338, -0.8974687457084656], + [-0.2010321021080017, 9.443364143371582], + [-2.512272834777832, -1.074738621711731], + [-5.105924606323242, 6.1676812171936035], + [7.670820713043213, -2.2765438556671143], + [0.6730871200561523, -0.5963772535324097], + [2.674600839614868, -4.745319843292236], + [7.368652820587158, -3.0499722957611084], + [0.4625932574272156, -6.845552444458008], + [0.4271728992462158, -7.210322380065918], + [4.58160924911499, 7.587345123291016], + [0.16620612144470215, -5.355160713195801], + [-4.396220684051514, -1.6251698732376099], + [-0.24286046624183655, -1.7394853830337524], + [-1.1471675634384155, 0.6738230586051941], + [0.6558004021644592, -4.385750770568848], + [-1.4432939291000366, 4.4326910972595215], + [2.5996193885803223, -4.452820777893066], + [0.6679897308349609, -8.049683570861816], + [2.1679458618164062, 5.931337356567383], + [8.094491004943848, -2.340333938598633], + [-1.0313793420791626, 1.0607995986938477], + [9.059170722961426, -2.7367618083953857], + [2.2526423931121826, 5.257032871246338], + [-0.40832775831222534, -0.9720848798751831], + [-0.6747785210609436, 10.29339599609375], + [5.902345180511475, -1.232706069946289], + [0.38076794147491455, -6.062801361083984], + [0.5791676640510559, -4.5615153312683105], + [-2.7355918884277344, 2.9703423976898193], + [-2.338153600692749, 2.3186891078948975], + [7.406071186065674, -2.876985549926758], + [-1.324396014213562, 11.347713470458984], + [1.5625396966934204, 5.546775817871094], + [-0.8268943428993225, -0.6630880236625671], + [-5.667882919311523, 7.434743881225586], + [0.7849318981170654, -0.2742948532104492], + [8.45749568939209, -2.940014600753784], + [-1.4079142808914185, 11.678851127624512], + [-1.0538733005523682, 0.38332223892211914], + [-0.5269901156425476, 10.312134742736816], + [-3.5114614963531494, -1.0435569286346436], + [-3.394263505935669, -0.5818579196929932], + [-0.1374203860759735, -1.4419392347335815], + [7.2515177726745605, -2.864997625350952], + [7.471893787384033, -3.554141044616699], + [-3.6193137168884277, -2.4303534030914307], + [7.062969207763672, -2.7514455318450928], + [-0.29538702964782715, -1.861434817314148], + [7.744208812713623, -2.570570707321167], + [-0.10117868334054947, -4.177725791931152], + [4.017251491546631, 7.294070243835449], + [-3.1004741191864014, -0.9159363508224487], + [-0.06055939942598343, 0.3417350649833679], + [-3.799733877182007, -3.3464248180389404], + [-0.31835946440696716, -1.1158227920532227], + [-0.8201400637626648, 1.629462718963623], + [-1.0537281036376953, 9.841781616210938], + [5.267250061035156, 8.075817108154297], + [6.908885478973389, -2.0584914684295654], + [-5.507847309112549, 5.892966270446777], + [-3.2521207332611084, -0.48706942796707153], + [-3.437621831893921, -1.0571924448013306], + [-1.3720269203186035, 11.756309509277344], + [-4.330120086669922, -0.4958215355873108], + [0.8404131531715393, -5.698921203613281], + [1.8725212812423706, 6.2530927658081055], + [3.461935043334961, 6.380640983581543], + [6.408707141876221, -3.9728262424468994], + [-5.044191837310791, 6.717268943786621], + [-4.960186004638672, 6.864859580993652], + [2.7306292057037354, -4.50622034072876], + [9.374299049377441, -2.7682013511657715], + [5.943702220916748, -3.415433645248413], + [1.8120148181915283, -4.5598883628845215], + [-4.488840579986572, -0.9862152338027954], + [-4.280994892120361, -1.310462236404419], + [2.7666168212890625, -4.946084976196289], + [7.882024765014648, -3.1885907649993896], + [1.4288506507873535, -6.437080383300781], + [-0.3358909785747528, -1.0246516466140747], + [-1.4791688919067383, 11.976751327514648], + [2.051788330078125, 3.409593105316162], + [-1.0724163055419922, 10.378556251525879], + [-4.144182205200195, -0.4349825978279114], + [-5.131982326507568, 6.558374404907227], + [0.6813377141952515, -5.487303733825684], + [1.9922654628753662, 5.5555806159973145], + [1.5266590118408203, 4.168024063110352], + [-3.2328968048095703, -0.44426459074020386], + [-1.8655459880828857, 1.6103392839431763], + [-1.993273377418518, 2.7461929321289062], + [-0.75392085313797, 9.571266174316406], + [-2.0527753829956055, 0.8670246601104736], + [0.7384165525436401, -7.865847587585449], + [0.7148870825767517, -8.210569381713867], + [1.66971755027771, -4.635677337646484], + [-4.318546772003174, -0.4909343123435974], + [-1.2749123573303223, 11.241354942321777], + [2.9141829013824463, -4.711976051330566], + [-4.215794086456299, 4.969996452331543], + [0.828575611114502, -4.933320045471191], + [0.5269747376441956, -7.534444808959961], + [-4.401773452758789, 5.228022575378418], + [2.3062222003936768, 4.943615436553955], + [-4.169315814971924, 4.845190048217773], + [-1.2022466659545898, 9.433906555175781], + [5.736396312713623, 8.501687049865723], + [-5.0930094718933105, -0.9118949770927429], + [-2.1836211681365967, -2.1680915355682373], + [6.54034423828125, -1.2954461574554443], + [2.849015951156616, -4.702531337738037], + [-0.8360927700996399, 9.500853538513184], + [-1.466257095336914, 2.088306188583374], + [-4.652926445007324, -0.943120002746582], + [-4.170977592468262, 5.571995735168457], + [1.9798245429992676, 4.011148929595947], + [2.7986032962799072, -4.34014368057251], + [-3.11710786819458, -0.43860363960266113], + [-4.334262371063232, 6.388757705688477], + [-4.508181095123291, -3.8742291927337646], + [-3.6680238246917725, -1.2844560146331787], + [-3.4084525108337402, -2.1914355754852295], + [1.4555840492248535, 4.817370414733887], + [-0.6716693043708801, 10.812956809997559], + [2.349626302719116, -4.407585144042969], + [2.439866065979004, -5.143929958343506], + [-3.6418752670288086, -1.9263752698898315], + [-1.5228028297424316, 1.5135313272476196], + [-3.265752077102661, -1.4177805185317993], + [2.46368145942688, -4.315045356750488], + [6.089913368225098, -3.2094886302948], + [2.1872403621673584, 0.4066524803638458], + [-3.3323705196380615, -1.1567209959030151], + [5.760929584503174, 8.654254913330078], + [-3.772045850753784, -1.4851676225662231], + [4.334160327911377, 7.4772233963012695], + [0.5022603869438171, -7.036143779754639], + [-2.0158677101135254, 0.3820185661315918], + [-4.907712459564209, -0.5995182394981384], + [0.37238991260528564, -5.8021345138549805], + [1.4943461418151855, 0.5143366456031799], + [0.49949097633361816, -7.560074806213379], + [0.7930773496627808, 1.6502549648284912], + [0.8058366179466248, 3.265408754348755], + [1.843275547027588, 4.976399898529053], + [-3.8783771991729736, -3.9734885692596436], + [-4.4324445724487305, -2.25736403465271], + [4.67684268951416, -4.025938987731934], + [-0.5423101782798767, 9.847026824951172], + [9.85690975189209, -2.9511940479278564], + [6.350177764892578, -2.096832036972046], + [0.1132194921374321, -4.54474401473999], + [0.34348154067993164, -6.18222713470459], + [-4.4723711013793945, -2.1843020915985107], + [2.5046234130859375, -4.2998552322387695], + [-1.0151405334472656, 10.414730072021484], + [-2.583439588546753, -1.7150641679763794], + [-0.28683021664619446, -0.43245843052864075], + [0.3067924976348877, -5.912451267242432], + [0.45931345224380493, -5.480452537536621], + [-0.015918202698230743, -4.825802803039551], + [0.6564310193061829, -7.2298760414123535], + [7.455352783203125, -3.1280410289764404], + [1.8144843578338623, 5.457154750823975], + [-1.3771953582763672, 12.042190551757812], + [0.7738697528839111, -7.239343643188477], + [-1.1221537590026855, -3.0854332447052], + [-1.6734317541122437, 0.4417630732059479], + [-3.6534202098846436, -0.9062764644622803], + [-5.2145161628723145, -2.090101957321167], + [1.7706272602081299, -5.282778263092041], + [-1.2070059776306152, 11.034503936767578], + [6.07822847366333, -2.352602005004883], + [-5.115175724029541, 5.70703125], + [8.188943862915039, -2.512110948562622], + [-4.820196628570557, -1.977155327796936], + [-0.79600590467453, -0.6645702123641968], + [-4.6077094078063965, -1.2525259256362915], + [-5.659383296966553, 7.665166854858398], + [0.8787563443183899, -7.8846940994262695], + [-2.856903314590454, 6.577978610992432], + [-2.207202196121216, 0.7012021541595459], + [2.17159104347229, -4.2643327713012695], + [2.7206501960754395, -4.919523239135742], + [-0.13854873180389404, -1.170145869255066], + [-1.2443937063217163, 11.337106704711914], + [-1.1453263759613037, 11.377676010131836], + [-4.230119228363037, -3.1561691761016846], + [7.7705464363098145, -2.9920201301574707], + [-5.1358160972595215, -1.71176016330719], + [-3.007453203201294, -0.814072847366333], + [7.382559299468994, -3.7364413738250732], + [1.7644524574279785, 0.15090195834636688], + [-0.06614721566438675, -5.104570388793945], + [1.2556840181350708, 4.5135040283203125], + [7.123928546905518, -2.3887436389923096], + [0.9184912443161011, 5.088325023651123], + [-0.6326512098312378, 5.185266494750977], + [0.05522962659597397, -1.123604416847229], + [0.6126667857170105, -0.7467069625854492], + [-1.1438273191452026, 10.694539070129395], + [0.37611550092697144, -0.864406168460846], + [0.7038575410842896, -4.531518459320068], + [-1.6535252332687378, 1.2589887380599976], + [0.7995010614395142, -6.563017845153809], + [1.0250539779663086, -0.14117060601711273], + [0.4998195171356201, -7.162047386169434], + [-0.7286905646324158, 10.220159530639648], + [-3.488806962966919, -1.300512671470642], + [-4.911928176879883, 6.219733715057373], + [5.808383941650391, -2.1683883666992188], + [2.0495970249176025, -5.000007629394531], + [0.6062620282173157, 3.3906452655792236], + [0.6939402222633362, -8.918048858642578], + [-4.5118727684021, -1.1832152605056763], + [0.722143292427063, -6.8199357986450195], + [-3.329993486404419, -1.0217288732528687], + [-4.2181172370910645, 5.539682865142822], + [-1.1204174757003784, 1.5436551570892334], + [0.5550280213356018, -0.6586945056915283], + [4.922554969787598, 7.861157417297363], + [0.43882107734680176, -5.037250518798828], + [3.016530752182007, 5.976067066192627], + [1.7125744819641113, -4.048503398895264], + [-0.5223948359489441, 9.776422500610352], + [-2.90083646774292, -1.3305879831314087], + [-4.847341060638428, -3.941676378250122], + [-4.434942722320557, -0.70539391040802], + [-1.0981476306915283, 10.197612762451172], + [-2.972907781600952, -1.6494299173355103], + [-1.3759410381317139, 2.0514438152313232], + [-5.687007427215576, -4.1145758628845215], + [0.5046451687812805, -7.5733113288879395], + [-1.3095287084579468, 1.500861644744873], + [-4.356031894683838, -1.274503469467163], + [0.7123555541038513, -8.537322998046875], + [-1.8946681022644043, 1.602442979812622], + [-1.3283541202545166, 1.372020959854126], + [2.80086350440979, -5.010698318481445], + [-0.5656428933143616, 9.262433052062988], + [7.140882968902588, -1.8793251514434814], + [-3.5990235805511475, -0.6796344518661499], + [-4.167505741119385, -1.317864179611206], + [7.381565570831299, -2.113295078277588], + [-4.071505546569824, 0.4197171628475189], + [-5.806092739105225, 7.42598819732666], + [5.165425777435303, -6.102230072021484], + [-1.3161735534667969, 11.697385787963867], + [0.6798141002655029, 5.266919136047363], + [-3.3553788661956787, -0.5944597721099854], + [-0.04267901927232742, -3.132164716720581], + [-4.5819926261901855, -0.9333249926567078], + [0.26827001571655273, -5.781764984130859], + [8.284040451049805, -3.189868211746216], + [6.479984283447266, -2.526171922683716], + [2.2726690769195557, 4.654120445251465], + [-3.208449602127075, 6.994751930236816], + [-1.1871235370635986, 10.835824966430664], + [2.207718849182129, 5.415440559387207], + [0.10220225900411606, -4.660541534423828], + [-3.1948606967926025, -4.317886829376221], + [-3.101999521255493, -1.9905927181243896], + [7.862316608428955, -2.482269048690796], + [2.0986886024475098, -4.377703666687012], + [-0.6476015448570251, 9.932524681091309], + [7.140953063964844, -3.7523412704467773], + [1.4566234350204468, -4.916085243225098], + [-5.530222415924072, 6.600582122802734], + [-0.2050132155418396, 7.854531288146973], + [-1.3298296928405762, 11.349912643432617], + [7.905578136444092, -2.2850453853607178], + [-0.03579176217317581, -3.9606001377105713], + [-3.639575958251953, 5.62861442565918], + [-0.3588833212852478, 9.515204429626465], + [-2.5053775310516357, -2.312314510345459], + [2.7912628650665283, -4.8168840408325195], + [2.3197224140167236, -6.980760097503662], + [0.882195770740509, -4.8462018966674805], + [2.297307014465332, 0.6154283285140991], + [-1.0735315084457397, 0.3323071300983429], + [-0.07123006135225296, -5.160393714904785], + [-3.2995755672454834, -1.0608723163604736], + [-1.7586638927459717, 1.2724155187606812], + [-4.091929912567139, -1.968526005744934], + [-0.4496455788612366, 9.462329864501953], + [1.6168383359909058, 3.0160562992095947], + [-2.0043399333953857, -2.612719774246216], + [0.597579836845398, -7.853204727172852], + [-3.9695684909820557, -2.6968295574188232], + [2.239366292953491, 5.326659202575684], + [-1.120750069618225, -2.8566606044769287], + [-1.9742929935455322, 2.0282773971557617], + [5.400078773498535, -1.172529697418213], + [-4.330420970916748, -2.7337276935577393], + [1.4864273071289062, -4.874067306518555], + [-1.522014856338501, 2.2589359283447266], + [5.902476787567139, -3.793182849884033], + [2.289642095565796, -4.969784259796143], + [1.9937880039215088, 5.117417812347412], + [-1.7602285146713257, -0.6217828989028931], + [1.9139630794525146, 0.9082534909248352], + [2.63835072517395, -5.004975318908691], + [-4.6204047203063965, 5.1671061515808105], + [-4.423131942749023, 2.2067763805389404], + [-1.949660062789917, 0.5113082528114319], + [0.789112389087677, -6.878732681274414], + [2.689270496368408, -5.199141502380371], + [-4.662431240081787, 6.651116371154785], + [-5.533267021179199, 6.784153938293457], + [1.3742661476135254, -5.939186096191406], + [0.6170525550842285, -6.513256072998047], + [3.4472811222076416, 6.825033187866211], + [2.696194887161255, -2.7333366870880127], + [3.024132013320923, -4.84290075302124], + [-4.10012674331665, -2.310056447982788], + [0.33116602897644043, -4.050599098205566], + [2.500175714492798, -4.994471549987793], + [0.5652574896812439, -6.996402740478516], + [-0.04227031022310257, -5.06364631652832], + [4.315136432647705, -5.3346967697143555], + [-0.5230453014373779, -1.5382379293441772], + [2.546097755432129, -4.661607265472412], + [0.5075743198394775, -7.502401351928711], + [-0.6223543286323547, 10.954627990722656], + [-3.9311110973358154, -2.6050894260406494], + [2.4334280490875244, -3.915040969848633], + [-1.0161789655685425, 11.058181762695312], + [6.065563201904297, 8.981045722961426], + [0.5732294917106628, -4.774600982666016], + [-0.031209267675876617, -0.9387772083282471], + [1.7226685285568237, -0.21542827785015106], + [-4.51725435256958, -0.39529645442962646], + [0.8657060861587524, -0.5523163080215454], + [0.21027851104736328, -5.902290344238281], + [-3.125062942504883, -1.7200837135314941], + [-4.573852062225342, -0.43965959548950195], + [4.819762229919434, 7.839816570281982], + [-5.1815338134765625, 4.6195292472839355], + [-2.377265691757202, 2.1600215435028076], + [0.3792724609375, -6.785036563873291], + [-5.174166679382324, -4.856922626495361], + [1.7176413536071777, -3.9630486965179443], + [0.361784964799881, -4.967994689941406], + [-4.730712413787842, 6.249078750610352], + [3.6126832962036133, -5.415529251098633], + [-3.2265713214874268, -2.5019147396087646], + [-3.944434881210327, 6.085139274597168], + [-1.1404117345809937, -2.7988431453704834], + [-4.388911247253418, -3.1391241550445557], + [-2.9167442321777344, 2.7588634490966797], + [0.07161521166563034, -4.253528594970703], + [2.335080862045288, -3.964627504348755], + [-5.321850776672363, 8.365747451782227], + [-2.203521251678467, 5.525124549865723], + [6.233706951141357, -1.1953541040420532], + [6.3469367027282715, -2.749885320663452], + [0.32329511642456055, -7.0440192222595215], + [2.7511613368988037, -5.148531913757324], + [-4.0666913986206055, -3.1658623218536377], + [-3.1492300033569336, -1.3394609689712524], + [-1.2583770751953125, 10.459548950195312], + [-5.78167200088501, -1.165448546409607], + [7.4926371574401855, -2.9101531505584717], + [0.3283963203430176, -6.769500732421875], + [-3.9082963466644287, -1.3680498600006104], + [-1.7951208353042603, 2.1285152435302734], + [0.5243704319000244, -8.09092903137207], + [-4.048227310180664, -2.656545400619507], + [-3.9256417751312256, 3.688535690307617], + [-3.703958749771118, 5.911214828491211], + [-1.7661364078521729, 1.2406208515167236], + [-1.885504961013794, 0.6833774447441101], + [8.98052978515625, -2.7201290130615234], + [-4.48333215713501, -2.7851176261901855], + [3.2252557277679443, -4.240711212158203], + [-4.0552568435668945, -0.8513951301574707], + [-5.3183135986328125, 7.568986415863037], + [-3.7200889587402344, -2.4000494480133057], + [-4.864577770233154, 6.384852886199951], + [2.316802501678467, -4.606461524963379], + [-3.6930906772613525, -2.1238205432891846], + [2.352325201034546, 5.288201808929443], + [2.295799970626831, 4.94534158706665], + [-0.888542652130127, 2.5268704891204834], + [-1.3001809120178223, -0.547865629196167], + [0.3435426354408264, -4.497006416320801], + [0.2295714020729065, -5.8906025886535645], + [2.1179258823394775, -4.550025939941406], + [1.9063808917999268, 4.850473880767822], + [0.56219881772995, -7.407642364501953], + [-3.057105541229248, 4.6113200187683105], + [-1.9846454858779907, 2.088200092315674], + [2.9094526767730713, 6.3350138664245605], + [-3.7183725833892822, -1.3708795309066772], + [-3.9244234561920166, 5.852243900299072], + [0.768011748790741, -6.92612361907959], + [-3.6146914958953857, -1.5347877740859985], + [-0.34067851305007935, 9.614934921264648], + [-4.475224018096924, -3.3260536193847656], + [1.0784833431243896, -6.245729446411133], + [-3.565364122390747, -1.8055740594863892], + [-5.352046966552734, 7.483132839202881], + [-4.108054161071777, -2.7585482597351074], + [0.18246126174926758, -5.775347709655762], + [-0.6648111939430237, 10.49307632446289], + [-3.1164724826812744, -0.10538649559020996], + [0.5012723803520203, -4.6423139572143555], + [-1.6926028728485107, 1.242248296737671], + [-1.4969593286514282, 12.342886924743652], + [0.6629980206489563, -8.477230072021484], + [2.8065576553344727, -4.89420223236084], + [-3.3608381748199463, -1.7530076503753662], + [5.873068332672119, -3.289729356765747], + [6.5421881675720215, -1.7416367530822754], + [7.815998077392578, -2.5168802738189697], + [2.666877508163452, -5.671154022216797], + [0.7466289401054382, -5.78305721282959], + [0.6193401217460632, -7.198766231536865], + [0.31882816553115845, -5.541328430175781], + [-4.792339324951172, 4.636100769042969], + [7.207422256469727, -3.948101043701172], + [0.06511157006025314, -5.053964138031006], + [-3.543992042541504, -0.9008539915084839], + [-3.085876226425171, -3.053971290588379], + [-1.8611416816711426, 2.459763765335083], + [-0.8490169048309326, 10.39666748046875], + [-0.1593438982963562, 9.465971946716309], + [5.529303073883057, -1.265734076499939], + [1.9085243940353394, 0.6602656841278076], + [-3.940690279006958, -3.0358335971832275], + [-0.7331685423851013, 9.69105339050293], + [1.5890510082244873, -5.319201469421387], + [-3.4879424571990967, -1.6269899606704712], + [2.801309823989868, -3.8515632152557373], + [6.7883758544921875, -3.9234137535095215], + [0.38454049825668335, -6.217188835144043], + [0.5152005553245544, -5.220510005950928], + [2.823179006576538, -4.409684181213379], + [-0.7940702438354492, 10.578041076660156], + [-0.2737905979156494, -1.7398804426193237], + [-3.018766403198242, 3.3113019466400146], + [0.6873197555541992, -6.131547927856445], + [0.8544217348098755, -4.685900688171387], + [2.59258770942688, -4.694256782531738], + [-0.3853723406791687, 10.268928527832031], + [-5.045909404754639, 6.70969295501709], + [-4.983043670654297, -5.093968391418457], + [2.0180933475494385, 5.794661521911621], + [-3.8644144535064697, -0.6680223941802979], + [2.729712724685669, 2.3319904804229736], + [6.9137701988220215, -2.38799786567688], + [3.3610050678253174, 6.776120662689209], + [6.776180744171143, -2.8506250381469727], + [-1.3041154146194458, 1.7604665756225586], + [-3.98357892036438, -2.5150458812713623], + [0.6632543206214905, -6.978811264038086], + [-0.5030249953269958, 9.457422256469727], + [-4.992971897125244, 6.101706504821777], + [1.0150058269500732, -6.616490364074707], + [7.685431003570557, -2.4011168479919434], + [-0.3602498173713684, 10.140704154968262], + [2.8963444232940674, -4.684395790100098], + [-1.5206319093704224, -0.7079615592956543], + [-0.5632943511009216, 9.97930908203125], + [0.6295281648635864, -7.328331470489502], + [7.469394207000732, -2.460256338119507], + [3.2072761058807373, 6.59744119644165], + [1.783618688583374, -4.6068010330200195], + [-1.9851901531219482, 1.9220874309539795], + [0.5851950645446777, -8.83323860168457], + [-1.3721325397491455, -0.18369868397712708], + [2.148808479309082, -4.347954750061035], + [0.7063875794410706, -8.466925621032715], + [-1.2223774194717407, 11.487354278564453], + [6.423476696014404, -1.8735235929489136], + [-3.1952078342437744, -1.0967603921890259], + [0.8702216744422913, 8.015009880065918], + [-3.874826669692993, -2.9420206546783447], + [-1.886458396911621, 0.7016831636428833], + [-0.6753802299499512, 10.398070335388184], + [0.5424808263778687, -6.392979621887207], + [0.28380393981933594, -5.029204368591309], + [-1.1733345985412598, 11.08071517944336], + [-3.6430227756500244, -1.0496439933776855], + [-0.05447367578744888, -3.5717246532440186], + [-1.8799396753311157, 1.9748731851577759], + [1.5187962055206299, 1.2329308986663818], + [2.1440329551696777, 5.578596115112305], + [0.7174569964408875, -8.368180274963379], + [-3.959105968475342, -1.4029923677444458], + [0.6325605511665344, -8.603890419006348], + [0.8558040261268616, -7.7541399002075195], + [2.8032844066619873, -4.680492877960205], + [-0.7362766265869141, 9.916328430175781], + [-5.030751705169678, 5.063636779785156], + [-5.504773139953613, 5.4961161613464355], + [-0.04611695557832718, 7.0376996994018555], + [2.263617753982544, 4.8012776374816895], + [-0.07675755769014359, -4.6936354637146], + [-2.1978466510772705, -0.19109201431274414], + [-1.0219823122024536, 10.185091018676758], + [7.596167087554932, -3.41988205909729], + [-3.152939558029175, -1.0547730922698975], + [-2.0466835498809814, 2.7639474868774414], + [-5.140102863311768, 6.845931053161621], + [-3.588385820388794, -1.3878711462020874], + [1.1132441759109497, 0.5661210417747498], + [0.766197681427002, -5.640994071960449], + [6.559386730194092, -5.195460319519043], + [-1.191579818725586, 11.415107727050781], + [-4.4295477867126465, -1.6392568349838257], + [1.3613049983978271, 5.06911563873291], + [1.389786720275879, 1.747761607170105], + [-4.184797763824463, -0.7608680725097656], + [-0.8424748778343201, 9.214871406555176], + [1.4436705112457275, 5.614012718200684], + [1.264194369316101, 4.7021074295043945], + [-3.94657301902771, -2.127486228942871], + [0.7217515110969543, -9.033984184265137], + [-1.660972237586975, 13.098861694335938], + [6.188669204711914, -4.247161865234375], + [2.067810297012329, -4.905133247375488], + [0.26878494024276733, -5.714991569519043], + [0.6381120085716248, -7.380754470825195], + [-4.283664226531982, -2.8434579372406006], + [-4.004807472229004, -2.427408218383789], + [6.93483829498291, -3.9082109928131104], + [-2.778353452682495, -2.133507490158081], + [-1.938342809677124, 2.1920864582061768], + [-3.4358510971069336, 4.349134922027588], + [-3.477013349533081, -0.46141767501831055], + [-5.231034278869629, 6.51951789855957], + [-0.31846827268600464, 9.003196716308594], + [-4.046029090881348, -0.46441173553466797], + [-3.9761359691619873, -2.9394209384918213], + [0.5748392343521118, -6.339414119720459], + [-1.398464560508728, 11.760782241821289], + [0.5049900412559509, -4.945245742797852], + [-4.143009185791016, -0.7437248826026917], + [-5.369757175445557, 3.9374916553497314], + [1.1634738445281982, -5.795389175415039], + [-0.8902807831764221, 8.87337875366211], + [-2.158386468887329, -1.9590091705322266], + [-0.17265701293945312, 5.170596599578857], + [-1.414548635482788, 11.55325698852539], + [-3.3328354358673096, -1.5966211557388306], + [-4.905771255493164, -0.9183854460716248], + [1.2961502075195312, -5.663558006286621], + [-4.214654445648193, -2.8029911518096924], + [-4.424434185028076, -1.9668830633163452], + [-1.1153723001480103, -1.136872410774231], + [-1.1897990703582764, 10.756174087524414], + [-4.462829113006592, 5.52553653717041], + [-0.5098032355308533, 9.955307006835938], + [3.978736162185669, -3.477884531021118], + [-4.83453893661499, 6.485770225524902], + [-1.8716357946395874, 2.2431747913360596], + [-2.611751079559326, -2.0210328102111816], + [2.338362693786621, -4.460670471191406], + [-2.432302474975586, -1.002281665802002], + [-0.5000768303871155, 9.140604019165039], + [-2.722670793533325, -1.6223030090332031], + [0.08349459618330002, -1.2323155403137207], + [-3.494358777999878, -1.1909518241882324], + [-4.231141567230225, -1.9530326128005981], + [-1.3637158870697021, 11.549307823181152], + [-2.91849684715271, -0.7945180535316467], + [0.18572205305099487, -6.166454792022705], + [0.5673757791519165, -7.535469055175781], + [-0.17071270942687988, 3.1644532680511475], + [2.380279779434204, -4.3530755043029785], + [-2.408987283706665, 0.2990831136703491], + [-1.8150683641433716, 1.981141448020935], + [-1.9101520776748657, 1.9200111627578735], + [6.272908687591553, -2.141500949859619], + [8.332844734191895, -2.685828924179077], + [0.3612433671951294, -6.231752395629883], + [-1.4150975942611694, 11.823158264160156], + [6.191590309143066, -1.353451132774353], + [1.0271755456924438, -0.2685443162918091], + [2.497124671936035, -4.595000267028809], + [0.24756306409835815, -7.107815742492676], + [-1.6020439863204956, 12.795289993286133], + [3.0007946491241455, -5.303691864013672], + [-0.6350626945495605, 9.27482795715332], + [-3.1574456691741943, -2.0028908252716064], + [-3.818335771560669, -1.59477698802948], + [-1.0440150499343872, 1.008666753768921], + [0.561654269695282, -7.687839508056641], + [3.0243098735809326, -4.976661205291748], + [-4.660094261169434, -2.357732057571411], + [1.9295971393585205, 5.2644147872924805], + [-0.8044681549072266, 9.738835334777832], + [0.6269919872283936, -7.365900039672852], + [-2.7166073322296143, -0.9884548187255859], + [0.9371431469917297, -6.6343584060668945], + [6.0431742668151855, -2.599256753921509], + [-4.26050329208374, -1.0268396139144897], + [4.70538330078125, 7.673309803009033], + [-2.999821186065674, -1.5629528760910034], + [-1.894194483757019, 1.6217327117919922], + [-3.736708402633667, 6.151165008544922], + [-3.6097190380096436, -1.2767590284347534], + [-0.3712424635887146, 9.010875701904297], + [-4.332070827484131, -0.602827787399292], + [-1.2253676652908325, 2.131244421005249], + [-3.354865312576294, 4.833491325378418], + [-1.664087176322937, 1.7010948657989502], + [2.943120241165161, -4.601825714111328], + [1.640576720237732, -4.0114665031433105], + [-3.9588100910186768, -0.9486079216003418], + [-0.781627357006073, -0.03217676654458046], + [-4.115503311157227, -1.113403558731079], + [0.5119679570198059, 0.1771734058856964], + [6.979957103729248, -1.8397072553634644], + [-4.595970630645752, 5.135991096496582], + [1.0150822401046753, -4.911876678466797], + [6.497128009796143, -2.4571194648742676], + [-0.907943606376648, 10.80793571472168], + [1.7962148189544678, 0.49942660331726074], + [-0.8589911460876465, -1.0245000123977661], + [5.40466833114624, -2.9771955013275146], + [-4.915172100067139, 6.99624490737915], + [-1.659319281578064, 1.9051316976547241], + [3.681525468826294, 6.658957481384277], + [-4.564355850219727, 6.338809967041016], + [2.2963719367980957, 5.7584428787231445], + [-3.784729480743408, -2.391616106033325], + [-0.12445498257875443, -1.423389196395874], + [-3.994185209274292, 5.847006797790527], + [1.1841797828674316, -5.661420822143555], + [1.9951655864715576, 3.0859055519104004], + [2.03484845161438, 6.367690086364746], + [0.3955379128456116, -6.291703224182129], + [0.9853680729866028, -5.322167873382568], + [2.978394031524658, -4.653519630432129], + [0.6280348300933838, 5.737717628479004], + [-1.7836109399795532, 0.2275104820728302], + [0.6271952986717224, -5.061181545257568], + [-3.5373189449310303, 3.3597567081451416], + [0.6464555263519287, -4.8055572509765625], + [-3.5412847995758057, 5.732186317443848], + [-0.6963821053504944, 10.319108009338379], + [4.34616231918335, 7.550875186920166], + [8.664626121520996, -2.80566143989563], + [1.0389564037322998, -4.801156997680664], + [-4.518797874450684, 6.5170135498046875], + [-0.306576132774353, 9.680636405944824], + [-0.4055343270301819, 10.012752532958984], + [1.5906791687011719, 5.254533767700195], + [-2.2855939865112305, 0.26846808195114136], + [-1.4730207920074463, 11.918646812438965], + [-1.4852488040924072, 1.9595893621444702], + [-2.0736067295074463, -0.020690683275461197], + [8.977715492248535, -2.7729415893554688], + [1.0840810537338257, -6.490485191345215], + [-2.060595989227295, -0.5208067893981934], + [-2.1178340911865234, 1.77872633934021], + [-0.6296455264091492, 5.399268627166748], + [3.280932903289795, -5.056233882904053], + [2.752765417098999, -4.49147891998291], + [-1.8984880447387695, 0.48401176929473877], + [9.005006790161133, -2.7354137897491455], + [0.49556392431259155, -7.968393325805664], + [-4.7307915687561035, -0.8787726163864136], + [-0.47384166717529297, 10.131458282470703], + [-1.8641536235809326, 1.9815679788589478], + [0.8646187782287598, -8.069993019104004], + [-5.197775363922119, 7.017517566680908], + [-3.875162363052368, -1.407959222793579], + [7.164190292358398, -2.0178208351135254], + [0.6053524613380432, -5.957736968994141], + [-3.6120917797088623, -2.1615095138549805], + [-4.014614582061768, -1.6215431690216064], + [-5.874802112579346, 7.600577354431152], + [-0.865873396396637, 10.1189546585083], + [0.2383623719215393, -4.219476699829102], + [-3.877967596054077, -0.810655415058136], + [0.4183690547943115, -7.089354515075684], + [1.6722675561904907, 0.6066580414772034], + [1.9321064949035645, 4.218071937561035], + [-5.339486598968506, 4.316208839416504], + [1.5886708498001099, 2.5737709999084473], + [-3.0035593509674072, 4.8166351318359375], + [9.002852439880371, -2.700301170349121], + [4.81028413772583, -2.7470271587371826], + [0.9619320034980774, -5.513550758361816], + [0.8133823275566101, -4.136099815368652], + [6.800841808319092, -1.859029769897461], + [-2.4760587215423584, 2.313943862915039], + [7.415253162384033, -2.1946027278900146], + [6.321781635284424, 9.220191955566406], + [-4.492873668670654, -1.7787729501724243], + [0.4238230586051941, -3.9343793392181396], + [1.7379040718078613, -3.9543583393096924], + [-2.0821425914764404, 0.7791177034378052], + [-5.716965198516846, -4.8321638107299805], + [-4.087396144866943, -1.382125973701477], + [0.5005243420600891, -4.953546524047852], + [-1.3370511531829834, 11.473220825195312], + [-1.3166152238845825, 11.651844024658203], + [-5.41041898727417, 6.903530120849609], + [-4.80522346496582, -2.6437342166900635], + [-0.6791753172874451, 10.382660865783691], + [-0.6116415858268738, 0.615327775478363], + [-6.377986431121826, 8.418145179748535], + [-4.02192497253418, -2.913637399673462], + [4.339366436004639, 7.530620098114014], + [-5.5472941398620605, -0.836534857749939], + [2.974108934402466, 6.604177474975586], + [-3.3557815551757812, 5.272858619689941], + [-2.844754457473755, -0.7688180804252625], + [-2.558464765548706, 2.692927598953247], + [0.11793046444654465, 5.651130199432373], + [4.0921783447265625, -5.977865219116211], + [-3.2809908390045166, 4.478486061096191], + [6.951969623565674, -2.7405855655670166], + [-1.9023516178131104, 1.117698311805725], + [-3.599691152572632, -0.7753021717071533], + [-1.9405395984649658, 2.031198740005493], + [-1.5182881355285645, 12.468025207519531], + [1.8245043754577637, -5.451688766479492], + [1.129781723022461, -6.046758651733398], + [-1.254711627960205, 10.886926651000977], + [1.6465184688568115, -4.2719407081604], + [0.5386821031570435, -7.727113723754883], + [-1.8346847295761108, 4.017766952514648], + [0.7486115097999573, -7.427166938781738], + [2.887112617492676, -6.03621244430542], + [-0.5217812061309814, 10.127230644226074], + [2.644737958908081, 6.494227409362793], + [-1.1595207452774048, 10.932994842529297], + [-1.2205944061279297, 5.22088623046875], + [-4.864364147186279, 5.012235164642334], + [2.8715012073516846, -5.095854759216309], + [-1.3277432918548584, 11.619743347167969], + [0.4159409999847412, -6.89579963684082], + [0.35089606046676636, -5.101840972900391], + [-3.7100112438201904, -1.6585041284561157], + [0.9735515713691711, -5.8292741775512695], + [6.255268096923828, -3.1735074520111084], + [-1.9369637966156006, -1.0175985097885132], + [2.4101037979125977, -4.5103759765625], + [-0.893376886844635, 10.637123107910156], + [-3.054081678390503, 5.520630359649658], + [-4.756556510925293, 6.283786296844482], + [2.405921697616577, 0.7366468906402588], + [-1.1835103034973145, 11.313149452209473], + [0.689851701259613, -5.53050422668457], + [-4.279519557952881, -1.3093496561050415], + [1.1156725883483887, -5.7588605880737305], + [-1.9859548807144165, 2.0955300331115723], + [-1.3299882411956787, 11.28853988647461], + [-1.4515522718429565, 12.260019302368164], + [-3.691070795059204, -2.139812707901001], + [0.3901985287666321, -6.382896423339844], + [-0.4092544615268707, -2.6217949390411377], + [1.1612204313278198, -6.385829925537109], + [4.485901832580566, 7.635281562805176], + [6.39652681350708, -3.2417192459106445], + [0.8925597667694092, -6.990790843963623], + [-2.7097513675689697, -1.3435900211334229], + [-1.888022780418396, -0.9649550318717957], + [0.8351619243621826, -5.602405548095703], + [8.867195129394531, -2.8005130290985107], + [2.419276714324951, -5.036564826965332], + [0.34383219480514526, -6.425332069396973], + [-0.2745864689350128, -0.9867697358131409], + [-4.734206676483154, 3.6905713081359863], + [-0.8136664032936096, 10.205018997192383], + [1.8210965394973755, -5.662862777709961], + [0.126177579164505, -4.003625392913818], + [-4.328220844268799, 4.917698860168457], + [7.380186080932617, -4.023275852203369], + [-3.0937411785125732, 4.824592113494873], + [0.7326826453208923, -8.805965423583984], + [-3.4302520751953125, -2.2339706420898438], + [1.5628023147583008, 5.987805366516113], + [-2.3613455295562744, -1.8800283670425415], + [2.4722700119018555, -3.807446241378784], + [4.8144121170043945, 7.9440107345581055], + [-1.5847951173782349, 13.462920188903809], + [0.44446635246276855, -5.7918829917907715], + [-0.25650912523269653, -3.5745174884796143], + [1.891220211982727, -5.1378936767578125], + [-5.022021770477295, -0.7686527967453003], + [-3.232973098754883, 0.007353302091360092], + [2.5128014087677, -4.284506320953369], + [1.154585838317871, -0.10027569532394409], + [-3.3705148696899414, 5.55722188949585], + [-1.3177942037582397, 11.26746654510498], + [-3.4984962940216064, -2.199047327041626], + [8.159146308898926, -3.0037648677825928], + [-4.559402942657471, 6.449521064758301], + [-3.8413403034210205, -2.060781240463257], + [-1.276026964187622, 2.219707727432251], + [-3.8460190296173096, -2.9633305072784424], + [-4.485109806060791, -4.237396240234375], + [-0.40538445115089417, -0.4750325381755829], + [-0.5877901911735535, 9.925847053527832], + [1.1797387599945068, 1.4456030130386353], + [-5.160366058349609, 4.337357044219971], + [0.8472601771354675, -5.089144229888916], + [-0.06654606014490128, -3.5592753887176514], + [-5.684316635131836, 5.0417046546936035], + [-5.165358066558838, -1.3328651189804077], + [-0.7821024060249329, 9.659076690673828], + [-1.3224568367004395, 11.485148429870605], + [8.1072359085083, -2.4538893699645996], + [0.4207560420036316, -5.596569061279297], + [1.1664198637008667, 2.6198043823242188], + [-3.898150682449341, 0.5040096044540405], + [-0.7869954705238342, -0.8335170149803162], + [6.5462260246276855, -1.5670561790466309], + [6.260144233703613, -4.808873653411865], + [0.4579983353614807, -6.860105991363525], + [-3.572441339492798, -0.7918274998664856], + [-1.5485514402389526, 12.837333679199219], + [0.6584948301315308, -7.683067321777344], + [-1.2481274604797363, 1.7410157918930054], + [7.497763633728027, -3.389198064804077], + [0.03153675049543381, -3.965067148208618], + [5.396617889404297, 8.333724021911621], + [-3.114166021347046, -1.2823699712753296], + [-1.3034201860427856, 1.7673221826553345], + [1.4792407751083374, 6.361662864685059], + [7.657340049743652, -2.8536813259124756], + [-5.234813690185547, 6.156052589416504], + [5.583266258239746, -2.037346124649048], + [3.584256887435913, 6.552550315856934], + [-4.428247451782227, 5.562578201293945], + [6.741743564605713, -3.301194429397583], + [1.303466796875, 0.1161184161901474], + [1.2164093255996704, 5.782189846038818], + [5.70354700088501, -1.1814097166061401], + [0.44037801027297974, -6.004667282104492], + [-1.2757699489593506, 11.192092895507812], + [4.094784259796143, 7.199180603027344], + [-1.0831438302993774, 11.084243774414062], + [3.0883357524871826, -5.128573417663574], + [-2.081864356994629, 2.0732665061950684], + [-3.8405072689056396, -2.187380075454712], + [-3.411769151687622, 5.305891513824463], + [-4.421041488647461, 6.124858856201172], + [-4.292871475219727, -4.448662757873535], + [9.818604469299316, -2.9944019317626953], + [7.731957912445068, -2.1977145671844482], + [-1.4613301753997803, 1.2124016284942627], + [-0.7270238399505615, 9.412384986877441], + [-0.9744069576263428, 10.306631088256836], + [4.9879350662231445, 7.97792911529541], + [2.685774087905884, -4.477076530456543], + [-1.4295625686645508, 5.5684404373168945], + [-1.9192841053009033, 1.8769159317016602], + [1.9174219369888306, 3.429910182952881], + [1.0259809494018555, -6.10969352722168], + [0.6589654088020325, -9.18445110321045], + [0.60931396484375, -6.133347511291504], + [0.501514732837677, -0.7905632257461548], + [-2.8785345554351807, -0.49742990732192993], + [2.5801522731781006, -5.839412212371826], + [8.318467140197754, -3.301342725753784], + [-0.9085748195648193, -0.8002049326896667], + [1.1773152351379395, -7.144783973693848], + [-3.7893025875091553, -1.7461811304092407], + [2.384904146194458, 0.282789945602417], + [-3.510892629623413, -1.4880412817001343], + [2.8610007762908936, -5.630545616149902], + [4.16020393371582, 7.740022659301758], + [-4.462501525878906, 6.576332092285156], + [7.697000980377197, -2.533517837524414], + [1.7416893243789673, 4.088433742523193], + [-0.6726948022842407, 10.024789810180664], + [2.9023807048797607, -4.98137903213501], + [-4.418996334075928, -0.7346646785736084], + [-1.4218082427978516, 12.263429641723633], + [0.9637537598609924, 4.318713665008545], + [1.331777572631836, 0.007299628108739853], + [-3.611222505569458, -0.8014187812805176], + [2.678129196166992, -4.253928184509277], + [-3.57279634475708, -2.1915664672851562], + [2.2928786277770996, 0.18339675664901733], + [-4.138693332672119, -3.140138864517212], + [0.17410242557525635, -5.171464920043945], + [-2.0408973693847656, -1.3141425848007202], + [-3.060225248336792, -2.5831446647644043], + [3.6189141273498535, -3.838122844696045], + [4.463873386383057, 7.272544860839844], + [-3.3110387325286865, -1.1874743700027466], + [-0.6055314540863037, 9.92127513885498], + [1.1386830806732178, -6.529463768005371], + [1.7725340127944946, -5.187465667724609], + [-5.459722995758057, -1.3881922960281372], + [0.28389203548431396, 7.440897464752197], + [1.873353362083435, 5.155290603637695], + [-3.772071599960327, -1.7882293462753296], + [5.192194938659668, -1.3708223104476929], + [-4.368662357330322, -0.7628929615020752], + [0.11706920713186264, -4.336866855621338], + [0.6065500378608704, -6.8148345947265625], + [1.4823753833770752, 4.26329231262207], + [-2.377955675125122, 0.26384955644607544], + [-4.578018665313721, 0.11063581705093384], + [5.879073619842529, -1.1304121017456055], + [0.8703324198722839, -10.31785774230957], + [2.1691954135894775, -5.629810810089111], + [-0.39304131269454956, 9.56461238861084], + [-0.40842708945274353, -1.013903260231018], + [-1.220027208328247, 0.45869171619415283], + [2.219456195831299, 5.224663734436035], + [-2.29099702835083, 0.39786195755004883], + [0.5822033882141113, -8.438506126403809], + [-5.295412540435791, -0.8051167130470276], + [-2.2855753898620605, -1.3442190885543823], + [8.819692611694336, -2.6705105304718018], + [-3.927783250808716, -1.7256587743759155], + [5.263864517211914, -2.6409645080566406], + [2.1829843521118164, 6.017938137054443], + [-3.0063440799713135, -1.134000301361084], + [-5.470128536224365, 7.25492525100708], + [-1.8915677070617676, 0.5569616556167603], + [0.9977388978004456, 5.033304691314697], + [0.606069803237915, -8.414124488830566], + [-1.7497652769088745, 1.731357216835022], + [0.4533073306083679, -8.096612930297852], + [-4.18449068069458, 5.068850517272949], + [-3.610947370529175, -2.400890588760376], + [-4.849791049957275, -0.7249085903167725], + [-1.3099792003631592, 1.9130216836929321], + [-1.3357956409454346, 11.575374603271484], + [-2.8137552738189697, -1.0314160585403442], + [-1.5267150402069092, 12.348756790161133], + [-4.0643181800842285, -0.34108293056488037], + [-3.718416929244995, 4.178475856781006], + [-1.1605093479156494, -0.6201633214950562], + [-1.9876861572265625, 0.8333913087844849], + [1.494153618812561, 3.2424867153167725], + [0.5774121880531311, 5.60805606842041], + [3.87017822265625, 0.32558321952819824], + [-3.715337038040161, -1.9329625368118286], + [-5.755713939666748, 2.185516834259033], + [0.40580111742019653, -6.058687686920166], + [0.7913647294044495, -8.944920539855957], + [0.7858039140701294, -5.0012617111206055], + [-3.5082809925079346, 5.752369403839111], + [1.497525930404663, 4.286446571350098], + [2.9370720386505127, -4.803448677062988], + [2.118833541870117, 6.145814895629883], + [2.3095977306365967, -5.252311706542969], + [-3.1384360790252686, 5.094902038574219], + [7.735379219055176, -3.5318877696990967], + [-3.9962408542633057, 4.532569885253906], + [-2.726714849472046, -0.9035634398460388], + [-1.854675531387329, 1.6190441846847534], + [2.7469866275787354, -4.604342937469482], + [-4.202884674072266, 2.885756492614746], + [2.3627641201019287, 5.281822204589844], + [-2.0215322971343994, 2.209653377532959], + [2.0378024578094482, 3.1946942806243896], + [1.7410123348236084, 5.773392200469971], + [-3.6305882930755615, -3.569998025894165], + [1.6325657367706299, 3.3777108192443848], + [2.6255056858062744, -4.725033760070801], + [-3.422780752182007, -2.225454330444336], + [-3.2932004928588867, 5.435135841369629], + [-1.787240982055664, 0.3314080238342285], + [6.37802267074585, -2.64742112159729], + [2.0106875896453857, -7.076538562774658], + [-4.338751316070557, -0.7822241187095642], + [6.76703405380249, -2.0128562450408936], + [0.6498452425003052, -7.394474983215332], + [0.2482510507106781, -5.6779069900512695], + [2.7063214778900146, 5.610198974609375], + [-0.5652249455451965, -1.3285763263702393], + [-3.6134555339813232, -2.245079755783081], + [-1.6468013525009155, 0.2035829722881317], + [-0.4883033335208893, -1.4125615358352661], + [-4.931399345397949, 5.73244571685791], + [-3.9877662658691406, -1.4507434368133545], + [-1.916308879852295, 1.991228699684143], + [0.38956528902053833, -5.0142645835876465], + [-1.1199607849121094, 11.040773391723633], + [8.634591102600098, -2.555419445037842], + [-2.0345394611358643, 2.096811056137085], + [-3.656054735183716, -1.3637717962265015], + [-1.3423092365264893, 11.549786567687988], + [-4.290229320526123, -3.2689549922943115], + [-1.1681427955627441, 9.874844551086426], + [2.262543201446533, 5.971811294555664], + [6.229506969451904, -2.704936981201172], + [-0.3748513460159302, 9.870628356933594], + [-2.2015042304992676, -1.7275986671447754], + [-0.9349830746650696, 9.325233459472656], + [-1.3089418411254883, 11.681066513061523], + [-1.4358361959457397, 12.38256549835205], + [4.153228759765625, 7.4750142097473145], + [-1.1730566024780273, 10.178622245788574], + [1.0738224983215332, 3.623699426651001], + [7.7083353996276855, -2.8438594341278076], + [6.3671135902404785, -1.6685417890548706], + [1.7962888479232788, -0.0011822469532489777], + [3.0165855884552, -5.248954772949219], + [5.500431060791016, -1.3077340126037598], + [0.32584667205810547, -6.374279975891113], + [6.270559310913086, -4.357044219970703], + [-3.218780279159546, -0.9414939880371094], + [-0.5056784152984619, -1.825801968574524], + [-0.3722887635231018, 9.55967903137207], + [-1.269700050354004, 1.470533013343811], + [0.19116133451461792, -4.056859016418457], + [-4.589038372039795, 5.222021102905273], + [-4.238643169403076, -0.8909611701965332], + [0.7125359177589417, -0.3739579916000366], + [0.20009201765060425, -5.766784191131592], + [-0.8648397326469421, 9.846477508544922], + [5.784862041473389, -1.1380351781845093], + [1.2750535011291504, -4.210681915283203], + [2.8304054737091064, -4.476810932159424], + [-0.5299056172370911, -3.1900155544281006], + [0.16449540853500366, -5.16644287109375], + [2.774256467819214, 6.224826812744141], + [-2.5508744716644287, 2.6589982509613037], + [9.419731140136719, -2.7963311672210693], + [1.000199317932129, -0.1571502685546875], + [-1.8598992824554443, 1.5534234046936035], + [0.5560279488563538, -7.594978332519531], + [1.1171802282333374, -5.959521770477295], + [6.972973823547363, -1.8813115358352661], + [-2.184319019317627, 5.337915420532227], + [-4.228892803192139, -1.9919614791870117], + [-3.445127248764038, -1.189156413078308], + [-1.9286470413208008, 6.0000834465026855], + [-3.0511581897735596, 6.204063415527344], + [-3.9646382331848145, 4.310920238494873], + [0.34311312437057495, -5.803949356079102], + [-1.4195454120635986, 11.876970291137695], + [6.714747905731201, -3.175107479095459], + [-3.946425199508667, -0.8391216993331909], + [-4.80845308303833, 6.636880874633789], + [0.35087651014328003, -7.1154985427856445], + [-0.827580988407135, 10.907525062561035], + [2.176802396774292, -3.5091874599456787], + [-2.693418502807617, -0.850243091583252], + [-0.5427299737930298, 5.205760955810547], + [-1.655150294303894, 1.3874019384384155], + [-4.932103157043457, 5.838468074798584], + [5.893302917480469, -3.691622257232666], + [-3.2239530086517334, -0.7507292032241821], + [1.540820837020874, 1.7688411474227905], + [2.0097603797912598, 0.6852267384529114], + [0.20786947011947632, -4.299389839172363], + [-4.210996150970459, 5.492886543273926], + [-3.005086660385132, -0.7693935632705688], + [-1.6586287021636963, 13.651992797851562], + [3.2870752811431885, -4.829069137573242], + [-3.174055337905884, 6.3004913330078125], + [8.421814918518066, -2.4322471618652344], + [-2.848025321960449, -0.8060817718505859], + [-3.1529204845428467, -1.0975043773651123], + [7.474084377288818, -2.696009397506714], + [-0.8088675141334534, 10.098398208618164], + [2.165334701538086, 5.292411804199219], + [1.606872320175171, 4.300955772399902], + [-3.7644686698913574, -2.421456813812256], + [-3.1983752250671387, -0.2667282223701477], + [1.534923791885376, 5.520471096038818], + [-0.4800189137458801, -2.4985880851745605], + [-2.729099750518799, -3.8888490200042725], + [0.9623753428459167, 0.3550037145614624], + [-4.5594868659973145, 7.073849678039551], + [-0.9278576970100403, 10.341422080993652], + [-3.7203028202056885, -2.1120502948760986], + [-1.2617666721343994, 11.368852615356445], + [-0.006162978708744049, -5.16304874420166], + [0.7190054655075073, -7.729539394378662], + [-4.126399517059326, 7.0127949714660645], + [2.631225109100342, 6.303027629852295], + [-1.1381545066833496, 11.416969299316406], + [-0.7870619297027588, 10.673863410949707], + [7.447541236877441, -3.0449421405792236], + [0.4337480068206787, -7.509753704071045], + [-0.9189298748970032, 9.867069244384766], + [0.7543189525604248, -8.430877685546875], + [-0.7226369380950928, -2.0523786544799805], + [-4.355100154876709, -3.1558001041412354], + [2.618129253387451, 5.516842365264893], + [-0.6687400937080383, -3.68149471282959], + [-3.1252939701080322, -2.0490646362304688], + [-4.1958909034729, -1.8578253984451294], + [-0.13974720239639282, 9.369797706604004], + [7.5920939445495605, -4.012457370758057], + [0.17811739444732666, -6.186459541320801], + [-4.780050277709961, 5.450689792633057], + [-1.24858558177948, 1.5203496217727661], + [-3.8154659271240234, 4.049834251403809], + [-1.2785778045654297, 11.272199630737305], + [-0.30083727836608887, -1.3076125383377075], + [0.7536819577217102, -4.756422996520996], + [-1.1110632419586182, 10.631229400634766], + [-2.2471556663513184, -1.3974905014038086], + [1.291659951210022, 0.4103611707687378], + [0.6349276900291443, -0.02918151393532753], + [-2.3258230686187744, 6.017444610595703], + [0.019930772483348846, -0.9543712735176086], + [-3.487255334854126, 5.725221633911133], + [0.6343318819999695, -8.17756462097168], + [1.6360998153686523, 3.4810454845428467], + [-4.109316825866699, -2.6416115760803223], + [0.7935771942138672, -8.27534008026123], + [-4.082332611083984, 5.9023332595825195], + [-0.307411789894104, 9.260119438171387], + [5.776882171630859, -1.3754268884658813], + [-4.218430995941162, -1.710702896118164], + [-5.231497287750244, 5.783431053161621], + [-0.390042781829834, -1.692444920539856], + [-2.7030656337738037, -2.1335418224334717], + [-4.094508171081543, -3.3225629329681396], + [0.08005674928426743, -3.985576868057251], + [2.6911356449127197, 5.446529388427734], + [0.9077329635620117, 0.5449643135070801], + [0.7558306455612183, -5.922222137451172], + [-3.299720525741577, 5.609624862670898], + [-1.6888200044631958, -0.8321021795272827], + [-3.229060173034668, -1.2313233613967896], + [-4.4346923828125, -1.052182912826538], + [-2.9588687419891357, 3.029646158218384], + [-0.5010938048362732, 10.108186721801758], + [3.120396375656128, 6.299307823181152], + [-0.07263214141130447, -5.443519592285156], + [7.840722560882568, -3.5620105266571045], + [0.768063485622406, -7.7389326095581055], + [-4.968298435211182, 6.1969685554504395], + [0.27513551712036133, -5.890386581420898], + [4.097997665405273, 7.111531734466553], + [-3.976419687271118, -1.8776034116744995], + [-3.9003477096557617, -1.058911681175232], + [2.0710887908935547, -6.372035980224609], + [2.8639395236968994, -4.60430383682251], + [1.547719955444336, -5.295989036560059], + [7.734619140625, -2.591505289077759], + [-0.7958945631980896, 11.138365745544434], + [0.45698851346969604, -5.268802165985107], + [2.9243552684783936, -4.934876441955566], + [-0.3280296325683594, 9.243602752685547], + [-0.031744010746479034, -4.814654350280762], + [2.8546650409698486, 6.3706512451171875], + [-3.7296035289764404, -3.042131185531616], + [5.839883327484131, 8.528334617614746], + [-3.7601664066314697, -2.887329578399658], + [-1.2851258516311646, 10.764606475830078], + [-1.9964540004730225, 2.579214334487915], + [0.902888834476471, 1.2099189758300781], + [-4.46595573425293, -0.7333110570907593], + [-4.089223384857178, -0.2606772780418396], + [0.20612269639968872, -5.979301452636719], + [-3.643817186355591, -1.5882691144943237], + [7.206418991088867, -3.2492215633392334], + [8.060068130493164, -2.949632406234741], + [0.5544615387916565, -6.5348663330078125], + [-4.683051586151123, -1.0730178356170654], + [-1.1104068756103516, -0.5336226224899292], + [2.6551430225372314, -5.095237731933594], + [1.2065280675888062, -7.069744110107422], + [-0.8639581799507141, -0.9888982176780701], + [-0.1511407494544983, 8.445626258850098], + [-4.245483875274658, 3.6305997371673584], + [-5.323256492614746, 6.566365718841553], + [-3.3358511924743652, -0.8975242376327515], + [6.2017645835876465, -1.9572426080703735], + [4.927872180938721, -0.9138262271881104], + [-1.701427936553955, 0.4552903175354004], + [0.2975054383277893, -6.598328590393066], + [-3.4940807819366455, -0.8180876970291138], + [-4.9130682945251465, -3.355625867843628], + [-1.8436414003372192, 1.3103969097137451], + [-1.7517362833023071, 0.5135101079940796], + [-1.8437919616699219, 1.1257072687149048], + [0.9606884121894836, 5.477054595947266], + [-1.1654410362243652, 9.029901504516602], + [0.2064589262008667, -6.536981105804443], + [-2.926974058151245, -1.0168019533157349], + [-0.290022075176239, -3.485318422317505], + [-3.0974857807159424, 3.5424680709838867], + [2.34676456451416, -4.1734700202941895], + [-5.173616409301758, 6.655712127685547], + [-2.877235174179077, -1.0053024291992188], + [-3.6197831630706787, -1.706595540046692], + [3.6474721431732178, 7.232608795166016], + [0.43049871921539307, -7.750289440155029], + [0.5489519238471985, -4.657705783843994], + [-1.7160756587982178, 1.9136918783187866], + [-4.081448078155518, -2.744781494140625], + [1.7012535333633423, 5.340838432312012], + [-3.215510606765747, -1.5777579545974731], + [-5.331146717071533, 4.755215644836426], + [-3.6340768337249756, -1.6746461391448975], + [-4.389630317687988, -2.5895187854766846], + [-3.007368803024292, -2.0019068717956543], + [2.8654625415802, -4.564952373504639], + [-4.3701276779174805, 6.610255718231201], + [-0.9096171259880066, 5.425219535827637], + [-0.7642520070075989, -1.0486572980880737], + [3.5425899028778076, -4.336023807525635], + [1.0056226253509521, -0.2770833671092987], + [0.6726101636886597, 3.5345962047576904], + [0.6548717617988586, -8.793924331665039], + [-6.125454425811768, 5.860928535461426], + [-2.7674951553344727, 4.207202434539795], + [7.871484279632568, -2.8162782192230225], + [-2.272918701171875, -2.135493755340576], + [-3.4361672401428223, 3.8835856914520264], + [-3.2649548053741455, -1.3830288648605347], + [5.792542934417725, -3.580698013305664], + [-3.9252898693084717, -2.5510408878326416], + [1.7286655902862549, -4.235445022583008], + [2.0012764930725098, 5.4450883865356445], + [-1.4015154838562012, 11.822277069091797], + [2.113788366317749, -4.022733688354492], + [-0.8899447321891785, 9.839601516723633], + [-1.8153364658355713, 1.8335999250411987], + [0.6760091781616211, -7.293255805969238], + [-3.94814133644104, 6.318220615386963], + [0.5392950773239136, -7.222342491149902], + [3.0324766635894775, -4.820419788360596], + [-4.049587249755859, 6.800607681274414], + [0.11093219369649887, -5.596497535705566], + [-2.0041117668151855, -0.03053707256913185], + [-4.461024284362793, -1.0831300020217896], + [-4.56577730178833, 4.987372875213623], + [6.4160590171813965, -3.6154391765594482], + [3.295273780822754, -4.435122013092041], + [1.3006505966186523, 5.0500593185424805], + [-3.681175470352173, -3.8002710342407227], + [7.055533409118652, -2.937718629837036], + [-3.316230058670044, -3.581050157546997], + [-0.06497115641832352, 9.41392707824707], + [8.860337257385254, -2.6876585483551025], + [2.4201810359954834, -5.111404895782471], + [6.8667988777160645, -3.1971724033355713], + [-0.696497917175293, 10.568098068237305], + [-4.9090752601623535, 5.082126140594482], + [-5.261253356933594, -1.2989786863327026], + [-3.5137336254119873, -1.333261251449585], + [-2.8537700176239014, 5.719178199768066], + [-4.26453161239624, 6.804006576538086], + [-1.4295964241027832, 12.413702011108398], + [0.7193331122398376, -5.736100673675537], + [0.3678470253944397, 1.4948481321334839], + [-2.21063232421875, -1.2502787113189697], + [0.3625909090042114, -6.889462947845459], + [-4.534806251525879, 6.860918045043945], + [-4.5965189933776855, 1.825212836265564], + [-3.9673073291778564, 5.318420886993408], + [-0.7735391855239868, 10.457103729248047], + [-3.3467531204223633, 5.365472316741943], + [2.6414198875427246, -4.773143291473389], + [-2.0534579753875732, 2.6093356609344482], + [1.2199671268463135, -0.019438598304986954], + [-5.701985836029053, 7.347287178039551], + [-1.2052512168884277, 10.785216331481934], + [-1.4248050451278687, 11.990955352783203], + [4.176031589508057, 7.280482292175293], + [2.759653091430664, -5.100000858306885], + [-4.195330619812012, -1.2027102708816528], + [-5.962217330932617, 7.611423492431641], + [-0.7179423570632935, 10.367733001708984], + [1.5845293998718262, 4.956386566162109], + [-1.727792501449585, 0.7714155912399292], + [-3.935844659805298, -1.2878519296646118], + [-3.8083178997039795, -0.40421754121780396], + [-1.2781444787979126, 1.6127487421035767], + [1.933898687362671, 5.6270551681518555], + [0.7623084187507629, -8.829559326171875], + [-1.1040053367614746, 10.737191200256348], + [-3.7996509075164795, -1.0543287992477417], + [2.303694248199463, 6.061992645263672], + [-0.8364136219024658, 10.575645446777344], + [-0.9417387843132019, 11.163968086242676], + [-5.215510845184326, 5.112936019897461], + [-3.183349132537842, -1.0465539693832397], + [-3.3282082080841064, -1.9615238904953003], + [0.5959848761558533, -8.090621948242188], + [-1.5991077423095703, -1.1678028106689453], + [0.3125113248825073, -6.353092193603516], + [0.5559842586517334, -6.32282829284668], + [0.41538524627685547, -6.227487564086914], + [-3.9437341690063477, -3.4009785652160645], + [-1.0401866436004639, 0.546255886554718], + [0.549921452999115, -7.740438938140869], + [0.0452645942568779, -4.059993743896484], + [-3.8740687370300293, -2.168919324874878], + [-1.902106761932373, 1.1096549034118652], + [-4.345203876495361, 5.933351993560791], + [0.5240650773048401, -4.376997947692871], + [-3.9383599758148193, -1.664931058883667], + [-1.4401201009750366, 12.29681396484375], + [3.0080435276031494, -4.712533950805664], + [1.6527174711227417, -4.434322834014893], + [-3.493119955062866, -2.829257011413574], + [-1.1744428873062134, 10.851520538330078], + [-4.013886451721191, -1.5089627504348755], + [7.637509822845459, -2.5601723194122314], + [-1.0122157335281372, 9.3508882522583], + [-1.4840097427368164, 12.268318176269531], + [-0.16177228093147278, -1.2983347177505493], + [8.301100730895996, -2.680901288986206], + [-3.7469375133514404, -2.0727155208587646], + [-3.935601234436035, -4.027853965759277], + [0.7327102422714233, -5.632284164428711], + [-4.55919885635376, -4.58160924911499], + [2.8236639499664307, -4.756448268890381], + [2.1223819255828857, 1.3095475435256958], + [1.9730398654937744, -2.158942699432373], + [-0.9030476212501526, 11.144542694091797], + [1.2358115911483765, 8.46457290649414], + [1.7534157037734985, 5.357064247131348], + [-1.2743313312530518, 11.666473388671875], + [-0.24322545528411865, -1.100529670715332], + [-0.8173266649246216, 9.368314743041992], + [-3.6496827602386475, -1.6636511087417603], + [0.6981350779533386, -8.884793281555176], + [0.5672830939292908, -7.49232816696167], + [0.029252104461193085, -5.63851261138916], + [0.26798319816589355, -4.374119281768799], + [3.418360710144043, 6.529326438903809], + [-4.015867233276367, -2.3809540271759033], + [7.834903240203857, -3.0932135581970215], + [0.7309383749961853, -0.6339623928070068], + [-0.7036336064338684, 9.975435256958008], + [1.474640965461731, -6.1455912590026855], + [0.8551315069198608, -4.334532260894775], + [-0.6384385228157043, 9.76237678527832], + [-3.5046536922454834, -1.4271347522735596], + [-0.2963652014732361, -1.5550261735916138], + [7.6254096031188965, -2.868370532989502], + [-3.1168558597564697, -1.2769566774368286], + [-4.2741312980651855, 6.131936073303223], + [-1.43951416015625, 12.372392654418945], + [0.6134454011917114, -7.131855487823486], + [-2.190612316131592, 3.066896438598633], + [-3.8303635120391846, 5.786511421203613], + [7.8183369636535645, -3.273252248764038], + [0.25523310899734497, -6.068355083465576], + [8.151352882385254, -2.7593495845794678], + [-3.686293840408325, -1.773206114768982], + [1.235016942024231, -0.296170711517334], + [-3.6316874027252197, -0.6292033195495605], + [-5.283790111541748, 6.296503067016602], + [2.5286762714385986, 0.5025825500488281], + [-2.031909704208374, 1.3851426839828491], + [-1.9754670858383179, 2.565648317337036], + [-1.2863870859146118, 11.021388053894043], + [0.42485278844833374, -6.975909233093262], + [2.2027688026428223, -4.42319917678833], + [8.161051750183105, -2.910353899002075], + [-5.3258538246154785, -4.142179489135742], + [7.051692485809326, -2.9534218311309814], + [-5.334394931793213, -4.278632164001465], + [-5.502360820770264, 6.501285076141357], + [-3.9475698471069336, 5.753079414367676], + [-2.4041378498077393, 2.389350652694702], + [-1.3740044832229614, 11.930832862854004], + [7.928721904754639, -2.4565317630767822], + [7.380295276641846, -2.1079599857330322], + [-4.3220953941345215, -3.641420841217041], + [-1.3985298871994019, 11.609392166137695], + [-0.6588077545166016, -2.4741318225860596], + [0.5095221996307373, -5.963879585266113], + [-4.351796627044678, 6.427387237548828], + [-3.9591548442840576, 3.6141374111175537], + [7.08191442489624, -1.9654805660247803], + [5.624692440032959, -1.406907558441162], + [0.675125241279602, -6.9979248046875], + [2.7756128311157227, -4.650444030761719], + [0.6071427464485168, -8.838781356811523], + [-2.406395673751831, 2.3764963150024414], + [0.3968847990036011, -7.255690097808838], + [2.830265760421753, -4.632702350616455], + [-0.6112993359565735, 0.4267169237136841], + [0.641899049282074, -8.76079273223877], + [-1.986861228942871, 2.3883867263793945], + [-1.2926443815231323, 11.5347900390625], + [0.2545262575149536, -6.145463466644287], + [2.52010440826416, -4.839515686035156], + [2.1269490718841553, -4.05646276473999], + [0.6253820061683655, -6.02327299118042], + [6.386499404907227, -4.200362205505371], + [-0.526088535785675, 9.577356338500977], + [0.3003159761428833, -4.90035343170166], + [1.4078705310821533, 0.012328486889600754], + [1.2263152599334717, -4.424208164215088], + [-1.5578664541244507, -0.4762324094772339], + [-0.9165896773338318, 11.077489852905273], + [-0.4211779236793518, 8.52590274810791], + [-3.763805866241455, 5.908431053161621], + [2.905937910079956, -4.981479167938232], + [-0.4386829733848572, 8.895036697387695], + [5.24936056137085, -1.5997382402420044], + [2.0977883338928223, 5.5190324783325195], + [-0.4132596254348755, -2.481456995010376], + [-1.731166124343872, 1.5327355861663818], + [-3.8293869495391846, -2.392111301422119], + [-4.505171298980713, -3.6770172119140625], + [-3.824885606765747, -1.7621248960494995], + [9.234862327575684, -2.94813871383667], + [2.8654625415802, -4.7536773681640625], + [-1.6696696281433105, 1.4444193840026855], + [-4.877137660980225, -3.9277470111846924], + [-2.274038553237915, -1.1883236169815063], + [-0.4526510238647461, 8.05378246307373], + [-0.684590220451355, 9.923896789550781], + [4.489852428436279, 7.467337131500244], + [-1.1289830207824707, 10.351581573486328], + [-1.0272281169891357, 10.451656341552734], + [8.95992374420166, -2.8600571155548096], + [7.195425510406494, -2.7271888256073], + [-2.0410890579223633, -1.1121492385864258], + [-4.317753314971924, 6.739317893981934], + [-1.4594895839691162, 12.466474533081055], + [-3.5557825565338135, -1.0715962648391724], + [-2.3166322708129883, -1.3237332105636597], + [1.7804765701293945, -6.763413906097412], + [-2.9258038997650146, -0.5897376537322998], + [7.109344959259033, -2.0232744216918945], + [-2.3775620460510254, 2.6933021545410156], + [-2.502662420272827, -0.8793463110923767], + [-4.989947319030762, 6.891133785247803], + [0.6446070671081543, -8.115352630615234], + [-0.3876456320285797, -0.31326210498809814], + [8.488667488098145, -2.8029603958129883], + [-1.5058164596557617, 12.61300277709961], + [-4.000677108764648, -2.058649778366089], + [-3.137145757675171, -0.03050840273499489], + [0.5823983550071716, -7.852046012878418], + [1.1894049644470215, -5.83966064453125], + [2.7495343685150146, 5.927040100097656], + [-0.6962860226631165, 9.969881057739258], + [-3.7533466815948486, -2.4153892993927], + [-4.320923805236816, -0.9235022664070129], + [-3.204500436782837, -1.1248286962509155], + [-0.14981049299240112, 8.361635208129883], + [4.889962673187256, 7.772834777832031], + [-1.415584921836853, 1.4081858396530151], + [6.16794490814209, -2.1624767780303955], + [-0.6509045958518982, 9.777329444885254], + [2.1575429439544678, 6.124802589416504], + [-5.3800506591796875, -0.910559892654419], + [2.9560258388519287, 5.9559149742126465], + [-0.8012869954109192, 5.44182014465332], + [1.753543734550476, 0.9935396909713745], + [-3.475653886795044, -2.5626986026763916], + [-3.7422726154327393, -0.9891327619552612], + [-3.4240951538085938, -1.7235156297683716], + [4.3712615966796875, 7.222941875457764], + [-4.497278690338135, -3.5298514366149902], + [8.204158782958984, -2.9799983501434326], + [-3.7765512466430664, -1.111480474472046], + [7.020856857299805, -2.576765775680542], + [-0.024123020470142365, -5.204011917114258], + [-4.561338901519775, 1.7312935590744019], + [-0.13132667541503906, -4.11392068862915], + [-4.155726432800293, -3.280329465866089], + [-0.49928873777389526, 10.307249069213867], + [-5.274594783782959, 7.0625786781311035], + [-1.8812875747680664, 5.3184709548950195], + [-3.330155372619629, -0.9706655740737915], + [-5.2896728515625, -1.0910409688949585], + [-6.182363033294678, -1.0792423486709595], + [9.606104850769043, -2.873255968093872], + [2.6151349544525146, -4.339217185974121], + [-1.1216814517974854, -0.5912544131278992], + [-1.2617889642715454, 1.4502840042114258], + [-1.7480794191360474, 1.5286974906921387], + [-2.1315033435821533, -0.08362466096878052], + [-1.0339961051940918, 10.22979736328125], + [-3.5409953594207764, -1.238821029663086], + [-0.0216047540307045, -0.18559816479682922], + [-0.4568382203578949, -1.0027323961257935], + [-0.8305819630622864, 9.906452178955078], + [-5.921485424041748, 4.569952011108398], + [6.922893524169922, -3.026230812072754], + [-2.7724790573120117, -0.5302274823188782], + [2.3135411739349365, -4.5316643714904785], + [1.276757001876831, -5.02795934677124], + [-0.3179236054420471, 8.117633819580078], + [1.618978500366211, -4.069331645965576], + [-3.2992420196533203, -2.885157823562622], + [-3.9243991374969482, -2.5782864093780518], + [1.6676077842712402, 1.7623984813690186], + [-4.664418697357178, 6.472708702087402], + [-2.0976288318634033, -0.5682085156440735], + [-2.0750179290771484, 4.050400733947754], + [-3.251782178878784, -1.9092656373977661], + [-3.5398967266082764, -1.901105284690857], + [0.911517858505249, -5.7726335525512695], + [-0.45642590522766113, -3.7265188694000244], + [-4.083996772766113, 6.9708662033081055], + [0.36082130670547485, -5.538125038146973], + [6.305446624755859, -2.025865316390991], + [-1.4415483474731445, 12.037038803100586], + [8.83888053894043, -3.1427204608917236], + [-2.8602917194366455, 6.095154285430908], + [-1.540772795677185, 1.2543390989303589], + [-0.10121006518602371, -3.2745168209075928], + [-0.3388267755508423, 9.943717956542969], + [-4.942094802856445, -0.6503679752349854], + [1.9124318361282349, -4.29557466506958], + [-5.002521991729736, 6.880653381347656], + [0.6100139021873474, -7.994442939758301], + [6.560503959655762, -2.703158140182495], + [2.9196529388427734, -4.476062774658203], + [2.7415976524353027, -4.449652194976807], + [0.4600260257720947, -7.111073017120361], + [0.8237201571464539, 5.8073320388793945], + [6.5698065757751465, -1.8208506107330322], + [0.8176501393318176, -8.83772087097168], + [-3.9835755825042725, -1.2275179624557495], + [-3.2112209796905518, -1.0528420209884644], + [0.8543788194656372, 5.908236503601074], + [-1.6180509328842163, 0.41209676861763], + [-4.086720943450928, 6.3039984703063965], + [-0.28025054931640625, 7.960195541381836], + [2.5405421257019043, -4.405298709869385], + [-1.0693812370300293, 10.745274543762207], + [-4.748965740203857, 6.082458972930908], + [-4.936521053314209, 4.488819122314453], + [-3.563845634460449, 5.079306602478027], + [8.228312492370605, -2.392798900604248], + [8.779899597167969, -2.6406986713409424], + [-3.793140172958374, -1.2327033281326294], + [2.7934610843658447, -4.347123146057129], + [-2.129988431930542, -0.3267948031425476], + [-3.6142616271972656, -2.3031914234161377], + [0.764975368976593, -6.274962425231934], + [-0.4904392957687378, -1.4973214864730835], + [4.516757011413574, 7.400730609893799], + [-1.9540269374847412, 0.48292076587677], + [-4.037329196929932, -0.7394757270812988], + [0.18243885040283203, -5.271076202392578], + [-4.37305212020874, -2.403022050857544], + [8.084183692932129, -2.5172839164733887], + [-5.288464069366455, 6.754444122314453], + [0.2165595293045044, -6.530411720275879], + [-1.417815089225769, 11.708738327026367], + [4.894344329833984, 7.79831600189209], + [0.06757175177335739, -2.356804132461548], + [-0.6843868494033813, 9.635406494140625], + [0.33947354555130005, -6.5311737060546875], + [0.8335750699043274, 6.19362211227417], + [-0.29551929235458374, 8.765509605407715], + [1.0265233516693115, 4.620319366455078], + [-4.780139446258545, -0.8962084054946899], + [3.0988807678222656, 6.4226813316345215], + [-5.689548492431641, 4.439467906951904], + [0.4989929795265198, -7.377388000488281], + [1.0736445188522339, 0.411763459444046], + [-2.08400821685791, 6.035334587097168], + [-5.673498153686523, 7.097390651702881], + [4.898785591125488, 7.76200008392334], + [0.7580811381340027, -7.202810287475586], + [7.103935241699219, -2.4377706050872803], + [3.395899534225464, 7.018550872802734], + [-0.10111183673143387, 8.733185768127441], + [3.3596255779266357, 7.036009788513184], + [-4.865583896636963, -1.9297703504562378], + [-3.450594663619995, -2.5073180198669434], + [-3.572709321975708, 6.040685176849365], + [5.536275863647461, -1.2741854190826416], + [-4.847485065460205, -1.2556384801864624], + [9.1461820602417, -2.826688289642334], + [-0.2542842626571655, 7.8028974533081055], + [6.928056240081787, -3.4962639808654785], + [-0.1833818554878235, 8.944168090820312], + [0.49818485975265503, -7.676721096038818], + [5.3115363121032715, -3.9214611053466797], + [-0.2837219834327698, 9.10715389251709], + [-0.16639411449432373, 9.707103729248047], + [6.481861114501953, -2.0450265407562256], + [2.3821017742156982, 4.967537879943848], + [-0.9203296899795532, 1.4147778749465942], + [-3.6873574256896973, 5.556867599487305], + [-0.06985241919755936, -5.155467987060547], + [-5.1482954025268555, 3.4647912979125977], + [-4.977057933807373, 6.726438522338867], + [1.2530200481414795, 4.11671257019043], + [10.016759872436523, -3.012748956680298], + [-4.0785088539123535, 5.91961669921875], + [-2.9359514713287354, -1.7543047666549683], + [-1.2825640439987183, 11.456439971923828], + [-0.12029100209474564, 7.718984127044678], + [2.03969144821167, 0.9997106790542603], + [4.094784259796143, 7.435726165771484], + [-1.4752531051635742, 0.8751007914543152], + [-3.7636570930480957, 5.42546272277832], + [-5.1898627281188965, -0.8812569379806519], + [1.428130865097046, -7.231295585632324], + [1.5624724626541138, 6.639636039733887], + [7.07572603225708, -2.2690670490264893], + [-0.793907642364502, 10.094642639160156], + [-2.903799057006836, -3.0686745643615723], + [0.42484819889068604, -6.726043701171875], + [-0.43796098232269287, 9.870660781860352], + [0.45113831758499146, -6.542484283447266], + [9.892899513244629, -3.0239179134368896], + [-0.3778895139694214, 9.767231941223145], + [0.09078823775053024, -1.1140800714492798], + [0.6467035412788391, -8.286717414855957], + [-4.542677402496338, 6.526798725128174], + [1.3915507793426514, -6.316726207733154], + [-3.6015331745147705, -1.630881428718567], + [-2.19144344329834, 0.9144068956375122], + [-1.3424861431121826, -0.38803499937057495], + [7.200446128845215, -3.484037399291992], + [-1.1751312017440796, 0.7913069128990173], + [-3.5212440490722656, -1.024320363998413], + [0.6616005301475525, -8.137850761413574], + [-3.787132501602173, 6.502972602844238], + [1.2711447477340698, 0.37319231033325195], + [-5.528338432312012, 7.822756767272949], + [-1.1815615892410278, 4.436055660247803], + [-4.1539692878723145, -0.5129351019859314], + [0.3892596364021301, -5.50123405456543], + [6.9055047035217285, -2.070870876312256], + [7.8097825050354, -3.034376621246338], + [6.270803928375244, -2.027951240539551], + [1.2342472076416016, -3.477370262145996], + [-0.9850706458091736, 10.906736373901367], + [0.9984106421470642, -4.806814193725586], + [0.6476332545280457, -7.902634143829346], + [2.3514578342437744, -5.221602916717529], + [2.5339572429656982, -5.407145023345947], + [-1.3576222658157349, 11.688105583190918], + [-3.2492852210998535, -1.482478380203247], + [-1.7943147420883179, 0.7294613718986511], + [8.503835678100586, -2.530259370803833], + [-2.1637964248657227, -0.8151932954788208], + [1.998598337173462, 1.0648339986801147], + [6.419369697570801, -2.20124888420105], + [-4.804501056671143, 5.730945587158203], + [-3.727864980697632, 5.71291446685791], + [-2.1462905406951904, 2.1986961364746094], + [-0.49690723419189453, 9.799849510192871], + [-3.6531765460968018, -1.852304220199585], + [-0.7561220526695251, 9.786991119384766], + [0.5576908588409424, -6.488090515136719], + [0.527840793132782, -7.605891227722168], + [1.7295200824737549, 5.939830780029297], + [1.0550010204315186, -4.093297481536865], + [8.577988624572754, -2.5403897762298584], + [1.872955560684204, 4.830047130584717], + [-1.788094162940979, 1.989688754081726], + [-1.7620761394500732, -0.32860860228538513], + [7.228265762329102, -3.2816126346588135], + [-2.798020124435425, -0.8348350524902344], + [2.270983934402466, -4.727358818054199], + [-3.6556050777435303, -0.7446825504302979], + [-3.6140313148498535, -1.1352335214614868], + [2.5569846630096436, 0.3848099410533905], + [-0.9238571524620056, 10.489511489868164], + [-3.9643869400024414, -2.375389337539673], + [-1.2691824436187744, 11.36238956451416], + [-1.7682570219039917, 1.153639793395996], + [5.3232951164245605, -3.3884665966033936], + [-1.4978654384613037, 1.677287220954895], + [-1.0129650831222534, 10.195167541503906], + [7.230865955352783, -4.354464530944824], + [-1.8070311546325684, 1.725649356842041], + [-1.2616714239120483, 11.561930656433105], + [-4.5918803215026855, -1.6329783201217651], + [1.8697357177734375, 6.085721969604492], + [0.5889855027198792, -3.557772159576416], + [4.071676254272461, 7.4810380935668945], + [2.2578561305999756, 5.236172199249268], + [-5.114706516265869, 6.639629364013672], + [0.592968225479126, -8.965591430664062], + [-0.008539430797100067, -2.291146993637085], + [6.453594207763672, -2.94154953956604], + [-0.7092040181159973, 10.291433334350586], + [2.4991509914398193, 5.861505508422852], + [7.764743328094482, -3.2634613513946533], + [0.5766889452934265, -6.254319667816162], + [-0.6067352890968323, 9.765715599060059], + [2.1949985027313232, -5.147929668426514], + [7.916948318481445, -2.770188808441162], + [-0.5254470705986023, -1.6138572692871094], + [5.713629245758057, -1.3058016300201416], + [0.9938233494758606, -5.543084144592285], + [1.333591341972351, -6.289765357971191], + [1.8298836946487427, 4.9023003578186035], + [8.474040031433105, -2.9051854610443115], + [-4.264875888824463, -1.8062950372695923], + [-2.2933309078216553, 2.0516133308410645], + [-5.250277996063232, 6.814022064208984], + [7.859167575836182, -2.3108489513397217], + [2.6276609897613525, -5.259126663208008], + [-5.722776889801025, 5.47961950302124], + [2.1580376625061035, 3.5721054077148438], + [-2.090108633041382, -1.801472544670105], + [2.079747200012207, 0.629326343536377], + [0.6788651943206787, -6.4086384773254395], + [-2.61711049079895, 2.84136962890625], + [1.1293892860412598, -5.418861389160156], + [-3.3627007007598877, -1.1827765703201294], + [8.506013870239258, -2.42189621925354], + [1.9718239307403564, 1.2091130018234253], + [0.5349757075309753, -5.53671932220459], + [-4.812248706817627, -3.548231840133667], + [-1.1848344802856445, 11.565584182739258], + [3.827950954437256, 7.325377464294434], + [-4.939897060394287, 5.5740532875061035], + [-4.479535102844238, -0.6262141466140747], + [-3.533562421798706, -1.2133914232254028], + [0.6507632732391357, -6.7103705406188965], + [7.613152980804443, -2.3120768070220947], + [5.367725849151611, 8.310770988464355], + [-4.333469867706299, -1.6909977197647095], + [-1.4425371885299683, 12.545350074768066], + [2.901057243347168, -4.222533226013184], + [0.2958458662033081, -5.6433796882629395], + [-0.567550003528595, 10.317769050598145], + [-0.012060500681400299, -4.493613243103027], + [-4.810393810272217, -4.125715255737305], + [-3.9549038410186768, 5.8825836181640625], + [-3.9589083194732666, -2.527378559112549], + [-0.48729994893074036, -2.023207426071167], + [-0.8515931963920593, 11.458539009094238], + [-4.853785037994385, 5.326418876647949], + [-2.1408612728118896, 1.9455662965774536], + [-3.6769790649414062, -2.1787033081054688], + [0.5580241084098816, -7.137629508972168], + [-1.4272812604904175, 12.226844787597656], + [-5.274367332458496, -4.193589210510254], + [-0.6205015778541565, 10.488781929016113], + [-4.2413010597229, 6.388726711273193], + [2.167368173599243, 4.560924530029297], + [1.7726956605911255, -6.941006183624268], + [-1.651059627532959, 0.5206438302993774], + [1.3555527925491333, 4.771129608154297], + [-0.8697572350502014, 10.528603553771973], + [2.142704486846924, 6.392844200134277], + [-1.2188022136688232, 10.558395385742188], + [0.7492209076881409, -8.741678237915039], + [4.2417731285095215, -4.006912708282471], + [-1.1652641296386719, 10.636276245117188], + [0.6757146716117859, -8.399574279785156], + [-0.9207093715667725, 10.846170425415039], + [-5.706155300140381, 3.02533221244812], + [4.229588985443115, 7.331085205078125], + [0.8977224230766296, -5.766564846038818], + [-1.3369065523147583, 9.0001859664917], + [0.1163903996348381, -5.056332111358643], + [1.9002662897109985, 4.868183612823486], + [1.8342739343643188, 0.8700657486915588], + [-1.0126261711120605, -1.23486328125], + [-0.766477644443512, 10.030156135559082], + [-1.216630458831787, 5.582453727722168], + [10.44233226776123, -3.0917999744415283], + [0.9449161887168884, 1.2217363119125366], + [0.6559411883354187, -0.5942362546920776], + [-3.8615965843200684, -3.6967790126800537], + [-1.8597087860107422, 1.460886836051941], + [-0.4330279231071472, 9.868118286132812], + [0.6207122206687927, -7.706538677215576], + [-1.2591729164123535, 11.145885467529297], + [1.4281716346740723, -4.472484111785889], + [-2.4151611328125, 1.6995521783828735], + [-0.8012389540672302, 9.635663986206055], + [-1.3238942623138428, 1.8721426725387573], + [-4.692310333251953, -0.661650538444519], + [-1.161271333694458, 11.272135734558105], + [-0.3284856081008911, 9.002683639526367], + [2.3458569049835205, -4.893077850341797], + [2.9050281047821045, -4.836243152618408], + [5.715945720672607, -1.2445156574249268], + [2.6515004634857178, -5.19107723236084], + [-1.960017204284668, 0.5798137784004211], + [-2.992666006088257, -1.0803059339523315], + [-4.224081516265869, -0.8288859128952026], + [-1.8381733894348145, 1.5631662607192993], + [-3.38211989402771, -0.9960629940032959], + [-1.1025973558425903, 11.368573188781738], + [-1.7329986095428467, 0.878305971622467], + [1.49540114402771, 4.381636619567871], + [2.7243785858154297, -4.732311725616455], + [1.2892444133758545, -5.482278823852539], + [-0.763367235660553, 5.89176082611084], + [-2.2082889080047607, 2.0338919162750244], + [2.651625394821167, 6.272172451019287], + [2.4228599071502686, -4.552072048187256], + [7.162757396697998, -3.7833878993988037], + [6.302138805389404, -1.7721049785614014], + [1.950387716293335, -5.28946590423584], + [-4.042949199676514, -1.101881980895996], + [0.421657919883728, -7.114507675170898], + [2.3379671573638916, 6.168139457702637], + [2.5246779918670654, -4.55332612991333], + [0.6223025321960449, -7.416888236999512], + [-4.583230972290039, -3.8456404209136963], + [0.6802172064781189, -8.48772144317627], + [0.49810028076171875, -6.339110851287842], + [-0.011503197252750397, -1.1497893333435059], + [-0.05692441016435623, 8.611625671386719], + [-0.8583337068557739, 10.425168991088867], + [0.4833224415779114, -6.248283386230469], + [7.990240573883057, -2.233675956726074], + [-1.8419430255889893, 1.3434978723526], + [-0.795720100402832, -0.818130612373352], + [8.918841361999512, -2.6921920776367188], + [-2.6885125637054443, 4.884068012237549], + [1.8472932577133179, 0.1624687910079956], + [-1.6763838529586792, -0.13800376653671265], + [9.237041473388672, -2.748828172683716], + [1.4741895198822021, 5.751976013183594], + [-3.438962459564209, -2.4418346881866455], + [-3.679435968399048, 3.7692368030548096], + [2.577172040939331, 5.401147842407227], + [-4.66363000869751, 5.793484687805176], + [2.8559234142303467, -4.933437347412109], + [0.6761034727096558, -0.5841956734657288], + [1.0794293880462646, -5.4820451736450195], + [-2.7684805393218994, -1.0856376886367798], + [-3.360194444656372, 1.8277599811553955], + [0.45916563272476196, -6.366900444030762], + [-4.458975315093994, 6.686347961425781], + [-2.4975016117095947, -0.12602251768112183], + [-1.758965015411377, 1.2362924814224243], + [2.960900068283081, -4.8213791847229], + [2.6918141841888428, 5.2993879318237305], + [-3.6982388496398926, -2.2265470027923584], + [1.7009567022323608, 2.140521764755249], + [4.186522006988525, 7.362374305725098], + [0.3012339770793915, -5.136731147766113], + [-3.1189560890197754, 5.01047420501709], + [0.6116495728492737, -8.621410369873047], + [1.5549907684326172, 0.3670353591442108], + [0.6787731647491455, -7.918996334075928], + [2.0149505138397217, 4.844982147216797], + [-3.9204046726226807, -1.824379563331604], + [2.6064348220825195, 4.278683185577393], + [8.038853645324707, -2.920342206954956], + [0.22522354125976562, 2.8080480098724365], + [-2.5827035903930664, -3.190922498703003], + [-2.2029247283935547, -1.08118736743927], + [0.4138055443763733, 5.990442752838135], + [-0.13801324367523193, -1.9248650074005127], + [-4.419198036193848, -1.950272560119629], + [3.0133068561553955, 6.798496246337891], + [-3.5557758808135986, -1.4069916009902954], + [-4.608139991760254, -3.155186414718628], + [-0.7161388993263245, 9.617900848388672], + [-2.7414608001708984, -0.9778638482093811], + [-4.738322734832764, 4.9886555671691895], + [-3.3021440505981445, -1.2590538263320923], + [-3.8416378498077393, -3.026724100112915], + [2.6842997074127197, -4.419321060180664], + [1.2957643270492554, -8.341936111450195], + [7.202891826629639, -1.9797521829605103], + [-3.5732550621032715, -2.446861743927002], + [-0.2778864800930023, -1.6005765199661255], + [-5.039709091186523, 4.983994483947754], + [-3.600590467453003, 5.739935398101807], + [-3.8258354663848877, 4.004785537719727], + [2.4251906871795654, -4.678730010986328], + [2.104867696762085, 5.477682113647461], + [-0.9442154765129089, 9.865058898925781], + [-1.3375873565673828, 11.278043746948242], + [-3.9208896160125732, -2.235656499862671], + [0.6465489864349365, -7.6037821769714355], + [0.44877034425735474, -6.929529190063477], + [4.182147979736328, -3.565126895904541], + [1.8510043621063232, 0.15768879652023315], + [-1.7504241466522217, 1.511194109916687], + [2.0927751064300537, 0.23352715373039246], + [7.670971870422363, -3.719740629196167], + [-4.429140567779541, 6.379818916320801], + [-2.7474124431610107, 6.359395503997803], + [2.8377087116241455, -4.871865272521973], + [-2.8689897060394287, -0.9192990660667419], + [-4.828128337860107, -0.7839381098747253], + [0.2631405293941498, -4.5184526443481445], + [-3.991074323654175, -1.9192057847976685], + [1.8890444040298462, 5.685637950897217], + [1.1173312664031982, 5.0941619873046875], + [1.9097837209701538, -4.3578290939331055], + [-1.5404484272003174, 12.636966705322266], + [-1.1085495948791504, 10.078298568725586], + [7.714475154876709, -2.3178412914276123], + [-2.9573729038238525, -1.688415765762329], + [1.7233387231826782, 0.08281999826431274], + [1.4405953884124756, 4.398568153381348], + [8.59291934967041, -2.7097747325897217], + [2.611828327178955, 4.434024810791016], + [2.7929182052612305, -4.864127159118652], + [8.73448657989502, -2.973264455795288], + [-4.13113260269165, -0.6230619549751282], + [6.975611686706543, -2.0733137130737305], + [-1.9834110736846924, 0.5190690159797668], + [-4.331458568572998, 1.701018214225769], + [-3.0950450897216797, -0.9583314657211304], + [0.7490924000740051, -6.465781211853027], + [-4.362062931060791, 6.19351053237915], + [2.5319058895111084, -4.865405082702637], + [-1.19511878490448, 10.695230484008789], + [1.5648243427276611, 0.055332329124212265], + [-3.5934231281280518, -0.7672445774078369], + [-4.34173059463501, -2.2406890392303467], + [-3.6582186222076416, -0.6579301953315735], + [-4.026844024658203, -2.940725326538086], + [-1.3884578943252563, 1.6517486572265625], + [-4.073027610778809, -3.0508954524993896], + [2.904273748397827, -4.653398036956787], + [5.2630720138549805, 8.093494415283203], + [1.6543490886688232, 4.470268249511719], + [5.442972183227539, -1.0986990928649902], + [-3.740462064743042, -3.734052896499634], + [-4.326645851135254, -2.3602454662323], + [-2.0175206661224365, 1.4182311296463013], + [5.281348705291748, -1.2689777612686157], + [-1.8113118410110474, -0.48308515548706055], + [-3.7453792095184326, -1.5672719478607178], + [4.131217002868652, 7.222293853759766], + [-2.420166254043579, -0.7328119874000549], + [-3.3788866996765137, -0.837793231010437], + [0.8442971110343933, -9.151727676391602], + [-1.175600528717041, 11.137955665588379], + [-1.5780079364776611, -0.8594870567321777], + [-4.558014392852783, 5.586152076721191], + [7.40566873550415, -3.3883702754974365], + [-0.8152398467063904, 10.531322479248047], + [0.18394339084625244, -4.252415657043457], + [2.199078321456909, -4.119366645812988], + [2.3230628967285156, -4.407883167266846], + [2.2232391834259033, -4.162323951721191], + [-3.7923004627227783, -1.2836406230926514], + [3.3452537059783936, -4.6739020347595215], + [0.2910585403442383, -7.15354585647583], + [-2.026230812072754, 1.9745558500289917], + [0.7108596563339233, -4.59272575378418], + [0.2048206925392151, -5.134385108947754], + [-4.038309574127197, -1.404286503791809], + [-1.2291500568389893, 11.051137924194336], + [-0.5200173258781433, -1.024171233177185], + [0.6371033191680908, -7.825123310089111], + [-3.657912015914917, -1.5215009450912476], + [-2.1425936222076416, 5.680624961853027], + [2.5810153484344482, -4.046622276306152], + [-3.606935739517212, -1.450281023979187], + [2.0596907138824463, -5.669125080108643], + [2.6228206157684326, -4.994378089904785], + [-1.397581934928894, 11.934905052185059], + [4.005186557769775, 0.43342164158821106], + [-4.863818645477295, 4.172809600830078], + [0.8998972773551941, -7.595105171203613], + [-3.821312427520752, -0.48312216997146606], + [-1.154919147491455, 1.7257370948791504], + [2.97790789604187, -4.670241355895996], + [1.1459659337997437, 0.9908300638198853], + [-3.5858957767486572, -0.6835111379623413], + [0.22613650560379028, -0.40317368507385254], + [6.330092906951904, -1.4410814046859741], + [0.5399987101554871, -7.82436466217041], + [5.220509052276611, 8.074804306030273], + [9.667835235595703, -2.953521966934204], + [-2.726170539855957, -1.2384867668151855], + [-3.8745920658111572, -2.3789560794830322], + [4.677911758422852, -3.3167097568511963], + [1.060887336730957, -0.33210980892181396], + [-1.196850299835205, 10.209228515625], + [5.781978130340576, -4.782998085021973], + [9.222940444946289, -2.825610876083374], + [0.2631427049636841, -6.21987771987915], + [0.4002443552017212, 2.6083157062530518], + [1.5458719730377197, 1.0462077856063843], + [0.7906814813613892, -6.5410566329956055], + [7.680443286895752, -2.1527154445648193], + [0.2554771304130554, -5.399869918823242], + [-5.333632469177246, -3.642608404159546], + [-1.391676902770996, 11.701587677001953], + [-2.669755458831787, -0.399374783039093], + [3.9406025409698486, -4.116016387939453], + [-5.4656548500061035, 4.553257465362549], + [-3.0524027347564697, 3.4239087104797363], + [-1.4004237651824951, 10.32151985168457], + [-1.2686911821365356, 4.813296318054199], + [7.2718281745910645, -2.6767139434814453], + [5.6667304039001465, -4.033290863037109], + [1.3666115999221802, 0.4453434348106384], + [-0.5674299597740173, 7.499430179595947], + [-1.603797197341919, 1.5882112979888916], + [-2.8161938190460205, -1.0460337400436401], + [-2.9966537952423096, 3.405385732650757], + [-0.4324710965156555, 10.26778793334961], + [2.333595037460327, -4.5618577003479], + [1.9596412181854248, 5.038601398468018], + [-3.0756900310516357, 5.79341459274292], + [0.5060098767280579, -7.838459014892578], + [1.781185507774353, 2.129993200302124], + [0.42688989639282227, -7.188003063201904], + [-1.4182507991790771, 12.143922805786133], + [0.702562689781189, -7.9184722900390625], + [-0.6397767066955566, 11.253707885742188], + [-0.2376939058303833, 6.644523620605469], + [4.433516025543213, 7.236079216003418], + [1.650942087173462, 3.3144710063934326], + [-2.821444272994995, -2.128331422805786], + [0.827612578868866, 4.35418176651001], + [8.150381088256836, -3.2604711055755615], + [-0.7426159977912903, 10.475021362304688], + [2.784573793411255, -4.937979698181152], + [-3.9241909980773926, -3.053192377090454], + [-1.2595964670181274, 11.283278465270996], + [3.3797056674957275, -4.773557186126709], + [-1.9611148834228516, 1.958279013633728], + [-2.1373465061187744, -0.35298144817352295], + [2.91562819480896, -4.8744001388549805], + [-1.2465572357177734, 5.688640594482422], + [-3.4702558517456055, -1.406476616859436], + [-3.6464505195617676, -1.2548166513442993], + [-0.5246496200561523, -0.48275840282440186], + [5.740189075469971, -4.435262680053711], + [6.935121059417725, -1.8924245834350586], + [0.2762383818626404, -5.748088359832764], + [-4.949099063873291, -0.675973653793335], + [1.5195034742355347, 5.0123982429504395], + [-3.625375747680664, -0.7177021503448486], + [0.38567593693733215, -4.27263069152832], + [-1.414739727973938, 11.441561698913574], + [4.967874050140381, 8.150651931762695], + [3.5994911193847656, 6.637734413146973], + [6.217437267303467, -2.6461431980133057], + [-3.5525996685028076, -2.948021411895752], + [-0.7542042136192322, 10.211230278015137], + [-3.9201583862304688, -1.6610708236694336], + [0.9013087153434753, -8.355128288269043], + [-3.8219680786132812, -2.7733139991760254], + [8.378190040588379, -2.9552295207977295], + [0.24465912580490112, -5.798956871032715], + [-3.1617746353149414, 5.469437599182129], + [-4.7516865730285645, -0.6641196012496948], + [2.1152584552764893, -5.167819499969482], + [5.907851219177246, -1.4236046075820923], + [0.2024620771408081, -5.156574726104736], + [0.4288666248321533, -7.102931022644043], + [-2.1132962703704834, 2.055401563644409], + [-0.9385793805122375, 9.870546340942383], + [6.230316162109375, -1.669303297996521], + [-1.3646996021270752, 11.350841522216797], + [-2.410491943359375, -1.0411993265151978], + [0.6224616765975952, -8.1268310546875], + [0.5926777720451355, -0.12502408027648926], + [0.18360209465026855, -6.620456695556641], + [0.7917022109031677, -8.391124725341797], + [-3.9161174297332764, 5.30161714553833], + [2.526798725128174, -4.0439910888671875], + [0.3188771605491638, -6.0210065841674805], + [-0.06500966101884842, 7.312821865081787], + [1.317789077758789, -5.607313632965088], + [9.419195175170898, -3.041576623916626], + [-5.240760326385498, -3.695253610610962], + [5.521583080291748, -4.45281982421875], + [-5.365368843078613, 5.401118278503418], + [0.6856293678283691, -8.573431015014648], + [-3.4548144340515137, -1.114369511604309], + [1.9666557312011719, 5.313683032989502], + [8.803237915039062, -2.8332316875457764], + [-5.20191764831543, 6.658534526824951], + [1.0322601795196533, -0.4101915955543518], + [2.4984686374664307, 0.6017763018608093], + [-4.832407474517822, 6.7944207191467285], + [-1.3863550424575806, 1.8936387300491333], + [-4.41238260269165, -3.1908018589019775], + [-0.9850336909294128, 10.80434799194336], + [2.2551543712615967, -4.130758762359619], + [-1.5736491680145264, -0.30149948596954346], + [-1.3562039136886597, 1.389326810836792], + [2.1715190410614014, -5.983313083648682], + [-1.5983555316925049, 1.0557109117507935], + [-2.0968401432037354, 0.6832711696624756], + [0.32881468534469604, -7.274748802185059], + [-4.08764123916626, -1.6635465621948242], + [-0.15953916311264038, -0.6009835004806519], + [-2.2213635444641113, 1.0659112930297852], + [3.4148714542388916, 6.237799167633057], + [3.5136759281158447, -5.46950626373291], + [0.4292898178100586, 0.6103078126907349], + [-2.584083318710327, -1.090659737586975], + [-1.9192098379135132, -2.564281940460205], + [2.328847885131836, -4.4255595207214355], + [-1.2461841106414795, 11.20241928100586], + [0.5795556902885437, -4.865440845489502], + [-4.387315273284912, 6.282942771911621], + [1.051406741142273, 0.8866877555847168], + [0.9042971730232239, -0.3709888458251953], + [-4.877999782562256, -1.1017903089523315], + [-1.1431710720062256, 10.794614791870117], + [-3.160067081451416, -0.12614399194717407], + [0.7060580849647522, -9.242213249206543], + [7.508060455322266, -2.51391863822937], + [0.41354820132255554, -5.301248073577881], + [-1.9471174478530884, 2.1309597492218018], + [-1.9110430479049683, -1.1192563772201538], + [-1.2875871658325195, 0.7192608118057251], + [2.2816574573516846, -3.673800230026245], + [-1.9289723634719849, 0.3672795593738556], + [-4.072277545928955, -2.628826379776001], + [0.7299714088439941, -0.5090574622154236], + [-0.7665024399757385, 9.996481895446777], + [-1.6478081941604614, 1.0557008981704712], + [0.825069010257721, -5.190583229064941], + [-4.796012878417969, -1.7854828834533691], + [0.6729483008384705, -8.434879302978516], + [-1.6822518110275269, 0.1976737380027771], + [-3.585696220397949, 5.780325889587402], + [1.7006551027297974, 2.2131612300872803], + [0.620311439037323, -6.8924407958984375], + [-3.9990808963775635, -2.5398552417755127], + [1.0755047798156738, -5.201039791107178], + [-3.9976868629455566, -0.5140939950942993], + [-5.735867023468018, 7.860714435577393], + [-2.3980348110198975, 0.17026293277740479], + [0.7325877547264099, -7.5828938484191895], + [0.49476808309555054, -6.615118503570557], + [-1.4898710250854492, 0.4373188018798828], + [8.596165657043457, -3.008575677871704], + [-2.47054123878479, -1.1502922773361206], + [-4.5216450691223145, 6.556778907775879], + [-1.8178563117980957, 2.3397903442382812], + [8.698506355285645, -2.8219921588897705], + [2.1811535358428955, 0.6324945688247681], + [2.7930996417999268, -4.503936290740967], + [-1.2893517017364502, 11.75460147857666], + [-0.06687618046998978, 3.2184154987335205], + [2.3679001331329346, 5.340268611907959], + [0.4555783271789551, -0.9326534867286682], + [-3.5630595684051514, 0.5149099826812744], + [1.8302733898162842, 6.356762886047363], + [1.0281621217727661, -4.445139408111572], + [-1.4407107830047607, -1.1971216201782227], + [-2.252103805541992, -0.8846876621246338], + [-4.695987224578857, -1.3929048776626587], + [-3.5545237064361572, -2.0662949085235596], + [-2.0722784996032715, 1.7817630767822266], + [2.514601469039917, 5.135408401489258], + [-1.9266842603683472, 1.4859135150909424], + [1.4519418478012085, -5.010865211486816], + [2.865335702896118, -4.567028045654297], + [2.409625291824341, 5.958038330078125], + [-3.580752372741699, -0.5705983638763428], + [-1.4050190448760986, 12.051258087158203], + [3.1356890201568604, -4.806607246398926], + [0.8173272609710693, -5.859251022338867], + [4.0077314376831055, 7.14390230178833], + [5.02069616317749, -3.5097715854644775], + [-1.9433451890945435, 4.482326030731201], + [-1.1142351627349854, 10.272891998291016], + [6.70137357711792, -1.8439924716949463], + [-4.281796932220459, -0.5785520076751709], + [-1.642350435256958, 1.021349310874939], + [-1.0264235734939575, 9.862250328063965], + [0.3597264885902405, -6.947804927825928], + [-4.647164821624756, -0.9186201095581055], + [-0.07304999977350235, -1.9583035707473755], + [0.6365661025047302, -0.5768797993659973], + [2.937103509902954, -4.9323835372924805], + [-4.173285961151123, -2.6380321979522705], + [-1.4976140260696411, 12.11555290222168], + [-0.11913598328828812, 9.18869400024414], + [-0.5937875509262085, -0.8176600933074951], + [-0.6350054740905762, -3.15468430519104], + [0.4329873323440552, -0.6889482736587524], + [1.0044571161270142, -0.26635417342185974], + [-0.7270948886871338, 10.494634628295898], + [-0.5290542840957642, -0.2758670151233673], + [-1.5562350749969482, 0.31162577867507935], + [-1.8062318563461304, 1.3554552793502808], + [0.010192863643169403, 5.471488952636719], + [6.617785930633545, -3.496168375015259], + [0.951644241809845, -4.563533782958984], + [-2.8431689739227295, -1.8664807081222534], + [5.349668025970459, -5.196191787719727], + [2.855945348739624, -4.461921691894531], + [2.6840832233428955, -4.385764122009277], + [-1.233188271522522, 0.7118385434150696], + [0.46094179153442383, -5.200598239898682], + [0.5886735320091248, -7.942729473114014], + [1.5553213357925415, 0.17666199803352356], + [1.4211935997009277, 5.855543613433838], + [0.20269829034805298, -6.367166996002197], + [0.6059860587120056, -5.301385402679443], + [2.6294968128204346, -3.932262659072876], + [0.4728129506111145, -7.319545745849609], + [3.4132297039031982, 6.696403503417969], + [-4.779390811920166, 6.820659637451172], + [-3.4928059577941895, 6.267553329467773], + [6.657629489898682, -3.012956380844116], + [-1.7540063858032227, 0.9007421731948853], + [-2.0808463096618652, 1.3805195093154907], + [0.5231494307518005, -5.110775947570801], + [-3.0642249584198, 6.712019443511963], + [-0.6361299753189087, 9.651107788085938], + [0.189114511013031, -4.407736301422119], + [2.8830249309539795, -4.727745056152344], + [2.5287578105926514, -4.324101448059082], + [0.5751535296440125, -7.321987152099609], + [1.1068577766418457, 5.9255523681640625], + [8.637341499328613, -2.5917892456054688], + [1.8426322937011719, 5.675008773803711], + [3.0101869106292725, 6.037662506103516], + [9.562067985534668, -2.8868305683135986], + [0.5863316655158997, -6.703283786773682], + [-0.5122243762016296, -1.0529452562332153], + [-4.360067367553711, 5.533078193664551], + [-0.7499483227729797, -1.2169709205627441], + [-3.343414783477783, -1.385372519493103], + [0.7689255475997925, -6.612212181091309], + [-3.3460707664489746, 6.547618865966797], + [-1.3263704776763916, 11.46334457397461], + [1.9738001823425293, -4.975037574768066], + [-1.3683271408081055, 11.962041854858398], + [2.8655636310577393, -4.497653007507324], + [-1.2188146114349365, 10.722799301147461], + [1.9651086330413818, -4.998195648193359], + [2.088128089904785, 5.385422229766846], + [-3.2385475635528564, -1.1912091970443726], + [-2.641061544418335, -1.2807488441467285], + [-3.378309488296509, 6.628407955169678], + [-5.806166648864746, 7.708208084106445], + [0.4774121046066284, -7.29274845123291], + [1.7990374565124512, -5.042306900024414], + [-3.3802692890167236, -3.3045618534088135], + [-4.120877742767334, -2.602573871612549], + [9.291792869567871, -2.7683370113372803], + [-0.8805156350135803, 10.429067611694336], + [-1.9722750186920166, 1.8719557523727417], + [0.4531920552253723, -7.200969696044922], + [-2.6609506607055664, -1.6689714193344116], + [0.951336681842804, -5.811550617218018], + [2.624669075012207, -5.346520900726318], + [0.6632604002952576, -4.549569129943848], + [7.710270404815674, -2.570892572402954], + [-3.493962049484253, -1.2401784658432007], + [3.0322601795196533, -5.647363662719727], + [-3.9419803619384766, 6.766060829162598], + [2.501145601272583, -4.2517523765563965], + [-1.4914031028747559, 1.1620867252349854], + [4.864383220672607, 7.843806266784668], + [-1.411358118057251, 12.02723503112793], + [-0.8244652152061462, 10.52408218383789], + [-2.550708055496216, -1.3599036931991577], + [-1.143347144126892, 10.976509094238281], + [-0.9746167063713074, -0.9008619785308838], + [-1.7611576318740845, -1.1573896408081055], + [1.5975263118743896, 6.471481800079346], + [4.225765228271484, 7.193011283874512], + [-3.891200542449951, 5.746791362762451], + [-1.7317864894866943, 1.1027039289474487], + [-1.1768505573272705, 11.57888412475586], + [1.9347045421600342, 6.123250484466553], + [-0.7996284365653992, -1.0895899534225464], + [-3.697953224182129, -2.2917134761810303], + [7.866384983062744, -2.421804666519165], + [-0.5415359735488892, 10.100215911865234], + [-1.0869598388671875, 10.787381172180176], + [-0.49419206380844116, 10.011917114257812], + [-0.9529381990432739, 9.01685619354248], + [-5.142706871032715, -0.8196091055870056], + [1.1330316066741943, -6.142714977264404], + [1.4163286685943604, 0.24995332956314087], + [-0.9524195790290833, 10.688495635986328], + [1.083265781402588, -5.119072437286377], + [1.091676115989685, 4.922816276550293], + [-4.5027594566345215, -3.284412145614624], + [-3.446636199951172, -2.8309595584869385], + [0.38651376962661743, -5.7443437576293945], + [0.6364604234695435, -7.800601005554199], + [8.788432121276855, -2.738586664199829], + [-1.3779500722885132, -0.596703827381134], + [-1.4776438474655151, 12.071772575378418], + [-1.766503095626831, 1.5958733558654785], + [-1.9319242238998413, 1.4731935262680054], + [7.188828945159912, -2.244784116744995], + [2.2816267013549805, -5.338926315307617], + [-4.495761394500732, 6.988908290863037], + [-0.48229140043258667, 9.997836112976074], + [-0.805611252784729, 10.073762893676758], + [-4.822566986083984, 6.211322784423828], + [-3.503732919692993, 5.261000156402588], + [-3.267512559890747, -2.659507989883423], + [-0.5518378615379333, 8.23748779296875], + [-4.854885578155518, -1.5475445985794067], + [-5.049300193786621, 6.177968502044678], + [-3.5338714122772217, -1.8557485342025757], + [0.5539821982383728, -7.831151008605957], + [1.5730332136154175, 4.850910186767578], + [-4.115426540374756, -1.425858497619629], + [-1.657166600227356, 1.3211041688919067], + [-5.0049147605896, 5.908814430236816], + [0.6348143219947815, -5.1786675453186035], + [-0.6312457323074341, 9.8364896774292], + [0.4888511896133423, -8.103776931762695], + [0.016031138598918915, -3.779325485229492], + [4.987090110778809, 7.934905529022217], + [2.327183485031128, 5.293715476989746], + [-3.3421213626861572, -0.7660120129585266], + [-4.962008953094482, 7.2860798835754395], + [2.8192660808563232, -4.2321367263793945], + [7.088615417480469, -2.754154920578003], + [-4.022956848144531, 6.210143089294434], + [2.0720269680023193, 1.2264480590820312], + [0.7293093204498291, -7.666975021362305], + [-4.748208522796631, -0.7892712354660034], + [5.450002193450928, -5.815180778503418], + [-2.8469808101654053, -2.7748773097991943], + [-3.7928359508514404, -2.617506742477417], + [-1.8843867778778076, 0.9365887641906738], + [0.30064278841018677, -6.427981376647949], + [-4.201756954193115, -1.7091529369354248], + [-2.640298366546631, 4.781628608703613], + [2.7104108333587646, -4.700505256652832], + [3.3398566246032715, -6.636097431182861], + [-5.119151592254639, 1.24864661693573], + [-3.8369882106781006, -1.2591081857681274], + [9.436468124389648, -2.787095069885254], + [2.5664594173431396, 0.4892735481262207], + [-3.5828347206115723, 4.419652938842773], + [0.4059871435165405, -5.235525131225586], + [3.281515598297119, -0.10382819175720215], + [-3.5042200088500977, -1.6026877164840698], + [1.565727710723877, -5.309106826782227], + [-0.723491370677948, 10.251911163330078], + [-1.2862865924835205, 10.783236503601074], + [-0.8443196415901184, 10.365407943725586], + [2.5399417877197266, -4.611828804016113], + [-4.147957801818848, -0.6773440837860107], + [1.8393771648406982, -7.304386138916016], + [0.7129853963851929, -6.521247863769531], + [0.5965284109115601, -7.460354804992676], + [2.6398751735687256, -4.68421745300293], + [-3.2342538833618164, 6.46673583984375], + [0.4173312187194824, -5.81724214553833], + [1.6297591924667358, 0.5238767266273499], + [-3.20167875289917, -1.0251851081848145], + [-5.226085186004639, -0.7347668409347534], + [0.7226693630218506, -8.767629623413086], + [3.2138595581054688, 6.705273628234863], + [-3.622222661972046, -1.6060739755630493], + [-5.770008563995361, 4.972954750061035], + [-1.2942285537719727, 1.5755270719528198], + [0.36462491750717163, -6.624824523925781], + [-0.9501598477363586, 11.10297966003418], + [2.9660181999206543, -5.368636608123779], + [-3.9939210414886475, -2.743144989013672], + [0.3579618036746979, -4.700897216796875], + [4.149864673614502, 7.0131306648254395], + [-2.5795791149139404, 1.3433781862258911], + [-1.3652431964874268, 1.6681033372879028], + [-1.438528060913086, 11.708171844482422], + [0.3779495656490326, -0.6617457866668701], + [3.1372997760772705, -4.514960765838623], + [-2.229337692260742, -0.5992639660835266], + [-1.198980689048767, 10.734322547912598], + [2.463287115097046, 0.6498091816902161], + [-0.36290621757507324, -0.9146759510040283], + [-0.5328749418258667, 10.19501781463623], + [6.1111273765563965, -1.847052812576294], + [-3.5128657817840576, -0.23497694730758667], + [-1.098996639251709, 9.493366241455078], + [0.40983814001083374, -6.544543266296387], + [1.3015509843826294, 5.013571739196777], + [-1.9073214530944824, 1.7575201988220215], + [1.9207022190093994, -5.684237480163574], + [-1.9914772510528564, 2.169684886932373], + [0.6156616806983948, -7.458573341369629], + [6.086964130401611, -1.1100504398345947], + [4.207369327545166, -3.8579487800598145], + [-0.43415212631225586, 8.956172943115234], + [-3.502558708190918, -2.2873849868774414], + [-4.747431755065918, 6.73794412612915], + [-3.2648603916168213, -1.4470864534378052], + [7.788386821746826, -3.1067018508911133], + [-0.0680331364274025, -1.0503002405166626], + [6.270233154296875, -3.3022658824920654], + [0.6373375058174133, -5.939749240875244], + [2.466939687728882, -3.9527041912078857], + [1.7945530414581299, -4.627326965332031], + [4.367616176605225, -4.372392177581787], + [2.7186484336853027, 4.439850807189941], + [-1.370337963104248, 11.851212501525879], + [0.8879039883613586, -6.710649490356445], + [2.8376898765563965, -4.543682098388672], + [2.7741355895996094, 6.056910037994385], + [-4.474294185638428, -1.230542540550232], + [-1.3938616514205933, 1.0002318620681763], + [7.554840564727783, -2.8007309436798096], + [-3.863546848297119, 5.551916122436523], + [0.5835642218589783, -7.055530548095703], + [0.798766553401947, -8.616436958312988], + [-0.19674482941627502, -2.144312858581543], + [1.4432270526885986, 1.16139554977417], + [0.5886586308479309, -8.280092239379883], + [-3.6402411460876465, -2.470454692840576], + [-4.167012691497803, -2.5927393436431885], + [-3.480248212814331, 4.798007965087891], + [-1.7345463037490845, -0.5880497097969055], + [2.1554763317108154, -5.0715131759643555], + [-3.145496129989624, -1.0732539892196655], + [1.0472700595855713, -5.4945197105407715], + [-1.1121573448181152, 10.713729858398438], + [-1.4215680360794067, 12.024538040161133], + [3.035691022872925, -5.135320663452148], + [-2.8843817710876465, -3.9115898609161377], + [7.376475811004639, -2.0759353637695312], + [-1.6570630073547363, 2.112189769744873], + [2.39595890045166, 5.0343475341796875], + [-0.8791288137435913, 10.6495361328125], + [0.3785412013530731, -5.6942925453186035], + [0.3607579171657562, -4.293025016784668], + [-1.9969189167022705, -0.08045625686645508], + [-1.4374281167984009, 12.196823120117188], + [1.645615577697754, -4.888449192047119], + [2.2740085124969482, 5.96519660949707], + [-1.2096517086029053, 11.474035263061523], + [-0.94247967004776, 11.315254211425781], + [3.4457569122314453, -3.5702648162841797], + [-3.7593986988067627, -2.660342216491699], + [-0.1112682893872261, 7.2874650955200195], + [1.445233941078186, 6.083984375], + [8.304195404052734, -3.745246648788452], + [4.4296183586120605, 7.310452461242676], + [-1.5448349714279175, 12.416877746582031], + [-1.9798426628112793, 2.142347574234009], + [0.9870803952217102, 7.163155555725098], + [0.5153408050537109, -6.915750980377197], + [6.102907180786133, -2.6663401126861572], + [-4.273226261138916, -0.9125411510467529], + [0.609639585018158, -5.869011878967285], + [2.8864808082580566, -4.880309104919434], + [-3.861424684524536, -1.6455730199813843], + [-4.971482753753662, 6.956837177276611], + [2.7579753398895264, -4.60913610458374], + [5.8191304206848145, -1.194368839263916], + [-1.0449328422546387, 10.720674514770508], + [6.898313999176025, -2.798311471939087], + [1.1497364044189453, -0.25097009539604187], + [-0.04137206822633743, -1.3800486326217651], + [5.278252601623535, -4.33784294128418], + [2.8441784381866455, -4.400848388671875], + [6.490787506103516, -1.5632590055465698], + [-1.8175458908081055, 1.6195229291915894], + [3.2850229740142822, 6.813681602478027], + [0.32293224334716797, -3.7643837928771973], + [-3.6743667125701904, -3.8421828746795654], + [-5.424339771270752, -1.1204826831817627], + [-4.160797595977783, 3.728924512863159], + [-0.567414402961731, 10.076992988586426], + [0.7377617359161377, -5.986083984375], + [1.9788334369659424, 4.478715896606445], + [0.6442250609397888, -5.676354885101318], + [1.1131781339645386, 4.74708890914917], + [-2.013005495071411, 0.4738132357597351], + [2.0170047283172607, 1.0161240100860596], + [-1.4045518636703491, 12.024965286254883], + [0.8582175970077515, -5.206869125366211], + [-3.411170244216919, 5.052072525024414], + [-0.8452375531196594, 10.577444076538086], + [-4.063946723937988, -2.0378360748291016], + [4.447808742523193, 7.26609468460083], + [2.144855499267578, 5.9909257888793945], + [0.671139657497406, -4.911068439483643], + [-1.0468343496322632, 10.28835391998291], + [6.759237289428711, -1.7852782011032104], + [-4.024129390716553, -2.897592067718506], + [-2.9479939937591553, -2.4866762161254883], + [2.856720447540283, -4.493535041809082], + [-1.2354029417037964, 11.487617492675781], + [1.0150761604309082, -5.091546058654785], + [-0.9198369979858398, -1.2435239553451538], + [-3.118079662322998, -0.9614553451538086], + [-0.12912243604660034, -2.9021553993225098], + [-1.362472653388977, 11.534221649169922], + [0.7569921016693115, 0.020169910043478012], + [2.730811357498169, -4.708611011505127], + [8.775450706481934, -3.4747323989868164], + [-4.667834758758545, -2.5367538928985596], + [0.36945003271102905, -6.413483142852783], + [-1.1919751167297363, 1.1323069334030151], + [3.8614847660064697, 6.893342971801758], + [-1.768082618713379, 1.3400821685791016], + [3.5459959506988525, 6.8217010498046875], + [2.2102088928222656, -4.449894428253174], + [3.1364171504974365, -4.905691146850586], + [-1.5933419466018677, 1.4015846252441406], + [-5.550137996673584, 7.295016765594482], + [8.19868278503418, -2.787473440170288], + [-1.469840407371521, 12.056439399719238], + [-0.10364217311143875, -1.2001113891601562], + [4.675407886505127, 7.472417831420898], + [-3.1390812397003174, -1.9292429685592651], + [8.49575138092041, -2.626141309738159], + [-5.102580547332764, 6.654891014099121], + [-0.5704793334007263, -0.8639980554580688], + [-3.846066474914551, -1.9684717655181885], + [1.9294841289520264, -4.641695976257324], + [0.4955906867980957, -8.161913871765137], + [-0.7678648829460144, 9.93292236328125], + [-1.3995658159255981, 11.272032737731934], + [7.005731105804443, -2.8463752269744873], + [0.649245023727417, -6.757909774780273], + [0.3842454254627228, -4.89090633392334], + [-3.699054718017578, -1.5936545133590698], + [-4.035404205322266, -1.2589255571365356], + [3.624342679977417, -3.480808734893799], + [3.0959858894348145, 6.6195969581604], + [-3.5122005939483643, -1.3987914323806763], + [6.393945217132568, -2.6902077198028564], + [-5.0518903732299805, -0.8332735300064087], + [-0.37137481570243835, -0.9217777848243713], + [-1.34026300907135, 11.758489608764648], + [-0.26163822412490845, -4.0228447914123535], + [4.735928058624268, -4.302544593811035], + [-1.4595487117767334, -0.1387493908405304], + [-1.8291292190551758, 1.3188358545303345], + [-0.3090665936470032, 0.5025062561035156], + [8.32872200012207, -2.53554105758667], + [0.4212397336959839, -7.1860456466674805], + [-0.11316410452127457, -4.3170857429504395], + [2.916339635848999, -4.657304763793945], + [-3.02095627784729, -1.8920401334762573], + [8.454828262329102, -2.5933024883270264], + [2.6169774532318115, 6.328700065612793], + [-4.211239814758301, 4.692876815795898], + [1.388625144958496, -5.800677299499512], + [-1.429874062538147, -2.0535011291503906], + [0.5281172394752502, -6.040736675262451], + [-4.298328399658203, 5.324675559997559], + [6.674185276031494, -2.8315227031707764], + [0.03880203515291214, -3.392138719558716], + [-1.9589554071426392, 2.2787888050079346], + [-1.0923420190811157, 10.250648498535156], + [0.5407449007034302, -5.318150997161865], + [-5.00130033493042, -3.9720840454101562], + [-0.8865171074867249, 11.09616470336914], + [2.6994831562042236, -4.219536304473877], + [-0.6991324424743652, 10.264338493347168], + [3.5606982707977295, 7.500021934509277], + [-3.445638418197632, -2.0821502208709717], + [6.6397576332092285, -3.081235408782959], + [-1.3704819679260254, 1.467620849609375], + [0.4841104745864868, -7.392666816711426], + [-5.330926895141602, 7.1454315185546875], + [-2.5691089630126953, -1.4770822525024414], + [0.3793871998786926, -4.05612325668335], + [-5.634607791900635, -0.8874437808990479], + [-4.1010565757751465, -2.855982542037964], + [-2.1788196563720703, -3.4983699321746826], + [1.6585801839828491, 3.308027982711792], + [0.4816284775733948, -6.990970611572266], + [-0.17333662509918213, 7.8275957107543945], + [-1.1556015014648438, 10.159137725830078], + [-1.0291882753372192, 10.617984771728516], + [-4.076784133911133, -3.4985764026641846], + [2.376523733139038, -4.637904167175293], + [-3.5686910152435303, -1.485275387763977], + [-3.626567840576172, -1.4801894426345825], + [-4.738321781158447, 7.117074012756348], + [1.980757474899292, 0.6120397448539734], + [1.771518588066101, 0.37919896841049194], + [-3.8684210777282715, -1.3505293130874634], + [4.302398204803467, -0.9828697443008423], + [0.573375940322876, -7.915354251861572], + [-4.321218013763428, -2.898521900177002], + [0.23235321044921875, -6.1341552734375], + [0.41958773136138916, -0.7212007641792297], + [8.060297966003418, -2.351700782775879], + [-1.3622407913208008, 11.724268913269043], + [-0.826564371585846, 9.445003509521484], + [-2.341609239578247, 2.30292010307312], + [-4.551095962524414, -0.8235561847686768], + [2.7022805213928223, -4.473568916320801], + [-3.8167502880096436, -3.698594331741333], + [-5.845614910125732, 7.728991508483887], + [-1.0373413562774658, -0.48498740792274475], + [5.819641590118408, -1.4637254476547241], + [2.6740775108337402, 5.711475849151611], + [-3.1735732555389404, -1.2652004957199097], + [2.2071373462677, 3.3078360557556152], + [-2.570472478866577, -1.1636767387390137], + [-4.127824306488037, 5.391083717346191], + [-3.5436408519744873, -2.7181313037872314], + [-3.4580037593841553, -1.7202893495559692], + [1.165909767150879, -4.895098686218262], + [-0.699751615524292, 11.206550598144531], + [-3.886317253112793, -1.8380481004714966], + [2.9154903888702393, 5.7618794441223145], + [1.4688868522644043, -0.12240748107433319], + [-3.734760046005249, -1.9215837717056274], + [0.6964431405067444, -7.692906379699707], + [2.5149524211883545, -4.689939498901367], + [1.8203904628753662, 5.076759338378906], + [-1.2677669525146484, -1.044419527053833], + [-0.4759728014469147, 0.15173283219337463], + [1.9865245819091797, 2.85339093208313], + [2.8026201725006104, -4.406545639038086], + [2.4568166732788086, -4.420508861541748], + [3.6320407390594482, 6.781124114990234], + [-1.8963117599487305, 2.3035593032836914], + [-2.7763476371765137, 6.948757171630859], + [0.623335063457489, -7.10609245300293], + [-5.2958550453186035, 7.599578857421875], + [-1.1724052429199219, 11.11524772644043], + [-3.483604907989502, -1.998702883720398], + [-5.224428176879883, 6.57383394241333], + [0.523664653301239, -0.1877252161502838], + [0.5134146809577942, -7.166138648986816], + [-4.347934246063232, -1.3591104745864868], + [1.023503303527832, -7.218762397766113], + [5.667784214019775, -2.051328420639038], + [-3.4906821250915527, -2.3062169551849365], + [-1.4601843357086182, 1.0307610034942627], + [2.608504056930542, -5.402613639831543], + [-0.6457351446151733, 9.679028511047363], + [-0.6104102730751038, 10.249704360961914], + [2.7592947483062744, -4.442174434661865], + [1.9858345985412598, -4.860739231109619], + [2.86562180519104, -4.611840724945068], + [-4.350853443145752, -1.4693905115127563], + [1.025647521018982, -7.027276992797852], + [0.35355812311172485, -6.909883499145508], + [-2.812501907348633, 5.911830902099609], + [-3.5579655170440674, -0.6882761120796204], + [8.359673500061035, -3.1429240703582764], + [-1.4447920322418213, 5.478093147277832], + [1.2845184803009033, -7.603799819946289], + [6.4918293952941895, -3.0409915447235107], + [-0.7349094152450562, 9.619595527648926], + [7.338873386383057, -2.1503796577453613], + [1.138570785522461, 4.125911235809326], + [-1.169640302658081, 10.674002647399902], + [-0.6537187099456787, 10.596550941467285], + [-2.0345823764801025, 2.0074377059936523], + [-4.253662109375, 6.0688886642456055], + [-5.1605682373046875, -1.3791366815567017], + [-1.4197051525115967, 1.4267183542251587], + [-3.5961849689483643, -0.7326961755752563], + [-3.822962999343872, -2.421032667160034], + [-2.2873833179473877, 2.185448169708252], + [8.182705879211426, -2.9905054569244385], + [-3.5208609104156494, -1.4353724718093872], + [-0.1827489733695984, 8.308280944824219], + [7.807891368865967, -2.481008768081665], + [-1.8341201543807983, 2.339609146118164], + [-0.08170012384653091, -4.597908973693848], + [-3.012786865234375, 3.343574285507202], + [-1.3457469940185547, 11.89483642578125], + [-1.947340965270996, 1.41304612159729], + [0.617320716381073, -5.081279277801514], + [-4.516913890838623, -3.587048292160034], + [1.5863921642303467, 4.964277744293213], + [-1.7639716863632202, 1.5518814325332642], + [-4.46143102645874, -0.35228681564331055], + [0.8076213002204895, -5.455897808074951], + [-4.540553569793701, 4.820087432861328], + [-3.8712456226348877, -2.345552444458008], + [-1.1838082075119019, 11.126976013183594], + [-0.8511967062950134, 10.032598495483398], + [2.765946865081787, -4.251616477966309], + [3.1694934368133545, -4.923397541046143], + [2.5687954425811768, 5.221527576446533], + [-4.214276313781738, -0.12475591897964478], + [0.32994240522384644, -4.712092876434326], + [6.070507526397705, -2.684448480606079], + [-2.2490596771240234, 1.469169020652771], + [2.2812037467956543, -4.553211212158203], + [-1.1777446269989014, 11.303824424743652], + [-4.544447898864746, -1.1956698894500732], + [9.273128509521484, -2.9106857776641846], + [2.526982307434082, -4.8395256996154785], + [6.347708225250244, -1.5862849950790405], + [6.588303089141846, -4.3109235763549805], + [0.5200217962265015, 4.502771377563477], + [-5.539342403411865, 6.93881893157959], + [-0.146501362323761, 0.11482957005500793], + [-0.1386980414390564, 7.650339603424072], + [-4.00821590423584, 5.842165470123291], + [-0.003853417932987213, -1.1137663125991821], + [-0.7584442496299744, 2.538858652114868], + [-3.3247690200805664, -2.342582941055298], + [0.7710740566253662, -0.4940326511859894], + [0.5363829731941223, -6.9808478355407715], + [-0.3926633596420288, 9.08467960357666], + [0.09872167557477951, -4.826347351074219], + [-0.7549503445625305, 9.546338081359863], + [-3.6148617267608643, -0.9338837265968323], + [-0.3207778334617615, 9.47711181640625], + [1.0825870037078857, 0.06622351706027985], + [0.8523592948913574, -6.569549560546875], + [0.692983090877533, -4.4815287590026855], + [-4.839849948883057, 5.936631679534912], + [-3.625373125076294, 6.63208532333374], + [-1.0191679000854492, 10.828542709350586], + [-1.2477468252182007, 11.466304779052734], + [2.349848985671997, 0.6898924112319946], + [7.373714923858643, -3.767578363418579], + [-4.35740327835083, -4.033392429351807], + [2.1956911087036133, 6.103488922119141], + [0.9905039668083191, -5.64548921585083], + [-0.7682878375053406, -0.6419492959976196], + [2.467015266418457, -5.032824993133545], + [-1.9992034435272217, 1.0467406511306763], + [-0.4312942922115326, -1.3915506601333618], + [0.48573917150497437, -6.238613605499268], + [-5.615701198577881, 6.764740467071533], + [0.5422732830047607, -7.626775741577148], + [-0.19954970479011536, -1.0506346225738525], + [4.4735283851623535, 7.502633094787598], + [-4.049619197845459, -2.0943121910095215], + [2.744736909866333, -3.6676695346832275], + [2.8334338665008545, -4.76960563659668], + [8.621779441833496, -2.9262378215789795], + [-0.7391999363899231, 1.0832014083862305], + [-2.7036592960357666, -0.24016061425209045], + [-3.87136173248291, -0.8659225702285767], + [0.7985018491744995, -5.461255073547363], + [-4.193798065185547, 5.065460205078125], + [-1.447996973991394, 12.309370040893555], + [-2.892249822616577, -1.1934418678283691], + [0.8003640174865723, -5.7274274826049805], + [0.3629103899002075, -5.234095573425293], + [2.3985273838043213, -3.0813515186309814], + [-1.8706281185150146, 0.5194042921066284], + [-3.522658586502075, -1.7932292222976685], + [6.618504047393799, -1.5368809700012207], + [2.045518159866333, -4.399062633514404], + [-1.8084672689437866, -0.1642310619354248], + [-2.977985382080078, -1.413767695426941], + [0.4870755076408386, -7.152984619140625], + [-1.295285701751709, 11.75731372833252], + [-3.9283573627471924, 5.851434230804443], + [-3.982887029647827, -1.901867151260376], + [0.8607161045074463, 5.761346817016602], + [7.740611553192139, -3.0730936527252197], + [-0.30633294582366943, -1.7427743673324585], + [-0.15440234541893005, -2.4229843616485596], + [-3.5717337131500244, -1.8541887998580933], + [-5.523172855377197, 5.710453510284424], + [-2.9431374073028564, -2.954815626144409], + [-5.91601037979126, 4.121133804321289], + [3.0496439933776855, 6.077596664428711], + [-1.4070448875427246, 11.762700080871582], + [2.9124763011932373, -4.863363265991211], + [0.7106348276138306, -8.30704116821289], + [-2.241671323776245, 0.8028669357299805], + [0.6392183899879456, -5.185249328613281], + [-1.7899489402770996, 0.40560194849967957], + [2.6555774211883545, -4.623661518096924], + [-4.175217628479004, 5.842194557189941], + [-3.568524122238159, -1.5823731422424316], + [-0.9843071699142456, 5.651117324829102], + [2.6891133785247803, -4.384921073913574], + [0.6045577526092529, -7.239761829376221], + [-4.148675441741943, -0.55508953332901], + [-5.625737190246582, 7.323447227478027], + [-3.9164674282073975, 6.038538455963135], + [-3.9560177326202393, -2.2527196407318115], + [9.368704795837402, -2.9120962619781494], + [-2.9129488468170166, -2.4793033599853516], + [-4.976175785064697, -1.6187721490859985], + [-4.123403549194336, -0.8414819240570068], + [-0.8441572189331055, 8.898622512817383], + [-0.6952643990516663, 10.610695838928223], + [-1.091992974281311, -2.3760664463043213], + [-1.1281119585037231, 11.322713851928711], + [-0.06446624547243118, -2.584766149520874], + [-3.7125608921051025, -1.3055449724197388], + [-3.4277265071868896, -1.5895235538482666], + [1.7261191606521606, -5.515387535095215], + [0.5483405590057373, -5.846217155456543], + [0.8831589221954346, -5.21949577331543], + [-4.109920978546143, -0.24791961908340454], + [0.7100929617881775, -8.482421875], + [1.1996749639511108, 0.05718892440199852], + [-4.796978950500488, 5.910656452178955], + [7.396798610687256, -2.8034870624542236], + [2.7452218532562256, -5.115899085998535], + [2.976931571960449, -4.963909149169922], + [-1.4076839685440063, 1.4556939601898193], + [0.42710065841674805, -6.949663162231445], + [0.765423059463501, 4.3234453201293945], + [-0.10249284654855728, -2.113166332244873], + [2.0364677906036377, 2.3967483043670654], + [2.1573867797851562, -5.463562965393066], + [2.0659234523773193, -4.572895526885986], + [-4.413834571838379, 3.843092679977417], + [-4.593664169311523, -1.4538801908493042], + [-4.412663459777832, -0.6893348693847656], + [-1.4793506860733032, 1.317489743232727], + [-3.7221219539642334, 5.198836803436279], + [-4.3673319816589355, -4.357858180999756], + [7.256948947906494, -2.074864387512207], + [-1.1757750511169434, 10.893508911132812], + [-4.475779056549072, 6.403966426849365], + [-3.7391960620880127, -1.541190505027771], + [-4.613912105560303, -0.4290618896484375], + [-3.343179941177368, 3.6507081985473633], + [-4.062520503997803, -3.367933511734009], + [5.766998767852783, 8.792734146118164], + [6.027183532714844, -3.4396140575408936], + [1.9270002841949463, 1.0732067823410034], + [-2.8278350830078125, 5.034534931182861], + [-3.6535165309906006, 5.881354331970215], + [0.291862428188324, -5.769659042358398], + [-3.267798662185669, -1.2897249460220337], + [2.6830568313598633, -4.6055474281311035], + [-2.7640540599823, -0.6352999210357666], + [-2.7141199111938477, -0.5964523553848267], + [6.817577838897705, -3.9558699131011963], + [-4.635948181152344, -1.1272107362747192], + [-1.0465890169143677, 10.978760719299316], + [7.3461527824401855, -2.547306776046753], + [7.570017337799072, -2.1215834617614746], + [-0.527430534362793, -0.9146270751953125], + [2.0504579544067383, -3.882619619369507], + [5.199311256408691, 8.073165893554688], + [-1.939724326133728, 1.632219672203064], + [-0.6622412800788879, 9.99876880645752], + [-3.564272403717041, -1.8829301595687866], + [-2.315882921218872, -0.8560933470726013], + [-3.644014596939087, -4.160318374633789], + [2.2990620136260986, -4.2771759033203125], + [-0.41539156436920166, 10.158687591552734], + [-4.604410171508789, -1.9287127256393433], + [2.17431378364563, -5.438901424407959], + [1.80283784866333, 2.419761896133423], + [0.7432304620742798, -8.275324821472168], + [6.745713233947754, -2.154132604598999], + [2.3002264499664307, -5.534753799438477], + [-3.7546567916870117, -2.381896495819092], + [-1.7473094463348389, 1.0739200115203857], + [0.7177973985671997, -8.381755828857422], + [-3.836682081222534, 5.1743998527526855], + [-2.487051486968994, -0.38226819038391113], + [-4.525352954864502, -0.21350401639938354], + [-2.483189344406128, -2.566909074783325], + [3.1993744373321533, -4.971088886260986], + [-3.6717050075531006, -2.1174752712249756], + [1.925475835800171, 5.804691314697266], + [2.369537115097046, 0.7134606838226318], + [7.36365270614624, -2.4164669513702393], + [-3.863516330718994, -2.5917580127716064], + [4.822714328765869, 7.657622337341309], + [-4.187532424926758, -2.702056646347046], + [0.17449146509170532, -5.22443151473999], + [-1.7979981899261475, 2.0891528129577637], + [2.6400580406188965, -4.233955383300781], + [-0.7722987532615662, 10.988052368164062], + [1.38346266746521, -5.942831516265869], + [-1.9504892826080322, 1.5369160175323486], + [1.6051175594329834, 2.463118314743042], + [0.7738111019134521, -0.36789387464523315], + [8.670580863952637, -2.9021575450897217], + [1.65482759475708, 1.941894292831421], + [2.7357089519500732, -3.1177635192871094], + [-1.265691876411438, 11.321041107177734], + [0.7675023674964905, -6.979097366333008], + [-1.6678353548049927, 0.003274437040090561], + [-2.110185384750366, 1.8856070041656494], + [2.4522178173065186, -4.061774730682373], + [2.8715009689331055, -5.363327980041504], + [-3.8324601650238037, 5.94320011138916], + [-5.12136697769165, 6.5603179931640625], + [0.17473286390304565, -6.043083667755127], + [8.18103313446045, -2.9191970825195312], + [0.3884575366973877, -5.433389186859131], + [-1.4039549827575684, 12.233189582824707], + [-2.2811620235443115, 2.0801665782928467], + [6.992620944976807, -3.037071943283081], + [-1.2726835012435913, 0.15709346532821655], + [-1.5138113498687744, -0.5337260961532593], + [2.9449727535247803, -4.632011890411377], + [-5.2952351570129395, -0.9255704283714294], + [-3.993149757385254, 6.196150779724121], + [0.89726722240448, -7.0657572746276855], + [2.56443190574646, 5.663830757141113], + [0.517846405506134, -7.060894012451172], + [0.6759616732597351, -8.136455535888672], + [-1.323805809020996, 1.5790941715240479], + [-1.6021301746368408, 0.7739831209182739], + [-4.415456295013428, 0.3199194371700287], + [2.7143659591674805, -4.658871650695801], + [-1.977320671081543, 2.268158435821533], + [-5.673977375030518, 4.7681565284729], + [-4.737990379333496, 6.694922924041748], + [-0.10526926070451736, -1.3021785020828247], + [3.0925066471099854, -5.243834495544434], + [-1.147506833076477, 10.904953956604004], + [0.7376030683517456, -7.429671287536621], + [-3.68290638923645, -2.2106640338897705], + [-4.564113616943359, 6.18874454498291], + [2.9367687702178955, -5.124660015106201], + [2.615736246109009, -4.200356960296631], + [-1.3925034999847412, 11.879172325134277], + [-0.4676196575164795, 9.974286079406738], + [-1.8453855514526367, 0.6443466544151306], + [2.7791402339935303, -4.276731491088867], + [-4.202541828155518, 6.307607650756836], + [1.583956003189087, 1.8081177473068237], + [-0.8060835599899292, -1.1419167518615723], + [-4.2132768630981445, -1.1138697862625122], + [2.165806531906128, 0.5162555575370789], + [1.9144322872161865, 1.2251442670822144], + [-4.027190208435059, 3.8371098041534424], + [-0.2571476101875305, 7.634883880615234], + [-0.7429245114326477, 10.11224365234375], + [-0.35284215211868286, 10.201650619506836], + [-4.648464679718018, -0.15040463209152222], + [2.6749842166900635, -5.403587341308594], + [-4.535459518432617, -0.9625152349472046], + [8.639944076538086, -2.678717851638794], + [-0.9631373286247253, 10.89439582824707], + [-4.881173610687256, 5.768037796020508], + [6.301205158233643, -2.03161883354187], + [1.5957387685775757, 2.166813611984253], + [0.5732219815254211, -7.7689666748046875], + [-3.480745553970337, -1.3653861284255981], + [3.4068925380706787, 6.9809699058532715], + [2.220107316970825, 0.6330487728118896], + [-1.200300693511963, 11.14657211303711], + [3.033621072769165, -4.881879806518555], + [-4.882508277893066, -4.164255619049072], + [-5.95039701461792, 5.929120063781738], + [1.048081874847412, -0.4491256773471832], + [-3.7841098308563232, -1.2596474885940552], + [-0.3049767017364502, -1.8102176189422607], + [2.0194509029388428, 5.477642059326172], + [-3.3230857849121094, -0.20542675256729126], + [0.3374473452568054, -0.9673846960067749], + [1.274253487586975, 4.652260780334473], + [-2.489058256149292, -1.0638278722763062], + [4.757289886474609, -4.556694984436035], + [-1.3529911041259766, 0.8150759935379028], + [4.52888822555542, 7.399941921234131], + [-0.9888942837715149, 10.623321533203125], + [0.5751441121101379, -6.6291422843933105], + [3.3227744102478027, -3.797947645187378], + [-1.2231419086456299, 10.758244514465332], + [0.2270265519618988, -3.810892105102539], + [3.312615156173706, 6.535281658172607], + [-0.9213351607322693, 10.301002502441406], + [0.3693053126335144, -0.40704095363616943], + [3.884469509124756, 6.610069751739502], + [-1.597170114517212, 12.643928527832031], + [3.472158432006836, 7.004820823669434], + [0.49599313735961914, -8.228446960449219], + [-1.870944619178772, 1.786744236946106], + [-4.163610935211182, 5.30643367767334], + [-2.9528141021728516, -1.2771793603897095], + [-4.678833484649658, 2.190093994140625], + [-3.5861120223999023, -3.78406023979187], + [9.343260765075684, -2.872213125228882], + [2.5936403274536133, -4.410748481750488], + [0.11554806679487228, -4.092718124389648], + [-3.7221109867095947, -1.8023576736450195], + [-4.396430492401123, 1.5144490003585815], + [2.2180099487304688, -5.104266166687012], + [2.8964531421661377, -4.5260515213012695], + [1.7910995483398438, -4.738612174987793], + [-0.010636188089847565, -1.0346394777297974], + [2.8202102184295654, 6.763780117034912], + [1.215101718902588, 0.035028126090765], + [2.8767249584198, -4.690801620483398], + [2.95267915725708, -4.7667155265808105], + [-1.0313750505447388, 10.293889045715332], + [0.705146849155426, -8.427152633666992], + [-3.7138779163360596, 4.577449798583984], + [-3.7508678436279297, -2.851884126663208], + [0.5057713389396667, -6.8080339431762695], + [0.7340113520622253, -7.338557243347168], + [-3.1412136554718018, 4.984058380126953], + [-2.2292582988739014, 3.550032615661621], + [-3.5255699157714844, -0.8421242237091064], + [7.795002460479736, -3.3633968830108643], + [1.938511848449707, 3.952367067337036], + [-5.399786472320557, 6.989561557769775], + [-5.22936487197876, 7.522999286651611], + [2.461916208267212, -4.362397193908691], + [-0.9607746005058289, 10.491924285888672], + [1.3121700286865234, 0.0454120896756649], + [0.06819178909063339, -4.616609573364258], + [0.6676021218299866, -5.097362041473389], + [-0.5431762933731079, 8.732542991638184], + [0.6254273056983948, -7.350372791290283], + [1.2438006401062012, 6.369314193725586], + [0.6734629273414612, -8.147895812988281], + [-2.862225294113159, 3.205573558807373], + [0.6093184351921082, -7.873546600341797], + [-3.650676965713501, -2.2768797874450684], + [-4.021740436553955, -0.3309955596923828], + [2.2310402393341064, 0.6715363264083862], + [-2.9653375148773193, -2.204118013381958], + [2.740502119064331, -4.436686038970947], + [-1.5408083200454712, 12.143295288085938], + [8.286273956298828, -2.529757499694824], + [-4.675648212432861, 5.870903015136719], + [-2.5647132396698, -0.7007156610488892], + [-1.915691614151001, 2.828824043273926], + [2.5990962982177734, -4.150846004486084], + [-5.1531291007995605, 7.523342609405518], + [-1.6611549854278564, 1.439439296722412], + [-0.3608207106590271, 9.281253814697266], + [-4.821018695831299, -4.830602169036865], + [7.645263195037842, -2.6893293857574463], + [-2.040583848953247, 2.169886589050293], + [-0.04649967700242996, 8.493522644042969], + [6.267360687255859, -3.4194176197052], + [-1.3430426120758057, 5.47519588470459], + [-0.4406515955924988, 9.92717456817627], + [-2.259476661682129, -1.1913325786590576], + [-2.0218935012817383, 2.6897952556610107], + [2.4410033226013184, 6.08671760559082], + [0.6220577955245972, -7.865853309631348], + [8.292189598083496, -3.2534759044647217], + [-0.3973540663719177, 8.996387481689453], + [-4.271717071533203, -1.7485274076461792], + [-2.9987683296203613, 2.890939474105835], + [-3.5417540073394775, -0.11631238460540771], + [-1.3870658874511719, 11.978772163391113], + [-4.184270858764648, -1.4125783443450928], + [-0.04691339284181595, -3.3444485664367676], + [-3.284024953842163, -0.6670722961425781], + [-4.628283977508545, -1.3232554197311401], + [1.0062686204910278, -7.560812950134277], + [0.7511773109436035, 2.4144136905670166], + [2.587583541870117, -4.217107772827148], + [8.640992164611816, -2.8597443103790283], + [-2.962723731994629, -2.160174608230591], + [9.173901557922363, -2.948286771774292], + [-0.82362961769104, 1.359525442123413], + [-0.405269980430603, 9.296499252319336], + [2.9425394535064697, 6.432503700256348], + [0.3536407947540283, -6.434951305389404], + [-5.223718643188477, 7.282384872436523], + [-2.486163377761841, -2.2684004306793213], + [-3.63161039352417, -1.2364779710769653], + [1.8583139181137085, 5.624253749847412], + [-5.209278583526611, 6.690224647521973], + [-2.5098016262054443, -1.7574793100357056], + [0.6597189903259277, -8.736106872558594], + [-1.8827848434448242, 1.2238332033157349], + [-2.5187630653381348, 5.981390953063965], + [4.081817150115967, 7.015753269195557], + [0.6092085838317871, -7.457462787628174], + [-3.4864814281463623, -0.8319326639175415], + [0.3858126997947693, -7.0269598960876465], + [9.887486457824707, -2.9655516147613525], + [-2.4013009071350098, -0.8546324372291565], + [-4.0376105308532715, 3.3419573307037354], + [2.9959232807159424, -4.980774879455566], + [-0.36129793524742126, -1.3658393621444702], + [3.6311678886413574, 7.087645530700684], + [0.561897337436676, -7.571817398071289], + [1.7259852886199951, -5.785074710845947], + [-4.245972633361816, -0.8768500089645386], + [2.2671263217926025, -4.438634395599365], + [2.615143299102783, 4.838813304901123], + [0.6929224133491516, -8.541644096374512], + [-3.7607507705688477, -0.695635199546814], + [-3.5784852504730225, -1.6306077241897583], + [1.2541916370391846, 1.1531386375427246], + [-0.9991193413734436, 10.356428146362305], + [-3.512653112411499, 4.998355865478516], + [5.465953350067139, -2.503155469894409], + [-5.716965198516846, 7.339770317077637], + [-2.345245599746704, 2.2864866256713867], + [-3.3972442150115967, -1.8228874206542969], + [8.727444648742676, -2.6449780464172363], + [7.471683025360107, -2.1521522998809814], + [1.4509587287902832, 5.853683948516846], + [-0.4168301224708557, 7.812504768371582], + [-0.9169371724128723, 10.059614181518555], + [-4.452181339263916, -1.6561561822891235], + [2.824401617050171, 7.059274673461914], + [1.7274491786956787, 4.498845100402832], + [-5.818798542022705, 4.447418689727783], + [2.8624074459075928, 0.7699519395828247], + [-3.2025725841522217, -2.283567190170288], + [-5.3294548988342285, 7.009529113769531], + [1.373133897781372, 0.6795956492424011], + [3.035712480545044, 0.36982300877571106], + [2.951070547103882, -4.646604537963867], + [-4.230458736419678, -1.1241127252578735], + [0.8866814970970154, -8.214253425598145], + [1.4111216068267822, -5.15899658203125], + [8.039141654968262, -3.0747411251068115], + [-4.59142541885376, 4.419380187988281], + [1.9368891716003418, -4.793503284454346], + [2.6955368518829346, -4.628962993621826], + [-1.358085036277771, 11.339370727539062], + [0.6583638191223145, -4.129640579223633], + [1.1550500392913818, -5.5401411056518555], + [2.423915147781372, 4.564817905426025], + [0.8734243512153625, -6.5416646003723145], + [-1.1714813709259033, 10.86784839630127], + [2.6896138191223145, -4.603888034820557], + [8.011469841003418, -2.494109869003296], + [6.3566107749938965, -3.946727991104126], + [-1.144477367401123, 10.895902633666992], + [-1.4066061973571777, 1.641189694404602], + [0.5907447934150696, -7.333505630493164], + [-4.249582290649414, -1.3927122354507446], + [-0.3470877408981323, -1.718588948249817], + [-1.0784034729003906, 0.0052257440984249115], + [7.7266082763671875, -2.3577992916107178], + [-3.8398172855377197, -2.610304355621338], + [7.315648555755615, -2.838470697402954], + [-1.594264268875122, -0.9437037706375122], + [0.6230621933937073, -4.432003498077393], + [-1.2321324348449707, 10.597145080566406], + [-3.7514050006866455, -1.8537284135818481], + [-0.34150487184524536, -2.8080694675445557], + [-0.3398211598396301, 6.789005279541016], + [1.7408796548843384, 0.2622453570365906], + [3.1610300540924072, 6.445016860961914], + [0.6351913809776306, -8.618755340576172], + [-5.875977516174316, -0.8154876828193665], + [0.2053389549255371, -0.9512340426445007], + [-3.331420660018921, 1.8868619203567505], + [-2.1707394123077393, 2.0847220420837402], + [-0.7140517830848694, 0.6663082242012024], + [-0.8747171759605408, 10.690780639648438], + [-4.311724662780762, 3.8924171924591064], + [6.128469944000244, -2.950096845626831], + [5.601785182952881, -1.2543193101882935], + [-4.832937240600586, 6.882423400878906], + [9.080113410949707, -2.7958109378814697], + [-1.9001526832580566, 1.7844834327697754], + [0.026378653943538666, -0.9786404371261597], + [-4.754201412200928, 5.429736614227295], + [2.2374536991119385, 5.6164231300354], + [-0.07727140933275223, 2.8333139419555664], + [0.1481732428073883, -4.418101787567139], + [1.4626805782318115, 4.4250593185424805], + [2.9257240295410156, -4.70540714263916], + [-3.4710347652435303, -0.9570704698562622], + [-0.18499678373336792, -1.9407469034194946], + [-3.581571340560913, -2.272838830947876], + [-2.1308977603912354, -0.7223367691040039], + [2.4651706218719482, -3.9103972911834717], + [8.67905044555664, -2.7900683879852295], + [-1.1706339120864868, 10.849400520324707], + [1.2738096714019775, 1.2785476446151733], + [-3.307863473892212, -1.0312364101409912], + [-0.2523499131202698, 8.364082336425781], + [9.289468765258789, -2.9521071910858154], + [-0.5109399557113647, -2.4439170360565186], + [0.4764624238014221, -6.9553937911987305], + [2.1989660263061523, 0.9868999719619751], + [-4.2432541847229, -0.3486572504043579], + [-0.43555718660354614, 8.270639419555664], + [-4.266034126281738, -2.8356940746307373], + [-2.0369765758514404, -6.52112066745758e-5], + [0.6398692727088928, -0.8715866208076477], + [5.248487949371338, 8.11652946472168], + [-0.013834722340106964, -3.292292356491089], + [-0.8894729614257812, -0.9895868301391602], + [0.8110265135765076, -9.873101234436035], + [0.6838378310203552, -8.181102752685547], + [-3.8259036540985107, -1.3140602111816406], + [-0.44628429412841797, 9.379871368408203], + [-0.38894885778427124, -1.9091211557388306], + [-0.6940751671791077, 9.62378978729248], + [-2.595306158065796, 5.994307518005371], + [-0.6375519633293152, 4.515358924865723], + [-0.4474944472312927, 8.556282997131348], + [-4.106192111968994, -3.8864219188690186], + [-2.8225200176239014, -0.9027159810066223], + [-2.6485798358917236, -0.19652056694030762], + [-3.5244500637054443, 3.0994200706481934], + [8.154450416564941, -2.549713134765625], + [1.3866785764694214, 5.568735122680664], + [1.0535722970962524, 4.642723560333252], + [0.6546664834022522, -5.246796607971191], + [-0.5645546913146973, -0.8730326890945435], + [1.5832949876785278, 6.791335582733154], + [3.7982921600341797, -4.910388946533203], + [8.247014045715332, -2.7042171955108643], + [0.6752172112464905, -8.21141242980957], + [0.33762896060943604, -6.131606578826904], + [-3.235170841217041, -1.5009061098098755], + [8.290345191955566, -2.5795695781707764], + [-5.574700355529785, 7.721275806427002], + [-4.544748306274414, -0.9626258611679077], + [6.096531867980957, -2.149569272994995], + [-3.455918073654175, -0.8681529760360718], + [-1.110027551651001, 11.986865997314453], + [3.235849618911743, 6.650135040283203], + [0.5607663989067078, -0.6072077751159668], + [1.9003387689590454, 4.864772319793701], + [-4.283429145812988, -2.8033108711242676], + [0.41296815872192383, -6.384245872497559], + [0.3435056209564209, -6.6414794921875], + [3.0080888271331787, -4.8897318840026855], + [1.6218311786651611, 1.8189215660095215], + [-0.20769065618515015, 10.064542770385742], + [-1.83465576171875, 5.888088226318359], + [0.4630126357078552, -4.969305038452148], + [-1.33694326877594, 11.752082824707031], + [1.4602563381195068, 0.9994816780090332], + [-0.8859919905662537, 10.66380500793457], + [-3.3979642391204834, -1.1352133750915527], + [0.3789914548397064, -4.905985355377197], + [1.5195083618164062, -5.547842502593994], + [-1.2512692213058472, 9.807579040527344], + [0.36978137493133545, -5.304270267486572], + [7.90905237197876, -2.4193387031555176], + [1.7369341850280762, 4.593530178070068], + [-1.1783405542373657, -0.437574565410614], + [-2.483083486557007, 1.9873799085617065], + [3.1378722190856934, -3.5365636348724365], + [-3.1999526023864746, -1.9369755983352661], + [7.546669006347656, -2.857109308242798], + [-0.9662135243415833, -0.7045369148254395], + [-3.830331325531006, -2.758524179458618], + [0.011280111968517303, -0.8672904372215271], + [-1.0743738412857056, 11.05225944519043], + [0.7864959836006165, -7.298236846923828], + [-0.31615912914276123, 9.32221794128418], + [8.897063255310059, -2.7375338077545166], + [-3.6021840572357178, -1.1393742561340332], + [6.176107883453369, -4.574880123138428], + [-3.4771642684936523, -1.3660470247268677], + [7.436509609222412, -2.1545071601867676], + [7.110154628753662, -3.296137571334839], + [-5.280874729156494, -0.9539459347724915], + [-0.4779854118824005, -1.0732450485229492], + [-4.453584671020508, -1.9245578050613403], + [-0.6876417994499207, 10.257442474365234], + [-1.9050118923187256, 1.5842077732086182], + [-0.7038124203681946, 10.247415542602539], + [-1.2360954284667969, 11.078424453735352], + [-3.7855331897735596, -1.0710715055465698], + [7.196527004241943, -2.7833898067474365], + [0.7978550791740417, -0.27572184801101685], + [-0.2925788462162018, -1.8338176012039185], + [2.7999050617218018, -4.6433868408203125], + [0.540302574634552, -3.525265693664551], + [-3.8992698192596436, 6.1641974449157715], + [0.12102314084768295, -3.6113665103912354], + [-0.6197549104690552, 9.43438720703125], + [-2.8215889930725098, -2.31876540184021], + [-5.82756233215332, 7.687514781951904], + [-0.058407820761203766, -4.687096118927002], + [7.751903057098389, -4.36419677734375], + [-2.5331127643585205, -1.1003395318984985], + [6.08903169631958, 8.8870267868042], + [1.0404329299926758, -5.580807685852051], + [4.380911350250244, 7.079721450805664], + [-5.38019323348999, 5.340433597564697], + [-3.5560686588287354, 4.660117149353027], + [-1.442968487739563, -0.542589545249939], + [-1.4555009603500366, 12.040731430053711], + [-1.9501179456710815, 2.1530702114105225], + [-3.170252799987793, -0.9623671770095825], + [3.092966079711914, -5.1414008140563965], + [2.4969301223754883, -5.104517936706543], + [-4.7285590171813965, -1.2417975664138794], + [-1.2063689231872559, 10.669532775878906], + [1.0838425159454346, -6.767054557800293], + [2.2576138973236084, 3.8284881114959717], + [1.0061455965042114, 5.056525230407715], + [6.071310043334961, -3.6816532611846924], + [0.6716960072517395, -4.793924331665039], + [5.027250289916992, 7.844986915588379], + [-3.177833080291748, -1.0893805027008057], + [1.060402274131775, -0.48927420377731323], + [-3.602290391921997, -2.7781708240509033], + [0.3139575123786926, -6.808393478393555], + [-1.3637027740478516, 11.44029426574707], + [-3.4681172370910645, 5.503098487854004], + [6.160386562347412, -1.9595369100570679], + [-2.050795316696167, 0.6839586496353149], + [-1.3975605964660645, 1.757577657699585], + [1.7847102880477905, -5.327302932739258], + [0.7040321826934814, -6.850864410400391], + [3.7981646060943604, 6.965420722961426], + [0.5495406985282898, -6.654166221618652], + [0.29118800163269043, -6.536165237426758], + [-4.06563138961792, -3.426551580429077], + [-3.8254945278167725, 5.684487342834473], + [1.8597594499588013, 4.8941650390625], + [-3.3797523975372314, -0.7965066432952881], + [2.833972454071045, -4.571569919586182], + [-1.193541407585144, 4.765660285949707], + [0.3550350069999695, -6.347015380859375], + [-3.910546064376831, -1.0720854997634888], + [-3.576706647872925, -0.3303990960121155], + [-0.14634591341018677, 7.010591506958008], + [-3.3471550941467285, 5.25071382522583], + [4.501262664794922, 7.524755954742432], + [7.688943386077881, -2.1600468158721924], + [3.1790435314178467, -4.923117637634277], + [-1.5533143281936646, 0.9955968856811523], + [1.9649875164031982, -4.7769269943237305], + [-3.8675549030303955, -2.4387624263763428], + [1.9695556163787842, 4.659858226776123], + [-0.07037483900785446, -1.2442505359649658], + [8.961228370666504, -2.8794314861297607], + [-1.087607741355896, 10.682039260864258], + [-1.9210269451141357, -0.6397640109062195], + [6.646283149719238, -1.27041494846344], + [2.189263105392456, -4.63993501663208], + [2.1256906986236572, -0.12481975555419922], + [-0.9895788431167603, 10.549861907958984], + [-3.035212516784668, 6.078427314758301], + [-3.7819230556488037, -1.189186930656433], + [2.393261194229126, -4.758202075958252], + [2.83738112449646, -4.842137336730957], + [8.10680866241455, -3.069225311279297], + [1.2717628479003906, 5.46718168258667], + [2.021723508834839, -3.578139066696167], + [2.627638578414917, 5.443943977355957], + [-1.1852134466171265, 11.267669677734375], + [-3.1833596229553223, -0.989338755607605], + [-4.118838787078857, -2.9186551570892334], + [-4.163168430328369, -2.28751540184021], + [-5.481878757476807, 6.570193290710449], + [-5.490524768829346, 4.4825663566589355], + [-3.3246383666992188, -1.2978912591934204], + [-3.3464653491973877, -1.3387552499771118], + [7.608609676361084, -2.7742722034454346], + [0.26393038034439087, -6.131527900695801], + [-4.903665065765381, 5.927690505981445], + [-1.7889872789382935, 2.1200413703918457], + [2.0238170623779297, 5.494861602783203], + [1.2542930841445923, 2.089340925216675], + [-1.1508125066757202, 10.717105865478516], + [-4.244933128356934, -1.7530266046524048], + [-5.260531425476074, 6.886791706085205], + [2.7877745628356934, -4.7578511238098145], + [-1.9470008611679077, 1.9280797243118286], + [-4.9762725830078125, 4.798421382904053], + [-0.7155901193618774, 3.0340139865875244], + [-4.842789173126221, -0.9940717816352844], + [0.024107597768306732, -4.3514628410339355], + [0.7684659957885742, -6.308767318725586], + [-3.677610158920288, -1.9437824487686157], + [5.9297003746032715, -1.2693175077438354], + [-1.2473230361938477, 10.917196273803711], + [-5.530879974365234, 7.224680423736572], + [-0.5564353466033936, -1.0257009267807007], + [0.0932844802737236, -5.855063438415527], + [0.4835849404335022, -7.6597514152526855], + [0.4365285038948059, -4.859185218811035], + [-1.970240831375122, 0.7743195295333862], + [7.531766414642334, -3.356010675430298], + [8.13664436340332, -3.087977886199951], + [-4.200098514556885, 6.573458671569824], + [4.929634094238281, -0.9004840850830078], + [-1.324910044670105, 11.803300857543945], + [6.041627407073975, -1.629872441291809], + [4.419718265533447, -4.362298011779785], + [1.4313457012176514, -0.06589052081108093], + [1.6094467639923096, 5.446528434753418], + [0.2775629758834839, -5.02993631362915], + [2.315178632736206, 3.992757558822632], + [0.6694453358650208, -7.708315849304199], + [0.9821797013282776, 4.9613471031188965], + [-5.640014171600342, 7.068446159362793], + [-0.19426506757736206, 9.139781951904297], + [0.8006435036659241, -8.454536437988281], + [0.5225072503089905, -8.297106742858887], + [-4.123074531555176, 6.3995361328125], + [1.7707566022872925, -4.880495548248291], + [-5.0117692947387695, 4.472397327423096], + [2.1404635906219482, 6.206755638122559], + [-1.8570966720581055, 1.372446060180664], + [5.385071277618408, 8.402045249938965], + [-4.512199878692627, 6.618832588195801], + [0.5524476170539856, 6.423822402954102], + [-1.2874563932418823, 11.218903541564941], + [0.39199984073638916, -7.202545642852783], + [-1.8924540281295776, 2.0798592567443848], + [1.7160301208496094, -5.064645767211914], + [-3.138099431991577, -2.174156427383423], + [-1.933415412902832, 1.935792088508606], + [0.8620827794075012, -7.658900260925293], + [2.4277820587158203, -6.9927568435668945], + [-3.4736075401306152, -1.9169176816940308], + [6.928896427154541, -5.592329025268555], + [4.653126239776611, -0.2628353238105774], + [7.973880290985107, -3.4234979152679443], + [-3.520951986312866, -1.8237991333007812], + [7.826216220855713, -2.6784331798553467], + [2.7434680461883545, -4.087592124938965], + [4.065237522125244, 7.326672554016113], + [-1.8924744129180908, 0.7728193402290344], + [-0.164986252784729, -2.8742644786834717], + [2.806040048599243, -4.657419204711914], + [-4.3849711418151855, 6.241755485534668], + [-1.3210391998291016, 11.752001762390137], + [4.294375896453857, 7.691077709197998], + [-1.0319033861160278, 10.210622787475586], + [6.234172344207764, -1.903886318206787], + [-3.2114789485931396, -1.6802482604980469], + [2.033416748046875, -4.058172225952148], + [-1.3101511001586914, 12.517448425292969], + [5.88507604598999, -3.327864646911621], + [-0.43272942304611206, 10.032163619995117], + [-1.6690248250961304, -2.8983683586120605], + [4.149859428405762, 7.5739054679870605], + [8.136563301086426, -2.709669589996338], + [2.9339985847473145, -5.020264148712158], + [-2.017660617828369, 0.7292389869689941], + [2.304147243499756, -4.582528114318848], + [-3.664987325668335, 5.571789741516113], + [0.6218647956848145, -7.95674467086792], + [0.72513347864151, 2.644937753677368], + [2.856992483139038, -4.781023025512695], + [-5.8408989906311035, 7.673177719116211], + [0.09318380802869797, -5.690492630004883], + [-2.1768462657928467, -0.7233617305755615], + [-4.242243766784668, -2.832824468612671], + [-0.12187912315130234, -1.2662709951400757], + [-2.8500514030456543, 4.601439476013184], + [0.6862757802009583, -6.99542236328125], + [1.1003124713897705, -0.089405357837677], + [-4.507119655609131, 1.4542540311813354], + [0.9444800019264221, -7.917522430419922], + [-1.8555620908737183, 2.1554653644561768], + [7.62312126159668, -2.3964157104492188], + [0.48468416929244995, -0.8032599091529846], + [0.5701140761375427, 1.0031589269638062], + [0.5880182385444641, -4.606135368347168], + [0.6767842173576355, -8.558575630187988], + [-3.1627299785614014, -2.3913016319274902], + [0.20040470361709595, -5.683353424072266], + [1.6734750270843506, 1.9421097040176392], + [-1.8711953163146973, 1.1812844276428223], + [1.865976095199585, 5.946209907531738], + [-3.11806321144104, -1.116235375404358], + [-1.9832687377929688, 2.133350133895874], + [9.389805793762207, -2.8301355838775635], + [-4.413293361663818, -0.6509400010108948], + [-2.3843204975128174, 2.3737306594848633], + [-0.4742701053619385, -0.5633944272994995], + [-5.0670084953308105, -3.366149663925171], + [3.089249849319458, -5.02480936050415], + [1.1764594316482544, -4.881923675537109], + [-1.260067105293274, 11.183870315551758], + [-2.0102627277374268, 0.18218249082565308], + [-1.072548270225525, -1.6922403573989868], + [-4.048895835876465, -1.2045055627822876], + [-3.7482588291168213, -1.1829801797866821], + [3.199765205383301, -4.944583415985107], + [7.548276901245117, -3.131394863128662], + [-1.3237096071243286, 11.87132453918457], + [0.5347844958305359, -8.235780715942383], + [2.532663106918335, -5.434182167053223], + [0.4915502667427063, -0.8658905029296875], + [-5.4378838539123535, 4.516724109649658], + [3.471205234527588, -6.362668037414551], + [-0.5493785738945007, -2.8928914070129395], + [-4.972259044647217, 6.158280372619629], + [-0.0057072713971138, -4.961545944213867], + [9.45749282836914, -2.9364073276519775], + [5.99242639541626, -3.591689348220825], + [-0.8206197023391724, 10.75161361694336], + [-0.9981744885444641, 10.634241104125977], + [2.576660633087158, 2.7505033016204834], + [-4.8969550132751465, 1.0796655416488647], + [3.9572975635528564, -5.509193420410156], + [0.3807266354560852, -5.352724075317383], + [-3.9376590251922607, -1.6946074962615967], + [-3.803793430328369, 4.9671125411987305], + [2.944500684738159, -4.598523139953613], + [2.2697038650512695, -5.34987735748291], + [0.8262997269630432, -0.16580060124397278], + [-3.854738473892212, -2.6645760536193848], + [-3.571875810623169, -0.4940144419670105], + [0.4546244144439697, -7.217436790466309], + [-2.7808425426483154, 2.9921863079071045], + [5.776235103607178, 8.642196655273438], + [1.5047054290771484, 1.7183903455734253], + [0.9849686026573181, -6.654187202453613], + [-2.4371421337127686, -0.2654361128807068], + [0.49944430589675903, -7.972765922546387], + [-4.746792316436768, 6.114678382873535], + [-3.942080020904541, -2.649660110473633], + [1.5972342491149902, -5.2177653312683105], + [-3.3892388343811035, 5.4267683029174805], + [-1.0208101272583008, -0.5978134870529175], + [1.168466329574585, 0.6742556691169739], + [-1.7432994842529297, 1.8727086782455444], + [2.829869270324707, -4.487600326538086], + [-4.3296990394592285, -4.430174827575684], + [6.6288228034973145, -3.0331923961639404], + [0.2921561002731323, -5.727160930633545], + [0.46539556980133057, -0.72869873046875], + [4.973933696746826, 8.227315902709961], + [-3.0780327320098877, -2.278226613998413], + [-4.29341459274292, -2.274831533432007], + [-0.10481081157922745, -4.514388084411621], + [-1.1716163158416748, 10.685115814208984], + [-3.1200320720672607, -1.4253722429275513], + [0.7433223724365234, -6.601419925689697], + [-2.773043394088745, 3.0418713092803955], + [-5.566803455352783, -0.7702925205230713], + [2.4712975025177, -4.2572736740112305], + [2.3641579151153564, -4.860566139221191], + [-4.158216953277588, 7.0541791915893555], + [2.070488452911377, 0.8222792148590088], + [-3.070737838745117, -0.9284762740135193], + [9.319639205932617, -2.80707049369812], + [1.078453540802002, -0.23459678888320923], + [-0.39407795667648315, -1.0058643817901611], + [-4.09657621383667, -1.8368090391159058], + [-2.8425538539886475, -1.1094039678573608], + [-4.91433572769165, 6.559071063995361], + [-3.6008660793304443, -1.4486581087112427], + [0.004773370921611786, -5.404443740844727], + [-3.885282278060913, -2.76082444190979], + [-3.510169744491577, -0.959443986415863], + [2.8424205780029297, -4.68559455871582], + [6.7907304763793945, -1.976784348487854], + [8.375038146972656, -2.7613000869750977], + [3.1238720417022705, -4.864797592163086], + [4.883542537689209, -4.5967302322387695], + [6.309567451477051, 9.107938766479492], + [-1.229681372642517, 11.097923278808594], + [1.7054007053375244, -5.99228048324585], + [-2.083961009979248, -1.4795907735824585], + [1.1384323835372925, -5.367478370666504], + [2.384406089782715, -4.732860565185547], + [5.945772647857666, -1.6447869539260864], + [-4.045098781585693, -1.513821005821228], + [-1.3388537168502808, 11.455840110778809], + [1.6379553079605103, 4.937467098236084], + [-4.128966808319092, -1.530423879623413], + [-3.505387544631958, 3.529378652572632], + [0.3986988663673401, -6.850895404815674], + [-4.055866718292236, 5.451505661010742], + [1.5826013088226318, -5.094335079193115], + [1.3498141765594482, -6.095248699188232], + [0.5210314989089966, -4.898930072784424], + [-3.7129459381103516, 3.6220104694366455], + [5.7340407371521, -1.3159812688827515], + [0.1261572241783142, 0.5003746747970581], + [-3.5645294189453125, -3.1802079677581787], + [-4.05272102355957, 6.629587173461914], + [-3.288271188735962, -0.23370319604873657], + [-3.992201089859009, -1.2525840997695923], + [8.191850662231445, -2.4693214893341064], + [9.785426139831543, -2.9545371532440186], + [2.5134477615356445, -4.776887893676758], + [0.6482402086257935, -8.288752555847168], + [3.538506507873535, 6.511683464050293], + [-0.5482127666473389, 10.94586181640625], + [-1.459242343902588, 12.155061721801758], + [-1.326969027519226, 11.81060791015625], + [-3.9155657291412354, -1.2336933612823486], + [3.0453402996063232, -4.611873626708984], + [0.7090026140213013, -8.956473350524902], + [9.147401809692383, -2.8828885555267334], + [-0.341794490814209, 9.932458877563477], + [0.6259620189666748, 4.614201545715332], + [-3.686147451400757, -1.9319721460342407], + [-1.2794169187545776, 11.412762641906738], + [-3.4540979862213135, -1.529882550239563], + [-1.1202044486999512, 5.54149055480957], + [-0.413200318813324, 10.299495697021484], + [8.895606994628906, -2.711801290512085], + [9.723966598510742, -2.97456431388855], + [2.1469461917877197, -5.255675315856934], + [-1.628354787826538, 1.3557568788528442], + [1.8801929950714111, 5.182882785797119], + [0.5608126521110535, -7.383459568023682], + [-3.6262850761413574, -3.866604804992676], + [2.5215137004852295, -4.513764381408691], + [-1.5764788389205933, 12.844661712646484], + [-2.3386006355285645, 2.840104341506958], + [-3.791262626647949, -1.4126523733139038], + [5.448963165283203, -3.942051649093628], + [-1.202893853187561, 11.816242218017578], + [0.3604811429977417, -6.692202568054199], + [2.1425163745880127, 5.356451988220215], + [-3.123903274536133, -2.5646109580993652], + [-0.4051080644130707, 0.744019627571106], + [2.6676557064056396, -4.775918483734131], + [-1.330121636390686, -2.074312686920166], + [3.1529057025909424, 6.8973774909973145], + [-4.741227626800537, -0.6377586126327515], + [2.29121470451355, 6.171947479248047], + [-4.452561855316162, -0.997602641582489], + [-5.165804386138916, 3.3839752674102783], + [-0.9784801602363586, 9.841023445129395], + [-3.164841890335083, -0.8831156492233276], + [0.6946430206298828, -6.08582878112793], + [-3.629258394241333, -1.3234564065933228], + [1.9368197917938232, 4.665081977844238], + [-3.8240463733673096, 5.543981075286865], + [0.9008200764656067, -5.302975654602051], + [-4.854519367218018, -4.323397636413574], + [-5.094128131866455, -1.1623953580856323], + [-0.5388028621673584, 7.882724761962891], + [-4.992818355560303, -1.140825629234314], + [-0.6822447776794434, -3.705681085586548], + [-3.877403974533081, -0.3643007278442383], + [-0.574737548828125, 10.101755142211914], + [-1.2082072496414185, 11.527213096618652], + [-4.772729873657227, 6.88285493850708], + [-2.4595232009887695, -0.5633217692375183], + [-4.669625759124756, -3.1519062519073486], + [-1.3282676935195923, -0.8033370971679688], + [2.615689754486084, -4.368989944458008], + [-0.3315389156341553, 8.908184051513672], + [1.5492033958435059, 3.95434308052063], + [-3.98954176902771, 6.714822292327881], + [1.2761701345443726, 1.5010099411010742], + [7.832324504852295, -2.8857247829437256], + [-3.716874599456787, 5.8853840827941895], + [0.5244472026824951, -6.524388790130615], + [0.37898439168930054, -6.892907619476318], + [-1.09261953830719, 11.4295015335083], + [-3.870957612991333, 6.314576148986816], + [2.442603588104248, -5.322964191436768], + [1.8757045269012451, 3.29416823387146], + [1.6758744716644287, -5.623028755187988], + [0.4853098392486572, 6.502950191497803], + [-2.201993942260742, 1.9976121187210083], + [1.0985503196716309, -5.635693550109863], + [6.626330852508545, -4.295602798461914], + [5.24812126159668, 8.031740188598633], + [6.3158040046691895, -1.8731263875961304], + [1.9732844829559326, 4.254721641540527], + [-4.885009765625, -0.7289814949035645], + [-3.7192986011505127, -2.331321954727173], + [-3.8642494678497314, -4.802770614624023], + [4.1843791007995605, 7.620023727416992], + [5.507745742797852, -3.073521614074707], + [3.1545331478118896, -4.582790851593018], + [2.71382212638855, -4.667580604553223], + [-3.655134916305542, -1.8536309003829956], + [8.796942710876465, -2.636993646621704], + [2.0182816982269287, -3.9302830696105957], + [-0.8661841750144958, 3.503671884536743], + [2.9799129962921143, -4.702503204345703], + [-2.187366485595703, -3.6866185665130615], + [1.7060596942901611, 2.2291715145111084], + [-1.5175248384475708, 1.5261787176132202], + [-0.8358665108680725, 10.171060562133789], + [-3.7767789363861084, -1.3094271421432495], + [-0.49042069911956787, 9.175195693969727], + [3.700594663619995, -3.768091917037964], + [-1.0217986106872559, -1.0341410636901855], + [-2.7478530406951904, -1.2340301275253296], + [-3.5113747119903564, -1.379311203956604], + [-3.0411946773529053, -3.4418153762817383], + [-0.3794645667076111, 9.007101058959961], + [1.3213250637054443, -4.668076038360596], + [-0.600256621837616, 11.124756813049316], + [-3.839571952819824, -1.12264883518219], + [8.343711853027344, -2.5892250537872314], + [-1.9486933946609497, 1.7248128652572632], + [0.6086654663085938, -8.442614555358887], + [1.2335879802703857, -5.980371952056885], + [-1.6251318454742432, 12.840917587280273], + [6.384704113006592, -2.70000958442688], + [-3.9459340572357178, 6.236907958984375], + [-2.2213540077209473, 0.6318987607955933], + [0.44387972354888916, -6.4166154861450195], + [0.6881573796272278, -7.98635196685791], + [0.45861464738845825, -5.836236000061035], + [9.055453300476074, -2.7333695888519287], + [-2.381960391998291, 2.388338088989258], + [-4.072412490844727, -2.5888242721557617], + [2.808729648590088, -4.627442836761475], + [2.704606533050537, -4.210153579711914], + [-3.9947268962860107, -1.8182371854782104], + [-2.6936395168304443, -3.527275800704956], + [-0.8308030962944031, -1.275841474533081], + [-1.9713155031204224, 1.5923031568527222], + [-3.9104089736938477, -1.9878743886947632], + [-3.445413827896118, -1.4821678400039673], + [-3.5514304637908936, 4.963016033172607], + [1.5027885437011719, 3.4381089210510254], + [0.10671054571866989, -3.5754470825195312], + [0.5291362404823303, -5.298813819885254], + [0.3984079957008362, -1.0817947387695312], + [1.49882972240448, 5.732942581176758], + [6.592311859130859, -4.895271301269531], + [-3.1439430713653564, -3.4494102001190186], + [4.828150272369385, 7.818342208862305], + [-1.9898098707199097, 1.9166971445083618], + [1.0788413286209106, 0.24116021394729614], + [0.8909094333648682, 5.611130714416504], + [-4.673553943634033, 5.953853607177734], + [-3.734867572784424, -2.403780698776245], + [-1.1751444339752197, 11.318796157836914], + [-3.949465036392212, -1.297505259513855], + [-4.072432041168213, -1.446546196937561], + [2.0374815464019775, -5.748693466186523], + [-1.194132685661316, 10.95760726928711], + [0.5804091095924377, -8.32203197479248], + [-2.0242276191711426, 1.593307375907898], + [-4.5730204582214355, -3.5281221866607666], + [0.6491591930389404, -7.969740867614746], + [2.8974406719207764, -4.801923751831055], + [-1.4037365913391113, 12.693257331848145], + [7.225727558135986, -2.943943738937378], + [-0.799228847026825, 10.785255432128906], + [-3.707157611846924, -1.077829360961914], + [-3.842723846435547, -1.384004831314087], + [0.9979252219200134, 0.487338662147522], + [1.2137482166290283, 5.183300018310547], + [-2.1697051525115967, -0.953902006149292], + [2.408935308456421, -4.134587287902832], + [-4.726223468780518, -1.7810770273208618], + [-3.5782973766326904, -1.3794654607772827], + [-1.963944911956787, 1.4741414785385132], + [-1.3037333488464355, -0.6720536351203918], + [-2.416353702545166, -2.5535218715667725], + [-1.7803868055343628, 0.1722632348537445], + [2.9128875732421875, -4.6670145988464355], + [3.0053467750549316, -4.901832580566406], + [-0.9920457005500793, 11.218839645385742], + [-1.5839715003967285, -0.7861182689666748], + [1.668340802192688, 2.8676698207855225], + [-4.131747722625732, 5.6375627517700195], + [0.3593454957008362, -2.8077666759490967], + [-3.1371636390686035, -2.0596303939819336], + [-0.43818598985671997, 7.080316543579102], + [0.9945324063301086, -0.48176342248916626], + [-1.8120784759521484, 1.9338135719299316], + [-4.8706183433532715, 3.88421893119812], + [2.4723691940307617, -4.435672283172607], + [-0.3872571885585785, 5.859442710876465], + [-0.3001357913017273, -1.6557255983352661], + [-4.636017799377441, 7.0072550773620605], + [-0.8184778094291687, 10.545515060424805], + [5.675390720367432, -1.294458031654358], + [0.489474356174469, -6.328155517578125], + [0.31499677896499634, -5.3295769691467285], + [0.5212158560752869, -7.504992961883545], + [7.612420558929443, -3.3958380222320557], + [-0.8913882374763489, 10.88102912902832], + [0.45387333631515503, -0.8468927145004272], + [-4.895707130432129, 6.96816349029541], + [6.8186187744140625, -2.01570987701416], + [0.19445323944091797, -4.726322174072266], + [-0.042535968124866486, -3.4417309761047363], + [0.8973695039749146, -0.729182243347168], + [-4.385387897491455, -0.6570132970809937], + [7.899987697601318, -2.5893800258636475], + [-0.929547131061554, 10.135293006896973], + [7.770374774932861, -2.2448012828826904], + [1.6342979669570923, 6.1154303550720215], + [-1.1848574876785278, 10.37702751159668], + [5.666845321655273, 8.52570915222168], + [-5.452427387237549, -6.034207344055176], + [-3.3272736072540283, -1.1949995756149292], + [-1.908855676651001, 2.096245527267456], + [-4.619886875152588, 3.3216021060943604], + [-4.633833408355713, 5.17730188369751], + [2.385929822921753, 0.49958324432373047], + [-3.305410146713257, -0.9541822075843811], + [-5.629882335662842, -4.7665605545043945], + [-4.0225653648376465, 5.516094207763672], + [-0.32154613733291626, 10.454639434814453], + [0.24490869045257568, 5.808229923248291], + [-0.10216159373521805, 2.109872579574585], + [1.4401586055755615, -5.379230976104736], + [1.9285881519317627, 2.895822763442993], + [-1.8401556015014648, 1.2140746116638184], + [2.6132824420928955, -4.569809913635254], + [-0.4582289457321167, -1.0797282457351685], + [-1.2786489725112915, 10.910154342651367], + [-1.9900245666503906, 2.440305233001709], + [-3.3166415691375732, -1.9933993816375732], + [-1.1508816480636597, 11.036256790161133], + [-1.3824137449264526, 11.705167770385742], + [7.150388240814209, -4.199716567993164], + [3.095524549484253, 6.004297256469727], + [-2.2476613521575928, -0.1287485957145691], + [4.011492729187012, -3.3711869716644287], + [2.350255250930786, -4.495813369750977], + [-0.6265156865119934, 10.138147354125977], + [-4.114408493041992, -1.3295072317123413], + [-1.4598699808120728, 1.3075541257858276], + [2.1715633869171143, -5.9435954093933105], + [0.41349679231643677, -7.142662048339844], + [2.4334962368011475, 6.2016167640686035], + [6.339748859405518, -3.091233015060425], + [-3.879727602005005, -1.727662205696106], + [-2.3788340091705322, -0.9944433569908142], + [-0.9357696175575256, 9.674304008483887], + [0.5847105383872986, -6.357550144195557], + [1.7928653955459595, -4.2287397384643555], + [-1.3729568719863892, -0.0846661627292633], + [5.944146633148193, 8.8267822265625], + [0.27192944288253784, -3.9174649715423584], + [-3.4654080867767334, -0.9374035596847534], + [-1.3517134189605713, 11.735054016113281], + [-3.390179395675659, -1.2579193115234375], + [-1.833303689956665, 0.07930034399032593], + [-1.5078115463256836, 12.408248901367188], + [-4.719229698181152, 6.7053751945495605], + [-1.990717887878418, 1.8940974473953247], + [-0.42201346158981323, 9.439603805541992], + [-1.335625410079956, 11.729314804077148], + [0.4025866985321045, -5.924599647521973], + [2.6853692531585693, -4.520364761352539], + [-2.1105942726135254, 0.9982942342758179], + [1.6023191213607788, 4.8523640632629395], + [-1.6269313097000122, 1.619468331336975], + [0.6488032341003418, -7.116628170013428], + [-1.1796728372573853, 1.5444140434265137], + [-1.5473746061325073, 1.2162147760391235], + [-0.5682340860366821, -1.7368521690368652], + [1.3346322774887085, -5.187029838562012], + [-0.7623265981674194, 9.882181167602539], + [-1.8333760499954224, 2.0854432582855225], + [-4.481669902801514, 1.3279097080230713], + [-3.9743082523345947, -2.149669647216797], + [2.692209243774414, -4.249317646026611], + [-2.537790536880493, -0.3288632035255432], + [0.5699363946914673, -7.127824306488037], + [3.0191988945007324, -4.791810989379883], + [0.1692315936088562, 1.3011161088943481], + [3.049027442932129, -4.184596061706543], + [2.040360689163208, 3.294652223587036], + [1.3135721683502197, 0.3906196355819702], + [1.9793260097503662, 1.2900313138961792], + [-3.9417521953582764, -2.319755792617798], + [0.007242016494274139, -2.959965705871582], + [6.325127124786377, -1.7037036418914795], + [2.8021018505096436, -4.666815757751465], + [-4.799238681793213, -0.9232053756713867], + [-2.2544150352478027, -0.35469722747802734], + [0.9612236618995667, 5.417613983154297], + [-3.894925355911255, -1.3740911483764648], + [1.890028715133667, 5.110570430755615], + [6.474246978759766, -4.573737144470215], + [2.225249767303467, -4.032593727111816], + [7.273163318634033, -1.9165517091751099], + [9.389843940734863, -2.7869484424591064], + [-2.433018445968628, 0.2507452368736267], + [2.18434739112854, -4.136350631713867], + [0.2512637972831726, -6.578546524047852], + [3.4304111003875732, -3.932530164718628], + [-4.013372898101807, -1.2497878074645996], + [0.012391172349452972, -3.6219773292541504], + [-1.1029731035232544, 11.058656692504883], + [-3.3940317630767822, -1.9031026363372803], + [0.839088499546051, -6.869440078735352], + [2.8655030727386475, 5.878958702087402], + [9.566362380981445, -2.861786365509033], + [-4.826208114624023, -0.8060731291770935], + [-0.3989715576171875, -1.2180315256118774], + [-4.155361175537109, -2.2024238109588623], + [8.087118148803711, -2.90685772895813], + [-3.977947473526001, -0.8057958483695984], + [-0.8960546851158142, 6.9782185554504395], + [-3.4216115474700928, -1.7099244594573975], + [-0.41036999225616455, 9.279765129089355], + [5.608278751373291, 8.488340377807617], + [-5.027333736419678, -4.0726189613342285], + [0.4049689769744873, -0.12403647601604462], + [1.2103811502456665, -0.19715985655784607], + [0.46052229404449463, -5.789581298828125], + [-2.0900330543518066, 6.007720947265625], + [-2.967700242996216, -0.7956599593162537], + [-0.11936581879854202, -4.097209930419922], + [5.297426700592041, 8.269911766052246], + [1.3542542457580566, -4.352924823760986], + [-0.9933018088340759, -0.6169615387916565], + [4.067311763763428, -0.26015791296958923], + [-3.3570945262908936, -1.2903378009796143], + [-1.2350897789001465, -1.837575078010559], + [6.915713310241699, -3.16290020942688], + [3.0336740016937256, -5.038258075714111], + [4.767810821533203, -3.491523504257202], + [3.1474130153656006, -4.909791946411133], + [2.4057981967926025, -4.731295108795166], + [5.350700378417969, 8.547107696533203], + [-0.0727018192410469, -5.369424819946289], + [-3.1686861515045166, 5.3051323890686035], + [2.008146286010742, 5.4455671310424805], + [-3.633235216140747, 6.267189979553223], + [-2.3211588859558105, -1.76235830783844], + [-3.2258622646331787, 5.395871162414551], + [-0.7335956692695618, -1.1162410974502563], + [0.4477232098579407, -6.521754264831543], + [-1.981734275817871, 1.6571093797683716], + [-2.973346710205078, -1.1361817121505737], + [-0.17961445450782776, -1.3709410429000854], + [-4.72695255279541, -3.074946165084839], + [-4.611364841461182, -0.8364225029945374], + [6.457001209259033, -3.098029375076294], + [-4.09769868850708, -3.1961615085601807], + [3.016511917114258, -5.063534736633301], + [-1.6386842727661133, 2.0015246868133545], + [-1.1681005954742432, 10.957252502441406], + [-5.070084095001221, 7.3763837814331055], + [2.1331136226654053, 4.989409446716309], + [1.4990657567977905, 7.617460250854492], + [4.5744709968566895, -0.7191841006278992], + [0.568159282207489, -7.4592437744140625], + [2.247211217880249, 5.688763618469238], + [-1.9444104433059692, 1.8050676584243774], + [8.39539623260498, -2.5443451404571533], + [-0.12265900522470474, -1.3555594682693481], + [1.2730367183685303, 5.046226501464844], + [1.9951355457305908, -4.723320960998535], + [2.0327072143554688, 4.754666328430176], + [8.68785572052002, -2.8403875827789307], + [0.5755274295806885, -8.138129234313965], + [-4.994185447692871, -0.2775214910507202], + [-1.9526681900024414, 1.7656199932098389], + [2.3061187267303467, -4.245419502258301], + [-5.466606140136719, -0.9726454615592957], + [-5.805592060089111, 6.952699184417725], + [1.7270076274871826, 5.4570794105529785], + [1.8608609437942505, 5.7879109382629395], + [0.16979101300239563, -5.606811046600342], + [-0.8976107835769653, 1.0272542238235474], + [-3.1730940341949463, -1.0855051279067993], + [-3.815258502960205, 6.0876264572143555], + [0.8010204434394836, -7.2128143310546875], + [-2.022101879119873, 1.0037236213684082], + [-1.0634270906448364, 10.140064239501953], + [-3.622884511947632, -2.397399663925171], + [0.26258498430252075, -4.399888038635254], + [2.412285089492798, -4.90989875793457], + [-1.8707900047302246, 1.3092223405838013], + [0.06488033384084702, -0.54052734375], + [-3.2207047939300537, -1.2433364391326904], + [1.7088112831115723, -5.205549240112305], + [0.6019297242164612, -7.069319725036621], + [-2.6991665363311768, 2.4750492572784424], + [6.817565441131592, -3.5085015296936035], + [1.1615922451019287, -4.681246280670166], + [-4.753906726837158, -3.444819927215576], + [0.957557737827301, -4.042961120605469], + [4.261118412017822, 7.059905052185059], + [0.7098131775856018, -8.636691093444824], + [2.320296287536621, -5.235266208648682], + [8.207475662231445, -2.4999678134918213], + [-1.6809879541397095, 1.6277527809143066], + [1.814566969871521, 1.4769397974014282], + [-0.42610031366348267, -1.0695106983184814], + [-2.9717862606048584, -2.0498695373535156], + [0.025410763919353485, -0.3879678249359131], + [-3.22009539604187, -1.0016103982925415], + [1.1844751834869385, -5.686426162719727], + [0.5404929518699646, -6.0108418464660645], + [-4.5497965812683105, -0.9873828291893005], + [4.367710590362549, 7.233373641967773], + [2.214690923690796, 0.7354450821876526], + [-1.4079418182373047, 11.592735290527344], + [-3.153127431869507, -1.5201905965805054], + [0.4228264093399048, -5.843555450439453], + [0.941658079624176, -5.853201866149902], + [0.632107675075531, -8.906146049499512], + [-5.195709228515625, 6.68110466003418], + [1.6619343757629395, 4.350438117980957], + [5.380501747131348, -2.5081281661987305], + [4.826335906982422, -0.8450304269790649], + [3.8723628520965576, -3.874685525894165], + [-1.533195972442627, 12.640764236450195], + [-1.9279769659042358, 1.8902394771575928], + [-4.169623374938965, 5.849557876586914], + [-4.415882110595703, 6.5135602951049805], + [-3.455251455307007, -1.7387007474899292], + [7.512816429138184, -2.153228998184204], + [-1.7091648578643799, 1.5349457263946533], + [-0.05016333609819412, -4.047858238220215], + [-1.9252780675888062, 0.31877410411834717], + [0.6323531270027161, -8.485934257507324], + [-1.0419038534164429, 10.445714950561523], + [-1.5043140649795532, 12.410041809082031], + [5.614780902862549, -1.7738274335861206], + [-4.153627872467041, -2.494039297103882], + [1.7448104619979858, -6.512845039367676], + [-3.451500177383423, -1.1442047357559204], + [-1.1974750757217407, 0.8294187188148499], + [-4.524084568023682, -0.6801555156707764], + [2.7495853900909424, -4.77658748626709], + [-0.16751840710639954, -0.7055739164352417], + [1.5886855125427246, 2.213299036026001], + [2.4818708896636963, -6.050362586975098], + [7.109144687652588, -2.400118112564087], + [-4.053609371185303, -1.3373554944992065], + [0.7907090783119202, -3.998520851135254], + [2.0443694591522217, -4.469987869262695], + [8.604697227478027, -2.4844329357147217], + [-0.7622896432876587, 10.569686889648438], + [6.931909561157227, -1.9569751024246216], + [2.824065923690796, -4.343142032623291], + [-4.8591837882995605, -1.470293641090393], + [-3.4701201915740967, -2.058939218521118], + [-3.888200521469116, -0.9486969709396362], + [6.882136821746826, -4.672079086303711], + [-0.33586084842681885, -1.783720850944519], + [-4.827434539794922, 6.928741455078125], + [-4.97841215133667, -4.432768821716309], + [-3.143188714981079, 5.203277587890625], + [0.15893620252609253, -5.363977432250977], + [-3.265259265899658, -3.6217644214630127], + [-1.233292818069458, 11.438591957092285], + [2.390228509902954, -4.081981182098389], + [-3.0130417346954346, -0.17613327503204346], + [0.355369508266449, -5.132315635681152], + [0.9692683815956116, -6.533806324005127], + [-3.5173447132110596, -1.487740397453308], + [2.8259057998657227, 6.016833305358887], + [-2.235424280166626, -1.48737370967865], + [-2.176574945449829, -2.3617513179779053], + [-3.4766736030578613, -1.7301908731460571], + [0.7331958413124084, -0.5952063798904419], + [1.2395085096359253, -5.922811985015869], + [4.846981525421143, 7.75056791305542], + [2.2032248973846436, -4.307391166687012], + [1.7195106744766235, -4.765905380249023], + [-3.8708345890045166, -1.3984605073928833], + [-4.351251125335693, -1.1034387350082397], + [-2.2965757846832275, 2.6623291969299316], + [2.0622177124023438, 4.892814636230469], + [7.596152305603027, -2.2839579582214355], + [-0.03579903393983841, -4.910806179046631], + [2.1715197563171387, -5.132186412811279], + [-3.113551378250122, -2.045419692993164], + [2.4584767818450928, 3.8214261531829834], + [3.7330591678619385, -3.6366865634918213], + [1.9595606327056885, 4.714278697967529], + [-3.9787909984588623, -2.1788456439971924], + [-5.685863971710205, 5.2841644287109375], + [0.8293814659118652, 4.507501602172852], + [2.730023145675659, -4.633037090301514], + [-3.459861993789673, -1.3495022058486938], + [-1.2694727182388306, 10.841229438781738], + [1.1051597595214844, -3.951792001724243], + [-3.505305767059326, 4.4073286056518555], + [0.6732711791992188, -7.5719451904296875], + [-1.222787618637085, 10.981953620910645], + [-5.413143634796143, 7.007699966430664], + [-1.8331853151321411, 0.9521061182022095], + [1.0546540021896362, -5.73404598236084], + [0.44517797231674194, -7.478553295135498], + [0.22153645753860474, -6.245832443237305], + [0.6182669997215271, -8.128788948059082], + [2.9823710918426514, -4.890532970428467], + [-1.988134741783142, 0.9800219535827637], + [2.2770016193389893, -3.787423849105835], + [-1.8989145755767822, 1.6926482915878296], + [1.3942979574203491, 5.232151031494141], + [-1.2589882612228394, 11.413299560546875], + [0.40332531929016113, -5.9183197021484375], + [1.5733568668365479, 4.692960262298584], + [-3.958204507827759, -1.2618993520736694], + [-4.006998062133789, -0.38216912746429443], + [-1.3259940147399902, 11.71850299835205], + [6.895298480987549, -4.963108062744141], + [-4.004080295562744, -0.31467747688293457], + [-1.2144008874893188, 11.18545913696289], + [4.033296585083008, -3.9493489265441895], + [-4.477544784545898, 5.362375259399414], + [-0.7391865849494934, -0.6463645696640015], + [-3.55138897895813, -2.0388588905334473], + [0.3502184748649597, -4.129363059997559], + [8.266989707946777, -3.5226552486419678], + [1.038899540901184, -0.448121577501297], + [-5.047982692718506, 6.142450332641602], + [1.4488779306411743, 5.531386375427246], + [2.9179606437683105, -4.560930252075195], + [8.254046440124512, -2.8982555866241455], + [-1.5109723806381226, 12.532323837280273], + [-2.835486888885498, -1.8921823501586914], + [2.713515520095825, 5.19183349609375], + [3.1146585941314697, 6.558018684387207], + [-0.6584612727165222, -0.616219162940979], + [-1.4738513231277466, 1.2029098272323608], + [2.581001043319702, -4.264390468597412], + [-4.989719390869141, -0.7263045907020569], + [-5.21616792678833, 6.075343132019043], + [4.785334587097168, -5.169439315795898], + [2.286480188369751, 5.470462322235107], + [7.875039100646973, -2.540634870529175], + [-3.090317487716675, -1.2262071371078491], + [-3.7085230350494385, -0.8035563230514526], + [-3.6490800380706787, -1.6554217338562012], + [-0.8343872427940369, 10.246054649353027], + [0.8169704675674438, -6.542599678039551], + [-0.03799525648355484, -2.5183804035186768], + [9.26774787902832, -2.8867385387420654], + [5.30293083190918, -2.245119571685791], + [3.4881794452667236, 6.518494606018066], + [2.637253999710083, -4.3707733154296875], + [-3.942286252975464, -0.9374078512191772], + [-2.746615171432495, 5.3480377197265625], + [5.369426250457764, -1.448089361190796], + [3.0476765632629395, -4.8489484786987305], + [-1.366387963294983, 11.440457344055176], + [6.114409923553467, -4.0353007316589355], + [-3.208390951156616, -2.451298952102661], + [0.7036376595497131, -8.498194694519043], + [-0.07205260545015335, -3.5066115856170654], + [-3.4803626537323, -1.789469599723816], + [1.053577184677124, 2.601689577102661], + [2.076617479324341, -3.9468021392822266], + [-1.899444341659546, 1.7713640928268433], + [0.6559420228004456, -8.295291900634766], + [-1.341530203819275, 11.374695777893066], + [3.658297300338745, 6.8761701583862305], + [5.160032749176025, -3.6352782249450684], + [1.1625092029571533, -7.059754371643066], + [-1.7183735370635986, 1.1675584316253662], + [1.1893378496170044, 5.959243297576904], + [2.9267141819000244, -4.707103252410889], + [5.59373140335083, -1.2728590965270996], + [2.8126089572906494, -4.980320453643799], + [8.092241287231445, -2.3967385292053223], + [-0.8870777487754822, 10.33065414428711], + [-5.618344783782959, 7.125962257385254], + [-3.3263509273529053, -2.8395354747772217], + [-4.67464017868042, 6.841472148895264], + [-0.02768082171678543, 8.795791625976562], + [2.733229875564575, -3.6195313930511475], + [-2.7148120403289795, -2.9135067462921143], + [2.0514237880706787, 5.004563331604004], + [-3.4146854877471924, -1.521791934967041], + [0.6122756600379944, -7.99263858795166], + [2.727334976196289, -4.634610176086426], + [-3.4841203689575195, -0.32671332359313965], + [-0.3978371024131775, -1.1310046911239624], + [1.1690534353256226, -6.098668575286865], + [-5.142765522003174, 7.548899173736572], + [4.2721943855285645, -3.5194385051727295], + [4.726921558380127, 7.685847759246826], + [1.7342268228530884, 4.261346340179443], + [0.7259499430656433, -4.250639915466309], + [0.026806585490703583, -5.704436779022217], + [2.221806764602661, 4.294769287109375], + [9.091504096984863, -2.828690767288208], + [0.27120068669319153, -5.127098083496094], + [-4.076770305633545, -2.5966897010803223], + [-5.858905792236328, 4.142600059509277], + [8.8973970413208, -2.725264310836792], + [0.27214235067367554, -4.780799388885498], + [2.476539373397827, -3.951857328414917], + [0.6754539608955383, -5.267688274383545], + [-1.483581781387329, 4.386114120483398], + [2.500417947769165, -5.229431629180908], + [-4.32926607131958, -2.8848812580108643], + [2.7949016094207764, -4.672391414642334], + [-4.2146830558776855, -1.1968175172805786], + [-4.733705997467041, 6.766908645629883], + [1.2033450603485107, -6.875009536743164], + [-5.408181667327881, 3.9180562496185303], + [-4.149470806121826, 1.1869333982467651], + [-1.1565693616867065, 10.825578689575195], + [0.2651146352291107, -4.653614044189453], + [-0.5517751574516296, -2.0536611080169678], + [6.151711940765381, 9.025031089782715], + [1.4712514877319336, 1.4042857885360718], + [-3.0222573280334473, -1.4785460233688354], + [-4.81889009475708, 3.0818469524383545], + [-3.391315221786499, -3.121037483215332], + [-1.2504695653915405, 10.724336624145508], + [-3.938232660293579, -1.213564395904541], + [1.2061665058135986, -7.178189754486084], + [1.4330089092254639, -4.497840881347656], + [0.7568711638450623, -9.050145149230957], + [1.110584020614624, -5.439672470092773], + [3.079272508621216, -2.757673501968384], + [-2.2443082332611084, 2.2229857444763184], + [-2.1169276237487793, 1.953959584236145], + [-0.6892761588096619, 9.767376899719238], + [0.10641690343618393, -3.781546115875244], + [8.9037446975708, -2.7871429920196533], + [-1.9495340585708618, 1.5858736038208008], + [-1.3392387628555298, 11.621678352355957], + [-1.5564454793930054, -2.096000909805298], + [0.9877268671989441, -6.098323822021484], + [2.965718984603882, 6.4083099365234375], + [0.5318514704704285, -6.310569763183594], + [-4.884324073791504, -4.213496208190918], + [3.0537965297698975, -4.866730213165283], + [-5.253592014312744, -0.8993446230888367], + [1.8012816905975342, -4.477771759033203], + [-0.11761534959077835, 2.460275650024414], + [-0.22766846418380737, 6.444393157958984], + [-4.462137222290039, 6.23439359664917], + [0.791600227355957, -5.825085639953613], + [-1.2258870601654053, 11.110921859741211], + [-1.7939974069595337, 1.6970572471618652], + [-2.120642900466919, -0.35609573125839233], + [-3.3817946910858154, -1.3097208738327026], + [-0.6650822758674622, -1.4284559488296509], + [-0.4256740212440491, 9.846895217895508], + [-3.291738271713257, -1.1570202112197876], + [6.26606559753418, -2.8490469455718994], + [2.4015514850616455, -4.725450038909912], + [-1.8114964962005615, 1.32880437374115], + [5.252664089202881, -1.2102097272872925], + [2.254563570022583, 3.6124422550201416], + [-1.3693495988845825, 11.738372802734375], + [-4.461607456207275, 5.4761810302734375], + [1.0677599906921387, -4.471033573150635], + [1.836150884628296, 3.33247447013855], + [4.4543070793151855, 7.358722686767578], + [-3.2475850582122803, -1.0570138692855835], + [-4.715507507324219, 5.966155052185059], + [0.5795127749443054, -7.714939594268799], + [0.5206489562988281, -7.701887130737305], + [6.062158107757568, -4.964040756225586], + [-0.3274250030517578, -1.4186123609542847], + [7.230567932128906, -3.196416139602661], + [-0.4036858081817627, 8.959589004516602], + [2.8552682399749756, -4.753950119018555], + [0.7762839198112488, -4.050755977630615], + [-1.740281581878662, 1.1449859142303467], + [-0.42830389738082886, 9.635259628295898], + [0.10850360244512558, -0.9579028487205505], + [-0.7331345081329346, -1.0942665338516235], + [9.107796669006348, -2.984358072280884], + [1.375671148300171, 6.133665084838867], + [-0.9404783248901367, -0.6868581771850586], + [9.23693561553955, -3.0529520511627197], + [5.938286781311035, -1.4530055522918701], + [1.8982744216918945, 0.7884806990623474], + [7.832067012786865, -2.7626779079437256], + [-4.604999542236328, 6.021818161010742], + [-1.0760384798049927, 10.591541290283203], + [0.8344011306762695, -6.583705902099609], + [2.90811824798584, -4.489050388336182], + [-1.4778962135314941, 1.9884918928146362], + [3.2233779430389404, 6.445524215698242], + [-1.9756629467010498, 0.25332003831863403], + [-3.320964813232422, -2.647913694381714], + [-1.15334153175354, 11.025976181030273], + [2.1725080013275146, 5.147061347961426], + [0.5149745345115662, -0.8976178765296936], + [-0.3142583966255188, 9.313100814819336], + [4.844297409057617, -3.5298850536346436], + [-3.559904098510742, -1.2952951192855835], + [-1.3367373943328857, 0.8710616230964661], + [-0.7444142699241638, 9.473026275634766], + [-4.192800998687744, -2.4184987545013428], + [2.7298121452331543, 5.629769325256348], + [-3.5308210849761963, -2.796786308288574], + [5.616339206695557, 8.433469772338867], + [2.590498208999634, -4.52670955657959], + [-5.590392589569092, 7.297231674194336], + [-3.27659010887146, -1.2633423805236816], + [0.7857906222343445, 6.343216419219971], + [-3.6284968852996826, 1.1653766632080078], + [-1.9330768585205078, 1.9426723718643188], + [-4.470815181732178, -3.545469045639038], + [1.2814552783966064, 0.01418357715010643], + [-0.005232401192188263, -4.300823211669922], + [-3.8949368000030518, 5.346991539001465], + [6.1025567054748535, -2.0942680835723877], + [3.2904038429260254, 6.269303321838379], + [-2.059129476547241, 2.11189603805542], + [1.175525426864624, 5.449500560760498], + [-0.019523002207279205, -3.733656644821167], + [2.370274782180786, -4.987693786621094], + [5.733514785766602, -2.664994478225708], + [2.429398536682129, 5.25439453125], + [0.16422516107559204, -4.766263008117676], + [2.898287057876587, -4.715967178344727], + [8.371512413024902, -2.862931489944458], + [1.8287020921707153, -5.475747108459473], + [1.171392798423767, -3.254434823989868], + [-2.920989990234375, -0.962433934211731], + [0.779535710811615, -7.535805702209473], + [1.9508814811706543, 5.727323055267334], + [0.9231638312339783, -0.4372416138648987], + [-2.321211576461792, 2.225191116333008], + [-0.8980157971382141, -0.003362659364938736], + [-1.0232635736465454, 9.968629837036133], + [-3.3610947132110596, -0.6420746445655823], + [2.1067588329315186, 2.794144868850708], + [5.797491550445557, -1.311566710472107], + [-2.237220287322998, -1.6056373119354248], + [7.829868316650391, -2.9220263957977295], + [-0.9686644673347473, 10.43700885772705], + [-1.418826699256897, 12.290576934814453], + [2.841120958328247, -4.547093391418457], + [-4.766788959503174, -4.73610782623291], + [-1.5438556671142578, -1.0722943544387817], + [1.980330228805542, 3.5220909118652344], + [-2.832977533340454, -0.6950741410255432], + [0.7488023638725281, -9.560897827148438], + [8.3019437789917, -2.6381781101226807], + [-2.8958141803741455, -1.1431580781936646], + [-4.151074409484863, 6.359467029571533], + [-0.043622858822345734, 8.169539451599121], + [2.6256253719329834, 4.92296028137207], + [-4.576188087463379, 5.632713317871094], + [-3.947065591812134, -1.238255262374878], + [8.842586517333984, -2.9675850868225098], + [2.2389779090881348, -4.162193298339844], + [-1.9007935523986816, 1.5223881006240845], + [-4.940088748931885, 7.049619197845459], + [-4.160557270050049, 4.807342529296875], + [1.6116273403167725, 0.9986982345581055], + [-1.2363407611846924, 1.7213939428329468], + [0.4504544138908386, -4.795922756195068], + [1.6174582242965698, -4.448031902313232], + [-1.2480394840240479, 10.565966606140137], + [0.8754016160964966, -7.160076141357422], + [-4.144144058227539, -3.039968967437744], + [1.7436109781265259, 6.062897682189941], + [4.589858531951904, 7.6198930740356445], + [1.5210294723510742, 5.523587703704834], + [-4.639223575592041, 6.34147834777832], + [-0.5883820056915283, -2.9346258640289307], + [7.318087577819824, -4.235102653503418], + [0.7660207748413086, -7.390995025634766], + [-4.3365607261657715, -4.894372940063477], + [0.6166450381278992, -7.96625280380249], + [-2.9495370388031006, 5.265323638916016], + [-3.761277914047241, -3.105212926864624], + [-4.899090766906738, -1.0013028383255005], + [7.210814952850342, -2.927980661392212], + [5.602199554443359, -2.222252368927002], + [-0.1332361400127411, -3.8409042358398438], + [0.833950936794281, -5.2672529220581055], + [-1.706308126449585, 0.41403940320014954], + [2.4773223400115967, 0.5723059773445129], + [-2.94482684135437, -1.8647340536117554], + [-1.7491099834442139, 0.5718635320663452], + [-3.8438668251037598, -2.4730782508850098], + [5.861176490783691, -2.523839235305786], + [2.4520621299743652, -5.211163520812988], + [0.5314500331878662, -7.825369834899902], + [6.663562774658203, -4.310693740844727], + [0.9517187476158142, 0.30063968896865845], + [-3.913080930709839, -2.845186710357666], + [1.5567951202392578, 1.4602199792861938], + [6.109666347503662, -4.646822929382324], + [-3.692850112915039, -1.2136551141738892], + [-2.866285562515259, -1.5002964735031128], + [0.4743441939353943, -6.021138668060303], + [3.296990156173706, 6.947829723358154], + [-0.9206449389457703, 10.704549789428711], + [4.128973007202148, 7.0916619300842285], + [-3.0602476596832275, -2.4486420154571533], + [-4.8391947746276855, 5.969272613525391], + [3.1141436100006104, 6.251466274261475], + [-2.2656784057617188, -0.9368763566017151], + [0.5403614640235901, -7.610114097595215], + [-2.2659544944763184, -0.5753288269042969], + [-5.189226150512695, 6.755441665649414], + [0.26646125316619873, -4.306180000305176], + [1.6447210311889648, 4.232687950134277], + [-3.723879098892212, -2.3180713653564453], + [-5.4307475090026855, 7.021003246307373], + [-0.0433814600110054, 7.513546943664551], + [0.44538652896881104, -7.2395734786987305], + [7.5841875076293945, -2.238891124725342], + [1.7769880294799805, 5.2926130294799805], + [-0.5357804894447327, -0.9715045690536499], + [-4.434513092041016, -1.4527901411056519], + [7.539181232452393, -2.288592576980591], + [-4.262494087219238, -0.16364574432373047], + [5.617747783660889, -1.2537299394607544], + [-4.389030933380127, -0.5615774989128113], + [5.421058177947998, -2.8741679191589355], + [-1.3110439777374268, 1.461447834968567], + [2.7954540252685547, -4.40290641784668], + [-5.690485000610352, 7.599054336547852], + [2.3468801975250244, -3.696166515350342], + [8.773566246032715, -2.6793510913848877], + [2.0801937580108643, -4.540538787841797], + [8.21189022064209, -3.460314989089966], + [-1.9154291152954102, 2.065999746322632], + [-3.298708200454712, -1.0630404949188232], + [-3.5041682720184326, -0.9873891472816467], + [-3.160465955734253, -1.1068145036697388], + [-0.4669189751148224, -0.8768779635429382], + [0.06917326897382736, 6.5163655281066895], + [0.48851776123046875, -5.474225997924805], + [3.047273874282837, 6.27724552154541], + [2.955939531326294, -4.875061988830566], + [2.7729804515838623, -4.8895487785339355], + [-0.8126733899116516, 5.368597030639648], + [-5.455108165740967, 7.060874938964844], + [2.821053981781006, 6.318788528442383], + [-1.6476784944534302, -0.7264766693115234], + [-1.0331357717514038, 10.275606155395508], + [-3.6887876987457275, -1.3367828130722046], + [6.594834327697754, -3.2516653537750244], + [0.687426745891571, -5.200944423675537], + [-3.6791205406188965, 2.7921578884124756], + [-2.776721954345703, -1.4639822244644165], + [0.6846710443496704, -4.94078254699707], + [1.7366129159927368, 4.1267008781433105], + [-0.7310037016868591, 1.1205512285232544], + [-1.5806591510772705, 2.5360419750213623], + [-0.6269668936729431, 9.708930969238281], + [2.99275279045105, -4.8395538330078125], + [0.41545236110687256, -7.106812953948975], + [2.456446409225464, 4.797330379486084], + [-4.6163530349731445, -3.8039674758911133], + [2.7594149112701416, -5.294063568115234], + [-0.13263839483261108, 8.301794052124023], + [-3.557194948196411, 2.8935635089874268], + [-5.9205803871154785, 4.943290710449219], + [0.3930460214614868, -5.934614181518555], + [0.7749238610267639, -8.709209442138672], + [5.718846797943115, -2.332425355911255], + [-1.5319199562072754, 12.346129417419434], + [-2.185600757598877, -2.6533119678497314], + [-1.1382944583892822, 10.784977912902832], + [-3.6428821086883545, -2.4650168418884277], + [0.6487389206886292, -7.644193172454834], + [-0.7169653177261353, 10.541318893432617], + [1.5434365272521973, 4.501996040344238], + [1.9147439002990723, 5.495225429534912], + [-1.9924861192703247, 1.2566149234771729], + [2.9223930835723877, -4.887977123260498], + [-1.7701164484024048, 0.5573184490203857], + [2.415940999984741, -4.763965606689453], + [-0.9793267846107483, 9.854158401489258], + [0.6001066565513611, -8.489457130432129], + [5.941163539886475, -2.141261100769043], + [-0.9546138048171997, 0.006041552871465683], + [-4.0531086921691895, -0.8936463594436646], + [0.2712077498435974, -5.363417148590088], + [0.8909740447998047, -4.829774856567383], + [0.45297688245773315, -7.18895149230957], + [-3.3866517543792725, -2.4050731658935547], + [-4.576173305511475, -1.526401400566101], + [0.4607037305831909, -0.5473096370697021], + [0.5832973718643188, -6.707927703857422], + [2.922537326812744, -4.5252275466918945], + [-2.791198253631592, -0.7227032780647278], + [8.165115356445312, -2.562091588973999], + [3.2501776218414307, 5.955430507659912], + [-1.1608765125274658, 10.600412368774414], + [6.778923511505127, -1.7118556499481201], + [0.6324282884597778, -7.64457893371582], + [-0.6214448809623718, 9.197031021118164], + [7.0647759437561035, -2.147307872772217], + [-1.4315152168273926, 2.176771402359009], + [0.6902520656585693, -7.274857997894287], + [-4.111866474151611, 3.8766238689422607], + [-3.1853411197662354, 5.343753814697266], + [-3.86222767829895, -2.115593194961548], + [-2.448594093322754, -4.350109100341797], + [2.1723177433013916, -4.552820205688477], + [-0.17921802401542664, -1.4641345739364624], + [-4.9972405433654785, 6.232158660888672], + [-1.7044833898544312, -2.0965957641601562], + [-1.668763518333435, -2.0300073623657227], + [-3.1116178035736084, -1.5374062061309814], + [0.7666719555854797, -7.448392391204834], + [-0.8595456480979919, 10.769325256347656], + [-1.2316981554031372, 0.6778947114944458], + [-3.2375693321228027, 6.149925708770752], + [-4.963070869445801, 1.0214930772781372], + [-5.304464340209961, 5.735047340393066], + [5.7591400146484375, -2.9546120166778564], + [1.0366127490997314, -7.3876543045043945], + [2.284780979156494, 4.192244052886963], + [-1.007909893989563, 10.569778442382812], + [-3.8430092334747314, -2.9852778911590576], + [1.8061481714248657, 1.0693273544311523], + [2.9377634525299072, -4.661170959472656], + [-1.0626479387283325, -1.3420120477676392], + [0.2563270926475525, -6.377521991729736], + [-4.995471000671387, 5.893574237823486], + [-2.6635022163391113, -1.0270533561706543], + [3.047024726867676, -4.907473564147949], + [-1.455002784729004, 0.6802818179130554], + [-4.842877388000488e-7, -4.612476348876953], + [0.5814365744590759, -7.716071128845215], + [2.2877063751220703, -5.774150848388672], + [-2.6352646350860596, 6.542257308959961], + [0.7278996706008911, -8.603557586669922], + [-3.6160261631011963, 6.40247917175293], + [4.1975836753845215, 7.30624532699585], + [1.386454463005066, 0.15921011567115784], + [-4.491459369659424, 7.107570648193359], + [2.294067621231079, 0.8377329111099243], + [-2.6143152713775635, -1.294202446937561], + [-1.9920635223388672, 2.3749637603759766], + [1.1998224258422852, -7.386406421661377], + [2.217353105545044, -4.934609413146973], + [4.589572906494141, 7.669386386871338], + [1.5624793767929077, 2.1667943000793457], + [1.7748208045959473, -3.7491843700408936], + [2.0862042903900146, -3.971062421798706], + [2.576693534851074, -6.486390590667725], + [8.034955024719238, -3.3271172046661377], + [8.767067909240723, -2.797854423522949], + [-0.37733322381973267, 8.907124519348145], + [-3.49641489982605, -0.8265073299407959], + [-4.0925517082214355, 6.650668144226074], + [-1.5991950035095215, -0.8038115501403809], + [-4.0363054275512695, -1.304681658744812], + [-3.670926809310913, -2.6969118118286133], + [-2.963505983352661, -0.9722086191177368], + [1.8988604545593262, 3.410522699356079], + [-4.494170665740967, 6.084385871887207], + [2.9709689617156982, -5.339155197143555], + [-4.29553747177124, -0.8621383309364319], + [-1.626554250717163, 1.3945802450180054], + [-3.2831215858459473, -0.4086960554122925], + [1.1256325244903564, -5.159012794494629], + [0.3389589190483093, -6.594686985015869], + [1.6419168710708618, 0.023076292127370834], + [0.6411754488945007, -8.026585578918457], + [1.65897536277771, 2.3972256183624268], + [0.5585809350013733, -5.057650566101074], + [1.0158476829528809, -4.594766616821289], + [2.350632667541504, -6.336670875549316], + [1.143911600112915, 5.9805450439453125], + [7.205016613006592, -3.672781229019165], + [8.448466300964355, -2.816736936569214], + [-4.849185943603516, 4.6537041664123535], + [-3.011479377746582, -1.5407944917678833], + [0.7149887681007385, -5.2900190353393555], + [-0.03670767694711685, -3.103843927383423], + [0.6242803931236267, -8.469579696655273], + [0.13279783725738525, -4.114799976348877], + [8.696499824523926, -2.641165256500244], + [-1.895321011543274, 1.360120415687561], + [2.7918784618377686, 6.120316982269287], + [-5.375004291534424, -1.1659742593765259], + [0.4738163352012634, -7.227124214172363], + [5.119950771331787, -4.1516642570495605], + [0.2601611018180847, -6.0669097900390625], + [-2.890047788619995, -1.2858974933624268], + [2.135903835296631, 5.1487202644348145], + [1.6587060689926147, -6.4348626136779785], + [2.1876251697540283, 6.125087738037109], + [-1.0344895124435425, 10.434505462646484], + [5.193726539611816, -1.3479899168014526], + [-2.423269033432007, -1.519653558731079], + [2.425469160079956, -4.330265045166016], + [-1.090038776397705, 10.16012191772461], + [-5.0526442527771, 7.122808933258057], + [0.9922781586647034, -4.076876640319824], + [0.2774577736854553, -5.444393157958984], + [0.6609387993812561, -7.799653053283691], + [2.9748847484588623, -4.752082824707031], + [-5.337184906005859, -4.349751949310303], + [-5.009932041168213, 5.7218170166015625], + [-4.348371982574463, 6.757911205291748], + [-0.5121709108352661, 9.435325622558594], + [-1.618395447731018, -1.2111719846725464], + [-4.6446943283081055, -1.6890194416046143], + [-0.7949662804603577, 10.099441528320312], + [-3.626357316970825, 1.623128056526184], + [1.729166030883789, 0.3338199257850647], + [5.840169429779053, -1.5022187232971191], + [0.5699533820152283, -0.3246876001358032], + [9.238417625427246, -2.826136350631714], + [-0.06429637223482132, 0.0321943424642086], + [1.2261505126953125, 1.1457093954086304], + [0.7599279284477234, -8.647762298583984], + [-3.1812775135040283, -1.5426069498062134], + [0.6765922904014587, -9.4444580078125], + [9.304862976074219, -2.8127763271331787], + [2.882138967514038, -4.5950541496276855], + [6.815582752227783, -2.058305501937866], + [0.7895261645317078, -3.631711483001709], + [2.8217689990997314, -4.537763595581055], + [8.104608535766602, -2.7877912521362305], + [-1.95867121219635, 2.1373631954193115], + [-3.6486728191375732, 5.537688255310059], + [0.2006206214427948, -4.0395002365112305], + [-4.746037483215332, 4.232978820800781], + [-4.592306613922119, 5.784496784210205], + [-0.9246846437454224, 10.412572860717773], + [-4.899172782897949, -3.5111234188079834], + [-0.6697702407836914, 9.609779357910156], + [-4.131568431854248, -2.0142486095428467], + [2.445915460586548, 5.22355842590332], + [1.9952666759490967, 3.486981153488159], + [1.600807547569275, 1.6170848608016968], + [0.39078009128570557, -5.581186294555664], + [3.7374789714813232, -5.787001609802246], + [-0.47204992175102234, -3.3781869411468506], + [0.7187914252281189, -9.001738548278809], + [2.3993024826049805, -4.401740074157715], + [6.689624309539795, -2.4517405033111572], + [-5.6512770652771, -1.4246008396148682], + [-0.8058739304542542, 10.563074111938477], + [3.387389898300171, -0.29483872652053833], + [-3.937769651412964, -1.9606208801269531], + [2.82667875289917, -4.340276718139648], + [-5.54089879989624, -0.9724191427230835], + [0.4307215213775635, -6.021279335021973], + [1.366957426071167, 0.5746562480926514], + [-4.054696083068848, -1.0322073698043823], + [-3.9905545711517334, -1.399842381477356], + [0.8975705504417419, -7.508092403411865], + [-4.0030517578125, -1.7268224954605103], + [8.622661590576172, -2.984231948852539], + [-0.20821213722229004, 9.384149551391602], + [-1.0916073322296143, 1.009116291999817], + [0.646966814994812, -6.5893659591674805], + [-1.9186043739318848, 1.626065969467163], + [0.7254924178123474, -4.633762359619141], + [-2.119375228881836, -1.3336254358291626], + [2.1729660034179688, 1.3226779699325562], + [-1.6745085716247559, 2.313870429992676], + [-4.095942497253418, -1.5137447118759155], + [9.129640579223633, -2.7688865661621094], + [-1.8655189275741577, 1.2469720840454102], + [-0.37155014276504517, 9.937384605407715], + [-0.13816004991531372, 8.785432815551758], + [-3.8629720211029053, -1.9231512546539307], + [-0.10596460849046707, 8.60051155090332], + [-1.3039473295211792, -0.049553368240594864], + [3.4034841060638428, -6.637986183166504], + [9.70523452758789, -2.9380078315734863], + [2.276217222213745, -4.302734851837158], + [-2.965954542160034, -1.028652310371399], + [0.2533555030822754, -5.601439952850342], + [-0.783927857875824, 10.71635627746582], + [-4.957098007202148, 5.591835975646973], + [0.5542922019958496, 5.468380928039551], + [1.9648702144622803, -4.7663726806640625], + [0.9272720217704773, -4.843170642852783], + [0.9105213284492493, -7.00355863571167], + [2.7294881343841553, 5.64676570892334], + [-0.6994850039482117, 9.697576522827148], + [9.80848217010498, -3.0262367725372314], + [-1.8321808576583862, 1.6642436981201172], + [3.7621262073516846, -3.9727957248687744], + [-5.045646667480469, 7.137036323547363], + [-3.7267887592315674, -0.5878024697303772], + [1.69169282913208, 1.4183109998703003], + [2.4912612438201904, -4.651988506317139], + [2.7270963191986084, -4.586313247680664], + [-3.6933834552764893, -4.567039489746094], + [-1.2430822849273682, 0.48902279138565063], + [-5.745016574859619, 3.02555775642395], + [-2.9680495262145996, 3.2118582725524902], + [0.710013747215271, -7.82742977142334], + [-1.318945288658142, 11.344715118408203], + [0.8601008057594299, -6.290992259979248], + [-1.5438077449798584, -0.5501083731651306], + [8.604077339172363, -2.5674757957458496], + [4.880554676055908, 7.872627258300781], + [0.6060771346092224, -8.229408264160156], + [0.23317945003509521, -5.671266555786133], + [-4.2369561195373535, -2.975618600845337], + [2.5759432315826416, 6.271044731140137], + [2.661836862564087, 6.030821800231934], + [-5.351650238037109, -2.7700438499450684], + [2.9976649284362793, -5.074015140533447], + [-5.050478935241699, 3.1415305137634277], + [-0.7408233880996704, 9.221264839172363], + [1.135660171508789, -5.834660053253174], + [0.9503565430641174, -4.569105625152588], + [-0.5429501533508301, 9.254459381103516], + [0.5085753202438354, -6.785122871398926], + [2.5064125061035156, -3.460345983505249], + [-2.8827545642852783, 5.674015998840332], + [6.461770057678223, -1.9216779470443726], + [-0.962367594242096, 10.351175308227539], + [-0.996282696723938, 1.2683498859405518], + [2.677366018295288, 4.621437072753906], + [2.762516498565674, -4.5559539794921875], + [-3.210383653640747, 4.130753993988037], + [-5.149794101715088, -1.186126947402954], + [-3.907393217086792, -1.1861411333084106], + [0.47256171703338623, -7.6195197105407715], + [0.22704821825027466, -5.217470169067383], + [-3.68790340423584, -1.3927228450775146], + [0.5902510285377502, -7.985576152801514], + [5.869011402130127, -1.805838704109192], + [1.1213388442993164, -5.665868759155273], + [-0.33133411407470703, 8.077116012573242], + [-5.1420578956604, 5.989171981811523], + [-4.318273544311523, -0.22964465618133545], + [-0.16405272483825684, 7.011326789855957], + [-4.360265254974365, -1.5831632614135742], + [3.922194719314575, 7.192071914672852], + [-4.702200412750244, 6.847001075744629], + [-3.7752509117126465, -1.0085469484329224], + [-2.8224544525146484, -0.22347933053970337], + [-3.244614362716675, -1.0134387016296387], + [0.45409828424453735, -6.716508388519287], + [2.7657454013824463, -4.447165012359619], + [-1.2340681552886963, 11.302033424377441], + [-1.8685694932937622, 2.9230597019195557], + [4.26675271987915, 7.410735130310059], + [-1.485166072845459, -1.7067782878875732], + [-3.1775481700897217, -0.8270917534828186], + [2.2601864337921143, 5.3318986892700195], + [-3.278470993041992, -1.5455982685089111], + [2.4495351314544678, 0.16837185621261597], + [2.9551260471343994, -5.112155914306641], + [-5.960080623626709, 7.746589660644531], + [-0.7089418768882751, 10.218936920166016], + [2.5997283458709717, -4.259563446044922], + [0.7173888087272644, -8.734875679016113], + [4.102737903594971, 7.016181468963623], + [9.449406623840332, -2.88704514503479], + [-3.5650088787078857, -1.647422432899475], + [0.5979353189468384, -7.16548490524292], + [-1.2853789329528809, 10.720439910888672], + [-5.60477876663208, 5.493642807006836], + [7.840632915496826, -2.298584222793579], + [0.36506688594818115, -4.642218589782715], + [0.6952953934669495, -8.416718482971191], + [-1.5328128337860107, -1.2647054195404053], + [-1.1088773012161255, 10.925957679748535], + [1.9461567401885986, -4.211530685424805], + [-4.666768550872803, 5.947348594665527], + [-1.0743622779846191, 0.3783642649650574], + [-0.8010542988777161, 10.241561889648438], + [0.44821733236312866, -7.137264251708984], + [5.752369403839111, -2.664273500442505], + [1.532801866531372, -5.083981513977051], + [8.09484577178955, -2.9807097911834717], + [0.6432080864906311, -8.786291122436523], + [-3.1155943870544434, 4.988714218139648], + [-3.0827555656433105, 3.378577947616577], + [-3.924548387527466, 6.688388824462891], + [2.667142152786255, -4.135826110839844], + [-4.33089017868042, -2.8824663162231445], + [8.507624626159668, -2.6284921169281006], + [-2.747044801712036, -1.8267329931259155], + [1.6847649812698364, -4.435195446014404], + [-3.6729278564453125, 6.917306423187256], + [-3.609670639038086, -2.866377592086792], + [1.7671947479248047, 1.087382197380066], + [2.912468194961548, -4.614402770996094], + [-3.405405282974243, 6.757381916046143], + [2.839827299118042, -5.24379301071167], + [-1.7497116327285767, 1.7100516557693481], + [0.4790446162223816, -7.060309410095215], + [-4.270603656768799, 2.667710542678833], + [-3.4320931434631348, 0.34115803241729736], + [-0.7171319723129272, -2.2748403549194336], + [-1.2471002340316772, 1.4330073595046997], + [-3.142338991165161, 4.491982460021973], + [0.23812639713287354, -4.07879114151001], + [0.798167884349823, -8.029109001159668], + [-0.05054447799921036, -4.66938591003418], + [6.390224456787109, -1.4341892004013062], + [-4.089873313903809, -2.0021347999572754], + [-1.4786245822906494, 12.070487022399902], + [1.2759994268417358, -4.423128128051758], + [-1.8272286653518677, 2.025376319885254], + [-4.489171504974365, -1.06503427028656], + [1.4743573665618896, -4.366137504577637], + [1.907199740409851, 1.049668788909912], + [-4.338732719421387, 5.8940629959106445], + [7.273430347442627, -3.4895777702331543], + [-5.809609889984131, 8.199281692504883], + [-4.24526309967041, 6.04644775390625], + [-4.4646196365356445, -1.0006158351898193], + [-4.011505126953125, -1.2822579145431519], + [1.7481085062026978, -4.5232462882995605], + [-1.2091693878173828, 0.34006398916244507], + [-0.3242257237434387, -1.5682204961776733], + [0.63629150390625, -7.843541145324707], + [-0.783913791179657, -1.117079257965088], + [-1.2676680088043213, 11.923788070678711], + [-3.170264482498169, -0.30277371406555176], + [2.9590985774993896, -4.619049072265625], + [1.3140959739685059, 4.197878837585449], + [-5.3283867835998535, 5.620738983154297], + [0.9638723731040955, -7.467645168304443], + [-2.65700364112854, 2.7931153774261475], + [0.6555420160293579, -8.494812965393066], + [-1.5485272407531738, 12.526933670043945], + [-4.046081066131592, -1.215527892112732], + [-0.24406585097312927, -0.7152842283248901], + [6.1570353507995605, -3.692772150039673], + [1.9126989841461182, -4.117814064025879], + [-2.3024139404296875, -1.222656488418579], + [-3.8636093139648438, -1.4030914306640625], + [0.4424343705177307, -6.588936805725098], + [2.576895236968994, -4.928936004638672], + [0.4371994137763977, -0.8113064169883728], + [-1.7769298553466797, 1.7785333395004272], + [1.3451731204986572, 1.2706505060195923], + [0.5884900093078613, -5.472479820251465], + [2.042219638824463, 1.318459391593933], + [-4.156928062438965, -3.1414194107055664], + [4.0705461502075195, 7.1288909912109375], + [1.4396703243255615, -5.817265510559082], + [-3.6263067722320557, -2.6592557430267334], + [9.557353019714355, -2.8427584171295166], + [3.228348970413208, 6.933191776275635], + [5.674471378326416, 8.535807609558105], + [3.7901647090911865, 6.856925964355469], + [0.5591750144958496, -7.905263423919678], + [-0.6252840757369995, -1.7083123922348022], + [-1.2808663845062256, 1.6356309652328491], + [-0.19784095883369446, 5.105571746826172], + [3.509589910507202, 6.212764739990234], + [0.6833403706550598, -9.03596305847168], + [-1.0840407609939575, 1.5799058675765991], + [-0.5892526507377625, 9.937353134155273], + [1.9162315130233765, -5.503321647644043], + [-4.296558856964111, -0.4550178050994873], + [2.752984046936035, -4.64548397064209], + [-4.081219673156738, -2.774973154067993], + [-0.23745694756507874, -1.6404231786727905], + [-2.908275604248047, 3.132855176925659], + [7.209488391876221, -2.1638448238372803], + [2.7524514198303223, -4.510072231292725], + [2.7455248832702637, -4.986446857452393], + [-3.8923699855804443, -1.2922532558441162], + [2.330522298812866, 5.848354816436768], + [2.9258203506469727, -4.652007102966309], + [0.1324346959590912, -4.7468671798706055], + [2.3983795642852783, 5.311000823974609], + [0.6106791496276855, -6.958501815795898], + [-4.224259853363037, -3.0362179279327393], + [1.1357948780059814, -6.144550323486328], + [-0.7012906074523926, 9.59627914428711], + [-0.5364716649055481, 9.483280181884766], + [-3.2805421352386475, 5.454146385192871], + [0.6096339821815491, -8.37231731414795], + [2.735921859741211, -4.646435737609863], + [-3.8191516399383545, -1.716126799583435], + [-4.424540042877197, -1.4547408819198608], + [-3.4750845432281494, 5.56810188293457], + [-2.8881962299346924, -0.8484633564949036], + [-0.700310468673706, -0.8076996803283691], + [0.6888555884361267, -9.506744384765625], + [1.1749738454818726, -0.31297099590301514], + [0.7545309662818909, -8.617854118347168], + [-4.958865165710449, -1.1911717653274536], + [7.678446292877197, -2.850209951400757], + [-0.9029346108436584, 7.702444076538086], + [-4.573136806488037, 2.2761058807373047], + [0.7126626968383789, -4.612500190734863], + [-4.107003211975098, 5.650766372680664], + [1.571441888809204, 5.097830772399902], + [-5.164473533630371, -3.6459109783172607], + [-1.8906346559524536, -0.6457521319389343], + [-4.940040588378906, 7.0193047523498535], + [-4.409289836883545, -0.22717726230621338], + [1.7945427894592285, 6.002563953399658], + [-4.190866947174072, 5.2557692527771], + [-3.579535722732544, -1.1678191423416138], + [-0.6556510329246521, -0.8098046183586121], + [4.075471878051758, -3.590054512023926], + [-0.5963889360427856, 1.2214634418487549], + [2.846437931060791, 5.821290969848633], + [1.893919825553894, 5.231418609619141], + [0.7177453637123108, -7.650055885314941], + [-1.4853200912475586, 1.5672143697738647], + [-5.244525909423828, -0.8297122120857239], + [0.5200731158256531, -7.685845375061035], + [-1.1007987260818481, 10.997934341430664], + [1.358535885810852, -6.711828231811523], + [-4.958670616149902, 0.5549341440200806], + [-3.206636667251587, -0.5563652515411377], + [2.361050844192505, 0.40775981545448303], + [7.10546875, -2.2736191749572754], + [-1.9094650745391846, 2.1219279766082764], + [-0.9285474419593811, 4.854374885559082], + [0.522490382194519, -5.315611839294434], + [0.4600144624710083, -5.441509246826172], + [2.1053013801574707, 5.362129211425781], + [-2.4303410053253174, 4.458495616912842], + [-1.702996850013733, 1.3788559436798096], + [-5.334296703338623, 6.135376930236816], + [-3.505854368209839, -1.2503632307052612], + [-1.8234741687774658, 1.441325068473816], + [-1.284814715385437, 11.4118070602417], + [2.130615711212158, 1.089046597480774], + [-0.4912358522415161, 0.04364129528403282], + [2.469285249710083, -4.354800701141357], + [2.029634714126587, 5.776922225952148], + [-4.631765842437744, -1.4846242666244507], + [1.4070556163787842, -5.434453010559082], + [-5.342092990875244, -3.882263660430908], + [2.640805959701538, -4.001951217651367], + [-3.40324330329895, -2.353076219558716], + [-1.6452457904815674, 1.3064910173416138], + [5.334268093109131, -3.590409755706787], + [-1.5240733623504639, -0.9178858995437622], + [-2.509570837020874, -2.504409074783325], + [0.8408797383308411, -6.430501461029053], + [-1.459489345550537, 1.4589647054672241], + [3.10752272605896, 6.127498626708984], + [3.8152101039886475, 6.8996100425720215], + [0.8341553211212158, -7.872053146362305], + [-1.471980094909668, 2.7549240589141846], + [-0.6757750511169434, 10.895537376403809], + [6.584444522857666, -2.5884487628936768], + [-1.7639884948730469, 2.1718549728393555], + [2.216672897338867, -3.976905107498169], + [8.80367660522461, -2.7779672145843506], + [-4.636090278625488, -1.1415022611618042], + [0.6430826783180237, -8.195276260375977], + [-3.9283435344696045, 5.98709774017334], + [-0.5269225239753723, 7.759006500244141], + [2.080144166946411, -4.488791465759277], + [4.141576290130615, -3.1852033138275146], + [-3.742645502090454, -2.279341220855713], + [-4.39553689956665, 5.166380882263184], + [-1.6338496208190918, 10.270870208740234], + [-3.5062692165374756, -1.9269098043441772], + [-1.1639044284820557, 11.099796295166016], + [3.0069243907928467, 5.607558727264404], + [0.3970230221748352, -6.361729621887207], + [-0.5803124308586121, -1.6976176500320435], + [-0.10547993332147598, -4.021144866943359], + [4.812188148498535, -1.014481782913208], + [1.004339575767517, -4.160949230194092], + [0.9360367655754089, -6.416145324707031], + [2.161553382873535, -5.278841972351074], + [-1.1104336977005005, 11.021095275878906], + [2.931732177734375, -4.882440567016602], + [2.0910308361053467, -4.450601577758789], + [2.3954732418060303, -4.241186618804932], + [0.9616385102272034, -7.008611679077148], + [-0.19123467803001404, -2.1172096729278564], + [-4.569270610809326, -2.7040064334869385], + [-3.0560102462768555, 3.1513798236846924], + [1.0299705266952515, 0.00400305911898613], + [0.47564178705215454, -6.982100486755371], + [-0.1600136160850525, 7.235898017883301], + [7.307627201080322, -2.4534850120544434], + [-1.1655486822128296, 10.879476547241211], + [2.7768332958221436, -4.690633296966553], + [-0.2968630790710449, 8.636898040771484], + [-0.30091163516044617, -1.4897547960281372], + [-5.999118328094482, 7.8288373947143555], + [3.4505879878997803, -5.684337615966797], + [0.09410052746534348, -1.0409437417984009], + [0.5897778272628784, -2.919283151626587], + [1.6428660154342651, 1.4673806428909302], + [-0.04085139185190201, -4.92219352722168], + [0.7909957766532898, -6.446602821350098], + [-1.8618515729904175, 0.46791136264801025], + [-1.0578845739364624, 11.316019058227539], + [-2.0782079696655273, 1.984174370765686], + [-0.7306012511253357, 9.920969009399414], + [9.290297508239746, -2.878251314163208], + [0.5061240792274475, -7.976144790649414], + [-3.288881301879883, 5.234016418457031], + [5.689976215362549, -4.951817512512207], + [2.453594207763672, 5.537497520446777], + [-3.752807378768921, 0.2670000195503235], + [8.986662864685059, -2.7306199073791504], + [-4.46287727355957, 3.846508502960205], + [4.313910484313965, 7.475724220275879], + [-1.988986611366272, 1.6563469171524048], + [-2.0624399185180664, -0.1573314666748047], + [3.9093587398529053, 6.748490333557129], + [2.9326515197753906, -4.854513168334961], + [-0.6782395243644714, 9.773120880126953], + [-2.044330596923828, 0.8467588424682617], + [-4.780836582183838, -1.2426525354385376], + [0.7306079864501953, -6.970881938934326], + [2.285168409347534, -4.704065322875977], + [-1.5676734447479248, 2.365833282470703], + [1.0777732133865356, -6.990444183349609], + [-2.167447805404663, -0.9341464638710022], + [-4.706007480621338, -1.1113523244857788], + [-0.4212818145751953, -3.5534613132476807], + [3.00765061378479, -4.625240325927734], + [-2.636730432510376, 4.949553489685059], + [-0.40384185314178467, -3.6865763664245605], + [-4.153934478759766, -0.683442234992981], + [-4.5128068923950195, -1.5097516775131226], + [-5.973606586456299, -0.8657300472259521], + [-5.085590839385986, 6.772426605224609], + [-3.131000280380249, 6.877137184143066], + [-3.944401979446411, -1.595922827720642], + [1.8960773944854736, 5.38599967956543], + [0.7170361280441284, -7.334709167480469], + [-4.039977073669434, 6.3669023513793945], + [-5.518103122711182, -1.0652494430541992], + [-3.37184739112854, 5.6352386474609375], + [1.314626693725586, 0.8771771192550659], + [-4.076403617858887, -1.1816320419311523], + [-1.7276450395584106, 0.2715670168399811], + [-1.1892738342285156, -4.204576015472412], + [4.832992076873779, -2.322479724884033], + [-2.416191577911377, -1.0724523067474365], + [2.426731586456299, -3.901047945022583], + [-4.381232738494873, 6.056650161743164], + [1.7370811700820923, 5.410585403442383], + [-5.292494773864746, 6.942939758300781], + [2.130082130432129, 6.06236457824707], + [1.1101182699203491, 6.612577438354492], + [1.9322569370269775, -6.405181884765625], + [-1.602996587753296, 0.9647351503372192], + [3.0352113246917725, -4.71134090423584], + [0.7696338891983032, 3.9880897998809814], + [-4.877856731414795, 7.148222923278809], + [-0.11251277476549149, -0.3101620078086853], + [-0.23037758469581604, -1.229361891746521], + [-3.5785810947418213, 3.3136699199676514], + [-1.7528098821640015, 0.5028598308563232], + [1.6107227802276611, -4.069362640380859], + [-3.6038827896118164, -5.015786170959473], + [8.471382141113281, -2.6163933277130127], + [-0.4570569396018982, 9.939085960388184], + [3.805898904800415, -4.122231483459473], + [6.986058712005615, -2.2917633056640625], + [-0.04648406058549881, 4.996825218200684], + [2.4648497104644775, -4.674280166625977], + [-2.8610551357269287, -1.720054030418396], + [5.958776950836182, -3.201136350631714], + [-3.673917055130005, -1.4364204406738281], + [-4.177969455718994, -0.5297960042953491], + [-3.6229946613311768, -2.8317744731903076], + [5.351487159729004, -3.757361650466919], + [-2.0132787227630615, -0.651914119720459], + [1.8925986289978027, -3.9041757583618164], + [8.08431339263916, -2.37697434425354], + [-0.6151875853538513, 9.694563865661621], + [3.547231435775757, 6.669528007507324], + [0.2630520462989807, -5.851946830749512], + [2.937394380569458, -5.156844615936279], + [-1.9680449962615967, 0.6777551174163818], + [1.5262691974639893, 4.662770748138428], + [0.32903674244880676, -0.4417792856693268], + [-4.051667213439941, 5.7695631980896], + [2.3018252849578857, 5.418753623962402], + [0.7833714485168457, -7.575342655181885], + [0.889446496963501, -5.170283794403076], + [-0.5781290531158447, 9.450478553771973], + [-3.246372938156128, -1.5322625637054443], + [1.4790838956832886, -5.4024248123168945], + [2.8807199001312256, -4.525991439819336], + [-1.7752162218093872, 1.3588334321975708], + [-1.4026224613189697, 11.388178825378418], + [5.357618808746338, 8.434152603149414], + [1.4264225959777832, 0.36367297172546387], + [-4.96058464050293, 1.2043260335922241], + [-1.1716564893722534, 11.09133529663086], + [0.37798404693603516, -5.82296085357666], + [-1.6917459964752197, 1.9635475873947144], + [0.6771109700202942, 0.19438676536083221], + [8.795187950134277, -2.5794763565063477], + [7.24858283996582, -2.0987424850463867], + [-4.855801105499268, 6.234297752380371], + [8.266377449035645, -2.9047152996063232], + [7.158799648284912, -4.139896869659424], + [-2.32562518119812, 4.20760440826416], + [-1.4494526386260986, 0.7424101829528809], + [7.375148296356201, -2.666170835494995], + [-4.739157676696777, -1.062985897064209], + [-2.533323049545288, 2.5788207054138184], + [-3.3005776405334473, -1.0595780611038208], + [1.3747612237930298, 5.783578872680664], + [6.844816207885742, -1.8788706064224243], + [-1.2715692520141602, 11.341753959655762], + [0.3786897659301758, -7.051200866699219], + [-1.1627166271209717, 10.721267700195312], + [1.7355048656463623, -4.45652961730957], + [6.8327956199646, -1.8212599754333496], + [1.142637014389038, 2.629491090774536], + [-3.2578041553497314, -0.971648633480072], + [-5.062341213226318, 6.063658237457275], + [2.6476590633392334, -4.792503356933594], + [-1.8238041400909424, 1.2653841972351074], + [2.572596311569214, -4.167783737182617], + [6.845379829406738, -3.2699954509735107], + [0.5787031054496765, -8.097921371459961], + [-3.878082036972046, -0.19822293519973755], + [-5.685733318328857, 3.0081841945648193], + [2.289395570755005, 5.4225754737854], + [0.6103991270065308, -7.720576286315918], + [2.4817392826080322, -3.6476287841796875], + [0.9358182549476624, -6.360811710357666], + [-1.221197247505188, 0.10541096329689026], + [-3.2279374599456787, -1.2042759656906128], + [1.7704930305480957, -5.502264976501465], + [-0.8766668438911438, 10.508464813232422], + [-0.5620699524879456, 9.884244918823242], + [0.19016677141189575, -5.194836616516113], + [0.6966521143913269, -8.48001480102539], + [0.6497104167938232, -8.097390174865723], + [0.21569079160690308, 4.943578720092773], + [0.42511600255966187, -6.771591663360596], + [-5.057990550994873, -0.9790007472038269], + [0.7364117503166199, -7.957552909851074], + [-2.038250207901001, -0.244836688041687], + [-1.8693373203277588, 2.171785593032837], + [-4.335843563079834, 6.4409050941467285], + [6.97485876083374, -1.8683685064315796], + [-3.989574670791626, -2.9316558837890625], + [-1.0810602903366089, 5.430238723754883], + [-1.9769033193588257, 0.08096665143966675], + [1.808779239654541, 0.40890318155288696], + [-1.9281916618347168, 1.4041774272918701], + [-2.6105411052703857, -4.015488147735596], + [0.563963770866394, -0.8766142725944519], + [-4.8023457527160645, 6.588334560394287], + [2.1449801921844482, -3.97849702835083], + [-5.374874114990234, 7.580989360809326], + [-1.8570915460586548, 1.056024193763733], + [-1.1513254642486572, 10.453888893127441], + [1.8422532081604004, 4.638622283935547], + [-4.565119743347168, -0.9561203718185425], + [-4.809906005859375, 4.53656005859375], + [5.00347375869751, -3.9302875995635986], + [-1.3164643049240112, 11.485272407531738], + [0.946000874042511, -5.700722694396973], + [-3.6325037479400635, 5.296011924743652], + [-4.824901103973389, 6.028225421905518], + [-0.4944288730621338, 8.741758346557617], + [-4.904515743255615, 6.874761581420898], + [-3.6481196880340576, -3.0040934085845947], + [0.4784437417984009, -5.91322135925293], + [-2.8644297122955322, 2.7901394367218018], + [0.6474634408950806, -8.311958312988281], + [0.6594645380973816, -8.45119571685791], + [2.4073023796081543, -4.3615336418151855], + [7.628573894500732, -2.4571361541748047], + [-1.3060410022735596, 11.619623184204102], + [6.123719692230225, -3.8116447925567627], + [-3.7494137287139893, -1.3645919561386108], + [-2.439655303955078, 0.3558155298233032], + [0.5200462937355042, -7.144767761230469], + [0.8022552132606506, -8.661956787109375], + [3.0281760692596436, -4.711569786071777], + [-4.6366143226623535, -0.8921653032302856], + [2.158719778060913, 3.581648111343384], + [3.5423905849456787, 6.383843421936035], + [4.971579074859619, 7.714343547821045], + [1.8506008386611938, -5.243457794189453], + [-4.748722553253174, -4.170976638793945], + [-3.204698324203491, -1.0009572505950928], + [-0.6421022415161133, 10.067049980163574], + [0.47910523414611816, -5.076895713806152], + [-1.201778531074524, 11.460075378417969], + [-5.5648722648620605, -1.0363324880599976], + [0.583895206451416, -7.620061874389648], + [-0.7034837603569031, 9.818328857421875], + [-4.102290630340576, 0.7506999969482422], + [0.5232904553413391, -4.624279499053955], + [-0.04689923673868179, -4.248331546783447], + [-2.6853585243225098, 2.8903112411499023], + [3.665628671646118, 6.729039192199707], + [3.4613659381866455, 6.987932205200195], + [3.7154977321624756, -4.028997898101807], + [-3.5893406867980957, 5.891715049743652], + [0.1473313570022583, -3.6178650856018066], + [0.6478132605552673, 5.166097164154053], + [-2.4494762420654297, -0.45508766174316406], + [-1.6863332986831665, 1.4354257583618164], + [0.12061075121164322, -4.189345836639404], + [0.8409757018089294, -4.661273002624512], + [3.8957221508026123, 7.1350908279418945], + [-2.7546427249908447, 3.060391902923584], + [9.61938190460205, -2.8944594860076904], + [-3.8908674716949463, -0.5706470012664795], + [0.292868435382843, -6.411345958709717], + [-1.764448642730713, 1.0233180522918701], + [0.6548336148262024, 1.065559983253479], + [1.133606195449829, 1.7202426195144653], + [0.07207339257001877, -4.481630325317383], + [0.002900741994380951, -4.715477466583252], + [3.2566404342651367, 5.96560525894165], + [1.7449954748153687, 6.211005687713623], + [1.1817456483840942, 1.6316587924957275], + [7.151250839233398, -2.899066686630249], + [0.6811201572418213, -8.355056762695312], + [2.866098165512085, -4.894855976104736], + [-4.344778060913086, -1.5195236206054688], + [2.5726613998413086, -4.44676399230957], + [6.558371067047119, -3.6574900150299072], + [0.425459623336792, -6.48715877532959], + [-3.4393117427825928, -1.351436972618103], + [5.497800350189209, -2.073624849319458], + [0.692771852016449, -7.315003395080566], + [-3.8592278957366943, 5.673465728759766], + [1.7343372106552124, -3.498943567276001], + [-0.7623789310455322, 10.490121841430664], + [5.7724289894104, -2.002209424972534], + [2.740321397781372, -4.840790271759033], + [1.0302625894546509, -4.662693977355957], + [2.180037498474121, -4.565252304077148], + [7.1456522941589355, -3.970827341079712], + [-0.08761275559663773, -1.0838932991027832], + [0.4288221597671509, -3.490553855895996], + [-3.5132477283477783, -1.4054733514785767], + [0.3296668529510498, -4.768165111541748], + [0.5047255158424377, -6.579619884490967], + [5.752188205718994, -1.384710669517517], + [-0.6426369547843933, 10.377273559570312], + [-0.9757127165794373, 10.618937492370605], + [2.2782962322235107, -4.307775974273682], + [5.551604747772217, 8.449049949645996], + [-1.6839830875396729, 0.9514788389205933], + [0.9288204312324524, -0.8962669372558594], + [6.773962020874023, -2.065305471420288], + [-1.1927694082260132, 10.848470687866211], + [-0.2623835802078247, 8.202359199523926], + [7.959104061126709, -2.342111349105835], + [1.293321132659912, 5.077028751373291], + [-3.7069132328033447, -1.9772177934646606], + [2.8598601818084717, -5.039325714111328], + [-1.3762823343276978, 11.408591270446777], + [-1.1926432847976685, 1.9356420040130615], + [-3.2069904804229736, -3.3002054691314697], + [1.8860114812850952, 4.130644798278809], + [-4.720449924468994, -4.262311935424805], + [-5.321721076965332, 6.022839069366455], + [9.563650131225586, -2.8188889026641846], + [-4.303548812866211, 6.781972885131836], + [-5.839641571044922, 4.0885515213012695], + [-3.457397222518921, -1.3813540935516357], + [4.2512688636779785, 7.600030422210693], + [2.9816997051239014, -4.628044128417969], + [0.5839694738388062, -8.492619514465332], + [2.3940224647521973, 5.856895446777344], + [-3.1022374629974365, -0.7583420276641846], + [-0.4768586754798889, 0.3714752197265625], + [2.4456522464752197, -4.324807167053223], + [7.15625524520874, -2.7524802684783936], + [2.5067503452301025, -4.9432692527771], + [4.936276912689209, 7.993344306945801], + [-3.598900556564331, -1.4710534811019897], + [-3.1694600582122803, -1.456655502319336], + [-0.3024393320083618, 9.04751968383789], + [2.531691789627075, 6.153992652893066], + [-3.7327592372894287, -2.8409974575042725], + [-4.034368991851807, -0.14010941982269287], + [0.5116732716560364, -6.708249092102051], + [-2.5780153274536133, 3.2843058109283447], + [2.9171805381774902, -4.5224809646606445], + [7.663022994995117, -2.4914612770080566], + [-3.4473752975463867, -1.2994569540023804], + [-4.142981052398682, -3.8095741271972656], + [3.1548514366149902, 5.020187854766846], + [-3.2168772220611572, -2.5301849842071533], + [3.0972554683685303, -4.964864730834961], + [-5.146298885345459, 6.439997673034668], + [-1.49180006980896, -2.7660675048828125], + [-2.0127549171447754, 5.806463718414307], + [-0.4747476577758789, 9.591130256652832], + [-3.7316195964813232, -2.2019684314727783], + [-3.1452605724334717, 5.377371788024902], + [0.5199383497238159, -6.67332124710083], + [-0.06737885624170303, -4.3654022216796875], + [-0.19398468732833862, -1.3715497255325317], + [0.8961783647537231, 6.0644989013671875], + [-4.446860313415527, -1.2688699960708618], + [-4.1313042640686035, -3.6221001148223877], + [-4.1868391036987305, -3.5883333683013916], + [-3.4286816120147705, 6.785046577453613], + [-3.7406344413757324, -3.8963844776153564], + [0.6225601434707642, 5.490499496459961], + [1.8086631298065186, -4.323922157287598], + [-3.486764669418335, -3.297266721725464], + [-0.2259587049484253, 5.221883773803711], + [-3.637197971343994, 5.4498291015625], + [-2.9324700832366943, 3.585941791534424], + [-3.638979911804199, -1.466516137123108], + [-1.3490123748779297, 11.696406364440918], + [-3.0742290019989014, -0.8256450295448303], + [-4.125302314758301, -1.0860005617141724], + [1.1668784618377686, -5.241330146789551], + [4.119351863861084, -5.198892593383789], + [-1.2639111280441284, 11.45368766784668], + [2.0435192584991455, 3.42968487739563], + [-5.528061389923096, -0.7481565475463867], + [1.435692310333252, -4.883343696594238], + [-0.8334009051322937, 0.7475612759590149], + [1.9107017517089844, -2.8242440223693848], + [-3.7477712631225586, -1.8993046283721924], + [-3.510633707046509, 5.672660827636719], + [-3.1479146480560303, -1.045398235321045], + [8.449673652648926, -2.503040313720703], + [-3.9302334785461426, -3.489318370819092], + [-4.392704486846924, 6.936065673828125], + [2.6368095874786377, -5.172399520874023], + [-1.7248202562332153, -2.3822457790374756], + [-2.624697208404541, 5.821178436279297], + [-3.2001802921295166, -1.4451063871383667], + [-0.8354172110557556, 9.926179885864258], + [1.5831891298294067, 4.797586441040039], + [1.2907013893127441, 4.520978927612305], + [0.6607636213302612, -5.448585510253906], + [0.5733259916305542, -7.445914268493652], + [2.6409800052642822, -5.468203544616699], + [-3.7103607654571533, -2.5221827030181885], + [3.005796432495117, -4.7469329833984375], + [-3.5781657695770264, -2.290949821472168], + [2.4050590991973877, -4.02820348739624], + [-1.232870101928711, 10.967222213745117], + [7.021186828613281, -2.015691041946411], + [0.5979357957839966, -7.5722174644470215], + [3.4372127056121826, -3.9189720153808594], + [7.843583106994629, -3.007117509841919], + [-3.2747418880462646, 7.16786527633667], + [2.023723840713501, 3.6795647144317627], + [-3.08864426612854, -0.8373461961746216], + [-2.6046640872955322, -2.206017017364502], + [-4.317370891571045, -0.45082926750183105], + [-0.8853626251220703, 10.793375015258789], + [1.4852771759033203, -6.259030342102051], + [-3.429218292236328, -2.91516375541687], + [-0.7250015139579773, 0.44262585043907166], + [5.967034816741943, -4.1267595291137695], + [2.931825637817383, -4.4191179275512695], + [1.8267325162887573, 2.5924293994903564], + [-4.343875885009766, 6.967429161071777], + [3.0199522972106934, 6.725584030151367], + [0.7797559499740601, 6.341889381408691], + [7.18956995010376, -3.7280497550964355], + [-0.03280309587717056, -4.94035530090332], + [0.3649190664291382, -6.136783599853516], + [-1.3175143003463745, 11.104353904724121], + [2.6875593662261963, -4.828178405761719], + [-1.3680568933486938, 6.451990127563477], + [-3.240432024002075, -2.225464344024658], + [-3.6042439937591553, -1.984897494316101], + [2.7997817993164062, -4.34304141998291], + [4.26002311706543, 7.594722747802734], + [-4.726968765258789, 5.742457866668701], + [1.0873467922210693, 5.412121772766113], + [1.4901779890060425, 3.2986605167388916], + [0.4282601475715637, -6.152692794799805], + [0.10236116498708725, -4.196305274963379], + [2.766016960144043, -4.531079292297363], + [0.5494505763053894, -7.7730326652526855], + [0.6680459380149841, -8.28866958618164], + [-1.9375529289245605, 1.9250035285949707], + [2.7694265842437744, -4.481191158294678], + [-3.3454225063323975, -2.180536985397339], + [5.899117469787598, -1.3004542589187622], + [6.712306499481201, -1.8269298076629639], + [2.332493543624878, 5.59356164932251], + [-3.263841390609741, -0.9670833349227905], + [-3.7095067501068115, 5.595841407775879], + [-0.3939744234085083, 9.125897407531738], + [0.5983485579490662, -8.132712364196777], + [0.5026005506515503, -7.196751594543457], + [-0.685224711894989, 9.344073295593262], + [2.6322619915008545, -4.165635108947754], + [-2.6292641162872314, 2.720874071121216], + [-0.5780696272850037, -1.257024884223938], + [-4.359341144561768, 4.947989463806152], + [-3.563922166824341, -3.0277907848358154], + [-0.8341423869132996, -0.4683743417263031], + [-4.036586761474609, 6.463209629058838], + [2.2321417331695557, 5.943688869476318], + [-4.4918389320373535, -3.516798734664917], + [2.28174090385437, -4.040802955627441], + [1.7824560403823853, -4.281571388244629], + [-2.7388644218444824, 2.9579238891601562], + [-0.0676342323422432, -1.1366498470306396], + [-4.218435287475586, -2.6039810180664062], + [-5.916184425354004, 7.838352203369141], + [9.00754451751709, -2.791407346725464], + [0.775447428226471, -7.253832817077637], + [1.5011277198791504, 4.758297920227051], + [1.5379462242126465, -5.029444694519043], + [-3.6512749195098877, -2.3397228717803955], + [2.511093854904175, 4.438241958618164], + [1.2492117881774902, -0.007686439901590347], + [-0.6281453371047974, -1.3085061311721802], + [-3.0550284385681152, -2.004014492034912], + [-1.841410756111145, 1.7509446144104004], + [-1.004694938659668, -2.5765857696533203], + [-1.0240848064422607, 10.10140609741211], + [-5.165501117706299, -0.8209088444709778], + [1.7947801351547241, -4.42987585067749], + [-0.8079185485839844, -0.5335806608200073], + [1.0138440132141113, 0.8484668731689453], + [1.9958562850952148, 5.780645370483398], + [-2.6428074836730957, -1.5138795375823975], + [-3.094750165939331, 3.924755573272705], + [-0.42848217487335205, 9.552713394165039], + [2.0143182277679443, 4.9504547119140625], + [-3.3319075107574463, -0.8008624911308289], + [-3.6279220581054688, -1.9819177389144897], + [5.286328315734863, -4.624570846557617], + [-1.8376883268356323, -1.170876383781433], + [3.8732409477233887, -4.567281723022461], + [-5.358832836151123, 7.30473518371582], + [-3.6262099742889404, 6.783137321472168], + [-4.949927806854248, 6.987733840942383], + [0.6710261106491089, -8.874736785888672], + [-1.4385544061660767, 0.6663753986358643], + [2.8815879821777344, -4.50411319732666], + [0.4977569580078125, -7.296092987060547], + [1.8260066509246826, 2.6728479862213135], + [-5.444894313812256, 1.382459044456482], + [-0.7785772681236267, 10.21929931640625], + [-3.092301845550537, -0.9956346750259399], + [-2.937694787979126, -1.499738097190857], + [5.844513893127441, -1.8843209743499756], + [-1.0516175031661987, 10.778800964355469], + [-1.9304145574569702, -3.46818470954895], + [0.06872569769620895, -1.3536731004714966], + [-3.436950922012329, -0.9187322854995728], + [-0.7798665761947632, 9.885894775390625], + [-4.019374847412109, -2.560534715652466], + [-2.342733860015869, -1.0265679359436035], + [-2.175191640853882, 2.2158706188201904], + [3.5885086059570312, 6.156013011932373], + [-3.045001268386841, -2.019002676010132], + [2.195697546005249, 4.02231502532959], + [7.984109401702881, -2.4875712394714355], + [1.936455488204956, 4.405595779418945], + [0.5097135901451111, -7.292818546295166], + [2.1763553619384766, -4.740202903747559], + [0.4672927260398865, -0.1813463568687439], + [-4.467803001403809, -3.393005132675171], + [5.852718830108643, 8.692960739135742], + [0.06120150536298752, 7.924250602722168], + [-3.9871556758880615, 5.974456787109375], + [-5.60549783706665, 7.472408771514893], + [6.944156169891357, -2.705108404159546], + [-3.977762460708618, -1.4829117059707642], + [8.419014930725098, -2.7608838081359863], + [5.730623722076416, -1.4192540645599365], + [2.5483038425445557, 4.53092622756958], + [0.6325600147247314, -8.397843360900879], + [0.3768603205680847, -6.201381206512451], + [-2.6309831142425537, 6.4170098304748535], + [4.01577091217041, -0.9309709072113037], + [0.5554255843162537, -7.826676845550537], + [-0.021046437323093414, -1.0437493324279785], + [-2.0360162258148193, 1.8281207084655762], + [0.7303809523582458, -5.577664852142334], + [-2.2318341732025146, 5.705704689025879], + [-3.844538450241089, -1.679016351699829], + [2.6964545249938965, -4.989491939544678], + [-3.767653226852417, -2.035355806350708], + [-0.23146438598632812, 9.438867568969727], + [-3.847878932952881, -1.3353943824768066], + [1.1985392570495605, -0.07369965314865112], + [-2.826472520828247, -1.209202527999878], + [-0.9966146945953369, 9.633112907409668], + [-0.8960713744163513, 9.11217975616455], + [0.649098813533783, 7.991515159606934], + [-4.938179969787598, 2.3195557594299316], + [4.1916093826293945, -3.8171565532684326], + [-1.0926142930984497, 10.277759552001953], + [-3.655165195465088, 3.284679651260376], + [0.5081923007965088, -7.558736801147461], + [1.5579218864440918, 2.123359441757202], + [-2.1432931423187256, -0.7120078802108765], + [-4.212307453155518, -0.35417139530181885], + [-0.6250292062759399, 9.55221939086914], + [-1.647047519683838, 5.981850624084473], + [-0.662777841091156, -2.7631232738494873], + [-3.8218462467193604, 6.102245807647705], + [-4.586808681488037, -0.2639423608779907], + [2.642321825027466, -5.179817199707031], + [0.8368282914161682, -8.086931228637695], + [-3.7424094676971436, -1.787460207939148], + [-5.197633266448975, 2.6341428756713867], + [0.456878662109375, -4.9694929122924805], + [-3.956515073776245, 5.400734901428223], + [3.0867631435394287, -4.726461410522461], + [-3.426847219467163, -2.685025930404663], + [-3.7694666385650635, -0.49278688430786133], + [0.37075889110565186, -5.479192733764648], + [-1.794731855392456, 1.413788080215454], + [9.326921463012695, -2.797384262084961], + [0.4580066204071045, -7.327145576477051], + [2.026597261428833, 5.243008613586426], + [-2.2056987285614014, 6.357769966125488], + [2.827584981918335, -4.386975288391113], + [-5.017865180969238, 6.3961873054504395], + [-3.8607687950134277, 5.216618061065674], + [-3.7371366024017334, -1.1072989702224731], + [5.060827732086182, 7.887400150299072], + [-3.2899138927459717, -1.1970919370651245], + [-5.377572536468506, 6.509716987609863], + [0.4098530411720276, -5.974658966064453], + [3.1584556102752686, -4.193755149841309], + [2.1672234535217285, 0.9465848803520203], + [5.646775722503662, -1.2458555698394775], + [5.781808853149414, -1.7219972610473633], + [-2.9740118980407715, -0.6255875825881958], + [0.7008802890777588, 0.8297398090362549], + [-0.8425458073616028, 9.695791244506836], + [2.645467519760132, -4.144313335418701], + [3.141000270843506, -3.28684401512146], + [-3.940643548965454, -1.3414100408554077], + [-0.0897650197148323, -3.1958224773406982], + [-3.6142771244049072, -1.24006187915802], + [-0.6904481649398804, 9.870450973510742], + [-2.561950922012329, -2.2543892860412598], + [-2.9183220863342285, 4.725266456604004], + [-3.0952095985412598, -0.6447747349739075], + [-3.9230098724365234, 6.128378868103027], + [-3.630129098892212, -1.5519541501998901], + [0.5287252068519592, -4.9648213386535645], + [-2.876370668411255, -0.9133155345916748], + [-0.0011077597737312317, -3.0214874744415283], + [-5.046611785888672, -1.309711217880249], + [1.3704458475112915, 6.474095344543457], + [-1.353358507156372, -0.033419493585824966], + [-0.7389626502990723, -2.5321083068847656], + [1.589742660522461, 2.10093092918396], + [-3.640066385269165, 3.945024251937866], + [-4.755209445953369, -0.8682737946510315], + [-1.0243382453918457, 10.375101089477539], + [-1.0330944061279297, -0.5690906047821045], + [0.47376126050949097, -7.296077728271484], + [9.250815391540527, -2.781531572341919], + [0.6086493730545044, -0.007810238748788834], + [1.8003997802734375, -4.233851909637451], + [-3.414224624633789, -1.627841830253601], + [-3.406048059463501, -0.19430828094482422], + [0.4031715393066406, -6.2806806564331055], + [-0.4341561794281006, 8.367657661437988], + [-3.7104499340057373, -0.41004472970962524], + [2.658696174621582, -4.440985679626465], + [0.7235634922981262, -8.984596252441406], + [-1.3130213022232056, 11.59634017944336], + [-0.16177314519882202, -3.805643320083618], + [1.4202739000320435, 5.024438858032227], + [-3.6906063556671143, 1.8499077558517456], + [-4.264301776885986, -2.9592013359069824], + [-3.658154249191284, -1.6878725290298462], + [4.088742733001709, 7.5820794105529785], + [-4.111873149871826, 4.657345771789551], + [-1.2077709436416626, 1.4443565607070923], + [2.640077829360962, -4.585761070251465], + [-5.732931613922119, 6.1843180656433105], + [-2.0431034564971924, 1.707729458808899], + [7.656861305236816, -2.4441111087799072], + [0.43671637773513794, -6.210919380187988], + [-0.6863590478897095, 10.708778381347656], + [2.3992435932159424, -4.772638320922852], + [-1.7138181924819946, 1.392196536064148], + [-5.1274943351745605, 3.866467237472534], + [0.043054722249507904, -4.865337371826172], + [-1.9352567195892334, -1.2728887796401978], + [-0.2322644591331482, -0.3541545271873474], + [-0.1783393919467926, -3.0566141605377197], + [-1.2341314554214478, 10.950567245483398], + [0.5614348649978638, -3.79045033454895], + [0.6571083664894104, -8.346427917480469], + [6.999736785888672, -3.7297065258026123], + [7.462411880493164, -1.9767318964004517], + [-0.00047213584184646606, -0.8291385769844055], + [2.9443013668060303, 6.449750900268555], + [-5.027675151824951, -1.6382907629013062], + [2.691558599472046, -4.405409812927246], + [-1.3208624124526978, 1.5265525579452515], + [-5.7902703285217285, 4.353782653808594], + [-1.169857144355774, -2.3872458934783936], + [-1.1480956077575684, 11.632678985595703], + [0.42011481523513794, -6.178476333618164], + [0.4428897500038147, -5.435905933380127], + [-4.241605281829834, -1.2430082559585571], + [-4.842355251312256, -1.2453807592391968], + [-3.959912061691284, 4.0611467361450195], + [0.37960708141326904, -5.003100872039795], + [2.7634739875793457, -4.595714092254639], + [-0.5457109808921814, 9.832274436950684], + [-1.998506784439087, 1.5944299697875977], + [1.4833886623382568, 1.5928813219070435], + [0.4301567077636719, -0.3772524893283844], + [2.79555344581604, -4.616490364074707], + [7.721917629241943, -2.2128376960754395], + [2.6996347904205322, -4.958743095397949], + [-0.9509105086326599, 9.684446334838867], + [-4.240131855010986, -1.3238990306854248], + [-0.5565678477287292, 10.294635772705078], + [-4.952565670013428, 5.0732550621032715], + [-2.559866189956665, -2.596806764602661], + [0.49845027923583984, -7.039338111877441], + [-1.2501972913742065, 11.272851943969727], + [3.0865979194641113, -5.036435127258301], + [-2.1430137157440186, 0.7511427402496338], + [2.096693992614746, 3.121669292449951], + [-1.227524995803833, 11.072065353393555], + [2.7916762828826904, 5.376959800720215], + [1.8026667833328247, -5.367465496063232], + [-3.431874990463257, -2.0795037746429443], + [-0.6737126708030701, 10.45777702331543], + [0.9384739995002747, -7.607637882232666], + [0.3595486283302307, -6.9525251388549805], + [-5.217772483825684, 4.7783613204956055], + [0.5128186345100403, -7.358356952667236], + [-3.2799265384674072, -1.0632200241088867], + [-4.490487575531006, -1.029689073562622], + [-3.249596357345581, -0.3552931547164917], + [0.3932955861091614, -7.349401473999023], + [0.6277180910110474, -4.432682991027832], + [-3.5721874237060547, -2.295809507369995], + [1.3289440870285034, 1.4018340110778809], + [-3.507784843444824, -2.2509872913360596], + [-0.7950401306152344, 1.398130178451538], + [-5.33404016494751, 6.730948448181152], + [1.4710532426834106, 3.652366876602173], + [-2.2342185974121094, -2.860353708267212], + [-0.5417433381080627, 9.601884841918945], + [8.995077133178711, -2.781998872756958], + [2.892822027206421, -4.57312536239624], + [0.6843535304069519, -7.762709617614746], + [6.953408718109131, -2.2126312255859375], + [0.5536193251609802, -7.761469841003418], + [6.7077813148498535, -3.138727903366089], + [-1.8303306102752686, 0.5514025092124939], + [-2.0322773456573486, 1.784005880355835], + [0.2317851185798645, -5.5343122482299805], + [0.39729923009872437, -7.178843021392822], + [-3.70766282081604, -2.9078803062438965], + [-1.061436653137207, 1.7868410348892212], + [2.515582799911499, -4.518425464630127], + [7.563066005706787, -3.7244551181793213], + [2.722538709640503, -4.285019874572754], + [-1.603996753692627, -2.129162073135376], + [0.32114672660827637, -5.716946125030518], + [-3.877619981765747, -2.4834070205688477], + [0.578465461730957, -6.986741065979004], + [-4.223687171936035, -2.1937263011932373], + [-0.856756865978241, 9.544698715209961], + [1.2179045677185059, -5.391603946685791], + [-3.8192460536956787, -1.6739403009414673], + [-3.147728681564331, 5.1713128089904785], + [0.1550869643688202, -4.303616523742676], + [-2.213261365890503, 3.0796868801116943], + [0.42210590839385986, -6.459249019622803], + [-4.275057315826416, 6.538997650146484], + [-1.8325880765914917, -1.5373456478118896], + [1.7654629945755005, 5.606634140014648], + [-1.1574393510818481, 1.8414685726165771], + [1.588080883026123, 0.35878145694732666], + [-1.7200343608856201, 0.5688939094543457], + [-3.4863998889923096, -1.3945144414901733], + [0.20321351289749146, -6.152504920959473], + [0.45310449600219727, -6.949370384216309], + [-5.056554317474365, 7.053580284118652], + [-1.1532466411590576, 11.025873184204102], + [7.825534343719482, -2.641062021255493], + [2.1271378993988037, 0.3995305001735687], + [3.740755319595337, -3.892674446105957], + [-4.281511306762695, 4.684195518493652], + [0.22063350677490234, -6.039702415466309], + [-2.1677277088165283, 2.794609308242798], + [-1.1852811574935913, 10.133989334106445], + [-1.9330151081085205, 1.4796351194381714], + [2.691769599914551, -4.744453430175781], + [-1.9949604272842407, 2.5161468982696533], + [-1.4373899698257446, 5.815113067626953], + [-3.6853206157684326, -2.7718889713287354], + [-1.236280918121338, 11.182868957519531], + [2.3931467533111572, -4.325822353363037], + [3.3966457843780518, -1.8895630836486816], + [-5.3926472663879395, 6.067013740539551], + [-1.7278250455856323, 14.080726623535156], + [-1.1634559631347656, -3.4954187870025635], + [6.455796718597412, -3.250948190689087], + [1.5520508289337158, 5.546201705932617], + [0.6391116380691528, -5.640912055969238], + [-0.7418906092643738, 0.7207986116409302], + [-0.20441097021102905, -1.695297122001648], + [-0.5529456734657288, -0.6532288193702698], + [-0.35773175954818726, 9.700407028198242], + [-0.6504946351051331, 9.576604843139648], + [7.536394119262695, -2.225445508956909], + [-3.0245423316955566, 5.112033843994141], + [-4.372799873352051, 5.0403900146484375], + [-3.6531565189361572, -1.0290610790252686], + [1.4563798904418945, 5.2827019691467285], + [3.9363491535186768, 7.235844135284424], + [0.014038048684597015, -4.301090240478516], + [0.9625144600868225, 0.9228734374046326], + [4.605366230010986, 7.7686262130737305], + [-1.2663259506225586, 11.460490226745605], + [1.895467758178711, 1.3505691289901733], + [9.904803276062012, -2.9714457988739014], + [-2.0199320316314697, 0.3881109058856964], + [-5.190798282623291, 5.527741432189941], + [-5.0676984786987305, 4.676210403442383], + [-5.7847418785095215, 3.6599903106689453], + [5.737335681915283, -1.1538864374160767], + [2.924058675765991, -4.519948959350586], + [5.283468723297119, -0.5150008201599121], + [2.7538955211639404, -4.524899005889893], + [-0.6001573801040649, 9.74199390411377], + [0.6048478484153748, -7.655200958251953], + [-0.501240074634552, 10.207719802856445], + [2.0999882221221924, -6.091137886047363], + [-5.220779895782471, 5.683508396148682], + [1.5939686298370361, 0.6439741849899292], + [1.5594937801361084, 1.8771809339523315], + [0.618404746055603, -6.442502975463867], + [-3.862126111984253, -1.4655927419662476], + [-0.24399089813232422, 7.742790222167969], + [-1.362466812133789, -1.0443416833877563], + [-4.509250164031982, 6.269574165344238], + [0.9942277073860168, -3.9100794792175293], + [-1.174631953239441, 10.602341651916504], + [0.30571359395980835, -6.228466033935547], + [0.6961745619773865, -8.042200088500977], + [-2.6563141345977783, -0.642123281955719], + [-3.355412721633911, 5.665517807006836], + [-3.347810983657837, -2.7697699069976807], + [-3.2670538425445557, -0.4424023926258087], + [9.589088439941406, -2.9565823078155518], + [0.44386500120162964, -7.331484317779541], + [-0.7183099985122681, 9.755802154541016], + [-0.40729618072509766, 9.915031433105469], + [-0.5850661396980286, 9.44582748413086], + [0.8930867314338684, -4.087751865386963], + [-1.835564136505127, 1.9832764863967896], + [0.6871921420097351, -6.737828731536865], + [2.142937421798706, 3.4782626628875732], + [-0.383708655834198, 8.061882019042969], + [0.1841861605644226, -6.186676979064941], + [-3.964946985244751, -2.424675703048706], + [4.70833683013916, 7.796649932861328], + [-0.8862354159355164, 10.08504867553711], + [-4.6052680015563965, -0.9636551141738892], + [-0.7364542484283447, -1.098648190498352], + [2.900430679321289, -5.088128566741943], + [-1.9502973556518555, 0.70113205909729], + [1.5452600717544556, 2.486760139465332], + [-3.3683063983917236, 3.1870615482330322], + [0.5501610040664673, -7.700335502624512], + [-0.25670963525772095, -1.509082555770874], + [1.475032091140747, 1.4257220029830933], + [-0.5559734106063843, 9.650125503540039], + [-4.2277703285217285, 7.6846842765808105], + [-5.509751796722412, 7.0578718185424805], + [1.7304482460021973, 5.075598239898682], + [-3.434241533279419, -1.414141058921814], + [0.08120184391736984, -5.091235160827637], + [0.7241047024726868, -0.4282113313674927], + [0.12683594226837158, -5.661581993103027], + [-5.783735752105713, 5.893691062927246], + [0.13930431008338928, -4.572351455688477], + [8.041085243225098, -3.1410484313964844], + [0.26199668645858765, -3.747326374053955], + [-3.754535675048828, -1.3691130876541138], + [7.49960470199585, -2.4523065090179443], + [-0.4133055806159973, 9.818031311035156], + [-3.847991943359375, -1.0930761098861694], + [2.2749149799346924, -5.094105243682861], + [-2.490267038345337, -2.259094715118408], + [-3.8997199535369873, -2.026273727416992], + [-4.9389729499816895, 6.247662544250488], + [0.9618807435035706, -5.037254333496094], + [-1.115990161895752, 10.491235733032227], + [0.23160117864608765, -6.679047584533691], + [-3.4629509449005127, -2.0052499771118164], + [-4.400807857513428, -3.9966659545898438], + [-5.554607391357422, 7.067126274108887], + [-3.528522253036499, -1.6063729524612427], + [-3.6391098499298096, -0.2989599108695984], + [-3.544084072113037, -1.5240139961242676], + [1.8976271152496338, 1.1016122102737427], + [1.7667317390441895, -4.556527614593506], + [-4.622622966766357, 5.864546775817871], + [1.4184308052062988, 2.6528470516204834], + [-2.809972047805786, -2.5763590335845947], + [0.8150007128715515, -5.542636871337891], + [-3.99015736579895, -2.9765124320983887], + [-0.9238826036453247, 9.937206268310547], + [-3.2900779247283936, -1.516425609588623], + [4.168266773223877, 7.399899959564209], + [1.5891587734222412, 0.2306252121925354], + [-4.489415645599365, -3.812185525894165], + [1.2994892597198486, 4.719712734222412], + [-2.775216817855835, -1.7156472206115723], + [-0.15687251091003418, 7.878966331481934], + [0.895115315914154, -6.425200462341309], + [6.557226657867432, -2.960200548171997], + [1.3493413925170898, -5.065986633300781], + [-4.084846019744873, -0.27830857038497925], + [-4.186275005340576, -2.872086763381958], + [-3.0515358448028564, -1.1671093702316284], + [-1.2834374904632568, 11.493850708007812], + [2.060011863708496, -4.242884635925293], + [0.8948222398757935, -0.2692440450191498], + [-2.7540619373321533, -0.7556697726249695], + [0.9118608236312866, -7.1669206619262695], + [6.818997859954834, -3.4019386768341064], + [-0.5702490210533142, 9.938507080078125], + [0.5306110382080078, -6.66306209564209], + [0.36267152428627014, -5.566183090209961], + [-1.4868626594543457, 2.014293670654297], + [-4.1591477394104, -2.6566684246063232], + [1.7206825017929077, 5.281269550323486], + [-3.7545838356018066, -1.8370612859725952], + [-5.717788219451904, 7.072103500366211], + [2.700864791870117, -4.357252597808838], + [0.8590881824493408, -7.441462516784668], + [-3.953522205352783, -1.2406049966812134], + [0.3892052471637726, -5.012872695922852], + [0.5651329755783081, -7.94563102722168], + [-2.4538216590881348, 0.9402520060539246], + [-1.7510024309158325, 0.9188234806060791], + [-3.6193230152130127, 5.631849765777588], + [1.0550086498260498, -6.199765682220459], + [7.467417240142822, -2.654841184616089], + [0.011277787387371063, -4.989101409912109], + [-4.627767562866211, -1.2021218538284302], + [0.3908265233039856, -6.393098831176758], + [-2.853074073791504, -0.6789229512214661], + [-1.6566284894943237, 1.9626177549362183], + [-3.452432632446289, -1.2640286684036255], + [-0.7800340056419373, 10.153766632080078], + [-4.499899864196777, 6.023392200469971], + [-4.606396198272705, -0.5528523325920105], + [-4.088287830352783, -1.9065011739730835], + [-3.7786760330200195, -1.2457960844039917], + [2.77154278755188, -4.532617568969727], + [-5.095423221588135, 6.80073356628418], + [-4.8909993171691895, -1.5404260158538818], + [-4.734572410583496, 6.521000862121582], + [0.7214736342430115, -7.55657958984375], + [0.2938821017742157, -4.387228965759277], + [7.459934711456299, -2.2007198333740234], + [0.76350337266922, -8.731575012207031], + [2.4742114543914795, 5.2761454582214355], + [-5.549872875213623, 5.853410720825195], + [4.1656813621521, 7.452203273773193], + [2.461097002029419, 5.003513813018799], + [0.8392146229743958, -8.138510704040527], + [0.21153190732002258, -4.1268744468688965], + [0.6586267352104187, -6.656206130981445], + [-0.6095348596572876, 7.637509346008301], + [2.0721781253814697, -4.992027282714844], + [0.8412497639656067, -4.172145843505859], + [-3.5404818058013916, 3.9750635623931885], + [-2.8443586826324463, -1.1065071821212769], + [5.6761016845703125, -1.895371437072754], + [2.0994162559509277, 0.6683975458145142], + [-5.324703216552734, 7.146885871887207], + [0.8540812134742737, -0.2822609841823578], + [0.6705712080001831, -6.062239646911621], + [-0.9133104681968689, 6.5505475997924805], + [-1.926100492477417, 1.498948097229004], + [0.5404742360115051, -5.185998916625977], + [2.767205238342285, -4.921676158905029], + [2.5934228897094727, -4.192172050476074], + [0.5497782826423645, -7.541678428649902], + [-3.5104997158050537, -1.6016862392425537], + [-1.8941378593444824, 2.266615152359009], + [-2.112060546875, 1.687638759613037], + [-0.24483275413513184, 8.811014175415039], + [8.292428016662598, -2.8838744163513184], + [-1.1415090560913086, 10.738203048706055], + [-3.5008013248443604, -0.5676864981651306], + [-3.6403424739837646, -1.8342854976654053], + [-0.030293770134449005, -0.028565455228090286], + [-0.05360082536935806, -3.958380937576294], + [-1.7957472801208496, 1.2872072458267212], + [0.4462582468986511, -6.94763708114624], + [-1.307808756828308, 11.391290664672852], + [2.356491804122925, 4.71152400970459], + [-5.468079090118408, 6.796393871307373], + [2.2287614345550537, 6.331082344055176], + [-0.02329472452402115, -3.636286497116089], + [8.125269889831543, -2.6166179180145264], + [1.31661856174469, 5.76735782623291], + [2.863722324371338, -4.881422996520996], + [2.3629817962646484, -4.818727016448975], + [-4.241147518157959, 5.191038131713867], + [-3.7460200786590576, -1.7152940034866333], + [2.739377021789551, -4.799778938293457], + [0.1369420289993286, 5.111903667449951], + [-0.23101389408111572, -1.8179208040237427], + [10.250761985778809, -3.075136423110962], + [1.7251038551330566, -4.909618854522705], + [-0.7913042902946472, 9.627655029296875], + [0.6556326150894165, -8.145732879638672], + [6.3496832847595215, -1.1436975002288818], + [2.795067548751831, -4.425726413726807], + [0.6648561954498291, -8.385250091552734], + [2.6766650676727295, 6.197249889373779], + [0.4561470150947571, -7.058459758758545], + [-4.079559803009033, -1.1695576906204224], + [-1.471712589263916, -1.5669445991516113], + [-4.999685287475586, 2.955559253692627], + [3.383221387863159, 7.0655741691589355], + [-0.8290002346038818, 9.138153076171875], + [-3.528775930404663, -0.8533002138137817], + [-4.835815906524658, -1.1562237739562988], + [-4.861204624176025, -3.8446927070617676], + [-3.8618857860565186, -2.940990686416626], + [8.647473335266113, -2.6103546619415283], + [9.472253799438477, -2.858625888824463], + [8.592448234558105, -2.630941152572632], + [-5.845775127410889, 5.3715596199035645], + [-3.4317257404327393, -0.8762903213500977], + [2.1525375843048096, 5.952178955078125], + [5.607447147369385, -1.229966163635254], + [0.5972470641136169, -7.414541244506836], + [-1.1461187601089478, 1.4237732887268066], + [-0.7719810009002686, 11.596025466918945], + [1.1477737426757812, -6.686562538146973], + [1.4909785985946655, -4.955287456512451], + [0.37179887294769287, -5.333988189697266], + [6.12583589553833, -1.588430404663086], + [0.31220167875289917, -0.7670732140541077], + [2.5681540966033936, -5.211593151092529], + [2.464561700820923, 0.48095935583114624], + [0.9024826288223267, -0.17843341827392578], + [-4.207993507385254, -0.36262422800064087], + [-1.5516880750656128, 1.2480920553207397], + [0.9450786709785461, -7.157014846801758], + [0.1527414321899414, 8.171873092651367], + [0.6190272569656372, -6.335482120513916], + [-3.9786689281463623, -2.7470815181732178], + [-4.297518253326416, -2.395730972290039], + [2.401275873184204, -3.3358490467071533], + [2.1361470222473145, 3.714749336242676], + [-5.53859281539917, 5.852806091308594], + [2.3043100833892822, -4.210792541503906], + [7.7440009117126465, -2.065814733505249], + [0.6897637248039246, -5.196398735046387], + [-1.5344980955123901, -0.9538565874099731], + [2.17995285987854, -3.0135297775268555], + [-4.072298526763916, -2.662642240524292], + [-4.574275970458984, 6.247550010681152], + [6.077866077423096, 8.992953300476074], + [-4.401126384735107, -2.2284228801727295], + [4.382379055023193, 7.108669281005859], + [-1.6667083501815796, 1.1060726642608643], + [5.300683498382568, 8.204526901245117], + [0.4228236675262451, -6.7634406089782715], + [7.346774578094482, -2.823258876800537], + [-4.664771556854248, 6.284514427185059], + [2.1024391651153564, 0.5360492467880249], + [-1.8595227003097534, 1.7629796266555786], + [-4.260682582855225, -2.662411689758301], + [-4.017532825469971, -2.3870041370391846], + [1.4363864660263062, -7.4649224281311035], + [-3.1999928951263428, -1.2176989316940308], + [-5.19142484664917, 2.485071897506714], + [-0.019624151289463043, -3.1956064701080322], + [-1.096803903579712, 5.875840187072754], + [9.360031127929688, -3.0091452598571777], + [-5.484436511993408, -0.925560712814331], + [-1.5453293323516846, 2.1714866161346436], + [8.392691612243652, -2.518730401992798], + [7.254475116729736, -2.208911180496216], + [5.780486583709717, 8.663566589355469], + [0.6589159965515137, -6.563033103942871], + [0.8016429543495178, -0.5227763652801514], + [-3.014594316482544, -0.187387615442276], + [2.8122665882110596, 6.199944019317627], + [2.0514187812805176, 1.3684656620025635], + [-0.29293709993362427, -3.1404740810394287], + [-2.3926966190338135, -1.3510266542434692], + [-1.9838751554489136, 2.044705629348755], + [-3.32558012008667, -0.24798178672790527], + [2.502854347229004, 0.6371881365776062], + [-3.401130437850952, 6.435205936431885], + [2.8357574939727783, -5.248175621032715], + [-3.5333092212677, 6.184353828430176], + [0.4790387749671936, -5.258721828460693], + [1.6991387605667114, 0.944835364818573], + [1.6448338031768799, 5.132028102874756], + [-1.2391780614852905, 11.330894470214844], + [5.39054536819458, 8.161540031433105], + [-2.6059653759002686, 0.18972325325012207], + [0.1108967587351799, -0.9238678216934204], + [0.7079719305038452, -8.24777889251709], + [0.6376245617866516, -7.517838001251221], + [-4.4755425453186035, 0.8371990919113159], + [-2.815376043319702, 5.671065807342529], + [2.150897979736328, 0.6868229508399963], + [0.7394710779190063, -7.876843452453613], + [-2.3783152103424072, -0.2689957618713379], + [0.358493447303772, -6.396450996398926], + [0.01740073412656784, -4.682164192199707], + [1.3989510536193848, 0.3834878206253052], + [-1.1033351421356201, -1.0464539527893066], + [7.025119304656982, -3.095545530319214], + [2.8294074535369873, -4.635159015655518], + [-1.9051856994628906, 2.604315757751465], + [-3.295135736465454, 6.735858917236328], + [-3.353278875350952, 3.6891915798187256], + [-2.6244609355926514, -1.765306830406189], + [-4.835108757019043, -1.1410211324691772], + [-1.6917234659194946, 1.026223063468933], + [-3.8325517177581787, -1.023651361465454], + [-3.6339168548583984, 6.186861515045166], + [0.955138623714447, -9.00092601776123], + [1.3392553329467773, 0.24227046966552734], + [-0.921078622341156, 10.57835578918457], + [1.9976015090942383, -4.9650983810424805], + [-3.339993715286255, -0.953572690486908], + [1.1197936534881592, -0.6502687931060791], + [2.243265151977539, 5.8013458251953125], + [1.9511971473693848, -5.088080406188965], + [6.480688095092773, -2.9756968021392822], + [-1.1185113191604614, 10.22183895111084], + [-0.9131281971931458, 10.653799057006836], + [-1.513543963432312, -0.07140171527862549], + [0.7179730534553528, -7.870513916015625], + [2.524498224258423, 5.618958473205566], + [1.0104976892471313, -0.6232922077178955], + [-0.5186651349067688, 9.396469116210938], + [-0.14100614190101624, -3.6698150634765625], + [3.26192569732666, 2.736675977706909], + [1.580464243888855, 6.744085788726807], + [2.7415692806243896, -4.360525131225586], + [0.6881823539733887, -5.401486396789551], + [4.926140308380127, 7.6488776206970215], + [0.1475444734096527, -5.394021987915039], + [-0.39691486954689026, -3.8988516330718994], + [2.178548574447632, -4.9047698974609375], + [-3.077592134475708, -2.0111382007598877], + [-2.087482213973999, 2.012348175048828], + [2.0697576999664307, 5.137215614318848], + [0.485889732837677, -6.971514701843262], + [-1.9962362051010132, 2.0091822147369385], + [-3.074497938156128, -1.0798313617706299], + [-1.005802869796753, 10.874784469604492], + [3.794400453567505, -3.5564706325531006], + [6.353022575378418, -5.042804718017578], + [1.0711462497711182, -0.33205875754356384], + [0.7594221234321594, -4.73478364944458], + [5.090067386627197, 7.909696578979492], + [-4.147276401519775, -2.4891011714935303], + [7.011250972747803, -3.39254093170166], + [-1.4090137481689453, 11.45502758026123], + [2.5786588191986084, -4.521507263183594], + [2.589823007583618, -3.824864625930786], + [0.3181005120277405, -5.621140956878662], + [0.7556490302085876, -8.87911605834961], + [-4.901639461517334, 7.067444801330566], + [0.2888045907020569, -4.68936824798584], + [-1.2157107591629028, -1.2228153944015503], + [2.65834641456604, -4.472837924957275], + [-3.947010040283203, -3.2860145568847656], + [-4.051837921142578, -1.630858063697815], + [-0.43740373849868774, -1.2482093572616577], + [-0.9720087647438049, -0.7689873576164246], + [-3.696108818054199, -1.3694781064987183], + [-2.2825303077697754, 1.6783050298690796], + [0.8267309665679932, -7.218445777893066], + [-2.032717227935791, 2.3996593952178955], + [-0.5174611806869507, 1.7819650173187256], + [0.6566601991653442, -0.3008289337158203], + [6.167881965637207, -4.085057258605957], + [0.6434029936790466, -6.441654205322266], + [1.2063647508621216, -5.327940940856934], + [-1.9480328559875488, 1.2587560415267944], + [6.4971699714660645, -3.3069870471954346], + [5.4712700843811035, -1.2473944425582886], + [1.9502577781677246, 3.8632400035858154], + [2.556915044784546, 6.194831848144531], + [0.4187965393066406, -7.316561698913574], + [-5.348580837249756, 5.98517370223999], + [-0.34194111824035645, 9.755196571350098], + [-0.7855014801025391, 10.362154960632324], + [2.1598360538482666, 5.961743354797363], + [-4.059924602508545, -1.9927834272384644], + [0.4567076563835144, -0.5057213306427002], + [0.5659851431846619, -8.131839752197266], + [2.0325114727020264, 3.5523409843444824], + [-2.7020320892333984, -0.9470283389091492], + [-4.1939826011657715, -3.870591163635254], + [0.41241762042045593, -5.1349687576293945], + [2.0029685497283936, 5.764643669128418], + [-3.8691365718841553, -1.9883770942687988], + [-4.432645320892334, 1.5443813800811768], + [-0.8339187502861023, 11.120976448059082], + [-3.732633590698242, -1.2811965942382812], + [2.195812463760376, -4.689281463623047], + [-3.8738114833831787, 6.554107666015625], + [0.9953562617301941, -4.666553497314453], + [-0.31291723251342773, -0.3868963420391083], + [0.2675204277038574, -6.377429485321045], + [0.277651846408844, -4.887833595275879], + [0.31107619404792786, -4.802627086639404], + [5.765536785125732, -1.3458526134490967], + [0.9672306180000305, -4.934994697570801], + [-4.417541980743408, -2.3892600536346436], + [1.02243971824646, 4.398885726928711], + [-1.1740059852600098, 11.385913848876953], + [-1.095833420753479, 10.96757698059082], + [1.9470441341400146, -4.970274925231934], + [2.2364447116851807, 5.923049449920654], + [-3.2938406467437744, -1.4576869010925293], + [-3.5266032218933105, -2.728309392929077], + [1.983936071395874, 5.441647529602051], + [-3.5428378582000732, -2.7323291301727295], + [-0.155177503824234, -2.5761916637420654], + [-3.4240870475769043, -1.195022702217102], + [-4.8256516456604, -3.149038076400757], + [-2.5847315788269043, -0.633090615272522], + [-1.93338942527771, 1.6317455768585205], + [6.899561882019043, -2.1213152408599854], + [0.3263617753982544, -5.062419414520264], + [8.517779350280762, -3.4853997230529785], + [-0.8630942702293396, 10.722049713134766], + [1.1727708578109741, -5.708564758300781], + [-1.0047659873962402, -2.3448498249053955], + [-1.1561869382858276, 11.219863891601562], + [1.3690354824066162, 1.5226598978042603], + [-4.441198825836182, -2.9695355892181396], + [-1.089653491973877, 10.566747665405273], + [0.4413824677467346, -7.528469085693359], + [1.1825001239776611, -5.782439231872559], + [1.8178437948226929, 2.443101644515991], + [-0.5256712436676025, 10.036661148071289], + [4.189749717712402, -3.729818105697632], + [-1.9757399559020996, -2.0264244079589844], + [-4.480094909667969, -0.9475149512290955], + [-3.1646358966827393, -1.0430946350097656], + [2.1095259189605713, -4.403376579284668], + [7.083899021148682, -2.3841392993927], + [-4.544342517852783, 5.718135356903076], + [-0.23554742336273193, 8.227760314941406], + [-3.7171080112457275, 1.6492034196853638], + [-1.6395292282104492, 1.6320732831954956], + [1.775647521018982, -4.535261631011963], + [0.33804434537887573, -6.800522804260254], + [4.478770732879639, 7.689469337463379], + [-0.597492516040802, 2.9303629398345947], + [5.908901214599609, -2.3151092529296875], + [-0.4226422607898712, 2.621471405029297], + [-5.151015758514404, 4.698845386505127], + [6.445233345031738, -4.886020660400391], + [-3.0884768962860107, 2.8161489963531494], + [0.7172930836677551, -7.679954528808594], + [6.569631099700928, -2.2800686359405518], + [6.730007171630859, -4.143357753753662], + [-4.204263687133789, 6.233484268188477], + [0.6528933644294739, -5.482481002807617], + [-4.299190521240234, 6.11019229888916], + [-3.315505266189575, -0.882786750793457], + [-0.29029035568237305, -1.3574618101119995], + [-3.655571222305298, 4.620811462402344], + [8.14174747467041, -2.9543681144714355], + [0.48757660388946533, -5.701614856719971], + [-1.9315807819366455, 1.1580561399459839], + [-2.910869598388672, -1.055653691291809], + [0.5398312211036682, -7.0450439453125], + [-4.308411121368408, 5.756335258483887], + [-3.386155605316162, -0.9348853826522827], + [-0.6032294631004333, 10.771041870117188], + [1.5751140117645264, 2.9028549194335938], + [-5.559074878692627, 5.941037178039551], + [-1.8401312828063965, 1.4100600481033325], + [2.2069311141967773, 5.903691291809082], + [-3.3890926837921143, -0.6222862005233765], + [-4.800234794616699, 5.564981460571289], + [-0.5257247090339661, 8.953754425048828], + [0.8848265409469604, -6.809972763061523], + [2.877129554748535, -4.703059196472168], + [3.898972988128662, 7.179213523864746], + [-4.542072772979736, 5.919905662536621], + [-1.9470528364181519, 1.5158395767211914], + [2.764483690261841, 0.7904481887817383], + [0.6476173996925354, -9.133464813232422], + [1.2998692989349365, 6.314489364624023], + [-2.736727237701416, -2.2914388179779053], + [-3.9180667400360107, 5.079282760620117], + [0.9731308817863464, 5.240408420562744], + [-1.1031618118286133, 10.72221565246582], + [-3.5460617542266846, -2.134732484817505], + [-3.1501176357269287, -1.1507192850112915], + [0.03225579112768173, -1.131239652633667], + [-5.220860004425049, -1.0576058626174927], + [-3.9505417346954346, -2.996474027633667], + [0.5661978125572205, -6.47484016418457], + [-1.8118183612823486, -2.2052459716796875], + [4.377156734466553, -3.305548906326294], + [-3.7924740314483643, -1.76708984375], + [3.5948596000671387, 6.9330596923828125], + [2.7500455379486084, -4.5626678466796875], + [-5.259061336517334, -0.9832757115364075], + [-0.47543811798095703, 9.556447982788086], + [-4.089601516723633, 6.1781721115112305], + [-3.493086338043213, -1.2665290832519531], + [-3.9461772441864014, -1.4088159799575806], + [-1.1518480777740479, 1.7209875583648682], + [-3.606051445007324, -1.9657394886016846], + [-1.0877063274383545, 10.664546966552734], + [-0.5742795467376709, -1.2039302587509155], + [-1.119683027267456, 4.7839508056640625], + [-1.3783189058303833, 0.14447474479675293], + [0.692329466342926, -7.244858741760254], + [-0.7704808712005615, 10.21059799194336], + [0.8429120182991028, -0.5252268314361572], + [-1.349913477897644, 5.8098931312561035], + [0.42361730337142944, -7.092010498046875], + [2.6472856998443604, 5.452730655670166], + [-1.397507667541504, 11.797477722167969], + [-4.586287021636963, 4.733329772949219], + [8.403306007385254, -2.561053991317749], + [-3.92114520072937, -2.262650966644287], + [-3.535221576690674, -1.020626425743103], + [8.40005874633789, -2.527691125869751], + [-3.335118532180786, -0.988304853439331], + [-0.5585513710975647, -1.05427885055542], + [3.7810986042022705, -4.9963788986206055], + [-0.9091461300849915, -2.0540688037872314], + [-0.8987778425216675, -2.8442015647888184], + [-0.892373263835907, 10.896726608276367], + [6.532726764678955, -2.9915788173675537], + [-3.499946355819702, -1.785685658454895], + [-1.2354289293289185, 11.168726921081543], + [-3.5059494972229004, 5.740326881408691], + [0.584095299243927, -7.302162170410156], + [-1.2549631595611572, 11.620331764221191], + [2.0849618911743164, -4.925463676452637], + [-3.3777058124542236, -0.4212164878845215], + [-1.5244381427764893, 3.4124276638031006], + [-1.7165234088897705, 0.8519878387451172], + [2.5528252124786377, -4.331241607666016], + [-3.5080759525299072, -1.6012016534805298], + [3.4708988666534424, 7.177882194519043], + [6.3420233726501465, 9.225823402404785], + [5.258330821990967, -4.252265453338623], + [2.2958171367645264, -4.176797389984131], + [-0.9060211777687073, 10.974681854248047], + [-2.451211452484131, -0.14914917945861816], + [0.6448554396629333, -8.780139923095703], + [1.5955781936645508, -4.956088542938232], + [7.318296909332275, -1.9215682744979858], + [1.2270312309265137, -5.221039772033691], + [-3.1184940338134766, -1.0403680801391602], + [3.2217519283294678, 5.879955291748047], + [0.6651496887207031, -7.266312599182129], + [2.2362940311431885, 0.7710410356521606], + [-1.4997553825378418, 12.156326293945312], + [-2.507171869277954, 2.6480653285980225], + [9.003615379333496, -2.7767183780670166], + [2.0181729793548584, -5.638087749481201], + [-0.19291174411773682, 8.157133102416992], + [1.2210315465927124, 2.642808675765991], + [5.831859111785889, -1.1314533948898315], + [-3.6074280738830566, -0.8677200078964233], + [0.5659348964691162, -7.360043525695801], + [0.4487530589103699, -5.072772979736328], + [8.507691383361816, -2.4624271392822266], + [2.8552212715148926, -4.4278669357299805], + [7.243212699890137, -3.000182867050171], + [-0.21517574787139893, 8.950273513793945], + [5.314492225646973, -2.3067519664764404], + [2.8666040897369385, 6.273288726806641], + [-3.336354970932007, -0.7908520102500916], + [-4.8206868171691895, -0.920591413974762], + [7.398623466491699, -2.272613048553467], + [5.101939678192139, 8.182701110839844], + [1.7036848068237305, 0.07585662603378296], + [-0.36290276050567627, -1.5149859189987183], + [8.97244930267334, -2.787794589996338], + [-3.5393567085266113, -3.161206007003784], + [-3.781708002090454, 5.37910795211792], + [0.6341455578804016, -8.382615089416504], + [-4.884735107421875, 5.657083511352539], + [0.34667834639549255, 2.6121790409088135], + [-3.8088176250457764, -2.040156602859497], + [-4.524974346160889, -1.2162765264511108], + [2.463421583175659, -4.621960639953613], + [-3.8403983116149902, 3.285529851913452], + [-2.3675026893615723, 1.977382779121399], + [-1.7961918115615845, 1.9803465604782104], + [6.943436145782471, -3.152397871017456], + [-4.934987545013428, 6.350865364074707], + [-1.3246687650680542, 10.929800033569336], + [5.833266735076904, -1.307966709136963], + [-4.202032566070557, -1.6086407899856567], + [0.41872984170913696, -0.7252715229988098], + [-2.529390573501587, -0.5652613639831543], + [7.538074970245361, -2.300947904586792], + [-3.680925130844116, -1.602784276008606], + [2.421233654022217, -4.922811508178711], + [-2.158599853515625, 4.2483062744140625], + [-3.132803201675415, -1.6536917686462402], + [-4.134908199310303, -2.622606039047241], + [0.7424678206443787, -6.286286354064941], + [-4.547885417938232, -5.362288951873779], + [-1.8781986236572266, 0.7957008481025696], + [-2.3570334911346436, -0.6626660227775574], + [-5.5309953689575195, 6.838588237762451], + [2.2671539783477783, 5.915688514709473], + [-1.6954364776611328, 0.9132170081138611], + [-0.5817158222198486, -1.7793735265731812], + [-5.201451301574707, 6.780334949493408], + [-3.973829507827759, -0.9880627393722534], + [-0.24190086126327515, -1.8340418338775635], + [7.6530070304870605, -2.4769792556762695], + [0.7945754528045654, -8.2647123336792], + [-0.9783406853675842, 9.952146530151367], + [-1.7193036079406738, -3.0510637760162354], + [-0.028553582727909088, -3.4456984996795654], + [-4.515624523162842, -3.7964813709259033], + [-1.153063416481018, -2.1021671295166016], + [-4.894298553466797, -3.7413666248321533], + [-1.1113003492355347, 10.368093490600586], + [7.282219886779785, -3.1349575519561768], + [2.344247579574585, -3.8001067638397217], + [-4.948546409606934, -0.9922259449958801], + [0.037975721061229706, -1.3549951314926147], + [-1.734362244606018, 2.1981849670410156], + [-1.3178991079330444, 0.8980673551559448], + [-1.2613996267318726, 11.375265121459961], + [-2.193880558013916, -0.7145645618438721], + [-1.2503582239151, 11.604957580566406], + [-1.5972442626953125, -1.2000337839126587], + [1.3779587745666504, 1.5272881984710693], + [-2.2785158157348633, 2.7723910808563232], + [2.3953821659088135, 0.6764591336250305], + [2.6851279735565186, -4.62914514541626], + [-3.217900514602661, -1.9825650453567505], + [1.3272833824157715, 4.884023189544678], + [-1.9789009094238281, 0.5680190324783325], + [7.73052453994751, -2.4547512531280518], + [0.5975360870361328, -7.98455286026001], + [8.346271514892578, -3.0855400562286377], + [-0.7549542784690857, 9.321706771850586], + [-1.9783976078033447, 2.4257922172546387], + [5.416161060333252, -3.449045419692993], + [-4.504297733306885, 6.2292962074279785], + [-4.589285373687744, 2.4718801975250244], + [1.4497480392456055, -6.8023881912231445], + [7.143737316131592, -2.5401289463043213], + [-1.2234365940093994, 11.12098503112793], + [0.7983382344245911, -8.509397506713867], + [7.4261040687561035, -1.9992214441299438], + [1.8421716690063477, -5.578125], + [-0.5855772495269775, 9.694465637207031], + [0.403297483921051, -7.464660167694092], + [-4.146489143371582, 1.7632505893707275], + [-4.707952976226807, -4.341609954833984], + [-2.388730049133301, -1.3911701440811157], + [-3.976691961288452, -3.003101110458374], + [5.965161323547363, -2.6225430965423584], + [-1.745957374572754, 1.0920573472976685], + [-1.3189361095428467, -2.053276538848877], + [-5.119553089141846, -0.8074267506599426], + [-3.842801570892334, -1.515945315361023], + [-1.336303472518921, -2.009190797805786], + [-3.4106180667877197, -1.341478943824768], + [1.2973690032958984, 7.082665920257568], + [6.383037567138672, -3.8940536975860596], + [-2.5404396057128906, 6.167966365814209], + [6.942553997039795, -3.3694980144500732], + [6.45261812210083, -3.0728068351745605], + [2.8439204692840576, -4.04986572265625], + [-3.4809858798980713, -0.9155187606811523], + [-1.4879710674285889, -0.3922851085662842], + [-4.121591091156006, -2.9694392681121826], + [2.5265800952911377, -4.286067485809326], + [8.038164138793945, -2.77079176902771], + [-4.389327526092529, -0.4190371036529541], + [0.4708111882209778, -6.818840980529785], + [6.446866035461426, -4.897578239440918], + [-1.0446797609329224, 10.76500129699707], + [9.774321556091309, -2.9613771438598633], + [0.036152325570583344, -0.6972037553787231], + [7.122589111328125, -2.953334331512451], + [0.1014823243021965, -4.7119269371032715], + [-2.142874002456665, 2.0799880027770996], + [-5.247906684875488, -0.6832382082939148], + [-1.5579622983932495, 0.5696252584457397], + [6.235476016998291, -4.813883304595947], + [-4.0034332275390625, 5.940858840942383], + [-0.7705454230308533, 10.52157974243164], + [-1.8384983539581299, 1.3071691989898682], + [9.602801322937012, -2.872192144393921], + [2.138709306716919, -5.703454971313477], + [0.010039322078227997, -4.437864303588867], + [-3.6257941722869873, -3.1237363815307617], + [4.810032367706299, -5.646113395690918], + [-3.9717776775360107, -1.3074346780776978], + [-5.705554485321045, -1.0704327821731567], + [-4.133947372436523, -1.1399115324020386], + [-3.2244713306427, -0.9325051307678223], + [-3.7202818393707275, -2.1670424938201904], + [0.3601565361022949, -6.985634803771973], + [-3.5649969577789307, 5.766426086425781], + [-0.31281691789627075, 1.2668784856796265], + [0.4782520532608032, -5.33017110824585], + [0.3690418601036072, -5.894564628601074], + [-3.177887201309204, -1.6149730682373047], + [-3.390976905822754, -0.09329599142074585], + [0.9073981642723083, -7.290125846862793], + [-0.17722368240356445, -3.4850404262542725], + [6.302443027496338, -2.803913116455078], + [-2.709082841873169, 4.812771797180176], + [9.294072151184082, -3.0584304332733154], + [-1.1417685747146606, 0.7076749801635742], + [-0.20221182703971863, -1.2985981702804565], + [0.5698325037956238, -7.8547563552856445], + [0.7387132048606873, -9.052096366882324], + [-2.6006698608398438, 1.7997405529022217], + [-2.6138651371002197, -0.6923593282699585], + [6.572475910186768, -2.671273946762085], + [5.646424770355225, 8.49987506866455], + [-0.837719738483429, 10.544123649597168], + [-5.452002048492432, -1.2449651956558228], + [-1.1437077522277832, 10.809932708740234], + [2.6393797397613525, -4.388955116271973], + [0.27395743131637573, -6.431927680969238], + [-1.795088768005371, -2.4518513679504395], + [-1.9024021625518799, 0.9044944047927856], + [2.6177613735198975, -4.331638813018799], + [-3.5278480052948, 5.525808334350586], + [0.7559900879859924, 5.349218368530273], + [-3.24255108833313, 0.23307102918624878], + [0.7141832113265991, -7.8997273445129395], + [-1.3645429611206055, 11.69061279296875], + [-4.749897480010986, -0.6430426836013794], + [2.346691846847534, 5.27292537689209], + [2.854034185409546, -4.984577178955078], + [-5.05106258392334, -1.6192179918289185], + [-3.3762032985687256, -1.2684084177017212], + [-3.8456966876983643, -2.5172312259674072], + [6.681865215301514, -4.988134384155273], + [0.504858672618866, -4.975454807281494], + [0.7831799983978271, -6.498054027557373], + [-3.9814059734344482, 6.609191417694092], + [-3.720266103744507, -2.019489288330078], + [-1.074846625328064, 10.72052001953125], + [-3.3524086475372314, -1.0337634086608887], + [-1.2351149320602417, -1.7801780700683594], + [8.385260581970215, -2.609518527984619], + [2.820385694503784, 5.87180233001709], + [-3.611957311630249, 5.227497100830078], + [2.819556951522827, -4.4102325439453125], + [-1.6217042207717896, 13.116495132446289], + [-4.434329509735107, 5.736018180847168], + [-3.44748854637146, -1.0135717391967773], + [1.8072466850280762, 4.340534210205078], + [-1.2365131378173828, 8.460405349731445], + [1.651315689086914, -4.9313201904296875], + [-3.26239275932312, -0.5128657221794128], + [0.18493568897247314, -5.276422500610352], + [1.446712613105774, -5.100368022918701], + [0.9273989796638489, -6.281468868255615], + [-2.4398014545440674, -0.8637111783027649], + [-1.5340161323547363, 2.151794672012329], + [-0.6527177691459656, 10.307281494140625], + [0.8271497488021851, -7.670527458190918], + [-0.09596849232912064, -0.7965381145477295], + [-1.185987114906311, 11.460723876953125], + [-3.451347589492798, -1.2227014303207397], + [0.7960821390151978, -0.3122643232345581], + [2.0583741664886475, 5.992764472961426], + [-1.258075475692749, -3.4424004554748535], + [-2.189706325531006, 5.599374771118164], + [6.133200168609619, -3.242738962173462], + [3.1806633472442627, -4.207488059997559], + [-4.257150650024414, 4.180074214935303], + [8.061357498168945, -2.3605988025665283], + [-3.182518482208252, -0.978381335735321], + [0.4684932231903076, -7.185602188110352], + [-2.8328630924224854, -1.4179755449295044], + [5.886864185333252, -1.3799031972885132], + [0.837594747543335, -7.225857734680176], + [-3.8779523372650146, -1.217707633972168], + [4.8294596672058105, -3.094050645828247], + [0.6656047105789185, -6.946995258331299], + [-3.908125638961792, -1.2117841243743896], + [-0.2886877655982971, 9.56433391571045], + [-3.8372387886047363, -0.9354900121688843], + [6.693593502044678, -2.3817527294158936], + [-4.105672359466553, -1.3984246253967285], + [-3.7646443843841553, -3.3905692100524902], + [0.6101052761077881, -7.360281944274902], + [-2.6306188106536865, 2.6349799633026123], + [1.9623372554779053, 5.321789741516113], + [0.5163813233375549, -5.913051605224609], + [2.318699836730957, 6.21068000793457], + [-3.519707202911377, -1.1090326309204102], + [-2.705821990966797, -0.11303985118865967], + [-5.722273349761963, -0.9713488221168518], + [0.4738953113555908, -5.694329261779785], + [0.6997212767601013, -8.76611042022705], + [0.4283665418624878, -6.662821292877197], + [2.0276644229888916, 5.75114631652832], + [4.753663539886475, -3.114125967025757], + [0.4183059334754944, -6.858163833618164], + [1.0853207111358643, -0.07147875428199768], + [-0.4778822660446167, 9.612668991088867], + [-1.7828168869018555, 1.2223219871520996], + [0.9000179171562195, -8.069372177124023], + [-4.255801677703857, -2.909592390060425], + [2.2668306827545166, 6.034679412841797], + [-3.5088016986846924, -0.6158838272094727], + [2.6401898860931396, -4.75563907623291], + [4.335890293121338, 7.290911674499512], + [0.48240137100219727, -6.464895248413086], + [-1.231545329093933, 0.3346448540687561], + [5.83713436126709, -3.659780740737915], + [1.9656338691711426, 5.351108551025391], + [0.4964219331741333, -7.329411506652832], + [0.4486885070800781, -6.931818008422852], + [-5.000755786895752, 5.8347272872924805], + [3.844583749771118, 6.3827714920043945], + [0.4128188490867615, -6.831974029541016], + [1.5615445375442505, -4.357695579528809], + [-4.121734142303467, -1.2421551942825317], + [-0.9225367903709412, 10.570840835571289], + [-1.612034797668457, 1.2354319095611572], + [2.4450161457061768, 4.775795936584473], + [-1.5125659704208374, 1.6156761646270752], + [-4.281023025512695, -1.4624027013778687], + [-2.8712680339813232, -4.617559432983398], + [8.387659072875977, -3.241072416305542], + [0.06902166455984116, -0.9400198459625244], + [-4.708887577056885, 6.863119125366211], + [-0.7295190691947937, 10.251134872436523], + [0.28880107402801514, -6.305150985717773], + [-2.9640729427337646, -3.0577609539031982], + [-3.5036661624908447, -0.9532010555267334], + [3.070099115371704, 6.161140441894531], + [2.0068647861480713, 3.381652355194092], + [1.0674118995666504, 4.415843486785889], + [-3.534161329269409, -1.021538496017456], + [0.5878181457519531, -5.274781227111816], + [-3.9055235385894775, -1.0459997653961182], + [0.14137002825737, -5.600894927978516], + [-0.6629592180252075, 10.489458084106445], + [-0.6221610903739929, 10.082746505737305], + [-0.7385874390602112, 9.734686851501465], + [-1.0184733867645264, 10.250953674316406], + [-2.034050226211548, 1.0430850982666016], + [-0.9512807726860046, 9.856184959411621], + [-1.1455713510513306, 10.966733932495117], + [0.7871680855751038, -6.372806072235107], + [0.38699227571487427, -0.9867066740989685], + [7.701382637023926, -3.3276805877685547], + [9.619471549987793, -2.96875262260437], + [-0.3456580638885498, -3.3840041160583496], + [-0.4168640971183777, 8.809955596923828], + [2.5063724517822266, 4.673949241638184], + [8.644824981689453, -2.6446259021759033], + [6.475988388061523, -1.8650271892547607], + [-0.7951834797859192, -0.24038955569267273], + [0.9664461016654968, -4.748773097991943], + [-1.328856348991394, 11.994779586791992], + [-3.6226823329925537, 5.736810684204102], + [1.3724466562271118, -6.290563583374023], + [-3.843355417251587, -3.3654186725616455], + [7.026179790496826, -3.390467405319214], + [-0.15707409381866455, -3.266096353530884], + [-5.6423115730285645, 5.320823669433594], + [0.12929019331932068, -5.60400915145874], + [2.1947011947631836, -5.782098770141602], + [-0.5954782962799072, 9.75709342956543], + [1.7941486835479736, 3.2592060565948486], + [2.4927988052368164, 5.940398216247559], + [2.729161024093628, -4.655801296234131], + [2.9401988983154297, -4.716855049133301], + [-2.1949079036712646, -1.268875241279602], + [2.9800193309783936, -4.742561340332031], + [-1.3446178436279297, 12.1331787109375], + [2.160794496536255, -4.078873157501221], + [-3.993346691131592, -1.6828628778457642], + [1.6855661869049072, -4.599669456481934], + [0.8199914693832397, -8.088424682617188], + [0.3616533875465393, -5.419706344604492], + [-4.938513278961182, 7.23943567276001], + [2.887082099914551, -4.315594673156738], + [-3.981257200241089, -1.6050574779510498], + [0.6388564109802246, -8.307775497436523], + [-1.3915435075759888, 1.6655620336532593], + [-1.4607164859771729, 12.081724166870117], + [0.4121958613395691, -7.442950248718262], + [8.83658504486084, -3.227886438369751], + [-3.8080623149871826, -1.8269075155258179], + [-3.945451498031616, -2.1107676029205322], + [-1.9670041799545288, 1.9395917654037476], + [-5.068442344665527, 4.690696716308594], + [-0.21372562646865845, -1.9566997289657593], + [-4.939467906951904, -0.9260154366493225], + [-3.330120801925659, -2.1455132961273193], + [-1.0968165397644043, 10.91340446472168], + [6.093441963195801, -4.404892921447754], + [2.4592838287353516, -4.066216468811035], + [0.5802904963493347, -8.450325965881348], + [-3.1363465785980225, -2.877760887145996], + [0.6780773401260376, -5.3212480545043945], + [-1.6566576957702637, -1.8216710090637207], + [0.6518732905387878, -6.864253997802734], + [-3.0494673252105713, -3.2649147510528564], + [-4.785641193389893, 7.812016487121582], + [-1.3486590385437012, 11.882122039794922], + [9.611988067626953, -2.881183385848999], + [0.774807333946228, 0.6653903722763062], + [0.707344114780426, -9.015960693359375], + [-3.2988080978393555, -2.247718095779419], + [-3.402944326400757, -4.024240016937256], + [5.924376964569092, -1.6134144067764282], + [2.9106571674346924, -4.808545112609863], + [-4.6855268478393555, -1.140079140663147], + [2.877598524093628, -4.997159481048584], + [-0.9403133988380432, 10.78165054321289], + [-1.47123384475708, 5.340482711791992], + [2.85614013671875, -4.3183417320251465], + [4.846540927886963, 7.991072654724121], + [2.3568742275238037, 5.7318115234375], + [1.10536789894104, 5.118817329406738], + [-4.748388290405273, 4.825757026672363], + [-0.21293139457702637, 7.876009941101074], + [-3.162280559539795, -1.0518049001693726], + [2.8214590549468994, -6.266149044036865], + [2.502725124359131, 6.458643436431885], + [-0.26858121156692505, -1.4429594278335571], + [0.6143664717674255, -8.083450317382812], + [-1.717644214630127, 1.8719590902328491], + [1.227811336517334, -5.723841667175293], + [-1.098792552947998, 11.381245613098145], + [8.311785697937012, -2.6727826595306396], + [-6.294860363006592, -1.0831023454666138], + [2.991180658340454, 6.9851226806640625], + [0.2594490647315979, 5.37863302230835], + [5.840848445892334, -2.7893970012664795], + [-3.634676218032837, -1.3761078119277954], + [-4.405711650848389, -0.9393978118896484], + [-2.0207443237304688, 2.390238046646118], + [-1.1149232387542725, 10.24750804901123], + [0.13551455736160278, 7.8523640632629395], + [-0.8894729018211365, 10.425760269165039], + [-1.7278342247009277, 1.3014750480651855], + [-0.9989548325538635, -0.729444146156311], + [-3.026637077331543, 6.9851226806640625], + [0.6086857914924622, -8.219785690307617], + [-5.1321539878845215, 7.772042274475098], + [-4.0980119705200195, -1.3605151176452637], + [2.3582379817962646, -3.9116950035095215], + [-3.5390052795410156, -1.227284550666809], + [0.637495219707489, -8.103656768798828], + [-3.583211898803711, 5.857933044433594], + [7.520354747772217, -2.2050399780273438], + [-1.1421655416488647, 10.753162384033203], + [3.7080132961273193, 0.997623085975647], + [0.5853521823883057, -0.41562768816947937], + [-1.356557011604309, 11.18844985961914], + [-0.7524516582489014, 0.1102600246667862], + [1.950589895248413, 0.33546626567840576], + [-5.068678379058838, 6.710818290710449], + [-3.9885149002075195, -1.7001012563705444], + [-3.901784658432007, -0.8640451431274414], + [-3.5682156085968018, -2.682072401046753], + [-3.3405539989471436, -1.454431176185608], + [1.6376115083694458, 0.2028118371963501], + [-2.904420852661133, -1.367789387702942], + [6.227700233459473, -4.8054046630859375], + [0.6210641860961914, -6.445659637451172], + [-2.21964430809021, 2.167353868484497], + [-4.027761459350586, -2.7937285900115967], + [-2.957045316696167, 5.57796573638916], + [-1.5453057289123535, 12.960427284240723], + [-1.3390103578567505, 4.553402423858643], + [1.9459264278411865, 1.548374056816101], + [0.5545855760574341, -5.012975692749023], + [-1.8945131301879883, 0.00021272525191307068], + [-3.499762773513794, -0.9471056461334229], + [0.19310247898101807, -5.4025349617004395], + [0.7014444470405579, -8.621713638305664], + [-1.165390133857727, 11.284265518188477], + [-3.193568229675293, -1.0554357767105103], + [-2.9581239223480225, -1.002640962600708], + [8.728168487548828, -2.8171699047088623], + [-1.5067700147628784, 12.607151985168457], + [-2.5432050228118896, -0.03227335587143898], + [2.121938943862915, -4.338344097137451], + [1.353076457977295, 5.438584327697754], + [2.910945415496826, -4.736743927001953], + [-0.3123866021633148, 3.7873940467834473], + [2.6258697509765625, -4.638847351074219], + [-1.8254096508026123, 6.3707170486450195], + [7.9776129722595215, -2.7202792167663574], + [-4.356858253479004, 5.800911903381348], + [-3.9752376079559326, -4.40501594543457], + [-4.821426868438721, 5.630653381347656], + [-0.38652241230010986, -1.3007324934005737], + [-0.7164859175682068, -1.3993502855300903], + [-4.110077381134033, -1.9594076871871948], + [-5.369361400604248, -5.943122863769531], + [-0.16559433937072754, -1.119759440422058], + [5.929022312164307, -2.9453933238983154], + [2.6830010414123535, -4.420711040496826], + [-2.6514878273010254, -1.7890124320983887], + [-4.165360927581787, -1.5668737888336182], + [-5.428823471069336, 7.017734527587891], + [-1.2127056121826172, 1.510719656944275], + [-5.7706403732299805, 7.360992431640625], + [1.1916120052337646, 3.798330545425415], + [-0.057398952543735504, -1.940595030784607], + [7.150394916534424, -3.013688325881958], + [-0.8580769896507263, 9.673120498657227], + [0.5628626942634583, -7.9233012199401855], + [0.5625000596046448, -7.061245918273926], + [-4.137279033660889, -1.4738863706588745], + [-4.9444098472595215, 2.8730108737945557], + [-1.3476238250732422, 12.284713745117188], + [-2.954110622406006, -0.7078163027763367], + [-1.9973875284194946, 2.352663993835449], + [-3.5181548595428467, 3.980278730392456], + [2.3684542179107666, 4.36260986328125], + [-3.736325979232788, -1.3408972024917603], + [-4.12035608291626, -1.7539438009262085], + [3.2674190998077393, 6.416309356689453], + [-0.9100930094718933, 10.551992416381836], + [-4.145235538482666, 5.984338760375977], + [2.3791391849517822, -5.332455158233643], + [1.0044697523117065, -4.222868919372559], + [0.6351926326751709, -7.906265735626221], + [8.541093826293945, -2.5375542640686035], + [-4.3089823722839355, -2.315171003341675], + [-1.196033239364624, 1.6528167724609375], + [0.2994512915611267, -0.6414647102355957], + [-3.9667553901672363, 4.09922456741333], + [0.07747190445661545, -1.0787980556488037], + [-1.8244116306304932, 1.740162968635559], + [-0.38306719064712524, 10.134028434753418], + [0.5148271918296814, -5.0410075187683105], + [-1.9765393733978271, 2.407029390335083], + [-3.5657739639282227, -2.060114622116089], + [0.10660436004400253, -4.592260360717773], + [-1.040969729423523, 10.836599349975586], + [0.9992974400520325, 7.352861404418945], + [0.241010844707489, 5.891550064086914], + [1.801481008529663, 2.112273693084717], + [-4.72649621963501, 6.1338396072387695], + [-0.053465671837329865, -4.135950088500977], + [-0.9021030068397522, 10.622480392456055], + [0.4985388517379761, -7.160216808319092], + [9.670584678649902, -2.9186031818389893], + [2.4098880290985107, 4.787631988525391], + [-2.2728869915008545, 2.2173044681549072], + [3.025228261947632, -4.885101318359375], + [-1.8516592979431152, 1.965298056602478], + [3.145953416824341, -4.881378650665283], + [-1.0385875701904297, -1.8900412321090698], + [-1.5263926982879639, 12.571096420288086], + [2.077199697494507, -7.4778242111206055], + [0.635369062423706, -7.265561580657959], + [-3.9465770721435547, -1.1011065244674683], + [-1.9482372999191284, 0.7283778786659241], + [0.7853885293006897, -6.782005310058594], + [3.254246473312378, -5.031231880187988], + [8.26156234741211, -3.0946805477142334], + [3.205113172531128, 6.495386123657227], + [-1.470411777496338, 12.533113479614258], + [3.187591791152954, 6.383246898651123], + [0.6937441229820251, -8.494714736938477], + [6.99772310256958, -2.6358282566070557], + [-2.03691029548645, 2.290489673614502], + [2.6948134899139404, -4.314501762390137], + [1.8498345613479614, 0.6738296747207642], + [-4.925190448760986, -0.6574273705482483], + [2.7847962379455566, -4.448124408721924], + [2.8268020153045654, -4.6180524826049805], + [-3.1257529258728027, -1.116019368171692], + [-0.4849998354911804, -2.732055187225342], + [-1.606424331665039, -0.9663693904876709], + [-1.0945285558700562, 10.874188423156738], + [-0.27467209100723267, 8.749734878540039], + [-3.2575771808624268, -2.2867634296417236], + [-4.453826904296875, -3.5443930625915527], + [4.10420036315918, 7.107636451721191], + [1.8747859001159668, 0.7161142826080322], + [-5.178127288818359, 7.066425323486328], + [0.893720805644989, -0.0016640014946460724], + [-2.5507805347442627, 2.6444637775421143], + [5.713171482086182, -1.2820303440093994], + [2.1666154861450195, -4.948819637298584], + [2.3813960552215576, 6.167435169219971], + [1.4472261667251587, 4.077182292938232], + [0.5407587289810181, -7.198114395141602], + [7.069089889526367, -2.3166615962982178], + [2.6893599033355713, -4.323064804077148], + [-4.078484535217285, 6.51832389831543], + [-3.569783926010132, -0.5750909447669983], + [0.6750773787498474, -6.793405532836914], + [2.8071749210357666, -4.933341026306152], + [1.703857183456421, 0.3528956472873688], + [1.097043752670288, -6.322507858276367], + [1.7192010879516602, 5.702821731567383], + [-4.32180643081665, -1.9277905225753784], + [1.240370512008667, 3.0524885654449463], + [1.750515341758728, 4.821367263793945], + [3.331050395965576, 6.297370910644531], + [-0.5922799110412598, 8.858492851257324], + [-4.6474223136901855, 6.355756759643555], + [-1.9344775676727295, 1.70281982421875], + [0.8185374736785889, 4.9029741287231445], + [-5.230648994445801, 5.411676406860352], + [-1.867825984954834, 1.8124828338623047], + [5.821739673614502, -4.7011895179748535], + [-3.6298434734344482, -1.468799114227295], + [-3.1182169914245605, -1.160028100013733], + [-0.6597951650619507, 10.331942558288574], + [-3.263765573501587, -1.0598076581954956], + [2.473191738128662, 5.824173927307129], + [-1.8768070936203003, 0.982684850692749], + [2.355762243270874, 1.0004671812057495], + [0.5038589239120483, -6.757617473602295], + [1.6592562198638916, -4.6989617347717285], + [-4.029184341430664, 5.202578544616699], + [-1.4555319547653198, 0.9749809503555298], + [-4.045682430267334, -0.8971935510635376], + [-0.05035892874002457, -4.371067047119141], + [-0.2460489273071289, 8.855627059936523], + [7.246423244476318, -2.8123080730438232], + [-1.034199833869934, 11.077335357666016], + [-5.22210693359375, 5.999402046203613], + [5.5464959144592285, -3.2918074131011963], + [-4.271710395812988, 6.411467552185059], + [-4.239017009735107, -2.53434157371521], + [-4.015213489532471, -1.1541162729263306], + [8.281532287597656, -2.6534621715545654], + [-1.3030173778533936, -0.20103353261947632], + [-1.981197476387024, 2.5892410278320312], + [-1.4438384771347046, 12.17857837677002], + [2.7520411014556885, -4.9232282638549805], + [-4.530883312225342, -1.1073312759399414], + [-3.3615596294403076, -0.8822120428085327], + [0.5835081338882446, 4.738827705383301], + [1.2020649909973145, 2.7277941703796387], + [-1.2090628147125244, 11.149560928344727], + [-3.0775222778320312, 5.504120826721191], + [5.8620123863220215, -1.537542462348938], + [-3.002373456954956, 1.085464358329773], + [0.5421163439750671, 3.3917901515960693], + [2.5193541049957275, -4.153449058532715], + [5.760762691497803, -1.3728911876678467], + [2.7245256900787354, -4.511646270751953], + [-1.839959979057312, 1.846159815788269], + [1.5554544925689697, 4.892116546630859], + [-3.266355037689209, -1.72246253490448], + [-0.9970580339431763, 5.613803863525391], + [-0.9040759205818176, 10.436979293823242], + [-0.16518256068229675, -1.2358049154281616], + [-1.8830254077911377, 1.911686658859253], + [-3.639730930328369, -1.244036316871643], + [-1.3591631650924683, 1.7855186462402344], + [0.6987091302871704, -7.155908107757568], + [-3.507728338241577, -2.848738670349121], + [-3.737398862838745, -2.348565101623535], + [-2.9125072956085205, 6.606723785400391], + [-1.1714879274368286, 10.93020248413086], + [8.457940101623535, -3.032397747039795], + [2.437241315841675, -5.3542046546936035], + [3.9658825397491455, 7.05031156539917], + [-3.5077874660491943, -1.2147400379180908], + [6.411243915557861, -1.9243918657302856], + [-0.5104898810386658, -2.1953420639038086], + [1.3589690923690796, -1.1283042430877686], + [-2.618743896484375, -1.674742341041565], + [0.8349099159240723, 4.00543737411499], + [8.340802192687988, -2.6464014053344727], + [0.8775729537010193, 0.017121072858572006], + [1.4338397979736328, 4.111743927001953], + [-0.925734281539917, -0.9030169248580933], + [8.371685981750488, -3.071017026901245], + [-0.9773231148719788, 10.479793548583984], + [-2.0480754375457764, 2.9395406246185303], + [6.880459785461426, -3.236565113067627], + [-3.6243886947631836, -1.7092905044555664], + [0.4670582413673401, -6.508209228515625], + [2.2680351734161377, -5.043091773986816], + [-5.201659679412842, 6.921320915222168], + [-3.880230188369751, -1.690442442893982], + [-1.1293518543243408, -0.519421398639679], + [-0.7122944593429565, 9.867256164550781], + [-4.979320049285889, 6.38616418838501], + [-4.487114429473877, -3.1998345851898193], + [-1.5057191848754883, 1.2864354848861694], + [1.5350923538208008, -0.07268375158309937], + [0.03700565546751022, -1.0674424171447754], + [2.3041751384735107, 6.240691184997559], + [-0.8858041763305664, 9.768832206726074], + [0.5471635460853577, -7.849493026733398], + [3.714578628540039, -4.1737518310546875], + [1.0037167072296143, -5.805490493774414], + [-0.6367340683937073, 9.761523246765137], + [0.599457859992981, -8.354072570800781], + [0.17033159732818604, 6.952785015106201], + [7.752854347229004, -2.9762308597564697], + [-4.35243558883667, -2.0312893390655518], + [-3.9562313556671143, 6.342594146728516], + [-0.7279778122901917, 10.053431510925293], + [-0.8375556468963623, 8.619972229003906], + [-3.178053617477417, -1.1404348611831665], + [-0.6130681037902832, 9.706838607788086], + [3.09256911277771, 6.427062034606934], + [-5.840405464172363, 6.221970081329346], + [2.965750217437744, 5.894740581512451], + [0.8794928789138794, -5.324580192565918], + [0.49991893768310547, -6.568448066711426], + [-0.657240092754364, 9.876813888549805], + [-3.7113571166992188, -1.5512067079544067], + [-6.530580043792725, -0.9511507153511047], + [-2.0302319526672363, 2.6559109687805176], + [0.176067054271698, -5.512140274047852], + [-2.1059694290161133, -0.038289908319711685], + [1.6953778266906738, -4.405666351318359], + [-1.0113197565078735, 10.998001098632812], + [1.2098058462142944, 5.033900260925293], + [-4.55033016204834, -4.033212661743164], + [-0.877006471157074, 10.572610855102539], + [-1.8694605827331543, 1.147159457206726], + [2.416170597076416, 6.275262832641602], + [0.6299115419387817, -7.784796237945557], + [0.22768789529800415, -5.29315185546875], + [-3.7756292819976807, 5.7272562980651855], + [-4.869637489318848, -3.6400935649871826], + [-4.540659427642822, -0.5563215017318726], + [-1.030210256576538, 11.285585403442383], + [0.06645160168409348, -4.5645060539245605], + [2.411473274230957, -5.547710418701172], + [8.502202987670898, -3.005943536758423], + [-1.3829046487808228, -1.263197898864746], + [-3.1267223358154297, -3.303238868713379], + [2.0641212463378906, -5.212766170501709], + [0.7512196898460388, -5.843078136444092], + [-0.42724764347076416, -0.9102855920791626], + [0.8704254031181335, -5.326230049133301], + [1.406731367111206, 0.28851014375686646], + [-4.815257549285889, 3.1997663974761963], + [-3.900132894515991, -1.2422902584075928], + [1.1973626613616943, -5.742145538330078], + [2.3189783096313477, 5.530925750732422], + [2.95661997795105, -4.485444068908691], + [-1.8155972957611084, 2.3703343868255615], + [-2.9704363346099854, -1.071637749671936], + [1.4362914562225342, -5.9291462898254395], + [-3.5028512477874756, -1.2191754579544067], + [2.859766721725464, -4.703060150146484], + [7.973811626434326, -3.4012374877929688], + [7.5213847160339355, -2.4319915771484375], + [-2.393873929977417, -2.4772233963012695], + [-4.915720462799072, 4.337167739868164], + [-3.79839825630188, -2.9729816913604736], + [-3.381383180618286, -1.4300037622451782], + [5.913092136383057, -1.478493571281433], + [9.093144416809082, -2.7953896522521973], + [0.21802455186843872, -0.8254209160804749], + [8.895376205444336, -2.7801811695098877], + [-0.1658766269683838, 8.651300430297852], + [7.97285795211792, -2.451800584793091], + [-2.9782347679138184, -1.133900761604309], + [1.1442241668701172, -5.2933526039123535], + [0.47970205545425415, -3.3970909118652344], + [-0.40657830238342285, 9.5051851272583], + [-3.0726208686828613, -0.6419214010238647], + [0.694118082523346, -5.352214336395264], + [-3.675532102584839, -1.2186440229415894], + [-1.274463176727295, 10.484297752380371], + [-3.654080867767334, 2.7970292568206787], + [0.7189152836799622, -0.6260054111480713], + [-3.2145304679870605, -1.1817973852157593], + [-0.0805525854229927, -4.53110408782959], + [-4.0819010734558105, -0.7178760766983032], + [2.1929545402526855, 0.7278265953063965], + [0.615336537361145, -8.803717613220215], + [-3.282977819442749, -1.2432048320770264], + [5.946582794189453, -1.6335303783416748], + [2.0439183712005615, 0.4852110743522644], + [-4.452641010284424, 6.725319862365723], + [2.4287025928497314, 5.9346160888671875], + [-2.002603054046631, 2.323277235031128], + [8.481026649475098, -2.801971197128296], + [2.0454509258270264, 3.179020643234253], + [-2.1578738689422607, 2.0552964210510254], + [-3.944391965866089, -0.9424072504043579], + [-1.1050918102264404, 1.191461205482483], + [-3.5910708904266357, -4.628906726837158], + [-0.23383399844169617, -1.254604458808899], + [5.721324443817139, -2.883077383041382], + [6.764503002166748, -2.3117592334747314], + [-1.7753283977508545, 0.3013341724872589], + [-4.231150150299072, -1.6563698053359985], + [-2.8645317554473877, 1.7156503200531006], + [-1.1867560148239136, 10.377864837646484], + [-1.4265546798706055, 2.254969835281372], + [2.669992208480835, -4.482666492462158], + [3.029327154159546, -4.675414562225342], + [2.537733554840088, -4.1987199783325195], + [-3.738298177719116, 1.4430965185165405], + [7.677754878997803, -2.8373677730560303], + [8.901175498962402, -2.883272647857666], + [2.8980963230133057, -4.858250141143799], + [-1.3515911102294922, 1.5439856052398682], + [0.2659921646118164, -7.036564826965332], + [-1.124348759651184, 10.387102127075195], + [-3.7112653255462646, -2.380884885787964], + [9.123286247253418, -2.766545057296753], + [-0.898114025592804, 10.667045593261719], + [-3.050612211227417, -1.1829795837402344], + [-0.8187061548233032, 9.93149185180664], + [-3.9739739894866943, -1.2190014123916626], + [0.5881617069244385, -6.023887634277344], + [6.532460689544678, -2.9661262035369873], + [5.159697532653809, 8.105615615844727], + [-1.21098792552948, 11.08453369140625], + [-4.155026435852051, -2.8526268005371094], + [1.3722120523452759, 5.438460350036621], + [2.907135248184204, 5.689886569976807], + [-1.3547824621200562, 0.9989807605743408], + [-3.91646409034729, -0.8504437208175659], + [2.948453664779663, -4.698779106140137], + [0.2872384786605835, -5.902800559997559], + [-0.368461549282074, 9.173532485961914], + [6.823312759399414, -4.513698577880859], + [1.8141911029815674, 4.631786346435547], + [-3.473198175430298, -2.25954270362854], + [2.0020194053649902, 6.202983379364014], + [-0.7991325259208679, -1.1026159524917603], + [-0.8520007729530334, 8.775923728942871], + [0.6928098797798157, -4.580365180969238], + [-3.9804251194000244, 0.5583567023277283], + [5.846850872039795, -2.851604700088501], + [0.26510727405548096, -6.2091779708862305], + [-2.0245370864868164, 0.5811895728111267], + [2.676865816116333, -4.455753803253174], + [-4.976075649261475, 6.6556477546691895], + [-2.1917104721069336, 5.658639907836914], + [4.740487575531006, 7.548306465148926], + [4.456587791442871, -0.48373645544052124], + [-4.230932712554932, -2.978309392929077], + [-3.4245941638946533, -1.093531847000122], + [0.7497134208679199, -7.221700191497803], + [0.7089495658874512, -8.673892974853516], + [0.6666147708892822, -5.5009050369262695], + [-4.701781749725342, 2.613835334777832], + [-1.4274513721466064, 11.534246444702148], + [7.311173915863037, -2.214108943939209], + [-0.3603092432022095, 9.51045036315918], + [-4.404153823852539, 6.376864433288574], + [0.650018036365509, -4.444363117218018], + [1.6476048231124878, -5.539459705352783], + [2.4712212085723877, -5.028575897216797], + [0.22170096635818481, -6.258181571960449], + [-3.645740032196045, -1.2728760242462158], + [2.297218084335327, 0.8482171297073364], + [-4.352348327636719, -1.0657563209533691], + [3.1656172275543213, -5.241725921630859], + [-1.272787094116211, 0.8528788089752197], + [-2.0345308780670166, 2.613525629043579], + [-4.10467529296875, 5.298947334289551], + [6.021341800689697, -2.8976783752441406], + [5.563027858734131, -5.162667274475098], + [-1.1813807487487793, 11.040803909301758], + [0.15491259098052979, -4.92680549621582], + [0.5255917906761169, -5.855414390563965], + [-2.3231804370880127, 2.3176209926605225], + [-1.3136900663375854, 0.608106255531311], + [-3.3942298889160156, -0.9500393867492676], + [-0.5677860975265503, 5.392189979553223], + [-0.9340438842773438, 10.32669448852539], + [6.023203372955322, -1.190682291984558], + [0.492026150226593, -6.604396820068359], + [-0.6473858952522278, 8.874286651611328], + [-1.9891862869262695, 1.6194510459899902], + [1.6457966566085815, 1.8364551067352295], + [0.6345893144607544, -6.728122711181641], + [1.422025203704834, 4.327392578125], + [3.820631265640259, 6.699058532714844], + [-2.2089145183563232, 5.711255073547363], + [-2.9918806552886963, 0.1570643186569214], + [-3.9573328495025635, -1.5060385465621948], + [0.7509903907775879, -4.896255970001221], + [0.0027855560183525085, -3.1519007682800293], + [0.18202048540115356, -6.422603607177734], + [2.8612377643585205, -5.042657375335693], + [0.41731131076812744, -6.244267463684082], + [2.0963191986083984, 5.569647789001465], + [-2.625401258468628, 3.745885133743286], + [-0.9043627381324768, -1.7542325258255005], + [2.5331737995147705, -4.582659721374512], + [-1.2310642004013062, 10.977778434753418], + [-4.66146993637085, 6.763733863830566], + [-0.3149208426475525, 8.972447395324707], + [3.003730535507202, -4.915876388549805], + [-0.14365708827972412, -1.9849199056625366], + [4.937366008758545, 7.866700649261475], + [8.828763961791992, -2.861015558242798], + [-5.1174235343933105, -1.101709008216858], + [-1.9461238384246826, -0.36953043937683105], + [7.596998691558838, -2.2822349071502686], + [0.31178125739097595, -4.559154510498047], + [0.626725971698761, -8.252974510192871], + [8.846792221069336, -2.784076452255249], + [-1.0990681648254395, 10.79496955871582], + [1.5198957920074463, 0.3884904384613037], + [-3.30815052986145, -1.4272618293762207], + [2.6853525638580322, 5.69711971282959], + [7.945897579193115, -3.0594112873077393], + [-3.4872360229492188, -1.065850853919983], + [-3.56178617477417, -2.297980546951294], + [2.97519588470459, -4.6241350173950195], + [-0.677375853061676, 10.110629081726074], + [-5.22866678237915, 5.036777496337891], + [0.7334737181663513, -3.7649028301239014], + [7.690154075622559, -2.2879698276519775], + [2.872943878173828, -4.147558689117432], + [-3.924135208129883, 6.176802635192871], + [1.2604626417160034, 9.071616172790527], + [2.7632362842559814, 6.80526065826416], + [6.6110734939575195, -2.782578229904175], + [0.514390230178833, -7.805854320526123], + [-4.781879901885986, -1.1484562158584595], + [-3.627082586288452, -1.0312565565109253], + [0.41846004128456116, -5.094436168670654], + [-5.796404838562012, -1.0540417432785034], + [1.857168197631836, 0.6706804633140564], + [2.1409223079681396, 5.238521575927734], + [0.34846705198287964, -0.37036243081092834], + [0.8937402367591858, -0.08357641100883484], + [0.7467875480651855, -5.870329856872559], + [2.7228496074676514, -4.385387420654297], + [2.8160011768341064, -4.697127342224121], + [-3.396827220916748, -1.1321280002593994], + [-4.139137268066406, -1.8958362340927124], + [-3.8351120948791504, -1.4671356678009033], + [-3.72933030128479, -0.7225632667541504], + [0.7185074687004089, 5.132811546325684], + [2.3290560245513916, 1.0675098896026611], + [1.078385829925537, -5.969734191894531], + [7.341674327850342, -2.232815980911255], + [5.116231441497803, -2.970618486404419], + [7.765289306640625, -3.692915678024292], + [-4.132725238800049, 4.485231876373291], + [1.4676450490951538, 1.9200557470321655], + [-3.7204020023345947, 5.927340507507324], + [-4.512270450592041, 5.904724597930908], + [-3.0483334064483643, 3.3768746852874756], + [-0.46187907457351685, 9.344820022583008], + [4.832468032836914, 7.664783954620361], + [-0.7517737746238708, 11.974739074707031], + [0.5047897696495056, -6.323065757751465], + [2.7466888427734375, -4.258885860443115], + [4.6989521980285645, 7.824438571929932], + [4.388920783996582, 7.288044452667236], + [-5.8156657218933105, 7.3449296951293945], + [2.7486629486083984, -4.298281192779541], + [-4.074517250061035, -1.513297438621521], + [2.578350782394409, -4.818596839904785], + [-0.5933733582496643, -3.473966360092163], + [2.0248677730560303, 0.720970869064331], + [1.9594852924346924, 5.908687591552734], + [-5.170314311981201, -4.382356643676758], + [0.5782844424247742, -5.41335391998291], + [-5.250014305114746, -0.8720664978027344], + [-0.5416465401649475, 10.292304992675781], + [2.6591734886169434, -4.387903213500977], + [-5.631805419921875, 7.845334053039551], + [0.5960131287574768, -7.728254318237305], + [5.409698486328125, 8.305118560791016], + [1.433179497718811, -4.682202339172363], + [1.3996230363845825, 3.3065059185028076], + [-1.0953948497772217, 11.395096778869629], + [0.08444871753454208, -4.600483417510986], + [-2.394171953201294, -1.2318567037582397], + [-1.089315414428711, 10.786303520202637], + [-0.9248197674751282, 10.183677673339844], + [-0.934422492980957, -2.030872106552124], + [-3.489875555038452, -1.014660358428955], + [-4.1823296546936035, -2.7908191680908203], + [0.8874452114105225, -7.261388778686523], + [1.9161385297775269, 6.261658191680908], + [-1.5426442623138428, 1.4650977849960327], + [1.1257010698318481, -4.749917984008789], + [-1.9991393089294434, 1.4673619270324707], + [-2.545480966567993, -1.351278305053711], + [0.5644395351409912, -5.325900077819824], + [2.4103124141693115, -4.652951717376709], + [7.0644707679748535, -3.652742385864258], + [-2.872889280319214, -0.6802778244018555], + [0.5512858033180237, -7.5423688888549805], + [4.23779821395874, 6.993658065795898], + [-1.8650470972061157, 1.7263261079788208], + [1.3647475242614746, -4.558302879333496], + [-1.5699747800827026, 1.3459745645523071], + [-1.2612699270248413, 11.446343421936035], + [-0.5542771220207214, 10.293460845947266], + [0.6870347261428833, -7.3321380615234375], + [-1.4896749258041382, 12.159184455871582], + [0.5577435493469238, -7.501131534576416], + [1.828859567642212, 4.6140570640563965], + [1.9875288009643555, -5.80114221572876], + [-5.4164323806762695, 7.51683235168457], + [-2.33778977394104, -1.1675711870193481], + [-1.1142947673797607, -0.42509520053863525], + [-0.7208265066146851, 9.933643341064453], + [7.030334949493408, -3.0403692722320557], + [-3.8360912799835205, -2.6610143184661865], + [-2.1186017990112305, 0.2799831032752991], + [2.179917335510254, 0.9717152118682861], + [0.43753159046173096, -5.005154609680176], + [-3.4786040782928467, -1.3408068418502808], + [-3.160710096359253, 5.6491570472717285], + [0.27443405985832214, -5.270201683044434], + [-4.014788627624512, -3.9501609802246094], + [0.045023612678050995, -3.605205774307251], + [-4.656763553619385, -1.2132149934768677], + [-2.786083221435547, -0.861007571220398], + [2.6088266372680664, -4.736895561218262], + [-4.469491481781006, 5.587418556213379], + [0.5327283143997192, -7.256172180175781], + [0.5892031192779541, -6.911473274230957], + [-0.15801304578781128, -1.7471588850021362], + [0.242958664894104, -6.270588397979736], + [2.822040319442749, -4.883552551269531], + [0.6493141055107117, -8.187155723571777], + [0.5199905633926392, -0.9845171570777893], + [-4.555957794189453, 1.6230815649032593], + [8.253311157226562, -2.480989456176758], + [-4.112078666687012, -0.1990531086921692], + [-2.437614917755127, -2.973247766494751], + [-3.675344228744507, -1.1423135995864868], + [0.45383888483047485, 2.4206268787384033], + [0.5949447154998779, -8.611166000366211], + [-2.0999605655670166, -0.7011086940765381], + [-3.2132318019866943, 5.626996040344238], + [0.48985493183135986, -8.047446250915527], + [2.133363962173462, 3.5287296772003174], + [-3.2765896320343018, -1.8147181272506714], + [3.8682281970977783, 6.899517059326172], + [1.7772178649902344, 4.993956565856934], + [0.4129001498222351, -7.200484275817871], + [6.335193634033203, -1.6994062662124634], + [-3.7061209678649902, -1.13508939743042], + [0.6679630875587463, 3.9998557567596436], + [-4.725109577178955, 6.852801322937012], + [-5.8094868659973145, -1.023544192314148], + [5.188833713531494, -2.0451600551605225], + [7.952725887298584, -2.807297468185425], + [6.523412227630615, -3.479904890060425], + [1.1245200634002686, 1.8186415433883667], + [2.1583704948425293, 0.6287320256233215], + [-3.919382333755493, 6.217673301696777], + [2.7754569053649902, -5.31239128112793], + [-4.528143882751465, -1.806264042854309], + [1.2727627754211426, -6.017865180969238], + [0.5591954588890076, -7.406096935272217], + [-2.081402540206909, 1.6979261636734009], + [0.6051345467567444, -7.789017677307129], + [0.6764250993728638, -6.245073318481445], + [1.246385097503662, -5.03727388381958], + [2.2764909267425537, 3.5932679176330566], + [0.678987443447113, -6.78090763092041], + [-1.8935515880584717, 1.985190987586975], + [1.5407134294509888, 0.9660556316375732], + [-2.925025701522827, -1.937735676765442], + [-1.3149850368499756, 11.407057762145996], + [3.0083096027374268, -4.327383995056152], + [-2.261708974838257, 6.104976654052734], + [-0.6865469813346863, 10.830839157104492], + [3.066577911376953, 5.9630255699157715], + [7.480719566345215, -2.768186330795288], + [-3.943004846572876, -1.8393162488937378], + [0.5748743414878845, 8.607595443725586], + [0.449333131313324, -5.273614883422852], + [9.630804061889648, -2.916731119155884], + [-4.050799369812012, -0.5187876224517822], + [-0.2168797254562378, 9.331905364990234], + [-3.0696914196014404, -2.206404209136963], + [2.8587136268615723, 5.979860305786133], + [1.6366820335388184, 4.164227485656738], + [-4.221622943878174, -1.5219521522521973], + [-2.3754220008850098, 0.22365766763687134], + [-3.9975316524505615, 6.391191482543945], + [-0.9474390149116516, 10.51529312133789], + [-1.2613815069198608, 11.509038925170898], + [9.487381935119629, -2.873196840286255], + [-3.8530638217926025, -1.7616019248962402], + [-0.9917052388191223, 10.6328125], + [6.052476406097412, -4.78147554397583], + [2.456608533859253, -5.4752397537231445], + [-2.707284688949585, 6.291761875152588], + [4.556604385375977, 7.730851173400879], + [-3.3054733276367188, -1.8578215837478638], + [-5.533254623413086, 7.307783603668213], + [3.2296900749206543, 6.099445343017578], + [-0.8992074131965637, 10.164941787719727], + [-4.2895073890686035, -1.0303608179092407], + [0.6029499769210815, 4.324195861816406], + [-4.178160190582275, 6.184077262878418], + [2.5071516036987305, -4.51672887802124], + [-2.510219097137451, -2.1515471935272217], + [0.36846303939819336, -6.804231643676758], + [0.9400058388710022, -6.577576637268066], + [2.417346715927124, 5.4866862297058105], + [-1.2659337520599365, 11.853219985961914], + [1.598879337310791, -5.377024173736572], + [-0.8134111762046814, 11.38894271850586], + [-3.452133893966675, -2.7625410556793213], + [2.366666793823242, -5.387345314025879], + [-3.7674543857574463, -1.424576997756958], + [-0.7095597982406616, -0.6846261620521545], + [-5.142821788787842, -3.872288703918457], + [-3.6733834743499756, -1.772370457649231], + [-4.560827732086182, -2.9436607360839844], + [0.6912453770637512, -4.995349884033203], + [-3.0713422298431396, -2.5950446128845215], + [7.877781867980957, -3.226522922515869], + [7.1776275634765625, -2.5776689052581787], + [-1.391701579093933, 1.5055607557296753], + [-0.7533741593360901, 10.15863037109375], + [-5.334125995635986, -3.8848319053649902], + [-2.0371503829956055, 1.862532377243042], + [-1.8321480751037598, 1.7931039333343506], + [1.778184175491333, 4.939228057861328], + [-1.3525588512420654, 11.53182315826416], + [-3.1698968410491943, -0.8784335851669312], + [-2.261568069458008, -2.5601067543029785], + [-4.541483402252197, -1.4332460165023804], + [-2.488178014755249, -0.75312739610672], + [0.3958905339241028, -7.234434127807617], + [0.6273990869522095, -7.775998115539551], + [4.692342758178711, 7.829421043395996], + [-2.8199169635772705, -0.9190964102745056], + [-4.696417808532715, -3.519737958908081], + [8.460158348083496, -2.5262653827667236], + [4.585419178009033, 7.743459701538086], + [-1.3795497417449951, 11.822101593017578], + [6.558846473693848, -2.209317922592163], + [-2.1573832035064697, 1.835069179534912], + [-3.257805585861206, -0.3908262848854065], + [0.4153224229812622, -0.852474570274353], + [7.427876949310303, -3.3178038597106934], + [-4.3825201988220215, 4.272952079772949], + [2.8094735145568848, -4.730868816375732], + [1.8057692050933838, -5.039006233215332], + [-0.8903582692146301, 9.806133270263672], + [6.49526834487915, -3.487401247024536], + [2.1312248706817627, 0.676504373550415], + [-3.180925130844116, -0.8154013752937317], + [2.291590452194214, 4.926429271697998], + [0.4949401617050171, -5.569549560546875], + [-3.000561475753784, -1.8663138151168823], + [6.537171840667725, -1.7221182584762573], + [-4.169910907745361, -1.9896308183670044], + [-3.426685094833374, -2.249316453933716], + [0.7713682055473328, -4.82900333404541], + [-3.856553077697754, 0.23094189167022705], + [6.72767448425293, -4.0197625160217285], + [-3.1107394695281982, -1.8184689283370972], + [-0.7840943932533264, -1.455547571182251], + [0.31695836782455444, -6.6415252685546875], + [-0.5206970572471619, -3.4216153621673584], + [-3.8954057693481445, -3.1489343643188477], + [-3.6675937175750732, -0.7823101878166199], + [-1.3884291648864746, 11.462857246398926], + [-4.2906084060668945, -3.5594515800476074], + [2.5477941036224365, -5.685882091522217], + [2.7512247562408447, -4.671896934509277], + [2.8470497131347656, -4.609216213226318], + [-3.190901279449463, 5.411192417144775], + [0.4584670662879944, 0.9081729650497437], + [1.1011037826538086, -5.093034744262695], + [3.495116949081421, 6.378722190856934], + [0.3716101050376892, -5.216153144836426], + [-1.3029468059539795, 1.2524744272232056], + [-5.009628772735596, -1.3232322931289673], + [-1.3651833534240723, 12.273710250854492], + [8.40750789642334, -2.662388563156128], + [-2.0472705364227295, 1.46140456199646], + [-1.2169486284255981, 10.990721702575684], + [-1.1050195693969727, 10.310487747192383], + [0.6901315450668335, -5.901340484619141], + [7.136229991912842, -2.3207921981811523], + [-1.2547322511672974, 10.738285064697266], + [2.414196729660034, -4.504944801330566], + [-0.03353310376405716, 8.826086044311523], + [1.8312875032424927, 5.345253944396973], + [-0.9595454931259155, 10.342636108398438], + [-2.217729091644287, -2.1063034534454346], + [-2.017296552658081, 1.6072036027908325], + [8.450928688049316, -2.7944843769073486], + [0.3321417570114136, -7.11344575881958], + [-0.6557000875473022, 0.6044209003448486], + [0.7073580622673035, -5.819058418273926], + [3.6889286041259766, 6.6000447273254395], + [3.7648441791534424, 6.97619104385376], + [3.7886791229248047, 7.15028715133667], + [-1.0076642036437988, 10.68394947052002], + [-3.7693636417388916, -1.8460195064544678], + [1.063011646270752, 0.0097738616168499], + [3.2602126598358154, 6.78985071182251], + [-1.0891050100326538, 10.727816581726074], + [-0.02639482170343399, -4.559175491333008], + [-1.8246322870254517, 1.430290699005127], + [0.5777021050453186, -0.8457691669464111], + [-3.815713882446289, -2.461883783340454], + [1.9804208278656006, 4.1754889488220215], + [-3.9817497730255127, -1.2158969640731812], + [-4.959343433380127, -0.8557949066162109], + [-3.22501540184021, -3.3133585453033447], + [-2.861757516860962, 5.115156173706055], + [-2.4723525047302246, 2.2245633602142334], + [0.645071804523468, -8.35654067993164], + [-3.6349997520446777, 6.4205546379089355], + [-1.0634381771087646, 10.447360038757324], + [-3.996027708053589, -4.149255275726318], + [1.5480841398239136, 4.199110984802246], + [5.554406642913818, -3.9729909896850586], + [0.39175570011138916, -5.79179573059082], + [-3.989121198654175, -1.5771205425262451], + [-4.405989170074463, -0.9955654740333557], + [-3.211764097213745, 5.032108306884766], + [1.0768017768859863, -6.924732208251953], + [0.6036123633384705, -8.25279712677002], + [1.5159826278686523, -6.801102638244629], + [1.2858928442001343, 6.700201988220215], + [-3.8386566638946533, -1.5890110731124878], + [5.516140460968018, -3.7673439979553223], + [-3.260974884033203, -2.315932273864746], + [-2.050666570663452, 1.4644920825958252], + [-4.461413383483887, 5.932126045227051], + [6.556651592254639, -4.507589340209961], + [7.408681392669678, -2.577235460281372], + [0.5397660732269287, -0.5094613432884216], + [0.3686542809009552, -0.922690212726593], + [2.2530770301818848, 4.354731559753418], + [4.315771579742432, -0.07631772756576538], + [1.4490249156951904, -5.135783672332764], + [0.8527349829673767, -5.38820743560791], + [1.4620200395584106, 5.394330024719238], + [7.2406816482543945, -2.0627992153167725], + [-4.613620281219482, -1.0748978853225708], + [0.37065577507019043, -5.069450378417969], + [-3.3230788707733154, 5.49829626083374], + [7.17812967300415, -2.3695967197418213], + [-0.4942256808280945, -1.4272843599319458], + [-3.088265895843506, -1.3195594549179077], + [8.653117179870605, -2.62239146232605], + [-0.422137588262558, -3.0650370121002197], + [7.075868606567383, -3.688523054122925], + [4.514884948730469, 7.3027472496032715], + [2.8008742332458496, -4.311606407165527], + [0.5541700720787048, -4.997221946716309], + [0.42878419160842896, -5.959169864654541], + [-2.616509199142456, -1.799183964729309], + [-0.16877958178520203, -3.2206430435180664], + [-0.9005139470100403, 10.666297912597656], + [2.7846245765686035, -4.292037487030029], + [-3.387279748916626, -1.1814991235733032], + [1.357303500175476, 1.8209571838378906], + [3.595914363861084, 6.936048984527588], + [-4.225773334503174, -1.4073138236999512], + [-4.258100986480713, -2.7846219539642334], + [0.7487383484840393, -7.406055450439453], + [-3.627016544342041, 3.989428758621216], + [8.361926078796387, -2.9494969844818115], + [0.07661145180463791, 7.370746612548828], + [-0.9875988364219666, 10.817195892333984], + [-2.76692795753479, 4.786433696746826], + [-0.8054505586624146, 10.608101844787598], + [-0.5897644758224487, -1.5601345300674438], + [-5.175375938415527, -1.7946598529815674], + [1.4036962985992432, -6.570476531982422], + [-3.5784695148468018, -1.5289326906204224], + [-3.994981050491333, -1.479110836982727], + [2.4903833866119385, 4.11116886138916], + [-1.1291321516036987, 1.623233437538147], + [-1.3350346088409424, 1.614315390586853], + [-1.533522605895996, 12.326215744018555], + [-1.7350285053253174, 0.8822951912879944], + [7.509325981140137, -2.6339919567108154], + [-2.8088462352752686, -0.3310907781124115], + [-1.909105658531189, 2.0001769065856934], + [-4.617530345916748, -0.9534817337989807], + [-0.3046187162399292, 0.17034611105918884], + [-0.4909129738807678, 9.747905731201172], + [-1.0586950778961182, 11.275031089782715], + [2.8122057914733887, -4.623549461364746], + [2.6748030185699463, -4.333738327026367], + [2.083918809890747, -3.223106622695923], + [-4.627956867218018, 1.1035789251327515], + [2.8169262409210205, -5.326288223266602], + [2.5827746391296387, -5.4932661056518555], + [7.848078727722168, -3.1069791316986084], + [-0.7727400064468384, -4.113299369812012], + [-0.8006476759910583, 11.318305969238281], + [-0.8292083144187927, -0.9480071663856506], + [-5.195339679718018, 6.155580520629883], + [-4.106114864349365, -1.2351782321929932], + [-1.5736737251281738, -0.15532490611076355], + [-3.9338953495025635, -1.5022846460342407], + [-3.416386842727661, 4.89122200012207], + [0.5709021687507629, -7.629106044769287], + [-3.1719272136688232, -2.316591501235962], + [7.079517841339111, -2.716472864151001], + [1.4159111976623535, 5.0850372314453125], + [-3.3517673015594482, -1.2721703052520752], + [-0.9672053456306458, 10.659297943115234], + [-3.8994686603546143, -1.574651837348938], + [2.9542946815490723, -4.465923309326172], + [2.68392014503479, -3.7852816581726074], + [5.71404504776001, -1.4410334825515747], + [8.238242149353027, -2.3814384937286377], + [0.6671406626701355, -8.335168838500977], + [1.7412023544311523, 3.496455192565918], + [-1.1083077192306519, 10.212949752807617], + [0.5164645314216614, -7.3486504554748535], + [7.025659084320068, -2.4850800037384033], + [-3.7617712020874023, -1.9273303747177124], + [-4.680391788482666, 3.64552903175354], + [-0.39631736278533936, 3.6106045246124268], + [8.779044151306152, -2.764563798904419], + [-1.3143343925476074, 11.739542007446289], + [-3.9088492393493652, -3.2722012996673584], + [-5.522010326385498, 5.680971145629883], + [-1.3389846086502075, 11.530370712280273], + [-4.5835747718811035, 5.421521186828613], + [-3.805900812149048, -1.073819637298584], + [-3.4768624305725098, 1.2561722993850708], + [-4.04087495803833, -2.9011967182159424], + [-1.8420771360397339, 1.0167514085769653], + [6.3535847663879395, -1.7931467294692993], + [-1.5158677101135254, 12.700983047485352], + [1.105050802230835, -7.542762756347656], + [4.187903881072998, 7.105778694152832], + [-3.4809324741363525, -1.8002794981002808], + [-2.048513412475586, 2.3997817039489746], + [0.3976873755455017, -5.951391220092773], + [1.6974687576293945, -5.696537494659424], + [-0.6954327821731567, -1.5480891466140747], + [-3.4460697174072266, 4.107516765594482], + [-1.8686002492904663, 0.9273130297660828], + [-1.3668795824050903, 11.589405059814453], + [0.038443855941295624, -4.393244743347168], + [-1.1903202533721924, 10.733236312866211], + [-3.1211180686950684, -0.9782463908195496], + [-4.954908847808838, 6.208830833435059], + [7.19208288192749, -2.1056487560272217], + [4.403530597686768, -3.713348627090454], + [1.6084372997283936, 2.2276649475097656], + [-1.3637988567352295, 11.44932746887207], + [-4.889959812164307, 7.0911865234375], + [0.7470617294311523, -5.392024040222168], + [0.5498165488243103, -8.655465126037598], + [7.58339262008667, -2.4503071308135986], + [-1.229738712310791, 11.260833740234375], + [-2.058135747909546, -0.5007917881011963], + [-4.436514377593994, -0.5911725163459778], + [3.0807273387908936, -4.856675148010254], + [8.269201278686523, -3.4584062099456787], + [-1.1159090995788574, 10.077157020568848], + [-3.764624834060669, -1.9043201208114624], + [2.8076460361480713, -4.69049072265625], + [0.6177313327789307, -8.503494262695312], + [2.2103638648986816, 5.530073165893555], + [2.5885212421417236, 5.466378211975098], + [-3.546105146408081, -0.8770473003387451], + [-1.2806614637374878, 1.508103609085083], + [1.5000052452087402, 2.9011781215667725], + [1.4299612045288086, -5.542082786560059], + [0.5251203179359436, -0.6560416221618652], + [9.489829063415527, -2.8913233280181885], + [2.511942148208618, 5.187521934509277], + [2.7671492099761963, 6.551485061645508], + [-1.1694862842559814, -1.02778959274292], + [-0.49604296684265137, 8.557882308959961], + [-3.967769145965576, -1.2639667987823486], + [-3.263410806655884, 6.9464263916015625], + [0.5333545804023743, -0.7152237892150879], + [-0.9127104878425598, 11.007254600524902], + [-1.3609066009521484, 12.178898811340332], + [1.1238819360733032, 1.6843540668487549], + [-1.1863772869110107, 1.8263665437698364], + [2.867997169494629, -4.937485218048096], + [-1.8878843784332275, 1.8842087984085083], + [-0.07546893507242203, -4.963233947753906], + [-4.750850200653076, -2.6341044902801514], + [1.759171485900879, 3.487675428390503], + [0.74089515209198, 6.026255130767822], + [2.8843677043914795, -4.69846248626709], + [7.989713191986084, -2.39579439163208], + [2.2357077598571777, 5.298202991485596], + [2.24509596824646, 3.5009748935699463], + [1.0039676427841187, 4.348301887512207], + [-1.7430970668792725, 0.0668577253818512], + [0.6310011148452759, -7.831669330596924], + [0.7234306931495667, 0.6427133083343506], + [1.114306926727295, 4.687995910644531], + [-4.459335803985596, -0.8142708539962769], + [-3.0231900215148926, -2.032348394393921], + [-1.3236048221588135, -0.2975032329559326], + [9.059767723083496, -3.2158145904541016], + [-4.42698860168457, -1.1701112985610962], + [-0.4675806164741516, 7.805278778076172], + [-3.048779249191284, -1.1044269800186157], + [3.4120848178863525, 6.277061939239502], + [0.7691501975059509, -8.990151405334473], + [-1.9792470932006836, 1.4803438186645508], + [-0.9746561646461487, 10.853708267211914], + [-5.710201740264893, 5.5281596183776855], + [-0.4348829388618469, 8.37628173828125], + [-1.9422152042388916, 1.7602794170379639], + [7.554360866546631, -3.8897883892059326], + [1.7079910039901733, -4.5022358894348145], + [0.21988552808761597, -6.369919776916504], + [0.9408895373344421, -2.9098622798919678], + [3.078641653060913, -4.8996429443359375], + [-3.6011600494384766, 6.207279205322266], + [-3.9226086139678955, -1.3093472719192505], + [-1.1453135013580322, 11.092472076416016], + [2.0009946823120117, 0.8214242458343506], + [0.8169711232185364, -7.911613464355469], + [1.9026519060134888, 0.9178862571716309], + [0.6529900431632996, -8.085287094116211], + [0.9923326373100281, -6.066390514373779], + [0.29227834939956665, -5.253665924072266], + [-3.6004467010498047, -1.3532391786575317], + [-2.6949541568756104, -0.7858424782752991], + [-5.633288860321045, -1.0843753814697266], + [-3.2358665466308594, -1.1298714876174927], + [-4.285704135894775, 6.484679222106934], + [-0.4705038070678711, -1.1600555181503296], + [-2.069725751876831, 2.7166731357574463], + [7.43973970413208, -2.430262804031372], + [1.4176424741744995, -6.1342267990112305], + [1.6908589601516724, 0.3605787456035614], + [0.6094076037406921, -7.719419479370117], + [-5.805753231048584, -1.5837112665176392], + [-1.5908466577529907, 1.9718648195266724], + [1.9351270198822021, -4.801729202270508], + [-2.597569227218628, -5.048701286315918], + [6.468082427978516, -3.1059505939483643], + [0.12019991129636765, -4.674066543579102], + [2.875058174133301, -4.845624923706055], + [4.301936626434326, 7.203787326812744], + [1.6136503219604492, -4.442558288574219], + [0.5833485722541809, -0.3748406767845154], + [2.8046376705169678, -4.860021591186523], + [-1.2492015361785889, 11.506982803344727], + [-3.769514322280884, 6.315810203552246], + [-0.6948561072349548, 0.999982476234436], + [2.0372960567474365, -4.961098670959473], + [-0.5029924511909485, 8.679444313049316], + [-0.07984883338212967, -4.461221694946289], + [-5.1911301612854, 5.0469770431518555], + [-0.4551185965538025, 5.919918537139893], + [0.4674409031867981, -6.5055999755859375], + [8.280047416687012, -2.6622002124786377], + [1.6805524826049805, 1.9979537725448608], + [-5.882540225982666, 4.982263088226318], + [-2.5116207599639893, -1.7632521390914917], + [-4.248561382293701, 6.1607513427734375], + [-0.8593605756759644, 9.818412780761719], + [-3.7664060592651367, -1.9378557205200195], + [-4.599565029144287, -2.8144500255584717], + [0.04860835522413254, 7.938674449920654], + [2.0700714588165283, -4.219535827636719], + [-4.662407398223877, -3.2798454761505127], + [-3.796170949935913, -2.692016839981079], + [0.6326637268066406, -7.9233503341674805], + [0.3437434434890747, -6.824739456176758], + [6.582958221435547, -2.804185152053833], + [-4.817811012268066, 6.5403900146484375], + [2.923780679702759, -4.7686357498168945], + [-3.965843439102173, 2.3604846000671387], + [0.9941535592079163, -5.795985221862793], + [0.6647704839706421, -8.615473747253418], + [6.895695209503174, -1.8163079023361206], + [-3.8699378967285156, -1.3664519786834717], + [0.40626588463783264, 0.07347001135349274], + [7.112408638000488, -2.1023895740509033], + [-0.28799688816070557, 8.355728149414062], + [1.6822727918624878, 5.417919158935547], + [0.37704014778137207, -5.527560234069824], + [2.805992841720581, -4.543421268463135], + [2.6810953617095947, -4.578492164611816], + [-3.9385645389556885, 5.664388179779053], + [2.573178291320801, 6.240241527557373], + [-2.8957455158233643, 3.1619997024536133], + [-4.020831108093262, -0.7954018115997314], + [0.537045419216156, -0.7371729612350464], + [-2.0561599731445312, 1.3579144477844238], + [8.562108039855957, -2.6944572925567627], + [5.463489532470703, 8.535058975219727], + [-1.4816482067108154, 1.6057387590408325], + [2.2637977600097656, 6.122900009155273], + [1.1300146579742432, -5.317477226257324], + [-2.566479444503784, 2.106755256652832], + [3.0601165294647217, -4.724092960357666], + [1.4775002002716064, 4.725444793701172], + [-0.18297994136810303, 8.638321876525879], + [-3.17488694190979, -1.653976321220398], + [-5.127082347869873, 6.643360614776611], + [-5.202693462371826, -0.892259955406189], + [-0.3233610987663269, -0.6797664165496826], + [5.776916027069092, -3.812770128250122], + [-4.602267742156982, -1.5549203157424927], + [7.443439483642578, -2.431825637817383], + [-4.226599216461182, -2.8374383449554443], + [-0.5130224823951721, 8.965187072753906], + [-1.0584193468093872, 10.605382919311523], + [-3.6109366416931152, -2.763875722885132], + [-0.6364085674285889, 5.229016304016113], + [-3.6883461475372314, 3.918452501296997], + [2.4277379512786865, 5.607495307922363], + [-1.8182053565979004, 0.6395202279090881], + [-5.09876012802124, 7.463598251342773], + [0.018320493400096893, -5.4570393562316895], + [2.380481719970703, -4.373857021331787], + [-6.273163318634033, -0.935761570930481], + [-4.756800174713135, -1.1593972444534302], + [-4.182000637054443, -2.4942033290863037], + [0.48163050413131714, -6.119954586029053], + [2.831261396408081, -5.076369762420654], + [-4.353073596954346, 6.5496110916137695], + [8.24108600616455, -2.9217231273651123], + [-1.7498695850372314, 0.83284592628479], + [-1.7992565631866455, 1.9603677988052368], + [-3.3773138523101807, -1.6480042934417725], + [-0.04385153204202652, -2.490673542022705], + [0.8079980611801147, -7.849030017852783], + [6.107912063598633, -2.6427884101867676], + [0.820862352848053, -8.765783309936523], + [-0.26967984437942505, -1.2091871500015259], + [6.456822395324707, -3.273085832595825], + [4.434751987457275, 7.34429407119751], + [7.75188684463501, -2.8242452144622803], + [0.69195955991745, -7.7694315910339355], + [-0.3697437047958374, 9.961100578308105], + [-3.7404704093933105, -2.309534788131714], + [0.4685041308403015, -3.278836488723755], + [1.650360107421875, -0.0014864690601825714], + [2.9352591037750244, -4.678117752075195], + [0.389276921749115, -6.701292037963867], + [3.0346953868865967, 6.834774017333984], + [-4.312572956085205, -1.39755380153656], + [0.24672383069992065, -5.958470821380615], + [-2.428771734237671, -0.5097678303718567], + [0.8952698111534119, -5.084202766418457], + [-1.3248544931411743, 0.9845191240310669], + [-3.76230525970459, 5.891794204711914], + [-2.389021873474121, -1.0040258169174194], + [2.554097890853882, 2.4921905994415283], + [0.3584975004196167, -5.907674789428711], + [-0.7319122552871704, 10.170101165771484], + [0.9274125695228577, -6.930840015411377], + [0.7259662747383118, -6.8013224601745605], + [0.7751752138137817, -8.374041557312012], + [-1.807529091835022, -0.08378303050994873], + [0.6197225451469421, -7.3259968757629395], + [0.878315269947052, -4.7927680015563965], + [-3.9825668334960938, -1.165937900543213], + [5.497491359710693, -2.0345020294189453], + [-0.8545188307762146, 9.022685050964355], + [-0.7993802428245544, 1.2097350358963013], + [-1.321335792541504, 11.715505599975586], + [-5.0710530281066895, -3.082214593887329], + [-4.841328144073486, 0.9902981519699097], + [1.4776744842529297, 0.012600954622030258], + [2.9271302223205566, -4.837357044219971], + [-3.189429998397827, -0.9721811413764954], + [7.73741340637207, -2.545564651489258], + [-5.3475542068481445, -0.8669122457504272], + [-3.7570674419403076, -1.5995798110961914], + [2.239976644515991, -4.120343208312988], + [2.0864155292510986, -3.842156171798706], + [2.5548887252807617, -4.825438499450684], + [-0.4674670696258545, 5.263751983642578], + [-4.061271667480469, 6.59116268157959], + [6.816415309906006, -2.1794540882110596], + [-0.5118687152862549, -1.4132213592529297], + [-4.256617069244385, -1.7687450647354126], + [-4.660717487335205, 5.803341388702393], + [-0.3975253105163574, -1.9144089221954346], + [-0.17964163422584534, -1.67557954788208], + [0.11714600771665573, -5.62156867980957], + [2.4432218074798584, 6.200906753540039], + [-3.74566912651062, -1.1748148202896118], + [-3.5713112354278564, -0.8996880054473877], + [2.7050886154174805, -4.323599815368652], + [-2.0350124835968018, 2.1999807357788086], + [0.7347257137298584, -8.274114608764648], + [1.5914345979690552, -4.556302070617676], + [1.3179776668548584, 0.7340207695960999], + [1.350017786026001, 3.2229301929473877], + [2.120783567428589, -3.954968214035034], + [-1.2842152118682861, 11.5570650100708], + [0.5973911285400391, 7.200370788574219], + [0.42754268646240234, 4.504196643829346], + [0.7268401384353638, -8.148420333862305], + [0.1745021939277649, -5.817779064178467], + [0.4548436403274536, -5.64702844619751], + [-4.276255130767822, -2.424971342086792], + [-1.7901496887207031, -0.015183273702859879], + [7.888222694396973, -3.1972010135650635], + [8.555733680725098, -2.5218160152435303], + [2.185188055038452, 5.233938694000244], + [-1.4556738138198853, 0.8873242139816284], + [-4.159304618835449, -2.8163678646087646], + [-0.7249742746353149, 10.059633255004883], + [-1.270444393157959, 1.1630464792251587], + [1.093953251838684, -0.26860544085502625], + [-0.9314460158348083, 10.899044036865234], + [-1.0470292568206787, 11.000280380249023], + [0.8805517554283142, -4.704641342163086], + [-0.4538271427154541, -2.455726385116577], + [3.6994521617889404, 6.772934436798096], + [0.7265081405639648, -5.606325626373291], + [-0.7067038416862488, 10.46185302734375], + [2.816819429397583, -4.739273548126221], + [-0.5430399179458618, 9.484609603881836], + [1.9428279399871826, -0.35118257999420166], + [-0.6072016358375549, -1.8084038496017456], + [2.740021228790283, 5.5809526443481445], + [0.4607962369918823, -4.467781066894531], + [3.9141626358032227, 6.799727439880371], + [1.857654094696045, -5.407848358154297], + [-0.03415758162736893, -4.497534275054932], + [0.9481441378593445, -6.228553771972656], + [-0.9634801745414734, 10.863825798034668], + [-1.1111195087432861, 10.67231559753418], + [-0.46430033445358276, 9.652594566345215], + [5.963619709014893, -1.222756266593933], + [-3.3346340656280518, -0.9817073345184326], + [1.2975177764892578, 0.06443476676940918], + [3.0166547298431396, -4.625865936279297], + [0.7628384828567505, -5.831033706665039], + [0.5025200843811035, -4.740042209625244], + [-0.7388843297958374, 10.046286582946777], + [2.8735334873199463, -4.7206196784973145], + [-1.2339413166046143, 11.006035804748535], + [2.90153431892395, -4.919802665710449], + [1.6521977186203003, 0.8385417461395264], + [0.5672803521156311, -7.777650833129883], + [2.3012781143188477, 5.29561710357666], + [-0.9898476600646973, 10.179194450378418], + [7.861333847045898, -2.2746734619140625], + [0.7355730533599854, -6.37448787689209], + [2.6162121295928955, -4.228728771209717], + [-3.8453781604766846, -1.1809985637664795], + [0.5128185749053955, -4.210373878479004], + [0.6462380290031433, -8.463939666748047], + [-4.1865153312683105, 6.809716701507568], + [8.343501091003418, -2.72190523147583], + [-3.610025644302368, -1.3168519735336304], + [0.34939879179000854, -6.591220855712891], + [8.129841804504395, -2.753674030303955], + [-2.95845365524292, 2.804280996322632], + [7.663314342498779, -2.6089742183685303], + [-1.946387767791748, 2.543602705001831], + [-3.575956344604492, -1.4185866117477417], + [-0.46573007106781006, -1.6306698322296143], + [2.7922983169555664, -4.6945600509643555], + [-2.9288299083709717, -1.5146825313568115], + [-3.8854875564575195, -2.06270170211792], + [0.7441592812538147, -9.378040313720703], + [-1.764761209487915, 0.2734580636024475], + [7.361699104309082, -2.9193975925445557], + [-4.0914483070373535, -1.2756685018539429], + [-2.968022584915161, -1.0444811582565308], + [1.852540135383606, 4.5040130615234375], + [-4.079571723937988, 6.416676998138428], + [-4.11332368850708, -0.4529416561126709], + [-1.0019217729568481, 10.559484481811523], + [-1.9930124282836914, 0.6398519277572632], + [-1.4763057231903076, 12.093417167663574], + [9.811551094055176, -2.975212812423706], + [0.4231942296028137, -6.680199146270752], + [-0.7421421408653259, 10.731761932373047], + [1.6339895725250244, 0.6923103928565979], + [-1.3906043767929077, 12.013005256652832], + [-1.9356805086135864, 1.9347409009933472], + [2.33162260055542, -4.239956378936768], + [-3.6349270343780518, -1.3118590116500854], + [-4.9134650230407715, -4.1320624351501465], + [0.7129597663879395, -7.865650653839111], + [1.607702374458313, 4.331104755401611], + [-5.012511730194092, 4.461787700653076], + [0.12816661596298218, -5.062809944152832], + [-1.8254073858261108, 5.593216896057129], + [2.412344455718994, -5.229060173034668], + [0.46275562047958374, -6.433917045593262], + [0.7397074699401855, -5.743471145629883], + [1.7139724493026733, -4.19158935546875], + [-0.023096568882465363, -1.2542484998703003], + [-1.6417642831802368, 1.7541614770889282], + [0.681940495967865, -8.264240264892578], + [1.176117181777954, -6.919764995574951], + [-1.1463271379470825, -0.702195942401886], + [0.9730624556541443, -4.472286224365234], + [-3.163374662399292, -1.310193657875061], + [-3.560943365097046, -1.251548409461975], + [-1.8330684900283813, -1.0672025680541992], + [-4.771321773529053, 4.453895092010498], + [0.7927612662315369, -9.750345230102539], + [-5.677319049835205, 7.213502883911133], + [-3.8128163814544678, -0.6241956949234009], + [8.667413711547852, -2.928947687149048], + [0.6256200075149536, -7.76485538482666], + [4.511592388153076, 7.6809892654418945], + [1.9601356983184814, -4.15254020690918], + [-5.381605625152588, -1.6381874084472656], + [-3.6672611236572266, -0.6739019155502319], + [1.612529993057251, 4.643224239349365], + [-0.7486023306846619, 10.604881286621094], + [2.590911626815796, -4.139638900756836], + [-3.4248998165130615, -1.0185848474502563], + [-4.981805801391602, 6.470690727233887], + [1.9692223072052002, 5.437979698181152], + [-4.372354030609131, -3.2808361053466797], + [0.5542122721672058, -6.72391414642334], + [3.0459654331207275, -4.76599645614624], + [1.364324688911438, 0.30512136220932007], + [-4.236606121063232, -1.9609748125076294], + [-4.461637020111084, 6.474848747253418], + [1.217061996459961, 0.6377667784690857], + [-1.7684024572372437, -0.6144936680793762], + [-0.34705662727355957, 9.881502151489258], + [-1.1527867317199707, 11.157093048095703], + [2.2924182415008545, 6.013755798339844], + [4.585809707641602, -4.721452713012695], + [0.5681917071342468, -3.283740282058716], + [4.207167625427246, 7.668460845947266], + [-4.39461088180542, -0.8976805210113525], + [2.4323174953460693, 0.6835105419158936], + [0.864227831363678, -6.059683799743652], + [-1.8525179624557495, 1.9707287549972534], + [-4.41054105758667, -1.1821523904800415], + [1.7157660722732544, -2.1068615913391113], + [-0.9614396691322327, 11.082391738891602], + [1.8078157901763916, 1.137236475944519], + [-0.4734708368778229, 0.30322542786598206], + [2.9462573528289795, -4.515958786010742], + [-3.891984701156616, -2.5793344974517822], + [0.5509713888168335, -7.72224235534668], + [-3.2298636436462402, -2.2835428714752197], + [-3.4906399250030518, -1.0818275213241577], + [-3.8605730533599854, 3.471583366394043], + [-5.290310382843018, 7.069522857666016], + [0.7302139401435852, -6.367547988891602], + [7.345080852508545, -2.870537757873535], + [1.2409809827804565, -0.14932367205619812], + [-3.1830060482025146, -0.8615005016326904], + [-3.058753252029419, -1.4147536754608154], + [1.715348720550537, 5.249629020690918], + [-3.057502031326294, -0.7843698263168335], + [1.730443000793457, 1.8280988931655884], + [-1.5770177841186523, 2.0114798545837402], + [-4.616966724395752, 5.830901145935059], + [0.8870226144790649, -4.506928443908691], + [0.3382173478603363, -3.5396814346313477], + [-4.3754754066467285, -3.506727457046509], + [1.2434383630752563, -0.026379574090242386], + [3.74957275390625, -3.1925792694091797], + [6.086231708526611, -5.168951511383057], + [3.22370982170105, -4.9868998527526855], + [2.625657796859741, 6.128645420074463], + [1.9506494998931885, 1.0458881855010986], + [-5.545011043548584, 7.515761852264404], + [-3.8568007946014404, -2.5535998344421387], + [3.1354868412017822, -4.838940143585205], + [-3.5614850521087646, -1.7319053411483765], + [6.414407730102539, -2.9404728412628174], + [1.2883459329605103, 6.588957786560059], + [-2.1155943870544434, -0.9292303323745728], + [-4.13901948928833, -3.0146939754486084], + [-1.8162975311279297, 1.4500123262405396], + [1.6333963871002197, 2.927112340927124], + [5.110281467437744, -1.8455599546432495], + [2.8220632076263428, -4.351094722747803], + [4.957977771759033, 7.986144065856934], + [-2.8785102367401123, -1.7938306331634521], + [-1.4953460693359375, 12.209467887878418], + [0.38280928134918213, -6.288759231567383], + [-4.713504791259766, -4.203011989593506], + [-2.0700185298919678, 1.1129406690597534], + [-1.5126432180404663, 0.43393343687057495], + [-3.602590560913086, -2.4079980850219727], + [-5.020425319671631, 5.874757766723633], + [-4.7282609939575195, 5.09140157699585], + [-0.6907584071159363, 9.900463104248047], + [-4.263118267059326, 5.485669136047363], + [2.97538685798645, -4.692698001861572], + [1.4116768836975098, 0.9457117319107056], + [7.767754077911377, -2.1600606441497803], + [7.0033955574035645, -1.7632639408111572], + [-4.180428504943848, 6.608606338500977], + [-2.084278106689453, 1.9390684366226196], + [0.46329838037490845, -7.278606414794922], + [-3.8475425243377686, -1.1119763851165771], + [-5.836349964141846, 6.166242599487305], + [-1.8858561515808105, -0.5466604232788086], + [0.8150463700294495, -9.547330856323242], + [0.6134588718414307, -4.757111549377441], + [-1.1855130195617676, 10.12177848815918], + [-1.2108755111694336, 11.062341690063477], + [-4.390455722808838, -0.8870848417282104], + [8.505605697631836, -2.7425506114959717], + [-4.073145389556885, -3.7934250831604004], + [1.9798061847686768, 6.299409866333008], + [2.1803882122039795, -4.532546043395996], + [1.8562053442001343, 3.244907855987549], + [-5.196832180023193, 2.4621102809906006], + [2.5145373344421387, -4.754995822906494], + [1.6566745042800903, -4.51654577255249], + [-3.650338649749756, -1.0917295217514038], + [7.9039506912231445, -2.2892072200775146], + [-2.928267002105713, -1.6693947315216064], + [0.9171115756034851, -5.36372184753418], + [6.105184555053711, -2.914348840713501], + [0.48787593841552734, -6.7576985359191895], + [-4.241316318511963, -3.1469829082489014], + [0.8427706956863403, -5.964297294616699], + [-3.585892677307129, -0.33643049001693726], + [-0.7346461415290833, 10.384651184082031], + [0.7279040813446045, -7.189686298370361], + [-3.8972866535186768, -3.089132070541382], + [5.630580425262451, -4.787213325500488], + [0.3178890347480774, -6.279720306396484], + [-4.302384853363037, -0.7976067662239075], + [-1.3873960971832275, 12.111135482788086], + [-2.264158010482788, -0.3805631101131439], + [6.279273986816406, -2.9581239223480225], + [5.373898983001709, 8.160385131835938], + [-3.2969272136688232, -1.5143077373504639], + [1.2614527940750122, 3.6500885486602783], + [2.9147815704345703, -4.775550842285156], + [-4.828334331512451, 5.244153022766113], + [-2.932811975479126, 5.720620632171631], + [3.1612985134124756, 6.601500511169434], + [-4.7095818519592285, 5.70517635345459], + [-0.6668700575828552, 9.924957275390625], + [6.48889684677124, -2.0873825550079346], + [0.46625906229019165, -0.705516517162323], + [0.7309573888778687, -6.835134506225586], + [-0.38308185338974, 6.007541656494141], + [2.7064478397369385, -4.481179714202881], + [-3.098741292953491, 5.868333339691162], + [5.7467875480651855, -1.4638924598693848], + [1.0765000581741333, 0.001290794461965561], + [-0.3339155912399292, 9.056158065795898], + [-0.7080017328262329, 6.536191940307617], + [2.6134066581726074, -4.624521732330322], + [8.895720481872559, -2.717308759689331], + [-2.2424275875091553, -1.63775634765625], + [-3.000570058822632, -0.9719525575637817], + [-4.278975963592529, -0.5667055249214172], + [-3.5635416507720947, -1.3014832735061646], + [-3.3466367721557617, 5.100893974304199], + [-3.4209470748901367, -0.5251414775848389], + [2.735637903213501, -4.9589362144470215], + [-1.0958514213562012, 11.098241806030273], + [2.8334484100341797, -4.395965576171875], + [0.29050856828689575, -5.406167984008789], + [-3.436295747756958, -2.425732135772705], + [2.584390878677368, 6.015872478485107], + [-0.5885159969329834, 10.059272766113281], + [2.8263418674468994, -4.815435886383057], + [0.7426313161849976, -8.317968368530273], + [-3.4287588596343994, -1.4458237886428833], + [-0.9821473360061646, -0.9681876301765442], + [0.6222475171089172, -5.202704429626465], + [-4.221193313598633, 5.453680038452148], + [0.6267767548561096, -7.774347305297852], + [2.4089949131011963, 5.129098415374756], + [-0.20909357070922852, -0.5381180047988892], + [-2.850130319595337, -1.9451695680618286], + [0.7369587421417236, -7.935319900512695], + [0.1954156458377838, -5.175069808959961], + [-1.1767224073410034, 10.874058723449707], + [-3.509183168411255, -2.0453786849975586], + [7.403339385986328, -2.2496650218963623], + [0.4645523428916931, -7.120695114135742], + [-3.9611713886260986, -3.041395425796509], + [2.2665624618530273, -5.862760066986084], + [-3.384202718734741, -0.824068546295166], + [5.444549083709717, -1.3885244131088257], + [-1.407536268234253, 12.23230266571045], + [-0.12392241507768631, 8.102758407592773], + [1.4961318969726562, 5.09835147857666], + [0.718829333782196, -0.32999736070632935], + [2.4024603366851807, -4.689406871795654], + [7.969465732574463, -3.0305826663970947], + [2.1407246589660645, -4.652904510498047], + [3.353383779525757, 6.127105712890625], + [2.5526864528656006, -4.5026044845581055], + [-2.1561973094940186, 0.7355846762657166], + [-2.5272414684295654, -1.1809886693954468], + [-0.9164800643920898, -0.6726467609405518], + [7.216177940368652, -2.098306894302368], + [6.900753498077393, -3.8996384143829346], + [-3.309863567352295, -1.945794701576233], + [-0.5975739359855652, 8.842080116271973], + [-3.551038980484009, -1.0088871717453003], + [-5.474002838134766, 6.429971694946289], + [5.369699954986572, -2.776604652404785], + [-3.1373887062072754, -1.1881262063980103], + [0.9321807026863098, -4.626725673675537], + [0.6893348693847656, -6.759605884552002], + [-0.23453444242477417, 8.899979591369629], + [-0.36940842866897583, 8.880249977111816], + [0.8243387937545776, 5.6269378662109375], + [0.4760453701019287, -0.10159055888652802], + [-4.9854512214660645, -3.695667028427124], + [-3.810343027114868, -2.010590076446533], + [-4.463424205780029, 0.6317943334579468], + [6.51370096206665, -2.7191367149353027], + [0.0678136870265007, 0.33461883664131165], + [-0.5280847549438477, 9.618084907531738], + [0.4860888123512268, -1.0729275941848755], + [2.736872911453247, -4.605432987213135], + [-1.413593053817749, 0.605500340461731], + [-5.338803768157959, 7.167840003967285], + [-1.1514838933944702, 11.209329605102539], + [-3.5393307209014893, 3.9965426921844482], + [-0.7316110730171204, 11.142406463623047], + [-4.607381343841553, -3.531221628189087], + [0.3510468006134033, -4.996926307678223], + [5.456890106201172, -2.687443971633911], + [1.5118125677108765, 0.9811118841171265], + [-0.2912744879722595, -2.9365718364715576], + [5.315466403961182, -2.2369041442871094], + [1.4292757511138916, -5.783438205718994], + [1.4656261205673218, 6.643590450286865], + [-3.1165990829467773, -1.6480278968811035], + [2.6481831073760986, -4.531850337982178], + [0.48024117946624756, -7.281166076660156], + [2.1095595359802246, -4.53198766708374], + [2.10213041305542, 5.706906795501709], + [1.9820466041564941, -5.789714813232422], + [-1.3697720766067505, 11.888811111450195], + [7.240907192230225, -4.081348419189453], + [-0.07870370894670486, 8.561015129089355], + [-3.5348284244537354, -1.1243385076522827], + [7.023911952972412, -3.7135393619537354], + [1.8023035526275635, -4.717452526092529], + [4.833256244659424, 7.8609209060668945], + [0.9265685677528381, -0.5097946524620056], + [5.810317039489746, -2.0995850563049316], + [-5.029673099517822, 7.530326843261719], + [7.586401462554932, -2.413344383239746], + [-0.36068904399871826, -0.8364599347114563], + [0.6676499843597412, -5.422338962554932], + [2.346648931503296, -4.1241631507873535], + [-3.4397246837615967, -2.1447668075561523], + [1.840116024017334, 0.4238945543766022], + [-1.6589789390563965, 0.36141037940979004], + [0.645192563533783, -8.440065383911133], + [-4.456196308135986, -3.0974738597869873], + [0.9664365649223328, -6.766330718994141], + [-0.5113909840583801, -1.6897214651107788], + [2.710679292678833, -4.590846538543701], + [-1.2191596031188965, 10.80321979522705], + [-1.383096694946289, 1.4582098722457886], + [0.4273812174797058, -4.882730960845947], + [-0.8250613808631897, 10.026229858398438], + [-0.7096243500709534, 11.101956367492676], + [3.0002501010894775, -4.990180492401123], + [-1.3503656387329102, 11.413793563842773], + [5.791742324829102, -3.5503218173980713], + [-2.0696775913238525, 0.9548673629760742], + [-4.095872402191162, -1.1189768314361572], + [-2.1363437175750732, 0.3693513870239258], + [7.633121967315674, -3.5452640056610107], + [0.5673669576644897, -6.661346912384033], + [0.7040987610816956, -8.443561553955078], + [6.065661907196045, -1.5717068910598755], + [3.463228702545166, 6.421439170837402], + [-3.071174383163452, -0.9218320250511169], + [-0.626389741897583, 9.926368713378906], + [8.332820892333984, -2.763361692428589], + [4.467738628387451, -4.347682952880859], + [1.0793275833129883, 1.5230118036270142], + [-1.935976266860962, 1.6060909032821655], + [-2.0525035858154297, 1.7551984786987305], + [1.1996138095855713, 0.5043809413909912], + [-3.8794009685516357, -2.2855403423309326], + [0.743630588054657, -8.466975212097168], + [-4.404860973358154, 5.905763626098633], + [-3.820568084716797, -0.47251707315444946], + [-2.9653801918029785, 5.369065761566162], + [-0.7364987134933472, 10.712721824645996], + [-0.02016250044107437, -0.905433714389801], + [2.228344678878784, -5.291616439819336], + [1.86593759059906, -1.9443302154541016], + [0.5707269310951233, -0.9827885031700134], + [0.29719382524490356, -6.103681564331055], + [1.2734200954437256, 1.8369826078414917], + [-1.8110384941101074, 1.1734600067138672], + [0.695679783821106, -6.485203742980957], + [2.729905128479004, -4.4870710372924805], + [1.9201021194458008, -4.2528910636901855], + [-0.8656608462333679, 10.795302391052246], + [-1.5448009967803955, 1.112783670425415], + [2.601379156112671, -4.544083118438721], + [0.5373020768165588, -7.134026527404785], + [4.755436420440674, 7.7168474197387695], + [6.173945426940918, -1.089718222618103], + [1.0894030332565308, 0.0052708350121974945], + [-2.47927188873291, -0.739704966545105], + [2.1741912364959717, -5.505160808563232], + [7.752854347229004, -2.7198264598846436], + [1.2533923387527466, -5.280698299407959], + [1.758489727973938, 4.847251892089844], + [-0.3204076886177063, -0.9901086688041687], + [8.126555442810059, -2.7844297885894775], + [2.2738678455352783, 4.876086235046387], + [-3.574289560317993, 6.489068031311035], + [0.6448484063148499, -9.006818771362305], + [1.7816572189331055, 3.92085337638855], + [7.227281093597412, -2.2702150344848633], + [2.550278902053833, 6.2097249031066895], + [-3.2350914478302, -1.6840895414352417], + [2.656259775161743, 2.8435471057891846], + [0.5965563058853149, -6.267453193664551], + [-3.8763601779937744, -2.7070114612579346], + [-4.6809468269348145, -3.741649627685547], + [1.074106216430664, -5.145638465881348], + [-4.43664026260376, -0.29893797636032104], + [-3.6223390102386475, -1.756232738494873], + [-1.0886266231536865, 10.16019058227539], + [-1.2814712524414062, 11.443536758422852], + [0.5997509360313416, -8.473823547363281], + [-4.044680595397949, 0.06621396541595459], + [-3.811274290084839, 5.38136100769043], + [0.5964862704277039, -8.363273620605469], + [-5.586301326751709, -4.4612507820129395], + [0.3922311067581177, -7.227138519287109], + [0.450451135635376, 0.11487047374248505], + [0.9828196167945862, -0.1698477864265442], + [3.0815627574920654, -4.784205913543701], + [-1.9987907409667969, 2.2076375484466553], + [-1.8065414428710938, 1.6156158447265625], + [-3.999765396118164, -1.429282546043396], + [-3.7494187355041504, -0.7716405391693115], + [-0.7010697722434998, -1.8833545446395874], + [-3.759204149246216, -0.4955132007598877], + [6.347446918487549, -1.7243614196777344], + [-1.3764921426773071, -0.8046650290489197], + [-4.037062644958496, -1.4641207456588745], + [-4.379636764526367, 4.191497802734375], + [-4.54960298538208, 5.416715145111084], + [2.9914519786834717, -4.685549736022949], + [-0.922018826007843, 10.51291561126709], + [2.055873155593872, 4.098957061767578], + [0.11434855312108994, -4.817771911621094], + [0.23110681772232056, -6.98750638961792], + [-0.7265498042106628, 9.973251342773438], + [-1.883012056350708, 1.757733702659607], + [-0.47313636541366577, -1.1981565952301025], + [-4.987486839294434, -5.201804161071777], + [0.22429627180099487, -5.288632392883301], + [0.3721499443054199, -6.531362056732178], + [-1.2062184810638428, 10.900796890258789], + [-4.243400573730469, 0.02957737073302269], + [-3.7186596393585205, 3.718665361404419], + [1.730664849281311, 0.47292232513427734], + [-1.799424171447754, 1.6289020776748657], + [-5.529905796051025, -0.658423900604248], + [7.4981913566589355, -2.3987679481506348], + [0.4744371175765991, -7.227264404296875], + [-3.055954694747925, 5.808749198913574], + [0.6916584372520447, -6.983626365661621], + [6.250019550323486, -2.506071090698242], + [0.024413160979747772, -4.853729248046875], + [-3.12052845954895, -2.734039783477783], + [-4.029598712921143, -3.890361785888672], + [-0.3975650668144226, 9.437832832336426], + [-4.297301292419434, -1.080741286277771], + [-0.9699439406394958, 10.83713150024414], + [-1.972266674041748, -0.5694191455841064], + [7.150416851043701, -3.869063138961792], + [2.7079670429229736, -4.495887756347656], + [-4.7147536277771, 0.8434773087501526], + [-0.8036026358604431, 10.868882179260254], + [-5.565422534942627, 6.39409065246582], + [-1.9365134239196777, 2.009018898010254], + [6.530543327331543, -4.9268693923950195], + [-2.6392157077789307, -0.5556910037994385], + [-1.8236068487167358, 1.8045450448989868], + [-2.0958447456359863, 2.3476715087890625], + [1.19008469581604, 4.905841827392578], + [-1.9078781604766846, 0.9800533056259155], + [-4.415395736694336, -3.637835741043091], + [0.6167667508125305, -7.795587539672852], + [-3.7545981407165527, -2.7855613231658936], + [-2.5646188259124756, -3.2379863262176514], + [0.7882350087165833, 0.05868776515126228], + [1.2188961505889893, -0.14624689519405365], + [3.0356924533843994, -4.73068904876709], + [2.9078164100646973, -4.724393844604492], + [-1.2697221040725708, 10.837091445922852], + [2.6012959480285645, -3.6803159713745117], + [6.635493755340576, -3.1211111545562744], + [2.9626333713531494, 6.766111373901367], + [4.064772129058838, 7.189663887023926], + [0.5491830706596375, -4.801748275756836], + [1.3625460863113403, -0.13813798129558563], + [-0.24500423669815063, -1.0340529680252075], + [0.8079676628112793, -7.228075981140137], + [0.8758979439735413, -3.6542892456054688], + [-0.35848355293273926, -1.0783791542053223], + [1.5469117164611816, 2.771652936935425], + [-3.4071848392486572, 4.938233375549316], + [-0.686052680015564, 9.775625228881836], + [0.41107895970344543, -4.268898010253906], + [-3.7411062717437744, -2.622572422027588], + [-4.3423333168029785, 6.893510341644287], + [6.954187870025635, -3.030939817428589], + [2.8371336460113525, 6.199423789978027], + [0.6311822533607483, -8.951774597167969], + [5.6615891456604, -1.1238542795181274], + [4.947460651397705, 8.072265625], + [1.023775577545166, -0.14526419341564178], + [-1.0273385047912598, 10.252815246582031], + [1.7098602056503296, 5.3637237548828125], + [8.739287376403809, -2.5497586727142334], + [-0.2085254192352295, -1.4364289045333862], + [-5.495638847351074, 7.187198162078857], + [0.6569140553474426, -8.640396118164062], + [9.723700523376465, -2.8763115406036377], + [1.854055404663086, 1.6092978715896606], + [0.678813636302948, -8.609221458435059], + [0.6381416916847229, -8.171974182128906], + [2.152087450027466, 0.48134416341781616], + [-0.7551137804985046, 10.310781478881836], + [0.03660615533590317, -0.9185376167297363], + [-1.1680551767349243, 10.768244743347168], + [2.457942247390747, -4.707772254943848], + [-1.3077328205108643, 1.072648525238037], + [-0.5704514980316162, 9.780031204223633], + [-3.8302273750305176, -1.6196683645248413], + [-3.3651740550994873, 5.3845319747924805], + [-2.7900757789611816, -1.3156388998031616], + [-0.6151768565177917, -0.8307627439498901], + [1.565725564956665, 0.46419233083724976], + [-3.6226236820220947, -1.2127569913864136], + [0.4716717004776001, -7.570207595825195], + [-1.2293505668640137, 8.015668869018555], + [-3.3954403400421143, -1.2692391872406006], + [2.835667371749878, -4.976236820220947], + [-3.8101470470428467, 5.3139190673828125], + [-0.9554235339164734, 10.836349487304688], + [-2.2512576580047607, -1.7093183994293213], + [1.4445947408676147, 1.4119656085968018], + [1.1200001239776611, -6.3914384841918945], + [-0.22229862213134766, -1.3488186597824097], + [0.3498305082321167, -6.730765342712402], + [-0.7004435658454895, 10.196075439453125], + [3.259399175643921, -5.054415702819824], + [7.576903820037842, -2.3868296146392822], + [0.17334827780723572, -5.2547478675842285], + [-0.34876033663749695, 0.5702836513519287], + [-3.515246868133545, -1.3325508832931519], + [-1.977317452430725, 0.8778162002563477], + [5.309327602386475, 8.253642082214355], + [0.004534952342510223, -3.7407538890838623], + [8.429430961608887, -2.8373897075653076], + [2.757880687713623, -4.44930362701416], + [4.010024070739746, -3.622040033340454], + [5.010191440582275, -3.8107802867889404], + [7.394068241119385, -4.306612491607666], + [-3.22541880607605, -1.5461277961730957], + [-4.547810077667236, -1.8144906759262085], + [4.214802265167236, 7.512936115264893], + [0.24779170751571655, -5.913999557495117], + [-3.457872152328491, -2.614208221435547], + [-2.617342472076416, 5.321737289428711], + [0.9398996233940125, 4.34857702255249], + [-4.022273540496826, -2.885432720184326], + [-3.2822892665863037, -1.2335188388824463], + [-5.61254358291626, 4.530150890350342], + [-1.5901864767074585, 0.02039080485701561], + [6.702075481414795, -4.207530498504639], + [-0.697787344455719, 10.769171714782715], + [1.975020408630371, -4.349244117736816], + [-1.2814791202545166, 2.598449945449829], + [-3.784705638885498, -0.8194832801818848], + [-1.2827231884002686, 11.711674690246582], + [-4.686854362487793, 5.809377670288086], + [0.36301499605178833, -7.2785491943359375], + [2.26389479637146, -5.239253997802734], + [-3.659996509552002, -2.1182663440704346], + [-4.081984996795654, -1.5399991273880005], + [3.5288572311401367, 6.98274040222168], + [-0.7140575051307678, -1.1682032346725464], + [0.37615153193473816, -5.72549295425415], + [-5.943586826324463, -0.9194328188896179], + [-2.196244955062866, 0.11327904462814331], + [-5.093934535980225, 2.7647528648376465], + [-1.412290096282959, 12.042821884155273], + [0.6345183849334717, -8.054944038391113], + [0.007593803107738495, 5.064474105834961], + [0.407185435295105, -6.903996467590332], + [3.572801351547241, 6.636246681213379], + [-4.583484649658203, -1.9777894020080566], + [-3.6693613529205322, -2.889042615890503], + [-1.1310951709747314, 11.32559585571289], + [0.6405827403068542, -8.430368423461914], + [-4.256893634796143, -1.3410778045654297], + [1.4581241607666016, 0.2718937397003174], + [-4.852256774902344, -0.9442934989929199], + [2.247199535369873, -4.836716651916504], + [-0.3548259735107422, 9.037511825561523], + [-2.686333417892456, -1.2140260934829712], + [-3.269379138946533, -2.740849018096924], + [-4.466878890991211, 5.860285758972168], + [7.626542568206787, -2.893850564956665], + [-3.6216161251068115, -2.2598628997802734], + [-0.9819840788841248, 10.636857986450195], + [-5.187872409820557, 7.119436740875244], + [-0.7963032722473145, -0.8395251631736755], + [-0.8322862982749939, 10.614662170410156], + [-0.7953792810440063, -1.964098334312439], + [2.2285473346710205, 3.794416904449463], + [2.128652572631836, 4.44423770904541], + [0.4221697449684143, -6.67011833190918], + [-0.866506040096283, 10.72899055480957], + [-4.592267990112305, 6.446833610534668], + [0.5773935914039612, -0.9438997507095337], + [-3.547584056854248, 6.51622200012207], + [1.9453527927398682, 0.6566872596740723], + [0.8883692026138306, -0.2791316509246826], + [0.6036637425422668, -0.7020294070243835], + [-3.5885095596313477, -1.3156079053878784], + [7.251165866851807, -2.64913272857666], + [-1.986762523651123, -0.02378648892045021], + [0.39483940601348877, -6.544918060302734], + [-3.955548048019409, -2.5248606204986572], + [-0.2794024348258972, 8.00443172454834], + [1.7830445766448975, -4.790397644042969], + [1.9725685119628906, 0.871265172958374], + [-4.729644775390625, 6.401752471923828], + [-2.2264420986175537, 2.5054678916931152], + [-5.8523945808410645, 7.836132049560547], + [0.5883947014808655, -5.704442977905273], + [-1.7809901237487793, 0.5110002756118774], + [0.22920924425125122, -6.478498458862305], + [8.310790061950684, -2.997328281402588], + [-1.481180191040039, 1.6047130823135376], + [2.113231897354126, -0.4148554801940918], + [2.1717405319213867, 5.648531913757324], + [-4.446671009063721, 6.212855339050293], + [-0.8517407774925232, 9.7760009765625], + [-1.8260507583618164, 2.323791742324829], + [8.905964851379395, -2.732518434524536], + [-1.9035032987594604, 1.457328200340271], + [3.7452473640441895, 6.74367094039917], + [7.589544773101807, -2.3824455738067627], + [2.619534492492676, -4.712105751037598], + [-2.757803201675415, 0.19001132249832153], + [-3.028031587600708, 3.186614751815796], + [-2.0482571125030518, 0.31462562084198], + [-3.829948663711548, -2.4703211784362793], + [-0.6822139024734497, 9.956466674804688], + [1.767413854598999, -5.79616641998291], + [2.182997941970825, -3.795602798461914], + [-2.9704387187957764, -0.6104421019554138], + [-3.7229039669036865, -0.7575950026512146], + [6.0209832191467285, -4.10632848739624], + [0.4364432692527771, -5.730058670043945], + [-4.315231800079346, 6.593584060668945], + [-5.1312761306762695, -0.8060481548309326], + [2.662297487258911, -4.5128068923950195], + [-3.364661693572998, -0.933982789516449], + [3.086085081100464, -5.057533264160156], + [-3.7761614322662354, -2.7322840690612793], + [-3.1317667961120605, 6.3495283126831055], + [0.6491387486457825, -7.796597480773926], + [-0.12279904633760452, 7.199187755584717], + [0.1741527020931244, -3.9222030639648438], + [0.3907180428504944, -7.136719703674316], + [-4.573369026184082, 5.4438629150390625], + [-0.0574827566742897, -3.197340250015259], + [7.691267013549805, -2.71242618560791], + [-0.11784527450799942, -4.610040664672852], + [2.586695909500122, 6.124932765960693], + [4.776574611663818, -4.619497299194336], + [-3.672786235809326, -0.8646335005760193], + [-0.2299787998199463, 8.763934135437012], + [-3.803093433380127, -3.2726833820343018], + [-1.9123551845550537, 1.29756498336792], + [-0.1937960982322693, 8.637641906738281], + [-3.941585063934326, 6.177789688110352], + [0.0607619509100914, -4.18282413482666], + [6.103794574737549, -4.564908027648926], + [-4.20889949798584, -2.9759104251861572], + [2.462239980697632, 6.1866960525512695], + [1.5565581321716309, -5.959504127502441], + [0.9403100609779358, -0.02224387601017952], + [0.42403316497802734, -5.662282943725586], + [-4.503530025482178, -1.5101532936096191], + [-1.5027018785476685, 12.985013961791992], + [-0.7441979050636292, 10.368624687194824], + [-4.484663009643555, -2.2343597412109375], + [6.292796611785889, -4.5651068687438965], + [-4.434256553649902, 5.6965789794921875], + [-1.2961543798446655, 11.244458198547363], + [-1.6222262382507324, 1.370328664779663], + [-4.729517459869385, -2.801569700241089], + [-4.528397560119629, -1.3088971376419067], + [-2.5598390102386475, -2.3722901344299316], + [0.8193731904029846, -7.536510467529297], + [-0.8477658033370972, 9.839643478393555], + [-1.1059843301773071, 10.390724182128906], + [-3.558389902114868, -2.788409948348999], + [9.015257835388184, -3.046196222305298], + [-4.312738418579102, -1.8649505376815796], + [4.5843119621276855, 7.737602710723877], + [7.457424163818359, -2.4113407135009766], + [-0.7767574191093445, 10.212225914001465], + [-4.263659477233887, 5.556325435638428], + [-3.686096668243408, -3.063535451889038], + [0.4890012741088867, -5.527065753936768], + [9.025262832641602, -2.743751287460327], + [-0.14770102500915527, -2.520345449447632], + [0.6102535128593445, -5.674854278564453], + [-1.2708208560943604, 11.049047470092773], + [-3.130145311355591, -1.2211729288101196], + [0.5498530864715576, -7.5339555740356445], + [-4.141160011291504, -3.645343065261841], + [-1.5160748958587646, 5.859057426452637], + [-0.4717262387275696, 9.883696556091309], + [7.630344390869141, -2.2752952575683594], + [4.040035724639893, 6.82227897644043], + [3.0064284801483154, 5.675469398498535], + [1.1268645524978638, 6.387848854064941], + [-4.468050479888916, -1.365718960762024], + [8.237261772155762, -2.4319615364074707], + [-1.8334805965423584, 1.826891303062439], + [-5.545464515686035, -1.3313103914260864], + [-0.47766774892807007, 8.706473350524902], + [0.3016211986541748, -6.082864761352539], + [1.420722484588623, 4.9746413230896], + [-0.4701154828071594, -1.5938332080841064], + [-5.659308910369873, 7.431171417236328], + [1.310854196548462, 0.0757865309715271], + [-1.5533483028411865, -0.46620339155197144], + [-2.104327440261841, -2.103949546813965], + [-4.905351161956787, -4.03369140625], + [7.824930667877197, -3.0626628398895264], + [0.571051836013794, -6.207414150238037], + [-2.671190023422241, -0.7909871935844421], + [2.352734327316284, 5.590828895568848], + [-3.2795827388763428, -0.8595476150512695], + [-1.2418228387832642, 10.914741516113281], + [-2.322946071624756, -2.2499330043792725], + [0.5311766266822815, -5.305798530578613], + [-5.413241386413574, 7.3672590255737305], + [-1.0732474327087402, 11.03445816040039], + [-1.262671947479248, 10.20976734161377], + [-3.9058330059051514, -1.9179896116256714], + [6.719344139099121, -3.598494529724121], + [2.7545735836029053, 6.496226787567139], + [-3.9638214111328125, 5.494178771972656], + [4.231125354766846, -3.465367555618286], + [0.3486270606517792, 4.446551322937012], + [-3.790687322616577, -2.2543346881866455], + [1.0654377937316895, 0.22814533114433289], + [-0.22202378511428833, -1.3666050434112549], + [-5.157864570617676, 5.330188751220703], + [2.6845757961273193, -4.163142204284668], + [-2.0903122425079346, 2.073188304901123], + [7.075586795806885, -3.2590653896331787], + [0.5464587211608887, -7.216048240661621], + [-1.0487922430038452, 10.554189682006836], + [-0.9991587996482849, 10.812479019165039], + [-3.1206600666046143, -1.6544843912124634], + [1.334215760231018, -4.756947994232178], + [-3.606848955154419, 3.386554002761841], + [-1.8366339206695557, -1.1111310720443726], + [-0.20728200674057007, 8.525346755981445], + [2.4570844173431396, -4.144924163818359], + [7.8593316078186035, -2.9776008129119873], + [2.211867094039917, 6.198474407196045], + [3.787497043609619, 6.786890029907227], + [1.4478530883789062, 4.658312797546387], + [-3.406616449356079, -1.2774534225463867], + [-0.24104207754135132, 0.9827415943145752], + [7.867654800415039, -2.5293376445770264], + [1.171030879020691, -0.19738489389419556], + [6.998152732849121, -3.144782781600952], + [6.8380446434021, -3.4392125606536865], + [0.6072354912757874, -8.620268821716309], + [-3.7265608310699463, -2.3389437198638916], + [5.7841901779174805, -1.1640278100967407], + [-3.0682311058044434, -1.118599534034729], + [-3.1130452156066895, -2.3423120975494385], + [-3.3161702156066895, -1.0862233638763428], + [-0.7169981598854065, -0.8244526386260986], + [-4.14483118057251, -3.3749125003814697], + [0.20835968852043152, -4.380029678344727], + [-1.3678168058395386, 11.281975746154785], + [-0.9134590029716492, 11.469079971313477], + [0.7630682587623596, -0.5941256284713745], + [2.2108564376831055, -5.488323211669922], + [-3.724928140640259, -2.429081916809082], + [-5.143685817718506, 4.208556652069092], + [5.46447229385376, -2.3855535984039307], + [-1.7436566352844238, 1.0651839971542358], + [-4.809879779815674, 5.890923500061035], + [0.7316604256629944, -0.6269075274467468], + [0.3206140995025635, 3.9278500080108643], + [-3.1384117603302, -3.528872013092041], + [-3.8730928897857666, -1.1616719961166382], + [0.6522491574287415, -0.5154145359992981], + [-5.418869972229004, 4.317850589752197], + [9.73698902130127, -2.8944785594940186], + [-1.8146767616271973, 1.8774559497833252], + [0.3356854319572449, -6.208293914794922], + [2.8788249492645264, -4.481410980224609], + [1.9784770011901855, 5.009289264678955], + [0.8017992377281189, -8.119434356689453], + [0.6984031200408936, -5.86751651763916], + [-5.2174553871154785, 4.172550201416016], + [1.6635761260986328, -5.527897834777832], + [-0.07723546773195267, -3.264392375946045], + [-1.234020471572876, 10.88273811340332], + [0.724567711353302, -0.6714262962341309], + [0.5302539467811584, -8.093231201171875], + [-3.3243494033813477, 4.753806114196777], + [-4.5431742668151855, -1.766248345375061], + [-0.6776741147041321, 10.217144012451172], + [-4.605475425720215, -0.6252490282058716], + [-3.5624003410339355, -0.15451472997665405], + [-4.0484514236450195, -0.8624192476272583], + [0.23731762170791626, -6.398463726043701], + [0.639596700668335, -8.752616882324219], + [4.349796772003174, 7.048860549926758], + [7.9616217613220215, -3.315488576889038], + [-3.5852839946746826, -1.729931116104126], + [-3.8737192153930664, 5.262008190155029], + [-4.499416351318359, 5.440891265869141], + [0.10840096324682236, -4.901995658874512], + [1.9615623950958252, 0.9269469976425171], + [-3.3529765605926514, -3.21077823638916], + [0.44257426261901855, -6.1662983894348145], + [-0.05394098907709122, -5.177495956420898], + [-2.6100504398345947, 0.2744212746620178], + [0.740932285785675, -8.98814582824707], + [3.4627768993377686, 7.038827896118164], + [-2.3372442722320557, 5.266232967376709], + [-5.18028450012207, 5.4726243019104], + [8.769158363342285, -2.5816843509674072], + [0.27866649627685547, -6.720221996307373], + [-1.327396273612976, 11.717494010925293], + [0.8349264860153198, 1.5186550617218018], + [1.5632202625274658, -6.215834617614746], + [1.0024625062942505, 1.0127768516540527], + [-0.5003530383110046, 0.2780991196632385], + [-0.22264504432678223, -1.974554181098938], + [0.8271233439445496, -4.404505252838135], + [-2.0114359855651855, 5.590985298156738], + [-2.7041373252868652, -1.0267807245254517], + [-2.255751609802246, 2.840329647064209], + [-3.4830820560455322, -2.284372091293335], + [2.30700421333313, 5.326911926269531], + [-0.1774083375930786, -3.0085151195526123], + [-1.268149971961975, 11.147313117980957], + [0.4959214925765991, -7.545648097991943], + [-5.592517375946045, -4.913692474365234], + [-0.16504618525505066, -1.7891746759414673], + [8.672327995300293, -2.6225264072418213], + [-4.827480316162109, 5.870091915130615], + [0.45758920907974243, -6.625472068786621], + [0.643299400806427, -8.632401466369629], + [-5.397787570953369, -5.382420539855957], + [-3.9423131942749023, 4.139859676361084], + [-3.6580393314361572, 5.660633087158203], + [-1.8806066513061523, 1.9263205528259277], + [-3.4757959842681885, -4.03886604309082], + [-3.282381772994995, -2.5530636310577393], + [-0.39258432388305664, 8.694772720336914], + [2.7670130729675293, -4.536499500274658], + [7.654874324798584, -2.63435959815979], + [-5.266018867492676, -1.834861159324646], + [0.279409795999527, -4.343303680419922], + [-0.27396613359451294, -0.8555001020431519], + [0.7887064814567566, -6.541362285614014], + [-1.1670312881469727, 10.940309524536133], + [-4.072742938995361, -0.9999992251396179], + [-3.7191624641418457, -1.8195340633392334], + [5.622514247894287, -4.046290397644043], + [-5.010134696960449, -0.7769513726234436], + [2.682455539703369, -4.777558326721191], + [1.8901907205581665, -4.449346542358398], + [-4.502368450164795, -1.5575993061065674], + [9.144970893859863, -2.903442621231079], + [-3.032369375228882, -3.5863068103790283], + [-4.868897438049316, 7.4311723709106445], + [-4.1172919273376465, -0.891690731048584], + [-4.07322883605957, -2.9629971981048584], + [0.40275663137435913, -7.39207649230957], + [2.709232807159424, -4.624516487121582], + [-5.816771507263184, -0.9333154559135437], + [3.1957144737243652, -6.887207508087158], + [0.9756594300270081, 5.141622066497803], + [-2.7563798427581787, -0.692842423915863], + [-4.858748435974121, 5.663883209228516], + [-3.9975876808166504, -3.2450389862060547], + [-0.6502392888069153, 9.748153686523438], + [-0.39206236600875854, 9.978464126586914], + [-0.9726819396018982, 10.309883117675781], + [-0.764460027217865, -1.7154178619384766], + [0.6868759393692017, -4.19537878036499], + [4.621102333068848, 7.924631595611572], + [-0.5328599214553833, -1.3005582094192505], + [4.619748115539551, 7.207625389099121], + [-3.8996050357818604, -0.8424462080001831], + [2.0907342433929443, 0.5970463752746582], + [-3.1290392875671387, -4.716238021850586], + [2.2932960987091064, 4.123849868774414], + [-1.8868086338043213, 1.8306748867034912], + [5.227091312408447, -1.0807292461395264], + [8.071759223937988, -3.0623323917388916], + [-0.7391337752342224, 10.509712219238281], + [0.4562571048736572, -6.160290718078613], + [2.78257155418396, -4.358439922332764], + [2.9455578327178955, -5.196872711181641], + [2.800647258758545, -4.3118896484375], + [-3.0603435039520264, -2.8114354610443115], + [1.7873554229736328, 4.895193099975586], + [-0.9398209452629089, 10.713752746582031], + [-3.5827009677886963, -1.615702748298645], + [-0.052812881767749786, 0.7213839292526245], + [1.878612995147705, 0.9456667900085449], + [2.9388067722320557, -4.6931867599487305], + [1.9096062183380127, 4.449002265930176], + [-3.784261465072632, -2.038874387741089], + [-1.747666358947754, 1.2165446281433105], + [6.69781494140625, -2.3272907733917236], + [2.7685322761535645, -4.665016174316406], + [-0.31411993503570557, -0.7816869020462036], + [-3.597954034805298, -0.1643659472465515], + [-2.0641157627105713, 2.682595729827881], + [7.94490385055542, -2.32537579536438], + [-4.02812385559082, 5.728052139282227], + [-4.7972846031188965, -1.0767199993133545], + [-1.5712032318115234, 0.09030571579933167], + [-3.7691495418548584, -1.305073618888855], + [-4.71418571472168, 5.869420051574707], + [9.817519187927246, -2.9305105209350586], + [0.4163911044597626, -5.32943058013916], + [1.149535059928894, -5.747380256652832], + [9.110140800476074, -2.8518130779266357], + [-1.8154919147491455, 2.2965054512023926], + [5.919051170349121, 8.736563682556152], + [8.976754188537598, -2.7654201984405518], + [2.6965010166168213, 5.378370761871338], + [2.2529544830322266, 5.406519412994385], + [1.4223809242248535, -6.205997467041016], + [0.4478852152824402, -4.668499946594238], + [0.20008692145347595, -3.8907153606414795], + [0.6264915466308594, -7.541566371917725], + [2.4896414279937744, 4.969255447387695], + [6.768177509307861, -2.006141424179077], + [-3.002347230911255, -1.7614156007766724], + [0.006526283919811249, -5.500631332397461], + [-4.99877405166626, 5.09361457824707], + [2.0215108394622803, -4.654467582702637], + [4.9727959632873535, 7.743736743927002], + [2.8398187160491943, -4.465559005737305], + [-0.9160516858100891, 10.747910499572754], + [2.9200706481933594, -4.75933313369751], + [1.03739595413208, -0.3937346935272217], + [-3.7060739994049072, -2.6912076473236084], + [-5.400496006011963, 4.885210990905762], + [-1.9190902709960938, 0.3288995325565338], + [1.98954439163208, 5.014447212219238], + [0.4129636883735657, -0.6813455820083618], + [-1.8221752643585205, 1.782257080078125], + [1.4738202095031738, 0.6242921352386475], + [-3.708966016769409, -3.2786407470703125], + [-0.5541699528694153, 9.49137020111084], + [1.2950100898742676, 5.667078971862793], + [0.6945140361785889, -7.427669048309326], + [0.6129823327064514, -7.809623718261719], + [3.280663251876831, 6.393918991088867], + [0.6724227070808411, -8.24380874633789], + [8.4608793258667, -2.6672940254211426], + [2.179229497909546, 3.541987180709839], + [-5.377853870391846, 6.980352878570557], + [2.651768922805786, 5.951206207275391], + [-3.5938968658447266, 3.9230213165283203], + [-0.2534777522087097, -1.2779803276062012], + [6.42378568649292, -2.3877041339874268], + [0.6280255913734436, -8.260477066040039], + [0.5338639616966248, -7.920293807983398], + [2.960040330886841, -5.035781383514404], + [0.9032335877418518, -7.542980194091797], + [-5.258688449859619, 7.05955696105957], + [-3.5568153858184814, 5.501499652862549], + [-2.4610836505889893, 1.0628381967544556], + [6.325764179229736, -2.2730047702789307], + [1.996934413909912, 0.48682576417922974], + [-0.5435419678688049, 9.703478813171387], + [-3.506577968597412, -2.8458995819091797], + [-1.3758941888809204, 11.811354637145996], + [-0.4801174998283386, 10.213505744934082], + [-3.807515859603882, -3.1895439624786377], + [-1.9479774236679077, -0.2338937520980835], + [0.5851208567619324, -7.766305923461914], + [0.5561584830284119, -6.9461798667907715], + [1.0597715377807617, 0.6596060991287231], + [-0.026495732367038727, -3.837648391723633], + [2.79950213432312, -4.7260565757751465], + [-2.073476791381836, 0.5157065391540527], + [-1.288437843322754, 11.344076156616211], + [0.31746527552604675, -0.6833686232566833], + [-3.586178779602051, 5.345056533813477], + [-2.6187076568603516, 2.7679295539855957], + [-2.6689467430114746, -1.0199332237243652], + [2.572234630584717, 5.265487194061279], + [0.11292111128568649, -1.2162179946899414], + [1.5676393508911133, 5.775688171386719], + [-3.6490495204925537, -1.411739468574524], + [-1.7624931335449219, 2.1554112434387207], + [0.2822539210319519, -7.407623767852783], + [-3.9989054203033447, -3.2594263553619385], + [1.0004693269729614, 2.2441956996917725], + [1.333484411239624, -6.443958282470703], + [0.6402725577354431, -8.021347999572754], + [0.5136380195617676, -7.835481643676758], + [-1.1166131496429443, 11.070756912231445], + [2.6971757411956787, 6.113194465637207], + [0.4753994941711426, -4.1031494140625], + [-4.109606742858887, -2.818031072616577], + [0.7205668091773987, -7.774679660797119], + [-2.099785327911377, 1.0463427305221558], + [1.8452759981155396, 5.680293083190918], + [-4.615811824798584, -1.2319480180740356], + [0.0376504585146904, -4.454099655151367], + [2.970184564590454, 6.067829132080078], + [-1.875229001045227, 2.062314033508301], + [0.6364778280258179, -7.546230316162109], + [1.0614885091781616, -5.483145713806152], + [-1.6184124946594238, -0.8230587244033813], + [2.5010268688201904, 6.182146072387695], + [0.5809614062309265, -6.799346923828125], + [2.6641347408294678, -6.030984878540039], + [-0.753423810005188, 10.478163719177246], + [-0.4358143210411072, -0.009194601327180862], + [-3.7479660511016846, -1.95224928855896], + [-0.6035445332527161, 9.91617202758789], + [1.876046895980835, 4.662459850311279], + [6.930532932281494, -3.115522623062134], + [-0.12836924195289612, -0.6439051628112793], + [1.0992802381515503, -5.683236122131348], + [8.07532787322998, -2.3376688957214355], + [-0.0029341652989387512, 7.048107147216797], + [0.7686402201652527, -9.225341796875], + [-4.3874359130859375, -2.8705599308013916], + [-1.1757980585098267, 11.665616989135742], + [0.8440355658531189, -9.887872695922852], + [2.5039680004119873, -4.442910671234131], + [2.16573429107666, -3.300584554672241], + [-4.24171781539917, -2.0270609855651855], + [1.7867844104766846, -5.505827903747559], + [-2.0198581218719482, 2.262798309326172], + [0.6202390193939209, -8.301894187927246], + [3.617352247238159, 6.387974739074707], + [8.28657054901123, -2.3765432834625244], + [1.344774842262268, 0.5736771821975708], + [-1.4354357719421387, 1.58247971534729], + [-1.2379984855651855, 11.18135929107666], + [6.884830951690674, -2.6836884021759033], + [2.2758467197418213, 0.5111663937568665], + [1.525065302848816, -4.667010307312012], + [0.6971318125724792, -8.512293815612793], + [1.494493007659912, -5.297640323638916], + [-0.015823788940906525, -0.16660083830356598], + [-2.031538248062134, 2.235792398452759], + [-0.532665491104126, -1.217795491218567], + [-2.5572049617767334, 2.602055311203003], + [0.25951266288757324, -3.7545220851898193], + [-3.4101850986480713, -1.1164029836654663], + [-2.136200189590454, 1.634874939918518], + [6.08600378036499, -1.7077659368515015], + [-2.542023181915283, -1.111642837524414], + [5.431790828704834, -4.703604698181152], + [-3.385655641555786, -2.459634780883789], + [-1.7812001705169678, 1.0826324224472046], + [-4.953121662139893, -0.8580495715141296], + [4.1815714836120605, 6.963578224182129], + [-4.362903118133545, 6.075232982635498], + [-3.7375409603118896, -2.4113361835479736], + [-3.8932292461395264, -1.3198271989822388], + [0.330802321434021, -5.446615695953369], + [2.9385340213775635, -4.692680358886719], + [-3.955228805541992, -0.9983406662940979], + [1.5969617366790771, 2.5521204471588135], + [0.6576053500175476, -8.781267166137695], + [-2.1839096546173096, 3.386134386062622], + [-2.0747463703155518, 2.339369058609009], + [-1.8300495147705078, -0.3305377662181854], + [-3.6201083660125732, -1.259820818901062], + [8.25267505645752, -2.7752017974853516], + [-1.8604645729064941, 1.6312147378921509], + [5.38935661315918, -1.091169834136963], + [-4.052698612213135, -2.3582546710968018], + [-0.152698814868927, -1.0450478792190552], + [-4.782934188842773, 6.32666015625], + [2.954038381576538, -4.68791389465332], + [-3.1966521739959717, -2.500347137451172], + [-3.8651983737945557, -2.7144970893859863], + [-0.04308456927537918, -2.440791368484497], + [-5.226329803466797, 7.359107971191406], + [2.671722650527954, -4.570350646972656], + [2.322373390197754, -4.509775638580322], + [-1.5261932611465454, 12.495468139648438], + [0.45773202180862427, -5.687483310699463], + [0.03958266228437424, -4.062755584716797], + [-4.021053791046143, -1.6410846710205078], + [0.17608356475830078, -6.324813365936279], + [-0.003981836140155792, -3.073748826980591], + [3.1816399097442627, -4.912624835968018], + [-1.883424997329712, 0.4818936586380005], + [-4.896682262420654, -3.9645490646362305], + [-0.464477002620697, -1.0759538412094116], + [-1.2112610340118408, 11.046697616577148], + [-0.4893917441368103, 9.30528450012207], + [-4.097011089324951, 6.502078056335449], + [7.2843804359436035, -2.2847883701324463], + [6.491114139556885, -1.7686548233032227], + [3.0772125720977783, 5.916452407836914], + [8.492043495178223, -2.9037070274353027], + [2.3063957691192627, 5.446174621582031], + [-1.9043982028961182, -2.3170907497406006], + [0.6062079668045044, -7.0709123611450195], + [0.9924463629722595, -0.424890398979187], + [-4.4701666831970215, 6.500666618347168], + [-5.076916217803955, 5.09948205947876], + [-0.30345040559768677, -1.8333784341812134], + [-0.2993052303791046, -0.7846859693527222], + [0.5173453688621521, -7.814089775085449], + [-3.721294641494751, -2.4618427753448486], + [3.39886736869812, 6.698005676269531], + [-1.3239549398422241, 11.899246215820312], + [-1.6013572216033936, -1.10267174243927], + [9.499320030212402, -2.9402973651885986], + [-4.440784454345703, -1.4920759201049805], + [-3.488312244415283, -1.2093957662582397], + [3.1854488849639893, 6.540536880493164], + [7.2435760498046875, -3.1888110637664795], + [-4.95544958114624, 6.336256504058838], + [1.461059808731079, 0.4941772222518921], + [0.6940203905105591, -8.406548500061035], + [-1.7560487985610962, 13.95305061340332], + [2.477961778640747, -4.074246883392334], + [-0.8773972392082214, 11.224151611328125], + [2.7146403789520264, 4.337588310241699], + [-3.790005922317505, -2.2204091548919678], + [-4.313055515289307, 5.465373516082764], + [-1.3162201642990112, -2.811438798904419], + [-0.5924497842788696, 9.563355445861816], + [0.6539903879165649, -7.311561107635498], + [0.3752652406692505, -4.597702980041504], + [2.911186695098877, 6.511669158935547], + [1.4913218021392822, -0.02392083778977394], + [-1.6125500202178955, 2.0366575717926025], + [0.09447553008794785, -4.632262706756592], + [0.623593270778656, -7.132476329803467], + [2.843919038772583, -4.725066184997559], + [-2.7630422115325928, 2.073403835296631], + [-1.3363051414489746, 11.975221633911133], + [0.6259012222290039, -7.878237724304199], + [0.41104233264923096, -5.6685791015625], + [-5.0443572998046875, -1.6708065271377563], + [7.444404602050781, -2.7196707725524902], + [3.0486509799957275, -4.696566581726074], + [5.740570068359375, -3.1912405490875244], + [4.622185230255127, -4.316461563110352], + [9.10544490814209, -2.904280424118042], + [-1.3495830297470093, 11.949658393859863], + [0.846685528755188, -0.4308761954307556], + [-1.5574862957000732, -1.7152643203735352], + [6.6905951499938965, -3.52508807182312], + [-1.4353692531585693, 1.7390035390853882], + [-4.2139892578125, 6.3189544677734375], + [4.153079509735107, 7.047436714172363], + [0.5407791137695312, -0.43570756912231445], + [-3.3824069499969482, 5.965118885040283], + [-3.116830587387085, 5.346042633056641], + [8.120479583740234, -2.783205270767212], + [-0.2822834253311157, 9.098337173461914], + [7.814322471618652, -2.5688369274139404], + [1.7723727226257324, 5.104470252990723], + [-3.66007399559021, 6.228856086730957], + [2.3806233406066895, 0.7240733504295349], + [2.8283417224884033, 6.740478515625], + [2.2772881984710693, -3.862931251525879], + [-4.50811243057251, -0.5709400177001953], + [-3.7982208728790283, -2.259716510772705], + [5.739583492279053, -1.3412634134292603], + [0.46809661388397217, -7.979816436767578], + [0.6375628709793091, -8.026799201965332], + [-3.976485013961792, -1.2500019073486328], + [-3.260935068130493, 0.7136766910552979], + [1.7157666683197021, -4.99569845199585], + [-1.8075063228607178, 1.8337265253067017], + [-2.69311261177063, 4.847718238830566], + [5.667078495025635, -1.3225065469741821], + [-1.6108722686767578, 1.413522481918335], + [0.07077374309301376, -4.757847785949707], + [-5.077515125274658, -3.8818769454956055], + [6.584751605987549, -2.8732709884643555], + [-0.7821099758148193, 10.136187553405762], + [-3.7704432010650635, -0.6467702984809875], + [-2.845594644546509, -0.4745739698410034], + [0.6497716307640076, -6.919774055480957], + [-1.2348958253860474, 10.231740951538086], + [-0.3671727478504181, 7.431804180145264], + [-5.884253978729248, -1.1531444787979126], + [7.731246471405029, -2.2824220657348633], + [-1.4036654233932495, 12.116003036499023], + [2.835703134536743, -4.4482831954956055], + [-4.902010440826416, 6.321384429931641], + [2.835125207901001, -5.041404724121094], + [-3.406364679336548, -1.5130207538604736], + [2.664548635482788, -4.363164901733398], + [-3.2087838649749756, -2.0198118686676025], + [6.579967498779297, -3.655982494354248], + [0.5790203213691711, -8.123332977294922], + [7.478334426879883, -3.6254611015319824], + [5.11013650894165, -4.334998607635498], + [-1.1487549543380737, 5.622471809387207], + [-2.1003806591033936, 2.077073097229004], + [-1.2841852903366089, -0.03550190106034279], + [1.418269157409668, 2.429023027420044], + [0.8762256503105164, -5.858817100524902], + [0.5159623026847839, -4.969013690948486], + [-5.588353633880615, -0.9269389510154724], + [-0.5124037861824036, 10.417484283447266], + [-1.7200226783752441, 0.9700965881347656], + [1.004068374633789, -0.5157263875007629], + [2.52405047416687, -4.767777442932129], + [-3.413700819015503, 7.142117500305176], + [0.47997307777404785, -6.9761738777160645], + [0.608275830745697, -6.341858863830566], + [-3.8914668560028076, 4.625916004180908], + [3.5375590324401855, 6.746569633483887], + [6.870224475860596, -1.8949090242385864], + [-1.2511959075927734, 10.45798397064209], + [2.8205740451812744, -4.627126693725586], + [-1.3828905820846558, 1.3377952575683594], + [0.7238883376121521, -0.5244133472442627], + [1.4759876728057861, -5.130934715270996], + [-0.9450173377990723, -0.5032752752304077], + [1.6777260303497314, -5.152396202087402], + [0.8949801921844482, -0.13412818312644958], + [1.951737403869629, 5.340115547180176], + [-3.5239717960357666, -1.7853236198425293], + [0.8622555732727051, 3.1735293865203857], + [-1.8436145782470703, 1.7708665132522583], + [6.835677623748779, -4.0698113441467285], + [-0.16672319173812866, 9.46722412109375], + [-1.5863592624664307, 2.3123831748962402], + [-0.9525634050369263, 11.561044692993164], + [-1.2392170429229736, 10.983023643493652], + [-1.2337874174118042, 10.649463653564453], + [3.9516313076019287, 6.782373428344727], + [-1.61676025390625, 1.389886498451233], + [-0.40128546953201294, -1.2434018850326538], + [-3.7011189460754395, -0.9438140392303467], + [-2.9935996532440186, 1.2661956548690796], + [-5.604910850524902, -0.9380879998207092], + [4.550062656402588, 7.542576789855957], + [-4.194273471832275, -2.6748580932617188], + [-4.116876125335693, -1.7317982912063599], + [-4.8810930252075195, -0.9001277685165405], + [-4.30372428894043, -1.3393044471740723], + [3.0318167209625244, 6.443480968475342], + [-2.736112594604492, -0.3364097476005554], + [-3.5765111446380615, -1.011773705482483], + [0.5262981653213501, -7.216772079467773], + [-0.8288584351539612, 10.07010269165039], + [-1.3764405250549316, 1.4855469465255737], + [3.005511522293091, 5.593879699707031], + [-1.542397141456604, 12.698795318603516], + [1.2691922187805176, -4.624972343444824], + [-0.2206118404865265, -1.591004490852356], + [-4.19533109664917, -2.466919422149658], + [-1.1545777320861816, 10.46473217010498], + [-2.942082166671753, 3.1974680423736572], + [2.1414597034454346, 5.1389360427856445], + [0.7659111618995667, -6.9513397216796875], + [-0.20693838596343994, -2.3765757083892822], + [0.8698150515556335, -9.050161361694336], + [-3.781435251235962, -0.7814430594444275], + [-2.1533191204071045, 5.724209308624268], + [-1.0830233097076416, -1.2412426471710205], + [0.3744581341743469, -6.1530656814575195], + [-0.2974300980567932, 7.445036888122559], + [-4.315959930419922, -2.5414178371429443], + [-2.5877597332000732, 6.254905700683594], + [-4.826027870178223, 4.048011302947998], + [0.6131372451782227, -8.308404922485352], + [-5.430679798126221, -0.8255720138549805], + [1.7799185514450073, -5.481673240661621], + [0.26527056097984314, 0.43561190366744995], + [2.7838573455810547, -4.953547477722168], + [-1.2615753412246704, 1.1563315391540527], + [3.932429552078247, 7.066519260406494], + [-0.26312771439552307, -1.0404772758483887], + [8.101916313171387, -2.3504536151885986], + [-1.1193783283233643, 11.229740142822266], + [2.0998382568359375, 5.864673614501953], + [-4.538929462432861, -1.5076764822006226], + [6.1700873374938965, -4.378380298614502], + [-3.4301650524139404, -1.1071796417236328], + [-4.799263000488281, 4.983842372894287], + [-3.193006753921509, -1.1721628904342651], + [0.603980541229248, -1.9395300149917603], + [6.443966865539551, -2.625972270965576], + [1.2810741662979126, -5.2049360275268555], + [1.9575769901275635, 1.3231559991836548], + [-4.123108386993408, 6.581453323364258], + [-4.943686008453369, -3.309342622756958], + [-1.201106071472168, 1.8468660116195679], + [-5.106283664703369, 6.446329593658447], + [4.03969144821167, 6.915207862854004], + [0.4065764546394348, -0.9019811749458313], + [0.987332284450531, -0.6360888481140137], + [8.548047065734863, -2.8986268043518066], + [-3.9643373489379883, -2.5525052547454834], + [0.13878440856933594, 5.064730167388916], + [-1.0778192281723022, -1.207825779914856], + [-0.9860976934432983, 10.24913215637207], + [-5.351126194000244, -0.9904391169548035], + [-2.0103840827941895, 4.717754364013672], + [1.0569782257080078, 6.175251007080078], + [-4.576756000518799, 7.114843368530273], + [7.488475322723389, -2.020393133163452], + [-5.026636123657227, -4.85899543762207], + [2.6991286277770996, -4.606418609619141], + [-4.742007732391357, 6.684697151184082], + [-0.9159062504768372, 10.281586647033691], + [0.2404373288154602, -5.224661827087402], + [7.955800533294678, -2.5497281551361084], + [-0.6069501042366028, -0.5826866626739502], + [-4.339338779449463, -1.7531418800354004], + [-1.0859229564666748, 0.987836480140686], + [2.796002149581909, -4.46543025970459], + [-1.2080448865890503, 10.914912223815918], + [-1.7927801609039307, 0.026288744062185287], + [-0.22441506385803223, -1.080247402191162], + [-0.3501436412334442, -0.6174811124801636], + [5.65833044052124, -3.2475552558898926], + [7.914273738861084, -2.2970259189605713], + [0.7779605984687805, -5.053369045257568], + [-1.5606321096420288, 12.701727867126465], + [3.5630264282226562, 6.768044471740723], + [3.4166157245635986, 6.370234489440918], + [0.0501784011721611, 9.070547103881836], + [-3.295243978500366, 5.335129261016846], + [-1.2339972257614136, 0.7402775883674622], + [-1.8465831279754639, 0.836139440536499], + [0.8458263278007507, -6.343262195587158], + [-3.937363386154175, 3.8754475116729736], + [7.347917079925537, -4.358427047729492], + [-2.8247756958007812, -0.9793699979782104], + [6.777786731719971, -2.823072671890259], + [0.5369966626167297, -7.6274566650390625], + [0.4503690004348755, 1.7733234167099], + [-0.1765715777873993, -1.2042304277420044], + [-2.7644031047821045, 6.51679801940918], + [1.035325288772583, 5.1111345291137695], + [-1.0199384689331055, 10.354631423950195], + [-2.1877377033233643, 5.404047966003418], + [7.72738790512085, -2.203009843826294], + [0.733653724193573, -7.253373622894287], + [0.24467188119888306, -5.665121078491211], + [4.989816188812256, -4.112967491149902], + [-3.6640021800994873, -1.2343645095825195], + [-0.9014564752578735, -2.363945245742798], + [0.9309529662132263, -4.846345901489258], + [4.395281791687012, 7.615581512451172], + [6.373182773590088, -2.019207000732422], + [-4.452085971832275, -0.935219407081604], + [-1.2562931776046753, 11.000972747802734], + [2.2278313636779785, 5.0350775718688965], + [-0.5873254537582397, 10.103534698486328], + [-3.1639978885650635, 3.2584121227264404], + [6.607402324676514, -3.9184067249298096], + [2.942577838897705, 6.568276882171631], + [-1.0015860795974731, 9.112037658691406], + [2.5375478267669678, -4.492136001586914], + [0.6102849841117859, -7.474525451660156], + [2.232133150100708, 5.965669631958008], + [-4.037182807922363, -1.3717591762542725], + [1.7559723854064941, 0.9725371599197388], + [0.6928980946540833, -0.4008467197418213], + [0.31609994173049927, -5.87914514541626], + [-2.418442964553833, 2.19565749168396], + [-1.8254387378692627, 1.2333526611328125], + [1.8527617454528809, 2.97275447845459], + [-0.9906005263328552, 10.282361030578613], + [2.893903970718384, -4.504744052886963], + [6.377510070800781, -1.4439493417739868], + [2.421090841293335, -4.612851142883301], + [-1.3467613458633423, 11.909833908081055], + [0.6141170263290405, -8.324464797973633], + [0.40285158157348633, -4.9361348152160645], + [2.5859458446502686, -4.43905782699585], + [0.8893207907676697, -5.373219013214111], + [6.489455699920654, -1.6584727764129639], + [0.8063036799430847, -3.8689746856689453], + [-4.452758312225342, -1.1145590543746948], + [2.8426101207733154, -4.777554512023926], + [-3.2076079845428467, -0.9612102508544922], + [2.8910205364227295, -4.694252967834473], + [1.7430152893066406, -4.529972076416016], + [8.629182815551758, -3.2840473651885986], + [1.2368974685668945, -4.781073570251465], + [0.8160171508789062, -6.930140495300293], + [-0.8986253142356873, 9.624700546264648], + [0.03797995299100876, -5.225325584411621], + [6.696401119232178, -1.9944154024124146], + [6.787597179412842, -2.5501577854156494], + [-4.740660667419434, 6.545027732849121], + [1.3328642845153809, -0.06533759832382202], + [-5.2620368003845215, 3.728942632675171], + [2.7670350074768066, -4.34261417388916], + [-2.328779697418213, -1.4868086576461792], + [2.9465978145599365, -5.030603885650635], + [1.7663471698760986, 4.590924263000488], + [-2.4632155895233154, 0.834129273891449], + [0.08904431015253067, -3.351405382156372], + [-3.6414897441864014, 6.84976863861084], + [2.823478937149048, -4.522589206695557], + [2.8673839569091797, -4.573144435882568], + [-3.928954601287842, -1.2435804605484009], + [3.3361217975616455, 6.955229759216309], + [-4.754608631134033, -3.758636474609375], + [2.397641897201538, -4.711148262023926], + [0.8067539930343628, -5.802088737487793], + [-4.017375946044922, -2.418199300765991], + [-1.9880146980285645, 1.9231970310211182], + [-1.2657701969146729, 11.280538558959961], + [-1.9357887506484985, 1.912623405456543], + [-1.9526574611663818, 1.7694042921066284], + [-3.7634308338165283, 6.006039619445801], + [0.6558220982551575, -0.5355076789855957], + [-3.922427177429199, -0.6111398935317993], + [2.167742967605591, -4.964589595794678], + [-3.816654920578003, -0.7156974673271179], + [-0.14338555932044983, -3.15358304977417], + [2.2081925868988037, -4.199273109436035], + [-1.6610126495361328, 1.6950284242630005], + [1.0298798084259033, -0.4419533610343933], + [0.594511091709137, -7.713289737701416], + [6.984631061553955, -2.1092684268951416], + [1.6292386054992676, 1.9317303895950317], + [4.231820106506348, -6.160487174987793], + [1.255176067352295, 5.42311954498291], + [-1.2112219333648682, 11.056926727294922], + [5.5048394203186035, -4.480946063995361], + [-5.404862880706787, 6.161450386047363], + [8.179764747619629, -3.4171903133392334], + [1.2784759998321533, 1.8545855283737183], + [-3.8164265155792236, -2.3304195404052734], + [7.265548229217529, -2.8624894618988037], + [2.6934597492218018, -5.078088760375977], + [2.651109457015991, -4.457921981811523], + [2.0784261226654053, -4.90407657623291], + [1.0757379531860352, -3.7733113765716553], + [1.2380434274673462, -5.1808576583862305], + [2.599350690841675, -4.3373026847839355], + [3.170142412185669, -4.9009199142456055], + [0.3386865556240082, -5.147134780883789], + [-2.386848211288452, -0.6697565317153931], + [6.068450927734375, -1.4224531650543213], + [2.0495612621307373, 5.087095260620117], + [-4.759868144989014, -0.23253530263900757], + [-1.5179741382598877, -0.9427950382232666], + [-1.8982794284820557, 2.3990848064422607], + [-4.081480503082275, -0.989357590675354], + [-1.170715093612671, 11.096175193786621], + [-4.0930399894714355, -3.1275055408477783], + [-0.7786216139793396, 0.7103361487388611], + [-2.0690643787384033, -1.0695422887802124], + [-4.983464241027832, 6.254195690155029], + [6.603259086608887, -1.5798856019973755], + [0.6546541452407837, -6.362155437469482], + [-3.6372222900390625, 3.670118570327759], + [3.492865562438965, 6.429093360900879], + [-4.627587795257568, -1.1775014400482178], + [4.212231636047363, 6.846363067626953], + [-2.1141579151153564, 1.631541132926941], + [-2.1458075046539307, -2.3679721355438232], + [2.1243345737457275, 5.833443641662598], + [5.721311569213867, -1.6138668060302734], + [-3.51139497756958, -1.0051285028457642], + [-1.8969758749008179, 1.3276273012161255], + [1.3935285806655884, -5.756836891174316], + [-1.8165391683578491, 1.3212417364120483], + [-3.8846771717071533, -0.4606614112854004], + [-4.96783447265625, 5.060802459716797], + [7.946244716644287, -2.825009822845459], + [-0.028100796043872833, -4.718074321746826], + [0.7637701034545898, -8.515412330627441], + [-1.874950885772705, 0.6303730010986328], + [-0.7553207278251648, 10.095842361450195], + [-1.868019461631775, 2.0730865001678467], + [-4.178663730621338, -2.351840019226074], + [4.860599517822266, 7.880073547363281], + [3.6339797973632812, 6.935213565826416], + [-4.858776569366455, 6.332152843475342], + [-1.3081332445144653, 11.716371536254883], + [0.13336482644081116, -5.1598286628723145], + [9.20849323272705, -2.783900022506714], + [3.8406765460968018, 7.1293439865112305], + [-0.2510230541229248, 9.455034255981445], + [-1.3619160652160645, -1.207927942276001], + [-0.31220757961273193, 8.260531425476074], + [-3.845768690109253, -2.7200167179107666], + [-5.096045970916748, -1.0987502336502075], + [-1.5472288131713867, 12.697199821472168], + [-4.0761027336120605, -2.145688056945801], + [-5.635990619659424, 7.366449356079102], + [2.4133474826812744, -4.268263816833496], + [-2.4467544555664062, -1.3529154062271118], + [0.3431317210197449, -6.591976165771484], + [-0.48586881160736084, 9.553104400634766], + [0.9137465357780457, 0.8591733574867249], + [2.3158631324768066, -3.596074104309082], + [0.783592939376831, -8.069339752197266], + [0.974869430065155, -0.6384023427963257], + [2.7681472301483154, -4.525235176086426], + [7.863720417022705, -2.6637747287750244], + [7.372750759124756, -2.406487226486206], + [0.06508051604032516, 3.652674913406372], + [1.5653700828552246, -4.451470375061035], + [-4.620157718658447, -2.6219370365142822], + [-3.648136854171753, -1.7978767156600952], + [-4.176090717315674, 3.233055353164673], + [-0.45509034395217896, 10.547855377197266], + [-4.315776348114014, 5.897839069366455], + [-0.44728416204452515, 6.015250205993652], + [6.0749382972717285, -3.5563535690307617], + [2.100013017654419, -5.376541614532471], + [1.0112433433532715, 2.9690945148468018], + [7.865860462188721, -2.490445852279663], + [-1.4886243343353271, 12.591788291931152], + [-0.6403001546859741, -0.8201385736465454], + [2.134251594543457, 3.1759979724884033], + [2.7655813694000244, -4.653367042541504], + [-1.189012885093689, -2.241776943206787], + [-4.899937152862549, 5.963044166564941], + [1.233374834060669, -0.23895515501499176], + [0.59397953748703, -7.269031524658203], + [6.189083576202393, -4.332981109619141], + [-0.6885133385658264, 6.674973964691162], + [0.18638908863067627, -6.437908172607422], + [-4.067996978759766, -1.2949339151382446], + [-0.8983709216117859, 10.809617042541504], + [2.928891658782959, -5.105475425720215], + [2.5895888805389404, -4.534304141998291], + [-3.0948846340179443, -0.346799373626709], + [-0.6948574781417847, 0.4084286391735077], + [-5.236953258514404, 7.1889801025390625], + [-1.861359715461731, 1.6932259798049927], + [7.322723865509033, -2.285348653793335], + [-4.189271450042725, -3.058654308319092], + [-4.3240838050842285, -1.070794701576233], + [0.5771949291229248, -6.6855998039245605], + [2.472900152206421, -4.50673246383667], + [1.602094292640686, 5.205394744873047], + [-1.2134504318237305, 1.4970204830169678], + [-0.34440022706985474, 9.35303020477295], + [3.381995916366577, 6.1113505363464355], + [-0.6600527763366699, 9.241140365600586], + [1.1938830614089966, 2.597846269607544], + [0.6709269285202026, -6.877638816833496], + [6.289512634277344, -3.118802785873413], + [2.600433588027954, -5.03852653503418], + [-2.975548505783081, -0.9813462495803833], + [4.146366596221924, 7.416316032409668], + [-4.784887790679932, 7.116321563720703], + [-3.547255754470825, 4.274674892425537], + [-3.2912256717681885, 4.555087089538574], + [-4.601772785186768, -0.5569472312927246], + [-0.725662887096405, 9.948528289794922], + [-0.4407254159450531, -1.1147942543029785], + [1.0692633390426636, -0.4417177736759186], + [-2.821756362915039, 3.540914297103882], + [-0.09215245395898819, -3.0910143852233887], + [-4.859874248504639, 2.051713466644287], + [1.9678051471710205, -5.974316596984863], + [0.5254814624786377, -6.886406421661377], + [1.351457118988037, -3.773892641067505], + [0.6940193176269531, -8.167407989501953], + [7.314664840698242, -2.2511684894561768], + [-0.7014166116714478, 9.637815475463867], + [1.8165194988250732, 5.351550102233887], + [2.396857738494873, -4.3584699630737305], + [-3.0185117721557617, 0.13314706087112427], + [2.0918209552764893, -4.946761608123779], + [-3.6753249168395996, 5.724841594696045], + [-0.8011214137077332, 9.807037353515625], + [-1.3026363849639893, 1.3012281656265259], + [-4.872269630432129, 6.225944519042969], + [-1.1019216775894165, 11.746512413024902], + [2.916774034500122, -4.778409004211426], + [0.36105281114578247, -5.373013973236084], + [-1.077789306640625, 10.617274284362793], + [2.744260549545288, -4.707396507263184], + [1.558678388595581, 4.852518081665039], + [-3.493671178817749, -1.5686936378479004], + [-4.6102705001831055, 5.771017074584961], + [-2.2808609008789062, -0.7761319875717163], + [6.146189212799072, 9.00551700592041], + [-3.4065754413604736, -0.8724237680435181], + [0.45091140270233154, -4.786664009094238], + [-1.071326494216919, 11.303557395935059], + [-5.190735340118408, -0.7610232830047607], + [-3.2396063804626465, -1.5160959959030151], + [3.051154375076294, -4.832514762878418], + [-4.3737101554870605, -2.8875293731689453], + [0.4074585437774658, -5.715326309204102], + [-2.12689208984375, -1.584084391593933], + [-1.9687540531158447, 0.7535739541053772], + [-3.229400396347046, -1.4059582948684692], + [-1.8344590663909912, 1.4728540182113647], + [-2.538926124572754, 2.940153121948242], + [-3.5537993907928467, -1.71978759765625], + [-3.9947669506073, -3.3151752948760986], + [-2.4538216590881348, -0.775416374206543], + [-4.611450672149658, -2.2272167205810547], + [-4.359988689422607, 5.149036407470703], + [2.6827199459075928, -4.588930130004883], + [5.3144612312316895, -3.3540143966674805], + [-2.01530385017395, 1.207302212715149], + [6.1155500411987305, -3.052968740463257], + [-3.316777467727661, -0.435596764087677], + [-2.771390676498413, -1.8894647359848022], + [-0.0657961443066597, -1.2718738317489624], + [-3.8711178302764893, -0.25658202171325684], + [2.747211456298828, -4.318269729614258], + [-0.8488714098930359, 11.225425720214844], + [-4.913103103637695, 6.5097808837890625], + [-1.6074397563934326, 0.9553736448287964], + [8.192292213439941, -2.7119295597076416], + [-0.8567780256271362, -2.8854634761810303], + [-4.5017595291137695, -0.342551589012146], + [0.8083649277687073, -7.487351417541504], + [-5.536283016204834, 7.279728889465332], + [6.437350749969482, -4.615910053253174], + [4.886504173278809, 7.820263385772705], + [3.179077386856079, -4.9499616622924805], + [0.4243320822715759, 9.305208206176758], + [-3.1679131984710693, 3.4469411373138428], + [-4.136049747467041, -2.721186399459839], + [-3.6498734951019287, -2.6235976219177246], + [-2.943915367126465, -0.18725162744522095], + [-1.1755998134613037, 11.489602088928223], + [-2.9344370365142822, 5.903806686401367], + [0.6143949627876282, -8.222701072692871], + [-0.08475903421640396, -1.4157227277755737], + [4.119207859039307, 7.398920059204102], + [-1.9618842601776123, 5.242369174957275], + [-3.9515085220336914, -2.672806978225708], + [1.9824423789978027, 6.1569366455078125], + [-1.8171474933624268, 1.1851598024368286], + [-2.001383066177368, 0.18445375561714172], + [-1.1609238386154175, 1.1738697290420532], + [2.3367018699645996, -4.057676792144775], + [-3.080653429031372, -1.4382389783859253], + [-5.174346923828125, 6.596220970153809], + [-5.112509727478027, -0.8519846200942993], + [-3.903330087661743, -2.5476250648498535], + [-0.9466174840927124, 10.477481842041016], + [-0.053183265030384064, -4.744807243347168], + [-1.2226982116699219, -2.0034797191619873], + [-1.6198554039001465, 1.1989413499832153], + [-3.5010392665863037, -2.36102557182312], + [5.97591495513916, -1.1405402421951294], + [1.4536422491073608, 2.7159130573272705], + [8.952494621276855, -2.709630250930786], + [0.03889387100934982, 0.3044045567512512], + [-1.9057055711746216, 1.59385085105896], + [7.462175369262695, -3.3545265197753906], + [0.21847987174987793, -5.259782791137695], + [-1.8225613832473755, 2.291731357574463], + [7.611489772796631, -2.2049574851989746], + [2.5715370178222656, 5.781249046325684], + [0.4146973490715027, -6.3696088790893555], + [2.2068099975585938, -4.2222371101379395], + [-0.24534016847610474, 8.803287506103516], + [-4.9945292472839355, 5.2806830406188965], + [1.1526330709457397, 1.7334247827529907], + [-0.7039724588394165, 7.960601806640625], + [-3.6183011531829834, 6.387343883514404], + [2.5875840187072754, -4.4035162925720215], + [-0.6625992059707642, 9.94040298461914], + [7.888280391693115, -2.3964731693267822], + [0.6751168370246887, -8.32090950012207], + [1.5476887226104736, 2.855349540710449], + [0.7189339995384216, -9.274592399597168], + [0.9114951491355896, -6.006524085998535], + [1.8093148469924927, -4.687653541564941], + [-1.9693430662155151, 1.7369626760482788], + [-3.7077505588531494, -1.337004542350769], + [0.711395800113678, -6.97752046585083], + [7.773064136505127, -2.2233927249908447], + [0.29871028661727905, -6.953835964202881], + [2.836151361465454, -4.729202747344971], + [-0.2477254867553711, 8.25862979888916], + [2.8759968280792236, -4.7105512619018555], + [1.9806172847747803, 4.531773567199707], + [-3.690664052963257, -2.2574918270111084], + [-1.3393011093139648, 12.046747207641602], + [4.375742435455322, 0.45734286308288574], + [0.8259662389755249, -7.8977131843566895], + [7.1819281578063965, -2.4765493869781494], + [2.233405828475952, -3.5549590587615967], + [1.5616391897201538, -5.4286298751831055], + [-5.109254360198975, 3.8008229732513428], + [1.8553338050842285, -0.11050637066364288], + [-3.5416414737701416, 4.68144416809082], + [-3.4289324283599854, -3.1560378074645996], + [-3.6500349044799805, -1.90397310256958], + [6.477967739105225, -2.1321022510528564], + [-4.1281352043151855, -1.440517783164978], + [2.7878785133361816, -5.083632469177246], + [0.7429616451263428, -5.316032409667969], + [2.040492534637451, -6.852912902832031], + [0.3710748553276062, -7.249584197998047], + [2.888753652572632, -4.6456298828125], + [0.813528835773468, -8.698057174682617], + [0.9858754277229309, -7.217146873474121], + [7.415825366973877, -2.3723232746124268], + [0.5773103833198547, -8.236610412597656], + [-2.857510566711426, 3.341892957687378], + [8.541258811950684, -2.7530548572540283], + [5.370439529418945, -3.440903425216675], + [3.0503551959991455, -4.776645660400391], + [-3.837571382522583, 4.599126815795898], + [7.212281703948975, -2.641282320022583], + [-2.978283643722534, 5.278125762939453], + [1.8972593545913696, 0.6102468371391296], + [2.5750696659088135, 5.60629940032959], + [0.6251786351203918, -8.119491577148438], + [0.7032589316368103, -6.145975112915039], + [0.32615047693252563, -5.641664505004883], + [-1.074028730392456, 10.623557090759277], + [-1.9925662279129028, -0.9726834297180176], + [0.44597524404525757, -4.931998252868652], + [2.4307730197906494, 5.471634387969971], + [-4.098232746124268, -2.5371856689453125], + [-4.470883369445801, -3.2377936840057373], + [0.8906809687614441, -8.048807144165039], + [10.56389331817627, -3.119199514389038], + [-3.7439119815826416, 5.300164222717285], + [8.014849662780762, -3.0360615253448486], + [1.144392728805542, -5.464000701904297], + [-0.7443838715553284, 10.404415130615234], + [-2.8264968395233154, 5.511179447174072], + [-0.5956798195838928, 10.262907028198242], + [2.5218660831451416, -3.9872636795043945], + [-3.468867540359497, -1.8946584463119507], + [3.2136964797973633, 6.315635681152344], + [-0.49409180879592896, 9.90416145324707], + [-3.7254607677459717, -2.605761766433716], + [-2.5850260257720947, 2.0383689403533936], + [-1.58255136013031, -1.275978446006775], + [0.2674989700317383, -5.278184413909912], + [0.5808552503585815, -7.842963218688965], + [2.6797163486480713, -4.667043209075928], + [-4.3034162521362305, -1.3609055280685425], + [-3.490478992462158, -0.6824526190757751], + [1.0579838752746582, 2.379772901535034], + [-4.4896464347839355, -3.3512561321258545], + [-3.8692352771759033, -1.0389028787612915], + [-4.441379070281982, 1.0986098051071167], + [2.717942714691162, 0.5148439407348633], + [5.136789798736572, -1.227707028388977], + [-2.7463865280151367, -1.5728727579116821], + [-3.3665859699249268, 5.589148998260498], + [7.85579776763916, -3.3645179271698], + [-4.5167646408081055, 4.8549323081970215], + [-3.4157345294952393, -0.7212646007537842], + [-0.747049868106842, 1.0543889999389648], + [2.0989036560058594, 5.881695747375488], + [-4.125392436981201, -1.0771793127059937], + [0.5237038731575012, -0.8498419523239136], + [-1.7446820735931396, 0.43898043036460876], + [-4.209303855895996, 5.852283477783203], + [-5.599769115447998, 7.461266994476318], + [4.448675632476807, -3.791236162185669], + [6.722737789154053, -2.41723895072937], + [-0.5449923276901245, -2.371476650238037], + [-0.7711721062660217, -2.255321979522705], + [1.5776582956314087, 0.9876362085342407], + [0.9536774754524231, -5.619870185852051], + [-1.6571078300476074, 2.4329442977905273], + [7.9529900550842285, -2.516667127609253], + [-4.882392406463623, -0.8976690173149109], + [-0.7197016477584839, 0.9432392716407776], + [0.3948940634727478, -5.104823112487793], + [-1.4605358839035034, 12.290910720825195], + [3.053065538406372, -0.8841739892959595], + [9.059996604919434, -2.862128496170044], + [7.364687442779541, -2.811673402786255], + [-0.1506468653678894, 7.7531633377075195], + [0.6032862067222595, -2.4808309078216553], + [-3.433802366256714, 4.355688095092773], + [1.896503210067749, 0.7220484018325806], + [2.9468419551849365, -4.781428337097168], + [-1.4070426225662231, 12.216703414916992], + [0.5372203588485718, -7.396740913391113], + [2.350316047668457, -3.6854164600372314], + [2.318368673324585, -4.278038024902344], + [1.2847193479537964, -5.655798435211182], + [-1.8648751974105835, -0.6036584973335266], + [-4.722951412200928, 0.09543275833129883], + [-1.081520676612854, 0.26433566212654114], + [-1.440264105796814, 11.626578330993652], + [-4.00038480758667, 4.825068950653076], + [6.264349460601807, -4.226271629333496], + [-4.131104946136475, -1.1823538541793823], + [7.196617603302002, -1.917338490486145], + [-2.17646861076355, 2.2064530849456787], + [-0.7421353459358215, -0.823425829410553], + [0.319349467754364, -5.820694923400879], + [0.3353050947189331, -5.603462219238281], + [-3.7951722145080566, -1.2456856966018677], + [0.21936368942260742, -3.7058351039886475], + [1.0277975797653198, -0.2594220042228699], + [0.7689690589904785, -7.722711086273193], + [-1.1323833465576172, -0.27427032589912415], + [-3.787302255630493, -0.6331930160522461], + [-5.546431064605713, 6.325239181518555], + [-3.729886054992676, -2.8607800006866455], + [8.014307022094727, -2.68717360496521], + [-5.022054195404053, 5.110661029815674], + [-3.793518304824829, 4.372529029846191], + [-5.284084320068359, -0.5643554925918579], + [-3.131953716278076, -1.282688021659851], + [-5.586119651794434, -0.8526116609573364], + [-3.6023483276367188, -1.1522661447525024], + [0.6739009022712708, -6.833696365356445], + [0.4071964621543884, -5.875491142272949], + [-0.8052130341529846, 10.469470977783203], + [-3.417593002319336, -0.8082837462425232], + [0.4702455401420593, -7.264796733856201], + [0.47232919931411743, -7.189767837524414], + [-1.0839388370513916, 11.273731231689453], + [-4.52101993560791, -2.947493076324463], + [1.6434636116027832, 1.4182862043380737], + [-2.0023181438446045, 1.9636839628219604], + [-4.6157755851745605, -1.0240850448608398], + [1.0728527307510376, 5.277109146118164], + [0.33341819047927856, -6.186810493469238], + [-3.0472798347473145, 0.3212294578552246], + [0.5289164185523987, -7.61670446395874], + [-4.618757724761963, 5.863117694854736], + [-3.2777647972106934, -1.2624655961990356], + [-3.1539762020111084, -0.39652448892593384], + [7.780271530151367, -2.5274758338928223], + [-2.25815486907959, -3.051776170730591], + [5.7832159996032715, -1.1927767992019653], + [0.06169431656599045, -0.8610864281654358], + [0.739527702331543, -7.747518539428711], + [-0.9425510168075562, 1.319340467453003], + [8.024565696716309, -3.0476014614105225], + [-1.862464189529419, 1.8655728101730347], + [-1.2771146297454834, 11.34959888458252], + [-5.155331611633301, -0.9539228677749634], + [-1.8582335710525513, 2.396531105041504], + [2.1718151569366455, 5.226151466369629], + [3.874847650527954, -3.570406675338745], + [0.7150580286979675, -0.6339718699455261], + [0.40363702178001404, -4.506874084472656], + [-3.6821725368499756, -2.53139591217041], + [-2.037456512451172, 2.414440393447876], + [0.7380653619766235, -0.1969570368528366], + [-1.234078049659729, 11.220731735229492], + [-4.950135231018066, 4.957754135131836], + [-2.2789692878723145, -0.8595391511917114], + [0.33200889825820923, -6.849649429321289], + [-3.7140371799468994, -0.8453523516654968], + [-3.6618492603302, -2.696690320968628], + [1.4946047067642212, 4.950550556182861], + [7.0641703605651855, -4.25275182723999], + [0.11910610646009445, -5.72654914855957], + [-4.221174240112305, 4.612598896026611], + [-3.309455633163452, -0.8922794461250305], + [-2.562466859817505, 5.1178483963012695], + [6.015383720397949, -3.4086596965789795], + [6.731777667999268, -3.605081796646118], + [3.6690752506256104, 6.875327110290527], + [-1.8779934644699097, 0.8251171708106995], + [-3.74645733833313, -2.3718202114105225], + [-2.0333399772644043, 1.1645852327346802], + [-3.9518632888793945, -1.0807360410690308], + [1.6980408430099487, 1.089969277381897], + [0.5070392489433289, -6.5379791259765625], + [-4.915995121002197, 3.974809408187866], + [-0.8925752639770508, 10.172794342041016], + [4.821571350097656, -4.548211574554443], + [-5.169680595397949, 5.872933387756348], + [2.2518532276153564, 4.063216209411621], + [-1.2250127792358398, 11.003063201904297], + [0.9293933510780334, -6.6840434074401855], + [-4.175931930541992, 4.241219997406006], + [7.432496547698975, -2.2278378009796143], + [-1.3026176691055298, -1.4535752534866333], + [-2.1117875576019287, 2.0240447521209717], + [8.209268569946289, -2.870783567428589], + [0.6530802249908447, -7.091034889221191], + [0.4324033260345459, -7.055106163024902], + [-1.0799146890640259, 10.471874237060547], + [7.058070659637451, -2.7737836837768555], + [5.515893459320068, -3.858961343765259], + [-3.507185697555542, -1.069647192955017], + [-3.486100912094116, -1.733780026435852], + [-1.4002296924591064, 11.732229232788086], + [-1.9007633924484253, 0.0877680778503418], + [-0.45229166746139526, -0.8973366618156433], + [2.321247100830078, 4.465245246887207], + [-0.6656050682067871, 9.965982437133789], + [2.474623918533325, -4.4876604080200195], + [-1.2070361375808716, 10.682907104492188], + [-0.8696230053901672, 10.618087768554688], + [1.8457857370376587, 2.79998779296875], + [-2.757206916809082, 3.3527414798736572], + [-3.297210931777954, -1.3643882274627686], + [-1.3752610683441162, 11.92180061340332], + [0.43056046962738037, -6.004199028015137], + [-4.008499622344971, 1.1977975368499756], + [-3.4422550201416016, 3.7762770652770996], + [1.6506766080856323, -0.052730802446603775], + [-0.7777343392372131, 10.401727676391602], + [2.5300400257110596, 6.188440322875977], + [-3.8190205097198486, -0.06075942888855934], + [-4.835067272186279, 5.077688217163086], + [-2.950953245162964, -1.7508889436721802], + [-3.7673370838165283, 6.023216724395752], + [3.258561849594116, 6.246434211730957], + [0.7359115481376648, -9.190340995788574], + [1.688453197479248, 2.2676074504852295], + [-3.233609437942505, -1.1064397096633911], + [0.6475812792778015, -6.811838150024414], + [2.892096519470215, 0.8524974584579468], + [-5.45269250869751, 7.074163913726807], + [-3.638394594192505, -2.6722450256347656], + [0.20541507005691528, -5.681171894073486], + [3.3340024948120117, 6.738686561584473], + [5.890204429626465, -4.013747215270996], + [-1.2877780199050903, 1.1767535209655762], + [3.947498083114624, 6.670722484588623], + [-5.186649799346924, 6.753363609313965], + [3.1087193489074707, 6.667255401611328], + [0.6522944569587708, -4.475907325744629], + [-4.634781360626221, -3.7008891105651855], + [-2.9470248222351074, -1.0998539924621582], + [-1.2442563772201538, 1.3587100505828857], + [-3.743328332901001, 5.792242050170898], + [7.564025402069092, -2.122328996658325], + [-1.1310348510742188, 10.734933853149414], + [-3.4379560947418213, -0.5106078386306763], + [2.187749147415161, 4.083680629730225], + [1.2541301250457764, -4.91886043548584], + [-3.2244603633880615, -1.849633812904358], + [-1.375871181488037, 11.890583038330078], + [-1.984719157218933, 0.3438137173652649], + [-0.8961697816848755, 10.168801307678223], + [-5.456904411315918, -0.9825777411460876], + [-0.0732257142663002, -1.0577342510223389], + [-1.9046541452407837, 1.8032947778701782], + [0.9771631360054016, -6.286417484283447], + [3.0542237758636475, -5.072441577911377], + [-1.3720550537109375, 12.376855850219727], + [-3.9405300617218018, -1.3530855178833008], + [-4.550614833831787, -0.8699823021888733], + [-3.0072662830352783, -0.8482754826545715], + [1.2480562925338745, 1.5720953941345215], + [8.40607738494873, -3.0226900577545166], + [0.35836082696914673, -4.684554100036621], + [-4.255418300628662, 3.822845697402954], + [-4.6110053062438965, -1.6110838651657104], + [2.9885599613189697, -4.581511497497559], + [-1.2315500974655151, 1.2744110822677612], + [-1.2741893529891968, 12.055923461914062], + [-3.2988319396972656, -1.4403709173202515], + [0.5355116724967957, -8.065701484680176], + [1.910719633102417, -5.024942874908447], + [0.7075726389884949, -8.866449356079102], + [0.2730429172515869, -6.589210510253906], + [6.945560932159424, -3.5414538383483887], + [-1.3804651498794556, 11.515562057495117], + [0.5207663774490356, -8.162527084350586], + [2.6029915809631348, -5.144010543823242], + [0.6123185753822327, -7.851843357086182], + [-2.828092336654663, -3.9043660163879395], + [2.160360813140869, 3.959195852279663], + [0.05827312916517258, -1.2422399520874023], + [0.32885634899139404, -6.128457546234131], + [3.190514326095581, -4.968389511108398], + [-0.40662992000579834, -1.02406907081604], + [0.24195259809494019, -4.723726272583008], + [-3.2261972427368164, -2.9119818210601807], + [0.455726683139801, -4.603169918060303], + [-3.5728588104248047, 5.696437835693359], + [-4.205761432647705, -2.01479434967041], + [-4.885870456695557, 2.2390758991241455], + [-0.3473835289478302, -2.333969831466675], + [4.872560977935791, 7.7427191734313965], + [-4.953558444976807, 5.621942520141602], + [-1.1848599910736084, 1.5112600326538086], + [5.312420845031738, -1.2431304454803467], + [5.309493541717529, -2.897695779800415], + [5.561233997344971, -1.531076192855835], + [-4.599703311920166, -1.1612719297409058], + [0.19933423399925232, 4.432924270629883], + [1.308752179145813, 1.0221551656723022], + [0.22154521942138672, -4.902523040771484], + [-1.364095687866211, 11.85484504699707], + [0.5988123416900635, -5.967216491699219], + [2.2426960468292236, 6.05070686340332], + [-3.904773473739624, -0.5434160232543945], + [0.44490498304367065, -7.150350570678711], + [-3.9554286003112793, -2.575554370880127], + [-3.880422353744507, -0.8039748668670654], + [2.1072075366973877, 0.3880919814109802], + [0.6317965984344482, -6.701537132263184], + [6.273906230926514, -3.7575461864471436], + [-2.8262314796447754, -1.8118911981582642], + [5.330824375152588, -1.211319088935852], + [-3.692385673522949, -0.6098219752311707], + [1.7310295104980469, -4.963052749633789], + [1.841243863105774, 1.3869060277938843], + [-4.017965793609619, -2.6452596187591553], + [1.7651996612548828, 5.630051612854004], + [0.5487288236618042, -7.1245903968811035], + [2.9012715816497803, 6.7815260887146], + [-0.5825334191322327, -1.1505768299102783], + [-0.14608454704284668, -1.7563384771347046], + [-4.116860866546631, -0.9611515998840332], + [7.621723651885986, -2.3929903507232666], + [0.7340154051780701, -8.198738098144531], + [-3.290990114212036, -1.195281982421875], + [-1.8957669734954834, 0.9663906097412109], + [1.8018258810043335, 3.403900623321533], + [0.7631719708442688, 2.7925682067871094], + [-0.5656372308731079, 9.647411346435547], + [8.040729522705078, -2.4520466327667236], + [2.6330950260162354, -4.233518600463867], + [-1.0197054147720337, 10.266515731811523], + [-5.42434024810791, 6.361917018890381], + [5.603076934814453, -1.4462506771087646], + [-3.416616201400757, 4.122563362121582], + [2.0491902828216553, 0.4827706813812256], + [-0.37674427032470703, 8.641910552978516], + [-3.633725881576538, -0.922787070274353], + [8.13185977935791, -2.435915470123291], + [2.540299654006958, -4.908934593200684], + [2.7751362323760986, -4.733285903930664], + [-4.511748313903809, -4.648860931396484], + [-1.321110486984253, -2.3319103717803955], + [0.5646994709968567, -0.8125892877578735], + [2.391227960586548, -4.265196800231934], + [-4.77744722366333, -0.7887680530548096], + [8.45820426940918, -2.511070489883423], + [-0.18495553731918335, 8.8277587890625], + [-3.5462958812713623, -2.3452060222625732], + [0.043311916291713715, -4.43620491027832], + [2.795668840408325, 4.999985694885254], + [-1.8282973766326904, 1.4245471954345703], + [2.818326234817505, -4.510061264038086], + [9.051217079162598, -2.693988561630249], + [-2.8043925762176514, -0.688583254814148], + [2.350219488143921, 0.9361153841018677], + [-3.085376739501953, -0.9322770833969116], + [2.1179776191711426, -4.7342376708984375], + [-1.2004156112670898, 11.18479061126709], + [6.366841793060303, -1.9237290620803833], + [-4.473644256591797, -1.6585642099380493], + [0.45080727338790894, -4.697345733642578], + [2.9853084087371826, -4.8040618896484375], + [-3.977365732192993, -0.5374773144721985], + [0.8370692133903503, -4.891115665435791], + [-4.717768669128418, -3.3255057334899902], + [2.7362935543060303, -4.929381847381592], + [-3.3835628032684326, -1.241971492767334], + [-0.6487747430801392, 10.258829116821289], + [-1.6210089921951294, 1.445479393005371], + [0.8818027377128601, -0.42435261607170105], + [-2.80997896194458, 1.5662592649459839], + [3.282113552093506, 5.564836025238037], + [6.270606994628906, -1.5803030729293823], + [-0.34814947843551636, 10.183979034423828], + [-4.121521949768066, -1.3356724977493286], + [5.405801296234131, -1.9383260011672974], + [-2.9737095832824707, 4.516218662261963], + [0.8170406222343445, -9.443010330200195], + [7.807838439941406, -2.4014811515808105], + [-4.203222751617432, -3.4062511920928955], + [0.1448635458946228, 3.132185697555542], + [-3.125314474105835, -1.6070581674575806], + [2.5325748920440674, -4.629250526428223], + [-4.8056440353393555, 6.544692039489746], + [0.3894914388656616, -6.5500407218933105], + [-0.5775712132453918, 9.660604476928711], + [-3.491157054901123, -0.9686723947525024], + [-2.526153087615967, 5.90302848815918], + [8.957728385925293, -2.816328525543213], + [8.922632217407227, -2.902427911758423], + [-4.251989841461182, -2.025364398956299], + [1.009421944618225, -0.09928129613399506], + [-0.6407549977302551, 9.737140655517578], + [-2.1089789867401123, 1.9008126258850098], + [-2.245821237564087, 2.1399319171905518], + [-3.8418900966644287, 6.0499348640441895], + [-4.138360023498535, -3.2084736824035645], + [6.550708293914795, -3.481490135192871], + [-3.460890054702759, -0.7566620111465454], + [7.620643138885498, -2.670804500579834], + [-1.1034595966339111, 11.605688095092773], + [0.43360263109207153, -7.31316614151001], + [3.5649735927581787, 6.652894973754883], + [-1.746211290359497, 0.7215768694877625], + [-1.738504409790039, 2.0576274394989014], + [-1.0042513608932495, 11.347524642944336], + [-0.7783152461051941, 10.238908767700195], + [-3.7938616275787354, -2.3155031204223633], + [-5.029577732086182, 7.926986217498779], + [0.17699819803237915, -5.9027228355407715], + [-4.856832504272461, 6.850558280944824], + [0.32733219861984253, -5.399252891540527], + [-3.7216925621032715, -2.48541522026062], + [-1.3140980005264282, 9.858330726623535], + [5.134868144989014, -3.202285051345825], + [1.847532033920288, 5.340855598449707], + [-1.152129888534546, -3.3245489597320557], + [-1.6148426532745361, 1.26957106590271], + [1.8941943645477295, 6.298999786376953], + [-1.5927573442459106, 1.6048787832260132], + [-4.248868942260742, -0.6297019720077515], + [-1.3610812425613403, 12.17791748046875], + [2.5317389965057373, -5.480220317840576], + [8.168362617492676, -3.002021551132202], + [-1.8359713554382324, 6.089098930358887], + [-0.30763012170791626, 8.276222229003906], + [-2.518237352371216, 0.7833915948867798], + [-2.4882864952087402, 2.587388038635254], + [2.55627179145813, -4.324331283569336], + [-3.2065470218658447, -1.6193662881851196], + [-0.9500176310539246, -0.5082062482833862], + [-2.6381516456604004, -1.7227163314819336], + [2.8242318630218506, 5.941532135009766], + [0.8491917252540588, -0.49019569158554077], + [-1.819288730621338, 1.4968253374099731], + [8.535307884216309, -2.572688341140747], + [-0.9798917770385742, 10.05366325378418], + [3.1823675632476807, -4.943392753601074], + [0.800904393196106, -7.371824741363525], + [-1.3044965267181396, 11.173794746398926], + [0.8400698900222778, -7.202262878417969], + [-1.9101133346557617, 0.5979534387588501], + [-1.7836041450500488, 1.0376814603805542], + [-3.51141095161438, -2.337073802947998], + [8.038046836853027, -2.4047977924346924], + [-4.054081916809082, -0.7188699841499329], + [0.5709804892539978, -5.102120399475098], + [0.7975390553474426, 0.28603336215019226], + [0.12322717159986496, -5.35984992980957], + [0.707097053527832, -7.6395368576049805], + [-1.3287750482559204, 11.058388710021973], + [-1.0289918184280396, 10.321467399597168], + [-1.579451322555542, 3.989361524581909], + [-3.6703178882598877, -3.2961618900299072], + [8.80785846710205, -2.8406789302825928], + [-5.405913829803467, 2.374579668045044], + [-0.8580654859542847, -0.9295638799667358], + [-1.170918345451355, 10.965510368347168], + [-3.948317766189575, -1.5069447755813599], + [1.3336148262023926, -4.172905445098877], + [1.933727502822876, 1.994346022605896], + [2.7569258213043213, -3.915363073348999], + [0.4845588803291321, -7.202006816864014], + [2.3310813903808594, 5.774186134338379], + [-2.3192696571350098, -2.2980153560638428], + [-1.8583208322525024, 1.8501120805740356], + [-3.78598952293396, -1.7768187522888184], + [0.3930686116218567, -6.786354064941406], + [-3.333314895629883, -0.8127250075340271], + [2.392035722732544, -5.240761756896973], + [-4.08767557144165, 5.409694194793701], + [1.6488375663757324, -6.242105484008789], + [-4.2268452644348145, -3.2802159786224365], + [1.653009057044983, 2.320159912109375], + [-1.3174530267715454, 1.2806018590927124], + [-3.280311107635498, -1.3715869188308716], + [-1.4333595037460327, -4.024640083312988], + [0.35283446311950684, -7.175832748413086], + [6.549083709716797, -2.7947256565093994], + [3.0137240886688232, -5.107053756713867], + [8.918694496154785, -2.8863699436187744], + [7.88571310043335, -2.5942702293395996], + [-4.422819137573242, -2.7771518230438232], + [6.829565048217773, -2.5502140522003174], + [8.098386764526367, -2.537227153778076], + [6.550102710723877, -2.731199264526367], + [-3.0195000171661377, -1.829565405845642], + [1.516404628753662, 6.1669921875], + [1.8052126169204712, 4.348293781280518], + [7.215048313140869, -3.208418607711792], + [0.693930983543396, -0.5874506235122681], + [-6.2832770347595215, -0.5223292112350464], + [3.9553744792938232, -4.992433071136475], + [-3.0617802143096924, -1.0609053373336792], + [-0.2122783362865448, -0.9863529205322266], + [2.8206264972686768, -4.430880546569824], + [-0.7135314345359802, 10.465469360351562], + [10.23328685760498, -3.0184884071350098], + [-4.686024188995361, 5.968544006347656], + [-3.110355854034424, -1.0333281755447388], + [2.512669801712036, -5.803763389587402], + [-1.8752493858337402, 2.2208306789398193], + [2.1935575008392334, -4.499320030212402], + [0.6248016953468323, -6.7894110679626465], + [-0.9364022016525269, 7.975957870483398], + [-0.755495011806488, -0.4946976602077484], + [0.5620456337928772, -7.576540946960449], + [-4.091657638549805, -0.2866348922252655], + [-3.4444844722747803, -1.3605023622512817], + [2.963392972946167, 6.420788764953613], + [2.2493274211883545, -4.170229911804199], + [0.339222252368927, -6.930900573730469], + [1.9943439960479736, -4.5005202293396], + [-4.445601940155029, -3.1687281131744385], + [-3.969360589981079, 6.8418378829956055], + [-0.5387431383132935, 8.922664642333984], + [7.707433700561523, -2.5122134685516357], + [0.9213081002235413, -0.6126420497894287], + [-1.5830693244934082, 1.4680819511413574], + [3.9452154636383057, 6.999982833862305], + [-0.23301482200622559, 8.408247947692871], + [-3.095191478729248, 6.445680618286133], + [-2.7193942070007324, 6.401027679443359], + [-0.09882105141878128, -3.0279269218444824], + [2.5011589527130127, 6.593105316162109], + [7.394172191619873, -2.4257946014404297], + [-0.33650314807891846, -1.153964877128601], + [6.127709865570068, -3.903182029724121], + [2.8909356594085693, -4.900534152984619], + [-3.356402635574341, -1.1769803762435913], + [-5.5781474113464355, 7.216491222381592], + [1.4544570446014404, 0.7459167242050171], + [4.577670574188232, -4.361419677734375], + [-1.3565871715545654, 11.911645889282227], + [-0.6202504634857178, 0.6222329139709473], + [-1.3515876531600952, 11.327299118041992], + [1.252638816833496, -5.353053092956543], + [-1.3740532398223877, 11.82425308227539], + [2.8125905990600586, 5.095513820648193], + [0.5982945561408997, -0.7742115259170532], + [1.5208922624588013, -5.673821449279785], + [-1.2260167598724365, 11.11601734161377], + [7.2324018478393555, -2.0761988162994385], + [-3.266730546951294, -2.1852304935455322], + [-4.214148998260498, 5.384900093078613], + [7.509977340698242, -2.1454598903656006], + [-2.0243418216705322, 1.290284514427185], + [-4.962283611297607, 6.247404098510742], + [4.702085971832275, 7.547560691833496], + [7.101480007171631, -2.5734524726867676], + [0.7126492857933044, -9.582569122314453], + [5.90480375289917, -3.7545599937438965], + [6.078943252563477, -1.3803348541259766], + [-2.0107057094573975, 1.0771445035934448], + [2.935244560241699, 5.1600847244262695], + [-4.397006034851074, -2.813058853149414], + [-1.366798996925354, 11.265565872192383], + [-3.8236067295074463, -2.684373617172241], + [-1.839841604232788, -0.1481691598892212], + [-3.2442638874053955, 4.698164939880371], + [-1.2147552967071533, 4.7055816650390625], + [-0.5398995280265808, 9.95981216430664], + [2.149888753890991, 5.492589950561523], + [-0.8562576174736023, 9.329627990722656], + [0.6478728652000427, -7.896853446960449], + [-1.412347435951233, 12.04987621307373], + [-3.6120498180389404, -1.9747852087020874], + [-3.9093000888824463, -1.3566083908081055], + [-3.2924981117248535, -1.736248254776001], + [-1.6653952598571777, 1.5800584554672241], + [-1.3867313861846924, 5.203952789306641], + [-3.371631622314453, -2.2927072048187256], + [-5.146135330200195, 5.514695167541504], + [0.6368439793586731, -6.705617904663086], + [7.81655740737915, -3.283566474914551], + [-1.1295156478881836, 11.200029373168945], + [-3.8151702880859375, -1.2191753387451172], + [-5.013132572174072, -3.5296764373779297], + [3.1717541217803955, -5.154866695404053], + [9.063586235046387, -2.7828686237335205], + [0.5218030214309692, -6.235107421875], + [-2.1252386569976807, 1.888408899307251], + [-4.355453014373779, -0.446697473526001], + [5.227370738983154, 8.07983684539795], + [-4.005722522735596, 4.584770202636719], + [-3.7698323726654053, -1.1923006772994995], + [1.9316685199737549, -3.4260478019714355], + [2.2893924713134766, -4.422063827514648], + [2.102515935897827, -5.649828910827637], + [-3.289311647415161, -1.1712064743041992], + [0.3833780586719513, -0.977906346321106], + [0.6509899497032166, -7.435423851013184], + [0.8374208211898804, 0.2339649796485901], + [2.00805401802063, -6.162144184112549], + [-4.394883632659912, 5.376058578491211], + [-1.406333088874817, 12.131914138793945], + [-1.586045742034912, 0.29840776324272156], + [-1.2524917125701904, 11.031487464904785], + [1.5824329853057861, -4.189949035644531], + [5.0593438148498535, 7.879229545593262], + [-1.573620080947876, 0.7308230996131897], + [-5.372415065765381, 7.81198263168335], + [0.3031185269355774, -5.533499717712402], + [-1.9566032886505127, 0.3583638668060303], + [2.9516823291778564, -4.5921630859375], + [0.17594477534294128, -2.465742588043213], + [-1.5937423706054688, 0.7681429386138916], + [-3.6087257862091064, -1.4118279218673706], + [2.428226947784424, -4.332283973693848], + [0.7474932074546814, -8.39358139038086], + [-4.055272102355957, 7.56019926071167], + [-1.1942967176437378, 11.176526069641113], + [7.316646575927734, -2.7341959476470947], + [1.7849884033203125, -5.5546183586120605], + [-3.4319331645965576, -1.2871571779251099], + [-1.9901751279830933, 1.7736550569534302], + [0.9559541344642639, -6.124309062957764], + [0.45671355724334717, -6.469709396362305], + [5.516554832458496, -6.292129993438721], + [2.465451717376709, -5.8743791580200195], + [-3.9415435791015625, 0.3956559896469116], + [-3.861969232559204, -1.318679690361023], + [-5.147902965545654, 6.806307792663574], + [7.349162578582764, -2.648364782333374], + [-2.300342559814453, 3.0249311923980713], + [-5.1059184074401855, -4.019196510314941], + [2.918177843093872, -4.866180896759033], + [2.340648889541626, 5.786890506744385], + [-2.8508269786834717, 2.9375221729278564], + [-0.26938411593437195, -1.4270130395889282], + [-1.2532674074172974, -1.2081888914108276], + [1.3239116668701172, 0.04351484403014183], + [-0.3242499828338623, 9.580662727355957], + [-1.859452247619629, -2.588449001312256], + [-1.3057475090026855, 11.449100494384766], + [0.6697517037391663, -5.277928352355957], + [-4.467657089233398, 5.972890377044678], + [0.015861742198467255, 7.878879547119141], + [0.5059277415275574, -7.334575653076172], + [1.0386724472045898, 1.4541728496551514], + [-1.9703199863433838, 2.605142593383789], + [-4.110387802124023, 5.623098373413086], + [-5.34738826751709, -0.9097328782081604], + [-1.0223510265350342, 9.621089935302734], + [-2.747380495071411, -1.2230793237686157], + [-4.039233684539795, -1.1253138780593872], + [3.8952691555023193, 6.863189220428467], + [-1.2641335725784302, 11.345501899719238], + [4.794336795806885, -3.607609987258911], + [0.4114224314689636, -6.94731330871582], + [3.429749011993408, 6.754004955291748], + [-4.269704818725586, -2.3880999088287354], + [-4.61840295791626, 6.714009761810303], + [-3.820519208908081, -3.622241258621216], + [8.853226661682129, -2.8722503185272217], + [2.170783758163452, -5.003788948059082], + [2.7411324977874756, -4.578866004943848], + [0.5394644737243652, -5.8834991455078125], + [-3.0886099338531494, -0.1352826952934265], + [1.0247706174850464, 2.264282703399658], + [1.981410026550293, 6.064383506774902], + [-2.095813274383545, 2.607741355895996], + [0.4791985750198364, 6.244263648986816], + [0.542651891708374, -7.184782981872559], + [1.7502009868621826, -4.053714752197266], + [-3.374181032180786, -0.6265678405761719], + [1.5728647708892822, 0.585086464881897], + [5.203213214874268, -2.8720200061798096], + [6.478903770446777, -2.632089853286743], + [-1.0101922750473022, 0.7700253129005432], + [1.6712291240692139, 4.12896203994751], + [2.6320040225982666, -5.153034687042236], + [-1.319996953010559, 10.81706428527832], + [0.8586822152137756, -5.944857120513916], + [0.6122189164161682, -7.787683963775635], + [6.891295433044434, -2.8863556385040283], + [-5.197973251342773, 6.83367919921875], + [-3.7558677196502686, -2.540745496749878], + [-4.216368198394775, -1.354040503501892], + [-3.848907470703125, -0.2285630702972412], + [-1.3715957403182983, -1.064681053161621], + [-3.811377763748169, -0.6584984064102173], + [9.302929878234863, -2.811283826828003], + [0.5941750407218933, -8.324132919311523], + [6.2609333992004395, -2.369054079055786], + [-3.4050915241241455, -2.2465245723724365], + [-4.301383018493652, 5.783486366271973], + [-0.07239193469285965, -0.9596677422523499], + [-0.2487451434135437, 8.604900360107422], + [-1.7145261764526367, 2.644195795059204], + [0.6340111494064331, -0.9515906572341919], + [-3.339426279067993, -1.930598258972168], + [0.9989774823188782, -5.221678733825684], + [1.7056808471679688, 3.6262214183807373], + [-2.7209606170654297, -0.8023792505264282], + [-1.0399086475372314, -0.8479478359222412], + [8.889117240905762, -2.7511422634124756], + [-4.0180864334106445, -0.9849512577056885], + [-4.658746242523193, -0.795558512210846], + [1.338517189025879, 0.6916033029556274], + [-1.3676350116729736, 11.76736068725586], + [-4.901252746582031, -0.6813620924949646], + [-4.721747875213623, 3.9974753856658936], + [0.6247374415397644, -7.754874229431152], + [1.9823758602142334, 5.845458030700684], + [-3.433671474456787, -1.1108046770095825], + [0.44890671968460083, -6.591014862060547], + [5.675812244415283, -1.4201010465621948], + [-0.20040196180343628, 0.41056397557258606], + [2.2938215732574463, 5.361380100250244], + [-3.327833652496338, -0.8696324825286865], + [-0.8117327690124512, -3.032578706741333], + [-1.5749725103378296, 1.422855257987976], + [-3.4226109981536865, -2.6547162532806396], + [-4.482021808624268, -1.6806870698928833], + [-4.5445122718811035, -0.4634905457496643], + [2.7438440322875977, -4.958406925201416], + [0.7035642266273499, -8.114055633544922], + [-1.3656601905822754, -0.750717043876648], + [1.0423600673675537, 4.597855567932129], + [-4.289635181427002, 6.485597610473633], + [-3.7091457843780518, -0.8645029067993164], + [-4.928360939025879, 6.889713287353516], + [-4.489800930023193, 6.444648742675781], + [-1.0982110500335693, 10.619467735290527], + [5.953686237335205, -4.065544128417969], + [1.1209580898284912, -0.16342896223068237], + [7.772222518920898, -2.7517924308776855], + [1.5544071197509766, -5.024990558624268], + [-3.5817744731903076, -2.1539194583892822], + [4.813492298126221, -1.4138990640640259], + [3.078254461288452, -4.913861274719238], + [-2.5790657997131348, 2.748403310775757], + [0.3845192790031433, -5.722502708435059], + [1.5701230764389038, 5.875937461853027], + [0.69216388463974, -5.575202465057373], + [-1.786382794380188, 0.004703041166067123], + [5.978484153747559, -1.958241581916809], + [-0.507132887840271, 9.889982223510742], + [2.6735517978668213, -4.353846549987793], + [-3.163907766342163, -1.5293959379196167], + [1.9365158081054688, 5.887132167816162], + [0.26059722900390625, -0.7427284121513367], + [2.2748498916625977, -5.113547325134277], + [-0.09296400099992752, 8.74173355102539], + [-1.591310739517212, 1.0795575380325317], + [-1.3141363859176636, 11.525744438171387], + [-2.0881009101867676, 0.19747841358184814], + [3.1068060398101807, -5.0108642578125], + [-3.396588087081909, -1.3566666841506958], + [-3.3953802585601807, 7.082128047943115], + [0.887380063533783, -6.44964075088501], + [0.6093565821647644, -5.688746929168701], + [3.3879873752593994, -5.191957473754883], + [-3.841928482055664, -0.7429646253585815], + [-3.575188636779785, 3.627305030822754], + [0.6504573225975037, -4.482357501983643], + [-3.984768867492676, -1.435848593711853], + [-5.617892265319824, -4.068308353424072], + [1.4451347589492798, -5.3271484375], + [1.4446882009506226, 4.862678527832031], + [0.5096463561058044, 0.6555585861206055], + [-4.458863735198975, -1.4200950860977173], + [0.01087062805891037, 8.734992027282715], + [7.59169340133667, -2.3384509086608887], + [1.0560356378555298, -0.5396568775177002], + [0.025472216308116913, -5.194265365600586], + [5.403648853302002, 8.227516174316406], + [2.690988302230835, -4.625250339508057], + [9.188462257385254, -2.8798396587371826], + [2.337386131286621, 4.896956443786621], + [-0.6527103781700134, 9.370141983032227], + [-4.139451026916504, 6.685772895812988], + [-1.0889869928359985, 8.956496238708496], + [1.3153202533721924, 5.463870048522949], + [-0.7029039859771729, 9.791223526000977], + [3.0256874561309814, 6.3922319412231445], + [2.4796698093414307, -5.05196475982666], + [6.857773303985596, -1.8299380540847778], + [-5.40519380569458, -4.453110694885254], + [2.0378258228302, 4.47843074798584], + [-1.423539638519287, 0.887434184551239], + [-2.394599676132202, -0.3106194734573364], + [1.8033469915390015, -0.23271840810775757], + [-4.086959362030029, 6.657721042633057], + [-0.0951400175690651, -2.579683542251587], + [0.738629162311554, -7.460681915283203], + [-1.271104335784912, 1.1182488203048706], + [4.820139408111572, -4.776647090911865], + [-0.7418977618217468, 10.674097061157227], + [2.821179151535034, -4.75776481628418], + [0.46485745906829834, 5.883373260498047], + [-1.1664743423461914, 10.792933464050293], + [-0.24155816435813904, -0.9351910948753357], + [-1.4249199628829956, 11.940862655639648], + [-2.6660635471343994, 0.5368742942810059], + [-3.9351325035095215, -0.13053876161575317], + [-4.037876605987549, -3.0770812034606934], + [-4.72597599029541, 6.691861152648926], + [0.917175829410553, 0.19352637231349945], + [1.00528883934021, -0.3563641309738159], + [-0.06394872814416885, -3.626901388168335], + [7.6764044761657715, -2.589966058731079], + [2.741187334060669, -4.477268218994141], + [-1.5788370370864868, 1.3690506219863892], + [-3.478442430496216, -1.7155966758728027], + [-3.125290632247925, -1.100264310836792], + [-2.6252706050872803, 2.3483879566192627], + [-3.8648934364318848, -1.5592200756072998], + [8.731316566467285, -2.9374167919158936], + [2.515620708465576, 5.65321159362793], + [-1.149030327796936, 10.647315979003906], + [0.6157436966896057, -7.6982831954956055], + [-5.056371212005615, -4.247663497924805], + [0.6531500220298767, -7.905277729034424], + [0.48371362686157227, -7.881429672241211], + [-4.507091999053955, 5.926384925842285], + [0.3912092447280884, -6.145949840545654], + [2.8174803256988525, -5.28944206237793], + [-3.255511999130249, -0.7579752206802368], + [-5.368549346923828, 5.413949966430664], + [-3.9513278007507324, -2.497865915298462], + [0.7492457032203674, -10.320100784301758], + [1.9569675922393799, 0.9298245310783386], + [0.37757837772369385, -5.995138645172119], + [-3.116220712661743, -0.5896785855293274], + [0.8454119563102722, -8.160781860351562], + [-1.5977388620376587, 1.0993398427963257], + [0.539870023727417, -7.883803367614746], + [-2.5936644077301025, -1.562956690788269], + [-4.041618824005127, -2.9204514026641846], + [2.041109323501587, -4.231752872467041], + [-1.4335863590240479, -2.618110179901123], + [2.397902250289917, -4.979682922363281], + [1.048264741897583, -5.706202983856201], + [4.002333641052246, 6.96289587020874], + [-4.986723899841309, 6.161438941955566], + [-1.6596882343292236, 1.5794646739959717], + [-1.84468674659729, 1.8524651527404785], + [-4.137283802032471, -2.78473162651062], + [0.03281783312559128, -0.9310458898544312], + [4.331123352050781, -2.081852674484253], + [-1.817949652671814, 0.385865718126297], + [-0.5483456254005432, -0.8490797877311707], + [-3.287895917892456, -1.3269506692886353], + [-2.161696195602417, -1.0214953422546387], + [1.7654677629470825, 5.037836074829102], + [-2.0691938400268555, 1.16551673412323], + [5.3200201988220215, -2.7669551372528076], + [-4.389464855194092, -2.0680184364318848], + [0.5141277313232422, -7.757613182067871], + [-3.689945697784424, -0.11728745698928833], + [1.8765103816986084, 3.981696367263794], + [0.6319287419319153, -6.477697849273682], + [0.8348345160484314, -9.114974975585938], + [-4.609156131744385, -1.7654880285263062], + [-4.141501426696777, -1.519360899925232], + [-0.6008246541023254, -0.2837800681591034], + [-1.2904682159423828, 11.457452774047852], + [0.1913968026638031, -4.54550838470459], + [-3.088613748550415, -2.1692230701446533], + [-0.6155992746353149, 9.956537246704102], + [1.5946688652038574, 6.920273780822754], + [3.682396650314331, 6.5943756103515625], + [-1.7452385425567627, 1.645281434059143], + [-0.90348881483078, 10.259936332702637], + [-3.6009621620178223, -1.014513611793518], + [1.5461070537567139, 6.79366397857666], + [-2.70886492729187, -2.1145694255828857], + [-3.311847686767578, -1.6703134775161743], + [2.4549660682678223, 0.5933946371078491], + [3.82074236869812, 7.0443949699401855], + [7.178913593292236, -2.532104730606079], + [-3.120713949203491, 4.910083770751953], + [-0.3510472774505615, 9.349649429321289], + [-2.2555794715881348, 0.24207210540771484], + [0.6035125851631165, -7.843362331390381], + [-0.05489084869623184, -0.3588615655899048], + [1.5201952457427979, 5.2310285568237305], + [1.1512656211853027, -0.04685426130890846], + [-1.984052300453186, 2.22233247756958], + [-1.8527474403381348, -1.781877875328064], + [-0.2953961491584778, 9.934958457946777], + [-1.592880129814148, 13.405978202819824], + [-4.640226364135742, -1.451149821281433], + [3.421818971633911, 6.269608497619629], + [-0.010581828653812408, -4.7090559005737305], + [-5.511734962463379, 7.512589931488037], + [0.8213037848472595, -4.649589538574219], + [0.6908825635910034, -7.5897016525268555], + [0.7271875739097595, -8.770463943481445], + [-3.3797671794891357, -2.5969581604003906], + [-3.4475133419036865, -0.7673407196998596], + [0.5943505167961121, -5.281740188598633], + [1.1298277378082275, -6.992530822753906], + [3.7004706859588623, -5.861912727355957], + [-3.9812865257263184, -1.454790711402893], + [-2.940840482711792, -0.72027987241745], + [2.667457342147827, -4.93280029296875], + [-5.0710577964782715, 4.614564895629883], + [5.565329074859619, -4.790236473083496], + [1.586369276046753, 4.368475437164307], + [-1.6550008058547974, 2.0478038787841797], + [-3.666621446609497, -2.140448808670044], + [3.008824586868286, -4.934375286102295], + [-3.172774314880371, 5.525609970092773], + [6.85719633102417, -2.031804323196411], + [0.42385542392730713, -5.373851776123047], + [-4.3567328453063965, 6.719943046569824], + [-5.718146800994873, -1.4807077646255493], + [-3.69594407081604, -0.9258908033370972], + [-4.559045314788818, -0.8173308968544006], + [-3.964139699935913, 2.615765333175659], + [0.3253266215324402, 7.450878620147705], + [1.1677076816558838, 1.8986517190933228], + [-2.4043502807617188, 5.937830924987793], + [-1.6276237964630127, 1.9816733598709106], + [0.2124977707862854, -3.881920576095581], + [-3.9356634616851807, -1.9159832000732422], + [3.0295350551605225, 5.832451343536377], + [7.337356090545654, -2.316675901412964], + [0.6182636022567749, -8.431462287902832], + [-3.0072245597839355, 5.036068439483643], + [0.5619239211082458, -7.175225734710693], + [-1.4018296003341675, 11.644647598266602], + [-3.4109597206115723, 4.065517902374268], + [-0.25462502241134644, 9.702655792236328], + [-5.045979976654053, -1.8423131704330444], + [-3.0311079025268555, -0.7121665477752686], + [1.4954739809036255, -8.239387512207031], + [-1.8737125396728516, 0.8713160753250122], + [-3.7502129077911377, -2.642249822616577], + [-5.3041300773620605, 7.345990180969238], + [2.4438517093658447, -3.885479211807251], + [-0.7212313413619995, 9.279325485229492], + [1.7207677364349365, 0.34894293546676636], + [2.4287478923797607, -4.401391983032227], + [2.514688491821289, 4.036319732666016], + [6.781518936157227, -1.8822880983352661], + [2.8328616619110107, -4.6484375], + [-1.5244213342666626, 12.51412582397461], + [1.2891864776611328, -4.784912109375], + [-3.212745428085327, -0.09541845321655273], + [-3.7062289714813232, -1.4282456636428833], + [0.5663594603538513, -5.801687240600586], + [0.60170978307724, -7.193484783172607], + [0.29134008288383484, 0.6019222140312195], + [2.7367775440216064, -4.991123199462891], + [0.6127974390983582, -8.195840835571289], + [-3.359788656234741, -1.2133536338806152], + [5.946854114532471, -2.7041141986846924], + [-4.237496852874756, -1.2609676122665405], + [0.1367606818675995, -4.593155860900879], + [1.7167426347732544, -5.0135393142700195], + [2.9888758659362793, -5.2139410972595215], + [1.3249565362930298, -5.349996089935303], + [0.885283887386322, -6.77440071105957], + [-4.831294059753418, -1.5475451946258545], + [-4.0458574295043945, -2.1514389514923096], + [-5.627407550811768, 7.412750244140625], + [-4.960411071777344, 6.375621795654297], + [-0.31695234775543213, -0.3673076629638672], + [6.648324012756348, -4.322020530700684], + [1.450157642364502, -4.567284107208252], + [-5.311602592468262, 7.672204494476318], + [0.533893883228302, 6.679963111877441], + [-2.9854965209960938, -3.473170042037964], + [-3.2478296756744385, -0.7971160411834717], + [0.6233391761779785, -7.468522071838379], + [7.801229953765869, -2.300450563430786], + [-4.373208522796631, 4.1773834228515625], + [5.448529243469238, 8.2763090133667], + [8.75851821899414, -2.5737781524658203], + [-1.2100831270217896, 10.439844131469727], + [0.3627399802207947, -7.153223037719727], + [-0.9550907015800476, 8.622246742248535], + [-0.6546213626861572, 8.95330810546875], + [0.1133028194308281, -5.10802698135376], + [-3.6546308994293213, 5.6092705726623535], + [1.83704674243927, -3.867992639541626], + [7.937184810638428, -2.5022332668304443], + [0.520918071269989, -8.045539855957031], + [-1.1410447359085083, 10.913040161132812], + [-2.7753336429595947, -0.9618563652038574], + [0.5329526662826538, -7.5032057762146], + [-4.665769100189209, -0.9633651375770569], + [0.34230560064315796, -6.237834930419922], + [-2.673323154449463, -0.6916002631187439], + [0.06559591740369797, -5.719122886657715], + [0.47519809007644653, -6.467169761657715], + [3.806109666824341, -5.218329429626465], + [-0.2848369777202606, -1.1732438802719116], + [-1.1867748498916626, 10.984699249267578], + [-3.2821691036224365, -1.4046473503112793], + [0.45293372869491577, -1.0464601516723633], + [-3.8093295097351074, -0.3362201452255249], + [0.603736162185669, -8.601966857910156], + [0.629719614982605, -7.770344257354736], + [0.18509137630462646, -6.276956081390381], + [0.5212278366088867, -5.867757797241211], + [0.6005387902259827, -0.06634068489074707], + [3.781527042388916, 0.9337838292121887], + [-1.978153109550476, 1.9439224004745483], + [1.6061897277832031, 4.817763328552246], + [4.491454601287842, -1.1743528842926025], + [-0.5577060580253601, -1.1293120384216309], + [2.6373159885406494, 6.51419734954834], + [-2.0419270992279053, 2.053433895111084], + [1.4551736116409302, 0.24635711312294006], + [-1.28816819190979, 11.629739761352539], + [2.4326119422912598, -4.656619071960449], + [-0.8886650204658508, 8.876405715942383], + [-3.1706202030181885, -0.6943198442459106], + [-3.534960985183716, -1.1586761474609375], + [1.7605353593826294, 5.628997802734375], + [-5.234729290008545, 3.9400625228881836], + [8.805047988891602, -2.7717506885528564], + [0.36924201250076294, -4.6919331550598145], + [-1.921753168106079, 0.654805600643158], + [-3.3982036113739014, -2.9018874168395996], + [-1.0235140323638916, 10.585304260253906], + [-5.247311592102051, 6.139414310455322], + [-4.3675360679626465, 5.837582588195801], + [-0.7942483425140381, 5.38176155090332], + [-3.569939136505127, -1.8077951669692993], + [-1.0531001091003418, 0.026734646409749985], + [2.47041916847229, -4.702991485595703], + [7.052602291107178, -2.003945827484131], + [0.5050444006919861, -7.581361293792725], + [-0.41797834634780884, 10.086647033691406], + [-3.493847608566284, -1.0042519569396973], + [-0.1598820686340332, 8.084099769592285], + [-1.1042588949203491, -0.9643648266792297], + [2.5344271659851074, 6.414200782775879], + [3.2780206203460693, -5.0488739013671875], + [-4.086048126220703, 6.469095230102539], + [0.24047315120697021, -6.156818389892578], + [0.031549833714962006, -2.6719043254852295], + [-3.2438435554504395, -0.6633965969085693], + [-1.8336036205291748, 1.8844870328903198], + [-3.2077577114105225, -1.3506447076797485], + [0.20303726196289062, -6.049505233764648], + [-4.031854629516602, -1.338493824005127], + [0.499565064907074, -7.4914350509643555], + [-2.7924540042877197, -2.4689829349517822], + [0.7904060482978821, -4.4471354484558105], + [-5.282226085662842, 4.8212480545043945], + [-2.7666749954223633, 4.807061672210693], + [0.29386258125305176, -4.865381240844727], + [-2.673170328140259, 2.5727288722991943], + [2.035792827606201, -5.345231056213379], + [-3.6069109439849854, -1.746170163154602], + [1.7300740480422974, -4.450318813323975], + [-2.961439609527588, -0.27116215229034424], + [-2.701765298843384, 2.847235918045044], + [0.5605060458183289, -5.693648815155029], + [3.017477512359619, -5.127056121826172], + [0.9028831720352173, -7.114299774169922], + [-1.8253310918807983, 1.4974501132965088], + [-4.807791709899902, -1.042394757270813], + [-1.83049476146698, 5.120481014251709], + [-0.686024010181427, 9.943723678588867], + [6.127223968505859, -1.8569210767745972], + [-3.5112979412078857, -3.0832221508026123], + [-4.141723155975342, 4.489118576049805], + [2.843867063522339, -4.6408891677856445], + [-1.46216881275177, 1.0368930101394653], + [3.066387414932251, 6.190432071685791], + [-4.436506271362305, 4.490287780761719], + [1.1894302368164062, -6.752346992492676], + [-5.035311222076416, 2.737647771835327], + [-3.9608891010284424, -1.5109001398086548], + [-4.13130521774292, -0.7009395360946655], + [-1.0232667922973633, 0.5560573935508728], + [0.9519713521003723, -5.63431453704834], + [0.4945153594017029, -8.042759895324707], + [-1.8432070016860962, 1.512697458267212], + [6.78671932220459, -2.612231969833374], + [2.4155490398406982, -5.600508689880371], + [-4.341348171234131, 4.342342376708984], + [-5.4725823402404785, 4.812565803527832], + [2.4895753860473633, -4.00164794921875], + [2.5576207637786865, 5.006383419036865], + [2.6148040294647217, -4.734360694885254], + [7.467294216156006, -3.4590303897857666], + [-3.916149377822876, -2.7119176387786865], + [3.5022568702697754, 6.495436668395996], + [0.5537793040275574, -4.412181854248047], + [-1.8822330236434937, 2.326857805252075], + [-3.4583890438079834, -3.221496105194092], + [-3.903559446334839, 5.362775802612305], + [-5.4457106590271, 5.386177062988281], + [-4.757137775421143, -1.1316875219345093], + [2.4872071743011475, 5.069709777832031], + [-4.944748878479004, -0.8198758363723755], + [0.20029878616333008, -5.818714141845703], + [-0.3610938489437103, -0.6036126613616943], + [-0.921390950679779, 10.723203659057617], + [8.17564868927002, -2.3919646739959717], + [0.7250252366065979, -9.069623947143555], + [-2.062546968460083, 1.9010683298110962], + [5.72633695602417, 8.533037185668945], + [-1.1342653036117554, 10.897156715393066], + [2.99896502494812, -4.982695579528809], + [5.977859973907471, -2.930079698562622], + [-3.4079432487487793, -2.011356830596924], + [-5.293267250061035, 6.648110389709473], + [2.8416576385498047, -4.473154067993164], + [-3.759453535079956, 5.095630645751953], + [0.5546327829360962, -5.122837066650391], + [-4.8670268058776855, -3.214207887649536], + [4.83067512512207, 7.626996994018555], + [-0.49569469690322876, 9.338677406311035], + [7.2837042808532715, -2.0907416343688965], + [3.35037899017334, 6.355107307434082], + [-3.6171700954437256, -2.2274320125579834], + [-4.292387008666992, -0.7282996773719788], + [-3.927743673324585, -3.5056560039520264], + [-3.104332447052002, -1.6397457122802734], + [-0.695186197757721, 10.457717895507812], + [-1.0483195781707764, 10.560394287109375], + [-1.719758152961731, 1.4939626455307007], + [-0.9816262125968933, 10.506649017333984], + [-1.3396366834640503, 1.9355775117874146], + [0.984242856502533, -6.223115921020508], + [0.835479199886322, -5.7548322677612305], + [0.6483719944953918, -5.023764610290527], + [2.099896192550659, 0.6488085985183716], + [-1.211495280265808, 10.896059036254883], + [2.789231061935425, -4.702587127685547], + [0.602953314781189, -8.170082092285156], + [0.292113721370697, -6.452978134155273], + [0.4467329978942871, -7.361742973327637], + [-5.342397212982178, 7.486683368682861], + [2.5257956981658936, 5.9379963874816895], + [0.41610753536224365, -7.309261322021484], + [7.978347301483154, -2.334862470626831], + [-1.1069607734680176, 11.020320892333984], + [-3.0737316608428955, -0.8946433067321777], + [-1.2227097749710083, 1.271267056465149], + [-1.7180111408233643, 1.2240691184997559], + [-1.9437408447265625, 2.144136667251587], + [3.211812734603882, 6.396059513092041], + [0.8407575488090515, -9.359516143798828], + [-1.4959908723831177, -2.205040216445923], + [2.7033112049102783, -2.08988618850708], + [-1.939713716506958, 1.6669433116912842], + [-3.6038525104522705, -2.551518201828003], + [-2.4993250370025635, 2.6372053623199463], + [-0.7350177764892578, 10.349878311157227], + [0.758685290813446, -9.051169395446777], + [1.60447359085083, -4.1783599853515625], + [-1.1038933992385864, 11.109004020690918], + [0.5287662148475647, -7.284809112548828], + [0.33696508407592773, 2.8705122470855713], + [-3.2377402782440186, -1.9418176412582397], + [-0.7175351977348328, 10.592422485351562], + [-1.5701756477355957, -1.702196478843689], + [-6.199105262756348, 8.030807495117188], + [2.7328855991363525, -5.037563323974609], + [-3.885666608810425, -1.7568837404251099], + [-0.5084527134895325, -1.5853086709976196], + [0.5900775790214539, -8.469388008117676], + [2.963683605194092, -4.752955913543701], + [1.1910767555236816, -0.1229771226644516], + [-2.089595317840576, 0.01708340272307396], + [2.6763710975646973, -4.595396518707275], + [0.7071184515953064, -9.056035041809082], + [-1.1136447191238403, 10.461270332336426], + [0.18167966604232788, -6.009766578674316], + [-1.2510091066360474, 1.0866355895996094], + [8.100163459777832, -2.4044382572174072], + [1.2592629194259644, 4.598652362823486], + [-4.99923849105835, 7.110722541809082], + [-3.774742364883423, -2.133340835571289], + [2.549346923828125, 4.853411674499512], + [-1.021194338798523, 10.4962158203125], + [-3.209289789199829, 3.4939608573913574], + [0.45330578088760376, -4.539628505706787], + [-0.11949045211076736, -0.6527239680290222], + [1.1417362689971924, -4.933985710144043], + [-1.7016650438308716, 2.201573133468628], + [2.694500684738159, -5.172351360321045], + [0.9164793491363525, -6.494593620300293], + [2.7869222164154053, -5.297730445861816], + [1.464638113975525, 1.9102905988693237], + [-3.9028260707855225, -2.513678550720215], + [-5.460566997528076, 4.745663642883301], + [-3.198151111602783, -0.23672199249267578], + [1.8668005466461182, 0.46566152572631836], + [6.248637676239014, -1.313137173652649], + [-4.270036697387695, -1.4037762880325317], + [1.167067050933838, -4.9358978271484375], + [-4.397387981414795, 1.4900182485580444], + [-2.3610098361968994, 2.1630280017852783], + [4.049603462219238, 7.492275238037109], + [2.0798115730285645, 5.094743728637695], + [-2.774080276489258, 1.1947851181030273], + [-3.865577459335327, -2.7119882106781006], + [1.1279113292694092, -6.609968185424805], + [2.742400884628296, -4.308094024658203], + [0.43931013345718384, -4.8020501136779785], + [-1.4806921482086182, 12.055475234985352], + [-3.7423384189605713, -3.1540610790252686], + [-4.946995735168457, 6.056215763092041], + [-1.3166531324386597, 11.41448974609375], + [-2.8765172958374023, 3.6385042667388916], + [-1.1778297424316406, 10.852370262145996], + [-5.661036014556885, 5.644060134887695], + [2.913414239883423, -4.570565223693848], + [-1.3882393836975098, 2.0509512424468994], + [-1.0284838676452637, 10.934187889099121], + [8.177696228027344, -2.4281458854675293], + [1.6038994789123535, 5.232952117919922], + [-5.937465190887451, 6.182061195373535], + [-1.1486011743545532, 10.632034301757812], + [-0.293593168258667, 8.993014335632324], + [-5.073557376861572, -3.962517023086548], + [9.972567558288574, -3.0362112522125244], + [2.6618523597717285, -4.078697681427002], + [-4.296772003173828, -1.1602293252944946], + [7.249380111694336, -3.962578296661377], + [8.416781425476074, -2.9537060260772705], + [-1.2205426692962646, 11.357996940612793], + [5.371169567108154, -0.9974926710128784], + [7.871834754943848, -2.3023993968963623], + [-2.9960060119628906, -0.8855987787246704], + [-0.6908071041107178, 10.085686683654785], + [-0.8003301620483398, 5.600524425506592], + [-2.41916561126709, 2.3871421813964844], + [0.7630545496940613, -9.404058456420898], + [-1.100821852684021, 4.305662631988525], + [-0.6908244490623474, -0.7169184684753418], + [1.0731480121612549, -4.977976322174072], + [0.4815356135368347, -7.6715192794799805], + [-2.6867928504943848, 4.400644302368164], + [0.9492089152336121, -0.17315900325775146], + [-4.6462531089782715, -1.343011736869812], + [-5.333005428314209, 6.484724521636963], + [-5.051851749420166, 6.69831657409668], + [0.7587780356407166, -4.507966995239258], + [-3.6448171138763428, 3.829603910446167], + [1.4131827354431152, 6.031519412994385], + [2.078126907348633, 5.57968807220459], + [0.3865898847579956, -4.656656742095947], + [8.302057266235352, -2.454658031463623], + [3.062086820602417, -5.051305294036865], + [-3.587780237197876, -2.887333631515503], + [-3.63679575920105, -1.711626648902893], + [-5.105282306671143, -0.25054502487182617], + [-4.848047733306885, 5.404111385345459], + [-4.185703754425049, -3.923140525817871], + [0.7646109461784363, -8.40700626373291], + [-3.3049468994140625, -2.6241164207458496], + [-3.4489362239837646, -0.6722457408905029], + [4.359925746917725, 7.485263824462891], + [0.14177867770195007, -2.9071547985076904], + [0.8112131953239441, -7.582614898681641], + [-3.2282049655914307, -1.3838757276535034], + [5.407827854156494, -1.8955312967300415], + [2.6292707920074463, -4.195680618286133], + [-4.266795635223389, 6.461408615112305], + [-4.023024082183838, -1.8997234106063843], + [3.838324785232544, -0.8179477453231812], + [-3.4005448818206787, -1.51727294921875], + [0.5690547823905945, -6.39456033706665], + [0.5022829174995422, -5.78768253326416], + [2.854095697402954, -4.876293182373047], + [2.3509533405303955, -3.960120916366577], + [5.68254280090332, -1.1971464157104492], + [-2.0291669368743896, 2.217592239379883], + [0.47282516956329346, -6.998785018920898], + [-0.9544437527656555, 11.050174713134766], + [8.829407691955566, -2.5971429347991943], + [0.843455970287323, -0.46880513429641724], + [6.17470121383667, -4.596871852874756], + [7.4040045738220215, -2.426401376724243], + [1.817914605140686, -4.035952568054199], + [-1.3802435398101807, 12.14249324798584], + [0.7448496222496033, -5.859257698059082], + [0.5433092713356018, -7.670271873474121], + [5.0552449226379395, 8.056650161743164], + [3.1241893768310547, 5.900561332702637], + [-2.8507463932037354, -0.9418936967849731], + [2.801445722579956, -4.540862083435059], + [0.07993333786725998, 8.090400695800781], + [0.7097886800765991, -7.532336235046387], + [0.5375467538833618, -8.577970504760742], + [-3.7010557651519775, -1.5686334371566772], + [0.7173847556114197, -8.60755729675293], + [0.5530502200126648, -7.2364912033081055], + [-3.421705484390259, -3.8644068241119385], + [-1.1797813177108765, 10.102807998657227], + [1.9786009788513184, -5.530451774597168], + [-0.30319419503211975, -0.7023709416389465], + [-5.05926513671875, 6.786181449890137], + [0.4742807149887085, -5.310153484344482], + [0.5136431455612183, -5.5388994216918945], + [-4.747506618499756, 6.9462056159973145], + [-4.232533931732178, 6.622143268585205], + [4.983349323272705, 7.851228713989258], + [0.7017604112625122, -5.620168685913086], + [-1.064643144607544, 10.490240097045898], + [-1.6422311067581177, 1.6820095777511597], + [-4.189955234527588, 0.8315945267677307], + [-3.7728116512298584, -1.2574142217636108], + [-2.3144466876983643, -3.327277898788452], + [0.6069234609603882, -1.2769242525100708], + [7.934449672698975, -3.6488726139068604], + [-3.696115493774414, -0.9032783508300781], + [1.6766431331634521, 2.0226242542266846], + [-3.525690793991089, -2.4399712085723877], + [-2.0543835163116455, 1.2551217079162598], + [0.5035061240196228, -7.180298805236816], + [1.2152334451675415, -4.330913543701172], + [7.371926784515381, -3.32100510597229], + [1.779807448387146, -4.444370269775391], + [1.8079164028167725, 5.190358638763428], + [-3.104285717010498, -2.2961065769195557], + [2.5426573753356934, -5.301876068115234], + [-2.3714804649353027, 5.788335800170898], + [-3.5179708003997803, 5.017712593078613], + [-3.495490312576294, -1.1023279428482056], + [7.602528095245361, -3.1995341777801514], + [9.201313972473145, -2.809760808944702], + [-0.6003500819206238, 9.514196395874023], + [2.771559000015259, -4.597986221313477], + [3.004742383956909, -4.916030406951904], + [-4.269596576690674, -0.34325897693634033], + [2.5730392932891846, -3.92576265335083], + [-3.9995079040527344, -1.776822805404663], + [-4.048598289489746, 4.305490970611572], + [0.8772071003913879, -8.435842514038086], + [-4.636206150054932, 4.432734966278076], + [-0.14136916399002075, -2.9173552989959717], + [-4.404277324676514, -1.0438276529312134], + [-0.5383804440498352, 5.592513084411621], + [-4.107295513153076, -1.6459335088729858], + [8.46922779083252, -2.72239089012146], + [-1.212212085723877, 0.43182530999183655], + [-5.096896648406982, 5.228999137878418], + [-0.6687105298042297, -0.13197089731693268], + [3.73469614982605, 7.2250542640686035], + [-0.5540000200271606, -1.4660755395889282], + [1.7372175455093384, 0.5610090494155884], + [-4.452868938446045, -1.4017345905303955], + [2.255279779434204, 5.418429851531982], + [7.865886211395264, -2.3683359622955322], + [-3.065361738204956, -1.4357351064682007], + [-4.6738762855529785, 6.0155229568481445], + [10.337076187133789, -3.0860631465911865], + [2.7972452640533447, -6.052877426147461], + [1.3400180339813232, 1.79546058177948], + [2.991719961166382, -4.680887699127197], + [2.9061031341552734, 6.473870277404785], + [0.7145931124687195, -6.814530849456787], + [-3.9468016624450684, -1.3472734689712524], + [4.385001182556152, -3.8989827632904053], + [2.5745389461517334, -4.546976089477539], + [6.393873691558838, -3.995109796524048], + [0.37966030836105347, -6.217038631439209], + [2.2864320278167725, -4.530745029449463], + [-3.3525443077087402, -4.213194847106934], + [-5.179065704345703, 6.517136096954346], + [0.57390296459198, -6.391878128051758], + [-0.8322107195854187, 10.899883270263672], + [2.2348134517669678, -4.5279154777526855], + [-3.0161588191986084, -0.7202252745628357], + [-4.49151611328125, -1.4630376100540161], + [-4.358194828033447, -0.6647005677223206], + [5.349710941314697, -3.257307767868042], + [9.17750358581543, -2.7503163814544678], + [-4.842461109161377, -4.662762641906738], + [2.324603796005249, 3.9862048625946045], + [-3.4542500972747803, -1.0732673406600952], + [7.211211681365967, -2.1822893619537354], + [0.5450363755226135, -5.237672328948975], + [-3.188065528869629, -0.9850195646286011], + [0.8597036004066467, -7.643070697784424], + [-1.4051287174224854, 4.959682941436768], + [-2.7237231731414795, 2.8071415424346924], + [2.697375535964966, -5.049147129058838], + [-2.4401278495788574, -1.071995496749878], + [0.4470970630645752, 4.9506072998046875], + [1.5455060005187988, 2.6249284744262695], + [6.587080955505371, -2.091343879699707], + [2.285350799560547, -4.305271625518799], + [-4.07505989074707, -1.4145928621292114], + [2.4247522354125977, -4.749565124511719], + [-3.615342855453491, -1.7198301553726196], + [-3.556605815887451, -0.9546128511428833], + [-0.7121817469596863, 10.707117080688477], + [-3.484426259994507, -3.411376476287842], + [-0.2784281373023987, 8.860166549682617], + [-4.06263542175293, -2.2419188022613525], + [2.3742568492889404, 5.316911697387695], + [-0.03155992180109024, -1.409944772720337], + [-0.37364888191223145, 4.78670072555542], + [2.498389720916748, -4.452221393585205], + [-4.143168926239014, 5.194782257080078], + [-0.5789185762405396, 5.892111778259277], + [-0.08785334974527359, -1.0733469724655151], + [0.4236409068107605, -6.242038249969482], + [2.851625680923462, -4.826846122741699], + [-0.4296194314956665, 7.859181880950928], + [2.8454363346099854, -4.792552947998047], + [2.3161191940307617, 5.9665093421936035], + [1.8338508605957031, 6.142805576324463], + [-0.9134588241577148, 9.997167587280273], + [-1.4808799028396606, 12.667701721191406], + [-2.4540328979492188, 4.693042755126953], + [0.6859132051467896, -8.402666091918945], + [2.6195805072784424, -4.5494489669799805], + [-1.7333883047103882, 0.9034572839736938], + [2.609259843826294, -3.322854995727539], + [2.7464263439178467, 5.733399391174316], + [-3.405266046524048, -1.7122873067855835], + [-3.402379274368286, -1.6139194965362549], + [10.242623329162598, -3.0844128131866455], + [-1.9675055742263794, 1.6584627628326416], + [1.081040620803833, 3.5894930362701416], + [-1.375769853591919, -1.276197910308838], + [2.7435190677642822, -4.602240562438965], + [0.5999151468276978, -7.624228477478027], + [-0.6993363499641418, 9.669801712036133], + [-0.008499391376972198, -3.9391705989837646], + [9.187051773071289, -2.738173246383667], + [-1.4388881921768188, 11.994406700134277], + [6.460921764373779, -1.8628880977630615], + [-1.3014168739318848, 11.570503234863281], + [-3.2434380054473877, -1.2038295269012451], + [-2.1844024658203125, -0.18858253955841064], + [-0.8719841241836548, 9.647682189941406], + [-0.18816733360290527, -1.8422054052352905], + [-4.294712543487549, -5.668295383453369], + [2.2475569248199463, 4.885576248168945], + [-0.423489511013031, 9.412984848022461], + [-5.237806797027588, 6.3526716232299805], + [-1.6259533166885376, 13.158761978149414], + [6.759986400604248, -3.6397805213928223], + [2.955481767654419, -4.722838401794434], + [-0.7164304256439209, -0.5556601285934448], + [1.5404930114746094, -4.367852687835693], + [-4.096599102020264, -1.6939791440963745], + [0.6623868942260742, -8.363595962524414], + [-1.854132056236267, 0.9985330104827881], + [7.316989421844482, -3.434603691101074], + [1.6754752397537231, 0.2257319986820221], + [-3.9448273181915283, -2.29223370552063], + [-3.958125352859497, -0.6007528305053711], + [-1.834529161453247, 1.0864758491516113], + [2.693882465362549, -4.873091220855713], + [-3.8513376712799072, -2.6766209602355957], + [4.147884368896484, 6.964293479919434], + [2.31504225730896, 0.8224611282348633], + [-2.1647884845733643, 2.0569169521331787], + [-3.3251397609710693, -1.3295925855636597], + [-1.072836995124817, 1.6470897197723389], + [-4.2463178634643555, -2.6059651374816895], + [-0.5319262146949768, 10.465547561645508], + [-0.3775472640991211, 9.128470420837402], + [8.876173973083496, -2.649066686630249], + [-0.07670531421899796, -2.832019090652466], + [0.3877124786376953, -5.135224342346191], + [0.8800678849220276, -7.684538841247559], + [-0.17950114607810974, -0.8601179122924805], + [-3.9504318237304688, 1.3722362518310547], + [-0.5635992288589478, 9.279253005981445], + [3.054095983505249, -4.846831321716309], + [-0.6198426485061646, 10.077493667602539], + [2.7662551403045654, -4.536047458648682], + [-5.369629383087158, 7.712555885314941], + [1.7482883930206299, 5.845003128051758], + [-1.0316901206970215, 1.0072021484375], + [-2.42549467086792, -2.7755279541015625], + [7.723667621612549, -2.3440825939178467], + [1.194742202758789, -0.5326184630393982], + [8.528457641601562, -2.9810187816619873], + [0.7826224565505981, -7.980988025665283], + [0.7544185519218445, 5.472153663635254], + [0.7087129950523376, -0.3072986602783203], + [0.651806116104126, -7.723554611206055], + [2.0434751510620117, 6.358870029449463], + [-0.5037652850151062, 0.7461471557617188], + [0.968776285648346, -5.226665496826172], + [2.7280328273773193, -5.092852592468262], + [8.343674659729004, -2.716813325881958], + [-1.0057393312454224, 10.127099990844727], + [-0.567177414894104, -1.2979949712753296], + [2.182736396789551, -4.522455215454102], + [0.6661109328269958, -7.3485822677612305], + [1.2175889015197754, -0.3151298761367798], + [0.730248749256134, -8.478348731994629], + [-2.380690574645996, 5.261990547180176], + [-1.2351070642471313, 10.866630554199219], + [-2.0423598289489746, 0.557035505771637], + [0.7836576700210571, -8.594526290893555], + [-3.0675106048583984, -0.9336065053939819], + [-2.229872465133667, 1.430416464805603], + [1.9498648643493652, -5.101507186889648], + [-3.4203548431396484, -3.085538148880005], + [1.5764126777648926, 2.376459836959839], + [-4.9276885986328125, -0.9999041557312012], + [0.3364601135253906, -0.9794068932533264], + [2.1155660152435303, 5.270571708679199], + [1.7140998840332031, 0.6395244598388672], + [8.430161476135254, -2.9753191471099854], + [0.03941660374403, 8.06518268585205], + [1.8414311408996582, 0.27937811613082886], + [-4.682987213134766, -3.3618030548095703], + [0.4249638319015503, -0.5993889570236206], + [0.5207536816596985, -7.89714241027832], + [3.0144906044006348, -4.880682945251465], + [2.5152127742767334, 6.4380083084106445], + [9.73702335357666, -2.9271750450134277], + [-3.7435834407806396, -2.4923312664031982], + [-1.366735577583313, 11.913576126098633], + [4.844918727874756, 7.922321319580078], + [-1.73195219039917, -0.8162602186203003], + [0.649033784866333, -7.392136573791504], + [-1.9377635717391968, 2.476672887802124], + [0.7147324681282043, -8.690561294555664], + [-0.3972940444946289, 9.605870246887207], + [-5.7192888259887695, 7.2997894287109375], + [-1.4232468605041504, 11.910909652709961], + [0.6159489750862122, -7.7957963943481445], + [0.46514129638671875, -7.344944000244141], + [-3.415984630584717, -1.8026283979415894], + [0.5365574955940247, 1.3313921689987183], + [-4.629631042480469, 6.387056350708008], + [6.809019565582275, -3.785311222076416], + [0.5846686363220215, -7.178854942321777], + [2.8912556171417236, -4.733498573303223], + [1.997575044631958, 5.880667686462402], + [2.5553197860717773, -4.401884078979492], + [-1.4157577753067017, 11.744680404663086], + [0.7473762631416321, -8.045839309692383], + [-0.09833455830812454, -3.5060646533966064], + [-4.558083534240723, 5.971243858337402], + [1.883607029914856, 0.5048617124557495], + [-2.7981698513031006, -0.731744647026062], + [-0.7906771302223206, 9.518987655639648], + [-2.0950675010681152, 0.9734319448471069], + [-4.398463249206543, 5.846175193786621], + [2.900449514389038, -4.950809955596924], + [-3.1191885471343994, -1.2408192157745361], + [7.14004373550415, -2.365344762802124], + [7.80936861038208, -2.383455753326416], + [-3.5879709720611572, 5.402387619018555], + [-1.715151309967041, 1.0162526369094849], + [0.17820194363594055, 1.3513869047164917], + [3.764146566390991, -0.9161221981048584], + [0.7923585772514343, -6.265298843383789], + [2.274535655975342, -5.371006965637207], + [-3.5363333225250244, -1.180977463722229], + [-1.099392056465149, 9.933897018432617], + [-2.6462836265563965, 2.8906242847442627], + [1.0526702404022217, 4.999864101409912], + [0.5637724995613098, -6.097716331481934], + [-3.685532569885254, -1.686848521232605], + [-2.901585817337036, 2.9964804649353027], + [-2.256488084793091, -0.23931622505187988], + [2.8444299697875977, -6.048524856567383], + [0.5027765035629272, -7.315489768981934], + [1.4054486751556396, -5.465089797973633], + [-0.9153083562850952, -2.2102067470550537], + [7.280179023742676, -3.038853406906128], + [1.0731955766677856, 0.08426311612129211], + [0.9475575089454651, 0.19351842999458313], + [-3.609309434890747, -1.6208807229995728], + [2.0637612342834473, -4.201495170593262], + [-2.8276658058166504, 3.8642678260803223], + [-4.001428127288818, -2.650622844696045], + [2.324962854385376, 5.519258499145508], + [0.38770002126693726, -3.983720541000366], + [-0.7276999950408936, 9.87470817565918], + [1.9632761478424072, -5.691943168640137], + [-3.7191712856292725, -2.434575319290161], + [0.7726629376411438, -8.77368450164795], + [-5.866848945617676, -0.9342374801635742], + [1.082546353340149, -7.945329666137695], + [-4.228299617767334, -2.158003807067871], + [-1.3736393451690674, 11.343072891235352], + [0.005451701581478119, -0.7531229257583618], + [0.4804227352142334, -7.5757317543029785], + [-2.8661532402038574, 5.3746771812438965], + [1.261721134185791, 5.100408554077148], + [-0.7516912221908569, 10.422608375549316], + [-0.728732705116272, 10.5590238571167], + [5.491815090179443, -1.2812159061431885], + [1.8828613758087158, -4.54653787612915], + [-1.1481380462646484, 10.659746170043945], + [2.0129692554473877, 5.134331703186035], + [-4.076585292816162, -0.9107109308242798], + [-4.658843517303467, -1.0771340131759644], + [-1.3939199447631836, 11.73780345916748], + [7.351552486419678, -2.2626750469207764], + [-3.7563371658325195, -1.874993085861206], + [-2.1873884201049805, 0.40561026334762573], + [-4.858673572540283, -0.7122198343276978], + [0.6546787619590759, -4.912565231323242], + [0.756568193435669, -5.383245944976807], + [-3.989391803741455, -2.380277633666992], + [-0.1672126054763794, 8.05366325378418], + [4.427994251251221, 7.4559173583984375], + [-4.65498161315918, 6.245202541351318], + [-3.1918933391571045, 5.173979759216309], + [5.003802299499512, 7.816549777984619], + [5.561098098754883, -2.735579013824463], + [0.22211816906929016, -4.483889579772949], + [0.4352872371673584, 1.8538588285446167], + [2.6206214427948, -4.351619720458984], + [-2.8916971683502197, -0.8337448239326477], + [1.011885404586792, -4.7456159591674805], + [8.755642890930176, -3.262275218963623], + [0.7705848813056946, -7.849192142486572], + [4.0607686042785645, 6.938532829284668], + [4.931745529174805, -0.7596207857131958], + [-4.441253185272217, -0.9753669500350952], + [3.5109341144561768, 6.590266227722168], + [0.7735289931297302, -8.281208038330078], + [2.660796880722046, 0.7251877784729004], + [3.496520757675171, 6.43217658996582], + [-1.9013646841049194, -1.8619204759597778], + [-3.8585736751556396, 5.579126358032227], + [-3.5842182636260986, -2.2719240188598633], + [0.6241500973701477, -7.873256683349609], + [-1.0419135093688965, 11.035709381103516], + [0.607393741607666, -8.15169620513916], + [-3.969238042831421, -1.3989529609680176], + [0.412178099155426, -5.966823577880859], + [2.288175106048584, -4.777185440063477], + [9.692968368530273, -2.9184064865112305], + [-2.0549895763397217, 2.357144594192505], + [1.9907629489898682, -5.63092041015625], + [1.9834768772125244, 5.564347743988037], + [-0.6528517007827759, 9.905519485473633], + [-4.223611354827881, -4.622157096862793], + [-0.5551295280456543, -2.2667503356933594], + [1.16858971118927, -5.838102340698242], + [-3.9547278881073, -1.3402665853500366], + [-1.49394953250885, -0.9247239828109741], + [-3.7432165145874023, -0.7744928002357483], + [3.5316381454467773, 6.283348083496094], + [-3.652182102203369, -0.28968894481658936], + [2.6443307399749756, -4.420599937438965], + [-3.2031643390655518, 5.503330230712891], + [-3.3591620922088623, -0.9237737059593201], + [-1.698266625404358, 1.5674772262573242], + [0.3144778311252594, -2.9955644607543945], + [0.012731246650218964, -3.7410645484924316], + [-3.793524742126465, -1.0515809059143066], + [1.9141132831573486, 5.895857334136963], + [-5.085051536560059, 6.933800220489502], + [-3.0853302478790283, -2.620213031768799], + [-1.3419716358184814, 11.61628532409668], + [0.5732545256614685, -7.498071670532227], + [-4.182483673095703, 4.494057655334473], + [-1.912468433380127, 1.8957490921020508], + [-4.794068336486816, 6.796382427215576], + [2.4800403118133545, -4.880277633666992], + [0.5790860652923584, -7.734706401824951], + [-3.261247396469116, -3.2339046001434326], + [0.375011682510376, -7.166335105895996], + [-0.8321719765663147, 10.170084953308105], + [-4.743177890777588, 7.141146659851074], + [1.206520676612854, 5.248301029205322], + [0.6613525748252869, -0.8142467737197876], + [-2.638909101486206, 6.275413513183594], + [3.0849294662475586, -4.79521369934082], + [-1.0938940048217773, 11.18916130065918], + [2.719059705734253, -4.692160606384277], + [2.773040294647217, -4.287981986999512], + [0.3316954970359802, -5.123595714569092], + [-0.4576531946659088, -2.6529722213745117], + [-5.312865734100342, 6.519761562347412], + [-0.048342473804950714, -2.241044521331787], + [-2.2810213565826416, -1.1144274473190308], + [2.8206119537353516, -4.700801849365234], + [2.7876405715942383, -4.45545768737793], + [0.3169294595718384, 9.987309455871582], + [3.4993107318878174, 6.812286376953125], + [-2.0339438915252686, 2.248500108718872], + [2.3878486156463623, 3.8920705318450928], + [-4.729990482330322, -5.073042392730713], + [7.038482189178467, -2.2844278812408447], + [-0.24641475081443787, -1.77639639377594], + [7.888487339019775, -2.580413579940796], + [2.946449041366577, -4.968194007873535], + [-0.9942254424095154, 10.301528930664062], + [-0.06837112456560135, -4.8043413162231445], + [-2.9661927223205566, -1.6721612215042114], + [2.0122573375701904, 5.53769588470459], + [1.080836296081543, -7.122431755065918], + [-1.5634100437164307, 1.8484225273132324], + [0.01117037981748581, -3.5368728637695312], + [0.8620632886886597, 5.057950973510742], + [6.51947546005249, -3.0752761363983154], + [0.351310670375824, -4.734179496765137], + [2.8787429332733154, -4.736022472381592], + [-5.171307563781738, 7.367955207824707], + [-1.3850200176239014, 11.623674392700195], + [-3.0752408504486084, -0.23188024759292603], + [-3.4001052379608154, -1.1670162677764893], + [7.04015588760376, -3.4912874698638916], + [-0.9980573058128357, -0.49946603178977966], + [-4.639247417449951, -1.0044413805007935], + [-3.543699264526367, -2.3608977794647217], + [4.084224700927734, 7.196405410766602], + [-4.898190975189209, -0.46931904554367065], + [-0.6651491522789001, -0.9284060597419739], + [-0.40569597482681274, -1.1790519952774048], + [-1.6446235179901123, 1.1425857543945312], + [8.096395492553711, -2.7960221767425537], + [4.445038318634033, 7.437350273132324], + [0.46405643224716187, -6.617192268371582], + [4.256735324859619, 7.256537437438965], + [0.6642378568649292, -7.04948616027832], + [2.5178239345550537, 4.503406524658203], + [-4.469776630401611, 6.0333356857299805], + [-4.814374923706055, -2.3871941566467285], + [-5.911933422088623, 7.864492416381836], + [8.107890129089355, -2.8150901794433594], + [9.777281761169434, -2.924638509750366], + [1.9728024005889893, -4.8246307373046875], + [-2.1190025806427, 2.3578600883483887], + [-5.278157711029053, -0.8992273807525635], + [0.4662049412727356, -6.761513710021973], + [0.5382804274559021, -7.448301315307617], + [-3.0381009578704834, -2.227708101272583], + [-0.7430264949798584, 10.82638931274414], + [2.2241623401641846, 5.772406578063965], + [-0.010161466896533966, -4.240671157836914], + [-3.7033727169036865, -2.0818541049957275], + [9.098169326782227, -2.7753918170928955], + [-3.765249490737915, -3.6935603618621826], + [0.7655513882637024, -8.990889549255371], + [-4.447715759277344, -3.6189796924591064], + [8.504464149475098, -3.083113431930542], + [-5.335338115692139, 6.393251419067383], + [-0.923638641834259, 10.558390617370605], + [0.5329057574272156, -6.601795673370361], + [2.45530104637146, -4.647636413574219], + [-1.6384211778640747, 2.3145041465759277], + [-0.4315788745880127, 9.744949340820312], + [2.345003366470337, -3.8697869777679443], + [0.19020411372184753, -0.4816637933254242], + [-4.016323089599609, 5.994394779205322], + [-1.9965561628341675, 2.180223226547241], + [-0.3833601474761963, 8.762495994567871], + [-4.768696308135986, 3.6903388500213623], + [-0.749094545841217, -0.5848901271820068], + [-3.202857255935669, -0.5276129245758057], + [1.5903329849243164, -5.583756923675537], + [1.0215213298797607, -5.3518853187561035], + [-4.726380825042725, 7.3825883865356445], + [6.234349250793457, -3.075172185897827], + [-1.1873127222061157, 11.26601791381836], + [-0.42045897245407104, -0.8669602274894714], + [-3.5836269855499268, 2.415980815887451], + [2.9462711811065674, -4.8668904304504395], + [-1.0999951362609863, 10.821981430053711], + [2.723036766052246, -4.479496955871582], + [-1.2629508972167969, 10.986749649047852], + [-3.375905752182007, -2.012327194213867], + [6.562230587005615, -2.3523354530334473], + [-5.109638214111328, 6.468985557556152], + [-0.756441056728363, 9.937353134155273], + [0.78265780210495, -6.7695088386535645], + [-5.378955841064453, 7.578351020812988], + [-4.071893215179443, 0.6740293502807617], + [-1.9221596717834473, 1.6482561826705933], + [7.70875883102417, -2.33144211769104], + [0.6341139078140259, -7.942071914672852], + [-3.863790273666382, -1.7136294841766357], + [1.7753578424453735, 0.8561809062957764], + [5.643004894256592, -1.295068621635437], + [2.5442111492156982, -5.275781154632568], + [6.72379732131958, -2.808229684829712], + [2.2819278240203857, 5.314968109130859], + [1.8207528591156006, -5.725139617919922], + [-0.6426157355308533, 10.138099670410156], + [-1.6449766159057617, 2.214982271194458], + [-1.111966609954834, 10.361642837524414], + [-2.6428604125976562, -2.4795281887054443], + [5.345701694488525, -0.9530375003814697], + [-1.3004170656204224, 11.133829116821289], + [-1.1344150304794312, 10.46682071685791], + [1.9359803199768066, 5.657750129699707], + [2.4648873805999756, 6.366748809814453], + [3.3858864307403564, 6.40008544921875], + [-5.518399715423584, -4.590963363647461], + [0.5429489612579346, -8.016512870788574], + [1.0221636295318604, -6.525369167327881], + [0.533382773399353, -6.227275371551514], + [3.19799542427063, -4.959205627441406], + [-3.483557939529419, -1.6058937311172485], + [-4.862179279327393, 7.26059103012085], + [2.4420745372772217, 5.078561782836914], + [-4.297003746032715, -2.005825996398926], + [0.652906060218811, -7.451045513153076], + [1.9066444635391235, 4.816829204559326], + [2.954900026321411, -4.679751396179199], + [-1.3796496391296387, 11.71181869506836], + [-3.1117465496063232, -3.5708024501800537], + [-4.632714748382568, -3.785278797149658], + [-0.018702752888202667, -5.085124492645264], + [4.3761820793151855, -3.755606174468994], + [7.401723861694336, -3.6621627807617188], + [2.3750522136688232, 5.692109107971191], + [-1.5715396404266357, 5.7862701416015625], + [1.5593047142028809, 5.9422712326049805], + [2.6212856769561768, -4.420126914978027], + [8.450728416442871, -3.186591625213623], + [-5.532253742218018, 6.6469526290893555], + [2.4461729526519775, -5.683510780334473], + [9.74300479888916, -2.9134891033172607], + [-1.136143445968628, 10.468637466430664], + [5.9736104011535645, -1.6043171882629395], + [-4.399118423461914, -2.776235342025757], + [-1.5872596502304077, 1.6792125701904297], + [-5.003166198730469, 7.24521541595459], + [-4.483013153076172, 4.561741352081299], + [0.09631484001874924, 7.735701560974121], + [-4.649805068969727, -0.9605443477630615], + [0.20815670490264893, -5.650060653686523], + [2.249397039413452, -0.09076103568077087], + [-3.962552309036255, -1.061168909072876], + [0.44681042432785034, -0.8827895522117615], + [-3.0734992027282715, -0.6188593506813049], + [0.5005390048027039, -8.282020568847656], + [-4.526231288909912, -2.273721694946289], + [-5.965712070465088, -0.814577043056488], + [-3.7198140621185303, -2.0181448459625244], + [0.34901124238967896, -6.645598411560059], + [-3.3246800899505615, 3.571972370147705], + [-4.273955821990967, 0.253501832485199], + [-1.0988349914550781, 10.320197105407715], + [4.977807521820068, 8.084321975708008], + [-4.010080814361572, -1.628565788269043], + [0.7141532301902771, -4.929846286773682], + [-3.170259714126587, -1.9814982414245605], + [0.2563014626502991, -1.3676408529281616], + [0.6106847524642944, -8.193985939025879], + [2.317720651626587, -4.438070297241211], + [0.5024269223213196, -7.330735206604004], + [2.531209945678711, -4.624478340148926], + [-0.7262280583381653, 10.117973327636719], + [-4.209286689758301, -1.4109501838684082], + [2.2156054973602295, -4.615931510925293], + [-0.05298314243555069, -3.1619555950164795], + [-5.599141597747803, 5.801263809204102], + [0.22856667637825012, -0.7780824899673462], + [-1.1854383945465088, 10.785329818725586], + [-5.114467144012451, 5.547079563140869], + [-5.16318416595459, 6.82734489440918], + [-0.24849247932434082, 8.649759292602539], + [-1.0815801620483398, 2.0530216693878174], + [0.48185187578201294, -7.70917272567749], + [2.74133563041687, -4.897573471069336], + [-2.172494411468506, -0.8713515400886536], + [7.724725246429443, -2.666419744491577], + [3.4142725467681885, 6.12741756439209], + [0.7250811457633972, -3.9756953716278076], + [-1.5354892015457153, 12.660856246948242], + [-1.4581249952316284, 1.4064291715621948], + [0.28854477405548096, -6.10380744934082], + [4.853969573974609, 7.798991680145264], + [-3.7732136249542236, 5.7265167236328125], + [-4.845666408538818, 3.3393118381500244], + [5.9753851890563965, -3.6199796199798584], + [7.865717887878418, -2.618974447250366], + [3.1434361934661865, -4.979946136474609], + [7.569608211517334, -2.7806880474090576], + [-0.34330183267593384, 9.98719596862793], + [-4.2402496337890625, 6.180324554443359], + [-3.3359687328338623, -1.3383792638778687], + [5.580151081085205, -1.0885634422302246], + [8.232794761657715, -2.8901774883270264], + [-1.8696380853652954, 0.8394514322280884], + [-0.6651281714439392, 9.607966423034668], + [-2.838115930557251, 0.07579204440116882], + [0.7080250382423401, -9.304097175598145], + [-1.5370213985443115, -1.5478103160858154], + [1.866712212562561, 2.220588445663452], + [-3.3314170837402344, 5.846294403076172], + [0.4785187840461731, -4.9063849449157715], + [-3.9242327213287354, -1.5274995565414429], + [0.5867665410041809, -7.490573883056641], + [-3.6171581745147705, -2.616873025894165], + [-4.805931568145752, -0.6378844380378723], + [-1.3690723180770874, 11.479033470153809], + [-1.4537992477416992, -0.7034522294998169], + [0.5804877877235413, -6.422815322875977], + [2.7546989917755127, -4.645562171936035], + [-0.7177510857582092, 10.103618621826172], + [-3.265721321105957, -0.7801722288131714], + [2.4986603260040283, -4.13430118560791], + [-2.4704811573028564, 6.263101577758789], + [-2.8165972232818604, -1.2749053239822388], + [-1.8135653734207153, 1.691673994064331], + [-5.23839807510376, -1.9428399801254272], + [2.4999611377716064, 5.5866899490356445], + [-0.7116304039955139, 10.505243301391602], + [3.3508682250976562, 6.09520149230957], + [-4.528701305389404, -1.0908499956130981], + [6.63306188583374, -2.02306866645813], + [-1.8527860641479492, 2.304980754852295], + [0.7355958819389343, -7.791650295257568], + [-5.606268882751465, 5.605303764343262], + [-1.8222172260284424, 0.9482235908508301], + [1.6760690212249756, 5.073678493499756], + [-1.1657683849334717, 3.599925994873047], + [3.465986967086792, 6.714929103851318], + [3.1143200397491455, -5.397345066070557], + [0.7043688297271729, -8.397321701049805], + [-2.0507898330688477, -1.0399448871612549], + [-0.5059360265731812, -0.7465325593948364], + [3.6526196002960205, 6.6966352462768555], + [-0.697089433670044, 10.317266464233398], + [-3.6282248497009277, -3.0836830139160156], + [-4.02336311340332, -1.5853567123413086], + [1.0827075242996216, -7.212665557861328], + [2.575657367706299, -5.058629035949707], + [-4.654395580291748, 6.7756781578063965], + [0.6660284996032715, -7.926662445068359], + [0.19378218054771423, -4.142810344696045], + [-3.589538812637329, -1.2052161693572998], + [-2.9970901012420654, 4.670293807983398], + [-3.8608505725860596, -1.607677936553955], + [8.756817817687988, -2.9023101329803467], + [6.638930797576904, -2.7088255882263184], + [1.857052206993103, -5.8556227684021], + [-3.9329993724823, -2.744245767593384], + [-2.5674984455108643, -0.8075088858604431], + [-3.7553517818450928, -3.3169732093811035], + [0.672099232673645, -0.40575504302978516], + [-4.272515296936035, -1.3829582929611206], + [0.3668099641799927, -4.693634986877441], + [-3.587522268295288, -0.6121498942375183], + [0.43242400884628296, -4.463550567626953], + [2.251790761947632, 0.623083233833313], + [-4.199790000915527, -3.375361680984497], + [6.579810619354248, -2.235145092010498], + [-4.291770935058594, -0.3294837474822998], + [2.3552963733673096, 5.788572311401367], + [0.561271607875824, -4.541801452636719], + [-4.4208149909973145, -4.00481653213501], + [-3.4996421337127686, 5.4708709716796875], + [-4.26482629776001, -2.0708909034729004], + [-2.6360652446746826, 4.656876564025879], + [0.24029070138931274, -5.591376304626465], + [1.97798490524292, 5.091099739074707], + [0.9428847432136536, -0.5123400688171387], + [-4.970344066619873, 6.85453987121582], + [5.093799591064453, 8.003722190856934], + [2.5938758850097656, -4.047876358032227], + [0.5111032724380493, -7.539466381072998], + [-3.1290552616119385, -0.23777592182159424], + [5.6721577644348145, -3.4228298664093018], + [2.9558026790618896, -4.4466872215271], + [6.274546146392822, -2.3298499584198], + [-1.5044227838516235, 2.0023863315582275], + [-4.203036308288574, -2.6604433059692383], + [-0.03280795365571976, -4.64889669418335], + [1.8129432201385498, 3.9773871898651123], + [-3.482144832611084, -0.5414233803749084], + [2.223302125930786, -3.8420238494873047], + [-0.9454279541969299, 10.996003150939941], + [-3.555924892425537, -1.8663939237594604], + [7.075872898101807, -2.202899217605591], + [0.7473146319389343, -8.590448379516602], + [0.4489653706550598, -6.615841865539551], + [1.7422548532485962, 4.571559429168701], + [-4.840798854827881, -3.6805317401885986], + [-2.1794028282165527, -0.6103244423866272], + [0.11548440903425217, -4.968359470367432], + [3.248927354812622, -3.5479607582092285], + [-4.9374308586120605, -1.0499454736709595], + [1.2987436056137085, 2.472052812576294], + [2.4476051330566406, -4.853832244873047], + [-0.17747271060943604, 6.955031394958496], + [0.23831915855407715, -6.04566764831543], + [2.8926055431365967, -4.850764274597168], + [-1.2666717767715454, 12.073015213012695], + [-1.1358293294906616, 11.490509033203125], + [6.947707176208496, -3.9106333255767822], + [-3.696335554122925, -2.798405408859253], + [7.971042156219482, -2.6672885417938232], + [0.5713900923728943, -7.939220428466797], + [3.197740077972412, -2.837083578109741], + [1.755520224571228, 5.968362808227539], + [1.0021356344223022, 0.3645109534263611], + [9.475577354431152, -2.955857038497925], + [0.9698775410652161, -6.495732307434082], + [-0.6239694952964783, 9.984196662902832], + [1.4061391353607178, 0.6380490064620972], + [2.336235284805298, 5.611093521118164], + [-3.2361650466918945, -0.9501559734344482], + [-3.543977737426758, -0.7165910601615906], + [0.991244375705719, -0.033123377710580826], + [0.717720627784729, -6.797213554382324], + [1.6497100591659546, 2.106003522872925], + [-1.2573374509811401, 11.44354248046875], + [0.7037453055381775, -9.093144416809082], + [0.17823952436447144, -5.621706008911133], + [-4.419394016265869, 5.080027103424072], + [-1.6623680591583252, -0.85908442735672], + [7.888530254364014, -2.7284867763519287], + [-0.5647432804107666, -3.403477668762207], + [10.407919883728027, -3.1592154502868652], + [-3.721527338027954, -1.6754149198532104], + [-3.838060140609741, 4.43341064453125], + [2.199800968170166, 3.874861001968384], + [2.2578201293945312, -4.443818092346191], + [-5.110735893249512, -3.7913079261779785], + [-3.3870561122894287, -1.167951226234436], + [2.0636253356933594, -3.756744384765625], + [-4.157029151916504, -1.4902371168136597], + [-4.836676120758057, -2.0725696086883545], + [1.5321577787399292, -6.432696342468262], + [0.2885175347328186, -5.550037384033203], + [-2.1061198711395264, 2.636023998260498], + [-1.709503173828125, 1.401855707168579], + [1.6629517078399658, -4.388132095336914], + [0.42819923162460327, -6.140122413635254], + [-2.0565176010131836, 2.528102159500122], + [0.4736521244049072, -4.186881065368652], + [1.0729434490203857, -5.668177127838135], + [7.069122314453125, -2.51159930229187], + [-1.6848455667495728, 1.5694471597671509], + [2.130347967147827, 3.502936363220215], + [1.6919292211532593, 4.290722846984863], + [-2.6045424938201904, 2.685793161392212], + [0.6073917150497437, -6.435760498046875], + [-1.74899160861969, -0.8718676567077637], + [4.702682018280029, 7.718807220458984], + [-3.472261667251587, -3.344735860824585], + [6.310035228729248, -3.536977767944336], + [1.931140661239624, -4.420829772949219], + [0.07143884152173996, -3.9502649307250977], + [1.3256099224090576, 0.8420556783676147], + [-0.6972676515579224, 9.297158241271973], + [3.5645294189453125, -4.031062602996826], + [6.243863582611084, -1.9482671022415161], + [0.2289905548095703, -4.6680097579956055], + [-3.848223924636841, 0.8030442595481873], + [-0.38603824377059937, 10.080814361572266], + [-2.9268887042999268, -2.0737693309783936], + [-0.9699521660804749, -3.0290021896362305], + [-5.725515842437744, 7.436363220214844], + [2.62636137008667, -4.311278820037842], + [-2.1277554035186768, 1.2601808309555054], + [-4.978353023529053, -1.3570572137832642], + [-0.5289280414581299, 7.467962265014648], + [-0.08958245068788528, -4.4897966384887695], + [-4.405333042144775, 4.48998498916626], + [0.10003691166639328, -5.680497169494629], + [0.5921303033828735, -6.63838005065918], + [2.7688419818878174, -4.251067638397217], + [9.350981712341309, -2.841508150100708], + [-1.460509181022644, -0.06645172834396362], + [6.795849323272705, -1.9844170808792114], + [-1.6108850240707397, 13.072708129882812], + [2.9964802265167236, -4.984261512756348], + [2.031151533126831, 6.008334636688232], + [0.7589759230613708, -9.55990982055664], + [0.26699161529541016, 7.427236557006836], + [-3.526481866836548, -1.4300354719161987], + [-3.7862226963043213, -2.1654515266418457], + [-4.060650825500488, 5.953069686889648], + [-5.409362316131592, 7.764242172241211], + [0.7211169004440308, 0.8113803863525391], + [-0.23597732186317444, -2.540461778640747], + [-3.6019370555877686, -1.4336985349655151], + [-3.521364450454712, -1.255532145500183], + [5.7439351081848145, -1.4480072259902954], + [-1.2446428537368774, 10.995031356811523], + [1.9288735389709473, 5.2377705574035645], + [2.087357759475708, 5.863569736480713], + [-3.2050678730010986, -1.107115387916565], + [-1.9381071329116821, 1.2389252185821533], + [7.065938472747803, -2.8343472480773926], + [0.6742348670959473, -8.095062255859375], + [1.4655249118804932, -4.501986026763916], + [-3.565068483352661, -0.9456145763397217], + [-1.5358281135559082, 11.977770805358887], + [2.582347869873047, -4.532562732696533], + [-4.066059589385986, 6.307290077209473], + [-1.6613240242004395, 0.4639044404029846], + [-2.7549407482147217, 3.4715425968170166], + [-4.321477890014648, 6.370162010192871], + [-3.6871798038482666, -3.57533860206604], + [1.5780173540115356, 5.944913864135742], + [0.6160574555397034, -8.19884204864502], + [-5.326976299285889, -0.8622024655342102], + [-3.6877801418304443, -1.4271622896194458], + [-3.8759090900421143, -0.0014981068670749664], + [0.7635415196418762, -8.677854537963867], + [2.2947545051574707, -4.772364616394043], + [-1.5412952899932861, 1.8131424188613892], + [10.494939804077148, -3.118410587310791], + [-4.216814041137695, -3.273123025894165], + [-3.87768292427063, -1.0009698867797852], + [0.11300437897443771, -5.9619975090026855], + [-4.199466705322266, -2.6783838272094727], + [0.18866199254989624, 5.452874183654785], + [1.1043998003005981, -5.0742902755737305], + [-3.206843137741089, -0.8998126983642578], + [-2.0579049587249756, 2.340160846710205], + [-3.423457384109497, -0.10116559267044067], + [-3.4783084392547607, -0.8176205158233643], + [-2.9221420288085938, -1.9528411626815796], + [-2.0209484100341797, 2.036898374557495], + [-3.2818663120269775, 6.672284126281738], + [0.27095258235931396, -6.188145160675049], + [-2.5688366889953613, -0.6624108552932739], + [-1.4940978288650513, 1.6259797811508179], + [-3.8102915287017822, 8.202877044677734], + [7.978429317474365, -3.0575520992279053], + [-3.2086150646209717, -1.1443805694580078], + [-4.0284624099731445, -2.697253704071045], + [-4.3139824867248535, 6.697467803955078], + [-0.136703222990036, -0.7686387300491333], + [0.6449215412139893, -8.229756355285645], + [-1.9845402240753174, -0.3924996256828308], + [-1.8421990871429443, 0.895296037197113], + [-3.999391794204712, 6.140458106994629], + [6.697079181671143, -4.9816484451293945], + [2.321782350540161, -1.7828876972198486], + [-0.1480882167816162, -2.2245728969573975], + [-2.6057965755462646, 4.752688884735107], + [-3.342491388320923, -1.2617965936660767], + [-3.285747766494751, -1.085403561592102], + [2.4269943237304688, 5.606860160827637], + [3.5946223735809326, 7.015615463256836], + [1.9646446704864502, -4.300243854522705], + [-0.80778568983078, 11.02649211883545], + [2.812363386154175, -5.006479263305664], + [-3.312199592590332, -1.0332386493682861], + [2.4760849475860596, 3.3380095958709717], + [0.6690976619720459, -8.218132019042969], + [3.606273889541626, 6.58436393737793], + [2.2351696491241455, -4.061966419219971], + [6.673368453979492, -3.8994884490966797], + [1.3688251972198486, 4.723804473876953], + [0.46813201904296875, -7.159756660461426], + [-3.749699592590332, 5.48012638092041], + [2.164578676223755, 5.538669586181641], + [-1.1608082056045532, 10.541475296020508], + [1.5652320384979248, 7.535284996032715], + [1.220426321029663, 4.926936149597168], + [1.9635045528411865, -5.711942195892334], + [-0.9006606936454773, 10.291959762573242], + [-4.28549337387085, 5.2131757736206055], + [2.4399540424346924, -5.028977394104004], + [-2.169294834136963, 4.8396759033203125], + [9.034945487976074, -2.7447030544281006], + [0.7084447741508484, -8.198548316955566], + [-3.0956573486328125, -2.2044012546539307], + [-2.104060411453247, 0.7223345041275024], + [-3.9963278770446777, -2.4605634212493896], + [-3.366572618484497, 0.42366263270378113], + [0.06209032982587814, 8.504867553710938], + [1.3741072416305542, -5.102656364440918], + [-3.783034324645996, -0.9277116060256958], + [-4.592037200927734, 6.4876909255981445], + [0.12239962071180344, -1.01553213596344], + [1.0059657096862793, -7.136704921722412], + [3.3397858142852783, 6.2878828048706055], + [1.673870325088501, 2.056389093399048], + [3.1804425716400146, 6.8373284339904785], + [1.7656432390213013, 4.256230354309082], + [0.4978829026222229, -6.801551818847656], + [-3.8074700832366943, -2.7052528858184814], + [0.809805691242218, -6.3636369705200195], + [-1.6035782098770142, 0.6747088432312012], + [2.9713401794433594, -4.9236602783203125], + [1.6054315567016602, 2.104661226272583], + [-1.1685713529586792, 10.040390968322754], + [-4.786144256591797, -0.8078291416168213], + [1.4302010536193848, -5.342290878295898], + [1.7150970697402954, 1.3732911348342896], + [5.642895221710205, -2.121394157409668], + [1.3973913192749023, -5.3590087890625], + [-1.2903907299041748, 11.565481185913086], + [0.6535035371780396, -6.4585161209106445], + [0.33842432498931885, -5.378011703491211], + [1.4681386947631836, -4.8702392578125], + [-3.6271588802337646, 0.7067567110061646], + [0.5316956639289856, -6.5560383796691895], + [-1.794189214706421, 1.7149025201797485], + [-1.8076953887939453, 1.7717348337173462], + [1.984656572341919, 2.437115430831909], + [-2.723881959915161, 2.651029586791992], + [-1.2604213953018188, 11.265800476074219], + [-1.3840162754058838, 0.46672719717025757], + [-3.5050699710845947, -0.47412729263305664], + [3.041516065597534, -5.172621250152588], + [2.919996976852417, -4.658888339996338], + [-1.8417634963989258, 1.656677484512329], + [-1.0901494026184082, 10.47425365447998], + [-1.9158402681350708, 1.706802487373352], + [-2.9507076740264893, -1.047761082649231], + [-0.06440622359514236, -1.3990004062652588], + [0.6694395542144775, -8.265329360961914], + [-2.450953722000122, -0.07274365425109863], + [-1.9040119647979736, 2.451704502105713], + [2.9839565753936768, -4.705816745758057], + [6.308595180511475, -4.516800403594971], + [-5.159916400909424, 6.921833515167236], + [-2.051194906234741, 1.9463623762130737], + [2.9185869693756104, -4.655305862426758], + [-1.2007999420166016, 10.69073486328125], + [0.1151772066950798, -5.529758453369141], + [-2.687268018722534, 2.9289515018463135], + [0.9106927514076233, -8.029879570007324], + [-2.600478410720825, -0.40810713171958923], + [-2.835653781890869, 4.86185359954834], + [7.331611156463623, -1.8488789796829224], + [-0.19147294759750366, 8.72627067565918], + [-2.649599313735962, -0.8018774390220642], + [-1.4193319082260132, 11.943458557128906], + [2.702171564102173, -4.581790924072266], + [-1.3589370250701904, 11.814798355102539], + [5.934092998504639, -3.860607147216797], + [0.604120671749115, -7.890688896179199], + [-3.9463136196136475, -1.884876012802124], + [2.237135648727417, -4.763706207275391], + [-4.5295233726501465, 6.391879081726074], + [-3.6910362243652344, -2.638716459274292], + [0.7456884980201721, -9.015069961547852], + [-3.719104051589966, -1.254095196723938], + [0.34523439407348633, -6.576084136962891], + [-3.956040143966675, -1.2529579401016235], + [-4.44157075881958, 6.2735700607299805], + [-1.4891477823257446, 12.378247261047363], + [-3.2332382202148438, 3.55290150642395], + [-4.083245277404785, 6.674114227294922], + [-3.0901434421539307, -1.0406277179718018], + [-4.032610893249512, -0.49882078170776367], + [-5.148195266723633, 5.857337951660156], + [-1.6390955448150635, 1.5411736965179443], + [2.3402788639068604, -5.1541571617126465], + [2.305277109146118, -4.8944478034973145], + [0.30932679772377014, -4.868614196777344], + [0.9299401640892029, -6.41260290145874], + [-5.765452861785889, 7.549284934997559], + [-3.4408700466156006, 4.384332656860352], + [-1.7190277576446533, 1.2532005310058594], + [2.4074270725250244, 6.220648288726807], + [-1.944565773010254, 1.145825982093811], + [-1.6252604722976685, 1.750375747680664], + [-0.3284996747970581, -1.438275694847107], + [0.33280372619628906, -5.967660903930664], + [0.21544551849365234, -1.114846110343933], + [0.4751291871070862, -6.5096025466918945], + [1.1984171867370605, -0.26150086522102356], + [-5.031620025634766, -1.5030899047851562], + [-1.4028089046478271, 1.6271560192108154], + [1.4043396711349487, 4.7643632888793945], + [-3.9020049571990967, -2.2687747478485107], + [5.589121341705322, -3.5539333820343018], + [-1.4399608373641968, -0.9442068338394165], + [6.339375019073486, -3.389957904815674], + [7.860669136047363, -3.079753875732422], + [-4.498947620391846, -1.9715465307235718], + [-1.1047534942626953, 10.301162719726562], + [3.993283987045288, 7.5941901206970215], + [1.7215638160705566, 1.0694998502731323], + [0.38882362842559814, -5.384823799133301], + [3.690315008163452, 7.023913383483887], + [6.115530490875244, -2.0161914825439453], + [-2.190096139907837, 2.0273914337158203], + [0.9780203700065613, 3.6621625423431396], + [6.774911403656006, -3.6625518798828125], + [8.342063903808594, -2.5959689617156982], + [-3.0736806392669678, -1.1621372699737549], + [-1.2850322723388672, 11.505905151367188], + [1.7484482526779175, -4.978743553161621], + [-0.5566957592964172, 6.959967613220215], + [2.7248404026031494, -4.701752662658691], + [2.0070674419403076, 6.160709381103516], + [-1.2799046039581299, 10.88737678527832], + [-0.8801743984222412, -0.6247847080230713], + [-1.4193894863128662, 12.108813285827637], + [-4.94230842590332, -1.2162278890609741], + [2.927637815475464, -4.891383647918701], + [1.4599292278289795, 4.844134330749512], + [-4.336349964141846, 6.223155975341797], + [-1.5199530124664307, 1.1107131242752075], + [-2.932504415512085, -3.4335734844207764], + [-2.08416748046875, -2.1596460342407227], + [-4.8711018562316895, 6.526828289031982], + [-0.4023284912109375, 9.318623542785645], + [2.6736044883728027, -4.952235221862793], + [-2.7559711933135986, 3.073518991470337], + [-0.5823200345039368, 10.566873550415039], + [-0.9293097257614136, 10.142556190490723], + [-1.6228759288787842, 1.4410400390625], + [-4.103703498840332, -0.9131065607070923], + [-2.452425003051758, 4.812565326690674], + [1.5627001523971558, 5.294805526733398], + [2.132039785385132, -5.188676834106445], + [9.272669792175293, -2.845362901687622], + [1.3532668352127075, -5.309116840362549], + [8.246134757995605, -2.463477849960327], + [6.765110492706299, -2.4615156650543213], + [-1.644422173500061, 12.891275405883789], + [2.394174098968506, -4.52585506439209], + [3.1796281337738037, -4.940159320831299], + [-3.600270986557007, -2.110503911972046], + [2.654802083969116, -4.298577308654785], + [0.2742987871170044, -4.90987491607666], + [-5.293977737426758, 7.2010297775268555], + [0.9094123244285583, 7.577277183532715], + [8.537880897521973, -3.163801431655884], + [3.719576597213745, -6.074770927429199], + [-0.2839393615722656, 9.120166778564453], + [-5.199224948883057, -0.9727616310119629], + [-4.203175067901611, -1.0183820724487305], + [8.803971290588379, -3.190678358078003], + [-2.840998649597168, 5.514087677001953], + [-2.145869016647339, -0.930543839931488], + [0.6567670702934265, -8.732318878173828], + [0.6153395771980286, -8.27161979675293], + [-3.8367249965667725, -2.503091335296631], + [1.5819159746170044, 2.0041496753692627], + [1.7860960960388184, -4.149659633636475], + [-3.961733102798462, -1.0861605405807495], + [2.9134879112243652, -4.531510353088379], + [0.7446478009223938, -8.356315612792969], + [-1.5743552446365356, 12.619192123413086], + [-5.542303085327148, 5.8271074295043945], + [0.958736002445221, -0.4293125867843628], + [1.4506696462631226, 0.0799577534198761], + [-1.4044471979141235, 12.3662109375], + [0.474345326423645, -5.083983421325684], + [1.8520456552505493, -4.127220153808594], + [-4.316283226013184, -1.4111738204956055], + [-1.6985026597976685, 0.4081597328186035], + [0.7042799592018127, -7.412996292114258], + [0.4950672388076782, -7.407136917114258], + [1.354756474494934, -4.785458564758301], + [-3.5669400691986084, -1.1714019775390625], + [-0.7391422986984253, 0.6399264335632324], + [1.1760642528533936, -4.958556175231934], + [-1.2153185606002808, 11.080846786499023], + [-3.761565923690796, -1.6937984228134155], + [-1.1871174573898315, 10.793004989624023], + [-0.7603989243507385, 10.332019805908203], + [-1.201757788658142, 1.4419325590133667], + [1.1822319030761719, 1.685131311416626], + [-1.9107199907302856, 0.287087619304657], + [0.7029393315315247, -7.971236228942871], + [-3.989232301712036, -1.2836579084396362], + [-3.0152676105499268, -3.313321352005005], + [0.03636603802442551, 0.47562241554260254], + [-2.4910166263580322, 5.990633964538574], + [-4.606709003448486, -2.9154770374298096], + [2.601234197616577, 5.864555835723877], + [0.5613670945167542, -5.056125164031982], + [1.3379392623901367, 4.997746467590332], + [8.0979642868042, -2.9173622131347656], + [2.2597272396087646, -3.648973226547241], + [-3.219863176345825, -0.7557199597358704], + [-2.108621120452881, -0.9527846574783325], + [-1.296128273010254, 11.402796745300293], + [-5.495138168334961, -1.1532219648361206], + [0.44870465993881226, -4.506026744842529], + [-3.896458387374878, 3.542888879776001], + [2.584974527359009, 0.7950013875961304], + [7.012028694152832, -1.907470941543579], + [-3.8965985774993896, -0.9628283381462097], + [-1.6530680656433105, 0.7702871561050415], + [-4.614730358123779, 6.089987277984619], + [1.313791275024414, -6.369416236877441], + [-1.7283380031585693, 1.0970962047576904], + [3.220506429672241, -4.92050313949585], + [6.020278453826904, -1.388453483581543], + [0.35570579767227173, -6.562150955200195], + [0.24432122707366943, -5.479946136474609], + [-0.9922832250595093, 10.408285140991211], + [-3.69622540473938, -0.9991976618766785], + [0.9907689690589905, -5.4654035568237305], + [-0.2516327500343323, 9.238967895507812], + [-2.7536258697509766, -0.9467676281929016], + [2.9208614826202393, -4.422039031982422], + [-3.4823710918426514, -0.9455434083938599], + [2.769493341445923, -4.423563003540039], + [-3.557966947555542, -3.4914700984954834], + [-3.494166135787964, -1.4846136569976807], + [0.5985481142997742, -7.284773826599121], + [2.616701364517212, -3.9506466388702393], + [6.819987773895264, -2.074812650680542], + [6.328029632568359, -2.5844688415527344], + [-4.087609767913818, 6.290187835693359], + [4.55568790435791, 7.736648082733154], + [8.033617973327637, -3.357442855834961], + [2.9333927631378174, -4.66251802444458], + [-1.1773343086242676, 10.84317398071289], + [-2.7711446285247803, -4.008089542388916], + [3.3480496406555176, 6.6073126792907715], + [-4.405100345611572, -3.2559731006622314], + [-5.417309284210205, 5.4954705238342285], + [1.8380932807922363, -4.877992630004883], + [-3.681314706802368, -1.5558558702468872], + [2.9909000396728516, -4.694999694824219], + [-4.702688217163086, -3.1197147369384766], + [5.212796688079834, 8.061273574829102], + [-1.8438332080841064, 1.7859894037246704], + [-0.1213589683175087, -1.2871049642562866], + [-4.860300540924072, 6.523288249969482], + [3.380704164505005, -4.026355743408203], + [4.298253536224365, 7.095074653625488], + [-5.594095706939697, 2.712822437286377], + [0.7099660634994507, -5.356331825256348], + [-2.8176887035369873, -0.4634608030319214], + [-4.780914306640625, 6.801690101623535], + [-0.5341634154319763, 9.694526672363281], + [-3.2988827228546143, -2.154703378677368], + [-1.5606069564819336, 12.683221817016602], + [-0.2325785756111145, -0.44900569319725037], + [0.9849571585655212, -4.903546333312988], + [-3.6740520000457764, -2.434438943862915], + [0.6569691300392151, -7.185727596282959], + [-3.825277090072632, 5.4628448486328125], + [-3.3856399059295654, -0.9843366742134094], + [2.684035301208496, 6.110092639923096], + [-1.471061110496521, 12.00999641418457], + [-1.366690993309021, 1.818052887916565], + [0.28102076053619385, -5.70170783996582], + [-3.69273042678833, -2.328294038772583], + [-5.135448932647705, 7.484452247619629], + [-1.3233765363693237, 10.376996040344238], + [-0.5005805492401123, 9.210678100585938], + [-4.556999206542969, 6.522110939025879], + [1.5608805418014526, 0.7851067781448364], + [7.86834716796875, -2.355771064758301], + [-1.8590507507324219, 0.16038888692855835], + [-4.031245708465576, 5.873642921447754], + [-3.5641441345214844, -0.8263474702835083], + [0.20167046785354614, -5.47232723236084], + [-1.796217918395996, 1.2478479146957397], + [1.4546082019805908, -5.049424648284912], + [-4.894083499908447, -1.2021592855453491], + [-5.303699016571045, 7.1899943351745605], + [2.980034589767456, -4.629672527313232], + [-1.3386664390563965, 1.3385299444198608], + [0.53950035572052, -7.252735137939453], + [-4.705488204956055, 5.400436878204346], + [-3.490727186203003, -1.1156874895095825], + [-0.29651206731796265, 7.474839687347412], + [1.8780583143234253, 2.620363473892212], + [-5.029360294342041, 5.828804969787598], + [8.367748260498047, -2.500458002090454], + [3.222033739089966, 6.505701065063477], + [2.009951114654541, 4.573338985443115], + [-1.4735203981399536, 1.2059870958328247], + [0.5854060649871826, -0.7944304943084717], + [0.8504294157028198, -0.24850796163082123], + [1.4711058139801025, 5.271624565124512], + [8.022854804992676, -2.7037336826324463], + [-1.9300202131271362, 1.5558323860168457], + [0.33364713191986084, -7.311131477355957], + [-0.9466357827186584, -1.5791512727737427], + [0.7703028917312622, -8.162346839904785], + [7.809161186218262, -2.5445616245269775], + [2.30159854888916, 2.9549882411956787], + [-1.0011320114135742, 10.763876914978027], + [-3.9715681076049805, -2.8864505290985107], + [-4.557837009429932, -1.1285561323165894], + [4.884505748748779, 8.01011848449707], + [0.3282237648963928, -0.7384185194969177], + [-0.029893703758716583, 0.7556758522987366], + [0.5201606154441833, -7.596682548522949], + [0.4384734034538269, -6.542792320251465], + [-1.3635151386260986, 11.889575004577637], + [-3.6959474086761475, -1.39486825466156], + [1.7373772859573364, -4.723496437072754], + [0.07002504914999008, -0.9719623327255249], + [-2.4455995559692383, 2.3385932445526123], + [-1.922353982925415, -0.9848086833953857], + [-4.764272212982178, -3.3002138137817383], + [-3.7757043838500977, -1.7913633584976196], + [-0.1388404667377472, -1.6214591264724731], + [-4.241898536682129, 6.595537185668945], + [3.065457582473755, 5.95919132232666], + [-4.580057144165039, -0.8713741302490234], + [-3.9184069633483887, -0.6868675947189331], + [2.890763521194458, -4.570504188537598], + [8.990124702453613, -2.740349292755127], + [-1.9529043436050415, 1.9696546792984009], + [7.624825477600098, -3.454509973526001], + [-1.32966148853302, 11.870697021484375], + [0.7519596219062805, -0.4182048439979553], + [-3.5622425079345703, -2.1720011234283447], + [-4.299956321716309, -0.7034329175949097], + [0.5964676141738892, -7.1091766357421875], + [-3.1410670280456543, -1.5504387617111206], + [-3.1707730293273926, 6.86160945892334], + [1.0663855075836182, -6.019406318664551], + [6.129751682281494, -1.9628816843032837], + [-4.341495037078857, -3.743812322616577], + [4.68505334854126, 7.726327896118164], + [-0.9198008179664612, 10.192920684814453], + [-5.339603900909424, 7.057665824890137], + [-2.1413915157318115, -0.5697491765022278], + [2.8765945434570312, -4.70922327041626], + [-0.44981664419174194, 9.437088012695312], + [-4.900904178619385, 7.746402263641357], + [-0.5599492192268372, 8.881227493286133], + [8.787117958068848, -2.8200645446777344], + [2.495298385620117, 4.830695629119873], + [-4.103729724884033, -1.9498655796051025], + [9.65024185180664, -3.0119211673736572], + [2.7304155826568604, -4.821606159210205], + [8.58142375946045, -3.3840363025665283], + [-4.4162678718566895, 6.707704067230225], + [0.25396305322647095, -4.866081237792969], + [-4.514313220977783, -0.16587179899215698], + [-2.681278705596924, 5.399091720581055], + [2.921938180923462, -4.566278457641602], + [1.48811936378479, -4.406744003295898], + [2.3789329528808594, -4.132700443267822], + [-0.21774345636367798, -1.7792266607284546], + [5.652853488922119, -1.208932876586914], + [-2.051701068878174, 0.9798856973648071], + [7.169950485229492, -3.4366068840026855], + [0.33718663454055786, -5.739860534667969], + [8.448704719543457, -2.5597903728485107], + [8.222054481506348, -3.506925344467163], + [-3.635693073272705, -1.2144423723220825], + [-3.575171709060669, -1.5899378061294556], + [0.43849313259124756, -7.042724609375], + [2.831953763961792, -4.422458648681641], + [-3.3643417358398438, -0.5066512823104858], + [2.6327693462371826, -4.883474826812744], + [2.516493320465088, -4.024539470672607], + [-3.672149896621704, -1.2947474718093872], + [-2.051786422729492, 1.7483572959899902], + [-2.3001444339752197, 4.960223197937012], + [8.761333465576172, -2.678917646408081], + [2.609261989593506, -5.879377365112305], + [-4.424865245819092, -1.595166563987732], + [-0.06609184294939041, 9.590566635131836], + [0.43509262800216675, -7.050756454467773], + [-3.6288998126983643, -1.9729787111282349], + [-4.240237236022949, -3.4236109256744385], + [-2.892730236053467, -1.584257960319519], + [2.7357141971588135, -4.309111595153809], + [0.45615309476852417, -6.819085597991943], + [-4.667123317718506, 5.4268975257873535], + [-4.095460414886475, -0.9416346549987793], + [-3.9830949306488037, -1.6583925485610962], + [0.2698286175727844, -6.1052045822143555], + [7.54890775680542, -2.823993444442749], + [2.1832263469696045, -5.273317813873291], + [2.6049540042877197, -4.401407241821289], + [-5.189889430999756, -1.065003752708435], + [-3.7225725650787354, 5.20922327041626], + [-4.422342300415039, -0.8994783163070679], + [-4.273855686187744, -0.39781004190444946], + [-3.239525556564331, -1.0385547876358032], + [0.6014366149902344, -6.993130207061768], + [5.222095012664795, -2.131075143814087], + [2.9037058353424072, -4.702296257019043], + [-1.2545864582061768, 11.23945140838623], + [5.951000690460205, -4.124354362487793], + [-3.5462327003479004, -0.40588706731796265], + [7.028852462768555, -2.751997947692871], + [-3.5489754676818848, 5.8876423835754395], + [1.2746155261993408, -6.683689117431641], + [0.7881883978843689, -7.537968635559082], + [-2.0286197662353516, 0.6753988265991211], + [-1.0798825025558472, 1.2309707403182983], + [0.6176701188087463, -8.382366180419922], + [0.7785717844963074, -0.9768962860107422], + [-1.8843780755996704, 0.8097283840179443], + [-3.112990140914917, -1.4665534496307373], + [1.1310638189315796, -6.535895347595215], + [1.6501741409301758, 3.9129092693328857], + [1.422977328300476, 3.8163788318634033], + [-1.3408161401748657, 11.663738250732422], + [2.4428484439849854, 5.573263645172119], + [-4.016191482543945, -1.472342610359192], + [-4.40047025680542, -1.2494324445724487], + [-1.5163064002990723, 10.118966102600098], + [0.758392870426178, 5.580216884613037], + [-4.382976531982422, -0.5387852191925049], + [-2.6595346927642822, -2.55061936378479], + [0.0807475671172142, -1.2766801118850708], + [-3.6125707626342773, -2.3277597427368164], + [1.1008484363555908, 1.8650517463684082], + [-3.9019196033477783, -2.1133315563201904], + [0.8011482357978821, -7.584108829498291], + [-3.369676351547241, -0.8095629215240479], + [-1.2172340154647827, 10.939849853515625], + [2.424997329711914, -4.005495071411133], + [-1.160849928855896, 11.128166198730469], + [1.8875752687454224, 0.22967231273651123], + [-5.382937908172607, 4.234310150146484], + [1.2493352890014648, 5.523218154907227], + [2.979365110397339, -4.588869094848633], + [-5.461849689483643, -1.018828272819519], + [-3.2886946201324463, -2.380347728729248], + [-0.21831274032592773, -1.8663429021835327], + [5.933568000793457, -2.8710882663726807], + [-3.6458582878112793, -1.5005971193313599], + [0.6707988381385803, -8.109362602233887], + [-4.110180854797363, -2.205113649368286], + [0.6247054934501648, -7.862008571624756], + [-1.9737801551818848, 2.371931552886963], + [-0.537148654460907, 9.971996307373047], + [-3.680371046066284, -2.583702802658081], + [0.42177170515060425, -7.249573707580566], + [0.013271443545818329, -4.015192031860352], + [-0.5761436820030212, 9.906229972839355], + [7.097719192504883, -3.0407803058624268], + [-1.377069115638733, 12.199371337890625], + [0.04236050695180893, -1.2716572284698486], + [0.7043548226356506, -6.320100784301758], + [-4.017418384552002, -3.5039007663726807], + [2.041825532913208, 3.840851068496704], + [5.516007900238037, -1.3909903764724731], + [3.785510301589966, 6.63979959487915], + [-3.750699758529663, -0.29851233959198], + [0.9384116530418396, -0.2657572627067566], + [0.6697718501091003, -0.4019787311553955], + [1.4262030124664307, -5.038288116455078], + [6.808693885803223, -2.754560708999634], + [0.8368061184883118, -0.6140058040618896], + [1.7818615436553955, 1.8630863428115845], + [7.528460502624512, -2.240588426589966], + [-3.1580612659454346, -0.8889091610908508], + [-3.4712131023406982, 5.628633975982666], + [0.39205294847488403, -6.106203556060791], + [-0.9232518076896667, 10.488394737243652], + [0.8198970556259155, -4.446040153503418], + [-3.1817824840545654, -1.6432636976242065], + [-4.213465690612793, -3.016418218612671], + [-0.4430898427963257, 9.20816707611084], + [3.7282397747039795, 6.595847129821777], + [0.4989529848098755, -6.263071060180664], + [6.741943359375, -2.9997036457061768], + [-2.4588849544525146, -0.027446452528238297], + [-3.8734490871429443, 3.5963094234466553], + [2.9506635665893555, -5.101727485656738], + [-1.9961416721343994, 5.668806076049805], + [2.252203941345215, -4.881073474884033], + [-4.607584476470947, 7.001324653625488], + [-1.9738833904266357, -0.9869979023933411], + [2.0267891883850098, -5.064171314239502], + [-3.1152305603027344, 3.5149760246276855], + [0.7765494585037231, -7.570555686950684], + [3.1943233013153076, 6.652567386627197], + [-1.9287594556808472, -0.9637531042098999], + [-3.635202169418335, -2.7481162548065186], + [8.432636260986328, -2.5547657012939453], + [-3.761863946914673, -3.425287961959839], + [2.2583110332489014, -4.549992084503174], + [0.49397122859954834, -5.470284461975098], + [-0.9104754328727722, 1.1246000528335571], + [-3.067286491394043, -0.8920749425888062], + [0.7356444597244263, -8.396787643432617], + [-1.9302905797958374, 2.05934739112854], + [8.782570838928223, -3.005911111831665], + [-3.395103693008423, -2.8392040729522705], + [0.5610556602478027, -6.8501296043396], + [-0.9459267258644104, 10.914934158325195], + [1.6408312320709229, -6.190475940704346], + [-1.7426198720932007, 1.6767582893371582], + [-3.342664957046509, 3.707472562789917], + [2.783255100250244, -4.8877058029174805], + [-0.5270575284957886, 0.39151525497436523], + [-3.380858898162842, -2.836150884628296], + [6.23152494430542, -2.767249345779419], + [-0.040055401623249054, -3.7244045734405518], + [-2.1014444828033447, 0.25843602418899536], + [0.4127298593521118, -5.833840370178223], + [-1.3213391304016113, 12.133807182312012], + [6.214065074920654, -4.322816848754883], + [-1.3889189958572388, 11.694376945495605], + [1.834544062614441, -6.517202854156494], + [0.22148141264915466, -4.864206790924072], + [-4.899837970733643, 7.146049499511719], + [8.404813766479492, -3.4893853664398193], + [-2.9828860759735107, -3.0929043292999268], + [8.59416675567627, -2.636655807495117], + [-0.600760281085968, -0.7053521871566772], + [1.981736421585083, -6.205286026000977], + [2.0729191303253174, -5.52476692199707], + [0.7602418661117554, -4.92717170715332], + [-3.242786407470703, -2.004875659942627], + [-0.2930792570114136, 9.066536903381348], + [0.18241456151008606, -5.0154032707214355], + [-3.1550941467285156, -0.9610360860824585], + [-4.157670497894287, 6.188774108886719], + [2.3304107189178467, 0.697817325592041], + [8.872658729553223, -2.679072380065918], + [-2.0801379680633545, 1.2773417234420776], + [4.940556526184082, 7.848085403442383], + [-3.282231092453003, -1.6975280046463013], + [-2.363618850708008, 2.888761281967163], + [2.0851681232452393, 4.8625030517578125], + [0.948634684085846, -5.598350524902344], + [-2.042968511581421, -1.1339339017868042], + [-1.0766887664794922, 1.3231713771820068], + [0.6745072603225708, -7.95961856842041], + [7.082127094268799, -3.560075283050537], + [1.5579746961593628, 0.13060377538204193], + [0.11337708681821823, 7.226325988769531], + [-2.6510813236236572, 2.67498779296875], + [-2.7906477451324463, -1.962625503540039], + [-1.0984092950820923, 11.513134002685547], + [0.7347732782363892, -4.987529754638672], + [-1.1252082586288452, 9.895503997802734], + [-4.200965404510498, 5.26356315612793], + [-3.9093434810638428, -1.8931798934936523], + [1.852499008178711, -4.436489582061768], + [0.8942415714263916, -5.954123497009277], + [0.3582819104194641, 5.7927680015563965], + [1.3388798236846924, 4.5221967697143555], + [-0.772688627243042, 0.6099463701248169], + [-3.9651622772216797, -2.248652935028076], + [0.44895774126052856, -7.273715019226074], + [7.548109531402588, -2.572702646255493], + [-2.035341262817383, 1.8528423309326172], + [1.1675174236297607, -4.80512809753418], + [6.374826908111572, -4.1169233322143555], + [-2.107645273208618, 5.7550048828125], + [-0.16988715529441833, -2.4082658290863037], + [2.7100510597229004, -4.4863996505737305], + [-3.258756160736084, -1.3771183490753174], + [-4.171611309051514, -1.1629871129989624], + [-3.9599220752716064, -1.9991610050201416], + [2.3710947036743164, 6.30354642868042], + [-0.2194361686706543, 8.942490577697754], + [0.7541534304618835, -6.030561447143555], + [-0.750128984451294, -0.7793749570846558], + [3.0649454593658447, -4.792423248291016], + [-1.7271926403045654, 1.1020811796188354], + [0.008228234946727753, 1.7589679956436157], + [-2.4971868991851807, -0.5880934000015259], + [-3.1146395206451416, -0.8657205104827881], + [-0.16327697038650513, 8.937511444091797], + [8.324652671813965, -2.6195058822631836], + [2.451380491256714, -3.7001254558563232], + [-4.668941974639893, 5.090245723724365], + [6.7537431716918945, -1.8962271213531494], + [-0.8598747849464417, 10.576269149780273], + [6.885504245758057, -1.5099012851715088], + [-1.6903433799743652, 0.9322229027748108], + [1.8526813983917236, 5.333111763000488], + [1.9604132175445557, 0.6659798622131348], + [-1.6944186687469482, 1.0863536596298218], + [-1.0231989622116089, 11.078990936279297], + [-1.914316177368164, 1.335905909538269], + [4.716558933258057, -3.6456847190856934], + [2.905653238296509, 6.890861988067627], + [0.7815893292427063, -7.456948757171631], + [7.4999871253967285, -2.2289621829986572], + [-4.04188346862793, -1.3533025979995728], + [-1.2882347106933594, 11.71055793762207], + [0.7044037580490112, -8.494462966918945], + [-0.8394734263420105, 10.335663795471191], + [2.275078058242798, 3.0540711879730225], + [-3.6008083820343018, -1.4318345785140991], + [1.289204478263855, 4.856307029724121], + [4.639914035797119, -3.8142573833465576], + [-1.187605857849121, 10.894366264343262], + [0.25767284631729126, -6.719790458679199], + [2.871656894683838, -5.463206768035889], + [-1.0755529403686523, 9.634044647216797], + [-3.9858500957489014, 5.98238468170166], + [7.348250865936279, -2.6864054203033447], + [7.570372581481934, -3.624760866165161], + [6.583101749420166, -3.8867247104644775], + [-5.118217945098877, 1.9368714094161987], + [0.14131200313568115, -1.0839065313339233], + [-1.7818217277526855, 0.8248851895332336], + [1.8749196529388428, 1.8454970121383667], + [8.325006484985352, -3.139618396759033], + [2.2731568813323975, -4.445965766906738], + [7.12487268447876, -2.557948350906372], + [1.1202051639556885, -6.452627658843994], + [7.404814720153809, -3.1210639476776123], + [4.959475040435791, 7.656438827514648], + [-1.4952343702316284, 12.81222152709961], + [4.33993673324585, 0.055505093187093735], + [-4.247318744659424, -2.9678757190704346], + [-3.7303614616394043, -1.5703409910202026], + [0.10314636677503586, -3.5942962169647217], + [-1.3432248830795288, 11.927591323852539], + [-3.201321601867676, 5.0662055015563965], + [-5.1826395988464355, -1.4176634550094604], + [-4.02078914642334, -3.1133031845092773], + [1.1258491277694702, -3.7753207683563232], + [-3.703446626663208, 1.5336620807647705], + [-0.5892555117607117, 0.6898350715637207], + [7.911832809448242, -2.417738437652588], + [-0.5812678933143616, 9.750510215759277], + [-0.02875811606645584, -4.042031288146973], + [1.4777101278305054, 5.830920219421387], + [1.5825916528701782, 5.586828231811523], + [2.5954110622406006, -4.605278968811035], + [1.0250873565673828, -3.0493204593658447], + [-5.011430740356445, 1.156431794166565], + [0.6683511137962341, -7.614653587341309], + [1.0153896808624268, -5.780274391174316], + [-3.6404576301574707, -1.1387598514556885], + [-1.494111180305481, 0.4085317850112915], + [2.261441946029663, 5.022002696990967], + [-4.015713691711426, -0.933864414691925], + [-4.684881687164307, -3.6574928760528564], + [8.398943901062012, -3.5539305210113525], + [-2.693096876144409, -1.0688005685806274], + [0.9605551362037659, -5.8423686027526855], + [2.3201277256011963, 6.904286861419678], + [1.7492460012435913, 6.280587673187256], + [0.6226970553398132, -5.491174697875977], + [7.759462833404541, -2.2633283138275146], + [7.043432235717773, -4.590813159942627], + [-5.914595127105713, 7.843286037445068], + [8.531973838806152, -2.528099536895752], + [-1.5999382734298706, -0.02564043179154396], + [-0.12805211544036865, -1.7868510484695435], + [0.43296200037002563, -0.38554510474205017], + [0.08461689203977585, -4.690128326416016], + [7.183065891265869, -2.9209940433502197], + [-5.24836540222168, -1.0404106378555298], + [0.5557383298873901, -7.9295220375061035], + [2.4935474395751953, 0.662811279296875], + [-1.768687129020691, 0.9587385654449463], + [1.1203174591064453, 6.424192428588867], + [6.785048007965088, -3.3424575328826904], + [-1.9733465909957886, 5.148813724517822], + [-1.352419376373291, 11.92873764038086], + [-4.450639247894287, -3.9186904430389404], + [-3.4923412799835205, -0.903834342956543], + [1.1287761926651, -5.570104122161865], + [3.6601974964141846, -4.140810012817383], + [-3.862767457962036, -0.5194565653800964], + [-3.7934701442718506, -1.0916374921798706], + [0.2631181478500366, -5.204306602478027], + [2.29797101020813, 4.124650955200195], + [1.6145482063293457, 2.040438413619995], + [-1.215273141860962, 11.161306381225586], + [-4.2123332023620605, -1.0818508863449097], + [0.44767940044403076, -6.87652587890625], + [0.48615777492523193, -5.886013507843018], + [-0.6801723837852478, 10.410635948181152], + [0.5932337641716003, -7.732219696044922], + [2.5901505947113037, -4.2867751121521], + [4.950656414031982, 7.915773868560791], + [-5.902061939239502, -1.088529109954834], + [-1.1500474214553833, 10.737693786621094], + [-1.3091424703598022, 11.699970245361328], + [2.117077112197876, 4.979465484619141], + [0.5535899996757507, -7.898470878601074], + [2.8145508766174316, -4.723337173461914], + [2.673978090286255, -4.294121742248535], + [7.928201198577881, -3.437605142593384], + [1.91095769405365, -4.972625255584717], + [-3.217719554901123, -0.9451108574867249], + [-2.9243180751800537, -1.9547230005264282], + [-4.682211875915527, -0.7713772058486938], + [3.13226318359375, 6.735898017883301], + [-2.549241781234741, -4.1309332847595215], + [-4.519568920135498, -0.7813096046447754], + [1.6318496465682983, 0.3040236830711365], + [0.6080105900764465, -8.022408485412598], + [0.6760925650596619, -7.9318156242370605], + [-0.46822139620780945, -0.7181344628334045], + [-3.8921115398406982, -1.9545289278030396], + [7.446774959564209, -2.17545485496521], + [2.254441738128662, 0.6606134176254272], + [-3.666691541671753, 4.951725959777832], + [-0.8649947643280029, 10.3527193069458], + [6.87160062789917, -2.2578344345092773], + [-0.04273427277803421, -5.290149688720703], + [-2.715517282485962, 2.4171559810638428], + [2.716376304626465, -4.565798282623291], + [2.1250343322753906, 3.5487167835235596], + [3.2933802604675293, 6.3597235679626465], + [-0.9923953413963318, 11.260128021240234], + [-4.5446882247924805, -0.021617595106363297], + [-2.9457783699035645, 6.081628799438477], + [0.4362778067588806, -0.8452847599983215], + [0.7994773983955383, -4.42170524597168], + [1.817927598953247, -5.494309902191162], + [-5.394541263580322, 7.624808311462402], + [-5.696135520935059, 7.498984336853027], + [-1.0355263948440552, 9.98065185546875], + [-2.7339985370635986, 2.8340179920196533], + [-4.907846927642822, -1.123174786567688], + [0.4012295603752136, -0.21877577900886536], + [1.6251994371414185, 1.2985795736312866], + [-0.9809246063232422, 8.95823860168457], + [1.2047704458236694, 5.608038902282715], + [9.077315330505371, -3.0405595302581787], + [2.7380869388580322, -4.446654319763184], + [0.5794693231582642, -8.198067665100098], + [-3.9086754322052, 7.123534202575684], + [1.3985627889633179, -6.674980163574219], + [-0.33838915824890137, -1.2026691436767578], + [-2.6555988788604736, 2.901803970336914], + [-2.0048182010650635, 1.1423951387405396], + [2.230600118637085, 5.359203815460205], + [0.7846312522888184, 7.74256706237793], + [-0.4319782853126526, 10.922350883483887], + [0.598493754863739, -7.851271629333496], + [-4.04730224609375, -1.8151299953460693], + [2.193834066390991, 7.162047386169434], + [2.7743444442749023, 5.292351722717285], + [2.8341004848480225, -4.755040645599365], + [1.2217261791229248, -4.763000965118408], + [-3.035935163497925, -0.9778915047645569], + [-2.518125534057617, -1.7950389385223389], + [-1.0468015670776367, 10.08961296081543], + [0.13904482126235962, -6.23095178604126], + [-0.08599702268838882, -0.805108368396759], + [-4.834503650665283, 2.7047853469848633], + [0.6832724809646606, 4.5180840492248535], + [-0.11861995607614517, -3.4134163856506348], + [-5.143063068389893, -0.6320143342018127], + [2.8076510429382324, -4.471946716308594], + [1.6669427156448364, 5.613735198974609], + [-0.2317904233932495, -1.8455199003219604], + [6.217831611633301, -1.7244069576263428], + [-1.6089943647384644, 1.0795018672943115], + [1.3929924964904785, 4.902583599090576], + [-0.9703720211982727, 10.449934005737305], + [-2.076672315597534, 1.4194523096084595], + [6.179465293884277, -2.01745867729187], + [-1.0686005353927612, 9.20187759399414], + [2.0772335529327393, 3.9910647869110107], + [2.224743604660034, -4.221340179443359], + [7.826473712921143, -2.1490142345428467], + [2.8407909870147705, 5.763261795043945], + [0.4987789988517761, -6.803910255432129], + [-0.45539504289627075, 8.936240196228027], + [4.774253845214844, 7.91961145401001], + [0.6557236909866333, -5.207906246185303], + [1.85596764087677, -4.167629718780518], + [-1.1786847114562988, 11.338211059570312], + [2.3346030712127686, -5.5102033615112305], + [-4.146440029144287, -1.3342399597167969], + [-0.7918508648872375, 11.103353500366211], + [-3.2096450328826904, -2.2989184856414795], + [-2.0380589962005615, 1.929154396057129], + [-1.0923314094543457, 4.762294292449951], + [-3.721425771713257, -1.5490058660507202], + [2.230008602142334, -4.08116340637207], + [-0.1751825213432312, -0.6871183514595032], + [-3.2737538814544678, 4.587952613830566], + [-0.3334086835384369, -0.5513812303543091], + [0.7694466710090637, -9.28188419342041], + [-0.4874580502510071, 8.981727600097656], + [-1.4406981468200684, -1.3438979387283325], + [6.870380878448486, -3.515151262283325], + [3.3523948192596436, 6.718522071838379], + [1.075005292892456, 0.4618299603462219], + [0.5840585231781006, -7.813658237457275], + [2.4424679279327393, -4.2547807693481445], + [0.20928722620010376, -2.5849545001983643], + [-1.743614673614502, 2.356760263442993], + [0.6403131484985352, 1.5877918004989624], + [-1.0958951711654663, 2.189908504486084], + [-0.7702241539955139, 10.165486335754395], + [-1.8966758251190186, 1.950182557106018], + [-1.8989794254302979, 1.9693628549575806], + [-4.472617149353027, 6.956940650939941], + [0.40420442819595337, -5.4955267906188965], + [3.5425000190734863, 0.6313134431838989], + [8.812705993652344, -2.905616044998169], + [3.4953439235687256, 6.880828857421875], + [1.4509072303771973, 1.5179508924484253], + [-4.814295768737793, 7.754650115966797], + [-1.014073371887207, 10.94200325012207], + [-0.10702759772539139, 5.267397880554199], + [-3.6251795291900635, 4.4567461013793945], + [9.003488540649414, -3.068938970565796], + [2.125375509262085, 5.211214065551758], + [4.943030834197998, 7.842576026916504], + [8.658774375915527, -2.8354365825653076], + [2.5784718990325928, 5.27093505859375], + [6.106442928314209, -3.43001389503479], + [8.43897819519043, -2.66196608543396], + [-3.698718309402466, -2.2294719219207764], + [-1.5623401403427124, 0.6234579086303711], + [-0.4126455783843994, 9.315654754638672], + [1.1575745344161987, 5.721271514892578], + [2.88916277885437, -4.955950736999512], + [1.6201879978179932, 1.911790132522583], + [8.804059028625488, -2.6820337772369385], + [-3.247140645980835, -1.64244544506073], + [10.178421020507812, -3.0536444187164307], + [-4.045313358306885, -2.1138250827789307], + [-4.022109031677246, -2.0032036304473877], + [-1.7103582620620728, 0.03019639477133751], + [-1.5762877464294434, 12.854911804199219], + [-3.669977903366089, -1.1476629972457886], + [-3.46854567527771, -1.7609312534332275], + [-0.727899432182312, 9.721782684326172], + [-1.2631335258483887, 10.93288803100586], + [-2.3251965045928955, -3.099245071411133], + [2.217899799346924, -4.632767677307129], + [6.587806224822998, -4.419529438018799], + [-2.037871837615967, 0.33741191029548645], + [-3.947066068649292, 5.537934303283691], + [-4.049078941345215, -1.071175456047058], + [-5.802767753601074, 7.593783378601074], + [9.0431489944458, -2.908787250518799], + [-4.879948139190674, -4.110884666442871], + [2.805746555328369, -4.8410515785217285], + [-0.29434818029403687, -2.9715168476104736], + [6.108517169952393, -1.6991366147994995], + [-5.213815212249756, -1.600862979888916], + [0.23736369609832764, -4.009764194488525], + [-0.7413087487220764, 10.285314559936523], + [-0.7801922559738159, 10.11850643157959], + [0.7167582511901855, 1.076072335243225], + [-5.221146583557129, -1.9090338945388794], + [7.752608299255371, -2.3439719676971436], + [6.334413051605225, -1.233260989189148], + [-1.2565038204193115, 11.08907699584961], + [1.1994798183441162, 5.302901268005371], + [7.050199031829834, -1.91592276096344], + [-0.9418997764587402, 6.556679725646973], + [-5.553280353546143, 4.5206685066223145], + [-3.4569385051727295, -1.51532781124115], + [0.2159191071987152, -5.169553756713867], + [-5.161161422729492, 7.030187129974365], + [-2.451085090637207, 1.761513113975525], + [-0.2171320915222168, 8.702016830444336], + [-3.1467037200927734, -2.030829429626465], + [-1.1898577213287354, 10.057181358337402], + [3.058368444442749, -4.814827919006348], + [1.8918534517288208, 4.9822564125061035], + [-3.299060106277466, -1.32815420627594], + [1.8185770511627197, 4.3250412940979], + [-4.532402038574219, -1.3930412530899048], + [-3.092634677886963, -1.3960686922073364], + [-5.427248001098633, 7.207719802856445], + [8.673151016235352, -2.548992156982422], + [9.297348976135254, -2.8253300189971924], + [7.242800712585449, -3.2608602046966553], + [-0.8219127058982849, 1.3739900588989258], + [0.7371349930763245, -9.457548141479492], + [-3.5592377185821533, -0.9056003093719482], + [-1.568907380104065, 1.6549493074417114], + [-2.325862169265747, -1.623343586921692], + [-4.321700096130371, 6.992663383483887], + [3.0483548641204834, -4.842065334320068], + [2.4808647632598877, -4.467047691345215], + [-3.621222972869873, -0.9723255038261414], + [1.838621735572815, 0.25024938583374023], + [0.6700177192687988, -8.57980728149414], + [-3.3069546222686768, -1.596508502960205], + [-0.7815373539924622, -0.6057699918746948], + [-4.101894855499268, 6.325767993927002], + [5.444807529449463, -3.599508047103882], + [-1.3462989330291748, 11.872328758239746], + [0.4123840928077698, -5.971414566040039], + [-1.8059451580047607, 2.1431682109832764], + [-3.970226287841797, 6.6107964515686035], + [2.793804168701172, -4.656530857086182], + [2.75734281539917, -6.36373233795166], + [3.9165689945220947, -3.5826683044433594], + [0.48476749658584595, -6.228043556213379], + [-0.1373976469039917, -1.2225040197372437], + [-3.656334161758423, -1.4620128870010376], + [-4.714391708374023, -1.3880761861801147], + [-3.9786298274993896, -1.3117446899414062], + [7.978826999664307, -3.0684049129486084], + [0.7983179092407227, -6.998167991638184], + [3.023068428039551, -5.0629119873046875], + [-3.3069326877593994, -1.174096941947937], + [-0.0472191646695137, -1.6820340156555176], + [-4.496033191680908, 6.05430793762207], + [2.410229444503784, -4.613021373748779], + [1.9696261882781982, -4.959322929382324], + [-0.8889467120170593, 9.559652328491211], + [2.7124783992767334, -4.27384090423584], + [-3.0626060962677, -0.9399386048316956], + [-1.8843599557876587, 1.4899312257766724], + [2.4335386753082275, 6.617372512817383], + [1.2279272079467773, -5.8635053634643555], + [6.306092739105225, -3.3707478046417236], + [-1.209692358970642, 10.971870422363281], + [-3.452869176864624, 5.2002153396606445], + [1.4044928550720215, -4.940104007720947], + [-0.5278680920600891, -0.2138642817735672], + [-0.7313632369041443, 9.57232666015625], + [1.681197166442871, -6.662137031555176], + [-2.6784160137176514, -2.3854849338531494], + [-0.21604090929031372, 7.619879245758057], + [3.0134904384613037, 6.514499664306641], + [-4.03576135635376, -1.9378846883773804], + [-3.201944589614868, -0.8959038257598877], + [1.3744999170303345, -4.417047023773193], + [9.309233665466309, -2.7710959911346436], + [7.411131858825684, -2.7760374546051025], + [0.3586805462837219, -5.157110214233398], + [-4.294416904449463, -1.6829794645309448], + [-3.997178077697754, -1.9615510702133179], + [-5.13455057144165, 6.848907470703125], + [0.09532644599676132, -0.6126664876937866], + [-0.5104871392250061, 1.6262980699539185], + [-3.6943936347961426, -1.318790316581726], + [8.161026954650879, -2.3722338676452637], + [-2.5832107067108154, 1.4140585660934448], + [6.940855503082275, -2.862032175064087], + [2.3254175186157227, -4.385098934173584], + [1.4199410676956177, 3.3835971355438232], + [-3.3492512702941895, 5.6231489181518555], + [-1.1656731367111206, 10.912836074829102], + [-1.368634581565857, 11.690750122070312], + [3.5829973220825195, 1.545754075050354], + [2.333254337310791, -3.617865800857544], + [-1.1139576435089111, -0.29993078112602234], + [-0.0851474180817604, -5.26759147644043], + [-0.9717850089073181, 8.591802597045898], + [2.3370964527130127, -4.312436580657959], + [-3.3676917552948, -2.0059401988983154], + [9.29996109008789, -2.792762517929077], + [-1.788221836090088, 1.3335667848587036], + [2.9241485595703125, -4.988903522491455], + [-1.0485440492630005, 10.117542266845703], + [-1.5241584777832031, 12.846696853637695], + [-3.7051074504852295, 5.2958221435546875], + [-0.09538114815950394, -4.253387451171875], + [-4.747533798217773, 6.795855522155762], + [0.03213139623403549, -1.2683757543563843], + [0.6019084453582764, -6.715103626251221], + [2.676571846008301, -4.19556999206543], + [1.772412896156311, -3.4249966144561768], + [0.4679873585700989, -6.762986660003662], + [0.8116099834442139, -6.897511005401611], + [-5.315787315368652, 6.816587448120117], + [0.35045933723449707, -5.774978160858154], + [1.0099008083343506, -6.225833415985107], + [0.4507436156272888, -5.56229305267334], + [-3.72782564163208, 3.8704888820648193], + [2.3933706283569336, 3.3614253997802734], + [-1.2843172550201416, 11.112617492675781], + [2.4538700580596924, 5.494515895843506], + [-0.9681461453437805, 0.8818725347518921], + [-0.574597179889679, 9.352852821350098], + [-4.09381103515625, -1.959018349647522], + [2.913632392883301, 6.143866539001465], + [-1.6011126041412354, 12.96307373046875], + [-1.5726816654205322, 1.1317110061645508], + [-0.0906146839261055, -1.5213733911514282], + [-4.4974589347839355, 5.508429527282715], + [0.32078564167022705, -6.71451473236084], + [0.344286173582077, -4.5853729248046875], + [1.464231014251709, -5.27476692199707], + [-3.0330703258514404, -2.0355851650238037], + [7.231971263885498, -2.0107245445251465], + [0.6195458769798279, -3.983839750289917], + [-2.6432440280914307, -2.3358490467071533], + [-1.1367989778518677, 10.972898483276367], + [-4.434261798858643, 6.089944839477539], + [-1.1494042873382568, 10.66104793548584], + [2.1010189056396484, 0.8406612277030945], + [5.934249401092529, -2.3693010807037354], + [1.705876350402832, -4.5045061111450195], + [0.06442705541849136, -1.3980324268341064], + [1.738325834274292, 3.057716131210327], + [-3.7919118404388428, -0.9616302251815796], + [-4.954101085662842, -0.7485824227333069], + [-4.015491008758545, 6.203198432922363], + [7.601450443267822, -2.232218027114868], + [-1.5564820766448975, 1.5097033977508545], + [2.104660987854004, 0.3764117956161499], + [-3.6551668643951416, -0.5603553652763367], + [6.009038925170898, -2.680251359939575], + [0.29102519154548645, 0.8668988943099976], + [1.9550507068634033, 5.22036075592041], + [-3.491129159927368, -1.9224578142166138], + [6.741556644439697, -2.6398673057556152], + [-2.0408473014831543, 0.6363590359687805], + [-4.511782169342041, -3.4166431427001953], + [-5.772960186004639, 6.084381103515625], + [0.5794239044189453, -8.066763877868652], + [2.3861398696899414, -4.340036869049072], + [-1.3870607614517212, 0.8183241486549377], + [-1.5208451747894287, -0.7819188237190247], + [0.6441442370414734, -7.867241382598877], + [0.1644267737865448, -4.53196382522583], + [-1.8577979803085327, -3.4851789474487305], + [-1.3695855140686035, 12.620054244995117], + [-3.2967498302459717, -1.1862822771072388], + [-0.4887391924858093, 7.658848762512207], + [-2.0224649906158447, 2.309809923171997], + [5.036621570587158, -2.6809709072113037], + [-2.070754289627075, 0.7566642165184021], + [5.8940887451171875, -1.133424162864685], + [1.939786672592163, -5.482970714569092], + [1.8583836555480957, 0.6188398003578186], + [4.779688358306885, -2.9832258224487305], + [-0.7007169127464294, 10.312206268310547], + [-4.729892730712891, 5.458272933959961], + [1.6620252132415771, -5.597103118896484], + [2.4772026538848877, 5.5703864097595215], + [-1.705801248550415, 0.5272981524467468], + [-4.470511436462402, -0.7911690473556519], + [1.3445427417755127, 2.6641957759857178], + [7.1386871337890625, -3.144274950027466], + [-4.236928462982178, 4.544670104980469], + [7.676331043243408, -2.586413621902466], + [1.2118782997131348, -5.364359378814697], + [-4.47775411605835, -3.132779836654663], + [2.8939435482025146, -4.666847229003906], + [0.43723857402801514, -5.997934341430664], + [-3.450941324234009, -2.592961549758911], + [0.6483550667762756, 5.250144958496094], + [2.476893663406372, 6.272220611572266], + [0.7905015349388123, -8.807266235351562], + [2.8615312576293945, -4.796048641204834], + [-1.4637240171432495, -2.0976827144622803], + [1.985901117324829, 5.729630947113037], + [-1.3447859287261963, 11.936044692993164], + [-4.507010459899902, 6.3084564208984375], + [1.076265573501587, -0.2964920401573181], + [1.0066814422607422, 1.3428008556365967], + [-1.2504907846450806, 11.73499870300293], + [2.6183176040649414, -4.264104843139648], + [-4.89276123046875, 5.819581508636475], + [-4.383924961090088, 4.732569694519043], + [1.4773294925689697, -5.6593122482299805], + [-0.8489399552345276, -0.5538678765296936], + [-5.943797588348389, 7.677961349487305], + [-1.2867778539657593, 11.100210189819336], + [6.37646484375, -1.3332809209823608], + [1.12034273147583, -5.252076148986816], + [-0.3420148491859436, 9.426865577697754], + [0.393810510635376, -6.192264556884766], + [-0.9604337215423584, 0.6430462598800659], + [-0.8356538414955139, 10.43867015838623], + [-1.308737874031067, 11.742776870727539], + [2.821223020553589, 6.591620445251465], + [-3.850126028060913, 5.722512245178223], + [-1.3402132987976074, 1.5411438941955566], + [-0.6933780312538147, -0.7707613110542297], + [2.678812265396118, 4.731727123260498], + [8.807199478149414, -2.7317311763763428], + [-4.04140567779541, -2.426145315170288], + [0.3431059718132019, -0.3324797749519348], + [-2.3663172721862793, 2.3764355182647705], + [-3.6202392578125, -1.138330340385437], + [-1.2505782842636108, 1.8201611042022705], + [-4.700691223144531, 7.172713756561279], + [-3.7825543880462646, -2.8773224353790283], + [-0.706155002117157, 9.832962989807129], + [8.821486473083496, -2.726992607116699], + [1.460060715675354, 5.2525529861450195], + [-4.931877613067627, -1.2962191104888916], + [6.539243221282959, -3.8353028297424316], + [1.5448099374771118, 6.102664947509766], + [0.7010069489479065, -9.270174026489258], + [-1.1479707956314087, 2.0136003494262695], + [0.7243458032608032, -6.4937357902526855], + [0.7219570279121399, -7.822318077087402], + [0.6541896462440491, -5.259138584136963], + [1.7617981433868408, 5.163347244262695], + [3.1083672046661377, 6.4523396492004395], + [6.857370853424072, -1.9807840585708618], + [-1.850422978401184, 1.891812801361084], + [-4.837860584259033, -1.1254363059997559], + [2.368034601211548, 0.816013514995575], + [0.4460803270339966, -6.2154541015625], + [-3.595632553100586, -0.8795992136001587], + [0.5399652719497681, -6.079133033752441], + [-3.271578073501587, -1.96183180809021], + [0.7525841593742371, -9.172571182250977], + [-0.03227720409631729, -3.7986066341400146], + [0.8922116160392761, -8.22494125366211], + [-3.230057954788208, -0.7858030200004578], + [1.261857032775879, -5.306968688964844], + [2.0512776374816895, 4.793539047241211], + [6.707381725311279, -1.8313883543014526], + [7.599756717681885, -3.22986102104187], + [-1.8808958530426025, 2.7221269607543945], + [-1.415672779083252, 11.533674240112305], + [-3.0448849201202393, -1.7678658962249756], + [0.7579284310340881, -8.634262084960938], + [2.6508212089538574, -4.524355411529541], + [3.084017038345337, -5.054357528686523], + [0.44861799478530884, -6.2593255043029785], + [2.568115234375, -4.403440475463867], + [2.3507955074310303, 0.6192110776901245], + [0.6403087973594666, -8.133012771606445], + [-0.46678900718688965, -2.562577486038208], + [-2.2249202728271484, -2.5110881328582764], + [-0.4698660969734192, 9.458507537841797], + [-5.456115245819092, -0.9715715050697327], + [-1.3431944847106934, -0.8570787906646729], + [0.7395082116127014, -8.741326332092285], + [-1.1601245403289795, 1.0984760522842407], + [4.558485507965088, 7.567324638366699], + [-1.273952841758728, 11.921823501586914], + [0.34811580181121826, -5.813113212585449], + [-1.0901507139205933, 0.8503251075744629], + [7.347842216491699, -2.2836015224456787], + [-3.9013748168945312, -1.0501817464828491], + [-0.9857557415962219, 10.797723770141602], + [5.546204566955566, 8.486205101013184], + [-4.113995552062988, -2.1239585876464844], + [-3.9637339115142822, -2.4287006855010986], + [-0.8100496530532837, 10.06258773803711], + [2.3576033115386963, -4.483894348144531], + [-4.315432548522949, -0.5799583196640015], + [-4.375856399536133, -1.3199893236160278], + [-0.39204686880111694, -1.0628529787063599], + [1.5606305599212646, -1.7447988986968994], + [-2.470843553543091, -1.1041483879089355], + [-1.786020278930664, 1.7976906299591064], + [1.275189757347107, -4.816894054412842], + [2.7388830184936523, -4.191098690032959], + [-2.355807304382324, 5.872297286987305], + [-5.460589408874512, -1.3707579374313354], + [0.4626336693763733, -6.199977397918701], + [-0.8835423588752747, -1.9995418787002563], + [6.561534404754639, -3.9096765518188477], + [-3.115305185317993, -2.5948593616485596], + [-4.480227947235107, 3.9851348400115967], + [-2.3746583461761475, 0.9421373605728149], + [-0.8002109527587891, -0.8931339979171753], + [2.1134984493255615, -4.398831367492676], + [7.65985631942749, -2.8337252140045166], + [-3.527190923690796, -1.644140362739563], + [0.7679953575134277, -5.781608581542969], + [-2.4193785190582275, -0.8739837408065796], + [2.7832281589508057, -4.517861843109131], + [-0.23468893766403198, -2.619150161743164], + [8.003011703491211, -2.4252569675445557], + [-0.8645570278167725, 10.600423812866211], + [2.3661389350891113, -4.479297637939453], + [4.78546667098999, 7.748501777648926], + [-3.7573025226593018, 6.260598182678223], + [1.7381658554077148, 1.1612087488174438], + [-5.798532009124756, -0.8042488098144531], + [-5.550682067871094, -0.6785560250282288], + [0.5413364768028259, -5.491954326629639], + [2.7090044021606445, -4.68046760559082], + [-0.0994296446442604, -3.1446282863616943], + [-4.176170825958252, -0.32277244329452515], + [-3.5218307971954346, -3.776883840560913], + [-1.9916250705718994, 1.865486741065979], + [-0.6844325661659241, 9.282659530639648], + [1.6276657581329346, -5.762052536010742], + [5.899592399597168, -3.7130239009857178], + [-0.16370868682861328, 7.696821689605713], + [0.509920597076416, -8.009010314941406], + [9.105006217956543, -2.814558506011963], + [6.917598247528076, -5.352522850036621], + [7.509135723114014, -2.7692625522613525], + [2.6516575813293457, -4.556667327880859], + [-3.6408722400665283, -0.04321205988526344], + [-3.780935525894165, -2.292693853378296], + [0.5642751455307007, -7.150272846221924], + [-4.277939319610596, -2.509132146835327], + [0.8030912280082703, -9.46872329711914], + [-3.605515718460083, -1.801850438117981], + [-1.2998908758163452, 11.162960052490234], + [-1.2988368272781372, 11.471334457397461], + [-3.8550658226013184, 5.482652187347412], + [-2.175428628921509, -0.9391943216323853], + [-1.1904674768447876, -0.972008466720581], + [-1.0906213521957397, 11.103179931640625], + [2.1220970153808594, 0.5129013061523438], + [1.790110468864441, -4.419533729553223], + [-4.9581732749938965, -4.186910629272461], + [-1.1127787828445435, 10.080822944641113], + [0.542847752571106, -6.8026299476623535], + [-3.86919903755188, -1.3350731134414673], + [1.1711585521697998, -5.438558578491211], + [2.8863351345062256, -5.066473484039307], + [0.5226367712020874, -5.845285415649414], + [-2.377149820327759, -0.777369499206543], + [4.5942769050598145, 7.415780544281006], + [-1.676356554031372, 1.4143580198287964], + [0.6041885018348694, -5.820040225982666], + [-3.756908416748047, 6.758288383483887], + [0.5092800259590149, -7.870394229888916], + [-1.2252503633499146, -1.0207538604736328], + [1.5975409746170044, 2.420255661010742], + [2.7901599407196045, -4.363314151763916], + [-3.680302381515503, -1.1401926279067993], + [-2.1343705654144287, 0.3385525941848755], + [0.4402150511741638, -5.32083797454834], + [0.49967342615127563, -5.554233551025391], + [8.941246032714844, -2.67777943611145], + [7.922292232513428, -3.145446538925171], + [-0.406855970621109, -1.2011066675186157], + [-1.0850318670272827, 10.994136810302734], + [-2.112006902694702, 2.148735523223877], + [2.7199161052703857, 6.380731582641602], + [-2.668745756149292, -0.8871698379516602], + [-4.128424167633057, -1.1211060285568237], + [2.666400671005249, -4.478667259216309], + [-1.4472403526306152, -0.6003987789154053], + [2.7958805561065674, -5.595181465148926], + [-2.104532480239868, 1.557072401046753], + [-1.5319455862045288, 5.34133243560791], + [-0.4331788718700409, -1.0360593795776367], + [-1.935104250907898, 1.7709640264511108], + [-2.18927001953125, -0.09153902530670166], + [5.122953414916992, 8.022202491760254], + [0.38690802454948425, -4.065321922302246], + [-2.2760119438171387, 6.018972873687744], + [-4.698880672454834, 6.962669849395752], + [2.1509854793548584, -4.783050537109375], + [-3.2655889987945557, 1.4980219602584839], + [-1.2054694890975952, 11.216020584106445], + [-3.5821917057037354, 5.850207328796387], + [6.909739971160889, -4.350137233734131], + [-0.7491199374198914, 9.836236953735352], + [0.2281997799873352, -6.883907318115234], + [-3.196495771408081, -2.7384743690490723], + [-1.8507777452468872, 1.7372230291366577], + [1.8605079650878906, -6.390728950500488], + [0.9028048515319824, 0.055659305304288864], + [-0.9767715930938721, -4.210395336151123], + [1.77685546875, -6.48001766204834], + [2.708003044128418, -4.552708625793457], + [-1.2677351236343384, 11.07911205291748], + [0.4950177073478699, -7.375642776489258], + [-4.7736945152282715, 7.2303338050842285], + [-0.2649737596511841, -2.878281831741333], + [-0.4344152510166168, -2.6902077198028564], + [-4.527056694030762, -2.5809733867645264], + [6.046591758728027, -2.0048606395721436], + [2.7300069332122803, -4.577876567840576], + [1.8128432035446167, -6.827895164489746], + [2.4835145473480225, -4.360328674316406], + [8.322842597961426, -3.1825315952301025], + [2.463113784790039, -3.2564477920532227], + [-4.980729579925537, 6.2064385414123535], + [2.3128936290740967, -5.517277717590332], + [4.1152262687683105, 7.064421653747559], + [-4.027298927307129, 5.740797519683838], + [2.8877627849578857, -4.786493301391602], + [3.8386428356170654, 6.825621128082275], + [-2.1088106632232666, 0.6377527117729187], + [-4.007111072540283, -2.1766886711120605], + [3.2428977489471436, -6.85360860824585], + [-1.0276426076889038, 10.753780364990234], + [-4.6811723709106445, -0.8229003548622131], + [6.852383613586426, -3.755734443664551], + [6.150402545928955, -1.9440134763717651], + [-0.9540563225746155, 11.12154769897461], + [-4.324805736541748, 6.285390377044678], + [-5.34479284286499, -1.3647748231887817], + [2.8125522136688232, -4.546030044555664], + [4.529889106750488, 7.409945964813232], + [2.0499513149261475, 5.743196487426758], + [0.26270121335983276, -5.819308757781982], + [0.6375827789306641, -6.5732550621032715], + [-0.5454302430152893, 0.28871896862983704], + [-1.4764106273651123, 11.973423957824707], + [-2.6502466201782227, -0.5614525079727173], + [-0.9668816924095154, 10.889028549194336], + [3.1286375522613525, 6.83287239074707], + [-5.338511943817139, 6.962556838989258], + [-5.200850486755371, 7.247260093688965], + [2.2156946659088135, -4.729425430297852], + [1.141174077987671, -6.910980701446533], + [0.9407487511634827, -4.35878324508667], + [-0.3129512071609497, -1.113148808479309], + [-2.024048328399658, -2.0256290435791016], + [-2.842618465423584, 6.73136568069458], + [-6.5034966468811035, 8.827913284301758], + [-4.123255729675293, 6.18461799621582], + [-3.9193003177642822, -1.1056746244430542], + [-2.602313756942749, 0.8900098204612732], + [1.4907190799713135, 0.13396908342838287], + [0.597179114818573, -8.329212188720703], + [-3.9653050899505615, -1.649027943611145], + [-0.8868418335914612, 10.312849044799805], + [6.590742588043213, -1.9811809062957764], + [-2.1215500831604004, 2.4881625175476074], + [8.26782512664795, -2.7404963970184326], + [0.7942787408828735, -6.022563457489014], + [0.6277348399162292, -8.615203857421875], + [-3.555145740509033, -2.1067965030670166], + [0.2322288155555725, 5.969326019287109], + [5.800639629364014, -2.756516695022583], + [-4.682911396026611, -0.8465015888214111], + [0.6190982460975647, -4.553363800048828], + [0.6838671565055847, -7.431920051574707], + [1.433620572090149, 6.086079120635986], + [-6.000007152557373, 8.038421630859375], + [1.4699394702911377, 5.758723258972168], + [2.496356248855591, -4.27924108505249], + [-5.465131759643555, 7.549079895019531], + [0.10881834477186203, 8.386199951171875], + [-3.105398416519165, -0.8963937163352966], + [0.6099799871444702, -7.78421688079834], + [5.4655537605285645, 8.40511703491211], + [-5.327106952667236, -0.48292016983032227], + [8.169168472290039, -3.4660232067108154], + [0.6254960298538208, -7.352428436279297], + [1.400424599647522, 5.34642219543457], + [-3.431687355041504, -1.3630836009979248], + [-0.8239100575447083, 1.1377359628677368], + [6.893311977386475, -4.339917182922363], + [4.906861305236816, 7.830533981323242], + [1.2483093738555908, 0.14982163906097412], + [-1.3240858316421509, 1.5621546506881714], + [0.09759043902158737, -4.696124076843262], + [-0.5431082844734192, 9.216998100280762], + [-1.9749782085418701, 0.21676450967788696], + [2.9642136096954346, -4.6148762702941895], + [-2.3385050296783447, -1.3352125883102417], + [-0.6308537125587463, 9.694643020629883], + [5.4692559242248535, -1.7708417177200317], + [3.283982992172241, -3.870570421218872], + [-1.1327028274536133, 10.716449737548828], + [-4.6804704666137695, -1.8488190174102783], + [1.2099310159683228, -6.683484077453613], + [-4.1077375411987305, 4.766498565673828], + [-2.783508539199829, 5.450278282165527], + [2.7929327487945557, -4.57435417175293], + [-0.7574630379676819, 11.129531860351562], + [-0.4043642282485962, -2.3999717235565186], + [-3.892509698867798, -1.1114267110824585], + [-2.064502477645874, 2.788017988204956], + [-0.3478865623474121, 7.690905570983887], + [-3.518873453140259, -0.8133803009986877], + [-4.727283000946045, 2.0300145149230957], + [0.6652351021766663, -8.042421340942383], + [0.4163602590560913, -6.177584648132324], + [-2.3558027744293213, -1.2780356407165527], + [2.885460376739502, -4.973989486694336], + [-3.9623172283172607, 3.39068865776062], + [-0.9792078137397766, 10.449403762817383], + [-0.6236510872840881, 10.300262451171875], + [7.495125770568848, -1.9445258378982544], + [-4.011830806732178, 6.236656665802002], + [2.2196295261383057, -3.7371749877929688], + [8.139861106872559, -3.3654534816741943], + [-4.18626070022583, -4.258970260620117], + [1.560657024383545, -4.734135150909424], + [-1.1915534734725952, 11.256946563720703], + [-4.120889663696289, -1.7570019960403442], + [-1.6189075708389282, 1.1981425285339355], + [5.68980073928833, -1.5294287204742432], + [2.572054624557495, -3.6293118000030518], + [0.3217161297798157, -6.229059219360352], + [-4.336766719818115, -0.31149017810821533], + [2.7031915187835693, -5.139179706573486], + [-4.272416591644287, 6.669283866882324], + [-3.6546294689178467, -1.6486831903457642], + [0.6557499766349792, -8.233966827392578], + [3.0307319164276123, 5.493154525756836], + [1.4873056411743164, -5.378623008728027], + [-3.0953891277313232, -1.1516070365905762], + [-3.111640214920044, -2.530484914779663], + [1.5306249856948853, 6.327932357788086], + [0.7095443606376648, -8.440202713012695], + [2.623119592666626, -4.2425618171691895], + [0.0562436506152153, -4.7074079513549805], + [0.6039242148399353, -7.845455169677734], + [4.294547080993652, -4.3390350341796875], + [0.33628416061401367, 3.070106029510498], + [-4.395148277282715, -0.9985715746879578], + [0.06991284340620041, -5.35866641998291], + [-0.5596338510513306, 0.464263916015625], + [1.2216410636901855, 3.9652135372161865], + [-4.2035136222839355, -0.26461151242256165], + [-2.857929229736328, 2.6070704460144043], + [-2.0953776836395264, 2.0498132705688477], + [-2.7552120685577393, -0.564905047416687], + [1.6308913230895996, -3.3219356536865234], + [-1.2269723415374756, 10.595197677612305], + [-3.8958799839019775, -1.06709623336792], + [0.3919638395309448, -6.117359161376953], + [4.661325931549072, -1.2366987466812134], + [-3.5847861766815186, 3.6599538326263428], + [6.396961688995361, -2.8180341720581055], + [0.5670923590660095, -7.2823100090026855], + [2.647519826889038, 6.176628112792969], + [-0.406427800655365, 9.095508575439453], + [-1.4944590330123901, 1.8779579401016235], + [-3.881286382675171, -2.5255067348480225], + [0.7893509864807129, -6.25927209854126], + [3.107938766479492, -4.792849540710449], + [-2.502281427383423, -0.622775137424469], + [-4.81328821182251, 7.021894454956055], + [0.49761414527893066, -7.403226852416992], + [0.6467991471290588, -4.795587539672852], + [1.0344483852386475, -5.719311714172363], + [-5.176107883453369, -1.0840197801589966], + [0.6932191252708435, -8.278987884521484], + [4.691985130310059, 7.8352155685424805], + [0.3883669376373291, -6.946679592132568], + [-0.5763154625892639, 11.139863967895508], + [-1.4845986366271973, 12.567033767700195], + [-5.2762908935546875, -4.097302436828613], + [-5.551199913024902, 7.716022968292236], + [2.1040852069854736, -5.106385231018066], + [-1.8333193063735962, 3.428940534591675], + [1.9370124340057373, 0.45227062702178955], + [-3.5553596019744873, -1.5836924314498901], + [-4.736359119415283, 4.445146560668945], + [2.2138490676879883, 4.88857364654541], + [-3.8078973293304443, 5.721160888671875], + [2.823568105697632, 5.003511428833008], + [2.8686459064483643, -4.575153350830078], + [-4.416745662689209, -0.9682482481002808], + [2.8861875534057617, -4.8184919357299805], + [-5.6447319984436035, -1.0627484321594238], + [3.135040521621704, -4.95958137512207], + [-1.7186720371246338, 0.2351856529712677], + [4.349313259124756, 7.363329887390137], + [0.5759355425834656, -5.764097213745117], + [0.7652801871299744, 6.17653751373291], + [6.9471755027771, -2.414921760559082], + [2.5610640048980713, 5.393993377685547], + [-1.3378232717514038, 11.694686889648438], + [0.479775607585907, -7.956764221191406], + [0.6028711199760437, -6.5110626220703125], + [-3.696089506149292, -2.3541409969329834], + [-5.385434627532959, 5.872158050537109], + [3.077564239501953, -4.955224514007568], + [-1.629351019859314, 1.6132736206054688], + [1.9238975048065186, 5.266022205352783], + [-3.8759076595306396, -1.8856931924819946], + [1.6606526374816895, 0.1037411093711853], + [-4.104759693145752, -2.6850898265838623], + [3.4087400436401367, -1.55184805393219], + [-1.22826087474823, -0.6549736857414246], + [2.062349557876587, -5.008635520935059], + [-2.1083614826202393, 1.9544657468795776], + [6.790736675262451, -2.1421144008636475], + [-2.0393636226654053, 1.941344141960144], + [2.8025624752044678, -4.385596752166748], + [5.895812034606934, 8.946320533752441], + [-3.8793821334838867, -1.9934866428375244], + [7.431567668914795, -1.9908894300460815], + [7.291976451873779, -2.244004487991333], + [2.839092969894409, -4.5419464111328125], + [0.4805372953414917, -0.7064236998558044], + [2.3528196811676025, -4.139402389526367], + [0.6607361435890198, -8.207381248474121], + [0.057467155158519745, -4.2325615882873535], + [-5.419764041900635, 6.855589866638184], + [1.5283677577972412, 1.4528313875198364], + [-4.890626430511475, 6.673243522644043], + [0.46208447217941284, -6.180778980255127], + [-1.9987967014312744, 2.166041374206543], + [0.8661800026893616, 6.1228766441345215], + [7.136716365814209, -2.0478341579437256], + [-5.301629066467285, -1.9268239736557007], + [-0.1919405460357666, 8.476865768432617], + [0.6933501958847046, -4.355825901031494], + [2.1503407955169678, 5.1397223472595215], + [-0.053933508694171906, -3.4704740047454834], + [-4.125799655914307, -2.495189666748047], + [-2.199247360229492, 3.3695430755615234], + [-0.5888309478759766, 9.203167915344238], + [-0.4632163941860199, -0.740346372127533], + [-2.865260601043701, -1.221253752708435], + [7.500951290130615, -2.374117136001587], + [-2.0005435943603516, -1.7231135368347168], + [7.777103424072266, -2.9062552452087402], + [2.789597272872925, 5.972399711608887], + [-3.538408041000366, -1.6607235670089722], + [0.060830794274806976, -1.3085445165634155], + [2.7245326042175293, -4.463517189025879], + [6.881048202514648, -2.650681257247925], + [-1.3854645490646362, 1.5629304647445679], + [-2.4035634994506836, 2.4508838653564453], + [-4.021385669708252, -1.7193455696105957], + [0.6802750825881958, -8.252951622009277], + [9.701653480529785, -2.9666035175323486], + [8.699130058288574, -3.0749671459198], + [2.0283472537994385, 0.3893791735172272], + [-3.565875768661499, -0.7635214924812317], + [2.698282480239868, -4.959272384643555], + [0.703812837600708, -4.589916229248047], + [0.7734421491622925, -7.310493469238281], + [0.753693699836731, -6.46512508392334], + [5.80889368057251, -1.1301815509796143], + [-1.823564052581787, 1.5583728551864624], + [-1.914406180381775, 1.7574361562728882], + [-3.3640143871307373, 5.258747100830078], + [0.7721508145332336, -7.5603766441345215], + [0.6733402609825134, -8.217090606689453], + [3.2020480632781982, 6.73919677734375], + [-1.5072274208068848, 12.577861785888672], + [9.969892501831055, -3.0371248722076416], + [-0.1547839641571045, 9.449761390686035], + [0.379835307598114, -6.515163421630859], + [7.427919864654541, -3.5524191856384277], + [-4.08817195892334, -2.136545181274414], + [2.949702262878418, 6.263358116149902], + [-3.963399887084961, -1.8612674474716187], + [-4.360710620880127, 6.561066627502441], + [-0.8365317583084106, 10.526596069335938], + [-1.2421363592147827, 10.83328914642334], + [5.123447895050049, 8.066509246826172], + [0.5970204472541809, -8.306485176086426], + [-0.3524112105369568, 9.262202262878418], + [-4.130598545074463, -3.4704277515411377], + [-5.2680439949035645, -0.6810877323150635], + [-3.5424890518188477, -1.3822072744369507], + [6.8204264640808105, -2.239431858062744], + [3.882544755935669, 6.674559116363525], + [0.5348309874534607, -7.912353515625], + [-4.12388277053833, 6.540982246398926], + [-1.2975292205810547, -0.7098042964935303], + [-5.1083550453186035, 2.5140340328216553], + [4.331495761871338, -0.7341580390930176], + [-4.599137306213379, -3.521167516708374], + [6.3547444343566895, -2.8652937412261963], + [-4.724294662475586, 0.11431771516799927], + [-4.211406230926514, -2.80237078666687], + [7.676445960998535, -2.8632874488830566], + [5.521213054656982, -4.2298431396484375], + [-4.320127010345459, -2.8207430839538574], + [3.1000471115112305, -4.834893226623535], + [7.315286159515381, -2.7195932865142822], + [5.165652751922607, 7.992901802062988], + [-4.159307956695557, -2.474975824356079], + [1.507082462310791, -4.319732189178467], + [2.0056607723236084, -4.273870944976807], + [0.6747279763221741, -0.590786874294281], + [-3.2327160835266113, -1.0434690713882446], + [-3.9455204010009766, -1.008358120918274], + [1.1666791439056396, -5.0638628005981445], + [6.65026330947876, -4.318122386932373], + [-0.10055840760469437, -1.2978606224060059], + [-4.3082356452941895, -0.7813578248023987], + [1.1162846088409424, -4.796616077423096], + [-5.341352939605713, 6.946237087249756], + [8.161969184875488, -3.2631165981292725], + [0.874243438243866, -6.611667633056641], + [2.269490957260132, 5.786447525024414], + [-3.855153799057007, 6.050559997558594], + [-2.2965192794799805, 0.02753579244017601], + [-1.5253510475158691, 0.9583215713500977], + [8.128843307495117, -2.7032740116119385], + [0.5050925612449646, -7.097859859466553], + [-3.118427038192749, 2.351344347000122], + [4.769663333892822, 7.705102443695068], + [2.9053590297698975, -4.869831562042236], + [2.1338014602661133, -5.736639976501465], + [0.37157416343688965, -6.660763740539551], + [-1.1048030853271484, 10.649904251098633], + [-4.067963600158691, -1.0468807220458984], + [6.593011379241943, -1.8426579236984253], + [4.365623950958252, 7.260859489440918], + [5.4410319328308105, -2.8388049602508545], + [-2.761443853378296, -2.9171066284179688], + [-1.0183273553848267, 10.845026016235352], + [-0.7000617384910583, 10.352224349975586], + [-1.9951928853988647, 2.294844150543213], + [0.5477557182312012, -6.060956954956055], + [6.465081214904785, -4.622664451599121], + [7.563077926635742, -2.840256929397583], + [-2.153076171875, 1.1433643102645874], + [-1.8438302278518677, 1.1910173892974854], + [-0.7294116020202637, 9.746771812438965], + [1.453924298286438, 4.689051628112793], + [2.4171016216278076, 6.092408180236816], + [9.0241060256958, -2.8292057514190674], + [-3.6827967166900635, -1.130372166633606], + [-5.484108924865723, 6.5904388427734375], + [0.915827214717865, -0.37601542472839355], + [-1.3206537961959839, 0.868535041809082], + [-0.09859967976808548, -5.104907035827637], + [-4.5615153312683105, -2.843982696533203], + [0.13405001163482666, -0.8296036720275879], + [1.6458803415298462, -5.037945747375488], + [-1.775068998336792, 1.0556172132492065], + [-4.961740016937256, 4.420881271362305], + [-3.789403200149536, -0.8763222694396973], + [-3.6364386081695557, 3.9108641147613525], + [-0.3190344572067261, 9.588715553283691], + [-4.8978190422058105, -2.348741292953491], + [-2.67728590965271, 3.81607985496521], + [-1.2679569721221924, 1.034542202949524], + [-5.104116439819336, 6.427703857421875], + [0.6631976962089539, -8.155129432678223], + [-5.484187126159668, 7.232388019561768], + [6.6170148849487305, -2.159540891647339], + [0.7440342903137207, -6.466392517089844], + [-3.665390968322754, -1.8018420934677124], + [-2.724731922149658, 4.901740074157715], + [2.2765390872955322, 0.576309859752655], + [2.7080719470977783, 5.615330219268799], + [0.6835773587226868, -7.107774257659912], + [-3.540416955947876, -0.29747533798217773], + [-1.588196039199829, 1.2766679525375366], + [-3.405043363571167, 4.92733097076416], + [6.956923961639404, -2.1819798946380615], + [3.1144721508026123, 6.9022321701049805], + [-5.328140735626221, -3.5699851512908936], + [5.319785118103027, -3.521683931350708], + [-2.277048349380493, 1.744823694229126], + [2.3617093563079834, 0.6655121445655823], + [0.6759380102157593, -7.464161396026611], + [-2.9551193714141846, 5.2250823974609375], + [-4.656235218048096, 0.5893428325653076], + [2.9874346256256104, -5.211097717285156], + [3.6057684421539307, -2.8833415508270264], + [-0.7638663649559021, 1.6188464164733887], + [1.8340284824371338, -6.449944496154785], + [-2.4215986728668213, -3.0453855991363525], + [-3.448547840118408, -1.1245973110198975], + [0.4055126905441284, -5.7872772216796875], + [-3.088808298110962, -1.987334132194519], + [0.6780229806900024, -8.008245468139648], + [0.7192420363426208, -8.560725212097168], + [5.088900089263916, 7.771760940551758], + [7.967099666595459, -2.495810031890869], + [1.0405546426773071, -5.589503288269043], + [-3.3352789878845215, -1.575554370880127], + [-3.762624979019165, -2.0884382724761963], + [2.517570972442627, 6.245767593383789], + [-0.9827670454978943, 10.519697189331055], + [-2.434154748916626, -0.6570582389831543], + [2.4037790298461914, 5.619288921356201], + [2.750976800918579, -4.665095329284668], + [4.060361385345459, 7.134219169616699], + [7.144897937774658, -3.2330117225646973], + [0.6803151965141296, -5.289333343505859], + [-4.127450466156006, -2.8686039447784424], + [-4.712610721588135, -1.114634394645691], + [-4.3104634284973145, -3.0127766132354736], + [0.3143197298049927, -5.710081100463867], + [1.2378047704696655, -3.613229990005493], + [-1.8125944137573242, 1.7980865240097046], + [-3.0401079654693604, -0.79609614610672], + [6.453578472137451, 9.283740997314453], + [9.442566871643066, -2.9006292819976807], + [0.41615450382232666, -7.116827487945557], + [-1.1821272373199463, 1.7692830562591553], + [6.2314839363098145, -3.1199681758880615], + [2.398162603378296, -3.7857143878936768], + [0.5166183114051819, 0.07626739144325256], + [-1.8850406408309937, 1.8371590375900269], + [8.998047828674316, -2.7309114933013916], + [6.978275775909424, -1.8884309530258179], + [-2.8626973628997803, 3.526301860809326], + [-3.9986183643341064, -0.9690783023834229], + [0.6865679621696472, -8.283276557922363], + [-3.462130308151245, -1.21017587184906], + [0.2225639522075653, -4.302975654602051], + [2.3019773960113525, 3.633589744567871], + [0.6231585741043091, -7.791290760040283], + [1.5040888786315918, 1.7893205881118774], + [-1.1995902061462402, -0.6351701021194458], + [2.717653512954712, -4.417037010192871], + [-4.536316394805908, -1.888866901397705], + [6.203583240509033, -2.2218525409698486], + [-0.5983436703681946, 0.94896000623703], + [-0.67825847864151, -2.758774518966675], + [0.11867111176252365, -5.2769775390625], + [0.7858781218528748, 6.675608158111572], + [4.25100040435791, 6.934738636016846], + [-1.9659936428070068, -1.63157057762146], + [-5.021849632263184, -1.1051968336105347], + [5.770567417144775, -2.0476644039154053], + [-0.2149505615234375, -1.8841192722320557], + [2.043164014816284, -5.315441608428955], + [2.844625473022461, -4.751747131347656], + [-1.059448003768921, 1.2935153245925903], + [0.627343475818634, -6.665868759155273], + [1.9562253952026367, 5.70957088470459], + [-4.228529453277588, 3.8301503658294678], + [7.3658928871154785, -2.8916966915130615], + [-0.8155431747436523, -2.5283539295196533], + [0.3893750309944153, -5.925072193145752], + [-3.5340702533721924, -2.187995672225952], + [-1.1976253986358643, 11.582423210144043], + [-1.0466573238372803, 10.982781410217285], + [-3.4177911281585693, -1.6952651739120483], + [-3.2733843326568604, -1.6597459316253662], + [1.856971025466919, -4.60254430770874], + [-3.817996025085449, -2.0448501110076904], + [-0.20002129673957825, -1.8071883916854858], + [-0.9136630296707153, 0.7344858646392822], + [-4.277528762817383, 6.759244441986084], + [-4.439020156860352, -3.6619632244110107], + [0.4680097699165344, -7.138671398162842], + [2.2217328548431396, 5.19573974609375], + [0.7989568710327148, -4.85343599319458], + [7.090816020965576, -2.297285556793213], + [-4.534172534942627, 5.427180290222168], + [-5.353456974029541, -1.2503691911697388], + [-3.814133405685425, -2.544553279876709], + [2.38767409324646, 5.396778106689453], + [-0.20437055826187134, 8.713428497314453], + [1.4949123859405518, 5.668813705444336], + [-1.93559992313385, 2.101909875869751], + [0.6553425192832947, -8.923797607421875], + [-3.207811117172241, -1.89653742313385], + [-1.2873682975769043, 11.698295593261719], + [2.3502910137176514, 3.9600188732147217], + [-0.29387038946151733, -0.3964790105819702], + [1.335681438446045, 2.374471426010132], + [-4.982510566711426, 7.102125644683838], + [2.47658634185791, -4.723480224609375], + [-1.074445366859436, 10.035872459411621], + [-0.4749130308628082, -1.054174542427063], + [1.7719228267669678, 0.9645124673843384], + [-0.28933393955230713, 7.770155906677246], + [-0.029694058001041412, -3.8815677165985107], + [-4.2620463371276855, -1.3278617858886719], + [1.3130085468292236, -5.366734504699707], + [-0.6870577931404114, 9.856962203979492], + [-0.495231032371521, 9.182379722595215], + [-0.6890038847923279, 7.821345806121826], + [-2.229886770248413, -1.2232218980789185], + [0.0927109643816948, -4.384280681610107], + [7.44747257232666, -2.724364995956421], + [-1.4267160892486572, 1.7434552907943726], + [0.7186688780784607, -8.38391399383545], + [2.1149141788482666, -3.6723990440368652], + [-0.6016048192977905, -1.6274968385696411], + [-3.482701063156128, 4.533751487731934], + [1.8999392986297607, 5.050026893615723], + [2.823749303817749, -4.541773319244385], + [1.322875738143921, -6.412003517150879], + [-3.341869592666626, -0.9550449848175049], + [-2.8304502964019775, -0.8611080646514893], + [-1.5513556003570557, 12.17240047454834], + [0.7890411019325256, -7.029561519622803], + [-3.2614662647247314, -1.0346711874008179], + [2.8245580196380615, -4.556573867797852], + [2.718444347381592, 4.916420936584473], + [-1.6596450805664062, -2.096606969833374], + [2.340641975402832, 5.7833709716796875], + [-0.07134146243333817, 4.4484453201293945], + [0.8494873046875, -0.6822653412818909], + [-4.145517826080322, -1.146125078201294], + [-4.6953444480896, -4.993907451629639], + [-3.163585901260376, 3.0804948806762695], + [1.480895757675171, -4.738114356994629], + [-1.3050440549850464, 1.5629934072494507], + [-1.9850587844848633, 0.6355531215667725], + [2.704493761062622, -4.294078826904297], + [-5.501750469207764, 4.560882091522217], + [-1.6012049913406372, 1.2402294874191284], + [-5.339675426483154, 5.013072967529297], + [-1.351617693901062, 11.57845687866211], + [0.8646782040596008, -0.4218074381351471], + [2.7704226970672607, -3.0816667079925537], + [2.2598721981048584, 5.528291702270508], + [-1.2620757818222046, 11.552547454833984], + [7.386765956878662, -2.1596667766571045], + [-3.5812015533447266, -1.3463871479034424], + [-3.754317045211792, -1.2497286796569824], + [2.4307868480682373, 0.48607873916625977], + [-1.4640107154846191, 11.872344970703125], + [-3.934325933456421, -1.1433073282241821], + [-0.2011106014251709, 8.95101261138916], + [0.3679952025413513, -0.5939955711364746], + [0.7388337254524231, -7.576955795288086], + [-4.766125202178955, -0.7290563583374023], + [-3.4062979221343994, -1.1105459928512573], + [-3.8111212253570557, -4.524043560028076], + [1.287937879562378, -5.644929885864258], + [-5.5864176750183105, 4.0426344871521], + [-4.976657390594482, -4.080331802368164], + [-1.3667083978652954, 0.6828141808509827], + [-4.014791488647461, -1.2804769277572632], + [2.759793519973755, -4.236501693725586], + [-2.0606863498687744, 0.646426796913147], + [0.18573355674743652, -5.386885643005371], + [-5.875922679901123, 7.849023342132568], + [-0.2442968487739563, 9.778182983398438], + [-4.722334384918213, 5.592827320098877], + [-4.262301445007324, -2.8500797748565674], + [-2.5671119689941406, -1.0259686708450317], + [2.4278483390808105, -6.753529071807861], + [-1.3297778367996216, -0.8802647590637207], + [0.6261122822761536, -8.106160163879395], + [-1.936541199684143, 1.6778268814086914], + [0.5646450519561768, -7.414817810058594], + [2.760443687438965, -5.0612921714782715], + [2.742112159729004, -4.303757667541504], + [-4.75873327255249, 6.412025451660156], + [-0.33382993936538696, 8.740039825439453], + [0.9298388361930847, 3.131620168685913], + [-4.154702663421631, -2.1647164821624756], + [2.29659104347229, 5.384713649749756], + [1.6189799308776855, -5.062408924102783], + [3.8588707447052, 6.8752593994140625], + [-1.749979853630066, 0.8197715282440186], + [-1.216327428817749, 10.814742088317871], + [-1.2642173767089844, 1.2404640913009644], + [-0.2934131622314453, -3.7585811614990234], + [6.932809352874756, -4.884919166564941], + [0.6431559920310974, -8.093122482299805], + [-4.193505764007568, -0.9681311249732971], + [-4.176423072814941, -0.6914219260215759], + [-5.232489109039307, 7.013643741607666], + [2.1345179080963135, -4.876414775848389], + [-3.810373067855835, -0.2500402331352234], + [6.608551502227783, -1.9693450927734375], + [-3.4999899864196777, -3.2452070713043213], + [-0.5403326749801636, 9.735322952270508], + [4.082289695739746, 6.947822570800781], + [-1.3522112369537354, 1.560740351676941], + [-3.4458467960357666, -1.209860920906067], + [-1.4142038822174072, 11.946845054626465], + [0.730278730392456, -8.047859191894531], + [-4.314863204956055, -3.4241607189178467], + [2.279883623123169, -4.8459296226501465], + [0.444979190826416, -0.9136697053909302], + [-0.7194271683692932, 10.090764999389648], + [0.05725648254156113, -5.429559707641602], + [5.19357967376709, 8.162042617797852], + [-1.1669238805770874, 10.568531036376953], + [-1.6614892482757568, -0.1278698444366455], + [-5.452332973480225, 5.299249649047852], + [2.082930564880371, -3.9696428775787354], + [8.11191177368164, -3.083759069442749], + [-0.9666936993598938, -0.8852577805519104], + [-4.056931018829346, -2.8161120414733887], + [-2.585921049118042, -3.5089845657348633], + [-0.0985647514462471, 7.74044942855835], + [0.4293134808540344, -0.7921614646911621], + [0.9057984948158264, -0.3679521977901459], + [-5.1780829429626465, 6.7970356941223145], + [-0.27091294527053833, 8.869918823242188], + [2.9759175777435303, 5.670042037963867], + [9.152158737182617, -2.9082868099212646], + [1.3239223957061768, -4.312508583068848], + [-1.614495038986206, 12.827813148498535], + [-0.967984676361084, 10.287954330444336], + [-3.6497132778167725, 5.967280387878418], + [-3.311058282852173, -2.0369293689727783], + [-2.755345106124878, 2.9471487998962402], + [-3.9445273876190186, -2.7933244705200195], + [-5.277182102203369, 5.987045764923096], + [-3.750556230545044, -1.606557011604309], + [-3.811854600906372, -2.7936956882476807], + [-5.346859931945801, 7.233866214752197], + [-4.531707286834717, 4.948925018310547], + [-3.9396913051605225, -1.2056562900543213], + [-5.128006458282471, 6.76597785949707], + [-0.17394831776618958, -1.3722981214523315], + [-0.7023564577102661, 9.514852523803711], + [2.693030595779419, 6.329871654510498], + [-2.4713287353515625, 4.976820945739746], + [-3.9519619941711426, -0.30692756175994873], + [0.5995501279830933, -5.562190055847168], + [-1.1793384552001953, 11.009758949279785], + [-1.6129261255264282, -0.13248735666275024], + [4.256014823913574, -3.828016996383667], + [-4.069652080535889, -1.937591552734375], + [-1.534085988998413, 12.531391143798828], + [-3.4882562160491943, -2.449491500854492], + [-4.421451568603516, -1.2767730951309204], + [-0.7331042289733887, 8.981229782104492], + [0.40025120973587036, -6.349413871765137], + [-3.6795427799224854, -3.825025796890259], + [-2.9095451831817627, 4.748183250427246], + [0.2372642159461975, -6.285647869110107], + [2.247180223464966, -4.40924072265625], + [-1.286540150642395, 1.8404501676559448], + [0.6059184670448303, -7.629178047180176], + [0.04361938685178757, -4.195531845092773], + [5.011425018310547, -3.132587194442749], + [-3.597937822341919, 6.34406852722168], + [6.843980312347412, -2.3826146125793457], + [-1.344779372215271, 1.5279356241226196], + [-2.5360445976257324, -2.770500421524048], + [0.5659414529800415, -7.3852314949035645], + [4.815280914306641, -3.028118848800659], + [-0.4395309090614319, 10.232734680175781], + [-3.828610897064209, -0.17654949426651], + [7.587098121643066, -2.1657800674438477], + [-4.150125980377197, 5.088351249694824], + [-4.51378870010376, -0.7707664966583252], + [-1.294188380241394, 11.251862525939941], + [-4.15987491607666, -3.827138900756836], + [0.6995264887809753, 7.536800384521484], + [-3.8179304599761963, -1.8274637460708618], + [3.52467942237854, 7.004293441772461], + [-0.19836950302124023, -0.7786083221435547], + [-5.091884136199951, 2.957979917526245], + [-0.23676526546478271, -1.3242944478988647], + [0.15642893314361572, -5.918771743774414], + [-0.6307737827301025, 10.433847427368164], + [-5.34616231918335, 5.679751873016357], + [7.362093925476074, -3.534796953201294], + [-1.514822006225586, 1.5527238845825195], + [0.42051076889038086, -6.155539035797119], + [0.6831150054931641, -6.504421710968018], + [-0.4740058183670044, 9.584783554077148], + [-3.8802831172943115, -1.3987174034118652], + [-0.9978626370429993, 11.291938781738281], + [6.411558628082275, -1.671878457069397], + [0.8984681963920593, -4.590847969055176], + [-4.121525287628174, -0.9894884824752808], + [-4.00606632232666, -1.065022587776184], + [1.8601280450820923, 4.678938865661621], + [8.741990089416504, -2.8031156063079834], + [-4.764827251434326, 6.351025104522705], + [0.6292153596878052, -5.605697154998779], + [0.3094101548194885, -6.249231815338135], + [1.139725923538208, -4.249637126922607], + [7.236876964569092, -2.89983868598938], + [0.4438648819923401, -5.879735946655273], + [-2.954509973526001, -0.8886762857437134], + [9.389742851257324, -2.8489749431610107], + [-1.2897557020187378, 11.550813674926758], + [-4.532286167144775, 6.926839828491211], + [2.011988878250122, -5.950069427490234], + [10.018476486206055, -3.0225470066070557], + [1.4160023927688599, 1.3725382089614868], + [-4.6437458992004395, 0.09860005974769592], + [-1.8962888717651367, -2.5304043292999268], + [-4.0355353355407715, 0.6634606122970581], + [-2.3000214099884033, 6.090604305267334], + [0.4312061071395874, -7.1654438972473145], + [-1.8785113096237183, 0.8482061624526978], + [7.602748870849609, -2.723308801651001], + [-4.856746196746826, -1.146166205406189], + [7.219193935394287, -1.9108970165252686], + [1.347304344177246, 4.834303855895996], + [-1.8844975233078003, 1.6101356744766235], + [-4.164081573486328, 6.445321559906006], + [2.0200700759887695, -4.385576248168945], + [2.4260523319244385, 5.433082580566406], + [-0.5903338193893433, 9.764557838439941], + [-1.2420977354049683, 1.0019605159759521], + [-3.4854252338409424, -1.8769335746765137], + [-1.3255677223205566, 11.683758735656738], + [-2.8186428546905518, 5.495419502258301], + [1.8736156225204468, 0.7642945647239685], + [-1.2428706884384155, 0.9699314832687378], + [5.309523105621338, 8.451374053955078], + [-2.3085567951202393, 1.0511178970336914], + [-0.5247916579246521, -1.7876323461532593], + [3.405855417251587, -3.566483736038208], + [0.2999911904335022, -6.760702610015869], + [2.5178680419921875, -4.20701265335083], + [-3.506667137145996, 5.856553554534912], + [3.3464882373809814, 6.26007080078125], + [7.1359381675720215, -2.9409115314483643], + [-1.7950711250305176, 1.515508770942688], + [-0.4041099548339844, -3.418440818786621], + [2.790239095687866, -4.657549858093262], + [-0.011282749474048615, -4.509018898010254], + [-1.5106875896453857, 12.429678916931152], + [-4.0179057121276855, -1.1818773746490479], + [0.9083316326141357, -0.5149664282798767], + [0.6474898457527161, -8.580702781677246], + [-3.7852306365966797, -1.759950876235962], + [2.236967086791992, 0.7699552178382874], + [-1.2631369829177856, 11.896224975585938], + [-4.259055137634277, 5.800870418548584], + [-0.36627358198165894, 9.673420906066895], + [1.110048770904541, -5.11317777633667], + [-5.2956719398498535, 6.716263771057129], + [0.19276612997055054, -5.970247268676758], + [-3.694257974624634, -2.39966082572937], + [1.0672566890716553, -7.1604461669921875], + [-0.3532832860946655, -1.1577236652374268], + [2.5964274406433105, -4.5275421142578125], + [3.4231107234954834, -4.149499893188477], + [8.960844993591309, -2.7502431869506836], + [-1.5085806846618652, 1.0384278297424316], + [6.264891147613525, -3.0681934356689453], + [-2.9413206577301025, -0.9535748362541199], + [-0.8945528864860535, 9.805541038513184], + [-0.058214880526065826, -5.065120697021484], + [-3.5620534420013428, -1.6320408582687378], + [0.6339035034179688, -8.123315811157227], + [0.7095434665679932, -5.267181396484375], + [0.7666886448860168, -10.101055145263672], + [0.8240355849266052, 0.041311781853437424], + [0.9665301442146301, -5.391885280609131], + [0.5711812973022461, -8.592456817626953], + [-1.5669013261795044, 0.9982746839523315], + [2.6022579669952393, -4.440498352050781], + [-0.6864444613456726, 10.067328453063965], + [0.45097094774246216, -7.548338890075684], + [0.6278722882270813, -7.789724349975586], + [8.93842887878418, -2.828139305114746], + [8.723624229431152, -2.7967464923858643], + [0.5849288702011108, -5.296318054199219], + [6.07700777053833, -3.996173620223999], + [-0.9255454540252686, 10.034843444824219], + [-3.615095853805542, 5.573154449462891], + [2.75681471824646, -4.469383239746094], + [1.2943120002746582, -6.181731224060059], + [-3.8489181995391846, 1.2003744840621948], + [2.9037537574768066, -5.0850019454956055], + [-1.2594833374023438, 10.466595649719238], + [-0.38573789596557617, -1.374707579612732], + [2.5500564575195312, -5.207771301269531], + [-1.251091480255127, 10.11651611328125], + [0.6079458594322205, -8.255973815917969], + [-0.9937085509300232, 10.604679107666016], + [2.097271203994751, 5.582780361175537], + [5.834306240081787, -1.4003983736038208], + [-0.0794997289776802, 8.480950355529785], + [-4.773510456085205, 6.548210144042969], + [2.5587477684020996, -5.136466026306152], + [-4.123692989349365, 6.041517734527588], + [0.7730622887611389, -6.476302146911621], + [7.902100086212158, -3.079084634780884], + [-5.07388973236084, 5.336664199829102], + [-3.7160298824310303, -0.9451040029525757], + [-5.715346813201904, 6.15895414352417], + [-3.3168368339538574, -0.7218087315559387], + [4.588505268096924, 7.6790056228637695], + [1.1943638324737549, 0.1170417070388794], + [1.0667017698287964, -5.893986701965332], + [2.4589011669158936, 5.788791179656982], + [6.561227798461914, -3.4765067100524902], + [0.5459142327308655, -7.087378025054932], + [8.275757789611816, -2.732225179672241], + [-0.926662027835846, 10.069877624511719], + [6.820194721221924, -1.4930297136306763], + [1.1663339138031006, -6.692726135253906], + [8.997122764587402, -2.8036491870880127], + [-3.9400854110717773, 5.9613142013549805], + [5.137012481689453, -1.1812127828598022], + [-4.011394500732422, -0.6764414310455322], + [-2.155233383178711, 5.898725509643555], + [5.524509429931641, 8.64573860168457], + [3.0412018299102783, -4.728542327880859], + [-0.9541624188423157, 10.309654235839844], + [0.5106233954429626, 1.072281002998352], + [-0.49739760160446167, 10.319786071777344], + [-0.28189098834991455, 8.199895858764648], + [1.2979249954223633, 5.058656692504883], + [-3.8107359409332275, 5.760580062866211], + [0.29754015803337097, -4.602185249328613], + [-0.2761557698249817, 8.470017433166504], + [4.3736090660095215, 7.4230475425720215], + [2.205435276031494, -4.743053436279297], + [0.4683167338371277, -0.1252773255109787], + [0.8115924000740051, -5.26330041885376], + [-4.256974697113037, 5.701396465301514], + [1.4234185218811035, -4.506367206573486], + [2.5380361080169678, 4.321455478668213], + [-1.825347900390625, 0.11437809467315674], + [-5.429447650909424, 6.477565765380859], + [-4.629134654998779, -1.0175107717514038], + [-1.3655884265899658, 11.930214881896973], + [0.15336233377456665, -0.5927295684814453], + [2.5588879585266113, 4.73677396774292], + [7.5754828453063965, -2.72918963432312], + [4.539477348327637, 7.217684745788574], + [0.7094107270240784, 0.7865816950798035], + [5.805959224700928, -1.4290523529052734], + [3.0132296085357666, -4.751909255981445], + [2.8188588619232178, -4.666081428527832], + [1.232543706893921, -5.658766746520996], + [-1.762056589126587, 0.17010989785194397], + [-2.479844331741333, -3.4199373722076416], + [-2.1709494590759277, 1.0750653743743896], + [2.2747814655303955, 5.990840911865234], + [2.1274116039276123, 0.9311560988426208], + [-1.2305363416671753, 10.530851364135742], + [-5.035722732543945, -1.146532416343689], + [0.3837844133377075, -6.307523727416992], + [0.5561555624008179, -4.4776811599731445], + [5.632355213165283, 8.559952735900879], + [5.050807476043701, 7.985095024108887], + [2.856651544570923, 5.532328128814697], + [5.584681987762451, -3.106156826019287], + [-4.2860798835754395, -1.0635735988616943], + [3.3998658657073975, 6.272730827331543], + [-3.1448605060577393, 0.2806384563446045], + [1.5602567195892334, 1.010175108909607], + [-3.7262885570526123, -2.070622205734253], + [2.3690226078033447, -4.5302839279174805], + [-0.41352736949920654, 8.35251522064209], + [-3.3329997062683105, 6.917837619781494], + [-0.5834452509880066, 10.017585754394531], + [-3.453615427017212, -1.5092735290527344], + [-3.935987710952759, -4.107758522033691], + [2.293980598449707, 5.806105613708496], + [2.006950855255127, 0.6379826068878174], + [-4.948115825653076, -0.8840223550796509], + [-2.973007917404175, 0.41987550258636475], + [0.6921811699867249, -9.166969299316406], + [-0.2937769591808319, -1.0984081029891968], + [-1.7738860845565796, 0.9198300838470459], + [6.4130988121032715, -2.704291582107544], + [-3.1066133975982666, -1.0834465026855469], + [1.994715929031372, 5.652994155883789], + [-4.995726108551025, -1.0027140378952026], + [0.1735718846321106, -6.825061798095703], + [-4.527005672454834, -0.9320708513259888], + [5.50669527053833, -1.5246566534042358], + [1.0895676612854004, -6.625452995300293], + [-0.7742802500724792, 10.147981643676758], + [8.177343368530273, -3.055475950241089], + [-3.603963851928711, -3.118945837020874], + [8.397313117980957, -3.5369153022766113], + [1.0907785892486572, -5.111573219299316], + [8.444367408752441, -2.675724744796753], + [1.7158188819885254, 2.1232211589813232], + [8.120808601379395, -3.0269477367401123], + [-5.110644340515137, -1.188663125038147], + [-4.042048931121826, -3.9236886501312256], + [2.6239333152770996, -4.196732521057129], + [-3.8787620067596436, -2.4511797428131104], + [-1.302442193031311, 11.730801582336426], + [-3.500291109085083, -1.0717699527740479], + [-1.8801383972167969, 1.8581082820892334], + [-3.4902851581573486, -2.5482006072998047], + [-5.195108413696289, 4.53192138671875], + [3.0581700801849365, -3.99954891204834], + [5.084112644195557, 7.956640243530273], + [3.0044825077056885, -4.909306049346924], + [-3.580737590789795, -2.1498682498931885], + [0.15350982546806335, -5.482809066772461], + [-0.34939783811569214, 10.018193244934082], + [2.6311614513397217, 4.950498580932617], + [-5.136568069458008, 6.723563194274902], + [-1.983234167098999, 2.4592413902282715], + [-5.130489826202393, 7.015023708343506], + [7.115797519683838, -1.9360103607177734], + [-4.056560516357422, -1.3063029050827026], + [1.7975337505340576, 0.5003834366798401], + [6.250903129577637, -1.5004290342330933], + [2.324646234512329, 6.26943302154541], + [-5.361682415008545, 5.7797136306762695], + [-3.52331805229187, -1.1186816692352295], + [-1.5140892267227173, 1.6976560354232788], + [8.092766761779785, -2.445491075515747], + [-1.2687983512878418, 11.192127227783203], + [-1.9050273895263672, 0.4304758906364441], + [-0.22557416558265686, -3.979468584060669], + [5.739611625671387, -1.8032668828964233], + [7.7169694900512695, -2.488267421722412], + [-4.820117950439453, 3.79575252532959], + [-1.2704840898513794, 11.60466194152832], + [2.0293054580688477, 5.774399280548096], + [-3.6921932697296143, -2.0602667331695557], + [0.9272769093513489, -3.41743540763855], + [-4.6724419593811035, 6.501125812530518], + [3.147623300552368, -4.871570110321045], + [-1.0219388008117676, 10.281209945678711], + [0.15113216638565063, -6.073561668395996], + [-3.8347694873809814, -3.409151554107666], + [1.2800673246383667, 0.02051001414656639], + [5.897721767425537, -2.5575690269470215], + [6.5077738761901855, -2.4848830699920654], + [1.1374776363372803, -6.263701438903809], + [1.5032541751861572, 0.361973375082016], + [-3.2057595252990723, -0.9525986909866333], + [2.5915963649749756, -4.581887722015381], + [0.554327130317688, -7.510914325714111], + [-0.7115364074707031, 9.66802978515625], + [-1.8693747520446777, 2.010124921798706], + [-3.960920572280884, 6.0062479972839355], + [-1.8999919891357422, 1.7279882431030273], + [8.18519115447998, -2.5222275257110596], + [-3.9398038387298584, -2.0484609603881836], + [-1.4670803546905518, -2.5777039527893066], + [2.5924699306488037, 0.6931325197219849], + [0.7758823037147522, 0.1480712592601776], + [2.889284610748291, -4.807835578918457], + [-3.7558035850524902, -2.7953133583068848], + [-1.8005752563476562, 1.085854172706604], + [6.448721885681152, -4.8994550704956055], + [-4.408051490783691, -0.39716124534606934], + [2.770843267440796, -4.573829650878906], + [-1.896486520767212, 1.1348869800567627], + [1.5630266666412354, 3.619577646255493], + [0.8773790597915649, -7.056747913360596], + [-0.34577757120132446, 9.500662803649902], + [2.5661184787750244, -5.316119194030762], + [1.248530387878418, -6.070109844207764], + [5.692562103271484, -1.8217521905899048], + [-3.1155521869659424, -1.7359275817871094], + [-1.8243533372879028, 1.6861553192138672], + [-1.0629535913467407, 10.419111251831055], + [1.4347721338272095, -4.480268955230713], + [-4.7166595458984375, 3.0617706775665283], + [1.9753808975219727, 3.3540780544281006], + [-3.0518953800201416, -2.1676218509674072], + [1.6264384984970093, 4.668341636657715], + [-1.1827970743179321, 10.90290641784668], + [-4.340818881988525, 0.21687424182891846], + [2.4202919006347656, -4.340826988220215], + [-2.507246255874634, 5.903658866882324], + [-2.357733964920044, 0.4618619680404663], + [2.4873440265655518, -4.412322044372559], + [-4.28244161605835, 6.500699996948242], + [0.33646923303604126, -6.592712879180908], + [-2.849071741104126, -1.2693166732788086], + [0.20130741596221924, -5.838785171508789], + [-0.6387873291969299, 9.711380004882812], + [0.7561182379722595, -9.296422958374023], + [0.4907556176185608, -7.3944549560546875], + [-0.13684827089309692, -1.2646567821502686], + [0.29960763454437256, -5.076569557189941], + [0.9686533808708191, -6.55610466003418], + [-4.346479415893555, -0.5201083421707153], + [-2.6248743534088135, -1.8831771612167358], + [-0.15726953744888306, 8.83639144897461], + [3.746569871902466, 6.732234001159668], + [2.353527784347534, -4.2312421798706055], + [2.0683352947235107, 3.9292898178100586], + [0.45009011030197144, -7.482863903045654], + [7.988677501678467, -2.9641263484954834], + [1.7976948022842407, 1.0472663640975952], + [0.8923587799072266, -0.42397135496139526], + [-1.1918977499008179, 10.947547912597656], + [-0.8524040579795837, 10.286324501037598], + [-2.845426082611084, -0.9460899829864502], + [2.0785958766937256, 0.8674494624137878], + [-4.66619348526001, -3.585620641708374], + [3.8691370487213135, 7.029959678649902], + [6.211021900177002, -4.706252098083496], + [-2.4650232791900635, -2.2609193325042725], + [-1.5989460945129395, 1.3411465883255005], + [-3.583890676498413, -1.4161514043807983], + [2.2069132328033447, 1.2560815811157227], + [-5.422314167022705, 6.065440654754639], + [-3.3938729763031006, 4.121507167816162], + [0.6804342865943909, -7.273969650268555], + [1.5669419765472412, -5.308103561401367], + [-3.2894928455352783, -1.0830193758010864], + [-3.2919137477874756, -1.0872218608856201], + [0.46087372303009033, -0.23518501222133636], + [-0.3642960786819458, 8.918632507324219], + [0.5065924525260925, -7.255783557891846], + [4.406862735748291, 7.334001541137695], + [-2.0031485557556152, 2.3594186305999756], + [-3.3668606281280518, -1.4125102758407593], + [8.298622131347656, -2.7846362590789795], + [6.28908634185791, -1.6191835403442383], + [-2.4221575260162354, 0.08609408140182495], + [-0.10589850693941116, -4.48319149017334], + [1.301580548286438, -0.2772115170955658], + [-3.862474203109741, -2.9440419673919678], + [-5.7949419021606445, 7.653108596801758], + [-4.209847927093506, -4.603384971618652], + [-0.6920685768127441, 9.966034889221191], + [7.380677700042725, -2.800585985183716], + [6.965253829956055, -2.7351906299591064], + [5.99199914932251, -3.310689687728882], + [-2.6182618141174316, 2.7652413845062256], + [2.8603463172912598, -4.647193908691406], + [8.324517250061035, -2.5934600830078125], + [-0.6456181406974792, 6.7683634757995605], + [0.6809736490249634, -6.289377689361572], + [-5.400190830230713, -0.8610389828681946], + [-1.0407476425170898, -0.05874696746468544], + [-3.218640089035034, -0.7317057251930237], + [-2.108999729156494, -0.859097421169281], + [1.5494201183319092, 5.385384559631348], + [1.8625837564468384, 3.585031509399414], + [-1.781359076499939, 2.029900550842285], + [-4.982936859130859, 4.488884449005127], + [-0.7465271353721619, 9.380598068237305], + [-0.6256239414215088, 8.59142780303955], + [-3.7295620441436768, -1.3074613809585571], + [-4.8911261558532715, 6.67042875289917], + [-4.951676368713379, 7.218292236328125], + [1.2709307670593262, -7.247847557067871], + [-0.5345866084098816, 9.66212272644043], + [-1.5353822708129883, 0.6476993560791016], + [-4.353962421417236, -1.3395049571990967], + [-3.6252126693725586, -1.7845782041549683], + [-0.9064112901687622, 10.47786808013916], + [-4.845117092132568, 6.408390045166016], + [-3.087486505508423, -0.4390197992324829], + [-0.5246500372886658, 9.844522476196289], + [1.753021240234375, 3.9030604362487793], + [-3.3775336742401123, 0.08462566137313843], + [5.718160629272461, -2.1964690685272217], + [-3.9438023567199707, -1.9403003454208374], + [1.8795640468597412, 5.6678147315979], + [-2.502131700515747, -1.5212382078170776], + [-0.33957767486572266, 9.187013626098633], + [-3.524641275405884, -1.155621886253357], + [9.807879447937012, -3.0109779834747314], + [6.871670484542847e-5, -1.0452903509140015], + [2.735183000564575, -4.342523574829102], + [5.861656665802002, -1.1484092473983765], + [-4.696701526641846, -0.7976192235946655], + [0.7527564167976379, -8.370744705200195], + [-2.4783542156219482, 3.9120538234710693], + [0.6501681804656982, -0.17419007420539856], + [3.777458906173706, 6.5756378173828125], + [0.6132380962371826, -3.9872019290924072], + [-0.4298786520957947, -1.331985592842102], + [1.993213415145874, 5.524803161621094], + [-3.403191328048706, 0.07582351565361023], + [-2.384423017501831, -0.923223078250885], + [2.6679184436798096, -4.50444221496582], + [0.22423261404037476, -4.702053070068359], + [1.1511021852493286, 4.2235002517700195], + [1.4244346618652344, 5.029386043548584], + [-4.486095905303955, -4.18773889541626], + [10.09476375579834, -3.0480287075042725], + [2.318910837173462, 4.114138126373291], + [-0.09794817119836807, -4.088417053222656], + [-0.29782670736312866, 8.933635711669922], + [-3.613360643386841, -2.223809003829956], + [-4.502349853515625, -3.9150819778442383], + [-4.222229480743408, -2.7177810668945312], + [1.1313337087631226, -5.047879219055176], + [-0.6096872687339783, 10.101489067077637], + [-5.163724422454834, -0.5882806777954102], + [2.224332571029663, -4.843490123748779], + [6.656287670135498, -2.39111590385437], + [3.1185901165008545, -4.8961920738220215], + [-4.920594692230225, 6.562745094299316], + [0.4832092523574829, -6.055728912353516], + [-1.8040951490402222, 0.8143537044525146], + [5.374769687652588, -3.111933469772339], + [0.19046807289123535, -3.844639539718628], + [-0.44720035791397095, -2.789775848388672], + [-1.404937505722046, 11.65307903289795], + [7.224689483642578, -3.7599265575408936], + [-3.469533681869507, -0.619979202747345], + [-4.477607727050781, 5.541780471801758], + [-5.66636323928833, -1.2995679378509521], + [-1.9353199005126953, 1.6551874876022339], + [2.6328446865081787, -4.861268043518066], + [-1.3755546808242798, 12.036966323852539], + [-3.759986639022827, -1.4283660650253296], + [0.1607399582862854, -6.420204162597656], + [0.8280017971992493, -4.320927143096924], + [-5.029521465301514, 6.914210796356201], + [-2.7665648460388184, -1.2451450824737549], + [8.40575122833252, -3.003300905227661], + [3.2796995639801025, 6.473700046539307], + [-4.972926616668701, -0.7308012843132019], + [-4.27350378036499, 3.337498903274536], + [1.6899197101593018, -5.641461372375488], + [-3.771941900253296, -0.9035115242004395], + [1.7156236171722412, -5.0212202072143555], + [1.461067795753479, -0.12972261011600494], + [0.6061576008796692, -8.897232055664062], + [-5.603682041168213, -1.2409751415252686], + [-0.6972320675849915, 10.373132705688477], + [2.332437515258789, 6.012600898742676], + [0.010114245116710663, 1.0263489484786987], + [8.31333065032959, -2.730242967605591], + [0.3899165987968445, -6.432628154754639], + [-1.2396804094314575, 10.930285453796387], + [-3.584909200668335, 5.687741279602051], + [0.6402604579925537, -6.147491455078125], + [-5.269984245300293, 3.9041759967803955], + [3.018395185470581, -6.121853828430176], + [2.7304017543792725, -4.459775924682617], + [0.7555860877037048, -7.131047248840332], + [6.269897937774658, -3.75549054145813], + [2.7258412837982178, -4.400420188903809], + [5.362014293670654, -3.571946859359741], + [-1.5770765542984009, 13.264305114746094], + [-5.265858173370361, 6.6662092208862305], + [0.5796843767166138, -0.4042157828807831], + [-1.8222804069519043, 0.6717568039894104], + [-3.3681890964508057, -0.4883764982223511], + [-3.596951961517334, -1.1517325639724731], + [0.9213489890098572, -4.920072555541992], + [5.532690525054932, -1.6490342617034912], + [-3.6657650470733643, 5.8666534423828125], + [-1.138813853263855, 1.035241961479187], + [-1.042115330696106, 10.113423347473145], + [0.8502821326255798, -7.268888473510742], + [4.776821613311768, -4.55316162109375], + [6.826114654541016, -1.8369026184082031], + [-0.6654002666473389, 10.040258407592773], + [5.263230800628662, 8.088497161865234], + [8.047002792358398, -2.4374477863311768], + [6.831730365753174, -2.696319818496704], + [1.9981703758239746, -4.057204246520996], + [0.6501215696334839, -8.729239463806152], + [-0.049879975616931915, 8.804056167602539], + [-3.4995834827423096, -2.044456958770752], + [-3.5771427154541016, -1.339701533317566], + [7.623421669006348, -3.3935625553131104], + [2.5716121196746826, 6.069638729095459], + [-3.3320395946502686, 3.4591290950775146], + [-1.0081895589828491, 10.792061805725098], + [-1.7337555885314941, -1.0716240406036377], + [2.4324963092803955, 4.818425178527832], + [0.3866741955280304, -4.955178260803223], + [6.609100818634033, -4.566275596618652], + [-2.9014902114868164, 3.090477705001831], + [-3.4697625637054443, -0.031046513468027115], + [2.5996975898742676, 6.218274116516113], + [0.8730141520500183, -7.766212463378906], + [3.698859691619873, 6.945574760437012], + [-0.49130356311798096, 10.43745231628418], + [-1.068726897239685, 10.531780242919922], + [-1.9388177394866943, 2.229729652404785], + [0.5368931889533997, 4.990006446838379], + [-4.769742965698242, 6.457457542419434], + [-3.371337413787842, -1.040001630783081], + [-3.932932138442993, 5.194146156311035], + [0.4930180311203003, -5.69171667098999], + [1.359544038772583, 1.6792762279510498], + [0.2646770477294922, -0.3392052948474884], + [-1.4708306789398193, 11.976018905639648], + [0.7972077131271362, -7.849238395690918], + [-6.138340473175049, 8.520063400268555], + [-0.7644187808036804, 10.866175651550293], + [-0.12451217323541641, -1.422345519065857], + [2.5321953296661377, 4.606388092041016], + [-4.434443473815918, 5.878270149230957], + [-1.8529950380325317, 2.2368369102478027], + [3.174744129180908, 6.406860828399658], + [1.8735291957855225, 4.462651252746582], + [-3.280841588973999, -0.16279995441436768], + [2.868131160736084, -4.465847015380859], + [-4.625097751617432, 4.2557830810546875], + [2.039672613143921, -4.316132545471191], + [0.47369152307510376, -7.670356750488281], + [2.2551443576812744, -5.604480266571045], + [-1.3608485460281372, 1.7021697759628296], + [-5.0680413246154785, -3.856431245803833], + [-3.5030157566070557, -1.4213086366653442], + [0.6619554758071899, -8.275606155395508], + [8.222882270812988, -2.9589006900787354], + [3.0220019817352295, 6.683084964752197], + [2.28898024559021, -4.9328413009643555], + [-0.36115914583206177, 9.777143478393555], + [-3.396214246749878, -1.3077701330184937], + [-5.025753974914551, 6.912889003753662], + [2.6290605068206787, -4.427546977996826], + [-1.2130104303359985, 11.624750137329102], + [-3.499168634414673, 5.951937675476074], + [-1.3568373918533325, -1.9103471040725708], + [-1.2661501169204712, 1.250091314315796], + [-4.590226173400879, -1.0320576429367065], + [-1.3822201490402222, 12.315547943115234], + [0.5542352795600891, -7.901655673980713], + [-2.870713710784912, -1.3466659784317017], + [8.204465866088867, -2.53602933883667], + [-0.6272129416465759, -1.0719057321548462], + [-1.1910316944122314, 1.0691394805908203], + [-0.7686808705329895, 10.728718757629395], + [0.7175182700157166, -8.48702621459961], + [-4.5905232429504395, 2.0728094577789307], + [-1.9029887914657593, 1.8496893644332886], + [-4.351936340332031, -1.1545954942703247], + [-0.4089753031730652, 9.432429313659668], + [-2.0051827430725098, 0.3171447813510895], + [-4.126582622528076, -3.3184454441070557], + [1.2194535732269287, 5.165538787841797], + [-1.040009617805481, 10.679516792297363], + [-2.6656651496887207, -0.9686484336853027], + [2.5858523845672607, -4.506280899047852], + [-2.931924343109131, -0.7179096937179565], + [2.8061277866363525, -4.820278644561768], + [-3.8156192302703857, -0.6927058100700378], + [-0.047822125256061554, -4.916692733764648], + [-1.3536368608474731, -0.06343686580657959], + [-2.645634889602661, -2.2126519680023193], + [-3.7685887813568115, -1.4878840446472168], + [-4.506552219390869, -5.198407173156738], + [0.3945644497871399, -7.379123210906982], + [-2.110344171524048, 5.964648723602295], + [-1.225864291191101, 10.819513320922852], + [-2.3085339069366455, -0.9624727964401245], + [-4.92504358291626, -2.3762574195861816], + [-5.336285591125488, 5.1042351722717285], + [2.794160842895508, -4.7281084060668945], + [-4.349035739898682, -4.305905818939209], + [-2.1514546871185303, 2.5514426231384277], + [2.4051740169525146, -4.555754661560059], + [0.7296004891395569, -9.242345809936523], + [2.5162994861602783, -5.31459903717041], + [-0.31683993339538574, 8.554769515991211], + [-4.333658695220947, -1.9753508567810059], + [-4.2327351570129395, 4.5184221267700195], + [-1.0200823545455933, 11.268742561340332], + [-2.834404706954956, -0.7655298709869385], + [-3.2181174755096436, -0.7953882217407227], + [-1.3642288446426392, 11.672073364257812], + [0.4988001585006714, -5.9441328048706055], + [0.5645627975463867, -6.931491374969482], + [-0.9726786017417908, 10.623032569885254], + [-3.9503066539764404, -3.4218201637268066], + [1.986781120300293, -4.1624650955200195], + [0.5183297395706177, -7.46362829208374], + [7.657649517059326, -2.246246099472046], + [-3.8771398067474365, -1.989004135131836], + [4.963687419891357, -2.8777854442596436], + [2.7903761863708496, 6.442336082458496], + [-5.1964850425720215, 4.948078155517578], + [0.6079867482185364, -7.933635711669922], + [-4.1319475173950195, -3.2809088230133057], + [1.7019398212432861, -5.4325761795043945], + [-1.633495807647705, 1.1676980257034302], + [-2.0400807857513428, 2.3881876468658447], + [0.5894355177879333, -7.593284606933594], + [2.724148988723755, -4.8234357833862305], + [-1.187227487564087, 0.3441567122936249], + [-3.611516237258911, -2.0113158226013184], + [-0.9497981667518616, 11.29879379272461], + [1.6387298107147217, -4.960958480834961], + [0.8891085982322693, -7.116049766540527], + [-0.34681734442710876, -1.1798418760299683], + [0.8257583975791931, -0.5713968276977539], + [7.470835208892822, -2.2796247005462646], + [-3.8472228050231934, 6.935937404632568], + [0.0876869186758995, -1.2585253715515137], + [-1.655884861946106, 13.435785293579102], + [0.5781466960906982, -4.869489669799805], + [-4.7602009773254395, 6.2227373123168945], + [8.367207527160645, -2.5688371658325195], + [0.700080931186676, -7.980707168579102], + [-0.439155638217926, 3.581627368927002], + [0.6999944448471069, -6.7211833000183105], + [-1.2986079454421997, -0.667946457862854], + [5.79104471206665, -2.93892240524292], + [-2.7209746837615967, -2.291761636734009], + [3.4108493328094482, 6.5311689376831055], + [2.6854259967803955, -4.173683166503906], + [-1.9182398319244385, 1.988512396812439], + [-2.2598352432250977, 2.2867884635925293], + [-3.0881545543670654, -0.8003306984901428], + [0.9771739840507507, -5.018679618835449], + [-2.1343488693237305, 1.9040764570236206], + [2.1887571811676025, 5.825181007385254], + [7.760679721832275, -2.802062511444092], + [6.085249900817871, -1.6036221981048584], + [-4.2587080001831055, 6.75123405456543], + [-1.24041748046875, 5.091306209564209], + [-0.13348394632339478, -0.6093637943267822], + [-2.485807180404663, 2.5565755367279053], + [0.5584087371826172, -8.077417373657227], + [-1.7285109758377075, -1.0963674783706665], + [-1.476271152496338, 11.970718383789062], + [-2.0317251682281494, 2.005563497543335], + [2.491054058074951, 5.8984527587890625], + [0.6128057837486267, -8.400333404541016], + [-3.7607786655426025, -2.324450731277466], + [0.6103759407997131, 9.131709098815918], + [0.628997266292572, -8.265702247619629], + [3.8566133975982666, 7.3191142082214355], + [-3.0189902782440186, -1.0524793863296509], + [-1.888229250907898, -0.45562830567359924], + [-5.1493048667907715, 5.331381797790527], + [-4.068803310394287, 3.444953680038452], + [0.7981554865837097, -7.462044715881348], + [-1.1548049449920654, 11.501903533935547], + [2.1117050647735596, -4.756103515625], + [4.646450519561768, 7.657164573669434], + [-3.0578010082244873, 6.3250932693481445], + [8.448832511901855, -3.1117160320281982], + [-4.0314202308654785, -2.7268943786621094], + [6.097572326660156, -1.8060683012008667], + [-3.445014238357544, 6.7826714515686035], + [6.0385332107543945, -1.5041457414627075], + [-2.4575746059417725, 2.4804999828338623], + [-3.213498830795288, -1.8916391134262085], + [2.1451635360717773, -5.272056579589844], + [-5.316380500793457, 6.433528900146484], + [-3.2989859580993652, 5.4226813316345215], + [0.5267292261123657, -7.997526168823242], + [-4.158073902130127, 3.079246759414673], + [-4.352638244628906, 6.10476016998291], + [-4.1562819480896, 6.186473369598389], + [-5.398545742034912, 7.204095363616943], + [-3.962658643722534, -0.6030241250991821], + [-3.982820510864258, -1.1470061540603638], + [-3.1056227684020996, -1.029337763786316], + [1.1790626049041748, -4.982195854187012], + [2.546388864517212, 5.792043209075928], + [-4.462137699127197, -0.9744698405265808], + [-3.7933404445648193, -1.6509109735488892], + [2.5884807109832764, -4.1747636795043945], + [-0.022238321602344513, -3.040501356124878], + [2.53753924369812, -4.519025802612305], + [-4.328644752502441, 6.582313537597656], + [-0.59147709608078, 10.022390365600586], + [-2.0343148708343506, 2.2131636142730713], + [-5.58369255065918, 6.368295669555664], + [8.069737434387207, -2.809966802597046], + [-2.3264214992523193, 0.11445361375808716], + [0.3949185013771057, -6.142955303192139], + [-1.9983001947402954, 2.0055460929870605], + [-1.0528064966201782, 10.23667049407959], + [-4.410101413726807, -1.7635751962661743], + [-4.896246433258057, 4.907419681549072], + [-1.1698224544525146, 10.621658325195312], + [0.7721371054649353, -7.281439781188965], + [-1.1570212841033936, 10.424080848693848], + [-1.9364676475524902, 0.06494709849357605], + [0.3530392646789551, -5.969730377197266], + [-3.46867299079895, -1.1917201280593872], + [-4.2629780769348145, -1.9959138631820679], + [-2.952547788619995, 3.262240171432495], + [0.5872606635093689, -7.597268104553223], + [-3.407644033432007, -1.7480924129486084], + [-0.45514386892318726, 9.978195190429688], + [0.6651607751846313, -8.663187026977539], + [-1.1330609321594238, 10.69609260559082], + [1.3876979351043701, -0.07402050495147705], + [-1.6464005708694458, 13.161133766174316], + [-0.5796315670013428, 9.154007911682129], + [0.436975359916687, -5.775981903076172], + [3.084699869155884, -4.815855026245117], + [0.3737855553627014, -4.127126216888428], + [-3.6963951587677, -1.0865031480789185], + [2.695197343826294, -5.081575393676758], + [0.46844804286956787, -6.772547245025635], + [-1.1806963682174683, 8.65300178527832], + [5.548840045928955, -1.4534823894500732], + [-4.11337423324585, -1.6674754619598389], + [-3.994502067565918, -1.6076642274856567], + [3.6390302181243896, 6.78228759765625], + [-4.172070026397705, -0.9625914692878723], + [-3.711427927017212, -2.558462142944336], + [8.440886497497559, -2.7103288173675537], + [-2.2244248390197754, 1.8663190603256226], + [-5.382638454437256, 7.300193786621094], + [0.5849010348320007, -6.693388938903809], + [0.6310199499130249, -6.30949068069458], + [-2.8955748081207275, 0.3263193964958191], + [0.5629412531852722, -6.69826602935791], + [-3.3945603370666504, -1.3303624391555786], + [0.10492532700300217, -2.727226972579956], + [8.537494659423828, -3.5445570945739746], + [-4.940077781677246, -3.0804357528686523], + [2.3201255798339844, 4.738874435424805], + [-1.3669672012329102, 11.411624908447266], + [2.716979503631592, -4.666016578674316], + [1.9681968688964844, 0.5007426142692566], + [1.016148328781128, 1.0782623291015625], + [1.5423293113708496, -4.503260135650635], + [2.1662721633911133, -4.846609592437744], + [2.2130231857299805, 0.44015419483184814], + [7.163418292999268, -2.321533441543579], + [-1.3170558214187622, 11.804672241210938], + [2.0873000621795654, 0.7356020212173462], + [-1.356993556022644, 1.3531755208969116], + [8.711695671081543, -2.915306806564331], + [0.5282014012336731, -7.294593811035156], + [-0.6882025599479675, 9.751232147216797], + [2.1801512241363525, -4.639378547668457], + [-4.769104480743408, -1.257663369178772], + [7.94348669052124, -2.7965009212493896], + [8.315906524658203, -2.467529535293579], + [6.244165897369385, -4.768608570098877], + [0.42683303356170654, -7.188963413238525], + [-1.0022984743118286, 10.785794258117676], + [-0.05795068293809891, 8.193947792053223], + [-4.341686248779297, -0.8055331707000732], + [-0.7446456551551819, 10.235618591308594], + [1.2617239952087402, -3.760704755783081], + [2.8382527828216553, -4.610372543334961], + [2.5900866985321045, -5.509154319763184], + [-3.6226918697357178, -1.5565778017044067], + [4.28777551651001, 7.3936662673950195], + [-3.286597490310669, -1.9329242706298828], + [-4.409255027770996, -0.9846210479736328], + [-4.151993274688721, 5.728156089782715], + [6.226120948791504, -3.0057713985443115], + [1.6973402500152588, 4.110606670379639], + [-1.0783871412277222, 11.212796211242676], + [5.222789287567139, 8.202656745910645], + [0.3492211699485779, 4.522234916687012], + [1.784376621246338, 0.8137685656547546], + [2.445711374282837, -5.895873069763184], + [-2.8204145431518555, 4.128161430358887], + [-4.404512882232666, 3.7068376541137695], + [0.3989471197128296, -5.898916244506836], + [-0.11622080951929092, -1.003326177597046], + [-4.82692289352417, 6.984786033630371], + [0.517750084400177, -7.3532209396362305], + [0.11119788140058517, -5.653749465942383], + [-5.525508403778076, 4.9961256980896], + [2.8684632778167725, -4.481703281402588], + [1.816283941268921, 5.499007701873779], + [-3.825673818588257, -0.657665491104126], + [-1.9848928451538086, -0.5116196274757385], + [0.3406168818473816, -6.638895034790039], + [1.7193453311920166, 4.77930212020874], + [2.4122440814971924, -4.020127773284912], + [-3.5562126636505127, -3.615891218185425], + [3.0150258541107178, -4.769998073577881], + [-1.818197250366211, -2.0585477352142334], + [-3.6600592136383057, -0.6211423277854919], + [5.9285054206848145, -1.554578185081482], + [0.8992691040039062, -4.147529602050781], + [-0.4661019444465637, 10.307586669921875], + [-2.507822275161743, 0.44801270961761475], + [1.1441922187805176, -4.636002540588379], + [-4.518486499786377, -1.449723243713379], + [-3.008711338043213, -1.2241684198379517], + [-5.416874885559082, 6.430144309997559], + [3.2812135219573975, -3.94059157371521], + [-3.6152889728546143, 6.231860637664795], + [-2.6355183124542236, 2.1216142177581787], + [2.5389926433563232, -4.368892669677734], + [-5.761714935302734, 7.727813720703125], + [-2.147185802459717, 0.9151129722595215], + [1.1854276657104492, -6.369166851043701], + [-4.962482929229736, 5.732542037963867], + [2.996427297592163, -5.273538589477539], + [-1.217256784439087, 11.061929702758789], + [-1.3597850799560547, 11.570728302001953], + [3.4917311668395996, -3.893799066543579], + [-1.2091429233551025, 11.203269958496094], + [7.0279107093811035, -3.6293461322784424], + [-1.8938422203063965, 1.1845842599868774], + [1.3081271648406982, 6.832124710083008], + [1.9945852756500244, -4.830926418304443], + [0.8251172304153442, -7.223475933074951], + [0.024197392165660858, 3.1908323764801025], + [-0.8498298525810242, 1.0568712949752808], + [-2.060840368270874, -0.5187013745307922], + [0.40578198432922363, -6.249229907989502], + [6.955739498138428, -2.784266948699951], + [6.510378360748291, -3.3949992656707764], + [-0.8845332860946655, 9.904890060424805], + [-1.5981881618499756, 12.747861862182617], + [1.89153254032135, -6.243566036224365], + [3.896181344985962, 7.348079204559326], + [-5.652238845825195, 4.085356712341309], + [1.506956934928894, 4.692005157470703], + [-1.3841921091079712, 12.419258117675781], + [-2.0327677726745605, 2.3362975120544434], + [-1.0131055116653442, 10.772157669067383], + [-4.053332328796387, 6.469124794006348], + [2.7741048336029053, -4.404010772705078], + [0.28933095932006836, -5.458123683929443], + [0.6180103421211243, -0.4080531597137451], + [1.8909038305282593, 1.0237964391708374], + [-5.012226581573486, 1.762662410736084], + [-2.9408156871795654, -1.007520318031311], + [6.119455337524414, -1.2369893789291382], + [1.9160680770874023, 2.6722958087921143], + [6.805350303649902, -1.942379117012024], + [-2.0949862003326416, -3.500800848007202], + [-1.4975632429122925, -2.5007479190826416], + [1.0467197895050049, -0.5409198999404907], + [8.477609634399414, -2.8473598957061768], + [-2.24074387550354, -2.3046538829803467], + [2.7943947315216064, -4.55212926864624], + [-2.654693126678467, -0.39824265241622925], + [2.416200876235962, -4.105039119720459], + [-2.1823203563690186, -1.8419251441955566], + [3.157587766647339, -4.989702224731445], + [-0.39422959089279175, 9.877836227416992], + [-4.73874044418335, -1.136165976524353], + [2.455073118209839, 4.226967811584473], + [0.6649290919303894, -8.066269874572754], + [-5.102860927581787, -0.5168599486351013], + [-5.008404731750488, -0.700506329536438], + [-0.30103060603141785, 4.783733367919922], + [-0.524232029914856, -1.1099992990493774], + [5.148168087005615, -1.3940788507461548], + [-3.8450424671173096, -1.8737808465957642], + [2.651048421859741, -4.38759708404541], + [-1.8577263355255127, 1.0608950853347778], + [0.32784825563430786, -7.175282001495361], + [0.4891394376754761, -0.8657939434051514], + [-4.689962387084961, -0.41095679998397827], + [-5.443502902984619, 7.314888954162598], + [-4.025335311889648, -0.541791558265686], + [2.6333837509155273, -4.377293586730957], + [2.3564441204071045, -6.871399879455566], + [0.5625035762786865, -8.711483001708984], + [5.397529125213623, 8.211353302001953], + [1.80255126953125, -3.3362181186676025], + [-2.3638060092926025, -1.7721595764160156], + [-4.63074254989624, 4.941753387451172], + [-1.0892627239227295, 10.182817459106445], + [1.6543357372283936, -4.451482772827148], + [-4.102179050445557, -2.7229514122009277], + [-3.4578897953033447, 2.771648645401001], + [2.228977918624878, -3.0930166244506836], + [-5.204591751098633, 6.482724189758301], + [-4.664262294769287, -0.797057032585144], + [-3.724088430404663, -2.7462921142578125], + [0.3155902624130249, -5.808187484741211], + [-2.2669143676757812, -0.98744797706604], + [-3.890836477279663, 0.288030743598938], + [8.360295295715332, -3.034332513809204], + [1.5116539001464844, 0.4555644392967224], + [0.5853607058525085, -7.99184513092041], + [1.0467489957809448, -0.4277495741844177], + [3.0743134021759033, 6.305519104003906], + [6.481196880340576, -3.283808946609497], + [5.884946823120117, -3.9427437782287598], + [5.411129474639893, 8.20475959777832], + [3.0682246685028076, -4.359982490539551], + [-3.2121198177337646, 3.975842237472534], + [-3.012725591659546, 2.9154489040374756], + [-0.4965059757232666, 9.50758171081543], + [1.5725467205047607, -5.801153182983398], + [9.122098922729492, -2.804713010787964], + [-4.234216213226318, -1.341182827949524], + [0.3559320569038391, -6.670900821685791], + [6.684047222137451, -2.1693761348724365], + [-5.371922492980957, 5.859314918518066], + [-1.3971493244171143, 11.93984603881836], + [-3.1021506786346436, -0.8118590712547302], + [-0.2445855736732483, -0.8194278478622437], + [0.5316107869148254, -6.191187858581543], + [-4.146908760070801, -3.903989553451538], + [-1.102602243423462, 10.670122146606445], + [3.0486767292022705, -5.183780670166016], + [0.5817638635635376, 6.55681037902832], + [2.866994619369507, -5.28144645690918], + [1.0768687725067139, -6.033656120300293], + [-2.841902256011963, 5.135912895202637], + [-0.2082321047782898, -3.3720874786376953], + [1.3741533756256104, -4.89942741394043], + [1.8360806703567505, -5.036881923675537], + [-4.718830585479736, -0.741319477558136], + [-1.157219409942627, 0.4805574417114258], + [-4.789312839508057, -2.937415361404419], + [1.3192452192306519, 3.7859091758728027], + [-2.8309202194213867, -1.4771579504013062], + [2.469895362854004, 5.905776500701904], + [-3.2728397846221924, 3.722501754760742], + [-0.5179632306098938, 9.878113746643066], + [-2.102719783782959, 2.2692759037017822], + [0.7803471684455872, -7.960343360900879], + [-3.495464563369751, -0.7453973889350891], + [-1.5665644407272339, 12.661373138427734], + [-4.667835712432861, -0.5852429270744324], + [-4.529734134674072, 6.201663970947266], + [-5.241902828216553, 3.1349918842315674], + [-0.718386173248291, -1.691174864768982], + [1.5662989616394043, 0.18641775846481323], + [1.4787613153457642, 0.029811765998601913], + [-2.3858606815338135, -2.3403546810150146], + [2.1494216918945312, 4.879375457763672], + [0.07681003957986832, -1.2965054512023926], + [-2.1815595626831055, 2.052976131439209], + [-4.471724510192871, 4.0467047691345215], + [-1.6398404836654663, 2.0691606998443604], + [0.5756816864013672, -0.6632114052772522], + [0.275699257850647, 6.132392883300781], + [-3.7176129817962646, -1.9891010522842407], + [6.588210582733154, -1.8178983926773071], + [6.209463119506836, -4.522759437561035], + [0.8300105929374695, -8.339923858642578], + [-4.7295684814453125, 6.078936576843262], + [0.48066991567611694, -7.210804462432861], + [9.447908401489258, -2.9096055030822754], + [1.7185417413711548, 0.47769981622695923], + [4.05148983001709, 7.408552169799805], + [-3.343207359313965, 5.716845512390137], + [0.7788195013999939, -9.520318984985352], + [-4.557154655456543, -0.4482313394546509], + [0.4719303250312805, -5.847152233123779], + [0.9943003058433533, -5.28466272354126], + [-2.6472654342651367, 2.7563552856445312], + [-4.427212715148926, -2.6449341773986816], + [-0.6832951903343201, 9.311357498168945], + [-2.0382204055786133, 0.34208032488822937], + [-1.8587803840637207, 1.5144221782684326], + [-1.2887932062149048, 11.557985305786133], + [0.2535471022129059, -2.8696799278259277], + [-0.9302542805671692, 10.537393569946289], + [-3.7125236988067627, 0.1278727650642395], + [5.806874752044678, -1.2037783861160278], + [-0.7565943598747253, 10.340156555175781], + [-1.9117426872253418, 1.6751257181167603], + [-3.82454252243042, -2.852656841278076], + [8.663743019104004, -2.657021999359131], + [8.975295066833496, -2.8595683574676514], + [-5.072566032409668, -0.8253400325775146], + [-1.336389422416687, 11.940774917602539], + [-4.014658451080322, -0.8827603459358215], + [1.5718902349472046, -0.02632603421807289], + [-5.257904052734375, -0.7834417819976807], + [-3.435018301010132, -1.414002776145935], + [3.004046678543091, -4.572932243347168], + [2.3446199893951416, 4.567787170410156], + [-2.144059896469116, -0.10270148515701294], + [-4.5292134284973145, 3.3687679767608643], + [8.664864540100098, -3.328544855117798], + [-0.2741900682449341, 8.905435562133789], + [-3.972606658935547, -0.8064842224121094], + [-5.182061672210693, 5.049677848815918], + [-0.8232859969139099, 10.654911041259766], + [0.3839726746082306, -0.941947340965271], + [5.159896373748779, 8.028179168701172], + [-5.468726634979248, 6.0923027992248535], + [0.6144410967826843, -0.7577300667762756], + [0.6380385756492615, -7.126787185668945], + [9.016247749328613, -2.9927542209625244], + [-0.8803771734237671, 10.451383590698242], + [0.6351467967033386, -9.122276306152344], + [-3.988981008529663, -1.4035643339157104], + [-3.2950570583343506, -1.623733639717102], + [-0.4781114459037781, 9.12479305267334], + [-3.1739957332611084, -2.288604259490967], + [-2.1352341175079346, 6.00388240814209], + [8.082530975341797, -2.7383172512054443], + [-0.09505236893892288, -0.16564388573169708], + [6.812158584594727, -3.114593744277954], + [-3.129379987716675, 6.103864669799805], + [2.577887535095215, -4.617250442504883], + [2.9939568042755127, -4.616245269775391], + [-1.3797919750213623, 12.085542678833008], + [-2.541874647140503, -1.076803207397461], + [0.6337131857872009, -7.333502769470215], + [0.36545342206954956, -6.690481185913086], + [2.7587642669677734, 4.435412406921387], + [-0.19523587822914124, -1.3252441883087158], + [1.3622806072235107, 3.0466034412384033], + [-5.410425662994385, -4.611961364746094], + [5.350844860076904, -2.1342334747314453], + [0.8475462794303894, 0.46202677488327026], + [7.784987926483154, -2.4685165882110596], + [-3.728621482849121, -1.396957278251648], + [1.1410722732543945, -4.8553972244262695], + [-4.0158467292785645, -1.1714160442352295], + [-3.9401252269744873, -2.3386614322662354], + [-3.2722527980804443, -1.6688072681427002], + [0.75839763879776, -7.720573425292969], + [1.4600932598114014, 0.14416104555130005], + [-4.381301403045654, -0.7819507122039795], + [3.0064151287078857, -4.928494453430176], + [3.1071434020996094, -6.781360626220703], + [-1.971472144126892, 1.929945945739746], + [0.770103394985199, -4.073154449462891], + [-2.159209728240967, 1.6981347799301147], + [-5.405849456787109, -1.0328501462936401], + [-0.9786219000816345, 11.161603927612305], + [-4.701882839202881, -0.9751657247543335], + [0.4393623471260071, -7.283364772796631], + [7.394969463348389, -2.7543785572052], + [-5.105819225311279, -1.0691581964492798], + [-0.01115725189447403, -1.0138440132141113], + [-2.814337730407715, -3.610600709915161], + [-4.3107008934021, -0.8517643809318542], + [3.6735780239105225, 7.034299850463867], + [0.9046071171760559, -0.12153853476047516], + [-3.518864393234253, -2.0413661003112793], + [0.7128288745880127, -7.475354194641113], + [-0.20400339365005493, 7.133183479309082], + [0.4817386865615845, -7.734482765197754], + [2.8533904552459717, -4.5401105880737305], + [2.5150530338287354, -6.061445236206055], + [0.4562990665435791, -7.447793483734131], + [0.8009473085403442, -7.306288242340088], + [0.33187949657440186, -5.867533206939697], + [2.7721457481384277, -4.421412467956543], + [6.287117004394531, -3.9938817024230957], + [0.836668074131012, 5.963927268981934], + [-0.365841269493103, 9.711048126220703], + [-0.5294750928878784, 9.548906326293945], + [-3.816009759902954, -1.09653902053833], + [6.201446056365967, -3.482790231704712], + [8.305195808410645, -3.3093817234039307], + [2.551387310028076, -4.1760783195495605], + [-3.7230706214904785, 5.6284661293029785], + [0.8985607624053955, -0.39557647705078125], + [-0.5700907111167908, -1.4450469017028809], + [-3.09373140335083, 5.516087055206299], + [2.5533335208892822, -4.932117462158203], + [-0.07021606713533401, 8.78501033782959], + [-3.5609662532806396, -2.4841299057006836], + [-1.616904854774475, 4.447601795196533], + [6.746201038360596, -2.211301565170288], + [-5.392261028289795, 5.746024131774902], + [0.7414659261703491, -8.174602508544922], + [0.11277797073125839, -3.7194156646728516], + [-0.6173754334449768, 10.576033592224121], + [-0.8715227246284485, 5.733599662780762], + [0.14200949668884277, -5.696091651916504], + [1.6580694913864136, -7.045963764190674], + [1.77180016040802, 5.151167869567871], + [-3.830888271331787, -0.9319014549255371], + [0.8895828127861023, -0.14775511622428894], + [0.7882533669471741, -6.746774673461914], + [2.7015416622161865, -4.181112289428711], + [-0.9776669144630432, 10.795111656188965], + [-0.8191647529602051, 1.015392541885376], + [-0.5999494194984436, 10.222461700439453], + [-3.9159300327301025, -2.296583414077759], + [0.39763909578323364, -6.4538187980651855], + [-3.141326665878296, -1.2833274602890015], + [-4.026698589324951, -4.204998970031738], + [7.940066814422607, -3.239783525466919], + [2.949477434158325, -4.840978622436523], + [6.551178932189941, -2.521747589111328], + [2.8776888847351074, -5.189309120178223], + [-1.1533596515655518, 0.10431152582168579], + [2.689605474472046, -4.468225479125977], + [1.9452745914459229, 5.088682174682617], + [-2.784240961074829, 3.023746967315674], + [-3.5611987113952637, -1.636474847793579], + [6.454752445220947, -5.078059196472168], + [1.7589974403381348, -3.6508748531341553], + [-2.7910399436950684, 0.15534687042236328], + [-4.5188140869140625, -3.000838279724121], + [2.264843225479126, 5.297619342803955], + [-3.47112774848938, -1.006626009941101], + [-2.0474822521209717, 0.31391090154647827], + [-1.3418457508087158, 11.830266952514648], + [3.903914213180542, 7.468611240386963], + [6.250771999359131, -3.604844093322754], + [8.072850227355957, -3.0296249389648438], + [8.496638298034668, -2.5110256671905518], + [4.658514499664307, -5.191832542419434], + [3.0741255283355713, -4.818336486816406], + [1.7267869710922241, 0.3080500066280365], + [-2.5119621753692627, 2.548191785812378], + [0.09111624211072922, -1.3756539821624756], + [2.584993839263916, -4.354872703552246], + [0.4052078127861023, -0.8487480878829956], + [0.4880828261375427, -4.982029914855957], + [-3.85738468170166, -2.9897754192352295], + [-2.6682050228118896, -2.2537591457366943], + [2.8344860076904297, -5.328615188598633], + [-1.1047712564468384, 10.327187538146973], + [-5.443033695220947, 7.822755336761475], + [5.793810844421387, -3.498669385910034], + [6.882768154144287, -2.241826057434082], + [2.411156415939331, -4.026691913604736], + [-0.8931120038032532, 11.456853866577148], + [-0.315738320350647, 9.800618171691895], + [0.506047785282135, -7.585070610046387], + [-1.5106065273284912, 1.4980148077011108], + [-5.509727954864502, 5.525628089904785], + [-3.982572317123413, -2.9318387508392334], + [-0.13148051500320435, 9.136758804321289], + [0.7498683333396912, -9.547536849975586], + [5.6781182289123535, -2.0676801204681396], + [-2.0519907474517822, -0.5011006593704224], + [-0.38766682147979736, 3.366039514541626], + [-1.2184665203094482, 11.175817489624023], + [-3.3672587871551514, -2.6080355644226074], + [-1.145505666732788, 10.916991233825684], + [10.61063289642334, -3.1135237216949463], + [-4.594907760620117, 5.291132926940918], + [1.6873316764831543, 4.127406120300293], + [0.4502566456794739, -6.340448379516602], + [0.5299848318099976, -6.690942764282227], + [3.3354575634002686, -3.810012102127075], + [0.8137456774711609, -9.326181411743164], + [-2.0547568798065186, -1.4314345121383667], + [-3.4642107486724854, 5.621131896972656], + [-1.974600911140442, 2.2390360832214355], + [-1.0606575012207031, 10.087335586547852], + [8.759123802185059, -2.772547721862793], + [1.8674787282943726, -4.2726664543151855], + [-0.6666021347045898, 3.148024320602417], + [0.3042483329772949, -6.516751289367676], + [-3.625307321548462, 5.572425365447998], + [1.9212427139282227, 5.732486724853516], + [-2.3492300510406494, 6.211171627044678], + [-4.412170886993408, 6.197614669799805], + [-4.738584995269775, 6.690566062927246], + [-6.1873860359191895, 8.04609489440918], + [2.910482168197632, -4.579773426055908], + [-5.494877338409424, -1.9632627964019775], + [-1.1180036067962646, 11.336542129516602], + [-1.2684829235076904, 3.171806573867798], + [0.33827948570251465, -6.072331428527832], + [-3.715320348739624, -1.4981657266616821], + [-1.9556320905685425, 2.1550092697143555], + [-3.757596254348755, -1.199172854423523], + [2.3064608573913574, -6.142971038818359], + [2.9588406085968018, -4.665875434875488], + [-0.44779103994369507, 8.70332145690918], + [4.188344478607178, 7.101711750030518], + [-0.5454033017158508, -0.962525486946106], + [1.1199318170547485, -0.07508999109268188], + [-2.006305456161499, 1.2356985807418823], + [2.926225185394287, -4.721235275268555], + [0.44935232400894165, -5.943440914154053], + [2.785590410232544, -3.575197219848633], + [2.562903642654419, 6.308785915374756], + [-1.2493865489959717, 11.22349739074707], + [-3.165073871612549, -1.8317008018493652], + [-4.151761054992676, -2.1986193656921387], + [-2.0497119426727295, 2.28751802444458], + [-0.8831735849380493, 1.1536445617675781], + [1.223984956741333, 5.049557685852051], + [-1.3088665008544922, 11.318979263305664], + [-4.559848308563232, 6.616790771484375], + [5.7612457275390625, -2.767193555831909], + [-1.1587473154067993, -1.4599336385726929], + [0.19307401776313782, -4.900123596191406], + [6.468047142028809, -2.2568066120147705], + [-0.9303712844848633, 5.225005626678467], + [-1.7579336166381836, -1.9236764907836914], + [8.539468765258789, -2.5387589931488037], + [-2.161705255508423, 5.550124168395996], + [-4.83881950378418, 1.6531041860580444], + [-1.2362059354782104, 11.057722091674805], + [-2.1070268154144287, 0.3687569499015808], + [-6.331116199493408, -0.9454467296600342], + [-1.5725542306900024, 1.6518993377685547], + [-3.647714138031006, -1.4501221179962158], + [-4.180508613586426, -1.3053406476974487], + [2.249988079071045, 5.914628028869629], + [2.7852425575256348, -4.414051532745361], + [-2.0660178661346436, -0.3406471610069275], + [0.6587486863136292, -8.25015640258789], + [7.141769886016846, -1.9932576417922974], + [-4.332905292510986, -3.280550241470337], + [0.6487813591957092, -6.315174102783203], + [-3.544389486312866, -0.8759216070175171], + [-1.9897249937057495, 2.1965019702911377], + [2.8693103790283203, -4.86147928237915], + [-2.118901491165161, 2.289837121963501], + [6.776562690734863, -2.0210108757019043], + [-1.2698760032653809, 1.311077356338501], + [-0.6804386377334595, 4.117780685424805], + [0.4384387135505676, -7.2256035804748535], + [-3.174607038497925, -0.5254559516906738], + [1.8191149234771729, 5.398151397705078], + [-3.7666285037994385, 6.085102081298828], + [0.645792543888092, -8.02680778503418], + [-3.7288053035736084, -2.9750492572784424], + [-1.7159924507141113, 0.501855731010437], + [0.49749529361724854, -6.709954738616943], + [2.584644079208374, 4.929173469543457], + [-0.6749812960624695, 1.2391656637191772], + [1.7160191535949707, -4.398863792419434], + [-2.082430601119995, 6.3962483406066895], + [-3.413409948348999, -2.458233118057251], + [7.609781265258789, -2.7492668628692627], + [-2.035675287246704, 1.5402491092681885], + [7.5421857833862305, -2.0113022327423096], + [2.119417905807495, -5.314304351806641], + [2.89555025100708, -4.792315483093262], + [-1.9684126377105713, 2.1763341426849365], + [2.1227829456329346, 5.603654861450195], + [-1.2393841743469238, 10.704111099243164], + [-3.5370638370513916, -1.5256882905960083], + [1.8004956245422363, 1.5247305631637573], + [7.053255081176758, -2.322932720184326], + [-1.9072378873825073, -0.08030414581298828], + [-4.847984790802002, -3.3873226642608643], + [-5.1132917404174805, 7.215954303741455], + [0.5727516412734985, -7.229074954986572], + [0.5506123304367065, -6.560488700866699], + [-3.1341185569763184, -0.9495420455932617], + [-1.032153844833374, 11.354833602905273], + [-4.4305100440979, 6.510887622833252], + [1.6789368391036987, 4.656617164611816], + [-5.452268123626709, -6.0674591064453125], + [8.335126876831055, -2.5092155933380127], + [7.369884490966797, -2.3848557472229004], + [-4.393744945526123, -2.3894059658050537], + [-5.4301981925964355, -4.161619186401367], + [-0.6343703269958496, 9.977643966674805], + [-3.882014513015747, -0.9875344038009644], + [-0.13998454809188843, -0.9659150838851929], + [-1.0892797708511353, 10.698400497436523], + [6.9610395431518555, -1.8504241704940796], + [1.872965931892395, 2.3520333766937256], + [-4.153809547424316, -0.2934792637825012], + [-3.6330549716949463, -1.4852839708328247], + [-4.044475555419922, 4.50262451171875], + [-4.531971454620361, 5.871487617492676], + [-0.7282490134239197, 9.03791618347168], + [-1.7850717306137085, 1.343147873878479], + [5.297740459442139, -2.3841731548309326], + [-2.7211782932281494, 2.9822821617126465], + [-1.3620465993881226, 11.648626327514648], + [-0.664396345615387, 9.966981887817383], + [-2.40385365486145, 2.3076388835906982], + [2.0978407859802246, 0.6425707340240479], + [0.9566248059272766, -0.2007260024547577], + [3.623872756958008, -3.9717214107513428], + [0.6147450804710388, -0.4769362509250641], + [-3.9493930339813232, 6.186405181884766], + [-3.747049570083618, -3.560378074645996], + [-3.391986608505249, -0.51397705078125], + [-4.1433634757995605, 5.84630012512207], + [0.36685413122177124, -6.921203136444092], + [2.892153024673462, 5.9733076095581055], + [-1.2237783670425415, 10.807411193847656], + [-1.5620357990264893, 12.666759490966797], + [0.6338741183280945, -8.352351188659668], + [-0.1921425461769104, 6.607303142547607], + [8.4830961227417, -3.2562057971954346], + [-4.154865741729736, 5.2658491134643555], + [-1.0808334350585938, 10.652406692504883], + [4.884957790374756, 8.015548706054688], + [-3.0009865760803223, -0.4754747152328491], + [0.6170039772987366, -7.258307933807373], + [3.582552909851074, 6.569000244140625], + [-1.3402369022369385, 11.693981170654297], + [3.0814647674560547, -5.046764373779297], + [0.263170063495636, -7.061574459075928], + [-3.7334506511688232, -1.3976808786392212], + [7.323065757751465, -2.212122678756714], + [-2.0100669860839844, 2.436190366744995], + [-0.6115882992744446, 9.605823516845703], + [-3.680124282836914, -0.43881285190582275], + [0.5444900393486023, -7.675297737121582], + [-0.6438162326812744, 1.119641900062561], + [7.2572479248046875, -2.5438413619995117], + [1.4540750980377197, 4.785490036010742], + [2.2324202060699463, 4.711816310882568], + [-4.513047695159912, -1.5077508687973022], + [9.004350662231445, -2.901524066925049], + [-2.0276193618774414, 1.2926380634307861], + [-1.114040732383728, 10.664545059204102], + [0.5612542033195496, -7.016915798187256], + [1.9565329551696777, -4.996584415435791], + [2.617285966873169, -4.408965587615967], + [0.41052883863449097, -4.835699081420898], + [3.0433404445648193, -4.92713737487793], + [-1.862682819366455, 1.9709211587905884], + [4.690943241119385, -5.155800819396973], + [1.5085623264312744, 1.5949194431304932], + [-0.17866075038909912, 9.1520357131958], + [-3.4249370098114014, -1.2811092138290405], + [-1.0771758556365967, 10.300966262817383], + [0.6587167382240295, -7.115061283111572], + [0.5311640501022339, -5.584221839904785], + [-1.6235895156860352, 2.4182186126708984], + [-5.03399658203125, -0.6920238137245178], + [1.9227886199951172, 0.2503952980041504], + [-3.841069459915161, -1.3519614934921265], + [-4.189711093902588, -1.0910972356796265], + [0.15690898895263672, -1.235047698020935], + [1.3904287815093994, 5.948687553405762], + [-2.134822368621826, 2.6341910362243652], + [-2.5247280597686768, -1.0751532316207886], + [-2.2031898498535156, 0.028604742139577866], + [1.6302430629730225, -4.554069519042969], + [2.1488068103790283, 0.8428378701210022], + [-1.3887461423873901, 11.6810884475708], + [0.6742722392082214, -1.9161170721054077], + [-3.9228739738464355, -1.7657638788223267], + [0.6725412011146545, -6.5896759033203125], + [-1.244170904159546, -1.5927356481552124], + [9.55959415435791, -2.8650896549224854], + [-4.00099515914917, -0.776359498500824], + [2.0816104412078857, -3.274101495742798], + [-0.658376157283783, 9.762046813964844], + [2.2164433002471924, -3.7438783645629883], + [-1.9374761581420898, -0.14177697896957397], + [-5.247328281402588, -0.5759736895561218], + [0.7128885388374329, -4.3750481605529785], + [-4.9264235496521, -4.007182598114014], + [-3.46058988571167, -1.15941321849823], + [-3.5375993251800537, -0.4624963104724884], + [2.569467306137085, -4.489060401916504], + [-0.6364685297012329, 10.301446914672852], + [-4.899373531341553, -1.5240086317062378], + [2.315962076187134, 3.89560604095459], + [2.315894365310669, 5.620954990386963], + [0.382381796836853, -5.515548229217529], + [-2.9615697860717773, 4.828381538391113], + [-3.4279234409332275, -1.5819355249404907], + [-1.2838363647460938, 2.164705991744995], + [2.9735352993011475, -4.744367599487305], + [-3.2674338817596436, 5.817047119140625], + [0.5517425537109375, -5.7440032958984375], + [0.353973925113678, -5.818026065826416], + [-1.1914288997650146, -0.9550784826278687], + [-3.3228986263275146, -1.3905891180038452], + [2.822364330291748, -4.468441963195801], + [-4.937459945678711, 1.887250304222107], + [1.7475390434265137, 0.6214450597763062], + [0.972882091999054, -4.238115310668945], + [5.884330749511719, 8.910691261291504], + [-5.588237285614014, 7.306727886199951], + [2.0196564197540283, 3.490265130996704], + [-4.705753803253174, -2.874626874923706], + [2.6244118213653564, 5.797881126403809], + [-3.355278730392456, -1.7914496660232544], + [-1.2134054899215698, 11.326004028320312], + [2.1646251678466797, 0.7977663278579712], + [-3.3642024993896484, -1.3674768209457397], + [2.8365707397460938, -4.465705871582031], + [-3.38033127784729, 5.303205490112305], + [1.664595127105713, 1.9318894147872925], + [-3.3255603313446045, -1.279213309288025], + [-3.616365671157837, -0.6025867462158203], + [-1.2300750017166138, 10.64173698425293], + [-3.7823574542999268, -1.0593959093093872], + [-3.7884461879730225, -1.4365366697311401], + [1.7667324542999268, 0.527096152305603], + [1.0649703741073608, -5.9421892166137695], + [-5.838909149169922, 3.1689910888671875], + [-4.109347820281982, -0.2326381802558899], + [-1.781965732574463, 0.8222963213920593], + [-3.241126298904419, -0.7083470225334167], + [-3.785296678543091, -0.8832592964172363], + [-3.3673593997955322, -1.3693734407424927], + [-3.3043270111083984, 0.5349681377410889], + [-4.844346046447754, -0.9435749650001526], + [2.4625980854034424, 5.902693271636963], + [-5.252888202667236, 3.986915349960327], + [7.723485469818115, -3.4979422092437744], + [-1.8769339323043823, 1.527939796447754], + [9.004257202148438, -2.8310201168060303], + [2.9304392337799072, -5.187725067138672], + [-3.8300118446350098, -1.8187369108200073], + [0.5954917073249817, -6.10035514831543], + [9.388628959655762, -2.980788230895996], + [7.279996871948242, -2.964102029800415], + [-0.9295665621757507, 5.258307456970215], + [0.20515206456184387, -5.431070804595947], + [1.414314866065979, 0.018490266054868698], + [0.8885301947593689, 5.843031883239746], + [1.7798986434936523, -6.580234527587891], + [2.584886074066162, 5.40465784072876], + [1.102560043334961, 0.0008667372167110443], + [0.7170963883399963, -4.978305339813232], + [1.7187631130218506, 3.5834274291992188], + [2.4835824966430664, -5.297552108764648], + [0.5324365496635437, -7.326837539672852], + [2.197944164276123, -7.068269729614258], + [-0.44844573736190796, -2.658886671066284], + [-3.6913106441497803, 4.19627046585083], + [0.4482083320617676, -5.824328422546387], + [2.498239278793335, 6.008543968200684], + [-4.156825065612793, -3.415433645248413], + [2.818324565887451, -5.048501491546631], + [-4.714727878570557, -2.181530475616455], + [1.532356858253479, 0.3455101251602173], + [-3.859583616256714, -2.8866169452667236], + [3.016789436340332, -5.070001602172852], + [3.8896467685699463, 7.0681915283203125], + [-4.436038970947266, -1.969425082206726], + [7.471770763397217, -3.671347141265869], + [0.6207446455955505, -6.293752193450928], + [2.5733730792999268, -2.135145425796509], + [1.2049670219421387, -5.944551467895508], + [-3.1680266857147217, -0.9417744874954224], + [7.8320512771606445, -2.578529119491577], + [1.2805496454238892, 6.645491600036621], + [1.6096129417419434, -4.833740234375], + [-3.2302439212799072, -0.9807822108268738], + [-2.118290662765503, 2.2064950466156006], + [-2.087224245071411, 2.389636993408203], + [0.9329500794410706, -5.929793357849121], + [-2.0410208702087402, 2.0178322792053223], + [8.133694648742676, -3.0167224407196045], + [0.048647187650203705, -3.63360595703125], + [0.49625682830810547, -5.211864471435547], + [2.0108754634857178, 3.7770767211914062], + [-5.243680477142334, 4.580344200134277], + [1.6295565366744995, -3.8608884811401367], + [1.6849660873413086, 0.15851959586143494], + [-1.2120157480239868, 11.113731384277344], + [2.0527281761169434, -4.873631954193115], + [-1.8192169666290283, 1.7591277360916138], + [2.443542957305908, -5.720000267028809], + [3.200308322906494, 6.719421863555908], + [2.576810598373413, -4.597942352294922], + [-0.14122843742370605, -2.1045315265655518], + [-3.148303270339966, -1.4310152530670166], + [0.19503968954086304, 2.6819887161254883], + [-0.3329043388366699, -1.800454020500183], + [1.5419760942459106, 4.98747444152832], + [2.1868436336517334, -3.935563802719116], + [0.49980467557907104, -7.3312859535217285], + [2.1456875801086426, 5.119535446166992], + [-2.987058401107788, -1.9824920892715454], + [0.77410888671875, -7.484941005706787], + [0.7854292988777161, -6.969185829162598], + [-4.145793914794922, -3.02860689163208], + [8.220974922180176, -2.7418229579925537], + [-0.5070096850395203, 9.531940460205078], + [-1.1512371301651, 1.5223485231399536], + [6.231579303741455, -2.1867973804473877], + [0.883589506149292, -7.325879096984863], + [-5.925501346588135, 5.497171401977539], + [0.5838938355445862, -7.841177940368652], + [-5.140899181365967, 6.730480194091797], + [6.331845760345459, -1.4660067558288574], + [-5.3603081703186035, -1.4397987127304077], + [-1.902791976928711, 0.7206268310546875], + [-3.8159778118133545, -2.553483486175537], + [-3.656766414642334, 5.928913593292236], + [-1.3644416332244873, 11.895265579223633], + [5.882618427276611, -3.137084484100342], + [1.4817461967468262, -5.370928764343262], + [-3.637009859085083, 5.259965896606445], + [2.82073712348938, 6.532970428466797], + [-3.9564194679260254, -2.4269585609436035], + [-6.156517505645752, 8.172711372375488], + [0.4094681739807129, -6.578535556793213], + [5.6445231437683105, -1.434050440788269], + [-3.2737252712249756, -0.8453290462493896], + [-5.504649639129639, -1.8347039222717285], + [-0.9826692342758179, -1.23731529712677], + [0.7226340174674988, -9.274988174438477], + [-4.4926438331604, -0.6092177629470825], + [-1.8592088222503662, 1.6328586339950562], + [-0.603882372379303, 10.669425964355469], + [-5.438853740692139, 5.827282905578613], + [-3.122894048690796, -0.8549476861953735], + [-0.8588470816612244, 10.108440399169922], + [-4.892166614532471, 7.080877780914307], + [-4.270625591278076, -1.7081561088562012], + [-0.5505762696266174, 9.281384468078613], + [-1.4789094924926758, 1.1625441312789917], + [2.097045421600342, 4.614870071411133], + [1.2252371311187744, -0.20785567164421082], + [-3.7529919147491455, 6.8541789054870605], + [-1.0098438262939453, 11.227645874023438], + [-5.106295108795166, 7.050098896026611], + [-2.0232958793640137, 1.4779537916183472], + [-1.041689395904541, 10.694581985473633], + [7.512673854827881, -2.7830116748809814], + [-1.569882869720459, 1.3050343990325928], + [-0.4729159474372864, 10.216089248657227], + [-3.38215708732605, -1.1019539833068848], + [0.39095211029052734, -6.553522109985352], + [6.56898832321167, -3.6381497383117676], + [-0.7098264098167419, 10.758943557739258], + [0.19038867950439453, -5.507266521453857], + [-5.462448596954346, 5.549546241760254], + [2.76603627204895, -4.616901397705078], + [2.052534818649292, -4.682783126831055], + [2.347118854522705, -6.92203426361084], + [-4.707218647003174, 0.6951338052749634], + [-1.9051096439361572, 2.5505406856536865], + [7.401719570159912, -3.531125545501709], + [-4.382202625274658, -1.075596570968628], + [2.6914865970611572, -4.301353931427002], + [-0.6474018096923828, 9.988921165466309], + [-1.6912256479263306, 2.1145334243774414], + [-4.0348358154296875, -2.5577940940856934], + [0.5941526293754578, -0.769167423248291], + [0.6301587820053101, -6.9847917556762695], + [8.267638206481934, -2.6171603202819824], + [1.2810226678848267, 4.31259822845459], + [-3.607846736907959, -2.29656982421875], + [1.5400561094284058, -4.310551643371582], + [2.464841604232788, -4.846497535705566], + [1.4620252847671509, 0.8364147543907166], + [-4.1951003074646, 6.889042854309082], + [-2.0130062103271484, -0.35270175337791443], + [-0.6693440079689026, 10.424112319946289], + [0.41809409856796265, -6.242570877075195], + [2.607027530670166, -4.619639873504639], + [-2.6499836444854736, 3.4449269771575928], + [1.401498794555664, -4.986557960510254], + [-4.680396556854248, 7.348297595977783], + [8.28373908996582, -2.49733304977417], + [6.717483043670654, -2.627303123474121], + [3.062690019607544, -4.331422805786133], + [0.48926180601119995, 0.1741420328617096], + [-1.2035820484161377, 11.449600219726562], + [-5.0131354331970215, -0.6433697938919067], + [-1.1686203479766846, 10.855619430541992], + [-0.8896650671958923, 11.208584785461426], + [0.31773120164871216, -6.372602462768555], + [4.615288734436035, 7.342960357666016], + [2.5810134410858154, -4.9723734855651855], + [5.8731255531311035, -1.898955225944519], + [-1.0566620826721191, 9.884695053100586], + [-3.808793306350708, 5.3393378257751465], + [-0.13072258234024048, -1.3208519220352173], + [-5.101521968841553, 6.736567497253418], + [-1.1993739604949951, 1.3898887634277344], + [2.858943462371826, -4.511279106140137], + [-0.40478283166885376, 5.0162434577941895], + [0.3927508592605591, -7.116819381713867], + [1.669553518295288, 5.08814811706543], + [1.8191654682159424, 4.89077091217041], + [-2.6279892921447754, 4.402425765991211], + [-1.5141360759735107, 13.17404556274414], + [7.205723285675049, -2.153332233428955], + [-4.496976852416992, -1.580992341041565], + [-5.356725692749023, 7.091941833496094], + [-2.7689285278320312, -1.4249476194381714], + [-4.195302963256836, 4.250088214874268], + [2.1171796321868896, 5.226739883422852], + [8.56885814666748, -2.6102187633514404], + [-0.5787451267242432, 9.859611511230469], + [-0.7734619975090027, 10.252044677734375], + [4.238400459289551, -2.6034529209136963], + [-5.148584842681885, -1.4943162202835083], + [0.27753740549087524, -6.447427749633789], + [9.254148483276367, -2.8217670917510986], + [-0.22529709339141846, 7.861266136169434], + [6.401224136352539, -2.3156559467315674], + [2.111010789871216, 5.728995323181152], + [0.46919649839401245, 0.006961699575185776], + [-0.43981730937957764, -3.7302424907684326], + [-3.3364923000335693, -1.8548699617385864], + [-0.7312752604484558, -0.5245019197463989], + [-1.6324539184570312, 0.29428091645240784], + [1.6094805002212524, 5.389946937561035], + [6.231584072113037, -3.7856318950653076], + [-3.376995801925659, 6.090923309326172], + [6.485199928283691, -4.7202043533325195], + [-4.347120761871338, -1.3645004034042358], + [-1.3632293939590454, 11.857793807983398], + [0.5788233280181885, -6.41531229019165], + [0.767935574054718, -7.037816524505615], + [2.8957159519195557, 6.282773971557617], + [-4.481766223907471, -1.465492844581604], + [-0.6876943707466125, 10.24647331237793], + [0.46054792404174805, -6.600214958190918], + [-3.782597303390503, 6.765213966369629], + [4.18031120300293, -0.9119555354118347], + [2.875912666320801, 5.23410701751709], + [2.7689197063446045, -4.587715148925781], + [5.63058614730835, -1.198527455329895], + [0.5958242416381836, -0.6240212917327881], + [-4.664699554443359, -1.1288857460021973], + [7.556037902832031, -2.3707902431488037], + [2.5504109859466553, -4.334110260009766], + [-3.6534738540649414, 6.299593925476074], + [5.349985599517822, -2.094609022140503], + [-0.8267192244529724, -0.9160005450248718], + [-3.7721736431121826, -1.368930697441101], + [-3.3649344444274902, -0.8759905099868774], + [-2.118889808654785, -1.2660044431686401], + [1.597408413887024, 0.6286270618438721], + [-3.5457351207733154, -3.1440577507019043], + [2.899559497833252, 5.895726203918457], + [2.4453365802764893, 5.833210468292236], + [0.2919270694255829, -5.523026943206787], + [4.742171764373779, 7.812654495239258], + [2.7523224353790283, -4.111210346221924], + [-3.230114221572876, -2.4511172771453857], + [-0.6932449340820312, -2.1121585369110107], + [0.5247931480407715, -7.945831775665283], + [-1.312629222869873, 11.821061134338379], + [0.9799594283103943, -7.286396503448486], + [-4.415106773376465, -1.6383252143859863], + [-1.3995296955108643, 1.1885565519332886], + [0.5002038478851318, -5.673374176025391], + [0.7693967819213867, 4.357141017913818], + [1.1749262809753418, 4.367140769958496], + [0.8574729561805725, -0.44960421323776245], + [-0.7129670977592468, 10.492633819580078], + [2.3526647090911865, -4.480059623718262], + [-2.297494411468506, 5.914671421051025], + [0.6093693971633911, -6.965709686279297], + [0.6150898337364197, -8.037384986877441], + [-4.043682098388672, -2.3498029708862305], + [3.0190885066986084, -4.681393623352051], + [-4.411753177642822, -0.7943588495254517], + [-3.409646987915039, -1.3535250425338745], + [-0.1800263524055481, 7.919307708740234], + [-0.4692226052284241, -1.371599555015564], + [0.1857890486717224, -5.496428966522217], + [-0.8344978094100952, 10.430137634277344], + [-3.708624839782715, -1.405905842781067], + [2.75577712059021, -5.7188262939453125], + [0.6375131011009216, -8.613944053649902], + [-3.6717803478240967, 2.5431697368621826], + [-0.3321496248245239, 2.8612005710601807], + [-3.0723729133605957, 5.853459358215332], + [-1.9902606010437012, 1.8300591707229614], + [-2.6912343502044678, -3.7028257846832275], + [-3.845820665359497, 4.204855918884277], + [-0.27784740924835205, -1.8498979806900024], + [-1.9910340309143066, 2.017888307571411], + [-0.8739203214645386, -3.302398443222046], + [-3.6049511432647705, -1.733285903930664], + [1.3355796337127686, 4.487482070922852], + [-2.999776601791382, -0.8049508929252625], + [0.8246274590492249, -0.41240543127059937], + [2.659360885620117, -4.608458042144775], + [-0.7624501585960388, 10.489585876464844], + [7.833470344543457, -3.2179019451141357], + [-4.738734722137451, -2.409240245819092], + [1.429896354675293, -3.9505600929260254], + [-3.8320047855377197, -1.3108469247817993], + [-4.185271263122559, -2.819875717163086], + [0.3211706876754761, -5.923667907714844], + [-4.292806148529053, 5.545029640197754], + [-1.9424570798873901, 1.9173623323440552], + [-0.03584180027246475, -4.053854942321777], + [-1.0936033725738525, 11.130863189697266], + [-0.5971798896789551, 9.07166862487793], + [2.6619417667388916, -4.1187639236450195], + [2.5176334381103516, 6.150321006774902], + [-4.422013282775879, -1.2429569959640503], + [-3.5180728435516357, -3.3521616458892822], + [1.0995604991912842, -3.3932602405548096], + [2.1083593368530273, -5.78007698059082], + [7.592946529388428, -2.2497293949127197], + [2.861840009689331, -4.482712745666504], + [6.76696252822876, -2.244276285171509], + [0.6686346530914307, -7.509770393371582], + [-3.5871846675872803, -1.6247249841690063], + [-4.241259574890137, -3.094944715499878], + [2.4410898685455322, -4.025090217590332], + [-0.6175280809402466, -1.772079348564148], + [-6.074098110198975, 3.614719867706299], + [0.7808106541633606, 5.036568641662598], + [-0.44345980882644653, 9.362058639526367], + [0.5934053063392639, -7.5258636474609375], + [-3.2881648540496826, -1.3398257493972778], + [-1.7270926237106323, -1.9697438478469849], + [7.214016914367676, -1.9246090650558472], + [-0.1998227834701538, -1.2378240823745728], + [7.736866474151611, -2.1626317501068115], + [-4.037778377532959, 1.5953582525253296], + [2.3002848625183105, 6.220920085906982], + [-0.7177251577377319, 10.028552055358887], + [0.7580650448799133, -0.5319669842720032], + [-3.3231563568115234, -1.413313865661621], + [-5.304141998291016, 6.837793827056885], + [2.782773733139038, -4.224452018737793], + [-3.5627481937408447, -0.8036147952079773], + [-3.8356409072875977, -2.1692159175872803], + [0.5529763698577881, -7.2490081787109375], + [-1.9470559358596802, 2.1245903968811035], + [0.3395698070526123, -5.7028303146362305], + [2.5922441482543945, -4.282200813293457], + [-0.7349370718002319, -1.4653390645980835], + [0.327056884765625, 5.469944477081299], + [1.3699378967285156, 5.07742977142334], + [-1.1904937028884888, 1.7168673276901245], + [8.386274337768555, -2.4906387329101562], + [1.8803505897521973, 5.678534507751465], + [-0.5961193442344666, 9.571791648864746], + [3.066854238510132, -6.980657577514648], + [-1.323179841041565, 11.278297424316406], + [-0.6121554970741272, -0.6235083341598511], + [1.6041535139083862, 1.8919436931610107], + [0.9512974619865417, 2.83672833442688], + [2.6436564922332764, -6.154077529907227], + [2.789257526397705, -4.750296592712402], + [7.924423694610596, -3.849270820617676], + [-1.9909714460372925, 1.9737647771835327], + [-1.2714036703109741, 1.7394174337387085], + [1.724860668182373, -5.299028396606445], + [1.4037905931472778, 1.813412070274353], + [7.571603298187256, -2.335770845413208], + [0.2070070505142212, -4.4936981201171875], + [1.909827709197998, -4.831240653991699], + [5.506665229797363, 8.507467269897461], + [6.1687912940979, -2.7201225757598877], + [-0.05079314857721329, -3.467817544937134], + [2.3846516609191895, 5.112722396850586], + [2.611388921737671, -4.601183891296387], + [3.605445146560669, -5.326709747314453], + [-0.8556690812110901, 10.635297775268555], + [6.4033732414245605, -2.580735206604004], + [3.4254329204559326, 6.949428558349609], + [-3.8230068683624268, -1.3663150072097778], + [-0.9981946349143982, 2.7489099502563477], + [-5.612980365753174, 8.058578491210938], + [6.435669422149658, -3.238701581954956], + [1.4687325954437256, 4.532287120819092], + [-4.085596561431885, 5.3189263343811035], + [0.6415398716926575, -8.522919654846191], + [-2.992399215698242, 1.7783750295639038], + [-3.195281744003296, 5.721400260925293], + [7.1564860343933105, -2.1866891384124756], + [-1.093794345855713, 10.29983139038086], + [-1.4780937433242798, 12.161346435546875], + [-4.088829040527344, -0.7105765342712402], + [-5.579010009765625, 5.82202672958374], + [-1.220538854598999, 11.454498291015625], + [0.8512548804283142, -5.5489182472229], + [-1.0604175329208374, 11.679542541503906], + [-3.094747304916382, -0.5659465193748474], + [-3.82725191116333, -0.5367010831832886], + [-1.3217542171478271, 11.739572525024414], + [2.6592555046081543, -4.881693363189697], + [3.939959764480591, 7.020247459411621], + [-3.035285234451294, -1.791251540184021], + [-1.5309749841690063, 12.628377914428711], + [2.7249646186828613, -4.766501426696777], + [-0.6928225755691528, 9.842618942260742], + [1.3976333141326904, 0.005952950567007065], + [0.5122524499893188, -8.02441120147705], + [-1.3313367366790771, -0.8236619234085083], + [1.8189239501953125, -6.740478992462158], + [-2.519242286682129, -1.527570128440857], + [1.291199803352356, -5.346966743469238], + [0.8711459040641785, -8.686429977416992], + [-3.9539263248443604, 2.139998197555542], + [-1.865645170211792, 0.8421180844306946], + [-2.8996801376342773, -1.6676925420761108], + [0.4733201265335083, -5.902050018310547], + [-2.029376983642578, 1.462849497795105], + [-1.4734870195388794, -0.8169313669204712], + [6.301851749420166, -3.34197735786438], + [1.322866439819336, -0.1376020312309265], + [-4.018804550170898, -2.7773756980895996], + [2.846857786178589, -4.7508134841918945], + [0.6362226009368896, -7.265254974365234], + [-2.1553518772125244, 6.204204082489014], + [-0.5775887370109558, 8.49355697631836], + [1.9065566062927246, 2.8346035480499268], + [-4.8878254890441895, -0.024871770292520523], + [-1.5564320087432861, -3.1316354274749756], + [-1.4735132455825806, 2.310987710952759], + [1.0989015102386475, -6.242773056030273], + [-3.5440454483032227, -0.7103486061096191], + [-1.1702375411987305, 10.594292640686035], + [-2.041534185409546, 2.0001370906829834], + [1.092524528503418, 5.496070861816406], + [2.4413537979125977, -3.902127504348755], + [-1.0485947132110596, 10.825800895690918], + [-3.024157762527466, -0.575166642665863], + [-2.9790127277374268, -1.350888729095459], + [0.9007336497306824, -5.51276969909668], + [-1.8552052974700928, 1.6690757274627686], + [6.191798210144043, -3.617424249649048], + [-2.058896780014038, 0.6890233159065247], + [2.5250308513641357, -4.299714088439941], + [-3.8703694343566895, -2.6035757064819336], + [-3.176884651184082, 5.071203708648682], + [4.05241060256958, 7.017902851104736], + [1.5165610313415527, -4.994023323059082], + [-3.8988561630249023, -1.499402642250061], + [7.726327896118164, -2.2727138996124268], + [0.5257733464241028, -8.115370750427246], + [6.831226348876953, -3.0543246269226074], + [-2.6191091537475586, 6.019406795501709], + [1.9778053760528564, 5.219282150268555], + [-1.1434814929962158, 10.532754898071289], + [-0.17229542136192322, -0.8297510743141174], + [-1.372358798980713, 11.644750595092773], + [-4.775463581085205, 6.613934516906738], + [1.8553085327148438, 4.666377067565918], + [-0.13662129640579224, 7.937451362609863], + [-5.000415802001953, 6.403530120849609], + [-3.4619059562683105, 5.472631931304932], + [0.46506720781326294, -7.4910569190979], + [0.4924665689468384, -5.46158504486084], + [-0.06320161372423172, -3.07802414894104], + [-1.9064918756484985, -0.6179581880569458], + [0.9157665967941284, -0.11255118250846863], + [-4.96426248550415, -4.336470127105713], + [1.3189996480941772, 0.2500682473182678], + [-1.3976603746414185, 11.717702865600586], + [0.37564998865127563, -6.724599361419678], + [0.48017919063568115, -1.2640045881271362], + [6.082634449005127, -2.0480997562408447], + [1.8822667598724365, 1.6056994199752808], + [-1.680261254310608, 1.1253037452697754], + [-4.152156829833984, -1.5061570405960083], + [0.3757956624031067, -6.693670749664307], + [-2.9129865169525146, -0.4878389835357666], + [-3.871742010116577, -2.02089262008667], + [2.8321139812469482, -4.369431495666504], + [0.4692736864089966, -6.487382888793945], + [2.7925639152526855, -4.552068710327148], + [1.055225133895874, 5.617786884307861], + [-4.072580814361572, -2.5094332695007324], + [-0.2888399362564087, 9.150907516479492], + [2.7869322299957275, -4.542820930480957], + [5.537068843841553, -4.098515033721924], + [-3.687786817550659, -1.615745186805725], + [-0.056234098970890045, -4.38694953918457], + [-4.452469348907471, -1.889588713645935], + [0.6970974206924438, -6.929990291595459], + [-5.025020599365234, 6.012711524963379], + [2.0988523960113525, -4.981722831726074], + [-0.7766926884651184, 10.587484359741211], + [8.107398986816406, -2.76436185836792], + [-3.8129098415374756, -0.7324427962303162], + [-4.644744873046875, -0.25402116775512695], + [-1.6183178424835205, -0.6747045516967773], + [5.505888938903809, -2.1660611629486084], + [2.15518856048584, 6.33227014541626], + [1.4603757858276367, 4.877772808074951], + [2.340667486190796, 4.608452796936035], + [-3.643606662750244, 5.122788429260254], + [-3.966707944869995, -1.8512694835662842], + [2.60151743888855, 4.517046928405762], + [4.237385272979736, 7.416479587554932], + [3.2459781169891357, 6.384374618530273], + [2.7085201740264893, -4.24564790725708], + [-4.852975845336914, 4.498277187347412], + [-5.029872417449951, 4.76356840133667], + [-1.2354497909545898, -1.029628038406372], + [-3.55531907081604, 4.210611343383789], + [-3.6495769023895264, -1.482190728187561], + [3.590679168701172, -3.5761396884918213], + [-1.9883389472961426, 1.9263849258422852], + [0.4471092224121094, -7.422309398651123], + [-3.9575865268707275, -2.6263930797576904], + [6.733143329620361, -2.67141056060791], + [-5.156922817230225, -2.006146192550659], + [2.3331387042999268, 0.5164986848831177], + [6.631612300872803, -2.9010345935821533], + [-3.630417823791504, -1.0218982696533203], + [-5.404794692993164, 6.799063682556152], + [0.6634384393692017, -6.732506275177002], + [3.059952974319458, -4.8250579833984375], + [2.2591617107391357, -4.849900245666504], + [2.2286202907562256, -4.013510227203369], + [-5.620734691619873, 7.562819004058838], + [-0.2843934893608093, 9.079855918884277], + [-1.9424057006835938, 0.512353777885437], + [-3.6006619930267334, -2.5306241512298584], + [-3.8491201400756836, -1.8078850507736206], + [0.5743273496627808, -5.56374979019165], + [-4.3837361335754395, 6.637214183807373], + [-4.064784049987793, -2.64717698097229], + [1.7677011489868164, 2.175671100616455], + [-3.584078073501587, -1.0486958026885986], + [1.1384860277175903, 0.6733547449111938], + [-1.6520049571990967, 1.4087097644805908], + [-0.11058313399553299, 8.91362190246582], + [8.632786750793457, -2.5526719093322754], + [-3.5603086948394775, -2.4537391662597656], + [-1.1075724363327026, 10.962823867797852], + [-5.413802623748779, -0.8779016733169556], + [-1.5531370639801025, 1.7708574533462524], + [0.6442223191261292, -7.055427074432373], + [-0.21970921754837036, 8.250314712524414], + [5.641448974609375, 8.523314476013184], + [5.0420427322387695, 7.825414657592773], + [1.797243356704712, -4.749997138977051], + [-3.703723192214966, -1.2237672805786133], + [0.31467944383621216, -5.501960754394531], + [1.3471758365631104, 5.561855792999268], + [-3.638106107711792, -2.543949842453003], + [0.628949761390686, -7.715877532958984], + [0.2768806219100952, -6.0841593742370605], + [0.4586349129676819, -0.08992846310138702], + [-2.8346469402313232, -0.8683685064315796], + [-0.7057990431785583, -1.2923113107681274], + [7.7777180671691895, -2.4568428993225098], + [0.7475559711456299, -4.819688320159912], + [-1.4658207893371582, -0.4002453684806824], + [-3.661757707595825, -1.2460548877716064], + [-0.22942405939102173, 8.217159271240234], + [2.8129379749298096, -4.45989465713501], + [-2.8357934951782227, -1.3515276908874512], + [-4.050277233123779, -2.8554153442382812], + [-0.4271642565727234, 9.190324783325195], + [-5.048893451690674, 7.107309818267822], + [-1.7020875215530396, 0.1751435399055481], + [0.6520276665687561, -7.6071953773498535], + [-4.006750583648682, -2.809725761413574], + [6.1490044593811035, -4.330695152282715], + [-0.343747079372406, -1.4390578269958496], + [2.634242296218872, -4.609630107879639], + [-2.138880729675293, 3.9302327632904053], + [-0.6526072025299072, 10.065850257873535], + [1.1992862224578857, 0.025552328675985336], + [2.929330825805664, -4.80762243270874], + [2.99458384513855, -4.722202777862549], + [-0.7181559205055237, 10.364461898803711], + [-4.2153801918029785, -2.7611896991729736], + [6.840177059173584, -5.031861305236816], + [-3.7036309242248535, -1.0388166904449463], + [0.5084582567214966, -5.404488563537598], + [-4.202252388000488, -2.4869773387908936], + [5.7418437004089355, -1.3092163801193237], + [2.663273572921753, -4.3115315437316895], + [-4.776203632354736, -0.6342039704322815], + [1.9896996021270752, 5.759255409240723], + [8.385584831237793, -2.437352180480957], + [2.7622745037078857, -4.302943229675293], + [1.6844311952590942, 5.213080406188965], + [-4.5130438804626465, -2.9267845153808594], + [2.475968599319458, 0.5331863164901733], + [2.307034492492676, 6.232202529907227], + [1.5420180559158325, 1.7225319147109985], + [1.533118486404419, -5.435616970062256], + [-3.657015562057495, -2.5907397270202637], + [6.183209419250488, -2.535984754562378], + [2.0818698406219482, 0.5948179960250854], + [3.928395986557007, -1.8357374668121338], + [-1.5562084913253784, 1.6715201139450073], + [0.6497370600700378, -8.167013168334961], + [-5.311055660247803, -1.2148059606552124], + [-0.7190563678741455, -0.6727847456932068], + [-2.009655237197876, 2.4479868412017822], + [-4.059798717498779, -2.755687952041626], + [-2.0018553733825684, 2.5811049938201904], + [9.578550338745117, -2.9037024974823], + [-1.170298457145691, 11.637792587280273], + [-2.413491725921631, -2.8883090019226074], + [-0.13694220781326294, -2.717817544937134], + [0.1367211937904358, 0.17869608104228973], + [2.5159947872161865, -4.132917404174805], + [7.518850803375244, -2.681802749633789], + [0.7276390194892883, -8.269161224365234], + [-2.726881742477417, 5.532224655151367], + [-3.431553602218628, -1.270226240158081], + [6.822118282318115, -3.435382843017578], + [-2.701726198196411, -0.23448491096496582], + [2.2774014472961426, 4.935564994812012], + [-1.0349395275115967, -2.2532923221588135], + [-1.3569989204406738, 11.75905704498291], + [-6.289768695831299, 8.483257293701172], + [-3.2180862426757812, 5.21102237701416], + [-0.6274685263633728, 10.187021255493164], + [3.4564716815948486, -4.157722473144531], + [-0.7434256076812744, 0.9622893333435059], + [-4.25809383392334, 6.128712177276611], + [-2.9334988594055176, 3.123291492462158], + [-4.10210657119751, -3.4620912075042725], + [0.3471311330795288, -1.1226881742477417], + [0.42014825344085693, -5.07758903503418], + [-3.8633599281311035, -2.461992025375366], + [1.679133415222168, 1.8975008726119995], + [-1.0185796022415161, -2.2114994525909424], + [1.7854782342910767, -4.1251726150512695], + [0.7634554505348206, -9.03788948059082], + [2.8841278553009033, -5.020716667175293], + [0.00033407658338546753, -3.8828468322753906], + [-1.781801462173462, 0.578439474105835], + [-1.3817970752716064, 12.230232238769531], + [7.2692060470581055, -3.110802412033081], + [1.855364441871643, 6.184615612030029], + [5.774938106536865, -2.8160436153411865], + [-1.7785035371780396, 0.800106406211853], + [9.164944648742676, -2.7183611392974854], + [-5.190046787261963, 6.892605781555176], + [6.36704158782959, -1.1517508029937744], + [-0.6820634007453918, -2.6618382930755615], + [0.6684256196022034, -0.6715224385261536], + [4.347533702850342, 7.114074230194092], + [1.5077331066131592, -4.264756202697754], + [7.818213939666748, -2.372229814529419], + [1.908827781677246, 2.8734548091888428], + [-0.9186570048332214, 10.666961669921875], + [1.724552869796753, 2.066107749938965], + [-5.180859565734863, 6.916982173919678], + [-3.4660134315490723, -1.467838168144226], + [2.2375569343566895, 5.224822998046875], + [2.8291406631469727, -4.517733573913574], + [0.5396959781646729, -7.773814678192139], + [-1.9895977973937988, 1.4671297073364258], + [-0.8803859353065491, 11.118898391723633], + [-4.036938667297363, -0.4095984101295471], + [-2.118832588195801, -0.5899413824081421], + [-0.5167225003242493, -2.2335541248321533], + [-3.7277543544769287, -1.0463193655014038], + [1.1758699417114258, -5.639436721801758], + [-0.013569779694080353, -5.0678205490112305], + [-3.3193137645721436, -0.019310954958200455], + [0.6077929139137268, -7.070919990539551], + [-0.6881697177886963, 9.626544952392578], + [1.0433175563812256, 4.64992094039917], + [6.352319240570068, -2.6708314418792725], + [2.829389810562134, -5.005547523498535], + [6.930361270904541, -3.761115312576294], + [7.026971340179443, -2.1856420040130615], + [2.111774444580078, 5.947579383850098], + [-4.470597267150879, 5.744304656982422], + [0.8837518095970154, -5.803812026977539], + [-3.956393003463745, -1.1195930242538452], + [-0.9827366471290588, 10.817487716674805], + [-1.4970357418060303, 11.817106246948242], + [-0.49918800592422485, 10.299530029296875], + [-3.6509687900543213, -1.9725674390792847], + [-3.256533145904541, 4.069056034088135], + [4.388123989105225, 7.310944080352783], + [0.8764747381210327, -7.088947296142578], + [2.3318746089935303, -3.984584331512451], + [-4.409323215484619, -3.182180166244507], + [-1.509737253189087, 11.5732421875], + [-2.4992666244506836, 2.5300958156585693], + [0.4610159993171692, -6.563570022583008], + [-1.3351083993911743, 11.222522735595703], + [8.664459228515625, -2.564653158187866], + [0.4005400538444519, -6.963875770568848], + [1.253947377204895, -7.917948246002197], + [-2.512514591217041, 1.5849157571792603], + [-2.523599863052368, 4.6196370124816895], + [-2.504384756088257, -0.7627543807029724], + [-4.719499111175537, 6.797798156738281], + [-4.111453533172607, -3.0937349796295166], + [8.771062850952148, -2.7942535877227783], + [-3.2186596393585205, 3.5973548889160156], + [-5.466248989105225, 7.299712181091309], + [-3.3512117862701416, -0.659441351890564], + [-1.9555721282958984, 0.47790825366973877], + [-3.1894724369049072, 5.5116119384765625], + [-0.9659152626991272, 10.838014602661133], + [-3.111161947250366, -0.7267187833786011], + [-5.3460893630981445, 5.924609184265137], + [-1.4155536890029907, 12.480588912963867], + [3.0090878009796143, 6.6353888511657715], + [-4.4407854080200195, -0.7773715853691101], + [-5.267269134521484, 6.61134147644043], + [0.33326926827430725, -5.373095512390137], + [-1.135251760482788, 11.39617919921875], + [-3.627310037612915, 4.276089668273926], + [-2.6167163848876953, 2.783512592315674], + [-3.8347840309143066, -0.4940623641014099], + [0.3447764813899994, -4.200249671936035], + [0.7234554886817932, -8.79300308227539], + [-1.5383082628250122, 1.8416333198547363], + [0.7235155701637268, -5.669266700744629], + [-3.9662187099456787, -1.8443022966384888], + [-0.7637856602668762, -2.4759292602539062], + [1.7569234371185303, 2.3117892742156982], + [1.0612199306488037, -5.2961320877075195], + [0.7813220620155334, -7.599858283996582], + [0.5724229216575623, -7.300562858581543], + [-3.6498892307281494, -1.158065915107727], + [-1.8848596811294556, 2.3320343494415283], + [-0.7716408371925354, 0.4730503559112549], + [1.3008171319961548, 2.8779969215393066], + [1.8766478300094604, 3.4908032417297363], + [-4.0634050369262695, -2.6690561771392822], + [-1.8959094285964966, 2.002790689468384], + [1.7837934494018555, 0.3557940721511841], + [-4.3270182609558105, -1.109705924987793], + [-3.27699875831604, -1.3271418809890747], + [0.1930384337902069, -4.7310404777526855], + [7.1796369552612305, -3.4115517139434814], + [0.532477617263794, -6.864688873291016], + [-0.3211442828178406, 8.162983894348145], + [0.486352801322937, -0.2976023256778717], + [2.037546157836914, 4.162282943725586], + [-2.1136398315429688, -0.9737861156463623], + [7.717586517333984, -3.9543633460998535], + [-1.9594285488128662, -0.9906906485557556], + [-3.995424509048462, -2.512112855911255], + [-0.7469853758811951, 10.48809814453125], + [-4.651485919952393, -2.897129774093628], + [-3.845038890838623, 6.215419769287109], + [0.9653196930885315, -5.33829402923584], + [2.029104709625244, -5.632345199584961], + [0.856699526309967, -6.466292381286621], + [-0.6936488151550293, 10.551713943481445], + [8.050667762756348, -3.013329267501831], + [7.163767337799072, -1.9963079690933228], + [3.3799569606781006, 6.518752098083496], + [2.6466736793518066, 6.343510627746582], + [1.738691806793213, 0.3421143889427185], + [-0.35648059844970703, -2.8126182556152344], + [-0.7916591763496399, -1.1971875429153442], + [0.966069757938385, -7.539638519287109], + [0.07848434895277023, -5.419410705566406], + [-0.26530855894088745, 8.654561996459961], + [2.919140577316284, -4.992232799530029], + [3.2775259017944336, -6.710457801818848], + [0.2682340741157532, -4.793910026550293], + [-4.5146331787109375, 6.663793563842773], + [-4.042312145233154, -0.736786961555481], + [-5.4906005859375, 3.733365297317505], + [-1.1886100769042969, 11.260102272033691], + [1.6230480670928955, 4.2431182861328125], + [-4.007009506225586, 6.2719621658325195], + [-0.4737858772277832, -1.6410448551177979], + [0.5871113538742065, -7.934289455413818], + [3.8527588844299316, 7.253413200378418], + [1.7649494409561157, -4.883143424987793], + [-5.402380466461182, 5.732646942138672], + [-1.5672188997268677, 1.4511146545410156], + [-4.575113773345947, 6.297058582305908], + [-3.736901044845581, -1.1946042776107788], + [2.4773004055023193, 5.904860019683838], + [-3.4604294300079346, 0.21380025148391724], + [7.845522880554199, -2.377405881881714], + [7.502366065979004, -3.2488179206848145], + [-0.16399317979812622, -2.2033283710479736], + [-5.781589984893799, -1.031108021736145], + [0.5767118334770203, -0.5776513814926147], + [-5.111539363861084, -1.238273024559021], + [-1.163500189781189, 1.1781355142593384], + [-1.3220058679580688, 11.704423904418945], + [-4.657484531402588, -1.7229820489883423], + [-0.7061684727668762, -1.5582531690597534], + [-1.408639907836914, 1.4105455875396729], + [-3.5485048294067383, -2.781653642654419], + [-1.4761056900024414, 1.8436384201049805], + [-0.8902378678321838, -1.2579706907272339], + [0.520131528377533, -7.58032751083374], + [7.758981227874756, -3.1344354152679443], + [7.874485492706299, -3.1393704414367676], + [-3.7904374599456787, 3.8000571727752686], + [-3.6900768280029297, -1.027591347694397], + [8.940940856933594, -2.7132179737091064], + [-5.300652980804443, 3.9537060260772705], + [-0.652633011341095, -0.44038599729537964], + [9.354886054992676, -2.8114492893218994], + [6.581346035003662, -3.305417776107788], + [2.4642772674560547, -5.3328375816345215], + [-3.1067731380462646, 5.606328010559082], + [-3.4814698696136475, 0.3536044955253601], + [-3.261612892150879, 5.891777038574219], + [-0.5221544504165649, -1.375990629196167], + [-2.768972158432007, -1.4448386430740356], + [-4.18439245223999, -2.6218526363372803], + [7.458084583282471, -2.6713979244232178], + [0.8641664385795593, -7.258387565612793], + [-1.9765366315841675, 1.7341142892837524], + [3.1446468830108643, -5.232824802398682], + [0.3242034912109375, -5.310262203216553], + [10.086736679077148, -3.011570692062378], + [-0.14159327745437622, 7.696691513061523], + [2.108581304550171, -5.191466808319092], + [-3.8047258853912354, -1.2348941564559937], + [2.709446668624878, -4.491388320922852], + [-3.385779619216919, 5.461291790008545], + [-3.705920934677124, -0.9404513835906982], + [1.6713894605636597, 5.724881172180176], + [8.500507354736328, -2.912173271179199], + [-2.2815756797790527, 2.016026735305786], + [-1.4513609409332275, 12.10860824584961], + [-0.4345511794090271, 9.728395462036133], + [-2.0560131072998047, -0.357155442237854], + [-0.5717039108276367, 9.357078552246094], + [-1.2293981313705444, 0.3814939856529236], + [0.41318780183792114, -0.5892186760902405], + [0.4170008599758148, -4.957130432128906], + [0.4460987448692322, -7.371993541717529], + [-3.3586044311523438, 5.060699462890625], + [-0.6177230477333069, -1.0420832633972168], + [-3.469228982925415, 0.4370439052581787], + [0.2051284909248352, -0.33145737648010254], + [0.4348825216293335, -7.270824909210205], + [-0.48445719480514526, 9.504505157470703], + [-1.9912101030349731, 2.306199073791504], + [-0.7498829960823059, 10.060468673706055], + [-0.7339061498641968, 10.136999130249023], + [0.6542421579360962, 3.7847845554351807], + [-5.188853740692139, 7.4325151443481445], + [0.31610411405563354, -5.101755142211914], + [7.12028169631958, -2.237464666366577], + [8.752211570739746, -2.7191598415374756], + [0.8574420213699341, -7.3490681648254395], + [3.595477342605591, 6.801860809326172], + [0.5492824912071228, 6.617122173309326], + [2.8243415355682373, -4.819084167480469], + [-5.511115550994873, -1.8254822492599487], + [2.46838116645813, -4.920844078063965], + [6.952417373657227, -1.711066484451294], + [-3.669628858566284, -1.258212924003601], + [-5.302530765533447, 3.748544692993164], + [-3.8859188556671143, -2.0504651069641113], + [2.1176528930664062, 2.98323655128479], + [2.8791396617889404, 4.455133438110352], + [4.516204357147217, 7.6265177726745605], + [-4.01801061630249, 5.676131248474121], + [-0.4323729872703552, 9.062824249267578], + [-2.035952568054199, 2.606396436691284], + [-1.272702693939209, 11.302799224853516], + [-2.8373570442199707, -1.7428416013717651], + [-1.2939209938049316, 1.3116382360458374], + [-0.4084264039993286, 8.987691879272461], + [-0.4990925192832947, 9.856764793395996], + [-3.747699499130249, -2.838507890701294], + [3.074084520339966, -4.756428241729736], + [7.457253932952881, -2.946927309036255], + [-4.692972183227539, -0.8485881090164185], + [0.37271612882614136, -6.384367942810059], + [-3.6401541233062744, -0.8978351950645447], + [4.251469135284424, -1.103148102760315], + [8.931963920593262, -2.670032262802124], + [3.2090296745300293, 6.2811737060546875], + [1.1387112140655518, -5.971841812133789], + [1.0035431385040283, -4.7618255615234375], + [-5.186528205871582, 7.404318332672119], + [-4.4245781898498535, -1.6319873332977295], + [-3.7441232204437256, -2.697021722793579], + [-1.3431209325790405, 11.596931457519531], + [2.1348636150360107, 5.0107927322387695], + [3.7919883728027344, 6.452388763427734], + [-0.5880635976791382, 9.5619478225708], + [-1.1017463207244873, 10.401607513427734], + [-0.6692923903465271, 8.967435836791992], + [7.4954047203063965, -2.602773666381836], + [-3.7469282150268555, 5.654080390930176], + [1.0255672931671143, -0.23956739902496338], + [1.9597668647766113, 2.711993455886841], + [2.2699811458587646, -4.2451090812683105], + [4.006496429443359, 6.884171485900879], + [-3.760054111480713, -2.0339057445526123], + [-1.8509836196899414, -0.32191002368927], + [0.49886655807495117, -7.226116180419922], + [-4.179794788360596, -0.6006844639778137], + [1.5656927824020386, -3.609945297241211], + [-4.139899730682373, -1.3811895847320557], + [1.3164887428283691, 4.185001850128174], + [2.7373170852661133, -4.78595495223999], + [-4.612295627593994, -3.1877191066741943], + [4.720510482788086, 7.763184547424316], + [0.8731136918067932, -5.299507141113281], + [-2.0185718536376953, 2.1321632862091064], + [-0.1888774037361145, 8.307321548461914], + [-3.664815664291382, -0.5923999547958374], + [2.058478593826294, 5.75013542175293], + [-4.194778919219971, -1.555417776107788], + [-0.12825500965118408, 3.074662446975708], + [0.2036544680595398, -6.215578079223633], + [0.15690359473228455, -4.610116958618164], + [2.6084842681884766, -4.235884666442871], + [-2.358774423599243, 0.5252560973167419], + [-4.883511066436768, 2.5098698139190674], + [-0.7125938534736633, 10.136150360107422], + [-5.408788681030273, 7.3894147872924805], + [-1.9525851011276245, 2.2659168243408203], + [0.07830684632062912, -4.521986961364746], + [0.4816550612449646, -7.40511417388916], + [0.8570147156715393, 7.338860511779785], + [-0.7554561495780945, 10.599479675292969], + [0.6776377558708191, -7.511949062347412], + [-3.1366255283355713, -2.983011484146118], + [0.541259229183197, -4.793806076049805], + [-1.2665592432022095, 11.123405456542969], + [0.6362502574920654, -7.725912570953369], + [0.796818196773529, 5.042804718017578], + [-4.6476006507873535, 6.912148952484131], + [1.2660727500915527, 5.9365105628967285], + [-4.164689540863037, -1.8833049535751343], + [-1.6557852029800415, 1.4797104597091675], + [-4.169372081756592, -0.9861907362937927], + [1.4634857177734375, 0.9665929079055786], + [-3.537688970565796, -2.179995536804199], + [-4.43799352645874, -3.00860333442688], + [-3.8669440746307373, -3.1645901203155518], + [-0.21211481094360352, -2.52783203125], + [-3.68473219871521, 4.808402061462402], + [2.442260980606079, -4.209105014801025], + [-4.396542549133301, -0.9692320823669434], + [-4.343307971954346, 7.001044273376465], + [6.013827800750732, -3.7453954219818115], + [0.34574633836746216, -7.393805980682373], + [2.0401363372802734, 0.53977370262146], + [5.327971935272217, 8.19798469543457], + [1.4583607912063599, 0.6148084402084351], + [0.45272988080978394, -5.63146448135376], + [-0.9498385787010193, 10.625587463378906], + [0.48490816354751587, 5.154878616333008], + [1.3489571809768677, 4.051153659820557], + [0.48513078689575195, -6.409730434417725], + [2.555992841720581, 0.704974889755249], + [2.234661817550659, -4.336089134216309], + [-4.8699140548706055, 6.682366371154785], + [-2.8213558197021484, -1.635337471961975], + [3.737215518951416, 6.57843017578125], + [4.394293308258057, -4.124686241149902], + [-4.265152454376221, -1.3833199739456177], + [-2.155402898788452, 2.2749950885772705], + [2.814934492111206, -4.901759624481201], + [-4.964921951293945, 4.270968437194824], + [-5.178844928741455, 4.733676433563232], + [-3.6016204357147217, -1.628902554512024], + [-0.5624560713768005, 9.236461639404297], + [-3.4791829586029053, -0.6537907123565674], + [-3.754884958267212, 3.5439398288726807], + [-0.4519639015197754, 2.667052984237671], + [-3.6584227085113525, -1.103767991065979], + [2.3666346073150635, 6.301876068115234], + [-5.8436598777771, 4.919255256652832], + [0.8337047100067139, -0.5123207569122314], + [0.39306139945983887, -6.671759605407715], + [2.9002280235290527, -4.592021465301514], + [0.16547968983650208, -5.157417297363281], + [-3.339503526687622, -1.580633282661438], + [0.5832151174545288, -7.784296035766602], + [-3.696871042251587, 5.830766677856445], + [-2.0433225631713867, 2.1221773624420166], + [5.713836669921875, -2.017218589782715], + [-1.689538836479187, 2.578246831893921], + [-3.2852885723114014, 5.463217735290527], + [-1.250439167022705, 11.175664901733398], + [-2.0998735427856445, 1.8638781309127808], + [-5.906331539154053, 7.71888542175293], + [-3.298252582550049, 5.120311260223389], + [-0.05271000415086746, 8.758186340332031], + [-0.22737032175064087, 8.927591323852539], + [-0.4710465669631958, 10.613452911376953], + [1.091346025466919, 6.633502960205078], + [-0.12539803981781006, 8.901156425476074], + [-0.11952207237482071, -0.7852230072021484], + [-0.5890426635742188, -0.8629431128501892], + [0.7073562145233154, -8.79061508178711], + [-3.142252206802368, -2.6871402263641357], + [0.6328821182250977, -4.9422783851623535], + [-1.1210440397262573, -1.1538785696029663], + [-3.826735496520996, 6.16618013381958], + [-2.015964984893799, 0.010916408151388168], + [-2.61387038230896, -0.8210281729698181], + [-1.2437872886657715, 1.4548486471176147], + [-5.099061012268066, -1.1116654872894287], + [2.909860610961914, -4.540382385253906], + [-3.114290714263916, 1.914245367050171], + [-2.818927764892578, -0.07364851236343384], + [-3.0419657230377197, -0.8843088150024414], + [2.2119998931884766, 5.936155319213867], + [3.91206955909729, -2.856044292449951], + [1.8742318153381348, -4.4433207511901855], + [-0.5098687410354614, -2.9570205211639404], + [0.6432045102119446, -7.839081764221191], + [-3.9155406951904297, -2.5448873043060303], + [-0.8628028035163879, -0.4443589150905609], + [0.5829298496246338, -4.2535014152526855], + [0.30253762006759644, -4.725351333618164], + [-1.2774227857589722, 11.084508895874023], + [0.47558075189590454, -7.19942045211792], + [-3.3503715991973877, 5.418534278869629], + [-5.1681389808654785, 6.345623970031738], + [-5.117781162261963, -1.2840439081192017], + [8.810853958129883, -2.537066698074341], + [-4.064688682556152, 5.766847610473633], + [-5.6703925132751465, -0.6418878436088562], + [-0.7503077387809753, 10.781681060791016], + [-2.0326249599456787, 1.439686894416809], + [-1.9058728218078613, 4.341953277587891], + [6.420051574707031, -2.8663077354431152], + [-0.7099180221557617, 9.397918701171875], + [6.510326862335205, -1.7845135927200317], + [3.6640419960021973, 6.7100725173950195], + [-3.4451591968536377, -1.0321704149246216], + [-5.723552227020264, 7.800067901611328], + [1.0474083423614502, -6.908805847167969], + [-4.535007953643799, -0.6985421776771545], + [6.281153678894043, -1.6103297472000122], + [-5.859219074249268, 7.278457164764404], + [-1.78145432472229, 1.8573622703552246], + [1.2492222785949707, 0.09056711196899414], + [0.9575743079185486, 0.4746488928794861], + [0.13534849882125854, -1.2283130884170532], + [1.0513345003128052, -0.17478448152542114], + [-5.558365821838379, 2.391418695449829], + [0.21673732995986938, -5.310256481170654], + [-5.077209949493408, 6.561946868896484], + [-3.7256524562835693, -1.4400925636291504], + [0.16869968175888062, -4.925749778747559], + [6.969216823577881, -3.5275449752807617], + [-1.6812870502471924, 1.9043993949890137], + [-1.7910864353179932, 1.6640808582305908], + [1.564943790435791, 5.146233081817627], + [-5.696158409118652, 4.805535316467285], + [-0.5350361466407776, 10.035537719726562], + [-4.999460697174072, 6.676695823669434], + [-1.304639458656311, 9.618380546569824], + [-4.0625081062316895, 5.939632415771484], + [-2.078892230987549, 1.8889316320419312], + [4.873754024505615, 7.924361705780029], + [0.15187716484069824, -5.927959442138672], + [-1.996764898300171, -4.446513652801514], + [6.874892711639404, -2.250453233718872], + [0.685651421546936, -8.492237091064453], + [1.3383731842041016, 0.3853916823863983], + [1.9574403762817383, 6.078789234161377], + [0.058043770492076874, -4.629509925842285], + [6.870092868804932, -1.981811285018921], + [5.017890453338623, 8.015823364257812], + [-4.28244686126709, -0.9038156270980835], + [-4.371296405792236, -2.9752845764160156], + [-1.3170247077941895, 11.372241973876953], + [1.3170936107635498, 2.2473208904266357], + [-1.1501424312591553, 10.846298217773438], + [2.424818277359009, 5.935708999633789], + [7.434178352355957, -2.2185208797454834], + [-1.0338693857192993, 10.631864547729492], + [-4.3399434089660645, -0.7010538578033447], + [1.9647459983825684, 2.7959952354431152], + [-0.7781901955604553, 10.643407821655273], + [-1.1006497144699097, 10.583101272583008], + [1.0940698385238647, -6.144867897033691], + [0.051556460559368134, 5.079936981201172], + [2.6643993854522705, -4.5182294845581055], + [-2.7659523487091064, -2.5134737491607666], + [8.006081581115723, -3.470670461654663], + [-3.9317314624786377, -1.8181917667388916], + [6.79718017578125, -1.9461519718170166], + [-1.451885461807251, 1.4627861976623535], + [-0.4755634069442749, 8.882407188415527], + [7.210159778594971, -4.255439758300781], + [-2.1214945316314697, 5.126564025878906], + [-4.183056831359863, 7.693576812744141], + [1.6346914768218994, -5.506980895996094], + [5.287956714630127, -3.950573444366455], + [2.857617139816284, 6.270665645599365], + [-2.6973090171813965, 2.778876781463623], + [-5.050810813903809, -1.1844531297683716], + [-2.8356053829193115, -0.912558913230896], + [0.6542098522186279, -8.936422348022461], + [-1.5487085580825806, 0.6064774990081787], + [-3.778144598007202, -1.3530112504959106], + [0.2532676160335541, -5.042916297912598], + [-5.3211774826049805, 5.66335916519165], + [-3.3096063137054443, -1.4188238382339478], + [6.3564019203186035, -1.803128957748413], + [5.65258264541626, -1.2914615869522095], + [-1.4335997104644775, 12.054696083068848], + [-4.854154109954834, 5.8703813552856445], + [-0.7306287884712219, 10.488018035888672], + [0.7165752053260803, -8.924619674682617], + [-4.9371418952941895, 6.914297580718994], + [-1.6297584772109985, 13.311800956726074], + [-0.010386832058429718, 9.006307601928711], + [-2.0844366550445557, 0.3183450698852539], + [2.8072760105133057, -4.830712795257568], + [4.61130952835083, 7.658868789672852], + [-1.4145864248275757, 12.053808212280273], + [-1.7342826128005981, 2.0502865314483643], + [8.1550874710083, -3.723848819732666], + [0.47370314598083496, -6.558620452880859], + [-3.1523542404174805, 5.976605415344238], + [-4.193293571472168, -3.0595619678497314], + [6.848991870880127, -3.167997121810913], + [-3.9520208835601807, -2.8819048404693604], + [-3.3925859928131104, -1.1686840057373047], + [-1.0094596147537231, 10.43367862701416], + [-1.6983431577682495, 1.3865553140640259], + [0.5235120058059692, -7.689897060394287], + [-0.34151917695999146, -1.8169578313827515], + [0.44722849130630493, -7.078314304351807], + [0.731509268283844, -7.9173903465271], + [5.461304187774658, 8.410501480102539], + [2.6529881954193115, -4.428335189819336], + [3.3501601219177246, 6.972383499145508], + [0.6982160210609436, -6.923328876495361], + [-0.24654385447502136, -1.4831058979034424], + [2.1407470703125, 5.730254173278809], + [0.4806516766548157, -6.199322700500488], + [-0.6805274486541748, 10.132877349853516], + [-0.7576430439949036, 10.56245231628418], + [0.7725314497947693, -8.366772651672363], + [-1.1158236265182495, 1.1084201335906982], + [-2.202208995819092, -1.1412498950958252], + [9.142020225524902, -2.8918159008026123], + [2.7189950942993164, -3.7773802280426025], + [2.433332681655884, -5.030768394470215], + [2.014031171798706, 5.1103925704956055], + [-2.1813888549804688, 0.5988582968711853], + [2.747481107711792, -3.5724527835845947], + [6.839495658874512, -3.896799325942993], + [-0.3938293755054474, -1.4746147394180298], + [-4.517163276672363, 7.465117454528809], + [-0.15839898586273193, -2.014666795730591], + [-3.310920000076294, -1.5014029741287231], + [-1.2883937358856201, 11.161506652832031], + [-3.4459331035614014, -1.3276768922805786], + [-2.19258189201355, -2.9824764728546143], + [-1.3528146743774414, 11.414010047912598], + [-1.6620383262634277, 5.71816349029541], + [-0.7189332246780396, 10.037413597106934], + [-3.356531858444214, -1.6199500560760498], + [0.8637597560882568, 1.7257221937179565], + [-0.06409139186143875, -4.668239593505859], + [-2.37276554107666, -2.3500709533691406], + [-4.9594645500183105, 4.103221893310547], + [5.841462135314941, -2.2923882007598877], + [7.919464588165283, -2.909137010574341], + [4.859614372253418, 7.608281135559082], + [0.6083922386169434, -8.25022029876709], + [3.087122678756714, -5.089778423309326], + [0.7434934973716736, -6.919867038726807], + [-3.3844830989837646, -1.4056811332702637], + [-0.04479262977838516, -1.5840462446212769], + [-3.965397357940674, -3.4732086658477783], + [0.6826028227806091, -3.8636887073516846], + [2.7242133617401123, -4.908330917358398], + [-1.6847697496414185, 1.0114015340805054], + [-4.730964183807373, -0.7588595151901245], + [0.6496534943580627, -7.632384300231934], + [0.961250364780426, -6.906656265258789], + [-0.43584930896759033, 10.189462661743164], + [-0.8560187220573425, 10.083152770996094], + [-0.7300049066543579, 5.102742671966553], + [5.862525939941406, -3.0819356441497803], + [-5.380262851715088, 6.4874138832092285], + [1.9940340518951416, 1.2441667318344116], + [-5.10107946395874, -0.7594383955001831], + [-1.9527355432510376, 2.0176475048065186], + [0.5967769026756287, 0.33476191759109497], + [7.452649116516113, -2.090439558029175], + [-1.679229974746704, -0.8732106685638428], + [8.404692649841309, -2.642099618911743], + [0.33021974563598633, -6.136063575744629], + [-1.8737744092941284, 1.9605153799057007], + [-1.9011887311935425, 0.9930609464645386], + [1.980020523071289, -4.382344722747803], + [-4.169295787811279, -1.5567103624343872], + [0.2944414019584656, -6.950472354888916], + [-1.044739842414856, 11.130064964294434], + [6.221775054931641, -2.7786428928375244], + [-3.149669885635376, -1.6349104642868042], + [-0.04357225447893143, 6.810001850128174], + [-3.512064218521118, 5.391840934753418], + [-3.0897536277770996, -0.7033333778381348], + [2.8643152713775635, 6.257289886474609], + [-4.947062969207764, -0.4747720956802368], + [1.1847854852676392, 1.6316272020339966], + [-4.458436012268066, -1.5854824781417847], + [1.9336802959442139, 2.3298532962799072], + [8.652915954589844, -3.463291883468628], + [0.29944178462028503, -5.6405558586120605], + [-4.317046165466309, 6.220438003540039], + [0.3199859857559204, -6.685849189758301], + [-3.7201740741729736, 6.54679012298584], + [-2.5648140907287598, -0.5433538556098938], + [-0.46636325120925903, -2.8441362380981445], + [-5.558831691741943, 7.609743118286133], + [1.7703971862792969, 1.6595185995101929], + [-1.183273196220398, 1.4522266387939453], + [-0.08810857683420181, -3.6279947757720947], + [0.46810346841812134, -6.353148460388184], + [-5.284773826599121, -0.5823155641555786], + [-4.349704265594482, 0.6788115501403809], + [-3.062904119491577, -2.4145829677581787], + [1.0626589059829712, -6.790139198303223], + [1.9308626651763916, -3.8275306224823], + [-1.0610082149505615, 1.1312845945358276], + [0.5255138278007507, -6.784470081329346], + [-4.963582515716553, 5.903655529022217], + [-4.913227081298828, -3.170541286468506], + [8.123400688171387, -3.4405667781829834], + [2.042948007583618, 5.78316068649292], + [-4.978705406188965, -0.9579814672470093], + [0.06625991314649582, -5.052937984466553], + [2.0762851238250732, 3.4055633544921875], + [-5.105742931365967, 6.748350143432617], + [1.8634707927703857, 0.27347180247306824], + [-4.967918872833252, -0.7040368914604187], + [-1.9544751644134521, 0.5228211879730225], + [2.0134899616241455, 4.4544758796691895], + [-4.1714582443237305, -2.5803439617156982], + [0.5752611756324768, -7.951756000518799], + [0.9923120141029358, -5.668766975402832], + [-3.4366586208343506, -1.0601845979690552], + [-1.7123275995254517, 0.9466930627822876], + [0.9031215310096741, -6.996527194976807], + [-4.327936172485352, -0.22946739196777344], + [0.8583464622497559, -6.211666107177734], + [-3.413719415664673, -1.5910369157791138], + [-3.1611173152923584, -0.4740487337112427], + [8.11417007446289, -2.5779497623443604], + [0.48538756370544434, -0.7425003051757812], + [-4.508870601654053, 4.124734401702881], + [0.596991240978241, -8.199556350708008], + [-3.459714651107788, -0.4611201882362366], + [7.008108615875244, -2.531545400619507], + [-1.268573522567749, 11.145126342773438], + [8.087678909301758, -2.54060435295105], + [7.571670055389404, -2.567216157913208], + [-0.3309004306793213, 8.693558692932129], + [-3.397278070449829, -1.3022552728652954], + [-2.003746747970581, 2.0237364768981934], + [2.5194203853607178, -5.870888710021973], + [-0.5068298578262329, 7.523993015289307], + [2.3423731327056885, -3.780472993850708], + [1.5952374935150146, 0.595140278339386], + [-3.795253038406372, -2.233902931213379], + [-0.8744131922721863, 10.144256591796875], + [-4.044502258300781, -3.637678384780884], + [-3.999272108078003, -0.9235138297080994], + [-4.595376014709473, -0.8282688856124878], + [-3.9367101192474365, -2.687483310699463], + [8.955870628356934, -2.6690919399261475], + [6.6318135261535645, -3.43496036529541], + [-0.4017021059989929, 10.067039489746094], + [6.470114231109619, -3.1959242820739746], + [-0.2982715368270874, 7.869772911071777], + [2.4707610607147217, -4.128534317016602], + [-5.438600540161133, 7.221033096313477], + [0.16985061764717102, -4.188048362731934], + [-4.966930389404297, 5.7855448722839355], + [1.372814655303955, -7.749950408935547], + [-3.5872888565063477, -1.4256401062011719], + [-3.908099889755249, -1.533831238746643], + [0.5981249809265137, -7.477973461151123], + [5.803825855255127, -1.8536158800125122], + [-1.4466512203216553, -0.5920159816741943], + [2.7343411445617676, -4.551623344421387], + [-0.7837753891944885, 9.871366500854492], + [-4.282833576202393, -3.286644220352173], + [1.8643735647201538, 5.392082691192627], + [7.343704700469971, -2.3093068599700928], + [0.3682085871696472, -5.774208068847656], + [1.6181888580322266, 0.3484276533126831], + [5.418678283691406, -1.4035537242889404], + [-0.6976631283760071, 10.494611740112305], + [2.148390531539917, 0.8386101722717285], + [-2.5883731842041016, -0.9129238128662109], + [0.5848535299301147, -7.28239631652832], + [0.7594221234321594, -6.207920074462891], + [-1.9893772602081299, 1.3666260242462158], + [0.6616880893707275, -6.866743087768555], + [-4.216325283050537, -2.222292900085449], + [-2.527841091156006, 2.6489994525909424], + [-4.031113624572754, 6.156746864318848], + [-3.966289758682251, 6.215523719787598], + [-3.273320198059082, -0.7111020088195801], + [1.4308606386184692, 6.516371726989746], + [2.213423013687134, -5.85102653503418], + [5.951309680938721, -2.806549072265625], + [-3.2701451778411865, -2.02483868598938], + [-3.3062527179718018, -1.1246625185012817], + [-3.331766366958618, -2.567033529281616], + [-0.6988375782966614, -2.432335138320923], + [-3.221266508102417, -1.239031195640564], + [-3.745929479598999, -1.1436121463775635], + [2.6716043949127197, -5.141399383544922], + [1.0658646821975708, -5.7091875076293945], + [-3.22552227973938, -0.053020719438791275], + [0.8486809730529785, -4.807379722595215], + [-5.887941360473633, -1.0143495798110962], + [-4.388079643249512, -2.5911107063293457], + [-3.2161874771118164, -1.9753906726837158], + [-0.6821635365486145, 10.185454368591309], + [-0.8638813495635986, 2.816493034362793], + [3.1635568141937256, -5.0194196701049805], + [0.48731881380081177, -0.6157156825065613], + [-4.447628021240234, 5.5315141677856445], + [2.764094591140747, -4.174246311187744], + [-1.2617048025131226, 11.839411735534668], + [-3.410392999649048, -1.833246111869812], + [-0.789883017539978, 9.719405174255371], + [3.1316192150115967, 6.088837623596191], + [7.238646030426025, -2.0097157955169678], + [2.1401264667510986, 5.813064098358154], + [-0.5679761171340942, 10.183045387268066], + [-4.418863773345947, -3.9523818492889404], + [0.5087338089942932, -5.896725654602051], + [-2.3077542781829834, -0.31237274408340454], + [3.6572682857513428, 6.653815269470215], + [-5.176271915435791, 4.479346752166748], + [2.521803140640259, 5.278474807739258], + [2.6582813262939453, -4.1073455810546875], + [0.49319028854370117, -4.812705993652344], + [-5.210093975067139, 6.6491594314575195], + [0.7364315390586853, -8.6533784866333], + [-3.5238983631134033, -1.1978294849395752], + [-4.662267208099365, -1.1561204195022583], + [-4.333629608154297, -2.861457586288452], + [-3.203099012374878, -1.4201977252960205], + [1.5835850238800049, 5.388213634490967], + [-2.262345552444458, -3.4327847957611084], + [6.412301540374756, -1.3503183126449585], + [1.9298441410064697, -4.613158226013184], + [-4.544140338897705, 4.373044013977051], + [0.24531039595603943, -5.024341583251953], + [-3.421812057495117, -1.9937169551849365], + [2.2852680683135986, 5.169223785400391], + [4.3841729164123535, 7.781868934631348], + [2.995523691177368, -5.136190414428711], + [-3.6100735664367676, -3.034148931503296], + [-0.9951477646827698, 10.48459529876709], + [-2.126875877380371, 2.4626638889312744], + [-1.1090043783187866, 10.85850715637207], + [-1.9266722202301025, -2.4441933631896973], + [-0.42523783445358276, 4.721513748168945], + [-1.8402645587921143, 1.9359570741653442], + [-4.986194610595703, 7.2396931648254395], + [0.7952383160591125, -0.34794577956199646], + [1.5657429695129395, -4.155673980712891], + [8.53899097442627, -2.9292242527008057], + [7.523936748504639, -3.7450931072235107], + [-2.49289608001709, -0.19867777824401855], + [2.167450189590454, -5.994990348815918], + [-0.5152251720428467, -0.7512625455856323], + [1.1640909910202026, 5.535382270812988], + [-2.109651565551758, 0.3779076337814331], + [0.5951677560806274, -7.634989261627197], + [-0.05899430066347122, 8.700237274169922], + [0.24641847610473633, -5.301433086395264], + [9.59847354888916, -2.870737314224243], + [-0.21738123893737793, 7.762109756469727], + [2.392348527908325, 6.062577724456787], + [1.7965505123138428, -3.71018385887146], + [0.8436428904533386, -6.273149013519287], + [-2.8312177658081055, -1.4283033609390259], + [1.8561221361160278, -5.160791397094727], + [2.1280930042266846, 6.311888217926025], + [-1.1650032997131348, 11.139015197753906], + [-0.08718977123498917, -1.510527491569519], + [-4.796615123748779, -3.6712229251861572], + [7.9416823387146, -2.3299367427825928], + [-3.270352363586426, -0.7123458385467529], + [-4.012368202209473, 6.344057083129883], + [0.43708640336990356, -6.168047904968262], + [-4.409780979156494, 4.7941765785217285], + [-4.492922782897949, 5.636706352233887], + [-3.4446356296539307, -1.492720603942871], + [-5.543492317199707, 6.305074214935303], + [-1.8395564556121826, 0.7713264226913452], + [2.305830955505371, 0.4419063925743103], + [-2.141692638397217, 2.1253905296325684], + [3.111074686050415, -3.6638431549072266], + [2.600553035736084, 4.861941814422607], + [-3.0157902240753174, 6.924893379211426], + [-0.7093010544776917, 10.625574111938477], + [-2.2840895652770996, 0.14637434482574463], + [3.3112618923187256, 6.697787284851074], + [-0.6988508701324463, 10.809122085571289], + [4.673184394836426, -3.3816049098968506], + [-1.941596508026123, 2.1926963329315186], + [-1.8595679998397827, 0.33746400475502014], + [-0.6941843628883362, 10.279251098632812], + [7.8673529624938965, -2.8086445331573486], + [0.34217000007629395, -6.21314811706543], + [0.623775064945221, -8.189918518066406], + [6.806273937225342, -2.033172369003296], + [0.5097105503082275, -7.852117538452148], + [-0.677335798740387, 10.01926040649414], + [0.5248784422874451, -7.249492168426514], + [-5.5283098220825195, 6.376552581787109], + [0.6427332758903503, -7.558385848999023], + [-2.2282748222351074, 0.28582996129989624], + [-3.9973390102386475, -1.3497918844223022], + [-0.9274810552597046, 9.921466827392578], + [-3.7014381885528564, -1.3817704916000366], + [-3.470550298690796, -1.6851962804794312], + [-4.093848705291748, 5.314168453216553], + [4.566024303436279, 7.522566318511963], + [-3.2143776416778564, -0.9529818296432495], + [8.53343677520752, -2.4922778606414795], + [0.9944334626197815, 0.003155570477247238], + [-1.3005722761154175, -0.29438716173171997], + [0.6216153502464294, -8.283763885498047], + [0.23330724239349365, -5.088962554931641], + [0.5990878343582153, -8.202638626098633], + [0.652504026889801, -5.749040126800537], + [0.8838788866996765, -7.582354545593262], + [6.400957107543945, -3.4128310680389404], + [-1.4624712467193604, 12.17347526550293], + [0.34011200070381165, -3.878368377685547], + [-3.0668880939483643, -1.088391900062561], + [-0.903986930847168, 10.442785263061523], + [4.744283676147461, 7.720737457275391], + [-4.522298812866211, 7.265140533447266], + [-5.205442905426025, 6.784932613372803], + [-0.9036037921905518, 10.59395980834961], + [2.9418787956237793, 6.237024307250977], + [-4.279116153717041, -0.1414758563041687], + [-2.9092090129852295, -1.5002104043960571], + [0.6787641048431396, -8.292041778564453], + [-4.206115245819092, -1.4481984376907349], + [1.188896894454956, -4.54304838180542], + [-4.45888614654541, 6.515702247619629], + [-1.1699857711791992, 10.793266296386719], + [2.743396043777466, -4.722934722900391], + [0.8011285662651062, 4.934603691101074], + [1.0541763305664062, -0.2656060457229614], + [-1.1709489822387695, 10.562932968139648], + [0.5477319359779358, -7.771989822387695], + [2.2692134380340576, 0.7922829389572144], + [-2.7714321613311768, 4.827181816101074], + [0.49803268909454346, -6.264914035797119], + [0.9529586434364319, -7.387819290161133], + [-4.9104533195495605, -1.969805121421814], + [3.7085487842559814, 6.732758522033691], + [0.6854195594787598, -7.612051963806152], + [7.95845365524292, -3.511955499649048], + [0.4921489953994751, -5.66854190826416], + [-4.4785685539245605, -1.9674955606460571], + [-1.206949234008789, 1.4047931432724], + [-0.3697151839733124, -2.927536725997925], + [-5.943795680999756, 7.800980567932129], + [-5.056647300720215, 5.5282135009765625], + [-0.7349099516868591, 11.013161659240723], + [0.3834806978702545, -0.9520648717880249], + [-2.020719528198242, 1.8352558612823486], + [-4.513098239898682, 5.332923412322998], + [0.5068302750587463, -5.015437126159668], + [8.14181900024414, -2.3504679203033447], + [8.800812721252441, -2.770967721939087], + [2.030505895614624, 3.3335442543029785], + [4.580507755279541, 7.51248836517334], + [8.454971313476562, -3.1129047870635986], + [4.259490013122559, 6.94229793548584], + [1.831730842590332, 5.153964042663574], + [-2.137603282928467, 0.23371809720993042], + [0.5937349796295166, -8.34321403503418], + [-3.565845251083374, 3.4821338653564453], + [-0.823788046836853, 10.602212905883789], + [0.18066182732582092, -4.797492980957031], + [-5.549868106842041, 4.290132999420166], + [2.4222779273986816, -4.028162479400635], + [2.3361446857452393, 5.4164533615112305], + [-3.8452601432800293, -3.9141652584075928], + [0.9542458653450012, -6.290398120880127], + [-0.1809815764427185, 8.473610877990723], + [0.49894988536834717, -6.18577766418457], + [0.044376127421855927, -5.724958419799805], + [1.458673119544983, -4.133204936981201], + [-1.185171365737915, 11.203070640563965], + [0.9432694315910339, -6.069520950317383], + [1.040827989578247, -4.564499378204346], + [-2.6342170238494873, -1.3443379402160645], + [5.3559489250183105, -1.288794755935669], + [0.5977464318275452, -7.776311874389648], + [6.3814921379089355, -2.5849249362945557], + [0.5626864433288574, -7.450160026550293], + [0.03407915681600571, -0.6254410743713379], + [-4.395257949829102, -1.338118553161621], + [-3.5348708629608154, 5.835227012634277], + [-1.6617634296417236, 6.211993217468262], + [-2.8827779293060303, 0.3253591060638428], + [2.823611259460449, -4.925444602966309], + [-5.578158378601074, 7.253571033477783], + [0.3330666422843933, -6.8352203369140625], + [1.5882617235183716, -4.348028182983398], + [-4.456471920013428, -1.1946396827697754], + [-0.0783766582608223, -2.6699275970458984], + [-1.827204704284668, 1.6454145908355713], + [6.226694583892822, -2.3324806690216064], + [-1.3815852403640747, 11.516799926757812], + [6.487595558166504, -4.563479423522949], + [-0.08605558425188065, -0.935223400592804], + [1.6148625612258911, -5.200084209442139], + [1.6281251907348633, 4.722922325134277], + [5.708620548248291, -1.180872917175293], + [2.181788682937622, -4.113048553466797], + [4.164555072784424, -4.264444828033447], + [2.731076240539551, -4.595456123352051], + [2.327038288116455, -4.420837879180908], + [-4.79114294052124, 6.0501604080200195], + [2.0226728916168213, 5.171767234802246], + [-1.9246832132339478, 1.8327878713607788], + [-1.8359761238098145, 1.0959501266479492], + [9.697246551513672, -2.9601709842681885], + [-0.3254942297935486, 8.404434204101562], + [0.4312807321548462, -6.7693891525268555], + [2.415443181991577, 5.837102890014648], + [1.6514792442321777, 5.700952053070068], + [-0.02522585541009903, -2.220790147781372], + [-4.2224507331848145, 6.192852973937988], + [7.179110050201416, -2.0307958126068115], + [2.1291725635528564, 3.591911554336548], + [0.8612789511680603, -8.048446655273438], + [0.8443127870559692, -0.3762349486351013], + [-1.8219753503799438, 2.39166259765625], + [4.15232515335083, 7.268704891204834], + [2.431612253189087, 5.156094551086426], + [-3.174553632736206, 5.0695881843566895], + [-0.677254319190979, 10.414417266845703], + [-1.7788665294647217, 1.8127455711364746], + [0.6826393008232117, -7.978355884552002], + [2.6207141876220703, -4.823009014129639], + [5.309667110443115, -0.8554157018661499], + [-3.0408055782318115, -1.428947925567627], + [-1.8843116760253906, 2.067470073699951], + [-4.2372283935546875, -3.5291144847869873], + [6.211512565612793, -1.6851410865783691], + [-3.213934898376465, -1.299034833908081], + [0.3132965564727783, -0.8807131052017212], + [-2.171402931213379, 1.9054338932037354], + [2.788900136947632, -4.402329444885254], + [-3.7372376918792725, -1.5096112489700317], + [-3.6552510261535645, -0.3704085946083069], + [-5.636520862579346, 5.729610919952393], + [2.486394166946411, 5.334096908569336], + [-1.2405413389205933, 11.585540771484375], + [-2.5503997802734375, 2.677614450454712], + [1.4285563230514526, 6.187797546386719], + [1.5691261291503906, -4.10325288772583], + [-2.657228469848633, 2.8637399673461914], + [-0.621717631816864, 10.850750923156738], + [2.1003329753875732, -5.2621965408325195], + [-2.5341005325317383, -1.727396011352539], + [-1.9771493673324585, 2.3025848865509033], + [-3.0851657390594482, -3.1839632987976074], + [-1.3599424362182617, 11.733198165893555], + [-3.9650163650512695, -2.284778356552124], + [7.563416957855225, -2.347393751144409], + [-5.106628894805908, 5.255975246429443], + [-1.4111764430999756, 1.6933249235153198], + [1.7736496925354004, -4.379662036895752], + [-2.3587534427642822, -1.0420981645584106], + [2.3836095333099365, -5.230327606201172], + [-2.158430814743042, -1.1794577836990356], + [0.6048364043235779, -7.690136432647705], + [-0.28688162565231323, 8.12830924987793], + [-2.4496161937713623, -3.3608553409576416], + [-3.1283347606658936, -1.170034408569336], + [-3.916876792907715, -0.7985448837280273], + [1.202996015548706, 0.976094126701355], + [0.5944910049438477, -6.687058448791504], + [-1.2731759548187256, 0.32498493790626526], + [5.2988200187683105, -1.9148186445236206], + [-5.08700704574585, 6.967919826507568], + [0.6309796571731567, -8.39858627319336], + [-4.074251651763916, -1.1085174083709717], + [-3.006190061569214, -1.1444166898727417], + [2.9936814308166504, -4.666985511779785], + [-1.8276066780090332, 2.1366701126098633], + [2.285928249359131, 5.364865303039551], + [5.851039409637451, -2.9722084999084473], + [-1.644691824913025, 1.2402557134628296], + [-0.2607613205909729, 8.78852653503418], + [-1.113731026649475, 1.4367637634277344], + [0.46051251888275146, -7.084972381591797], + [1.647695779800415, -4.992710113525391], + [-0.5012465715408325, 9.736122131347656], + [-4.911230564117432, -1.4880990982055664], + [0.43638116121292114, -6.134458541870117], + [0.552583634853363, -7.767692565917969], + [-2.817962169647217, -1.3125512599945068], + [0.4008972644805908, -6.063243389129639], + [-5.874342441558838, -0.6832563281059265], + [0.5535910725593567, -6.894861698150635], + [-1.0684032440185547, 10.458746910095215], + [1.3046977519989014, 0.34846359491348267], + [0.9911542534828186, -7.656078338623047], + [0.28038400411605835, -5.998686790466309], + [-3.823312997817993, -2.4970436096191406], + [-1.235673189163208, 1.653306245803833], + [-3.5160305500030518, -1.3696569204330444], + [-3.3237435817718506, -1.3196426630020142], + [-4.688782215118408, -3.2739315032958984], + [7.156901836395264, -3.292336940765381], + [2.834447145462036, -4.787525653839111], + [8.268200874328613, -2.377911329269409], + [-1.0598894357681274, 10.700759887695312], + [0.1642444133758545, -5.5903472900390625], + [-5.351335525512695, -4.222927570343018], + [1.3142657279968262, 1.4282325506210327], + [-4.599395275115967, 5.836957931518555], + [1.8464581966400146, 5.630350589752197], + [-4.686373233795166, -3.334233522415161], + [1.0202805995941162, -6.865403175354004], + [-1.5159168243408203, 0.5278825759887695], + [0.6646247506141663, -7.681196212768555], + [-1.3398194313049316, 11.447122573852539], + [-1.7355098724365234, 1.9783991575241089], + [0.3034847378730774, -7.048962116241455], + [-6.292948246002197, 8.34393310546875], + [-4.203761100769043, 6.312948703765869], + [1.5142185688018799, 2.5748789310455322], + [2.1693308353424072, 0.3918744623661041], + [0.36753588914871216, -4.986298561096191], + [0.48434382677078247, -7.036001205444336], + [-0.6725696921348572, 1.4992996454238892], + [0.8598081469535828, -6.817590713500977], + [-4.078044414520264, -1.815092921257019], + [2.899117946624756, -4.51017427444458], + [-2.457595109939575, -1.2650262117385864], + [8.66343879699707, -2.6523404121398926], + [-1.555145025253296, 12.442401885986328], + [3.0795509815216064, 5.899131774902344], + [-1.181166648864746, 10.963276863098145], + [1.2251120805740356, -0.03951764479279518], + [2.485365152359009, 5.94676399230957], + [6.355170249938965, -4.571988105773926], + [1.4657037258148193, 1.984322428703308], + [7.124124526977539, -3.726038694381714], + [-3.8900930881500244, -0.7483562231063843], + [-4.865959644317627, -0.6856199502944946], + [0.4853740334510803, -0.2607385516166687], + [-0.09486199170351028, -2.937464475631714], + [-1.3198338747024536, -0.7553554773330688], + [-4.348987102508545, -4.247328281402588], + [-3.500397205352783, -1.3315784931182861], + [-0.9612149596214294, 10.28134536743164], + [5.863866329193115, -4.2878947257995605], + [-5.149440288543701, 7.281777381896973], + [-0.7097277045249939, 9.09982681274414], + [-3.654134750366211, 5.368325233459473], + [1.4855419397354126, 0.035540368407964706], + [-0.9644286036491394, 10.18459701538086], + [2.5404181480407715, -4.2308430671691895], + [7.671507358551025, -2.649930238723755], + [1.5652296543121338, 1.2542906999588013], + [-0.295220285654068, -1.6843712329864502], + [2.1253602504730225, 6.410911560058594], + [-1.3773987293243408, 12.3809814453125], + [-1.4358607530593872, -0.5658523440361023], + [7.378143787384033, -2.0691640377044678], + [4.999874114990234, -3.714322090148926], + [-3.7091310024261475, -1.9355629682540894], + [-4.145601749420166, 6.200347900390625], + [-1.257187843322754, -0.9076094031333923], + [-1.3609635829925537, 11.830427169799805], + [-0.749162495136261, -1.9157745838165283], + [-3.4189395904541016, -1.9646964073181152], + [-1.239781141281128, 11.341814041137695], + [-2.2721455097198486, 2.1126656532287598], + [-2.002962112426758, 2.212383508682251], + [-3.802826166152954, -2.5188968181610107], + [2.7288365364074707, 6.17242431640625], + [-0.9850448966026306, 10.474964141845703], + [-3.1571643352508545, -0.9693551063537598], + [0.6628862023353577, -4.856905937194824], + [-1.5860471725463867, 1.9072442054748535], + [-3.4494025707244873, -2.325950860977173], + [0.31600871682167053, -0.33326321840286255], + [-1.0944665670394897, 11.033915519714355], + [-4.134189605712891, -1.2399495840072632], + [-4.232586860656738, -0.7636289596557617], + [-6.433227062225342, -1.1548491716384888], + [-0.3631884455680847, 7.879736423492432], + [1.6345186233520508, -4.039943218231201], + [-3.899078607559204, -2.623929738998413], + [0.19512999057769775, -5.928108215332031], + [2.1540777683258057, 5.375453948974609], + [9.258978843688965, -2.9321701526641846], + [-2.985729455947876, -0.9917145371437073], + [6.631398677825928, -1.724443793296814], + [-4.127837181091309, 3.8297793865203857], + [1.2339755296707153, 5.346480846405029], + [6.7007670402526855, -3.7510976791381836], + [-0.5515843033790588, 10.67916488647461], + [-0.42759937047958374, 9.63268756866455], + [1.8605725765228271, 4.336170196533203], + [-1.500489592552185, 0.2547988295555115], + [-2.0266356468200684, 5.889885425567627], + [2.127822160720825, 6.214183330535889], + [0.49894803762435913, -5.842811584472656], + [1.8616831302642822, 1.3479328155517578], + [-5.52748441696167, 5.337422847747803], + [2.463902473449707, 5.587646484375], + [0.10607969015836716, -0.6270862221717834], + [0.5540509819984436, -7.437967300415039], + [2.3271567821502686, 4.120505332946777], + [1.2311935424804688, 5.536442756652832], + [-3.720161199569702, -1.4714252948760986], + [-0.49887681007385254, 2.480320692062378], + [-1.5874512195587158, -0.590330958366394], + [-3.4445645809173584, -0.732978343963623], + [7.762495994567871, -2.369917631149292], + [-4.086825847625732, -0.8022525906562805], + [-1.0585849285125732, 10.350282669067383], + [-4.210715293884277, -0.7748706340789795], + [-3.514981746673584, -2.215700149536133], + [-1.3886464834213257, 12.001601219177246], + [-4.794067859649658, 6.152874946594238], + [2.17033052444458, -5.091030120849609], + [-1.5818248987197876, 12.815685272216797], + [-1.430026888847351, 12.125923156738281], + [2.1911709308624268, 5.713275909423828], + [0.3645426630973816, -6.037829399108887], + [-4.065133571624756, -1.3472596406936646], + [-0.30775776505470276, -1.868828535079956], + [-1.7666064500808716, 2.644491195678711], + [1.2180628776550293, -0.295718789100647], + [6.977114200592041, -4.211307525634766], + [-0.7095163464546204, 10.479743957519531], + [-1.0242011547088623, 10.014535903930664], + [-3.8562276363372803, 5.542158126831055], + [0.34241580963134766, -6.7584686279296875], + [2.7247474193573, -4.532782077789307], + [-1.7433757781982422, 1.2878837585449219], + [7.423463344573975, -3.7972030639648438], + [1.1222604513168335, -0.07026249170303345], + [8.420916557312012, -3.370140790939331], + [-3.6684794425964355, -2.020925998687744], + [-0.6177641749382019, 0.42517364025115967], + [-1.445875644683838, 1.9454213380813599], + [-4.015514850616455, -4.759278774261475], + [0.5027703642845154, -6.903347015380859], + [-1.4423155784606934, 1.1442508697509766], + [0.6329330801963806, -8.232109069824219], + [-1.945806622505188, -1.1194546222686768], + [0.6686578989028931, -7.894275665283203], + [0.5819265246391296, -6.669684410095215], + [-3.305279493331909, -2.376093864440918], + [-3.871244192123413, -2.8125526905059814], + [2.3748257160186768, 0.9271888732910156], + [1.0674371719360352, -6.671230316162109], + [2.8460135459899902, -4.479142189025879], + [1.6349095106124878, 0.3382691740989685], + [-3.9994168281555176, -2.791372060775757], + [0.7821317315101624, -5.745806694030762], + [-0.5478288531303406, 10.431238174438477], + [-1.2191187143325806, 10.848947525024414], + [2.204562187194824, -5.629988193511963], + [-0.39635926485061646, 9.597075462341309], + [-3.622958183288574, -1.8291925191879272], + [-3.2568414211273193, -1.2119897603988647], + [0.8839311003684998, 5.478384971618652], + [9.157126426696777, -2.7835586071014404], + [-4.2810750007629395, 6.337390422821045], + [0.8472408056259155, -6.665709972381592], + [-4.193708419799805, -1.440109133720398], + [0.3685411214828491, -7.298170566558838], + [0.4420838952064514, -7.373641014099121], + [7.328413009643555, -2.4872806072235107], + [-3.442258358001709, -0.2886788845062256], + [-4.0132670402526855, -1.5821601152420044], + [-3.9941015243530273, 6.219112873077393], + [-1.727994680404663, -1.7486686706542969], + [-1.7651793956756592, 0.3507685363292694], + [-0.13369295001029968, -2.1837220191955566], + [1.637323021888733, 3.0148909091949463], + [3.471865177154541, 6.560188293457031], + [-4.3813347816467285, -1.077678918838501], + [3.0899293422698975, -5.101748466491699], + [9.697064399719238, -2.9627685546875], + [1.9679186344146729, -4.437516212463379], + [1.9584388732910156, 2.555361270904541], + [0.10268735140562057, -1.1081109046936035], + [-5.41818904876709, 3.6678671836853027], + [-1.385336995124817, -1.8535841703414917], + [0.8151535391807556, -6.129178047180176], + [5.983137130737305, -2.049030065536499], + [0.6761887073516846, -0.7554023265838623], + [-1.4130041599273682, 12.127686500549316], + [0.20767834782600403, -5.224810600280762], + [-1.9793035984039307, -2.879307508468628], + [-0.10504359751939774, -0.9783715009689331], + [-3.549161911010742, -2.413079023361206], + [1.6743518114089966, 5.180511474609375], + [-1.8198964595794678, 1.8189992904663086], + [-2.281996250152588, 2.2036354541778564], + [-3.3148629665374756, -2.15657114982605], + [0.4872276782989502, -6.294610977172852], + [-0.5167993903160095, -1.7668284177780151], + [6.668377876281738, -2.622188091278076], + [-3.626375436782837, 4.250351905822754], + [-3.6480226516723633, -2.3785674571990967], + [-5.188882827758789, -0.7127969264984131], + [0.09468670934438705, -3.2368204593658447], + [2.806123971939087, -4.615411758422852], + [-0.24196994304656982, 7.362299919128418], + [-0.7380346655845642, 10.186917304992676], + [-4.517022609710693, 5.889675617218018], + [-3.303990602493286, -1.443456768989563], + [2.589775323867798, -4.276981830596924], + [-2.3399736881256104, 2.0232491493225098], + [2.846219301223755, -5.773585319519043], + [2.0653316974639893, 4.64526891708374], + [-2.1917707920074463, 0.28321439027786255], + [-1.2831913232803345, 11.26629638671875], + [-3.503040075302124, 5.274292945861816], + [0.5452954173088074, -7.499610900878906], + [-5.592202663421631, 5.656481742858887], + [-4.074189186096191, -2.4824464321136475], + [8.174551963806152, -2.5637032985687256], + [3.0079705715179443, -5.359320640563965], + [-1.2891020774841309, 0.7054206132888794], + [2.872335195541382, -4.522132396697998], + [0.982873260974884, -4.0024027824401855], + [-3.8836424350738525, -2.6136271953582764], + [-2.7855918407440186, 2.4491987228393555], + [-2.4722342491149902, -1.1224015951156616], + [-0.9415698647499084, 10.5487642288208], + [-4.804548740386963, -0.8770461678504944], + [2.22282075881958, -4.035336494445801], + [-3.3860933780670166, -1.2985514402389526], + [1.7969293594360352, -3.5258185863494873], + [-1.2370612621307373, 11.706392288208008], + [-3.0632684230804443, 3.5057406425476074], + [2.253464460372925, 6.131505966186523], + [-3.7885353565216064, -2.084193229675293], + [-4.336625576019287, 6.891751766204834], + [-3.1089940071105957, -1.0078691244125366], + [7.488945007324219, -2.366941213607788], + [-0.13864567875862122, -0.5658726096153259], + [2.6073267459869385, 6.598235607147217], + [8.988764762878418, -2.8931381702423096], + [-1.2418652772903442, 11.407452583312988], + [-3.139925718307495, -1.4139622449874878], + [-4.516600131988525, 6.1066083908081055], + [-1.4992300271987915, 1.8344457149505615], + [-3.9105522632598877, -0.739180326461792], + [-4.168005466461182, 4.986786365509033], + [8.079834938049316, -2.706671953201294], + [1.0650696754455566, 6.726224422454834], + [-3.4221386909484863, -2.6800339221954346], + [6.060826778411865, -1.8117356300354004], + [-2.2460269927978516, -0.6153079867362976], + [-3.008026123046875, 3.3578484058380127], + [-3.7754838466644287, -2.652013063430786], + [-3.6785452365875244, -0.20052635669708252], + [-2.4349355697631836, -1.532950520515442], + [7.540764331817627, -3.7615857124328613], + [0.3382083773612976, -5.0020647048950195], + [-0.7053973078727722, 10.359865188598633], + [-1.7056183815002441, 1.8840025663375854], + [1.9187277555465698, -4.999019622802734], + [-1.2095298767089844, 11.336078643798828], + [1.2203171253204346, -4.190267562866211], + [3.3971450328826904, 6.855525493621826], + [-1.0157525539398193, 11.09723949432373], + [-3.074509620666504, -1.1136884689331055], + [2.789095640182495, -4.338540077209473], + [-3.4338462352752686, -1.88246750831604], + [0.2265353500843048, 2.2259814739227295], + [-1.175789713859558, 10.491578102111816], + [-0.4012235105037689, 0.5794200897216797], + [-0.5778149962425232, 9.962772369384766], + [0.6111846566200256, -8.45567798614502], + [-1.8432272672653198, -0.618130624294281], + [4.191847324371338, 7.302956581115723], + [-3.2996938228607178, -0.7572001218795776], + [0.44860637187957764, -7.2243757247924805], + [0.8303753733634949, -5.112776279449463], + [-2.4223053455352783, -0.5065720081329346], + [-0.5705745816230774, 9.935798645019531], + [-3.9698688983917236, -3.1245524883270264], + [-4.649694919586182, -3.6405293941497803], + [-1.4625132083892822, 11.92300033569336], + [-3.6873233318328857, -1.465206503868103], + [2.8825583457946777, -5.15962028503418], + [-4.363930702209473, -2.0939149856567383], + [-1.9285175800323486, 2.175938367843628], + [-3.3993608951568604, -2.476114511489868], + [2.2272555828094482, -4.138426303863525], + [0.8041359186172485, -6.122943878173828], + [5.422277927398682, -3.8461549282073975], + [-0.8288776278495789, -2.614820957183838], + [-3.2565255165100098, 4.916468620300293], + [-1.1897844076156616, 0.778753399848938], + [-1.434073567390442, 12.378768920898438], + [6.922145843505859, -2.8084161281585693], + [-3.16103196144104, 5.326017379760742], + [-3.293459177017212, -0.990404486656189], + [-3.715341091156006, -1.815205693244934], + [-2.4711501598358154, 2.5295016765594482], + [0.6228395104408264, -8.397705078125], + [-3.9493954181671143, -1.6863762140274048], + [-3.8914124965667725, -0.517536997795105], + [-1.6477255821228027, 1.2006012201309204], + [2.299409866333008, -4.008002281188965], + [-5.1957292556762695, -3.4546282291412354], + [6.8650078773498535, -3.2365658283233643], + [0.5968443155288696, -8.621769905090332], + [-0.59097820520401, 9.087138175964355], + [0.9431833624839783, -4.967459678649902], + [0.3335663676261902, -7.0542755126953125], + [-0.5129750967025757, -0.8852516412734985], + [-0.4444838762283325, 10.364469528198242], + [0.5361884236335754, -0.7588651180267334], + [0.6664780974388123, -9.257698059082031], + [7.197089672088623, -2.8221256732940674], + [0.44162219762802124, -6.024785041809082], + [-1.8358935117721558, 0.7595739364624023], + [-1.2996183633804321, 10.738441467285156], + [-3.0647828578948975, 6.024267673492432], + [-0.39897167682647705, 9.966419219970703], + [-0.1394404172897339, 9.584233283996582], + [0.6716238856315613, -8.459802627563477], + [3.068237543106079, -4.974164962768555], + [3.806384563446045, 6.873908042907715], + [5.9248881340026855, -1.7594873905181885], + [-1.021226406097412, 2.6976583003997803], + [-2.9551637172698975, -0.863539457321167], + [1.516718864440918, 0.5752242803573608], + [-0.9113679528236389, 10.718303680419922], + [0.5687745213508606, -7.907881736755371], + [-3.2230489253997803, -1.2881258726119995], + [-1.4661037921905518, 5.615649700164795], + [-1.230076551437378, 11.129722595214844], + [-0.3518064618110657, 9.88503360748291], + [2.2686169147491455, 4.077040672302246], + [0.7738375663757324, -1.6299341917037964], + [2.1287600994110107, 0.606372058391571], + [1.9995739459991455, 5.058562755584717], + [-1.199099063873291, 1.4908024072647095], + [0.5486947298049927, -7.265843868255615], + [-0.029233165085315704, -1.1826906204223633], + [0.41577470302581787, -4.8868408203125], + [-3.4947240352630615, -2.4716310501098633], + [0.8041415214538574, -6.4387054443359375], + [-1.3629604578018188, 12.31766128540039], + [0.5595502257347107, -6.462855339050293], + [3.0949387550354004, -4.864381790161133], + [5.795767307281494, -1.4690428972244263], + [-0.43604081869125366, -0.9883720278739929], + [5.202643871307373, -3.4808859825134277], + [0.2636308968067169, -5.136631965637207], + [-4.203700542449951, -3.377387762069702], + [-3.4112155437469482, -1.0416288375854492], + [0.34889447689056396, -5.9723711013793945], + [-1.7895256280899048, 0.6266672611236572], + [-1.5915993452072144, -0.8340955972671509], + [7.122677326202393, -2.5229830741882324], + [0.29930323362350464, -5.191722393035889], + [-4.436882972717285, -0.6642584800720215], + [-1.726931095123291, 1.2873132228851318], + [6.018709659576416, -3.2650930881500244], + [-3.6739046573638916, 7.138570785522461], + [-5.411142349243164, 7.010839462280273], + [2.6041457653045654, 4.686212539672852], + [-5.126542091369629, 7.412988662719727], + [-1.172058343887329, 10.586450576782227], + [8.152520179748535, -2.473461866378784], + [1.2132868766784668, 4.439706802368164], + [1.957460880279541, 1.6739343404769897], + [-0.8854948282241821, 9.543876647949219], + [-5.770033359527588, 5.409470558166504], + [-1.5762064456939697, 12.144145011901855], + [3.1252338886260986, -5.014065265655518], + [2.2596685886383057, -4.409388542175293], + [-0.780699610710144, 9.750602722167969], + [-3.6251518726348877, -1.9576219320297241], + [-2.149826765060425, 0.3361704647541046], + [-0.07709921151399612, -4.155516624450684], + [1.2651774883270264, 3.7629101276397705], + [2.5184900760650635, -4.423803806304932], + [2.1487340927124023, 0.9282838702201843], + [4.333138942718506, 7.557384967803955], + [-1.0734816789627075, 10.531023025512695], + [-4.228753089904785, -2.923779249191284], + [1.6504532098770142, 2.178354501724243], + [0.5656533241271973, -0.6534314155578613], + [-0.8076633810997009, 10.067628860473633], + [-4.3078765869140625, -0.040574852377176285], + [-4.25614595413208, -1.3887826204299927], + [1.3645299673080444, 3.1171300411224365], + [0.3053469657897949, -6.715358257293701], + [0.6509436964988708, -7.752269268035889], + [8.278502464294434, -2.5077223777770996], + [7.431888580322266, -2.310854911804199], + [-1.0774668455123901, 10.806156158447266], + [-5.06381368637085, -0.5303752422332764], + [-3.362868547439575, -1.5555857419967651], + [0.9456847310066223, -5.87087345123291], + [-2.9550163745880127, 4.862101078033447], + [7.380405902862549, -2.5255801677703857], + [-4.077826023101807, -2.991551399230957], + [3.0826027393341064, -4.78075647354126], + [5.571404933929443, -2.905078887939453], + [-5.34495210647583, 5.18072509765625], + [-1.057612657546997, 1.2258411645889282], + [-1.6706544160842896, 1.456175684928894], + [-4.097386837005615, -1.899956226348877], + [-4.1637773513793945, -1.3409136533737183], + [-4.82431173324585, 4.648453712463379], + [7.734848499298096, -2.7797982692718506], + [-3.8589134216308594, -0.9177802205085754], + [1.4272801876068115, 4.346076965332031], + [-1.3114707469940186, 1.7279962301254272], + [3.756256341934204, -5.582301139831543], + [2.5987658500671387, -4.334320545196533], + [2.5672008991241455, -4.881204605102539], + [-0.8839712142944336, 10.805431365966797], + [0.3958625793457031, 0.36497145891189575], + [1.9917371273040771, 4.598115921020508], + [0.43555283546447754, -4.679111480712891], + [-0.7512980699539185, 10.358454704284668], + [-4.644839286804199, -0.6852068901062012], + [2.809461832046509, -4.471428871154785], + [-1.8536168336868286, 1.7207908630371094], + [2.6386022567749023, 6.073709011077881], + [0.6885676980018616, -8.668645858764648], + [-3.3246777057647705, -2.558530807495117], + [0.5354766249656677, -7.42926025390625], + [0.4809492230415344, -6.304076194763184], + [1.318795084953308, -0.004847098141908646], + [-4.116955280303955, -1.0579262971878052], + [1.1035771369934082, 1.3985278606414795], + [-4.928904056549072, 4.599661350250244], + [6.602746486663818, -3.595778465270996], + [-1.4582295417785645, 12.251516342163086], + [0.514965295791626, 3.911820888519287], + [-0.17133301496505737, 8.93120002746582], + [0.6640025973320007, -7.610358715057373], + [-3.4996325969696045, -3.529714345932007], + [3.0709590911865234, -5.110280513763428], + [-0.09833911806344986, -2.930011034011841], + [-4.033926010131836, -2.780794858932495], + [1.6252501010894775, 2.314542293548584], + [-1.2410162687301636, 10.884561538696289], + [0.7526704668998718, -8.911540985107422], + [2.454312562942505, 5.946880340576172], + [-1.4483336210250854, 12.396411895751953], + [2.092526435852051, 3.414156198501587], + [-3.7014963626861572, -2.323092460632324], + [-1.3124788999557495, 1.4942834377288818], + [2.0010883808135986, 4.583993434906006], + [6.858705520629883, -2.1481735706329346], + [-2.0477230548858643, 2.2165846824645996], + [-0.14774441719055176, -1.6618081331253052], + [0.5621662735939026, -8.170862197875977], + [-1.8829739093780518, 2.259463310241699], + [1.7620879411697388, 5.239327430725098], + [-1.9642970561981201, 2.93005108833313], + [-1.1572993993759155, 10.807981491088867], + [-3.8374202251434326, 5.975442409515381], + [1.5623880624771118, -4.635660171508789], + [0.7527122497558594, -8.65798568725586], + [-1.7726174592971802, 0.9630039930343628], + [0.6187868714332581, -8.227164268493652], + [0.5009451508522034, -6.79041051864624], + [-1.2157645225524902, 10.862377166748047], + [0.5908699035644531, -3.4801156520843506], + [0.9579389691352844, -0.5488126277923584], + [-3.5640387535095215, -1.1437920331954956], + [0.3518361449241638, -5.444130897521973], + [-1.0496137142181396, 10.81878662109375], + [1.6629098653793335, 4.907820224761963], + [0.15464523434638977, -0.9529021382331848], + [-3.1677091121673584, -0.8414826393127441], + [-4.982268333435059, 6.811321258544922], + [1.7567927837371826, -5.320281028747559], + [-3.576920509338379, -1.2052584886550903], + [0.7004924416542053, -5.975004196166992], + [2.3922274112701416, -4.016541004180908], + [-0.08281979709863663, -3.857250452041626], + [0.3930826485157013, -5.149380207061768], + [-4.444169521331787, -0.8077073097229004], + [0.35255658626556396, -6.348119735717773], + [6.408610820770264, -1.3765777349472046], + [3.5757534503936768, 6.639068603515625], + [5.144066333770752, -1.3394571542739868], + [-5.792545318603516, 4.989941120147705], + [-1.2120801210403442, 1.1557337045669556], + [-0.4361230731010437, 9.611608505249023], + [0.1693996787071228, -3.0524392127990723], + [0.6543053388595581, -8.655200004577637], + [7.19502067565918, -3.50183367729187], + [-1.3596034049987793, 11.330223083496094], + [0.012374095618724823, -3.7728798389434814], + [2.696216106414795, -4.589870452880859], + [2.2319674491882324, 6.175949573516846], + [6.006886959075928, -1.9826329946517944], + [1.8853203058242798, 0.0021380148828029633], + [0.6764479279518127, -5.913618564605713], + [2.540562868118286, 4.485607624053955], + [-2.6418983936309814, 0.316835880279541], + [0.37491947412490845, -5.4028801918029785], + [-2.873502492904663, -1.2806384563446045], + [1.5569963455200195, 0.23127222061157227], + [1.216029167175293, -5.3364715576171875], + [0.5238478779792786, -0.23562496900558472], + [-1.4111809730529785, 0.630497932434082], + [1.0828824043273926, -7.345193862915039], + [-4.680751800537109, -1.2468425035476685], + [-2.11694073677063, 2.9591004848480225], + [-2.3905274868011475, -1.3232089281082153], + [-3.3800528049468994, -2.024837017059326], + [-3.5847091674804688, -2.190345525741577], + [0.13336467742919922, -5.3655195236206055], + [7.6505608558654785, -2.6702215671539307], + [1.4139211177825928, 1.4860332012176514], + [-1.2869335412979126, 11.405540466308594], + [2.729708194732666, -4.288688659667969], + [-2.5017573833465576, -0.9402679204940796], + [-0.8759739398956299, 9.365802764892578], + [6.056789875030518, 8.75197982788086], + [-2.8765971660614014, -1.3176627159118652], + [-3.7042911052703857, -2.065586566925049], + [8.536486625671387, -2.913163900375366], + [-1.2158375978469849, 11.410874366760254], + [0.0968003198504448, -5.78440523147583], + [4.564459323883057, -4.0243377685546875], + [9.562106132507324, -2.9007482528686523], + [6.7016282081604, -2.7795212268829346], + [0.995008647441864, 5.879757881164551], + [2.1277284622192383, -5.4743266105651855], + [0.5174749493598938, -3.939246654510498], + [-4.538531303405762, -4.458526611328125], + [-0.025305695831775665, -4.243556976318359], + [-3.460792303085327, 1.590489387512207], + [2.458343744277954, -3.929915428161621], + [2.794956684112549, -4.770933628082275], + [7.07198429107666, -3.8613879680633545], + [-4.666105270385742, -1.1826785802841187], + [-1.6891907453536987, 1.9757763147354126], + [0.2084137201309204, -4.652944564819336], + [1.6116881370544434, 4.008583068847656], + [-2.9715678691864014, -0.9985457062721252], + [8.34964656829834, -2.56687331199646], + [7.9031291007995605, -2.7602617740631104], + [-3.0951015949249268, -1.5994101762771606], + [2.9502649307250977, -4.700808048248291], + [-1.3531088829040527, 1.2343062162399292], + [-3.3873538970947266, -1.7619181871414185], + [-6.321506977081299, -1.0646291971206665], + [-5.188480377197266, 4.082911968231201], + [-4.556843280792236, -3.6286983489990234], + [-5.171967029571533, -0.818085253238678], + [5.220132827758789, 8.114969253540039], + [0.7811865210533142, -7.420600891113281], + [9.233294486999512, -2.8219892978668213], + [2.836690664291382, -4.761178493499756], + [0.6212175488471985, 5.474606513977051], + [7.245193958282471, -2.823023796081543], + [8.231343269348145, -2.9490201473236084], + [0.6992600560188293, -8.92919921875], + [7.318252086639404, -2.137916326522827], + [-3.8151252269744873, 2.4316043853759766], + [0.48091286420822144, -6.720144271850586], + [1.9610121250152588, -7.782376766204834], + [2.8583812713623047, -4.540701866149902], + [-2.778353691101074, 3.2093658447265625], + [8.965907096862793, -3.4014432430267334], + [7.425389289855957, -2.42006254196167], + [3.10625958442688, -5.291807174682617], + [-1.3020706176757812, 11.265936851501465], + [-1.5904011726379395, 13.194122314453125], + [2.418848991394043, -4.141463279724121], + [2.6561920642852783, -4.892067909240723], + [-5.977177143096924, 8.071748733520508], + [0.6083351373672485, -4.534191131591797], + [6.670668125152588, -5.51362419128418], + [-0.936390221118927, -0.9736589193344116], + [1.33266019821167, 4.261105537414551], + [-4.077866077423096, -2.5315065383911133], + [1.7328506708145142, 5.259753227233887], + [0.21924126148223877, -5.004592418670654], + [-3.935297966003418, 6.1370673179626465], + [-3.7670416831970215, -1.9670335054397583], + [0.6971312165260315, -0.7355822324752808], + [-1.3749381303787231, -3.1435916423797607], + [0.6300010681152344, -8.592904090881348], + [0.4824211597442627, -7.27508020401001], + [0.6823586225509644, -9.121442794799805], + [5.6980509757995605, -2.1614856719970703], + [-4.684483051300049, -0.7343212366104126], + [0.5250436663627625, -8.424665451049805], + [-3.998349905014038, 1.5849658250808716], + [0.25173139572143555, -5.188947677612305], + [1.595339059829712, -5.055632591247559], + [-6.041881561279297, 4.872978210449219], + [-1.0319230556488037, 10.478717803955078], + [-3.554049253463745, 5.768035888671875], + [-1.8020137548446655, 1.3216534852981567], + [-1.2273049354553223, 11.187564849853516], + [6.8831400871276855, -3.6137280464172363], + [0.6492670178413391, -5.699978828430176], + [-0.7641168832778931, 10.169403076171875], + [5.244647979736328, -2.603532552719116], + [5.963305950164795, -2.41628098487854], + [-3.5589256286621094, 6.7739949226379395], + [-3.640176773071289, 6.619329452514648], + [-1.5811821222305298, 1.422569751739502], + [1.858715534210205, -4.928473472595215], + [0.5495983958244324, -6.869370460510254], + [0.37613075971603394, -5.45369815826416], + [0.4050533175468445, -4.863668918609619], + [-0.9734894633293152, 9.834774017333984], + [-5.175796985626221, -1.0591554641723633], + [-1.7802479267120361, 0.9281343221664429], + [0.6530165076255798, -4.615462303161621], + [1.018604040145874, -6.120482444763184], + [2.18182635307312, 4.631473541259766], + [1.1502411365509033, -6.983063697814941], + [1.550262212753296, -0.10156455636024475], + [6.726673126220703, -1.8978444337844849], + [1.1043639183044434, -0.2937948703765869], + [-0.2748705744743347, 8.372655868530273], + [0.631438672542572, -7.756603240966797], + [-3.164370059967041, -0.8767802715301514], + [-4.099869251251221, 6.940075874328613], + [-4.010438442230225, -2.7517971992492676], + [1.874323844909668, -4.856762886047363], + [0.17576533555984497, -4.835538864135742], + [-1.0897477865219116, 1.381038784980774], + [0.3991435170173645, -6.835343360900879], + [6.931522369384766, -2.2433621883392334], + [2.7781331539154053, -4.589195728302002], + [-3.0195415019989014, -1.2885318994522095], + [-2.9574756622314453, 4.277968406677246], + [-0.9540485143661499, 1.0820574760437012], + [-3.4462296962738037, -1.8521782159805298], + [-4.629634380340576, 1.7722101211547852], + [6.1109395027160645, -2.569289445877075], + [1.1415809392929077, -6.889502048492432], + [1.174795150756836, 4.655338287353516], + [-2.1200952529907227, 2.0080158710479736], + [1.933772325515747, 0.3539317846298218], + [-2.1684062480926514, 2.599733591079712], + [0.7403852939605713, -7.891613006591797], + [-4.715630054473877, -0.5852388739585876], + [0.1447570025920868, -4.550936698913574], + [-3.526268243789673, -1.3486510515213013], + [-4.570362567901611, 6.996828079223633], + [-4.339561462402344, 6.0664520263671875], + [0.4068076014518738, -7.124039173126221], + [0.627528727054596, -7.824062347412109], + [2.699838876724243, -4.410862445831299], + [0.5589714646339417, -7.090198993682861], + [6.128566741943359, -2.853341817855835], + [8.95914363861084, -2.7521722316741943], + [2.4883477687835693, -4.906047344207764], + [6.156027793884277, -2.147531270980835], + [-3.852154493331909, -2.0034024715423584], + [2.4692630767822266, 6.16917610168457], + [2.1252458095550537, -5.26145076751709], + [1.413904070854187, -5.389472961425781], + [2.568215847015381, 3.9360930919647217], + [-0.42352551221847534, 9.38070297241211], + [-3.7831175327301025, -1.1218918561935425], + [0.7506428956985474, -6.1869659423828125], + [-4.234447956085205, 4.312247276306152], + [1.854673981666565, -4.495473861694336], + [-3.931145668029785, -2.5333125591278076], + [-0.8580189943313599, 10.218223571777344], + [3.006882905960083, 6.226954460144043], + [-1.84285569190979, 1.420280933380127], + [0.8841196298599243, -5.300271987915039], + [-1.2699730396270752, 11.568340301513672], + [5.5542402267456055, -2.4499971866607666], + [0.44990652799606323, -7.664003849029541], + [-0.1775297224521637, -1.2336289882659912], + [-4.8856377601623535, -3.4252688884735107], + [2.735492706298828, -4.620632648468018], + [-4.377376556396484, 6.861682415008545], + [-1.2440298795700073, 11.554094314575195], + [7.866154193878174, -2.7982428073883057], + [-0.15513131022453308, -2.8455302715301514], + [-3.177129030227661, -3.17010760307312], + [-2.028435230255127, 1.8563426733016968], + [-0.8852747082710266, -2.140728712081909], + [-1.2146703004837036, 11.50906753540039], + [-0.5039737820625305, -1.0201348066329956], + [-2.1690268516540527, 2.8972434997558594], + [-4.027702331542969, 5.696377754211426], + [-1.8774527311325073, 1.808801293373108], + [-3.2117743492126465, 2.587224245071411], + [-3.1633267402648926, -2.5490691661834717], + [-3.968510866165161, -1.8723076581954956], + [0.8968997597694397, -7.505453109741211], + [-4.672436714172363, 5.467077732086182], + [-5.4907307624816895, 6.32177209854126], + [0.5351378917694092, -5.0908427238464355], + [-4.96681547164917, -4.228494167327881], + [-1.1858323812484741, 10.910920143127441], + [-4.431010723114014, -1.4548999071121216], + [-3.247835397720337, -1.7820603847503662], + [-2.9120967388153076, -1.8511465787887573], + [-2.0391104221343994, 2.1483938694000244], + [-4.090366363525391, -1.38237726688385], + [6.014880180358887, -1.1760669946670532], + [1.6225801706314087, 0.12820419669151306], + [2.354217767715454, 5.140957832336426], + [-6.046804904937744, 5.783246994018555], + [1.3661490678787231, -5.203709125518799], + [-3.692025899887085, -1.1287025213241577], + [0.6712637543678284, -8.944109916687012], + [0.4547792673110962, -7.314750671386719], + [-5.244754314422607, -0.7323547601699829], + [5.285579204559326, -3.1359140872955322], + [-1.1858829259872437, 11.036316871643066], + [7.906938076019287, -2.562039852142334], + [2.7902674674987793, 5.572319984436035], + [6.733234882354736, -1.830259919166565], + [-1.9338027238845825, 0.5709778666496277], + [0.6195594072341919, -6.630500316619873], + [-1.243922472000122, 12.068012237548828], + [2.889796733856201, -4.487259864807129], + [-1.283922791481018, 1.6882704496383667], + [0.9722475409507751, -0.11851441860198975], + [1.5303680896759033, -4.923491477966309], + [9.692639350891113, -3.024963140487671], + [2.8461906909942627, -4.776479721069336], + [-0.15300679206848145, 5.305532455444336], + [0.6335245370864868, -6.597538948059082], + [1.096733570098877, -0.406939834356308], + [-0.6154043674468994, 9.8767728805542], + [0.7399525046348572, -8.540189743041992], + [2.5364389419555664, -5.473899841308594], + [-1.4399508237838745, 12.715471267700195], + [1.806327223777771, -5.345383644104004], + [-5.300512790679932, 4.287354469299316], + [1.2925257682800293, -5.514167785644531], + [-3.232706308364868, -1.0590373277664185], + [-2.6859796047210693, 4.885764122009277], + [7.289627552032471, -2.353478193283081], + [-3.7548415660858154, -0.8425759077072144], + [-3.8754208087921143, -2.074775218963623], + [-1.5859460830688477, -2.619858741760254], + [-2.8337113857269287, -1.4858776330947876], + [-3.2812860012054443, 5.191337585449219], + [7.173979759216309, -2.611403703689575], + [6.540700912475586, -2.236426591873169], + [-3.687405824661255, -1.6930872201919556], + [-2.1088461875915527, -2.528294801712036], + [-0.7351130247116089, -1.5990945100784302], + [0.8794179558753967, -7.374571800231934], + [2.586531162261963, -4.943260192871094], + [7.075569152832031, -2.635089635848999], + [0.13405567407608032, -3.8996737003326416], + [1.0409859418869019, 1.5940912961959839], + [-1.8863935470581055, -0.4148266911506653], + [5.857480049133301, -2.7813515663146973], + [-3.8235349655151367, -1.4953876733779907], + [-3.5867867469787598, -1.3707057237625122], + [5.330624580383301, 8.34719467163086], + [-4.765824794769287, 6.90277099609375], + [1.910712480545044, 4.6502604484558105], + [0.5561703443527222, -0.5105379223823547], + [7.333683013916016, -3.9507577419281006], + [7.830699443817139, -2.3522942066192627], + [-2.012840747833252, 1.7757532596588135], + [0.41767817735671997, -4.84227180480957], + [-2.09177827835083, 2.0247159004211426], + [0.7723590731620789, -6.708493709564209], + [0.29071682691574097, -6.263541221618652], + [-4.1536641120910645, -1.1615902185440063], + [2.8603975772857666, -4.682411193847656], + [9.059589385986328, -2.9019625186920166], + [-4.184852123260498, -2.202921152114868], + [0.5317927598953247, -7.0191802978515625], + [-4.346553325653076, 2.158327341079712], + [0.7625764012336731, -6.96205997467041], + [-4.21471643447876, -2.031482696533203], + [-5.267904758453369, 2.940066337585449], + [-1.699601173400879, 1.257778525352478], + [-1.344590425491333, 12.024773597717285], + [2.8510735034942627, -4.943033695220947], + [-2.4156391620635986, -3.478196859359741], + [-1.615585446357727, 4.283594131469727], + [0.6945578455924988, -8.091636657714844], + [0.2975216209888458, 1.1178926229476929], + [-3.759429931640625, -1.1134291887283325], + [-4.920132160186768, -0.9146947860717773], + [-4.097968578338623, -1.033990502357483], + [7.823238849639893, -2.4857752323150635], + [0.7750516533851624, -7.478429794311523], + [-0.6221563220024109, 10.02252197265625], + [1.7272913455963135, 0.9950846433639526], + [5.64605188369751, -1.2631441354751587], + [-4.607005596160889, -0.30711185932159424], + [2.7649574279785156, -4.927921772003174], + [6.572070598602295, -4.373666763305664], + [0.19186189770698547, -3.6094067096710205], + [-0.3515894412994385, 9.458684921264648], + [-4.013064384460449, -2.358738660812378], + [0.6698713898658752, -7.059496879577637], + [-5.204209804534912, -1.073229432106018], + [0.9854291081428528, -4.552667617797852], + [3.6945102214813232, 6.561709880828857], + [5.534897327423096, -1.1781572103500366], + [0.7186790108680725, -8.902414321899414], + [-5.256405353546143, 7.09153938293457], + [-5.311498165130615, 6.176821708679199], + [5.8353657722473145, -2.0397212505340576], + [-1.0968538522720337, 10.889870643615723], + [-0.8886433839797974, 10.536880493164062], + [2.855712652206421, -5.359982013702393], + [0.7428659796714783, -6.9690093994140625], + [8.439298629760742, -3.2132551670074463], + [0.6831823587417603, -8.139881134033203], + [-0.281094491481781, 8.142904281616211], + [4.013922691345215, 7.215035438537598], + [-4.378009796142578, 0.26182228326797485], + [-4.442413330078125, 6.843837738037109], + [0.5994594097137451, -7.475461959838867], + [0.333797812461853, -4.390484809875488], + [-4.039051532745361, 5.442829132080078], + [-2.4864935874938965, 5.181648254394531], + [0.7422021627426147, -4.383729934692383], + [-3.6468894481658936, 3.904437780380249], + [2.7454981803894043, -4.569182395935059], + [-2.9555814266204834, -1.0911234617233276], + [7.583010196685791, -2.7850162982940674], + [1.1312074661254883, -3.3968942165374756], + [4.382365703582764, 7.359814643859863], + [-3.307931423187256, 4.03449010848999], + [-1.2739686965942383, -3.051058769226074], + [-3.310192346572876, -2.973328113555908], + [2.206017255783081, 5.5569281578063965], + [-4.160388469696045, -2.946056604385376], + [-0.32532554864883423, 8.984039306640625], + [-0.6957239508628845, 9.745351791381836], + [-1.1654683351516724, 11.628811836242676], + [-5.629790782928467, 6.269530773162842], + [-0.23335307836532593, -1.1194416284561157], + [9.041972160339355, -2.842562437057495], + [-1.1176081895828247, 10.018505096435547], + [0.42834872007369995, -5.332400798797607], + [0.006475679576396942, 8.929997444152832], + [-1.8317320346832275, 2.4316868782043457], + [-1.3401902914047241, 11.521833419799805], + [-3.412355899810791, 5.367212295532227], + [-1.1930291652679443, 10.892730712890625], + [2.290095329284668, -6.270270347595215], + [-2.1056387424468994, -0.9120016098022461], + [1.817875623703003, 1.5134508609771729], + [-1.4484505653381348, -1.400673270225525], + [7.459527969360352, -2.552978992462158], + [3.7848427295684814, 6.673778057098389], + [0.4003937244415283, -7.464807510375977], + [-1.387617826461792, 11.755380630493164], + [-3.529109001159668, -0.9669880270957947], + [-0.49949902296066284, 9.86302661895752], + [-1.0203815698623657, 7.814795017242432], + [-0.47716960310935974, -1.3843530416488647], + [-0.47787272930145264, 9.04229736328125], + [1.860310673713684, -4.224038600921631], + [-4.048509120941162, -3.985306739807129], + [1.865911602973938, 5.538713455200195], + [7.089613437652588, -2.121725559234619], + [2.120147228240967, 1.0961494445800781], + [2.068408727645874, 0.37700772285461426], + [1.3095452785491943, 0.23009786009788513], + [2.929619789123535, -4.726490020751953], + [2.4213263988494873, -4.9917449951171875], + [-4.024898052215576, -1.0522619485855103], + [-1.2569023370742798, 0.6998316049575806], + [-1.0617802143096924, 10.947349548339844], + [-3.3870415687561035, -2.0601248741149902], + [-1.4820284843444824, 12.487822532653809], + [-1.3351560831069946, 0.9077084064483643], + [0.20625948905944824, -5.169486999511719], + [5.9670233726501465, -1.8367302417755127], + [-1.8863345384597778, 1.4271706342697144], + [0.6915884017944336, -8.083059310913086], + [-1.1469120979309082, -3.011953115463257], + [2.8573007583618164, -4.456634521484375], + [0.4648773670196533, -5.676662921905518], + [3.965632677078247, 7.1788105964660645], + [-0.7527021765708923, 10.027363777160645], + [0.10577771812677383, -1.522321343421936], + [0.07898002117872238, -5.572148323059082], + [-2.5719809532165527, -1.4373348951339722], + [2.659590244293213, -5.980934143066406], + [-0.7021227478981018, 6.579158782958984], + [-5.681018352508545, 5.016870498657227], + [0.8720832467079163, -4.6512041091918945], + [7.823497295379639, -2.31194806098938], + [-5.078969955444336, 5.760243892669678], + [1.530400276184082, 2.923811197280884], + [-3.522461175918579, -1.6284974813461304], + [8.390915870666504, -3.2464261054992676], + [-3.627678632736206, -0.9025077819824219], + [-2.989691972732544, 3.38010835647583], + [9.002191543579102, -2.7427053451538086], + [8.85177230834961, -2.861199140548706], + [6.478879928588867, -1.6533786058425903], + [0.30830979347229004, -5.8947038650512695], + [8.100300788879395, -2.9472784996032715], + [1.9582874774932861, 0.7320051193237305], + [-1.4031462669372559, 1.0415360927581787], + [2.481008768081665, -4.822301864624023], + [6.353265762329102, -1.6975791454315186], + [0.7210173606872559, -6.883343696594238], + [-1.9442331790924072, 2.208805561065674], + [-4.034379482269287, -0.25465404987335205], + [1.0946506261825562, -5.4534010887146], + [-0.7727900147438049, 10.359848022460938], + [-1.6728135347366333, 1.5622292757034302], + [-0.8054625391960144, 10.397035598754883], + [-4.028106212615967, 5.698119163513184], + [2.048232316970825, 5.7224884033203125], + [2.616466760635376, -4.738088607788086], + [-0.5346099138259888, -2.4148972034454346], + [-3.322145938873291, -1.3612703084945679], + [-3.647413969039917, -0.9719799757003784], + [-1.0354013442993164, 11.211797714233398], + [5.852109909057617, 8.834724426269531], + [2.414537191390991, 3.937804937362671], + [-1.3969686031341553, 0.6679860949516296], + [0.548176109790802, -7.555874824523926], + [-3.186304807662964, -0.9208475351333618], + [-3.689180850982666, -2.6115381717681885], + [-1.3476641178131104, 12.149391174316406], + [1.7208809852600098, -6.131173133850098], + [6.326849460601807, -3.9792678356170654], + [-1.790535807609558, 1.706669807434082], + [0.7241145968437195, -8.991493225097656], + [0.7312315106391907, -8.846781730651855], + [7.125761985778809, -3.477323055267334], + [0.44709455966949463, -6.620143890380859], + [-1.3002076148986816, -0.15379253029823303], + [7.2349982261657715, -2.1079599857330322], + [-0.010608144104480743, 8.418996810913086], + [2.6623849868774414, -4.24934196472168], + [0.6963262557983398, -5.707479476928711], + [-0.8397123217582703, 10.471571922302246], + [-3.088503122329712, -1.0786478519439697], + [-0.7925118207931519, 10.540855407714844], + [-3.506065607070923, 4.922954082489014], + [7.022932052612305, -1.9169796705245972], + [-3.598270893096924, -1.297194004058838], + [-1.887316107749939, 2.3620645999908447], + [2.7700390815734863, -4.293556213378906], + [-1.0045075416564941, 10.445661544799805], + [0.4918612241744995, -6.842559814453125], + [5.752006530761719, -1.2119933366775513], + [-3.6181766986846924, -1.856187343597412], + [0.34933722019195557, 3.503375291824341], + [0.8524705171585083, -4.169291973114014], + [-3.9140889644622803, 3.0859477519989014], + [-2.6070785522460938, 2.730273723602295], + [0.40565240383148193, -6.917747497558594], + [-5.650356769561768, 7.3198018074035645], + [2.608123302459717, -4.533447742462158], + [6.037355899810791, -3.467087745666504], + [-4.131103038787842, -0.9617477655410767], + [-0.4393327236175537, 9.339862823486328], + [-3.5506527423858643, -0.6982116103172302], + [0.8691228032112122, -0.39376959204673767], + [-5.703348636627197, 7.235809326171875], + [-5.541368007659912, 5.820168972015381], + [0.5825690627098083, -7.977958679199219], + [-5.652484893798828, 5.131500720977783], + [-4.65995979309082, -4.241482734680176], + [-0.5756743550300598, 9.422462463378906], + [-2.9107587337493896, 3.004054307937622], + [-5.219288349151611, -1.2509304285049438], + [-4.714038848876953, -4.258466720581055], + [-1.830357313156128, 1.4279499053955078], + [-0.2826290726661682, -1.9057793617248535], + [1.5766993761062622, -6.68215799331665], + [-4.401371479034424, 6.328957557678223], + [-3.4407498836517334, -2.3846166133880615], + [3.0530107021331787, 6.362174987792969], + [-4.128109931945801, 4.840629577636719], + [-4.356558322906494, -0.9079149961471558], + [2.525954484939575, -5.625449180603027], + [-3.272838592529297, 6.047044277191162], + [2.105548620223999, 4.11646032333374], + [5.303320407867432, 7.974814414978027], + [-1.0052450895309448, -2.148655652999878], + [1.1125565767288208, -5.87838077545166], + [-1.9500147104263306, -0.6318909525871277], + [1.5499331951141357, -6.514523506164551], + [5.812084674835205, -2.9288735389709473], + [-1.832988977432251, 1.2787449359893799], + [2.423811197280884, -5.208057403564453], + [1.0599613189697266, 5.889157295227051], + [-2.504561424255371, -1.1982530355453491], + [-2.7105298042297363, -1.170379638671875], + [-3.47794771194458, -1.2673532962799072], + [-3.4951703548431396, -1.4310147762298584], + [8.118371963500977, -2.5502450466156006], + [4.606622219085693, 7.588197708129883], + [0.6867303848266602, -8.61294174194336], + [-3.0008962154388428, -1.693365454673767], + [-3.78387188911438, -1.1749049425125122], + [-0.3910871744155884, 4.579216957092285], + [7.758407115936279, -2.3586723804473877], + [2.922358274459839, -5.299674987792969], + [3.0153305530548096, -5.023159980773926], + [0.39724165201187134, -6.434640884399414], + [4.603679180145264, 7.364890098571777], + [2.582650899887085, 6.332762718200684], + [0.7202116847038269, -9.202314376831055], + [8.619677543640137, -2.612612247467041], + [2.166940927505493, -5.210209846496582], + [2.188636064529419, 5.452610492706299], + [-4.51802396774292, 3.4026567935943604], + [-1.8911725282669067, 1.4010225534439087], + [-1.3709782361984253, 0.6839256286621094], + [4.424920082092285, -6.125207901000977], + [7.746224880218506, -2.8555638790130615], + [-3.844172477722168, -1.7686282396316528], + [0.5347468852996826, -7.679115295410156], + [6.346817493438721, -2.8325767517089844], + [-4.968057155609131, -3.632739782333374], + [-3.296384572982788, -3.0976669788360596], + [-3.3888680934906006, -0.9116311073303223], + [-3.147921323776245, -3.4510467052459717], + [0.5312670469284058, -7.3194475173950195], + [5.604278087615967, -2.1529667377471924], + [-4.401168346405029, -3.1636078357696533], + [2.8881771564483643, -4.955650329589844], + [0.7376904487609863, -7.558011531829834], + [-0.728826105594635, 9.994955062866211], + [0.45916348695755005, -5.320530414581299], + [-4.67460823059082, 5.489091873168945], + [0.5413364768028259, -7.695542335510254], + [-3.420145273208618, -1.0297212600708008], + [0.499031662940979, 5.12575626373291], + [-0.4153331518173218, 0.5772603154182434], + [-0.9014299511909485, 9.702165603637695], + [-1.3913238048553467, 11.98670768737793], + [-4.748692512512207, 7.149994373321533], + [-0.5883711576461792, 9.245445251464844], + [8.431382179260254, -2.534263849258423], + [-4.205756664276123, 0.8460208177566528], + [1.4460961818695068, 0.40871453285217285], + [-1.3838778734207153, 12.082002639770508], + [-1.2181334495544434, 11.487188339233398], + [-0.1535305380821228, 0.20773082971572876], + [-4.0656890869140625, 3.2391743659973145], + [-3.431814432144165, 5.769101619720459], + [-0.4796231985092163, -1.2931013107299805], + [-4.570427417755127, -3.9264144897460938], + [2.163480281829834, 5.074234962463379], + [-4.930538654327393, -1.8353933095932007], + [-0.9091076850891113, 9.925542831420898], + [-3.19823956489563, -1.146836519241333], + [-0.6724703907966614, 10.566337585449219], + [0.12197225540876389, -5.147582530975342], + [-1.2368214130401611, 11.406389236450195], + [-3.406461477279663, -1.7777560949325562], + [-3.987314462661743, -0.9499354362487793], + [-5.163890361785889, -0.6563866138458252], + [1.7324490547180176, 0.2024156153202057], + [-4.096102237701416, -4.554536819458008], + [-3.1622276306152344, 5.405525207519531], + [-5.7680535316467285, 8.033102035522461], + [-4.152868270874023, -2.3558576107025146], + [1.5497773885726929, 2.635167360305786], + [-3.3225696086883545, -0.26070988178253174], + [2.378202199935913, 6.158736705780029], + [-4.3393354415893555, 3.3048503398895264], + [3.031961679458618, 6.441287040710449], + [-0.5258545875549316, 9.550920486450195], + [2.0969600677490234, 0.7520585060119629], + [6.622128009796143, -3.8175055980682373], + [7.167260646820068, -1.9797700643539429], + [3.492959499359131, -6.06511116027832], + [-0.809237539768219, 8.185070037841797], + [-4.683699607849121, 6.47714900970459], + [7.734251022338867, -2.4871013164520264], + [-3.638927698135376, -1.2524267435073853], + [1.4719014167785645, 4.11455774307251], + [-0.0878775492310524, -1.4127215147018433], + [-2.806859254837036, -1.6869686841964722], + [2.3185653686523438, -4.573127269744873], + [7.7785210609436035, -2.291147470474243], + [0.7100263237953186, -8.44760513305664], + [1.467245101928711, -4.5418243408203125], + [1.2255263328552246, 0.24589499831199646], + [-3.7304775714874268, -3.7035000324249268], + [4.529948711395264, -0.9748215079307556], + [3.477255344390869, 6.727356910705566], + [1.4132417440414429, 4.850055694580078], + [-5.025964260101318, -1.307675838470459], + [-3.6809380054473877, -1.8772916793823242], + [1.8990342617034912, -3.9115054607391357], + [2.064821481704712, 0.33165815472602844], + [2.824265241622925, 5.020869255065918], + [0.2445431351661682, 7.02085542678833], + [-5.815744400024414, 7.994295120239258], + [-2.5210464000701904, 2.319347620010376], + [-3.1924169063568115, -3.0341923236846924], + [-1.3452503681182861, 11.60405158996582], + [0.3485787510871887, -5.601568222045898], + [-3.871380567550659, 1.7217975854873657], + [8.191822052001953, -2.45740008354187], + [1.980466365814209, -5.229170322418213], + [-4.743655681610107, 7.034548759460449], + [0.715614378452301, -8.81660270690918], + [0.6817169189453125, -8.8607177734375], + [4.997381687164307, 7.957902908325195], + [2.531766653060913, 5.931854724884033], + [-1.628757357597351, 12.982624053955078], + [-2.764204740524292, -2.4120867252349854], + [0.7872897982597351, -9.326471328735352], + [-4.442033290863037, -3.5030314922332764], + [-2.204390525817871, -0.390762597322464], + [-4.526364803314209, -2.8229429721832275], + [-4.445540904998779, 5.848528861999512], + [-4.909473419189453, -1.9958350658416748], + [-3.0340487957000732, -0.8781461715698242], + [1.5942968130111694, 0.7125804424285889], + [-2.1021785736083984, -1.3298691511154175], + [-4.936834335327148, 6.884820938110352], + [2.5520331859588623, 6.254950523376465], + [-1.9423235654830933, 2.0018818378448486], + [-5.835949420928955, -0.7744562029838562], + [-1.06305730342865, 10.083646774291992], + [8.00610065460205, -2.4790451526641846], + [-1.048926591873169, -1.4020369052886963], + [-4.775303363800049, 6.328281879425049], + [6.917417049407959, -2.479064464569092], + [0.8008385300636292, -5.465865135192871], + [-1.3899778127670288, 11.770490646362305], + [-4.078405857086182, -2.6158130168914795], + [-1.1370422840118408, 10.894821166992188], + [-2.679250478744507, 2.8911080360412598], + [1.9024556875228882, 4.779266357421875], + [-1.8696225881576538, 2.05885910987854], + [1.991241216659546, 5.714236259460449], + [-0.38084888458251953, 8.857837677001953], + [0.807647168636322, -7.02744722366333], + [4.212839126586914, 7.389885902404785], + [-4.851314067840576, 6.6018452644348145], + [3.523566246032715, 6.579020023345947], + [0.5985087752342224, -8.384536743164062], + [6.091739654541016, -1.2562330961227417], + [1.0495637655258179, 0.7047106027603149], + [0.7180986404418945, -7.580714225769043], + [0.7943115234375, 0.48590368032455444], + [0.10382189601659775, -1.2814394235610962], + [6.745218276977539, -2.0340754985809326], + [-0.6859585642814636, 10.369073867797852], + [0.6948983073234558, -7.134704113006592], + [-3.797368288040161, -1.058787226676941], + [-4.62660551071167, 5.703129768371582], + [0.42359787225723267, -7.047712326049805], + [0.796859085559845, -7.287537574768066], + [0.3860366940498352, -7.1401777267456055], + [0.9001578092575073, -5.155206203460693], + [4.6239447593688965, -0.6831227540969849], + [-0.9571530222892761, 10.296651840209961], + [2.28233003616333, -4.272092819213867], + [0.5169962048530579, -4.4474687576293945], + [1.671018362045288, 1.4439877271652222], + [-3.7522294521331787, -1.8602811098098755], + [-0.27782565355300903, 9.724381446838379], + [-0.9437020421028137, -0.4001368284225464], + [-1.3941279649734497, 11.884195327758789], + [2.5174458026885986, -5.172396659851074], + [-2.409168004989624, -1.2220443487167358], + [3.605541706085205, -3.1637356281280518], + [1.5148844718933105, 1.3119133710861206], + [-1.5480608940124512, 12.302486419677734], + [-5.108682155609131, -2.096388339996338], + [-2.8480796813964844, -3.491764545440674], + [-1.530687689781189, 12.477324485778809], + [-4.997741222381592, 6.81016731262207], + [1.6156542301177979, 2.055457353591919], + [-3.7222912311553955, -1.2142256498336792], + [-0.36985862255096436, 6.529505252838135], + [-1.8819204568862915, 0.9397075176239014], + [1.9082446098327637, -4.048149108886719], + [0.6659067273139954, -6.420173645019531], + [1.0829215049743652, 1.5309208631515503], + [1.2936017513275146, -0.24130667746067047], + [-0.43811100721359253, -1.2922459840774536], + [-1.9916019439697266, 1.633021354675293], + [0.4976460337638855, -7.449884414672852], + [-1.3738532066345215, -3.3318464756011963], + [1.4536174535751343, -0.05167347565293312], + [0.4836961627006531, -7.489162445068359], + [1.7235424518585205, -6.645663738250732], + [0.7548591494560242, -9.449795722961426], + [4.352877616882324, 7.175258159637451], + [-3.831237316131592, -0.9644840955734253], + [-2.9395177364349365, -0.8179003596305847], + [-2.365720272064209, 0.5605906844139099], + [1.8419888019561768, -5.023563861846924], + [-2.616285562515259, 5.953922748565674], + [9.060771942138672, -3.3565189838409424], + [0.43913400173187256, -6.1202473640441895], + [0.7444287538528442, -8.222675323486328], + [-0.35057663917541504, -0.982168436050415], + [0.3993159532546997, -6.009702682495117], + [4.2816925048828125, 7.1724114418029785], + [-4.107670307159424, -0.5374042987823486], + [-4.924173355102539, 6.509038925170898], + [0.2782028913497925, -5.924836158752441], + [-2.898895502090454, 3.2396886348724365], + [2.5960114002227783, 5.680006980895996], + [0.9423808455467224, -0.17920222878456116], + [-2.964501142501831, -2.9615132808685303], + [1.5484611988067627, 5.359698295593262], + [-1.0937057733535767, 10.545839309692383], + [1.488817811012268, -4.231606483459473], + [2.9681079387664795, -4.857937812805176], + [0.9292258620262146, -6.926292896270752], + [-4.234747409820557, -2.9599616527557373], + [1.463529348373413, -5.61361026763916], + [-1.3014564514160156, 1.8911789655685425], + [-1.179702639579773, 11.236799240112305], + [5.364608287811279, -1.6126750707626343], + [-0.7820649743080139, 8.837766647338867], + [-3.6567909717559814, -1.3023194074630737], + [-4.887436389923096, 6.609719276428223], + [0.7331539392471313, -5.04542350769043], + [2.8129079341888428, 6.404007911682129], + [0.5216996669769287, -6.770530700683594], + [-3.205134153366089, 0.009195592254400253], + [2.789778232574463, -4.647729873657227], + [0.5384860634803772, -8.166194915771484], + [8.191451072692871, -2.7262659072875977], + [-4.396779537200928, -0.9311720132827759], + [0.5512920022010803, -7.072010040283203], + [0.5450869202613831, -7.136249542236328], + [1.6607424020767212, 3.88509202003479], + [0.7362313866615295, -9.130781173706055], + [-2.118056058883667, 1.817193865776062], + [-4.497096538543701, -1.0346288681030273], + [-5.0168962478637695, 6.834698677062988], + [-5.291133880615234, 7.219382286071777], + [2.0124881267547607, -5.6206536293029785], + [-1.5144391059875488, 12.04391098022461], + [-2.9022696018218994, 4.001169204711914], + [6.011844635009766, -1.3077596426010132], + [-3.441265821456909, -1.2449604272842407], + [5.978091716766357, -2.5973751544952393], + [2.184814453125, 0.9531735181808472], + [9.331805229187012, -2.825634002685547], + [-1.5749293565750122, 12.82685375213623], + [-1.8011418581008911, 1.333398461341858], + [0.5043995976448059, -5.618067264556885], + [-1.8179086446762085, 1.0047060251235962], + [-4.901705741882324, 6.200744152069092], + [-0.025412000715732574, -4.115339279174805], + [0.5166894197463989, -6.897469997406006], + [0.6434680819511414, -8.999871253967285], + [-1.1539376974105835, -0.6684288382530212], + [-3.575329065322876, -1.2749030590057373], + [-1.9076095819473267, 1.7717723846435547], + [-3.9389705657958984, -2.162036657333374], + [8.315129280090332, -3.1583967208862305], + [0.7042174339294434, -7.371947288513184], + [2.246339797973633, 3.674211263656616], + [-4.005664825439453, -2.768289804458618], + [-3.8217201232910156, -2.2617788314819336], + [0.6137646436691284, -8.663439750671387], + [2.2742745876312256, 0.7704957127571106], + [-0.3680623173713684, 10.150468826293945], + [8.108378410339355, -3.2475619316101074], + [-1.133260726928711, 11.648263931274414], + [-0.4651792347431183, -1.3554450273513794], + [2.2373011112213135, 5.062145233154297], + [2.2636351585388184, 5.632406234741211], + [8.442367553710938, -2.57975172996521], + [-3.013516426086426, -1.535585641860962], + [-3.44244122505188, -1.5069893598556519], + [-1.435278058052063, 11.492521286010742], + [9.628636360168457, -2.878736734390259], + [-2.3670732975006104, -4.627355575561523], + [-0.4966326951980591, -1.7289479970932007], + [0.5338006019592285, -6.400681495666504], + [-3.292710781097412, -1.131041169166565], + [-3.882547616958618, -1.7981905937194824], + [-4.97898530960083, 6.803036689758301], + [0.6902716159820557, -7.4568305015563965], + [2.2673840522766113, 5.079513072967529], + [-1.074704885482788, 10.836578369140625], + [0.6903671622276306, -8.42923355102539], + [2.984471082687378, -5.055048942565918], + [2.7850797176361084, -5.390503406524658], + [-3.790111541748047, -1.949151635169983], + [-1.7716337442398071, 1.903077244758606], + [-4.582075119018555, -2.275564193725586], + [2.075700044631958, 1.062234878540039], + [2.517042398452759, 6.365492343902588], + [1.1265623569488525, 1.4595037698745728], + [-4.006621360778809, -0.9922623038291931], + [-1.1330524682998657, 10.516069412231445], + [-3.4387314319610596, -1.7105823755264282], + [0.6186528205871582, -7.95149040222168], + [-3.760206937789917, -1.0703517198562622], + [-1.7702525854110718, -0.6278356313705444], + [1.8490662574768066, 2.46726131439209], + [2.7879068851470947, -4.985498428344727], + [1.9373650550842285, -3.8565783500671387], + [7.379549026489258, -1.9928579330444336], + [5.728793144226074, -1.8753231763839722], + [8.45185375213623, -2.691420316696167], + [-0.957604706287384, 10.243133544921875], + [-2.7593228816986084, -0.6240434646606445], + [-2.795405626296997, -0.8522433042526245], + [-3.306363582611084, -1.1865357160568237], + [-0.014853186905384064, 9.153501510620117], + [-4.180771350860596, -1.4263640642166138], + [7.079977989196777, -3.1787405014038086], + [-3.9419925212860107, -3.7775776386260986], + [5.12476110458374, 7.9420976638793945], + [-0.7091410756111145, 9.919343948364258], + [-1.970598816871643, 2.0430030822753906], + [-4.186161518096924, 2.595039129257202], + [2.117457389831543, -4.289262294769287], + [-4.468664646148682, -1.2135082483291626], + [1.4039134979248047, 1.5304101705551147], + [-3.4897587299346924, -1.230263352394104], + [-3.436812162399292, -2.298290967941284], + [-0.9718461632728577, 10.944561004638672], + [-3.177809000015259, -1.2796458005905151], + [-1.361847162246704, 11.753654479980469], + [4.057168483734131, -3.8197782039642334], + [-1.4555840492248535, 11.870739936828613], + [-1.5016443729400635, 12.222546577453613], + [1.7268693447113037, 0.7195188403129578], + [0.29641664028167725, -5.2042951583862305], + [-3.5358898639678955, 5.590183258056641], + [3.033128023147583, -3.5619778633117676], + [-1.7320876121520996, 0.9021134972572327], + [1.7479920387268066, 0.12596774101257324], + [5.959274768829346, -2.938596248626709], + [-3.578813076019287, -1.114577054977417], + [8.792450904846191, -2.6673638820648193], + [6.7535400390625, -2.932917356491089], + [-3.9536144733428955, -2.6355528831481934], + [-1.5086829662322998, 12.255603790283203], + [-4.251460075378418, -4.274323463439941], + [-4.628306865692139, -1.4868720769882202], + [-3.895433187484741, -1.078659176826477], + [-1.4873414039611816, -0.7838125228881836], + [-2.0061538219451904, 2.116450786590576], + [-1.9390785694122314, 1.531375765800476], + [1.0313379764556885, -5.401638031005859], + [-4.669099807739258, -1.1665672063827515], + [0.6387142539024353, -8.529343605041504], + [-5.607258319854736, 2.680715799331665], + [-3.9983417987823486, -2.4035415649414062], + [-5.480165004730225, 5.145759105682373], + [0.42753130197525024, -7.295224666595459], + [-2.860186815261841, -1.2939578294754028], + [-5.375065326690674, 5.087650775909424], + [0.6588150858879089, -8.313691139221191], + [-5.310695171356201, 7.723245620727539], + [1.760034203529358, 3.947877883911133], + [-4.111568927764893, -1.9093338251113892], + [7.101766109466553, -3.1527934074401855], + [1.5796699523925781, 0.6025627255439758], + [-1.1476802825927734, -0.537188708782196], + [-3.443277597427368, -2.3909223079681396], + [1.269980788230896, 3.5384926795959473], + [0.6627119183540344, -7.428529262542725], + [1.3160555362701416, 5.159526824951172], + [-1.5506319999694824, 0.9575554132461548], + [7.148829936981201, -2.3747477531433105], + [0.8938751816749573, -0.5052013397216797], + [-1.7247297763824463, 1.6638799905776978], + [-2.6046297550201416, -3.361943006515503], + [1.706163763999939, 0.29970690608024597], + [-1.1368515491485596, 5.115705490112305], + [-1.380229115486145, -0.3991733193397522], + [-1.070221185684204, 11.067668914794922], + [2.178988218307495, -4.495696067810059], + [2.5998144149780273, -4.525627136230469], + [6.940486907958984, -2.5190136432647705], + [7.908448219299316, -3.3753116130828857], + [-1.7847957611083984, 1.5011810064315796], + [-3.2270162105560303, 6.485610485076904], + [-3.3706629276275635, -1.9112578630447388], + [4.573469638824463, 7.719273567199707], + [-0.8190375566482544, -1.0185520648956299], + [-1.3146817684173584, -3.7129409313201904], + [0.7188418507575989, -8.589536666870117], + [8.694025993347168, -2.556927442550659], + [-1.2030380964279175, 11.462175369262695], + [-1.5906567573547363, 0.5535778403282166], + [1.1753427982330322, -0.4395660161972046], + [3.067476511001587, -5.43647575378418], + [-3.87113356590271, -0.7853860259056091], + [-2.0113160610198975, 1.4339280128479004], + [-3.8913819789886475, -1.6087301969528198], + [-4.793365478515625, 7.367212772369385], + [0.7765645384788513, -9.382589340209961], + [1.9195170402526855, 5.198171615600586], + [0.7494946122169495, -0.0537874735891819], + [1.2502995729446411, -6.105252265930176], + [7.343746662139893, -2.7467191219329834], + [-2.095855951309204, 1.7686973810195923], + [7.7635064125061035, -2.2884960174560547], + [-1.9885644912719727, 2.365108013153076], + [0.38112592697143555, -6.979999542236328], + [-0.6720982193946838, 10.384868621826172], + [-4.628131866455078, 5.828452110290527], + [-0.6199319362640381, 10.225635528564453], + [-4.354552268981934, -0.6578606367111206], + [-0.9627042412757874, 10.585731506347656], + [-0.6197476983070374, -1.4836392402648926], + [-5.592535972595215, 5.752506256103516], + [-2.1513257026672363, 1.973645567893982], + [7.3832550048828125, -2.3114192485809326], + [-1.1973007917404175, 11.386991500854492], + [2.096709728240967, 4.676023006439209], + [-0.90948885679245, 1.2450473308563232], + [5.684023857116699, -1.2809048891067505], + [2.2602202892303467, -4.2515387535095215], + [-3.916659116744995, -2.083805561065674], + [-1.1507142782211304, 10.945898056030273], + [-3.542043447494507, -2.1413369178771973], + [4.175590515136719, 7.547630786895752], + [-4.005115985870361, -2.4775426387786865], + [-1.2001821994781494, 11.42226791381836], + [0.38755398988723755, 7.00684928894043], + [-1.4014124870300293, 2.8653523921966553], + [-3.153310775756836, -1.3455528020858765], + [0.6621139049530029, -0.39794859290122986], + [-1.745282530784607, 1.577316403388977], + [-6.129396915435791, -0.971420407295227], + [0.7061665058135986, 2.033562421798706], + [4.269233226776123, 7.386784553527832], + [8.004962921142578, -2.91322660446167], + [0.18971049785614014, -6.437837600708008], + [-3.1971747875213623, 5.259328365325928], + [-1.9131062030792236, 1.1816929578781128], + [-0.717099666595459, 2.6692326068878174], + [-3.1323368549346924, 5.156316757202148], + [-1.3413150310516357, 11.31546401977539], + [-1.183589220046997, 10.69782543182373], + [0.5724483132362366, -7.593306541442871], + [-0.45212072134017944, 8.566079139709473], + [-5.680129528045654, 7.446150779724121], + [1.1242583990097046, -4.672220706939697], + [-3.2351057529449463, -1.7538414001464844], + [-3.6547653675079346, -0.7552659511566162], + [2.21671462059021, 6.037508487701416], + [2.9902548789978027, -4.68861198425293], + [-1.3987574577331543, -1.4685463905334473], + [-2.9691240787506104, -1.4489291906356812], + [-0.3024769425392151, 0.07826533913612366], + [9.411538124084473, -2.8164916038513184], + [-0.390264093875885, 9.842844009399414], + [7.052269458770752, -2.0059592723846436], + [0.9159496426582336, -6.291216850280762], + [-3.329622983932495, 5.596061706542969], + [6.314277172088623, -2.4002058506011963], + [-3.8162057399749756, 5.231040000915527], + [2.510291337966919, -5.839984893798828], + [2.981930732727051, -4.665110111236572], + [1.7182025909423828, -6.268758773803711], + [2.0737690925598145, 5.379574775695801], + [-4.999598979949951, 7.27674674987793], + [-5.36864709854126, 6.555739402770996], + [-3.4470255374908447, -1.2760320901870728], + [2.663141965866089, -4.458370208740234], + [-3.737684965133667, -2.2458744049072266], + [-0.6617741584777832, 9.776679992675781], + [-3.559372901916504, -2.9124791622161865], + [-1.9058738946914673, 1.8521629571914673], + [-4.058306694030762, -1.3655668497085571], + [0.22643858194351196, -5.246760368347168], + [-4.284477710723877, -3.244980573654175], + [-3.7065441608428955, -0.383886456489563], + [2.7915499210357666, -4.579628944396973], + [-4.532710552215576, -3.330744504928589], + [3.4819958209991455, 6.508041858673096], + [0.5882889628410339, 5.903481483459473], + [0.35888946056365967, -0.8038438558578491], + [6.747438907623291, -4.6775617599487305], + [-2.5362401008605957, -0.8238552808761597], + [-1.1500388383865356, 10.534786224365234], + [-1.7907814979553223, 2.2479915618896484], + [-4.6129631996154785, 6.020406723022461], + [-3.2373452186584473, 6.384037494659424], + [-3.5568010807037354, -1.5087999105453491], + [-0.011085845530033112, -4.5432939529418945], + [2.485551118850708, -4.714247226715088], + [2.5668911933898926, -3.7962422370910645], + [2.718526601791382, -4.3596320152282715], + [2.5165135860443115, -4.44577693939209], + [0.5001205205917358, -7.447173595428467], + [-4.333245754241943, -2.0348103046417236], + [-2.787370443344116, -1.5322104692459106], + [-0.9078535437583923, 10.956336975097656], + [0.5039677619934082, -7.479924201965332], + [1.6583025455474854, -5.767356872558594], + [8.546886444091797, -2.564227342605591], + [2.9595844745635986, -5.00800085067749], + [0.3006041646003723, -6.941061973571777], + [-3.4713311195373535, -1.6740609407424927], + [-3.5411925315856934, -2.0455219745635986], + [-1.460141658782959, -1.722274661064148], + [-4.578370571136475, -1.3500221967697144], + [-4.333289623260498, 4.626596450805664], + [0.6951192021369934, -6.777935981750488], + [2.278703451156616, 5.257890224456787], + [-0.6945154666900635, -0.3111039698123932], + [-2.7823402881622314, 3.0819785594940186], + [1.6593153476715088, 4.927518367767334], + [8.252645492553711, -2.9337780475616455], + [-1.2066924571990967, 11.397187232971191], + [9.571175575256348, -2.878530979156494], + [-0.4658180773258209, -1.324241280555725], + [-0.7140105962753296, 9.162378311157227], + [5.473907470703125, -0.7385663986206055], + [-0.2883263826370239, 9.565675735473633], + [-4.632313251495361, -3.3656692504882812], + [0.7085062265396118, -8.366731643676758], + [2.77530574798584, -4.508936882019043], + [-0.027425117790699005, -0.5966382026672363], + [-2.006316661834717, 0.8205314874649048], + [-4.163342475891113, 5.0722551345825195], + [3.429119110107422, 1.2375720739364624], + [-0.8271679282188416, 10.645654678344727], + [5.670627117156982, 8.59148120880127], + [-1.270641565322876, 11.132817268371582], + [-4.811488151550293, 6.203335285186768], + [0.8816822171211243, -4.806671142578125], + [-2.996988534927368, 6.8406829833984375], + [-3.5316176414489746, -0.8468412756919861], + [-3.1164872646331787, -1.468476414680481], + [3.958707094192505, 6.989831447601318], + [-3.1256372928619385, -1.013292908668518], + [2.051698923110962, -5.411459922790527], + [5.894036293029785, -3.1220285892486572], + [2.2833406925201416, -5.7411909103393555], + [-3.8769547939300537, -1.634406566619873], + [-1.8311192989349365, 0.5326102375984192], + [-4.599205493927002, -0.7237536907196045], + [-3.3085763454437256, -1.0247430801391602], + [-1.851911187171936, 6.101827144622803], + [1.6811262369155884, 0.4696424603462219], + [-1.459924578666687, 12.565157890319824], + [-5.056272983551025, -4.006296157836914], + [2.3331663608551025, -3.9937591552734375], + [8.529298782348633, -2.9051401615142822], + [-1.7544525861740112, 1.575796365737915], + [1.836094617843628, 0.38587629795074463], + [-0.2661057114601135, -0.9577613472938538], + [-4.400119304656982, -0.8159927129745483], + [-4.490518093109131, 6.4668498039245605], + [1.4072372913360596, 2.026214361190796], + [-1.3185158967971802, 11.584193229675293], + [5.546224117279053, -2.169515371322632], + [0.7915103435516357, -6.798996925354004], + [2.5583372116088867, -4.186520576477051], + [2.588554859161377, -4.936857223510742], + [1.239337682723999, 5.114331245422363], + [1.5743921995162964, 3.655165433883667], + [-3.9140594005584717, 5.9088215827941895], + [-2.216130495071411, 1.877529501914978], + [-5.136962413787842, 6.807746887207031], + [-0.9699164032936096, 1.1606392860412598], + [-1.8527545928955078, 1.5124428272247314], + [1.263755202293396, -3.596494674682617], + [2.3580424785614014, -5.536495685577393], + [-3.7890665531158447, -2.540881395339966], + [-4.195845127105713, 3.1222290992736816], + [1.5351998805999756, 3.5073630809783936], + [-1.606116533279419, -3.4046807289123535], + [5.730247974395752, -1.223708152770996], + [2.7484025955200195, -4.700250148773193], + [-0.7367792725563049, 10.314470291137695], + [8.069759368896484, -2.8503005504608154], + [-1.2846544981002808, 11.056482315063477], + [0.43043315410614014, -6.021404266357422], + [0.2062029242515564, -1.0356508493423462], + [5.226590633392334, 8.168335914611816], + [7.414285182952881, -2.456998109817505], + [-0.42818331718444824, 5.302677154541016], + [-3.8970558643341064, -1.9177011251449585], + [3.119973659515381, -4.803010940551758], + [-0.457823246717453, -2.9265122413635254], + [1.062953233718872, -5.211570739746094], + [-1.9959027767181396, -0.23047608137130737], + [-1.0842090845108032, 1.6664272546768188], + [0.10455387085676193, 7.514859199523926], + [-3.2129552364349365, 5.950310230255127], + [3.081765651702881, 5.870093822479248], + [4.189713954925537, 7.3013691902160645], + [-4.802012920379639, -1.7109460830688477], + [2.418339967727661, 6.377710342407227], + [2.6979427337646484, -2.1043860912323], + [6.177265644073486, -1.7802982330322266], + [-5.8256916999816895, 7.77506685256958], + [-3.408935785293579, -1.2258689403533936], + [-2.135423183441162, 1.0461242198944092], + [4.90777587890625, 7.692636013031006], + [2.4833881855010986, -4.072683811187744], + [-0.17587599158287048, -1.5606709718704224], + [-1.7313679456710815, 6.450872421264648], + [1.2495431900024414, -4.9085845947265625], + [-6.092384338378906, 8.318315505981445], + [-1.781564712524414, 1.9617990255355835], + [6.053589344024658, -1.2329437732696533], + [-5.014179229736328, 6.085168838500977], + [-1.1516717672348022, 10.333000183105469], + [-1.1546465158462524, 10.809640884399414], + [4.946254253387451, 7.691763877868652], + [2.243109941482544, -4.755792617797852], + [-3.8647241592407227, -2.7575013637542725], + [-5.112283229827881, 6.557827949523926], + [0.5195468664169312, 4.806421279907227], + [-1.580136775970459, 1.2346497774124146], + [3.7873380184173584, -4.012988090515137], + [3.0864884853363037, -5.096097946166992], + [2.237009286880493, 2.0195817947387695], + [3.2392385005950928, -3.583388566970825], + [-0.44017326831817627, 10.548709869384766], + [8.102869033813477, -2.8971166610717773], + [-4.920328617095947, 6.5946173667907715], + [-3.7271220684051514, -1.5316473245620728], + [2.632680654525757, -4.355968952178955], + [1.6558187007904053, 0.3145468533039093], + [-5.11763334274292, 6.313013076782227], + [-1.279131531715393, 12.02322006225586], + [2.5307953357696533, -4.315161228179932], + [0.1919478476047516, -4.791997909545898], + [-1.312016248703003, 0.5151350498199463], + [6.6197967529296875, -5.036825180053711], + [5.405491828918457, -1.2304257154464722], + [4.807126998901367, 7.904911041259766], + [2.1318295001983643, 5.47437858581543], + [-0.08087644726037979, -4.548834323883057], + [4.999068737030029, 7.952968597412109], + [8.592620849609375, -2.6139047145843506], + [5.961148262023926, -1.4964975118637085], + [1.587352991104126, 4.943356513977051], + [0.3801848888397217, -6.403465270996094], + [-2.7132983207702637, 5.886816024780273], + [8.425719261169434, -2.595142126083374], + [0.26112616062164307, -6.729772567749023], + [-4.072749614715576, 6.303611755371094], + [-1.0807135105133057, -1.4009065628051758], + [1.9513251781463623, 5.376015663146973], + [2.4843666553497314, -4.159173011779785], + [-1.5690701007843018, 1.149266004562378], + [2.336777687072754, -4.6282525062561035], + [-0.6811925768852234, 10.120233535766602], + [-3.085505723953247, 5.805230140686035], + [-5.270480632781982, 7.398439407348633], + [9.553746223449707, -2.8657758235931396], + [-4.6441850662231445, -4.139983654022217], + [2.5865964889526367, -3.933488607406616], + [-2.5116679668426514, -0.6286579370498657], + [-2.1658999919891357, 0.5371177196502686], + [-0.018336690962314606, -4.108260154724121], + [1.0251940488815308, -4.1537885665893555], + [-5.613959789276123, 3.9996702671051025], + [-0.4972488284111023, 9.613897323608398], + [0.8167580962181091, -0.35120147466659546], + [1.8538591861724854, 5.589743137359619], + [-0.6641672849655151, 8.41675090789795], + [5.716893196105957, -1.2469953298568726], + [2.023820161819458, 5.999326229095459], + [0.6900340914726257, -7.690153121948242], + [-4.485821723937988, -2.872518301010132], + [7.640060901641846, -3.5359814167022705], + [2.393892526626587, -4.452566623687744], + [-4.324987411499023, -3.2849185466766357], + [8.371333122253418, -2.5650062561035156], + [-1.3896862268447876, 0.830364465713501], + [-0.5336624979972839, 10.154038429260254], + [1.7666887044906616, 2.574802875518799], + [-0.36069416999816895, 5.128931999206543], + [0.40397870540618896, -4.3661885261535645], + [1.9247448444366455, 0.5352683663368225], + [1.8475213050842285, -5.538333892822266], + [7.328418254852295, -1.9741476774215698], + [5.529885768890381, -1.423477292060852], + [7.5883708000183105, -2.570488691329956], + [-1.9313318729400635, 0.4602320194244385], + [8.389080047607422, -2.563544511795044], + [0.659359872341156, -8.813632011413574], + [-1.9527608156204224, 1.3079887628555298], + [-0.08442158252000809, -3.150512218475342], + [6.217698097229004, -2.7793023586273193], + [0.5585172772407532, -0.6706374883651733], + [-4.815365314483643, -0.5682629346847534], + [-2.183933734893799, 1.721370816230774], + [1.1773455142974854, -0.25501373410224915], + [2.4054551124572754, -4.029889106750488], + [0.7871464490890503, -1.6436161994934082], + [1.8857958316802979, 0.30574333667755127], + [-1.1124486923217773, 10.546394348144531], + [0.26251375675201416, -4.804839134216309], + [-4.326424598693848, 4.37464714050293], + [3.57568621635437, -4.485445976257324], + [6.240578651428223, -2.529348134994507], + [0.4791869521141052, -4.168964385986328], + [5.223759174346924, 8.124364852905273], + [3.8614695072174072, 6.904825210571289], + [0.3280542492866516, -6.547194004058838], + [8.117829322814941, -2.5298240184783936], + [5.5396623611450195, -1.1551270484924316], + [-4.300293922424316, 2.9189682006835938], + [3.0990679264068604, -4.889499664306641], + [-1.3631161451339722, -1.1441236734390259], + [-3.440112829208374, -2.5859525203704834], + [5.6473164558410645, -4.865633487701416], + [2.9129984378814697, -4.578423500061035], + [-4.7169318199157715, 5.116851806640625], + [-1.1038775444030762, 1.6668922901153564], + [0.06266402453184128, -4.690240383148193], + [6.585578441619873, -2.0745081901550293], + [-0.9041585326194763, 10.325431823730469], + [5.039236068725586, 8.004753112792969], + [1.6723759174346924, -5.48276424407959], + [6.979647159576416, -2.777294397354126], + [-4.905867099761963, 6.7401838302612305], + [1.8031623363494873, -4.3365583419799805], + [-2.764711856842041, -1.4205759763717651], + [-3.161097764968872, -1.3827104568481445], + [-3.892967700958252, -1.671517252922058], + [0.44326406717300415, -6.872142791748047], + [0.1840950846672058, -5.7178239822387695], + [-1.7590185403823853, 1.38833487033844], + [-3.4135217666625977, -1.409730076789856], + [4.234463214874268, -3.5253515243530273], + [-3.2429473400115967, -1.1638758182525635], + [2.485121965408325, -4.567019462585449], + [0.38130784034729004, -5.608670234680176], + [-3.4418954849243164, 5.1222147941589355], + [5.254083156585693, 8.328611373901367], + [-3.532231092453003, -1.4682172536849976], + [-4.511656284332275, -0.8093117475509644], + [2.1988117694854736, -3.6514673233032227], + [-0.7018499374389648, 10.265047073364258], + [-1.9895696640014648, 6.264431953430176], + [-4.166784763336182, 1.9141745567321777], + [-5.352694034576416, 4.471970558166504], + [-2.617124319076538, -2.694316864013672], + [0.6874352693557739, -8.510997772216797], + [-0.6896356344223022, 10.132989883422852], + [6.183204174041748, -3.377352476119995], + [2.3944108486175537, -4.867208480834961], + [-4.129397869110107, -1.075722336769104], + [-4.079099655151367, -0.8432711362838745], + [-0.7860624194145203, 10.045269012451172], + [0.5107909440994263, -5.305141448974609], + [2.827746629714966, -4.484010219573975], + [-5.147297382354736, 5.015284538269043], + [-2.919327974319458, -0.8300495147705078], + [-4.834871292114258, -2.0302248001098633], + [-1.178602695465088, 0.168856680393219], + [2.59359073638916, -5.019721984863281], + [3.781369209289551, 6.586328029632568], + [0.3192390203475952, -6.674939155578613], + [8.374892234802246, -2.7452993392944336], + [-3.6843793392181396, -0.8651859164237976], + [6.847203731536865, -2.043595314025879], + [-0.21650046110153198, 8.055241584777832], + [2.6418323516845703, -4.527429580688477], + [2.4051969051361084, 4.995481967926025], + [0.11384692043066025, -0.9993382096290588], + [0.6069899201393127, -8.518329620361328], + [0.7944211959838867, -5.206729412078857], + [-0.9707742929458618, 1.514196515083313], + [-4.530817985534668, 5.22203254699707], + [-3.4275691509246826, -1.016155481338501], + [-1.7594014406204224, 1.5326801538467407], + [-4.099524021148682, -1.3681405782699585], + [-2.1720428466796875, 2.178748846054077], + [0.7278433442115784, -5.370815753936768], + [0.8310957551002502, -7.166973114013672], + [2.8436355590820312, -4.446699619293213], + [-2.6344337463378906, 6.231326580047607], + [-4.7051920890808105, 5.681969165802002], + [1.3017858266830444, 1.3691129684448242], + [-1.8063647747039795, -1.1964921951293945], + [-2.559174060821533, -2.6007258892059326], + [6.858129978179932, -3.636382579803467], + [-1.2844910621643066, 5.615944862365723], + [-2.5372846126556396, 2.6332035064697266], + [-1.0092483758926392, 10.940305709838867], + [-5.079922199249268, -0.3312194347381592], + [-3.7382497787475586, -1.663153886795044], + [-3.6745541095733643, -1.265150785446167], + [-1.462762475013733, 1.2753371000289917], + [-2.2765700817108154, -0.6181024312973022], + [2.3449501991271973, 5.9969916343688965], + [-1.6733918190002441, -0.980614423751831], + [2.9798920154571533, -4.968900203704834], + [-2.4716851711273193, -0.6823887228965759], + [0.45677345991134644, -7.099184036254883], + [-4.512138843536377, 6.551211833953857], + [4.293593883514404, 7.5880842208862305], + [7.839559078216553, -2.291161298751831], + [-5.180073261260986, -3.9769809246063232], + [7.749833583831787, -2.6889097690582275], + [-4.616951942443848, 6.282499313354492], + [-4.687961101531982, -3.8892948627471924], + [3.607483386993408, 6.839699745178223], + [-5.060080528259277, 6.585981369018555], + [2.746187925338745, -4.475533485412598], + [0.8265042901039124, -0.42996835708618164], + [-0.47318190336227417, 10.246305465698242], + [0.005927972495555878, -4.354092121124268], + [1.5959666967391968, 4.423750400543213], + [0.3876556158065796, 5.7319231033325195], + [-0.6581980586051941, 10.045198440551758], + [-3.7855381965637207, -2.800335645675659], + [3.100142002105713, -4.86654806137085], + [-0.725803792476654, 9.661028861999512], + [-3.6375327110290527, -1.2972253561019897], + [-0.6276556849479675, 9.96535873413086], + [0.7835253477096558, 2.6191670894622803], + [-1.101798176765442, 10.712076187133789], + [1.377558708190918, -0.2716236710548401], + [-1.902951717376709, 0.7224231362342834], + [0.5884348750114441, -7.193227291107178], + [-3.842844247817993, -2.3792669773101807], + [6.842050075531006, -2.032529592514038], + [2.6763205528259277, -4.648203372955322], + [-4.238165855407715, -4.433469295501709], + [-3.31587815284729, -1.3121811151504517], + [-1.0425711870193481, 10.493959426879883], + [-0.6183486580848694, -0.5816918015480042], + [0.5692984461784363, -0.8543013334274292], + [-3.110154390335083, -1.1076593399047852], + [-3.7994155883789062, -2.166045904159546], + [7.47609281539917, -3.119952440261841], + [2.62202525138855, -4.123020172119141], + [-2.413074254989624, -0.3131452798843384], + [6.637196063995361, -2.0178027153015137], + [-0.5361917018890381, -1.2794556617736816], + [-2.9519054889678955, -1.3335227966308594], + [-1.9783132076263428, 0.9965841770172119], + [0.6183515191078186, 0.7113229632377625], + [1.6862943172454834, -5.437256813049316], + [-3.618215322494507, -1.217640995979309], + [-1.3724455833435059, 12.064313888549805], + [6.516738414764404, -2.756223201751709], + [1.2776191234588623, 0.02359522506594658], + [-3.2298879623413086, -3.2372472286224365], + [2.0238308906555176, 5.604519844055176], + [3.05253267288208, -4.998970985412598], + [5.438447952270508, 8.334931373596191], + [-4.259832382202148, -2.0943520069122314], + [-4.665571212768555, 5.307085037231445], + [2.819317102432251, -4.89124059677124], + [-5.5572428703308105, -1.5264836549758911], + [0.4523971676826477, -0.9001877307891846], + [1.0913763046264648, -5.833627700805664], + [0.11502664536237717, -5.328474998474121], + [0.30604737997055054, -5.263236045837402], + [-2.765528678894043, 2.936519145965576], + [1.1761562824249268, -7.273097991943359], + [2.7891218662261963, -5.564017295837402], + [-5.252120018005371, 7.178342819213867], + [-4.500323295593262, -3.2823615074157715], + [-5.259392738342285, -0.6797550320625305], + [7.4838433265686035, -2.731595754623413], + [-2.3551976680755615, -0.31187954545021057], + [-1.4988887310028076, 12.02034854888916], + [-1.7850873470306396, 0.6922454833984375], + [2.735121488571167, -4.038142681121826], + [2.411269426345825, -4.185399055480957], + [-2.9839837551116943, -1.7010735273361206], + [2.866964817047119, -4.8665876388549805], + [-1.3526519536972046, 1.7593148946762085], + [2.508772373199463, -4.003084659576416], + [-1.94620680809021, 1.7957426309585571], + [-3.0749244689941406, -1.3478059768676758], + [-3.233931303024292, 4.758461952209473], + [-5.541428565979004, -1.165362000465393], + [3.014270067214966, -5.130199432373047], + [6.4560933113098145, -3.8666131496429443], + [-2.0518198013305664, 1.7916449308395386], + [0.5813530683517456, -7.846399307250977], + [2.1518235206604004, 5.101946830749512], + [-3.259791135787964, -1.1640334129333496], + [1.8543304204940796, -5.776788711547852], + [-1.9566890001296997, -0.5276600122451782], + [0.6318222880363464, -7.034605979919434], + [-3.4083092212677, 6.5317792892456055], + [2.6759445667266846, -4.360563278198242], + [-4.805112838745117, 6.195566177368164], + [3.6964592933654785, 6.623246669769287], + [-1.0875879526138306, 10.356131553649902], + [3.866197109222412, 6.9899773597717285], + [1.2268534898757935, -0.47529301047325134], + [0.5902735590934753, -8.14896297454834], + [-2.7653441429138184, 2.631584882736206], + [-3.676367998123169, -1.6887913942337036], + [-3.1853644847869873, 5.36328125], + [-4.073854923248291, -1.1761783361434937], + [-0.5514252185821533, 9.384950637817383], + [-1.231203317642212, 11.677824020385742], + [-4.818089485168457, 6.679620265960693], + [0.37683919072151184, -5.337521553039551], + [-3.710557699203491, -2.1633870601654053], + [-2.242621660232544, 2.1003572940826416], + [-4.124824047088623, -3.2901504039764404], + [2.0279176235198975, 5.312602996826172], + [-1.3936482667922974, 1.3470090627670288], + [2.0767078399658203, -4.94045352935791], + [-3.71269154548645, -1.6744476556777954], + [-4.347062587738037, -1.188764214515686], + [-3.7942392826080322, -2.3013155460357666], + [-0.30641788244247437, 9.115507125854492], + [1.7498562335968018, 2.378171920776367], + [-3.334368944168091, -2.298550844192505], + [4.616180896759033, 7.564759731292725], + [-4.798829078674316, 5.705694675445557], + [2.223118782043457, -5.2912187576293945], + [-1.2193681001663208, 10.827385902404785], + [9.182511329650879, -2.8023276329040527], + [-4.344467639923096, -2.0213661193847656], + [-3.8688526153564453, -0.3925384283065796], + [-0.43319571018218994, -0.9075384140014648], + [-4.122092247009277, -1.740505337715149], + [-3.759500503540039, -1.3089343309402466], + [0.4350195527076721, 2.4328999519348145], + [0.6614590287208557, -6.1441144943237305], + [-2.893681287765503, -2.042553663253784], + [2.428586959838867, 0.6805296540260315], + [-1.757380485534668, 0.09613409638404846], + [9.923901557922363, -3.1034743785858154], + [2.876227855682373, -4.4190754890441895], + [2.902298927307129, 5.246713638305664], + [-5.33101749420166, 5.452016830444336], + [-3.661447286605835, -0.6327228546142578], + [-3.4436967372894287, -2.373526096343994], + [-4.035589218139648, -3.3284366130828857], + [-1.9143319129943848, 1.9977127313613892], + [-1.9872850179672241, 2.022456645965576], + [-1.3343276977539062, 11.747034072875977], + [3.107973098754883, -4.662173271179199], + [2.300224542617798, -5.2367987632751465], + [-0.8449057936668396, 6.055953025817871], + [-2.07346773147583, 2.195869207382202], + [-0.3267509341239929, 8.516409873962402], + [1.537132978439331, 5.836484909057617], + [2.113027572631836, 3.0808234214782715], + [-0.6107780933380127, 9.699153900146484], + [0.5599243640899658, -7.479459762573242], + [-2.9391696453094482, -0.6511062383651733], + [-4.61041784286499, -1.330482006072998], + [2.8821346759796143, -4.9008989334106445], + [-3.8515279293060303, -1.950900912284851], + [0.6343713402748108, -8.022470474243164], + [0.37134110927581787, -6.3790693283081055], + [1.7831511497497559, 0.3282843232154846], + [0.11397214978933334, -5.450389385223389], + [-1.9095244407653809, 1.2777494192123413], + [-0.09017501026391983, -0.1694941371679306], + [-5.588958263397217, 6.713554859161377], + [3.0496320724487305, -4.6521148681640625], + [-4.473186492919922, -1.497588038444519], + [3.058493137359619, 6.702766418457031], + [1.5721452236175537, 1.2189196348190308], + [2.008681535720825, 6.239620208740234], + [0.8664947152137756, -4.41914176940918], + [1.7771046161651611, 5.668461799621582], + [-1.058161735534668, 10.011419296264648], + [2.6623475551605225, -3.8156840801239014], + [-3.0585010051727295, 3.317209482192993], + [-3.0193169116973877, -1.3449269533157349], + [9.885029792785645, -2.9650635719299316], + [-5.367019176483154, 5.4321441650390625], + [-5.055575847625732, 6.87613582611084], + [2.513671636581421, 5.604769706726074], + [-0.9814188480377197, 10.15599536895752], + [-3.588916540145874, -1.4628148078918457], + [0.8273470997810364, -6.204187393188477], + [2.934438943862915, -4.648899078369141], + [2.68174147605896, -5.164905548095703], + [-0.9366690516471863, 9.812799453735352], + [-3.2892072200775146, -0.9610608220100403], + [2.690330982208252, -4.793943405151367], + [-4.748005390167236, -3.6013123989105225], + [2.1776068210601807, 5.027327537536621], + [-4.186637878417969, 6.007396221160889], + [-4.6111674308776855, 4.867714881896973], + [-0.6794604659080505, 10.348581314086914], + [0.3498966097831726, -6.956780433654785], + [-4.625860691070557, -1.4568415880203247], + [-2.598569869995117, 4.635898113250732], + [2.856375217437744, -5.038881301879883], + [2.674928903579712, -4.495092391967773], + [-3.295734405517578, 5.422256946563721], + [-1.3805298805236816, 1.1539909839630127], + [-5.838993549346924, -0.6801995038986206], + [3.0516703128814697, 5.73684549331665], + [-3.468724012374878, -1.2095199823379517], + [-1.5150823593139648, 1.945264458656311], + [1.5757797956466675, -6.482088565826416], + [-3.7452476024627686, -1.3977307081222534], + [-1.7488079071044922, 1.381070852279663], + [-0.9487354159355164, 10.2922945022583], + [6.81752872467041, -4.0369954109191895], + [-4.28875207901001, 6.934500694274902], + [-4.176462650299072, -4.708897113800049], + [9.312176704406738, -2.8427507877349854], + [-1.3850030899047852, 1.3193649053573608], + [-1.789016842842102, 1.5335134267807007], + [0.5184638500213623, -5.362412452697754], + [-0.39116349816322327, 5.811732292175293], + [7.984668254852295, -2.358572244644165], + [-1.9033845663070679, 2.4870645999908447], + [-0.49606847763061523, 9.555712699890137], + [-4.110642910003662, 6.103017330169678], + [2.8708202838897705, -4.525524139404297], + [0.7866775989532471, -6.074243068695068], + [-0.8616622090339661, 10.55856990814209], + [8.207844734191895, -2.467241048812866], + [1.9670004844665527, 0.3267801105976105], + [1.328144907951355, 7.064328670501709], + [8.185609817504883, -2.8918325901031494], + [-4.670396327972412, -1.2364345788955688], + [0.26076966524124146, -6.436655044555664], + [-1.9405559301376343, 0.732147216796875], + [-5.997518539428711, 5.721898555755615], + [8.998196601867676, -2.7822868824005127], + [-3.953070878982544, -2.6647069454193115], + [2.056764841079712, 5.514063835144043], + [8.013426780700684, -2.4190618991851807], + [7.2350053787231445, -2.3415119647979736], + [5.232780933380127, 8.245267868041992], + [0.633608877658844, -8.948009490966797], + [1.055314540863037, 4.609607696533203], + [-0.5767014026641846, 7.584134101867676], + [7.639003753662109, -2.5176496505737305], + [-4.210230350494385, -1.3147841691970825], + [2.7996139526367188, -4.739231109619141], + [-4.436871528625488, -1.11785089969635], + [2.567756414413452, -5.310240268707275], + [1.6659953594207764, -4.8405070304870605], + [-4.171947002410889, -3.9671072959899902], + [1.7964529991149902, 1.3632534742355347], + [-4.2452073097229, -3.7687675952911377], + [-4.47678804397583, -0.8531661033630371], + [-4.661070346832275, -0.8888844847679138], + [-0.3743388056755066, 9.753183364868164], + [-1.0068397521972656, 11.174604415893555], + [1.1674182415008545, 6.28026008605957], + [-3.6628501415252686, -2.464280605316162], + [3.034923791885376, -4.586384296417236], + [-2.154336929321289, 1.8163539171218872], + [2.0276548862457275, -5.1405181884765625], + [-1.0747488737106323, 10.09466552734375], + [1.2894949913024902, 0.21395611763000488], + [-4.901707649230957, -1.2347623109817505], + [1.050550937652588, 0.1959698647260666], + [-3.5800373554229736, -2.0848047733306885], + [-5.394842624664307, 6.9381866455078125], + [-1.225318193435669, 11.318964004516602], + [-4.614256381988525, 6.101475238800049], + [9.101758003234863, -2.815061569213867], + [0.478099524974823, -4.573159217834473], + [1.793776273727417, -4.5191192626953125], + [0.8030458688735962, -6.493160247802734], + [6.843667030334473, -3.8739140033721924], + [-3.3439385890960693, -1.344833493232727], + [6.8580241203308105, -4.465590000152588], + [-1.495664119720459, 1.3354040384292603], + [-4.362768650054932, -0.5347134470939636], + [-3.2958781719207764, -0.6861197352409363], + [-3.72794508934021, -1.2461439371109009], + [-4.10059118270874, -2.737082004547119], + [-1.2008256912231445, 9.942718505859375], + [0.694530189037323, 0.20702886581420898], + [1.5952174663543701, 0.3447829484939575], + [5.705970287322998, -1.0749627351760864], + [-1.2163865566253662, 11.35128116607666], + [-0.40313994884490967, 10.722845077514648], + [-3.2320616245269775, -4.809535980224609], + [-1.2890076637268066, 11.442914962768555], + [-4.280056953430176, 5.46512508392334], + [0.6212450861930847, -0.3393092453479767], + [8.058053016662598, -2.3510425090789795], + [1.783979058265686, 0.6309957504272461], + [1.0120618343353271, 2.248816728591919], + [-3.7850027084350586, -3.0982306003570557], + [0.5765072703361511, -4.566899299621582], + [2.1593399047851562, -5.045793533325195], + [1.9287910461425781, -5.342119216918945], + [-3.2174956798553467, 5.42431640625], + [-0.4013279974460602, -1.0705152750015259], + [0.8502971529960632, 4.636445045471191], + [-3.3088252544403076, 6.127173900604248], + [0.5498618483543396, -0.7552356719970703], + [-4.141079425811768, 6.5729875564575195], + [4.104491233825684, 6.975224494934082], + [4.303718090057373, 7.0727691650390625], + [1.4808344841003418, 1.379875898361206], + [-0.48961323499679565, 10.52294921875], + [1.9701015949249268, -5.201785087585449], + [1.8668478727340698, 2.503840684890747], + [-4.5832343101501465, -1.0587258338928223], + [2.2804083824157715, 3.954867124557495], + [-5.141549587249756, 4.170354843139648], + [-4.019448280334473, -1.9206544160842896], + [-2.688016653060913, 2.834035873413086], + [-3.4072797298431396, -2.1344993114471436], + [-0.35439470410346985, 7.395659446716309], + [6.533233165740967, -1.3568851947784424], + [-1.5604344606399536, 1.3537029027938843], + [3.6318607330322266, 6.941882133483887], + [3.0492985248565674, -5.014172077178955], + [0.7723237872123718, 5.515273094177246], + [-3.3217265605926514, -1.2830572128295898], + [-5.579901218414307, -4.584906578063965], + [0.7290073037147522, -5.190114498138428], + [0.9214687943458557, -6.369792938232422], + [8.95763874053955, -2.920832872390747], + [-1.1115766763687134, 11.44135570526123], + [7.9527506828308105, -3.0314624309539795], + [-0.05385846644639969, 7.098259449005127], + [-1.7498551607131958, 1.9274250268936157], + [-1.8294020891189575, 1.3755513429641724], + [0.23574650287628174, -4.839076042175293], + [0.8125183582305908, -4.818582534790039], + [-3.646251916885376, 0.05171733722090721], + [0.6970278024673462, -7.566200256347656], + [-3.6593945026397705, -0.2662755250930786], + [-3.5537517070770264, -2.310629367828369], + [-2.651384115219116, -0.7598711848258972], + [-3.554356336593628, -1.6815987825393677], + [2.7585811614990234, -4.321420669555664], + [0.05050458759069443, -0.3654994070529938], + [0.6298202276229858, -8.07330322265625], + [-3.774702310562134, -1.0224707126617432], + [-0.10900730639696121, 8.899798393249512], + [1.7849727869033813, -4.726626873016357], + [6.3328471183776855, -2.8418755531311035], + [0.19862878322601318, -0.561222493648529], + [-3.904329538345337, -1.5101555585861206], + [-1.9381673336029053, 1.8460285663604736], + [5.9479660987854, -2.2188589572906494], + [0.6467525362968445, -8.226576805114746], + [-1.3298999071121216, 11.417901992797852], + [8.308369636535645, -2.607182025909424], + [3.9322264194488525, 6.776522636413574], + [2.9296343326568604, 6.225931167602539], + [0.47731709480285645, -6.597673416137695], + [2.318439245223999, -4.9695234298706055], + [-3.760838747024536, -2.325291872024536], + [1.9915997982025146, 5.431027412414551], + [1.7572541236877441, 5.9626784324646], + [2.8521344661712646, -4.605874061584473], + [2.7218291759490967, -4.387677192687988], + [0.5093642473220825, -5.66894006729126], + [-3.70662260055542, -2.185588836669922], + [2.3462460041046143, 5.859681129455566], + [-3.7680742740631104, -2.626847982406616], + [-4.8065972328186035, 7.266266822814941], + [5.117612361907959, 7.855846881866455], + [1.4498562812805176, -6.013020992279053], + [-1.3159053325653076, 0.5211904048919678], + [-0.6714659929275513, 9.716642379760742], + [0.5372848510742188, -7.1879048347473145], + [-3.5729949474334717, -0.9669314622879028], + [-0.09552741795778275, -4.527571678161621], + [9.140467643737793, -2.8471734523773193], + [-0.2798457741737366, 8.328643798828125], + [-4.3297319412231445, -2.3312435150146484], + [-1.5100269317626953, 12.272404670715332], + [-4.579168796539307, 6.274343490600586], + [-0.6864632964134216, 9.606649398803711], + [-5.124684810638428, 6.879049301147461], + [-1.3969429731369019, -0.6148468852043152], + [-0.1705663800239563, 6.632231712341309], + [3.469177484512329, 6.252101898193359], + [-5.594345569610596, -0.8214331865310669], + [0.6001338362693787, -7.371833801269531], + [-4.948148250579834, 5.68367862701416], + [3.252497911453247, 6.024517059326172], + [-4.696871280670166, -0.2790266275405884], + [2.5745699405670166, 6.612748146057129], + [0.6686448454856873, -6.294368267059326], + [0.10893964022397995, -3.680516004562378], + [7.067069053649902, -2.8105289936065674], + [3.681678295135498, -5.908157825469971], + [-3.4534075260162354, -1.9846676588058472], + [-1.4853323698043823, 2.071746826171875], + [-3.191253900527954, -1.1742937564849854], + [-1.986269474029541, -2.026693820953369], + [5.35064697265625, -1.4800196886062622], + [-3.5819530487060547, -1.6375404596328735], + [-1.0349700450897217, 1.187172293663025], + [-5.675261497497559, -0.8431991934776306], + [9.013262748718262, -2.7868213653564453], + [9.242064476013184, -2.7634389400482178], + [-0.3536527752876282, 9.060203552246094], + [-1.0082333087921143, 10.966794967651367], + [-1.5669282674789429, 12.965400695800781], + [-3.2336246967315674, -1.2334747314453125], + [-3.6052000522613525, -5.624452590942383], + [0.7263604998588562, -6.229119300842285], + [0.6160954833030701, -6.050602912902832], + [-1.814414620399475, 0.6443541646003723], + [2.478048324584961, 0.6995027661323547], + [0.5089345574378967, -6.968059062957764], + [0.6280809044837952, -7.338239669799805], + [0.8716490864753723, -5.4777116775512695], + [2.8729939460754395, 4.738493919372559], + [-1.7846977710723877, 1.308701753616333], + [-0.6344848871231079, -3.363783597946167], + [0.9170510768890381, -4.072464942932129], + [6.079012393951416, -3.269007921218872], + [1.7584460973739624, 2.7818186283111572], + [9.440641403198242, -3.008801221847534], + [1.1255906820297241, -4.902191162109375], + [-0.3433281183242798, 5.13572883605957], + [-3.4347622394561768, -2.6418344974517822], + [5.345422267913818, 8.28286361694336], + [0.41997700929641724, -6.155023574829102], + [-1.222252607345581, -3.555917978286743], + [-5.098648548126221, 6.96057653427124], + [-3.3214588165283203, 3.7213222980499268], + [-5.308887004852295, 7.232472896575928], + [1.641233205795288, 4.710680961608887], + [1.0114200115203857, -4.92323112487793], + [2.4939157962799072, -4.718724250793457], + [1.3038123846054077, 4.513519763946533], + [-0.07987243682146072, -2.90558123588562], + [8.623429298400879, -3.2566545009613037], + [-1.1839030981063843, 1.9296013116836548], + [2.6260054111480713, -4.641307830810547], + [-4.4870219230651855, -3.3977935314178467], + [0.5223453640937805, -5.58833122253418], + [2.8264026641845703, -4.654303550720215], + [-0.8004632592201233, 11.018447875976562], + [-1.3947792053222656, 1.7440804243087769], + [-4.201143741607666, 7.38261604309082], + [0.10407214611768723, -4.932619094848633], + [-2.420452117919922, -0.518132746219635], + [7.320089340209961, -2.1597743034362793], + [-2.6630589962005615, 0.0325998030602932], + [-3.5782110691070557, -1.1157069206237793], + [2.072582721710205, 4.766768455505371], + [-0.1618245542049408, -1.9016644954681396], + [-1.2633394002914429, 11.463088035583496], + [1.3599365949630737, 5.448675155639648], + [-1.258478045463562, 11.721746444702148], + [0.5680965781211853, -7.151150703430176], + [-0.31416136026382446, -0.8423110246658325], + [-4.551844596862793, -1.0020420551300049], + [-1.778501272201538, 2.05373477935791], + [2.6438302993774414, -4.481935501098633], + [-4.955552577972412, -0.48871326446533203], + [-5.70550537109375, 7.556874752044678], + [-4.162280559539795, 3.6428792476654053], + [-3.863882064819336, -1.745853066444397], + [2.6128180027008057, 6.881563186645508], + [0.7635642886161804, -8.50581169128418], + [0.7560049891471863, -7.644411563873291], + [-1.4525011777877808, 12.336844444274902], + [-5.131967067718506, -3.489318370819092], + [0.16633057594299316, 5.426603317260742], + [-4.8905348777771, -0.8705427050590515], + [-4.521568775177002, -0.9836849570274353], + [8.629557609558105, -2.808237314224243], + [-1.4664332866668701, 12.350258827209473], + [-3.0268783569335938, -2.6159746646881104], + [4.922389507293701, 7.865096092224121], + [0.9143106341362, -7.118110656738281], + [2.7676022052764893, -4.9981279373168945], + [-4.194640159606934, -1.6161607503890991], + [-5.531091213226318, -1.9016119241714478], + [0.6450713872909546, -6.682036399841309], + [2.9482805728912354, -4.547145366668701], + [-3.784619092941284, -3.072803258895874], + [-4.407167911529541, -0.4080619812011719], + [6.5084052085876465, -2.885063886642456], + [0.5919668078422546, -7.585298538208008], + [-2.523127794265747, -4.410074234008789], + [-3.883481740951538, 3.445204496383667], + [2.92171311378479, -4.895415306091309], + [-4.343012809753418, -1.6347392797470093], + [1.8380460739135742, -4.157256603240967], + [1.023179531097412, -5.800015449523926], + [-3.6637020111083984, 3.617971658706665], + [3.9862558841705322, 7.466893196105957], + [-1.3231399059295654, 10.93411636352539], + [1.0087295770645142, -6.445558547973633], + [2.050384998321533, 1.0564228296279907], + [1.389949917793274, 1.5487658977508545], + [-0.5423511862754822, 0.9822648763656616], + [1.0680214166641235, -5.60768985748291], + [-2.2148830890655518, -0.3001803159713745], + [-2.840972900390625, 2.921746015548706], + [-1.937204360961914, -1.0827897787094116], + [2.0340678691864014, 2.9571077823638916], + [0.8179247975349426, -7.492448329925537], + [-1.0600258111953735, -0.90503990650177], + [-3.690908670425415, -2.258669376373291], + [-1.1932684183120728, 11.547712326049805], + [2.646317481994629, -4.745597839355469], + [-1.229415774345398, 10.773347854614258], + [2.4288504123687744, -4.449471473693848], + [0.24971333146095276, -4.604386806488037], + [0.9993254542350769, -5.069280624389648], + [1.2715214490890503, 1.865439772605896], + [-2.809588670730591, -0.6021766662597656], + [2.165754556655884, 4.3301801681518555], + [-3.117291212081909, 5.0519514083862305], + [-3.992440938949585, -2.885925054550171], + [-3.586564779281616, -2.034219980239868], + [2.179236888885498, 5.46163272857666], + [1.202631950378418, -6.819986343383789], + [-1.011555552482605, -0.9962546229362488], + [-5.911401271820068, 7.881089210510254], + [2.5558502674102783, -4.845015525817871], + [-0.015894867479801178, -4.570876121520996], + [1.0583374500274658, -5.006943702697754], + [0.7170801758766174, -9.131896018981934], + [0.6125079989433289, -0.7914121747016907], + [-3.7280030250549316, -2.309471607208252], + [-3.541379690170288, -1.5570274591445923], + [-2.8884193897247314, -0.5999768972396851], + [6.963290691375732, -3.033010244369507], + [1.1076769828796387, -5.8726701736450195], + [-1.2834162712097168, 4.412334442138672], + [2.9845664501190186, -4.766406059265137], + [-3.844545841217041, -1.6697667837142944], + [-3.3211581707000732, 5.487943649291992], + [-0.7122917771339417, -1.9087129831314087], + [2.8451263904571533, 6.261650085449219], + [1.8388230800628662, 5.022226810455322], + [0.09982382506132126, -5.001086235046387], + [4.261230945587158, 7.629490852355957], + [-3.618818759918213, -1.3384333848953247], + [-2.110206127166748, -0.8089903593063354], + [1.1391685009002686, -5.5358734130859375], + [2.180781126022339, -4.606067657470703], + [-4.0043745040893555, -1.5412298440933228], + [-0.043501801788806915, -1.617588758468628], + [-5.187197685241699, 5.968990325927734], + [-4.124818325042725, -1.6606156826019287], + [2.1607096195220947, -5.0554585456848145], + [2.5768513679504395, -4.149619102478027], + [-1.8838300704956055, 1.6461983919143677], + [-1.3982763290405273, 11.947779655456543], + [-2.022355079650879, 0.7282106876373291], + [-2.9552295207977295, -1.6230989694595337], + [-1.9554036855697632, 0.5994485020637512], + [-0.6516628861427307, -1.6230112314224243], + [-3.9317266941070557, -2.307903528213501], + [0.3238527774810791, -6.73311710357666], + [-1.5673314332962036, 12.819899559020996], + [-5.904758930206299, -0.9806787967681885], + [2.0641887187957764, 0.7399813532829285], + [-3.2979328632354736, -1.0652753114700317], + [-1.9448308944702148, 0.958480954170227], + [-0.8686509728431702, 9.692476272583008], + [-0.9699788689613342, 10.397260665893555], + [-0.1988322138786316, -1.088274598121643], + [2.5487544536590576, 0.8078245520591736], + [0.6394402384757996, -8.809736251831055], + [-2.1213595867156982, 1.594529151916504], + [-3.9015910625457764, -2.162930488586426], + [-5.0843825340271, 2.789975166320801], + [0.8135805726051331, 0.030230071395635605], + [-2.939579725265503, 6.866756439208984], + [-5.018261909484863, -1.2596690654754639], + [1.095036506652832, -0.2803737223148346], + [-5.279312610626221, 6.946841716766357], + [-3.097769021987915, -4.07399845123291], + [-2.064466953277588, 5.186444282531738], + [0.7125862836837769, 3.282193899154663], + [2.2438735961914062, 5.347451686859131], + [-1.399947166442871, -2.5435831546783447], + [7.095943927764893, -2.225168228149414], + [2.560861825942993, -4.657310485839844], + [5.982109069824219, 8.768205642700195], + [3.130406379699707, -3.7957534790039062], + [0.1982938051223755, -3.804114818572998], + [0.6015544533729553, -7.7496867179870605], + [2.807234525680542, -4.9387688636779785], + [1.4910051822662354, -4.553780555725098], + [2.351931095123291, 5.751550674438477], + [-3.9606776237487793, -2.215339183807373], + [-0.599465548992157, 9.745194435119629], + [0.8187451958656311, -7.258115291595459], + [0.5795536637306213, -4.790205001831055], + [1.437593936920166, 4.962677955627441], + [2.1763384342193604, -4.516685485839844], + [2.519787073135376, -4.549928188323975], + [0.36052238941192627, -2.910299062728882], + [0.4166475534439087, -7.517329216003418], + [-3.627431631088257, -1.8792306184768677], + [-2.030205249786377, 2.27148699760437], + [-2.7946176528930664, 3.068161964416504], + [-4.031533241271973, -0.46473726630210876], + [7.4932379722595215, -3.0092194080352783], + [0.8230382800102234, -0.3657533526420593], + [-3.8678548336029053, -1.5810058116912842], + [-1.5436992645263672, -0.9299081563949585], + [1.0238871574401855, 0.02238037809729576], + [1.887679934501648, 2.703810930252075], + [-2.513575792312622, -0.8683772087097168], + [-4.3966264724731445, 6.105302810668945], + [5.937017917633057, -3.757753610610962], + [-5.226139068603516, 5.363359451293945], + [2.8864762783050537, -4.4718427658081055], + [2.1488916873931885, 5.8582987785339355], + [-4.373754024505615, -1.4745268821716309], + [0.4065000116825104, -3.6887400150299072], + [-5.7498459815979, 7.676636695861816], + [7.292072772979736, -2.8343541622161865], + [1.6274932622909546, 0.12002018094062805], + [0.655482828617096, -6.984907627105713], + [1.268935203552246, 2.172797918319702], + [-3.5146148204803467, 5.683015823364258], + [7.405960559844971, -1.9847050905227661], + [4.50619649887085, -4.073877334594727], + [-2.2122390270233154, -1.0599035024642944], + [3.227302074432373, -3.92301869392395], + [-1.7890563011169434, 1.726836919784546], + [0.004171065986156464, -3.593979835510254], + [0.32919180393218994, -5.444149017333984], + [0.7577186226844788, -6.333390235900879], + [1.21192467212677, 5.9222869873046875], + [-1.3756864070892334, 11.54878044128418], + [0.6619371175765991, -0.48340654373168945], + [-3.6742067337036133, -0.786896288394928], + [-4.374571323394775, 5.3537092208862305], + [-1.1831660270690918, 10.732967376708984], + [0.2693866491317749, -6.377852439880371], + [-2.0856246948242188, -0.7779318690299988], + [-4.971733570098877, 0.170418381690979], + [-3.904822587966919, -2.3941004276275635], + [1.565834641456604, 5.415760517120361], + [-1.230636715888977, 11.776216506958008], + [7.8671488761901855, -3.1950151920318604], + [2.2734968662261963, 5.206049919128418], + [-1.9244847297668457, 1.671705722808838], + [3.4910569190979004, 6.8958420753479], + [0.327622652053833, -5.881982803344727], + [-3.5632894039154053, -1.4187359809875488], + [-4.202733993530273, -1.154468297958374], + [-2.4338786602020264, -2.9726240634918213], + [-0.11740494519472122, -1.8371177911758423], + [-3.6272037029266357, -1.9517407417297363], + [1.8262310028076172, 5.602530479431152], + [-1.501124620437622, 12.068906784057617], + [7.297679901123047, -3.4712817668914795], + [4.390324115753174, 7.149301528930664], + [0.6613250374794006, -7.197049140930176], + [0.5542705655097961, -6.405768394470215], + [2.6505439281463623, -4.432621955871582], + [-1.8215916156768799, 3.499516725540161], + [2.8861711025238037, -4.649291038513184], + [3.642951250076294, -3.1168768405914307], + [0.44541192054748535, -6.418296813964844], + [-2.3329179286956787, -2.352155923843384], + [-3.5929811000823975, -2.457191228866577], + [2.545092821121216, 4.744606018066406], + [7.33226203918457, -2.5521762371063232], + [2.6823229789733887, -4.275636672973633], + [0.4197703003883362, -7.199729919433594], + [2.1773769855499268, -4.161415100097656], + [0.7239336371421814, 2.5767571926116943], + [-4.241994380950928, -1.9892603158950806], + [8.785923957824707, -2.6115901470184326], + [-0.06280098110437393, -4.384193420410156], + [0.8629341721534729, -6.882024765014648], + [0.3867504596710205, -6.719386100769043], + [-0.8067100644111633, -0.7306951880455017], + [-0.9554657936096191, 10.557130813598633], + [-3.7636115550994873, -0.9517791867256165], + [2.069425344467163, -4.661306858062744], + [0.59477299451828, -7.739946365356445], + [-3.080066442489624, -1.8278580904006958], + [0.023843608796596527, 4.2373127937316895], + [-1.8277645111083984, 0.4339234232902527], + [-1.6894471645355225, 0.854496955871582], + [-0.1929665207862854, -0.665489673614502], + [-0.8276833295822144, 10.373239517211914], + [-4.350247859954834, 6.896796226501465], + [8.03859806060791, -2.7769081592559814], + [-0.6162211894989014, 9.273303985595703], + [8.348221778869629, -2.4676992893218994], + [-4.239469051361084, 6.359198570251465], + [-1.4832079410552979, 12.163742065429688], + [-3.3067080974578857, -0.6645915508270264], + [7.3971381187438965, -2.070622205734253], + [-2.0853378772735596, -0.6675137877464294], + [-5.328099727630615, -0.96884685754776], + [8.556934356689453, -2.6002161502838135], + [0.1721922755241394, -5.822246551513672], + [9.031132698059082, -2.723314046859741], + [-3.1093993186950684, -1.1481919288635254], + [-0.7696395516395569, 10.765314102172852], + [-5.069213390350342, -0.7003434896469116], + [-4.175329685211182, 0.2742117643356323], + [0.19950389862060547, -5.188633441925049], + [7.01485538482666, -3.51350998878479], + [0.8514789938926697, 0.6987731456756592], + [5.62778902053833, -1.6013603210449219], + [0.6435844302177429, -0.06277455389499664], + [-3.9550423622131348, 3.3643085956573486], + [-2.6002066135406494, -0.8521304130554199], + [2.541865825653076, -4.759605407714844], + [-3.6749284267425537, -3.0176637172698975], + [3.1115942001342773, -4.802326202392578], + [-2.193572759628296, 0.6270149350166321], + [-1.8492157459259033, 1.445776343345642], + [0.24842071533203125, -6.431839942932129], + [-1.1484328508377075, 11.164678573608398], + [2.410282850265503, -4.804108619689941], + [-3.3271329402923584, -1.5116379261016846], + [2.1194941997528076, 5.800311088562012], + [0.171021968126297, -4.985486030578613], + [-0.9465169310569763, 10.495831489562988], + [0.6540180444717407, -6.35463809967041], + [1.3548102378845215, 1.1340183019638062], + [1.5947439670562744, 4.955819129943848], + [-0.6068735718727112, -0.8747483491897583], + [-4.287524223327637, -2.7341864109039307], + [8.69199275970459, -2.582134485244751], + [2.0265510082244873, 0.4964108467102051], + [6.549675464630127, -5.0625433921813965], + [0.5393943786621094, -5.712531089782715], + [0.6624358296394348, -7.959077835083008], + [-3.5275516510009766, -1.6324527263641357], + [-1.3190141916275024, 1.4226142168045044], + [0.5418835282325745, -7.24937105178833], + [-1.4213205575942993, 12.397564888000488], + [-1.9199120998382568, 0.349862277507782], + [-0.9570281505584717, 5.556349754333496], + [9.888376235961914, -2.991194009780884], + [0.3952363133430481, -5.026276588439941], + [6.693463325500488, -4.159445285797119], + [2.638831853866577, -4.721652507781982], + [-4.994866847991943, -4.041188716888428], + [1.2698529958724976, -6.868558406829834], + [-0.10444480925798416, -1.322041392326355], + [-3.1979172229766846, 5.34262752532959], + [1.1674575805664062, -5.346093654632568], + [7.816880702972412, -2.89691424369812], + [0.9361634850502014, -5.980111598968506], + [2.218905210494995, -4.668054103851318], + [-4.105551242828369, -1.9294337034225464], + [-2.911860704421997, 0.4621316194534302], + [2.781841516494751, -4.645765781402588], + [-3.862874746322632, 3.7586424350738525], + [-0.8787635564804077, -1.163342833518982], + [6.659083843231201, -1.8284507989883423], + [2.354149580001831, -4.959777355194092], + [-3.161181688308716, -1.2888896465301514], + [-3.6266112327575684, -2.1840274333953857], + [-0.6858343482017517, 10.117147445678711], + [-1.4178204536437988, 12.039470672607422], + [-0.8214976787567139, 1.5815153121948242], + [-3.5751235485076904, -1.858859658241272], + [2.8555078506469727, 4.7304182052612305], + [1.5572071075439453, 1.2711515426635742], + [6.0841474533081055, -2.0113465785980225], + [-1.212598443031311, -0.785778820514679], + [0.472794771194458, -6.870564937591553], + [-2.1669421195983887, 2.6898303031921387], + [-4.208698272705078, -0.8318607807159424], + [-0.24148213863372803, -1.6003440618515015], + [-4.158274173736572, -1.9282375574111938], + [-0.8556697368621826, 10.012918472290039], + [-0.3243635892868042, 9.274229049682617], + [3.088547945022583, -3.042982578277588], + [0.011450402438640594, -0.7139261364936829], + [-4.889219760894775, -3.7622079849243164], + [1.998783826828003, -4.8195295333862305], + [5.762096405029297, -4.225564956665039], + [2.2086079120635986, -4.453886985778809], + [0.4737083315849304, -6.3603410720825195], + [2.620055913925171, -4.600131511688232], + [1.2055342197418213, -5.69826602935791], + [-1.4764678478240967, 11.676629066467285], + [-5.247318744659424, -0.9240769147872925], + [3.261955499649048, 6.29946231842041], + [6.327327728271484, -3.3879878520965576], + [-4.359524726867676, -1.5890722274780273], + [-5.591638565063477, 5.097686767578125], + [-1.9253195524215698, 2.049123764038086], + [-1.0555411577224731, 9.606660842895508], + [0.6504186391830444, -5.740345001220703], + [0.633415937423706, -7.126515865325928], + [2.68328595161438, -4.246573448181152], + [8.399031639099121, -2.7997372150421143], + [1.0332956314086914, -4.116816997528076], + [-3.32804536819458, 3.623210906982422], + [9.368927955627441, -2.9227383136749268], + [1.0155408382415771, -5.351325035095215], + [-3.608043909072876, -0.8494987487792969], + [3.216890335083008, -4.960165500640869], + [0.5512756705284119, -0.5463879108428955], + [3.8129518032073975, 6.8646931648254395], + [3.1672542095184326, -3.770202159881592], + [-2.7810564041137695, -1.0059934854507446], + [0.6321654319763184, -8.476048469543457], + [2.7717697620391846, -4.391507625579834], + [2.1154425144195557, 5.637266635894775], + [-0.25573182106018066, -1.138840675354004], + [-3.8354408740997314, -3.214620590209961], + [1.0213489532470703, -4.495530128479004], + [-4.514405727386475, 5.292627334594727], + [0.44966888427734375, -6.753592014312744], + [1.7036261558532715, 0.0955960750579834], + [2.341602087020874, 4.369048595428467], + [-5.159511089324951, 7.883767604827881], + [7.549606800079346, -2.6876087188720703], + [8.5368013381958, -2.817612409591675], + [-5.149372577667236, 4.8208417892456055], + [8.200552940368652, -3.4630982875823975], + [-5.326993465423584, 5.263110637664795], + [-2.9273979663848877, 2.619882345199585], + [-2.8202807903289795, -2.208449125289917], + [7.4451680183410645, -3.8116374015808105], + [0.7144170999526978, -7.339017868041992], + [-1.1228041648864746, -0.0192168690264225], + [0.9650676846504211, -0.3543100655078888], + [-3.7545554637908936, -2.7840583324432373], + [-1.0392950773239136, 11.238072395324707], + [2.8137567043304443, -4.470414161682129], + [6.727792263031006, -3.0988690853118896], + [-4.846192836761475, 6.740737438201904], + [-2.4127554893493652, 6.054954528808594], + [3.5812127590179443, 6.695279121398926], + [-1.7226544618606567, 1.2601627111434937], + [-3.1353437900543213, -1.4188966751098633], + [-0.3083556890487671, 9.54104995727539], + [-0.2979296147823334, -1.537925362586975], + [-1.3614704608917236, 11.58735466003418], + [-1.266067385673523, 0.42624539136886597], + [1.2218835353851318, -4.381036758422852], + [-2.8661787509918213, -0.6907921433448792], + [1.7544405460357666, 1.8521379232406616], + [-4.307999134063721, -1.2372112274169922], + [0.6726471781730652, -8.59072208404541], + [-4.36406946182251, 6.173797130584717], + [5.090019702911377, 7.963749885559082], + [-3.909886121749878, -0.7794754505157471], + [-1.8764235973358154, 1.7607101202011108], + [0.699700653553009, -9.592663764953613], + [6.942656993865967, -1.7810786962509155], + [-4.632095813751221, -1.1249301433563232], + [1.658060073852539, 0.8519996404647827], + [-2.325869083404541, -1.8083869218826294], + [-5.20571756362915, 3.5301826000213623], + [0.42013490200042725, -4.299814224243164], + [-3.07470440864563, 4.331974983215332], + [-3.5341100692749023, -0.9435306787490845], + [-2.081949234008789, -0.0029348768293857574], + [-3.7210023403167725, -1.0823463201522827], + [-3.9935710430145264, 5.517223358154297], + [-2.893078327178955, -1.1240402460098267], + [-4.241023063659668, -2.297166585922241], + [2.9578139781951904, -4.926111221313477], + [1.0953575372695923, -6.444334983825684], + [-4.808165550231934, 4.443478584289551], + [-5.098080635070801, 5.943829536437988], + [-4.090147495269775, -1.3945165872573853], + [0.09715607017278671, -4.413882255554199], + [-0.2937086820602417, 8.455348014831543], + [-1.466930627822876, 12.046753883361816], + [0.9383614659309387, -5.2812676429748535], + [7.513217449188232, -2.627899169921875], + [0.45309680700302124, -7.100825309753418], + [0.0771753117442131, -5.035402297973633], + [5.480998516082764, -1.3386189937591553], + [-2.8071987628936768, 3.0685012340545654], + [1.61478590965271, 5.145624160766602], + [-5.610960006713867, -5.145676612854004], + [-0.3066362738609314, -0.6690750122070312], + [-4.722828388214111, 0.4836386442184448], + [0.5135801434516907, -8.728200912475586], + [-1.1995021104812622, 10.878063201904297], + [-4.316765308380127, -1.3521074056625366], + [-3.3075664043426514, -2.2199666500091553], + [0.5652387738227844, -8.272109985351562], + [0.6543840765953064, 6.722689628601074], + [-3.9523231983184814, 6.214350700378418], + [4.430008411407471, 7.401102542877197], + [0.22898292541503906, -6.061882972717285], + [8.333134651184082, -3.5735995769500732], + [-2.644076108932495, 1.0198731422424316], + [2.055340528488159, 4.836113929748535], + [-2.798316717147827, 5.587075233459473], + [6.989802837371826, -2.5909430980682373], + [3.7545979022979736, -4.431468963623047], + [2.327169418334961, -5.085641860961914], + [-4.259165287017822, -1.8810021877288818], + [1.8026328086853027, 3.8372061252593994], + [-2.2839696407318115, -0.8445987701416016], + [-0.9494494795799255, 9.516783714294434], + [-1.0521769523620605, 10.13422679901123], + [-2.0578997135162354, 2.312425374984741], + [8.214552879333496, -2.491719961166382], + [-4.784239292144775, -0.15565252304077148], + [1.051713466644287, -5.970309257507324], + [0.856941819190979, -6.738921165466309], + [-1.3359084129333496, 11.843505859375], + [-1.3350902795791626, 11.697153091430664], + [-2.4591503143310547, -2.151986598968506], + [2.640906810760498, 4.921993255615234], + [-3.3972785472869873, -1.5158780813217163], + [0.4198495149612427, -0.6450634598731995], + [-1.106433391571045, 10.677020072937012], + [0.5647721290588379, -7.567091941833496], + [0.40771710872650146, -6.907991886138916], + [0.16430729627609253, -4.980792999267578], + [-1.8735616207122803, 2.0001978874206543], + [0.628999650478363, -8.307708740234375], + [-0.7592162489891052, 8.374625205993652], + [2.369645833969116, -6.793020248413086], + [-0.07884062081575394, -1.1686135530471802], + [-3.5735936164855957, -0.9062949419021606], + [0.7196475863456726, -9.40341854095459], + [-3.723520517349243, -1.2093697786331177], + [0.6740915179252625, -5.955571174621582], + [-5.974795818328857, 7.800478935241699], + [-1.3662011623382568, 5.750824928283691], + [0.42083120346069336, -5.127735137939453], + [1.0498270988464355, 0.28033968806266785], + [3.0268776416778564, -4.982138633728027], + [-0.31890183687210083, 8.451329231262207], + [-2.9993724822998047, -1.6245300769805908], + [-5.648280620574951, 6.9644012451171875], + [2.172382354736328, -5.071713447570801], + [-1.2064696550369263, 11.519691467285156], + [-3.253168821334839, -0.8606935739517212], + [1.2899731397628784, -0.1934559941291809], + [-2.6565048694610596, 2.7935006618499756], + [0.6025875806808472, -6.051753520965576], + [0.7777196764945984, -7.61296272277832], + [-3.912200689315796, -1.8807049989700317], + [-0.857306182384491, 10.297581672668457], + [0.032742939889431, -5.091175079345703], + [0.7058284878730774, -7.836736679077148], + [-3.8719608783721924, -2.7371315956115723], + [-0.7365359663963318, 10.745780944824219], + [2.8455443382263184, 6.155994415283203], + [-1.1992367506027222, 11.604898452758789], + [0.2473166584968567, -5.460081577301025], + [-0.9109401702880859, 10.527649879455566], + [0.14620032906532288, -0.4560132920742035], + [0.7117341160774231, -9.118863105773926], + [-4.478432655334473, -3.6575653553009033], + [-2.9262962341308594, -1.4330401420593262], + [0.6900873780250549, 5.121803283691406], + [-0.8767641186714172, 10.240150451660156], + [3.295085906982422, 6.134111404418945], + [-3.9660017490386963, -4.924417018890381], + [1.5323567390441895, -4.576031684875488], + [-3.227245330810547, -3.282383680343628], + [-3.94466233253479, -1.4265636205673218], + [-0.5491977334022522, 9.368908882141113], + [4.026769638061523, 7.21931266784668], + [0.6580092310905457, -8.217467308044434], + [5.846199035644531, -1.666763186454773], + [-3.5048069953918457, -2.556199550628662], + [-0.7585414052009583, 7.815990447998047], + [2.837064027786255, -4.380003929138184], + [-4.535279273986816, -2.6297128200531006], + [-1.2822637557983398, 11.490558624267578], + [-2.981353521347046, -0.9635680913925171], + [5.874599933624268, -2.912599802017212], + [-0.4477183520793915, -1.5168079137802124], + [-3.408992052078247, -1.0536497831344604], + [1.4145101308822632, 0.24698519706726074], + [0.4997498393058777, -6.337164878845215], + [0.40153753757476807, -7.125355243682861], + [0.7292816042900085, -9.00928783416748], + [2.7598021030426025, -4.367547035217285], + [2.45367693901062, -4.830725193023682], + [-3.003852128982544, -1.3542197942733765], + [-1.52913236618042, -2.39155912399292], + [-1.8827272653579712, 2.1730682849884033], + [-3.9850103855133057, 5.098886489868164], + [0.7716153264045715, -4.826044082641602], + [2.968946695327759, -5.028359889984131], + [0.5631863474845886, -7.708523273468018], + [-1.9531364440917969, 2.345554828643799], + [-5.006726264953613, 5.473156929016113], + [1.856438398361206, 5.66644287109375], + [0.7873761057853699, -7.454371452331543], + [0.5023334622383118, -4.539902687072754], + [2.1483154296875, 4.111331462860107], + [3.927598237991333, 7.160265922546387], + [-1.0887283086776733, 10.57002067565918], + [-1.6884137392044067, 1.9494553804397583], + [7.582579135894775, -3.2794294357299805], + [-1.1853516101837158, 10.63580322265625], + [-0.5678513646125793, -1.5561057329177856], + [-4.692259788513184, -1.691210150718689], + [8.860427856445312, -2.640282392501831], + [2.340092897415161, 4.308487892150879], + [-4.053829193115234, -2.7502851486206055], + [-3.8850486278533936, -1.0254179239273071], + [3.3480465412139893, -3.188263416290283], + [0.7822319269180298, -5.550280570983887], + [-0.5096086263656616, 9.388667106628418], + [-0.5259771347045898, 9.495967864990234], + [0.1826130747795105, -6.180497169494629], + [-3.574490547180176, 5.762547492980957], + [0.47798705101013184, -6.347885608673096], + [2.4482452869415283, 6.069344520568848], + [2.346043825149536, 4.820928573608398], + [2.015774965286255, 2.9641788005828857], + [-3.4844300746917725, -1.7321441173553467], + [2.0336172580718994, 5.393193244934082], + [3.8626201152801514, -5.2574968338012695], + [0.2948724627494812, -4.859677791595459], + [-6.071744441986084, -0.9395719766616821], + [4.879539966583252, -1.7718769311904907], + [-1.861261010169983, 5.700859069824219], + [-3.416583299636841, -2.1252520084381104], + [0.42704838514328003, -6.827545166015625], + [-1.0994046926498413, 1.3373275995254517], + [1.9283883571624756, -4.840828895568848], + [-3.8728559017181396, -2.5944430828094482], + [2.590276002883911, -4.248344898223877], + [5.468971252441406, -1.910643458366394], + [2.3386623859405518, -5.665072441101074], + [-1.890043020248413, 0.9200985431671143], + [-4.211827754974365, -1.3423727750778198], + [0.5032963156700134, -6.89657735824585], + [1.3296895027160645, 5.126652717590332], + [0.6453126072883606, -8.523656845092773], + [-1.0985350608825684, 10.93777084350586], + [-3.939785957336426, 5.349115371704102], + [-0.12019795924425125, 6.9664626121521], + [-2.155834436416626, 0.4823628067970276], + [-4.2632246017456055, -2.577848434448242], + [-4.387745380401611, 5.622096538543701], + [6.247788906097412, -1.4465395212173462], + [2.8552534580230713, -4.284938812255859], + [-1.4098743200302124, 12.137378692626953], + [9.298365592956543, -2.846668004989624], + [-2.5552315711975098, -0.7312971353530884], + [-4.316379070281982, 6.655734062194824], + [5.6253557205200195, -1.9521502256393433], + [1.0512545108795166, 5.7295989990234375], + [-0.628862738609314, 10.073448181152344], + [-5.267863750457764, -1.329658031463623], + [-3.3652493953704834, -0.7409614324569702], + [-0.8386603593826294, -2.269300699234009], + [-3.609426975250244, -1.2572726011276245], + [-2.9750912189483643, -1.472319483757019], + [6.618150234222412, -3.5478687286376953], + [-4.659091472625732, -0.827633261680603], + [-3.9282915592193604, 5.490165710449219], + [-3.663163423538208, -2.364093542098999], + [0.8744810223579407, -7.227190017700195], + [-3.370460271835327, -2.017341375350952], + [5.861659526824951, -4.302631378173828], + [7.478761196136475, -2.207921028137207], + [2.6438212394714355, -4.720561981201172], + [0.4227190613746643, -6.1024580001831055], + [2.5576224327087402, -4.663434982299805], + [-3.8558480739593506, -2.662091016769409], + [7.752343654632568, -2.7785003185272217], + [-1.0586419105529785, 10.923860549926758], + [-4.291781902313232, 4.21957540512085], + [5.76376485824585, -3.3173160552978516], + [-4.236119747161865, -2.1903932094573975], + [-0.965360701084137, 11.144134521484375], + [6.232150077819824, -2.856325626373291], + [2.798800230026245, -4.363823413848877], + [-0.6830882430076599, 10.041044235229492], + [-3.183781385421753, -0.8467201590538025], + [-1.1161162853240967, 10.645631790161133], + [-0.5298212766647339, 10.051513671875], + [-4.803405284881592, -3.0504977703094482], + [0.13234800100326538, -3.885843515396118], + [-2.6026217937469482, -1.1352065801620483], + [-1.1268481016159058, 11.219173431396484], + [-2.0211703777313232, 2.215125560760498], + [0.4541333317756653, -7.9298095703125], + [-3.8027901649475098, -1.0812596082687378], + [-3.885711431503296, -1.1444408893585205], + [-5.368462562561035, 6.222029685974121], + [-1.8897590637207031, 1.8792260885238647], + [2.3158328533172607, 6.510764122009277], + [0.7661128044128418, -6.731190204620361], + [-3.72361159324646, -1.036007285118103], + [0.7793377041816711, -5.359767913818359], + [-2.574968099594116, 2.700167417526245], + [0.7966554164886475, -4.239163398742676], + [-4.487257480621338, 5.88683557510376], + [-3.2031610012054443, -2.5761616230010986], + [-2.3655266761779785, 2.443406820297241], + [-1.9637187719345093, 0.6046745777130127], + [-4.6731390953063965, -3.6920053958892822], + [1.021629810333252, -5.289719581604004], + [-3.5727598667144775, -3.107029438018799], + [-1.3229025602340698, 11.65797233581543], + [0.5781195163726807, -6.797891139984131], + [0.49717801809310913, -5.108375549316406], + [-0.22077900171279907, 9.768882751464844], + [-5.635448932647705, 4.23768424987793], + [0.18394914269447327, -3.2207930088043213], + [7.9594502449035645, -2.535463809967041], + [-2.9443185329437256, -0.7748528718948364], + [0.5329188108444214, -7.038885116577148], + [6.7535319328308105, -4.289204120635986], + [-3.906439781188965, -1.325429081916809], + [2.082134246826172, 4.798441410064697], + [-4.927271842956543, 5.2631754875183105], + [3.8807551860809326, -2.417879819869995], + [0.3658706545829773, -6.982647895812988], + [-3.3695061206817627, -1.3541339635849], + [7.443761348724365, -3.321746587753296], + [2.945970058441162, -4.944532871246338], + [7.094338893890381, -2.0274221897125244], + [-3.08288836479187, 4.045891284942627], + [-4.705836772918701, -4.548576831817627], + [6.451897144317627, -4.743996620178223], + [-2.023306131362915, 2.306095600128174], + [1.0067884922027588, -6.186077117919922], + [0.6897165775299072, 3.2190935611724854], + [1.9937822818756104, -6.619606971740723], + [7.164617538452148, -2.654265880584717], + [1.5694255828857422, -6.278517723083496], + [-1.1987513303756714, 10.853837966918945], + [0.4962352514266968, -7.824267864227295], + [-3.597618818283081, -2.280400276184082], + [1.1057134866714478, -4.887238502502441], + [-1.8718210458755493, 1.9736419916152954], + [0.44875937700271606, -6.3719940185546875], + [2.578436851501465, -3.7409603595733643], + [-4.09679651260376, -2.9571926593780518], + [1.1973214149475098, 4.682022571563721], + [2.9111979007720947, -3.745309591293335], + [-3.8033440113067627, -0.9113768339157104], + [-2.26369571685791, 2.320985794067383], + [-2.9384210109710693, -0.4441177248954773], + [-0.5934028029441833, 9.72056770324707], + [2.170024871826172, -6.965847015380859], + [-3.8262836933135986, -1.9053764343261719], + [0.574368417263031, -8.311483383178711], + [0.7749848961830139, -9.742828369140625], + [0.6058502197265625, -8.385156631469727], + [-4.036732196807861, -2.9137914180755615], + [-0.44913846254348755, 9.232284545898438], + [-1.2632147073745728, 11.040864944458008], + [1.1724663972854614, -4.706302642822266], + [-4.114552974700928, -2.6868059635162354], + [1.5272294282913208, -5.431657791137695], + [-1.484381079673767, 12.265434265136719], + [2.7808659076690674, -4.712366104125977], + [3.6175811290740967, 7.176537036895752], + [2.894667387008667, 5.676153182983398], + [-1.9500367641448975, 2.189553737640381], + [2.9325063228607178, -4.2809367179870605], + [2.71541428565979, -4.426558971405029], + [-4.20564603805542, 4.704030990600586], + [7.998734951019287, -2.4358460903167725], + [0.5009958744049072, -0.4078819155693054], + [0.9682709574699402, 1.5980767011642456], + [8.55712890625, -2.544779062271118], + [-1.7215741872787476, 1.160110354423523], + [-3.5874407291412354, 5.662443161010742], + [2.3788323402404785, 0.7780386209487915], + [5.8202290534973145, -2.2449071407318115], + [-1.331693172454834, 1.983505368232727], + [2.7961490154266357, -4.693778991699219], + [-3.7431888580322266, -0.49323543906211853], + [-4.731301784515381, -0.9806643724441528], + [2.2744524478912354, -0.22639569640159607], + [-3.505523681640625, -2.4826674461364746], + [2.4876110553741455, 6.894297122955322], + [-0.5199806094169617, 10.058847427368164], + [-1.8647103309631348, 1.5444434881210327], + [-5.586650371551514, -1.0551434755325317], + [-1.0964915752410889, -1.198852300643921], + [0.9282601475715637, -8.07888412475586], + [-4.1932454109191895, 6.360107421875], + [-2.9413466453552246, -1.5073705911636353], + [0.6338677406311035, -7.694023132324219], + [-4.459287166595459, 7.419185638427734], + [1.9631786346435547, 4.253617286682129], + [-4.961194038391113, -0.658053994178772], + [-4.992488384246826, 5.1935834884643555], + [-0.7366311550140381, 10.042600631713867], + [-4.899252414703369, 5.928383827209473], + [-0.29065772891044617, 6.077526092529297], + [-0.38201671838760376, 9.878215789794922], + [1.199572205543518, -0.2450198531150818], + [-1.936659336090088, 2.4297449588775635], + [7.765556812286377, -2.9681448936462402], + [-4.498885631561279, 6.401010036468506], + [7.93302583694458, -2.36700439453125], + [-4.1045451164245605, -1.336098074913025], + [-3.9021599292755127, -2.749420642852783], + [7.815156936645508, -2.866581439971924], + [-3.3530075550079346, -1.7729905843734741], + [4.754800796508789, 7.690384864807129], + [-0.7168131470680237, 10.93911361694336], + [0.7624669075012207, -8.68931770324707], + [3.0974810123443604, -4.78264045715332], + [3.71152925491333, 7.01465368270874], + [-4.522676944732666, 5.291329383850098], + [-3.375927686691284, -3.2091286182403564], + [-1.480484962463379, 12.110417366027832], + [-2.029552698135376, -0.8632144331932068], + [-1.9162330627441406, 0.6445447206497192], + [-0.03798139840364456, -4.82759952545166], + [-1.061061143875122, -0.9049949645996094], + [-4.992940425872803, -3.988243818283081], + [7.350534439086914, -2.5652711391448975], + [9.757046699523926, -2.9247705936431885], + [0.6908908486366272, -6.4306440353393555], + [5.974552631378174, -1.2032686471939087], + [-0.3443722128868103, 9.736288070678711], + [2.564821720123291, -4.701523303985596], + [0.6113787293434143, -0.438188374042511], + [2.908264398574829, -4.994490146636963], + [-0.27997714281082153, 8.407888412475586], + [-4.867115497589111, -3.450934886932373], + [-1.9195327758789062, 1.3585213422775269], + [-1.544873595237732, 0.44441089034080505], + [2.727715253829956, -4.276419162750244], + [6.400880336761475, -1.2158424854278564], + [-4.3971357345581055, 5.9015326499938965], + [-1.5695314407348633, 0.9674028158187866], + [-0.5017622709274292, 9.666179656982422], + [1.701399326324463, 5.994655132293701], + [2.0330049991607666, -1.5824618339538574], + [2.970123052597046, -4.584995746612549], + [1.4171206951141357, 0.40996432304382324], + [1.9740729331970215, 0.6001856327056885], + [0.8289743065834045, -3.8605966567993164], + [-2.985621690750122, -1.1899844408035278], + [-1.7618862390518188, -1.2905913591384888], + [-0.7462272047996521, -1.1241148710250854], + [0.38164663314819336, -4.711757659912109], + [0.7175979018211365, -8.79569149017334], + [1.865869164466858, -3.850978136062622], + [-3.5939419269561768, -1.6213124990463257], + [-2.374732732772827, -2.3748834133148193], + [-4.644991397857666, 7.009096622467041], + [2.6597073078155518, -4.781253814697266], + [0.4510312080383301, -7.097047805786133], + [-0.6355528235435486, 9.745794296264648], + [-3.7418806552886963, -3.27966570854187], + [-5.186483860015869, -1.1785072088241577], + [-2.891754388809204, -2.9461257457733154], + [2.4166276454925537, -4.277451992034912], + [-1.438166856765747, 11.853686332702637], + [1.3376023769378662, -5.14100456237793], + [1.3687325716018677, -5.436915397644043], + [0.5297973155975342, -6.905735492706299], + [-4.244700908660889, -1.2876074314117432], + [-3.678107976913452, -1.1096769571304321], + [-4.056494235992432, -0.6058974266052246], + [0.40216827392578125, -7.207221031188965], + [-3.7307779788970947, -2.300736427307129], + [3.553891658782959, 7.202465534210205], + [-3.8856561183929443, -2.6620397567749023], + [1.0758723020553589, 0.858374834060669], + [-4.0072550773620605, -2.0224101543426514], + [5.250692844390869, -1.0452868938446045], + [0.7385528683662415, -9.136160850524902], + [-4.9416961669921875, 5.659167766571045], + [0.2892035245895386, -5.567790508270264], + [1.2449376583099365, -4.2312541007995605], + [-4.094667434692383, 6.569820880889893], + [-3.6674654483795166, 5.930109024047852], + [-1.7671029567718506, 1.5273395776748657], + [-4.856211185455322, -1.1793627738952637], + [-3.3928263187408447, -1.5219663381576538], + [1.7062042951583862, -4.147435188293457], + [-1.0759787559509277, 10.212089538574219], + [-0.6371665596961975, 10.281899452209473], + [-5.2511186599731445, 7.0048346519470215], + [-4.1499152183532715, -0.6853324174880981], + [-2.0788028240203857, 2.4096872806549072], + [0.4109894633293152, -6.865177154541016], + [0.7215953469276428, -8.279024124145508], + [-5.09888219833374, 6.996903419494629], + [2.7593634128570557, -4.750948429107666], + [-1.7899911403656006, 1.341744065284729], + [8.551770210266113, -2.8056490421295166], + [0.38155341148376465, -0.7695848941802979], + [3.4041154384613037, -5.302790641784668], + [-5.39895486831665, -0.7949968576431274], + [2.5320937633514404, -4.876197814941406], + [-0.8048112988471985, 0.8095169067382812], + [0.7133104205131531, -7.895759582519531], + [-0.5331574082374573, 10.213035583496094], + [0.36708661913871765, -0.820864737033844], + [-1.275438666343689, 11.751304626464844], + [-5.0173540115356445, 5.710902690887451], + [-5.008366107940674, -1.256494402885437], + [2.877345561981201, -5.100628852844238], + [1.4379416704177856, -0.033104512840509415], + [-3.9842259883880615, -1.346677303314209], + [8.8064546585083, -2.695254325866699], + [-1.826461911201477, 2.6882553100585938], + [-1.371168613433838, 11.92144775390625], + [1.3507411479949951, -6.421525955200195], + [-1.0683948993682861, 10.253362655639648], + [0.8600092530250549, -6.574206829071045], + [-2.3166251182556152, -0.5663962364196777], + [0.7352212071418762, 7.827635765075684], + [-3.208087205886841, 3.1370561122894287], + [0.7064846754074097, -5.199047088623047], + [0.2969602346420288, -3.888880491256714], + [1.400482416152954, 1.5350171327590942], + [0.6317901015281677, -8.09207820892334], + [-2.494797468185425, -0.002687279134988785], + [2.4198873043060303, 5.784655570983887], + [-0.7059729099273682, 10.46548080444336], + [3.630963087081909, -5.776765823364258], + [-1.3069322109222412, 11.382865905761719], + [-0.9796702861785889, 10.495584487915039], + [1.8131169080734253, 0.6686033010482788], + [1.3886473178863525, 0.0977751612663269], + [1.0639499425888062, 5.312049865722656], + [-4.090671062469482, -1.0055902004241943], + [-3.3913636207580566, 3.3747198581695557], + [-1.9979734420776367, 2.4102349281311035], + [-6.183798789978027, 8.137823104858398], + [-0.9177194833755493, 10.476163864135742], + [-4.078622341156006, -2.6479318141937256], + [-0.846486508846283, 10.416448593139648], + [2.7877213954925537, -4.676146030426025], + [-3.3811075687408447, -0.9655650854110718], + [-3.3687007427215576, 5.011511325836182], + [-0.18007436394691467, -0.9033777117729187], + [-5.710552215576172, 5.790274620056152], + [5.760704040527344, -1.6876639127731323], + [5.0366530418396, 8.2070951461792], + [0.5759892463684082, -5.981101989746094], + [6.848794937133789, -3.1293256282806396], + [-0.772990882396698, -0.1920788437128067], + [-1.9242258071899414, 2.6424503326416016], + [4.065215587615967, 7.178646087646484], + [-0.5671883225440979, 9.249444961547852], + [0.011447422206401825, -1.1326817274093628], + [-4.700823783874512, 6.250596046447754], + [-3.676093339920044, -1.3051074743270874], + [8.383667945861816, -2.8625190258026123], + [-1.0733989477157593, 1.627224087715149], + [1.206266164779663, -3.303905963897705], + [-1.0889313220977783, 11.317708015441895], + [-2.85064959526062, 5.491763591766357], + [-3.1933791637420654, 4.6976399421691895], + [-5.086958408355713, -0.6800105571746826], + [-1.432281732559204, 12.291360855102539], + [5.378820896148682, -1.285025715827942], + [1.1944890022277832, 1.953184962272644], + [0.5807426571846008, -7.663503646850586], + [-4.2046380043029785, -1.5777629613876343], + [-3.5090854167938232, 3.6854169368743896], + [0.6194710731506348, -8.082667350769043], + [-1.9184253215789795, 1.7980140447616577], + [-3.603886365890503, -1.5502299070358276], + [-1.7552120685577393, 1.1967049837112427], + [0.8191925883293152, -8.280067443847656], + [-0.3635254502296448, -1.3897781372070312], + [0.6000199317932129, -7.726533889770508], + [-3.690659284591675, -0.22975271940231323], + [0.6557824611663818, -6.765783786773682], + [0.7962385416030884, -7.0321946144104], + [-5.192849636077881, -0.7936777472496033], + [3.8404834270477295, 6.79208517074585], + [0.8708914518356323, -6.799820899963379], + [-1.5191755294799805, -2.245373487472534], + [-5.435313701629639, -4.678656101226807], + [0.030891142785549164, -0.8081668615341187], + [0.5780499577522278, -7.181783676147461], + [-0.47211208939552307, -2.650675058364868], + [7.349715709686279, -3.198939800262451], + [0.5215939283370972, -7.40302848815918], + [7.5731377601623535, -2.227475881576538], + [2.442354440689087, -4.673300266265869], + [1.8845324516296387, -4.437646389007568], + [8.981820106506348, -2.7986373901367188], + [-5.823116779327393, 7.581995964050293], + [-3.3752784729003906, 5.472954750061035], + [-4.10235071182251, -1.3115233182907104], + [1.9386966228485107, 5.749068737030029], + [-4.471321105957031, 6.370952129364014], + [-0.408955454826355, 9.950394630432129], + [2.9984006881713867, -4.980853080749512], + [-3.527573585510254, -2.385777711868286], + [4.528483867645264, 7.44809103012085], + [0.10079508274793625, -6.156563758850098], + [-2.037123680114746, 6.202907562255859], + [0.6558195352554321, -8.219511985778809], + [-1.763473629951477, 1.5742607116699219], + [-4.890653610229492, -3.6050283908843994], + [-4.680918216705322, -3.083559036254883], + [-4.608421802520752, -2.947039842605591], + [-0.44599437713623047, -0.6032594442367554], + [1.566035270690918, 5.256896018981934], + [-0.46954745054244995, 10.795509338378906], + [7.274029731750488, -2.007767677307129], + [-0.7633866667747498, 10.122581481933594], + [-1.413567066192627, 11.832740783691406], + [-2.7488720417022705, 2.8956186771392822], + [6.97864294052124, -1.9355939626693726], + [-0.004244275391101837, -1.3288766145706177], + [1.2248114347457886, 6.09227180480957], + [-0.9503315091133118, 10.816160202026367], + [1.1672741174697876, -0.04830271378159523], + [-1.4025073051452637, 1.966330647468567], + [3.3443710803985596, -4.212290287017822], + [-3.264868974685669, 5.617404937744141], + [0.4888010025024414, -7.379465103149414], + [-0.05065823346376419, 8.155056953430176], + [-0.5382919907569885, 9.918244361877441], + [2.5554888248443604, -4.491013050079346], + [0.5595000386238098, -8.437726974487305], + [1.17959725856781, -5.394227981567383], + [0.6319166421890259, -7.23935079574585], + [-1.8025321960449219, 0.8296231627464294], + [-1.7584091424942017, 1.2899415493011475], + [-5.6196208000183105, 7.714982509613037], + [-3.017008066177368, 5.462948799133301], + [-3.694127321243286, -2.5804548263549805], + [-2.1941869258880615, 2.5580976009368896], + [-4.701839923858643, -3.816178560256958], + [2.6673851013183594, -4.361391544342041], + [-1.4431003332138062, 11.888092041015625], + [2.7915198802948, -4.362016677856445], + [0.024808071553707123, -4.920836448669434], + [2.0404672622680664, -4.813868522644043], + [-3.677435874938965, -1.114179253578186], + [2.259859085083008, -4.48152494430542], + [4.304127216339111, 7.252913475036621], + [-2.010695457458496, -0.5546425580978394], + [0.6867683529853821, -8.422510147094727], + [-3.633650064468384, 5.7994794845581055], + [2.7332820892333984, -4.490928649902344], + [0.6402949094772339, -8.115194320678711], + [0.6384108066558838, -8.186349868774414], + [-3.1897201538085938, 5.734025955200195], + [0.7026674151420593, -7.819086074829102], + [7.775604248046875, -2.359147548675537], + [-2.8057165145874023, -0.07874292135238647], + [2.1076643466949463, 5.862675666809082], + [1.1342287063598633, -4.108825206756592], + [3.0388858318328857, -4.6754255294799805], + [-4.7725090980529785, -1.665202260017395], + [0.1612234115600586, -5.825074195861816], + [7.541813373565674, -2.282407283782959], + [0.23063302040100098, 1.3185983896255493], + [2.739638566970825, -4.680788040161133], + [-3.642439603805542, 5.754408359527588], + [-4.202085018157959, -2.281221389770508], + [-3.773791551589966, 0.09059607982635498], + [6.358272552490234, -4.920419216156006], + [8.754441261291504, -2.655393123626709], + [7.122831344604492, -1.9024568796157837], + [0.34239161014556885, -6.777201175689697], + [-1.8470993041992188, 0.1377633810043335], + [-1.5381401777267456, 12.197019577026367], + [-4.6849141120910645, -3.236694574356079], + [-3.753973960876465, 6.054326057434082], + [7.541950225830078, -2.4770267009735107], + [8.906867027282715, -2.798380136489868], + [0.5416560769081116, -7.731620788574219], + [7.4261884689331055, -4.385771751403809], + [2.043793201446533, -4.702775955200195], + [0.758662760257721, -7.630637168884277], + [-0.7058504819869995, -1.9416859149932861], + [0.4292633533477783, -6.545618057250977], + [3.7682907581329346, 6.84234619140625], + [9.169669151306152, -2.8058159351348877], + [-5.13190221786499, 6.637208938598633], + [5.964094161987305, -3.2140016555786133], + [-3.460202693939209, 2.6363472938537598], + [-4.342416286468506, -1.988612413406372], + [-3.9054181575775146, -3.5237350463867188], + [-3.1389777660369873, 4.543827056884766], + [-4.467957019805908, 6.700890064239502], + [3.492445468902588, 6.275457382202148], + [0.31285661458969116, -6.576397895812988], + [2.473970413208008, -4.125217914581299], + [0.5999879240989685, -8.327573776245117], + [-3.3569436073303223, -1.1669083833694458], + [8.193535804748535, -3.0218045711517334], + [0.865237832069397, -0.3438856601715088], + [1.1679089069366455, 0.008694317191839218], + [2.804236650466919, 6.189628601074219], + [-0.043707408010959625, -4.399825096130371], + [-1.6043277978897095, 12.799407005310059], + [1.9604146480560303, 4.541190147399902], + [-3.7362802028656006, -2.1262779235839844], + [0.5862014293670654, -7.585917949676514], + [-0.6293169856071472, 10.123529434204102], + [0.7153941988945007, -6.515951156616211], + [-2.7679617404937744, -0.7330722808837891], + [-2.192396402359009, 1.67681086063385], + [6.131725311279297, -1.6150554418563843], + [-3.3476784229278564, -1.251440167427063], + [-3.3576653003692627, -1.4993826150894165], + [3.8739993572235107, 6.655604839324951], + [4.639014720916748, -1.8474525213241577], + [-1.9918372631072998, 1.4212005138397217], + [-4.438706874847412, -1.2068111896514893], + [0.7078615427017212, -8.031371116638184], + [6.378854274749756, -1.7453258037567139], + [-1.1458170413970947, 10.157098770141602], + [4.44325590133667, 7.197086334228516], + [-1.916626214981079, 5.969676971435547], + [0.9961987137794495, -6.805603981018066], + [2.081676721572876, 4.804102897644043], + [2.4056310653686523, -5.398732662200928], + [2.976536512374878, -4.645671844482422], + [-3.1790971755981445, -1.6534489393234253], + [0.5406145453453064, -5.426700592041016], + [1.78490149974823, 5.765679359436035], + [-2.180128574371338, -3.9520761966705322], + [-1.2361485958099365, -0.4756739139556885], + [-0.41740453243255615, 0.023734819144010544], + [0.6377223134040833, -7.653267860412598], + [2.816807508468628, 6.753228187561035], + [-3.8564236164093018, -2.7023816108703613], + [0.6842400431632996, -5.961920738220215], + [-5.402718544006348, 7.084826946258545], + [-1.8493733406066895, -0.712620735168457], + [-3.2345855236053467, -0.6677826046943665], + [-3.9231655597686768, -1.3623435497283936], + [0.0027631446719169617, -4.1407341957092285], + [1.1565051078796387, -5.1464128494262695], + [-3.727536201477051, -2.1784279346466064], + [-6.014734745025635, -0.6900021433830261], + [-1.4806336164474487, 12.417240142822266], + [0.1923331916332245, -5.41147518157959], + [1.8512201309204102, 3.7810707092285156], + [0.7413290739059448, -0.688930332660675], + [2.4088022708892822, 6.176593780517578], + [-0.7230356335639954, 1.3639514446258545], + [8.581114768981934, -2.957486867904663], + [-2.8743231296539307, -1.4448274374008179], + [-4.665806293487549, 5.722007751464844], + [7.551754951477051, -2.227595567703247], + [-4.034508228302002, -2.59757661819458], + [4.247824668884277, -3.399667739868164], + [-3.949404716491699, -1.7353626489639282], + [-0.30653116106987, -2.134878396987915], + [-3.388378381729126, -1.0750077962875366], + [-2.4909422397613525, -0.9932986497879028], + [7.207338333129883, -2.0607106685638428], + [8.468449592590332, -2.5925629138946533], + [1.7088640928268433, 5.203065872192383], + [-3.498488426208496, 3.8121235370635986], + [9.282004356384277, -2.888627767562866], + [-1.6073719263076782, 0.9487969875335693], + [-3.7629241943359375, 5.964677333831787], + [-4.030393123626709, -0.7392963171005249], + [-1.5198789834976196, 12.429414749145508], + [0.6421007513999939, -6.8453688621521], + [6.219018936157227, -4.396270275115967], + [-1.345274567604065, 1.1781047582626343], + [-3.462611198425293, -1.240416169166565], + [-3.985581159591675, -4.2788519859313965], + [0.5697683095932007, -6.323646068572998], + [-2.660911798477173, -1.0007997751235962], + [2.7475483417510986, -4.934918403625488], + [-3.1471080780029297, -2.011322021484375], + [-1.1347306966781616, 11.104389190673828], + [5.2259297370910645, -2.925860643386841], + [2.9206550121307373, -4.653829574584961], + [-1.3335003852844238, 11.438606262207031], + [1.4596731662750244, 1.5894043445587158], + [-4.05409574508667, 0.32188957929611206], + [-1.3036704063415527, 11.190488815307617], + [0.9278761744499207, 4.518449783325195], + [6.755173206329346, -4.551145553588867], + [-3.6006510257720947, 6.918818950653076], + [-5.009097099304199, -1.2114242315292358], + [-1.3656983375549316, 11.774242401123047], + [1.620384693145752, -4.077909469604492], + [-1.0900012254714966, 11.56131362915039], + [2.273080348968506, -5.092708587646484], + [-3.6599581241607666, -2.85939884185791], + [-1.677378535270691, 3.0349667072296143], + [5.340249538421631, 8.340289115905762], + [-4.0117082595825195, -1.0056891441345215], + [1.5465930700302124, 0.18045970797538757], + [-1.0765275955200195, 10.620464324951172], + [0.8686692118644714, -6.99875545501709], + [-1.9889801740646362, -0.4852219223976135], + [1.6498116254806519, 4.537086009979248], + [-3.3485496044158936, -1.0572000741958618], + [-3.0854332447052, -1.5303760766983032], + [0.4307381510734558, -5.6700897216796875], + [-1.7482613325119019, 0.12257182598114014], + [0.3863776922225952, -7.2276716232299805], + [-2.0292999744415283, 1.7979754209518433], + [0.7373018860816956, -4.866664886474609], + [0.3754138946533203, -6.508326053619385], + [2.939622640609741, -4.903790473937988], + [3.7136032581329346, -4.345209121704102], + [-0.00661323219537735, -1.3907948732376099], + [-0.8965548872947693, 10.348684310913086], + [0.06473969668149948, -1.2126860618591309], + [-1.1417059898376465, 10.672907829284668], + [4.372868537902832, 7.2755866050720215], + [-0.6576797366142273, 10.236661911010742], + [8.067227363586426, -2.227673053741455], + [-5.340987682342529, 6.451959609985352], + [-5.127191543579102, 6.2267303466796875], + [-1.8104628324508667, -0.18576622009277344], + [-5.499057769775391, 6.1119384765625], + [3.9504706859588623, -5.324897766113281], + [-1.483649730682373, 1.2708672285079956], + [-5.04590368270874, 6.391074180603027], + [8.988302230834961, -3.130866765975952], + [4.501690864562988, 7.54860782623291], + [0.39824962615966797, -7.613539695739746], + [0.8187331557273865, 7.178915023803711], + [0.6117669939994812, -8.432784080505371], + [-1.1866973638534546, 11.093622207641602], + [9.251749992370605, -2.9174954891204834], + [0.13582444190979004, -0.6963933706283569], + [0.652004063129425, -7.7203369140625], + [-3.4223368167877197, -0.3286387324333191], + [2.4473085403442383, 0.5698578953742981], + [-1.5598047971725464, 12.78376579284668], + [2.014770030975342, 2.626040458679199], + [-1.5072435140609741, 0.20737996697425842], + [-4.025724411010742, -1.2519217729568481], + [6.760540962219238, -2.824430465698242], + [-0.016543753445148468, -2.7104742527008057], + [-3.243215322494507, -0.1546972393989563], + [2.582500696182251, 5.497279644012451], + [2.5621659755706787, -4.284209728240967], + [2.8691318035125732, -4.893196105957031], + [-0.951172411441803, 1.1108481884002686], + [0.7143601179122925, -7.247179985046387], + [2.8597185611724854, 4.811690330505371], + [1.023925542831421, 0.4831462502479553], + [-3.7492763996124268, -2.304083824157715], + [0.6834086775779724, -5.279647350311279], + [-2.835689067840576, -0.785204291343689], + [-0.9600663185119629, 0.4110666811466217], + [-0.5633018016815186, 9.379454612731934], + [-1.7503535747528076, 1.9771355390548706], + [2.997396230697632, -4.8231964111328125], + [2.9823238849639893, -5.125718116760254], + [1.7890231609344482, -4.847546577453613], + [-5.46791934967041, 7.615128517150879], + [0.74261873960495, -5.812708854675293], + [2.0310237407684326, 0.6950497031211853], + [-0.6184206604957581, 9.841782569885254], + [2.874992847442627, -4.788692474365234], + [-1.0072779655456543, 10.740638732910156], + [0.19798147678375244, -6.564790725708008], + [-1.305825114250183, 11.787588119506836], + [8.111906051635742, -2.6319944858551025], + [-3.808357000350952, -3.869447946548462], + [-4.426673412322998, -3.2319271564483643], + [-2.2685134410858154, 5.651060104370117], + [-5.811765193939209, 7.485098838806152], + [1.7019187211990356, 3.9757697582244873], + [-2.6697323322296143, -1.4586857557296753], + [-3.0966410636901855, 6.725011348724365], + [2.3571832180023193, 5.952680587768555], + [0.9177778363227844, -5.754361152648926], + [-3.690535306930542, -2.475520610809326], + [1.3172852993011475, 1.0038937330245972], + [1.702211618423462, 4.211902141571045], + [1.7404963970184326, 2.177063226699829], + [-1.4716402292251587, 12.10207748413086], + [2.059119462966919, 6.263739585876465], + [2.8238096237182617, -4.885700225830078], + [8.029619216918945, -3.1198339462280273], + [6.739361763000488, -2.453975200653076], + [-1.6892461776733398, 1.618820309638977], + [-0.4978001117706299, 10.155634880065918], + [1.5674107074737549, 4.257049083709717], + [7.456747055053711, -2.1300323009490967], + [-1.1235829591751099, 10.573040962219238], + [-3.5584516525268555, -0.5720369219779968], + [-1.1118700504302979, -2.341972589492798], + [0.5729984641075134, -7.922679901123047], + [2.9229321479797363, -4.424117565155029], + [-4.46189546585083, -3.6857030391693115], + [8.10950756072998, -3.257002353668213], + [1.089839220046997, 5.747014045715332], + [2.6254756450653076, 4.834565162658691], + [0.8503405451774597, -9.581286430358887], + [2.2831852436065674, -4.284002304077148], + [6.103122234344482, 8.970338821411133], + [-3.410440683364868, -0.9587032794952393], + [1.6231521368026733, -4.806557655334473], + [8.418782234191895, -2.8619301319122314], + [-2.2035768032073975, 2.3785624504089355], + [2.864560842514038, -4.542122840881348], + [0.4678712487220764, -3.924403429031372], + [9.182357788085938, -2.7748353481292725], + [-3.5985710620880127, -2.342886209487915], + [-3.6957380771636963, -2.085263967514038], + [6.447600841522217, -3.813905715942383], + [-4.0921454429626465, 3.2877395153045654], + [-1.1020612716674805, 1.1284517049789429], + [-4.277653217315674, -1.6369670629501343], + [-3.4716742038726807, -1.7947664260864258], + [-3.2799699306488037, -1.0125858783721924], + [1.4017119407653809, -5.43165397644043], + [-0.647537887096405, 10.848373413085938], + [3.7552502155303955, 6.786966323852539], + [-3.1889264583587646, -1.5025039911270142], + [-0.9900130033493042, -2.078906774520874], + [-3.8208553791046143, 4.604501247406006], + [0.5365892052650452, -0.2777104377746582], + [0.7176310420036316, -8.032430648803711], + [6.266639709472656, -4.56048583984375], + [0.573181688785553, -6.092685222625732], + [2.9427454471588135, -4.875875949859619], + [-1.2767671346664429, 11.671316146850586], + [-3.648798942565918, 2.0587704181671143], + [-1.8636237382888794, 1.0950324535369873], + [-3.2848775386810303, -0.652116060256958], + [-4.174177169799805, -1.2054133415222168], + [1.4700260162353516, -7.1912431716918945], + [-0.5058581829071045, 10.105730056762695], + [7.649440288543701, -2.1701958179473877], + [-3.173245906829834, -1.7381727695465088], + [0.5835362076759338, -8.068918228149414], + [7.620767593383789, -2.4506070613861084], + [0.48719149827957153, -7.412118434906006], + [-0.626595675945282, 9.868535995483398], + [0.5942869782447815, -8.558281898498535], + [2.699390172958374, -4.633060455322266], + [1.4942858219146729, 0.08762316405773163], + [-2.9403207302093506, -0.8302689790725708], + [3.2086122035980225, -5.410534858703613], + [1.0128493309020996, 0.15979482233524323], + [5.783918857574463, -1.065759539604187], + [6.161526203155518, -1.5750436782836914], + [-1.472174882888794, 12.048150062561035], + [-3.7916100025177, -1.7653900384902954], + [-1.29140305519104, 11.452610969543457], + [-1.1650164127349854, 11.053235054016113], + [2.3454935550689697, -4.423527717590332], + [-0.08418870717287064, 8.949100494384766], + [1.699586272239685, 5.511852264404297], + [2.5261616706848145, -5.015576362609863], + [7.195988655090332, -2.795870065689087], + [0.1430298089981079, -5.760869979858398], + [0.5413102507591248, -7.271378040313721], + [2.3018906116485596, 6.059929847717285], + [-0.5564168095588684, 9.5650634765625], + [-2.2367069721221924, -2.8879735469818115], + [5.852385997772217, -1.2985398769378662], + [-3.7714197635650635, 4.15535831451416], + [-3.0305137634277344, -0.9578091502189636], + [0.1783093810081482, -5.755280494689941], + [0.4137464165687561, -1.059946894645691], + [-3.71109676361084, -2.9717376232147217], + [-4.501816749572754, -0.9381172060966492], + [-4.02756929397583, -1.4128168821334839], + [3.9789788722991943, -5.149246692657471], + [-2.9860081672668457, -0.8340096473693848], + [-4.227944374084473, -0.4043932557106018], + [3.248974084854126, -6.887422561645508], + [1.9358294010162354, 1.1959140300750732], + [1.2175661325454712, 2.5669963359832764], + [-1.8327003717422485, 0.6598162651062012], + [1.6803627014160156, 2.2920010089874268], + [-2.096247434616089, 2.637009859085083], + [-4.097972393035889, -1.6142672300338745], + [0.5819664597511292, -6.4208984375], + [3.8820486068725586, 6.983554363250732], + [-5.352585792541504, 4.052508354187012], + [-3.7039997577667236, -0.9385358691215515], + [-5.6364970207214355, -1.0177353620529175], + [-4.492621898651123, 4.998350620269775], + [-4.192566394805908, -3.6983611583709717], + [0.42510277032852173, -7.218737602233887], + [0.704603910446167, -5.978853225708008], + [0.6418152451515198, -0.22871564328670502], + [8.17429256439209, -2.418900728225708], + [2.7341840267181396, -4.2228899002075195], + [5.100642204284668, -3.2563536167144775], + [3.39155912399292, -3.905740261077881], + [-1.9416502714157104, 1.681983470916748], + [-1.7251688241958618, 1.3448535203933716], + [-0.6422643065452576, 9.786584854125977], + [0.0777234211564064, -1.4226127862930298], + [-1.0400123596191406, 9.764484405517578], + [6.02207088470459, 8.887306213378906], + [-3.61708402633667, -1.259644865989685], + [0.753659188747406, -9.314956665039062], + [9.045296669006348, -2.7754738330841064], + [-1.4896320104599, -2.0027081966400146], + [-1.6302571296691895, -2.61442494392395], + [2.6642048358917236, -4.180953025817871], + [6.2408976554870605, -1.051943063735962], + [0.24458569288253784, 4.718225955963135], + [-0.5210945010185242, 9.47176456451416], + [-0.17452549934387207, 6.790889739990234], + [0.5050257444381714, -6.976512432098389], + [1.7187538146972656, 4.374899864196777], + [8.919313430786133, -2.7990224361419678], + [0.5709322094917297, -7.752926826477051], + [7.784803867340088, -3.3418049812316895], + [-3.1504504680633545, -2.1836962699890137], + [-4.571704387664795, -0.8472869396209717], + [2.7356956005096436, -4.728184223175049], + [0.7386998534202576, -8.810983657836914], + [-0.26420164108276367, 10.05416488647461], + [-4.579010486602783, -4.637642860412598], + [-1.2823131084442139, 11.258907318115234], + [-3.970515727996826, -0.6379697322845459], + [2.9762394428253174, -4.791528701782227], + [-3.881077527999878, 3.832204580307007], + [-3.6156697273254395, -1.8149292469024658], + [-1.1440755128860474, 10.474088668823242], + [1.8695131540298462, -4.789127826690674], + [-4.096160411834717, -2.176342248916626], + [1.2595664262771606, -4.6037139892578125], + [-2.9017512798309326, -1.360774040222168], + [2.3392770290374756, -4.582449913024902], + [6.203699111938477, -1.1995753049850464], + [5.663529396057129, -2.5259687900543213], + [6.834067344665527, -1.8202567100524902], + [-3.9997646808624268, -0.8411755561828613], + [5.375313758850098, -2.9664947986602783], + [3.4764435291290283, 6.768712043762207], + [2.6948821544647217, -4.488441467285156], + [-3.091723680496216, 5.413003444671631], + [0.002684466540813446, 8.518501281738281], + [-1.0861340761184692, 1.277266025543213], + [1.0331543684005737, -5.010974884033203], + [-3.890394687652588, 7.046874523162842], + [-3.545893430709839, -0.9609211087226868], + [-5.605166435241699, 7.518754005432129], + [6.835524559020996, -5.373856544494629], + [1.427862524986267, 1.4259796142578125], + [-3.9495747089385986, 0.016723688691854477], + [1.3607786893844604, -6.3400068283081055], + [1.6503076553344727, 0.24712955951690674], + [-4.147965908050537, -0.9679936170578003], + [0.39240652322769165, -5.134157180786133], + [5.926609516143799, -3.860743284225464], + [2.588897943496704, -3.9886176586151123], + [0.2920958697795868, -0.5061447024345398], + [5.064769744873047, 7.980679512023926], + [5.432256698608398, -2.571622610092163], + [-0.36688724160194397, -1.7029379606246948], + [-4.480783462524414, -0.5318065285682678], + [-5.70182466506958, 5.439975738525391], + [2.704505443572998, -4.6995062828063965], + [-4.312458515167236, -3.688603162765503], + [-1.350389838218689, -1.6647039651870728], + [-0.8105944395065308, 0.6942105889320374], + [2.7345046997070312, -4.662721633911133], + [-4.864323139190674, -0.7648200988769531], + [-3.3804867267608643, -1.616625428199768], + [1.717678189277649, 5.426916122436523], + [4.480977535247803, -4.017576217651367], + [-2.9994399547576904, -1.388543963432312], + [-1.168287754058838, 10.736705780029297], + [2.7066309452056885, -4.442750453948975], + [1.780778169631958, 0.49936604499816895], + [0.72427898645401, -5.548858642578125], + [-1.964950442314148, 2.3105783462524414], + [2.8967654705047607, -5.086832046508789], + [-3.275033712387085, -1.0918560028076172], + [7.689108371734619, -3.664973258972168], + [2.8220531940460205, -4.890463829040527], + [2.452975034713745, 4.512041091918945], + [0.45191359519958496, -5.98414421081543], + [-2.0535128116607666, -0.6719728708267212], + [-0.6247392296791077, 9.838794708251953], + [-3.761481523513794, 6.5985798835754395], + [-4.063830375671387, -0.46841567754745483], + [-1.171297311782837, 11.050544738769531], + [-4.72550630569458, -0.763430118560791], + [7.823655605316162, -2.475043535232544], + [1.946303367614746, -4.425594329833984], + [2.3541200160980225, -3.9400599002838135], + [-2.136537790298462, 1.1918648481369019], + [-0.8648145794868469, 10.482590675354004], + [0.7104055881500244, -0.3062807321548462], + [-3.5992660522460938, -2.888611078262329], + [-4.613921165466309, 0.05683976039290428], + [0.17970052361488342, -5.274555206298828], + [2.0441176891326904, 0.8496415019035339], + [1.2847663164138794, 5.718183994293213], + [0.6101202964782715, -6.342742443084717], + [0.07311239093542099, -1.21825110912323], + [2.1709556579589844, -4.522525787353516], + [-3.5201117992401123, 5.338553428649902], + [-3.1712114810943604, -1.3614150285720825], + [0.8346319794654846, -4.779314041137695], + [-0.4654734134674072, 7.3124494552612305], + [-2.832723617553711, 1.4699326753616333], + [6.9681477546691895, -3.2539584636688232], + [-2.585413932800293, 4.250742435455322], + [0.47187894582748413, -6.9732818603515625], + [-1.0394035577774048, 9.427566528320312], + [-1.2204678058624268, 1.1134817600250244], + [0.7154292464256287, -7.101973533630371], + [-4.784598350524902, -1.5175093412399292], + [-5.074939250946045, 6.524575233459473], + [0.13334226608276367, -0.7374343276023865], + [-5.675455570220947, 4.54014778137207], + [4.074065685272217, 7.260605812072754], + [3.0507051944732666, -5.076680660247803], + [0.3162359297275543, -0.8843196630477905], + [-2.242645502090454, 5.416702747344971], + [0.4134550094604492, 5.765380382537842], + [7.462926387786865, -2.7316062450408936], + [0.023784808814525604, 8.84929084777832], + [2.784477949142456, -4.530625343322754], + [3.863525629043579, 7.04188346862793], + [2.162867307662964, -4.429614067077637], + [-2.8063364028930664, -1.2247570753097534], + [2.4685628414154053, -3.9018640518188477], + [0.5039247274398804, -7.229227066040039], + [-5.117360591888428, 5.934648513793945], + [-3.929398536682129, -1.9880435466766357], + [0.932595431804657, -0.4639192223548889], + [2.999150514602661, -5.159451484680176], + [-1.284110426902771, 0.2049957513809204], + [-3.3489749431610107, 5.113544940948486], + [7.003699779510498, -3.96458101272583], + [-1.9154154062271118, 1.971746563911438], + [-4.189283847808838, 5.97120475769043], + [-4.706363201141357, 1.1837531328201294], + [-4.94038724899292, -3.614642858505249], + [2.800980806350708, -4.588608264923096], + [5.5135955810546875, -1.6385365724563599], + [5.95168924331665, -1.9973987340927124], + [-3.0365211963653564, -0.736415445804596], + [-1.0490025281906128, 0.8151204586029053], + [-4.07376766204834, -3.6362948417663574], + [-0.9608762860298157, 10.257804870605469], + [-3.1825501918792725, -0.8027989864349365], + [-4.105343341827393, -1.9314581155776978], + [-1.0719494819641113, 9.005487442016602], + [-0.17179614305496216, -1.1750255823135376], + [-2.961599111557007, -1.610171914100647], + [0.7306168675422668, -9.02132511138916], + [0.692352831363678, -0.07732845842838287], + [-4.106553554534912, 5.804429054260254], + [0.30658385157585144, -3.3776681423187256], + [0.41688039898872375, 1.7003754377365112], + [-3.747371196746826, -1.8793350458145142], + [0.45146358013153076, -7.271718978881836], + [-4.411592483520508, -3.477483034133911], + [-3.181662082672119, 0.008450265973806381], + [0.23828813433647156, -4.825089454650879], + [0.9843453764915466, -6.166812896728516], + [-3.926486015319824, 6.308684349060059], + [-4.395899772644043, -1.2099366188049316], + [-4.0611395835876465, -3.6637439727783203], + [-4.8191237449646, -4.153890609741211], + [0.6109519600868225, 0.6443421840667725], + [-4.274477958679199, 7.0212225914001465], + [-1.571537971496582, 1.1428624391555786], + [-1.049288272857666, 1.284118890762329], + [0.6524682641029358, -7.280826568603516], + [-0.3339446187019348, 9.263453483581543], + [8.638907432556152, -3.1378207206726074], + [-5.326038837432861, 5.441963195800781], + [-3.707908868789673, -2.8310811519622803], + [-1.2910548448562622, 11.43033218383789], + [0.697039783000946, -7.99094820022583], + [-0.11877498775720596, -4.127048969268799], + [-4.133218765258789, -1.2544530630111694], + [0.05088960379362106, 6.751708030700684], + [2.3113725185394287, 0.6749681234359741], + [-3.253286600112915, -2.7466108798980713], + [1.7559555768966675, 6.2852020263671875], + [-2.5938453674316406, -1.383442997932434], + [-1.096177339553833, 10.802433013916016], + [1.1699929237365723, 0.008841034024953842], + [-1.9564660787582397, 0.49548888206481934], + [-3.808030605316162, -1.3952089548110962], + [0.7676063179969788, -6.746563911437988], + [6.223810195922852, -1.5842794179916382], + [2.248081922531128, -4.492255210876465], + [0.5178725123405457, -7.897239685058594], + [2.0243844985961914, -4.509429454803467], + [-0.3221049904823303, -2.5530855655670166], + [-3.840571641921997, -2.697249174118042], + [-4.828714847564697, -0.6948835849761963], + [-3.9963347911834717, 5.945975303649902], + [-4.167696475982666, -3.0751445293426514], + [2.395703077316284, 5.7388014793396], + [-4.102260112762451, -3.538020133972168], + [-0.6272138953208923, 10.594901084899902], + [2.4190735816955566, -0.47193509340286255], + [0.014655731618404388, -1.337363600730896], + [0.15119114518165588, 0.6048959493637085], + [6.525209426879883, -3.6479527950286865], + [2.5952627658843994, -4.212325572967529], + [1.2754285335540771, 4.442101955413818], + [1.9773337841033936, 4.271405220031738], + [-4.692380428314209, -0.9896818995475769], + [-3.819613218307495, -2.69325590133667], + [2.938093662261963, 5.557159423828125], + [1.0442945957183838, -7.275690078735352], + [5.863453388214111, -2.07934832572937], + [-0.9467858076095581, 10.550512313842773], + [0.572706401348114, -8.25813102722168], + [-3.5402779579162598, -1.2576165199279785], + [2.5657706260681152, -5.124083042144775], + [-4.420706272125244, 4.772112846374512], + [-3.7821197509765625, -1.457380771636963], + [2.3474228382110596, -4.244823455810547], + [-1.5256731510162354, 6.176322937011719], + [2.165625810623169, 5.120814323425293], + [-2.3465633392333984, -1.1788872480392456], + [2.7371463775634766, -4.698655605316162], + [4.277816295623779, 7.359997749328613], + [1.362621545791626, -4.283742904663086], + [2.249229669570923, -5.4110612869262695], + [-4.249423503875732, -1.477842092514038], + [-1.9965078830718994, 1.9085021018981934], + [3.1057088375091553, 6.097723960876465], + [6.136195182800293, -1.6182397603988647], + [6.159643173217773, -3.441901683807373], + [-0.6237514615058899, 11.879756927490234], + [-3.116093397140503, -1.2185615301132202], + [-1.1421871185302734, 11.030271530151367], + [2.7467339038848877, -4.418337345123291], + [0.4604339003562927, -5.889127731323242], + [2.444927215576172, -4.317616939544678], + [2.7889816761016846, -4.650053024291992], + [0.4395008087158203, -7.47318696975708], + [-1.2676769495010376, 8.331683158874512], + [-1.423467993736267, 1.848078727722168], + [-3.2619545459747314, -0.20929449796676636], + [-1.2081007957458496, -2.473599672317505], + [2.0568525791168213, -4.577279090881348], + [-1.082435965538025, 10.402910232543945], + [0.9674505591392517, -7.315674781799316], + [-0.9801892638206482, -1.3504701852798462], + [-1.2863852977752686, 10.758522033691406], + [-4.304961204528809, -3.4489805698394775], + [-5.294768333435059, -0.5409000515937805], + [-3.1118054389953613, -1.353428602218628], + [-4.000497341156006, -1.7933660745620728], + [-5.24125862121582, 3.8256618976593018], + [0.7383136749267578, -5.827559947967529], + [-3.8195013999938965, -2.4448087215423584], + [-4.465803146362305, -5.3894548416137695], + [1.7452113628387451, 2.4019672870635986], + [0.6891942620277405, -9.175516128540039], + [-0.5748112201690674, -1.0940276384353638], + [-2.542207717895508, 5.625317573547363], + [-4.700204849243164, 6.041301727294922], + [-0.2754982113838196, 9.126059532165527], + [0.5117105841636658, -7.4684576988220215], + [-1.5923408269882202, -0.7333550453186035], + [-3.2479135990142822, 3.6401607990264893], + [-1.1048353910446167, 11.193172454833984], + [5.53471040725708, -1.7171109914779663], + [-4.791677951812744, 6.761930465698242], + [6.169388294219971, -3.0886917114257812], + [-1.1177033185958862, -1.3314319849014282], + [0.7095068097114563, -7.396512508392334], + [0.08674653619527817, -4.242703437805176], + [-4.375877857208252, -0.7271052598953247], + [-1.8972182273864746, 1.571994423866272], + [-1.1418461799621582, 10.699300765991211], + [7.137984752655029, -2.2404592037200928], + [0.9257901310920715, -5.572766304016113], + [8.718289375305176, -2.979302167892456], + [3.001450538635254, -5.327389240264893], + [-1.3109322786331177, 1.0819025039672852], + [-1.0229157209396362, 10.091117858886719], + [-3.8552348613739014, -1.774802327156067], + [-4.546712398529053, 5.805538177490234], + [-2.4653289318084717, -1.210131049156189], + [-1.8158259391784668, -2.4236557483673096], + [-0.519244909286499, -0.14239409565925598], + [2.4732563495635986, -4.170710563659668], + [-1.295947551727295, 5.290749549865723], + [0.3674345016479492, -3.1492578983306885], + [-4.2182698249816895, -0.7454156875610352], + [-3.827772378921509, 6.562157154083252], + [1.3352231979370117, 4.540339946746826], + [-3.3618228435516357, -2.026270866394043], + [1.7135910987854004, 5.345502853393555], + [-2.0439507961273193, -1.4253162145614624], + [6.122320652008057, -2.6219794750213623], + [-3.8759708404541016, -1.338072419166565], + [-0.723544180393219, 10.41510009765625], + [0.7191087603569031, -9.442349433898926], + [-1.2503167390823364, 0.9592846632003784], + [0.2707255780696869, -5.6036057472229], + [-3.315913677215576, -1.308254361152649], + [-4.27127742767334, -1.1606873273849487], + [0.3264017403125763, -4.759676933288574], + [-1.7523932456970215, -0.45585256814956665], + [9.366291999816895, -2.9286201000213623], + [-3.7134037017822266, -1.621402621269226], + [-5.18789005279541, -0.820209801197052], + [-0.016089357435703278, -4.803426265716553], + [5.1768269538879395, 8.213248252868652], + [-2.0555150508880615, 1.9529873132705688], + [1.691395878791809, 5.370761871337891], + [-4.0291619300842285, 5.503066062927246], + [0.6625928282737732, -5.807973861694336], + [1.5981916189193726, 4.406560897827148], + [0.9759464859962463, -6.25758695602417], + [1.4239706993103027, 3.5804250240325928], + [-1.5996023416519165, -0.8883113861083984], + [0.29799115657806396, -6.446554660797119], + [-1.2346584796905518, 11.473081588745117], + [1.8572795391082764, -3.3531687259674072], + [-3.681762933731079, -2.708777666091919], + [-0.7494493722915649, 8.450273513793945], + [1.7996113300323486, 3.5696418285369873], + [0.9215400815010071, -4.916470050811768], + [2.9876253604888916, -4.655673980712891], + [-0.11163044720888138, -1.4397574663162231], + [-3.6517393589019775, -1.1081801652908325], + [8.30577278137207, -3.5371813774108887], + [-3.4035115242004395, -0.9642839431762695], + [-0.5363044142723083, 9.759618759155273], + [-3.9099013805389404, 6.045615196228027], + [-3.3338353633880615, -1.2887098789215088], + [0.3994751274585724, -0.7695173025131226], + [0.3240635395050049, -1.0877617597579956], + [-4.20732307434082, 6.09283971786499], + [0.9538736939430237, 0.1565583050251007], + [0.18282932043075562, -5.45542573928833], + [6.368358135223389, -4.7229485511779785], + [1.8218563795089722, 0.19449208676815033], + [0.28979188203811646, -6.874086380004883], + [-4.011231899261475, -1.2844504117965698], + [8.26236629486084, -2.4351603984832764], + [-1.6615766286849976, 1.35526704788208], + [0.5611960887908936, -8.033370971679688], + [0.38642436265945435, -0.6083469390869141], + [-0.4392191171646118, -1.1162515878677368], + [-3.956885576248169, -0.9377368688583374], + [5.362499713897705, -5.293068885803223], + [0.4717111587524414, -5.67677116394043], + [7.625072956085205, -2.1614763736724854], + [2.160879611968994, -5.253344535827637], + [0.6972653865814209, -5.826632499694824], + [0.5396713018417358, -6.9551615715026855], + [-3.7439510822296143, -2.987920045852661], + [-2.1708834171295166, 1.572922945022583], + [-4.637084007263184, -1.3463428020477295], + [-0.2502567172050476, 8.966148376464844], + [-3.5296857357025146, -1.1395560503005981], + [-1.6476389169692993, 13.051345825195312], + [7.683562278747559, -2.8356382846832275], + [-0.36629995703697205, -1.005086898803711], + [-3.531024217605591, -0.6973003149032593], + [0.5762196183204651, -8.159890174865723], + [2.956875801086426, -4.755475044250488], + [8.848671913146973, -2.7633886337280273], + [-0.4934462904930115, 10.255643844604492], + [6.013836860656738, -1.7724379301071167], + [1.7316880226135254, -4.275105953216553], + [2.8958866596221924, -4.092386722564697], + [7.084024429321289, -1.9467953443527222], + [3.1098792552948, -5.331799507141113], + [-1.2830960750579834, 11.300149917602539], + [6.968822479248047, -1.9348057508468628], + [0.6421648859977722, -7.766754150390625], + [-4.139096736907959, -1.2820276021957397], + [-4.482992172241211, -1.926466703414917], + [1.9785397052764893, -4.699865341186523], + [-3.3772783279418945, -0.8196991682052612], + [-3.13480544090271, -4.2244367599487305], + [6.061309814453125, -5.051264762878418], + [-0.17140528559684753, -3.4128103256225586], + [-1.5232635736465454, 12.516473770141602], + [-0.2821223735809326, 8.072270393371582], + [6.9282097816467285, -3.20786190032959], + [0.6292144060134888, -6.140474319458008], + [2.8191821575164795, 5.679189682006836], + [-3.439196825027466, 5.507756233215332], + [-3.562917947769165, -1.7019051313400269], + [0.7055584788322449, -8.627614974975586], + [-1.5179669857025146, -0.8072754144668579], + [0.5695614218711853, -8.066819190979004], + [0.6499727964401245, -8.766841888427734], + [-0.6857094168663025, 0.681396484375], + [6.186697483062744, -2.600764513015747], + [4.906952857971191, -3.203791379928589], + [9.476252555847168, -2.8162267208099365], + [-1.801645278930664, 1.6578937768936157], + [-1.9981400966644287, -1.4715274572372437], + [-3.520752191543579, -1.8546324968338013], + [3.0194859504699707, -4.567172050476074], + [3.9046742916107178, -0.4679723381996155], + [-0.1992139220237732, 8.057493209838867], + [-3.410120725631714, -1.158316969871521], + [3.529425621032715, 6.655874729156494], + [-3.8436295986175537, -2.0444231033325195], + [0.8273407816886902, 4.72736930847168], + [-3.087224006652832, 5.8985772132873535], + [2.25589656829834, -4.796663284301758], + [6.40023136138916, -1.5779541730880737], + [-2.007194757461548, 1.5095969438552856], + [2.575866222381592, 6.443838119506836], + [2.1061277389526367, -4.497307777404785], + [1.1987416744232178, 0.19399844110012054], + [-3.9856162071228027, -1.011197805404663], + [7.870542049407959, -2.5416157245635986], + [-3.573314905166626, 5.774666786193848], + [-0.7407891154289246, 10.280799865722656], + [2.8326778411865234, -6.647171497344971], + [1.9763448238372803, -4.557196617126465], + [3.189777374267578, 6.139866828918457], + [0.6244736313819885, -6.279257774353027], + [6.626461505889893, -1.3810219764709473], + [1.3046066761016846, -5.77848482131958], + [-1.2828917503356934, 1.5365005731582642], + [-5.070705890655518, -3.7421929836273193], + [-0.38270771503448486, 9.957862854003906], + [-3.1423251628875732, -1.0548783540725708], + [0.244015634059906, 4.827709674835205], + [-0.7386459708213806, 10.6524019241333], + [-3.997076988220215, -1.3257681131362915], + [6.752639293670654, -4.99263858795166], + [1.9932518005371094, 5.9333672523498535], + [-5.192962169647217, -4.456687927246094], + [1.6021897792816162, 5.313868522644043], + [-5.551909923553467, 7.550710678100586], + [6.4406867027282715, -1.6795321702957153], + [-4.137816429138184, -3.2777092456817627], + [0.47304385900497437, -0.8895496726036072], + [-5.487999439239502, 7.194576263427734], + [8.699921607971191, -2.7293589115142822], + [0.6963823437690735, -6.858936309814453], + [-1.1139633655548096, 1.1177653074264526], + [-3.780179262161255, -1.679216980934143], + [-3.4854791164398193, -1.3792344331741333], + [1.0930923223495483, 5.899930000305176], + [1.4765931367874146, 0.1376267671585083], + [3.3551881313323975, 6.576426982879639], + [-1.876443862915039, 1.8597018718719482], + [1.8605544567108154, 1.1076592206954956], + [2.6489176750183105, 6.089582920074463], + [-3.602490186691284, -2.910677194595337], + [-3.2283074855804443, -2.6469013690948486], + [0.6897111535072327, -6.8944926261901855], + [5.4283223152160645, -1.5799819231033325], + [0.47663718461990356, -7.213068962097168], + [0.5759814381599426, -7.922502040863037], + [1.5924315452575684, -4.912320137023926], + [2.793184518814087, 6.668522834777832], + [5.498566150665283, -1.8635421991348267], + [-3.8697659969329834, 5.999699592590332], + [0.24591976404190063, -6.245338439941406], + [0.8231309056282043, 4.985847473144531], + [-2.375518560409546, -1.0975992679595947], + [0.740542471408844, -5.229123115539551], + [0.5877423286437988, -3.298912525177002], + [0.12134601920843124, -4.352263450622559], + [-3.299464464187622, 6.812963962554932], + [-0.4236409664154053, 10.394861221313477], + [2.9424617290496826, -4.097663402557373], + [2.5834991931915283, -5.761403560638428], + [3.211585760116577, -4.099266052246094], + [-4.944520473480225, 6.185952186584473], + [2.7348835468292236, 6.286260604858398], + [4.079039096832275, 6.838498115539551], + [7.561049938201904, -3.996378183364868], + [0.14259803295135498, -5.241833686828613], + [-3.3912222385406494, -1.3257006406784058], + [-0.7103213667869568, 9.851669311523438], + [-3.985877275466919, 0.18801558017730713], + [-1.849610686302185, 2.539968729019165], + [-1.6772055625915527, 1.933168649673462], + [8.12385082244873, -3.3935296535491943], + [0.6791471242904663, -8.442014694213867], + [-4.319969654083252, -3.8316009044647217], + [3.3256618976593018, 6.4018940925598145], + [2.837989091873169, -1.1419366598129272], + [-2.207683801651001, 5.788008689880371], + [-0.3313896656036377, -1.7036241292953491], + [-3.0586304664611816, -2.4588427543640137], + [0.5410751104354858, -7.843599319458008], + [2.0190021991729736, -4.071971416473389], + [-1.8595757484436035, -0.5251306891441345], + [2.4964637756347656, -5.0668511390686035], + [-0.7545303702354431, 8.557884216308594], + [-0.43344372510910034, -1.7756894826889038], + [0.5699918866157532, -7.56273078918457], + [2.9597129821777344, -5.142007350921631], + [0.7841330766677856, -5.353568077087402], + [-1.0897377729415894, 0.47962629795074463], + [-1.6172527074813843, 0.26648545265197754], + [0.7300692796707153, -7.133208274841309], + [-1.2590348720550537, 0.5845022201538086], + [0.2528814673423767, -2.844205379486084], + [5.9475884437561035, -1.9167309999465942], + [-0.9924306273460388, 3.4981839656829834], + [-5.173255443572998, -1.0880563259124756], + [0.07663022726774216, 4.95522403717041], + [-0.3149542212486267, 8.086832046508789], + [-3.217482805252075, 1.6354087591171265], + [0.44263577461242676, -7.14104700088501], + [2.5699682235717773, 5.120784282684326], + [9.117566108703613, -2.9691824913024902], + [-0.8044123649597168, 10.397445678710938], + [1.2386984825134277, 0.170006662607193], + [2.352013111114502, -4.837879180908203], + [-1.1434612274169922, 1.3151705265045166], + [5.995237827301025, -4.272127151489258], + [-3.6909096240997314, -1.7579282522201538], + [-1.1431089639663696, 10.530250549316406], + [6.094094276428223, -1.3242390155792236], + [4.575506687164307, 7.563924312591553], + [5.760316848754883, -1.286392092704773], + [-0.3372405171394348, 8.868256568908691], + [0.4500367045402527, -7.598762512207031], + [2.6942367553710938, -5.814019203186035], + [1.3531272411346436, 0.31240230798721313], + [-1.8343695402145386, 1.191257119178772], + [5.976447582244873, -2.563767433166504], + [-3.3272080421447754, -1.3359414339065552], + [3.209542751312256, -5.58322811126709], + [-0.16905847191810608, -1.5013145208358765], + [-0.042334653437137604, -4.329403877258301], + [0.6931710839271545, -7.391856670379639], + [-3.0253069400787354, -2.855583429336548], + [0.7364195585250854, -7.377997398376465], + [6.213819980621338, -1.234351396560669], + [-0.6056436896324158, 10.20746898651123], + [-1.107553243637085, 10.883344650268555], + [0.6251396536827087, -8.36104965209961], + [-3.493839979171753, -0.6905739307403564], + [2.763575792312622, -4.71097469329834], + [0.09651576727628708, -6.086397647857666], + [2.2845704555511475, -4.557225227355957], + [1.7481489181518555, 1.1298083066940308], + [-3.355112314224243, -2.835742712020874], + [-3.8806817531585693, -1.9312883615493774], + [-2.288156032562256, -1.648775577545166], + [-1.838986873626709, 1.746505856513977], + [-4.193576335906982, 5.065299987792969], + [-4.3252410888671875, -1.604287028312683], + [-3.969780683517456, 3.328866720199585], + [8.714336395263672, -2.813185691833496], + [-5.587273597717285, 7.346108913421631], + [-1.2495300769805908, 11.339899063110352], + [1.4345678091049194, -5.681599140167236], + [-0.6522216200828552, 10.102685928344727], + [6.400824546813965, -2.046424627304077], + [1.3341610431671143, -0.21883778274059296], + [-3.3771111965179443, -1.4062691926956177], + [2.4944896697998047, -4.442184925079346], + [0.484184205532074, -7.124772071838379], + [0.2610227167606354, -4.443756103515625], + [-1.781531572341919, -1.244881510734558], + [2.6233773231506348, -5.515262603759766], + [-0.540698230266571, -1.9883745908737183], + [-1.2473703622817993, 11.178497314453125], + [2.9005274772644043, -0.169622540473938], + [0.4416930079460144, -5.449671745300293], + [2.5061559677124023, 5.4922990798950195], + [-5.715817928314209, -1.073060393333435], + [-3.0125653743743896, -0.9044381380081177], + [-3.594503164291382, -1.4801710844039917], + [6.336418628692627, -1.5941404104232788], + [-3.887127637863159, -2.2379372119903564], + [-3.74104642868042, -1.4856195449829102], + [8.528483390808105, -3.3713934421539307], + [2.776632785797119, -4.938776969909668], + [-4.771271228790283, 6.168550491333008], + [2.980600118637085, -4.691344738006592], + [2.5143115520477295, -4.212274551391602], + [5.115631580352783, 7.957760810852051], + [-3.684889078140259, 4.64968729019165], + [7.407570838928223, -2.825263738632202], + [9.385660171508789, -2.781951427459717], + [-4.4750542640686035, -1.788619875907898], + [3.095763921737671, -4.443231582641602], + [-2.042541265487671, 2.0465104579925537], + [0.5982456207275391, -4.621026992797852], + [7.149242877960205, -2.6830313205718994], + [1.4093127250671387, -4.026478290557861], + [0.6002177596092224, -8.555179595947266], + [1.6033315658569336, 1.128076434135437], + [-2.4122776985168457, -0.8159613013267517], + [0.3169901371002197, -6.305237293243408], + [-5.646407604217529, 3.5282888412475586], + [-2.401827096939087, -0.9710586071014404], + [7.184496879577637, -2.169421672821045], + [0.39643043279647827, -0.8090251684188843], + [1.8342714309692383, -6.869400978088379], + [-3.8652265071868896, -2.1040961742401123], + [-1.899861216545105, 1.792533040046692], + [-1.3620266914367676, 11.703088760375977], + [0.5574902892112732, -7.674007415771484], + [-4.163937568664551, 5.276705265045166], + [2.7181344032287598, 4.706303596496582], + [-5.026325702667236, -3.2152016162872314], + [6.68570613861084, -4.600947856903076], + [0.8947513699531555, 0.0035214386880397797], + [0.18720227479934692, -4.86612606048584], + [2.3520729541778564, 0.45314323902130127], + [-3.67482328414917, 5.474089622497559], + [-4.360872745513916, 1.2379616498947144], + [0.6541219353675842, 6.125409126281738], + [0.8536542057991028, -0.08574831485748291], + [6.5724196434021, -4.777486801147461], + [3.1445541381835938, -4.904913902282715], + [2.2486162185668945, 5.196718692779541], + [2.283505439758301, -4.507317543029785], + [-0.6448504328727722, 10.401739120483398], + [-0.07874024659395218, 2.938636541366577], + [-3.294055700302124, -2.328362464904785], + [0.7072493433952332, -7.45592737197876], + [2.3485372066497803, -4.150346279144287], + [3.072741985321045, -4.814088821411133], + [-3.814744710922241, -1.8351370096206665], + [-2.0097315311431885, 0.5448049306869507], + [-3.942720890045166, -3.4458084106445312], + [0.8981981873512268, -0.3178899884223938], + [7.565299034118652, -2.4724009037017822], + [-1.9641627073287964, 1.8906067609786987], + [2.258007287979126, -6.087859153747559], + [-3.633655548095703, -1.3709596395492554], + [0.6364250183105469, -7.315808296203613], + [-3.875345468521118, -1.1493042707443237], + [0.04345988482236862, -4.883572578430176], + [0.17176151275634766, -0.7986740469932556], + [2.6040446758270264, -4.509644508361816], + [-3.886141538619995, 6.048829078674316], + [-4.075311660766602, -2.560183048248291], + [-3.1900794506073, -0.7595531940460205], + [0.2591928243637085, -5.884618759155273], + [-5.144406795501709, -4.1542134284973145], + [-3.7759861946105957, 4.41580867767334], + [1.7795114517211914, 3.2554619312286377], + [2.321810245513916, 5.790440559387207], + [-3.7632124423980713, -1.5212628841400146], + [-3.2301361560821533, -1.3027185201644897], + [0.6736584305763245, -0.55556321144104], + [9.104392051696777, -2.7448313236236572], + [-1.9918773174285889, 5.705742835998535], + [-5.889911651611328, 7.710206985473633], + [6.553071975708008, -1.9762438535690308], + [-4.644936561584473, -1.493123173713684], + [-3.4743998050689697, -0.8580214977264404], + [-1.0345673561096191, -1.0952062606811523], + [-4.31437349319458, -3.4177703857421875], + [-4.673338890075684, 6.182699203491211], + [-0.04035235196352005, -5.072162628173828], + [1.6831068992614746, -7.118093013763428], + [0.4762296676635742, -7.4479169845581055], + [-0.887550413608551, -0.9695877432823181], + [-4.5308451652526855, -3.3219189643859863], + [0.2838590145111084, -5.810246467590332], + [-2.131749153137207, 1.5478919744491577], + [-3.243457078933716, -1.6259788274765015], + [-3.8279788494110107, -2.225262403488159], + [-0.7273387312889099, 1.4465522766113281], + [0.8144761323928833, -8.183013916015625], + [-2.917682409286499, 4.189043045043945], + [-2.5838961601257324, -2.112039566040039], + [1.2579100131988525, 0.8456176519393921], + [0.7292742133140564, -8.473257064819336], + [-1.5904676914215088, 3.8215138912200928], + [0.9911839365959167, -6.601401329040527], + [6.854095935821533, -3.286891222000122], + [2.9690158367156982, -4.815180778503418], + [-3.615995168685913, 4.966971397399902], + [5.66115665435791, -1.8330893516540527], + [3.232818365097046, 1.716970443725586], + [-1.8038182258605957, 2.0555384159088135], + [-3.5724551677703857, -1.7596839666366577], + [-2.088902473449707, 1.2178561687469482], + [5.265608310699463, -1.2284375429153442], + [2.018747091293335, -4.6555352210998535], + [-1.296606421470642, 11.369100570678711], + [9.341740608215332, -2.9415433406829834], + [-2.609466075897217, 5.43691349029541], + [-3.4332289695739746, -1.7683079242706299], + [2.609029769897461, -4.703330039978027], + [2.3325226306915283, 6.452126502990723], + [-4.927032947540283, 7.633113861083984], + [0.8960280418395996, 5.674436569213867], + [8.255561828613281, -2.6872944831848145], + [6.430809020996094, -3.57356858253479], + [7.268835544586182, -2.253561496734619], + [-5.273489475250244, -0.8148564696311951], + [-1.9470233917236328, 0.22836071252822876], + [4.409224033355713, -1.135376214981079], + [7.218449115753174, -2.240277051925659], + [-1.7428076267242432, -0.274111807346344], + [2.8367154598236084, -4.693925380706787], + [0.3884551525115967, -6.227397918701172], + [2.8340401649475098, -4.701159954071045], + [4.6233439445495605, 7.959748268127441], + [6.47172212600708, -3.5323359966278076], + [1.834456443786621, -5.592471122741699], + [2.782011032104492, 6.170437812805176], + [-1.9897189140319824, 2.483712673187256], + [-0.9229561686515808, 10.261119842529297], + [-1.8992772102355957, 2.1154778003692627], + [-3.3124358654022217, 3.694932222366333], + [5.4463887214660645, -1.8523975610733032], + [2.047973394393921, -4.675424575805664], + [3.205843687057495, -6.044319152832031], + [7.472912788391113, -3.159134864807129], + [0.8355196714401245, 0.08111479878425598], + [-0.42309778928756714, 5.804962158203125], + [-4.295045375823975, -3.058087110519409], + [3.079257011413574, -5.220037460327148], + [0.7679873108863831, -9.056238174438477], + [-4.082615375518799, -2.582597494125366], + [-4.799150466918945, 6.200532913208008], + [-4.542819976806641, 0.4878654479980469], + [1.2103188037872314, 0.2688022255897522], + [2.4066359996795654, -4.253519535064697], + [0.9858694672584534, 0.10562178492546082], + [1.864989995956421, 5.371040344238281], + [-4.800753116607666, 4.957040786743164], + [0.6596733331680298, -8.619813919067383], + [-1.6878323554992676, 1.3679405450820923], + [-1.2516297101974487, 1.167869210243225], + [-5.235205173492432, 2.5875649452209473], + [0.7244752049446106, -9.388426780700684], + [-1.7457212209701538, 0.1864514946937561], + [2.839017391204834, -4.549747467041016], + [0.6620873212814331, -6.446325778961182], + [-0.05408862978219986, -4.345093250274658], + [-4.771313190460205, -0.9534913301467896], + [-3.5469343662261963, -1.9244649410247803], + [-0.9076709151268005, 11.160314559936523], + [1.6186540126800537, 3.1027543544769287], + [0.4552996754646301, -6.019321918487549], + [-1.0686290264129639, 0.9952677488327026], + [3.161515235900879, -4.893270969390869], + [0.273490309715271, -6.115401268005371], + [-4.76189661026001, 7.034008026123047], + [6.993969440460205, -2.190627336502075], + [-0.06695244461297989, -4.502268314361572], + [-5.303959369659424, 5.3293962478637695], + [-3.6226577758789062, -1.380715250968933], + [-4.185822486877441, -1.4921098947525024], + [0.7919747829437256, -7.3327226638793945], + [6.668120861053467, -1.7872692346572876], + [-2.349482297897339, -3.16475248336792], + [1.4929473400115967, 4.925738334655762], + [-0.5485482811927795, -0.4310417175292969], + [-3.8355562686920166, 6.425146579742432], + [0.8037691712379456, -7.848925590515137], + [-0.9905762076377869, 10.563512802124023], + [0.5639562010765076, -7.862766742706299], + [-4.837757587432861, -1.2059813737869263], + [4.8004469871521, -2.040187358856201], + [2.4771475791931152, 5.305824279785156], + [0.54514080286026, -7.283688068389893], + [-3.143406629562378, 6.818737983703613], + [0.05105336755514145, -1.335972785949707], + [-1.962411880493164, 2.249286413192749], + [1.5980525016784668, -4.550743103027344], + [3.9751193523406982, 7.074151515960693], + [-0.8512019515037537, 9.086637496948242], + [-1.2334798574447632, 1.010676383972168], + [0.5694888830184937, -4.819426536560059], + [-4.9483466148376465, 5.049073219299316], + [1.336594581604004, 0.09365737438201904], + [-2.0896034240722656, -1.505203127861023], + [1.1373833417892456, 5.411343097686768], + [-2.3601887226104736, -1.2169259786605835], + [2.774043560028076, -4.369768142700195], + [-3.695051908493042, -1.4407137632369995], + [-4.834580898284912, -0.44014763832092285], + [-0.7844858765602112, -3.2625410556793213], + [-3.4670889377593994, 5.207680702209473], + [-1.4328118562698364, 11.92937183380127], + [-5.263688564300537, -1.4977221488952637], + [1.578060507774353, -4.235243797302246], + [2.445129632949829, 5.703814506530762], + [-4.63439416885376, -0.8331089019775391], + [9.066248893737793, -2.7898435592651367], + [0.45904111862182617, 0.05332150682806969], + [2.6367156505584717, -6.017954349517822], + [0.8957171440124512, -0.14464879035949707], + [-1.790209412574768, 0.9450483918190002], + [0.316127210855484, -1.6287099123001099], + [1.9815921783447266, -4.331422805786133], + [0.42849433422088623, -5.454829216003418], + [-0.29248684644699097, 7.393829345703125], + [1.580242395401001, -4.422226905822754], + [6.979525089263916, -4.007379055023193], + [-3.986145496368408, -1.9154314994812012], + [0.6668792366981506, -9.029054641723633], + [0.4444161057472229, -6.837666988372803], + [3.080962896347046, -4.76678466796875], + [7.685152053833008, -2.96667742729187], + [0.31733185052871704, -7.028989791870117], + [0.3494013547897339, -6.107187271118164], + [2.357072591781616, -4.106592178344727], + [-5.289144039154053, 6.62584114074707], + [-1.0326963663101196, 10.441459655761719], + [1.2864792346954346, 6.441579818725586], + [-5.1590962409973145, -4.493876934051514], + [-1.9944062232971191, 1.9141467809677124], + [6.234838485717773, -2.7818291187286377], + [2.6879472732543945, -4.314047813415527], + [-1.2206493616104126, 11.03717041015625], + [-2.9993114471435547, -2.241483211517334], + [-3.722029447555542, -1.0423656702041626], + [-3.8932440280914307, -2.448052167892456], + [-1.4038288593292236, 12.198854446411133], + [1.8690154552459717, 4.326581001281738], + [-1.9009654521942139, 1.2683733701705933], + [5.69439697265625, -1.3116925954818726], + [-1.5927165746688843, 1.2716549634933472], + [-0.5826827883720398, 0.9831643104553223], + [0.8978514671325684, -7.990694046020508], + [-1.9616446495056152, -1.9335006475448608], + [0.7644670009613037, 6.002531051635742], + [2.1259725093841553, -5.242374420166016], + [-0.6990537643432617, 9.964210510253906], + [-4.958101749420166, -0.8523555994033813], + [-3.032684564590454, -0.6331639289855957], + [0.6165300607681274, -8.829666137695312], + [-4.014700889587402, 6.047261714935303], + [-3.3522040843963623, -0.7393273115158081], + [9.375971794128418, -2.79154634475708], + [-5.172000408172607, 7.384706497192383], + [-3.6124002933502197, -0.9566155076026917], + [1.6959569454193115, 6.2559003829956055], + [1.1796156167984009, 3.227356195449829], + [-0.25114840269088745, 8.942838668823242], + [-1.5630933046340942, 2.1832072734832764], + [2.7303974628448486, -4.473459720611572], + [1.7162798643112183, 2.2813973426818848], + [-3.6101109981536865, -0.7008979320526123], + [2.3495676517486572, 6.192743301391602], + [-3.6273961067199707, -0.8500316739082336], + [2.8697919845581055, -4.560918807983398], + [-0.4630053639411926, 9.81428050994873], + [2.8501932621002197, -4.485487937927246], + [-5.40020227432251, 7.216035842895508], + [5.28949499130249, -4.186923027038574], + [1.3404011726379395, 6.332304000854492], + [1.6794928312301636, 0.15566056966781616], + [-3.1857786178588867, -1.8177580833435059], + [-1.1514695882797241, 11.123832702636719], + [-1.6107640266418457, -1.3767107725143433], + [-1.321147084236145, 11.757234573364258], + [-5.007606029510498, 7.065802574157715], + [-4.593696117401123, -2.43526029586792], + [6.3220534324646, -2.1722285747528076], + [-4.740368366241455, 6.440202236175537], + [0.41686034202575684, -4.922569274902344], + [1.0021982192993164, -7.497167587280273], + [1.7308835983276367, 4.910526275634766], + [-2.3984410762786865, -0.3198480010032654], + [-5.458439350128174, 6.741471290588379], + [3.846834897994995, 0.5132349729537964], + [6.408214569091797, -2.794402837753296], + [-2.788971424102783, -1.6098930835723877], + [-3.590803861618042, -2.382392168045044], + [5.6711039543151855, -1.205514669418335], + [2.052704095840454, 4.9481706619262695], + [-3.191669464111328, -0.9255765080451965], + [-3.270014524459839, -1.018292784690857], + [-2.1079318523406982, -2.008328437805176], + [-0.7600914835929871, 11.072967529296875], + [-2.410773515701294, -3.473734140396118], + [8.856060981750488, -2.7821667194366455], + [1.783372402191162, -5.610174179077148], + [0.324550986289978, -6.311821937561035], + [-1.344078779220581, 11.59852123260498], + [-5.373353481292725, 7.4756693840026855], + [0.37233680486679077, -6.496264457702637], + [-0.3692920207977295, 8.00592041015625], + [-1.536695122718811, 12.677047729492188], + [2.756105899810791, -4.49839448928833], + [-2.11590313911438, 2.5859375], + [0.9068695902824402, -8.357687950134277], + [-0.9870636463165283, 10.08653736114502], + [-3.554478406906128, -2.127708911895752], + [9.383947372436523, -2.850395441055298], + [2.692795991897583, -4.2884907722473145], + [6.420616626739502, -1.6668250560760498], + [-1.8552573919296265, 0.8795853853225708], + [1.5738987922668457, 4.931739807128906], + [2.0239481925964355, 0.5974382162094116], + [7.418975830078125, -2.0259482860565186], + [0.7054399847984314, -8.58462142944336], + [-2.350945472717285, -0.9890762567520142], + [-0.7334063053131104, 9.23779296875], + [-0.5611808896064758, 10.13980484008789], + [-4.598583698272705, -0.31646728515625], + [3.5749166011810303, 6.543344020843506], + [1.3999191522598267, 4.459377765655518], + [-1.2303643226623535, -1.336354374885559], + [-4.418617248535156, -0.7798107862472534], + [7.518190860748291, -2.650197744369507], + [0.430783748626709, -5.916485786437988], + [-4.663410663604736, -0.6598950624465942], + [1.4797757863998413, 6.413936614990234], + [-4.523213863372803, -3.4361164569854736], + [-1.4224733114242554, 12.14250659942627], + [1.532029151916504, -5.652404308319092], + [-0.8201054930686951, 10.599180221557617], + [0.82540363073349, -2.722289800643921], + [0.926994264125824, -5.935457229614258], + [7.656166076660156, -2.3814051151275635], + [0.34727197885513306, -5.444943428039551], + [-2.888890504837036, -2.1665375232696533], + [-1.1554286479949951, 10.186334609985352], + [-0.31530413031578064, -0.8397387862205505], + [0.18248999118804932, -6.650335788726807], + [3.2941734790802, -4.146953582763672], + [-1.934792160987854, 2.067628860473633], + [8.297037124633789, -3.327862501144409], + [-1.1339812278747559, 10.44637680053711], + [5.482036590576172, -1.3946024179458618], + [-2.961949110031128, -1.8965731859207153], + [-2.0107061862945557, 0.7716978788375854], + [-4.095952033996582, -2.522502899169922], + [-4.729376316070557, -1.100021481513977], + [0.7864280343055725, -9.090778350830078], + [-0.5599410533905029, 5.921942234039307], + [-4.584595680236816, 5.17295503616333], + [0.9765754342079163, -6.263901710510254], + [0.7017918229103088, -8.399324417114258], + [0.8681173920631409, -0.22359204292297363], + [-1.7900991439819336, 0.06838518381118774], + [2.004143238067627, 2.6010444164276123], + [-1.5235368013381958, 1.3342039585113525], + [-0.660723865032196, 10.118387222290039], + [-2.039841890335083, 1.9746671915054321], + [2.4072132110595703, -4.172406196594238], + [-4.455179214477539, 5.939850807189941], + [1.8403666019439697, -4.644130706787109], + [-4.8011908531188965, 1.9916409254074097], + [2.4429831504821777, -4.901609420776367], + [-0.06183166056871414, -4.5762128829956055], + [-4.2114033699035645, -3.2665979862213135], + [5.5497050285339355, -1.7249997854232788], + [-0.543380618095398, 9.77183723449707], + [4.85925817489624, -0.9974424839019775], + [-2.145270586013794, -1.067948341369629], + [-0.8960161805152893, 5.489258289337158], + [2.2432353496551514, 5.159336566925049], + [-3.5861728191375732, -1.663655400276184], + [-2.614403486251831, -1.4113253355026245], + [7.0503621101379395, -2.5141661167144775], + [0.44483625888824463, -4.857963562011719], + [-2.4073657989501953, -1.138614535331726], + [-4.958884239196777, 7.085569381713867], + [-1.531480073928833, 0.695318341255188], + [6.00388240814209, -1.0112978219985962], + [-4.011774063110352, -1.4241865873336792], + [-2.908658981323242, -0.5592035055160522], + [0.9736259579658508, 1.2237070798873901], + [-4.029879093170166, -1.495404601097107], + [2.0363118648529053, 6.261666774749756], + [-3.936683416366577, -2.3699700832366943], + [3.008967161178589, -4.837778568267822], + [1.2170788049697876, -6.045685768127441], + [-1.959918737411499, 0.22505980730056763], + [-0.9233052134513855, 10.602836608886719], + [0.36204445362091064, -6.922019004821777], + [-1.316975712776184, -0.7304092645645142], + [-3.683128595352173, 6.412906646728516], + [-4.545523643493652, 4.918550491333008], + [-0.7161314487457275, -1.421387791633606], + [7.9303059577941895, -2.4551007747650146], + [0.2963789701461792, -1.0546927452087402], + [0.12916579842567444, -4.829970359802246], + [2.4939510822296143, -4.4374189376831055], + [-4.618628025054932, 6.762450218200684], + [0.1797466278076172, -5.9460272789001465], + [-0.6908085346221924, 9.945369720458984], + [0.5029925107955933, -4.532658576965332], + [-3.538764715194702, -0.38524603843688965], + [1.678769826889038, 5.692090034484863], + [1.0063471794128418, -5.830938816070557], + [0.7827875018119812, -5.007906436920166], + [-0.9259642362594604, 10.501612663269043], + [4.176737308502197, 7.091460227966309], + [0.45254743099212646, -6.7113542556762695], + [-1.1892380714416504, 11.087003707885742], + [-3.3255908489227295, -1.823650598526001], + [7.75870943069458, -2.469585657119751], + [2.805852174758911, -4.6793599128723145], + [2.6426024436950684, 6.039698600769043], + [-4.4907965660095215, -3.0273149013519287], + [2.9486382007598877, -4.58043098449707], + [2.734708547592163, -4.952875137329102], + [2.6731576919555664, -4.744235992431641], + [-3.600799083709717, -1.1874648332595825], + [0.21346762776374817, -4.124719619750977], + [-5.029144287109375, 6.056713104248047], + [-4.041421890258789, -1.7705610990524292], + [-2.067661762237549, -0.4867074489593506], + [-4.035723686218262, -1.2314765453338623], + [0.3728863298892975, 0.3059636354446411], + [2.3415279388427734, 3.997833490371704], + [8.320849418640137, -2.5514190196990967], + [-2.1532516479492188, 0.341957688331604], + [0.27213239669799805, 4.38258171081543], + [-0.43965238332748413, 8.661672592163086], + [-1.174100637435913, -1.7194849252700806], + [3.5654563903808594, 6.438303470611572], + [-4.144564628601074, -1.0259183645248413], + [-1.9012196063995361, 1.6240555047988892], + [2.8282461166381836, -4.740436553955078], + [-3.998415231704712, -2.151252269744873], + [-4.680447578430176, -1.4746633768081665], + [0.7296198010444641, -7.0733489990234375], + [1.2415980100631714, -6.9725141525268555], + [-0.06498188525438309, -4.213513374328613], + [1.1415314674377441, 0.1830405741930008], + [-4.7623677253723145, 5.321892738342285], + [0.5817897319793701, -7.721986293792725], + [1.725485920906067, 1.6994715929031372], + [-1.2146549224853516, -0.6991118788719177], + [-3.483569860458374, -2.8007049560546875], + [-2.9384877681732178, -1.0263468027114868], + [-5.587061882019043, 6.737855911254883], + [0.44530177116394043, -8.184412956237793], + [3.463324785232544, 6.239896297454834], + [1.3098983764648438, 1.3396233320236206], + [-1.160061240196228, 11.024158477783203], + [1.6912771463394165, -7.622900009155273], + [2.6878044605255127, -4.56428337097168], + [2.9633989334106445, -4.729455947875977], + [2.9637362957000732, 6.215688705444336], + [-4.157318592071533, -0.4530740976333618], + [-3.4918997287750244, -1.760676622390747], + [-3.1422736644744873, -1.0082459449768066], + [-1.2908719778060913, 11.684622764587402], + [0.4021403193473816, -5.83998966217041], + [-4.022282600402832, 5.8417582511901855], + [3.435302972793579, 6.50051212310791], + [-1.7488654851913452, 1.4865648746490479], + [4.8537468910217285, 7.527765274047852], + [2.7059974670410156, -4.269814491271973], + [-0.38496822118759155, 9.20809555053711], + [0.33813345432281494, -4.773896217346191], + [-5.635008811950684, -0.6265616416931152], + [6.654077053070068, -2.566437244415283], + [5.688895225524902, -1.7622129917144775], + [-1.6952028274536133, 1.788978934288025], + [0.38231831789016724, -5.066868305206299], + [-1.8046698570251465, 0.7998168468475342], + [0.35792356729507446, -4.833298683166504], + [-1.2297314405441284, 1.4656001329421997], + [-0.7824695706367493, 11.072159767150879], + [-3.4395313262939453, -1.4430510997772217], + [-0.1666809320449829, 8.491183280944824], + [4.41437292098999, 7.2216386795043945], + [-1.1955761909484863, 10.914335250854492], + [2.391432762145996, -3.446026086807251], + [-3.002368688583374, -2.3391246795654297], + [-1.8577089309692383, 1.432898998260498], + [-3.9045164585113525, 3.4314794540405273], + [1.1829404830932617, -5.133709907531738], + [-0.9590434432029724, 1.7182360887527466], + [8.153603553771973, -2.700620651245117], + [-5.076239109039307, -4.334421157836914], + [-1.8922975063323975, 1.7155132293701172], + [-3.1442174911499023, -0.6489050388336182], + [-0.3610296845436096, -1.2341265678405762], + [-4.40536642074585, -4.592840671539307], + [-0.3261834681034088, -1.6893612146377563], + [-4.148671627044678, -1.260514497756958], + [1.7105216979980469, 1.7031242847442627], + [2.515185832977295, -4.573385715484619], + [-1.610945463180542, 1.3040019273757935], + [2.954620122909546, -4.761618137359619], + [6.933748722076416, -3.2632296085357666], + [-0.7629995346069336, 11.194074630737305], + [1.2096881866455078, 3.787846326828003], + [0.33429133892059326, -6.4914631843566895], + [-4.009151935577393, -2.5613527297973633], + [0.7188060879707336, -7.678105354309082], + [-0.970772922039032, 10.439802169799805], + [-4.324192047119141, -1.0944695472717285], + [0.5415763258934021, -7.081729888916016], + [-1.874321699142456, 1.7505067586898804], + [-4.198709011077881, -1.6438461542129517], + [0.6701202392578125, -8.038857460021973], + [0.6954586505889893, -8.04726505279541], + [0.49712902307510376, -7.754340648651123], + [-2.0559284687042236, 1.2712656259536743], + [1.449843168258667, 7.217257022857666], + [1.9727160930633545, 5.987993240356445], + [1.0878806114196777, -6.397587299346924], + [-1.0179349184036255, -0.3582855761051178], + [-1.8901644945144653, 1.9213119745254517], + [1.887433648109436, -6.898354530334473], + [-3.8553717136383057, 5.918365478515625], + [0.6606048941612244, -8.775212287902832], + [-5.659992694854736, 5.958859920501709], + [8.937613487243652, -2.7068374156951904], + [2.082770586013794, -4.32871150970459], + [-1.0913218259811401, 1.8489196300506592], + [2.317756414413452, 4.557487487792969], + [-2.7502267360687256, -1.2375901937484741], + [1.8744590282440186, -4.906705856323242], + [0.7576294541358948, -8.911029815673828], + [0.03716038912534714, -1.1244232654571533], + [2.510664463043213, -3.9253742694854736], + [2.8730928897857666, -4.418363571166992], + [-0.3062722682952881, -1.470399022102356], + [2.889439344406128, -5.003461837768555], + [0.35405871272087097, -5.457542419433594], + [-4.096564769744873, 5.493427276611328], + [2.8505327701568604, -4.589837074279785], + [-1.994009256362915, 5.432872772216797], + [-4.487960338592529, 6.449646472930908], + [-4.310719013214111, -1.9963001012802124], + [-5.483506679534912, 4.673377513885498], + [0.27440017461776733, -5.483360290527344], + [-3.8247230052948, -2.4355032444000244], + [-2.051863193511963, 6.094634532928467], + [2.046149492263794, 0.43840134143829346], + [2.6022372245788574, 5.242519378662109], + [9.872333526611328, -2.9985125064849854], + [2.1580140590667725, 5.705432891845703], + [-4.349765300750732, 5.718945503234863], + [-4.3050150871276855, -2.5664052963256836], + [0.4645436406135559, -5.546246528625488], + [-4.222130298614502, 6.925268650054932], + [-1.0014148950576782, -1.3225964307785034], + [0.6126205921173096, 0.10165360569953918], + [1.5494917631149292, 4.968670845031738], + [-3.8819921016693115, 5.326089382171631], + [2.2275688648223877, 4.987026691436768], + [-0.9431137442588806, 9.607000350952148], + [-1.4266979694366455, 12.170086860656738], + [-3.513273000717163, -2.8943169116973877], + [-1.270169973373413, 10.974405288696289], + [-4.573414325714111, 6.565659999847412], + [-1.142055869102478, 1.4306979179382324], + [1.3101749420166016, 7.295827388763428], + [2.5606844425201416, -4.520748615264893], + [1.9070942401885986, 0.9912575483322144], + [-3.514042615890503, -1.2142304182052612], + [0.515376627445221, -7.505511283874512], + [-4.1316657066345215, -0.5703842043876648], + [-3.7202093601226807, -2.343186140060425], + [3.6176297664642334, -3.7836179733276367], + [-5.28555154800415, -1.0346126556396484], + [3.6400415897369385, 6.824222564697266], + [-3.4917023181915283, -0.9501819610595703], + [-1.131184697151184, 11.626239776611328], + [7.462519645690918, -2.207378625869751], + [-1.3332335948944092, 11.684856414794922], + [2.1212284564971924, -1.2979865074157715], + [8.420618057250977, -3.075747489929199], + [0.5712505578994751, -4.673222541809082], + [8.196455955505371, -2.406423807144165], + [0.0069722458720207214, -5.400484085083008], + [-2.308387041091919, 0.4648864269256592], + [0.38213855028152466, -6.790812015533447], + [2.547893762588501, 5.860118389129639], + [0.7213757634162903, -7.399814128875732], + [-0.787356436252594, 0.562472403049469], + [-5.037495136260986, -0.381679892539978], + [4.990667819976807, 7.99077033996582], + [0.6227530837059021, -7.872844219207764], + [-3.6679577827453613, -1.5175753831863403], + [1.2962552309036255, 5.272433757781982], + [1.32578444480896, -4.910501480102539], + [-3.456925630569458, -1.3788765668869019], + [-2.7821273803710938, -2.349895477294922], + [1.8338478803634644, -5.287755966186523], + [-2.8216021060943604, 5.991037845611572], + [-1.9950764179229736, 1.3051003217697144], + [0.6036202907562256, -8.221102714538574], + [2.7262542247772217, 5.693109512329102], + [2.2032220363616943, 4.791734218597412], + [0.9902728199958801, 4.819180488586426], + [4.830875873565674, -3.4389915466308594], + [0.14929360151290894, -6.156398773193359], + [-4.627756595611572, 6.984686851501465], + [-3.2835404872894287, -0.9602108597755432], + [4.309020519256592, 7.390469074249268], + [-1.3247367143630981, 0.8683844208717346], + [0.2377302050590515, 8.215445518493652], + [-3.4969911575317383, 5.5303239822387695], + [-3.651019811630249, -1.0301611423492432], + [-4.512729167938232, -0.3392764925956726], + [-0.056520648300647736, 7.641155242919922], + [-0.6615040302276611, 10.215242385864258], + [-5.744935035705566, 7.581057548522949], + [4.511631488800049, 7.2687273025512695], + [-4.182715892791748, -0.42613476514816284], + [0.6650882959365845, -8.336101531982422], + [2.010057210922241, -4.619442939758301], + [-1.9484379291534424, 1.3190408945083618], + [-5.287387371063232, 6.211346626281738], + [-1.2302073240280151, 10.724349975585938], + [6.395436763763428, -2.624211072921753], + [2.6511058807373047, -4.254624366760254], + [2.0056614875793457, -5.538482666015625], + [-4.630446434020996, -1.0916918516159058], + [-3.1951913833618164, -1.6255903244018555], + [0.5437381267547607, -5.2664594650268555], + [0.6301640868186951, -6.78449821472168], + [-1.0829931497573853, 10.837574005126953], + [0.3729821443557739, -5.883175849914551], + [-1.2676267623901367, 10.629661560058594], + [0.017464272677898407, -1.119310736656189], + [2.615234136581421, 4.760948181152344], + [-0.7706887125968933, 10.286251068115234], + [-3.4135053157806396, -1.2132560014724731], + [2.124946355819702, 5.145630836486816], + [0.5976171493530273, -6.298741340637207], + [0.6227988600730896, -8.122486114501953], + [-1.5140162706375122, -3.438408136367798], + [2.1177284717559814, 5.512838840484619], + [8.977091789245605, -2.701296329498291], + [5.737694263458252, 8.593591690063477], + [1.6228225231170654, -4.996292591094971], + [-4.315196514129639, 6.62644100189209], + [0.5218827128410339, -6.53892707824707], + [-0.7122644782066345, 10.572517395019531], + [1.2456588745117188, 0.11568179726600647], + [-0.06657246500253677, -0.8731101155281067], + [-0.13618475198745728, 8.614261627197266], + [-3.906209707260132, -3.033562183380127], + [-1.2902015447616577, -0.8880758881568909], + [-4.067777156829834, -0.9542531967163086], + [1.2213596105575562, 2.1429131031036377], + [-0.7355358004570007, 10.04808521270752], + [6.523274898529053, -1.7737112045288086], + [-4.437326908111572, 6.448099613189697], + [6.14599609375, -2.0093448162078857], + [0.388612300157547, -4.15843391418457], + [2.655879497528076, -4.226019859313965], + [2.1739866733551025, -6.163665294647217], + [-1.9154361486434937, 0.8415215611457825], + [3.8793892860412598, -0.4652363657951355], + [0.8203080296516418, -6.386887550354004], + [-3.7646820545196533, -0.7778895497322083], + [0.4765385389328003, -7.773892879486084], + [2.8515100479125977, -5.0198163986206055], + [-0.6308757662773132, -0.5882985591888428], + [-5.038585662841797, -0.5938355326652527], + [-2.567819356918335, 2.623342752456665], + [4.059768199920654, -3.5884182453155518], + [6.983527660369873, -2.266321897506714], + [-5.1518235206604, 7.298746109008789], + [-4.639878273010254, 3.373512029647827], + [-5.294691562652588, -0.7289291024208069], + [2.1241095066070557, 0.5161967873573303], + [-4.028042793273926, -3.709705114364624], + [0.6624688506126404, -8.091764450073242], + [-1.9258661270141602, 2.012007713317871], + [0.4037333130836487, -5.254578590393066], + [-1.1236536502838135, 10.812009811401367], + [0.8912054300308228, -4.649684906005859], + [-4.3743062019348145, 4.392885684967041], + [-4.710181713104248, 6.774496078491211], + [2.917273759841919, -4.996110916137695], + [7.5333452224731445, -3.282822370529175], + [-0.007380373775959015, 5.551557540893555], + [1.5000824928283691, 3.8878087997436523], + [9.520878791809082, -2.896467447280884], + [-4.706754684448242, 6.458295822143555], + [6.162245750427246, -1.4664815664291382], + [-3.4951045513153076, -1.2326338291168213], + [-3.7334823608398438, -2.2991116046905518], + [1.707244873046875, 4.251523017883301], + [7.877188205718994, -2.316948652267456], + [5.597921371459961, -1.2446399927139282], + [-1.6580616235733032, 2.1005136966705322], + [-1.9918673038482666, 0.9664474725723267], + [1.9150540828704834, 5.677370071411133], + [-1.225725769996643, 11.500391960144043], + [1.801129937171936, 4.652731895446777], + [2.8593590259552, -4.586945533752441], + [2.2013254165649414, -3.6422481536865234], + [-4.203753471374512, -0.7924855947494507], + [-1.4456545114517212, 12.033452987670898], + [4.119434833526611, 7.18171501159668], + [-1.6866308450698853, 0.5578668117523193], + [-2.49037504196167, 2.4838080406188965], + [-2.9075307846069336, 6.054044723510742], + [0.3433927893638611, -6.215487480163574], + [-3.068189859390259, -0.6077166795730591], + [-3.1496851444244385, -3.4724032878875732], + [0.1292707324028015, -4.911153316497803], + [-3.2977540493011475, -1.0862780809402466], + [-3.206951856613159, 4.961309432983398], + [3.0368311405181885, 5.799280166625977], + [-0.6374562978744507, 9.639490127563477], + [-2.10734224319458, 2.474653959274292], + [3.491316556930542, 6.947088718414307], + [-1.156295895576477, 11.08529281616211], + [3.5458428859710693, 6.649555683135986], + [2.1456778049468994, 5.723016738891602], + [-1.2376415729522705, 1.6018918752670288], + [7.7231645584106445, -2.237855911254883], + [8.717388153076172, -2.929945230484009], + [-0.22170108556747437, 9.321691513061523], + [1.1709257364273071, -6.016919136047363], + [1.0529568195343018, 0.10231427848339081], + [0.06625094264745712, -3.0484964847564697], + [-3.829103469848633, -2.8048272132873535], + [-1.7300275564193726, 1.4959241151809692], + [7.374729156494141, -2.720914125442505], + [7.609978199005127, -2.813413619995117], + [6.295632839202881, -1.4713654518127441], + [-1.1028926372528076, 11.159940719604492], + [2.197131872177124, 4.829988479614258], + [-2.4642837047576904, 6.276724815368652], + [-3.601708173751831, -1.3084615468978882], + [-3.8996434211730957, -1.0524541139602661], + [-0.08155298978090286, 8.911321640014648], + [-4.990736484527588, -0.7705914974212646], + [-3.3554298877716064, -0.9413204193115234], + [-3.5118229389190674, -1.3660953044891357], + [-1.0651307106018066, 10.55050277709961], + [-1.364455223083496, 11.919118881225586], + [7.872708797454834, -3.936673879623413], + [2.7899703979492188, -6.1503143310546875], + [-0.5994963049888611, 9.409685134887695], + [-3.6520893573760986, -1.1674455404281616], + [2.8720786571502686, -4.663067817687988], + [0.5570230484008789, -7.67753267288208], + [0.6012080907821655, -7.346549034118652], + [0.04991670697927475, -4.648797035217285], + [1.4212806224822998, 4.326338768005371], + [5.337707996368408, 8.355295181274414], + [-1.4414485692977905, 12.226109504699707], + [-5.029455184936523, 6.786078453063965], + [-2.6056880950927734, 6.096297740936279], + [1.2710165977478027, 0.018479254096746445], + [0.6565589904785156, -8.33259105682373], + [-2.4888510704040527, -1.0257899761199951], + [3.2640273571014404, -4.394366264343262], + [-2.197894334793091, 1.9837006330490112], + [0.53360915184021, -0.12599921226501465], + [-2.9827651977539062, -2.16978120803833], + [0.7612529397010803, -0.7556462287902832], + [0.8433094620704651, -9.323217391967773], + [2.743316173553467, -4.665753364562988], + [-2.0185434818267822, 1.8701529502868652], + [4.049431800842285, 7.046816825866699], + [-4.212252616882324, -2.435270071029663], + [8.512091636657715, -3.0331435203552246], + [-3.343181848526001, -1.3544206619262695], + [-4.263538837432861, -0.2056165337562561], + [2.6661646366119385, -4.398114204406738], + [-2.5152766704559326, 2.585153818130493], + [-2.9864437580108643, -0.6958925724029541], + [-4.086925983428955, -2.6612954139709473], + [3.8280744552612305, 7.338591575622559], + [-0.6839670538902283, -3.4146568775177], + [-0.73013836145401, 10.227134704589844], + [-1.4534170627593994, 11.943365097045898], + [6.473791122436523, -2.3796863555908203], + [7.390626430511475, -2.4520556926727295], + [7.752589702606201, -2.8755550384521484], + [-1.9891576766967773, 1.5592350959777832], + [2.234570264816284, -4.139674186706543], + [0.9258950352668762, -7.690484046936035], + [3.8091728687286377, 7.235869884490967], + [0.6859150528907776, -7.598540782928467], + [-3.6739749908447266, -1.1330987215042114], + [-2.9511454105377197, -1.0666474103927612], + [-1.0702400207519531, 0.03018760308623314], + [2.766547918319702, -5.017913818359375], + [2.522688627243042, 5.9112653732299805], + [-1.0708801746368408, 10.835684776306152], + [-0.21423250436782837, 8.692375183105469], + [-3.179325580596924, 5.881086826324463], + [-1.9478332996368408, 2.6548454761505127], + [-0.6724964380264282, 0.9278482794761658], + [-4.719348430633545, 4.744967937469482], + [-3.8658459186553955, -0.6566620469093323], + [2.026679754257202, -5.706886291503906], + [2.5872645378112793, -4.425148010253906], + [-1.7537052631378174, -0.3377859592437744], + [1.799881100654602, 3.9231112003326416], + [7.87151575088501, -2.227322816848755], + [-0.6356906294822693, 10.55498218536377], + [-0.03151798993349075, -5.344445705413818], + [-1.3664101362228394, 11.617809295654297], + [-0.6035632491111755, 9.764816284179688], + [2.2343411445617676, -4.8459086418151855], + [0.1477239727973938, -5.366253852844238], + [-5.007155895233154, 7.318502902984619], + [-2.494699239730835, -1.6291457414627075], + [2.196336507797241, 0.48809385299682617], + [-3.273603916168213, -0.803939700126648], + [6.796833515167236, -2.5885543823242188], + [0.9103667736053467, -0.29541006684303284], + [2.885958433151245, -4.671995162963867], + [3.5881686210632324, -4.466388702392578], + [-1.674607515335083, 1.4476838111877441], + [-1.4038257598876953, 12.47124195098877], + [0.7987448573112488, -9.937383651733398], + [2.5369203090667725, -4.441736698150635], + [1.6109446287155151, -5.200161933898926], + [6.2369256019592285, -2.0682389736175537], + [0.4789189100265503, -7.487550735473633], + [0.6673782467842102, -8.802556991577148], + [-0.6288422346115112, -2.5984456539154053], + [1.716963768005371, 4.68588924407959], + [-3.177431583404541, -1.72713041305542], + [-1.3603001832962036, 12.052968978881836], + [0.6565345525741577, -7.936259746551514], + [-1.927808165550232, 1.2226145267486572], + [0.2924068570137024, -5.606945514678955], + [2.4267265796661377, -4.618792533874512], + [-3.5001163482666016, -1.0540424585342407], + [0.4342784285545349, -0.7202200293540955], + [2.346940517425537, -5.246793270111084], + [7.438179969787598, -3.8836100101470947], + [2.660367965698242, -4.278016090393066], + [-1.7037677764892578, -0.18377819657325745], + [3.0321388244628906, -5.233173370361328], + [-3.628471612930298, -2.3128018379211426], + [-0.9909840226173401, 10.717206954956055], + [-4.848028659820557, 5.718539714813232], + [-3.7860167026519775, -3.3294460773468018], + [0.6533012986183167, -8.355542182922363], + [-3.210225820541382, -1.195512294769287], + [2.9393928050994873, -4.815220832824707], + [1.981841802597046, 4.725900173187256], + [-0.2866617441177368, 7.867542266845703], + [7.542303562164307, -3.580314874649048], + [2.4303910732269287, -5.587916374206543], + [-1.4390650987625122, 11.726144790649414], + [-5.2687087059021, -0.9378437399864197], + [-1.7836861610412598, 1.848035216331482], + [-4.587045192718506, 2.9237287044525146], + [1.3960106372833252, 5.92650032043457], + [2.5394020080566406, -4.836748123168945], + [-1.4532681703567505, -0.2885359525680542], + [-1.0048657655715942, 1.482108235359192], + [-2.620781183242798, 4.517093181610107], + [0.5528489947319031, -5.980573654174805], + [6.890904903411865, -2.9828858375549316], + [-4.799713134765625, 6.403447151184082], + [8.737466812133789, -2.7902450561523438], + [-0.11567587405443192, 7.306661605834961], + [3.4221951961517334, 6.877363681793213], + [8.492018699645996, -2.977375030517578], + [0.5987486839294434, -3.8665339946746826], + [0.23025673627853394, 3.9223101139068604], + [2.6298534870147705, 6.601504325866699], + [-3.6768739223480225, -1.8390154838562012], + [0.8814206719398499, -4.513237953186035], + [5.939574241638184, -2.6998608112335205], + [5.74202299118042, -2.683330774307251], + [0.6035534739494324, -7.449610710144043], + [1.2798757553100586, -4.638263702392578], + [-1.10464346408844, 11.40670108795166], + [-4.460178852081299, -1.2839614152908325], + [-4.278268814086914, -1.6818819046020508], + [2.000767469406128, 3.127254009246826], + [-0.2778173089027405, 9.368826866149902], + [-4.442997455596924, 5.585115432739258], + [-4.680907726287842, -0.7953308820724487], + [8.415613174438477, -2.6615686416625977], + [-1.824547529220581, 1.194632649421692], + [-0.8345001935958862, 9.975330352783203], + [-3.263568162918091, 2.744922399520874], + [-0.5176648497581482, 9.856712341308594], + [-4.146965026855469, -1.7221537828445435], + [-0.8230726718902588, 9.579408645629883], + [2.713799476623535, -4.429267883300781], + [1.1678704023361206, -7.614666938781738], + [-2.6893343925476074, 5.389610290527344], + [8.640247344970703, -3.1487767696380615], + [-0.187999427318573, 9.19309139251709], + [-3.5244152545928955, -1.4377806186676025], + [-1.9196856021881104, 1.7698453664779663], + [-3.6308000087738037, -1.5154746770858765], + [-5.837822437286377, 7.985749244689941], + [6.683653831481934, -2.074859380722046], + [0.6516773700714111, -5.0910234451293945], + [-2.137769937515259, 2.1484909057617188], + [2.8424456119537354, -4.8592023849487305], + [-0.09221581369638443, -4.441413879394531], + [5.077426910400391, -3.4019968509674072], + [2.290544271469116, -4.27252197265625], + [-5.605072498321533, 7.176783561706543], + [-1.0973799228668213, -0.9260882139205933], + [3.0627167224884033, -5.031336307525635], + [-2.266911506652832, -1.0513604879379272], + [0.7487038969993591, -9.152505874633789], + [1.7211272716522217, 2.1361777782440186], + [2.4872796535491943, -4.215916633605957], + [0.899844229221344, -2.9840691089630127], + [-4.072300434112549, -4.814665794372559], + [8.880867958068848, -2.7468714714050293], + [3.137648344039917, 6.634927272796631], + [-1.484367847442627, 1.9549487829208374], + [0.39564114809036255, -7.284441947937012], + [-1.9277236461639404, 2.353919506072998], + [4.797512531280518, 7.659241676330566], + [5.84358549118042, -3.7584097385406494], + [-4.013790130615234, -3.508655071258545], + [0.07794242352247238, -4.096467971801758], + [2.469507932662964, 3.156879186630249], + [-0.9851829409599304, 1.6753889322280884], + [-3.8877766132354736, -2.135951280593872], + [-2.111064910888672, 2.0393190383911133], + [-2.00166392326355, -2.6385388374328613], + [-0.32471901178359985, -2.873584747314453], + [1.5975886583328247, 1.9129561185836792], + [0.5338308811187744, -6.375153541564941], + [-2.091244697570801, 0.01866280660033226], + [6.997403144836426, -2.998715877532959], + [-2.7744836807250977, -1.2521482706069946], + [-3.319244623184204, -0.8107386231422424], + [-2.7343664169311523, -3.126849889755249], + [0.6344094276428223, -0.3057546317577362], + [-1.2565921545028687, 11.128639221191406], + [8.066245079040527, -2.943943738937378], + [3.6633150577545166, 7.017014503479004], + [-1.4167793989181519, 11.681815147399902], + [1.529595136642456, -5.873335361480713], + [-3.6356561183929443, -2.0480458736419678], + [1.3630822896957397, 4.972626686096191], + [2.1629104614257812, 0.4703162908554077], + [2.62709379196167, -4.058008193969727], + [-5.800668239593506, 4.2571024894714355], + [-2.0764544010162354, 1.623910903930664], + [-3.738034963607788, -1.8942147493362427], + [6.364854335784912, -4.734465599060059], + [1.3520708084106445, 5.502270698547363], + [1.5019433498382568, 1.627301573753357], + [-3.934051513671875, -1.6824824810028076], + [-4.971970081329346, -0.9474086761474609], + [6.137421131134033, -2.2925643920898438], + [-3.3981773853302, -1.9081720113754272], + [6.311227321624756, -3.479567050933838], + [0.7441551089286804, -8.87099838256836], + [-4.014107704162598, -3.3758833408355713], + [4.646524906158447, 7.640048980712891], + [-3.4888417720794678, -0.6831741333007812], + [2.1046698093414307, 3.452143907546997], + [0.6647549271583557, -8.647787094116211], + [-2.0829596519470215, 1.0926834344863892], + [0.5903146266937256, -4.678340435028076], + [3.0171959400177, 5.862900733947754], + [1.9335627555847168, 5.359658241271973], + [-0.5459340214729309, 9.862886428833008], + [-1.0705738067626953, 11.497356414794922], + [-3.2048275470733643, -2.9837911128997803], + [-5.031762599945068, 4.746832847595215], + [-3.9098894596099854, 6.49923038482666], + [-5.312105178833008, 7.277245044708252], + [-3.5312716960906982, -1.2791632413864136], + [3.501553535461426, 7.47767972946167], + [3.080888032913208, -4.915787696838379], + [4.629532337188721, -2.779008150100708], + [-1.9531254768371582, 1.9469176530838013], + [-3.8379933834075928, -2.3747222423553467], + [-4.151712894439697, -1.6027065515518188], + [-0.25003838539123535, 7.899723052978516], + [-2.063485622406006, -2.7361772060394287], + [1.4964148998260498, -5.699190139770508], + [-3.260125160217285, -0.9940062165260315], + [1.6558685302734375, -4.429776191711426], + [-0.7939336895942688, -0.7379084825515747], + [-2.613642930984497, 2.7771108150482178], + [-4.772042751312256, -4.225200653076172], + [-3.601642370223999, -2.6978747844696045], + [-1.3265150785446167, 0.5632597208023071], + [-3.055049180984497, -2.1889827251434326], + [-0.12319863587617874, 9.685663223266602], + [8.476269721984863, -3.7266454696655273], + [0.6566365361213684, -7.783982753753662], + [0.40505486726760864, -6.316271781921387], + [-2.640673875808716, -1.4394898414611816], + [-2.684216022491455, -0.9299631118774414], + [1.9698233604431152, 5.416957855224609], + [1.3566946983337402, -7.046096324920654], + [-0.3893193006515503, 9.14168643951416], + [0.6515528559684753, -8.098817825317383], + [1.3814034461975098, -4.849923133850098], + [-0.5226036310195923, 10.54150390625], + [0.4426566958427429, -6.170731544494629], + [0.8053650259971619, -5.166937828063965], + [1.332419991493225, 5.563111782073975], + [-3.4804632663726807, 5.420052528381348], + [2.2270195484161377, 5.739634990692139], + [-1.2316572666168213, 11.26485538482666], + [-4.646793842315674, 7.016209602355957], + [-0.1915736198425293, 8.992715835571289], + [0.018922917544841766, -4.580808639526367], + [2.3161709308624268, -4.775240898132324], + [0.40677571296691895, -5.71198844909668], + [7.6416335105896, -2.244960069656372], + [1.6938968896865845, 3.795862913131714], + [-1.0853497982025146, 9.300455093383789], + [-2.0898120403289795, 2.2177398204803467], + [3.16391658782959, 6.463520050048828], + [-5.925268650054932, 3.851036310195923], + [-4.5953145027160645, -1.232438325881958], + [-3.4284205436706543, -1.7828506231307983], + [-3.129286050796509, -0.3278992176055908], + [8.02910041809082, -2.8842813968658447], + [7.592955589294434, -4.1300554275512695], + [0.4417688250541687, -6.652655601501465], + [2.5143325328826904, -4.946785926818848], + [0.9890920519828796, -7.386471748352051], + [2.4974281787872314, -4.425342082977295], + [0.3143644332885742, -5.617393493652344], + [-0.6932106614112854, 10.473447799682617], + [-0.18636181950569153, -3.1479289531707764], + [1.7301932573318481, -5.36834192276001], + [2.922382116317749, -4.5834479331970215], + [-4.489051342010498, -1.2750098705291748], + [-0.9666332602500916, 11.175372123718262], + [2.3443682193756104, 6.9712982177734375], + [-1.1279343366622925, 10.303329467773438], + [-3.1468234062194824, -0.7935669422149658], + [6.232170581817627, -2.6163642406463623], + [-3.966146230697632, -1.3704890012741089], + [0.5013058185577393, -7.873816013336182], + [3.088348627090454, -4.8328633308410645], + [1.5529217720031738, -5.289762496948242], + [-5.400047779083252, 6.689274787902832], + [-4.267938137054443, 5.4274091720581055], + [1.2649341821670532, 5.060305118560791], + [2.1941652297973633, -5.06073522567749], + [-3.027758836746216, -0.4601069390773773], + [-1.9628281593322754, -0.8664832711219788], + [-1.9130260944366455, 1.8809080123901367], + [1.1717363595962524, -0.2696991562843323], + [7.80280876159668, -2.2859184741973877], + [-1.2822492122650146, -0.7172243595123291], + [2.9044296741485596, -4.481971740722656], + [-1.2760331630706787, 11.219793319702148], + [-3.273451328277588, 5.557852745056152], + [5.871061325073242, -0.8704940676689148], + [-3.7635583877563477, -0.9508360028266907], + [9.533659934997559, -2.834334135055542], + [3.213688373565674, 6.875036239624023], + [-2.150310516357422, -0.5778465270996094], + [-4.071850299835205, -0.9137511849403381], + [-0.41302257776260376, 9.586570739746094], + [0.35955965518951416, -5.910825729370117], + [-0.8652216792106628, 10.588652610778809], + [-2.2882211208343506, 5.592502593994141], + [-2.0907318592071533, 1.1447415351867676], + [-4.346900939941406, 5.403977394104004], + [2.8069119453430176, -4.693587779998779], + [-1.3540575504302979, 11.67608642578125], + [5.5851969718933105, -2.6239802837371826], + [2.0231316089630127, 5.490279197692871], + [-3.2687079906463623, -0.5992577075958252], + [0.4331456422805786, -7.306764602661133], + [3.662917137145996, 7.414352893829346], + [-3.6082608699798584, -2.482057809829712], + [0.804644763469696, -9.179736137390137], + [-4.630983829498291, -0.8011907339096069], + [1.4939861297607422, -4.98272705078125], + [-1.1869574785232544, 11.155885696411133], + [1.545030117034912, -5.184840202331543], + [-3.8423373699188232, -2.4441134929656982], + [2.68354868888855, -4.43698787689209], + [-3.4587481021881104, -1.4571471214294434], + [-5.300732135772705, 4.181878566741943], + [0.25588342547416687, -4.993051528930664], + [2.257965564727783, 4.033770561218262], + [2.660721778869629, -4.3788347244262695], + [-1.2445985078811646, 10.877618789672852], + [-0.408560574054718, 9.095778465270996], + [-4.032778263092041, -3.783482313156128], + [-1.1437029838562012, 10.564266204833984], + [0.5296592116355896, -6.871565818786621], + [1.8141735792160034, 4.009123802185059], + [0.5525494813919067, -6.905126571655273], + [6.253835201263428, -3.803231954574585], + [1.6338728666305542, -3.4280595779418945], + [0.3188203275203705, -4.529021263122559], + [1.0534584522247314, -5.665820121765137], + [2.8230059146881104, -4.51722526550293], + [0.18507462739944458, 0.8464536666870117], + [-5.4272685050964355, -0.9431008100509644], + [1.0321756601333618, -0.20740272104740143], + [1.644618272781372, 2.0134570598602295], + [-1.9621307849884033, 0.9612964391708374], + [-3.6960513591766357, -2.4699106216430664], + [6.186267375946045, -1.680383324623108], + [-1.3971747159957886, 0.9395825862884521], + [-1.2120983600616455, -3.345734119415283], + [-4.123945713043213, 1.205146312713623], + [1.442128300666809, 1.0273194313049316], + [-3.9109017848968506, -0.8337591290473938], + [0.9413005709648132, 5.859119415283203], + [9.000639915466309, -2.69502329826355], + [8.235682487487793, -2.4416680335998535], + [0.9819350838661194, 8.264901161193848], + [-5.655645847320557, -1.206776738166809], + [1.5293418169021606, 6.784114360809326], + [2.893343687057495, -4.657114028930664], + [-4.637086391448975, -0.9609787464141846], + [-3.944188117980957, -1.27145254611969], + [-3.7681467533111572, -0.6278936862945557], + [-1.0679588317871094, 11.0886812210083], + [-1.4470188617706299, 0.6803207397460938], + [1.1123831272125244, -0.526614785194397], + [0.3639463782310486, -6.1379804611206055], + [2.6796343326568604, -4.286281585693359], + [-3.5636117458343506, -1.9714220762252808], + [-5.4510321617126465, 5.152846336364746], + [-1.9426817893981934, 0.038679953664541245], + [8.553882598876953, -2.5067718029022217], + [-4.2500901222229, -1.4042590856552124], + [2.525165557861328, -4.137973308563232], + [-3.9532105922698975, 0.878311038017273], + [-4.681240081787109, -1.698305368423462], + [-4.017700672149658, -2.6426753997802734], + [-1.4287961721420288, 12.10205364227295], + [-3.1604952812194824, -1.2444804906845093], + [-3.2615678310394287, -0.27021247148513794], + [-1.2245383262634277, 11.078466415405273], + [-0.2567738890647888, 8.761643409729004], + [-5.1988606452941895, 6.035576820373535], + [-1.2680937051773071, 11.087364196777344], + [0.6523880362510681, -8.92084789276123], + [-1.4707908630371094, 12.058647155761719], + [-4.239649772644043, -1.1786996126174927], + [-4.361722469329834, -3.1631295680999756], + [-0.715028703212738, 10.68608283996582], + [-3.974377155303955, -2.7142584323883057], + [3.5942769050598145, 6.717445373535156], + [0.6422095894813538, -6.960044860839844], + [1.0516161918640137, -6.409628868103027], + [-3.812809944152832, -0.8302620649337769], + [-4.068216323852539, -1.2317839860916138], + [2.765500783920288, -4.916613578796387], + [8.799531936645508, -2.7296788692474365], + [-1.323201298713684, 11.282535552978516], + [-4.427662372589111, 6.506213188171387], + [-1.2766565084457397, 10.670204162597656], + [-5.320315837860107, 6.905457496643066], + [1.2854715585708618, -7.307228088378906], + [-4.382978916168213, -3.2978460788726807], + [-0.733947217464447, 10.4889554977417], + [1.479576587677002, -5.150668621063232], + [0.7939087748527527, -6.568690776824951], + [1.7176719903945923, 5.81771993637085], + [0.7438321113586426, -6.459572792053223], + [-5.041036128997803, 2.132998466491699], + [-3.9027230739593506, 5.0573577880859375], + [2.4834532737731934, 5.006450176239014], + [0.8071096539497375, -5.473615646362305], + [-5.306166172027588, 6.6322021484375], + [-4.213680744171143, -2.693849802017212], + [7.277917385101318, -2.9343345165252686], + [1.5198895931243896, -4.285205841064453], + [-3.6984832286834717, -1.8631891012191772], + [-3.779958486557007, -2.324104070663452], + [-1.9565037488937378, 1.6442111730575562], + [0.6575435996055603, -7.718789100646973], + [-0.5809247493743896, 10.76504898071289], + [-1.8483096361160278, -0.7746899127960205], + [0.6788643598556519, -6.928548812866211], + [-3.5973145961761475, 3.8267691135406494], + [0.9320972561836243, -7.944276332855225], + [-1.842816948890686, -0.6446877121925354], + [2.338805913925171, -4.593776226043701], + [2.9643971920013428, 6.361242771148682], + [8.485790252685547, -2.9387600421905518], + [0.6062821745872498, -7.83706521987915], + [-0.03341687470674515, 6.805177211761475], + [2.629088878631592, 5.681011199951172], + [-0.31754741072654724, -1.3931089639663696], + [-0.9957931041717529, 11.048196792602539], + [1.1429712772369385, 6.130099296569824], + [-3.02687668800354, -1.3912378549575806], + [3.546147346496582, -4.941502094268799], + [0.9342225193977356, -5.494000434875488], + [-4.398194789886475, -0.8156766891479492], + [-5.1552653312683105, -1.2246472835540771], + [7.632038593292236, -2.2055160999298096], + [-2.0628340244293213, -2.317316770553589], + [-4.649531841278076, 2.0763652324676514], + [0.007255397737026215, -4.4012041091918945], + [-4.179196834564209, -0.5584655404090881], + [1.1828625202178955, -5.708413600921631], + [-3.7756025791168213, -1.393431544303894], + [2.6335597038269043, -4.364434242248535], + [-1.5406181812286377, 12.337583541870117], + [7.028700351715088, -3.897369146347046], + [0.563596248626709, -6.947240352630615], + [0.4988200068473816, -7.501147747039795], + [-0.21217042207717896, -1.8693705797195435], + [0.6958921551704407, -7.1528778076171875], + [0.1928253471851349, -0.640516459941864], + [-0.44937437772750854, 8.664819717407227], + [-0.5733233690261841, 9.520018577575684], + [-3.7942659854888916, -1.5932371616363525], + [-3.8072807788848877, 5.906967639923096], + [-3.386016368865967, -3.290926694869995], + [-0.8786851763725281, 10.151199340820312], + [4.564723491668701, -3.8977739810943604], + [2.961376190185547, -4.651351451873779], + [-1.150773286819458, 10.683627128601074], + [2.869293451309204, -4.524557113647461], + [1.2501498460769653, -4.2626752853393555], + [-0.8535482287406921, 10.208056449890137], + [-0.13934281468391418, -1.0712165832519531], + [-4.13704776763916, -1.4038861989974976], + [-4.923087120056152, 6.873293876647949], + [-3.5891306400299072, -0.850129246711731], + [-1.8951497077941895, -1.2187867164611816], + [-1.2203569412231445, 1.8288047313690186], + [-3.922977924346924, -2.3940091133117676], + [7.258613109588623, -2.023660182952881], + [2.1620724201202393, 4.593874931335449], + [-5.340839862823486, -0.5780736207962036], + [5.974236965179443, -1.5608494281768799], + [2.1484177112579346, 6.234486103057861], + [-0.489061176776886, 10.051067352294922], + [-3.584747314453125, 5.583695888519287], + [-0.4257611632347107, 10.62307071685791], + [5.332624912261963, -2.9514594078063965], + [-1.1846059560775757, 10.045231819152832], + [-0.029361851513385773, 8.695329666137695], + [1.0358517169952393, -6.75618839263916], + [-1.8007458448410034, 1.6485871076583862], + [-1.3438259363174438, 11.703699111938477], + [1.7314164638519287, -4.35827112197876], + [-3.925875663757324, 5.544585704803467], + [6.163252353668213, -1.1433442831039429], + [-2.1923160552978516, -2.6622064113616943], + [-2.9401133060455322, 3.736548900604248], + [-4.534933567047119, -1.0862518548965454], + [0.8755465149879456, -4.6262125968933105], + [7.701517105102539, -3.505622625350952], + [-4.526767253875732, -0.7198972702026367], + [-3.765810251235962, -0.3233524560928345], + [-1.1572059392929077, 10.872761726379395], + [-4.414748668670654, 6.495830535888672], + [-1.6949623823165894, 2.36789870262146], + [1.9610483646392822, 2.7562074661254883], + [-3.3969924449920654, -1.2477511167526245], + [-0.12760522961616516, -4.47817850112915], + [-1.4343608617782593, 1.9578653573989868], + [8.790571212768555, -3.1056063175201416], + [-3.0623090267181396, -1.6652355194091797], + [-1.130758285522461, 11.18073844909668], + [-1.7632553577423096, -0.7704343199729919], + [0.5418644547462463, -7.591566562652588], + [-1.269235372543335, 11.39767074584961], + [-2.3385121822357178, 4.488697528839111], + [-4.759901523590088, -1.804497241973877], + [-3.8421521186828613, -0.6516261100769043], + [-1.755715250968933, 0.19730892777442932], + [2.501959800720215, 6.23781156539917], + [-3.9186322689056396, 6.848588466644287], + [1.3108092546463013, 5.272553443908691], + [1.424518346786499, 5.036876201629639], + [2.283151388168335, -4.612834930419922], + [-3.349703788757324, -0.7676272392272949], + [-1.4788713455200195, 1.721314549446106], + [0.7957935333251953, -6.499614238739014], + [-0.3049224019050598, 9.216736793518066], + [-2.010697364807129, -0.017668966203927994], + [2.628779888153076, -4.289067268371582], + [-4.263248920440674, -0.9586643576622009], + [0.4439150094985962, -6.982254981994629], + [7.401918888092041, -3.0686521530151367], + [0.6944932341575623, -5.696354866027832], + [-3.4903929233551025, -1.0326006412506104], + [8.048129081726074, -2.3727223873138428], + [-3.3424267768859863, -2.0219295024871826], + [4.7553229331970215, 7.815714359283447], + [-2.021479368209839, 0.9516785144805908], + [0.7130342125892639, -9.28261947631836], + [8.256847381591797, -2.3748724460601807], + [-1.470881700515747, 12.14373779296875], + [-3.694732904434204, -2.3500726222991943], + [-2.3912582397460938, 4.283147811889648], + [-3.629634141921997, -1.8312602043151855], + [-3.281271457672119, -2.60738205909729], + [-1.8963993787765503, 1.0223208665847778], + [-1.4087848663330078, -0.6028716564178467], + [0.9538156390190125, -4.891246795654297], + [7.159826755523682, -3.7851855754852295], + [-0.7053528428077698, 10.88321590423584], + [1.9817204475402832, 4.953171253204346], + [-0.005063600838184357, 6.294594764709473], + [-2.7823567390441895, 4.963873863220215], + [0.7531404495239258, -6.119033336639404], + [2.4295637607574463, -4.687981128692627], + [-0.9325510859489441, 11.034673690795898], + [-1.4021095037460327, 1.1413525342941284], + [0.7015388607978821, -9.437289237976074], + [0.4833744168281555, -5.592136859893799], + [7.024174690246582, -2.0475637912750244], + [-1.061931848526001, 11.225746154785156], + [7.414649486541748, -2.267317771911621], + [0.8676747679710388, -4.820440292358398], + [-0.6261657476425171, -3.1693501472473145], + [4.14119291305542, 7.120424270629883], + [-4.214986801147461, -1.5807151794433594], + [-5.6170830726623535, 7.584622859954834], + [8.50467300415039, -2.6100308895111084], + [0.5170941948890686, -8.118053436279297], + [0.6189563870429993, -7.530372619628906], + [-4.278304100036621, 4.448516845703125], + [-1.1061571836471558, 10.948236465454102], + [-3.9980664253234863, -3.250685453414917], + [-0.882633626461029, 10.245050430297852], + [3.153989553451538, -4.928879737854004], + [0.9421948790550232, -0.360903799533844], + [1.7021738290786743, -3.776076078414917], + [-3.483992338180542, -1.7058888673782349], + [2.676776170730591, -4.272024154663086], + [-3.6322996616363525, -2.0533535480499268], + [1.2930960655212402, 0.06821958720684052], + [0.019613437354564667, -2.6241633892059326], + [-4.705942153930664, 5.846926212310791], + [2.62723970413208, 0.6604428291320801], + [-2.713787317276001, 6.62522554397583], + [9.227052688598633, -2.9013164043426514], + [-3.366987943649292, -1.1825895309448242], + [-6.336658954620361, 9.205316543579102], + [-4.004907131195068, -1.4272477626800537], + [-3.424722671508789, -1.7530816793441772], + [2.052131414413452, 0.82212233543396], + [6.8234429359436035, -5.626497268676758], + [0.94923335313797, -5.399256706237793], + [2.7032673358917236, -3.9569671154022217], + [2.2610971927642822, -3.6601080894470215], + [2.012247323989868, 5.533166885375977], + [-2.8680057525634766, 5.068498134613037], + [-0.27722203731536865, -1.5271577835083008], + [-3.174844980239868, -1.8192176818847656], + [-1.3914352655410767, 11.63734245300293], + [-3.5664761066436768, -1.881273865699768], + [3.2494382858276367, 6.928319454193115], + [-1.0751794576644897, 10.488590240478516], + [-1.8700532913208008, 0.10560768842697144], + [-3.7062275409698486, -1.2252771854400635], + [1.0357388257980347, 6.903962135314941], + [-3.4974868297576904, -2.8041203022003174], + [2.0372445583343506, 5.070151329040527], + [0.8542205691337585, -6.6331377029418945], + [1.2531886100769043, -5.255734920501709], + [-3.3372642993927, -1.1321094036102295], + [-3.9005279541015625, -2.613504409790039], + [-3.9565985202789307, -2.0870540142059326], + [-0.5263121724128723, 10.329721450805664], + [0.6475741863250732, -7.797369956970215], + [0.48765110969543457, -6.217609405517578], + [-4.47243070602417, 6.610647201538086], + [-3.77641224861145, -2.927168130874634], + [-0.9668658375740051, -3.1312952041625977], + [-3.503728151321411, -1.5981295108795166], + [0.38142848014831543, -6.9175190925598145], + [-1.2450244426727295, -0.9122170209884644], + [0.19593721628189087, -4.101457118988037], + [-5.623362064361572, -0.726675808429718], + [-0.15170550346374512, 0.9613076448440552], + [-2.357029676437378, 2.263882637023926], + [-2.739185094833374, -2.293752908706665], + [0.9938910603523254, -0.17391008138656616], + [-3.0949084758758545, 3.291383743286133], + [8.055100440979004, -2.5439774990081787], + [-0.6228041052818298, 10.167924880981445], + [0.6176038980484009, -7.44302225112915], + [0.41252297163009644, -5.280368328094482], + [0.28624671697616577, -6.386045932769775], + [-1.4271173477172852, 1.4556084871292114], + [0.5055493712425232, -5.507467269897461], + [0.5445088744163513, -7.492770195007324], + [-3.757807970046997, 5.7823991775512695], + [-3.6865298748016357, -0.6955715417861938], + [-4.565243721008301, -0.6711728572845459], + [-5.745045185089111, 4.170557975769043], + [2.989534378051758, -4.689607620239258], + [-1.4557064771652222, 0.7565017938613892], + [1.9162724018096924, -5.189323425292969], + [1.6126220226287842, 2.2994887828826904], + [-1.2887382507324219, 11.414834976196289], + [-3.4810843467712402, 4.804829120635986], + [7.204809665679932, -2.219604969024658], + [-3.775176525115967, 5.018008232116699], + [2.641878366470337, -4.413315773010254], + [-3.334772825241089, -2.9056694507598877], + [1.5848222970962524, 3.873965263366699], + [-0.6701142191886902, -1.4766485691070557], + [0.11328282207250595, -4.236181735992432], + [2.076744318008423, -5.9773359298706055], + [-3.2384960651397705, 5.134786605834961], + [-1.013142704963684, 11.30450439453125], + [-2.8400299549102783, -1.7881262302398682], + [0.7643793225288391, -9.218910217285156], + [-4.08550500869751, -1.4658634662628174], + [-1.805188536643982, 2.109562397003174], + [2.8363215923309326, -4.666605472564697], + [-1.5233309268951416, -0.07231581211090088], + [7.574388027191162, -2.5014047622680664], + [4.049814701080322, -4.283246040344238], + [-0.6649169921875, 10.339552879333496], + [-0.9320005774497986, 10.297212600708008], + [-3.863382339477539, -1.192301869392395], + [2.3052256107330322, 5.70655632019043], + [-2.378251075744629, 2.117316961288452], + [-3.132169485092163, -0.6547391414642334], + [-1.968076467514038, 1.6384978294372559], + [-4.478546619415283, -0.8308666944503784], + [5.352059841156006, 8.208341598510742], + [-1.347278356552124, 11.084056854248047], + [2.919525384902954, -4.575849533081055], + [8.518023490905762, -2.8764913082122803], + [5.291344165802002, -4.2657928466796875], + [0.09322740882635117, -3.2803196907043457], + [2.8799169063568115, -4.7505106925964355], + [7.516548156738281, -3.919243574142456], + [1.1713297367095947, 0.6181191205978394], + [4.806612014770508, -0.9502508640289307], + [7.126072406768799, -3.3219058513641357], + [-1.393373727798462, 12.319151878356934], + [3.099611520767212, -4.862848281860352], + [0.8843684196472168, -4.5112714767456055], + [-3.7225353717803955, -0.3444945812225342], + [-4.5879926681518555, -0.9521465301513672], + [-4.382710933685303, -1.764299988746643], + [8.433682441711426, -2.641812324523926], + [1.0214345455169678, -5.681684494018555], + [-1.0239945650100708, 9.476134300231934], + [-2.0915908813476562, 1.6526881456375122], + [-4.366913318634033, -2.8118929862976074], + [0.4267386198043823, -4.060493469238281], + [0.7228460311889648, -7.730205535888672], + [0.6801447868347168, -0.6074092388153076], + [-1.6163362264633179, 1.0641592741012573], + [-3.046193838119507, 5.059673309326172], + [-3.8185842037200928, -2.5773026943206787], + [2.9694416522979736, 6.195782661437988], + [-2.4176859855651855, 1.573887586593628], + [0.8735575079917908, -4.339357376098633], + [0.6292327046394348, -4.5646772384643555], + [-1.5826163291931152, -0.6954200863838196], + [-1.9785689115524292, 1.9373856782913208], + [-2.9430997371673584, -1.9483668804168701], + [6.362033367156982, -3.679260492324829], + [-3.4049489498138428, -0.978683590888977], + [2.428568124771118, 5.399221420288086], + [-2.0538740158081055, 0.6477545499801636], + [-1.7379049062728882, 0.7171032428741455], + [6.283130645751953, -3.4657294750213623], + [-0.20337074995040894, -1.5905146598815918], + [2.299922227859497, 5.370231628417969], + [-4.672630786895752, -0.9703388214111328], + [-1.4727882146835327, 12.456806182861328], + [2.860341787338257, -4.855625152587891], + [-3.6235060691833496, -0.717718243598938], + [6.280538082122803, -1.9326273202896118], + [-5.145326614379883, 6.534694671630859], + [0.35261106491088867, -5.1264777183532715], + [-4.901753902435303, 0.934745192527771], + [2.9348037242889404, -4.746288299560547], + [2.0166175365448, -5.332615375518799], + [0.42770785093307495, 6.877772331237793], + [2.881692886352539, -4.880326271057129], + [6.642278671264648, -2.6748547554016113], + [0.7813444137573242, -5.940432548522949], + [5.770604610443115, -0.5808346271514893], + [2.451439619064331, 5.6886796951293945], + [-4.520561695098877, -1.1240497827529907], + [1.8926594257354736, 6.022984981536865], + [0.7076655030250549, -8.469074249267578], + [2.7695600986480713, -4.433187484741211], + [-0.07656494528055191, -4.387005805969238], + [-4.9144673347473145, -0.8827923536300659], + [-2.952176332473755, 3.1148276329040527], + [7.877374649047852, -3.034935235977173], + [-1.9430817365646362, 1.6754847764968872], + [8.056100845336914, -3.219050884246826], + [-1.8097002506256104, -0.594512403011322], + [-1.420212984085083, 1.7049849033355713], + [-1.2092894315719604, 11.520710945129395], + [-2.4986720085144043, -1.1818925142288208], + [-0.7153505086898804, 10.595823287963867], + [-1.4412072896957397, 1.6413949728012085], + [1.6586577892303467, -3.874187707901001], + [2.6469852924346924, -5.10326623916626], + [4.5665411949157715, 7.497414588928223], + [2.6412105560302734, 6.095094680786133], + [-5.392755031585693, -0.6038646697998047], + [0.4482263922691345, -7.801587104797363], + [2.8920271396636963, -4.645876884460449], + [-0.9267900586128235, -0.6193029880523682], + [-4.177454948425293, -2.978562831878662], + [8.515061378479004, -2.719064950942993], + [3.068542242050171, -4.892462253570557], + [2.7954766750335693, 5.617164611816406], + [0.5008419156074524, -7.658660411834717], + [8.661812782287598, -3.148223400115967], + [2.533064603805542, -4.4195051193237305], + [-3.938112497329712, -1.8982467651367188], + [-3.708658456802368, -1.7909685373306274], + [0.7915240526199341, -6.714993476867676], + [0.8935562372207642, -5.28617000579834], + [0.7912983298301697, -0.24193835258483887], + [-0.9952829480171204, 10.055944442749023], + [-6.05543851852417, -1.0383118391036987], + [-1.3668123483657837, 11.877881050109863], + [2.168245792388916, 5.153890609741211], + [-1.480875849723816, 12.47379207611084], + [2.634453535079956, -4.415709495544434], + [0.010696493089199066, -4.107988357543945], + [8.71956729888916, -3.035512685775757], + [7.711084842681885, -2.3366284370422363], + [7.240668773651123, -2.640716314315796], + [0.4591609835624695, -7.317998886108398], + [-4.273560047149658, -2.470365285873413], + [-4.618810176849365, 2.007012367248535], + [-4.0882182121276855, -2.789717435836792], + [-3.12838077545166, -0.7478957176208496], + [-0.6805598139762878, 10.127767562866211], + [2.627671480178833, -4.419053077697754], + [1.9397757053375244, 0.8971354365348816], + [7.423709869384766, -2.7449731826782227], + [0.45269501209259033, -5.648348331451416], + [0.5738779902458191, -8.043362617492676], + [3.0793776512145996, 6.218321800231934], + [-2.0676522254943848, 0.5800249576568604], + [-1.327026128768921, 12.211418151855469], + [-4.8370184898376465, 3.2441608905792236], + [0.2654045522212982, -4.984975814819336], + [2.388340950012207, -4.076374053955078], + [-0.18815529346466064, 0.9042344093322754], + [2.7689297199249268, -4.608822345733643], + [-3.481961250305176, -0.7776528596878052], + [-3.4022300243377686, -1.4366919994354248], + [-4.65964937210083, 6.057214736938477], + [-1.011491298675537, 1.2176835536956787], + [6.3262410163879395, -1.2733951807022095], + [2.3263962268829346, -4.575275897979736], + [-3.6344542503356934, -2.4424219131469727], + [-1.8020861148834229, 2.2409327030181885], + [8.820195198059082, -2.6623141765594482], + [5.484671115875244, 8.295462608337402], + [2.5850884914398193, -3.9509027004241943], + [6.56529426574707, -3.298222303390503], + [-2.240673780441284, -0.8916592597961426], + [-0.858589231967926, 10.966377258300781], + [1.6436433792114258, 1.3856755495071411], + [2.7922258377075195, -5.142981052398682], + [2.7505788803100586, -4.5607099533081055], + [6.490394115447998, -2.823302984237671], + [-3.855769157409668, -1.1419906616210938], + [-1.0241025686264038, 10.304155349731445], + [-3.4532630443573, -1.4471317529678345], + [0.4548301100730896, -7.0344696044921875], + [-4.491754531860352, -0.6845290064811707], + [3.957477331161499, 7.008939743041992], + [2.9035212993621826, -4.948877334594727], + [-1.8601388931274414, 0.20256119966506958], + [7.786722660064697, -2.71540904045105], + [-3.7174699306488037, -1.802612066268921], + [5.058560371398926, 8.062271118164062], + [5.5463056564331055, 8.446739196777344], + [0.64910489320755, -7.3117594718933105], + [8.192525863647461, -3.036358594894409], + [-0.7363459467887878, 10.420329093933105], + [5.105652332305908, -2.6430823802948], + [-3.1861932277679443, -0.8544485569000244], + [-1.2705368995666504, 1.3696446418762207], + [2.811908483505249, -4.493049621582031], + [-0.9032310843467712, 10.562665939331055], + [-2.2269885540008545, -2.061079502105713], + [-2.6097471714019775, -2.2208940982818604], + [-3.8624937534332275, 0.2056809663772583], + [0.8818304538726807, -6.363658905029297], + [-2.610380172729492, -0.5614196062088013], + [-1.7507582902908325, 1.7515435218811035], + [4.886345386505127, -1.9194176197052002], + [7.791111469268799, -3.2415032386779785], + [-4.412298679351807, 5.5837273597717285], + [1.9954538345336914, -4.441948890686035], + [1.9387071132659912, 3.696078062057495], + [-0.15891939401626587, 5.650960445404053], + [-5.85072660446167, 8.407780647277832], + [0.4193075895309448, -5.938386917114258], + [1.713751196861267, 5.736570835113525], + [1.562781810760498, -4.223857879638672], + [-2.917227029800415, 5.111082553863525], + [2.722644090652466, -3.966714859008789], + [0.5165811777114868, -0.18788284063339233], + [-0.9230399131774902, 9.074377059936523], + [-3.672759771347046, -0.9618663787841797], + [-1.1301743984222412, 10.122610092163086], + [2.727759838104248, -4.367234230041504], + [-4.718048095703125, 4.4980645179748535], + [2.845860719680786, 5.880050182342529], + [5.699246883392334, -3.979752540588379], + [-4.726533889770508, -3.8101329803466797], + [0.6273931860923767, -4.765488624572754], + [2.5715057849884033, 4.9730682373046875], + [6.005068778991699, -2.676823139190674], + [2.904381513595581, -5.387908935546875], + [-0.5682466626167297, -0.6647177338600159], + [-4.767030239105225, -1.6229273080825806], + [9.691192626953125, -2.8929660320281982], + [2.1037142276763916, -3.9325990676879883], + [-1.4419331550598145, 12.178606033325195], + [-5.126594066619873, 6.460742950439453], + [-3.8640618324279785, -0.5607410073280334], + [1.820829153060913, -3.516303300857544], + [-0.9628964066505432, 11.190988540649414], + [-1.8124154806137085, 1.3042116165161133], + [-4.733686923980713, -0.6627122163772583], + [-2.9673240184783936, -2.560821771621704], + [-4.717587947845459, 6.416802883148193], + [-3.6517724990844727, -1.0122642517089844], + [-2.7624330520629883, -1.3070385456085205], + [-5.719180583953857, 6.315925598144531], + [0.8307099342346191, -6.253598690032959], + [-2.5427114963531494, 2.7289891242980957], + [0.5317455530166626, 4.913057327270508], + [-3.892860174179077, -0.9589849710464478], + [-0.877474844455719, 10.349802017211914], + [0.27258777618408203, -4.784647464752197], + [0.41949263215065, -3.896942377090454], + [0.5710987448692322, -7.649953365325928], + [-1.3537548780441284, 11.668572425842285], + [0.5072364211082458, -5.235104560852051], + [1.0342214107513428, -5.800616264343262], + [1.7064839601516724, 4.320291996002197], + [5.032204627990723, -1.8923031091690063], + [-1.3683539628982544, 12.013352394104004], + [-0.28691011667251587, 8.294028282165527], + [-3.4610674381256104, -0.9107071161270142], + [2.7522990703582764, -4.4595770835876465], + [1.902502417564392, -4.354665756225586], + [0.9116548895835876, -7.202692985534668], + [2.3640506267547607, 5.750469207763672], + [1.21484375, 5.581537246704102], + [-0.7878935933113098, 9.813701629638672], + [2.367760419845581, 3.8331077098846436], + [-4.924444198608398, -0.9663078784942627], + [-1.2109757661819458, 11.191018104553223], + [0.4435805678367615, -5.981498718261719], + [8.39860725402832, -2.294710874557495], + [-3.9631965160369873, -2.8061959743499756], + [-1.958301067352295, 1.1376314163208008], + [8.489705085754395, -2.546142816543579], + [2.039405584335327, -4.60557746887207], + [-3.379701852798462, -1.2856310606002808], + [-1.9121290445327759, 1.556208610534668], + [5.583946704864502, -3.7230305671691895], + [5.82511043548584, 8.637944221496582], + [-0.9228800535202026, 8.230900764465332], + [0.17029988765716553, -6.248454570770264], + [0.8395975232124329, -6.111167907714844], + [8.757561683654785, -2.6334588527679443], + [-3.1302602291107178, -2.1092031002044678], + [-0.28670427203178406, -2.177110433578491], + [-5.757294654846191, 3.5358450412750244], + [0.5951626896858215, -7.889005661010742], + [6.916296005249023, -2.2681422233581543], + [4.4359941482543945, 7.2801384925842285], + [1.288811206817627, 4.767312049865723], + [-4.572290897369385, -3.146101951599121], + [-3.3656198978424072, 5.567370414733887], + [-3.6376888751983643, -1.9872068166732788], + [8.947786331176758, -3.0140435695648193], + [-1.2306212186813354, -2.106532096862793], + [-5.4761834144592285, 6.599736213684082], + [5.829637050628662, -1.9523746967315674], + [9.698216438293457, -2.9213902950286865], + [-4.0678911209106445, -5.419744491577148], + [-3.8497655391693115, 5.392537593841553], + [3.0299086570739746, 5.980589866638184], + [-2.9739162921905518, -1.1393152475357056], + [2.514302968978882, 6.246681213378906], + [0.6430381536483765, -7.540656089782715], + [8.719279289245605, -2.6091439723968506], + [-4.261977672576904, -0.9129602909088135], + [4.26769495010376, -1.5518018007278442], + [-3.3736298084259033, 3.503788948059082], + [2.1017441749572754, 5.342739582061768], + [8.144183158874512, -3.604322671890259], + [2.5520637035369873, -4.278548240661621], + [4.912365436553955, -1.9254015684127808], + [-4.025460720062256, -0.37138456106185913], + [2.970350503921509, -4.981514930725098], + [2.9063780307769775, -4.76338005065918], + [-1.8499796390533447, -2.2214653491973877], + [-2.839617967605591, -0.876081109046936], + [-3.1098005771636963, -1.4787075519561768], + [-3.175806999206543, -1.5969314575195312], + [-2.1127495765686035, 2.081265926361084], + [-3.4673664569854736, -1.719148874282837], + [1.4471395015716553, 4.838775634765625], + [0.8513725399971008, -4.268083572387695], + [1.5184108018875122, 6.237942695617676], + [2.2008471488952637, 0.7213040590286255], + [-0.18130075931549072, 8.695652961730957], + [-0.001846499741077423, -0.506384551525116], + [-3.4700334072113037, -1.2985910177230835], + [-1.6607550382614136, 1.2758896350860596], + [0.4228311777114868, -5.15343713760376], + [2.6050376892089844, 6.545556545257568], + [2.8260533809661865, -4.675210475921631], + [2.8208882808685303, -4.768285274505615], + [2.0517499446868896, -6.191985607147217], + [2.327308416366577, 0.5285179615020752], + [7.174136638641357, -4.404938220977783], + [-3.688462018966675, -1.2967389822006226], + [-3.8098556995391846, -2.2127068042755127], + [2.851844549179077, -4.482802391052246], + [2.777448892593384, -4.301095008850098], + [-0.4102436900138855, 8.676186561584473], + [-1.198672890663147, 10.86285400390625], + [-1.6975265741348267, 1.260212779045105], + [-1.7564865350723267, -0.8398923277854919], + [1.9098942279815674, -3.926295757293701], + [-0.21078908443450928, -2.986250638961792], + [2.7347350120544434, -6.010364055633545], + [2.695563554763794, -4.084076404571533], + [7.367602348327637, -2.2204439640045166], + [0.6785534024238586, -8.7181396484375], + [1.8201203346252441, 5.062265396118164], + [2.3032772541046143, -4.321170806884766], + [4.144888401031494, 7.283918380737305], + [-4.90220308303833, 5.6540327072143555], + [1.199633240699768, 5.0030107498168945], + [1.2388046979904175, 4.895807266235352], + [0.4226805567741394, -5.828581809997559], + [0.41591036319732666, -7.864635467529297], + [-1.755054235458374, 1.2680104970932007], + [-3.800196409225464, 5.001908779144287], + [-3.7532765865325928, -2.5728719234466553], + [1.7862350940704346, 5.7037458419799805], + [-4.851802825927734, -0.7193207144737244], + [-1.367628574371338, 12.012018203735352], + [-1.1956895589828491, 10.700323104858398], + [-3.834064245223999, -1.4408682584762573], + [5.249040603637695, 8.261798858642578], + [2.5894343852996826, -4.232943058013916], + [-2.3100337982177734, 1.2785253524780273], + [-3.3696095943450928, 5.605619430541992], + [0.5068479180335999, -7.235875606536865], + [2.06288743019104, 2.952223539352417], + [1.5731576681137085, 1.58336341381073], + [-0.4893072247505188, 9.154173851013184], + [-3.30336856842041, -0.949582576751709], + [0.5157263875007629, -7.776394367218018], + [-3.8561007976531982, 5.727147579193115], + [-3.2180466651916504, -0.6825426816940308], + [-2.5023152828216553, -0.3982153534889221], + [2.4210245609283447, -4.779412746429443], + [0.006874077022075653, -4.045459270477295], + [-1.5148295164108276, 12.99903678894043], + [1.6489195823669434, 0.008416038006544113], + [4.097940921783447, -3.769040584564209], + [0.746695339679718, -5.532916069030762], + [2.409970760345459, -4.878961563110352], + [-4.605717182159424, -0.6119449138641357], + [0.011704497039318085, -3.786254644393921], + [0.027538202702999115, -4.513442039489746], + [-3.9137983322143555, 6.2075700759887695], + [-1.4732111692428589, 12.31619644165039], + [3.393319606781006, -3.321593761444092], + [9.628691673278809, -2.85062575340271], + [-0.6789259910583496, 9.989145278930664], + [0.5338576436042786, -0.838555634021759], + [7.983561992645264, -2.516585111618042], + [5.484248638153076, -1.9579516649246216], + [1.7705285549163818, 1.5176541805267334], + [6.0769572257995605, -4.483127117156982], + [2.9168946743011475, 6.16527795791626], + [-4.840869903564453, -3.4758129119873047], + [2.434903860092163, 6.046740531921387], + [-3.1028249263763428, -0.9286789298057556], + [1.9458858966827393, -4.309101581573486], + [-2.6670243740081787, -0.814461350440979], + [2.2653446197509766, 6.07136344909668], + [-2.9894378185272217, -0.6376193761825562], + [-3.1997110843658447, -0.9363570213317871], + [-3.6949961185455322, -1.6913083791732788], + [1.0945255756378174, -5.495297431945801], + [8.027909278869629, -2.8218657970428467], + [0.5341631770133972, 6.227390289306641], + [0.7533297538757324, -8.045012474060059], + [0.4980257749557495, -7.428806304931641], + [-3.905219793319702, -2.6659367084503174], + [0.0409526452422142, -0.7993359565734863], + [8.960137367248535, -2.7717092037200928], + [-1.084655523300171, -2.154742956161499], + [-5.41750431060791, 7.617745876312256], + [-0.05524606257677078, -4.9147443771362305], + [-1.250446081161499, 10.931351661682129], + [0.8873574137687683, 4.176163196563721], + [2.7753241062164307, 6.013954162597656], + [2.1201367378234863, -4.973856449127197], + [-0.9295998215675354, 1.5501846075057983], + [3.202030658721924, -4.265317916870117], + [-2.6636359691619873, 6.213192462921143], + [5.852352619171143, -1.698330044746399], + [2.685499668121338, -4.4718427658081055], + [9.16837215423584, -2.8151936531066895], + [6.272829532623291, -4.710870742797852], + [5.185855388641357, -5.597104549407959], + [2.691737651824951, -4.342045783996582], + [6.425074100494385, -1.7735223770141602], + [7.944738864898682, -2.582387924194336], + [-4.460155487060547, -0.12121868133544922], + [-1.8177340030670166, 1.4923802614212036], + [-3.788055658340454, -1.4616619348526], + [0.9613180756568909, -7.567526817321777], + [0.7019131779670715, -6.38006591796875], + [-3.7158305644989014, -4.156639575958252], + [1.8652828931808472, 1.551306128501892], + [1.6682370901107788, 2.0089592933654785], + [0.1330190896987915, -4.9416913986206055], + [3.044210910797119, -4.876240253448486], + [1.7793831825256348, 3.333845615386963], + [-4.395604610443115, -1.2913872003555298], + [-1.447203278541565, -1.4099904298782349], + [0.6533680558204651, -5.737774848937988], + [-2.0384647846221924, -3.121574640274048], + [2.249586820602417, -4.011260509490967], + [0.6345783472061157, -6.335453033447266], + [-0.3835846781730652, 9.00632095336914], + [-2.0397403240203857, 2.072808265686035], + [-0.6815298199653625, -0.9355606436729431], + [3.024742841720581, -3.761260509490967], + [2.786104679107666, -4.309294700622559], + [-1.8157343864440918, 1.1887264251708984], + [2.2146730422973633, -3.966034173965454], + [-4.034745693206787, -2.4984750747680664], + [-0.33119815587997437, 9.269979476928711], + [2.2545106410980225, -4.592342853546143], + [0.7514365315437317, -5.205109596252441], + [-0.8044663667678833, 10.573003768920898], + [-5.133683204650879, -0.8926296234130859], + [0.6020813584327698, -7.674567699432373], + [-4.005779266357422, -3.311460256576538], + [-1.874323844909668, 1.6513746976852417], + [8.618631362915039, -2.9028427600860596], + [-2.420929431915283, -0.9041354656219482], + [-2.9306342601776123, -0.03412378206849098], + [-4.203738689422607, -2.1141974925994873], + [6.5466227531433105, -2.215289354324341], + [1.6386710405349731, -4.3313093185424805], + [0.32144325971603394, -6.084028244018555], + [-1.777347207069397, 0.7868728637695312], + [8.263066291809082, -2.418769598007202], + [2.2319531440734863, -4.459468841552734], + [2.029357433319092, 0.7823914289474487], + [-0.9064196944236755, 0.8460239171981812], + [2.036360025405884, 5.475135803222656], + [8.23937702178955, -2.849867582321167], + [-4.204325199127197, 0.3632131814956665], + [-3.404130458831787, -1.2559174299240112], + [6.655893325805664, -2.3196425437927246], + [1.3892712593078613, 4.900673866271973], + [-5.177430629730225, 6.88308572769165], + [-3.5460855960845947, -1.0351454019546509], + [0.10826646536588669, 1.8787487745285034], + [-3.9343230724334717, -2.706585168838501], + [-1.1720470190048218, 10.975486755371094], + [-0.18297043442726135, -4.3000335693359375], + [-0.006279297173023224, 8.713043212890625], + [2.5911731719970703, -3.9641053676605225], + [0.6829730868339539, -8.640726089477539], + [-5.031284809112549, 7.026126861572266], + [6.212790489196777, -4.647883415222168], + [-2.6922900676727295, -1.6067047119140625], + [-3.9030544757843018, -2.408590793609619], + [-1.3205162286758423, 11.251449584960938], + [-0.9358171820640564, 10.805355072021484], + [1.0543385744094849, -5.520271301269531], + [8.829567909240723, -2.8307745456695557], + [0.6171013712882996, -8.494309425354004], + [-3.6389341354370117, -1.17739737033844], + [-0.6245923638343811, 9.361881256103516], + [4.914711952209473, -3.359818696975708], + [3.4650449752807617, -0.3060361444950104], + [-0.22567704319953918, -1.7376197576522827], + [-3.4315359592437744, -1.8672128915786743], + [-3.9035074710845947, -0.8971490263938904], + [9.108111381530762, -2.7415506839752197], + [6.755650043487549, -2.3163983821868896], + [-1.0467005968093872, 2.028327465057373], + [0.5059381127357483, -6.289644241333008], + [-3.5346291065216064, -0.6831693053245544], + [0.6504037976264954, -8.340646743774414], + [2.7425661087036133, -5.486389636993408], + [-0.1842440366744995, 9.416534423828125], + [2.633570432662964, -3.5907018184661865], + [-0.6997434496879578, 10.539499282836914], + [-3.9465324878692627, -1.8021459579467773], + [-3.0788938999176025, -0.021902982145547867], + [1.5665661096572876, -5.2259721755981445], + [2.4979443550109863, -4.627143859863281], + [-0.013707704842090607, -3.1610846519470215], + [-5.238588809967041, 7.241032600402832], + [-2.008793592453003, 1.8594361543655396], + [0.3948791027069092, -5.609094619750977], + [0.8519784212112427, -0.3465270400047302], + [-3.918353319168091, -1.5787885189056396], + [1.594543218612671, 5.704118728637695], + [-4.514318466186523, -0.5744534134864807], + [4.266019821166992, -3.5303144454956055], + [-2.449728012084961, -1.9241644144058228], + [0.4438211917877197, -7.007319450378418], + [-3.377190351486206, -1.4382084608078003], + [-3.9272477626800537, 5.65080451965332], + [-3.396375894546509, -1.1525501012802124], + [7.328702449798584, -3.1725552082061768], + [0.37178611755371094, -6.449429988861084], + [2.825671434402466, 6.699648857116699], + [-1.2417908906936646, 11.265778541564941], + [2.43276047706604, -6.681899070739746], + [7.532887935638428, -2.5621109008789062], + [-0.2812206745147705, 9.198263168334961], + [1.2804980278015137, -6.249812602996826], + [-1.666213870048523, 1.6338330507278442], + [6.378514766693115, -3.193816661834717], + [-0.98709636926651, 11.227034568786621], + [1.8175439834594727, 0.33744511008262634], + [2.3289103507995605, 5.515674591064453], + [-0.7710994482040405, 11.02822208404541], + [-4.2352824211120605, -1.5368493795394897], + [1.9966330528259277, 0.6993829607963562], + [2.5202667713165283, 6.316571235656738], + [0.5507831573486328, -7.901665210723877], + [0.32801467180252075, -7.697414398193359], + [2.2946507930755615, 3.9264309406280518], + [4.293414115905762, 7.356154441833496], + [3.260265350341797, 6.688917636871338], + [-4.278082370758057, -1.8337904214859009], + [-0.7639719247817993, -2.073622941970825], + [2.5360889434814453, 4.840193271636963], + [-0.3368387818336487, 9.480002403259277], + [1.175879955291748, -4.84370231628418], + [1.4611146450042725, 1.744688868522644], + [-0.6979740262031555, 9.683006286621094], + [2.2979519367218018, 3.919273853302002], + [1.5486572980880737, -3.8569252490997314], + [2.992088794708252, 6.1188201904296875], + [1.4676728248596191, -6.041752815246582], + [0.3138211667537689, -5.241984844207764], + [-3.1777775287628174, -1.359324336051941], + [0.5860855579376221, -6.496126174926758], + [-1.1593538522720337, 0.7745709419250488], + [-3.866469621658325, 3.9530417919158936], + [-3.9294612407684326, -2.009190559387207], + [-3.942488431930542, -2.654156446456909], + [-5.962485313415527, -0.9927901029586792], + [-3.7943849563598633, -2.2721877098083496], + [0.8780993819236755, 0.6069836616516113], + [-1.8155555725097656, 5.394281387329102], + [-4.401332855224609, 4.592875003814697], + [-1.0673813819885254, 6.940035820007324], + [-4.232466220855713, 4.391876220703125], + [-4.086259365081787, -2.0569093227386475], + [0.9426555037498474, -4.323480129241943], + [2.4618849754333496, 5.527498245239258], + [-0.6419653296470642, 10.142942428588867], + [7.536686897277832, -2.804006814956665], + [0.9947676062583923, 1.4861769676208496], + [4.236308574676514, 7.225341320037842], + [4.334517002105713, 7.377557277679443], + [6.717042446136475, -1.5756996870040894], + [-5.75060510635376, -0.8651598691940308], + [3.0769057273864746, -3.9318039417266846], + [0.4527691602706909, -7.048320770263672], + [-1.4195835590362549, 0.9328718781471252], + [0.9767672419548035, 0.12187826633453369], + [1.2286741733551025, 4.254302978515625], + [0.07830753177404404, -5.1699700355529785], + [-3.5501997470855713, -2.205256462097168], + [2.1231911182403564, -5.507954120635986], + [-3.969243288040161, -2.5593857765197754], + [-4.31756067276001, 4.6975860595703125], + [3.915013551712036, 7.354211807250977], + [1.5239064693450928, -4.668168544769287], + [6.786088466644287, -3.857372999191284], + [7.676984786987305, -2.220059633255005], + [-0.6753286719322205, 10.131909370422363], + [0.6126651167869568, -6.158413410186768], + [0.40647244453430176, -0.9585694074630737], + [-0.3942021131515503, -0.742584764957428], + [-4.364400386810303, 3.586125612258911], + [-4.190059185028076, -0.7347911596298218], + [0.18058151006698608, -5.308657169342041], + [1.9044958353042603, -4.49805212020874], + [0.6286275386810303, -7.474759578704834], + [7.803468227386475, -2.384373903274536], + [-3.8705461025238037, -2.508617877960205], + [2.7797884941101074, -4.585079193115234], + [-0.1441451907157898, 8.195472717285156], + [8.595308303833008, -3.4873692989349365], + [2.0517966747283936, -5.627769470214844], + [5.638490200042725, -1.258111596107483], + [-3.199432849884033, -0.7966423034667969], + [0.691397488117218, -6.875768661499023], + [-0.6638388633728027, 9.809635162353516], + [-3.17975115776062, -0.9050418734550476], + [-0.8959444165229797, 1.2441067695617676], + [7.479311943054199, -3.4980661869049072], + [-3.6441128253936768, 5.4659929275512695], + [0.8821573257446289, 0.07586102187633514], + [-2.4941670894622803, -0.8116620779037476], + [6.315699100494385, -5.071464538574219], + [-1.3972795009613037, 1.2129018306732178], + [0.5435811281204224, -4.865501403808594], + [3.810628652572632, 6.880289077758789], + [4.075618267059326, 7.057780742645264], + [6.3867716789245605, -1.5918611288070679], + [0.6185517907142639, -7.9001030921936035], + [-0.20116889476776123, 8.692943572998047], + [-1.8540173768997192, -2.445218324661255], + [1.057708978652954, -5.718889236450195], + [-1.086302399635315, 1.6843832731246948], + [-0.23808148503303528, -1.1303813457489014], + [-0.9396130442619324, -0.7841681241989136], + [-4.083754062652588, -3.3701488971710205], + [-1.4712826013565063, 12.06033706665039], + [0.034858666360378265, -3.245711088180542], + [2.518989324569702, 4.964913368225098], + [-0.986807107925415, -0.43807727098464966], + [5.572035312652588, -1.072911024093628], + [2.8887746334075928, 7.3626203536987305], + [-0.18261343240737915, -0.7364121675491333], + [0.42688965797424316, -5.325536727905273], + [3.920611619949341, -5.268661022186279], + [-4.098248481750488, -0.7927770614624023], + [7.591632843017578, -2.5284786224365234], + [-0.02011144906282425, 7.90914249420166], + [-1.0354444980621338, 1.4253865480422974], + [2.40852952003479, -4.667170524597168], + [-0.8263211846351624, 4.313397407531738], + [-1.7526710033416748, 5.665538787841797], + [0.7084569334983826, -7.6885762214660645], + [2.694040536880493, -5.711277008056641], + [2.9575517177581787, -4.6444878578186035], + [0.7133862972259521, -0.18549785017967224], + [-1.686315655708313, 1.1538039445877075], + [6.226841926574707, -4.847409248352051], + [-3.8989956378936768, -1.626092791557312], + [1.9646666049957275, 6.441501617431641], + [-0.9467629790306091, 10.48077392578125], + [9.133622169494629, -2.8245952129364014], + [0.4625347852706909, -7.041182518005371], + [-1.8440157175064087, -0.4510142505168915], + [-3.540523052215576, -0.9894266128540039], + [-0.8253034353256226, 1.000441312789917], + [-5.815453052520752, 3.6057372093200684], + [-3.0546061992645264, -2.4731085300445557], + [0.9203477501869202, -6.1168212890625], + [0.3009353280067444, -6.818610191345215], + [1.9611730575561523, 0.30106836557388306], + [8.716235160827637, -2.6503725051879883], + [-3.6637160778045654, -0.9596242904663086], + [-2.8156321048736572, 2.0356554985046387], + [1.93214750289917, -6.703624725341797], + [2.680255651473999, 5.677613258361816], + [0.1933545470237732, -3.451500654220581], + [-3.883777618408203, -1.6438547372817993], + [-4.478883266448975, -1.1860488653182983], + [-2.835597038269043, -0.6762459874153137], + [-2.4996349811553955, -0.7026892304420471], + [-1.4981671571731567, 1.9363189935684204], + [-1.2177907228469849, -0.6744029521942139], + [-3.2266175746917725, -2.4510347843170166], + [-3.997230291366577, -1.0512491464614868], + [4.894876003265381, -0.5494790077209473], + [-0.6215478181838989, 10.006731986999512], + [-3.253791570663452, 5.442977428436279], + [8.492171287536621, -2.944310426712036], + [7.070678234100342, -3.0042951107025146], + [-3.396397352218628, -3.914583206176758], + [-0.07075602561235428, 0.5440892577171326], + [-3.33227801322937, -1.883867859840393], + [0.5166313052177429, -7.494409561157227], + [0.5351612567901611, -0.5492915511131287], + [0.22605544328689575, -6.443242073059082], + [0.9039599299430847, -4.78794002532959], + [7.4603495597839355, -2.741194009780884], + [-2.38081431388855, 1.695852279663086], + [-4.1781229972839355, -1.052492380142212], + [7.14412260055542, -2.8873913288116455], + [-0.042971231043338776, -1.90483558177948], + [-4.382009983062744, 5.552024841308594], + [-1.9986038208007812, 0.6151876449584961], + [1.0028367042541504, 5.044368743896484], + [5.065189361572266, -2.8530962467193604], + [-3.810692071914673, -3.377250909805298], + [2.125333547592163, 6.011857032775879], + [-0.6505019068717957, 10.186981201171875], + [-3.442678689956665, -1.6682522296905518], + [-3.3004982471466064, -1.034074068069458], + [-5.328441619873047, 6.6053595542907715], + [-5.374470233917236, 7.078193187713623], + [-6.096341133117676, -0.8050714731216431], + [-1.7766090631484985, 0.5678097009658813], + [2.4667813777923584, -4.192127704620361], + [-4.576408863067627, 1.2860313653945923], + [-1.671812891960144, 0.5093697309494019], + [2.819941759109497, -4.798648834228516], + [3.390886068344116, -6.182761192321777], + [-3.5336360931396484, -2.279444932937622], + [-1.937741756439209, 2.189133882522583], + [2.1124331951141357, 5.129821300506592], + [0.962208092212677, -5.955406188964844], + [-3.3912808895111084, -2.6882331371307373], + [-4.903379440307617, 6.251953125], + [-0.8807348012924194, 9.859902381896973], + [5.5752177238464355, 8.595673561096191], + [2.757366418838501, -4.397825717926025], + [-3.2979934215545654, -1.0519394874572754], + [-1.8156927824020386, -2.5184853076934814], + [0.9615026116371155, -6.526155471801758], + [8.423409461975098, -2.5963237285614014], + [7.003180503845215, -2.8901009559631348], + [-4.823052406311035, 4.350316047668457], + [0.4268731474876404, -6.281222343444824], + [-0.994192361831665, 10.675922393798828], + [0.29213905334472656, -5.585535526275635], + [2.600001096725464, -4.769577503204346], + [-1.2403481006622314, 10.512266159057617], + [-1.079447865486145, 10.983665466308594], + [2.3749239444732666, -4.721994400024414], + [0.5639538168907166, -8.315145492553711], + [-0.20889276266098022, -1.7768714427947998], + [2.094426393508911, 0.23022615909576416], + [0.38420575857162476, -6.807724952697754], + [0.3376902639865875, 1.5424801111221313], + [3.5599939823150635, 6.506139755249023], + [-4.45925235748291, -3.075904369354248], + [-4.736783981323242, 5.145236492156982], + [5.825224876403809, -1.1568596363067627], + [-5.567298889160156, 6.798633575439453], + [-1.7712935209274292, 0.999433159828186], + [7.558669090270996, -4.47797966003418], + [5.478244304656982, -5.764469146728516], + [-4.669018268585205, 6.848208904266357], + [-2.9409492015838623, -3.4556124210357666], + [5.135600566864014, 8.120218276977539], + [5.834496974945068, 8.644510269165039], + [-1.1722040176391602, 10.658489227294922], + [-3.854614734649658, -2.49042010307312], + [-3.9109692573547363, -0.9072699546813965], + [2.8898520469665527, -5.203409194946289], + [8.260056495666504, -3.0745134353637695], + [-3.2828762531280518, -0.1299070119857788], + [-0.4920465350151062, -0.6363155841827393], + [-3.3105456829071045, -3.1834170818328857], + [-1.746796727180481, 2.677550792694092], + [0.8053273558616638, -8.810626029968262], + [-1.8992338180541992, 1.5088459253311157], + [0.3794075846672058, -6.373902797698975], + [-3.3033835887908936, -1.8916529417037964], + [1.2060410976409912, -6.113378524780273], + [0.9134560823440552, -6.355630874633789], + [-4.840569972991943, 6.139205455780029], + [5.313686847686768, 8.257978439331055], + [8.293172836303711, -3.434683084487915], + [0.10572095960378647, -3.8750197887420654], + [6.048554420471191, -1.2092682123184204], + [-4.573406219482422, -3.7849066257476807], + [4.461756229400635, 7.402275085449219], + [2.2452523708343506, 5.348885536193848], + [6.441403865814209, 9.30276870727539], + [1.4185829162597656, 1.5914369821548462], + [4.374059200286865, -3.4554011821746826], + [0.8536955714225769, -8.339484214782715], + [-0.926876962184906, 11.123266220092773], + [-4.277557373046875, 4.64625883102417], + [2.880256414413452, 4.792269706726074], + [-1.9836881160736084, 2.3800947666168213], + [-5.003821849822998, -4.866682529449463], + [7.000372409820557, -3.292553663253784], + [-1.0488338470458984, 11.206964492797852], + [1.2189946174621582, 3.3142101764678955], + [1.8590822219848633, -0.0756712406873703], + [-3.443413019180298, -1.7963162660598755], + [-3.7133829593658447, -1.4272795915603638], + [-3.5795466899871826, -1.0745850801467896], + [2.213040828704834, -4.407951354980469], + [-3.9435040950775146, -2.6104936599731445], + [8.95150375366211, -2.692255735397339], + [-4.647628307342529, 6.1287994384765625], + [2.147597312927246, 5.185226917266846], + [-6.0525431632995605, 5.443768501281738], + [-3.860687255859375, -0.9396827816963196], + [1.9617033004760742, 0.41536176204681396], + [0.5415985584259033, -7.632117748260498], + [-2.725970506668091, 2.688763380050659], + [-3.7213056087493896, -0.5893016457557678], + [-0.6122873425483704, -0.9794585108757019], + [1.9541294574737549, 1.0056828260421753], + [-4.445340156555176, -0.7657517194747925], + [6.390803813934326, -2.060525417327881], + [-2.4659736156463623, 0.2525405287742615], + [6.302769184112549, -2.6817004680633545], + [1.1382601261138916, 0.21628224849700928], + [-2.4785869121551514, -0.8065253496170044], + [-1.6019773483276367, 2.07291316986084], + [-1.396561861038208, 10.26124382019043], + [-3.679600954055786, -0.7779820561408997], + [1.332683801651001, 3.5954668521881104], + [1.1417615413665771, 6.172466278076172], + [2.9391701221466064, -4.738245487213135], + [2.4425203800201416, -4.5764875411987305], + [-1.7493447065353394, 1.3734177350997925], + [-1.2668139934539795, -3.4601082801818848], + [-3.9471595287323, 6.871923446655273], + [0.5749598741531372, -7.990002632141113], + [2.3162171840667725, -4.4756598472595215], + [-3.198075771331787, 4.9188947677612305], + [0.5544012784957886, -7.837353706359863], + [7.640285015106201, -2.971250534057617], + [-3.656939744949341, 1.5911754369735718], + [-4.8573317527771, 6.52373743057251], + [3.026853561401367, -4.805212020874023], + [7.6767096519470215, -2.463888645172119], + [2.023866653442383, 5.9849162101745605], + [5.784061908721924, -1.5152571201324463], + [1.6460108757019043, 0.12732619047164917], + [2.4462974071502686, 6.194772243499756], + [-0.2553212642669678, 8.916008949279785], + [-5.018254280090332, 6.344682216644287], + [-1.39683198928833, 1.8708666563034058], + [-3.29177188873291, -1.0565203428268433], + [-1.7118089199066162, -0.816870927810669], + [-3.1365416049957275, -0.951987087726593], + [2.5518360137939453, -5.0166778564453125], + [-4.622647762298584, -1.694839358329773], + [0.627052366733551, -8.227151870727539], + [1.0378681421279907, -0.3656651973724365], + [-1.3392741680145264, 11.339801788330078], + [3.6624181270599365, 6.747429847717285], + [-3.890275239944458, 4.72621488571167], + [0.2546955347061157, -5.855564117431641], + [-3.416053056716919, -0.8452578186988831], + [9.321993827819824, -2.8960373401641846], + [4.139245986938477, 7.189909934997559], + [6.131255626678467, -5.186984062194824], + [2.8148066997528076, -4.74411678314209], + [2.8273255825042725, -4.603470325469971], + [-4.466835975646973, -3.7843658924102783], + [2.0764517784118652, -4.419913291931152], + [2.114842653274536, 6.030350685119629], + [0.15456992387771606, 5.032959461212158], + [1.4498357772827148, 0.2205539345741272], + [-0.979268491268158, 10.772459030151367], + [-2.0267858505249023, 2.278651475906372], + [-1.8612173795700073, -0.20982253551483154], + [-1.3158061504364014, 11.783449172973633], + [5.418095111846924, -1.8025543689727783], + [-2.4195210933685303, 1.7030426263809204], + [7.401430606842041, -2.048590898513794], + [5.649033069610596, -1.1843856573104858], + [-4.696008205413818, 7.145074844360352], + [-5.675217151641846, 7.038415908813477], + [-0.40935343503952026, 9.551210403442383], + [0.6861475706100464, -5.759174346923828], + [-1.9489269256591797, -1.4828804731369019], + [1.8293007612228394, 5.422966957092285], + [-3.9696919918060303, -1.4271260499954224], + [-2.0403695106506348, 1.0927671194076538], + [3.2994208335876465, 6.470815658569336], + [2.5019662380218506, -3.373718500137329], + [-3.480151653289795, -0.42332273721694946], + [6.2458271980285645, -4.593268394470215], + [-3.68117618560791, -1.5966482162475586], + [-3.4713399410247803, -0.7311439514160156], + [-3.6279337406158447, -0.588836669921875], + [0.3050212264060974, -5.2081074714660645], + [-1.8382835388183594, 2.0580554008483887], + [8.925553321838379, -3.0451862812042236], + [-0.26193171739578247, 8.885127067565918], + [-4.788015365600586, -0.8590348958969116], + [-4.003924369812012, 5.636971473693848], + [-3.1292362213134766, 5.071051120758057], + [-3.288208484649658, -3.749084949493408], + [-6.053729057312012, -0.7639679908752441], + [6.990664482116699, -2.6805312633514404], + [-4.02028226852417, -2.1912519931793213], + [4.1895928382873535, 7.07993745803833], + [6.69314432144165, -1.4450042247772217], + [0.8775513768196106, -4.754432678222656], + [-1.3543041944503784, 11.847982406616211], + [-1.1033554077148438, 9.056530952453613], + [-2.7153098583221436, 6.308494567871094], + [-0.7897384762763977, 9.395113945007324], + [7.331775188446045, -2.3108632564544678], + [-2.3598134517669678, 3.3790743350982666], + [-2.028977632522583, 2.271082878112793], + [3.440823793411255, 6.557772636413574], + [-4.245682239532471, -1.2992215156555176], + [0.5226240158081055, -6.547040939331055], + [7.570322513580322, -2.2594974040985107], + [0.6035124063491821, -7.802214622497559], + [-1.3022881746292114, 11.439220428466797], + [-4.536709308624268, -1.1842020750045776], + [4.972428321838379, 7.941822052001953], + [-4.074701309204102, -1.2297325134277344], + [-3.3070499897003174, -0.4593961834907532], + [-4.825203895568848, -1.0743657350540161], + [0.27175217866897583, -5.961852073669434], + [0.521618127822876, -6.7020745277404785], + [-2.9064552783966064, 4.864533424377441], + [1.2075457572937012, 5.297126770019531], + [0.5722808241844177, -5.873149394989014], + [-3.6190812587738037, -2.0109777450561523], + [-0.2689594626426697, 8.860005378723145], + [5.779506683349609, 8.793174743652344], + [1.3943668603897095, -4.305713653564453], + [0.4247581362724304, -6.415192604064941], + [6.957446098327637, -2.4592273235321045], + [1.1041688919067383, 5.168186187744141], + [7.936659336090088, -2.0420258045196533], + [-0.8135368227958679, -0.036461103707551956], + [1.879561185836792, 4.262894630432129], + [0.5707002878189087, -5.654389381408691], + [-4.744542121887207, -1.1880080699920654], + [0.47024816274642944, -0.7257517576217651], + [-0.05647159367799759, -4.67026424407959], + [-1.9112944602966309, 1.9749788045883179], + [2.9604623317718506, -4.641720771789551], + [-5.118506908416748, -0.9456607699394226], + [2.7730820178985596, -4.606797218322754], + [0.7772926688194275, -4.748560428619385], + [-2.2673847675323486, 2.124819040298462], + [-2.412522792816162, -1.9871816635131836], + [-2.0096678733825684, 2.302436113357544], + [0.1485961675643921, -6.003023147583008], + [-5.527937412261963, 4.234131813049316], + [1.4042350053787231, -3.947092294692993], + [-1.9627577066421509, -0.8229360580444336], + [-5.126954555511475, 5.024103164672852], + [0.005927912890911102, -4.893685340881348], + [7.576943874359131, -2.2158005237579346], + [1.7422446012496948, -6.456935405731201], + [2.8293354511260986, -4.44541597366333], + [0.9304309487342834, 1.3204084634780884], + [2.603529691696167, -5.6557159423828125], + [2.8753550052642822, -4.473760604858398], + [-1.8396306037902832, 0.40069156885147095], + [-4.526857852935791, 6.418630599975586], + [-1.48520028591156, -1.1919149160385132], + [-4.667431354522705, -0.6601729393005371], + [2.417649030685425, -3.85243821144104], + [-0.16497695446014404, 3.1078577041625977], + [6.816757678985596, -3.712584972381592], + [-4.780949592590332, 5.794400215148926], + [2.4157779216766357, -5.101058483123779], + [2.74660587310791, -4.382560729980469], + [-0.891260027885437, 11.588579177856445], + [1.4776790142059326, -5.178204536437988], + [0.33415281772613525, -6.034427642822266], + [-1.2265275716781616, 10.915435791015625], + [0.2781517207622528, -4.8229193687438965], + [1.1845041513442993, 4.9619646072387695], + [-1.429436445236206, -3.1796185970306396], + [-4.8855719566345215, 4.439979553222656], + [0.8799993395805359, -5.38821268081665], + [-1.7343080043792725, 1.825425386428833], + [5.541982173919678, -1.1169339418411255], + [-0.6442364454269409, 9.747161865234375], + [-0.11449248343706131, 4.602817535400391], + [1.1156436204910278, -5.786777496337891], + [-4.979276657104492, 6.671217918395996], + [-0.9840078949928284, 10.156944274902344], + [-3.8675050735473633, -2.0284719467163086], + [-1.6377167701721191, -0.6111904382705688], + [-2.4275896549224854, 2.1997029781341553], + [0.956045925617218, -7.684986114501953], + [-1.7112500667572021, 1.8994961977005005], + [1.4265153408050537, -6.094274520874023], + [-1.8567907810211182, 1.7202125787734985], + [0.8429090976715088, 4.483573913574219], + [5.675114154815674, 8.569409370422363], + [1.672980785369873, -0.04118708148598671], + [-5.577027797698975, -2.049934148788452], + [7.943384647369385, -2.360008955001831], + [0.4705394506454468, -7.366979122161865], + [6.064814567565918, -1.3541375398635864], + [-1.3647857904434204, 11.999140739440918], + [1.5208508968353271, 1.3697264194488525], + [-0.45734554529190063, -1.192893385887146], + [4.345228672027588, 7.535355567932129], + [2.882958173751831, -4.981135368347168], + [2.058532238006592, 0.6995899081230164], + [-1.0418832302093506, 10.87038803100586], + [-4.769192218780518, -1.096753716468811], + [1.884072184562683, 3.7010695934295654], + [-0.6612845659255981, 8.382732391357422], + [0.5531304478645325, -6.989596366882324], + [-1.5514858961105347, 12.606735229492188], + [1.321967601776123, 0.38052260875701904], + [-1.6204736232757568, 1.0810946226119995], + [6.389590263366699, -4.762247085571289], + [-4.131316661834717, -2.705820322036743], + [-5.563622951507568, 7.114740371704102], + [2.2379701137542725, -5.539303302764893], + [5.4600348472595215, -2.821058511734009], + [2.170677900314331, 5.904841899871826], + [-3.020526647567749, 6.675286769866943], + [0.6395271420478821, -6.398449897766113], + [0.8717277646064758, 0.8508713245391846], + [-3.656519651412964, -1.7556582689285278], + [5.423576354980469, 8.286439895629883], + [0.5949169993400574, -7.733406066894531], + [-3.2672159671783447, 6.550545692443848], + [9.23095989227295, -2.7543017864227295], + [-1.2321006059646606, 11.081395149230957], + [-2.5477538108825684, -2.329671621322632], + [1.484041452407837, 2.9590413570404053], + [-2.519223213195801, 2.491318464279175], + [1.1327401399612427, -7.381107807159424], + [-5.857011795043945, -0.8549060225486755], + [5.019970417022705, -3.180940866470337], + [1.3179214000701904, -0.4802643954753876], + [3.1558172702789307, -4.89885139465332], + [0.5663767457008362, -5.859860420227051], + [0.6119845509529114, -8.918527603149414], + [0.27774327993392944, -5.328869342803955], + [-3.3508152961730957, -1.1904188394546509], + [-0.08507130295038223, 0.8205744624137878], + [-2.9266886711120605, 2.8829879760742188], + [-0.5875478386878967, 6.942531585693359], + [-6.004128932952881, 5.214330196380615], + [-2.039278268814087, 0.29614531993865967], + [0.9979787468910217, 0.8906298279762268], + [-1.7874287366867065, 1.6690707206726074], + [-1.2016922235488892, 11.423101425170898], + [-4.3050737380981445, 6.231415748596191], + [-1.7623300552368164, 1.2344509363174438], + [-4.03871488571167, 6.008999824523926], + [-3.359440565109253, 6.096195697784424], + [1.5395886898040771, -6.124510765075684], + [-1.657146692276001, 6.172287464141846], + [-2.6160762310028076, -1.026940107345581], + [-1.9141613245010376, 1.0768903493881226], + [-0.49039405584335327, -1.7060478925704956], + [-0.6444447040557861, -0.7910625338554382], + [-1.9111518859863281, 1.7082483768463135], + [2.25697660446167, 0.618624210357666], + [2.567147970199585, -6.254817962646484], + [2.9346907138824463, -4.557661056518555], + [6.284815311431885, -1.3105498552322388], + [-4.101624011993408, -0.9506874680519104], + [0.9801333546638489, -5.77485466003418], + [0.33253443241119385, -6.227143287658691], + [1.6532055139541626, 4.965493202209473], + [0.4788147211074829, 0.27355197072029114], + [0.4606388211250305, -6.175121307373047], + [2.640385866165161, -4.2614946365356445], + [-1.9477523565292358, 2.078981637954712], + [-4.527904033660889, -0.8807327747344971], + [0.39129436016082764, -3.0953965187072754], + [3.342048406600952, 7.107421875], + [-2.398958206176758, -2.4932568073272705], + [-2.7865355014801025, -1.0460076332092285], + [-0.7708361744880676, 10.929325103759766], + [5.056362152099609, -2.9954705238342285], + [0.4747043251991272, -0.8254233002662659], + [-3.667585611343384, -1.726069688796997], + [-0.5873972773551941, -1.736594796180725], + [-3.2288668155670166, -1.6459702253341675], + [-0.440773069858551, 10.353740692138672], + [1.7195439338684082, 0.296841561794281], + [6.093214511871338, -2.257563352584839], + [2.1615724563598633, 0.32388511300086975], + [-1.4276834726333618, 1.6515752077102661], + [0.5825280547142029, -7.761331081390381], + [-2.07098650932312, 2.7362611293792725], + [1.858811855316162, 1.660899043083191], + [-0.5008731484413147, 9.63863754272461], + [0.31026268005371094, -5.724476337432861], + [0.487796425819397, -0.5604112148284912], + [0.7583114504814148, -8.882146835327148], + [-0.014339365065097809, -2.859180450439453], + [-5.681747913360596, 5.9355573654174805], + [-2.9603593349456787, -0.6004668474197388], + [9.22852611541748, -2.7256200313568115], + [1.5311707258224487, -5.273248195648193], + [-1.065536618232727, 10.74785041809082], + [0.5074533224105835, -7.203939437866211], + [-2.2270519733428955, 1.3372797966003418], + [-1.5906755924224854, 1.2469362020492554], + [0.6411324739456177, -6.786124229431152], + [-1.8661259412765503, 1.9288851022720337], + [2.3141071796417236, -3.9255242347717285], + [-3.035672903060913, 5.052726745605469], + [0.7653417587280273, 6.15987491607666], + [2.0297772884368896, 5.015659332275391], + [-3.40403151512146, -1.287626028060913], + [0.6264280676841736, -7.963074684143066], + [-1.1318817138671875, 9.840147018432617], + [-0.47998231649398804, 8.976249694824219], + [-1.9403777122497559, 1.4885555505752563], + [0.6379343271255493, -8.605563163757324], + [-0.9269985556602478, 10.2217435836792], + [-4.052152156829834, -0.9410626292228699], + [-1.522852897644043, 12.598714828491211], + [-4.933610439300537, 3.795544385910034], + [-0.19422048330307007, -1.487884283065796], + [-5.2284626960754395, -1.1261399984359741], + [2.749497413635254, -4.216207504272461], + [-5.152816295623779, 7.0640034675598145], + [0.056021399796009064, -1.2787271738052368], + [-3.2655680179595947, -2.0037126541137695], + [-2.0575051307678223, 1.5939873456954956], + [2.9493963718414307, -4.688248634338379], + [-5.74650239944458, 2.382132053375244], + [0.14847660064697266, -5.801512718200684], + [0.5593751072883606, -5.307247161865234], + [7.232842922210693, -2.552858352661133], + [0.8638843894004822, -5.87113094329834], + [6.451544284820557, -3.6693713665008545], + [-0.5819718837738037, 9.532428741455078], + [-0.425632119178772, -1.7385677099227905], + [-2.581430435180664, 6.496517181396484], + [-5.6317362785339355, 2.6740145683288574], + [2.4440758228302, 5.843042850494385], + [-3.470904588699341, -2.2048861980438232], + [-3.2590348720550537, -0.7688437104225159], + [-0.5695224404335022, 9.759688377380371], + [-1.3091152906417847, 11.21376895904541], + [-4.235489368438721, -0.8839355707168579], + [-3.2388224601745605, 3.717026948928833], + [-2.369797706604004, 0.4441998600959778], + [-4.506409168243408, -3.5666186809539795], + [1.7360535860061646, 0.8265400528907776], + [3.820748805999756, 6.975766658782959], + [5.394311428070068, 8.33869743347168], + [-3.7710018157958984, -2.9647839069366455], + [2.4006736278533936, -4.851823329925537], + [0.7190061211585999, -5.594832420349121], + [-1.4125782251358032, 11.728059768676758], + [2.3238108158111572, 6.1066975593566895], + [2.4876296520233154, -5.701641082763672], + [2.5899760723114014, -4.320011615753174], + [-3.6930582523345947, -1.444834589958191], + [-5.3950982093811035, -1.1970967054367065], + [0.2957620620727539, -5.787114143371582], + [-4.977326393127441, 6.599571228027344], + [0.8214547634124756, -5.652233123779297], + [-1.3848532438278198, 11.745737075805664], + [-5.017346382141113, 6.0932159423828125], + [2.6447107791900635, -4.4140520095825195], + [2.6456127166748047, -4.772317409515381], + [0.5008732676506042, -7.88482141494751], + [2.0194249153137207, 4.437291622161865], + [7.249375820159912, -2.175210475921631], + [5.698737621307373, -2.01404070854187], + [5.748158931732178, -2.8499791622161865], + [0.43641310930252075, -4.726480007171631], + [-4.154995918273926, -0.7385860681533813], + [2.1491334438323975, -3.812699556350708], + [-2.952246904373169, -1.1989327669143677], + [0.37549132108688354, -6.8983235359191895], + [0.8575090765953064, -6.22426176071167], + [-5.094603538513184, 7.063106536865234], + [-0.9186747074127197, -1.8681548833847046], + [-3.5103371143341064, -1.3534600734710693], + [-1.9240128993988037, -0.5410852432250977], + [-1.7315001487731934, 2.100273370742798], + [-0.2152964472770691, -1.0016402006149292], + [-0.24714836478233337, -1.4712566137313843], + [0.26926612854003906, -5.124977111816406], + [5.390731334686279, -2.1128432750701904], + [0.7911689877510071, -5.304373741149902], + [8.93969440460205, -2.569868803024292], + [-0.2233688235282898, 8.255572319030762], + [-1.7401129007339478, 1.3621844053268433], + [1.033478021621704, 3.661146640777588], + [0.6832203269004822, -8.42434310913086], + [-3.84576153755188, -1.003570318222046], + [0.5953252911567688, -7.800025939941406], + [-1.2071659564971924, 10.456744194030762], + [-4.572995662689209, 3.4058632850646973], + [2.7159526348114014, -4.427285194396973], + [-3.8131072521209717, -1.421751618385315], + [8.40087604522705, -2.7610926628112793], + [3.641127347946167, 6.541004657745361], + [-0.2062232494354248, 7.477836608886719], + [-5.15659236907959, 7.824138641357422], + [-2.867875576019287, 3.1986634731292725], + [0.7462800741195679, -5.8257975578308105], + [-3.808840036392212, -1.5532617568969727], + [-1.895281195640564, 2.0205485820770264], + [2.7945291996002197, -4.483564376831055], + [8.662178039550781, -2.588252305984497], + [-0.8176284432411194, 9.758766174316406], + [-0.9108505845069885, 11.014013290405273], + [4.504996299743652, 7.469221115112305], + [2.016528844833374, 5.734890937805176], + [2.058790445327759, 4.829748153686523], + [2.2990658283233643, -5.663277626037598], + [7.660547733306885, -4.260132789611816], + [-1.5418599843978882, 12.635492324829102], + [9.795944213867188, -2.9399454593658447], + [6.63372802734375, -1.752905011177063], + [-3.4686622619628906, 6.0311665534973145], + [0.6690778732299805, 0.29888176918029785], + [-0.7373577356338501, 9.988299369812012], + [0.38267648220062256, -5.495187282562256], + [0.6856735944747925, -8.411648750305176], + [1.869049072265625, 5.976190090179443], + [2.942702531814575, -5.271069526672363], + [-0.6821303963661194, 9.802253723144531], + [7.6928839683532715, -2.169790267944336], + [1.0428107976913452, 0.6250450015068054], + [5.878550052642822, -1.1552356481552124], + [-3.0446879863739014, -0.8422157764434814], + [-5.087436199188232, 6.53238582611084], + [-1.4831509590148926, 2.0449864864349365], + [2.8730597496032715, -4.969393253326416], + [-4.276801109313965, -2.040832042694092], + [-1.5859794616699219, 13.099153518676758], + [0.21576043963432312, -5.131441116333008], + [0.8850063681602478, -6.390432834625244], + [-1.3915468454360962, 11.980194091796875], + [-3.385667562484741, -2.0782523155212402], + [2.7689573764801025, -4.776403427124023], + [-2.312824249267578, 1.166305422782898], + [1.307669997215271, 4.10974645614624], + [-4.077205181121826, -1.8786896467208862], + [2.1937289237976074, -3.9689409732818604], + [-0.718919575214386, 10.887744903564453], + [-3.433283805847168, -0.7517699003219604], + [2.7867178916931152, -4.372357368469238], + [-2.9957454204559326, -2.048022747039795], + [0.6647379398345947, -5.469239234924316], + [2.1359736919403076, -3.57576060295105], + [-5.397990703582764, 7.321177005767822], + [2.3669354915618896, -4.949764251708984], + [-0.7676302790641785, 10.054766654968262], + [-0.5217651724815369, 9.471599578857422], + [2.294633626937866, -5.539079189300537], + [0.9467583298683167, -5.702145576477051], + [1.492905855178833, 4.567830562591553], + [0.6154620051383972, -8.446969985961914], + [2.89551043510437, -4.888758182525635], + [2.2527499198913574, 3.6557109355926514], + [-1.219794511795044, 10.908180236816406], + [-4.451165199279785, -1.6527022123336792], + [-6.123029708862305, 8.26392650604248], + [-0.7047253251075745, 10.535738945007324], + [2.7157695293426514, 6.088887691497803], + [0.4789816737174988, -7.389659404754639], + [-3.803220272064209, -1.390652060508728], + [-0.9144361615180969, 11.254605293273926], + [-0.40647584199905396, 9.490795135498047], + [0.5955986976623535, -6.969987869262695], + [0.4001784324645996, -6.244574069976807], + [-4.326129913330078, -1.855439305305481], + [-3.695349931716919, -2.3527934551239014], + [0.27934587001800537, -5.371720314025879], + [0.6334258913993835, -8.286294937133789], + [0.6531102061271667, -4.529155254364014], + [5.064291000366211, 7.893411159515381], + [-5.396570682525635, -0.8708697557449341], + [-4.184351921081543, -1.5758694410324097], + [-0.22490811347961426, -3.270782947540283], + [-3.9238359928131104, -1.0187522172927856], + [-3.5552613735198975, -1.5288639068603516], + [-3.576815605163574, -0.31339597702026367], + [0.3146507740020752, -6.073561191558838], + [-1.988954782485962, 1.6573554277420044], + [1.2036188840866089, -0.1897473931312561], + [0.07950615137815475, -4.22430419921875], + [-3.355487585067749, -0.36595654487609863], + [-3.9023993015289307, -3.3662257194519043], + [0.21145105361938477, -5.501180648803711], + [0.449754536151886, -5.822382926940918], + [2.9912960529327393, -4.652292728424072], + [-4.0635600090026855, -3.095529794692993], + [2.0705928802490234, 0.7384882569313049], + [-0.12199348956346512, 8.759943008422852], + [-1.2317581176757812, 11.259260177612305], + [-0.7705510258674622, 9.591665267944336], + [0.2832169532775879, -5.738231182098389], + [0.2420346736907959, -5.284356117248535], + [0.6695545315742493, -8.28768539428711], + [-4.999276161193848, -1.1687270402908325], + [-1.2856093645095825, 11.159198760986328], + [-3.929827928543091, -2.8695390224456787], + [-3.531437635421753, -1.0062620639801025], + [-2.1214711666107178, -2.1420209407806396], + [0.33878016471862793, -5.812292098999023], + [2.825024366378784, -4.868386268615723], + [7.755945682525635, -2.3774430751800537], + [-0.990902304649353, 10.727191925048828], + [3.1099672317504883, 6.4720563888549805], + [-5.439045429229736, 6.727573394775391], + [5.128493785858154, -1.574644684791565], + [1.967947244644165, -4.723145961761475], + [7.010441303253174, -1.9021213054656982], + [0.6928007006645203, -8.040253639221191], + [8.716227531433105, -3.0059103965759277], + [0.8850390911102295, 5.6056928634643555], + [-4.8985395431518555, -1.1099103689193726], + [4.480245590209961, 7.4979352951049805], + [2.102299690246582, -4.453662872314453], + [-0.9462518095970154, 1.78695809841156], + [1.4078829288482666, 4.187305927276611], + [3.3485219478607178, -3.998689889907837], + [0.7405009865760803, -6.417349815368652], + [0.765144407749176, -8.688206672668457], + [0.579113781452179, -7.9529948234558105], + [2.7535388469696045, 6.409294128417969], + [2.012700319290161, 4.465303421020508], + [3.6555750370025635, 7.033845901489258], + [-0.7732140421867371, 10.263418197631836], + [1.1438241004943848, -0.25311097502708435], + [-4.2089152336120605, -2.2882494926452637], + [-5.578428268432617, 4.540314674377441], + [-5.5492472648620605, 7.320338249206543], + [1.5109761953353882, 5.3404951095581055], + [-3.9350664615631104, -1.6654611825942993], + [2.006453514099121, 6.376853942871094], + [0.8694108128547668, -6.625685691833496], + [2.169137716293335, -5.297521591186523], + [0.8264214396476746, 5.262117385864258], + [0.5329670310020447, -7.116186141967773], + [-4.43522310256958, 2.8438379764556885], + [1.5904316902160645, 1.8860567808151245], + [-1.8956763744354248, 1.2550138235092163], + [-1.026726484298706, -3.233590602874756], + [-1.1806480884552002, 10.764183044433594], + [2.0799176692962646, 0.8411718606948853], + [-2.8141071796417236, -0.8058623671531677], + [3.128394365310669, -5.615181922912598], + [2.856464147567749, -4.974494934082031], + [0.437261700630188, -6.793759346008301], + [8.296711921691895, -2.6728897094726562], + [-2.7697103023529053, -0.9475287199020386], + [8.568648338317871, -2.4595563411712646], + [-1.8181679248809814, 0.8578932285308838], + [-1.2100615501403809, -1.6316726207733154], + [0.2830384373664856, -6.333321571350098], + [-0.0807328000664711, -1.9829163551330566], + [2.478327751159668, -4.577722549438477], + [-3.82633376121521, -2.294128179550171], + [1.9312808513641357, -5.249634742736816], + [7.8352885246276855, -3.091691732406616], + [-1.3239034414291382, 11.595623016357422], + [-3.257716417312622, -3.3645026683807373], + [-4.617495536804199, -1.832642674446106], + [-3.299265146255493, 4.6488213539123535], + [-1.927180290222168, 2.223633289337158], + [-0.4774731397628784, -0.6300404071807861], + [-0.9893145561218262, -0.4841461479663849], + [2.729595422744751, -4.289148330688477], + [-4.243379592895508, -1.0255979299545288], + [-2.9541356563568115, -0.7970295548439026], + [3.083693742752075, 6.767413139343262], + [0.34140926599502563, -6.590702056884766], + [2.1882195472717285, -4.796099662780762], + [-5.551715850830078, 5.310455799102783], + [-2.304654359817505, -0.9131962060928345], + [-2.287466287612915, 0.8737692832946777], + [2.393198013305664, 3.1499786376953125], + [-1.1671743392944336, -0.7696464657783508], + [-5.406428337097168, 6.1485595703125], + [5.80024528503418, -2.815603494644165], + [5.3398213386535645, 8.149215698242188], + [6.068243026733398, -1.3817803859710693], + [0.6770729422569275, -5.249114990234375], + [5.692556381225586, -3.085052490234375], + [2.599757432937622, -4.454897403717041], + [4.076138496398926, 7.2273125648498535], + [-0.8456103205680847, 10.767335891723633], + [2.7805182933807373, -4.853531837463379], + [2.415836811065674, 5.293008804321289], + [-0.9294854402542114, 10.468692779541016], + [-3.4601776599884033, 5.541584014892578], + [1.7523415088653564, 0.5255138278007507], + [7.4546308517456055, -2.5962347984313965], + [2.5188167095184326, 0.8380765914916992], + [-1.530023217201233, 1.5920881032943726], + [-0.5846350789070129, -0.9759092330932617], + [1.9560821056365967, 1.1433168649673462], + [0.643179714679718, -8.349142074584961], + [2.6164958477020264, -3.648481845855713], + [2.0813069343566895, 3.345628499984741], + [6.726700305938721, -1.758981704711914], + [-0.4281076192855835, 6.915533065795898], + [-2.1680214405059814, 0.39383336901664734], + [-1.0630099773406982, 10.792278289794922], + [3.175791025161743, -5.044955253601074], + [2.730275869369507, -5.141736030578613], + [0.4760531783103943, -7.4053754806518555], + [-2.608368158340454, 2.8494784832000732], + [-2.785090446472168, -1.1605995893478394], + [2.993199586868286, -4.551116943359375], + [0.4618067145347595, -5.511399269104004], + [-3.6219699382781982, -1.1530107259750366], + [-3.557116746902466, -1.3029223680496216], + [-4.6076579093933105, -1.3686078786849976], + [-1.917662501335144, 0.2899232804775238], + [-1.890326738357544, 1.463096261024475], + [9.368199348449707, -2.8772218227386475], + [-2.2681474685668945, -0.61163729429245], + [-4.087419033050537, -0.7917942404747009], + [-0.5329040884971619, 10.408903121948242], + [6.593851566314697, -1.7488510608673096], + [-1.017337441444397, 12.147808074951172], + [5.623258113861084, -1.3679823875427246], + [1.981687307357788, 3.4090826511383057], + [-3.2717974185943604, -1.2154446840286255], + [-3.0350265502929688, -0.9107816219329834], + [-3.3327548503875732, 0.9678469896316528], + [-1.5074924230575562, 12.551013946533203], + [0.6981893181800842, -7.581107139587402], + [1.365113615989685, 5.3163604736328125], + [-0.6407697200775146, 9.839208602905273], + [-5.289539813995361, 6.658209800720215], + [-1.1058467626571655, 11.724051475524902], + [0.5632918477058411, -7.410457611083984], + [0.5807286500930786, -7.463514804840088], + [-1.2412551641464233, 11.438217163085938], + [-0.7559276223182678, 9.928703308105469], + [1.9181506633758545, 5.4417877197265625], + [-0.8343777060508728, -0.4959079325199127], + [-4.714053153991699, 6.279061794281006], + [2.1940419673919678, 5.522139549255371], + [0.6728704571723938, -0.36958423256874084], + [0.6692339777946472, -8.53335952758789], + [-1.1684383153915405, 1.7233949899673462], + [6.408538818359375, -1.9771875143051147], + [0.9715078473091125, -5.3191657066345215], + [-1.34443199634552, -1.9224108457565308], + [-0.5057351589202881, -1.2333732843399048], + [1.1719391345977783, -5.982288360595703], + [4.632615089416504, 7.830891132354736], + [1.5482151508331299, -5.0488362312316895], + [-0.9710837006568909, 10.429342269897461], + [-4.443852424621582, 6.146483898162842], + [-4.26046895980835, -0.8409881591796875], + [-1.7487716674804688, 1.6374332904815674], + [0.3898296356201172, -6.240754127502441], + [2.489278554916382, 5.831552505493164], + [-0.8908567428588867, 9.079781532287598], + [1.445168375968933, -5.145720958709717], + [-3.7885162830352783, -2.533662796020508], + [-2.04306697845459, 1.2479219436645508], + [1.8684293031692505, -4.06594181060791], + [-3.5399253368377686, 4.429671287536621], + [2.5690226554870605, -4.878790855407715], + [-4.302062511444092, -1.9334193468093872], + [7.850448131561279, -2.8655202388763428], + [6.894357204437256, -2.5770208835601807], + [-0.2024948000907898, 8.501121520996094], + [2.9207956790924072, -4.996086120605469], + [-4.360034942626953, 4.948455333709717], + [3.4589076042175293, 6.561979293823242], + [1.3658778667449951, 5.249843597412109], + [-3.561594009399414, -1.4433740377426147], + [-3.1788737773895264, -1.3685120344161987], + [-0.9835752844810486, 10.72260856628418], + [-3.7583870887756348, -1.421270489692688], + [7.118968486785889, -2.9353342056274414], + [-1.2828223705291748, 11.184029579162598], + [-4.1927666664123535, 5.19527530670166], + [-1.1085487604141235, 10.475339889526367], + [-3.5311498641967773, -3.2062647342681885], + [-2.5889949798583984, -0.5445674657821655], + [1.146162509918213, -5.97303581237793], + [-0.6931048631668091, 10.710302352905273], + [0.28476303815841675, -5.047390460968018], + [-0.9230530261993408, -0.9866980314254761], + [0.9710454344749451, -6.866776466369629], + [0.5515006184577942, 0.8110712170600891], + [2.9112298488616943, -4.513674736022949], + [-3.8961572647094727, -2.0283892154693604], + [2.3270297050476074, 4.446328163146973], + [-2.357471227645874, -0.6034690141677856], + [-3.619450330734253, -1.3399337530136108], + [0.12091856449842453, -3.363219976425171], + [-5.475574970245361, 5.254729270935059], + [-2.423976182937622, 0.5771023035049438], + [-2.139355421066284, -0.8961839079856873], + [-3.379124402999878, -3.424044609069824], + [2.440840482711792, -4.818088531494141], + [-0.04403448849916458, -4.559169769287109], + [-5.13942813873291, 7.286992073059082], + [7.486294269561768, -3.249951124191284], + [1.0792850255966187, -0.0978560745716095], + [-1.224170207977295, 11.559869766235352], + [2.9691109657287598, -4.749050140380859], + [-1.347809076309204, 11.496870040893555], + [7.281745433807373, -3.5900309085845947], + [2.606764078140259, -4.662104606628418], + [1.0707051753997803, -5.937201499938965], + [2.8539645671844482, -4.834672451019287], + [-0.7132682204246521, 10.446474075317383], + [0.8226701021194458, -6.56153678894043], + [-4.909914493560791, 6.287960052490234], + [-3.7599689960479736, -1.2734532356262207], + [-4.4050068855285645, -1.0642693042755127], + [-0.34914010763168335, 8.67015552520752], + [3.0476841926574707, -4.768414497375488], + [-3.2713847160339355, 0.8160684704780579], + [5.241346836090088, 8.043791770935059], + [-5.303508281707764, -0.9567500948905945], + [-4.809049129486084, -1.1099218130111694], + [-3.2181124687194824, -1.9529777765274048], + [1.1849470138549805, 1.5388935804367065], + [0.4972442388534546, -0.7140491008758545], + [1.968102216720581, -5.121591091156006], + [-3.7876813411712646, -1.4888430833816528], + [2.464475393295288, -4.743320941925049], + [6.663862705230713, -3.5403449535369873], + [-3.5845978260040283, -2.5941972732543945], + [1.5127161741256714, -4.4471235275268555], + [6.444921970367432, -4.0928497314453125], + [2.3142082691192627, -4.91849946975708], + [7.405173301696777, -3.1885721683502197], + [-1.3759099245071411, 11.380035400390625], + [0.6877743005752563, 5.926782608032227], + [-3.4082658290863037, -2.376127004623413], + [6.729390621185303, -2.074183702468872], + [-4.425147533416748, 3.4311506748199463], + [-1.6921288967132568, 0.7519059777259827], + [1.6789250373840332, -5.151853084564209], + [0.6970769762992859, -7.477952003479004], + [-1.7280701398849487, 0.6746689677238464], + [0.1584179401397705, -6.748356342315674], + [7.392306327819824, -2.5219430923461914], + [1.1226255893707275, -6.206336975097656], + [-4.96219539642334, 3.868117570877075], + [-1.5163567066192627, 12.425485610961914], + [1.261991262435913, 5.168455123901367], + [-2.066462755203247, 5.627203941345215], + [0.7303935885429382, -5.052031517028809], + [5.817315578460693, -1.3512778282165527], + [-0.6437602639198303, 9.161426544189453], + [-0.0047353580594062805, -3.9411890506744385], + [-3.699713945388794, -2.437796115875244], + [1.9081223011016846, 3.5526974201202393], + [0.6557110548019409, -7.361715316772461], + [2.4233558177948, -4.94173526763916], + [2.518220901489258, 6.088646411895752], + [-1.5388439893722534, 12.788633346557617], + [7.883253574371338, -2.2547450065612793], + [-5.0669474601745605, 6.589327812194824], + [-4.895431041717529, -3.787456750869751], + [9.01161003112793, -2.7708818912506104], + [-3.720367908477783, -1.6011780500411987], + [0.5467612147331238, -7.727206707000732], + [-1.175034523010254, 1.203005075454712], + [-0.999122679233551, -1.1453320980072021], + [1.6577157974243164, -6.808864593505859], + [0.8870785236358643, -6.102408409118652], + [-4.588100433349609, 5.124927997589111], + [-3.865679979324341, 6.591917991638184], + [2.406871795654297, 4.980101585388184], + [1.623956561088562, 6.037121295928955], + [-4.3704094886779785, -1.0927914381027222], + [-5.152230262756348, -3.6544008255004883], + [-0.1518632173538208, -3.080566644668579], + [1.3665575981140137, -5.317100524902344], + [-1.0834605693817139, 10.740926742553711], + [0.5777863264083862, -5.635988235473633], + [-0.44310569763183594, -1.3943368196487427], + [-1.3136847019195557, 11.368993759155273], + [-5.992004871368408, 6.247178077697754], + [-4.271936893463135, -2.2358310222625732], + [4.715994358062744, 7.730108261108398], + [-3.2580456733703613, -0.3985235095024109], + [-1.2419010400772095, 10.806694984436035], + [-3.006800889968872, 4.269075870513916], + [-2.384774923324585, 2.188184976577759], + [0.7006880640983582, -8.91657543182373], + [5.7560133934021, -2.30469012260437], + [-4.344114780426025, 6.71596622467041], + [-2.8214523792266846, -0.6153351664543152], + [2.939802885055542, -4.74993371963501], + [-0.4324454367160797, -1.103784203529358], + [2.782945394515991, -4.477692127227783], + [-2.8872039318084717, 5.272348403930664], + [-1.3714863061904907, 1.9238429069519043], + [0.754901111125946, -0.1107124388217926], + [-2.9764492511749268, -0.7709895968437195], + [-0.8505032658576965, 10.60779094696045], + [-3.2757670879364014, -1.9518874883651733], + [0.3533843755722046, -4.331784725189209], + [8.150519371032715, -2.615288734436035], + [3.6030476093292236, -4.034799575805664], + [7.750869274139404, -2.496297597885132], + [-1.7663915157318115, 1.189279317855835], + [8.303814888000488, -3.2712628841400146], + [-3.3042259216308594, -4.215149879455566], + [-1.5158493518829346, 12.129816055297852], + [-3.9424102306365967, 5.52621603012085], + [0.24969482421875, -6.551325798034668], + [2.6553590297698975, -4.4605512619018555], + [2.401370048522949, 0.5837892889976501], + [-3.6592705249786377, -1.4036275148391724], + [2.7002949714660645, -5.030327320098877], + [8.331933975219727, -2.602085828781128], + [-0.8724586367607117, 11.054203033447266], + [-0.6112496256828308, 9.641589164733887], + [-3.866230010986328, -1.181150197982788], + [-0.005786038935184479, -4.30340576171875], + [-5.965167045593262, 7.724681377410889], + [7.158388614654541, -2.192807674407959], + [-4.260788440704346, -1.3397350311279297], + [-0.7157599925994873, 9.904573440551758], + [-1.7987022399902344, 0.7745388150215149], + [-3.2792632579803467, 5.100845813751221], + [0.8737297654151917, 3.2159969806671143], + [-0.041228748857975006, -4.917126655578613], + [2.177307367324829, -4.249607563018799], + [7.394593715667725, -2.4788177013397217], + [-4.626362323760986, -2.685112476348877], + [-4.447939395904541, -1.145180583000183], + [9.092591285705566, -2.9297287464141846], + [-3.8526477813720703, -2.0905468463897705], + [1.6968772411346436, 4.770630359649658], + [2.5593302249908447, 5.582967281341553], + [0.3752503991127014, -5.682303428649902], + [0.4927985668182373, -1.1116001605987549], + [0.9756144881248474, -5.221662521362305], + [-2.109053373336792, -2.2194554805755615], + [-4.067363262176514, -0.37928152084350586], + [-0.4806961417198181, 9.430673599243164], + [0.40608859062194824, -6.779125213623047], + [-1.6921921968460083, 0.6750220060348511], + [0.26032519340515137, -5.986509323120117], + [-3.2726569175720215, -1.8086209297180176], + [-5.0606770515441895, 5.439319610595703], + [-2.7945265769958496, 2.984311819076538], + [1.9662723541259766, 4.51469612121582], + [-1.3651376962661743, 12.018730163574219], + [-0.47646135091781616, 10.500118255615234], + [7.069104194641113, -2.9552600383758545], + [1.4955006837844849, -5.031744956970215], + [-0.520492672920227, 9.845755577087402], + [0.6342106461524963, -7.747106075286865], + [-1.383519172668457, 11.560440063476562], + [-3.686836004257202, -1.007922649383545], + [-0.9641041159629822, 10.238105773925781], + [-0.45868080854415894, 9.451406478881836], + [-0.6857536435127258, 10.101283073425293], + [-1.9521386623382568, -0.2969452142715454], + [-4.260672569274902, -1.9559621810913086], + [7.821166038513184, -3.0099740028381348], + [2.778196334838867, 4.606917858123779], + [2.9788661003112793, -4.589306831359863], + [-4.658146381378174, 6.37953519821167], + [3.8952972888946533, 6.841829299926758], + [2.485887050628662, -4.883471965789795], + [-4.771157741546631, 6.589398384094238], + [6.479045391082764, -2.125537395477295], + [-4.780189037322998, 6.030418395996094], + [-1.9927380084991455, 2.350708246231079], + [6.8187456130981445, -3.4076175689697266], + [-1.891908049583435, 2.0557198524475098], + [1.7503955364227295, -4.247259140014648], + [2.0672543048858643, -3.757070541381836], + [-3.857752561569214, 6.878722190856934], + [9.277462005615234, -2.909843921661377], + [-4.397256851196289, 4.326648712158203], + [0.5658941864967346, -6.864856243133545], + [-0.907269299030304, 9.876173973083496], + [2.317669630050659, 5.221494674682617], + [-0.8523682951927185, 10.220060348510742], + [-4.086106777191162, -2.140662908554077], + [-0.8334671854972839, 10.85560417175293], + [0.492175817489624, -6.292842864990234], + [-3.571221351623535, 5.918435573577881], + [-3.337146520614624, -0.7057977914810181], + [0.9755075573921204, 4.549990653991699], + [-1.2536592483520508, 9.685176849365234], + [-4.687234401702881, 1.4361721277236938], + [0.6068277955055237, -6.839670181274414], + [2.747668743133545, -4.345100402832031], + [-3.0592873096466064, 5.036020278930664], + [4.964005947113037, 8.293105125427246], + [1.4987976551055908, 1.265541672706604], + [1.570658802986145, 1.9599004983901978], + [2.019974946975708, 5.835845470428467], + [-2.0435163974761963, -1.085370421409607], + [-3.47595477104187, -1.3497666120529175], + [2.221435308456421, 5.222169876098633], + [0.8220239281654358, 0.13784480094909668], + [-1.151915192604065, 10.785266876220703], + [-1.402906894683838, 12.378520965576172], + [5.629070281982422, -4.081719398498535], + [4.297435760498047, 7.350049018859863], + [0.8256927728652954, -6.4389753341674805], + [1.4483389854431152, 0.36892169713974], + [0.5522363781929016, -7.443839073181152], + [-0.32929307222366333, 10.807332992553711], + [5.963720798492432, -1.9422258138656616], + [-1.865439772605896, 1.263659954071045], + [-0.5526370406150818, 9.876897811889648], + [-5.698822498321533, -1.1190663576126099], + [-1.3992050886154175, -0.9412259459495544], + [0.4184473752975464, -6.269475936889648], + [1.6910831928253174, -4.9870805740356445], + [-1.8704612255096436, 1.4406061172485352], + [-1.8231440782546997, 1.8467934131622314], + [-3.9130442142486572, -1.2243520021438599], + [7.3306708335876465, -2.1162822246551514], + [-2.0128440856933594, 2.210784912109375], + [-2.5534486770629883, 0.45926058292388916], + [-2.0362167358398438, 1.6466411352157593], + [6.073173522949219, -3.6430368423461914], + [-0.7543847560882568, 10.172576904296875], + [1.7496769428253174, 0.2439761459827423], + [1.6691703796386719, -4.344991207122803], + [5.686767578125, 8.542021751403809], + [-4.239694595336914, 6.403738021850586], + [0.5045396089553833, -6.607715606689453], + [-1.7104252576828003, 1.4995217323303223], + [7.042356967926025, -1.9336000680923462], + [2.614485502243042, -4.205775260925293], + [2.2478630542755127, 5.340191841125488], + [2.9805469512939453, -5.020623683929443], + [-3.135129690170288, 0.23570549488067627], + [2.0739216804504395, -3.873811960220337], + [-0.9778235554695129, 9.920557022094727], + [-3.3429973125457764, -0.6133090853691101], + [0.3479595184326172, -6.772715091705322], + [-1.4794912338256836, -0.7720928192138672], + [2.927290201187134, -4.570364475250244], + [-4.142492771148682, -1.5223108530044556], + [2.736562967300415, -4.59221076965332], + [-1.3825401067733765, 11.991830825805664], + [-1.3820109367370605, -0.6631218194961548], + [1.6619622707366943, 2.2395036220550537], + [-4.704484462738037, 1.1649482250213623], + [-0.45921456813812256, 9.726287841796875], + [1.6106986999511719, 2.2239935398101807], + [-3.720484733581543, 3.910691022872925], + [-0.3482997715473175, 0.3683219254016876], + [2.4943695068359375, -4.297582149505615], + [-0.7023550868034363, 10.379013061523438], + [2.2743890285491943, -4.582954406738281], + [-1.2116185426712036, 10.9119291305542], + [2.6865885257720947, -4.54615592956543], + [-2.7702786922454834, -0.8217345476150513], + [0.9315515160560608, -5.356202125549316], + [0.5446751117706299, -0.7041659355163574], + [0.29471373558044434, -5.491874694824219], + [-1.2400777339935303, 11.17570686340332], + [-3.873041868209839, -1.4086190462112427], + [4.7321648597717285, 7.569681167602539], + [-1.788537621498108, 1.3313044309616089], + [-4.055444717407227, 5.297651767730713], + [-4.118922710418701, 5.680798053741455], + [-5.228833198547363, 5.653591632843018], + [-4.474917411804199, -1.2805858850479126], + [-5.202433109283447, -1.1200515031814575], + [-5.240784168243408, 4.986611843109131], + [-3.064971685409546, -1.385982871055603], + [0.9346582293510437, -0.4141772985458374], + [-1.9578769207000732, -0.21988213062286377], + [-3.510823965072632, -0.2654930353164673], + [-2.0280916690826416, 2.5414345264434814], + [2.388434410095215, -4.502880573272705], + [-4.983029842376709, 5.553652763366699], + [-3.869051456451416, 6.229231357574463], + [-3.9128258228302, 6.123656272888184], + [-3.380906581878662, -0.7878670692443848], + [-4.016942501068115, 6.303423881530762], + [0.9087129235267639, -4.414548873901367], + [1.311905860900879, 0.4205489754676819], + [2.7284438610076904, -4.692084312438965], + [-3.4696524143218994, 6.4795026779174805], + [-3.7857248783111572, -3.080273151397705], + [-4.041675090789795, -2.8559787273406982], + [-4.880556583404541, 6.649442672729492], + [-0.7855567932128906, 9.85507583618164], + [-5.060759544372559, 6.895225524902344], + [0.20866632461547852, -6.129901885986328], + [-3.60571026802063, -1.6829880475997925], + [-0.3219947814941406, 9.247884750366211], + [1.1390186548233032, 5.729157447814941], + [-4.439104080200195, 7.13905668258667], + [-3.323272943496704, -1.2029889822006226], + [-4.549886703491211, 7.134751319885254], + [-2.7216808795928955, 5.066135883331299], + [0.3706672787666321, -7.135407447814941], + [2.4513025283813477, -4.757927894592285], + [2.6687679290771484, -4.593710422515869], + [-3.7152373790740967, 7.031940460205078], + [-3.797084093093872, -2.7025115489959717], + [-1.5509508848190308, 0.8272268176078796], + [-3.5082995891571045, -1.9239518642425537], + [2.802663803100586, 6.332860946655273], + [9.24521541595459, -2.9532768726348877], + [-1.0991514921188354, 11.147637367248535], + [2.1426684856414795, 4.389443397521973], + [-1.735978126525879, 0.8160580396652222], + [-0.543911874294281, -1.7719968557357788], + [1.2909808158874512, -7.370166778564453], + [-1.2753164768218994, 11.131689071655273], + [-3.3741939067840576, 4.774382591247559], + [-3.3267133235931396, -1.7324222326278687], + [-1.3825764656066895, 7.401756286621094], + [1.1176371574401855, -7.485141754150391], + [5.7677130699157715, -4.746898174285889], + [1.7177813053131104, 0.5351845026016235], + [-2.7589728832244873, 5.370332717895508], + [-3.364809036254883, -0.43096229434013367], + [2.182286024093628, 6.078006267547607], + [0.7164003849029541, -8.00621509552002], + [-3.2095773220062256, -1.548795461654663], + [2.0115630626678467, -4.935460567474365], + [7.453536510467529, -2.7699880599975586], + [-0.8455418944358826, 9.846179962158203], + [-1.8677688837051392, 1.0454660654067993], + [-2.0632641315460205, 1.2260944843292236], + [-2.8748128414154053, -4.235809326171875], + [0.1345224678516388, -5.0318193435668945], + [-4.7499799728393555, -4.171480178833008], + [3.718794107437134, 6.7460246086120605], + [0.5331500172615051, -4.692478656768799], + [-0.7757704854011536, 10.284229278564453], + [-5.635901927947998, 4.953500747680664], + [-4.433023929595947, -0.8202425241470337], + [1.6424589157104492, 5.174056053161621], + [1.5343620777130127, 5.23582649230957], + [0.4191640019416809, -7.359416484832764], + [-5.44784688949585, -1.1277695894241333], + [-3.599457025527954, -1.6805081367492676], + [-2.156332015991211, -3.955672025680542], + [2.8329758644104004, -5.92929744720459], + [7.09588623046875, -2.443835735321045], + [-2.0313470363616943, 1.9143767356872559], + [-4.128729343414307, -1.2940540313720703], + [-1.3107494115829468, 11.212560653686523], + [-0.602240264415741, -0.843315064907074], + [-2.785264015197754, -0.9751979112625122], + [-3.8403120040893555, -1.4503694772720337], + [-4.716203689575195, 5.587265491485596], + [-4.360301494598389, 6.214541435241699], + [-3.566189765930176, -1.0316716432571411], + [-5.166140079498291, -0.6780726909637451], + [-3.0311625003814697, -1.1733949184417725], + [2.2601006031036377, -4.097944259643555], + [-1.365671157836914, 12.17509651184082], + [-1.6652804613113403, 1.0074963569641113], + [-1.8069207668304443, 1.6013188362121582], + [0.8798119425773621, -6.7021355628967285], + [-1.9111249446868896, -0.04540044441819191], + [-5.1718339920043945, 7.048907279968262], + [0.7421948313713074, -3.419297218322754], + [-1.490301251411438, 12.110486030578613], + [-0.2120673954486847, -0.3550156354904175], + [0.7129365801811218, -0.13222578167915344], + [-6.1391777992248535, 4.227884292602539], + [-3.2730209827423096, -0.5464038848876953], + [0.7769849896430969, -6.813207626342773], + [8.000201225280762, -2.750415086746216], + [1.525496482849121, 0.7154973149299622], + [8.412814140319824, -3.010037660598755], + [8.08637809753418, -3.396005868911743], + [-1.082381248474121, 10.979961395263672], + [1.9505417346954346, -5.3243513107299805], + [-0.7197988629341125, 10.01219654083252], + [2.751192331314087, 5.878497123718262], + [-1.9928808212280273, 2.175389289855957], + [-3.2420623302459717, -1.6502448320388794], + [-3.9001314640045166, -2.49334454536438], + [-3.6338188648223877, 6.097325325012207], + [8.664444923400879, -2.877185583114624], + [-1.8234825134277344, 1.4109644889831543], + [3.1110029220581055, 5.800034999847412], + [-2.490938901901245, -2.4442660808563232], + [8.54736614227295, -2.6606760025024414], + [-0.04561198502779007, 2.3835320472717285], + [-4.775667667388916, 5.347805976867676], + [0.6329417824745178, -8.007006645202637], + [-1.710641860961914, 0.8419596552848816], + [2.3473098278045654, -4.33448600769043], + [-0.9754488468170166, 4.426524639129639], + [-5.211353778839111, -4.84382438659668], + [0.31532758474349976, -6.191258907318115], + [0.585791289806366, -8.319748878479004], + [7.7188944816589355, -4.479522705078125], + [6.582496166229248, -3.6326334476470947], + [2.8576102256774902, -5.008677005767822], + [0.3923429250717163, -7.0491251945495605], + [-5.053740978240967, -4.72257137298584], + [-5.041979789733887, 5.308716773986816], + [2.638352394104004, -4.613415241241455], + [-3.0697567462921143, -0.8653277158737183], + [3.92330002784729, 7.077814102172852], + [-3.535020589828491, -1.3468343019485474], + [2.1740262508392334, 4.2267231941223145], + [0.5050541758537292, -6.42720890045166], + [5.41151237487793, 8.386604309082031], + [1.6206923723220825, 2.8050122261047363], + [4.383216857910156, 7.054666996002197], + [6.250814437866211, -2.766784906387329], + [2.463127374649048, 5.649166584014893], + [2.046888828277588, 3.276458978652954], + [2.0236809253692627, -4.328678131103516], + [3.007714033126831, 6.4490838050842285], + [0.2388608753681183, -4.634411811828613], + [-4.059413909912109, 6.260110855102539], + [0.572711706161499, -5.046412467956543], + [2.8715884685516357, -5.015188217163086], + [-0.42007118463516235, 9.632999420166016], + [0.9139466881752014, -0.35378822684288025], + [-1.575195550918579, 1.7094049453735352], + [5.303067684173584, 8.329622268676758], + [-2.126157522201538, 4.378985404968262], + [-1.107098937034607, 0.7694927453994751], + [2.9290239810943604, -5.339977264404297], + [2.5877387523651123, -4.263463020324707], + [0.6515982747077942, 4.191027641296387], + [0.7572767734527588, -7.1513142585754395], + [0.8450755476951599, -5.229191780090332], + [2.0724785327911377, 5.168411731719971], + [-0.3321698307991028, 9.223579406738281], + [-0.2630070447921753, -1.595603108406067], + [2.605276346206665, -5.012149810791016], + [6.351273059844971, -1.2162230014801025], + [1.505801796913147, -4.770047187805176], + [0.5315564274787903, -7.0679473876953125], + [7.990667819976807, -2.3566582202911377], + [0.9673777222633362, -6.051460266113281], + [7.94147253036499, -2.3578364849090576], + [-4.301418781280518, -3.0298855304718018], + [-1.802466869354248, 1.8475605249404907], + [-3.7112362384796143, -1.7805653810501099], + [-3.7582736015319824, -3.4766204357147217], + [7.350003719329834, -3.0864245891571045], + [-3.200115919113159, -2.5068552494049072], + [-4.349361896514893, -1.560653805732727], + [0.36089348793029785, -7.3741455078125], + [-1.3785146474838257, 11.393102645874023], + [8.28336238861084, -2.450573205947876], + [-2.812223196029663, 0.07200533151626587], + [1.9199628829956055, 2.523677110671997], + [1.0979901552200317, 3.4702651500701904], + [-0.28675585985183716, 9.432541847229004], + [0.5660755038261414, -7.235344886779785], + [2.647836446762085, -4.813401222229004], + [0.3440769910812378, -6.000783920288086], + [-2.9764785766601562, -0.2280791997909546], + [-1.2979776859283447, 11.489370346069336], + [-2.0317001342773438, 1.9019114971160889], + [2.0083489418029785, -4.518951416015625], + [0.6843018531799316, -8.663103103637695], + [-1.2719935178756714, -0.7147842645645142], + [3.031134843826294, -5.596711158752441], + [0.7012746334075928, 6.409319877624512], + [-1.5056582689285278, -0.9193637371063232], + [-3.3764142990112305, 5.530984878540039], + [0.7013968825340271, -7.234908103942871], + [0.6356590986251831, -7.501786708831787], + [1.876753568649292, -6.190866470336914], + [0.5266181230545044, -6.746732234954834], + [2.42684268951416, -4.982569694519043], + [1.5314149856567383, -4.1872453689575195], + [-3.226412296295166, -0.6137250661849976], + [-0.7040640711784363, 10.552740097045898], + [-5.17001485824585, -1.0996801853179932], + [6.159396171569824, -1.6751102209091187], + [0.17142891883850098, -6.351474761962891], + [-3.767817258834839, -1.748419165611267], + [1.0064399242401123, 4.895025253295898], + [-3.256176710128784, -2.536670207977295], + [0.7511849403381348, -4.247777938842773], + [-0.6316882967948914, 10.40155029296875], + [0.6916550397872925, -4.7425079345703125], + [2.8882341384887695, -4.54547643661499], + [-1.3092808723449707, 11.337623596191406], + [0.7474275231361389, -8.92099666595459], + [-2.7645394802093506, -3.7602548599243164], + [0.6566981673240662, -4.663237571716309], + [-0.4096914529800415, 6.418008804321289], + [0.5600181221961975, -7.774714469909668], + [-2.388119697570801, -1.7352286577224731], + [1.2115387916564941, -5.814818382263184], + [-0.7891156673431396, 9.84281063079834], + [-1.1417851448059082, -3.863262414932251], + [3.8025548458099365, 6.708754062652588], + [-1.302962064743042, 1.1384862661361694], + [-2.2090516090393066, 0.4040350914001465], + [-3.036984920501709, -1.7432304620742798], + [2.126918315887451, 4.914909839630127], + [2.6212148666381836, 0.7789936065673828], + [-3.8917324542999268, -2.121458053588867], + [0.5772551894187927, -7.229310035705566], + [-1.2186436653137207, 11.422696113586426], + [-3.066028594970703, 7.106012344360352], + [-0.676325261592865, -1.424505352973938], + [-3.236659526824951, -1.7595785856246948], + [-0.2633991837501526, -0.7573413848876953], + [1.606199860572815, 4.083929538726807], + [1.8173779249191284, 2.4570252895355225], + [0.393246591091156, -5.147827625274658], + [-0.503816545009613, 10.658108711242676], + [-1.8460577726364136, 1.0376191139221191], + [2.3659918308258057, 0.7354846000671387], + [0.8512383103370667, -6.130166530609131], + [-3.64482045173645, -2.0484025478363037], + [-4.0201029777526855, -4.088068008422852], + [-4.8945698738098145, -0.5645055174827576], + [0.5786098837852478, -6.109971046447754], + [-4.709114074707031, 5.953338146209717], + [2.8123586177825928, -4.686318397521973], + [-3.482184648513794, -1.2011919021606445], + [-1.3778681755065918, 1.3493164777755737], + [4.251725196838379, 7.326478958129883], + [-3.5354769229888916, -1.1145776510238647], + [2.6029632091522217, -5.26229190826416], + [-0.5053719282150269, 10.428298950195312], + [0.21153128147125244, -6.409079074859619], + [-1.2802329063415527, 11.671436309814453], + [-3.552281618118286, -1.3238691091537476], + [0.12535271048545837, -4.771751403808594], + [0.4510708451271057, -6.58650016784668], + [-2.8105738162994385, -1.1339300870895386], + [-3.156322717666626, 5.421943187713623], + [8.859248161315918, -3.581251859664917], + [-4.139970779418945, -2.4829461574554443], + [-3.687250852584839, -1.1817454099655151], + [1.4355881214141846, 6.236330032348633], + [0.8059301972389221, -5.849061012268066], + [-0.3831665515899658, 10.247430801391602], + [-4.791060924530029, 5.674424648284912], + [-5.149960517883301, 6.613143444061279], + [-4.4794602394104, 6.611580848693848], + [-5.445890426635742, 6.021878719329834], + [-0.36502450704574585, -1.9094518423080444], + [-0.9313055276870728, -0.6225588321685791], + [4.512000560760498, -3.275733470916748], + [3.00531005859375, -4.931344985961914], + [-0.6595407128334045, 9.916048049926758], + [-3.337303400039673, -1.3705410957336426], + [7.108479976654053, -2.3433187007904053], + [2.2091338634490967, -4.500431060791016], + [-1.512876033782959, 12.311172485351562], + [-0.24229484796524048, 8.622373580932617], + [-2.551448345184326, -0.7214273810386658], + [0.2734408974647522, -5.307721138000488], + [-0.632901668548584, 8.491491317749023], + [8.866433143615723, -2.652423143386841], + [-1.4735051393508911, 0.23811084032058716], + [2.3097617626190186, 5.168893814086914], + [-3.6504204273223877, -2.2261810302734375], + [0.6329745650291443, -8.331684112548828], + [2.4822425842285156, -4.022700786590576], + [-3.2677433490753174, 5.747557163238525], + [-1.5099409818649292, -0.4009048342704773], + [-1.0292460918426514, -3.5374221801757812], + [9.58112907409668, -2.995246648788452], + [2.1161019802093506, 0.1481904834508896], + [3.064221143722534, -4.693735122680664], + [-4.766288757324219, 5.8922319412231445], + [5.449008464813232, -3.6199121475219727], + [-0.5611572861671448, 9.640480041503906], + [-2.213210105895996, -0.9811562299728394], + [8.938084602355957, -3.573187828063965], + [1.084821105003357, 5.5294694900512695], + [3.0025131702423096, -4.764413833618164], + [6.885733604431152, -1.5864181518554688], + [0.2612083852291107, -5.147867679595947], + [-5.338811874389648, 5.6803388595581055], + [7.106149196624756, -2.106560230255127], + [1.516427755355835, 5.945948123931885], + [-1.7961375713348389, 2.1033246517181396], + [3.317204713821411, -3.550441026687622], + [6.236616611480713, -3.107147455215454], + [-4.734862804412842, 6.618325233459473], + [2.4991564750671387, -4.704123497009277], + [7.584207534790039, -3.0848162174224854], + [-2.62398362159729, 5.7134270668029785], + [1.819216251373291, 2.254474639892578], + [-3.7974607944488525, -2.409475326538086], + [-4.456583023071289, -0.9000214338302612], + [-1.275791049003601, 1.9682201147079468], + [0.30515629053115845, -5.529007434844971], + [0.6085967421531677, -7.627026557922363], + [1.7100789546966553, -4.65677547454834], + [8.027470588684082, -2.3669416904449463], + [-3.506366491317749, -1.8978482484817505], + [-4.434378147125244, -3.2809641361236572], + [3.096693992614746, -5.222733497619629], + [-4.351357936859131, -4.693040370941162], + [-0.9470381140708923, -0.8626530170440674], + [-0.2290036678314209, -0.8699378371238708], + [2.5625734329223633, -4.358272552490234], + [-3.6717913150787354, -1.3816198110580444], + [-3.821359395980835, -0.8445494174957275], + [5.536243915557861, -1.2458802461624146], + [-1.7405246496200562, 1.7273329496383667], + [-1.5392078161239624, 1.2199358940124512], + [2.948094606399536, -5.041090965270996], + [1.9151867628097534, 5.1288347244262695], + [-0.993825376033783, -0.7175072431564331], + [1.876009464263916, -5.611517906188965], + [-0.08868808299303055, -3.4065945148468018], + [1.4311721324920654, -4.292342185974121], + [-3.8380606174468994, -2.9878041744232178], + [3.8681678771972656, 6.9697723388671875], + [1.9440314769744873, -5.004122734069824], + [0.4959656000137329, -7.870661735534668], + [-1.2217955589294434, -0.49675652384757996], + [-4.029122352600098, -0.6625645160675049], + [-1.6768896579742432, 1.3435943126678467], + [0.7253887057304382, -9.449455261230469], + [-1.4205538034439087, 12.155211448669434], + [7.311975955963135, -2.8374674320220947], + [-1.070568561553955, 10.851055145263672], + [-4.524549961090088, -0.6935281157493591], + [-0.6210874915122986, -1.4805397987365723], + [-0.2017560601234436, -4.431455612182617], + [-0.8019466400146484, -1.4057084321975708], + [-4.715182781219482, -1.47744882106781], + [-0.06347224861383438, -3.7275097370147705], + [5.613969326019287, -1.6733909845352173], + [2.0417845249176025, 5.295405387878418], + [2.655473470687866, -4.193653106689453], + [1.9566395282745361, 4.633710861206055], + [7.314753532409668, -2.5807347297668457], + [-5.489726543426514, -0.5891208648681641], + [0.7364709973335266, -5.459192276000977], + [7.162999629974365, -3.3122403621673584], + [1.983100175857544, -5.985013961791992], + [0.6586834788322449, -5.7974853515625], + [-1.6733490228652954, 1.6511003971099854], + [3.0030314922332764, -4.820549488067627], + [-4.66267728805542, -4.6844482421875], + [0.4850007891654968, -7.527729034423828], + [0.7262466549873352, -6.856194019317627], + [-1.3831366300582886, 11.98086166381836], + [0.3917922377586365, -5.1282758712768555], + [1.244897723197937, -5.04821252822876], + [-1.2808005809783936, 11.141357421875], + [-4.333733081817627, -2.2177956104278564], + [4.7512736320495605, -2.5063159465789795], + [-2.94602108001709, 5.944899559020996], + [-0.3865489959716797, 6.640179634094238], + [0.5357180237770081, -7.359244346618652], + [1.6436128616333008, -6.041059970855713], + [7.558448314666748, -2.2875900268554688], + [9.078103065490723, -2.9531633853912354], + [6.718239784240723, -2.3605167865753174], + [2.6707870960235596, -4.418155670166016], + [1.1182998418807983, 0.12676702439785004], + [-4.02162504196167, 6.110802173614502], + [2.085472583770752, 0.3943442702293396], + [0.04562007635831833, -4.788914203643799], + [-3.3587558269500732, -3.4496233463287354], + [-0.8405795097351074, 10.464767456054688], + [0.6178683638572693, -5.172187805175781], + [-1.2068567276000977, 10.66260814666748], + [0.6975730061531067, -7.109657287597656], + [6.105207920074463, -2.760981321334839], + [-4.497219562530518, 6.863969802856445], + [0.3005468547344208, -0.9432109594345093], + [-1.2960842847824097, 11.190765380859375], + [1.5230058431625366, 5.458840370178223], + [0.46693527698516846, -6.936065673828125], + [-5.395710468292236, -1.2101010084152222], + [0.3465951085090637, -6.1516289710998535], + [-0.36404138803482056, -0.7233659029006958], + [-3.7979164123535156, -0.9044249057769775], + [1.481821060180664, -5.607372760772705], + [0.6992729306221008, -7.016147136688232], + [-1.7081018686294556, -1.5039012432098389], + [-3.922891616821289, -1.6468449831008911], + [-0.43638020753860474, 0.6398355960845947], + [2.173753023147583, 0.4888598918914795], + [3.0436110496520996, -5.046865463256836], + [-4.520686626434326, 5.474858283996582], + [-5.097840309143066, 6.268557548522949], + [2.7431695461273193, -4.839323043823242], + [-3.637634038925171, -1.2032805681228638], + [-4.092428684234619, -2.63431453704834], + [0.5103719234466553, -7.919508934020996], + [-1.4162089824676514, -0.644841194152832], + [-1.8290190696716309, 1.0111061334609985], + [-4.023542404174805, 6.480885982513428], + [-3.1487247943878174, 5.102018356323242], + [0.11039500683546066, -4.827652454376221], + [-0.3771499991416931, -0.015839990228414536], + [-1.9784198999404907, 1.9210107326507568], + [-2.2496426105499268, -2.1364734172821045], + [5.95465612411499, -1.0682729482650757], + [0.48830360174179077, -7.667442321777344], + [-0.5224274396896362, -1.2342708110809326], + [-1.9693354368209839, 0.864698588848114], + [3.4071688652038574, 6.427029609680176], + [0.655921995639801, -0.6380778551101685], + [-5.403690814971924, -1.3125008344650269], + [0.5890718698501587, -6.497446537017822], + [-1.992794394493103, 0.8779982328414917], + [-1.1375123262405396, 1.414566993713379], + [2.80175518989563, -4.664302349090576], + [6.716925621032715, -2.7170612812042236], + [-0.6346012949943542, 9.512243270874023], + [-2.687638521194458, 0.5067249536514282], + [1.475793480873108, 2.7525131702423096], + [0.4820461869239807, -6.9690632820129395], + [4.322177410125732, 7.073986053466797], + [2.122420310974121, 4.60624885559082], + [-3.6734211444854736, -1.566351294517517], + [-3.473600387573242, -2.2322230339050293], + [5.3411078453063965, 8.175084114074707], + [-3.7540712356567383, -1.4225751161575317], + [1.7469857931137085, 5.252995491027832], + [-3.749281644821167, -1.3449231386184692], + [3.703780174255371, 6.529818534851074], + [-3.8608810901641846, -1.1034237146377563], + [-2.954432725906372, 3.104576587677002], + [2.217527151107788, 4.409861087799072], + [-3.092261552810669, 5.337472915649414], + [8.959000587463379, -3.34578013420105], + [-3.549431324005127, -2.241370916366577], + [0.9485543370246887, 5.705990314483643], + [-4.221131801605225, 5.218014717102051], + [-1.4684697389602661, 12.24618911743164], + [2.9149839878082275, 5.782588958740234], + [-2.282980442047119, -1.2276960611343384], + [-0.2728249430656433, 8.230733871459961], + [0.16812539100646973, -0.7162090539932251], + [-3.1307320594787598, -1.5222313404083252], + [8.135149002075195, -3.5060513019561768], + [0.6490990519523621, -5.756633758544922], + [0.07874231785535812, -3.067640542984009], + [-0.7013878226280212, 10.371786117553711], + [-3.1226978302001953, -1.7973028421401978], + [0.49992066621780396, -2.2404046058654785], + [-4.246199607849121, -1.1045069694519043], + [-1.849568486213684, 1.7619879245758057], + [-3.616997241973877, -0.13595497608184814], + [-1.8842623233795166, 1.7418979406356812], + [1.6596813201904297, -5.557587623596191], + [7.310861110687256, -4.076233386993408], + [-1.086443543434143, 10.696976661682129], + [-2.370267629623413, -0.24590599536895752], + [1.898766040802002, 0.4388788044452667], + [-4.66640567779541, -3.563328504562378], + [5.796928882598877, -1.684508204460144], + [2.81640362739563, -4.790552616119385], + [-3.4103195667266846, 6.624485969543457], + [1.9513895511627197, 5.685042381286621], + [-3.4984519481658936, -1.6546443700790405], + [-0.7399271130561829, -1.0701552629470825], + [-0.24867069721221924, 8.921531677246094], + [7.521063327789307, -2.892510414123535], + [2.743941068649292, -5.093197822570801], + [-3.9400827884674072, -1.887893557548523], + [-1.010854721069336, -1.6265517473220825], + [1.5992066860198975, 5.448541164398193], + [-4.644595623016357, 6.861577033996582], + [-4.045143127441406, -2.271489381790161], + [8.3569974899292, -2.5996553897857666], + [-1.0481411218643188, 1.746023416519165], + [-3.242716073989868, -0.9546542167663574], + [-4.712970733642578, 5.863659858703613], + [-0.6966408491134644, 10.398954391479492], + [0.278218537569046, -4.526930809020996], + [-1.5216952562332153, -0.8969120979309082], + [1.9287176132202148, 3.3116700649261475], + [2.607778310775757, 4.090981960296631], + [-4.036681652069092, -1.6470328569412231], + [-3.8061296939849854, -1.6473898887634277], + [0.1638253927230835, -4.898462772369385], + [1.7173711061477661, -4.0243425369262695], + [0.5216382145881653, -7.40518856048584], + [0.36620986461639404, -6.011116027832031], + [-1.484677791595459, 12.073786735534668], + [2.520364999771118, -4.135037422180176], + [-4.1691975593566895, -1.847934603691101], + [-1.457412838935852, 12.058324813842773], + [-3.774157762527466, -0.9731594324111938], + [-4.05790376663208, -2.152272939682007], + [2.986807346343994, -4.77329158782959], + [-3.0923068523406982, -0.9588169455528259], + [2.86539888381958, -4.795951843261719], + [-4.740539073944092, -2.4763295650482178], + [3.231142044067383, -5.0049309730529785], + [2.141343355178833, 5.614368438720703], + [-5.2456440925598145, -2.0102603435516357], + [-5.063792705535889, -4.05820894241333], + [-4.394891738891602, -3.302454710006714], + [-4.777184963226318, -4.23744010925293], + [0.7272779941558838, -8.130422592163086], + [0.7216699123382568, -5.372300148010254], + [-4.197149753570557, -1.6214748620986938], + [-4.8367180824279785, 3.9644782543182373], + [-3.870802879333496, 4.027270317077637], + [-1.1294567584991455, 10.287338256835938], + [2.918329954147339, -4.496218681335449], + [1.307701826095581, 2.1242024898529053], + [-0.2069215178489685, 0.8042248487472534], + [-4.049103736877441, 5.123417854309082], + [-4.76000452041626, -0.42908018827438354], + [-0.017287977039813995, 0.9767179489135742], + [1.9715344905853271, 0.6762052774429321], + [7.890972137451172, -3.02213978767395], + [2.677826166152954, 5.651130676269531], + [1.4227572679519653, 0.15050315856933594], + [2.0635275840759277, 0.02772366628050804], + [-3.323899745941162, 5.224712371826172], + [-4.6592278480529785, -0.597396194934845], + [0.5908810496330261, -7.645405292510986], + [-1.7118115425109863, 3.236452579498291], + [0.462779700756073, -7.777082443237305], + [-0.4827178716659546, 9.852327346801758], + [-4.11504602432251, -0.6068425178527832], + [0.7319070100784302, -0.5730231404304504], + [-0.8837262988090515, -0.6379013061523438], + [-1.966138482093811, 2.7063493728637695], + [0.01745092123746872, -4.871466636657715], + [-0.6255198121070862, 9.830726623535156], + [0.4590439200401306, -6.580929756164551], + [-4.048314094543457, 4.205078601837158], + [-1.2498712539672852, 1.1532132625579834], + [-0.11850235611200333, -2.5378901958465576], + [0.3428572118282318, -4.8201446533203125], + [-0.9592148065567017, 10.41363525390625], + [4.050750255584717, 7.43440055847168], + [-3.850527286529541, -2.3116836547851562], + [0.328818142414093, -6.686740398406982], + [3.9124858379364014, -2.9652698040008545], + [1.4608345031738281, 0.1333068609237671], + [0.4602832794189453, -5.361907005310059], + [-1.114016056060791, 10.879133224487305], + [0.37038230895996094, -4.104623794555664], + [2.37858247756958, 6.300758361816406], + [0.7108953595161438, -7.545105457305908], + [-0.6132165789604187, 10.04351806640625], + [5.087210655212402, 8.018512725830078], + [2.611382246017456, 5.815218925476074], + [-3.986046075820923, -2.7821524143218994], + [-4.428760528564453, -0.5406967997550964], + [-2.728811025619507, -0.7490443587303162], + [0.6125037670135498, -7.878439426422119], + [0.5311129689216614, -8.094812393188477], + [-0.48817068338394165, 10.152445793151855], + [-0.5493194460868835, 10.670442581176758], + [0.8589631915092468, -8.544105529785156], + [-1.5248057842254639, -1.0805144309997559], + [-5.415639877319336, -4.561084747314453], + [5.680698871612549, -2.5752294063568115], + [-1.4599443674087524, 1.1750367879867554], + [2.9279963970184326, -4.647990703582764], + [1.932978868484497, 5.841803550720215], + [0.4146822690963745, -5.4290313720703125], + [1.2334868907928467, 5.525482177734375], + [0.6971756815910339, -8.199122428894043], + [1.6280193328857422, 2.0548431873321533], + [0.7757689356803894, -9.615102767944336], + [-0.20601803064346313, 8.760811805725098], + [-0.6524549126625061, 9.39651870727539], + [0.4423944354057312, -4.973428726196289], + [2.341052770614624, 5.356348037719727], + [5.952474117279053, -2.2923150062561035], + [0.27262765169143677, -6.162858963012695], + [-1.263363242149353, 0.02336626872420311], + [1.5971087217330933, 0.9156308174133301], + [-3.1854641437530518, -0.6084978580474854], + [-4.751270294189453, 6.159156322479248], + [2.6357407569885254, -4.414236068725586], + [1.7294546365737915, -5.57370138168335], + [-0.1855963170528412, -0.9094810485839844], + [3.585862159729004, 6.528478622436523], + [2.8585045337677, -4.649187088012695], + [8.69006061553955, -2.5819380283355713], + [-2.0907750129699707, 1.5153074264526367], + [-0.6854626536369324, 10.499771118164062], + [-0.5488638877868652, 9.726791381835938], + [-5.1719069480896, -1.1404234170913696], + [-4.662803649902344, 5.307699203491211], + [0.17362627387046814, -1.1105304956436157], + [-1.2432029247283936, 0.5842146873474121], + [2.6849918365478516, 2.848576545715332], + [4.547788143157959, 7.257214546203613], + [7.853084087371826, -2.699263334274292], + [-3.1855356693267822, -1.2096751928329468], + [-1.9299625158309937, 1.597144365310669], + [2.885469675064087, -5.088910102844238], + [4.459728717803955, -4.305669784545898], + [6.487660884857178, -3.65740704536438], + [2.752394437789917, -4.499197959899902], + [-3.964704751968384, -1.5560022592544556], + [7.477752208709717, -2.773960828781128], + [6.409905910491943, -4.062108039855957], + [0.6948261857032776, -7.216216087341309], + [-4.192047119140625, -1.1505016088485718], + [-0.4898993968963623, -3.7876293659210205], + [-3.8081657886505127, 4.496368408203125], + [-0.5689016580581665, 9.981130599975586], + [0.2935567796230316, -5.473038673400879], + [0.0007975324988365173, -5.485920429229736], + [-2.479116678237915, -0.9245586395263672], + [-4.070987701416016, -2.483736515045166], + [0.9935470223426819, -6.334897994995117], + [1.5805025100708008, 0.20985817909240723], + [-0.8197632431983948, -1.1663116216659546], + [0.45407384634017944, -7.43480110168457], + [-3.6978366374969482, -1.2073163986206055], + [-0.3985247015953064, 8.753739356994629], + [-2.920477867126465, -1.4102609157562256], + [-0.532099187374115, 9.590383529663086], + [8.758069038391113, -2.6814346313476562], + [1.5553985834121704, -5.728517532348633], + [-1.2826688289642334, 11.45583724975586], + [-4.500517845153809, 5.40615177154541], + [0.46743136644363403, -5.0425920486450195], + [-5.658718585968018, 7.08400821685791], + [-5.1969194412231445, 7.493117332458496], + [6.826034069061279, -1.932937741279602], + [0.7223820090293884, -7.632444381713867], + [6.129709243774414, -1.5919115543365479], + [-2.711808204650879, -1.0875376462936401], + [9.156659126281738, -2.8311874866485596], + [1.2849630117416382, -0.2088317573070526], + [7.153969764709473, -1.9425517320632935], + [-4.14808988571167, 1.7428449392318726], + [0.3562832474708557, -6.740290641784668], + [0.19567608833312988, -6.48901891708374], + [2.996638536453247, -4.579826354980469], + [-3.739422082901001, 5.303534507751465], + [2.9632108211517334, -4.8062896728515625], + [4.426313877105713, 7.839447021484375], + [2.6117255687713623, -4.370081424713135], + [1.5597347021102905, 2.8062493801116943], + [-0.040978021919727325, -5.4514994621276855], + [-3.82995343208313, -2.718644618988037], + [7.5491180419921875, -2.3306243419647217], + [2.4417521953582764, 3.7671453952789307], + [6.388732433319092, -3.447103500366211], + [-2.9666807651519775, -0.991051435470581], + [-0.30310994386672974, 9.104018211364746], + [-1.181574821472168, -1.2234611511230469], + [-5.942133903503418, 8.033392906188965], + [-4.649019241333008, 5.45661735534668], + [-0.01810479909181595, -4.261548042297363], + [-2.9604811668395996, 3.1685609817504883], + [2.006093740463257, 1.058487057685852], + [0.5646277070045471, -3.7445414066314697], + [1.9995732307434082, 4.436758041381836], + [0.7345142364501953, -8.324760437011719], + [-1.0644385814666748, -0.5311925411224365], + [2.9074676036834717, -4.835417747497559], + [-5.457092761993408, 7.379383087158203], + [-1.3355741500854492, 9.033395767211914], + [-0.6848413348197937, 10.6860990524292], + [2.161379098892212, 0.8860396146774292], + [-0.6840636134147644, 5.352977752685547], + [1.404112696647644, -5.854716777801514], + [-1.0965646505355835, 10.838318824768066], + [-1.7244806289672852, 1.066104769706726], + [2.1324408054351807, 5.135899066925049], + [3.061983823776245, -4.984462261199951], + [-1.8354902267456055, 1.3376069068908691], + [-5.113978385925293, 4.1467061042785645], + [-5.442676067352295, -1.5588747262954712], + [0.32384324073791504, -5.625349044799805], + [0.2391093373298645, -4.253851890563965], + [0.3908793330192566, -7.563571929931641], + [-1.5946147441864014, 1.9991341829299927], + [-0.09689898043870926, -1.6131902933120728], + [-2.964876413345337, -2.2480852603912354], + [2.424715518951416, 5.521639823913574], + [-1.1728365421295166, 11.195509910583496], + [-1.315243124961853, 1.7622956037521362], + [5.685742378234863, -1.9490102529525757], + [0.45014840364456177, -7.376979827880859], + [-2.220844268798828, -1.6183797121047974], + [0.7176186442375183, -3.7627217769622803], + [0.3710261583328247, 7.724211692810059], + [2.234910249710083, -5.630207061767578], + [-0.16006404161453247, 9.360919952392578], + [-3.4305546283721924, -3.967085123062134], + [0.9047986268997192, -5.887637138366699], + [0.8046147227287292, -9.877874374389648], + [-2.1800167560577393, 0.09711450338363647], + [0.732977569103241, 3.213317632675171], + [-4.417372226715088, -1.2124887704849243], + [-3.7560689449310303, -1.3891409635543823], + [3.1761271953582764, -3.617100238800049], + [-0.8878380060195923, 9.917856216430664], + [-4.561351776123047, 6.423008918762207], + [0.790719211101532, -9.708955764770508], + [-0.9153831601142883, 9.974414825439453], + [-4.2935380935668945, -3.7272825241088867], + [-5.300941467285156, 5.7613983154296875], + [-4.549462795257568, -0.8762248754501343], + [1.0831133127212524, -5.146790027618408], + [5.3974175453186035, 8.279352188110352], + [0.47848814725875854, -7.742434024810791], + [2.798093318939209, -4.437553405761719], + [2.5907328128814697, -4.319820404052734], + [-0.04386914521455765, 4.4476728439331055], + [-6.876643180847168, -0.8897757530212402], + [-3.3875088691711426, -1.1149166822433472], + [-4.075469017028809, -0.24824035167694092], + [6.174671649932861, -2.600294351577759], + [-1.984824299812317, 0.6123788952827454], + [-3.045828104019165, -1.5205440521240234], + [-0.6974150538444519, 10.284543991088867], + [2.75274920463562, 6.516287803649902], + [0.4811990261077881, -6.9145965576171875], + [-5.001815319061279, -2.436441659927368], + [9.374220848083496, -2.9373390674591064], + [7.078860759735107, -2.884730577468872], + [-4.87584924697876, 5.995043754577637], + [-4.243391513824463, -2.6176836490631104], + [6.091794967651367, -2.0887491703033447], + [-3.070580244064331, 4.729097366333008], + [1.3658835887908936, -5.831598281860352], + [-3.2743442058563232, -1.1821523904800415], + [-4.456839561462402, -0.4501315951347351], + [0.5718124508857727, -0.7192085981369019], + [-2.8878700733184814, -3.299112558364868], + [-1.2112200260162354, 10.566388130187988], + [7.957594394683838, -2.358144521713257], + [-3.206078290939331, -2.6358861923217773], + [-4.42487096786499, 1.0193265676498413], + [-0.8492920398712158, 10.417811393737793], + [-0.7004538774490356, 9.680097579956055], + [2.465318202972412, -4.049065589904785], + [7.5488972663879395, -2.387906312942505], + [-2.1886613368988037, 1.9137624502182007], + [0.5232592821121216, -6.734746932983398], + [-2.8578741550445557, -0.5620176196098328], + [0.4628726840019226, -4.820260047912598], + [1.28373384475708, 2.077364683151245], + [0.7581564784049988, -9.448564529418945], + [0.546761155128479, -0.9258388876914978], + [2.764234781265259, 6.53796911239624], + [5.613927364349365, -2.4708993434906006], + [-5.27888298034668, -0.7877894043922424], + [7.525309085845947, -3.0341687202453613], + [-1.3240102529525757, 11.34128189086914], + [-2.0914320945739746, -0.46362337470054626], + [-2.064089298248291, 0.7531429529190063], + [-4.117677211761475, 4.286985397338867], + [2.164386034011841, 0.9450281262397766], + [3.026973009109497, 6.369165420532227], + [0.37697601318359375, -5.896940231323242], + [-0.027369089424610138, -2.7089827060699463], + [-0.7164013981819153, 8.848735809326172], + [-3.2273147106170654, -1.9881243705749512], + [0.7481626272201538, -0.5425615310668945], + [-3.2765748500823975, 2.848073959350586], + [-3.2780210971832275, -0.92366623878479], + [-0.9389239549636841, -1.00564444065094], + [0.2369055151939392, -6.0283427238464355], + [2.3010900020599365, -4.452434062957764], + [0.4907963275909424, -7.214439392089844], + [1.0698001384735107, -4.647909164428711], + [-2.1605215072631836, 2.9460372924804688], + [-0.38023465871810913, 9.961335182189941], + [-2.9159862995147705, 3.1696994304656982], + [-4.656116008758545, 6.571531295776367], + [0.6612280011177063, -8.451578140258789], + [-3.1996490955352783, 3.8885085582733154], + [-0.03491491824388504, -4.65403938293457], + [3.8704323768615723, 7.005027770996094], + [-0.8748716115951538, 9.701454162597656], + [-3.7932307720184326, -2.1309778690338135], + [7.260645389556885, -2.2231013774871826], + [-1.918566346168518, 1.0075361728668213], + [1.8778971433639526, 4.77097225189209], + [0.7528740763664246, -0.01822161301970482], + [-1.5739187002182007, 1.87477445602417], + [0.5412583947181702, -7.505939960479736], + [-3.2688510417938232, -1.0510419607162476], + [0.19229388236999512, 4.833920001983643], + [0.3228628635406494, -6.854750633239746], + [-1.25718092918396, 11.150590896606445], + [-1.0776879787445068, 10.829734802246094], + [4.574870586395264, -3.8852522373199463], + [-4.898806571960449, 5.964137554168701], + [-3.867274522781372, -2.1765778064727783], + [0.47120124101638794, -5.790380477905273], + [-0.7159603238105774, 10.088850021362305], + [-1.0468641519546509, -0.8334463238716125], + [-4.113381862640381, 6.706354141235352], + [2.7615253925323486, -4.006668567657471], + [6.465842247009277, -4.87846040725708], + [2.7609078884124756, -4.438882827758789], + [-1.0175048112869263, 10.942357063293457], + [-3.0861213207244873, -0.288943350315094], + [1.5463734865188599, 0.17302903532981873], + [-1.7089177370071411, 0.5807613134384155], + [0.05035819858312607, -5.7446441650390625], + [1.5155572891235352, 1.1315643787384033], + [0.04495548456907272, 6.20746374130249], + [0.6164256930351257, 6.393986701965332], + [-2.3476200103759766, 2.5411460399627686], + [7.959299564361572, -2.9571373462677], + [-3.9319193363189697, 5.282864570617676], + [0.43573570251464844, -6.91893196105957], + [-1.284389853477478, 11.370755195617676], + [0.7332760691642761, -9.469320297241211], + [-5.532352924346924, 6.055522441864014], + [-3.680884838104248, -1.3389993906021118], + [0.6538271307945251, -8.501033782958984], + [2.4016945362091064, -4.239381790161133], + [0.7286524176597595, -8.224961280822754], + [-2.1992828845977783, 1.5249525308609009], + [0.646756112575531, 5.327980041503906], + [-0.8943618535995483, 10.637170791625977], + [0.7149733304977417, -6.320773124694824], + [2.4462578296661377, -4.191102981567383], + [-3.8799350261688232, -2.854691743850708], + [9.125730514526367, -2.673804998397827], + [0.5932198166847229, -4.071182727813721], + [-2.6588783264160156, -1.4684332609176636], + [-4.965946197509766, 5.086024284362793], + [-3.4371790885925293, -1.0369502305984497], + [7.812560558319092, -2.4345510005950928], + [0.6956980228424072, -8.65249252319336], + [4.4340996742248535, 7.843578338623047], + [-0.5581342577934265, 10.003233909606934], + [-1.7038367986679077, -1.732314944267273], + [-2.1168079376220703, -3.0734808444976807], + [-0.44031769037246704, 9.674949645996094], + [2.1926395893096924, 5.780892372131348], + [1.5862817764282227, -5.561272144317627], + [-1.0460304021835327, 8.80887222290039], + [-0.13455772399902344, -4.720189571380615], + [2.840791940689087, -5.026340961456299], + [2.8763644695281982, -4.690663814544678], + [0.6040143370628357, -6.980306625366211], + [-4.0390305519104, -1.2577416896820068], + [9.612438201904297, -2.927457571029663], + [0.7517368197441101, -5.517355918884277], + [0.41180211305618286, -7.102204322814941], + [3.0271549224853516, 6.4093499183654785], + [-5.741758823394775, 6.067960739135742], + [7.492795944213867, -2.3700315952301025], + [1.5849730968475342, 2.023894786834717], + [-3.4471542835235596, 5.133817672729492], + [-5.375162124633789, -1.502008080482483], + [0.69986492395401, -8.592737197875977], + [1.9376542568206787, 5.165021896362305], + [-0.5823664665222168, 3.642545223236084], + [-3.993356466293335, -0.13986587524414062], + [0.4388166069984436, -4.3954315185546875], + [1.0645408630371094, 5.492850303649902], + [-1.8061612844467163, -0.48657938838005066], + [2.9113523960113525, -5.413243293762207], + [-5.458302974700928, 1.7979568243026733], + [1.7503153085708618, -3.9128899574279785], + [0.7249699831008911, -5.786695957183838], + [1.3839648962020874, -4.737576007843018], + [-0.7045307159423828, -0.7716087102890015], + [1.7541645765304565, -5.24101448059082], + [0.732079267501831, -7.214813709259033], + [-0.0666760578751564, -3.3787906169891357], + [-3.926996946334839, -2.3410942554473877], + [2.6353516578674316, 6.027064323425293], + [1.3217192888259888, -6.222952842712402], + [-1.748883605003357, 1.578240156173706], + [2.8139891624450684, -4.771907329559326], + [6.711796760559082, -4.605661392211914], + [6.248466968536377, -2.124086618423462], + [1.0084749460220337, -7.048471450805664], + [2.4412643909454346, 3.9505019187927246], + [-2.5782310962677, 5.930675506591797], + [5.0692853927612305, -4.292205810546875], + [-0.246349036693573, 8.786120414733887], + [-0.8673318028450012, 10.540374755859375], + [-1.8396844863891602, 0.673687219619751], + [-1.990452527999878, 5.828094482421875], + [-3.3018665313720703, 4.623654365539551], + [-0.21038144826889038, -1.7249408960342407], + [-2.977109670639038, -1.2718076705932617], + [6.739096164703369, 9.579277992248535], + [6.258121490478516, -3.212632894515991], + [0.12545961141586304, -5.163670539855957], + [-0.20677053928375244, -1.6290735006332397], + [-3.1414711475372314, 0.9860798120498657], + [-1.4585174322128296, 11.628751754760742], + [2.6098077297210693, -4.606610298156738], + [1.8639743328094482, 0.9695307016372681], + [-3.980097532272339, 2.3128509521484375], + [-0.41769731044769287, 8.882345199584961], + [1.08513343334198, 5.463046073913574], + [2.3945672512054443, -4.579751968383789], + [4.24845027923584, 7.5558037757873535], + [1.9529531002044678, -5.617319107055664], + [-4.131364345550537, -2.2168142795562744], + [9.188298225402832, -2.804654836654663], + [0.3672245740890503, -6.279389381408691], + [-1.2450662851333618, 11.083642959594727], + [0.717801570892334, -7.102818012237549], + [1.739476203918457, 2.862750291824341], + [6.604823589324951, -3.3782827854156494], + [0.189597487449646, -5.951668739318848], + [7.645029544830322, -2.5224640369415283], + [0.30437755584716797, -5.782212257385254], + [8.24182415008545, -2.9405453205108643], + [-1.463107705116272, 0.6955224275588989], + [3.0490925312042236, -5.1591386795043945], + [-1.2070311307907104, -0.8195608854293823], + [1.041886806488037, -5.55678653717041], + [0.90660160779953, 4.777334213256836], + [4.91240930557251, 7.897069931030273], + [2.820983648300171, -4.280520915985107], + [-0.4464207887649536, 9.149260520935059], + [4.292712688446045, 7.522997856140137], + [-4.011809825897217, -3.0618178844451904], + [2.8545749187469482, -4.739993095397949], + [0.899356484413147, -5.401952743530273], + [-0.6356511116027832, 10.155414581298828], + [-0.48382920026779175, -0.9570756554603577], + [-0.9752628803253174, 10.63696002960205], + [3.0506350994110107, 5.927896499633789], + [-2.472810983657837, 0.7480144500732422], + [-3.303729772567749, -1.7012810707092285], + [3.873040199279785, 7.008234977722168], + [-3.948612928390503, -1.1055816411972046], + [0.5198565125465393, -8.312714576721191], + [7.527926921844482, -3.4200398921966553], + [2.8228633403778076, -4.674431324005127], + [7.009312629699707, -1.7572391033172607], + [-4.0487165451049805, 5.11281156539917], + [5.677015781402588, -3.7008132934570312], + [-0.3773282766342163, 9.335785865783691], + [7.122622489929199, -3.870880365371704], + [-4.84048318862915, -0.8220221400260925], + [1.9864437580108643, 3.3198494911193848], + [-2.081441640853882, 6.17491340637207], + [-3.2928290367126465, 5.792994976043701], + [2.6040515899658203, -4.455317974090576], + [2.879361391067505, -4.447389125823975], + [-0.3756166696548462, 9.014287948608398], + [-1.6660722494125366, 0.33820804953575134], + [6.824630260467529, -3.02713942527771], + [0.2608080506324768, -5.994962692260742], + [2.643859624862671, 6.563748836517334], + [-0.005152888596057892, 6.6487531661987305], + [-4.377548694610596, 5.418186187744141], + [6.387526988983154, -4.115498065948486], + [1.4798060655593872, 1.443041443824768], + [2.233798027038574, 0.4786246418952942], + [-0.4745045304298401, 9.164253234863281], + [0.9302380681037903, -0.0385882593691349], + [-0.02231711894273758, -1.2198693752288818], + [8.142142295837402, -2.5831222534179688], + [-1.2637882232666016, 1.2772914171218872], + [-3.345690965652466, 3.689471483230591], + [-0.3398817181587219, 8.996986389160156], + [6.486607074737549, -2.5375638008117676], + [-0.6346996426582336, 10.135899543762207], + [0.4921429753303528, -5.5633392333984375], + [-5.249918460845947, 1.7500548362731934], + [0.3395937979221344, -4.670129299163818], + [-0.9468415379524231, -0.6873770952224731], + [2.5606935024261475, -4.381887435913086], + [7.640042781829834, -4.098632335662842], + [-4.433913230895996, -0.6630405187606812], + [-1.197765827178955, -1.3880195617675781], + [-0.6320417523384094, -2.760472536087036], + [-0.8987143635749817, 10.68724250793457], + [-2.609727144241333, -1.0562692880630493], + [7.037430286407471, -3.6692512035369873], + [0.3778144121170044, -6.4462103843688965], + [-4.5139641761779785, -3.8406617641448975], + [-0.9166513085365295, 9.90231704711914], + [-2.037360191345215, -1.172892451286316], + [3.506650686264038, -3.8188564777374268], + [-1.5421968698501587, -0.6051352620124817], + [-1.2800374031066895, 11.656525611877441], + [0.6748054027557373, -7.299834251403809], + [0.4079200327396393, -4.96297550201416], + [-0.11775717884302139, -3.3206450939178467], + [-4.426693439483643, 4.578401565551758], + [2.6936519145965576, -4.719709396362305], + [-3.9616847038269043, 6.387866497039795], + [0.7293753027915955, -6.538811683654785], + [1.421323537826538, 5.631333351135254], + [-3.620002508163452, 5.714517116546631], + [-3.1805989742279053, 5.096340179443359], + [7.56608247756958, -3.3633832931518555], + [3.0664422512054443, -4.2135772705078125], + [-3.3070967197418213, 4.090372562408447], + [-0.523877739906311, -1.0957369804382324], + [3.9670250415802, 7.200901031494141], + [-0.8834877610206604, -1.439398169517517], + [-3.2248423099517822, 4.921693325042725], + [-2.029632568359375, -1.8450591564178467], + [-1.8299384117126465, 0.5674953460693359], + [5.144613265991211, 8.018866539001465], + [-4.513665676116943, 6.03872537612915], + [-0.03757638484239578, -3.3672120571136475], + [-0.028498418629169464, -3.1116318702697754], + [-3.6651246547698975, -1.313797116279602], + [0.999169647693634, -0.14628517627716064], + [-0.8658686280250549, -0.4528355002403259], + [-0.5349664092063904, 9.020007133483887], + [0.48827582597732544, -7.907481670379639], + [0.1454157829284668, -5.803518772125244], + [5.890565395355225, -1.3284845352172852], + [-1.5410634279251099, -1.1025484800338745], + [-4.011178016662598, -2.6951591968536377], + [3.3048288822174072, -5.085789203643799], + [-3.6300036907196045, -3.039491891860962], + [1.0664857625961304, -0.2228018343448639], + [-3.3687632083892822, 6.368768215179443], + [1.040461778640747, -5.619266986846924], + [2.7558040618896484, -4.3438615798950195], + [-4.1000566482543945, -0.11193370819091797], + [0.4310806393623352, -6.884817123413086], + [-3.620037317276001, -3.6045281887054443], + [-2.0571110248565674, 2.0789148807525635], + [3.8772146701812744, 6.744234561920166], + [-4.148880481719971, -1.8499561548233032], + [-1.4612536430358887, -0.2593594491481781], + [0.9622111916542053, -6.993223190307617], + [-3.20647931098938, 6.451303482055664], + [0.592805802822113, -6.834222793579102], + [-3.258873224258423, -1.4134804010391235], + [2.6343462467193604, -4.231977462768555], + [-3.555530071258545, 1.5688023567199707], + [2.145758867263794, -4.278546333312988], + [0.7313788533210754, -7.124478340148926], + [-4.20655632019043, 6.272625923156738], + [1.6990323066711426, -6.123994827270508], + [-3.2529070377349854, -0.33142101764678955], + [-4.136073112487793, -1.17438542842865], + [-4.237503528594971, -0.7336604595184326], + [2.7815158367156982, -4.584048748016357], + [-1.1121809482574463, 10.566560745239258], + [5.552143573760986, 8.253487586975098], + [0.5101227164268494, -6.3256330490112305], + [3.058906316757202, -5.059571266174316], + [-3.7198848724365234, 4.544262886047363], + [-4.0342020988464355, -1.4051249027252197], + [-1.35024893283844, 11.047523498535156], + [-3.461663007736206, 5.699758529663086], + [-3.4128758907318115, -1.230211853981018], + [1.0319950580596924, -0.21640914678573608], + [-0.26986148953437805, -3.1577389240264893], + [-3.6113522052764893, -1.4714223146438599], + [4.090930461883545, 7.125775337219238], + [0.5573321580886841, -7.700782775878906], + [-1.1118794679641724, 1.6154223680496216], + [-0.31856769323349, 9.034358024597168], + [-4.7419257164001465, -0.7029373645782471], + [-3.0485377311706543, -1.6970266103744507], + [-2.324420690536499, 0.42543768882751465], + [-1.4193060398101807, 11.94508171081543], + [2.72589373588562, -5.1329545974731445], + [0.3278443217277527, -6.7273054122924805], + [1.3051233291625977, -6.004905700683594], + [-2.0275967121124268, -0.6248794794082642], + [1.8772858381271362, 0.36489373445510864], + [-1.750436544418335, 0.29724085330963135], + [-1.874027967453003, 1.3652912378311157], + [0.6439498662948608, -6.926695823669434], + [1.180167317390442, 4.542555809020996], + [1.3378565311431885, 1.56300687789917], + [-5.167886734008789, 5.182883262634277], + [-4.7959885597229, 0.4743143320083618], + [-5.041940689086914, -0.4334709048271179], + [-0.6948457360267639, 10.330196380615234], + [-2.1348845958709717, 5.810512542724609], + [-1.0370168685913086, 10.927244186401367], + [2.308133602142334, 5.023587703704834], + [-4.586631774902344, 5.611029148101807], + [2.208883762359619, 6.100737571716309], + [-1.9958583116531372, 2.2470152378082275], + [-3.758709192276001, 6.587343692779541], + [0.7215973138809204, 3.642639636993408], + [0.24703431129455566, -5.498950958251953], + [2.2502825260162354, -4.164562225341797], + [-0.5703371167182922, 11.328035354614258], + [-4.716868877410889, -0.7771672010421753], + [-0.8523170351982117, 10.342155456542969], + [-3.9808452129364014, 5.6271467208862305], + [5.018409252166748, 7.969668388366699], + [1.8077129125595093, -5.423896789550781], + [-3.2658731937408447, -1.6684998273849487], + [-1.4042679071426392, 1.1506866216659546], + [-5.775187969207764, 7.719121932983398], + [-4.088970184326172, -3.1203157901763916], + [-4.189651012420654, 6.346725940704346], + [8.454899787902832, -3.141235113143921], + [-1.6178874969482422, -1.297683835029602], + [-1.5670883655548096, 2.0876638889312744], + [-0.4648086726665497, -0.9296688437461853], + [-4.62042760848999, -1.8913676738739014], + [-4.483577728271484, -1.4953831434249878], + [2.761608600616455, 6.521101951599121], + [1.204063892364502, -5.815779685974121], + [-3.1471564769744873, 6.349503517150879], + [-0.8563023805618286, 10.823755264282227], + [1.7179288864135742, 5.683376312255859], + [-1.4302055835723877, 12.338473320007324], + [0.19074678421020508, -5.79181432723999], + [3.7630081176757812, 6.962364196777344], + [7.015199661254883, -2.236476182937622], + [0.7857736349105835, 5.626349449157715], + [0.7700176239013672, -6.74797248840332], + [-1.5310149192810059, -0.7801114320755005], + [0.5668084025382996, -7.922536373138428], + [0.1782568097114563, -2.7117679119110107], + [2.124598741531372, 5.914097785949707], + [1.7590017318725586, -5.81321907043457], + [0.4882568120956421, -7.690830230712891], + [0.6034261584281921, -7.619920253753662], + [0.6747804284095764, -7.9581298828125], + [0.6109837889671326, -8.35120964050293], + [-1.5784268379211426, 0.8802838325500488], + [-4.459758758544922, -4.726961135864258], + [-1.4343541860580444, -2.7709357738494873], + [-2.390439748764038, 3.6275856494903564], + [-2.086946964263916, 1.9664963483810425], + [3.0072672367095947, -4.712179660797119], + [-4.008910655975342, -1.8852506875991821], + [-1.459134578704834, -0.8843362927436829], + [0.0170929953455925, 7.456515312194824], + [2.227320432662964, 0.9010967016220093], + [2.442018985748291, -3.952026128768921], + [7.0176167488098145, -2.7305731773376465], + [-1.395585060119629, 11.28347396850586], + [-3.071326732635498, 5.833517074584961], + [-0.2459191381931305, -1.7822295427322388], + [0.5897688269615173, -7.218976974487305], + [-5.698019981384277, -1.628589391708374], + [-3.6109158992767334, 5.932816505432129], + [5.190023422241211, -2.9013607501983643], + [0.6741182208061218, -5.157011985778809], + [2.689946413040161, 5.500762939453125], + [2.942204713821411, -6.184683322906494], + [2.593923568725586, -5.892936706542969], + [1.3214561939239502, -6.615688323974609], + [-4.700122833251953, -1.0686167478561401], + [6.543152332305908, 9.462910652160645], + [-1.5329127311706543, -1.1444199085235596], + [2.5044615268707275, 5.313104629516602], + [-1.4984607696533203, 1.3113609552383423], + [-4.149575233459473, -3.909391164779663], + [-0.23048728704452515, 9.27470874786377], + [2.99383807182312, -4.759028434753418], + [7.615133762359619, -3.9210169315338135], + [0.9515358805656433, -8.381322860717773], + [-3.776264190673828, -0.8881489634513855], + [0.6014999151229858, -6.865728378295898], + [-2.617201805114746, -1.4466938972473145], + [-3.560256242752075, -1.5715078115463257], + [-4.493653297424316, -0.9182068705558777], + [1.5213727951049805, -4.219150543212891], + [-2.751929521560669, 5.698648452758789], + [1.0482709407806396, 0.262687623500824], + [0.6039804816246033, -7.900054454803467], + [2.5228936672210693, -4.370761394500732], + [-3.4511630535125732, -2.2023231983184814], + [7.660055637359619, -3.1543667316436768], + [0.6861856579780579, -0.8424640893936157], + [0.40118733048439026, -4.857377052307129], + [3.8959758281707764, 7.274139404296875], + [-3.1440021991729736, -2.4854815006256104], + [-1.1012660264968872, 1.596886157989502], + [-5.494357585906982, -0.7699573040008545], + [-1.8564116954803467, 1.124149203300476], + [1.7539721727371216, 1.3261879682540894], + [2.56925368309021, -5.1212158203125], + [1.5958523750305176, -6.165724277496338], + [-3.830531358718872, 4.865711688995361], + [2.2445805072784424, 0.44775861501693726], + [-0.6631510853767395, 10.054967880249023], + [2.3907883167266846, 5.960873603820801], + [0.03022470325231552, -0.8950864672660828], + [8.305224418640137, -2.752937078475952], + [7.587011337280273, -2.123558759689331], + [2.493903636932373, -3.9880142211914062], + [-0.9559701681137085, -0.3528069257736206], + [-4.752904415130615, -0.8210083246231079], + [-0.9338758587837219, 11.070737838745117], + [0.6198502779006958, -7.272771835327148], + [-4.664439678192139, -4.245021820068359], + [0.5471052527427673, -0.5731973648071289], + [-4.5043625831604, -0.9141900539398193], + [-3.139697313308716, -0.33993053436279297], + [3.3144757747650146, -5.2643513679504395], + [-3.8692657947540283, 2.8712034225463867], + [6.551476955413818, -3.2089364528656006], + [-0.7523268461227417, 10.240096092224121], + [-1.2009012699127197, 11.791759490966797], + [-4.278435230255127, -0.7154906392097473], + [0.4820724129676819, -0.37907254695892334], + [-2.9401302337646484, 3.174262285232544], + [-3.5793330669403076, 4.841761589050293], + [-3.850353717803955, 6.242449760437012], + [-1.4202536344528198, 11.631932258605957], + [7.513059139251709, -2.5958871841430664], + [-3.9057228565216064, 6.089391708374023], + [-4.751494407653809, -1.0384180545806885], + [-4.056209564208984, -2.8156487941741943], + [-1.1899516582489014, -1.5440768003463745], + [-3.176961898803711, -0.8029758930206299], + [0.76753169298172, -5.341381072998047], + [3.8657662868499756, 6.678674697875977], + [-0.8675809502601624, 5.563448905944824], + [-0.6413301229476929, -1.6960127353668213], + [-4.1018877029418945, -1.1572002172470093], + [-2.018935441970825, 1.991693377494812], + [-3.8082668781280518, -2.4717869758605957], + [-4.894355773925781, 6.497658729553223], + [0.2955237030982971, -6.059720039367676], + [-1.9657970666885376, 2.5860021114349365], + [-1.4752554893493652, 0.9433038234710693], + [0.6916963458061218, -4.674705505371094], + [0.5081128478050232, -6.678192615509033], + [-0.9114464521408081, 10.109323501586914], + [-2.901224374771118, -1.319197177886963], + [-4.7608418464660645, 5.810999393463135], + [-2.3581783771514893, -1.7549493312835693], + [-1.3308210372924805, 0.6662774085998535], + [8.91181755065918, -2.899836301803589], + [2.813588857650757, -4.666550636291504], + [-1.4320963621139526, 1.8600056171417236], + [0.5865146517753601, -7.664620399475098], + [6.2989115715026855, -1.5596927404403687], + [0.9734087586402893, -6.019232749938965], + [-4.0002570152282715, -1.5963332653045654], + [-1.9722416400909424, 1.6527341604232788], + [2.5597217082977295, 6.194798469543457], + [-3.943159818649292, -2.0809285640716553], + [2.7627689838409424, -4.563455104827881], + [-4.910812854766846, 6.907604217529297], + [-3.856585741043091, -3.160745620727539], + [5.051342487335205, 7.978492736816406], + [-4.1975579261779785, -3.327256917953491], + [-1.4157063961029053, -0.42612791061401367], + [-4.078486442565918, 6.36823844909668], + [-0.4377378821372986, -2.0319876670837402], + [7.1571431159973145, -3.14365291595459], + [-0.10301702469587326, -0.8908012509346008], + [-3.205150842666626, -1.4788376092910767], + [0.4403148293495178, -5.698099136352539], + [-1.2711502313613892, -0.46124470233917236], + [0.5864920020103455, -7.33747673034668], + [-1.1866838932037354, 10.825607299804688], + [4.8896260261535645, -0.7561986446380615], + [-3.5903759002685547, -0.3020179867744446], + [-2.3532845973968506, 1.187253713607788], + [9.77790355682373, -2.936797857284546], + [-1.8246573209762573, -2.432072877883911], + [-1.2560945749282837, 11.47906494140625], + [3.4137773513793945, 6.772311210632324], + [0.503746747970581, -6.411532878875732], + [-3.7616000175476074, -1.1139349937438965], + [0.1725221574306488, -4.750120639801025], + [-2.836254835128784, 3.016451358795166], + [1.7831201553344727, 2.53594970703125], + [-3.824314832687378, 5.882410526275635], + [-3.7235107421875, -2.4324021339416504], + [1.790292739868164, 1.054289698600769], + [-3.679699420928955, -1.2965248823165894], + [6.400636196136475, 9.262089729309082], + [0.754512369632721, -6.740004539489746], + [-3.6469008922576904, -1.0597507953643799], + [0.5645948052406311, -8.277261734008789], + [-3.3500566482543945, 5.8870697021484375], + [4.387760639190674, -2.441584587097168], + [-3.6945059299468994, -0.381713330745697], + [2.9779226779937744, -4.914459228515625], + [-1.2222975492477417, 11.278416633605957], + [1.8735599517822266, 0.3331359028816223], + [-3.915031671524048, -1.3736999034881592], + [1.7243328094482422, 0.7728962302207947], + [-1.8339725732803345, 1.3164093494415283], + [1.1500356197357178, 4.836984634399414], + [-3.3143768310546875, -0.9641216993331909], + [-3.319389581680298, -1.158974289894104], + [2.4010586738586426, 6.100922584533691], + [2.266953945159912, -5.598723888397217], + [3.5751428604125977, -2.679302215576172], + [2.499284267425537, 6.1751298904418945], + [-3.4230029582977295, -1.866507649421692], + [-4.5539727210998535, 6.606954574584961], + [0.4594692587852478, -0.5778986811637878], + [8.674968719482422, -2.8372414112091064], + [5.913898468017578, -3.470958709716797], + [-3.4920766353607178, -0.8303179740905762], + [-0.1758357584476471, -1.8369944095611572], + [0.6813095808029175, -7.433091640472412], + [-5.533487319946289, 6.751417636871338], + [-0.8956080079078674, 10.133930206298828], + [-3.1851937770843506, -3.0122461318969727], + [-4.943055629730225, -3.7663567066192627], + [-0.030977793037891388, 4.8686909675598145], + [1.1851928234100342, 5.97053337097168], + [-5.194228649139404, -3.987065553665161], + [2.5013883113861084, 4.518306732177734], + [8.223401069641113, -2.3686482906341553], + [-4.447474956512451, 1.3655253648757935], + [4.997874736785889, -1.1208573579788208], + [-5.02324914932251, 6.898334503173828], + [2.195420503616333, -4.30979585647583], + [-4.876518249511719, -0.8433394432067871], + [-0.9501985311508179, 9.977140426635742], + [5.6517157554626465, -2.5795609951019287], + [2.6401095390319824, -5.16669225692749], + [-0.3441740870475769, 8.890729904174805], + [7.979973316192627, -3.3541457653045654], + [0.5798675417900085, -6.5615997314453125], + [-4.05290412902832, -1.2742124795913696], + [0.7153491973876953, -6.034472465515137], + [-5.211828231811523, 7.344481468200684], + [-1.9255263805389404, 1.0096712112426758], + [-2.096928834915161, 2.344594717025757], + [2.2258832454681396, 0.37700510025024414], + [-0.3448561728000641, 5.321600437164307], + [-4.2279133796691895, -3.0005972385406494], + [0.7775775790214539, -4.041968822479248], + [9.138758659362793, -2.7499940395355225], + [-2.052614688873291, 0.00045013055205345154], + [-2.2157578468322754, 0.9242923259735107], + [-3.145312547683716, -1.9589818716049194], + [-1.6784436702728271, 0.8203538060188293], + [0.7213990092277527, -8.874338150024414], + [2.9071481227874756, -4.719837665557861], + [2.422214984893799, 5.0794548988342285], + [-2.7627503871917725, -1.101037621498108], + [2.790461778640747, -4.579794883728027], + [-3.6390647888183594, -1.0505577325820923], + [3.899343729019165, -2.942892551422119], + [7.765430927276611, -2.498013973236084], + [-2.774702310562134, -1.3444998264312744], + [0.5672460198402405, -5.0031538009643555], + [8.724574089050293, -2.642327070236206], + [-0.32981380820274353, -1.223083734512329], + [-1.648193120956421, 1.0847365856170654], + [-4.776588439941406, 6.7119622230529785], + [-0.8504967093467712, 9.997109413146973], + [8.034672737121582, -3.2414872646331787], + [-1.6368911266326904, 0.45101457834243774], + [0.5872282981872559, -6.808099746704102], + [1.87276029586792, -5.423099517822266], + [-1.2746963500976562, 11.355491638183594], + [-3.022164821624756, 5.303201675415039], + [0.686384916305542, -8.057119369506836], + [1.754392385482788, 4.124335289001465], + [-4.165067195892334, -3.940380096435547], + [-0.16710048913955688, 8.326512336730957], + [-4.164149284362793, 6.747871398925781], + [-0.13479599356651306, -1.1501070261001587], + [3.072327136993408, -4.934205532073975], + [0.5090861320495605, -0.6627599596977234], + [3.0763919353485107, -4.822597503662109], + [-5.566864013671875, -1.02131986618042], + [-4.03791618347168, -1.865225911140442], + [-1.2606422901153564, 10.994239807128906], + [-5.034363269805908, 6.269254684448242], + [9.753434181213379, -2.914264440536499], + [2.7522242069244385, -5.732662200927734], + [-0.7619602680206299, 10.037742614746094], + [-1.3384157419204712, 11.829635620117188], + [-3.384272813796997, -1.7239714860916138], + [5.855422019958496, -2.3657567501068115], + [7.842818737030029, -2.275395631790161], + [-5.083001136779785, 5.652327537536621], + [2.535898447036743, 6.1501593589782715], + [1.835810899734497, -4.681804656982422], + [-4.699288845062256, -3.6281871795654297], + [-3.9882562160491943, -2.558023691177368], + [1.6322290897369385, 1.9477461576461792], + [-0.023531563580036163, -3.090508222579956], + [0.3705236315727234, -6.727379322052002], + [2.0793073177337646, -4.701446056365967], + [-3.954200506210327, -2.4456896781921387], + [-0.4597764015197754, 9.604715347290039], + [6.367071628570557, -2.4997785091400146], + [-1.8977054357528687, 1.2954155206680298], + [8.509905815124512, -3.2156307697296143], + [-1.5667452812194824, 12.493794441223145], + [0.8367112278938293, -5.374514579772949], + [-4.547748565673828, 1.6234095096588135], + [-0.9670336246490479, 11.044363021850586], + [0.6369292140007019, -7.337338447570801], + [-3.301008701324463, -0.8892813920974731], + [2.8859856128692627, -4.777889251708984], + [5.782737731933594, -1.202799677848816], + [-3.2735981941223145, -1.1454776525497437], + [0.6170902848243713, -7.517852783203125], + [4.7338080406188965, -3.5971882343292236], + [5.93939733505249, -5.163183212280273], + [1.9113175868988037, -5.929840087890625], + [6.370433807373047, -4.880095481872559], + [-4.849734306335449, 5.632196426391602], + [1.5889875888824463, -4.681950569152832], + [-3.9823720455169678, -1.5141077041625977], + [0.6251382231712341, -7.697351455688477], + [-2.195543050765991, 0.26526278257369995], + [0.45541512966156006, -5.997930526733398], + [-1.2853281497955322, 1.141397476196289], + [0.28323185443878174, -6.496759414672852], + [-2.0302181243896484, -2.138230085372925], + [-3.862190008163452, -1.9046176671981812], + [-4.797733306884766, 6.340203285217285], + [-3.7671010494232178, -0.8816061019897461], + [1.5069726705551147, -6.825740814208984], + [7.764176368713379, -2.624717950820923], + [5.3364410400390625, -1.1447888612747192], + [1.1117262840270996, -6.7376627922058105], + [2.0084474086761475, 5.615442276000977], + [-2.4068729877471924, -0.18726283311843872], + [0.7597141861915588, -8.774053573608398], + [2.5031728744506836, -4.011553764343262], + [-3.4982311725616455, -1.1351324319839478], + [-5.216048717498779, 6.8783674240112305], + [-2.9847402572631836, -1.4621047973632812], + [1.4226744174957275, -0.20924702286720276], + [1.1216822862625122, -5.149665832519531], + [-0.31045758724212646, 8.86474895477295], + [0.20288246870040894, -4.071006774902344], + [-3.876638650894165, -1.4711798429489136], + [-3.2525503635406494, -1.5106462240219116], + [-3.9295783042907715, 5.456022262573242], + [-4.602870941162109, -1.3419023752212524], + [-3.9071037769317627, 5.622170448303223], + [0.6610260009765625, -7.440685272216797], + [2.5603713989257812, -4.383133411407471], + [-4.3938679695129395, 6.042871952056885], + [2.3810482025146484, -4.365761756896973], + [-3.8136746883392334, -1.6475152969360352], + [-3.8379950523376465, -3.826948404312134], + [2.3455517292022705, 5.19454288482666], + [-4.6502766609191895, -3.4997007846832275], + [-1.3283671140670776, 11.95222282409668], + [-0.2844741642475128, -3.6754682064056396], + [0.928952157497406, -5.598465442657471], + [-4.4876532554626465, 5.767587661743164], + [0.33346766233444214, -6.487277984619141], + [-3.9040815830230713, -2.171625852584839], + [3.1881160736083984, 6.607110500335693], + [4.343291759490967, -3.470808506011963], + [-1.830566167831421, 1.63966965675354], + [4.025730609893799, 7.233610153198242], + [2.939040422439575, -0.5181882977485657], + [-1.2064839601516724, 10.640251159667969], + [-2.3915817737579346, 0.08561229705810547], + [0.7866051197052002, 3.5399904251098633], + [1.7926899194717407, 4.265771865844727], + [0.36001157760620117, -4.8677873611450195], + [-4.854190349578857, -3.4858925342559814], + [-3.8609070777893066, -2.9425718784332275], + [-4.114558219909668, -2.0912954807281494], + [-0.6407068371772766, 10.081608772277832], + [3.252953290939331, -3.954416275024414], + [-1.747175931930542, 1.5714064836502075], + [-4.188079357147217, -1.2131009101867676], + [0.5657536387443542, -8.328482627868652], + [-2.9602081775665283, 5.0595221519470215], + [-4.881844997406006, 3.865534782409668], + [-1.0296710729599, 11.640371322631836], + [-1.3175296783447266, 11.316939353942871], + [-0.7900349497795105, 10.782470703125], + [-1.5507608652114868, 3.5386574268341064], + [-2.3427979946136475, 1.4307337999343872], + [-0.9367101788520813, 7.758467197418213], + [-1.2524601221084595, 11.305404663085938], + [1.0750106573104858, -0.02401447668671608], + [-4.269499778747559, -2.3398892879486084], + [7.052271366119385, -4.3867292404174805], + [2.8928349018096924, -4.7647480964660645], + [0.3773198127746582, -4.935581207275391], + [-0.8893775343894958, 9.934955596923828], + [-0.9080798625946045, 1.8006478548049927], + [-3.3887522220611572, 6.144416809082031], + [1.6363877058029175, -3.724928379058838], + [-4.8528571128845215, 6.852132797241211], + [-3.59582781791687, 3.306177854537964], + [-3.8381078243255615, -2.2819416522979736], + [2.86091685295105, -4.990005970001221], + [1.9518072605133057, 5.692480087280273], + [0.6880072951316833, -8.088123321533203], + [-3.7521395683288574, -1.8437038660049438], + [0.31310272216796875, -6.821937084197998], + [2.0088083744049072, -4.4763617515563965], + [0.05609052628278732, 1.0436170101165771], + [-6.4752678871154785, 4.526917934417725], + [0.7365936636924744, -6.01377534866333], + [8.064980506896973, -2.526432991027832], + [1.2599940299987793, 1.2756671905517578], + [3.5746982097625732, 6.5852861404418945], + [-1.3426859378814697, 11.463445663452148], + [1.1905075311660767, -4.9570817947387695], + [-1.7361526489257812, 1.7056010961532593], + [-1.7773184776306152, 0.7091321349143982], + [8.395730972290039, -2.666959285736084], + [0.053972892463207245, -5.441128253936768], + [-1.1988542079925537, 10.640707015991211], + [-3.7528579235076904, -1.251031517982483], + [-0.5747671127319336, 9.869669914245605], + [-3.909487009048462, -1.496698260307312], + [0.12757843732833862, -5.808437824249268], + [-4.770147800445557, 4.957343578338623], + [0.7740201354026794, -7.106277942657471], + [-2.8256161212921143, -0.07228982448577881], + [0.8281901478767395, -4.3913984298706055], + [0.10155471414327621, -1.0886200666427612], + [-1.239393949508667, 10.87380599975586], + [-3.194847822189331, -0.24659699201583862], + [2.09077787399292, 2.7761237621307373], + [-1.3363654613494873, 11.83327865600586], + [2.9434502124786377, -5.144360542297363], + [-0.47537901997566223, 3.476814031600952], + [-0.2308627963066101, 8.304450988769531], + [9.457976341247559, -2.94411301612854], + [-3.1511759757995605, -0.6192867159843445], + [5.415476322174072, -4.003979682922363], + [-3.2283079624176025, 4.196343421936035], + [-3.067073106765747, -1.2905439138412476], + [9.119707107543945, -2.799424409866333], + [0.7728361487388611, -8.470093727111816], + [2.1603710651397705, 5.63405179977417], + [3.146493434906006, -5.185201644897461], + [-5.013095378875732, 6.712628364562988], + [-0.05680961161851883, 7.749300479888916], + [-3.156625986099243, -2.1901657581329346], + [-1.4982242584228516, 0.7047550082206726], + [0.3778027892112732, -6.188541412353516], + [-2.8461787700653076, 5.109796047210693], + [-1.7700164318084717, 2.2384703159332275], + [0.5477442741394043, -5.763999938964844], + [-5.528174877166748, 7.230013847351074], + [9.667357444763184, -2.934352397918701], + [0.3217325806617737, -6.115790367126465], + [-1.775665044784546, 1.9036779403686523], + [0.7069523334503174, -7.273144245147705], + [1.764768123626709, 2.268089532852173], + [-1.8185241222381592, 2.223348617553711], + [-0.2523577809333801, 7.565761566162109], + [2.1066205501556396, -4.392167091369629], + [-2.6486382484436035, -0.9558051824569702], + [2.4350621700286865, -4.0152482986450195], + [2.9324209690093994, -4.299008846282959], + [-0.9357831478118896, 0.43681949377059937], + [0.8280981183052063, -6.763302803039551], + [0.7779360413551331, -8.742022514343262], + [0.5918765068054199, -3.5638439655303955], + [1.1511330604553223, -4.6037750244140625], + [-0.963160514831543, -2.7583038806915283], + [-2.764190196990967, 2.5534939765930176], + [0.8184823393821716, -6.523269176483154], + [5.109019756317139, 8.042213439941406], + [-3.8581583499908447, 5.741180419921875], + [-6.319444179534912, 3.3209714889526367], + [6.9151387214660645, -1.8342140913009644], + [-0.9602370262145996, 10.388124465942383], + [2.895277976989746, -4.636185169219971], + [2.726585626602173, 5.9922990798950195], + [-3.21602463722229, -0.666900634765625], + [8.509383201599121, -3.0624096393585205], + [-3.7695868015289307, 6.477653980255127], + [-0.32834571599960327, 9.439059257507324], + [-4.583465099334717, -1.627841591835022], + [-4.425884246826172, -1.7752174139022827], + [-4.669609546661377, 3.7517905235290527], + [-1.3039271831512451, -2.908048391342163], + [7.5860915184021, -2.610433340072632], + [-2.0048940181732178, 1.5577861070632935], + [-3.0912179946899414, -0.3215470314025879], + [-4.285788059234619, 5.4316511154174805], + [-3.4916770458221436, -1.7846609354019165], + [2.695765733718872, -4.296165466308594], + [1.6823900938034058, -4.757213592529297], + [2.98017954826355, -4.257694244384766], + [7.42301607131958, -3.5707590579986572], + [-3.2830069065093994, -2.5874974727630615], + [-4.9488091468811035, -1.3269482851028442], + [-1.108229160308838, 11.544841766357422], + [8.371764183044434, -2.569735288619995], + [1.853290319442749, 2.8825831413269043], + [0.5888088941574097, -0.7183098196983337], + [0.6367704272270203, -8.5858154296875], + [-1.0980414152145386, 10.576086044311523], + [-0.7103555798530579, 10.564738273620605], + [2.2263076305389404, -4.691591262817383], + [-1.1955413818359375, 10.675586700439453], + [-1.1902318000793457, 10.774417877197266], + [3.679258108139038, -4.486304759979248], + [2.914738416671753, -4.819677352905273], + [8.548178672790527, -2.5360448360443115], + [8.740212440490723, -2.7151925563812256], + [1.1474778652191162, -5.7962646484375], + [0.24359130859375, -1.1017848253250122], + [2.036184549331665, 3.485565185546875], + [8.923763275146484, -3.4193904399871826], + [-1.0989569425582886, 11.23763656616211], + [7.730994701385498, -2.4624927043914795], + [0.04110320657491684, -4.977442741394043], + [-1.3490362167358398, 9.577890396118164], + [5.054968357086182, -0.8676515817642212], + [-1.721975564956665, -0.7515352368354797], + [5.911370754241943, -4.261120796203613], + [0.14125743508338928, -2.2525227069854736], + [8.022968292236328, -2.426004409790039], + [-0.23519223928451538, 8.22574234008789], + [8.846938133239746, -2.873500108718872], + [-0.4981920123100281, 10.131118774414062], + [0.9553443789482117, 1.1755238771438599], + [-1.1428104639053345, 10.865116119384766], + [-1.7965539693832397, 1.5193148851394653], + [0.2680763006210327, -6.716147422790527], + [-3.3429324626922607, -2.8386900424957275], + [5.695129871368408, -0.5404176712036133], + [-1.2150897979736328, 0.6180527210235596], + [6.490732192993164, -2.9294939041137695], + [2.8163859844207764, -4.2852559089660645], + [-3.222740650177002, -1.2951459884643555], + [0.7464075684547424, -8.259668350219727], + [-0.6718899607658386, -0.17157049477100372], + [-0.0618160143494606, -3.128303050994873], + [-1.7239093780517578, 1.3363862037658691], + [-5.648791790008545, 5.224743366241455], + [2.645759344100952, -4.202847480773926], + [-4.858343601226807, -1.1906933784484863], + [0.5341145992279053, -6.041686058044434], + [-0.3158189356327057, -1.485808253288269], + [2.0640180110931396, 0.6364327669143677], + [-2.919323205947876, -1.0047500133514404], + [-1.4377557039260864, -2.1058719158172607], + [-1.950725793838501, 1.65058434009552], + [4.563741207122803, 7.694725513458252], + [2.4225213527679443, 5.203058242797852], + [3.676305055618286, 6.868617057800293], + [-3.89897084236145, -2.668945074081421], + [1.5791534185409546, 4.775300025939941], + [-4.086342811584473, -1.5577646493911743], + [-5.109714508056641, 7.781766414642334], + [-3.65033221244812, -1.3721981048583984], + [2.8369808197021484, -4.683601379394531], + [2.123878002166748, -4.951125144958496], + [0.6022784113883972, -7.627398490905762], + [6.009947299957275, -1.4633640050888062], + [0.14351078867912292, -4.969789505004883], + [7.580999851226807, -2.1673710346221924], + [0.8690809011459351, -5.3124213218688965], + [2.0211689472198486, 2.8417398929595947], + [7.682733058929443, -2.6610467433929443], + [1.4806314706802368, 5.27432918548584], + [-1.4681522846221924, 12.405256271362305], + [2.058999538421631, -5.2935895919799805], + [-2.0567283630371094, 2.251722812652588], + [-1.5737299919128418, -1.2759021520614624], + [0.3043556809425354, -6.312749862670898], + [-3.535233497619629, -1.1654694080352783], + [-2.4884519577026367, -2.9476118087768555], + [-4.975948810577393, 5.57090950012207], + [-1.8462281227111816, 2.015387773513794], + [5.25171422958374, 8.07126235961914], + [8.598284721374512, -2.6400201320648193], + [2.825704336166382, -5.039645195007324], + [1.4046356678009033, 1.3385024070739746], + [0.4079653024673462, -5.863041400909424], + [6.225552082061768, -2.3557255268096924], + [-3.712324380874634, -1.0725103616714478], + [-4.341692924499512, -0.5444403886795044], + [0.22565966844558716, -3.6486499309539795], + [2.647897958755493, -4.379639625549316], + [-5.412804126739502, -1.0582164525985718], + [-3.7846462726593018, -1.3826059103012085], + [-3.3623297214508057, -1.4671725034713745], + [5.67135763168335, -1.9261269569396973], + [1.7990257740020752, 5.904168128967285], + [-0.851442277431488, 10.886476516723633], + [0.4249517321586609, -6.3200836181640625], + [-1.694225788116455, 2.0294134616851807], + [1.099966049194336, 1.060645580291748], + [2.7277491092681885, -4.536849498748779], + [-0.9016208648681641, 1.123064398765564], + [-1.9710814952850342, 2.223400831222534], + [-0.3343379497528076, 8.139484405517578], + [-3.6327133178710938, -1.3366472721099854], + [0.5842837691307068, -7.822248458862305], + [-4.969973564147949, 0.03786015138030052], + [0.750769853591919, -5.593559265136719], + [-2.4607725143432617, -1.699345350265503], + [-4.661910057067871, 6.0260748863220215], + [3.704286813735962, 0.9453173279762268], + [0.4091885983943939, -5.099339485168457], + [-4.646362781524658, -4.149990081787109], + [-4.150839328765869, 6.366127967834473], + [-2.008317708969116, 0.4314810037612915], + [0.40997034311294556, -5.991156101226807], + [-4.08760404586792, -1.6022415161132812], + [-1.878525972366333, 1.9743677377700806], + [0.6580126881599426, -7.482230186462402], + [0.2779536545276642, -5.135753631591797], + [-0.7771538496017456, 10.712739944458008], + [0.46300429105758667, -4.748767375946045], + [2.762158155441284, -5.115194320678711], + [-1.6827048063278198, 1.568490982055664], + [-4.204578399658203, -1.4910222291946411], + [-3.801898717880249, -3.2164504528045654], + [-1.9809186458587646, 2.2748236656188965], + [2.902102470397949, -5.178267478942871], + [-3.894824504852295, -3.629962205886841], + [-1.8920223712921143, 1.9099773168563843], + [3.015515089035034, -4.623478889465332], + [-1.1519721746444702, 10.276952743530273], + [-2.6725919246673584, -1.8621281385421753], + [-4.479476451873779, 6.242710113525391], + [-1.8671398162841797, 1.5736734867095947], + [0.3616148829460144, -5.678981781005859], + [1.6336331367492676, -5.284235954284668], + [-5.032724380493164, -1.161609172821045], + [0.48873084783554077, -0.7323707938194275], + [6.204049587249756, -2.0255255699157715], + [-1.402948021888733, 0.9849514961242676], + [-5.336085319519043, 3.9455201625823975], + [-0.4461379051208496, 9.357759475708008], + [2.418276786804199, 5.591806411743164], + [-3.1952311992645264, -1.2101103067398071], + [8.799821853637695, -2.6790554523468018], + [2.928706645965576, -4.631834983825684], + [-4.129541397094727, -3.3287127017974854], + [-4.619896411895752, -2.975123643875122], + [-5.005040168762207, 6.124584197998047], + [-1.3297525644302368, 11.484743118286133], + [0.5614240765571594, -7.4798502922058105], + [9.017250061035156, -2.8612098693847656], + [-4.268693447113037, 6.131357192993164], + [-4.270239353179932, 1.8369468450546265], + [-3.480276584625244, -1.1053601503372192], + [0.6950857043266296, -4.861270904541016], + [-5.295990467071533, 7.5530595779418945], + [6.677667140960693, -3.7743093967437744], + [0.6432435512542725, -6.90278434753418], + [2.0068366527557373, -4.997560024261475], + [0.6187800765037537, -0.7372090220451355], + [8.693904876708984, -2.795825242996216], + [-3.0700855255126953, -0.8943843245506287], + [9.019320487976074, -2.7982516288757324], + [-1.8580230474472046, 0.007974740117788315], + [-4.7194905281066895, 5.008410930633545], + [3.8165996074676514, 6.385949611663818], + [-1.7940548658370972, 0.995447039604187], + [5.862473964691162, -2.672642469406128], + [1.6366684436798096, 0.017412658780813217], + [-0.6244421601295471, 10.038583755493164], + [-3.3205645084381104, -1.1948899030685425], + [-1.9194775819778442, 2.595036745071411], + [-1.9409511089324951, 2.2260823249816895], + [3.991253137588501, -5.019806861877441], + [0.2544834613800049, -6.1125593185424805], + [3.0711052417755127, -0.3201519250869751], + [0.31000852584838867, -6.593852996826172], + [-0.4484730660915375, -1.1821080446243286], + [-4.818887233734131, -3.344365358352661], + [0.711074709892273, 4.597288131713867], + [1.2390457391738892, -3.2400765419006348], + [-4.731626510620117, 7.055157661437988], + [-4.208023548126221, 0.17423361539840698], + [0.2353076934814453, -5.440481662750244], + [-3.4072964191436768, -1.2185306549072266], + [-1.9550670385360718, 0.9376142621040344], + [2.815896511077881, -4.483511447906494], + [-4.547806739807129, 4.02041482925415], + [1.9036787748336792, 0.15923868119716644], + [-1.3257874250411987, -1.0074900388717651], + [3.9608309268951416, -5.768224716186523], + [3.952129602432251, -5.658810615539551], + [-2.0065128803253174, 1.0526607036590576], + [0.5503464341163635, -6.598083972930908], + [5.735233783721924, -2.250833034515381], + [4.505089282989502, 7.336562156677246], + [-1.3569176197052002, 11.85862922668457], + [0.44879716634750366, -6.108537197113037], + [-2.1454336643218994, -0.4853231906890869], + [6.605475425720215, -5.319936275482178], + [-1.9955806732177734, 2.0066261291503906], + [0.4304385781288147, -6.344270706176758], + [6.50503396987915, -2.2741949558258057], + [-1.2408177852630615, 10.846456527709961], + [3.048062562942505, 4.908900260925293], + [0.9702218174934387, -5.273847579956055], + [-0.9349111318588257, 10.705339431762695], + [0.18130606412887573, -5.8203630447387695], + [-5.202600002288818, -1.0097432136535645], + [-4.377735614776611, -0.9935203790664673], + [5.174731254577637, -1.4922250509262085], + [-0.6358270049095154, 7.528041839599609], + [1.1805750131607056, -4.515575408935547], + [5.558478832244873, -1.3438550233840942], + [-3.14245867729187, -0.930138111114502], + [-4.634429454803467, 6.104704856872559], + [-5.411932468414307, 4.708645820617676], + [-1.103367567062378, 10.108908653259277], + [1.3236503601074219, 3.7272284030914307], + [-1.31639564037323, 0.3141874670982361], + [5.62531042098999, -1.645400881767273], + [2.080693483352661, -4.4922075271606445], + [-1.8321267366409302, 1.0451648235321045], + [8.416479110717773, -2.6543381214141846], + [-5.607982635498047, -1.0908123254776], + [-1.2627911567687988, 11.244805335998535], + [-0.028957374393939972, -1.3831616640090942], + [-1.35830819606781, 11.513185501098633], + [2.1693153381347656, 5.805513381958008], + [3.095043897628784, 6.470133304595947], + [-3.168421506881714, 6.110652923583984], + [-3.8656857013702393, -2.439105272293091], + [-1.4878853559494019, 1.3151403665542603], + [-4.736522197723389, 6.731924057006836], + [-3.933168411254883, -1.1780030727386475], + [2.8418595790863037, -4.482511520385742], + [-3.1097524166107178, -1.5793708562850952], + [1.1441867351531982, 1.4850131273269653], + [2.979883909225464, -5.025423526763916], + [-2.172332525253296, 1.7914363145828247], + [2.8892364501953125, -4.5642194747924805], + [0.7921220064163208, -0.5541568994522095], + [-3.473712205886841, -0.8370475769042969], + [1.623348593711853, 6.2484002113342285], + [-1.4739056825637817, 12.991365432739258], + [-4.064743518829346, -1.7970038652420044], + [3.824976682662964, -3.2738730907440186], + [4.263649940490723, -3.985607147216797], + [-3.8731348514556885, -1.840889811515808], + [-1.013428807258606, 9.734685897827148], + [9.454829216003418, -2.9805729389190674], + [0.13732576370239258, -6.1268310546875], + [7.915007591247559, -2.3470098972320557], + [0.17739808559417725, -5.0367751121521], + [2.875631093978882, -6.416240215301514], + [0.3161882758140564, -4.798245429992676], + [0.7310041189193726, -0.10229402780532837], + [-3.6048943996429443, 6.106907844543457], + [2.8958940505981445, -4.541259288787842], + [-3.917287588119507, -2.320798873901367], + [-1.9465091228485107, 0.9726176261901855], + [4.528515815734863, 7.710910797119141], + [-1.2732634544372559, 11.318122863769531], + [1.64655339717865, 1.9673255681991577], + [9.420933723449707, -2.889033555984497], + [-3.799349069595337, 5.417728424072266], + [-4.034892559051514, -2.615384578704834], + [0.41871577501296997, -5.712765693664551], + [-3.6253044605255127, -1.2095080614089966], + [0.38786253333091736, -5.464350700378418], + [-2.0138556957244873, 0.5293290615081787], + [0.5698767304420471, -3.708836317062378], + [-1.0539896488189697, -0.0751354992389679], + [-0.6711966395378113, 9.839197158813477], + [-4.803259372711182, 6.055176734924316], + [-3.519876718521118, -2.6885879039764404], + [1.0451910495758057, -7.279236793518066], + [-1.3715070486068726, -0.6170662045478821], + [2.782597780227661, -4.660704612731934], + [-4.480173587799072, -2.995413064956665], + [0.5953377485275269, -5.183835029602051], + [0.5584003329277039, -7.916597843170166], + [2.009361505508423, 6.110527038574219], + [-3.4973502159118652, -1.152302861213684], + [0.19105100631713867, -5.568864822387695], + [1.9207582473754883, -5.571297645568848], + [-5.0848774909973145, 6.985592365264893], + [-4.228214263916016, -2.7411744594573975], + [-4.92100191116333, 4.789711952209473], + [-3.110100030899048, -2.195986032485962], + [2.5877017974853516, 6.430582523345947], + [-2.7466635704040527, 3.709747076034546], + [-2.120673179626465, 2.3175220489501953], + [7.631679534912109, -2.398024797439575], + [-2.2587602138519287, 0.8762473464012146], + [-0.7738026976585388, -0.5651547908782959], + [0.6463439464569092, -7.492602348327637], + [-2.938908815383911, -1.0301908254623413], + [-2.913606643676758, 5.024569511413574], + [0.21117466688156128, -5.892048358917236], + [0.6656920313835144, -9.267873764038086], + [-2.9434683322906494, -0.9337315559387207], + [-3.6811840534210205, 5.918234825134277], + [2.994192123413086, 5.8233747482299805], + [-1.3559123277664185, 12.03045654296875], + [-1.2414981126785278, 11.477107048034668], + [-3.622614622116089, -2.3969171047210693], + [-3.752518892288208, -1.3744982481002808], + [1.3384820222854614, 0.11378675699234009], + [1.1557438373565674, 0.015333320945501328], + [2.013681650161743, 5.979008674621582], + [-4.55818510055542, 0.029100771993398666], + [-4.056650161743164, 5.2397541999816895], + [-4.259962558746338, -1.9989789724349976], + [0.9565452933311462, -5.799557209014893], + [-1.226474404335022, 11.389730453491211], + [-3.1030051708221436, -0.7870683670043945], + [0.5135732293128967, -3.8148481845855713], + [0.7386341094970703, -4.872162818908691], + [-0.7177980542182922, 9.70445442199707], + [2.7081029415130615, 6.41682243347168], + [-3.6965157985687256, -2.812896490097046], + [0.9654415249824524, -7.575337886810303], + [0.5865318775177002, -0.8038315773010254], + [8.490797996520996, -2.550856113433838], + [-2.5537381172180176, -1.1817781925201416], + [-1.2840429544448853, 11.137048721313477], + [-0.14915701746940613, -3.3812005519866943], + [0.1631723940372467, -0.9389118552207947], + [5.333191394805908, -2.5418286323547363], + [0.23792815208435059, -6.46616268157959], + [2.7214267253875732, -4.34539794921875], + [3.7630045413970947, 6.98281717300415], + [-4.767042636871338, 6.736396789550781], + [-3.948011636734009, -1.5351225137710571], + [1.1588541269302368, -0.21936406195163727], + [-4.56419038772583, 4.719660758972168], + [-1.6287190914154053, 1.3067072629928589], + [0.6603266596794128, -8.65740966796875], + [-4.380216121673584, 5.94878625869751], + [-0.24382513761520386, 9.100347518920898], + [4.142363548278809, 7.224112033843994], + [-3.3190767765045166, -4.317321300506592], + [-1.3317358493804932, 11.386859893798828], + [5.06057596206665, -1.3399330377578735], + [0.6046266555786133, -7.472780704498291], + [-3.455435276031494, -0.5170647501945496], + [7.97877836227417, -2.9308340549468994], + [0.4441060423851013, -6.388519287109375], + [0.7308418154716492, -6.755139350891113], + [0.06248282641172409, -5.020678520202637], + [0.875809371471405, -4.9736762046813965], + [-0.6786040663719177, 10.390810012817383], + [0.7148025631904602, -4.917801856994629], + [0.7849313616752625, -8.605605125427246], + [-1.0407320261001587, 10.936786651611328], + [-0.11749143153429031, 8.324219703674316], + [-1.4774460792541504, 0.07252171635627747], + [1.7681909799575806, 0.7327028512954712], + [8.847640991210938, -2.6438686847686768], + [-5.0588459968566895, 6.917763710021973], + [-1.8844410181045532, -0.6345301866531372], + [-4.119019985198975, 6.351294994354248], + [-5.001898288726807, -1.5569698810577393], + [-4.394539833068848, -1.7709970474243164], + [-5.078306674957275, 6.142708778381348], + [1.5323070287704468, -5.171652317047119], + [-3.9555861949920654, 6.145818710327148], + [-3.235126256942749, -0.9549083709716797], + [-2.386319160461426, 0.21332687139511108], + [2.9446089267730713, -4.618990421295166], + [8.460563659667969, -2.6342127323150635], + [-0.15255969762802124, 7.711043357849121], + [-4.347167015075684, -2.8202028274536133], + [2.53078556060791, -4.124134063720703], + [-1.3332158327102661, 11.820356369018555], + [2.5463690757751465, -4.946649551391602], + [-0.4804830849170685, -3.0370891094207764], + [-0.436504602432251, 0.965915322303772], + [-5.181373119354248, 5.9375410079956055], + [1.4540691375732422, 1.6009693145751953], + [-5.077226638793945, 7.157954692840576], + [-0.13784044981002808, 9.070549011230469], + [-0.49567556381225586, 9.841581344604492], + [-4.7433342933654785, -0.10329771041870117], + [2.5698130130767822, 6.614890098571777], + [4.784721851348877, -4.253775596618652], + [-4.099375247955322, -3.1596920490264893], + [1.6734797954559326, 1.0886173248291016], + [-0.3444973826408386, -2.2328896522521973], + [-4.31003475189209, -3.281737804412842], + [0.6200499534606934, -7.176619529724121], + [2.776150941848755, -5.303641319274902], + [0.7482795119285583, -0.3800881803035736], + [-4.052219867706299, -0.8247581720352173], + [3.5034403800964355, 6.455306053161621], + [1.7518689632415771, 0.7450644969940186], + [7.530406951904297, -2.1677768230438232], + [1.5854249000549316, 5.114819049835205], + [-1.0688402652740479, 10.350013732910156], + [-4.758973598480225, 6.30181884765625], + [-3.771028757095337, -2.435638427734375], + [9.51571273803711, -2.9264602661132812], + [0.7743715643882751, -8.61790657043457], + [-0.7264286279678345, 10.011910438537598], + [0.41880887746810913, -6.380731582641602], + [0.612527072429657, -6.950436592102051], + [2.7905430793762207, -4.312875747680664], + [-1.1728779077529907, 11.018556594848633], + [-0.6763490438461304, 10.523374557495117], + [2.3687169551849365, 6.011781215667725], + [2.134755849838257, 3.5213770866394043], + [5.921323299407959, -2.893954038619995], + [-4.131046772003174, -3.17057204246521], + [0.834614634513855, 0.5929498076438904], + [8.196471214294434, -2.5141186714172363], + [-2.4458272457122803, 0.518114447593689], + [2.552518129348755, -4.5556230545043945], + [4.71947717666626, 8.108407020568848], + [7.382018566131592, -3.5614242553710938], + [-1.239019751548767, 11.136577606201172], + [-1.9077311754226685, 0.3916164040565491], + [3.8679258823394775, 7.0325117111206055], + [0.6571027040481567, -8.69621753692627], + [6.053693771362305, -0.6749956011772156], + [-4.590103626251221, -1.8946378231048584], + [-3.0306804180145264, -1.9054903984069824], + [-4.425836563110352, -0.07263457775115967], + [-0.5406630635261536, -1.4957367181777954], + [0.4231436848640442, -6.358399391174316], + [-4.671428203582764, -1.4094289541244507], + [-4.246611595153809, 5.62759256362915], + [5.993849277496338, -3.632645845413208], + [-2.457333564758301, -1.0076422691345215], + [-1.4080696105957031, 12.018641471862793], + [-2.407900094985962, 4.236324787139893], + [-4.272421836853027, 5.99660587310791], + [2.244227409362793, 5.648785591125488], + [-1.287362813949585, 11.022174835205078], + [-5.042001724243164, -2.1304609775543213], + [2.7858693599700928, -5.555091857910156], + [2.6727025508880615, -5.067548751831055], + [0.2941141128540039, -6.864305019378662], + [5.4716010093688965, 8.254168510437012], + [-2.518559217453003, 2.444434404373169], + [-2.225654363632202, 2.031191110610962], + [1.5304007530212402, 5.233670711517334], + [-1.9700407981872559, 1.9700223207473755], + [-3.201589822769165, -1.1792380809783936], + [-3.674337148666382, -1.3451145887374878], + [0.8140413761138916, -0.2668284475803375], + [0.4108526110649109, 4.487636089324951], + [1.228122353553772, 5.598389148712158], + [1.0359609127044678, -0.5091395378112793], + [-1.9656552076339722, 2.0269107818603516], + [-0.8650218844413757, -0.5805220603942871], + [0.2524680495262146, -5.661569595336914], + [-3.1380269527435303, -1.1608026027679443], + [1.3118271827697754, 5.83058500289917], + [0.7878309488296509, -0.4505590796470642], + [0.22304904460906982, 5.806724548339844], + [-4.439172267913818, -0.5555251836776733], + [0.5206167101860046, -0.5204706788063049], + [1.6478898525238037, -6.455630779266357], + [7.040083885192871, -2.5383174419403076], + [0.8041551113128662, -3.4720306396484375], + [-1.2597887516021729, 11.31382942199707], + [-0.7132228016853333, 10.803890228271484], + [-4.280315399169922, -3.118220567703247], + [-3.813544750213623, -0.9328508377075195], + [0.06469827145338058, -5.709046363830566], + [-5.200802803039551, 5.8242950439453125], + [-4.898098945617676, -0.9556906223297119], + [1.341591238975525, -0.8096900582313538], + [5.5616135597229, -1.540065884590149], + [0.4792546033859253, -7.418042182922363], + [-4.236624240875244, 4.956719398498535], + [-4.052363395690918, -1.8002251386642456], + [-4.32065486907959, -2.7017903327941895], + [1.7199515104293823, 0.2988463342189789], + [0.972633421421051, -5.692818641662598], + [6.287081241607666, -1.6330150365829468], + [0.5302467942237854, -4.4166951179504395], + [-3.9831433296203613, -1.1088624000549316], + [-0.09823090583086014, 7.99609375], + [2.8240163326263428, -4.760324478149414], + [0.4487842917442322, -6.520569801330566], + [-0.542762815952301, 9.554155349731445], + [-5.415645122528076, -1.0912855863571167], + [-4.8022894859313965, -1.0429840087890625], + [-4.666165828704834, 5.371070861816406], + [-0.22206023335456848, -3.5235719680786133], + [1.9780590534210205, 5.119323253631592], + [6.311140537261963, -1.44206964969635], + [-1.6947568655014038, 1.7030608654022217], + [2.338552713394165, 5.247105598449707], + [2.709665060043335, -4.476160049438477], + [-0.7439536452293396, 11.036714553833008], + [2.6906702518463135, -4.172792434692383], + [5.434016704559326, -1.1352494955062866], + [6.672715663909912, -3.298752546310425], + [-3.5201146602630615, -1.1938987970352173], + [-0.5545138716697693, 9.910036087036133], + [-2.4871137142181396, 2.441141366958618], + [-5.304786682128906, -1.2069169282913208], + [0.5801128149032593, -7.264385223388672], + [1.454633116722107, -7.090819358825684], + [0.03443383425474167, -4.028472900390625], + [3.928877115249634, -4.327597141265869], + [-4.502037525177002, -1.2352272272109985], + [5.6926493644714355, -1.2607556581497192], + [-0.6054308414459229, -1.4170087575912476], + [-2.202523708343506, 1.169896125793457], + [0.7980307936668396, -3.887901782989502], + [3.0450439453125, 6.014350891113281], + [0.7181686758995056, -8.478727340698242], + [-0.3778059482574463, 10.339187622070312], + [2.2436845302581787, 4.036961078643799], + [-0.6463631987571716, 10.22395133972168], + [4.935278415679932, 7.602420806884766], + [-1.5708997249603271, 0.7016907930374146], + [-3.975114107131958, -2.2618327140808105], + [-4.221724987030029, -3.517328977584839], + [2.1279780864715576, 0.7060211300849915], + [-3.5861756801605225, -1.3282746076583862], + [7.305539608001709, -2.4621856212615967], + [-5.307410717010498, 7.352200984954834], + [0.46101635694503784, -7.55255126953125], + [-0.03383634239435196, -4.206785202026367], + [-4.2797369956970215, -1.438741683959961], + [-5.824183940887451, 7.930285453796387], + [2.1448721885681152, -4.619513511657715], + [-4.406744956970215, 5.883461952209473], + [-1.1414436101913452, 11.06319808959961], + [0.7347333431243896, -7.840834140777588], + [0.5642000436782837, -6.945189476013184], + [1.9555706977844238, 1.115605354309082], + [-2.43174147605896, -1.3862922191619873], + [-3.544788122177124, -1.1793686151504517], + [8.4948148727417, -2.748257637023926], + [0.36313027143478394, -0.9550999402999878], + [3.0275728702545166, -4.722826957702637], + [6.538097858428955, -2.0537829399108887], + [-4.051285266876221, -3.222860336303711], + [0.7937705516815186, -6.416290760040283], + [6.0106425285339355, -2.3381540775299072], + [-1.345436453819275, 11.740711212158203], + [-5.757161617279053, 7.456834316253662], + [2.301053762435913, 6.164768218994141], + [0.8795695304870605, -0.3424307703971863], + [2.141772985458374, -4.247247219085693], + [0.6120275259017944, -5.176123142242432], + [-1.6444523334503174, -1.0675901174545288], + [3.056151866912842, -5.40581750869751], + [8.143189430236816, -2.4696943759918213], + [-5.329748630523682, -1.4645112752914429], + [-0.6879567503929138, 10.528020858764648], + [-0.7827008962631226, 9.528716087341309], + [2.8047616481781006, 5.902234077453613], + [0.2786306142807007, -5.7124786376953125], + [3.4925947189331055, -5.313899993896484], + [-4.289254188537598, 6.3544158935546875], + [-2.628873586654663, 5.0123138427734375], + [-0.9593209028244019, 6.854798793792725], + [-3.6113593578338623, -3.00390625], + [2.359851598739624, 0.6505557298660278], + [0.01038622111082077, 5.933856010437012], + [-4.531027317047119, 5.757895469665527], + [-0.26975101232528687, -1.0404895544052124], + [-6.118403434753418, -0.9614897966384888], + [4.955291271209717, -3.257312059402466], + [-3.8205063343048096, -0.11482852697372437], + [3.864630937576294, 6.936505317687988], + [2.7861216068267822, -4.600510597229004], + [-4.140414237976074, -2.7975947856903076], + [0.8581933379173279, -0.46164196729660034], + [0.3460845351219177, -6.549403190612793], + [-1.401001214981079, 2.1702182292938232], + [-1.5296316146850586, 12.598234176635742], + [0.8579784035682678, 1.7927813529968262], + [-0.20851945877075195, -2.6921441555023193], + [-2.981402635574341, -0.9070540070533752], + [8.072909355163574, -2.6303482055664062], + [-3.002013921737671, -0.8203437328338623], + [2.8509562015533447, -4.435467720031738], + [-1.00541353225708, 10.523927688598633], + [1.0467665195465088, 7.00324821472168], + [8.013306617736816, -2.6777422428131104], + [-2.537325143814087, -1.3167978525161743], + [-2.1137795448303223, 0.09170597791671753], + [0.2973528206348419, -4.725645065307617], + [-5.437921047210693, -1.7402137517929077], + [0.6994555592536926, -0.8180665969848633], + [8.317426681518555, -2.4292848110198975], + [-1.8104808330535889, 1.9549254179000854], + [0.5623053908348083, -8.08098030090332], + [-0.38941287994384766, -2.137721300125122], + [6.8396992683410645, -2.825004816055298], + [-3.9238064289093018, -1.3967291116714478], + [-4.1450629234313965, 5.982150077819824], + [-1.286296010017395, 11.811226844787598], + [-3.0973198413848877, -0.21727585792541504], + [4.506651878356934, -0.30607661604881287], + [-3.1149442195892334, -1.9859833717346191], + [2.0357308387756348, -4.865484237670898], + [7.019643783569336, -2.1647934913635254], + [-1.8212873935699463, 2.1746175289154053], + [2.0706794261932373, -3.7421486377716064], + [-3.278136730194092, -0.7291435599327087], + [0.8700442910194397, -6.429657936096191], + [-0.2961888313293457, 8.100944519042969], + [-1.5024828910827637, 2.0388076305389404], + [-5.2541584968566895, 6.37777042388916], + [-1.8797314167022705, -1.5736174583435059], + [-3.3249831199645996, 7.091807842254639], + [-2.2026526927948, 2.0692267417907715], + [0.864865779876709, -6.78417444229126], + [5.380046367645264, -3.0127570629119873], + [2.311432123184204, -4.896263599395752], + [-1.2869435548782349, 11.384431838989258], + [0.7352994084358215, -7.254853248596191], + [-4.008310794830322, 5.29585599899292], + [2.3854453563690186, 6.4164137840271], + [-0.12214253097772598, 7.697082042694092], + [7.5098042488098145, -2.6187806129455566], + [6.882467746734619, -3.076996088027954], + [0.48526978492736816, -7.559643268585205], + [-0.49416297674179077, 9.7510986328125], + [0.2027961015701294, -1.0250898599624634], + [-3.1310722827911377, -1.090927243232727], + [3.283177137374878, 6.790846824645996], + [5.865873336791992, -3.8115780353546143], + [-1.8062832355499268, 2.010540723800659], + [-4.461315155029297, 4.372075080871582], + [1.5853357315063477, -4.880914688110352], + [-3.720249891281128, 5.819673538208008], + [0.8524399995803833, -0.3595159649848938], + [0.588345468044281, -7.248230457305908], + [0.2729855179786682, -6.084328651428223], + [-5.237698078155518, -3.730738401412964], + [0.6056312918663025, 1.1462156772613525], + [-1.8864091634750366, 1.7675713300704956], + [-0.9928505420684814, 5.24179744720459], + [-1.9555584192276, 1.3659982681274414], + [0.9537501931190491, -4.973073959350586], + [-1.0087693929672241, 3.236989736557007], + [-3.3521430492401123, -1.2627390623092651], + [3.120593309402466, -6.810378074645996], + [-3.151217222213745, -0.6390272378921509], + [-1.349597692489624, 11.820568084716797], + [-1.7616949081420898, 1.3265939950942993], + [-4.069526195526123, -2.42217755317688], + [2.2614519596099854, 5.425516128540039], + [-4.336196422576904, -3.3926188945770264], + [-1.26401686668396, -3.1041266918182373], + [8.033895492553711, -2.601464033126831], + [0.40419918298721313, -7.663741111755371], + [-1.5466828346252441, 0.9767167568206787], + [2.8130886554718018, -4.701205253601074], + [-3.0434367656707764, -2.0151357650756836], + [9.216784477233887, -2.7896668910980225], + [0.13701143860816956, -3.8988754749298096], + [2.818735361099243, -4.265933990478516], + [-3.416154623031616, -1.5051485300064087], + [-3.9331772327423096, 6.148393154144287], + [2.337085485458374, 0.3011220097541809], + [-1.7433843612670898, 1.4784128665924072], + [5.385867118835449, -2.4071853160858154], + [3.3296122550964355, -3.9476332664489746], + [-1.0894215106964111, 11.787004470825195], + [-3.0673656463623047, 4.61455774307251], + [1.881300449371338, 0.6594303846359253], + [2.663125514984131, -4.742559432983398], + [6.068535327911377, -1.5328986644744873], + [-2.898343324661255, -1.2965238094329834], + [0.48798781633377075, -6.8529157638549805], + [-2.253220796585083, -1.7891590595245361], + [-5.018935203552246, 4.650854110717773], + [0.6954254508018494, -6.778088569641113], + [1.083693027496338, -0.23711127042770386], + [0.35478293895721436, -6.582315444946289], + [-1.0045340061187744, 10.137321472167969], + [-3.724078893661499, 6.03012752532959], + [0.3987979292869568, -5.890085220336914], + [1.1187195777893066, -5.460429668426514], + [-3.7423298358917236, -1.8353739976882935], + [0.2828052043914795, -5.6221394538879395], + [0.021113328635692596, -2.210191011428833], + [7.718258380889893, -2.324453353881836], + [1.7467610836029053, -4.22976541519165], + [5.878607749938965, -1.4985815286636353], + [-1.872741460800171, 2.4484670162200928], + [8.910347938537598, -2.7010295391082764], + [-0.5917750597000122, 9.786079406738281], + [-4.69094705581665, -4.4714250564575195], + [-1.884114384651184, 0.28953611850738525], + [8.927875518798828, -2.7268731594085693], + [4.063178062438965, -3.0892035961151123], + [-1.7182056903839111, 1.5921976566314697], + [0.07905318588018417, -1.1852442026138306], + [0.6419675350189209, -6.894123077392578], + [6.781106472015381, -1.5483266115188599], + [0.7649673223495483, -7.640377998352051], + [2.0384652614593506, -4.986187934875488], + [1.7429296970367432, 2.6266372203826904], + [7.765805244445801, -2.55137038230896], + [-0.40248674154281616, -1.4221264123916626], + [-0.058312930166721344, -3.301131010055542], + [6.908560752868652, -2.2015106678009033], + [2.5172111988067627, -3.4374239444732666], + [-1.2628244161605835, 11.158843994140625], + [8.214798927307129, -2.410529851913452], + [-0.8596118092536926, 10.415281295776367], + [2.5966861248016357, -4.3480939865112305], + [-4.995311737060547, -0.7640639543533325], + [-2.063854694366455, 2.3868560791015625], + [2.2201626300811768, 4.229578495025635], + [-3.471069097518921, 5.024905204772949], + [0.20863676071166992, -5.964863300323486], + [-3.4157068729400635, -0.22758477926254272], + [-1.902908205986023, 1.784678339958191], + [0.4481840133666992, -7.624017715454102], + [-3.5914621353149414, -1.6479748487472534], + [0.1693066954612732, -5.473113059997559], + [2.8130943775177, -4.860343933105469], + [2.5492584705352783, -4.0630011558532715], + [2.8875465393066406, -4.92676305770874], + [-1.086828589439392, 0.2592149078845978], + [7.64206075668335, -2.8782777786254883], + [5.2535576820373535, 8.011959075927734], + [0.5573235154151917, -4.850744247436523], + [-1.9041392803192139, 1.9097697734832764], + [-5.0494914054870605, 5.724326133728027], + [-3.20003080368042, -2.410731554031372], + [-1.2536908388137817, 1.5372658967971802], + [2.311734437942505, 5.188593864440918], + [-1.7990697622299194, 1.5811885595321655], + [-0.6779822111129761, 10.35905933380127], + [-1.6532338857650757, 0.47152042388916016], + [-3.4833216667175293, -1.8805465698242188], + [-0.4323800802230835, 0.3305262625217438], + [2.8354380130767822, -4.775046348571777], + [-0.9023245573043823, -2.7187812328338623], + [1.4076740741729736, 6.655314922332764], + [4.754065036773682, 7.890695095062256], + [-2.950763702392578, -2.581343412399292], + [-0.9255139827728271, 9.81330680847168], + [-2.9670727252960205, -1.7526291608810425], + [-0.5538742542266846, 9.340747833251953], + [-1.854439616203308, 0.9880597591400146], + [-0.6387620568275452, 10.083580017089844], + [-1.7079169750213623, -1.093841314315796], + [1.440265417098999, -6.3814167976379395], + [-1.1655291318893433, 11.549609184265137], + [1.3780505657196045, 1.5033107995986938], + [0.18700283765792847, -3.418823480606079], + [1.1225188970565796, -4.103765487670898], + [6.5388383865356445, -2.246350049972534], + [0.7677245140075684, -7.535589218139648], + [-1.2576165199279785, 11.324241638183594], + [0.19839322566986084, -5.273988723754883], + [-3.559075355529785, -1.293515682220459], + [0.4625314474105835, -0.4285350441932678], + [1.0200235843658447, -0.46520090103149414], + [-4.0707244873046875, -1.676626205444336], + [-0.4425642490386963, 4.4725189208984375], + [9.792402267456055, -2.9983069896698], + [2.557535409927368, -4.836478233337402], + [-3.250608205795288, 3.6100261211395264], + [-3.6194446086883545, 6.943889141082764], + [-4.539132118225098, 6.179800033569336], + [8.626544952392578, -2.5212619304656982], + [-1.741999864578247, -0.23294392228126526], + [2.429791212081909, 5.248245716094971], + [-1.6173145771026611, 1.844486951828003], + [-2.296550989151001, -0.8575202226638794], + [-0.5820620656013489, 10.279732704162598], + [-0.7111172676086426, 8.96227741241455], + [-1.680424451828003, -0.37116116285324097], + [-3.042454719543457, -0.5523058772087097], + [-0.8093715310096741, 10.370288848876953], + [8.827919960021973, -2.9279510974884033], + [0.18451160192489624, -6.211796283721924], + [-2.744300603866577, -0.6760609149932861], + [-4.028763294219971, -1.5057626962661743], + [-0.7019107937812805, 9.578600883483887], + [-4.639073848724365, -4.189726829528809], + [2.3011937141418457, 5.569453239440918], + [0.7108594179153442, 6.067971229553223], + [-0.9127202033996582, -0.7225044965744019], + [-4.513521194458008, 6.558774948120117], + [3.214531660079956, 6.660336017608643], + [2.556551694869995, -4.313230514526367], + [3.1484296321868896, -5.067023277282715], + [7.189450740814209, -3.80570387840271], + [1.6092461347579956, 6.470611572265625], + [-1.7139551639556885, 5.301846504211426], + [-0.594434380531311, 10.066421508789062], + [0.7549432516098022, -8.222457885742188], + [-1.6439038515090942, 1.1371033191680908], + [-3.2955477237701416, -2.55354380607605], + [2.9041433334350586, -5.043805122375488], + [-0.01709381490945816, -1.018090844154358], + [-0.7290852069854736, 9.886981964111328], + [-3.541792631149292, -1.4826464653015137], + [2.792929172515869, -4.39936637878418], + [-1.2117993831634521, 11.347554206848145], + [-3.212963104248047, 6.416751861572266], + [-0.9515118598937988, -0.7404882311820984], + [-3.276737928390503, -1.9935671091079712], + [4.793741703033447, -6.203352451324463], + [-0.8614038825035095, 2.8774664402008057], + [7.436700344085693, -4.484613418579102], + [9.286375999450684, -3.0105996131896973], + [-3.9499847888946533, -2.5027012825012207], + [0.9693251252174377, -0.5260981917381287], + [2.924044370651245, -4.871055603027344], + [-3.3553388118743896, 4.028262138366699], + [-1.142409324645996, 9.321479797363281], + [-0.43802928924560547, 9.619744300842285], + [0.7387405037879944, -8.180774688720703], + [-4.079430103302002, 5.898463249206543], + [-5.728347301483154, 4.138681411743164], + [2.744523763656616, -4.590651512145996], + [0.23692774772644043, 3.317169427871704], + [-3.902747392654419, 5.392726898193359], + [0.7598451972007751, -7.701964855194092], + [-2.3525688648223877, 2.306389570236206], + [8.033289909362793, -2.7657346725463867], + [2.9097816944122314, -4.7235870361328125], + [-1.9204578399658203, 2.2585299015045166], + [-0.3705574870109558, 9.146312713623047], + [4.326709270477295, 7.329185485839844], + [1.4093294143676758, 2.086618185043335], + [-0.28538817167282104, 9.670108795166016], + [0.8182556629180908, -5.559706211090088], + [-3.4061405658721924, -1.7002513408660889], + [9.326421737670898, -2.889569044113159], + [-1.3027251958847046, -0.7171341180801392], + [0.9968670010566711, 6.068326950073242], + [-2.81164813041687, -2.053104877471924], + [0.28177180886268616, -5.333446979522705], + [-1.3217695951461792, 11.503812789916992], + [-0.7150033116340637, 9.603727340698242], + [2.067675828933716, 0.9921842813491821], + [-2.294428586959839, 4.386761665344238], + [1.3767073154449463, 0.06607815623283386], + [0.6590787172317505, -6.988040924072266], + [3.4171218872070312, 7.393800735473633], + [2.942934274673462, -4.6266961097717285], + [7.240858554840088, -2.7063982486724854], + [0.4091501533985138, -4.3143086433410645], + [-0.4218106269836426, -1.1475752592086792], + [-0.46341365575790405, -2.7424585819244385], + [-0.7964057922363281, 9.951066970825195], + [0.44267767667770386, -5.384716033935547], + [-2.5716593265533447, -1.0920195579528809], + [1.5390268564224243, -4.569052696228027], + [0.45115435123443604, -7.726945877075195], + [0.5789656043052673, -7.922142028808594], + [-2.13352632522583, -2.450831651687622], + [2.808607816696167, -4.715311050415039], + [1.7011638879776, 5.657444953918457], + [2.932769775390625, -4.7559003829956055], + [0.11435992270708084, -1.1344327926635742], + [-1.8432751893997192, 2.0359814167022705], + [0.6139026284217834, -6.06564998626709], + [-3.0080718994140625, -0.9685659408569336], + [5.646336078643799, -1.3210731744766235], + [2.8057756423950195, -4.383424758911133], + [-1.3486756086349487, 11.827577590942383], + [-1.3537236452102661, -0.6272866725921631], + [-4.119802474975586, 0.16656726598739624], + [5.7851386070251465, -1.3691352605819702], + [-4.0307769775390625, 4.656833648681641], + [2.1168599128723145, -4.7910075187683105], + [7.586831569671631, -3.820045232772827], + [2.3054144382476807, 6.101898193359375], + [-5.16223669052124, 5.302163124084473], + [2.9415700435638428, -4.5766191482543945], + [-0.7685361504554749, 9.481682777404785], + [7.949899196624756, -2.2916152477264404], + [-4.900638103485107, 7.105513572692871], + [0.7588290572166443, -9.335225105285645], + [-3.6062519550323486, 5.681626319885254], + [-0.8897625207901001, 10.821155548095703], + [-3.9020471572875977, 5.908030986785889], + [-3.4257545471191406, -0.8347041606903076], + [2.018357992172241, 4.791107654571533], + [1.407523512840271, 0.33566564321517944], + [-0.20773980021476746, -1.0418448448181152], + [0.5078070163726807, -6.088647842407227], + [0.27655988931655884, -7.010641574859619], + [-0.2847788333892822, 8.397140502929688], + [-1.465425968170166, 1.5674039125442505], + [0.5812830328941345, -7.392885208129883], + [-2.16884446144104, 1.8664504289627075], + [-4.323848247528076, 6.064946174621582], + [-4.399353504180908, -0.09835618734359741], + [-3.5926425457000732, -1.5448356866836548], + [-1.8764739036560059, 0.6156315207481384], + [-1.7094194889068604, 1.1371599435806274], + [-4.605072498321533, 6.052089691162109], + [-0.4651516079902649, -3.288851022720337], + [-2.7403128147125244, 6.769284725189209], + [-4.71789026260376, -1.163995623588562], + [-0.3469570577144623, 0.24327251315116882], + [-3.2496554851531982, -3.23303484916687], + [-4.308470726013184, 6.056100845336914], + [0.9973744750022888, -5.192800521850586], + [0.3237797021865845, -5.911120891571045], + [0.6968062520027161, -8.63930892944336], + [-1.9657548666000366, -0.15290802717208862], + [-3.068904161453247, -0.9605063199996948], + [-0.5780276656150818, 9.652467727661133], + [4.154776573181152, 7.890140533447266], + [-3.9246315956115723, -3.2296221256256104], + [0.6821389198303223, -7.895797252655029], + [-3.6803369522094727, 4.191786766052246], + [-1.8995281457901, 1.9382296800613403], + [-4.950187683105469, 5.758965015411377], + [1.0542916059494019, 1.347589135169983], + [-0.5503177046775818, 10.567033767700195], + [2.550957679748535, -4.3678436279296875], + [-3.432936191558838, -2.317445993423462], + [8.376598358154297, -3.197080612182617], + [0.21378159523010254, -4.177042007446289], + [-4.724715709686279, -3.8394649028778076], + [2.4823319911956787, 5.645277500152588], + [0.366859495639801, -5.34658145904541], + [0.5015992522239685, -0.5118296146392822], + [-1.1278549432754517, 0.4558964967727661], + [-3.719515323638916, -1.4402101039886475], + [-3.290976047515869, -1.442739486694336], + [2.5006415843963623, -4.534241676330566], + [-1.4082679748535156, 11.867624282836914], + [1.7359517812728882, -6.863944053649902], + [1.6058461666107178, 5.436282634735107], + [2.7031729221343994, -4.237863540649414], + [-2.141735792160034, 2.5598838329315186], + [2.2535173892974854, -5.314723968505859], + [2.970215082168579, -4.949073791503906], + [-4.427517414093018, -3.240466833114624], + [-2.1386473178863525, 2.8711729049682617], + [0.6155769228935242, -4.550798416137695], + [-2.8483259677886963, 5.58566427230835], + [9.209450721740723, -2.8878462314605713], + [-1.0162345170974731, 1.2096244096755981], + [-5.1535420417785645, 2.2376222610473633], + [-3.1622085571289062, -1.1698341369628906], + [1.681229591369629, -5.094142436981201], + [0.6258054375648499, -7.004262924194336], + [0.3236059248447418, 2.6220932006835938], + [7.697418212890625, -3.468902111053467], + [-5.371243953704834, 4.5330963134765625], + [-1.9263700246810913, 1.7952054738998413], + [0.012764297425746918, -4.9944586753845215], + [0.6188466548919678, -7.643613815307617], + [2.99603533744812, -4.982386589050293], + [0.6344675421714783, -8.209102630615234], + [-1.984525442123413, 2.376197099685669], + [0.5664907693862915, -5.181155204772949], + [-3.737466335296631, -1.2851054668426514], + [1.6486639976501465, 1.6989878416061401], + [-4.233341217041016, -2.704918622970581], + [1.861110806465149, 0.5176236629486084], + [0.7765315175056458, -5.1947922706604], + [0.9756155610084534, -4.839016914367676], + [0.5161809325218201, -6.773961067199707], + [-4.479193210601807, 4.718499183654785], + [2.831554412841797, -4.5549726486206055], + [1.8246064186096191, 1.6023203134536743], + [1.103093147277832, -6.706596374511719], + [0.4430491328239441, -7.231797218322754], + [-4.087148189544678, -0.11715662479400635], + [-5.051031112670898, 7.488941669464111], + [-3.4814040660858154, -0.2766982316970825], + [2.5971879959106445, 6.345505714416504], + [0.585996687412262, -7.601912498474121], + [2.646782159805298, -4.928678512573242], + [2.3344192504882812, -5.646600723266602], + [0.43449604511260986, -6.053504943847656], + [-1.6023623943328857, 5.638014793395996], + [-1.401031732559204, 11.4026517868042], + [-0.6729888319969177, 10.06729507446289], + [1.9218685626983643, 5.92137336730957], + [-0.9528553485870361, 10.467557907104492], + [-5.239439487457275, 5.947658538818359], + [-2.1132278442382812, -0.9051913619041443], + [-0.3886754512786865, 9.752098083496094], + [-0.10274124890565872, 7.687368869781494], + [-0.01789761334657669, -1.4081999063491821], + [-4.260682582855225, 4.347136497497559], + [-4.315002918243408, 6.37041711807251], + [0.9789248108863831, -3.7005040645599365], + [-3.0253489017486572, -0.14034736156463623], + [2.8938534259796143, -4.934679985046387], + [2.382350444793701, -3.998504400253296], + [-3.3777692317962646, -2.5222768783569336], + [-1.1338703632354736, 10.735525131225586], + [2.932875871658325, -4.857528209686279], + [2.021908760070801, 0.44885167479515076], + [-0.9011816382408142, -0.8841961622238159], + [-6.218454837799072, -0.8364428281784058], + [6.926913261413574, -1.870763897895813], + [2.8599331378936768, 6.213842391967773], + [2.45927357673645, 4.600085735321045], + [-1.0279992818832397, 9.39464282989502], + [0.7697297930717468, -9.182819366455078], + [-1.6630420684814453, 1.750093698501587], + [-3.957806348800659, -0.8380773663520813], + [-4.989789009094238, -0.8846479654312134], + [0.5857236981391907, -4.001893520355225], + [0.38011977076530457, -5.269951820373535], + [-4.970986843109131, 6.456330299377441], + [-4.153932571411133, -2.3769054412841797], + [4.167466163635254, 7.369537830352783], + [0.6997500658035278, -7.822608470916748], + [1.9359848499298096, 2.6886022090911865], + [-0.49600881338119507, 8.878374099731445], + [4.347803115844727, -4.3187031745910645], + [-0.33803364634513855, -2.8356833457946777], + [0.5437396168708801, -7.420588493347168], + [8.24459171295166, -2.685516119003296], + [-3.748741388320923, -1.663913607597351], + [-1.0601835250854492, 10.220940589904785], + [0.5813730359077454, -7.5557861328125], + [-3.1718595027923584, -1.8409165143966675], + [1.3983274698257446, -6.313606262207031], + [-0.06397829204797745, -3.902411460876465], + [-3.125101327896118, -0.823065996170044], + [-5.996696949005127, -1.2358132600784302], + [2.5118608474731445, 6.516816139221191], + [-1.5224312543869019, 2.0108802318573], + [1.5041179656982422, 2.8867955207824707], + [1.0521509647369385, -7.211090564727783], + [0.7496362328529358, -6.121487617492676], + [-3.407386541366577, -3.1986637115478516], + [-1.9792590141296387, 2.289527177810669], + [-3.4541189670562744, 5.5813140869140625], + [-3.5792341232299805, 3.8950135707855225], + [-2.073577404022217, 2.4208076000213623], + [0.6005733609199524, -8.045852661132812], + [5.984577655792236, 8.8115816116333], + [-1.0321533679962158, 11.31820297241211], + [-3.1054952144622803, -0.7677154541015625], + [8.30898380279541, -2.9177000522613525], + [1.7410907745361328, -6.537752151489258], + [5.626504898071289, -4.846598148345947], + [0.6517084836959839, -8.939875602722168], + [-4.126158714294434, -0.9228289723396301], + [1.5061073303222656, -6.061137676239014], + [-3.143327236175537, 4.121466636657715], + [0.9307134747505188, -5.287332057952881], + [2.959881544113159, -4.846340179443359], + [-3.8312184810638428, 5.8597002029418945], + [-1.2510910034179688, 11.133888244628906], + [0.2808091640472412, -6.479724407196045], + [1.611989974975586, 1.596873164176941], + [2.3377232551574707, 4.998314380645752], + [-5.225109100341797, 5.41787052154541], + [-1.425910234451294, 11.592981338500977], + [-0.9885730147361755, 10.698394775390625], + [0.12421038001775742, -3.3993916511535645], + [-4.870949745178223, 6.8927001953125], + [-3.329646348953247, -0.9432692527770996], + [-5.4929890632629395, 7.180903434753418], + [-0.4019390344619751, 8.438614845275879], + [-5.639452934265137, 7.274771213531494], + [-1.1552395820617676, 1.628646731376648], + [-0.3103875517845154, 10.054841041564941], + [0.5929624438285828, -7.105105400085449], + [0.37919944524765015, -6.08116340637207], + [9.971574783325195, -2.953120708465576], + [0.6029993891716003, -7.906757354736328], + [0.6895360350608826, -5.083035945892334], + [0.21823465824127197, -4.729848384857178], + [2.624997615814209, -4.546164512634277], + [2.775651693344116, -5.160670757293701], + [-3.827463388442993, -3.1178853511810303], + [-3.914048910140991, -2.5031063556671143], + [0.8234515190124512, -7.412682056427002], + [-5.20768928527832, 1.340081810951233], + [0.6479000449180603, -8.015142440795898], + [2.677903890609741, -4.453993797302246], + [1.572507381439209, 5.371441841125488], + [-0.17752352356910706, -1.842265248298645], + [-4.127124309539795, -4.224490165710449], + [7.369554042816162, -1.9355987310409546], + [2.731032133102417, 0.5514833927154541], + [7.425152778625488, -2.283853769302368], + [-1.4511579275131226, 12.095134735107422], + [-0.22061753273010254, 9.278404235839844], + [-1.2949427366256714, -1.2086544036865234], + [-3.9180994033813477, 6.12015438079834], + [-1.1947733163833618, 1.5534017086029053], + [-4.7880754470825195, -3.468350648880005], + [0.6413164734840393, -5.973979473114014], + [3.5863544940948486, 7.063802719116211], + [-2.089740037918091, -1.869869351387024], + [-0.5268520712852478, 9.947469711303711], + [-4.70632791519165, -4.432222843170166], + [-3.564870595932007, -3.1740691661834717], + [-4.17469596862793, -1.4703963994979858], + [-6.388631820678711, 3.9250380992889404], + [-0.752499520778656, 10.117656707763672], + [0.43502968549728394, -6.652493476867676], + [7.874998569488525, -2.4753243923187256], + [5.770841121673584, -1.2280441522598267], + [2.76808500289917, -4.525887489318848], + [6.44631290435791, -5.517922401428223], + [2.8686158657073975, -4.512333393096924], + [3.0853350162506104, 6.460341453552246], + [1.2697662115097046, -5.507126808166504], + [-3.996483087539673, -2.0076189041137695], + [2.5813236236572266, -4.012273788452148], + [6.592940807342529, -3.354095697402954], + [-4.639965057373047, 5.574771881103516], + [2.212106943130493, 5.944239139556885], + [-1.3078607320785522, -0.8256716132164001], + [0.3716004490852356, 7.4905219078063965], + [-4.967642784118652, -0.5887309312820435], + [1.0460169315338135, -5.66856575012207], + [-5.259976387023926, 5.506171703338623], + [0.5930901765823364, -7.149392604827881], + [0.524591326713562, -6.646615028381348], + [-1.1809091567993164, 11.431209564208984], + [-1.7789528369903564, 1.8073816299438477], + [-3.581367254257202, -2.181974172592163], + [-0.8031327724456787, 9.981184005737305], + [-4.015288829803467, -2.2470061779022217], + [-1.0463370084762573, 9.598164558410645], + [-4.137617588043213, -1.7174315452575684], + [-1.477267861366272, 12.406822204589844], + [2.631364583969116, 6.149245262145996], + [1.641071081161499, -5.137948036193848], + [-1.4140666723251343, -1.9218168258666992], + [-2.864603042602539, -2.064985513687134], + [2.0787127017974854, 3.1477315425872803], + [9.632580757141113, -2.8384933471679688], + [-0.3524234890937805, 9.57524299621582], + [0.30049246549606323, -6.1963348388671875], + [0.4649280309677124, -6.514059066772461], + [-0.9474141001701355, 10.699485778808594], + [-1.730586051940918, 1.6162453889846802], + [0.07930543273687363, -4.145589828491211], + [0.25776031613349915, -4.679930686950684], + [-1.3132846355438232, 11.398433685302734], + [6.11216402053833, -1.3062794208526611], + [0.3660971522331238, -6.588038444519043], + [0.8739612698554993, -6.409995079040527], + [-0.13517063856124878, 8.464245796203613], + [7.906430721282959, -2.3217380046844482], + [7.6103835105896, -2.764972686767578], + [0.8242591619491577, -5.621504783630371], + [2.7638885974884033, -4.708564758300781], + [1.745463252067566, 4.990525722503662], + [-4.1237053871154785, -2.750821352005005], + [-2.8651316165924072, -1.5368534326553345], + [0.9020558595657349, -4.9656219482421875], + [0.5337158441543579, -7.283426761627197], + [-3.556715250015259, -1.5265320539474487], + [-3.4915971755981445, -1.0285344123840332], + [0.47251564264297485, -7.334268569946289], + [-3.676837682723999, -2.6156985759735107], + [-4.724512577056885, 6.1035475730896], + [-2.037282943725586, 2.297532081604004], + [-1.2072865962982178, -2.3883774280548096], + [0.3804433345794678, -6.5863237380981445], + [-0.9408025145530701, 10.677485466003418], + [2.997486114501953, -2.8753020763397217], + [2.8384668827056885, -4.430267333984375], + [2.7371678352355957, -4.803605079650879], + [-1.171536922454834, 10.70834732055664], + [1.897808313369751, 1.7823106050491333], + [2.920118570327759, -5.228759288787842], + [-4.225170612335205, -2.682577610015869], + [-3.358680009841919, 4.826178073883057], + [-5.3839240074157715, -6.897761344909668], + [7.3509202003479, -2.640942096710205], + [3.567695379257202, 6.645840644836426], + [-2.139758348464966, 1.1338458061218262], + [-1.0838892459869385, 11.028159141540527], + [0.6649714112281799, -8.263618469238281], + [0.2366633415222168, 4.596086502075195], + [7.525262355804443, -2.6392602920532227], + [0.26400476694107056, -0.0763537585735321], + [-3.0759024620056152, 4.071953773498535], + [-1.8766560554504395, 0.6276891827583313], + [-1.9523788690567017, 0.34186282753944397], + [6.331399440765381, -4.307969093322754], + [8.409404754638672, -3.5394909381866455], + [-0.9255535006523132, 10.506669998168945], + [7.261509418487549, -3.2576727867126465], + [-2.0592339038848877, 2.2328546047210693], + [0.7068939805030823, -8.410679817199707], + [-1.2493878602981567, 11.514036178588867], + [-5.088133335113525, -1.2362135648727417], + [-3.1817638874053955, -1.4697004556655884], + [-5.177421569824219, 6.596531867980957], + [2.1769769191741943, 3.482496500015259], + [-4.746299743652344, -0.4882659316062927], + [2.1318793296813965, -5.8248186111450195], + [4.3525471687316895, -2.899007558822632], + [0.5971640348434448, -7.503067970275879], + [-5.640298366546631, 6.383610725402832], + [2.7747299671173096, -4.6349334716796875], + [-3.472966432571411, -1.61448073387146], + [2.054349184036255, 5.648256301879883], + [-1.3362808227539062, 0.40613335371017456], + [-3.195998430252075, -1.1995362043380737], + [0.8229110836982727, -9.428449630737305], + [-2.091366767883301, -0.9439927339553833], + [-4.251585006713867, -3.3973135948181152], + [0.8242257237434387, -0.2423762083053589], + [1.619025468826294, 6.594273567199707], + [2.7641546726226807, -4.139970779418945], + [-5.458632946014404, 5.310591697692871], + [7.763207912445068, -2.4539411067962646], + [6.65576696395874, -1.9068622589111328], + [8.148472785949707, -2.8771204948425293], + [-2.5882744789123535, -0.4262932538986206], + [0.5805040597915649, -7.03507137298584], + [-3.0137710571289062, 5.247714996337891], + [-0.6695470809936523, 0.32996854186058044], + [2.7907841205596924, -4.5183916091918945], + [-1.1996650695800781, 11.745771408081055], + [-1.2306461334228516, 11.957027435302734], + [0.6656709313392639, -6.8367462158203125], + [0.646367073059082, -7.690647602081299], + [-3.2877705097198486, -1.1647469997406006], + [-0.30382639169692993, -2.114875555038452], + [-4.926046848297119, 7.048883438110352], + [-0.6172826290130615, 10.101723670959473], + [-1.289859414100647, 11.836203575134277], + [-0.8794347643852234, 9.750997543334961], + [-3.092724561691284, 2.8781189918518066], + [-1.7951915264129639, 0.5906593799591064], + [-3.3497934341430664, 5.662736892700195], + [2.3207242488861084, 6.046415328979492], + [3.103423595428467, -5.084219932556152], + [2.6747536659240723, 5.10901403427124], + [0.41936159133911133, -6.5111799240112305], + [0.027688853442668915, -1.3754940032958984], + [2.7433321475982666, -4.638388156890869], + [-3.8861348628997803, -4.266408920288086], + [-3.197840929031372, -0.9622175693511963], + [-3.547495126724243, -1.703501582145691], + [-3.2829794883728027, -0.7291355133056641], + [-4.689581394195557, -3.1717562675476074], + [-1.6396229267120361, 1.9279396533966064], + [7.427137851715088, -2.6673643589019775], + [2.5332796573638916, -5.052621841430664], + [-0.5373197197914124, 7.010824203491211], + [-5.375179290771484, 4.908567428588867], + [-4.3219709396362305, -1.5053313970565796], + [-1.2343356609344482, 11.076369285583496], + [-4.703152656555176, 6.633517742156982], + [0.6781137585639954, -4.344801902770996], + [-3.6525423526763916, -1.246759057044983], + [1.023960828781128, 6.692871570587158], + [-4.675561428070068, -3.9916393756866455], + [-5.761894226074219, -0.8432430028915405], + [0.09273426979780197, -4.474924087524414], + [-0.08899933844804764, 7.62802791595459], + [8.266311645507812, -2.632680654525757], + [-3.5661823749542236, -1.6761590242385864], + [-1.769652247428894, 1.5274385213851929], + [4.413611888885498, 7.243762016296387], + [-0.35797613859176636, -1.002278447151184], + [0.7036243081092834, -9.060807228088379], + [-3.2000434398651123, 5.52607536315918], + [6.867699146270752, -2.8142364025115967], + [7.884006977081299, -2.3651111125946045], + [0.46342557668685913, -6.996671676635742], + [-3.9205472469329834, -2.6445939540863037], + [-1.0562174320220947, -0.49586063623428345], + [-3.6958553791046143, -0.5930834412574768], + [-1.2823697328567505, -0.4426698684692383], + [-1.4870332479476929, 12.30777359008789], + [-1.253833293914795, 11.675748825073242], + [0.692861020565033, -8.188995361328125], + [0.32571324706077576, -0.5261822938919067], + [1.374790906906128, -4.467787742614746], + [-0.34642714262008667, -1.779744267463684], + [-0.8442664742469788, 10.42390251159668], + [-0.9751686453819275, 10.866260528564453], + [-1.9260355234146118, 0.7922570109367371], + [-3.821251630783081, -3.2710680961608887], + [0.40893614292144775, -1.037859320640564], + [-3.729203939437866, -0.8719085454940796], + [-3.638742208480835, 5.842427730560303], + [-0.8622603416442871, 9.748769760131836], + [-0.8191502690315247, -0.5652036666870117], + [7.082435131072998, -2.185483694076538], + [-0.08294803649187088, -0.4129936099052429], + [-1.0174118280410767, 10.816957473754883], + [5.1358418464660645, -5.055150032043457], + [-4.402363300323486, 7.112398147583008], + [2.832756280899048, -4.690964698791504], + [5.796847820281982, -1.3739060163497925], + [2.152107000350952, -6.390515327453613], + [0.9792901873588562, -5.687355041503906], + [-3.160449743270874, 5.946493148803711], + [6.027332305908203, -4.230494976043701], + [0.5881823301315308, -8.169008255004883], + [0.16319549083709717, -5.624255180358887], + [-0.3273788392543793, -1.1351573467254639], + [0.23022496700286865, -6.060518264770508], + [2.1008987426757812, 5.0469818115234375], + [3.173536777496338, -4.925755500793457], + [-1.4973002672195435, 2.0657434463500977], + [-3.8786470890045166, -1.3952785730361938], + [-3.119832754135132, -0.9446645975112915], + [2.934953451156616, -4.591212749481201], + [7.9916815757751465, -2.7027361392974854], + [0.7040393948554993, -8.4014253616333], + [-0.8969717025756836, -1.857927918434143], + [-0.14341145753860474, -3.700327157974243], + [-4.015527725219727, -0.5011733770370483], + [3.9458324909210205, 7.280722618103027], + [-0.7446010112762451, 10.865983009338379], + [-4.566094875335693, -0.8457913398742676], + [-0.46296900510787964, 8.759346008300781], + [-3.652392625808716, -2.360530138015747], + [0.9208511710166931, -7.662270545959473], + [-3.522942304611206, -1.790605068206787], + [-3.7404277324676514, 6.301715850830078], + [-4.445934772491455, 6.527379035949707], + [1.4893178939819336, -5.590027809143066], + [-0.22310411930084229, 8.742152214050293], + [-2.64117693901062, -2.164867639541626], + [-3.2522408962249756, -0.9603781700134277], + [0.015987806022167206, 9.010555267333984], + [-4.286843299865723, 3.7493538856506348], + [8.617280006408691, -2.700972557067871], + [4.73459005355835, -4.140949249267578], + [1.6494834423065186, 3.2930526733398438], + [-0.06795874983072281, -4.535612106323242], + [-5.449665546417236, 6.495636463165283], + [-2.1968047618865967, 0.2270623743534088], + [1.7352294921875, -3.556403398513794], + [-3.482908010482788, -1.3295351266860962], + [-5.511147499084473, 6.823112964630127], + [-1.873059868812561, 2.3887956142425537], + [1.963073968887329, -5.47952938079834], + [-0.16120454668998718, -1.403314232826233], + [3.869088888168335, -3.521921396255493], + [-2.1288812160491943, 4.686649799346924], + [1.2011871337890625, -5.122505187988281], + [-4.146585941314697, -1.5326825380325317], + [2.5670454502105713, -4.931778907775879], + [2.782844305038452, -4.870938777923584], + [2.910853385925293, -5.235118865966797], + [-0.7178813219070435, 8.294790267944336], + [-3.8273727893829346, -1.0188015699386597], + [-4.031226634979248, -2.6672170162200928], + [-1.6428049802780151, 1.9282405376434326], + [-1.9175736904144287, -0.5427400469779968], + [0.19603919982910156, -5.672065734863281], + [-3.0851659774780273, 6.368971824645996], + [-1.2130863666534424, 11.936241149902344], + [-3.5877134799957275, -2.71807861328125], + [8.429570198059082, -3.5302703380584717], + [-1.7861113548278809, -0.10228726267814636], + [0.7199849486351013, -8.894362449645996], + [6.494976997375488, 9.330240249633789], + [2.6460955142974854, -5.7885942459106445], + [-4.1019463539123535, -0.5979763865470886], + [7.4051833152771, -2.197838544845581], + [0.6827049255371094, -8.81644058227539], + [-0.7032007575035095, 9.574508666992188], + [1.5271552801132202, -5.374930381774902], + [9.304153442382812, -3.043956995010376], + [1.363954782485962, 5.679836750030518], + [-3.8582146167755127, 0.12799406051635742], + [1.9435529708862305, -5.098575592041016], + [1.1392648220062256, 0.18119096755981445], + [-0.12143857032060623, -1.5617059469223022], + [-3.4919281005859375, 5.543180465698242], + [0.42861324548721313, -6.014055252075195], + [-4.184687614440918, -0.6515103578567505], + [-3.5073587894439697, -1.7646442651748657], + [-4.568020343780518, 1.8751274347305298], + [-3.322694778442383, 5.5027923583984375], + [-3.6645495891571045, -1.3235200643539429], + [-1.1621206998825073, 10.58494758605957], + [-0.7413500547409058, 11.189858436584473], + [2.135910987854004, -4.292347431182861], + [1.9940612316131592, 0.9962093830108643], + [2.113246440887451, 0.6381509304046631], + [-0.325588583946228, 9.017289161682129], + [-4.43987512588501, 0.24203938245773315], + [-2.2967634201049805, 1.4285407066345215], + [3.168156862258911, -4.169912338256836], + [6.802322864532471, -2.5331919193267822], + [1.6279358863830566, 1.5794833898544312], + [-3.1363165378570557, -0.8444021344184875], + [-0.5817596316337585, 10.073210716247559], + [-2.0774405002593994, 2.229494094848633], + [-4.417273044586182, -0.5536083579063416], + [0.38180822134017944, -5.316095352172852], + [-3.6926815509796143, -0.6841578483581543], + [0.28344589471817017, -5.374120712280273], + [-1.318484902381897, 11.082904815673828], + [1.861675500869751, -5.169155597686768], + [-4.398924350738525, -1.7815306186676025], + [-4.350363731384277, -1.9846644401550293], + [-3.777385950088501, 0.5947126746177673], + [-4.954061031341553, 6.137059688568115], + [-2.8718326091766357, -1.9748247861862183], + [1.2161660194396973, -4.790338516235352], + [0.7750188708305359, -8.857269287109375], + [0.6273677945137024, -7.829206466674805], + [-1.561582326889038, -0.39826980233192444], + [-1.055770754814148, 11.246175765991211], + [-5.536209583282471, -1.7593828439712524], + [-3.3766849040985107, -1.1317040920257568], + [-2.965376853942871, -1.3400120735168457], + [-4.572287082672119, 7.478036403656006], + [-3.302185297012329, -0.32855623960494995], + [0.8800311088562012, -5.262373924255371], + [-4.52113676071167, 6.464725494384766], + [2.8767783641815186, -4.5341339111328125], + [8.429970741271973, -2.9703986644744873], + [8.764876365661621, -2.6306889057159424], + [-2.9072484970092773, 5.216349124908447], + [0.6257696151733398, -0.5978416800498962], + [-4.766444683074951, 6.0068840980529785], + [1.078127145767212, -4.499269485473633], + [3.2963147163391113, 6.469801902770996], + [-3.3599674701690674, 5.577306747436523], + [-1.0559601783752441, 5.145673751831055], + [-4.909331798553467, 5.728515625], + [1.864851713180542, 5.247014045715332], + [5.136909008026123, 8.074274063110352], + [-3.8066837787628174, -1.457005500793457], + [2.221410036087036, -4.828225135803223], + [-0.6491912007331848, 1.2405965328216553], + [-5.024778842926025, 6.9976911544799805], + [1.9530589580535889, -4.613892555236816], + [0.18973878026008606, -4.764184951782227], + [-3.22365403175354, -1.4737193584442139], + [6.997496604919434, -3.211575746536255], + [-4.142274856567383, -1.7313984632492065], + [0.1691911518573761, -4.6342010498046875], + [0.5914105772972107, -8.944005966186523], + [-1.4624814987182617, 1.2542481422424316], + [-3.0584466457366943, -2.050691843032837], + [-1.1933412551879883, 11.001091003417969], + [3.3748483657836914, 1.8564578294754028], + [-2.791407823562622, -1.8666104078292847], + [6.629150867462158, -3.443021535873413], + [-1.1647037267684937, 9.859819412231445], + [-0.08307541161775589, 8.269342422485352], + [-3.4789822101593018, 5.382750511169434], + [-0.2518349289894104, -1.4551914930343628], + [-1.3086755275726318, 11.116568565368652], + [2.9939324855804443, 5.819404602050781], + [-5.315828800201416, 6.931699752807617], + [0.6029233336448669, -4.461287021636963], + [2.6014907360076904, -5.068937301635742], + [-0.3723152279853821, 9.792222023010254], + [-4.963505744934082, 2.7326886653900146], + [3.963114023208618, -2.474299669265747], + [3.127061605453491, 6.500362396240234], + [-1.2278897762298584, 11.477706909179688], + [-0.5148225426673889, -1.4198054075241089], + [-0.5303999781608582, 10.161149978637695], + [-3.820744752883911, -0.9687429666519165], + [-1.312927007675171, -0.543354332447052], + [-3.9563169479370117, 4.923441410064697], + [-4.278892517089844, -0.5212720632553101], + [1.2729450464248657, 3.4858007431030273], + [8.320308685302734, -2.857743263244629], + [-1.7274906635284424, 0.27786198258399963], + [2.865863561630249, -4.914970397949219], + [-0.001406349241733551, -1.1652498245239258], + [-2.9538040161132812, -1.3665238618850708], + [-3.347843885421753, -0.22189831733703613], + [-5.016592025756836, 6.84766960144043], + [-4.035433292388916, -2.6876373291015625], + [-5.563264846801758, 5.652834415435791], + [-3.36087965965271, -1.5166128873825073], + [-2.4435551166534424, -0.8882710933685303], + [-3.620861291885376, -1.519447922706604], + [-4.302624702453613, -3.4153153896331787], + [3.3560221195220947, -5.496670722961426], + [-1.4648661613464355, 12.310892105102539], + [-3.288726568222046, -1.1441937685012817], + [-1.8488388061523438, 1.8646363019943237], + [2.600508451461792, -4.911078453063965], + [-4.2273030281066895, -0.20133525133132935], + [2.4088988304138184, 5.894507884979248], + [1.092726230621338, -6.805148124694824], + [1.2760080099105835, -0.2573380470275879], + [-4.205791473388672, -3.233088731765747], + [1.5643160343170166, 0.9293122291564941], + [-3.3142249584198, -1.4520918130874634], + [-1.1394622325897217, -0.07260781526565552], + [-3.4193944931030273, 5.350193500518799], + [-3.073908805847168, -0.6399049758911133], + [-1.2877259254455566, 11.178428649902344], + [3.23453950881958, 6.244534492492676], + [1.9239733219146729, -5.9011430740356445], + [4.5830769538879395, 7.723087787628174], + [2.2494139671325684, -5.46859073638916], + [-3.0626113414764404, -1.0133038759231567], + [1.9793906211853027, 0.7649332284927368], + [-0.8560962677001953, 0.47750580310821533], + [-2.4963700771331787, -1.2898449897766113], + [8.54181957244873, -3.8302652835845947], + [-2.021851062774658, 2.7731423377990723], + [-1.364093542098999, 11.65994930267334], + [-4.030805587768555, 6.07380485534668], + [-1.9262641668319702, -1.4756051301956177], + [-4.10495662689209, -0.8283516764640808], + [3.371803045272827, 6.355308532714844], + [-1.1503069400787354, 10.79141902923584], + [-1.9474365711212158, 1.2974978685379028], + [-4.567745685577393, -1.229495882987976], + [0.415322482585907, -6.976883411407471], + [0.6091333627700806, -7.42282247543335], + [1.8089922666549683, 3.4052011966705322], + [1.539358377456665, 2.1065289974212646], + [2.2459356784820557, -3.972029447555542], + [4.610131740570068, 7.4428791999816895], + [2.2221596240997314, 5.914142608642578], + [0.2781350612640381, -6.35711145401001], + [-3.9241812229156494, -1.3511933088302612], + [-5.29263973236084, 7.3374176025390625], + [-1.3004226684570312, 1.399976134300232], + [-5.538938045501709, 5.3458943367004395], + [-0.711080014705658, 8.517962455749512], + [-4.913565158843994, 4.422170639038086], + [9.055278778076172, -2.696591377258301], + [-0.6268466114997864, 9.569674491882324], + [-4.156466007232666, -2.701970338821411], + [-3.3631691932678223, 6.230371475219727], + [-1.1801968812942505, 10.372406005859375], + [-4.969992637634277, 6.474086761474609], + [1.2439274787902832, -5.985207557678223], + [-4.432870388031006, -1.00932776927948], + [-2.6245975494384766, 2.852149248123169], + [-1.2575045824050903, 10.951985359191895], + [1.6330621242523193, 1.1185009479522705], + [1.914109468460083, 1.5213475227355957], + [2.7779128551483154, -5.477385997772217], + [-4.954554080963135, 7.32551908493042], + [-1.6763741970062256, 0.4638582468032837], + [2.792693853378296, -4.69554328918457], + [-0.6110047101974487, 8.349553108215332], + [-3.276444435119629, -0.7631911039352417], + [2.4431071281433105, 5.814509391784668], + [-1.13360595703125, -1.9421477317810059], + [0.36080366373062134, 6.463301658630371], + [0.7416219115257263, -7.106353282928467], + [1.6824660301208496, 4.987784385681152], + [-3.2250678539276123, 5.09522819519043], + [7.992002010345459, -2.3711798191070557], + [-3.598325252532959, -1.674034595489502], + [0.5193393230438232, -0.8411353230476379], + [1.56947660446167, -5.296911716461182], + [-5.522106647491455, -1.150781512260437], + [6.86818790435791, -3.5519626140594482], + [-3.204739570617676, -0.8305355310440063], + [8.947983741760254, -2.7617475986480713], + [-4.734476089477539, 4.9664411544799805], + [-1.394286870956421, 11.75258731842041], + [4.393067836761475, 7.8999128341674805], + [6.3221001625061035, -1.115805983543396], + [8.474780082702637, -3.047004461288452], + [-5.754943370819092, 5.810296058654785], + [-3.980191946029663, -0.9529491066932678], + [7.8781538009643555, -2.2302069664001465], + [2.67968487739563, -5.490483283996582], + [-0.41171789169311523, 9.39132308959961], + [-1.830709457397461, -0.8724223375320435], + [9.278459548950195, -2.9489026069641113], + [-0.5037891268730164, -2.590845823287964], + [-0.7655407786369324, 11.231263160705566], + [0.5443235039710999, -8.153919219970703], + [7.148831844329834, -2.061640977859497], + [-1.6215938329696655, 2.071333885192871], + [-3.349121332168579, -1.6630032062530518], + [-1.2858542203903198, -2.1334762573242188], + [-5.23421573638916, 6.775150299072266], + [-1.7481911182403564, 3.3323166370391846], + [-1.662367343902588, 5.5406389236450195], + [-4.996584415435791, 7.462141990661621], + [6.720802307128906, -4.537647724151611], + [-1.4049822092056274, 11.819005012512207], + [8.287999153137207, -3.0605075359344482], + [-4.165787220001221, -1.8677215576171875], + [2.1447198390960693, 5.76874303817749], + [-3.828697919845581, -0.5771052837371826], + [-0.8332287669181824, 10.631656646728516], + [2.835007667541504, -4.453823089599609], + [1.6027134656906128, 5.280946731567383], + [0.21707117557525635, -6.04269552230835], + [-1.470174789428711, 8.879705429077148], + [5.813326358795166, 8.675220489501953], + [-2.635651111602783, -1.1218968629837036], + [1.2350069284439087, -3.4460251331329346], + [-2.993229866027832, -1.8714919090270996], + [2.190570116043091, -5.258247375488281], + [3.21675443649292, 5.97989559173584], + [-0.639796257019043, 10.04646110534668], + [2.3397929668426514, -5.578915596008301], + [0.4954618215560913, -5.585599899291992], + [-1.161277413368225, 10.62345027923584], + [3.440216064453125, 6.095242500305176], + [-4.508153915405273, 6.699870586395264], + [6.514520168304443, -2.9022440910339355], + [0.8001454472541809, -9.833523750305176], + [-3.1067352294921875, -1.0840963125228882], + [9.004694938659668, -2.7380003929138184], + [-0.9234808087348938, 10.30875015258789], + [0.7819643616676331, -9.524200439453125], + [-1.5356630086898804, -2.577146291732788], + [-3.7138280868530273, -0.4085569381713867], + [-1.518792986869812, 12.506975173950195], + [3.1017472743988037, 5.244520664215088], + [8.20495319366455, -2.508415937423706], + [2.8805699348449707, -4.519467353820801], + [7.077404499053955, -3.357422113418579], + [0.7727258801460266, -8.009650230407715], + [2.974724531173706, 6.237887859344482], + [-1.2168694734573364, 11.458016395568848], + [3.011136531829834, 5.154828071594238], + [1.3711827993392944, 2.2410573959350586], + [-3.5874154567718506, -1.511529803276062], + [-3.902522325515747, -3.384429454803467], + [2.1535377502441406, 6.0369486808776855], + [6.390171527862549, -4.612236022949219], + [0.6621165871620178, -6.7145538330078125], + [-1.7484272718429565, 1.3969069719314575], + [0.8858136534690857, -0.48274362087249756], + [-1.0528271198272705, -1.4650858640670776], + [0.81816565990448, -6.818863391876221], + [-4.239004135131836, -0.9354013800621033], + [1.5896788835525513, -5.691305637359619], + [3.0207712650299072, -4.747529983520508], + [3.273749828338623, 6.402689456939697], + [6.908487796783447, -2.667951822280884], + [-1.0142860412597656, 10.78570556640625], + [6.801395416259766, -3.9024240970611572], + [0.8335585594177246, -6.713099479675293], + [0.39365077018737793, -4.75041389465332], + [-2.571901559829712, 5.483574867248535], + [-3.8146474361419678, -1.2170915603637695], + [8.484883308410645, -3.326660633087158], + [-3.741011142730713, -2.3360979557037354], + [-4.007167339324951, 5.821571350097656], + [-0.44996505975723267, 9.510763168334961], + [7.674434185028076, -2.8827552795410156], + [-0.6164085268974304, -1.6055797338485718], + [0.48684126138687134, -7.676115989685059], + [-1.897176742553711, 0.3340097665786743], + [-4.217926979064941, -0.7944809198379517], + [-0.8347765207290649, -3.437828302383423], + [-0.7889316082000732, 10.442262649536133], + [2.8541524410247803, -4.829919815063477], + [-4.069528579711914, -2.1818017959594727], + [0.6626508831977844, -8.76481819152832], + [-3.917336940765381, -2.7803537845611572], + [-0.157705157995224, -2.5017952919006348], + [1.9713540077209473, -4.78734827041626], + [2.758315086364746, -4.469518184661865], + [-3.2547659873962402, -1.2543330192565918], + [5.691879749298096, -2.4094293117523193], + [4.142673015594482, 7.67338752746582], + [0.6974539160728455, -9.270218849182129], + [-3.9445736408233643, -1.14203941822052], + [-4.059757709503174, -2.3962833881378174], + [-3.766777753829956, -1.332055926322937], + [-3.8779544830322266, 5.672391414642334], + [-0.9159131646156311, 10.193431854248047], + [-4.087705612182617, 5.183292388916016], + [0.7815890908241272, -9.087142944335938], + [-1.263366937637329, -0.22429263591766357], + [-3.398200511932373, -1.245954155921936], + [8.923766136169434, -2.802899122238159], + [1.9341602325439453, 1.1475836038589478], + [-4.314639568328857, -2.6313300132751465], + [-4.136232376098633, -1.7218290567398071], + [-1.0382410287857056, 10.767934799194336], + [-2.5473687648773193, 5.7753190994262695], + [-2.454857110977173, 4.404048442840576], + [-3.646385908126831, 4.3631062507629395], + [9.018269538879395, -2.7956645488739014], + [5.714301586151123, -1.5674012899398804], + [-2.74062442779541, 3.0316529273986816], + [-1.168585181236267, 10.909838676452637], + [-2.714900016784668, 2.7194321155548096], + [0.6056379675865173, -8.49470329284668], + [-1.477837085723877, 11.941285133361816], + [-0.11285711079835892, -2.3141579627990723], + [-0.5266505479812622, 5.166635513305664], + [-3.833472728729248, -2.3512659072875977], + [-4.717286586761475, -1.0469180345535278], + [2.1762759685516357, -4.192714214324951], + [-4.699691295623779, 2.4268929958343506], + [-1.6017261743545532, 13.04722785949707], + [-2.0128493309020996, -0.1777818202972412], + [-0.8719133734703064, 10.302085876464844], + [5.988779544830322, -2.4040944576263428], + [7.403931140899658, -4.436020851135254], + [-1.3498506546020508, 2.1663851737976074], + [0.61372971534729, -7.935769557952881], + [-0.9365782141685486, 10.250009536743164], + [-2.030912160873413, 2.443166971206665], + [4.288400173187256, 7.173986911773682], + [-0.265781044960022, -3.1309707164764404], + [4.8149333000183105, 7.672252655029297], + [-4.097707271575928, -3.799783706665039], + [1.1135749816894531, -5.606900215148926], + [0.15738645195960999, -5.172140121459961], + [-1.3874115943908691, 12.047491073608398], + [0.20175522565841675, -5.71840763092041], + [5.752769947052002, -3.173755407333374], + [7.477546215057373, -2.508768320083618], + [5.7479166984558105, -2.0171077251434326], + [0.2736474871635437, -6.399255752563477], + [2.8423190116882324, -4.490416049957275], + [3.095799684524536, -4.134346961975098], + [-2.9281671047210693, -0.9113559722900391], + [7.805753231048584, -2.2301077842712402], + [0.32748162746429443, -6.893131256103516], + [7.014925956726074, -2.465824842453003], + [-0.17700457572937012, 9.100435256958008], + [-4.408593654632568, -0.708655595779419], + [3.5226502418518066, 6.675922870635986], + [-1.1639866828918457, 1.5865066051483154], + [3.517223596572876, 7.051430702209473], + [1.7611185312271118, -6.083104610443115], + [2.835184097290039, -4.147716045379639], + [2.0998146533966064, 6.355542182922363], + [-0.5551088452339172, -1.502935767173767], + [-4.9331231117248535, 5.012721538543701], + [-0.5634985566139221, -1.800758719444275], + [-5.464471340179443, -0.8282144069671631], + [-4.119096279144287, -1.8884236812591553], + [-4.231006145477295, -2.5722925662994385], + [-5.341107368469238, 6.119088172912598], + [-1.4868035316467285, 12.162248611450195], + [2.745450258255005, 5.176477432250977], + [-2.8441433906555176, -0.5865276455879211], + [-0.5509729385375977, 9.696982383728027], + [2.8119516372680664, 5.705948829650879], + [-0.9701988101005554, 10.244013786315918], + [-2.1649205684661865, 1.798804521560669], + [-0.16631239652633667, 8.922697067260742], + [4.590276718139648, 7.532344341278076], + [0.06853004544973373, -5.3772077560424805], + [-4.836608409881592, -1.0599783658981323], + [0.7500178217887878, -7.483769416809082], + [-4.249825954437256, 6.133642673492432], + [0.12635090947151184, -4.933011531829834], + [5.961935520172119, -1.781685709953308], + [-1.9405920505523682, 1.5128401517868042], + [-0.6712208986282349, -0.5680100917816162], + [-3.105048418045044, -1.5735279321670532], + [2.0805423259735107, 5.084951400756836], + [0.5218585729598999, -7.094475269317627], + [5.269121170043945, -4.2052178382873535], + [2.261660575866699, -4.183180332183838], + [-1.2503621578216553, 11.420256614685059], + [-1.2566713094711304, 10.982809066772461], + [-3.8481178283691406, -1.2859296798706055], + [-4.644562244415283, -3.523188829421997], + [0.2717500329017639, 4.949770927429199], + [-3.6699864864349365, -1.2959429025650024], + [-4.5102009773254395, -1.1716934442520142], + [3.1202425956726074, -4.103874206542969], + [-1.5615005493164062, 1.7630397081375122], + [0.3694157004356384, -5.431856155395508], + [1.0625526905059814, -6.555838584899902], + [-1.834065318107605, 0.9131157398223877], + [-2.4691669940948486, 4.824365615844727], + [4.957277297973633, -1.2435035705566406], + [1.6733288764953613, -4.592715263366699], + [-1.3194187879562378, 11.498289108276367], + [6.155028820037842, -1.5231095552444458], + [7.13536262512207, -3.6633732318878174], + [-0.32896339893341064, 9.58386516571045], + [-0.30278313159942627, 8.959522247314453], + [6.678659915924072, -1.5606218576431274], + [-4.175867557525635, -0.31654882431030273], + [-4.12993860244751, -2.289092540740967], + [-3.7853171825408936, -1.6905962228775024], + [-3.7665300369262695, -0.6010799407958984], + [0.49428433179855347, -7.649421215057373], + [5.671628475189209, -1.851426124572754], + [0.31781065464019775, -7.081421375274658], + [2.607872724533081, 5.118635177612305], + [1.8924453258514404, 5.584384918212891], + [0.6903437376022339, -5.877819061279297], + [0.2926953434944153, 5.536505699157715], + [5.57991361618042, -4.148056983947754], + [7.340673446655273, -2.4535129070281982], + [-2.7366673946380615, 6.024843215942383], + [-3.3266637325286865, -1.7267544269561768], + [-1.3223628997802734, 11.249577522277832], + [-1.296007513999939, 11.402802467346191], + [1.4748435020446777, 0.0505579374730587], + [1.2114592790603638, 2.841630220413208], + [7.317275524139404, -1.9404067993164062], + [0.70802903175354, -8.622512817382812], + [-0.8924573063850403, 9.340249061584473], + [0.3973712921142578, -6.671743392944336], + [-3.4016706943511963, -2.3620834350585938], + [-4.452877998352051, 5.849594593048096], + [-4.163134574890137, 5.9670867919921875], + [-1.2889803647994995, 0.6217637062072754], + [-4.5052876472473145, 4.725059509277344], + [2.741150140762329, -4.295905113220215], + [-3.873436450958252, -1.0158864259719849], + [-2.328172445297241, -1.150879979133606], + [-3.5296943187713623, 4.687915802001953], + [-3.756934881210327, 6.155093193054199], + [-3.0994365215301514, -1.7596415281295776], + [0.7231467962265015, -5.084402084350586], + [0.6544272303581238, -8.932957649230957], + [-0.9905704855918884, 10.359771728515625], + [-0.6574368476867676, -0.4420231878757477], + [7.235307693481445, -2.0330922603607178], + [1.4902777671813965, -4.3544135093688965], + [1.0629332065582275, -5.711981773376465], + [-1.9155189990997314, 0.8851516246795654], + [-5.240534782409668, -1.1927448511123657], + [-4.6467976570129395, -3.2094223499298096], + [7.04170036315918, -2.0639383792877197], + [-0.95237797498703, 11.122963905334473], + [8.4126615524292, -2.600661277770996], + [-1.0060113668441772, 10.861556053161621], + [-0.7610682845115662, 10.624431610107422], + [-3.8174726963043213, -1.2033320665359497], + [-2.720961093902588, -1.0421864986419678], + [-1.7960379123687744, 0.13436397910118103], + [-3.7146215438842773, 5.333477973937988], + [1.9540281295776367, -4.55273962020874], + [-4.835329532623291, -0.6986702680587769], + [-4.0045485496521, -1.6993043422698975], + [4.480553150177002, 7.425317764282227], + [-2.4847159385681152, -1.4809225797653198], + [0.6020479798316956, -7.554081916809082], + [-1.1643433570861816, 11.420404434204102], + [-1.2283140420913696, 1.0341581106185913], + [-2.1077089309692383, 2.502443552017212], + [-1.7171951532363892, -0.8333538174629211], + [-3.905210018157959, -1.644161581993103], + [2.678373336791992, -5.372734069824219], + [-4.030864715576172, -2.6852455139160156], + [-1.050126552581787, 10.563823699951172], + [-1.834314227104187, 2.3444998264312744], + [5.415496349334717, 8.609227180480957], + [3.161329507827759, -5.46370792388916], + [-3.998671293258667, 6.243396759033203], + [-3.1115939617156982, 5.017618656158447], + [-3.6072299480438232, -2.5923922061920166], + [0.6170040369033813, -3.2015674114227295], + [-5.317934036254883, -1.2515528202056885], + [-5.675398349761963, 4.149872779846191], + [-0.8061661124229431, 1.4878101348876953], + [-1.1094632148742676, -0.44083714485168457], + [-4.106511116027832, -0.5403234362602234], + [4.4777655601501465, 7.384100914001465], + [0.052712731063365936, -4.784202575683594], + [-1.8799291849136353, 2.0871357917785645], + [1.3142269849777222, 0.02669837698340416], + [2.769798994064331, 6.773916721343994], + [1.0867053270339966, -5.496757984161377], + [-5.043447017669678, 6.566418647766113], + [-1.3731087446212769, 11.805126190185547], + [2.690603017807007, -4.385743141174316], + [0.5370919108390808, -7.030246734619141], + [1.374965786933899, 0.5836572647094727], + [0.38999485969543457, -4.126561164855957], + [-0.963532030582428, 10.444242477416992], + [-3.5404624938964844, -2.533093214035034], + [-4.043691635131836, 6.657654285430908], + [0.5049009323120117, -7.381073951721191], + [5.774929046630859, -1.3339818716049194], + [-5.026126861572266, 1.0429880619049072], + [0.3419504165649414, -6.316926002502441], + [0.9911995530128479, -5.613082408905029], + [1.292795181274414, 0.057237204164266586], + [-4.323841094970703, -1.645544409751892], + [1.0819973945617676, -5.766820907592773], + [-4.748011112213135, -2.50303053855896], + [0.7813857197761536, -8.707304000854492], + [1.1366453170776367, -6.357916831970215], + [0.6597959995269775, -4.951655387878418], + [2.3688981533050537, 6.4900641441345215], + [-3.289897918701172, -1.2340742349624634], + [6.193155288696289, -1.7343195676803589], + [1.2745647430419922, -0.10428300499916077], + [0.8971643447875977, -7.071867942810059], + [-3.4204444885253906, -2.8392913341522217], + [-1.1359772682189941, 1.6430079936981201], + [4.301814079284668, -3.982029676437378], + [-4.879782199859619, -4.006072521209717], + [-0.17208069562911987, 9.06934928894043], + [-2.416675329208374, 2.312446117401123], + [-5.2557053565979, -0.9599034786224365], + [-0.37752240896224976, 9.472667694091797], + [1.8796193599700928, 4.502768516540527], + [-3.2526586055755615, -1.437625527381897], + [7.719877243041992, -2.1949312686920166], + [0.5879665017127991, -8.304563522338867], + [-0.02933109551668167, 6.553135871887207], + [1.6264678239822388, 0.5902412533760071], + [-1.3005951642990112, 10.52448558807373], + [-3.849694013595581, 5.662138938903809], + [-2.7331268787384033, -0.9571933746337891], + [-1.3537886142730713, 10.973995208740234], + [-4.781462669372559, -3.3889636993408203], + [8.93688678741455, -2.9645168781280518], + [-5.205775737762451, -5.027698516845703], + [0.7211481928825378, -8.143376350402832], + [-4.712563991546631, 7.133487701416016], + [-0.7783901691436768, 10.727293014526367], + [-3.70220685005188, -0.6680890321731567], + [7.676357746124268, -3.3305819034576416], + [-2.1505980491638184, 0.4354051947593689], + [-0.6908240914344788, 9.541067123413086], + [1.7058393955230713, 4.3438286781311035], + [2.4472200870513916, -4.050323963165283], + [-3.9043798446655273, -0.23680824041366577], + [2.105825662612915, 5.473536014556885], + [-3.8496429920196533, -2.5204226970672607], + [0.22751164436340332, -6.283505916595459], + [2.7483761310577393, -4.325429916381836], + [-0.45227885246276855, 9.923444747924805], + [-2.0848028659820557, 0.15924876928329468], + [-3.3936214447021484, -1.295578122138977], + [2.5622785091400146, 6.036726951599121], + [9.936259269714355, -2.964402914047241], + [-3.2901110649108887, -0.5062217712402344], + [0.9401105046272278, 0.19157680869102478], + [-3.6557376384735107, -0.7710890173912048], + [6.030517101287842, -1.6622246503829956], + [1.333661675453186, -3.288315534591675], + [4.948422908782959, 7.9928741455078125], + [-0.9796661734580994, 10.462162017822266], + [0.5029099583625793, -7.588522434234619], + [6.183390140533447, -2.69596004486084], + [0.42510902881622314, -5.204089164733887], + [6.850772380828857, -2.3980419635772705], + [2.946335792541504, -4.7451171875], + [-2.2987639904022217, -0.4698471426963806], + [-1.9013711214065552, 0.9484604001045227], + [0.4465567469596863, -4.128356456756592], + [-0.49965932965278625, -1.3950597047805786], + [-5.522311687469482, -0.918829083442688], + [-3.508733034133911, -2.3958041667938232], + [-2.6769187450408936, -1.7806525230407715], + [-1.7620925903320312, 0.9117993712425232], + [2.9590601921081543, -4.283372402191162], + [-1.6566587686538696, 1.076297640800476], + [-1.311137318611145, -0.6467934250831604], + [8.370318412780762, -2.5815367698669434], + [-1.1250673532485962, 11.118793487548828], + [7.876273155212402, -3.559382438659668], + [2.730506181716919, -5.15528678894043], + [4.07180643081665, 6.856503486633301], + [0.1086360439658165, -4.371993064880371], + [2.2383415699005127, 5.390318393707275], + [-1.332417368888855, 1.9453240633010864], + [-3.33988356590271, -1.6437104940414429], + [-0.41780975461006165, 5.607290744781494], + [-2.0646800994873047, 0.8386221528053284], + [0.5376945734024048, -0.7246179580688477], + [0.383977472782135, -6.005865097045898], + [8.191638946533203, -2.9355437755584717], + [3.3867080211639404, 6.6838483810424805], + [1.2232511043548584, 5.329391956329346], + [-0.7467418313026428, 0.7647451162338257], + [0.8043509721755981, -8.004365921020508], + [-1.1146769523620605, 10.613800048828125], + [0.6039338111877441, -6.883236885070801], + [-0.8582598567008972, 10.791579246520996], + [-3.623910427093506, -1.1322911977767944], + [-0.40659207105636597, -1.8429099321365356], + [1.6746182441711426, -3.896141290664673], + [2.829557418823242, 5.823767185211182], + [-0.77488774061203, 11.047204971313477], + [2.5431625843048096, 0.7342293858528137], + [-3.7374565601348877, -1.9895737171173096], + [-1.5664681196212769, 12.607205390930176], + [9.103257179260254, -2.757361650466919], + [7.363696575164795, -2.1217634677886963], + [2.87931227684021, -4.969657897949219], + [2.024521589279175, 5.251846790313721], + [2.743682622909546, -4.367531776428223], + [-3.1902220249176025, -0.2465192973613739], + [2.813051462173462, -4.879075527191162], + [9.5643892288208, -2.921931028366089], + [3.966998338699341, -6.739072322845459], + [-4.569252967834473, 6.85244083404541], + [0.7263607382774353, -6.684118270874023], + [-3.6241161823272705, -1.4094704389572144], + [-5.13475227355957, -1.8779271841049194], + [2.599527597427368, 5.615039825439453], + [-2.7784831523895264, 6.475856781005859], + [0.3330717086791992, -5.370942115783691], + [6.336218357086182, -1.6327658891677856], + [-1.3639895915985107, 1.3688794374465942], + [0.22952938079833984, -4.588908672332764], + [0.2508351802825928, -5.532055377960205], + [1.9243109226226807, -4.2364044189453125], + [4.909824371337891, 7.84424352645874], + [-4.656674385070801, 4.33934211730957], + [2.5284907817840576, 5.391816139221191], + [0.6159018874168396, -7.960568428039551], + [-4.839511871337891, -0.9626681804656982], + [0.12413185089826584, -2.8268535137176514], + [-3.946927785873413, -2.0218698978424072], + [0.5183936357498169, -6.687563896179199], + [0.2954356074333191, -0.4712666869163513], + [6.483365058898926, -3.399005651473999], + [0.1396016776561737, -1.3945165872573853], + [-3.2017204761505127, 3.6091158390045166], + [0.8396579027175903, -0.3838721513748169], + [7.660974025726318, -2.8630177974700928], + [2.1159005165100098, 0.5743474960327148], + [1.1261765956878662, 5.800978183746338], + [0.43741607666015625, -6.661655426025391], + [4.401784420013428, 7.087397575378418], + [2.9688289165496826, 6.5298027992248535], + [7.392080783843994, -1.9820520877838135], + [-5.049340724945068, 3.151674509048462], + [-3.909993886947632, -2.0907158851623535], + [-4.161026477813721, -2.6195051670074463], + [7.093221187591553, -2.5752999782562256], + [-1.1522676944732666, 11.203003883361816], + [-0.852299153804779, 10.893867492675781], + [-5.200495719909668, 4.494364261627197], + [-3.995642900466919, 3.5995776653289795], + [-3.0388457775115967, -1.0912209749221802], + [-3.1491377353668213, -2.648960828781128], + [-5.3992228507995605, 4.658613204956055], + [2.95802640914917, -4.82867431640625], + [0.4047555923461914, -6.824148178100586], + [0.7565831542015076, -10.07690715789795], + [4.998498916625977, -0.5602531433105469], + [-0.8351313471794128, 11.410018920898438], + [-3.1073620319366455, 0.4759373068809509], + [-2.6323018074035645, -0.6669493913650513], + [-5.207981586456299, 4.492900848388672], + [1.2734313011169434, 0.11020457744598389], + [3.0908732414245605, -5.137391567230225], + [5.561782360076904, -3.2164793014526367], + [2.0946285724639893, 5.58592414855957], + [-3.362276792526245, -1.039694905281067], + [-1.1614117622375488, 10.486371040344238], + [8.932313919067383, -3.407956123352051], + [1.6993303298950195, 5.8692193031311035], + [-4.949475288391113, -0.49332940578460693], + [1.6496645212173462, -5.408016681671143], + [0.4394301772117615, -5.255967140197754], + [1.7468267679214478, -4.0893168449401855], + [-2.3075969219207764, 4.13339900970459], + [-3.576962947845459, 3.971937894821167], + [-3.187934398651123, -2.2163989543914795], + [0.8557864427566528, -4.649600982666016], + [0.2824176549911499, -5.289096355438232], + [4.428989887237549, -1.0050859451293945], + [-1.1770329475402832, 11.2666015625], + [0.29978999495506287, -2.9187872409820557], + [2.5119407176971436, 6.338092803955078], + [-0.8864099979400635, 10.142139434814453], + [-1.3606574535369873, -0.9742138385772705], + [-0.47937899827957153, -1.2008811235427856], + [0.7167519927024841, -8.108580589294434], + [-1.7905771732330322, 1.3629913330078125], + [-2.5901920795440674, -3.3502566814422607], + [0.6391999125480652, -8.895514488220215], + [0.43310683965682983, -5.041597366333008], + [0.6520127058029175, -8.680154800415039], + [-1.3954538106918335, 11.9671049118042], + [-0.9998782277107239, 4.90574836730957], + [-3.924793243408203, -1.104612946510315], + [-3.598290205001831, -1.351491093635559], + [2.523357391357422, -4.523576259613037], + [-5.06673526763916, 6.704965114593506], + [-3.210883855819702, -1.0821460485458374], + [5.635140895843506, -1.259146809577942], + [0.7531014084815979, -2.948545217514038], + [0.6682195067405701, 9.213284492492676], + [0.8281145691871643, -8.097308158874512], + [-2.991417646408081, 4.607820510864258], + [0.3392189145088196, -6.679147720336914], + [0.5500547289848328, -3.5995185375213623], + [-0.7949753403663635, 10.515116691589355], + [-1.9391193389892578, 5.760898590087891], + [0.5687153935432434, -7.670445442199707], + [-1.511296272277832, 12.551154136657715], + [1.7471449375152588, 1.7602107524871826], + [-1.4709128141403198, 12.495729446411133], + [-2.623717784881592, -1.1551274061203003], + [-3.115227460861206, 3.73099946975708], + [6.932142734527588, -4.471931457519531], + [2.2319576740264893, -4.432642936706543], + [-2.151456594467163, -0.9506840705871582], + [-4.122321605682373, -2.799377918243408], + [-4.105624675750732, 5.926886081695557], + [0.6611455082893372, -8.50851821899414], + [7.4449238777160645, -2.3026678562164307], + [0.7204665541648865, -9.327194213867188], + [0.6369178891181946, -8.364227294921875], + [1.9452934265136719, -4.585424900054932], + [1.2607409954071045, 2.5886449813842773], + [1.1107802391052246, -6.357756614685059], + [0.4641723036766052, -7.588097095489502], + [3.2757856845855713, -4.053647041320801], + [-3.9673807621002197, 4.91295051574707], + [2.928816080093384, -4.510598182678223], + [1.8592400550842285, 5.791213035583496], + [0.9225283265113831, -0.0624372698366642], + [-4.0998854637146, 4.535408973693848], + [4.246340751647949, 6.8814544677734375], + [-4.321625232696533, -1.1193821430206299], + [-1.9289764165878296, -0.9066766500473022], + [-0.9274517893791199, 9.837474822998047], + [-3.785876989364624, -2.3761179447174072], + [6.605172634124756, -2.8103244304656982], + [-2.785691261291504, -0.8560811877250671], + [1.391814947128296, 1.7905479669570923], + [0.7538732886314392, -0.5146361589431763], + [7.690642356872559, -2.496924877166748], + [1.8166950941085815, -4.502871513366699], + [0.4014607071876526, -6.600201606750488], + [2.4448986053466797, -7.411349773406982], + [0.6161841750144958, -7.330682754516602], + [-4.2353692054748535, -0.324249267578125], + [-6.095983505249023, 8.046136856079102], + [-0.3227010667324066, 0.7686536312103271], + [4.482158184051514, 7.424437046051025], + [-0.17119139432907104, 8.633543014526367], + [1.5610628128051758, 4.751729965209961], + [-3.1536853313446045, -0.7763487696647644], + [-4.966153621673584, 5.587882041931152], + [-1.0201181173324585, 2.991039752960205], + [-3.343050718307495, -1.6666473150253296], + [6.541999340057373, -2.469085454940796], + [-2.5845983028411865, -2.2445552349090576], + [0.6374958157539368, -7.67474365234375], + [2.8181235790252686, -4.733731269836426], + [0.7207031846046448, -6.643253326416016], + [-3.070100784301758, 4.88983154296875], + [2.0153329372406006, 3.9168479442596436], + [-2.2308647632598877, -0.8047367334365845], + [-1.8765016794204712, 1.1570266485214233], + [7.123789310455322, -1.8584808111190796], + [-2.2281606197357178, -0.3604663610458374], + [0.3584359884262085, -6.585202693939209], + [-4.455307483673096, -2.974412202835083], + [-1.5672892332077026, 0.9722633361816406], + [-1.8207429647445679, 0.2437942922115326], + [-4.370161056518555, -0.28911256790161133], + [-1.0338612794876099, 10.311752319335938], + [7.405719757080078, -2.9097464084625244], + [-1.5283499956130981, -0.43995609879493713], + [0.4116387367248535, -6.912845134735107], + [0.8464325070381165, -5.290657043457031], + [-4.7436137199401855, -5.031200408935547], + [-3.9275853633880615, -0.5354032516479492], + [3.753908157348633, -4.430018901824951], + [8.177498817443848, -3.3841540813446045], + [-5.076175212860107, 6.443655490875244], + [-3.0917842388153076, 5.027195930480957], + [0.9191400408744812, -5.215183258056641], + [-2.1052072048187256, 1.770137906074524], + [-2.5898213386535645, 0.3563051223754883], + [-0.7347132563591003, 10.216682434082031], + [-4.787843704223633, 5.67982292175293], + [-1.1011581420898438, 11.340837478637695], + [2.113751173019409, -3.8254435062408447], + [2.6945807933807373, -4.375457763671875], + [-2.598925828933716, 0.23447877168655396], + [5.781604290008545, -4.616719722747803], + [0.5664997100830078, -7.853409767150879], + [-5.18716287612915, 6.884415149688721], + [-2.97499418258667, -0.30511629581451416], + [1.2647662162780762, -0.0739300549030304], + [6.802460193634033, -2.0015156269073486], + [-1.7089908123016357, 1.3017240762710571], + [2.329249858856201, 6.298214435577393], + [6.27007532119751, -4.5806884765625], + [-3.9701011180877686, -1.181219220161438], + [-1.5321557521820068, -0.6736909747123718], + [1.9367265701293945, -5.259283065795898], + [0.6926946043968201, -8.258901596069336], + [-4.441133975982666, 4.412140369415283], + [2.8892054557800293, 6.429037570953369], + [2.7981109619140625, -4.503749847412109], + [-4.595790863037109, -0.2335529327392578], + [1.788893222808838, 0.7739797830581665], + [-3.913905382156372, 5.7285871505737305], + [-1.8287813663482666, 0.6241965293884277], + [-1.2667139768600464, 11.38106918334961], + [-0.6521230340003967, 10.898270606994629], + [-4.468419551849365, -0.770836591720581], + [-0.5432211756706238, 9.551837921142578], + [-2.0710880756378174, 1.5488754510879517], + [0.22150176763534546, -4.778487682342529], + [-0.44618040323257446, 10.016164779663086], + [0.5766658782958984, -5.590619087219238], + [2.6415462493896484, -4.3522443771362305], + [-2.093757390975952, 2.0250229835510254], + [0.7662262916564941, -8.59142780303955], + [-0.8297641277313232, 9.931558609008789], + [3.189415454864502, 6.77851676940918], + [6.760037899017334, -2.4428000450134277], + [0.9935042262077332, -5.064948081970215], + [0.7710736393928528, -0.6216624975204468], + [-2.272292375564575, 2.281090497970581], + [-1.1595721244812012, -0.09182384610176086], + [1.519454002380371, -4.194482803344727], + [-0.4983440637588501, 9.793133735656738], + [0.562770426273346, -6.363162040710449], + [-4.632457256317139, -0.9799004793167114], + [1.4260287284851074, 0.40730002522468567], + [2.425513505935669, 5.925316333770752], + [-1.9364533424377441, -0.0815356969833374], + [-2.61676287651062, -2.208038568496704], + [0.8134909868240356, 3.895745038986206], + [0.6348450779914856, -7.574685573577881], + [-0.43899327516555786, 10.958717346191406], + [-4.0992841720581055, -3.2388830184936523], + [-3.159078359603882, -1.9966481924057007], + [-1.4237298965454102, 12.212120056152344], + [-3.716325044631958, 5.29163932800293], + [-0.9717252850532532, 10.584895133972168], + [-5.6152191162109375, -1.4496816396713257], + [0.5582308173179626, -7.433034420013428], + [2.2493553161621094, -4.654603958129883], + [2.2305989265441895, 6.192956924438477], + [0.2670056223869324, -4.614577293395996], + [-0.34991925954818726, 9.320783615112305], + [-3.1060121059417725, 6.44753360748291], + [-3.5272376537323, -1.0410618782043457], + [-0.43968430161476135, 5.054996490478516], + [-1.1111583709716797, 9.946436882019043], + [7.85364294052124, -2.752722978591919], + [1.7580182552337646, -6.651911735534668], + [0.0025893673300743103, 0.6382429599761963], + [-1.3267642259597778, 11.664520263671875], + [3.7218916416168213, -5.967348575592041], + [-0.5655611157417297, 9.579322814941406], + [6.4779839515686035, -4.35478401184082], + [1.2021092176437378, -5.713491439819336], + [1.7905809879302979, 5.174656867980957], + [8.748178482055664, -3.4878458976745605], + [0.377122700214386, -5.310986518859863], + [-4.662242889404297, 6.2461323738098145], + [-1.9273139238357544, 2.079596996307373], + [1.7844922542572021, 2.160024404525757], + [-0.003588743507862091, -5.281693458557129], + [-1.7781442403793335, 1.1940733194351196], + [-4.5755696296691895, 4.998893737792969], + [8.803751945495605, -2.785367727279663], + [-0.5052679777145386, 9.860822677612305], + [-2.4419946670532227, -1.651689887046814], + [1.734415888786316, 2.052691698074341], + [3.841449022293091, 7.16328239440918], + [-5.094836711883545, -1.9488598108291626], + [-3.116687774658203, 5.2719316482543945], + [-4.208425045013428, 6.322268009185791], + [-1.0238360166549683, 10.564176559448242], + [-5.747894763946533, 4.868922233581543], + [2.3813693523406982, -4.238204479217529], + [1.6645114421844482, 1.3373805284500122], + [1.9878737926483154, 4.917912006378174], + [-3.3287317752838135, -1.1827634572982788], + [-1.4597193002700806, 11.556272506713867], + [4.2197651863098145, 7.019476890563965], + [-4.307599067687988, 0.15243452787399292], + [2.2033779621124268, 5.637242317199707], + [-3.7622478008270264, -1.431493878364563], + [2.9060614109039307, -4.524975299835205], + [-1.4766006469726562, 2.9690773487091064], + [4.778528690338135, 7.777604579925537], + [-1.8761446475982666, 1.7042006254196167], + [-1.30342435836792, 11.299127578735352], + [6.552730083465576, -4.041209697723389], + [-3.2780520915985107, -1.4432291984558105], + [5.450486660003662, 8.170580863952637], + [1.9702246189117432, -5.998818397521973], + [2.2069246768951416, 6.004010200500488], + [0.7305226922035217, -7.351217746734619], + [-1.8695330619812012, 1.8924537897109985], + [-1.0766406059265137, 10.274807929992676], + [7.5771894454956055, -2.482318162918091], + [-3.494135618209839, -1.6385551691055298], + [1.8991529941558838, 0.22081583738327026], + [2.876965284347534, 4.914460182189941], + [-1.3507800102233887, 0.978289008140564], + [-2.637972116470337, 2.827739953994751], + [0.421153724193573, -5.291886329650879], + [-3.853297472000122, -3.388256549835205], + [8.239903450012207, -2.5976340770721436], + [-1.3417569398880005, 11.099328994750977], + [-4.3709211349487305, -1.6477906703948975], + [4.565942287445068, 7.205382347106934], + [0.9432974457740784, -7.116552829742432], + [1.236072063446045, -5.040829658508301], + [0.3239642381668091, -6.28337287902832], + [-0.8858988881111145, 9.978034973144531], + [5.558099269866943, -1.2801047563552856], + [2.8577558994293213, -4.57157039642334], + [-1.7546519041061401, 5.352752208709717], + [2.0505995750427246, 4.684303283691406], + [0.3079652190208435, -6.69564962387085], + [0.3338152766227722, -6.754443645477295], + [0.6187849640846252, -8.1427001953125], + [-3.5704245567321777, -2.3490123748779297], + [-2.0351011753082275, 0.09151175618171692], + [-1.627909541130066, 2.235889196395874], + [2.42211651802063, -4.228501319885254], + [0.24720239639282227, -5.438426971435547], + [-3.365203619003296, -1.6927578449249268], + [-3.4012906551361084, -1.5190144777297974], + [-1.2949049472808838, 12.284729957580566], + [3.527200937271118, 6.482179641723633], + [-1.3308061361312866, 11.921097755432129], + [-4.2354021072387695, -2.594557523727417], + [-1.0376704931259155, 10.542149543762207], + [0.7258824706077576, -8.879212379455566], + [4.096765995025635, 7.274620532989502], + [0.054424576461315155, -5.050473690032959], + [-5.415873050689697, -0.7925992012023926], + [1.9498963356018066, -0.16095474362373352], + [-1.0032390356063843, 11.442183494567871], + [-2.055793285369873, 0.7061121463775635], + [-3.291945695877075, -2.2770512104034424], + [-0.9881028532981873, 10.570703506469727], + [8.862713813781738, -2.847015619277954], + [0.8930328488349915, -5.632081985473633], + [-3.2668397426605225, -0.9007399678230286], + [0.41358599066734314, -4.071445941925049], + [4.829885005950928, -3.0407793521881104], + [-1.8790767192840576, 0.5735806226730347], + [-4.245868682861328, -1.5239049196243286], + [0.8278219103813171, -7.969069480895996], + [-0.04816342145204544, -3.101013660430908], + [-3.398998498916626, -1.0981372594833374], + [9.598349571228027, -2.886457681655884], + [-5.323459625244141, 6.527502059936523], + [-2.926490545272827, 5.54691219329834], + [-5.250246524810791, -1.4094467163085938], + [5.558584690093994, -1.2644349336624146], + [-0.4120711386203766, 5.93807315826416], + [2.3875486850738525, -4.789694786071777], + [3.705724000930786, 7.138471603393555], + [4.6813154220581055, 7.681674003601074], + [2.7707455158233643, -4.614872932434082], + [-3.638392210006714, -1.687506079673767], + [-5.056265354156494, 6.783175468444824], + [-3.238276243209839, -1.1687251329421997], + [-1.7746304273605347, 5.511127471923828], + [-1.580674648284912, 0.6763269305229187], + [-1.9584667682647705, 1.064376950263977], + [-3.8861095905303955, 6.548135757446289], + [2.7700183391571045, 5.453145980834961], + [8.508435249328613, -2.813964366912842], + [5.182875633239746, 8.32085132598877], + [-0.12885650992393494, -2.1216847896575928], + [-4.260787010192871, 6.174699783325195], + [0.6409899592399597, -7.350698471069336], + [-0.3981117606163025, 8.689629554748535], + [0.4172225296497345, -5.0738396644592285], + [3.62829327583313, 6.652338981628418], + [-5.398528575897217, 2.8126027584075928], + [5.4979143142700195, -1.3518222570419312], + [-3.8765015602111816, -1.1078611612319946], + [4.6064558029174805, 7.380887985229492], + [0.673431396484375, -7.7560553550720215], + [-2.3158087730407715, -1.1068596839904785], + [2.8277008533477783, -4.621755599975586], + [-1.981881022453308, 2.5262560844421387], + [-3.7728841304779053, -2.623850107192993], + [-4.477235317230225, -0.7315477132797241], + [-0.627169668674469, -3.448085069656372], + [2.6169636249542236, -5.290200233459473], + [-3.655205011367798, -1.1762661933898926], + [-0.060051508247852325, -4.778573513031006], + [1.3092715740203857, 2.086695432662964], + [-4.193241596221924, -1.212947964668274], + [2.6971867084503174, 4.805058479309082], + [-0.6988034248352051, -3.5641653537750244], + [-1.2136623859405518, 0.8489646911621094], + [-5.129753112792969, 4.893285751342773], + [-4.035559177398682, -2.789729356765747], + [-1.080281376838684, 1.5412601232528687], + [9.033400535583496, -2.9161243438720703], + [0.6373034119606018, -8.364551544189453], + [0.3124535083770752, -6.244752407073975], + [2.592752695083618, 5.645918369293213], + [-1.6059143543243408, 1.6908906698226929], + [4.547962665557861, -1.1742089986801147], + [0.7179252505302429, -6.257318496704102], + [-3.529667615890503, -1.7248011827468872], + [-5.243815898895264, 2.7866902351379395], + [-2.924776792526245, -0.7806063890457153], + [3.0376346111297607, -3.0925099849700928], + [-4.1608710289001465, -3.0083634853363037], + [6.03889799118042, -3.892967939376831], + [-4.380478382110596, 4.981805801391602], + [0.2829474210739136, 4.21030330657959], + [-0.5498095154762268, -3.1406993865966797], + [-3.435009717941284, -1.4436286687850952], + [-1.854585886001587, -0.7932391166687012], + [-3.5909464359283447, -1.2606018781661987], + [-2.0683465003967285, 5.669380187988281], + [-2.5210249423980713, 4.356422424316406], + [-0.7248023152351379, 9.828948974609375], + [1.8143200874328613, 6.327340126037598], + [-3.1151578426361084, -1.0046135187149048], + [-1.2281936407089233, 10.6712646484375], + [2.572704315185547, 5.956545829772949], + [-1.8077298402786255, 2.1415882110595703], + [0.4501521587371826, -7.205265998840332], + [-3.725600481033325, -2.3230602741241455], + [0.5335006713867188, -6.742544174194336], + [-1.0070624351501465, 10.85399055480957], + [8.47179126739502, -2.5637705326080322], + [-1.92925226688385, 2.184852361679077], + [-4.9291462898254395, -1.2527375221252441], + [-4.711369037628174, -3.212738275527954], + [1.7193050384521484, 2.0857231616973877], + [-3.769223213195801, -1.5090404748916626], + [8.28842830657959, -2.679346799850464], + [-1.2685490846633911, -1.0275217294692993], + [-4.065336227416992, -2.0704734325408936], + [-0.49581271409988403, -3.1067075729370117], + [0.7481462955474854, -8.538570404052734], + [0.5817385315895081, -7.717892646789551], + [0.543491780757904, -8.630949020385742], + [2.2924814224243164, -4.788298606872559], + [0.6484830975532532, -7.698582172393799], + [-3.8729734420776367, -0.9097433090209961], + [2.0154409408569336, 0.5056930780410767], + [-3.6277453899383545, 5.923372268676758], + [-3.6873703002929688, -1.1699351072311401], + [-5.196280002593994, -1.0740705728530884], + [-1.8435637950897217, 0.7778609991073608], + [8.660490036010742, -2.8744149208068848], + [3.1062510013580322, 5.928685188293457], + [9.015063285827637, -2.90283465385437], + [-3.4665896892547607, -0.9161406755447388], + [-1.0327268838882446, 11.464513778686523], + [0.5353879332542419, -0.6036830544471741], + [1.9305229187011719, 3.1897850036621094], + [-1.5930278301239014, 1.5983266830444336], + [-5.580655574798584, 7.729456901550293], + [-4.8853936195373535, 3.077767848968506], + [-1.590073585510254, 12.76835823059082], + [-3.6169779300689697, -0.3942946195602417], + [-1.3112850189208984, 1.5684237480163574], + [0.2862882614135742, -6.01546573638916], + [8.383658409118652, -2.4896562099456787], + [5.7233171463012695, -4.790843963623047], + [0.7810298800468445, -5.794994354248047], + [-1.9017717838287354, -3.586456537246704], + [2.075967311859131, -4.97662878036499], + [-3.2322580814361572, -0.9257004857063293], + [2.7834386825561523, -4.58978271484375], + [-4.013354301452637, -1.5607872009277344], + [3.742429256439209, 6.872687339782715], + [-3.8195791244506836, -1.695607304573059], + [6.899929523468018, -5.893685340881348], + [2.817852020263672, -3.8233320713043213], + [-4.1351318359375, -2.421351194381714], + [2.4332449436187744, -3.478876829147339], + [-1.179962158203125, 10.710434913635254], + [3.0364677906036377, -4.8040385246276855], + [-1.076081395149231, 11.156143188476562], + [-3.7267343997955322, -3.0697624683380127], + [0.4053781032562256, -6.622762680053711], + [6.50840950012207, -2.7413077354431152], + [5.501425266265869, -3.5285568237304688], + [2.159682035446167, 5.939048767089844], + [-4.3127522468566895, -1.5915621519088745], + [2.4291017055511475, 5.684316635131836], + [0.33683913946151733, -5.74020528793335], + [-3.677673578262329, 5.807045936584473], + [0.29983729124069214, -5.367508411407471], + [-3.605607748031616, 3.9829657077789307], + [-2.7719383239746094, 3.690741777420044], + [-0.7062574028968811, 0.9456367492675781], + [-1.621770977973938, 6.106551647186279], + [-3.5822112560272217, -0.6507595777511597], + [-3.977045774459839, -1.282493233680725], + [-5.126430034637451, 6.895940780639648], + [-4.9815754890441895, 6.343925952911377], + [-3.6660494804382324, -2.172559976577759], + [-2.377998113632202, 0.042056020349264145], + [-3.953125238418579, -2.1079840660095215], + [1.6982481479644775, -4.981777191162109], + [-3.644233465194702, -2.2866432666778564], + [2.9593522548675537, -4.942887783050537], + [0.4232785701751709, -6.002135276794434], + [-2.2590558528900146, -0.1781449317932129], + [-4.6810808181762695, 6.988771915435791], + [0.47115057706832886, -7.399844169616699], + [-4.1660943031311035, -2.6021385192871094], + [-0.49398696422576904, -1.308092713356018], + [-4.26278018951416, -1.2255045175552368], + [4.2980756759643555, -2.838677167892456], + [-1.8123154640197754, 1.5578120946884155], + [-3.602034568786621, 4.582993984222412], + [-2.0158660411834717, -1.165499210357666], + [5.684817790985107, -1.5435998439788818], + [-4.278029918670654, 4.97954797744751], + [0.34545761346817017, -6.211499214172363], + [2.428436517715454, -4.182877540588379], + [5.393684387207031, 8.35118293762207], + [0.18108779191970825, -5.754937171936035], + [2.0698812007904053, 5.728206634521484], + [-0.1507670283317566, 9.121932029724121], + [-1.9053215980529785, 2.1251413822174072], + [0.9004386067390442, -5.698957920074463], + [-3.287118911743164, 5.467224597930908], + [-3.4731338024139404, -1.2442761659622192], + [3.038600206375122, -5.081669807434082], + [-4.4493842124938965, -3.98612380027771], + [6.9174485206604, -3.245784044265747], + [-1.9516336917877197, 2.538076639175415], + [2.6037795543670654, 6.1134748458862305], + [-4.184536457061768, 3.6242516040802], + [-0.45413756370544434, 9.674190521240234], + [0.6434062123298645, -7.408822059631348], + [-0.05337650328874588, -3.6989145278930664], + [-4.773746013641357, -1.023726224899292], + [-3.5047502517700195, -1.256703495979309], + [3.4708285331726074, 6.16585111618042], + [-4.078943729400635, 4.207894325256348], + [-1.451148509979248, 12.427278518676758], + [3.0901739597320557, 6.284290790557861], + [-0.024303443729877472, -1.483337163925171], + [2.8748884201049805, -4.540895938873291], + [-5.072469234466553, -1.1292020082473755], + [-3.7004244327545166, 1.6547797918319702], + [1.6603047847747803, 0.46481192111968994], + [-3.7961432933807373, -2.5913937091827393], + [-3.1300816535949707, 3.534587860107422], + [-3.4702627658843994, -2.0066893100738525], + [-2.220961809158325, 2.0989019870758057], + [-2.237975835800171, 0.12359428405761719], + [-1.0913816690444946, 10.330620765686035], + [-1.9729845523834229, 0.6079901456832886], + [-4.865146160125732, 6.674764633178711], + [0.6657816767692566, -5.181797504425049], + [-3.5351688861846924, -0.9504386782646179], + [-5.370522975921631, 7.414061069488525], + [0.451572060585022, -6.794312477111816], + [-4.893334865570068, 6.567079544067383], + [0.6697989702224731, -0.5552661418914795], + [-2.062080144882202, 2.200944662094116], + [1.0302960872650146, -6.930359363555908], + [-2.900022506713867, -2.000272750854492], + [-0.94418865442276, -1.147678256034851], + [0.9493280053138733, 4.380173683166504], + [4.169382572174072, 7.617904186248779], + [1.1687179803848267, -0.27116864919662476], + [-3.0911128520965576, -1.7204031944274902], + [0.10444887727499008, -3.79359769821167], + [2.3455793857574463, 5.943531036376953], + [0.31378883123397827, -6.920855522155762], + [-3.5334222316741943, -1.0131078958511353], + [1.1728026866912842, -4.710245132446289], + [-0.9017019271850586, -3.2299325466156006], + [9.622719764709473, -2.9981276988983154], + [0.5215007066726685, -5.744891166687012], + [0.3403834104537964, -6.627572059631348], + [-1.1951656341552734, 10.353023529052734], + [-3.4234426021575928, -1.9046441316604614], + [-2.493013620376587, -2.723280906677246], + [-0.7008461356163025, 9.976090431213379], + [1.6748270988464355, 5.347272872924805], + [-1.7806308269500732, 1.5742568969726562], + [3.274334192276001, -4.823179244995117], + [1.0676437616348267, -1.3854790925979614], + [2.7549383640289307, 5.459728717803955], + [0.45029133558273315, -3.977351665496826], + [-3.517275094985962, -1.1771372556686401], + [1.7099238634109497, 3.2051796913146973], + [0.5605072379112244, -6.936831951141357], + [5.351889133453369, -1.5800862312316895], + [9.17751693725586, -2.74381947517395], + [1.4851932525634766, 2.2958133220672607], + [1.736476182937622, 0.6125205755233765], + [2.50630259513855, 4.484623908996582], + [-0.7535446286201477, 10.135398864746094], + [-3.969083309173584, 5.879237174987793], + [1.9969730377197266, 5.648759841918945], + [0.9442976117134094, -0.4568767845630646], + [-3.485239267349243, -1.6805651187896729], + [-1.7564709186553955, 1.4566694498062134], + [2.397674322128296, -5.260714054107666], + [3.385786294937134, -3.639907121658325], + [-3.8905065059661865, -2.1200058460235596], + [3.037848711013794, 6.5362749099731445], + [-5.706233501434326, 2.897113561630249], + [0.7127668261528015, -5.7394609451293945], + [-0.11260632425546646, -0.9028011560440063], + [-4.136696815490723, -1.9876561164855957], + [-5.474207401275635, 4.913297653198242], + [-5.805269241333008, 7.887505531311035], + [-5.1330180168151855, 6.922687530517578], + [2.1206395626068115, -4.348386764526367], + [6.6460065841674805, -1.617785930633545], + [1.5986462831497192, 1.964119553565979], + [3.588312864303589, 6.94074821472168], + [0.55682772397995, -7.242240905761719], + [6.979506492614746, -5.387797832489014], + [-1.914255976676941, 2.029998540878296], + [7.530648708343506, -3.913090467453003], + [2.396419048309326, -5.5757365226745605], + [-2.074608325958252, 2.1651761531829834], + [-1.822635531425476, 2.247429609298706], + [-4.794911861419678, -0.8805592060089111], + [2.8788063526153564, -4.551996231079102], + [1.5939072370529175, 1.7128835916519165], + [9.835854530334473, -2.9811391830444336], + [-3.4362244606018066, -1.0298216342926025], + [-3.1598575115203857, -1.862757682800293], + [-2.745041608810425, 3.1259188652038574], + [-3.9641971588134766, -2.4046132564544678], + [2.925204038619995, -4.571658611297607], + [-1.9184865951538086, 1.9716242551803589], + [-3.9927780628204346, -0.8417006731033325], + [-1.875133991241455, 2.388927698135376], + [0.9700585007667542, -6.610769748687744], + [-1.3820146322250366, 0.4355521500110626], + [-0.14897948503494263, 8.70252799987793], + [4.603359699249268, 7.2842936515808105], + [1.2188234329223633, -0.1864282488822937], + [-3.7908108234405518, 3.38664174079895], + [0.32575637102127075, -5.976412296295166], + [0.5452917814254761, -7.3820085525512695], + [-0.15558591485023499, -3.4547760486602783], + [-0.9181938171386719, 10.358057975769043], + [2.9746057987213135, -3.8567850589752197], + [0.2595941722393036, -0.8973790407180786], + [2.379855155944824, -5.385022163391113], + [0.49418216943740845, -6.238747596740723], + [-4.728030681610107, 5.68900203704834], + [-3.622243642807007, -2.6462442874908447], + [-3.4083800315856934, -2.0969178676605225], + [0.6052201986312866, -8.26387882232666], + [-0.6572958827018738, 9.608962059020996], + [2.5042381286621094, 0.7344942092895508], + [7.594810485839844, -2.3993489742279053], + [-0.5376290678977966, 3.098621129989624], + [5.884605884552002, -1.6823408603668213], + [0.6970811486244202, -7.760956287384033], + [-1.27389395236969, 11.266271591186523], + [1.9976980686187744, -5.605506896972656], + [3.2823731899261475, 6.586489677429199], + [-4.068492889404297, -1.5648399591445923], + [0.3867871165275574, -6.669460296630859], + [-4.017129898071289, -2.8789913654327393], + [-2.214844226837158, 1.495489478111267], + [-5.2248854637146, 2.0086634159088135], + [0.4811484217643738, -3.8353688716888428], + [0.9473497271537781, -5.660312652587891], + [-3.472219705581665, -1.5923024415969849], + [-3.732771158218384, -2.3712732791900635], + [-3.577209711074829, -0.9447665810585022], + [-2.0077760219573975, 2.0380592346191406], + [-0.9241330027580261, -1.5677434206008911], + [-2.5164966583251953, -1.3667900562286377], + [2.5336248874664307, -4.221288681030273], + [-4.887884616851807, -0.49136054515838623], + [-2.888676881790161, -3.4501917362213135], + [1.5854144096374512, -5.992737770080566], + [-3.7205140590667725, -1.0766494274139404], + [-2.1178231239318848, -0.5320197343826294], + [0.5569929480552673, -7.971714973449707], + [-4.13449764251709, -2.8555686473846436], + [-4.7879438400268555, 7.740384101867676], + [-3.3570659160614014, -0.7802749872207642], + [-0.5381218194961548, 3.650143623352051], + [5.2543110847473145, -4.041642665863037], + [-3.764674425125122, -1.468354344367981], + [-4.483402252197266, -4.109457969665527], + [-0.517387330532074, -3.744501829147339], + [0.006713531911373138, -0.0822649896144867], + [-1.2277159690856934, -1.5475631952285767], + [-1.934246301651001, 7.711560249328613], + [0.11254691332578659, -4.698757171630859], + [-3.458879232406616, -0.9199093580245972], + [-0.19146719574928284, 4.6305365562438965], + [-2.9057466983795166, -0.6516600847244263], + [2.83451247215271, 6.150885581970215], + [0.5684009194374084, -7.641934871673584], + [-3.588045835494995, -4.350290775299072], + [-3.459906816482544, -2.77162766456604], + [1.84799325466156, -3.7288577556610107], + [-3.715306520462036, 0.27255040407180786], + [-3.38753342628479, -0.9037685394287109], + [0.7504495978355408, 4.889338493347168], + [-0.9402075409889221, 10.966796875], + [-3.5777390003204346, -0.7156752347946167], + [-1.5988901853561401, -3.176532506942749], + [0.5800010561943054, -5.8958234786987305], + [-1.8534282445907593, 1.337598204612732], + [-3.8482906818389893, -1.922699213027954], + [0.6095907092094421, -8.447154998779297], + [-1.0340688228607178, 1.3920421600341797], + [1.3860020637512207, 2.0749833583831787], + [0.644294023513794, -6.950221538543701], + [-0.6782510876655579, 10.464836120605469], + [-4.336081027984619, -1.2041139602661133], + [-5.077905178070068, 7.241559028625488], + [7.483304500579834, -2.047978162765503], + [4.063975811004639, 6.761710166931152], + [-4.999983787536621, 7.181412696838379], + [-3.944702386856079, -2.049346685409546], + [7.921398639678955, -3.614300012588501], + [-2.1691436767578125, -0.6410912275314331], + [-4.077975273132324, 4.736814975738525], + [-2.9594004154205322, -0.3508732318878174], + [-4.082442760467529, 1.3772448301315308], + [0.5776401162147522, -0.27589961886405945], + [-4.5801682472229, -1.2386046648025513], + [-0.8780338168144226, 10.575111389160156], + [2.628039598464966, 5.783102989196777], + [10.15720272064209, -3.0287423133850098], + [-5.0817437171936035, 5.4961748123168945], + [2.7186479568481445, -4.170436859130859], + [0.6028516292572021, -7.02330207824707], + [-3.812880277633667, -2.483473539352417], + [7.122299671173096, -2.6546754837036133], + [3.28753924369812, 6.631075382232666], + [-5.505364894866943, 6.668747425079346], + [-5.770716190338135, 7.294471740722656], + [-0.6466039419174194, -0.8701150417327881], + [-0.9945570826530457, 11.091931343078613], + [-3.9903204441070557, 0.648099422454834], + [0.7888340353965759, 2.2266762256622314], + [7.066352367401123, -2.5287024974823], + [0.7534630298614502, -6.54641056060791], + [2.2389156818389893, -5.64158821105957], + [4.551977157592773, -5.933304786682129], + [-2.615952968597412, -0.5807040929794312], + [3.1200673580169678, 6.362307548522949], + [-0.4389342665672302, 9.1668701171875], + [-5.072256565093994, 4.936700344085693], + [2.632786512374878, -4.176670074462891], + [-0.7326448559761047, 10.90483283996582], + [0.27288103103637695, -5.39445686340332], + [-2.368262529373169, -1.3647218942642212], + [8.266024589538574, -3.068222761154175], + [0.5319391489028931, -5.922385215759277], + [-1.3107081651687622, 1.370963215827942], + [-1.100092887878418, 10.834186553955078], + [-3.913419008255005, 6.109752655029297], + [-3.540877103805542, -2.8255021572113037], + [1.0514824390411377, -4.718275547027588], + [-0.725793182849884, 9.785719871520996], + [-3.392881155014038, -1.370212197303772], + [3.6295721530914307, 6.502388000488281], + [-3.7776544094085693, 3.186584234237671], + [-2.0654778480529785, 2.7545840740203857], + [-0.872547447681427, 9.918559074401855], + [-3.4743659496307373, -1.6311393976211548], + [8.18270206451416, -2.572728395462036], + [-0.39407896995544434, -0.8580414056777954], + [-1.5161950588226318, 12.532459259033203], + [-5.257819175720215, 7.553242206573486], + [2.290670394897461, -4.240556716918945], + [-1.523014783859253, 1.1186755895614624], + [-1.7637568712234497, 0.7431433200836182], + [0.6535460948944092, -5.945230007171631], + [0.21089911460876465, -5.901442527770996], + [-2.5845351219177246, -0.26618531346321106], + [1.1122885942459106, -3.9006693363189697], + [1.479987382888794, 5.279169082641602], + [-1.3157963752746582, 1.9312387704849243], + [-2.532744884490967, -2.8875651359558105], + [-0.4378948211669922, -1.8158618211746216], + [-3.5719997882843018, 5.651101589202881], + [-4.247391700744629, 5.575490951538086], + [-5.673114776611328, 4.230668067932129], + [-4.219296932220459, -1.4356368780136108], + [5.179723262786865, 8.176132202148438], + [2.8223750591278076, 6.556674003601074], + [-0.9858311414718628, 11.012979507446289], + [7.731963634490967, -3.329751491546631], + [6.106919288635254, -3.3952958583831787], + [-1.6520419120788574, -0.25407713651657104], + [7.722649097442627, -2.7560224533081055], + [-5.819552898406982, 7.8014984130859375], + [-3.5180447101593018, -1.2011798620224], + [-1.13154935836792, -0.9076842069625854], + [7.322020530700684, -3.5802664756774902], + [1.5963656902313232, -3.9500539302825928], + [-5.376235485076904, -3.93967604637146], + [0.6921643614768982, -8.330013275146484], + [4.426348686218262, 7.296077728271484], + [5.732466220855713, -1.3351999521255493], + [0.6797423958778381, -9.392693519592285], + [7.200185775756836, -2.8937761783599854], + [-2.5449697971343994, 2.18442702293396], + [2.330132246017456, -4.595404624938965], + [0.2828378677368164, -5.815652847290039], + [-3.604163885116577, 5.733434677124023], + [-3.246492862701416, -1.351214051246643], + [6.988487243652344, -2.3131515979766846], + [0.8245105743408203, -5.545989036560059], + [-0.7283888459205627, -1.3205779790878296], + [1.9220077991485596, 4.427830219268799], + [2.400280714035034, 3.673085927963257], + [5.247323513031006, -1.109670639038086], + [7.750082492828369, -2.3254897594451904], + [-1.895915150642395, 2.1938490867614746], + [8.0225830078125, -2.6592345237731934], + [9.444700241088867, -2.8444015979766846], + [0.33141523599624634, -6.669299602508545], + [0.10965051501989365, -4.593094825744629], + [-1.1018257141113281, 10.511299133300781], + [-1.1922188997268677, 10.679265022277832], + [1.6592512130737305, -5.246034622192383], + [0.6089694499969482, 4.690274715423584], + [7.6096673011779785, -2.6729965209960938], + [7.87624979019165, -3.2342135906219482], + [-3.4072813987731934, -2.8806569576263428], + [2.0479395389556885, 5.509167671203613], + [-3.6482675075531006, -2.173741102218628], + [-2.721627712249756, -2.3889944553375244], + [7.762492656707764, -2.328091859817505], + [-1.295606255531311, 0.900770902633667], + [6.663111686706543, -4.276659965515137], + [-5.477598667144775, 7.379733085632324], + [-3.4547178745269775, -2.262800931930542], + [-4.250946998596191, 6.047602653503418], + [1.3473228216171265, -5.68251895904541], + [1.949587106704712, -0.9872504472732544], + [8.18594741821289, -2.6231744289398193], + [2.8493831157684326, -5.7878737449646], + [1.0981934070587158, -6.116405963897705], + [-3.270655393600464, -1.0749112367630005], + [-3.9203124046325684, 4.707526206970215], + [2.684624195098877, -4.440995693206787], + [-3.707369089126587, 5.294578552246094], + [0.6121241450309753, -7.678596496582031], + [0.8294128775596619, 3.059168815612793], + [0.6797270178794861, -7.9420976638793945], + [-1.760314702987671, 1.276991367340088], + [0.4502379894256592, -5.816206455230713], + [2.045548677444458, -4.895442008972168], + [0.5529025793075562, -6.837586879730225], + [1.5836117267608643, 1.527530550956726], + [0.5904714465141296, -7.472583293914795], + [-1.8989720344543457, 1.954896330833435], + [1.2268478870391846, -5.1919145584106445], + [0.6918253302574158, -8.33391284942627], + [4.688451290130615, 7.698365688323975], + [0.07519953697919846, -4.61182975769043], + [-3.6584486961364746, -1.109297513961792], + [-0.07077194005250931, 8.047139167785645], + [-2.151928663253784, 0.9966682195663452], + [-3.9837486743927, 3.3881781101226807], + [2.076099157333374, 5.9261322021484375], + [-3.048661470413208, -1.428658127784729], + [1.8696348667144775, -6.061348915100098], + [1.3325278759002686, 4.533029556274414], + [6.31104040145874, -2.020855188369751], + [-4.8917436599731445, -3.480631113052368], + [4.332167148590088, 7.491957664489746], + [2.5060555934906006, 5.748178482055664], + [0.3456771671772003, -5.702312469482422], + [0.47448796033859253, -6.832346439361572], + [-3.695650339126587, -1.7556010484695435], + [-0.7045296430587769, -1.2554224729537964], + [2.1378583908081055, 5.388066291809082], + [-4.913814067840576, -1.5522631406784058], + [-3.442389726638794, -0.7424638867378235], + [0.4239842891693115, -6.037960052490234], + [0.311450719833374, -6.25321102142334], + [1.6382616758346558, -3.9564225673675537], + [-3.82783579826355, -1.8091486692428589], + [-4.111945629119873, 6.842197418212891], + [1.7496747970581055, 0.2484332025051117], + [8.293381690979004, -2.5976788997650146], + [-3.4890336990356445, -1.1441303491592407], + [0.3727078437805176, -5.823796272277832], + [-4.399445533752441, -2.747375249862671], + [-4.315096378326416, 5.138589859008789], + [2.0377862453460693, -4.79168176651001], + [-1.5102763175964355, -0.4429384171962738], + [-0.21566462516784668, 7.2552666664123535], + [2.0422236919403076, 4.522530555725098], + [-3.2300937175750732, -3.0954606533050537], + [-1.283581256866455, -1.4500373601913452], + [2.9676504135131836, -4.728115081787109], + [1.6046370267868042, 2.2209017276763916], + [0.7650485634803772, -9.188215255737305], + [-1.6041840314865112, 13.12486457824707], + [3.0718259811401367, -4.80233907699585], + [1.3116412162780762, 0.28210076689720154], + [-3.5858004093170166, -0.36027759313583374], + [2.982389211654663, -4.659868240356445], + [-2.8860504627227783, 5.617077350616455], + [-3.808502435684204, -1.409601092338562], + [0.7186266779899597, -7.445176124572754], + [-5.234154224395752, 3.5457160472869873], + [0.7259747385978699, -9.434818267822266], + [-0.8749420642852783, 9.86477279663086], + [7.632102012634277, -2.232511281967163], + [0.37509578466415405, -5.269824028015137], + [1.9998211860656738, -6.959057331085205], + [-2.3491880893707275, 5.308786392211914], + [-3.349006414413452, 5.303731918334961], + [-3.982196807861328, -1.945873737335205], + [-1.1563501358032227, -1.5392307043075562], + [1.4429309368133545, 0.1118127703666687], + [2.2096455097198486, -3.8784053325653076], + [-3.917391061782837, -1.3564012050628662], + [0.7105775475502014, -7.811064720153809], + [6.950812816619873, -2.7632944583892822], + [0.2824132442474365, -5.519254684448242], + [-3.040891647338867, -2.1294097900390625], + [0.03787677735090256, -1.0614639520645142], + [-5.537728786468506, 7.177347183227539], + [0.031861238181591034, 0.8815802931785583], + [-2.138723373413086, 1.0930626392364502], + [0.7350274920463562, -4.804110527038574], + [1.1582616567611694, -0.3042641580104828], + [-3.7844624519348145, -1.3302115201950073], + [-0.7190057635307312, 10.628689765930176], + [0.6486339569091797, -8.852513313293457], + [0.5112061500549316, -6.191493034362793], + [-0.25364625453948975, 5.8626275062561035], + [-1.2258120775222778, 11.190290451049805], + [-3.684709310531616, -0.5783585906028748], + [-1.2242343425750732, 11.268058776855469], + [-4.706727981567383, 6.869244575500488], + [4.724729061126709, 7.880961894989014], + [-2.547628879547119, 1.8585911989212036], + [-1.0570086240768433, 10.623151779174805], + [0.6322686076164246, -7.209833145141602], + [-2.9700980186462402, -1.5594117641448975], + [1.7089788913726807, 2.550588369369507], + [-4.412259578704834, -2.9845192432403564], + [5.630744457244873, -2.2734506130218506], + [-0.05253482609987259, -1.3338627815246582], + [-1.151508092880249, -2.189911365509033], + [2.029853105545044, 5.558046340942383], + [-1.2289667129516602, 1.1285184621810913], + [-1.0970346927642822, 11.183855056762695], + [4.947875499725342, -3.0958034992218018], + [6.306571960449219, -2.6502346992492676], + [3.682037591934204, 6.808998107910156], + [-1.4019408226013184, 11.795738220214844], + [0.5216982364654541, -7.889224529266357], + [1.146438479423523, -0.31355130672454834], + [7.7850775718688965, -2.4806621074676514], + [-4.626197338104248, 6.50700569152832], + [1.772912859916687, 2.09671688079834], + [7.592462062835693, -2.5057005882263184], + [0.33974260091781616, -6.222380638122559], + [1.6427922248840332, -4.3421173095703125], + [-0.4567553699016571, 3.2452962398529053], + [8.40975570678711, -3.056380033493042], + [2.803704261779785, -4.521944046020508], + [-5.007467269897461, 3.82134747505188], + [-1.0810678005218506, 10.255945205688477], + [0.40023303031921387, -6.175504684448242], + [-1.4625542163848877, 12.242520332336426], + [-3.891723394393921, -2.4909579753875732], + [-0.8971189856529236, -0.7670932412147522], + [-3.8977296352386475, -1.1972099542617798], + [2.6629045009613037, 6.676055431365967], + [2.342785120010376, -4.887948989868164], + [0.9166339039802551, -5.209585666656494], + [-4.423549652099609, -1.5792649984359741], + [1.9377567768096924, 3.7641546726226807], + [0.521306574344635, -7.70324182510376], + [-1.4489121437072754, 0.537492573261261], + [-0.6968664526939392, 9.862789154052734], + [-4.636843204498291, -0.8149017095565796], + [-1.8419742584228516, 1.108371615409851], + [0.33804893493652344, -6.364270210266113], + [-3.2240664958953857, -1.0493427515029907], + [0.14757126569747925, -4.935641765594482], + [6.45751953125, -3.084507703781128], + [-1.1861060857772827, -0.5980051755905151], + [0.27156901359558105, -5.324528694152832], + [8.475883483886719, -2.7126262187957764], + [8.235946655273438, -2.65263295173645], + [2.5124919414520264, -5.267374038696289], + [6.272706508636475, -2.8256514072418213], + [-0.692146360874176, 9.285490036010742], + [-0.9319591522216797, -0.717872142791748], + [-1.1084105968475342, -0.7102570533752441], + [4.3560791015625, -5.3686370849609375], + [7.786329746246338, -2.2994296550750732], + [-3.735729455947876, 5.934176445007324], + [-1.9832642078399658, 1.9398797750473022], + [-0.9801122546195984, 10.564447402954102], + [-4.148597240447998, 0.03040730580687523], + [3.1854236125946045, 6.144419193267822], + [-3.4559361934661865, 4.648785591125488], + [-4.5229620933532715, 6.258455276489258], + [1.6291379928588867, -5.306180953979492], + [8.880538940429688, -2.6381514072418213], + [0.41559022665023804, -6.982016563415527], + [-2.0686192512512207, 0.8436845541000366], + [-1.2479454278945923, 11.178924560546875], + [0.2845463752746582, -4.907126426696777], + [-1.0201178789138794, 5.180774211883545], + [2.41111159324646, -6.280135154724121], + [-4.076170921325684, -0.44495725631713867], + [-3.1435916423797607, -1.469718098640442], + [-3.314704179763794, -2.123197317123413], + [-0.14104819297790527, 8.930013656616211], + [7.73008918762207, -2.735323190689087], + [-4.000275135040283, -0.696471095085144], + [-3.2388734817504883, -0.7716478705406189], + [1.4828295707702637, 1.7615619897842407], + [-4.186044216156006, 5.837874412536621], + [-0.7822437882423401, 10.235231399536133], + [-0.3759140372276306, 11.207143783569336], + [-4.616684436798096, -1.2763663530349731], + [-5.181392669677734, -0.8080580234527588], + [8.672487258911133, -3.131157159805298], + [-0.5452232956886292, -0.4051721692085266], + [-0.9707587361335754, -0.5526460409164429], + [2.154585123062134, -4.506694793701172], + [1.5007967948913574, -5.847171783447266], + [2.4134676456451416, -4.013542652130127], + [-1.2621148824691772, 10.693215370178223], + [-4.373562335968018, -2.2322583198547363], + [-0.9598768353462219, 10.083172798156738], + [-3.5895395278930664, -1.689022183418274], + [8.735390663146973, -2.6928658485412598], + [0.8146173357963562, -8.236629486083984], + [5.86413049697876, -1.4621824026107788], + [-0.1757712960243225, -1.201647162437439], + [-2.296269416809082, -1.110648274421692], + [0.32107794284820557, -6.4203619956970215], + [3.7935378551483154, 6.660918235778809], + [7.615347385406494, -2.767554759979248], + [-1.0914433002471924, 9.921069145202637], + [-0.38954460620880127, 9.265036582946777], + [-4.5272650718688965, -1.4021000862121582], + [-4.034615516662598, -1.1142406463623047], + [9.77880859375, -2.980149507522583], + [-4.485635280609131, -3.8356802463531494], + [-4.263129711151123, -0.6526153683662415], + [-4.817245006561279, -0.8101637363433838], + [1.728033423423767, 2.4678921699523926], + [-4.5459113121032715, -1.1950576305389404], + [-4.558914661407471, 4.867043495178223], + [-1.5438367128372192, 12.408184051513672], + [-4.261044979095459, -1.476433515548706], + [8.453214645385742, -3.4576416015625], + [2.4371259212493896, -4.065382957458496], + [-2.138312339782715, 2.470480442047119], + [0.5982455611228943, -4.472793102264404], + [3.0162081718444824, -5.310478687286377], + [0.8146635293960571, 3.102888345718384], + [1.296008586883545, 5.223222732543945], + [-2.8859827518463135, -1.519304871559143], + [-0.13817930221557617, -0.7139118909835815], + [-3.64449405670166, -2.6709177494049072], + [2.972416639328003, -4.60932731628418], + [0.6475018858909607, 6.41297721862793], + [-2.7426187992095947, 3.0122663974761963], + [1.0987845659255981, 0.15842553973197937], + [0.6167217493057251, -8.266494750976562], + [0.5497630834579468, -7.934301376342773], + [-1.4584221839904785, 1.7010585069656372], + [-3.610666036605835, -1.9213961362838745], + [-4.1673502922058105, -0.3988128900527954], + [-5.548091411590576, -4.696384429931641], + [-2.1844918727874756, 0.4850579500198364], + [-2.8961143493652344, 2.9614007472991943], + [1.0121190547943115, 5.021893501281738], + [1.450600504875183, 0.9763379096984863], + [3.9054532051086426, -5.663968086242676], + [0.70219886302948, -3.850536346435547], + [-2.152963399887085, 2.1711714267730713], + [-3.218549966812134, -0.6766793727874756], + [1.4369747638702393, 3.981825113296509], + [-1.0043244361877441, 10.480146408081055], + [-3.919684410095215, -1.9187058210372925], + [1.1911826133728027, -5.401310920715332], + [0.9383800625801086, 5.2320146560668945], + [-0.050456203520298004, -3.392033815383911], + [0.6210166811943054, -7.782225131988525], + [1.2898986339569092, -5.027019500732422], + [1.8205710649490356, 4.710234642028809], + [2.426576852798462, -4.027195453643799], + [-3.745697259902954, -2.535351037979126], + [-5.59763240814209, 7.233302116394043], + [0.5449369549751282, -7.386763095855713], + [0.44084906578063965, -5.023189544677734], + [-3.7780606746673584, -2.4468066692352295], + [-3.5695841312408447, 0.04851704463362694], + [6.0507636070251465, -1.7686219215393066], + [-0.08283523470163345, -4.41316032409668], + [-2.9179885387420654, 6.1573076248168945], + [-4.458749294281006, 6.799069404602051], + [1.1457419395446777, 5.5362701416015625], + [7.773753643035889, -2.9508345127105713], + [-0.2383705973625183, -2.11078143119812], + [0.46609145402908325, -6.522738456726074], + [-4.621088027954102, -3.4223814010620117], + [-0.4198368787765503, -1.7197140455245972], + [0.1265445351600647, -5.664107322692871], + [2.1838576793670654, -5.350864410400391], + [-0.8659830689430237, -2.29152512550354], + [1.591801643371582, 4.905193328857422], + [-4.908161640167236, 4.535141944885254], + [-1.8878228664398193, 1.4918508529663086], + [8.304800987243652, -2.4908053874969482], + [-3.5346028804779053, -2.1993069648742676], + [-1.8860013484954834, 1.2792493104934692], + [0.8069911599159241, 1.0165255069732666], + [1.4850484132766724, 1.8158206939697266], + [-0.8808647990226746, -0.7676829695701599], + [-0.44399362802505493, 9.492246627807617], + [8.85193157196045, -2.7062530517578125], + [8.431066513061523, -3.163130044937134], + [-2.057814359664917, 2.759624481201172], + [0.8801009058952332, -0.05975489690899849], + [-2.091355085372925, -3.5559775829315186], + [-1.4472129344940186, 12.75350570678711], + [5.536735534667969, -4.091977119445801], + [-0.41968756914138794, 9.650766372680664], + [1.7951546907424927, 5.304581165313721], + [-3.9204041957855225, -1.3077199459075928], + [0.4120450019836426, -7.806767463684082], + [2.9206018447875977, -5.151666164398193], + [-2.4506242275238037, -1.0275541543960571], + [-4.529668807983398, -2.288750171661377], + [4.478063583374023, 7.411776065826416], + [6.260733127593994, -3.033738613128662], + [7.617897987365723, -2.354097604751587], + [9.210599899291992, -2.8856003284454346], + [1.7788461446762085, 5.003066062927246], + [-4.647660732269287, -0.36089658737182617], + [0.6881829500198364, -6.066192626953125], + [2.7264506816864014, -4.644733428955078], + [2.544452667236328, -4.151799201965332], + [-5.519557476043701, -3.934330940246582], + [-3.979156494140625, -1.2734653949737549], + [-3.442312002182007, 0.03606867417693138], + [-0.6716013550758362, 10.078571319580078], + [-1.1315701007843018, 10.70207691192627], + [0.5371308326721191, -8.380149841308594], + [-1.8992704153060913, 0.7266833782196045], + [0.5522598624229431, -8.232136726379395], + [-1.9255636930465698, 0.6800599098205566], + [0.838517963886261, -7.791006565093994], + [-4.540490627288818, 6.363711357116699], + [-4.748234272003174, 6.144604682922363], + [2.8216166496276855, 6.725617408752441], + [-5.2563910484313965, -3.864018440246582], + [-1.1122965812683105, -2.600396156311035], + [0.8707508444786072, -0.17657390236854553], + [8.825907707214355, -3.1002070903778076], + [3.923283815383911, 6.581332683563232], + [1.5368359088897705, 5.062767505645752], + [-1.8474215269088745, 2.011011838912964], + [6.528496265411377, -2.844741106033325], + [-1.5911256074905396, 1.4241724014282227], + [-1.6314830780029297, 1.443629264831543], + [0.5063474774360657, -6.297637939453125], + [2.166412115097046, -4.199060440063477], + [-4.217920780181885, 4.371467590332031], + [0.5310653448104858, -0.7698578238487244], + [-1.0931077003479004, 1.8654786348342896], + [-1.904068946838379, 2.0537054538726807], + [0.6516638994216919, -6.400683403015137], + [-4.788069248199463, 7.516819000244141], + [0.6260129809379578, -7.666103363037109], + [-0.3780912160873413, 9.193456649780273], + [2.0140459537506104, 6.500628471374512], + [0.37513047456741333, -7.423964977264404], + [0.6236480474472046, -5.4843878746032715], + [-6.547127723693848, -1.0713927745819092], + [0.29900944232940674, -6.522372722625732], + [1.945922613143921, 0.7107179760932922], + [-4.324306011199951, 6.211407661437988], + [8.038254737854004, -2.4848930835723877], + [-1.3976523876190186, 1.2724212408065796], + [-3.3414695262908936, -1.3002148866653442], + [-4.964836597442627, -0.8877087235450745], + [0.6849024891853333, -0.41350871324539185], + [2.677903890609741, -4.451482772827148], + [5.560439586639404, -4.121167182922363], + [-0.23197108507156372, -3.924520492553711], + [-3.8491876125335693, -1.0113117694854736], + [2.9183342456817627, -4.974270820617676], + [0.6513621211051941, -7.73280143737793], + [3.264467716217041, -3.2873685359954834], + [0.8145127296447754, -4.976147174835205], + [0.7278235554695129, -9.368452072143555], + [0.6743811368942261, -7.530361175537109], + [0.6363587975502014, -0.6964435577392578], + [0.03623940795660019, -5.289218902587891], + [6.342789173126221, -3.853106737136841], + [0.33364689350128174, -6.487074851989746], + [-1.6518568992614746, 0.9700686931610107], + [-2.8238677978515625, 2.9053125381469727], + [0.38607075810432434, -4.902388572692871], + [0.19099360704421997, -6.066493034362793], + [1.6726431846618652, 2.663526773452759], + [0.6483873724937439, -5.683814525604248], + [-5.476171016693115, 6.953948974609375], + [0.7010703682899475, -9.086650848388672], + [-2.519436836242676, -1.5712940692901611], + [-1.8121082782745361, 1.4975465536117554], + [2.415433168411255, -4.609685897827148], + [-4.676126956939697, 6.402793884277344], + [-1.7635912895202637, 0.7233015298843384], + [6.758822917938232, -1.7623627185821533], + [1.881511926651001, 5.870736598968506], + [-0.009482093155384064, 8.686552047729492], + [-0.7622559070587158, 10.059186935424805], + [2.227282762527466, 4.886458873748779], + [7.967132091522217, -2.7195427417755127], + [-4.602934837341309, -1.352239966392517], + [3.0751335620880127, -5.2620649337768555], + [8.10520076751709, -2.975109338760376], + [-3.3730008602142334, -2.4573471546173096], + [1.918889045715332, -4.730987548828125], + [-3.3501079082489014, -0.7476975321769714], + [-0.6982232928276062, 10.411514282226562], + [-0.7748429775238037, -0.9493265151977539], + [-3.4277541637420654, -1.340399980545044], + [-0.960574746131897, 0.7755469083786011], + [-4.022574424743652, -2.1415963172912598], + [-3.1140823364257812, -1.2553163766860962], + [-0.5518304705619812, -0.8612087965011597], + [-3.012676954269409, -0.7134619951248169], + [-4.072439670562744, -3.212179660797119], + [-2.022754192352295, 2.7572591304779053], + [6.863207817077637, -1.794013261795044], + [2.299348831176758, 6.188129425048828], + [-2.565868616104126, -1.272121787071228], + [0.7895610928535461, -6.83711051940918], + [2.6992409229278564, -4.407755374908447], + [2.2176806926727295, 5.501861095428467], + [-3.171767473220825, -1.945857286453247], + [-0.7854570150375366, 4.551796913146973], + [-1.4430218935012817, 12.058984756469727], + [0.5548914670944214, -7.806557655334473], + [-4.06143045425415, 3.6416046619415283], + [2.696763753890991, -3.9360897541046143], + [-5.5578179359436035, 7.240854740142822], + [-1.8331880569458008, 0.9262934327125549], + [3.7042105197906494, -5.122555255889893], + [-3.952854633331299, -0.8540976047515869], + [2.2873449325561523, 0.43637511134147644], + [0.718207061290741, -8.216163635253906], + [5.756624698638916, -1.2733999490737915], + [-1.5409175157546997, 12.67929458618164], + [-2.280870199203491, -2.0207319259643555], + [2.4434421062469482, -5.680210590362549], + [0.6023969650268555, 5.265433311462402], + [2.4160282611846924, -4.4298882484436035], + [-1.133774995803833, 10.733789443969727], + [-1.326544165611267, 1.7310951948165894], + [-1.2717163562774658, 11.36684799194336], + [0.7168386578559875, -9.551643371582031], + [1.8608182668685913, -4.851380348205566], + [-1.5294427871704102, 1.9320648908615112], + [4.348045825958252, 7.495556354522705], + [-0.2456463873386383, -1.057681679725647], + [-4.7045512199401855, 3.7699363231658936], + [2.1211843490600586, -5.528977394104004], + [0.3364280164241791, -4.445430755615234], + [-1.4242631196975708, 12.270194053649902], + [1.2295448780059814, -0.21093815565109253], + [-3.8563950061798096, -1.1316899061203003], + [2.427515983581543, -3.2322351932525635], + [-0.8546720147132874, 9.895818710327148], + [-1.2837650775909424, 11.24128532409668], + [2.3620893955230713, -4.666521072387695], + [2.240849494934082, -3.936782121658325], + [2.200010299682617, -4.792357444763184], + [8.926557540893555, -2.8988680839538574], + [1.9817099571228027, -4.906102180480957], + [0.681994616985321, -8.190747261047363], + [-2.747455358505249, 4.983093738555908], + [-3.4302024841308594, 5.965630054473877], + [-3.201327323913574, -0.7595223784446716], + [4.19821834564209, -1.0560245513916016], + [1.1364784240722656, 4.7119879722595215], + [2.207317590713501, 3.390734910964966], + [0.2730490565299988, -5.632566452026367], + [-0.9207035899162292, 11.21934986114502], + [-2.0907297134399414, -0.7549706697463989], + [-4.2493577003479, 6.109185218811035], + [-1.7848070859909058, 1.039966106414795], + [2.538943290710449, -4.918160438537598], + [0.5130388140678406, -7.279398441314697], + [-0.8383984565734863, 10.718964576721191], + [-4.621277332305908, 1.663672924041748], + [0.4284137487411499, -5.970102787017822], + [-3.7329823970794678, 5.625520706176758], + [2.940523386001587, 6.22025203704834], + [1.12428617477417, 1.0454243421554565], + [-0.1373986005783081, -1.3266037702560425], + [1.8008859157562256, 2.2765872478485107], + [4.832618713378906, 7.836932182312012], + [-2.7148854732513428, -1.7173218727111816], + [-2.2897777557373047, 6.067834854125977], + [0.5789799094200134, -8.112677574157715], + [2.1333045959472656, -5.3285956382751465], + [-0.21647506952285767, 8.964582443237305], + [-4.163127422332764, -1.6019985675811768], + [1.0000576972961426, -3.907627582550049], + [-4.312027454376221, 0.9370071887969971], + [2.889600992202759, -4.58296012878418], + [6.5320916175842285, -2.235910177230835], + [-0.9807464480400085, 10.791011810302734], + [-2.481590986251831, 0.800597071647644], + [-0.8090220093727112, 10.613521575927734], + [7.494380950927734, -4.2510986328125], + [4.183920860290527, -3.4834697246551514], + [1.723413109779358, 0.017733480781316757], + [0.633489727973938, -8.110767364501953], + [1.205683946609497, -5.526420593261719], + [-1.8076329231262207, 1.358476161956787], + [-5.651845932006836, 3.8746259212493896], + [0.41758430004119873, -6.374831199645996], + [0.42848849296569824, -6.207575798034668], + [-2.7312049865722656, 3.020298957824707], + [4.109038829803467, 6.67104434967041], + [2.6903045177459717, -5.424752235412598], + [8.432591438293457, -2.7257657051086426], + [1.1084895133972168, -1.455931544303894], + [4.397801399230957, 7.374563694000244], + [0.6929823160171509, -5.117269515991211], + [2.8213438987731934, -4.267509937286377], + [-0.25484007596969604, 7.372581958770752], + [0.40175384283065796, -4.999971389770508], + [-1.3051742315292358, 11.597160339355469], + [-0.43660473823547363, 8.447532653808594], + [0.5175646543502808, -7.434148788452148], + [-1.0508478879928589, 2.049591541290283], + [-3.2289750576019287, -1.0693002939224243], + [0.14602041244506836, -4.397655963897705], + [-1.7754313945770264, 5.916821479797363], + [-3.1789305210113525, -0.6909221410751343], + [-4.041508674621582, 3.735507011413574], + [1.3094927072525024, -0.1443329006433487], + [2.2415778636932373, 5.804204940795898], + [2.4490277767181396, 4.219142436981201], + [-1.623694658279419, 1.0315455198287964], + [-5.6699442863464355, 4.384891510009766], + [-4.630802631378174, -3.1604208946228027], + [0.30171358585357666, -3.6871063709259033], + [0.75893634557724, -9.654829025268555], + [8.31067180633545, -2.427020788192749], + [-0.6119314432144165, -0.7686070799827576], + [-1.6657794713974, 1.4528394937515259], + [2.058237314224243, 0.4859834909439087], + [-4.250969409942627, -3.9382264614105225], + [-1.2048547267913818, -2.027369260787964], + [-0.36091434955596924, -0.9931833148002625], + [-0.4212857782840729, -2.3042452335357666], + [-2.5228426456451416, -0.13814198970794678], + [3.068429946899414, 5.810524940490723], + [1.1620551347732544, 1.8971701860427856], + [3.705280303955078, 6.642051696777344], + [-4.2063727378845215, 6.650790214538574], + [5.703919887542725, -1.2385179996490479], + [-2.525170087814331, 5.965679168701172], + [2.2657880783081055, -5.4328484535217285], + [-3.9172258377075195, -1.1439005136489868], + [2.2219440937042236, -4.607504844665527], + [-3.75671124458313, -2.933725595474243], + [-2.4663078784942627, -1.8912715911865234], + [1.2080206871032715, 0.9023038744926453], + [-4.251678466796875, -0.8470454812049866], + [-4.221086502075195, 5.138293266296387], + [-1.8270364999771118, 0.2602890431880951], + [-1.2458699941635132, 8.064697265625], + [-2.0424997806549072, 2.224942207336426], + [-3.3454430103302, -2.030832052230835], + [-0.49730896949768066, 9.08643913269043], + [-3.9247796535491943, -2.755906105041504], + [-2.1576740741729736, -1.781930923461914], + [-2.775174617767334, 2.811492443084717], + [2.547438621520996, -4.324924468994141], + [2.958789825439453, -5.929267883300781], + [6.588852405548096, -3.746058464050293], + [3.3489763736724854, -1.351380467414856], + [0.5171195268630981, -6.937108516693115], + [0.7798885703086853, -6.833854675292969], + [0.8660217523574829, -0.4715573489665985], + [3.3144662380218506, 7.039613723754883], + [0.7510257363319397, -8.010550498962402], + [2.1176869869232178, -4.22721529006958], + [-1.3143210411071777, 11.823830604553223], + [-3.406567096710205, 5.253228187561035], + [-0.8236919045448303, 10.742353439331055], + [-4.204537391662598, -0.4658210873603821], + [-4.887592792510986, -3.6876280307769775], + [-1.1756272315979004, 10.354647636413574], + [2.1324613094329834, -4.324334144592285], + [8.804304122924805, -2.958636522293091], + [3.823089122772217, 7.186674118041992], + [1.3989441394805908, 1.4232741594314575], + [2.5685479640960693, 6.156322956085205], + [7.823126316070557, -2.5491936206817627], + [-2.6723175048828125, -0.7351075410842896], + [1.9130504131317139, 5.206875801086426], + [-2.7844157218933105, -0.9705488681793213], + [6.830803394317627, -3.970031499862671], + [1.772994041442871, -5.542707920074463], + [-4.268074989318848, 6.072722434997559], + [0.8270968198776245, -0.09666718542575836], + [5.6608967781066895, -1.4280798435211182], + [8.54262924194336, -2.9957635402679443], + [-4.631194591522217, -4.1371684074401855], + [-2.028707265853882, 0.9451098442077637], + [-2.566404342651367, 0.4252426028251648], + [1.637486219406128, -4.443636894226074], + [-4.761753559112549, -0.5871299505233765], + [-2.9245736598968506, -0.8619353771209717], + [-1.0771597623825073, 10.364219665527344], + [2.6671226024627686, 5.844882965087891], + [7.184898376464844, -1.8730603456497192], + [0.4860241413116455, -5.954251289367676], + [-0.6054912209510803, 9.862966537475586], + [-4.961714267730713, 6.848929405212402], + [0.7262697219848633, -8.461553573608398], + [-3.954202651977539, -2.5188252925872803], + [-0.9037757515907288, 10.086742401123047], + [4.542252063751221, 7.391118049621582], + [-3.538386106491089, -1.0958356857299805], + [1.075958013534546, -6.213466644287109], + [1.3878613710403442, 0.9218791723251343], + [-2.4704887866973877, 0.13126206398010254], + [-3.4431750774383545, -2.208867073059082], + [-5.314314365386963, -5.290396690368652], + [0.0979333147406578, -4.784555912017822], + [2.167095899581909, -4.98802375793457], + [-0.09767729789018631, -2.1619999408721924], + [-1.5764864683151245, -0.7051243782043457], + [-1.2378461360931396, 10.796527862548828], + [1.4150493144989014, 5.458076477050781], + [1.4394547939300537, 2.2016284465789795], + [-1.5886749029159546, 1.7643312215805054], + [0.5743426084518433, -7.7302045822143555], + [2.618583917617798, -4.355796813964844], + [9.385790824890137, -2.814937114715576], + [-0.746246874332428, -2.6932528018951416], + [0.02795892208814621, -3.872913122177124], + [0.48852306604385376, -4.858553886413574], + [-3.611041307449341, 3.4477057456970215], + [-3.22294545173645, -2.378246545791626], + [-3.901158094406128, -2.211503267288208], + [2.9831602573394775, -4.9311747550964355], + [2.7353594303131104, -4.969174385070801], + [-3.2845330238342285, -2.054673671722412], + [1.2869343757629395, -5.129248142242432], + [-3.957390785217285, -3.1007981300354004], + [-2.071044683456421, 0.6993338465690613], + [0.7638623714447021, -3.094217538833618], + [-4.6201300621032715, 6.893496513366699], + [0.7332929968833923, -8.497747421264648], + [0.7400462031364441, -7.676158905029297], + [-1.836489200592041, 0.6470906138420105], + [0.68852698802948, -8.007461547851562], + [-5.046272277832031, 6.311629295349121], + [0.6620689034461975, -7.6359429359436035], + [-3.7842729091644287, 6.791346549987793], + [-3.6117429733276367, -1.3015222549438477], + [1.4071186780929565, 1.8329181671142578], + [0.24951240420341492, -4.6463422775268555], + [-4.027684688568115, 5.7550458908081055], + [0.5405519604682922, -6.804531574249268], + [-1.8587567806243896, 2.024664878845215], + [0.4887261390686035, -5.291792869567871], + [-1.9451932907104492, 0.9593781232833862], + [0.3236825466156006, -6.29964542388916], + [-5.686762809753418, 4.955941677093506], + [1.9983999729156494, 6.019351482391357], + [1.9103789329528809, 1.2232002019882202], + [5.887260913848877, -3.0385172367095947], + [-1.1681400537490845, 10.698856353759766], + [-1.0256561040878296, 9.87685489654541], + [-3.922341823577881, -1.4184433221817017], + [0.510648787021637, -6.120765686035156], + [8.147664070129395, -2.8686940670013428], + [-0.7272060513496399, 10.435593605041504], + [0.6338228583335876, -8.05610179901123], + [2.112461566925049, 3.395984411239624], + [-3.279658079147339, -1.4189119338989258], + [-1.2336231470108032, -0.3517233729362488], + [0.7043571472167969, -8.947896003723145], + [6.489853382110596, -1.7843899726867676], + [0.7241367697715759, -6.502689361572266], + [3.4404146671295166, 6.8976640701293945], + [1.9674670696258545, 0.8172561526298523], + [-0.004830069839954376, -3.990992307662964], + [-3.4949073791503906, 6.313839435577393], + [-0.9080345630645752, 10.759366989135742], + [-1.7769027948379517, -1.2530866861343384], + [-1.936568021774292, 1.9080719947814941], + [-2.935030221939087, 0.5296796560287476], + [-1.360207438468933, 12.104992866516113], + [0.6178692579269409, -7.89540958404541], + [-5.2209343910217285, 5.444475173950195], + [1.7601553201675415, 4.523913383483887], + [0.7205053567886353, -7.920953750610352], + [-3.57858943939209, 4.93298864364624], + [-4.93723201751709, 5.685937881469727], + [1.352484941482544, 1.4622966051101685], + [-1.1303926706314087, 1.503684163093567], + [1.9785888195037842, 6.122016906738281], + [-2.0814521312713623, 4.7952752113342285], + [1.1615386009216309, -2.0831384658813477], + [-2.034498929977417, -1.1145190000534058], + [7.445064067840576, -2.0360682010650635], + [0.24479055404663086, -2.880404233932495], + [-4.219682216644287, -3.1952083110809326], + [-0.06513188034296036, -3.849588632583618], + [0.49666649103164673, -7.69418478012085], + [-3.121321439743042, -2.024421453475952], + [-1.229044795036316, 0.37498539686203003], + [-0.008990146219730377, -3.313472270965576], + [-4.352511882781982, -1.4886280298233032], + [6.549368381500244, -2.2732632160186768], + [-5.467599391937256, 6.510226249694824], + [-3.3411917686462402, -2.5732028484344482], + [1.0707169771194458, -5.497999668121338], + [-0.6394000053405762, 9.39046859741211], + [5.952295303344727, -3.359722375869751], + [-3.382080316543579, -0.855847954750061], + [-1.3675206899642944, 3.922128677368164], + [2.211430311203003, -4.47744083404541], + [-1.4029461145401, -3.8369390964508057], + [2.9265224933624268, -4.499030113220215], + [3.636671781539917, 6.898930549621582], + [-0.4764731526374817, 7.894919395446777], + [-4.798465728759766, -0.8232258558273315], + [-3.174900770187378, 6.977005481719971], + [0.6205366253852844, -7.839576244354248], + [-2.0179028511047363, -0.7618923783302307], + [-3.827975034713745, -0.7889553308486938], + [1.9402272701263428, 0.7578443884849548], + [0.12180405110120773, 2.4784085750579834], + [-1.5107524394989014, 12.452765464782715], + [2.561472177505493, -4.296566963195801], + [0.3101097345352173, 3.214754343032837], + [-0.6704952120780945, 9.638374328613281], + [-3.3487908840179443, -1.5026029348373413], + [-3.5500242710113525, -0.9363111257553101], + [-0.23847448825836182, -1.0324827432632446], + [1.954962968826294, 0.20049986243247986], + [-5.583078384399414, -2.1024582386016846], + [-2.7041919231414795, -0.7292284965515137], + [-4.208339214324951, -2.2548294067382812], + [0.5046057105064392, -7.629612445831299], + [1.1967219114303589, -0.32763680815696716], + [-1.1312423944473267, 11.033624649047852], + [-0.1924733817577362, -2.9465878009796143], + [1.6840498447418213, -5.314906120300293], + [1.0012600421905518, -6.723208427429199], + [4.163592338562012, -3.856550455093384], + [0.12540671229362488, -0.48224031925201416], + [2.069265604019165, 0.5375049114227295], + [-0.9428038001060486, -0.4506210684776306], + [-5.4690961837768555, 2.717761993408203], + [-1.371342658996582, 0.10143148899078369], + [8.182042121887207, -2.980926990509033], + [2.446004629135132, -4.079367637634277], + [-2.6029655933380127, -0.6396423578262329], + [1.957916021347046, 5.395840167999268], + [-0.7927355170249939, 10.063848495483398], + [2.220144510269165, -4.779772758483887], + [1.4725208282470703, -4.942319393157959], + [4.088742256164551, 7.478639602661133], + [-2.9964141845703125, -0.4908878207206726], + [-4.596902847290039, -4.083512306213379], + [3.191633939743042, -5.17899227142334], + [9.724217414855957, -2.953214168548584], + [-5.5226006507873535, 4.286019325256348], + [3.2495381832122803, -4.843811511993408], + [0.4974551796913147, -6.904276371002197], + [0.34512096643447876, -6.637660026550293], + [0.9707769751548767, 0.11464665830135345], + [6.903439044952393, -4.379245758056641], + [-1.3072816133499146, 11.381977081298828], + [2.890197992324829, -4.492684364318848], + [-4.501377105712891, -1.3914848566055298], + [-2.0501818656921387, 1.3550100326538086], + [-0.7528783082962036, -2.5955073833465576], + [2.6302239894866943, -4.694954872131348], + [0.22775161266326904, -5.105163097381592], + [6.846471309661865, -2.1590991020202637], + [-3.3667502403259277, 4.831927299499512], + [2.3899030685424805, -5.598588466644287], + [7.111684322357178, -3.297393560409546], + [1.5270581245422363, -4.5286078453063965], + [2.056657552719116, -4.505102634429932], + [6.9694342613220215, -4.295929908752441], + [-3.5156164169311523, -1.7364063262939453], + [-4.299017906188965, 6.478672027587891], + [2.9382503032684326, -4.668221473693848], + [5.456286907196045, -2.7491304874420166], + [-5.039684772491455, -3.807696580886841], + [-4.262330055236816, -2.9975602626800537], + [-2.451663017272949, 0.1358301043510437], + [0.5505073666572571, -0.22946394979953766], + [-2.3006296157836914, -0.9567201137542725], + [3.5580506324768066, -4.880205154418945], + [2.5664899349212646, -5.002008438110352], + [-1.3178355693817139, 11.509073257446289], + [1.0146375894546509, 1.0104163885116577], + [-3.895277976989746, -0.5696788430213928], + [-0.6765714287757874, 10.272871017456055], + [-4.1380228996276855, -2.378678321838379], + [1.1509531736373901, -7.000502586364746], + [1.41012442111969, 0.13965387642383575], + [-2.8906285762786865, -0.38839030265808105], + [0.16097402572631836, -6.753050804138184], + [1.0683376789093018, -6.037224292755127], + [0.9363364577293396, 1.6350560188293457], + [1.488008975982666, 1.735735297203064], + [-0.07873869687318802, 8.68514633178711], + [-2.0107498168945312, 2.2964887619018555], + [3.475590944290161, 6.941621780395508], + [-0.4063715636730194, -4.088953495025635], + [-3.023196220397949, 1.8095070123672485], + [6.950192928314209, -2.087493658065796], + [2.3465940952301025, 6.142143726348877], + [-1.2001274824142456, -1.5499238967895508], + [-4.409294128417969, -3.0735247135162354], + [-1.2390092611312866, 11.331396102905273], + [-1.0670784711837769, 11.018379211425781], + [-1.921330451965332, 0.55772864818573], + [-1.9651000499725342, 1.88479483127594], + [5.651346206665039, -4.00844669342041], + [-3.386049747467041, -1.504252552986145], + [2.9792158603668213, -4.697049617767334], + [-1.0219823122024536, 1.3969225883483887], + [2.351566791534424, 5.356858253479004], + [0.5842448472976685, -7.823856353759766], + [2.430741548538208, -4.334570407867432], + [0.565959095954895, -5.5058698654174805], + [1.1847617626190186, 4.138803482055664], + [4.8047308921813965, 7.9922637939453125], + [-5.280197620391846, 5.339217662811279], + [3.6311585903167725, 6.443536758422852], + [8.529572486877441, -2.65248703956604], + [-1.1218644380569458, 10.516395568847656], + [-1.2598930597305298, 11.151769638061523], + [-1.7842437028884888, 2.468278169631958], + [0.6545118689537048, -7.587750434875488], + [0.22239089012145996, 4.819901943206787], + [2.987776517868042, -4.693077564239502], + [1.9112170934677124, 3.955880880355835], + [6.931359767913818, -5.2047319412231445], + [1.6021780967712402, 6.686798572540283], + [-0.24681872129440308, 9.653656959533691], + [0.640781819820404, -8.348556518554688], + [-0.31491631269454956, 8.153643608093262], + [-1.0369462966918945, 10.442464828491211], + [-2.324291944503784, 2.2778818607330322], + [1.017173409461975, 0.7148549556732178], + [-1.2713470458984375, 11.493414878845215], + [0.07996281236410141, -4.851587295532227], + [1.4201641082763672, 0.42180687189102173], + [-3.628361940383911, -2.239617109298706], + [0.21770626306533813, -6.261542320251465], + [-5.1630539894104, -1.6152280569076538], + [1.9294674396514893, 5.63072395324707], + [-4.325612545013428, -1.3465664386749268], + [-4.708980560302734, -1.2308884859085083], + [1.882820725440979, -4.295648574829102], + [-1.2273921966552734, 11.158919334411621], + [2.773599863052368, -4.296137809753418], + [-0.4919898509979248, 9.16837215423584], + [-2.9446709156036377, 1.4786158800125122], + [-1.2863991260528564, 10.774629592895508], + [-3.05928635597229, -1.7573857307434082], + [-4.016690254211426, 5.049169063568115], + [-3.621448516845703, -2.068903923034668], + [-0.7188778519630432, 10.605419158935547], + [-0.037701137363910675, -2.884856939315796], + [6.568750381469727, -1.5891286134719849], + [-0.47550565004348755, 10.040332794189453], + [-3.5608108043670654, -1.246857762336731], + [-0.6824766397476196, 10.313840866088867], + [-2.0614495277404785, 2.2856287956237793], + [-0.5107119679450989, -0.9261904954910278], + [8.665610313415527, -2.5587689876556396], + [3.0232226848602295, -4.738207817077637], + [0.9554427266120911, -6.98676872253418], + [-1.522749900817871, 2.9091110229492188], + [3.756779432296753, 6.993965148925781], + [0.5943727493286133, -5.578993797302246], + [7.337592601776123, -3.939176321029663], + [-3.174769163131714, -2.464648485183716], + [0.41684985160827637, -6.858905792236328], + [-3.9646174907684326, 6.973818778991699], + [-3.5812809467315674, 4.658761024475098], + [-0.26453909277915955, -0.9723920822143555], + [-1.2926688194274902, 11.880002975463867], + [-1.11158287525177, 9.390535354614258], + [0.3296038508415222, -7.1274824142456055], + [0.4160979986190796, -6.253053665161133], + [-3.3835530281066895, -1.7275813817977905], + [1.667696237564087, 5.69058084487915], + [0.6711568236351013, -8.597692489624023], + [-2.178999185562134, -1.2933580875396729], + [1.741100549697876, 6.026640892028809], + [4.705287933349609, 7.913318157196045], + [5.580755710601807, -1.3662936687469482], + [-3.886697292327881, -1.1875547170639038], + [-2.072404384613037, 1.437623143196106], + [6.318976402282715, -3.3746702671051025], + [1.7582087516784668, 3.574869155883789], + [-4.325047016143799, -1.808566927909851], + [2.1068930625915527, 5.630607604980469], + [-0.958490252494812, -1.97223699092865], + [-0.020103879272937775, 7.629331111907959], + [0.8412479758262634, -6.698855400085449], + [-3.5070607662200928, -2.1667120456695557], + [-0.46715909242630005, 10.131759643554688], + [-0.18284857273101807, -0.7882475852966309], + [-0.014080382883548737, -4.7001543045043945], + [9.44063663482666, -2.836873769760132], + [-2.1161916255950928, 0.8845620155334473], + [0.7753832936286926, -7.289608955383301], + [0.5150883793830872, -6.022248268127441], + [-0.9981998801231384, 10.060310363769531], + [-1.7823725938796997, -1.9802088737487793], + [-3.5488412380218506, 5.449667453765869], + [-3.84078311920166, -2.0068154335021973], + [-2.8556854724884033, -2.960134267807007], + [8.182930946350098, -3.9231059551239014], + [2.4178659915924072, 6.023913860321045], + [-6.213569164276123, -0.655583381652832], + [2.4968101978302, 5.108774662017822], + [0.00835513323545456, -2.7859365940093994], + [-4.275966167449951, 0.4357362389564514], + [4.512979030609131, -0.3604804277420044], + [-3.711158514022827, -1.2580338716506958], + [4.011302947998047, -0.7042114734649658], + [-3.6142077445983887, -1.5164179801940918], + [-1.6136465072631836, 0.4523407220840454], + [-2.9600512981414795, 6.1721954345703125], + [5.8418755531311035, -1.6674351692199707], + [-3.109307050704956, -1.8039600849151611], + [2.3138134479522705, 0.6441764831542969], + [-0.8037181496620178, 10.666519165039062], + [3.8397376537323, 7.15080451965332], + [4.8755011558532715, 7.960439682006836], + [-4.341776371002197, 6.126224040985107], + [-2.768528461456299, 3.093661069869995], + [1.4241204261779785, 5.702511787414551], + [5.894925594329834, -4.179468154907227], + [-3.22511625289917, -0.733245313167572], + [2.565979242324829, -4.386422157287598], + [-0.7810646891593933, 9.836639404296875], + [-3.951612710952759, 5.255286693572998], + [-3.376675605773926, -1.0116147994995117], + [-3.1442651748657227, 6.121654510498047], + [-4.974201202392578, 5.959126949310303], + [-3.942006826400757, -3.150179624557495], + [2.383397102355957, 6.459321975708008], + [1.137502670288086, 0.44932273030281067], + [0.7707594037055969, -9.221670150756836], + [-3.2828328609466553, -1.6790329217910767], + [1.8403435945510864, 0.3150210380554199], + [-3.4171266555786133, -0.8696047067642212], + [-3.9361112117767334, -3.8510053157806396], + [2.1664929389953613, 0.4130881726741791], + [-3.6816599369049072, -2.756896734237671], + [0.2698265314102173, -6.810744285583496], + [-3.6897552013397217, -2.695831060409546], + [7.657808780670166, -2.3952581882476807], + [0.5789106488227844, -6.397441864013672], + [0.5977599620819092, 5.033951759338379], + [-1.4928398132324219, 1.8640906810760498], + [6.41868782043457, -3.5877201557159424], + [2.7788808345794678, -4.575121879577637], + [-4.50619649887085, -1.0086826086044312], + [1.5901587009429932, -0.0177883543074131], + [-1.1100404262542725, 10.45625114440918], + [-3.669928789138794, 0.22179073095321655], + [-4.23089599609375, -1.7454806566238403], + [-3.7620363235473633, 7.033353805541992], + [-4.041549205780029, -2.6347315311431885], + [-4.593043327331543, -3.3207600116729736], + [2.8487837314605713, 6.640837669372559], + [2.7463810443878174, -4.496312141418457], + [2.140314817428589, 4.368671894073486], + [0.603037416934967, -6.742840766906738], + [1.2609747648239136, -5.572164058685303], + [6.266394138336182, -1.3219586610794067], + [2.1674578189849854, -4.494728088378906], + [1.3772897720336914, -6.752287864685059], + [0.31724846363067627, -6.413508892059326], + [-1.4028377532958984, 1.718270182609558], + [3.073481798171997, 5.648700714111328], + [1.0834033489227295, 5.599323272705078], + [1.4829565286636353, -5.074864864349365], + [-3.112622022628784, -1.761263370513916], + [9.416729927062988, -2.856632947921753], + [2.040728807449341, -4.465343952178955], + [-2.0860445499420166, -1.578692078590393], + [7.474565505981445, -2.2533979415893555], + [-3.3822734355926514, -2.1257002353668213], + [-2.8423845767974854, -0.9661276340484619], + [0.5809069871902466, -6.621896743774414], + [-5.901013374328613, 6.117359161376953], + [3.38175106048584, -4.660799026489258], + [0.23867711424827576, -4.26531982421875], + [0.5498440861701965, -4.940195560455322], + [9.559504508972168, -2.8874967098236084], + [-1.4912315607070923, 12.244467735290527], + [-2.613574743270874, -0.9821227788925171], + [6.260469436645508, -1.8384274244308472], + [2.0361135005950928, -3.8520445823669434], + [0.49201828241348267, -6.054772853851318], + [-1.9005879163742065, 1.6027946472167969], + [-5.91199254989624, 5.178962707519531], + [-5.293543338775635, 5.512361526489258], + [1.9307358264923096, -4.74022102355957], + [2.016038656234741, 0.7590359449386597], + [-0.9460423588752747, 10.391464233398438], + [-0.5987138152122498, 10.176315307617188], + [-0.6732936501502991, 9.707883834838867], + [1.0594229698181152, -5.823643684387207], + [-2.4289658069610596, -1.7510230541229248], + [1.5343866348266602, -6.260516166687012], + [-3.0178143978118896, 5.029167175292969], + [-1.04496431350708, 1.3944026231765747], + [-5.165127754211426, -1.612833857536316], + [-1.2165565490722656, 10.921707153320312], + [-3.866807699203491, 5.7866291999816895], + [-3.969467878341675, -1.5904258489608765], + [-5.3999342918396, 1.9483267068862915], + [-0.7970300316810608, 10.109293937683105], + [0.6998658776283264, -7.936680793762207], + [0.43281179666519165, -5.1019287109375], + [2.1143064498901367, -4.780854225158691], + [2.538236618041992, -4.000722408294678], + [2.0140721797943115, -4.773611068725586], + [-1.2450703382492065, 11.391775131225586], + [-4.370912551879883, -0.39634716510772705], + [-2.3517262935638428, 0.5718286633491516], + [0.24603232741355896, -5.197231292724609], + [1.5985026359558105, -4.753903865814209], + [2.1804754734039307, 5.061365604400635], + [7.435449123382568, -2.2071125507354736], + [-1.2430464029312134, 11.482937812805176], + [0.7137434482574463, 4.774805068969727], + [0.6415748000144958, -8.543914794921875], + [-2.5660853385925293, -2.3109753131866455], + [-1.8210525512695312, 1.5133839845657349], + [-1.063576102256775, 10.849358558654785], + [-4.3707499504089355, -1.2064666748046875], + [-3.587998390197754, -1.4210684299468994], + [-4.2381463050842285, 0.10807216167449951], + [-0.649518609046936, 10.093608856201172], + [0.6934142112731934, -8.422967910766602], + [0.5970198512077332, -0.37930354475975037], + [-1.7138158082962036, 0.002577032893896103], + [-0.3991695046424866, 9.362743377685547], + [-0.12976327538490295, -1.410514235496521], + [0.027067475020885468, -1.0809341669082642], + [6.400355815887451, -1.9665906429290771], + [4.0034499168396, 7.2291460037231445], + [-3.6024234294891357, -0.6927912831306458], + [-1.8011257648468018, -3.374077081680298], + [7.5039286613464355, -2.2574973106384277], + [-5.290797710418701, 6.891068935394287], + [2.000415325164795, -3.682400941848755], + [0.3640980124473572, -5.969539642333984], + [-3.033627510070801, 6.11771297454834], + [3.0715172290802, -4.862427711486816], + [0.8339201807975769, -7.982934474945068], + [-0.5682945847511292, 9.645796775817871], + [-0.758529007434845, -0.12532322108745575], + [-2.3075482845306396, -1.4242863655090332], + [0.5858970284461975, -7.123753547668457], + [-4.668623924255371, 5.954063415527344], + [0.4016880989074707, -6.345798969268799], + [-0.5957790613174438, -1.0558549165725708], + [2.6798362731933594, -4.758951663970947], + [4.940444469451904, 7.794271469116211], + [-3.23895525932312, 5.046113014221191], + [-3.560521125793457, -1.2128986120224], + [-0.3403494954109192, 8.632612228393555], + [2.9583823680877686, -5.049892425537109], + [1.1985057592391968, 3.138883113861084], + [0.8107199668884277, -0.6630194187164307], + [2.6396405696868896, -4.507633209228516], + [-5.534303665161133, -1.2337324619293213], + [-1.461816668510437, 12.059743881225586], + [-1.4297903776168823, 12.06515121459961], + [0.08820386976003647, -4.708316326141357], + [1.3141392469406128, -5.924439430236816], + [-0.8307996988296509, -0.9001030921936035], + [2.7648353576660156, 5.4628729820251465], + [9.694891929626465, -2.8938591480255127], + [-1.092956304550171, 4.186654090881348], + [2.776174783706665, -4.928733825683594], + [1.4137388467788696, 1.4812361001968384], + [-0.18975219130516052, 3.934727430343628], + [0.6702572703361511, 8.567343711853027], + [-4.482171058654785, -4.231010437011719], + [-1.321299433708191, -0.6142591238021851], + [4.081119537353516, 7.343477725982666], + [8.005447387695312, -2.5564165115356445], + [0.3877931237220764, -7.461570739746094], + [0.9965649247169495, -7.559528350830078], + [-1.1742308139801025, 1.7545267343521118], + [-0.6949319243431091, 9.97927188873291], + [2.7042055130004883, -4.998528003692627], + [8.719779014587402, -2.6551241874694824], + [-3.477691888809204, -1.3575811386108398], + [6.177264213562012, -1.302993893623352], + [7.548374176025391, -3.5189507007598877], + [0.5043514370918274, -7.479513168334961], + [-2.8959500789642334, 3.057915687561035], + [-1.8137465715408325, 2.389756202697754], + [0.7010416388511658, -4.912406921386719], + [-3.822293758392334, 0.21171069145202637], + [0.35752785205841064, -4.722455024719238], + [3.843449115753174, 6.969033241271973], + [-3.8558218479156494, 5.9854559898376465], + [-2.5416505336761475, -2.5497190952301025], + [-1.9476264715194702, 1.6936894655227661], + [-2.3458168506622314, -2.979418992996216], + [2.893317222595215, -4.8316545486450195], + [-1.6678578853607178, 1.5960009098052979], + [-0.5634568929672241, -0.7709494233131409], + [2.9475882053375244, 5.9231061935424805], + [1.6761071681976318, 2.061129331588745], + [1.6331439018249512, 0.5370805859565735], + [-4.062709331512451, 6.381161689758301], + [-2.517927885055542, 3.5970847606658936], + [0.7012634873390198, -8.278229713439941], + [-2.8382608890533447, -0.04478568211197853], + [-1.1628552675247192, 10.641952514648438], + [-3.8553478717803955, -2.273369312286377], + [-3.7649214267730713, -1.286948323249817], + [5.46633768081665, 8.439176559448242], + [0.4494316577911377, -7.529913902282715], + [1.349581003189087, -7.218796730041504], + [-3.551608085632324, -1.4738961458206177], + [-3.3808860778808594, -1.1726716756820679], + [2.8058862686157227, -4.719503879547119], + [-0.07178432494401932, 4.950090408325195], + [-0.600222647190094, -0.39034155011177063], + [-4.8507256507873535, 4.240524768829346], + [-1.999612808227539, -0.8294687271118164], + [-2.6517531871795654, -0.4763600826263428], + [0.3589578866958618, -6.525702476501465], + [6.869021892547607, -3.9653260707855225], + [-0.6375432014465332, 9.734371185302734], + [0.3610764741897583, -7.041313171386719], + [0.23368239402770996, -5.869065284729004], + [0.5244173407554626, -5.131118297576904], + [-5.720852375030518, -4.901556968688965], + [3.0610549449920654, -6.037456512451172], + [-2.8050689697265625, -0.9373884201049805], + [7.270812034606934, -2.8067967891693115], + [8.36495590209961, -2.435447931289673], + [5.95376443862915, 8.883476257324219], + [-1.6008106470108032, -1.4451886415481567], + [-3.8163392543792725, -2.1038858890533447], + [0.8342065811157227, -5.2540507316589355], + [2.7229220867156982, -1.3745718002319336], + [-2.720665216445923, -0.8346984386444092], + [-1.0152857303619385, 11.12985897064209], + [2.995650291442871, 7.494129657745361], + [4.754988193511963, 7.643604755401611], + [-4.513880252838135, 3.9833619594573975], + [0.03880470246076584, 8.239611625671387], + [0.6671332716941833, 1.8451591730117798], + [-4.297398090362549, 6.4913458824157715], + [-0.8597027659416199, 10.758309364318848], + [-2.180143356323242, -3.2253599166870117], + [1.876615047454834, -6.326156139373779], + [0.8823385834693909, -6.660552024841309], + [1.4030020236968994, 0.49129045009613037], + [-3.344434976577759, -1.545932412147522], + [2.544935464859009, -4.867127418518066], + [0.08180152624845505, -4.860773086547852], + [2.546330690383911, -5.1342082023620605], + [-3.6922764778137207, -0.9785041809082031], + [2.449828863143921, -6.573578834533691], + [-3.4304049015045166, -1.8700205087661743], + [0.7960633635520935, -8.635736465454102], + [-2.831103563308716, -1.6738282442092896], + [-1.9416053295135498, 0.768677830696106], + [-1.2496163845062256, 10.871129989624023], + [-2.478863000869751, -0.8230091333389282], + [-1.2067010402679443, 1.5818164348602295], + [0.7243441343307495, -7.53480339050293], + [7.973245143890381, -3.163884401321411], + [-1.2280488014221191, 11.339460372924805], + [-3.9755589962005615, -2.6241347789764404], + [-1.834736943244934, 1.8324617147445679], + [1.65567147731781, 2.6787917613983154], + [-3.664484977722168, -2.5771522521972656], + [-1.72571861743927, -0.9956162571907043], + [-3.1646158695220947, -0.9135520458221436], + [3.5552637577056885, 6.9132843017578125], + [0.5631349682807922, -7.3677873611450195], + [0.6353155374526978, -9.082948684692383], + [-0.725480318069458, 10.661195755004883], + [-1.969445824623108, 2.0241870880126953], + [-4.300565242767334, -0.8517190217971802], + [-0.36757391691207886, 9.72027587890625], + [7.152575969696045, -2.3526017665863037], + [0.05126022547483444, -3.5974698066711426], + [-2.507549524307251, 5.867735862731934], + [-0.9522428512573242, 9.840995788574219], + [-2.3997750282287598, -0.6242263913154602], + [-1.770442247390747, 0.4286103844642639], + [2.1505465507507324, -3.520530939102173], + [-0.06493628770112991, -4.961368560791016], + [0.7818509936332703, -7.259498596191406], + [6.97139835357666, -2.0064213275909424], + [3.53365421295166, 6.637964725494385], + [1.6725815534591675, 2.329327344894409], + [0.5864351391792297, -7.473931312561035], + [1.6429989337921143, 2.2918670177459717], + [-2.493868589401245, -1.6954880952835083], + [2.7071692943573, -4.692080497741699], + [-0.866003692150116, -2.2457196712493896], + [-1.6022233963012695, 1.515946388244629], + [-3.079106569290161, 4.996070384979248], + [0.8714249730110168, -7.069182872772217], + [2.400665521621704, 0.7943539619445801], + [0.5245068073272705, -3.0637872219085693], + [-2.121844530105591, -1.783578634262085], + [2.9984099864959717, -4.8553032875061035], + [2.4922807216644287, -4.623885631561279], + [-1.9951651096343994, 1.8539185523986816], + [0.5624335408210754, -8.02523136138916], + [-3.5860683917999268, -1.3079992532730103], + [8.713473320007324, -2.6956069469451904], + [-0.7718746662139893, 9.611095428466797], + [-3.4434268474578857, 3.5291781425476074], + [-2.7123711109161377, 3.6598222255706787], + [-3.907480478286743, -1.4209150075912476], + [0.17103591561317444, -3.4869487285614014], + [-5.55350923538208, 6.029254913330078], + [1.0911921262741089, 6.567658424377441], + [0.5560368299484253, -0.659935712814331], + [-3.4343392848968506, -1.167944073677063], + [-0.5151691436767578, 9.415514945983887], + [0.6021491289138794, -8.472707748413086], + [-5.03732967376709, -0.9278074502944946], + [-3.5630462169647217, -1.1125091314315796], + [-3.875678539276123, -0.07961916923522949], + [-3.2604386806488037, -0.46150654554367065], + [-4.07950496673584, -2.8691365718841553], + [-0.8218788504600525, 11.348630905151367], + [1.7722820043563843, 0.038148608058691025], + [0.41545194387435913, -6.943155288696289], + [0.8542106747627258, -5.470991134643555], + [-2.786729097366333, 3.303985357284546], + [7.1328911781311035, -3.2257072925567627], + [-3.0923540592193604, -1.0047153234481812], + [1.8602426052093506, -4.691600799560547], + [-0.9404069781303406, -0.1949630081653595], + [0.5140685439109802, -4.560585975646973], + [-1.3132827281951904, 11.250932693481445], + [-1.9287735223770142, 2.1438605785369873], + [-1.7126480340957642, 1.2397898435592651], + [0.6524959206581116, -3.976569414138794], + [-0.6132153868675232, -1.1251652240753174], + [-0.23722970485687256, -0.9579938650131226], + [2.2331628799438477, -5.164768695831299], + [2.2390496730804443, 5.057326316833496], + [-3.157778024673462, -2.7870547771453857], + [9.44083309173584, -2.941162347793579], + [2.1854746341705322, 4.107551097869873], + [-0.39468705654144287, 9.382963180541992], + [-1.8085131645202637, 1.1341557502746582], + [-5.294851779937744, 6.293217182159424], + [-5.468337535858154, 6.301133155822754], + [0.6167343258857727, -7.293468475341797], + [-3.8274900913238525, -2.5669729709625244], + [-3.0972325801849365, -1.6155699491500854], + [-0.3967699408531189, 9.386058807373047], + [-4.0438408851623535, -2.71225643157959], + [-3.8376057147979736, 6.45346736907959], + [0.0016853734850883484, -5.403672218322754], + [2.4347712993621826, -5.2188615798950195], + [-3.4569685459136963, 4.147777080535889], + [5.77651834487915, -1.3939238786697388], + [5.119992733001709, -3.1458046436309814], + [-1.4054402112960815, 1.3069987297058105], + [3.009227991104126, -4.717273235321045], + [-4.116541862487793, 6.349383354187012], + [0.24708175659179688, -0.9049127697944641], + [-3.8315093517303467, -1.1023005247116089], + [-4.615053653717041, 7.37893009185791], + [0.5304074883460999, -6.355274677276611], + [-4.031849384307861, -2.312601089477539], + [-4.512223720550537, 7.170270919799805], + [-1.2762430906295776, 11.440418243408203], + [1.0823441743850708, -5.879520893096924], + [-0.11628330498933792, -1.9895323514938354], + [-3.702214479446411, -3.2987301349639893], + [-4.237121105194092, 7.050439834594727], + [-3.3072121143341064, -0.8911703824996948], + [1.9097554683685303, 0.05040248855948448], + [-1.7491285800933838, -1.3680380582809448], + [-4.459846019744873, -1.1781748533248901], + [-1.8416482210159302, 1.7269487380981445], + [7.179843902587891, -2.3330018520355225], + [-4.524270057678223, 3.8366124629974365], + [-1.1607130765914917, 11.786170959472656], + [-6.010693073272705, 7.840906143188477], + [1.9817712306976318, 4.27052640914917], + [-3.333574056625366, -1.3844207525253296], + [-1.0091850757598877, 10.309438705444336], + [-4.428778171539307, 7.461508750915527], + [-4.164309978485107, -2.9596760272979736], + [-3.599994421005249, -3.9531819820404053], + [6.002278804779053, -1.943494200706482], + [-1.7353496551513672, -1.6447850465774536], + [-1.2122129201889038, 10.80989933013916], + [-4.192864894866943, 0.16553837060928345], + [0.6305938959121704, -6.967411041259766], + [2.9884426593780518, 2.5807793140411377], + [1.913767695426941, 0.10469311475753784], + [0.8345578908920288, 6.495900630950928], + [-2.637399435043335, 2.671363115310669], + [0.3342849016189575, -6.335601806640625], + [2.713992118835449, 5.719583511352539], + [-5.801639080047607, -1.2450075149536133], + [-3.616528034210205, -1.6126306056976318], + [-1.7942783832550049, 1.1371921300888062], + [-1.9805667400360107, -1.7564626932144165], + [-4.961081027984619, -4.866766929626465], + [2.7680177688598633, -4.532860279083252], + [7.815668106079102, -2.341423749923706], + [-3.2387168407440186, 5.346074104309082], + [1.695049524307251, 4.522191524505615], + [-0.28231191635131836, -2.933321237564087], + [2.4398298263549805, 3.9350624084472656], + [3.2717535495758057, 7.027674674987793], + [2.694556951522827, -4.346181392669678], + [-0.3529437780380249, 0.33768725395202637], + [4.605752468109131, 7.784869194030762], + [-4.24395227432251, 5.691697597503662], + [3.114628553390503, -4.936875820159912], + [-3.9149835109710693, 6.10915470123291], + [-1.1999273300170898, 11.03005599975586], + [-3.77588152885437, -1.811541199684143], + [7.997416973114014, -2.521409273147583], + [0.08035855740308762, -1.4669699668884277], + [-3.7229514122009277, -1.5613542795181274], + [-2.8111119270324707, -0.40257570147514343], + [0.5299723744392395, -6.833288192749023], + [-0.5712437629699707, 9.304450988769531], + [4.405540943145752, 7.274404525756836], + [0.39545050263404846, 2.9475655555725098], + [1.0932483673095703, -0.1840098351240158], + [2.20078444480896, -5.896028518676758], + [-0.06916484981775284, -4.034383773803711], + [-5.452591419219971, 7.539705276489258], + [-3.4685730934143066, -0.9347311854362488], + [6.247077941894531, -4.238821983337402], + [-4.109684467315674, 6.506458282470703], + [-4.377073764801025, 6.337259292602539], + [-4.6492390632629395, 6.891054630279541], + [-5.359811305999756, 6.7803144454956055], + [1.0326895713806152, -4.903051376342773], + [-0.5813992023468018, -2.2433598041534424], + [-2.902141809463501, -2.2376649379730225], + [-3.1210665702819824, -1.0841952562332153], + [1.592487096786499, 5.120856285095215], + [-3.970707416534424, -2.5287070274353027], + [-6.31675386428833, 8.497977256774902], + [-4.322878360748291, -4.009373664855957], + [2.7379727363586426, 4.8056206703186035], + [-4.299067974090576, -3.9555842876434326], + [2.9587738513946533, 5.796075344085693], + [-0.05786067992448807, -4.621218204498291], + [-4.082086563110352, 6.253395080566406], + [-2.465245246887207, -0.717188835144043], + [-1.2852352857589722, -0.3995443284511566], + [-4.624170780181885, 3.9675400257110596], + [0.22342202067375183, -4.677304267883301], + [-3.2455523014068604, -2.9117848873138428], + [0.4390319585800171, -6.569769859313965], + [0.12914711236953735, -4.744980812072754], + [-4.3486151695251465, -0.7598059177398682], + [-0.7207221388816833, 10.335945129394531], + [-0.0266500785946846, -3.2350425720214844], + [-5.2670722007751465, -0.8586539030075073], + [2.8336689472198486, -5.470252513885498], + [0.619488537311554, -7.848117351531982], + [-2.00531268119812, 2.5085201263427734], + [0.4642699360847473, -6.482218265533447], + [2.558462619781494, 5.178262710571289], + [2.686537504196167, -4.426413536071777], + [-0.7139899730682373, 9.949493408203125], + [-1.3315180540084839, -1.0124434232711792], + [2.985969305038452, -4.879151344299316], + [6.563356399536133, -1.4623780250549316], + [-1.300777554512024, 11.710382461547852], + [-3.841636896133423, -3.022571086883545], + [-3.9420368671417236, 6.85018253326416], + [0.05095624178647995, -5.217081069946289], + [-4.9859938621521, -1.9952630996704102], + [-3.739346504211426, -2.468810558319092], + [-3.5002758502960205, -2.9926788806915283], + [-3.845266103744507, -1.2189267873764038], + [4.462436676025391, 7.548076152801514], + [-5.242702960968018, -4.308162689208984], + [0.30381184816360474, -7.024760723114014], + [-5.219967842102051, -0.5635164976119995], + [-1.294846773147583, -3.0209872722625732], + [-1.023223876953125, 11.257214546203613], + [-4.791719913482666, -0.46364825963974], + [-4.017216682434082, -2.079606533050537], + [-0.6974918246269226, 0.9470095634460449], + [-1.1448472738265991, 1.273072361946106], + [-4.771594047546387, 7.06834602355957], + [6.85277795791626, -4.1615729331970215], + [2.0560367107391357, 0.6211847066879272], + [-3.8867290019989014, -2.1030399799346924], + [8.005999565124512, -2.2970521450042725], + [-2.565662384033203, -2.663196086883545], + [-0.29036378860473633, 7.661477565765381], + [-0.4765825867652893, 0.8676211833953857], + [1.6687959432601929, 5.314558982849121], + [1.48417329788208, 5.488985061645508], + [-3.267869234085083, 6.029619216918945], + [2.6131300926208496, -4.204973220825195], + [-5.640568256378174, 5.74207878112793], + [-0.7796207666397095, 10.176891326904297], + [-0.6887689828872681, -0.6066681146621704], + [2.072648048400879, -5.2246809005737305], + [-2.0677602291107178, 5.096530437469482], + [-3.210853338241577, -1.2561492919921875], + [-3.6474545001983643, -1.8319237232208252], + [-3.6177706718444824, -1.1971291303634644], + [-4.416391849517822, -1.5989911556243896], + [1.1462063789367676, -6.905535697937012], + [-4.7312726974487305, 5.782438278198242], + [0.9544005990028381, -6.699131965637207], + [-1.7398960590362549, 1.7982913255691528], + [0.3708547353744507, -4.882453441619873], + [5.707968235015869, -1.3957082033157349], + [-3.503619909286499, -0.982516348361969], + [2.9448654651641846, -4.627073287963867], + [-3.549104928970337, 4.502574920654297], + [-3.061021566390991, -1.9422427415847778], + [8.482915878295898, -2.957825183868408], + [3.3779141902923584, 0.8255770206451416], + [0.928253710269928, -5.899036407470703], + [-2.741278886795044, -1.153141736984253], + [4.933263301849365, -1.9452903270721436], + [-5.065542697906494, -0.6785883903503418], + [2.4277260303497314, -4.031905174255371], + [0.8322262763977051, -6.111861705780029], + [-1.3500068187713623, -1.5320640802383423], + [-3.3972184658050537, -2.32492995262146], + [-4.937735080718994, 3.06553053855896], + [1.9875400066375732, 4.747868537902832], + [7.743661880493164, -2.500480890274048], + [2.0467751026153564, 1.097495198249817], + [-1.9349336624145508, 2.0397181510925293], + [-0.1289823055267334, -0.14533300697803497], + [0.7367725968360901, -8.685819625854492], + [-2.357909917831421, 0.08698433637619019], + [0.8228598237037659, -0.2086414098739624], + [-0.749038815498352, 9.956939697265625], + [-1.9411269426345825, 2.4321813583374023], + [-4.8377156257629395, -2.9724366664886475], + [0.684683620929718, -8.40500259399414], + [-2.0644869804382324, -0.22583413124084473], + [2.1217024326324463, -5.8739118576049805], + [-3.6454858779907227, -1.3912650346755981], + [-3.8687610626220703, -2.4892468452453613], + [-1.675980806350708, -2.5529582500457764], + [-3.663961172103882, -0.7321287393569946], + [2.910780429840088, -4.5500335693359375], + [-2.006650686264038, 0.5988368988037109], + [-2.3083534240722656, 0.056128617376089096], + [5.2621636390686035, -1.2444801330566406], + [2.732586145401001, 6.589956283569336], + [-0.9359043836593628, 8.885749816894531], + [1.7855347394943237, -6.197681903839111], + [7.919094562530518, -2.3438658714294434], + [0.2298572063446045, -6.05217170715332], + [-0.9569383263587952, 10.288379669189453], + [6.318206787109375, -1.7078814506530762], + [-5.248810768127441, 5.979513645172119], + [1.6762127876281738, -6.611486434936523], + [0.5980632305145264, -7.30310583114624], + [-0.6000776886940002, 9.77153205871582], + [-3.4170098304748535, 4.362644195556641], + [0.6120849847793579, -0.34945130348205566], + [-2.1968936920166016, -0.9840803146362305], + [5.112621784210205, -3.9343814849853516], + [-4.210417747497559, -3.1977927684783936], + [8.204865455627441, -2.629318952560425], + [2.262023448944092, -4.118989944458008], + [0.29270443320274353, -0.9309746623039246], + [2.7041103839874268, -4.202465534210205], + [0.6238669157028198, -7.109546661376953], + [3.8607962131500244, 7.053143501281738], + [2.8732357025146484, 6.691577434539795], + [2.904834032058716, -4.7766642570495605], + [1.4217290878295898, 2.72776198387146], + [7.472729682922363, -2.1785476207733154], + [-2.2503297328948975, -1.557131290435791], + [-0.2506803870201111, 8.4567289352417], + [-1.0809211730957031, 10.292186737060547], + [-4.128067970275879, -2.833625316619873], + [-4.454420566558838, -2.3090226650238037], + [-3.7577641010284424, -1.7340868711471558], + [0.5229688882827759, -6.719459056854248], + [-2.0477547645568848, 0.06493937969207764], + [4.511734962463379, 7.528090476989746], + [-1.1499289274215698, 10.369239807128906], + [-5.035887241363525, 6.30562162399292], + [-4.270325183868408, 5.102223873138428], + [-1.3306350708007812, 11.918268203735352], + [-1.3566176891326904, 11.607799530029297], + [2.895427942276001, -4.945568561553955], + [-0.5907517671585083, 6.4601898193359375], + [-1.2227314710617065, 11.354572296142578], + [0.034967415034770966, -3.360774517059326], + [-0.9144760966300964, -1.151117205619812], + [-3.7572219371795654, 6.183000564575195], + [6.450435161590576, -3.4891114234924316], + [6.437958240509033, -1.2840174436569214], + [-4.057525157928467, -2.355639696121216], + [2.8017308712005615, 0.6629844903945923], + [-1.8641856908798218, 0.8601707220077515], + [-2.870939254760742, 4.242992401123047], + [-3.482208013534546, -1.3025749921798706], + [-4.069227695465088, 1.3409836292266846], + [-0.5651918053627014, 10.09902286529541], + [2.6300570964813232, 5.601857662200928], + [9.006168365478516, -2.8490939140319824], + [0.8361731767654419, -4.801779747009277], + [2.633765459060669, -4.523670673370361], + [0.8465761542320251, 4.451198577880859], + [-1.4741628170013428, 1.159109354019165], + [-5.095017433166504, 6.335598945617676], + [-1.4330799579620361, 0.6427364945411682], + [0.6830169558525085, 0.18325577676296234], + [-4.459506034851074, 2.1662395000457764], + [1.274127721786499, -4.571042537689209], + [0.4074857234954834, -6.512580871582031], + [6.213128089904785, -1.4743462800979614], + [1.1815526485443115, -5.6443352699279785], + [-1.7888031005859375, 0.6062184572219849], + [1.8970258235931396, -3.613461971282959], + [-1.3760740756988525, 11.718570709228516], + [0.02612926810979843, -1.256426215171814], + [-4.777536392211914, -0.018022362142801285], + [1.251916766166687, -5.026104927062988], + [1.2932496070861816, 5.062561511993408], + [0.8949841856956482, -0.249089777469635], + [7.69098424911499, -2.7730679512023926], + [0.5008952617645264, -7.325905799865723], + [3.0369184017181396, -4.802305221557617], + [3.00960373878479, -5.155828475952148], + [6.958926200866699, -3.251668930053711], + [-2.782196283340454, 3.5106394290924072], + [-4.038824558258057, -4.4667558670043945], + [-1.9272706508636475, -3.4412336349487305], + [-0.0408327654004097, -2.4996631145477295], + [-5.8853325843811035, 5.257730484008789], + [-0.12909787893295288, 7.404560089111328], + [1.4839048385620117, -7.318480014801025], + [4.725022792816162, 7.758065223693848], + [-1.4519039392471313, 12.025793075561523], + [0.004085056483745575, 7.983091354370117], + [-1.01581871509552, 1.7335009574890137], + [-3.3472049236297607, -1.8638851642608643], + [-3.411503553390503, -1.5738366842269897], + [-4.507440090179443, -4.275203227996826], + [0.4335295557975769, -6.359993934631348], + [2.5861315727233887, -3.3012216091156006], + [7.440181732177734, -2.153684139251709], + [0.26944637298583984, -5.996027946472168], + [-3.6022775173187256, -2.029710292816162], + [-1.6546133756637573, 1.984721302986145], + [8.671917915344238, -3.3599841594696045], + [4.829293727874756, 7.744752883911133], + [-3.764417886734009, -2.2000160217285156], + [-5.505052089691162, 5.721035003662109], + [2.649996042251587, 6.400989055633545], + [-5.603425979614258, 7.369444847106934], + [8.262789726257324, -2.715629816055298], + [-2.5342864990234375, -0.8195276856422424], + [-1.4884018898010254, 11.919750213623047], + [0.48355668783187866, -6.829351425170898], + [-0.5887958407402039, -1.3299815654754639], + [-0.01915336400270462, -5.281518936157227], + [-0.19406980276107788, 9.707197189331055], + [0.8575151562690735, -7.991383075714111], + [-3.9100656509399414, -1.208593726158142], + [-0.8820118308067322, 1.1383572816848755], + [9.255969047546387, -2.869004011154175], + [2.737610101699829, -4.577056884765625], + [-1.1475489139556885, 10.809283256530762], + [7.172308444976807, -2.089510679244995], + [-2.54577898979187, 2.5679359436035156], + [-2.432086706161499, 1.813416838645935], + [-3.5971405506134033, -0.6066451072692871], + [-1.2180854082107544, 10.923250198364258], + [-3.46930193901062, 5.776792526245117], + [-1.095374584197998, 10.418354988098145], + [-0.18009406328201294, 8.86398696899414], + [-4.71493673324585, -1.3276036977767944], + [3.4069595336914062, -5.241873741149902], + [4.07516622543335, -3.4755589962005615], + [-1.2488336563110352, 11.189401626586914], + [-0.33283454179763794, 8.81137466430664], + [-5.088473320007324, -1.827515721321106], + [1.9227559566497803, -4.9535322189331055], + [8.244485855102539, -2.8844926357269287], + [-4.010880947113037, -1.6535574197769165], + [-0.6138852834701538, 9.032938003540039], + [-1.4251532554626465, 12.126588821411133], + [5.2710490226745605, 8.35753059387207], + [4.904858112335205, -0.7524813413619995], + [-1.391127586364746, 1.1092054843902588], + [-3.20603346824646, -1.3157931566238403], + [2.0373666286468506, 4.813246726989746], + [1.341306447982788, 0.29555052518844604], + [2.3185739517211914, 6.253299713134766], + [8.431506156921387, -2.7857978343963623], + [3.1769213676452637, 6.557307243347168], + [0.7355859875679016, -8.22292709350586], + [-1.281802773475647, 10.514078140258789], + [-4.0267109870910645, -1.6168763637542725], + [9.567183494567871, -2.8849289417266846], + [-3.474189281463623, -0.9264763593673706], + [1.906998634338379, -4.828350067138672], + [-0.19436967372894287, 9.837483406066895], + [2.2896759510040283, -4.568292617797852], + [1.7512054443359375, 2.3476691246032715], + [7.10264778137207, -2.681142568588257], + [-1.3108829259872437, 10.973969459533691], + [-2.002152681350708, 5.9940690994262695], + [1.6765847206115723, 5.27821159362793], + [0.48247456550598145, -6.263849258422852], + [-3.936973810195923, -0.2051699161529541], + [0.599035382270813, -6.03731632232666], + [-2.1027004718780518, 0.21383774280548096], + [1.0291498899459839, -4.9253716468811035], + [-2.2331111431121826, 1.9621621370315552], + [7.922720432281494, -2.615049123764038], + [-3.9871602058410645, 6.5666069984436035], + [1.9384901523590088, 5.084378719329834], + [0.6017295718193054, -7.975851058959961], + [1.8618011474609375, -5.492203712463379], + [-4.497323513031006, -1.339383840560913], + [-3.8956730365753174, -1.7494571208953857], + [-3.229220151901245, -0.9981291890144348], + [2.505659818649292, -4.456459999084473], + [7.261867523193359, -3.3455889225006104], + [3.231372117996216, 0.925216555595398], + [0.8802411556243896, -0.21595363318920135], + [0.7029218673706055, -6.845284461975098], + [-1.2466217279434204, 10.709329605102539], + [-4.002086162567139, -1.3579808473587036], + [0.2955794930458069, -2.9479763507843018], + [1.7639529705047607, 5.74209451675415], + [8.29126262664795, -2.678487777709961], + [-1.4205944538116455, 12.103236198425293], + [0.3590492606163025, -4.983626842498779], + [-1.6708744764328003, 1.7349417209625244], + [-1.38387131690979, 11.724496841430664], + [6.833092212677002, -2.2817513942718506], + [-3.8323416709899902, -3.0993764400482178], + [1.676137924194336, -4.58981990814209], + [-0.922057569026947, 10.203176498413086], + [-0.6359994411468506, 9.629406929016113], + [4.650060176849365, -2.1579787731170654], + [-2.692497968673706, -1.0498713254928589], + [8.527716636657715, -2.6692731380462646], + [2.0495126247406006, -4.481077671051025], + [-0.8364319205284119, -0.7683823704719543], + [0.7046706080436707, -7.749178409576416], + [0.7501322627067566, -0.3048825263977051], + [4.248328685760498, 6.970369338989258], + [2.6123368740081787, -6.30368709564209], + [-0.11293277889490128, -1.0996671915054321], + [1.4552465677261353, 0.41373854875564575], + [-3.8724658489227295, 6.096062660217285], + [0.6419730186462402, -8.360726356506348], + [2.7684080600738525, -4.314752578735352], + [-5.528919696807861, 3.42391300201416], + [0.8533437848091125, -6.051552772521973], + [-1.1150774955749512, 10.131662368774414], + [-2.4307634830474854, -1.6962153911590576], + [-1.9876989126205444, 1.9022845029830933], + [1.579892873764038, -0.15730680525302887], + [-1.5250999927520752, 1.7469722032546997], + [8.111624717712402, -2.5227720737457275], + [-2.888293981552124, -1.7811483144760132], + [1.2636500597000122, 1.6962910890579224], + [-0.023985810577869415, -5.04130220413208], + [6.716183662414551, -2.0090417861938477], + [1.3416564464569092, 0.8661046028137207], + [2.238929033279419, 5.884466171264648], + [-4.152278423309326, -2.809939384460449], + [-3.89880633354187, 3.75868558883667], + [0.48329442739486694, 0.12809693813323975], + [-3.577669382095337, -2.385620594024658], + [5.02296781539917, 8.09654426574707], + [5.384837627410889, -0.93845534324646], + [-0.20709872245788574, 7.777144908905029], + [-2.9951159954071045, -1.1336437463760376], + [-0.3653784394264221, 0.440881609916687], + [1.3000726699829102, 5.509452819824219], + [2.5707192420959473, -4.419597625732422], + [3.451683282852173, 6.63215446472168], + [-3.528942584991455, -1.2822110652923584], + [0.7648805379867554, -8.372262954711914], + [2.57602858543396, -4.452384948730469], + [0.7152881622314453, -7.096499443054199], + [0.2589234709739685, -6.196033000946045], + [-0.2520090937614441, 8.69922161102295], + [0.9508783221244812, -5.989293098449707], + [1.5621179342269897, 5.427515506744385], + [2.878401517868042, -4.074619770050049], + [0.6651901602745056, -7.7098708152771], + [3.5875847339630127, 6.952059745788574], + [3.336188554763794, 6.749910354614258], + [0.5377339720726013, -7.293487548828125], + [-1.8402751684188843, 0.7693954706192017], + [8.558173179626465, -2.649925708770752], + [2.844003915786743, -4.777242660522461], + [0.6728986501693726, -9.008018493652344], + [-1.819566011428833, -1.003793716430664], + [0.6963679790496826, -8.979940414428711], + [7.834426403045654, -2.631312131881714], + [5.986273288726807, 8.970972061157227], + [0.7401008009910583, -8.759798049926758], + [-3.6819710731506348, 5.546566963195801], + [-1.2114442586898804, 2.030438184738159], + [-1.4284188747406006, 11.911420822143555], + [-1.8288381099700928, 0.39824244379997253], + [2.0614588260650635, -4.474946975708008], + [2.5688397884368896, -4.16547966003418], + [-2.966919422149658, 5.209260940551758], + [-3.5700535774230957, -1.377003788948059], + [9.060479164123535, -2.7029550075531006], + [0.4421336054801941, -4.7848615646362305], + [-3.7455365657806396, -2.404994487762451], + [-3.668489694595337, -1.5760926008224487], + [-4.459840297698975, -0.7207484245300293], + [-1.388408899307251, 12.00383186340332], + [-4.515544891357422, -3.858341932296753], + [-2.6236727237701416, -1.4467166662216187], + [1.0792951583862305, -6.063963413238525], + [-1.1345243453979492, -0.296420156955719], + [-2.8452932834625244, -3.0066254138946533], + [2.5419204235076904, 0.7686085104942322], + [-1.9067373275756836, 0.5505342483520508], + [-3.48518443107605, -0.2963866591453552], + [2.8673083782196045, -4.762814044952393], + [-5.178560733795166, 7.032073020935059], + [-4.001009941101074, 5.85460090637207], + [2.7280595302581787, 6.728726863861084], + [-0.35300201177597046, 10.171090126037598], + [-0.4683709740638733, 9.711931228637695], + [-3.519193649291992, -2.6225368976593018], + [-1.5717055797576904, 12.912511825561523], + [-1.1778393983840942, 1.3274990320205688], + [0.7586740851402283, -9.477412223815918], + [0.8246323466300964, -4.796980381011963], + [0.5299482941627502, -6.914334297180176], + [-3.3598663806915283, -1.612532615661621], + [0.582862913608551, -8.573982238769531], + [1.0200374126434326, 0.2587697207927704], + [8.536839485168457, -3.0859134197235107], + [-3.339590311050415, 5.248760223388672], + [-3.1490256786346436, -1.9462946653366089], + [0.7716260552406311, -7.891063690185547], + [-4.725771903991699, -1.5840932130813599], + [-3.3024771213531494, -0.6735029816627502], + [-2.5734167098999023, -1.0015101432800293], + [0.44730234146118164, -1.08822500705719], + [-4.158020973205566, -0.1018800139427185], + [0.7941924929618835, -9.70292854309082], + [-1.4618101119995117, 11.94527530670166], + [-2.3588833808898926, 5.9628825187683105], + [-1.8205045461654663, 1.0704898834228516], + [7.209201812744141, -3.216468095779419], + [8.55942440032959, -3.972658157348633], + [0.6436699032783508, -5.8548264503479], + [-1.8273555040359497, 1.486951470375061], + [-3.862294912338257, -3.0529377460479736], + [2.2107884883880615, 5.867119789123535], + [-1.9222458600997925, 1.9381974935531616], + [-1.4853506088256836, 12.49132251739502], + [0.6476735472679138, -5.093162536621094], + [-3.148648262023926, -0.849860668182373], + [-2.013253927230835, 2.239499092102051], + [-2.9830527305603027, -0.22529208660125732], + [3.682332754135132, 6.9802751541137695], + [2.3403141498565674, -4.047421932220459], + [-4.023660182952881, 7.306399822235107], + [7.590762138366699, -2.49870228767395], + [2.539815902709961, -4.326624393463135], + [-5.1449503898620605, 6.866373062133789], + [8.239739418029785, -2.4508564472198486], + [0.14262637495994568, -4.348026275634766], + [-4.530824661254883, -1.290981411933899], + [-2.550577402114868, 5.802574157714844], + [0.6337791085243225, -8.272550582885742], + [1.0662778615951538, -0.19613432884216309], + [-4.606971263885498, -2.089948892593384], + [3.9204037189483643, 7.22997522354126], + [-2.924018621444702, -1.5403944253921509], + [2.0638699531555176, -5.198546886444092], + [-3.4120218753814697, -0.6457020044326782], + [-3.935162305831909, -2.570666790008545], + [2.581911563873291, -3.7200706005096436], + [-4.850892543792725, -1.116477131843567], + [-0.015184707939624786, 5.119717597961426], + [1.6118618249893188, 1.3641785383224487], + [6.410159111022949, -3.339683771133423], + [-4.102243900299072, -2.003588914871216], + [2.2103137969970703, 5.093538284301758], + [-3.483069658279419, -1.388547658920288], + [2.2444465160369873, -5.7252984046936035], + [2.2082250118255615, 5.514550685882568], + [-0.657379686832428, 9.81179428100586], + [2.1904799938201904, -4.311985492706299], + [-3.483538866043091, -1.040137767791748], + [-1.3529961109161377, -2.062506914138794], + [2.7181577682495117, -4.1672563552856445], + [2.1887106895446777, 5.880511283874512], + [0.24970898032188416, -4.662424564361572], + [7.68305778503418, -2.4869956970214844], + [0.6005954146385193, -7.471756935119629], + [-4.189754009246826, 5.936007976531982], + [-1.2345083951950073, -1.0311477184295654], + [0.6311479806900024, -7.015542984008789], + [-4.677792072296143, -4.652791976928711], + [5.634746074676514, -1.283308506011963], + [-0.6221609115600586, 9.824480056762695], + [-3.669499397277832, -0.4197232723236084], + [2.758202314376831, -4.162984371185303], + [0.7263591885566711, -7.033550262451172], + [4.976883411407471, 7.906571865081787], + [0.4291098117828369, -7.055385589599609], + [2.101280450820923, 0.49241960048675537], + [-4.102847099304199, -1.2133219242095947], + [-1.4615552425384521, 1.2596663236618042], + [0.8962368369102478, -4.439256191253662], + [-3.228398084640503, -1.1601977348327637], + [2.6407082080841064, 6.479617118835449], + [7.436466693878174, -3.2543232440948486], + [-0.6178237795829773, 10.258453369140625], + [-3.7965123653411865, -1.0694984197616577], + [0.32814866304397583, -6.465951442718506], + [-1.5136933326721191, 4.805096626281738], + [-1.9041701555252075, 1.8927894830703735], + [6.004551887512207, -1.3122093677520752], + [-5.107914924621582, -0.5457568168640137], + [5.8718671798706055, -1.1368156671524048], + [-4.1733574867248535, -2.6613996028900146], + [-3.3538706302642822, -1.7578450441360474], + [0.12227564305067062, -5.399420738220215], + [0.012495629489421844, -3.1871373653411865], + [-0.45597895979881287, -1.2179442644119263], + [2.9335663318634033, -4.781466484069824], + [0.8952843546867371, -6.526308059692383], + [-4.002286434173584, -3.508054733276367], + [0.4059898257255554, -7.265777587890625], + [0.6441934108734131, -8.394989013671875], + [-2.0094237327575684, 2.359224557876587], + [0.7449238896369934, -8.983967781066895], + [-4.68103551864624, 6.471416473388672], + [-1.1800181865692139, 10.409926414489746], + [0.8500942587852478, 3.79364275932312], + [-2.1210923194885254, -0.8090139627456665], + [0.541061282157898, -5.919008255004883], + [9.904349327087402, -3.0262291431427], + [0.6612799167633057, -0.29613566398620605], + [-1.3637189865112305, 3.4095375537872314], + [-1.9035691022872925, 0.9911527633666992], + [0.4551524519920349, 0.8709452152252197], + [0.0134500190615654, -5.395907402038574], + [0.5461705923080444, -7.495363712310791], + [0.5978037714958191, -8.529156684875488], + [-2.8947041034698486, 2.5729737281799316], + [-3.307844400405884, -1.341603398323059], + [-4.2585320472717285, -1.18962824344635], + [0.3975885510444641, -0.6882157325744629], + [4.563632965087891, 7.331872940063477], + [1.1141290664672852, -5.385931968688965], + [-0.02548126131296158, -1.1775124073028564], + [-2.4073169231414795, 1.1752750873565674], + [1.1281447410583496, -4.985869407653809], + [1.4821760654449463, -5.717877388000488], + [-0.9566473364830017, 9.501474380493164], + [0.6731612682342529, -7.462884426116943], + [-0.8492168188095093, 10.973628044128418], + [-5.18729829788208, -1.374201774597168], + [3.4531404972076416, 6.97609806060791], + [-4.706015110015869, 6.357923984527588], + [2.6337573528289795, -4.774579048156738], + [0.6391564607620239, -8.291718482971191], + [3.587871551513672, 7.1102614402771], + [0.5314150452613831, -7.822561264038086], + [9.21526050567627, -2.9816184043884277], + [-0.9449501633644104, 10.322103500366211], + [3.7238352298736572, 6.947641372680664], + [-0.03454495221376419, -3.514155626296997], + [-1.580086588859558, 13.372445106506348], + [0.3893463611602783, -6.729167938232422], + [-1.3023380041122437, 11.895647048950195], + [-5.714809894561768, -0.855545163154602], + [0.5460398197174072, -6.840239524841309], + [-5.765468120574951, 4.1307501792907715], + [-1.3135241270065308, 1.2902398109436035], + [8.276397705078125, -3.090489625930786], + [5.367973327636719, -2.949854850769043], + [-3.6629064083099365, -1.2334619760513306], + [-2.1469125747680664, 2.875757932662964], + [-3.4320452213287354, -0.7923749685287476], + [-2.0395889282226562, 2.5194079875946045], + [-1.341927409172058, 11.524490356445312], + [1.7332807779312134, 5.495268821716309], + [4.355360984802246, 7.194741249084473], + [6.361583232879639, -1.9234405755996704], + [0.01592760533094406, 7.950066089630127], + [-1.0838227272033691, 10.521074295043945], + [-5.234250545501709, 5.735671043395996], + [-1.9357657432556152, -1.5291301012039185], + [0.3250925540924072, -5.758262634277344], + [-1.2147785425186157, 11.097661018371582], + [-1.8384252786636353, 1.1196539402008057], + [0.8454722762107849, -6.794323444366455], + [-0.2344146966934204, 9.06257438659668], + [0.11934124678373337, -5.673213958740234], + [-0.8886702656745911, 10.002870559692383], + [-1.1963512897491455, 10.5537691116333], + [-3.599809408187866, -0.8900812864303589], + [0.2822890877723694, -4.313530921936035], + [3.7975881099700928, 7.0563130378723145], + [7.5729594230651855, -2.7224719524383545], + [-0.5895830392837524, 9.43317985534668], + [-5.913680553436279, -1.5224751234054565], + [0.23294878005981445, -1.156935691833496], + [0.37180256843566895, -6.738480567932129], + [2.2711522579193115, -4.458052635192871], + [-2.2519478797912598, 1.6350758075714111], + [-4.7516984939575195, -0.8698359727859497], + [0.16956284642219543, -5.0176215171813965], + [2.514888286590576, 6.304600238800049], + [-0.4426995515823364, -0.8596486449241638], + [2.1101741790771484, 4.833308696746826], + [8.07003116607666, -2.582061767578125], + [-1.6994496583938599, -2.2374823093414307], + [2.852458953857422, -4.6953582763671875], + [7.9742350578308105, -2.763014078140259], + [-1.077506184577942, -3.085268497467041], + [0.33502304553985596, -6.9579668045043945], + [-3.6111085414886475, -1.996127724647522], + [-1.8172179460525513, 1.6599960327148438], + [0.5168581008911133, -0.8588310480117798], + [0.43610018491744995, -7.448427200317383], + [0.09685539454221725, -5.227571487426758], + [1.7256157398223877, -5.496729373931885], + [-0.557697057723999, 9.664461135864258], + [-0.8762694597244263, -0.6945126056671143], + [2.4266257286071777, -4.623355865478516], + [0.43778127431869507, 0.428611695766449], + [-1.3268779516220093, 11.780218124389648], + [-1.4055463075637817, 11.598897933959961], + [1.4434049129486084, 1.3218525648117065], + [-0.11485714465379715, -0.9674077033996582], + [-1.5374714136123657, 5.554595947265625], + [1.9578373432159424, 2.802239179611206], + [5.810304164886475, -1.0953375101089478], + [-1.1717464923858643, 10.893373489379883], + [0.9365541338920593, -0.36934059858322144], + [-2.21468186378479, 6.257791042327881], + [-0.9617863297462463, 11.252461433410645], + [-0.424238383769989, -0.8878447413444519], + [-1.0586084127426147, 10.697158813476562], + [2.4985978603363037, -4.208018779754639], + [7.0995564460754395, -2.2569093704223633], + [1.129042148590088, -0.12973251938819885], + [0.6286759972572327, -4.2637481689453125], + [-1.057592511177063, 10.533401489257812], + [6.796659469604492, -1.9386245012283325], + [8.053607940673828, -3.2708818912506104], + [0.8609523177146912, -4.485891342163086], + [-5.606411933898926, 7.888422012329102], + [-2.905693769454956, -0.7807382345199585], + [0.30775579810142517, -4.334942817687988], + [0.41166067123413086, -6.153470993041992], + [-3.481738328933716, -0.6169683337211609], + [0.13197338581085205, -4.611691474914551], + [-1.8456507921218872, 1.563881516456604], + [-0.7698185443878174, 11.802589416503906], + [-1.9001080989837646, 2.7249057292938232], + [-1.9818575382232666, 1.0701459646224976], + [-1.18269681930542, 9.504096984863281], + [2.7595603466033936, -4.484647750854492], + [-0.4639313220977783, 9.145692825317383], + [-4.951018810272217, -1.5605143308639526], + [-4.116142272949219, -3.721170663833618], + [-1.7952053546905518, -2.546471118927002], + [-1.2757747173309326, 10.984899520874023], + [-0.5281718969345093, 7.654416084289551], + [1.7491530179977417, 0.10644815862178802], + [-2.97041392326355, 2.104360342025757], + [2.7823421955108643, -4.603387832641602], + [-4.417901992797852, 5.7063188552856445], + [-4.304262638092041, -1.0253596305847168], + [-2.470587730407715, -0.7763921022415161], + [-3.6786293983459473, -3.44787335395813], + [7.870314121246338, -3.088984489440918], + [2.080705404281616, -4.038225173950195], + [2.7838869094848633, -4.4255690574646], + [-3.0328147411346436, -1.6835249662399292], + [-1.3197613954544067, 11.367227554321289], + [0.7282464504241943, -7.666897296905518], + [2.0902278423309326, 5.3142409324646], + [-2.814964771270752, -1.0191421508789062], + [0.43554890155792236, -6.563653945922852], + [6.984492778778076, -2.6004157066345215], + [4.328453063964844, 7.579689025878906], + [0.09666477888822556, -5.776454448699951], + [0.553020179271698, -7.707819938659668], + [2.849270820617676, -4.79615592956543], + [-1.529548168182373, 1.3640825748443604], + [-1.3259327411651611, 11.559738159179688], + [0.15070539712905884, -6.206671714782715], + [-1.2375032901763916, 5.545393943786621], + [5.613667011260986, -1.2512177228927612], + [-1.0034772157669067, 10.292878150939941], + [2.259040117263794, 4.182003974914551], + [-3.8467957973480225, -0.9090442657470703], + [-1.8634059429168701, 1.0558099746704102], + [-0.8803437352180481, 10.450977325439453], + [6.042387008666992, -3.620250701904297], + [0.35585373640060425, -6.929580211639404], + [0.7471826076507568, -7.397104263305664], + [1.5391578674316406, 5.434940338134766], + [-0.4254074692726135, -1.6186916828155518], + [1.0599708557128906, -4.466433525085449], + [-5.314953327178955, -0.7498095631599426], + [2.444410562515259, -5.733486652374268], + [-0.737211287021637, -1.0408014059066772], + [1.7963957786560059, -6.150703430175781], + [-4.403696537017822, 0.6063008308410645], + [0.447137713432312, -7.445443153381348], + [3.033689260482788, -5.126742362976074], + [-4.939405918121338, -0.44738173484802246], + [-3.7935776710510254, -0.15246176719665527], + [-1.6041873693466187, 13.087383270263672], + [-0.027055956423282623, -4.364164352416992], + [-4.499960899353027, -0.8832343220710754], + [0.8281155228614807, -6.3569159507751465], + [-3.9394187927246094, -1.9776287078857422], + [0.9939624667167664, -7.478416919708252], + [-4.41405725479126, 5.685680389404297], + [-1.2243165969848633, 10.900879859924316], + [-2.0455005168914795, 0.43266230821609497], + [0.28645533323287964, -6.244810104370117], + [1.018746018409729, -6.860699653625488], + [-0.6387643218040466, 10.043160438537598], + [-4.622480869293213, -0.7575408220291138], + [7.611751079559326, -3.535571575164795], + [-0.8400318026542664, 9.526521682739258], + [2.4494428634643555, 6.412176609039307], + [-1.1369549036026, 10.84571361541748], + [2.7473318576812744, 5.8836822509765625], + [-1.3945163488388062, 11.592124938964844], + [1.2189149856567383, 0.8793668150901794], + [2.1391594409942627, -4.2122955322265625], + [-2.0079262256622314, 2.0901038646698], + [0.44255733489990234, -6.672808647155762], + [6.958506107330322, -2.8455097675323486], + [-3.526892900466919, -2.26833438873291], + [0.7324493527412415, -6.922446250915527], + [1.181506872177124, -5.253974914550781], + [0.3192509412765503, -5.753264427185059], + [-1.2608295679092407, 11.66848087310791], + [-1.3470053672790527, -0.012506965547800064], + [6.875338077545166, -4.034608364105225], + [-1.942809820175171, 0.975751519203186], + [-0.9095379710197449, 11.29258918762207], + [7.886382579803467, -2.7653415203094482], + [1.837353229522705, 0.6119238138198853], + [-0.7694395184516907, 10.489089965820312], + [5.928750514984131, -1.73538339138031], + [-2.5021250247955322, -1.1524360179901123], + [-5.131633758544922, -0.8927719593048096], + [4.63357400894165, 7.6823410987854], + [0.6257972121238708, -8.542098999023438], + [1.2409625053405762, 0.9653784036636353], + [0.7690344452857971, -6.817309856414795], + [0.6063886880874634, -7.363210678100586], + [8.577588081359863, -2.6109378337860107], + [-3.6554267406463623, -1.38450288772583], + [2.773238182067871, -4.796839237213135], + [9.107354164123535, -2.8216917514801025], + [-3.481759548187256, 5.891416549682617], + [-4.388540267944336, -3.5956344604492188], + [-5.018613815307617, 5.846426010131836], + [-3.16015887260437, -1.2698944807052612], + [0.9106338620185852, -6.17828893661499], + [-2.167116403579712, 0.1710394024848938], + [2.739894151687622, -4.564364433288574], + [-1.969211459159851, 2.011955738067627], + [-3.804367780685425, -1.322884440422058], + [-0.9511346220970154, -2.042687177658081], + [-3.760669231414795, -1.2118459939956665], + [-2.7242743968963623, 5.170954704284668], + [3.014859199523926, 6.325362205505371], + [-4.116856098175049, -2.6979806423187256], + [8.177778244018555, -2.6807172298431396], + [-4.435144424438477, -1.2457635402679443], + [-0.1289409101009369, -1.1971057653427124], + [0.9913896918296814, -5.373046398162842], + [-1.5655392408370972, -0.8288376331329346], + [-2.0863187313079834, 2.5172345638275146], + [8.66511058807373, -2.6433703899383545], + [-0.4497085213661194, 9.094146728515625], + [0.6237847208976746, -5.905437469482422], + [0.46088898181915283, -6.714641571044922], + [-1.8625657558441162, 1.4813101291656494], + [-1.3784425258636475, 11.348252296447754], + [0.02510150521993637, -1.4043070077896118], + [-5.028763294219971, -1.1937730312347412], + [-0.6219863295555115, 10.48958969116211], + [-0.9671204686164856, 9.729570388793945], + [-4.408059597015381, -0.9114720821380615], + [2.2034575939178467, 4.6953535079956055], + [2.895991802215576, -5.092756748199463], + [-1.3482457399368286, -2.3905372619628906], + [-1.883125901222229, -0.23780474066734314], + [-2.1866958141326904, -0.8956043720245361], + [0.629405677318573, -8.403982162475586], + [2.659416913986206, -4.360385894775391], + [-1.2963738441467285, 9.758631706237793], + [-3.8672983646392822, -2.59299635887146], + [1.7697029113769531, 2.0967295169830322], + [0.6895301938056946, -4.169507026672363], + [-0.5598961114883423, -1.8456279039382935], + [-4.59213399887085, -0.9746699929237366], + [3.508094310760498, 7.012998104095459], + [-3.37982439994812, -0.6853542923927307], + [-3.93388295173645, -1.5395039319992065], + [8.131928443908691, -2.7582099437713623], + [2.3652307987213135, -5.460019111633301], + [-5.3144755363464355, 6.280923366546631], + [1.8266723155975342, -4.514040946960449], + [5.024190425872803, -4.312155723571777], + [0.5534165501594543, -8.112870216369629], + [-3.4267051219940186, 0.08558207750320435], + [-0.2930072546005249, 9.44645881652832], + [-2.293984889984131, 2.2188777923583984], + [2.35345196723938, -4.416767597198486], + [-5.221588611602783, 6.510463237762451], + [7.027713775634766, -3.125185251235962], + [-2.8122036457061768, -0.886499285697937], + [1.510303020477295, 0.39020854234695435], + [1.2747753858566284, 5.153929710388184], + [-3.5144784450531006, -1.3471373319625854], + [2.7620434761047363, -4.999149322509766], + [2.4042797088623047, -4.26028299331665], + [2.192528486251831, 5.790220260620117], + [-1.5240105390548706, 0.142318457365036], + [-4.486910820007324, -0.8657888770103455], + [2.630598783493042, -5.174816608428955], + [-0.3393828868865967, 9.625585556030273], + [-0.5935535430908203, 9.799381256103516], + [-3.696594476699829, -2.6991710662841797], + [-5.1813578605651855, -0.5827800631523132], + [-1.46225905418396, 1.1073344945907593], + [7.294227123260498, -4.062233924865723], + [5.916484832763672, -1.471625566482544], + [5.472497463226318, -5.555533409118652], + [2.341850996017456, -4.336118221282959], + [-3.767279863357544, -2.8118526935577393], + [6.870132923126221, -2.172729730606079], + [3.5526485443115234, 1.140246868133545], + [3.4112513065338135, 6.679366111755371], + [5.435603618621826, -4.228672027587891], + [2.4450197219848633, -4.2163496017456055], + [-1.7863919734954834, -0.28087759017944336], + [0.22654587030410767, -3.259936571121216], + [-0.9670410752296448, 10.815189361572266], + [0.383881151676178, -6.334249019622803], + [-1.250935673713684, 11.335888862609863], + [2.8605053424835205, -4.624892234802246], + [2.233076333999634, -4.004605770111084], + [-3.069474220275879, -1.3589184284210205], + [-4.243956565856934, -3.0245237350463867], + [8.50610637664795, -2.5390784740448], + [0.5985971093177795, -8.25931167602539], + [4.170709609985352, 7.295168399810791], + [-0.6752623915672302, 9.656209945678711], + [-3.208033323287964, 3.896868944168091], + [2.398916244506836, 6.484084606170654], + [1.5931671857833862, 4.8923563957214355], + [-2.9127843379974365, -0.833208441734314], + [-3.953132390975952, -3.9922430515289307], + [0.8197899460792542, -4.776422500610352], + [-3.6377713680267334, -1.3121771812438965], + [-3.3129465579986572, -0.6893311142921448], + [-3.928386926651001, -1.5932735204696655], + [-4.413079261779785, -0.7516497373580933], + [1.9430623054504395, 4.998236179351807], + [4.969615459442139, -4.228682518005371], + [6.430124759674072, -1.7662789821624756], + [-4.901452541351318, 6.787814140319824], + [0.33114367723464966, 2.697903871536255], + [-4.157887935638428, -1.4249200820922852], + [2.0048131942749023, -3.365995168685913], + [-4.189019680023193, -2.3860459327697754], + [3.4190690517425537, 6.481376647949219], + [0.6569252610206604, -7.891285419464111], + [2.1278135776519775, -4.712482452392578], + [-4.908263683319092, -4.086928367614746], + [-1.0896553993225098, 1.5655851364135742], + [2.797731399536133, -4.988251686096191], + [0.9521722197532654, -5.261543273925781], + [4.540393829345703, 7.628756523132324], + [-2.6441879272460938, -1.290591835975647], + [-3.920210123062134, -1.0873903036117554], + [-1.1094672679901123, 10.667684555053711], + [3.1060984134674072, -4.821179389953613], + [-2.4464094638824463, -1.5294451713562012], + [0.5630908608436584, -6.9004411697387695], + [0.29755133390426636, -5.095354080200195], + [-1.7060251235961914, 7.931633949279785], + [0.21563053131103516, -5.086089611053467], + [-3.884845018386841, -0.8084554672241211], + [1.2384024858474731, 1.7592169046401978], + [-6.165314197540283, -1.2050752639770508], + [-5.731035232543945, -0.7020055055618286], + [-0.17808949947357178, -1.1902012825012207], + [-1.8677502870559692, 0.16504353284835815], + [-1.9061570167541504, 2.1391537189483643], + [5.8971028327941895, -2.781435251235962], + [-1.9368870258331299, 5.418726921081543], + [0.6544080376625061, -8.042654991149902], + [-4.117307186126709, -3.1774818897247314], + [-0.33605191111564636, -2.8495795726776123], + [2.130119562149048, 5.405221939086914], + [-1.3643165826797485, 11.713289260864258], + [-1.4180318117141724, 11.933349609375], + [-5.192366600036621, -1.706908106803894], + [5.803560733795166, -1.2072056531906128], + [0.014684252440929413, 7.892843723297119], + [-2.945729970932007, -0.834176778793335], + [-0.6673007607460022, 8.748952865600586], + [-1.6927520036697388, 1.969335675239563], + [0.06443481892347336, 8.5698881149292], + [2.742326498031616, -4.580839157104492], + [-4.198321342468262, -1.1874159574508667], + [1.810563087463379, -6.323022365570068], + [2.3163700103759766, -5.964501857757568], + [-1.4690957069396973, 0.6065221428871155], + [2.677051544189453, -4.440727233886719], + [1.935723066329956, -3.520768642425537], + [0.6090853810310364, -8.074087142944336], + [-2.8254358768463135, -0.7991998195648193], + [-0.2802826464176178, -1.477887511253357], + [-2.9725046157836914, 6.111048698425293], + [1.70003342628479, -4.849506378173828], + [-2.1432607173919678, 2.041672945022583], + [-4.5811309814453125, -0.8192862272262573], + [-1.9985885620117188, 1.4398120641708374], + [-0.7256402373313904, 10.308832168579102], + [2.8382678031921387, -4.548344612121582], + [-2.415466547012329, 2.3493995666503906], + [0.30450141429901123, -5.2514967918396], + [-2.2361202239990234, -0.9304330945014954], + [-4.158723831176758, 6.371176719665527], + [-5.0620808601379395, 4.829107284545898], + [-4.661324977874756, -2.155057907104492], + [2.5267508029937744, -5.558650970458984], + [0.8000327944755554, 7.1018524169921875], + [5.810647010803223, -1.2622408866882324], + [-0.9641768336296082, 10.839279174804688], + [3.263817310333252, 5.783675193786621], + [-3.194387674331665, -0.6611434817314148], + [1.9428150653839111, 0.5795633792877197], + [1.031101107597351, 0.010281529277563095], + [2.118727922439575, -5.066486835479736], + [9.73137378692627, -2.8854644298553467], + [2.7795681953430176, -5.325594902038574], + [-4.194553852081299, -0.3246448040008545], + [0.5987618565559387, -4.700465679168701], + [0.01512252539396286, 7.980588912963867], + [-1.0651817321777344, 10.627349853515625], + [-1.3846290111541748, 1.1008703708648682], + [0.37217777967453003, -6.2757086753845215], + [-4.448006629943848, -2.7353384494781494], + [2.0059783458709717, 0.4232233166694641], + [0.8357975482940674, -6.540729999542236], + [-3.641359567642212, -1.9066188335418701], + [0.40329229831695557, -6.174739360809326], + [-2.0429863929748535, -0.9884833693504333], + [1.035743236541748, -4.80458402633667], + [5.086933612823486, 7.9918012619018555], + [-4.290126800537109, -1.7799111604690552], + [-0.6249457001686096, 9.676004409790039], + [4.636820316314697, 7.730221748352051], + [2.2303128242492676, 4.713576316833496], + [-2.404553174972534, -0.3877671957015991], + [2.955768346786499, -6.182372093200684], + [0.6335253715515137, -5.387271881103516], + [2.9299285411834717, -5.165081977844238], + [-3.3787319660186768, -1.0677244663238525], + [-4.370593547821045, 3.895888566970825], + [-4.037139892578125, -2.0697412490844727], + [-1.3190234899520874, 11.82187271118164], + [0.6708845496177673, -5.46534538269043], + [1.79131281375885, 0.9199249744415283], + [8.425454139709473, -2.7111499309539795], + [-2.942563533782959, -1.4767791032791138], + [2.3047258853912354, -3.8091628551483154], + [-5.804543495178223, -4.398930549621582], + [-3.8028907775878906, -3.4042704105377197], + [1.3599257469177246, -4.934691429138184], + [-2.754380226135254, 5.653499603271484], + [6.29166841506958, -1.9750385284423828], + [0.65553218126297, -8.346771240234375], + [2.49645733833313, -4.832253456115723], + [0.4975045919418335, -7.812705993652344], + [-2.886120319366455, -1.5068440437316895], + [-1.2900089025497437, 11.499980926513672], + [-2.980062961578369, -0.9628608226776123], + [-4.740118980407715, -0.7883665561676025], + [-3.0001583099365234, -1.3157321214675903], + [-3.202302932739258, -1.8653662204742432], + [-4.591385364532471, -0.8348290324211121], + [2.170135259628296, -4.077236175537109], + [5.60636568069458, -1.2052035331726074], + [-3.66440486907959, 5.312897682189941], + [2.1484782695770264, 4.140591144561768], + [-5.910600662231445, 7.805230617523193], + [-0.704513669013977, -0.9205412268638611], + [-3.0835459232330322, 7.325360298156738], + [-3.114546298980713, -0.8632792234420776], + [2.945495367050171, -4.903192043304443], + [5.607443332672119, -1.2300795316696167], + [2.4888100624084473, 5.324527263641357], + [0.7997065782546997, -5.038081169128418], + [2.064990997314453, 5.922818183898926], + [-5.143021106719971, 2.1648287773132324], + [-4.113272666931152, -1.3840564489364624], + [-1.5841325521469116, -0.8139774799346924], + [-1.9703240394592285, 1.0260142087936401], + [-1.3755934238433838, 0.2536907196044922], + [-4.490269660949707, 6.694736480712891], + [-4.350591659545898, 7.253326416015625], + [6.166635990142822, -4.491028785705566], + [-3.902217149734497, -1.5227526426315308], + [2.2711236476898193, -5.318924903869629], + [-3.3703346252441406, -0.31068867444992065], + [-1.8183069229125977, 0.10914766788482666], + [-1.9645107984542847, 1.1771745681762695], + [2.6218490600585938, -4.759100914001465], + [-5.25668478012085, -4.0599565505981445], + [0.9875938296318054, 0.5947439670562744], + [7.847108364105225, -2.7011380195617676], + [-2.749307870864868, 5.1699371337890625], + [4.880007266998291, 7.756953239440918], + [-3.021115779876709, -0.770691990852356], + [-4.662868022918701, -0.9715046882629395], + [-3.679539680480957, -1.2630077600479126], + [-4.13746976852417, -1.087100863456726], + [2.8009891510009766, -4.784189224243164], + [-3.3614134788513184, -1.8128641843795776], + [-0.0003072693943977356, 5.270340919494629], + [-0.3372853994369507, 9.441699028015137], + [-4.182721138000488, -1.5349286794662476], + [-2.930750608444214, 1.688765525817871], + [6.84121561050415, -3.1047799587249756], + [-3.3872904777526855, -1.116248607635498], + [-1.125497579574585, 10.646944046020508], + [1.3820841312408447, 4.8710036277771], + [-4.845310688018799, 6.982446670532227], + [6.3702712059021, -2.3998191356658936], + [0.28519248962402344, -6.388941764831543], + [-0.43256229162216187, 0.585627555847168], + [-1.4969701766967773, 1.1911590099334717], + [-5.321231842041016, 5.882421493530273], + [8.88890552520752, -2.9086787700653076], + [-1.3338266611099243, 11.909011840820312], + [1.324460744857788, -3.6955642700195312], + [0.4816346764564514, -7.301828861236572], + [1.8743400573730469, 2.7681386470794678], + [-1.5590612888336182, 2.31274676322937], + [-3.035291910171509, -1.230678915977478], + [-3.032466173171997, -1.2661981582641602], + [-2.8619496822357178, -0.8829859495162964], + [5.87813138961792, -3.652172803878784], + [2.5760200023651123, 5.7890777587890625], + [-0.36044901609420776, 9.060001373291016], + [3.0941824913024902, 6.6993207931518555], + [2.917067050933838, 5.528930187225342], + [-4.1009674072265625, 6.591768264770508], + [2.54316782951355, 4.863208770751953], + [0.8203456997871399, -0.3949176073074341], + [-1.166103482246399, 10.6828031539917], + [3.053759813308716, -4.703630447387695], + [-4.024439811706543, 6.266626834869385], + [-1.5546640157699585, -0.8052048683166504], + [-1.2290207147598267, 0.5878331661224365], + [2.7984044551849365, -4.559471130371094], + [-3.9419174194335938, -1.8607909679412842], + [3.0940306186676025, -4.830985069274902], + [6.931826114654541, -3.9791653156280518], + [-3.3763234615325928, -1.0881670713424683], + [-4.537631511688232, -1.3677008152008057], + [1.9104021787643433, 0.8229732513427734], + [-1.9451727867126465, -0.7933818101882935], + [-0.4196375012397766, 9.211505889892578], + [-3.280766487121582, -1.2465921640396118], + [0.9716933369636536, -6.108939170837402], + [-0.2539193034172058, 8.231908798217773], + [-0.4078925848007202, 9.869011878967285], + [-0.2948572039604187, 9.52663803100586], + [-1.2837448120117188, 11.073566436767578], + [3.4067065715789795, 7.043221473693848], + [2.7893481254577637, -4.770625591278076], + [5.395169258117676, -2.9011998176574707], + [-1.3352175951004028, 11.755314826965332], + [-0.29400691390037537, -4.225174903869629], + [0.4738835096359253, -6.460409164428711], + [-1.808417797088623, 5.8388352394104], + [-2.2520337104797363, -2.4338948726654053], + [2.7729365825653076, -7.01133918762207], + [-2.996387243270874, -2.239428758621216], + [1.047151803970337, -6.43695068359375], + [2.260788679122925, 4.033527851104736], + [0.28042492270469666, -0.5292918086051941], + [0.34584420919418335, -6.5520243644714355], + [5.685062885284424, -1.9565314054489136], + [2.6835222244262695, -4.488451957702637], + [2.3298699855804443, 5.418468475341797], + [2.474212169647217, -4.602940082550049], + [-3.8632113933563232, -2.0100762844085693], + [2.9514236450195312, -5.041166305541992], + [0.531270444393158, -3.4135589599609375], + [1.1650769710540771, -2.2037994861602783], + [3.4659178256988525, 6.687170028686523], + [0.6227548122406006, -6.905961036682129], + [3.180816411972046, 6.225173473358154], + [-1.18142831325531, 10.495131492614746], + [2.753180742263794, -4.453821659088135], + [0.16932108998298645, -4.342381954193115], + [-4.075041770935059, 1.0233932733535767], + [0.8763507008552551, -0.46954187750816345], + [0.7265297770500183, -0.1296035349369049], + [3.85768985748291, 7.138725757598877], + [-1.606184720993042, -1.0517598390579224], + [2.04982590675354, 3.3072214126586914], + [8.95130729675293, -2.8692848682403564], + [-0.2684423327445984, -2.0265865325927734], + [-4.300430774688721, 1.0857864618301392], + [-3.01496958732605, 4.896609306335449], + [8.904309272766113, -2.7388551235198975], + [1.953110694885254, -5.592128276824951], + [-4.090388298034668, -2.260995864868164], + [-3.660202980041504, -2.0057244300842285], + [8.077547073364258, -3.2460267543792725], + [-2.8615734577178955, -0.7832136154174805], + [-3.818718433380127, -3.2068588733673096], + [-2.89745831489563, 3.1279184818267822], + [-0.44295066595077515, 9.478889465332031], + [2.3970577716827393, -4.008296489715576], + [-3.4042811393737793, -2.6496384143829346], + [2.7713310718536377, -4.359617233276367], + [2.012357473373413, 5.616684436798096], + [0.8733271956443787, -0.24042189121246338], + [-3.5946614742279053, -2.1706507205963135], + [-1.0896912813186646, 10.106243133544922], + [-3.4360854625701904, -1.2210277318954468], + [0.9409626126289368, -7.2368927001953125], + [-4.117241382598877, -0.018615785986185074], + [-0.3254011869430542, 7.367124557495117], + [4.9734015464782715, -1.2209019660949707], + [-3.2145369052886963, -1.1487106084823608], + [-4.840040683746338, 6.759856224060059], + [6.006740570068359, -2.5718653202056885], + [-1.3066190481185913, -0.611706554889679], + [-1.4727802276611328, 12.19760513305664], + [5.237142086029053, -0.807546854019165], + [-3.531768321990967, 4.580329418182373], + [-4.395843982696533, -3.6317942142486572], + [9.704514503479004, -2.881526231765747], + [2.7955472469329834, -4.521267890930176], + [-0.949023425579071, 1.0391247272491455], + [-0.4740063548088074, -0.9218709468841553], + [-0.9975667595863342, 10.38637924194336], + [3.4147908687591553, 6.396066188812256], + [5.499426364898682, -1.2610913515090942], + [0.7089674472808838, -6.111133575439453], + [-5.220777988433838, -0.6032609939575195], + [3.207068681716919, 6.882431983947754], + [3.1366875171661377, -3.2670938968658447], + [3.7646520137786865, -3.2892203330993652], + [0.8251244425773621, -7.0510382652282715], + [2.111335039138794, 0.9195499420166016], + [0.18787223100662231, -5.4542436599731445], + [-6.3867926597595215, 8.693920135498047], + [7.998257160186768, -3.128237724304199], + [-1.7506446838378906, 5.079248428344727], + [-4.162518501281738, -4.292049884796143], + [-4.0680742263793945, -2.5267128944396973], + [-1.8835512399673462, 0.5938081741333008], + [4.874718189239502, -2.4374098777770996], + [-3.568535327911377, -1.2191253900527954], + [-1.065542459487915, 10.236034393310547], + [0.4363192915916443, -6.88785457611084], + [0.2975583076477051, -5.3828229904174805], + [0.5586628317832947, -7.422243118286133], + [-3.0401968955993652, 5.032635688781738], + [1.2134953737258911, 0.7379525899887085], + [1.0055603981018066, -5.390622138977051], + [-0.6572462320327759, 10.36526107788086], + [-3.8732593059539795, -1.1584728956222534], + [1.9887373447418213, -3.935056447982788], + [-0.17672395706176758, 8.13034725189209], + [-1.5105955600738525, -0.33121949434280396], + [-0.7171800136566162, 9.204724311828613], + [-1.1672849655151367, 10.738515853881836], + [0.5359516143798828, -7.213736534118652], + [-3.754420042037964, 6.287010192871094], + [-0.6940417289733887, 9.581270217895508], + [9.893502235412598, -3.059213876724243], + [-3.676142930984497, 5.80076789855957], + [2.202152967453003, -4.370809555053711], + [-1.2998871803283691, 11.200008392333984], + [-0.2868611216545105, 9.404374122619629], + [0.7726669907569885, -5.819729804992676], + [-5.034244060516357, -4.2146782875061035], + [9.30894947052002, -2.9112350940704346], + [0.6521774530410767, -7.502884864807129], + [-1.2370949983596802, 11.164844512939453], + [0.01812904328107834, 9.165040969848633], + [-2.062394142150879, 2.3997135162353516], + [1.1640437841415405, 1.2569111585617065], + [-0.8291224241256714, 10.204059600830078], + [7.578434467315674, -2.2601985931396484], + [0.3518834710121155, -5.316183090209961], + [3.1452958583831787, -5.077115058898926], + [2.546436309814453, -4.631648063659668], + [-0.5388147234916687, 9.553177833557129], + [6.6594648361206055, -3.8455426692962646], + [-1.9601714611053467, 1.4296566247940063], + [1.6651561260223389, -4.38700532913208], + [3.236330270767212, -5.741840362548828], + [-1.6412791013717651, 13.207906723022461], + [3.791627883911133, 6.666252613067627], + [1.4978768825531006, 6.137317657470703], + [-3.4135987758636475, -0.8804401755332947], + [-4.6131062507629395, -0.7017337083816528], + [-0.5289033055305481, 9.270444869995117], + [-5.184920787811279, -0.9745018482208252], + [2.0400826930999756, -5.7874555587768555], + [2.814870834350586, -4.396794319152832], + [2.5199155807495117, -4.25851583480835], + [-2.672109842300415, -1.4627434015274048], + [1.955718994140625, 5.449028968811035], + [3.83412504196167, 6.793626308441162], + [-3.8040084838867188, -3.0602171421051025], + [6.475727558135986, -5.093140125274658], + [0.314521849155426, -6.910079002380371], + [-1.5230563879013062, -0.5486882328987122], + [2.717186212539673, 4.455365180969238], + [-4.704411029815674, 6.977449893951416], + [1.547134518623352, -4.610060691833496], + [-3.4656031131744385, -1.163687825202942], + [0.5664083957672119, -7.401360034942627], + [4.76365327835083, 7.661725044250488], + [-3.6788489818573, -1.1000312566757202], + [2.2740495204925537, -4.930080413818359], + [2.1847550868988037, 5.693878173828125], + [-1.343326449394226, -1.6886790990829468], + [-1.016552448272705, 11.078577041625977], + [-0.2121741771697998, 9.23974323272705], + [2.8718457221984863, -4.782853603363037], + [0.4373170733451843, -5.054864406585693], + [-1.4470601081848145, -0.6103824377059937], + [0.580756664276123, -7.456623554229736], + [-4.725921154022217, -4.751477241516113], + [-5.323466777801514, 6.246921062469482], + [-5.850833415985107, 1.9360612630844116], + [0.25059035420417786, -4.533511161804199], + [-1.0586217641830444, 10.781846046447754], + [-2.0820765495300293, 0.1342024803161621], + [2.9580087661743164, -4.69769811630249], + [1.8375370502471924, 2.3318865299224854], + [0.5260027050971985, -6.2208147048950195], + [0.012262336909770966, 8.12309741973877], + [-1.6998813152313232, 2.1138951778411865], + [1.4355629682540894, -5.0631208419799805], + [2.7479746341705322, -4.557991027832031], + [-1.9529317617416382, 2.4753780364990234], + [-3.751612424850464, -1.13058602809906], + [3.4077682495117188, 6.579225540161133], + [-1.918200969696045, 1.5291637182235718], + [0.8237322568893433, -6.793071269989014], + [0.13696008920669556, -6.476806640625], + [-4.866857528686523, 5.839016914367676], + [8.353572845458984, -2.4713263511657715], + [0.33683961629867554, -5.496251583099365], + [1.4306740760803223, 0.829470157623291], + [-2.7092831134796143, -0.8493584394454956], + [-1.177528738975525, 11.119321823120117], + [-0.8219320774078369, -3.76753830909729], + [2.7148163318634033, -4.584308624267578], + [2.857978105545044, 6.28416633605957], + [2.709333896636963, -3.8147225379943848], + [-0.4900657534599304, 10.576648712158203], + [6.814037799835205, -2.1173558235168457], + [1.7524642944335938, 2.4230782985687256], + [-1.9113893508911133, 2.335653781890869], + [5.892680644989014, 8.695333480834961], + [-4.346927642822266, -2.2217090129852295], + [0.5018316507339478, -7.027435302734375], + [2.2296669483184814, 4.207080841064453], + [0.5922831296920776, -7.878989219665527], + [-1.218042254447937, 11.381705284118652], + [-5.496006011962891, -0.8789136409759521], + [-0.9683900475502014, 9.879495620727539], + [-0.38047510385513306, 9.751301765441895], + [-0.7643954157829285, -1.406378149986267], + [-1.910088300704956, -0.6926093101501465], + [1.0643138885498047, 0.402737557888031], + [-4.031890869140625, 0.5869063138961792], + [-3.4401514530181885, -0.6848388314247131], + [2.206432819366455, -5.204588413238525], + [-0.4100039005279541, 9.202491760253906], + [1.4893860816955566, 5.937309265136719], + [1.4447956085205078, 6.868025779724121], + [-0.9447446465492249, 10.411311149597168], + [2.7537195682525635, -4.287842750549316], + [2.4652788639068604, -4.413699626922607], + [2.9796602725982666, 6.3572540283203125], + [1.4641408920288086, 2.009183168411255], + [-0.5892550349235535, 0.8281572461128235], + [-4.783191204071045, 6.845963001251221], + [2.3701279163360596, 6.321355819702148], + [2.5393502712249756, -4.524839401245117], + [7.975614070892334, -2.3462440967559814], + [0.18385794758796692, 4.425317764282227], + [-0.2129228115081787, -1.1283057928085327], + [-3.7553341388702393, -1.5712716579437256], + [-2.9927141666412354, -3.082319974899292], + [-0.6134560108184814, -0.8819279074668884], + [-1.2311111688613892, 10.857824325561523], + [-4.398369789123535, 6.386720657348633], + [-1.2426196336746216, 11.40971851348877], + [6.395978927612305, -3.8795998096466064], + [-3.393768072128296, -2.3662185668945312], + [-0.6438661217689514, 9.547531127929688], + [-2.1184542179107666, 2.160069227218628], + [-1.9116227626800537, 1.4266704320907593], + [-1.9481656551361084, 0.5124437808990479], + [-1.7060222625732422, -2.9979968070983887], + [-0.2149510681629181, -1.02998948097229], + [-3.1657049655914307, -0.8095744252204895], + [0.4104888439178467, 8.140213012695312], + [-0.16890385746955872, 4.992067337036133], + [1.8944015502929688, 5.455487251281738], + [2.140925645828247, 4.382128715515137], + [-4.909343242645264, 4.940639495849609], + [0.6989645957946777, -7.809728622436523], + [1.2714385986328125, -6.079345703125], + [-0.9611864686012268, 10.257364273071289], + [-4.210821628570557, 3.4625155925750732], + [-1.7881722450256348, -0.36001747846603394], + [0.8518083691596985, -7.129006385803223], + [0.5126307606697083, -5.05296516418457], + [-0.7333787083625793, 10.450712203979492], + [-0.731387197971344, -0.911238431930542], + [-5.101511478424072, 5.623596668243408], + [-1.4730210304260254, 11.721267700195312], + [-0.18345770239830017, -1.0118356943130493], + [-3.8719348907470703, -1.5830316543579102], + [-3.192223310470581, 5.276253700256348], + [8.159958839416504, -2.39276123046875], + [-0.11459321528673172, 8.557709693908691], + [-3.23126220703125, -1.3670798540115356], + [2.6166412830352783, -4.440239429473877], + [-2.188218116760254, -0.9014549255371094], + [1.9503204822540283, 4.083128452301025], + [-3.558610677719116, -0.9563651084899902], + [-5.445979595184326, 5.452266693115234], + [-2.342945098876953, 2.256525754928589], + [0.0876011773943901, -4.903378963470459], + [-4.492232799530029, -1.1907963752746582], + [-0.8136610388755798, 9.937381744384766], + [-3.469285249710083, -1.3871749639511108], + [-3.9327657222747803, -1.4828683137893677], + [0.6156091094017029, -5.973188400268555], + [-4.991913318634033, 5.139769554138184], + [-4.28814172744751, -0.5729439854621887], + [-4.833872318267822, 5.080765724182129], + [8.070658683776855, -2.651426076889038], + [0.9589011073112488, 4.11774206161499], + [-2.93452525138855, -0.06918066740036011], + [6.184021472930908, -1.6585378646850586], + [-0.4603082537651062, 10.493438720703125], + [-4.398281097412109, 4.81348180770874], + [2.3554465770721436, -4.6599040031433105], + [-5.155985355377197, -1.1344879865646362], + [-0.3264325261116028, 9.08447265625], + [-0.1904028058052063, 9.388188362121582], + [-4.0598530769348145, -0.7170589566230774], + [0.12361835688352585, -4.718470573425293], + [-3.930528163909912, -2.5956804752349854], + [-1.6261610984802246, 2.048475980758667], + [0.10060318559408188, -4.632171630859375], + [-1.5483952760696411, 2.3520309925079346], + [5.950173377990723, -1.3651291131973267], + [1.938284158706665, 3.6122078895568848], + [2.811677932739258, -4.450711250305176], + [2.6575396060943604, 4.895243167877197], + [2.62397837638855, -4.974251747131348], + [2.2182199954986572, 4.655071258544922], + [-1.2132469415664673, -1.0762851238250732], + [7.586907386779785, -2.161993980407715], + [0.9939973950386047, -7.077917098999023], + [-5.18278694152832, 7.364174842834473], + [4.605750560760498, -3.97320556640625], + [-5.1283674240112305, -4.762553691864014], + [3.8515496253967285, 7.190337181091309], + [2.4938299655914307, 3.4639086723327637], + [-3.5789151191711426, -0.9808368682861328], + [2.5386624336242676, -4.792411804199219], + [0.7208660840988159, -6.310317516326904], + [-4.521725654602051, 5.916170120239258], + [2.683626890182495, -4.594735622406006], + [1.9703595638275146, 5.68412971496582], + [-2.6320998668670654, 2.5849428176879883], + [-0.02584267407655716, -4.773060321807861], + [0.3393397927284241, -3.808358669281006], + [-0.8967816233634949, 10.054293632507324], + [-2.105487585067749, 1.6172764301300049], + [-5.411093711853027, 5.51801872253418], + [-1.4773674011230469, 12.330220222473145], + [0.828472375869751, 0.03722425177693367], + [-4.025866508483887, 6.179142951965332], + [-0.2640411853790283, -2.551661968231201], + [0.49839866161346436, -0.5860217213630676], + [2.568713903427124, -4.369894981384277], + [-1.7204715013504028, 1.0165365934371948], + [-0.33014756441116333, -1.6534737348556519], + [0.22834497690200806, -6.392526149749756], + [1.9099698066711426, 5.375038146972656], + [5.453045845031738, -1.3788418769836426], + [-2.5497689247131348, 2.9797699451446533], + [1.8502323627471924, 6.120519638061523], + [4.100152492523193, -4.221966743469238], + [7.09384822845459, -3.4192516803741455], + [6.879848480224609, -4.150105953216553], + [-3.2658655643463135, -0.3435400724411011], + [-4.303101539611816, -2.616071939468384], + [0.2438066601753235, -0.5507373809814453], + [8.048867225646973, -2.331387758255005], + [1.3794615268707275, -5.2042951583862305], + [-1.7384183406829834, 1.4506440162658691], + [0.5557956099510193, -0.061094556003808975], + [-2.117650270462036, -0.707156240940094], + [-4.796299934387207, -0.7699220180511475], + [-2.011828899383545, 0.7282381653785706], + [-3.911891222000122, 6.279101371765137], + [-4.3757171630859375, -0.800536036491394], + [-1.1283482313156128, -0.5945851802825928], + [-0.46896177530288696, 9.874040603637695], + [7.02169942855835, -2.3959109783172607], + [1.6044867038726807, -4.082198143005371], + [-1.2599953413009644, 11.872064590454102], + [-4.530176639556885, -3.467228651046753], + [-3.5411314964294434, -1.2695062160491943], + [1.532397985458374, 0.09725618362426758], + [3.3547146320343018, 6.685893535614014], + [-3.0037708282470703, -0.974564790725708], + [8.525406837463379, -2.7116076946258545], + [-0.25427621603012085, 8.546823501586914], + [-4.438819408416748, -0.919144868850708], + [-4.268558502197266, 5.419358730316162], + [-4.422125339508057, -0.6337342262268066], + [2.3713269233703613, 5.942034721374512], + [1.7731945514678955, 2.242959976196289], + [0.20936056971549988, -4.744184970855713], + [7.350822448730469, -2.693230152130127], + [-2.039294481277466, 0.6030815839767456], + [1.9971983432769775, -4.102326393127441], + [0.6620740294456482, -7.800091743469238], + [2.5905463695526123, -4.543046951293945], + [6.930813312530518, -1.856844186782837], + [-0.814970076084137, 10.173070907592773], + [0.14022743701934814, -0.8268213272094727], + [-3.962939977645874, -2.717329263687134], + [-2.118823289871216, -0.7627155780792236], + [-0.431682288646698, -1.5432077646255493], + [0.738224446773529, -8.881950378417969], + [1.8591073751449585, 4.8509368896484375], + [1.2316807508468628, 3.3091771602630615], + [-1.5442209243774414, 13.087728500366211], + [2.4385547637939453, 4.308635711669922], + [-4.760298252105713, 1.8021535873413086], + [0.34746575355529785, -5.593496322631836], + [-1.200682282447815, -1.1372219324111938], + [0.5662508606910706, -7.6190948486328125], + [0.33220893144607544, -6.327363014221191], + [-5.653072834014893, 3.2907662391662598], + [0.8936219811439514, -5.5576019287109375], + [1.953618049621582, 5.580170154571533], + [-3.807724714279175, -1.8029855489730835], + [1.72312593460083, 3.6521084308624268], + [-5.579268932342529, 5.075532913208008], + [1.8613431453704834, -5.2641825675964355], + [-3.584848642349243, -0.24924683570861816], + [-3.63757061958313, 4.9351325035095215], + [-4.218142986297607, -2.8142549991607666], + [-3.458263874053955, -4.949514389038086], + [0.3381255269050598, -6.185307502746582], + [2.3663294315338135, 4.354687690734863], + [1.8421735763549805, 3.6349854469299316], + [-1.9681167602539062, 1.1172248125076294], + [-3.407979726791382, -1.604006290435791], + [0.20549583435058594, -6.136654853820801], + [7.462234973907471, -3.0323188304901123], + [8.519498825073242, -2.786273956298828], + [2.3575456142425537, 6.230262756347656], + [-0.2622041702270508, 9.392997741699219], + [0.23022305965423584, -6.542984962463379], + [-4.771055221557617, 6.222817420959473], + [3.1887710094451904, 6.497930526733398], + [-2.0460360050201416, -0.8384256362915039], + [-1.235592007637024, -0.6139788627624512], + [9.53250789642334, -2.8912928104400635], + [-1.125046730041504, -0.755924642086029], + [5.371385097503662, 8.231687545776367], + [3.0458486080169678, 6.90317440032959], + [1.659996747970581, -4.535678386688232], + [-0.8325837254524231, -1.2610825300216675], + [-1.0748316049575806, 8.83761215209961], + [0.44578689336776733, -7.338298797607422], + [-1.3238133192062378, 11.436504364013672], + [-0.6562020182609558, 9.913585662841797], + [-1.9990397691726685, 2.366276264190674], + [-2.016990900039673, 0.4720531105995178], + [0.3305683732032776, -4.722131729125977], + [-3.7389252185821533, -1.1867960691452026], + [0.6980488896369934, -8.484121322631836], + [-0.03763953596353531, -4.082477569580078], + [-2.578019380569458, 2.151038885116577], + [3.9851438999176025, 7.231561183929443], + [-4.07572603225708, 5.781538963317871], + [0.3211532533168793, -5.138113021850586], + [-0.4743822515010834, 5.76626443862915], + [2.814591884613037, -4.645479202270508], + [-0.8675897717475891, -0.9757348895072937], + [0.6855592131614685, -4.598053932189941], + [0.8195852637290955, -8.060831069946289], + [8.888824462890625, -2.7791736125946045], + [4.453326225280762, 7.62213134765625], + [2.5220673084259033, 6.190065383911133], + [3.103083610534668, 6.655714988708496], + [1.4898228645324707, -6.072475433349609], + [0.3787517845630646, -4.154665946960449], + [-3.2251813411712646, 5.596437454223633], + [-1.5838950872421265, 12.303790092468262], + [2.7827234268188477, -4.905898094177246], + [-1.2066315412521362, 11.003636360168457], + [-1.7070121765136719, -0.4322901964187622], + [-0.04095674306154251, -5.106686592102051], + [0.8725761771202087, 5.3091583251953125], + [1.9626543521881104, -3.8797285556793213], + [-3.5987727642059326, -1.4625216722488403], + [1.8353461027145386, 0.38570570945739746], + [4.203678131103516, 7.2052507400512695], + [-3.642544984817505, -3.1297264099121094], + [-2.6671016216278076, -1.082939624786377], + [6.939036846160889, -2.9672510623931885], + [-0.3989776372909546, 8.824745178222656], + [0.7006633877754211, -7.831200122833252], + [-2.078314781188965, 2.085204601287842], + [1.5838439464569092, 1.9598053693771362], + [1.4781349897384644, -4.492924690246582], + [-3.5211918354034424, -0.6578854322433472], + [0.5759102702140808, -7.56320333480835], + [6.453328609466553, -4.916849136352539], + [2.4650707244873047, 5.42526912689209], + [1.2222026586532593, -0.11002159118652344], + [-0.3002995252609253, -1.7672739028930664], + [-3.8433988094329834, 4.608226299285889], + [0.47873443365097046, -6.329383850097656], + [-4.088138103485107, -2.615825653076172], + [7.763139247894287, -2.210338592529297], + [-3.9086217880249023, 4.267303943634033], + [-0.3799899220466614, 10.425066947937012], + [2.6643214225769043, -4.325658798217773], + [-4.245948314666748, 4.379139423370361], + [-0.02992645651102066, 2.0051076412200928], + [-3.3196022510528564, -2.4147770404815674], + [8.06846809387207, -2.9568967819213867], + [1.0899834632873535, -5.564525604248047], + [-4.463008403778076, -3.608748197555542], + [-0.9662798047065735, 0.7434912323951721], + [2.3692967891693115, -4.303651332855225], + [1.2795168161392212, -8.015422821044922], + [5.815046310424805, -1.2109354734420776], + [2.884514808654785, -4.479404449462891], + [5.667283535003662, -1.9746946096420288], + [-1.2494559288024902, 11.521544456481934], + [2.465287446975708, 5.378674030303955], + [-3.135002851486206, -1.1097848415374756], + [-0.8187465071678162, 7.210078239440918], + [0.5765662789344788, -8.21918773651123], + [-4.983941078186035, -1.5205532312393188], + [-5.13921594619751, 3.003899097442627], + [-3.338437080383301, 5.464112281799316], + [3.1550915241241455, -4.924039840698242], + [-4.947352886199951, 5.626344680786133], + [2.6846349239349365, -4.4160356521606445], + [8.48485279083252, -2.5789387226104736], + [1.9484353065490723, -4.9035868644714355], + [2.364088296890259, 5.92557430267334], + [0.6194899678230286, -7.8554463386535645], + [0.5659119486808777, -8.429471969604492], + [2.6363942623138428, -3.719907760620117], + [0.8420374989509583, -0.3587310314178467], + [0.36781418323516846, -6.421828269958496], + [-4.555049896240234, 7.2438178062438965], + [-0.3881770074367523, -0.8639370203018188], + [-1.7697243690490723, 0.667250394821167], + [3.8945655822753906, 7.059466361999512], + [1.4114948511123657, -6.285472869873047], + [-4.349643230438232, -5.222435474395752], + [2.847639560699463, -4.444345474243164], + [-3.2953083515167236, -1.7343705892562866], + [-0.8523649573326111, 10.261473655700684], + [8.47651195526123, -3.3359334468841553], + [0.7469542622566223, -9.404303550720215], + [-1.2787624597549438, 10.931707382202148], + [-3.7713356018066406, 5.246935844421387], + [-4.951047420501709, 4.354208469390869], + [2.6862339973449707, -5.959826946258545], + [-5.4147562980651855, 6.876223564147949], + [6.972448825836182, -3.82392954826355], + [1.9596381187438965, 2.9874510765075684], + [0.832364022731781, -7.361027240753174], + [-1.5355777740478516, 1.2492280006408691], + [-4.574869155883789, 4.9242072105407715], + [5.389777660369873, 8.336525917053223], + [1.8599543571472168, -4.5385589599609375], + [7.519776821136475, -2.253462791442871], + [1.816983938217163, 2.4794976711273193], + [0.1461588442325592, -1.3758529424667358], + [0.7051342129707336, -6.844923496246338], + [-5.4839091300964355, 7.3322014808654785], + [8.872037887573242, -2.6706717014312744], + [1.6773648262023926, 0.2808622717857361], + [7.349050521850586, -2.136770486831665], + [-3.3502209186553955, -0.9891517162322998], + [9.603123664855957, -3.0222456455230713], + [0.23993757367134094, -0.7632303237915039], + [-3.272252321243286, 0.4737567901611328], + [-1.9355573654174805, 0.49682551622390747], + [0.7739911675453186, -7.500598907470703], + [6.724318027496338, -2.738546848297119], + [-1.8335176706314087, 1.4607607126235962], + [-0.2874247431755066, 7.844577312469482], + [-4.045296669006348, -0.9202166795730591], + [0.2638610601425171, -4.511078357696533], + [0.45250624418258667, -6.135749816894531], + [2.0468406677246094, 3.9412896633148193], + [-3.3862364292144775, -1.1992722749710083], + [0.7926262021064758, -5.813708305358887], + [-1.214504361152649, 11.29209041595459], + [7.343571186065674, -2.423638105392456], + [-1.5390065908432007, 2.7670857906341553], + [0.279089093208313, 5.923236846923828], + [-4.192901611328125, 4.93685245513916], + [8.435027122497559, -3.0751376152038574], + [3.5523464679718018, -4.392969131469727], + [-2.6927649974823, -1.6949189901351929], + [6.344851016998291, -3.4253101348876953], + [1.917473316192627, 0.4957566261291504], + [-0.9082619547843933, 10.554147720336914], + [0.16020941734313965, 0.2706950008869171], + [-2.081176280975342, 0.2882649898529053], + [2.419623851776123, 3.8882641792297363], + [-1.1631351709365845, 10.796876907348633], + [0.3165128827095032, -5.527503967285156], + [0.6000868678092957, -6.49901008605957], + [-2.8875608444213867, -1.7153956890106201], + [2.6739842891693115, 6.2634358406066895], + [0.6532895565032959, -7.573041915893555], + [-4.892470836639404, 5.787217617034912], + [-3.5248982906341553, -0.9066698551177979], + [-3.314901113510132, -1.449843406677246], + [1.9381475448608398, -3.706542730331421], + [2.893634557723999, -4.796104431152344], + [0.8014721870422363, -7.41279411315918], + [2.9459564685821533, 6.138236045837402], + [2.2132515907287598, -5.667604446411133], + [-3.7385880947113037, -2.2935221195220947], + [2.176313638687134, 0.8494690656661987], + [3.050626277923584, -4.982235908508301], + [-0.8807329535484314, 0.8273931741714478], + [0.6743646860122681, -5.282616138458252], + [4.903939723968506, 7.84297513961792], + [-3.2414891719818115, -3.2856810092926025], + [8.761248588562012, -2.8844120502471924], + [-3.027968168258667, 1.9176247119903564], + [-0.3340145945549011, -0.8450592756271362], + [-3.7151660919189453, -2.707136392593384], + [2.442504644393921, 6.505441188812256], + [6.190000057220459, -4.753419876098633], + [1.927445650100708, 6.27492618560791], + [0.36168357729911804, -0.5900133848190308], + [0.9055656790733337, -0.43904560804367065], + [-5.277096271514893, 7.023256778717041], + [-1.4482403993606567, 12.327109336853027], + [0.9573920369148254, -6.620744228363037], + [-3.878251314163208, -2.881181478500366], + [6.5813727378845215, -3.524209499359131], + [2.80167293548584, -4.442444801330566], + [8.506331443786621, -2.7394158840179443], + [-2.9833414554595947, 0.045070525258779526], + [-2.297297716140747, -2.1017158031463623], + [8.712006568908691, -2.650886297225952], + [-4.540419101715088, -1.053893804550171], + [2.83115291595459, -4.795447826385498], + [-1.2188729047775269, 11.40212631225586], + [2.455427408218384, 5.710987567901611], + [-3.5426650047302246, -0.6319520473480225], + [-1.848306655883789, 2.258836269378662], + [-3.823455572128296, -1.8580710887908936], + [1.7074276208877563, 5.692068099975586], + [-0.061462052166461945, -0.8168216943740845], + [0.6748650074005127, -7.460876941680908], + [1.57261323928833, 2.0300662517547607], + [0.6861925721168518, -4.652427673339844], + [1.7806816101074219, 1.3647980690002441], + [1.8991870880126953, -4.768448829650879], + [-2.098494529724121, 0.4666520357131958], + [-1.9797484874725342, 1.063718557357788], + [2.7385833263397217, -4.7971954345703125], + [-1.0366414785385132, 10.732406616210938], + [0.33800578117370605, -7.119703769683838], + [0.9832437634468079, -5.297246932983398], + [5.626368045806885, -2.5981390476226807], + [1.3464632034301758, -5.576955318450928], + [0.26914507150650024, -5.291183948516846], + [-3.7584917545318604, -1.5832163095474243], + [2.680494546890259, -4.824098587036133], + [0.965701162815094, -5.840314865112305], + [-1.9735803604125977, -3.4397099018096924], + [4.192886829376221, -5.6656317710876465], + [-3.538419485092163, -1.834079384803772], + [2.169093132019043, -4.323240756988525], + [0.6136099100112915, -5.296031475067139], + [1.5237598419189453, 1.257718801498413], + [0.7141860127449036, -6.800628662109375], + [8.436995506286621, -2.993180513381958], + [-1.2685121297836304, -0.10685449838638306], + [-0.5269096493721008, -0.8981043100357056], + [-0.7307192087173462, -1.2214492559432983], + [-3.34582257270813, 4.89156436920166], + [7.196930408477783, -2.4812281131744385], + [1.6543501615524292, 2.0234673023223877], + [-1.0288658142089844, -0.9108080863952637], + [-1.7359713315963745, -2.3156802654266357], + [-3.950805902481079, -1.5294147729873657], + [-0.5353947281837463, 9.645347595214844], + [-3.7886722087860107, -1.4564634561538696], + [1.516546368598938, 0.0554954968392849], + [0.6046345829963684, -8.31605339050293], + [0.6481973528862, -7.118731498718262], + [-5.219512939453125, 7.235875606536865], + [5.458786487579346, -5.545107841491699], + [1.9635875225067139, 5.423831939697266], + [-3.4977924823760986, -1.2953805923461914], + [2.928187131881714, -4.670848369598389], + [0.4059825539588928, -7.040585994720459], + [-3.5961368083953857, -2.559065580368042], + [2.8645899295806885, -4.796350479125977], + [3.618887186050415, 6.814442157745361], + [-0.44252926111221313, -1.0900537967681885], + [2.0778770446777344, -4.2445478439331055], + [-3.890660047531128, -1.3793307542800903], + [-3.3258228302001953, -1.919062614440918], + [7.880173683166504, -2.506840944290161], + [-1.9831862449645996, 1.5292227268218994], + [1.8589073419570923, 4.977216720581055], + [-1.9500800371170044, 2.5597801208496094], + [-0.808737576007843, 10.034908294677734], + [0.42160022258758545, -6.7209930419921875], + [-0.45748865604400635, 5.638726234436035], + [-0.275984525680542, 8.801233291625977], + [-0.15310418605804443, 8.04715633392334], + [-0.6329490542411804, 9.584802627563477], + [0.6800845861434937, -0.26010769605636597], + [-1.6470551490783691, 1.137399673461914], + [8.328682899475098, -2.504565954208374], + [2.1665704250335693, 5.961419582366943], + [-3.08005952835083, 5.1497907638549805], + [0.5272572040557861, -7.979156017303467], + [1.1213700771331787, 6.533475399017334], + [1.9150038957595825, 0.6981647610664368], + [-4.897241592407227, 6.063047409057617], + [-0.8973329663276672, 10.162050247192383], + [-0.6903167366981506, -1.9181007146835327], + [-1.451556921005249, 1.4555909633636475], + [-3.8227365016937256, -1.0922712087631226], + [3.8858535289764404, -4.238219261169434], + [-4.423550605773926, -2.3947503566741943], + [7.894729137420654, -3.2533681392669678], + [0.6142272353172302, -7.471860885620117], + [-5.10501766204834, -1.10646653175354], + [-0.5258231163024902, -0.9874534606933594], + [-5.838808059692383, -0.7500979900360107], + [2.264249324798584, 0.6981863975524902], + [-1.886960506439209, 2.118680000305176], + [2.3798882961273193, 4.865998268127441], + [-2.8697316646575928, -1.0144158601760864], + [0.8653705716133118, 0.12810635566711426], + [-3.0904054641723633, -1.1433953046798706], + [8.410581588745117, -2.6645095348358154], + [0.36597317457199097, -6.4319586753845215], + [-2.7258570194244385, -2.1817288398742676], + [7.255998611450195, -3.3259427547454834], + [-0.7566117644309998, 10.5374755859375], + [2.845262289047241, -4.753665924072266], + [-1.7505407333374023, 1.001145839691162], + [-4.133255958557129, 0.6666967868804932], + [-3.7635114192962646, 4.465884208679199], + [1.2248425483703613, -6.2665815353393555], + [1.8581435680389404, 5.557634353637695], + [-2.1136977672576904, -0.8825613260269165], + [1.474755883216858, 0.09292171895503998], + [-4.17900276184082, -1.6290706396102905], + [-0.2038642168045044, 8.587138175964355], + [0.7983219027519226, -9.971675872802734], + [-6.307848930358887, 8.707691192626953], + [-0.5289110541343689, 9.874144554138184], + [1.4672586917877197, -5.285157203674316], + [2.8397789001464844, -4.641029357910156], + [-3.127222776412964, 5.976099967956543], + [8.174935340881348, -2.904905319213867], + [-4.374997138977051, 5.924423694610596], + [-3.747454881668091, 6.031229019165039], + [0.2019433081150055, -4.363550662994385], + [-4.011109352111816, -1.5844613313674927], + [6.1037211418151855, -1.6355358362197876], + [-0.1476844847202301, -1.0201737880706787], + [0.6836139559745789, -8.914244651794434], + [-1.0571264028549194, 10.15575122833252], + [-0.3414032459259033, 8.862462997436523], + [-0.48517340421676636, 7.765900611877441], + [-5.406714916229248, 2.166684865951538], + [-2.9839184284210205, 5.195759296417236], + [2.2880215644836426, -3.6492197513580322], + [-4.227072238922119, -2.028578519821167], + [-1.3363603353500366, -0.9249482154846191], + [6.685561656951904, -3.120911121368408], + [-3.814465045928955, -1.9554616212844849], + [-2.4846346378326416, -2.0651094913482666], + [4.306288242340088, 7.172189712524414], + [0.11622893065214157, -5.284764289855957], + [-3.4941399097442627, -2.7337443828582764], + [-5.590931415557861, 4.823756694793701], + [-1.745377540588379, 0.7297070622444153], + [-4.427486896514893, -1.2383874654769897], + [-4.258502006530762, -1.3496423959732056], + [3.3599660396575928, -5.1655497550964355], + [1.061161756515503, -7.772548675537109], + [-0.7720925211906433, 10.202156066894531], + [-5.323992729187012, -5.402657508850098], + [6.571882247924805, -3.207515001296997], + [-3.7507455348968506, -2.3641507625579834], + [1.492032527923584, -5.061192035675049], + [4.488624572753906, 7.427433967590332], + [0.6165890693664551, -8.216571807861328], + [-5.702023029327393, 7.19415283203125], + [-0.022081442177295685, -4.538777828216553], + [1.1385369300842285, -0.38386449217796326], + [-4.898372173309326, -4.509077072143555], + [3.4423513412475586, 6.7274980545043945], + [-5.019794940948486, -1.2009142637252808], + [1.0166290998458862, -4.65576171875], + [8.78415584564209, -3.1384623050689697], + [-4.41212797164917, -2.1442441940307617], + [2.9376065731048584, 6.704803943634033], + [-1.1088931560516357, 10.323959350585938], + [-4.959909915924072, 7.9132280349731445], + [-4.9296441078186035, -3.75061297416687], + [-5.8989691734313965, 7.75154972076416], + [1.7767611742019653, 6.900129318237305], + [-1.9229533672332764, 2.6915547847747803], + [-0.0467170849442482, -1.542292594909668], + [-0.32811468839645386, 9.190553665161133], + [0.9969332814216614, -6.426855087280273], + [0.7344239354133606, -0.5613055229187012], + [0.6819123029708862, -7.9212822914123535], + [-6.451776027679443, 8.686046600341797], + [6.027789115905762, -2.431077718734741], + [2.7266056537628174, -4.652240753173828], + [1.3552751541137695, -5.4987592697143555], + [7.593612194061279, -4.70132303237915], + [-1.2667527198791504, 11.100696563720703], + [-1.276390790939331, 11.135801315307617], + [-5.417964458465576, -4.082186222076416], + [0.6466720104217529, -8.232416152954102], + [0.6537244319915771, -8.321944236755371], + [3.0991034507751465, -4.902808666229248], + [-3.473066806793213, 3.9985992908477783], + [-0.9202015995979309, 8.565923690795898], + [0.0157313272356987, 0.4138486683368683], + [-3.6447346210479736, 5.734219074249268], + [-3.2623016834259033, -2.4690585136413574], + [0.5618147253990173, -6.872045993804932], + [-3.8188774585723877, -2.0271549224853516], + [-3.319627046585083, -1.7508739233016968], + [-0.0630984678864479, -1.1883233785629272], + [0.4427306056022644, -6.281500339508057], + [5.046236515045166, 7.969283103942871], + [3.856644868850708, 7.044526100158691], + [0.6389675140380859, -8.432855606079102], + [-1.4674495458602905, 12.504682540893555], + [-4.4476847648620605, -1.4094825983047485], + [6.293185710906982, -1.196590781211853], + [2.900360345840454, -4.824409484863281], + [-4.4268317222595215, -0.8360616564750671], + [-2.0184717178344727, 2.1497693061828613], + [3.2373921871185303, -4.715287208557129], + [5.0340752601623535, -3.281895637512207], + [-3.058678388595581, 5.139727592468262], + [2.5846364498138428, -5.628085136413574], + [5.927500247955322, -1.5705257654190063], + [0.6944595575332642, -6.021983623504639], + [-0.8223788142204285, 9.975732803344727], + [-2.246236562728882, 1.9747141599655151], + [-1.1274019479751587, 11.279912948608398], + [1.7095787525177002, 5.911794662475586], + [-0.6085658669471741, -0.3399035632610321], + [6.062009334564209, -2.4169459342956543], + [-4.260420799255371, -1.436485767364502], + [-3.230402708053589, -0.6538029313087463], + [2.2623894214630127, -7.41341495513916], + [-3.124004602432251, -1.6786020994186401], + [6.89429235458374, -3.7700788974761963], + [2.887817621231079, -4.882303237915039], + [-1.3028528690338135, 0.18672698736190796], + [-1.2597413063049316, 1.3326373100280762], + [-0.7373603582382202, 10.338984489440918], + [2.5847465991973877, 5.951798439025879], + [-0.23441743850708008, -2.8743603229522705], + [-3.3924219608306885, -1.4066251516342163], + [7.30593204498291, -2.28631329536438], + [-3.782271385192871, -1.3475852012634277], + [-0.15411561727523804, 7.99812126159668], + [0.7328586578369141, -4.732278823852539], + [-1.090152382850647, 0.3199581503868103], + [-0.7768293023109436, 10.097509384155273], + [2.5119762420654297, -4.255549430847168], + [1.8415696620941162, 1.0304927825927734], + [0.5950487852096558, -7.385180950164795], + [6.291471004486084, -1.169127345085144], + [0.07904192060232162, -4.409191131591797], + [5.052191734313965, -1.3715633153915405], + [3.0750467777252197, -4.0290093421936035], + [2.8315250873565674, -4.833437919616699], + [2.36842942237854, 4.953589916229248], + [-1.7495555877685547, 1.552147388458252], + [-6.128592014312744, -1.100134253501892], + [-1.9756333827972412, 1.6350992918014526], + [-1.1507844924926758, 11.072172164916992], + [0.733031690120697, -4.523768901824951], + [9.59909725189209, -2.8950464725494385], + [2.694171667098999, -6.0637006759643555], + [6.1254658699035645, -1.1979581117630005], + [-3.3211801052093506, -1.0390480756759644], + [2.474424123764038, 5.8203630447387695], + [-2.196847915649414, 0.8956982493400574], + [0.31924813985824585, -4.81639289855957], + [-3.289646863937378, -0.659911036491394], + [-4.070530414581299, -1.4394618272781372], + [0.6961193084716797, -8.716699600219727], + [-4.009995460510254, -1.6563059091567993], + [6.30445671081543, -2.7037439346313477], + [-1.7336674928665161, 1.949829339981079], + [-4.256364822387695, -1.654673457145691], + [-4.1732497215271, -3.0821621417999268], + [1.1069717407226562, -5.639628887176514], + [2.174046754837036, 6.141946315765381], + [-3.9078099727630615, -2.2522470951080322], + [-1.378490686416626, 11.266027450561523], + [1.1629232168197632, -5.467769622802734], + [1.1153596639633179, 4.273691177368164], + [-0.7236369252204895, -0.03205399587750435], + [0.30621781945228577, -5.251237869262695], + [7.970714092254639, -2.6244752407073975], + [0.6684151291847229, -8.809392929077148], + [0.694099485874176, -8.414154052734375], + [0.16576135158538818, -5.799180030822754], + [0.6429916024208069, -6.3803229331970215], + [2.782468557357788, -5.016536712646484], + [-2.5792298316955566, -0.4634965658187866], + [-2.129971981048584, -0.7733531594276428], + [-1.8277299404144287, 1.0248843431472778], + [2.9631011486053467, -4.602640151977539], + [5.46031379699707, -2.3101179599761963], + [-3.1796491146087646, -1.0324928760528564], + [-2.4630722999572754, -0.04567057266831398], + [5.636091709136963, -2.2329180240631104], + [-1.8404905796051025, 1.8560277223587036], + [2.6146576404571533, -4.402997970581055], + [1.2801647186279297, -6.12579870223999], + [8.236285209655762, -2.8234798908233643], + [2.892585277557373, -3.0129783153533936], + [-4.181506633758545, -2.722541093826294], + [-4.147524833679199, 6.4583845138549805], + [2.1807916164398193, -5.085883140563965], + [0.455205500125885, -5.070014953613281], + [-1.8677419424057007, 1.809183120727539], + [3.4022068977355957, -0.5898451805114746], + [-5.624789714813232, -1.2679989337921143], + [2.4288337230682373, -4.238985061645508], + [1.9766428470611572, 1.0639495849609375], + [-0.42473071813583374, 10.134937286376953], + [9.342952728271484, -2.7749502658843994], + [-1.2187583446502686, -0.7918134927749634], + [-3.1189136505126953, -0.0676652193069458], + [-1.1096060276031494, 4.871243953704834], + [6.131922245025635, -1.1752420663833618], + [-0.29113566875457764, -1.5914100408554077], + [-2.681741952896118, -1.5020010471343994], + [2.7419843673706055, -4.425036430358887], + [-1.978994369506836, 2.115137815475464], + [-4.69394063949585, -0.7703701853752136], + [-4.122668266296387, -1.6739119291305542], + [0.1663723587989807, 5.1096625328063965], + [5.617051124572754, -2.071899175643921], + [8.789209365844727, -2.7638423442840576], + [-1.807632565498352, 0.841449499130249], + [2.3562521934509277, 5.0227813720703125], + [-0.7314116358757019, 1.0317898988723755], + [-3.218998432159424, 5.795650482177734], + [2.3033339977264404, 4.059247016906738], + [-4.504495143890381, 6.729525089263916], + [-4.210333347320557, -1.9669444561004639], + [10.111649513244629, -3.06649112701416], + [-3.9631426334381104, 6.102612495422363], + [-0.049843378365039825, -1.5223888158798218], + [-1.5836116075515747, 12.10654354095459], + [6.620885372161865, -1.5173026323318481], + [1.201161503791809, 2.803673028945923], + [1.0463759899139404, -6.934483051300049], + [-1.9655386209487915, -0.6212835311889648], + [2.8568222522735596, 6.275758743286133], + [-2.5363707542419434, 2.78922176361084], + [-2.8465750217437744, -0.8190383315086365], + [-2.140702247619629, 1.9126983880996704], + [8.029668807983398, -2.4612951278686523], + [0.4730350375175476, -6.919241905212402], + [-1.646470069885254, 1.3920851945877075], + [-5.555435657501221, 7.502311706542969], + [-3.750725030899048, -1.5286004543304443], + [-2.873056650161743, -1.5863398313522339], + [-5.113872051239014, -0.8724597692489624], + [-1.2574716806411743, 11.121418952941895], + [-1.4481037855148315, 12.247379302978516], + [-1.1426441669464111, -1.2534979581832886], + [1.3503780364990234, 4.683427333831787], + [1.9319188594818115, -4.240819454193115], + [-1.9659571647644043, -0.859992504119873], + [-0.7118727564811707, 10.377191543579102], + [-1.8612549304962158, -0.6929837465286255], + [1.2084307670593262, -5.526434421539307], + [-2.6255319118499756, -2.835160493850708], + [1.7643306255340576, -5.807220458984375], + [3.225994825363159, 6.746131420135498], + [6.78744649887085, -1.8828380107879639], + [-0.6927788257598877, 9.841765403747559], + [-3.0721592903137207, -1.9472814798355103], + [0.3677706718444824, -6.897324562072754], + [2.4242167472839355, 4.103385925292969], + [0.6163478493690491, -7.9887237548828125], + [6.167675018310547, -1.2164100408554077], + [-0.06075707823038101, -2.1463937759399414], + [2.7547712326049805, 4.797870635986328], + [0.4545614719390869, -5.754944801330566], + [1.2530829906463623, -3.707812786102295], + [8.581372261047363, -3.237292766571045], + [-2.5367655754089355, -1.9261285066604614], + [-4.771446228027344, -1.6656657457351685], + [1.9326581954956055, 6.628483772277832], + [-0.04132414609193802, -2.738029718399048], + [6.057476997375488, -1.1783462762832642], + [-1.0729899406433105, 10.896679878234863], + [-2.8997089862823486, -1.4281474351882935], + [5.144634246826172, -2.865483283996582], + [1.6819864511489868, -5.4105048179626465], + [-2.1269609928131104, 1.031375765800476], + [-0.9390642046928406, 10.996129035949707], + [-1.9129371643066406, 2.0902068614959717], + [-2.5643081665039062, 5.620987415313721], + [-3.2666945457458496, -1.4636975526809692], + [-4.750504016876221, 4.712040424346924], + [6.553749084472656, -3.065215826034546], + [-1.9142118692398071, 2.112811326980591], + [-4.610448360443115, -1.0693572759628296], + [-0.885521650314331, -2.0424282550811768], + [7.918525695800781, -2.8385441303253174], + [4.471489429473877, 0.42218369245529175], + [-5.071787357330322, 4.734041690826416], + [-1.4932115077972412, -0.5519472360610962], + [1.747955083847046, 1.1727830171585083], + [-1.2576218843460083, 11.11686897277832], + [-6.256112098693848, -1.2229409217834473], + [1.1505458354949951, -5.8444929122924805], + [-1.8875935077667236, -0.23997223377227783], + [8.96591567993164, -2.677901029586792], + [0.3576704263687134, -6.877785682678223], + [-3.947307825088501, 5.521590232849121], + [-3.0553739070892334, -1.1575936079025269], + [-1.6686798334121704, 1.5014461278915405], + [-3.0012927055358887, -3.6036198139190674], + [0.10086803883314133, -0.24485084414482117], + [1.9319188594818115, -4.5002312660217285], + [-1.9662718772888184, 2.291201591491699], + [2.162203311920166, 5.276663780212402], + [5.856810092926025, -1.6921460628509521], + [1.4670921564102173, 2.594412088394165], + [7.544682502746582, -2.3903777599334717], + [-3.6084225177764893, -1.3674691915512085], + [2.908134698867798, -4.998894214630127], + [-3.1671388149261475, -2.2597415447235107], + [1.6354312896728516, 4.995525360107422], + [1.7239253520965576, 7.360513210296631], + [6.649731636047363, -2.183168649673462], + [-5.323971748352051, -4.055476188659668], + [-2.7380337715148926, 2.9401447772979736], + [3.020055055618286, -4.8388261795043945], + [0.4216763377189636, -7.52197790145874], + [-3.9687421321868896, -1.4393426179885864], + [0.6184864044189453, -5.891272068023682], + [-2.0254364013671875, -0.4953417181968689], + [1.3207690715789795, -6.215697288513184], + [2.44348406791687, -3.790426015853882], + [-1.1842472553253174, -0.8184329867362976], + [-4.165951251983643, -3.0695488452911377], + [-0.4195796251296997, 8.814470291137695], + [-3.929811716079712, -1.8566139936447144], + [0.45140403509140015, 0.10619890689849854], + [0.012778274714946747, -0.9345082640647888], + [2.0702383518218994, 5.427260875701904], + [-0.05504762381315231, -0.9738830924034119], + [-1.1526373624801636, 10.462503433227539], + [-3.021089792251587, -0.7478645443916321], + [-0.9741217494010925, 2.2357418537139893], + [1.05332350730896, 3.726728677749634], + [-3.7691361904144287, -2.376641035079956], + [-0.5455321669578552, 9.874458312988281], + [-4.506654262542725, -1.2164195775985718], + [-2.7866828441619873, -0.1955021619796753], + [-3.0074145793914795, -0.36904120445251465], + [-1.11772882938385, 9.982199668884277], + [-3.4811885356903076, -0.6345155239105225], + [-1.0411673784255981, -0.601743221282959], + [0.8510140776634216, -6.717967987060547], + [5.508240222930908, -3.8066275119781494], + [1.1822056770324707, -4.638225555419922], + [0.7501792311668396, -3.915390729904175], + [-2.126460552215576, -1.7627404928207397], + [-0.9674277305603027, 1.9794515371322632], + [6.492326736450195, -3.6432464122772217], + [-3.5930874347686768, -2.350242853164673], + [-5.011491298675537, 6.617064476013184], + [-3.4336655139923096, -0.4804168939590454], + [1.7061376571655273, -6.322013854980469], + [1.5758414268493652, 4.633687973022461], + [2.9672975540161133, -4.9747514724731445], + [0.26906901597976685, -4.979339599609375], + [-0.2226574420928955, -4.113900184631348], + [0.9274947047233582, 5.836475372314453], + [-0.8627992868423462, 10.245275497436523], + [5.549900531768799, 8.629512786865234], + [-1.1374484300613403, 11.171211242675781], + [-2.164027214050293, 2.536210298538208], + [0.28637027740478516, -6.15235710144043], + [-4.456971645355225, -0.23815912008285522], + [-3.8544578552246094, 4.912894248962402], + [0.9527915120124817, -5.884017467498779], + [5.743815898895264, -1.3847135305404663], + [-3.184088945388794, 5.880469799041748], + [-4.238461971282959, 3.3462753295898438], + [1.7004272937774658, -5.263483047485352], + [-1.0200387239456177, -0.7705092430114746], + [-2.210756301879883, -1.386144757270813], + [0.6994412541389465, -7.165946960449219], + [9.083719253540039, -2.739563226699829], + [0.016035906970500946, 5.090415000915527], + [2.7993435859680176, -4.339243412017822], + [0.5656020045280457, -7.247057914733887], + [2.0268242359161377, -4.2689433097839355], + [1.7608208656311035, 1.7939423322677612], + [2.333824872970581, -4.3665618896484375], + [-5.162431240081787, -4.567122459411621], + [-1.8209166526794434, 2.2002460956573486], + [-1.787474274635315, 1.2391217947006226], + [0.8680294752120972, -0.29049941897392273], + [0.05106604844331741, -0.6785693168640137], + [0.47702866792678833, -7.2786970138549805], + [0.734595537185669, -6.221620082855225], + [1.1079699993133545, -6.685932159423828], + [-2.0586981773376465, 1.7271686792373657], + [-4.833291530609131, 6.67626953125], + [-1.48711359500885, 12.068449020385742], + [1.372524380683899, 4.621582984924316], + [2.2184832096099854, 5.347625732421875], + [1.8290328979492188, -5.113523483276367], + [2.4678523540496826, -4.746902942657471], + [-0.7895876169204712, 9.406641960144043], + [0.6878024935722351, -8.024518013000488], + [6.676994800567627, -3.004333734512329], + [0.5830658078193665, -8.314990997314453], + [-1.4046351909637451, 12.095441818237305], + [-0.21228843927383423, 1.8918951749801636], + [-4.8920207023620605, 1.0128381252288818], + [0.6987528204917908, -8.034128189086914], + [8.273119926452637, -2.3834660053253174], + [0.24733108282089233, -6.402252674102783], + [2.4773361682891846, 6.041403293609619], + [-1.5388063192367554, 5.222970008850098], + [4.384610652923584, 7.507382392883301], + [-3.4708011150360107, -1.2883570194244385], + [0.7035242915153503, -4.789279937744141], + [0.629997193813324, -6.963228702545166], + [5.991396427154541, -3.504704236984253], + [-4.5027079582214355, 6.237214088439941], + [-0.9494568705558777, 10.681989669799805], + [-4.809569835662842, 6.8732404708862305], + [0.728066086769104, -7.673598289489746], + [1.3013420104980469, 3.969609498977661], + [-3.34464955329895, -1.3675464391708374], + [3.103999137878418, -7.00136661529541], + [8.078497886657715, -2.7971889972686768], + [7.902667045593262, -2.3791348934173584], + [-0.38015520572662354, 9.02431869506836], + [9.553622245788574, -2.837644338607788], + [-1.163224220275879, 10.561504364013672], + [0.9258453249931335, 0.38976410031318665], + [-2.3615305423736572, -1.653679609298706], + [-3.2861216068267822, -2.31730580329895], + [-5.672039031982422, 7.389698028564453], + [1.803731918334961, 0.35275956988334656], + [7.529653549194336, -2.5617754459381104], + [-2.3829407691955566, -0.36032000184059143], + [0.5553885698318481, -7.2149810791015625], + [5.997005939483643, -3.6359360218048096], + [5.440308094024658, 8.319384574890137], + [1.6829569339752197, 4.4172563552856445], + [2.86579966545105, -4.234625816345215], + [0.6289917230606079, -7.970016002655029], + [1.646710753440857, 4.629038333892822], + [-0.8058015704154968, 9.892499923706055], + [-1.4666723012924194, -1.121906042098999], + [3.869887590408325, 6.799559593200684], + [5.135256290435791, -3.0350170135498047], + [0.6449162364006042, -8.028458595275879], + [-3.812708616256714, -2.779595375061035], + [-5.287106990814209, 5.694592475891113], + [4.994126796722412, -0.6950527429580688], + [2.2202823162078857, 0.8341125249862671], + [0.37876462936401367, -6.864397048950195], + [8.452488899230957, -2.561692953109741], + [2.0871570110321045, 5.72576904296875], + [-5.3977813720703125, 7.152048110961914], + [-0.8807453513145447, -2.003965139389038], + [-5.842404842376709, 5.096081256866455], + [2.8654887676239014, 6.162777900695801], + [-3.7876806259155273, -1.7906943559646606], + [7.5538649559021, -2.56723952293396], + [-2.8281943798065186, 2.8955962657928467], + [-1.9402077198028564, 2.2946619987487793], + [-0.8314533829689026, 5.132220268249512], + [1.9793031215667725, 5.359871864318848], + [-2.2215969562530518, -3.209669351577759], + [0.6369684934616089, -8.204568862915039], + [-0.6336339116096497, 9.060359954833984], + [3.1572113037109375, -6.220531463623047], + [6.680055141448975, -5.425275802612305], + [0.35809171199798584, -5.503515243530273], + [-0.19906145334243774, 7.728560447692871], + [8.718485832214355, -2.7124664783477783], + [0.6129867434501648, -8.274280548095703], + [9.07924747467041, -3.5822696685791016], + [-1.452855110168457, 0.8740581274032593], + [2.8580539226531982, -5.10527229309082], + [1.6914634704589844, 4.972251892089844], + [-1.875276803970337, 1.5766373872756958], + [1.4022830724716187, 3.9386918544769287], + [3.000563144683838, -4.819228172302246], + [-2.0799400806427, -1.3167802095413208], + [-5.484755516052246, 7.603568077087402], + [-3.683593511581421, -2.468635320663452], + [-0.15281373262405396, -3.840071439743042], + [0.4755730628967285, -7.19650411605835], + [-4.523189544677734, -1.0377161502838135], + [1.7610750198364258, 2.504838466644287], + [-1.4174286127090454, 12.37492561340332], + [-1.954833984375, 2.126569986343384], + [-4.059189796447754, -2.840595006942749], + [7.944676876068115, -3.223172664642334], + [-4.583413600921631, -0.5311170816421509], + [-5.198811054229736, 7.054500579833984], + [-3.6750094890594482, -1.6896910667419434], + [5.928684234619141, -2.376195192337036], + [-1.1480056047439575, 11.17721176147461], + [-3.9115991592407227, -3.7221415042877197], + [0.534960150718689, -5.549724102020264], + [-1.4496493339538574, 11.859432220458984], + [-1.63959538936615, 13.602112770080566], + [-1.2742376327514648, 9.691818237304688], + [6.9343438148498535, -4.119994163513184], + [-1.875226378440857, 0.6340299844741821], + [-3.997624158859253, -2.3381974697113037], + [-4.07837438583374, 5.3996968269348145], + [5.867255687713623, -1.2794567346572876], + [-2.1103756427764893, 2.144469976425171], + [2.961451768875122, -4.890340805053711], + [-3.25952410697937, 2.4369542598724365], + [0.6246647238731384, -7.445841312408447], + [1.927870512008667, 0.769842267036438], + [-0.7385356426239014, 7.3567214012146], + [-3.4934422969818115, -2.293633222579956], + [1.1305134296417236, 5.221754550933838], + [-1.6790032386779785, 1.2682483196258545], + [0.3575039505958557, -6.731143474578857], + [0.9874100089073181, 8.120756149291992], + [-5.926272869110107, 5.910890579223633], + [2.9684667587280273, -4.684305191040039], + [-3.1837799549102783, 3.3310744762420654], + [-4.6340813636779785, 5.414619445800781], + [5.796207427978516, 8.649202346801758], + [2.122788906097412, 5.587385177612305], + [-1.2150332927703857, -0.8332198262214661], + [2.0257344245910645, -5.175381183624268], + [-1.3329166173934937, 11.85246467590332], + [2.9305484294891357, -4.5086541175842285], + [-4.208734035491943, 5.9386887550354], + [2.9545114040374756, 6.47876501083374], + [0.8823104500770569, 6.047294616699219], + [9.328242301940918, -2.6989922523498535], + [0.6124958992004395, -0.2775898277759552], + [0.16911303997039795, -5.127708435058594], + [-0.8136839270591736, 10.25831413269043], + [-3.1312427520751953, 5.864504337310791], + [7.859862804412842, -2.343709707260132], + [-1.0056936740875244, 10.58646011352539], + [4.160755634307861, 7.620941638946533], + [-0.7122169137001038, 0.9568667411804199], + [2.466935873031616, 0.7948271036148071], + [-0.3873114287853241, -3.715257167816162], + [-0.9361652731895447, 11.257986068725586], + [0.19580847024917603, 4.201303005218506], + [2.646031618118286, 4.559659481048584], + [-3.5164670944213867, -1.7072677612304688], + [0.6210767030715942, -0.9353033304214478], + [0.3928978443145752, -0.7632580399513245], + [-3.396868944168091, -1.7284798622131348], + [-3.998049020767212, -0.7915345430374146], + [0.5211389660835266, -8.020186424255371], + [0.9681732058525085, -6.351612091064453], + [1.023789405822754, -6.8151702880859375], + [-1.3338872194290161, 12.023204803466797], + [-2.8174455165863037, -1.662704586982727], + [-4.032402038574219, -0.6352447867393494], + [-3.699836492538452, -1.3632986545562744], + [-4.4796295166015625, -4.349722862243652], + [2.6680710315704346, -4.475238800048828], + [-1.6848280429840088, 1.5503082275390625], + [-3.740696668624878, -1.3545645475387573], + [2.814689874649048, 5.497400760650635], + [-2.9868130683898926, -0.798264741897583], + [2.9741299152374268, -5.086365699768066], + [0.8341030478477478, -7.052214622497559], + [-4.018280982971191, -1.1559771299362183], + [8.95371150970459, -2.6698458194732666], + [-0.6260252594947815, 2.1644198894500732], + [2.376452684402466, 5.869892120361328], + [-1.423289179801941, -2.597377061843872], + [-1.2727692127227783, 11.131926536560059], + [-1.3813837766647339, 12.025482177734375], + [0.6239363551139832, -7.061705589294434], + [-3.050788640975952, -1.3454469442367554], + [-3.867372751235962, -1.0401546955108643], + [6.9813103675842285, -3.239380121231079], + [-5.277313232421875, 5.918661594390869], + [3.9592483043670654, -3.838881254196167], + [-1.0854289531707764, 10.942459106445312], + [-1.7990546226501465, 1.5221376419067383], + [-1.316880226135254, 1.2302067279815674], + [7.033735752105713, -3.6747658252716064], + [8.778108596801758, -3.137190103530884], + [-4.373473644256592, 3.9497179985046387], + [1.848123550415039, -4.125545978546143], + [2.54046368598938, 6.018482208251953], + [0.31366267800331116, -4.874756813049316], + [-3.21809983253479, -1.2424875497817993], + [3.041750192642212, -4.943062782287598], + [-0.7527838945388794, -2.818528413772583], + [-3.044771671295166, 3.2445766925811768], + [0.4192444086074829, 4.260488510131836], + [-2.1722333431243896, 1.9737504720687866], + [0.5229812264442444, -6.275779724121094], + [1.4204354286193848, 0.6436485052108765], + [-0.6507216095924377, 9.476053237915039], + [-0.4066739082336426, -1.627453088760376], + [2.1538245677948, 3.89156174659729], + [-4.075697898864746, 6.292895317077637], + [0.994102418422699, 4.91358757019043], + [7.398878574371338, -2.616248369216919], + [1.81735360622406, 5.5241594314575195], + [-0.8905747532844543, 9.28006362915039], + [0.6280347108840942, -7.943511009216309], + [-0.9362922310829163, 10.990058898925781], + [2.367924213409424, -5.102369785308838], + [-2.121953248977661, 2.025568723678589], + [1.1367080211639404, -6.556973457336426], + [0.7374191880226135, -8.852365493774414], + [-2.912280797958374, 4.489788055419922], + [-2.1020562648773193, 2.7269058227539062], + [-6.19612455368042, 8.067774772644043], + [-3.8050765991210938, -1.8983808755874634], + [1.7397215366363525, 4.160621643066406], + [8.090546607971191, -2.6438100337982178], + [-3.766202211380005, -2.803016185760498], + [5.758398532867432, -3.785001516342163], + [0.6933169364929199, -6.089601516723633], + [-2.0976946353912354, -0.4441843628883362], + [-5.190334320068359, 7.184510707855225], + [-3.33276629447937, -2.6202375888824463], + [2.9773709774017334, -4.865180969238281], + [-0.8012967109680176, 9.733211517333984], + [0.5393379926681519, -4.611297607421875], + [-2.2182464599609375, 2.1902782917022705], + [7.569278240203857, -2.896592378616333], + [6.654625415802002, -2.341801404953003], + [3.0479698181152344, -5.047014236450195], + [2.57399845123291, -4.585464954376221], + [2.5702667236328125, 6.482814788818359], + [-3.3883166313171387, -1.0902986526489258], + [-0.9251875281333923, 1.2657389640808105], + [0.4697120785713196, -7.182653427124023], + [-0.3490259051322937, -3.363328695297241], + [7.038097858428955, -2.9957573413848877], + [0.3573663532733917, -4.584756374359131], + [0.0840662345290184, -0.918792188167572], + [-2.334521532058716, 0.7284229397773743], + [-4.02289342880249, -0.6020251512527466], + [-0.6529055833816528, -2.201770305633545], + [1.6827806234359741, 5.050497055053711], + [-1.6453485488891602, 0.9813355207443237], + [-3.7129218578338623, 3.616178035736084], + [0.15423250198364258, -6.007481575012207], + [2.8175570964813232, -4.827122688293457], + [-3.812157154083252, -1.6482449769973755], + [1.8542401790618896, 3.5577242374420166], + [-1.362584114074707, 11.931467056274414], + [2.1352691650390625, 4.289904594421387], + [-3.2752997875213623, -1.1732957363128662], + [3.893864870071411, -5.540713310241699], + [-0.7477988004684448, 10.208353042602539], + [6.878872394561768, -1.8078675270080566], + [-3.96553635597229, -1.02700936794281], + [0.09872695058584213, -5.221218585968018], + [0.572986900806427, -7.673717498779297], + [-4.170954704284668, -1.2613247632980347], + [0.6598590612411499, -8.066362380981445], + [-0.8380696177482605, -0.9527280926704407], + [0.5834569334983826, -5.859974384307861], + [-2.0143942832946777, -0.4240690767765045], + [-2.2412359714508057, -0.9734234809875488], + [9.042186737060547, -2.7583248615264893], + [-3.686126947402954, -0.9573239088058472], + [-2.298558235168457, -1.3568954467773438], + [-1.920661449432373, 0.8810023069381714], + [1.9797570705413818, 4.7350616455078125], + [-3.754279613494873, -2.930377960205078], + [6.614314556121826, -1.1467750072479248], + [-2.453800916671753, -1.392565131187439], + [4.474425315856934, 7.489743232727051], + [-0.10282934457063675, 8.611472129821777], + [0.8860548138618469, -4.989587783813477], + [-4.577024459838867, 4.281271457672119], + [0.488411009311676, -7.248779296875], + [2.1090328693389893, 0.7732436656951904], + [-2.3106157779693604, 2.21386981010437], + [2.904198408126831, -4.797001838684082], + [-4.788977146148682, 1.9516268968582153], + [-4.484004974365234, 6.747898101806641], + [0.19076597690582275, -5.842684268951416], + [5.993322849273682, -2.223762273788452], + [-3.7556982040405273, -1.150045394897461], + [6.383656024932861, -1.5061808824539185], + [-2.597460985183716, -1.037310004234314], + [6.444446563720703, -3.440687417984009], + [-3.064833402633667, -1.198598027229309], + [1.2539900541305542, 1.0313740968704224], + [-2.907141923904419, 5.714168548583984], + [-3.9510657787323, -1.9135750532150269], + [-0.49535071849823, -1.2847418785095215], + [2.04097580909729, 1.2703627347946167], + [2.933628797531128, -4.913951396942139], + [1.8196415901184082, -4.644977569580078], + [-0.11373961716890335, 6.832291603088379], + [0.5577985644340515, -7.285192489624023], + [-1.2524545192718506, 11.456792831420898], + [2.6036717891693115, 4.695320129394531], + [2.517394781112671, -5.021300792694092], + [1.6860277652740479, 5.094733238220215], + [0.9888363480567932, -4.398269176483154], + [-1.3265260457992554, -2.2701735496520996], + [0.46177440881729126, -5.334465980529785], + [-3.378359317779541, 6.097546577453613], + [8.366289138793945, -2.696676731109619], + [-0.8188152313232422, 10.443613052368164], + [-3.828498601913452, -4.2973127365112305], + [-2.4978954792022705, 2.5131609439849854], + [-1.4069573879241943, 12.0471773147583], + [-3.706385850906372, -1.1788727045059204], + [0.3725201487541199, -7.012016296386719], + [-1.3938161134719849, 11.479349136352539], + [1.529768943786621, 1.6333647966384888], + [0.2820122241973877, -6.855987548828125], + [2.5590574741363525, -4.343679904937744], + [-1.5292977094650269, 12.5357666015625], + [6.836385250091553, -2.742415189743042], + [-5.12450647354126, -1.1145504713058472], + [-2.695997476577759, -1.6844582557678223], + [-0.4156237840652466, 10.175564765930176], + [1.6819655895233154, -3.8300411701202393], + [-1.2740492820739746, 11.221717834472656], + [3.1165173053741455, -4.839513301849365], + [-1.005342721939087, -2.144782066345215], + [-0.8756678700447083, 9.958137512207031], + [-0.7113112807273865, 10.623126983642578], + [0.7256301045417786, -8.664886474609375], + [-3.983644485473633, -2.699117422103882], + [0.9149720668792725, -7.104959487915039], + [-4.590223789215088, 6.75632381439209], + [0.5398706793785095, -7.0851287841796875], + [-3.3782918453216553, -2.4477884769439697], + [-0.4098049998283386, 8.669343948364258], + [-3.275585651397705, 5.708366394042969], + [0.635886549949646, -8.492766380310059], + [-4.1963372230529785, 6.678207874298096], + [7.795281887054443, -2.3020291328430176], + [-1.6677045822143555, -0.939863920211792], + [-0.9632962346076965, 10.542997360229492], + [-0.009991981089115143, -4.1082611083984375], + [-2.6278650760650635, 5.56048059463501], + [-3.4407474994659424, 3.859654664993286], + [2.6320836544036865, -4.893842697143555], + [-1.9780235290527344, 1.9954322576522827], + [0.5684129595756531, 0.720270574092865], + [-4.269556522369385, 6.578381061553955], + [-2.0364112854003906, -1.7947715520858765], + [-3.291417121887207, -1.2723087072372437], + [-3.900090456008911, 3.043463945388794], + [0.8307056427001953, -6.8553876876831055], + [-2.678173303604126, 5.5093464851379395], + [-0.9692412614822388, 10.81812858581543], + [-1.1001944541931152, -2.3495147228240967], + [8.890155792236328, -2.9235174655914307], + [2.8428964614868164, -4.825088024139404], + [0.6948919296264648, -6.592094898223877], + [-0.24274533987045288, -1.2586978673934937], + [0.43601179122924805, -6.968158721923828], + [-4.704879283905029, 4.8413615226745605], + [2.8161139488220215, 5.729116439819336], + [0.5652433037757874, -7.306704044342041], + [1.9511926174163818, 3.933120012283325], + [7.507951736450195, -2.617436647415161], + [-2.546347141265869, 2.6292903423309326], + [-3.3411386013031006, -2.7498085498809814], + [-1.1855515241622925, 2.6760809421539307], + [-3.906306266784668, 5.83901309967041], + [0.8405166268348694, 4.9912614822387695], + [0.3825168013572693, -6.538697242736816], + [3.13396954536438, 6.21969747543335], + [1.0928595066070557, -5.054163932800293], + [3.581472873687744, 6.542540550231934], + [2.643178939819336, -5.408534049987793], + [-1.4581618309020996, 12.277970314025879], + [-0.7407051920890808, 9.367353439331055], + [1.2695130109786987, -5.145851135253906], + [7.469654560089111, -3.9600961208343506], + [-1.7547926902770996, 1.2562000751495361], + [-0.6823493838310242, -0.6713863611221313], + [6.70177698135376, -1.7601866722106934], + [1.5903927087783813, -6.237832546234131], + [-1.0017106533050537, -0.7455803155899048], + [-0.07662371546030045, -3.5674831867218018], + [8.85084056854248, -2.944746255874634], + [0.5247267484664917, -7.923641681671143], + [0.31563347578048706, -4.171194076538086], + [-1.3396720886230469, -1.280788540840149], + [-1.9101803302764893, -0.172701895236969], + [-1.9564073085784912, -1.480143427848816], + [7.310935020446777, -2.3271899223327637], + [-1.0367659330368042, 11.07417106628418], + [-0.7131240367889404, 5.326871871948242], + [5.191050052642822, -1.3439538478851318], + [2.499856472015381, -4.584364891052246], + [-5.205608367919922, 6.292057514190674], + [-2.6946861743927, -2.2190513610839844], + [0.5243791937828064, -7.534543514251709], + [2.4522736072540283, -3.856227159500122], + [0.5121620297431946, -7.235772132873535], + [-0.14244455099105835, -2.7430579662323], + [-4.042077541351318, 3.256974458694458], + [1.0238373279571533, 4.044642925262451], + [-1.156751275062561, 3.500849962234497], + [-5.313955783843994, 7.194886207580566], + [-4.063821315765381, 6.765148639678955], + [2.8117337226867676, -4.593677043914795], + [7.809478282928467, -3.3125393390655518], + [-2.012176752090454, 1.2632673978805542], + [3.118436098098755, -5.121397972106934], + [0.9798862338066101, -4.6188201904296875], + [0.184240460395813, 4.530190467834473], + [0.705707311630249, 5.97376012802124], + [0.688612163066864, -7.71229362487793], + [-1.2384928464889526, 10.150854110717773], + [-1.6121431589126587, 12.623544692993164], + [-0.5522432923316956, 9.160022735595703], + [1.8531911373138428, -5.637045860290527], + [-0.2280905842781067, 7.970589637756348], + [-2.9227404594421387, 3.2902143001556396], + [1.2410705089569092, -4.905452251434326], + [0.9584996104240417, -8.698333740234375], + [-2.03485107421875, 1.9045202732086182], + [2.947524309158325, -4.510247707366943], + [-0.5087268948554993, -2.8665874004364014], + [-0.8416584730148315, 10.169288635253906], + [0.9367205500602722, 0.1920122504234314], + [-2.2415857315063477, -2.753329038619995], + [-2.2029471397399902, 2.968594789505005], + [3.8346424102783203, 6.556110382080078], + [0.7265757918357849, -7.025433540344238], + [-3.8839147090911865, -2.4632558822631836], + [1.558248519897461, -5.608834266662598], + [-4.378346920013428, 5.489044189453125], + [-4.187251091003418, 5.993954658508301], + [-2.816263198852539, -1.4467614889144897], + [8.008462905883789, -3.2240734100341797], + [-3.619943857192993, -1.3528751134872437], + [2.610365867614746, -4.504300117492676], + [-3.8188250064849854, -0.9296243786811829], + [0.6978791356086731, -8.256068229675293], + [3.4917314052581787, -4.081902503967285], + [-0.6482810378074646, -0.10210050642490387], + [-4.804711818695068, 6.869584083557129], + [-0.22480100393295288, 9.015619277954102], + [2.4028308391571045, -3.919849157333374], + [-5.748099327087402, 6.825473785400391], + [7.480855941772461, -2.4797708988189697], + [-4.634626388549805, -3.8178534507751465], + [-3.2418806552886963, -1.515753149986267], + [-1.18807053565979, 11.452953338623047], + [2.7517435550689697, -3.989772081375122], + [-1.9290529489517212, 0.7426613569259644], + [-2.1207103729248047, 2.0770795345306396], + [-1.8628450632095337, 0.6246970891952515], + [0.3822779655456543, -6.914450645446777], + [-4.353829860687256, -0.620448887348175], + [2.8228046894073486, -5.0349440574646], + [-3.7249906063079834, -1.3284794092178345], + [-3.5052225589752197, -1.1177055835723877], + [0.22670990228652954, -7.020779609680176], + [-3.4232304096221924, -4.341047286987305], + [-1.3567265272140503, 1.1837142705917358], + [0.5930163264274597, -8.351808547973633], + [2.9485790729522705, -4.63557243347168], + [0.37497782707214355, -7.061528205871582], + [0.37234288454055786, -6.3647871017456055], + [7.1149821281433105, -2.0493128299713135], + [-3.550771713256836, -1.0632997751235962], + [0.47268879413604736, -7.028525352478027], + [-4.388858795166016, -1.2270740270614624], + [-4.915250301361084, 4.352535247802734], + [3.0183441638946533, -5.202178001403809], + [0.5711964964866638, -0.14075875282287598], + [0.14082735776901245, -5.928407669067383], + [4.676386833190918, 7.624212265014648], + [-3.4445149898529053, -0.14997637271881104], + [-1.6902774572372437, -1.151963472366333], + [0.849136233329773, -5.7700300216674805], + [0.16485145688056946, -1.1768580675125122], + [8.7761869430542, -2.7448911666870117], + [-2.47922945022583, -0.7834111452102661], + [0.5744556784629822, -7.892364978790283], + [-0.6639174818992615, 9.975552558898926], + [-1.792167067527771, 2.110110282897949], + [-3.9436819553375244, -2.8883256912231445], + [-3.7132833003997803, -2.760516881942749], + [-0.8988617658615112, 0.43377774953842163], + [-4.7297868728637695, -0.7612822651863098], + [0.5685453414916992, -7.77759313583374], + [-5.0186614990234375, 6.066739082336426], + [2.27278733253479, 5.3018951416015625], + [0.3021804690361023, -6.230620384216309], + [-2.1611075401306152, -0.6067121028900146], + [-3.2662501335144043, -1.3800777196884155], + [2.5619051456451416, -5.6811113357543945], + [0.8020874857902527, -6.956999778747559], + [2.7690749168395996, -4.47896671295166], + [-4.742962837219238, 5.456513404846191], + [-2.294747829437256, 0.0663292407989502], + [0.7609172463417053, -8.99912166595459], + [-3.5370514392852783, -1.3302018642425537], + [-3.599400758743286, -1.8165425062179565], + [-4.746287822723389, -0.9939895272254944], + [0.8872805237770081, -4.243105888366699], + [-3.34861421585083, -1.4254168272018433], + [-4.39607572555542, -3.4900777339935303], + [0.8239054083824158, -5.05714225769043], + [-2.191096067428589, 2.2064173221588135] + ], + "2": [ + [-5.650999069213867, -2.231999158859253], + [8.536845207214355, -2.327369451522827], + [8.337841987609863, -2.917495012283325], + [-6.54679536819458, 7.970705032348633], + [-0.5458837151527405, 12.09432315826416], + [-0.21291875839233398, 9.93667221069336], + [1.4685304164886475, 0.8936947584152222], + [-2.529963254928589, 2.0967347621917725], + [3.0014946460723877, -4.755512237548828], + [-7.814622402191162, -0.9082939624786377], + [-4.762073993682861, 7.160366058349609], + [-1.6869986057281494, 1.689180612564087], + [-1.9930154085159302, 1.409265398979187], + [-5.338606357574463, 3.050377607345581], + [8.60107135772705, -2.339867115020752], + [7.454131603240967, -2.742711067199707], + [7.698428630828857, -2.4570791721343994], + [-4.6772871017456055, -2.1586105823516846], + [-4.739180564880371, -1.3694454431533813], + [1.1415948867797852, 5.690810680389404], + [-5.500111103057861, 5.340314865112305], + [-4.080615043640137, -2.8158905506134033], + [-5.346094608306885, 1.2982558012008667], + [1.6853339672088623, 5.378390789031982], + [0.37117326259613037, -0.0056610144674777985], + [1.5236811637878418, 5.020938873291016], + [-8.89621353149414, -1.2128430604934692], + [-3.9205095767974854, -2.7743782997131348], + [-5.371522903442383, 6.37066125869751], + [-4.691834926605225, -0.9981142282485962], + [1.7425960302352905, -9.229278564453125], + [8.208356857299805, -2.2531445026397705], + [-0.0742693617939949, 10.22152328491211], + [-6.725849151611328, -0.3964437246322632], + [-8.335018157958984, 10.228599548339844], + [-4.398762226104736, 5.895620346069336], + [-5.256833553314209, -2.4039933681488037], + [-2.0473673343658447, -0.2518608272075653], + [-4.88228178024292, -1.434224247932434], + [-3.489858627319336, 4.928346633911133], + [-4.076354026794434, -3.5308339595794678], + [-0.15327483415603638, -0.7644575834274292], + [2.008824586868286, 0.6711901426315308], + [-2.405731678009033, 2.2768359184265137], + [-0.8945034146308899, 8.55721664428711], + [-0.08552885800600052, 9.583456039428711], + [-0.4867931604385376, 10.334395408630371], + [-3.339038133621216, 3.7314069271087646], + [-3.479631185531616, 4.997208595275879], + [1.0755857229232788, -5.708881378173828], + [5.900125980377197, -0.25629255175590515], + [-5.117151737213135, -3.5729658603668213], + [-2.6423206329345703, -1.1483540534973145], + [6.908454418182373, -2.965428113937378], + [-0.44542545080184937, -1.9073283672332764], + [-0.1856367290019989, -1.114033818244934], + [-5.426036357879639, -3.1489055156707764], + [-0.39682888984680176, -1.3009594678878784], + [-3.642977237701416, 5.5019426345825195], + [-4.778720378875732, -0.9419901371002197], + [-0.36016762256622314, 10.691756248474121], + [-0.42393648624420166, 9.548662185668945], + [3.0427467823028564, -4.567008972167969], + [1.3897480964660645, 0.6674803495407104], + [-0.28192585706710815, 10.374731063842773], + [-0.13773852586746216, 9.59892749786377], + [-5.898970127105713, 6.9952216148376465], + [8.704347610473633, -2.5074970722198486], + [-1.9184372425079346, 0.1628507375717163], + [3.0344231128692627, -4.567100524902344], + [-4.374253273010254, -4.532098293304443], + [4.892745018005371, -1.0866552591323853], + [-3.6961710453033447, -2.4694812297821045], + [-2.0926170349121094, 2.112604856491089], + [-4.7675862312316895, 1.3746416568756104], + [-0.24985694885253906, 9.847854614257812], + [8.901514053344727, -2.5476038455963135], + [0.9346911311149597, -5.980801582336426], + [-4.577618598937988, 1.8056211471557617], + [-0.013649411499500275, 8.903729438781738], + [-4.115773677825928, -0.6242349147796631], + [-4.109213352203369, -2.621964693069458], + [-6.187709331512451, 8.071125030517578], + [-5.039702415466309, -3.19608473777771], + [-4.1671528816223145, 2.853698253631592], + [-2.913968324661255, 2.0255467891693115], + [-6.432584285736084, 8.212156295776367], + [-2.7777926921844482, 2.6189053058624268], + [6.412402629852295, -1.5681800842285156], + [-3.0460855960845947, 1.9670807123184204], + [-4.2859296798706055, -1.2675403356552124], + [-7.203395366668701, -1.8114289045333862], + [-4.2354416847229, 5.367677688598633], + [-2.650465488433838, 3.186912775039673], + [0.08344774693250656, 9.085430145263672], + [-1.9038496017456055, 6.255914688110352], + [2.22735595703125, -3.2882955074310303], + [-1.7760634422302246, 6.655346393585205], + [-4.908313274383545, 6.087822914123535], + [0.17965906858444214, 10.54349136352539], + [4.485000133514404, -3.457184314727783], + [-3.8250980377197266, 0.6291316151618958], + [5.59537935256958, -1.5273420810699463], + [2.098384141921997, 5.737039566040039], + [2.8211638927459717, 4.522629737854004], + [-0.02720636874437332, 10.636188507080078], + [2.9241886138916016, -4.470368385314941], + [-4.776246547698975, -3.4916188716888428], + [-0.09338153153657913, -0.7628845572471619], + [7.25717830657959, -3.162235975265503], + [5.864507675170898, -1.1714116334915161], + [2.8911092281341553, -4.689817905426025], + [-0.36508476734161377, 11.03924560546875], + [-1.8771522045135498, 0.07440465688705444], + [-2.5348362922668457, 2.213019371032715], + [-0.5769990086555481, -2.4267799854278564], + [2.0875144004821777, -7.614664554595947], + [1.5794093608856201, 5.306210517883301], + [7.36303186416626, -2.459528684616089], + [-0.7746400833129883, 8.500212669372559], + [-1.5602024793624878, -0.5926094055175781], + [1.5265069007873535, 0.49363160133361816], + [6.720406532287598, -2.7318222522735596], + [-1.4960763454437256, -0.921565055847168], + [4.438331127166748, 6.6334333419799805], + [0.5085050463676453, 5.315027713775635], + [-0.3196152448654175, 9.191276550292969], + [5.248332500457764, -2.8684728145599365], + [-5.721249103546143, -3.0388402938842773], + [1.9002773761749268, -8.387483596801758], + [-3.5344676971435547, 5.636131763458252], + [-2.531653642654419, 0.8277913331985474], + [1.9145509004592896, 4.5890607833862305], + [-2.2431204319000244, 0.6602829694747925], + [-0.19900566339492798, 9.692827224731445], + [3.124539613723755, -4.770764350891113], + [-0.28721457719802856, 10.50222396850586], + [-0.22204560041427612, 9.9469575881958], + [0.1449512243270874, -0.5418202877044678], + [2.916267156600952, -4.459473609924316], + [5.487996578216553, -1.0719126462936401], + [-5.976156711578369, 2.7580690383911133], + [-4.2740702629089355, -1.4302127361297607], + [3.4087536334991455, 6.328412055969238], + [-2.2840216159820557, 3.4834609031677246], + [-6.833099842071533, 8.766277313232422], + [-3.0613367557525635, -2.1731913089752197], + [7.207498550415039, -2.959533452987671], + [-5.565347671508789, -3.663367748260498], + [-7.199084758758545, 8.82388973236084], + [-5.831608295440674, -1.825818657875061], + [-3.576087713241577, -2.351417303085327], + [-2.126556158065796, 2.350339651107788], + [-6.193154335021973, 7.957561492919922], + [1.3070464134216309, 5.038605690002441], + [3.1913654804229736, -5.017385482788086], + [-4.920323848724365, -2.5380613803863525], + [-4.548455715179443, -2.647529363632202], + [-6.030152797698975, 7.271139144897461], + [-4.889554500579834, -2.072981595993042], + [-0.40457290410995483, 10.632322311401367], + [3.6410648822784424, -3.2524726390838623], + [-6.027832508087158, 7.489497184753418], + [-2.3417818546295166, 1.5548101663589478], + [-4.687983512878418, 2.609591484069824], + [2.683565855026245, -7.089227199554443], + [2.4076764583587646, -1.705990195274353], + [-5.483595371246338, -3.171152114868164], + [-0.20394974946975708, 9.687536239624023], + [-9.085368156433105, -0.928951621055603], + [1.7802643775939941, -3.3266923427581787], + [-0.24098676443099976, -0.7930772304534912], + [-2.2596209049224854, 2.598048448562622], + [-4.955048084259033, -3.480139970779419], + [-5.788397789001465, -1.974617600440979], + [-6.036149024963379, 7.264688968658447], + [-0.6166316866874695, 11.129091262817383], + [-0.7849013209342957, -2.7499897480010986], + [-2.358499526977539, 1.9901753664016724], + [-5.425475597381592, 2.9156203269958496], + [-5.401878356933594, 6.841649055480957], + [-2.397827386856079, 1.770009160041809], + [-4.881603717803955, -3.673067092895508], + [-4.33734655380249, -2.811772584915161], + [-0.24840694665908813, 10.428688049316406], + [7.14927339553833, -4.136731147766113], + [-1.2762748003005981, -1.4493026733398438], + [1.867674708366394, 5.5411224365234375], + [8.401947975158691, -2.092402696609497], + [5.615999221801758, -1.3348585367202759], + [2.793191432952881, -4.444417953491211], + [0.7787006497383118, -3.066791534423828], + [2.962446928024292, -4.45399284362793], + [2.8159902095794678, -4.253620624542236], + [-3.669011354446411, -1.2538822889328003], + [-3.0452659130096436, -4.944007396697998], + [1.94394850730896, 1.0438241958618164], + [-4.447271823883057, -2.2796928882598877], + [-3.22583270072937, -4.930850982666016], + [2.270975112915039, -8.29690933227539], + [1.5871167182922363, 4.187201023101807], + [-0.1991376280784607, 10.01443862915039], + [8.01141357421875, -2.4120571613311768], + [-7.167895317077637, -2.0050697326660156], + [1.86561119556427, 5.644097328186035], + [-4.326047420501709, -1.2243679761886597], + [0.040463678538799286, 9.295900344848633], + [-7.2726969718933105, -1.1433502435684204], + [5.678091526031494, -2.637622594833374], + [2.6492013931274414, 6.499149322509766], + [2.589576482772827, 6.2791523933410645], + [-2.108794689178467, 0.3311726152896881], + [-3.2493369579315186, -1.5065516233444214], + [1.8595397472381592, -8.931192398071289], + [6.823448657989502, -1.6024149656295776], + [-4.883187770843506, -2.3648650646209717], + [3.058168649673462, -4.587996482849121], + [-5.2159743309021, -3.1561264991760254], + [-0.6678228378295898, -2.0469167232513428], + [9.813979148864746, -2.7701923847198486], + [2.5972139835357666, -5.787588119506836], + [2.704413652420044, -4.10017204284668], + [3.32556414604187, -4.979400634765625], + [6.990813732147217, -3.9272539615631104], + [-4.51779317855835, -1.8794578313827515], + [9.090953826904297, -2.4982059001922607], + [-0.6841114163398743, 10.140355110168457], + [-0.01607043296098709, 8.569534301757812], + [2.0847585201263428, 5.735510349273682], + [-4.0387187004089355, -2.2827556133270264], + [-1.9811172485351562, 0.8514113426208496], + [3.296788215637207, 7.843448638916016], + [3.0515849590301514, 5.787776470184326], + [1.8115308284759521, -6.8236775398254395], + [-1.6495108604431152, -0.9622159004211426], + [2.968315362930298, 6.46505069732666], + [-0.34827011823654175, 10.325827598571777], + [-2.58381986618042, 1.866623044013977], + [-0.16022735834121704, 10.12576961517334], + [-2.766768217086792, -4.227986812591553], + [2.7521164417266846, -4.362325668334961], + [-6.425549030303955, -1.9243357181549072], + [-2.724637985229492, 5.464219093322754], + [4.322300434112549, 7.162921905517578], + [3.0024948120117188, -4.512537956237793], + [-2.0628483295440674, 5.930515766143799], + [3.9483606815338135, -3.320403575897217], + [-4.063690662384033, 5.3601861000061035], + [-4.080193042755127, -1.7005380392074585], + [2.3945727348327637, 5.930960655212402], + [0.2629883885383606, 9.54028034210205], + [-5.080190658569336, -1.4143708944320679], + [3.1028075218200684, -4.832784652709961], + [-4.382763385772705, -1.5313833951950073], + [-7.481216907501221, 9.119529724121094], + [-0.10581464320421219, 10.046154975891113], + [-2.204200506210327, 1.5045005083084106], + [0.16315263509750366, 9.029441833496094], + [-4.169103145599365, -0.20542699098587036], + [1.9775400161743164, -4.508526802062988], + [-4.412528991699219, 3.4500114917755127], + [-0.18582308292388916, 10.81767749786377], + [-0.4339308738708496, 10.78769302368164], + [-4.566529750823975, 6.91590690612793], + [1.241605520248413, -7.20758056640625], + [5.809895038604736, -2.2204225063323975], + [-5.2125325202941895, -2.379760980606079], + [-3.4084508419036865, 3.639611005783081], + [-5.198426723480225, 3.0994391441345215], + [8.629411697387695, -2.242960214614868], + [7.708334445953369, -2.0970101356506348], + [1.580672025680542, 0.5231466889381409], + [-5.07750129699707, 5.8962907791137695], + [9.205388069152832, -2.5056967735290527], + [7.530628681182861, -1.9824917316436768], + [-0.29421883821487427, 10.901437759399414], + [1.717421054840088, -8.83831787109375], + [-5.599607467651367, -3.498570203781128], + [9.027873039245605, -2.3081166744232178], + [0.9107192754745483, -6.928657531738281], + [2.6133100986480713, -4.303607940673828], + [-3.483711004257202, 5.552882194519043], + [0.7665412425994873, 9.567495346069336], + [-5.617880344390869, -1.1760755777359009], + [2.5331315994262695, -5.660577774047852], + [-4.830325603485107, -3.0984294414520264], + [-3.1927316188812256, 6.612779140472412], + [-6.817805290222168, -1.5917147397994995], + [-4.188055515289307, 5.04252815246582], + [-2.6972711086273193, -1.4380356073379517], + [3.134502410888672, -4.854738235473633], + [3.793720006942749, -2.5392701625823975], + [-4.617164134979248, -2.3774240016937256], + [5.343702793121338, -1.862923502922058], + [-2.6364269256591797, 2.1786532402038574], + [8.019375801086426, -2.7251408100128174], + [-4.247645854949951, 4.812384128570557], + [-5.212069988250732, -3.977440118789673], + [-3.6127994060516357, -0.015031103044748306], + [-6.399894714355469, 7.805812358856201], + [-0.8437053561210632, -1.90022873878479], + [-4.399796485900879, -1.7977510690689087], + [-4.494435787200928, 0.6543525457382202], + [1.1470476388931274, -6.945380210876465], + [0.3134649395942688, 9.644280433654785], + [-3.6256492137908936, 0.8969745635986328], + [7.474392414093018, -1.813058853149414], + [6.083890914916992, -1.052139401435852], + [1.7079668045043945, -5.5921854972839355], + [2.7800981998443604, -4.305344581604004], + [-4.658098220825195, 6.158425807952881], + [-0.2883039116859436, 10.157684326171875], + [-0.5490352511405945, 9.901138305664062], + [2.213984251022339, 5.8216352462768555], + [-7.715141773223877, -0.6761660575866699], + [-6.32705545425415, -1.8361848592758179], + [10.318350791931152, -2.864011526107788], + [1.862377405166626, -8.008428573608398], + [-2.436469316482544, 1.8023651838302612], + [6.306495189666748, -1.2686970233917236], + [-3.3094279766082764, 3.682546854019165], + [-1.4849121570587158, 1.5977544784545898], + [8.476481437683105, -2.2346842288970947], + [-0.42426931858062744, 9.534099578857422], + [-2.5345962047576904, -4.345798969268799], + [0.04872303456068039, 9.206766128540039], + [1.5101299285888672, 5.808455944061279], + [-2.3783955574035645, 5.689607620239258], + [3.0294675827026367, -4.552048683166504], + [-2.2615225315093994, 1.9271982908248901], + [-0.43867963552474976, 9.759163856506348], + [-5.149933338165283, -1.999314308166504], + [-1.827869176864624, -0.09917548298835754], + [-5.591055393218994, 1.1534897089004517], + [-6.043542861938477, -2.3943817615509033], + [-1.076701283454895, -1.033344030380249], + [-3.6404237747192383, 6.997556686401367], + [-3.9515464305877686, -3.2312071323394775], + [-3.762399196624756, 0.6991312503814697], + [-4.4761643409729, -3.3545734882354736], + [8.50808334350586, -2.300936698913574], + [1.9954121112823486, -8.556899070739746], + [-5.158962726593018, 0.6839640140533447], + [-6.84877347946167, 8.562836647033691], + [0.5685712099075317, -2.948500633239746], + [-3.0651042461395264, 6.75400447845459], + [-5.4620232582092285, 1.4138526916503906], + [0.8164059519767761, 5.372294902801514], + [1.0564954280853271, -6.6412272453308105], + [-4.247584819793701, 6.300336837768555], + [1.5748827457427979, 5.323101043701172], + [-6.393302917480469, -0.8210181593894958], + [3.434826374053955, -5.861784934997559], + [2.805651903152466, -4.469347953796387], + [-0.138727068901062, 10.170127868652344], + [2.078852415084839, 5.014904975891113], + [-6.077255725860596, 1.289259910583496], + [7.45837926864624, -1.7240009307861328], + [-3.031425952911377, -0.9721541404724121], + [-4.371997356414795, -2.4549553394317627], + [3.48500657081604, -3.181096315383911], + [-5.8019208908081055, -2.6326515674591064], + [-2.45703387260437, 1.9298237562179565], + [-6.292834281921387, 7.733824253082275], + [4.101791858673096, -0.8972796201705933], + [3.223660469055176, -5.207326412200928], + [-2.148494005203247, -2.078023910522461], + [-3.7707226276397705, -1.9213753938674927], + [1.7947441339492798, 4.994816780090332], + [7.45599889755249, -1.4004815816879272], + [-4.990026950836182, -2.2777183055877686], + [1.7874202728271484, -6.857996463775635], + [-7.282491207122803, 9.252777099609375], + [1.191271185874939, -7.554896354675293], + [-4.183720588684082, -4.998227596282959], + [5.213413238525391, -1.628367304801941], + [2.4695537090301514, -7.513765335083008], + [-7.469360828399658, -1.4586178064346313], + [-6.173604488372803, 2.895038604736328], + [3.1848132610321045, -5.061641216278076], + [-4.793874263763428, -3.2916016578674316], + [-4.943081855773926, 7.8728132247924805], + [-2.573042154312134, 1.9983819723129272], + [1.7403374910354614, 0.3264419734477997], + [-8.16140079498291, -0.9575955867767334], + [6.581862926483154, -1.381535291671753], + [-2.468459367752075, -1.671598196029663], + [-0.11506707221269608, 5.810192108154297], + [-2.7608416080474854, 0.8918247222900391], + [0.14690017700195312, 9.805715560913086], + [-6.097890377044678, 5.474615097045898], + [-2.070188045501709, 0.6345080137252808], + [-0.7954782843589783, -0.7554160952568054], + [5.726261615753174, -1.99394690990448], + [-2.2671139240264893, 2.5019073486328125], + [-4.3062944412231445, -2.7102692127227783], + [-0.9285658597946167, -0.564163863658905], + [4.663389682769775, -0.05752459540963173], + [-5.145320415496826, 8.230875015258789], + [-5.60534143447876, 2.2464542388916016], + [-2.3326375484466553, -2.4223620891571045], + [5.49583101272583, -3.8563339710235596], + [0.43368494510650635, -0.46699053049087524], + [0.009299211204051971, -0.7199400663375854], + [3.3879528045654297, -7.115558624267578], + [1.4049577713012695, -6.684116840362549], + [9.230095863342285, -2.5022168159484863], + [5.560451507568359, -4.785543441772461], + [8.410685539245605, -2.2079479694366455], + [-5.2867913246154785, 2.1714107990264893], + [3.07731032371521, -4.626602649688721], + [-6.322765827178955, -0.9190460443496704], + [-2.0350327491760254, 2.7265052795410156], + [-2.287989377975464, 2.542351245880127], + [5.177159786224365, -1.108148217201233], + [0.09629131108522415, -4.171093940734863], + [-4.645129203796387, -2.254176616668701], + [1.1701219081878662, -6.8437700271606445], + [3.1323282718658447, -5.126979351043701], + [7.939481258392334, -2.0136735439300537], + [-5.0998406410217285, 7.28010368347168], + [0.12781041860580444, -1.2975468635559082], + [-2.2835142612457275, 0.6017142534255981], + [-0.5063316226005554, -0.34882789850234985], + [-5.753714084625244, -3.4151718616485596], + [0.14651644229888916, -2.435641288757324], + [-5.706274509429932, -3.6171557903289795], + [-0.0815616324543953, 10.221076011657715], + [6.033337593078613, -1.4532108306884766], + [-4.800703525543213, 4.354216575622559], + [3.0074071884155273, -4.518380165100098], + [-3.153601884841919, -2.7421066761016846], + [-0.5592164397239685, 11.108040809631348], + [-2.8110952377319336, 1.3818727731704712], + [-3.764787435531616, 5.294571399688721], + [-4.702331066131592, 4.543790817260742], + [-2.817267894744873, -2.7117440700531006], + [1.9844985008239746, 5.803035736083984], + [9.313414573669434, -2.876180410385132], + [-3.8450989723205566, -2.0609495639801025], + [-2.2447614669799805, 2.6940581798553467], + [1.8977183103561401, -3.616589307785034], + [2.8262336254119873, -4.776473045349121], + [8.66650104522705, -2.356818437576294], + [8.06447982788086, -2.615203857421875], + [-5.9435811042785645, 2.830984592437744], + [-7.440026760101318, -1.7430754899978638], + [-0.9902166724205017, 2.603048324584961], + [3.026334524154663, -5.908502578735352], + [-4.803745746612549, 3.614342212677002], + [-5.397979259490967, -2.2915937900543213], + [0.23807114362716675, 2.4390766620635986], + [1.5648975372314453, 3.9429025650024414], + [3.1004769802093506, -6.718425273895264], + [-0.23162245750427246, 11.164094924926758], + [-2.369968891143799, -1.7334269285202026], + [2.8204667568206787, -4.533702850341797], + [1.7705039978027344, -8.86691665649414], + [-5.54973840713501, 4.996992588043213], + [2.324598550796509, -4.233510494232178], + [2.825761079788208, -2.4216787815093994], + [-0.22888725996017456, 9.512884140014648], + [-4.836795330047607, -2.9829249382019043], + [1.8374595642089844, 1.1432186365127563], + [2.9034745693206787, 6.33720588684082], + [1.6848706007003784, -3.328280448913574], + [5.957611083984375, -1.1972973346710205], + [-4.450993537902832, -1.3600486516952515], + [1.8970777988433838, -7.841775894165039], + [-2.244227647781372, 0.7846710681915283], + [-2.6785523891448975, -3.0234384536743164], + [-3.770203113555908, -3.151911497116089], + [-4.073174953460693, -1.4088975191116333], + [-2.524655818939209, 6.583859443664551], + [0.22909051179885864, -0.5258033871650696], + [2.8891477584838867, -4.552927494049072], + [-6.895973205566406, -0.29327261447906494], + [-4.078738689422607, 4.706351280212402], + [-3.243194580078125, -2.4094913005828857], + [-7.328505039215088, -1.005268931388855], + [8.928104400634766, -2.4385128021240234], + [-4.878124713897705, 5.746421813964844], + [-0.3272290825843811, 11.226469039916992], + [2.0433173179626465, 1.5697568655014038], + [-7.039451599121094, 8.622200012207031], + [2.953477382659912, -4.708131313323975], + [-0.18533402681350708, 9.784786224365234], + [1.88266122341156, -3.6205427646636963], + [3.0076892375946045, 6.904757499694824], + [-5.372210502624512, 7.511345863342285], + [-6.181309700012207, 6.778540134429932], + [-5.340043544769287, -3.7363741397857666], + [-2.5379931926727295, -0.21431440114974976], + [-3.4658021926879883, 5.968900680541992], + [-6.022489070892334, -2.1436336040496826], + [6.416911602020264, -1.5262731313705444], + [1.239432454109192, -3.8593170642852783], + [1.7435576915740967, -5.450892448425293], + [-1.0680773258209229, 8.540398597717285], + [-2.2353689670562744, 1.7443839311599731], + [-4.950339317321777, -3.1177170276641846], + [2.4014461040496826, -3.522071361541748], + [-1.7090015411376953, 0.7497485876083374], + [3.1524860858917236, -4.71524715423584], + [-4.319159984588623, -1.8115967512130737], + [-5.265935897827148, 7.013364791870117], + [4.2289886474609375, -2.839979648590088], + [2.2689387798309326, -3.55788516998291], + [9.309279441833496, -2.437761068344116], + [3.085706949234009, -4.636247158050537], + [-0.09928233176469803, -1.6361554861068726], + [6.8143486976623535, -2.3160202503204346], + [8.270421028137207, -1.985191822052002], + [-0.8304059505462646, -0.3591116666793823], + [-2.577760934829712, 1.6647751331329346], + [-2.987483263015747, -4.851607322692871], + [-1.7542130947113037, 0.3982795476913452], + [-4.936820030212402, 1.8211411237716675], + [2.786619186401367, -4.312698841094971], + [2.481938123703003, -3.9594621658325195], + [-4.883720874786377, 6.021065711975098], + [-5.807923316955566, 4.201545715332031], + [0.4727727770805359, -0.8578618764877319], + [-2.188157081604004, 1.7729214429855347], + [-0.2668250799179077, 10.203950881958008], + [0.33385545015335083, 5.527435779571533], + [-3.831202745437622, 6.581919193267822], + [5.232861042022705, -2.939253330230713], + [-7.538467884063721, 9.52393913269043], + [2.1096227169036865, 5.6131486892700195], + [8.212553977966309, -2.3274405002593994], + [-2.6585116386413574, 1.4640835523605347], + [-3.1335337162017822, 6.134644031524658], + [1.426732063293457, 1.560550332069397], + [-4.740203380584717, -6.2273030281066895], + [-3.8429927825927734, -3.6146442890167236], + [-0.2406110167503357, 9.510639190673828], + [-4.667679309844971, 1.2608771324157715], + [-2.2881171703338623, -1.2541533708572388], + [0.9939910769462585, -0.10018941760063171], + [1.9257709980010986, 1.2225861549377441], + [9.541010856628418, -2.6520836353302], + [-4.604397296905518, -3.661203622817993], + [-7.562676906585693, 9.19070816040039], + [-0.027449525892734528, -0.3377360999584198], + [-2.63991641998291, 2.2129929065704346], + [2.9159207344055176, -3.7825331687927246], + [-0.4735264778137207, 8.919661521911621], + [-4.619560718536377, -3.0781710147857666], + [-6.442234992980957, 7.672530651092529], + [-5.79146671295166, -2.7468810081481934], + [-2.0601038932800293, 2.396214246749878], + [-4.6070404052734375, -0.5121053457260132], + [6.521003246307373, -3.4508492946624756], + [2.842965841293335, -4.552529811859131], + [1.5611497163772583, -3.80138897895813], + [2.0564382076263428, 6.114584445953369], + [1.0222152471542358, -7.2288923263549805], + [0.07944660633802414, -0.6501719951629639], + [1.4201624393463135, 0.5864750146865845], + [0.019473128020763397, -0.9653762578964233], + [0.029332928359508514, 10.117753028869629], + [2.002507448196411, -3.8807361125946045], + [-6.5847697257995605, 6.966407299041748], + [1.5051097869873047, -7.332492828369141], + [-0.22311252355575562, 9.68730640411377], + [3.2402706146240234, -5.209403038024902], + [2.454373359680176, -4.037564277648926], + [-0.192255437374115, 10.33108139038086], + [-5.126745700836182, -3.6533100605010986], + [-2.247969627380371, 0.8160378932952881], + [2.2829549312591553, 5.317229270935059], + [-5.947096824645996, 8.504302978515625], + [-5.183189868927002, 1.3645890951156616], + [3.2899396419525146, -4.91168212890625], + [-2.181325912475586, 1.611802101135254], + [-0.23435276746749878, 10.018415451049805], + [6.479249477386475, -2.3382999897003174], + [0.16019433736801147, 8.92266845703125], + [8.907116889953613, -2.4512341022491455], + [-3.559962511062622, -0.947698175907135], + [-8.046282768249512, 9.85197639465332], + [6.7240681648254395, -1.530302882194519], + [-6.470505714416504, -1.274415373802185], + [1.971341848373413, -3.4640953540802], + [2.8816890716552734, -4.286284446716309], + [-0.4077354073524475, -1.0173885822296143], + [2.2989141941070557, 6.0545759201049805], + [2.215909242630005, 5.218443870544434], + [-3.537273645401001, -0.8970388174057007], + [-3.4487268924713135, -0.9953570365905762], + [2.307985782623291, -4.126233100891113], + [2.8912858963012695, -4.401750564575195], + [-0.38201212882995605, 9.56204891204834], + [9.100970268249512, -2.557245969772339], + [-2.174250364303589, 2.7845375537872314], + [3.285982608795166, -4.907167911529541], + [-4.3241496086120605, -2.7541725635528564], + [1.4083372354507446, -7.67158317565918], + [-2.526315450668335, 6.597705841064453], + [1.3987154960632324, -6.921594619750977], + [-0.1916271150112152, -2.804321527481079], + [-4.779871940612793, -0.5907958745956421], + [-4.8689866065979, -2.489774465560913], + [2.8314597606658936, -5.990937232971191], + [0.7615624070167542, -5.721020698547363], + [-0.5159555673599243, 8.900897979736328], + [-4.534280300140381, -3.5901403427124023], + [2.544354200363159, -4.433802127838135], + [3.2143352031707764, -5.093774318695068], + [3.1522717475891113, -4.163271903991699], + [-3.4635684490203857, 1.1643022298812866], + [7.305722236633301, -1.7898497581481934], + [7.682452201843262, -1.8808780908584595], + [2.688455820083618, -3.866727113723755], + [-3.0063159465789795, -1.8275831937789917], + [-4.956179141998291, 2.424882173538208], + [7.3696160316467285, -1.7949193716049194], + [-3.6679046154022217, -1.821313738822937], + [3.479645252227783, 6.790121555328369], + [1.6645160913467407, 4.501590728759766], + [-4.739226341247559, 5.578688144683838], + [-5.353906631469727, 8.481217384338379], + [-2.369252920150757, 1.0024052858352661], + [-4.225090026855469, -3.9993345737457275], + [2.0318500995635986, 5.5936431884765625], + [-3.7277071475982666, -0.5394455790519714], + [2.8684518337249756, -2.7969677448272705], + [-4.035056114196777, -1.5274853706359863], + [-5.1994524002075195, -3.22825288772583], + [0.09580247849225998, -0.24023011326789856], + [3.13405442237854, -4.6979265213012695], + [-7.737218379974365, 9.424147605895996], + [-3.0885965824127197, -1.7638840675354004], + [8.908356666564941, -2.4564170837402344], + [7.417541027069092, -1.7941550016403198], + [-2.5362889766693115, 1.4073891639709473], + [0.6934217810630798, -5.9679412841796875], + [-5.487161159515381, -1.9696370363235474], + [-7.290530681610107, -1.8186432123184204], + [-4.193349361419678, 0.355288028717041], + [-2.625397205352783, 0.8743982911109924], + [-5.164921283721924, 4.405761241912842], + [8.182120323181152, -2.151442766189575], + [5.062294006347656, -1.0521308183670044], + [4.10828161239624, 6.148385524749756], + [-3.545078992843628, -1.9031604528427124], + [-3.11722731590271, -1.0669411420822144], + [-3.216700792312622, 2.8829636573791504], + [-5.123587131500244, 2.383136034011841], + [2.297118902206421, -7.083834648132324], + [2.6685585975646973, 6.125403881072998], + [-0.9323825240135193, 1.1863327026367188], + [-5.348577499389648, -4.172499656677246], + [-4.929345607757568, 2.603257894515991], + [5.780935764312744, 7.463467121124268], + [2.59837007522583, -4.281749725341797], + [5.820492267608643, -2.1049721240997314], + [-3.9988296031951904, -1.8195563554763794], + [8.32262134552002, -2.7719063758850098], + [-5.173430442810059, 5.6321210861206055], + [-4.336353778839111, 5.988487720489502], + [-3.420384168624878, 3.8916285037994385], + [1.9400713443756104, -7.477206230163574], + [-3.4129831790924072, -1.400123119354248], + [-5.7534050941467285, 4.929128646850586], + [5.597398281097412, -1.2744951248168945], + [1.4625743627548218, 5.089173793792725], + [6.547021389007568, -1.4257889986038208], + [-3.0212018489837646, 6.871734142303467], + [-1.2086358070373535, -1.9728256464004517], + [-2.094581365585327, 1.5812036991119385], + [6.450628757476807, -1.9124294519424438], + [-3.3855626583099365, 5.398871898651123], + [-3.7940399646759033, 6.210565090179443], + [-3.782735586166382, -5.840524673461914], + [-0.28897255659103394, 11.139460563659668], + [-5.4495625495910645, 7.68768310546875], + [-6.489599704742432, 1.269850730895996], + [6.090646266937256, -1.1976416110992432], + [1.6186084747314453, 5.301595687866211], + [-4.471475601196289, -2.9219815731048584], + [1.318424940109253, 1.6378613710403442], + [5.362301349639893, -0.6835951805114746], + [-4.547135829925537, 3.814906597137451], + [-4.633457660675049, -2.5145297050476074], + [-3.600839138031006, -3.569505453109741], + [1.1162800788879395, -6.834221839904785], + [-2.3851819038391113, 1.9340143203735352], + [-0.19908109307289124, -0.5942977666854858], + [-1.002304196357727, 9.086067199707031], + [-8.886872291564941, -0.8959640264511108], + [1.696228265762329, 4.874509811401367], + [-4.776268482208252, 6.095107555389404], + [2.0634875297546387, -8.156418800354004], + [2.468566656112671, -7.521100997924805], + [2.3959991931915283, 0.7439498901367188], + [-4.369603633880615, -2.987651824951172], + [1.7424827814102173, -8.695072174072266], + [-0.6984645128250122, 9.735189437866211], + [6.2255425453186035, -2.5821468830108643], + [-0.5369284152984619, 0.39844900369644165], + [-5.672705173492432, 3.3951258659362793], + [-4.658438682556152, -2.7117202281951904], + [2.871816635131836, -4.499673366546631], + [-6.650014400482178, 4.032198429107666], + [9.538590431213379, -2.6362156867980957], + [3.1718590259552, -5.260349750518799], + [1.6415631771087646, -4.567678451538086], + [0.2245098054409027, -1.0011088848114014], + [-3.038738965988159, 4.984629154205322], + [-7.181774616241455, 8.610532760620117], + [-5.485640048980713, 4.798703193664551], + [1.130739450454712, -7.482671737670898], + [4.458621978759766, -1.1336016654968262], + [3.0812957286834717, -4.645400524139404], + [2.6508100032806396, -4.127270698547363], + [-5.261606693267822, 1.6863254308700562], + [1.765407681465149, 5.228440284729004], + [5.286305904388428, -1.4611601829528809], + [5.831843852996826, 8.244037628173828], + [2.158411741256714, 4.6527934074401855], + [-0.8288257718086243, 1.637515664100647], + [-2.556655168533325, -1.4628082513809204], + [-4.457949161529541, -2.8002538681030273], + [-3.7987544536590576, -0.7342554330825806], + [-5.2590765953063965, -3.0403125286102295], + [-4.467835903167725, 1.1865123510360718], + [1.7097426652908325, 2.19665265083313], + [-2.507039785385132, -2.8675057888031006], + [-7.533586025238037, -1.697059988975525], + [-3.4341564178466797, -2.334211587905884], + [-5.007389545440674, -0.21035361289978027], + [2.3457722663879395, -5.244874477386475], + [-4.172088623046875, -2.9450881481170654], + [1.6920703649520874, -8.321680068969727], + [1.9232752323150635, -3.9267609119415283], + [0.31643179059028625, -0.3411402106285095], + [-2.573817491531372, 6.645665168762207], + [-3.3824808597564697, 2.391897439956665], + [-7.414892673492432, -1.7275029420852661], + [2.6362884044647217, -4.722774505615234], + [1.5561153888702393, 0.702985405921936], + [-0.2025851607322693, 9.540555953979492], + [-2.3914453983306885, 1.351471185684204], + [-3.0349502563476562, 5.241640567779541], + [-2.5077359676361084, 1.619003176689148], + [-0.8568013906478882, 7.8535661697387695], + [0.7111360430717468, -5.289289951324463], + [8.186771392822266, -2.9002254009246826], + [-2.828643560409546, -2.816951036453247], + [-3.9178402423858643, -3.090074300765991], + [3.0316922664642334, -8.442152976989746], + [5.009854316711426, -1.2936798334121704], + [-2.7050607204437256, -0.83363276720047], + [-5.272871494293213, -3.606578826904297], + [6.350741863250732, -1.2385286092758179], + [2.025698661804199, -9.731199264526367], + [-5.453622341156006, 3.854802131652832], + [-1.7260916233062744, 1.8579086065292358], + [-2.4206674098968506, 0.9430005550384521], + [-0.19755488634109497, 9.112876892089844], + [-3.812978982925415, -2.3359909057617188], + [7.383452892303467, -1.7281572818756104], + [-4.987900257110596, 7.562827110290527], + [1.8743739128112793, -8.924948692321777], + [3.0299298763275146, -4.561599254608154], + [-4.1792802810668945, -2.735914945602417], + [7.034509181976318, -1.7516535520553589], + [7.072902202606201, -1.522729516029358], + [-6.101414680480957, 1.2479584217071533], + [-2.0280776023864746, 2.5324292182922363], + [-0.21715742349624634, 11.163267135620117], + [2.830693244934082, -4.244733810424805], + [-7.155768871307373, -1.8114112615585327], + [0.3442879021167755, -0.7502552270889282], + [-4.661129474639893, -0.5211234092712402], + [2.791900873184204, -4.284878730773926], + [-4.72353982925415, -1.4411824941635132], + [-3.0993776321411133, 4.995454788208008], + [-6.368354320526123, 4.631180763244629], + [0.8051953315734863, 3.4033937454223633], + [2.1147823333740234, -7.803642749786377], + [1.3131533861160278, -8.415433883666992], + [-6.029867649078369, -7.064709186553955], + [-7.607951641082764, -2.3131086826324463], + [3.150954246520996, -5.996279716491699], + [-1.6677449941635132, 4.670831680297852], + [-4.1435933113098145, -1.7497276067733765], + [-2.0755116939544678, 2.4463894367218018], + [1.3136677742004395, 0.012760486453771591], + [8.144299507141113, -2.1025302410125732], + [-6.709497928619385, -1.240325927734375], + [3.174699544906616, -4.758143424987793], + [-2.0768771171569824, 2.818000555038452], + [2.7837090492248535, -4.129260063171387], + [0.22873833775520325, -2.4555907249450684], + [-2.449815034866333, 1.486946702003479], + [1.6091768741607666, 5.587745666503906], + [-3.861140727996826, 4.847629547119141], + [-2.8385002613067627, 5.92503547668457], + [-7.28815221786499, -1.6024523973464966], + [0.07737009972333908, 1.1921409368515015], + [0.11728548258543015, -0.36283180117607117], + [-4.8920416831970215, 2.3258349895477295], + [-6.4539008140563965, -1.8421589136123657], + [-6.003250598907471, -2.542710304260254], + [2.350369691848755, 5.571447372436523], + [1.2754290103912354, 0.2786256670951843], + [-7.806303977966309, -1.7683277130126953], + [-5.021867752075195, 3.8053061962127686], + [3.107252597808838, -4.890739917755127], + [-3.9739389419555664, -1.46389901638031], + [-5.8078293800354, -2.7558422088623047], + [-4.145290374755859, -3.5494821071624756], + [0.06546276062726974, 10.106199264526367], + [-7.224856376647949, 8.752944946289062], + [-4.589653015136719, -4.081313133239746], + [3.5149753093719482, 6.432835102081299], + [1.9462387561798096, 5.603187084197998], + [-4.125381946563721, 1.4380764961242676], + [-4.099762439727783, -2.0551578998565674], + [1.9435322284698486, -8.1658935546875], + [-0.47044843435287476, 12.174833297729492], + [-2.3067169189453125, 0.9185740947723389], + [-2.5352911949157715, 1.9468588829040527], + [2.4290316104888916, -3.613466739654541], + [-0.16565117239952087, -1.0531182289123535], + [8.797440528869629, -2.2604007720947266], + [1.6355736255645752, 0.5209567546844482], + [-0.3834323585033417, -1.2925530672073364], + [-5.061574935913086, 2.337786912918091], + [-4.658858776092529, -2.042163848876953], + [-0.4821811318397522, 9.873527526855469], + [-0.2271457314491272, 9.84449291229248], + [0.03548257797956467, 9.840280532836914], + [6.270314693450928, 7.787228584289551], + [5.579983234405518, 7.554652690887451], + [-1.3691291809082031, 6.015625476837158], + [-3.8451290130615234, -4.12558650970459], + [-0.34846991300582886, 8.719978332519531], + [0.13124674558639526, 8.66828441619873], + [-1.8284012079238892, 1.063690185546875], + [6.963727951049805, -1.9190559387207031], + [-3.5744271278381348, 4.267499923706055], + [-6.731918811798096, -1.6473520994186401], + [-4.820804119110107, -2.8038079738616943], + [-1.65716552734375, 1.808877944946289], + [-0.262382447719574, 9.608274459838867], + [1.8625072240829468, 0.5889428853988647], + [-4.419847011566162, -0.6799545288085938], + [-4.133629322052002, -3.166104555130005], + [-3.556098222732544, -4.542888641357422], + [-4.771055698394775, -2.892211675643921], + [1.8115544319152832, 3.442762613296509], + [-0.08859343081712723, 10.27766227722168], + [-6.477563858032227, 8.13212776184082], + [-4.871921539306641, -2.91811203956604], + [-3.075958490371704, 2.942060947418213], + [3.177565336227417, -3.8445932865142822], + [3.0746352672576904, -4.831791877746582], + [-7.353337287902832, -1.5971980094909668], + [-3.69413685798645, -1.4686129093170166], + [-6.173367500305176, 1.817478060722351], + [-3.4554851055145264, -1.80931556224823], + [-5.339983940124512, -2.5477294921875], + [3.020165205001831, -5.189282417297363], + [9.135298728942871, -2.9557390213012695], + [-4.143385410308838, 3.43742036819458], + [-5.721695423126221, -2.4365522861480713], + [3.0943245887756348, -4.645758628845215], + [2.001636028289795, -9.144920349121094], + [3.2615902423858643, -5.285672187805176], + [2.7343780994415283, 2.5974109172821045], + [1.5487778186798096, 5.236104965209961], + [-5.320127010345459, -4.553596019744873], + [-6.301886558532715, 4.34626579284668], + [8.337361335754395, -2.405418634414673], + [-6.500546932220459, -2.1711103916168213], + [-0.2948235273361206, 10.030064582824707], + [2.74873423576355, -4.1731953620910645], + [8.92512035369873, -2.5038034915924072], + [-4.94921350479126, -1.952077865600586], + [7.974502086639404, -2.6453490257263184], + [-3.7971596717834473, -1.3157341480255127], + [2.271749973297119, 0.4754905700683594], + [7.735456466674805, -1.8452093601226807], + [-6.39807653427124, 8.457810401916504], + [2.7970778942108154, -4.196498394012451], + [1.5967917442321777, 0.4624052047729492], + [9.335897445678711, -2.6147782802581787], + [3.055224895477295, -4.583993911743164], + [2.8690121173858643, -4.375392436981201], + [-1.0800608396530151, 1.2043933868408203], + [-5.027023792266846, -3.5126113891601562], + [-7.078216075897217, -0.8610826730728149], + [-3.4195239543914795, 7.632287502288818], + [2.1308951377868652, -3.5087435245513916], + [-1.9981646537780762, 1.3059048652648926], + [4.790581703186035, 7.165230751037598], + [9.147562026977539, -2.5887396335601807], + [3.091057062149048, -4.855205059051514], + [2.6214277744293213, -6.490420341491699], + [1.522322654724121, 4.641049861907959], + [-6.451107025146484, 2.9662182331085205], + [2.9010777473449707, -6.188138008117676], + [2.085681200027466, -8.01432991027832], + [-2.8146755695343018, 5.856042861938477], + [-3.789022922515869, -3.5354769229888916], + [3.048720121383667, -6.780653953552246], + [2.3604300022125244, 1.0519298315048218], + [-5.819324970245361, 2.8870136737823486], + [-2.898271322250366, -1.0180963277816772], + [-0.8945958018302917, 0.28942883014678955], + [1.3269908428192139, 5.534209251403809], + [5.798024654388428, -1.267522931098938], + [-2.415030002593994, 1.9768646955490112], + [4.580602169036865, -2.0588183403015137], + [-0.4222882390022278, -1.1616302728652954], + [-4.346004962921143, -3.804316759109497], + [5.030309677124023, 6.570573806762695], + [1.8378040790557861, 5.403660774230957], + [-5.239602565765381, -0.5789575576782227], + [-3.6171464920043945, 5.158642768859863], + [2.2071919441223145, 1.3521822690963745], + [-4.1282453536987305, 5.856986045837402], + [-2.3358802795410156, 1.7469149827957153], + [5.225764274597168, -3.913240671157837], + [-4.3362250328063965, -3.039675235748291], + [1.6545541286468506, 5.007810592651367], + [-3.818615198135376, 5.772084712982178], + [-2.350940465927124, 5.847954750061035], + [-4.716742515563965, -3.2801995277404785], + [-0.2232189178466797, -1.1290262937545776], + [-5.026138782501221, 4.600007057189941], + [3.619218111038208, 6.471989154815674], + [-0.2855697274208069, 9.475290298461914], + [-2.4165499210357666, 6.56422233581543], + [2.36974835395813, -5.676241397857666], + [-2.8159186840057373, 6.8635735511779785], + [5.944692134857178, -3.7373569011688232], + [-4.420844078063965, -0.8313393592834473], + [-0.6550806164741516, 12.649393081665039], + [3.0220067501068115, -4.6750168800354], + [-3.6944782733917236, -3.9964911937713623], + [-5.832017421722412, 6.139782905578613], + [-3.9918296337127686, 6.188405513763428], + [-0.23901605606079102, 9.47763442993164], + [-2.5555732250213623, 2.388308525085449], + [-8.090880393981934, 0.13500046730041504], + [-0.6140145659446716, -2.4451823234558105], + [-6.6038713455200195, 8.47578239440918], + [-2.4765477180480957, 1.8763689994812012], + [9.105912208557129, -2.6378400325775146], + [-2.145500898361206, 0.826903223991394], + [-6.213886737823486, -0.6612772345542908], + [-0.7577561736106873, 4.747945785522461], + [0.9203847050666809, -0.08341073989868164], + [1.7131743431091309, -3.2067863941192627], + [-5.49644136428833, 6.758518218994141], + [2.295159101486206, 4.5859551429748535], + [0.4365583658218384, 4.864274978637695], + [5.868669033050537, -1.1618975400924683], + [-2.145704746246338, -1.8661473989486694], + [5.95639181137085, -1.7884521484375], + [2.1822926998138428, -5.300335884094238], + [-4.654897689819336, 3.773848295211792], + [2.833845376968384, -4.489282608032227], + [-3.4948363304138184, -2.508427858352661], + [-6.62634801864624, -1.7964768409729004], + [6.483748912811279, -1.41400146484375], + [2.9312970638275146, -4.448346138000488], + [-2.699164628982544, 2.0579121112823486], + [-2.126800298690796, -1.143246054649353], + [3.019092321395874, -6.611541271209717], + [2.272953987121582, 0.5215839147567749], + [-5.789825916290283, 5.712547779083252], + [-0.19151651859283447, 9.29238224029541], + [-0.26885491609573364, 9.942110061645508], + [-4.472731113433838, 5.808525085449219], + [-0.20439434051513672, 9.40565013885498], + [-5.173580646514893, -3.191002130508423], + [-4.9716596603393555, 1.6982237100601196], + [1.9696400165557861, -9.419174194335938], + [-5.130611896514893, -3.7773828506469727], + [2.0021731853485107, 5.3558125495910645], + [-4.516896724700928, 4.9607954025268555], + [3.24753999710083, -5.122991561889648], + [-5.5990824699401855, -3.1056599617004395], + [-4.837731838226318, 5.478660583496094], + [0.2109295129776001, -1.0377131700515747], + [-0.18082302808761597, 10.350370407104492], + [-7.686767101287842, -1.431492567062378], + [-4.163811683654785, -3.3831381797790527], + [-2.307542562484741, -2.0458717346191406], + [-5.953698635101318, -2.64155912399292], + [-4.629119396209717, -3.941575050354004], + [0.5445820689201355, 10.399123191833496], + [-8.447248458862305, -1.3277463912963867], + [-5.423173427581787, -2.881593942642212], + [7.164610385894775, -1.8699086904525757], + [-7.0300469398498535, 8.709918975830078], + [-5.721673011779785, -2.987816095352173], + [-0.9546807408332825, -2.258086919784546], + [-5.8227972984313965, 5.095013618469238], + [-3.341020345687866, 5.887558937072754], + [-0.20010942220687866, 9.682943344116211], + [-5.614797115325928, 5.488954544067383], + [-0.12972256541252136, -1.3945225477218628], + [-0.4868791401386261, -0.36567580699920654], + [-5.09155797958374, -2.5683400630950928], + [2.822472333908081, -4.44088888168335], + [-2.3355391025543213, -1.7466012239456177], + [-5.396503925323486, 2.0800445079803467], + [2.2920119762420654, -4.192043781280518], + [-3.5418758392333984, -4.0202460289001465], + [3.2723782062530518, 6.557214736938477], + [2.8982911109924316, 4.734039783477783], + [-5.433812618255615, 6.13239860534668], + [-2.562319755554199, 2.6739678382873535], + [-0.8133618831634521, 8.367010116577148], + [-0.2746879458427429, 9.453617095947266], + [-5.4111809730529785, 4.5061726570129395], + [3.2790486812591553, 5.498099327087402], + [-0.5447905659675598, -1.4328206777572632], + [-5.050636291503906, -2.9616758823394775], + [7.345530033111572, -2.1958258152008057], + [-4.852544784545898, -0.18802213668823242], + [8.40631103515625, -2.4017035961151123], + [-0.3996221423149109, 9.61197280883789], + [-5.1440324783325195, -1.598738431930542], + [2.6183974742889404, 5.255027770996094], + [2.8803799152374268, -4.381803035736084], + [-2.62744402885437, -4.230707168579102], + [6.177221775054932, -2.9309723377227783], + [-4.4753899574279785, 0.8905707001686096], + [1.4377546310424805, -2.9836995601654053], + [0.8322771191596985, 5.873002052307129], + [-1.6142157316207886, 5.9989728927612305], + [2.706794500350952, -5.199038028717041], + [-3.6181652545928955, -2.1997973918914795], + [-4.946728229522705, -1.8927756547927856], + [-0.8929853439331055, 0.9859153032302856], + [8.173008918762207, -2.1212611198425293], + [2.987778663635254, -6.470632553100586], + [8.053006172180176, -2.8454535007476807], + [-3.37734055519104, -0.3204176425933838], + [1.8702683448791504, 5.5757269859313965], + [-6.73124361038208, 1.6518627405166626], + [9.066807746887207, -2.613316774368286], + [-2.8702690601348877, 5.050719261169434], + [4.595516204833984, 7.096118927001953], + [-0.3176019787788391, 10.059183120727539], + [-3.7494826316833496, 0.6830973625183105], + [-4.4544806480407715, -0.9915097951889038], + [-3.3929502964019775, 6.584262371063232], + [2.7563576698303223, -4.253620147705078], + [-4.708892345428467, -2.0484769344329834], + [2.82422137260437, -4.726058006286621], + [-3.836225748062134, -2.107074499130249], + [3.2253806591033936, -5.500321865081787], + [-2.9072351455688477, -4.903194427490234], + [6.283166885375977, -0.7206768989562988], + [-3.2091753482818604, 6.8463945388793945], + [-0.13864374160766602, 10.251787185668945], + [2.2995407581329346, 1.0324959754943848], + [-4.960383892059326, -3.2524311542510986], + [-0.8858464956283569, -0.6935220956802368], + [-1.1375001668930054, 8.969934463500977], + [-6.316351413726807, 8.063826560974121], + [-1.0150378942489624, -1.4249690771102905], + [-2.6293227672576904, 1.9899121522903442], + [-4.295691967010498, -2.312279462814331], + [-4.149056434631348, -1.104079008102417], + [-6.493217945098877, -1.4824854135513306], + [7.835812091827393, -2.063965320587158], + [-7.353486061096191, -2.0081655979156494], + [0.9664120078086853, -0.4843113422393799], + [8.281792640686035, -2.201162576675415], + [-0.1247057393193245, 9.782764434814453], + [2.242990493774414, -4.48538875579834], + [-3.475346803665161, -4.109013557434082], + [6.931713104248047, -0.7845317125320435], + [-2.559767484664917, 2.093494415283203], + [0.24690166115760803, -3.2549471855163574], + [-1.2179479598999023, 5.466563701629639], + [2.368640661239624, -5.132549285888672], + [2.108754873275757, -3.222876787185669], + [-5.31519079208374, -3.3636908531188965], + [6.064367771148682, -1.697529911994934], + [-0.3555406332015991, 9.410770416259766], + [-5.235105037689209, -3.915544271469116], + [2.8906524181365967, -4.918586254119873], + [-4.7074151039123535, -4.125184059143066], + [-3.765108823776245, -0.18568825721740723], + [-0.18052035570144653, 10.658425331115723], + [-4.553483009338379, -5.881481170654297], + [2.5440616607666016, -6.078007698059082], + [-5.448609352111816, -2.2278382778167725], + [8.586033821105957, -2.218621253967285], + [-4.934876441955566, -1.0315744876861572], + [2.151423454284668, 5.568299293518066], + [9.567659378051758, -2.6222281455993652], + [-0.1405007243156433, 9.700176239013672], + [-0.5727624297142029, -0.5695008039474487], + [4.990523338317871, 0.09099972248077393], + [3.0532174110412598, -4.601484298706055], + [-4.905010223388672, 2.957087278366089], + [1.5647026300430298, 0.032905030995607376], + [-5.885857105255127, -2.528975248336792], + [-4.713563919067383, -3.1742618083953857], + [-3.4534034729003906, -4.445858001708984], + [5.428345680236816, -1.3058933019638062], + [-2.660876989364624, 0.8561393022537231], + [9.077791213989258, -2.668524980545044], + [8.312491416931152, -2.3219187259674072], + [2.981473207473755, -4.535853862762451], + [9.205838203430176, -2.5011556148529053], + [-3.9021875858306885, 3.0695455074310303], + [2.8125481605529785, -5.955515384674072], + [-6.976609230041504, -0.8096371293067932], + [-4.588990211486816, -2.3508377075195312], + [-3.328979015350342, -0.36411476135253906], + [2.138645887374878, -7.083437919616699], + [-6.913456439971924, -0.261288046836853], + [-2.3111379146575928, 1.8460739850997925], + [5.845177173614502, 7.539462089538574], + [-5.861483573913574, -2.6507363319396973], + [-7.167236804962158, -1.918447494506836], + [2.97811222076416, 1.3947283029556274], + [2.0196573734283447, -9.813295364379883], + [1.4779069423675537, -5.5684685707092285], + [0.5452849268913269, 6.11536169052124], + [-4.6219658851623535, -4.479100704193115], + [-3.9301884174346924, -4.118078231811523], + [-2.428982734680176, 1.3655860424041748], + [-3.869316339492798, -3.6563000679016113], + [8.034881591796875, -2.076901912689209], + [2.4669442176818848, -3.5944759845733643], + [1.9137825965881348, 0.45308732986450195], + [8.506522178649902, -2.2478277683258057], + [2.9379079341888428, -4.441807746887207], + [3.0612642765045166, -6.136860370635986], + [-3.8412020206451416, -1.9518815279006958], + [1.9644262790679932, -6.214142322540283], + [3.0160672664642334, -2.183689832687378], + [-0.7575318217277527, -1.1850969791412354], + [2.6200876235961914, -7.563616752624512], + [-4.7637553215026855, 8.06156063079834], + [-2.291947603225708, 1.6915613412857056], + [-3.2102584838867188, -1.9639207124710083], + [2.610917329788208, -4.315122604370117], + [-5.225651264190674, -3.5231220722198486], + [-0.4222971200942993, 10.135339736938477], + [-1.1735098361968994, 1.4450193643569946], + [5.5957818031311035, 7.562136650085449], + [-4.997069835662842, -3.7538115978240967], + [-5.393429279327393, -3.5439956188201904], + [-6.065960884094238, 4.779194355010986], + [3.8603017330169678, 6.831128120422363], + [-5.938119888305664, 2.710228443145752], + [3.514545440673828, 6.330313205718994], + [3.3092844486236572, -5.0824875831604], + [1.5774202346801758, 4.991090297698975], + [-7.076412677764893, -1.8166028261184692], + [-2.5410828590393066, 1.697933554649353], + [2.1980016231536865, -5.066886901855469], + [-2.0426089763641357, 0.5907847881317139], + [0.8531798124313354, -7.226034641265869], + [-8.07414722442627, 9.849278450012207], + [-0.044405288994312286, 8.028772354125977], + [7.445179462432861, -2.0669827461242676], + [-5.5753350257873535, -5.469884872436523], + [-2.2263340950012207, 2.876396417617798], + [0.43504732847213745, 4.874664783477783], + [1.9407975673675537, 5.289602279663086], + [-5.027326583862305, -2.2603018283843994], + [2.7080132961273193, -4.196055889129639], + [1.2518558502197266, -7.55088996887207], + [-2.1202642917633057, 2.345045328140259], + [2.506589889526367, 0.8526560068130493], + [3.0090911388397217, -4.779443740844727], + [-6.399564743041992, 7.695743560791016], + [-4.205916881561279, 5.096216678619385], + [1.759883165359497, 0.31406959891319275], + [2.2137415409088135, -6.35137939453125], + [8.601483345031738, -2.308539628982544], + [-3.783825159072876, -0.808224081993103], + [-5.123053550720215, -0.7733334898948669], + [-0.16142070293426514, -1.6150834560394287], + [8.592589378356934, -2.551042079925537], + [3.058685064315796, 6.168356895446777], + [2.09021258354187, 5.510939598083496], + [-4.634644031524658, -2.688075065612793], + [2.2905373573303223, 5.422855377197266], + [3.641845464706421, -4.7740888595581055], + [-5.950410842895508, -2.5946433544158936], + [-2.2948784828186035, 1.2797800302505493], + [-3.9809682369232178, -3.385749578475952], + [-3.1393630504608154, -3.5127484798431396], + [-2.239711046218872, -1.1419988870620728], + [6.649048805236816, -2.2394559383392334], + [-4.608900547027588, -2.260892391204834], + [-2.0983211994171143, -2.741584539413452], + [-3.182184934616089, -1.6483899354934692], + [2.7523529529571533, -6.107943058013916], + [-4.1858086585998535, -3.970442295074463], + [2.470937490463257, 0.8066027760505676], + [-4.519859790802002, -2.2544946670532227], + [0.6383253931999207, 0.9362097978591919], + [3.2549917697906494, 6.353419303894043], + [-2.552802801132202, -2.8269760608673096], + [-6.4744391441345215, 3.659308671951294], + [7.027646541595459, -2.690307378768921], + [2.5258021354675293, -6.998124599456787], + [-2.137066602706909, 1.166846513748169], + [5.2952446937561035, -4.320338249206543], + [9.819066047668457, -2.68528151512146], + [-2.4807920455932617, 2.1112685203552246], + [1.694949746131897, 0.28952980041503906], + [2.7007014751434326, 6.219037055969238], + [-5.821587085723877, 6.752546310424805], + [-3.99336838722229, -1.32804274559021], + [6.82728385925293, -1.748006820678711], + [-5.741851806640625, -2.8531911373138428], + [-5.610787868499756, 2.2108559608459473], + [-2.6380598545074463, 2.4945569038391113], + [-4.121365547180176, -1.5783015489578247], + [1.863270878791809, 6.086151123046875], + [3.2277987003326416, -4.825989246368408], + [2.893887996673584, -4.446026802062988], + [8.6748628616333, -2.283254861831665], + [6.669200897216797, -0.8741734027862549], + [7.320204257965088, -2.3902132511138916], + [2.2494876384735107, -6.467883110046387], + [8.867515563964844, -2.502612829208374], + [2.177814245223999, -3.9743235111236572], + [-3.2750465869903564, 5.153802394866943], + [-3.298112154006958, 4.544078826904297], + [-4.109680652618408, -0.24651801586151123], + [5.798761367797852, -1.1644126176834106], + [5.2269487380981445, -1.4730526208877563], + [-0.12529641389846802, 9.414363861083984], + [1.1362872123718262, -7.255578994750977], + [-4.133404731750488, -3.659601926803589], + [-5.490069389343262, 5.097641468048096], + [4.737321376800537, 6.983687400817871], + [9.150277137756348, -2.5357162952423096], + [3.546924352645874, 6.596379280090332], + [2.0545737743377686, -9.596749305725098], + [2.703749179840088, -4.097232341766357], + [-0.25281769037246704, 10.393558502197266], + [-6.38923454284668, -2.319472074508667], + [8.766594886779785, -2.7350070476531982], + [-4.597537994384766, 4.366745948791504], + [3.0359363555908203, -4.865923881530762], + [-5.9028825759887695, 7.990090370178223], + [-7.999399185180664, -1.3555619716644287], + [-0.6860212683677673, -1.569743275642395], + [1.6176440715789795, 5.731183052062988], + [4.476775646209717, -4.56606388092041], + [3.440391778945923, -5.12868070602417], + [6.745349884033203, -1.401307225227356], + [8.1993989944458, -2.5520317554473877], + [-5.366119861602783, 6.712587356567383], + [-6.048360347747803, 2.0872623920440674], + [1.5648655891418457, -4.676023483276367], + [0.333983451128006, -0.9665284156799316], + [-4.9814934730529785, 6.932485580444336], + [-4.370413303375244, 3.9369869232177734], + [2.0539209842681885, -4.040363788604736], + [-4.795028209686279, -2.5028271675109863], + [-4.157400131225586, -2.3348968029022217], + [-3.3266782760620117, -1.892170786857605], + [-4.87202262878418, -4.482479572296143], + [-2.5742087364196777, 2.2000021934509277], + [-2.355922222137451, 1.4622337818145752], + [7.994784832000732, -2.413264513015747], + [1.1926071643829346, -6.853759288787842], + [6.88976526260376, -1.7005285024642944], + [-5.771449089050293, -4.009886264801025], + [-5.288169860839844, -2.9272572994232178], + [-0.4591946005821228, -1.8803173303604126], + [0.6081410646438599, -0.8265022039413452], + [-5.882111072540283, 6.750608444213867], + [-0.24501889944076538, -0.7930517196655273], + [-6.598056316375732, -1.722155213356018], + [-0.061340637505054474, 9.69709587097168], + [-1.128550410270691, -0.614145040512085], + [4.460691452026367, -3.382869243621826], + [6.638532638549805, -0.986423671245575], + [-1.0628836154937744, -0.6880618333816528], + [3.1402595043182373, -4.999567985534668], + [5.7199201583862305, -1.0869824886322021], + [-6.151184558868408, 7.651187896728516], + [-0.38131430745124817, -0.6650820374488831], + [1.5072393417358398, -6.342978000640869], + [-6.062526226043701, 7.213029861450195], + [-4.725924968719482, -3.2876720428466797], + [-6.73103666305542, 8.336366653442383], + [2.5489370822906494, -4.058637619018555], + [-0.4037306308746338, 9.3905611038208], + [-1.4258767366409302, 1.8318171501159668], + [-6.1462721824646, 8.365347862243652], + [1.5470643043518066, 3.717726945877075], + [8.115118026733398, -2.3075711727142334], + [5.793863296508789, -4.007246971130371], + [1.1196403503417969, 0.06774936616420746], + [-2.714979887008667, -1.8616993427276611], + [-2.0559678077697754, 0.18533706665039062], + [-5.521951198577881, 4.355289459228516], + [-6.7663469314575195, 8.52835464477539], + [-4.8888959884643555, 3.7351157665252686], + [-3.5648953914642334, 6.088190078735352], + [2.835047960281372, -4.329244613647461], + [-5.478682041168213, 7.475337982177734], + [-5.646016597747803, -2.611948251724243], + [-5.465979099273682, -1.7789080142974854], + [1.9421970844268799, 4.737132549285889], + [2.409489393234253, -6.118492126464844], + [-0.3428909182548523, 8.591598510742188], + [-6.1639275550842285, 4.682299613952637], + [-3.0346434116363525, -1.9436269998550415], + [3.1989388465881348, -5.034329891204834], + [-4.290887832641602, 4.4316511154174805], + [1.7159967422485352, -4.147297382354736], + [-4.14321756362915, -1.44492769241333], + [2.336520195007324, 5.548545837402344], + [-0.2629472613334656, -1.0971077680587769], + [6.936959266662598, -5.133367538452148], + [-5.037522792816162, -3.192636489868164], + [-3.913865327835083, -3.6106786727905273], + [3.562493085861206, -0.6219987273216248], + [-3.4346237182617188, 7.196590423583984], + [1.828134536743164, 1.3337715864181519], + [2.0528323650360107, -7.673206806182861], + [2.7778613567352295, -4.207738876342773], + [2.9414520263671875, -4.6481781005859375], + [2.5657799243927, -6.392965316772461], + [-5.9344258308410645, 7.229570388793945], + [0.836329996585846, -7.4822564125061035], + [-4.200214862823486, -1.791267991065979], + [-4.260725498199463, -1.5511995553970337], + [6.5830397605896, -1.5366350412368774], + [-5.586822986602783, -3.5811707973480225], + [-6.082942008972168, -2.569768190383911], + [-2.6912882328033447, -3.243870973587036], + [-6.608914375305176, 8.024036407470703], + [-4.621435642242432, 0.6726956367492676], + [-3.2953226566314697, 5.491166114807129], + [-4.581656455993652, 0.893572986125946], + [-6.66066837310791, -1.7029664516448975], + [0.6591623425483704, 0.8817753791809082], + [7.310171127319336, -2.463792324066162], + [2.856039047241211, 1.3171300888061523], + [-3.3144941329956055, -4.00968599319458], + [-0.015560097992420197, 9.372085571289062], + [2.9852731227874756, -4.510145664215088], + [-6.951848030090332, -1.3769476413726807], + [-2.6031434535980225, -1.7178163528442383], + [4.189891338348389, 6.947309494018555], + [8.636393547058105, -2.42159104347229], + [2.659558057785034, 5.348017692565918], + [-6.985836029052734, -1.0123504400253296], + [-0.3932914733886719, 9.145187377929688], + [-3.9648921489715576, 0.08336752653121948], + [-6.327993392944336, 7.633126258850098], + [-0.5916218161582947, 5.919877052307129], + [-4.58247709274292, -2.9294700622558594], + [-2.797516107559204, 2.899822950363159], + [2.8465678691864014, -2.2623674869537354], + [-3.5573410987854004, 1.8403407335281372], + [1.5883119106292725, 0.46461009979248047], + [-3.01119065284729, 6.991888523101807], + [-0.4658026695251465, 5.18757438659668], + [3.436846971511841, -5.1188740730285645], + [1.4804868698120117, -5.407972812652588], + [-1.1947596073150635, 4.782615661621094], + [5.884790897369385, -2.5341596603393555], + [6.12762451171875, -1.1984003782272339], + [-0.6077194809913635, 9.103166580200195], + [-4.360589027404785, -1.8237987756729126], + [3.0646603107452393, -5.641089916229248], + [3.0289523601531982, -4.652923583984375], + [3.0156333446502686, -0.9948140382766724], + [-7.002283573150635, 8.444862365722656], + [-3.2785136699676514, -3.0058183670043945], + [-5.571712493896484, 7.321591377258301], + [-5.2528395652771, 6.757289886474609], + [-0.6074404120445251, 9.59239387512207], + [9.346170425415039, -2.6066086292266846], + [3.3187363147735596, -5.020962715148926], + [3.0449349880218506, -4.646150588989258], + [2.0206973552703857, 5.790182113647461], + [-0.6079121232032776, 10.506954193115234], + [-2.9776694774627686, 2.3456807136535645], + [-7.159756183624268, 8.588408470153809], + [2.0318055152893066, -3.3602709770202637], + [2.7690165042877197, -4.24064826965332], + [3.0522732734680176, -4.57615327835083], + [1.7896374464035034, -8.09539794921875], + [-4.395852088928223, -3.205212354660034], + [-0.40575364232063293, -0.8760577440261841], + [-5.707019329071045, -1.6093469858169556], + [2.936509847640991, -4.732611656188965], + [-7.575770854949951, -0.5140568017959595], + [-4.856583118438721, 7.598776817321777], + [-5.584886074066162, 8.166922569274902], + [-0.552839994430542, 9.110599517822266], + [-0.08729846030473709, -1.1296682357788086], + [-0.07429558783769608, 10.15369987487793], + [-4.215822696685791, 2.839291572570801], + [-2.2786500453948975, 0.5812827348709106], + [3.1704180240631104, -2.434440851211548], + [-1.5949044227600098, 2.0931546688079834], + [-0.2787438631057739, -1.2833225727081299], + [2.6203320026397705, -4.198486328125], + [-3.7659528255462646, -3.3751862049102783], + [8.055986404418945, -2.0458362102508545], + [-6.374948978424072, -2.354806423187256], + [-4.00671911239624, -0.9855480194091797], + [-2.239055633544922, -0.7119905948638916], + [9.294102668762207, -2.7023825645446777], + [-4.241373538970947, -4.206275939941406], + [1.8650000095367432, -6.045376300811768], + [-3.0292699337005615, 6.724427223205566], + [-4.918515682220459, 0.13500678539276123], + [-5.442932605743408, -2.957801103591919], + [0.44607841968536377, -5.757291793823242], + [2.9428250789642334, -4.427157878875732], + [2.727001428604126, 0.9860577583312988], + [2.9852163791656494, -5.161411285400391], + [1.762791395187378, -5.815506458282471], + [9.347628593444824, -2.6516611576080322], + [2.3351809978485107, -5.482730388641357], + [-5.234479904174805, 6.342618465423584], + [1.8734627962112427, 4.863043785095215], + [6.5148210525512695, -3.026735305786133], + [0.828186571598053, 0.5053764581680298], + [3.1068434715270996, -4.666584014892578], + [0.6376785635948181, -0.15592354536056519], + [-2.8191840648651123, 2.9095206260681152], + [-4.113291263580322, -2.5651767253875732], + [-5.343696117401123, -2.4770333766937256], + [-2.5893733501434326, 5.847024917602539], + [-1.6959214210510254, 0.5827276110649109], + [-0.05177135020494461, 9.70626163482666], + [2.2058589458465576, 5.696288108825684], + [-0.27212536334991455, 9.630268096923828], + [-5.361631870269775, -2.339622735977173], + [-5.0020551681518555, 4.632998466491699], + [-3.8223464488983154, -3.417915105819702], + [2.7097437381744385, -4.1249680519104], + [2.4133262634277344, 6.005664825439453], + [-3.096409797668457, -1.7140824794769287], + [-0.45896202325820923, 11.306840896606445], + [6.147855758666992, -1.1902295351028442], + [-7.135610580444336, 7.709652423858643], + [0.0031852051615715027, -1.204689860343933], + [-2.3639111518859863, 1.4915961027145386], + [-3.5057103633880615, -3.108036756515503], + [-6.337554454803467, -1.757548451423645], + [9.54899787902832, -2.6545941829681396], + [1.1201910972595215, 3.9344046115875244], + [1.6543753147125244, 5.213057041168213], + [6.051196098327637, -1.9983621835708618], + [-5.443822383880615, 6.834771156311035], + [9.83319091796875, -2.7926137447357178], + [2.3740179538726807, -3.777667284011841], + [-2.1728575229644775, 1.1121145486831665], + [-1.223994255065918, -1.2248823642730713], + [-6.80091667175293, 8.28960132598877], + [9.230603218078613, -2.518666982650757], + [-4.16595983505249, -3.0484120845794678], + [-4.181704044342041, -3.6631217002868652], + [-1.6706784963607788, -1.1416012048721313], + [-0.2674641013145447, 9.714239120483398], + [-4.437479019165039, 6.006803512573242], + [-2.6963069438934326, 2.3187954425811768], + [3.168644666671753, -5.045701503753662], + [2.5491578578948975, -3.885765552520752], + [6.5879411697387695, -1.58661949634552], + [-4.534760475158691, -3.6143345832824707], + [-2.1531405448913574, 2.6827409267425537], + [2.1705245971679688, 5.91505241394043], + [4.342502593994141, 7.134733200073242], + [-3.907306671142578, -3.2573533058166504], + [-4.932690620422363, -2.943833112716675], + [-3.3103644847869873, -0.6148838996887207], + [-2.547227382659912, 0.555524468421936], + [-1.5907832384109497, 0.9536519050598145], + [-6.481985569000244, 7.879150867462158], + [-0.5734989643096924, -3.4533703327178955], + [2.1647541522979736, -8.466477394104004], + [-0.29985588788986206, 11.230928421020508], + [-2.357569694519043, 0.9971837997436523], + [-4.782242774963379, -1.466546654701233], + [-0.039056338369846344, 1.486247181892395], + [-2.071753740310669, 2.7061290740966797], + [-1.7638111114501953, 5.352288246154785], + [-0.6339100003242493, -1.1916922330856323], + [-4.4539618492126465, -1.842824935913086], + [-0.5984199643135071, 10.409239768981934], + [-4.723626613616943, -4.748000144958496], + [6.433609962463379, -2.341872453689575], + [8.088094711303711, -2.372199296951294], + [2.6834018230438232, -4.085674285888672], + [6.653857707977295, -4.841609001159668], + [2.8479156494140625, -4.376242637634277], + [-3.869568109512329, 5.049923896789551], + [-5.149569034576416, -2.3751814365386963], + [-5.344409942626953, -2.8110649585723877], + [3.1306772232055664, -4.7288336753845215], + [-2.527540922164917, -3.946262836456299], + [1.8006986379623413, -7.693762302398682], + [2.492506742477417, -4.261937141418457], + [-5.921453952789307, 3.5661990642547607], + [-5.47559118270874, -3.956953287124634], + [-2.4381823539733887, 2.181614398956299], + [-4.704280376434326, -5.007721900939941], + [2.3780319690704346, -2.4723777770996094], + [-3.6477339267730713, -4.385902404785156], + [0.3699607253074646, -5.892538070678711], + [1.626115322113037, 0.12310917675495148], + [1.7035670280456543, -8.774837493896484], + [-5.787855625152588, -2.8682515621185303], + [-3.4806454181671143, -3.0172364711761475], + [1.035277009010315, 0.15725401043891907], + [-7.050521373748779, -1.243087887763977], + [-5.0437703132629395, -2.399365186691284], + [2.899158239364624, 0.7855731844902039], + [-2.252476692199707, 5.452084541320801], + [-2.489640951156616, -0.4588151276111603], + [0.9336414933204651, -7.531463623046875], + [-5.0344977378845215, -2.3598062992095947], + [-4.957891941070557, 8.016490936279297], + [-4.707590103149414, -2.092658758163452], + [2.0057132244110107, 3.703221321105957], + [-2.336474895477295, 1.681531310081482], + [-4.248188495635986, -1.5350571870803833], + [-0.21608948707580566, -0.9538227319717407], + [-0.31444352865219116, 9.822101593017578], + [-0.1657337248325348, -0.744767427444458], + [-2.515097141265869, 2.121537685394287], + [-2.3099238872528076, 2.4556994438171387], + [-3.989331007003784, -3.9869349002838135], + [-5.150048732757568, 0.3849048614501953], + [-3.491238594055176, -1.9075806140899658], + [-3.533144474029541, -2.363710641860962], + [-2.6964352130889893, 2.0292258262634277], + [-1.888040542602539, 6.257279396057129], + [-0.33885377645492554, 10.804328918457031], + [1.0687988996505737, 5.6255083084106445], + [-5.772521495819092, -0.12506353855133057], + [-7.166032314300537, -1.8444949388504028], + [-6.800550937652588, -1.272909164428711], + [-5.424877643585205, -2.7515342235565186], + [-5.971786975860596, 5.947637557983398], + [2.914257764816284, -4.461655616760254], + [-0.10956449061632156, 9.790151596069336], + [-3.3501136302948, -0.8938174247741699], + [-1.3387324810028076, 1.4172861576080322], + [-0.9576112627983093, 1.5938855409622192], + [-4.643571376800537, 1.3845006227493286], + [2.5299715995788574, -3.917461633682251], + [-0.22851908206939697, 9.726943969726562], + [-3.6575889587402344, 5.592548847198486], + [-4.680151462554932, -3.1035757064819336], + [-4.512824058532715, -3.0008583068847656], + [-4.1209492683410645, -1.9207658767700195], + [5.4269185066223145, -1.0446059703826904], + [-3.747154712677002, 4.400162220001221], + [8.536139488220215, -2.3616766929626465], + [-7.293411731719971, 1.543586015701294], + [-0.2868387699127197, 10.000731468200684], + [-6.763613224029541, 8.427364349365234], + [-3.5122087001800537, -2.090338945388794], + [-2.1039950847625732, 2.102712631225586], + [-0.8282304406166077, 6.6870317459106445], + [-4.9128098487854, -2.5837385654449463], + [-4.003636360168457, 6.551455497741699], + [-2.072380542755127, 0.8827181458473206], + [-2.900613307952881, 2.3786654472351074], + [-2.3791322708129883, 1.8087494373321533], + [1.6176797151565552, 2.9817397594451904], + [4.768737316131592, 7.095342636108398], + [6.616262435913086, -1.6864129304885864], + [8.456830978393555, -2.3769407272338867], + [-3.2344720363616943, -5.20186710357666], + [1.052861213684082, -7.223258018493652], + [9.261002540588379, -2.522526741027832], + [-4.64205265045166, -3.3965022563934326], + [-3.900562047958374, 3.397901773452759], + [3.0356576442718506, -5.047671794891357], + [1.9779942035675049, -7.068830490112305], + [-3.9939146041870117, 4.188808441162109], + [-5.88287878036499, -0.651465892791748], + [3.0174176692962646, -4.5363969802856445], + [1.356397271156311, -4.7585530281066895], + [-0.3026067614555359, 9.53029727935791], + [-4.785614967346191, -3.8787267208099365], + [1.2701356410980225, -7.361272811889648], + [10.522542953491211, -2.900953769683838], + [-4.527405261993408, -2.0849344730377197], + [-0.3196672797203064, 9.598382949829102], + [0.8351344466209412, 10.182391166687012], + [-1.1352691650390625, -1.8834205865859985], + [2.9100942611694336, -6.815346717834473], + [-4.47364616394043, 1.0718482732772827], + [-0.8514477014541626, -1.4363890886306763], + [6.44959020614624, -2.6108005046844482], + [-0.4741823673248291, 8.656831741333008], + [7.1819610595703125, -3.5487406253814697], + [2.348076105117798, 5.610075950622559], + [-2.6698503494262695, -0.23941892385482788], + [-5.257583141326904, 4.200746059417725], + [3.033724546432495, -4.5605010986328125], + [2.5767858028411865, -3.956112861633301], + [-4.776073455810547, 5.067911148071289], + [7.320717811584473, -1.3820277452468872], + [0.8009966015815735, 0.44899803400039673], + [-0.1755693554878235, 10.038427352905273], + [8.457296371459961, -2.872718572616577], + [-4.125645160675049, 8.291659355163574], + [-5.373725414276123, 6.583857536315918], + [-5.858297824859619, -1.6016546487808228], + [1.7229934930801392, -8.042701721191406], + [-6.627857685089111, -1.7003341913223267], + [2.2144007682800293, 5.926632881164551], + [-1.022003173828125, -3.1128389835357666], + [-5.429582118988037, 4.599930286407471], + [-0.2011680006980896, 9.881525039672852], + [2.975938081741333, -7.095190048217773], + [9.147507667541504, -2.6260087490081787], + [-3.529592990875244, -5.532353401184082], + [2.0038344860076904, 5.713093280792236], + [-5.240720748901367, -3.5978128910064697], + [4.387516498565674, 6.840274333953857], + [6.375800609588623, -1.7034791707992554], + [-6.169128894805908, 7.738160610198975], + [-6.696920871734619, 7.993722915649414], + [0.319048672914505, -0.7716747522354126], + [1.785067081451416, 5.180896759033203], + [2.500941514968872, -2.560746431350708], + [-4.561057090759277, 3.783889055252075], + [-2.3229401111602783, 1.3356565237045288], + [2.051499843597412, 4.8470869064331055], + [-4.050366401672363, -2.661698341369629], + [8.719843864440918, -2.1659443378448486], + [2.627896785736084, -3.9764163494110107], + [-2.4370110034942627, 1.5859688520431519], + [0.0020944401621818542, 9.572840690612793], + [9.208639144897461, -2.57934832572937], + [-5.199880123138428, -3.4591708183288574], + [-5.273068904876709, 6.386584758758545], + [-5.4391608238220215, -1.2315382957458496], + [-3.1952080726623535, -5.345653533935547], + [-5.687626361846924, 3.3760054111480713], + [-7.154440879821777, -1.9593318700790405], + [-3.978130340576172, 6.492697715759277], + [-4.477274417877197, -2.298614263534546], + [-5.070088863372803, -3.92891526222229], + [-4.8282904624938965, -4.2736406326293945], + [-5.3309783935546875, 6.425055027008057], + [2.5599448680877686, -5.284813404083252], + [2.949549436569214, -4.440662384033203], + [-3.9006166458129883, 5.6075334548950195], + [-4.99110746383667, -2.7625248432159424], + [2.611097574234009, -6.922622203826904], + [6.639301776885986, -2.7168080806732178], + [2.2498269081115723, 0.5683997869491577], + [4.09023904800415, -3.7370548248291016], + [6.841264724731445, -1.4153072834014893], + [3.2529311180114746, -4.869782447814941], + [-4.2485432624816895, -0.0392417348921299], + [1.495021104812622, 4.1717448234558105], + [0.9641709923744202, 1.455307126045227], + [0.9797366261482239, -0.2881005108356476], + [5.338903427124023, 7.466174125671387], + [-2.515772819519043, 1.9857734441757202], + [2.7536890506744385, -4.174898624420166], + [-0.33020472526550293, 11.07638931274414], + [4.140414714813232, -1.7782137393951416], + [2.852799654006958, -4.525609016418457], + [1.2322889566421509, -6.126431465148926], + [-6.400308609008789, -1.8083595037460327], + [2.8971335887908936, -4.426638126373291], + [3.3507399559020996, 5.235941410064697], + [3.037997007369995, -4.7027692794799805], + [-0.40225154161453247, 10.078755378723145], + [-5.283151149749756, -1.9263757467269897], + [-4.06660270690918, -4.518851280212402], + [-4.003035068511963, 6.922574996948242], + [-0.11905590444803238, -0.4972058832645416], + [-0.2888335585594177, 11.038570404052734], + [-6.12750244140625, 6.815650939941406], + [-5.782312393188477, -1.7666064500808716], + [8.549637794494629, -2.3212997913360596], + [-2.708773612976074, 1.406388282775879], + [2.954721450805664, -4.594449996948242], + [-7.7447123527526855, -1.4613224267959595], + [2.2808620929718018, -7.741213321685791], + [2.919724702835083, -4.685191631317139], + [-7.736111640930176, -1.772210717201233], + [-5.941558361053467, 4.812806129455566], + [2.2492759227752686, 1.50455904006958], + [8.215115547180176, -2.4877231121063232], + [-0.061603911221027374, 9.616419792175293], + [1.657731294631958, -5.245579242706299], + [2.317718982696533, -7.701559066772461], + [-1.8422110080718994, -0.908160924911499], + [2.5395333766937256, -7.852309703826904], + [-6.497255325317383, 7.210934638977051], + [-5.157388687133789, 3.3877735137939453], + [5.3180766105651855, -2.2235710620880127], + [2.304945707321167, -5.327436923980713], + [-2.3024685382843018, 2.1848409175872803], + [-4.657679080963135, -2.8742265701293945], + [6.723081111907959, -2.337681770324707], + [-4.862311840057373, -4.28389310836792], + [2.9233779907226562, -4.4634013175964355], + [0.048693619668483734, -0.4027763307094574], + [-4.977877140045166, -0.5970776677131653], + [-6.245980739593506, -1.8503344058990479], + [-0.5046089291572571, 9.437342643737793], + [8.433290481567383, -2.7956454753875732], + [-3.1475670337677, -0.2893979847431183], + [0.6264967918395996, 0.5263730883598328], + [-5.731203079223633, 7.4912872314453125], + [-2.0814082622528076, 2.145265817642212], + [2.2165348529815674, 4.882732391357422], + [0.20881879329681396, 9.747573852539062], + [3.245516061782837, -4.9204230308532715], + [-3.341839075088501, 0.9371750354766846], + [7.827670574188232, -1.9019793272018433], + [-6.9936089515686035, -0.06123555079102516], + [-1.6643811464309692, 8.864767074584961], + [-4.928511619567871, -1.8310095071792603], + [-2.4270212650299072, 2.229980707168579], + [-3.961580276489258, 4.160894393920898], + [4.334092140197754, -5.628809928894043], + [1.986480474472046, 6.136244773864746], + [-3.0556817054748535, 1.6240131855010986], + [-3.8240244388580322, 1.4886200428009033], + [-3.588884115219116, -2.1144797801971436], + [-2.651580810546875, -2.646090507507324], + [-5.090652942657471, 8.321189880371094], + [-0.37060612440109253, 10.022239685058594], + [6.3291120529174805, -1.8896564245224], + [3.220104217529297, -4.41733455657959], + [-4.779721260070801, -2.875274896621704], + [3.1276304721832275, -4.8860554695129395], + [-3.5117619037628174, -2.9223172664642334], + [-0.034745700657367706, -0.11813974380493164], + [-4.045157432556152, 0.9975112676620483], + [-2.0785155296325684, -0.24105998873710632], + [-2.1683132648468018, 3.245553731918335], + [-5.233359336853027, -2.069986581802368], + [-2.0702250003814697, 2.7520925998687744], + [1.5497756004333496, -6.151249408721924], + [-3.8560562133789062, 6.863211631774902], + [4.998263835906982, 6.402050971984863], + [-5.003994464874268, 5.892776012420654], + [3.0942931175231934, -4.83221960067749], + [-1.7404179573059082, 1.3572845458984375], + [8.273778915405273, -2.11090087890625], + [3.2275431156158447, 5.988346099853516], + [-2.9410479068756104, -1.464742660522461], + [-4.158143997192383, 5.692750930786133], + [-5.785489559173584, -1.6406004428863525], + [2.907118082046509, -4.481128692626953], + [2.829962968826294, -4.271978855133057], + [-4.501476287841797, 0.06023722514510155], + [5.297123432159424, -0.6042896509170532], + [8.553506851196289, -2.3312220573425293], + [2.7456467151641846, -4.340291500091553], + [-2.5863449573516846, 1.8179700374603271], + [0.6453574895858765, -0.30068057775497437], + [-7.107611179351807, -2.060791492462158], + [-4.9001946449279785, -3.360948324203491], + [-2.771785020828247, -3.3705923557281494], + [5.043834209442139, -1.9341963529586792], + [3.173739433288574, -5.4791131019592285], + [-2.689756155014038, 1.3667386770248413], + [-5.716888904571533, 7.1442670822143555], + [-6.05700159072876, -1.6368125677108765], + [-4.901381015777588, -5.237595558166504], + [0.7089206576347351, -6.50803279876709], + [1.2346723079681396, 0.4983348250389099], + [0.10422322899103165, -0.602441132068634], + [-0.3678820729255676, 9.917133331298828], + [-5.1020827293396, 6.140204906463623], + [0.10516753047704697, -0.6096094846725464], + [-2.8899009227752686, -0.6637780666351318], + [3.027189016342163, -4.546995639801025], + [-4.633363246917725, 5.71134614944458], + [7.911788463592529, -2.1563656330108643], + [3.246706247329712, -5.182766437530518], + [-1.285871982574463, 4.063314437866211], + [-3.2603228092193604, -1.582680106163025], + [2.5699925422668457, 1.1214994192123413], + [-3.9071314334869385, -0.4050317406654358], + [5.535165309906006, 7.598334789276123], + [-6.542421817779541, -1.056827187538147], + [-6.480414867401123, 8.06959342956543], + [-5.169609546661377, -4.103704929351807], + [-1.9806921482086182, 1.9165464639663696], + [-3.2983033657073975, 5.892650604248047], + [-2.2422993183135986, 2.3958144187927246], + [2.14108943939209, 5.691190719604492], + [-4.697567462921143, -3.3759801387786865], + [2.5302112102508545, -5.3865580558776855], + [1.1387027502059937, 0.4879363775253296], + [-7.900854110717773, 9.797119140625], + [-7.050539493560791, 8.891509056091309], + [-4.310020923614502, -1.3904155492782593], + [0.7046667337417603, -6.324160575866699], + [-4.390899181365967, 3.668095827102661], + [-2.166269063949585, -2.9040753841400146], + [-5.4473981857299805, 1.3183808326721191], + [-0.33920902013778687, 10.388086318969727], + [6.1601176261901855, -3.6095871925354004], + [2.647178888320923, -4.460758209228516], + [-5.177242755889893, -2.1213881969451904], + [2.2260262966156006, -8.289682388305664], + [-2.330413818359375, 0.4966404438018799], + [-5.5261945724487305, 6.909674167633057], + [9.233389854431152, -2.5343129634857178], + [-4.12515115737915, 3.7424557209014893], + [7.019473552703857, -1.4854294061660767], + [0.616320788860321, -0.3772312104701996], + [1.487372875213623, -7.777695655822754], + [-4.683498859405518, 7.246828556060791], + [-2.3353850841522217, 2.3479483127593994], + [-4.756409645080566, -2.3356783390045166], + [-2.5867278575897217, 1.900723934173584], + [-3.964560031890869, -1.0302796363830566], + [2.8353426456451416, 6.258813858032227], + [0.48437684774398804, -1.0344555377960205], + [-5.839061260223389, -0.7198808789253235], + [-2.894857168197632, 3.175006628036499], + [-5.357111930847168, -2.487253427505493], + [-4.3924784660339355, 0.2095550298690796], + [-5.595164775848389, -1.2978296279907227], + [2.611956834793091, 0.7027977108955383], + [-5.4864501953125, -2.3482916355133057], + [-2.8826236724853516, -2.616856575012207], + [-4.203941822052002, -3.888282299041748], + [-4.294964790344238, -3.6587493419647217], + [-3.6437642574310303, -4.2980756759643555], + [-5.273309707641602, 3.866934061050415], + [-4.901433944702148, 4.073374271392822], + [0.009557239711284637, 1.274492621421814], + [3.0386555194854736, -4.566061019897461], + [-2.262672185897827, 1.6706840991973877], + [-4.169609069824219, 6.688880920410156], + [-4.4263691902160645, -1.970504641532898], + [-2.260664701461792, 1.6083368062973022], + [-2.312316656112671, 1.8303804397583008], + [2.8620476722717285, -4.300662040710449], + [-3.974665641784668, -4.238124847412109], + [0.2568817734718323, -0.42807599902153015], + [3.323334217071533, -4.958422660827637], + [-5.019161701202393, 4.491538047790527], + [-4.07315731048584, -2.758558988571167], + [-5.3102288246154785, 2.188929557800293], + [-5.422461032867432, 1.5933607816696167], + [0.669650137424469, -0.5938918590545654], + [8.656364440917969, -2.0658321380615234], + [-0.3194686770439148, 10.184722900390625], + [-6.192038536071777, 7.588201999664307], + [3.2201812267303467, -6.328845500946045], + [1.9120490550994873, -9.447598457336426], + [-3.9065463542938232, -2.5358479022979736], + [0.1743817925453186, 5.172574996948242], + [-5.474501609802246, -3.7104642391204834], + [-0.2406083643436432, 5.867772102355957], + [3.9545857906341553, -3.2844717502593994], + [-4.770998001098633, -1.8457443714141846], + [-4.620081901550293, -3.1828207969665527], + [-6.949906349182129, 8.827521324157715], + [-7.289122104644775, 8.931988716125488], + [-6.371867656707764, 7.687808990478516], + [-5.868210792541504, 2.8340983390808105], + [-4.730587959289551, -2.5946872234344482], + [1.168344259262085, -6.8429412841796875], + [-5.040725231170654, -2.7788448333740234], + [2.0246870517730713, -6.218979358673096], + [-4.713722229003906, -1.3559988737106323], + [-5.077530384063721, 7.947015762329102], + [-2.7593252658843994, 2.8123085498809814], + [-2.2304282188415527, 2.634995222091675], + [-5.903398036956787, -1.8524714708328247], + [5.950309753417969, -1.9087505340576172], + [-2.4796111583709717, 1.9246139526367188], + [-4.326813220977783, 1.691188931465149], + [-2.1927404403686523, 1.6391282081604004], + [-7.904181003570557, -1.5017086267471313], + [-2.267888307571411, 1.1886210441589355], + [-2.533604621887207, 1.1157017946243286], + [-2.189124345779419, 3.0135421752929688], + [-0.7405372262001038, 9.519685745239258], + [-1.5755044221878052, 2.210843801498413], + [-6.80629825592041, 8.418298721313477], + [-7.214929580688477, 8.63357162475586], + [-2.177981376647949, 2.329033613204956], + [8.534178733825684, -2.4029297828674316], + [-4.001482009887695, -0.5500161647796631], + [-2.7799437046051025, 1.5281856060028076], + [-2.377913475036621, 1.8948283195495605], + [-6.634427547454834, 8.32773494720459], + [-4.294930934906006, -6.154942512512207], + [10.061049461364746, -2.7478928565979004], + [-4.749898433685303, 5.930604457855225], + [3.328824758529663, -3.6232967376708984], + [-2.160515546798706, 2.3645994663238525], + [-6.605870723724365, -1.6962772607803345], + [-1.6814849376678467, 5.938984394073486], + [0.6602051854133606, -0.6606248021125793], + [-7.160543918609619, -0.005775097757577896], + [-2.7720139026641846, -1.9992518424987793], + [-0.6996023058891296, -1.0863336324691772], + [-3.5236856937408447, -3.257664442062378], + [-4.279885768890381, 6.122838020324707], + [0.6718055605888367, -3.3682258129119873], + [-3.9133541584014893, 5.817197799682617], + [2.8919661045074463, -5.595305442810059], + [-2.589975595474243, 2.2660908699035645], + [-5.100722789764404, -4.5720672607421875], + [-0.7200281023979187, 5.8250508308410645], + [-2.083282470703125, 2.645754814147949], + [-2.5935256481170654, 1.725943684577942], + [-0.2441634237766266, -1.5332804918289185], + [1.8102563619613647, 4.687905311584473], + [-4.775694370269775, 5.784894943237305], + [2.9183318614959717, -6.354738235473633], + [-1.3188644647598267, -1.4023081064224243], + [-4.4890947341918945, 5.020465850830078], + [-5.170213222503662, -2.6103322505950928], + [2.7784900665283203, -4.35071325302124], + [9.308427810668945, -2.5225889682769775], + [-5.299444198608398, 7.847567081451416], + [-4.263482570648193, -3.583082437515259], + [-4.113728046417236, -1.606308102607727], + [2.032010793685913, 5.180722236633301], + [-1.868204951286316, 2.149613857269287], + [-0.25399351119995117, 10.618297576904297], + [-3.9732916355133057, 1.044380784034729], + [-4.5582756996154785, -0.4820500612258911], + [-4.300936222076416, -3.182096481323242], + [1.8829699754714966, -6.857721328735352], + [-5.0769429206848145, -0.2067854404449463], + [-4.234318256378174, 4.422147750854492], + [-6.693300724029541, 8.459880828857422], + [-3.990527868270874, -1.7221544981002808], + [2.134294033050537, 5.745680332183838], + [5.441752910614014, 7.350593566894531], + [2.894334077835083, -4.336311340332031], + [-6.11751651763916, -1.805078387260437], + [0.6124326586723328, 6.134712219238281], + [2.1341569423675537, -9.305523872375488], + [-7.59146785736084, -1.3666309118270874], + [-5.893077373504639, -2.3817479610443115], + [-6.011696815490723, -2.3246214389801025], + [1.8146886825561523, -4.111188888549805], + [-8.561421394348145, -1.1888706684112549], + [-6.337992191314697, -1.8958429098129272], + [2.9943668842315674, -4.696605682373047], + [-6.3990936279296875, 4.6113128662109375], + [-6.717706203460693, -1.3005415201187134], + [1.5247875452041626, -3.3414642810821533], + [-2.2504444122314453, 4.616579055786133], + [8.126200675964355, -2.1988770961761475], + [-0.2996132969856262, 11.024520874023438], + [-5.853714942932129, 7.845951080322266], + [8.434000968933105, -2.591270685195923], + [1.925286054611206, -3.7383663654327393], + [-5.282856464385986, 2.481905937194824], + [2.9417014122009277, 4.952589511871338], + [-4.803978443145752, -3.6959240436553955], + [1.8758623600006104, -6.242029190063477], + [1.4199541807174683, 1.231418251991272], + [-5.084914684295654, -2.5844991207122803], + [-5.178586959838867, -2.499385356903076], + [-5.592068195343018, 2.75553297996521], + [-0.2443951964378357, 9.397880554199219], + [-3.890458345413208, -3.519648551940918], + [8.12056827545166, -2.334496259689331], + [0.9784972071647644, -6.907145023345947], + [5.537906169891357, 7.199016571044922], + [-1.494003176689148, 1.72813880443573], + [-3.3747832775115967, -2.7188665866851807], + [-4.326660633087158, 6.286998748779297], + [-5.884065628051758, 1.9901047945022583], + [2.801893472671509, -4.3056230545043945], + [2.9779484272003174, 0.8064035177230835], + [3.376652479171753, -5.32050085067749], + [-2.26639986038208, 2.306394577026367], + [-3.025672674179077, -4.027916431427002], + [2.193006753921509, -7.4537224769592285], + [-2.5590271949768066, 1.9276893138885498], + [5.948634624481201, -1.1688830852508545], + [7.541296482086182, -2.0834100246429443], + [3.1608622074127197, -4.731881618499756], + [-0.03026226907968521, -0.9306432008743286], + [-1.1669435501098633, 8.717727661132812], + [2.2056033611297607, -4.938575744628906], + [-0.4028606712818146, -0.7767347097396851], + [-2.4791386127471924, 0.9245756268501282], + [-3.2928626537323, 5.690281867980957], + [2.6458420753479004, -3.2914578914642334], + [-5.281495571136475, -3.485600233078003], + [1.6737885475158691, -2.9414870738983154], + [-3.4458096027374268, -2.64410662651062], + [-4.984249591827393, 6.126293659210205], + [-2.6319808959960938, 0.9815455675125122], + [9.18799877166748, -2.5230026245117188], + [-5.434057712554932, -3.8062150478363037], + [-0.9300142526626587, -1.5036908388137817], + [1.945786476135254, 5.18404483795166], + [5.959895133972168, -1.0682529211044312], + [-3.8419249057769775, -0.844367265701294], + [-3.684377431869507, -1.0889390707015991], + [-3.082301378250122, 1.0305315256118774], + [6.455450534820557, -1.3332003355026245], + [-5.169281482696533, 2.2590999603271484], + [-4.314169406890869, -4.033885955810547], + [-4.8573527336120605, 6.87834358215332], + [-4.439728260040283, -2.7947468757629395], + [-0.3883231282234192, 9.037036895751953], + [-2.2931325435638428, 1.4313764572143555], + [2.2776806354522705, -4.0388054847717285], + [6.79410457611084, -2.8673408031463623], + [-2.7226552963256836, 6.024777412414551], + [1.5646493434906006, -8.395999908447266], + [2.067758798599243, -7.820903778076172], + [-0.5010704398155212, -1.4158281087875366], + [-0.29820477962493896, 9.978912353515625], + [-3.603534460067749, -1.567287564277649], + [-0.11586446315050125, 9.456472396850586], + [1.6307275295257568, 5.429222583770752], + [-3.8529903888702393, -3.09021258354187], + [-5.359226703643799, -1.4764958620071411], + [2.0682272911071777, 5.851306915283203], + [1.9721112251281738, 1.2861911058425903], + [-2.2161977291107178, 0.8353599309921265], + [-0.06794286519289017, 9.449411392211914], + [7.284852504730225, -1.6144245862960815], + [-6.126033782958984, -2.745429039001465], + [-2.946890354156494, 2.8643715381622314], + [-1.4591270685195923, 5.460332870483398], + [-3.8134779930114746, -2.3381409645080566], + [-0.41258424520492554, 10.278144836425781], + [-3.2719900608062744, -2.2498908042907715], + [-5.553166389465332, -3.394819974899292], + [5.325766563415527, -1.2880769968032837], + [-4.242865085601807, 8.14126205444336], + [-7.838395595550537, -1.4798067808151245], + [6.503116607666016, -1.2919200658798218], + [-4.448846340179443, -3.157078504562378], + [-3.8125784397125244, -1.7590301036834717], + [7.1689839363098145, -1.8778873682022095], + [2.426387071609497, -1.30768883228302], + [-3.723710298538208, -0.12218546867370605], + [-4.031154632568359, -3.3673858642578125], + [5.471549987792969, -4.024689674377441], + [0.607079803943634, -6.135173320770264], + [-1.0030266046524048, 8.748699188232422], + [-4.636390209197998, -0.9601671695709229], + [-2.2783281803131104, 5.496062755584717], + [2.5834357738494873, -4.060513496398926], + [-3.6124427318573, -2.647075653076172], + [-0.12708860635757446, 10.060127258300781], + [-4.927786350250244, -3.129099130630493], + [-1.5600171089172363, 2.195542097091675], + [-2.5033531188964844, 1.9354782104492188], + [1.6094473600387573, 1.2361711263656616], + [2.561589479446411, -4.23434591293335], + [-5.871440410614014, 3.9859707355499268], + [0.7092896103858948, 0.24988168478012085], + [-0.16648957133293152, -1.290561318397522], + [-3.812490224838257, -4.755178451538086], + [-5.728780269622803, -2.225367307662964], + [-5.605696678161621, 1.6470593214035034], + [-0.2716168761253357, 9.057426452636719], + [-4.373081684112549, 2.018496513366699], + [8.485872268676758, -2.274834394454956], + [-0.3505280315876007, -0.6598442792892456], + [-6.004108428955078, 7.555772304534912], + [-5.010892391204834, -3.123210906982422], + [-0.05474699288606644, -1.2008525133132935], + [1.1837115287780762, 1.084187626838684], + [-4.4917521476745605, -2.9634177684783936], + [-1.1078141927719116, -0.683322548866272], + [-0.2715032696723938, 9.981663703918457], + [-5.0614447593688965, -3.2935149669647217], + [3.0680670738220215, -4.602182388305664], + [5.153811931610107, -0.8833722472190857], + [-3.2484986782073975, 5.196718215942383], + [-2.4898154735565186, 6.1378326416015625], + [4.540441036224365, 6.893016338348389], + [0.5022651553153992, 7.936533451080322], + [-2.7933905124664307, -0.16890066862106323], + [-3.115252733230591, 2.3886373043060303], + [-3.908381223678589, -4.067708969116211], + [-6.603113651275635, 7.958393096923828], + [-5.327956199645996, 8.552038192749023], + [1.098210334777832, -7.11284875869751], + [-3.838228702545166, -5.305233955383301], + [3.269097089767456, -4.880497932434082], + [3.104008674621582, -4.678313732147217], + [5.336421012878418, 6.791722774505615], + [-2.0140018463134766, -1.2127939462661743], + [-1.9626479148864746, 1.593865990638733], + [-3.771808385848999, -2.387079954147339], + [1.7866833209991455, 5.427737236022949], + [-5.9782795906066895, 7.944489002227783], + [-5.276484966278076, -3.9492604732513428], + [0.01522325724363327, 10.039508819580078], + [-2.430318832397461, 1.3575174808502197], + [-4.763963222503662, -3.5212912559509277], + [2.4693071842193604, 0.9617160558700562], + [-5.825531482696533, 5.669429302215576], + [-5.607128620147705, 5.128458023071289], + [2.3306546211242676, 5.869899749755859], + [-4.595067501068115, -3.0490517616271973], + [-5.40693998336792, 3.8732352256774902], + [-7.836385250091553, -0.9098364114761353], + [2.2193171977996826, -3.466571092605591], + [6.8993754386901855, -1.359063982963562], + [1.7371762990951538, 1.377952218055725], + [-7.0430707931518555, 8.190176010131836], + [-4.704943656921387, -2.7479000091552734], + [0.48435455560684204, -0.3781220316886902], + [-4.560842037200928, -0.42306748032569885], + [-2.3543756008148193, 2.3027091026306152], + [1.8927602767944336, 1.2771893739700317], + [-6.9369215965271, -0.9766306281089783], + [-0.4456903338432312, -1.6259434223175049], + [-2.1590332984924316, 2.0117807388305664], + [-3.0345828533172607, 2.9454355239868164], + [-4.047360420227051, 2.290383815765381], + [1.7667156457901, -5.029125213623047], + [-0.29698365926742554, 9.888578414916992], + [-3.855877637863159, 5.8570709228515625], + [1.4616873264312744, -5.894876480102539], + [-4.92163610458374, 2.3310611248016357], + [-3.957543134689331, -1.843711018562317], + [-3.9561240673065186, -3.0647013187408447], + [-0.668647825717926, 11.22795295715332], + [-2.1722280979156494, 5.906106948852539], + [-4.297752857208252, -2.648334264755249], + [1.8969217538833618, 5.2218852043151855], + [-0.8424379825592041, 9.566884994506836], + [-5.125614643096924, 1.3053232431411743], + [-6.9710259437561035, 8.869699478149414], + [2.873476505279541, -6.820145130157471], + [6.388566970825195, -2.5448172092437744], + [6.08118200302124, -1.3594552278518677], + [-3.338813066482544, 1.6980865001678467], + [1.9295690059661865, -3.6215789318084717], + [2.999410629272461, -4.493106842041016], + [-5.247095584869385, -2.4187142848968506], + [1.7294514179229736, 1.4919453859329224], + [-3.29488205909729, 7.18966007232666], + [-7.312443256378174, -2.79162859916687], + [3.3046987056732178, -5.342764854431152], + [-3.7674267292022705, -3.3471381664276123], + [-3.7137396335601807, -0.5194967985153198], + [2.336785078048706, -8.463844299316406], + [8.23324966430664, -2.3656814098358154], + [2.49985408782959, -4.746204376220703], + [2.959538459777832, -4.333559036254883], + [-0.19949430227279663, 10.240293502807617], + [-6.952759265899658, -1.8770655393600464], + [-5.196342945098877, 8.224885940551758], + [3.0191473960876465, -5.433248996734619], + [-0.40033406019210815, -1.3203264474868774], + [-6.089296817779541, 7.46360445022583], + [2.0557119846343994, 5.877931594848633], + [-0.10636908560991287, 10.718490600585938], + [-5.552373886108398, 1.5854793787002563], + [-3.7369191646575928, -3.690415143966675], + [-4.6358642578125, -3.2757651805877686], + [-0.3322187662124634, 10.428451538085938], + [0.0995052382349968, 9.641839981079102], + [6.129362106323242, -1.3829236030578613], + [8.163595199584961, -2.593304395675659], + [-4.568844795227051, -2.277756452560425], + [2.6675775051116943, -6.2454514503479], + [-6.080410957336426, 5.975772857666016], + [-4.027615070343018, 6.138684272766113], + [8.618069648742676, -3.2083964347839355], + [-0.9419601559638977, -2.375154972076416], + [-4.511647701263428, -3.454573154449463], + [-3.0947649478912354, 3.3137423992156982], + [-5.395728588104248, 2.700631856918335], + [-5.825624942779541, 3.3787877559661865], + [-7.339084148406982, -0.9979434609413147], + [8.077863693237305, -2.571044921875], + [-0.3933688998222351, 10.833378791809082], + [-1.3366539478302002, 1.339023232460022], + [0.49751144647598267, -0.9861846566200256], + [3.5489566326141357, 6.67476749420166], + [-0.22239089012145996, 9.900642395019531], + [-2.6891770362854004, -1.777732014656067], + [10.018071174621582, -2.792691469192505], + [-2.1189820766448975, 2.7913665771484375], + [-3.7012763023376465, -1.3953663110733032], + [1.9530549049377441, -5.8433966636657715], + [-4.975729942321777, 5.577324867248535], + [-3.9871559143066406, -1.7858283519744873], + [-3.7097995281219482, 5.03825569152832], + [-7.736361026763916, 9.514908790588379], + [8.39481258392334, -2.3007147312164307], + [7.942850589752197, -2.116340160369873], + [-4.4398627281188965, 5.895593643188477], + [0.9648520350456238, 0.7037754654884338], + [5.1812567710876465, -1.236433506011963], + [8.400575637817383, -2.5031888484954834], + [2.808448553085327, -4.261059284210205], + [2.845667839050293, -4.863934516906738], + [-5.423831462860107, 0.6918920278549194], + [-7.767350673675537, -1.2183393239974976], + [-1.7020847797393799, -1.2082164287567139], + [-6.605438709259033, 8.102648735046387], + [2.724064350128174, 5.69468879699707], + [0.034958891570568085, 10.29301643371582], + [-2.2181715965270996, 0.9666452407836914], + [3.3097479343414307, -5.668667316436768], + [-5.56076192855835, -2.415478467941284], + [-5.374791622161865, -3.5016205310821533], + [2.10493540763855, -3.376415491104126], + [-5.29766321182251, 6.147787094116211], + [-7.138762950897217, 8.717085838317871], + [-7.354775905609131, 8.798774719238281], + [-4.782963275909424, -4.684798717498779], + [-4.353790760040283, -2.2848758697509766], + [-5.926573753356934, 4.776885032653809], + [-4.661250591278076, -3.267157793045044], + [-4.710812091827393, -3.46993088722229], + [2.6713385581970215, 4.76812219619751], + [-4.279972553253174, -2.890423536300659], + [-2.4032492637634277, 0.6474021077156067], + [-3.0342352390289307, 3.100994825363159], + [-5.242408752441406, 6.044306755065918], + [-4.89066743850708, -2.5886571407318115], + [1.8210783004760742, -5.619210243225098], + [1.0294585227966309, -4.137172222137451], + [-0.2078479528427124, 9.369585037231445], + [-0.34132713079452515, 8.928656578063965], + [6.115758895874023, -1.317341685295105], + [-5.126669883728027, -0.1135174036026001], + [-3.852973461151123, 6.03627872467041], + [-3.720876932144165, -1.7776384353637695], + [3.249635934829712, -4.855922222137451], + [-2.4963138103485107, 2.438077688217163], + [-7.803797245025635, 9.635648727416992], + [1.1986559629440308, -7.918675422668457], + [-0.2988794445991516, 9.45522689819336], + [-3.6168131828308105, 2.9914729595184326], + [-5.599116802215576, -3.415367841720581], + [-4.662870407104492, -1.743665337562561], + [-2.474309206008911, 2.174254894256592], + [1.079882264137268, -6.201385498046875], + [2.8048603534698486, -4.471218585968018], + [-4.476577281951904, -3.8939437866210938], + [0.4384703040122986, 5.095881462097168], + [-0.9882700443267822, 9.152152061462402], + [-2.7635180950164795, 0.25941258668899536], + [-7.332643985748291, 0.18545424938201904], + [-4.54285192489624, -2.7364518642425537], + [2.38628888130188, -4.262170791625977], + [6.75608491897583, -1.2440739870071411], + [2.266322135925293, 6.229153633117676], + [-2.283005952835083, -0.9174937009811401], + [1.9426026344299316, 5.505552291870117], + [1.3333921432495117, -5.128022193908691], + [-3.060983896255493, 3.478745222091675], + [-7.962296485900879, -0.6051005125045776], + [-0.31530100107192993, 11.505399703979492], + [7.845998287200928, -1.9885563850402832], + [-6.7049174308776855, 7.512152194976807], + [-0.47362881898880005, 11.181814193725586], + [2.2963123321533203, -4.31452751159668], + [-3.195781707763672, -1.7213780879974365], + [-0.09288669377565384, 8.536605834960938], + [7.473019123077393, -4.891831398010254], + [2.9917659759521484, 5.3989057540893555], + [-0.5865020751953125, 8.604527473449707], + [-2.4163525104522705, 2.3763513565063477], + [2.2898952960968018, 0.7402496933937073], + [-4.797021389007568, -3.942056894302368], + [-4.794507026672363, 5.581053733825684], + [-5.095369815826416, -3.5712640285491943], + [2.1498520374298096, 4.837848663330078], + [1.9282398223876953, 5.422760009765625], + [-4.665172576904297, 3.4002726078033447], + [2.649171829223633, -4.085958480834961], + [-5.085168838500977, -1.7641900777816772], + [-7.888033390045166, 9.705554962158203], + [-2.1655781269073486, 2.3913381099700928], + [8.98681354522705, -2.399033308029175], + [6.03076171875, -1.066301703453064], + [-5.144824504852295, 0.5885778665542603], + [-4.7225775718688965, -3.7229819297790527], + [-0.6769354343414307, 8.99365520477295], + [-7.231221675872803, -1.6034084558486938], + [6.977475643157959, -2.74072527885437], + [2.4316112995147705, -3.7940621376037598], + [1.9258253574371338, 5.1575469970703125], + [-1.7292274236679077, -0.025992754846811295], + [-7.514463901519775, -1.0430917739868164], + [6.594440937042236, -1.4960023164749146], + [-4.740567684173584, -3.8924500942230225], + [-1.2364155054092407, 3.4816534519195557], + [-4.166025638580322, -4.0576629638671875], + [-0.05229417234659195, -1.2961562871932983], + [-3.4280314445495605, 4.589719772338867], + [-2.4050395488739014, 0.8266477584838867], + [-0.04621756821870804, 9.422801971435547], + [-1.8650249242782593, 1.5439083576202393], + [1.2831180095672607, -6.455092906951904], + [2.6919455528259277, -4.287863731384277], + [-5.4869608879089355, 4.324429512023926], + [2.807196617126465, -4.501800537109375], + [-6.0450921058654785, -1.453156590461731], + [-3.6670401096343994, 0.23115292191505432], + [-0.09246284514665604, 10.125864028930664], + [-6.979135990142822, 8.058515548706055], + [2.545844793319702, -5.744847297668457], + [-2.7763993740081787, 2.9321041107177734], + [9.489635467529297, -2.609645128250122], + [2.731065273284912, -5.399900913238525], + [-3.934803009033203, -3.5551609992980957], + [-2.5508439540863037, -3.1295676231384277], + [3.7236316204071045, 6.766400337219238], + [-7.7815728187561035, -0.6193537712097168], + [9.03003978729248, -2.5017988681793213], + [-3.2898752689361572, -2.314608335494995], + [-4.356993198394775, 6.065855026245117], + [2.728811264038086, -6.832339763641357], + [1.8385627269744873, -8.626233100891113], + [-1.8963842391967773, -3.3946712017059326], + [2.8568243980407715, -4.293519973754883], + [1.969170331954956, -6.695991516113281], + [0.03544694930315018, -1.1553181409835815], + [8.40181827545166, -2.416436195373535], + [-9.354435920715332, -1.0041778087615967], + [2.1448726654052734, -5.721112251281738], + [1.918751835823059, -8.197298049926758], + [9.318142890930176, -2.6032493114471436], + [7.804349422454834, -1.8223695755004883], + [-7.74891996383667, -0.5090659856796265], + [-0.6483381390571594, -1.3472315073013306], + [1.6821120977401733, -5.517121315002441], + [4.0932440757751465, 6.165692329406738], + [8.415589332580566, -2.310560941696167], + [-2.3542354106903076, 1.2542117834091187], + [-5.649931907653809, 0.7724553942680359], + [-2.2654054164886475, 2.7633533477783203], + [-3.0775463581085205, -3.6086180210113525], + [-0.42478030920028687, 10.958059310913086], + [-6.077145099639893, 8.124568939208984], + [1.6395066976547241, 5.37831974029541], + [-2.807547092437744, 2.7736947536468506], + [-2.2771804332733154, 0.978950023651123], + [-5.399003505706787, -2.733541965484619], + [2.921393632888794, -4.585425853729248], + [-3.818248748779297, 5.657822608947754], + [-0.6650328040122986, -0.5758112072944641], + [-3.7795560359954834, -3.0917584896087646], + [-1.7482119798660278, -0.6141639947891235], + [-5.786348819732666, -6.900721549987793], + [-4.538191795349121, -4.277988433837891], + [-7.396750450134277, -0.6798950433731079], + [-6.029630184173584, 1.3661028146743774], + [-2.9490482807159424, -2.950141191482544], + [-3.6622445583343506, -3.090623617172241], + [0.33772072196006775, -1.8826768398284912], + [7.806259632110596, -2.2061240673065186], + [2.165065050125122, -3.8453526496887207], + [3.0704421997070312, -4.605534076690674], + [-3.583923578262329, -1.7531181573867798], + [-4.049170017242432, -2.636662244796753], + [-6.998687267303467, 8.779679298400879], + [-5.16683292388916, 2.110483407974243], + [-0.5017295479774475, -0.758399486541748], + [1.7540497779846191, -4.522377967834473], + [6.899149417877197, -1.5247524976730347], + [-0.39792847633361816, 9.108980178833008], + [1.9574625492095947, -6.1476850509643555], + [-1.5127383470535278, 1.31647789478302], + [1.2320009469985962, 0.23085102438926697], + [-0.22802335023880005, 10.150714874267578], + [-5.740467548370361, -1.0491037368774414], + [-4.147561550140381, -1.2158483266830444], + [-2.5255069732666016, 1.5143365859985352], + [-4.739403247833252, -2.9757754802703857], + [-2.324038028717041, 1.073724389076233], + [2.2503368854522705, 5.930502891540527], + [0.9848476052284241, -7.142886161804199], + [-4.863801956176758, 6.411971092224121], + [1.1752924919128418, -6.096513748168945], + [-5.788046836853027, -2.1886770725250244], + [-2.6472060680389404, 0.6693965196609497], + [-4.680197238922119, 3.1622283458709717], + [1.2715904712677002, 5.418576717376709], + [-3.9898502826690674, 5.020893096923828], + [-2.751741647720337, 5.640824794769287], + [-3.3089728355407715, -4.458655834197998], + [2.0941736698150635, 5.069366455078125], + [-7.498535633087158, -0.5990122556686401], + [-0.5297037959098816, 2.134941816329956], + [-7.028316020965576, -0.2275400161743164], + [-6.717085838317871, 8.057926177978516], + [-5.314638614654541, 2.5715701580047607], + [1.929044485092163, -3.2091596126556396], + [-5.146492958068848, 4.0439453125], + [-6.223313808441162, 6.1963653564453125], + [1.9769065380096436, -9.732656478881836], + [1.9254581928253174, -5.520693778991699], + [-0.07276517897844315, 10.239503860473633], + [2.155444860458374, -8.708307266235352], + [-1.0036967992782593, 6.009568214416504], + [-5.714077472686768, -2.7925925254821777], + [2.9347803592681885, -4.6152262687683105], + [1.3362207412719727, -4.818740367889404], + [-0.5278873443603516, 10.502486228942871], + [2.205986261367798, -5.660800933837891], + [-2.206031322479248, 2.8369269371032715], + [-0.38911354541778564, 9.069318771362305], + [-4.734611988067627, -2.2876317501068115], + [-0.21519988775253296, 9.390302658081055], + [2.983269214630127, -4.6647443771362305], + [0.7254992723464966, -5.681398868560791], + [-0.7978969216346741, -0.9122028946876526], + [6.054542064666748, -1.7772918939590454], + [2.5690863132476807, -4.449907302856445], + [1.5952894687652588, 5.314304828643799], + [-4.070540904998779, -2.386458158493042], + [2.9811019897460938, -5.045799255371094], + [-7.279298782348633, 8.829914093017578], + [-5.520608425140381, -1.8431516885757446], + [-6.601613521575928, 8.481860160827637], + [6.214156627655029, -1.0273652076721191], + [0.705695390701294, -6.347973823547363], + [-5.102533340454102, -2.053098440170288], + [8.246960639953613, -2.1328959465026855], + [-2.2179486751556396, 0.7497813701629639], + [-5.717748641967773, 7.00926399230957], + [1.5935972929000854, -7.304500102996826], + [-7.050418376922607, -0.8602159023284912], + [1.2580198049545288, -7.395180702209473], + [2.4944891929626465, -4.332714080810547], + [-0.31856268644332886, 9.495464324951172], + [-0.6360027194023132, 10.366312026977539], + [-3.1398563385009766, -3.545670986175537], + [-2.426457166671753, 0.3636956810951233], + [2.065941095352173, -9.621288299560547], + [0.4806928038597107, -6.356744766235352], + [-4.382075786590576, 4.332205772399902], + [3.0646464824676514, -4.595677375793457], + [3.202888011932373, -5.187376022338867], + [4.468319892883301, -4.036250591278076], + [-6.868356227874756, 7.826330184936523], + [-0.1749977469444275, 10.082627296447754], + [-0.8862157464027405, -1.012395977973938], + [5.328195095062256, -2.173020124435425], + [-0.5414590239524841, 10.561075210571289], + [0.03542651981115341, -1.1930902004241943], + [2.980477809906006, -4.504865646362305], + [-4.020397186279297, 4.095508098602295], + [2.3865795135498047, -8.19743537902832], + [-2.2138397693634033, 2.7427423000335693], + [2.2597813606262207, 5.6698222160339355], + [-4.459932327270508, 3.922375202178955], + [9.725727081298828, -2.710672616958618], + [1.8220233917236328, -8.11332893371582], + [-3.586503744125366, 4.394513130187988], + [-1.2393244504928589, 1.1673051118850708], + [-2.4027211666107178, 1.4699159860610962], + [-5.311474800109863, -3.5746495723724365], + [3.060302972793579, -4.1200361251831055], + [0.3542540967464447, -0.9156088829040527], + [-6.412996768951416, 4.9084906578063965], + [-5.8916707038879395, 7.0008673667907715], + [-1.9036304950714111, -3.2533202171325684], + [-5.147914886474609, 7.206700325012207], + [2.8121166229248047, -4.197131633758545], + [3.229405164718628, -5.689752578735352], + [-0.32333073019981384, -0.8881070017814636], + [-2.3672988414764404, 2.168975353240967], + [-2.5134899616241455, 0.7156509160995483], + [2.3697736263275146, 5.818397045135498], + [5.884346961975098, -1.419680118560791], + [-0.2845551371574402, 9.435262680053711], + [8.331448554992676, -2.2518506050109863], + [8.530110359191895, -2.193305253982544], + [-2.5462076663970947, 2.081791877746582], + [-5.225067615509033, 2.960111379623413], + [-4.740355014801025, 1.477779507637024], + [-3.6849098205566406, 4.637423515319824], + [4.8729071617126465, 6.86188268661499], + [0.41162538528442383, -3.6020586490631104], + [-6.813442707061768, -2.2541096210479736], + [6.100415229797363, -1.3719722032546997], + [-2.848518133163452, 4.5454301834106445], + [7.996575832366943, -2.273098945617676], + [-4.387328147888184, -4.810586929321289], + [-3.763479709625244, -2.7677347660064697], + [-0.5264518857002258, 9.50562858581543], + [2.217933416366577, -7.754029273986816], + [6.3647074699401855, -5.005809783935547], + [0.2865639626979828, -0.4121796786785126], + [-8.574028015136719, 10.448667526245117], + [-4.164009094238281, -5.449402332305908], + [1.9066718816757202, 4.663701057434082], + [-4.551591873168945, -2.0164833068847656], + [-4.757417678833008, -1.7383322715759277], + [-5.318061351776123, 8.423689842224121], + [-3.4030392169952393, -2.6175429821014404], + [-4.588463306427002, -2.888160467147827], + [2.313934564590454, -3.0658986568450928], + [6.7267937660217285, -2.105149507522583], + [-3.2494070529937744, -1.413858413696289], + [8.587491035461426, -2.655930757522583], + [-5.488267421722412, 2.194359540939331], + [-7.143029689788818, 8.659485816955566], + [8.309115409851074, -3.287489652633667], + [-8.729447364807129, -1.6761425733566284], + [9.529080390930176, -2.6868021488189697], + [-4.6624932289123535, -3.6748123168945312], + [-0.24140822887420654, -1.05197012424469], + [2.9325125217437744, -4.493928909301758], + [-0.18923801183700562, -0.9445236921310425], + [-5.082666397094727, -2.636218547821045], + [-2.8951940536499023, 4.809124946594238], + [1.4273276329040527, 2.9279239177703857], + [-2.0898494720458984, 1.2807596921920776], + [0.6097378134727478, -0.5588523149490356], + [-2.0845015048980713, 1.992322325706482], + [1.6185753345489502, 4.846697807312012], + [-2.7032666206359863, 4.488351821899414], + [-7.0482497215271, 1.8028767108917236], + [-0.15373235940933228, 10.23403549194336], + [0.3600243628025055, -0.5908553004264832], + [8.47242259979248, -2.6165053844451904], + [8.21045207977295, -2.102379083633423], + [-4.407362461090088, -4.802609443664551], + [-1.106166124343872, 2.284703493118286], + [7.752163410186768, -2.373728036880493], + [3.180565357208252, -5.004868507385254], + [-2.10098934173584, 2.3029232025146484], + [-4.309962272644043, 4.294491291046143], + [-4.269619941711426, -3.6149821281433105], + [2.1757922172546387, 5.476791858673096], + [0.2849535644054413, 1.833034634590149], + [2.3752830028533936, -5.164520263671875], + [-5.069002628326416, -1.911455512046814], + [-2.623051166534424, 2.262162446975708], + [0.17406752705574036, 0.042128752917051315], + [-8.80051326751709, -1.1526906490325928], + [-2.470975637435913, 1.3159891366958618], + [-7.627279281616211, -1.5028653144836426], + [-3.857600450515747, -0.7959809303283691], + [2.1122663021087646, 5.784065246582031], + [-4.304564952850342, 6.705893039703369], + [-4.469940185546875, 2.4957504272460938], + [-0.474462628364563, 9.12744140625], + [-0.7945703268051147, 9.233808517456055], + [4.709320545196533, 6.856080055236816], + [10.039496421813965, -2.7925326824188232], + [-6.677304744720459, 8.65904712677002], + [2.062756299972534, -8.971068382263184], + [-2.95721173286438, 5.45330810546875], + [-6.055227756500244, 7.93812370300293], + [2.8361542224884033, -4.5553436279296875], + [2.5444490909576416, -6.767917156219482], + [-4.605576992034912, -3.359297513961792], + [-4.115441799163818, 5.684329032897949], + [-6.654571056365967, -2.4712560176849365], + [-0.40027910470962524, 10.940252304077148], + [-0.022389419376850128, 4.930967807769775], + [-0.2914252281188965, 9.483084678649902], + [7.9561381340026855, -2.086916923522949], + [3.0394814014434814, -3.6090989112854004], + [-0.3925502896308899, 11.059087753295898], + [-0.3544699549674988, 10.30202865600586], + [0.018346421420574188, -0.9578021168708801], + [-5.319820880889893, -1.0098210573196411], + [-6.5720672607421875, 8.237662315368652], + [3.031662940979004, -4.5508809089660645], + [2.9896538257598877, -4.491426467895508], + [-4.447036266326904, -2.25059175491333], + [0.3357037305831909, -0.5388141870498657], + [2.2282943725585938, 5.5051589012146], + [-0.23993021249771118, 9.273564338684082], + [1.9054439067840576, -9.477973937988281], + [2.487159013748169, -3.7902092933654785], + [-0.2606533169746399, 10.501871109008789], + [-1.86855947971344, 1.5942625999450684], + [0.46590977907180786, 5.335783958435059], + [2.8169405460357666, -4.461312294006348], + [-5.687345504760742, -3.359694719314575], + [1.8039295673370361, 5.530678749084473], + [-7.848405361175537, -1.1069327592849731], + [0.43146926164627075, 4.732969284057617], + [-2.459815263748169, 1.4910058975219727], + [8.451871871948242, -2.4426608085632324], + [2.2685353755950928, -5.2161149978637695], + [-2.725375175476074, 2.4925122261047363], + [-2.695190668106079, 1.9044122695922852], + [1.3695223331451416, -6.616472244262695], + [-5.047811031341553, 0.15706205368041992], + [0.6653122901916504, 6.5099945068359375], + [-0.04834330826997757, 0.7632887959480286], + [1.2378463745117188, -5.473601341247559], + [-4.479342937469482, -3.716745138168335], + [0.4287838339805603, -0.6025353670120239], + [-2.411118745803833, 1.6972087621688843], + [-5.1479878425598145, -2.7263717651367188], + [6.964630126953125, -4.312501907348633], + [-3.9469573497772217, -0.03150836005806923], + [-3.729196786880493, -1.3234714269638062], + [-2.1700148582458496, 5.938011169433594], + [-4.924360752105713, -2.3950369358062744], + [-5.281589984893799, -2.0050477981567383], + [-0.5075355172157288, 11.890018463134766], + [-5.035194396972656, 3.2180097103118896], + [-0.3202986717224121, 9.321474075317383], + [-5.603473663330078, -2.0965065956115723], + [9.268597602844238, -2.5460259914398193], + [1.344539761543274, -6.369391441345215], + [-2.8541934490203857, -2.5777318477630615], + [2.8738012313842773, -4.889338493347168], + [8.837794303894043, -2.468242883682251], + [6.811272144317627, -3.4673125743865967], + [0.4562264084815979, 5.781705856323242], + [1.785321593284607, -7.659694671630859], + [2.7881290912628174, -4.474442481994629], + [-0.17168200016021729, -1.4411749839782715], + [-5.317544937133789, 6.609835624694824], + [1.8499993085861206, -3.360116481781006], + [7.701832294464111, -1.7597758769989014], + [6.552347183227539, -1.2401912212371826], + [3.0675582885742188, -5.280755996704102], + [-7.860210418701172, 9.593475341796875], + [-7.373046875, -1.471746802330017], + [-6.799326419830322, -0.8288670778274536], + [2.196688413619995, 5.488940715789795], + [-2.1271026134490967, -0.2855525016784668], + [6.749716281890869, -5.063897132873535], + [-2.2803163528442383, 6.019693374633789], + [-4.370344161987305, -2.597625732421875], + [8.645743370056152, -2.409193754196167], + [-0.24889308214187622, 11.041364669799805], + [-3.011080741882324, -3.25901198387146], + [3.1090595722198486, -4.762608051300049], + [3.8427317142486572, -3.1239748001098633], + [1.9140040874481201, -8.022146224975586], + [-0.46427834033966064, 9.438135147094727], + [0.9762287735939026, -6.485401153564453], + [2.9440081119537354, -4.958071231842041], + [9.710198402404785, -2.6964831352233887], + [-3.816937208175659, -1.3159748315811157], + [2.7174484729766846, -4.397371768951416], + [8.823465347290039, -2.341862916946411], + [-6.660158157348633, -1.756578803062439], + [-2.182650566101074, 0.7617834806442261], + [2.9721038341522217, -4.466217517852783], + [8.525172233581543, -2.394965887069702], + [-7.217324733734131, 8.961912155151367], + [-6.684051990509033, 7.875296115875244], + [2.0166330337524414, 5.294919013977051], + [3.0509369373321533, -4.897822856903076], + [8.67255973815918, -2.512436866760254], + [-2.5924131870269775, 2.07816481590271], + [0.32702726125717163, -0.8975024819374084], + [2.8819355964660645, -4.318213939666748], + [-4.390380382537842, -1.505588173866272], + [1.8081603050231934, 5.08505916595459], + [0.5912770628929138, -0.6413781642913818], + [1.191942811012268, -3.95607590675354], + [0.5409639477729797, 4.859914779663086], + [-5.132166862487793, -3.5815422534942627], + [-2.8243236541748047, -4.318733215332031], + [2.4642601013183594, -4.634135723114014], + [-5.038402080535889, -2.419973611831665], + [2.83825421333313, -4.290170192718506], + [1.2535359859466553, 5.6215925216674805], + [-5.289335250854492, 7.458906173706055], + [-2.287632703781128, -1.1341583728790283], + [-5.966061115264893, 2.2644460201263428], + [-0.08137617260217667, -0.27693381905555725], + [-5.134512424468994, 6.739330291748047], + [-7.241936206817627, -0.9574859142303467], + [-4.913178443908691, -1.0917624235153198], + [0.14009800553321838, -1.134276270866394], + [-5.272486209869385, -1.518459677696228], + [-2.749948501586914, 1.1339977979660034], + [-2.4541711807250977, 0.4843595623970032], + [-0.6412986516952515, -0.6277163028717041], + [-7.316101551055908, 8.925705909729004], + [-0.3038153648376465, -1.6195632219314575], + [-6.245340824127197, 5.205806255340576], + [9.143260955810547, -2.594689130783081], + [2.3974761962890625, -5.493361473083496], + [-1.1296298503875732, -1.8151003122329712], + [-4.837509632110596, -4.591685771942139], + [-7.378376007080078, 8.926654815673828], + [-5.249348163604736, -2.841623544692993], + [-4.773160457611084, 3.481884479522705], + [5.1462273597717285, 6.888260841369629], + [1.367849588394165, -7.1114091873168945], + [4.769144535064697, -1.0241574048995972], + [-3.8705570697784424, 3.7754805088043213], + [-5.160685062408447, -3.8504581451416016], + [0.6873872876167297, -3.4109652042388916], + [-1.6501959562301636, -0.6402809023857117], + [-4.186670303344727, -1.307637095451355], + [2.9486870765686035, -3.0724036693573], + [-5.436425685882568, -4.879337310791016], + [-7.344220161437988, -1.8938342332839966], + [-2.3491976261138916, 2.0353994369506836], + [-5.026942729949951, 6.179547309875488], + [-5.130123615264893, -4.390068054199219], + [-0.20496004819869995, 10.243240356445312], + [5.7478132247924805, -1.8376264572143555], + [3.341977119445801, 6.21613883972168], + [-5.603865146636963, -5.703399658203125], + [-0.4031434655189514, 8.754182815551758], + [3.1785459518432617, -4.760860919952393], + [-5.153524398803711, -2.857142210006714], + [-6.764490127563477, 7.67331600189209], + [3.124485731124878, -4.890681266784668], + [-5.45526647567749, -3.3556137084960938], + [2.142143487930298, 0.9068670272827148], + [-4.330959796905518, -1.6882508993148804], + [-4.949708461761475, 0.2760218381881714], + [3.145221710205078, -4.713846206665039], + [0.6249955892562866, 0.23729074001312256], + [-0.33615487813949585, -1.3706040382385254], + [2.917276620864868, -4.815370559692383], + [1.1182360649108887, -0.09464958310127258], + [-4.088862419128418, 2.1594934463500977], + [-2.779158353805542, -0.5371023416519165], + [-4.866171360015869, -4.8126420974731445], + [-3.8031041622161865, -3.277212381362915], + [2.791301727294922, -4.329381942749023], + [-5.433254241943359, 2.323467254638672], + [2.1902124881744385, 5.098949432373047], + [-2.6890156269073486, 6.261334419250488], + [-3.8647334575653076, -1.3814133405685425], + [2.4203388690948486, -3.8179116249084473], + [-5.37442684173584, -3.761366605758667], + [-0.29560887813568115, 9.483450889587402], + [9.073688507080078, -2.4966328144073486], + [6.336155414581299, -0.8296960592269897], + [3.710115909576416, 0.7451291680335999], + [0.44453489780426025, -0.3569168448448181], + [6.824685096740723, -1.3875503540039062], + [-0.28677088022232056, 9.547775268554688], + [-4.532035827636719, -6.216531753540039], + [4.21599817276001, 1.5886310338974], + [-0.328731894493103, 8.812338829040527], + [-5.476700782775879, 2.460458517074585], + [9.183289527893066, -2.7175915241241455], + [5.383757591247559, -1.700705647468567], + [-0.04346293956041336, 9.270923614501953], + [-5.6849365234375, -1.6047661304473877], + [-0.4174979329109192, 9.70037841796875], + [-0.13628530502319336, -1.2451363801956177], + [-4.345454692840576, -1.6655105352401733], + [0.5620814561843872, 4.718696117401123], + [-0.06741727143526077, 9.753837585449219], + [-3.3174827098846436, 2.191366195678711], + [2.150576591491699, 3.589028835296631], + [2.5979387760162354, -4.060813903808594], + [-7.353094577789307, 9.01290225982666], + [3.0107038021087646, -6.9558844566345215], + [-4.685302734375, -1.8794857263565063], + [-7.125172138214111, -0.46280157566070557], + [-2.57807993888855, -3.2532904148101807], + [-1.0614911317825317, -0.5551072359085083], + [-7.383020877838135, -0.9063084721565247], + [3.6926212310791016, 5.831851959228516], + [-0.814371645450592, 5.50233268737793], + [-5.482443332672119, -2.5797460079193115], + [0.8964000940322876, -6.200628280639648], + [-0.6779279112815857, 1.0036990642547607], + [-0.2522670030593872, -1.4633926153182983], + [-5.403007507324219, 5.288206577301025], + [8.831238746643066, -2.3630332946777344], + [-5.363900661468506, -3.6736772060394287], + [-0.22425717115402222, 9.4923677444458], + [-2.785938024520874, 5.603699684143066], + [2.964851140975952, -4.568841934204102], + [3.0434539318084717, -4.67556095123291], + [2.5490310192108154, 1.2182096242904663], + [6.0821614265441895, -3.834481954574585], + [-2.711902379989624, 2.5843725204467773], + [-0.4039347171783447, 10.75397777557373], + [2.187152147293091, -3.981470823287964], + [2.4351766109466553, -5.910179138183594], + [3.0221850872039795, -4.810206413269043], + [-4.570835113525391, -2.713012218475342], + [-2.582151174545288, 2.019101142883301], + [0.9498067498207092, -6.17071008682251], + [-6.714929103851318, -1.0511401891708374], + [-1.8154785633087158, 5.547536849975586], + [-5.810101509094238, 2.287820339202881], + [1.5239589214324951, 0.625443160533905], + [-2.0817930698394775, 1.430308222770691], + [-2.4544901847839355, 1.9854165315628052], + [3.2676825523376465, -4.880464553833008], + [-1.4421159029006958, -0.9509779214859009], + [2.6807353496551514, -4.049018383026123], + [3.770566463470459, -2.1925461292266846], + [3.2375216484069824, -4.834688663482666], + [3.030663013458252, -4.543107032775879], + [-4.818542003631592, 3.617096185684204], + [-5.9422807693481445, -3.1084201335906982], + [-2.741504430770874, -1.3433245420455933], + [0.46165335178375244, -5.952155113220215], + [-0.14273768663406372, 10.180850982666016], + [1.650252103805542, 1.7324808835983276], + [-0.46145099401474, 11.213891983032227], + [-0.006312079727649689, 10.62376594543457], + [9.722406387329102, -2.801774263381958], + [-7.65601110458374, 9.330865859985352], + [-1.013343334197998, 5.987489223480225], + [-6.507652759552002, 7.952723503112793], + [-0.0031364336609840393, -0.9588153958320618], + [-2.0177602767944336, 1.7700492143630981], + [-6.050403118133545, 5.765592098236084], + [1.5198984146118164, 5.100154876708984], + [-0.7289391756057739, 9.362909317016602], + [7.7840352058410645, -1.9652758836746216], + [-5.741347312927246, 6.770583629608154], + [8.358817100524902, -2.426748037338257], + [-0.39139658212661743, 10.118114471435547], + [-4.304611682891846, 6.142643928527832], + [-5.135695934295654, -3.0538523197174072], + [-0.2569599151611328, 8.830511093139648], + [5.962832927703857, -2.0658528804779053], + [-0.3966844081878662, -0.805919885635376], + [-3.5711121559143066, -1.1697258949279785], + [-3.8310494422912598, -1.6402631998062134], + [-0.6082316637039185, 9.413986206054688], + [-4.148638725280762, -2.579556703567505], + [-0.16090303659439087, 9.585465431213379], + [-2.2668519020080566, 0.7925658226013184], + [-3.298846483230591, -1.3819466829299927], + [0.8034436106681824, -0.33616581559181213], + [1.1081044673919678, -7.504806995391846], + [-4.534974575042725, 5.934413909912109], + [2.7082321643829346, -3.9487526416778564], + [-5.450798511505127, 6.065821647644043], + [0.6710203886032104, -4.87987756729126], + [-0.11217416077852249, -1.0999298095703125], + [-0.15841904282569885, -2.2658097743988037], + [-0.1847866177558899, 10.465653419494629], + [1.3908050060272217, -6.265095233917236], + [-4.970221042633057, -3.734956979751587], + [-4.10085391998291, -2.4951562881469727], + [1.7379790544509888, 5.357912063598633], + [-0.7452142834663391, -1.1609998941421509], + [0.13452216982841492, -1.2399860620498657], + [2.2892892360687256, 0.6291290521621704], + [0.2342815399169922, 0.1577886939048767], + [-6.93265962600708, -0.8212845325469971], + [2.3820276260375977, 5.978938102722168], + [2.373539686203003, -2.4151835441589355], + [2.386705160140991, 5.97512674331665], + [-0.37585070729255676, 2.668257713317871], + [-3.9309754371643066, -0.14228683710098267], + [-5.263150691986084, -3.6773340702056885], + [-3.15789794921875, -1.586096167564392], + [2.9582765102386475, -4.493618965148926], + [8.227056503295898, -2.639064073562622], + [-4.398233890533447, 4.878260612487793], + [2.23769211769104, -4.860022068023682], + [5.6804423332214355, -1.0190893411636353], + [-3.7568423748016357, -2.273851156234741], + [2.990450143814087, -4.97322940826416], + [10.003995895385742, -2.780674695968628], + [-0.24958741664886475, 10.715570449829102], + [2.535871982574463, 6.257167339324951], + [-2.0867414474487305, 2.5587525367736816], + [8.668723106384277, -2.446977376937866], + [-1.9020254611968994, 0.7012936472892761], + [-5.450985431671143, -2.4972496032714844], + [2.5230047702789307, 5.866184711456299], + [-0.5672754049301147, 0.13521814346313477], + [2.6938302516937256, -6.229143142700195], + [-6.394766330718994, 4.813663482666016], + [-2.6830742359161377, 2.4415183067321777], + [-3.6990039348602295, -1.1313328742980957], + [-7.350578784942627, 8.995098114013672], + [-6.193131446838379, 7.259863376617432], + [-5.391651630401611, -3.1719062328338623], + [0.4526156783103943, -0.45876792073249817], + [-6.80993127822876, -0.7225984334945679], + [-4.489570140838623, 5.11392879486084], + [-6.812047481536865, 8.40396499633789], + [-5.221441745758057, -3.832624673843384], + [-1.3250386714935303, 0.13629868626594543], + [7.39907693862915, -2.790555238723755], + [3.504408597946167, 6.074286937713623], + [3.6504156589508057, -2.2413170337677], + [-6.348379611968994, 7.646686553955078], + [-2.2429146766662598, 1.7181025743484497], + [-5.181259632110596, 5.879848480224609], + [3.0996859073638916, -4.646401882171631], + [-1.707169771194458, 5.499638557434082], + [-5.0074028968811035, -3.281316041946411], + [8.098885536193848, -2.4920551776885986], + [2.8925349712371826, -4.584280014038086], + [8.410017967224121, -2.2467470169067383], + [8.304058074951172, -2.550799608230591], + [-5.684519290924072, 7.36708927154541], + [-5.273963451385498, 6.117247581481934], + [3.003300428390503, -4.7005205154418945], + [1.8471351861953735, 5.505064010620117], + [1.6882814168930054, 4.086977005004883], + [-4.534750938415527, 5.11483097076416], + [-4.067981243133545, -1.0716115236282349], + [-0.22997558116912842, 10.800458908081055], + [2.9765474796295166, -4.5024261474609375], + [-6.595203399658203, -2.1774890422821045], + [-5.568843841552734, -2.365495443344116], + [4.376860618591309, -3.9901392459869385], + [-4.969078540802002, -2.70637845993042], + [2.4311506748199463, -3.5875394344329834], + [4.3088531494140625, -1.727015495300293], + [-5.038725852966309, -1.2632478475570679], + [4.172352313995361, 6.756842613220215], + [-1.4393701553344727, -1.9301137924194336], + [3.008594274520874, 6.198183536529541], + [-4.068559169769287, -2.605246067047119], + [-4.569615364074707, -0.6834723949432373], + [2.9389729499816895, -4.436649799346924], + [-6.6526570320129395, 8.422863006591797], + [-6.326876163482666, -2.1812565326690674], + [-5.239711284637451, -4.401405334472656], + [0.6200259327888489, -5.848930358886719], + [-3.836343765258789, -2.663480043411255], + [-2.0547358989715576, -1.2529699802398682], + [4.3723464012146, -2.263204574584961], + [1.8976716995239258, -3.9023730754852295], + [-4.64694356918335, 5.635781288146973], + [2.2846264839172363, -3.386082887649536], + [7.872811794281006, -1.9081979990005493], + [3.2681386470794678, -4.884651184082031], + [-2.898249864578247, 5.784636974334717], + [8.422992706298828, -2.28647780418396], + [-4.996951103210449, -2.615208625793457], + [3.260892152786255, -2.312300205230713], + [6.033509731292725, -4.07025146484375], + [-5.016047954559326, 4.023731231689453], + [-2.7423763275146484, -1.4825650453567505], + [2.1731293201446533, -8.748579978942871], + [-5.1797566413879395, -4.2542572021484375], + [4.537937641143799, -5.101387023925781], + [-1.8329477310180664, 6.23000431060791], + [2.3656985759735107, 0.6986422538757324], + [-2.9932477474212646, 0.604208767414093], + [1.3543767929077148, 5.6738176345825195], + [-1.7498952150344849, 2.0705299377441406], + [0.8314602971076965, 4.793584823608398], + [-2.1076643466949463, -2.4901833534240723], + [5.511940956115723, 7.171128273010254], + [-4.536840438842773, 4.022022724151611], + [1.6551858186721802, -3.296673536300659], + [0.10539320856332779, -1.5849939584732056], + [-5.249109745025635, 6.391568183898926], + [-2.231199026107788, 1.4942823648452759], + [3.804060697555542, 6.9667134284973145], + [2.95320463180542, -4.780152320861816], + [1.9328076839447021, -3.6464388370513916], + [-2.0931875705718994, 1.2880971431732178], + [-6.528198719024658, 2.8177192211151123], + [-3.0625157356262207, 5.240634918212891], + [-4.962599277496338, -2.146663188934326], + [9.312809944152832, -2.5975682735443115], + [-5.509581089019775, -2.8020784854888916], + [2.684765577316284, -4.4633307456970215], + [2.9745609760284424, 0.9598124027252197], + [2.0292952060699463, 5.270434379577637], + [-3.5871825218200684, 5.993985176086426], + [8.854546546936035, -2.8574328422546387], + [1.7715141773223877, 3.965033769607544], + [2.442695140838623, 0.6260229349136353], + [6.613234043121338, -2.81816029548645], + [-4.9977288246154785, 5.696442604064941], + [0.8261206746101379, -6.660606861114502], + [1.5510766506195068, 5.562979698181152], + [2.2701730728149414, 5.82422399520874], + [-7.453975200653076, 9.311387062072754], + [-5.836694240570068, -0.2515801191329956], + [-4.363119125366211, 6.104535102844238], + [-5.400087356567383, -2.577442169189453], + [-4.701529502868652, -1.3832306861877441], + [2.2440078258514404, 5.764677047729492], + [-5.127140522003174, -3.5179476737976074], + [7.664106845855713, -1.920735239982605], + [8.018148422241211, -1.9340670108795166], + [-4.787363052368164, -2.8236441612243652], + [4.973278522491455, -1.559876561164856], + [2.951455593109131, 6.056290626525879], + [7.30313777923584, -3.792776107788086], + [0.870233952999115, 0.024150874465703964], + [-2.296656608581543, 2.2332684993743896], + [-3.6694464683532715, -1.3407496213912964], + [-4.0824995040893555, -2.991858720779419], + [-7.1667799949646, -1.8382902145385742], + [-3.534210205078125, -3.4366135597229004], + [-3.1084229946136475, 5.395721435546875], + [-4.066412448883057, 7.714812278747559], + [-0.2673548460006714, 9.653106689453125], + [-4.04002571105957, -3.1686244010925293], + [-2.560863733291626, -4.2432708740234375], + [5.447798252105713, -1.0481677055358887], + [2.6616508960723877, -5.927043914794922], + [-0.1739681363105774, 10.283655166625977], + [-3.5432021617889404, -2.650517225265503], + [-6.102925777435303, 7.336393356323242], + [-3.415698289871216, -3.8769137859344482], + [-1.661712646484375, -0.08018624782562256], + [-5.47921085357666, 7.118851661682129], + [-4.149509906768799, -3.290447950363159], + [9.913219451904297, -2.7530741691589355], + [-5.83615779876709, -0.905421257019043], + [-0.45695632696151733, 10.692327499389648], + [-3.3039731979370117, -0.7831883430480957], + [-5.909961223602295, 6.555139541625977], + [1.81901216506958, 0.7388423681259155], + [2.5488173961639404, -3.73333740234375], + [3.2093656063079834, -5.022369384765625], + [-4.917952537536621, -2.696058750152588], + [-3.664052724838257, -1.1891239881515503], + [1.795111060142517, -4.971133232116699], + [-5.758124828338623, -2.1675994396209717], + [-7.247389793395996, 8.881942749023438], + [8.943597793579102, -2.5268125534057617], + [-5.372727870941162, 2.610386610031128], + [-3.8339951038360596, -3.284668445587158], + [1.895923137664795, 5.208361625671387], + [1.642204999923706, -7.662050724029541], + [-2.387239456176758, 2.055896282196045], + [2.036599636077881, -9.911008834838867], + [-6.014636516571045, 1.784920573234558], + [-2.3380515575408936, -2.9750659465789795], + [-2.46982479095459, 2.2109389305114746], + [-4.357302188873291, -1.789823055267334], + [-3.0438778400421143, -2.3035085201263428], + [-7.448187828063965, -1.9465086460113525], + [3.148775815963745, -4.76296329498291], + [-0.26766079664230347, 9.662908554077148], + [-4.738235950469971, -5.776481628417969], + [-4.0087456703186035, -1.2306355237960815], + [4.724530220031738, -0.777045488357544], + [2.3634397983551025, -7.33775520324707], + [-0.8769248723983765, 9.374567031860352], + [2.9257805347442627, -4.600205421447754], + [2.4605348110198975, -7.594396114349365], + [3.2651236057281494, -5.644716262817383], + [-1.7278640270233154, -2.709672451019287], + [-6.029751777648926, -4.106593132019043], + [2.098578453063965, 4.858137130737305], + [-2.6786978244781494, 1.4976314306259155], + [4.725388526916504, -1.2280193567276], + [1.6789238452911377, -7.395440101623535], + [0.5759470462799072, -0.2711712121963501], + [6.840232849121094, -1.9947340488433838], + [1.6623467206954956, -8.081571578979492], + [-6.076390743255615, 6.8499674797058105], + [-0.038766033947467804, 9.632721900939941], + [6.517131805419922, -1.660607933998108], + [-5.532188415527344, -1.7706228494644165], + [-6.166050434112549, -0.731351912021637], + [-3.4156582355499268, -3.746065378189087], + [-2.2188403606414795, 1.655862808227539], + [-7.717869281768799, -1.200718879699707], + [-0.39486539363861084, 10.96301555633545], + [7.085883617401123, -2.403554916381836], + [-7.609426498413086, -1.4716602563858032], + [6.671708583831787, -1.5057090520858765], + [-4.27075719833374, 2.3413023948669434], + [-3.430560827255249, 5.269712924957275], + [2.055513858795166, 5.558709144592285], + [-0.5316238403320312, -3.048358678817749], + [-4.648352146148682, -1.3309653997421265], + [3.016871452331543, -4.523473739624023], + [-1.5558780431747437, 5.552457809448242], + [2.2849032878875732, 5.842350482940674], + [10.2296781539917, -2.802457094192505], + [-0.7518386244773865, 5.067841529846191], + [6.979475975036621, -1.4016791582107544], + [-5.3441901206970215, -1.7412110567092896], + [-0.13403218984603882, -1.2380605936050415], + [-5.501867771148682, -1.5697437524795532], + [-0.7852845788002014, 9.641931533813477], + [-1.841188907623291, 1.1804301738739014], + [-4.535419940948486, -2.3085153102874756], + [1.587752103805542, 5.232941627502441], + [-4.79917049407959, -4.455151557922363], + [-4.9658355712890625, -2.346134901046753], + [-5.610157012939453, 3.5005552768707275], + [-5.995620250701904, -2.132526159286499], + [-4.833232402801514, -1.834920883178711], + [-6.395772933959961, 7.883074760437012], + [1.9137957096099854, -7.433550834655762], + [2.5958034992218018, -7.016966819763184], + [2.8739521503448486, -4.713112831115723], + [-6.3427019119262695, 8.330903053283691], + [-0.1992957890033722, -0.7676494717597961], + [1.0246050357818604, -0.53488689661026], + [-3.66821026802063, -2.418623208999634], + [0.8423397541046143, 6.923703193664551], + [2.6044533252716064, -3.9323818683624268], + [5.213005542755127, 7.362637519836426], + [1.6861920356750488, -3.18222975730896], + [-4.399816989898682, -3.0086166858673096], + [-2.495985507965088, -1.0833746194839478], + [8.96822738647461, -2.511200189590454], + [9.07025146484375, -2.5331146717071533], + [-3.047870635986328, -2.5887582302093506], + [8.335516929626465, -2.454447031021118], + [3.3925249576568604, -5.059814453125], + [-0.2097485065460205, 9.691617965698242], + [-5.229079723358154, -3.1092026233673096], + [-4.681603908538818, -2.3942677974700928], + [-5.300365924835205, -1.9831098318099976], + [-2.7059271335601807, 1.4403859376907349], + [-5.919175148010254, 2.6906020641326904], + [8.303506851196289, -2.926499843597412], + [-2.100677251815796, 2.7890002727508545], + [1.799009084701538, 5.364421844482422], + [2.3982067108154297, -8.225893020629883], + [-4.952282905578613, 5.304015159606934], + [7.000734806060791, -1.7479023933410645], + [-4.201070785522461, -1.1755975484848022], + [3.2203385829925537, -3.8043668270111084], + [-5.519835948944092, 2.2324411869049072], + [-2.2153148651123047, 1.0225380659103394], + [-2.0179927349090576, 1.2893476486206055], + [-4.904369354248047, -2.630546808242798], + [8.179825782775879, -2.3009798526763916], + [-2.440953254699707, 2.0228445529937744], + [-2.426190137863159, 1.0277907848358154], + [-4.01292085647583, -4.205576419830322], + [-3.2027719020843506, -4.865663528442383], + [4.2729811668396, 6.839552879333496], + [-6.587881565093994, -1.340739369392395], + [-5.11472749710083, -2.82920503616333], + [-1.4261583089828491, 0.9521347284317017], + [-4.492608547210693, -4.38648796081543], + [-4.153322696685791, -1.7873479127883911], + [2.6682658195495605, -4.2243218421936035], + [-0.180402010679245, -1.1310869455337524], + [-4.542576313018799, -3.7009270191192627], + [-5.059839725494385, -4.209471702575684], + [-0.8377470374107361, 3.3186047077178955], + [2.632258653640747, -4.132277011871338], + [-5.5558366775512695, 8.658283233642578], + [-4.987210273742676, -2.966956377029419], + [3.98183274269104, 5.150659561157227], + [2.9468352794647217, -4.378320693969727], + [2.6549079418182373, -4.04926872253418], + [-4.392197132110596, -4.253506660461426], + [-6.585336685180664, 1.6157643795013428], + [-3.9861114025115967, -5.715415000915527], + [-3.211318254470825, -4.343014240264893], + [5.996711254119873, -1.181904911994934], + [-4.410063743591309, 3.7817819118499756], + [-6.659087657928467, -1.478055477142334], + [-3.5430967807769775, 6.460089206695557], + [9.393440246582031, -2.6448330879211426], + [6.540520191192627, -4.5958571434021], + [2.8507769107818604, 0.8767861127853394], + [-6.079453468322754, 6.008240699768066], + [-0.27298444509506226, 10.538208961486816], + [1.6456027030944824, -7.579663276672363], + [-1.1457725763320923, -1.0292028188705444], + [-2.46547532081604, 1.5015970468521118], + [-4.710512161254883, -2.609248638153076], + [-7.325947284698486, -0.9592819213867188], + [-4.7609686851501465, 0.6018694639205933], + [-5.303133010864258, 0.7889057397842407], + [-2.221827268600464, -0.3449198603630066], + [-3.8449316024780273, -1.8479582071304321], + [0.7215839624404907, 0.04161558672785759], + [-6.1489410400390625, -1.7075155973434448], + [-4.796022891998291, -4.8616180419921875], + [-0.10832399874925613, 2.84423565864563], + [1.6346168518066406, -7.437650203704834], + [-4.873626232147217, -3.18380069732666], + [6.616403579711914, -2.284733533859253], + [2.9523043632507324, 5.055150985717773], + [-6.772985935211182, -1.107628345489502], + [6.761797904968262, -0.8453620672225952], + [5.7055344581604, 7.526360511779785], + [1.0463321208953857, -7.061770439147949], + [2.6343023777008057, 0.8794625997543335], + [-5.025038242340088, -4.0701141357421875], + [2.1630375385284424, 5.663242340087891], + [-2.473015785217285, 1.9123345613479614], + [-2.704134464263916, 2.287531852722168], + [0.3987855017185211, -0.5192840099334717], + [7.959356784820557, -4.108772277832031], + [5.677279949188232, -3.5871469974517822], + [-2.341397523880005, 0.9777008295059204], + [5.938844203948975, -1.8677952289581299], + [3.178642749786377, -5.051557540893555], + [5.925613880157471, -1.0096960067749023], + [-5.57716178894043, 3.7956554889678955], + [1.5917470455169678, 5.516714096069336], + [-3.980478048324585, 5.032543659210205], + [-6.162006855010986, -2.1646525859832764], + [-5.764211177825928, -3.6962060928344727], + [-5.1548309326171875, -2.3937416076660156], + [-5.209200382232666, -2.4995462894439697], + [-5.469116687774658, 1.3485101461410522], + [-5.59489631652832, 7.907815933227539], + [-3.609571695327759, 5.658847332000732], + [2.2026169300079346, 5.531344413757324], + [4.27011775970459, -1.6049226522445679], + [-5.230922698974609, -3.3808999061584473], + [-0.24140554666519165, 10.259798049926758], + [-0.3301076292991638, 9.875452041625977], + [6.750962257385254, -1.5059425830841064], + [-0.57213294506073, 9.866594314575195], + [6.01752233505249, -1.4335137605667114], + [-0.21512454748153687, -1.6818276643753052], + [-6.0710859298706055, 6.103067874908447], + [6.979008197784424, -0.9590017795562744], + [-0.27279406785964966, 10.640113830566406], + [9.298812866210938, -2.553373098373413], + [3.2058804035186768, -5.044523239135742], + [5.193726062774658, 7.088037967681885], + [-4.218033313751221, -2.000396490097046], + [-4.7400312423706055, -0.48866069316864014], + [3.0495097637176514, -4.787954330444336], + [-0.42191818356513977, -1.1477676630020142], + [2.137364625930786, -5.873668670654297], + [9.78136157989502, -2.7347280979156494], + [-8.068138122558594, 0.26822006702423096], + [-4.519998073577881, -2.890944242477417], + [2.6847240924835205, -4.4150495529174805], + [-4.138530731201172, 3.8043198585510254], + [-4.583948135375977, 6.550637245178223], + [0.8655603528022766, 0.5896676182746887], + [1.4381089210510254, 0.5142792463302612], + [-3.612046480178833, -3.1867849826812744], + [5.7960028648376465, -1.3450056314468384], + [-0.33802682161331177, 9.511758804321289], + [3.415693998336792, -5.6110687255859375], + [0.6162896156311035, -6.4938459396362305], + [-5.24419641494751, 7.624057769775391], + [-2.942425012588501, 3.4151031970977783], + [2.87970232963562, 6.1138916015625], + [1.7062976360321045, -7.75996732711792], + [-3.693077564239502, -2.657449960708618], + [-4.391073226928711, -2.3387019634246826], + [-2.16344952583313, 3.754375696182251], + [9.438581466674805, -2.643505334854126], + [1.525589942932129, -2.8637430667877197], + [3.7493512630462646, -3.2690250873565674], + [-4.926408290863037, -3.03887677192688], + [-3.802509069442749, -3.818772792816162], + [-2.245478391647339, 2.4077837467193604], + [-0.03329569846391678, 7.71284294128418], + [-5.948284149169922, 1.356895923614502], + [-1.392717957496643, 1.305460810661316], + [9.026280403137207, -2.479217767715454], + [1.125178575515747, -6.85074520111084], + [-4.373220443725586, -3.57159161567688], + [-3.4275035858154297, -1.1180239915847778], + [-3.9668266773223877, -2.609511613845825], + [0.24005967378616333, 0.5938640236854553], + [-5.479692459106445, -2.845628499984741], + [-4.779989719390869, 5.272480010986328], + [-2.753826856613159, 2.724972724914551], + [-0.8243047595024109, 10.076715469360352], + [-5.688416957855225, -1.9435795545578003], + [-5.178051471710205, -2.296858310699463], + [-5.724644184112549, 7.466052532196045], + [-6.582807540893555, -1.4981037378311157], + [-2.3280909061431885, 5.95615291595459], + [0.28576090931892395, -0.8407090902328491], + [2.8338677883148193, -6.6945953369140625], + [-2.21458101272583, 0.18042153120040894], + [2.6120765209198, -3.9037280082702637], + [2.6024069786071777, -5.117990016937256], + [-5.560421466827393, 2.692962169647217], + [2.566274642944336, 0.5557955503463745], + [9.791352272033691, -2.7275643348693848], + [-3.157067060470581, 5.596808910369873], + [-6.182314872741699, 6.721189498901367], + [2.1007535457611084, 0.8329387307167053], + [-7.871878623962402, 0.01801883801817894], + [2.4090168476104736, -3.8794329166412354], + [2.5869429111480713, -7.1106085777282715], + [2.9097368717193604, -4.370454788208008], + [-4.145530700683594, 7.348371982574463], + [-4.842922687530518, -2.163745880126953], + [-4.875711917877197, 3.8018956184387207], + [-3.265714406967163, -3.1595709323883057], + [2.023935079574585, -4.137687683105469], + [1.4308650493621826, 5.386369705200195], + [4.909214973449707, -2.136976480484009], + [2.746486186981201, -5.509698867797852], + [-4.780060291290283, 3.981740713119507], + [-0.4042130708694458, 9.10397720336914], + [-3.8286383152008057, -1.8198264837265015], + [-1.599119782447815, 2.2942769527435303], + [1.7162775993347168, -5.931295394897461], + [3.0225608348846436, -4.679483890533447], + [-5.203285217285156, -0.8428255319595337], + [-0.49239689111709595, -0.6343604326248169], + [-5.844127178192139, 5.010537624359131], + [-0.6391820311546326, 5.851832389831543], + [3.2337758541107178, -4.836616516113281], + [-0.15860700607299805, -0.7873742580413818], + [-6.485430717468262, 8.234216690063477], + [-3.4871582984924316, -2.41853404045105], + [-5.986556529998779, -1.9723342657089233], + [1.8259854316711426, -7.805420875549316], + [3.0298855304718018, -4.543052673339844], + [0.011863075196743011, -0.42716434597969055], + [2.359882116317749, -5.637523651123047], + [2.7670037746429443, -4.168366432189941], + [2.245133399963379, -4.161079406738281], + [1.652092695236206, -6.369913578033447], + [1.997002363204956, -5.382246971130371], + [6.6892876625061035, -3.251650094985962], + [-1.356748104095459, -1.5500975847244263], + [-1.3858765363693237, -2.0983200073242188], + [-7.2062153816223145, -2.0188262462615967], + [1.5441830158233643, 5.577588081359863], + [5.604838848114014, -1.1757937669754028], + [-2.0733189582824707, 2.4171175956726074], + [3.289330244064331, -6.342494010925293], + [6.862709999084473, -3.601361036300659], + [-0.45501548051834106, 9.502619743347168], + [-5.213034152984619, 6.253962516784668], + [-1.4823698997497559, 1.9749287366867065], + [-2.957306146621704, -0.5117020010948181], + [-3.8615143299102783, 5.252169609069824], + [-5.674257278442383, -2.4902522563934326], + [1.3239229917526245, -7.416728973388672], + [3.0898449420928955, -4.862388610839844], + [-3.7869832515716553, 5.805187702178955], + [-7.0655517578125, -2.2545650005340576], + [-0.8952308297157288, -2.5566375255584717], + [2.697066068649292, -4.522221088409424], + [-2.506971836090088, 1.1073442697525024], + [-3.4057512283325195, -1.043080449104309], + [-4.270984649658203, 6.167452812194824], + [6.406214237213135, -5.5587477684021], + [0.2709397077560425, -3.412177801132202], + [7.859695911407471, -2.1024162769317627], + [-3.345388650894165, 3.705510377883911], + [-8.035391807556152, -0.7677903175354004], + [-0.8358416557312012, 8.581963539123535], + [-5.072288513183594, -3.5459907054901123], + [-0.2709493637084961, -0.6355540752410889], + [1.7633721828460693, 5.377442836761475], + [-4.92464017868042, -6.401371955871582], + [-6.677338600158691, -2.2453482151031494], + [0.520781397819519, -0.8846940994262695], + [-4.5427069664001465, -2.287048816680908], + [-2.4441683292388916, 2.2812016010284424], + [-4.634644031524658, 4.014193058013916], + [-6.1596455574035645, 3.1225972175598145], + [-6.686660289764404, 8.427658081054688], + [-0.21252012252807617, 10.036466598510742], + [-2.8949501514434814, -2.2293264865875244], + [2.8884871006011963, -4.419546127319336], + [5.735345363616943, -1.0684555768966675], + [1.275140643119812, -7.186245918273926], + [-5.855179309844971, 2.51979923248291], + [4.272358417510986, -2.504265546798706], + [-6.117592811584473, -2.408452033996582], + [5.470265865325928, -1.1602236032485962], + [0.0742364451289177, 9.881115913391113], + [-5.0239481925964355, -3.3268070220947266], + [-2.4226975440979004, 0.6891158223152161], + [-3.688129425048828, -1.0564935207366943], + [-3.9368889331817627, 0.12567710876464844], + [6.942945957183838, -1.638079047203064], + [-6.293551445007324, 7.988953590393066], + [-4.829644680023193, -3.2206857204437256], + [-0.06743843108415604, -0.5420456528663635], + [-4.578848361968994, 5.704822540283203], + [-5.168995380401611, 2.384154796600342], + [-3.2766635417938232, -1.6977565288543701], + [-0.19165527820587158, 9.41797161102295], + [-2.0702035427093506, 2.6815874576568604], + [-4.030797004699707, -1.650596261024475], + [0.9999220967292786, 0.3105663061141968], + [-4.015899181365967, -3.3070859909057617], + [-0.4243685007095337, 9.984735488891602], + [2.34255051612854, -3.203538179397583], + [1.5295641422271729, -2.89281964302063], + [8.779555320739746, -2.8885607719421387], + [-6.184523105621338, 7.885077476501465], + [8.361839294433594, -2.4289443492889404], + [-4.660134792327881, -4.502963066101074], + [1.6065940856933594, 4.782613754272461], + [2.1468522548675537, 5.202933311462402], + [-3.5898587703704834, 0.5868899822235107], + [-0.23324739933013916, 10.046561241149902], + [1.3470196723937988, 5.803128242492676], + [-2.8222315311431885, 4.5031232833862305], + [-0.840040385723114, -0.9396123886108398], + [-7.119186878204346, 8.887333869934082], + [3.0784504413604736, -4.693126678466797], + [-3.390528440475464, -1.8611230850219727], + [-5.152255535125732, -3.1362578868865967], + [4.896831512451172, -1.067958950996399], + [1.1318439245224, -0.3982905149459839], + [6.437047958374023, -1.2374862432479858], + [2.9666242599487305, -4.5969648361206055], + [-4.87904167175293, -3.320420980453491], + [-2.3885557651519775, 2.0538737773895264], + [-3.0772910118103027, -2.642427921295166], + [-4.6292195320129395, -1.880070686340332], + [2.6519179344177246, -4.082246780395508], + [-5.082417011260986, -3.516509771347046], + [-2.625703811645508, 0.7682985663414001], + [-2.778582811355591, 2.925565719604492], + [-2.139892578125, 2.097827196121216], + [2.2683448791503906, 4.020660400390625], + [1.5944883823394775, 0.7913624048233032], + [-0.746281087398529, 5.097905158996582], + [1.895580768585205, -5.80361270904541], + [1.7118725776672363, 5.283784866333008], + [0.11601125448942184, -0.9295806884765625], + [2.727290630340576, -5.189920425415039], + [-5.196195602416992, 8.155141830444336], + [-3.446521043777466, 1.2148802280426025], + [-4.103038787841797, -1.9332026243209839], + [-4.595783233642578, 5.401047229766846], + [-4.974696636199951, 3.9337830543518066], + [-6.334921360015869, -1.671256422996521], + [-4.196610927581787, 0.6177398562431335], + [3.087947130203247, -4.639154434204102], + [-2.508587598800659, 2.004422664642334], + [-4.130443572998047, -2.3828670978546143], + [-0.02724749594926834, 8.858168601989746], + [-6.088188648223877, -2.24808669090271], + [-1.8394811153411865, 0.007917072623968124], + [5.8708367347717285, -2.6009960174560547], + [-5.389685153961182, -3.10136342048645], + [-3.6032512187957764, -2.3042263984680176], + [-3.2769391536712646, -1.5739237070083618], + [-3.7159578800201416, -3.078718900680542], + [-5.565556049346924, 2.8538005352020264], + [-6.113320827484131, 2.6826179027557373], + [1.3757946491241455, 1.1641486883163452], + [6.529165744781494, -1.4820195436477661], + [-5.396350383758545, 5.869812488555908], + [-6.835868835449219, 7.4962310791015625], + [-3.4915857315063477, -1.865871548652649], + [-0.33612340688705444, 10.282483100891113], + [1.9193382263183594, -3.023838520050049], + [2.7025344371795654, -4.483198165893555], + [3.8526859283447266, 6.0363874435424805], + [-3.3847501277923584, -3.8151659965515137], + [-6.006138801574707, -3.021395683288574], + [-4.25078010559082, 4.721739292144775], + [0.7738906145095825, -0.9976656436920166], + [-5.271064281463623, 2.3795926570892334], + [1.0558931827545166, 0.6618296504020691], + [9.66053295135498, -2.6943442821502686], + [6.069517135620117, -5.886794090270996], + [7.77230167388916, -2.47090220451355], + [-1.6812865734100342, -0.6951295137405396], + [-3.5780580043792725, -0.20501667261123657], + [2.9467451572418213, -4.652308464050293], + [-0.5331769585609436, 9.183219909667969], + [2.0665454864501953, 1.0282758474349976], + [-0.1358383297920227, 9.331871032714844], + [-8.1521577835083, -0.9954516887664795], + [-2.508761167526245, 0.7389695644378662], + [3.3443872928619385, 1.1840338706970215], + [6.698202133178711, -1.466452717781067], + [-5.454589366912842, -0.5931601524353027], + [-2.8916523456573486, -4.39503288269043], + [-3.2979161739349365, -2.571444272994995], + [2.4329793453216553, -4.380610942840576], + [-5.7231950759887695, 6.7108025550842285], + [-4.767695903778076, -3.2663514614105225], + [-2.6401712894439697, -4.318280220031738], + [1.7738255262374878, -2.9190776348114014], + [-3.8740789890289307, -4.9352922439575195], + [-4.777554988861084, -4.279623031616211], + [3.733942747116089, 6.402842044830322], + [7.2750091552734375, -1.725475788116455], + [-4.345647811889648, -2.9560279846191406], + [2.9259979724884033, -4.39888858795166], + [-2.5309057235717773, 6.331038475036621], + [-0.21088624000549316, 10.12200927734375], + [-3.6830451488494873, -2.5655698776245117], + [-7.21316385269165, 8.893996238708496], + [-0.617953360080719, -0.6487135291099548], + [-4.636992931365967, 5.006877899169922], + [7.576164722442627, -2.407470941543579], + [0.15156513452529907, -3.666280508041382], + [-0.24548113346099854, 10.247430801391602], + [8.5783109664917, -2.802196741104126], + [-4.908024311065674, -2.567739248275757], + [1.4116255044937134, -7.016290664672852], + [3.2243664264678955, -5.1403703689575195], + [-4.570377826690674, -3.167259931564331], + [3.2895586490631104, -5.212577819824219], + [-5.27085542678833, 6.823794841766357], + [-0.4226541221141815, -1.7869759798049927], + [-2.3387653827667236, 5.879724979400635], + [-3.9159533977508545, 5.923151016235352], + [-3.4995224475860596, -1.8799389600753784], + [-5.986107349395752, -2.497222900390625], + [-4.501267433166504, 1.3497859239578247], + [8.07387638092041, -2.343513011932373], + [-6.249967098236084, 7.397723197937012], + [2.4235122203826904, 4.229130268096924], + [3.1403839588165283, -4.703637599945068], + [-5.270226001739502, -2.818652391433716], + [8.77363109588623, -2.331433057785034], + [-5.379955768585205, -0.7684512734413147], + [-5.0847578048706055, 7.03804874420166], + [-2.1944446563720703, 1.1727910041809082], + [-1.0840814113616943, -0.7420521974563599], + [0.5524107217788696, -5.666706085205078], + [8.337291717529297, -2.1065480709075928], + [-4.817444324493408, 7.730592727661133], + [-6.0501389503479, 8.145322799682617], + [-5.8154683113098145, 4.370904445648193], + [1.4076111316680908, -2.7360897064208984], + [8.419805526733398, -2.302396774291992], + [-2.5347423553466797, 1.6904710531234741], + [-2.1992456912994385, 0.8235452175140381], + [8.0171537399292, -1.8244868516921997], + [-7.372286319732666, -1.2903553247451782], + [-5.393509387969971, -3.2850241661071777], + [0.8020650744438171, -6.935354232788086], + [0.5589004158973694, -5.912221908569336], + [-7.058821678161621, 3.4134912490844727], + [-2.3826730251312256, -2.8497111797332764], + [-7.898036956787109, -1.0267324447631836], + [-4.516872882843018, -2.8752946853637695], + [2.0458364486694336, 5.601236343383789], + [-0.1751091480255127, 10.734999656677246], + [-5.452144145965576, 5.540408134460449], + [-5.4502434730529785, -3.5125436782836914], + [1.9121177196502686, 1.5811148881912231], + [-4.276233196258545, 6.466341018676758], + [-4.959222316741943, 5.646557807922363], + [1.8026947975158691, -2.875627279281616], + [-4.62502908706665, -2.917863607406616], + [2.05546236038208, 5.782697677612305], + [2.6173436641693115, -5.537142753601074], + [-7.412642955780029, 1.6517581939697266], + [-5.657693386077881, 5.796281337738037], + [-7.6424455642700195, -1.941195011138916], + [-5.501697063446045, -3.1831912994384766], + [-0.24149709939956665, 3.070810079574585], + [2.048051118850708, -7.425254821777344], + [-8.441863059997559, -1.0566810369491577], + [-4.499932289123535, -3.0359504222869873], + [-2.306762218475342, 1.607914686203003], + [-4.581074237823486, 6.360786437988281], + [-6.671542644500732, -0.9103338718414307], + [-0.8603507876396179, -2.6177380084991455], + [-5.166018486022949, 2.404698610305786], + [-5.987940311431885, -1.9998935461044312], + [4.004688262939453, -3.627086877822876], + [-3.412156343460083, -4.952199935913086], + [-2.3642632961273193, 0.5484599471092224], + [-5.777854919433594, -1.7212233543395996], + [1.9632196426391602, 0.7891713380813599], + [2.6904757022857666, -4.257687568664551], + [2.2097909450531006, -6.654677391052246], + [0.07448213547468185, -3.828883409500122], + [-5.036744594573975, 2.3655171394348145], + [-6.293667316436768, -1.106421709060669], + [4.838449954986572, 7.481471061706543], + [-4.052516937255859, 4.296782493591309], + [-6.2674126625061035, -2.2885072231292725], + [-3.5063765048980713, -0.01340210810303688], + [-5.364772796630859, 0.020250793546438217], + [-5.542086124420166, -2.7665536403656006], + [-3.2026126384735107, -4.200128555297852], + [7.113999843597412, -1.7438318729400635], + [1.251903772354126, -1.4710286855697632], + [-2.599536657333374, -0.894189178943634], + [-4.927320957183838, 5.471238613128662], + [-3.4765918254852295, -2.487696886062622], + [-0.43147605657577515, 8.474713325500488], + [7.814767837524414, -2.1695525646209717], + [1.628435730934143, 5.504823684692383], + [-5.237061023712158, -3.6440680027008057], + [-0.2595277428627014, 9.9459810256958], + [-2.045841693878174, 0.4620717763900757], + [6.398675918579102, -5.165884971618652], + [-1.6625239849090576, -2.537329912185669], + [0.7940264344215393, -6.101762294769287], + [-4.272980213165283, 1.2719757556915283], + [-2.096576452255249, 0.2260724902153015], + [-5.014793872833252, 6.090226650238037], + [9.267049789428711, -2.664764881134033], + [2.6943418979644775, -4.0602264404296875], + [-6.361347675323486, -1.4094420671463013], + [-4.598944187164307, -3.36980938911438], + [-7.68163537979126, -1.394783854484558], + [2.073481321334839, -5.934959411621094], + [-5.24087381362915, -3.5375142097473145], + [-0.2656462788581848, 9.550198554992676], + [3.7781026363372803, 6.669445037841797], + [-2.975475549697876, 2.4951987266540527], + [-1.8313167095184326, 1.2607102394104004], + [2.8375985622406006, -4.376090049743652], + [2.8899950981140137, -4.357194900512695], + [-4.478658676147461, 5.6783552169799805], + [-2.2368624210357666, 2.5408997535705566], + [6.451256275177002, -2.720496654510498], + [-2.216123342514038, 0.05873971804976463], + [-6.608821392059326, 7.896155834197998], + [-1.9269368648529053, 6.094006061553955], + [-3.904526948928833, -2.134681224822998], + [8.76906681060791, -2.8517825603485107], + [2.897850275039673, -4.396699905395508], + [-5.861908912658691, 4.808403968811035], + [-3.6570050716400146, -1.8209431171417236], + [-3.2136590480804443, 1.6944575309753418], + [2.9475772380828857, -4.992944240570068], + [-3.0508337020874023, -0.3286786377429962], + [2.8525426387786865, -4.085230827331543], + [-4.946399688720703, -4.051136016845703], + [2.7604589462280273, -4.137749671936035], + [8.916474342346191, -2.5525062084198], + [1.5823750495910645, -3.8422083854675293], + [-2.9633724689483643, 5.143065452575684], + [-7.841341018676758, -1.169831395149231], + [-0.791727602481842, 8.117572784423828], + [8.803166389465332, -2.475346803665161], + [-2.3819668292999268, 1.96849524974823], + [-6.6128010749816895, 0.201698899269104], + [-2.3615365028381348, 0.9734805822372437], + [-4.213410377502441, -3.629401922225952], + [-2.6084303855895996, -3.150667428970337], + [-8.121175765991211, -0.7949973344802856], + [-2.355778455734253, -0.9972251653671265], + [2.008936643600464, 5.735517501831055], + [7.25577974319458, -1.587217926979065], + [8.21573257446289, -2.049220561981201], + [-0.26728397607803345, 10.004030227661133], + [-3.986234426498413, -2.7613332271575928], + [-0.3511122465133667, 10.236122131347656], + [-1.3312870264053345, -0.6941953897476196], + [1.2521522045135498, 1.7292252779006958], + [-5.140562057495117, -2.6779730319976807], + [2.1446902751922607, -7.785292148590088], + [9.54005241394043, -2.5989580154418945], + [-4.697335720062256, -3.7552382946014404], + [-3.6267030239105225, 5.8581695556640625], + [0.8693997263908386, -0.14576080441474915], + [2.6754915714263916, -4.116429328918457], + [6.967349052429199, -3.3637490272521973], + [8.786036491394043, -2.353058099746704], + [0.554966151714325, -0.13816340267658234], + [1.221286654472351, -6.833907127380371], + [0.38080769777297974, -0.3828847408294678], + [1.696772575378418, 1.928580641746521], + [9.86841869354248, -2.684065580368042], + [0.32467108964920044, 10.153149604797363], + [-1.4227304458618164, -0.593889594078064], + [2.0213990211486816, -3.4269587993621826], + [3.120382070541382, -4.676116466522217], + [5.624094486236572, 7.909668922424316], + [1.4113104343414307, 4.563933849334717], + [-6.180253505706787, 3.720381736755371], + [9.311066627502441, -2.586945056915283], + [-4.865113258361816, 4.357422828674316], + [-5.024478912353516, 4.079794883728027], + [-7.025150775909424, 8.948233604431152], + [0.9549005627632141, -5.88308572769165], + [-7.651147365570068, 9.540077209472656], + [8.571944236755371, -2.2761013507843018], + [1.8254175186157227, 2.0904557704925537], + [-0.20313259959220886, -0.8206908702850342], + [1.1270813941955566, -5.575689315795898], + [-5.624288082122803, 4.866250038146973], + [0.7907336354255676, -6.414898872375488], + [8.076111793518066, -2.4127745628356934], + [-2.046999931335449, 5.687036991119385], + [-1.918826699256897, 2.3498945236206055], + [7.670711994171143, -1.9478697776794434], + [1.7194007635116577, -8.047126770019531], + [6.5167083740234375, -1.5139468908309937], + [-4.7160491943359375, -0.21882295608520508], + [7.68981409072876, -1.908599853515625], + [7.722425937652588, -1.9486632347106934], + [7.104172706604004, -1.4783260822296143], + [4.80776309967041, 7.3488945960998535], + [-3.4813339710235596, -2.1635396480560303], + [-7.615780830383301, -1.633302092552185], + [4.130857467651367, 6.163908004760742], + [-1.9646193981170654, -0.09171533584594727], + [1.86460280418396, 6.355163097381592], + [2.123170852661133, -7.170642852783203], + [-4.873500823974609, -3.392759084701538], + [-2.614882230758667, 2.4551913738250732], + [-4.327866077423096, 5.207873344421387], + [-6.255758762359619, 8.120112419128418], + [-5.286962032318115, 7.573288440704346], + [10.09134578704834, -2.7775862216949463], + [1.8090226650238037, -3.8594555854797363], + [7.955433368682861, -5.2388505935668945], + [9.538240432739258, -2.6978683471679688], + [-3.2691047191619873, 0.027230557054281235], + [-5.124398231506348, -0.21979331970214844], + [2.606154203414917, -5.186478614807129], + [-2.3148388862609863, 1.9121826887130737], + [-0.158871591091156, 9.925943374633789], + [-6.159858703613281, -2.5819225311279297], + [-1.8965415954589844, 5.578044414520264], + [-2.378979206085205, 5.639565944671631], + [1.1471997499465942, -6.700425148010254], + [-5.249450206756592, 3.787320613861084], + [-2.147822618484497, 1.533492088317871], + [-0.8821153044700623, 9.743688583374023], + [-0.17133885622024536, 9.456060409545898], + [-5.697383880615234, 4.194164752960205], + [8.338390350341797, -2.2262990474700928], + [3.1447834968566895, -4.955863952636719], + [-5.1375274658203125, -2.1020593643188477], + [3.1659204959869385, -4.740826606750488], + [2.2723729610443115, -7.422554969787598], + [-4.065562725067139, -0.0700167715549469], + [0.001524500548839569, 9.916267395019531], + [5.572166442871094, -1.1744810342788696], + [3.2391464710235596, -5.320304870605469], + [-5.210547924041748, 3.0000715255737305], + [-4.141528129577637, -1.0773338079452515], + [-5.280319690704346, -3.5046889781951904], + [-7.896890163421631, -0.7872706651687622], + [-5.2268900871276855, 4.91930627822876], + [-3.949610948562622, -2.546783685684204], + [-4.118152141571045, -2.915590524673462], + [1.662589430809021, -3.321823835372925], + [2.081578493118286, 5.652698516845703], + [7.852663040161133, -2.1955912113189697], + [-7.514000415802002, -1.6768763065338135], + [-8.0248384475708, 10.054859161376953], + [-7.1955671310424805, -0.8939846754074097], + [-5.527995586395264, 4.366658687591553], + [1.3355695009231567, 2.4546759128570557], + [-4.510676860809326, 6.777462959289551], + [-5.673887729644775, -0.5996899008750916], + [-5.630012512207031, 2.046010971069336], + [2.882953405380249, -4.344254970550537], + [2.722640037536621, -4.1243696212768555], + [9.041598320007324, -2.4938197135925293], + [-4.78900671005249, -5.91453742980957], + [-3.1098430156707764, 2.1594693660736084], + [-0.4013649821281433, 0.7963472008705139], + [2.7347538471221924, -4.196810245513916], + [1.7348363399505615, 0.6169494390487671], + [-5.80849027633667, -2.3859078884124756], + [-0.19941860437393188, 9.632280349731445], + [8.104069709777832, -2.8518385887145996], + [3.5544092655181885, 6.772130012512207], + [-6.1350789070129395, 3.3386402130126953], + [-4.736015319824219, -1.3128358125686646], + [-2.880701780319214, -5.298933029174805], + [-0.13156002759933472, 9.725765228271484], + [1.873684048652649, 5.529958724975586], + [-0.2685987949371338, 9.671577453613281], + [-3.50825572013855, -3.2562854290008545], + [0.025219373404979706, 5.936298370361328], + [0.42039579153060913, 0.8442160487174988], + [-5.482458591461182, -2.153287172317505], + [2.281916856765747, 0.9345638751983643], + [-1.8000712394714355, -0.6351883411407471], + [8.464781761169434, -2.334495782852173], + [2.3636348247528076, -6.920415878295898], + [-3.9926910400390625, -2.5966389179229736], + [1.253223180770874, 0.517586886882782], + [-5.585583209991455, -2.1171889305114746], + [9.64330005645752, -2.6960244178771973], + [-5.331187725067139, -3.5148303508758545], + [-4.0912275314331055, -1.2443770170211792], + [-1.7401046752929688, -1.4309066534042358], + [-5.346746921539307, 7.887681007385254], + [-4.514394283294678, 4.881176471710205], + [-4.7539896965026855, 3.4188058376312256], + [2.8927764892578125, -4.7675700187683105], + [-6.4533233642578125, -0.6851489543914795], + [-5.79116678237915, 5.482684135437012], + [-5.241063594818115, -2.384566068649292], + [-5.2351393699646, -0.5888717174530029], + [-4.14417839050293, -2.1907944679260254], + [-2.323406219482422, 2.007143497467041], + [-6.799106597900391, 0.5831799507141113], + [-0.8534155488014221, 9.16897964477539], + [2.112518310546875, 5.4970269203186035], + [-2.315251588821411, -2.1981990337371826], + [7.442808628082275, -1.8154114484786987], + [3.186314105987549, -5.146241664886475], + [-6.541254997253418, -0.6269004940986633], + [-1.331254243850708, -0.5105425119400024], + [1.474808692932129, -5.859588623046875], + [-5.00172758102417, 7.310555458068848], + [-1.992645502090454, 2.534201145172119], + [-6.242985248565674, -0.045846108347177505], + [8.086071968078613, -2.610305070877075], + [8.11425495147705, -2.0904276371002197], + [-4.537078380584717, 2.2460455894470215], + [-0.930931568145752, 9.960748672485352], + [2.1751699447631836, 5.049374580383301], + [-2.43186354637146, 1.7150381803512573], + [1.814568281173706, 5.493688583374023], + [1.4302022457122803, 2.545027732849121], + [0.08667891472578049, 9.500118255615234], + [-4.842532634735107, -4.832821369171143], + [3.0239768028259277, -5.254833221435547], + [-0.2538134455680847, 9.740679740905762], + [1.349672794342041, -5.463214874267578], + [3.237833261489868, -4.837568759918213], + [3.055546522140503, 5.362192630767822], + [-9.069830894470215, -1.1037139892578125], + [-3.893827199935913, 3.8073909282684326], + [-0.3207477927207947, 10.504720687866211], + [-5.518064022064209, -2.9350225925445557], + [8.436308860778809, -2.326310634613037], + [-5.753964900970459, 4.05017614364624], + [-0.1756005883216858, 9.883491516113281], + [-2.923931121826172, 5.5944504737854], + [1.1539446115493774, -7.190211296081543], + [-6.744735240936279, -2.2196531295776367], + [-2.8052732944488525, 2.3629097938537598], + [-0.9408844113349915, 2.118881940841675], + [2.7755987644195557, -0.5185536742210388], + [-0.44078898429870605, -0.7502390742301941], + [0.41402003169059753, -2.562976121902466], + [-5.208119869232178, 1.1859294176101685], + [-3.929799795150757, -1.849176287651062], + [5.302135944366455, -1.157997727394104], + [-2.2464871406555176, -1.1419665813446045], + [-4.426025390625, -3.4304308891296387], + [-3.2567665576934814, -0.8439340591430664], + [-6.266770839691162, 3.5778768062591553], + [0.20393502712249756, -0.4258541762828827], + [2.848262071609497, -4.570459365844727], + [10.39462947845459, -2.855931520462036], + [-5.142266750335693, -1.5141668319702148], + [3.1856954097747803, -4.764974594116211], + [6.202934265136719, 7.497611045837402], + [-5.724133014678955, 4.8424601554870605], + [-4.730147361755371, -2.7234385013580322], + [-7.826939105987549, 1.596756100654602], + [-5.519900798797607, 1.5467036962509155], + [-6.690182209014893, 8.644002914428711], + [-5.6100993156433105, -3.7347919940948486], + [-3.3324246406555176, -2.3009188175201416], + [1.7281270027160645, 1.865211009979248], + [-3.721390724182129, -1.253818154335022], + [-0.37423235177993774, 9.39206314086914], + [-4.307295799255371, 4.131082057952881], + [-5.735363483428955, -1.455553650856018], + [2.2138898372650146, -4.093958854675293], + [-8.135865211486816, -1.2533949613571167], + [6.925485134124756, -1.4029955863952637], + [-2.3854358196258545, 1.5634597539901733], + [9.52868938446045, -2.6431775093078613], + [-3.763749122619629, -2.360691785812378], + [0.46356892585754395, -5.250863552093506], + [2.2371761798858643, -3.55633807182312], + [10.317394256591797, -2.917957067489624], + [1.767559289932251, -1.4502004384994507], + [3.813527822494507, 0.13164371252059937], + [3.1923162937164307, -3.333453893661499], + [-0.22304093837738037, 9.73568344116211], + [8.771790504455566, -2.2814383506774902], + [-4.2952375411987305, -1.5957051515579224], + [-0.5559356808662415, -1.0779014825820923], + [-3.055534601211548, 0.6855150461196899], + [1.5886008739471436, -6.57038688659668], + [2.985971212387085, 5.220486640930176], + [5.2587809562683105, -3.4816529750823975], + [-4.879894733428955, -1.4860975742340088], + [6.737053394317627, -3.33465838432312], + [-4.795383930206299, 6.58748197555542], + [-4.863173007965088, 5.110387802124023], + [2.8518126010894775, -4.353395938873291], + [5.697086334228516, -1.0628000497817993], + [-4.2384114265441895, -0.1900920867919922], + [-0.3347081243991852, -1.2537649869918823], + [-5.352833271026611, 3.6693568229675293], + [6.1539716720581055, -3.072314977645874], + [2.950082302093506, -4.458380699157715], + [-7.518547534942627, 0.7350196838378906], + [2.763071298599243, -7.467483997344971], + [-0.5807392001152039, 11.753213882446289], + [-6.5542893409729, 7.899152755737305], + [2.138913631439209, -10.080118179321289], + [-8.11201286315918, -1.2505854368209839], + [1.6676230430603027, 4.852322578430176], + [5.070366382598877, 7.348505020141602], + [-5.9253315925598145, 5.942112445831299], + [-3.731358289718628, 2.4330828189849854], + [6.805127143859863, -2.839858293533325], + [-4.1777729988098145, -3.68620228767395], + [-5.433512210845947, -5.655467987060547], + [1.713444709777832, -8.709526062011719], + [-5.756738662719727, 6.792961597442627], + [-2.589247465133667, -0.8739839792251587], + [6.876347541809082, -3.078666925430298], + [-0.36010295152664185, 10.712209701538086], + [7.218113899230957, -1.4647347927093506], + [0.10435836762189865, 10.461097717285156], + [-5.041175365447998, 5.3266215324401855], + [-5.1083760261535645, 1.6938472986221313], + [-6.085037708282471, -1.2808202505111694], + [7.880111217498779, -2.316049337387085], + [6.7396321296691895, -2.4378740787506104], + [8.10754108428955, -2.850304365158081], + [3.040832042694092, -3.356564998626709], + [-4.482755661010742, 1.2909125089645386], + [-6.7248616218566895, 0.18514955043792725], + [-0.29759812355041504, 9.675562858581543], + [0.004950173199176788, -2.409202814102173], + [-5.588253974914551, 6.608981132507324], + [-0.28395164012908936, 9.695432662963867], + [6.908258438110352, -5.081393241882324], + [-4.578895092010498, 1.8041499853134155], + [-1.9704346656799316, -1.187957763671875], + [6.762976169586182, -1.4247771501541138], + [5.2118706703186035, 7.129920959472656], + [0.9403069615364075, 5.665643215179443], + [1.015336275100708, 1.590216875076294], + [-4.407105922698975, 7.740863800048828], + [-3.383402109146118, -0.974053144454956], + [1.8137387037277222, 5.158827781677246], + [-7.614597797393799, 9.262295722961426], + [-4.10083532333374, -3.1955456733703613], + [2.5806565284729004, -3.8264710903167725], + [1.0754345655441284, -6.755879878997803], + [-6.5631914138793945, 7.350589752197266], + [-2.688260793685913, 0.9101589322090149], + [-0.6662536859512329, 9.712981224060059], + [-2.170264959335327, 1.4269932508468628], + [-4.881542682647705, -2.5513999462127686], + [-5.773020267486572, 7.317941665649414], + [-1.4788954257965088, 1.134398341178894], + [-5.113400936126709, -4.888397216796875], + [-5.385491847991943, -6.9295477867126465], + [2.8078510761260986, 0.7330204844474792], + [-5.918247222900391, -1.701747179031372], + [0.04510047286748886, -1.0824353694915771], + [5.449652194976807, -5.322727203369141], + [-2.864971399307251, -4.04075288772583], + [-4.466142654418945, -4.048752307891846], + [2.650949478149414, -4.208531379699707], + [-4.485023021697998, -2.745222568511963], + [3.04339599609375, -4.566965103149414], + [-6.648524761199951, 8.490253448486328], + [2.1492836475372314, -9.939151763916016], + [3.2431139945983887, -5.213756561279297], + [-6.072000980377197, 7.163268089294434], + [8.399526596069336, -2.7766504287719727], + [-2.374796152114868, 1.689427137374878], + [2.588033437728882, 6.435103893280029], + [8.36047649383545, -2.4110522270202637], + [4.283349990844727, -3.4667532444000244], + [1.4899433851242065, -7.239931106567383], + [2.4763405323028564, -3.852722644805908], + [-4.975561141967773, 3.7881038188934326], + [-3.928720474243164, -2.725116729736328], + [8.677342414855957, -2.502704381942749], + [-3.012845993041992, -1.6077446937561035], + [-4.834166049957275, 5.566776752471924], + [2.646280288696289, 6.3285746574401855], + [-6.08892297744751, 4.658642292022705], + [-2.2506072521209717, 1.693692922592163], + [-2.6661131381988525, 2.3908329010009766], + [-0.23010563850402832, 9.852529525756836], + [1.7958309650421143, 3.9824512004852295], + [-0.38816380500793457, 10.681843757629395], + [-3.4279558658599854, -4.359034538269043], + [3.106799364089966, 6.124530792236328], + [-4.6345906257629395, -3.693671464920044], + [-1.2611162662506104, 1.7704192399978638], + [-5.600098133087158, -3.1190216541290283], + [2.817669153213501, -4.349207878112793], + [-4.263593673706055, 6.601772785186768], + [-4.161451816558838, -3.744659662246704], + [2.4290077686309814, -3.7938060760498047], + [-4.104867935180664, -3.5356223583221436], + [3.084287405014038, -4.649593353271484], + [-5.732339382171631, -3.7281911373138428], + [8.481070518493652, -2.538679361343384], + [-0.5678411722183228, 11.518097877502441], + [-5.140628337860107, -1.0192543268203735], + [-3.8824117183685303, -1.5719293355941772], + [-0.11883855611085892, 0.672599196434021], + [-6.307597637176514, -1.8054736852645874], + [-0.1751973032951355, 9.785985946655273], + [-2.265730619430542, -1.2403874397277832], + [-0.41272807121276855, 9.702615737915039], + [-0.42302200198173523, 0.40769147872924805], + [-2.693885564804077, -0.3016424775123596], + [-0.4233695864677429, 0.8819799423217773], + [0.3282458782196045, 0.47511613368988037], + [3.3453493118286133, -6.724496841430664], + [-4.561137676239014, -2.4594931602478027], + [-5.6875433921813965, -3.0542614459991455], + [2.407737970352173, -3.1988329887390137], + [4.112457275390625, 6.513327598571777], + [-3.7597949504852295, -1.7441681623458862], + [-2.5185487270355225, 2.0334441661834717], + [-5.2070512771606445, -3.533966302871704], + [-5.116800308227539, 2.557549476623535], + [2.927493095397949, -7.391005992889404], + [6.446442127227783, -1.3132444620132446], + [2.8509058952331543, -4.296990394592285], + [1.5621962547302246, -7.3489508628845215], + [-3.0687992572784424, -2.348264455795288], + [-5.755458354949951, 8.363919258117676], + [-9.257695198059082, -1.4439611434936523], + [-0.1282813549041748, -0.5003935098648071], + [-3.905980110168457, -1.3592208623886108], + [3.1084578037261963, -4.673650741577148], + [-2.120917320251465, 2.8459887504577637], + [0.40156182646751404, -1.004345417022705], + [-0.36173564195632935, 9.418008804321289], + [-0.625498354434967, 9.655122756958008], + [9.828951835632324, -2.731761932373047], + [-4.348989009857178, -3.132164239883423], + [-6.23906135559082, 7.784027099609375], + [-4.84774923324585, -3.813652276992798], + [3.049758195877075, -4.613039970397949], + [2.6693170070648193, -5.9707231521606445], + [-4.1768927574157715, -0.5248039960861206], + [1.822157621383667, -6.438303470611572], + [7.465859889984131, -1.7741824388504028], + [-0.6836780905723572, 1.9902042150497437], + [2.406372308731079, -4.457477569580078], + [-0.028872020542621613, -1.1192277669906616], + [-1.0531699657440186, -0.2632741630077362], + [-2.3537075519561768, 0.5938319563865662], + [-5.059464931488037, 4.240747928619385], + [0.3236379027366638, -4.795557975769043], + [-5.6521124839782715, 4.581675052642822], + [-4.837484836578369, 4.445554733276367], + [-1.9632501602172852, 0.7434815168380737], + [6.986310958862305, -4.141426086425781], + [2.424797296524048, -6.339358329772949], + [3.314988851547241, -0.21930405497550964], + [-5.6164374351501465, 4.439727783203125], + [-1.4076907634735107, 4.71248197555542], + [-2.682720422744751, -0.914421021938324], + [2.925182342529297, -3.2836368083953857], + [-4.631481647491455, -2.809701681137085], + [8.872344017028809, -2.497340679168701], + [6.8083415031433105, -1.6150619983673096], + [-0.22150331735610962, -1.3235312700271606], + [9.01607894897461, -2.5678937435150146], + [-4.592626094818115, -2.893961191177368], + [-7.40974235534668, -1.546067476272583], + [-5.337085247039795, -2.6094486713409424], + [-2.5145723819732666, 1.6546958684921265], + [-2.3118467330932617, 0.9341928958892822], + [1.4905214309692383, 5.056502342224121], + [-2.4065756797790527, 1.1860302686691284], + [1.3000702857971191, -3.8006556034088135], + [1.4319134950637817, -6.771943092346191], + [-5.2689528465271, 7.242372512817383], + [1.7357162237167358, 4.5635223388671875], + [-6.538424491882324, -1.1881437301635742], + [-3.9837725162506104, 0.8455080389976501], + [0.46818095445632935, 0.606633186340332], + [2.5077154636383057, 5.759518623352051], + [-7.18264627456665, -0.9316005706787109], + [-2.7257978916168213, -1.3744372129440308], + [-5.524394989013672, -1.5695167779922485], + [2.5951931476593018, 0.7900720238685608], + [-4.410343647003174, -0.994310200214386], + [3.086634397506714, -4.624653339385986], + [1.7826118469238281, -3.459402084350586], + [1.486587643623352, 5.780768394470215], + [-1.6099148988723755, 6.609086990356445], + [2.150179624557495, -9.287455558776855], + [-4.564663410186768, -1.9576672315597534], + [-7.525227069854736, 1.2002166509628296], + [-0.35483330488204956, 9.12562370300293], + [-0.1477159857749939, 9.955610275268555], + [-0.16434448957443237, 11.013694763183594], + [-5.960537433624268, -2.9366424083709717], + [-5.746799468994141, 3.9284775257110596], + [-4.285844326019287, 6.554045677185059], + [2.0246498584747314, 4.904147148132324], + [-5.984798908233643, 8.20086669921875], + [-4.855088710784912, 5.15165901184082], + [-5.249721050262451, -2.226057291030884], + [0.9431654810905457, -0.006093118339776993], + [-4.004375457763672, -1.8895339965820312], + [-4.373557090759277, -1.84140944480896], + [-2.5376453399658203, 1.8480219841003418], + [-0.4527367949485779, -0.7426093816757202], + [-2.5318334102630615, 1.6623574495315552], + [7.176158428192139, -1.7444491386413574], + [0.7199305295944214, -0.03646831586956978], + [-6.3259806632995605, 3.06142258644104], + [1.9072985649108887, 5.393239974975586], + [-2.3572638034820557, 2.232172727584839], + [-4.197329521179199, -4.641390800476074], + [7.406215190887451, -1.7823327779769897], + [2.1816017627716064, 0.1028616726398468], + [2.0277044773101807, 5.753155708312988], + [-6.712555885314941, -0.9080561995506287], + [-4.378647327423096, -3.421626329421997], + [-5.209177494049072, 0.7633945941925049], + [-5.389337062835693, -3.2252185344696045], + [-2.988675832748413, 2.8187100887298584], + [-5.576004505157471, 5.103770732879639], + [-5.194916248321533, 0.0581819973886013], + [6.785396099090576, -1.0341581106185913], + [-0.19562071561813354, 10.19917106628418], + [-5.352115154266357, 0.9249090552330017], + [-2.6854865550994873, 1.5734374523162842], + [-5.158548831939697, -2.566771984100342], + [7.187446117401123, -2.783496141433716], + [-5.757302761077881, 5.4647393226623535], + [-2.060293197631836, 5.408655643463135], + [-1.5094166994094849, 5.112270355224609], + [3.056102991104126, -4.9235453605651855], + [2.1556169986724854, -9.935796737670898], + [-3.796360969543457, -2.0279994010925293], + [-4.459529399871826, -0.02828485146164894], + [-5.470961093902588, 0.08607828617095947], + [-0.10773134976625443, 8.08662223815918], + [-8.338257789611816, -1.6996614933013916], + [4.88831901550293, 6.91879940032959], + [0.8722119331359863, 5.755809307098389], + [-6.351186752319336, -2.058079481124878], + [5.102976322174072, -0.9859835505485535], + [-5.904221057891846, -2.51836895942688], + [0.24231630563735962, 5.480117321014404], + [-2.8627049922943115, -4.573641777038574], + [-0.10833675414323807, -1.623801827430725], + [2.2784297466278076, -10.696704864501953], + [-4.1326584815979, 5.233685493469238], + [-2.596977710723877, 0.8932310342788696], + [-5.415613174438477, 5.498971939086914], + [2.8345630168914795, -4.308938026428223], + [-4.663175582885742, -2.7986302375793457], + [-4.757381916046143, -3.460202932357788], + [1.3970565795898438, -6.331100940704346], + [2.1248364448547363, -5.358628273010254], + [7.641148090362549, -2.239898204803467], + [-4.613910675048828, 5.179738521575928], + [-4.663584232330322, 0.17966079711914062], + [-3.1215615272521973, 6.770185470581055], + [-0.1690010130405426, -0.40221428871154785], + [5.90131950378418, -1.921939730644226], + [2.55814528465271, -4.28124475479126], + [-0.06941015273332596, 9.987943649291992], + [-3.1325643062591553, -2.184570074081421], + [-5.761093616485596, 8.076964378356934], + [-7.021364688873291, 1.8292289972305298], + [-7.038569927215576, 7.280642509460449], + [-4.14388370513916, -1.6543537378311157], + [-5.883652210235596, -2.2867910861968994], + [-2.4071950912475586, 2.6301372051239014], + [-5.0562334060668945, 1.4967297315597534], + [2.4613537788391113, -2.4604153633117676], + [3.749079704284668, 6.604359149932861], + [-5.3280816078186035, 3.936281442642212], + [-0.784500777721405, 0.38429075479507446], + [-7.705262660980225, 9.771589279174805], + [0.7307230830192566, 8.032339096069336], + [-4.60718297958374, -1.5507090091705322], + [-1.9748212099075317, 1.5688583850860596], + [-2.8088443279266357, -4.642319679260254], + [2.373415946960449, 0.7586923837661743], + [2.2876837253570557, 5.332546234130859], + [2.8386926651000977, -4.333641052246094], + [2.226959466934204, -6.654815673828125], + [-5.851045608520508, 6.8673858642578125], + [-4.841113090515137, -1.9548702239990234], + [-4.132457256317139, -2.76977801322937], + [-2.1101839542388916, -1.8805592060089111], + [-5.778322696685791, -0.6064974069595337], + [-3.23482084274292, 6.515533924102783], + [-4.744215488433838, 3.9658591747283936], + [-0.46817296743392944, 12.618661880493164], + [-4.407114505767822, -2.093587875366211], + [1.8813403844833374, -8.158271789550781], + [-4.124143123626709, -0.5161331295967102], + [2.6132140159606934, -3.038187265396118], + [3.0537774562835693, -4.592041015625], + [-0.6471477150917053, 9.272941589355469], + [2.5987963676452637, -3.934654474258423], + [2.1253952980041504, 5.356887340545654], + [-3.4323694705963135, 5.138296127319336], + [2.6204674243927, -3.9746339321136475], + [-2.957606792449951, 1.9264233112335205], + [-6.9470014572143555, 8.43287467956543], + [-4.731923580169678, 5.528608322143555], + [5.169103622436523, -1.1659181118011475], + [9.39271354675293, -2.6399800777435303], + [-2.275061845779419, 1.0325413942337036], + [-0.2956119179725647, 0.06201597675681114], + [-2.533155679702759, 1.918298602104187], + [-5.388265132904053, 5.9621124267578125], + [-0.9621913433074951, -2.1494557857513428], + [-6.304047107696533, -1.6743313074111938], + [2.947685956954956, -4.599578857421875], + [6.395095348358154, -1.385968804359436], + [-5.405763149261475, 7.756932258605957], + [2.6682655811309814, -4.367968559265137], + [2.5242390632629395, -4.557639122009277], + [-2.7393877506256104, 6.351286888122559], + [0.7030446529388428, 0.5696303248405457], + [2.0973448753356934, -8.71229362487793], + [-3.2350354194641113, -1.552770972251892], + [-2.5991170406341553, 2.505136489868164], + [-6.39328145980835, 8.514610290527344], + [2.882746934890747, -4.341322898864746], + [4.299794673919678, 6.720282554626465], + [-2.1827776432037354, 5.58754825592041], + [-2.402641534805298, 1.8686283826828003], + [1.976989984512329, 0.7726390957832336], + [-1.446885347366333, -0.07021385431289673], + [2.2747581005096436, -7.170991897583008], + [2.4698033332824707, -8.337343215942383], + [-1.7127463817596436, 1.466225504875183], + [-0.11737752705812454, -0.850849449634552], + [-6.930375576019287, -2.374263048171997], + [-0.6494211554527283, 9.300743103027344], + [-2.96146297454834, -2.2028462886810303], + [9.733637809753418, -2.7566425800323486], + [-2.6322436332702637, 2.4247984886169434], + [-1.8815340995788574, 2.55850887298584], + [-0.5546759963035583, -0.7525139451026917], + [0.004553191363811493, 9.652231216430664], + [-2.5059313774108887, 2.4574270248413086], + [6.018154621124268, -1.5136362314224243], + [-2.2094500064849854, 1.308763027191162], + [-2.3633034229278564, 0.43152594566345215], + [-3.7699697017669678, -4.7812275886535645], + [7.183961391448975, -2.4969072341918945], + [-0.6016254425048828, -0.5250719785690308], + [-2.540128231048584, 2.565091133117676], + [-1.2531967163085938, -1.4714107513427734], + [-3.886263132095337, -0.4173682928085327], + [0.0877024456858635, 9.49064826965332], + [-5.837306499481201, 8.047490119934082], + [-5.783331394195557, 8.389483451843262], + [-1.17945396900177, 1.3597584962844849], + [-4.141635417938232, -2.6188652515411377], + [-5.0666184425354, -2.3427865505218506], + [-2.667933702468872, 5.565778732299805], + [-4.835946083068848, -2.388472557067871], + [2.139575242996216, -6.4456963539123535], + [1.3280848264694214, -7.308650970458984], + [2.9205591678619385, -5.81292200088501], + [1.9462401866912842, -3.519699811935425], + [-4.63445520401001, -1.8530789613723755], + [2.7249271869659424, -4.2921977043151855], + [-4.847615718841553, -3.004068613052368], + [-5.88416051864624, 4.379093170166016], + [3.0861246585845947, -4.914889812469482], + [2.7401726245880127, 6.395554542541504], + [3.2472357749938965, 5.987994194030762], + [-5.817875385284424, 3.146421432495117], + [1.3580784797668457, -6.79036808013916], + [1.1328084468841553, -5.93060827255249], + [2.754753589630127, -4.285216331481934], + [-5.1463212966918945, 1.8057975769042969], + [-2.328491687774658, 0.6371034383773804], + [-6.254374027252197, 7.4451117515563965], + [2.6846606731414795, -4.537995338439941], + [-8.858075141906738, -0.9320465326309204], + [9.057171821594238, -2.4536452293395996], + [-5.823912620544434, 7.9745988845825195], + [6.93869161605835, -2.4228410720825195], + [3.0664117336273193, -4.653141975402832], + [0.2643027901649475, -0.6987631320953369], + [-7.324827671051025, -1.9382996559143066], + [-4.245772361755371, 4.894838809967041], + [-6.615659713745117, 7.894185543060303], + [-5.173763275146484, 6.986869812011719], + [3.2430455684661865, -4.844514846801758], + [-1.204286813735962, 9.848944664001465], + [3.1623260974884033, -4.919008255004883], + [-4.261649131774902, -2.6907970905303955], + [-7.444745063781738, 0.9533029794692993], + [2.898437023162842, -5.0342912673950195], + [1.6195526123046875, -3.483966112136841], + [-4.873367786407471, 3.4226458072662354], + [-1.0010709762573242, -1.0063527822494507], + [-6.175088405609131, 3.991332769393921], + [-4.374261379241943, -1.2739410400390625], + [2.018413782119751, 5.636843681335449], + [-5.353087902069092, -1.267769455909729], + [2.1088268756866455, -7.1245598793029785], + [-5.477190017700195, -3.614107847213745], + [-4.482560157775879, -1.4690276384353638], + [0.31187301874160767, -5.111549377441406], + [-3.0554232597351074, -1.7953797578811646], + [-5.032130718231201, -4.187263488769531], + [-5.730260848999023, 7.259632110595703], + [-2.371948719024658, 2.625425100326538], + [-4.847456932067871, -2.7894909381866455], + [3.1545283794403076, -4.72086763381958], + [8.423447608947754, -2.176462173461914], + [1.8383219242095947, -7.024962902069092], + [-4.580512046813965, 5.311132907867432], + [3.2911972999572754, 5.364160537719727], + [-2.3968565464019775, 1.7063196897506714], + [1.894995927810669, -3.550170660018921], + [5.429553031921387, -0.4669478237628937], + [-4.799246311187744, 5.36614465713501], + [-6.601656436920166, -1.9586213827133179], + [-4.635547161102295, -2.8412625789642334], + [-5.5605292320251465, -0.33977842330932617], + [-0.15042954683303833, 8.851160049438477], + [-2.4647672176361084, 2.206430673599243], + [-3.886113405227661, -2.9677841663360596], + [8.936086654663086, -2.319624185562134], + [-7.271831035614014, -0.629119336605072], + [0.6918073892593384, -6.568323612213135], + [2.2561862468719482, -4.7669548988342285], + [2.741968870162964, -4.2751922607421875], + [8.3560791015625, -2.1741111278533936], + [-2.1449663639068604, -2.3024933338165283], + [-1.136946439743042, -0.6580737829208374], + [-4.287976264953613, 5.548011779785156], + [8.681660652160645, -2.370771884918213], + [6.354137897491455, -0.545342743396759], + [-5.286134719848633, -3.0504062175750732], + [-2.7603209018707275, -0.6335251331329346], + [1.5333789587020874, -7.5915985107421875], + [-7.9298787117004395, -0.9117939472198486], + [-6.521097660064697, -1.435192346572876], + [1.3329613208770752, -4.927764892578125], + [-0.22301757335662842, 9.44947338104248], + [1.2031856775283813, -7.428021430969238], + [2.293226957321167, -2.8612709045410156], + [-4.476617336273193, -3.798635244369507], + [2.310417890548706, 0.8606253862380981], + [-2.4448888301849365, 2.1253163814544678], + [5.399649143218994, -1.2531750202178955], + [-6.552712917327881, 8.040379524230957], + [-0.11551029235124588, 9.738789558410645], + [-7.616833209991455, -0.4543797969818115], + [-4.367051601409912, -4.117770671844482], + [-0.1728103756904602, 10.023750305175781], + [8.63773250579834, -2.2089052200317383], + [-3.361579179763794, -1.986719012260437], + [-4.951402187347412, -3.847569704055786], + [1.1415895223617554, 0.8207747340202332], + [2.2413997650146484, -8.352441787719727], + [-4.9952497482299805, -2.2197301387786865], + [-2.0479648113250732, 3.403761625289917], + [9.821497917175293, -2.7677934169769287], + [-3.772608518600464, -2.0872371196746826], + [2.7043397426605225, -5.647105693817139], + [9.585204124450684, -2.7061922550201416], + [-0.3060115873813629, -1.7735497951507568], + [0.4842866063117981, -0.31785422563552856], + [2.3839478492736816, 5.491854667663574], + [-0.1351110339164734, 0.4949920177459717], + [-0.20368337631225586, 10.155830383300781], + [2.2725918292999268, -3.843202829360962], + [-4.1106414794921875, 6.807521820068359], + [-7.710909843444824, 9.468497276306152], + [3.002187490463257, -4.687587738037109], + [-4.703257083892822, 7.529311180114746], + [-0.11588234454393387, 9.457413673400879], + [-2.0908474922180176, 1.6322433948516846], + [1.9915130138397217, -5.4337568283081055], + [-7.643319606781006, -1.2830705642700195], + [-5.208758354187012, -2.566211700439453], + [-0.21772348880767822, 10.176295280456543], + [1.5872541666030884, 4.6860785484313965], + [-4.533482074737549, 1.9647997617721558], + [-2.50412654876709, 1.7641642093658447], + [-6.281240940093994, 6.165493011474609], + [-7.607856273651123, 9.349706649780273], + [-2.353351354598999, 1.8438273668289185], + [-1.068104863166809, 0.515009343624115], + [-2.328928232192993, -0.8247860074043274], + [-2.499127149581909, 0.5359140038490295], + [-5.5616135597229, 5.206165313720703], + [-2.2943999767303467, 0.43268054723739624], + [-4.119422435760498, -1.8391433954238892], + [-5.252852916717529, 1.2170451879501343], + [1.5727365016937256, 5.2829461097717285], + [-5.546855449676514, -2.3505051136016846], + [-4.03934383392334, -4.113001346588135], + [9.820034980773926, -2.7588884830474854], + [2.614036798477173, -4.096656799316406], + [2.0059120655059814, 6.645998954772949], + [2.3481695652008057, -11.252795219421387], + [1.740405559539795, -6.261378288269043], + [2.8221724033355713, -4.3152947425842285], + [-6.067677974700928, 7.8428778648376465], + [-7.021092891693115, -2.1278247833251953], + [2.3422303199768066, 5.925559043884277], + [9.3292818069458, -2.599113702774048], + [3.7650115489959717, 6.49949836730957], + [1.0911283493041992, -0.17625772953033447], + [-4.888302326202393, -4.006564617156982], + [2.0615665912628174, -9.219633102416992], + [1.5295467376708984, 5.032122611999512], + [-5.041409969329834, 3.825392007827759], + [0.0018422529101371765, 9.690561294555664], + [-5.204159259796143, -3.1390016078948975], + [2.083616018295288, 1.0826609134674072], + [0.021573029458522797, -0.5087311863899231], + [-4.438222408294678, 5.265561103820801], + [-8.515679359436035, -1.4400694370269775], + [-4.5005879402160645, 6.382726192474365], + [1.7974183559417725, 5.141782283782959], + [-0.21225717663764954, -0.721034049987793], + [3.223968744277954, -5.197442054748535], + [-2.5119974613189697, 2.315068006515503], + [-2.69014573097229, 5.362520217895508], + [-4.563412189483643, 1.4428606033325195], + [10.069600105285645, -2.787458658218384], + [-5.371819972991943, 2.669740676879883], + [-7.402884006500244, 9.123729705810547], + [-6.031397819519043, -0.24364042282104492], + [2.926530599594116, 6.6855878829956055], + [-2.7669122219085693, 0.5149216651916504], + [-2.6853482723236084, 2.4863955974578857], + [5.0222649574279785, -1.0500415563583374], + [-0.17633897066116333, 10.361530303955078], + [-0.7076386213302612, 0.5927920341491699], + [-2.828237533569336, -3.1744587421417236], + [-4.648365497589111, 4.4011311531066895], + [-4.762969493865967, -3.2522566318511963], + [-6.949414253234863, -1.186132550239563], + [0.5771346092224121, 5.115094184875488], + [-4.373859882354736, -2.537970542907715], + [-5.239203929901123, -2.2419300079345703], + [-0.24720978736877441, -1.3341786861419678], + [8.425804138183594, -3.153611898422241], + [-0.008512265980243683, 1.0265604257583618], + [-4.200892448425293, -2.552170515060425], + [5.978219509124756, -1.570867896080017], + [-0.4523523449897766, 9.033819198608398], + [-0.2796010375022888, 9.759269714355469], + [-2.469102621078491, 1.0401147603988647], + [3.62453031539917, -3.2722723484039307], + [-7.882194519042969, -0.8688269853591919], + [-2.9403417110443115, -4.471704483032227], + [-0.1705748438835144, 9.512035369873047], + [-7.082343578338623, -0.5491875410079956], + [2.289095878601074, -4.1312408447265625], + [-5.332645893096924, -3.281421184539795], + [1.112119197845459, -5.608626842498779], + [2.9546453952789307, -4.462149143218994], + [0.6177226305007935, -5.635137557983398], + [0.4990701675415039, -0.6003571152687073], + [-5.837245464324951, -2.1142005920410156], + [7.846092224121094, -2.679858922958374], + [2.815200090408325, -5.2134552001953125], + [-9.260640144348145, -1.5635151863098145], + [2.335785388946533, -5.899791717529297], + [2.7374229431152344, -6.273818492889404], + [-2.4534356594085693, 1.526416540145874], + [-4.169792652130127, -3.115551233291626], + [-2.0404369831085205, 1.6017041206359863], + [-5.285303592681885, 0.6550742387771606], + [-0.1480661928653717, -0.6389085054397583], + [-3.592806816101074, -2.502046585083008], + [-5.359649181365967, -2.537885904312134], + [-2.3066318035125732, -2.804832935333252], + [-5.250875949859619, -3.1314282417297363], + [-5.010399341583252, -3.818570613861084], + [-3.0014214515686035, -0.828188419342041], + [-0.8569765686988831, -1.5328340530395508], + [2.0991768836975098, -4.27432918548584], + [-0.33580783009529114, 2.1791679859161377], + [-0.24962830543518066, 10.026246070861816], + [-0.4057019054889679, -0.9447194933891296], + [-3.7792248725891113, -3.5119478702545166], + [-4.135746002197266, -2.6102306842803955], + [-0.2172207236289978, 9.665809631347656], + [-3.050753116607666, 5.245992660522461], + [-4.49575138092041, 1.8913849592208862], + [-4.062315940856934, -2.202662229537964], + [-0.19653260707855225, 10.495368957519531], + [2.9310762882232666, -4.594435691833496], + [2.161315679550171, -4.099377632141113], + [-5.565107822418213, 6.334021091461182], + [-4.230459690093994, -1.5056298971176147], + [0.09526854008436203, 10.089479446411133], + [-2.317007541656494, 0.6560728549957275], + [3.2657740116119385, -4.893106460571289], + [9.68030834197998, -2.6656954288482666], + [-1.1252721548080444, -0.7832924127578735], + [-2.5578010082244873, -0.29957762360572815], + [-0.32526764273643494, -0.5350431799888611], + [-4.555752754211426, -3.7432572841644287], + [-2.313392400741577, 2.7627525329589844], + [3.2390048503875732, -4.851076126098633], + [-5.177673816680908, 1.2372652292251587], + [2.2160134315490723, -10.62691879272461], + [-0.3650560975074768, 9.720670700073242], + [-2.503427267074585, -2.5190515518188477], + [-4.696593761444092, -1.759435772895813], + [6.66311502456665, -1.9370501041412354], + [-3.882929563522339, 8.28762149810791], + [-2.082848310470581, -1.3084524869918823], + [2.1064388751983643, -5.708442687988281], + [2.676016092300415, -5.392562389373779], + [1.7248541116714478, 0.8223282098770142], + [1.5444965362548828, 0.6913273334503174], + [-7.628763675689697, 9.277172088623047], + [0.5682596564292908, 9.856538772583008], + [-4.6628289222717285, -4.4839959144592285], + [-4.915059566497803, -2.54353928565979], + [-7.205910682678223, -0.9691275954246521], + [-4.239609718322754, -4.423470973968506], + [-0.24203383922576904, 9.3543119430542], + [-2.563873529434204, -3.7964468002319336], + [-5.804159164428711, -3.846888303756714], + [7.8050713539123535, -1.9315606355667114], + [-1.6896464824676514, 0.288291335105896], + [-3.5665135383605957, -1.0022225379943848], + [3.2627546787261963, -5.321608066558838], + [1.8365349769592285, -8.642759323120117], + [10.154471397399902, -2.818535566329956], + [-5.154613971710205, -2.4123358726501465], + [1.2898274660110474, -5.906888008117676], + [-4.713910102844238, 5.417750358581543], + [7.272018909454346, -1.2232251167297363], + [1.77461838722229, 5.3733391761779785], + [-3.6356122493743896, -2.4022035598754883], + [-5.23138952255249, -3.1531691551208496], + [-1.4720540046691895, -2.0863664150238037], + [2.7099390029907227, 3.8654580116271973], + [3.0285422801971436, -4.718464374542236], + [2.421704053878784, -5.97644567489624], + [-0.26606881618499756, 9.19340705871582], + [-2.410357713699341, 2.1627254486083984], + [-2.039088487625122, 2.3928585052490234], + [-4.0786566734313965, 3.5759994983673096], + [-0.17845195531845093, 10.009042739868164], + [-3.254047155380249, 0.8956038951873779], + [1.2253096103668213, -5.942131519317627], + [-0.3969295024871826, 10.971790313720703], + [-6.0476837158203125, 8.306989669799805], + [-0.08103746920824051, 9.992908477783203], + [2.4034786224365234, -5.088320255279541], + [-7.0915045738220215, -1.7979235649108887], + [-0.7949252724647522, 11.610282897949219], + [9.443150520324707, -2.7335543632507324], + [1.5225458145141602, -6.264415264129639], + [4.994001865386963, 7.696300506591797], + [-8.380326271057129, -1.1319773197174072], + [-3.654442548751831, 1.6117253303527832], + [7.301920413970947, -3.9949629306793213], + [-5.732357025146484, -3.6683735847473145], + [-6.5090861320495605, 7.858212947845459], + [2.3265297412872314, -10.884840965270996], + [3.1472012996673584, -4.7227678298950195], + [2.87563157081604, -4.124561309814453], + [-1.576911211013794, 1.615770697593689], + [-0.7395996451377869, 7.528733253479004], + [-2.8155224323272705, -4.4821624755859375], + [1.8359402418136597, -3.355426788330078], + [-3.694453001022339, -1.1189044713974], + [-2.7871782779693604, 2.3795199394226074], + [1.1849504709243774, 0.685767412185669], + [5.9038310050964355, -1.1897929906845093], + [-0.2583903670310974, 10.760700225830078], + [-3.7328336238861084, -1.5088211297988892], + [5.713948726654053, -1.119254231452942], + [0.16724896430969238, 0.10687611997127533], + [-2.445326805114746, 1.7082308530807495], + [-4.927185535430908, -0.5983490347862244], + [-0.32261401414871216, 10.398993492126465], + [3.4689581394195557, -7.162253379821777], + [6.580607891082764, -1.0682369470596313], + [2.751373767852783, -4.40665340423584], + [2.9004878997802734, -4.379941940307617], + [-4.695570945739746, -2.279520273208618], + [1.3399593830108643, -7.134310722351074], + [-1.110211730003357, -0.3018847107887268], + [6.913649082183838, -4.289016246795654], + [-5.5617194175720215, -6.35338830947876], + [1.8731935024261475, -7.668291091918945], + [2.8174710273742676, -5.200687408447266], + [7.742537498474121, -1.7310770750045776], + [-3.3984858989715576, 4.7730913162231445], + [2.081763505935669, 6.004127502441406], + [1.6837753057479858, 4.783183574676514], + [0.9267616868019104, 5.2037553787231445], + [2.294569492340088, 1.0420430898666382], + [-0.034907110035419464, 9.701286315917969], + [-4.656424045562744, -3.132033109664917], + [2.9967877864837646, -4.594057559967041], + [8.688092231750488, -2.362870693206787], + [-2.1319167613983154, 1.1790733337402344], + [-5.574141025543213, 4.536711692810059], + [-0.4087936282157898, 9.023504257202148], + [2.473151922225952, 0.529998242855072], + [3.323678731918335, -5.388463973999023], + [8.454361915588379, -2.302499532699585], + [6.100212097167969, -3.9892077445983887], + [-3.984548330307007, -2.4265940189361572], + [2.6160318851470947, -6.0194315910339355], + [8.725302696228027, -2.4616737365722656], + [10.272714614868164, -2.8075060844421387], + [5.307301998138428, -1.0412535667419434], + [-0.4134344458580017, 9.594962120056152], + [-4.088524341583252, -3.1016242504119873], + [-5.237131595611572, -2.495887517929077], + [-4.689257621765137, 5.549065589904785], + [10.778995513916016, -2.9733951091766357], + [-8.159063339233398, -1.1079620122909546], + [-0.26318734884262085, 11.101414680480957], + [-4.882430553436279, -4.066190719604492], + [-0.38829153776168823, 3.0318539142608643], + [1.861487627029419, -5.602095603942871], + [-4.567944526672363, 1.9300235509872437], + [5.605546474456787, -1.1094156503677368], + [-4.635799407958984, -2.1205761432647705], + [9.330785751342773, -2.476550340652466], + [-4.644199371337891, -2.321655035018921], + [-3.4554007053375244, -1.1048238277435303], + [-2.159738540649414, -3.744119882583618], + [-4.352354049682617, 3.1766629219055176], + [9.58647632598877, -2.670537233352661], + [2.111598253250122, 5.664337158203125], + [1.0503408908843994, -7.574479103088379], + [2.1589226722717285, -3.8848488330841064], + [1.695662021636963, 1.2245817184448242], + [7.031074047088623, -1.7151323556900024], + [8.656641006469727, -2.9019219875335693], + [-1.4709656238555908, 1.2136549949645996], + [-5.450664043426514, -2.1661016941070557], + [2.013805389404297, -3.382014513015747], + [2.7671444416046143, -5.930135726928711], + [-1.1571118831634521, 8.384258270263672], + [2.106236696243286, -7.585973262786865], + [-0.49950218200683594, -0.8336455821990967], + [-6.9841389656066895, -1.718346357345581], + [3.2194154262542725, -5.162306785583496], + [2.028977632522583, 5.486579895019531], + [-3.5117266178131104, 2.1682584285736084], + [-3.8021743297576904, -1.0861369371414185], + [-4.354192733764648, -3.977975845336914], + [1.9627947807312012, 5.472634315490723], + [-0.1768072247505188, 10.331910133361816], + [-5.301340579986572, -1.2277780771255493], + [-4.112329006195068, 6.8187947273254395], + [9.166298866271973, -2.5168297290802], + [-5.044558048248291, -2.3935070037841797], + [-7.974328517913818, -1.0554823875427246], + [3.183730125427246, -4.93840217590332], + [-3.423386812210083, -1.774971604347229], + [-6.6530070304870605, 1.5903640985488892], + [3.0796315670013428, -5.8588786125183105], + [-6.76426362991333, 0.4883263111114502], + [7.622040271759033, -2.134852647781372], + [-3.3398070335388184, -2.008772134780884], + [-3.849646806716919, 0.35994231700897217], + [3.2257039546966553, 6.593568325042725], + [-1.7444437742233276, 3.9857194423675537], + [6.620447635650635, -1.7314904928207397], + [-5.0724592208862305, 6.033238410949707], + [2.5044548511505127, 5.402798175811768], + [2.5859768390655518, -7.027525424957275], + [8.740740776062012, -2.397765636444092], + [3.00075364112854, 6.663410186767578], + [-2.254939317703247, 1.0494914054870605], + [-6.442535400390625, 8.115289688110352], + [-2.324775457382202, 1.9361135959625244], + [1.3728525638580322, -8.252224922180176], + [9.047426223754883, -2.52278470993042], + [7.906544208526611, -1.9962449073791504], + [-5.7082624435424805, -3.1727802753448486], + [2.1060690879821777, 5.68545389175415], + [-4.636915683746338, 1.7292782068252563], + [-5.5016770362854, 4.079043388366699], + [-0.2649419903755188, 10.693132400512695], + [-3.2616195678710938, -2.823540449142456], + [-4.693732738494873, -3.3949790000915527], + [-4.235550403594971, -2.5525171756744385], + [0.48085856437683105, -0.6419898867607117], + [8.44720458984375, -2.5070228576660156], + [-4.896948337554932, -3.924342393875122], + [-0.11370810121297836, -0.93871009349823], + [7.23184061050415, -1.5576772689819336], + [-3.4507787227630615, -2.6559085845947266], + [-2.4383575916290283, 1.3490134477615356], + [-7.837447643280029, 9.55532455444336], + [6.123662948608398, -1.205220341682434], + [-5.37576961517334, 7.315142631530762], + [-5.357937335968018, 8.04156494140625], + [3.160518169403076, -4.980833053588867], + [-2.796398401260376, 1.9226692914962769], + [3.0779483318328857, -4.827181816101074], + [-2.5743556022644043, 0.6493358612060547], + [-6.425064563751221, 8.243707656860352], + [-4.844700336456299, -3.0716521739959717], + [6.7106194496154785, -3.6922435760498047], + [3.0831758975982666, -4.839338302612305], + [0.3005157709121704, -0.21065163612365723], + [-6.753433704376221, -0.6477289199829102], + [-3.3218905925750732, -2.3296477794647217], + [1.6704453229904175, -3.4384801387786865], + [3.1179239749908447, -4.6742448806762695], + [2.8982532024383545, -4.647564888000488], + [-5.999485492706299, 8.252466201782227], + [2.058472156524658, -5.398173809051514], + [-0.9751222729682922, -0.0237446166574955], + [-3.755314588546753, -2.740487575531006], + [-2.247965097427368, 0.7209053039550781], + [0.3595440089702606, 0.00038641318678855896], + [1.820669412612915, 5.621009349822998], + [2.920738458633423, 1.3875223398208618], + [-2.4949145317077637, -4.121151924133301], + [1.5807139873504639, 5.212301731109619], + [9.079415321350098, -2.5630433559417725], + [-1.6327711343765259, 1.9470819234848022], + [-3.320789337158203, -1.9736446142196655], + [-5.5798749923706055, 5.077392578125], + [-0.2703980803489685, 9.962854385375977], + [-4.265007495880127, -5.912466049194336], + [-4.684566974639893, 6.334437370300293], + [3.0385355949401855, -4.580195426940918], + [2.309293746948242, -3.994194269180298], + [-7.031416416168213, 8.579916000366211], + [-2.257476568222046, -2.0907037258148193], + [2.2056057453155518, -7.4684319496154785], + [-2.8996164798736572, 3.1310479640960693], + [-0.72979336977005, -1.8781688213348389], + [9.540548324584961, -2.645761013031006], + [-5.3742356300354, 6.83372688293457], + [-5.54611349105835, -2.0347321033477783], + [-2.522401809692383, 6.924834251403809], + [-7.668179512023926, 9.625316619873047], + [7.274221897125244, -2.9859869480133057], + [-5.135488986968994, -2.366147518157959], + [-4.006000518798828, 5.8993611335754395], + [2.8747637271881104, -4.4031805992126465], + [3.1675703525543213, -4.74058198928833], + [-5.057170391082764, 5.832467079162598], + [-7.429345607757568, 0.25569307804107666], + [2.4338650703430176, -4.095697402954102], + [5.608914375305176, -0.8496661186218262], + [-4.965695858001709, 5.884908199310303], + [-0.2168446183204651, 9.856023788452148], + [2.6647331714630127, -5.387927055358887], + [0.9024448394775391, 3.577043056488037], + [2.182178020477295, 5.386240005493164], + [8.734460830688477, -2.4137072563171387], + [-0.2504001259803772, 9.7435884475708], + [1.5306956768035889, 5.477797031402588], + [1.7833611965179443, 1.4788836240768433], + [-5.795522689819336, -1.8030216693878174], + [-7.728961944580078, 9.39948844909668], + [2.0065672397613525, -8.518548965454102], + [-0.24562960863113403, 9.141867637634277], + [-0.9960897564888, -1.573449730873108], + [-0.5336803793907166, 5.332892894744873], + [4.3093581199646, -6.20377779006958], + [2.5595288276672363, -3.99973201751709], + [3.023608446121216, -4.560358047485352], + [-6.794315338134766, 7.9743804931640625], + [-2.428518772125244, 2.847827196121216], + [5.594763278961182, -1.240454077720642], + [6.531025409698486, -3.0960915088653564], + [2.220118761062622, 5.703753471374512], + [-0.8269179463386536, 0.5285770893096924], + [1.4457815885543823, -6.142144680023193], + [-4.0336222648620605, -6.00473690032959], + [3.1404268741607666, 5.806323528289795], + [-3.052177906036377, 3.0471577644348145], + [-7.385921001434326, -1.8001998662948608], + [1.7460851669311523, 4.990808486938477], + [-2.471527338027954, 2.413330316543579], + [2.7822060585021973, -4.5409746170043945], + [-2.4983153343200684, 1.851242184638977], + [-5.7122273445129395, -1.95224130153656], + [-0.2847381830215454, 9.394084930419922], + [1.4820911884307861, -5.600697994232178], + [-0.4565608501434326, -0.2741590142250061], + [2.530134916305542, -3.890310525894165], + [-5.430206775665283, 5.592947959899902], + [-4.972464084625244, -2.0029730796813965], + [-0.5186461210250854, 8.587150573730469], + [3.0489680767059326, -4.599204063415527], + [-4.72845458984375, 5.370889663696289], + [-0.39649245142936707, -0.3049613833427429], + [3.1155965328216553, -4.722815990447998], + [-3.952819347381592, -3.0872833728790283], + [-1.9477591514587402, 0.9043172001838684], + [-4.748345851898193, -3.6258320808410645], + [-5.348268032073975, 3.86435866355896], + [2.6436686515808105, -4.21224308013916], + [-3.8946902751922607, -1.8253356218338013], + [-5.175836086273193, -3.481106758117676], + [2.8910858631134033, -4.709259986877441], + [2.289663553237915, -5.121068000793457], + [-4.056750774383545, -3.1718637943267822], + [6.869259357452393, -2.7746875286102295], + [1.5680397748947144, 3.986006498336792], + [-2.2262113094329834, 2.184417486190796], + [6.847620964050293, -2.437493324279785], + [-5.745791912078857, -4.260573387145996], + [2.8803603649139404, -4.344326019287109], + [-5.0610222816467285, 3.113640308380127], + [-4.639328956604004, -1.5059996843338013], + [-0.8042145371437073, -1.415666103363037], + [-6.46279239654541, -1.5072683095932007], + [2.9556469917297363, -4.440793991088867], + [-5.62778902053833, -0.8790121674537659], + [2.473371744155884, 0.9065016508102417], + [-3.0730249881744385, 7.4516282081604], + [2.733318567276001, -4.083743572235107], + [-2.7081143856048584, 1.2687314748764038], + [2.893153429031372, -4.430519104003906], + [-7.175072193145752, -2.0190651416778564], + [-4.181979656219482, -1.5666773319244385], + [1.8600836992263794, -3.204130172729492], + [-4.987687110900879, -4.318917274475098], + [-7.024273872375488, 8.528787612915039], + [-4.104278087615967, -1.2296262979507446], + [1.337825059890747, 0.7419509887695312], + [-3.661843776702881, -1.5442192554473877], + [2.354057550430298, 6.027432441711426], + [-5.222896575927734, -3.5758416652679443], + [1.4754365682601929, -0.7002257108688354], + [-4.939780235290527, 3.889282464981079], + [-6.415426731109619, -1.056957721710205], + [3.201476812362671, -5.055238723754883], + [-5.583075046539307, 1.3189541101455688], + [-5.122973918914795, -4.747581481933594], + [3.037992238998413, -4.748056411743164], + [2.5991740226745605, -4.031799793243408], + [-3.7886807918548584, -1.6391799449920654], + [-0.6703615784645081, -3.151031732559204], + [-4.735219478607178, -1.5537328720092773], + [-0.24887794256210327, 9.827779769897461], + [-7.28136682510376, 8.860040664672852], + [-0.38563019037246704, 9.783459663391113], + [0.5484945178031921, -5.34881591796875], + [2.9205119609832764, -4.407962799072266], + [5.9934773445129395, -6.643819808959961], + [-5.252005100250244, 3.860734701156616], + [-1.5176005363464355, -0.5820965766906738], + [-7.355586528778076, 9.233580589294434], + [7.205531120300293, -1.5315577983856201], + [-0.7936044335365295, 8.768226623535156], + [2.3328516483306885, -4.150461196899414], + [5.522249698638916, -2.7138915061950684], + [-0.05718938261270523, -0.5798438787460327], + [2.3102076053619385, 5.3409037590026855], + [-3.555049180984497, 2.6129209995269775], + [-2.475318670272827, 1.889604926109314], + [-2.855970621109009, 2.8118674755096436], + [-2.6383564472198486, -4.20949649810791], + [2.8933961391448975, 5.048286437988281], + [-8.839035987854004, -1.4496276378631592], + [-4.55101203918457, -0.027441266924142838], + [-5.125551700592041, -3.4168612957000732], + [2.3520820140838623, -3.478900909423828], + [0.11228980869054794, -0.689568281173706], + [-3.72220778465271, -2.235847234725952], + [-4.950462818145752, -3.1254992485046387], + [-2.1585400104522705, 2.9886410236358643], + [-5.036965847015381, -3.4596824645996094], + [-6.516726016998291, 5.998101234436035], + [-2.2692368030548096, 1.7677669525146484], + [-5.155905723571777, 1.8609071969985962], + [2.6600353717803955, 1.1076692342758179], + [5.220142841339111, -3.055157423019409], + [-5.6528520584106445, -3.6125714778900146], + [2.896014928817749, -4.284138202667236], + [3.1504297256469727, -4.927890777587891], + [-3.655418634414673, -3.8114049434661865], + [-2.568148612976074, 2.004537582397461], + [-3.4734671115875244, 4.766720771789551], + [-0.6123238205909729, -0.2663837969303131], + [3.1934010982513428, -5.0817790031433105], + [-3.8893821239471436, 3.668299913406372], + [3.891155958175659, 6.590127944946289], + [-3.9081783294677734, 1.7634737491607666], + [-3.065434217453003, 2.7564899921417236], + [-0.16998302936553955, -0.6833383440971375], + [-2.2323148250579834, 2.3828039169311523], + [0.4195033311843872, 5.962342262268066], + [-6.467888355255127, 8.240789413452148], + [-3.6558823585510254, -1.8070610761642456], + [-4.342122554779053, -2.523052930831909], + [-4.799640655517578, -1.03751540184021], + [-0.7045007944107056, 8.688088417053223], + [-3.963934898376465, 5.9019951820373535], + [0.8177294135093689, 5.276623725891113], + [-6.779175758361816, -2.0186634063720703], + [9.011024475097656, -2.2842628955841064], + [4.7980427742004395, -3.5050904750823975], + [-5.255058765411377, -1.2891209125518799], + [6.177265644073486, -3.8634274005889893], + [-0.7488885521888733, 9.707281112670898], + [0.9689698815345764, -7.071493625640869], + [2.374662160873413, -6.560276985168457], + [-4.30499792098999, -3.1558430194854736], + [-7.045626163482666, -0.812279462814331], + [-3.760885000228882, -3.2281620502471924], + [3.3299460411071777, -4.967117786407471], + [1.7390092611312866, 4.410806179046631], + [2.0760817527770996, -6.011546611785889], + [2.2966105937957764, 4.707778453826904], + [-0.31313520669937134, 9.911128997802734], + [-1.6450916528701782, 1.7634197473526], + [2.324697971343994, -5.265088081359863], + [-0.4600285589694977, 0.1313200742006302], + [-1.107772707939148, 1.6727513074874878], + [-3.844566583633423, -2.3682761192321777], + [-2.227689027786255, 0.8542196750640869], + [-3.2732150554656982, -1.0797617435455322], + [2.6632909774780273, -6.033634185791016], + [2.0226047039031982, -2.6807520389556885], + [-4.328918933868408, 0.21498847007751465], + [-2.2005770206451416, -0.4089142382144928], + [-2.804696559906006, -0.002961341291666031], + [-4.6895928382873535, 0.9235080480575562], + [1.8033027648925781, -9.107769012451172], + [-0.18753474950790405, 10.650938034057617], + [-4.3561835289001465, 6.252107620239258], + [-0.47913020849227905, 10.03410530090332], + [-0.2198696732521057, 10.162948608398438], + [0.998702347278595, 5.169276237487793], + [3.5749552249908447, 6.582537651062012], + [0.8591576218605042, 4.904543876647949], + [-0.4153375029563904, 10.365967750549316], + [-6.253720760345459, -1.8328927755355835], + [2.9836697578430176, 6.241588592529297], + [7.436696529388428, -4.499094009399414], + [-0.3128364086151123, 10.75201416015625], + [-5.19572114944458, -0.6094958782196045], + [3.137263536453247, -4.698546409606934], + [-4.678257465362549, 3.679868459701538], + [0.9376567006111145, -5.845335960388184], + [-0.41985076665878296, 11.470898628234863], + [-5.674097537994385, 2.686768054962158], + [-5.644323825836182, 2.8127641677856445], + [-3.6592600345611572, -2.3343427181243896], + [-5.457816123962402, 8.29715633392334], + [-9.253100395202637, -0.8837240934371948], + [8.490666389465332, -2.302262544631958], + [2.9040491580963135, -4.345170497894287], + [-1.934019923210144, 5.218207836151123], + [2.7164559364318848, -6.940718650817871], + [-5.233426094055176, -3.784029483795166], + [-5.341104030609131, 5.724848747253418], + [8.685336112976074, -2.4491310119628906], + [-2.3821089267730713, 5.6571760177612305], + [6.915306568145752, -4.884222984313965], + [-5.304993152618408, 0.990739107131958], + [2.0446412563323975, -2.722134828567505], + [3.0572669506073, -4.788601398468018], + [0.5931174755096436, 0.6267080307006836], + [-0.6486841440200806, 9.143327713012695], + [-5.450928211212158, 4.5626912117004395], + [3.2365238666534424, -4.853609085083008], + [2.321082353591919, 4.1471405029296875], + [-4.102121353149414, 4.220305919647217], + [-6.363548755645752, -2.4207706451416016], + [-0.67441326379776, 9.60123062133789], + [-7.369721412658691, -1.748171091079712], + [-6.4111528396606445, 7.599850654602051], + [-3.1353542804718018, -2.613748550415039], + [-4.300014972686768, -2.574572801589966], + [3.0368430614471436, -4.558550834655762], + [-6.732177257537842, 8.395792007446289], + [-3.423664093017578, -1.7368744611740112], + [2.835432291030884, -7.274651527404785], + [8.223297119140625, -2.7606098651885986], + [0.0981939360499382, 10.239313125610352], + [-4.801474094390869, -2.507209300994873], + [2.8132312297821045, -4.316194534301758], + [-2.407242774963379, 1.618725061416626], + [-5.500233173370361, 1.3699289560317993], + [-6.2431206703186035, 8.392898559570312], + [2.5710694789886475, 5.872452735900879], + [-4.626314163208008, -1.6458630561828613], + [-4.356705188751221, 0.872459352016449], + [9.14491081237793, -2.487495183944702], + [1.4009814262390137, -6.680883407592773], + [-4.979658126831055, -2.9321460723876953], + [2.1827824115753174, 0.9009310007095337], + [-4.833569049835205, -2.8569295406341553], + [-4.4000043869018555, -2.1051647663116455], + [-4.653055667877197, -0.3434685468673706], + [8.685640335083008, -2.3238790035247803], + [1.6839959621429443, -6.784952163696289], + [9.431655883789062, -2.626871347427368], + [-3.322474718093872, 4.931472301483154], + [5.550412654876709, -1.7073968648910522], + [-0.5957666039466858, 11.522367477416992], + [1.6087684631347656, -7.520360946655273], + [-4.181849479675293, -0.42691725492477417], + [-6.703099727630615, 1.804330587387085], + [6.436542987823486, -1.4409117698669434], + [3.5602495670318604, 6.592475891113281], + [-3.8443706035614014, 5.309553623199463], + [-0.625389039516449, 9.105355262756348], + [-4.419504642486572, 0.8090042471885681], + [-7.972732067108154, -1.1008168458938599], + [-2.875579595565796, 2.850874662399292], + [2.72090220451355, 6.3550825119018555], + [0.7082310318946838, 0.6863118410110474], + [-3.046398878097534, 3.2066309452056885], + [2.426762819290161, -7.340783596038818], + [-5.0820631980896, 5.874199390411377], + [2.8370790481567383, -4.991241455078125], + [-3.0932586193084717, 4.323553562164307], + [-2.51139760017395, 6.4417901039123535], + [2.12050461769104, -4.647974014282227], + [-2.412322998046875, 1.271938681602478], + [-2.6379685401916504, 1.9992841482162476], + [-4.370824337005615, -0.7746082544326782], + [1.191969394683838, -7.4729228019714355], + [-4.113321304321289, 7.037357330322266], + [-2.671335458755493, -4.311744689941406], + [5.960425853729248, -0.9782556891441345], + [3.5081121921539307, 6.804358005523682], + [-6.144350051879883, 7.020602226257324], + [-4.593161106109619, -3.6143057346343994], + [-2.133605718612671, 1.9945107698440552], + [5.369791507720947, -1.6965242624282837], + [-9.399896621704102, -1.0499211549758911], + [-2.234445095062256, 0.6452233791351318], + [2.6316468715667725, -4.4823899269104], + [-4.715848922729492, -3.244276285171509], + [2.062511682510376, -8.842458724975586], + [-6.692483425140381, 8.338205337524414], + [-1.0647653341293335, 9.878143310546875], + [-4.442244529724121, -3.2164740562438965], + [2.7962868213653564, -4.3628692626953125], + [3.3263137340545654, 6.916105270385742], + [8.038914680480957, -2.672741174697876], + [-3.500959873199463, -1.7957316637039185], + [-2.4318227767944336, 1.9737218618392944], + [-4.033735752105713, -1.2006187438964844], + [-1.9759018421173096, 1.5239155292510986], + [-2.4558136463165283, 1.2293938398361206], + [-6.747713565826416, 0.33075928688049316], + [-5.980967998504639, 7.155465126037598], + [-0.2893410325050354, -1.4411731958389282], + [-7.93480920791626, -1.2292470932006836], + [2.8510313034057617, 6.771994590759277], + [-7.615955829620361, 9.289983749389648], + [-2.8927390575408936, -3.5795392990112305], + [2.7338998317718506, -6.785101890563965], + [-3.2197859287261963, -1.9049034118652344], + [1.377629280090332, -4.7937445640563965], + [-6.59508752822876, -1.7106889486312866], + [2.899346113204956, -4.410417079925537], + [-2.4863927364349365, 1.8932653665542603], + [-2.5997397899627686, 5.988176345825195], + [-0.03583521395921707, 8.850722312927246], + [6.728010654449463, -3.0564053058624268], + [6.392469882965088, -3.541367292404175], + [9.195311546325684, -2.2307534217834473], + [-4.526864528656006, -2.5388975143432617], + [-2.9021027088165283, 6.635138511657715], + [2.2291228771209717, -8.538590431213379], + [8.32477855682373, -2.293623208999634], + [-0.0796622708439827, 9.128894805908203], + [1.5126739740371704, 5.770648002624512], + [-7.9583420753479, -1.0510464906692505], + [-3.283700466156006, 6.804610252380371], + [-8.60820484161377, -1.2846118211746216], + [2.272479772567749, -5.707446575164795], + [-4.47711181640625, -2.6882762908935547], + [2.374236583709717, -3.4624764919281006], + [3.232823610305786, -4.840041160583496], + [2.68937611579895, -6.4753923416137695], + [1.155191421508789, -7.206027030944824], + [-5.553905963897705, -0.7340303659439087], + [5.942374229431152, -1.3780865669250488], + [-2.772085189819336, 5.767866134643555], + [-4.038697242736816, -3.0085113048553467], + [1.1909263134002686, 3.9759862422943115], + [-5.434551239013672, -2.7697393894195557], + [-2.471998453140259, 1.8377366065979004], + [-0.4479851722717285, 11.360742568969727], + [-4.451321601867676, -1.6072973012924194], + [8.930221557617188, -2.5091006755828857], + [1.5485440492630005, -3.088017225265503], + [-4.23627233505249, -0.7970098257064819], + [-3.913898229598999, -2.4560492038726807], + [-5.007148742675781, -0.5189564228057861], + [-4.594273090362549, -2.8233437538146973], + [-5.022593975067139, -2.9855153560638428], + [1.5269485712051392, 0.6763758659362793], + [-1.475541114807129, 8.42566967010498], + [-4.87898588180542, -2.638096570968628], + [-4.059064865112305, 2.9635655879974365], + [7.095384120941162, -4.291454315185547], + [-2.0583770275115967, 1.9937800168991089], + [-2.1238346099853516, 0.9013651609420776], + [-4.3527512550354, -0.49790704250335693], + [-5.706355094909668, 4.707687854766846], + [-3.727611780166626, 0.15977007150650024], + [-5.681962490081787, 0.6711883544921875], + [1.3953320980072021, 6.570409774780273], + [-4.4747161865234375, -2.020221710205078], + [-2.3308732509613037, 5.180367469787598], + [5.391939640045166, -2.383737802505493], + [-2.665682077407837, -2.186701774597168], + [-2.3709487915039062, 4.059676647186279], + [-5.640655040740967, 1.6163203716278076], + [-6.917479038238525, -1.7878893613815308], + [2.0855438709259033, -5.039435386657715], + [-0.2643825113773346, 0.5477988123893738], + [1.0556347370147705, -0.3566470146179199], + [7.903975486755371, -1.595750093460083], + [-1.7293083667755127, 0.17259538173675537], + [-5.839467525482178, -3.4758827686309814], + [-4.055115699768066, -2.419578790664673], + [-0.8206194639205933, 9.203082084655762], + [8.381657600402832, -2.2474205493927], + [-2.56195068359375, 1.4296516180038452], + [6.512729167938232, -1.3006259202957153], + [-6.368408679962158, 7.962242126464844], + [-3.0850298404693604, 4.970052242279053], + [-7.1453728675842285, 9.19491195678711], + [-0.3309270739555359, 10.83879280090332], + [8.859967231750488, -2.3375422954559326], + [5.447990417480469, -1.020325779914856], + [-6.264437198638916, -2.1100080013275146], + [-0.9265644550323486, -0.5848896503448486], + [-0.32808518409729004, 10.191131591796875], + [-4.151379585266113, -1.6342535018920898], + [0.1156897023320198, -1.5139210224151611], + [-4.579744815826416, -3.194533586502075], + [2.93048357963562, -4.410152435302734], + [-0.5009018182754517, -4.791535377502441], + [3.04345440864563, -4.647818565368652], + [-4.909599781036377, -3.7237322330474854], + [-0.27377015352249146, 8.126324653625488], + [-2.3055367469787598, 2.1847352981567383], + [2.0853729248046875, 5.683661937713623], + [-2.950589179992676, -1.937995195388794], + [-4.076334476470947, -1.5114473104476929], + [-3.4387693405151367, -3.4136292934417725], + [0.6541752815246582, -6.839832305908203], + [8.804176330566406, -2.430880546569824], + [1.3302419185638428, 0.2799212336540222], + [-0.4079287648200989, 1.7437442541122437], + [-5.093670845031738, -2.689708709716797], + [-3.4863951206207275, 1.894553303718567], + [1.90582275390625, 4.118628025054932], + [7.722826957702637, -3.05214262008667], + [-0.3467782735824585, 8.912614822387695], + [8.353996276855469, -2.2106964588165283], + [-2.845489263534546, -2.8353536128997803], + [0.6648243069648743, -4.593695640563965], + [-4.534908771514893, 3.4651801586151123], + [-4.9944939613342285, -1.748078465461731], + [1.550593614578247, 5.018711090087891], + [-4.664667129516602, 6.556938648223877], + [-5.465140342712402, 6.267422676086426], + [-6.1728129386901855, 7.525867938995361], + [-0.30358177423477173, 10.325563430786133], + [-1.0469534397125244, -0.9343162775039673], + [-8.289040565490723, -0.9883390665054321], + [-0.23122569918632507, -0.5296233892440796], + [2.994370698928833, -4.526429653167725], + [6.995326042175293, -1.6289056539535522], + [-5.5831756591796875, 6.357942581176758], + [-2.4993321895599365, 2.043423891067505], + [0.46534794569015503, -0.6959924697875977], + [-6.040839195251465, -2.935699939727783], + [7.016347885131836, -2.3071186542510986], + [-6.779043674468994, -1.5972317457199097], + [-5.5083842277526855, 5.020168304443359], + [-2.2207376956939697, -2.725987434387207], + [3.3323919773101807, -1.1314078569412231], + [-0.28903114795684814, 9.983802795410156], + [-0.018449731171131134, 9.58216667175293], + [9.104212760925293, -2.5072317123413086], + [6.173254013061523, -3.6798055171966553], + [-2.8131144046783447, 0.1219063401222229], + [-2.960629940032959, -1.2879925966262817], + [-0.5492664575576782, 10.151223182678223], + [6.357448577880859, -1.9895330667495728], + [-0.5136162042617798, -0.5468575358390808], + [-4.631866931915283, -3.7325425148010254], + [1.654916524887085, 4.825770378112793], + [0.2193901538848877, 8.299201965332031], + [-4.388678550720215, -2.944868326187134], + [-6.8769402503967285, -0.8536837100982666], + [2.085545301437378, -8.041650772094727], + [4.002847194671631, 0.885132372379303], + [-5.861155986785889, 5.782018661499023], + [6.429678440093994, -1.3727186918258667], + [-5.307423114776611, 5.203742980957031], + [2.229210376739502, 2.334862470626831], + [1.3277597427368164, -7.269841194152832], + [3.120657205581665, -4.87799596786499], + [-5.272921085357666, 6.401183128356934], + [0.019790105521678925, -0.6138058304786682], + [-1.780372977256775, 0.7872077226638794], + [-4.004732608795166, 3.1667487621307373], + [3.1263229846954346, -4.83878231048584], + [-4.982697010040283, 2.236032009124756], + [-0.2087460160255432, 10.734477043151855], + [-5.473817348480225, 7.68719482421875], + [0.43485021591186523, -5.497908592224121], + [-6.59798002243042, 7.929166793823242], + [7.993905544281006, -2.562551736831665], + [-4.283679008483887, 6.46917724609375], + [-5.187948703765869, -0.8342983722686768], + [-2.099809408187866, -1.1628166437149048], + [-0.6301340460777283, 12.859227180480957], + [-4.950232982635498, 3.4071619510650635], + [5.982349872589111, -1.2460427284240723], + [7.785841941833496, -1.9343992471694946], + [-0.25916290283203125, 9.808585166931152], + [-6.6320414543151855, 8.445676803588867], + [-2.854257345199585, 4.108515739440918], + [-2.2152059078216553, 1.2620306015014648], + [-5.180053234100342, 4.232301712036133], + [-2.4032037258148193, 1.777145504951477], + [-5.6197052001953125, 1.852979063987732], + [-0.4410440921783447, 9.775100708007812], + [9.431981086730957, -2.6836235523223877], + [2.214848279953003, -3.5373575687408447], + [3.0424160957336426, -4.720749378204346], + [-0.06848926097154617, 8.285083770751953], + [0.6595864295959473, 0.21352672576904297], + [2.724868059158325, -6.414029598236084], + [1.9961223602294922, -3.8270304203033447], + [4.113480567932129, -2.8340699672698975], + [0.48151642084121704, 2.1582765579223633], + [4.538407802581787, -2.2900264263153076], + [-2.405755043029785, 1.6344245672225952], + [-1.9814603328704834, -3.7991013526916504], + [-4.950288772583008, -0.8920765519142151], + [-0.526102602481842, 9.75542163848877], + [-5.581935882568359, -1.8130539655685425], + [-6.269767761230469, 8.429130554199219], + [-4.8096747398376465, -3.011728525161743], + [8.356745719909668, -2.3201849460601807], + [-2.9348626136779785, 2.983307361602783], + [-2.8719301223754883, 6.77377462387085], + [-5.735828876495361, 8.009744644165039], + [-4.52809476852417, -3.283154249191284], + [1.0760958194732666, -7.45086669921875], + [-4.807644367218018, -3.5228238105773926], + [2.499842643737793, 6.031508445739746], + [-1.8763996362686157, 1.1285640001296997], + [-3.054270029067993, -3.8748512268066406], + [8.533656120300293, -2.6062076091766357], + [1.6598644256591797, -3.0004665851593018], + [2.913013219833374, -4.609879970550537], + [-1.835908055305481, -0.728135347366333], + [8.931631088256836, -2.3579885959625244], + [-1.830424189567566, 2.096771001815796], + [-7.775991916656494, -1.4396209716796875], + [2.8804666996002197, -5.1724443435668945], + [-1.8725335597991943, 0.8598970174789429], + [-4.4382643699646, -1.0277140140533447], + [-2.4112510681152344, 4.706593990325928], + [-0.3829804062843323, 10.705097198486328], + [3.19146466255188, -4.9560041427612305], + [2.919776678085327, -4.418228626251221], + [-5.8043389320373535, 2.772360324859619], + [8.71757698059082, -2.444702386856079], + [-3.974909543991089, -3.311932325363159], + [-5.60506534576416, -4.201788902282715], + [-7.5491437911987305, 9.27446174621582], + [-1.2160083055496216, -0.6224513053894043], + [1.9903836250305176, 5.225644111633301], + [0.074625663459301, 5.117929935455322], + [8.394659042358398, -2.414689779281616], + [0.7736203670501709, 0.6506581902503967], + [-4.199893474578857, -1.0944455862045288], + [-0.46249595284461975, -0.7821064591407776], + [1.919112205505371, -3.4371707439422607], + [-3.3578832149505615, 5.978118896484375], + [-2.576343297958374, 5.636351585388184], + [8.394598960876465, -2.5640368461608887], + [-0.00630611926317215, 9.054336547851562], + [5.295766353607178, 7.970660209655762], + [-4.016879081726074, -2.620274305343628], + [2.72576642036438, -5.631564140319824], + [-5.0590996742248535, -4.052106857299805], + [8.61327838897705, -2.4829835891723633], + [-2.5813496112823486, 0.6416987180709839], + [-2.634922742843628, 5.6248459815979], + [-0.2508370280265808, -1.6139941215515137], + [7.847274303436279, -1.7259010076522827], + [-0.44336265325546265, 9.577070236206055], + [2.569542407989502, -4.146965503692627], + [-2.5549135208129883, 3.0573108196258545], + [-4.8190412521362305, -1.8959685564041138], + [8.234289169311523, -2.325032949447632], + [6.843545436859131, -1.9533454179763794], + [-1.8376306295394897, 1.1315228939056396], + [-2.1349105834960938, 6.555315971374512], + [-5.14670991897583, -0.0424843467772007], + [8.412307739257812, -2.398467779159546], + [-8.351276397705078, -0.847948431968689], + [1.8079997301101685, -8.739502906799316], + [-4.145578861236572, 4.649263381958008], + [0.23878508806228638, -5.116457939147949], + [-4.132676601409912, 3.161600112915039], + [-3.1116394996643066, -2.3603808879852295], + [1.107140302658081, -6.1580400466918945], + [-2.5139715671539307, 1.6480712890625], + [-6.501937389373779, -0.2514336109161377], + [6.237855434417725, -1.350019097328186], + [2.573071241378784, -6.12778377532959], + [6.183274269104004, -3.473952293395996], + [-4.576462268829346, -2.800372362136841], + [5.862879753112793, -1.1116496324539185], + [-4.071115970611572, -2.842346429824829], + [-2.4695675373077393, 2.9624807834625244], + [-0.5285411477088928, 6.766868591308594], + [1.6909501552581787, 5.186309814453125], + [2.4138004779815674, -2.9769179821014404], + [-0.1103290244936943, -1.5096718072891235], + [1.7957533597946167, -4.753600120544434], + [-5.5529656410217285, 6.173315525054932], + [-5.0466413497924805, -2.422952890396118], + [5.3361382484436035, -1.1365947723388672], + [-4.464820384979248, 6.124819755554199], + [-2.013841390609741, 0.4430989921092987], + [-4.555136680603027, -2.9082438945770264], + [3.1492648124694824, -4.9501471519470215], + [2.130747079849243, -10.20104694366455], + [-4.273988246917725, 5.5636796951293945], + [7.753162860870361, -2.0553364753723145], + [8.530681610107422, -2.6297333240509033], + [-2.1980559825897217, 6.1238298416137695], + [-3.076307535171509, -1.227353572845459], + [1.5012038946151733, 6.082777500152588], + [-0.4699523448944092, 9.907692909240723], + [-1.5846015214920044, 1.175323247909546], + [-4.404099941253662, 5.994060516357422], + [-5.347636699676514, -0.2475649118423462], + [2.8110411167144775, -4.38377571105957], + [2.2186782360076904, 5.577321529388428], + [-4.995161533355713, 6.054587364196777], + [-2.3656201362609863, 0.1802511215209961], + [-5.021862506866455, 4.9283342361450195], + [2.7339718341827393, -4.122417449951172], + [-2.09196138381958, 1.9009121656417847], + [-3.5913169384002686, -3.3590216636657715], + [-2.7308850288391113, 1.6816908121109009], + [-3.740996837615967, -3.6487200260162354], + [0.49318522214889526, -0.47923433780670166], + [-5.5480122566223145, 5.093100547790527], + [-3.1807687282562256, -1.9626648426055908], + [2.84224271774292, -3.9533534049987793], + [1.753576397895813, 5.314568996429443], + [4.054235935211182, 6.677007675170898], + [-4.559354305267334, -2.5370595455169678], + [3.1227893829345703, -5.506412982940674], + [2.9236488342285156, -4.3968987464904785], + [-2.135720729827881, -2.8873469829559326], + [4.583896160125732, 6.572547912597656], + [1.7457472085952759, 5.123146057128906], + [6.7287211418151855, -1.8649051189422607], + [5.694571018218994, -1.4606319665908813], + [-5.128471374511719, -2.0416722297668457], + [-2.453967809677124, 1.6827703714370728], + [-3.3906023502349854, -1.507939100265503], + [-0.28071528673171997, 11.834745407104492], + [8.839787483215332, -2.3324925899505615], + [-5.170820713043213, -2.5653836727142334], + [7.891477108001709, -1.9817239046096802], + [-5.257297039031982, 6.500992774963379], + [-1.7439074516296387, 7.318342685699463], + [-3.2510783672332764, 4.507464408874512], + [8.700634956359863, -2.4814341068267822], + [5.750030994415283, -3.001899480819702], + [-2.3815224170684814, 2.2556169033050537], + [7.199216365814209, -2.6224515438079834], + [-3.7119429111480713, -1.904558539390564], + [-2.9994261264801025, -3.6411855220794678], + [-5.746445178985596, 0.9686001539230347], + [-2.0482726097106934, 1.801246166229248], + [5.629029273986816, 7.363951206207275], + [-3.3065388202667236, -1.9086030721664429], + [2.5587170124053955, -4.549959182739258], + [-6.8582024574279785, 8.673465728759766], + [0.3536365032196045, -5.798928260803223], + [-5.329600811004639, 1.8261122703552246], + [9.28190803527832, -2.957265615463257], + [-3.8926401138305664, 2.106475353240967], + [-1.0949848890304565, -0.9094145894050598], + [1.5806143283843994, 5.214720726013184], + [-4.550554275512695, -1.2703641653060913], + [-5.387290954589844, -3.7723095417022705], + [0.18629354238510132, -4.46584415435791], + [0.06332405656576157, 0.37561818957328796], + [3.11653208732605, -4.95067834854126], + [-1.6624717712402344, -0.5300143957138062], + [9.634343147277832, -2.672381639480591], + [1.9818401336669922, 4.920984268188477], + [-0.30420058965682983, 9.08910846710205], + [-5.742878437042236, -5.259544849395752], + [-0.3655306100845337, 11.251498222351074], + [-5.174907684326172, 3.2772092819213867], + [2.1761605739593506, 5.474087715148926], + [-3.8890178203582764, -2.0911312103271484], + [2.348436117172241, -5.477445125579834], + [1.7879385948181152, -3.4757025241851807], + [6.431654453277588, -4.587464809417725], + [2.8616812229156494, 5.0418009757995605], + [-7.249914646148682, -0.9401891231536865], + [-3.661735773086548, -3.4066739082336426], + [-1.6413393020629883, 0.35068368911743164], + [-0.3014616370201111, 10.583857536315918], + [-5.780428409576416, -2.7070131301879883], + [3.6803085803985596, 6.0522027015686035], + [-2.055164098739624, 2.220874071121216], + [9.577353477478027, -2.6677708625793457], + [-0.46468865871429443, 10.850118637084961], + [-3.0997207164764404, -3.555403232574463], + [-4.5359721183776855, -3.099080801010132], + [-2.2010538578033447, 2.3001224994659424], + [-3.999375581741333, 6.552645206451416], + [2.0906989574432373, 6.607740879058838], + [-0.3523675799369812, -1.079590916633606], + [-6.678083896636963, -2.629403591156006], + [2.7627975940704346, -4.181365966796875], + [-3.9920413494110107, -0.2329796552658081], + [-5.173178195953369, -3.1126394271850586], + [-2.466912031173706, 2.0055766105651855], + [-5.089837551116943, -1.7861934900283813], + [-5.060048580169678, 5.463543891906738], + [2.741279363632202, -4.371407508850098], + [6.304731845855713, -1.9331140518188477], + [2.569760322570801, -3.969590425491333], + [-4.990945339202881, -1.4105581045150757], + [-4.3571906089782715, -2.9789466857910156], + [1.9117172956466675, -8.61107063293457], + [-5.63472843170166, -4.923864364624023], + [-3.8299992084503174, 2.8389432430267334], + [0.4868374466896057, 7.860624313354492], + [8.500467300415039, -2.4054343700408936], + [-3.2794582843780518, 4.516904830932617], + [1.4411554336547852, -2.8615729808807373], + [6.371429443359375, -3.388399362564087], + [7.3578057289123535, -2.722564697265625], + [8.566398620605469, -2.488572359085083], + [-4.166447639465332, -4.229115962982178], + [0.6712549924850464, -6.141365051269531], + [1.3331656455993652, -4.603126525878906], + [2.8899128437042236, -4.7037882804870605], + [-2.5123860836029053, 4.448520660400391], + [2.449852705001831, -5.274832248687744], + [-4.360040187835693, 5.218160629272461], + [-4.101140022277832, 2.9370505809783936], + [-7.274452209472656, -1.0627444982528687], + [9.819331169128418, -2.736363649368286], + [3.100400447845459, -5.772113800048828], + [-5.879266738891602, -1.5487871170043945], + [-7.427147388458252, -1.3000460863113403], + [2.994490385055542, -4.59590482711792], + [2.395429849624634, -7.229890823364258], + [2.7733943462371826, -4.299449443817139], + [2.006588935852051, -3.6240932941436768], + [1.665507435798645, -8.234928131103516], + [8.519489288330078, -2.5171077251434326], + [-6.007393836975098, 8.44467544555664], + [3.0374672412872314, -4.5637922286987305], + [-5.399656295776367, 3.0278737545013428], + [-5.3159918785095215, -0.8019677400588989], + [-7.338465690612793, 9.005165100097656], + [-5.540216445922852, 5.628319263458252], + [-6.904297351837158, -1.3415765762329102], + [-5.689403057098389, -0.6753756999969482], + [-4.396605014801025, -0.5655934810638428], + [-5.589402198791504, 4.8821330070495605], + [10.318839073181152, -2.8456366062164307], + [-0.22139516472816467, 0.48030757904052734], + [-2.0911152362823486, 2.340132236480713], + [7.929190158843994, -2.3191134929656982], + [-5.200855731964111, -3.1873552799224854], + [-4.0757155418396, 6.24727201461792], + [-4.5602545738220215, -2.3454596996307373], + [-3.5825307369232178, -3.4910905361175537], + [-4.58038330078125, -3.056143045425415], + [-5.239715099334717, -3.4633123874664307], + [0.6006172895431519, -0.47933584451675415], + [-7.1388468742370605, -1.0312660932540894], + [1.575679063796997, 5.340153694152832], + [-5.0020856857299805, -3.9748237133026123], + [-3.8769772052764893, -3.1948153972625732], + [6.797143459320068, -2.5722897052764893], + [-4.167540073394775, 4.267187118530273], + [2.0813722610473633, 6.073460102081299], + [-4.6361236572265625, 2.7254836559295654], + [-4.379660129547119, 0.3277839124202728], + [2.481628179550171, -8.739397048950195], + [-3.5169265270233154, -4.754728317260742], + [-2.2702713012695312, 2.175105571746826], + [-0.4294079542160034, 9.312183380126953], + [-7.945431232452393, -1.3614457845687866], + [1.084058403968811, -6.076645851135254], + [1.8343327045440674, 5.445775032043457], + [2.089243173599243, -4.620639801025391], + [9.966307640075684, -2.7240192890167236], + [-2.650705099105835, -3.241560459136963], + [2.3863141536712646, 5.851442337036133], + [1.346407413482666, 0.8377968072891235], + [3.004274368286133, -5.637035369873047], + [3.776212692260742, -6.415491104125977], + [2.7434165477752686, -5.5089030265808105], + [-5.68336820602417, 2.9829885959625244], + [6.072509288787842, -1.2686318159103394], + [1.587088942527771, -8.123361587524414], + [-5.505163669586182, -1.5640755891799927], + [-4.475600242614746, 6.42454719543457], + [-2.506964683532715, 1.9110081195831299], + [-0.3658824861049652, -0.3752272129058838], + [-2.0927577018737793, -0.8613146543502808], + [-7.957782745361328, -1.1789722442626953], + [-2.1036627292633057, -3.2809135913848877], + [-7.228691577911377, -0.8444982171058655], + [-2.4117515087127686, 1.6992987394332886], + [-2.5784003734588623, 1.4706203937530518], + [-4.780908584594727, -2.5641262531280518], + [-5.11798620223999, 1.8957487344741821], + [3.2880969047546387, -4.972204208374023], + [-5.122317790985107, -3.5007927417755127], + [-7.271792888641357, 8.952737808227539], + [6.229065418243408, -5.662540912628174], + [-0.18175551295280457, -1.2061653137207031], + [6.875657081604004, -3.1133968830108643], + [-0.16432219743728638, 10.071008682250977], + [-5.09552526473999, 2.921060085296631], + [-0.23973742127418518, -0.17517434060573578], + [-4.66586446762085, -3.963331460952759], + [2.279569387435913, -3.7279021739959717], + [5.206181049346924, -3.3809075355529785], + [1.9024629592895508, 5.2563982009887695], + [7.053653240203857, -1.7558611631393433], + [-1.7073472738265991, 2.014407157897949], + [-2.595388889312744, -3.6351635456085205], + [7.62035608291626, -1.9697794914245605], + [-2.076690912246704, 2.264068603515625], + [-2.0542259216308594, 0.5666054487228394], + [-5.381356716156006, -3.4761245250701904], + [5.311545372009277, -5.988555431365967], + [0.06609105318784714, 9.742319107055664], + [6.0158772468566895, -1.132207989692688], + [8.57000732421875, -2.590337038040161], + [-5.487066268920898, 6.4514360427856445], + [-0.29193001985549927, -0.8916915059089661], + [-0.8437154293060303, 8.54207706451416], + [2.8257148265838623, -3.914299726486206], + [1.9227745532989502, 0.7171272039413452], + [-0.15308254957199097, -1.6141263246536255], + [-0.34547367691993713, -1.4293736219406128], + [-1.683728575706482, 2.2930233478546143], + [-5.037910461425781, -2.8668158054351807], + [-2.5055134296417236, 1.44290292263031], + [2.919726610183716, -5.902743339538574], + [-5.464900493621826, 3.0947837829589844], + [2.4034087657928467, 4.928282737731934], + [-4.853047847747803, -2.6740214824676514], + [-0.6951605081558228, -0.44482776522636414], + [8.107579231262207, -2.1281373500823975], + [-4.804695129394531, -2.308028221130371], + [2.7644612789154053, -5.6610822677612305], + [1.909144401550293, 5.158104419708252], + [2.6465766429901123, -5.458409786224365], + [-0.3219652771949768, 9.94571304321289], + [9.364039421081543, -2.664518117904663], + [-4.3340229988098145, -0.5141757130622864], + [-4.559040546417236, -3.597334384918213], + [-6.638915061950684, 8.527194023132324], + [5.6407389640808105, -1.2474042177200317], + [3.362799644470215, 6.693865776062012], + [-2.2931618690490723, 3.1207261085510254], + [-5.838321208953857, -2.000633478164673], + [-5.897643566131592, 1.5789870023727417], + [3.100252866744995, -4.775704383850098], + [-4.189987659454346, -2.1475648880004883], + [5.413764953613281, -1.0181618928909302], + [-0.2780616283416748, 0.7812672853469849], + [2.7076239585876465, -5.858291149139404], + [6.678030014038086, -1.3738309144973755], + [-4.777931213378906, -4.224459171295166], + [-5.519500255584717, 6.485380172729492], + [-2.566816568374634, 2.152616262435913], + [2.4956071376800537, 1.093253493309021], + [-8.614152908325195, -0.7204735279083252], + [8.67033863067627, -2.1972546577453613], + [7.789664268493652, -1.9160127639770508], + [-4.505579948425293, -3.667773962020874], + [2.425995111465454, -7.4424943923950195], + [-6.0603766441345215, -2.3116886615753174], + [5.798880100250244, -1.1153656244277954], + [-2.4822120666503906, 1.6249810457229614], + [0.843609094619751, -0.46770578622817993], + [-2.9136698246002197, 4.460219383239746], + [-2.5826990604400635, 2.0698914527893066], + [-0.02297491580247879, -0.2695360481739044], + [6.6857218742370605, -1.471832036972046], + [-4.2612481117248535, -1.557174563407898], + [-6.476207733154297, 6.8956403732299805], + [-5.0200114250183105, 3.486497402191162], + [-4.430702209472656, -3.2894911766052246], + [-0.4345860183238983, -0.2499610334634781], + [-2.4500772953033447, 1.3305262327194214], + [5.565235137939453, -1.9208699464797974], + [2.9654908180236816, -4.470015048980713], + [-5.148936748504639, 3.716937780380249], + [-0.2225545048713684, 9.041365623474121], + [-4.152713298797607, 5.730321884155273], + [1.4519121646881104, 0.020195554941892624], + [-0.5279971957206726, 10.889785766601562], + [-0.5543155074119568, -0.47951844334602356], + [8.649910926818848, -2.1538636684417725], + [-5.4515275955200195, -1.2429057359695435], + [-3.8652350902557373, 6.057368278503418], + [-3.444823980331421, -1.2667747735977173], + [2.4868738651275635, -4.290426731109619], + [1.4430222511291504, -7.884535312652588], + [2.820828914642334, -3.198195695877075], + [2.3150737285614014, -3.3677642345428467], + [-2.2913074493408203, -3.1115143299102783], + [-3.547118902206421, -4.337808609008789], + [-2.0662424564361572, 3.5902271270751953], + [2.474496603012085, -4.002906322479248], + [4.103447437286377, -6.6789140701293945], + [4.9402995109558105, -3.855552911758423], + [-4.64448881149292, -4.854308605194092], + [-3.5409858226776123, -1.9869054555892944], + [-7.727875232696533, 9.424606323242188], + [8.463116645812988, -2.274296760559082], + [-5.101093769073486, -3.1327061653137207], + [-0.3825163245201111, -0.8110371828079224], + [2.5998740196228027, -6.76294469833374], + [1.4719560146331787, -3.8083736896514893], + [1.075203776359558, -6.3614349365234375], + [2.4032773971557617, 0.5495908856391907], + [5.493819713592529, 7.898989677429199], + [5.386806964874268, -1.2610974311828613], + [5.624510288238525, -1.0807057619094849], + [-6.6595072746276855, -2.0117592811584473], + [0.6037392020225525, -5.592918395996094], + [-0.6951333284378052, 9.066954612731934], + [2.9001152515411377, -6.140519142150879], + [8.343875885009766, -2.4215657711029053], + [-5.817492961883545, 7.291983127593994], + [-4.582371234893799, -5.088586807250977], + [7.731627941131592, -1.9302188158035278], + [2.9308226108551025, -3.9228057861328125], + [2.4349517822265625, -5.077929973602295], + [-2.386265516281128, 2.044705629348755], + [3.195950984954834, -5.055643558502197], + [-7.209240436553955, 8.960763931274414], + [-1.2874252796173096, 4.698245525360107], + [-5.809798717498779, -1.1074049472808838], + [-5.653234481811523, -1.7194331884384155], + [-2.726304769515991, 5.22846794128418], + [-4.5476250648498535, -2.5724215507507324], + [1.3475298881530762, 5.84422492980957], + [-0.009323306381702423, 9.76204776763916], + [-1.5971554517745972, -0.737114429473877], + [-0.2397182583808899, 9.25160026550293], + [-0.19074106216430664, -0.4466928541660309], + [2.9708969593048096, -4.514721870422363], + [9.744840621948242, -2.7136943340301514], + [-4.8615336418151855, -2.55303692817688], + [-3.73112416267395, -3.3004424571990967], + [5.690945625305176, -1.4130696058273315], + [8.585799217224121, -2.1609981060028076], + [7.11875581741333, -1.4358084201812744], + [2.2299585342407227, 5.851805686950684], + [-5.414610385894775, -3.1228890419006348], + [0.37782925367355347, -5.751499652862549], + [5.182837963104248, -1.97282874584198], + [-4.592406749725342, -2.6270039081573486], + [1.1902137994766235, -6.519698143005371], + [-5.0545477867126465, -4.261205196380615], + [2.7865233421325684, -4.207446098327637], + [1.36793851852417, -7.817017555236816], + [-4.119999408721924, 3.152867317199707], + [-6.9589314460754395, 8.541006088256836], + [-6.544854640960693, -2.181396245956421], + [-6.564246654510498, 7.887439727783203], + [0.43070077896118164, -5.176336288452148], + [1.8566005229949951, 5.7260589599609375], + [6.065117835998535, -1.2417247295379639], + [-2.294574737548828, -0.8244954943656921], + [-4.986177921295166, -1.5896817445755005], + [-3.006127119064331, -1.1081382036209106], + [-4.272037982940674, -2.2125918865203857], + [-0.25698035955429077, 11.354103088378906], + [-2.623318910598755, 4.6120805740356445], + [2.522394895553589, -3.921633005142212], + [1.078710675239563, 0.9626642465591431], + [1.8170558214187622, 5.620736122131348], + [1.8050349950790405, -7.5865373611450195], + [-4.4697184562683105, -0.8553054332733154], + [-6.656146049499512, 6.99257755279541], + [-0.1286105513572693, 9.352184295654297], + [1.5775501728057861, 5.2949934005737305], + [2.6921212673187256, 0.9956737756729126], + [-6.41653299331665, 1.827020525932312], + [-6.425694942474365, 8.634658813476562], + [-0.4690064787864685, -0.8058386445045471], + [1.8235293626785278, 5.564089775085449], + [-5.496090412139893, -2.568962335586548], + [3.068516731262207, -4.685810565948486], + [9.668938636779785, -2.6031134128570557], + [2.5345489978790283, -3.9151875972747803], + [-5.905331134796143, -0.7539699077606201], + [-4.4385247230529785, -3.531874656677246], + [-2.672985076904297, -0.40926361083984375], + [-4.620512962341309, -3.692237615585327], + [-2.3848445415496826, 0.5229691863059998], + [2.3947818279266357, -7.132873058319092], + [-7.07520866394043, 8.739938735961914], + [-4.1621575355529785, 0.1651703119277954], + [-5.243943691253662, -2.786571741104126], + [-5.69150972366333, 6.944267272949219], + [3.476672887802124, -6.656278133392334], + [-0.8280583620071411, -0.18049749732017517], + [2.5521204471588135, 6.557101249694824], + [-3.932232141494751, -0.6306565403938293], + [7.836426258087158, -1.9287549257278442], + [-2.396721363067627, 2.2571988105773926], + [-4.1392436027526855, -2.631087064743042], + [2.9350664615631104, -4.595394134521484], + [-6.793395519256592, -1.2737303972244263], + [2.9007108211517334, -4.38743257522583], + [-2.1061418056488037, 1.4411190748214722], + [-5.440972805023193, 2.217604160308838], + [-5.5336384773254395, -3.7609317302703857], + [-0.2863994240760803, -1.2615009546279907], + [-4.8334832191467285, 6.0740275382995605], + [-1.076303243637085, -1.0307430028915405], + [-0.1031317189335823, 11.079719543457031], + [-5.978226184844971, -3.12958025932312], + [-2.514677047729492, 1.471110224723816], + [0.8908661603927612, 0.47274118661880493], + [2.4926254749298096, 5.553806781768799], + [2.7832727432250977, -4.200592517852783], + [2.333346128463745, -7.809118270874023], + [-2.850583553314209, -0.6490190625190735], + [-2.5390682220458984, 1.5161643028259277], + [-5.6328959465026855, 7.077425956726074], + [-0.14063042402267456, 9.795212745666504], + [0.827379047870636, -6.48707389831543], + [-2.0281453132629395, 2.3651628494262695], + [9.521221160888672, -2.6131584644317627], + [-4.560056686401367, 6.3862080574035645], + [-2.101106643676758, 2.2637083530426025], + [1.6432610750198364, -6.349260330200195], + [8.424115180969238, -3.3577253818511963], + [1.7557586431503296, -2.339738607406616], + [-1.5642015933990479, -0.3509487211704254], + [6.318506717681885, -1.4217242002487183], + [-5.187658309936523, -7.161345958709717], + [0.9069508910179138, -4.286748886108398], + [-2.341599225997925, 1.483086347579956], + [8.047840118408203, -2.259533643722534], + [-2.453443765640259, 1.5899125337600708], + [-1.71884024143219, 5.606775283813477], + [-7.665256023406982, 9.353772163391113], + [2.8719422817230225, -4.327012062072754], + [-6.434974670410156, 4.5195770263671875], + [0.7561958432197571, 5.272778511047363], + [-7.527144432067871, 9.222561836242676], + [-0.4367132782936096, 10.235031127929688], + [-2.4865758419036865, 2.408271074295044], + [8.34846305847168, -2.1487996578216553], + [3.6505277156829834, -3.5996692180633545], + [1.683164119720459, -3.357893943786621], + [1.3972927331924438, 4.984916687011719], + [-7.067025661468506, -2.1507010459899902], + [-2.266470193862915, 0.8044228553771973], + [-6.397463321685791, -1.1655429601669312], + [-4.683993816375732, -2.9703657627105713], + [8.299814224243164, -2.1334006786346436], + [-3.6688826084136963, 0.14349812269210815], + [0.05271434038877487, -3.485142230987549], + [-2.467482328414917, 2.3274357318878174], + [-0.5669301152229309, 12.02626895904541], + [3.1706089973449707, -4.707961082458496], + [3.009413719177246, -4.519986152648926], + [-4.786671161651611, -3.234470844268799], + [-3.570720911026001, -2.161796808242798], + [0.02100466936826706, 9.913837432861328], + [-5.818741798400879, 3.7502501010894775], + [-2.463820695877075, 1.8702059984207153], + [-6.788956165313721, 8.456127166748047], + [2.7521979808807373, -5.867691993713379], + [-5.476563453674316, 4.5483198165893555], + [-0.1660059690475464, 9.748272895812988], + [5.359019756317139, -1.2733937501907349], + [0.02808993309736252, -0.663134753704071], + [-3.536957025527954, -1.3406797647476196], + [2.7314116954803467, -4.488348484039307], + [-2.5007731914520264, 2.7519474029541016], + [-0.6287503838539124, 10.527759552001953], + [-5.823119163513184, -2.357819080352783], + [-0.43376854062080383, -1.5175583362579346], + [-3.2762835025787354, 5.295339107513428], + [-5.870829105377197, 7.339408874511719], + [4.9760661125183105, -2.897091865539551], + [1.5759384632110596, -6.582244873046875], + [-6.6705145835876465, 7.972379684448242], + [-5.4190449714660645, -6.980616569519043], + [-0.27376776933670044, 10.422956466674805], + [-4.269909381866455, -3.570012331008911], + [1.583479881286621, 5.197262763977051], + [-0.6854397654533386, 9.33189868927002], + [2.844271421432495, -4.397791385650635], + [1.6966326236724854, 0.3847174644470215], + [-5.580130100250244, -3.8473193645477295], + [-4.808793544769287, -2.043212890625], + [7.882632732391357, -3.600360870361328], + [-3.8233072757720947, -5.395124435424805], + [-3.7145471572875977, 0.3464837670326233], + [-1.7674999237060547, 1.021176815032959], + [2.052205801010132, -4.212799549102783], + [-5.657441139221191, 7.478524208068848], + [-5.753526210784912, 1.1702301502227783], + [-2.4684367179870605, 1.7518343925476074], + [0.6711021065711975, -0.5320331454277039], + [-5.6472296714782715, -2.1763339042663574], + [-4.097099304199219, -2.653920888900757], + [-3.5275521278381348, -5.3602294921875], + [8.499781608581543, -2.4289801120758057], + [2.24117112159729, -6.9954986572265625], + [-5.454809188842773, -3.183865785598755], + [-2.236119031906128, 0.5549373030662537], + [3.1418097019195557, -4.8245368003845215], + [-4.302831649780273, -0.8333608508110046], + [-2.653607130050659, 5.8769636154174805], + [-4.022249221801758, -1.0105003118515015], + [-4.93222188949585, -3.4266397953033447], + [-1.1440175771713257, 9.623083114624023], + [9.360705375671387, -2.621312379837036], + [-0.5426552295684814, -1.3105517625808716], + [-2.5342466831207275, 1.1197456121444702], + [2.6179850101470947, -4.8583807945251465], + [9.12412166595459, -2.3325493335723877], + [2.6628496646881104, -4.308490753173828], + [1.0065680742263794, -6.348381996154785], + [7.9787163734436035, -2.383589267730713], + [1.7734644412994385, -3.294032335281372], + [-5.972448348999023, 1.6757761240005493], + [-3.6027145385742188, -2.9705512523651123], + [-4.670745849609375, -3.7683188915252686], + [4.780048847198486, -4.196901798248291], + [-2.8475840091705322, -0.9708232283592224], + [2.7507622241973877, -4.45050573348999], + [-2.084235906600952, 0.8127574324607849], + [-6.452730655670166, -2.83923077583313], + [4.3590874671936035, 6.342389106750488], + [2.198821783065796, 5.874993324279785], + [-6.091532230377197, 7.762632846832275], + [9.439149856567383, -2.637122631072998], + [-2.0961577892303467, 6.1695709228515625], + [0.5020713806152344, -6.149117946624756], + [8.873167991638184, -2.6131742000579834], + [-0.663112461566925, 11.888375282287598], + [-5.642425060272217, -4.061942100524902], + [-4.725774765014648, -0.4269198775291443], + [1.4810271263122559, -7.722104072570801], + [2.548445463180542, 1.4567844867706299], + [-2.1914031505584717, 2.9697914123535156], + [1.4039219617843628, -3.1080548763275146], + [-0.5010784268379211, -0.45419102907180786], + [8.531518936157227, -2.6346042156219482], + [-4.484452247619629, 3.674473524093628], + [-1.0728607177734375, 8.04788589477539], + [-5.128518581390381, -1.9214690923690796], + [-0.42845118045806885, 9.323513984680176], + [-4.4752936363220215, -0.5740866661071777], + [-3.220695734024048, -4.112089157104492], + [1.9646191596984863, 5.655916213989258], + [-0.20489269495010376, -0.712993323802948], + [-6.489780902862549, 8.249275207519531], + [0.24469569325447083, -0.7827224135398865], + [2.778687000274658, -4.671586990356445], + [-4.5828938484191895, -3.9408562183380127], + [3.5704519748687744, -1.920986294746399], + [-3.2961461544036865, 5.79172420501709], + [-5.280590534210205, 6.795598983764648], + [-4.765064239501953, 5.211338996887207], + [3.1577532291412354, -4.959479331970215], + [3.001859664916992, -4.708893775939941], + [1.8161041736602783, 5.350891590118408], + [-1.6691533327102661, -1.2422783374786377], + [-6.716155529022217, -1.5846612453460693], + [-1.626802921295166, -2.4939630031585693], + [5.5010247230529785, -3.0606629848480225], + [-0.23099857568740845, 9.540998458862305], + [-6.521185398101807, -0.6264017820358276], + [-5.0737481117248535, 8.19431209564209], + [-4.427801609039307, -2.8476297855377197], + [-3.6469080448150635, -3.1599209308624268], + [1.6414527893066406, 1.5639981031417847], + [6.087202072143555, -1.578485369682312], + [0.9750016331672668, -7.389480113983154], + [-1.4737539291381836, 1.7066413164138794], + [2.9284589290618896, -0.19229331612586975], + [-2.3717243671417236, 1.9451069831848145], + [1.4409996271133423, -7.9819254875183105], + [2.875903844833374, -4.3994574546813965], + [-2.4879095554351807, 2.0537707805633545], + [-5.28670072555542, 6.96764612197876], + [3.3450939655303955, -5.313610076904297], + [-0.6722808480262756, -0.2565397322177887], + [-2.305152654647827, 0.4398252069950104], + [-2.3499786853790283, 1.7837671041488647], + [-2.4259371757507324, 1.6817381381988525], + [6.5923171043396, -1.3149405717849731], + [9.171613693237305, -2.575829267501831], + [-0.3046283721923828, 9.765439987182617], + [-5.175764560699463, 6.087517738342285], + [3.0360138416290283, -4.561919212341309], + [-6.494755268096924, -2.722691774368286], + [-2.403890371322632, 1.476750373840332], + [-4.402688503265381, 5.885678291320801], + [-9.351014137268066, -0.898086667060852], + [-4.896251201629639, 5.00744104385376], + [2.0212514400482178, -3.2265896797180176], + [2.251722574234009, -3.8196747303009033], + [2.5020341873168945, -3.7442591190338135], + [-5.72697114944458, 6.327337265014648], + [1.1585783958435059, 6.2199296951293945], + [1.7689365148544312, -8.634904861450195], + [2.7764546871185303, -4.390805244445801], + [1.2980287075042725, -6.759657382965088], + [3.0546398162841797, -6.282895088195801], + [0.2454230785369873, -5.688338756561279], + [-3.9813129901885986, 1.2005926370620728], + [-2.5181527137756348, 1.958560824394226], + [-0.2953305244445801, 9.515657424926758], + [-5.210903167724609, -3.324319839477539], + [-5.849052906036377, -3.2326319217681885], + [-5.1082587242126465, -2.984412670135498], + [-5.956501483917236, -2.4479997158050537], + [1.8933418989181519, 5.211270332336426], + [-4.177528381347656, -4.420884132385254], + [6.898024559020996, -3.648707151412964], + [0.5171483159065247, 0.19514048099517822], + [9.716886520385742, -2.6441681385040283], + [1.6582623720169067, -7.670805931091309], + [-5.087661266326904, -5.821956634521484], + [-3.460925579071045, 1.8514766693115234], + [2.2276666164398193, -5.579041004180908], + [5.317749500274658, -4.7431840896606445], + [7.6388044357299805, -2.7852532863616943], + [-0.16225653886795044, 9.475774765014648], + [-2.383133888244629, -2.7357680797576904], + [2.6192233562469482, -3.8157026767730713], + [-0.18133637309074402, -2.8673768043518066], + [-0.5737146139144897, -1.3223581314086914], + [-8.605262756347656, -1.3361669778823853], + [-4.31603479385376, -4.035082817077637], + [-2.125398874282837, 2.711484670639038], + [-0.4050319194793701, 10.530750274658203], + [2.2742297649383545, -8.123847961425781], + [2.9542396068573, -4.443650245666504], + [2.9239912033081055, -4.40859317779541], + [3.103301763534546, -4.972460746765137], + [2.114833116531372, -6.775962829589844], + [-2.97381854057312, 3.249526262283325], + [-0.005803681910037994, -2.9727842807769775], + [-2.0877108573913574, 2.697331428527832], + [-4.410158634185791, 4.327341079711914], + [-4.577513694763184, 1.0663394927978516], + [2.633327007293701, -7.268531799316406], + [-1.1263014078140259, 1.013748288154602], + [-2.01143479347229, -0.30253124237060547], + [7.592536926269531, -2.662140369415283], + [-5.901633262634277, 8.356782913208008], + [3.361454486846924, -5.480193138122559], + [-4.502573013305664, -1.4168587923049927], + [-4.837399959564209, 0.9418465495109558], + [6.973156452178955, -3.1418044567108154], + [-4.512190341949463, -2.4926466941833496], + [1.5846436023712158, -3.3992226123809814], + [0.4213985204696655, 5.528936862945557], + [9.6727876663208, -2.693467378616333], + [-5.71212911605835, 6.0524468421936035], + [6.698329448699951, -2.3007729053497314], + [-5.646790981292725, 4.872859001159668], + [-2.8421638011932373, 2.898693084716797], + [1.0600948333740234, 0.10755762457847595], + [9.92051887512207, -2.752310037612915], + [1.4068498611450195, -7.047961235046387], + [-6.917309284210205, -0.5739938020706177], + [2.93605375289917, -6.358870506286621], + [5.303230285644531, -2.1489546298980713], + [-5.361564636230469, -3.8886945247650146], + [1.0282846689224243, -0.07081006467342377], + [-3.404597043991089, -2.314467430114746], + [-0.4428313374519348, 11.125201225280762], + [-6.03164005279541, 6.838605880737305], + [-5.668612003326416, 4.407232284545898], + [0.07921432703733444, 0.9736102819442749], + [-5.095130443572998, 3.271407127380371], + [0.6419894099235535, 6.175958633422852], + [2.044110059738159, -4.684018611907959], + [-3.550410747528076, 5.692493438720703], + [-1.2442975044250488, -0.7809892296791077], + [-2.234192371368408, -0.9720326662063599], + [-4.418623924255371, -3.0667779445648193], + [-0.2777813673019409, 9.767942428588867], + [-2.0846107006073, 1.0449286699295044], + [-3.720947027206421, -3.979726552963257], + [9.809407234191895, -2.7231523990631104], + [-4.915650367736816, -1.015959620475769], + [8.693129539489746, -2.370380401611328], + [-3.14870285987854, -4.719294548034668], + [9.097833633422852, -2.558972120285034], + [-4.118061542510986, 6.262181282043457], + [0.07895689457654953, 9.722867965698242], + [1.0851227045059204, -6.231146335601807], + [-4.584550380706787, -3.2709157466888428], + [6.396091938018799, -2.662923812866211], + [3.1173384189605713, -4.675104141235352], + [-4.5039286613464355, 1.889914870262146], + [2.032639741897583, 5.489610195159912], + [-5.337025165557861, -3.9993412494659424], + [-4.552740573883057, -1.1034741401672363], + [-6.063699245452881, 6.629469394683838], + [2.911154270172119, -4.477347373962402], + [-1.379201889038086, 1.2594637870788574], + [7.692226409912109, -1.9440393447875977], + [-5.093898296356201, -3.3745851516723633], + [4.352716445922852, -7.0602827072143555], + [2.7890045642852783, -4.241143226623535], + [-4.965674877166748, 6.855733871459961], + [8.908682823181152, -2.460801839828491], + [-4.878518581390381, -2.8403708934783936], + [-2.3945977687835693, -2.29917311668396], + [-4.065667629241943, -1.9214376211166382], + [-4.690823078155518, -2.5128204822540283], + [2.267029047012329, -6.621006011962891], + [1.6299033164978027, -5.265748023986816], + [-0.46418672800064087, 11.517139434814453], + [-4.336177349090576, -3.3568055629730225], + [8.569214820861816, -2.225630521774292], + [-5.612837791442871, 3.947261095046997], + [5.844659328460693, -1.2828307151794434], + [-0.2577671408653259, -0.5584120154380798], + [-7.889010906219482, -1.09683096408844], + [-6.0307936668396, -0.23160982131958008], + [5.442971706390381, -1.4245203733444214], + [-0.4305853843688965, -0.33901166915893555], + [-0.5640606880187988, 9.101222038269043], + [1.1656248569488525, -7.396106243133545], + [-2.807729721069336, 1.7997137308120728], + [-2.429751396179199, 1.6432501077651978], + [1.4966537952423096, 5.268490791320801], + [-4.757587909698486, 0.8984142541885376], + [-4.721400260925293, -2.1495938301086426], + [-5.416947841644287, 2.233123540878296], + [-4.637864112854004, -2.384469747543335], + [9.464759826660156, -2.627842426300049], + [-5.50278902053833, 7.207839012145996], + [-5.070791244506836, 6.205395698547363], + [2.2768967151641846, -3.3717801570892334], + [6.6008782386779785, -1.822487711906433], + [-5.565065860748291, -3.4261972904205322], + [-5.638591766357422, 1.5863670110702515], + [2.6961562633514404, -5.659629821777344], + [-5.064919471740723, -3.099086046218872], + [-7.640779495239258, -1.9656782150268555], + [1.8301048278808594, 2.134967565536499], + [-4.325806140899658, -1.0906219482421875], + [-3.8918449878692627, 6.343653202056885], + [-5.544863224029541, -1.7961357831954956], + [-4.870147228240967, -2.470062255859375], + [1.2191146612167358, -4.129033088684082], + [2.6839377880096436, -4.890678405761719], + [-5.055184841156006, -3.1403658390045166], + [1.9675993919372559, 5.3738908767700195], + [-2.4309213161468506, -4.109148979187012], + [-5.988206386566162, 7.170200347900391], + [-5.01425313949585, -3.393230676651001], + [-2.763758897781372, -2.320563316345215], + [-0.4071018099784851, -0.4833037555217743], + [3.233062982559204, 6.53266716003418], + [-5.152581214904785, -2.2973783016204834], + [-0.42023974657058716, 9.341268539428711], + [-3.770672559738159, -0.23058736324310303], + [6.637187480926514, -1.3019827604293823], + [1.2267311811447144, -7.692169666290283], + [2.3837523460388184, -9.220479965209961], + [-3.840045690536499, -2.2838757038116455], + [-5.446740627288818, 3.680399179458618], + [8.179757118225098, -2.7679226398468018], + [-3.123701572418213, -0.6795336008071899], + [-1.4697428941726685, -0.7715741395950317], + [-4.188308238983154, 3.329664945602417], + [-0.33033132553100586, 8.958681106567383], + [-1.0090606212615967, 9.677563667297363], + [-1.4114621877670288, 8.38200569152832], + [2.146639585494995, -3.3307995796203613], + [1.1913397312164307, -7.821160793304443], + [0.7267647385597229, 5.673736572265625], + [1.6481716632843018, 0.8568825721740723], + [-3.502209424972534, -3.11625599861145], + [-3.6770613193511963, 5.801050186157227], + [4.100865840911865, -0.8218525648117065], + [-0.03850812464952469, 9.613842964172363], + [-4.890434741973877, -2.73078989982605], + [1.5050876140594482, -3.9134209156036377], + [1.0982780456542969, -0.270382285118103], + [2.6561331748962402, -4.210235595703125], + [-4.858157157897949, -2.889155387878418], + [0.23270368576049805, 10.028321266174316], + [-0.5368975400924683, 9.456336975097656], + [2.494878053665161, -3.892507553100586], + [2.3349766731262207, -3.5319812297821045], + [-4.95573091506958, -3.8719899654388428], + [-0.20367592573165894, 10.289969444274902], + [2.932969570159912, -5.84138298034668], + [1.7343393564224243, -3.0261189937591553], + [-5.731058597564697, 6.685476303100586], + [5.462198257446289, 7.716686725616455], + [2.6718058586120605, 1.0059821605682373], + [-4.157577991485596, 3.6885011196136475], + [4.2008376121521, 6.620828628540039], + [6.603039264678955, -2.208793878555298], + [8.832559585571289, -2.6522021293640137], + [-3.4805233478546143, -2.2425215244293213], + [5.945005893707275, -2.16471004486084], + [2.464395761489868, -3.627185583114624], + [-4.86203145980835, -3.785761594772339], + [-4.688108444213867, -3.0802431106567383], + [-0.35130491852760315, 0.7773298025131226], + [-2.1637587547302246, 2.1239864826202393], + [8.43930721282959, -2.2713677883148193], + [2.9270029067993164, -4.428181171417236], + [2.939678430557251, -4.743553638458252], + [-0.3662613034248352, 9.642812728881836], + [-6.263393878936768, -0.4216306209564209], + [8.77101993560791, -3.1941745281219482], + [-2.4514336585998535, 1.769208312034607], + [2.378638505935669, -5.302432060241699], + [3.1715166568756104, -5.122450828552246], + [-6.697542190551758, -1.8530930280685425], + [-4.626258373260498, 7.216925621032715], + [-8.090665817260742, -0.5860227346420288], + [2.6307451725006104, -6.343175888061523], + [8.27186107635498, -2.2054710388183594], + [1.9668843746185303, 5.325464248657227], + [-5.313950061798096, 7.353816509246826], + [5.895544052124023, -1.3149092197418213], + [-6.616775035858154, 8.279603958129883], + [2.921879529953003, -4.403909206390381], + [2.642716884613037, 0.8962109088897705], + [4.523091793060303, -1.0708746910095215], + [-4.641852855682373, -1.182159185409546], + [-7.4860992431640625, 9.736458778381348], + [-6.165201187133789, 7.863572597503662], + [2.8876094818115234, -4.479363441467285], + [9.145350456237793, -2.5417869091033936], + [-3.9166300296783447, -2.006734609603882], + [-4.4088029861450195, -1.7869046926498413], + [-8.008278846740723, -0.9412214756011963], + [6.002933979034424, -3.063248872756958], + [2.3773410320281982, -7.197185516357422], + [-1.543359637260437, 1.7425721883773804], + [1.3986302614212036, -6.554147720336914], + [-0.6063753962516785, 9.828913688659668], + [2.595735788345337, -4.568366527557373], + [2.085158586502075, 5.144645690917969], + [-2.8845324516296387, 3.0612168312072754], + [6.21209192276001, -2.6354944705963135], + [-2.295334577560425, 7.538938522338867], + [-2.702383518218994, 1.7128264904022217], + [-7.034797191619873, -2.1819889545440674], + [-5.282365798950195, -2.153554916381836], + [-4.968869686126709, -2.9664676189422607], + [9.440674781799316, -2.606645345687866], + [-4.332753658294678, -2.9848926067352295], + [-6.004159450531006, 7.825472354888916], + [-4.735394477844238, 3.9598023891448975], + [-4.377993106842041, -2.9199578762054443], + [-5.6802897453308105, 5.787595748901367], + [-4.974294662475586, -1.484582543373108], + [-6.4535746574401855, -2.0662457942962646], + [-0.3848525285720825, -1.284144401550293], + [-3.0168535709381104, 4.343289375305176], + [-6.1786885261535645, 8.421016693115234], + [-4.719372272491455, 3.9834134578704834], + [-4.1103386878967285, 4.486671447753906], + [-4.985535621643066, 4.373689651489258], + [-2.8111181259155273, -4.204357147216797], + [-2.290050745010376, 1.1482638120651245], + [-6.02572774887085, -0.15832531452178955], + [-2.253446340560913, 2.044494152069092], + [2.504633665084839, -4.39678955078125], + [-2.742706060409546, -4.449724197387695], + [-5.633445739746094, 6.9975409507751465], + [-4.6582489013671875, -2.848684549331665], + [-7.365540504455566, -1.1252604722976685], + [2.212749481201172, 5.368531227111816], + [1.6708382368087769, -3.2277772426605225], + [-0.6900213360786438, 10.817241668701172], + [-3.876643419265747, -2.1503655910491943], + [0.4467405080795288, -0.5412585139274597], + [-5.114194393157959, 1.0301958322525024], + [-3.6765129566192627, 5.807193756103516], + [-0.22855430841445923, 9.559736251831055], + [-3.6844534873962402, -2.0794126987457275], + [-0.3662341237068176, 10.924674987792969], + [-3.132676362991333, 7.280828475952148], + [-2.4885313510894775, 1.4672330617904663], + [-0.9050081968307495, 1.994444727897644], + [9.006780624389648, -2.520188093185425], + [2.4812896251678467, -3.3456356525421143], + [-2.211980104446411, 1.2653088569641113], + [1.2649900913238525, -7.052674293518066], + [-0.4079747796058655, 10.960081100463867], + [0.8726070523262024, -5.8870649337768555], + [-5.575851917266846, 6.738877296447754], + [-0.2931998372077942, 9.399185180664062], + [7.563812255859375, -1.8050552606582642], + [-3.9754674434661865, 4.434378623962402], + [2.959383964538574, -4.486114501953125], + [-5.123060703277588, -6.060522079467773], + [-4.912994861602783, 5.853993892669678], + [2.6833322048187256, -2.553104877471924], + [-5.861395359039307, 4.935420036315918], + [-2.128795862197876, 3.1429061889648438], + [-3.2316482067108154, -2.705906629562378], + [1.9507067203521729, 5.611889839172363], + [-2.5715320110321045, 2.2414498329162598], + [-7.684757709503174, -1.6564116477966309], + [-2.353121280670166, 1.5073132514953613], + [7.180397033691406, -1.5843902826309204], + [-3.678288221359253, -3.2435505390167236], + [0.8594986200332642, -5.475561141967773], + [-1.6622430086135864, 0.4499211609363556], + [2.6291801929473877, 4.146608352661133], + [-4.878050804138184, -2.7866311073303223], + [5.815262317657471, -2.5009706020355225], + [0.3930375277996063, -0.6854661107063293], + [-4.325692176818848, 7.535916328430176], + [-4.901083946228027, -0.3037665784358978], + [9.102079391479492, -2.369307279586792], + [5.809565544128418, -1.4130116701126099], + [-5.1239237785339355, 4.109302043914795], + [-2.6821272373199463, 1.7742271423339844], + [-0.2733350992202759, 8.457313537597656], + [1.9486501216888428, 5.083316802978516], + [-6.00654935836792, 4.850731372833252], + [7.329076766967773, -2.1017391681671143], + [2.2495739459991455, -8.523931503295898], + [-2.1791977882385254, 6.203178882598877], + [-2.1376774311065674, 0.07467365264892578], + [-6.205832004547119, -4.32935905456543], + [-3.49424147605896, 5.490625381469727], + [-2.3613996505737305, 5.581652641296387], + [8.05248737335205, -2.3443377017974854], + [-1.9196561574935913, 0.7124834060668945], + [-4.75061559677124, -3.0010974407196045], + [-0.6900613903999329, 8.738875389099121], + [7.861022472381592, -2.5390443801879883], + [-2.442270278930664, 1.6504052877426147], + [9.49209976196289, -2.6087727546691895], + [-6.305086612701416, 7.585019111633301], + [-4.051851749420166, -2.114257574081421], + [-1.6334762573242188, 0.8259137868881226], + [-6.221553325653076, 6.279338836669922], + [5.659315586090088, -1.7374523878097534], + [-4.6924614906311035, -2.9733383655548096], + [-1.3645892143249512, 9.435831069946289], + [2.3892505168914795, 0.7796902656555176], + [4.301729679107666, 6.313371181488037], + [-7.2242512702941895, 8.756669044494629], + [-2.5028560161590576, 1.9347237348556519], + [1.9173277616500854, 5.4748430252075195], + [-2.3939077854156494, 1.7448334693908691], + [0.05157523602247238, 10.693126678466797], + [-4.648281097412109, 7.2308220863342285], + [-6.883241176605225, -1.096744418144226], + [-0.40368807315826416, -0.6572073698043823], + [-5.8993353843688965, -2.012369394302368], + [-2.444409132003784, 0.917537271976471], + [2.7695987224578857, -7.401084899902344], + [-8.096358299255371, -1.2810801267623901], + [6.738907337188721, -2.3571717739105225], + [-6.876946449279785, 8.353338241577148], + [-4.688061714172363, -2.114453077316284], + [2.241234540939331, -6.601517677307129], + [-4.514102935791016, 4.785858154296875], + [-1.3808915615081787, 3.611879825592041], + [2.6134190559387207, -3.818028688430786], + [-0.5446693897247314, -0.7021453380584717], + [-0.3937414884567261, 9.402398109436035], + [-5.628254413604736, 3.811271905899048], + [-2.221865177154541, 0.7080578804016113], + [-2.9212729930877686, 3.216254472732544], + [3.1436984539031982, -5.207951545715332], + [2.517827033996582, 0.8061231970787048], + [-6.717607498168945, -0.5600641369819641], + [-0.35795342922210693, 10.226737022399902], + [-2.3208186626434326, -1.237082839012146], + [-1.0900341272354126, -2.0602986812591553], + [2.631366491317749, -6.282874584197998], + [-2.0900490283966064, 2.770047187805176], + [-5.679769992828369, 2.7315666675567627], + [-5.24519681930542, 7.088400363922119], + [-4.887178897857666, 1.520931601524353], + [-5.747779369354248, -1.2721452713012695], + [0.16965150833129883, -0.6365966796875], + [-3.9097344875335693, -2.514580249786377], + [-4.838443756103516, 0.08742737770080566], + [3.226594924926758, -5.100643634796143], + [-5.056776523590088, -3.053239345550537], + [-3.7377235889434814, 7.091116905212402], + [-2.449294090270996, -3.6813344955444336], + [-0.5314720273017883, -0.646064043045044], + [3.2653510570526123, -4.877737998962402], + [-5.887186527252197, -2.835144519805908], + [-5.033110618591309, 6.536448955535889], + [-4.566704273223877, -1.9266711473464966], + [2.958022356033325, -4.469841957092285], + [-0.24092859029769897, 10.039407730102539], + [-7.555708408355713, -0.79693603515625], + [0.34137630462646484, 6.8546648025512695], + [-1.2012141942977905, 5.8140058517456055], + [-4.907139301300049, -2.3917248249053955], + [-4.869776248931885, -4.095456123352051], + [-1.101015567779541, 7.8978705406188965], + [-0.1395186483860016, -3.667692184448242], + [-4.834010124206543, -3.262744188308716], + [-0.20728129148483276, 9.667875289916992], + [9.443814277648926, -2.668424367904663], + [-4.775045871734619, -2.8498473167419434], + [1.7798864841461182, -4.356167793273926], + [8.652888298034668, -2.1817123889923096], + [-4.020828723907471, 4.967130661010742], + [1.353953242301941, 0.5143730044364929], + [-1.6824411153793335, 0.6560900211334229], + [6.399402141571045, -1.8641356229782104], + [6.922970294952393, -1.4495432376861572], + [-0.3944971561431885, 11.50201416015625], + [-5.364867687225342, -1.3122116327285767], + [-5.639607906341553, 2.0241470336914062], + [-0.0243212953209877, -0.8252365589141846], + [3.0172603130340576, -6.437915802001953], + [-0.4739353060722351, 10.792716026306152], + [-2.0540084838867188, 1.2019104957580566], + [0.1628952920436859, -1.7832192182540894], + [3.0856025218963623, -6.864435195922852], + [-1.2511909008026123, 9.51991081237793], + [1.2564265727996826, -7.6163129806518555], + [-4.562789440155029, -4.506574630737305], + [-5.564509868621826, 4.275851726531982], + [2.8987698554992676, -4.37739896774292], + [-2.1842257976531982, -1.5904531478881836], + [9.743494987487793, -2.697777271270752], + [1.7334446907043457, -8.865496635437012], + [5.412200927734375, -0.8736474514007568], + [6.669572830200195, -1.3350743055343628], + [-5.642105579376221, -2.244659185409546], + [-2.1739566326141357, 2.2609102725982666], + [-5.384923934936523, 6.532623767852783], + [0.3083583116531372, -0.022572848945856094], + [-6.954908847808838, 8.608985900878906], + [-0.2925091087818146, -1.5301793813705444], + [1.7621630430221558, 3.303328275680542], + [-4.6710896492004395, 6.465545654296875], + [-1.6156651973724365, 0.5493689179420471], + [-8.222451210021973, -1.675774335861206], + [-2.5339009761810303, 6.676263809204102], + [2.219461679458618, -7.548875331878662], + [2.2565219402313232, -3.0105156898498535], + [-2.1476895809173584, 2.6136362552642822], + [-0.696743369102478, -1.1103378534317017], + [-0.7728906273841858, -4.603991508483887], + [-1.9065706729888916, 2.143491268157959], + [-3.0391640663146973, -1.2325292825698853], + [2.394059419631958, -4.411381721496582], + [-5.3897600173950195, -0.6551576852798462], + [-6.592666149139404, -1.2761725187301636], + [1.7650768756866455, 0.41078341007232666], + [2.579113483428955, -4.022811412811279], + [-3.2325339317321777, -2.438612699508667], + [-2.576566457748413, 1.2660330533981323], + [-5.035889625549316, 5.764811038970947], + [-0.08686966449022293, 10.016908645629883], + [1.564401626586914, 1.65379798412323], + [5.763757228851318, -3.1053860187530518], + [1.712913990020752, 1.3964036703109741], + [-7.293663024902344, 8.97856616973877], + [4.106575012207031, 6.437661170959473], + [2.671940565109253, 6.293278217315674], + [3.1141746044158936, -4.668602466583252], + [-4.807880878448486, -3.767069101333618], + [-0.2414143681526184, 10.378652572631836], + [-6.648625373840332, 8.480487823486328], + [-6.136664867401123, -2.0873911380767822], + [-2.307650089263916, 1.669089436531067], + [-5.3224663734436035, -1.4026495218276978], + [7.028684139251709, -3.8142406940460205], + [7.619069576263428, -2.650278329849243], + [0.22707396745681763, -0.9826122522354126], + [3.113347291946411, -7.102029800415039], + [-0.42893993854522705, 10.293766021728516], + [-4.618095874786377, 5.958592891693115], + [7.993758678436279, -2.075697660446167], + [-5.151822566986084, 4.158083915710449], + [-5.519016742706299, -1.871573567390442], + [-4.551733493804932, -2.724437952041626], + [2.567753314971924, -3.972851037979126], + [-5.24350118637085, -3.340726613998413], + [-4.959736347198486, 5.929014682769775], + [10.18623161315918, -2.819967031478882], + [5.6807475090026855, -1.491273283958435], + [0.9783268570899963, -6.3291850090026855], + [-1.5537701845169067, 1.078797459602356], + [0.516761064529419, 5.398937225341797], + [-4.638630390167236, -3.5209736824035645], + [-4.874873161315918, -3.5590310096740723], + [-0.1588054895401001, -0.5699188709259033], + [-0.18715524673461914, 10.345878601074219], + [1.716306209564209, 5.361147880554199], + [2.1482815742492676, 1.5699729919433594], + [-2.400970697402954, 1.4577633142471313], + [-5.168805122375488, 6.951001167297363], + [-4.551192760467529, 3.4672586917877197], + [-3.6897804737091064, 5.8385820388793945], + [-1.4515358209609985, 2.2360305786132812], + [-2.7084035873413086, 5.830949783325195], + [-4.625436305999756, -3.731224298477173], + [5.171144008636475, -2.1578872203826904], + [8.335010528564453, -2.097614288330078], + [-5.822768211364746, 2.1996803283691406], + [1.8703733682632446, -3.3959386348724365], + [-2.118201971054077, 2.374846935272217], + [-1.6300920248031616, 3.7983438968658447], + [-5.408349990844727, -1.74420964717865], + [3.1815264225006104, 5.5758867263793945], + [-0.27569836378097534, 10.814981460571289], + [-4.373581409454346, 4.982213973999023], + [-6.813198566436768, -2.081707715988159], + [0.6304008364677429, -0.2373502403497696], + [-3.776587724685669, -0.07392376661300659], + [-0.06920591741800308, -0.8072459697723389], + [2.425645112991333, -4.264222145080566], + [1.9100534915924072, 5.281394004821777], + [-7.045814037322998, 8.631880760192871], + [-3.64589524269104, 2.5398802757263184], + [2.6232452392578125, -3.143284559249878], + [-6.419408798217773, 8.095352172851562], + [-4.810060024261475, -3.62001895904541], + [0.005070231854915619, -1.4000531435012817], + [2.5897042751312256, -3.7360877990722656], + [-6.060126781463623, 3.1024675369262695], + [6.9452900886535645, -1.2994459867477417], + [-2.755596876144409, 2.768738269805908], + [-7.999042987823486, -1.4825457334518433], + [-5.030402660369873, -3.749242067337036], + [3.0343315601348877, 0.8757702708244324], + [-5.965884685516357, 7.715274810791016], + [5.419996738433838, 7.265740394592285], + [-2.280153512954712, 2.317603349685669], + [-0.4051229953765869, -0.985472559928894], + [-0.06765962392091751, 8.698476791381836], + [-4.4496588706970215, -1.8150688409805298], + [-7.665235996246338, -1.0270469188690186], + [-6.325886249542236, -2.175421714782715], + [-5.056080341339111, 0.04545503482222557], + [0.5016965270042419, 5.513622283935547], + [-0.21739840507507324, 9.082849502563477], + [-4.749688625335693, -3.551344633102417], + [-2.451869487762451, 1.7639111280441284], + [-7.301592826843262, 8.895368576049805], + [0.7510713934898376, 0.6384037733078003], + [2.157825231552124, 5.81697940826416], + [2.7452340126037598, -4.160129547119141], + [-3.5538647174835205, 5.684592247009277], + [1.0558407306671143, -5.821686744689941], + [-2.5017573833465576, -1.5086909532546997], + [-4.560995101928711, 5.375665664672852], + [3.3217437267303467, 4.824267387390137], + [-8.822742462158203, -1.153354287147522], + [5.761102199554443, -3.1443369388580322], + [-2.999058485031128, 5.791117191314697], + [1.341029167175293, 5.503751754760742], + [-4.764700889587402, -1.3257603645324707], + [-0.43921688199043274, -3.06439471244812], + [-2.0105652809143066, 2.748166799545288], + [2.8384501934051514, -4.510343551635742], + [0.27212077379226685, 9.112040519714355], + [9.717827796936035, -2.661356210708618], + [3.13604998588562, 6.937352180480957], + [2.154320240020752, -6.004889488220215], + [-2.618725061416626, -3.7782366275787354], + [-0.22197192907333374, -1.1217108964920044], + [2.631126642227173, 6.323015213012695], + [-2.5026493072509766, 0.25977766513824463], + [4.253044605255127, 6.990621566772461], + [-6.305209636688232, 8.002488136291504], + [10.085700988769531, -2.777400255203247], + [2.208040714263916, 5.855865478515625], + [-2.9019265174865723, 4.25030517578125], + [-2.762531042098999, 2.5880422592163086], + [-2.7683441638946533, -1.8161014318466187], + [-4.707374095916748, -3.1690542697906494], + [4.727609634399414, -1.2809476852416992], + [-4.449082374572754, 6.947680473327637], + [-4.298099040985107, -5.279586315155029], + [-0.4639964699745178, 10.473297119140625], + [-6.408405780792236, 7.709477424621582], + [5.2023091316223145, 7.046686172485352], + [2.330301284790039, 4.305327415466309], + [-2.019697427749634, 2.2786550521850586], + [6.967700481414795, -1.5287078619003296], + [-5.945587635040283, 1.325875163078308], + [3.196537494659424, -4.9475297927856445], + [0.7479524612426758, 0.07554151117801666], + [2.420668363571167, -7.299184799194336], + [3.4783053398132324, -1.64199697971344], + [-3.5627856254577637, 1.7089651823043823], + [8.778334617614746, -2.3354885578155518], + [0.0887417420744896, -1.3596203327178955], + [0.9953792691230774, 4.92677640914917], + [-5.070566654205322, -0.2748071551322937], + [-0.24988263845443726, 9.925722122192383], + [4.42887544631958, 5.917608737945557], + [-2.3789141178131104, 1.1572973728179932], + [1.3222377300262451, -5.946532249450684], + [3.676743507385254, 6.5578293800354], + [-4.3130340576171875, 0.03512471541762352], + [-6.8515238761901855, -1.6358306407928467], + [-3.3800904750823975, -1.3011326789855957], + [1.3941000699996948, 0.24849992990493774], + [-1.1489717960357666, 8.168747901916504], + [-5.8052659034729, 4.149240493774414], + [-4.43821382522583, -3.62172269821167], + [-5.706468105316162, 6.621870040893555], + [2.73559308052063, -6.63779354095459], + [-2.514300584793091, 1.024735927581787], + [2.6588938236236572, -4.383890628814697], + [-5.5039191246032715, 0.8579474687576294], + [-6.550017356872559, -0.28251171112060547], + [-2.8314783573150635, 3.0583536624908447], + [-5.594393253326416, 6.887616157531738], + [-5.184617519378662, 6.6184797286987305], + [9.675304412841797, -2.6965272426605225], + [3.0975382328033447, 5.943753719329834], + [-2.5741958618164062, 1.7981338500976562], + [-4.758336544036865, -1.6826738119125366], + [-4.789480686187744, -3.3683505058288574], + [3.414968967437744, -4.0432891845703125], + [-4.57285737991333, -2.8566641807556152], + [2.229261636734009, 5.521338939666748], + [8.816767692565918, -2.363208532333374], + [-5.07206392288208, -2.346517562866211], + [-1.8446147441864014, -0.7800301313400269], + [2.2803263664245605, 5.914175033569336], + [1.1468380689620972, 1.5150738954544067], + [-7.312613487243652, -1.7835525274276733], + [-4.692928791046143, -2.390399932861328], + [-5.145843029022217, 1.1192363500595093], + [5.909171104431152, -1.0350078344345093], + [-2.565011978149414, 2.34424090385437], + [-1.2201194763183594, 9.29736328125], + [-8.362561225891113, -1.372612476348877], + [-4.922068119049072, 7.235325813293457], + [0.13022536039352417, 5.656530380249023], + [-2.274456024169922, 5.349212646484375], + [-6.138627529144287, 5.716555595397949], + [-7.060356616973877, -1.8374603986740112], + [-8.092028617858887, -1.8124455213546753], + [2.703265905380249, -6.612255096435547], + [-5.144177436828613, -1.680234432220459], + [1.9150525331497192, 5.717805862426758], + [-3.17992901802063, -2.514707565307617], + [-2.0654594898223877, 2.2791266441345215], + [-5.2045817375183105, -1.2494486570358276], + [-2.7845730781555176, -0.6383538246154785], + [-4.6836066246032715, -2.722142457962036], + [-5.371005058288574, 3.807009696960449], + [-0.18144652247428894, -0.6379239559173584], + [-6.366614818572998, -0.4076991081237793], + [0.6504796743392944, 9.30113410949707], + [1.804862141609192, -6.780224800109863], + [8.377638816833496, -2.3992598056793213], + [-5.027032375335693, 4.548940658569336], + [-6.605195045471191, 7.882027626037598], + [-6.779238224029541, 8.580005645751953], + [0.05146101862192154, -1.1719733476638794], + [-1.1863175630569458, -3.418365716934204], + [-3.7790725231170654, -3.145963191986084], + [2.6752517223358154, -7.577437400817871], + [-4.018024444580078, -1.155403733253479], + [-5.707861423492432, -3.3986144065856934], + [3.440117120742798, 5.835432529449463], + [-0.39651554822921753, -0.6079918742179871], + [-4.542963981628418, -1.008995532989502], + [-0.1082460954785347, 10.488897323608398], + [-2.105239152908325, 2.7768192291259766], + [8.960662841796875, -2.6125307083129883], + [0.8817145228385925, 5.117719650268555], + [2.5575170516967773, -3.1879708766937256], + [-1.1218303442001343, -2.682107925415039], + [2.2476861476898193, -6.746541976928711], + [-0.3050318956375122, 10.831908226013184], + [-4.1664137840271, -1.4713473320007324], + [3.3324854373931885, -5.313418865203857], + [-2.317948818206787, 2.84317946434021], + [-4.797789573669434, 4.256786346435547], + [-5.563417911529541, 0.9524188041687012], + [-4.272806644439697, 4.573653221130371], + [-5.271105766296387, -2.0213425159454346], + [0.12858092784881592, -0.980809211730957], + [-0.2891957759857178, 9.57329273223877], + [2.850104808807373, -5.920522689819336], + [-2.1535873413085938, 0.35353362560272217], + [-5.137533664703369, -3.9437406063079834], + [8.915122032165527, -2.716059446334839], + [8.633336067199707, -2.7886993885040283], + [-3.7863402366638184, 4.433575630187988], + [2.2650203704833984, -4.298632621765137], + [3.7675859928131104, 0.7272642254829407], + [-3.814237356185913, -1.5388473272323608], + [-6.657527446746826, -1.783131718635559], + [1.636296272277832, -7.841468334197998], + [2.9060215950012207, -4.560177326202393], + [-6.905107021331787, 8.68946647644043], + [-2.454437255859375, 1.7630614042282104], + [-7.1076836585998535, 8.560965538024902], + [-2.3099827766418457, 2.034759759902954], + [-0.3002551794052124, 9.90423583984375], + [9.244887351989746, -2.6456899642944336], + [-5.567587375640869, 0.15635550022125244], + [-0.43272000551223755, 9.342276573181152], + [3.2152416706085205, 0.9155202507972717], + [-0.657965362071991, 9.336150169372559], + [7.77126932144165, -2.358072519302368], + [1.2127965688705444, -6.238978385925293], + [4.160868167877197, 6.7118096351623535], + [0.8528352975845337, -6.77127742767334], + [5.992500305175781, -1.214317798614502], + [3.2633697986602783, -5.212499141693115], + [-0.29707878828048706, 10.175289154052734], + [-6.958156585693359, -1.888405680656433], + [-0.3072679042816162, 9.486936569213867], + [8.433207511901855, -2.295896291732788], + [-5.110856056213379, -0.30637043714523315], + [-0.01407451182603836, 9.014862060546875], + [-6.271475315093994, -2.4944682121276855], + [-5.1330389976501465, -3.338085412979126], + [-3.113726854324341, 3.3743896484375], + [-1.4495391845703125, 1.8254815340042114], + [-0.2973441481590271, 10.183208465576172], + [2.398184061050415, -3.7549240589141846], + [-2.4394710063934326, 1.8820925951004028], + [-7.2616047859191895, 8.906558990478516], + [-4.394609451293945, 4.379049301147461], + [-0.35855990648269653, 9.507067680358887], + [-6.199769020080566, -1.5649549961090088], + [-3.653256893157959, 3.7885260581970215], + [1.5860774517059326, 5.101522445678711], + [2.3169445991516113, -7.151379108428955], + [2.1029303073883057, -7.458039283752441], + [-5.121683597564697, -2.891491651535034], + [-5.3019256591796875, -0.7073060870170593], + [-0.07026136666536331, -0.5058201551437378], + [8.39768123626709, -2.219695806503296], + [9.253168106079102, -2.6829729080200195], + [-4.513678073883057, -3.3801755905151367], + [-2.098729372024536, 2.6957027912139893], + [-2.168644666671753, 1.4312305450439453], + [-5.519760608673096, -3.907926082611084], + [-2.772017240524292, -4.153931617736816], + [-2.529719352722168, 1.4186723232269287], + [-5.342541217803955, -3.269256591796875], + [-0.21117156744003296, 10.132733345031738], + [2.4650070667266846, -8.176376342773438], + [2.734898567199707, -5.760829925537109], + [3.535820722579956, 1.415144920349121], + [7.646293640136719, -2.0408146381378174], + [5.235022068023682, -0.20149976015090942], + [-4.630302429199219, -5.5661821365356445], + [4.912591457366943, -1.0312795639038086], + [-0.48243290185928345, 11.477606773376465], + [-3.6402275562286377, 6.729903221130371], + [3.1208441257476807, -5.714015960693359], + [-4.6381940841674805, -1.0054407119750977], + [-2.876946210861206, 3.135885715484619], + [-4.909929275512695, -2.239121437072754], + [-1.621809959411621, 0.6711685061454773], + [-5.6049699783325195, -1.6533924341201782], + [3.117541790008545, -4.914891719818115], + [2.6930811405181885, -4.131157398223877], + [2.7211201190948486, -6.825371265411377], + [-4.463209629058838, 4.168034076690674], + [2.0088424682617188, 5.732746124267578], + [2.1207327842712402, 6.00135612487793], + [-2.7059991359710693, -3.0807578563690186], + [-7.00009298324585, -1.3965708017349243], + [-0.2731064558029175, 9.018077850341797], + [-2.5885419845581055, 1.8389586210250854], + [9.609220504760742, -2.6798081398010254], + [3.1865384578704834, -5.019203186035156], + [-6.167335033416748, -1.4112483263015747], + [-4.679011344909668, -3.894549608230591], + [-0.4382508397102356, 10.732124328613281], + [-2.090137243270874, -1.261466145515442], + [-0.3678809404373169, 9.516149520874023], + [-2.1673574447631836, 2.208062171936035], + [0.3129708468914032, -3.7078068256378174], + [0.5955155491828918, 9.664522171020508], + [-0.17944401502609253, 10.47652816772461], + [1.9452662467956543, 3.4485390186309814], + [-2.4595916271209717, 1.732412338256836], + [3.0005593299865723, -4.7996673583984375], + [2.163517475128174, 5.913107872009277], + [-7.8996124267578125, -0.6391851902008057], + [2.9477434158325195, -5.209985733032227], + [-5.047936916351318, -2.9053947925567627], + [2.103048086166382, 5.336091995239258], + [8.533590316772461, -2.4606454372406006], + [-1.5642882585525513, 5.611332893371582], + [-4.086233615875244, 4.353423118591309], + [2.060166597366333, 5.332024097442627], + [1.6887669563293457, 5.7949724197387695], + [-0.4735724925994873, 10.290374755859375], + [-2.540501594543457, 1.9499435424804688], + [-5.01782751083374, -3.206749677658081], + [-1.192845106124878, 5.967562198638916], + [-5.272485733032227, -1.6795815229415894], + [4.280177593231201, -3.2800753116607666], + [1.6874678134918213, 0.2941707372665405], + [-2.4042131900787354, -0.8715065717697144], + [-2.628767251968384, 2.5237162113189697], + [-1.8880460262298584, -0.6140482425689697], + [1.6401283740997314, -8.380578994750977], + [3.091195821762085, -4.757709980010986], + [-1.2362706661224365, 0.6013545393943787], + [-2.0841660499572754, -0.767417311668396], + [2.9927494525909424, -2.4500954151153564], + [4.983994483947754, -0.6262140274047852], + [-1.0819472074508667, -3.39937424659729], + [-5.525432109832764, -1.2920829057693481], + [-0.3465750217437744, 10.985239028930664], + [-5.796292781829834, 8.101877212524414], + [-2.834869146347046, -4.418999671936035], + [-1.6479566097259521, 4.754183769226074], + [3.0272133350372314, -4.56280517578125], + [-2.2344629764556885, -0.5750640630722046], + [2.627030611038208, -3.8199963569641113], + [-2.385464668273926, 1.9724749326705933], + [1.7481316328048706, 4.4095282554626465], + [-3.597885847091675, -3.09511399269104], + [-0.14882564544677734, 10.88731575012207], + [-6.748834133148193, 8.55361270904541], + [-5.115156173706055, -3.043804407119751], + [-2.703113317489624, -0.7276558876037598], + [-5.3907551765441895, 1.2666095495224], + [5.549258708953857, -1.9168763160705566], + [-3.4500372409820557, -2.5994296073913574], + [-0.17691081762313843, 10.231382369995117], + [-6.188633918762207, -1.3046599626541138], + [2.0598771572113037, -3.5997743606567383], + [2.5186851024627686, -3.4518706798553467], + [-8.255636215209961, -1.1566780805587769], + [-3.743159532546997, 5.024420738220215], + [-2.2575507164001465, 3.0386998653411865], + [-2.0311737060546875, 2.376574993133545], + [-5.113785266876221, -4.535233974456787], + [2.6600515842437744, 6.150152206420898], + [3.06052827835083, -4.569313049316406], + [-5.998992443084717, -2.870821714401245], + [-0.10097748786211014, 9.623871803283691], + [-0.017222367227077484, -1.5944828987121582], + [-1.7901885509490967, 1.0113152265548706], + [-0.02447519451379776, -0.441976398229599], + [0.7446174025535583, 0.07576803863048553], + [2.660916566848755, -4.3306074142456055], + [1.9826138019561768, 5.559032440185547], + [-4.393514633178711, -2.8138816356658936], + [2.0605592727661133, -3.5550122261047363], + [-5.152613162994385, -2.898789167404175], + [-1.0789533853530884, 1.5367333889007568], + [-7.401786804199219, 8.97346305847168], + [2.7192506790161133, 6.1302995681762695], + [8.745732307434082, -2.4539899826049805], + [-7.5190749168396, -0.21731197834014893], + [-0.41014283895492554, 8.227754592895508], + [-0.20580440759658813, 10.099637031555176], + [-3.2749834060668945, -4.784311294555664], + [1.28767728805542, 0.8247810006141663], + [2.688533067703247, -3.8826987743377686], + [-1.9136273860931396, 2.0971033573150635], + [5.690036296844482, -0.7969666719436646], + [-0.12144965678453445, 9.843177795410156], + [-2.503727674484253, 1.7477707862854004], + [-2.143414258956909, 1.2981483936309814], + [1.155128836631775, 1.2762449979782104], + [2.0668118000030518, 5.491740703582764], + [2.5840466022491455, -4.242488861083984], + [-0.40118005871772766, 4.189607620239258], + [-2.277230739593506, 2.6787610054016113], + [4.319717884063721, -1.1085611581802368], + [5.22939920425415, 7.784039497375488], + [2.9947359561920166, -4.524302005767822], + [3.405662775039673, 1.0045173168182373], + [3.088392972946167, 5.681027412414551], + [1.3590316772460938, -7.742635726928711], + [7.928617000579834, -1.8991862535476685], + [4.878416538238525, -3.9531848430633545], + [3.1264169216156006, 1.014556646347046], + [-5.6625494956970215, -0.41337352991104126], + [-7.071803569793701, 8.751113891601562], + [-2.4647271633148193, -2.354030132293701], + [-4.269676208496094, 4.4039812088012695], + [-2.2464873790740967, 1.4209171533584595], + [-2.4051566123962402, 1.50554358959198], + [2.7061688899993896, 0.7312039136886597], + [-7.746744632720947, 9.755640029907227], + [9.136836051940918, -2.565513849258423], + [3.206350803375244, -3.111922264099121], + [-5.024756908416748, -1.5311570167541504], + [2.7303481101989746, -4.128121376037598], + [-6.786502361297607, -1.3739196062088013], + [-4.129188537597656, -2.6330723762512207], + [-0.5803893804550171, 9.886999130249023], + [-3.17270565032959, 4.87652587890625], + [-4.144841194152832, -2.435652017593384], + [-5.1976847648620605, 1.289876103401184], + [-7.456780433654785, -0.8435410857200623], + [-3.3920481204986572, 6.858496189117432], + [-5.948322772979736, 3.2755305767059326], + [2.568331718444824, -7.115255355834961], + [-4.090729713439941, -2.2473337650299072], + [6.304858684539795, -5.470952987670898], + [7.97865629196167, -1.9682366847991943], + [3.2002480030059814, -4.7906999588012695], + [-5.563704013824463, 4.3354034423828125], + [-2.2886314392089844, 2.35644793510437], + [-2.3176891803741455, 2.3168654441833496], + [-4.057112693786621, -3.685295581817627], + [1.0234885215759277, -6.071600914001465], + [-4.3301472663879395, -2.6737399101257324], + [-0.5214444398880005, 9.453807830810547], + [8.336174964904785, -2.2144699096679688], + [-0.2596604824066162, 10.301408767700195], + [-5.89149808883667, 1.5397459268569946], + [-2.5282557010650635, -0.7045867443084717], + [-4.807897090911865, -7.335993766784668], + [-3.039870023727417, -3.818164587020874], + [-3.15447998046875, -1.5394119024276733], + [-4.972973346710205, 5.7985005378723145], + [-4.9442667961120605, -3.440856695175171], + [-6.426480770111084, 8.410221099853516], + [1.5992774963378906, -3.19001841545105], + [2.0047285556793213, -4.013988494873047], + [-4.963103771209717, 5.380702972412109], + [-7.531917095184326, -0.5875173807144165], + [1.1810224056243896, 1.0465185642242432], + [-0.4329257011413574, 10.013744354248047], + [3.8602097034454346, 1.379153847694397], + [-1.2675482034683228, -2.6527130603790283], + [-0.2869133949279785, 5.184077262878418], + [-2.854595422744751, 3.773193597793579], + [8.467757225036621, -2.2099733352661133], + [-7.440152645111084, 9.092621803283691], + [-2.242197275161743, 2.039999485015869], + [-1.4745118618011475, 6.140194892883301], + [-4.998654842376709, 1.992322564125061], + [6.767270565032959, -4.195950984954834], + [-0.23030823469161987, 11.015573501586914], + [-5.161882400512695, 3.2878592014312744], + [3.303392171859741, -4.927043914794922], + [-0.6571802496910095, 8.7103271484375], + [5.507625102996826, -1.2081571817398071], + [3.353123664855957, 1.285056233406067], + [-5.416272163391113, 1.8773491382598877], + [9.696561813354492, -2.7144625186920166], + [1.639188528060913, -9.03121280670166], + [-6.044281005859375, -0.5885706543922424], + [8.9233980178833, -2.562330484390259], + [-5.631659984588623, 4.5360307693481445], + [4.183984279632568, -0.11111898720264435], + [2.540996789932251, -5.785043239593506], + [-7.178138732910156, 3.7580909729003906], + [-3.1144022941589355, 6.1177144050598145], + [2.057631492614746, -3.7631304264068604], + [-4.489340305328369, -2.311203718185425], + [-5.108574390411377, 1.4800792932510376], + [-1.1855709552764893, 8.798652648925781], + [2.196413040161133, -4.56759786605835], + [-0.18584170937538147, -0.6895425319671631], + [3.2643210887908936, 6.193072319030762], + [1.1132152080535889, -6.056522846221924], + [2.498424768447876, -7.5869669914245605], + [-1.2005964517593384, 4.976268291473389], + [-0.5087687373161316, 10.096403121948242], + [2.6154472827911377, -5.417788505554199], + [-6.160650730133057, 2.7595767974853516], + [2.947131872177124, 5.986332416534424], + [4.2883734703063965, 7.085688591003418], + [2.147780418395996, 0.7760854363441467], + [-0.15409904718399048, 9.87674617767334], + [-4.523256301879883, -1.5824087858200073], + [-7.4318437576293945, -1.316552758216858], + [-0.387972891330719, 10.949296951293945], + [-3.3756766319274902, 6.808452606201172], + [0.2222500443458557, 9.199081420898438], + [6.823693752288818, -1.7955998182296753], + [1.624140739440918, 5.938302516937256], + [-5.2457756996154785, -1.8090391159057617], + [6.584488391876221, -1.360772728919983], + [2.301048517227173, 4.590015411376953], + [-2.7728629112243652, -0.8961554765701294], + [-4.870274543762207, 3.717832326889038], + [0.47039252519607544, 5.403928756713867], + [3.1127450466156006, -4.662821292877197], + [-7.334892749786377, 9.202234268188477], + [-2.9247982501983643, 4.589417457580566], + [-3.597151517868042, -3.2609875202178955], + [-4.621675968170166, 0.7693066000938416], + [1.0675554275512695, -5.665946960449219], + [2.988407850265503, -4.491392135620117], + [-5.086846828460693, -1.767427682876587], + [-5.789515018463135, 6.959134101867676], + [6.070343494415283, -1.252415418624878], + [1.2099206447601318, -5.4923481941223145], + [-1.526872992515564, 1.0527915954589844], + [1.4952284097671509, -7.027629852294922], + [-0.42678719758987427, 9.73341178894043], + [-0.9663066267967224, -2.289062976837158], + [-3.5719988346099854, -4.647150039672852], + [-5.355212211608887, -3.287102699279785], + [4.493210315704346, -1.092955470085144], + [0.3555227518081665, 5.264142990112305], + [-3.3117449283599854, -2.6771037578582764], + [2.6198110580444336, 5.945707321166992], + [-3.573664903640747, -1.070237636566162], + [-3.0923781394958496, -1.7195097208023071], + [-4.63176965713501, -4.075963020324707], + [-2.6393589973449707, 2.2951302528381348], + [-0.29614967107772827, 11.028331756591797], + [1.2403895854949951, 5.489416122436523], + [4.7242631912231445, -0.9637988805770874], + [-4.946782112121582, -2.1710870265960693], + [-0.1939157247543335, 9.527201652526855], + [1.5919418334960938, -7.8332719802856445], + [0.9134252071380615, -6.434596538543701], + [3.219716787338257, -5.04530143737793], + [2.397049903869629, -3.5982625484466553], + [0.23420321941375732, -1.2699812650680542], + [2.9789140224456787, -4.475553512573242], + [-2.6193928718566895, -3.885373830795288], + [-3.4310061931610107, 2.160688638687134], + [-4.265669822692871, -1.2648407220840454], + [-6.501802921295166, -0.5961495041847229], + [-4.797421932220459, -3.6214826107025146], + [-4.84871244430542, 2.2457616329193115], + [5.789267539978027, -1.2446551322937012], + [-6.7128520011901855, 8.815181732177734], + [-1.9891692399978638, -0.18359103798866272], + [-4.996128559112549, -2.0789709091186523], + [-0.3033590316772461, 9.54620361328125], + [2.7646069526672363, -4.224809646606445], + [-4.681241989135742, 4.012318134307861], + [7.307020664215088, -1.7786163091659546], + [-2.058882713317871, 2.5365307331085205], + [-5.65883207321167, 5.388818740844727], + [-5.276164531707764, -1.1195913553237915], + [3.0870041847229004, -4.634328842163086], + [-2.6988980770111084, 5.906659126281738], + [7.512699604034424, -2.1847689151763916], + [-3.3000075817108154, -0.7192641496658325], + [-2.8125967979431152, -0.01756066456437111], + [-2.7088229656219482, -4.472116470336914], + [2.1505067348480225, 5.947223663330078], + [2.171077013015747, -9.955252647399902], + [1.7827244997024536, 5.261018753051758], + [-6.666017055511475, -2.040011405944824], + [-0.10123497992753983, 9.709256172180176], + [-6.077429294586182, -0.025867585092782974], + [2.9462296962738037, -4.464973449707031], + [-4.093113422393799, 6.294580459594727], + [-2.727001905441284, 5.324418067932129], + [6.7795796394348145, -3.8489086627960205], + [-2.136622190475464, 2.9500739574432373], + [2.7573840618133545, -4.198057174682617], + [3.037013530731201, -4.561115741729736], + [1.2823665142059326, -6.915896415710449], + [-4.8995466232299805, 3.2474777698516846], + [-2.50494647026062, 1.9880012273788452], + [-6.048680782318115, -1.9205859899520874], + [-0.1737210750579834, 7.851303577423096], + [0.07513373345136642, 11.238678932189941], + [2.141592025756836, 5.503303527832031], + [-5.288071632385254, -4.065898895263672], + [2.1182126998901367, -4.02896785736084], + [-2.08735990524292, 2.454148530960083], + [-3.0459303855895996, 3.1014089584350586], + [0.6044437289237976, 5.297052383422852], + [0.36272957921028137, -0.4080945551395416], + [-2.26137375831604, 1.4304040670394897], + [-2.2418158054351807, 1.0032620429992676], + [2.597045660018921, -4.039194583892822], + [-2.2617175579071045, 2.1627724170684814], + [-3.921501874923706, -2.974050521850586], + [-3.9241912364959717, -1.7353181838989258], + [-1.6356109380722046, 2.2263553142547607], + [5.2821831703186035, 7.4732770919799805], + [-6.502788066864014, 8.026678085327148], + [5.961316108703613, 7.949736595153809], + [-5.837035179138184, 3.9198639392852783], + [-0.41293737292289734, -1.2663108110427856], + [3.0776355266571045, -4.613628387451172], + [9.375517845153809, -2.6041882038116455], + [1.9648520946502686, 5.5363240242004395], + [7.734043598175049, -2.0805461406707764], + [-3.7583134174346924, 4.6307830810546875], + [2.693418502807617, 4.525594711303711], + [-0.12549865245819092, -1.1623681783676147], + [2.650681495666504, -4.607394695281982], + [0.46433162689208984, -0.3610227406024933], + [-0.13287240266799927, 9.86895751953125], + [-5.418642520904541, -2.1539251804351807], + [-6.3154778480529785, -1.2434293031692505], + [3.0104434490203857, -4.73701810836792], + [-5.515567302703857, 3.7874343395233154], + [2.0455081462860107, -4.037199020385742], + [-6.002808094024658, 8.282621383666992], + [-2.600539445877075, -2.615502119064331], + [-3.471489667892456, 5.689248561859131], + [-4.670260906219482, -4.409444808959961], + [-4.5572028160095215, 4.209340572357178], + [-5.248710632324219, 5.715732574462891], + [1.2227425575256348, -8.178548812866211], + [1.840017318725586, -3.5869531631469727], + [-4.953010559082031, 2.3729138374328613], + [-5.203845977783203, -1.858859896659851], + [2.0864291191101074, 5.631473064422607], + [-1.690442442893982, 0.15564799308776855], + [3.296196937561035, -5.1739654541015625], + [2.9852728843688965, -4.562290191650391], + [2.039130210876465, 5.446427345275879], + [8.538405418395996, -2.2300808429718018], + [1.273360013961792, 4.509903907775879], + [9.41164493560791, -2.621229887008667], + [-5.068502902984619, -4.0797200202941895], + [1.634570837020874, 4.66563081741333], + [-3.488554000854492, 5.453774929046631], + [-5.009929656982422, -3.010230779647827], + [-2.1984505653381348, 2.0747463703155518], + [-0.21076864004135132, 10.659002304077148], + [-4.685653209686279, 5.7429351806640625], + [-2.485321521759033, 3.6439082622528076], + [6.293333530426025, -2.1463093757629395], + [-4.129328727722168, -2.1750972270965576], + [-5.0590386390686035, -3.7180988788604736], + [-5.0799560546875, -1.7741914987564087], + [1.1547958850860596, 5.4971723556518555], + [-2.1927270889282227, 0.8247007131576538], + [-8.315264701843262, -1.2040269374847412], + [-0.8271275162696838, 8.896489143371582], + [-2.9484589099884033, -1.7699660062789917], + [2.7518303394317627, 1.4443459510803223], + [-4.559101581573486, -3.5393924713134766], + [0.16953125596046448, 4.708178520202637], + [-5.328335285186768, 2.239656925201416], + [1.9763109683990479, -5.945499897003174], + [-5.384654521942139, -2.761878728866577], + [1.888962745666504, -7.279308319091797], + [3.187037706375122, -4.770287036895752], + [-4.223078727722168, 6.171350479125977], + [-0.6285728216171265, -1.8821319341659546], + [-5.149720668792725, 3.991597890853882], + [-3.7675063610076904, 0.706790566444397], + [-2.255795478820801, 1.3808000087738037], + [-0.1716088056564331, 9.599438667297363], + [-4.364027500152588, -2.0408480167388916], + [2.3610353469848633, -3.9539058208465576], + [-5.4845380783081055, -4.1525797843933105], + [-2.5891621112823486, -2.308016061782837], + [-4.381219863891602, 1.4331902265548706], + [2.891422986984253, -4.6807861328125], + [3.0648655891418457, -4.5987868309021], + [-4.876724720001221, 4.897841453552246], + [-4.1455302238464355, -1.7356677055358887], + [3.1818325519561768, -4.766760349273682], + [-4.865073204040527, 2.8821492195129395], + [8.800711631774902, -2.3811490535736084], + [-4.240442752838135, -5.376910209655762], + [-1.137088418006897, -0.5370500683784485], + [-5.7494587898254395, -2.4209401607513428], + [3.1227762699127197, -5.116445541381836], + [-6.365919589996338, 8.037120819091797], + [-3.2196011543273926, 2.8418190479278564], + [-8.831093788146973, -0.5549560785293579], + [-6.1520795822143555, -1.3351119756698608], + [-8.344725608825684, -1.0632551908493042], + [-0.3201759457588196, 11.013002395629883], + [-6.8382887840271, -1.2996857166290283], + [2.784566640853882, -2.606844425201416], + [7.097580432891846, -3.106721878051758], + [-6.15753173828125, -2.6876351833343506], + [2.52540922164917, -4.372596740722656], + [6.879948139190674, -1.9190764427185059], + [2.821059226989746, -4.438146591186523], + [-7.0061936378479, -1.0140817165374756], + [1.687575101852417, 5.015369415283203], + [9.795708656311035, -2.7522051334381104], + [-5.341369152069092, 5.494930744171143], + [0.7373336553573608, -0.2027389109134674], + [-2.0467662811279297, 6.094001770019531], + [-5.481246471405029, -2.900968313217163], + [-5.798964977264404, -2.693646192550659], + [-5.618463516235352, -3.8878695964813232], + [-2.938131093978882, 2.903188943862915], + [-2.8589231967926025, -1.6086361408233643], + [1.7558636665344238, 3.7780396938323975], + [2.181654930114746, -8.261940002441406], + [-0.18713146448135376, 10.192638397216797], + [-0.8893623948097229, -0.6513893604278564], + [-0.15409201383590698, 9.53605842590332], + [-0.5349764227867126, 10.078217506408691], + [2.9308183193206787, -4.423648357391357], + [-2.8857171535491943, -4.742749214172363], + [-3.3442585468292236, 5.418686389923096], + [-1.77439546585083, 0.7618988752365112], + [-5.846606254577637, -2.686323404312134], + [-6.577455997467041, 6.760869026184082], + [-4.023981094360352, 6.447453498840332], + [2.724963903427124, -4.157660961151123], + [-4.671972751617432, -4.8888702392578125], + [-2.5527775287628174, -4.170670986175537], + [-4.950424671173096, -1.4827579259872437], + [-4.9051289558410645, -4.124176979064941], + [-4.235024452209473, -0.046045366674661636], + [-5.25238037109375, -3.2715752124786377], + [-4.437489032745361, 7.845738410949707], + [-3.8775475025177, -3.111318349838257], + [-3.161226272583008, 6.424591064453125], + [0.3973555564880371, -0.15905332565307617], + [10.01270580291748, -2.78161883354187], + [6.504169940948486, -4.508233070373535], + [2.704157590866089, -3.8661863803863525], + [7.851426601409912, -3.763279914855957], + [-4.16858434677124, -2.3685648441314697], + [0.37746262550354004, 5.483027458190918], + [-0.06223989278078079, 10.257447242736816], + [2.199431896209717, -9.860161781311035], + [-5.962128162384033, 1.7362948656082153], + [-0.5942628383636475, 9.5988187789917], + [-2.9405722618103027, -2.197474479675293], + [-5.88589334487915, 2.008650779724121], + [1.0012953281402588, -6.498520374298096], + [-5.815152168273926, -2.5584256649017334], + [-4.310031414031982, -2.9278523921966553], + [-2.1723239421844482, 2.254157543182373], + [2.427480459213257, -11.461878776550293], + [-0.3085267245769501, -0.6891183257102966], + [-2.3436033725738525, -0.38791894912719727], + [-4.935185432434082, -2.6935012340545654], + [2.496624231338501, -8.751995086669922], + [-6.669243812561035, 8.156879425048828], + [-4.90000581741333, -2.9263193607330322], + [0.5260125398635864, 4.790642738342285], + [-2.240753650665283, 0.06476294994354248], + [-3.999856948852539, -2.7276575565338135], + [-1.709794521331787, 2.264920711517334], + [-1.4920036792755127, 2.9111905097961426], + [-4.990540027618408, 2.385230541229248], + [1.4026880264282227, -7.002083778381348], + [-2.4659414291381836, 1.708152413368225], + [-0.10456890612840652, 9.303157806396484], + [8.283183097839355, -2.0740959644317627], + [-5.001946926116943, -2.164527654647827], + [-1.5805824995040894, 1.5918755531311035], + [1.5663249492645264, 4.70150899887085], + [1.0338642597198486, -5.323894023895264], + [-2.216805934906006, 2.7118990421295166], + [-5.067734241485596, -1.7590090036392212], + [-4.100241184234619, 6.599040985107422], + [-6.680675983428955, 3.5844836235046387], + [-5.203793048858643, -3.5676207542419434], + [-2.0833592414855957, 5.749389171600342], + [8.221909523010254, -2.264376401901245], + [-0.8433269262313843, -2.468073606491089], + [0.21486753225326538, -5.0338969230651855], + [-7.710708141326904, -1.3775721788406372], + [0.7711890339851379, 8.552165031433105], + [3.3470420837402344, 6.337695121765137], + [0.8805221915245056, 0.5528729557991028], + [0.21313238143920898, -5.116213321685791], + [-6.032664775848389, 7.073970794677734], + [-4.076138973236084, 2.9740805625915527], + [-1.1060611009597778, 4.760096549987793], + [-0.3088719844818115, 9.781526565551758], + [3.2099056243896484, -5.155083656311035], + [-2.7862985134124756, 2.54316782951355], + [-6.045935153961182, -0.8613468408584595], + [5.386824131011963, -4.4505534172058105], + [1.3619881868362427, 5.182292938232422], + [-2.906928300857544, -3.1173484325408936], + [-5.1987409591674805, -3.2252960205078125], + [-3.6133735179901123, -3.033040761947632], + [-5.877976417541504, -2.7346792221069336], + [2.974268674850464, -4.793292999267578], + [2.1448094844818115, 5.570456504821777], + [2.529442310333252, -4.207677364349365], + [-6.4886345863342285, -1.102843999862671], + [-5.839723587036133, -1.7389765977859497], + [-2.2318785190582275, -2.7612643241882324], + [3.3545329570770264, -5.47369384765625], + [1.4124337434768677, 9.501260757446289], + [-0.6725056171417236, 5.925469875335693], + [6.451598167419434, -1.9274325370788574], + [-5.256033420562744, -3.399860382080078], + [2.871875762939453, 6.043056011199951], + [4.021827220916748, -0.08291220664978027], + [6.848545551300049, -4.509093284606934], + [7.900355339050293, -2.2583978176116943], + [-4.009528160095215, -3.543487787246704], + [2.8263862133026123, 7.028510093688965], + [2.2970776557922363, -3.519824266433716], + [7.564098834991455, -2.182123899459839], + [1.9481866359710693, 5.076111316680908], + [1.7687088251113892, -7.976013660430908], + [3.386251926422119, 6.486598968505859], + [-7.129334926605225, -1.140563726425171], + [0.13410890102386475, 6.269039154052734], + [-0.6365715861320496, 8.603419303894043], + [1.5856915712356567, -6.37810754776001], + [-0.16786056756973267, 5.000776767730713], + [2.6813323497772217, -0.7269171476364136], + [-5.402876377105713, -2.943856954574585], + [-5.3758931159973145, -2.9262969493865967], + [-0.3276638984680176, 9.635254859924316], + [8.816384315490723, -2.55511736869812], + [5.695311069488525, -5.367217063903809], + [-5.4216628074646, 3.8368330001831055], + [5.67354154586792, 7.3098931312561035], + [-3.1993765830993652, 6.815064430236816], + [4.592728614807129, 6.8194122314453125], + [-6.0311760902404785, -1.8605012893676758], + [-4.655404567718506, 4.4369001388549805], + [-4.2921037673950195, -4.079736232757568], + [5.30019474029541, -1.2319351434707642], + [5.1368727684021, 7.293346881866455], + [-2.2924511432647705, 1.312416672706604], + [-4.229147434234619, 5.63840913772583], + [0.8777320384979248, 0.03984862193465233], + [8.909214973449707, -2.568251371383667], + [-3.893028497695923, 5.749850749969482], + [1.7849977016448975, 5.340656757354736], + [1.4083960056304932, 0.01954544708132744], + [-5.505751132965088, -3.625467300415039], + [2.6529250144958496, -4.109424114227295], + [3.0923545360565186, -4.633320331573486], + [-5.553678512573242, 7.516983985900879], + [-0.3286309838294983, 9.030243873596191], + [-2.5999395847320557, 2.357414484024048], + [-0.36167752742767334, 11.265470504760742], + [3.0372281074523926, -4.653579235076904], + [6.240016937255859, -2.203003168106079], + [5.953625679016113, -1.646612524986267], + [-4.568765163421631, -2.948370933532715], + [-3.940782308578491, 4.42540168762207], + [8.665627479553223, -2.599090814590454], + [-5.414936542510986, -5.206997871398926], + [3.192650079727173, -5.04157829284668], + [-6.773333549499512, 8.377374649047852], + [-6.79298210144043, 8.6257963180542], + [1.223880648612976, -2.9584734439849854], + [2.5139143466949463, 0.9304778575897217], + [-4.001372814178467, -1.9716533422470093], + [-0.33384495973587036, 11.323575973510742], + [-7.0003743171691895, 8.67988395690918], + [9.11884880065918, -2.556762456893921], + [-4.149531841278076, -1.958757996559143], + [-1.322462797164917, 0.08529821038246155], + [-4.426162242889404, -3.2100472450256348], + [2.520397424697876, -4.20890474319458], + [-6.2209625244140625, -1.0519428253173828], + [3.321169137954712, 1.0524457693099976], + [-5.839893817901611, -0.04849887266755104], + [2.680316686630249, -4.488182067871094], + [1.6629853248596191, -8.99051284790039], + [-0.4867231845855713, 10.063884735107422], + [-5.120284557342529, -1.939663052558899], + [-2.3066983222961426, 2.3844594955444336], + [-0.8168467879295349, 1.5161564350128174], + [4.108773231506348, 6.443059921264648], + [-4.7916975021362305, 6.27724027633667], + [-4.247763633728027, -2.066720724105835], + [-4.641129970550537, -5.807015419006348], + [2.7818453311920166, -5.789057731628418], + [2.413221836090088, 5.981754779815674], + [-6.001405239105225, 7.3392438888549805], + [-2.3996853828430176, 1.1765331029891968], + [-0.41877251863479614, 9.388288497924805], + [-2.0505990982055664, 2.627220630645752], + [4.741743564605713, -1.0433998107910156], + [2.1194283962249756, -8.450702667236328], + [2.172132730484009, -9.395193099975586], + [2.343397855758667, -4.0063652992248535], + [2.228614091873169, 1.6319023370742798], + [-2.5034077167510986, 1.618399739265442], + [1.4284276962280273, 1.8380604982376099], + [-2.2138211727142334, 2.8700172901153564], + [3.2049612998962402, -5.075277328491211], + [4.219446182250977, 6.110767364501953], + [1.0911786556243896, 0.3798019289970398], + [9.617989540100098, -2.6838619709014893], + [2.8682057857513428, -3.2711336612701416], + [2.5337717533111572, 5.851922035217285], + [-1.1853959560394287, -2.0448696613311768], + [2.5148918628692627, 5.886361122131348], + [-0.39249688386917114, 11.12263298034668], + [-6.3209662437438965, -1.496845006942749], + [1.8120914697647095, -7.455456256866455], + [-5.486725330352783, -3.018873929977417], + [-6.196699142456055, -2.192042589187622], + [6.552635192871094, -4.456179141998291], + [2.139500379562378, 5.913678169250488], + [-0.31459927558898926, 11.189589500427246], + [-0.1796574592590332, 9.035290718078613], + [-4.185794353485107, -1.3566654920578003], + [-7.355686664581299, 1.5728226900100708], + [-3.5958616733551025, -2.937520742416382], + [-4.435131072998047, -2.35306715965271], + [-8.478545188903809, -1.0305308103561401], + [-5.960745334625244, 7.794138431549072], + [-0.3598114848136902, 10.97304630279541], + [2.247149705886841, -3.8690028190612793], + [-4.411322593688965, 7.689153671264648], + [6.182320594787598, -5.507169246673584], + [2.8839833736419678, -4.370079517364502], + [-6.690539836883545, 8.096599578857422], + [0.9095921516418457, -0.1820998191833496], + [-4.840794563293457, 3.852271795272827], + [-7.485668659210205, 9.262829780578613], + [2.5166990756988525, -3.796452760696411], + [-5.890408992767334, -2.2721469402313232], + [-6.384811878204346, 8.384265899658203], + [-6.57064962387085, 1.7909268140792847], + [-0.2928087115287781, 11.278331756591797], + [-4.576467990875244, -2.0897374153137207], + [-2.9209651947021484, 2.0325143337249756], + [10.057892799377441, -2.804922103881836], + [4.556634426116943, -1.7481942176818848], + [-0.5253041982650757, 11.170188903808594], + [3.3063511848449707, -4.980216026306152], + [-4.1991868019104, 5.454837799072266], + [-0.8041572570800781, 8.79549789428711], + [1.4477633237838745, -3.3200180530548096], + [-0.6650603413581848, -0.6735117435455322], + [-0.41369539499282837, 8.923065185546875], + [-6.147270202636719, 7.238763809204102], + [-4.3888373374938965, 5.922089576721191], + [2.8833887577056885, -4.694925308227539], + [-2.5316267013549805, 0.7969294786453247], + [-4.770514965057373, 4.471320152282715], + [2.758465528488159, -4.576830863952637], + [-3.3413615226745605, 6.045281887054443], + [-4.570011615753174, -1.0143866539001465], + [-4.020806789398193, -1.0392519235610962], + [9.57343864440918, -2.649714469909668], + [-5.102391242980957, -1.4247585535049438], + [-4.380617618560791, -2.135236978530884], + [-4.00693416595459, 3.767282247543335], + [-5.089354991912842, 3.6944310665130615], + [4.500808238983154, -5.577383041381836], + [-2.4745256900787354, 6.205602169036865], + [-2.508192777633667, -1.6147838830947876], + [8.009675025939941, -2.205590009689331], + [-2.4747250080108643, 1.5988695621490479], + [-0.4534626007080078, 9.293668746948242], + [-0.8223201632499695, -1.7250396013259888], + [1.7747260332107544, 4.9838972091674805], + [-5.542185306549072, 7.22157096862793], + [-2.079301357269287, 2.6397900581359863], + [-4.536602973937988, -2.3234074115753174], + [-6.585710525512695, 8.03254222869873], + [-4.891660213470459, -1.349912166595459], + [1.9539268016815186, -9.11307430267334], + [-3.341334581375122, 5.858267307281494], + [-6.633754730224609, -1.832047700881958], + [-5.271334648132324, -3.1260743141174316], + [2.54197096824646, -3.895066499710083], + [10.269652366638184, -2.8437585830688477], + [4.01289701461792, -1.1980961561203003], + [-2.372847557067871, 0.5676897764205933], + [-4.506784915924072, -5.993490219116211], + [8.489485740661621, -2.3676962852478027], + [7.437440395355225, -1.9846253395080566], + [-2.4762556552886963, 1.8456705808639526], + [7.3746514320373535, -1.7588070631027222], + [1.8485300540924072, 5.680903434753418], + [2.0541470050811768, -6.888753890991211], + [-5.793403625488281, 8.197635650634766], + [-4.620448112487793, -3.762610673904419], + [-7.698200702667236, -1.417214274406433], + [-5.160436153411865, -2.1858532428741455], + [-0.16503018140792847, 9.881711959838867], + [-4.703210830688477, -6.010142803192139], + [-0.19380760192871094, 9.850780487060547], + [3.1159918308258057, -4.90943717956543], + [-7.139216899871826, -2.289639949798584], + [3.244035482406616, -5.213085174560547], + [3.7071080207824707, -3.7604808807373047], + [-4.7033820152282715, -4.55018949508667], + [-6.573363780975342, 8.043550491333008], + [4.483716011047363, -2.8354876041412354], + [4.8822855949401855, -1.3238219022750854], + [-5.3129706382751465, -1.9630953073501587], + [3.050076961517334, -4.884506702423096], + [-4.1124067306518555, -1.2672984600067139], + [-0.30331671237945557, 9.54189682006836], + [2.8362374305725098, -4.27654504776001], + [2.107966184616089, -5.202823162078857], + [-2.4818570613861084, 1.395602822303772], + [-0.9955859780311584, -1.2535887956619263], + [2.9678056240081787, -4.470370769500732], + [-0.28991883993148804, 9.802481651306152], + [-0.11516835540533066, -1.2236685752868652], + [-2.429229497909546, 1.6215728521347046], + [2.7802999019622803, -4.379304885864258], + [0.8648375868797302, -0.0840018093585968], + [7.893377780914307, -1.7829034328460693], + [-5.102574825286865, -3.608638048171997], + [2.506476640701294, -3.827162742614746], + [6.622769832611084, -1.2654550075531006], + [-3.262871026992798, -1.8737083673477173], + [2.120135545730591, 5.596860885620117], + [-6.025624752044678, 7.1270647048950195], + [-4.7029547691345215, -2.631024122238159], + [6.247481822967529, -0.4861733317375183], + [0.681517481803894, -5.821017265319824], + [-0.7520785331726074, -0.9339235424995422], + [3.0182037353515625, -5.944183826446533], + [2.747450351715088, 0.9840960502624512], + [0.6068708300590515, -0.4712797999382019], + [-7.2019524574279785, -1.084396243095398], + [1.977184534072876, -3.6526119709014893], + [-6.589867115020752, 0.9498898386955261], + [0.8574274182319641, -5.790997505187988], + [6.330887317657471, -1.828501582145691], + [-4.684718132019043, -4.019268035888672], + [4.5073981285095215, 6.793769836425781], + [-7.580081462860107, -1.3121627569198608], + [-0.762258768081665, 9.466511726379395], + [-5.381938457489014, -3.5930302143096924], + [0.6894574761390686, 0.1359131932258606], + [-3.903531312942505, -2.5530431270599365], + [8.999651908874512, -2.529935598373413], + [1.688385248184204, 0.4055387079715729], + [-1.4913146495819092, 6.24364709854126], + [-2.2007651329040527, 2.642915725708008], + [-8.160917282104492, -1.497968077659607], + [2.555755853652954, -3.8397414684295654], + [-5.366534233093262, 1.9765344858169556], + [2.386312246322632, 6.185274124145508], + [-5.9463043212890625, -1.23959219455719], + [-2.28886079788208, 1.908628225326538], + [-5.746707916259766, 1.068734884262085], + [-2.4781956672668457, -1.9500840902328491], + [-2.109675884246826, 5.392197608947754], + [-3.306741952896118, -1.8542834520339966], + [-5.424434661865234, -2.0801095962524414], + [5.973331451416016, -2.308583974838257], + [-0.39183497428894043, 9.431065559387207], + [3.209912061691284, -4.841752052307129], + [3.0328447818756104, -4.555329322814941], + [-5.521965503692627, -1.9256843328475952], + [2.0289528369903564, -2.410482168197632], + [-8.143155097961426, -1.580093502998352], + [-5.921895503997803, -1.3917371034622192], + [-5.428368091583252, -1.7528419494628906], + [-0.010137982666492462, 10.604307174682617], + [2.5800931453704834, -6.2055158615112305], + [1.4341195821762085, -6.860113143920898], + [-2.6771533489227295, 1.41905677318573], + [3.4188263416290283, -4.35173225402832], + [2.563586950302124, -3.9157297611236572], + [0.7493569254875183, -7.016905784606934], + [-4.520654201507568, -4.000553131103516], + [1.9327280521392822, -5.410181045532227], + [5.859513759613037, -1.2878919839859009], + [-3.8302018642425537, -2.246170997619629], + [3.349677085876465, -5.372274875640869], + [-1.5922768115997314, -1.746393084526062], + [1.6178808212280273, 5.869295120239258], + [-3.474644660949707, -1.3341166973114014], + [-3.772911310195923, -2.654855489730835], + [-5.409871578216553, 1.8116804361343384], + [1.7898838520050049, -8.645082473754883], + [-0.006101824343204498, 0.555526614189148], + [0.08601256459951401, -1.148215413093567], + [2.9512927532196045, -4.541026592254639], + [1.6341561079025269, 5.447460651397705], + [-1.1756834983825684, 3.530766248703003], + [9.138092994689941, -2.6988461017608643], + [1.0773608684539795, -7.489863872528076], + [1.5732617378234863, -7.339694023132324], + [-0.2604671120643616, 10.64525032043457], + [-3.717641830444336, -2.4589717388153076], + [-4.343129634857178, 4.993195533752441], + [-4.445979595184326, -1.6471796035766602], + [-5.596991062164307, 1.4269591569900513], + [3.0504050254821777, -4.588525772094727], + [2.6228153705596924, -4.029111862182617], + [-6.213158130645752, 6.323622703552246], + [2.158158302307129, -6.007547378540039], + [-4.543206691741943, -2.27811598777771], + [-4.624960899353027, -3.820049285888672], + [-0.2069604992866516, 9.742953300476074], + [2.6210336685180664, 5.8631439208984375], + [0.33595550060272217, -0.3212072253227234], + [-5.0135273933410645, 4.119084358215332], + [-4.244974136352539, -0.39495497941970825], + [-4.375216960906982, -2.705479383468628], + [-2.4198367595672607, 2.063617467880249], + [2.32698655128479, -7.009753227233887], + [-0.48187708854675293, 11.227046966552734], + [-4.610332012176514, -3.1298725605010986], + [2.220693349838257, -6.534667015075684], + [-5.526086330413818, 1.0771092176437378], + [-4.711496353149414, 5.515068054199219], + [0.8278865218162537, 5.5596699714660645], + [5.013663291931152, -0.2534060776233673], + [2.2076098918914795, 0.3874916136264801], + [8.174195289611816, -2.6662797927856445], + [-5.847840785980225, 8.202535629272461], + [-1.5860230922698975, 1.1527070999145508], + [-5.967562675476074, 7.070140838623047], + [-4.744805335998535, -4.350859642028809], + [3.8308088779449463, -3.3141748905181885], + [-6.3533244132995605, -2.3385050296783447], + [-6.02913236618042, 6.899503231048584], + [-2.8625786304473877, -2.3026793003082275], + [-2.083869218826294, 2.7252280712127686], + [-5.413781642913818, 2.069828748703003], + [-6.261218070983887, -1.3566526174545288], + [-2.1306703090667725, 2.3703999519348145], + [3.1546106338500977, -5.055387020111084], + [9.315959930419922, -2.595560073852539], + [8.8881196975708, -2.378532648086548], + [-0.17644137144088745, 9.151790618896484], + [1.0423898696899414, -6.107644081115723], + [-4.788684844970703, 2.5773746967315674], + [2.2492411136627197, 5.819696426391602], + [-0.42147547006607056, -1.476001501083374], + [-2.671668767929077, 0.2971866726875305], + [-4.05971097946167, -2.67573618888855], + [-0.31915199756622314, 9.870838165283203], + [-3.276207685470581, -2.6010334491729736], + [-0.8195754885673523, -0.7417902946472168], + [-2.0836455821990967, 1.8701891899108887], + [-0.5995493531227112, -3.9733216762542725], + [-5.026572227478027, -3.210073232650757], + [-5.608513832092285, 7.857190132141113], + [0.5368909239768982, -5.546841621398926], + [-0.23628538846969604, 10.073875427246094], + [4.486775875091553, -3.523845911026001], + [1.903799295425415, 2.0862629413604736], + [-4.949170112609863, -2.5851590633392334], + [6.07185697555542, 7.4972333908081055], + [1.66172194480896, -4.941004753112793], + [-5.858666896820068, 2.837085247039795], + [8.263097763061523, -2.195394992828369], + [-6.72307014465332, 8.133363723754883], + [-3.82381534576416, -1.3643161058425903], + [0.2520015239715576, 9.638025283813477], + [-2.4203059673309326, 0.3674581050872803], + [5.7470479011535645, -4.789755821228027], + [-0.5896337628364563, 9.233160018920898], + [-5.812406063079834, -3.0946452617645264], + [-5.163918495178223, 5.748809814453125], + [-4.700120449066162, -0.678747832775116], + [-2.1381497383117676, 1.7719920873641968], + [-0.2049608826637268, 9.646332740783691], + [-2.2428290843963623, 0.39917951822280884], + [-0.285958468914032, 9.46609115600586], + [9.026503562927246, -2.4072959423065186], + [-2.627676010131836, 2.4555437564849854], + [3.203333616256714, -4.809704780578613], + [-2.213001012802124, 1.936671495437622], + [1.1173781156539917, -6.046720504760742], + [-2.6371490955352783, 2.38337779045105], + [3.041198253631592, -4.575099945068359], + [-7.001607418060303, 3.457603693008423], + [-0.34636420011520386, -0.5902702212333679], + [2.122898817062378, -3.3836894035339355], + [-2.1817831993103027, 1.5959455966949463], + [-5.54623556137085, 5.6598896980285645], + [-3.363358736038208, -2.587409257888794], + [-2.0625662803649902, -0.686447024345398], + [0.42517757415771484, 9.425241470336914], + [-5.290579319000244, 3.9053094387054443], + [-2.0526671409606934, 1.774047613143921], + [-5.293798923492432, 5.66823673248291], + [-5.630914211273193, 6.482967376708984], + [2.1415233612060547, -3.740057945251465], + [8.181595802307129, -2.3821494579315186], + [5.961707592010498, -1.3063721656799316], + [3.2963831424713135, -5.345864295959473], + [7.570144176483154, -2.9417734146118164], + [3.905611276626587, 6.468747615814209], + [0.8899824023246765, 0.06475219130516052], + [-7.248899936676025, 8.926502227783203], + [-3.8445184230804443, -1.2827794551849365], + [-5.822648048400879, 7.3517045974731445], + [-2.751940965652466, 2.3427159786224365], + [2.8185536861419678, 5.640212535858154], + [2.997312307357788, -4.540285110473633], + [-0.48656564950942993, 10.463638305664062], + [-2.406456232070923, 1.1858891248703003], + [-3.9056546688079834, 3.206449270248413], + [-0.7663506269454956, -3.022081136703491], + [-4.3805766105651855, 4.87663459777832], + [6.540842056274414, -1.2904822826385498], + [3.340380907058716, -5.2918243408203125], + [2.873857259750366, -5.46915340423584], + [1.3475487232208252, 5.297760963439941], + [-0.2709869146347046, 9.169783592224121], + [-5.809072971343994, 0.8986837267875671], + [-3.3119070529937744, -3.65382719039917], + [6.91987943649292, -1.6417615413665771], + [-0.785112202167511, -0.4667463004589081], + [1.927603006362915, -6.139104843139648], + [-3.8320953845977783, -2.015331506729126], + [-5.630753993988037, 6.969942569732666], + [5.66680383682251, -3.4416449069976807], + [-0.25271010398864746, -1.4824504852294922], + [4.879470348358154, -1.6639755964279175], + [2.8774609565734863, -6.7774858474731445], + [-4.486954212188721, -3.037766695022583], + [1.1953794956207275, -5.874007225036621], + [2.0068728923797607, -9.652889251708984], + [1.2268402576446533, -3.8796098232269287], + [-7.901918888092041, -0.744747519493103], + [-2.9418203830718994, -2.5804038047790527], + [-5.82114839553833, -2.5464553833007812], + [2.146740198135376, -3.4480764865875244], + [1.9594635963439941, 5.343455791473389], + [-3.7997350692749023, 6.323930740356445], + [-5.184866428375244, -2.6516191959381104], + [-2.6020443439483643, 2.129364013671875], + [-0.29520559310913086, 9.900020599365234], + [1.7050020694732666, -3.7089035511016846], + [-5.299366474151611, 0.8801055550575256], + [-7.457281589508057, 9.122030258178711], + [-3.2163870334625244, -3.0284717082977295], + [3.0379765033721924, -4.782303810119629], + [-3.5093584060668945, -3.257812738418579], + [-7.925919055938721, -1.0704289674758911], + [-4.447787761688232, 5.267976760864258], + [-3.182252883911133, 0.13694655895233154], + [-1.1127922534942627, 9.266630172729492], + [-2.8795251846313477, -0.6657705307006836], + [-4.911035537719727, -3.0841217041015625], + [-4.026161193847656, 1.1045916080474854], + [9.579425811767578, -2.7499332427978516], + [-0.1964203417301178, -1.2194315195083618], + [-4.995105266571045, -3.3321878910064697], + [-5.673603534698486, 5.680800914764404], + [8.301594734191895, -2.222655773162842], + [9.063273429870605, -2.491968870162964], + [-5.470996856689453, 7.069241046905518], + [7.965823650360107, -2.207242727279663], + [3.217907428741455, -5.270604133605957], + [-2.9762260913848877, 5.082022190093994], + [-1.8994905948638916, -3.1075918674468994], + [8.786260604858398, -2.514249563217163], + [-3.3630282878875732, -2.67069149017334], + [2.1233794689178467, -6.045645713806152], + [-2.7813217639923096, 6.009960174560547], + [2.516202688217163, -4.527346611022949], + [8.214625358581543, -3.6576974391937256], + [8.932405471801758, -2.4750125408172607], + [-3.0636651515960693, -2.3229830265045166], + [-0.3882565498352051, 8.980550765991211], + [0.511692225933075, 5.958669662475586], + [7.966524600982666, -2.155344247817993], + [-0.7079973220825195, 9.630608558654785], + [1.423628807067871, -4.3426055908203125], + [6.572174549102783, -1.4544012546539307], + [-6.696713924407959, 8.202709197998047], + [-2.824645757675171, -1.277235507965088], + [3.301833152770996, 1.0817893743515015], + [2.3586795330047607, 6.044124603271484], + [2.6681244373321533, -4.083016395568848], + [-2.6578032970428467, 1.8110311031341553], + [-0.8291815519332886, 8.541611671447754], + [-7.191368579864502, 3.6735596656799316], + [0.9169647097587585, 5.074600696563721], + [-0.43414533138275146, 9.477251052856445], + [-3.422844648361206, -2.4152863025665283], + [-0.19114363193511963, 8.753790855407715], + [-4.068574905395508, -2.777167558670044], + [-2.9801249504089355, -0.9260364770889282], + [-3.7162787914276123, -2.4139440059661865], + [1.8385076522827148, -8.7310791015625], + [-0.3158872723579407, 9.658486366271973], + [-4.074723720550537, -4.841285228729248], + [3.125936985015869, -4.8038649559021], + [1.9159681797027588, -5.290312767028809], + [2.8746581077575684, 6.028718948364258], + [-6.385595798492432, 8.641014099121094], + [-6.265164375305176, 0.842150092124939], + [5.398317813873291, -1.236717939376831], + [-2.638603687286377, -0.47948500514030457], + [2.5108048915863037, -3.7366323471069336], + [-0.4141320586204529, 11.537788391113281], + [-0.020900167524814606, -0.671864926815033], + [-0.7316036224365234, 9.738330841064453], + [1.0407770872116089, 0.24673306941986084], + [-5.184291839599609, -3.257028579711914], + [-5.10129451751709, 6.397130012512207], + [1.2451609373092651, -2.4991514682769775], + [-0.9154396653175354, -0.5926095247268677], + [9.119568824768066, -2.6137678623199463], + [0.012337557971477509, 4.737875938415527], + [3.0989387035369873, -4.721339225769043], + [-8.153557777404785, -1.4303057193756104], + [-4.958371639251709, -5.291412353515625], + [-6.400315284729004, 8.388723373413086], + [7.281158447265625, -1.5488466024398804], + [-6.528252124786377, -1.736157774925232], + [2.2320163249969482, 5.908871650695801], + [-5.197895526885986, -3.5560529232025146], + [-2.617392063140869, -2.0380773544311523], + [1.3355616331100464, -7.887921333312988], + [-2.4365291595458984, 1.2874497175216675], + [4.632607936859131, -1.310944676399231], + [5.2935791015625, -1.829490065574646], + [-5.373488426208496, 3.170933961868286], + [0.5808799862861633, 5.104465484619141], + [10.073598861694336, -2.7741148471832275], + [8.742030143737793, -2.4483892917633057], + [-6.437900066375732, 0.843526303768158], + [1.775107979774475, 1.712704062461853], + [-5.227905750274658, 7.3709001541137695], + [-8.257664680480957, -0.6987496614456177], + [-5.543214321136475, -3.5713346004486084], + [1.7775458097457886, -4.3297624588012695], + [-0.40793144702911377, -0.7258987426757812], + [-5.468784332275391, 4.8467912673950195], + [-6.107841968536377, -3.058791160583496], + [-0.2734197974205017, 9.041322708129883], + [-5.190450668334961, 7.059820175170898], + [-5.6158447265625, -3.845020055770874], + [-0.3434058427810669, 9.983022689819336], + [-0.15971189737319946, 9.200925827026367], + [-4.57404088973999, -5.794538974761963], + [-4.814749240875244, -2.968343496322632], + [-2.656869888305664, 1.8328851461410522], + [-0.6160448789596558, -4.091978073120117], + [-3.8542063236236572, 5.203865051269531], + [0.8615436553955078, -6.947859287261963], + [-4.009430408477783, -3.2866296768188477], + [8.44996166229248, -2.3580543994903564], + [-5.181373119354248, 6.667656421661377], + [2.586794376373291, -7.321286201477051], + [-6.375933647155762, 2.302880048751831], + [2.9376578330993652, -4.416248321533203], + [6.491039276123047, -4.459936141967773], + [2.150151491165161, -7.862207412719727], + [8.585792541503906, -2.4140563011169434], + [3.576195240020752, -4.345705032348633], + [-1.8756422996520996, 5.207486629486084], + [4.239424228668213, -2.441730260848999], + [0.1597876250743866, -4.6785383224487305], + [-2.1401541233062744, 0.4872071146965027], + [4.352696895599365, 7.002710819244385], + [-2.208016872406006, 2.698646068572998], + [2.1759564876556396, -7.215952396392822], + [-5.64535665512085, -1.6418068408966064], + [-5.858579635620117, -2.4546902179718018], + [-4.825642108917236, -2.0684220790863037], + [5.109603404998779, -0.848849356174469], + [2.2862374782562256, 5.468422889709473], + [-3.2351109981536865, 4.506394386291504], + [0.036120109260082245, -3.356157064437866], + [-2.310391664505005, 1.1758590936660767], + [2.0730655193328857, -8.29761791229248], + [-6.035960674285889, 8.135984420776367], + [-6.071659088134766, -2.2458064556121826], + [-1.8080034255981445, 0.28063899278640747], + [-2.269906997680664, 0.09757328033447266], + [-3.526970148086548, -5.564272403717041], + [-3.063429117202759, -2.421071767807007], + [-2.7622687816619873, 2.553542375564575], + [-3.8306891918182373, -4.163022041320801], + [-2.31599760055542, 0.7199282646179199], + [-4.478116989135742, 7.8608551025390625], + [-0.1673930287361145, 9.663702964782715], + [-4.999312400817871, 7.742535591125488], + [-1.6859503984451294, -0.8014631271362305], + [2.0690410137176514, 3.9393324851989746], + [6.675333499908447, 8.117931365966797], + [2.210611343383789, -7.060758590698242], + [-0.05670792609453201, 10.076019287109375], + [-3.375483751296997, -3.8423984050750732], + [-2.0913584232330322, 2.5963566303253174], + [-3.749359130859375, 2.7039036750793457], + [-2.551840305328369, 1.5159215927124023], + [-0.7263669967651367, 8.88632583618164], + [-4.173404693603516, 3.0663902759552], + [1.9842000007629395, -3.2081315517425537], + [-4.728178977966309, -1.577954888343811], + [-2.499310255050659, 1.0938646793365479], + [-4.744678497314453, -2.1978533267974854], + [5.930408000946045, -2.990863084793091], + [-6.0099358558654785, 0.10872209072113037], + [0.2848219573497772, 0.5862652063369751], + [0.057093553245067596, 9.765074729919434], + [2.5304393768310547, -6.722702980041504], + [1.3968303203582764, 5.087876319885254], + [-2.8244833946228027, 4.226951599121094], + [-1.6088539361953735, 1.2866696119308472], + [-4.656007766723633, -3.9156534671783447], + [2.788773775100708, -7.337069988250732], + [-4.716679573059082, -0.4292218089103699], + [-2.034515142440796, 1.3385430574417114], + [2.0873031616210938, 0.4519549608230591], + [-3.75382399559021, 5.659732341766357], + [-5.468364238739014, 2.4354467391967773], + [-3.0098752975463867, -0.9290563464164734], + [6.733734607696533, -2.166128396987915], + [-6.29039192199707, 7.396932125091553], + [5.572287082672119, -3.0606439113616943], + [3.0468194484710693, -4.742430686950684], + [-3.4082696437835693, -2.9889872074127197], + [1.2549424171447754, -7.370753765106201], + [3.077904462814331, 6.194150924682617], + [-0.08372325450181961, 10.166414260864258], + [-0.320842444896698, 10.117143630981445], + [-2.495107412338257, 0.2578635811805725], + [-4.866490840911865, -2.8016581535339355], + [1.4828625917434692, -4.948305606842041], + [-4.629434108734131, -2.0470571517944336], + [-1.04198157787323, 5.312055587768555], + [0.48884159326553345, -0.01978481188416481], + [-6.605247497558594, -0.7708211541175842], + [-4.765926361083984, -4.419229030609131], + [2.517613172531128, -4.313615798950195], + [-6.843994617462158, -1.3222606182098389], + [-5.353946208953857, -4.678605556488037], + [-2.1019952297210693, 0.37400346994400024], + [-0.5276677012443542, 11.196495056152344], + [1.7182743549346924, -3.5559191703796387], + [3.0312154293060303, 0.7032685279846191], + [1.5329172611236572, 0.5137820243835449], + [-3.093963384628296, -1.6997019052505493], + [-4.259171962738037, -2.521110773086548], + [-2.1926674842834473, 6.386665344238281], + [-5.237244606018066, -2.535813570022583], + [1.3698230981826782, -7.929558753967285], + [0.28455227613449097, 10.311211585998535], + [-2.990736484527588, 3.48529314994812], + [2.7354516983032227, -4.101033687591553], + [-0.39055192470550537, 10.680609703063965], + [-1.0010957717895508, -1.2386398315429688], + [1.4538278579711914, -6.58621883392334], + [2.305055618286133, 3.1965572834014893], + [7.618487358093262, -1.7048683166503906], + [5.6243462562561035, -2.661247491836548], + [-3.467564821243286, -1.3589636087417603], + [-2.567019462585449, 1.7738564014434814], + [-2.7390542030334473, 3.1154086589813232], + [-4.942217826843262, 8.283918380737305], + [-1.0634326934814453, -0.5511476397514343], + [-0.4184418022632599, -2.7000186443328857], + [2.14900279045105, 5.60004997253418], + [3.0174009799957275, -4.516395568847656], + [-4.858704566955566, -3.663893222808838], + [7.894756317138672, -1.922813892364502], + [-4.775415420532227, 5.346548080444336], + [5.483375549316406, -1.9766252040863037], + [0.37203335762023926, -0.8154740333557129], + [-5.727729320526123, -1.9801138639450073], + [1.8959484100341797, -6.499775409698486], + [-3.042935609817505, -4.433192253112793], + [-8.649435043334961, -0.8977524042129517], + [-6.180801868438721, 8.689127922058105], + [2.091646671295166, 5.970006942749023], + [-0.8208715915679932, 8.700986862182617], + [-1.2254327535629272, 9.367898941040039], + [2.9664456844329834, -7.61533784866333], + [-0.2663523554801941, 10.170793533325195], + [0.19076132774353027, 5.534063339233398], + [8.102461814880371, -2.2602550983428955], + [-2.9373879432678223, 5.4059038162231445], + [0.3088754117488861, -0.3881295919418335], + [8.462069511413574, -2.2017738819122314], + [-4.944418430328369, -1.2205922603607178], + [-2.6790499687194824, 0.18599963188171387], + [-2.133244276046753, 2.3343772888183594], + [-7.544267177581787, -0.8146969079971313], + [1.5291473865509033, -6.652443885803223], + [-4.638549327850342, -2.837780714035034], + [3.7008330821990967, 6.694828510284424], + [-4.830638408660889, 2.590038299560547], + [1.8528852462768555, 0.6017755270004272], + [1.4423096179962158, -5.9387688636779785], + [-4.75742769241333, -2.6196656227111816], + [-5.118163108825684, -1.5895222425460815], + [-5.267852783203125, 7.388171195983887], + [2.985137939453125, -4.547768592834473], + [-5.18696928024292, -3.3024234771728516], + [-0.4551686644554138, 9.894146919250488], + [4.7079362869262695, -3.1698858737945557], + [-1.7354516983032227, -2.6394147872924805], + [-2.816675901412964, 1.8830329179763794], + [-2.1297953128814697, 1.9853047132492065], + [-4.291640758514404, -1.333936095237732], + [1.831457495689392, 1.164279818534851], + [9.3361177444458, -2.437202215194702], + [8.841277122497559, -2.4679126739501953], + [-2.9267075061798096, 3.2376463413238525], + [-7.2145514488220215, -0.13458502292633057], + [2.890231132507324, -4.5507073402404785], + [1.9526684284210205, 0.6505300998687744], + [3.1482832431793213, -3.0210061073303223], + [1.5567634105682373, 5.954068183898926], + [-4.929201602935791, -2.4810237884521484], + [2.100343704223633, 0.8822270035743713], + [5.7930073738098145, -3.663897752761841], + [-5.270263195037842, 3.4686131477355957], + [-4.044058322906494, -2.20729923248291], + [-0.3714333474636078, -0.826158881187439], + [-4.873432636260986, 5.352606296539307], + [-5.7746758460998535, 2.234950304031372], + [2.2961413860321045, 5.404084205627441], + [9.201298713684082, -2.5453975200653076], + [-2.095928192138672, 2.2331531047821045], + [3.1051690578460693, 1.01461923122406], + [-5.97019624710083, 8.378612518310547], + [-4.673107147216797, -2.2342007160186768], + [2.2098042964935303, -5.516961097717285], + [2.1852543354034424, -3.4885337352752686], + [1.869789481163025, 5.121408939361572], + [-1.4322251081466675, 5.063663005828857], + [-2.940511465072632, 3.0358521938323975], + [2.0983076095581055, -7.0828657150268555], + [1.8949189186096191, -8.532426834106445], + [1.3475594520568848, -8.209705352783203], + [2.952852249145508, -4.906249046325684], + [0.05645429342985153, -0.8715478777885437], + [1.738626480102539, 5.471730709075928], + [1.7285714149475098, 5.406301021575928], + [5.428844928741455, -1.7962270975112915], + [-4.487357139587402, -3.768061876296997], + [0.998547375202179, -3.8830158710479736], + [7.8818440437316895, -2.3167474269866943], + [-5.557144641876221, -4.607487678527832], + [1.282045602798462, 5.878228664398193], + [0.0928688570857048, 9.385750770568848], + [-5.351183891296387, 7.089879035949707], + [1.1584725379943848, -6.269608497619629], + [-2.405357599258423, 2.2699100971221924], + [-6.0951972007751465, -2.6768720149993896], + [-3.609064817428589, -0.956998348236084], + [-4.738529205322266, 0.2540885806083679], + [4.734069347381592, -2.108924150466919], + [2.1201961040496826, -8.508051872253418], + [1.3768365383148193, 7.620848655700684], + [1.154276728630066, 5.275178909301758], + [4.955750942230225, 7.6817145347595215], + [3.8253557682037354, -3.4592206478118896], + [2.7087008953094482, -4.166187286376953], + [-5.586070537567139, 4.660896301269531], + [0.7649828195571899, -6.94333553314209], + [-6.00173807144165, -1.5058903694152832], + [-6.889960289001465, 1.167755365371704], + [-0.38452786207199097, 10.648050308227539], + [-3.958880662918091, -2.3534963130950928], + [8.4761323928833, -2.4115328788757324], + [-5.073969841003418, 3.7149927616119385], + [3.0137383937835693, -4.5394768714904785], + [2.9579713344573975, -4.4951653480529785], + [3.1507601737976074, -4.840659141540527], + [5.380731105804443, 7.250089645385742], + [3.181171178817749, 6.487390995025635], + [1.043971061706543, 0.5283275842666626], + [-5.3330817222595215, -3.0766537189483643], + [8.735828399658203, -2.831441879272461], + [-4.536263465881348, -1.7730237245559692], + [2.4668962955474854, -3.7368714809417725], + [2.595881938934326, 6.678921699523926], + [-0.7618132829666138, -0.9230319261550903], + [2.9108030796051025, 1.0152068138122559], + [-3.2467854022979736, 0.9886711835861206], + [0.7916455864906311, -0.41270285844802856], + [-4.7093000411987305, -4.155755043029785], + [-5.2709574699401855, 0.406599223613739], + [-4.9158124923706055, 2.125892162322998], + [2.1903960704803467, -5.586243152618408], + [-2.816356897354126, 5.628664970397949], + [-0.14191707968711853, -0.6377450227737427], + [3.131666660308838, -4.87053108215332], + [2.647996187210083, -4.110231399536133], + [-5.947704792022705, -0.7672882676124573], + [-8.08103084564209, -1.3626846075057983], + [-5.855557918548584, -0.316903293132782], + [2.2715587615966797, -3.7587168216705322], + [-3.6425201892852783, -1.8838590383529663], + [-1.477512240409851, 5.6861724853515625], + [1.718662977218628, 5.573890686035156], + [-0.11559958010911942, 9.6529541015625], + [-2.229529857635498, 1.2935173511505127], + [-2.104952573776245, -0.6004554629325867], + [-2.3615121841430664, 1.2014505863189697], + [-4.704375267028809, -4.0182204246521], + [-5.472286224365234, -3.741239547729492], + [-3.8713223934173584, -1.9178868532180786], + [3.1902387142181396, -4.769819259643555], + [0.35584163665771484, -0.5844680070877075], + [-2.775806188583374, -2.1004092693328857], + [2.88291335105896, -4.364272594451904], + [-6.419989109039307, 8.125900268554688], + [-5.821913719177246, 5.003427028656006], + [2.7437987327575684, -4.132004261016846], + [-3.5440714359283447, 6.9409589767456055], + [-4.066221714019775, 3.6285736560821533], + [-5.415744781494141, -2.3914639949798584], + [-2.448166847229004, 2.054304361343384], + [1.1779048442840576, 6.047242164611816], + [-5.960566997528076, -2.4114768505096436], + [-1.0503275394439697, -0.6941172480583191], + [-7.4485955238342285, -2.1329338550567627], + [3.1968467235565186, -5.048245429992676], + [-0.47982877492904663, 10.866876602172852], + [0.06447016447782516, 9.004138946533203], + [6.376412391662598, 8.117804527282715], + [9.491793632507324, -2.646265983581543], + [1.3969247341156006, -5.500705718994141], + [-3.9373300075531006, -2.88031268119812], + [-2.457473039627075, 2.0482473373413086], + [-1.0338248014450073, -0.45707035064697266], + [-6.129128932952881, 3.897324562072754], + [-8.696192741394043, -1.4294532537460327], + [-4.759686470031738, 2.1211178302764893], + [5.369011402130127, 7.0821027755737305], + [2.8258965015411377, -4.234878063201904], + [1.794675588607788, 5.693105697631836], + [-4.615547180175781, 5.775372505187988], + [3.133025884628296, -2.756972074508667], + [2.616698980331421, -4.167618751525879], + [9.39110279083252, -2.606221914291382], + [-5.481447696685791, 0.16020429134368896], + [-0.16164124011993408, -1.066389799118042], + [-0.7089675068855286, 0.664863646030426], + [1.6037530899047852, -7.663186073303223], + [-5.135443687438965, 2.3083302974700928], + [-2.9329724311828613, 6.753082752227783], + [-5.704362392425537, 1.5083166360855103], + [1.769875168800354, -6.509341239929199], + [-0.46119892597198486, -3.0430548191070557], + [-0.457621693611145, 11.668052673339844], + [2.121410608291626, -7.193417549133301], + [7.238827228546143, -1.4067131280899048], + [-4.696781158447266, -0.4139130115509033], + [7.299522399902344, -2.0274736881256104], + [0.24356335401535034, 9.550971031188965], + [1.7992935180664062, 4.752601623535156], + [-0.6537691354751587, -0.6193575263023376], + [4.646557807922363, -1.1216059923171997], + [-0.4060209393501282, 11.066423416137695], + [-1.0766007900238037, 8.82497787475586], + [2.2883517742156982, -7.6805572509765625], + [1.1211316585540771, -7.565370559692383], + [-5.070754528045654, -1.8112329244613647], + [-4.034032821655273, -2.3458058834075928], + [-2.801384925842285, 4.564830303192139], + [-3.505720376968384, -1.3436517715454102], + [1.922696828842163, -7.994263172149658], + [-4.057919979095459, -1.4501428604125977], + [-6.405418395996094, -1.9219650030136108], + [-5.732414722442627, -0.9292580485343933], + [-1.4456150531768799, 0.38204991817474365], + [-0.552854597568512, 9.153244972229004], + [1.9717433452606201, 5.529110431671143], + [-2.233147382736206, 1.155655860900879], + [8.642946243286133, -2.3914153575897217], + [3.7848594188690186, -3.3979337215423584], + [-2.4430184364318848, 4.619017601013184], + [2.6663360595703125, -3.9815800189971924], + [-5.743330478668213, 4.544602870941162], + [-2.6462113857269287, 2.374718427658081], + [1.3060189485549927, -6.182046890258789], + [-4.706761360168457, 7.3742451667785645], + [3.779893398284912, -6.008474349975586], + [0.03718429058790207, 9.687981605529785], + [2.822420358657837, -5.209035873413086], + [0.10718663781881332, -0.950995147228241], + [-3.735466718673706, -0.3439536690711975], + [2.8387696743011475, -4.3149237632751465], + [-0.20475536584854126, 9.874217987060547], + [4.996959209442139, -1.2601324319839478], + [8.138236045837402, -2.513228178024292], + [-0.3220518231391907, 10.029340744018555], + [1.9459497928619385, 3.195146083831787], + [-2.0771336555480957, 1.608920931816101], + [-0.3371606469154358, 11.340837478637695], + [-5.083603858947754, 7.047499656677246], + [1.2381696701049805, -7.505764484405518], + [-7.938610553741455, -0.9301291704177856], + [-5.519623279571533, -3.8080894947052], + [-0.3012847304344177, 10.357447624206543], + [1.1662057638168335, -5.8486151695251465], + [-4.763602256774902, 3.2475836277008057], + [3.124701976776123, -4.707607746124268], + [-2.3883602619171143, -0.7934303283691406], + [-3.387819528579712, -3.808377981185913], + [9.113280296325684, -2.3296689987182617], + [-2.1620733737945557, 2.125748634338379], + [-5.411962985992432, 6.157209396362305], + [-0.35743579268455505, 0.9006533622741699], + [8.371277809143066, -2.1738340854644775], + [5.7912187576293945, -0.8718705177307129], + [1.0567243099212646, -6.881490707397461], + [-0.19307872653007507, -1.3336329460144043], + [-0.6539850234985352, 8.161717414855957], + [2.667781114578247, -5.047961235046387], + [-5.1572041511535645, -2.795574426651001], + [9.322894096374512, -2.5750679969787598], + [-4.303790092468262, -2.563063383102417], + [-5.311957836151123, -3.816038131713867], + [1.2940354347229004, -5.182621955871582], + [-5.399825572967529, -3.308969497680664], + [2.418159246444702, 0.6284174919128418], + [-6.268110752105713, -1.3566197156906128], + [7.518563747406006, -1.6437251567840576], + [-5.109409809112549, 6.022800445556641], + [-7.396243095397949, 0.7275447845458984], + [-6.174651145935059, -0.7635370492935181], + [1.8693310022354126, -3.5031561851501465], + [-4.399537563323975, -1.444098711013794], + [0.9076324105262756, -0.6443909406661987], + [1.5399214029312134, 0.4440361261367798], + [-5.333096981048584, -2.9927756786346436], + [3.3220021724700928, -5.2795305252075195], + [2.4414145946502686, 0.7730374336242676], + [-1.5982418060302734, 5.813485622406006], + [2.7200112342834473, 6.413748741149902], + [2.534179925918579, 0.9102218151092529], + [-4.72258996963501, -1.7516241073608398], + [-2.979227304458618, -1.094067931175232], + [-0.32463759183883667, 10.112387657165527], + [-2.2049736976623535, 2.309065580368042], + [-5.490545272827148, 8.272930145263672], + [-0.20314043760299683, -0.7912386655807495], + [-7.437290668487549, -0.38141965866088867], + [2.578294038772583, -3.916043281555176], + [0.04980330914258957, 10.322877883911133], + [-3.1204798221588135, 5.317419052124023], + [-5.081427097320557, -1.0454751253128052], + [-6.298608303070068, 7.659488201141357], + [1.8517229557037354, -8.191705703735352], + [-2.096677303314209, 5.791428565979004], + [-2.920130968093872, 3.187227964401245], + [-3.9998738765716553, -3.9988057613372803], + [-0.23656582832336426, 9.51302719116211], + [2.2946715354919434, -8.63581657409668], + [-0.18549734354019165, 9.710058212280273], + [-1.8988982439041138, -1.135864019393921], + [-6.067321300506592, 1.8480623960494995], + [-4.479355812072754, -2.4593636989593506], + [1.2104233503341675, 1.2678641080856323], + [-1.0259652137756348, -0.2628011405467987], + [-0.46386200189590454, 10.546457290649414], + [-5.13885498046875, -3.182372808456421], + [1.848788857460022, -8.258041381835938], + [2.5322859287261963, -5.649117946624756], + [-0.379416823387146, 9.397760391235352], + [-0.7976981401443481, 0.8921184539794922], + [-2.0628774166107178, 2.539161205291748], + [-4.564979076385498, -3.1854350566864014], + [-4.402371406555176, -2.9168922901153564], + [3.6290252208709717, 6.5112504959106445], + [2.00138521194458, -7.335670471191406], + [-5.324123859405518, 4.118358612060547], + [2.461268186569214, -7.773706436157227], + [-5.731579303741455, -0.34254372119903564], + [2.4846391677856445, -3.6783151626586914], + [5.3063859939575195, 7.523135185241699], + [5.04974889755249, -1.1216028928756714], + [2.652015447616577, -3.9785938262939453], + [0.2516445517539978, 5.431227684020996], + [-0.7272151112556458, 9.930757522583008], + [2.3498666286468506, -6.9851861000061035], + [0.9401759505271912, 0.04719531163573265], + [0.6037901043891907, -0.8295344114303589], + [-5.636353015899658, -2.863360643386841], + [-0.15600311756134033, 8.393674850463867], + [2.4719583988189697, -5.48061990737915], + [-4.799232006072998, -3.09195876121521], + [-4.664546012878418, -2.0066490173339844], + [-0.8209876418113708, 9.001091003417969], + [5.600763320922852, -2.312178134918213], + [-0.5561807751655579, 11.452474594116211], + [-3.1748411655426025, -1.7778751850128174], + [2.8041083812713623, -4.206895351409912], + [-5.623142719268799, -2.275573253631592], + [1.0545763969421387, 4.987539291381836], + [-0.07157213240861893, 9.610695838928223], + [-5.08229398727417, 3.568146228790283], + [-3.7575995922088623, -1.944982886314392], + [2.9453208446502686, -4.452053546905518], + [-5.323280334472656, 7.1361589431762695], + [0.49738210439682007, 0.11988043785095215], + [-1.6978278160095215, 2.232088565826416], + [-4.496367931365967, -2.2958929538726807], + [-3.6485321521759033, -2.8242900371551514], + [2.6745340824127197, -4.035711765289307], + [-5.310730457305908, 6.612226963043213], + [-2.8270928859710693, -0.9574747085571289], + [-0.2873075604438782, 10.312833786010742], + [8.554243087768555, -2.290377616882324], + [-5.957638263702393, -1.8197399377822876], + [-4.284657001495361, 3.691460132598877], + [3.103102445602417, -4.7945637702941895], + [-3.6462020874023438, -1.6447702646255493], + [2.6486079692840576, -4.00018310546875], + [-7.451226234436035, -1.7865029573440552], + [-5.107112407684326, -3.930865526199341], + [2.029454469680786, 4.960597515106201], + [-6.737545013427734, 8.01844596862793], + [-4.379104137420654, -4.208785057067871], + [-6.289953708648682, -2.26220703125], + [-5.137627124786377, 4.946589946746826], + [2.2350761890411377, -6.124305725097656], + [-6.599844455718994, 0.33714067935943604], + [-4.356719970703125, 5.67606782913208], + [-5.081040859222412, -3.8114824295043945], + [-4.346742630004883, -3.6134390830993652], + [-5.311748027801514, 6.547542572021484], + [1.0335594415664673, -0.31694674491882324], + [-4.033094882965088, -3.0459201335906982], + [-6.744436740875244, 0.31580328941345215], + [3.0218288898468018, -4.8321943283081055], + [3.396524429321289, -7.209113597869873], + [-5.472709655761719, -5.861838340759277], + [2.666578531265259, -4.197079658508301], + [-6.75365686416626, 8.440263748168945], + [0.7092291712760925, -5.593684196472168], + [2.2707266807556152, -3.8760244846343994], + [-4.109068393707275, -3.1190903186798096], + [1.4822688102722168, 0.4989861249923706], + [-4.461424350738525, -3.1008718013763428], + [-3.0338234901428223, 0.5589489340782166], + [3.289978265762329, -5.304747581481934], + [-4.625321865081787, 6.830687046051025], + [2.181586503982544, 0.6368836164474487], + [7.783634662628174, -2.0632505416870117], + [-2.4926724433898926, -1.2526605129241943], + [1.8342595100402832, -3.337202787399292], + [2.428171157836914, -4.038430213928223], + [-4.90346622467041, -3.0191361904144287], + [-5.584814548492432, -0.5983421802520752], + [-4.178701877593994, -5.303226947784424], + [-7.9935078620910645, -2.1271140575408936], + [-5.553648948669434, 5.7249755859375], + [8.650418281555176, -2.53478741645813], + [-5.004410266876221, -2.039684295654297], + [-3.7523000240325928, -1.8686851263046265], + [-3.8367583751678467, -0.6906143426895142], + [-0.46561145782470703, 9.688959121704102], + [8.257898330688477, -2.550158739089966], + [1.8923038244247437, -6.143349647521973], + [1.4861363172531128, -7.690735340118408], + [8.976829528808594, -2.5929434299468994], + [-2.713667154312134, 2.461956024169922], + [-0.15096408128738403, 9.425079345703125], + [-5.533958911895752, -2.648041009902954], + [-5.379701137542725, 1.8049501180648804], + [8.726983070373535, -2.5430662631988525], + [2.7096214294433594, 1.177554726600647], + [-0.31635379791259766, 10.057358741760254], + [-3.121583938598633, 3.3963263034820557], + [-0.3938528895378113, 10.962770462036133], + [7.33068323135376, -3.1520438194274902], + [3.0919723510742188, 6.172305107116699], + [8.879711151123047, -2.4624297618865967], + [-2.361119031906128, 1.3212405443191528], + [-2.3838863372802734, 1.9712046384811401], + [1.3667162656784058, -4.3804216384887695], + [0.2178269922733307, -1.1682978868484497], + [-2.4335622787475586, 1.5693427324295044], + [-1.2586065530776978, 0.9396917223930359], + [6.5766215324401855, -1.2459137439727783], + [7.55605936050415, -2.335362672805786], + [-5.760807037353516, -1.9889222383499146], + [-4.2738423347473145, -3.7888002395629883], + [2.477370023727417, 0.7937651872634888], + [-0.16491597890853882, -1.2691994905471802], + [8.226604461669922, -2.141968011856079], + [1.2897170782089233, 0.24712705612182617], + [-4.009703159332275, -3.0064215660095215], + [-5.6039347648620605, -3.989457368850708], + [6.524367809295654, -1.7649216651916504], + [-5.258642196655273, -3.4346530437469482], + [3.1975762844085693, -4.856273651123047], + [-4.620389461517334, -2.939556121826172], + [-5.094274997711182, 3.5240354537963867], + [-0.22180569171905518, 10.469441413879395], + [-0.48941007256507874, -0.1715933233499527], + [-4.905630588531494, -3.1184377670288086], + [-0.6987239122390747, 5.749471664428711], + [-7.089975833892822, -2.028635025024414], + [1.5698217153549194, -2.793220281600952], + [-5.494853496551514, 5.154780864715576], + [-0.23799198865890503, 10.211796760559082], + [1.8479819297790527, 0.2743203043937683], + [-0.46545493602752686, -1.0818140506744385], + [1.3610278367996216, -6.688192844390869], + [-1.7865815162658691, 1.789690375328064], + [-3.4946036338806152, 5.5001678466796875], + [-2.2633097171783447, 1.303054928779602], + [5.816524028778076, -2.085336208343506], + [-0.9767405390739441, -0.6735868453979492], + [2.3635873794555664, -3.858408212661743], + [-3.7925164699554443, -2.1655185222625732], + [-0.07329518347978592, 9.282398223876953], + [-2.53011417388916, 1.913282871246338], + [-5.191044330596924, 6.972499847412109], + [-3.2515032291412354, -2.5477359294891357], + [8.845969200134277, -2.33855938911438], + [1.1433894634246826, -6.350532531738281], + [-3.9910788536071777, -2.885730028152466], + [-3.8526694774627686, 2.6866140365600586], + [3.2364206314086914, -5.164615154266357], + [2.3390016555786133, -7.307100772857666], + [-2.283233880996704, 1.2710648775100708], + [-6.060837268829346, 6.653524398803711], + [-0.1897268295288086, -0.5615494847297668], + [1.835042953491211, 4.946661472320557], + [8.163226127624512, -1.8977397680282593], + [1.895890712738037, -8.723569869995117], + [-0.18677470088005066, -0.9429739713668823], + [-1.8264522552490234, 1.314253807067871], + [-9.323328018188477, 11.43413257598877], + [-2.8103091716766357, 2.7395102977752686], + [-4.8772053718566895, -2.3507049083709717], + [-0.3004268407821655, 10.684770584106445], + [-2.3992791175842285, 2.116873264312744], + [-3.309931993484497, -4.292623519897461], + [-0.1746673583984375, 10.88323974609375], + [-5.8161797523498535, 7.201265335083008], + [-5.583220958709717, 4.3925065994262695], + [0.05250786989927292, -0.719367504119873], + [-5.369353771209717, 5.710339546203613], + [-6.211075305938721, 6.417280197143555], + [-4.731031894683838, -2.1531736850738525], + [-8.862706184387207, -0.6050790548324585], + [2.7577223777770996, -7.841489315032959], + [1.9290611743927002, -7.806182384490967], + [3.0861833095550537, -4.770403861999512], + [-4.438216686248779, 0.3616976737976074], + [-7.762375354766846, -1.6466997861862183], + [4.713949203491211, -3.8925740718841553], + [8.474509239196777, -1.8725907802581787], + [-0.22929662466049194, 9.496481895446777], + [-2.4121904373168945, 2.4787933826446533], + [-2.5388801097869873, 3.386190414428711], + [2.6906416416168213, -5.621431827545166], + [3.295686960220337, 6.0598578453063965], + [9.790621757507324, -2.716445207595825], + [-3.694408655166626, -1.8657715320587158], + [-4.914477825164795, 4.936059951782227], + [3.06391978263855, -4.785557746887207], + [-5.516789436340332, -2.7584316730499268], + [3.1210525035858154, -4.679178237915039], + [-3.80367374420166, -3.366657018661499], + [2.578137159347534, -3.5658538341522217], + [9.102325439453125, -2.502704620361328], + [-6.596412181854248, 7.907318115234375], + [-4.73900032043457, 5.923282623291016], + [-4.193493366241455, 6.610570907592773], + [2.7045786380767822, -4.142366886138916], + [-3.523515224456787, -3.5762007236480713], + [-6.4841389656066895, 2.368339776992798], + [-2.8613195419311523, 2.965618848800659], + [-3.663846731185913, -1.4750477075576782], + [2.081403970718384, 1.3384405374526978], + [-5.334737777709961, -4.123068809509277], + [7.942606449127197, -1.8692575693130493], + [2.678144693374634, -4.341993808746338], + [-2.1508729457855225, -0.9852491021156311], + [-3.8360249996185303, -1.1809370517730713], + [-5.289365291595459, 7.394373893737793], + [0.7700775861740112, -0.17642726004123688], + [3.8973500728607178, -1.9856767654418945], + [-3.4055285453796387, -0.8528475761413574], + [2.288264036178589, -8.163992881774902], + [-3.7212741374969482, -2.3020553588867188], + [-5.8521552085876465, 7.3931427001953125], + [2.952059507369995, -4.530446529388428], + [4.352672100067139, -2.787081003189087], + [-0.3752806782722473, 11.401656150817871], + [-0.06933266669511795, 8.30972957611084], + [9.392178535461426, -2.6181395053863525], + [3.0654094219207764, -4.607654571533203], + [-3.3372037410736084, -0.6676268577575684], + [-3.1633379459381104, 7.47574520111084], + [-0.2728903889656067, 10.997528076171875], + [2.1413605213165283, 5.627725124359131], + [-6.266072750091553, 4.234621047973633], + [6.366990089416504, -1.203125], + [1.312827467918396, 5.272439479827881], + [2.449838638305664, -8.10517692565918], + [0.4883536100387573, -0.28271716833114624], + [9.031123161315918, -2.4846513271331787], + [0.6047263741493225, 0.6877267956733704], + [6.632369518280029, -1.4525237083435059], + [1.351132869720459, 4.985203266143799], + [3.035677671432495, -7.201279640197754], + [1.1646952629089355, -7.184652328491211], + [3.532437801361084, -3.5730841159820557], + [-5.1454033851623535, 0.010756488889455795], + [-7.013669490814209, 8.555512428283691], + [7.797614097595215, -1.9121153354644775], + [5.804175853729248, -1.049169898033142], + [-0.1887030005455017, 10.354743957519531], + [0.9744744896888733, -6.0738983154296875], + [-4.668502330780029, -3.6948258876800537], + [1.3424395322799683, -5.383042335510254], + [-4.16300630569458, 4.999593734741211], + [2.6852149963378906, -4.731294631958008], + [-6.039709091186523, 7.1814680099487305], + [-4.916102886199951, -3.2916839122772217], + [-2.4378459453582764, -2.6026451587677], + [-3.047281503677368, 4.339954853057861], + [2.2366795539855957, 5.550840377807617], + [-2.5189878940582275, 1.944320559501648], + [-4.147265911102295, 6.422789573669434], + [-4.511035442352295, -3.8761777877807617], + [-3.563462495803833, -3.67498779296875], + [-2.10890531539917, 0.4463983178138733], + [-4.1991753578186035, -1.5297062397003174], + [-1.9523799419403076, -1.100577712059021], + [3.1267106533050537, -4.737423896789551], + [-2.093552350997925, 0.8896352052688599], + [-0.2722860276699066, 6.661181449890137], + [3.0777227878570557, -4.613080978393555], + [-6.534640789031982, 6.949834823608398], + [-5.186793327331543, 5.967058181762695], + [1.6534719467163086, 4.531590461730957], + [1.0368009805679321, 6.17181921005249], + [-0.41519612073898315, 10.608275413513184], + [1.2200874090194702, 0.4916527271270752], + [1.3458142280578613, -6.728872299194336], + [6.7560296058654785, -2.2074358463287354], + [-0.32317203283309937, 9.646080017089844], + [-4.900511264801025, 4.141597270965576], + [1.8725254535675049, 0.2484697699546814], + [2.9312989711761475, -4.603938102722168], + [-4.677709102630615, 1.7543754577636719], + [-1.4157307147979736, -2.122530698776245], + [1.6519361734390259, 7.453885078430176], + [-6.6162285804748535, 8.42902946472168], + [-4.632710933685303, 3.6460561752319336], + [2.9759738445281982, -4.556479454040527], + [-3.6373658180236816, 5.976366996765137], + [-5.0699968338012695, 3.7710065841674805], + [-4.382019519805908, -2.2128872871398926], + [-3.7872426509857178, 0.0479043684899807], + [-5.2362141609191895, -3.176807165145874], + [2.4351017475128174, -4.893457412719727], + [-5.19411563873291, 3.4031240940093994], + [-4.184969425201416, -2.7867376804351807], + [-2.6261396408081055, 1.8824368715286255], + [-2.356630802154541, 1.6518853902816772], + [-4.721724033355713, -5.040158271789551], + [8.282875061035156, -2.172060489654541], + [-3.0327541828155518, -4.881908893585205], + [-5.563663959503174, -3.3098127841949463], + [-4.419084072113037, 4.999738693237305], + [9.72725772857666, -2.794121026992798], + [9.190784454345703, -2.6210672855377197], + [-5.757184028625488, 2.1196539402008057], + [-2.062499761581421, 2.52520489692688], + [-4.4090256690979, -1.2101247310638428], + [9.136605262756348, -2.4458067417144775], + [-3.9594666957855225, -4.438392162322998], + [3.237752914428711, -4.837740421295166], + [1.8383958339691162, 5.374053001403809], + [1.848637580871582, 5.29278039932251], + [1.9254333972930908, -7.928501605987549], + [-1.8230807781219482, 1.7692614793777466], + [8.17258358001709, -2.084333658218384], + [-0.042830564081668854, -0.8968852162361145], + [3.134935140609741, -4.875691890716553], + [-2.470909357070923, 0.060420628637075424], + [-2.1291816234588623, 2.2085723876953125], + [-1.8123056888580322, -0.4070515036582947], + [-6.517215251922607, 8.154287338256836], + [-1.3455102443695068, -0.4258496165275574], + [2.836620807647705, -4.406732082366943], + [3.1878819465637207, -4.778310298919678], + [1.380721926689148, 4.529740333557129], + [-0.3453853726387024, -1.0249873399734497], + [7.7216572761535645, -1.963593602180481], + [0.31819263100624084, -1.1377938985824585], + [2.749645233154297, -5.223998069763184], + [9.235302925109863, -2.55472731590271], + [-3.8058364391326904, 3.8096017837524414], + [-0.39126086235046387, -0.5894465446472168], + [1.688855528831482, -6.264052867889404], + [-2.4966933727264404, -0.2338787317276001], + [-2.6741936206817627, 1.1106873750686646], + [-3.152177572250366, 5.387509346008301], + [6.26354455947876, -3.221714735031128], + [-1.0242053270339966, 6.001326560974121], + [-5.739053249359131, 5.779582500457764], + [3.766874313354492, -4.031458377838135], + [0.7809749841690063, -0.7464356422424316], + [2.7410032749176025, -4.327802658081055], + [1.5918830633163452, 5.404184341430664], + [-3.575819730758667, 2.2521445751190186], + [-0.0020915940403938293, 9.825950622558594], + [5.429870128631592, -1.1716526746749878], + [4.193749904632568, -5.857301235198975], + [-1.3252938985824585, 10.312180519104004], + [-5.918410778045654, 5.676569938659668], + [2.0960958003997803, 5.742707252502441], + [3.1473710536956787, -4.811079978942871], + [-3.646733045578003, 5.848718643188477], + [-3.4245946407318115, -0.7083230018615723], + [-0.1996171474456787, 9.417927742004395], + [3.370438575744629, 6.699549674987793], + [0.8599489331245422, 0.7616780996322632], + [-0.2922430634498596, 10.026691436767578], + [8.458548545837402, -2.6267716884613037], + [8.70052433013916, -2.313120126724243], + [2.984631299972534, -4.74997615814209], + [-0.19765710830688477, 10.04256534576416], + [-3.1213924884796143, 6.1252241134643555], + [9.241913795471191, -2.725832462310791], + [-0.31661349534988403, 9.55355167388916], + [1.5565637350082397, -4.537964820861816], + [8.535441398620605, -2.2119104862213135], + [2.444765329360962, -7.4742751121521], + [-0.2514439821243286, 8.779945373535156], + [-0.35736405849456787, 10.647232055664062], + [-2.7208845615386963, 1.985282063484192], + [-0.2845079302787781, 10.088659286499023], + [0.5996065735816956, -3.675205945968628], + [9.79415225982666, -2.7418768405914307], + [-0.20783603191375732, 10.125354766845703], + [1.6772234439849854, -8.273627281188965], + [1.790635347366333, -6.205343246459961], + [-4.896629810333252, -2.497138261795044], + [-2.1771650314331055, 2.0311083793640137], + [-5.042323589324951, 2.1254048347473145], + [-6.619758605957031, 7.807762145996094], + [-5.134965419769287, -2.8385679721832275], + [-5.05135440826416, -3.2590644359588623], + [2.261287212371826, -0.901764988899231], + [-5.3436055183410645, -2.832252264022827], + [8.158310890197754, -2.3245792388916016], + [3.0898849964141846, -4.626585006713867], + [2.3282854557037354, -5.22668981552124], + [-4.57185697555542, -3.2307283878326416], + [-3.4078214168548584, -3.510845899581909], + [-7.458545207977295, -1.2589031457901], + [-2.1199090480804443, 2.6838996410369873], + [1.7360731363296509, -3.231999635696411], + [-3.66080641746521, -2.193077325820923], + [-2.466726541519165, 1.7532436847686768], + [-4.7037553787231445, -0.45080074667930603], + [-7.956434726715088, -0.7938984632492065], + [-3.77616286277771, -0.9911441206932068], + [-0.09946966916322708, 8.921433448791504], + [-4.960086345672607, -2.599608898162842], + [8.801665306091309, -2.508739471435547], + [2.4075284004211426, 4.942627429962158], + [-4.193215370178223, 4.961893081665039], + [-2.679928779602051, 1.7219310998916626], + [-6.99982213973999, 1.7837573289871216], + [-0.21374434232711792, 10.286201477050781], + [-3.277456283569336, 2.2853376865386963], + [-8.168917655944824, -1.1702693700790405], + [-4.571437358856201, 3.0894908905029297], + [3.2620315551757812, 6.638011932373047], + [0.2578481435775757, 6.079115867614746], + [8.722819328308105, -2.3858509063720703], + [2.6552488803863525, -4.244370460510254], + [-2.2481720447540283, 2.2753889560699463], + [-0.29220977425575256, -1.3377405405044556], + [-6.143392086029053, 0.8604625463485718], + [3.0289723873138428, -4.5637712478637695], + [-3.8436777591705322, 2.3697822093963623], + [-1.952394962310791, 2.6188652515411377], + [-4.319730281829834, -4.019336223602295], + [-0.14872652292251587, 10.184651374816895], + [1.7357122898101807, -4.986479759216309], + [-2.74104380607605, 3.0060460567474365], + [-0.040753789246082306, 10.119885444641113], + [-2.5913591384887695, -1.5592669248580933], + [1.0590678453445435, 0.5147690176963806], + [-0.311451256275177, 9.786664962768555], + [-6.053141117095947, -1.277827501296997], + [-7.290276050567627, 8.817310333251953], + [-5.2636613845825195, 7.243491172790527], + [10.043988227844238, -2.764458179473877], + [1.567839503288269, 4.035301208496094], + [0.2091125249862671, 0.0919046401977539], + [-4.0525994300842285, -2.3770511150360107], + [2.8869130611419678, -4.480472564697266], + [2.8730833530426025, -4.4648308753967285], + [2.119049310684204, -10.444967269897461], + [-6.741212368011475, 8.185569763183594], + [-2.185317277908325, 0.2901514768600464], + [-0.8571257591247559, 3.3752050399780273], + [-3.6612493991851807, 4.045746803283691], + [-2.569411039352417, 0.28882819414138794], + [6.693417072296143, -1.319804310798645], + [-5.821493148803711, 1.3583346605300903], + [-2.063518762588501, 1.0509048700332642], + [1.780465841293335, 5.4559221267700195], + [3.243339776992798, -5.327205657958984], + [-8.334712028503418, -0.4827629327774048], + [8.04515552520752, -2.312664747238159], + [2.068721294403076, 5.209965705871582], + [-6.810543537139893, 8.918343544006348], + [-1.938552737236023, 2.6985366344451904], + [-5.04249382019043, 6.083629608154297], + [-5.021833419799805, -1.3521225452423096], + [-4.265583515167236, -2.071044921875], + [3.8529000282287598, -1.9858464002609253], + [8.618088722229004, -2.4215121269226074], + [-1.892560601234436, 2.091722011566162], + [1.0339326858520508, -4.916699409484863], + [2.7597665786743164, -6.36329460144043], + [-4.642637252807617, -3.352773427963257], + [2.518954038619995, -6.164060592651367], + [-2.99078631401062, 0.6685003042221069], + [3.1878180503845215, -4.771801471710205], + [3.0363590717315674, -4.559799671173096], + [-0.13102877140045166, 9.510279655456543], + [2.987168073654175, -4.659091949462891], + [-0.32144904136657715, -0.31556880474090576], + [6.472775936126709, -1.2714017629623413], + [-4.0213398933410645, -3.563692569732666], + [2.874678611755371, -4.360374927520752], + [8.981060981750488, -2.5302371978759766], + [-3.219677686691284, -5.120425224304199], + [-5.578784465789795, -3.831543207168579], + [-0.5884020924568176, -1.9931235313415527], + [-5.304096221923828, 4.429178237915039], + [2.6585543155670166, -3.8235623836517334], + [3.513472318649292, 6.678767204284668], + [-6.637545585632324, -1.793515920639038], + [-2.5597681999206543, 2.5354738235473633], + [-1.3645009994506836, -0.6709598898887634], + [-6.064708709716797, -3.111151933670044], + [-4.113308429718018, 1.4530830383300781], + [2.066462516784668, -7.918519496917725], + [-6.914713382720947, -1.2508541345596313], + [-2.426748275756836, 1.7061711549758911], + [-5.163062572479248, 6.066837310791016], + [3.376638889312744, -4.354873180389404], + [-0.13474547863006592, 10.194559097290039], + [-3.8379995822906494, -4.482752799987793], + [5.421112537384033, -1.0411099195480347], + [-0.2336159348487854, 9.958672523498535], + [-2.6061956882476807, 1.3078328371047974], + [0.749321699142456, -7.670935153961182], + [-0.41723281145095825, 10.083053588867188], + [2.1184732913970947, 5.697789192199707], + [-2.388700246810913, 1.092010259628296], + [-4.554531574249268, -2.7633118629455566], + [2.4396779537200928, -4.2122650146484375], + [-4.563650131225586, 7.014313697814941], + [1.9253153800964355, -4.865375995635986], + [-2.924133539199829, 6.250915050506592], + [-4.6925048828125, -2.8131799697875977], + [-6.946832180023193, 8.156011581420898], + [0.8395678400993347, 0.11950965225696564], + [1.9338769912719727, -3.5908420085906982], + [-1.9897220134735107, 2.441168785095215], + [-3.257194757461548, 6.712616443634033], + [-4.900789737701416, 0.8262869119644165], + [-5.870323657989502, -0.4236927628517151], + [-2.2009880542755127, 0.8296947479248047], + [2.9102981090545654, 0.7833760976791382], + [-7.747368335723877, 1.7854236364364624], + [2.764155626296997, -4.2064313888549805], + [6.28671932220459, -1.3312913179397583], + [-0.562882661819458, -2.255838632583618], + [-2.2716286182403564, 3.2532384395599365], + [-2.3601596355438232, 1.7797693014144897], + [-4.334752559661865, 6.354265213012695], + [1.7876861095428467, -2.989128828048706], + [-6.954049110412598, -1.5726711750030518], + [2.890686273574829, -3.4977517127990723], + [-3.0016605854034424, 2.8828113079071045], + [7.233171463012695, -4.4404778480529785], + [0.28206372261047363, -0.01959434524178505], + [6.856586456298828, -1.5072165727615356], + [2.9207141399383545, -2.7567968368530273], + [-0.20040518045425415, 9.814518928527832], + [-3.848655939102173, -4.929900646209717], + [-4.588698387145996, -2.3122949600219727], + [-4.037031650543213, 5.152923583984375], + [2.097537040710449, -9.98033332824707], + [-5.117332935333252, -2.5014514923095703], + [5.594241619110107, -1.278734803199768], + [-5.097793102264404, 3.5880115032196045], + [0.9005818367004395, 4.5924835205078125], + [-5.095909118652344, 3.774021863937378], + [-4.704699993133545, -3.0113365650177], + [-2.931563138961792, 4.780932426452637], + [2.0143795013427734, -8.960155487060547], + [-4.509917736053467, -3.0204832553863525], + [7.73521089553833, -1.9526728391647339], + [-1.9837892055511475, 0.25727036595344543], + [-1.3717823028564453, 0.06550300121307373], + [1.7677092552185059, -5.66002082824707], + [-4.468227386474609, -4.16828727722168], + [-3.8339595794677734, 5.797338008880615], + [8.518542289733887, -2.2019264698028564], + [-2.9588735103607178, 5.190966606140137], + [-2.6402487754821777, 2.3597779273986816], + [-1.43230140209198, 0.3002384901046753], + [2.1311824321746826, -8.545785903930664], + [9.920336723327637, -2.7702059745788574], + [-3.1249656677246094, -1.8599313497543335], + [-3.4651403427124023, -4.235890865325928], + [0.17867118120193481, 8.074272155761719], + [-3.432633876800537, -2.1003167629241943], + [1.3629072904586792, -6.483138084411621], + [-5.883328914642334, 2.2926018238067627], + [-5.353011608123779, 1.6606388092041016], + [7.541467189788818, -1.840778112411499], + [2.0682225227355957, 5.567366600036621], + [-2.2309772968292236, 2.905402421951294], + [-5.793029308319092, 4.426693916320801], + [2.8057496547698975, -4.245146751403809], + [-0.29605817794799805, -1.5575305223464966], + [-6.713214874267578, -1.492020845413208], + [-2.719287633895874, -2.2265236377716064], + [-0.6039798259735107, -1.6706982851028442], + [-0.3166976571083069, 10.233028411865234], + [-4.288201332092285, 7.859392166137695], + [8.037986755371094, -1.954267144203186], + [4.798210620880127, -6.114597320556641], + [2.426581621170044, -3.724807024002075], + [-1.6248085498809814, -2.1275618076324463], + [-5.218086242675781, 6.213459491729736], + [4.8376240730285645, -4.098644256591797], + [-0.14007478952407837, 9.675766944885254], + [-0.8706514239311218, -1.6619280576705933], + [-3.532532215118408, -1.5066007375717163], + [2.585566759109497, -5.661408424377441], + [8.750740051269531, -2.4896295070648193], + [-3.9589054584503174, 6.616778373718262], + [2.8095734119415283, -4.062567234039307], + [-5.49662446975708, -1.4829286336898804], + [2.5814645290374756, -4.022050857543945], + [8.341704368591309, -2.593390941619873], + [-0.15986230969429016, -1.2585448026657104], + [-9.677374839782715, -0.6921931505203247], + [5.6970720291137695, -1.4128652811050415], + [-5.493577480316162, 7.018911361694336], + [-4.058055877685547, -3.7775745391845703], + [-0.5507593750953674, 11.528400421142578], + [-2.2463324069976807, -2.875706434249878], + [-0.18704324960708618, 10.329633712768555], + [1.7397263050079346, -8.380970001220703], + [2.0191752910614014, -3.116664171218872], + [-2.9103853702545166, -4.339510917663574], + [-0.2963690757751465, -0.5922738313674927], + [0.8529142737388611, 6.083554267883301], + [-3.597034215927124, 5.34230899810791], + [-4.4796295166015625, -2.3096888065338135], + [-5.878228664398193, 7.325020790100098], + [-5.020651340484619, -3.595327854156494], + [0.5910753607749939, -6.058021545410156], + [7.4362287521362305, -2.4859890937805176], + [-6.856557369232178, -1.4605433940887451], + [-0.14558452367782593, 10.135692596435547], + [1.1308600902557373, -3.3272411823272705], + [5.997513771057129, -2.3929030895233154], + [-0.18485814332962036, 10.186877250671387], + [-5.47805643081665, 5.931619644165039], + [-2.2672698497772217, 0.09107953310012817], + [-4.490137577056885, -2.1473965644836426], + [1.8517718315124512, 5.3474531173706055], + [-4.744826793670654, -0.09366679191589355], + [-2.4445276260375977, -1.1627427339553833], + [-3.520014524459839, 5.738511085510254], + [-4.929427623748779, -1.8928176164627075], + [-3.8381619453430176, -1.318300724029541], + [-6.280075550079346, -1.8644356727600098], + [-5.419217109680176, 4.672540187835693], + [-5.15230131149292, -3.461165428161621], + [-0.29220050573349, 10.488662719726562], + [8.782113075256348, -2.109626293182373], + [1.343797206878662, 5.828823089599609], + [5.785140514373779, 7.359564781188965], + [-4.206343650817871, 4.815715789794922], + [3.1107943058013916, -4.739289283752441], + [2.9160358905792236, -4.3986992835998535], + [1.9762020111083984, 5.3925933837890625], + [7.305566310882568, -4.583278656005859], + [-5.2706522941589355, 7.037502765655518], + [7.7536139488220215, -2.2318990230560303], + [-4.621805667877197, -3.725220203399658], + [7.9145612716674805, -2.6133294105529785], + [7.420942306518555, -3.097180128097534], + [-5.3457255363464355, -2.276531457901001], + [8.934748649597168, -2.575819730758667], + [8.964879035949707, -2.4777162075042725], + [1.5773684978485107, -7.859583377838135], + [-3.1028387546539307, 5.000701427459717], + [1.0330493450164795, -0.5819806456565857], + [-2.3163936138153076, 2.000131607055664], + [-7.685112476348877, -1.9769721031188965], + [-4.516962051391602, -4.790935039520264], + [-0.34911876916885376, 10.558469772338867], + [3.2193264961242676, -5.797346115112305], + [6.289741516113281, -1.49187171459198], + [-4.567107200622559, -2.8483572006225586], + [3.131397008895874, -4.706045627593994], + [0.5451125502586365, 0.6790616512298584], + [3.2250311374664307, -4.84298849105835], + [-0.3875243067741394, 10.916698455810547], + [-2.943463087081909, -2.1180050373077393], + [2.0780727863311768, -7.422856330871582], + [0.8573338389396667, -5.962794303894043], + [-2.8506789207458496, 1.9566951990127563], + [-5.0685625076293945, 2.2489125728607178], + [-4.691083908081055, 5.3778581619262695], + [2.2388718128204346, 0.7063286304473877], + [-5.891294479370117, -2.7557597160339355], + [-5.383335590362549, 2.781619071960449], + [-5.3971357345581055, 0.19685113430023193], + [-2.968768358230591, -4.947710990905762], + [2.7027482986450195, 6.399840354919434], + [3.0140130519866943, -6.415672302246094], + [-0.6996282339096069, 10.27009391784668], + [2.6774232387542725, -4.139822959899902], + [-0.2444879114627838, 0.19522088766098022], + [-5.124833583831787, -2.3021788597106934], + [2.139755964279175, 5.541253089904785], + [0.8972256779670715, -0.11545556783676147], + [1.437605857849121, -1.4689334630966187], + [-5.567439556121826, -2.546799898147583], + [-1.777637004852295, 5.838807106018066], + [-4.08303689956665, -0.6828463077545166], + [2.8667514324188232, -4.138913154602051], + [-5.425514221191406, -1.5606385469436646], + [0.9522977471351624, 3.648851156234741], + [-1.201837420463562, 0.03958570584654808], + [2.5381903648376465, -3.6905763149261475], + [-3.7079288959503174, -1.7105203866958618], + [-2.471889019012451, 1.782686471939087], + [7.201888561248779, -3.697077512741089], + [-4.532482147216797, 6.056935787200928], + [-4.004959583282471, 5.899345397949219], + [-4.538985729217529, 5.735246658325195], + [-5.04379415512085, 7.164950370788574], + [1.328484058380127, 6.715852737426758], + [2.5204551219940186, -4.015893936157227], + [-0.1966039538383484, 9.635902404785156], + [-4.205774307250977, -3.817964553833008], + [-2.3177342414855957, 1.0197898149490356], + [8.732429504394531, -2.2513513565063477], + [-2.521897077560425, 1.3014607429504395], + [2.646357297897339, -6.760366916656494], + [-7.556258678436279, 9.150237083435059], + [-0.3880014419555664, 9.691497802734375], + [-2.349872589111328, 2.0603749752044678], + [-5.2764973640441895, -3.4489307403564453], + [2.5744316577911377, -4.125198841094971], + [-2.674511194229126, 2.550894021987915], + [-3.9817323684692383, 6.68052864074707], + [1.7628047466278076, -3.402803659439087], + [-2.112313747406006, 2.915630578994751], + [-5.495641708374023, -0.6908794641494751], + [-1.4678574800491333, 0.7614017128944397], + [-6.950890064239502, 8.842646598815918], + [-8.054133415222168, 9.752016067504883], + [2.0608959197998047, -5.812015533447266], + [-7.142921447753906, 9.276552200317383], + [-2.2631328105926514, 1.4078867435455322], + [-6.300922393798828, 8.246904373168945], + [-4.980287075042725, -2.373431444168091], + [-1.3926723003387451, 4.7617998123168945], + [-5.403660774230957, 1.7534394264221191], + [2.478327512741089, -4.03410005569458], + [0.08643876761198044, 8.676998138427734], + [-2.7146189212799072, 1.7504632472991943], + [-4.356517314910889, 1.076267123222351], + [-5.5866875648498535, -4.170295238494873], + [-5.964726448059082, 2.1576099395751953], + [-4.283931732177734, -2.0739824771881104], + [2.809692144393921, -4.254949569702148], + [-2.0863959789276123, 2.5607004165649414], + [-4.167436599731445, -3.182276964187622], + [-3.6092779636383057, 6.164051055908203], + [-5.127161979675293, 7.1295976638793945], + [-2.4929513931274414, 1.1942123174667358], + [-0.10993070155382156, 10.570817947387695], + [9.449080467224121, -2.591198205947876], + [-3.542590379714966, 5.112095355987549], + [-4.53179931640625, -2.646965265274048], + [-2.2562859058380127, -1.8246439695358276], + [1.4931739568710327, 3.332885503768921], + [-4.698602199554443, -0.79429030418396], + [-6.518758296966553, 8.064360618591309], + [2.456193208694458, -3.9272589683532715], + [1.7357852458953857, -5.761624336242676], + [2.0654056072235107, 5.61650276184082], + [-4.345253944396973, -1.5043504238128662], + [5.282905578613281, -1.1543227434158325], + [5.626607894897461, -2.174443006515503], + [-3.3015778064727783, -1.0534640550613403], + [-5.139463901519775, -3.4719913005828857], + [-4.57962703704834, -2.381240129470825], + [6.866832256317139, 8.85372543334961], + [1.5399996042251587, 5.243339538574219], + [6.223485469818115, -2.254836320877075], + [3.0401549339294434, -4.768213272094727], + [1.3192815780639648, -6.938375473022461], + [-4.2125678062438965, -2.93986439704895], + [8.333915710449219, -2.003596067428589], + [-5.301595687866211, -0.1536099910736084], + [-4.5565667152404785, -2.134268283843994], + [-4.941860675811768, -2.9826066493988037], + [5.17989444732666, -2.0763285160064697], + [-5.188173770904541, -3.785956621170044], + [2.9149348735809326, -4.3682861328125], + [-4.380635738372803, -2.2573533058166504], + [-4.157772541046143, -1.8459948301315308], + [-3.176953077316284, -2.4884142875671387], + [-0.25067633390426636, 9.962236404418945], + [-2.5013644695281982, 1.5301353931427002], + [3.1916086673736572, 1.3979439735412598], + [2.282397508621216, -3.79636812210083], + [1.8710094690322876, -4.512201309204102], + [-5.993692874908447, 4.820337772369385], + [1.0341591835021973, -6.027978897094727], + [2.7282121181488037, -4.7870988845825195], + [5.2160115242004395, -1.1769074201583862], + [-6.019917011260986, -2.4256391525268555], + [9.325407981872559, -2.5969488620758057], + [-2.7001953125, 2.3814804553985596], + [-0.013870961964130402, 10.089193344116211], + [-4.322533130645752, -2.4939067363739014], + [-1.3379945755004883, 4.213850975036621], + [-2.2980587482452393, 2.477250576019287], + [-5.1288065910339355, 7.41304874420166], + [3.159571409225464, -4.888538837432861], + [2.195183515548706, 5.717230319976807], + [-2.4282379150390625, 2.545226812362671], + [-0.843447208404541, -0.721316933631897], + [-5.9245285987854, 1.594617486000061], + [-6.558136463165283, 8.291385650634766], + [-4.5152764320373535, -2.240708827972412], + [-5.5621018409729, 3.1637790203094482], + [-3.111165761947632, 3.376338243484497], + [-4.2752461433410645, 5.210166931152344], + [8.047093391418457, -2.408816337585449], + [-1.7103129625320435, -3.690748453140259], + [2.3045294284820557, -6.472784519195557], + [-0.3088197112083435, 10.782817840576172], + [-3.607449769973755, -2.0162606239318848], + [-3.7417304515838623, 6.091866493225098], + [3.1190707683563232, -4.674181938171387], + [6.046380996704102, -2.6990199089050293], + [-5.470989227294922, 6.783371448516846], + [-0.3816407322883606, -0.8280363082885742], + [-1.5813709497451782, -0.7899761199951172], + [8.48230266571045, -2.334030866622925], + [1.1229900121688843, -4.822243690490723], + [-5.462937831878662, -2.501633644104004], + [-3.7726998329162598, -2.0486176013946533], + [-0.008439965546131134, 8.433138847351074], + [-4.7055158615112305, 2.0528016090393066], + [-3.4700706005096436, -1.4987329244613647], + [-6.365797996520996, 3.409717321395874], + [-0.3816429674625397, -1.2476857900619507], + [-0.251186728477478, 10.065425872802734], + [-5.3489251136779785, 3.287092924118042], + [2.149656057357788, -6.574963569641113], + [1.8989644050598145, -3.5788919925689697], + [-0.7048314809799194, -0.8840072751045227], + [3.3726344108581543, -0.6262531876564026], + [-5.267431735992432, 3.862281560897827], + [-6.133687496185303, 6.701833248138428], + [-5.416984558105469, 1.2263602018356323], + [1.9730932712554932, 5.802936553955078], + [3.541437864303589, 5.075169563293457], + [2.003734827041626, -2.7887327671051025], + [-5.317840099334717, -2.5541534423828125], + [8.994668960571289, -2.627938985824585], + [10.122713088989258, -2.805408000946045], + [4.3219780921936035, -1.1857105493545532], + [5.311391353607178, -1.342269778251648], + [4.749285697937012, 6.792176246643066], + [-5.0426201820373535, -3.428973913192749], + [0.6821879148483276, -3.146324396133423], + [2.464096784591675, -3.7175209522247314], + [3.085315227508545, 1.0659254789352417], + [-6.3725175857543945, -1.6065919399261475], + [-4.805631160736084, -2.190648078918457], + [8.880838394165039, -2.653597831726074], + [2.4920756816864014, -3.1668102741241455], + [1.1334941387176514, 0.20806819200515747], + [4.149459362030029, -3.28696608543396], + [-5.86037015914917, -1.9603198766708374], + [-3.6816720962524414, 6.456676483154297], + [-0.28132861852645874, 10.472583770751953], + [4.271487236022949, 0.20440205931663513], + [-1.3516381978988647, 0.3384435176849365], + [3.7437644004821777, 6.619465351104736], + [8.117027282714844, -2.168064594268799], + [-1.4572452306747437, -1.200769066810608], + [-0.5647128224372864, 9.07429027557373], + [-5.4655070304870605, 5.428457260131836], + [1.6007988452911377, 4.95013952255249], + [-4.590800762176514, -2.297732353210449], + [-1.3816981315612793, -0.35909053683280945], + [2.4495668411254883, 1.0871574878692627], + [-0.23555946350097656, 8.77902603149414], + [2.9297239780426025, -4.404973030090332], + [-1.271696925163269, 9.723548889160156], + [1.4583100080490112, -7.394664287567139], + [7.005350589752197, -5.4124908447265625], + [-3.711982011795044, -1.5425077676773071], + [-3.2063252925872803, 5.829855918884277], + [-7.449141979217529, 9.037580490112305], + [1.6458854675292969, -6.017465591430664], + [3.16699481010437, -4.738895893096924], + [-3.0659985542297363, -2.039977550506592], + [9.23477554321289, -2.518073797225952], + [6.354164123535156, -1.371795415878296], + [-0.25987738370895386, -0.6844331622123718], + [3.011573553085327, -5.410150527954102], + [4.123051643371582, -4.970237731933594], + [-1.381392002105713, 8.633780479431152], + [-1.935971975326538, 0.6476123929023743], + [-2.2269794940948486, 0.2780035734176636], + [-4.675775051116943, -3.1884939670562744], + [-3.9102838039398193, -0.8897960186004639], + [-2.2156741619110107, 1.3526405096054077], + [1.7495299577713013, -3.1478493213653564], + [2.2903432846069336, -10.868718147277832], + [0.10209216922521591, -1.0686112642288208], + [-2.1759331226348877, 2.311213970184326], + [-0.7722492814064026, 12.772769927978516], + [-4.987498760223389, -2.2967824935913086], + [-1.931060552597046, 0.5182263851165771], + [-5.415596008300781, 6.249239921569824], + [-5.737239837646484, 1.460322380065918], + [-0.38223475217819214, 9.443072319030762], + [-2.1676371097564697, 2.1160435676574707], + [1.8294026851654053, 5.340022087097168], + [-0.23123162984848022, 9.594788551330566], + [-2.152531385421753, -2.068316698074341], + [1.7845829725265503, 5.614955902099609], + [7.388570308685303, -2.4546163082122803], + [3.024620294570923, -4.536200523376465], + [-0.21269261837005615, -1.039438009262085], + [5.076165676116943, -3.555691957473755], + [-0.25644272565841675, 10.23422622680664], + [1.675706148147583, -5.762638568878174], + [5.708624362945557, -1.81157648563385], + [-1.9703702926635742, 5.971050262451172], + [-5.288642883300781, -3.2821872234344482], + [-7.440986633300781, -1.7994474172592163], + [-1.1311430931091309, -0.6687765121459961], + [-5.3228278160095215, 4.674445152282715], + [6.412973403930664, 7.975395202636719], + [-4.259617328643799, -2.6114425659179688], + [-4.6839776039123535, 7.279594421386719], + [10.602771759033203, -2.932328939437866], + [-7.1368889808654785, -1.820029377937317], + [3.0516457557678223, -5.0987348556518555], + [3.3265769481658936, -4.967684745788574], + [-2.0691473484039307, 2.307490110397339], + [-4.745612621307373, -1.8149821758270264], + [2.3477396965026855, 5.875665187835693], + [-0.23803478479385376, 9.654858589172363], + [-0.07276401668787003, -0.2810947000980377], + [8.793436050415039, -2.954943895339966], + [2.8775432109832764, -4.422415733337402], + [3.212779998779297, -3.7259340286254883], + [-0.4321010708808899, 10.401275634765625], + [1.5998324155807495, 4.4807233810424805], + [-4.77595853805542, 2.1174681186676025], + [2.2084598541259766, -4.799520492553711], + [2.9278013706207275, -4.413646697998047], + [5.982547760009766, -4.255665302276611], + [-4.1653056144714355, 4.612968444824219], + [-3.736968755722046, 5.9042582511901855], + [5.666713237762451, 7.719891548156738], + [-0.36795473098754883, 9.237567901611328], + [-0.8822484612464905, -0.8652145862579346], + [-8.46719741821289, -0.9608066082000732], + [-1.5241830348968506, 5.402900695800781], + [1.181196928024292, 6.346807479858398], + [-2.629734754562378, -3.6817758083343506], + [-2.048811197280884, 0.43083158135414124], + [-2.9148290157318115, -4.1121344566345215], + [-5.348602771759033, -2.906046152114868], + [2.4075963497161865, -3.8220300674438477], + [2.451312303543091, 1.1037322282791138], + [0.18363314867019653, 9.444046974182129], + [5.918516635894775, -1.2304438352584839], + [2.1996428966522217, -7.084205150604248], + [-5.5032782554626465, 6.890159606933594], + [1.3811262845993042, 5.045701026916504], + [8.430194854736328, -2.855092763900757], + [-0.4535824954509735, -1.4314504861831665], + [-4.7995429039001465, -4.347204208374023], + [6.677791118621826, -1.389661192893982], + [-4.002374172210693, 5.171587944030762], + [0.9239904284477234, 6.692103385925293], + [-5.389011859893799, 6.481576919555664], + [-0.40928855538368225, -1.0703331232070923], + [-0.2365936040878296, 0.25598832964897156], + [-5.14125394821167, 2.061689615249634], + [-6.363196849822998, 8.204200744628906], + [3.0329744815826416, -4.682509899139404], + [-5.689828395843506, 5.492666244506836], + [-6.747448444366455, -1.534084439277649], + [1.6707484722137451, -7.0721821784973145], + [-4.239421844482422, -1.2009093761444092], + [2.937255382537842, -5.568770408630371], + [3.085554361343384, -4.623830795288086], + [1.8142849206924438, 5.287409782409668], + [-0.32803335785865784, -1.6158496141433716], + [-7.710448741912842, -0.11866354942321777], + [-5.005828380584717, -2.318573236465454], + [-2.4634878635406494, 0.8279167413711548], + [-2.321103811264038, 0.547336220741272], + [-4.085588455200195, -5.0077104568481445], + [2.8696839809417725, 0.838083028793335], + [6.708232402801514, -1.9915958642959595], + [3.0368094444274902, 6.371585845947266], + [6.469295978546143, -5.3182878494262695], + [1.4193387031555176, 0.34343844652175903], + [-5.678737163543701, -2.7137327194213867], + [-4.486046314239502, -1.4983500242233276], + [2.45137619972229, 1.2167870998382568], + [-5.073365688323975, 4.786463737487793], + [9.071463584899902, -2.4376718997955322], + [-5.517411708831787, -4.116466999053955], + [5.227726459503174, -2.25494384765625], + [-4.57157564163208, -1.1529408693313599], + [1.468625545501709, -8.294539451599121], + [-4.884964466094971, -3.497953176498413], + [-6.211902141571045, -0.6275681853294373], + [-1.980722427368164, 0.7614107131958008], + [-8.835907936096191, -1.859244704246521], + [-2.5137290954589844, 3.216233015060425], + [5.64190149307251, -1.913063645362854], + [2.2597856521606445, -3.0848543643951416], + [-0.3945115804672241, 6.79020881652832], + [-4.239297389984131, -3.433701992034912], + [-0.1413455605506897, -0.8964400291442871], + [2.7056286334991455, -4.112027645111084], + [4.2945027351379395, -5.753999710083008], + [0.051249854266643524, -0.7313594222068787], + [8.560320854187012, -2.3401553630828857], + [-2.6286966800689697, -3.140436887741089], + [-4.073924541473389, -2.1407511234283447], + [-3.5596249103546143, -1.8543537855148315], + [0.09841272979974747, -0.33235034346580505], + [1.0107982158660889, 4.83154296875], + [-2.4669058322906494, 2.0411691665649414], + [-4.6902241706848145, 5.255927085876465], + [-0.58359694480896, -0.9354346990585327], + [-5.771216869354248, 7.043524742126465], + [-3.877737283706665, -4.198818206787109], + [3.1057841777801514, -4.911177635192871], + [-2.548459768295288, 2.309880018234253], + [0.09275012463331223, 5.972736358642578], + [-2.5051188468933105, -2.183157205581665], + [-0.2936980128288269, 9.766990661621094], + [7.409365177154541, -1.9250435829162598], + [-4.835666179656982, -4.641148090362549], + [6.455122470855713, -1.629043698310852], + [-2.3211402893066406, 1.2701658010482788], + [-2.5689966678619385, 0.3578141927719116], + [-0.1724984049797058, 9.8253173828125], + [-2.8068835735321045, -1.3054741621017456], + [7.177274227142334, -1.3961025476455688], + [-5.122162818908691, -0.4193611145019531], + [2.172048807144165, -3.561436653137207], + [3.2101705074310303, -6.360118389129639], + [-2.9122822284698486, -1.3863173723220825], + [-2.0453684329986572, 1.885520577430725], + [-2.4630043506622314, 1.491312026977539], + [-2.9865708351135254, 0.13765382766723633], + [1.5841307640075684, -3.04140305519104], + [0.6486096978187561, -4.307372093200684], + [-5.0777668952941895, -2.9688987731933594], + [8.307929039001465, -2.153764486312866], + [4.825305461883545, -6.560220718383789], + [-3.194629430770874, 2.7339439392089844], + [9.192320823669434, -2.6113064289093018], + [6.325522422790527, 7.916408061981201], + [-7.562011241912842, 4.340850830078125], + [-2.516733169555664, 1.7263908386230469], + [-0.9273133277893066, -3.113205909729004], + [2.3836452960968018, 5.819117069244385], + [3.2734062671661377, 6.29987096786499], + [-2.4083502292633057, 1.734341025352478], + [0.8353376388549805, -0.4370298385620117], + [-3.174283266067505, 5.920642852783203], + [7.407467842102051, -2.461754560470581], + [-1.7920012474060059, -0.16287967562675476], + [6.7415618896484375, -1.5491770505905151], + [1.8160731792449951, 3.811769485473633], + [2.3144729137420654, 5.980877876281738], + [6.446322441101074, -1.7659779787063599], + [-4.103024005889893, -2.7230358123779297], + [-1.9914460182189941, 3.6486904621124268], + [-4.1993632316589355, 4.484560012817383], + [-0.6089034676551819, 10.533502578735352], + [-0.2243804931640625, 10.21192741394043], + [-3.830829381942749, 5.115309238433838], + [-4.638332843780518, 4.964781761169434], + [-0.3071306049823761, -1.1623458862304688], + [-4.607651233673096, 3.6775693893432617], + [1.5212925672531128, -8.185281753540039], + [2.3197743892669678, -4.569106101989746], + [-5.47493314743042, 6.368956089019775], + [-4.421683311462402, 6.319614410400391], + [6.686426639556885, -1.310990333557129], + [2.933345317840576, -4.5409650802612305], + [3.8065338134765625, -0.4140365421772003], + [-4.649603366851807, -4.590673446655273], + [-4.655665874481201, 6.177647113800049], + [-0.4031139016151428, 9.896787643432617], + [-0.47573137283325195, 10.629961013793945], + [2.7341339588165283, -4.617295742034912], + [6.364072799682617, -2.824509859085083], + [7.470542907714844, -1.7186312675476074], + [-2.3869781494140625, 1.7958472967147827], + [-4.44767427444458, -3.1863088607788086], + [-5.80778169631958, 4.190937519073486], + [-4.288912296295166, -3.9332053661346436], + [2.690430164337158, 5.058374881744385], + [-6.569861888885498, 7.969667434692383], + [9.559382438659668, -3.0930416584014893], + [1.8490252494812012, 5.494012355804443], + [-2.4023001194000244, 1.4103569984436035], + [-4.266911029815674, -4.289096832275391], + [1.7637994289398193, -7.819910049438477], + [2.0005505084991455, -3.585374593734741], + [-7.204991817474365, -1.3591206073760986], + [-4.0945143699646, 2.83430814743042], + [-5.442200183868408, 5.829947471618652], + [-5.454015254974365, -4.191040992736816], + [2.6937215328216553, -5.606659889221191], + [-5.089606761932373, 3.3275253772735596], + [1.5508129596710205, -7.860318183898926], + [-2.908259630203247, -2.6017138957977295], + [-5.5579304695129395, 2.6109821796417236], + [1.2571132183074951, -8.101434707641602], + [-7.6458659172058105, -1.4805411100387573], + [-2.463618516921997, 1.7232744693756104], + [-5.197753429412842, -2.3816041946411133], + [2.208507776260376, -5.998628616333008], + [0.45277732610702515, -0.6914587020874023], + [-7.443017482757568, -2.1874964237213135], + [-0.821784257888794, -0.7155288457870483], + [-6.1457390785217285, -2.1070010662078857], + [-4.949812412261963, -3.3346264362335205], + [8.447663307189941, -2.3527848720550537], + [3.5914220809936523, 6.424382209777832], + [-5.126927375793457, 5.362024307250977], + [-5.631534099578857, -1.7666572332382202], + [2.4127297401428223, -3.746716260910034], + [-5.280625820159912, 2.553403854370117], + [7.203596591949463, -1.7728291749954224], + [-0.3146600127220154, 9.39716911315918], + [-1.9462074041366577, 2.4287586212158203], + [-7.858631134033203, -0.5085638761520386], + [1.399491548538208, -7.662043571472168], + [-1.1290488243103027, -0.6959691047668457], + [2.3519389629364014, -5.019288539886475], + [-2.037794589996338, 0.08516168594360352], + [-5.4934306144714355, -2.957148551940918], + [-2.501429796218872, 5.841763973236084], + [-0.21775144338607788, 9.645874977111816], + [-0.7498653531074524, -1.5802339315414429], + [-5.197827339172363, -2.464657783508301], + [-3.0279572010040283, 5.86754846572876], + [-0.4965282082557678, 11.394359588623047], + [1.6680684089660645, 5.318185329437256], + [3.0178070068359375, -4.787521839141846], + [6.987977981567383, -6.106296539306641], + [2.3424317836761475, -4.212367534637451], + [-0.2902565598487854, 10.751068115234375], + [2.6402575969696045, -6.959038734436035], + [-2.051030397415161, 0.6806426048278809], + [0.10318813472986221, -0.31281009316444397], + [-3.672759771347046, 4.247800827026367], + [-5.331860065460205, -0.9653822183609009], + [-4.074857234954834, -3.390364646911621], + [-5.320174694061279, -2.458970308303833], + [-0.20636498928070068, 9.623847007751465], + [8.709808349609375, -2.662259340286255], + [-3.9551937580108643, -2.793752670288086], + [-5.550384044647217, -1.5204191207885742], + [2.8552701473236084, 5.837830543518066], + [7.872216701507568, -2.0158419609069824], + [0.05485870689153671, -0.6204855442047119], + [-6.9887824058532715, 8.51557445526123], + [-3.5048649311065674, -2.591900587081909], + [3.218022584915161, -4.808608055114746], + [-2.636060953140259, 0.3954418897628784], + [2.8343608379364014, -4.277282238006592], + [-4.857217311859131, 1.3831614255905151], + [1.4951472282409668, 1.9306434392929077], + [-5.130676746368408, 2.686499834060669], + [-2.7219460010528564, 0.0091170035302639], + [2.2122104167938232, -3.5116498470306396], + [-5.733907222747803, 2.0123770236968994], + [-6.138579845428467, 7.0626444816589355], + [1.1527364253997803, 0.15908116102218628], + [-3.6481125354766846, -0.9171780943870544], + [-3.482999086380005, 5.900512218475342], + [-5.482572078704834, -3.0901389122009277], + [6.542314529418945, -2.5751049518585205], + [-4.035241603851318, 5.316120147705078], + [-5.463775157928467, 3.448974132537842], + [-1.5660275220870972, 0.38912492990493774], + [1.4696205854415894, -7.728017807006836], + [-7.585665702819824, 9.170552253723145], + [-6.744469165802002, 4.947686195373535], + [0.03838830441236496, 10.021944046020508], + [2.4852521419525146, -3.9408352375030518], + [3.3825128078460693, 6.0872087478637695], + [0.6706104278564453, -3.964782476425171], + [-2.2641823291778564, 1.5865538120269775], + [-3.5556375980377197, -0.5832237005233765], + [-5.6787848472595215, -2.416922092437744], + [-0.22192102670669556, 9.603439331054688], + [2.0002634525299072, -7.291625022888184], + [-1.9048678874969482, 1.8725038766860962], + [2.4822752475738525, -5.987117290496826], + [7.931849956512451, -1.8637646436691284], + [-2.8336336612701416, -4.193553924560547], + [3.1947083473205566, -5.0436530113220215], + [1.034989833831787, -6.561408042907715], + [-1.6989455223083496, -1.4466091394424438], + [-3.555830240249634, -1.0210713148117065], + [9.064096450805664, -2.5176961421966553], + [-5.510076999664307, -5.871851921081543], + [1.9244396686553955, -4.336066722869873], + [1.4896159172058105, -5.895247936248779], + [0.5856148600578308, -0.40531229972839355], + [3.010348320007324, -4.520059108734131], + [-5.3487982749938965, -4.344431400299072], + [-6.1973958015441895, 6.324012756347656], + [1.5720829963684082, -8.0381498336792], + [-4.418487548828125, -4.301154136657715], + [-0.12047214061021805, 9.55868148803711], + [-5.903109550476074, -1.868849515914917], + [-2.553135633468628, 6.239465236663818], + [-6.801266193389893, 8.836322784423828], + [8.713654518127441, -2.395031452178955], + [-4.984543323516846, -5.6991424560546875], + [-5.7662272453308105, 1.614090085029602], + [1.4956773519515991, 5.041835784912109], + [-0.22384601831436157, 9.081827163696289], + [0.8080076575279236, -4.630618572235107], + [-0.6255672574043274, 12.277301788330078], + [-1.4939607381820679, -0.34066879749298096], + [-0.49140554666519165, -0.5701169967651367], + [-5.942206859588623, -1.4275017976760864], + [2.547351360321045, 5.729812145233154], + [-0.22283196449279785, 10.367911338806152], + [-0.1630232036113739, -1.4707156419754028], + [-2.2302987575531006, 0.69243323802948], + [2.535625696182251, -3.7192962169647217], + [-0.526135265827179, 9.707416534423828], + [6.712695598602295, -1.3239418268203735], + [1.1714659929275513, -6.472604751586914], + [-5.617945194244385, -1.794480800628662], + [3.2087080478668213, -5.012238025665283], + [2.2809250354766846, 4.9056854248046875], + [-5.1554856300354, 3.938836097717285], + [2.829582929611206, -4.9924397468566895], + [-3.3234293460845947, -2.112536668777466], + [0.379957914352417, 0.6427463293075562], + [-9.155755043029785, -0.9994282722473145], + [-2.321091890335083, 2.228670835494995], + [2.971532106399536, 5.6390533447265625], + [-0.15603044629096985, -1.2963200807571411], + [7.0943803787231445, -1.4793542623519897], + [2.5812158584594727, -3.955359935760498], + [3.003246545791626, -4.50679349899292], + [-5.410819053649902, 1.4437538385391235], + [-6.174879550933838, 2.3813400268554688], + [2.6428945064544678, -7.458425521850586], + [1.5274193286895752, 6.400233268737793], + [9.391738891601562, -2.621389627456665], + [-4.862481117248535, 2.187093496322632], + [9.444167137145996, -2.5820508003234863], + [1.5271811485290527, -6.648301601409912], + [-2.3047330379486084, -1.8038103580474854], + [-0.44102543592453003, -1.2592880725860596], + [1.9998281002044678, -6.339815616607666], + [0.04253207892179489, 10.089605331420898], + [1.2697454690933228, 3.1829416751861572], + [-4.39508581161499, 0.257793664932251], + [2.7784714698791504, -5.769682884216309], + [-2.397930860519409, 2.1377017498016357], + [-5.046184062957764, -3.310986280441284], + [-2.9015510082244873, -3.2892751693725586], + [1.6257655620574951, -0.6965838670730591], + [8.556269645690918, -2.2410566806793213], + [2.321777582168579, 0.5908234119415283], + [1.6673266887664795, -8.705309867858887], + [-3.630105495452881, 0.520915150642395], + [-2.080878257751465, 0.461139440536499], + [1.3792200088500977, -2.8220255374908447], + [-4.615370750427246, 4.1936140060424805], + [-5.6265997886657715, -1.04396390914917], + [-3.5057592391967773, -2.1809144020080566], + [-3.035212755203247, 0.4286354184150696], + [-3.2006266117095947, -2.3545687198638916], + [-2.736905813217163, -3.1749894618988037], + [-0.10667694360017776, 9.726558685302734], + [-5.28302526473999, -3.7110235691070557], + [6.079644680023193, -2.6603972911834717], + [-4.056866645812988, 0.6603401899337769], + [-1.0084987878799438, 0.6020209193229675], + [2.405176877975464, -9.465789794921875], + [2.443920612335205, -4.0704264640808105], + [7.0534586906433105, -1.5885035991668701], + [3.0394368171691895, -4.563248634338379], + [1.5661861896514893, 6.004764556884766], + [3.3549892902374268, -5.16620397567749], + [-5.540150165557861, -4.0528411865234375], + [2.7000324726104736, -6.047271251678467], + [-2.7154440879821777, 2.2872965335845947], + [-2.103935956954956, -1.2226674556732178], + [3.007896661758423, -4.701253414154053], + [-0.674107015132904, -1.210929036140442], + [-3.4251821041107178, -0.9495497345924377], + [1.9183934926986694, 5.4252448081970215], + [0.04137682169675827, 7.951916694641113], + [-4.580033779144287, 2.4204580783843994], + [-0.22186905145645142, 8.697139739990234], + [1.6271443367004395, 5.290635108947754], + [2.8997886180877686, 5.655829429626465], + [1.6364655494689941, -2.773019790649414], + [-0.8150439858436584, -2.0286974906921387], + [-4.079428195953369, -2.1718997955322266], + [-2.317063570022583, 0.7620980143547058], + [7.56350040435791, -1.9131972789764404], + [2.5184381008148193, -4.337953567504883], + [-5.470247745513916, 1.9651719331741333], + [2.750239372253418, -4.180459976196289], + [-4.571529865264893, -3.1896843910217285], + [-1.1530628204345703, 1.63986337184906], + [2.34879469871521, -8.345112800598145], + [-0.024967141449451447, 10.158981323242188], + [-1.0047826766967773, -0.9116805791854858], + [-2.322155714035034, 1.7535823583602905], + [-5.604137897491455, 6.108006477355957], + [1.5132761001586914, -0.01047760620713234], + [3.580317258834839, -6.983437538146973], + [-6.07698392868042, 7.830374240875244], + [7.7891926765441895, -2.8306612968444824], + [-4.333069801330566, 6.615273475646973], + [0.8467603325843811, 0.6659146547317505], + [-2.743643045425415, 2.472007989883423], + [-2.254652500152588, 2.3578784465789795], + [-6.719317436218262, 8.24311637878418], + [1.969818353652954, -0.976467490196228], + [-3.3273918628692627, -2.2361717224121094], + [-0.7974967360496521, 8.714263916015625], + [2.1720962524414062, -7.8227996826171875], + [4.745209217071533, -0.7091382145881653], + [1.4871478080749512, -6.35495662689209], + [6.967463493347168, -2.0130727291107178], + [2.6598498821258545, -3.9029462337493896], + [2.1520798206329346, 5.871571063995361], + [-7.361416816711426, 9.13041877746582], + [-2.4826207160949707, 2.1146886348724365], + [0.6489776968955994, 0.2402138113975525], + [-0.20402243733406067, -0.39084142446517944], + [3.629244804382324, 1.3841241598129272], + [5.480104446411133, 7.066005706787109], + [2.673480272293091, -5.934108734130859], + [2.22001576423645, 0.5669146776199341], + [-1.1507365703582764, 9.943225860595703], + [0.8607166409492493, -6.149592876434326], + [0.7432059049606323, 0.0024739913642406464], + [2.621351718902588, -4.570620059967041], + [-4.904991626739502, 7.361854553222656], + [-5.215383052825928, 5.985343933105469], + [2.1620588302612305, 5.063639163970947], + [-5.599182605743408, -4.136453151702881], + [8.398284912109375, -2.49235463142395], + [2.226016044616699, -8.221955299377441], + [4.673940658569336, -1.0962938070297241], + [-0.25364047288894653, 9.56907844543457], + [3.253972053527832, -4.863616466522217], + [-3.957853078842163, -5.271492958068848], + [-0.943439781665802, 9.64477825164795], + [-0.11387354880571365, 10.682719230651855], + [3.5305073261260986, -5.717710494995117], + [7.9235053062438965, -2.1794912815093994], + [1.5093740224838257, -8.601190567016602], + [2.6722538471221924, 5.987085342407227], + [-2.5264127254486084, 4.17741584777832], + [3.008246660232544, -4.6128010749816895], + [-5.77401065826416, 6.819472312927246], + [-2.5613999366760254, -3.3475444316864014], + [-2.213036060333252, 0.36131441593170166], + [-0.605552613735199, 8.615407943725586], + [-6.227988243103027, 7.479455947875977], + [1.9213287830352783, 5.5882978439331055], + [-2.554121732711792, -0.2770916223526001], + [-3.534728527069092, -3.2962839603424072], + [-4.717564582824707, -0.7564084529876709], + [2.3701889514923096, -3.482196092605591], + [1.048675537109375, 0.09631277620792389], + [7.656371593475342, -2.4909298419952393], + [-0.5868772268295288, -1.094822883605957], + [-4.940127372741699, 1.700081706047058], + [-2.3632400035858154, 1.6997010707855225], + [-0.8787276744842529, 9.251385688781738], + [-4.926205158233643, 4.071794033050537], + [-4.663378715515137, -3.7849695682525635], + [-6.096131801605225, -2.3672592639923096], + [-0.4989141821861267, 11.302905082702637], + [-4.443614959716797, 6.013037204742432], + [-3.5399997234344482, -2.2912094593048096], + [-5.941854953765869, 7.3535475730896], + [-6.87519645690918, 8.569552421569824], + [-4.036900997161865, 3.102691173553467], + [-3.0908162593841553, -2.4985358715057373], + [2.6593759059906006, -4.023887634277344], + [9.602021217346191, -2.742262363433838], + [-5.210480690002441, -1.7069793939590454], + [0.5867759585380554, 5.617636680603027], + [4.676314353942871, -1.3847113847732544], + [0.025123946368694305, -0.7880572080612183], + [2.3852102756500244, -1.2814198732376099], + [1.5838119983673096, 0.49334365129470825], + [0.03612827509641647, -0.7545976638793945], + [-2.0134289264678955, 0.09181016683578491], + [-0.44678592681884766, 9.231183052062988], + [-0.412622332572937, 9.011799812316895], + [-0.269692599773407, 9.82075309753418], + [0.7076202034950256, -0.48653921484947205], + [-5.502234935760498, -2.6814401149749756], + [-2.0959277153015137, 2.6604151725769043], + [-1.9939888715744019, -1.5563585758209229], + [2.82309889793396, 1.4498149156570435], + [-3.881802797317505, 3.9946892261505127], + [-5.713526248931885, -2.652614116668701], + [-6.484106540679932, 8.496883392333984], + [-4.1386919021606445, 6.073085784912109], + [-3.116086006164551, -2.5151710510253906], + [0.0100054070353508, 9.969099044799805], + [2.0725319385528564, -9.480640411376953], + [2.276308298110962, 1.1371281147003174], + [5.816092491149902, -1.2207592725753784], + [2.0217268466949463, -3.8388516902923584], + [-7.77710485458374, -0.953470766544342], + [5.97292947769165, -1.2876405715942383], + [-0.3447510600090027, 10.710505485534668], + [-4.214391708374023, 4.446132183074951], + [1.1763734817504883, -7.001626968383789], + [-5.8162360191345215, -3.1382317543029785], + [8.130718231201172, -2.5739715099334717], + [-4.712479114532471, -3.7653911113739014], + [-3.996608257293701, -1.3763726949691772], + [-6.61043119430542, -0.6947587728500366], + [0.7230601906776428, 7.248029708862305], + [1.1834876537322998, -6.387494087219238], + [-4.576608180999756, -2.3199594020843506], + [-7.81341028213501, -1.274550437927246], + [2.3104968070983887, -5.602916717529297], + [-6.559469223022461, 8.22845458984375], + [1.1958057880401611, -5.063605785369873], + [2.7318758964538574, -4.2400312423706055], + [-6.045419216156006, 8.004861831665039], + [1.3358445167541504, -6.5382585525512695], + [-0.34922683238983154, 10.278902053833008], + [-2.427807092666626, 0.9030569791793823], + [-3.55155611038208, -1.2457062005996704], + [2.9345381259918213, -4.416000843048096], + [-5.00515079498291, -1.960864543914795], + [1.945460557937622, 4.59837532043457], + [10.409847259521484, -2.8407537937164307], + [2.898958683013916, -4.55181360244751], + [-2.5914676189422607, 2.088654041290283], + [-1.0899709463119507, -1.220523476600647], + [3.2568323612213135, -5.194811820983887], + [-0.2200116515159607, -0.4375495910644531], + [-6.124215126037598, 1.154369592666626], + [-6.197300434112549, 5.699904441833496], + [-4.2955002784729, -3.140087842941284], + [0.32493752241134644, -0.5578599572181702], + [0.819067656993866, 5.440263271331787], + [-2.3763561248779297, 1.4345728158950806], + [-6.878869533538818, 8.440289497375488], + [1.0655517578125, -7.269624710083008], + [-2.262648105621338, 0.8295554518699646], + [-3.9359920024871826, -3.3559377193450928], + [-3.8320000171661377, -3.691547155380249], + [-3.5611302852630615, 5.459955215454102], + [3.0775222778320312, -4.9072794914245605], + [3.1039369106292725, -4.712242126464844], + [1.3008631467819214, 0.20660796761512756], + [5.108047962188721, -0.8612082600593567], + [1.8335117101669312, -4.258364677429199], + [-4.786025524139404, -3.9078524112701416], + [-6.934131145477295, 8.572775840759277], + [2.1409149169921875, -3.8790948390960693], + [8.601201057434082, -2.3335676193237305], + [1.7059229612350464, 5.656148910522461], + [7.22684907913208, -3.523632287979126], + [-5.372097492218018, 5.60116720199585], + [-4.004897117614746, -1.609337568283081], + [0.40802597999572754, -5.522712707519531], + [-0.271587073802948, 9.431187629699707], + [-1.1749935150146484, -1.5744034051895142], + [-0.07980195432901382, 2.257474660873413], + [-3.2215816974639893, 5.7476301193237305], + [-4.455338478088379, 2.627511978149414], + [3.1542413234710693, -4.728768348693848], + [3.1797592639923096, -4.988611221313477], + [-3.375007390975952, 2.0109808444976807], + [3.4834811687469482, -6.805209636688232], + [-5.823773384094238, -2.624990701675415], + [-0.11376196891069412, 9.884918212890625], + [2.8581111431121826, -4.309042930603027], + [-5.901470184326172, -2.267899751663208], + [-4.73945426940918, 5.565758228302002], + [-2.4273712635040283, 3.0447075366973877], + [8.617849349975586, -2.36232590675354], + [3.108074426651001, -5.121303558349609], + [2.905599355697632, -4.16240119934082], + [9.60861873626709, -2.6316511631011963], + [-3.861198902130127, -3.0396130084991455], + [0.5025174021720886, -1.2910716533660889], + [4.774571895599365, 7.17073392868042], + [-6.056933879852295, 5.248086929321289], + [-4.215734481811523, -2.240398406982422], + [3.0294814109802246, -4.545096397399902], + [9.077865600585938, -2.5215604305267334], + [2.4297831058502197, -3.4696764945983887], + [-6.519866466522217, 8.437017440795898], + [2.256427526473999, -3.023892402648926], + [-4.029245853424072, -1.4804847240447998], + [-3.7644636631011963, -4.095022678375244], + [-2.856029510498047, 3.041757345199585], + [-0.23490625619888306, 9.370195388793945], + [-4.866846561431885, 7.104165077209473], + [3.09409761428833, -4.98302698135376], + [2.736532688140869, -4.158919334411621], + [-5.763896465301514, -1.084963083267212], + [-5.8960161209106445, 2.143242835998535], + [3.040383815765381, -6.628818035125732], + [0.7298949360847473, -6.776762962341309], + [-4.968328475952148, -3.5371952056884766], + [2.9020259380340576, -4.784661293029785], + [-7.164679050445557, -1.0610276460647583], + [6.029537677764893, -2.2298715114593506], + [-6.4964423179626465, -1.4887382984161377], + [-4.454688549041748, -3.614759683609009], + [8.617124557495117, -2.3897008895874023], + [8.785131454467773, -2.4695403575897217], + [1.471320629119873, 5.849364280700684], + [-5.409438610076904, -3.042452096939087], + [3.2376465797424316, -5.1275787353515625], + [3.1868298053741455, 4.787418365478516], + [-4.203607082366943, -2.7533862590789795], + [-1.75673508644104, 2.4240548610687256], + [0.4456295371055603, 0.4041132628917694], + [-7.8796210289001465, 9.537907600402832], + [-1.53826904296875, 0.733108401298523], + [6.339447975158691, -1.9246267080307007], + [2.599106788635254, 0.5463122129440308], + [-0.18746155500411987, 10.628735542297363], + [2.9915037155151367, -6.380865097045898], + [-3.0269076824188232, 2.750872850418091], + [-4.048825740814209, -2.1234734058380127], + [10.562211036682129, -2.9188621044158936], + [2.63435959815979, -3.94954776763916], + [2.1816318035125732, -3.9767038822174072], + [-7.023540019989014, 8.860140800476074], + [-2.1812727451324463, 2.067199468612671], + [-1.3884600400924683, 1.248132348060608], + [-0.2163410782814026, 5.262526512145996], + [4.824199199676514, -0.7300239205360413], + [-3.6431422233581543, -2.8508684635162354], + [3.0194575786590576, -4.539444923400879], + [-4.936699390411377, 5.933420181274414], + [1.754434585571289, 5.348180294036865], + [1.059502124786377, 0.9191155433654785], + [-0.5590560436248779, 0.7886523008346558], + [-2.420240640640259, 2.4710500240325928], + [2.0996689796447754, 5.898894786834717], + [-6.596538543701172, 0.9606665372848511], + [-6.615901470184326, -1.0944355726242065], + [5.556790351867676, -0.7289104461669922], + [-0.19192776083946228, -0.753635585308075], + [-2.351206064224243, 2.6242728233337402], + [1.661884069442749, 4.529836654663086], + [2.759369134902954, -5.522100925445557], + [0.07584547251462936, 9.234355926513672], + [-0.08172298222780228, 9.762187957763672], + [-3.8555352687835693, -3.5852110385894775], + [2.912635087966919, -4.565704345703125], + [-3.6804044246673584, -3.7531421184539795], + [-4.434173107147217, 7.051679611206055], + [-5.8867902755737305, 7.515913009643555], + [1.471226692199707, -4.817026615142822], + [-4.68733549118042, 1.468723177909851], + [-1.9514936208724976, 6.318515777587891], + [-0.2932294011116028, 10.481206893920898], + [-4.9361066818237305, -1.690372109413147], + [-1.8204773664474487, 5.5478973388671875], + [-1.507308006286621, 3.831702947616577], + [3.3003928661346436, 6.523271083831787], + [6.117260932922363, -3.4986908435821533], + [-6.275260925292969, -1.8754419088363647], + [-5.343759059906006, 5.948544979095459], + [4.261035442352295, 6.882897853851318], + [1.4055770635604858, 0.3582456707954407], + [-4.263796329498291, 4.180747032165527], + [-0.27257758378982544, 9.556577682495117], + [-0.5003294348716736, 10.017826080322266], + [-4.841953277587891, -2.3316328525543213], + [-2.7016103267669678, 2.0937676429748535], + [-5.099264144897461, 0.5012006759643555], + [-5.2438273429870605, -3.8377525806427], + [-4.648446083068848, 5.60459041595459], + [-4.788214206695557, -3.136462450027466], + [-2.3957571983337402, 2.4117815494537354], + [-0.31618165969848633, 10.787027359008789], + [-5.940743923187256, 3.4207756519317627], + [-7.3441948890686035, 9.038576126098633], + [-6.458691120147705, 8.21202278137207], + [-4.13646936416626, -1.2723804712295532], + [-6.527833461761475, 8.104841232299805], + [-5.533975601196289, 6.827403545379639], + [-0.25957679748535156, 9.893338203430176], + [-3.9419212341308594, 6.847827911376953], + [-7.488490104675293, -0.9353419542312622], + [5.232149600982666, 7.127662658691406], + [-2.9791064262390137, 5.377234935760498], + [2.946272611618042, -4.863908767700195], + [7.989989757537842, -1.9185529947280884], + [-1.8941473960876465, 5.611615180969238], + [-1.7089319229125977, 1.5784666538238525], + [0.24417006969451904, -4.91783332824707], + [-5.526248455047607, 4.528012752532959], + [-5.185850143432617, 2.5084125995635986], + [-3.7775235176086426, -4.204756736755371], + [-7.364978790283203, -1.8393744230270386], + [-2.1318726539611816, 0.7287865877151489], + [3.0298244953155518, -4.692132472991943], + [0.6141694784164429, 5.413488388061523], + [-4.059737682342529, 5.718279838562012], + [2.3213884830474854, -4.981589317321777], + [1.784825325012207, -5.556907653808594], + [2.580228805541992, -6.41169548034668], + [0.9391370415687561, 0.9397664070129395], + [-0.6018089056015015, 4.590837478637695], + [-3.031003713607788, -1.9615498781204224], + [-2.411447286605835, 2.165482759475708], + [-0.843149721622467, 9.60240650177002], + [9.620818138122559, -2.728334665298462], + [0.7016264200210571, 5.789578437805176], + [-0.0018305256962776184, 10.164955139160156], + [8.602051734924316, -2.4112207889556885], + [-3.8425557613372803, -3.1603074073791504], + [7.534742832183838, -2.1892356872558594], + [1.4346051216125488, -7.116039276123047], + [-5.580586910247803, 2.2136802673339844], + [-4.504100322723389, -5.333129405975342], + [-4.979701519012451, 7.191864967346191], + [-3.0688014030456543, 3.9521853923797607], + [3.1545774936676025, -4.734498977661133], + [-3.426600933074951, -0.2418200969696045], + [-5.896340370178223, 1.817264437675476], + [-2.026371717453003, 1.0941669940948486], + [-0.3221168518066406, 9.346941947937012], + [-3.937385320663452, -2.174996852874756], + [-4.935918807983398, 6.060609817504883], + [6.189616680145264, -2.178849458694458], + [3.2929136753082275, -5.213311672210693], + [0.1302911639213562, -0.7903134822845459], + [2.0770580768585205, 4.038522720336914], + [-2.2541887760162354, 1.9564236402511597], + [-6.0292649269104, -1.4350863695144653], + [-2.084638833999634, -1.7614988088607788], + [-4.60670804977417, -5.424126148223877], + [-4.009181022644043, -2.309962034225464], + [-3.0051724910736084, -2.2305939197540283], + [-5.136335849761963, -3.0131587982177734], + [-2.1637978553771973, 0.030008729547262192], + [-1.18252432346344, 9.137808799743652], + [-5.564335346221924, 1.9784587621688843], + [1.9492366313934326, 4.175856590270996], + [-5.3832573890686035, 3.931530714035034], + [-4.3934125900268555, -2.193678379058838], + [-4.333720684051514, -1.3860844373703003], + [5.800879955291748, -1.5309594869613647], + [-1.815817952156067, -2.2239997386932373], + [-6.682295322418213, 8.345881462097168], + [-5.326779842376709, -2.603107213973999], + [-5.07418966293335, 0.2666586637496948], + [-7.4254536628723145, 8.996506690979004], + [-0.45011264085769653, 9.91732406616211], + [-2.327826738357544, -0.7563773989677429], + [-2.277013063430786, 2.5803282260894775], + [-6.331245422363281, 8.129125595092773], + [2.894139051437378, -6.656874179840088], + [-0.3331992030143738, 10.68690299987793], + [4.4019646644592285, 7.338954925537109], + [-6.476250171661377, -1.005090355873108], + [-0.6641296148300171, 9.016707420349121], + [-5.115829944610596, 4.089885234832764], + [2.006533622741699, -9.589690208435059], + [3.9885027408599854, -0.9805041551589966], + [1.2496647834777832, 6.2310662269592285], + [4.402792453765869, 6.9983906745910645], + [-0.3268727660179138, 9.470565795898438], + [2.1530885696411133, 5.46460485458374], + [-5.02425479888916, -2.907796621322632], + [2.804187059402466, -4.230995178222656], + [-4.238828659057617, -4.054784297943115], + [1.9520230293273926, -6.145808696746826], + [8.106884002685547, -2.5032427310943604], + [-0.6513990759849548, 9.352201461791992], + [-2.716803789138794, -3.161163091659546], + [-5.046716213226318, 4.869072914123535], + [-5.494039535522461, 5.200896263122559], + [2.1343302726745605, -7.85356330871582], + [-5.729609966278076, -2.584275245666504], + [0.9011920690536499, -6.103893280029297], + [-1.9166147708892822, 7.349339485168457], + [-0.6866429448127747, 8.594280242919922], + [-4.935941219329834, -3.9625399112701416], + [7.863170146942139, -2.1605818271636963], + [1.37306809425354, -6.434540748596191], + [2.8146142959594727, -4.271425724029541], + [2.97011399269104, -4.463876724243164], + [-0.2130429744720459, 9.951955795288086], + [-4.8118157386779785, 6.828351974487305], + [9.277347564697266, -2.6662378311157227], + [-5.69653844833374, 6.7657694816589355], + [-5.229438304901123, 6.135992050170898], + [5.851907253265381, -1.5867197513580322], + [2.1214497089385986, -7.253475189208984], + [-2.117729425430298, 1.7493895292282104], + [-2.643385410308838, -1.6232600212097168], + [6.591070652008057, -1.5361214876174927], + [-0.4195207953453064, 9.510845184326172], + [2.5458686351776123, -6.57150936126709], + [1.0572924613952637, 0.3515833020210266], + [-5.5193400382995605, -2.367004632949829], + [-0.018798477947711945, 9.328218460083008], + [-4.948268413543701, -2.973001718521118], + [1.668128252029419, 0.5769295692443848], + [4.5654215812683105, 6.958025932312012], + [7.87741756439209, -2.863293170928955], + [3.4409372806549072, 1.669075846672058], + [-4.59952974319458, 0.127638578414917], + [2.384509801864624, -6.259812355041504], + [-3.031946897506714, 0.556286096572876], + [-5.060777187347412, 3.998929738998413], + [-6.686278820037842, -2.1651980876922607], + [-5.552922248840332, -3.278437376022339], + [2.147386312484741, -5.927079677581787], + [7.302767276763916, -2.1405904293060303], + [-6.689958095550537, -0.2874765396118164], + [2.7261366844177246, -4.0527143478393555], + [-6.675875186920166, -0.3888406753540039], + [-4.711819171905518, 5.790598392486572], + [-1.048458456993103, 0.1799505352973938], + [-0.10389358550310135, -1.1937073469161987], + [-2.82073712348938, -1.4135611057281494], + [6.341885089874268, -1.395179271697998], + [0.6570436954498291, -6.505004405975342], + [-0.216312438249588, -0.7308106422424316], + [3.0635106563568115, -4.5979719161987305], + [1.5534042119979858, 4.282124996185303], + [-1.552923321723938, 5.640321731567383], + [1.0967702865600586, -3.990405321121216], + [-5.567590236663818, -3.205035448074341], + [-4.288692474365234, -1.6800252199172974], + [3.8510849475860596, 6.849768161773682], + [-5.761038303375244, -3.9724271297454834], + [-6.250914096832275, -2.5272903442382812], + [-5.618455410003662, 6.413308143615723], + [-0.15335816144943237, 10.111679077148438], + [-2.0943729877471924, -1.1680095195770264], + [0.5853742957115173, -6.174205780029297], + [1.382594347000122, -3.510835886001587], + [9.397656440734863, -2.55846905708313], + [-5.5363993644714355, 6.696611404418945], + [-0.38377076387405396, 9.294596672058105], + [-2.3683114051818848, 1.2984652519226074], + [-4.060279369354248, 5.581948280334473], + [3.3381683826446533, 6.8292741775512695], + [-0.2559483051300049, 9.853645324707031], + [0.9368438124656677, -4.152857780456543], + [-6.024247646331787, 2.112189769744873], + [7.692618370056152, -3.821401834487915], + [-0.28632575273513794, 9.317658424377441], + [9.60118293762207, -2.7787859439849854], + [-3.409715175628662, -2.7642080783843994], + [-4.405584335327148, 5.002783298492432], + [-4.995779037475586, 6.748648643493652], + [2.9173405170440674, -5.381767272949219], + [-3.4851973056793213, 5.525330543518066], + [-3.2151029109954834, 5.879746913909912], + [2.897066831588745, 1.2450474500656128], + [8.80931568145752, -2.543311357498169], + [-2.370816946029663, 1.5820934772491455], + [-2.3519866466522217, 1.5211811065673828], + [-2.552614688873291, 2.2859079837799072], + [2.2554354667663574, -3.295509099960327], + [3.08575177192688, -4.694400787353516], + [5.626465797424316, -1.3785635232925415], + [-5.34995698928833, 5.888757705688477], + [-5.980719089508057, 7.94355583190918], + [-2.4790878295898438, 2.376246213912964], + [-0.5060377717018127, 9.24362564086914], + [0.946211040019989, -5.16396951675415], + [-6.080915927886963, 5.450145721435547], + [-5.187647342681885, -2.0178353786468506], + [1.5814290046691895, 5.212684631347656], + [-7.097148418426514, -1.4314197301864624], + [5.845225811004639, -1.3679393529891968], + [3.1172564029693604, -4.8391828536987305], + [-6.531871318817139, -1.562667965888977], + [-2.1868107318878174, 2.6865615844726562], + [3.126873731613159, -4.882386684417725], + [-5.07595157623291, -3.1455204486846924], + [4.441700458526611, 6.508998870849609], + [-2.826383352279663, 5.44902229309082], + [-6.352074146270752, 3.285766363143921], + [4.9952921867370605, 7.415484428405762], + [-2.1388890743255615, 2.3622446060180664], + [-5.687864780426025, -0.9990553855895996], + [-5.403365612030029, 5.213557720184326], + [2.432037830352783, -8.980871200561523], + [1.6747605800628662, -6.8427886962890625], + [2.144117832183838, 1.0829111337661743], + [-3.393235921859741, -3.0996711254119873], + [-1.2909212112426758, -2.9394452571868896], + [0.03039386123418808, -0.5447418689727783], + [8.17446517944336, -1.819794774055481], + [0.05269043892621994, -0.5345724821090698], + [-4.042640209197998, -1.8186964988708496], + [5.886875629425049, -0.1848171055316925], + [-4.649707317352295, 8.604755401611328], + [-5.797490119934082, -1.985636591911316], + [6.758778095245361, -1.3052023649215698], + [7.2728095054626465, -1.7325804233551025], + [-0.46151643991470337, 9.23523998260498], + [-2.3873889446258545, -3.441380739212036], + [-0.4439266324043274, 9.331430435180664], + [2.23413348197937, 5.329432487487793], + [-4.9295477867126465, -0.5517606139183044], + [2.4713971614837646, -3.8928885459899902], + [1.9925732612609863, -3.4467010498046875], + [-7.8927764892578125, -0.10699272155761719], + [-4.763612270355225, 6.087943077087402], + [-5.525209903717041, 1.1265257596969604], + [1.3873945474624634, -7.172127723693848], + [-3.088374376296997, 5.246746063232422], + [1.8534300327301025, -6.822247505187988], + [-5.013672351837158, -0.11278116703033447], + [0.33259570598602295, 6.170889854431152], + [1.5845491886138916, 5.295605182647705], + [-6.124406337738037, -4.36439847946167], + [-5.589125156402588, 7.854368686676025], + [3.0723321437835693, -4.74174690246582], + [-5.315152645111084, -2.3631913661956787], + [0.2547977864742279, -1.0889123678207397], + [6.368686199188232, 7.652772903442383], + [-6.2963643074035645, 7.6147260665893555], + [-4.903170108795166, 0.7091324925422668], + [-0.42749541997909546, 10.938529014587402], + [-4.514618873596191, 6.205455303192139], + [2.1915509700775146, -9.678340911865234], + [-6.03302526473999, 4.472265243530273], + [-3.7111613750457764, -2.805360794067383], + [0.38918405771255493, -4.304966926574707], + [-2.2392899990081787, 0.6110402345657349], + [-3.604990243911743, -2.7933714389801025], + [7.898618221282959, -1.9876492023468018], + [5.020277500152588, -6.362195014953613], + [-4.4826459884643555, 5.459892749786377], + [-4.64135217666626, -2.957667589187622], + [-2.8846285343170166, 1.6938968896865845], + [-0.6571226119995117, 8.654865264892578], + [-3.878751516342163, -0.8308571577072144], + [-2.9240031242370605, 1.703779697418213], + [5.056342601776123, -3.182217836380005], + [-3.6367781162261963, 4.7239227294921875], + [-2.358276605606079, 0.9381318092346191], + [-2.481121778488159, 2.1397674083709717], + [3.0574951171875, -4.60249137878418], + [1.6280732154846191, -8.087970733642578], + [-7.496310234069824, -1.182132363319397], + [-2.476808547973633, 1.495080590248108], + [-4.681146621704102, 7.783605575561523], + [-0.9077264070510864, 0.6654618978500366], + [-6.65014123916626, -2.309398889541626], + [-0.567425012588501, 8.631867408752441], + [1.6942098140716553, -5.7874603271484375], + [-6.1113600730896, 7.225243091583252], + [1.6075726747512817, 5.873077392578125], + [5.419219493865967, 7.594720363616943], + [-2.430760145187378, -2.6335766315460205], + [-7.362844944000244, 9.14010238647461], + [5.097483158111572, -3.021818161010742], + [0.4189460277557373, 0.3732339143753052], + [5.137753486633301, 7.545774459838867], + [-7.171444416046143, 8.974893569946289], + [-3.9007551670074463, -3.536543846130371], + [1.1793746948242188, -7.476700782775879], + [-6.103662014007568, 6.563539505004883], + [2.4205856323242188, 6.125513076782227], + [1.173555850982666, -6.7452921867370605], + [3.0367767810821533, -4.830427169799805], + [-3.858468770980835, -3.0537526607513428], + [-6.178442001342773, 7.141332149505615], + [3.07030987739563, -4.648898124694824], + [2.5352253913879395, -3.8454272747039795], + [-7.2752909660339355, -1.9843934774398804], + [5.593845844268799, -1.274630069732666], + [-5.233933925628662, -3.539463758468628], + [-2.1721348762512207, -0.27407026290893555], + [-0.08169770985841751, 9.647411346435547], + [8.409241676330566, -2.56701922416687], + [-5.482083320617676, 7.576310157775879], + [-1.3282902240753174, 1.6752732992172241], + [8.352624893188477, -2.3066627979278564], + [6.598442554473877, -1.4647282361984253], + [-3.153407096862793, -0.7009074687957764], + [-4.785914897918701, -0.10593003034591675], + [-5.402777194976807, -1.9504770040512085], + [-0.8369371294975281, -0.46912381052970886], + [-2.782219409942627, 2.6416265964508057], + [-7.7907023429870605, -0.8675379753112793], + [-5.039968490600586, -0.3818771243095398], + [3.42095947265625, -5.490294456481934], + [5.209656238555908, -2.515488862991333], + [-0.15714240074157715, -1.0603677034378052], + [-0.6484240889549255, 11.607038497924805], + [-4.965574264526367, -2.850071668624878], + [9.214442253112793, -2.746642827987671], + [0.3182169795036316, -1.6853007078170776], + [-2.305325746536255, 0.706483006477356], + [2.2819876670837402, -4.741199016571045], + [3.0799648761749268, -4.696195602416992], + [2.4287142753601074, 5.980550289154053], + [3.040510892868042, -3.819031000137329], + [2.361036539077759, -3.947354555130005], + [-0.3105546832084656, 10.54815673828125], + [-6.174574375152588, -2.951855182647705], + [3.1237409114837646, -4.678470134735107], + [1.5228731632232666, -2.7082340717315674], + [-5.1771321296691895, -3.191593885421753], + [-5.141823768615723, 6.031797409057617], + [-2.187305212020874, 2.175601005554199], + [-0.41315072774887085, 11.031326293945312], + [1.9489693641662598, 5.15244197845459], + [1.7542028427124023, 5.471988677978516], + [-0.21306192874908447, 9.710676193237305], + [1.9551289081573486, 4.98045539855957], + [0.1817735731601715, 4.711475849151611], + [2.5289416313171387, 6.106719017028809], + [-2.1920993328094482, 2.7793946266174316], + [5.6907734870910645, -4.198442459106445], + [-6.568918704986572, 8.102347373962402], + [-3.7084105014801025, -3.1103689670562744], + [10.225899696350098, -2.838510036468506], + [-3.368192195892334, -3.7434821128845215], + [3.0496726036071777, -4.598163604736328], + [-2.5202040672302246, -1.7486028671264648], + [5.133809566497803, -1.512619972229004], + [7.947685718536377, -3.272833824157715], + [-5.2469000816345215, -1.184761881828308], + [-4.802669048309326, -2.7745981216430664], + [-5.750100135803223, -1.9386157989501953], + [-2.158702850341797, 2.214266061782837], + [4.353005409240723, 6.902072906494141], + [9.017184257507324, -2.5112855434417725], + [2.2820534706115723, -8.04086685180664], + [-5.2162251472473145, 3.9313271045684814], + [-1.2161526679992676, 1.6816319227218628], + [-0.14060431718826294, 9.769887924194336], + [-4.529483318328857, 5.366069793701172], + [-5.142996311187744, 1.786928653717041], + [-5.273409366607666, 7.841798782348633], + [-4.29943323135376, -1.826859474182129], + [-3.5548665523529053, -1.527509331703186], + [3.1188037395477295, -4.82450008392334], + [-2.468472719192505, 2.078033447265625], + [1.9900314807891846, -8.881240844726562], + [3.1604230403900146, -4.730489253997803], + [-4.220020294189453, -3.9719371795654297], + [6.695779800415039, -2.7435998916625977], + [-3.218933343887329, 4.581484317779541], + [1.7356750965118408, -4.146325588226318], + [2.6446564197540283, -4.0060648918151855], + [1.4324383735656738, -8.145944595336914], + [5.714024543762207, -1.6035932302474976], + [-4.86967658996582, 1.3636329174041748], + [1.1977989673614502, -5.065560340881348], + [0.4806187152862549, -0.5639333724975586], + [-0.9337314963340759, 8.583231925964355], + [-5.957677364349365, 6.900392532348633], + [3.070948839187622, 1.106567621231079], + [-2.444685697555542, 1.0348376035690308], + [-0.2599806785583496, 9.724530220031738], + [-2.3956658840179443, 1.1588026285171509], + [1.0384974479675293, -7.025276184082031], + [-4.04977560043335, -1.289406657218933], + [9.502021789550781, -2.5922207832336426], + [-1.4541500806808472, 0.7590041160583496], + [-4.0347700119018555, -1.1233794689178467], + [2.8695642948150635, -5.09313440322876], + [1.4970499277114868, 4.139391899108887], + [-5.397779941558838, 6.0293288230896], + [-4.712582111358643, 4.456750869750977], + [-0.9399497509002686, 9.882064819335938], + [-0.3687213063240051, 10.292231559753418], + [-2.4047439098358154, 2.9780118465423584], + [-4.369180202484131, -2.5717215538024902], + [-5.927777290344238, -0.906196653842926], + [-5.160926342010498, -0.6306087374687195], + [-4.432458400726318, 4.912546157836914], + [-4.927563190460205, -3.5153989791870117], + [1.5137112140655518, 5.380092620849609], + [-6.900427341461182, -0.9088223576545715], + [-3.2209999561309814, -1.9782902002334595], + [-6.211501121520996, 7.2757720947265625], + [0.42773598432540894, 3.520977735519409], + [-5.218130588531494, 3.0924947261810303], + [-5.154963493347168, -2.820913791656494], + [1.8240416049957275, 5.094179630279541], + [-2.6071994304656982, 2.0659725666046143], + [-1.7085561752319336, 0.7213853001594543], + [-5.9363203048706055, -2.440030336380005], + [0.511698305606842, 5.347198486328125], + [-0.2275027632713318, 9.794537544250488], + [-4.406449794769287, -1.743295669555664], + [-0.34988707304000854, 11.414216041564941], + [3.0172457695007324, -4.55959415435791], + [-4.1734724044799805, -2.7921931743621826], + [-8.546669960021973, -1.0866235494613647], + [-1.2514457702636719, -1.0958099365234375], + [-3.255594253540039, 5.832697868347168], + [-4.779509544372559, 4.213019371032715], + [2.0882835388183594, -9.92916488647461], + [5.648703098297119, -2.79672908782959], + [-4.579729080200195, -1.201281189918518], + [4.2613115310668945, 6.562150955200195], + [-4.398208141326904, 3.3995847702026367], + [1.8866328001022339, -4.539317607879639], + [-3.9173099994659424, -2.481529951095581], + [0.6089300513267517, -1.0134707689285278], + [-4.8040642738342285, -1.4223729372024536], + [-5.171294212341309, -3.7482335567474365], + [-4.88070821762085, 7.367794990539551], + [5.61869478225708, -1.2322896718978882], + [-7.7132768630981445, -1.9768341779708862], + [-5.141204357147217, 5.706857681274414], + [1.843536138534546, 5.302688121795654], + [1.0369125604629517, -6.798362731933594], + [-3.0252058506011963, -0.9534893035888672], + [-1.8826203346252441, 2.63584303855896], + [2.7694571018218994, -8.04949951171875], + [-2.8424265384674072, -1.864945411682129], + [-0.2609306275844574, -0.9186937808990479], + [-2.135697364807129, 5.474512100219727], + [9.20969295501709, -2.5309860706329346], + [5.345642566680908, 7.24331521987915], + [-4.5587239265441895, 3.8907973766326904], + [-5.6857123374938965, 5.39262580871582], + [-3.3602147102355957, -2.857048273086548], + [-6.7718939781188965, 8.31518268585205], + [-3.8201229572296143, 3.255915403366089], + [-2.5124573707580566, 1.0278676748275757], + [2.1467843055725098, 5.726354598999023], + [2.405250310897827, -4.154203414916992], + [-0.20245569944381714, 10.63321590423584], + [-2.330251455307007, -2.714244842529297], + [8.917817115783691, -2.465761661529541], + [-2.407891273498535, 1.60613214969635], + [2.707533597946167, -4.113985061645508], + [2.449784755706787, -4.018801212310791], + [-3.405179500579834, 3.5823581218719482], + [-0.015432007610797882, 6.7148356437683105], + [-6.173715114593506, 6.6417694091796875], + [1.228637933731079, 4.211134433746338], + [-3.7268118858337402, 5.723367214202881], + [0.5663323998451233, 0.952576756477356], + [0.6090206503868103, -0.46803703904151917], + [-5.222859859466553, 2.397831439971924], + [1.7796001434326172, -9.254846572875977], + [-8.152400970458984, -1.2632087469100952], + [3.0483529567718506, -4.746500015258789], + [5.976973056793213, -1.1008021831512451], + [-5.5326056480407715, 3.796494722366333], + [-0.21657085418701172, 9.855409622192383], + [-0.1563737988471985, 9.730894088745117], + [-3.6083905696868896, 6.712686538696289], + [-0.19093090295791626, 9.227935791015625], + [9.31872844696045, -2.323375940322876], + [-5.3816142082214355, 1.3597296476364136], + [-6.7053542137146, 0.33577775955200195], + [-6.438520431518555, -1.8103686571121216], + [1.75966215133667, 5.22154426574707], + [8.228507995605469, -2.4442601203918457], + [0.3716355562210083, -0.0728226900100708], + [-1.885009527206421, 1.6074646711349487], + [1.5198347568511963, 5.187982559204102], + [8.847328186035156, -2.3127613067626953], + [-4.794055461883545, 5.5186686515808105], + [-4.0713043212890625, 1.674507975578308], + [-5.824538707733154, 5.168583393096924], + [1.8938852548599243, -5.4604811668396], + [-2.5004775524139404, -2.540066719055176], + [0.40305328369140625, -4.720731258392334], + [3.2973546981811523, -5.751556873321533], + [-2.121267557144165, 2.5923538208007812], + [-4.408843517303467, -3.6192312240600586], + [-0.5095005631446838, 9.886089324951172], + [3.2376420497894287, -4.8381476402282715], + [3.2070977687835693, 6.530107498168945], + [4.870794296264648, -0.8514866828918457], + [1.205704689025879, -6.777519226074219], + [-0.0005635693669319153, 10.059250831604004], + [-2.861501932144165, 3.1341700553894043], + [-2.517554998397827, 1.3284564018249512], + [3.3717620372772217, -5.507076263427734], + [-0.002041451632976532, -0.9666714072227478], + [-2.7481396198272705, 2.6074512004852295], + [-4.888640880584717, -1.0658313035964966], + [3.0037033557891846, -4.598925590515137], + [2.513779401779175, -3.849547863006592], + [5.8844828605651855, -3.6094963550567627], + [2.942368745803833, -4.766781330108643], + [6.009389400482178, -0.9924951791763306], + [-3.537987470626831, 4.591768264770508], + [-3.021293878555298, 5.887407302856445], + [2.9333536624908447, -4.430294036865234], + [7.892550945281982, -1.9736381769180298], + [-0.1383553147315979, 9.15622329711914], + [-4.397221088409424, -2.4297945499420166], + [-2.4887471199035645, -2.7377636432647705], + [-2.5925745964050293, 2.1797428131103516], + [-5.46381139755249, 7.533020973205566], + [1.7485334873199463, -5.574061870574951], + [-0.6031050086021423, 8.352195739746094], + [-4.500630855560303, 6.088404178619385], + [-4.231191635131836, 5.3008270263671875], + [-3.960869550704956, 5.1918792724609375], + [2.7744457721710205, -4.104883193969727], + [-4.3466081619262695, 3.4108457565307617], + [-6.763677597045898, -2.0616276264190674], + [-2.20133638381958, 2.0124194622039795], + [8.330946922302246, -2.0809788703918457], + [-2.014821767807007, -0.8431063294410706], + [-4.44553804397583, 1.3017024993896484], + [8.447709083557129, -2.172504186630249], + [-5.631650447845459, -2.2800486087799072], + [0.8007234930992126, 5.1806230545043945], + [5.797855854034424, -2.3119983673095703], + [3.060105562210083, -4.5950469970703125], + [4.43468713760376, -0.7899043560028076], + [-5.2667717933654785, -2.523479700088501], + [5.976156711578369, -2.913072347640991], + [2.9804203510284424, -4.821695327758789], + [-5.037383556365967, -2.877037763595581], + [-2.7780325412750244, -4.55696439743042], + [-7.572744846343994, -1.2086071968078613], + [-5.309178352355957, -2.2926905155181885], + [-5.076876163482666, -2.3758888244628906], + [6.8204193115234375, -2.846801996231079], + [-4.474249839782715, -3.1687076091766357], + [0.3043321371078491, 9.534160614013672], + [2.8505611419677734, -6.910201549530029], + [5.361632823944092, 7.308117866516113], + [-2.3754258155822754, 1.6057621240615845], + [-6.456764221191406, -1.21134614944458], + [0.914069414138794, -5.887506008148193], + [8.641613960266113, -2.413806676864624], + [1.9303457736968994, -7.9725022315979], + [-2.3310742378234863, 1.9519270658493042], + [2.9811623096466064, -7.316726207733154], + [-4.884131908416748, 5.655500411987305], + [3.0284616947174072, -4.542830944061279], + [3.11798095703125, -4.672529220581055], + [-1.1476681232452393, -1.3798413276672363], + [-2.4922995567321777, 1.6491509675979614], + [1.57816743850708, -6.92204475402832], + [-6.068785190582275, -1.7999104261398315], + [9.175082206726074, -2.663160562515259], + [3.0146398544311523, -6.767228126525879], + [2.6924519538879395, -4.158211708068848], + [1.4614230394363403, 5.360471725463867], + [2.684467077255249, -3.9748339653015137], + [-2.3179004192352295, 2.5761380195617676], + [-2.343406915664673, 2.2944893836975098], + [2.124100923538208, 5.771039009094238], + [-6.69839334487915, 8.154123306274414], + [9.073287010192871, -2.4898416996002197], + [-0.2086314558982849, 9.813447952270508], + [0.7458869814872742, -5.212699890136719], + [4.0578484535217285, -3.3140435218811035], + [-5.269665241241455, -1.5574792623519897], + [4.966324806213379, 7.421511650085449], + [3.2975752353668213, 5.39586067199707], + [-4.820888996124268, 1.9010261297225952], + [-0.2883862853050232, 9.840885162353516], + [-4.163934707641602, -1.6504310369491577], + [-4.865458011627197, 0.9100748896598816], + [6.077179431915283, -1.6144927740097046], + [-0.689386248588562, 9.568382263183594], + [-2.7263059616088867, 4.4211201667785645], + [3.1123836040496826, -5.200686931610107], + [-4.954143047332764, -4.671352386474609], + [-6.185814380645752, 6.797101974487305], + [-1.930340051651001, 2.5350639820098877], + [2.9294464588165283, -4.694474697113037], + [7.758882999420166, -3.389686346054077], + [0.4342251420021057, 4.63784646987915], + [-5.596951484680176, 5.058565139770508], + [8.459332466125488, -2.582495927810669], + [3.5993974208831787, 6.535409927368164], + [10.30252742767334, -2.850701093673706], + [2.6627447605133057, -4.083949089050293], + [-0.21660661697387695, 10.442414283752441], + [-0.5515122413635254, 0.3318430781364441], + [1.4702649116516113, 5.451411247253418], + [0.7264780402183533, 5.656309127807617], + [3.1121418476104736, -4.872544288635254], + [-3.8659417629241943, -4.951834678649902], + [-7.561329364776611, 0.04294895753264427], + [-2.5404891967773438, 0.8091329336166382], + [-3.685781478881836, 6.126737117767334], + [-0.7266731858253479, -1.4038676023483276], + [-0.3120765686035156, 10.516044616699219], + [8.903136253356934, -2.551607131958008], + [-3.691739559173584, 6.674030303955078], + [6.835330963134766, -3.7726948261260986], + [0.1132398322224617, -1.137665867805481], + [-7.382640838623047, 9.279895782470703], + [-3.511944532394409, -3.0825603008270264], + [4.9213337898254395, -3.9874329566955566], + [2.9234540462493896, -4.6627702713012695], + [-0.23072591423988342, -0.7741232514381409], + [-4.268718719482422, -3.6515262126922607], + [-3.4161832332611084, 5.414856910705566], + [-4.909374237060547, -1.186209797859192], + [3.9961912631988525, 6.839057445526123], + [2.549807071685791, -5.591257095336914], + [2.9377853870391846, -4.6772356033325195], + [-0.22639167308807373, 10.578716278076172], + [-4.093055248260498, 6.9770636558532715], + [8.949070930480957, -2.454237699508667], + [-0.774735152721405, -1.729293942451477], + [-5.082718372344971, -3.250523805618286], + [2.978407621383667, -4.635643482208252], + [0.27846622467041016, -0.7351170778274536], + [-5.034701824188232, -3.5253193378448486], + [2.852677583694458, -4.065921783447266], + [-3.0541133880615234, -1.244299292564392], + [-4.377680778503418, -3.576099395751953], + [-4.5185465812683105, -1.3204854726791382], + [-5.319904804229736, 6.208341598510742], + [2.374959707260132, -3.513700246810913], + [-5.026035785675049, -1.9888423681259155], + [-8.561033248901367, -1.0928733348846436], + [-5.519586086273193, 5.61290168762207], + [-0.3248395323753357, 11.101128578186035], + [5.838869571685791, -1.23149836063385], + [-2.1241447925567627, 2.678694486618042], + [-3.1117606163024902, -2.5727832317352295], + [-4.570541858673096, -5.716553688049316], + [2.2323968410491943, -8.957542419433594], + [-4.104229927062988, 5.714594841003418], + [-7.073780536651611, -1.1270278692245483], + [0.27106913924217224, -0.6989456415176392], + [-2.195215940475464, -2.8372223377227783], + [-4.25750207901001, -2.3747217655181885], + [1.610536813735962, 5.111588954925537], + [-5.401834011077881, -3.6302454471588135], + [2.0550448894500732, 0.9682749509811401], + [2.0043118000030518, -2.8571794033050537], + [-2.5235674381256104, 1.3900383710861206], + [-4.125106334686279, -1.211698293685913], + [3.114353656768799, -4.938054084777832], + [-4.861276626586914, 1.0593816041946411], + [-6.339132785797119, -2.936255693435669], + [-1.6541718244552612, -2.0485265254974365], + [-5.7574591636657715, -1.7873228788375854], + [2.2650716304779053, -3.796001672744751], + [2.3792145252227783, -4.589807510375977], + [-5.3698906898498535, 0.7141268253326416], + [2.586632013320923, -4.251887321472168], + [-0.41777098178863525, 10.670110702514648], + [-6.205358028411865, 7.277093887329102], + [8.12670612335205, -2.043757438659668], + [-2.410275459289551, 2.3225929737091064], + [-0.5419780015945435, 9.442648887634277], + [-5.83259916305542, 4.796360969543457], + [-4.883051872253418, 3.0374598503112793], + [-0.22663497924804688, 9.568132400512695], + [-6.511778831481934, -1.6836776733398438], + [1.779526710510254, -8.988058090209961], + [3.0744411945343018, -4.648191452026367], + [0.5211495757102966, -1.0784001350402832], + [1.2630738019943237, 6.0400590896606445], + [-2.196446657180786, 0.864676833152771], + [-6.091534614562988, -1.6320394277572632], + [-3.8372929096221924, -2.4173226356506348], + [-9.04997730255127, -0.9547358751296997], + [-5.913764476776123, -2.285240650177002], + [-6.9042887687683105, 0.9945559501647949], + [-3.9549739360809326, 2.233427047729492], + [-2.446237564086914, 0.7656334638595581], + [9.26911449432373, -2.5833683013916016], + [-4.155401706695557, -0.7626708745956421], + [-0.30219751596450806, -1.709398627281189], + [1.178868293762207, -6.8894243240356445], + [-3.032977342605591, -4.128164291381836], + [-5.863949298858643, 7.783905029296875], + [8.33250904083252, -2.4724950790405273], + [-4.158362865447998, 5.912992000579834], + [3.003058910369873, -4.523710250854492], + [-0.14485961198806763, 9.820079803466797], + [-6.999913692474365, 8.729040145874023], + [-6.089282989501953, 5.307774066925049], + [5.44254732131958, -1.2347759008407593], + [0.3167417645454407, -5.3119635581970215], + [-1.948974370956421, -0.4949004054069519], + [-3.66475772857666, -2.487523317337036], + [3.069905996322632, -4.898939609527588], + [-5.2964186668396, -2.8005106449127197], + [-5.327414035797119, 5.66801118850708], + [-0.5789114832878113, -1.1328697204589844], + [-2.9872195720672607, -2.8610103130340576], + [-6.523756504058838, -1.0266762971878052], + [-5.447821617126465, 6.382389068603516], + [6.52656364440918, -1.8309983015060425], + [5.228163242340088, -1.067297101020813], + [-5.0144429206848145, 2.214609146118164], + [-0.3518200218677521, -1.550905704498291], + [6.7850422859191895, -1.6812714338302612], + [7.338572025299072, -1.7097536325454712], + [-2.686246156692505, -0.30661848187446594], + [8.662663459777832, -2.4179980754852295], + [0.7734277844429016, -2.904555082321167], + [1.614469289779663, -8.568002700805664], + [-5.317367076873779, 6.216081619262695], + [-5.314608097076416, -1.4806190729141235], + [-3.4892938137054443, 0.7832858562469482], + [-4.818999290466309, -2.40325927734375], + [4.607583999633789, -3.8086907863616943], + [0.9159619212150574, -0.13394573330879211], + [-6.564511775970459, -0.3564563989639282], + [-2.445784330368042, 0.8375382423400879], + [-4.566948890686035, -0.750992476940155], + [-3.601449728012085, -4.179904460906982], + [-3.4591007232666016, -0.6660023331642151], + [3.1670444011688232, -4.942124366760254], + [-4.565520763397217, -2.607844591140747], + [2.881739377975464, -5.632246971130371], + [-6.114091396331787, -2.657391309738159], + [-2.60003924369812, -3.948320150375366], + [1.7298978567123413, -8.194389343261719], + [3.058697462081909, 6.173599720001221], + [-4.686737060546875, -1.1342982053756714], + [-4.2655181884765625, 5.488893508911133], + [7.265408992767334, -1.8245009183883667], + [-3.4193851947784424, -3.0854876041412354], + [2.791707754135132, 0.7683476209640503], + [5.780855178833008, -1.229647159576416], + [2.843519926071167, -4.304801940917969], + [-4.104563236236572, 4.310293197631836], + [2.6963117122650146, -6.02465295791626], + [-4.26111364364624, -1.0680640935897827], + [-2.2578136920928955, 2.2974634170532227], + [-2.525723695755005, 1.276882529258728], + [3.009885787963867, -4.9366559982299805], + [-0.49673789739608765, 9.44367790222168], + [5.052126407623291, 6.872920513153076], + [10.917710304260254, -2.985245704650879], + [-1.5330561399459839, -0.6903910040855408], + [-1.5183184146881104, 8.110038757324219], + [-5.938488483428955, 4.94023323059082], + [2.84574294090271, -4.342264175415039], + [-2.1587231159210205, 2.237243413925171], + [-7.606795787811279, 9.228281021118164], + [-2.3810977935791016, 1.8244531154632568], + [-2.247819185256958, -4.0027947425842285], + [-4.035247325897217, -2.5392673015594482], + [2.9167354106903076, -4.547290325164795], + [-0.4431365132331848, 9.75981330871582], + [2.0721371173858643, -5.565027236938477], + [-2.234875202178955, 3.0009732246398926], + [-2.5398290157318115, 1.8769185543060303], + [1.379332423210144, -7.806981563568115], + [-2.6175897121429443, -4.338354110717773], + [-2.8810665607452393, 0.2290332317352295], + [-1.1868269443511963, 5.34008264541626], + [-2.2661335468292236, 2.435286283493042], + [2.3731703758239746, -9.165035247802734], + [0.4966428875923157, 4.031208038330078], + [-4.790374755859375, -3.5482981204986572], + [-5.360683917999268, -3.680828332901001], + [-6.773360729217529, -2.6225345134735107], + [-6.791199207305908, -2.415712594985962], + [6.748436450958252, -1.0419179201126099], + [-3.8733582496643066, 3.0068278312683105], + [-5.624061107635498, 8.833449363708496], + [-2.4903788566589355, 1.9408280849456787], + [-4.8513054847717285, 1.4847033023834229], + [5.309118747711182, -1.2057560682296753], + [-5.655752658843994, -3.367161512374878], + [-5.800817012786865, -3.384164333343506], + [-4.000580787658691, -3.5112252235412598], + [-0.2763819694519043, 9.84559440612793], + [-0.18635129928588867, 9.746789932250977], + [-4.490020751953125, 4.719465255737305], + [-0.016400404274463654, 10.194329261779785], + [3.185530662536621, -5.115742206573486], + [-3.2750918865203857, -3.5640769004821777], + [-5.058291912078857, 5.489092826843262], + [-6.052049160003662, -1.823712944984436], + [-0.305915892124176, 9.832517623901367], + [-3.7091944217681885, -1.6254500150680542], + [1.8116610050201416, -8.851146697998047], + [3.7213714122772217, 7.001274585723877], + [-2.262521743774414, 0.7707070112228394], + [7.06071138381958, -1.7177190780639648], + [-0.11576206237077713, 3.5841221809387207], + [-2.5940842628479004, 1.096358060836792], + [-4.718580722808838, -2.1255927085876465], + [1.8542976379394531, -3.429516077041626], + [-4.733145236968994, -3.5202109813690186], + [-5.205676555633545, 1.8119313716888428], + [3.0726683139801025, 1.1663634777069092], + [0.26511040329933167, -5.109111785888672], + [7.590179920196533, -2.0991804599761963], + [2.0305886268615723, -5.357088565826416], + [-5.767542839050293, 2.27681827545166], + [-5.912578105926514, 7.555744647979736], + [0.926567018032074, 0.6283798217773438], + [1.4980276823043823, 5.3920722007751465], + [-4.22258996963501, 4.374880313873291], + [-2.3003194332122803, -2.233917713165283], + [-2.626943826675415, 2.8395774364471436], + [-2.496317148208618, -2.91847825050354], + [2.021397352218628, 6.080609321594238], + [0.2663019299507141, -5.469432830810547], + [-2.7165367603302, -1.4177320003509521], + [-4.796712398529053, -3.628748893737793], + [-4.047609329223633, -2.741929292678833], + [-3.561751365661621, 5.830885887145996], + [2.0251595973968506, -3.676731586456299], + [1.1668486595153809, -5.775508880615234], + [-0.33040210604667664, -1.5300633907318115], + [-3.5265326499938965, 5.59358024597168], + [2.813232183456421, -4.244821071624756], + [-7.009300708770752, -2.5614898204803467], + [0.04420817643404007, -0.7099901437759399], + [2.8573741912841797, -4.6427106857299805], + [-0.4133051037788391, 9.011222839355469], + [-4.52170991897583, 5.75813627243042], + [2.061089277267456, 0.9990531206130981], + [-4.569912433624268, 1.827708125114441], + [-5.220099925994873, 4.5206193923950195], + [-4.573538780212402, -1.1777294874191284], + [3.103053569793701, -5.266016483306885], + [-2.5575058460235596, 1.5727459192276], + [5.350107669830322, -2.046494960784912], + [-1.932827353477478, 1.7698615789413452], + [-6.103980541229248, 5.393214225769043], + [3.114290237426758, -4.694866180419922], + [7.986135959625244, -2.049736976623535], + [-0.3844311237335205, 9.395181655883789], + [2.529637575149536, 0.9493589997291565], + [-3.2176332473754883, 5.911960601806641], + [-0.3523574471473694, 8.970680236816406], + [0.3972485661506653, 4.588671684265137], + [-5.472139835357666, -3.7025649547576904], + [-5.24852991104126, 4.217360496520996], + [-3.4961817264556885, -2.1269795894622803], + [-5.154562950134277, 2.114244222640991], + [-5.536789417266846, -2.38754940032959], + [2.0205447673797607, -5.241820335388184], + [2.7863576412200928, -4.74320125579834], + [5.8956074714660645, -2.6797220706939697], + [-4.6395440101623535, 3.9887702465057373], + [-6.055948734283447, 6.571306228637695], + [-0.5115029215812683, 11.174507141113281], + [-2.519550085067749, 2.177171468734741], + [3.7364654541015625, -1.5223616361618042], + [1.8947820663452148, -3.022963762283325], + [2.995818853378296, -4.497650146484375], + [-2.0542654991149902, 5.615161895751953], + [5.4380316734313965, -1.159450650215149], + [-2.422395706176758, 5.90657901763916], + [1.2007882595062256, -5.970709800720215], + [0.2912924289703369, -0.7175679802894592], + [1.2215903997421265, 9.346839904785156], + [-5.906581401824951, -1.3481000661849976], + [-5.627920627593994, 7.77672004699707], + [2.565290927886963, 2.0779149532318115], + [-0.5109801292419434, -0.6678522825241089], + [-4.150295257568359, 4.1404128074646], + [4.932924270629883, -1.248484492301941], + [8.771079063415527, -2.413191556930542], + [-2.925675630569458, -2.8895552158355713], + [-4.879930019378662, 5.665535926818848], + [8.011826515197754, -2.4956023693084717], + [2.9595413208007812, -4.5116071701049805], + [2.850219488143921, -4.332840442657471], + [1.1248434782028198, 1.8609768152236938], + [-2.442650318145752, 2.361879348754883], + [-4.055100917816162, 4.708836555480957], + [-5.140744209289551, -3.275191307067871], + [-5.382649898529053, -3.197493314743042], + [-4.573084354400635, -1.1057052612304688], + [-1.6542963981628418, 4.441261291503906], + [-1.8433995246887207, 1.8669350147247314], + [2.8730034828186035, -4.491718292236328], + [-2.7716429233551025, -1.4219939708709717], + [2.9350569248199463, -6.6934709548950195], + [2.1952013969421387, 5.79994010925293], + [1.8044904470443726, -4.0053181648254395], + [-0.2199273705482483, 9.76667594909668], + [-0.18191874027252197, 9.565567016601562], + [2.8175199031829834, -4.295278072357178], + [2.2205958366394043, -5.11404275894165], + [2.6604154109954834, -4.43852424621582], + [-4.700623512268066, -3.0625975131988525], + [-2.005225419998169, -0.7500665187835693], + [-2.2088308334350586, 2.785576581954956], + [2.5237104892730713, -5.619773864746094], + [-2.005876302719116, 0.9424986243247986], + [3.364144802093506, -5.01396369934082], + [-1.4905710220336914, -0.08328106999397278], + [2.3763315677642822, -8.37101936340332], + [-4.647588729858398, -2.8451602458953857], + [-5.262589931488037, -3.268989324569702], + [-0.0242808535695076, 9.618483543395996], + [-6.789871692657471, 3.662043809890747], + [-2.494469404220581, 1.8128772974014282], + [-2.4865078926086426, -4.258288383483887], + [-5.6382975578308105, 2.7650935649871826], + [9.525498390197754, -2.6224253177642822], + [-5.515353679656982, 5.702071189880371], + [0.07730952650308609, -1.2144737243652344], + [-5.476646900177002, 5.936822891235352], + [2.7520220279693604, -4.157174110412598], + [-4.774476528167725, -4.720151901245117], + [6.161627769470215, 7.9122748374938965], + [-6.533666610717773, -1.4390534162521362], + [-4.496123790740967, 5.811576843261719], + [-5.125949859619141, 7.682615280151367], + [2.9723527431488037, -4.518955230712891], + [-4.785722255706787, -3.870020866394043], + [-4.511096477508545, -5.654817581176758], + [2.7437732219696045, -0.4014754295349121], + [-2.891470193862915, 4.16474723815918], + [0.7668138742446899, -6.095465660095215], + [-0.3529815077781677, 10.609640121459961], + [-4.002135276794434, 2.9733681678771973], + [3.20520281791687, -6.931138515472412], + [9.125903129577637, -2.3486318588256836], + [2.125824451446533, 5.718405246734619], + [-6.328125, 8.442842483520508], + [-5.028613567352295, 4.698916912078857], + [3.0324747562408447, -4.553164005279541], + [-6.328207492828369, -2.4016332626342773], + [6.209804534912109, -1.3688420057296753], + [-4.985106945037842, -3.8800222873687744], + [-0.6337254643440247, -0.03305307403206825], + [-5.057753562927246, -3.212066173553467], + [-2.367114305496216, 0.865138053894043], + [-5.976259708404541, 7.065971374511719], + [2.3854434490203857, -8.80794906616211], + [-3.276154041290283, -0.5709989666938782], + [-4.697858810424805, -0.7433143854141235], + [3.169002056121826, -6.353826522827148], + [-0.529026210308075, 5.604615211486816], + [-6.372654438018799, -0.32092249393463135], + [-1.655555009841919, 1.4019293785095215], + [-3.836320638656616, 6.226686477661133], + [-1.2988377809524536, -0.8153425455093384], + [2.4238393306732178, 3.6038966178894043], + [-4.625813961029053, 3.450031042098999], + [-4.244476318359375, -2.7403452396392822], + [0.8790135979652405, -7.358402729034424], + [1.699937105178833, 0.5417361259460449], + [7.806905269622803, -2.630615234375], + [-4.438009738922119, -4.00216817855835], + [-6.679985523223877, -2.045844316482544], + [-6.98795223236084, 1.1616376638412476], + [-2.669903516769409, 4.684263229370117], + [-0.24629515409469604, 10.570194244384766], + [-7.02999210357666, -1.2624120712280273], + [-0.6404179930686951, -0.7286373972892761], + [9.927422523498535, -2.8328206539154053], + [-7.023594379425049, -2.207796096801758], + [-5.998855113983154, -2.512420415878296], + [-2.2066218852996826, 0.8197680711746216], + [3.6112844944000244, -1.9941140413284302], + [-1.4569424390792847, 0.5699487924575806], + [-5.0611138343811035, 0.40742558240890503], + [-4.765827178955078, 1.6090813875198364], + [-4.885512828826904, -4.5217695236206055], + [-5.072929859161377, -3.736701250076294], + [1.1133344173431396, -7.01234245300293], + [9.750237464904785, -2.7581801414489746], + [2.33548903465271, -3.935371160507202], + [0.23562252521514893, -5.765182018280029], + [-5.183156490325928, 3.4121272563934326], + [-4.817359447479248, 6.634586334228516], + [2.481996774673462, 0.7380197048187256], + [-4.3112287521362305, -4.183821678161621], + [9.26087760925293, -2.548772096633911], + [-5.990694522857666, 2.0051002502441406], + [-0.16510874032974243, 9.687753677368164], + [-2.439147710800171, 1.5708545446395874], + [2.3884589672088623, -4.677979469299316], + [4.764899730682373, 7.174429893493652], + [2.0713067054748535, -3.0862629413604736], + [1.2219374179840088, -6.916502952575684], + [5.935622692108154, -4.118912696838379], + [-2.4145357608795166, 2.2154366970062256], + [-2.5482802391052246, 1.2968882322311401], + [-3.982055425643921, -2.3902950286865234], + [6.687582969665527, -1.8726080656051636], + [-3.4114601612091064, 4.760654449462891], + [2.469773292541504, 6.180685520172119], + [-6.909079551696777, -2.648707866668701], + [2.2611539363861084, -3.466486692428589], + [-0.5691490769386292, 5.136814117431641], + [2.5833094120025635, -6.093527317047119], + [-1.971147894859314, -1.1336214542388916], + [-2.044454336166382, -1.0934869050979614], + [-0.27414470911026, 10.585247039794922], + [7.571717739105225, -2.25594162940979], + [1.6176140308380127, 5.662984371185303], + [8.28152847290039, -2.7418630123138428], + [1.6922399997711182, 5.493170738220215], + [-4.074649810791016, -0.9348939657211304], + [1.7468829154968262, -8.517793655395508], + [0.09586768597364426, 9.853017807006836], + [-3.46120285987854, -1.3303903341293335], + [7.2462382316589355, -2.498825788497925], + [-3.8567402362823486, -3.3679630756378174], + [-1.1326749324798584, -0.4195154905319214], + [-4.216934680938721, 0.712849497795105], + [-4.079016208648682, -5.301959991455078], + [1.9870669841766357, -6.620147705078125], + [3.1815805435180664, -4.790710926055908], + [8.566285133361816, -2.5907247066497803], + [-0.13163349032402039, -1.2244713306427002], + [-5.80709981918335, 4.921939849853516], + [-5.795232772827148, 0.6902698278427124], + [-5.125624179840088, 4.203640460968018], + [7.769099712371826, -3.3866841793060303], + [1.800839900970459, -7.573666572570801], + [-2.420881986618042, 1.7853562831878662], + [-5.42996072769165, -0.3693596124649048], + [5.334704875946045, 7.576188564300537], + [-2.5192179679870605, -2.5392298698425293], + [4.502020359039307, -2.19571852684021], + [-4.012208938598633, -1.1396276950836182], + [-0.47884732484817505, 9.750823974609375], + [-3.1407625675201416, -4.524820804595947], + [3.012784481048584, 6.340811252593994], + [2.717129945755005, -4.136842727661133], + [-2.0677855014801025, 2.1321396827697754], + [-2.8994300365448, -1.8575869798660278], + [-4.59177827835083, -0.9701918959617615], + [-0.2290087342262268, 9.503875732421875], + [7.65326452255249, -1.7081509828567505], + [-5.831397533416748, 3.1973342895507812], + [8.742466926574707, -2.3076364994049072], + [8.411465644836426, -2.6310293674468994], + [-4.487048625946045, -2.7422866821289062], + [4.987997531890869, -0.9769246578216553], + [1.7264277935028076, -5.11528205871582], + [-5.116394519805908, 4.703159332275391], + [-3.5989797115325928, -4.1310224533081055], + [3.533010482788086, -5.252254009246826], + [-2.2182929515838623, 5.589803695678711], + [-4.801472187042236, 6.821810245513916], + [-0.12103278189897537, 10.099590301513672], + [-3.335191488265991, -2.5327181816101074], + [-2.696841239929199, 5.459946632385254], + [1.26266610622406, -4.342981815338135], + [-5.218529224395752, -1.056658387184143], + [-3.330880641937256, -3.05029559135437], + [9.811068534851074, -2.7062759399414062], + [-0.2355164885520935, 8.546771049499512], + [2.108823537826538, -9.933553695678711], + [2.6898458003997803, -4.229355812072754], + [-4.495352745056152, 5.877837181091309], + [4.424114227294922, -4.9431843757629395], + [-3.8041913509368896, 5.914436340332031], + [-2.5325329303741455, 1.592911720275879], + [9.065581321716309, -2.4443771839141846], + [-6.890260219573975, -0.4120999574661255], + [2.0366644859313965, -7.482687950134277], + [2.9678122997283936, -4.492288589477539], + [-4.807621479034424, -2.384263515472412], + [-1.1094061136245728, 1.393402099609375], + [7.579693794250488, -2.8244693279266357], + [-3.5312459468841553, -2.2839763164520264], + [-4.5692949295043945, 7.478485584259033], + [-4.2799811363220215, -0.1919419765472412], + [-5.016540050506592, -3.4744861125946045], + [3.1377265453338623, -4.698716163635254], + [-4.018220901489258, 5.250321388244629], + [-0.4283130168914795, -1.4904522895812988], + [2.1584954261779785, -5.508882522583008], + [6.03568172454834, -1.5095998048782349], + [-4.8744683265686035, -1.1912912130355835], + [-9.61338996887207, -0.9673186540603638], + [-2.226428270339966, 0.806358814239502], + [1.1642526388168335, -5.028241157531738], + [-2.1412434577941895, 1.3636480569839478], + [-2.1173739433288574, 2.6145832538604736], + [-4.445631504058838, -3.454162359237671], + [3.1474435329437256, -4.712538242340088], + [-5.466146945953369, 8.17047119140625], + [-3.244899272918701, -4.2533674240112305], + [-2.089578151702881, 1.1225134134292603], + [-5.062587738037109, -3.5419070720672607], + [5.602878570556641, -0.8380727767944336], + [-0.31126242876052856, 10.352935791015625], + [-5.900075912475586, -1.2755433320999146], + [-2.6416146755218506, 1.38921320438385], + [-2.872770071029663, 2.3813278675079346], + [-1.540839672088623, 2.0336546897888184], + [-2.4326627254486084, 1.7164167165756226], + [-4.565003395080566, 7.194687843322754], + [2.2948715686798096, 5.486381530761719], + [-6.127018451690674, 4.746045112609863], + [-4.8079609870910645, 3.9821951389312744], + [-2.4788122177124023, 0.8380304574966431], + [1.1102598905563354, -7.485265731811523], + [8.153523445129395, -2.4898664951324463], + [-0.6480066180229187, 7.391757011413574], + [2.7835023403167725, -6.8390302658081055], + [-3.8965799808502197, -3.064727544784546], + [2.595539093017578, 0.6405632495880127], + [9.345931053161621, -2.5861399173736572], + [-6.0755486488342285, 6.793078422546387], + [2.412801504135132, 0.7176448106765747], + [-4.479201793670654, 1.4659565687179565], + [3.4987599849700928, -4.533982753753662], + [-5.426643371582031, 5.25095272064209], + [-2.981779098510742, 2.3424816131591797], + [3.037201166152954, -4.560028076171875], + [-4.507236957550049, -3.501610517501831], + [-2.111070156097412, 6.058558464050293], + [-1.9709255695343018, 6.149892807006836], + [0.6099424958229065, 8.987676620483398], + [0.9915905594825745, -7.805482864379883], + [0.1043514534831047, 10.500785827636719], + [-6.787946701049805, 8.484915733337402], + [-3.7400171756744385, -3.465327024459839], + [6.097492694854736, -2.5073153972625732], + [-4.012515544891357, 4.18434476852417], + [2.981539726257324, -4.490190505981445], + [-1.9934899806976318, -0.16367828845977783], + [2.216583013534546, -3.333458423614502], + [2.1202101707458496, 4.4170074462890625], + [-5.61367654800415, -3.1489055156707764], + [-3.3372550010681152, 6.17542839050293], + [2.9287612438201904, -4.395400047302246], + [-5.645778179168701, -4.024248123168945], + [-6.123084545135498, 6.272838592529297], + [-0.39671745896339417, 4.966850280761719], + [-3.202385663986206, -0.6372879147529602], + [3.126060724258423, -4.8110761642456055], + [-7.234712600708008, -2.3570308685302734], + [9.193360328674316, -2.5742862224578857], + [-5.618168830871582, 1.7793028354644775], + [-2.9072563648223877, 2.305731773376465], + [-0.5478041172027588, 2.093168020248413], + [7.762905120849609, -2.360347270965576], + [-2.808563470840454, 6.695426940917969], + [2.15686297416687, 3.801823854446411], + [-4.9400458335876465, 1.2132397890090942], + [4.585114002227783, 7.493494510650635], + [6.605434417724609, 7.941206455230713], + [1.730733871459961, 3.468672037124634], + [6.526463031768799, -1.352349877357483], + [-4.661312580108643, 3.1346049308776855], + [5.125477313995361, -1.0310591459274292], + [-1.7693473100662231, -1.1695257425308228], + [-4.049366474151611, -2.45314359664917], + [2.1908812522888184, 4.433472633361816], + [-5.3596415519714355, 4.653683185577393], + [-7.645137310028076, -1.8948838710784912], + [-6.442472457885742, -1.470792531967163], + [-3.9749534130096436, 5.656246185302734], + [-6.563760280609131, 7.834029197692871], + [2.079845666885376, -5.171897888183594], + [-0.4513061046600342, 9.015782356262207], + [1.3156756162643433, -8.519071578979492], + [1.8264861106872559, -6.452477931976318], + [2.8152101039886475, -4.295008659362793], + [-2.3453593254089355, 1.7605665922164917], + [-8.476577758789062, -0.6770950555801392], + [-2.221035957336426, -1.608896255493164], + [-7.557064533233643, -1.0928248167037964], + [2.449573516845703, 5.701620101928711], + [3.0122814178466797, -4.72149658203125], + [-0.470323383808136, 9.38571548461914], + [-0.3189520239830017, 10.879290580749512], + [3.3700504302978516, -5.025393486022949], + [-4.925176620483398, 4.472195625305176], + [-7.224846363067627, -0.907128095626831], + [3.0960710048675537, 0.859315037727356], + [-0.37093299627304077, 10.882535934448242], + [-5.195615768432617, 4.529541015625], + [-4.50439453125, -2.2534737586975098], + [7.456733703613281, -1.45928156375885], + [-8.208619117736816, 10.120134353637695], + [3.0441577434539795, -4.581799507141113], + [3.165120840072632, -4.736140727996826], + [4.100584506988525, -0.09036922454833984], + [-0.2874414324760437, 10.18754768371582], + [-5.067328453063965, -2.1226959228515625], + [-4.546603679656982, 3.667917490005493], + [2.959836721420288, -4.444866180419922], + [-5.906182289123535, -2.209589958190918], + [-5.970947742462158, 7.066562652587891], + [8.29699993133545, -2.3055737018585205], + [5.373422622680664, 7.4125847816467285], + [1.8203281164169312, 5.407327651977539], + [2.223322629928589, -2.7901418209075928], + [2.3335397243499756, -6.174092769622803], + [-2.880903959274292, 0.8227788209915161], + [2.2754690647125244, -5.752452850341797], + [2.5506348609924316, -7.062145233154297], + [1.0828051567077637, 1.3539484739303589], + [-0.6308735013008118, 10.16801929473877], + [-6.9933390617370605, -2.321176767349243], + [-3.9525914192199707, 4.213395118713379], + [-3.74697208404541, -3.731182098388672], + [6.510611057281494, -2.129695177078247], + [3.0741801261901855, -5.042419910430908], + [-3.0207369327545166, -1.7515993118286133], + [-6.065870761871338, -2.00396466255188], + [-0.3264925479888916, 9.777559280395508], + [5.263249397277832, -1.7318873405456543], + [-3.9479081630706787, -2.621793031692505], + [-1.2162551879882812, 3.0622494220733643], + [-4.982433319091797, -3.669018268585205], + [3.0292069911956787, -4.607503890991211], + [-4.908441543579102, 5.708256721496582], + [6.566537857055664, -1.078045129776001], + [1.4401822090148926, -7.082588195800781], + [2.2777349948883057, 5.774117946624756], + [2.922227144241333, -4.392635822296143], + [-4.950536251068115, -2.7192203998565674], + [0.6578453183174133, -0.6483631730079651], + [2.945789337158203, -4.427358627319336], + [1.9372479915618896, -7.510598182678223], + [1.970395803451538, 0.7434656023979187], + [-5.650180339813232, -4.121568202972412], + [0.2789367735385895, 0.3839932382106781], + [-4.923709392547607, 5.6381707191467285], + [-2.8579490184783936, -0.5962246656417847], + [-5.193321704864502, 4.467714786529541], + [-5.859269618988037, 6.066854476928711], + [2.53369402885437, -6.5236921310424805], + [2.246999502182007, -7.366622447967529], + [-3.4452261924743652, -3.675229549407959], + [-7.004348278045654, -0.408511757850647], + [-5.892724990844727, -2.513782262802124], + [5.368850231170654, -3.1460187435150146], + [-5.740304470062256, 1.812506914138794], + [3.3301687240600586, -7.324297904968262], + [0.9713762402534485, -5.988489151000977], + [-2.484687566757202, -1.1267931461334229], + [-3.679692506790161, -4.4345903396606445], + [-5.2017083168029785, 3.5650534629821777], + [-4.318385601043701, -3.2382946014404297], + [0.2001590132713318, -0.27897176146507263], + [-6.740863800048828, 8.130817413330078], + [-0.15307515859603882, 9.658748626708984], + [1.982219934463501, 5.46766471862793], + [-2.2825541496276855, 2.319317102432251], + [-6.5036749839782715, 1.238938331604004], + [-5.039412975311279, -0.33697202801704407], + [3.397324323654175, -5.115856170654297], + [-4.098381519317627, -2.1562106609344482], + [1.8741323947906494, 5.3899688720703125], + [-5.897457122802734, 6.846321105957031], + [-2.8514113426208496, 2.6965489387512207], + [-5.527222156524658, -2.5607173442840576], + [-2.5191421508789062, 6.632074356079102], + [2.9589359760284424, -4.4636030197143555], + [-1.8703418970108032, -0.5270560383796692], + [-2.9545207023620605, 2.706397294998169], + [-7.99551248550415, -1.317649245262146], + [5.830933570861816, -1.5235621929168701], + [1.5130596160888672, -7.648954391479492], + [-6.187716007232666, -2.442094564437866], + [2.1330440044403076, -10.303068161010742], + [-2.292149066925049, -1.0547317266464233], + [2.6349387168884277, -4.03932523727417], + [-2.4445977210998535, -1.5744091272354126], + [1.9172977209091187, -8.100038528442383], + [-3.366182565689087, -3.660182476043701], + [-3.424215078353882, -5.338090419769287], + [-1.8257486820220947, -2.313308000564575], + [-6.05150842666626, 8.275084495544434], + [-2.860299825668335, 3.1557586193084717], + [5.008146286010742, 6.946022033691406], + [-5.239770889282227, 2.590062379837036], + [-2.6824004650115967, 1.3970589637756348], + [2.932112455368042, -4.523706436157227], + [4.506765365600586, 6.473476409912109], + [-5.524894714355469, -3.695504665374756], + [-4.009561061859131, -3.3018758296966553], + [2.5106303691864014, -6.262229919433594], + [-5.437427520751953, 7.071751117706299], + [6.500482082366943, -1.4589531421661377], + [1.4176075458526611, -4.9329071044921875], + [-4.186221599578857, -3.1911869049072266], + [-5.532606601715088, -2.603555917739868], + [-5.925637722015381, -2.172093629837036], + [-0.9509270787239075, -1.711745262145996], + [-3.672300100326538, 5.659122467041016], + [-3.4612433910369873, -2.7512362003326416], + [-3.7905900478363037, -4.592294216156006], + [-0.17578566074371338, -0.8417714834213257], + [8.93413257598877, -2.4207756519317627], + [3.0505011081695557, -4.576714515686035], + [-0.00035846978425979614, -0.33882105350494385], + [-2.440258264541626, -3.1739158630371094], + [0.7059279084205627, 0.3287860155105591], + [3.48878812789917, 6.3450798988342285], + [2.841986656188965, -4.234028339385986], + [-4.966508388519287, -1.141607403755188], + [1.8832614421844482, 4.159334659576416], + [-4.792336940765381, -3.155334234237671], + [2.087489604949951, -3.987388849258423], + [1.0940721035003662, -1.445497751235962], + [-4.892032146453857, -2.8987739086151123], + [2.410672426223755, 5.276342868804932], + [2.7056119441986084, 1.0358487367630005], + [1.6627765893936157, -5.970894813537598], + [2.2647008895874023, 5.778367042541504], + [-3.6028244495391846, 3.8214876651763916], + [-7.606133937835693, -0.7614525556564331], + [7.7014479637146, -1.8339712619781494], + [-3.6943163871765137, -1.3250012397766113], + [-1.3708313703536987, -1.6773711442947388], + [4.786040782928467, -5.074847221374512], + [-2.441627025604248, 0.9495837092399597], + [-0.3897758722305298, 10.043085098266602], + [1.7790584564208984, 5.790473461151123], + [8.165787696838379, -2.087526559829712], + [-4.94036340713501, -3.5811688899993896], + [0.6008360385894775, 0.9427491426467896], + [2.5645980834960938, -8.229588508605957], + [-0.8612805008888245, -0.7277206182479858], + [-6.579278945922852, 7.67299222946167], + [2.5344252586364746, -3.141850233078003], + [-3.2597925662994385, 1.2913196086883545], + [-5.904512882232666, -1.7190560102462769], + [-5.015081405639648, 5.122148036956787], + [-4.802590370178223, 0.7096126079559326], + [3.060115337371826, -6.229231834411621], + [1.9057230949401855, 2.588019609451294], + [-5.183200359344482, -0.1643691062927246], + [-7.427847385406494, 7.956640243530273], + [6.486263751983643, -1.076928734779358], + [8.121560096740723, -1.9558384418487549], + [9.321368217468262, -2.459312677383423], + [-5.507223606109619, 4.114975452423096], + [-0.10551745444536209, 10.179454803466797], + [-7.470587253570557, -1.1765638589859009], + [-0.011488266289234161, 9.775691986083984], + [-0.1873287558555603, 10.063751220703125], + [-3.8391735553741455, -1.7182239294052124], + [0.8762238025665283, 6.262641906738281], + [-0.30798855423927307, -0.9490752220153809], + [0.5916908383369446, -5.89549446105957], + [-6.171199798583984, 6.919829845428467], + [8.980183601379395, -2.410959005355835], + [7.767335414886475, -2.1269664764404297], + [2.719125986099243, -4.488132953643799], + [-1.1246397495269775, -0.7443335056304932], + [-5.582625865936279, -2.745786190032959], + [-5.5225911140441895, -2.3101019859313965], + [-3.280535936355591, -3.6117873191833496], + [-2.113983392715454, 2.3754289150238037], + [1.8408842086791992, 5.712810039520264], + [3.47548508644104, -5.511254787445068], + [2.925290107727051, -4.386025428771973], + [2.826683759689331, 6.315251350402832], + [2.452354907989502, -5.856729507446289], + [5.540890693664551, -2.6201577186584473], + [-5.302002429962158, -3.7879559993743896], + [-4.367771148681641, 4.853771209716797], + [-5.484024524688721, -3.906466484069824], + [-3.102858304977417, 0.1767500340938568], + [8.488565444946289, -2.2499148845672607], + [3.082014322280884, -4.674005508422852], + [3.485924005508423, -5.566644668579102], + [-3.4259731769561768, -4.316954612731934], + [-4.883403301239014, 2.507031202316284], + [-1.7144688367843628, 2.180755376815796], + [-0.26471418142318726, 9.103311538696289], + [-4.244180202484131, -2.8275182247161865], + [-5.604177951812744, -4.840641975402832], + [-4.802815914154053, -0.8633384704589844], + [-2.9003121852874756, -1.16523015499115], + [1.5369877815246582, 0.8609986901283264], + [2.4041221141815186, -7.8732404708862305], + [8.791045188903809, -2.5666916370391846], + [-0.19703710079193115, -1.4864002466201782], + [6.873502254486084, -1.3862829208374023], + [5.477975368499756, -0.6401033401489258], + [-2.1573538780212402, -1.134935736656189], + [-0.3841877281665802, -0.7607563734054565], + [1.4068865776062012, -7.812546730041504], + [3.2231743335723877, -5.208883762359619], + [-5.5208353996276855, 5.705702781677246], + [-0.4884970784187317, 8.82178020477295], + [2.3159637451171875, -3.2363030910491943], + [3.0713820457458496, 5.2429375648498535], + [-4.340335845947266, 4.9744062423706055], + [-7.702719211578369, -0.312546968460083], + [6.85100793838501, -2.1399354934692383], + [-5.325113296508789, -3.2615950107574463], + [-4.79202127456665, -3.189674139022827], + [0.4043808579444885, -6.17508602142334], + [-6.509232997894287, -2.45143723487854], + [-4.892692565917969, -2.9140477180480957], + [-4.900633811950684, 3.183018922805786], + [1.47078275680542, 5.451220512390137], + [-4.636284828186035, -3.0906968116760254], + [-0.9982065558433533, -1.3522157669067383], + [0.6451061367988586, -0.20209188759326935], + [-4.777792453765869, -0.9600093364715576], + [-0.8329373598098755, 9.49472713470459], + [-0.9258033037185669, -0.657250165939331], + [1.6993968486785889, 0.6258609890937805], + [-5.0421881675720215, 2.150569200515747], + [2.68487286567688, -4.09583854675293], + [-4.454315185546875, -1.5720508098602295], + [-3.8336644172668457, -2.0514791011810303], + [-1.8157625198364258, 1.3534111976623535], + [0.49899107217788696, 4.953006267547607], + [-8.241722106933594, -1.0767910480499268], + [1.8198057413101196, -3.130873203277588], + [2.9154043197631836, -4.417377948760986], + [0.5497927069664001, -6.222832679748535], + [-3.478346347808838, 5.941920280456543], + [9.620816230773926, -2.6922378540039062], + [-3.671879768371582, 0.3659482002258301], + [4.6775383949279785, 7.073711395263672], + [9.075947761535645, -2.422205686569214], + [-2.491865873336792, 2.0070254802703857], + [3.4463140964508057, 6.85642147064209], + [2.243572235107422, -5.4592485427856445], + [-4.343081474304199, -3.029813051223755], + [-3.8133723735809326, -1.6167073249816895], + [2.2416417598724365, 5.531559467315674], + [-2.958818197250366, -1.9565526247024536], + [0.5805243253707886, -0.6800941228866577], + [-9.28162670135498, -0.9130054712295532], + [-0.3520318865776062, 10.35256576538086], + [1.2740285396575928, -7.334223747253418], + [-3.4205667972564697, -1.4585403203964233], + [-5.352610111236572, 6.248581409454346], + [8.728468894958496, -2.2977588176727295], + [-3.2641654014587402, -0.8122353553771973], + [1.5245258808135986, -5.201316833496094], + [9.253087997436523, -2.456350088119507], + [-6.518164157867432, -1.9885103702545166], + [6.07231330871582, -2.6470792293548584], + [-2.0377047061920166, 5.787477016448975], + [-5.072916507720947, 1.1115875244140625], + [-5.5782341957092285, 4.032332420349121], + [-4.183166980743408, -0.5610002279281616], + [5.103909969329834, -1.6538764238357544], + [-3.2625231742858887, -1.3222085237503052], + [3.582103729248047, 5.807051658630371], + [1.353097677230835, -7.311521530151367], + [-3.0649869441986084, 5.115059852600098], + [-0.4121822714805603, 11.181743621826172], + [-3.0587313175201416, -0.5143311619758606], + [3.0358312129974365, -4.922656059265137], + [-4.9734206199646, -3.8357670307159424], + [0.6784185767173767, 5.2800822257995605], + [1.6515244245529175, 4.9687299728393555], + [3.1702234745025635, -4.7666239738464355], + [-5.589000701904297, 6.59071683883667], + [-4.7955427169799805, 4.9818806648254395], + [2.7691972255706787, -6.83170223236084], + [1.050909161567688, 0.357587069272995], + [-5.864819049835205, -1.3420237302780151], + [-6.242873668670654, 3.540506601333618], + [2.3800647258758545, -3.6585893630981445], + [3.2036499977111816, 0.12577664852142334], + [-4.713171482086182, 2.792687177658081], + [7.864115238189697, -2.0173397064208984], + [-4.400949954986572, -2.7900731563568115], + [-2.6754674911499023, -3.40442156791687], + [3.0508410930633545, -4.85031270980835], + [-3.9874472618103027, -3.83363676071167], + [2.7740933895111084, -6.719099521636963], + [-0.4548230767250061, 8.87050724029541], + [3.060765504837036, -4.590729713439941], + [3.0852859020233154, -4.895966529846191], + [-3.321457624435425, -3.5956029891967773], + [-4.813897609710693, -2.014159917831421], + [-3.779001474380493, -4.691216945648193], + [0.11115487664937973, -0.21276184916496277], + [-6.947655200958252, -1.4523260593414307], + [2.487623691558838, -3.9689877033233643], + [1.759699821472168, 4.989553928375244], + [-5.336315631866455, -3.369032144546509], + [7.436596393585205, -2.3952691555023193], + [1.3635021448135376, -7.48098087310791], + [2.366955041885376, -3.6646463871002197], + [-2.3712120056152344, -2.5312047004699707], + [-6.12717342376709, 5.757523536682129], + [1.127200961112976, -7.513614654541016], + [-2.0271353721618652, 2.489450693130493], + [-6.444582462310791, 7.810136795043945], + [3.0468523502349854, -6.087213039398193], + [-2.264441967010498, 2.219947099685669], + [-2.5758109092712402, -3.927687406539917], + [0.48223602771759033, -0.5857324600219727], + [5.8171210289001465, 7.692348480224609], + [1.3403034210205078, 0.619144082069397], + [-2.3810760974884033, 1.4207638502120972], + [1.7339988946914673, 5.687100410461426], + [-5.700003147125244, -0.7608602046966553], + [-3.4981865882873535, -2.5008385181427], + [-4.639423370361328, -2.409569501876831], + [-6.496263027191162, -1.6918306350708008], + [-4.0540642738342285, -2.6163923740386963], + [9.170629501342773, -2.5951969623565674], + [2.654984474182129, -7.2608723640441895], + [-4.901966571807861, -0.5982755422592163], + [-6.634665489196777, 8.181571960449219], + [-1.2622936964035034, 1.373875617980957], + [-0.23946994543075562, 10.31062126159668], + [1.8551430702209473, -8.196279525756836], + [-4.8320698738098145, -2.4001529216766357], + [3.0388247966766357, -6.126399517059326], + [0.6209800839424133, -6.419471740722656], + [2.7165491580963135, -4.183091163635254], + [-5.001887798309326, -2.2937796115875244], + [4.100207805633545, -3.29575514793396], + [3.0589616298675537, -5.99614953994751], + [5.014974117279053, 7.283334255218506], + [9.131900787353516, -2.5560805797576904], + [6.679279327392578, -1.8487088680267334], + [0.39903372526168823, 0.3053799867630005], + [-3.533688545227051, -2.5004448890686035], + [-3.1389966011047363, 6.372622489929199], + [8.612197875976562, -2.7469584941864014], + [-2.565978765487671, -4.469165802001953], + [4.406872749328613, 7.569365978240967], + [3.135016441345215, 5.710697174072266], + [-4.654763698577881, -2.856302499771118], + [-3.626532793045044, -1.8935962915420532], + [-5.9695258140563965, -4.005519390106201], + [-2.5178744792938232, 1.6481565237045288], + [-6.40844202041626, -2.3728253841400146], + [-1.198096752166748, -1.290852665901184], + [1.8997902870178223, 0.5997652411460876], + [3.035243272781372, -4.677524566650391], + [-3.2699191570281982, -3.9868650436401367], + [-4.782243251800537, 1.2545678615570068], + [-4.556014537811279, -1.9062267541885376], + [-5.144327640533447, -1.0539774894714355], + [7.947618007659912, -1.938995599746704], + [-6.882272243499756, 2.1257379055023193], + [-2.4577672481536865, 1.9796603918075562], + [2.3336479663848877, 0.6193159818649292], + [-0.19947504997253418, 9.200568199157715], + [2.0977280139923096, -4.152092456817627], + [-1.9983638525009155, 2.484180212020874], + [-4.7126054763793945, 0.1395409107208252], + [0.2413543462753296, -0.5271003246307373], + [-4.9716477394104, -3.9446961879730225], + [2.4451043605804443, 0.7344853281974792], + [1.5315568447113037, -2.5003154277801514], + [-4.833244323730469, -2.1839210987091064], + [3.1048545837402344, -4.80156135559082], + [4.16309118270874, 6.678675651550293], + [-5.708127975463867, -1.9138485193252563], + [-5.144360065460205, -1.5961676836013794], + [-0.34548020362854004, -0.971979022026062], + [-2.0996925830841064, 2.71844744682312], + [-4.591087818145752, -3.5277349948883057], + [2.364629030227661, -4.6472063064575195], + [-6.063694477081299, -1.278486967086792], + [-3.21321702003479, 4.6816534996032715], + [-2.0963406562805176, 2.302388906478882], + [1.2654445171356201, -6.719781398773193], + [-5.466834545135498, -2.416930913925171], + [1.6155362129211426, 5.392192840576172], + [-5.442372798919678, -2.366302967071533], + [7.977207660675049, -1.9983357191085815], + [-3.9939053058624268, 4.593512535095215], + [0.4869305491447449, -0.9508390426635742], + [2.087442636489868, 5.7283124923706055], + [-6.821685314178467, -1.3771246671676636], + [-3.316622495651245, -3.067519426345825], + [5.088308811187744, -2.3658337593078613], + [-3.4321486949920654, -2.4555554389953613], + [3.488809823989868, -5.794281005859375], + [2.366000175476074, 6.616002082824707], + [-5.6211676597595215, -0.550644040107727], + [4.513078212738037, 6.632830619812012], + [-4.25179386138916, 6.065783977508545], + [9.547107696533203, -2.6183204650878906], + [-2.652031898498535, -2.8588943481445312], + [-3.2451558113098145, -2.57883620262146], + [-4.494200706481934, -3.5527398586273193], + [-2.4395439624786377, 2.091982364654541], + [2.8824164867401123, -4.677529811859131], + [-6.06630277633667, -2.64536190032959], + [1.4343547821044922, 0.5566340684890747], + [-5.529675483703613, -1.9485788345336914], + [1.6184029579162598, 0.32879650592803955], + [10.636107444763184, -2.9547765254974365], + [-6.104904651641846, 7.630463600158691], + [1.9352209568023682, 0.6928070783615112], + [-4.41669225692749, -2.2421677112579346], + [-3.329904794692993, -0.542979896068573], + [10.076029777526855, -2.842542886734009], + [-7.47157096862793, -0.5773614645004272], + [-2.7599709033966064, 0.41613250970840454], + [-2.5009429454803467, 1.7773042917251587], + [0.07809137552976608, 5.055485725402832], + [-2.3584742546081543, -0.8156858086585999], + [-4.399104595184326, -1.5692905187606812], + [-0.2435605525970459, 9.311540603637695], + [-4.369685173034668, -3.605339765548706], + [2.2314345836639404, 5.567403316497803], + [-4.34584379196167, 6.7567949295043945], + [9.14319896697998, -2.5565693378448486], + [3.1630449295043945, -6.8408522605896], + [-4.373193740844727, 4.683812618255615], + [-7.057430744171143, 8.511601448059082], + [-0.33550190925598145, 10.199349403381348], + [4.077354907989502, 6.714308738708496], + [-4.518745422363281, -5.299459457397461], + [-1.7437154054641724, 5.2851080894470215], + [-0.4798978567123413, 11.540593147277832], + [-3.961411237716675, -1.9157791137695312], + [-5.129484176635742, 4.9497294425964355], + [-2.8530232906341553, 2.9272189140319824], + [-2.9598615169525146, -0.3484092950820923], + [2.2564775943756104, 5.59678840637207], + [3.511260747909546, -5.49314546585083], + [-2.294121265411377, 0.9694695472717285], + [1.7503223419189453, 1.3737086057662964], + [2.4791109561920166, -5.8573408126831055], + [-2.449756383895874, 1.6763867139816284], + [0.4252346158027649, 7.456650733947754], + [-4.187957286834717, -1.5049560070037842], + [0.9571568369865417, 0.34147360920906067], + [-0.43675708770751953, 11.554147720336914], + [5.69366455078125, -1.1681843996047974], + [-5.421428680419922, 3.4323620796203613], + [3.1846673488616943, -5.109399795532227], + [1.186147928237915, -7.609131813049316], + [-4.910024166107178, 2.3097243309020996], + [-0.6432579159736633, 4.797230243682861], + [-2.076110363006592, -1.2797493934631348], + [3.8723511695861816, 6.252752780914307], + [7.657668113708496, -2.68218731880188], + [2.5721352100372314, -6.611334800720215], + [-4.277101516723633, -2.3842079639434814], + [0.6052058339118958, -0.322906494140625], + [-4.844429969787598, -2.8471391201019287], + [-5.369022846221924, 5.508689880371094], + [2.882960081100464, 0.7444459199905396], + [-2.847259759902954, -3.494687557220459], + [1.5473146438598633, 5.470105171203613], + [3.3416078090667725, 7.197381019592285], + [-3.844867467880249, -0.5593516826629639], + [-3.894902467727661, -4.475144386291504], + [-4.637271404266357, -2.660449504852295], + [1.5110681056976318, 0.35615575313568115], + [-3.538640260696411, -1.1709213256835938], + [2.198918104171753, 5.544022560119629], + [-2.4259049892425537, 0.42884981632232666], + [-6.354018688201904, -0.44056618213653564], + [-2.159773349761963, 1.623835563659668], + [-6.554023265838623, -1.897938847541809], + [-3.3649964332580566, -2.4570810794830322], + [3.0398027896881104, -7.273472309112549], + [-1.0027176141738892, -0.8694196343421936], + [-1.0830211639404297, -3.36254620552063], + [-2.6670265197753906, 4.531770706176758], + [-1.2604769468307495, -0.8094683885574341], + [0.21398800611495972, -4.238811492919922], + [8.880440711975098, -2.4171688556671143], + [-5.419697284698486, -2.674797296524048], + [5.906102657318115, 7.642352104187012], + [-2.4725658893585205, 1.9130618572235107], + [-2.273695230484009, -1.2299474477767944], + [-2.7260854244232178, -3.6355478763580322], + [-2.7651305198669434, -4.415673732757568], + [1.6258593797683716, 5.07512092590332], + [-4.581695556640625, -3.2340335845947266], + [2.364823341369629, 6.195989608764648], + [-3.463383913040161, -0.449735164642334], + [-5.0232367515563965, 0.8099665641784668], + [-2.1260643005371094, 2.8830525875091553], + [-0.10876870900392532, 7.965824127197266], + [-0.027102060616016388, -0.5137068629264832], + [-3.2814671993255615, -1.3754620552062988], + [-0.9027021527290344, 8.986296653747559], + [-4.218508243560791, -0.6361205577850342], + [1.2159148454666138, -7.60700798034668], + [-6.61826753616333, -0.8497016429901123], + [-6.44617223739624, 3.1928417682647705], + [-0.29013240337371826, -0.6702437996864319], + [-4.374877452850342, -1.481751561164856], + [-5.641819477081299, 2.5897629261016846], + [-3.7249295711517334, 5.23574161529541], + [-0.338087260723114, 10.016450881958008], + [-2.068776845932007, 2.511101722717285], + [-2.1488771438598633, 2.671896457672119], + [10.71297550201416, -2.938119411468506], + [-2.169287919998169, 4.867640018463135], + [0.955710232257843, -5.043351650238037], + [2.7178962230682373, -3.9574296474456787], + [-4.657479763031006, -1.4786769151687622], + [3.258039712905884, -4.959322929382324], + [-5.857147693634033, -2.9407596588134766], + [-7.2823710441589355, -1.7320303916931152], + [-5.843541622161865, -4.048526287078857], + [-4.042802333831787, -2.220214366912842], + [-3.9658963680267334, -2.431771755218506], + [-3.2759902477264404, -2.421520948410034], + [-0.2428547739982605, 10.727106094360352], + [-6.276482582092285, -1.7370251417160034], + [-4.8179521560668945, 6.113675117492676], + [-0.33722078800201416, 1.0144315958023071], + [2.697972059249878, -4.114437103271484], + [-2.537658214569092, 2.339008092880249], + [2.594578266143799, -4.184194087982178], + [8.19953441619873, -2.7091376781463623], + [2.5682997703552246, -3.8370988368988037], + [-5.667430400848389, 5.4481353759765625], + [-3.80745530128479, -3.4367432594299316], + [2.283761739730835, 5.822309494018555], + [2.5601186752319336, -5.198525905609131], + [-5.542375087738037, 8.40209674835205], + [-0.9268047213554382, -0.7211575508117676], + [-5.847987651824951, -2.4593875408172607], + [-3.09333872795105, -2.6381852626800537], + [2.442556381225586, -9.171514511108398], + [0.03891509026288986, 9.211780548095703], + [4.727571964263916, -0.7323102951049805], + [9.139065742492676, -2.5474307537078857], + [0.446413516998291, -0.8661905527114868], + [-4.99161958694458, -7.066568851470947], + [-1.942121982574463, 2.8378186225891113], + [-5.295718669891357, 6.235529899597168], + [-0.26358187198638916, 9.488330841064453], + [-5.205626964569092, -3.8130133152008057], + [3.49015736579895, -3.8464303016662598], + [-4.877915382385254, -3.939079999923706], + [-5.337172031402588, 8.015584945678711], + [-3.3275983333587646, 2.3350722789764404], + [-0.2638910710811615, -1.411197543144226], + [3.1026480197906494, -5.216700553894043], + [-5.745506763458252, -2.5686581134796143], + [-5.73545503616333, -2.279320001602173], + [-0.386544406414032, 9.273199081420898], + [8.450392723083496, -2.418429374694824], + [-4.147590637207031, -2.107070207595825], + [2.199045181274414, -6.6493916511535645], + [-2.525916814804077, -3.9425878524780273], + [-5.46735143661499, -2.185199499130249], + [-0.6631466150283813, -1.6927107572555542], + [2.2976553440093994, 5.908533096313477], + [-5.1462273597717285, 2.6936984062194824], + [9.297255516052246, -2.5489537715911865], + [-4.279793739318848, 6.41320276260376], + [-0.20221281051635742, 10.090947151184082], + [-6.209079265594482, -2.203209638595581], + [0.38537025451660156, -5.233424186706543], + [5.48508358001709, -1.1661306619644165], + [8.866591453552246, -2.4564208984375], + [-2.7884225845336914, 4.441034317016602], + [7.445690631866455, -2.7958486080169678], + [-4.763955593109131, 6.079721450805664], + [-3.7914767265319824, -2.3549869060516357], + [8.294236183166504, -2.4343721866607666], + [-5.513577461242676, -1.0361084938049316], + [0.8644846081733704, -7.043932914733887], + [8.722146987915039, -2.3734147548675537], + [-5.337585926055908, -1.787380576133728], + [9.693159103393555, -2.701420307159424], + [-0.3555912375450134, 10.67410659790039], + [2.6667661666870117, -4.233938217163086], + [-3.404226064682007, -3.736748218536377], + [-2.0500717163085938, 1.0791301727294922], + [-5.096104145050049, 4.021265029907227], + [2.6174612045288086, -5.16041898727417], + [-5.001257419586182, -3.314560890197754], + [-4.681591987609863, 6.469674110412598], + [3.023573160171509, -4.745138645172119], + [-5.826693058013916, 8.062726974487305], + [-4.921738147735596, -0.929772138595581], + [2.9199252128601074, -4.417056083679199], + [-2.0005340576171875, 2.0498478412628174], + [-0.3111956715583801, 9.012931823730469], + [2.1397483348846436, -8.51504135131836], + [-4.47861385345459, 5.906411647796631], + [5.506200313568115, -1.2718148231506348], + [-4.565222263336182, 3.963637590408325], + [3.2797586917877197, -5.485668659210205], + [2.966015577316284, -4.427445411682129], + [-7.820260047912598, -0.9082816243171692], + [-0.3345341086387634, 11.005800247192383], + [-1.583414077758789, 7.980068206787109], + [-2.8499162197113037, 2.2684500217437744], + [-6.600048065185547, 5.176553726196289], + [1.3332347869873047, -7.237521648406982], + [1.661203145980835, 5.153364181518555], + [-0.2832030653953552, 10.247987747192383], + [-4.1708831787109375, 5.937950134277344], + [0.02069365233182907, -0.8010322451591492], + [1.348259449005127, 5.415332794189453], + [9.659323692321777, -2.7276837825775146], + [-6.5900397300720215, 8.677177429199219], + [2.8720433712005615, -4.697784423828125], + [7.696600437164307, -2.8418407440185547], + [2.9444010257720947, -4.745805263519287], + [7.014698505401611, -2.1412394046783447], + [-4.816195011138916, 6.169938087463379], + [-5.197188854217529, -2.134370803833008], + [6.770880222320557, -1.491471767425537], + [3.341917037963867, -4.989152908325195], + [10.106410026550293, -2.7873075008392334], + [-4.203273296356201, -3.5765154361724854], + [-3.7041261196136475, -1.589694857597351], + [-2.870290994644165, -3.69100022315979], + [-6.476760387420654, -2.4895288944244385], + [3.245729684829712, -2.330436944961548], + [-2.4689652919769287, 1.4375630617141724], + [-3.9604036808013916, -2.834617853164673], + [6.5175299644470215, -1.3845680952072144], + [-2.5371720790863037, 1.0395748615264893], + [3.4165568351745605, 6.238595008850098], + [-5.724874973297119, -3.667050361633301], + [-3.034641981124878, -2.463026285171509], + [6.180797576904297, -5.120430946350098], + [2.9273648262023926, -4.293394088745117], + [-0.5760747194290161, 4.3193359375], + [-4.289613723754883, -0.9254092574119568], + [2.530728578567505, -3.9457802772521973], + [-3.978846788406372, -2.6299874782562256], + [2.412445545196533, -9.377046585083008], + [0.13511282205581665, 9.664122581481934], + [6.459774971008301, -1.776978850364685], + [-2.2818715572357178, 2.4255592823028564], + [-4.408236026763916, -5.178436279296875], + [-4.369758129119873, -1.715815782546997], + [-5.40981912612915, -2.632115602493286], + [-7.944820880889893, -0.40727710723876953], + [-3.1403653621673584, 5.917276382446289], + [3.1495931148529053, -4.723165512084961], + [-5.928511142730713, -1.3113744258880615], + [1.0477017164230347, -0.09766334295272827], + [-5.084660053253174, 0.8003507852554321], + [-0.5069571137428284, 9.603212356567383], + [-5.543779373168945, -2.3753304481506348], + [1.3686041831970215, -8.290389060974121], + [4.57053279876709, 7.003942966461182], + [-3.5368540287017822, 5.801390647888184], + [-4.934545993804932, -3.3988022804260254], + [-4.545616626739502, -3.6114368438720703], + [-5.0369954109191895, -2.67490553855896], + [-7.067167282104492, 2.127142906188965], + [-0.5350552797317505, 10.958124160766602], + [3.0619800090789795, 0.9512460231781006], + [7.429862022399902, -2.3781425952911377], + [6.8616838455200195, -5.7287278175354], + [1.909427285194397, 5.78241491317749], + [-0.11541200429201126, 9.6483154296875], + [-0.5671974420547485, 8.545194625854492], + [-3.700554132461548, 5.614734172821045], + [-2.2330126762390137, 1.987477421760559], + [-5.821173667907715, 5.787143707275391], + [0.9228355288505554, -6.300678730010986], + [2.310835123062134, 5.152364253997803], + [4.514107704162598, -2.914323329925537], + [-6.414687633514404, -2.0190744400024414], + [1.9863641262054443, 5.699059009552002], + [-4.469544410705566, -1.9534802436828613], + [-2.1017611026763916, 2.5915935039520264], + [2.2613675594329834, 5.521235942840576], + [7.921151638031006, -2.4246318340301514], + [9.403275489807129, -2.6385395526885986], + [9.113046646118164, -2.4983785152435303], + [2.0026490688323975, -8.49483585357666], + [-3.5049567222595215, -3.012627363204956], + [5.296635627746582, -1.0759435892105103], + [0.27036869525909424, 6.488265037536621], + [2.973576784133911, -4.714127540588379], + [-2.611112117767334, -0.5298254489898682], + [2.9844791889190674, -4.482027530670166], + [-5.819845676422119, -0.9766800403594971], + [-2.0293726921081543, 2.2130019664764404], + [-4.710779666900635, 4.020160675048828], + [0.2722693681716919, -5.046539306640625], + [4.0439581871032715, 6.8028764724731445], + [2.902048110961914, -4.364035606384277], + [3.0353407859802246, -4.741158485412598], + [-2.272160768508911, -0.16039475798606873], + [3.088026762008667, -4.825380325317383], + [8.824707984924316, -2.3547680377960205], + [6.4558305740356445, -2.85705828666687], + [-0.1352866291999817, 10.119256973266602], + [-4.94520902633667, -2.125722646713257], + [5.120188236236572, -2.0147159099578857], + [2.8208141326904297, -5.613026142120361], + [0.9945563673973083, 6.168170928955078], + [0.6184296607971191, -0.9824708700180054], + [5.925430774688721, -0.8241503834724426], + [-0.20821219682693481, 8.885673522949219], + [2.3011889457702637, 5.795695781707764], + [8.171141624450684, -2.8569462299346924], + [1.426349401473999, -6.27782678604126], + [1.3531930446624756, 5.183732986450195], + [-2.181655168533325, -1.816602349281311], + [-0.2800373435020447, 9.629724502563477], + [2.916929006576538, -4.562480926513672], + [-5.253799915313721, -3.117182970046997], + [-0.25880616903305054, 10.901285171508789], + [0.279106080532074, 8.325957298278809], + [-2.0263137817382812, 2.6605329513549805], + [-0.10145200043916702, 8.951351165771484], + [-4.990567684173584, -1.4614263772964478], + [9.492077827453613, -2.6499836444854736], + [-3.9090826511383057, -2.9255802631378174], + [-0.11108440905809402, 9.841533660888672], + [5.353271961212158, -1.0311859846115112], + [-3.553969383239746, 3.72589111328125], + [2.0311777591705322, 1.0707863569259644], + [2.566202163696289, -3.8198792934417725], + [-0.13402962684631348, 9.824075698852539], + [0.05071007460355759, 9.608646392822266], + [-4.686548709869385, -0.7526082396507263], + [-4.687607288360596, 5.967526435852051], + [-0.3944503366947174, 5.632052421569824], + [-4.907038688659668, -4.844558238983154], + [-4.427371025085449, -2.1678619384765625], + [-4.407303810119629, -3.0029537677764893], + [9.328934669494629, -2.6041908264160156], + [-0.11978776007890701, 10.113275527954102], + [-3.3960745334625244, -2.2841813564300537], + [-6.4588623046875, -1.6069241762161255], + [4.794775485992432, 7.280135631561279], + [8.250950813293457, -1.7080509662628174], + [1.0242536067962646, -7.553178787231445], + [-5.109383583068848, -3.488870620727539], + [-0.2592541575431824, -1.4284683465957642], + [-5.43646764755249, -0.9983019828796387], + [-5.262498378753662, -3.4354584217071533], + [3.3809001445770264, 6.195930480957031], + [-5.0389275550842285, -2.6178886890411377], + [3.050351858139038, 6.559144973754883], + [-1.4250669479370117, 5.352116584777832], + [1.4871695041656494, 5.54555082321167], + [0.10826211422681808, 4.546034336090088], + [2.2703030109405518, -5.427803993225098], + [2.751025676727295, 5.440981864929199], + [3.3227620124816895, -1.989660620689392], + [-5.1153459548950195, -3.547887086868286], + [-4.957421779632568, 1.356437087059021], + [-3.8354523181915283, -4.78717041015625], + [-7.871232509613037, -1.4640578031539917], + [-4.573795795440674, -2.76021409034729], + [-5.276331901550293, -2.6122689247131348], + [-2.8105785846710205, 2.866842746734619], + [-1.6017653942108154, 2.3595798015594482], + [-4.407758712768555, -2.6594464778900146], + [-0.9188095927238464, 8.946562767028809], + [-4.8898820877075195, -1.5164086818695068], + [-3.449653387069702, -0.4192054867744446], + [8.6343994140625, -2.3792245388031006], + [1.8846839666366577, 5.092835426330566], + [-2.5738210678100586, -3.0363359451293945], + [-0.6636943817138672, 9.810430526733398], + [2.987128734588623, 5.9138288497924805], + [-7.056350231170654, -1.2103221416473389], + [-5.162164211273193, -3.1814186573028564], + [-2.150071859359741, 6.22813606262207], + [7.674221038818359, -2.1062467098236084], + [1.497527003288269, 5.390525817871094], + [-6.72756290435791, 8.630678176879883], + [-7.612349987030029, -1.943538784980774], + [-7.746713161468506, 9.437807083129883], + [-5.925349712371826, 2.8387563228607178], + [-1.2965137958526611, 0.9478448629379272], + [2.218759298324585, -6.522003650665283], + [-3.9354565143585205, -3.4301133155822754], + [-3.8671512603759766, -1.3002978563308716], + [-5.337250232696533, 7.920312404632568], + [-4.0345964431762695, -2.6574816703796387], + [-0.19144552946090698, 9.438243865966797], + [1.5911837816238403, -7.683426856994629], + [-5.871911525726318, 4.346321105957031], + [-5.195339202880859, -2.9756662845611572], + [9.047688484191895, -2.5707452297210693], + [2.365947961807251, -7.6013875007629395], + [8.884848594665527, -2.4996378421783447], + [10.861811637878418, -2.966101884841919], + [0.3982558250427246, -5.699728012084961], + [-0.4965702295303345, 9.475165367126465], + [5.757157802581787, -1.7203023433685303], + [-1.9807795286178589, 1.3667820692062378], + [0.39279305934906006, -0.7823380827903748], + [1.7953526973724365, 5.1165876388549805], + [-2.1435701847076416, 0.4359857141971588], + [4.685446739196777, -1.0717887878417969], + [-3.9785678386688232, -2.268198251724243], + [1.9393634796142578, 4.575770378112793], + [-6.240495204925537, 8.871000289916992], + [6.13843297958374, -1.9597800970077515], + [-3.404865026473999, -2.9027438163757324], + [-2.509485960006714, 1.948454737663269], + [-1.2383328676223755, -0.27524325251579285], + [-4.643590450286865, -3.248992681503296], + [0.00940578430891037, 9.910482406616211], + [1.7900625467300415, 4.40244722366333], + [3.271695137023926, -4.885248184204102], + [-3.7071032524108887, 6.671353816986084], + [-4.269559860229492, -2.9036262035369873], + [-2.250062942504883, 1.1327898502349854], + [7.938777446746826, -2.913539409637451], + [3.348121404647827, -4.99433708190918], + [5.985954761505127, -2.7403295040130615], + [2.827617883682251, 5.566224098205566], + [4.182196140289307, -0.8972978591918945], + [2.2303683757781982, -8.400501251220703], + [9.743010520935059, -2.750962734222412], + [-1.073135256767273, 9.264263153076172], + [-3.993577480316162, -1.7278237342834473], + [8.013956069946289, -1.9638023376464844], + [-6.707460403442383, 5.355976581573486], + [3.344963312149048, -5.325204372406006], + [-4.840895175933838, -2.5508410930633545], + [-4.920525550842285, 6.084907531738281], + [1.6277230978012085, 0.5263582468032837], + [2.7130277156829834, -6.6429548263549805], + [-0.4442119002342224, -1.283035397529602], + [7.802903175354004, -2.355550765991211], + [0.10152646154165268, -0.7561597228050232], + [-0.5235196948051453, -0.5947451591491699], + [-0.5552675127983093, 8.893205642700195], + [-5.556192874908447, -4.4663872718811035], + [-3.765509843826294, -3.2649691104888916], + [-4.573227405548096, 7.297298431396484], + [-2.3946943283081055, 5.848973751068115], + [-0.23523670434951782, 10.51805305480957], + [4.339152812957764, 6.139886379241943], + [-0.8058052659034729, 9.299954414367676], + [-0.5446961522102356, -0.9435558319091797], + [-5.112569332122803, -3.1634702682495117], + [-0.21634984016418457, 4.949463367462158], + [6.209282398223877, -1.6274267435073853], + [-0.28764206171035767, 10.15934944152832], + [3.11981463432312, -4.833673477172852], + [-3.7493643760681152, -2.3851840496063232], + [-4.872770309448242, 1.420095443725586], + [-4.398772239685059, -2.138828992843628], + [7.571577548980713, -1.9066386222839355], + [0.7292962670326233, -5.522202491760254], + [-4.648881435394287, -2.5747056007385254], + [-2.8750030994415283, 3.1955907344818115], + [1.1656360626220703, -6.1725993156433105], + [-6.135314464569092, 2.0181424617767334], + [-2.4747841358184814, 1.242323398590088], + [-1.9208984375, 1.903672456741333], + [-3.5519073009490967, -2.8591268062591553], + [-0.03879944235086441, 0.2341061234474182], + [0.409415066242218, -5.101496696472168], + [-4.452438831329346, -0.9827609658241272], + [-2.365902900695801, 1.7798817157745361], + [-6.13817834854126, 1.4847863912582397], + [-2.6750800609588623, 3.273660659790039], + [-2.7992446422576904, -1.309574842453003], + [-0.10630667954683304, 9.651971817016602], + [2.3767690658569336, 5.993931293487549], + [-4.5206685066223145, -2.9649720191955566], + [-5.585032939910889, -0.5943489670753479], + [-4.079051971435547, -4.717906951904297], + [-6.635772705078125, -1.8149396181106567], + [6.890560626983643, -5.412430763244629], + [-0.5615547895431519, 8.988018989562988], + [-4.571035861968994, -0.006330136209726334], + [-4.419234752655029, 7.19063138961792], + [-6.391360759735107, 8.222320556640625], + [-5.73495626449585, -4.741378307342529], + [-6.908751010894775, 8.689183235168457], + [3.0534751415252686, -4.828105926513672], + [-5.001715660095215, -1.7161391973495483], + [3.505443572998047, -0.03873494639992714], + [2.8493826389312744, -4.3848419189453125], + [-2.626652479171753, 1.199630618095398], + [-7.921305179595947, -2.1153650283813477], + [-6.209458351135254, 5.636928081512451], + [-2.5388336181640625, 2.227553367614746], + [-4.036518573760986, 3.4489715099334717], + [-3.9591567516326904, 5.389863014221191], + [-4.077419757843018, 5.831636428833008], + [-7.423010349273682, -1.92536461353302], + [-1.3132574558258057, 4.4329094886779785], + [7.049785614013672, -2.3552191257476807], + [-2.432111978530884, 1.0801010131835938], + [-5.555720806121826, 2.1702213287353516], + [5.030044078826904, -6.313584804534912], + [-3.9041004180908203, -4.392971515655518], + [-2.4759109020233154, 0.9169179797172546], + [0.9490088820457458, 1.8834425210952759], + [10.215536117553711, -2.742629289627075], + [1.772890329360962, 0.606611967086792], + [1.7455623149871826, 0.7488833069801331], + [4.466219425201416, -4.270391941070557], + [0.6897855401039124, -5.0425124168396], + [-5.373916149139404, 2.1817429065704346], + [9.452068328857422, -2.694368600845337], + [-3.8762595653533936, -1.1080986261367798], + [0.21941149234771729, -1.1845918893814087], + [-5.019935131072998, 6.484308242797852], + [-3.331620216369629, -4.15945291519165], + [-5.048840045928955, -2.471926212310791], + [-0.2930850386619568, 10.344467163085938], + [5.9011101722717285, -1.2199500799179077], + [-0.051461853086948395, 0.030647676438093185], + [3.270967721939087, -5.233389854431152], + [-4.941459655761719, -4.332505226135254], + [2.8865339756011963, -4.465827941894531], + [7.3066277503967285, -1.745897889137268], + [-7.339808940887451, -1.1991065740585327], + [1.5166237354278564, 5.139382362365723], + [1.7892327308654785, 5.1829023361206055], + [-4.527101993560791, -2.8756210803985596], + [2.962737798690796, -4.463769912719727], + [2.947702407836914, -4.433382511138916], + [0.6399027705192566, -5.992032051086426], + [-3.646538496017456, -0.4804534912109375], + [5.645791530609131, -1.0556696653366089], + [0.7556785345077515, 5.53406286239624], + [2.275700569152832, -5.507917881011963], + [2.0468337535858154, -9.40585708618164], + [-4.997297763824463, 3.5046417713165283], + [0.3662271499633789, -0.6012502312660217], + [-0.251781165599823, 10.050952911376953], + [-0.09483016282320023, 6.592035293579102], + [-5.703827381134033, -1.0864022970199585], + [-4.167302131652832, 5.592394828796387], + [1.100062608718872, 8.601676940917969], + [0.11864741891622543, -1.000919222831726], + [-3.830934762954712, -3.278578519821167], + [-3.3675057888031006, -2.4290077686309814], + [-4.502191543579102, -3.657877206802368], + [-7.733235836029053, 9.370190620422363], + [-3.624690294265747, 3.950972318649292], + [-6.812518119812012, 8.270462989807129], + [-3.6935713291168213, -4.259566307067871], + [-8.500574111938477, -0.8666844367980957], + [-5.589514255523682, 4.315243244171143], + [-3.6407809257507324, -1.5582085847854614], + [2.4878993034362793, 6.205135345458984], + [-3.101935625076294, -4.985322952270508], + [-0.8140324950218201, 0.11934822797775269], + [-3.8754777908325195, 4.870214939117432], + [0.8615646958351135, 0.5584575533866882], + [1.9130315780639648, -8.649715423583984], + [-4.985652446746826, -3.312880277633667], + [1.7382009029388428, -7.028923988342285], + [9.082907676696777, -2.542677640914917], + [5.442677974700928, -4.085941314697266], + [2.8191938400268555, -4.395363807678223], + [2.234149217605591, 0.7346245050430298], + [1.9704270362854004, -4.690555572509766], + [-3.8968989849090576, 6.694303512573242], + [2.4435322284698486, -7.354705333709717], + [-4.373985290527344, -2.7485086917877197], + [3.0294082164764404, -4.545979976654053], + [-4.084919452667236, -2.693591594696045], + [-2.6462905406951904, 0.44191670417785645], + [-2.2454640865325928, 0.6455845832824707], + [-4.866034984588623, 6.819459915161133], + [-5.8414106369018555, -2.7494165897369385], + [1.4914579391479492, -0.820202112197876], + [4.948573112487793, -1.2191803455352783], + [-3.8638741970062256, 5.740804672241211], + [-4.468080520629883, 4.408963203430176], + [1.530147671699524, -8.239707946777344], + [1.487282156944275, 0.022060390561819077], + [-5.80746603012085, 0.88932865858078], + [-0.24563884735107422, -1.501907467842102], + [1.5564582347869873, 0.2927713990211487], + [0.7530228495597839, -5.542710304260254], + [2.3501765727996826, 5.5554704666137695], + [2.232996702194214, -3.472316026687622], + [5.304995059967041, -1.14069664478302], + [-6.842727184295654, 8.46262264251709], + [4.1306843757629395, 6.65838623046875], + [-3.6030430793762207, -2.524573564529419], + [-4.045865535736084, 0.042255934327840805], + [-0.5414215922355652, 9.339044570922852], + [4.680552005767822, -0.6072472929954529], + [1.639878511428833, 1.4140111207962036], + [-2.5121347904205322, 0.835293173789978], + [2.2037441730499268, -6.5051774978637695], + [-6.291243553161621, -2.0863287448883057], + [1.0879031419754028, -2.867152214050293], + [1.732517957687378, -2.804889440536499], + [4.440342426300049, -5.65117073059082], + [-3.6543500423431396, -4.839495658874512], + [1.7367124557495117, 5.087747573852539], + [-6.343167781829834, 7.9441118240356445], + [-6.681882381439209, 4.551028251647949], + [7.807582855224609, -2.5871472358703613], + [-0.22738498449325562, -1.1314091682434082], + [2.85793137550354, -4.301288604736328], + [-5.731600284576416, -0.7157699465751648], + [-4.3040595054626465, -2.2049760818481445], + [-4.05565071105957, -2.445033311843872], + [-2.9923758506774902, 3.340829610824585], + [2.2648544311523438, 0.8927375078201294], + [0.26267361640930176, -0.865176260471344], + [2.918656349182129, -4.39255428314209], + [-5.393848419189453, 8.111693382263184], + [-5.291948318481445, -4.26324462890625], + [-2.387892007827759, 0.8617364168167114], + [-4.987840175628662, 5.438892364501953], + [-4.870896339416504, 3.4907407760620117], + [2.1650607585906982, 5.6874494552612305], + [4.503509998321533, 7.426669120788574], + [5.353881359100342, -1.1026095151901245], + [8.25599193572998, -2.4009652137756348], + [-5.054953098297119, 4.112678050994873], + [-3.9869914054870605, 5.425034046173096], + [-4.852427005767822, -3.974841356277466], + [-4.080657482147217, 6.2648138999938965], + [-7.320332050323486, -1.7375668287277222], + [8.985535621643066, -2.597494125366211], + [2.285276412963867, -6.069307327270508], + [1.7127913236618042, -8.636649131774902], + [1.6831605434417725, 2.8872106075286865], + [-2.656039237976074, -3.736008405685425], + [-4.673852920532227, -2.7899010181427], + [2.1252284049987793, 5.1333208084106445], + [-4.363577365875244, -2.9150915145874023], + [-3.6901557445526123, -2.147477388381958], + [1.642387866973877, 5.580686569213867], + [-2.5977530479431152, 0.9167073965072632], + [-0.7863325476646423, 5.451189041137695], + [3.0531880855560303, -4.5803303718566895], + [0.3134201169013977, -0.8810340166091919], + [-7.3748650550842285, 9.012649536132812], + [-2.409646987915039, 1.6763238906860352], + [2.4163143634796143, -4.331476211547852], + [2.4502508640289307, -0.908982515335083], + [-7.475804328918457, 9.294708251953125], + [-0.2589935064315796, 9.634942054748535], + [2.04905366897583, -8.170708656311035], + [2.229649305343628, -5.769806385040283], + [2.6415116786956787, -8.632784843444824], + [1.8030359745025635, 5.470703125], + [-4.474255084991455, -2.7814700603485107], + [2.046229839324951, 5.79647159576416], + [2.0019752979278564, 4.315387725830078], + [-3.3513100147247314, -2.106959581375122], + [-2.0815937519073486, 1.71788489818573], + [2.4133172035217285, -6.760933876037598], + [-3.528456449508667, -2.5233137607574463], + [-4.234553337097168, -2.3745148181915283], + [7.617122650146484, -2.0041210651397705], + [2.5640676021575928, -3.9352667331695557], + [-6.517991542816162, -2.670283317565918], + [-4.773764133453369, 1.5317445993423462], + [1.7991117238998413, 1.3695865869522095], + [-5.203843593597412, -1.3010127544403076], + [3.2897520065307617, 0.9726333618164062], + [5.411738872528076, -1.2586992979049683], + [2.1845293045043945, 5.974583148956299], + [0.07502000778913498, 10.257522583007812], + [-4.441911220550537, 4.3535871505737305], + [-3.5524256229400635, -2.0477607250213623], + [2.250934362411499, -6.889345169067383], + [-4.324513912200928, -0.9977213144302368], + [-0.2342706322669983, 10.360390663146973], + [3.0024101734161377, 4.970293998718262], + [2.6077492237091064, -6.277802467346191], + [5.557797908782959, 7.484435081481934], + [-5.0902814865112305, 0.05049669370055199], + [-5.58661413192749, 5.968680381774902], + [-4.717352390289307, 3.084502696990967], + [8.72691822052002, -2.7674691677093506], + [1.7399719953536987, -8.419062614440918], + [7.999232769012451, -2.5065345764160156], + [-0.9498087763786316, 9.159151077270508], + [2.686415433883667, -4.713973045349121], + [5.991710662841797, 7.665494441986084], + [-1.8157962560653687, -0.8982870578765869], + [-4.287248134613037, -4.245838165283203], + [-5.349027156829834, -2.1336376667022705], + [0.9840142130851746, -5.484574317932129], + [-0.8003982305526733, 9.539407730102539], + [2.1038694381713867, -5.137243270874023], + [1.4659950733184814, -7.496194839477539], + [0.6498985886573792, -1.0922995805740356], + [-7.608330249786377, 9.422751426696777], + [-7.968009948730469, -0.657028317451477], + [1.1718430519104004, 5.10941219329834], + [0.70311439037323, -3.5268242359161377], + [1.0282213687896729, -4.666240692138672], + [-1.436204195022583, -2.6752407550811768], + [2.3347737789154053, 5.4172773361206055], + [-4.8659234046936035, -3.3451461791992188], + [-2.4459879398345947, -2.6942267417907715], + [-6.413501262664795, 8.220107078552246], + [9.264538764953613, -2.529956340789795], + [7.4326910972595215, -1.7485584020614624], + [3.0619771480560303, -4.786951065063477], + [-5.304803371429443, -3.0379178524017334], + [-5.373931407928467, -2.9536449909210205], + [2.9583725929260254, -4.6547770500183105], + [-7.111138820648193, -2.205132484436035], + [2.605924367904663, -3.9289307594299316], + [3.8745057582855225, -3.885385036468506], + [-6.7469987869262695, 8.089415550231934], + [1.866138219833374, -7.640710353851318], + [-6.808562755584717, -1.8992985486984253], + [-2.5814263820648193, 2.5299580097198486], + [-3.722715139389038, -2.2861201763153076], + [-2.3967368602752686, 0.42173612117767334], + [-0.26965999603271484, 9.550291061401367], + [3.5649571418762207, 6.492682456970215], + [-0.6878818869590759, 8.781731605529785], + [-5.14054536819458, 6.409595489501953], + [5.302616119384766, -1.497287392616272], + [-5.21441125869751, -2.5626513957977295], + [-5.6881561279296875, 7.545953750610352], + [-1.103922724723816, -0.6658315062522888], + [-4.583245277404785, 6.815954208374023], + [-3.2821691036224365, 5.126899242401123], + [-4.3457932472229, 4.576279640197754], + [-6.076737403869629, -2.239839792251587], + [7.072338581085205, -2.419445276260376], + [-5.11014986038208, -2.9514832496643066], + [-0.2549748420715332, 9.778918266296387], + [3.101635217666626, -4.660271167755127], + [8.7574462890625, -2.466850996017456], + [-5.623185634613037, 7.378820419311523], + [-5.365192413330078, 1.7636792659759521], + [-4.769224643707275, -3.029029130935669], + [3.147714853286743, -5.0076069831848145], + [0.9465513825416565, -7.498739242553711], + [1.6623098850250244, 4.953525543212891], + [-0.5934327244758606, 10.206107139587402], + [-4.239870548248291, 7.155866622924805], + [1.8765711784362793, -3.370553970336914], + [0.2532234787940979, -2.8974051475524902], + [-0.2938650846481323, 10.212327003479004], + [3.100524663925171, -4.653594017028809], + [2.537503480911255, -6.94428825378418], + [1.411054253578186, -6.7960205078125], + [-6.635551929473877, -0.8176906108856201], + [-5.743519306182861, 3.9180309772491455], + [1.0997555255889893, -6.339980602264404], + [-5.373994827270508, 7.671145439147949], + [-5.340200901031494, -3.0355944633483887], + [-6.038292407989502, 7.670863151550293], + [-0.22286352515220642, -1.5634278059005737], + [1.4784796237945557, 5.380610466003418], + [-0.09585080295801163, -3.703627824783325], + [1.9099693298339844, 2.141706705093384], + [-5.4094672203063965, -1.8397448062896729], + [-4.241580486297607, 4.205549240112305], + [-4.08276891708374, 6.407508850097656], + [-5.81814432144165, -2.5651118755340576], + [-3.0490806102752686, -1.0844676494598389], + [2.223722219467163, 5.192340850830078], + [-4.157901287078857, 2.994054079055786], + [2.392101526260376, 0.897894024848938], + [1.0376777648925781, -6.7056498527526855], + [5.216622352600098, -1.0713118314743042], + [2.5195155143737793, 5.9891791343688965], + [8.431442260742188, -2.3424274921417236], + [2.3349218368530273, -4.585433006286621], + [-6.9926629066467285, 8.456336975097656], + [-6.849303722381592, 3.762862205505371], + [-3.1421358585357666, 2.5812103748321533], + [-2.4739532470703125, 1.5417190790176392], + [-0.2149674892425537, 10.811259269714355], + [8.5567626953125, -2.2753076553344727], + [-6.105099201202393, 4.911473274230957], + [1.5151362419128418, 1.000421404838562], + [8.172783851623535, -2.1316192150115967], + [-3.1330602169036865, 0.48728108406066895], + [-0.28212952613830566, 10.629634857177734], + [2.0983219146728516, -7.9527668952941895], + [-2.7841713428497314, 6.425588130950928], + [-0.21682888269424438, 10.074338912963867], + [1.4616117477416992, 5.29139518737793], + [-0.4413219690322876, 9.676051139831543], + [-0.23029643297195435, 10.223814010620117], + [2.4608936309814453, 5.785094261169434], + [3.058175563812256, -4.634429454803467], + [0.4036082923412323, -0.6961390376091003], + [-4.6090850830078125, -0.4572538733482361], + [1.577072262763977, -3.4441792964935303], + [3.569336175918579, -5.1544318199157715], + [-2.4527883529663086, -2.383331298828125], + [3.1009256839752197, -5.204929351806641], + [-5.037631511688232, 2.7115564346313477], + [-1.214391827583313, -1.1203051805496216], + [1.1098322868347168, -7.0431809425354], + [9.547030448913574, -2.66229248046875], + [1.4070391654968262, 5.098492622375488], + [-4.511081218719482, -2.6886727809906006], + [-0.24862295389175415, 9.656463623046875], + [6.696167469024658, -2.4534695148468018], + [7.8715643882751465, -2.705878496170044], + [0.18081793189048767, -0.11603686213493347], + [3.0545685291290283, -4.752963066101074], + [-4.037757873535156, 1.9729334115982056], + [-3.480036973953247, 3.3295693397521973], + [2.380491018295288, -8.800437927246094], + [-4.82255744934082, 4.2722296714782715], + [3.168118476867676, -5.070337772369385], + [-8.462505340576172, -0.9912298917770386], + [2.498631715774536, -4.392181396484375], + [2.7640774250030518, -4.155211448669434], + [-4.916711330413818, -4.372340202331543], + [2.1473286151885986, 5.268903732299805], + [0.6854311227798462, 0.3250548243522644], + [2.799788236618042, -4.409197807312012], + [-4.431087970733643, -1.9711068868637085], + [-5.105068683624268, -3.168037176132202], + [-6.463647842407227, 8.229988098144531], + [-5.579020023345947, -2.9049277305603027], + [3.144073486328125, -4.854743003845215], + [2.985116481781006, -4.841815948486328], + [-5.469210147857666, 7.935949325561523], + [1.9147721529006958, -4.859286308288574], + [2.008441686630249, 5.3574299812316895], + [-5.281086444854736, 0.5595799684524536], + [3.3204329013824463, 1.1924831867218018], + [-6.0997443199157715, 8.326994895935059], + [2.6557881832122803, 5.878970146179199], + [-5.41176176071167, 2.077817916870117], + [-5.0283732414245605, -3.23734712600708], + [-5.565235614776611, 7.094325065612793], + [0.1846187710762024, 5.792543411254883], + [-3.975785970687866, 4.663832664489746], + [-2.068485736846924, 2.242295026779175], + [4.409560203552246, 7.246750831604004], + [2.8227360248565674, 5.099930763244629], + [-5.086578845977783, -3.259253740310669], + [-4.512156009674072, 6.108485221862793], + [-7.641049861907959, -1.6970386505126953], + [2.006298542022705, -8.034921646118164], + [-2.403306722640991, 1.2453478574752808], + [-0.028403468430042267, 10.345263481140137], + [-2.786325693130493, 2.2510902881622314], + [1.3396766185760498, -6.585465908050537], + [-0.18893486261367798, 9.753658294677734], + [4.4443793296813965, -0.46951764822006226], + [2.8692734241485596, -4.185056686401367], + [2.5973517894744873, -7.144847869873047], + [-4.885876178741455, -4.88312292098999], + [2.6356239318847656, -4.91853141784668], + [-5.504387855529785, 3.2454700469970703], + [-4.898473739624023, -1.3834890127182007], + [-4.479198932647705, -5.3455424308776855], + [-4.561150074005127, -2.8115644454956055], + [-3.530696153640747, -1.155875325202942], + [-3.9781830310821533, -2.8040826320648193], + [-2.0144448280334473, 2.3891780376434326], + [-2.4703590869903564, 2.191287040710449], + [5.6717610359191895, -1.0910245180130005], + [-3.6539101600646973, -4.013426303863525], + [-0.20763951539993286, 9.215887069702148], + [9.552557945251465, -2.7011711597442627], + [3.119943618774414, -5.014594554901123], + [2.598459005355835, 0.9919383525848389], + [2.5293612480163574, -3.6565287113189697], + [2.041522979736328, -6.57341194152832], + [-4.831188678741455, 6.211133003234863], + [2.1098763942718506, 6.195540428161621], + [-7.7827229499816895, -1.2994006872177124], + [-3.457317352294922, -4.5860795974731445], + [3.6127429008483887, -6.886452674865723], + [0.1144225224852562, -1.0172734260559082], + [7.685796737670898, -1.8157833814620972], + [-0.41837412118911743, 9.207691192626953], + [-8.455158233642578, 10.338662147521973], + [5.32738733291626, -1.332471251487732], + [2.2821857929229736, 5.220633029937744], + [-0.2730250954627991, 9.871253967285156], + [1.5777392387390137, -6.929581642150879], + [0.498629629611969, -3.7526204586029053], + [0.308623731136322, 0.8340678215026855], + [3.1136910915374756, -5.240928649902344], + [-3.6735575199127197, -0.766585648059845], + [0.7600137591362, -6.160802841186523], + [-2.5366272926330566, 0.29902201890945435], + [-2.0698766708374023, -0.11559468507766724], + [-4.498404026031494, -2.2443628311157227], + [-5.22659969329834, -2.834524393081665], + [-0.3022506833076477, 10.000192642211914], + [-0.26157355308532715, 9.434513092041016], + [3.1677732467651367, -5.493378639221191], + [-6.954959392547607, -1.2552896738052368], + [7.663260459899902, -2.1414268016815186], + [-0.22669857740402222, 9.775979995727539], + [-4.983292579650879, -5.381686210632324], + [-3.9627835750579834, 6.459863662719727], + [-0.3280016779899597, 9.704244613647461], + [1.3837319612503052, -5.205915451049805], + [-2.5031509399414062, -3.345283031463623], + [2.2150650024414062, -3.743838310241699], + [-3.112919569015503, -2.538892984390259], + [5.880355358123779, -1.4862931966781616], + [-4.843947887420654, -2.7817418575286865], + [-4.949038028717041, -4.443431377410889], + [1.2061052322387695, -2.701509714126587], + [-0.2991895079612732, 9.823870658874512], + [4.614824295043945, 7.378619194030762], + [0.5777578353881836, -5.475757598876953], + [-0.46067601442337036, 10.653010368347168], + [-4.8954315185546875, 5.914058685302734], + [0.414995014667511, -1.841111421585083], + [8.181269645690918, -2.3233320713043213], + [-0.31904691457748413, 9.269364356994629], + [-4.821838855743408, 2.0704116821289062], + [-6.255214214324951, 6.810126304626465], + [1.8948743343353271, 5.061002731323242], + [-0.4241102337837219, 10.385435104370117], + [-4.863213062286377, -2.6093544960021973], + [-2.4773640632629395, 5.871264457702637], + [-0.8648939728736877, 9.823017120361328], + [-5.813642978668213, 1.1106433868408203], + [-3.239266872406006, -2.0200657844543457], + [-5.330028057098389, 7.642097473144531], + [-4.84746789932251, -5.583080291748047], + [-0.38737839460372925, 9.04145622253418], + [5.36353874206543, -0.9726799726486206], + [-5.962514400482178, 7.619931221008301], + [8.163313865661621, -2.0695571899414062], + [6.781105995178223, -1.5609824657440186], + [-2.841594934463501, -1.7073692083358765], + [-0.7437670230865479, -0.2598854601383209], + [2.200028419494629, -4.314455032348633], + [3.7656004428863525, -3.9362261295318604], + [-3.123321294784546, 1.590742826461792], + [4.293001651763916, 6.246115684509277], + [-4.354142189025879, -4.943634033203125], + [-0.29059898853302, -0.971527099609375], + [-5.353282928466797, 4.629345417022705], + [1.8317713737487793, -8.90072250366211], + [-1.4900901317596436, 0.6413818001747131], + [-2.8215103149414062, 1.3131686449050903], + [0.4564475417137146, -6.325671195983887], + [-5.254795551300049, 0.32028400897979736], + [-5.15097188949585, -3.561814546585083], + [-5.141066551208496, 6.047625541687012], + [-5.257867336273193, -2.6251590251922607], + [-5.470555305480957, 7.283843994140625], + [-5.883174419403076, 7.631217956542969], + [-0.6318714022636414, 11.180017471313477], + [0.951970636844635, 6.041280746459961], + [2.3507332801818848, 5.773441314697266], + [0.44047677516937256, -0.340160608291626], + [-5.338069438934326, 1.5818575620651245], + [-0.4854176640510559, 10.513848304748535], + [-4.991952419281006, -4.464357852935791], + [-5.546525478363037, -4.044496536254883], + [-4.386911869049072, -0.362759530544281], + [-3.6541531085968018, -2.1839632987976074], + [1.7941086292266846, -7.604028224945068], + [-2.591303825378418, -1.7568622827529907], + [9.713606834411621, -2.7034339904785156], + [-0.012240298092365265, 9.792695045471191], + [-5.040333271026611, -1.756210207939148], + [-0.40947669744491577, 10.838739395141602], + [2.341196298599243, -4.018138885498047], + [-4.792258262634277, 4.4151787757873535], + [2.5623791217803955, -4.182178497314453], + [1.9238440990447998, 5.68014669418335], + [1.48445463180542, -3.746964693069458], + [-1.2348939180374146, 5.339842319488525], + [-4.454848289489746, -4.170999526977539], + [8.713194847106934, -2.334807872772217], + [-3.307178258895874, 5.83232307434082], + [-0.4331591725349426, 7.154272079467773], + [2.170386552810669, 0.7157288193702698], + [0.6879428625106812, -0.5066882967948914], + [2.227872133255005, -6.6610589027404785], + [-2.414280414581299, 1.7987548112869263], + [-1.854563593864441, -0.01835525408387184], + [-5.257692337036133, 1.7017185688018799], + [2.109320640563965, 4.716208457946777], + [-4.64157247543335, 6.314242362976074], + [3.346903085708618, 6.686351299285889], + [-6.8892436027526855, -2.4545373916625977], + [-5.006850242614746, -3.1354830265045166], + [2.7329418659210205, -4.156373500823975], + [-0.16742485761642456, 9.27155876159668], + [-1.0555710792541504, 0.2863568067550659], + [2.6506106853485107, -8.085958480834961], + [2.55346417427063, 1.1034202575683594], + [1.5661559104919434, 4.772201061248779], + [-0.4559231400489807, 10.290365219116211], + [5.385146617889404, 7.233816146850586], + [1.3400983810424805, -0.0015047676861286163], + [-3.633148193359375, 4.050138473510742], + [-2.5154879093170166, -1.380367636680603], + [9.545134544372559, -2.665992259979248], + [5.22197151184082, -1.0637426376342773], + [9.200428009033203, -2.583430051803589], + [-5.195615768432617, -3.1649301052093506], + [-0.4845625162124634, -0.2179514765739441], + [-0.8627663254737854, 9.671142578125], + [2.9584367275238037, -0.9735405445098877], + [-5.505033016204834, -4.322360992431641], + [-6.583375453948975, -2.3293755054473877], + [8.008432388305664, -1.941333532333374], + [-4.16398286819458, -1.6039559841156006], + [-2.6118319034576416, 1.12934410572052], + [3.090266466140747, -4.637231826782227], + [1.7439384460449219, 5.538150787353516], + [-1.5657906532287598, 1.445183515548706], + [-0.22292661666870117, -0.7631933689117432], + [1.9675109386444092, 0.6756115555763245], + [3.157640218734741, -4.727954864501953], + [2.942732572555542, -4.5156965255737305], + [-2.6018640995025635, 2.2674362659454346], + [3.1230275630950928, -4.678797721862793], + [6.179476737976074, -1.1712435483932495], + [4.765383243560791, -1.327427625656128], + [-4.375537395477295, 5.348354816436768], + [1.7025666236877441, 5.3142194747924805], + [-6.761465072631836, 8.222410202026367], + [1.9775617122650146, -9.179036140441895], + [2.387192487716675, -3.7485883235931396], + [2.4668376445770264, 6.185239315032959], + [-0.29693877696990967, 9.760072708129883], + [8.936205863952637, -2.5916357040405273], + [0.4525220990180969, -5.977313995361328], + [-4.25015115737915, 5.242938041687012], + [-4.121777534484863, 6.181576251983643], + [-4.546053886413574, 4.291609287261963], + [3.2163732051849365, -5.13916015625], + [2.9340660572052, -5.123847007751465], + [1.6285920143127441, -7.645107269287109], + [-1.6235718727111816, 4.428109169006348], + [3.1421985626220703, -4.73733377456665], + [-0.24404266476631165, -2.069282293319702], + [-0.3528876304626465, 9.466523170471191], + [-5.406284809112549, -1.264302134513855], + [3.2467732429504395, -5.310427665710449], + [7.048892974853516, -1.6351248025894165], + [-3.4321863651275635, -2.6365342140197754], + [1.5613906383514404, -5.184780597686768], + [0.8756054043769836, -6.710006237030029], + [-3.404498338699341, -4.004729747772217], + [-2.1566150188446045, 0.8482999205589294], + [-5.599323749542236, 3.2067346572875977], + [2.1360981464385986, 5.169274806976318], + [-5.484822750091553, -1.0910637378692627], + [-4.259923458099365, -2.985642194747925], + [-3.4149839878082275, 3.5330755710601807], + [1.9739999771118164, -3.564404010772705], + [-2.0448319911956787, 0.595717191696167], + [-6.222062587738037, 2.7660562992095947], + [4.130413055419922, 6.884044647216797], + [2.7242684364318848, -4.965595245361328], + [2.3496639728546143, -3.8289217948913574], + [-3.0002098083496094, 3.3699302673339844], + [-3.746309757232666, 0.37890931963920593], + [-3.594792127609253, 2.932158946990967], + [-3.493741273880005, 6.86183500289917], + [-0.4188963770866394, -0.8564653396606445], + [-5.120352268218994, -2.5120139122009277], + [-3.5524742603302, 5.654183387756348], + [-1.1155762672424316, 7.97880744934082], + [3.1399710178375244, -4.69246244430542], + [-3.6419363021850586, 7.390364170074463], + [-5.912118911743164, -1.7271640300750732], + [0.4675214886665344, 0.4401443898677826], + [6.394973278045654, -1.0293405055999756], + [3.1895906925201416, -5.225414276123047], + [-1.1895275115966797, 5.546008110046387], + [2.190725803375244, 5.643653869628906], + [6.486522197723389, -2.4725148677825928], + [1.614452838897705, -6.7709760665893555], + [-0.6453215479850769, -0.6675890684127808], + [-2.050614595413208, 1.6114555597305298], + [-1.5276713371276855, 2.0494258403778076], + [1.5329179763793945, 2.106982469558716], + [-4.664522171020508, -2.2959036827087402], + [9.387261390686035, -2.64235520362854], + [-5.344142436981201, -3.3253629207611084], + [2.7931978702545166, -5.235130310058594], + [1.7332924604415894, 1.9023264646530151], + [-0.369294136762619, -0.885748028755188], + [-0.8268519639968872, -0.36119523644447327], + [0.39056503772735596, 0.3389739692211151], + [-2.5631353855133057, 1.9498285055160522], + [-4.068880558013916, -2.1864383220672607], + [-2.600379228591919, 2.1197454929351807], + [1.671567440032959, -7.234103202819824], + [-3.3171989917755127, 6.211893081665039], + [-2.4301016330718994, 2.417621612548828], + [-2.6946847438812256, -2.888850450515747], + [2.9310336112976074, -4.402530193328857], + [-4.038527011871338, -0.6266075968742371], + [8.61209774017334, -2.5172417163848877], + [-5.760673999786377, 6.636211395263672], + [-4.490696907043457, -4.1546430587768555], + [7.677517414093018, -2.0080463886260986], + [2.933993339538574, -4.566566467285156], + [-4.546494960784912, -4.027828216552734], + [-4.951444149017334, 3.3428006172180176], + [2.863964080810547, -4.331274032592773], + [2.0092880725860596, 4.616387367248535], + [2.483525514602661, -7.558267116546631], + [2.9011313915252686, -6.732426166534424], + [5.450633525848389, -1.3316607475280762], + [1.7874541282653809, 4.657557964324951], + [-4.478768825531006, -2.9536023139953613], + [7.9055280685424805, -3.910217046737671], + [2.36745285987854, -3.133747100830078], + [-2.5370712280273438, -1.761691689491272], + [-5.667513370513916, -2.512133836746216], + [2.0607988834381104, 2.6382832527160645], + [-2.175478935241699, 0.8857808709144592], + [2.966839075088501, -4.461000442504883], + [0.28198307752609253, -0.7515066862106323], + [-5.696031093597412, 6.1091628074646], + [1.1485737562179565, 0.15333229303359985], + [0.2977049648761749, -4.785183429718018], + [-3.6077888011932373, 5.00858211517334], + [-4.066181659698486, 4.849783420562744], + [-6.3458943367004395, 7.706646919250488], + [-3.6526827812194824, 5.707365989685059], + [2.028419256210327, 5.155467987060547], + [3.0328850746154785, -5.503432273864746], + [-4.522833347320557, -5.330585956573486], + [-4.313174724578857, -4.993077754974365], + [-0.5599289536476135, 8.52160930633545], + [-3.660583734512329, -1.5528610944747925], + [-3.5660817623138428, -2.184422254562378], + [1.1224181652069092, 0.5778442621231079], + [2.542762041091919, -3.873960494995117], + [-0.1915845274925232, 10.126752853393555], + [-6.327749729156494, 7.65019416809082], + [-0.9147969484329224, 9.073648452758789], + [2.2530386447906494, 5.436638832092285], + [2.3146841526031494, 5.68328857421875], + [-4.3643670082092285, -2.1580913066864014], + [-2.0397205352783203, 2.3774518966674805], + [-6.447207927703857, -1.6488431692123413], + [-2.4574573040008545, 2.0031464099884033], + [-5.465989589691162, 6.447171211242676], + [6.122130870819092, -2.057523727416992], + [-6.103182315826416, -2.6828243732452393], + [-3.1834304332733154, 5.219352722167969], + [-0.23782849311828613, -3.9793593883514404], + [-2.352264642715454, 1.4175341129302979], + [2.173128366470337, 0.8309726715087891], + [-0.4874235987663269, 10.855260848999023], + [5.1625823974609375, -2.3741166591644287], + [-7.272367000579834, 8.51380729675293], + [3.042020082473755, -6.382160186767578], + [8.311594009399414, -2.4875638484954834], + [0.5259619355201721, -5.756847381591797], + [2.729499101638794, -4.088517189025879], + [2.839921712875366, -4.85115909576416], + [-2.7733781337738037, -3.7632102966308594], + [-3.8854024410247803, -2.493757724761963], + [-2.116065740585327, 1.3771718740463257], + [0.017149321734905243, 9.532745361328125], + [-4.858677387237549, -1.9484003782272339], + [-1.49286949634552, -0.5899354219436646], + [-1.1203042268753052, -0.5447844862937927], + [-4.807010650634766, -2.1171395778656006], + [2.6191298961639404, -9.589695930480957], + [-5.454357624053955, 3.3545944690704346], + [9.19819164276123, -2.6680657863616943], + [-4.676290035247803, -3.679896593093872], + [3.9734842777252197, -3.182849645614624], + [-7.164227485656738, -0.9206922054290771], + [-4.3353071212768555, -3.843520164489746], + [7.9782023429870605, -2.0870485305786133], + [3.2746105194091797, 5.8577680587768555], + [9.086206436157227, -2.5217816829681396], + [6.183297634124756, -1.319383978843689], + [-4.9945902824401855, -3.3699147701263428], + [-2.320122480392456, 0.49662351608276367], + [-2.182265043258667, 2.6725361347198486], + [-5.41226053237915, -3.3209621906280518], + [8.478440284729004, -2.7488346099853516], + [-5.215290546417236, -4.644594669342041], + [-0.10161132365465164, 9.233011245727539], + [-4.022247314453125, -4.6050496101379395], + [-1.6705200672149658, 1.1178629398345947], + [-5.0456976890563965, -3.361625909805298], + [1.7860966920852661, 0.5846166014671326], + [-0.17606216669082642, 10.011438369750977], + [-2.338749408721924, 1.2225759029388428], + [-5.581509113311768, 4.314815044403076], + [-5.169549465179443, -3.5391600131988525], + [-2.4982197284698486, 2.0686252117156982], + [-3.6678295135498047, 7.2016801834106445], + [-3.6808412075042725, -5.010288238525391], + [-4.914489269256592, 1.5384796857833862], + [0.3700159788131714, -0.3687942624092102], + [0.6214244961738586, -0.14995136857032776], + [2.984835624694824, -4.884490966796875], + [5.20564603805542, -0.49365344643592834], + [2.5342211723327637, 4.541550636291504], + [8.42365550994873, -2.4288272857666016], + [0.09614505618810654, -0.9366211891174316], + [-4.504500865936279, 7.024190902709961], + [-6.433035850524902, 7.712420463562012], + [-4.108871936798096, -2.4698240756988525], + [-4.945643424987793, -4.228481769561768], + [-3.556093454360962, 5.1798295974731445], + [-5.7107133865356445, 2.2362473011016846], + [1.5977734327316284, -4.603204727172852], + [3.5668368339538574, 6.615639686584473], + [-8.42305850982666, -1.152314305305481], + [3.213393211364746, -5.326291084289551], + [2.2623050212860107, -3.7107622623443604], + [-4.860421657562256, 0.017019864171743393], + [-1.1122139692306519, -2.227457046508789], + [-6.262575626373291, 7.985877990722656], + [0.37336647510528564, 5.199751853942871], + [3.157597541809082, -4.73106575012207], + [3.9781553745269775, -2.7436578273773193], + [-2.1065070629119873, 3.9790737628936768], + [6.402620792388916, -2.467777967453003], + [2.844205617904663, 4.168615341186523], + [3.0828139781951904, -4.875929355621338], + [-5.211690425872803, 3.842743158340454], + [-7.45746374130249, -1.1973992586135864], + [5.699693202972412, -1.1833487749099731], + [3.1250321865081787, -5.0230937004089355], + [3.205235719680786, -5.3596320152282715], + [-3.209810495376587, -0.46673280000686646], + [-4.57084321975708, 5.315499782562256], + [-5.089239120483398, 1.205922245979309], + [2.286745071411133, 5.839358806610107], + [-0.4457213878631592, 10.366533279418945], + [-5.313352108001709, -4.632546901702881], + [-0.10342080146074295, 9.644763946533203], + [1.091597080230713, 1.323959469795227], + [6.434215068817139, 7.794506072998047], + [-1.7765789031982422, 1.3196051120758057], + [2.2653515338897705, -3.726747751235962], + [-3.9495086669921875, -0.9883832931518555], + [-0.23985761404037476, 9.630135536193848], + [-0.18593162298202515, 9.73390007019043], + [-4.68635892868042, -3.406956911087036], + [-5.080235004425049, -3.0467309951782227], + [2.5106141567230225, 6.148582458496094], + [-2.5672686100006104, 1.9623783826828003], + [2.345890760421753, -6.94111442565918], + [1.2434513568878174, 4.880427360534668], + [-4.328062057495117, 6.034098148345947], + [7.67791223526001, -1.855907917022705], + [-0.07392466813325882, 0.6352764368057251], + [-7.178679943084717, -1.7542592287063599], + [1.7091751098632812, -8.13117790222168], + [-7.828725814819336, -1.4035075902938843], + [-7.760985851287842, -1.3707314729690552], + [-0.4987131953239441, 11.655782699584961], + [5.433848857879639, -1.0553754568099976], + [-5.484887599945068, 3.170990228652954], + [1.3870275020599365, -3.0840487480163574], + [-5.583837985992432, 1.5132970809936523], + [-0.3026248812675476, 9.314470291137695], + [-4.499536991119385, 4.246218204498291], + [2.252434492111206, -3.4843337535858154], + [-0.7584274411201477, 0.9796347618103027], + [-5.143575191497803, -3.1278645992279053], + [6.014642238616943, -1.194541573524475], + [3.674158811569214, -2.794142723083496], + [-5.591981887817383, -4.465632438659668], + [-4.674324035644531, 5.300734043121338], + [-5.860274791717529, 2.312990427017212], + [-2.2362000942230225, 1.8468636274337769], + [-3.9665703773498535, -1.6347209215164185], + [2.525249481201172, -5.378396987915039], + [-2.4560611248016357, -4.588162422180176], + [9.865488052368164, -2.73771595954895], + [-6.544567108154297, 8.785257339477539], + [7.50054931640625, -1.9262902736663818], + [-6.851921081542969, 8.301324844360352], + [3.047312021255493, 5.7848405838012695], + [-3.8008148670196533, -2.671553373336792], + [2.846651077270508, -5.172474384307861], + [0.2148970365524292, 0.3984002470970154], + [8.154722213745117, -2.024054527282715], + [-5.402257442474365, -1.9757130146026611], + [-6.216755390167236, 8.47120189666748], + [-3.989351511001587, -1.3852757215499878], + [1.7121570110321045, -8.811728477478027], + [2.233713388442993, 0.4360273480415344], + [-0.24178391695022583, 10.242242813110352], + [-0.7142727375030518, -0.19528624415397644], + [-0.9580516815185547, -0.8521527051925659], + [5.627607822418213, 7.690061569213867], + [7.335626125335693, -2.4026691913604736], + [-6.346140384674072, -2.1068806648254395], + [-3.407957077026367, -3.18825364112854], + [-2.5101747512817383, 1.5995453596115112], + [4.250369071960449, 7.200385093688965], + [-0.2786558270454407, 10.097700119018555], + [-4.228466510772705, -2.848925828933716], + [-5.230749607086182, -2.973076581954956], + [2.938096046447754, -4.447170257568359], + [-4.47041130065918, -1.362013816833496], + [-2.71016526222229, 2.3468899726867676], + [-5.88542366027832, 3.442180633544922], + [1.5860073566436768, 5.318920612335205], + [-0.37906259298324585, -1.0027867555618286], + [-4.342893123626709, -1.4064393043518066], + [-2.790262460708618, 1.782612681388855], + [-4.880981922149658, -6.3477630615234375], + [3.4983363151550293, 1.3774853944778442], + [-7.104848384857178, 8.615350723266602], + [-4.327926158905029, 5.572972774505615], + [8.578811645507812, -2.572819471359253], + [-6.006271839141846, 3.424375534057617], + [6.655246257781982, -1.5527163743972778], + [1.7871655225753784, -5.370401859283447], + [2.5348541736602783, -4.995003700256348], + [-2.840965986251831, 2.6610028743743896], + [6.857196807861328, -2.025609016418457], + [-7.070034027099609, -1.5909641981124878], + [7.17457914352417, -2.5783145427703857], + [-4.020455360412598, -1.3901115655899048], + [-3.3488516807556152, 5.131847381591797], + [0.7656288743019104, -0.7622310519218445], + [7.790586948394775, -2.0687460899353027], + [-2.7644147872924805, 2.001485586166382], + [-2.7404563426971436, 4.756577968597412], + [6.55328893661499, -1.4556313753128052], + [-4.343912124633789, -3.2046053409576416], + [-6.294522762298584, 6.410166263580322], + [7.4096503257751465, -1.5155025720596313], + [-0.3952057957649231, 9.974932670593262], + [2.5042526721954346, 0.9686082601547241], + [-0.5891305208206177, -1.3149019479751587], + [-2.4656193256378174, 2.2597768306732178], + [-4.452469348907471, 5.904923439025879], + [1.1409448385238647, 1.1030023097991943], + [2.8619437217712402, -4.329479217529297], + [-4.7419867515563965, -3.547971487045288], + [-6.024821758270264, 8.271478652954102], + [-5.770308017730713, -4.429398536682129], + [7.889788627624512, -2.068368673324585], + [1.899317741394043, -6.534445762634277], + [-4.241381645202637, 5.534832000732422], + [-1.0045915842056274, 9.972801208496094], + [-2.4877729415893555, 2.523048162460327], + [-3.5671162605285645, -3.315382719039917], + [1.3572101593017578, 5.001555442810059], + [-1.596344232559204, 5.5805182456970215], + [-5.419676303863525, 7.396920680999756], + [-1.8358283042907715, 1.975929617881775], + [1.490949034690857, 4.593625068664551], + [2.0313405990600586, -5.066675186157227], + [0.6875331997871399, 8.116436004638672], + [-2.823322296142578, 6.152776718139648], + [5.613503932952881, -0.6133489012718201], + [-4.952165126800537, -2.438930034637451], + [9.714829444885254, -2.6860427856445312], + [-0.5260041952133179, 8.996795654296875], + [3.2462098598480225, -4.854637145996094], + [-4.416297912597656, -2.539598226547241], + [2.889843702316284, -6.551044940948486], + [-5.154876708984375, -3.2606332302093506], + [-2.072148561477661, 2.522325277328491], + [0.6492544412612915, 0.2847846746444702], + [-1.9197684526443481, -0.9337809681892395], + [2.387328863143921, -7.410457134246826], + [6.059753894805908, -1.2746237516403198], + [-3.726301908493042, 4.0135064125061035], + [2.58892560005188, -4.784282684326172], + [-7.748331546783447, -0.8769371509552002], + [-2.6686723232269287, 1.8136165142059326], + [6.5534443855285645, -2.6449782848358154], + [4.777184963226318, -5.090731620788574], + [2.744847059249878, -4.1688737869262695], + [-3.129425287246704, 3.4881374835968018], + [-1.2874846458435059, -2.425849437713623], + [1.3634880781173706, 5.511546611785889], + [3.8012707233428955, -1.240242600440979], + [1.6530886888504028, -5.665680885314941], + [-4.408612251281738, -3.456739902496338], + [-2.7964656352996826, -3.5882527828216553], + [-3.5079050064086914, 3.820554256439209], + [3.2267417907714844, -4.827217102050781], + [3.2513906955718994, -5.199049949645996], + [-0.176136314868927, 9.684535026550293], + [-0.7264959812164307, 9.35020637512207], + [8.743459701538086, -2.422441005706787], + [-8.721214294433594, -0.7634849548339844], + [1.5788516998291016, -8.421560287475586], + [-1.6488490104675293, 0.2366727888584137], + [1.518023133277893, 4.900996208190918], + [-5.863061428070068, -2.4740402698516846], + [1.8331069946289062, 5.61990213394165], + [2.7703328132629395, 1.2097885608673096], + [-5.584167003631592, -2.302905797958374], + [0.04510589689016342, -0.9777611494064331], + [2.6112453937530518, -8.625200271606445], + [-4.963924884796143, -2.1980814933776855], + [-2.4882965087890625, 2.0890517234802246], + [5.337883472442627, 7.748702526092529], + [9.718289375305176, -2.6943795680999756], + [2.3240578174591064, 0.6185068488121033], + [-5.388943195343018, -3.7428176403045654], + [1.9281694889068604, -3.296278953552246], + [6.367786407470703, -3.3521478176116943], + [-2.898621082305908, 3.1324949264526367], + [-5.298793792724609, 5.356884956359863], + [-3.599714517593384, -2.7250239849090576], + [-7.3683576583862305, 9.001112937927246], + [-5.239695072174072, 1.1369794607162476], + [2.6350371837615967, 5.926525592803955], + [0.04172962158918381, 9.690765380859375], + [2.9309017658233643, -4.496364593505859], + [-3.2436840534210205, -1.5741333961486816], + [-5.081850528717041, 6.091282844543457], + [-1.6378462314605713, 6.351576328277588], + [-4.57912015914917, 4.873863220214844], + [2.6732468605041504, -4.0536909103393555], + [2.367767572402954, -5.715846061706543], + [2.3125967979431152, -6.78965425491333], + [0.7224363088607788, -6.6009416580200195], + [-5.475922584533691, 6.029603958129883], + [-5.325207233428955, -1.0109063386917114], + [-4.476322650909424, 5.622983455657959], + [2.671013593673706, -4.352962970733643], + [-2.80940318107605, 3.2169477939605713], + [-3.531956195831299, -2.776409864425659], + [6.47714376449585, -0.8696030378341675], + [3.4108102321624756, -6.389185905456543], + [1.4791524410247803, -6.744863510131836], + [-2.715120792388916, 4.752532958984375], + [2.1652495861053467, -6.906048774719238], + [-4.515688419342041, 0.4019351601600647], + [6.539815425872803, -1.6638256311416626], + [-5.06019926071167, -1.788769245147705], + [-1.794547200202942, 6.226111888885498], + [-4.485954761505127, -2.9300923347473145], + [-6.631008148193359, 8.330036163330078], + [7.670870304107666, -2.9276788234710693], + [4.962672710418701, -1.0962307453155518], + [-4.985568523406982, -4.677186489105225], + [3.067432165145874, -4.6012864112854], + [2.2490034103393555, 5.8978776931762695], + [-4.4235124588012695, -4.474254608154297], + [-4.673372745513916, -5.603498935699463], + [3.13547420501709, -4.8405561447143555], + [8.11723518371582, -2.722400665283203], + [-4.102564334869385, -1.9126943349838257], + [-5.15083646774292, -2.8253698348999023], + [-2.3496456146240234, 1.5292017459869385], + [-4.4802069664001465, -5.713141441345215], + [8.513360977172852, -3.024662733078003], + [1.7048840522766113, 4.830183029174805], + [-2.868482828140259, 2.999452829360962], + [-5.14369535446167, 6.390735149383545], + [-2.1536941528320312, 2.52359676361084], + [-2.145632028579712, 2.791707992553711], + [-3.504916191101074, 6.333953857421875], + [-0.2555254101753235, -0.2746903598308563], + [-2.479404926300049, 1.867063283920288], + [-0.6234250664710999, 12.180459022521973], + [-2.973351240158081, 4.7328290939331055], + [-4.968765735626221, -2.98569655418396], + [-5.4651103019714355, 1.5307517051696777], + [-6.078126430511475, -1.2685352563858032], + [2.0145151615142822, -4.74601936340332], + [1.916862964630127, -3.22328782081604], + [-0.3827083706855774, 11.018952369689941], + [2.6587636470794678, -2.84983229637146], + [-5.305535793304443, 7.944456577301025], + [-5.985982418060303, 7.130307197570801], + [-0.8962175250053406, -0.7827723026275635], + [3.1332881450653076, -4.700825214385986], + [-5.698188304901123, 3.306448221206665], + [5.84881067276001, -1.1836583614349365], + [-2.7229394912719727, 2.437272071838379], + [0.7509831190109253, 6.286272048950195], + [3.07476806640625, -4.607156753540039], + [2.888103723526001, -4.912248611450195], + [3.593322992324829, -5.331932544708252], + [-3.1369705200195312, 3.238414764404297], + [-5.165818691253662, -2.433852434158325], + [-1.4578672647476196, -1.9703534841537476], + [-4.945683479309082, -1.877479910850525], + [10.577812194824219, -2.920543670654297], + [-0.6114777326583862, 5.708483695983887], + [-0.4349491596221924, 7.51223611831665], + [2.8713362216949463, -4.660778999328613], + [1.0098578929901123, -0.19555705785751343], + [-4.5077409744262695, 1.4777295589447021], + [3.412696361541748, 6.873721122741699], + [2.7781190872192383, -4.176635265350342], + [-0.7658162713050842, 9.186101913452148], + [-5.117347717285156, -1.7880815267562866], + [4.254374980926514, -6.221088886260986], + [-4.861210823059082, -4.083009719848633], + [-4.604882717132568, 0.8948303461074829], + [-3.863992929458618, -2.5505175590515137], + [3.2255241870880127, 4.783897876739502], + [-2.483922004699707, 1.8301072120666504], + [-2.4648945331573486, 1.4273675680160522], + [-3.9055731296539307, -4.119349956512451], + [2.8754465579986572, -4.346771240234375], + [0.7614642381668091, 0.5423262119293213], + [-3.1111795902252197, -2.378425359725952], + [-0.38079166412353516, 9.195337295532227], + [3.986884355545044, -1.504034399986267], + [-7.393548488616943, 9.01638412475586], + [1.3799924850463867, 4.801900863647461], + [-5.781487941741943, 4.055888652801514], + [-2.250753879547119, -2.6265158653259277], + [-2.4183521270751953, 1.0336357355117798], + [-2.2845044136047363, 0.5461685061454773], + [6.315113067626953, -1.3958696126937866], + [1.8077038526535034, 10.297449111938477], + [-7.159056186676025, -1.9432728290557861], + [2.910059690475464, -4.38682746887207], + [-5.073395252227783, -1.1713099479675293], + [3.0104238986968994, -4.521316051483154], + [-4.212316036224365, -3.640019655227661], + [-2.5828914642333984, 1.7166601419448853], + [3.250765085220337, -5.728215217590332], + [2.560612916946411, -7.820866584777832], + [-3.635331153869629, -2.1068289279937744], + [-5.1296844482421875, -3.7617127895355225], + [-0.28233766555786133, 9.788141250610352], + [-2.8025753498077393, -2.7511556148529053], + [1.5248734951019287, -7.8021979331970215], + [-0.2745059132575989, 9.383810043334961], + [2.48227596282959, -4.311140060424805], + [-0.7452357411384583, 12.563000679016113], + [-0.28399401903152466, 11.316137313842773], + [-4.800015926361084, 7.468388080596924], + [2.6161463260650635, -4.9374098777771], + [-0.10428435355424881, 9.581506729125977], + [0.3533198833465576, 4.9922027587890625], + [-2.71872615814209, 1.9493749141693115], + [2.9040684700012207, -4.378347396850586], + [4.972411632537842, -1.1850565671920776], + [-6.380716800689697, -1.720690369606018], + [-0.18384790420532227, 10.479650497436523], + [-3.9523181915283203, 5.261303901672363], + [-4.714388847351074, -6.061810493469238], + [1.9411158561706543, -3.4851040840148926], + [1.9226338863372803, 5.577215671539307], + [-4.522155284881592, -2.4993460178375244], + [2.3392412662506104, -3.84635066986084], + [1.8459551334381104, -8.608657836914062], + [-2.958061456680298, -3.4512979984283447], + [3.020979642868042, -2.8812155723571777], + [1.974665880203247, 5.463590621948242], + [0.09300065785646439, -0.6273242831230164], + [-2.945798873901367, 2.3055055141448975], + [-4.272112846374512, -1.9867268800735474], + [-7.542169094085693, -0.44904446601867676], + [2.1502535343170166, -3.900346040725708], + [-3.8625876903533936, -2.953437328338623], + [-0.14475983381271362, 9.800978660583496], + [-5.2257304191589355, -3.1407060623168945], + [9.74094009399414, -2.718207836151123], + [0.005956344306468964, 9.118448257446289], + [6.626930236816406, -2.5019683837890625], + [2.3869307041168213, -3.8548967838287354], + [-6.399081230163574, 0.2182786464691162], + [-4.177699089050293, -0.43369942903518677], + [-1.713667392730713, -3.2918336391448975], + [6.300976276397705, -1.325429916381836], + [-6.314169406890869, -2.184786558151245], + [5.879305362701416, -1.9752006530761719], + [-2.8287770748138428, -2.468470335006714], + [-6.270283222198486, 8.789932250976562], + [2.132521867752075, -6.076560020446777], + [-3.515406370162964, -2.09118914604187], + [-4.709847927093506, -3.6039555072784424], + [4.952919006347656, -1.1055299043655396], + [-0.8041473031044006, 9.964162826538086], + [-6.537177562713623, -1.0131417512893677], + [-4.257229804992676, -0.14313524961471558], + [1.4614181518554688, -7.889537811279297], + [-5.782195568084717, 7.410236358642578], + [-6.671658039093018, 1.6057571172714233], + [5.030045986175537, -0.5169691443443298], + [-7.944754600524902, -0.5470079183578491], + [9.167140007019043, -2.690991163253784], + [-8.568612098693848, -0.8097977638244629], + [-4.872973442077637, -3.1082069873809814], + [-5.610223770141602, 4.764643669128418], + [8.472742080688477, -2.3066208362579346], + [-0.6694544553756714, 11.051248550415039], + [4.424060821533203, 0.06618604063987732], + [7.106381893157959, -2.547809362411499], + [-2.3425638675689697, -0.9436547160148621], + [0.08801960200071335, 10.142862319946289], + [-0.06910134106874466, 9.22598648071289], + [-2.591243267059326, 1.8089025020599365], + [-2.699618101119995, -0.9340894818305969], + [-0.7087013125419617, 1.4934998750686646], + [6.124563694000244, -1.1342236995697021], + [-4.99929666519165, -3.439974308013916], + [-8.443100929260254, -1.5120829343795776], + [-4.696165561676025, 6.5509843826293945], + [-1.9342095851898193, -2.2250916957855225], + [3.4096622467041016, -5.883110046386719], + [0.04020499438047409, -3.37040638923645], + [2.3652455806732178, -4.3118085861206055], + [-3.652597188949585, 4.002441883087158], + [-2.6584527492523193, 2.201469659805298], + [0.9151062369346619, 4.956669807434082], + [-7.328231334686279, 9.043007850646973], + [-2.515960693359375, 0.8997448086738586], + [-0.4526752829551697, 9.693460464477539], + [8.807703971862793, -2.3786520957946777], + [-8.582259178161621, -0.6324986219406128], + [6.213484764099121, -1.8777910470962524], + [8.878372192382812, -2.493098735809326], + [-3.394472599029541, -2.1183083057403564], + [-3.7440881729125977, -1.6247493028640747], + [-0.217942476272583, 9.44019889831543], + [0.7619865536689758, -0.723918080329895], + [-4.050264835357666, 5.176170349121094], + [-2.830043315887451, 2.146618127822876], + [-0.23070156574249268, 9.299593925476074], + [-4.669139385223389, 0.304787278175354], + [-5.807417392730713, 5.775503158569336], + [-6.497972011566162, -1.9650648832321167], + [-2.5089352130889893, 2.0871355533599854], + [2.2381725311279297, -3.5269486904144287], + [-5.010134220123291, -1.4106773138046265], + [8.094891548156738, -2.237478494644165], + [5.1850128173828125, 7.338552474975586], + [-5.503206729888916, -2.051753282546997], + [3.032475233078003, -4.610861778259277], + [-5.874268054962158, 8.026698112487793], + [-2.830096960067749, 2.14932918548584], + [-6.954115390777588, 8.411081314086914], + [7.666745662689209, -1.8506650924682617], + [-6.4200968742370605, 7.805055141448975], + [-1.4583505392074585, 1.899287462234497], + [2.351840019226074, -3.581242084503174], + [0.32181018590927124, -4.988968849182129], + [2.132873296737671, 5.542205810546875], + [0.9816269278526306, -4.54428768157959], + [6.501584529876709, -3.490990400314331], + [-0.11076635867357254, 10.040292739868164], + [0.006327591836452484, -0.9678650498390198], + [-3.4243814945220947, -2.466054677963257], + [2.2418129444122314, -5.68470573425293], + [-3.222106456756592, 5.176525115966797], + [0.11982648819684982, 10.703876495361328], + [-4.821147918701172, 3.6915671825408936], + [-2.214211940765381, 1.3792483806610107], + [-0.3730536103248596, 11.269773483276367], + [2.425792932510376, -3.8634564876556396], + [-0.20345884561538696, -1.0499716997146606], + [1.352224349975586, -7.344263076782227], + [1.8792513608932495, -2.699889898300171], + [-3.040025472640991, -3.698131561279297], + [2.7237422466278076, 6.691329002380371], + [-1.5084539651870728, 0.6245312690734863], + [-5.024062156677246, -2.919053316116333], + [1.7693730592727661, 5.484326362609863], + [-4.630207538604736, -3.204066038131714], + [1.1679041385650635, -7.832159042358398], + [-0.03322071582078934, 10.139015197753906], + [-7.66428279876709, -1.8449692726135254], + [2.6955723762512207, -4.310551643371582], + [1.717719316482544, -8.409043312072754], + [-0.2809155583381653, 10.218132019042969], + [-5.252102375030518, -4.185295104980469], + [-3.652789831161499, -1.2490620613098145], + [0.9483614563941956, 1.556170105934143], + [1.5202089548110962, -6.836090087890625], + [-3.807269811630249, -1.202337384223938], + [-6.892869472503662, 0.4291849136352539], + [6.765077590942383, -1.8273720741271973], + [-5.78409481048584, -2.0965194702148438], + [-0.3423014283180237, 10.643506050109863], + [3.3349311351776123, 5.768514156341553], + [-4.260042667388916, -4.058501720428467], + [2.3954107761383057, -7.307464599609375], + [5.506846904754639, -2.4047908782958984], + [8.629597663879395, -2.4382917881011963], + [-0.15484637022018433, -0.7686885595321655], + [3.174160957336426, -4.8951005935668945], + [-2.444920539855957, -3.901233673095703], + [8.3314790725708, -2.050062894821167], + [0.9486705660820007, -7.531942844390869], + [-4.637585163116455, -3.442331314086914], + [-2.2167723178863525, 2.326493501663208], + [9.333887100219727, -2.6195433139801025], + [2.8059685230255127, -4.4875102043151855], + [-4.668654918670654, -2.8931281566619873], + [1.6606955528259277, 1.3637391328811646], + [-4.453585624694824, -1.4161655902862549], + [-2.124284029006958, 2.370354652404785], + [2.9147913455963135, -6.667740821838379], + [-3.896888256072998, -2.109071731567383], + [1.172548770904541, -7.102128982543945], + [-4.49036169052124, -3.7729530334472656], + [-0.3281720280647278, 10.044681549072266], + [-5.701211452484131, -2.2669332027435303], + [0.259207546710968, -5.358510494232178], + [-7.758553981781006, 0.8913297653198242], + [-2.4210455417633057, 1.879304051399231], + [-5.169735908508301, 1.2368308305740356], + [-5.806728839874268, -1.3068221807479858], + [2.8759045600891113, -4.438200950622559], + [7.426053524017334, -2.4318106174468994], + [-4.0417890548706055, -3.1173362731933594], + [2.193298101425171, -0.4664067029953003], + [-0.3641074299812317, 10.112295150756836], + [-4.6966166496276855, -2.6846296787261963], + [-5.421264171600342, 0.4804825186729431], + [-5.6056389808654785, 4.244411468505859], + [-2.6664488315582275, -3.9091503620147705], + [-4.345345973968506, -2.1087639331817627], + [-2.255021810531616, 2.591606378555298], + [1.3635653257369995, -7.507140159606934], + [-4.515526294708252, 5.336573600769043], + [-0.2194608449935913, 8.377872467041016], + [3.1577460765838623, -4.901027679443359], + [-3.6708624362945557, -1.2649788856506348], + [-2.630866765975952, -4.736989974975586], + [-3.1000783443450928, -5.290781021118164], + [-1.3586746454238892, 1.4101855754852295], + [2.4257099628448486, 1.024465799331665], + [3.0437631607055664, -5.12298583984375], + [3.237232208251953, -4.872875213623047], + [3.721755266189575, 7.227992534637451], + [-0.4605913758277893, 8.062713623046875], + [-2.8434760570526123, 0.82776939868927], + [-4.434620380401611, -2.410322904586792], + [-5.110122203826904, -4.355393886566162], + [-3.227092981338501, -0.8765366077423096], + [3.6073787212371826, 6.393991947174072], + [-1.6296285390853882, 0.5472819805145264], + [9.921060562133789, -2.7546169757843018], + [-2.4935450553894043, 3.634225368499756], + [1.4695160388946533, 4.553066253662109], + [6.775444984436035, -3.9669952392578125], + [1.411826252937317, 5.24371862411499], + [-2.9717962741851807, -0.5070308446884155], + [3.0689191818237305, -4.806244373321533], + [-3.75406551361084, 0.21361291408538818], + [9.31346607208252, -2.6879184246063232], + [-7.496814250946045, 9.10087776184082], + [-2.4640519618988037, 1.8526591062545776], + [-2.7133731842041016, 1.6465277671813965], + [-3.4848320484161377, -2.830819845199585], + [9.886013984680176, -2.7724883556365967], + [2.735628604888916, -4.325766086578369], + [-5.529647350311279, 1.1380577087402344], + [0.8637728691101074, -0.3697531521320343], + [-5.067429065704346, -4.555715560913086], + [1.767505168914795, 5.653866767883301], + [-0.364470899105072, 10.753888130187988], + [-5.036001682281494, 6.938363075256348], + [-2.619961977005005, 1.1455150842666626], + [-3.179309129714966, -0.6143892407417297], + [7.502315998077393, -2.1806459426879883], + [-3.2241218090057373, 4.632253646850586], + [-5.053574085235596, -2.6040186882019043], + [-4.744972229003906, -3.4466569423675537], + [-0.4677882790565491, 9.908855438232422], + [1.7773933410644531, 4.870090484619141], + [2.4406702518463135, 0.8681900501251221], + [6.534510612487793, -3.070294141769409], + [-0.26717686653137207, 9.84243392944336], + [3.2207043170928955, -4.834169387817383], + [-4.281931400299072, -2.1677045822143555], + [-4.0212082862854, -2.8168227672576904], + [6.4025139808654785, -1.71366548538208], + [-1.9213364124298096, -2.17700457572937], + [0.9713107943534851, 5.030188083648682], + [0.06886839121580124, -0.6986046433448792], + [-5.427278518676758, 6.07066011428833], + [-3.6549456119537354, -1.2925928831100464], + [2.2072603702545166, -2.829860210418701], + [-5.78031587600708, -1.7234641313552856], + [2.3638174533843994, 5.957305431365967], + [2.9467904567718506, -4.729801177978516], + [-6.056598663330078, 2.3654658794403076], + [-2.2841804027557373, 1.0244232416152954], + [5.5090861320495605, -1.2523000240325928], + [-4.262535095214844, -2.560727834701538], + [0.5668390989303589, -6.015000343322754], + [3.3009395599365234, -4.926125526428223], + [-0.520067036151886, 5.652495384216309], + [0.005191139876842499, 0.4505664110183716], + [-2.7240302562713623, -2.5383338928222656], + [0.019131086766719818, -0.7344539761543274], + [2.059236764907837, 5.296025276184082], + [2.011082649230957, -9.252286911010742], + [-2.1905064582824707, 2.0831594467163086], + [-6.772714138031006, 8.439596176147461], + [2.2735776901245117, 5.993752479553223], + [-2.5303151607513428, -1.4348829984664917], + [-4.641257286071777, 5.952695369720459], + [-3.3648040294647217, -5.255986213684082], + [4.47336483001709, 7.516496658325195], + [-6.8790812492370605, -1.3805943727493286], + [-2.8651487827301025, -4.261472702026367], + [-0.4173911213874817, 9.761604309082031], + [-2.749565839767456, 1.9565271139144897], + [-2.0909624099731445, 2.6383187770843506], + [2.4991872310638428, -7.3231282234191895], + [0.7125681042671204, -0.8958585262298584], + [-5.478747844696045, 6.804989337921143], + [3.0894525051116943, -4.821767807006836], + [-2.352435350418091, 0.5060489773750305], + [9.039118766784668, -2.3835225105285645], + [-1.8615866899490356, 2.6166951656341553], + [-4.6871771812438965, -1.4310513734817505], + [-4.963897705078125, -2.2137367725372314], + [-5.6006035804748535, -3.68587064743042], + [-4.269400119781494, -2.0194132328033447], + [-5.976597309112549, -2.205096483230591], + [-4.815280437469482, 6.094627857208252], + [-0.16781151294708252, 9.910879135131836], + [7.054914474487305, -1.4241036176681519], + [-4.5515828132629395, 1.4429370164871216], + [-7.08794641494751, 8.66446590423584], + [8.572537422180176, -1.8857672214508057], + [-6.278167247772217, 7.856297492980957], + [0.9312779307365417, 5.474733352661133], + [6.580271244049072, -1.2902439832687378], + [-6.47974157333374, 8.128998756408691], + [-3.2663731575012207, -0.9511429667472839], + [-0.4882977604866028, 11.0660400390625], + [-0.3488779067993164, 8.669914245605469], + [-2.268996000289917, 0.0037327371537685394], + [1.928556203842163, 3.9749033451080322], + [-5.1162614822387695, -1.2937756776809692], + [-5.051153182983398, -1.7012125253677368], + [3.0802724361419678, 4.361180782318115], + [-2.074124574661255, 2.681173086166382], + [-4.786623954772949, -1.860339879989624], + [1.5440665483474731, 0.6537892818450928], + [2.8611512184143066, -4.7440595626831055], + [-2.4667396545410156, 2.8843297958374023], + [1.3007872104644775, -7.755980491638184], + [1.0728528499603271, -6.8595380783081055], + [-5.557546138763428, 7.565546989440918], + [-0.18926042318344116, -0.8892664909362793], + [3.1741116046905518, -5.123734474182129], + [-0.723161518573761, 11.650174140930176], + [-6.947690963745117, -1.8144901990890503], + [-4.787503242492676, -3.223466634750366], + [-2.3285446166992188, 1.4325159788131714], + [2.4671552181243896, -5.617557048797607], + [-0.29626137018203735, 10.564414024353027], + [-0.3315207362174988, 9.989587783813477], + [3.148088216781616, -4.711979866027832], + [-0.17927545309066772, 10.18153190612793], + [2.177767515182495, 1.0590615272521973], + [-0.28175193071365356, 10.450849533081055], + [-4.509891033172607, -2.771422863006592], + [-4.095235824584961, -3.4976460933685303], + [-7.6201605796813965, -1.4253431558609009], + [0.26915594935417175, -5.109228134155273], + [-3.3715970516204834, -4.954400062561035], + [-3.7465291023254395, -2.1482925415039062], + [-4.104861736297607, -2.86665940284729], + [-4.017971038818359, -3.471661329269409], + [-4.6016950607299805, -2.776956796646118], + [-4.015976428985596, -2.7476277351379395], + [6.627492427825928, -2.083570718765259], + [-3.289801836013794, -3.676164388656616], + [-5.251981258392334, -2.5824146270751953], + [2.115830183029175, -2.939913034439087], + [-2.425351619720459, -2.0495824813842773], + [1.7415258884429932, -8.740135192871094], + [-2.5310256481170654, 6.739775657653809], + [-0.5575753450393677, 8.294782638549805], + [7.69711971282959, -2.272291421890259], + [-0.14841020107269287, 7.760480880737305], + [6.140986919403076, -1.4164458513259888], + [2.6746203899383545, -4.49417781829834], + [-2.2812862396240234, 1.4098279476165771], + [-2.4851057529449463, 0.5616580247879028], + [-5.224534511566162, 6.610316276550293], + [2.4814634323120117, 0.6891978979110718], + [-2.061964273452759, 1.1034656763076782], + [-2.4578988552093506, 1.4398273229599], + [-3.2354207038879395, -2.8033266067504883], + [3.031337261199951, -4.9183149337768555], + [-5.2013421058654785, -2.5720150470733643], + [-1.6409353017807007, 1.2820608615875244], + [3.748844861984253, -2.6487200260162354], + [0.378449946641922, -0.06201620772480965], + [-7.6057209968566895, 9.399885177612305], + [-2.408501386642456, 1.9627236127853394], + [-3.9845802783966064, -1.0314264297485352], + [-4.720313549041748, 5.579746246337891], + [-4.8625874519348145, -3.222050189971924], + [-2.2128305435180664, 2.1281168460845947], + [-3.040684223175049, -2.38459849357605], + [-0.1767970621585846, -1.4564920663833618], + [-7.785558223724365, -2.1504709720611572], + [-5.014430999755859, -2.5325522422790527], + [1.6752448081970215, -7.929739952087402], + [-0.30455097556114197, -1.4713510274887085], + [1.9420201778411865, 5.297305107116699], + [-5.065092086791992, 4.721634387969971], + [2.7672953605651855, -4.421234130859375], + [5.922729969024658, -1.4241400957107544], + [-3.682318925857544, 3.989032030105591], + [-0.30870121717453003, 10.131360054016113], + [-5.612137794494629, -2.821676731109619], + [9.452537536621094, -2.619297742843628], + [-1.6852807998657227, -1.1904449462890625], + [0.7674944996833801, 0.9776768684387207], + [-0.6244075298309326, 8.960941314697266], + [-0.5109372138977051, -2.8507869243621826], + [-3.178983211517334, -0.6954476833343506], + [-2.492424249649048, 2.3995563983917236], + [3.055962324142456, -4.584679126739502], + [1.994689702987671, 5.664889335632324], + [-3.7339065074920654, -1.23788583278656], + [5.525228977203369, -1.2516802549362183], + [-3.915208339691162, 6.079377174377441], + [-4.848216533660889, 4.88397216796875], + [1.4125981330871582, -3.3448541164398193], + [1.7055449485778809, -4.881569862365723], + [-4.738723278045654, -2.8619065284729004], + [-2.757941246032715, -2.240694522857666], + [1.8173818588256836, -3.187211036682129], + [-5.403133392333984, -3.394841194152832], + [-3.280449628829956, -2.012366771697998], + [2.08355712890625, 1.3796770572662354], + [-4.818270206451416, 7.375870227813721], + [9.289868354797363, -2.6404268741607666], + [0.05966871231794357, -1.388051152229309], + [2.938390016555786, -4.425235748291016], + [-0.23881441354751587, 9.427621841430664], + [2.2545154094696045, -8.3698148727417], + [3.1613898277282715, -4.9546589851379395], + [1.4283802509307861, -8.000548362731934], + [-0.24564772844314575, 9.013420104980469], + [-6.314237117767334, -2.099867343902588], + [-4.582212924957275, 0.80283123254776], + [-6.691543102264404, 0.17961478233337402], + [1.842207908630371, 5.09312629699707], + [-0.41219979524612427, 10.090396881103516], + [-1.7054530382156372, 2.167328357696533], + [-0.005861885845661163, -4.546713829040527], + [5.007357120513916, 7.307111740112305], + [-1.3855961561203003, 1.1704219579696655], + [6.943426609039307, -1.4049025774002075], + [2.5789475440979004, -2.949207067489624], + [-3.536553144454956, 3.202972650527954], + [1.9696595668792725, 0.5878387689590454], + [0.0017776116728782654, -1.3216415643692017], + [7.5710649490356445, -3.13690185546875], + [7.673661708831787, -1.8027397394180298], + [2.686208724975586, 5.362277030944824], + [-3.9067320823669434, -4.080071449279785], + [8.835867881774902, -2.323467493057251], + [-2.693018674850464, 1.8396433591842651], + [1.7471718788146973, -4.369091510772705], + [-4.771575927734375, -2.3611154556274414], + [2.702796697616577, -4.2236328125], + [-2.395132541656494, 1.7283035516738892], + [-4.378220558166504, -4.243839740753174], + [-2.2164602279663086, 1.2999866008758545], + [4.200729846954346, 6.148690223693848], + [3.2079832553863525, -4.801270484924316], + [-4.977787494659424, -2.957881450653076], + [0.9599621891975403, -2.7784082889556885], + [7.882741451263428, -1.8520005941390991], + [-4.373197555541992, -3.3176238536834717], + [-5.472601413726807, -4.090832710266113], + [-4.440072059631348, 5.069202423095703], + [-0.5145408511161804, 0.9421086311340332], + [-5.112894058227539, 4.1081743240356445], + [8.704277992248535, -2.7596757411956787], + [5.3156657218933105, 7.037657737731934], + [-0.10987836867570877, 10.107940673828125], + [1.3752415180206299, 5.591098785400391], + [2.827975273132324, -5.373404502868652], + [2.5494072437286377, -3.844606399536133], + [7.884463310241699, -2.4016759395599365], + [-6.3429484367370605, 0.9560726881027222], + [-2.525301456451416, 0.5382375717163086], + [-2.4318411350250244, 0.9402163028717041], + [-3.2404282093048096, -1.4549188613891602], + [-3.784172296524048, -3.292818546295166], + [-1.8186492919921875, 1.3862950801849365], + [-2.334221363067627, 1.386841058731079], + [-1.79146146774292, 1.9629720449447632], + [-3.410072088241577, -2.00490140914917], + [8.158090591430664, -1.9390888214111328], + [8.53329086303711, -2.6304092407226562], + [1.694541096687317, -7.848667621612549], + [-2.2687318325042725, 4.987013339996338], + [7.173031330108643, -2.231720209121704], + [-6.5880560874938965, 7.8630170822143555], + [3.133702516555786, -4.9146223068237305], + [-4.678064823150635, -3.1827447414398193], + [2.6724822521209717, -3.8826262950897217], + [-4.264542102813721, -1.3134483098983765], + [-4.1632561683654785, 7.624245643615723], + [-5.357010841369629, 5.505147933959961], + [-3.2827470302581787, -3.78731369972229], + [-4.824641704559326, -2.7796194553375244], + [-1.852054238319397, 0.6381561756134033], + [-6.493892192840576, 8.03004264831543], + [-6.351476192474365, 2.3869030475616455], + [0.41964665055274963, -4.258075714111328], + [-0.18306118249893188, -1.1618694067001343], + [7.989650249481201, -2.5211997032165527], + [-4.059462070465088, 5.615477561950684], + [0.7015427947044373, -5.9975738525390625], + [-0.2090638279914856, 10.283973693847656], + [2.156259298324585, 5.554913520812988], + [2.362497568130493, -4.782301425933838], + [-5.162583827972412, -2.799210786819458], + [-1.0186933279037476, -0.5382373332977295], + [9.435333251953125, -2.6356236934661865], + [-3.294426202774048, -2.3658196926116943], + [-2.395204782485962, 1.7142475843429565], + [4.517190456390381, 7.224909782409668], + [-1.7796247005462646, -3.5521883964538574], + [-3.7323758602142334, 5.873357772827148], + [-1.179284930229187, -2.3782665729522705], + [-5.145301818847656, -0.12484222650527954], + [-0.23248544335365295, -1.0103294849395752], + [-4.890995979309082, 5.795516490936279], + [4.156635284423828, -1.7253339290618896], + [-0.907375156879425, 1.2185242176055908], + [2.647921562194824, -5.448920249938965], + [2.933086633682251, -5.769311428070068], + [8.885741233825684, -2.429711103439331], + [-0.08719415217638016, 9.019779205322266], + [-2.1657423973083496, 2.514333486557007], + [-0.601036787033081, -0.3884437382221222], + [2.18314528465271, -3.5441226959228516], + [1.7629289627075195, -3.3401923179626465], + [-4.5859694480896, 5.549118518829346], + [-2.9715735912323, 3.1663382053375244], + [5.114614009857178, -2.344435453414917], + [-3.5931527614593506, -0.30993127822875977], + [0.8156938552856445, -4.633438587188721], + [2.349630117416382, 5.509922504425049], + [-0.3806365728378296, -0.9903648495674133], + [-2.491304397583008, -2.3101820945739746], + [2.559736490249634, 0.6464712619781494], + [4.6985297203063965, -3.322627305984497], + [-0.040747590363025665, -0.4148361086845398], + [2.1967453956604004, 1.0302560329437256], + [-7.640394687652588, -1.5194703340530396], + [4.295895099639893, 6.833253860473633], + [-2.1839113235473633, 6.193334579467773], + [-2.316073179244995, 1.4910672903060913], + [-5.862183094024658, -1.5575844049453735], + [-0.29371100664138794, 9.895252227783203], + [-2.871948003768921, 2.7426795959472656], + [-3.7457728385925293, -1.2256180047988892], + [-0.07703328877687454, -0.5140183568000793], + [-5.604211330413818, 3.3154749870300293], + [2.7281293869018555, -4.216767311096191], + [-1.9832931756973267, 2.5010933876037598], + [-6.0684380531311035, 6.190576076507568], + [4.260985851287842, 6.476726531982422], + [-5.171532154083252, 4.1587066650390625], + [8.169647216796875, -2.680917501449585], + [6.363788604736328, 8.061394691467285], + [-4.305650234222412, -2.841294288635254], + [1.2369436025619507, -5.480585098266602], + [-5.0842766761779785, -0.05040985718369484], + [1.4018477201461792, -7.173264503479004], + [-2.885828971862793, -1.4296953678131104], + [-5.478795528411865, -3.6160192489624023], + [-0.3835606575012207, 11.148933410644531], + [-6.245361804962158, 0.4125736951828003], + [-5.204710006713867, 6.21336555480957], + [0.09634821861982346, -1.3267855644226074], + [-5.820193767547607, 5.862217903137207], + [1.3309698104858398, -7.8564772605896], + [-0.17916029691696167, 10.713396072387695], + [-5.2964067459106445, 4.300296783447266], + [-0.3055240511894226, 9.926591873168945], + [-6.994894504547119, -1.3302600383758545], + [-4.537924289703369, 5.898533821105957], + [2.29032301902771, -5.644689559936523], + [6.783888339996338, -1.4558888673782349], + [5.983558177947998, -3.264786958694458], + [3.0615530014038086, -4.598461151123047], + [-2.6456310749053955, -0.15708956122398376], + [-4.696969509124756, 1.51522958278656], + [-1.7690584659576416, 6.674503326416016], + [-3.610718011856079, 5.634690761566162], + [3.230130434036255, -5.190974235534668], + [-2.488089084625244, 2.4805710315704346], + [1.552067518234253, -8.149635314941406], + [6.032808303833008, 7.635283946990967], + [-0.8090643882751465, 0.28722816705703735], + [2.3244354724884033, 0.7663244605064392], + [-0.1291607916355133, -1.1682673692703247], + [-0.0206492617726326, 9.858946800231934], + [-4.328070640563965, 0.35607707500457764], + [2.916317939758301, -4.774266719818115], + [8.64819049835205, -2.3561949729919434], + [0.18439650535583496, -1.076550006866455], + [-3.615567445755005, -2.7654240131378174], + [-3.3850014209747314, 3.522516965866089], + [1.2575879096984863, 5.139215469360352], + [6.58468770980835, 7.845276832580566], + [-2.0521912574768066, -1.8396726846694946], + [-3.5201921463012695, 3.1918599605560303], + [-4.228671550750732, 0.8776379823684692], + [0.0036331936717033386, 4.910429000854492], + [2.0346105098724365, -3.019968032836914], + [-6.552016735076904, -1.3550771474838257], + [7.741034507751465, -1.871827244758606], + [5.664002895355225, -2.810821533203125], + [0.372245728969574, 10.182875633239746], + [1.0927670001983643, -3.9682421684265137], + [6.293895244598389, -1.9912704229354858], + [-0.38382893800735474, 10.059062957763672], + [0.5741404891014099, 6.060787200927734], + [-5.896368503570557, 6.884270668029785], + [1.955000638961792, 5.136228084564209], + [5.672306537628174, -2.4899611473083496], + [-7.036494255065918, 8.575024604797363], + [-2.354017496109009, 2.0790512561798096], + [2.3269474506378174, 5.620097637176514], + [-2.1369309425354004, 2.6009528636932373], + [-4.6612982749938965, -3.8999836444854736], + [-6.183867931365967, -0.9337308406829834], + [2.960639238357544, -4.4520463943481445], + [8.739075660705566, -2.48404598236084], + [-2.0628459453582764, 1.18926203250885], + [3.0221197605133057, -5.573657512664795], + [-0.40638500452041626, 9.701022148132324], + [1.012040138244629, -0.2681422531604767], + [-2.5017802715301514, 1.471585750579834], + [-0.17529600858688354, 9.508312225341797], + [-3.5615193843841553, -1.9256843328475952], + [-6.1672821044921875, -2.8286688327789307], + [7.046352863311768, -1.6323541402816772], + [-5.9560956954956055, -2.2510056495666504], + [7.8428449630737305, -2.2826390266418457], + [-3.6071135997772217, -2.8041553497314453], + [-4.719696521759033, 4.6757001876831055], + [-0.5924032330513, 10.167789459228516], + [3.2392141819000244, -5.314605712890625], + [-2.806440830230713, 6.837679386138916], + [1.4184670448303223, 5.631339073181152], + [6.3582963943481445, -1.7310634851455688], + [-2.2902469635009766, 0.17877909541130066], + [-1.717231035232544, 0.9772464036941528], + [-4.023311614990234, -1.9001623392105103], + [-2.956733226776123, 5.223115921020508], + [-0.40830689668655396, 9.06722640991211], + [-0.1158994510769844, 9.972153663635254], + [2.9470343589782715, -4.815411567687988], + [2.6071062088012695, -2.2654128074645996], + [-3.4225823879241943, 0.14629071950912476], + [-5.530824184417725, -3.5913403034210205], + [4.031435489654541, -5.762296676635742], + [1.668670415878296, 5.390385150909424], + [-5.343351364135742, -3.0548171997070312], + [-6.337499141693115, -2.049497365951538], + [1.828904628753662, -3.411773443222046], + [-5.194583415985107, -2.378992795944214], + [-0.29451578855514526, 9.946743965148926], + [-3.5500869750976562, 5.1212286949157715], + [-2.7827675342559814, 2.024183511734009], + [-0.8243060111999512, 9.348099708557129], + [3.297437906265259, 1.3138573169708252], + [-6.521864891052246, -2.1990485191345215], + [0.8338204622268677, -6.797465801239014], + [2.5306613445281982, -3.9236934185028076], + [-0.24493223428726196, 10.448044776916504], + [2.338646411895752, 0.974163293838501], + [2.1817574501037598, -3.981330633163452], + [-3.88081955909729, -0.2885078191757202], + [0.30862462520599365, 0.366266131401062], + [-4.124342441558838, 6.264176845550537], + [-2.4528563022613525, 1.8766939640045166], + [-4.042348861694336, -2.365913152694702], + [-0.1374480128288269, 9.417659759521484], + [2.7795212268829346, -4.201560974121094], + [-5.284183979034424, -0.4644753932952881], + [3.1217007637023926, -4.676802635192871], + [2.8133318424224854, -6.2337188720703125], + [2.880565643310547, -4.33889627456665], + [6.842875957489014, -1.6810609102249146], + [1.5329616069793701, -7.891790390014648], + [-4.524467945098877, -4.732426643371582], + [6.574123859405518, -2.6158859729766846], + [-5.396543979644775, -2.9122297763824463], + [3.236222982406616, -4.844982624053955], + [2.935551404953003, -6.1673784255981445], + [-2.9585554599761963, 0.6014424562454224], + [-0.06087297946214676, -0.7695671916007996], + [8.792534828186035, -1.9819608926773071], + [2.628570079803467, -4.025949954986572], + [6.482446193695068, -1.7585315704345703], + [1.5798418521881104, 5.09480094909668], + [-5.485695838928223, -2.8400657176971436], + [1.929250955581665, -3.979771137237549], + [-4.636318206787109, -3.9868180751800537], + [-7.36120080947876, -0.8297321796417236], + [3.126819133758545, -7.192835330963135], + [-6.593827724456787, -0.560249924659729], + [0.10355018824338913, 5.515726566314697], + [-1.6459064483642578, 0.2501872479915619], + [-4.512580394744873, -3.440366506576538], + [6.609460353851318, -2.3205697536468506], + [2.14986252784729, 5.736398696899414], + [-5.838817119598389, -2.5126657485961914], + [-5.19412088394165, 1.9883447885513306], + [1.9451484680175781, 6.094820022583008], + [-5.34884786605835, -3.2172598838806152], + [-2.670010805130005, 2.3487040996551514], + [2.8731815814971924, -4.24113655090332], + [1.7781288623809814, 5.235594749450684], + [2.615708112716675, 2.3226358890533447], + [5.365115165710449, -3.1405861377716064], + [-5.697032928466797, -3.8374311923980713], + [-4.44126558303833, -2.6759636402130127], + [-4.754002094268799, -1.717013955116272], + [-0.20653387904167175, -2.994065999984741], + [2.836719274520874, -4.41059684753418], + [-0.3131020665168762, 10.663232803344727], + [1.9222965240478516, -3.715763568878174], + [1.5329111814498901, 5.309476375579834], + [-4.508076190948486, -1.0309364795684814], + [-4.052145957946777, -1.765439510345459], + [2.884673595428467, -4.424461841583252], + [-1.302832841873169, -0.7956801652908325], + [-2.581007957458496, 2.0468811988830566], + [2.8166701793670654, -4.46034574508667], + [-4.013999938964844, -2.9602906703948975], + [-4.3300371170043945, 0.6811414957046509], + [-3.8049256801605225, 5.246250152587891], + [1.835078239440918, -6.691864013671875], + [-1.5480799674987793, 1.0962632894515991], + [2.9062535762786865, -5.384696006774902], + [-4.8695173263549805, 1.884123682975769], + [-2.4153506755828857, 1.363499641418457], + [-2.195230007171631, 0.7075099945068359], + [3.1249635219573975, -4.6804938316345215], + [1.4718090295791626, 4.400489807128906], + [4.057608127593994, 6.679606914520264], + [2.5335967540740967, -5.469764709472656], + [-0.5649942755699158, -1.9997650384902954], + [-2.2122347354888916, 2.1057558059692383], + [0.5302952527999878, -0.49567753076553345], + [1.7673931121826172, 0.8805662393569946], + [-4.3011555671691895, -1.0531765222549438], + [5.450782299041748, -1.1630505323410034], + [0.013271443545818329, -0.6433938145637512], + [-4.884140491485596, -4.104338645935059], + [-2.4629859924316406, 1.803191900253296], + [-6.242123126983643, 8.506379127502441], + [-0.20218980312347412, 9.071596145629883], + [0.705097496509552, -5.393071174621582], + [1.223998785018921, -7.5402607917785645], + [-4.772048473358154, -1.845587134361267], + [-3.470677137374878, -4.064011096954346], + [-5.085023880004883, 2.4179437160491943], + [-9.108633041381836, -0.8671841621398926], + [-5.178445816040039, 6.4770050048828125], + [-0.9655668139457703, -0.1947259157896042], + [-3.7273776531219482, -0.3153112530708313], + [1.603456735610962, 4.855877876281738], + [-3.13261342048645, -2.1828525066375732], + [-0.6730408668518066, -1.48823082447052], + [1.7832690477371216, -9.018072128295898], + [-7.129505157470703, -0.6356679201126099], + [6.903007507324219, -2.5145480632781982], + [-5.956078052520752, 6.154172897338867], + [-4.777143478393555, 8.010636329650879], + [8.62270450592041, -2.3308355808258057], + [0.858250617980957, 0.9663630723953247], + [5.161355018615723, -1.1930081844329834], + [2.0050864219665527, -8.464767456054688], + [8.940642356872559, -2.5139575004577637], + [7.676884651184082, -1.7876275777816772], + [-3.3600399494171143, -0.5343580842018127], + [3.0659568309783936, -4.810980796813965], + [-5.1706390380859375, 2.742014169692993], + [3.116525411605835, -4.671372413635254], + [-0.6447417140007019, 0.16426697373390198], + [-4.885581016540527, -3.2655389308929443], + [-4.153602600097656, -2.649339199066162], + [-4.12142276763916, 0.13872098922729492], + [-4.551297664642334, -4.809459209442139], + [-6.079762935638428, 2.427851676940918], + [-5.445504188537598, 7.613424301147461], + [-0.9631001949310303, -0.8843641877174377], + [4.8175578117370605, 7.097755432128906], + [3.87013578414917, -5.718244552612305], + [-3.9086029529571533, -3.8790090084075928], + [-5.759490489959717, -2.430482864379883], + [-5.351257801055908, 2.8714873790740967], + [-5.168144702911377, 4.352560997009277], + [-3.7172467708587646, -3.5502285957336426], + [6.135171413421631, -3.0809099674224854], + [-4.819345951080322, 6.51275634765625], + [2.1440165042877197, 5.386449813842773], + [2.791142702102661, -4.270843029022217], + [3.0318264961242676, -2.350609302520752], + [3.333784580230713, -4.972723007202148], + [-2.4011099338531494, 1.0951937437057495], + [-0.4293181300163269, 10.754487037658691], + [-4.335000038146973, 6.977855682373047], + [7.224268913269043, -2.1059014797210693], + [-6.823909759521484, -2.176436185836792], + [-0.5056634545326233, 11.53675651550293], + [2.7405600547790527, -4.0873494148254395], + [-2.54836106300354, 0.7902594804763794], + [7.5183587074279785, -1.9845261573791504], + [6.946018218994141, -2.6164655685424805], + [-2.4625959396362305, 1.4854886531829834], + [-4.332469463348389, -1.759046196937561], + [-6.237956523895264, 8.10887336730957], + [-4.624907970428467, 3.2995967864990234], + [2.17777681350708, -4.705628395080566], + [1.0607261657714844, -0.5735440254211426], + [5.178267955780029, -5.16421365737915], + [1.3940587043762207, 5.549887180328369], + [1.42792546749115, -6.649646759033203], + [-4.958398342132568, 4.448036193847656], + [2.312788486480713, -7.995987892150879], + [5.7015910148620605, -2.5321919918060303], + [-2.4251272678375244, 0.6502413749694824], + [-4.86487340927124, -0.7435542345046997], + [3.0996944904327393, -4.872100830078125], + [-2.570681095123291, -2.8128931522369385], + [-2.565967559814453, -1.6340720653533936], + [-4.654154300689697, 3.490041494369507], + [8.146568298339844, -2.1697914600372314], + [-7.379980564117432, -1.0850173234939575], + [-4.407557010650635, 4.045901775360107], + [-4.406268119812012, 5.304328918457031], + [2.840820550918579, -4.537137508392334], + [2.191164970397949, -3.433840751647949], + [8.205838203430176, -2.195634365081787], + [2.256956100463867, -3.9161651134490967], + [-6.044753551483154, -2.2699637413024902], + [-6.050330638885498, 0.25180113315582275], + [2.234962224960327, 5.569793701171875], + [-0.14165031909942627, -1.4675925970077515], + [5.877600193023682, 7.233381271362305], + [-2.6655375957489014, 1.68022620677948], + [2.9649202823638916, -4.697141647338867], + [5.417388439178467, -1.0634865760803223], + [-0.8418636918067932, 10.035144805908203], + [-2.9205262660980225, -0.8736414909362793], + [-0.5927773118019104, 9.607995986938477], + [3.1115338802337646, -4.977880477905273], + [3.6579580307006836, -2.9780113697052], + [7.322632312774658, -3.432206630706787], + [-4.684362888336182, 5.278845310211182], + [-5.275183200836182, 6.515575408935547], + [-5.087835788726807, 1.5216174125671387], + [-2.3193674087524414, 1.6083958148956299], + [-6.2222514152526855, 1.1086918115615845], + [5.979791641235352, -4.223382949829102], + [-2.7789902687072754, -1.7289000749588013], + [0.8144684433937073, 4.2761101722717285], + [1.974928617477417, 4.818134307861328], + [-0.3284767270088196, 10.907126426696777], + [-5.003146171569824, -2.74926495552063], + [-0.11929387599229813, 4.93306827545166], + [-5.2740254402160645, -2.9033167362213135], + [1.8656527996063232, 0.4936404824256897], + [-6.462996482849121, 8.041830062866211], + [-0.9274283051490784, -0.6911060810089111], + [-6.199981689453125, 5.473465442657471], + [-0.28779512643814087, 9.882303237915039], + [-4.183312892913818, 6.08247709274292], + [-5.4849019050598145, -3.3774001598358154], + [-0.23886042833328247, 9.18597412109375], + [5.69730806350708, -2.3517110347747803], + [-0.10731393843889236, 9.993943214416504], + [-4.3140177726745605, 5.858009338378906], + [-4.8538737297058105, -2.26617431640625], + [8.092255592346191, -1.9375752210617065], + [-6.07491397857666, 5.808216094970703], + [-4.348886489868164, -2.4239470958709717], + [-0.20717984437942505, 10.386200904846191], + [-2.489131450653076, 0.26279157400131226], + [4.483194828033447, 7.156801700592041], + [0.5486718416213989, -5.313792705535889], + [-3.3238372802734375, -0.054503683000802994], + [0.41620001196861267, 0.7903093695640564], + [8.181889533996582, -2.4486594200134277], + [-5.661266803741455, -3.6948163509368896], + [7.398989200592041, -2.649409055709839], + [-5.393284320831299, 0.012301620095968246], + [-0.2844487428665161, 9.582513809204102], + [-4.6014814376831055, 5.246026992797852], + [-2.884169578552246, 4.296482563018799], + [-4.121527671813965, -0.9426087737083435], + [6.261040687561035, -1.1986932754516602], + [-2.3024914264678955, 2.049154043197632], + [-2.5422613620758057, 2.2091968059539795], + [8.965977668762207, -2.7662172317504883], + [-5.116392135620117, -4.128515243530273], + [-6.35874605178833, -2.0417001247406006], + [-0.2151148021221161, -0.6854652166366577], + [8.458271980285645, -2.988679885864258], + [2.25577712059021, 4.661969184875488], + [-4.753754138946533, 5.503622531890869], + [8.925250053405762, -2.7030422687530518], + [-2.940070867538452, 1.925464391708374], + [6.710267066955566, -5.6287384033203125], + [2.9386045932769775, -4.754105091094971], + [-4.767784595489502, -0.8771522045135498], + [-4.922367572784424, 5.366988182067871], + [-0.5310178399085999, 5.965327262878418], + [-4.79443883895874, -3.050586462020874], + [-4.73352575302124, -3.4762418270111084], + [7.446120262145996, -2.2290194034576416], + [2.399397373199463, -3.7764577865600586], + [6.961433410644531, -1.618449091911316], + [2.537071704864502, -4.716935157775879], + [-6.946008205413818, -1.0523041486740112], + [-1.181320071220398, -1.2233747243881226], + [-6.9982523918151855, -1.3883973360061646], + [1.1361126899719238, 1.0846744775772095], + [-1.7862600088119507, -0.761831521987915], + [2.537954807281494, -4.133020401000977], + [1.9042253494262695, -9.271656036376953], + [-2.2584917545318604, 3.0013375282287598], + [-0.47953903675079346, -1.6351579427719116], + [-2.621227979660034, -2.2818431854248047], + [-0.8227847218513489, 10.340250015258789], + [-6.924755573272705, -2.5155997276306152], + [-0.3785899877548218, 9.505664825439453], + [-6.545793056488037, 2.0453848838806152], + [-4.726193904876709, -0.7339224815368652], + [-4.511876583099365, -2.389932870864868], + [7.296813488006592, -2.389292001724243], + [-4.2310404777526855, 5.00323486328125], + [-4.5272345542907715, -1.7577247619628906], + [-5.7978129386901855, 2.0511984825134277], + [2.327587604522705, 0.8937098979949951], + [-6.09900426864624, 5.134401321411133], + [1.5043532848358154, -7.580941677093506], + [-4.223377227783203, 3.612048387527466], + [2.8443377017974854, -7.463814735412598], + [1.7445037364959717, -4.123417377471924], + [0.068705253303051, -0.3556325435638428], + [0.39396679401397705, 5.887225151062012], + [-0.4559780955314636, 9.43565845489502], + [-4.9569268226623535, -3.6382126808166504], + [2.437159776687622, -7.485185623168945], + [-5.3189873695373535, -2.2638676166534424], + [-0.37022262811660767, 10.676977157592773], + [1.8759198188781738, 4.438725471496582], + [-0.20603078603744507, 9.938515663146973], + [-5.520693302154541, 6.702638626098633], + [-4.5925374031066895, 5.576095104217529], + [0.31137901544570923, 0.4555453062057495], + [-0.572975218296051, 10.789581298828125], + [1.966567039489746, -7.841651916503906], + [2.8111207485198975, -4.521559238433838], + [-0.35726481676101685, 12.33990478515625], + [0.4836234450340271, -0.9826589226722717], + [3.189188241958618, -5.607080936431885], + [-5.58827543258667, 6.966545104980469], + [-3.941028118133545, -2.53559947013855], + [-3.402998685836792, -2.023854970932007], + [6.874722957611084, -1.6139274835586548], + [2.768796682357788, -4.3368330001831055], + [0.7174964547157288, -5.84295654296875], + [1.662766933441162, -8.453790664672852], + [-7.336947441101074, -1.0748308897018433], + [-5.244915962219238, 0.2944234013557434], + [2.0350401401519775, -5.689511299133301], + [-4.123957633972168, -2.7613656520843506], + [2.4367945194244385, 5.747795581817627], + [7.678446292877197, -1.9311195611953735], + [2.5744452476501465, -4.226167678833008], + [8.40295124053955, -2.6290621757507324], + [8.121659278869629, -1.8320653438568115], + [-3.5869972705841064, 3.8523597717285156], + [-3.0138494968414307, -3.863011121749878], + [-5.237671375274658, -3.114088535308838], + [3.2127277851104736, -5.190649032592773], + [-4.299372673034668, 6.345053195953369], + [2.4483203887939453, -5.624462604522705], + [6.12675142288208, -1.458726406097412], + [-2.9389524459838867, 5.488115310668945], + [-0.3131367564201355, -0.7926174402236938], + [1.5624516010284424, -8.545469284057617], + [9.513162612915039, -2.6584208011627197], + [-4.353201389312744, 4.6258440017700195], + [2.876183032989502, -4.58542537689209], + [-0.5918871760368347, 10.000031471252441], + [-3.802544355392456, -2.542929172515869], + [3.123061418533325, -4.6785807609558105], + [-6.1666483879089355, 7.052305221557617], + [-2.1602766513824463, 2.749298334121704], + [6.948897361755371, -2.3098137378692627], + [-4.883952617645264, -0.5001997351646423], + [-4.3417181968688965, 3.47602915763855], + [-2.913109540939331, 3.1835696697235107], + [3.0381383895874023, -4.717569828033447], + [1.292328119277954, -5.726839542388916], + [5.039119720458984, -1.356749176979065], + [-4.550601482391357, 7.056347370147705], + [-0.6752787828445435, 9.742974281311035], + [0.023722372949123383, -0.7773904204368591], + [-0.3303173780441284, 9.562744140625], + [-2.477207899093628, 0.7776312828063965], + [2.739337921142578, 1.0093704462051392], + [-6.050889492034912, -1.7771027088165283], + [-5.744078636169434, 5.769336700439453], + [6.1146087646484375, -1.7065438032150269], + [-3.7665390968322754, 4.739498138427734], + [7.636799335479736, -2.357053518295288], + [-5.239658355712891, -0.05845010653138161], + [-0.2741938829421997, 10.345422744750977], + [-6.322799205780029, 7.535968780517578], + [8.299235343933105, -1.9499198198318481], + [-5.239766597747803, -3.673497200012207], + [2.3480517864227295, -3.992309093475342], + [-7.253798007965088, -1.5395013093948364], + [-7.427528381347656, -1.0354161262512207], + [-4.77604866027832, 3.829716682434082], + [-1.4731764793395996, 5.513646125793457], + [7.272035121917725, -1.4205628633499146], + [-5.459178447723389, 3.829270601272583], + [8.080181121826172, -1.988997220993042], + [2.3427014350891113, 5.4857869148254395], + [1.9704511165618896, 5.6242265701293945], + [-0.24480396509170532, 10.691929817199707], + [2.2896616458892822, -2.6428234577178955], + [5.185942649841309, -1.0706759691238403], + [-6.462579250335693, -2.68587327003479], + [-4.5705976486206055, -3.178457498550415], + [-5.422138690948486, 7.498377323150635], + [-5.242929935455322, -0.5302910804748535], + [2.102851629257202, -3.9890987873077393], + [-5.229243755340576, -3.240891695022583], + [-4.756197452545166, -2.350494146347046], + [-0.3732708692550659, 5.209139347076416], + [-4.382418155670166, 5.540689468383789], + [0.3373473286628723, -5.102076530456543], + [-4.230627536773682, -2.9627277851104736], + [-3.2852587699890137, 4.853447914123535], + [4.202600955963135, -3.5594193935394287], + [5.368244171142578, -0.7830287218093872], + [3.5927560329437256, 6.513034820556641], + [-0.9126549959182739, 9.115155220031738], + [-7.248971939086914, 1.3027020692825317], + [-2.143648862838745, 2.949467182159424], + [-8.03477954864502, 9.803157806396484], + [-0.2182248830795288, 9.473189353942871], + [-5.325077056884766, 7.337848663330078], + [-5.490025520324707, 6.496440887451172], + [-4.601757526397705, 5.130071640014648], + [-4.164360046386719, -2.50075626373291], + [2.0744643211364746, 5.701239585876465], + [-2.603839635848999, 0.6146999001502991], + [1.9917004108428955, -9.809858322143555], + [1.7573950290679932, 4.633728504180908], + [-7.699661731719971, -0.07587265968322754], + [3.201795816421509, -4.791747093200684], + [-2.6348016262054443, 4.620612144470215], + [2.1441562175750732, 5.259439468383789], + [-7.951732635498047, -1.0750328302383423], + [3.8614625930786133, -3.2813351154327393], + [-6.9702935218811035, 8.673559188842773], + [-3.469735860824585, -2.4808261394500732], + [-2.1769633293151855, 2.6723744869232178], + [10.271377563476562, -2.810070753097534], + [7.9523844718933105, -2.0115559101104736], + [-2.812582492828369, 2.063716173171997], + [1.9085099697113037, 5.47993278503418], + [2.5328705310821533, -6.005402088165283], + [2.0099332332611084, -3.2867238521575928], + [-0.2587900757789612, 9.875139236450195], + [7.834207057952881, -1.5237467288970947], + [-0.001061655580997467, -1.3060176372528076], + [-7.537124156951904, -1.0909234285354614], + [-6.400619983673096, 7.937250137329102], + [-0.2763316035270691, 10.112035751342773], + [-2.190051794052124, 1.1751817464828491], + [-4.594379901885986, -0.5259947180747986], + [-6.239631652832031, -1.4227238893508911], + [-2.1705563068389893, -1.0117838382720947], + [-6.843480110168457, 7.983673095703125], + [3.142507314682007, -5.359269142150879], + [-4.4184250831604, -2.0200209617614746], + [2.7247605323791504, -4.377171993255615], + [2.988792657852173, -4.969647407531738], + [-4.451656818389893, -4.638447284698486], + [-4.775989532470703, 6.94570255279541], + [-4.2093825340271, 4.983870506286621], + [-5.368764400482178, -2.479750156402588], + [-3.656714916229248, 5.464584827423096], + [2.0064096450805664, 5.3802032470703125], + [3.429654359817505, 0.6823951601982117], + [-5.417723178863525, -3.6041135787963867], + [-6.914151668548584, 1.603869080543518], + [1.8851652145385742, -3.149308443069458], + [-4.458302021026611, 6.739312648773193], + [-0.22610139846801758, 10.445211410522461], + [-6.489964008331299, 8.431755065917969], + [5.112064838409424, -3.8498547077178955], + [-0.28953903913497925, 9.80016040802002], + [-2.926180601119995, -3.8569774627685547], + [-0.7746352553367615, 9.38321304321289], + [-5.898599147796631, 6.411114692687988], + [-2.8624918460845947, 0.33645761013031006], + [-3.2054460048675537, -0.9633861780166626], + [-4.076653003692627, -2.2445123195648193], + [-4.291228771209717, -4.1080803871154785], + [-0.13294953107833862, 9.628438949584961], + [0.00028126686811447144, 10.26963996887207], + [-1.2219055891036987, 9.92747974395752], + [9.89245891571045, -2.7497036457061768], + [-0.9476915001869202, 5.839895248413086], + [3.822645425796509, -3.1518049240112305], + [-0.6304517984390259, -3.135568618774414], + [1.6586863994598389, 1.368545413017273], + [-0.5397738218307495, -1.193992018699646], + [-7.0220513343811035, -1.2482471466064453], + [-4.026979923248291, -2.653567314147949], + [9.993260383605957, -2.772503614425659], + [-3.0096356868743896, -1.4687122106552124], + [-5.5503411293029785, -2.220076084136963], + [-6.213064670562744, 7.674802303314209], + [6.926084041595459, -2.218390941619873], + [-3.2455034255981445, -1.9591336250305176], + [-2.489784002304077, -0.5401341319084167], + [-5.151978015899658, 6.616229057312012], + [-3.4021196365356445, -2.121213674545288], + [7.915572166442871, -4.659544944763184], + [-4.5825090408325195, -4.6850996017456055], + [-6.161442279815674, -2.1996757984161377], + [2.537673234939575, -4.2638750076293945], + [0.017230324447155, -0.4565720558166504], + [-5.483794689178467, -3.2517077922821045], + [-7.495757579803467, -1.7360905408859253], + [-6.830123424530029, -1.6355839967727661], + [-4.299515247344971, -3.5551915168762207], + [-4.435488224029541, -3.6741652488708496], + [0.0037954971194267273, 8.567214965820312], + [-6.346394062042236, 7.9934892654418945], + [3.248427152633667, -5.159448623657227], + [-3.492095708847046, 6.2247233390808105], + [-5.111902713775635, 0.6189384460449219], + [4.838101387023926, -0.8317815661430359], + [-5.346534252166748, 4.083086967468262], + [-2.878206491470337, 5.5597333908081055], + [0.17850351333618164, 4.626977920532227], + [-2.5705816745758057, 2.1847894191741943], + [3.0062592029571533, -4.590567588806152], + [2.9491488933563232, -4.442040920257568], + [-8.476393699645996, -0.810225248336792], + [7.332391738891602, -1.9639215469360352], + [2.983337879180908, -4.492222785949707], + [-2.2218265533447266, 0.23509478569030762], + [-5.504434108734131, 4.870717525482178], + [-3.5599138736724854, -2.4351413249969482], + [8.771956443786621, -2.4174957275390625], + [-0.7760958075523376, 4.860594272613525], + [0.8061054944992065, 7.203635215759277], + [-2.469881057739258, 5.881049156188965], + [-2.6021783351898193, 2.013465166091919], + [3.0158822536468506, -4.726663589477539], + [7.268940448760986, -1.6922401189804077], + [-5.649510860443115, 4.437032222747803], + [-0.5308459401130676, 9.217504501342773], + [-2.082914113998413, 4.675485610961914], + [2.269843101501465, 1.0117852687835693], + [-7.147476673126221, -0.13142943382263184], + [2.009575128555298, 4.980154991149902], + [-2.897953987121582, 1.9448308944702148], + [-1.2551803588867188, 10.429783821105957], + [4.986720085144043, -1.0404517650604248], + [1.7119348049163818, -7.62877893447876], + [-5.148508071899414, -2.0284249782562256], + [4.843348979949951, -4.340451717376709], + [5.6849045753479, -1.12510347366333], + [-5.274044036865234, 7.644838809967041], + [-1.1792584657669067, 9.444069862365723], + [-4.832787990570068, 6.195052146911621], + [-3.317992925643921, -3.803739070892334], + [6.185473918914795, -1.278342843055725], + [1.5001428127288818, 1.384934425354004], + [2.6410374641418457, -5.75145149230957], + [2.1707887649536133, -7.642815589904785], + [-2.262437582015991, 2.3811473846435547], + [-6.0556321144104, 7.166250705718994], + [6.200524806976318, -1.2483609914779663], + [3.1628899574279785, 5.237824440002441], + [-4.237581729888916, -0.5509721040725708], + [-2.2312257289886475, 1.4598249197006226], + [-7.028088569641113, 8.56375789642334], + [-3.2350990772247314, 5.333292007446289], + [-5.86718225479126, -2.1210715770721436], + [-5.905093193054199, 7.075499534606934], + [-5.930196285247803, 0.9276505708694458], + [0.0872119590640068, 9.947612762451172], + [-5.171284198760986, -4.424287796020508], + [-0.6732093691825867, -0.9875094890594482], + [-2.5643088817596436, 1.898574948310852], + [-0.1938837170600891, 9.900410652160645], + [-2.992943048477173, -1.327751636505127], + [2.5084660053253174, 6.310976505279541], + [8.911152839660645, -2.4944212436676025], + [9.333810806274414, -2.61372971534729], + [-0.22126483917236328, 10.107025146484375], + [-2.440676212310791, 1.7412723302841187], + [-4.6864399909973145, -3.136962413787842], + [-4.623263835906982, 5.422685146331787], + [-4.519680023193359, 7.498173713684082], + [3.582547187805176, 0.2969960570335388], + [-5.6578288078308105, -2.500896453857422], + [-5.310183048248291, 5.113827228546143], + [-2.4623007774353027, 1.9429000616073608], + [-0.5117830038070679, 9.251920700073242], + [-2.2642791271209717, 1.4415712356567383], + [8.772841453552246, -2.353832483291626], + [-8.095973014831543, 9.986983299255371], + [-1.910139799118042, -1.8607549667358398], + [-6.322427272796631, -2.3694164752960205], + [1.9066717624664307, -8.371676445007324], + [-0.12108851224184036, 10.16508960723877], + [-5.276983261108398, 2.7374629974365234], + [-4.94553804397583, 1.2372862100601196], + [0.23375362157821655, -5.50932502746582], + [-4.4367146492004395, -4.684108734130859], + [-7.7693867683410645, -1.3447712659835815], + [-3.8902900218963623, 5.2000274658203125], + [2.3235394954681396, -9.015829086303711], + [-4.700377941131592, -2.464540719985962], + [-3.7825703620910645, 4.076632499694824], + [-0.5964810848236084, -0.12061688303947449], + [1.6360080242156982, -8.080673217773438], + [-0.3028503656387329, 10.414067268371582], + [-3.566847562789917, 3.5579049587249756], + [-2.1763875484466553, 5.555189609527588], + [2.9455106258392334, -4.791101455688477], + [0.9542462229728699, 5.317133903503418], + [-4.699132919311523, 6.245247840881348], + [3.8401124477386475, -0.00473906472325325], + [-3.8966429233551025, 4.431536674499512], + [-4.500404357910156, -1.7078851461410522], + [1.6677172183990479, -8.068774223327637], + [1.8773785829544067, 5.574694633483887], + [-3.255836009979248, -3.8767290115356445], + [0.2316245436668396, 6.1734747886657715], + [-5.399224758148193, 6.0874786376953125], + [-1.911210060119629, 1.8043203353881836], + [-2.8127634525299072, -2.07249116897583], + [-3.327954053878784, -1.7059756517410278], + [-0.14945480227470398, -1.1304868459701538], + [-6.130442142486572, 6.763062477111816], + [-5.198544502258301, -3.347094774246216], + [2.2880728244781494, -3.5651118755340576], + [-4.110594749450684, -2.793710231781006], + [-4.751898765563965, 3.6362087726593018], + [-3.7472245693206787, 5.347240447998047], + [2.076164722442627, -9.845287322998047], + [2.7313685417175293, 1.1239601373672485], + [-4.806436061859131, -2.579392910003662], + [-1.3508702516555786, -0.7970272302627563], + [-4.744621276855469, 2.5299456119537354], + [2.7758071422576904, -5.278103828430176], + [-2.7733352184295654, -1.1870026588439941], + [-3.740896701812744, -4.681482791900635], + [-5.113343715667725, -2.7409636974334717], + [-5.420364856719971, -0.9593075513839722], + [-1.2006161212921143, 4.827012538909912], + [-6.295413494110107, 6.8193864822387695], + [0.5583719611167908, 10.371542930603027], + [2.0214531421661377, -3.275806188583374], + [-0.8296045064926147, 7.998807907104492], + [4.911605358123779, -3.512164354324341], + [-4.7214837074279785, 6.325153350830078], + [2.7699618339538574, -0.7104455232620239], + [-6.239084243774414, 1.6212592124938965], + [-3.938387155532837, 0.7954294085502625], + [6.2608962059021, -1.2315378189086914], + [-0.3860984146595001, -1.12593674659729], + [2.7916390895843506, 0.9128323793411255], + [2.8121488094329834, -4.696848392486572], + [5.156032562255859, -1.4262193441390991], + [3.730780839920044, 6.782693862915039], + [8.276106834411621, -2.154191493988037], + [-6.299908638000488, 1.4171041250228882], + [-6.551555156707764, 8.504697799682617], + [6.397462368011475, -1.4122284650802612], + [2.857182025909424, -5.216352939605713], + [-4.284811973571777, -3.627756118774414], + [-3.446805477142334, -5.081024169921875], + [-5.313982009887695, 4.918729782104492], + [-3.501885175704956, 5.706238746643066], + [4.390288829803467, 7.3073625564575195], + [8.667435646057129, -2.300994634628296], + [3.5919861793518066, -6.808849334716797], + [-2.279916286468506, 1.8978677988052368], + [-3.4462451934814453, -2.651010751724243], + [3.1430461406707764, -4.917904853820801], + [1.7701616287231445, -5.023706436157227], + [2.177900791168213, 0.8913849592208862], + [-2.5503950119018555, 2.1808457374572754], + [9.547856330871582, -2.7184934616088867], + [8.971418380737305, -2.521486759185791], + [-2.6047708988189697, 5.105136871337891], + [1.7441432476043701, 5.368927478790283], + [-1.0589234828948975, 10.025405883789062], + [-2.1582233905792236, 2.997164487838745], + [1.4847996234893799, -7.616274356842041], + [-0.38972359895706177, 10.488677024841309], + [8.582758903503418, -2.2676432132720947], + [-2.7669875621795654, -1.2432087659835815], + [2.9665238857269287, -4.4378509521484375], + [2.841535806655884, -4.432473659515381], + [-0.23316770792007446, 11.0640869140625], + [1.143067479133606, -6.251163005828857], + [3.220508337020874, -5.043955326080322], + [1.778233528137207, 5.2605743408203125], + [1.726080298423767, -8.802033424377441], + [-4.351097106933594, -2.9791181087493896], + [-2.1108696460723877, 2.742305278778076], + [-0.9994189143180847, 0.6925151944160461], + [7.740780353546143, -1.884787917137146], + [-2.268808126449585, 0.9005608558654785], + [-2.0871973037719727, 2.5410959720611572], + [8.562845230102539, -2.0041697025299072], + [-3.9319474697113037, -2.9733798503875732], + [-3.0182931423187256, 3.1792078018188477], + [-4.7698163986206055, -5.824771881103516], + [6.906485080718994, -2.330522298812866], + [-2.840864896774292, -2.83262038230896], + [-7.551288604736328, 9.145678520202637], + [-5.378989219665527, -4.110588073730469], + [-1.4129277467727661, -3.071695566177368], + [2.271901845932007, 1.114660382270813], + [-5.97338342666626, -2.5872602462768555], + [2.6694412231445312, 5.998744964599609], + [-4.487259864807129, -0.9900259971618652], + [-3.1559855937957764, 3.4829752445220947], + [-7.342329502105713, -0.1575406789779663], + [-4.623286724090576, 4.456297874450684], + [-2.508803367614746, 6.10429573059082], + [-5.57971715927124, -1.6812745332717896], + [1.348955750465393, 1.6911269426345825], + [-3.237473249435425, -2.983582019805908], + [5.402185916900635, -1.1340794563293457], + [1.8767812252044678, 5.106800079345703], + [-2.059859037399292, 2.4294354915618896], + [-4.710630416870117, 5.165982723236084], + [-5.201488018035889, 2.543935775756836], + [3.3223061561584473, -4.96815824508667], + [-3.0519511699676514, -4.327660083770752], + [-0.27224618196487427, 8.751397132873535], + [2.399216413497925, 0.5905511379241943], + [-0.27407318353652954, 10.142782211303711], + [-2.775709867477417, -2.418494462966919], + [-5.317129611968994, 6.64980411529541], + [-3.2535793781280518, 4.8167619705200195], + [-4.260251998901367, -1.7531200647354126], + [-2.141205072402954, 2.776029586791992], + [-3.900202512741089, 6.083574295043945], + [-5.613687992095947, 1.692934274673462], + [1.87620210647583, 5.710455894470215], + [-6.257404327392578, 7.824639320373535], + [-4.234823703765869, -3.2162578105926514], + [2.679936647415161, -4.5573883056640625], + [-3.2302801609039307, -1.627236247062683], + [-4.2289652824401855, 6.697703838348389], + [-4.538740634918213, 3.6741788387298584], + [-3.528043031692505, -1.2303482294082642], + [7.245270252227783, -2.608217239379883], + [1.3987181186676025, -1.3917402029037476], + [-2.3932042121887207, 6.171463966369629], + [0.7083268165588379, -5.284789562225342], + [-3.5603907108306885, -2.5169789791107178], + [-2.791393518447876, 4.514679908752441], + [8.40457820892334, -2.4666898250579834], + [-5.32908296585083, -0.5246212482452393], + [-5.516417026519775, -4.137287139892578], + [2.4706497192382812, 6.202141761779785], + [0.6674647331237793, -5.473968505859375], + [-4.7681756019592285, -3.3070144653320312], + [3.0896923542022705, -4.152183532714844], + [7.327627658843994, -1.5336713790893555], + [3.1917779445648193, -0.302439421415329], + [-0.7879668474197388, -0.7951529622077942], + [3.218881368637085, -4.8187971115112305], + [-7.645298957824707, 0.19220566749572754], + [-4.172457218170166, 6.063863277435303], + [-2.1855812072753906, -0.23530909419059753], + [2.006406784057617, 0.683862030506134], + [3.4515581130981445, -3.8386871814727783], + [-3.7297871112823486, 4.593963146209717], + [-0.9327955842018127, 10.528841018676758], + [-4.917884826660156, -3.9028046131134033], + [-2.64099383354187, 2.0117218494415283], + [-4.486758708953857, 7.337751865386963], + [2.734661340713501, -5.049229145050049], + [5.972981929779053, 7.840914726257324], + [1.8862364292144775, 1.5811980962753296], + [6.371243000030518, -1.2333956956863403], + [-2.7449052333831787, 6.259190559387207], + [-5.418426990509033, -3.161252737045288], + [-5.375483512878418, -5.192713737487793], + [0.2731744050979614, -4.837343215942383], + [-0.08644170314073563, 9.407255172729492], + [-2.50347638130188, 2.025885820388794], + [-0.24416929483413696, 9.748130798339844], + [-3.9385149478912354, 5.439764022827148], + [1.6483418941497803, 0.1480095088481903], + [-3.6066668033599854, 5.296658039093018], + [1.841097354888916, -3.9314162731170654], + [1.4128172397613525, -6.384760856628418], + [0.5046934485435486, -0.4948977828025818], + [-4.019171237945557, -1.2632265090942383], + [-7.282486915588379, 8.943450927734375], + [-0.36114442348480225, 8.932042121887207], + [0.9651991724967957, -6.272787570953369], + [-3.6225228309631348, 5.989806652069092], + [0.17194229364395142, -4.535101890563965], + [-6.439800262451172, -2.729865312576294], + [-5.75668478012085, 2.722597599029541], + [0.1361173689365387, -0.2815200388431549], + [3.297724485397339, -5.294335842132568], + [-2.2559735774993896, 0.7648240923881531], + [-4.396779537200928, -4.349576950073242], + [-6.022402763366699, -0.7387192249298096], + [-4.619837760925293, -3.016084671020508], + [7.198320388793945, -1.5845777988433838], + [-5.4619364738464355, 7.352859973907471], + [2.661053419113159, -7.492339134216309], + [6.647899627685547, -2.422424793243408], + [-3.1163547039031982, -3.4425947666168213], + [3.2684390544891357, -4.8990325927734375], + [0.8452104926109314, -6.237340927124023], + [-5.54835844039917, 4.940923690795898], + [-4.33711576461792, -3.727999448776245], + [8.343487739562988, -2.171272039413452], + [-4.3619585037231445, 4.622575283050537], + [1.7205129861831665, -9.009668350219727], + [0.7648236155509949, -4.58149528503418], + [-1.1685764789581299, 7.56235408782959], + [-5.2170000076293945, -3.032569646835327], + [-2.0729427337646484, -1.7500666379928589], + [5.43091344833374, -1.1829890012741089], + [-5.768767833709717, -2.601665735244751], + [2.3906047344207764, -6.252112865447998], + [1.736053705215454, 6.284980773925781], + [-1.885638952255249, -2.1986403465270996], + [-4.512218952178955, -2.7720725536346436], + [5.664156436920166, 7.62336540222168], + [-4.49606990814209, -3.754531145095825], + [-3.086127519607544, 5.179523468017578], + [2.8253190517425537, -4.23574686050415], + [-2.173896551132202, 2.0305840969085693], + [3.4178640842437744, -5.824854850769043], + [-0.46150195598602295, 9.007070541381836], + [-0.6233530640602112, 6.451148509979248], + [-0.6820182204246521, -0.5797241926193237], + [2.034194231033325, -3.6760499477386475], + [-4.38054084777832, -3.2228434085845947], + [-1.4568215608596802, 1.8530981540679932], + [5.265787601470947, -2.531558036804199], + [-0.33833879232406616, 10.801061630249023], + [-4.445759296417236, 5.073809623718262], + [-0.2224237024784088, -1.5318149328231812], + [6.27305793762207, -0.3444007337093353], + [-7.0330915451049805, 8.555986404418945], + [-4.106895923614502, 4.421031951904297], + [-0.38860297203063965, -0.7778636813163757], + [1.5127737522125244, -8.415787696838379], + [-5.657301425933838, -3.8478991985321045], + [-0.21642035245895386, 10.319865226745605], + [-5.3652024269104, -0.6598133444786072], + [2.8218305110931396, -4.492820739746094], + [-2.4548025131225586, 2.2458157539367676], + [-0.6068007349967957, -1.492840051651001], + [-1.8061095476150513, 1.9907649755477905], + [-5.04194450378418, 1.9265624284744263], + [-2.044853687286377, 2.642773151397705], + [-2.133915662765503, 1.7169798612594604], + [-0.26463478803634644, 10.69141960144043], + [-6.637558460235596, 7.952300071716309], + [-0.06900740414857864, 11.085993766784668], + [-0.3196483254432678, 10.444192886352539], + [-4.795011043548584, 1.5151184797286987], + [-2.5767014026641846, -1.8091157674789429], + [-5.847643852233887, 5.422331809997559], + [-2.1946470737457275, 5.613785743713379], + [6.756117343902588, -1.5982259511947632], + [-6.7137932777404785, 8.010848045349121], + [-4.421180248260498, -2.4630520343780518], + [8.41577434539795, -2.3334038257598877], + [-5.879538059234619, 5.457402229309082], + [2.985351800918579, -4.489436149597168], + [-3.4822986125946045, -2.2508511543273926], + [-3.377859115600586, -4.576225280761719], + [2.8688056468963623, 6.229410171508789], + [2.732239007949829, -5.930630683898926], + [-2.487764596939087, 1.5679328441619873], + [2.193880558013916, 5.758700370788574], + [-6.253106594085693, 3.449342966079712], + [-4.864657878875732, 1.5824105739593506], + [-2.1426327228546143, 2.654360771179199], + [-0.3587895333766937, -1.446407675743103], + [-2.4361190795898438, 2.014479398727417], + [6.162159442901611, -2.2540957927703857], + [2.9954397678375244, -4.497907638549805], + [-1.826026439666748, 1.2822152376174927], + [-0.32780325412750244, -1.036665439605713], + [-2.650719404220581, -1.955134630203247], + [5.568959712982178, -1.8770583868026733], + [4.544525146484375, -6.558940887451172], + [-4.51962423324585, -3.2959134578704834], + [-0.24635738134384155, 9.993459701538086], + [-7.2341532707214355, 9.262322425842285], + [2.7060701847076416, 6.579366683959961], + [-4.323418140411377, 5.4998250007629395], + [-3.784834623336792, -1.4666142463684082], + [-5.023355484008789, -2.8628363609313965], + [-4.520049095153809, 5.217202186584473], + [-2.4707493782043457, 1.6186541318893433], + [0.31293827295303345, 10.453983306884766], + [-5.3762125968933105, 6.642827987670898], + [-5.6357831954956055, -2.5128180980682373], + [6.686446666717529, -1.294731855392456], + [0.1324940323829651, -1.1197599172592163], + [-4.087308406829834, -1.4519848823547363], + [2.0830342769622803, -4.772324085235596], + [5.801382541656494, -2.2947890758514404], + [-4.063451766967773, -1.1116329431533813], + [-0.9283627867698669, -1.9101265668869019], + [2.9479141235351562, -4.534562587738037], + [-5.610199451446533, -1.1803888082504272], + [-4.439795970916748, 2.8478739261627197], + [-2.435459852218628, 2.2467832565307617], + [-2.8292396068573, 2.937329053878784], + [-4.6775736808776855, -4.086729049682617], + [9.717914581298828, -2.7496540546417236], + [-4.9195146560668945, -2.0394363403320312], + [-0.5284575819969177, -1.0827592611312866], + [10.14309310913086, -2.8059208393096924], + [-3.641658067703247, -3.743910074234009], + [3.2103312015533447, -4.912177562713623], + [2.9916107654571533, 0.8626240491867065], + [-4.9399189949035645, 5.808685302734375], + [0.49327725172042847, -5.906490802764893], + [3.0273001194000244, -4.764400482177734], + [1.8567819595336914, 5.628241539001465], + [-4.2878499031066895, 4.855865478515625], + [5.11876916885376, -1.2411603927612305], + [-1.240694522857666, 0.9760366678237915], + [-6.0655083656311035, 5.198666572570801], + [2.8651742935180664, 0.9940853118896484], + [-1.1597148180007935, 0.44139567017555237], + [1.8605554103851318, -9.171463966369629], + [6.366532325744629, -1.7146530151367188], + [-2.33870005607605, 1.8559494018554688], + [-4.182939052581787, -3.6470589637756348], + [-5.645701885223389, -1.1090320348739624], + [-0.23642021417617798, 10.198205947875977], + [2.6669578552246094, -6.191777229309082], + [-5.443055152893066, 0.4716991186141968], + [6.5734782218933105, -1.3115469217300415], + [1.4727387428283691, 1.4075292348861694], + [6.073915481567383, -3.965243339538574], + [-0.5880276560783386, 9.393041610717773], + [5.628774166107178, -2.8311655521392822], + [0.44670814275741577, -4.7003374099731445], + [3.0386269092559814, -4.578463554382324], + [-4.375006198883057, -3.5709004402160645], + [-7.685611248016357, -1.6858528852462769], + [6.702167510986328, -1.5389889478683472], + [7.437110900878906, -4.809772491455078], + [-5.2267069816589355, 7.1749372482299805], + [-0.23814237117767334, 9.953241348266602], + [5.807523727416992, -1.171406865119934], + [0.9606265425682068, 0.6834489703178406], + [0.13536256551742554, -0.4059104323387146], + [-5.256241321563721, 1.0801913738250732], + [7.38580846786499, -1.3498855829238892], + [1.6027320623397827, 3.146815538406372], + [-3.767333745956421, -2.761698007583618], + [1.0260517597198486, 0.5345349907875061], + [1.8480160236358643, -9.491828918457031], + [1.7493524551391602, 5.497843265533447], + [-0.800160825252533, 8.024518966674805], + [1.9273972511291504, -4.862763404846191], + [3.183983325958252, -4.966953277587891], + [-4.309581279754639, 6.5313005447387695], + [-4.718655586242676, -2.834883451461792], + [5.919759273529053, -5.413820743560791], + [-2.875999689102173, 2.811136484146118], + [-4.051700592041016, -2.207765579223633], + [-2.295797348022461, 1.6285477876663208], + [-5.860283374786377, 2.4439215660095215], + [-5.893667697906494, -0.5837005376815796], + [-4.596189022064209, 5.5493927001953125], + [-2.6538779735565186, 2.600224256515503], + [-6.213852882385254, -2.464747428894043], + [-4.827545642852783, -4.649378776550293], + [-0.8072330355644226, -1.5860933065414429], + [3.9423491954803467, -3.7593953609466553], + [-0.24124974012374878, 10.510042190551758], + [0.3406181335449219, -2.0273702144622803], + [-4.535292625427246, 0.37753480672836304], + [-0.5582714676856995, 8.654914855957031], + [6.219208240509033, -1.4297301769256592], + [-4.547054767608643, 3.379286050796509], + [-4.886648654937744, -2.82844614982605], + [-1.2954411506652832, 6.203418254852295], + [5.902734279632568, -0.8503273725509644], + [-0.34878236055374146, 11.051839828491211], + [2.7913734912872314, 6.676650524139404], + [2.7976667881011963, -5.498194694519043], + [7.340074062347412, -1.8343636989593506], + [-6.386597156524658, -2.115316152572632], + [-0.5887037515640259, 8.984920501708984], + [-2.8385658264160156, 6.270849704742432], + [1.239094614982605, 4.6201863288879395], + [8.856013298034668, -2.6154372692108154], + [-4.771427154541016, 3.669212579727173], + [-2.2578961849212646, 2.256929636001587], + [-0.22498029470443726, 10.231410026550293], + [-0.5674564242362976, 11.257938385009766], + [1.4420078992843628, -4.293879985809326], + [-6.729954242706299, 8.23088264465332], + [-4.838122844696045, -2.8720316886901855], + [4.6249003410339355, -0.9977495670318604], + [-0.21269160509109497, 9.60148811340332], + [7.960229396820068, -2.0790412425994873], + [-5.018248081207275, 0.38009774684906006], + [-4.724673748016357, -2.1222727298736572], + [2.278146505355835, -4.932315826416016], + [3.1229074001312256, -5.220472812652588], + [-5.359181880950928, -3.7701632976531982], + [-2.290086269378662, 1.9175572395324707], + [-6.239669322967529, 8.331001281738281], + [-4.27825403213501, -4.203577041625977], + [1.3456759452819824, -6.244938850402832], + [-5.9037251472473145, 5.3319172859191895], + [-6.2201247215271, -2.4637224674224854], + [-2.465061664581299, 1.160858392715454], + [3.8129446506500244, 0.9861810207366943], + [2.6024067401885986, -4.077594757080078], + [-2.3870437145233154, -0.9729876518249512], + [7.952920436859131, -2.496203899383545], + [2.534230947494507, -3.6098055839538574], + [-7.516132354736328, -1.7760690450668335], + [2.0490710735321045, 4.341022491455078], + [5.570582389831543, -1.3575029373168945], + [-0.45096832513809204, 9.373748779296875], + [2.32779860496521, 6.0421142578125], + [2.085052251815796, -8.041810989379883], + [-0.04219991713762283, 9.658952713012695], + [1.2910100221633911, -6.901723861694336], + [2.082746744155884, -3.8712613582611084], + [6.251709461212158, -1.2439851760864258], + [-5.2660675048828125, -0.6009793877601624], + [-4.219638824462891, -1.717026948928833], + [-5.0322980880737305, 5.432774543762207], + [-2.51426100730896, 2.2125117778778076], + [-6.234706878662109, 6.486119747161865], + [-4.698087692260742, 4.0778632164001465], + [-0.30965134501457214, -1.6961582899093628], + [-3.6501810550689697, 5.658427715301514], + [-2.3347275257110596, 1.6358087062835693], + [8.166326522827148, -2.1972525119781494], + [8.957470893859863, -2.5281357765197754], + [7.156303882598877, -2.6811141967773438], + [2.923906087875366, -4.399822235107422], + [-7.1736979484558105, 8.48748779296875], + [1.730597734451294, -7.901395797729492], + [-6.009767055511475, -2.393625259399414], + [-0.4646787941455841, -1.4008758068084717], + [-5.390475749969482, 1.8280993700027466], + [5.045425891876221, -3.417585611343384], + [7.680595397949219, -4.598905563354492], + [-5.393232345581055, 4.250265598297119], + [-5.69793176651001, -2.3575761318206787], + [-6.207638263702393, 0.22403442859649658], + [-4.807204723358154, 3.880920648574829], + [-2.495914936065674, 1.790466070175171], + [-5.841465950012207, -1.22061288356781], + [-5.554030895233154, -4.135002613067627], + [-6.14192533493042, -1.9789421558380127], + [3.2190210819244385, -4.81102180480957], + [-2.97249174118042, 3.169671058654785], + [-5.347047328948975, 4.552847385406494], + [-5.7380805015563965, 2.587393045425415], + [2.175464391708374, -6.174038887023926], + [8.315268516540527, -2.3971149921417236], + [2.7239162921905518, -4.197247505187988], + [0.8133586049079895, -0.4037668704986572], + [-3.860999822616577, 3.137894868850708], + [-7.348896503448486, -1.5825451612472534], + [-4.092785835266113, -0.4888142943382263], + [6.441366672515869, -4.606204986572266], + [-0.26860225200653076, 9.536312103271484], + [2.696678400039673, -1.824723482131958], + [-2.695951223373413, 5.929198265075684], + [-4.294545650482178, 3.653470754623413], + [1.9516162872314453, -6.156491279602051], + [-0.4655987620353699, 11.320293426513672], + [7.989133358001709, -2.7141783237457275], + [-7.32715368270874, 8.942527770996094], + [0.0438174232840538, -0.3722521960735321], + [-1.6696799993515015, -0.8260866403579712], + [-2.0270497798919678, 2.7352683544158936], + [0.719252347946167, 4.537522315979004], + [-6.32786226272583, -1.6477077007293701], + [3.0715906620025635, -4.780922889709473], + [-4.937253475189209, 5.353828430175781], + [-2.358642101287842, 6.441072463989258], + [7.211244583129883, -1.7164548635482788], + [6.1507134437561035, -1.9991930723190308], + [-2.616320848464966, -2.5431509017944336], + [-6.6251702308654785, 8.287242889404297], + [2.519232749938965, -3.7608530521392822], + [-4.668676376342773, 1.519118070602417], + [0.8489923477172852, -5.774090766906738], + [5.3533806800842285, -1.10225510597229], + [7.542975902557373, -1.7098010778427124], + [-6.633563041687012, 8.088691711425781], + [-0.15724259614944458, -2.127962827682495], + [-2.865041494369507, 6.3086957931518555], + [0.5918018817901611, 5.717388153076172], + [-5.837156772613525, 2.846240282058716], + [-5.583423137664795, -2.43208646774292], + [3.0572237968444824, -4.94157600402832], + [2.6688153743743896, 4.664096832275391], + [6.457630634307861, -1.537394404411316], + [-3.1980397701263428, 0.5801141858100891], + [-1.1028810739517212, 6.3758864402771], + [2.081275463104248, 4.919756889343262], + [-1.9677715301513672, 1.9417519569396973], + [2.796020746231079, 5.397069454193115], + [-2.3218204975128174, -2.2095327377319336], + [-2.4607694149017334, 0.995226263999939], + [-4.090332984924316, 6.785544395446777], + [-6.506839275360107, 8.236746788024902], + [-2.521002769470215, 1.4706825017929077], + [3.0935161113739014, -4.7443695068359375], + [-2.0100698471069336, 5.7060112953186035], + [3.135331153869629, 6.822887897491455], + [-0.3037305176258087, -0.9295943975448608], + [-2.1359238624572754, 0.9596455097198486], + [2.4074044227600098, -4.023780822753906], + [-0.3112526535987854, 9.065638542175293], + [-6.508208274841309, 7.728227615356445], + [-5.096581935882568, 6.214888572692871], + [-0.9158644080162048, 0.4729049801826477], + [-3.8951737880706787, -1.9538015127182007], + [2.921588182449341, -4.418768882751465], + [-7.724948406219482, 9.396177291870117], + [-5.211225509643555, -4.7288713455200195], + [-5.514990329742432, -2.2051000595092773], + [-5.027343273162842, -1.6893123388290405], + [-2.1794567108154297, 2.2491796016693115], + [1.785560965538025, -8.537014961242676], + [-1.1087713241577148, -0.7154659628868103], + [-5.607163906097412, 4.032238483428955], + [-4.350020885467529, -4.125362396240234], + [1.367221713066101, -0.08818364143371582], + [-0.24234187602996826, 9.785028457641602], + [3.344625473022461, 6.403138160705566], + [-2.719517946243286, -1.574286937713623], + [-0.20938271284103394, 9.938545227050781], + [-4.784503936767578, -2.8746349811553955], + [-5.702622890472412, 6.9836883544921875], + [2.7770488262176514, -4.863986968994141], + [0.9468324780464172, -4.519773006439209], + [-4.795843601226807, 5.680441856384277], + [-0.22411149740219116, 9.875951766967773], + [-4.012669086456299, -3.6845803260803223], + [-6.967623233795166, 8.476646423339844], + [-2.246112108230591, 1.8018485307693481], + [-0.6290690302848816, -0.47162458300590515], + [-4.694606781005859, -3.0183818340301514], + [-6.83762788772583, -1.5588481426239014], + [-0.672275722026825, -2.6485087871551514], + [-0.2021579146385193, 10.293621063232422], + [-3.8433949947357178, -4.829807281494141], + [1.7943029403686523, 5.374671459197998], + [-5.155813694000244, 0.8070693612098694], + [-2.168592929840088, 1.2969763278961182], + [-7.008354663848877, -1.9935334920883179], + [-5.809167861938477, -3.795745372772217], + [7.401106834411621, -2.5610668659210205], + [3.1197898387908936, -5.194145202636719], + [-8.411330223083496, -0.8498778343200684], + [-2.418052911758423, 2.11210560798645], + [7.473041534423828, -2.9279122352600098], + [-3.244863986968994, 5.488032341003418], + [1.5239067077636719, -4.775491714477539], + [-4.683510780334473, 5.542456150054932], + [-5.502587795257568, -3.9649364948272705], + [6.09736967086792, -1.667315125465393], + [2.0867888927459717, -4.556709289550781], + [1.4857592582702637, 5.484400272369385], + [6.3685150146484375, -1.2486628293991089], + [-2.407862663269043, -3.6171724796295166], + [-2.5517523288726807, -2.5612096786499023], + [-3.1861143112182617, 3.9529178142547607], + [-5.968456745147705, 4.538839817047119], + [-4.782866954803467, -4.357646465301514], + [2.5747928619384766, 6.170783042907715], + [-6.84502649307251, -1.0091403722763062], + [-5.90579080581665, 2.0642282962799072], + [-4.7370452880859375, 4.866480350494385], + [8.46895694732666, -2.7934093475341797], + [-3.169278860092163, -2.708277702331543], + [-4.430360794067383, -4.394230842590332], + [1.3078020811080933, -7.1785807609558105], + [-4.594069957733154, 4.522628307342529], + [2.400036096572876, -3.599334716796875], + [2.7364871501922607, -4.428796291351318], + [-4.4937310218811035, -1.4667550325393677], + [-0.14496123790740967, 9.999263763427734], + [2.9290552139282227, -4.414923191070557], + [-0.3644423484802246, -0.06595972180366516], + [-0.1559275984764099, 9.606431007385254], + [4.732930660247803, -0.7972508072853088], + [1.962193250656128, -3.5448129177093506], + [1.0967669486999512, 5.620350360870361], + [-0.05478725582361221, -0.46056851744651794], + [-0.8336188793182373, 8.606979370117188], + [-0.015098638832569122, 9.591482162475586], + [9.17124080657959, -2.5993545055389404], + [-6.220777988433838, -1.9546445608139038], + [-1.8578357696533203, 1.0396021604537964], + [-6.753724575042725, 8.819244384765625], + [4.637301445007324, -4.9779181480407715], + [2.8347842693328857, -4.500014305114746], + [3.1415300369262695, -4.767661094665527], + [-5.0759711265563965, -2.4835028648376465], + [9.161985397338867, -2.6849873065948486], + [2.2429542541503906, -5.700845718383789], + [-2.3246419429779053, 0.545029878616333], + [-3.0935513973236084, -2.609909772872925], + [-6.268555164337158, -2.352924108505249], + [2.961590051651001, -4.801706314086914], + [-4.080748081207275, 8.272375106811523], + [-2.9205634593963623, 1.7085174322128296], + [0.6864785552024841, -3.9140965938568115], + [-4.136369228363037, -0.15137499570846558], + [-2.190463066101074, 2.9362285137176514], + [-3.4095394611358643, -1.0041930675506592], + [8.67495059967041, -2.3779430389404297], + [-5.1760663986206055, 6.4564666748046875], + [-2.3678877353668213, 2.3863685131073], + [2.307481050491333, 5.93772029876709], + [-3.472648859024048, 7.250699996948242], + [-4.665143966674805, -3.145988941192627], + [1.6542201042175293, 4.278977394104004], + [-4.258673191070557, -4.903165817260742], + [-5.748398303985596, -2.5505483150482178], + [1.7980215549468994, 0.5784745812416077], + [3.330454111099243, -5.2074127197265625], + [1.3936131000518799, -6.488587856292725], + [2.622972011566162, 5.706826686859131], + [1.6309047937393188, 0.002816956490278244], + [-2.873434543609619, -2.368487596511841], + [-2.329556941986084, 1.1669588088989258], + [-3.54903244972229, -4.739377498626709], + [-4.812419891357422, -3.1514370441436768], + [0.019431360065937042, -0.9998323917388916], + [-5.051440715789795, -3.4877543449401855], + [-4.3065409660339355, -2.9785754680633545], + [-0.014490790665149689, 8.776477813720703], + [7.520806789398193, -1.8202320337295532], + [2.937804937362671, -4.5313615798950195], + [1.881115198135376, -3.3067424297332764], + [1.7182104587554932, 1.9574874639511108], + [1.6415894031524658, 1.168324589729309], + [2.1475069522857666, 0.6223646402359009], + [-1.7456891536712646, 0.12033495306968689], + [-5.123939037322998, -0.4765838384628296], + [-6.04121732711792, 7.402530670166016], + [-3.118288040161133, -1.3266171216964722], + [-2.3459064960479736, 1.3385893106460571], + [-0.7002420425415039, 9.93163776397705], + [-4.521028995513916, 4.982914447784424], + [-1.4617620706558228, -2.0024807453155518], + [-7.8313469886779785, -1.7362024784088135], + [-2.2627530097961426, 0.5342445373535156], + [-5.1719770431518555, 2.5946996212005615], + [1.899418592453003, -9.36284351348877], + [9.024063110351562, -2.5395214557647705], + [5.8327813148498535, -1.4858747720718384], + [1.546138048171997, 0.10845398902893066], + [-4.892138957977295, 3.561652421951294], + [-6.012581825256348, 6.138920783996582], + [-2.5172746181488037, 1.3360157012939453], + [-4.437180995941162, 6.187972068786621], + [2.197334051132202, -3.5305144786834717], + [-5.3303446769714355, 6.842282295227051], + [-5.632328510284424, -3.489758014678955], + [2.27018141746521, 0.7756409645080566], + [-7.728473663330078, -2.030285358428955], + [-0.022441096603870392, 10.2073335647583], + [-5.637221336364746, 4.225963115692139], + [-2.8195343017578125, -4.321376800537109], + [-3.5648603439331055, 6.035068035125732], + [-2.469952344894409, 1.4719778299331665], + [-5.133608341217041, -3.125478982925415], + [-2.0726332664489746, -0.3954789638519287], + [-2.7062032222747803, -0.9471513032913208], + [9.072907447814941, -2.6941304206848145], + [2.5976758003234863, -3.3840630054473877], + [-0.6430994272232056, 8.659112930297852], + [2.166614294052124, -10.331138610839844], + [2.237083673477173, -5.42018461227417], + [-2.308621883392334, 3.0677990913391113], + [10.288581848144531, -2.8375303745269775], + [-6.499457836151123, 8.27239990234375], + [-6.344673156738281, 1.809237003326416], + [-1.0634795427322388, -0.8995948433876038], + [6.660556793212891, -2.9261581897735596], + [-3.4698944091796875, -2.755725145339966], + [-6.588727951049805, 8.22180461883545], + [-5.780907154083252, 5.328242778778076], + [-4.910641193389893, -2.548670530319214], + [-2.1310365200042725, 0.4123995006084442], + [-3.748706579208374, -2.8327443599700928], + [-5.629065990447998, 1.777936339378357], + [2.4984264373779297, -3.613490104675293], + [-2.4245054721832275, 2.061816930770874], + [2.811349391937256, -4.6628923416137695], + [0.5395037531852722, 5.344329357147217], + [8.01270866394043, -2.1605007648468018], + [3.0714094638824463, -4.613383769989014], + [-6.150897026062012, 7.079348087310791], + [3.0661280155181885, 6.056373596191406], + [1.1903927326202393, 0.10686041414737701], + [0.02602093666791916, 4.816188335418701], + [2.969982624053955, -4.47093391418457], + [2.332768440246582, -3.948749303817749], + [-1.9564838409423828, 6.261740207672119], + [3.5178139209747314, 1.2518718242645264], + [-0.8308486342430115, -0.7156202793121338], + [-0.2683616280555725, 9.777252197265625], + [-4.040735244750977, 0.927695095539093], + [-3.9381463527679443, 7.464426517486572], + [0.6739442944526672, -0.6991206407546997], + [0.4424096345901489, -0.8513350486755371], + [-2.938105583190918, -3.36734938621521], + [-2.774620294570923, 5.693028926849365], + [2.2032172679901123, 0.9954227209091187], + [-0.7741594314575195, 8.869791984558105], + [2.463981866836548, 5.486268520355225], + [2.921013116836548, -4.539873123168945], + [6.936011791229248, -1.6895339488983154], + [0.5368806719779968, -6.46669864654541], + [-0.4535854458808899, 9.477709770202637], + [-5.150447368621826, -3.060818910598755], + [-0.36083298921585083, 8.910539627075195], + [-5.991348743438721, 5.899991035461426], + [-4.217616558074951, 6.381731033325195], + [2.5496366024017334, -4.147600173950195], + [0.08336698263883591, 8.581670761108398], + [-3.106564521789551, 1.6784992218017578], + [-7.036610126495361, 2.2004501819610596], + [-5.807810306549072, 7.853407859802246], + [-0.6282419562339783, 9.745810508728027], + [-0.7747910022735596, -0.5847166180610657], + [-3.6573822498321533, -2.5992887020111084], + [-2.2520530223846436, 2.0950748920440674], + [-2.781723737716675, 2.8346786499023438], + [1.7200387716293335, 4.992640495300293], + [-2.5106866359710693, 1.9749163389205933], + [2.2238378524780273, -2.5815787315368652], + [-1.2592136859893799, -2.4764630794525146], + [7.980599880218506, -2.31632137298584], + [-5.990262031555176, 8.414066314697266], + [2.766181707382202, -4.538712501525879], + [-0.2499590516090393, 10.01727294921875], + [3.115697145462036, -4.67116117477417], + [1.8393433094024658, 5.087623596191406], + [-0.6692607998847961, 9.905372619628906], + [-5.313598155975342, -3.363415002822876], + [2.699270486831665, -4.221026420593262], + [2.7210428714752197, -6.508398056030273], + [-0.3682606816291809, 9.999948501586914], + [-7.548332691192627, 9.155078887939453], + [5.428560256958008, -0.8322691917419434], + [-3.7500813007354736, -3.9952824115753174], + [-4.396844387054443, 5.304376602172852], + [3.301140069961548, -4.944993019104004], + [-4.207373142242432, -3.7126238346099854], + [6.57111120223999, -1.6677204370498657], + [-6.500759124755859, 8.00318431854248], + [1.2807494401931763, -5.53712797164917], + [-4.973018646240234, 6.38449764251709], + [2.678189754486084, 5.720473766326904], + [-0.3940882086753845, 10.894510269165039], + [3.0005240440368652, -4.503746032714844], + [6.247903823852539, -1.2410317659378052], + [-6.0593037605285645, 7.8882856369018555], + [-4.765598297119141, -1.2564457654953003], + [7.6131510734558105, -1.8792424201965332], + [-4.458545684814453, -5.198826789855957], + [-2.4012529850006104, 2.430300235748291], + [7.0198798179626465, -4.958182334899902], + [1.2286417484283447, -6.129087448120117], + [-0.683890163898468, 9.884387016296387], + [2.0110208988189697, -4.198049068450928], + [9.064204216003418, -2.59151291847229], + [-0.6509853601455688, -0.7675761580467224], + [-0.0781678631901741, 10.080928802490234], + [-6.561066150665283, 7.935187816619873], + [3.9143404960632324, 6.897392272949219], + [-6.452948570251465, 7.522480010986328], + [-4.735847473144531, -3.344994306564331], + [2.2971413135528564, -5.03941535949707], + [-2.0436699390411377, 0.05094772204756737], + [-5.203658580780029, 6.52826452255249], + [-0.3169635534286499, 10.583499908447266], + [5.751081943511963, -2.6326911449432373], + [-5.893679141998291, 7.011992454528809], + [1.190190076828003, -0.2970809042453766], + [0.2775961756706238, 5.294093608856201], + [8.29889965057373, -2.381863832473755], + [-2.3708693981170654, 4.2682929039001465], + [-6.571864604949951, 1.4089716672897339], + [-8.695859909057617, -0.8938465118408203], + [-5.764309883117676, 3.861804485321045], + [2.048969268798828, -5.631102085113525], + [-6.351155757904053, 3.4459033012390137], + [-7.997697353363037, -0.6398849487304688], + [-5.708227634429932, 6.1726202964782715], + [-1.4939467906951904, -0.6941567659378052], + [5.653236389160156, -0.9936833381652832], + [-2.3587875366210938, 2.3358190059661865], + [-3.9104278087615967, -1.5379679203033447], + [1.3729832172393799, 1.6590625047683716], + [-2.854031801223755, -4.209366321563721], + [-4.125001907348633, -5.983272552490234], + [-5.795485973358154, 5.892087936401367], + [3.0763113498687744, -4.372270584106445], + [-6.833202838897705, 8.367796897888184], + [-4.909051895141602, 5.037701606750488], + [-5.334691047668457, 1.9394676685333252], + [-5.154994010925293, -2.539529800415039], + [-2.557385206222534, 2.3296422958374023], + [-0.480444073677063, 5.883455276489258], + [-7.492051601409912, -0.9332858324050903], + [-5.400290012359619, -0.6795202493667603], + [-5.966541290283203, 8.07303524017334], + [-3.1698696613311768, -1.2240744829177856], + [1.1888489723205566, -5.844963073730469], + [0.08990118652582169, -1.2387944459915161], + [-2.695662260055542, -2.5168280601501465], + [2.1573657989501953, -6.119524002075195], + [6.750706195831299, -5.550736427307129], + [2.317659616470337, 5.413692474365234], + [3.4649479389190674, 6.372637748718262], + [-4.9339375495910645, -2.8047657012939453], + [7.692617893218994, -1.7138358354568481], + [8.518928527832031, -2.273293972015381], + [-2.746758222579956, 1.125362753868103], + [-5.168590068817139, 8.148775100708008], + [-5.513309955596924, 3.5082151889801025], + [2.3354947566986084, -7.734853744506836], + [3.4779114723205566, 6.1884050369262695], + [-5.336151123046875, -3.1696975231170654], + [-5.53812313079834, -2.8752634525299072], + [-5.705885410308838, -2.85827374458313], + [-6.139675617218018, 4.1941304206848145], + [-0.3438628315925598, 11.058700561523438], + [-3.8157103061676025, -3.633161783218384], + [5.467894077301025, -1.6140812635421753], + [0.39057719707489014, 8.39863395690918], + [-4.686336994171143, -2.9935436248779297], + [1.873745322227478, -3.133573532104492], + [6.406234264373779, -2.0006954669952393], + [4.938286781311035, -3.660046339035034], + [-4.034610748291016, 0.8759969472885132], + [-4.919290542602539, -2.81199049949646], + [-7.155908107757568, 8.91248893737793], + [-4.755829811096191, -4.049160957336426], + [-2.306096315383911, 0.08415961265563965], + [-2.638678550720215, 2.8396124839782715], + [0.9934126734733582, 6.876825332641602], + [2.2187228202819824, -3.3239376544952393], + [-1.360377550125122, 1.6013133525848389], + [-1.8174506425857544, 4.770290374755859], + [2.915879964828491, -4.369562149047852], + [-2.3626463413238525, 2.2030911445617676], + [3.6883842945098877, 6.932208061218262], + [8.147441864013672, -2.1265175342559814], + [-3.7750890254974365, -1.6481940746307373], + [-6.35606050491333, -1.0288220643997192], + [-2.5425148010253906, -3.1265640258789062], + [-2.568537473678589, 1.3947988748550415], + [9.130472183227539, -2.422442674636841], + [2.4083921909332275, -3.69496488571167], + [-4.743448734283447, -3.1524689197540283], + [-6.448912143707275, 1.778188943862915], + [4.771949291229248, 6.814108371734619], + [5.87410831451416, -1.244972825050354], + [-6.368496417999268, 7.632608413696289], + [-3.9470643997192383, 4.174992561340332], + [8.729293823242188, -2.4139492511749268], + [-4.960586071014404, 2.031888008117676], + [1.0009920597076416, -6.52052116394043], + [5.666100025177002, 7.653813362121582], + [-2.475238561630249, 2.1585023403167725], + [-1.1010257005691528, -3.569143295288086], + [-4.793055534362793, 5.4500579833984375], + [8.472100257873535, -2.1880552768707275], + [-2.870703935623169, -3.0273635387420654], + [2.9617645740509033, -4.717428207397461], + [1.290407657623291, -7.200006008148193], + [-6.433461666107178, 7.943624496459961], + [-5.6383280754089355, -2.6512906551361084], + [3.0251736640930176, -4.731122016906738], + [-5.74854850769043, 4.345620155334473], + [-2.2875783443450928, 2.0316712856292725], + [-0.30197709798812866, 10.47285270690918], + [-5.07965612411499, 2.868954658508301], + [-5.4541497230529785, -2.469522714614868], + [-4.877906322479248, -3.4114749431610107], + [-4.13975191116333, 7.014509677886963], + [-5.484533309936523, -3.309119939804077], + [-5.046492099761963, -0.9073483943939209], + [-5.58591890335083, 6.735630989074707], + [3.334193468093872, -3.8935775756835938], + [-3.4839119911193848, -1.9817341566085815], + [-6.714624881744385, 8.081117630004883], + [2.4890835285186768, -4.315385341644287], + [4.641984939575195, 7.493222236633301], + [8.396240234375, -2.2180283069610596], + [3.349457263946533, 6.405233860015869], + [-2.373260736465454, -1.0764020681381226], + [2.4409258365631104, -5.3100504875183105], + [5.193688869476318, -1.5665289163589478], + [-5.354362964630127, -3.101142644882202], + [8.75019359588623, -2.4113709926605225], + [-0.1567055583000183, -1.6074001789093018], + [-3.1283769607543945, 6.619380950927734], + [-4.5215044021606445, 4.367847442626953], + [-2.0606753826141357, 1.6573946475982666], + [-3.0315349102020264, 6.215874195098877], + [-3.4398491382598877, 5.959024429321289], + [2.198622465133667, 4.721612930297852], + [4.964909076690674, 7.3379058837890625], + [-0.3266677260398865, 9.922649383544922], + [2.904653787612915, -4.461881160736084], + [1.7289601564407349, -7.668023586273193], + [-2.9509384632110596, 3.1313726902008057], + [2.926567316055298, -4.46470832824707], + [-2.3592283725738525, 0.5216347575187683], + [1.8403878211975098, 5.464173793792725], + [3.0635108947753906, -4.595359802246094], + [-5.806211948394775, -2.664813280105591], + [-4.231882095336914, -1.3578070402145386], + [3.412201404571533, 6.1415934562683105], + [-4.471340656280518, -1.9332715272903442], + [2.6477200984954834, 1.1822744607925415], + [-2.383713960647583, 0.6335858106613159], + [6.809421062469482, -1.3796554803848267], + [-7.94098424911499, -1.0571587085723877], + [-2.405216932296753, 1.1093333959579468], + [-0.2671744227409363, 9.46702766418457], + [0.6362867951393127, 4.754432678222656], + [-0.09821075946092606, 9.11463737487793], + [5.9568610191345215, -2.1029632091522217], + [1.6007664203643799, 5.273261070251465], + [-0.6354734301567078, 5.113739967346191], + [2.3590943813323975, 0.6057173013687134], + [8.945456504821777, -2.499577045440674], + [-2.7461721897125244, 1.759621024131775], + [0.22217482328414917, -0.6848101019859314], + [-3.559934377670288, -1.5369720458984375], + [-2.6667020320892334, -0.5151920318603516], + [-2.9885315895080566, 6.235797882080078], + [-4.4567551612854, 0.13211297988891602], + [-2.3272690773010254, 2.1508772373199463], + [-4.277594566345215, -2.40596866607666], + [1.4178634881973267, 6.028094291687012], + [2.675614595413208, 5.91691780090332], + [-5.060710430145264, 6.274867534637451], + [1.7081332206726074, 4.899809837341309], + [-2.4738972187042236, 1.6335234642028809], + [-5.505923748016357, -0.5916678309440613], + [-3.8643901348114014, 1.3362962007522583], + [10.01154899597168, -2.784372091293335], + [-7.859587669372559, -1.5185762643814087], + [-4.501931667327881, -1.904377818107605], + [3.9320642948150635, -1.0557812452316284], + [-3.940783739089966, -0.8967336416244507], + [-6.0679240226745605, -2.0622193813323975], + [2.3629581928253174, 0.4789777994155884], + [-3.8964078426361084, -3.0451838970184326], + [-2.597430467605591, -0.9800490736961365], + [-3.8510076999664307, -2.3397252559661865], + [4.991969585418701, -1.1313786506652832], + [1.7303357124328613, 5.388416290283203], + [-1.0691683292388916, -0.5281357765197754], + [-5.185373783111572, 6.06594705581665], + [8.722880363464355, -2.3989479541778564], + [-2.4301533699035645, 1.5511176586151123], + [-2.1266062259674072, 2.0588951110839844], + [-2.2578792572021484, 2.7772672176361084], + [-0.37864047288894653, 11.321130752563477], + [-3.5139591693878174, -1.3216303586959839], + [1.362241268157959, -8.334352493286133], + [-2.7715041637420654, -2.9710686206817627], + [8.35981559753418, -2.2898101806640625], + [-4.756073474884033, 5.653881072998047], + [-5.557956218719482, 1.9983543157577515], + [2.2560079097747803, 3.286797285079956], + [-7.983232021331787, -0.6481095552444458], + [2.1045820713043213, 1.0299348831176758], + [-6.060456275939941, 2.2657017707824707], + [2.7261674404144287, -4.119681358337402], + [-6.115670680999756, 7.141731262207031], + [1.6582657098770142, -7.012006759643555], + [-0.20945364236831665, 9.657588958740234], + [2.50419020652771, -7.270213603973389], + [-3.9342563152313232, -3.18192458152771], + [-2.203538656234741, 1.1726821660995483], + [-2.044668674468994, -0.9577355980873108], + [4.6743597984313965, -0.6523194313049316], + [-1.909201979637146, 0.8158752918243408], + [-3.781371831893921, -2.7502658367156982], + [-4.1827239990234375, -0.22205966711044312], + [7.180030345916748, -1.696663737297058], + [0.891888439655304, 0.6647409200668335], + [4.750723361968994, -0.726175844669342], + [-5.2932963371276855, 6.226762771606445], + [-4.5786213874816895, -3.125732660293579], + [2.4657351970672607, -4.469350814819336], + [-6.527227878570557, -2.3072757720947266], + [-5.575802326202393, -3.289332866668701], + [-4.839492321014404, -2.3347084522247314], + [-2.6601293087005615, 2.4346935749053955], + [-5.025848865509033, -4.318549156188965], + [0.48057007789611816, -1.1726080179214478], + [-4.780449390411377, 1.9913994073867798], + [-1.552682638168335, 0.868297815322876], + [1.3517484664916992, -7.159979820251465], + [-6.50097131729126, -1.3516610860824585], + [0.2519319951534271, 0.1985243707895279], + [-8.09814739227295, 9.841400146484375], + [7.565471172332764, -2.887789011001587], + [7.954002857208252, -2.366196870803833], + [-6.815816402435303, 8.336889266967773], + [0.07538735121488571, 3.6777024269104004], + [-6.2120256423950195, -0.784106969833374], + [-0.137211412191391, -0.6496798992156982], + [1.8072803020477295, -6.752224445343018], + [-2.9382171630859375, 0.5913650989532471], + [-4.174770355224609, 5.627730846405029], + [6.57860803604126, -2.5540006160736084], + [-0.21341413259506226, 9.959904670715332], + [-4.930222988128662, 4.90618896484375], + [1.155144453048706, -6.204259872436523], + [-4.905599117279053, -1.7566982507705688], + [-6.747622013092041, 8.680994033813477], + [-5.814163684844971, -2.701909303665161], + [-2.476267099380493, 0.9539122581481934], + [-5.000380516052246, 6.47081184387207], + [9.285613059997559, -2.467514753341675], + [0.469839870929718, -0.5738340616226196], + [2.812451124191284, -4.255368232727051], + [-0.26665228605270386, 10.78929615020752], + [2.8727974891662598, 5.773466110229492], + [3.072314739227295, -4.619082450866699], + [-2.576582670211792, 0.13065040111541748], + [-4.981445789337158, -3.1553242206573486], + [-2.4890620708465576, 1.093034267425537], + [-6.619294166564941, 8.45030403137207], + [-6.984109401702881, -1.8815068006515503], + [-4.65522575378418, 5.652520179748535], + [9.099027633666992, -2.563542604446411], + [-0.7209404706954956, 9.257148742675781], + [1.8138868808746338, -6.409420967102051], + [2.748403787612915, -4.602047443389893], + [-5.71373987197876, 2.6191320419311523], + [-4.459598064422607, -2.152418375015259], + [-5.102066516876221, -3.1121482849121094], + [-4.734135150909424, 5.222414016723633], + [2.5517938137054443, 4.814621925354004], + [9.439894676208496, -2.5004615783691406], + [-3.319133996963501, -2.1481926441192627], + [0.5787995457649231, -0.8713735342025757], + [0.16343164443969727, 10.141702651977539], + [-2.6916520595550537, -1.6859887838363647], + [1.6320669651031494, 5.417028427124023], + [-5.183659553527832, -3.2172930240631104], + [5.258904933929443, -1.8533235788345337], + [5.681250095367432, -1.187743902206421], + [2.0938844680786133, 2.586174249649048], + [0.8546088337898254, -0.32605886459350586], + [1.045246958732605, -6.3437700271606445], + [-5.035722255706787, -2.20141863822937], + [4.313318252563477, 7.21892786026001], + [-3.9687976837158203, -2.2292466163635254], + [-1.1775163412094116, 10.4688720703125], + [-5.218823432922363, 7.191730499267578], + [9.670098304748535, -2.694265127182007], + [2.1038761138916016, -3.805304527282715], + [-5.889036655426025, 6.700718879699707], + [-4.327988147735596, 6.565680503845215], + [-4.573344707489014, 3.2194440364837646], + [-5.122974872589111, -3.334460973739624], + [-7.267381191253662, 8.817024230957031], + [8.882655143737793, -2.497138023376465], + [5.385866641998291, -1.1061185598373413], + [-3.5520431995391846, -1.4519762992858887], + [-4.628934383392334, -2.7289557456970215], + [-2.1603617668151855, 2.4052398204803467], + [7.631084442138672, -2.5487568378448486], + [-3.8466989994049072, -2.032482862472534], + [-4.501184463500977, -0.9557695388793945], + [0.8339440822601318, 0.7965813875198364], + [-2.857961893081665, -2.906036853790283], + [-3.4628384113311768, 4.792025566101074], + [7.192845821380615, -2.108830213546753], + [-3.295974016189575, -2.6599419116973877], + [-6.795329570770264, -2.0879228115081787], + [3.013646364212036, 5.009932041168213], + [-5.189759731292725, -3.4950742721557617], + [-0.5823196172714233, 5.462327480316162], + [6.359461307525635, -3.2434654235839844], + [-3.3201839923858643, 2.3931026458740234], + [2.245304822921753, -2.987661600112915], + [-5.1461405754089355, 2.5754165649414062], + [-3.826394557952881, 4.542422294616699], + [-4.743165493011475, -1.8053985834121704], + [1.026961326599121, 4.766683578491211], + [-5.819790363311768, -0.40093106031417847], + [-4.588418006896973, -3.5361297130584717], + [-1.8222577571868896, 4.89044189453125], + [2.12876296043396, 5.8528242111206055], + [1.719628095626831, 5.264122486114502], + [-4.23068380355835, -1.9613044261932373], + [-5.151123046875, -2.863492250442505], + [-2.3133678436279297, 2.667635679244995], + [1.691518783569336, -5.592490196228027], + [3.0445992946624756, -4.642136573791504], + [-4.930968284606934, 4.110925197601318], + [2.3210668563842773, -4.07082462310791], + [1.1493358612060547, -7.452915191650391], + [3.007405996322632, -4.771872520446777], + [-6.089518070220947, -3.01705265045166], + [-5.595087051391602, 8.260684967041016], + [7.354427814483643, -2.5037500858306885], + [-1.5409786701202393, 1.95541250705719], + [-5.702460765838623, -2.754692316055298], + [-4.93002462387085, -2.3470120429992676], + [-0.3025321364402771, 9.583688735961914], + [6.768054008483887, -2.3077144622802734], + [2.977842330932617, -4.528041839599609], + [-5.00137186050415, 3.4760289192199707], + [5.269355297088623, -1.4579697847366333], + [-6.517618179321289, 8.271734237670898], + [-7.066138744354248, 8.981668472290039], + [-5.505580902099609, 1.0582361221313477], + [-5.486255168914795, 7.743409156799316], + [-4.541752338409424, -2.970707416534424], + [0.5290769338607788, -5.944785118103027], + [-5.948709964752197, 8.125322341918945], + [3.004016399383545, -4.52803897857666], + [-3.2791078090667725, 2.7463903427124023], + [0.03863551467657089, -0.06764844059944153], + [9.558056831359863, -2.662313222885132], + [7.099239826202393, -1.6847338676452637], + [-5.2963433265686035, -1.884891390800476], + [-5.289612293243408, -2.052555799484253], + [-5.63079309463501, 4.180030345916748], + [2.9862306118011475, -4.76076602935791], + [-5.413764476776123, -1.5811033248901367], + [-3.008951187133789, 2.577951192855835], + [-2.035048246383667, 1.8616430759429932], + [3.747218132019043, 6.604580402374268], + [-0.29559439420700073, 9.79677963256836], + [7.309553146362305, -1.817787528038025], + [-0.6607750058174133, 9.141965866088867], + [2.3725593090057373, -3.382420301437378], + [-3.987579822540283, 4.760409832000732], + [-3.1946349143981934, -1.8775733709335327], + [-4.90057897567749, 1.608972430229187], + [6.194030284881592, -1.1997442245483398], + [-0.1872156262397766, 9.846789360046387], + [-2.408864974975586, 1.4176924228668213], + [-4.2356085777282715, 4.543050765991211], + [-4.729426383972168, -2.3279244899749756], + [0.9082317352294922, 0.5969066619873047], + [0.5976857542991638, 7.293492317199707], + [5.226029872894287, -3.2974841594696045], + [-5.024198532104492, 6.274083614349365], + [-5.264585018157959, -2.540886640548706], + [-4.705765247344971, 2.3968944549560547], + [-4.419271469116211, 0.43537405133247375], + [-2.5852420330047607, 2.3041837215423584], + [-4.904510498046875, -3.277251958847046], + [6.109597682952881, 8.386329650878906], + [-0.3765161633491516, 9.992206573486328], + [-2.1058671474456787, 0.8056208491325378], + [-3.02729868888855, -2.510087251663208], + [-4.952151775360107, -1.2344377040863037], + [4.499095916748047, -1.779825210571289], + [-5.94512414932251, -1.6489671468734741], + [-4.549257278442383, 2.441162109375], + [7.649555683135986, -1.9499763250350952], + [-1.9083679914474487, -1.806808352470398], + [2.07011342048645, -9.882756233215332], + [-6.069515705108643, -2.888174533843994], + [-0.35286587476730347, 10.870098114013672], + [-5.332371711730957, 7.543735980987549], + [5.451446056365967, -1.6501643657684326], + [1.1033445596694946, -5.48542594909668], + [-2.475398540496826, -1.1319794654846191], + [-6.532519817352295, -0.5678328275680542], + [-5.32764196395874, -3.2205116748809814], + [-3.9484622478485107, -0.22019612789154053], + [1.6273653507232666, 2.9871556758880615], + [-3.9660422801971436, -1.0474324226379395], + [-5.195080280303955, 1.6158636808395386], + [-1.9212441444396973, 0.07009470462799072], + [2.8888514041900635, -5.668279647827148], + [-2.8951659202575684, -2.4349205493927], + [-5.0045247077941895, -3.5270559787750244], + [-5.809053897857666, -2.7784762382507324], + [2.7504303455352783, -4.4624786376953125], + [3.0755577087402344, -4.7876200675964355], + [-2.092909812927246, 0.5989465713500977], + [-2.3014323711395264, 2.4767115116119385], + [-1.322332739830017, -0.6324818134307861], + [-2.1867992877960205, 2.414731025695801], + [2.39304256439209, -3.029985189437866], + [2.6688477993011475, -3.958343982696533], + [4.246335506439209, -4.158103942871094], + [5.895068168640137, -1.3617101907730103], + [-2.2238247394561768, 0.7693802118301392], + [2.968190908432007, -3.984011650085449], + [2.6120498180389404, -3.8902766704559326], + [-4.799020767211914, -2.0690433979034424], + [-4.320773601531982, -5.9279584884643555], + [7.5757222175598145, -2.6986782550811768], + [2.660198926925659, 6.038376808166504], + [-4.703347682952881, 4.830536842346191], + [-5.444021701812744, -3.507716178894043], + [-5.678859233856201, -2.8480606079101562], + [-4.124917507171631, 6.295849800109863], + [1.5443148612976074, 4.380218505859375], + [-3.8860223293304443, 4.18187141418457], + [-5.992490291595459, -0.18700647354125977], + [3.4568164348602295, -5.146322250366211], + [-5.808529853820801, 2.34706449508667], + [-3.93146014213562, 6.703686237335205], + [0.23217540979385376, 5.5892510414123535], + [7.634834289550781, -1.3086395263671875], + [5.0754876136779785, 7.073781490325928], + [3.2782602310180664, -6.110023021697998], + [1.8345097303390503, -9.109960556030273], + [-4.9958720207214355, 6.038142681121826], + [-2.1570963859558105, 0.3968137204647064], + [1.2737172842025757, 0.5664286613464355], + [-0.20867878198623657, 9.858290672302246], + [-2.861112117767334, -0.4038258194923401], + [-2.3482587337493896, 1.5779279470443726], + [1.3177849054336548, 5.03153133392334], + [-5.5091423988342285, -2.5106852054595947], + [-4.67893648147583, -2.945267915725708], + [4.842951774597168, -0.9202758073806763], + [-3.664102792739868, -1.2059136629104614], + [-2.7749216556549072, -4.244924068450928], + [-2.5357534885406494, 2.3379900455474854], + [2.3219921588897705, -3.9890072345733643], + [9.816472053527832, -2.72922682762146], + [-5.037696361541748, 3.608665704727173], + [-3.7346644401550293, -5.091741561889648], + [-6.112833499908447, -2.2311363220214844], + [-6.089967250823975, -1.7590458393096924], + [7.915548801422119, -2.2555010318756104], + [2.749673366546631, -4.252613067626953], + [10.119169235229492, -2.857384443283081], + [-2.851043701171875, 5.641866683959961], + [-6.071117877960205, 6.680135250091553], + [-2.906895875930786, -3.543515920639038], + [1.6801276206970215, -8.616886138916016], + [0.3541797995567322, -5.491391181945801], + [8.542075157165527, -2.531811237335205], + [8.716092109680176, -2.2993507385253906], + [-5.649827003479004, -1.039522409439087], + [5.945680618286133, -1.0897377729415894], + [4.351641654968262, 7.207677841186523], + [-0.5509272217750549, 9.776655197143555], + [1.1999847888946533, 5.4544148445129395], + [-4.351463794708252, -2.1754679679870605], + [-0.20477765798568726, 8.878429412841797], + [4.043753147125244, 6.658066749572754], + [-2.2149658203125, 2.598625898361206], + [-5.249811172485352, -2.536228895187378], + [-3.237370252609253, -3.7111992835998535], + [-0.28048229217529297, 9.585108757019043], + [-4.521368503570557, 1.5110516548156738], + [0.6575124263763428, -6.59450626373291], + [-8.073620796203613, 0.28364288806915283], + [0.10439258068799973, -0.20817825198173523], + [-4.554200649261475, 5.805482864379883], + [-2.464092493057251, 1.3631316423416138], + [10.151918411254883, -2.7379348278045654], + [1.312060832977295, 6.007916450500488], + [-4.607504367828369, -5.407624244689941], + [2.844102621078491, 1.171697974205017], + [3.054475784301758, -4.775811195373535], + [-6.868082523345947, 8.826712608337402], + [-4.803149700164795, -1.317736029624939], + [-5.367315769195557, -4.019255638122559], + [-3.8513600826263428, 6.6399455070495605], + [1.8271807432174683, 5.384847640991211], + [-5.806739807128906, -1.988216757774353], + [2.7477757930755615, -4.750818252563477], + [-1.5148981809616089, 1.775728702545166], + [2.020890474319458, -7.887580871582031], + [-5.482212066650391, 6.589623928070068], + [2.835657835006714, -4.267014026641846], + [-3.7670223712921143, -2.6693527698516846], + [-3.2028024196624756, -2.09977126121521], + [-4.092723369598389, -0.9182432889938354], + [6.533509731292725, -1.2280105352401733], + [-6.376626968383789, -1.3227187395095825], + [1.9143707752227783, -2.3209922313690186], + [-0.7418389916419983, 9.537460327148438], + [-1.277094841003418, 6.254286766052246], + [-1.1474570035934448, 9.53226089477539], + [-4.957953929901123, 4.015737056732178], + [-2.2201273441314697, 0.7568445801734924], + [-4.63723087310791, 5.749659538269043], + [1.7410311698913574, -2.945112466812134], + [0.7706904411315918, 0.2553105652332306], + [-5.844080448150635, -2.4912264347076416], + [-4.912527561187744, -4.296717166900635], + [-2.4973409175872803, 2.025200366973877], + [-6.880075931549072, 7.992003440856934], + [1.5935964584350586, -6.439769268035889], + [-2.199908494949341, -1.8567204475402832], + [-0.2182057499885559, 9.29833698272705], + [1.9616107940673828, -2.6710047721862793], + [-3.507330894470215, -1.9811385869979858], + [-2.9088034629821777, 6.1756591796875], + [-6.591042995452881, 7.857216835021973], + [-0.6110518574714661, 5.519534587860107], + [0.5645478367805481, 0.03728218004107475], + [-6.24734354019165, -2.14324951171875], + [5.192259311676025, 7.463837623596191], + [-5.296573162078857, 7.816046237945557], + [-0.03684014827013016, 9.71525764465332], + [-6.980792045593262, -2.0101158618927], + [-5.641026020050049, -2.539189577102661], + [-5.720874786376953, 1.4555751085281372], + [-3.5372331142425537, -1.6745517253875732], + [1.4890894889831543, -8.052499771118164], + [-6.5179595947265625, -1.9638617038726807], + [-6.4783616065979, 8.162399291992188], + [3.189086437225342, -4.851506233215332], + [-0.27459007501602173, 9.4725341796875], + [-4.4705681800842285, 2.901918888092041], + [2.311917781829834, 6.000005722045898], + [-1.4658972024917603, 1.7157542705535889], + [-0.2904292941093445, 10.083980560302734], + [-0.5506798624992371, 9.652115821838379], + [2.6556525230407715, -0.3227769136428833], + [6.061562538146973, -0.8953084945678711], + [0.3720088601112366, -0.48944544792175293], + [4.626521587371826, -5.7724127769470215], + [6.116086483001709, -4.262041091918945], + [-5.579197406768799, -1.7402989864349365], + [-0.7902269959449768, -1.1571816205978394], + [0.4379175305366516, 9.340078353881836], + [-7.68133020401001, -1.2202621698379517], + [-6.332190036773682, -0.8868911862373352], + [-3.481191873550415, 1.7461336851119995], + [1.9945402145385742, -8.602216720581055], + [2.6556503772735596, 6.007328033447266], + [-4.956040859222412, -3.5216825008392334], + [-4.887629985809326, -4.08158016204834], + [1.6182140111923218, 0.4103538691997528], + [-4.85513162612915, -1.4432748556137085], + [-4.4027252197265625, -2.052936315536499], + [9.339972496032715, -2.645184278488159], + [-2.0751380920410156, 2.436215400695801], + [-5.459722995758057, 5.322953701019287], + [2.0214107036590576, -5.250058174133301], + [3.886577844619751, 5.302425384521484], + [-5.182644367218018, -3.03963303565979], + [-0.16754484176635742, 9.380738258361816], + [-6.248683452606201, 8.468487739562988], + [-3.8224616050720215, -3.5300538539886475], + [-2.6464598178863525, 2.3069798946380615], + [2.3899333477020264, -4.2884111404418945], + [2.3758182525634766, -3.689220666885376], + [-3.860527276992798, -1.6069445610046387], + [-6.0235114097595215, 7.36128044128418], + [2.0824248790740967, -5.204059600830078], + [9.721880912780762, -2.7056915760040283], + [-0.4070001244544983, 11.978059768676758], + [-4.081740856170654, -2.6080315113067627], + [2.2370808124542236, 5.157886981964111], + [-3.7786617279052734, -3.777878761291504], + [2.4546406269073486, -5.792505264282227], + [5.905030727386475, -3.5142557621002197], + [2.1623497009277344, -10.36538028717041], + [-6.336878776550293, 3.5927371978759766], + [-6.149572849273682, -1.2467702627182007], + [-0.034692734479904175, -1.015350103378296], + [-0.5901394486427307, 9.24793815612793], + [9.41471004486084, -2.640610456466675], + [-5.03918981552124, 2.6900765895843506], + [-5.467106342315674, 2.574718952178955], + [-5.684279441833496, -2.1237261295318604], + [-1.363120436668396, -0.5471956729888916], + [-1.2611238956451416, 9.525921821594238], + [-2.8484842777252197, 5.984910488128662], + [-3.187824010848999, -1.6198464632034302], + [-6.056773662567139, 4.2995381355285645], + [2.4246537685394287, -5.7452287673950195], + [-2.8761377334594727, 5.555065155029297], + [-0.31703639030456543, 9.229510307312012], + [-6.749454021453857, 8.510160446166992], + [2.4472217559814453, -3.750389337539673], + [-2.27597975730896, 1.6628700494766235], + [-3.3295319080352783, -1.9747074842453003], + [-5.111341953277588, 0.8973174095153809], + [-0.40347546339035034, 9.533985137939453], + [-7.018828868865967, 8.897598266601562], + [-6.25669527053833, 3.010669469833374], + [-4.3929948806762695, -2.130572557449341], + [-1.3000248670578003, 7.110109329223633], + [0.14499878883361816, -0.9991840124130249], + [-6.775047779083252, 8.288460731506348], + [1.9381804466247559, 5.06959342956543], + [-7.562521457672119, 9.186445236206055], + [-5.967588424682617, 6.258899688720703], + [2.2634575366973877, 5.9104156494140625], + [-0.2519180178642273, 9.7816801071167], + [3.1730051040649414, 6.372862815856934], + [-5.01769495010376, 7.028959274291992], + [-6.185673236846924, 8.247044563293457], + [-0.6987848877906799, 0.9338769316673279], + [6.885672092437744, -1.5754942893981934], + [1.835235834121704, -7.50651216506958], + [1.7126843929290771, -8.216224670410156], + [-2.6025097370147705, 2.231848955154419], + [-4.568144798278809, -2.9065654277801514], + [-4.881552219390869, -2.7664754390716553], + [1.8260364532470703, -8.751107215881348], + [-2.4841837882995605, 1.8474971055984497], + [1.2600457668304443, -5.704291820526123], + [-4.7489094734191895, -2.6123924255371094], + [-2.6332666873931885, -2.8939309120178223], + [-2.245326042175293, 1.1600650548934937], + [3.1300461292266846, 5.201405048370361], + [2.664464235305786, -4.2063751220703125], + [1.1340723037719727, -6.453276634216309], + [-4.11274528503418, 5.69379186630249], + [-4.725657939910889, -4.018453598022461], + [-0.19065392017364502, 10.038347244262695], + [-0.554561972618103, 9.332199096679688], + [-0.38895487785339355, 9.295995712280273], + [1.0830812454223633, -0.5414843559265137], + [9.236517906188965, -2.589496374130249], + [-5.798536777496338, -2.3899338245391846], + [0.040898315608501434, -1.0443284511566162], + [-4.133978366851807, -1.6314762830734253], + [3.5284664630889893, 0.3055534362792969], + [3.6691489219665527, -3.6230294704437256], + [-2.3212883472442627, 0.7255460023880005], + [-0.10964582115411758, -0.5907042026519775], + [2.309458017349243, 4.950085163116455], + [5.267818450927734, -1.5254830121994019], + [1.860356330871582, -8.91083812713623], + [1.0624388456344604, -6.407678127288818], + [2.8220436573028564, -4.3440446853637695], + [-0.23544096946716309, 10.006277084350586], + [-4.929466724395752, -4.184762001037598], + [-4.371043682098389, 6.14192008972168], + [-0.46751105785369873, 10.753141403198242], + [-5.619348049163818, 4.235332012176514], + [-2.040259599685669, 2.6989219188690186], + [1.6886929273605347, -3.625917673110962], + [-2.8916728496551514, 0.44878822565078735], + [-5.78468656539917, 6.856626033782959], + [0.01785760372877121, 9.616673469543457], + [-5.377402305603027, -1.0347259044647217], + [1.9541959762573242, 3.311307668685913], + [6.071983814239502, -1.5000722408294678], + [-4.059318542480469, 6.223435878753662], + [9.010005950927734, -2.5103633403778076], + [0.18336385488510132, -0.44995468854904175], + [6.303167819976807, -3.9891998767852783], + [-5.628547191619873, -4.01263427734375], + [5.402907371520996, 7.493649005889893], + [-0.7634772658348083, 3.2546422481536865], + [-3.176408052444458, -2.487506151199341], + [-6.15388822555542, -0.9571416974067688], + [-5.352186679840088, 7.380657196044922], + [5.4152960777282715, -2.1167914867401123], + [0.5541819930076599, -0.7323970794677734], + [-1.7632386684417725, 2.4195916652679443], + [3.4430172443389893, 6.4891357421875], + [0.3541620373725891, 8.45783805847168], + [-4.235940933227539, -3.409790277481079], + [-5.524064064025879, -2.4988439083099365], + [-3.365624189376831, 3.4131596088409424], + [6.276974201202393, -2.0996739864349365], + [-4.878364086151123, -3.165825843811035], + [2.6179163455963135, -4.077628135681152], + [-4.118886947631836, -2.6642539501190186], + [-0.11613882333040237, 9.56022834777832], + [1.1763505935668945, 1.8537015914916992], + [5.163137912750244, 0.17979127168655396], + [-4.477187633514404, 5.459224224090576], + [-3.1544759273529053, 3.2184417247772217], + [-7.2482428550720215, -1.2283189296722412], + [3.044290065765381, -4.73306941986084], + [6.043692111968994, -3.214613437652588], + [3.0165774822235107, -4.555845260620117], + [2.4426002502441406, -2.083616256713867], + [2.9915592670440674, -4.7463297843933105], + [-5.058206081390381, 6.591184616088867], + [1.5825618505477905, 1.633022665977478], + [2.4082136154174805, -7.559122085571289], + [3.769552707672119, -1.7913399934768677], + [-4.077591419219971, 6.882093906402588], + [-4.853186130523682, 7.34721040725708], + [-1.9357283115386963, 2.0143136978149414], + [-4.884016990661621, 5.502106189727783], + [2.09324312210083, -6.433171272277832], + [3.245962381362915, -4.988305568695068], + [3.0460517406463623, -4.856719970703125], + [-2.224182367324829, 5.940937042236328], + [5.3732733726501465, -1.3430211544036865], + [-0.36743754148483276, 10.903823852539062], + [-2.735758066177368, -3.188105821609497], + [3.3961851596832275, -5.05639123916626], + [0.5368223190307617, -6.056643486022949], + [9.089524269104004, -2.620405435562134], + [-1.436760663986206, -0.659136176109314], + [-0.13759896159172058, -0.7238768339157104], + [-7.63151216506958, -1.3096942901611328], + [-7.878946304321289, -0.9139130115509033], + [-4.025539875030518, -2.1288700103759766], + [-5.864792346954346, 7.3189544677734375], + [-2.5455129146575928, 0.6425765752792358], + [-6.298399925231934, 7.745582103729248], + [5.71032190322876, -1.1564184427261353], + [-1.8886183500289917, 1.3825145959854126], + [2.7191877365112305, -4.574974060058594], + [0.059935204684734344, -0.8580964803695679], + [1.936629056930542, 2.471021890640259], + [2.355743646621704, 5.91156530380249], + [10.063519477844238, -2.7435805797576904], + [-5.412260055541992, -3.428725004196167], + [0.3505818545818329, -1.12527334690094], + [-0.33985739946365356, 10.245437622070312], + [-5.782271385192871, 8.563196182250977], + [-5.697286128997803, 2.249927282333374], + [2.264348268508911, 1.0829135179519653], + [-7.811663627624512, -1.3865091800689697], + [-3.6038968563079834, 7.498481273651123], + [-0.5317583680152893, -1.2096377611160278], + [7.6573805809021, -1.8956462144851685], + [-4.097440242767334, 5.758188247680664], + [-0.4318113923072815, 4.975293159484863], + [-0.6547476053237915, 8.929594039916992], + [-3.860139846801758, 7.120157241821289], + [-2.5211689472198486, 6.4273223876953125], + [-4.9759016036987305, 6.5821027755737305], + [3.936393976211548, -0.6611019968986511], + [-0.6921460032463074, 10.176445007324219], + [3.2130749225616455, -4.825620174407959], + [-3.037001848220825, -3.723311185836792], + [0.6745643615722656, -0.8558754324913025], + [-5.843418121337891, 4.430500030517578], + [-2.3000829219818115, 5.735664367675781], + [3.282554864883423, -4.900495529174805], + [2.3169338703155518, -6.876801490783691], + [1.2460782527923584, -8.272344589233398], + [-2.30157470703125, 0.9324241876602173], + [8.427071571350098, -2.219212055206299], + [3.0086140632629395, -4.5624284744262695], + [-8.121577262878418, -1.5127875804901123], + [-4.644995212554932, 6.800968170166016], + [-5.861011028289795, 4.161490440368652], + [-5.432034492492676, 1.1034572124481201], + [-4.340880393981934, -6.31774377822876], + [9.611998558044434, -2.6750681400299072], + [3.0494327545166016, -4.620398998260498], + [-4.400811672210693, -1.3208009004592896], + [8.348990440368652, -2.7103919982910156], + [-1.7103484869003296, 1.649181604385376], + [4.849348068237305, -0.9944827556610107], + [10.118624687194824, -2.801612138748169], + [3.5240559577941895, -3.270176649093628], + [2.2718217372894287, 0.7413493394851685], + [7.364197254180908, -1.1318849325180054], + [-4.665609836578369, -2.296067953109741], + [3.7115695476531982, -3.5107321739196777], + [2.652268409729004, -4.298000335693359], + [0.5869148373603821, -0.7177615165710449], + [-4.337247371673584, -2.5392284393310547], + [-0.7169564962387085, 7.848226070404053], + [-4.8471598625183105, 2.4727470874786377], + [-0.3527396321296692, 9.196105003356934], + [-1.7965975999832153, -0.46645134687423706], + [-3.129335641860962, -2.4847421646118164], + [2.3242013454437256, -7.671942234039307], + [-5.062044143676758, -2.8444011211395264], + [-4.798869609832764, -3.5129988193511963], + [-0.22004759311676025, 8.893680572509766], + [-0.41838914155960083, 10.997064590454102], + [-1.7981520891189575, 0.0022665224969387054], + [-4.978296756744385, -3.4829251766204834], + [-5.49315881729126, -1.0920019149780273], + [-7.330007076263428, 8.881051063537598], + [3.4704229831695557, -5.162343502044678], + [-3.7727394104003906, 6.57172966003418], + [-5.777768135070801, 6.262453556060791], + [-4.747351169586182, -2.1814467906951904], + [-2.2089056968688965, 0.6736277341842651], + [2.800326108932495, -4.2488908767700195], + [-2.428420305252075, 6.425309181213379], + [-6.575578212738037, 8.644033432006836], + [-4.238529205322266, -3.2119181156158447], + [6.324032306671143, -1.5454026460647583], + [1.507891297340393, 5.751170635223389], + [3.243448257446289, -2.656956911087036], + [-4.265119552612305, -2.9058163166046143], + [8.525348663330078, -2.5804660320281982], + [-5.020102024078369, 5.098149299621582], + [0.3656482398509979, -0.1394960880279541], + [-2.4312283992767334, 1.764947533607483], + [-5.487570285797119, -3.236557722091675], + [-5.188228130340576, 6.037092685699463], + [0.39491593837738037, -5.618710517883301], + [-4.029672622680664, -2.4113893508911133], + [-5.623025417327881, 5.931100845336914], + [-0.4461668133735657, 10.458696365356445], + [-6.437331199645996, -2.4561655521392822], + [-3.448026657104492, -1.505212426185608], + [-5.504086017608643, -2.249316453933716], + [-0.37422001361846924, 11.323293685913086], + [5.888294696807861, -3.376588821411133], + [-4.8293986320495605, 7.58640193939209], + [3.105618715286255, -4.733126640319824], + [5.319579124450684, -2.0041496753692627], + [-5.1745076179504395, -3.371426582336426], + [-2.404438018798828, 6.578290939331055], + [-0.38206666707992554, 12.042858123779297], + [8.960719108581543, -2.7403721809387207], + [-5.8772873878479, 1.9275639057159424], + [9.283853530883789, -2.3307840824127197], + [-4.2322678565979, -1.0617011785507202], + [1.672565221786499, 2.673558235168457], + [2.5154049396514893, -7.816900253295898], + [-0.27929383516311646, 9.313321113586426], + [1.126582384109497, -2.580925941467285], + [9.183955192565918, -2.542165756225586], + [2.773393392562866, -4.172130107879639], + [-5.3471808433532715, 4.546010494232178], + [-2.5880401134490967, -4.251834869384766], + [-4.709267616271973, -2.6372647285461426], + [9.328227043151855, -2.6626784801483154], + [-4.236812591552734, -2.612375259399414], + [1.1578099727630615, 0.8914978504180908], + [-8.656402587890625, -1.507989764213562], + [2.3678524494171143, -5.761003494262695], + [3.214237928390503, -4.803825378417969], + [-4.222404479980469, 3.4960670471191406], + [5.399743556976318, -0.8280263543128967], + [2.0064377784729004, 5.420759677886963], + [-2.7671725749969482, 2.352980613708496], + [-6.120789051055908, 7.805687427520752], + [-4.474495887756348, -1.7201718091964722], + [-4.569774150848389, -3.2425050735473633], + [-0.15144246816635132, 9.67685604095459], + [-6.235091209411621, 6.61104154586792], + [-8.618226051330566, -0.733523964881897], + [-0.5796830058097839, 11.714561462402344], + [2.5391573905944824, -3.9599223136901855], + [-5.1563873291015625, 8.129304885864258], + [8.571752548217773, -2.653716802597046], + [-0.022861190140247345, 10.308426856994629], + [8.535481452941895, -2.1380679607391357], + [7.322018146514893, -1.742175579071045], + [-2.415865659713745, -3.374333381652832], + [-2.4646356105804443, 6.709609508514404], + [-3.5784103870391846, -1.2894320487976074], + [-3.286503791809082, 6.403356552124023], + [-3.855809450149536, 5.463162422180176], + [-2.0627894401550293, -0.022656146436929703], + [-0.4493914842605591, 9.519155502319336], + [-3.7506103515625, 0.0006386004388332367], + [-4.365051746368408, -2.3162331581115723], + [2.841792106628418, -4.313630104064941], + [-2.663623332977295, 2.4615821838378906], + [-0.5050935745239258, 8.75354290008545], + [-4.861783504486084, -4.21537971496582], + [-3.466381311416626, -1.1718870401382446], + [2.066936731338501, 5.216471195220947], + [-0.0698656514286995, 10.046137809753418], + [-5.07525634765625, 5.4098100662231445], + [-4.912968158721924, -1.2558900117874146], + [1.5098191499710083, 5.808993339538574], + [-3.007453680038452, 5.488219738006592], + [-2.615755081176758, 2.105635404586792], + [-4.3290839195251465, 2.6901938915252686], + [-5.081050395965576, -3.165168523788452], + [-0.25959640741348267, 10.200766563415527], + [4.001383304595947, 6.569914817810059], + [2.7136433124542236, -4.191991806030273], + [5.0282697677612305, 7.363750457763672], + [0.4872363209724426, -0.8179280161857605], + [1.6984186172485352, -2.623772621154785], + [-2.686328649520874, -3.4533629417419434], + [-5.226968288421631, 2.56201434135437], + [8.273972511291504, -2.2698802947998047], + [-6.759529113769531, -1.7779546976089478], + [-7.891631603240967, 0.2284235954284668], + [-0.48570477962493896, -0.45693930983543396], + [8.491593360900879, -2.7327616214752197], + [-2.110226631164551, 2.8221096992492676], + [6.445767402648926, 8.026446342468262], + [-3.4254443645477295, -3.5577094554901123], + [5.168342113494873, -1.0200327634811401], + [-7.026227951049805, -0.6392025947570801], + [4.021181583404541, -4.872061252593994], + [-3.9845974445343018, -0.9924386739730835], + [-5.695690631866455, -0.653404951095581], + [-3.860504388809204, 5.838287353515625], + [2.704331159591675, -5.673661231994629], + [4.7631964683532715, -1.1869148015975952], + [1.652590036392212, 5.412075042724609], + [-5.5100789070129395, -0.6612290143966675], + [2.86487078666687, -4.326747894287109], + [-6.1611857414245605, -1.7950440645217896], + [0.11554776877164841, 0.4724959135055542], + [-3.86430025100708, -0.20170938968658447], + [5.886016368865967, -4.78453254699707], + [1.73856520652771, 5.379773139953613], + [6.70621919631958, -1.319623589515686], + [-2.567782402038574, 2.190420389175415], + [2.850126028060913, -4.631843090057373], + [-2.5026862621307373, -0.5600841641426086], + [-3.0408780574798584, -4.081733703613281], + [2.1339304447174072, 3.218263626098633], + [1.5121407508850098, 3.876979112625122], + [3.224181890487671, -8.205673217773438], + [-3.7151601314544678, -4.836663246154785], + [-4.573205947875977, 3.768089771270752], + [1.7685054540634155, -8.254166603088379], + [1.707966923713684, 2.435715675354004], + [-2.4760427474975586, 2.068251371383667], + [-5.36349630355835, -0.23301076889038086], + [-0.03578753024339676, 8.256078720092773], + [-4.953741550445557, 1.696116328239441], + [9.047369956970215, -2.4138243198394775], + [-8.05057430267334, -1.9167217016220093], + [-1.4593861103057861, 1.5905629396438599], + [-3.0173966884613037, -0.5620435476303101], + [-4.681365489959717, 2.1712448596954346], + [-3.661241054534912, 0.695903480052948], + [-4.063876152038574, 5.1947922706604], + [-4.352834224700928, 6.901913642883301], + [-1.749786615371704, -0.3572285771369934], + [1.409493088722229, -6.655091762542725], + [5.556416988372803, -1.0853196382522583], + [4.494716167449951, -1.4582557678222656], + [1.3915544748306274, 0.4497671127319336], + [1.2342875003814697, -6.391234397888184], + [2.091653347015381, -8.133550643920898], + [-6.642863750457764, 1.5746972560882568], + [-6.693647861480713, -1.622018575668335], + [9.280062675476074, -2.5534355640411377], + [1.653015375137329, 5.222550392150879], + [-5.054868698120117, -2.5086495876312256], + [-0.5409107208251953, -0.20699431002140045], + [-2.5318212509155273, 2.113703966140747], + [-4.387542247772217, -3.1312100887298584], + [1.8115156888961792, -3.1044201850891113], + [-2.2235023975372314, 2.2898943424224854], + [-6.906344413757324, -1.9935413599014282], + [-0.6810059547424316, 9.564817428588867], + [2.0573413372039795, -5.471994400024414], + [-0.06253106147050858, 9.095678329467773], + [2.1879005432128906, -7.60044002532959], + [1.9864466190338135, -8.96500015258789], + [-0.15916994214057922, -1.6664152145385742], + [-5.041568756103516, -0.5699359178543091], + [-0.10876242071390152, -0.8624025583267212], + [-1.7175253629684448, -2.009256362915039], + [2.8468010425567627, -4.228148460388184], + [-1.8605480194091797, -1.8074127435684204], + [-4.725762844085693, -2.6474781036376953], + [-3.955570936203003, -1.2018040418624878], + [-4.503384590148926, -1.9947625398635864], + [-0.14675408601760864, 8.80798053741455], + [-2.765521764755249, -0.9729361534118652], + [0.3335719108581543, -0.557570219039917], + [1.2611411809921265, -6.871734619140625], + [6.45044469833374, -1.4397037029266357], + [1.654455304145813, 4.865930557250977], + [-1.082288384437561, 9.67544174194336], + [-4.738925933837891, -1.8846460580825806], + [4.7505059242248535, -2.107218027114868], + [-3.5275323390960693, -2.212864875793457], + [0.3482298254966736, 0.13687455654144287], + [-0.04064119607210159, 5.434514045715332], + [-6.887167453765869, 8.4168701171875], + [-1.1881330013275146, -1.6681917905807495], + [2.8859143257141113, -4.52443790435791], + [-6.215259075164795, -1.873355746269226], + [-3.876185178756714, -1.5194928646087646], + [3.042032241821289, -4.7073564529418945], + [-4.074543476104736, -1.9622886180877686], + [-2.120328426361084, 0.726529598236084], + [-6.717353343963623, 8.102243423461914], + [-5.524660587310791, 3.7363648414611816], + [-5.675377368927002, 4.195128440856934], + [-2.753610372543335, -2.071422815322876], + [6.1732659339904785, -1.1400707960128784], + [0.630021870136261, -0.1377333700656891], + [1.142625331878662, -6.377727508544922], + [5.311996936798096, -1.1323689222335815], + [-5.642888069152832, 8.622154235839844], + [0.28027480840682983, 0.35992857813835144], + [2.8183112144470215, -4.319865703582764], + [2.214430809020996, -3.310424327850342], + [-2.9851579666137695, -2.4437742233276367], + [5.7674150466918945, -0.7160008549690247], + [1.45078706741333, -5.574728965759277], + [-3.6373040676116943, 2.3824574947357178], + [-2.23128342628479, 1.333948016166687], + [-1.654829740524292, 8.323945999145508], + [2.5455162525177, -3.4560253620147705], + [7.663402080535889, -1.896567940711975], + [-4.9231133460998535, 0.2226855754852295], + [-6.3446831703186035, 7.499202251434326], + [-4.877821445465088, -4.112487316131592], + [-0.10937189310789108, -1.5520479679107666], + [-1.741701364517212, -0.358437180519104], + [-2.4190621376037598, 1.738980770111084], + [-5.3299970626831055, -2.9471402168273926], + [-0.18480843305587769, -1.1104055643081665], + [-4.354094982147217, -2.6896133422851562], + [1.3748701810836792, -7.627934455871582], + [-4.989463806152344, 5.775538921356201], + [2.2484123706817627, -4.459061145782471], + [-4.0178399085998535, 1.7703033685684204], + [0.16723495721817017, 8.370434761047363], + [3.2921464443206787, -5.234028339385986], + [-2.573209047317505, -3.2930173873901367], + [-6.1016035079956055, -2.4563465118408203], + [-5.096481800079346, -2.5615320205688477], + [2.950756549835205, -4.617053031921387], + [-2.2621617317199707, 1.0334091186523438], + [-3.4304139614105225, -0.6170390844345093], + [-5.344146728515625, 4.320986747741699], + [1.6056368350982666, -7.248540878295898], + [2.1698343753814697, 5.362025737762451], + [-0.130257248878479, 9.847498893737793], + [2.3289175033569336, 5.27008581161499], + [-4.472414016723633, 5.382689476013184], + [3.101928472518921, -4.650447368621826], + [5.339552402496338, -1.146144151687622], + [-0.20432162284851074, 10.023576736450195], + [-5.594806671142578, -0.49756908416748047], + [-4.923211574554443, -2.8729100227355957], + [-2.3564231395721436, 1.2667155265808105], + [-2.695577383041382, 1.1467924118041992], + [-3.4534056186676025, 6.538811683654785], + [0.8476800322532654, 0.029227834194898605], + [-3.8886992931365967, -2.124236822128296], + [-7.884775161743164, -1.294291377067566], + [-3.336076498031616, 5.39432430267334], + [9.149521827697754, -2.5549252033233643], + [-2.1971065998077393, -1.5398956537246704], + [-0.4490031599998474, -1.5184404850006104], + [-3.804271697998047, -2.4181902408599854], + [-3.999650239944458, -5.876528263092041], + [0.03792469948530197, -0.5148591995239258], + [2.2542612552642822, 1.0865833759307861], + [1.6116769313812256, 5.979691505432129], + [-3.567326068878174, -2.247001886367798], + [-3.571141004562378, -3.6963369846343994], + [3.612813949584961, 6.923311233520508], + [-4.962007999420166, -1.6614500284194946], + [-0.22479718923568726, 9.837949752807617], + [-4.8716254234313965, -6.143224716186523], + [-5.961776256561279, 6.558550834655762], + [3.3045380115509033, 6.655209541320801], + [2.059035062789917, -4.240591049194336], + [8.210705757141113, -2.1018176078796387], + [3.9643990993499756, 6.843768119812012], + [-0.1724473536014557, -0.8395581841468811], + [-6.484944820404053, -0.2537318468093872], + [-1.142991065979004, 1.3392534255981445], + [-2.6189210414886475, 1.2449071407318115], + [-2.323810577392578, -0.03154194727540016], + [-3.191168785095215, 3.5847790241241455], + [8.561708450317383, -2.353919744491577], + [-4.656493663787842, -2.3736045360565186], + [-1.9338290691375732, 5.868056297302246], + [0.20854511857032776, -5.212445259094238], + [-2.1014010906219482, 0.5085752010345459], + [-0.37170594930648804, 9.683755874633789], + [-5.043282985687256, 3.5304596424102783], + [1.8751819133758545, 5.106967926025391], + [-4.822908401489258, -3.4285223484039307], + [2.3495378494262695, -7.40875244140625], + [-3.586657762527466, -1.8199528455734253], + [-0.5827675461769104, 11.231403350830078], + [-7.175133228302002, -1.6794956922531128], + [-3.921884059906006, -3.1336734294891357], + [0.4417312741279602, -5.393471717834473], + [8.151988983154297, -2.0649373531341553], + [-0.15431541204452515, 9.871742248535156], + [-7.659398078918457, -1.1893409490585327], + [-3.330373525619507, -3.1020925045013428], + [-5.848499298095703, 4.574953556060791], + [-2.255645751953125, 0.8643968105316162], + [-2.1503541469573975, 1.0641618967056274], + [-1.2974754571914673, 10.4969482421875], + [-6.203994274139404, 4.972878456115723], + [-2.526151418685913, 1.9090473651885986], + [-2.4699370861053467, 0.8064910769462585], + [3.2795422077178955, -5.228676795959473], + [2.8230016231536865, 0.7915030717849731], + [-0.0665937140583992, 9.828926086425781], + [-0.28880542516708374, -0.6500650644302368], + [-2.680412530899048, 2.521444797515869], + [-2.4924252033233643, 2.1600215435028076], + [-5.896246433258057, 7.983795166015625], + [-0.4445687532424927, -1.2435177564620972], + [-4.671054363250732, 2.942030668258667], + [-1.0201996564865112, 9.597169876098633], + [-0.2318042516708374, 10.48074722290039], + [-2.2909111976623535, 5.456883907318115], + [-2.639054536819458, 1.4919792413711548], + [-2.5201821327209473, 1.9798380136489868], + [2.507122755050659, 1.1857550144195557], + [3.0288984775543213, -4.571284770965576], + [-4.666391372680664, -3.491623640060425], + [2.3688395023345947, -4.056246757507324], + [-3.420285701751709, 5.325677871704102], + [8.83251667022705, -2.506453275680542], + [-5.126847743988037, -4.114432334899902], + [2.7504563331604004, -9.131803512573242], + [3.2821457386016846, -5.15898323059082], + [0.6289307475090027, -0.7133022546768188], + [7.012866020202637, -3.3779208660125732], + [-2.2124359607696533, -0.8351664543151855], + [2.3641717433929443, 0.8176050186157227], + [8.728861808776855, -2.422588348388672], + [7.602729797363281, -1.925005555152893], + [2.704538106918335, -6.560579299926758], + [2.146491527557373, 1.3191235065460205], + [-5.2534027099609375, 5.168630599975586], + [1.2555365562438965, 6.0953688621521], + [-4.914169788360596, 2.901379108428955], + [6.89207124710083, -1.5051805973052979], + [2.6617932319641113, 6.2378740310668945], + [6.267506122589111, -2.6271603107452393], + [2.0055644512176514, 5.527102470397949], + [4.842634677886963, -5.950691223144531], + [-0.332209050655365, 10.654991149902344], + [5.264350414276123, 7.5023651123046875], + [-5.895570278167725, 7.894878387451172], + [0.6558108925819397, 5.025886058807373], + [-5.2997822761535645, -1.4585751295089722], + [3.1557278633117676, -4.724095344543457], + [3.2441530227661133, -5.038880825042725], + [-4.515259265899658, 5.252142429351807], + [-2.1183249950408936, 1.0505971908569336], + [6.939451217651367, -5.714194297790527], + [-4.0454325675964355, -1.748775839805603], + [-0.6002025008201599, 9.684158325195312], + [6.3227620124816895, -1.2613866329193115], + [-5.3921332359313965, -3.5029385089874268], + [-1.34286367893219, -1.1527000665664673], + [-4.408677577972412, -2.8462073802948], + [-1.367488145828247, 9.849393844604492], + [3.4427337646484375, -0.11530536413192749], + [2.2996888160705566, -4.080100059509277], + [-5.494356632232666, 6.793806076049805], + [2.571192502975464, -3.9214603900909424], + [-0.3645702004432678, 11.131272315979004], + [-3.96454119682312, 5.38397216796875], + [-0.23078608512878418, 10.468533515930176], + [2.5662617683410645, -4.1061506271362305], + [-2.3572850227355957, 2.1971452236175537], + [6.732884883880615, -1.3920674324035645], + [-1.0189610719680786, -0.5734730958938599], + [9.279757499694824, -2.6313798427581787], + [-3.719480276107788, -2.431476354598999], + [-4.633156776428223, 1.4875712394714355], + [2.615293502807617, 5.4477009773254395], + [-4.175276279449463, -2.385878801345825], + [2.7641029357910156, 0.8877725601196289], + [2.396854877471924, -5.63715124130249], + [-5.230808258056641, 6.162213325500488], + [-1.7807154655456543, 2.97816801071167], + [2.2480008602142334, -8.233820915222168], + [-2.148015260696411, 2.193463087081909], + [-8.251723289489746, 10.083568572998047], + [3.097824811935425, 5.916640281677246], + [7.949100971221924, -2.0954275131225586], + [2.7559432983398438, -4.625744342803955], + [-4.30214262008667, 1.9748843908309937], + [-3.473418951034546, -3.7814457416534424], + [-2.4194061756134033, -0.8229724764823914], + [-4.875020980834961, 3.58731746673584], + [1.849637508392334, -8.711222648620605], + [-3.191992998123169, 3.455230236053467], + [-0.34012359380722046, 7.236569881439209], + [0.65220707654953, -5.715126037597656], + [8.707853317260742, -2.4182960987091064], + [2.869316339492798, -4.72466516494751], + [-7.44163179397583, -1.1091663837432861], + [-6.0463995933532715, -0.6679381132125854], + [5.4348225593566895, -2.765852928161621], + [-2.180415630340576, 0.5891249179840088], + [1.6266546249389648, 0.7517554759979248], + [3.829195261001587, 6.521664619445801], + [3.1255781650543213, -4.678597927093506], + [-6.47117805480957, 8.441411018371582], + [3.2302491664886475, -5.326489448547363], + [-0.12802594900131226, 7.743232727050781], + [-0.35869866609573364, 5.301721572875977], + [-4.424829006195068, 2.1384329795837402], + [-6.054933071136475, -2.0876951217651367], + [3.2369606494903564, -4.873730659484863], + [-3.154606580734253, -1.9437955617904663], + [-4.42838716506958, -5.9644904136657715], + [-5.01376485824585, 6.410277366638184], + [-6.5883002281188965, 8.66761589050293], + [4.875506401062012, -5.8091864585876465], + [-2.1181862354278564, -0.5020495057106018], + [-5.7578325271606445, 6.668054103851318], + [3.288184881210327, -5.636445045471191], + [3.236741781234741, -2.775761365890503], + [9.169146537780762, -2.5678958892822266], + [7.740645885467529, -2.2449371814727783], + [-2.0183897018432617, 1.752922534942627], + [-2.4043073654174805, 1.4367095232009888], + [2.885077714920044, -8.568675994873047], + [3.204871654510498, -5.071431636810303], + [-5.058744430541992, -1.6763516664505005], + [-2.7001538276672363, -0.4702604413032532], + [-4.5423970222473145, -2.227297306060791], + [-3.960952043533325, 5.016246318817139], + [9.106422424316406, -2.4560000896453857], + [3.5952751636505127, 6.613264083862305], + [-4.59446382522583, -2.4498260021209717], + [-5.727142333984375, 4.895702362060547], + [3.0456936359405518, -4.568353176116943], + [-4.576339244842529, -2.5437026023864746], + [0.15007680654525757, 9.741600036621094], + [2.948378801345825, -4.459544658660889], + [1.0076825618743896, -5.748782157897949], + [2.854534387588501, -4.432408332824707], + [-2.5048162937164307, 1.8095976114273071], + [5.503720283508301, -1.6373951435089111], + [-4.873317241668701, -2.546847105026245], + [-0.32029470801353455, -0.3270401954650879], + [-4.104195594787598, 3.19527268409729], + [3.1207327842712402, -4.994573593139648], + [-5.622195243835449, -3.5041234493255615], + [-0.2403963804244995, -4.378546714782715], + [4.90589714050293, -2.2788307666778564], + [-2.38655424118042, 1.5037368535995483], + [-0.4554741382598877, 9.323575973510742], + [-4.994646072387695, 6.89546012878418], + [8.138228416442871, -2.1131021976470947], + [-2.3295843601226807, 1.47365403175354], + [-2.909147024154663, 4.991036415100098], + [1.9427380561828613, 4.561298370361328], + [2.3942885398864746, -4.037565231323242], + [-7.484767436981201, 9.267959594726562], + [-0.308158814907074, 9.318541526794434], + [-7.186005115509033, 8.791740417480469], + [1.2704862356185913, -6.773600101470947], + [-3.0713624954223633, -1.6466602087020874], + [-3.8817036151885986, -1.062013864517212], + [-3.847256898880005, -3.5765883922576904], + [1.9002834558486938, -8.952377319335938], + [-2.5414907932281494, -3.3429954051971436], + [-2.554583787918091, -4.292671203613281], + [-0.1566704511642456, 10.577143669128418], + [-5.2010321617126465, -2.312044382095337], + [-4.606727123260498, -1.3691538572311401], + [-2.4568042755126953, 1.7849855422973633], + [3.283675193786621, -5.141430377960205], + [-4.877761363983154, 4.782303810119629], + [-8.27245044708252, 10.071308135986328], + [2.5393288135528564, -5.082391738891602], + [0.2465032935142517, 9.667011260986328], + [-1.9805705547332764, 2.4608235359191895], + [-3.3586418628692627, -3.5811712741851807], + [-6.661818027496338, 4.962652206420898], + [2.627066135406494, 5.730803489685059], + [0.6487665772438049, -0.4479634761810303], + [5.665188312530518, -0.9863651990890503], + [-4.716495990753174, -4.960626125335693], + [6.98921537399292, -2.054018259048462], + [1.9401962757110596, -2.822523355484009], + [-0.4650399684906006, -0.34906473755836487], + [-0.5479081869125366, -0.5715657472610474], + [-4.659992694854736, -3.1955387592315674], + [-5.072791576385498, -3.1450273990631104], + [8.165383338928223, -2.1982505321502686], + [-5.322255611419678, 2.741318702697754], + [1.800612211227417, -9.213357925415039], + [2.2923271656036377, -7.600118637084961], + [2.971888780593872, 1.1118943691253662], + [-4.321168899536133, 1.2358880043029785], + [2.7203803062438965, -4.202474594116211], + [-4.033939361572266, -1.723400354385376], + [2.765852212905884, -6.467312335968018], + [-5.041870594024658, 5.871768951416016], + [-0.04599098116159439, -0.8733735084533691], + [-5.871499061584473, 2.3297641277313232], + [-0.28405141830444336, 9.47059440612793], + [-2.5645925998687744, 0.6496918797492981], + [2.90959095954895, -6.359165191650391], + [8.344513893127441, -2.099435567855835], + [-3.098292589187622, 0.1529172658920288], + [-5.848121643066406, -0.9930290579795837], + [-2.564523935317993, 1.9572445154190063], + [2.093737840652466, -7.510113716125488], + [-4.916807651519775, -2.485294818878174], + [0.9315257668495178, -0.5390202403068542], + [6.053891181945801, -1.5380096435546875], + [9.384600639343262, -2.62345027923584], + [2.9191031455993652, -5.733870983123779], + [-5.076740264892578, -2.3339216709136963], + [6.098604679107666, -1.24490487575531], + [-3.3933017253875732, 4.73731803894043], + [2.6613073348999023, -4.329293727874756], + [-4.651913166046143, 6.124546051025391], + [-4.913316249847412, 7.065074920654297], + [5.003028392791748, 6.59156608581543], + [-6.841148376464844, -1.0309383869171143], + [-5.935513019561768, 3.9340615272521973], + [1.4564030170440674, -6.997969150543213], + [2.8044064044952393, -4.212167263031006], + [-4.7231574058532715, -5.177241802215576], + [-3.1720821857452393, 6.821117401123047], + [-0.15185406804084778, -1.349610447883606], + [-0.07428807765245438, 10.099559783935547], + [-2.311474561691284, 1.11704421043396], + [2.0904033184051514, -3.456242084503174], + [2.249232292175293, -7.640929222106934], + [-3.805856943130493, 6.09360933303833], + [9.607593536376953, -2.5679402351379395], + [5.099567413330078, -0.7659680843353271], + [-2.8934061527252197, -2.4609875679016113], + [5.626919269561768, -0.9753287434577942], + [1.9133809804916382, -2.975973129272461], + [-3.597242832183838, 3.6674365997314453], + [-0.4454196095466614, 11.122357368469238], + [7.454042911529541, -2.037829875946045], + [-5.728445053100586, 5.946719646453857], + [-7.85291862487793, 9.650718688964844], + [-2.4138622283935547, 0.7040981650352478], + [-0.12335441261529922, -0.7696894407272339], + [8.765247344970703, -2.3469784259796143], + [-0.3484051823616028, 10.522442817687988], + [-3.641110420227051, -5.213373184204102], + [-4.767767906188965, -2.658317804336548], + [-5.458024501800537, -3.01434063911438], + [0.27128708362579346, 7.978602409362793], + [-5.54444694519043, -0.8077867031097412], + [-0.2804359197616577, -1.6049431562423706], + [-1.2196768522262573, 9.147333145141602], + [-0.06366688758134842, 9.671818733215332], + [-4.165943622589111, -2.8797714710235596], + [-0.8335353136062622, 7.830863952636719], + [-2.7428205013275146, 4.700753688812256], + [-4.51449728012085, -3.471557855606079], + [-0.32254597544670105, 5.852095603942871], + [-5.194328784942627, -3.692319869995117], + [-7.066038608551025, -0.938743531703949], + [-4.096810340881348, -1.275908350944519], + [-3.4478938579559326, 5.994192123413086], + [0.03900139778852463, 9.393321990966797], + [4.366127967834473, 6.832103729248047], + [3.3900146484375, 1.193482756614685], + [-3.4898226261138916, -2.290069341659546], + [-0.44143158197402954, -0.13844454288482666], + [-5.370486259460449, -4.2762908935546875], + [-4.686802387237549, -1.6186387538909912], + [7.910632610321045, -2.01172137260437], + [-5.11338996887207, 6.566627502441406], + [-5.249204158782959, -3.048234462738037], + [-6.932738780975342, 1.197409749031067], + [1.6795772314071655, -8.656196594238281], + [-2.3777718544006348, 2.2537190914154053], + [-0.4695020318031311, 9.228229522705078], + [-2.3812103271484375, 1.6788357496261597], + [-3.744313955307007, -2.990779399871826], + [7.231359004974365, -1.4810060262680054], + [-3.9399490356445312, 6.114989757537842], + [2.764085054397583, -4.278419494628906], + [2.418621778488159, -5.989653587341309], + [-0.02935359627008438, -1.1999212503433228], + [8.115023612976074, -2.146017074584961], + [-4.666996955871582, -1.409522294998169], + [8.018807411193848, -2.1175119876861572], + [-0.5283238887786865, 9.872629165649414], + [-4.894030570983887, -3.394660234451294], + [-4.480427265167236, 0.11729282140731812], + [1.9757397174835205, -6.757370948791504], + [-0.29390230774879456, -1.5745124816894531], + [3.0866706371307373, -4.633577346801758], + [-4.755173206329346, -1.4278008937835693], + [6.74817419052124, -2.847928047180176], + [0.6032448410987854, -5.486701011657715], + [0.18020933866500854, -1.0848575830459595], + [4.79384183883667, -0.7635554671287537], + [-5.479307651519775, -4.133391857147217], + [-5.978698253631592, -1.4309815168380737], + [-5.477584362030029, 6.002671241760254], + [-2.0540337562561035, 2.738985061645508], + [4.821100234985352, -1.0669735670089722], + [0.487033486366272, -0.21461135149002075], + [0.20889562368392944, 0.6319708824157715], + [-5.668135166168213, 8.759784698486328], + [6.431587219238281, -2.364520788192749], + [2.8099594116210938, -4.2565202713012695], + [-0.18236643075942993, 9.909871101379395], + [-0.46221792697906494, 6.513776779174805], + [2.306772232055664, 5.568856716156006], + [-3.5421302318573, 3.0459396839141846], + [-3.538377046585083, 5.16456937789917], + [3.2281887531280518, -5.138588905334473], + [3.3259661197662354, 6.381169319152832], + [-0.09577972441911697, 10.479631423950195], + [-4.075378894805908, -1.4830238819122314], + [2.3436546325683594, -3.7770466804504395], + [-5.804295063018799, 2.5645344257354736], + [3.0815937519073486, -4.921456813812256], + [6.460085391998291, -1.4315593242645264], + [-1.737023115158081, 0.8532418608665466], + [-6.417713165283203, -1.1875866651535034], + [-1.5056698322296143, -2.9804210662841797], + [8.914162635803223, -2.4848365783691406], + [-2.4284775257110596, 2.1202261447906494], + [0.9449693560600281, 0.97627854347229], + [-2.098057746887207, 2.7978947162628174], + [-2.1225991249084473, -4.25563383102417], + [1.7718498706817627, 0.5071161389350891], + [1.5590050220489502, 5.111791610717773], + [8.75472354888916, -2.3834784030914307], + [-1.8224685192108154, 2.1819536685943604], + [-4.9506707191467285, 6.77951717376709], + [-5.194667339324951, -2.718798875808716], + [-4.230767250061035, -3.1360223293304443], + [5.032260417938232, -1.2903586626052856], + [-4.649230480194092, 0.04763507470488548], + [-2.788090467453003, -3.6960792541503906], + [9.60896110534668, -2.6458652019500732], + [-4.281155109405518, -2.544994592666626], + [-2.888338327407837, 6.318861961364746], + [-0.19789451360702515, 10.357168197631836], + [-4.94201135635376, 1.8219988346099854], + [2.341949701309204, 4.756633281707764], + [-0.3798932433128357, 9.605087280273438], + [2.0965540409088135, -4.359025955200195], + [6.27414083480835, -3.2844913005828857], + [1.208644151687622, -5.874887943267822], + [1.1597439050674438, 1.0227539539337158], + [8.64626693725586, -2.4990124702453613], + [-4.183658123016357, -3.2359044551849365], + [-0.2910477817058563, -3.182389974594116], + [-2.1151726245880127, 2.497243642807007], + [-4.3983154296875, -3.179910898208618], + [6.645975589752197, -1.4350043535232544], + [-1.5556676387786865, -3.32238507270813], + [2.4036030769348145, -8.286320686340332], + [3.216038942337036, -4.806274890899658], + [6.823959827423096, -1.4291120767593384], + [-7.080720901489258, 8.700437545776367], + [-6.7902092933654785, 8.330842018127441], + [-0.2903967499732971, 10.609430313110352], + [1.6098536252975464, 5.3314619064331055], + [3.008258819580078, 6.4588775634765625], + [2.976320505142212, -4.780243873596191], + [-3.3577263355255127, -2.0615079402923584], + [-4.335297107696533, -1.2360554933547974], + [2.7089662551879883, -5.54740047454834], + [-3.961191415786743, -1.3265695571899414], + [-5.407591819763184, 1.9880398511886597], + [5.071368217468262, -1.1957544088363647], + [2.899735689163208, -3.7848451137542725], + [4.4045233726501465, -0.9582269787788391], + [1.791001319885254, -5.270881652832031], + [-4.743092060089111, -1.461069941520691], + [-1.995715618133545, -0.08894163370132446], + [-0.2517161965370178, 9.725992202758789], + [-6.095493793487549, -2.0796751976013184], + [-4.52198600769043, -1.0495400428771973], + [-4.275485038757324, -2.53741717338562], + [1.6937710046768188, 5.054797172546387], + [-6.9636759757995605, -1.2131505012512207], + [3.6166231632232666, -0.6679559946060181], + [8.200197219848633, -2.426255464553833], + [-4.142733573913574, -3.2590415477752686], + [2.8378946781158447, 5.833725929260254], + [-0.333699107170105, 9.317925453186035], + [-3.0589427947998047, -0.2401406168937683], + [-0.18807333707809448, 9.843243598937988], + [9.260621070861816, -2.5383460521698], + [3.014730215072632, -4.700517654418945], + [0.6889253258705139, 0.46707141399383545], + [0.08175729960203171, -0.625521719455719], + [-1.2522671222686768, 1.9769200086593628], + [-3.3866803646087646, -1.8990532159805298], + [-4.061470985412598, -4.469350814819336], + [1.4272732734680176, -5.6411542892456055], + [-4.61443567276001, 4.089200973510742], + [3.157419443130493, -4.899821758270264], + [2.0957276821136475, -5.313744068145752], + [-3.5432584285736084, -1.370797872543335], + [3.2106287479400635, -4.796496868133545], + [-2.412428617477417, 5.52647590637207], + [-6.345862865447998, -1.510037899017334], + [-0.35756438970565796, 10.976619720458984], + [-4.994423866271973, 4.278215408325195], + [3.9903500080108643, -3.682370901107788], + [-4.166316032409668, -2.9595954418182373], + [-5.958340644836426, -1.5044817924499512], + [-5.892495632171631, 7.522945404052734], + [-3.3410964012145996, 5.721241474151611], + [3.1501924991607666, -4.924953460693359], + [-5.27650785446167, -3.1270134449005127], + [-0.33578306436538696, 10.272018432617188], + [-7.664063930511475, -0.6723304986953735], + [-3.1371304988861084, -2.3346636295318604], + [2.1426026821136475, 4.703595161437988], + [-3.0763561725616455, 5.7823991775512695], + [2.1082077026367188, 6.271035194396973], + [2.7655580043792725, -4.309220790863037], + [-5.73911714553833, -5.427036285400391], + [-4.873417377471924, 3.4332761764526367], + [-0.11472580581903458, -0.663124680519104], + [8.793320655822754, -2.4117138385772705], + [7.148116588592529, -5.622389793395996], + [-5.245416164398193, -3.3538084030151367], + [1.4991751909255981, -7.385380744934082], + [-4.942431926727295, -1.482859492301941], + [-5.637047290802002, -1.4366768598556519], + [-0.917917788028717, -1.973753809928894], + [8.46794605255127, -2.33109450340271], + [-1.5038295984268188, 5.4673662185668945], + [1.2662568092346191, -4.881446838378906], + [3.1686127185821533, -4.742489814758301], + [3.826225519180298, -0.3371245563030243], + [-4.529045104980469, 3.940917730331421], + [1.8356761932373047, -8.092506408691406], + [-5.05362606048584, 2.1443979740142822], + [-6.221914768218994, 3.823168992996216], + [-4.571885108947754, 4.928480625152588], + [-4.354580879211426, 4.750197887420654], + [-7.0202813148498535, 8.588253021240234], + [2.6301820278167725, -3.862407684326172], + [-4.043060779571533, -2.3323872089385986], + [-1.9928233623504639, 2.0638012886047363], + [-5.009251117706299, -3.0582258701324463], + [-4.644791126251221, -6.123925685882568], + [-0.25166672468185425, 10.747425079345703], + [-3.8622758388519287, -2.638087034225464], + [3.4747049808502197, -5.168770790100098], + [5.603396892547607, -0.8438743352890015], + [-4.871451377868652, 0.2968486547470093], + [3.021001100540161, -4.532593727111816], + [-2.019066572189331, 0.4029722809791565], + [0.7734252214431763, 4.777441501617432], + [2.6922225952148438, -4.279385566711426], + [9.207940101623535, -2.6183438301086426], + [-5.120149612426758, 4.180779457092285], + [-4.643433094024658, -1.1848359107971191], + [3.2668302059173584, -5.174072742462158], + [-2.214789867401123, 1.4915977716445923], + [-6.7800822257995605, 8.315921783447266], + [-6.56220006942749, 8.329460144042969], + [2.8325960636138916, -6.817896366119385], + [9.369704246520996, -2.6307737827301025], + [-4.492217063903809, -0.657618522644043], + [-0.3115246891975403, 10.194629669189453], + [7.7248125076293945, -2.065018892288208], + [2.5063023567199707, -5.345538139343262], + [-2.7649643421173096, 5.7089314460754395], + [-5.476531505584717, -3.089923143386841], + [-5.628568649291992, 1.3624720573425293], + [-4.712770462036133, 3.6339757442474365], + [0.5394531488418579, -6.353193283081055], + [-0.24058794975280762, -1.3580522537231445], + [1.9146764278411865, 5.390270233154297], + [2.255997896194458, 5.46042537689209], + [2.1020748615264893, -9.869834899902344], + [-6.1753764152526855, -1.8432763814926147], + [-4.485256195068359, 3.3715035915374756], + [-2.4608328342437744, 1.88572359085083], + [-5.186089515686035, 2.893258571624756], + [-2.4495935440063477, 1.7469223737716675], + [-0.5228747129440308, 5.9234442710876465], + [-5.066398620605469, -1.4012399911880493], + [2.9277093410491943, -4.54926061630249], + [-5.589916706085205, -3.5921413898468018], + [2.5725314617156982, -7.718751430511475], + [3.1114096641540527, -4.857378005981445], + [4.642775535583496, -4.1692938804626465], + [-4.934134483337402, 5.085658550262451], + [-4.7637715339660645, 6.52998161315918], + [-4.4456892013549805, 3.525172233581543], + [9.076857566833496, -2.5313966274261475], + [-2.939279317855835, 5.362428665161133], + [7.169956684112549, -3.2206244468688965], + [2.7572391033172607, -4.225069999694824], + [1.999584436416626, -7.697991371154785], + [-5.017073154449463, -2.5744972229003906], + [9.240584373474121, -2.610156297683716], + [-5.207748889923096, -3.5604569911956787], + [-5.129085063934326, 7.616886138916016], + [-6.795187950134277, -2.1061782836914062], + [-5.366809844970703, 6.554900646209717], + [-5.8121819496154785, -3.045513868331909], + [-4.843864917755127, 5.993772506713867], + [0.18604958057403564, -5.200644493103027], + [1.445407748222351, -7.461910724639893], + [2.951105833053589, -4.790086269378662], + [-4.3885416984558105, -1.724035620689392], + [-3.125060796737671, -2.768230676651001], + [5.46103572845459, -1.1269497871398926], + [-7.012616157531738, 1.1891651153564453], + [-4.31495475769043, -1.1566367149353027], + [-8.468390464782715, -1.9364560842514038], + [2.5865890979766846, 5.351700305938721], + [-5.187875747680664, -3.387877941131592], + [2.322444438934326, -3.7294225692749023], + [-5.499953746795654, 5.53172492980957], + [-0.41351842880249023, 10.146830558776855], + [-4.688537120819092, -4.194370269775391], + [-0.3463138937950134, 5.205615997314453], + [1.8035446405410767, 6.074005126953125], + [-5.909507751464844, -1.411144733428955], + [2.6787168979644775, -5.950714588165283], + [1.5096306800842285, -1.0616910457611084], + [-3.1543195247650146, -2.3961689472198486], + [9.290650367736816, -2.5421016216278076], + [1.829502820968628, -5.838508605957031], + [2.148869752883911, -6.797762393951416], + [2.3639495372772217, -9.647440910339355], + [-0.21852999925613403, 11.053024291992188], + [-4.821685791015625, -1.3227535486221313], + [-2.43927001953125, 1.7185066938400269], + [3.127706289291382, -2.5505857467651367], + [0.330393522977829, -4.085991382598877], + [-4.756403923034668, 1.9907881021499634], + [-4.675238132476807, -1.0628489255905151], + [-4.949979782104492, -1.7226821184158325], + [-0.8557010889053345, 9.229354858398438], + [0.8197652697563171, -6.49337100982666], + [-2.072754383087158, 2.39467191696167], + [-3.6376664638519287, -2.7742533683776855], + [-4.567875385284424, -1.5269341468811035], + [8.800772666931152, -2.4856350421905518], + [-0.6633707880973816, -1.3007034063339233], + [2.5081987380981445, 0.6490921378135681], + [0.8227232098579407, -0.645702600479126], + [0.06363517791032791, -2.6689116954803467], + [-3.932783603668213, -2.8249473571777344], + [1.3422749042510986, 5.352093696594238], + [-0.19689041376113892, 9.868911743164062], + [-0.8246796727180481, 8.697551727294922], + [-0.17485177516937256, 9.585341453552246], + [-4.401149749755859, -3.6760518550872803], + [2.690796136856079, -7.86301851272583], + [-4.7671799659729, -3.9269583225250244], + [-3.9988632202148438, -1.5047990083694458], + [-2.3337225914001465, 0.49158257246017456], + [-6.918121814727783, -2.160658597946167], + [1.4934120178222656, 5.584425926208496], + [-4.428153038024902, -3.3190321922302246], + [-2.868004322052002, 5.3820085525512695], + [-5.245268821716309, 6.607432842254639], + [6.946213245391846, -1.5704388618469238], + [-2.5298612117767334, 1.9110442399978638], + [-2.7669568061828613, 5.075202941894531], + [8.62479305267334, -2.509106397628784], + [-0.4241885244846344, -0.9992519021034241], + [1.318035364151001, -8.14348030090332], + [-0.15660738945007324, 10.268009185791016], + [8.267102241516113, -2.326327085494995], + [-3.678715705871582, -1.9527114629745483], + [2.6700637340545654, -3.9294824600219727], + [-3.5818276405334473, -1.5641642808914185], + [9.107805252075195, -2.4387223720550537], + [-2.2577593326568604, 1.3994871377944946], + [7.945796489715576, -2.197286367416382], + [6.7920355796813965, -1.2714178562164307], + [1.9333462715148926, 4.4330244064331055], + [-5.278512001037598, -0.30461621284484863], + [-7.1688456535339355, 8.72671890258789], + [-2.4156410694122314, 5.737094879150391], + [4.032652378082275, -2.2495977878570557], + [2.1677329540252686, -4.026851654052734], + [0.2374955415725708, -0.6411594152450562], + [-4.293928623199463, -3.678800106048584], + [2.0759689807891846, 4.563798904418945], + [8.746853828430176, -2.3497769832611084], + [-1.08543062210083, 9.397188186645508], + [7.922729015350342, -2.003906011581421], + [-5.167694568634033, 6.642218589782715], + [0.4638901948928833, 0.5625706911087036], + [8.97478199005127, -2.4742929935455322], + [-2.7638261318206787, 2.8619344234466553], + [-7.460824489593506, -1.5990574359893799], + [2.650771141052246, -3.9177095890045166], + [2.040473222732544, 5.653182506561279], + [1.9881136417388916, 5.365904808044434], + [-4.061343193054199, -2.5583932399749756], + [0.2697935104370117, -4.952271461486816], + [-3.794142007827759, -1.7787326574325562], + [-4.348025798797607, -2.9572205543518066], + [-7.344355583190918, -0.7918657064437866], + [-4.796675682067871, -2.347470998764038], + [-1.0775641202926636, 8.5714111328125], + [2.9868876934051514, -4.566336631774902], + [-4.1261186599731445, -1.316381812095642], + [1.0980099439620972, -6.4975786209106445], + [-2.156872034072876, 0.646112322807312], + [1.4203767776489258, -5.846244812011719], + [-1.7587559223175049, 0.31162184476852417], + [-4.793894290924072, 5.792488098144531], + [-2.957207441329956, -2.8006298542022705], + [-0.18560367822647095, 9.541889190673828], + [-5.459858417510986, -0.3498728275299072], + [-5.1199846267700195, 5.8239850997924805], + [7.315577507019043, -1.6462352275848389], + [6.179721832275391, -1.3156088590621948], + [-2.2249300479888916, -2.443593978881836], + [-3.6702563762664795, 5.537336349487305], + [-2.8014070987701416, 2.4757964611053467], + [-7.253238677978516, -1.7988446950912476], + [2.5288007259368896, -7.254190444946289], + [-4.186415195465088, 5.0718841552734375], + [3.073137044906616, -5.52564001083374], + [3.575146436691284, -3.9297232627868652], + [2.7545974254608154, -5.377788543701172], + [-2.1605939865112305, 2.7470860481262207], + [-1.354253888130188, -1.1277443170547485], + [-2.839498996734619, 3.022559881210327], + [7.257344722747803, -1.6135287284851074], + [-6.661448955535889, -1.525450587272644], + [2.948293447494507, -4.685784339904785], + [-4.291487216949463, -4.2169342041015625], + [-6.584697246551514, 8.385648727416992], + [-0.0279085710644722, -1.3116852045059204], + [-6.0843658447265625, -1.2260805368423462], + [-3.6214029788970947, -1.4387636184692383], + [-3.3538124561309814, -1.3769354820251465], + [9.660849571228027, -2.715934991836548], + [-2.249755620956421, 0.6671427488327026], + [-2.295872926712036, 1.8022481203079224], + [-4.789201259613037, 1.5224202871322632], + [3.2707948684692383, 5.109107971191406], + [-4.03047513961792, 6.467803955078125], + [1.400959849357605, 5.353967666625977], + [0.7761069536209106, -0.38172733783721924], + [-6.2598347663879395, 8.022615432739258], + [2.260596513748169, -0.1353512704372406], + [-4.130550861358643, 6.510778427124023], + [5.490964889526367, 7.540154457092285], + [3.3696653842926025, -5.4169111251831055], + [1.773190975189209, -6.567962169647217], + [-4.065558910369873, -1.1281219720840454], + [5.971102714538574, -1.2277631759643555], + [-6.912124156951904, -1.9643672704696655], + [9.629141807556152, -2.6655848026275635], + [-0.2342362403869629, 9.87822151184082], + [0.7359433174133301, 1.2251406908035278], + [6.180700302124023, -2.4558708667755127], + [-3.122701644897461, -2.326580047607422], + [-3.1114537715911865, -3.2520108222961426], + [3.5190796852111816, 5.806999206542969], + [8.967509269714355, -2.4764859676361084], + [-4.994115829467773, 6.504230499267578], + [-2.5939056873321533, 6.2907609939575195], + [0.09948397427797318, -1.3141494989395142], + [3.005505084991455, -4.830292701721191], + [0.43168216943740845, 0.15629257261753082], + [-3.5513148307800293, -0.8652815222740173], + [-3.707937717437744, 5.360760688781738], + [1.8650225400924683, 4.936944961547852], + [3.20037579536438, -4.7970476150512695], + [-4.6894450187683105, -2.9455153942108154], + [9.219748497009277, -2.711775064468384], + [2.091226816177368, -3.539059638977051], + [-2.0453014373779297, -4.131778240203857], + [-6.937391757965088, 5.75188684463501], + [-7.912023067474365, -1.1663219928741455], + [1.8600095510482788, -9.230695724487305], + [-7.11071252822876, -1.873868465423584], + [-1.5430564880371094, 0.32251685857772827], + [8.118973731994629, -2.272538423538208], + [8.239302635192871, -2.578301191329956], + [-4.9407148361206055, 4.24475622177124], + [-0.28763389587402344, 9.48553466796875], + [-0.8266198635101318, 10.015695571899414], + [-3.2733936309814453, 5.0763773918151855], + [-0.7593297362327576, 5.569755554199219], + [-5.95306921005249, -1.4615569114685059], + [-4.680692195892334, -1.0198966264724731], + [2.374624490737915, -3.677584409713745], + [4.855165004730225, -1.0420706272125244], + [5.8146138191223145, -1.1570159196853638], + [-1.80716073513031, 1.1820673942565918], + [7.714861869812012, -2.2038938999176025], + [2.1149590015411377, -7.179699420928955], + [-6.118714332580566, -1.8866268396377563], + [-0.018946655094623566, 9.872546195983887], + [2.902404308319092, -3.9138824939727783], + [8.981825828552246, -2.3844993114471436], + [0.8214977979660034, 5.591348648071289], + [2.8562910556793213, -4.438300132751465], + [7.384754180908203, -3.071831226348877], + [3.1799495220184326, -5.112825393676758], + [3.064399480819702, -5.342887878417969], + [-5.075262069702148, -1.2554813623428345], + [1.2749054431915283, 1.561343789100647], + [1.3996095657348633, -4.589758396148682], + [1.3317101001739502, -7.590519428253174], + [6.482418060302734, -1.0432531833648682], + [6.398386001586914, -1.9193147420883179], + [7.147904396057129, -1.4806607961654663], + [2.4578917026519775, -4.256351947784424], + [-5.296424388885498, 1.1793423891067505], + [-6.121406078338623, 0.3065154552459717], + [-5.019801139831543, -3.286891222000122], + [-0.4134800434112549, -0.859553337097168], + [0.9879708886146545, -1.4299319982528687], + [6.630220413208008, -1.7642210721969604], + [-0.1180163100361824, 9.832597732543945], + [-5.839558124542236, 0.8452637195587158], + [1.3113672733306885, 0.2967192530632019], + [-3.531174898147583, -5.12802267074585], + [-3.8211686611175537, 6.207247734069824], + [-2.5644195079803467, 2.209613084793091], + [-5.936760902404785, 2.1420087814331055], + [1.3247567415237427, -7.395688056945801], + [-0.5793546438217163, 9.896839141845703], + [-4.689552307128906, -2.652304172515869], + [-0.2647099494934082, 10.071600914001465], + [2.046518564224243, 5.086185455322266], + [-0.6792016625404358, -0.5010465979576111], + [-8.055944442749023, -1.0080881118774414], + [-7.122921943664551, -1.368482232093811], + [5.260760307312012, 8.264982223510742], + [2.4019501209259033, 1.0700865983963013], + [1.855956792831421, 5.056825637817383], + [6.749070644378662, -3.514341354370117], + [-2.4742491245269775, 2.595345973968506], + [-0.2961971163749695, 10.16921615600586], + [-0.48526817560195923, 10.246554374694824], + [-6.250442028045654, -2.62322735786438], + [2.0461618900299072, 5.522885322570801], + [6.987410068511963, -2.7661314010620117], + [-0.11153323203325272, 9.755401611328125], + [-5.883076190948486, -2.9149200916290283], + [-8.083077430725098, 9.904339790344238], + [8.228970527648926, -2.907325506210327], + [-0.3349766135215759, 10.700370788574219], + [2.2420709133148193, -3.7670960426330566], + [0.9619849324226379, -6.008959770202637], + [-0.7046564817428589, 10.25662612915039], + [1.5915722846984863, 4.633928298950195], + [2.822394847869873, -4.439690589904785], + [-8.40272331237793, -1.2600382566452026], + [-5.391147136688232, -4.303540229797363], + [2.3535349369049072, 5.539807319641113], + [-3.022263765335083, -3.0682899951934814], + [0.9680855870246887, 4.699286460876465], + [1.5400913953781128, -7.190485954284668], + [-2.322117567062378, -0.7318612933158875], + [-5.4494147300720215, -3.6003077030181885], + [-0.6773332953453064, -0.40978384017944336], + [-5.222002983093262, 4.021152496337891], + [2.4083902835845947, 1.1180306673049927], + [-2.409353017807007, -1.38205885887146], + [1.12562894821167, -0.4875323176383972], + [1.1348211765289307, -5.851682186126709], + [1.082550287246704, 4.696983814239502], + [-4.900421142578125, -6.94013786315918], + [-5.558333873748779, 1.7670938968658447], + [-4.316237926483154, -3.8428432941436768], + [-3.1154143810272217, -3.9318013191223145], + [-2.6044437885284424, -4.3074541091918945], + [-0.4009694457054138, 9.402824401855469], + [2.635101079940796, -5.507877349853516], + [-6.653653621673584, 7.952436447143555], + [5.052666664123535, -1.2687625885009766], + [-0.5297398567199707, 0.07470878958702087], + [-6.377701282501221, 1.292661428451538], + [-5.337310314178467, 2.1613945960998535], + [-0.24042439460754395, -1.1388379335403442], + [-4.950178146362305, -2.224364995956421], + [5.23746919631958, -1.2682100534439087], + [-3.754730463027954, -1.7517668008804321], + [-2.3549020290374756, 1.2462302446365356], + [-3.8148434162139893, -3.3834030628204346], + [-0.1713007092475891, 9.344554901123047], + [-4.873232364654541, -0.7307173013687134], + [-2.2436413764953613, 1.235954761505127], + [2.6167609691619873, -4.250439643859863], + [-5.071967601776123, 1.8658863306045532], + [6.578846454620361, -2.7461559772491455], + [-0.03410991281270981, -0.8563464283943176], + [2.9234201908111572, -4.399041175842285], + [7.842129707336426, -1.8551820516586304], + [-3.7116129398345947, -1.2151752710342407], + [-4.325540542602539, -3.6401100158691406], + [-2.0268490314483643, 2.274121046066284], + [1.0605401992797852, -7.7104926109313965], + [-1.701612949371338, 0.6963587999343872], + [-8.7269868850708, -0.7963011264801025], + [-2.278045415878296, 0.8264799118041992], + [-0.3148801922798157, 9.985054016113281], + [3.1015777587890625, -5.007515907287598], + [1.5721709728240967, -7.7614216804504395], + [2.438025951385498, -4.148094177246094], + [0.03616466373205185, -1.0869237184524536], + [-0.2715644836425781, 9.652368545532227], + [-4.694018840789795, -4.142307758331299], + [0.9712614417076111, -6.286972999572754], + [-4.859198093414307, -2.5851471424102783], + [1.4125652313232422, -5.222121238708496], + [-2.262634754180908, 1.1078649759292603], + [0.862819254398346, -6.8075432777404785], + [2.400878667831421, 5.452267646789551], + [-5.726515769958496, 6.08746337890625], + [-2.0845160484313965, 0.5429526567459106], + [-2.2970657348632812, 5.990920066833496], + [-5.8901047706604, 6.62262487411499], + [3.3625025749206543, -5.307834148406982], + [3.158540964126587, -5.108185768127441], + [-0.34456896781921387, 9.954787254333496], + [9.684308052062988, -2.714801788330078], + [-0.3476131558418274, 10.306355476379395], + [-8.603074073791504, -0.9088270664215088], + [-4.60367488861084, -2.771888017654419], + [-0.32717424631118774, 10.747795104980469], + [-2.0764806270599365, 2.4064462184906006], + [-0.557573676109314, 9.19301700592041], + [0.6906335353851318, -2.5061795711517334], + [-5.281768321990967, 8.155532836914062], + [-4.922082424163818, 7.304457664489746], + [-4.418771266937256, -3.7380712032318115], + [2.765212297439575, -4.144779682159424], + [3.148909568786621, -5.244848251342773], + [1.990189790725708, 5.660091400146484], + [1.5092099905014038, 5.109692573547363], + [-5.478817462921143, 4.804551124572754], + [-6.386403560638428, 7.96070671081543], + [2.113912343978882, -4.207004070281982], + [0.9257343411445618, -4.525846481323242], + [-2.477081775665283, 0.8220843076705933], + [-5.853841304779053, -1.1693521738052368], + [-2.5636394023895264, 2.6769676208496094], + [-5.060195446014404, -1.4364999532699585], + [-4.335259437561035, -0.16711312532424927], + [-5.459164142608643, -3.790227174758911], + [-1.9323920011520386, 5.9252028465271], + [-3.379315137863159, -0.7829234600067139], + [-3.5748260021209717, -2.052366018295288], + [-4.1192755699157715, 4.224151134490967], + [-5.850203037261963, 6.795379638671875], + [-2.3612420558929443, 1.6166901588439941], + [-6.5172200202941895, 7.72562313079834], + [-2.3894591331481934, 1.2062116861343384], + [-0.21205741167068481, 9.511869430541992], + [-4.321232318878174, -1.4900966882705688], + [4.6540422439575195, -0.35808679461479187], + [7.334001541137695, -1.5704447031021118], + [-4.9260573387146, -4.333573818206787], + [1.032313585281372, 3.025073766708374], + [-5.292357444763184, 7.4521636962890625], + [-5.636087417602539, 7.225140571594238], + [-5.259932994842529, 2.8834307193756104], + [-5.599179267883301, 2.8028364181518555], + [2.9228274822235107, -6.7975287437438965], + [-7.149643421173096, 9.088841438293457], + [5.467269420623779, -4.175277233123779], + [2.382148504257202, 0.7237533330917358], + [-4.12204122543335, -3.3334121704101562], + [-6.6607346534729, 8.783629417419434], + [3.2842137813568115, -4.90694522857666], + [-5.344673156738281, -3.467097043991089], + [-3.9100630283355713, -2.9533355236053467], + [9.287012100219727, -2.5661823749542236], + [2.8092219829559326, -4.231019020080566], + [3.3027451038360596, -6.7875823974609375], + [-5.752383708953857, -2.3413476943969727], + [-5.697498321533203, 6.779170036315918], + [2.2860677242279053, 0.7662942409515381], + [-6.9196672439575195, -2.0310120582580566], + [-6.768153190612793, 8.40142822265625], + [6.317188262939453, -1.3213328123092651], + [5.770715713500977, -1.2916719913482666], + [7.285484313964844, -1.9192769527435303], + [1.7753584384918213, -6.422158241271973], + [2.9564571380615234, 5.268136978149414], + [-2.1763994693756104, -2.2152652740478516], + [-1.7412041425704956, 3.658402681350708], + [-4.4893975257873535, -3.8385748863220215], + [7.171273708343506, -1.86890709400177], + [2.802598476409912, -4.438718795776367], + [-3.6977665424346924, 5.429867744445801], + [2.3736772537231445, -4.985145568847656], + [-1.9956259727478027, 0.27497196197509766], + [-4.561124324798584, 5.182888031005859], + [7.486440181732178, -1.9869812726974487], + [-3.836432695388794, 2.46993350982666], + [5.402140140533447, -1.1436651945114136], + [-3.6828956604003906, 4.110178470611572], + [5.667689800262451, 7.42763090133667], + [-2.6984474658966064, -2.3303091526031494], + [0.3731421232223511, 6.9335527420043945], + [2.789769411087036, -4.332370758056641], + [-4.868819713592529, -4.426647663116455], + [-3.4695417881011963, -1.3081601858139038], + [-3.3412725925445557, -4.385819435119629], + [-3.5835421085357666, -2.825047016143799], + [-2.849168062210083, -4.902813911437988], + [-5.103888511657715, 6.642736434936523], + [-2.5946643352508545, -2.138498306274414], + [-0.18360477685928345, 10.694605827331543], + [2.2087290287017822, -7.90509557723999], + [1.5649741888046265, 5.3911027908325195], + [-2.4470272064208984, 1.3216482400894165], + [2.282892942428589, -5.440088272094727], + [6.203308582305908, -1.5895437002182007], + [-2.1817550659179688, 2.720731258392334], + [-3.3524997234344482, 6.297382354736328], + [-5.202466011047363, -2.1015830039978027], + [-0.25441282987594604, 9.837409973144531], + [-5.1102471351623535, 6.981010437011719], + [-4.81608247756958, -2.9747021198272705], + [-6.166362762451172, 2.3538966178894043], + [-5.043909549713135, 7.951381683349609], + [-3.5962026119232178, -1.731460452079773], + [-0.21773117780685425, 10.4856595993042], + [2.5116097927093506, -7.888378143310547], + [-4.377512454986572, -3.863445520401001], + [5.028234958648682, -0.9523664712905884], + [-5.255393028259277, -4.3426666259765625], + [-0.10382319241762161, 10.026246070861816], + [-6.836283206939697, 8.537960052490234], + [-4.392309665679932, -1.200307011604309], + [-5.422586917877197, 5.186561584472656], + [-0.3325384855270386, 8.997432708740234], + [2.6953728199005127, -6.503571033477783], + [-0.3988569378852844, 10.684365272521973], + [1.690110445022583, -8.813690185546875], + [6.721170902252197, -1.79731023311615], + [-5.428528785705566, 8.09051513671875], + [-6.5484747886657715, 8.10240364074707], + [-5.081429958343506, -3.5535690784454346], + [-3.8395440578460693, -1.41287362575531], + [-5.627628803253174, -2.4501616954803467], + [-2.165766477584839, 0.28520286083221436], + [8.7816801071167, -2.4584763050079346], + [-2.0143327713012695, 4.367308616638184], + [8.31580638885498, -2.054450750350952], + [-5.3429436683654785, -3.173283815383911], + [6.670925140380859, -1.8297513723373413], + [3.0721018314361572, -4.67537784576416], + [-3.9902312755584717, -2.282851457595825], + [-3.0328867435455322, 4.97861385345459], + [1.6298617124557495, 6.188617706298828], + [1.15815007686615, 6.080299377441406], + [-4.783708095550537, -1.7796634435653687], + [0.9198598265647888, 6.593666076660156], + [2.107590436935425, -3.1783089637756348], + [0.5683803558349609, 0.025000032037496567], + [-6.004210948944092, -1.1768651008605957], + [2.856355905532837, -4.28489875793457], + [-0.3076975345611572, 10.541971206665039], + [0.11047857254743576, 9.776975631713867], + [1.7758090496063232, -3.1185898780822754], + [-2.304811477661133, 5.821146011352539], + [9.0291109085083, -2.7263238430023193], + [-5.656182765960693, 4.601339340209961], + [-2.8986318111419678, 2.2190656661987305], + [-3.5994575023651123, 3.5375444889068604], + [-0.2809460163116455, 10.080209732055664], + [3.5675108432769775, 7.446518898010254], + [9.796142578125, -2.6888701915740967], + [3.5473127365112305, 6.799508094787598], + [-2.2156286239624023, 1.3088091611862183], + [-0.7063996195793152, 13.489517211914062], + [-6.291021347045898, 2.2185657024383545], + [3.001904249191284, -4.219979286193848], + [-2.105079174041748, 2.7174670696258545], + [-5.4913554191589355, -3.471590518951416], + [1.8677568435668945, -3.087759256362915], + [-0.017453975975513458, 8.97397232055664], + [-3.8661911487579346, -4.03956937789917], + [2.6174371242523193, -4.263852596282959], + [6.385716915130615, -5.354299545288086], + [2.400024652481079, -4.242668151855469], + [2.903784990310669, -4.472888469696045], + [-0.09665221720933914, 9.74310302734375], + [2.005359411239624, -6.167677879333496], + [2.293355703353882, 0.7111093997955322], + [5.70849084854126, -1.2110874652862549], + [-7.670741558074951, -1.4978700876235962], + [2.170990228652954, 5.798266410827637], + [3.234961748123169, -4.831871509552002], + [7.370664119720459, -2.815760850906372], + [1.4419350624084473, -2.851550817489624], + [-2.5264456272125244, 0.7524141669273376], + [-5.522907733917236, -3.053464412689209], + [1.4740872383117676, 5.312666893005371], + [1.8149096965789795, -5.620879173278809], + [-4.051047325134277, -3.178920269012451], + [4.367386341094971, -4.157293319702148], + [1.730017900466919, 4.9132585525512695], + [-0.11741036921739578, 10.80809211730957], + [-0.47863245010375977, 9.067848205566406], + [-0.41457653045654297, 9.076240539550781], + [-6.394736289978027, 4.154304504394531], + [-4.055188179016113, 5.142909049987793], + [1.3336334228515625, 4.946418762207031], + [-7.696892261505127, -1.3813151121139526], + [-2.5088448524475098, 2.0072171688079834], + [-5.837512493133545, 8.239554405212402], + [-5.485888957977295, 2.1708590984344482], + [-2.209127902984619, 0.7179090976715088], + [-4.9481940269470215, -0.7592024207115173], + [7.528018474578857, -4.259385108947754], + [-1.2190340757369995, -0.8331589698791504], + [-5.154118061065674, 3.341611623764038], + [-5.768473148345947, 7.097212791442871], + [-5.740872859954834, -1.4294265508651733], + [-5.545094966888428, -0.813801646232605], + [2.636115789413452, -3.8934898376464844], + [-5.953451156616211, 3.925745964050293], + [-2.0986950397491455, -0.3871130347251892], + [-4.7779316902160645, 0.01743679866194725], + [8.827057838439941, -2.43884015083313], + [-5.579963207244873, -0.27951186895370483], + [3.541240930557251, -5.476535797119141], + [-4.4840874671936035, -2.4838740825653076], + [0.9852960705757141, -6.559681415557861], + [0.11607257276773453, -0.6592143774032593], + [-7.118549823760986, 0.05676388368010521], + [-2.1237878799438477, 0.5163834691047668], + [-0.1147274449467659, 5.203131675720215], + [8.852558135986328, -2.643019199371338], + [-7.086755275726318, -2.101435899734497], + [2.9227278232574463, -4.400261402130127], + [-0.25642791390419006, -0.9090064764022827], + [-5.913467884063721, -2.722078800201416], + [2.390902042388916, -3.6139869689941406], + [-5.750543594360352, -1.405075192451477], + [9.958990097045898, -2.7618653774261475], + [-3.7767069339752197, -0.9036973714828491], + [-3.641838788986206, -1.8976871967315674], + [-0.9714459180831909, 1.097059726715088], + [1.7723575830459595, 5.5048370361328125], + [2.467926025390625, -4.446349143981934], + [-5.058455944061279, 2.7790510654449463], + [2.4074556827545166, 5.712172031402588], + [0.9644706845283508, -7.4133405685424805], + [-3.7577946186065674, 3.7509243488311768], + [-6.991390228271484, 8.550006866455078], + [-5.353470325469971, -3.7870075702667236], + [3.69539213180542, -5.679824352264404], + [-2.3927719593048096, 1.7570050954818726], + [2.580993175506592, -8.139633178710938], + [-5.054012298583984, 5.205200672149658], + [-4.338693141937256, 4.892928600311279], + [-0.8334987759590149, -0.6024473905563354], + [0.43516063690185547, -0.2830513119697571], + [3.101884603500366, 6.171409606933594], + [-0.505385160446167, -4.57439661026001], + [1.2166650295257568, 0.15226098895072937], + [5.1455183029174805, -2.3564047813415527], + [0.06630855053663254, 10.356103897094727], + [2.1728599071502686, 0.42844992876052856], + [-1.4710345268249512, -0.9070727229118347], + [-5.048412799835205, -3.231532573699951], + [-3.903599977493286, 4.1349968910217285], + [-4.914912223815918, -1.603885531425476], + [7.593286991119385, -1.8341606855392456], + [-6.584596157073975, -2.212963819503784], + [9.646225929260254, -2.6454579830169678], + [2.025810480117798, -6.651279449462891], + [6.998245716094971, -4.259763717651367], + [-3.3421590328216553, -5.455323219299316], + [-4.234264850616455, -1.2223843336105347], + [-4.189047336578369, -2.1098885536193848], + [2.261728525161743, 5.615797996520996], + [-0.4668704867362976, 11.18752670288086], + [-3.3447349071502686, -1.2011892795562744], + [-3.5414998531341553, -1.6053880453109741], + [6.2196879386901855, -1.7684348821640015], + [-2.417742967605591, 1.349847674369812], + [5.746117115020752, -1.1052173376083374], + [-4.196753025054932, -0.4745185971260071], + [-2.2004711627960205, 2.6537506580352783], + [1.05495023727417, 0.5000860691070557], + [-3.887315034866333, -1.617730736732483], + [3.0383412837982178, -4.5944037437438965], + [-0.7991932034492493, -0.8577744960784912], + [4.079217433929443, 7.025580883026123], + [-2.5256447792053223, 2.1702117919921875], + [2.9148874282836914, -4.4299726486206055], + [-4.5978102684021, -3.5598957538604736], + [-1.7897744178771973, -1.0514583587646484], + [-6.648966312408447, 7.983234405517578], + [-7.232626438140869, -1.6263841390609741], + [2.317913293838501, -3.612661123275757], + [-0.18270164728164673, 9.584946632385254], + [0.5263305902481079, -0.7696442604064941], + [-0.19552475214004517, 9.13552474975586], + [-2.788228750228882, 1.2278103828430176], + [-2.5001232624053955, 3.7962653636932373], + [-6.747175693511963, 8.451114654541016], + [5.4585137367248535, 7.5295023918151855], + [-4.228099346160889, 4.19348669052124], + [-1.3752983808517456, -0.26577797532081604], + [-0.2765997052192688, 9.10925579071045], + [0.7649444937705994, 6.303910255432129], + [-4.322381019592285, -2.8469340801239014], + [-3.1500556468963623, -1.9596918821334839], + [9.824667930603027, -2.7346537113189697], + [2.8401923179626465, -5.789811134338379], + [-5.044698238372803, -2.750066041946411], + [8.074570655822754, -2.620939016342163], + [1.9259910583496094, 6.029618263244629], + [-5.7480316162109375, -2.8476827144622803], + [-5.081476211547852, 7.66636323928833], + [-7.350611209869385, 9.130212783813477], + [-6.090803146362305, 7.3176679611206055], + [-5.127135753631592, -3.311195135116577], + [3.2156827449798584, -4.804357528686523], + [-4.716897964477539, 4.939761161804199], + [-0.8499955534934998, 5.509736061096191], + [-3.151207447052002, -4.114569664001465], + [3.1448423862457275, 6.453517436981201], + [1.5059975385665894, -8.555203437805176], + [-8.028536796569824, -1.8890416622161865], + [-4.2088799476623535, -2.3601362705230713], + [-2.469287872314453, 1.866086483001709], + [10.30538272857666, -2.8720924854278564], + [-2.394061326980591, 1.0379098653793335], + [-1.917000651359558, 2.4964754581451416], + [-6.043365478515625, 7.158469200134277], + [5.45180606842041, -3.272650718688965], + [5.802380084991455, -2.39907169342041], + [-4.97342586517334, -1.9952055215835571], + [-4.438104629516602, -4.05452823638916], + [2.1766252517700195, -8.552257537841797], + [2.8528735637664795, -4.535945415496826], + [2.8054358959198, -4.280690670013428], + [2.536602258682251, -2.1923978328704834], + [2.532379388809204, -3.8783438205718994], + [7.590889930725098, -3.3759920597076416], + [-5.12307071685791, 2.089580535888672], + [2.315758228302002, 6.029524326324463], + [2.3357369899749756, -7.619346618652344], + [-4.335297107696533, -3.0089902877807617], + [7.268064975738525, -2.179655075073242], + [-1.7297511100769043, 1.8925104141235352], + [1.6747076511383057, -6.446918487548828], + [-4.579836368560791, 5.729475975036621], + [2.78851580619812, -4.231889724731445], + [-2.363138437271118, 0.823253333568573], + [-2.1702446937561035, 1.1885161399841309], + [-3.7597315311431885, -1.5904327630996704], + [-4.954557418823242, -2.7345731258392334], + [-3.9457926750183105, -2.443573236465454], + [-5.716874599456787, -3.2543537616729736], + [5.980173587799072, -1.3923434019088745], + [-3.154418468475342, 5.9260759353637695], + [-4.104262828826904, -3.961022138595581], + [-5.468998432159424, -2.593972682952881], + [5.113162994384766, 7.133787155151367], + [8.536826133728027, -2.4168732166290283], + [-2.3680012226104736, -0.11819547414779663], + [-1.2064934968948364, -0.8768008947372437], + [-6.832040309906006, 0.9900099039077759], + [1.762354850769043, -8.437483787536621], + [-5.325199604034424, 7.384213447570801], + [-2.250816822052002, 0.6536054611206055], + [-5.232959270477295, 6.174785614013672], + [0.8422737717628479, -6.490372657775879], + [7.0980682373046875, -1.9045100212097168], + [-2.7618730068206787, 2.025970935821533], + [1.705353021621704, -6.793474197387695], + [3.128662347793579, 6.40052604675293], + [5.356795787811279, -1.1256147623062134], + [0.6608682870864868, -0.6323398947715759], + [-5.874398231506348, -0.21096694469451904], + [3.8410398960113525, 6.650629997253418], + [5.9041571617126465, -1.2137807607650757], + [2.8808956146240234, -4.3533477783203125], + [-5.5067362785339355, 4.493077754974365], + [-0.7735677361488342, -1.1074000597000122], + [9.190985679626465, -2.5767180919647217], + [-6.2358245849609375, -2.0415520668029785], + [5.836876392364502, -1.1646796464920044], + [7.495664119720459, -1.7962397336959839], + [2.147623062133789, 0.5049903988838196], + [9.787904739379883, -2.7122228145599365], + [-3.699509382247925, -1.800312876701355], + [3.009730577468872, -4.532984256744385], + [2.8903462886810303, -5.9806084632873535], + [3.156315326690674, -5.926539421081543], + [0.44278281927108765, -3.116691827774048], + [2.875061273574829, -7.457398414611816], + [-5.491388320922852, -0.9988151788711548], + [1.7588406801223755, -6.835714817047119], + [-4.018046855926514, -2.356550931930542], + [4.017039775848389, -1.0370272397994995], + [8.822333335876465, -2.2789130210876465], + [-2.0693821907043457, 2.968961000442505], + [2.216841459274292, 3.169316053390503], + [1.0957939624786377, -6.28860330581665], + [1.4751149415969849, -7.727080821990967], + [2.2141239643096924, 5.574751377105713], + [2.1869566440582275, 4.873678207397461], + [-4.3262739181518555, -6.393986701965332], + [1.0184506177902222, -7.349882125854492], + [1.7695744037628174, 5.236502170562744], + [-0.16514313220977783, -1.5709024667739868], + [10.103632926940918, -2.798793077468872], + [6.581661701202393, -1.3755698204040527], + [-2.441814422607422, 0.690982460975647], + [-4.664414882659912, -2.910353899002075], + [-0.372253954410553, 10.643111228942871], + [3.033184766769409, 6.1319193840026855], + [3.691016674041748, -1.8346048593521118], + [1.866644263267517, -9.051913261413574], + [1.8411389589309692, 5.396561622619629], + [-1.2001272439956665, -1.0284115076065063], + [2.3182647228240967, -3.8223371505737305], + [-4.899055480957031, 0.06102496013045311], + [3.1587603092193604, -5.072903633117676], + [7.051900386810303, -5.637542724609375], + [-1.1570758819580078, 1.5053131580352783], + [-0.3959580063819885, 9.764026641845703], + [-2.212430953979492, 1.2865607738494873], + [2.341625928878784, -7.497323036193848], + [10.118210792541504, -2.813308000564575], + [-4.687750339508057, -1.7990485429763794], + [-5.421827793121338, 4.402525901794434], + [9.102818489074707, -2.6178300380706787], + [-4.358914852142334, -2.0600697994232178], + [6.361514568328857, -1.2091021537780762], + [-2.943538188934326, -2.1038925647735596], + [-2.7715582847595215, -4.300520896911621], + [-5.655730247497559, 7.426414489746094], + [-0.11427026242017746, -0.7776628732681274], + [0.24591928720474243, 9.721485137939453], + [-0.41674530506134033, 8.320880889892578], + [-2.710801124572754, -2.0743589401245117], + [2.801830768585205, -4.299430847167969], + [0.09594308584928513, 5.1612653732299805], + [-0.28031718730926514, -1.0066628456115723], + [-0.6112302541732788, 9.033884048461914], + [-0.21639078855514526, 9.904264450073242], + [8.660855293273926, -2.7561633586883545], + [2.434664487838745, -5.3796610832214355], + [-3.6972599029541016, -4.420113563537598], + [-0.03139723092317581, 9.80482292175293], + [7.402927875518799, -1.6255110502243042], + [2.6277356147766113, -4.341368675231934], + [-4.367799282073975, -0.4363064169883728], + [2.2977588176727295, 5.333830833435059], + [-0.42795664072036743, 9.398992538452148], + [0.650789737701416, 5.1306962966918945], + [-4.836047649383545, 2.882667064666748], + [5.059085845947266, 7.249199390411377], + [-5.805684566497803, 6.112744331359863], + [-3.7796058654785156, -2.3658246994018555], + [2.971187114715576, -4.491166591644287], + [2.7544920444488525, 1.4738465547561646], + [-5.934481143951416, -1.1257940530776978], + [-5.0556769371032715, -4.4549407958984375], + [-0.24812966585159302, 10.893033981323242], + [-5.387962818145752, -2.2131664752960205], + [8.827858924865723, -2.425330400466919], + [-4.202347278594971, -2.6133158206939697], + [-2.5088958740234375, 1.6625410318374634], + [-1.785524845123291, -1.9566001892089844], + [-5.834627628326416, -2.0063869953155518], + [3.9469382762908936, 7.123435020446777], + [-0.576788604259491, 4.64056921005249], + [1.9343304634094238, -5.555994033813477], + [-0.09650979191064835, -0.9896299242973328], + [-5.566259860992432, -2.5293335914611816], + [-2.849177598953247, -3.443256139755249], + [-5.978739261627197, 4.241158485412598], + [2.4014217853546143, 1.0089597702026367], + [-0.2686064839363098, 10.392261505126953], + [-5.517021656036377, -1.997996211051941], + [6.903688907623291, -3.7160234451293945], + [-0.2246665358543396, 9.563554763793945], + [-2.3677494525909424, 6.26685905456543], + [-2.392216920852661, 0.8657286763191223], + [-4.928626537322998, -3.1481945514678955], + [2.673438310623169, -8.246231079101562], + [-2.960075616836548, 6.281062126159668], + [2.9754507541656494, -4.658096790313721], + [-0.17958825826644897, 9.750672340393066], + [-0.16309654712677002, 0.2946436107158661], + [-5.962132930755615, -2.0413334369659424], + [-7.765713214874268, -1.5954853296279907], + [-4.887020587921143, 6.705096244812012], + [-3.879821538925171, 1.3777291774749756], + [0.5606632232666016, 0.48749417066574097], + [-3.3361644744873047, 7.7247514724731445], + [3.249157190322876, -4.855754852294922], + [1.9543912410736084, -6.906773567199707], + [-0.2240806519985199, -1.6023093461990356], + [3.1420302391052246, -5.068515777587891], + [5.921886920928955, -0.8055105209350586], + [-5.942850589752197, -2.9782261848449707], + [-5.917626857757568, -3.010296106338501], + [-0.30182111263275146, 9.129324913024902], + [2.61997652053833, -3.689220666885376], + [8.707704544067383, -2.4219624996185303], + [-4.410135269165039, -2.607095956802368], + [-4.706143379211426, 7.019965648651123], + [1.21109139919281, 1.8885821104049683], + [-6.465877532958984, -0.9431843757629395], + [7.370936393737793, -1.742560863494873], + [6.1297101974487305, 7.868813991546631], + [-4.206054210662842, -3.402653694152832], + [1.4569171667099, -0.1616104394197464], + [3.2102768421173096, -5.034735679626465], + [-4.794935703277588, -4.346757888793945], + [-0.19199040532112122, -1.0998520851135254], + [2.2871577739715576, -4.985379219055176], + [3.486783266067505, -6.674635887145996], + [-4.850371360778809, 6.562091827392578], + [-5.503201961517334, -0.5194982290267944], + [5.339460849761963, -4.831762313842773], + [2.908968210220337, -6.070096969604492], + [-5.369743824005127, 2.5165748596191406], + [2.0412700176239014, -9.809843063354492], + [8.991446495056152, -2.481257200241089], + [2.9369289875030518, -5.816379547119141], + [-3.8854167461395264, -2.510493516921997], + [8.810527801513672, -2.575962781906128], + [2.6155505180358887, -3.7456648349761963], + [5.234415531158447, -1.2089117765426636], + [-0.12059522420167923, -1.350386381149292], + [-4.248701095581055, -0.4835937023162842], + [-2.42570161819458, 2.872356653213501], + [-5.697721481323242, -0.8410165309906006], + [-0.6125594973564148, 9.75390625], + [8.920876502990723, -2.7468230724334717], + [-4.821113109588623, -2.7757952213287354], + [-4.444241523742676, -0.5593949556350708], + [1.5551987886428833, 5.588025093078613], + [8.97048282623291, -2.5048959255218506], + [2.3633806705474854, 6.017136573791504], + [0.39835667610168457, -0.49714750051498413], + [-2.0795633792877197, 0.26783937215805054], + [-5.158482074737549, 3.239436626434326], + [-4.215980529785156, -3.961761474609375], + [-1.862567663192749, 1.6576000452041626], + [-2.3321313858032227, -0.6094250679016113], + [0.6528308987617493, -0.3029271960258484], + [-0.25921911001205444, -0.9224756956100464], + [-4.98864221572876, -2.171790838241577], + [-4.748550891876221, 2.617738962173462], + [3.0782768726348877, -6.311520576477051], + [-1.0888274908065796, 10.149360656738281], + [-6.3549580574035645, -0.829188346862793], + [2.717945098876953, -4.412576198577881], + [1.8350927829742432, -7.140523910522461], + [-4.795051574707031, -2.7212307453155518], + [1.3966745138168335, 6.449100494384766], + [3.077338218688965, -4.615541458129883], + [-5.021605014801025, -3.072439670562744], + [-5.184840679168701, 1.2449854612350464], + [7.9679789543151855, -1.8696880340576172], + [3.4302561283111572, -5.107982635498047], + [2.0037529468536377, -5.799007415771484], + [3.1939709186553955, -7.638392925262451], + [-0.6050524711608887, 9.377677917480469], + [-2.302851438522339, 3.0717062950134277], + [-3.2343170642852783, -4.826583385467529], + [-2.7400617599487305, 2.806889295578003], + [-6.151357173919678, -2.0177059173583984], + [-6.884469509124756, 1.9647754430770874], + [-0.23281675577163696, 0.44583994150161743], + [5.5388875007629395, -2.0189273357391357], + [5.981784343719482, -3.692713499069214], + [7.796885967254639, -1.926669955253601], + [-1.5618042945861816, -2.7781012058258057], + [-2.5576329231262207, 2.4874308109283447], + [-3.0555293560028076, 4.806637763977051], + [-7.669278621673584, -0.9024963974952698], + [-2.4898266792297363, 2.0894381999969482], + [-6.726037979125977, 8.076373100280762], + [-7.278411865234375, -2.164832592010498], + [-6.502381801605225, -0.46749448776245117], + [0.8334433436393738, 0.4284563660621643], + [3.15756893157959, -4.723794937133789], + [-5.093410968780518, 0.8849514722824097], + [3.007880926132202, -4.51600456237793], + [0.19203579425811768, -1.1961086988449097], + [-4.712279796600342, 6.202208518981934], + [-3.3817074298858643, -0.5852311849594116], + [2.499987840652466, -5.252197265625], + [3.47172212600708, -5.782812118530273], + [-4.564174175262451, -0.6628795266151428], + [-2.9526333808898926, -3.89445161819458], + [2.3774185180664062, 6.225045204162598], + [2.0448801517486572, 5.140584945678711], + [9.090786933898926, -2.450958490371704], + [6.164140224456787, -1.7174540758132935], + [-8.379770278930664, -1.3070638179779053], + [-3.875255823135376, -3.3319334983825684], + [2.7852113246917725, -6.968719482421875], + [7.142950534820557, -2.933810234069824], + [7.855735778808594, -1.8981297016143799], + [5.1284332275390625, -0.8782540559768677], + [-2.2112207412719727, 1.156227707862854], + [-4.55452299118042, 6.645122528076172], + [1.6760029792785645, -7.792243003845215], + [-2.2991607189178467, 1.143467664718628], + [-4.457733631134033, -2.6841301918029785], + [-6.740436553955078, -0.11454987525939941], + [2.7163913249969482, -4.5723161697387695], + [-1.6206191778182983, 2.2019150257110596], + [2.8543829917907715, -4.794843673706055], + [-3.8287603855133057, -3.298017740249634], + [-5.642246246337891, -0.5076868534088135], + [6.57987117767334, -1.4251365661621094], + [4.705554485321045, 6.296211242675781], + [-7.030686855316162, -0.8724094033241272], + [-6.668447971343994, 8.34657096862793], + [-5.060269355773926, -1.734012484550476], + [6.202086925506592, -1.4365522861480713], + [2.562690258026123, -6.881390571594238], + [-0.4162375330924988, 10.716227531433105], + [-3.008831739425659, -3.6431808471679688], + [6.830743312835693, -5.923577785491943], + [-0.340087354183197, 11.21733283996582], + [-3.0450007915496826, -2.6691384315490723], + [0.8059571385383606, -2.479739189147949], + [1.1496027708053589, 2.6046154499053955], + [-3.420332193374634, -1.7420400381088257], + [-2.418039560317993, -1.631056308746338], + [-2.2835915088653564, 1.5888891220092773], + [-2.557068109512329, 2.749537944793701], + [2.0320887565612793, -10.021578788757324], + [6.433528900146484, -1.6001631021499634], + [-2.6583409309387207, 0.5222836136817932], + [9.64001178741455, -2.6885488033294678], + [-2.349931001663208, 1.828783392906189], + [6.262514591217041, -2.4802751541137695], + [3.0491268634796143, -2.2729153633117676], + [-5.458101749420166, 4.587472915649414], + [-2.492168426513672, 2.038290500640869], + [-0.266478955745697, 9.83812141418457], + [-0.3033803105354309, 10.65870189666748], + [-4.971436023712158, 0.4969831705093384], + [0.5577427744865417, 2.627854585647583], + [-6.780751705169678, -1.9347249269485474], + [-0.3638548254966736, 10.988831520080566], + [1.905214548110962, 5.4316511154174805], + [-3.829298257827759, 4.341167449951172], + [2.9305570125579834, -4.417847633361816], + [-3.526125907897949, 2.4319589138031006], + [-5.452639579772949, 4.494312286376953], + [-4.448894023895264, -2.5934908390045166], + [-5.199057579040527, 6.733669281005859], + [3.3764045238494873, 0.536223292350769], + [2.4017908573150635, -7.308247089385986], + [-2.3798129558563232, 2.0993432998657227], + [6.556944370269775, -5.836544036865234], + [-0.7196534276008606, 5.452962875366211], + [-0.2460656762123108, 10.068723678588867], + [-4.879855632781982, -4.503443717956543], + [-2.1762502193450928, 2.679644823074341], + [-5.4562153816223145, -3.5610272884368896], + [-4.323302268981934, 0.21431666612625122], + [-7.160586357116699, -1.254736065864563], + [-4.735215663909912, 7.823856353759766], + [-2.235701084136963, 2.7608397006988525], + [-6.894632339477539, 8.385059356689453], + [-4.247377872467041, -5.952110290527344], + [-2.4509708881378174, 0.023985739797353745], + [-2.184032678604126, 1.3597898483276367], + [-3.240663766860962, 4.390655517578125], + [-7.271045207977295, -0.8510257005691528], + [0.7512974739074707, 0.4388345777988434], + [-5.31000280380249, 4.844993591308594], + [-4.415122985839844, -3.4965267181396484], + [2.2570812702178955, -8.452357292175293], + [-4.364485263824463, 6.760339736938477], + [0.9893292784690857, -4.360978603363037], + [-1.437540888786316, -2.196396589279175], + [-8.168645858764648, 9.9871187210083], + [0.5402665138244629, -6.664867401123047], + [-0.07788199931383133, 9.47817611694336], + [3.0147221088409424, -5.0184197425842285], + [-3.2704617977142334, -1.4307061433792114], + [-5.323875904083252, 3.3178467750549316], + [3.2133827209472656, -4.987421035766602], + [-4.691947937011719, -1.754332184791565], + [-2.890742063522339, 3.0305356979370117], + [0.6794769763946533, -0.296394944190979], + [-2.1939659118652344, 5.775659561157227], + [-3.6643497943878174, 6.005218505859375], + [3.0359418392181396, -6.573739528656006], + [7.825321197509766, -1.9608651399612427], + [-4.228604316711426, -3.4331462383270264], + [-4.6047163009643555, -3.0974135398864746], + [-3.792999029159546, -1.9156090021133423], + [-6.85381555557251, -2.604814052581787], + [2.1972901821136475, -3.739543914794922], + [-2.799062967300415, 2.252573013305664], + [3.486048698425293, -3.71398663520813], + [-3.820570707321167, -2.402287006378174], + [7.940292835235596, -2.2985916137695312], + [-2.4545304775238037, 5.668867111206055], + [-3.8263015747070312, -2.202023506164551], + [-0.2035839557647705, -1.5725754499435425], + [-0.218511164188385, 9.63519287109375], + [-6.400576114654541, -2.774738311767578], + [-6.905305862426758, -0.9749506711959839], + [-2.3826346397399902, 2.6893789768218994], + [-6.05949068069458, -1.0188440084457397], + [9.285845756530762, -2.5749640464782715], + [-7.423730850219727, -0.3722118139266968], + [-3.127915143966675, 6.3750386238098145], + [-2.614018201828003, -4.264956474304199], + [-0.1474875807762146, 10.077482223510742], + [-2.0255019664764404, 0.6730021238327026], + [-5.253775119781494, 6.378851890563965], + [5.917354583740234, -1.0151199102401733], + [-6.692232131958008, 8.59512710571289], + [5.516936302185059, -1.0340508222579956], + [-4.260500431060791, -1.023276925086975], + [-2.6863062381744385, 6.553609848022461], + [-4.84064245223999, 5.759163856506348], + [-6.411424160003662, -1.0858051776885986], + [-0.10396415740251541, 9.819219589233398], + [-0.3721965551376343, -0.9175952672958374], + [1.896094799041748, -2.7150182723999023], + [-0.7242278456687927, -1.1737139225006104], + [3.491626024246216, 6.612478256225586], + [-0.9687716364860535, 0.5615426301956177], + [-2.865389585494995, -1.4768249988555908], + [-6.002377033233643, -0.12822389602661133], + [5.779865741729736, 8.124502182006836], + [-3.257438898086548, -1.0538514852523804], + [1.4437276124954224, -7.507501602172852], + [-2.2930662631988525, 1.581768274307251], + [-5.059125900268555, 4.932277202606201], + [2.418581962585449, 1.1056770086288452], + [-6.80747127532959, -1.188428521156311], + [1.5502192974090576, -7.54004430770874], + [2.8337676525115967, 5.074628829956055], + [-2.338412284851074, 1.7697783708572388], + [-4.361520290374756, 6.948760986328125], + [5.951413631439209, 8.108144760131836], + [-5.439427852630615, -0.8958834409713745], + [6.34512996673584, -1.2624666690826416], + [-0.4331028461456299, 10.74034595489502], + [-2.76627779006958, 3.1973586082458496], + [0.5538902282714844, -0.4055640697479248], + [1.0019232034683228, 5.519518852233887], + [-5.447425365447998, 5.2899627685546875], + [-6.4048285484313965, 8.68094539642334], + [-0.39729243516921997, 10.705647468566895], + [-2.2804625034332275, -0.07464337348937988], + [2.6987287998199463, -4.045557498931885], + [5.2924370765686035, -0.654082179069519], + [-3.6201272010803223, -2.8147079944610596], + [-5.701304912567139, -2.9210493564605713], + [2.4346652030944824, -4.657071113586426], + [-0.4276772141456604, 11.101417541503906], + [-4.424582004547119, 5.537552833557129], + [-5.721867084503174, -5.328930854797363], + [-5.281228065490723, -1.111894965171814], + [4.050354480743408, 6.757646560668945], + [-0.6427062153816223, -1.2039169073104858], + [-4.560726165771484, -3.642098903656006], + [6.6113057136535645, -1.5267387628555298], + [2.9038708209991455, -4.458651065826416], + [4.813919544219971, 7.474282264709473], + [3.6840171813964844, 6.907874584197998], + [2.3172833919525146, 7.048100471496582], + [-3.340054750442505, 1.9964839220046997], + [-0.2077406644821167, 10.199762344360352], + [8.7514066696167, -2.4770209789276123], + [-7.382688045501709, 9.165857315063477], + [-0.09729284793138504, 10.693649291992188], + [2.784226655960083, -4.475454807281494], + [-4.92553186416626, -3.2635390758514404], + [-3.572319269180298, -3.8916256427764893], + [-6.066615581512451, 7.06170654296875], + [-4.48593807220459, 1.6028128862380981], + [-6.111384868621826, -0.23867857456207275], + [-2.374066114425659, 1.3412643671035767], + [2.9732348918914795, -5.04909086227417], + [-2.2598040103912354, 3.2354416847229004], + [-3.7676942348480225, -4.689901828765869], + [2.8233325481414795, -6.3395094871521], + [4.853161334991455, -0.9465940594673157], + [-4.463730335235596, 4.823801517486572], + [-6.444056987762451, 8.229782104492188], + [2.980879783630371, -4.550815582275391], + [2.561357259750366, -2.9611289501190186], + [-0.10867852717638016, 10.705461502075195], + [-2.1457464694976807, 0.5716652870178223], + [2.9258105754852295, -4.19430685043335], + [8.475930213928223, -2.6592440605163574], + [2.8508846759796143, -4.6604156494140625], + [1.3693146705627441, -5.656423568725586], + [-5.553689479827881, 4.414217948913574], + [-5.699253559112549, 3.6290578842163086], + [-6.0766777992248535, 7.349186897277832], + [-6.837507724761963, 8.63885498046875], + [-2.348332643508911, 0.6986453533172607], + [3.3867692947387695, -4.539590835571289], + [-4.098927974700928, -3.853149175643921], + [6.905480861663818, -1.9273470640182495], + [-2.536635160446167, 2.8075034618377686], + [-7.538321495056152, -1.315320611000061], + [-4.770997524261475, 4.117014408111572], + [-2.642716646194458, -2.0904364585876465], + [-3.3788959980010986, -1.575814127922058], + [-3.9524943828582764, -2.6829869747161865], + [-4.197421550750732, -2.628889322280884], + [-0.7438110709190369, 12.374497413635254], + [-2.2089438438415527, 0.9931538105010986], + [-2.3273568153381348, -1.7997252941131592], + [-4.589720726013184, -2.676018714904785], + [0.9558807015419006, -0.013296935707330704], + [-2.6342830657958984, 1.4026318788528442], + [2.860656499862671, -4.691647052764893], + [2.1065523624420166, -3.8056747913360596], + [-5.737803936004639, 0.960397481918335], + [-4.7379560470581055, -4.177915096282959], + [2.58771014213562, 0.9738752841949463], + [-5.274839878082275, -2.3019168376922607], + [-3.3553030490875244, -4.233582496643066], + [-7.03900146484375, 2.0809223651885986], + [-6.902126312255859, -1.5456892251968384], + [-0.6128594279289246, 12.206550598144531], + [3.8163979053497314, 5.9278154373168945], + [-6.098717212677002, 4.590268611907959], + [-4.114108562469482, -4.560975074768066], + [-0.2620851993560791, 9.555524826049805], + [-5.1348795890808105, 3.87353515625], + [-3.914902925491333, -2.419389009475708], + [-4.624885082244873, 4.216940879821777], + [-5.0097856521606445, -3.2721235752105713], + [-1.2785494327545166, -1.2545251846313477], + [-6.032280445098877, 0.1573854684829712], + [-0.38387149572372437, 10.350160598754883], + [-5.341475009918213, 6.149600028991699], + [1.6959331035614014, 5.181571006774902], + [-4.125049591064453, -1.7948623895645142], + [-2.6131298542022705, 5.235860824584961], + [-2.1000750064849854, 2.5077860355377197], + [8.985167503356934, -2.4893624782562256], + [0.6954667568206787, 5.3382368087768555], + [-5.341573238372803, 2.5801315307617188], + [-3.7753093242645264, -3.0056262016296387], + [2.9017093181610107, -4.433375835418701], + [1.8721317052841187, 4.835565567016602], + [2.6804873943328857, -4.531195640563965], + [-5.241795063018799, 5.630287170410156], + [6.588480472564697, -1.7320739030838013], + [3.318657159805298, 4.9437408447265625], + [-0.3745000958442688, -0.9019680619239807], + [-5.17861795425415, 3.6706058979034424], + [1.9534897804260254, 2.911205768585205], + [2.8932077884674072, -5.105598449707031], + [-0.18185648322105408, -0.5161174535751343], + [-0.3539930582046509, 11.969438552856445], + [1.4295262098312378, 0.4568878412246704], + [2.874866247177124, -4.339856147766113], + [-4.1697916984558105, -2.575039863586426], + [-7.1767802238464355, -1.2316033840179443], + [-5.69038724899292, -2.5510878562927246], + [-0.3117120862007141, 9.478590965270996], + [-0.24708330631256104, 9.881547927856445], + [-2.6390435695648193, -1.5889824628829956], + [9.490657806396484, -2.587451219558716], + [6.7341532707214355, -1.3547319173812866], + [3.1648550033569336, -4.747996807098389], + [-3.327646493911743, -2.0026187896728516], + [-5.331704616546631, 6.536124229431152], + [-5.422530651092529, -2.3789491653442383], + [8.262001037597656, -1.8132715225219727], + [-3.621284246444702, -6.052521705627441], + [-5.8736042976379395, -2.532348155975342], + [-0.677912712097168, -0.41553863883018494], + [-5.680305004119873, -1.3395761251449585], + [-4.212643623352051, 4.154487609863281], + [2.041001796722412, 4.963657855987549], + [8.804089546203613, -2.425452470779419], + [-4.321258068084717, -2.096365451812744], + [-0.28068286180496216, 10.098297119140625], + [-6.477022647857666, 7.916826248168945], + [-2.199305534362793, 0.2480699121952057], + [-3.7606313228607178, -2.739809036254883], + [-0.16101104021072388, 10.106289863586426], + [2.177182197570801, 5.753439426422119], + [4.5833916664123535, 6.916362762451172], + [-5.835113048553467, 7.878043174743652], + [-0.17197901010513306, 9.755995750427246], + [-6.217555522918701, 3.28867506980896], + [-4.981980800628662, 5.231722831726074], + [3.283653497695923, -5.534455299377441], + [3.0884740352630615, -4.755092620849609], + [5.479640483856201, -0.6190032958984375], + [5.628358840942383, -1.23405921459198], + [-5.448797702789307, -2.999267578125], + [-0.741811215877533, 12.668329238891602], + [1.713017463684082, 0.050987835973501205], + [2.8377997875213623, -4.8033447265625], + [-3.478428602218628, -0.19079214334487915], + [-3.811155319213867, 2.618068218231201], + [-0.19862648844718933, -0.8590465784072876], + [-4.438203811645508, -3.1971147060394287], + [-2.2528064250946045, -1.775478482246399], + [2.0948679447174072, 5.056489944458008], + [2.0603654384613037, -9.410636901855469], + [5.634106159210205, 7.230754852294922], + [3.2645790576934814, 1.3455135822296143], + [-0.16004645824432373, 9.658761024475098], + [7.700144290924072, -2.3282358646392822], + [-2.751556158065796, 6.403608322143555], + [0.3842657208442688, 2.348676919937134], + [-0.48049306869506836, 9.515783309936523], + [5.244718074798584, -1.4202979803085327], + [-0.18731480836868286, 9.756500244140625], + [0.4738020896911621, 4.892334938049316], + [-2.3401942253112793, 0.8002303838729858], + [-0.3049439787864685, 9.260286331176758], + [-5.0900397300720215, -3.272923231124878], + [1.9292452335357666, 1.329018235206604], + [2.5931456089019775, -4.2694902420043945], + [1.822859764099121, 5.065150260925293], + [-0.3335450291633606, 11.380624771118164], + [-4.228052616119385, -3.130951166152954], + [7.289586544036865, -4.8693437576293945], + [0.5389476418495178, -5.672611713409424], + [1.0341897010803223, -7.282803535461426], + [-0.6974363327026367, -3.605731725692749], + [2.2445461750030518, 6.047617435455322], + [-3.4232773780822754, -0.693644642829895], + [-6.348995685577393, -1.8411706686019897], + [0.01737900823354721, -1.1950082778930664], + [-5.71293830871582, 5.985795021057129], + [-3.825984239578247, -2.553227424621582], + [-0.14446353912353516, 10.239472389221191], + [-5.574339866638184, -4.125558853149414], + [0.5473954677581787, -0.5983425378799438], + [-2.058289051055908, 1.3013428449630737], + [-3.62490177154541, -2.393803596496582], + [-5.580240249633789, 7.666309356689453], + [-1.2933192253112793, -2.4233860969543457], + [-0.5938012599945068, -1.5517696142196655], + [-5.811949729919434, -2.9353582859039307], + [-0.18122297525405884, 9.891414642333984], + [-2.388460159301758, 1.1500149965286255], + [2.218740224838257, -3.3336353302001953], + [4.522855281829834, -3.887234687805176], + [-6.993968486785889, -2.6210410594940186], + [0.40868324041366577, -0.4744749963283539], + [-4.819275379180908, 2.1755499839782715], + [-6.168328762054443, 1.8064544200897217], + [2.9066741466522217, -4.3761773109436035], + [1.6657757759094238, 5.096464157104492], + [-5.082549571990967, 7.134342193603516], + [3.01794695854187, -7.2145867347717285], + [4.1421895027160645, 6.998957633972168], + [-4.823770046234131, -4.767608642578125], + [-2.1517481803894043, -3.4791409969329834], + [-4.881885051727295, 1.8850256204605103], + [-3.336749315261841, -4.360647201538086], + [5.623069763183594, -1.1041783094406128], + [2.814610004425049, -4.348024845123291], + [-5.8444952964782715, 8.105643272399902], + [-6.0984015464782715, 5.5306901931762695], + [7.424480438232422, -1.7666248083114624], + [-4.2936272621154785, -1.8377379179000854], + [-2.4374659061431885, 3.012632369995117], + [-2.681551218032837, 2.401561737060547], + [2.457490921020508, -4.09833288192749], + [-3.443371057510376, -0.8813210725784302], + [-0.06619305163621902, -0.995890736579895], + [-5.091346263885498, -6.261966228485107], + [1.69780695438385, 6.356136322021484], + [-4.630519866943359, -6.649746894836426], + [-1.8792462348937988, 1.2343450784683228], + [2.4747209548950195, -4.062926769256592], + [-9.017364501953125, -1.0484099388122559], + [-0.8592289090156555, 9.030292510986328], + [5.921028137207031, -0.8936271667480469], + [2.9516232013702393, 0.9131835103034973], + [2.8634088039398193, 0.8659761548042297], + [-6.786161422729492, 8.417798042297363], + [2.896017074584961, -4.571430206298828], + [-7.344872951507568, -0.5639346837997437], + [-2.6449155807495117, 1.2883515357971191], + [-5.3857645988464355, 6.322357177734375], + [-2.865995168685913, -1.6279596090316772], + [-5.775776386260986, 1.48672616481781], + [-0.9159326553344727, -0.6671493053436279], + [9.413885116577148, -2.439927816390991], + [-6.590552806854248, -0.7213112711906433], + [1.5703396797180176, -5.738598823547363], + [-3.3858492374420166, -5.4982147216796875], + [-5.140374183654785, -2.6241652965545654], + [0.1846386194229126, -4.594649791717529], + [-4.531923770904541, -2.7750964164733887], + [1.8559472560882568, 1.791784405708313], + [-5.631724834442139, 1.672406792640686], + [-7.160959720611572, -0.9612529277801514], + [-0.5399729609489441, 0.8200457096099854], + [1.2887547016143799, -7.0956034660339355], + [-4.620906352996826, 2.5366177558898926], + [-2.366558074951172, 0.329273521900177], + [-6.511979579925537, -1.3793548345565796], + [1.7681680917739868, -8.764106750488281], + [0.013612918555736542, 10.70131778717041], + [1.4240429401397705, 0.6886692047119141], + [-5.565361499786377, 7.937313079833984], + [9.269840240478516, -2.5884430408477783], + [1.7521915435791016, 5.208610534667969], + [-2.58943247795105, 2.1394946575164795], + [9.074910163879395, -2.416703939437866], + [1.351696491241455, -5.719886779785156], + [-4.90988302230835, 0.0704689621925354], + [-6.160836696624756, 8.624055862426758], + [3.0910232067108154, -4.632630348205566], + [1.29718017578125, -4.679758071899414], + [-4.129571437835693, -3.3383562564849854], + [4.305129528045654, -3.035393476486206], + [-3.1128361225128174, -2.9604852199554443], + [2.171393632888794, 5.884836673736572], + [-0.09179093688726425, -1.556027889251709], + [-0.2237379550933838, 10.521110534667969], + [-0.20649933815002441, 9.816682815551758], + [-1.7980971336364746, 0.9902138710021973], + [-5.105666160583496, -3.441784620285034], + [-4.513369083404541, -3.546154022216797], + [1.0738096237182617, -6.285582542419434], + [1.4035165309906006, -7.772228240966797], + [-0.07879293709993362, 8.097381591796875], + [-2.4157886505126953, -2.6007418632507324], + [7.780436038970947, -1.5646034479141235], + [-6.171713352203369, 8.313835144042969], + [-4.561415672302246, -4.487815856933594], + [-2.037832021713257, 1.1493302583694458], + [-6.476599216461182, 0.39734309911727905], + [2.1282098293304443, -3.128276824951172], + [8.159703254699707, -2.4330694675445557], + [-1.1553972959518433, 1.202113151550293], + [-5.499614238739014, 7.849617958068848], + [-4.62363862991333, 6.424894332885742], + [-5.4799981117248535, -2.4463188648223877], + [-5.270355701446533, -5.155235290527344], + [2.776813268661499, -4.259094715118408], + [-3.7180025577545166, -3.8812124729156494], + [-0.9297969341278076, -2.2623300552368164], + [2.0691585540771484, -4.501371383666992], + [8.161547660827637, -2.3626434803009033], + [-4.276142120361328, 4.4107513427734375], + [-4.6195173263549805, 2.172877311706543], + [9.901261329650879, -2.740615129470825], + [-4.7405924797058105, -2.7363531589508057], + [3.0917205810546875, -4.647723197937012], + [3.086029291152954, -4.625870704650879], + [0.9793272614479065, 0.5608751773834229], + [-0.27150505781173706, 10.587163925170898], + [3.2637369632720947, -4.8925323486328125], + [5.297043323516846, -1.9432463645935059], + [9.334549903869629, -2.584940195083618], + [-4.245702266693115, -1.4567447900772095], + [-2.962346315383911, -3.368680715560913], + [2.9678642749786377, -4.575600624084473], + [-1.0692640542984009, -0.8992877006530762], + [5.060137748718262, -1.4950999021530151], + [0.44034475088119507, 0.13948483765125275], + [6.582125663757324, -2.2933707237243652], + [-5.816535472869873, -3.0776760578155518], + [6.391390800476074, -2.8680875301361084], + [3.067805767059326, -1.4264541864395142], + [8.741637229919434, -2.260735273361206], + [0.31142133474349976, 5.81967830657959], + [-4.957190036773682, 2.646385669708252], + [-2.526151657104492, -1.994221568107605], + [-1.6840702295303345, 1.78274667263031], + [-5.301857948303223, 3.019191265106201], + [-3.3142735958099365, 3.0169737339019775], + [-4.34046745300293, 6.482583999633789], + [0.8676803112030029, -0.1176786720752716], + [-3.001939058303833, -2.6645214557647705], + [2.094836950302124, -10.064521789550781], + [5.522050380706787, -1.674502968788147], + [-5.6393303871154785, -3.1582908630371094], + [-4.047304153442383, -1.8416131734848022], + [-4.7707905769348145, -3.803680181503296], + [2.2929418087005615, -2.475446939468384], + [3.0421769618988037, -4.605142593383789], + [-0.20930379629135132, 10.816899299621582], + [2.6440727710723877, 6.055629253387451], + [-4.941128730773926, 4.700422286987305], + [-4.043668746948242, -1.2372108697891235], + [8.17770767211914, -2.243298292160034], + [-2.281087875366211, 0.9630874395370483], + [-7.809722900390625, 1.8293129205703735], + [-3.6329524517059326, -3.8145222663879395], + [6.580548286437988, -5.251395225524902], + [2.7187459468841553, -4.269997596740723], + [-5.471639156341553, -4.651817321777344], + [2.2519567012786865, -4.490926742553711], + [5.938724040985107, 7.277222633361816], + [-6.650397777557373, 8.029947280883789], + [-4.344958782196045, -2.885380506515503], + [-4.437106609344482, -1.4698172807693481], + [2.224285125732422, 5.396905899047852], + [5.026672840118408, -0.6872686147689819], + [-2.691240072250366, -1.3260637521743774], + [-2.82326602935791, 1.7995787858963013], + [-0.8810304999351501, 0.9312832355499268], + [8.684576034545898, -2.8869001865386963], + [-2.5241050720214844, 1.714056134223938], + [7.717021465301514, -4.798031806945801], + [2.5536344051361084, -6.863521099090576], + [-0.17368623614311218, -1.0293859243392944], + [-0.2876163125038147, 9.639971733093262], + [-1.9340227842330933, 2.4326295852661133], + [1.7663897275924683, 5.126011848449707], + [-5.716953754425049, 5.20188045501709], + [0.014083527028560638, -0.6013847589492798], + [1.811771035194397, 0.7898002862930298], + [-2.0938355922698975, -1.399916648864746], + [2.976933240890503, 6.14201021194458], + [-5.422639846801758, 4.245985507965088], + [1.6596022844314575, -5.971195220947266], + [1.1101765632629395, 4.8149189949035645], + [9.086878776550293, -2.433220624923706], + [2.8254122734069824, -4.383644104003906], + [2.3696987628936768, -7.746816158294678], + [-0.33468490839004517, 10.08604621887207], + [2.4790210723876953, -8.969379425048828], + [-3.616217613220215, 2.99621844291687], + [-4.715672969818115, 6.685730934143066], + [8.081243515014648, -2.0705173015594482], + [-2.7812507152557373, -1.9338816404342651], + [-1.3420867919921875, 9.635932922363281], + [-4.725456714630127, -2.795078992843628], + [-5.248441219329834, 5.171450138092041], + [9.479557037353516, -2.785478115081787], + [9.131872177124023, -2.509767532348633], + [7.14340353012085, -2.728227376937866], + [-2.2812063694000244, -2.876344680786133], + [9.563618659973145, -2.674058437347412], + [-6.821432113647461, -1.849692940711975], + [-2.250218629837036, 2.5658254623413086], + [-0.3170296847820282, -0.47887346148490906], + [-3.738072633743286, -2.5005950927734375], + [9.032135009765625, -2.549741268157959], + [2.118656873703003, -7.783538818359375], + [-0.16216886043548584, 9.601634979248047], + [-1.6996439695358276, 1.7210930585861206], + [-0.5167528986930847, 10.419620513916016], + [8.681203842163086, -2.2928149700164795], + [-2.2298929691314697, -1.1293638944625854], + [-2.291043519973755, 0.32288670539855957], + [-2.356043577194214, -1.7287119626998901], + [6.1536478996276855, -0.35367873311042786], + [-4.1424174308776855, 3.8513171672821045], + [-2.612898111343384, 0.5939659476280212], + [0.9163198471069336, -7.259601593017578], + [2.877074718475342, -2.4452226161956787], + [2.236245632171631, 5.611639976501465], + [-2.1577680110931396, -0.15728992223739624], + [6.127899646759033, -4.936503887176514], + [1.7490274906158447, 5.413020133972168], + [9.477705955505371, -2.6104354858398438], + [-2.380448818206787, -4.045795917510986], + [-4.892112731933594, -2.817328691482544], + [-4.766340732574463, -3.5746114253997803], + [-4.314332485198975, -4.011050701141357], + [1.3948068618774414, 4.938205718994141], + [-4.427725315093994, -1.7016035318374634], + [7.170286655426025, -1.6078280210494995], + [-5.207533359527588, 1.2032737731933594], + [1.6883139610290527, -8.120333671569824], + [-1.6760873794555664, 1.1203943490982056], + [-5.421419620513916, 2.4947495460510254], + [2.9501936435699463, 0.06573739647865295], + [6.876999378204346, -4.858556747436523], + [-3.83530592918396, 4.2527241706848145], + [-6.004039287567139, -1.4927617311477661], + [-4.780532360076904, -2.5412838459014893], + [-2.0967202186584473, -0.17539358139038086], + [-4.056074142456055, -1.4062756299972534], + [9.176543235778809, -3.113518476486206], + [9.727255821228027, -2.7111246585845947], + [3.047346353530884, 6.199901580810547], + [-3.184335470199585, -0.5836939811706543], + [-2.3195509910583496, 0.43175995349884033], + [2.566230058670044, 6.373395919799805], + [-0.8704433441162109, 5.923947334289551], + [-1.5968334674835205, -0.6441851258277893], + [3.253140687942505, 1.193623661994934], + [-4.536130428314209, 3.5542805194854736], + [-3.2225818634033203, 5.375080108642578], + [5.709056377410889, -1.0530065298080444], + [-2.488544464111328, 0.5160233974456787], + [-4.516337871551514, 0.9271972179412842], + [3.292893886566162, 6.694183826446533], + [-3.223069190979004, 5.307241439819336], + [-0.24894577264785767, 9.387197494506836], + [2.780646562576294, -4.292736053466797], + [-3.062296152114868, -1.290150761604309], + [-3.954087972640991, -4.186577796936035], + [1.725448489189148, 5.683657169342041], + [1.8783202171325684, 1.631358027458191], + [-2.1079699993133545, 2.2403507232666016], + [-4.9032769203186035, 4.757718086242676], + [-5.857105255126953, 5.619826793670654], + [-3.9906609058380127, 0.4738345146179199], + [2.9544503688812256, -4.438536643981934], + [-4.67634916305542, -2.2477304935455322], + [1.6854209899902344, -8.530731201171875], + [3.5780210494995117, 1.2722795009613037], + [-4.938364505767822, -2.591830253601074], + [5.759298801422119, 7.4093708992004395], + [-2.097891092300415, 0.7595288753509521], + [-5.8344035148620605, 5.867809295654297], + [-0.2945622205734253, -1.0911004543304443], + [-5.7364115715026855, 6.643458843231201], + [2.85941481590271, -4.330580711364746], + [-6.3285298347473145, 7.991239547729492], + [0.18702930212020874, 9.070856094360352], + [-4.058781147003174, -0.8023577928543091], + [-4.284299850463867, -1.7873705625534058], + [-4.46792459487915, 7.1086106300354], + [-3.621624708175659, -3.950397491455078], + [-0.5151194930076599, 9.193334579467773], + [5.5082573890686035, -1.0853105783462524], + [-4.645171165466309, 4.831821441650391], + [-5.999239921569824, 7.325081825256348], + [-0.43781787157058716, 10.682991027832031], + [2.8118736743927, -4.59716796875], + [5.424095153808594, -1.1940573453903198], + [-0.26204776763916016, 8.979026794433594], + [0.9373725056648254, 5.369904518127441], + [8.981481552124023, -2.531348466873169], + [-7.3070149421691895, -2.236682653427124], + [1.0876473188400269, -6.162688732147217], + [-4.432908535003662, -2.8944880962371826], + [0.6526972651481628, -0.038403335958719254], + [2.9885060787200928, -4.4927520751953125], + [-3.620779037475586, -2.3416061401367188], + [-1.1232759952545166, 9.435373306274414], + [-2.2534878253936768, 1.8483314514160156], + [-4.414477348327637, -1.2663748264312744], + [3.0391597747802734, -4.740993499755859], + [-3.761601686477661, -3.404872179031372], + [-4.816793918609619, -3.4223034381866455], + [-2.190786123275757, -2.3512773513793945], + [1.9418997764587402, 5.025712013244629], + [-0.7782654762268066, -0.6643787622451782], + [-3.8318188190460205, -4.516916275024414], + [1.573014497756958, 2.249432325363159], + [-6.5798211097717285, -1.7070738077163696], + [3.6240298748016357, 5.742273330688477], + [-2.480477809906006, 1.0404778718948364], + [0.42126911878585815, -0.8374580144882202], + [-2.3948965072631836, 5.687066078186035], + [9.866124153137207, -2.718991279602051], + [-2.824636697769165, 3.1141839027404785], + [-2.1177642345428467, -3.4219040870666504], + [-0.3197871446609497, 9.82708740234375], + [-5.15437650680542, 0.5508620738983154], + [-5.321823596954346, 2.103282928466797], + [1.6532045602798462, -8.34741497039795], + [-0.7152604460716248, -1.3133076429367065], + [7.627109050750732, -4.211653232574463], + [-2.6785943508148193, 5.632379531860352], + [4.051908016204834, -2.8780810832977295], + [1.3950518369674683, -6.983883380889893], + [1.3601419925689697, -7.376603126525879], + [2.986345052719116, -4.548137187957764], + [-2.331799030303955, 2.1969540119171143], + [-4.970987319946289, -2.120889902114868], + [-4.240638732910156, 6.222831726074219], + [-5.401101589202881, -3.221011161804199], + [3.159343957901001, -4.8200249671936035], + [7.501456260681152, -2.4193778038024902], + [-5.807758808135986, 5.090437412261963], + [-5.176478385925293, 5.738155364990234], + [8.83020305633545, -2.4270308017730713], + [-0.0018277838826179504, 9.904550552368164], + [3.063196897506714, -4.594954967498779], + [-4.53877592086792, -2.4389164447784424], + [8.521906852722168, -2.299210786819458], + [-4.933294773101807, -3.617633104324341], + [2.594463348388672, -3.899286985397339], + [-0.4348931312561035, 9.419782638549805], + [-2.255634307861328, 0.6269713640213013], + [-3.2991652488708496, -1.5210083723068237], + [2.4427714347839355, 5.799680709838867], + [-4.8760294914245605, -3.1038548946380615], + [-6.0119404792785645, -2.403808355331421], + [2.086311101913452, 5.918657302856445], + [-4.737951755523682, 4.474703788757324], + [-4.450656414031982, -3.360177755355835], + [3.0606625080108643, -4.869987487792969], + [2.0238046646118164, -10.105122566223145], + [-0.3182365894317627, 10.63333511352539], + [-5.572646617889404, 4.671908855438232], + [-6.3886637687683105, 7.719222068786621], + [-5.098886966705322, -3.8113086223602295], + [2.4743192195892334, 1.1768028736114502], + [-1.8530776500701904, 2.290182590484619], + [3.170626640319824, -4.74187707901001], + [2.4064462184906006, -3.605607509613037], + [-6.100802898406982, 6.703600883483887], + [0.23283177614212036, -0.4804552495479584], + [-1.9613425731658936, 2.2198381423950195], + [2.999793767929077, -4.554580211639404], + [-0.5076187252998352, 0.7009967565536499], + [-5.956810474395752, -2.3911001682281494], + [-4.088891506195068, -1.7237657308578491], + [-5.757375240325928, -1.7754223346710205], + [-5.50729513168335, -3.7864441871643066], + [-4.930049419403076, -0.9058221578598022], + [-3.3597421646118164, 3.3970444202423096], + [2.258939027786255, -4.29730749130249], + [2.765866756439209, -4.6164093017578125], + [-1.7416131496429443, 2.32224440574646], + [-3.257556438446045, -5.340770721435547], + [-6.936816215515137, -1.6469471454620361], + [2.1189115047454834, 5.620110511779785], + [1.9172210693359375, -3.3399665355682373], + [-0.22650980949401855, 9.648735046386719], + [-7.2408928871154785, 8.77897834777832], + [-2.97334885597229, 5.376781463623047], + [1.2637686729431152, 0.13566209375858307], + [-1.0399080514907837, 0.6935024857521057], + [-2.230100154876709, 1.8045729398727417], + [8.414881706237793, -2.313579797744751], + [-4.45003604888916, -2.9118642807006836], + [3.1427767276763916, -4.703888416290283], + [-3.9027531147003174, -1.7652184963226318], + [-5.817490100860596, -5.336495399475098], + [3.103931188583374, -4.680313587188721], + [-2.442657947540283, 1.3706707954406738], + [-5.3171234130859375, -2.174314022064209], + [-5.1101155281066895, -3.315790891647339], + [5.520572662353516, -1.1631191968917847], + [-0.6316002011299133, -2.406827688217163], + [2.6893246173858643, -4.106206893920898], + [-3.981123208999634, -1.5702241659164429], + [-1.2274681329727173, 5.3056254386901855], + [-5.73887300491333, -1.7531346082687378], + [-0.2593981623649597, 10.15374755859375], + [2.2132797241210938, -3.772491455078125], + [9.52453899383545, -2.8260748386383057], + [-0.31159424781799316, -1.155374526977539], + [-5.257229804992676, 6.4145331382751465], + [-5.8538432121276855, -0.03932059183716774], + [-4.670925617218018, -2.0965492725372314], + [-7.37445592880249, -2.3121731281280518], + [-4.793766498565674, -4.036497116088867], + [2.828547954559326, -4.510818958282471], + [-2.380592107772827, 3.8458688259124756], + [2.845921277999878, -6.359760284423828], + [2.923537015914917, -4.401453018188477], + [-4.5711989402771, -3.1333186626434326], + [-1.4444674253463745, 1.489052414894104], + [-4.070747375488281, 4.96434211730957], + [-5.613974571228027, 3.9735634326934814], + [2.173485279083252, 0.8879660367965698], + [-1.5920671224594116, -2.5924530029296875], + [6.462097644805908, -5.655084609985352], + [2.7796666622161865, -4.181933403015137], + [-4.944891452789307, -3.1035428047180176], + [2.815354585647583, -6.370430946350098], + [2.115520477294922, 0.8107260465621948], + [5.653839588165283, -1.3057540655136108], + [-0.24407947063446045, 10.190499305725098], + [-4.9436492919921875, 5.474307537078857], + [-4.786220550537109, -1.5539828538894653], + [8.58985710144043, -2.103193998336792], + [-3.6427180767059326, -1.4355067014694214], + [1.6919735670089722, -4.8116865158081055], + [-3.5526816844940186, -1.949173092842102], + [7.895107269287109, -3.2090671062469482], + [-3.234593152999878, -2.503124713897705], + [5.4911112785339355, -5.833388328552246], + [-7.233694553375244, -0.9488677978515625], + [-5.898714542388916, 2.308680295944214], + [2.5455782413482666, -7.193474769592285], + [-2.855757236480713, 3.153095006942749], + [2.550311803817749, -3.7931430339813232], + [2.7302982807159424, -4.408034324645996], + [-4.453886985778809, -1.9024937152862549], + [5.650254249572754, -1.1599410772323608], + [1.7622638940811157, 5.6146392822265625], + [-0.27890878915786743, -0.5007585287094116], + [2.514998197555542, -0.5539885759353638], + [-2.7087302207946777, -2.9629251956939697], + [-0.5126457810401917, 10.200236320495605], + [-4.527415752410889, -3.370285749435425], + [-4.263404369354248, 2.4561634063720703], + [2.7625629901885986, -7.020656585693359], + [2.893089532852173, -4.531632423400879], + [-5.853046894073486, 1.8178690671920776], + [0.8634429574012756, 0.10628162324428558], + [9.070982933044434, -2.5816030502319336], + [5.518028736114502, -3.425424814224243], + [-4.43586540222168, -3.420748710632324], + [0.3515717387199402, 10.888246536254883], + [-1.0964431762695312, -2.6965172290802], + [-7.6656718254089355, -0.8077850341796875], + [-4.328510284423828, -1.9258440732955933], + [-2.0716466903686523, 2.2549877166748047], + [-5.239728927612305, -2.575150966644287], + [9.589957237243652, -2.656937837600708], + [-5.035585880279541, -4.026328086853027], + [-0.30104005336761475, 10.156707763671875], + [-0.3343164324760437, 10.600464820861816], + [-1.4057482481002808, -0.6135033369064331], + [0.23062583804130554, -4.013266086578369], + [2.629509687423706, 6.238924026489258], + [-5.102205753326416, 6.073084831237793], + [5.549602031707764, -1.1086739301681519], + [2.710167407989502, -4.1613240242004395], + [-1.1063363552093506, 6.285484790802002], + [-2.3040456771850586, 2.447984218597412], + [1.7902865409851074, 5.539165019989014], + [-5.48290491104126, -0.8468420505523682], + [-3.2588298320770264, -0.10846871137619019], + [-7.70680046081543, -2.0388472080230713], + [6.147573947906494, -1.2656227350234985], + [-6.2896904945373535, -1.2373844385147095], + [-3.440948486328125, -2.3813445568084717], + [-0.11886215955018997, 9.405696868896484], + [-4.848968505859375, 7.790228366851807], + [-0.0739789679646492, 4.444700241088867], + [2.8402693271636963, -4.2963032722473145], + [-2.8720881938934326, -3.6070101261138916], + [-1.4260257482528687, 1.2724878787994385], + [0.9871999621391296, 0.1134958267211914], + [1.619476556777954, 5.399888515472412], + [6.046630382537842, -4.945296287536621], + [-6.590451717376709, 8.096343994140625], + [1.3349485397338867, -8.07041072845459], + [2.9092319011688232, -4.178021430969238], + [0.010587804019451141, -0.4104642868041992], + [0.2938839793205261, 7.410569190979004], + [-4.845892906188965, -2.632606267929077], + [-3.3754050731658936, -3.0273258686065674], + [-6.84004545211792, 1.4630554914474487], + [-4.282634735107422, -2.5684518814086914], + [-3.5830209255218506, -2.901291608810425], + [-2.5764544010162354, 6.301990509033203], + [-7.112076282501221, -1.8229707479476929], + [4.123902797698975, 7.290159225463867], + [-0.735334575176239, -0.7163165211677551], + [-6.046475887298584, 3.122464656829834], + [-2.221050977706909, -2.6719210147857666], + [-4.502227783203125, -3.5847928524017334], + [-4.7298078536987305, 6.891690254211426], + [-4.62495231628418, 5.114616394042969], + [1.7814549207687378, -4.81130313873291], + [-2.22875714302063, 0.9360458850860596], + [-5.9880547523498535, 7.011415004730225], + [-3.8928534984588623, -5.3335723876953125], + [2.206681251525879, -3.9288666248321533], + [0.7985616326332092, 0.4362489879131317], + [-3.260019302368164, -2.453378438949585], + [1.7696928977966309, -7.080221652984619], + [1.9540138244628906, -9.034252166748047], + [-4.347340106964111, 6.532172203063965], + [8.314525604248047, -1.5311121940612793], + [2.162487268447876, -7.183999061584473], + [-0.33415764570236206, 10.379486083984375], + [-5.119178295135498, 3.815394639968872], + [2.731811285018921, -4.084704399108887], + [3.06404972076416, -7.29472017288208], + [3.25321102142334, -5.140094757080078], + [2.345456838607788, 5.856091499328613], + [2.2403972148895264, 5.082463264465332], + [-3.9501659870147705, -1.7167421579360962], + [-0.49421268701553345, 9.552633285522461], + [2.44415020942688, -3.801884889602661], + [-2.3459508419036865, 1.1654905080795288], + [-3.9464643001556396, 5.51026725769043], + [-5.159911632537842, -1.3865405321121216], + [-0.20029771327972412, 9.730718612670898], + [-5.345625400543213, -3.1659438610076904], + [-4.605563640594482, -4.204984188079834], + [-4.501286029815674, -3.3148810863494873], + [-3.300236463546753, 6.776019096374512], + [5.335519313812256, -1.0687443017959595], + [0.663008987903595, 0.11546587944030762], + [-4.720814228057861, 1.8794533014297485], + [-8.657720565795898, -1.2814258337020874], + [-4.086376190185547, -2.818254232406616], + [-3.565826416015625, -0.026058737188577652], + [1.8786486387252808, -3.3721940517425537], + [-3.418843984603882, -1.7200015783309937], + [0.9091683626174927, 4.382544040679932], + [2.1351702213287354, 5.2927470207214355], + [-0.19420188665390015, 9.938882827758789], + [-0.2900232672691345, 9.361896514892578], + [-0.1907520294189453, 9.315650939941406], + [2.7081854343414307, 4.4102067947387695], + [-7.134983062744141, -1.9747751951217651], + [2.931504011154175, 5.7407941818237305], + [-4.2763895988464355, -1.174046277999878], + [2.582202196121216, -4.331969738006592], + [-2.4713943004608154, 2.017261028289795], + [-5.735466480255127, 5.506269454956055], + [-4.183735370635986, 5.685003757476807], + [1.5883857011795044, 5.296004295349121], + [6.695883274078369, -1.3750660419464111], + [-0.2085813283920288, 8.292476654052734], + [-0.14994531869888306, 9.367506980895996], + [-3.974973201751709, -3.2369744777679443], + [-2.997525930404663, -3.983569383621216], + [-1.9103922843933105, -0.7035661935806274], + [3.0893776416778564, -4.81875467300415], + [-2.8802402019500732, 2.9175002574920654], + [2.3475120067596436, 5.164167881011963], + [-1.6620618104934692, 2.141150951385498], + [2.2623727321624756, 5.702813148498535], + [-0.21436309814453125, 9.923063278198242], + [9.819210052490234, -2.6353919506073], + [-6.290818214416504, -1.7925482988357544], + [9.202942848205566, -2.4810588359832764], + [3.7910351753234863, -0.041787032037973404], + [-3.814072847366333, -2.0671920776367188], + [0.1213408038020134, 0.5573973655700684], + [9.740355491638184, -2.718151330947876], + [-5.235398292541504, -2.0362257957458496], + [-5.317356586456299, 3.8967597484588623], + [1.8777179718017578, 1.0975267887115479], + [-6.004779815673828, 7.034786701202393], + [-5.453800678253174, 3.3275771141052246], + [3.1233091354370117, -4.7852067947387695], + [-0.8357235789299011, -2.189237356185913], + [7.538769721984863, -1.870722770690918], + [3.435537099838257, 5.3812479972839355], + [-5.976572036743164, -1.3891817331314087], + [-4.077628135681152, -2.6577532291412354], + [-9.275022506713867, -1.1902885437011719], + [-5.92258358001709, 6.91036319732666], + [-3.7803914546966553, 5.194608688354492], + [-3.1021738052368164, 5.027598857879639], + [-0.5394690632820129, 11.289308547973633], + [2.322395086288452, -3.1841628551483154], + [3.373093843460083, -5.035984992980957], + [0.9665115475654602, 5.187396049499512], + [2.2453298568725586, -5.966246128082275], + [3.0331385135650635, -4.576102256774902], + [2.4193289279937744, -6.036444187164307], + [-6.2219557762146, 3.050342082977295], + [1.3772313594818115, 0.6306743025779724], + [0.14881101250648499, -5.19268798828125], + [-7.575654029846191, -2.8441522121429443], + [-0.23830312490463257, 9.768744468688965], + [-6.971194744110107, -0.6896666288375854], + [1.7049846649169922, -5.39200496673584], + [-5.486886978149414, 5.6113362312316895], + [5.555264949798584, -2.5190937519073486], + [-6.795071125030518, -2.7252442836761475], + [7.978007793426514, -3.2674384117126465], + [-4.695005893707275, -0.7152155041694641], + [1.683014988899231, 3.8551669120788574], + [3.028059720993042, -4.554507255554199], + [-6.116544723510742, 7.603296279907227], + [-3.4737226963043213, -5.0308074951171875], + [-7.356740951538086, 1.337854027748108], + [-2.31584095954895, 2.1467862129211426], + [2.1046814918518066, -7.3787736892700195], + [-4.831570148468018, 4.952402591705322], + [-1.736629605293274, 5.261489391326904], + [-1.6551634073257446, 2.0682878494262695], + [6.640352725982666, -5.363134384155273], + [-2.398968458175659, 4.475337505340576], + [-4.08860445022583, -2.525904417037964], + [-6.651722431182861, 8.011990547180176], + [-7.7273030281066895, -1.7261959314346313], + [-3.983762502670288, -1.6373369693756104], + [-6.1118645668029785, -1.4642277956008911], + [-0.21968740224838257, 9.972867965698242], + [-5.485640048980713, -1.9104984998703003], + [-0.13328588008880615, 9.648200988769531], + [-4.234766960144043, -3.6568756103515625], + [-2.806670904159546, 1.9507391452789307], + [-4.331671714782715, 6.853550434112549], + [1.142983317375183, 0.345481276512146], + [2.087308883666992, 5.959305286407471], + [2.4185240268707275, -4.45034122467041], + [-5.756190776824951, -3.0279910564422607], + [9.835949897766113, -2.8027570247650146], + [1.6156100034713745, -8.156916618347168], + [-0.7094898819923401, 8.885236740112305], + [4.955099582672119, 6.7523956298828125], + [-3.7742435932159424, -3.7129156589508057], + [-2.023247241973877, 2.0692102909088135], + [-3.881416082382202, -1.202873945236206], + [9.164449691772461, -2.6116483211517334], + [-0.8755029439926147, 1.2649973630905151], + [2.9448018074035645, -4.821104526519775], + [-3.155064105987549, 6.017425537109375], + [-4.146381378173828, 5.886505603790283], + [-1.2761704921722412, 0.22581243515014648], + [1.7283689975738525, -7.318140983581543], + [-6.346770286560059, 7.823090076446533], + [4.250766277313232, -0.5649259686470032], + [9.78607177734375, -2.792166233062744], + [-4.829161167144775, -2.908304214477539], + [-4.242189884185791, -3.404865264892578], + [-6.388668537139893, -1.6502920389175415], + [-2.595963478088379, 1.3044298887252808], + [3.1893184185028076, -4.805147171020508], + [-3.0805394649505615, -0.17463749647140503], + [-3.70337176322937, -1.6638342142105103], + [-2.769897937774658, 2.041494846343994], + [-2.2166242599487305, 2.1326773166656494], + [-7.3237528800964355, -1.849282145500183], + [-4.74091100692749, 5.90783166885376], + [2.901210069656372, -6.540522575378418], + [-5.5191144943237305, -2.457406759262085], + [8.651278495788574, -2.596041679382324], + [-3.1025028228759766, 5.3625807762146], + [-5.955097675323486, 6.032951354980469], + [-0.24419021606445312, 9.953814506530762], + [-0.4109291434288025, 1.960720181465149], + [-0.3060944080352783, 9.746472358703613], + [-4.659262657165527, 0.4093398451805115], + [-0.34329140186309814, -0.049413662403821945], + [3.0762526988983154, -4.641432762145996], + [-7.974476337432861, -0.4519883394241333], + [-4.056224822998047, -3.2788538932800293], + [-1.2961101531982422, -1.6943405866622925], + [-4.650466442108154, 3.117863178253174], + [-0.48399633169174194, -1.437731146812439], + [9.0930757522583, -2.5267703533172607], + [-3.026679754257202, 2.2722561359405518], + [-4.076203346252441, -1.3304754495620728], + [-4.327392101287842, -1.5349775552749634], + [-0.6688497066497803, 9.721145629882812], + [-2.790327310562134, -1.4502187967300415], + [-2.3149893283843994, -3.1301307678222656], + [-4.969618320465088, -0.28848105669021606], + [-4.857442378997803, 4.060367584228516], + [-5.186152458190918, 2.964282274246216], + [-3.6309611797332764, -2.5903232097625732], + [-3.358173370361328, -2.017810344696045], + [-1.3725576400756836, -1.2330384254455566], + [6.144787311553955, -3.0383388996124268], + [-2.209313154220581, 2.713310718536377], + [-5.049255847930908, 1.9072527885437012], + [-0.2845499515533447, 9.550527572631836], + [-4.571925640106201, -2.5626180171966553], + [2.847996950149536, 0.893047034740448], + [-5.371170520782471, -3.1564736366271973], + [-7.451442241668701, -0.8003641366958618], + [8.001484870910645, -2.0124223232269287], + [-5.927616119384766, 2.2224197387695312], + [-6.8569207191467285, 8.212170600891113], + [-2.666992664337158, 2.3419413566589355], + [2.8715875148773193, -4.4670729637146], + [-4.422998905181885, 4.8744730949401855], + [-3.3449528217315674, -3.5808398723602295], + [-0.17923593521118164, 9.891834259033203], + [1.3045570850372314, 0.6022971272468567], + [-5.834948539733887, -1.3939156532287598], + [9.5322265625, -2.7973134517669678], + [-8.12856674194336, -1.418583869934082], + [-2.3440918922424316, 1.4854295253753662], + [2.1149449348449707, -3.600619077682495], + [-4.770615577697754, 4.068349361419678], + [0.7013522982597351, -0.31077998876571655], + [-2.1441550254821777, 2.5653841495513916], + [2.8178160190582275, -7.3685197830200195], + [-5.317845821380615, -2.4481582641601562], + [-6.188902378082275, 5.745296478271484], + [-2.7607834339141846, -0.8744556307792664], + [2.1543562412261963, 5.784183025360107], + [0.24033308029174805, 3.10760498046875], + [-5.23101282119751, -4.915585517883301], + [-3.695417642593384, -0.8465448021888733], + [9.015070915222168, -2.56705641746521], + [2.969151735305786, -4.451804161071777], + [3.14548659324646, -4.710165023803711], + [-4.54813814163208, -2.8902976512908936], + [-2.2072224617004395, 2.7067453861236572], + [1.4557297229766846, 5.628579139709473], + [-2.520292282104492, 2.1523470878601074], + [-5.356274604797363, -0.7327224612236023], + [-3.239253282546997, -5.166653633117676], + [4.676926136016846, -2.5520405769348145], + [-5.5113043785095215, 4.719876766204834], + [-2.1409952640533447, 1.3127224445343018], + [1.1783475875854492, -7.354523658752441], + [-0.3222430348396301, 9.741039276123047], + [3.145395040512085, -0.32265421748161316], + [-2.5309500694274902, 2.3685507774353027], + [2.2876827716827393, 0.6505002975463867], + [2.7100918292999268, -4.14192533493042], + [-6.431598663330078, -2.240988254547119], + [3.8247642517089844, 6.569868087768555], + [-3.064936399459839, 6.812836170196533], + [-7.136959552764893, -1.975440263748169], + [2.3720457553863525, -4.031953811645508], + [-5.898001194000244, 0.2325277328491211], + [-3.08551287651062, -1.4334625005722046], + [2.6892120838165283, -5.908147811889648], + [9.239818572998047, -2.5262391567230225], + [0.7713522911071777, 5.306368827819824], + [-2.9060490131378174, -4.688331604003906], + [4.468132495880127, 6.815886497497559], + [5.187197208404541, 7.643991470336914], + [-5.466037273406982, 7.191969871520996], + [6.242763996124268, -4.931449890136719], + [2.5355916023254395, -3.7332630157470703], + [6.6540913581848145, -1.3187538385391235], + [2.8291876316070557, -4.208719253540039], + [-2.551600217819214, 2.2125113010406494], + [-5.010547161102295, 3.857250690460205], + [-5.437613010406494, -1.4022111892700195], + [-3.4084508419036865, -3.3980817794799805], + [-4.486700534820557, 1.3596822023391724], + [2.304281711578369, 5.76979398727417], + [-0.25280410051345825, 10.490167617797852], + [-2.407693386077881, 0.5727024078369141], + [7.811074256896973, -1.9433258771896362], + [3.1947858333587646, -5.320989608764648], + [-5.104434967041016, 7.835186004638672], + [-5.78245210647583, -2.042368173599243], + [3.013887882232666, -4.881003379821777], + [-0.16845226287841797, 9.689957618713379], + [-5.059314727783203, -3.4161832332611084], + [-0.8973380923271179, -2.024418830871582], + [3.3478329181671143, -4.996240139007568], + [-3.132459878921509, -1.1970584392547607], + [7.575355529785156, -2.8103713989257812], + [-4.044472694396973, -5.8361287117004395], + [-4.754735469818115, -2.813915252685547], + [-7.0878095626831055, -1.806011438369751], + [-4.576383113861084, -0.5949033498764038], + [6.126678943634033, -2.111461877822876], + [1.4789783954620361, -0.05167553201317787], + [-4.635972499847412, 3.706333875656128], + [-4.195944309234619, -4.3964362144470215], + [-3.441453218460083, -3.2929232120513916], + [-2.590040683746338, 1.8907251358032227], + [1.8515894412994385, -6.327020645141602], + [-2.318807363510132, 3.453352212905884], + [8.818831443786621, -2.370901346206665], + [-5.1228227615356445, -2.6650807857513428], + [-5.44484281539917, -1.8632882833480835], + [4.866531848907471, -1.1961647272109985], + [-2.0432376861572266, -0.9813144207000732], + [4.48507833480835, 7.007951259613037], + [2.6737325191497803, 1.0308066606521606], + [-1.323973298072815, 0.22713008522987366], + [-0.4620230495929718, -1.0431077480316162], + [-2.0326778888702393, 2.0104382038116455], + [-2.064573049545288, 2.4206759929656982], + [1.2422913312911987, -8.069128036499023], + [-5.739416599273682, 5.369863986968994], + [3.103184223175049, -4.651003360748291], + [-0.5228719115257263, 10.07145881652832], + [-0.34616732597351074, 5.963371276855469], + [-2.7864694595336914, 5.628606796264648], + [1.2205982208251953, 5.783042907714844], + [-4.655947208404541, -3.826812505722046], + [2.8230035305023193, -4.056830406188965], + [-3.1074330806732178, -4.895780563354492], + [-3.1008646488189697, -0.509479284286499], + [-6.158370018005371, 2.480597972869873], + [1.5472482442855835, -8.176088333129883], + [-2.4781641960144043, 6.524107933044434], + [1.1561843156814575, -5.3160600662231445], + [-4.833720684051514, 7.347270965576172], + [2.5700652599334717, -3.8469831943511963], + [-3.814749002456665, -3.7312519550323486], + [2.990910768508911, -4.5693464279174805], + [3.8770315647125244, 6.789362907409668], + [5.580907821655273, 7.217079162597656], + [3.1738202571868896, 1.2027376890182495], + [-4.5156025886535645, -2.493023157119751], + [1.5334278345108032, -7.201520919799805], + [-3.9171223640441895, -1.616498351097107], + [2.8592982292175293, -4.540318489074707], + [2.4864938259124756, -5.111758232116699], + [1.4680073261260986, 4.241316795349121], + [-5.186695575714111, -2.8709914684295654], + [-2.847005605697632, 2.971160888671875], + [2.0525760650634766, 5.2488603591918945], + [-5.67891788482666, 7.0273308753967285], + [2.7562639713287354, -4.526792526245117], + [1.905866265296936, -7.735705375671387], + [-3.8799402713775635, -1.7966368198394775], + [-5.168324947357178, -4.1831159591674805], + [-4.209548473358154, 6.524023532867432], + [-5.621413707733154, 6.279573440551758], + [-3.2513296604156494, -3.8054072856903076], + [2.5777347087860107, -7.030749797821045], + [3.233771324157715, -4.839269161224365], + [-4.586510181427002, 4.244507312774658], + [-4.983818054199219, 5.205727577209473], + [-3.9619176387786865, -4.721919059753418], + [-0.4788539409637451, -1.7338504791259766], + [-2.7100436687469482, 1.371813178062439], + [-5.387296199798584, 3.7507455348968506], + [-5.01357364654541, -2.7567665576934814], + [-0.25824397802352905, 9.419486999511719], + [8.49887752532959, -2.287881851196289], + [-2.0549607276916504, 2.3048720359802246], + [11.077000617980957, -3.0355403423309326], + [-4.6358513832092285, -5.741966247558594], + [2.6232779026031494, -4.076841831207275], + [3.3210928440093994, -3.7713944911956787], + [-1.1294653415679932, -1.3374820947647095], + [-5.082208633422852, -3.1203110218048096], + [-3.337874174118042, -1.44259774684906], + [-0.7978352904319763, 9.950408935546875], + [1.896799087524414, 1.0343854427337646], + [-4.277667999267578, 0.47622621059417725], + [2.5048739910125732, 0.9469215869903564], + [1.8850150108337402, 5.108864784240723], + [0.1816117763519287, 9.018889427185059], + [2.481708288192749, 6.076515197753906], + [1.36277174949646, 5.437989234924316], + [1.773501992225647, -3.6364247798919678], + [-6.983877658843994, 8.138129234313965], + [1.2749278545379639, -6.647479057312012], + [2.451955556869507, -3.859541654586792], + [-0.37821993231773376, 0.6508758068084717], + [-5.517638683319092, -2.7616958618164062], + [-3.790862798690796, -0.06283813714981079], + [-5.405087947845459, 7.513269424438477], + [-5.001434803009033, 0.23094850778579712], + [-2.032991886138916, -3.4950881004333496], + [-2.4470722675323486, 1.8177448511123657], + [9.385729789733887, -2.622239351272583], + [-4.891172885894775, 2.0662612915039062], + [-0.30306631326675415, 9.618938446044922], + [-0.3499685525894165, 9.357297897338867], + [3.178572654724121, -3.8701581954956055], + [-4.910518169403076, -2.5647730827331543], + [-1.9113249778747559, -0.2460193634033203], + [3.0940816402435303, -4.864049911499023], + [0.7425119876861572, 5.0493059158325195], + [1.660835862159729, -4.402921676635742], + [-2.2020843029022217, -1.3397589921951294], + [-0.9630138278007507, -0.38050299882888794], + [2.7239205837249756, -5.868558883666992], + [5.941370487213135, -1.536136269569397], + [-4.67530632019043, 0.09801337122917175], + [-0.19812756776809692, 10.770336151123047], + [-5.755639553070068, 1.7003116607666016], + [-4.348545551300049, -2.0417377948760986], + [-1.4196667671203613, 1.6339534521102905], + [-2.7822186946868896, -3.852112054824829], + [-2.5509114265441895, 1.9942470788955688], + [7.770492076873779, -2.4760806560516357], + [-4.511328220367432, 5.846715450286865], + [2.9156761169433594, -3.3133089542388916], + [7.638981819152832, -1.267120122909546], + [1.7900621891021729, -3.663562536239624], + [1.3273546695709229, -7.322638511657715], + [-1.6761648654937744, 0.668660044670105], + [-0.06952483206987381, 9.508899688720703], + [2.469076156616211, -7.493252754211426], + [-0.6712458729743958, 11.891389846801758], + [-4.286008834838867, 5.58053731918335], + [1.8984012603759766, -3.784863233566284], + [-2.8962652683258057, 3.100367784500122], + [-1.7404435873031616, 7.1116862297058105], + [-3.493687391281128, -2.3872768878936768], + [2.6885931491851807, -7.555288791656494], + [-6.8287129402160645, 8.447649955749512], + [0.8369578123092651, -5.612382888793945], + [2.679255247116089, -4.180878639221191], + [-3.8543143272399902, -1.918006181716919], + [2.8142917156219482, -4.252072811126709], + [7.516524314880371, -3.9392783641815186], + [-1.908905267715454, 0.10161179304122925], + [-2.6011555194854736, 2.0972776412963867], + [1.910623550415039, -7.166191101074219], + [-4.288464546203613, -3.1380693912506104], + [8.030390739440918, -1.9866999387741089], + [3.2746472358703613, -2.2641661167144775], + [1.666487693786621, 0.5480338335037231], + [2.2081573009490967, -3.2947258949279785], + [2.1275851726531982, 3.426100015640259], + [2.9205851554870605, 0.9147648811340332], + [-3.5171568393707275, -4.730556488037109], + [2.1448800563812256, 4.30743408203125], + [-2.2718088626861572, 2.2355153560638428], + [-0.6065073609352112, 5.450412273406982], + [2.9492533206939697, -4.443010330200195], + [2.0728089809417725, -3.2796308994293213], + [-0.376565158367157, -0.7083624601364136], + [3.019333600997925, -4.559335708618164], + [-5.208070278167725, -3.4651882648468018], + [-4.300041675567627, 5.2633376121521], + [-3.3543641567230225, -4.697731971740723], + [-4.427079200744629, -4.163845062255859], + [2.601280450820923, 1.4553108215332031], + [-6.7220306396484375, 7.346906661987305], + [-1.34116530418396, -1.133035659790039], + [2.7306931018829346, 6.209522247314453], + [1.0369515419006348, -6.151374816894531], + [-4.240286350250244, 4.62247371673584], + [-6.063236713409424, 4.879621505737305], + [7.36414098739624, -1.7657126188278198], + [3.1419148445129395, -4.845826148986816], + [2.7397444248199463, 5.471794128417969], + [-5.438592910766602, -2.895764112472534], + [-0.504668653011322, 9.497626304626465], + [-4.092268466949463, -1.6572333574295044], + [2.3663129806518555, 0.9487860202789307], + [2.702160596847534, 1.0588215589523315], + [-4.745619297027588, -2.3567941188812256], + [9.253579139709473, -2.635011672973633], + [7.436587810516357, -2.156198024749756], + [-2.628577709197998, 1.938621997833252], + [-0.5861218571662903, 9.82473087310791], + [-0.8043911457061768, 5.330300331115723], + [-0.42847561836242676, 10.271163940429688], + [-6.864040851593018, -1.9614828824996948], + [2.413628578186035, 0.9233925342559814], + [-2.1207902431488037, 0.8753780126571655], + [-5.039754390716553, -2.905611991882324], + [9.673920631408691, -2.649221181869507], + [7.564627647399902, -2.0329833030700684], + [7.5286407470703125, -1.1401234865188599], + [-4.610750198364258, -2.612560510635376], + [2.5623905658721924, -4.157406806945801], + [-3.7688686847686768, -4.6089935302734375], + [1.1240307092666626, -7.124568939208984], + [-6.17667818069458, 2.3348615169525146], + [-4.0770134925842285, 6.065080642700195], + [1.429407000541687, -7.576626300811768], + [-5.691188812255859, -0.28876352310180664], + [-3.477877378463745, -2.6040573120117188], + [-5.467970848083496, 1.030018925666809], + [-4.847965240478516, -4.212944030761719], + [-3.3727102279663086, -3.0423405170440674], + [2.779592752456665, -3.9248335361480713], + [-1.9657299518585205, 0.4950840473175049], + [-0.407731294631958, 8.974982261657715], + [2.9104974269866943, -4.833216667175293], + [7.534756183624268, -1.8246212005615234], + [5.853216648101807, -1.3891266584396362], + [-7.820706844329834, -0.21000897884368896], + [-2.282655715942383, 0.4936333894729614], + [8.100202560424805, -3.5147311687469482], + [3.384495496749878, -5.041557312011719], + [-0.2903509736061096, 10.146451950073242], + [6.3902268409729, -2.15948748588562], + [8.402142524719238, -2.3790552616119385], + [-5.954535007476807, -1.0068010091781616], + [-5.3445563316345215, 4.737196922302246], + [9.136543273925781, -2.5935208797454834], + [-2.914754629135132, -2.0866081714630127], + [-2.6115050315856934, 2.0549638271331787], + [3.2253644466400146, -5.298589706420898], + [-2.049260139465332, 1.8780207633972168], + [-4.911965847015381, 0.7574443817138672], + [-3.743528366088867, 5.022848606109619], + [8.251067161560059, -2.7383620738983154], + [2.4476869106292725, -4.475512981414795], + [-2.955576181411743, -0.36719411611557007], + [-5.5995917320251465, -3.2589588165283203], + [8.279980659484863, -2.124251127243042], + [1.9844770431518555, 5.570937633514404], + [-3.8379671573638916, 0.8084063529968262], + [0.8327752947807312, -6.171854019165039], + [-2.322519063949585, 2.272139310836792], + [7.173349857330322, -1.8566548824310303], + [4.310039043426514, -3.699350118637085], + [-4.66891622543335, 5.170441627502441], + [1.2545487880706787, -7.124279022216797], + [2.1662228107452393, 5.427001953125], + [-0.42731034755706787, 10.510103225708008], + [-5.017529487609863, 3.195106029510498], + [3.0781657695770264, -4.618132591247559], + [-5.276156902313232, 7.019959926605225], + [-8.31464672088623, -1.1138416528701782], + [-3.2924644947052, -1.2459596395492554], + [3.159144163131714, 6.30095100402832], + [8.887055397033691, -2.4729864597320557], + [-4.483149528503418, -2.2261159420013428], + [-1.5901941061019897, -1.2530937194824219], + [0.624411940574646, 5.043673038482666], + [-6.4374518394470215, 7.9066877365112305], + [1.6936264038085938, -2.988112211227417], + [-2.0599119663238525, 1.8890511989593506], + [-6.243732929229736, 6.016252517700195], + [-0.1634300947189331, 9.53532600402832], + [-2.7040562629699707, 2.997450113296509], + [3.3254480361938477, -5.213309288024902], + [-1.409984827041626, -1.424725890159607], + [-4.91684103012085, 7.701037883758545], + [-3.6356351375579834, -3.204150915145874], + [2.01921010017395, -5.848903656005859], + [-0.3360568881034851, 10.99885368347168], + [-5.520498275756836, 1.0913573503494263], + [-7.05796480178833, 8.861552238464355], + [-2.609696865081787, 2.362245798110962], + [-6.280030727386475, 7.4764580726623535], + [1.8475093841552734, 0.5437178015708923], + [-5.220438480377197, -1.768405556678772], + [1.8005579710006714, -7.23714542388916], + [2.91900897026062, -4.469326019287109], + [-4.370607852935791, 5.795846462249756], + [2.980354070663452, -4.481896877288818], + [-2.5836663246154785, 2.6026968955993652], + [0.14204686880111694, 10.344755172729492], + [-4.689775466918945, -3.7944421768188477], + [6.7837300300598145, -0.8698500990867615], + [1.2052208185195923, -6.071743488311768], + [2.9987337589263916, -4.952583312988281], + [6.295168399810791, -4.066445827484131], + [7.478370189666748, -1.8049637079238892], + [1.5577809810638428, 5.257235527038574], + [-4.826467037200928, -3.256143808364868], + [1.5218321084976196, -2.752609968185425], + [-4.436204433441162, -0.6218611598014832], + [0.6782009601593018, -0.5826066136360168], + [-4.901308536529541, -3.81789231300354], + [-3.585474729537964, -1.479343295097351], + [-4.983453273773193, -2.728727340698242], + [-2.0234930515289307, -2.6317555904388428], + [10.346671104431152, -2.8510687351226807], + [-4.432854652404785, 5.284183502197266], + [-5.196534633636475, -1.7403135299682617], + [-0.617108166217804, -1.3376978635787964], + [0.45708388090133667, -5.898983001708984], + [-5.036045551300049, -2.381113052368164], + [-5.296516418457031, -3.2498624324798584], + [-5.904318332672119, 1.8701121807098389], + [5.966574192047119, 7.658161640167236], + [-2.9995315074920654, 2.82065749168396], + [1.1533373594284058, 5.541834354400635], + [-5.361353397369385, -2.5876314640045166], + [-6.203514575958252, 2.3419511318206787], + [-5.08044958114624, -2.9212424755096436], + [-2.5505869388580322, 1.8213577270507812], + [-6.989731311798096, 8.337594985961914], + [-5.746352672576904, 4.773240566253662], + [6.580169677734375, -5.552473068237305], + [8.288948059082031, -1.6000984907150269], + [-0.28444552421569824, 9.681966781616211], + [-3.157738447189331, 5.295314788818359], + [-2.8699264526367188, 2.699110746383667], + [1.8570884466171265, 0.7277705669403076], + [-4.0709638595581055, -2.980220317840576], + [1.9727809429168701, 5.424960136413574], + [-4.334970951080322, -2.0180699825286865], + [0.38046807050704956, -0.9425313472747803], + [-4.95869779586792, -2.4956562519073486], + [1.424101710319519, -0.03982706740498543], + [-4.483981132507324, -2.1393895149230957], + [-0.44418400526046753, 10.869260787963867], + [-6.317073345184326, 5.3668036460876465], + [2.167548656463623, -3.9841840267181396], + [1.8084393739700317, -9.213057518005371], + [-4.67336893081665, -4.16417932510376], + [2.4638020992279053, 6.035701751708984], + [-8.143778800964355, -1.3381973505020142], + [3.1431469917297363, -4.853715896606445], + [6.665013313293457, -1.4600697755813599], + [5.7248148918151855, -1.0726271867752075], + [2.9341049194335938, -6.705740928649902], + [-0.5630115270614624, -0.5889236330986023], + [-0.34411197900772095, 10.108442306518555], + [1.5309405326843262, 4.727262496948242], + [-3.479534864425659, 7.199909210205078], + [1.9797890186309814, -6.5616865158081055], + [5.115987300872803, -4.9345598220825195], + [0.22898608446121216, 10.306650161743164], + [-0.3273879885673523, 10.271116256713867], + [3.7749485969543457, 6.774690628051758], + [2.1934878826141357, 5.4403252601623535], + [-2.456162929534912, 1.759600281715393], + [-3.839461088180542, 4.153267860412598], + [-4.339056968688965, -3.792611837387085], + [-1.2261507511138916, 1.6109553575515747], + [-4.106616497039795, -3.604024648666382], + [-2.422433614730835, 0.9650794267654419], + [2.9639365673065186, -4.4877519607543945], + [-6.187608242034912, 8.696064949035645], + [-5.192403316497803, -4.261038780212402], + [-0.39496010541915894, -0.6835375428199768], + [-5.469711780548096, -2.681077241897583], + [-2.545427083969116, 2.753567695617676], + [-2.423396348953247, 2.105445623397827], + [2.2674615383148193, 5.406557083129883], + [2.106215000152588, -9.59684944152832], + [-0.39153140783309937, 9.687291145324707], + [-0.7910689115524292, 9.620712280273438], + [-4.722362995147705, -3.7238709926605225], + [6.5144758224487305, -1.2169276475906372], + [5.462810039520264, -2.6314032077789307], + [-6.80584716796875, 8.381799697875977], + [5.59959602355957, -1.1309489011764526], + [3.062664747238159, -4.58718729019165], + [-4.195465564727783, -2.2602875232696533], + [0.6305504441261292, -6.004598140716553], + [-0.7808148860931396, 5.832430839538574], + [6.302972316741943, -1.201526165008545], + [-2.5908308029174805, -1.5266131162643433], + [-3.2083184719085693, -1.5465744733810425], + [2.4344918727874756, -8.451248168945312], + [-2.160284996032715, 0.35462483763694763], + [-7.648834705352783, -0.9780006408691406], + [9.553528785705566, -2.664472818374634], + [-4.115703105926514, -3.489314317703247], + [-4.262053966522217, -3.553438901901245], + [-5.056491374969482, -3.8247056007385254], + [9.02151107788086, -2.498114824295044], + [2.5842485427856445, 0.6498810648918152], + [-6.23797082901001, 1.5735876560211182], + [3.22900652885437, -4.835931301116943], + [1.948329210281372, -7.792387008666992], + [1.3162777423858643, 1.2599856853485107], + [-5.373570442199707, 6.63588285446167], + [-6.115458965301514, -3.083649158477783], + [-5.595830917358398, -1.922661542892456], + [-1.9289402961730957, 0.3091045022010803], + [-3.8780195713043213, -1.941103219985962], + [-2.4308667182922363, -4.293889999389648], + [1.5771887302398682, -3.1091206073760986], + [-1.3770092725753784, 5.407893657684326], + [-0.2895750403404236, 10.700477600097656], + [-4.1660380363464355, -3.6341798305511475], + [8.260954856872559, -2.438730239868164], + [0.05789577215909958, -0.3923971652984619], + [-2.5924019813537598, 6.776196002960205], + [-5.367203235626221, -6.441350936889648], + [7.795665740966797, -4.173318862915039], + [8.323800086975098, -2.1666080951690674], + [-6.450710773468018, -1.8501747846603394], + [-3.018803358078003, -1.9712276458740234], + [-5.291422367095947, -4.209088325500488], + [-2.271674633026123, 1.2971820831298828], + [-1.5489654541015625, 1.982819676399231], + [1.4182660579681396, 6.041996002197266], + [-5.180701732635498, 0.23108232021331787], + [2.323927164077759, 4.509499549865723], + [-4.993375301361084, 5.7931413650512695], + [2.0421297550201416, 5.661640167236328], + [1.419881820678711, -4.388770580291748], + [6.0851969718933105, -3.797194004058838], + [-5.412580966949463, -2.830399990081787], + [8.839226722717285, -2.482602119445801], + [-5.733802318572998, -2.9517815113067627], + [-6.428743362426758, 7.7341837882995605], + [-4.868746280670166, -1.005454659461975], + [-5.9755473136901855, -2.555983304977417], + [0.8460853695869446, -0.702252984046936], + [-0.6702513694763184, 4.8073248863220215], + [10.16038703918457, -2.8140170574188232], + [4.232580661773682, 7.020774841308594], + [3.018547296524048, -4.311057090759277], + [0.9955036044120789, 5.3289666175842285], + [-6.057549953460693, -0.6183454990386963], + [-0.3244834542274475, 10.701749801635742], + [-1.603846788406372, -1.1223024129867554], + [2.428605556488037, -3.668187379837036], + [-2.069500207901001, -1.4196984767913818], + [-5.157546520233154, -2.857393741607666], + [1.2321463823318481, -5.232577800750732], + [2.1506240367889404, 6.241164684295654], + [-0.2708095610141754, -0.8242406845092773], + [5.476423740386963, -1.2549949884414673], + [-4.569457054138184, -2.6670024394989014], + [-5.025918483734131, 2.447521924972534], + [-5.103941440582275, -2.4725148677825928], + [-5.2532477378845215, 1.5891519784927368], + [-3.139039993286133, -2.6410510540008545], + [-1.908092975616455, -0.07868373394012451], + [8.366718292236328, -3.4348342418670654], + [-2.353975534439087, 1.0048576593399048], + [1.6189649105072021, -5.906073570251465], + [-3.7787344455718994, -4.7423624992370605], + [1.152186632156372, 5.125759601593018], + [-7.513901233673096, 9.11487102508545], + [1.2539891004562378, -5.421070098876953], + [3.064582586288452, -4.6174468994140625], + [5.686137676239014, -2.7165467739105225], + [-0.22471708059310913, 10.636919021606445], + [-4.682362079620361, -2.280705213546753], + [2.9402825832366943, -4.553838729858398], + [-5.342857837677002, -3.04168438911438], + [-5.065309047698975, -4.012208461761475], + [-4.308293342590332, -4.162727355957031], + [-3.8390233516693115, -2.469212770462036], + [-4.647294521331787, -3.1797730922698975], + [-2.5808446407318115, 2.134256601333618], + [1.964142084121704, -8.2526273727417], + [3.1562998294830322, -5.09886360168457], + [-5.204444885253906, -3.424335479736328], + [1.865303635597229, -8.185242652893066], + [-3.3789665699005127, 4.913283824920654], + [-5.836850643157959, 6.244226455688477], + [-2.419543504714966, -2.7882721424102783], + [9.345532417297363, -2.613821268081665], + [2.7558717727661133, -4.297082901000977], + [2.807051658630371, -4.780991554260254], + [-3.4621469974517822, 2.115638017654419], + [2.098179340362549, 5.6580305099487305], + [0.4706610441207886, -0.20545747876167297], + [-2.942603349685669, 6.2051873207092285], + [1.5517220497131348, -6.599915981292725], + [-5.503650188446045, -3.233693838119507], + [-5.399452209472656, 5.646899223327637], + [-0.48182839155197144, -1.2470282316207886], + [-5.069924354553223, 4.80399227142334], + [-0.25643473863601685, 9.202096939086914], + [-3.2756476402282715, 6.492956161499023], + [-3.794318437576294, -1.7903329133987427], + [-5.707513809204102, 1.5029736757278442], + [8.71631145477295, -2.56864857673645], + [3.343081474304199, -5.29670524597168], + [-3.032252311706543, -2.2164289951324463], + [6.493412017822266, -1.2405925989151], + [-0.36125874519348145, 9.468155860900879], + [0.2572677731513977, 5.081181526184082], + [-4.74514102935791, 1.8820611238479614], + [1.950777292251587, 0.5759668946266174], + [2.5101077556610107, 0.21676450967788696], + [-7.340845584869385, 9.254825592041016], + [-5.514776706695557, -1.9237215518951416], + [-8.909197807312012, -1.101011872291565], + [-2.6747310161590576, 2.3372933864593506], + [-0.29118776321411133, 9.317991256713867], + [-2.3723278045654297, 0.9956854581832886], + [2.789377450942993, -5.2964301109313965], + [1.6589760780334473, -8.083887100219727], + [1.0309736728668213, -6.710938453674316], + [-6.635764122009277, -2.225182294845581], + [3.1931333541870117, -5.068782329559326], + [2.067046642303467, 2.3458571434020996], + [-4.759039402008057, -6.226062297821045], + [9.018667221069336, -2.6099462509155273], + [8.218015670776367, -2.19531512260437], + [-2.311086893081665, 1.5929614305496216], + [-6.393946647644043, -0.6218618750572205], + [8.466904640197754, -2.2432870864868164], + [1.9323608875274658, 5.475159645080566], + [8.753748893737793, -2.6128852367401123], + [-0.2318207025527954, 9.247091293334961], + [-6.417701244354248, -2.16808819770813], + [4.607048511505127, -1.6436458826065063], + [1.136054277420044, -7.66160774230957], + [-3.8400533199310303, -2.168602705001831], + [1.1435158252716064, -6.872225761413574], + [-5.574031352996826, -2.725193738937378], + [7.7820210456848145, -1.8130419254302979], + [1.6544837951660156, 5.268969535827637], + [-3.2976832389831543, -0.9373326301574707], + [-3.6126110553741455, 3.0130200386047363], + [2.9072349071502686, -4.525021553039551], + [0.5673809051513672, -0.36959022283554077], + [-5.719293117523193, 1.8629438877105713], + [-4.88203239440918, -1.136509895324707], + [1.5854449272155762, -7.617528915405273], + [0.05313711613416672, 10.313789367675781], + [-5.076163291931152, -1.6734657287597656], + [3.1155507564544678, -4.972836971282959], + [-6.367035388946533, 7.526190280914307], + [-5.653953552246094, -0.773110032081604], + [7.662699222564697, -2.3533854484558105], + [-5.717679023742676, -2.326713800430298], + [2.9495089054107666, -4.4584059715271], + [2.395916700363159, -8.96491813659668], + [-3.9709506034851074, -1.4272469282150269], + [-4.017431735992432, -4.788702011108398], + [2.31900691986084, -6.108173370361328], + [1.995499610900879, 5.576505184173584], + [0.19443359971046448, -0.3971136510372162], + [5.605616569519043, 7.079561233520508], + [-1.1561845541000366, -0.5384185910224915], + [8.87690544128418, -2.5573208332061768], + [-5.513225555419922, 6.98362922668457], + [-4.870882034301758, -2.6801235675811768], + [8.37701416015625, -2.34032940864563], + [-4.252814769744873, 5.483412265777588], + [2.140042543411255, -4.325166702270508], + [-7.7609710693359375, -2.2019195556640625], + [-0.2304999828338623, 1.0669127702713013], + [-2.23683500289917, 1.5554887056350708], + [7.740537166595459, -1.9735110998153687], + [-2.0496091842651367, 2.6808979511260986], + [5.934896469116211, -1.9433248043060303], + [2.653568983078003, -4.472306251525879], + [3.25514817237854, -4.863188743591309], + [-0.1813480257987976, 10.652503967285156], + [-8.212441444396973, -1.6590763330459595], + [1.1983699798583984, -6.741907596588135], + [3.043253183364868, 4.292367935180664], + [3.1275317668914795, -4.6824049949646], + [-2.486074924468994, -1.7962260246276855], + [2.670069456100464, -4.7877197265625], + [2.0727789402008057, -2.681025266647339], + [2.058655023574829, -3.451355218887329], + [-2.6581532955169678, 2.3148038387298584], + [2.4857981204986572, 5.612331867218018], + [-4.242667198181152, 6.892607688903809], + [-0.2212618589401245, -0.748335599899292], + [1.9773797988891602, 4.004223823547363], + [3.866271495819092, 5.093928813934326], + [-5.213575839996338, 1.924494981765747], + [2.9819769859313965, -4.6803412437438965], + [-4.3688273429870605, 6.82473087310791], + [-0.0048819854855537415, 9.404783248901367], + [-0.3485824465751648, 10.449188232421875], + [-5.06835412979126, 5.502751350402832], + [5.561726093292236, -1.1532326936721802], + [3.060349702835083, -2.656643867492676], + [2.55598783493042, 6.161089897155762], + [2.4918649196624756, -3.698758840560913], + [-5.27466344833374, -3.1283915042877197], + [-5.262950420379639, -2.5332605838775635], + [2.4716081619262695, -3.9083545207977295], + [0.4046492278575897, -0.770908534526825], + [-4.54281759262085, -3.5462958812713623], + [-2.6173017024993896, 1.4992982149124146], + [-5.734520435333252, -2.9377784729003906], + [2.854825258255005, 1.1440187692642212], + [-0.5183379054069519, -0.5137808918952942], + [-2.4753921031951904, -1.128902792930603], + [-5.393932342529297, -3.2000322341918945], + [-6.740340709686279, 8.101696014404297], + [-3.049437999725342, -2.438904047012329], + [-0.36470216512680054, -1.0909045934677124], + [0.6391763687133789, 6.907136917114258], + [6.295801639556885, -4.406950950622559], + [-0.4448242783546448, 10.951534271240234], + [2.5444600582122803, -2.236159563064575], + [-6.366661548614502, 8.06724739074707], + [-5.101827621459961, -4.260958671569824], + [-5.208407878875732, 6.105077266693115], + [3.1524734497070312, -5.203979969024658], + [3.1688108444213867, -4.883301734924316], + [0.9533453583717346, -5.775247573852539], + [4.577917575836182, -2.960115671157837], + [1.8078910112380981, -3.4601175785064697], + [-3.0901005268096924, -3.1965019702911377], + [-4.036337375640869, -4.984217166900635], + [-3.981384515762329, 5.60846471786499], + [-2.538416624069214, 1.5330349206924438], + [-4.046633720397949, 6.264820098876953], + [-0.4201943278312683, 10.328960418701172], + [-2.321810007095337, -4.215173721313477], + [-6.097666263580322, 0.2936265468597412], + [-4.987724781036377, 0.10362064838409424], + [5.4010443687438965, -1.159371018409729], + [2.454139471054077, -4.165741920471191], + [-5.680498123168945, -1.5404706001281738], + [0.12161537259817123, -1.9877912998199463], + [1.9571349620819092, 5.203636169433594], + [8.117244720458984, -2.1351282596588135], + [-5.39566707611084, -2.5399913787841797], + [-2.3465261459350586, 1.001268744468689], + [4.659449577331543, -2.930217981338501], + [-4.402652263641357, 4.918903350830078], + [3.0975332260131836, -4.636042594909668], + [2.698488473892212, -7.721765518188477], + [-3.490429162979126, 5.586644172668457], + [-3.7165372371673584, 3.952805280685425], + [8.242127418518066, -2.370145082473755], + [-2.2048180103302, 2.949941396713257], + [-4.140519618988037, -2.9003162384033203], + [-0.34356606006622314, 10.206653594970703], + [8.844006538391113, -2.2725565433502197], + [-0.5798318982124329, -1.3396068811416626], + [-0.14498737454414368, -1.6311379671096802], + [-2.3058488368988037, 2.3769447803497314], + [0.2640506625175476, 1.090184211730957], + [-4.775359630584717, 6.843180179595947], + [-3.935495138168335, -3.47506046295166], + [1.5137169361114502, -6.782907485961914], + [-5.326707363128662, -3.613861083984375], + [-1.8074325323104858, 0.11032503843307495], + [-0.831365704536438, -0.7231426239013672], + [2.4920504093170166, -4.303033828735352], + [-5.640498638153076, 6.728363037109375], + [2.3117716312408447, -7.329761028289795], + [0.456241250038147, 0.5209515690803528], + [-5.066996097564697, 4.267769813537598], + [1.9184279441833496, -3.1058552265167236], + [1.930443525314331, 2.2051329612731934], + [-3.373405694961548, -0.7122774124145508], + [-2.375119209289551, 1.4279756546020508], + [-4.027495861053467, -0.22695297002792358], + [-5.035547733306885, -2.7547919750213623], + [1.3170973062515259, 0.4200912117958069], + [4.344244480133057, 0.7354073524475098], + [2.8732340335845947, -4.34885311126709], + [-0.4771590530872345, 1.977396845817566], + [-5.636719226837158, -1.2302182912826538], + [-4.791520118713379, -0.4874383807182312], + [2.822352170944214, 0.9079962372779846], + [5.425097942352295, -5.400517463684082], + [-3.830230236053467, -0.8482994437217712], + [-5.12870979309082, -1.497422218322754], + [-3.5016162395477295, 3.6655375957489014], + [1.6515216827392578, 1.1740440130233765], + [2.4775550365448, -5.250598907470703], + [5.2687835693359375, -3.0594570636749268], + [1.1301074028015137, 4.494035720825195], + [-5.241391181945801, -3.5709352493286133], + [-0.6143636703491211, -1.2233812808990479], + [-0.5542458295822144, 9.169355392456055], + [9.394320487976074, -2.6559762954711914], + [-3.275024175643921, 3.6105096340179443], + [-2.8694651126861572, -0.9201350212097168], + [-3.7410385608673096, -2.0689170360565186], + [-1.9911553859710693, 2.614961624145508], + [6.99462890625, -2.3581223487854004], + [-4.546745777130127, -0.994702935218811], + [-2.305738687515259, 3.0099546909332275], + [3.199669361114502, -4.786252975463867], + [-4.136598110198975, -2.401341199874878], + [2.758667230606079, -4.240349769592285], + [2.726464033126831, -4.655456066131592], + [-6.462081432342529, -3.119429588317871], + [-6.138702869415283, 2.3831968307495117], + [0.5767269730567932, 0.6232756972312927], + [1.4520766735076904, 0.046598371118307114], + [-2.2309353351593018, 1.8632925748825073], + [7.778295040130615, -1.695229172706604], + [-6.506071090698242, 7.334409236907959], + [-5.096446990966797, 4.213997840881348], + [-2.3177807331085205, 1.1093465089797974], + [-4.237030506134033, 6.498184680938721], + [-3.6280689239501953, -2.5239758491516113], + [6.785550117492676, -2.22137451171875], + [1.4263818264007568, 0.4991101026535034], + [-4.8731207847595215, -0.89081871509552], + [2.995903730392456, -4.557466506958008], + [-2.412574529647827, -0.46433329582214355], + [-3.993136167526245, 1.425033688545227], + [-3.9369468688964844, 0.1036902666091919], + [2.49153470993042, -4.911041259765625], + [-3.2633702754974365, -3.905003547668457], + [-4.509393692016602, -2.554614305496216], + [-5.92612886428833, -1.8042157888412476], + [1.8437473773956299, -6.502070426940918], + [-2.0453758239746094, 1.551007866859436], + [8.788003921508789, -2.607083559036255], + [0.18558558821678162, -1.283772587776184], + [-6.133462429046631, 1.9384146928787231], + [2.362489938735962, -6.3902106285095215], + [2.497990608215332, -4.087541580200195], + [-5.33277702331543, 7.297993183135986], + [-4.478206634521484, 4.902562141418457], + [0.12919870018959045, -3.3988089561462402], + [-2.2903873920440674, -2.676887273788452], + [-2.462533473968506, 2.026027202606201], + [9.503008842468262, -2.650409460067749], + [10.295453071594238, -2.839719533920288], + [-6.498370170593262, -1.963618278503418], + [-0.2882522940635681, 10.57052993774414], + [-5.263281345367432, -3.3774325847625732], + [2.0034396648406982, -9.156234741210938], + [-0.801908552646637, -2.3658478260040283], + [-0.043364085257053375, 1.6742513179779053], + [1.5966196060180664, -3.20900821685791], + [-0.9884547591209412, 0.7806450724601746], + [9.397509574890137, -2.5717337131500244], + [-2.6154613494873047, 2.2420246601104736], + [0.1469840407371521, 9.036947250366211], + [8.071465492248535, -2.3005566596984863], + [2.033698081970215, 5.864524841308594], + [-2.2683300971984863, 1.9287511110305786], + [3.310626983642578, -7.464740753173828], + [-1.547803282737732, 2.1516427993774414], + [-6.685136795043945, 7.997937202453613], + [2.2240846157073975, 5.781305313110352], + [3.2433903217315674, -4.070337295532227], + [-0.30164891481399536, 9.63896369934082], + [8.363299369812012, -2.1835596561431885], + [-5.77997350692749, -1.992258071899414], + [0.3483412265777588, 9.76938533782959], + [3.161602735519409, -3.4703361988067627], + [-5.2107157707214355, 6.199184894561768], + [-5.897494792938232, -2.4102444648742676], + [5.5026326179504395, -3.9355881214141846], + [1.5142186880111694, -7.777816295623779], + [-4.147938251495361, -1.9799861907958984], + [-4.1142754554748535, -2.379816770553589], + [-2.480395793914795, 1.516310691833496], + [3.0491271018981934, 6.032275676727295], + [8.358416557312012, -2.27997088432312], + [-0.2841269373893738, 10.515663146972656], + [-2.196655750274658, 2.1143956184387207], + [-2.0005483627319336, 1.9196293354034424], + [-7.4468278884887695, 1.1111996173858643], + [-4.392153263092041, -1.856298565864563], + [2.4343647956848145, -5.274746417999268], + [0.5367220044136047, -0.6450639367103577], + [-4.064576148986816, 6.368885040283203], + [1.984635353088379, -8.563824653625488], + [8.027068138122559, -2.9490182399749756], + [-5.3487677574157715, -3.7660834789276123], + [-3.6019961833953857, -5.312054634094238], + [3.315561532974243, -5.410813331604004], + [-0.13944092392921448, -0.5039868354797363], + [-5.763563632965088, 2.053351640701294], + [0.7119089365005493, -5.871827125549316], + [-4.866186618804932, 6.0284504890441895], + [-0.6923701167106628, 11.877311706542969], + [3.1770248413085938, -3.494217872619629], + [-5.189911365509033, -1.1892753839492798], + [-6.848204135894775, -2.117163896560669], + [-6.74855375289917, 8.28161907196045], + [-1.2061280012130737, 0.7660733461380005], + [-0.3792199492454529, -2.3816442489624023], + [-2.5610368251800537, 2.1749963760375977], + [-2.328174591064453, 1.2147904634475708], + [-5.956460475921631, -3.055995225906372], + [-0.17616820335388184, 8.980695724487305], + [-6.290841579437256, -2.4797732830047607], + [4.469338893890381, -1.2813642024993896], + [-0.2543373107910156, 10.682942390441895], + [8.984938621520996, -2.4737648963928223], + [8.96303653717041, -2.763847589492798], + [3.093691349029541, -4.636438369750977], + [-5.0813984870910645, 5.024050712585449], + [-1.5712847709655762, -2.2795732021331787], + [-7.742610454559326, 9.518848419189453], + [-2.289959669113159, 2.2975587844848633], + [-5.339179039001465, -3.5135459899902344], + [-0.2547774910926819, 10.481719017028809], + [-0.219387024641037, -1.5995278358459473], + [9.5380859375, -2.6640427112579346], + [2.7142961025238037, 5.937756538391113], + [7.025699615478516, -1.6613386869430542], + [-4.179770469665527, -2.9233057498931885], + [9.30639934539795, -2.56750226020813], + [-5.526127338409424, 2.017216920852661], + [6.605021953582764, -2.6789724826812744], + [-2.849505662918091, -2.790580987930298], + [-0.9519372582435608, -0.5495700836181641], + [2.1641862392425537, -3.8817620277404785], + [-5.696260929107666, -1.5852080583572388], + [-1.3657140731811523, -0.8156839609146118], + [9.009791374206543, -2.4751956462860107], + [-4.963037967681885, 7.623065948486328], + [2.977529287338257, -4.547173500061035], + [9.09908390045166, -2.625866413116455], + [-5.14363431930542, -1.521238923072815], + [-0.26692742109298706, 10.645620346069336], + [-2.372673988342285, 1.7046350240707397], + [-0.1290067434310913, 0.1189514696598053], + [-4.482375144958496, -2.425124168395996], + [-1.616936445236206, -3.647794723510742], + [-6.855410575866699, -0.3964114189147949], + [-4.291090965270996, -1.3426706790924072], + [-1.9706568717956543, 0.5222058296203613], + [1.4981193542480469, -6.886774063110352], + [-2.1274333000183105, 2.036694049835205], + [-3.011334180831909, -3.4110748767852783], + [-2.5925865173339844, 1.9869211912155151], + [-2.1108434200286865, 1.9817496538162231], + [1.811786413192749, -6.251053333282471], + [-2.9154207706451416, 2.4724843502044678], + [-4.817762851715088, -1.6983696222305298], + [2.873959541320801, -4.9457855224609375], + [1.5470209121704102, -2.8779516220092773], + [-5.808877944946289, 4.662365436553955], + [-4.573448657989502, -3.0578341484069824], + [2.81624436378479, -4.902896881103516], + [1.3074685335159302, 5.669105529785156], + [-3.941432237625122, -3.664008378982544], + [-0.36800462007522583, 8.755565643310547], + [-6.441751003265381, 8.115411758422852], + [-5.920363426208496, 7.6100568771362305], + [-3.316809892654419, -2.323373556137085], + [4.650076389312744, -3.831357479095459], + [7.499978065490723, -2.753138780593872], + [6.156932830810547, -2.162778377532959], + [-6.389514446258545, -2.7738144397735596], + [3.320101737976074, -4.952783584594727], + [-5.577365398406982, -2.5401690006256104], + [3.163301706314087, -5.212291717529297], + [3.1934149265289307, -4.776908874511719], + [-2.232886791229248, 0.6653293371200562], + [-2.673194646835327, 2.1979546546936035], + [-1.361916184425354, 5.997440338134766], + [1.5687897205352783, 5.530050277709961], + [-3.2009694576263428, 6.973947048187256], + [-7.503814220428467, -1.8664028644561768], + [-4.446779727935791, -4.037402629852295], + [-5.024454593658447, -2.301260232925415], + [-0.7658951878547668, -1.031642198562622], + [-6.285339832305908, 7.6490912437438965], + [-7.529663562774658, -0.9279468655586243], + [-0.7888883352279663, -0.21315434575080872], + [5.881354808807373, -1.847967267036438], + [1.898195743560791, 5.599942684173584], + [-1.827672004699707, 2.035166025161743], + [10.413002967834473, -2.8814914226531982], + [-3.796715021133423, -1.9148255586624146], + [-4.231748580932617, -3.473367929458618], + [0.23144814372062683, -0.4998936951160431], + [-2.311835765838623, 1.525720238685608], + [-3.639425039291382, -3.1047098636627197], + [0.5658397674560547, -6.321634292602539], + [1.3850376605987549, -0.3155801594257355], + [2.9184837341308594, 1.0450514554977417], + [-6.112331867218018, 7.46912956237793], + [6.627939701080322, -1.4749723672866821], + [-2.2600691318511963, 1.2911248207092285], + [2.58723521232605, -5.4000725746154785], + [2.3173086643218994, -7.6082658767700195], + [2.1336491107940674, -3.1665518283843994], + [-1.1733806133270264, -0.5913777351379395], + [0.5543457865715027, 9.693960189819336], + [-3.073972702026367, -2.0584568977355957], + [-0.3451414704322815, 10.906864166259766], + [1.741644024848938, 4.681902885437012], + [-4.2304911613464355, 6.046422004699707], + [-2.1764557361602783, 0.8056449890136719], + [0.018648795783519745, 9.926097869873047], + [-5.132037162780762, 2.145007848739624], + [-2.0760834217071533, 5.232425689697266], + [5.47174596786499, -1.8437403440475464], + [-5.5127997398376465, 5.089521884918213], + [-3.465418577194214, -2.7558741569519043], + [-5.514705657958984, 7.6799726486206055], + [-2.370421886444092, 0.7567633390426636], + [-6.811004161834717, 8.2202787399292], + [2.0175275802612305, 1.0908678770065308], + [2.7600643634796143, -4.451652526855469], + [-3.809201717376709, -0.7806795835494995], + [-5.283186435699463, -0.9358503222465515], + [-2.161585569381714, 1.4964230060577393], + [-6.808125972747803, -0.602986216545105], + [5.8842082023620605, -0.9789644479751587], + [5.1693644523620605, -2.63728928565979], + [-5.571596622467041, 3.310868501663208], + [2.487201452255249, -3.70863676071167], + [-2.7340633869171143, 5.423366546630859], + [9.128005027770996, -2.5585262775421143], + [-6.322247505187988, 8.15250015258789], + [-5.693634986877441, -3.6406476497650146], + [-5.36480188369751, 1.6036440134048462], + [-5.427156925201416, 4.2898850440979], + [3.031966209411621, -4.654313087463379], + [-4.064640998840332, -2.0233635902404785], + [-0.18169432878494263, 9.545684814453125], + [1.8509607315063477, 3.945742607116699], + [-5.734492778778076, -1.8171762228012085], + [-0.30269551277160645, 10.302942276000977], + [2.482154130935669, -4.940049648284912], + [9.258879661560059, -2.5518665313720703], + [-4.073975563049316, -4.458819389343262], + [9.487074851989746, -2.6635186672210693], + [-4.913758277893066, -2.242776870727539], + [-0.30665671825408936, 9.454436302185059], + [-4.98689079284668, -2.689666748046875], + [1.131725549697876, -5.655200004577637], + [5.2393269538879395, -3.227882146835327], + [-5.808257579803467, 7.2876739501953125], + [1.6164803504943848, 5.587094306945801], + [-6.061920642852783, -2.6520209312438965], + [-6.407150745391846, -1.6831101179122925], + [6.726174831390381, -2.57654070854187], + [-0.49480336904525757, 10.08398723602295], + [0.564897358417511, 9.428167343139648], + [-5.14402437210083, -0.9940214157104492], + [2.4759254455566406, -4.518486022949219], + [2.2827210426330566, -5.406441688537598], + [-1.4522020816802979, -0.26795682311058044], + [9.142945289611816, -2.5387279987335205], + [-5.2495293617248535, -3.370866060256958], + [-2.023284673690796, 2.514585256576538], + [6.463276386260986, 7.907452583312988], + [2.653428792953491, -3.8064427375793457], + [-3.0377461910247803, 4.987360000610352], + [5.505804061889648, 7.046960830688477], + [-6.8840413093566895, 8.282299041748047], + [2.5199344158172607, -3.226221799850464], + [-6.283073902130127, -1.0907162427902222], + [-2.9957082271575928, -1.5280065536499023], + [-4.58607816696167, 6.716629505157471], + [8.029305458068848, -2.1649577617645264], + [-4.5569539070129395, -0.6385891437530518], + [-1.765378713607788, 1.9929085969924927], + [-6.982832908630371, 8.57795524597168], + [-5.751870632171631, 4.743869781494141], + [-0.26125043630599976, 10.469573974609375], + [6.426721096038818, -2.4428131580352783], + [-4.55142068862915, -3.2017099857330322], + [6.004087924957275, -1.3605302572250366], + [-0.2443094253540039, 10.713512420654297], + [1.8158442974090576, -5.475002288818359], + [-2.1328487396240234, 0.4557766914367676], + [-5.563470840454102, -2.3330769538879395], + [2.4234249591827393, -4.0985260009765625], + [3.089247226715088, -4.623238563537598], + [-6.493637561798096, 7.421688556671143], + [-0.1528233289718628, 10.2495698928833], + [6.655081272125244, -2.705303430557251], + [-2.1539244651794434, 1.1346399784088135], + [-3.593313694000244, 5.303035736083984], + [-5.158329963684082, -2.266437530517578], + [-0.2775643467903137, 8.775566101074219], + [-0.17396646738052368, 9.601966857910156], + [-2.6093192100524902, -1.7058608531951904], + [2.5080907344818115, -5.969897270202637], + [-2.952815532684326, -0.17442137002944946], + [-6.117299556732178, 3.6987617015838623], + [-4.979992389678955, -2.427065849304199], + [-0.7394923567771912, 6.374444007873535], + [-0.6643421053886414, 10.91726303100586], + [2.4745562076568604, -3.776982307434082], + [-6.551254749298096, 8.284037590026855], + [10.348593711853027, -2.860295057296753], + [1.264013409614563, 5.502923011779785], + [0.19323620200157166, 1.4735937118530273], + [3.554267168045044, 6.509339332580566], + [-2.4986886978149414, 2.6487033367156982], + [6.510425090789795, -1.9350780248641968], + [-1.9386727809906006, -0.40218520164489746], + [1.848419427871704, 5.642428398132324], + [2.0740740299224854, -4.156041145324707], + [1.357448697090149, 4.08312463760376], + [1.8904829025268555, 6.009621620178223], + [-2.3218870162963867, 0.8603127002716064], + [-3.7841460704803467, 6.233765125274658], + [3.703115463256836, 6.537390232086182], + [8.460129737854004, -2.2379114627838135], + [-0.261142373085022, 9.606891632080078], + [-3.162292718887329, -1.6339691877365112], + [-2.2280220985412598, -1.2947412729263306], + [2.7146124839782715, -4.237883567810059], + [-6.884646892547607, 8.474441528320312], + [-5.191281318664551, 1.3986271619796753], + [-1.0380613803863525, 8.692777633666992], + [-1.149349570274353, 10.21489143371582], + [0.5008524060249329, 7.056397914886475], + [4.043520450592041, -6.843059062957764], + [-0.045722730457782745, 8.616665840148926], + [-0.2159721851348877, 9.06341552734375], + [1.3061435222625732, 1.2331620454788208], + [-6.705451488494873, -1.9881916046142578], + [-5.407817840576172, -3.374397039413452], + [0.9883328080177307, 1.0361322164535522], + [-6.275130748748779, -0.5279475450515747], + [-0.6703387498855591, 9.287487030029297], + [-2.633204698562622, 1.7693917751312256], + [-4.839887619018555, -3.4410994052886963], + [-4.892570972442627, 5.468284606933594], + [-6.00508451461792, 7.9151201248168945], + [-4.1129326820373535, -1.6251122951507568], + [3.128547430038452, -4.7782697677612305], + [4.080008506774902, 6.936365127563477], + [-6.061095714569092, -0.28952324390411377], + [7.6860270500183105, -2.039247512817383], + [-2.536126136779785, 0.8031318783760071], + [1.8964661359786987, -3.490189552307129], + [9.142389297485352, -2.554377794265747], + [-0.07518715411424637, 10.157438278198242], + [-4.300098896026611, -4.246138572692871], + [-4.9068498611450195, -3.1378114223480225], + [8.296273231506348, -2.1734509468078613], + [0.06933432072401047, 9.267129898071289], + [-2.0438833236694336, 2.480524778366089], + [-2.361361265182495, 1.5510748624801636], + [4.250943183898926, -3.715440511703491], + [-5.582977771759033, -3.045546531677246], + [2.9705967903137207, -5.47489595413208], + [-3.80230450630188, 0.6502236723899841], + [3.1272695064544678, -4.700443267822266], + [-3.510030746459961, -2.432927370071411], + [-5.867076396942139, -1.8246148824691772], + [1.3350967168807983, 6.658506870269775], + [-0.245658278465271, 10.100382804870605], + [-4.155418872833252, -5.027228355407715], + [-0.2792140245437622, -0.6784960627555847], + [-4.670698642730713, -3.3508951663970947], + [-4.839956760406494, -2.8078763484954834], + [-5.3198628425598145, 8.4036283493042], + [-0.23809131979942322, -0.907730221748352], + [-0.014095433056354523, 8.663053512573242], + [-8.310957908630371, -1.7428336143493652], + [2.6426026821136475, -4.082533359527588], + [0.5709574818611145, 9.104156494140625], + [7.7484588623046875, -2.047358512878418], + [2.9151451587677, -4.458487510681152], + [2.550424337387085, -4.377620697021484], + [-4.140605449676514, -2.8222360610961914], + [-4.117552280426025, -2.708838701248169], + [8.596993446350098, -2.8167455196380615], + [-0.3238832354545593, 9.318092346191406], + [-6.551300525665283, 7.837240219116211], + [6.266644477844238, -1.396955132484436], + [-2.562189817428589, 1.4705548286437988], + [0.4192638397216797, -5.911791801452637], + [-7.271933078765869, -1.7109116315841675], + [0.2119635045528412, -4.393267631530762], + [-4.79944372177124, -2.075105667114258], + [1.9150218963623047, -6.882981300354004], + [-5.245193958282471, -4.153049468994141], + [-3.8460805416107178, -1.709805965423584], + [0.29652780294418335, -4.7771735191345215], + [-3.6391077041625977, 3.95127534866333], + [2.467435598373413, -7.973226070404053], + [7.041378021240234, -2.4031999111175537], + [3.2376534938812256, 4.962048053741455], + [-2.189055919647217, 2.485619306564331], + [-4.169651508331299, 3.2298333644866943], + [1.287611722946167, -6.977230548858643], + [-4.7649383544921875, 0.08288818597793579], + [1.349303126335144, 3.7375876903533936], + [-6.769260883331299, -0.7330904006958008], + [2.8563787937164307, -4.700115203857422], + [-6.0837788581848145, -2.1567442417144775], + [-5.486073970794678, 7.212763786315918], + [-2.3255045413970947, 1.4135375022888184], + [-4.557173728942871, 1.5719995498657227], + [-3.0167887210845947, -0.5540297031402588], + [-7.113685607910156, 8.612587928771973], + [5.007374286651611, -2.101323366165161], + [3.154628038406372, -4.8988037109375], + [-7.743055820465088, 9.405319213867188], + [3.1971001625061035, -4.78574275970459], + [6.253177642822266, -2.410710573196411], + [8.015288352966309, -2.4080746173858643], + [6.175287246704102, -1.2290271520614624], + [1.2814431190490723, -6.561734199523926], + [-5.0344929695129395, 4.259790420532227], + [2.873924493789673, -6.765069007873535], + [1.9555814266204834, 5.3644914627075195], + [2.9548933506011963, -4.474167823791504], + [6.676961421966553, -1.9763911962509155], + [-0.22120702266693115, 9.958268165588379], + [6.991105556488037, -1.9539809226989746], + [5.76951265335083, -1.6441930532455444], + [5.6838555335998535, -2.7132692337036133], + [2.2462332248687744, 0.9493165612220764], + [-4.625425815582275, -3.0219621658325195], + [8.20432186126709, -2.6816000938415527], + [-1.2709941864013672, 6.111851692199707], + [-0.9905914664268494, 5.494037628173828], + [1.6322816610336304, -8.607937812805176], + [-2.9215548038482666, -1.6544880867004395], + [7.358368396759033, -2.6825520992279053], + [8.099808692932129, -2.3711130619049072], + [-4.913980007171631, -2.2476072311401367], + [-4.346243381500244, -0.9116009473800659], + [-5.330501079559326, -3.592010974884033], + [-5.94685697555542, 6.56632661819458], + [1.7795209884643555, 5.068601131439209], + [0.2424471080303192, -1.327080488204956], + [5.389601230621338, -1.8991228342056274], + [7.276322841644287, -1.5591137409210205], + [-5.203407287597656, 7.675597190856934], + [-5.342762470245361, 3.6649587154388428], + [-2.6475589275360107, 2.169387102127075], + [2.974597454071045, 5.849094390869141], + [-4.666362285614014, -2.572758436203003], + [-0.473545104265213, -1.1020801067352295], + [-0.07646224647760391, 0.12073609232902527], + [2.3686444759368896, -3.388577699661255], + [2.639667510986328, -7.2414021492004395], + [-5.282368183135986, -3.7539968490600586], + [-0.6374551653862, 9.161245346069336], + [-4.151508331298828, 6.224587917327881], + [3.2828056812286377, 6.496943473815918], + [-5.824331760406494, 7.408567905426025], + [6.821760654449463, -1.4369465112686157], + [-6.373220920562744, 7.788331985473633], + [1.9684667587280273, 5.733551025390625], + [2.8618147373199463, -4.387120246887207], + [2.6382181644439697, 6.379035472869873], + [-3.1973025798797607, -4.525266170501709], + [7.775182247161865, -2.35718035697937], + [-0.3767532706260681, 11.021198272705078], + [-4.320288181304932, 5.238712310791016], + [-4.639321804046631, 2.2221264839172363], + [3.3044273853302, -4.9824018478393555], + [0.20446014404296875, -0.13102005422115326], + [0.9685240387916565, 5.442426681518555], + [5.801881313323975, -1.4259793758392334], + [-5.979581356048584, -2.3981640338897705], + [3.261444091796875, -2.6360132694244385], + [8.396411895751953, -2.2634084224700928], + [3.0434398651123047, -4.741921901702881], + [-5.752377986907959, 7.740185260772705], + [8.982337951660156, -2.4732248783111572], + [-5.636599063873291, -4.115562915802002], + [6.0050435066223145, -0.9696941375732422], + [3.7508046627044678, -3.2900304794311523], + [-8.366475105285645, -1.4361721277236938], + [-5.762170791625977, -2.642913818359375], + [-1.6692183017730713, 1.05398428440094], + [0.8889427185058594, -7.416917324066162], + [2.8853883743286133, -6.405895709991455], + [-0.5287785530090332, 5.3680877685546875], + [-2.446518659591675, 6.180790901184082], + [3.0937092304229736, -4.647494792938232], + [0.2550189197063446, -0.05591559782624245], + [-5.347456455230713, -2.998185873031616], + [-2.4091179370880127, 7.686947345733643], + [-0.5073887705802917, -0.21227923035621643], + [-4.340203285217285, -2.5184831619262695], + [-2.809150218963623, -1.5948275327682495], + [0.7684218287467957, -5.526386737823486], + [1.8814482688903809, -5.714802265167236], + [-3.887848377227783, 4.146787166595459], + [-0.2353985607624054, -1.2066068649291992], + [-1.7874844074249268, 0.9998526573181152], + [2.3894712924957275, -2.436601400375366], + [-4.259841442108154, 6.188442707061768], + [-2.4314069747924805, 1.0788066387176514], + [2.37628436088562, -3.237656831741333], + [-1.3197916746139526, -1.23238205909729], + [-5.163778781890869, -1.4235577583312988], + [9.583783149719238, -2.658402681350708], + [-6.845984935760498, -1.2180299758911133], + [2.6998355388641357, -5.783823013305664], + [-2.4662842750549316, -4.06280517578125], + [-4.644629001617432, -0.7328804135322571], + [-4.350399971008301, -2.593271017074585], + [-4.862499713897705, -3.4261481761932373], + [-2.5208592414855957, 6.259171962738037], + [-2.3022427558898926, 1.398399829864502], + [-0.38337594270706177, 10.392537117004395], + [1.379353642463684, -6.627320289611816], + [5.08671236038208, 7.77341890335083], + [-4.9900126457214355, -2.9377901554107666], + [0.3589121699333191, 9.847085952758789], + [4.562211513519287, -0.9806771874427795], + [9.720402717590332, -2.7058675289154053], + [-4.982580661773682, -1.7027174234390259], + [3.7385621070861816, -3.47884202003479], + [-5.255302906036377, 4.101543426513672], + [-4.854493618011475, 1.0277655124664307], + [-5.416649341583252, 3.934645891189575], + [-2.2137269973754883, 2.4025862216949463], + [-0.2781621813774109, 10.320146560668945], + [-7.719517230987549, 9.623687744140625], + [2.412241220474243, -4.606996059417725], + [6.704067707061768, -1.2486575841903687], + [-2.3382186889648438, 1.0333317518234253], + [2.1580770015716553, -5.09672212600708], + [-2.3494338989257812, 1.7918858528137207], + [-3.90350079536438, 3.0854310989379883], + [-2.7244770526885986, -1.65320885181427], + [-7.130333423614502, -0.7815306186676025], + [5.301815986633301, -1.0604265928268433], + [-7.040621280670166, 8.529783248901367], + [2.6127312183380127, 0.5041204690933228], + [-2.6103272438049316, -3.96808123588562], + [-3.8825738430023193, -2.0457632541656494], + [3.6618475914001465, -4.206691265106201], + [-3.96480131149292, -2.6527321338653564], + [-5.709203243255615, 7.375467300415039], + [-2.4562747478485107, -0.05760181322693825], + [-0.3848058581352234, 10.253335952758789], + [5.357065677642822, -1.672372817993164], + [-2.1755857467651367, 0.9373884797096252], + [-4.472618579864502, 5.120250701904297], + [9.09899616241455, -2.3123342990875244], + [-4.776175022125244, 1.8225700855255127], + [1.7174410820007324, 5.364727973937988], + [-4.2197442054748535, -1.6034919023513794], + [-5.696752071380615, -3.8873512744903564], + [8.59182071685791, -2.524082899093628], + [-1.8761723041534424, 2.3678219318389893], + [-5.815367221832275, 5.8245344161987305], + [0.8706818222999573, -7.036213397979736], + [7.380019187927246, -3.257521152496338], + [1.67239511013031, 0.5810047388076782], + [2.1248366832733154, -8.325906753540039], + [-4.962824821472168, -2.9698660373687744], + [-4.438111305236816, -4.311039924621582], + [-0.1766558289527893, 9.741135597229004], + [-4.626299858093262, -0.3634897470474243], + [-4.6095123291015625, -1.7236584424972534], + [-7.162932872772217, 8.6580228805542], + [2.633512258529663, -9.132477760314941], + [-0.08696220070123672, -0.61203932762146], + [-2.0082104206085205, 2.634531021118164], + [3.4698538780212402, -3.3784215450286865], + [-5.122452735900879, 5.910275936126709], + [-4.803210735321045, -2.653348207473755], + [-7.708372116088867, -0.878736138343811], + [-2.187007427215576, 1.4872877597808838], + [-5.65577507019043, 3.0189619064331055], + [2.148509979248047, 5.748830318450928], + [4.771835803985596, -2.4289329051971436], + [-4.9214301109313965, -3.5435166358947754], + [8.458173751831055, -2.294896364212036], + [-7.500667095184326, -1.3281538486480713], + [2.4441516399383545, -6.809065341949463], + [3.0617871284484863, -4.82047176361084], + [-5.877020359039307, 0.17547303438186646], + [6.29955530166626, -2.7551143169403076], + [-2.1109750270843506, 1.8494579792022705], + [-4.482181549072266, -3.0196993350982666], + [2.6718552112579346, 4.096212387084961], + [-3.5466487407684326, -2.660194158554077], + [3.583059310913086, -4.368194580078125], + [-5.871476173400879, -0.7552201151847839], + [-6.977849960327148, -0.9964810013771057], + [-4.198577404022217, -1.6580289602279663], + [5.945631980895996, -1.6765433549880981], + [5.538750648498535, -1.0739389657974243], + [5.281464099884033, -0.9824025630950928], + [2.1178016662597656, -4.5640788078308105], + [-2.6623337268829346, -1.7556281089782715], + [0.26196709275245667, -0.5379936099052429], + [-4.619775772094727, 5.630080699920654], + [-4.156853199005127, -2.3908767700195312], + [-4.085385799407959, -1.4378795623779297], + [-2.3970677852630615, 1.4198999404907227], + [2.452317476272583, -4.881401062011719], + [2.265469789505005, -3.6643450260162354], + [-6.224979877471924, 7.715167045593262], + [-6.317648410797119, -2.7622063159942627], + [1.9899380207061768, -3.0404584407806396], + [3.3075850009918213, 5.495765209197998], + [-4.617213726043701, -2.887145757675171], + [-5.097960948944092, 4.268033981323242], + [2.05359148979187, -9.37620735168457], + [2.222846269607544, -7.507360458374023], + [3.050682306289673, -7.191520690917969], + [-5.175036907196045, -3.0868325233459473], + [-0.2516099810600281, 9.147400856018066], + [-5.092187404632568, -3.2706825733184814], + [-6.511773586273193, -2.2172961235046387], + [0.08558379858732224, 9.951385498046875], + [-0.6439805030822754, 8.890939712524414], + [-0.21118146181106567, 9.395350456237793], + [-5.267196178436279, 2.0484325885772705], + [-0.32630378007888794, 10.240029335021973], + [-5.272325038909912, 1.4209016561508179], + [-4.174285411834717, -1.7319037914276123], + [-5.972676753997803, 0.8311620950698853], + [6.191631317138672, -1.584722876548767], + [2.237365484237671, 5.446733474731445], + [-6.60949182510376, -2.044220209121704], + [6.87293004989624, -1.40221107006073], + [2.0820565223693848, 6.173771858215332], + [2.1375668048858643, -10.18294620513916], + [-3.057410955429077, 2.9491288661956787], + [0.09224741905927658, 9.346583366394043], + [-7.004933834075928, -2.485995054244995], + [-5.4395647048950195, 4.008627414703369], + [-2.4913876056671143, 1.867944359779358], + [-5.201353549957275, 6.315003395080566], + [-7.686014175415039, 9.413161277770996], + [-0.29260778427124023, 9.141847610473633], + [2.251542329788208, -4.169791221618652], + [0.537248969078064, -1.0343900918960571], + [-4.351128101348877, -2.7180240154266357], + [-5.1554365158081055, -0.9169482588768005], + [10.000605583190918, -2.751316547393799], + [-5.53180456161499, -3.8132810592651367], + [7.936696529388428, -2.6363422870635986], + [2.1907670497894287, -9.286291122436523], + [-4.381738185882568, -1.9642646312713623], + [-5.300114154815674, -2.1799747943878174], + [-4.2137675285339355, 6.2630696296691895], + [-0.2525014877319336, 9.45794677734375], + [1.3676295280456543, 2.201085329055786], + [-4.549584865570068, 3.1105833053588867], + [-4.147317886352539, -1.1276499032974243], + [-4.959469318389893, -1.5311050415039062], + [-6.673271656036377, 4.2391557693481445], + [2.506070852279663, -6.893335819244385], + [-4.779892444610596, 4.096334457397461], + [-6.157954692840576, 7.7309770584106445], + [-3.8196489810943604, -2.7523584365844727], + [-5.128350257873535, -4.299837589263916], + [-2.6548309326171875, 0.17162972688674927], + [3.2603228092193604, -5.3280181884765625], + [-0.44198423624038696, 10.30752944946289], + [-7.0041117668151855, 8.407110214233398], + [-7.582515716552734, -0.885486364364624], + [-0.3646610975265503, -0.09008575975894928], + [-1.7829689979553223, -1.1553624868392944], + [0.5946162939071655, -0.01580098643898964], + [-3.1182453632354736, 7.306848526000977], + [-0.992685854434967, 0.4534221887588501], + [6.790065288543701, -2.545377016067505], + [-4.8232550621032715, -1.160241723060608], + [3.0558013916015625, -4.737698554992676], + [-7.436584949493408, -1.2910391092300415], + [6.306511878967285, -1.0860520601272583], + [3.9535415172576904, 6.64315128326416], + [-4.620855808258057, -2.4595706462860107], + [-3.6983368396759033, -2.6660735607147217], + [1.2690997123718262, 5.169506072998047], + [-4.512784481048584, 5.444497108459473], + [-1.2574704885482788, -0.6906481981277466], + [-0.07048971205949783, 9.504859924316406], + [-1.5336567163467407, 1.3589352369308472], + [-0.6544216275215149, -0.41146424412727356], + [-4.328892707824707, -3.5031816959381104], + [8.01051139831543, -2.0798919200897217], + [-0.5845773220062256, 7.885623931884766], + [-4.92367696762085, 6.33802604675293], + [3.1276514530181885, -5.00187873840332], + [-5.203408718109131, -3.4941911697387695], + [-0.2715499997138977, 10.093141555786133], + [-2.9418282508850098, 2.419173002243042], + [-2.4015965461730957, 4.704159259796143], + [1.5836411714553833, -7.511782169342041], + [-5.510828018188477, 8.123050689697266], + [0.02411816269159317, -0.80500328540802], + [2.42732834815979, -5.1987199783325195], + [-0.5352514982223511, 9.791670799255371], + [-0.2653582692146301, 10.680435180664062], + [2.6401407718658447, -4.212108612060547], + [-4.815610408782959, -0.8520336151123047], + [-0.5326555967330933, -0.945375919342041], + [-2.3114402294158936, 1.0943225622177124], + [-6.6077399253845215, 8.200990676879883], + [6.9770588874816895, -2.1661922931671143], + [2.842583417892456, -4.242534637451172], + [1.5489379167556763, 3.810788154602051], + [-2.203626871109009, 1.7200911045074463], + [-7.41534948348999, 9.095052719116211], + [-5.147961139678955, -3.3710989952087402], + [-3.1595847606658936, -2.915804147720337], + [-3.6021716594696045, 1.550915241241455], + [-2.0841753482818604, -0.22954827547073364], + [-2.61435866355896, 0.6251692771911621], + [0.28037261962890625, -0.2446390837430954], + [2.1950736045837402, 0.22242471575737], + [-2.502208948135376, -3.8693015575408936], + [-4.468433380126953, -1.7896572351455688], + [2.169083833694458, 5.843028545379639], + [-2.292750835418701, 0.4638327360153198], + [1.5180633068084717, -7.667658805847168], + [1.4932658672332764, 5.309133529663086], + [-0.47568535804748535, 9.024711608886719], + [-5.6376423835754395, 4.2618021965026855], + [-2.536778450012207, 2.5025970935821533], + [1.6466479301452637, -7.612312316894531], + [2.6803481578826904, -4.019555568695068], + [8.376181602478027, -2.575338125228882], + [1.84287691116333, 1.431147813796997], + [-2.5156493186950684, 2.0405755043029785], + [2.984388828277588, -4.485428333282471], + [-6.702216625213623, 8.300132751464844], + [-3.9493091106414795, -2.3171024322509766], + [-3.0088589191436768, -3.542090892791748], + [-0.5398635864257812, 9.107845306396484], + [4.317614555358887, 7.165163993835449], + [-1.1939043998718262, -0.7626208066940308], + [-3.052629232406616, 1.5383464097976685], + [2.9721434116363525, -4.54075813293457], + [2.3916800022125244, -5.808644771575928], + [-0.4440883994102478, 9.27481460571289], + [-6.537467956542969, 8.400689125061035], + [2.439732313156128, -3.951876401901245], + [7.66109561920166, -1.8833521604537964], + [-5.333481311798096, -4.144522666931152], + [-3.851310968399048, -1.3462398052215576], + [3.023738384246826, -4.5406694412231445], + [3.460181951522827, -5.146930694580078], + [-2.2345807552337646, 1.3570023775100708], + [-1.6575871706008911, -2.0321316719055176], + [-5.009267807006836, -3.2370431423187256], + [2.06347393989563, -3.8288490772247314], + [-4.279268264770508, -3.9324874877929688], + [1.6516249179840088, -5.370558738708496], + [2.445099353790283, 4.962201118469238], + [6.331173896789551, -1.0431307554244995], + [-0.20874324440956116, -1.4586209058761597], + [2.874549388885498, -4.357909202575684], + [-8.87797737121582, -0.9182463884353638], + [4.276430130004883, 7.0252299308776855], + [0.39800018072128296, 0.013763483613729477], + [-2.368523359298706, 1.9325932264328003], + [-5.695324420928955, 6.013980865478516], + [-4.553589344024658, -2.23736834526062], + [8.295660972595215, -2.5411550998687744], + [1.4033622741699219, -6.545956611633301], + [1.7999308109283447, -7.036098480224609], + [-4.5565876960754395, 1.5369369983673096], + [-5.891128063201904, 2.0142149925231934], + [-2.529165506362915, 2.0024635791778564], + [-5.258945941925049, -2.814990758895874], + [-2.2482755184173584, -2.260770082473755], + [-3.4515836238861084, 5.132283687591553], + [1.7814120054244995, 4.475963115692139], + [2.963146209716797, -6.4767327308654785], + [-3.2137563228607178, -0.7850280404090881], + [-3.8061296939849854, -2.3621387481689453], + [2.9423532485961914, -4.419318675994873], + [-0.505900502204895, 6.506525993347168], + [-1.1880202293395996, 1.2689791917800903], + [-2.686814546585083, -2.0185863971710205], + [-2.5041606426239014, 0.8988622426986694], + [-3.5264294147491455, -4.435978889465332], + [-7.549140453338623, 1.7655788660049438], + [-5.902065753936768, -1.843063235282898], + [-6.704158306121826, -0.6621266603469849], + [2.1423110961914062, -4.8144612312316895], + [-4.276468753814697, -2.6530215740203857], + [-4.7445878982543945, -4.976006984710693], + [1.6890485286712646, 1.756678819656372], + [1.3060564994812012, -7.162352085113525], + [2.7455575466156006, -4.222535133361816], + [3.115232229232788, -4.668587684631348], + [-0.3221873641014099, 9.415007591247559], + [-4.119775295257568, -3.0974342823028564], + [-5.702844142913818, 7.78843879699707], + [0.03689325600862503, -3.6172773838043213], + [-4.774830341339111, 5.422748565673828], + [-0.6235817670822144, 9.18282699584961], + [2.4266083240509033, -4.768592834472656], + [-5.910033702850342, 8.028995513916016], + [-5.333183288574219, -1.777099370956421], + [1.6478550434112549, 0.5610711574554443], + [2.7035839557647705, -4.940884113311768], + [-5.188233375549316, -3.5803112983703613], + [-4.298386573791504, 6.408711910247803], + [2.0999467372894287, 0.37119433283805847], + [-0.20440560579299927, 10.488555908203125], + [6.4810309410095215, -1.947432518005371], + [-5.73102331161499, -2.779370069503784], + [-5.449392795562744, -3.1007769107818604], + [-8.72254753112793, 10.64405632019043], + [0.19000643491744995, -1.0219084024429321], + [-3.7515690326690674, 4.068061828613281], + [-3.8998513221740723, -1.9409115314483643], + [-1.8537876605987549, -1.6963201761245728], + [-1.4417972564697266, -1.5871034860610962], + [-4.996041774749756, -3.5159435272216797], + [-4.488883972167969, -2.2217326164245605], + [7.794196605682373, -2.0025596618652344], + [9.239042282104492, -2.562795877456665], + [-4.4939045906066895, -1.8011548519134521], + [-3.627451181411743, -0.4699198603630066], + [-2.426323175430298, 2.5149693489074707], + [-4.57039737701416, 3.667203664779663], + [-0.16152775287628174, 9.409887313842773], + [-5.640462398529053, -1.8223260641098022], + [-4.1467976570129395, -3.9579532146453857], + [-0.4376702904701233, -1.0535409450531006], + [-4.6181840896606445, -2.769721746444702], + [-0.5225769877433777, 9.426624298095703], + [-3.960277795791626, 0.579779863357544], + [3.146779775619507, -4.711705207824707], + [0.7301046252250671, -2.7106661796569824], + [-5.1761088371276855, -3.9613609313964844], + [-4.81949520111084, -3.711754083633423], + [-4.3913164138793945, -1.490198016166687], + [0.7676985859870911, -5.898739814758301], + [-5.553141117095947, -3.1617743968963623], + [-0.47271353006362915, 10.264500617980957], + [3.173044443130493, -4.827916145324707], + [-3.066909074783325, -3.0121819972991943], + [-7.88386869430542, -1.2853549718856812], + [-2.6465532779693604, -3.4891350269317627], + [-5.250364780426025, -2.2470602989196777], + [-2.687169313430786, 1.844262957572937], + [7.575567722320557, -1.5672718286514282], + [-6.522099494934082, 8.014253616333008], + [1.1316251754760742, -6.5308613777160645], + [-2.3137452602386475, 6.168088912963867], + [-2.561279535293579, 1.836565375328064], + [4.2225871086120605, -3.0704543590545654], + [-4.856869220733643, -0.7449352741241455], + [-1.1105859279632568, -0.3115200698375702], + [-3.9784085750579834, 5.401817321777344], + [1.968543529510498, 5.41084623336792], + [2.250352621078491, -9.225034713745117], + [3.82098126411438, 6.9769792556762695], + [-0.05001480132341385, 9.5336332321167], + [-5.579403400421143, 7.778206825256348], + [-2.41334867477417, 2.5630810260772705], + [2.778475761413574, -4.190973281860352], + [-4.573488712310791, -2.1040921211242676], + [-3.6724941730499268, -3.107457399368286], + [1.9122529029846191, 5.597960948944092], + [-1.5815045833587646, 6.797487258911133], + [2.2700178623199463, 5.7482757568359375], + [-5.95353364944458, 7.284914493560791], + [-5.692052841186523, 0.040919896215200424], + [3.0161259174346924, -4.530518531799316], + [-0.3134142756462097, 9.930269241333008], + [-5.808499813079834, 5.797551155090332], + [-7.486733436584473, -1.8916258811950684], + [-5.2923054695129395, -2.891660451889038], + [-5.319738388061523, 5.605014801025391], + [1.3442258834838867, -6.10476016998291], + [1.0557032823562622, 0.47893422842025757], + [-4.164988040924072, 3.6102311611175537], + [1.9014263153076172, -8.465790748596191], + [2.8770394325256348, -4.8383989334106445], + [9.629250526428223, -2.680279493331909], + [-3.425031900405884, 6.114506244659424], + [-4.072473049163818, 0.8907690644264221], + [2.5616719722747803, -7.254933834075928], + [-5.808498382568359, 4.183292388916016], + [6.575352191925049, -1.4154614210128784], + [-2.2502658367156982, 6.0989298820495605], + [-6.166175365447998, 6.771498680114746], + [-7.162036418914795, 9.084651947021484], + [2.1772754192352295, 0.7576256990432739], + [-5.670272350311279, 5.015060901641846], + [-3.2088096141815186, -4.063746452331543], + [3.8466169834136963, 6.139010429382324], + [-5.229580402374268, 6.080044269561768], + [-7.728163242340088, -0.7509793043136597], + [-4.314008712768555, 1.137468695640564], + [2.2113165855407715, -0.6419742107391357], + [4.951632499694824, 6.494840621948242], + [-4.40937614440918, 6.381766319274902], + [1.1754603385925293, 1.035194754600525], + [-3.713761568069458, 4.870362281799316], + [3.2093825340270996, -4.815280914306641], + [-8.168954849243164, -0.18642938137054443], + [-5.531952381134033, -2.393068790435791], + [-7.245467662811279, -2.5448644161224365], + [-5.819894790649414, 8.554510116577148], + [-0.27000635862350464, 10.477254867553711], + [-5.298642158508301, -3.339761734008789], + [-5.3462347984313965, 7.230118751525879], + [-2.606517791748047, 1.552412748336792], + [-10.42676067352295, -1.0083105564117432], + [2.080245018005371, 5.943545818328857], + [2.5703933238983154, -3.6482062339782715], + [0.06619148701429367, 8.704267501831055], + [-5.780062675476074, -2.4607014656066895], + [-3.2916858196258545, -3.5384271144866943], + [6.0773773193359375, -0.76192706823349], + [-2.7255001068115234, 2.0339770317077637], + [7.985670566558838, -1.748736023902893], + [0.550216794013977, 9.823358535766602], + [2.8240954875946045, -7.342441082000732], + [-2.6255695819854736, 2.2588698863983154], + [-3.6342313289642334, -2.73543643951416], + [-3.302985906600952, -2.2732560634613037], + [-5.440218925476074, 6.848896503448486], + [-5.99663782119751, -1.624754786491394], + [-2.915815830230713, 1.6892069578170776], + [9.61409854888916, -2.6729824542999268], + [-5.93864107131958, -0.8362935781478882], + [-0.9734330177307129, -1.9214597940444946], + [-2.5033369064331055, 2.689014434814453], + [1.6572513580322266, -6.57136344909668], + [8.38056468963623, -2.307903528213501], + [2.7833590507507324, -4.285667419433594], + [0.5099520683288574, -0.8051483631134033], + [-7.692808151245117, -1.840183138847351], + [-4.593104839324951, -2.8624203205108643], + [-1.2972428798675537, 0.6177700757980347], + [7.340383052825928, -1.6955223083496094], + [-5.349645614624023, 6.720707416534424], + [-2.9091837406158447, -1.4853755235671997], + [4.567018032073975, -5.431674957275391], + [-2.259596347808838, 2.195192575454712], + [-3.8770816326141357, 6.817691326141357], + [1.3480829000473022, 5.316695213317871], + [-5.111599922180176, -1.8105765581130981], + [3.0385360717773438, -2.2367403507232666], + [-6.814681529998779, -1.9180904626846313], + [2.1375157833099365, -1.4314186573028564], + [3.2243378162384033, -4.815935134887695], + [1.2422200441360474, 6.069551467895508], + [-5.1003193855285645, -3.9498751163482666], + [-3.445340394973755, -3.826559543609619], + [-2.285780668258667, 2.6247050762176514], + [-5.0952019691467285, -2.6493141651153564], + [-6.536877155303955, -0.5028732419013977], + [-4.21306848526001, 2.7302725315093994], + [-5.139461040496826, 7.81906795501709], + [-5.228236198425293, -3.1841557025909424], + [-5.85579252243042, -2.9248859882354736], + [2.8759829998016357, -4.359890937805176], + [-4.7339301109313965, -2.293334484100342], + [6.9010725021362305, -1.6150630712509155], + [-1.3019883632659912, -2.0412354469299316], + [7.344328880310059, -1.40719473361969], + [-0.2554747462272644, 9.823309898376465], + [-5.39607572555542, -0.8886668086051941], + [-2.5917704105377197, -1.8472493886947632], + [2.842993974685669, -6.084083557128906], + [-3.4712774753570557, -1.5029672384262085], + [2.773441791534424, -5.791891574859619], + [0.35259515047073364, -0.7952204942703247], + [2.930053472518921, -4.177434921264648], + [-0.19935071468353271, 9.661640167236328], + [-2.2610480785369873, 0.9768358469009399], + [7.650847434997559, -2.365994691848755], + [-2.394975423812866, 6.063381195068359], + [-0.3794562816619873, -1.3048592805862427], + [1.8152313232421875, -2.864431619644165], + [3.359550714492798, -5.408247470855713], + [5.446914196014404, -1.4163278341293335], + [-2.861813545227051, 0.5953356623649597], + [7.120286464691162, -2.271580934524536], + [8.66508960723877, -2.3969149589538574], + [1.3943967819213867, -6.936033725738525], + [-5.831405162811279, -2.5917298793792725], + [-1.927073359489441, 0.6684188842773438], + [7.3045973777771, -3.7550652027130127], + [2.6241767406463623, -4.881557941436768], + [-3.973017454147339, -1.7899000644683838], + [2.890216112136841, -4.504751682281494], + [4.561040878295898, 6.7611565589904785], + [10.277132034301758, -2.8456554412841797], + [1.5875768661499023, -6.168060302734375], + [-6.3084564208984375, 7.687658309936523], + [5.516592025756836, -0.9355264902114868], + [4.407212734222412, -2.059455633163452], + [2.1435739994049072, -4.102115631103516], + [-1.9091863632202148, 0.7979940176010132], + [7.551765441894531, -1.8768943548202515], + [-3.387545108795166, -1.3641210794448853], + [9.819823265075684, -2.7109460830688477], + [-2.473146677017212, 0.7164262533187866], + [-4.284362316131592, -0.41170400381088257], + [-5.39447546005249, 8.274650573730469], + [-3.793724775314331, 5.949687480926514], + [-0.7634697556495667, -3.592458486557007], + [1.8543071746826172, -8.746360778808594], + [4.212287902832031, -5.047211170196533], + [0.7655299305915833, 3.3229782581329346], + [3.296292781829834, -3.581639051437378], + [-1.102663278579712, -1.5502599477767944], + [-4.718948841094971, -1.611958384513855], + [5.720738887786865, -2.9295382499694824], + [-4.228110313415527, 5.705258846282959], + [7.832015514373779, -2.0394504070281982], + [-2.173959732055664, -2.6590616703033447], + [-0.20912957191467285, -0.7685078382492065], + [-5.157048225402832, 2.3546371459960938], + [-5.265161991119385, -1.996387243270874], + [-6.790326118469238, 1.5858582258224487], + [-5.684433460235596, 5.601699352264404], + [-6.032988548278809, -2.1232287883758545], + [-2.0387449264526367, -1.3847219944000244], + [-0.18873518705368042, 9.785805702209473], + [-6.424533843994141, 6.348310470581055], + [2.183823585510254, -8.371030807495117], + [-4.792850017547607, 6.40312385559082], + [-2.665630340576172, -2.064516544342041], + [-5.509115695953369, 2.10874342918396], + [-3.542499303817749, 4.481993198394775], + [-4.3894219398498535, 7.583118438720703], + [-7.109323024749756, -1.416870355606079], + [-5.734464645385742, 7.318774700164795], + [-0.13967329263687134, -1.1267027854919434], + [-4.682562828063965, -2.755605459213257], + [1.3275171518325806, -0.27087485790252686], + [1.6078548431396484, 0.7867804765701294], + [-3.4978888034820557, -2.3001210689544678], + [1.6002109050750732, -2.3703343868255615], + [-3.981710195541382, -1.6588393449783325], + [2.614832639694214, -4.083199501037598], + [-2.192476987838745, 1.2263574600219727], + [-3.269371271133423, -4.269089698791504], + [1.8514466285705566, 5.137763023376465], + [-6.202718734741211, 8.097804069519043], + [2.6854283809661865, -6.411349296569824], + [7.651209354400635, -1.957038164138794], + [-5.332441329956055, 0.0486714206635952], + [2.6270694732666016, -4.563622951507568], + [-2.4072835445404053, 1.7818033695220947], + [2.8517556190490723, -3.3194944858551025], + [-7.603637218475342, -1.2668700218200684], + [0.9295095801353455, -6.290524482727051], + [-5.932836532592773, 6.974181175231934], + [-0.20710211992263794, 10.145544052124023], + [8.110733032226562, -1.3234635591506958], + [-4.158419609069824, 6.949102878570557], + [-0.21845215559005737, 10.912445068359375], + [0.2779187560081482, 0.20865866541862488], + [-5.233569145202637, 0.2377244234085083], + [4.629166603088379, 6.47477912902832], + [-0.7183524966239929, 13.027961730957031], + [-0.2726473808288574, 9.757485389709473], + [-0.0789540484547615, 10.716459274291992], + [-2.9647843837738037, -0.057116929441690445], + [-3.4505679607391357, -2.9517228603363037], + [-3.5182039737701416, -2.584515333175659], + [-0.5216779708862305, -1.1162729263305664], + [0.49286919832229614, -0.7264164686203003], + [2.9686334133148193, -6.579804420471191], + [-2.2550301551818848, -2.431957960128784], + [-6.86290979385376, 8.57680892944336], + [-4.071860313415527, -3.2098448276519775], + [-1.1097317934036255, -0.584515392780304], + [-5.609249591827393, 1.4963550567626953], + [-2.180549383163452, 6.2588958740234375], + [-7.744588375091553, -1.9538832902908325], + [-0.24840420484542847, 9.480177879333496], + [1.5046262741088867, -5.846998691558838], + [-7.951247215270996, -1.4233847856521606], + [-6.244557857513428, 0.21448993682861328], + [-0.1298283338546753, 9.494927406311035], + [1.8214795589447021, 5.505606174468994], + [4.0974955558776855, 6.900059223175049], + [7.167138576507568, -3.2753732204437256], + [-6.1705002784729, -3.0039477348327637], + [-0.40062087774276733, 8.960976600646973], + [-5.294581890106201, -2.1698620319366455], + [-3.2709689140319824, -0.9093051552772522], + [-6.351107120513916, 0.8290727734565735], + [-6.022982597351074, 5.833066940307617], + [-4.63834285736084, 6.089335918426514], + [-6.335486888885498, 7.0200347900390625], + [-6.856029510498047, 8.508655548095703], + [-6.544727325439453, -1.8446846008300781], + [-5.86216402053833, 1.5175082683563232], + [-6.280144214630127, -1.1397349834442139], + [-2.8999650478363037, 3.10657000541687], + [-4.534912586212158, -3.466280937194824], + [1.5277200937271118, -5.802993297576904], + [2.5988831520080566, -4.398842811584473], + [5.402985095977783, -1.0890721082687378], + [3.1753692626953125, -4.765963077545166], + [-0.05681223422288895, 10.80362606048584], + [5.839231014251709, -1.265130639076233], + [2.1353633403778076, -7.337508678436279], + [-2.013244867324829, 1.7649413347244263], + [-2.3147637844085693, 2.5328004360198975], + [2.91200852394104, -3.630467653274536], + [3.820173501968384, -3.364295244216919], + [1.4315528869628906, -3.7964513301849365], + [-5.221489429473877, -7.039764404296875], + [-4.887261867523193, 1.899463415145874], + [-5.351345062255859, 4.679174423217773], + [-2.3630640506744385, 1.2467682361602783], + [-3.4421136379241943, -3.811624765396118], + [4.133166790008545, -0.12174877524375916], + [-5.4295573234558105, -2.804306745529175], + [-0.26276785135269165, 9.541820526123047], + [-2.462688684463501, -0.4315115809440613], + [2.7761168479919434, -4.473830223083496], + [-5.953073978424072, 1.2008745670318604], + [4.605444431304932, 6.3364715576171875], + [-6.396656513214111, 8.042245864868164], + [-4.214447975158691, 6.580692291259766], + [1.917262315750122, -3.4180498123168945], + [-0.33741849660873413, 10.640503883361816], + [0.4830021858215332, 6.231213569641113], + [-6.71606969833374, 1.8328090906143188], + [-4.351801872253418, 6.23653507232666], + [8.360396385192871, -2.5934128761291504], + [-0.24190175533294678, 9.526254653930664], + [-4.245729923248291, -4.129594326019287], + [5.104283332824707, -3.4617648124694824], + [4.2669172286987305, 7.032528877258301], + [9.268301963806152, -2.659515619277954], + [1.4634344577789307, 5.577108860015869], + [-5.3548150062561035, 2.4073758125305176], + [6.754252910614014, -1.35016667842865], + [-2.1464171409606934, 1.0792526006698608], + [-5.868241310119629, 1.7002533674240112], + [-0.2601202726364136, 9.087406158447266], + [-2.3740413188934326, 1.3149187564849854], + [1.3095781803131104, -5.228134632110596], + [-4.230386257171631, -3.8110201358795166], + [2.4222826957702637, -4.133096694946289], + [3.1674933433532715, -6.993777275085449], + [-5.063903331756592, -2.027944803237915], + [1.916651964187622, -8.31307315826416], + [-4.654033184051514, 1.9707978963851929], + [2.493696928024292, -4.27694034576416], + [-4.885627269744873, 0.16243064403533936], + [6.64493465423584, -1.9358282089233398], + [-0.10452670603990555, -0.965103030204773], + [2.7439496517181396, -4.722332954406738], + [1.692225456237793, -2.6514837741851807], + [-3.9781079292297363, 6.981547832489014], + [-5.148129463195801, 3.607487440109253], + [5.781045436859131, 7.438041687011719], + [-6.57712984085083, 8.35732650756836], + [-5.006988048553467, -3.1335506439208984], + [-3.7063333988189697, 4.151270389556885], + [-5.3552045822143555, 2.619072675704956], + [-5.2879252433776855, -3.430898427963257], + [-5.035102844238281, 2.991999864578247], + [-5.059971332550049, -3.4908010959625244], + [-4.66571569442749, -3.73071551322937], + [-1.903307557106018, 2.0931854248046875], + [-7.365510940551758, -1.7541354894638062], + [2.9104197025299072, -4.184382438659668], + [8.298014640808105, -1.981660008430481], + [-5.788548469543457, 0.26184141635894775], + [-5.0134968757629395, -2.8372576236724854], + [-3.218592643737793, -0.6956911087036133], + [2.5558032989501953, -5.190272331237793], + [-7.409618377685547, -1.8855483531951904], + [0.7915129065513611, -5.69868278503418], + [5.458477020263672, -1.3887308835983276], + [6.473203182220459, -1.364601969718933], + [-2.2404556274414062, 0.9954550266265869], + [9.044217109680176, -2.4299557209014893], + [-4.140377521514893, -1.8964875936508179], + [-4.761663913726807, -1.7876925468444824], + [-2.083632230758667, 2.6065354347229004], + [4.650881290435791, -2.1732141971588135], + [-6.871147155761719, 8.431116104125977], + [-2.6288766860961914, 2.0903913974761963], + [-2.216397523880005, 5.247851848602295], + [-0.25556880235671997, 10.929994583129883], + [-7.3112592697143555, 9.024641036987305], + [5.376626968383789, -1.190610408782959], + [7.085658550262451, -1.1403684616088867], + [-0.8667047619819641, 9.350092887878418], + [-1.1496121883392334, 0.6618925333023071], + [-0.29104793071746826, 9.604547500610352], + [-5.249587535858154, -4.478899002075195], + [-4.620237827301025, 5.183477401733398], + [-5.637614727020264, 0.2946913242340088], + [-5.3061418533325195, -0.1768065094947815], + [-3.4626753330230713, 3.583597183227539], + [-5.554869174957275, 7.701018333435059], + [-3.1695053577423096, -0.19307738542556763], + [2.749997854232788, -6.933063507080078], + [-0.3356674313545227, 9.11225700378418], + [1.2194318771362305, -7.207311630249023], + [3.267160177230835, -4.880725383758545], + [6.470461368560791, -2.416811227798462], + [-0.15092843770980835, -1.0403021574020386], + [2.8572027683258057, -5.460469722747803], + [2.7670774459838867, -4.2721147537231445], + [-3.371964693069458, -2.5817453861236572], + [3.0248327255249023, -4.532939434051514], + [5.392579555511475, -0.7809773683547974], + [5.221816062927246, -1.1338428258895874], + [-2.6129889488220215, 1.099342942237854], + [-5.008660793304443, -0.9839446544647217], + [2.9152913093566895, -4.1623640060424805], + [3.136021614074707, -4.7954535484313965], + [-4.314441204071045, -0.7541100978851318], + [-4.2063727378845215, -1.5199238061904907], + [-5.8517746925354, 6.9437103271484375], + [2.389707565307617, -6.623676300048828], + [9.391195297241211, -2.574237108230591], + [3.671924352645874, -5.135125160217285], + [2.4163410663604736, -9.304122924804688], + [-0.3021014332771301, 9.948331832885742], + [-2.422114849090576, -1.4939194917678833], + [-5.1886420249938965, -3.2451517581939697], + [-3.4709157943725586, -3.448746681213379], + [2.047485113143921, -3.3755269050598145], + [1.9156301021575928, 5.78364372253418], + [6.783195495605469, -2.3994219303131104], + [-5.414627552032471, 2.5116515159606934], + [-5.901238918304443, 2.5000691413879395], + [-4.772763729095459, -2.8738620281219482], + [-6.6392669677734375, 8.288712501525879], + [0.4375571608543396, 7.682563781738281], + [-2.897688388824463, 7.0923542976379395], + [-6.121605396270752, -2.2178854942321777], + [-2.8903753757476807, 3.2300641536712646], + [-0.3950861394405365, -1.4097570180892944], + [3.1741302013397217, -5.06196403503418], + [2.432891368865967, -3.587547779083252], + [-3.175935983657837, -4.956260681152344], + [-0.3769160509109497, 9.145170211791992], + [-5.203632831573486, -3.6209394931793213], + [-4.163915157318115, -2.9282243251800537], + [-0.7104334235191345, 10.186573028564453], + [-4.175178050994873, 5.64222526550293], + [-2.467757225036621, 2.5820276737213135], + [2.237370252609253, -3.4353787899017334], + [1.8967351913452148, 5.81289005279541], + [3.015866994857788, -4.591405868530273], + [1.9734156131744385, 5.248617172241211], + [-5.316436290740967, 1.9832390546798706], + [-6.47996187210083, 3.142151117324829], + [1.6962506771087646, 5.112124443054199], + [-8.1095552444458, 0.4359220266342163], + [3.291776418685913, -5.239417552947998], + [2.8126652240753174, -4.26601505279541], + [-1.1264618635177612, 8.131399154663086], + [-3.9374184608459473, 2.825810670852661], + [-5.177184104919434, -3.365074634552002], + [-0.1032751277089119, 11.502092361450195], + [-2.286020040512085, -0.88330078125], + [-4.926494598388672, 7.350021839141846], + [8.404149055480957, -2.7086522579193115], + [7.808956623077393, -2.0631792545318604], + [5.435731410980225, -1.3216369152069092], + [5.059633731842041, -0.9931793212890625], + [-3.8752925395965576, -0.5434602499008179], + [-5.958716869354248, 4.464788436889648], + [-4.987027645111084, -1.628926157951355], + [-2.275646209716797, -1.7517019510269165], + [-6.831018447875977, -0.974917471408844], + [-4.359243392944336, -1.7521308660507202], + [0.06407975405454636, -0.8748615980148315], + [4.444304943084717, 6.1237030029296875], + [-6.121781349182129, 1.6351162195205688], + [-7.026986598968506, -0.4227182865142822], + [3.0456435680389404, -4.704794406890869], + [-4.2762274742126465, 1.6473157405853271], + [1.081987738609314, -6.507750034332275], + [1.480247974395752, 1.4139466285705566], + [-4.7521796226501465, -3.169306993484497], + [-4.917461395263672, -2.4488203525543213], + [-0.5781365036964417, 12.038764953613281], + [2.219658136367798, -10.563944816589355], + [1.0347826480865479, 1.5082870721817017], + [1.4565457105636597, -8.486663818359375], + [3.111243724822998, -4.74123477935791], + [3.3338260650634766, 6.644248008728027], + [-4.9313130378723145, -3.865262031555176], + [-5.112222671508789, 6.092635154724121], + [-2.087127685546875, 1.9460369348526], + [-0.09614356607198715, -1.0231051445007324], + [-1.050172209739685, 8.56749153137207], + [2.7895758152008057, 0.6925640106201172], + [4.129127025604248, 7.014332294464111], + [-0.5177871584892273, 8.863439559936523], + [-2.5843613147735596, -1.3201271295547485], + [1.3076685667037964, 0.02755194529891014], + [7.341099262237549, -1.8068076372146606], + [-4.959542751312256, 1.1554397344589233], + [-0.0361524298787117, -0.3834892511367798], + [1.3701099157333374, -6.624118328094482], + [0.2643287181854248, 0.23028475046157837], + [-0.28516560792922974, 9.702377319335938], + [0.8889461159706116, -5.23646354675293], + [8.877345085144043, -2.5251448154449463], + [-0.299492746591568, -0.8063026666641235], + [2.2840380668640137, 5.791406631469727], + [-2.6670145988464355, -4.4236578941345215], + [2.8230698108673096, 0.6940480470657349], + [-3.856215238571167, 7.037714958190918], + [-0.7394333481788635, 1.1703417301177979], + [-2.19106125831604, -2.8869616985321045], + [-2.586237668991089, 1.4371850490570068], + [-1.8754712343215942, 0.5390744209289551], + [-6.591268062591553, -1.8425086736679077], + [-0.764965295791626, 1.9003877639770508], + [-4.700655937194824, -1.4777555465698242], + [-4.018987655639648, 5.095151424407959], + [-6.024452209472656, 6.0947370529174805], + [1.3175325393676758, -7.760640621185303], + [-5.137907981872559, 3.293806314468384], + [-2.237118721008301, 0.595679759979248], + [-4.526009559631348, -2.708130121231079], + [8.167635917663574, -1.982688307762146], + [-0.3625304400920868, -0.8472692370414734], + [-2.1919009685516357, 3.1560304164886475], + [-2.1325020790100098, 2.6071202754974365], + [4.659213542938232, 6.674135684967041], + [-6.873902320861816, -1.4310846328735352], + [1.6540491580963135, -5.709016799926758], + [-6.3096137046813965, 8.201406478881836], + [1.780529499053955, 5.374569892883301], + [8.256012916564941, -2.50671648979187], + [-6.555103778839111, 7.934460639953613], + [0.2484581470489502, -0.5153388381004333], + [-2.3729138374328613, 0.9764028787612915], + [-5.614965438842773, 1.7917853593826294], + [-0.48101383447647095, 10.12533950805664], + [-4.404663562774658, -2.7083184719085693], + [1.7018368244171143, -2.888927936553955], + [-0.5397908091545105, 10.366888046264648], + [1.9380414485931396, -4.085440158843994], + [1.8188281059265137, 5.230926990509033], + [-6.359877109527588, -0.8440215587615967], + [9.306153297424316, -2.592135190963745], + [7.3903913497924805, -1.8820184469223022], + [-4.156073093414307, -2.470273017883301], + [-4.435739040374756, -1.4521350860595703], + [-4.773209095001221, -3.9217545986175537], + [3.024653434753418, -4.5737199783325195], + [-0.44486159086227417, 10.855088233947754], + [2.2159178256988525, -7.558027744293213], + [-1.7052721977233887, 0.7465540766716003], + [-4.993868350982666, 4.595767974853516], + [-5.427821636199951, 0.2782288193702698], + [-5.205616474151611, 3.7719950675964355], + [0.5936039090156555, -6.058629035949707], + [2.210331439971924, -4.013104438781738], + [8.905080795288086, -2.5130488872528076], + [-2.0890555381774902, 0.0956454873085022], + [-3.1355483531951904, -4.816481590270996], + [-1.2185335159301758, 9.792362213134766], + [1.5118136405944824, -3.2817952632904053], + [-2.800856828689575, -0.07618188858032227], + [6.103140830993652, -1.1842306852340698], + [2.4994843006134033, -4.109620571136475], + [0.9315531849861145, -6.766383171081543], + [0.9761269688606262, -6.212310791015625], + [2.1440820693969727, 5.58991813659668], + [-4.6648640632629395, -2.094944715499878], + [-4.433635711669922, -3.169337034225464], + [-7.564820766448975, -1.0964103937149048], + [-4.9905242919921875, -2.89054799079895], + [2.2705771923065186, 5.953048229217529], + [-4.0803022384643555, 5.869012832641602], + [-5.296759605407715, -2.807317018508911], + [-7.927792549133301, 1.4739887714385986], + [-5.847390174865723, 0.44495368003845215], + [-0.038751907646656036, -0.7949517965316772], + [7.527618885040283, -1.7547658681869507], + [7.505196571350098, -1.8379004001617432], + [10.14179515838623, -2.8146958351135254], + [-0.016229160130023956, 9.967904090881348], + [-4.7303690910339355, 0.7361891865730286], + [-7.266972064971924, 0.20185041427612305], + [-4.257532119750977, 6.849961757659912], + [-4.90334939956665, 4.094486236572266], + [-6.1136155128479, 7.157537460327148], + [-0.09501225501298904, 8.210424423217773], + [-4.074542045593262, -3.3919222354888916], + [-0.2506149113178253, -1.2697193622589111], + [-2.2462761402130127, 1.7380322217941284], + [-2.5350425243377686, -2.96903920173645], + [-4.319151401519775, -0.7082571983337402], + [3.4291601181030273, -0.7664474248886108], + [2.7015669345855713, -4.2543864250183105], + [1.2897703647613525, -0.10035504400730133], + [3.0643646717071533, -4.61376428604126], + [8.915118217468262, -2.497072458267212], + [-6.967041492462158, 8.131086349487305], + [-6.53900671005249, 8.511514663696289], + [0.5896966457366943, 0.10434843599796295], + [8.000732421875, -1.8849315643310547], + [1.944706678390503, -9.679851531982422], + [-5.177834987640381, 4.423240661621094], + [-3.0473484992980957, 5.349155426025391], + [-0.13442307710647583, 9.776721954345703], + [1.4964522123336792, -2.8288910388946533], + [-0.20652151107788086, 5.2179155349731445], + [2.8470122814178467, -4.295053482055664], + [-1.3528480529785156, -1.9044462442398071], + [-2.703256130218506, 6.027529239654541], + [-0.26081448793411255, 9.887402534484863], + [2.970134735107422, -4.633452415466309], + [-4.7054643630981445, -3.9149882793426514], + [9.610101699829102, -2.68432354927063], + [-0.07933265715837479, -0.7908968925476074], + [-5.142253398895264, -3.4079363346099854], + [2.6985175609588623, 0.9215703010559082], + [3.7555198669433594, -2.2391843795776367], + [6.583915710449219, -3.116196393966675], + [7.13633394241333, -1.8649282455444336], + [3.149594783782959, -5.425222873687744], + [-2.5793707370758057, 1.8165322542190552], + [7.184311389923096, -1.3756239414215088], + [-0.2332739233970642, 9.180755615234375], + [-2.6376001834869385, 2.0170693397521973], + [0.9344391226768494, -0.03205237165093422], + [-1.348240613937378, -2.612933397293091], + [-3.4085748195648193, -3.6283833980560303], + [-5.046812534332275, -2.309235095977783], + [4.065150260925293, -6.518673896789551], + [1.9583220481872559, 5.156827926635742], + [-5.305774211883545, -4.373264312744141], + [-0.4930776357650757, 5.580896854400635], + [-2.9963624477386475, -1.9135149717330933], + [-1.1913803815841675, -2.2056844234466553], + [-3.9344589710235596, -3.445814847946167], + [7.475119113922119, -1.6497864723205566], + [0.3907158374786377, -6.105964183807373], + [1.9110219478607178, -6.958860397338867], + [-0.6245539784431458, -0.8250836133956909], + [-3.898239850997925, -1.2237275838851929], + [-5.097010612487793, 4.862396240234375], + [-2.280752658843994, 0.42394667863845825], + [-2.7457196712493896, 3.7328920364379883], + [-2.3122823238372803, -1.8035591840744019], + [3.2411608695983887, -4.912558555603027], + [-1.1431281566619873, -0.3175140619277954], + [-4.228029727935791, -2.3589494228363037], + [2.945150136947632, -4.595714092254639], + [5.950718402862549, 7.479029655456543], + [-2.2909977436065674, 2.0338737964630127], + [8.355240821838379, -2.933533191680908], + [1.8558666706085205, -7.119424819946289], + [2.6515674591064453, -5.476353645324707], + [4.254270076751709, -1.694590449333191], + [-2.4702367782592773, 4.055917263031006], + [7.788097858428955, -1.6171268224716187], + [-5.609713077545166, 1.915116310119629], + [-4.057544231414795, -0.44372034072875977], + [2.76655912399292, -4.190909385681152], + [2.4423882961273193, 6.146340370178223], + [10.134263038635254, -2.81173038482666], + [1.7788078784942627, -3.424246072769165], + [8.540289878845215, -2.3389980792999268], + [-3.482271909713745, -0.7813886404037476], + [1.6930660009384155, -6.048351287841797], + [2.46392560005188, -7.593382835388184], + [-4.2567973136901855, 4.8260908126831055], + [-0.2860007882118225, 9.639741897583008], + [2.8237411975860596, -4.485756874084473], + [-4.836220741271973, -0.3919970393180847], + [2.6548044681549072, -4.0694403648376465], + [6.45578145980835, -3.290389060974121], + [-5.324535846710205, 5.032477378845215], + [1.4312522411346436, -3.9512360095977783], + [-5.249051570892334, -5.427811622619629], + [-4.4261345863342285, -2.7970972061157227], + [0.29675936698913574, 6.35973596572876], + [9.465707778930664, -2.731391191482544], + [-0.8706733584403992, 9.326384544372559], + [2.44673752784729, 1.7255877256393433], + [-3.7780277729034424, -3.571525812149048], + [2.8596668243408203, -4.480461597442627], + [2.560112237930298, -5.326123237609863], + [-2.2350854873657227, 1.5788172483444214], + [-0.41868406534194946, 9.207768440246582], + [1.3488386869430542, -5.81573486328125], + [-1.6159077882766724, 1.9594887495040894], + [-0.2404354214668274, 10.640178680419922], + [-0.2510698437690735, 10.472896575927734], + [-5.384008407592773, -2.755612373352051], + [-2.5486254692077637, -0.23820549249649048], + [2.112971544265747, -3.9852871894836426], + [-5.406602382659912, 2.242236614227295], + [1.3881032466888428, -6.940934181213379], + [-0.37764549255371094, 11.014259338378906], + [0.04212915152311325, 9.54980182647705], + [0.5951578617095947, 0.21266892552375793], + [-4.343393802642822, -2.1858725547790527], + [3.22402286529541, -5.110496520996094], + [-2.250908136367798, 0.9674440622329712], + [-2.0687270164489746, -0.8987314701080322], + [6.948703289031982, -2.8243372440338135], + [-7.823843479156494, 0.05421292409300804], + [-0.20867592096328735, 9.732124328613281], + [2.8976011276245117, -4.359579563140869], + [-1.0404936075210571, -2.3066108226776123], + [5.36260461807251, -1.209123134613037], + [6.6845784187316895, -2.0946877002716064], + [4.920114040374756, 7.188815116882324], + [-5.3903069496154785, -1.0137208700180054], + [-4.846545696258545, -3.1135876178741455], + [-4.608022689819336, 6.140254974365234], + [-7.478269100189209, -0.3575139045715332], + [-0.7285640835762024, 5.627440452575684], + [-4.4150309562683105, 6.935774803161621], + [-2.555748224258423, 0.6068642735481262], + [-0.2925657629966736, 10.238117218017578], + [-4.1533522605896, -2.6042144298553467], + [-5.544748783111572, -4.651839256286621], + [-3.714491128921509, -1.636364221572876], + [-4.569758415222168, 7.252272605895996], + [-0.6782369017601013, -0.6298604011535645], + [-2.412764310836792, 1.8104805946350098], + [-0.23664283752441406, 9.966785430908203], + [-5.59292459487915, 7.978828430175781], + [-0.27351653575897217, 9.848997116088867], + [-4.432408809661865, -2.106106996536255], + [-6.1166462898254395, 5.01588249206543], + [2.3732857704162598, -4.863523483276367], + [9.61201286315918, -2.593693494796753], + [-6.3107733726501465, -1.1658927202224731], + [1.8768901824951172, 5.026649475097656], + [1.9226291179656982, -4.731839179992676], + [-2.2413623332977295, 1.5099204778671265], + [-3.8985321521759033, 5.157406806945801], + [3.613053560256958, 1.5602344274520874], + [-4.916490077972412, -3.2636911869049072], + [3.051326036453247, -4.779080390930176], + [-0.3444308042526245, 9.225669860839844], + [2.225313186645508, 0.8835930824279785], + [-5.1847615242004395, 6.7614898681640625], + [-1.9928267002105713, -3.273247480392456], + [-2.3220229148864746, 5.989251613616943], + [-3.2013156414031982, -3.7605087757110596], + [-5.2845940589904785, -1.7694369554519653], + [6.115625858306885, 7.916407585144043], + [8.793706893920898, -2.3859643936157227], + [-0.025171466171741486, -0.45249661803245544], + [-4.979446887969971, -2.20908522605896], + [-3.229992151260376, -3.088719606399536], + [-2.6255688667297363, 0.9133495688438416], + [-5.317626476287842, -3.900256395339966], + [-5.489597320556641, 8.243447303771973], + [2.4753916263580322, -3.0957517623901367], + [2.00571608543396, -3.320042610168457], + [3.318622350692749, -6.301022529602051], + [-4.894236087799072, 1.7485597133636475], + [-5.932393550872803, 6.826360702514648], + [1.0164116621017456, -6.415925979614258], + [2.0102603435516357, -7.469452857971191], + [-0.3710066080093384, -1.4783023595809937], + [-2.853959560394287, 3.0578489303588867], + [-5.417906761169434, -2.195908546447754], + [-1.4171291589736938, 5.487810134887695], + [5.745131969451904, -3.215883731842041], + [-6.566469669342041, 8.292898178100586], + [1.7474043369293213, -8.695978164672852], + [6.377933025360107, -1.195455551147461], + [-5.880422115325928, 7.018092155456543], + [7.842032432556152, -2.0078365802764893], + [-5.484049320220947, 2.7236478328704834], + [-0.18508368730545044, 9.637845993041992], + [2.349999189376831, 5.939908027648926], + [2.118525743484497, -6.98567008972168], + [-4.455071926116943, 6.681898593902588], + [-4.117351055145264, 6.574653625488281], + [0.7500662207603455, -6.694413185119629], + [-4.305897235870361, -0.6921845078468323], + [-4.187374114990234, -3.18444561958313], + [-5.240782260894775, -3.613659143447876], + [-0.3248515725135803, -0.9320849180221558], + [-2.2396957874298096, 5.067753314971924], + [-0.2536197304725647, 9.677295684814453], + [2.9751007556915283, -4.478177070617676], + [-0.15101441740989685, -0.9968408346176147], + [-0.20563703775405884, 8.337533950805664], + [3.1560511589050293, -2.2426340579986572], + [0.25261250138282776, -0.8180783987045288], + [-1.4739519357681274, 1.1922607421875], + [1.9092315435409546, 5.144546985626221], + [-2.8327817916870117, 2.7254130840301514], + [-5.7407708168029785, -2.921245813369751], + [-1.4577380418777466, 2.9337406158447266], + [7.500171184539795, -1.604732632637024], + [2.251098155975342, -9.439966201782227], + [1.1199754476547241, 5.141685485839844], + [7.704598903656006, -1.8198825120925903], + [7.519668102264404, -2.7588298320770264], + [-0.2089686393737793, 10.08090591430664], + [-0.2650814652442932, 9.631603240966797], + [0.9965701699256897, 9.492973327636719], + [0.3762163519859314, -0.09319910407066345], + [-2.5065815448760986, -3.908339262008667], + [-5.1611409187316895, -3.3460702896118164], + [2.7107326984405518, -7.064149379730225], + [2.2446835041046143, -4.047255039215088], + [-2.2142996788024902, 5.256484031677246], + [5.696274757385254, -1.8675340414047241], + [-0.1962459683418274, 9.6494140625], + [3.3957364559173584, -2.9405887126922607], + [-5.163387775421143, -2.917332410812378], + [8.451397895812988, -2.4498748779296875], + [-4.364039421081543, 6.600688934326172], + [-5.933629512786865, 7.084280014038086], + [-4.610150337219238, -2.430551528930664], + [2.381953239440918, -2.9602739810943604], + [-2.2771198749542236, 7.000859260559082], + [1.584649920463562, -4.770508766174316], + [-0.32272300124168396, -0.8609097003936768], + [-8.113025665283203, -0.8693476915359497], + [1.6603871583938599, 5.4017252922058105], + [-2.5207252502441406, -0.8196641802787781], + [-0.7910127639770508, -0.8664565682411194], + [0.9416142106056213, 5.649392127990723], + [-3.643444061279297, -1.9450892210006714], + [-2.035862922668457, 1.237587571144104], + [-2.0992043018341064, 2.6057825088500977], + [-4.559291362762451, -2.5353198051452637], + [-2.5732572078704834, 1.5526916980743408], + [-3.0903875827789307, 6.671086311340332], + [-5.6663289070129395, 6.821040630340576], + [3.0799453258514404, -5.55182409286499], + [-6.3093085289001465, 7.995793342590332], + [1.1871048212051392, -7.114409446716309], + [-2.2674076557159424, 0.18532198667526245], + [-2.538616418838501, 1.9683796167373657], + [8.069979667663574, -2.754859685897827], + [-1.1756091117858887, 9.903611183166504], + [-1.3238946199417114, 7.665432453155518], + [-0.24899232387542725, 9.582244873046875], + [3.0082290172576904, -4.687265396118164], + [-4.0794196128845215, -2.8295624256134033], + [-2.4857475757598877, 2.0278573036193848], + [9.273256301879883, -2.5036165714263916], + [1.27633798122406, -6.579502105712891], + [-2.4024133682250977, 1.0427883863449097], + [-6.786192893981934, 8.581703186035156], + [-3.7965142726898193, -2.5427865982055664], + [-5.946723937988281, 7.839826583862305], + [6.7768473625183105, -1.49252188205719], + [-4.691421985626221, 3.9122262001037598], + [2.9759416580200195, -4.51473331451416], + [1.0874199867248535, -6.177534103393555], + [-0.6742714047431946, 9.923395156860352], + [5.880175590515137, -0.9635436534881592], + [2.9153120517730713, -4.557217121124268], + [-0.13740772008895874, 10.671380996704102], + [8.95933723449707, -2.5042765140533447], + [4.203507900238037, -6.491004467010498], + [-5.197685241699219, -0.5982191562652588], + [-4.8942742347717285, -2.8055341243743896], + [-1.3913240432739258, 5.392187118530273], + [-6.224987983703613, -2.1155757904052734], + [3.659869909286499, 6.768051624298096], + [-3.5312998294830322, -4.654637813568115], + [-4.780366897583008, 7.4846577644348145], + [-4.934558391571045, 6.190847873687744], + [9.053128242492676, -2.828389883041382], + [2.1199605464935303, 5.657255172729492], + [2.067176103591919, 5.848385810852051], + [-4.987602710723877, 5.106410980224609], + [-2.7242913246154785, -0.8089650273323059], + [-1.2228038311004639, 6.987601280212402], + [-0.33389759063720703, 11.0120849609375], + [-7.351500511169434, -1.3557442426681519], + [5.30118465423584, -1.5554951429367065], + [-1.1203252077102661, 5.282317161560059], + [2.1293582916259766, 3.7903530597686768], + [3.254237651824951, -4.9015350341796875], + [-0.9693923592567444, 9.329280853271484], + [-0.9533331394195557, -3.026028871536255], + [-2.7816927433013916, -0.3050137162208557], + [-4.886025905609131, -2.793433427810669], + [0.8073974251747131, -0.21026021242141724], + [3.132854700088501, -4.698646545410156], + [7.9424567222595215, -1.5844546556472778], + [9.987981796264648, -2.808232069015503], + [-4.020313262939453, -2.2857320308685303], + [2.600458860397339, -4.141602039337158], + [9.363015174865723, -2.6083576679229736], + [-6.0981245040893555, 7.732555866241455], + [3.1023294925689697, -5.474582672119141], + [3.6954615116119385, 6.691210746765137], + [-0.31893348693847656, 9.833812713623047], + [-4.760702610015869, -3.6057395935058594], + [-5.209523677825928, -2.1567304134368896], + [3.104123115539551, -4.787101745605469], + [7.8410773277282715, -1.818105697631836], + [-5.734494209289551, 5.154533863067627], + [1.5794117450714111, -7.449979305267334], + [2.8407256603240967, -4.748523712158203], + [-1.5625958442687988, 0.6576515436172485], + [-2.124603271484375, 0.37084877490997314], + [-8.86988639831543, -0.9990724325180054], + [2.790121555328369, -4.269461631774902], + [-8.799120903015137, -0.9763730764389038], + [-3.3754007816314697, 2.020400285720825], + [-7.471163272857666, -1.1235109567642212], + [-4.273426055908203, 4.452591896057129], + [-6.267370223999023, 8.331846237182617], + [-4.904377460479736, -1.2718795537948608], + [2.7372963428497314, -7.028895378112793], + [-0.17192620038986206, 9.754570960998535], + [-2.960048198699951, 3.2822978496551514], + [4.522916793823242, 7.19589900970459], + [1.204628825187683, -4.862910270690918], + [4.016590595245361, -1.465622067451477], + [2.9537172317504883, 5.651902675628662], + [-4.907162189483643, 5.746382713317871], + [2.5919950008392334, 5.504903793334961], + [-7.039207935333252, 8.715655326843262], + [-3.7665748596191406, 0.8925365805625916], + [0.6132500767707825, -5.185097694396973], + [1.9763071537017822, 5.330522537231445], + [-4.296093463897705, -2.7946102619171143], + [-2.467296600341797, 1.4860955476760864], + [3.1539289951324463, -4.718871116638184], + [1.3746416568756104, -6.849473476409912], + [2.236377239227295, 5.211942672729492], + [-6.249661922454834, 8.078533172607422], + [5.522680759429932, -0.9860680103302002], + [-2.806037664413452, -3.3508522510528564], + [1.9900627136230469, 2.520624876022339], + [-4.519189357757568, -4.021260738372803], + [-2.7364280223846436, 2.110106945037842], + [-4.305003643035889, 1.7549831867218018], + [-0.3896733522415161, 9.81126594543457], + [10.172327995300293, -2.789257526397705], + [-0.0132642462849617, -2.3926842212677], + [-4.982269763946533, 5.698032855987549], + [-2.428964614868164, 1.3176709413528442], + [-4.210780620574951, -2.845909595489502], + [2.6673085689544678, -8.654496192932129], + [-2.2638261318206787, 3.093909978866577], + [-6.329726219177246, 8.248443603515625], + [-1.3816206455230713, 4.500854015350342], + [4.504114627838135, 7.303097724914551], + [2.9225172996520996, -4.423751354217529], + [-2.9855315685272217, -3.540297269821167], + [-2.357445240020752, 0.7710239887237549], + [9.01556396484375, -2.5101470947265625], + [-5.196794033050537, -4.013772964477539], + [6.870675086975098, -1.3261760473251343], + [-4.970353603363037, -3.0001723766326904], + [2.422889471054077, -5.406093597412109], + [2.4477035999298096, -4.070196151733398], + [-0.39345306158065796, 11.07272720336914], + [-8.40926742553711, -1.2029441595077515], + [-4.682859897613525, 7.432448863983154], + [-7.106203556060791, -1.8436744213104248], + [0.7065048813819885, -0.08063852787017822], + [1.2192533016204834, 5.65312385559082], + [-0.34345871210098267, 10.840890884399414], + [-5.6166090965271, 6.926900863647461], + [-6.234489917755127, -1.3042868375778198], + [-2.869163990020752, 2.614598274230957], + [3.7140324115753174, 6.017475605010986], + [-2.133035898208618, 2.9290645122528076], + [3.1770620346069336, -4.755314350128174], + [-0.43268853425979614, 11.22181224822998], + [3.187744379043579, -4.777347564697266], + [-4.570097923278809, -2.1890151500701904], + [1.7456949949264526, 5.4593505859375], + [-4.3401994705200195, -1.5046368837356567], + [1.68929123878479, 5.024561882019043], + [-4.916108131408691, -0.4160715341567993], + [1.887235403060913, 0.8917093276977539], + [-3.5183029174804688, -3.3109238147735596], + [2.324611186981201, -3.6851754188537598], + [2.0973317623138428, 3.400872230529785], + [0.10071902722120285, 5.35650110244751], + [0.7849223017692566, -0.17983673512935638], + [0.2294957935810089, -4.43055534362793], + [-6.305599212646484, 7.733823299407959], + [2.5970070362091064, -3.9599015712738037], + [6.212791919708252, -3.6761486530303955], + [1.505100131034851, -7.805864334106445], + [-3.8233907222747803, -1.9009405374526978], + [-4.753538608551025, -3.2141573429107666], + [2.686300754547119, 5.619505882263184], + [-4.368449687957764, 3.3011770248413086], + [-5.078932762145996, -2.701227903366089], + [2.526320219039917, -3.646787643432617], + [-1.3319416046142578, 1.4988811016082764], + [-4.973915100097656, 6.460629463195801], + [-3.8663394451141357, -0.1736769676208496], + [1.4547137022018433, -7.5074567794799805], + [-6.537934303283691, -1.7962981462478638], + [-0.19775128364562988, 9.878284454345703], + [0.9624640345573425, 0.3024992346763611], + [2.3325531482696533, -3.807389497756958], + [-2.675035238265991, -4.393460273742676], + [-3.387324810028076, 2.280541181564331], + [-3.8444883823394775, -3.377089738845825], + [-4.289471626281738, -3.365476369857788], + [-0.3600919246673584, -1.7689534425735474], + [2.2398521900177, -8.60672378540039], + [9.372305870056152, -2.52563738822937], + [-5.859282493591309, 4.531733512878418], + [7.720695972442627, -2.5818932056427], + [-4.348028182983398, 4.284602642059326], + [-3.190568447113037, 3.504396677017212], + [-4.818685054779053, -2.302190065383911], + [2.5484766960144043, -7.657710075378418], + [2.2981090545654297, 5.690145015716553], + [-0.4754895567893982, 10.979293823242188], + [-3.4318630695343018, -2.859964609146118], + [-4.770664691925049, -2.853315830230713], + [0.892594039440155, 0.7553048133850098], + [-5.552181720733643, -3.227252960205078], + [-7.064294338226318, 8.682890892028809], + [-3.7705910205841064, -2.833265781402588], + [-0.279511034488678, 10.227925300598145], + [-6.796027660369873, 8.792242050170898], + [-3.313807249069214, -0.029686633497476578], + [-2.384643316268921, 0.23710209131240845], + [2.7627692222595215, 6.30661678314209], + [-7.975032329559326, -1.8554123640060425], + [-2.2745509147644043, 2.0365569591522217], + [2.2193210124969482, -5.892159461975098], + [-0.3390592336654663, 10.212000846862793], + [-5.726277828216553, -3.3945889472961426], + [0.5019571781158447, -0.4690614938735962], + [3.7555246353149414, 5.748955726623535], + [2.0665366649627686, -10.224405288696289], + [9.25156021118164, -2.545910120010376], + [6.800660610198975, -3.2323639392852783], + [2.865379571914673, -4.399864673614502], + [-2.8024704456329346, 0.05989533290266991], + [2.345209836959839, 5.700058937072754], + [6.436853885650635, -1.6228431463241577], + [0.5042780637741089, -0.7994795441627502], + [-2.8551101684570312, -0.0038293637335300446], + [-2.4654312133789062, 1.0860700607299805], + [-0.3658146858215332, -1.1320258378982544], + [-6.780919075012207, -1.4238524436950684], + [-0.44782525300979614, 9.623367309570312], + [3.0209367275238037, -6.406851291656494], + [-5.944911479949951, -2.6163277626037598], + [-2.26400089263916, -0.04327184334397316], + [-2.4076764583587646, 1.8076285123825073], + [-3.1253159046173096, 3.431783437728882], + [8.149815559387207, -2.2977194786071777], + [3.1181726455688477, -4.491598129272461], + [-3.474527597427368, -3.493114709854126], + [-2.5318210124969482, 1.970715880393982], + [-4.606542110443115, 3.5887362957000732], + [0.1519773304462433, -3.894514799118042], + [-5.756069183349609, 0.5843948125839233], + [-4.325864791870117, 8.049967765808105], + [-0.2532620429992676, 9.092184066772461], + [2.2699673175811768, -5.381905555725098], + [-2.3426971435546875, 2.7551376819610596], + [7.636513710021973, -1.8444496393203735], + [-5.819967269897461, -2.237053871154785], + [2.875358819961548, -4.95079231262207], + [-4.601098537445068, -3.0064523220062256], + [1.7100132703781128, 4.7274675369262695], + [-4.217219352722168, -3.9523627758026123], + [4.359483242034912, -2.0129785537719727], + [-5.349029064178467, -4.983542442321777], + [5.3679399490356445, -1.6337409019470215], + [-5.698814868927002, 0.46150267124176025], + [0.656154215335846, 1.067684531211853], + [3.058270215988159, 6.362918853759766], + [9.336000442504883, -2.612466812133789], + [2.455925703048706, -4.292269706726074], + [1.9806818962097168, 0.7579304575920105], + [-2.9717812538146973, 3.2986629009246826], + [-0.3952571153640747, 10.70796012878418], + [9.629203796386719, -2.719660520553589], + [-0.045595623552799225, -0.3696787655353546], + [3.0242841243743896, -4.815188407897949], + [4.173319339752197, 0.1538810431957245], + [5.189944744110107, -1.08073091506958], + [2.8844211101531982, -6.214712142944336], + [2.09562087059021, -4.036532402038574], + [1.7540048360824585, -0.10492615401744843], + [2.045130491256714, 5.342779636383057], + [-4.826904773712158, -2.9045417308807373], + [-4.583253860473633, -4.2176032066345215], + [-0.16611772775650024, 9.829051971435547], + [4.428751468658447, -0.5441712737083435], + [-0.09818423539400101, 9.621024131774902], + [-0.3045406937599182, 8.798528671264648], + [3.9544575214385986, -2.2301695346832275], + [-0.16844069957733154, 9.653364181518555], + [4.194518566131592, 6.718767166137695], + [-3.3937528133392334, -1.0593644380569458], + [2.833623170852661, -4.319242477416992], + [1.7673152685165405, -8.064144134521484], + [6.1433186531066895, -2.8350203037261963], + [1.783199667930603, -2.7389962673187256], + [-6.106616497039795, -0.8162645101547241], + [1.4882683753967285, 0.13464193046092987], + [1.5706623792648315, 0.5060667991638184], + [4.138927936553955, -4.207172393798828], + [2.801625967025757, -4.379610061645508], + [5.1000494956970215, -5.126999855041504], + [-4.0969438552856445, -2.2720987796783447], + [2.289771318435669, 3.32877254486084], + [3.095972776412964, -4.6868438720703125], + [9.426196098327637, -2.603266954421997], + [-6.4037699699401855, 4.7860002517700195], + [3.008413553237915, -4.521561622619629], + [-6.245346546173096, 8.145651817321777], + [-8.135214805603027, -1.4527356624603271], + [2.226111650466919, -3.8928544521331787], + [-5.459415912628174, 6.315610885620117], + [2.630452871322632, 6.062518119812012], + [0.9986053109169006, 6.686338424682617], + [-3.05039644241333, -5.592959403991699], + [-1.0619009733200073, 9.92379379272461], + [-0.29874569177627563, 10.256036758422852], + [-2.0219175815582275, -3.194866895675659], + [0.9654415249824524, 4.896885871887207], + [5.872216701507568, -2.737170457839966], + [-2.5929582118988037, 2.029608726501465], + [-5.386943340301514, -6.291867256164551], + [-7.50811243057251, 9.166961669921875], + [-6.451094150543213, 8.256360054016113], + [-1.4009376764297485, -0.8830388784408569], + [-3.419583559036255, -4.82427978515625], + [-7.453266620635986, 9.396222114562988], + [1.7162797451019287, 4.891454696655273], + [-6.917807102203369, -1.8061184883117676], + [-7.246574878692627, 8.857585906982422], + [2.410799264907837, -5.359362602233887], + [0.0056642815470695496, 9.437434196472168], + [-2.852097988128662, 3.569981813430786], + [-5.602621555328369, -2.617060661315918], + [-0.3182169795036316, 10.335651397705078], + [2.5427005290985107, 6.30800724029541], + [-4.502594470977783, 5.395175933837891], + [-5.026774883270264, -0.8706429600715637], + [6.475642681121826, -2.2073304653167725], + [-3.8301074504852295, -1.819997787475586], + [2.114396333694458, 1.0007697343826294], + [-0.20949405431747437, 9.704652786254883], + [-4.569936275482178, -1.9614707231521606], + [-0.8028327822685242, -0.5664705038070679], + [9.052613258361816, -2.4614717960357666], + [-5.488717079162598, 4.001710414886475], + [-5.429679870605469, 1.843049168586731], + [9.4849853515625, -2.6362099647521973], + [10.396041870117188, -2.7596304416656494], + [-4.154551982879639, -3.0932466983795166], + [0.0016936585307121277, 9.129524230957031], + [0.019253604114055634, 5.298831939697266], + [1.6232869625091553, -7.479686737060547], + [0.26042479276657104, 9.582437515258789], + [8.070530891418457, -3.0683181285858154], + [-4.71230936050415, -2.9305007457733154], + [8.898259162902832, -2.494821548461914], + [-4.84372615814209, 6.381117343902588], + [-3.132575273513794, -1.068466305732727], + [3.818004608154297, 1.6859544515609741], + [-2.272819995880127, 1.4794217348098755], + [3.0072779655456543, -4.690019607543945], + [0.7190718054771423, -5.753899097442627], + [4.525643825531006, 7.185974597930908], + [-4.909603595733643, 4.080740451812744], + [-0.6803970336914062, 9.678253173828125], + [0.9741109013557434, -5.228491306304932], + [-4.212950706481934, -1.72433340549469], + [-4.5876569747924805, -3.435554265975952], + [-0.31030046939849854, 10.492130279541016], + [-3.945016860961914, -4.897241115570068], + [8.748358726501465, -3.897158622741699], + [6.518925666809082, -2.4840447902679443], + [-0.7549195289611816, 9.375412940979004], + [-6.859560012817383, 1.8037484884262085], + [1.048710823059082, 0.25341421365737915], + [2.8990023136138916, -4.563033103942871], + [8.732935905456543, -2.6369361877441406], + [2.6295361518859863, -7.132473945617676], + [-2.14259934425354, 2.4895215034484863], + [-0.26542943716049194, 9.777738571166992], + [2.814734697341919, -4.381756782531738], + [-3.72458553314209, 6.043585777282715], + [1.4747278690338135, -8.217135429382324], + [4.205423355102539, -2.983529806137085], + [-4.816534996032715, -2.0749423503875732], + [-3.2983744144439697, 4.260557651519775], + [-6.4072065353393555, 8.057080268859863], + [3.2530276775360107, -5.840739727020264], + [-4.713119983673096, 2.1879522800445557], + [-4.236900806427002, -0.7717705368995667], + [-8.745926856994629, -1.4266815185546875], + [3.130577325820923, -4.688758850097656], + [-4.304528713226318, -3.8204190731048584], + [0.34291815757751465, -4.904829978942871], + [-5.145626068115234, 6.460627555847168], + [-3.290113687515259, -4.283002853393555], + [0.23620054125785828, -0.2927631139755249], + [3.084207057952881, -4.756765365600586], + [3.550814151763916, 6.495800018310547], + [-3.904101610183716, -3.1301658153533936], + [-3.1934192180633545, -3.2551143169403076], + [3.083143472671509, -5.172154426574707], + [-1.3591458797454834, 1.7256617546081543], + [-2.229691505432129, 3.1753928661346436], + [-0.5498825907707214, 9.87648868560791], + [-4.257562160491943, -4.461583137512207], + [0.8811110258102417, -5.776423454284668], + [-3.9555139541625977, -1.4130887985229492], + [-5.426565647125244, 2.4387574195861816], + [0.8877201676368713, -6.941222667694092], + [-1.626522421836853, 2.265693426132202], + [-5.121829509735107, 3.8534624576568604], + [-4.158699989318848, -2.9040544033050537], + [-0.2058609127998352, -0.6053705811500549], + [-0.2079595923423767, 9.191911697387695], + [-5.969579219818115, 7.4406328201293945], + [8.088116645812988, -2.0474555492401123], + [-3.10988187789917, -2.292515993118286], + [0.20596939325332642, 1.754410982131958], + [0.6237543225288391, 0.14262647926807404], + [-5.212229251861572, -4.165518760681152], + [-7.045038223266602, -1.9298813343048096], + [3.3838765621185303, -4.41317081451416], + [9.877226829528809, -2.764537811279297], + [9.449522018432617, -2.650386095046997], + [8.036011695861816, -2.131779670715332], + [-3.863903284072876, 6.457119941711426], + [-0.29246121644973755, 10.373637199401855], + [3.1060612201690674, -4.651735782623291], + [2.8562703132629395, -4.383040428161621], + [3.023921251296997, -4.537293434143066], + [1.4582470655441284, -4.801525115966797], + [3.0726282596588135, -4.712789535522461], + [-6.8309855461120605, 1.922330379486084], + [5.033391952514648, -1.0228193998336792], + [-2.26518177986145, 0.2778084874153137], + [-2.4193146228790283, 1.6770732402801514], + [-6.26167631149292, 6.164359092712402], + [-4.417140960693359, 5.884772777557373], + [1.115872859954834, -7.935158729553223], + [1.0400586128234863, -5.555469036102295], + [-5.125860691070557, 4.024691104888916], + [1.1409626007080078, -3.784299373626709], + [3.5113251209259033, 1.0977063179016113], + [2.618136167526245, -6.150515556335449], + [3.4271538257598877, 6.682342052459717], + [2.4577646255493164, -3.768285036087036], + [0.9271051287651062, 5.159820079803467], + [-2.3131422996520996, 0.8145010471343994], + [-3.4349448680877686, -2.5246593952178955], + [-0.08907685428857803, -0.5283206701278687], + [-3.1854584217071533, -2.998223066329956], + [-4.165104389190674, -4.457817077636719], + [3.132267475128174, -5.0365071296691895], + [-3.5285141468048096, -3.710144281387329], + [-3.4195070266723633, 4.520577907562256], + [1.7385245561599731, -7.775972366333008], + [-6.629501819610596, 7.8556671142578125], + [-2.252027750015259, 2.3065452575683594], + [-5.075211524963379, 4.2040181159973145], + [-6.439171314239502, -0.37447547912597656], + [-6.037604808807373, 7.3093695640563965], + [-1.7107620239257812, 7.643950939178467], + [-1.9542694091796875, 2.0938730239868164], + [5.543943405151367, -1.662227988243103], + [-0.29258936643600464, 9.512645721435547], + [0.3449088931083679, -0.864259660243988], + [-0.23151427507400513, 9.142162322998047], + [-3.7674994468688965, -1.636212706565857], + [-2.296658754348755, -0.29857516288757324], + [7.211282730102539, -1.7101060152053833], + [2.723158121109009, -4.553757667541504], + [1.0019276142120361, -7.076346397399902], + [2.9092063903808594, -4.565568923950195], + [-2.1833086013793945, -0.8434170484542847], + [-4.4503703117370605, 3.407377004623413], + [1.961618185043335, -3.9655234813690186], + [-2.8765766620635986, 2.415701150894165], + [-2.5264365673065186, 1.9638086557388306], + [2.3907997608184814, -5.522919654846191], + [-5.637599945068359, 3.0926389694213867], + [-2.6049304008483887, -3.7447402477264404], + [-0.5052404999732971, -0.22259913384914398], + [-3.3825461864471436, 7.827999591827393], + [9.642340660095215, -2.694768190383911], + [-4.835114002227783, 2.0365352630615234], + [-5.119635105133057, -3.9731838703155518], + [-2.322507381439209, 2.343109607696533], + [-2.4943878650665283, 5.123579978942871], + [5.937469005584717, -2.187211275100708], + [-5.040679454803467, -2.8674206733703613], + [1.9091427326202393, 5.569198131561279], + [4.16580057144165, 6.870777130126953], + [-2.5863444805145264, 5.862656593322754], + [1.0825940370559692, -8.099820137023926], + [3.2629737854003906, -4.87437629699707], + [2.2792654037475586, 5.736281871795654], + [1.0913047790527344, -0.017173010855913162], + [-6.083993911743164, 7.345462799072266], + [-2.2339913845062256, -1.2894306182861328], + [-8.362418174743652, -0.6225007772445679], + [-2.2549386024475098, 3.056126356124878], + [-6.8787007331848145, 3.2736308574676514], + [-0.4131348729133606, 9.91911792755127], + [-4.2411627769470215, -4.391148567199707], + [-1.98079514503479, 1.442194938659668], + [6.662301063537598, -2.77073073387146], + [-5.723883152008057, 2.0579535961151123], + [2.2978835105895996, -4.232769966125488], + [8.572476387023926, -2.631852388381958], + [9.148157119750977, -2.6017706394195557], + [2.5016887187957764, -3.8421084880828857], + [-2.36780047416687, 0.3537448048591614], + [-4.5296549797058105, -2.3242239952087402], + [8.651288986206055, -2.674104928970337], + [-2.599229097366333, 2.787113904953003], + [-4.5775556564331055, 5.176754951477051], + [3.160473346710205, -4.833066940307617], + [-0.26418226957321167, 10.357420921325684], + [-4.894476890563965, 3.641040802001953], + [1.4917162656784058, -7.1752729415893555], + [3.0393002033233643, -6.94021463394165], + [-2.4470512866973877, 1.8604861497879028], + [-5.88771915435791, 4.270466327667236], + [8.178546905517578, -2.083559274673462], + [-5.43386697769165, 6.437128067016602], + [-4.954879283905029, 6.791885852813721], + [-3.1850435733795166, -1.1617282629013062], + [-2.8620707988739014, -1.8329027891159058], + [2.5266945362091064, -3.7931265830993652], + [-5.449151515960693, -1.5600683689117432], + [-0.42772990465164185, 9.780644416809082], + [-0.2543301582336426, 10.592838287353516], + [-0.8646304607391357, -1.5051724910736084], + [-6.328637599945068, -1.7869040966033936], + [5.363206386566162, -1.0622214078903198], + [-3.85846209526062, -0.454095721244812], + [1.4602972269058228, 1.3056281805038452], + [0.3939815163612366, -4.8805084228515625], + [-5.119044303894043, 5.989193916320801], + [6.811644077301025, -1.3913052082061768], + [-4.858484268188477, -0.2053227424621582], + [8.502205848693848, -2.7967450618743896], + [1.3405213356018066, -2.547452449798584], + [-2.190972089767456, 2.3632190227508545], + [9.52043342590332, -2.5214836597442627], + [0.2652100920677185, -0.6544543504714966], + [1.6764568090438843, -8.604631423950195], + [1.3672642707824707, -3.132249593734741], + [-6.5277299880981445, -1.8433202505111694], + [5.391019821166992, -2.208315849304199], + [-5.120387077331543, 4.483130931854248], + [-0.1458938717842102, 9.961804389953613], + [-5.030402183532715, 4.193626403808594], + [-6.897505283355713, -0.9210707545280457], + [-4.3555073738098145, -1.8056031465530396], + [-0.36614787578582764, 9.845584869384766], + [-0.1551252007484436, 9.96318531036377], + [2.0055830478668213, 6.642733097076416], + [-5.778234004974365, 5.519558429718018], + [0.8056818246841431, -0.7293612957000732], + [3.6269853115081787, -3.1728243827819824], + [-3.6790878772735596, -3.2609360218048096], + [-0.7853219509124756, 10.131088256835938], + [-3.7379963397979736, 3.9319427013397217], + [3.1717066764831543, -5.013843536376953], + [2.214543342590332, -3.36757230758667], + [0.8873796463012695, 0.10591466724872589], + [2.4512507915496826, -3.9359073638916016], + [-1.909281611442566, 5.313606262207031], + [-3.667750835418701, -2.008676052093506], + [0.10929559916257858, 9.202080726623535], + [-4.585833549499512, -2.8214304447174072], + [2.1069552898406982, -7.274770736694336], + [1.2780992984771729, -4.9460272789001465], + [-2.575943946838379, 1.330111026763916], + [0.4114558696746826, -1.0231828689575195], + [2.2365822792053223, -4.724072456359863], + [2.8638269901275635, -4.31062650680542], + [6.457386493682861, -2.7204196453094482], + [-1.487178087234497, 5.085704803466797], + [-0.6032190918922424, 5.671635627746582], + [-0.3058321475982666, 9.233356475830078], + [-3.326507091522217, -3.2308709621429443], + [-4.872622966766357, -3.917750597000122], + [2.393233060836792, -4.414155006408691], + [-4.728512287139893, 0.609367847442627], + [-4.711841583251953, 6.619509220123291], + [-3.286142110824585, 5.118894100189209], + [-4.454853534698486, 1.8032357692718506], + [2.448115587234497, -3.806849241256714], + [5.065354824066162, -4.265578269958496], + [1.372173547744751, -4.512838363647461], + [-7.357324123382568, -1.2805569171905518], + [-6.242955684661865, 8.160299301147461], + [7.223013401031494, -1.4844568967819214], + [-2.498133659362793, -1.160947322845459], + [-0.09718603640794754, 4.589998245239258], + [2.932985544204712, -4.497315406799316], + [-5.634776592254639, -4.2144880294799805], + [2.2868010997772217, -7.708355903625488], + [2.566793918609619, -5.079756259918213], + [-7.177347660064697, -1.1595687866210938], + [0.9807797074317932, -6.793455600738525], + [6.864223003387451, -1.8234537839889526], + [-3.9315145015716553, -1.9403417110443115], + [2.27846097946167, -7.487805366516113], + [-3.621093511581421, 6.572032451629639], + [-0.28148436546325684, 10.165908813476562], + [-5.149028778076172, 0.20577478408813477], + [-4.39972448348999, 4.29702091217041], + [2.959996223449707, -4.451848030090332], + [5.5247883796691895, -1.3358173370361328], + [2.5011346340179443, -3.9884166717529297], + [-5.828831672668457, 5.907881736755371], + [1.7619132995605469, 5.374903678894043], + [-2.300729990005493, 1.5197945833206177], + [2.7048349380493164, -4.111763954162598], + [3.2999608516693115, -3.1058034896850586], + [-3.8318705558776855, -1.4773074388504028], + [1.9250836372375488, 1.0461379289627075], + [-2.4865949153900146, -2.1578643321990967], + [0.8752795457839966, -5.450264930725098], + [6.056418418884277, -1.081474781036377], + [-1.227593183517456, -1.5840651988983154], + [2.230356216430664, 1.5138920545578003], + [-6.220093250274658, 7.686960220336914], + [-2.3243939876556396, 0.4593029022216797], + [-4.92698335647583, -2.5813088417053223], + [-6.410592555999756, 7.965323448181152], + [7.844380855560303, -2.330543041229248], + [-3.9533588886260986, -2.7047436237335205], + [-0.3160916566848755, 9.29547119140625], + [2.1145613193511963, -3.716256856918335], + [1.173081874847412, 0.7259161472320557], + [-7.023123264312744, -2.4756720066070557], + [-3.2350480556488037, -1.2168512344360352], + [2.7117764949798584, -4.111947536468506], + [2.432814359664917, 0.8431921005249023], + [1.7742992639541626, -2.830143690109253], + [10.907217979431152, -2.9954349994659424], + [5.620449066162109, -0.9204038381576538], + [-2.2856311798095703, 0.003635462373495102], + [1.4963051080703735, 5.0134358406066895], + [1.3827892541885376, -4.187699317932129], + [7.943606853485107, -1.9681756496429443], + [-5.5424418449401855, 2.4502999782562256], + [-2.097447156906128, -2.6497139930725098], + [-1.2566924095153809, 5.559420108795166], + [2.7528493404388428, -4.3641228675842285], + [7.983546733856201, -3.6598777770996094], + [-5.733939170837402, 1.7219072580337524], + [6.051596641540527, -1.7837224006652832], + [9.150944709777832, -2.400498151779175], + [-0.28714698553085327, 9.846221923828125], + [-4.228688716888428, -1.248671531677246], + [1.1506162881851196, -6.665660858154297], + [6.362490177154541, -1.4011871814727783], + [-6.516495227813721, -1.5063525438308716], + [-5.081061363220215, 4.16379451751709], + [-5.430996417999268, -1.3529855012893677], + [-4.710298538208008, -2.8365719318389893], + [-0.3500891923904419, 9.877626419067383], + [-0.05880356580018997, 9.970090866088867], + [5.240198612213135, -1.2356566190719604], + [2.2971274852752686, -7.4026947021484375], + [0.7818455696105957, -5.436698913574219], + [-2.8802130222320557, -0.6454081535339355], + [-3.676992416381836, -3.161320447921753], + [-2.240156412124634, 1.3974682092666626], + [-7.625133991241455, -0.18382561206817627], + [8.86374568939209, -2.3613414764404297], + [-4.451296329498291, -2.0652270317077637], + [2.6581215858459473, -7.741455078125], + [-0.29539889097213745, 9.825565338134766], + [2.4511053562164307, -3.8549342155456543], + [8.010225296020508, -1.8970586061477661], + [-4.573379993438721, -3.815415620803833], + [-4.758477687835693, 0.28081977367401123], + [3.2934091091156006, -4.927521705627441], + [2.7067315578460693, -4.390019416809082], + [5.367263317108154, -1.0805612802505493], + [-5.463832378387451, -3.367794990539551], + [-5.076267719268799, -0.5248134732246399], + [-0.1916477382183075, -0.49133533239364624], + [-7.725135326385498, -1.39836585521698], + [-5.67405366897583, -2.180197238922119], + [-5.5826544761657715, 1.0948576927185059], + [-4.212832927703857, -3.6274378299713135], + [8.775940895080566, -2.3170900344848633], + [-4.449398517608643, -3.6513192653656006], + [-2.615211248397827, -0.6301449537277222], + [-0.5109891295433044, 11.824625968933105], + [-2.098489999771118, -1.2537914514541626], + [2.9182121753692627, 5.732957363128662], + [-3.709243059158325, -1.0373131036758423], + [8.419339179992676, -2.7008755207061768], + [-0.6791800856590271, 9.312551498413086], + [1.3675622940063477, -5.911594390869141], + [3.349581480026245, -5.309780597686768], + [-6.095027446746826, 6.87430477142334], + [-3.570261240005493, 6.568510055541992], + [3.140761137008667, -4.63023567199707], + [-5.320491313934326, -3.491806745529175], + [-5.932834625244141, 7.9211106300354], + [8.206622123718262, -2.3170244693756104], + [-5.088819980621338, -3.456362724304199], + [1.935241460800171, -7.082454681396484], + [-7.52947998046875, -1.1015626192092896], + [7.633534908294678, -2.0511229038238525], + [-1.66443932056427, 1.3118001222610474], + [3.48089337348938, 1.4406262636184692], + [-7.7425761222839355, -1.6566894054412842], + [2.9687232971191406, -3.9158108234405518], + [3.7311017513275146, 6.592799663543701], + [-5.032878398895264, -0.13612747192382812], + [-4.711805820465088, 5.4909186363220215], + [5.420182228088379, -2.234513998031616], + [7.828557014465332, -2.16456937789917], + [-0.2904707193374634, 11.075118064880371], + [-4.625311374664307, -3.092378854751587], + [-3.5412938594818115, 5.5916032791137695], + [5.722076892852783, 7.302098274230957], + [-2.1645278930664062, 0.6254059076309204], + [-0.40369081497192383, -1.6237640380859375], + [0.5769622325897217, -0.9385432004928589], + [8.84190845489502, -2.4914824962615967], + [-0.2627871632575989, 9.75801944732666], + [0.9982772469520569, -6.987523555755615], + [-4.405299663543701, -2.5774717330932617], + [3.026073694229126, -4.554015159606934], + [-4.654181957244873, 2.31964373588562], + [-5.5496649742126465, -2.428124189376831], + [-2.3391506671905518, 0.7683262825012207], + [7.741327285766602, -2.1145665645599365], + [-2.548133134841919, 1.954067587852478], + [-0.002818562090396881, -0.07952138781547546], + [-5.522533893585205, 8.509385108947754], + [-0.2753097414970398, 8.531078338623047], + [1.9303171634674072, -5.619068145751953], + [-5.199794292449951, -2.258526086807251], + [-5.860279560089111, 4.065839767456055], + [2.6420035362243652, -4.03269624710083], + [9.506715774536133, -2.6432297229766846], + [-4.949936389923096, -2.1957972049713135], + [1.859548807144165, -2.8033158779144287], + [0.6384261250495911, 2.829089879989624], + [-4.195136070251465, 4.480997085571289], + [9.669906616210938, -2.6510202884674072], + [-0.43946027755737305, 11.705100059509277], + [-4.486073017120361, -3.3354759216308594], + [-2.329434871673584, 1.7553417682647705], + [8.151814460754395, -2.1523044109344482], + [-5.770894527435303, 7.722529888153076], + [3.883739471435547, 6.699348449707031], + [-2.5109453201293945, 5.9940385818481445], + [-2.4474453926086426, 1.8264241218566895], + [-3.685568332672119, 4.246449947357178], + [-0.4882422685623169, 9.796077728271484], + [-8.281428337097168, -1.107761025428772], + [-3.8778905868530273, 5.644786357879639], + [0.8555914759635925, 0.0397159717977047], + [7.141119480133057, -2.848412275314331], + [-5.747982025146484, 6.041985511779785], + [1.0838271379470825, 1.3908779621124268], + [-0.4336100220680237, 9.87148666381836], + [8.40761661529541, -2.475541114807129], + [1.9615037441253662, -9.301854133605957], + [-0.84051913022995, -3.4312398433685303], + [2.824455976486206, -4.807170391082764], + [6.319007396697998, 8.35063362121582], + [0.48019564151763916, -3.627570152282715], + [3.0065317153930664, -4.517448425292969], + [2.356265068054199, -7.429403305053711], + [-7.986217021942139, -0.029929880052804947], + [-2.4044349193573, 0.7616598606109619], + [-6.304599285125732, 4.967182159423828], + [0.35325127840042114, -0.6188015341758728], + [2.42480206489563, 6.0273637771606445], + [1.2124508619308472, 0.6730703115463257], + [3.316387176513672, -4.957184791564941], + [2.253682851791382, -4.8600969314575195], + [7.009852886199951, -3.1745898723602295], + [-7.189680576324463, 8.825006484985352], + [-1.0422126054763794, -0.895156741142273], + [-4.022106647491455, -0.3794993758201599], + [-6.558639049530029, -0.46065568923950195], + [-0.4260421395301819, 8.532005310058594], + [-0.2161092758178711, -0.7330700755119324], + [-5.036533832550049, 1.0278433561325073], + [-4.736774921417236, -3.2070324420928955], + [-2.180294990539551, 1.3843927383422852], + [6.272418975830078, -1.3696568012237549], + [-6.468088150024414, 6.853821754455566], + [-1.802004337310791, 1.5907888412475586], + [-3.4765784740448, -1.1281538009643555], + [-0.35625892877578735, 10.363962173461914], + [-4.630616664886475, -3.2318241596221924], + [2.825277805328369, -4.6494245529174805], + [2.5935914516448975, -3.9837424755096436], + [-6.690489292144775, 8.071927070617676], + [1.0540485382080078, -3.8949060440063477], + [0.1884726881980896, -0.7473204731941223], + [-4.822683811187744, 2.2997324466705322], + [-4.776448726654053, -4.746975898742676], + [3.165451765060425, -4.967952728271484], + [-4.742257595062256, -2.574723958969116], + [1.98630690574646, 5.242217063903809], + [1.4761683940887451, -7.557939529418945], + [-0.4974832534790039, 10.962726593017578], + [-4.06178617477417, 7.418514251708984], + [-4.2072954177856445, -3.6297733783721924], + [-3.6759932041168213, -4.301207065582275], + [2.956650733947754, -4.443596839904785], + [6.013978958129883, -1.582242488861084], + [3.0577423572540283, -4.585936069488525], + [-4.77837610244751, -4.375086307525635], + [7.885044097900391, -3.027966022491455], + [-5.466334342956543, 4.474457263946533], + [4.788308143615723, -1.0225712060928345], + [-0.7347590327262878, -1.0152355432510376], + [-8.011331558227539, -1.168421983718872], + [9.266024589538574, -2.5882136821746826], + [-4.3119988441467285, -4.317274570465088], + [8.59229850769043, -2.3409812450408936], + [-2.385422468185425, 2.1992626190185547], + [-1.9578815698623657, 0.6475892066955566], + [-5.221503734588623, 5.671072006225586], + [-4.115261554718018, 6.181052207946777], + [-2.6265079975128174, 2.047114849090576], + [6.961427688598633, -3.2073380947113037], + [-2.2432610988616943, -0.5990692377090454], + [1.955977201461792, 5.340831756591797], + [2.543316602706909, -4.333459377288818], + [8.437207221984863, -2.480057716369629], + [1.2603538036346436, 1.2388219833374023], + [-4.615515232086182, 5.75034236907959], + [-3.764134645462036, 4.4498162269592285], + [1.8274874687194824, 5.111271381378174], + [-4.415807723999023, 4.237764835357666], + [-0.03399432450532913, 9.552473068237305], + [-5.951516628265381, -3.238917350769043], + [-4.92715311050415, 7.462758541107178], + [-3.388667345046997, -3.6949775218963623], + [3.096811294555664, -4.873722076416016], + [-0.5363191962242126, -0.8383827805519104], + [-5.807952880859375, 2.4182417392730713], + [6.816714763641357, -1.400619626045227], + [5.2495927810668945, -1.8942712545394897], + [-2.2234480381011963, -1.6999213695526123], + [0.8779571056365967, -2.8487539291381836], + [-5.423360347747803, 1.5904896259307861], + [-4.37666130065918, 3.6497981548309326], + [1.6376540660858154, 4.531499862670898], + [-0.4851717948913574, 9.45892333984375], + [2.7431671619415283, -6.001986980438232], + [2.265761137008667, 5.919769287109375], + [1.2077393531799316, -5.4213056564331055], + [-5.478025436401367, -2.283979892730713], + [0.1862821877002716, -0.3823990821838379], + [-3.5150787830352783, -2.6103689670562744], + [-5.19605016708374, -1.8488142490386963], + [-6.588399410247803, -1.9492617845535278], + [6.419509410858154, -1.282267451286316], + [1.9733295440673828, 5.617456912994385], + [-7.129974842071533, -2.693798303604126], + [1.91163969039917, -9.505367279052734], + [-7.4489521980285645, 9.104270935058594], + [-4.278382778167725, -6.056031703948975], + [-2.2589523792266846, 2.3847975730895996], + [-5.728269100189209, -2.5511627197265625], + [-4.385925769805908, -4.187634468078613], + [8.093180656433105, -2.525787353515625], + [-8.084646224975586, -1.2650853395462036], + [-5.531398296356201, -4.389395713806152], + [6.085763454437256, -3.7256722450256348], + [-2.6750409603118896, 1.7411359548568726], + [0.891319990158081, -6.758142471313477], + [-5.5124831199646, -3.0805561542510986], + [8.204564094543457, -2.569822072982788], + [0.9918437600135803, 0.534892201423645], + [3.8128254413604736, 6.997984886169434], + [-0.4674486517906189, -2.1493725776672363], + [-6.262522220611572, -1.0128613710403442], + [-4.774557113647461, -1.6620124578475952], + [-2.3015854358673096, 0.032195743173360825], + [-3.2606046199798584, -0.6128563284873962], + [-5.478691577911377, 3.989623785018921], + [-2.7674150466918945, 2.664015054702759], + [3.0044291019439697, -4.517917156219482], + [-2.003976583480835, -1.6506143808364868], + [-4.580408573150635, 1.8014837503433228], + [2.308501958847046, -7.923623561859131], + [3.0608274936676025, -3.7515501976013184], + [1.0552181005477905, -6.895040512084961], + [3.2317495346069336, -3.182589292526245], + [2.7300870418548584, -4.406782150268555], + [-3.378523111343384, -2.7926251888275146], + [0.5877475738525391, 4.043015480041504], + [0.5379118919372559, -1.1389009952545166], + [8.084138870239258, -3.6193008422851562], + [-4.557688236236572, -2.059314250946045], + [-2.47515606880188, -2.117058277130127], + [-7.162801742553711, -1.4364045858383179], + [3.1291286945343018, -4.7054667472839355], + [-5.816610813140869, 2.9543068408966064], + [-5.832297325134277, 6.420054912567139], + [-4.52964448928833, 2.6080148220062256], + [2.2155067920684814, -6.922832489013672], + [8.24439525604248, -2.362597703933716], + [-3.092360258102417, -3.8971383571624756], + [1.4042668342590332, -5.990988731384277], + [-0.7003352642059326, -0.8070931434631348], + [-7.726355075836182, 9.459762573242188], + [-4.9700727462768555, -0.30544769763946533], + [-7.09898042678833, 8.666044235229492], + [2.1595499515533447, -7.59743070602417], + [-8.428799629211426, -0.9744380712509155], + [-3.196376085281372, -0.646470308303833], + [3.4383938312530518, -5.582263469696045], + [-0.252704918384552, 9.62923526763916], + [-1.9685356616973877, -0.8691575527191162], + [-7.429471492767334, 9.034467697143555], + [-4.236542224884033, 6.340100288391113], + [-3.4101274013519287, -2.682338237762451], + [-3.3112905025482178, 6.169936656951904], + [-5.088367938995361, -3.1212246417999268], + [8.712132453918457, -2.371018171310425], + [-5.41064977645874, -0.2662246823310852], + [-0.6124857664108276, 8.716418266296387], + [-0.430295467376709, 9.773611068725586], + [-4.199476718902588, -3.8608365058898926], + [1.6410722732543945, -7.187556266784668], + [4.227975845336914, -3.593428373336792], + [-2.1382105350494385, 5.311501502990723], + [6.39748477935791, -2.5791399478912354], + [3.144109010696411, -4.790117263793945], + [3.0857536792755127, -7.399287700653076], + [-3.565284490585327, -2.5763885974884033], + [-0.45367130637168884, -1.06381356716156], + [-2.900115489959717, 5.465171813964844], + [2.2056491374969482, 5.491951942443848], + [-0.19722503423690796, 9.703304290771484], + [-4.346240520477295, -3.9337048530578613], + [-3.3974082469940186, -4.163578987121582], + [2.9786407947540283, 6.125258445739746], + [2.9586637020111084, -3.959468126296997], + [-0.3390541672706604, 11.338895797729492], + [-2.3806633949279785, 0.6090475916862488], + [-2.6228737831115723, -0.07320690155029297], + [-2.427269458770752, 1.6530373096466064], + [7.683248519897461, -1.7494715452194214], + [-5.017506122589111, -1.3828505277633667], + [1.549464225769043, -0.05447027459740639], + [-2.7259037494659424, 2.912945508956909], + [-2.251943826675415, 2.4914326667785645], + [-2.0487945079803467, -0.35385116934776306], + [-4.702505588531494, -1.4226090908050537], + [0.5919175148010254, -0.3142126798629761], + [-3.7571892738342285, 3.8061625957489014], + [-5.193620204925537, -1.5543595552444458], + [-4.825336933135986, -2.279531478881836], + [-2.835758924484253, 7.281874656677246], + [-0.04172081500291824, 9.333808898925781], + [2.7394492626190186, -4.17581844329834], + [2.272550582885742, 4.575882434844971], + [-8.498518943786621, -1.0517421960830688], + [-1.531846046447754, 0.8052277565002441], + [-2.7012805938720703, -4.970321178436279], + [-5.960791110992432, 1.5986101627349854], + [-3.928449869155884, -2.4659786224365234], + [7.069499492645264, -2.174344301223755], + [-5.230360507965088, 4.357699394226074], + [-5.74415922164917, -3.828735589981079], + [2.804950475692749, -4.268242835998535], + [-4.637592792510986, -2.695331335067749], + [2.7331230640411377, -4.327838897705078], + [-2.4506168365478516, 2.4353737831115723], + [2.7915830612182617, -4.2419047355651855], + [-5.634471893310547, 4.192780494689941], + [-5.340941905975342, 0.739416241645813], + [5.77996301651001, -1.1702803373336792], + [5.175415992736816, -1.4817324876785278], + [1.7205984592437744, 2.0720808506011963], + [-4.713400363922119, 0.2558731436729431], + [-4.3336567878723145, -2.119102716445923], + [-3.2308876514434814, 0.6109945774078369], + [-4.598884105682373, 5.382509231567383], + [-3.941909074783325, -1.227028727531433], + [-4.925398826599121, -2.933288812637329], + [2.8997256755828857, -5.343941688537598], + [-2.5898075103759766, 0.28505975008010864], + [-5.001715183258057, -3.029217004776001], + [-0.3001147508621216, 0.5273228287696838], + [0.3991033732891083, -0.32817280292510986], + [1.9034942388534546, 3.826390504837036], + [2.10996413230896, -3.2875289916992188], + [2.354142904281616, -5.398114204406738], + [-5.167208194732666, -0.11060404777526855], + [-4.744084358215332, 5.879836559295654], + [9.277429580688477, -2.5960428714752197], + [-0.17211571335792542, -1.328091025352478], + [-4.263604164123535, 5.069723129272461], + [1.8271033763885498, -8.670732498168945], + [-0.6321106553077698, 9.55324935913086], + [4.564538478851318, -0.7336946725845337], + [-0.6134726405143738, 3.995185136795044], + [-6.925796031951904, -1.261924147605896], + [5.2625908851623535, -3.749051570892334], + [-2.118490695953369, 0.6256883144378662], + [-2.437156915664673, 2.2228403091430664], + [5.63796329498291, -1.0059643983840942], + [-1.1461857557296753, 0.8273926377296448], + [-3.612454414367676, -3.0439722537994385], + [3.2107291221618652, -4.882690906524658], + [1.2166056632995605, -6.899895668029785], + [-5.183239459991455, -3.2380411624908447], + [6.2235283851623535, -1.3256336450576782], + [2.989144802093506, -4.857433319091797], + [-0.2747144103050232, -1.2497293949127197], + [0.35480228066444397, -0.8057936429977417], + [8.036774635314941, -2.8530895709991455], + [0.22314834594726562, 9.288017272949219], + [-4.878945350646973, -3.830439805984497], + [-0.6198642253875732, 8.67073917388916], + [-2.2322750091552734, 1.3504892587661743], + [-0.42880547046661377, -1.4494198560714722], + [-0.31269121170043945, 9.479665756225586], + [6.6422576904296875, -1.4393757581710815], + [7.0651469230651855, -1.675793170928955], + [-4.1518988609313965, 5.362814903259277], + [0.05172865837812424, -0.419769287109375], + [-5.89261531829834, 2.3900434970855713], + [-3.8065850734710693, 5.82171106338501], + [-3.075535774230957, 4.911728382110596], + [2.7051784992218018, -4.102581024169922], + [-2.071080207824707, 2.5294275283813477], + [-5.324390411376953, 6.649664878845215], + [-2.1821329593658447, 1.1622471809387207], + [3.264347553253174, -4.87942361831665], + [1.0362907648086548, 1.1318577527999878], + [6.7883477210998535, -2.7645559310913086], + [-2.1195569038391113, 6.460115909576416], + [-4.972311973571777, -2.5853569507598877], + [-5.474951267242432, -3.618624210357666], + [-3.8162386417388916, -4.009160995483398], + [-6.394012928009033, 8.318254470825195], + [-5.675842761993408, -0.21777701377868652], + [-6.3330979347229, -1.9264274835586548], + [-5.441939353942871, -3.5369772911071777], + [-3.536147356033325, -2.429138422012329], + [0.8016982674598694, 4.926268577575684], + [-2.6203153133392334, 2.2592103481292725], + [2.4061484336853027, -3.724825620651245], + [-1.2839148044586182, -1.0323874950408936], + [-4.1139936447143555, 5.011920928955078], + [-0.8454172015190125, -1.2805181741714478], + [9.043174743652344, -2.5167973041534424], + [2.1295368671417236, -4.901436805725098], + [0.2770869731903076, -0.17195308208465576], + [-3.577989339828491, -1.7290987968444824], + [-2.6293790340423584, -2.6822147369384766], + [-5.657176494598389, -3.5577917098999023], + [-6.770350933074951, 8.894413948059082], + [2.0337750911712646, -8.307365417480469], + [2.5789003372192383, -4.370893478393555], + [4.10504674911499, -1.8208025693893433], + [-0.25667375326156616, 9.956703186035156], + [3.6112968921661377, 5.8096232414245605], + [1.6609116792678833, 5.379321098327637], + [2.711967945098877, -4.8682475090026855], + [5.031210422515869, 7.516037464141846], + [6.012049198150635, -1.9543999433517456], + [7.8081583976745605, -2.4737985134124756], + [-0.9065032005310059, -0.5698013305664062], + [1.1428735256195068, 5.451013088226318], + [0.5991376042366028, 3.0452826023101807], + [2.5034546852111816, -3.7413318157196045], + [-5.635354518890381, -3.4029223918914795], + [1.7931532859802246, -6.613368034362793], + [-4.227536678314209, 5.27541446685791], + [5.924508571624756, -1.232877492904663], + [-7.477536678314209, -1.8222655057907104], + [-7.180441379547119, 8.69682502746582], + [-4.456632137298584, 6.663990020751953], + [-3.756526231765747, 3.567187786102295], + [-8.481836318969727, -1.0861706733703613], + [3.1070523262023926, -4.65483283996582], + [6.384588241577148, -1.5310536623001099], + [-7.2102952003479, 9.051795959472656], + [2.3615634441375732, 5.479434967041016], + [-5.474637985229492, -3.4356374740600586], + [2.1180787086486816, 5.807906150817871], + [-2.3273439407348633, 7.107078552246094], + [3.9980289936065674, -1.3524113893508911], + [-5.352292537689209, 2.405827760696411], + [-5.245870113372803, -2.5705106258392334], + [-2.1780848503112793, 2.811824321746826], + [1.2466113567352295, -7.276943206787109], + [3.424020290374756, 5.332179069519043], + [-3.5907418727874756, 6.15737247467041], + [-2.1234612464904785, 2.770507335662842], + [9.089997291564941, -2.381657361984253], + [-8.654427528381348, -1.2364267110824585], + [-6.112891674041748, 2.898513078689575], + [-0.52265465259552, 10.174514770507812], + [2.2744266986846924, -4.002401828765869], + [-0.33174124360084534, -0.9666627645492554], + [-5.851212978363037, -1.9412957429885864], + [-4.924684047698975, -1.3263767957687378], + [2.2376492023468018, -2.98502516746521], + [-3.355921506881714, -3.1267051696777344], + [-5.833484172821045, 7.040081977844238], + [-5.145140171051025, 3.859515428543091], + [-5.9908366203308105, 1.9514673948287964], + [2.586836338043213, 0.7672283053398132], + [-5.610592842102051, -2.0812454223632812], + [2.105293035507202, -7.497940540313721], + [-0.16694164276123047, 9.824708938598633], + [4.208672046661377, -2.896751642227173], + [-4.21994161605835, -5.671152591705322], + [1.7444276809692383, 0.3411393463611603], + [8.460128784179688, -2.4967739582061768], + [2.179079055786133, 4.8266825675964355], + [-6.146442890167236, -1.1967651844024658], + [-5.914851188659668, -1.2101686000823975], + [-1.0327690839767456, 9.950277328491211], + [5.609956741333008, -1.4513849020004272], + [-2.378983974456787, 1.392617106437683], + [-2.4863834381103516, 1.2100614309310913], + [-5.561133861541748, -3.3896636962890625], + [6.972212791442871, -4.106192588806152], + [2.9699289798736572, -4.455577850341797], + [9.094754219055176, -2.172429323196411], + [2.7807605266571045, -4.265387058258057], + [1.9495508670806885, -2.912795305252075], + [1.1903458833694458, 3.019521713256836], + [-5.261735916137695, -3.223572015762329], + [1.95658540725708, 5.078135967254639], + [-4.088636875152588, 5.795266151428223], + [-1.0154730081558228, -0.42610424757003784], + [-5.319886207580566, -1.59437096118927], + [-6.405599594116211, -1.668190360069275], + [7.8690409660339355, -2.113513708114624], + [3.021871566772461, -4.6652326583862305], + [-5.578013896942139, -2.396519660949707], + [2.6010794639587402, 0.5209360718727112], + [-3.5334560871124268, -2.300624370574951], + [2.1577274799346924, 2.973768472671509], + [-2.208095073699951, 2.831078290939331], + [-1.149860143661499, -0.6117156744003296], + [8.552507400512695, -2.3118910789489746], + [-6.6042866706848145, 8.117599487304688], + [-2.1158978939056396, 0.13271546363830566], + [-0.18259364366531372, -1.501754879951477], + [-2.7533907890319824, -0.1762244701385498], + [3.476614236831665, -5.169144630432129], + [3.1137120723724365, -5.259418487548828], + [8.97227954864502, -2.5306994915008545], + [-7.19240140914917, -1.6552646160125732], + [-6.084477424621582, -1.9320429563522339], + [1.5911608934402466, 5.240828514099121], + [-5.152635097503662, 2.5864527225494385], + [2.314518690109253, 5.608570098876953], + [-5.905616283416748, -1.2058684825897217], + [-2.1351256370544434, 0.6811444163322449], + [0.8528339862823486, 0.5190950632095337], + [8.628854751586914, -2.196911573410034], + [1.944434642791748, -8.033049583435059], + [0.14485451579093933, -4.451937675476074], + [-2.1192402839660645, 2.4499988555908203], + [-0.3428693413734436, 11.081265449523926], + [6.164138317108154, -3.411051034927368], + [2.147676944732666, 5.410990238189697], + [2.1866602897644043, -10.140495300292969], + [-0.35497409105300903, 10.14223861694336], + [-5.588297367095947, -1.6674753427505493], + [-0.2849807143211365, 9.722896575927734], + [-2.5724937915802, 6.000511169433594], + [0.43684208393096924, -4.598361968994141], + [-2.499051570892334, 2.2338814735412598], + [-4.61050271987915, 3.7482640743255615], + [-0.04549897462129593, 10.645073890686035], + [-5.951460361480713, -1.4632269144058228], + [-4.96785831451416, 6.232243537902832], + [5.565789699554443, -1.481515884399414], + [-1.6898821592330933, 1.528968334197998], + [-5.328824043273926, 3.4502346515655518], + [5.730556488037109, -1.0654051303863525], + [-0.22920113801956177, 9.897148132324219], + [-2.095700979232788, -1.7133108377456665], + [-4.633427619934082, 4.24906063079834], + [-4.852329730987549, -0.5842978954315186], + [-4.843324184417725, -3.2219951152801514], + [1.8233494758605957, 6.421175003051758], + [-4.1510114669799805, 2.5553290843963623], + [-5.374159336090088, 6.726990222930908], + [1.1069912910461426, 5.843844413757324], + [2.632810354232788, -4.440610885620117], + [4.23826789855957, 6.72515869140625], + [2.505958318710327, 6.348828315734863], + [-0.6766117215156555, 8.801753997802734], + [3.5458505153656006, 6.526144504547119], + [-2.542581796646118, 2.221799373626709], + [-0.20962268114089966, 10.015335083007812], + [-6.615322589874268, -2.4234962463378906], + [-0.579417884349823, 9.52642822265625], + [-2.6293628215789795, -4.392444133758545], + [-0.10139451175928116, -0.9037898182868958], + [8.204060554504395, -2.4639108180999756], + [-2.474287748336792, 1.0950126647949219], + [8.996834754943848, -2.5462749004364014], + [-4.54787540435791, -0.8660548329353333], + [-2.568392276763916, -4.879575729370117], + [2.1480982303619385, -7.162906646728516], + [-2.5700318813323975, 5.902203559875488], + [1.532528042793274, 5.145394325256348], + [-5.042086601257324, -2.8689730167388916], + [2.1394712924957275, -10.227278709411621], + [-4.761596202850342, -0.6528880596160889], + [-4.194965362548828, -2.892119884490967], + [2.798210859298706, 6.123054504394531], + [-0.30641406774520874, 9.019218444824219], + [5.196715831756592, -1.6915106773376465], + [-0.2470741868019104, 11.063819885253906], + [7.2097649574279785, -3.6835737228393555], + [-2.4398982524871826, 5.91166877746582], + [-0.6588051915168762, 9.858026504516602], + [2.8824291229248047, -4.368088245391846], + [5.8105854988098145, -2.6592304706573486], + [3.0871951580047607, -5.648346424102783], + [-3.0208656787872314, 4.0719099044799805], + [-4.986758708953857, 5.466442584991455], + [-3.778978109359741, -4.709378242492676], + [0.9623087048530579, 5.617580413818359], + [4.1628594398498535, 6.903547286987305], + [8.515210151672363, -2.3295116424560547], + [-4.918241500854492, -2.9185001850128174], + [1.1075931787490845, 0.8255289793014526], + [-6.270605564117432, 1.760504126548767], + [-2.3304595947265625, 2.1101977825164795], + [0.8674635291099548, -6.881466388702393], + [6.342028617858887, -1.38343346118927], + [-3.274416208267212, 2.991689443588257], + [-8.981489181518555, -1.0616955757141113], + [-0.29466140270233154, 10.231582641601562], + [1.65237557888031, -7.232046604156494], + [-4.136539936065674, -0.056508127599954605], + [0.49354088306427, -0.1914094239473343], + [-2.425077438354492, 1.833290457725525], + [-2.349518299102783, 0.9127191305160522], + [6.439081192016602, -2.5921871662139893], + [3.2063448429107666, -7.395540237426758], + [-4.115288734436035, -2.713266372680664], + [-3.470174789428711, 0.11258560419082642], + [-2.6175267696380615, 1.0337945222854614], + [-0.41490018367767334, -1.3139433860778809], + [-4.821447849273682, -1.5163058042526245], + [-3.5056135654449463, -3.581834077835083], + [-5.771584987640381, 1.696517825126648], + [-2.61476731300354, 2.15975022315979], + [9.517945289611816, -2.656113386154175], + [2.0310652256011963, -1.9523488283157349], + [2.6437056064605713, -5.610110282897949], + [-4.425985813140869, -0.7160746455192566], + [-5.535698413848877, -2.731550931930542], + [3.013373613357544, -5.023216247558594], + [-3.79030442237854, 2.2084147930145264], + [-2.6339263916015625, -2.5643105506896973], + [-6.733465671539307, -1.2657324075698853], + [-3.017906427383423, -0.9017483592033386], + [-4.029829025268555, 5.392441749572754], + [-2.663327217102051, 0.5405021905899048], + [-4.62738561630249, 5.343255519866943], + [1.9341659545898438, -0.9767941236495972], + [3.229509115219116, -4.834869384765625], + [-3.022279977798462, 3.5361759662628174], + [-5.9846062660217285, -2.802590847015381], + [-4.69075870513916, 6.8577752113342285], + [-0.2998303771018982, 9.70268440246582], + [-1.69999098777771, -1.7405204772949219], + [3.0079336166381836, -4.774503231048584], + [-4.691043376922607, 6.193573951721191], + [-4.638287544250488, 8.085596084594727], + [5.3485426902771, -0.9675977230072021], + [-0.5277979969978333, 9.336191177368164], + [-3.92720365524292, -1.1981409788131714], + [-6.420597076416016, 8.246725082397461], + [9.057541847229004, -2.645141363143921], + [-0.21127918362617493, -0.7420423030853271], + [7.48776388168335, -1.6441274881362915], + [1.030850887298584, 5.20562744140625], + [-4.202075481414795, -3.600614070892334], + [-4.467126369476318, 5.341778755187988], + [6.131302833557129, -1.5598291158676147], + [-6.107848167419434, -0.6006153225898743], + [6.597207546234131, -1.2969249486923218], + [-0.8602361679077148, 9.512754440307617], + [-4.165425777435303, -1.5649834871292114], + [-0.24148505926132202, 9.912313461303711], + [8.44568157196045, -2.4573004245758057], + [2.2293524742126465, -7.326749801635742], + [-0.7962296009063721, -0.6686698198318481], + [-4.392010688781738, 2.5064077377319336], + [-3.4331893920898438, 5.337311744689941], + [-4.204400062561035, -1.0739063024520874], + [3.0865373611450195, -4.6261982917785645], + [-4.744422435760498, 6.970576286315918], + [-4.727302074432373, 1.472974181175232], + [-0.20460182428359985, 10.646993637084961], + [2.0912137031555176, 5.361756324768066], + [-0.7866277098655701, -3.037421941757202], + [1.449799656867981, -7.780223846435547], + [-2.4476873874664307, 0.5639981627464294], + [-2.7141573429107666, 0.08283436298370361], + [7.7837958335876465, -2.4004573822021484], + [7.575521945953369, -1.7969996929168701], + [-7.801513195037842, 9.56340217590332], + [-4.6409687995910645, -2.9787304401397705], + [-5.130693435668945, 6.4330220222473145], + [6.361520290374756, -2.52693772315979], + [5.935319900512695, -2.221052408218384], + [-4.253030300140381, -3.4144392013549805], + [1.4199047088623047, -7.4593729972839355], + [1.5244548320770264, -6.038888931274414], + [1.8884168863296509, 4.980225086212158], + [-4.471949100494385, 4.740850925445557], + [-4.6246161460876465, -2.0930378437042236], + [3.044452667236328, -6.974720001220703], + [-5.106844902038574, 6.625238418579102], + [7.404839992523193, -1.6597932577133179], + [5.6980509757995605, -3.0195701122283936], + [-1.3695721626281738, 1.0552932024002075], + [8.367510795593262, -2.130213499069214], + [2.6400797367095947, -6.59747314453125], + [-2.042757987976074, 0.7048964500427246], + [-5.32212495803833, 8.126937866210938], + [-6.51239538192749, 8.853602409362793], + [-2.175421953201294, 2.635115623474121], + [-7.531999111175537, 9.458096504211426], + [6.290343761444092, -3.7969307899475098], + [-1.9804786443710327, 0.8898271918296814], + [7.611814022064209, -2.1173105239868164], + [-5.775487899780273, -2.3008549213409424], + [-6.391659259796143, 6.503390789031982], + [1.1722214221954346, -0.43852487206459045], + [-0.41598445177078247, 11.073580741882324], + [-5.944865703582764, 7.985250473022461], + [2.382253885269165, -4.396332740783691], + [0.7211953997612, -5.232481002807617], + [-5.2893195152282715, -3.0007615089416504], + [-0.3943789601325989, 11.22484302520752], + [2.2661397457122803, -4.468544006347656], + [-2.094608783721924, 1.9299107789993286], + [8.324039459228516, -2.3635995388031006], + [6.061543941497803, -1.370011806488037], + [-1.5478181838989258, 1.4860156774520874], + [-4.856450080871582, -1.835265040397644], + [-5.041625499725342, 1.6962924003601074], + [-4.245415687561035, -3.271009922027588], + [-5.078024387359619, -0.15685319900512695], + [-1.8890013694763184, 8.02538776397705], + [-0.15485963225364685, -0.5485509037971497], + [-4.592702865600586, -3.210911273956299], + [-7.45328950881958, 9.186219215393066], + [-6.750024318695068, -1.1105529069900513], + [-4.784509658813477, -4.510347366333008], + [5.080727577209473, -1.9825572967529297], + [2.3879384994506836, -4.297430992126465], + [-6.321817398071289, -2.630988836288452], + [3.036379098892212, 5.879323959350586], + [-5.53002405166626, -1.5172139406204224], + [-4.198087692260742, 1.825778603553772], + [-4.404027462005615, -2.95257830619812], + [7.965465068817139, -2.275883197784424], + [-7.09049654006958, 7.63762903213501], + [1.754746913909912, 4.661625862121582], + [-4.950445652008057, 6.7161126136779785], + [-3.8024466037750244, -0.7833977341651917], + [-4.9140424728393555, -2.3152055740356445], + [-5.088287830352783, 3.7180287837982178], + [-6.478582859039307, 8.093391418457031], + [0.34963908791542053, -0.7292596101760864], + [1.3148324489593506, -6.515748977661133], + [2.224426031112671, 0.9396137595176697], + [-7.476617336273193, 1.956910490989685], + [9.902894973754883, -2.7529752254486084], + [-5.862989902496338, -1.8395392894744873], + [-3.579054594039917, 0.3624778389930725], + [3.0186803340911865, -3.7332258224487305], + [-3.0881357192993164, -3.8421595096588135], + [-3.20131516456604, -2.0293965339660645], + [-3.622192621231079, -1.7586308717727661], + [-4.136294364929199, 5.280024528503418], + [4.773800373077393, 7.851369380950928], + [-1.1656372547149658, 8.480659484863281], + [3.2341718673706055, -5.055098533630371], + [-2.150463819503784, 7.210496425628662], + [2.3355729579925537, -8.070089340209961], + [-0.1397828459739685, 9.824963569641113], + [1.8274142742156982, 5.12950325012207], + [-2.463178873062134, 2.0683765411376953], + [1.371154546737671, -3.4057185649871826], + [-0.23525023460388184, 10.062942504882812], + [-0.3060697913169861, 10.513641357421875], + [2.3215763568878174, -7.776288032531738], + [-2.872760057449341, 2.4700727462768555], + [-5.081305503845215, -2.478738784790039], + [-3.6780941486358643, 7.030806541442871], + [0.7622391581535339, 0.21436524391174316], + [1.6078200340270996, -5.537036895751953], + [2.315772771835327, 4.218461990356445], + [-6.890263080596924, -1.26431405544281], + [-2.871600866317749, -1.9482661485671997], + [-5.030460357666016, 1.6559491157531738], + [0.05743309110403061, -0.9085528254508972], + [5.083069801330566, 7.259778022766113], + [5.7616963386535645, 8.14765739440918], + [-4.658778667449951, 7.233927249908447], + [8.483086585998535, -2.459784507751465], + [1.9388387203216553, -6.840251922607422], + [-5.111791610717773, 1.2799665927886963], + [-5.011107921600342, 4.69052791595459], + [-3.182297468185425, -5.396704196929932], + [4.214878559112549, 7.233114242553711], + [-2.6023166179656982, 1.991317629814148], + [-0.2712709903717041, 9.071233749389648], + [2.131774425506592, -7.147032260894775], + [-5.455738544464111, -2.656670570373535], + [2.3692548274993896, 5.970659255981445], + [5.390294551849365, -3.0771267414093018], + [-4.88314151763916, -1.2303615808486938], + [-0.1342427134513855, 9.94914722442627], + [1.4322807788848877, -7.608846664428711], + [3.9726226329803467, -3.370148181915283], + [-4.873906135559082, -3.3453030586242676], + [-4.6861796379089355, -1.6823642253875732], + [-0.1350129246711731, 9.541791915893555], + [1.688454031944275, -8.565892219543457], + [-3.910173177719116, -1.7446013689041138], + [-0.1565784215927124, 9.85649299621582], + [0.2767476737499237, -0.9603863954544067], + [1.8636474609375, -6.6707234382629395], + [-2.3341052532196045, 1.564143180847168], + [-0.07766617089509964, -0.282324880361557], + [9.977743148803711, -2.772066831588745], + [-2.3923444747924805, 2.2606070041656494], + [-4.374425411224365, 4.037215232849121], + [1.1607621908187866, 6.073121070861816], + [6.8713459968566895, -2.601168394088745], + [-0.8651217818260193, 9.980180740356445], + [-1.269172191619873, -1.274527907371521], + [-5.918755054473877, 4.989789962768555], + [-3.2100934982299805, -0.8947036862373352], + [2.3183538913726807, -6.999801158905029], + [-4.8134260177612305, 4.963681697845459], + [0.7915742993354797, 0.3040422797203064], + [-0.8340522050857544, 0.44623488187789917], + [-3.2719078063964844, 2.55949330329895], + [-3.1491358280181885, -0.3719986081123352], + [2.7998459339141846, -5.477233409881592], + [-3.0919759273529053, 3.454874277114868], + [2.9493207931518555, 5.636088848114014], + [-4.438986778259277, 5.435002326965332], + [8.154398918151855, -2.3762667179107666], + [-0.5087612271308899, -1.4536958932876587], + [1.9658730030059814, 3.572045087814331], + [8.662413597106934, -2.4141461849212646], + [-0.2061249017715454, 10.129209518432617], + [-0.5993460416793823, 10.005817413330078], + [-4.124643802642822, -3.5348355770111084], + [5.037611484527588, 7.693822860717773], + [-5.09829568862915, -3.495084047317505], + [5.53770637512207, 6.949165344238281], + [3.4695982933044434, -5.594277858734131], + [-2.024625539779663, 2.6977646350860596], + [-5.449837684631348, -3.361236333847046], + [-4.2756500244140625, 7.236660957336426], + [-2.99562668800354, 3.3697922229766846], + [1.6709411144256592, 4.912035942077637], + [2.3950536251068115, -4.641654014587402], + [-4.89771842956543, -0.3024563193321228], + [-3.788390874862671, -2.5463244915008545], + [-0.4032204747200012, 10.417098999023438], + [2.1607186794281006, -7.841366291046143], + [-4.428966999053955, -2.487210988998413], + [-3.607948064804077, 7.71449089050293], + [2.3092074394226074, 6.018219470977783], + [1.8159589767456055, 5.711190223693848], + [-5.359314918518066, -3.2568984031677246], + [2.256751537322998, 5.88716983795166], + [-4.515913486480713, -2.4416539669036865], + [-0.027106232941150665, 9.054582595825195], + [-4.416616916656494, 1.5677235126495361], + [-2.358004331588745, -1.3315263986587524], + [-5.973399639129639, 7.636697292327881], + [-0.5889235138893127, 6.013664245605469], + [2.1638643741607666, 5.857731342315674], + [-4.729135036468506, 0.262978732585907], + [-0.7817667126655579, 9.242271423339844], + [4.809688568115234, -4.5603532791137695], + [8.05058765411377, -2.3935320377349854], + [-5.6581034660339355, -2.5026466846466064], + [-5.86852502822876, 7.9110636711120605], + [6.80226993560791, -4.601170539855957], + [-5.024484634399414, 4.552462577819824], + [-0.36768513917922974, 9.645057678222656], + [0.4102805256843567, 1.015960454940796], + [2.8297035694122314, -4.475280284881592], + [-3.1392056941986084, -2.5567080974578857], + [0.34607505798339844, 0.37722069025039673], + [-4.369682788848877, -2.629570960998535], + [-5.305185794830322, 2.1834781169891357], + [-0.2421697974205017, 9.726583480834961], + [-2.466586112976074, 1.6176600456237793], + [-1.9021470546722412, 2.5690419673919678], + [-0.3497752547264099, 9.483671188354492], + [2.0232746601104736, -7.0337982177734375], + [1.7153575420379639, 5.059845447540283], + [-5.942769527435303, 1.6221565008163452], + [-4.525165557861328, 3.879185199737549], + [-3.3673694133758545, -3.401510715484619], + [-0.4273815155029297, 8.831486701965332], + [2.8897573947906494, 6.448878288269043], + [-2.8375003337860107, -2.638206720352173], + [-5.177145481109619, 4.195963382720947], + [-4.794311046600342, -3.4336671829223633], + [3.2326676845550537, 6.273382186889648], + [-0.33526360988616943, 10.591323852539062], + [-0.4055280089378357, 9.786199569702148], + [-0.43621665239334106, 8.997952461242676], + [1.5945801734924316, 4.44361686706543], + [-2.462963819503784, 1.7995904684066772], + [-0.3522849678993225, 7.791187763214111], + [2.9537737369537354, -4.602991580963135], + [3.111096143722534, -4.667985916137695], + [-7.42631721496582, -1.915964126586914], + [-3.461644411087036, -2.63612961769104], + [-6.401454448699951, -1.100526213645935], + [-2.5456764698028564, 1.0920273065567017], + [-4.393863201141357, -1.715366005897522], + [-3.2275612354278564, -3.3852994441986084], + [1.8843308687210083, -8.902244567871094], + [2.763101577758789, -6.27691650390625], + [-3.8571999073028564, -1.7335656881332397], + [-6.7918477058410645, -1.922623634338379], + [-4.7632551193237305, -3.2502992153167725], + [-5.230831623077393, -1.4696654081344604], + [-2.5445356369018555, 0.615868091583252], + [-3.0241620540618896, -2.1329505443573], + [-5.58270788192749, -3.775982618331909], + [-4.205348968505859, 5.120143890380859], + [1.6961637735366821, -6.879134178161621], + [-0.25951749086380005, 10.352656364440918], + [-5.206142902374268, -1.8134377002716064], + [-0.4564359188079834, 8.063093185424805], + [1.5438587665557861, 4.500502586364746], + [-2.883263349533081, -2.6934454441070557], + [-3.3030240535736084, -2.2522430419921875], + [-5.994678974151611, -1.7851827144622803], + [2.907694101333618, -4.398384094238281], + [-3.294858932495117, -2.18809175491333], + [-0.7449387907981873, 5.566215515136719], + [-3.251401662826538, -2.1677210330963135], + [-5.1587300300598145, -3.435455083847046], + [-5.586815357208252, 5.316915035247803], + [1.0509405136108398, -5.827742099761963], + [7.916008949279785, -2.649970293045044], + [-5.200951099395752, -4.720817565917969], + [2.4449188709259033, -11.468023300170898], + [-4.39363431930542, -4.10263729095459], + [0.022820167243480682, 9.720609664916992], + [-6.609385967254639, 7.965215682983398], + [6.261989116668701, 8.003771781921387], + [3.2106974124908447, -5.05820894241333], + [-0.15291497111320496, -1.2986119985580444], + [8.523503303527832, -2.1855056285858154], + [-5.682680606842041, 4.037831783294678], + [-4.148621082305908, 4.396409511566162], + [-4.341656684875488, -2.9476094245910645], + [-1.2306095361709595, -0.8397331237792969], + [6.236971378326416, -1.4857479333877563], + [-0.8253589272499084, -1.5024181604385376], + [-4.768960952758789, 5.754319190979004], + [-0.24259579181671143, 8.802773475646973], + [-0.3340027928352356, 10.419066429138184], + [8.80281925201416, -2.3476645946502686], + [-4.543821811676025, -2.636359453201294], + [-3.8566396236419678, 4.073587417602539], + [3.14180588722229, -4.716484069824219], + [-5.369687557220459, -2.2553255558013916], + [-3.06557559967041, 2.0543134212493896], + [0.6236741542816162, -6.015348434448242], + [2.604268789291382, 0.670054018497467], + [-5.291985988616943, -0.8690603971481323], + [-4.51338529586792, 3.8314785957336426], + [3.9671733379364014, -3.6118004322052], + [-7.342844486236572, -0.5402742624282837], + [4.851241588592529, -1.305841088294983], + [2.918567180633545, -4.852128028869629], + [9.671836853027344, -2.6740682125091553], + [-5.532979488372803, -0.7410653829574585], + [-4.544027328491211, -1.962214708328247], + [-3.418386220932007, -4.0149078369140625], + [-3.3846113681793213, -4.525197505950928], + [2.5676307678222656, -4.505115509033203], + [-0.27186959981918335, 10.539093971252441], + [-3.1733574867248535, -1.9763861894607544], + [3.537170886993408, 1.2259407043457031], + [7.971982479095459, -2.3973257541656494], + [4.123666286468506, 6.285091876983643], + [4.326481342315674, -4.113974571228027], + [-5.084172248840332, -3.7918570041656494], + [-0.557397186756134, 9.77379035949707], + [-2.8830068111419678, 5.121572494506836], + [-8.280194282531738, -1.4047949314117432], + [5.809662818908691, -2.2193074226379395], + [-4.613498210906982, 3.307939291000366], + [-8.03886890411377, -1.324006199836731], + [-3.6224842071533203, -0.7688254714012146], + [-0.26833415031433105, -1.128226399421692], + [-4.585545539855957, 4.933608531951904], + [-5.083848476409912, -0.9060396552085876], + [-6.324678897857666, -1.9880224466323853], + [7.459370136260986, -1.8471859693527222], + [-6.4707255363464355, 7.891273021697998], + [2.3233067989349365, -3.9128408432006836], + [-4.822908401489258, -3.395866870880127], + [-3.225468873977661, -2.4797964096069336], + [-5.3870391845703125, 2.7839181423187256], + [3.351337194442749, -5.262964248657227], + [9.054108619689941, -2.6729066371917725], + [-4.636579990386963, 5.814319133758545], + [1.2203794717788696, 8.199261665344238], + [-4.168167591094971, -1.487755298614502], + [-2.3988850116729736, 1.7701410055160522], + [1.7103421688079834, 5.408474922180176], + [-0.6512374877929688, 9.181564331054688], + [-0.5195989012718201, 9.059774398803711], + [-3.6279854774475098, -1.7653427124023438], + [1.8756206035614014, -8.062063217163086], + [-7.502269268035889, -2.029313325881958], + [0.4171038866043091, 0.8198680877685547], + [-7.340098857879639, 9.050189018249512], + [-0.15128633379936218, -0.8813056945800781], + [-0.37164950370788574, -0.8110081553459167], + [-5.429786205291748, -1.656326413154602], + [-4.708428859710693, 6.2259321212768555], + [3.0114142894744873, -4.536923885345459], + [-6.0956950187683105, 2.512693405151367], + [-0.46800142526626587, 11.604239463806152], + [-4.670222282409668, -1.9666287899017334], + [2.4269397258758545, -3.794175386428833], + [-6.5280022621154785, 7.635180473327637], + [-2.6159884929656982, 2.140139102935791], + [6.2842698097229, -3.1101911067962646], + [-0.4795260429382324, 9.39083480834961], + [-4.5268073081970215, 2.695690155029297], + [2.8163511753082275, -4.3133721351623535], + [1.6084723472595215, 5.214856147766113], + [-2.8990776538848877, -1.8105655908584595], + [-1.916329264640808, 1.8189690113067627], + [-1.2512792348861694, -1.3493191003799438], + [5.071959972381592, -1.2091760635375977], + [4.6434149742126465, 7.018978118896484], + [2.841704845428467, -4.287484169006348], + [-0.2816309928894043, 8.854665756225586], + [-4.526841640472412, 5.382375717163086], + [1.9703397750854492, 5.354727745056152], + [-0.14254498481750488, -0.6342699527740479], + [-7.206905364990234, 9.001640319824219], + [3.108830690383911, -4.655793190002441], + [7.219902038574219, -2.243014097213745], + [0.1889793872833252, -1.0549808740615845], + [2.838864326477051, -6.038379669189453], + [-2.8504831790924072, 0.6443175077438354], + [-7.492929458618164, -0.9838206768035889], + [8.340357780456543, -1.839873194694519], + [-6.350917339324951, 5.287308692932129], + [5.7080979347229, -1.23717200756073], + [-4.710367679595947, 4.106087684631348], + [-3.104414701461792, -4.206678867340088], + [-6.332127094268799, -2.3763368129730225], + [-7.923480033874512, -1.7361607551574707], + [-4.214810848236084, 2.7608494758605957], + [2.193978786468506, -3.346640110015869], + [-0.36274415254592896, 9.948884963989258], + [-0.2211061716079712, 9.310810089111328], + [-4.032116889953613, -0.604073166847229], + [-5.822680950164795, -1.5211957693099976], + [8.566994667053223, -2.3526217937469482], + [0.6785535216331482, -6.611188888549805], + [-4.633436679840088, -3.2110424041748047], + [-2.335198402404785, 6.438002586364746], + [-7.304771900177002, -1.390501618385315], + [0.4479820728302002, -0.45078134536743164], + [-6.106241703033447, -3.112485647201538], + [0.5482149124145508, -0.3952116072177887], + [-0.5175562500953674, 9.689306259155273], + [-7.371885299682617, -0.611828088760376], + [-4.419132232666016, -2.0706543922424316], + [2.537022352218628, 5.903353691101074], + [-7.9423651695251465, -1.2992972135543823], + [-2.8620448112487793, 2.1977431774139404], + [0.8327396512031555, 0.3748752474784851], + [-0.22855955362319946, -0.7497304677963257], + [3.601804494857788, 6.309844017028809], + [-2.8617238998413086, -2.0142290592193604], + [-3.476489782333374, -2.1853463649749756], + [-5.135066032409668, 7.757867813110352], + [2.526466131210327, -4.842818260192871], + [-7.484075546264648, -1.5543326139450073], + [2.763660192489624, -4.153135299682617], + [2.9276444911956787, -5.9122467041015625], + [-4.48353910446167, 7.211505889892578], + [3.0633790493011475, -4.737228870391846], + [-5.706817150115967, 6.733109474182129], + [1.606461524963379, -3.1491782665252686], + [2.779710531234741, -4.277053356170654], + [-4.229674816131592, -2.654463529586792], + [-1.1302199363708496, 7.753635406494141], + [-0.12212765961885452, -0.5344377756118774], + [1.392129898071289, -7.463268756866455], + [2.969879388809204, -4.482419967651367], + [-5.545289516448975, -3.869927167892456], + [-5.13065767288208, -0.8835949301719666], + [-2.053640842437744, 0.18819868564605713], + [-8.019872665405273, -1.2418831586837769], + [2.982253313064575, 0.9811781644821167], + [-2.9285223484039307, 2.3892078399658203], + [-0.3263084292411804, 10.686895370483398], + [-2.977534294128418, 3.715934991836548], + [8.663804054260254, -2.4441704750061035], + [-2.2527964115142822, 1.5140740871429443], + [4.591437816619873, -4.043151378631592], + [-2.1183342933654785, 0.8840542435646057], + [-2.8034274578094482, 4.760837078094482], + [-6.143747329711914, -1.3269110918045044], + [0.19377774000167847, 9.532129287719727], + [-3.6040287017822266, -2.9822115898132324], + [-6.111507892608643, 7.192843437194824], + [6.012363910675049, -1.1025129556655884], + [1.9249293804168701, -6.637127876281738], + [2.295819044113159, -7.649808883666992], + [-5.958353042602539, -1.7529445886611938], + [-6.622194766998291, -2.0229809284210205], + [-2.5272295475006104, 2.2829179763793945], + [-4.837209224700928, -3.2310831546783447], + [6.635495662689209, -4.636059761047363], + [-2.1124379634857178, 2.4482786655426025], + [1.5808017253875732, -4.8116044998168945], + [-6.925649166107178, 8.467827796936035], + [-0.16999918222427368, -1.1828516721725464], + [-4.748161792755127, 3.7257344722747803], + [-7.991655349731445, -2.0198190212249756], + [-5.381380558013916, 4.459043502807617], + [-3.213456869125366, -2.3832778930664062], + [9.907179832458496, -2.731877088546753], + [-2.313331127166748, 2.1423134803771973], + [-2.005619764328003, 0.8807487487792969], + [-2.8489699363708496, 2.602473735809326], + [-0.5688863396644592, 9.297571182250977], + [1.415440320968628, -6.465595722198486], + [7.574263095855713, -2.027833938598633], + [-4.081826210021973, -3.430168867111206], + [-4.999049663543701, -2.7313311100006104], + [-2.338411808013916, -0.5827921628952026], + [8.754091262817383, -2.2651469707489014], + [-5.489959239959717, -2.465818405151367], + [2.300801992416382, -3.600816011428833], + [-4.012598037719727, -0.8389582633972168], + [6.784992694854736, -2.5880157947540283], + [-4.559348106384277, -1.696815013885498], + [-4.03358268737793, -0.9699677228927612], + [4.773290634155273, 7.357918739318848], + [2.7239394187927246, -5.8601837158203125], + [-5.8091349601745605, 6.556034088134766], + [9.989394187927246, -2.7762351036071777], + [2.9084701538085938, -4.572280406951904], + [0.9904939532279968, -6.490440368652344], + [-4.757876873016357, 5.264223098754883], + [-2.481870412826538, 1.8807878494262695], + [0.2532927691936493, -3.232246160507202], + [3.0309488773345947, -5.14536190032959], + [-5.095222473144531, -3.52575421333313], + [7.065921306610107, -3.995530843734741], + [5.422369956970215, -1.4329966306686401], + [-2.4632222652435303, 1.6073235273361206], + [2.217024564743042, 5.402738094329834], + [-2.254987955093384, 2.451075792312622], + [-0.5365074276924133, 9.286337852478027], + [-4.878045558929443, -4.0831828117370605], + [-0.560947597026825, 8.938943862915039], + [-0.20229536294937134, 10.913677215576172], + [-5.465830326080322, -1.2240911722183228], + [3.0716583728790283, -4.751702308654785], + [-8.351219177246094, -1.2622262239456177], + [8.674232482910156, -2.2474944591522217], + [-5.527674198150635, -0.012395266443490982], + [-4.750087261199951, 5.420688629150391], + [-4.847021579742432, -4.67206335067749], + [-0.1590612232685089, -0.6819225549697876], + [3.2728374004364014, -4.886462688446045], + [-2.0029213428497314, 2.4555046558380127], + [-5.471610069274902, -0.5367072820663452], + [-5.034420490264893, -4.194807052612305], + [2.0507283210754395, 1.0788567066192627], + [-6.292257785797119, 7.72764778137207], + [1.9615097045898438, -8.428996086120605], + [5.5030837059021, -1.0213754177093506], + [3.0883281230926514, 0.8957728147506714], + [-4.691667079925537, 4.365327835083008], + [-2.323511838912964, -1.6448003053665161], + [-4.990885257720947, -4.776503562927246], + [1.947385549545288, -9.73690414428711], + [-3.6182525157928467, 2.5787768363952637], + [2.943513870239258, -4.4256768226623535], + [-5.493034839630127, 6.4488139152526855], + [-4.069093227386475, -1.0550228357315063], + [8.543793678283691, -2.4723243713378906], + [-5.1032938957214355, -3.246206045150757], + [-2.237292528152466, 0.919133722782135], + [1.8081438541412354, -4.445491790771484], + [0.006441526114940643, 9.823310852050781], + [1.7080330848693848, -8.853607177734375], + [-4.723869800567627, 5.831740856170654], + [3.5610849857330322, -5.957409858703613], + [1.4652642011642456, -5.937370300292969], + [5.387538433074951, -1.063051462173462], + [-5.594773769378662, -1.9040204286575317], + [3.3136348724365234, -5.195579528808594], + [-0.2886621356010437, 9.607845306396484], + [-4.509565830230713, -1.0525097846984863], + [1.3062028884887695, -7.258426666259766], + [-7.611995220184326, -0.22426772117614746], + [-8.464194297790527, -1.6648187637329102], + [-0.013396121561527252, -0.17548906803131104], + [-2.064732313156128, 0.8712015151977539], + [-1.976132869720459, 1.573035717010498], + [2.679348945617676, -5.48591423034668], + [-2.217379331588745, 2.0797996520996094], + [-5.21563720703125, -2.8601386547088623], + [-0.17976799607276917, -0.5036985874176025], + [6.368224143981934, 8.640410423278809], + [-0.36497753858566284, 9.746455192565918], + [-5.43225622177124, 2.064411163330078], + [2.8460211753845215, -4.558932304382324], + [1.2914049625396729, -6.448786735534668], + [2.1380274295806885, -3.2660794258117676], + [-3.984055280685425, -4.1468305587768555], + [0.01835855096578598, -3.270087718963623], + [-4.834131717681885, -2.365882635116577], + [9.370643615722656, -2.495055913925171], + [7.441517353057861, -1.9028009176254272], + [-5.457546710968018, 2.4954729080200195], + [1.475568175315857, 2.112575054168701], + [-4.394336223602295, -3.355689764022827], + [-2.387911558151245, 0.3406955599784851], + [2.2973735332489014, -8.093328475952148], + [-1.7120639085769653, 2.2824180126190186], + [-0.0721597746014595, -1.0008745193481445], + [-4.357271194458008, 5.359628200531006], + [-2.730602264404297, 4.8741278648376465], + [-4.66339635848999, -2.553403615951538], + [-2.105907917022705, -1.0887072086334229], + [-4.833611488342285, -2.790889263153076], + [-3.791231632232666, -2.8279871940612793], + [0.44093966484069824, -0.5634031295776367], + [-1.0812678337097168, -2.7348196506500244], + [-4.722297668457031, -2.2858192920684814], + [1.9898946285247803, -3.9415125846862793], + [-5.584028720855713, -3.87978196144104], + [-0.07268046587705612, -0.629347562789917], + [-2.3619370460510254, 2.5049402713775635], + [-7.1210222244262695, 8.756507873535156], + [-4.535088062286377, -1.4192911386489868], + [-3.6605305671691895, -0.34594857692718506], + [-3.636018753051758, 7.509254455566406], + [-7.093066692352295, 8.62232780456543], + [-0.5807799696922302, 9.60295295715332], + [1.2228211164474487, 5.501560211181641], + [-0.3665705919265747, 9.879518508911133], + [-6.2588324546813965, -2.515674352645874], + [-4.777908802032471, -0.5965121388435364], + [-4.471973896026611, 6.04359769821167], + [2.985637664794922, -4.487006664276123], + [-4.199821949005127, -1.0650838613510132], + [6.1216044425964355, -1.2960127592086792], + [-0.6198680400848389, 9.129901885986328], + [-5.046031475067139, -3.438366651535034], + [9.191544532775879, -2.608903169631958], + [-4.8194756507873535, -3.2010574340820312], + [1.9497425556182861, -3.8801534175872803], + [-4.59963846206665, -1.7819241285324097], + [3.122939348220825, -4.913950443267822], + [-6.829674243927002, -1.2502676248550415], + [-0.25000518560409546, 9.403388977050781], + [-0.061070747673511505, 10.118715286254883], + [1.1417937278747559, 5.490928649902344], + [-7.401078224182129, 9.04000186920166], + [-5.016757488250732, -3.2041122913360596], + [1.7966880798339844, 5.000778675079346], + [-4.998261451721191, -1.6128222942352295], + [1.5591942071914673, -7.542447566986084], + [0.4181618094444275, -0.7824985384941101], + [-5.079137325286865, -2.706989049911499], + [-2.1632325649261475, 2.754141330718994], + [0.641058087348938, -6.117690086364746], + [2.5667426586151123, -3.1595981121063232], + [-5.150218486785889, -2.995070695877075], + [2.3551621437072754, -3.836016893386841], + [1.2717366218566895, -5.087268829345703], + [-4.850317478179932, 2.215364933013916], + [-4.912252426147461, -2.2871410846710205], + [0.6556065678596497, 0.274443119764328], + [-3.572456121444702, 3.871846914291382], + [-2.9541685581207275, 2.533728837966919], + [-5.965277194976807, 7.665184497833252], + [3.1715893745422363, -4.956298828125], + [2.3067104816436768, 3.420895576477051], + [3.910939931869507, 6.961460113525391], + [-4.986423969268799, -0.6070207953453064], + [-0.29090672731399536, 9.721651077270508], + [-4.354593276977539, 0.21664631366729736], + [-0.19876128435134888, 10.040574073791504], + [3.431688070297241, -5.108987808227539], + [-2.0288515090942383, 2.559539794921875], + [-6.216039180755615, -1.8205641508102417], + [-5.972484111785889, -2.233609676361084], + [-4.419980525970459, 0.013036604970693588], + [3.187748670578003, -5.778570175170898], + [1.9957640171051025, 2.007694721221924], + [-5.7035231590271, 3.7716591358184814], + [0.48433399200439453, -5.352853775024414], + [1.2829700708389282, -7.021151065826416], + [1.9190000295639038, 3.1703646183013916], + [6.641444683074951, -1.260109543800354], + [-0.048119522631168365, -1.2795237302780151], + [2.0091845989227295, 5.733212471008301], + [-3.6883723735809326, -1.6973603963851929], + [-2.1534769535064697, 2.355548143386841], + [4.313289165496826, -2.8864290714263916], + [0.5332093834877014, -0.3604010045528412], + [-4.402551651000977, -2.376434326171875], + [-0.04029298573732376, 0.4015602469444275], + [0.4645352363586426, -3.1767265796661377], + [-2.1589245796203613, 3.628490924835205], + [2.5278728008270264, -3.9903452396392822], + [-4.806368350982666, -2.601788282394409], + [7.4706130027771, -1.7617450952529907], + [-0.4903212785720825, 10.422231674194336], + [5.048758029937744, -1.1463730335235596], + [-0.2934851050376892, 10.068286895751953], + [-4.567286014556885, -5.753145217895508], + [-5.443066120147705, 3.631366014480591], + [-2.478196859359741, 0.3154147267341614], + [5.199866771697998, -1.097301721572876], + [-4.981282711029053, 5.538184642791748], + [-0.2225385308265686, 10.778636932373047], + [-4.548885822296143, 5.6304802894592285], + [-4.5261735916137695, -2.907200336456299], + [2.825333595275879, -4.824309349060059], + [2.230780601501465, 5.694451808929443], + [-0.3088991045951843, 9.782866477966309], + [-4.902161598205566, -3.5786314010620117], + [-1.2296788692474365, 5.462180137634277], + [-5.457674980163574, 2.170999765396118], + [-0.34973669052124023, 10.490967750549316], + [-3.0706396102905273, -2.2668402194976807], + [-0.48732805252075195, 0.11280730366706848], + [-1.5980314016342163, 5.743725776672363], + [-6.699704647064209, 8.670719146728516], + [-5.40203857421875, 7.295251369476318], + [1.4049596786499023, 4.8549089431762695], + [-4.644859790802002, -6.427749156951904], + [0.7709227204322815, -0.27032265067100525], + [-6.339301109313965, -2.2678465843200684], + [-0.6748011708259583, -0.9915044903755188], + [1.8849937915802002, -8.645723342895508], + [2.4014832973480225, 0.5819475054740906], + [-3.295757532119751, 3.603100538253784], + [1.884158730506897, -7.41766357421875], + [-3.2163538932800293, -4.106168270111084], + [3.0201215744018555, -4.603481292724609], + [-7.004916191101074, -1.9232689142227173], + [-7.534986972808838, -2.0013980865478516], + [-2.2785732746124268, 2.3572535514831543], + [-3.3086678981781006, -2.073437452316284], + [-4.223005771636963, 4.043666839599609], + [-7.00195837020874, -1.227454662322998], + [9.420680046081543, -2.54460072517395], + [-7.155333042144775, 8.854178428649902], + [1.4056951999664307, -6.928413391113281], + [-2.906438112258911, -1.823602318763733], + [-5.390185832977295, 0.7068774700164795], + [-6.275449275970459, -1.5887048244476318], + [3.2433416843414307, -5.333166599273682], + [-4.455820560455322, -2.914717435836792], + [1.647960901260376, 0.8215013742446899], + [-6.963791370391846, -2.779186248779297], + [-6.374985218048096, 2.762960910797119], + [-0.49510687589645386, 9.264751434326172], + [-7.824987888336182, -0.923704981803894], + [0.23154333233833313, -0.30669617652893066], + [-5.5657806396484375, -4.478847503662109], + [-2.095118761062622, -1.6948634386062622], + [-5.121248722076416, -0.2141464352607727], + [0.5024065971374512, -6.3209381103515625], + [1.8426722288131714, 0.3304777145385742], + [2.573077440261841, -6.509880542755127], + [-3.9242961406707764, -0.7004765272140503], + [-0.16587048768997192, -0.7780847549438477], + [2.7561097145080566, 6.1719160079956055], + [-4.449734687805176, 3.4445605278015137], + [-0.2947695255279541, 9.669848442077637], + [2.168543577194214, -8.411964416503906], + [-0.8407359719276428, 8.998639106750488], + [-3.8128015995025635, -0.2216164469718933], + [-0.24280208349227905, 9.698522567749023], + [1.3417010307312012, 4.515010833740234], + [-4.674083232879639, 4.53654670715332], + [-2.627202033996582, 2.3375437259674072], + [2.92647123336792, -4.496691703796387], + [-5.534630298614502, -0.9126904010772705], + [-2.4771029949188232, 0.051201995462179184], + [-3.775270938873291, -2.382164478302002], + [-2.3231492042541504, 2.4510338306427], + [-4.861690521240234, -2.3543312549591064], + [-2.3080480098724365, 0.5928934812545776], + [-4.220569610595703, 0.9005551934242249], + [5.521675109863281, -2.771670341491699], + [0.2588317394256592, 0.7310723066329956], + [7.299781322479248, -2.8910837173461914], + [-0.4389645457267761, 11.582035064697266], + [4.571854114532471, -0.5956594347953796], + [-4.102756977081299, 4.632684230804443], + [-5.312435626983643, 4.186768054962158], + [-3.3983848094940186, -1.5820690393447876], + [2.7567384243011475, -5.2999796867370605], + [-7.935871601104736, 1.6110891103744507], + [-1.331951379776001, 8.395035743713379], + [2.6692230701446533, -7.002172946929932], + [-3.8290579319000244, 3.990053415298462], + [2.0382604598999023, 5.741527557373047], + [2.3389217853546143, 5.141574859619141], + [-4.496979236602783, -3.9632174968719482], + [-5.439882755279541, -4.418460845947266], + [-3.4183216094970703, -2.120145082473755], + [-8.224822998046875, -0.9034428596496582], + [8.569607734680176, -2.291273355484009], + [-4.959137439727783, -1.886948585510254], + [5.635191440582275, -1.5240086317062378], + [8.737954139709473, -2.564012050628662], + [-6.74159049987793, -0.3188803195953369], + [2.9857583045959473, -4.837465763092041], + [2.438225269317627, -1.0042815208435059], + [-5.189627170562744, 2.425224542617798], + [-3.905648946762085, -1.994395136833191], + [-1.2560230493545532, -1.5482357740402222], + [8.040607452392578, -2.84417986869812], + [-5.120900630950928, 1.5192760229110718], + [-2.671088933944702, 2.3866989612579346], + [-1.9982824325561523, 0.35716092586517334], + [-4.358275890350342, -2.237043857574463], + [-0.37986207008361816, 9.283872604370117], + [2.384204626083374, 0.409111350774765], + [-2.9411797523498535, -2.3015358448028564], + [-4.862712383270264, 0.46604299545288086], + [-2.5512282848358154, 1.095351219177246], + [9.224345207214355, -2.728839635848999], + [-0.21981799602508545, 9.605327606201172], + [-4.532280921936035, -2.9988338947296143], + [-0.2560080885887146, 9.294715881347656], + [1.7064368724822998, -8.894115447998047], + [2.539532423019409, 5.688210487365723], + [-5.3484625816345215, -3.559316635131836], + [-2.8121654987335205, 2.7954044342041016], + [6.510453701019287, -1.5150929689407349], + [-5.559667110443115, 2.9338722229003906], + [3.0622763633728027, -4.7299604415893555], + [-4.678590297698975, -0.16999316215515137], + [2.002171754837036, 5.132393836975098], + [2.6805179119110107, -4.530794143676758], + [-5.909013271331787, 7.076859474182129], + [-3.235234498977661, 5.80277156829834], + [2.662187337875366, -6.704976558685303], + [-0.2769767642021179, 10.561785697937012], + [-6.261697292327881, 2.00315260887146], + [3.2025439739227295, -4.7882609367370605], + [-2.461176872253418, 2.1584227085113525], + [8.340072631835938, -2.607837438583374], + [-0.08798665553331375, 9.769084930419922], + [-2.8373239040374756, 2.8181850910186768], + [5.8681769371032715, -1.156055212020874], + [1.4004311561584473, 1.1637541055679321], + [-2.8182170391082764, -3.439807653427124], + [-3.2650606632232666, -2.6290736198425293], + [-4.45968770980835, 7.474091529846191], + [-5.269619941711426, 6.45540714263916], + [-2.3842508792877197, 1.5572835206985474], + [-0.1388140618801117, -1.0533922910690308], + [6.040900707244873, -2.757242202758789], + [-4.0620551109313965, 5.051257133483887], + [-4.4717326164245605, 7.045694351196289], + [0.762414276599884, -7.006141185760498], + [-4.9185357093811035, 6.967413425445557], + [-6.235788822174072, 5.450305461883545], + [2.377579689025879, -4.73289680480957], + [-0.21885642409324646, -0.8922569751739502], + [-0.298839271068573, 9.366113662719727], + [2.5908710956573486, -2.579759120941162], + [0.5926788449287415, -1.0905791521072388], + [-4.490599155426025, -3.8083431720733643], + [-5.038916110992432, -2.2318472862243652], + [-1.8846434354782104, 0.7348660826683044], + [-6.034013271331787, 6.675352096557617], + [-0.8863981366157532, 9.560281753540039], + [-0.45601004362106323, 9.275474548339844], + [0.3129764795303345, 9.799397468566895], + [-5.5710625648498535, 4.5142669677734375], + [4.703540325164795, 7.203317165374756], + [6.3963093757629395, -3.4131548404693604], + [-0.3930736184120178, -0.7775364518165588], + [6.11051607131958, -2.697951316833496], + [-5.233017444610596, 5.389577865600586], + [2.0727102756500244, -9.93679428100586], + [2.8571279048919678, -4.310894012451172], + [2.773942232131958, -5.193603992462158], + [-6.845000743865967, -1.4964874982833862], + [8.650793075561523, -2.383491277694702], + [-4.832197666168213, 2.592606782913208], + [-3.9125545024871826, -1.484511375427246], + [-0.31900888681411743, 10.582469940185547], + [-5.422983169555664, -4.19399356842041], + [-2.258324384689331, 1.436131238937378], + [7.314223766326904, -1.8665900230407715], + [-4.278985023498535, 2.964676856994629], + [-0.8708494901657104, -0.5283603072166443], + [1.9542748928070068, -6.235205173492432], + [2.9484856128692627, 6.3435959815979], + [-0.3590052127838135, 10.340978622436523], + [-2.6502525806427, -3.239548444747925], + [2.319505214691162, 4.688838958740234], + [7.637557029724121, -2.4435644149780273], + [-6.4695210456848145, 2.082273483276367], + [2.8366150856018066, -4.338102340698242], + [-0.9879539608955383, 10.094173431396484], + [-4.3560943603515625, 6.457680702209473], + [-2.099914312362671, -1.3050220012664795], + [3.8605785369873047, -1.003333568572998], + [1.1588199138641357, -7.529125690460205], + [-4.1468939781188965, 6.459213733673096], + [-6.170851707458496, -2.0510551929473877], + [8.107443809509277, -2.1003329753875732], + [-0.3407335877418518, 10.329119682312012], + [-1.980666995048523, -2.442291498184204], + [-4.722668170928955, 5.81734037399292], + [-4.001965045928955, -1.4764741659164429], + [1.1598892211914062, -6.4274396896362305], + [-4.621669769287109, -1.4367740154266357], + [-4.947568893432617, -0.1880868673324585], + [-4.691030025482178, -1.4522197246551514], + [8.875322341918945, -2.5027711391448975], + [-4.533303737640381, 5.701881408691406], + [0.8963455557823181, 5.705853462219238], + [2.847961187362671, -4.217843532562256], + [-0.9756587743759155, 8.401666641235352], + [-5.620166301727295, -3.1653409004211426], + [-3.8274331092834473, -2.196099042892456], + [0.918352484703064, -5.903541564941406], + [2.2688143253326416, 5.297274589538574], + [-3.2999107837677, -2.881291389465332], + [-1.5156866312026978, -0.8000132441520691], + [-4.775660991668701, -3.8954875469207764], + [1.516594648361206, 5.781821250915527], + [0.9130710363388062, 0.4628083109855652], + [-3.150301694869995, -4.684652328491211], + [2.7751333713531494, -5.864184379577637], + [-4.838104724884033, -2.720179557800293], + [-2.0397942066192627, -2.742462158203125], + [-5.540431499481201, -2.9875192642211914], + [-3.711590051651001, -1.7592929601669312], + [-6.516844749450684, -2.396221399307251], + [2.9752423763275146, -4.504932403564453], + [-5.049202919006348, -0.5578524470329285], + [0.060448579490184784, 5.210290431976318], + [-0.48208099603652954, 10.420004844665527], + [-2.3964412212371826, 1.7495331764221191], + [5.961907863616943, 7.498080253601074], + [-5.8878045082092285, -4.429004669189453], + [3.4456818103790283, -0.48797881603240967], + [-6.585838794708252, 8.527884483337402], + [5.124970436096191, -0.9767171144485474], + [-4.286478519439697, -2.36946177482605], + [6.288782596588135, -1.3949230909347534], + [-5.444873332977295, -1.9828583002090454], + [-0.6557198166847229, -0.6967352032661438], + [-7.629175662994385, -0.978164553642273], + [-0.13266244530677795, -1.478011965751648], + [-4.01561975479126, -1.173793911933899], + [-4.502178192138672, -1.9281471967697144], + [-3.5374815464019775, -3.501932382583618], + [-6.177483558654785, -1.7827214002609253], + [0.9968622326850891, 0.4729824662208557], + [0.8311335444450378, -3.727600574493408], + [-4.89359712600708, 6.051790237426758], + [-5.1863532066345215, 6.046719551086426], + [3.3305373191833496, -4.975933074951172], + [0.4850229024887085, -0.7292628288269043], + [9.440693855285645, -3.0241148471832275], + [-5.282501220703125, 7.437158584594727], + [2.1985442638397217, -8.642792701721191], + [-5.018230438232422, 4.786282539367676], + [2.3251726627349854, -6.297335624694824], + [2.517908811569214, -3.950126886367798], + [0.7301669716835022, 4.485698223114014], + [1.2301318645477295, 3.167316198348999], + [-2.7728078365325928, -1.6788628101348877], + [2.6227591037750244, 6.239380836486816], + [3.6242051124572754, -2.3610544204711914], + [-3.6357805728912354, -3.334630250930786], + [-5.414824962615967, -1.9251646995544434], + [-3.609281063079834, -0.9349159002304077], + [8.099432945251465, -2.451171636581421], + [-4.24982213973999, -3.4249980449676514], + [9.17642879486084, -2.3494455814361572], + [-2.7577202320098877, -1.5467934608459473], + [-4.622105121612549, -3.687819480895996], + [-5.8770880699157715, -2.0472617149353027], + [1.4516772031784058, -0.021764356642961502], + [2.663944959640503, -5.668938159942627], + [1.664952278137207, 4.901698112487793], + [-2.7212955951690674, -1.0716731548309326], + [1.7073272466659546, -8.210453987121582], + [-1.8102291822433472, -0.5864828824996948], + [2.3627681732177734, 5.537487983703613], + [-0.2084280252456665, -1.0372332334518433], + [8.584670066833496, -2.37414813041687], + [-5.623902320861816, -2.1930932998657227], + [3.305715322494507, 6.435748100280762], + [2.6632232666015625, -6.855683326721191], + [-0.333371102809906, 9.526646614074707], + [2.150801420211792, 4.928115367889404], + [3.049752950668335, -4.576552391052246], + [2.667307138442993, -3.972121000289917], + [9.306459426879883, -2.5903608798980713], + [-4.681280136108398, 1.7244571447372437], + [1.1190778017044067, -4.74013614654541], + [-2.855088949203491, 4.770319938659668], + [8.529597282409668, -2.3990695476531982], + [-0.23307287693023682, 10.353591918945312], + [3.192751884460449, -4.780792236328125], + [1.525660753250122, 0.7345714569091797], + [-3.8266189098358154, -3.3016068935394287], + [-4.511948585510254, -2.5280961990356445], + [-4.386249542236328, -3.6222877502441406], + [-5.543762683868408, 0.056042905896902084], + [-4.066825866699219, 6.232572555541992], + [-2.117891788482666, 2.510751724243164], + [3.3187215328216553, -5.164259910583496], + [1.0440363883972168, -7.250510215759277], + [-0.4066135287284851, 10.701004028320312], + [-4.660447597503662, 2.605741500854492], + [8.350539207458496, -2.2596938610076904], + [-4.392953872680664, -0.03769982233643532], + [-2.257784843444824, 0.43079903721809387], + [-2.4020533561706543, 1.4353163242340088], + [-3.9388504028320312, 5.076022148132324], + [-4.986843109130859, 0.7020404934883118], + [2.272014856338501, 5.751883029937744], + [-4.312756061553955, -2.744658946990967], + [9.270676612854004, -2.619123697280884], + [0.11637376993894577, -1.1675106287002563], + [-0.5627961754798889, 8.977317810058594], + [-2.349592685699463, 2.234210729598999], + [6.764047145843506, -1.9428272247314453], + [4.077702045440674, -2.8061206340789795], + [1.7699267864227295, 5.347565650939941], + [1.6835429668426514, 5.0550713539123535], + [-5.306636333465576, -2.6917405128479004], + [-3.526034116744995, -3.3182687759399414], + [-4.3150177001953125, -1.9970399141311646], + [3.2102954387664795, -5.07341194152832], + [2.0750415325164795, -3.3016231060028076], + [-3.408461332321167, -3.4039175510406494], + [-0.20231425762176514, 9.876314163208008], + [2.2628426551818848, 5.792325019836426], + [2.49188494682312, -3.3859541416168213], + [-1.0801362991333008, 5.252202033996582], + [2.2595765590667725, -4.625423908233643], + [-0.15034455060958862, 10.114802360534668], + [1.213062047958374, -7.960379123687744], + [-1.1889222860336304, -0.6364098787307739], + [1.9860658645629883, 1.6488410234451294], + [-0.35798096656799316, 9.306772232055664], + [-5.7927093505859375, 2.389427423477173], + [-5.67115592956543, -3.8167686462402344], + [1.602524757385254, -8.480879783630371], + [-0.7100763916969299, 10.071304321289062], + [-0.3876626789569855, -0.33638885617256165], + [6.267107009887695, -2.031611919403076], + [-2.363415479660034, 1.6563305854797363], + [-5.506722927093506, 1.5583423376083374], + [8.46959400177002, -2.576409339904785], + [-2.7385785579681396, 2.7443482875823975], + [2.888545274734497, -8.98291301727295], + [3.030219793319702, -4.74242639541626], + [-3.2835681438446045, -2.8226888179779053], + [-2.822105884552002, -1.3703826665878296], + [1.8115545511245728, -4.44399356842041], + [-4.958859920501709, -3.1944782733917236], + [2.7984302043914795, -4.399544715881348], + [-3.5459184646606445, 2.6752560138702393], + [-4.799831867218018, 3.5419275760650635], + [0.7183992266654968, 5.920956611633301], + [0.5618152022361755, 0.2767671048641205], + [1.6879382133483887, -5.168118000030518], + [3.0153963565826416, -4.524598121643066], + [-1.2939817905426025, -3.6293346881866455], + [-4.761821746826172, -2.97831130027771], + [-2.435511827468872, 2.4616270065307617], + [-5.21848726272583, 4.988137245178223], + [-1.7726331949234009, -0.7572894096374512], + [-4.766468524932861, -0.2158418893814087], + [5.014158725738525, -1.6261264085769653], + [-4.283070087432861, 3.546541213989258], + [-0.4331899881362915, 9.50762939453125], + [-1.9448364973068237, 6.665023326873779], + [-0.12011820822954178, -1.2976759672164917], + [-0.499886691570282, 11.392910957336426], + [-3.597508668899536, 3.5635790824890137], + [-7.469845294952393, -1.2950870990753174], + [-0.20983266830444336, 9.322626113891602], + [-3.150115966796875, -1.5437227487564087], + [-4.80083703994751, 3.482062816619873], + [3.096010446548462, -4.735110282897949], + [-6.568647384643555, -2.088016986846924], + [0.5668922066688538, 9.709193229675293], + [-2.410595178604126, 2.5270168781280518], + [2.8318254947662354, -4.281803607940674], + [-3.8800771236419678, -5.49531888961792], + [-4.142740726470947, 0.435055136680603], + [-2.7107203006744385, 4.983793258666992], + [1.6807591915130615, 0.8698431849479675], + [-0.3525562286376953, 9.588859558105469], + [-4.7689290046691895, 6.221462726593018], + [-2.2090423107147217, 1.3892927169799805], + [-0.1938508152961731, 10.330761909484863], + [2.3350846767425537, -3.633334159851074], + [2.464665651321411, -3.7749855518341064], + [2.187126636505127, 5.502777099609375], + [0.3471790552139282, -4.906411170959473], + [-8.099871635437012, -1.4517797231674194], + [2.1383423805236816, -3.549588680267334], + [-0.37779802083969116, 11.172350883483887], + [0.9940438866615295, -6.466479301452637], + [-0.6465765237808228, 4.72238826751709], + [-5.328649520874023, 3.5514075756073], + [0.6543449759483337, -5.7470197677612305], + [6.722342491149902, -1.696858525276184], + [-1.9734634160995483, 1.4723137617111206], + [-3.925977945327759, -5.296280860900879], + [-6.542759418487549, -0.9509915113449097], + [8.362931251525879, -2.20961332321167], + [1.7243046760559082, 4.231133460998535], + [-6.354085922241211, 7.377005577087402], + [-0.3671157956123352, 10.930215835571289], + [-3.396178960800171, -3.767676591873169], + [-4.561583995819092, -2.9860987663269043], + [-5.241669178009033, -3.331707715988159], + [-4.262115955352783, 4.560302257537842], + [0.558626651763916, -1.197622299194336], + [-4.68512487411499, -3.8189353942871094], + [-4.784736633300781, -1.013208270072937], + [1.9714076519012451, -9.754507064819336], + [-0.15767085552215576, -0.8347760438919067], + [8.478282928466797, -2.261057138442993], + [8.84644603729248, -2.5605876445770264], + [5.1764960289001465, 7.486859321594238], + [1.2530126571655273, -7.490917682647705], + [-2.0291130542755127, 2.525026559829712], + [-6.056369304656982, 1.9724072217941284], + [-0.22952455282211304, 9.91074275970459], + [-4.222615718841553, -4.059352874755859], + [-5.762214183807373, -2.683565855026245], + [2.1283838748931885, 5.823705673217773], + [-4.24945592880249, 6.42214298248291], + [-5.491089344024658, 1.8621002435684204], + [-5.309937477111816, 6.395943641662598], + [-6.165879726409912, 3.619201898574829], + [-4.752340316772461, -2.164822578430176], + [-2.7426891326904297, 5.6396870613098145], + [2.924487352371216, -4.435300350189209], + [-2.088913679122925, 0.17710769176483154], + [-0.006125517189502716, 6.888250350952148], + [-3.4884426593780518, 5.809606552124023], + [-2.125025749206543, 2.5784759521484375], + [0.06297420710325241, 9.670108795166016], + [-3.6293563842773438, -1.7070101499557495], + [-2.2082436084747314, 2.575601100921631], + [-7.802794933319092, 0.10434114933013916], + [2.0246682167053223, -3.3782732486724854], + [-6.905579090118408, -2.9986929893493652], + [4.156453609466553, 6.712210655212402], + [-5.835379123687744, -2.322789430618286], + [8.6243314743042, -2.3445022106170654], + [3.0602381229400635, -4.594252109527588], + [-2.9612526893615723, -4.245936870574951], + [9.158258438110352, -2.6274008750915527], + [-0.31133413314819336, 10.054201126098633], + [-6.974512577056885, 8.610644340515137], + [-0.3491644263267517, 9.785809516906738], + [-3.30324649810791, -1.3011835813522339], + [-6.033620357513428, 8.120080947875977], + [-1.0109559297561646, 10.125768661499023], + [2.6255321502685547, -0.6826364398002625], + [2.47200608253479, -3.3682637214660645], + [-4.032604217529297, -3.1182456016540527], + [9.368084907531738, -2.6119418144226074], + [-4.407188415527344, -2.2869410514831543], + [-7.040276050567627, 2.102846145629883], + [9.242422103881836, -2.5071966648101807], + [1.074912667274475, 0.7230190634727478], + [-0.3330997824668884, -1.1822983026504517], + [-2.179841995239258, 2.6750380992889404], + [6.727323055267334, -3.5780556201934814], + [-2.879514217376709, 2.372976779937744], + [-3.52681827545166, -1.508053183555603], + [2.952514886856079, -4.440507888793945], + [-6.43939733505249, -1.597352385520935], + [-2.4629924297332764, 2.146034002304077], + [2.7849509716033936, -5.998601913452148], + [-2.3876914978027344, 1.6765574216842651], + [7.445938587188721, -1.9595541954040527], + [-1.2080187797546387, 10.247678756713867], + [3.068549394607544, -4.618597030639648], + [-3.8900973796844482, -1.3592292070388794], + [8.260607719421387, -2.2022697925567627], + [-2.525056838989258, 2.8087992668151855], + [8.402473449707031, -2.2173497676849365], + [-6.079113006591797, -3.0267112255096436], + [2.7334723472595215, -4.180912971496582], + [-2.105623960494995, 2.94242000579834], + [-4.4807939529418945, 6.563968181610107], + [-2.9357383251190186, 2.8103792667388916], + [4.468016147613525, -0.41354963183403015], + [3.09989857673645, -4.650146484375], + [-0.07643456012010574, 9.724861145019531], + [-4.977858066558838, -3.1161515712738037], + [0.09135042876005173, -0.5236049890518188], + [-5.150935649871826, 3.3416714668273926], + [-0.3314160704612732, 10.455904006958008], + [-4.6985859870910645, -4.633426666259766], + [1.987663984298706, -3.7493655681610107], + [-3.307908535003662, -1.0474133491516113], + [4.741993427276611, -2.355224370956421], + [-4.816517353057861, -3.0109450817108154], + [5.4745635986328125, 7.409438133239746], + [1.7726768255233765, 5.5362372398376465], + [8.417695045471191, -2.5365283489227295], + [-6.463389873504639, -0.27584779262542725], + [-4.186776638031006, 4.296392440795898], + [2.1341516971588135, 5.752696990966797], + [-5.814837455749512, 8.285989761352539], + [-2.0804951190948486, 2.1366844177246094], + [-2.005476713180542, 1.8878769874572754], + [-0.7743238210678101, 9.725679397583008], + [8.018631935119629, -2.203627347946167], + [-4.678786754608154, 5.392827987670898], + [-4.784063816070557, -4.042931079864502], + [9.769610404968262, -2.7188916206359863], + [-3.262159585952759, 4.669397354125977], + [-0.4335094094276428, 10.350751876831055], + [-4.614838123321533, -1.46410071849823], + [2.408886671066284, 0.7219487428665161], + [6.641364574432373, -1.229559063911438], + [5.43511962890625, -2.506894588470459], + [-3.8317408561706543, -1.3529433012008667], + [-2.1724393367767334, 1.2750766277313232], + [6.039921283721924, -2.6854445934295654], + [-0.26469096541404724, -0.9639451503753662], + [0.27293527126312256, 0.07979485392570496], + [-7.016972064971924, -1.4857558012008667], + [-3.927307605743408, -4.650744438171387], + [-4.606297492980957, 6.50624418258667], + [2.2848708629608154, -3.930804967880249], + [2.2029869556427, -8.331298828125], + [-5.127727031707764, -1.839931845664978], + [-5.605988025665283, 6.799202919006348], + [3.1152687072753906, -4.6880879402160645], + [-2.622790575027466, 1.202993631362915], + [-0.20125776529312134, 9.624746322631836], + [-0.5598222017288208, -2.5394747257232666], + [7.1453423500061035, -1.4945858716964722], + [-3.6169588565826416, -4.413358211517334], + [3.4675815105438232, -0.6173346042633057], + [-7.603947162628174, 9.34822940826416], + [-2.5424976348876953, 6.370689868927002], + [-4.294058799743652, -1.0639033317565918], + [-9.496027946472168, -1.0899885892868042], + [4.064095973968506, 6.780028343200684], + [-6.54005765914917, 8.249542236328125], + [6.632307052612305, -1.4078816175460815], + [-2.023075819015503, -0.35744279623031616], + [-2.5470333099365234, 6.827259063720703], + [-5.2897047996521, 2.5043880939483643], + [-5.895963191986084, -1.1758300065994263], + [2.8052875995635986, 6.19584846496582], + [2.9695074558258057, -4.4898762702941895], + [-2.4985454082489014, 5.477585792541504], + [-0.8635227680206299, -0.555363655090332], + [1.5723850727081299, -7.807729721069336], + [-5.31646203994751, -3.3456828594207764], + [-0.8356231451034546, 9.46755599975586], + [-5.945174694061279, -2.486353874206543], + [-2.427140474319458, 1.792044758796692], + [-5.490318775177002, -2.7122042179107666], + [8.081141471862793, -2.172912836074829], + [-3.6413733959198, -1.519613265991211], + [-4.343015670776367, 3.764585256576538], + [5.361965656280518, -3.9961512088775635], + [-5.450328826904297, 0.707221508026123], + [-0.4315550923347473, 1.9369900226593018], + [-4.481890678405762, -1.2300834655761719], + [-5.405918598175049, -2.188662528991699], + [-0.320043683052063, 9.886165618896484], + [-5.672280311584473, -3.425393581390381], + [-4.669254302978516, 6.9639177322387695], + [-6.533876419067383, 7.894514083862305], + [0.2734115719795227, 0.3201392590999603], + [-0.126564621925354, 9.12450885772705], + [7.661256790161133, -1.8904340267181396], + [1.49173104763031, -6.971190452575684], + [2.259432315826416, -3.680786371231079], + [7.931949138641357, -2.2844622135162354], + [-7.0925984382629395, -1.4228988885879517], + [-3.6011130809783936, -1.3403809070587158], + [9.5263090133667, -2.653278350830078], + [-3.9323580265045166, 0.016478892415761948], + [2.588841676712036, -4.023508071899414], + [-1.5492010116577148, 5.306522369384766], + [4.874563217163086, -0.7774677276611328], + [2.41715407371521, -4.169635772705078], + [-8.598198890686035, -1.3513745069503784], + [5.882595062255859, -1.193383812904358], + [2.244607925415039, 5.43477725982666], + [2.0231258869171143, 5.569578170776367], + [-1.1057229042053223, 3.3809115886688232], + [2.200890302658081, 1.574891448020935], + [-2.183349132537842, 2.0701045989990234], + [1.032073736190796, 0.8554896712303162], + [-5.37136697769165, -0.8036761283874512], + [1.897606611251831, 4.09808874130249], + [1.3793694972991943, -6.38846492767334], + [-5.912177562713623, 7.976797103881836], + [-5.572314262390137, 8.5130033493042], + [8.827790260314941, -2.4184062480926514], + [-0.16126114130020142, 9.248961448669434], + [-5.594578266143799, 3.663144826889038], + [2.4379122257232666, -5.623329162597656], + [10.047120094299316, -2.8397343158721924], + [5.396115779876709, -1.6336575746536255], + [5.477954387664795, -1.2810379266738892], + [8.972747802734375, -2.571514368057251], + [-3.00089955329895, -1.7153079509735107], + [-0.17118912935256958, 10.366781234741211], + [-4.008615016937256, -2.843191623687744], + [6.635046482086182, -1.5252491235733032], + [2.241617202758789, -3.423499345779419], + [-2.522411346435547, 4.4232683181762695], + [2.701280355453491, -4.542553901672363], + [-4.075965404510498, -3.362125873565674], + [2.408580780029297, -3.9393131732940674], + [-2.7914857864379883, 5.606122016906738], + [-5.169703960418701, -1.7398051023483276], + [0.5368391871452332, -0.9909402132034302], + [-0.9376484751701355, 4.067544460296631], + [-6.364710330963135, -1.9335452318191528], + [9.047567367553711, -2.5069587230682373], + [-5.270692825317383, 4.894847393035889], + [3.1837799549102783, -6.791703224182129], + [-5.907726287841797, 7.851908206939697], + [-4.266548156738281, -2.9303910732269287], + [1.0341053009033203, -6.813281059265137], + [0.5706115365028381, 0.03522482141852379], + [-5.265689849853516, 1.672472596168518], + [0.2312147319316864, 0.2892928123474121], + [0.8627587556838989, 0.3555257022380829], + [3.004718780517578, -4.5123491287231445], + [-4.491288661956787, 0.12552547454833984], + [-3.5256540775299072, 3.8859164714813232], + [-2.336756944656372, -2.923185110092163], + [-4.425257205963135, -2.784430503845215], + [-4.831469535827637, -2.971945285797119], + [-5.533690452575684, 6.595705986022949], + [-7.104752063751221, -1.1651816368103027], + [2.4823710918426514, -6.76169490814209], + [-0.37607187032699585, 8.71353530883789], + [7.22222375869751, -1.662290096282959], + [-7.3401594161987305, -1.2509188652038574], + [-2.4984130859375, -0.7309228181838989], + [8.395371437072754, -2.2624833583831787], + [-4.269493579864502, 6.355131149291992], + [2.6038591861724854, 6.260781288146973], + [1.4057368040084839, 5.393307685852051], + [8.63837718963623, -2.3519370555877686], + [-2.2871439456939697, -1.4027944803237915], + [-6.043763637542725, 8.066323280334473], + [-6.205715656280518, 7.377111434936523], + [-7.3263936042785645, -0.6834603548049927], + [-6.1492018699646, 2.095456123352051], + [5.27366828918457, -1.2014366388320923], + [2.4289300441741943, -5.472795486450195], + [3.8022091388702393, 5.00153112411499], + [2.9045660495758057, -5.062243461608887], + [-5.346878528594971, 2.0326719284057617], + [-5.530398845672607, -3.0591156482696533], + [-4.423017978668213, -2.6085989475250244], + [-2.070380926132202, 0.4926677942276001], + [-4.1287617683410645, -2.5539255142211914], + [-2.592341184616089, 1.2939451932907104], + [-3.467905282974243, -2.2412610054016113], + [-4.813691139221191, -3.6235477924346924], + [-0.20111197233200073, 9.695096969604492], + [-0.7208152413368225, 1.3198131322860718], + [-4.682462215423584, 5.503321647644043], + [-0.3066781759262085, -1.3445378541946411], + [-1.8956794738769531, -1.024629831314087], + [-5.320781230926514, -4.576039791107178], + [-0.5916686058044434, -0.5408939123153687], + [-0.353526771068573, -1.3647958040237427], + [-0.6724763512611389, 5.856409549713135], + [-4.463520526885986, -0.31312721967697144], + [-0.6079564690589905, 5.341084957122803], + [-4.286466598510742, 5.4783830642700195], + [-2.4021618366241455, 2.020287275314331], + [2.051997184753418, 5.672407150268555], + [-3.4652323722839355, -3.223823308944702], + [-0.25334954261779785, 10.162553787231445], + [-2.247063398361206, 2.611417770385742], + [-2.3789961338043213, 1.56080162525177], + [2.6328413486480713, -7.043029308319092], + [-2.2077572345733643, -3.7948663234710693], + [3.0049073696136475, -4.715516090393066], + [-3.0981028079986572, -2.735668420791626], + [-5.567359447479248, 7.002215385437012], + [-4.293909072875977, 6.784820556640625], + [2.7077715396881104, -4.134244918823242], + [-0.4064030647277832, 11.085554122924805], + [-4.022422790527344, -2.1818511486053467], + [5.173940181732178, 7.434179306030273], + [1.243963599205017, 5.042716979980469], + [-3.3703653812408447, -4.338354587554932], + [-2.6733977794647217, -0.7224866151809692], + [-5.3481926918029785, 2.6234724521636963], + [4.426166534423828, 6.649518966674805], + [2.423567056655884, -4.9847493171691895], + [-2.616959810256958, -2.706735849380493], + [-0.10055465251207352, 11.160039901733398], + [-4.543964385986328, -1.1253350973129272], + [-4.783900737762451, -1.388989806175232], + [-4.782235622406006, -0.8310621976852417], + [-3.692060708999634, -2.0580291748046875], + [-4.445206165313721, -0.8404021263122559], + [-0.11681253463029861, -0.995439887046814], + [8.205320358276367, -2.8227789402008057], + [-5.906576156616211, 8.047270774841309], + [-0.08236277848482132, 9.439033508300781], + [2.3131320476531982, -3.8590481281280518], + [2.7551872730255127, -4.134330749511719], + [-7.180178165435791, -2.0999767780303955], + [1.9029769897460938, 2.506012439727783], + [3.2364258766174316, -4.84208869934082], + [-4.617640018463135, -1.9830974340438843], + [2.9390318393707275, -4.6385602951049805], + [-5.830355167388916, -0.12819796800613403], + [6.4577813148498535, 8.010257720947266], + [-2.6110076904296875, 1.7359771728515625], + [-4.069859504699707, -2.3908848762512207], + [-5.949063301086426, 6.875391006469727], + [-0.7757818102836609, 9.17233943939209], + [-2.460468292236328, 2.946824789047241], + [-0.2991405129432678, 10.652671813964844], + [2.2623019218444824, 6.132707595825195], + [9.790288925170898, -2.8605215549468994], + [7.322415828704834, -2.8865673542022705], + [-0.641715943813324, -0.6688574552536011], + [-6.383677005767822, -1.9328285455703735], + [-4.117802619934082, -3.1818127632141113], + [9.681764602661133, -2.754345178604126], + [-4.952626705169678, -2.776563882827759], + [-4.725528240203857, -3.282064199447632], + [-3.3258326053619385, 5.344901084899902], + [-0.5046460032463074, -1.9542161226272583], + [2.659666061401367, -4.974520683288574], + [-2.150484085083008, 0.9008147716522217], + [8.468308448791504, -2.4535300731658936], + [1.6190061569213867, 5.265409469604492], + [-0.2915574312210083, 9.406299591064453], + [2.972559690475464, -4.4664154052734375], + [0.9467042088508606, -5.895315170288086], + [2.923125982284546, -4.934919357299805], + [3.049217939376831, -4.576479434967041], + [8.158305168151855, -2.30367112159729], + [-2.2671303749084473, 6.23742151260376], + [-2.05800724029541, 0.7200489640235901], + [3.288048267364502, -4.926528453826904], + [-0.6760532259941101, -2.9128806591033936], + [-4.820314407348633, 5.9565253257751465], + [5.371824741363525, -0.9473996162414551], + [-4.10722017288208, 3.1835777759552], + [-0.6893210411071777, 0.5277920365333557], + [-0.7424566745758057, 9.641481399536133], + [-4.468540191650391, -2.89103102684021], + [6.677552223205566, -1.7096065282821655], + [1.6435489654541016, -8.59739875793457], + [2.163569927215576, 5.659786224365234], + [3.1418297290802, -4.835928916931152], + [-6.131674289703369, -1.1012338399887085], + [-1.8549246788024902, 2.394967794418335], + [2.9452764987945557, 0.8851011991500854], + [-4.287715435028076, -2.553546190261841], + [-4.247086524963379, -1.302646279335022], + [-4.57215690612793, -1.4449236392974854], + [-4.52052640914917, 0.0827372670173645], + [-4.576772212982178, 4.7537031173706055], + [1.7056784629821777, 1.9600971937179565], + [-4.256298542022705, -0.447570264339447], + [-1.8846328258514404, 5.727274417877197], + [1.6570515632629395, 4.820835113525391], + [2.7150938510894775, 6.096549034118652], + [-4.621172904968262, -2.657014846801758], + [-0.4475492238998413, 10.296140670776367], + [-2.455488443374634, 1.372591495513916], + [-2.2712182998657227, 0.9167326092720032], + [5.517122268676758, -1.0951215028762817], + [0.16766750812530518, -4.672930717468262], + [-4.808525562286377, 7.768085479736328], + [-4.995498180389404, 7.796353340148926], + [0.9363272786140442, 4.444308757781982], + [1.310098648071289, 4.937477111816406], + [-0.44494956731796265, 11.094110488891602], + [9.667616844177246, -2.6817805767059326], + [-3.6213347911834717, -2.4282639026641846], + [1.6302868127822876, -8.205266952514648], + [-3.8163022994995117, 5.609675407409668], + [-2.669027090072632, -2.4827864170074463], + [8.077348709106445, -2.136587142944336], + [-3.235051155090332, -3.4351413249969482], + [6.675314426422119, -1.559026837348938], + [6.896030902862549, 8.308399200439453], + [3.203644037246704, -4.993585109710693], + [-2.624354600906372, -3.454202175140381], + [-3.5763871669769287, -4.023528099060059], + [-5.345305919647217, -1.9342018365859985], + [-2.78059458732605, 1.9254224300384521], + [-5.777907848358154, 0.9529796838760376], + [-4.67230224609375, -2.5411086082458496], + [9.184704780578613, -2.463132619857788], + [2.5362071990966797, -3.887989044189453], + [-2.409575939178467, 1.5247256755828857], + [-2.2294938564300537, 2.022315263748169], + [1.8690950870513916, 4.621377468109131], + [2.1230199337005615, -6.078664779663086], + [1.8711977005004883, 4.700436115264893], + [1.7023909091949463, -3.287811279296875], + [0.3818044066429138, -1.0153632164001465], + [5.863767623901367, -1.2639555931091309], + [-5.418535232543945, 3.347062349319458], + [-3.9126908779144287, -0.45298123359680176], + [-2.5707530975341797, 3.4157071113586426], + [-4.348032474517822, 6.1045942306518555], + [-5.50372838973999, 7.1066484451293945], + [-4.1359663009643555, -3.3618812561035156], + [2.8627185821533203, -4.461709976196289], + [-4.842051029205322, -4.118863105773926], + [-4.109252452850342, -1.3074537515640259], + [-3.4831600189208984, 1.6407917737960815], + [2.798765182495117, -6.304440498352051], + [5.830560207366943, -4.300948143005371], + [-0.19272881746292114, 10.236361503601074], + [8.508591651916504, -2.759700059890747], + [-0.23178642988204956, 10.289735794067383], + [-1.5927331447601318, 2.063232183456421], + [0.8053609132766724, -0.45580390095710754], + [9.228960990905762, -2.586782693862915], + [0.13350972533226013, -0.5573852062225342], + [0.8676806092262268, -0.489837646484375], + [-4.295771598815918, 7.4507598876953125], + [-7.843205451965332, 9.667889595031738], + [0.4807966947555542, -0.4911956489086151], + [6.760958194732666, -2.106282949447632], + [-4.434701442718506, -0.472680926322937], + [2.09899640083313, -6.967269420623779], + [2.670624017715454, -7.074603080749512], + [-5.203846454620361, -3.1860103607177734], + [-0.19803094863891602, 8.847976684570312], + [-2.771153688430786, -3.8635051250457764], + [7.77822208404541, -2.866184949874878], + [-5.071014881134033, -3.1304666996002197], + [3.0499424934387207, -4.657322883605957], + [5.554184913635254, -3.875948905944824], + [-3.7387619018554688, -2.497758626937866], + [1.9880588054656982, -2.7714595794677734], + [0.412684828042984, -1.0440433025360107], + [-4.756199359893799, 6.44105339050293], + [2.829806089401245, -4.430213928222656], + [2.208416223526001, 0.4044272005558014], + [1.0620790719985962, -3.692913770675659], + [-2.7421581745147705, -1.0290288925170898], + [-2.396425724029541, 1.786750078201294], + [-0.8954752087593079, 0.2938125729560852], + [1.7805016040802002, 6.205745697021484], + [8.59624195098877, -1.8879112005233765], + [-4.446587085723877, -0.9343870878219604], + [2.333941698074341, -3.858973264694214], + [-2.4074933528900146, 1.1946712732315063], + [-5.189285755157471, -0.9418755769729614], + [2.659125566482544, -6.097599506378174], + [-0.3180996775627136, 10.082941055297852], + [2.0351779460906982, 5.858059883117676], + [6.204979419708252, -0.9545209407806396], + [-7.889252662658691, -0.4572519063949585], + [-3.902114152908325, -4.028806686401367], + [-3.2107739448547363, 6.042239189147949], + [-0.2901259958744049, 4.78864049911499], + [0.36659711599349976, -0.661008894443512], + [2.606590986251831, -3.984452962875366], + [-4.864969730377197, -4.330203533172607], + [-7.393015384674072, -1.2603538036346436], + [4.053922653198242, 1.6993275880813599], + [2.1255202293395996, 3.286267042160034], + [1.9936890602111816, 4.114029884338379], + [-2.579348564147949, 1.8963321447372437], + [-5.7452874183654785, -1.9986581802368164], + [9.897683143615723, -2.7804813385009766], + [-6.072807788848877, -1.8213940858840942], + [-0.6257197260856628, 12.463303565979004], + [5.168515682220459, 7.06726598739624], + [-0.11341691762208939, 0.48087966442108154], + [2.7410786151885986, 5.827186107635498], + [3.309068441390991, -5.237741947174072], + [2.4067952632904053, 5.9750657081604], + [-0.36482322216033936, 9.000213623046875], + [-2.375394582748413, 2.2276394367218018], + [2.054870843887329, -2.260382890701294], + [-5.663421154022217, -3.7520368099212646], + [9.669414520263672, -2.7060511112213135], + [-0.193747878074646, 9.821565628051758], + [-4.949741363525391, -2.8567440509796143], + [1.9194297790527344, 1.1792583465576172], + [8.5386323928833, -2.2467362880706787], + [-2.518706798553467, 2.205705404281616], + [-1.9525108337402344, 1.8168001174926758], + [-3.79453444480896, -1.9260953664779663], + [-5.369109630584717, -3.2494027614593506], + [4.230537414550781, -0.7340830564498901], + [2.822888135910034, -4.902362823486328], + [-3.2624971866607666, -4.957181453704834], + [2.887159585952759, -4.368902683258057], + [10.120955467224121, -2.7886245250701904], + [-5.584957599639893, 3.5535757541656494], + [3.198561191558838, -5.020782470703125], + [-4.846278667449951, 6.09930419921875], + [8.386495590209961, -2.064419984817505], + [2.543938398361206, -4.226527214050293], + [0.847058892250061, -6.928950309753418], + [-4.275025367736816, -3.866331100463867], + [3.8120129108428955, 6.406116485595703], + [-6.914271831512451, -2.2111783027648926], + [1.5843555927276611, 4.243446350097656], + [-5.3297200202941895, 6.367294788360596], + [2.6191914081573486, -6.256514072418213], + [-5.888935089111328, 7.366949081420898], + [2.9459097385406494, -4.436357498168945], + [-5.683530330657959, -4.599853515625], + [-2.5302836894989014, -1.5803083181381226], + [-4.661538600921631, 7.366283416748047], + [-2.252075433731079, 2.0943756103515625], + [2.4699819087982178, 6.105808734893799], + [2.7310492992401123, -6.577474594116211], + [5.031358242034912, 6.643800735473633], + [-5.931081295013428, 4.944877624511719], + [7.942840099334717, -2.1216604709625244], + [-3.802544593811035, 1.5138709545135498], + [9.264010429382324, -2.6897237300872803], + [-0.23138219118118286, 9.973033905029297], + [-2.1060588359832764, 0.5422179102897644], + [2.8826591968536377, -7.066639423370361], + [-4.7115864753723145, 4.887113571166992], + [-5.57808256149292, -3.381425619125366], + [2.9495723247528076, -4.694670677185059], + [7.96333646774292, -2.2063796520233154], + [6.105831623077393, -2.9398982524871826], + [-4.751556873321533, -2.4434261322021484], + [-4.08790397644043, -1.2837010622024536], + [-1.688706398010254, 6.184110641479492], + [-5.315954685211182, 2.136669874191284], + [2.9752259254455566, 6.084537506103516], + [3.140883684158325, -4.703218460083008], + [3.0505619049072266, -4.883874893188477], + [2.3432531356811523, -11.194175720214844], + [-0.20351463556289673, 9.622347831726074], + [-4.146744251251221, 0.9175219535827637], + [6.088893413543701, -1.3268582820892334], + [1.8428986072540283, 5.416805267333984], + [-6.964980602264404, -1.1315959692001343], + [-2.341384172439575, 0.86631178855896], + [-3.4001305103302, -2.9220030307769775], + [0.1111142560839653, -4.427395820617676], + [-5.00851583480835, -1.6459769010543823], + [-4.6591410636901855, -2.8332276344299316], + [-1.9622098207473755, 0.3907604515552521], + [-6.686997890472412, 7.885587215423584], + [-3.447943925857544, 0.39161473512649536], + [1.6762653589248657, -6.914962291717529], + [-4.315855979919434, -3.3535470962524414], + [8.804816246032715, -2.1682069301605225], + [-2.368278980255127, 1.0307793617248535], + [-3.8564107418060303, -2.1021716594696045], + [2.099609136581421, -5.759288311004639], + [1.7317771911621094, 5.332065105438232], + [-3.2020294666290283, 3.5187408924102783], + [-0.3704185485839844, 9.75571060180664], + [-6.948827266693115, 8.454507827758789], + [1.6031264066696167, -5.67286491394043], + [-5.670111179351807, 6.459220886230469], + [3.045224905014038, -4.779942035675049], + [-2.03536319732666, -0.07132333517074585], + [5.0783772468566895, 7.659158706665039], + [1.2243568897247314, -6.268170356750488], + [0.7030054330825806, -5.711828231811523], + [6.60538911819458, -1.5014142990112305], + [3.2293126583099365, -5.184152603149414], + [-3.0876946449279785, -3.7242627143859863], + [-4.753615856170654, -2.767848253250122], + [-3.6182572841644287, -4.526622772216797], + [-4.930656909942627, -0.9842060804367065], + [-3.1901447772979736, -2.169938325881958], + [1.8219339847564697, -8.897544860839844], + [2.150256633758545, -3.974794626235962], + [-7.034294128417969, 0.3084371089935303], + [1.7616273164749146, -6.504449844360352], + [6.526217937469482, -2.1434848308563232], + [-4.583584308624268, -3.659904956817627], + [-2.0832343101501465, 0.12129485607147217], + [4.953057289123535, -0.9715799689292908], + [6.190920352935791, -1.1534134149551392], + [-5.359319686889648, 7.244455337524414], + [-8.693901062011719, -1.1574667692184448], + [-6.683526039123535, 8.245296478271484], + [-6.488318920135498, 8.262948989868164], + [2.911999464035034, -4.445946216583252], + [8.922444343566895, -2.6328885555267334], + [3.5282785892486572, -3.197463035583496], + [-1.6055980920791626, 6.14347505569458], + [1.701920509338379, -7.237330436706543], + [-5.669980525970459, 8.049211502075195], + [-6.167089939117432, -1.548765778541565], + [2.9383175373077393, -6.177652835845947], + [-6.179984092712402, 7.6871018409729], + [3.2558929920196533, -5.040685653686523], + [-2.46355938911438, 1.8158137798309326], + [-2.9349963665008545, 2.842499256134033], + [0.797861635684967, -5.19224739074707], + [-5.057875633239746, -3.2471773624420166], + [4.716282367706299, -0.9631337523460388], + [-0.9946130514144897, 8.383713722229004], + [-2.6450459957122803, 2.5848004817962646], + [-2.0988218784332275, 1.3657337427139282], + [2.109463930130005, -8.627359390258789], + [-0.2836124300956726, 9.92599868774414], + [3.077751636505127, -4.634376525878906], + [2.462326765060425, -3.8999059200286865], + [7.97487211227417, -2.3132903575897217], + [8.358010292053223, -2.6644704341888428], + [-2.3799827098846436, 1.715804934501648], + [-2.9449961185455322, 6.6225385665893555], + [-2.636861562728882, 2.16080641746521], + [2.0330684185028076, -2.2319886684417725], + [6.072062015533447, -1.1445308923721313], + [2.0398995876312256, -5.290019989013672], + [0.5868650674819946, -6.2277421951293945], + [-4.886570930480957, -6.149043083190918], + [-0.3472789525985718, 9.345191955566406], + [1.1226060390472412, -7.141249179840088], + [-3.390125036239624, -1.4971423149108887], + [-5.466733932495117, 6.286661148071289], + [0.9910097718238831, -7.745507717132568], + [3.173842668533325, -5.000622272491455], + [8.486926078796387, -2.51998233795166], + [-3.5418522357940674, -1.5400452613830566], + [3.0300586223602295, -4.751071453094482], + [-3.5173075199127197, 4.79925537109375], + [-2.2031500339508057, 1.7812674045562744], + [6.426205158233643, -1.286128044128418], + [-5.916126728057861, -1.2706915140151978], + [2.1588618755340576, -4.5030903816223145], + [-0.1985498070716858, 9.954964637756348], + [2.8017690181732178, -4.276710033416748], + [2.2791967391967773, -6.245952606201172], + [-2.3296751976013184, 0.9216310977935791], + [4.850330352783203, -1.8263983726501465], + [-6.191877841949463, 7.455365180969238], + [3.3230111598968506, -4.953168869018555], + [3.186199426651001, -4.765356540679932], + [2.860483407974243, -4.5388641357421875], + [-2.520080804824829, 2.161700487136841], + [-4.226865291595459, -3.01355242729187], + [6.3580803871154785, -1.2600655555725098], + [2.149014472961426, 5.292264938354492], + [6.162442207336426, -1.093902349472046], + [1.8800796270370483, 5.196036338806152], + [-4.372067928314209, 5.09744119644165], + [-4.755996227264404, -2.994352102279663], + [-4.357170581817627, -1.6041125059127808], + [-4.473587512969971, 5.822006702423096], + [2.904472589492798, -4.600503921508789], + [-5.150829792022705, -1.4903980493545532], + [-7.54353666305542, -1.0260645151138306], + [7.069604873657227, -2.0950639247894287], + [-0.5530976057052612, 9.888379096984863], + [4.77925443649292, 7.158822536468506], + [-2.1645760536193848, 1.680290699005127], + [2.532914876937866, -4.4376678466796875], + [2.4899041652679443, -7.718767166137695], + [-2.4629971981048584, 0.24492895603179932], + [2.406482458114624, -4.328144550323486], + [8.779515266418457, -2.559033155441284], + [-0.3170173764228821, 10.235464096069336], + [-4.671428680419922, 3.400475263595581], + [-0.43309485912323, 11.035284996032715], + [-4.2569990158081055, 2.422698974609375], + [1.123306155204773, -5.617344856262207], + [-0.8267540335655212, 10.162141799926758], + [-2.6655261516571045, 6.724137783050537], + [-3.3082544803619385, -3.2104814052581787], + [-2.5909359455108643, 2.2944650650024414], + [6.449121475219727, -1.3563365936279297], + [2.4609487056732178, 0.9453827142715454], + [-5.1735310554504395, -3.3758645057678223], + [3.301424980163574, -5.318506240844727], + [9.261541366577148, -2.5518009662628174], + [-2.4576737880706787, 1.24747896194458], + [-1.2485780715942383, 1.4716386795043945], + [2.474684953689575, 0.887808084487915], + [1.9215600490570068, 5.647233963012695], + [-6.464566230773926, -2.4098572731018066], + [-1.7503185272216797, -1.8807724714279175], + [1.9940674304962158, 5.92297887802124], + [-4.6341423988342285, -2.555753707885742], + [0.7708664536476135, 4.134365558624268], + [2.3227248191833496, 1.1095373630523682], + [-5.041005611419678, 4.719701290130615], + [-6.108363628387451, 7.406513690948486], + [-0.4598380923271179, 11.592884063720703], + [-6.483603000640869, -2.3471434116363525], + [-0.259016215801239, 9.724879264831543], + [2.3956143856048584, -6.748364448547363], + [-2.959517240524292, 3.0669898986816406], + [9.270191192626953, -2.5590312480926514], + [5.609036445617676, 7.351895809173584], + [-1.51625657081604, 1.6198030710220337], + [-0.3079611659049988, 9.680875778198242], + [0.8023476004600525, 0.16268517076969147], + [5.622091770172119, -0.9679332375526428], + [-5.3587822914123535, 2.638744354248047], + [0.17739897966384888, 8.904684066772461], + [-4.084432125091553, -3.5037271976470947], + [-5.245827674865723, 3.6718156337738037], + [-0.6631714701652527, 8.948226928710938], + [-6.650245189666748, 7.793468475341797], + [7.982043743133545, -3.248682737350464], + [-4.938206195831299, 3.4974238872528076], + [-5.178686618804932, -0.7910903096199036], + [-2.898681402206421, -3.786952495574951], + [-6.726408958435059, -0.9963012933731079], + [-6.241392135620117, 8.35128402709961], + [0.6714292168617249, -0.471638023853302], + [1.8175022602081299, 5.076128959655762], + [2.491832971572876, -4.791706085205078], + [-4.8276047706604, -4.467342853546143], + [-6.229214668273926, -1.472825050354004], + [-4.856631755828857, -3.591388463973999], + [-2.57222318649292, -1.1856595277786255], + [-3.98547625541687, 4.830126762390137], + [0.5796334147453308, -5.087324142456055], + [3.1105477809906006, -4.898954391479492], + [-5.236748218536377, 5.4875335693359375], + [1.8728764057159424, 4.168582916259766], + [2.7157599925994873, 5.82889461517334], + [9.416264533996582, -2.6355855464935303], + [-5.955756187438965, 6.7195916175842285], + [-0.2360052466392517, 10.690070152282715], + [3.139634847640991, -4.702414512634277], + [5.218031406402588, -1.2077537775039673], + [2.720661163330078, -4.080521583557129], + [-6.713202953338623, -0.42807817459106445], + [2.8716018199920654, -8.519733428955078], + [3.373920202255249, -2.6479732990264893], + [-2.6342525482177734, -2.6189751625061035], + [-3.868635892868042, -4.655435085296631], + [-5.623505115509033, 7.820802211761475], + [5.486257076263428, -1.2245303392410278], + [-2.3072428703308105, 1.8332334756851196], + [-4.491521835327148, -0.2736470699310303], + [1.1214637756347656, -6.490922927856445], + [2.541306734085083, -4.051536560058594], + [-7.349936008453369, -2.0131077766418457], + [-4.198596000671387, -0.9700711369514465], + [-4.1021575927734375, -2.402996301651001], + [-4.746851444244385, -2.3803653717041016], + [-3.4601809978485107, -2.255779504776001], + [6.345561504364014, -0.9635320901870728], + [-5.688601016998291, -1.7963498830795288], + [-5.057538986206055, -3.608976125717163], + [-0.35721153020858765, 9.784185409545898], + [-0.22185879945755005, 9.966562271118164], + [-3.94292950630188, -2.3339684009552], + [-3.6841697692871094, 6.939467430114746], + [-8.523104667663574, -1.098453164100647], + [-5.399065971374512, 2.413339853286743], + [-1.7636421918869019, 1.1405521631240845], + [-5.636999607086182, 2.9214978218078613], + [-3.5806996822357178, -1.7353025674819946], + [6.045532703399658, -1.2494786977767944], + [-5.9403605461120605, 1.21417236328125], + [-2.1119213104248047, 1.934320092201233], + [-6.533473491668701, 7.9952287673950195], + [-5.948129177093506, -2.244107484817505], + [-6.7542595863342285, -1.9372888803482056], + [2.1696879863739014, -4.692798614501953], + [-6.144328594207764, -1.2577139139175415], + [2.2516918182373047, -4.764710903167725], + [6.370725154876709, 7.972020149230957], + [9.234920501708984, -2.738171339035034], + [3.0317461490631104, 1.1019071340560913], + [-0.29213130474090576, 9.825231552124023], + [-3.4200682640075684, 1.913311243057251], + [-7.834944248199463, -0.8250128030776978], + [-4.807191371917725, -3.4078361988067627], + [-1.633844256401062, -2.0094096660614014], + [-0.28302913904190063, 10.036002159118652], + [8.545275688171387, -2.3695895671844482], + [-1.108465552330017, 10.106183052062988], + [6.450390815734863, -1.7055270671844482], + [-2.563716411590576, 2.210113525390625], + [-3.707716703414917, 3.5583999156951904], + [-2.3162426948547363, 1.6502716541290283], + [-3.7648143768310547, -3.9200072288513184], + [-0.43978217244148254, -0.7508477568626404], + [-6.533321857452393, 0.17191946506500244], + [-0.1836259365081787, 9.42503547668457], + [3.293806552886963, 1.0701475143432617], + [2.909540891647339, -5.827066421508789], + [1.3133866786956787, -7.307541847229004], + [-6.942838191986084, -0.1353158950805664], + [-5.292655944824219, -3.2674357891082764], + [6.902126789093018, -1.4974936246871948], + [-1.802443504333496, 1.086312174797058], + [-2.8161814212799072, 2.915839910507202], + [8.48299503326416, -2.7221038341522217], + [-5.170241832733154, 2.5996015071868896], + [5.7712883949279785, -1.1891957521438599], + [-0.22013884782791138, -1.0163806676864624], + [-5.126171588897705, -3.0282042026519775], + [7.367833137512207, -1.7960656881332397], + [-1.2561661005020142, -0.759671151638031], + [-2.9631903171539307, 3.072225332260132], + [-3.812330961227417, 5.9570770263671875], + [-5.262850284576416, 2.090134859085083], + [-4.486518383026123, -3.8648264408111572], + [-0.3153197169303894, 10.723379135131836], + [2.4638094902038574, -4.045543193817139], + [-5.647724151611328, 7.579380989074707], + [-0.4347737431526184, 11.464876174926758], + [7.129981994628906, -2.3813257217407227], + [-0.30108731985092163, 11.175392150878906], + [-0.2885209918022156, 10.329065322875977], + [2.302706480026245, -3.384716272354126], + [-5.246066093444824, 2.3706037998199463], + [-4.4555253982543945, -2.661182403564453], + [7.884082317352295, -1.873206377029419], + [3.033738851547241, 6.506795883178711], + [-2.992352247238159, 3.036778450012207], + [-4.941413879394531, 6.157053470611572], + [-2.165843963623047, 2.7935190200805664], + [2.856480836868286, -4.572107315063477], + [-2.0547428131103516, 0.783815324306488], + [7.914557456970215, -1.9655768871307373], + [-5.523278713226318, -3.7700960636138916], + [-3.7702598571777344, 4.724242210388184], + [-4.101902484893799, -1.472704291343689], + [3.0174214839935303, -4.548130512237549], + [-8.03812026977539, -1.1956294775009155], + [-2.904618978500366, -0.803309977054596], + [-4.146365165710449, 5.2207441329956055], + [9.11297607421875, -2.8276660442352295], + [-0.8985506296157837, -2.5896379947662354], + [-1.5549135208129883, -2.383345603942871], + [8.715668678283691, -2.4469120502471924], + [-5.593409538269043, 4.687916278839111], + [5.253301620483398, -1.0560749769210815], + [-3.1162006855010986, 5.311988353729248], + [5.764579772949219, -1.0913360118865967], + [-5.092544078826904, -3.147861957550049], + [2.4394285678863525, -6.87349796295166], + [-7.131838798522949, -1.318800687789917], + [-2.511456251144409, 2.653470754623413], + [-0.43451106548309326, 10.0618314743042], + [8.661603927612305, -2.567896604537964], + [-5.592961311340332, -0.7869477272033691], + [6.860256195068359, -2.234588861465454], + [6.741122722625732, -5.642056465148926], + [-6.53112268447876, 7.565038204193115], + [-5.018031597137451, -1.4307243824005127], + [-4.479575157165527, -2.0333926677703857], + [2.364121198654175, -3.6411352157592773], + [-6.799011707305908, 9.050849914550781], + [2.973159074783325, -4.4675726890563965], + [6.618183135986328, -1.3942657709121704], + [5.726653575897217, -1.1983141899108887], + [-2.3139634132385254, 2.0184857845306396], + [7.529163360595703, -3.18918776512146], + [-2.153289556503296, 1.6652835607528687], + [-2.3474791049957275, 1.5455374717712402], + [-7.040525436401367, -1.7315700054168701], + [2.885765790939331, -4.39198637008667], + [1.8402677774429321, -8.685142517089844], + [2.849363088607788, -4.575255393981934], + [1.052404761314392, -4.856649398803711], + [1.6638195514678955, 1.3077658414840698], + [-5.664631366729736, -3.482081651687622], + [-4.597315788269043, -2.232769727706909], + [-5.8667521476745605, 2.1323068141937256], + [0.7914448976516724, -6.398920059204102], + [1.7262741327285767, -2.9034621715545654], + [-2.5488390922546387, 1.1100504398345947], + [1.686919927597046, -9.106806755065918], + [-5.019195556640625, -3.0195224285125732], + [-5.612496852874756, -1.4312678575515747], + [7.343164920806885, -1.556462287902832], + [-5.491832733154297, 6.390588283538818], + [-0.15061825513839722, 10.418745040893555], + [-0.20016396045684814, 9.577573776245117], + [1.3143305778503418, -8.31393051147461], + [-4.342579364776611, -2.4360692501068115], + [4.7115159034729, -2.8392558097839355], + [8.44787311553955, -2.357844114303589], + [-3.024599075317383, 4.908908843994141], + [5.807499408721924, -2.4708454608917236], + [1.6887081861495972, 5.269618988037109], + [-4.621469020843506, -1.6546053886413574], + [-0.12339932471513748, 9.996368408203125], + [-3.686992883682251, -1.3638051748275757], + [-0.36242836713790894, 10.873080253601074], + [-2.8019816875457764, -0.133711040019989], + [-7.162878513336182, 8.662857055664062], + [-4.859706401824951, 0.9119912385940552], + [7.763105869293213, -1.9775810241699219], + [-5.033822059631348, -3.712980031967163], + [3.202332019805908, -4.969625949859619], + [-5.330623149871826, -4.347216606140137], + [-4.356564044952393, -2.189673662185669], + [-2.657135248184204, -3.95452618598938], + [3.0327956676483154, -4.79835319519043], + [3.080828905105591, -4.6246337890625], + [8.717188835144043, -2.4176321029663086], + [-0.6327527165412903, 0.48814111948013306], + [-4.309770584106445, -2.7126963138580322], + [-2.4660239219665527, 4.575052738189697], + [-0.2584572434425354, 10.388477325439453], + [2.3621723651885986, -4.309715270996094], + [3.062258720397949, -4.780452251434326], + [2.395564317703247, -3.553741693496704], + [-2.9189887046813965, -3.7771902084350586], + [2.5651822090148926, -3.8616397380828857], + [-3.766392946243286, -2.7651937007904053], + [2.5279953479766846, -8.470438003540039], + [-5.321069240570068, -2.5860273838043213], + [-0.13854491710662842, 9.637825012207031], + [-4.177334785461426, -1.3866647481918335], + [-8.049554824829102, -0.47415268421173096], + [7.712852478027344, -2.9568028450012207], + [3.2032244205474854, -4.8431501388549805], + [-0.07117129117250443, 9.29818344116211], + [8.173006057739258, -2.2260777950286865], + [-3.19301438331604, -4.394097328186035], + [-2.983898162841797, -1.8203257322311401], + [-2.1167309284210205, 5.719399929046631], + [1.3584582805633545, 3.9369239807128906], + [-0.2340680956840515, 10.145694732666016], + [2.573014974594116, -6.266188621520996], + [-2.1851353645324707, 2.895420789718628], + [-5.431079387664795, -6.0519118309021], + [-0.3234786093235016, 8.006885528564453], + [6.165072441101074, -1.3695844411849976], + [1.5559431314468384, -8.104108810424805], + [3.0969185829162598, -5.043330192565918], + [0.17123478651046753, 1.1869072914123535], + [-5.5538177490234375, 1.6773360967636108], + [3.865508794784546, -3.217038869857788], + [-0.6604350209236145, 0.6795045137405396], + [1.9456908702850342, -7.752591133117676], + [1.40981924533844, -5.2954511642456055], + [-6.329692363739014, 6.47347354888916], + [-2.036497116088867, 1.0714077949523926], + [8.89030647277832, -2.493969202041626], + [-4.96216344833374, -1.911242127418518], + [9.184463500976562, -2.576169729232788], + [2.2387142181396484, 5.979518413543701], + [-6.856333255767822, -1.7890020608901978], + [3.1479556560516357, -4.716913223266602], + [-1.4377561807632446, 1.1577706336975098], + [2.214914560317993, 5.986728668212891], + [-3.2816383838653564, -2.3229196071624756], + [4.084873676300049, -1.2533488273620605], + [3.015860080718994, -4.645021915435791], + [2.101595163345337, 5.923623085021973], + [3.416987657546997, -3.4666802883148193], + [1.626826524734497, 5.45924186706543], + [2.1800410747528076, 5.6401824951171875], + [9.212029457092285, -2.575887441635132], + [-4.146596908569336, -2.2394886016845703], + [-4.672244071960449, -3.063566207885742], + [-0.17624682188034058, 10.224983215332031], + [-5.620875358581543, 2.254647970199585], + [-3.102313995361328, -0.9352954626083374], + [5.516233444213867, -1.1159086227416992], + [-2.2800395488739014, 4.794904708862305], + [-5.088602542877197, -3.4844441413879395], + [-2.303459644317627, 1.7822442054748535], + [2.5742526054382324, 5.730480194091797], + [1.7168843746185303, 1.0375438928604126], + [6.316431045532227, -1.5294485092163086], + [-1.889836311340332, 2.5144731998443604], + [3.0359866619110107, -4.558156967163086], + [7.812525272369385, -1.948842167854309], + [2.5745468139648438, 6.094411849975586], + [-4.189254283905029, 5.5435285568237305], + [-0.29443037509918213, 9.368196487426758], + [-2.6033921241760254, 1.3633815050125122], + [-5.795959949493408, -1.0955712795257568], + [-2.6823582649230957, -4.671673774719238], + [-0.15441936254501343, -1.0439460277557373], + [8.636300086975098, -2.301949977874756], + [1.1664602756500244, -5.954586982727051], + [3.8886911869049072, 6.156940460205078], + [7.192959785461426, -1.7524924278259277], + [0.35351425409317017, 4.923638343811035], + [3.1788177490234375, -4.756017684936523], + [-0.41844040155410767, 11.766597747802734], + [-2.773808002471924, 4.982320308685303], + [-0.0628095343708992, 9.921937942504883], + [-0.5828502774238586, 11.598705291748047], + [-4.952373027801514, 6.719173908233643], + [-5.662482738494873, 6.467089653015137], + [-3.347071409225464, 6.207328796386719], + [0.9685593247413635, 9.87725830078125], + [2.179590940475464, 5.2603912353515625], + [-2.8615379333496094, -4.74557638168335], + [-2.2096829414367676, 2.2961301803588867], + [-0.4117606282234192, 10.749008178710938], + [-2.1103501319885254, -0.817481517791748], + [-6.208621025085449, 4.716281414031982], + [2.370302200317383, 5.3263139724731445], + [4.18639612197876, 6.660029411315918], + [-1.8889341354370117, 1.5410428047180176], + [10.261013984680176, -2.8235156536102295], + [-3.9173734188079834, 0.06885206699371338], + [-6.034790515899658, 4.963359355926514], + [-3.379612684249878, -3.0128989219665527], + [-5.214409351348877, -3.2842233180999756], + [-4.038783073425293, 0.6070570945739746], + [-0.1603947877883911, 10.117633819580078], + [-7.38588285446167, 9.025348663330078], + [2.2037312984466553, 5.637235164642334], + [-4.111509799957275, -2.480846881866455], + [-4.782905101776123, -3.5265448093414307], + [8.063790321350098, -2.23052978515625], + [7.967636585235596, -2.1257691383361816], + [-0.47099965810775757, 9.837907791137695], + [7.867889404296875, -3.8245365619659424], + [-4.26479434967041, 0.0708361268043518], + [-4.733065128326416, 2.77051043510437], + [2.7856204509735107, -4.778610706329346], + [5.874260425567627, -5.191921234130859], + [7.5647478103637695, -1.848446011543274], + [-0.2786760926246643, -1.0662438869476318], + [-0.43644410371780396, 11.189078330993652], + [-5.181643962860107, 4.573550224304199], + [-3.350769519805908, 4.718994617462158], + [0.2639930248260498, -5.837420463562012], + [-2.87851881980896, 2.077310800552368], + [1.2555804252624512, -3.209834337234497], + [-4.621788024902344, -3.042351484298706], + [-4.837369441986084, -2.92082142829895], + [-0.3511473536491394, 10.24711799621582], + [2.424260377883911, 0.5305424332618713], + [-6.441547393798828, 8.101642608642578], + [1.3876370191574097, 5.039638519287109], + [-2.1899197101593018, 2.117145299911499], + [-3.332890033721924, 5.304677963256836], + [0.20852035284042358, 9.549615859985352], + [2.8506343364715576, -4.734560966491699], + [-4.308485507965088, 2.4807372093200684], + [-0.1503942906856537, -0.8156585693359375], + [9.002073287963867, -2.496967077255249], + [-5.743227481842041, -4.02046012878418], + [1.0690560340881348, 5.611835479736328], + [-4.984920501708984, 4.2058820724487305], + [2.9452736377716064, -4.39194917678833], + [8.305009841918945, -2.5372583866119385], + [2.358626127243042, 4.16493558883667], + [-0.2323020100593567, 9.526368141174316], + [-1.238342046737671, -2.489422082901001], + [-3.272777557373047, 6.3204755783081055], + [-3.3229362964630127, -2.9039247035980225], + [6.028034687042236, -1.286495327949524], + [2.4754018783569336, -5.40073299407959], + [3.199025869369507, -4.887303829193115], + [-5.037862777709961, -3.870088815689087], + [-0.328097939491272, 9.086009979248047], + [-2.024305582046509, 5.576022624969482], + [-7.465324878692627, 9.39838981628418], + [-0.11490360647439957, -3.825042486190796], + [-0.9716393351554871, 8.748579978942871], + [-4.363780498504639, 3.7429611682891846], + [0.05438315123319626, 9.448290824890137], + [-5.545497417449951, -3.6559512615203857], + [9.186141967773438, -2.5370075702667236], + [-0.6221261620521545, 10.003791809082031], + [2.5446670055389404, 3.9804484844207764], + [9.164597511291504, -2.5484542846679688], + [-2.5580689907073975, 0.14685392379760742], + [-5.290388584136963, 2.4070804119110107], + [-5.961073398590088, -3.027212381362915], + [-4.459187030792236, -4.773262977600098], + [-2.292419672012329, -2.2813055515289307], + [-7.054201602935791, -1.3454729318618774], + [-4.469227313995361, 6.087882995605469], + [2.305525302886963, 4.609659671783447], + [-4.3506293296813965, 5.449831962585449], + [-3.3730876445770264, -5.342284679412842], + [9.540300369262695, -2.5256383419036865], + [-1.8238335847854614, 2.1813764572143555], + [-4.660646915435791, 5.1744232177734375], + [-0.31843605637550354, -0.6042412519454956], + [-3.9175689220428467, -4.048616409301758], + [2.5703046321868896, -4.374736785888672], + [9.958338737487793, -2.7647287845611572], + [-5.995192050933838, -1.89016592502594], + [-5.638862133026123, 8.426555633544922], + [0.7218629717826843, -6.562129020690918], + [9.937186241149902, -2.7539479732513428], + [2.972299337387085, 6.16014289855957], + [-3.766840696334839, 1.294602632522583], + [-3.9339702129364014, -3.6674139499664307], + [8.54654598236084, -2.547853946685791], + [1.3539619445800781, -5.978557586669922], + [-4.7893242835998535, -3.157055139541626], + [-4.186495780944824, 3.58359956741333], + [2.4191806316375732, -3.7980294227600098], + [-0.14651840925216675, 10.431529998779297], + [-7.903573513031006, -0.3393608331680298], + [5.608278274536133, -1.309771180152893], + [-6.168097972869873, 2.2592697143554688], + [2.0737757682800293, -5.188054084777832], + [0.6529706120491028, 0.11830946803092957], + [-3.7411048412323, -1.4538816213607788], + [-0.24072033166885376, 9.658690452575684], + [-5.2487311363220215, -3.4642765522003174], + [-0.2715897560119629, 9.646303176879883], + [-3.82085919380188, -4.420963764190674], + [-2.6461801528930664, -4.454959392547607], + [-2.8246192932128906, -2.6323118209838867], + [-0.24842923879623413, 10.588796615600586], + [8.74452018737793, -2.3546407222747803], + [-5.441853046417236, -2.2148420810699463], + [9.767348289489746, -2.7505438327789307], + [-2.581575870513916, 1.9349620342254639], + [2.867004156112671, -4.42080020904541], + [-4.426027774810791, -0.9372634887695312], + [1.7496867179870605, -6.838403701782227], + [4.468164443969727, -3.2034013271331787], + [1.9369995594024658, -5.22707986831665], + [-4.8850274085998535, -3.2239251136779785], + [-3.4376213550567627, -4.411684513092041], + [2.8039863109588623, 4.444746971130371], + [2.190627336502075, -6.467574119567871], + [-0.19550421833992004, -1.929251790046692], + [-5.618304252624512, -4.193286895751953], + [-5.423102855682373, -2.1207497119903564], + [3.013800859451294, 6.46886682510376], + [1.1824284791946411, -5.807612895965576], + [-1.491261601448059, -0.7542082071304321], + [2.4120540618896484, -3.8946444988250732], + [-3.5517842769622803, -2.4135351181030273], + [-6.118173122406006, -1.185179352760315], + [2.975909471511841, -5.7173261642456055], + [1.7805426120758057, 1.4934157133102417], + [-4.321903705596924, 4.4991455078125], + [-2.4954586029052734, 2.046175956726074], + [-5.63035249710083, 3.327880859375], + [-3.1009974479675293, 4.582915306091309], + [-2.246922254562378, 2.082503080368042], + [-1.6512641906738281, -0.39604583382606506], + [-0.04082126170396805, -0.14541928470134735], + [2.0024020671844482, -6.670758247375488], + [0.20570963621139526, 10.015653610229492], + [2.7346131801605225, -4.145864486694336], + [-2.587139368057251, -1.3984556198120117], + [-5.133875370025635, -2.801487684249878], + [-3.8852150440216064, -1.2290675640106201], + [-3.7346084117889404, -3.119420289993286], + [-0.4335870146751404, 10.939505577087402], + [1.6296130418777466, 5.262835502624512], + [1.6427247524261475, -6.032642841339111], + [-4.006242752075195, 3.236956834793091], + [-0.30854445695877075, 9.05196762084961], + [3.233591318130493, -4.9896721839904785], + [2.442359209060669, -6.181079864501953], + [-2.768096923828125, -1.6054197549819946], + [1.048445224761963, 4.973464012145996], + [-4.271280765533447, -1.0542716979980469], + [9.657611846923828, -2.6923470497131348], + [-0.17220467329025269, -1.4244388341903687], + [-5.9365668296813965, 3.349529981613159], + [5.365880489349365, 7.626763820648193], + [2.543867588043213, -7.574373722076416], + [-4.499288558959961, 5.568750381469727], + [1.9174970388412476, 4.7785444259643555], + [-0.7330912947654724, 9.047605514526367], + [0.6516152620315552, -1.045422077178955], + [-0.3521929383277893, 10.514029502868652], + [4.382827281951904, 6.963630199432373], + [-4.34376335144043, -2.343329668045044], + [4.751344203948975, 1.92988121509552], + [7.1911091804504395, -3.8652193546295166], + [-6.060074329376221, 8.082098007202148], + [-2.101414918899536, 2.371364116668701], + [8.499246597290039, -2.2378275394439697], + [3.6796274185180664, -0.7407616376876831], + [1.6739439964294434, 1.6735916137695312], + [10.90074348449707, -2.9826180934906006], + [-5.1670241355896, -3.326380491256714], + [2.213218927383423, -4.534702777862549], + [-1.159602165222168, -0.6326831579208374], + [2.6155242919921875, -4.267382621765137], + [-4.49214506149292, -3.2843713760375977], + [-2.2202017307281494, 2.8540074825286865], + [-0.4873841404914856, 9.443408966064453], + [-4.249197483062744, 0.7103878259658813], + [-6.410666465759277, 5.115510940551758], + [-4.830806732177734, 6.052946090698242], + [-6.473067760467529, 8.086970329284668], + [-3.127882242202759, 3.396676540374756], + [-3.5149121284484863, -1.4302083253860474], + [1.8664028644561768, 5.077107906341553], + [0.12076746672391891, 10.566707611083984], + [3.1375768184661865, -4.6987504959106445], + [-3.1014063358306885, -0.469001829624176], + [-0.5929897427558899, 9.824234962463379], + [1.0919989347457886, 0.6828407645225525], + [-7.240614414215088, 9.073659896850586], + [-4.9877800941467285, -2.030364990234375], + [0.26945334672927856, -0.28618577122688293], + [-4.2836222648620605, -3.98848557472229], + [-5.573194980621338, -2.006087303161621], + [2.9956724643707275, -4.5035552978515625], + [7.232923984527588, -2.294494152069092], + [-0.19797757267951965, -1.6249510049819946], + [2.364462375640869, -4.327548027038574], + [-2.064378499984741, 2.0456912517547607], + [-4.683936595916748, -1.6330479383468628], + [-0.164381206035614, 9.856720924377441], + [-2.7000443935394287, -4.658891677856445], + [-5.177097797393799, -1.6239053010940552], + [2.772845983505249, -4.355853080749512], + [1.8047852516174316, -8.350761413574219], + [-0.18578791618347168, 10.498475074768066], + [-4.721399784088135, 6.1787567138671875], + [-4.820735454559326, 3.7572169303894043], + [-2.258814573287964, 2.6876637935638428], + [-0.23964816331863403, 10.672075271606445], + [2.937298059463501, -4.41815710067749], + [-4.4956889152526855, -3.3039982318878174], + [6.788863182067871, -1.944851040840149], + [-4.47544527053833, 5.962250709533691], + [2.9710283279418945, -4.889575958251953], + [3.209630012512207, -4.801257133483887], + [-0.11360049992799759, -0.4473263919353485], + [7.861597061157227, -2.714397430419922], + [-4.204184055328369, -3.522247791290283], + [-6.569204330444336, -0.4245264530181885], + [-5.3412394523620605, -3.397752523422241], + [-0.6258955001831055, 9.960723876953125], + [-0.44385987520217896, 8.893793106079102], + [-5.420344829559326, 2.3527231216430664], + [1.4774969816207886, 0.13121357560157776], + [-0.16098183393478394, 10.762199401855469], + [0.8573594093322754, -0.06389179825782776], + [-3.837484121322632, -2.8841731548309326], + [-3.463045358657837, 2.6602604389190674], + [-0.34633296728134155, 10.7677583694458], + [3.1638402938842773, -4.998636245727539], + [-1.6152297258377075, 0.643774151802063], + [-2.652958869934082, -3.3906261920928955], + [7.582192420959473, -1.836581826210022], + [-2.5771148204803467, -2.936781644821167], + [2.1497867107391357, -6.492436408996582], + [7.324553966522217, -1.6988331079483032], + [1.8877012729644775, 4.687306880950928], + [1.535143494606018, 4.997588634490967], + [-0.2763429284095764, 9.879274368286133], + [2.9114949703216553, -4.427248001098633], + [-5.090620994567871, 3.454740047454834], + [7.513434886932373, -2.5120604038238525], + [-0.47695499658584595, 10.576062202453613], + [-4.220007419586182, 6.646336078643799], + [-0.06873238831758499, 10.035696029663086], + [-4.956949234008789, -2.988657236099243], + [1.5527019500732422, -5.333843231201172], + [-3.397362232208252, -4.054887771606445], + [-6.344340801239014, 1.8287925720214844], + [1.5987012386322021, -7.783342361450195], + [1.1844453811645508, -7.689713478088379], + [8.159187316894531, -2.138720750808716], + [5.44148063659668, -1.2838329076766968], + [-4.233881950378418, -2.986818313598633], + [-3.690927743911743, 5.034232139587402], + [5.499902248382568, 7.193360328674316], + [-5.826266765594482, 4.995583534240723], + [-2.5892648696899414, 2.3155837059020996], + [-4.043312072753906, -1.2055577039718628], + [3.0355844497680664, -4.556798934936523], + [1.5165786743164062, -4.902399063110352], + [-3.71256947517395, -4.439877033233643], + [-4.759426593780518, 5.7217583656311035], + [-2.6232047080993652, 2.8540358543395996], + [-4.687748432159424, -0.6616055965423584], + [2.2658939361572266, -8.34717845916748], + [-3.0126242637634277, 1.9095478057861328], + [2.9647810459136963, -4.597174644470215], + [1.6804563999176025, 4.910953044891357], + [0.5028271675109863, -6.395930290222168], + [-0.3802037239074707, 9.851703643798828], + [-4.802863121032715, 6.470530033111572], + [1.7673053741455078, -8.99592399597168], + [-0.4076688885688782, 11.545853614807129], + [-5.296535015106201, -3.3044755458831787], + [-4.143775463104248, -1.5170879364013672], + [-5.403425693511963, 4.86822509765625], + [0.6154677271842957, 5.080334663391113], + [4.139663219451904, -1.655474066734314], + [2.448762893676758, -7.850067138671875], + [-4.263925075531006, -2.5426735877990723], + [7.739758491516113, -1.893865704536438], + [-6.287202835083008, 6.125139236450195], + [-5.72752571105957, 3.9351985454559326], + [1.8406591415405273, -3.3353159427642822], + [-0.41335785388946533, 10.265707015991211], + [-0.46377915143966675, 10.603328704833984], + [-3.330085277557373, 6.815374374389648], + [6.077559947967529, -1.2669214010238647], + [5.6386003494262695, 7.674496650695801], + [-5.052671909332275, -4.170945167541504], + [2.0845401287078857, 1.677414059638977], + [6.756856441497803, -5.329232692718506], + [0.5442929267883301, -0.5556091666221619], + [-3.703075647354126, 3.448568105697632], + [9.311820030212402, -2.558330774307251], + [-8.167404174804688, -0.6805822849273682], + [0.06101875752210617, 10.087751388549805], + [1.103801965713501, 10.140869140625], + [-2.815765142440796, 4.95550012588501], + [5.806102752685547, -1.4200669527053833], + [1.861759901046753, -8.809257507324219], + [-0.5103287100791931, 8.825492858886719], + [-2.3752243518829346, 2.0517115592956543], + [-4.5635151863098145, -5.113208770751953], + [-2.7951691150665283, -1.9624149799346924], + [-7.021326065063477, 8.447446823120117], + [2.3664560317993164, -7.101658821105957], + [8.392119407653809, -2.2728500366210938], + [-5.165245532989502, -2.1621739864349365], + [1.8568671941757202, 5.084523677825928], + [-4.104928970336914, -2.8071439266204834], + [2.2551379203796387, -2.8561389446258545], + [-4.771469593048096, -3.3130905628204346], + [-5.076366901397705, 0.41851964592933655], + [1.3346599340438843, -6.529237270355225], + [-4.383113861083984, -2.705852746963501], + [-3.9359548091888428, 4.179625034332275], + [-4.789926052093506, -1.454431176185608], + [-0.4292445182800293, 11.406009674072266], + [-6.289242267608643, 4.815770149230957], + [2.4715664386749268, -3.879695177078247], + [3.031161069869995, -4.695461273193359], + [0.000599883496761322, -0.5248530507087708], + [-0.3686608672142029, 10.6673583984375], + [1.844947338104248, -8.261234283447266], + [-2.753216505050659, 1.4037805795669556], + [-3.8317508697509766, -3.308504343032837], + [7.522037029266357, -3.953157424926758], + [-5.147308826446533, 3.3718273639678955], + [-5.505679607391357, 6.5272440910339355], + [-2.2527740001678467, 2.89859676361084], + [-2.115877866744995, 1.4033029079437256], + [-5.016336917877197, -3.799551248550415], + [-0.3811059594154358, -0.9562041759490967], + [-6.089607238769531, 2.842853546142578], + [-5.680022716522217, -1.0792995691299438], + [-0.34609705209732056, 10.58318042755127], + [-0.422920286655426, 9.011625289916992], + [2.2255618572235107, -6.8858160972595215], + [-6.378139495849609, 8.181150436401367], + [2.4604718685150146, -5.0882062911987305], + [-4.49689245223999, 3.6913273334503174], + [-5.025492191314697, -3.7617785930633545], + [3.2235841751098633, -5.237521648406982], + [2.136249542236328, -7.723401069641113], + [3.015376567840576, -4.562280654907227], + [2.708956480026245, -6.429339408874512], + [-0.2544037699699402, 10.372308731079102], + [0.3858572840690613, 8.031270027160645], + [0.7643530368804932, -6.427167892456055], + [-2.4308502674102783, -1.408474087715149], + [-6.023787021636963, 2.710676431655884], + [-0.20842450857162476, 10.285764694213867], + [-4.274040222167969, 2.911647081375122], + [-5.025950908660889, -3.200852394104004], + [-5.811992645263672, 2.054647207260132], + [-2.0754082202911377, 2.0086629390716553], + [1.636343240737915, -5.556562423706055], + [8.894753456115723, -2.4004743099212646], + [-0.19943201541900635, 9.699453353881836], + [6.756115436553955, -1.6010915040969849], + [6.1904377937316895, -1.3939266204833984], + [-3.5137441158294678, -1.0260690450668335], + [-3.9923741817474365, -2.605707883834839], + [-0.39452672004699707, 10.621243476867676], + [2.7090303897857666, -4.024499893188477], + [9.956899642944336, -2.7211310863494873], + [-4.7377190589904785, 3.381962537765503], + [-5.9338250160217285, 2.182971715927124], + [-2.3318209648132324, 1.6084855794906616], + [-2.2160205841064453, 1.8042728900909424], + [6.971761226654053, -1.8341110944747925], + [8.52556324005127, -2.5266146659851074], + [-0.23243790864944458, 10.086413383483887], + [0.5585963726043701, -0.7731910347938538], + [-7.4716010093688965, -0.3427608013153076], + [8.585963249206543, -2.3980541229248047], + [-0.28678786754608154, 9.307646751403809], + [-2.3187649250030518, 2.280344009399414], + [-5.157052993774414, 6.381361484527588], + [1.3951218128204346, -5.839536666870117], + [-5.396276950836182, 6.364230155944824], + [-0.1141468957066536, 9.497238159179688], + [2.4771623611450195, 3.95597767829895], + [-3.348897695541382, -1.3685024976730347], + [-4.744349479675293, -3.426945447921753], + [2.349703311920166, -3.6175622940063477], + [-6.4855170249938965, 7.8680949211120605], + [2.889125347137451, -4.42240571975708], + [1.4896628856658936, -3.077312469482422], + [1.6419203281402588, 1.8018919229507446], + [-5.435773849487305, 1.1139765977859497], + [-3.4849231243133545, 5.369209289550781], + [-4.009435176849365, -2.3565924167633057], + [-3.3670878410339355, -4.99018669128418], + [7.99163293838501, -2.5183959007263184], + [2.2115652561187744, -6.338850975036621], + [8.10221004486084, -2.494290828704834], + [2.346418619155884, -6.542694568634033], + [7.690109729766846, -4.45706844329834], + [0.25626036524772644, -0.2960561513900757], + [1.8151748180389404, -7.9104790687561035], + [-3.8844571113586426, 3.3803234100341797], + [0.9577389359474182, 5.163816452026367], + [8.464401245117188, -2.5338032245635986], + [-2.1844565868377686, -3.6060330867767334], + [2.664372205734253, 6.085238456726074], + [-4.860708713531494, -2.560563087463379], + [-5.304206371307373, -4.199784755706787], + [-4.816728115081787, -2.2161030769348145], + [-6.4260640144348145, 8.139970779418945], + [-0.38925594091415405, 11.664474487304688], + [-3.5624992847442627, 5.1878509521484375], + [-5.080403804779053, -3.782304525375366], + [7.217393398284912, -1.939231514930725], + [-5.6136393547058105, 6.115940093994141], + [-5.690395832061768, 5.482093811035156], + [-0.07864160090684891, 5.587778091430664], + [2.2758231163024902, -7.227904319763184], + [-4.9829888343811035, -2.5441017150878906], + [-5.489854335784912, -2.8346807956695557], + [-4.350437641143799, 5.278258323669434], + [-0.17292118072509766, 7.438900947570801], + [-4.063910484313965, -1.3969446420669556], + [-6.0336594581604, 2.317201852798462], + [-4.261464595794678, -1.5424671173095703], + [-5.79465913772583, -2.8623037338256836], + [2.790339231491089, 1.5112258195877075], + [-2.9865400791168213, 6.83017110824585], + [2.208704948425293, 5.603381156921387], + [4.787574291229248, 6.261107444763184], + [-5.050450801849365, 4.164781093597412], + [-1.8638098239898682, 1.845142126083374], + [-4.093841075897217, -1.7422677278518677], + [0.7154527306556702, -6.262304782867432], + [3.0243313312530518, -2.1870501041412354], + [2.772261381149292, -6.6109209060668945], + [-0.5339841246604919, 11.178675651550293], + [1.0583693981170654, -6.5099287033081055], + [-3.353271722793579, 0.8459776043891907], + [6.504980087280273, -3.2059781551361084], + [-0.13048237562179565, -0.6387825012207031], + [1.6989905834197998, -8.262825012207031], + [-4.835567951202393, 6.9480133056640625], + [-4.234900951385498, -4.581945896148682], + [2.405769109725952, -4.084061622619629], + [3.086423635482788, -4.661267280578613], + [3.522660493850708, -3.3643152713775635], + [-5.147220134735107, -2.2368357181549072], + [2.671536922454834, -4.376465320587158], + [9.629854202270508, -2.6839232444763184], + [-0.46185213327407837, -0.9230464696884155], + [-3.8502299785614014, 4.3845672607421875], + [-6.5946879386901855, 2.347609758377075], + [5.472095012664795, -3.5563642978668213], + [-2.0638444423675537, 2.359697103500366], + [1.735135793685913, 0.979866623878479], + [2.464425802230835, -7.4132184982299805], + [2.4277143478393555, 6.2151641845703125], + [-4.73525857925415, -2.5902202129364014], + [-2.904877185821533, -4.6582841873168945], + [-4.409945487976074, -1.607735276222229], + [-5.015223503112793, -0.5967546701431274], + [1.5628063678741455, 0.4722292423248291], + [-5.719991207122803, 2.415937662124634], + [-2.708221435546875, 0.1331624984741211], + [9.069817543029785, -2.5346176624298096], + [0.7978096008300781, -0.17572864890098572], + [-4.634721279144287, -3.9375736713409424], + [8.960793495178223, -2.5412845611572266], + [3.419023036956787, -4.324428558349609], + [-4.511194229125977, 0.8450887203216553], + [-2.444842576980591, 1.6033687591552734], + [4.275969505310059, -2.374924898147583], + [3.671408176422119, 6.638119697570801], + [8.861784934997559, -2.363532781600952], + [-4.949736595153809, -1.0257339477539062], + [0.37168824672698975, -5.710724830627441], + [1.9142032861709595, -9.554000854492188], + [2.1117875576019287, -4.190686225891113], + [5.159116268157959, -2.6574792861938477], + [-4.289688587188721, -2.3758797645568848], + [-0.3667829632759094, 10.7493896484375], + [-4.5503387451171875, -2.457489490509033], + [-7.286459445953369, -0.7660607099533081], + [1.9273560047149658, 5.283705711364746], + [-4.0554304122924805, 1.6240061521530151], + [6.971004962921143, -1.4661635160446167], + [6.966125011444092, -2.726416826248169], + [-4.711925506591797, -1.7806674242019653], + [-7.8470683097839355, -1.4467945098876953], + [1.306744933128357, 0.7097594738006592], + [2.4938724040985107, -7.458616256713867], + [1.9339876174926758, 3.7086570262908936], + [-4.71777868270874, 5.351634979248047], + [9.936771392822266, -2.719313383102417], + [-1.6933225393295288, -0.9805948734283447], + [2.8668315410614014, -4.3205342292785645], + [-4.745631694793701, 0.7700095772743225], + [3.945974588394165, -0.8967621326446533], + [2.1631219387054443, 5.921521186828613], + [-3.898693084716797, -3.4490487575531006], + [0.9614467024803162, -7.088841438293457], + [-0.21988719701766968, 10.140631675720215], + [-0.16668149828910828, -0.8743007183074951], + [2.9637625217437744, -4.471405982971191], + [-7.77528715133667, -0.5378466844558716], + [0.5639873147010803, -5.19104528427124], + [-7.134735584259033, -1.0285364389419556], + [3.0925705432891846, -4.63795280456543], + [1.9268717765808105, -4.40043306350708], + [-3.936530828475952, -2.5142881870269775], + [2.109600782394409, -8.641273498535156], + [-4.871732234954834, 6.395552635192871], + [-4.732362270355225, -2.4330711364746094], + [-2.3638739585876465, 0.7971155643463135], + [2.474792957305908, -3.8145558834075928], + [3.1486127376556396, -4.784682750701904], + [3.02160906791687, -4.603911399841309], + [-0.06456554681062698, 7.938281536102295], + [-4.382654666900635, -4.356080532073975], + [3.0249836444854736, -6.443737030029297], + [2.8015615940093994, -4.259057998657227], + [2.5598299503326416, -4.031440258026123], + [-0.49375635385513306, 11.255390167236328], + [-3.4914724826812744, 3.060037851333618], + [-3.7200934886932373, 7.08033561706543], + [10.136070251464844, -2.814157247543335], + [1.4047653675079346, 1.012865662574768], + [-0.6087926030158997, -0.3999086618423462], + [1.8494555950164795, 1.625148892402649], + [-0.5681129097938538, 11.205059051513672], + [-7.416995048522949, -1.126989722251892], + [-5.180699825286865, 7.98042106628418], + [-2.9265859127044678, -0.2723959684371948], + [-6.485887050628662, 7.58253288269043], + [-0.3309428095817566, 5.665422439575195], + [0.050657592713832855, -0.6945174932479858], + [-5.446171283721924, 1.8841592073440552], + [-2.275498628616333, 1.7186415195465088], + [5.075289249420166, 7.397610664367676], + [-2.0123136043548584, 2.173464059829712], + [-4.9610490798950195, 4.542024612426758], + [-2.575477361679077, 2.6872239112854004], + [2.9679901599884033, -4.6133222579956055], + [6.3308587074279785, -0.9397869110107422], + [-0.7933070063591003, -0.21731194853782654], + [-6.021270751953125, 2.0511274337768555], + [1.1878621578216553, -6.111979007720947], + [6.14687967300415, -3.8675811290740967], + [1.1351542472839355, -4.032492160797119], + [-2.0912857055664062, 2.8392112255096436], + [1.2228741645812988, -6.209779739379883], + [-5.045849800109863, -3.540165424346924], + [-3.357822895050049, 3.6248090267181396], + [-2.837414264678955, 5.027554512023926], + [-7.087021350860596, 8.673063278198242], + [5.622025012969971, 7.286191463470459], + [-5.538877010345459, -2.2804648876190186], + [0.8890349268913269, -6.254204750061035], + [-7.054022789001465, 0.24690651893615723], + [-4.52080774307251, 4.9799299240112305], + [-1.4439795017242432, -1.0717107057571411], + [-5.976010799407959, 7.224278926849365], + [-1.0286989212036133, 8.843459129333496], + [2.173689842224121, 5.624412536621094], + [-1.9706050157546997, 5.64777135848999], + [-6.75698709487915, 8.12360954284668], + [2.720303773880005, -4.277752876281738], + [-2.6448872089385986, 2.586803674697876], + [-4.871098518371582, -3.9753332138061523], + [1.9348223209381104, -6.822288513183594], + [-0.9734972715377808, -0.14993861317634583], + [6.963846206665039, -1.6554741859436035], + [-4.908450603485107, -2.7978193759918213], + [1.65243661403656, -5.976625442504883], + [-4.890750408172607, -3.2907228469848633], + [-2.9504966735839844, 2.583895683288574], + [3.257683515548706, -4.863720417022705], + [-4.551137447357178, -2.8063790798187256], + [-5.446630954742432, 4.210372447967529], + [-2.1778361797332764, 2.039863109588623], + [2.2151217460632324, -3.2476553916931152], + [-5.5315260887146, -3.333322286605835], + [-6.416758060455322, 7.984190940856934], + [-0.18679523468017578, 9.67668342590332], + [-4.334574222564697, 5.517003059387207], + [-4.966481685638428, 6.1959123611450195], + [-5.272762298583984, -3.9167673587799072], + [-5.033609867095947, -3.0240814685821533], + [-0.5029662847518921, 11.303247451782227], + [2.369392156600952, -8.250524520874023], + [-4.443535327911377, 7.086636543273926], + [-6.065938949584961, 5.458285331726074], + [1.9041814804077148, -9.34463882446289], + [-3.87817120552063, -2.744277238845825], + [-5.805784702301025, 1.409237265586853], + [-6.386723518371582, 1.004807949066162], + [2.4631845951080322, -4.400434494018555], + [-4.898287296295166, -2.543790340423584], + [1.9860472679138184, 4.708714008331299], + [-4.719418048858643, -1.914981484413147], + [-2.9667422771453857, -1.5416051149368286], + [-7.969925403594971, 9.777120590209961], + [-5.960188388824463, -1.1323354244232178], + [-5.938797950744629, 6.963911533355713], + [7.960845470428467, -2.227494955062866], + [-5.959339618682861, 1.8262933492660522], + [-2.968045949935913, -2.8395376205444336], + [1.3520420789718628, 5.712950706481934], + [-3.841158628463745, 3.5840752124786377], + [1.6625771522521973, 5.360768795013428], + [3.027310371398926, -4.712696552276611], + [-2.9076082706451416, 2.8247523307800293], + [-0.845798671245575, -0.49039319157600403], + [-2.023535966873169, 0.0493469201028347], + [2.962944507598877, -5.5756378173828125], + [3.0354228019714355, -4.554017066955566], + [-5.991980075836182, 3.2731151580810547], + [-1.1563804149627686, 0.6243807077407837], + [-0.5440889000892639, 10.012767791748047], + [2.033444404602051, 5.406153678894043], + [2.1243460178375244, 0.5198488235473633], + [-6.233784198760986, 5.131061553955078], + [-4.546763896942139, -3.4766480922698975], + [-7.071691989898682, 0.36961305141448975], + [-7.851261615753174, -1.9383995532989502], + [2.3805453777313232, 5.321209907531738], + [-6.202607154846191, -1.4961858987808228], + [-1.8560223579406738, 5.102066993713379], + [0.34020930528640747, 9.48968505859375], + [-4.691751480102539, 7.378283500671387], + [-4.694434642791748, -3.52848744392395], + [1.9604465961456299, -3.159541368484497], + [-4.000784397125244, 0.08248400688171387], + [2.7887377738952637, -4.3573408126831055], + [3.0580241680145264, 6.48822021484375], + [8.033406257629395, -2.041239023208618], + [1.1400084495544434, -6.319368362426758], + [4.477077960968018, 6.743824005126953], + [-5.881405830383301, 1.7629103660583496], + [-5.723336696624756, 6.670287132263184], + [-0.02286256104707718, -0.6432549953460693], + [1.6502490043640137, 5.295571327209473], + [1.9725937843322754, -7.420462608337402], + [1.6957730054855347, 5.101333141326904], + [-8.502484321594238, 10.36378002166748], + [-3.8974533081054688, -2.7734861373901367], + [-0.42753732204437256, 11.70635986328125], + [-2.390514612197876, -2.7601969242095947], + [9.111332893371582, -2.5241196155548096], + [2.6319525241851807, -4.095554351806641], + [-5.082729816436768, -3.1500937938690186], + [-5.384562015533447, -2.6185007095336914], + [1.5713629722595215, 5.259344577789307], + [-2.8102943897247314, 2.3477957248687744], + [-4.386287689208984, -2.9950931072235107], + [-5.198678016662598, 6.825941562652588], + [-1.217495322227478, 0.9630502462387085], + [-1.7486602067947388, -1.3133177757263184], + [-7.676435947418213, -1.346068024635315], + [-3.2321994304656982, -1.0988997220993042], + [3.1272060871124268, -4.925547122955322], + [-5.3729119300842285, -1.2341333627700806], + [3.1999311447143555, -4.782087326049805], + [-1.9106178283691406, 1.4716657400131226], + [-5.092901706695557, -3.4293296337127686], + [-5.525247097015381, -2.7496392726898193], + [1.3854575157165527, -0.3910406827926636], + [1.617012619972229, 5.507942199707031], + [-2.4058523178100586, 1.4769959449768066], + [-4.708383083343506, -2.825256586074829], + [-3.8310587406158447, 2.9408531188964844], + [-2.0436224937438965, 2.4381420612335205], + [-2.3068597316741943, 2.2034919261932373], + [1.7677217721939087, 5.498392581939697], + [0.3449144959449768, -5.701656818389893], + [-4.638936996459961, 7.462960720062256], + [-0.6000478863716125, 5.788039207458496], + [-5.583893775939941, 2.1433496475219727], + [-0.28377407789230347, 11.283435821533203], + [5.5361199378967285, -1.174050211906433], + [-4.038326263427734, 6.6843976974487305], + [2.39357590675354, 0.9150667190551758], + [1.9587984085083008, 1.2475687265396118], + [2.348299264907837, 6.331164836883545], + [3.3756015300750732, -5.359046936035156], + [-2.6304211616516113, 0.5794035792350769], + [1.5321159362792969, -7.000335693359375], + [0.23276573419570923, 10.20150375366211], + [-4.04351806640625, 5.644342422485352], + [2.833974599838257, -4.377359867095947], + [-3.9244282245635986, 3.8001034259796143], + [-0.5514172911643982, 8.865530967712402], + [-4.251369953155518, -2.3914148807525635], + [8.642461776733398, -3.4099364280700684], + [0.9322977662086487, -6.336421966552734], + [-2.1068456172943115, 2.6616837978363037], + [-2.383143901824951, 2.1046297550201416], + [-6.391357898712158, 7.709514141082764], + [3.187406301498413, -6.956664085388184], + [-1.1118452548980713, -2.2839951515197754], + [3.035737991333008, -4.5517120361328125], + [3.8964474201202393, 6.712912559509277], + [-4.443401336669922, -4.1634368896484375], + [-1.6755247116088867, 1.5025979280471802], + [-4.153674125671387, -2.503206729888916], + [1.6172020435333252, 5.311642646789551], + [-3.5064308643341064, -3.656860589981079], + [-4.901989459991455, -4.313544273376465], + [-2.988262414932251, -4.094466686248779], + [-4.183468341827393, 4.466984272003174], + [2.379981279373169, 5.667041778564453], + [2.3427443504333496, 5.403054237365723], + [1.9556663036346436, -9.483158111572266], + [-8.20169448852539, -1.0672968626022339], + [-3.9244282245635986, -5.353617191314697], + [7.6280646324157715, -1.9168635606765747], + [-5.362897872924805, -1.9600917100906372], + [1.5998179912567139, 0.11161038279533386], + [-0.04523969441652298, 8.15444278717041], + [8.15056324005127, -2.065258502960205], + [-0.2426409125328064, 9.566350936889648], + [1.7618571519851685, 5.091961860656738], + [-4.592710494995117, 7.307776927947998], + [-0.3060927987098694, 10.031139373779297], + [-5.958908557891846, -5.9515767097473145], + [-3.2558071613311768, -2.3356966972351074], + [2.0544233322143555, -9.57874870300293], + [-2.8301868438720703, 6.565845489501953], + [3.041351556777954, 5.524636745452881], + [-2.7133872509002686, -0.11079737544059753], + [5.900782585144043, -1.881786584854126], + [3.0552432537078857, -4.603250503540039], + [-0.5936600565910339, -0.8283165693283081], + [-0.5415797829627991, -1.7318278551101685], + [-0.3855779767036438, 9.91940689086914], + [1.7132892608642578, -0.2505654990673065], + [-4.470726013183594, -1.8732305765151978], + [-2.280150890350342, 1.1913200616836548], + [2.6048409938812256, -7.457839012145996], + [2.3031399250030518, -3.5731492042541504], + [6.05006742477417, -2.262458562850952], + [-0.3247581124305725, 9.28461742401123], + [7.005960941314697, -1.7331957817077637], + [-2.0543482303619385, 2.005049705505371], + [-3.081183671951294, 6.934905052185059], + [2.9727327823638916, -4.480713844299316], + [-8.778366088867188, -0.9665019512176514], + [2.75836443901062, 6.112244606018066], + [0.9299102425575256, -0.06915071606636047], + [2.339345693588257, 0.6862068176269531], + [-2.8843233585357666, 3.0357577800750732], + [-4.813882350921631, 4.838291168212891], + [-4.300858497619629, 2.801628828048706], + [-4.738386154174805, -4.2129034996032715], + [5.234891414642334, -1.1303683519363403], + [1.8885736465454102, 5.300571441650391], + [9.042806625366211, -2.541619062423706], + [2.4996817111968994, -4.239930152893066], + [-4.3301568031311035, 7.108122825622559], + [2.1607463359832764, -5.783738136291504], + [2.6434600353240967, 5.342988014221191], + [-4.301431179046631, -1.2484747171401978], + [-0.33055251836776733, 10.518718719482422], + [-7.503020763397217, 1.5888371467590332], + [6.88643217086792, -1.3216465711593628], + [7.721175193786621, -1.9838932752609253], + [3.032714366912842, -4.553888320922852], + [-4.888713836669922, -3.151944398880005], + [3.140496015548706, -4.971591949462891], + [-5.700381278991699, 7.713900566101074], + [-4.426944255828857, -3.0283279418945312], + [-3.895364999771118, -2.138286828994751], + [-8.332517623901367, 10.108442306518555], + [0.5882821083068848, -1.0303159952163696], + [-6.0941877365112305, -1.4870455265045166], + [-0.42012161016464233, 11.125299453735352], + [8.597321510314941, -2.5761046409606934], + [2.343331813812256, 0.7857063412666321], + [1.3433291912078857, -4.900271415710449], + [-5.301018714904785, 7.095876216888428], + [4.027399063110352, 6.680673122406006], + [-2.778897523880005, -4.0821967124938965], + [2.20652174949646, -7.676524639129639], + [-4.809281826019287, -1.749231219291687], + [2.561842679977417, -4.476095199584961], + [2.472088575363159, 1.496420979499817], + [2.57137131690979, -3.9742281436920166], + [2.0878965854644775, 5.421319484710693], + [-2.3467228412628174, 2.423462152481079], + [1.2781977653503418, -0.05989411845803261], + [2.169792652130127, 5.356196403503418], + [7.737146854400635, -1.8886771202087402], + [0.9149754047393799, -6.656973838806152], + [-0.01567436009645462, -0.7926857471466064], + [1.98447585105896, 5.693764686584473], + [2.6925997734069824, -4.08966064453125], + [-0.3809855282306671, -0.8322849273681641], + [2.863210439682007, -4.418560981750488], + [-1.936019778251648, 2.3099544048309326], + [-0.2412322759628296, 9.671682357788086], + [-2.365283966064453, 1.5513113737106323], + [-0.2764645218849182, 9.797544479370117], + [3.0598981380462646, -4.6295857429504395], + [6.024611949920654, -1.30979323387146], + [0.5909028053283691, 4.792072296142578], + [-3.0599606037139893, -3.5463340282440186], + [7.934300899505615, -2.0901830196380615], + [0.5191990733146667, -0.8796612024307251], + [-4.863777160644531, -4.520684242248535], + [2.901085615158081, -4.400732040405273], + [-4.998284816741943, 3.5619394779205322], + [-4.565149307250977, -2.7587170600891113], + [-3.8734395503997803, -3.4297432899475098], + [-7.125480651855469, -2.1595709323883057], + [-1.1294643878936768, 5.5794267654418945], + [8.906998634338379, -2.7139675617218018], + [-0.3361210823059082, 10.389005661010742], + [-6.1511006355285645, -1.9336645603179932], + [-0.20210415124893188, 9.578990936279297], + [-4.118201732635498, -0.9934520721435547], + [-4.750354766845703, -3.473191499710083], + [2.2089478969573975, -8.229976654052734], + [5.1106085777282715, 7.569684982299805], + [-2.5937321186065674, 2.0878002643585205], + [-0.4600380063056946, 10.504292488098145], + [2.3264331817626953, -5.484005928039551], + [-0.345622181892395, 11.187481880187988], + [3.4674088954925537, -2.7113709449768066], + [-2.7787299156188965, 0.6793209910392761], + [-6.7675909996032715, -1.1341840028762817], + [-3.883892297744751, -2.9667606353759766], + [-4.973796367645264, 3.0705113410949707], + [-3.5417397022247314, -1.404037356376648], + [2.0386273860931396, -4.217179298400879], + [-2.377572536468506, 0.35034269094467163], + [-2.4013772010803223, 0.9398874044418335], + [-7.883301258087158, -1.4138644933700562], + [2.4647340774536133, -11.590705871582031], + [-0.511330783367157, -1.3964465856552124], + [-2.5537991523742676, -0.3672938346862793], + [-1.2776027917861938, 5.412309646606445], + [-0.15086865425109863, -0.3575158715248108], + [-4.437260150909424, -4.158576965332031], + [2.9357197284698486, -4.433027267456055], + [1.1367729902267456, 0.1861499398946762], + [-2.258043050765991, 0.29686254262924194], + [7.390089511871338, -1.8803926706314087], + [2.2517993450164795, -8.001150131225586], + [2.1902763843536377, -3.9441680908203125], + [8.818065643310547, -2.5482866764068604], + [2.394225835800171, -7.305150508880615], + [2.2895596027374268, -5.296526908874512], + [1.8877580165863037, -5.858566761016846], + [-6.973384380340576, 8.451963424682617], + [-4.164005279541016, 7.070943832397461], + [-0.1648576855659485, 10.101072311401367], + [3.0682742595672607, 0.9500305652618408], + [-2.2206854820251465, 1.7629142999649048], + [-6.934171676635742, -1.6823625564575195], + [2.8715999126434326, -4.327614784240723], + [-0.28988391160964966, 10.104198455810547], + [-2.2993178367614746, -2.3761096000671387], + [-3.6175386905670166, 4.466091156005859], + [-2.3500165939331055, 1.0013129711151123], + [-2.5530378818511963, 0.9033172130584717], + [0.7791491746902466, -6.496615409851074], + [2.5495715141296387, -3.7746379375457764], + [6.719236373901367, -2.777127742767334], + [-5.51723051071167, 3.820849895477295], + [-5.698962688446045, 1.4718282222747803], + [3.0712523460388184, 1.3695530891418457], + [-2.347872495651245, -1.898392677307129], + [-0.2606688141822815, 9.956954956054688], + [2.5395612716674805, -4.217491149902344], + [3.4634251594543457, -3.216189384460449], + [8.291501998901367, -2.265538215637207], + [3.214447021484375, 6.2960405349731445], + [-4.362429618835449, 1.6574963331222534], + [1.5849123001098633, -3.700714349746704], + [3.22318959236145, -4.835326194763184], + [-0.03234199434518814, -0.6231265068054199], + [3.231806993484497, -5.633467197418213], + [-3.568805456161499, -2.8116226196289062], + [2.9488093852996826, -4.638141632080078], + [8.381467819213867, -2.526226282119751], + [-1.2554205656051636, -0.2670595943927765], + [-2.5128047466278076, 1.7103238105773926], + [-2.196937322616577, 0.935947835445404], + [3.1141557693481445, -4.718111515045166], + [2.462003231048584, 5.635125160217285], + [-0.1628512144088745, 10.209305763244629], + [-6.5545334815979, -1.5344659090042114], + [-0.6001413464546204, 11.69222354888916], + [-5.687902927398682, -2.578117609024048], + [-4.70419454574585, -0.3980960249900818], + [0.4894915223121643, -6.193057060241699], + [-3.0876529216766357, -5.027251243591309], + [-4.221046447753906, 3.5229313373565674], + [7.961365222930908, -2.04017972946167], + [1.9353277683258057, -9.312623977661133], + [-1.1717888116836548, -1.3009861707687378], + [1.6835782527923584, 5.121569633483887], + [-4.969218730926514, 3.470424175262451], + [-1.7459893226623535, -1.4824095964431763], + [-0.3712763786315918, -1.6855862140655518], + [-0.38475894927978516, 9.480325698852539], + [-0.6426037549972534, 9.02414321899414], + [3.7412362098693848, 7.44459342956543], + [-6.693228244781494, 1.979220986366272], + [-2.4645698070526123, 1.4156020879745483], + [-4.400201320648193, -0.7305464148521423], + [-3.153424024581909, 3.070643663406372], + [-4.276607036590576, -3.275010824203491], + [-2.490783929824829, 1.0312526226043701], + [8.60166072845459, -2.344808340072632], + [2.1328203678131104, -5.7228803634643555], + [-0.21472007036209106, 3.122415065765381], + [-3.0778472423553467, -3.1620657444000244], + [1.6123524904251099, -3.170281171798706], + [-1.2832129001617432, 0.24578282237052917], + [-0.44514375925064087, 10.317349433898926], + [-4.9606451988220215, -1.044069766998291], + [1.8961352109909058, -7.5227789878845215], + [3.535141706466675, 6.3876051902771], + [0.11108507961034775, 4.859317302703857], + [-4.238905429840088, -4.3889360427856445], + [-2.7818257808685303, -4.503968238830566], + [-0.9662863612174988, 3.3088724613189697], + [8.427268981933594, -2.40997576713562], + [1.6795902252197266, 0.12789368629455566], + [0.3746984004974365, 0.019108574837446213], + [2.7182188034057617, -4.270999908447266], + [5.688612461090088, -3.6510322093963623], + [1.4711521863937378, -7.124063968658447], + [-3.8328588008880615, -1.50832200050354], + [-3.648743152618408, -4.125472068786621], + [5.65903902053833, -1.1809080839157104], + [-1.784792423248291, 1.7736923694610596], + [-2.6136105060577393, 4.670863151550293], + [-5.4749650955200195, 2.1894583702087402], + [-3.7293343544006348, 5.768575191497803], + [5.62755012512207, -2.225795030593872], + [2.1107332706451416, -5.242077350616455], + [3.156135320663452, -4.840215682983398], + [1.27632474899292, -5.500819206237793], + [1.9119272232055664, -9.175519943237305], + [6.500527858734131, -2.644784688949585], + [-0.4974459409713745, -2.4066944122314453], + [-4.6753973960876465, -2.906209707260132], + [-3.863219976425171, -2.7386791706085205], + [-0.19900190830230713, -1.49474036693573], + [-0.42713791131973267, 9.899755477905273], + [-2.406949043273926, 1.5433051586151123], + [-4.694024085998535, 6.203840255737305], + [2.3274402618408203, -8.899741172790527], + [-3.9817230701446533, -1.612113356590271], + [-0.2506314516067505, 9.643028259277344], + [-5.728726863861084, 2.5626556873321533], + [0.2653343081474304, -0.3835026025772095], + [-4.667861461639404, -3.5517423152923584], + [-1.601309061050415, -2.998004674911499], + [-0.28464680910110474, 9.577804565429688], + [2.6478846073150635, -4.980237007141113], + [-0.1618019938468933, 10.332263946533203], + [-0.3965197205543518, 10.113040924072266], + [0.08980917185544968, 8.685262680053711], + [-3.9477200508117676, -1.7950197458267212], + [-5.27614164352417, 6.4470014572143555], + [-2.4338133335113525, 1.8791091442108154], + [-3.8121871948242188, -2.864452362060547], + [-5.8467535972595215, -2.5995476245880127], + [-3.1147537231445312, 3.1479084491729736], + [-5.697421073913574, -1.938141942024231], + [-7.052526950836182, -0.9586641192436218], + [-5.697869777679443, -2.0812294483184814], + [1.5715466737747192, -8.087890625], + [-4.334761619567871, -2.8101322650909424], + [-1.3271856307983398, -0.45947855710983276], + [-3.269757032394409, 6.488437175750732], + [-0.33081603050231934, 9.5974760055542], + [3.1222970485687256, -4.368562698364258], + [-3.4571940898895264, 2.5069921016693115], + [-2.5376689434051514, 2.0110301971435547], + [-2.1908233165740967, 0.03317129239439964], + [-5.107663631439209, -1.9735487699508667], + [-4.808812618255615, -2.319732904434204], + [-6.011326789855957, 5.403944969177246], + [-4.463751316070557, -0.1385677456855774], + [-3.533113718032837, -4.8692708015441895], + [-4.538448333740234, -2.1890347003936768], + [-4.406561851501465, -2.9194962978363037], + [0.6887226700782776, -7.001008987426758], + [3.1498749256134033, -4.721712112426758], + [2.7006146907806396, -4.000921726226807], + [2.124276876449585, -3.3839595317840576], + [-5.518941402435303, -3.167058229446411], + [-3.53604793548584, -2.5508391857147217], + [-4.700283527374268, -2.0226759910583496], + [3.0652759075164795, -5.890131950378418], + [2.536959648132324, -6.701906681060791], + [-3.1839029788970947, -2.1969480514526367], + [-3.7983274459838867, -1.1311076879501343], + [-5.243530750274658, -2.1980926990509033], + [-4.198829174041748, -2.8103229999542236], + [-5.3750996589660645, -2.836949110031128], + [-6.1386027336120605, 7.707880020141602], + [1.7835984230041504, -5.209184646606445], + [-5.000056743621826, -0.21507924795150757], + [-6.035467624664307, -2.6040968894958496], + [-4.598998546600342, -2.440835952758789], + [-1.427642822265625, 5.969661712646484], + [-4.825180530548096, 1.1893973350524902], + [-4.458621025085449, -1.3095041513442993], + [1.8819235563278198, -3.2262282371520996], + [-8.744028091430664, -0.5476388931274414], + [-4.654573440551758, -3.1625964641571045], + [2.034698724746704, -8.0582275390625], + [-4.743328094482422, -2.331441879272461], + [0.2853519916534424, -0.5893215537071228], + [0.004527322947978973, 9.908096313476562], + [-4.667993545532227, -0.7763811349868774], + [-2.6816887855529785, 1.789962649345398], + [2.4960358142852783, -5.994460582733154], + [0.3161084055900574, -0.5326775312423706], + [-2.4681291580200195, 1.9993911981582642], + [2.820194721221924, -7.156096458435059], + [-2.983043909072876, 0.47962337732315063], + [-4.088928699493408, -3.570655584335327], + [-5.0982842445373535, -3.1028757095336914], + [1.2068209648132324, -4.456109046936035], + [7.216898441314697, -4.512086391448975], + [-0.7712039351463318, -0.3998633623123169], + [-4.870631694793701, 0.8880002498626709], + [-0.6198709607124329, 12.06109619140625], + [-0.30116719007492065, 9.71324348449707], + [-0.7160090804100037, 11.068105697631836], + [-3.9885809421539307, -0.9956143498420715], + [-2.4749205112457275, -1.9450899362564087], + [-3.0027048587799072, 2.0831100940704346], + [-4.35159969329834, -6.075887203216553], + [8.589231491088867, -2.370143175125122], + [-6.650872230529785, 8.107611656188965], + [-3.4889259338378906, -3.568580389022827], + [1.5792409181594849, -6.664700508117676], + [-4.60429048538208, 7.149744510650635], + [2.19875168800354, -6.646034240722656], + [2.008260488510132, 6.066529273986816], + [-6.304753303527832, 7.655110836029053], + [2.486006736755371, 5.202422142028809], + [-0.7671964764595032, 5.488243103027344], + [2.5218217372894287, 1.1428884267807007], + [-1.8615949153900146, -1.1530147790908813], + [9.057915687561035, -2.5419723987579346], + [2.8518550395965576, 4.621123790740967], + [-5.422236919403076, 3.3596231937408447], + [-0.2014821171760559, 9.88949966430664], + [-6.1718010902404785, 5.03987455368042], + [1.9106826782226562, 0.6752057671546936], + [6.629937171936035, -1.5907249450683594], + [-2.3458964824676514, 0.15136486291885376], + [-4.631526470184326, -3.275538682937622], + [-0.16424793004989624, 9.836804389953613], + [-8.449848175048828, -0.7610385417938232], + [7.7703857421875, -1.944248914718628], + [-6.23723030090332, 1.6424261331558228], + [-1.9180502891540527, 1.701555848121643], + [-4.7358784675598145, -2.7820823192596436], + [-1.6140027046203613, 4.83086633682251], + [-6.912134647369385, 8.372373580932617], + [-4.360506057739258, -2.0091023445129395], + [-4.428206920623779, -1.126747727394104], + [0.8092321753501892, -6.203804969787598], + [9.631665229797363, -2.6224305629730225], + [0.9490817189216614, -6.209806442260742], + [-2.7057363986968994, -1.9783190488815308], + [1.9705989360809326, -2.0562238693237305], + [4.914161682128906, 7.296648979187012], + [-1.5609207153320312, 1.0167100429534912], + [-0.27878499031066895, 9.61003303527832], + [-3.809070348739624, -1.1006947755813599], + [7.179924488067627, -2.048927068710327], + [0.845172107219696, 0.37094539403915405], + [2.9013020992279053, -4.613372802734375], + [-2.625656843185425, 1.7222851514816284], + [-1.3830831050872803, 0.9933825731277466], + [5.430209159851074, -1.703507900238037], + [0.10637199133634567, 10.167449951171875], + [-5.661406993865967, 7.74945068359375], + [-4.7307820320129395, 3.088132381439209], + [-2.6681902408599854, -1.2467767000198364], + [-5.399749279022217, 6.766523361206055], + [2.446852445602417, -3.49263072013855], + [1.548659086227417, -6.326767921447754], + [-3.6312804222106934, -1.6472594738006592], + [-4.476655960083008, 5.728913307189941], + [1.4572527408599854, 2.273953437805176], + [-1.642646312713623, 0.17178116738796234], + [-2.2929282188415527, 0.22202306985855103], + [-2.4034523963928223, 1.866675615310669], + [-3.8699452877044678, 0.003801342099905014], + [1.7989907264709473, 5.355528831481934], + [-6.6432929039001465, 8.156740188598633], + [-5.556845664978027, 7.749073505401611], + [2.205991506576538, -3.4879441261291504], + [-1.934645175933838, 2.1776816844940186], + [1.2746243476867676, -5.4312639236450195], + [-5.856238842010498, 7.892533302307129], + [5.952388286590576, -3.16591477394104], + [-4.720010280609131, -2.5255582332611084], + [0.5342626571655273, -0.19868984818458557], + [-5.115096569061279, 5.039981842041016], + [-3.209484815597534, -3.4706714153289795], + [-3.560967206954956, 2.733102560043335], + [1.4876618385314941, 5.30682897567749], + [-6.83059549331665, -1.3515145778656006], + [7.397098541259766, -2.397024154663086], + [7.142558574676514, -1.6669833660125732], + [1.178905725479126, -6.165014743804932], + [5.141831398010254, -1.516108751296997], + [2.0606656074523926, -2.923264265060425], + [-2.451953649520874, 3.238816022872925], + [-0.2260156273841858, 6.410904407501221], + [-1.026950716972351, -1.1135178804397583], + [3.7496814727783203, -3.297218084335327], + [-2.385113000869751, 3.0439517498016357], + [-2.0900628566741943, 1.614047646522522], + [-3.9287173748016357, 3.912604808807373], + [-6.105473041534424, -4.5834221839904785], + [4.4101152420043945, 7.803528785705566], + [2.707345485687256, -4.515931129455566], + [9.457574844360352, -2.5899622440338135], + [-7.063441276550293, -1.758320689201355], + [1.611069679260254, 2.5262482166290283], + [-8.724390029907227, -0.6714391708374023], + [-3.881484270095825, 5.465124130249023], + [-6.520352363586426, -0.8957734107971191], + [-1.2964973449707031, -0.7763094305992126], + [2.3811488151550293, 5.926748275756836], + [-5.471649169921875, 6.352908611297607], + [-8.726006507873535, -0.7600702047348022], + [1.511961579322815, -6.892603874206543], + [2.704087018966675, -4.099773406982422], + [8.588817596435547, -2.6153621673583984], + [-0.4335402846336365, 11.115179061889648], + [-1.121646761894226, 7.977825164794922], + [-5.004429340362549, -3.695707321166992], + [2.3286166191101074, -6.40764045715332], + [3.0212438106536865, -4.537771224975586], + [8.363394737243652, -2.232447624206543], + [-3.5707318782806396, -3.841559886932373], + [3.203343152999878, -5.529821395874023], + [1.436918020248413, 5.685105800628662], + [2.3370940685272217, 5.141609191894531], + [0.5175773501396179, -0.617824912071228], + [3.2948005199432373, -4.933858871459961], + [0.5913035273551941, 4.596919059753418], + [-4.745316505432129, 6.69583797454834], + [-3.910295248031616, 7.241180419921875], + [-5.888739109039307, 8.30463981628418], + [7.972480297088623, -2.561556816101074], + [7.13985013961792, -1.6806796789169312], + [-2.7692620754241943, 6.20433235168457], + [8.394804954528809, -2.7201151847839355], + [-4.909952640533447, -3.0227744579315186], + [0.10484396666288376, 9.069608688354492], + [-2.2150604724884033, 2.76108455657959], + [-2.234588146209717, 1.137433648109436], + [2.993968963623047, -5.174429416656494], + [-2.7439754009246826, 2.5315611362457275], + [-4.288794994354248, 6.625477313995361], + [0.07061877101659775, -1.26799738407135], + [-4.627971649169922, -0.5877694487571716], + [-5.279068946838379, 0.29806846380233765], + [-3.4346084594726562, -3.278381586074829], + [-3.8615148067474365, -1.4996249675750732], + [-1.5512832403182983, -1.023996353149414], + [7.755142688751221, -1.96648371219635], + [2.695369005203247, -6.076165199279785], + [-4.090652942657471, -3.386171579360962], + [-4.89807653427124, -3.1846792697906494], + [-5.443877696990967, -3.893486261367798], + [-0.9552523493766785, 0.1668900102376938], + [2.5426881313323975, 1.094549298286438], + [5.202574729919434, -1.466415286064148], + [-5.363568305969238, 6.790987014770508], + [-5.048479080200195, -0.5660452246665955], + [3.075047731399536, -6.9259443283081055], + [-4.639293670654297, -2.176905632019043], + [5.8156843185424805, -1.2733300924301147], + [-5.552189350128174, 4.953290939331055], + [-5.123426914215088, 3.8376147747039795], + [-5.927473545074463, 7.932085037231445], + [-5.452282905578613, 8.384746551513672], + [-0.2142440676689148, 10.468774795532227], + [2.8467917442321777, -5.900214195251465], + [2.4202964305877686, 0.8610950708389282], + [-5.436896800994873, 3.45054292678833], + [2.1490213871002197, 4.438957214355469], + [-5.850461483001709, -1.9791743755340576], + [-4.719945907592773, 3.7435250282287598], + [-3.6189839839935303, -2.731257677078247], + [0.5988250374794006, -0.37698444724082947], + [-5.051311016082764, -2.586717128753662], + [1.8220157623291016, 5.561553001403809], + [1.6413421630859375, -3.4071531295776367], + [3.0115489959716797, -4.52194356918335], + [-3.6708807945251465, -0.9757159352302551], + [-4.792953968048096, -2.6451525688171387], + [-2.876110792160034, 2.4438791275024414], + [-3.752284288406372, -0.2731415033340454], + [-4.384363651275635, -2.050358533859253], + [-6.478094577789307, 3.2161550521850586], + [2.3976664543151855, -7.583611488342285], + [-6.718738079071045, 8.308095932006836], + [-0.27147161960601807, 10.435647010803223], + [1.365079402923584, -7.570847511291504], + [8.800419807434082, -2.45024037361145], + [-3.7432944774627686, -1.5947810411453247], + [-0.5069456696510315, 9.818567276000977], + [-1.530978798866272, 0.8643407821655273], + [-3.685457944869995, -4.728892803192139], + [-2.6421542167663574, -1.3434849977493286], + [2.210362672805786, 0.4644874334335327], + [5.208864688873291, -4.280058860778809], + [-1.6297615766525269, 6.136505126953125], + [3.0685174465179443, -4.837965965270996], + [-3.780956506729126, -2.157033920288086], + [2.387157678604126, -3.6778640747070312], + [2.0045011043548584, 5.204301834106445], + [-4.322973251342773, 6.571422576904297], + [0.5617888569831848, 6.608196258544922], + [5.774223804473877, -0.6878869533538818], + [-1.6651394367218018, -3.660595417022705], + [-3.6273324489593506, 5.298247337341309], + [-0.15916019678115845, 10.664972305297852], + [-4.952939510345459, 7.039085388183594], + [-5.751495361328125, 6.058136463165283], + [-1.940771222114563, 6.206853866577148], + [-1.747186303138733, 0.5783393383026123], + [2.126844882965088, 0.6002455949783325], + [-2.354124069213867, 3.3423712253570557], + [6.131885528564453, -3.1840031147003174], + [3.0251057147979736, -4.560439586639404], + [1.7459816932678223, -5.654773712158203], + [3.03056263923645, -6.851060390472412], + [-3.991664409637451, -1.795670986175537], + [-0.0915793851017952, -0.6356253027915955], + [-3.419589042663574, 3.3312337398529053], + [1.1335594654083252, 5.17549991607666], + [-7.158759593963623, 8.995195388793945], + [0.37088528275489807, -0.351087749004364], + [-0.2189549207687378, -1.4605351686477661], + [-2.5583813190460205, 2.0134451389312744], + [-5.230496883392334, 7.646203994750977], + [8.635197639465332, -2.3007118701934814], + [-3.4389617443084717, 3.4608120918273926], + [2.7234153747558594, -4.371762752532959], + [2.591684341430664, -7.681056022644043], + [3.2414095401763916, -5.213802337646484], + [-5.270289897918701, -2.884995698928833], + [-4.384671211242676, -2.169691801071167], + [8.924171447753906, -2.2589361667633057], + [-3.9927687644958496, 6.172842979431152], + [2.7852580547332764, -4.274240016937256], + [-7.16736364364624, -1.79448664188385], + [8.937309265136719, -2.5322678089141846], + [-2.0553407669067383, 5.472376346588135], + [1.0718743801116943, 0.29978471994400024], + [3.1539463996887207, -4.729219436645508], + [2.038304328918457, -6.3870463371276855], + [-5.158355236053467, -3.550792694091797], + [-3.534846782684326, -1.8682082891464233], + [-5.589339733123779, -2.8120012283325195], + [3.0551955699920654, -5.179834842681885], + [-2.2120041847229004, 5.616549015045166], + [-7.393652439117432, -0.6313861608505249], + [3.058631658554077, -4.627949237823486], + [-5.4931416511535645, -3.4282171726226807], + [6.370563983917236, -1.346967339515686], + [2.9987058639526367, -4.834666728973389], + [-7.253216743469238, 8.866226196289062], + [4.977112293243408, 6.968592643737793], + [-4.687571048736572, -2.3498475551605225], + [-2.8291895389556885, -2.349775791168213], + [-4.769199848175049, 3.654797315597534], + [1.530334711074829, 1.2821009159088135], + [1.4964442253112793, -8.255481719970703], + [2.026604652404785, -8.754021644592285], + [3.119703769683838, -4.6748809814453125], + [-0.2837674021720886, 10.11745548248291], + [-5.335066318511963, -2.8877432346343994], + [-5.2858147621154785, 4.089338302612305], + [-2.396723747253418, 2.363466501235962], + [1.3947710990905762, -6.762078285217285], + [-2.824587345123291, -0.9189484119415283], + [-4.344446182250977, -1.6345666646957397], + [-4.878512859344482, 4.003868103027344], + [5.933261871337891, -1.5434916019439697], + [1.2622723579406738, 0.4462679326534271], + [5.203256130218506, -2.476534605026245], + [-7.025666236877441, -0.6030574440956116], + [6.1112494468688965, -3.4036753177642822], + [-7.955963611602783, -1.24143385887146], + [8.730550765991211, -2.3915867805480957], + [1.5956943035125732, -4.440954208374023], + [-2.7034671306610107, -4.06880521774292], + [1.5883171558380127, 5.593447208404541], + [-4.229468822479248, -3.224534273147583], + [-2.621457099914551, 2.0401289463043213], + [-1.8615498542785645, 0.03826236352324486], + [-5.426742076873779, -2.974480628967285], + [-6.0115580558776855, 7.4888129234313965], + [2.9419658184051514, -4.421350002288818], + [-0.1604607105255127, 9.207877159118652], + [-5.301647663116455, -3.4412481784820557], + [8.84980297088623, -2.3846347332000732], + [-3.9654276371002197, -2.218679428100586], + [-2.845625162124634, 2.7192442417144775], + [-8.445930480957031, -1.0225380659103394], + [-0.9664072394371033, -1.3757071495056152], + [1.8915205001831055, 6.126909255981445], + [3.1697869300842285, -4.740155220031738], + [-0.11795956641435623, 10.334844589233398], + [-2.6867284774780273, -1.754758358001709], + [-2.3000404834747314, 5.753080368041992], + [-5.500270366668701, -0.698714554309845], + [1.2303080558776855, -6.536318778991699], + [-2.4085841178894043, 2.2356767654418945], + [2.827730178833008, -4.3649582862854], + [7.4478373527526855, -5.181952476501465], + [-2.4939534664154053, 2.1285924911499023], + [-3.8999195098876953, 3.2064080238342285], + [1.5872660875320435, -3.128828525543213], + [0.8087030053138733, -5.793534755706787], + [-6.251986980438232, 7.789215087890625], + [2.9625673294067383, -4.4675068855285645], + [6.794528484344482, -4.036035060882568], + [-0.47849899530410767, 11.223636627197266], + [-4.073771953582764, -3.5944364070892334], + [-6.9198079109191895, -1.8972651958465576], + [-4.919365406036377, 6.898322582244873], + [8.941412925720215, -2.5151827335357666], + [-0.37591513991355896, -0.7339645624160767], + [-3.058204412460327, -3.9810543060302734], + [-5.160343647003174, -3.3352487087249756], + [7.656487464904785, -1.7778518199920654], + [0.8046208024024963, 0.6593377590179443], + [-1.9967191219329834, 2.559122085571289], + [-4.829415321350098, 3.6379878520965576], + [-2.74250864982605, 2.8633155822753906], + [2.127366542816162, 4.880222320556641], + [-0.5237773656845093, 9.328319549560547], + [-4.776383876800537, -3.843123197555542], + [-2.2018868923187256, 1.8472486734390259], + [2.129081964492798, -9.408393859863281], + [-0.531439483165741, 9.684957504272461], + [-4.2780232429504395, -0.8555148243904114], + [2.155663251876831, 0.5792335271835327], + [-3.8333792686462402, 3.7710468769073486], + [6.340504169464111, -2.4124209880828857], + [-4.375065326690674, 0.6729246377944946], + [-5.441051006317139, -3.067058563232422], + [-4.317224025726318, -3.683164358139038], + [5.177652835845947, -1.7287945747375488], + [1.6228663921356201, -5.365766525268555], + [-4.803285121917725, -3.063929319381714], + [-1.152881383895874, 8.86949348449707], + [1.8994063138961792, 6.643558025360107], + [-2.236539125442505, 2.4674346446990967], + [3.9689948558807373, 0.46815991401672363], + [0.9480138421058655, -7.120672702789307], + [0.6829336881637573, -6.465628147125244], + [-2.210686445236206, -0.8679125905036926], + [3.321718454360962, -5.084052562713623], + [-0.2257484793663025, 9.522247314453125], + [-4.7427191734313965, 5.451157569885254], + [-0.38645070791244507, 9.785680770874023], + [1.7532389163970947, 5.161162376403809], + [7.585673809051514, -1.9044770002365112], + [0.5227005481719971, -5.83596658706665], + [-0.26072752475738525, 9.789477348327637], + [0.14546290040016174, -5.253986358642578], + [-5.833744525909424, -2.53316068649292], + [-0.4399567246437073, 0.5106139183044434], + [2.851945161819458, -4.530451774597168], + [8.953021049499512, -2.9143948554992676], + [7.741113662719727, -2.2787668704986572], + [2.6699559688568115, -4.078176975250244], + [-7.122192859649658, -2.045295238494873], + [-3.9204888343811035, -3.8232877254486084], + [-6.691906929016113, 8.329474449157715], + [-3.439110040664673, 7.455862045288086], + [-4.038513660430908, -2.8411076068878174], + [1.491809606552124, 4.687962532043457], + [-5.455826282501221, 1.6774502992630005], + [-6.837229251861572, -1.7518123388290405], + [4.080085277557373, 6.548341751098633], + [-7.268922805786133, -1.837050437927246], + [-5.451423168182373, 4.099177360534668], + [0.8276915550231934, -6.541879653930664], + [-3.6342897415161133, 7.023007392883301], + [0.5318664312362671, 0.3759649991989136], + [6.929863452911377, -1.785279393196106], + [8.340332984924316, -2.228886127471924], + [-5.181417465209961, -2.812448263168335], + [-1.5833934545516968, -0.23138970136642456], + [0.8286871314048767, -4.50666618347168], + [-0.5300989747047424, 8.946495056152344], + [2.612730026245117, -4.120383262634277], + [8.803635597229004, -2.3412158489227295], + [-5.39662504196167, -3.277979612350464], + [-5.979238510131836, -2.5029516220092773], + [0.762974202632904, 5.20994758605957], + [-4.880532264709473, -3.027617931365967], + [2.464552164077759, -7.316011428833008], + [2.5474376678466797, -3.964538812637329], + [-3.4192049503326416, -1.0485984086990356], + [-4.574015140533447, -3.0402138233184814], + [-3.815364122390747, -2.950042963027954], + [-5.262174606323242, -2.3072924613952637], + [0.21633541584014893, -1.0223628282546997], + [-5.0301995277404785, 7.651968002319336], + [-5.2780022621154785, -3.147634506225586], + [2.2907464504241943, -6.036074638366699], + [2.8258183002471924, -4.22658634185791], + [-3.0723860263824463, -1.4538315534591675], + [-3.8805878162384033, 4.31378173828125], + [-4.111454486846924, 6.508363723754883], + [-7.50038480758667, -1.5522735118865967], + [-7.058024883270264, 8.75375747680664], + [-6.682937145233154, 8.587076187133789], + [-4.9425530433654785, 2.5852997303009033], + [-3.7474515438079834, -3.340749502182007], + [5.018266677856445, 7.456699848175049], + [-2.443589925765991, 1.8880263566970825], + [2.6835813522338867, 6.228798866271973], + [-5.383482933044434, -0.39092886447906494], + [-0.3217984437942505, 9.880674362182617], + [-4.3750457763671875, -3.4189538955688477], + [-5.085559368133545, -3.3136022090911865], + [-0.2664090394973755, 10.437084197998047], + [-1.7403385639190674, 4.878629684448242], + [-5.603451251983643, 2.560148000717163], + [-4.234227657318115, -1.2397047281265259], + [-0.02843082696199417, 8.697545051574707], + [-5.853174209594727, 5.588919639587402], + [3.2280900478363037, -4.823272705078125], + [-3.9805753231048584, 0.019336994737386703], + [-4.985923767089844, -4.5590057373046875], + [3.030090093612671, -4.7112908363342285], + [0.46666187047958374, -0.7452995777130127], + [2.3055508136749268, -8.830998420715332], + [-0.30731672048568726, 10.754840850830078], + [-4.654093265533447, -2.5057260990142822], + [-5.694849491119385, -4.039233684539795], + [1.491645097732544, 9.782979965209961], + [-2.712074041366577, 1.995162844657898], + [-3.8371188640594482, -3.390488386154175], + [-5.126590251922607, 5.5786285400390625], + [1.9901330471038818, 2.6131112575531006], + [-4.631435871124268, -2.093531370162964], + [-8.465357780456543, -0.9811171293258667], + [-4.516383647918701, -1.5781581401824951], + [9.545421600341797, -2.6369740962982178], + [3.258070707321167, 6.605574607849121], + [-0.24493944644927979, 9.455385208129883], + [-0.9352973103523254, 1.3082081079483032], + [2.0896823406219482, -7.8160905838012695], + [-7.451272487640381, -1.8508096933364868], + [2.379570484161377, -4.642617225646973], + [-4.900815486907959, 6.678342819213867], + [-4.804251670837402, -0.00851685181260109], + [2.943265199661255, -4.638888359069824], + [-0.371268093585968, 10.44700813293457], + [3.277726411819458, -5.837574481964111], + [-5.022857666015625, -3.2103476524353027], + [3.428804397583008, -5.535543441772461], + [-4.693574905395508, 3.284067392349243], + [2.2094132900238037, 5.44706392288208], + [-2.334646224975586, -1.0046814680099487], + [2.212886333465576, -3.1033523082733154], + [-3.6082358360290527, -2.3747904300689697], + [-3.189344644546509, -2.807421922683716], + [2.91367506980896, -4.386771202087402], + [1.810877799987793, 4.664666175842285], + [-3.804425001144409, -0.1838747262954712], + [-0.29288703203201294, 8.845308303833008], + [-3.3036909103393555, -3.5735762119293213], + [-3.4248979091644287, -1.8562122583389282], + [0.11676900833845139, -4.177130699157715], + [-4.906107425689697, -3.249589204788208], + [6.110265254974365, -1.0018030405044556], + [3.2644598484039307, -4.876293659210205], + [-8.08297061920166, -1.1453086137771606], + [7.081088542938232, -1.6080087423324585], + [-4.444510459899902, -3.3389503955841064], + [-4.391442775726318, -0.8011083602905273], + [-2.0589070320129395, 0.5857511162757874], + [2.840428590774536, 1.3955705165863037], + [2.71858811378479, -4.440752029418945], + [-7.551990032196045, 0.18821477890014648], + [-5.2996649742126465, 6.402700901031494], + [4.771819591522217, 6.441751003265381], + [1.1770145893096924, -7.434997081756592], + [3.239065408706665, -4.842235565185547], + [1.2372100353240967, -2.7309067249298096], + [-4.850656032562256, -3.3788115978240967], + [9.015469551086426, -2.4992620944976807], + [-4.276260852813721, 6.62186336517334], + [3.010890245437622, -5.260136604309082], + [-2.3161494731903076, 1.5127297639846802], + [3.1190989017486572, -4.746555805206299], + [-1.7816059589385986, 3.0122296810150146], + [3.100013494491577, -5.2312116622924805], + [7.268688678741455, -2.54610276222229], + [3.05220890045166, -4.7562947273254395], + [2.0853331089019775, 5.435086727142334], + [2.6804757118225098, -6.153434753417969], + [1.4337133169174194, -7.06732702255249], + [-2.6776158809661865, 2.035170793533325], + [-4.837703704833984, -1.3622331619262695], + [9.433276176452637, -2.5764153003692627], + [-4.418339729309082, 6.248279094696045], + [-8.372254371643066, 10.267062187194824], + [-3.5450823307037354, -1.6269404888153076], + [-1.0366824865341187, 1.8840633630752563], + [-8.138124465942383, -1.124563217163086], + [-9.769999504089355, -0.8883123397827148], + [-4.194214820861816, -2.6092369556427], + [-4.919519901275635, -3.2863247394561768], + [-4.740164756774902, -3.895404577255249], + [-5.036114692687988, 6.701691627502441], + [-3.9373743534088135, -2.6050870418548584], + [-2.381129741668701, 0.8714759349822998], + [-6.417238235473633, 5.87136173248291], + [2.916078567504883, -5.134084224700928], + [-6.174036502838135, 7.631475448608398], + [-6.669741630554199, 2.056959867477417], + [3.3014934062957764, -5.2863945960998535], + [6.690701007843018, -1.8242424726486206], + [-6.451348781585693, 7.7657976150512695], + [5.9280829429626465, -4.999231338500977], + [7.376800537109375, -2.0814526081085205], + [-2.415786027908325, 1.7984850406646729], + [1.9452760219573975, -3.824342966079712], + [1.7849712371826172, -3.1174049377441406], + [-2.532315492630005, 2.2747182846069336], + [-3.9999077320098877, -0.43265050649642944], + [3.5227620601654053, 6.286410331726074], + [3.421233892440796, -5.094195365905762], + [0.9524486660957336, 5.259119987487793], + [3.1516611576080322, -4.854605197906494], + [1.7262494564056396, -5.88991117477417], + [-6.620578289031982, 7.868778228759766], + [-0.5340154767036438, 11.630424499511719], + [9.047172546386719, -2.4969637393951416], + [-0.4261658787727356, -1.1774234771728516], + [-4.249361515045166, -2.4531819820404053], + [-5.33563756942749, 6.821310043334961], + [-2.321146249771118, 1.8456617593765259], + [-3.526519536972046, -2.907946825027466], + [-4.335235595703125, 4.673009395599365], + [3.9948856830596924, -6.281015872955322], + [2.8683526515960693, -7.401129722595215], + [-2.4034292697906494, 1.587746500968933], + [1.6584552526474, -7.245625972747803], + [-2.228681802749634, 2.557889938354492], + [-8.861454010009766, -1.0323516130447388], + [-7.655235290527344, 9.411968231201172], + [5.623545169830322, -3.0395028591156006], + [5.500596523284912, 7.490621089935303], + [1.556178331375122, -7.555891036987305], + [-0.31256741285324097, 11.154232025146484], + [-6.20180082321167, 7.598613739013672], + [-0.7302840352058411, 0.7618914842605591], + [2.3900935649871826, -7.967629432678223], + [-2.787147283554077, -4.483138084411621], + [-0.7347480654716492, -0.6458536386489868], + [4.276196002960205, -3.6521198749542236], + [-4.221837043762207, 6.52135705947876], + [-4.836206912994385, -1.9464267492294312], + [-4.676446914672852, -3.4976565837860107], + [-0.14081507921218872, 10.107698440551758], + [5.817397594451904, 7.672414779663086], + [1.8885105848312378, 4.988672256469727], + [1.5099048614501953, 0.6494626998901367], + [0.5805261731147766, 0.1672394871711731], + [6.74312162399292, -2.3663439750671387], + [1.3325122594833374, -0.3703416883945465], + [-4.914052963256836, 7.412350654602051], + [-4.499085426330566, 1.8569660186767578], + [-3.3395302295684814, 2.9760684967041016], + [8.679619789123535, -2.4398343563079834], + [2.263808488845825, -6.227692604064941], + [7.146378040313721, -2.0108418464660645], + [-3.5617785453796387, -3.42106556892395], + [5.482752323150635, 7.858131408691406], + [-0.14709776639938354, 9.631202697753906], + [-5.269366264343262, 6.508932113647461], + [1.6014760732650757, 5.011651039123535], + [-3.902726888656616, -3.8101415634155273], + [-6.356182098388672, 4.4614763259887695], + [-0.6571078300476074, -2.4402549266815186], + [-3.9635841846466064, -2.3025996685028076], + [-5.1547417640686035, -3.5661544799804688], + [1.864261507987976, 4.441915035247803], + [1.7151750326156616, 5.06988525390625], + [-0.7590572237968445, 8.074363708496094], + [3.370461940765381, -7.580211639404297], + [-4.392721176147461, -3.957059621810913], + [3.1051247119903564, -4.655507564544678], + [-0.26424604654312134, 9.639899253845215], + [-0.27572858333587646, 9.86213207244873], + [-4.276791095733643, -2.5768651962280273], + [-0.0093778595328331, -1.5291975736618042], + [-4.460372447967529, 5.2735161781311035], + [-1.0560446977615356, -0.7470985651016235], + [-4.349094390869141, 1.2151998281478882], + [-4.702600479125977, 4.560361862182617], + [-3.4538495540618896, -3.467383623123169], + [-2.458575963973999, 0.4725914001464844], + [4.775277614593506, 7.267805099487305], + [-3.042771100997925, -1.268871784210205], + [-3.1028811931610107, 3.1790199279785156], + [1.8862206935882568, -3.265873432159424], + [-4.890824794769287, -3.4817557334899902], + [-4.335882186889648, 6.013737201690674], + [-0.2066894769668579, 10.077848434448242], + [-3.134828805923462, -1.7804702520370483], + [-0.09985256940126419, 3.189446210861206], + [-4.416548252105713, -3.29697585105896], + [-2.1871352195739746, 2.6032514572143555], + [-5.122440814971924, -0.4159383177757263], + [5.740014553070068, 8.132165908813477], + [-6.151325702667236, 8.088081359863281], + [2.1829841136932373, -5.623477935791016], + [-0.213131844997406, 9.601996421813965], + [-2.6626944541931152, -0.2521517872810364], + [4.71830415725708, -1.4150766134262085], + [0.5531027913093567, -0.12355336546897888], + [-6.061975955963135, -0.28137969970703125], + [-5.186245918273926, 3.754128932952881], + [2.2804930210113525, 0.8026649951934814], + [2.984098434448242, -4.482741355895996], + [-2.3393115997314453, 1.2018280029296875], + [-4.174108982086182, 4.478520393371582], + [2.7465810775756836, -5.893155097961426], + [3.129930257797241, 6.424323081970215], + [-7.328824520111084, 8.877837181091309], + [-4.246237277984619, -3.3236591815948486], + [-2.9401228427886963, 0.6059334874153137], + [-2.1046152114868164, 2.3373494148254395], + [8.113369941711426, -2.2036330699920654], + [-4.036529541015625, 6.79860782623291], + [-6.75529670715332, -1.74839186668396], + [-3.781073808670044, -2.092999219894409], + [2.2203643321990967, 0.518924355506897], + [2.588010549545288, -3.7895925045013428], + [-4.291581630706787, -4.664028167724609], + [-6.016851425170898, -1.8805879354476929], + [2.596759080886841, -5.733488082885742], + [2.7306315898895264, -4.104975700378418], + [7.313633441925049, -1.7726318836212158], + [1.9492931365966797, -3.3276333808898926], + [-0.38457733392715454, 9.670427322387695], + [-0.2555386424064636, 10.616684913635254], + [-2.818121910095215, 4.965447425842285], + [-0.7190882563591003, -0.737418532371521], + [2.249521493911743, 5.855138301849365], + [-5.125098705291748, -0.6162312626838684], + [-0.42699164152145386, 9.88428020477295], + [-1.9993987083435059, 0.26598110795021057], + [-2.263493537902832, -0.92212975025177], + [-4.823638439178467, -3.6492316722869873], + [-4.464606761932373, -3.4563653469085693], + [1.224649429321289, -5.68904447555542], + [-3.0035111904144287, 5.085644721984863], + [-5.9613518714904785, 1.907678484916687], + [-5.6553425788879395, -0.7353625297546387], + [2.787882089614868, -4.442913055419922], + [-4.626051902770996, -5.524712562561035], + [-0.5535829067230225, 10.70905590057373], + [-1.4967570304870605, 1.3617663383483887], + [1.6327773332595825, 0.6867477297782898], + [0.7662819027900696, 0.9964051246643066], + [2.1035172939300537, -7.213711738586426], + [-6.810913562774658, 8.551860809326172], + [-0.1797456443309784, -0.8865907788276672], + [-6.037327289581299, -1.8142646551132202], + [-5.263172626495361, -2.612584352493286], + [-1.5738826990127563, 6.391427993774414], + [10.08520793914795, -2.817831039428711], + [-2.5340170860290527, 1.8960187435150146], + [2.9637491703033447, -4.457230567932129], + [1.8494040966033936, 0.3682696223258972], + [-4.402369022369385, -3.4297311305999756], + [-3.53544545173645, 5.353425979614258], + [-4.748194694519043, 6.153510093688965], + [-3.689786672592163, 5.5020246505737305], + [3.2382071018218994, -4.838505744934082], + [-2.416127920150757, -1.453168272972107], + [8.476906776428223, -3.3255131244659424], + [-5.935037612915039, 3.3915750980377197], + [-2.2106497287750244, 1.1502463817596436], + [-7.210605144500732, 9.202285766601562], + [-7.128270149230957, -1.9552772045135498], + [2.5733535289764404, -3.6533522605895996], + [-2.6278183460235596, -3.3961570262908936], + [-5.925294399261475, -1.3168394565582275], + [-6.776041030883789, 8.258308410644531], + [-4.867345809936523, 2.1011126041412354], + [0.5448890924453735, -0.17428860068321228], + [-2.526930809020996, 0.4352799654006958], + [-4.392798900604248, -2.0616021156311035], + [-7.5354790687561035, 9.193504333496094], + [6.9117960929870605, -1.4156888723373413], + [-2.3840863704681396, -2.8890602588653564], + [-3.597783327102661, 5.738492012023926], + [3.8077545166015625, -1.424462914466858], + [1.7075008153915405, 5.181544303894043], + [8.368913650512695, -2.209468126296997], + [-3.9659435749053955, -0.7341709733009338], + [-3.337947368621826, -2.445716381072998], + [-2.7978780269622803, 0.930626392364502], + [2.8261561393737793, -6.081192970275879], + [1.4361774921417236, -7.639594078063965], + [-6.042105674743652, 1.0743215084075928], + [1.491234540939331, 5.397810935974121], + [8.27834415435791, -2.530850887298584], + [-0.07746166735887527, 10.034112930297852], + [-0.2908467650413513, 10.682363510131836], + [2.8709733486175537, -7.1681413650512695], + [-4.883969783782959, 2.764604091644287], + [7.9574809074401855, -2.046116590499878], + [4.141219139099121, 7.048888206481934], + [-4.705504894256592, -3.6391994953155518], + [-7.263483047485352, -1.8650482892990112], + [-3.8299453258514404, -3.7180988788604736], + [-6.300486087799072, -0.4669419527053833], + [-0.7702411413192749, -0.5073366165161133], + [4.037328243255615, 6.6285905838012695], + [-3.519371747970581, 6.564480781555176], + [2.4863827228546143, -3.4876062870025635], + [8.30444049835205, -2.542527437210083], + [-0.2959560751914978, -0.5404159426689148], + [1.05397629737854, 5.556579113006592], + [8.67922306060791, -2.189464569091797], + [-3.5033562183380127, 5.780860900878906], + [-0.28485018014907837, 10.076332092285156], + [7.154023170471191, -2.564833879470825], + [-5.393350124359131, 6.607141494750977], + [-5.301157474517822, -2.9858245849609375], + [-4.675980091094971, -1.5012308359146118], + [0.10170095413923264, -0.9978988170623779], + [2.6773812770843506, 5.356134414672852], + [-4.724251747131348, 6.39118766784668], + [1.0484522581100464, -0.2315036505460739], + [8.20844841003418, -3.4389400482177734], + [2.291663885116577, -8.231086730957031], + [2.4547159671783447, -3.7948849201202393], + [-6.60747766494751, 2.029569387435913], + [-1.9842191934585571, 0.6125192642211914], + [2.8845486640930176, -6.320108890533447], + [5.137094974517822, -3.3254854679107666], + [-6.795589923858643, -1.2174161672592163], + [-5.490458011627197, -4.831646919250488], + [6.633716106414795, -1.3639384508132935], + [8.892180442810059, -2.439962148666382], + [9.217673301696777, -2.5644659996032715], + [-4.5400261878967285, -2.21527361869812], + [3.1653051376342773, -4.733597755432129], + [10.196944236755371, -2.880852699279785], + [-2.748079776763916, 2.7271437644958496], + [-5.762970924377441, -1.5131102800369263], + [-0.16318020224571228, -1.2920708656311035], + [-1.8874775171279907, 6.5833587646484375], + [7.122165203094482, -2.732093334197998], + [-4.939662456512451, -2.9522311687469482], + [-5.107785701751709, 4.983014106750488], + [-5.136862277984619, -3.262159585952759], + [-2.9895241260528564, 6.703294277191162], + [-0.23742520809173584, 9.8431396484375], + [1.97414231300354, -8.246210098266602], + [-6.0592217445373535, -2.9236247539520264], + [-6.154714107513428, 0.002273913472890854], + [-4.468531608581543, -4.55207633972168], + [-3.121485948562622, -0.22355204820632935], + [-2.1946520805358887, 2.5441224575042725], + [-4.364040374755859, -4.403112411499023], + [-0.6354202032089233, -0.6243284344673157], + [3.142608880996704, -4.712933540344238], + [-2.8244364261627197, 0.2488904595375061], + [-2.398470640182495, 1.3250447511672974], + [3.115983247756958, -5.280486583709717], + [7.305607795715332, -1.796258807182312], + [1.185645580291748, -6.159366607666016], + [8.60272216796875, -2.397423505783081], + [-3.399242401123047, 6.713860511779785], + [-4.293612480163574, -2.5091753005981445], + [-5.481314182281494, 1.1933649778366089], + [2.665253162384033, -5.411787986755371], + [-2.3807919025421143, 2.2816712856292725], + [-6.356565475463867, 4.1110429763793945], + [-7.014052867889404, 8.623409271240234], + [2.3523545265197754, -6.614177703857422], + [8.700226783752441, -2.4704129695892334], + [0.33857858180999756, -5.301681995391846], + [-4.305178642272949, -2.711164712905884], + [8.16895580291748, -2.1452443599700928], + [-1.4972751140594482, 6.174081325531006], + [1.9889404773712158, -3.386075019836426], + [-2.4186201095581055, 2.321542739868164], + [6.93883752822876, -2.5541887283325195], + [3.8165640830993652, 1.3023711442947388], + [-0.0441865399479866, 9.847291946411133], + [2.006211996078491, -8.597221374511719], + [6.335788249969482, -1.1269845962524414], + [-3.325159788131714, 5.081470012664795], + [-4.11112642288208, 4.951072692871094], + [-7.125247001647949, -1.6949106454849243], + [6.348226070404053, -1.204261302947998], + [-7.193481922149658, -0.8666584491729736], + [-2.1351799964904785, 2.2427425384521484], + [-7.77479887008667, 9.497133255004883], + [6.345757961273193, -2.6543760299682617], + [-0.3380449414253235, -1.1651602983474731], + [-4.6797871589660645, -2.9857423305511475], + [-4.064043045043945, -2.7993054389953613], + [-4.816543102264404, -3.01509690284729], + [-0.32426947355270386, 9.746421813964844], + [6.900218486785889, 8.049399375915527], + [2.7801711559295654, -6.878965377807617], + [-0.2794575095176697, 10.45638656616211], + [7.194976806640625, -1.9243104457855225], + [-3.5096514225006104, -3.7972519397735596], + [-0.24963796138763428, 9.966461181640625], + [-3.761510133743286, -1.7528201341629028], + [-0.26431095600128174, 9.606317520141602], + [1.6458104848861694, -8.047880172729492], + [3.873957872390747, 6.879385948181152], + [-5.064918518066406, -1.140118956565857], + [-0.7362509369850159, 1.2680619955062866], + [-7.488431453704834, -1.7004984617233276], + [2.353759527206421, -8.98477840423584], + [0.5265285968780518, 5.366159439086914], + [-0.47273653745651245, 10.945755004882812], + [1.8545842170715332, 5.3353071212768555], + [2.6960272789001465, -5.695551872253418], + [-0.9465360641479492, 9.476139068603516], + [2.6960747241973877, -3.9840691089630127], + [-4.565604209899902, -4.880224227905273], + [-0.3404332995414734, -0.6569442749023438], + [-3.5785720348358154, -0.9463121891021729], + [2.640963315963745, -5.13347053527832], + [-6.676191806793213, 8.462676048278809], + [-5.707787990570068, 6.676728248596191], + [10.029827117919922, -2.7875759601593018], + [-5.9068732261657715, -2.5664522647857666], + [1.6678590774536133, 5.861151218414307], + [-1.0344046354293823, 0.5285071730613708], + [2.7291741371154785, -4.552857398986816], + [-6.713438510894775, -1.042750597000122], + [-2.7520060539245605, 2.5892176628112793], + [3.0206587314605713, -5.022910118103027], + [3.0256621837615967, -4.507311820983887], + [-4.093328952789307, 0.003381725400686264], + [-7.507304668426514, 1.3675541877746582], + [2.9619383811950684, -4.668660640716553], + [8.972029685974121, -2.4847614765167236], + [-5.9161553382873535, 6.952819347381592], + [-0.2418772578239441, 9.808317184448242], + [-5.622443675994873, 4.747113227844238], + [9.289788246154785, -2.550142765045166], + [-5.552196502685547, 6.953463077545166], + [1.6809883117675781, 1.042351484298706], + [3.5041122436523438, 6.401999473571777], + [7.038320541381836, -1.628029227256775], + [-0.5417382121086121, 5.244295120239258], + [-4.694569110870361, -0.3339206576347351], + [5.146592617034912, -3.253934621810913], + [-3.7257580757141113, -2.952458143234253], + [-4.821016788482666, -2.6529688835144043], + [-0.19356566667556763, 10.324360847473145], + [-3.4943742752075195, 0.8655809164047241], + [-5.950127124786377, 7.901674270629883], + [-6.493269443511963, 7.890621185302734], + [2.6727182865142822, -4.418277740478516], + [-4.642415523529053, -2.5003323554992676], + [-2.3831164836883545, 1.455351710319519], + [-3.644840955734253, -3.4494612216949463], + [-4.89752721786499, -2.58107590675354], + [7.158597469329834, -3.195082426071167], + [-5.598933219909668, 6.909932613372803], + [-5.145735740661621, -3.1553657054901123], + [3.3766534328460693, 6.346036911010742], + [3.0396621227264404, -4.731134414672852], + [-0.18410319089889526, 10.323562622070312], + [-6.317070007324219, 3.2193925380706787], + [-5.288671016693115, -4.002341270446777], + [2.113781452178955, -10.080554962158203], + [-4.888230323791504, 7.443460464477539], + [0.1503295600414276, -4.046216011047363], + [3.39162540435791, -5.048955917358398], + [-2.719402551651001, -0.5169556140899658], + [1.9818639755249023, -3.2865591049194336], + [6.780817985534668, -1.3764492273330688], + [1.029618263244629, 5.505789756774902], + [9.661005973815918, -2.7039120197296143], + [-3.9202466011047363, -5.3045196533203125], + [-7.489655017852783, -0.5794658660888672], + [-2.487910032272339, -0.9389869570732117], + [2.830305814743042, -4.298007965087891], + [-4.960631847381592, 0.126032292842865], + [-2.061234951019287, -2.249321222305298], + [8.494433403015137, -2.2526395320892334], + [-5.321659564971924, 1.9121350049972534], + [-4.908203601837158, -1.549315333366394], + [2.0075933933258057, -6.493593215942383], + [-1.3766776323318481, 1.8146084547042847], + [1.5639723539352417, -6.672194480895996], + [-2.6686577796936035, 2.848257303237915], + [-2.1731698513031006, 2.688657522201538], + [-6.648568630218506, -2.413930892944336], + [0.07000874727964401, 9.689945220947266], + [-0.7988865375518799, -1.0770061016082764], + [3.0644419193267822, -4.601873397827148], + [-4.378304958343506, -2.899805784225464], + [1.3541266918182373, -3.251570463180542], + [-4.108299255371094, -4.616513252258301], + [-4.357193946838379, -3.3018958568573], + [1.5654375553131104, 0.8068461418151855], + [1.7813911437988281, 1.2025288343429565], + [2.309483051300049, -7.591464996337891], + [2.0536715984344482, -9.654688835144043], + [-4.912398815155029, -4.587604999542236], + [-0.2132468819618225, 9.754132270812988], + [-2.6629891395568848, -2.853083848953247], + [3.1590688228607178, -4.741243362426758], + [-6.599480628967285, -1.7041181325912476], + [2.417503833770752, -6.853390216827393], + [-4.184736728668213, -2.944380044937134], + [-0.4197801351547241, -1.144307017326355], + [2.2430410385131836, 0.7504911422729492], + [3.138737201690674, -4.695728302001953], + [-5.055595397949219, -1.4589978456497192], + [-5.042798042297363, -2.1739256381988525], + [2.889636993408203, -4.386030197143555], + [1.8568474054336548, 5.163483142852783], + [-3.0478999614715576, 3.3392632007598877], + [-4.152805328369141, -2.8343214988708496], + [2.9751973152160645, -4.731736183166504], + [-2.0648272037506104, 2.357487201690674], + [2.3244757652282715, 5.059959411621094], + [2.445755958557129, -3.6479086875915527], + [2.820361852645874, 7.028676509857178], + [2.3164145946502686, -9.818921089172363], + [7.555963516235352, -1.8598977327346802], + [-6.275285720825195, 0.5832134485244751], + [-2.7109062671661377, 2.377674102783203], + [-4.54082727432251, 3.331552028656006], + [-5.301690578460693, 1.1853049993515015], + [1.7743656635284424, 5.075166702270508], + [2.4028093814849854, -6.932613372802734], + [-2.1502270698547363, 2.243748426437378], + [8.439187049865723, -2.334758996963501], + [-7.05456018447876, -0.2819768190383911], + [-4.69114351272583, -0.9656693935394287], + [-7.378890037536621, 9.34035587310791], + [0.332862913608551, 0.28616636991500854], + [3.1865832805633545, -4.773372650146484], + [-2.7497189044952393, 4.993064880371094], + [2.779996156692505, -4.3341875076293945], + [-2.450415849685669, 1.8171130418777466], + [10.097577095031738, -2.803208827972412], + [-2.8933112621307373, 4.091251373291016], + [2.7273404598236084, -4.823551177978516], + [-2.399829864501953, -3.877565860748291], + [5.604862689971924, -1.3865512609481812], + [0.63503497838974, 0.44251787662506104], + [-4.67788553237915, -2.4656753540039062], + [2.512418031692505, -3.9662725925445557], + [2.0114543437957764, -8.457200050354004], + [8.105447769165039, -2.385279417037964], + [-3.713057279586792, -0.5677070617675781], + [8.527321815490723, -2.3296217918395996], + [-0.2680412530899048, 9.466238021850586], + [2.437088966369629, 5.987123966217041], + [-6.651761531829834, 1.494589924812317], + [-5.809215068817139, 4.247159957885742], + [3.0113656520843506, 0.05830768868327141], + [2.585169792175293, 5.617671966552734], + [-4.308112621307373, -2.375513792037964], + [-4.924405574798584, -4.041985034942627], + [2.7793633937835693, -4.225091934204102], + [2.853433132171631, -4.377973556518555], + [-3.0490992069244385, 5.606705188751221], + [-0.4172361493110657, 9.53072738647461], + [-1.5428404808044434, -1.5843926668167114], + [-0.19046121835708618, 5.698213577270508], + [-6.339371681213379, -0.192651629447937], + [0.5354281067848206, 5.321497440338135], + [-4.61810827255249, -1.786368727684021], + [-3.24377179145813, 0.6212663650512695], + [-0.186457097530365, 9.43223762512207], + [-1.5138331651687622, 1.96886146068573], + [5.0300822257995605, -1.9738060235977173], + [-5.83065938949585, -3.247319459915161], + [7.773162841796875, -2.776700496673584], + [-6.276505470275879, -2.516664505004883], + [2.4721620082855225, -3.418581247329712], + [-4.6774001121521, -3.3966057300567627], + [-2.65787410736084, 1.9412239789962769], + [-1.0734474658966064, 8.075166702270508], + [0.6976616978645325, -5.5091142654418945], + [-2.3427090644836426, 0.9520453214645386], + [-4.641544342041016, -1.61272394657135], + [-5.711325168609619, -1.633710265159607], + [7.6442341804504395, -2.027557373046875], + [-3.4309141635894775, -3.822140693664551], + [-2.26814341545105, 1.4888328313827515], + [-2.154365062713623, 4.524904251098633], + [-0.49541640281677246, -1.2728508710861206], + [-0.3882814049720764, 11.0931396484375], + [-3.932062864303589, -2.689337968826294], + [-0.31287211179733276, -4.25307559967041], + [-2.217813730239868, -2.0747509002685547], + [-4.701089859008789, 3.352884531021118], + [-5.716502666473389, -1.712748408317566], + [-6.439718723297119, 6.8194169998168945], + [-0.6219719052314758, -0.5633410215377808], + [-3.3425281047821045, 6.774115562438965], + [-2.959354877471924, 2.7060139179229736], + [-5.236581325531006, -3.2077462673187256], + [-4.6830267906188965, -3.913785457611084], + [-0.4900694787502289, -1.046660304069519], + [-4.171828746795654, -2.7103240489959717], + [-3.3622477054595947, -3.42531418800354], + [-0.27614521980285645, -1.563458800315857], + [-3.4951956272125244, -1.1960382461547852], + [7.372162342071533, -1.698028564453125], + [-2.2037158012390137, 2.337233543395996], + [1.8140087127685547, -8.6248779296875], + [0.9598683714866638, -7.363593101501465], + [5.081857681274414, -1.1162272691726685], + [6.541753768920898, -1.4309762716293335], + [-0.7401338815689087, 9.686220169067383], + [-4.526800155639648, -1.4276647567749023], + [-0.1951696276664734, 9.93311882019043], + [-0.733782947063446, 10.02724552154541], + [-0.27329570055007935, 10.006277084350586], + [-0.4584811329841614, 9.481392860412598], + [2.1104660034179688, -9.358650207519531], + [-6.691091060638428, 8.329347610473633], + [-0.4270455837249756, 9.761517524719238], + [2.6298487186431885, 1.0633500814437866], + [1.8943023681640625, -5.3943257331848145], + [-6.17629861831665, 8.082938194274902], + [-5.212307453155518, -2.426572561264038], + [-5.2468132972717285, -3.6908152103424072], + [-0.40919142961502075, 10.906095504760742], + [-0.43014687299728394, -1.055639386177063], + [-3.8786137104034424, -1.3432389497756958], + [-6.623251438140869, 8.255998611450195], + [-2.406454563140869, 4.657096862792969], + [-4.6694512367248535, -2.617410898208618], + [-0.2154863476753235, 9.608219146728516], + [0.9209476113319397, -5.530514717102051], + [1.5284557342529297, -7.979576587677002], + [-5.494065761566162, -3.494590997695923], + [-2.0544559955596924, 0.5111844539642334], + [-0.37512052059173584, 10.444173812866211], + [2.3641469478607178, -4.014500141143799], + [-2.065755844116211, 1.6702964305877686], + [-2.4176695346832275, 1.8530749082565308], + [1.7189347743988037, 5.189117431640625], + [-0.31156378984451294, 11.119355201721191], + [-0.18173706531524658, -0.8087695837020874], + [-4.556028366088867, -2.009946346282959], + [-7.772802829742432, -1.5713328123092651], + [0.5934427976608276, 5.304915428161621], + [-4.411433696746826, -3.696211814880371], + [-4.360147476196289, 6.290745735168457], + [-6.9247612953186035, -1.6191177368164062], + [3.0607666969299316, -4.688831329345703], + [-6.523072719573975, 4.770885467529297], + [-5.431324481964111, -3.5032413005828857], + [-0.4335131049156189, 10.444974899291992], + [1.2381781339645386, -4.798147201538086], + [2.296328544616699, 5.7750420570373535], + [3.1276419162750244, -2.5220515727996826], + [-3.262511730194092, 5.070711135864258], + [-5.101369380950928, 1.6524649858474731], + [2.5621426105499268, -4.7456746101379395], + [2.5645387172698975, -4.085859298706055], + [5.783334255218506, 7.538647651672363], + [-4.696634292602539, -2.4069576263427734], + [1.3333942890167236, -7.319173336029053], + [1.682982325553894, -8.257125854492188], + [-5.30226993560791, 1.1326502561569214], + [-0.6468927264213562, 9.23449420928955], + [-2.094057559967041, 2.703087091445923], + [-5.5295796394348145, 4.996976852416992], + [6.6486287117004395, -1.2042219638824463], + [8.5330228805542, -2.288297414779663], + [-5.819932460784912, -3.5344526767730713], + [-0.8351222276687622, 9.235331535339355], + [-4.561394214630127, 6.34016752243042], + [3.307874917984009, -4.936356067657471], + [-6.196478843688965, 7.951523780822754], + [-4.252496719360352, -4.071664333343506], + [2.319404363632202, 5.8677520751953125], + [-1.4475041627883911, 1.0431532859802246], + [-3.8483541011810303, -1.0303419828414917], + [-2.4995439052581787, -0.7056936025619507], + [-2.1524858474731445, 3.140181303024292], + [-6.593455791473389, 7.495340347290039], + [2.786113977432251, -5.879742622375488], + [0.10061406344175339, 9.333721160888672], + [-3.747413158416748, -4.343954086303711], + [-4.9536967277526855, -2.6569314002990723], + [-3.7991671562194824, -2.229039430618286], + [-5.037715435028076, 0.6605805158615112], + [-5.963693141937256, 4.994324684143066], + [-0.5760189890861511, 9.633381843566895], + [3.1317925453186035, -4.874423980712891], + [-4.257769584655762, -6.059829235076904], + [2.803680896759033, -4.245388984680176], + [-5.166116714477539, -1.556286096572876], + [7.560878276824951, -1.851501226425171], + [8.5291166305542, -1.7017288208007812], + [0.1647195816040039, 9.208349227905273], + [1.1808552742004395, -7.287137985229492], + [-3.113668441772461, -4.1673994064331055], + [-7.431073188781738, 9.156671524047852], + [-4.055221080780029, -1.271461844444275], + [-7.453240871429443, 9.129959106445312], + [3.2230708599090576, -4.934201240539551], + [-2.4592912197113037, 1.360911250114441], + [2.3280746936798096, 5.916223049163818], + [7.418428897857666, -2.558403730392456], + [-3.4507408142089844, 6.24457311630249], + [-4.110987663269043, -2.708874464035034], + [-2.4208898544311523, 6.137313365936279], + [-4.747164726257324, 3.842191696166992], + [-3.112412691116333, 0.43049120903015137], + [1.3446849584579468, 0.5301986336708069], + [7.293885231018066, -3.7644450664520264], + [-2.2482032775878906, 2.495612859725952], + [6.515976428985596, -0.9789897203445435], + [6.2984418869018555, -1.2368751764297485], + [0.7687994241714478, 5.322201728820801], + [-3.7735092639923096, 5.9822096824646], + [-2.359548568725586, 0.9134730100631714], + [2.464425563812256, 0.990117073059082], + [-4.516826152801514, -3.2192771434783936], + [-1.0674036741256714, -1.1434967517852783], + [-2.1634361743927, 1.2648614645004272], + [1.9088072776794434, -2.3633720874786377], + [2.395350694656372, 4.974103927612305], + [-0.34104156494140625, 9.44089126586914], + [-0.3015056252479553, 9.749959945678711], + [-2.275824785232544, 1.4504362344741821], + [-6.332895755767822, -0.912545919418335], + [-7.033185958862305, -1.5113438367843628], + [-4.766621112823486, -1.9418731927871704], + [-5.570004463195801, -3.419450521469116], + [-3.604423999786377, 2.162647247314453], + [2.572535276412964, -8.20416259765625], + [2.229118824005127, 5.3617095947265625], + [-2.0030720233917236, -1.9303175210952759], + [-2.5506577491760254, 4.610716342926025], + [2.048722267150879, -4.777643203735352], + [-4.036371231079102, 6.808661460876465], + [-4.304938793182373, -3.4860618114471436], + [0.9326773285865784, 4.507171630859375], + [-2.4451005458831787, 1.6116877794265747], + [1.7313742637634277, -5.911110877990723], + [-2.6863255500793457, 1.9312387704849243], + [-6.23555326461792, 3.992727518081665], + [-3.9528110027313232, -2.2263171672821045], + [0.023552022874355316, -0.4957808256149292], + [-1.4394304752349854, -1.0750313997268677], + [0.23109418153762817, -2.2451136112213135], + [1.5821220874786377, 5.446224212646484], + [-0.59862220287323, -0.7773371338844299], + [1.15749192237854, -6.754404067993164], + [2.036217451095581, 5.094315528869629], + [-5.172420501708984, -0.15603435039520264], + [-0.23249703645706177, 8.943831443786621], + [-4.909053802490234, 3.9615375995635986], + [8.84585952758789, -2.375717878341675], + [-5.3594183921813965, -1.9192208051681519], + [1.891758918762207, -3.930095672607422], + [3.0481767654418945, -4.715766429901123], + [-4.413216590881348, -1.6079026460647583], + [2.2731189727783203, -3.428436517715454], + [-2.392439842224121, 1.2164796590805054], + [1.6765912771224976, -5.191251754760742], + [-4.5809006690979, -2.2123544216156006], + [-3.0785200595855713, 3.3347930908203125], + [8.458470344543457, -2.1382334232330322], + [8.366585731506348, -2.25874400138855], + [6.6850905418396, -1.5565721988677979], + [-2.8299367427825928, 6.368901252746582], + [-2.585932493209839, 6.410123348236084], + [-0.2696036100387573, 9.640541076660156], + [-2.2127881050109863, 0.367184579372406], + [-0.05940849334001541, 8.030960083007812], + [-5.574172496795654, -0.17310023307800293], + [3.0080111026763916, -4.536440372467041], + [-5.62817907333374, -2.5092978477478027], + [-0.11189276725053787, 10.001096725463867], + [2.9419353008270264, -4.9314470291137695], + [5.7079291343688965, -1.0694499015808105], + [-6.540440082550049, 8.093867301940918], + [-5.568279266357422, 5.432367324829102], + [-4.636180400848389, -2.3894920349121094], + [-5.667520046234131, 2.395404100418091], + [3.2487103939056396, -4.970424652099609], + [-2.2164864540100098, 0.16356688737869263], + [0.07212530821561813, 9.496539115905762], + [8.895249366760254, -2.337728261947632], + [4.667299270629883, -1.2384649515151978], + [7.487611293792725, -1.806807041168213], + [4.826770782470703, 6.529788970947266], + [-1.3496848344802856, 2.6438686847686768], + [4.995824813842773, -1.09357750415802], + [-7.385406494140625, -1.8520606756210327], + [-3.9181437492370605, -3.0682404041290283], + [-2.811946153640747, -1.5072405338287354], + [-6.581161975860596, 8.044347763061523], + [-4.39000940322876, -0.8183369636535645], + [-5.432465076446533, 6.3823699951171875], + [-4.493860721588135, -1.973223328590393], + [-3.737149953842163, -3.854558229446411], + [5.952540397644043, -1.3186681270599365], + [2.3788349628448486, -4.191139221191406], + [-7.241341590881348, -0.9188724756240845], + [8.4367036819458, -2.4688708782196045], + [3.0164315700531006, -4.774108409881592], + [-6.645503520965576, -1.1777161359786987], + [-5.074365139007568, -3.107118606567383], + [2.6181836128234863, -4.07930850982666], + [0.7231147885322571, -5.768954277038574], + [6.386441707611084, -0.9735482931137085], + [-2.743642568588257, 2.483398675918579], + [-0.4636516571044922, 9.666229248046875], + [4.528771877288818, 6.643853664398193], + [0.5895962715148926, -6.354593753814697], + [-2.114874839782715, 2.761423110961914], + [2.43149733543396, -7.016834735870361], + [8.869584083557129, -2.3923895359039307], + [-5.771447658538818, 7.652143478393555], + [6.269459247589111, -1.2648465633392334], + [5.2365851402282715, -4.338132858276367], + [-4.728331089019775, 4.8222503662109375], + [-4.55560302734375, -2.7826993465423584], + [4.251450538635254, 7.336564064025879], + [-4.6398797035217285, -2.4541614055633545], + [-4.063318729400635, -3.1637685298919678], + [-4.554843425750732, 4.423254013061523], + [8.549126625061035, -2.60539174079895], + [2.333843946456909, -7.9984540939331055], + [4.141341686248779, -1.1745723485946655], + [5.296777725219727, -0.9858208894729614], + [1.183897852897644, -3.2582125663757324], + [6.499716758728027, -1.5382251739501953], + [-5.2774977684021, 5.822822570800781], + [3.3363938331604004, 5.928865432739258], + [3.160266160964966, -4.778473854064941], + [-2.609206199645996, 2.116464376449585], + [3.403289556503296, 6.158882141113281], + [1.8834948539733887, 5.594172954559326], + [6.357830047607422, -3.271892786026001], + [-0.8412955403327942, 8.655682563781738], + [-4.849049091339111, -3.3091368675231934], + [-0.4088793396949768, 10.904842376708984], + [1.886929988861084, -8.26962947845459], + [1.0357189178466797, -0.2753428816795349], + [-0.0345001295208931, 5.700488567352295], + [-6.471729755401611, -1.348357915878296], + [-0.2400062084197998, 10.325845718383789], + [1.0075455904006958, -0.09404630959033966], + [2.925846815109253, -4.413097381591797], + [-4.939090251922607, -2.978870391845703], + [1.4485480785369873, 3.530399799346924], + [7.782135009765625, -1.8980127573013306], + [-0.3190181851387024, 9.824705123901367], + [-3.920105218887329, -2.418806314468384], + [-7.1316657066345215, -1.507002830505371], + [-5.5400004386901855, -2.087808609008789], + [0.1907311975955963, -0.4384337365627289], + [3.758742094039917, 6.519367218017578], + [3.0848705768585205, -4.624108791351318], + [-6.152097225189209, -2.545123815536499], + [-6.250558376312256, 6.295072555541992], + [-0.528223991394043, 0.4422590732574463], + [1.3124102354049683, 5.077735424041748], + [-2.9160311222076416, -3.0870096683502197], + [-6.738426208496094, 0.03930818662047386], + [-5.870170593261719, -2.5313026905059814], + [2.9074082374572754, -6.128927707672119], + [2.3183372020721436, -5.071704387664795], + [-4.793388843536377, -3.081775426864624], + [-3.729639768600464, -2.0865085124969482], + [-1.170282006263733, 8.526745796203613], + [-0.37369129061698914, -0.2185133695602417], + [1.5993363857269287, -6.32680082321167], + [-2.17394757270813, 1.330337405204773], + [-5.091708660125732, -1.877827763557434], + [-5.685265064239502, 7.019014358520508], + [-7.187408924102783, -0.8930696249008179], + [-5.191107749938965, -2.0355706214904785], + [-6.755727767944336, -2.081618070602417], + [-4.426105976104736, -2.4257915019989014], + [-4.828466892242432, -2.94777512550354], + [9.170997619628906, -2.738417387008667], + [-2.3357925415039062, 2.3035292625427246], + [2.172445058822632, -3.57877516746521], + [-6.436127662658691, -1.6073888540267944], + [7.196649074554443, -4.0919976234436035], + [-2.4865894317626953, 5.903249263763428], + [-2.3297922611236572, 1.4763267040252686], + [1.4996025562286377, 0.38049831986427307], + [5.564826965332031, 7.496532440185547], + [3.0219931602478027, 0.8832505345344543], + [1.8488380908966064, -3.6953344345092773], + [-3.4672157764434814, 1.5922865867614746], + [-5.1405558586120605, -1.9964975118637085], + [8.242727279663086, -2.0514843463897705], + [-6.3029255867004395, -1.7420556545257568], + [-0.9139149785041809, 9.815875053405762], + [1.80861234664917, 0.6980842351913452], + [0.16126692295074463, 9.970613479614258], + [2.1200358867645264, -3.2342145442962646], + [-1.5699635744094849, -2.4990453720092773], + [-3.852607488632202, -4.126504421234131], + [2.4445207118988037, -3.804425001144409], + [3.0042214393615723, -4.62681770324707], + [-4.4757561683654785, 6.835535526275635], + [7.9206862449646, -2.1438238620758057], + [-5.356347560882568, 5.465643882751465], + [-4.111508369445801, -3.32494854927063], + [0.06540658324956894, -0.8863712549209595], + [-0.2992393374443054, -1.658026099205017], + [3.2435805797576904, -5.2017669677734375], + [-4.438868999481201, -4.408941268920898], + [1.6140782833099365, -7.430494785308838], + [2.368736982345581, 1.0857170820236206], + [2.7253260612487793, -4.408072471618652], + [-0.05578560382127762, 5.485529899597168], + [9.264951705932617, -2.5608880519866943], + [7.862182140350342, -2.787126302719116], + [-5.837430953979492, -2.8677875995635986], + [0.9416754841804504, -6.727457523345947], + [7.777204990386963, -1.8249611854553223], + [-0.4473828077316284, 11.255867958068848], + [-4.796168804168701, 2.220188617706299], + [3.1578352451324463, -5.059037685394287], + [3.63331937789917, -3.9220128059387207], + [-7.043181419372559, -2.1079862117767334], + [-2.2533626556396484, 1.106223702430725], + [1.9974453449249268, -8.875053405761719], + [3.0415611267089844, -4.879934310913086], + [-4.793415069580078, -3.220217704772949], + [7.888725757598877, -1.9758877754211426], + [2.3353464603424072, 5.796736717224121], + [-4.989814281463623, 7.909427165985107], + [-5.6353440284729, -1.9359642267227173], + [-0.207139253616333, 10.285099983215332], + [-3.3477137088775635, 3.778750419616699], + [2.5429375171661377, -3.428952932357788], + [-0.5017265677452087, 9.089426040649414], + [-0.6808183193206787, 5.45992374420166], + [-5.543451309204102, -2.1030945777893066], + [7.331873416900635, -1.8474483489990234], + [2.946444034576416, -4.430413246154785], + [7.968595027923584, -2.270012140274048], + [3.0343072414398193, -4.574361801147461], + [-5.5742506980896, -0.8413035869598389], + [-2.955235242843628, -1.578400731086731], + [-4.907871723175049, -3.0858099460601807], + [6.763818740844727, -1.8398568630218506], + [-1.7199651002883911, 2.1040961742401123], + [0.8789370656013489, -6.046240329742432], + [0.7395325303077698, -1.0056016445159912], + [-6.820833206176758, 3.3614985942840576], + [-5.315457820892334, 4.269476413726807], + [-2.5388500690460205, 0.9089630842208862], + [1.9480600357055664, 5.769418716430664], + [9.753756523132324, -2.6579062938690186], + [-0.13863235712051392, 9.09402847290039], + [-0.29224610328674316, 8.551042556762695], + [-7.34340238571167, 8.960236549377441], + [2.7053656578063965, -4.183707237243652], + [-4.423903942108154, -2.9169790744781494], + [1.7787156105041504, 0.3148547410964966], + [-3.8768036365509033, -2.2282845973968506], + [2.580937147140503, -4.104084491729736], + [1.7043631076812744, -5.993297576904297], + [-7.653489589691162, 9.564515113830566], + [-0.07988721877336502, 10.24079704284668], + [8.21631145477295, -2.220947027206421], + [-1.5037968158721924, -0.7145276069641113], + [-5.927505016326904, 4.092483043670654], + [8.594332695007324, -2.4651103019714355], + [-0.22764837741851807, -0.9635559916496277], + [5.998665809631348, -1.1348015069961548], + [-6.754367351531982, 8.750093460083008], + [9.441219329833984, -2.743745803833008], + [9.887189865112305, -2.750708818435669], + [0.48368388414382935, -6.227283477783203], + [-7.5600199699401855, -0.7995429635047913], + [6.571033954620361, -2.048759698867798], + [9.409071922302246, -2.34427809715271], + [-5.402220249176025, -1.7276183366775513], + [-2.53092622756958, 1.8066909313201904], + [5.565986156463623, -5.899608135223389], + [0.3486693501472473, -0.8171520829200745], + [2.5360240936279297, -4.359548091888428], + [-7.010804653167725, -1.1367555856704712], + [3.6932997703552246, -3.333116054534912], + [6.631882190704346, -3.285428524017334], + [5.801085948944092, -1.2334223985671997], + [-2.0913350582122803, 2.050220489501953], + [-2.233954429626465, 0.9135861396789551], + [2.956937551498413, -4.458010196685791], + [3.214784622192383, -5.108296871185303], + [-2.0069332122802734, 2.2767112255096436], + [6.319098949432373, -1.469396710395813], + [-7.1702351570129395, -1.9945330619812012], + [-5.071328639984131, 2.7775046825408936], + [8.054457664489746, -2.1084353923797607], + [3.3539412021636963, -5.299995422363281], + [-4.6595139503479, -4.822906970977783], + [-6.212643146514893, 2.649510622024536], + [9.833874702453613, -2.7035601139068604], + [-4.774449825286865, -3.919389486312866], + [-3.8763906955718994, 4.154611110687256], + [1.8144832849502563, -6.539355754852295], + [2.9850292205810547, 6.049319267272949], + [-4.204902172088623, -5.491579055786133], + [-2.166290283203125, 2.4647700786590576], + [-4.541816234588623, 1.9924043416976929], + [-5.592329025268555, -1.720892310142517], + [-7.915891170501709, -0.7922738790512085], + [-2.1707844734191895, -1.4568794965744019], + [-2.264880895614624, -0.7887299060821533], + [2.4291293621063232, -8.481589317321777], + [2.772832155227661, -3.9875986576080322], + [-4.3869099617004395, 0.19034302234649658], + [-0.3072394132614136, -1.6551436185836792], + [-4.324249267578125, 4.777327060699463], + [-6.228365421295166, 0.9182578325271606], + [-2.389288902282715, 1.5636190176010132], + [-2.961242437362671, -3.92521595954895], + [-4.226361274719238, -2.749481678009033], + [-4.224202632904053, 3.725367307662964], + [1.8381472826004028, -3.5657801628112793], + [0.9628215432167053, -7.098258972167969], + [-5.924654006958008, -3.6814446449279785], + [-6.454917907714844, 4.26258659362793], + [-4.928649425506592, -3.002319097518921], + [1.7967777252197266, -7.150547504425049], + [-4.106950283050537, -0.9209960699081421], + [-5.713093280792236, 6.470401763916016], + [-5.263116359710693, -1.7125405073165894], + [-0.3251640200614929, 9.329887390136719], + [-5.892902374267578, 5.04587459564209], + [2.2263338565826416, -3.6504018306732178], + [-6.403026580810547, 7.443391799926758], + [-6.576854228973389, -0.9925305843353271], + [-4.71478796005249, 4.116250991821289], + [2.9324123859405518, -4.401955604553223], + [-5.558407306671143, -1.604788899421692], + [-5.699399471282959, -0.9419580698013306], + [-6.437194347381592, 1.3196066617965698], + [1.7409275770187378, -7.526908874511719], + [-5.206894874572754, 5.681475639343262], + [0.550103485584259, -6.163205146789551], + [3.678978681564331, 5.999141216278076], + [-7.748321056365967, -0.616723895072937], + [5.613635540008545, 7.469194412231445], + [-1.5117590427398682, -1.4877855777740479], + [-0.8917542099952698, 10.020377159118652], + [-0.21125897765159607, -0.8699564933776855], + [-0.9848125576972961, -2.0563037395477295], + [-2.045417070388794, 0.8127928972244263], + [-1.9836770296096802, 0.6231221556663513], + [0.9923004508018494, 0.523102879524231], + [-3.2077267169952393, -3.684840440750122], + [-7.927135944366455, -1.4102787971496582], + [-0.5980247855186462, 11.580100059509277], + [-5.395399570465088, -3.0134170055389404], + [-3.6263577938079834, -3.7492427825927734], + [-0.1212816908955574, 9.592463493347168], + [6.392327785491943, -1.3335051536560059], + [-0.4515848755836487, 9.242069244384766], + [2.409048318862915, -6.67431116104126], + [1.8563628196716309, -8.85422420501709], + [-4.072353363037109, 5.906447410583496], + [0.28428781032562256, 10.751813888549805], + [-1.8205440044403076, -1.622719168663025], + [-4.80833101272583, 0.2879456877708435], + [-2.38077712059021, 0.5279097557067871], + [0.7297917008399963, -0.2490360140800476], + [-4.43328332901001, -3.8123576641082764], + [-2.8373470306396484, -0.9621363282203674], + [-4.329604625701904, -1.9104305505752563], + [-4.808640956878662, 3.8752286434173584], + [-4.483114719390869, -3.1510326862335205], + [7.222501754760742, -3.0198867321014404], + [-0.10083139687776566, -0.40471333265304565], + [3.8598263263702393, 1.6486777067184448], + [6.044432640075684, -2.729285478591919], + [-0.671691358089447, -0.8504955768585205], + [-4.695199012756348, 5.857091426849365], + [2.644644021987915, 0.6211210489273071], + [9.005423545837402, -2.4298388957977295], + [1.0881341695785522, -6.518471717834473], + [-0.8478236198425293, -2.3618762493133545], + [5.28455924987793, -2.3256545066833496], + [-4.156299591064453, 1.434881329536438], + [-2.8373379707336426, 5.35675048828125], + [8.154297828674316, -1.701211929321289], + [-6.3668293952941895, -2.257615089416504], + [1.8137502670288086, 5.545294284820557], + [-5.650049209594727, 3.3171117305755615], + [0.8665134310722351, 0.6830239295959473], + [2.7738747596740723, 0.40488457679748535], + [-4.47435998916626, 3.632786273956299], + [2.005237579345703, -9.723998069763184], + [2.7000505924224854, -4.090381145477295], + [0.8660284876823425, -5.556729316711426], + [-2.224196195602417, 2.598637580871582], + [5.892946720123291, -0.9364902973175049], + [-6.093991756439209, 7.527782440185547], + [0.7248032689094543, 5.006974220275879], + [0.8705258369445801, -7.051911354064941], + [3.060013771057129, -4.901968002319336], + [-4.700601100921631, -4.597196578979492], + [-5.184835910797119, 2.871807813644409], + [-0.473476767539978, 11.281045913696289], + [-3.680286169052124, -2.6234819889068604], + [-0.6904733180999756, 9.664945602416992], + [7.834488391876221, -2.3225886821746826], + [-3.63834547996521, -5.494807243347168], + [-0.2877851724624634, 0.058388981968164444], + [1.2671599388122559, 4.714721202850342], + [-0.1589788794517517, 10.535898208618164], + [1.4909858703613281, 0.9904059171676636], + [-2.0161120891571045, 0.9059618711471558], + [-3.9956133365631104, -2.3607914447784424], + [3.1482720375061035, 6.183010101318359], + [-4.643408298492432, -3.9617693424224854], + [-2.3024072647094727, 5.762834548950195], + [5.269388675689697, -3.3291783332824707], + [-3.608232021331787, -1.2784186601638794], + [-3.6755244731903076, 6.595999717712402], + [-5.441250801086426, -3.319579601287842], + [8.873883247375488, -2.625361204147339], + [-1.5680376291275024, 2.9058711528778076], + [0.7781479358673096, -0.19226504862308502], + [-4.335454940795898, 3.265416145324707], + [-6.7012834548950195, 7.954171180725098], + [-1.9638926982879639, -0.10014313459396362], + [-2.7552831172943115, 1.8368865251541138], + [-5.272658824920654, 7.983729362487793], + [-4.716795921325684, -1.878836750984192], + [-2.6974101066589355, 0.35655319690704346], + [2.8670432567596436, -6.347326755523682], + [-1.8762850761413574, 2.5234203338623047], + [8.779766082763672, -2.362847089767456], + [5.578180313110352, -1.2004963159561157], + [-6.440176010131836, 7.945309638977051], + [-2.955683469772339, 2.8268744945526123], + [-2.1175124645233154, 2.378037929534912], + [6.412542819976807, -2.0605881214141846], + [-2.491121530532837, -0.6762062311172485], + [-0.10680574923753738, 0.9572957754135132], + [6.233718395233154, -2.0076639652252197], + [-2.341259717941284, 1.4666436910629272], + [-1.953614354133606, -0.17447778582572937], + [9.683566093444824, -2.668287754058838], + [-2.921388864517212, 6.418293476104736], + [-6.560816287994385, 7.97492790222168], + [-3.1640501022338867, -2.7855045795440674], + [6.6305623054504395, -3.1508119106292725], + [2.4732418060302734, 0.7505526542663574], + [2.111147403717041, 5.214518070220947], + [-1.8446495532989502, 2.0639777183532715], + [-5.651320934295654, -2.7885098457336426], + [-5.357622146606445, 1.8534165620803833], + [-5.65397310256958, 4.1082963943481445], + [9.34261417388916, -2.5906803607940674], + [2.3744938373565674, -4.679689407348633], + [-2.4330599308013916, 1.1671010255813599], + [2.6350739002227783, -6.049042701721191], + [-0.20108133554458618, 9.57545280456543], + [-5.31841516494751, 6.275068283081055], + [-3.5250332355499268, -4.3300580978393555], + [1.0335993766784668, -6.46645450592041], + [4.026371955871582, -3.9644291400909424], + [8.128218650817871, -2.563706636428833], + [-5.989508152008057, -2.829193115234375], + [-5.674896717071533, 7.500542640686035], + [-2.428011417388916, 1.6644827127456665], + [8.412025451660156, -2.4262189865112305], + [-0.1978023648262024, 9.093701362609863], + [-6.458698272705078, 7.504179000854492], + [-0.14405041933059692, -1.0465893745422363], + [2.837437868118286, -4.2703752517700195], + [-5.889832973480225, 1.310546636581421], + [-3.9385499954223633, 1.5135763883590698], + [-7.607359409332275, -1.9295140504837036], + [-3.0541365146636963, 5.851446151733398], + [-2.7248694896698, -0.750606119632721], + [-3.6526219844818115, -0.7374517917633057], + [3.0323550701141357, -4.551730155944824], + [1.9937522411346436, 0.5410019159317017], + [-4.046153545379639, 6.467916965484619], + [-3.3250789642333984, 3.5691330432891846], + [-5.66984748840332, -6.090459823608398], + [6.380444526672363, -3.7035951614379883], + [8.146337509155273, -2.1037745475769043], + [-0.7802020907402039, 7.19769287109375], + [-4.808969020843506, -2.7654170989990234], + [-1.3185274600982666, 5.7206315994262695], + [-0.05063533037900925, -1.4986730813980103], + [-5.486175060272217, -2.8592491149902344], + [9.69369125366211, -2.6978914737701416], + [-4.269162178039551, -2.4996635913848877], + [6.965335845947266, -1.6263105869293213], + [-0.36513227224349976, 9.645747184753418], + [3.50584077835083, -3.557704210281372], + [6.516532897949219, -1.4193459749221802], + [-0.2355479598045349, 9.609794616699219], + [-4.697110652923584, 6.70570182800293], + [-4.001362323760986, -1.7103331089019775], + [-4.681560039520264, -4.0334320068359375], + [0.04057484120130539, 5.402035236358643], + [-4.834108829498291, 7.201663017272949], + [-2.1253724098205566, 2.7604122161865234], + [3.23614501953125, -7.06632137298584], + [-4.324798107147217, -3.113192081451416], + [-3.558600902557373, 0.6054580211639404], + [0.45816534757614136, -4.619210243225098], + [-6.036442756652832, 5.504722595214844], + [0.5485240817070007, -0.7599965929985046], + [-4.753407955169678, 3.622512102127075], + [-2.7111241817474365, 3.133328914642334], + [-3.6184027194976807, -3.6834094524383545], + [-5.294626712799072, 6.6989006996154785], + [2.167104721069336, -3.704115152359009], + [-0.8109233975410461, 8.563701629638672], + [-5.16864538192749, 1.3124275207519531], + [-2.1956076622009277, 2.223085641860962], + [-6.76383638381958, 8.175542831420898], + [-2.147710084915161, -0.6056220531463623], + [-5.37363862991333, -1.1636004447937012], + [-0.15666764974594116, 9.89175796508789], + [-7.156606674194336, 1.2846418619155884], + [-6.097250461578369, -2.7245354652404785], + [-2.691136360168457, -1.9844651222229004], + [-3.7918601036071777, -2.225695848464966], + [-2.284203290939331, 0.6783540844917297], + [-5.705793857574463, 5.077546119689941], + [-7.195153713226318, 0.29497992992401123], + [-0.4577533006668091, -0.7874560356140137], + [-4.4185709953308105, -3.5371201038360596], + [-0.22714334726333618, 9.974783897399902], + [-2.392301321029663, 1.6460893154144287], + [-2.8073976039886475, -1.9338752031326294], + [0.7342936992645264, -6.205883502960205], + [4.608673572540283, 6.3104047775268555], + [-4.291153907775879, -3.004589796066284], + [-6.3822712898254395, -1.9870084524154663], + [-1.7279818058013916, 0.617070734500885], + [2.6538326740264893, -4.07399845123291], + [-5.71009635925293, 2.258943557739258], + [2.983793020248413, -4.605691909790039], + [-5.067089557647705, 6.349941253662109], + [1.4594831466674805, -3.741255760192871], + [-0.534791886806488, -0.7687259912490845], + [-6.091851234436035, 7.295150279998779], + [-0.43735456466674805, 9.609187126159668], + [-2.4393820762634277, 1.536958932876587], + [8.73792839050293, -2.2611210346221924], + [-2.126556873321533, 0.45591914653778076], + [-4.859192848205566, -1.6045292615890503], + [-0.3531622290611267, 10.642892837524414], + [-6.327053546905518, 7.7312822341918945], + [-0.4136314392089844, 9.135282516479492], + [2.895601987838745, -4.519495010375977], + [-5.099193096160889, 2.423922061920166], + [1.7709665298461914, 5.2796807289123535], + [6.964305400848389, -1.5960732698440552], + [7.845300197601318, -2.5011258125305176], + [-5.796793460845947, 3.6220901012420654], + [1.924851655960083, -3.274319648742676], + [9.122612953186035, -2.464256525039673], + [-5.717027187347412, 6.764269828796387], + [-2.7888400554656982, 2.1483705043792725], + [1.4796748161315918, -3.1916043758392334], + [-4.062424182891846, -2.8180785179138184], + [0.520944356918335, 8.479734420776367], + [2.9972403049468994, -4.501920223236084], + [7.613998889923096, -1.3673964738845825], + [-8.031028747558594, 9.782605171203613], + [-3.6990602016448975, -4.751636028289795], + [6.7359089851379395, -2.462162971496582], + [-0.16270563006401062, -0.5888124704360962], + [1.924511194229126, 1.6011149883270264], + [-4.635986804962158, -4.618005752563477], + [-5.5775251388549805, 4.399231910705566], + [-0.12437491863965988, -1.2284940481185913], + [1.7808811664581299, 1.7091890573501587], + [-4.290351390838623, -3.732450246810913], + [-2.1655449867248535, 2.7746291160583496], + [-7.501676082611084, -1.1281627416610718], + [-4.138365745544434, -2.8045871257781982], + [2.1941707134246826, 5.803030014038086], + [2.757361650466919, -4.263516426086426], + [3.213411331176758, 0.8691074252128601], + [-4.5937089920043945, -2.117251396179199], + [10.093226432800293, -2.8331618309020996], + [-4.3356032371521, -2.8813326358795166], + [6.94488000869751, -1.7368385791778564], + [-3.9169750213623047, -1.8593319654464722], + [-5.812994480133057, -1.3521209955215454], + [-4.2810468673706055, 5.900559902191162], + [-4.086510181427002, 0.8223938941955566], + [3.2824182510375977, -5.320040702819824], + [-5.65207052230835, 7.211338996887207], + [-3.285374641418457, 5.631353855133057], + [0.8023225665092468, 0.1348842978477478], + [3.0359458923339844, -3.395911693572998], + [2.376703977584839, 0.896881103515625], + [-4.31887674331665, 4.20577335357666], + [-2.2897913455963135, 0.6856964826583862], + [1.3770756721496582, -6.542538642883301], + [-0.22338372468948364, 10.579338073730469], + [-4.589113712310791, -2.7325246334075928], + [2.533334493637085, -3.8034305572509766], + [9.13109302520752, -2.5092103481292725], + [0.5155076384544373, -1.1054253578186035], + [-2.405705213546753, 2.2520430088043213], + [-0.005661912262439728, -0.6650619506835938], + [2.762249231338501, -4.548840522766113], + [6.019552707672119, -1.3272074460983276], + [-1.779130220413208, -1.1954548358917236], + [-4.184420108795166, -4.5450029373168945], + [-6.457934856414795, 8.018256187438965], + [-4.9181694984436035, 1.7564666271209717], + [1.7133772373199463, -3.9980390071868896], + [2.118720293045044, -9.743611335754395], + [1.3686997890472412, 1.1422940492630005], + [-1.0125662088394165, 9.559977531433105], + [-5.021815776824951, 7.743142127990723], + [2.484997034072876, -7.766206741333008], + [8.973475456237793, -2.435769557952881], + [-1.8113763332366943, 0.1854236125946045], + [0.7862780690193176, -5.201171875], + [3.0132782459259033, 6.463930130004883], + [-0.5785004496574402, 9.15379810333252], + [1.5135082006454468, 6.102823257446289], + [8.587174415588379, -2.4117815494537354], + [-6.757716655731201, -2.373163938522339], + [-2.5885329246520996, -0.9161931276321411], + [-4.89481258392334, 6.1208815574646], + [-2.3674988746643066, 1.8865699768066406], + [-4.812193393707275, -3.597430944442749], + [-6.311160564422607, 7.529629230499268], + [6.702287197113037, -1.2824897766113281], + [5.815959453582764, -1.3188656568527222], + [-5.434313774108887, 1.5347659587860107], + [-5.749250888824463, 2.193084239959717], + [-1.0694526433944702, 5.6107497215271], + [-6.769169807434082, 8.0264892578125], + [-0.5270592570304871, 10.098358154296875], + [8.161820411682129, -2.3047149181365967], + [-3.586634874343872, -2.1387341022491455], + [3.831112861633301, -3.565828800201416], + [-6.774621486663818, 7.987768173217773], + [-4.716262340545654, 5.079368591308594], + [6.458015441894531, -2.788088798522949], + [-3.9880664348602295, 4.794546604156494], + [-5.019680500030518, -3.104778528213501], + [1.2588729858398438, -3.2880825996398926], + [2.75901198387146, -4.493780612945557], + [-2.489636182785034, 2.018916130065918], + [-3.350336790084839, 3.7470297813415527], + [-1.8763060569763184, 3.941021203994751], + [-2.9174201488494873, -2.869459629058838], + [-4.387060165405273, 0.6056374311447144], + [6.074979782104492, -2.0599305629730225], + [-4.0508294105529785, -1.9863742589950562], + [4.28505277633667, -5.376872539520264], + [-2.3113858699798584, 0.6967441439628601], + [-6.731600284576416, 8.317317008972168], + [8.437928199768066, -2.4860434532165527], + [-2.430577516555786, -1.3980909585952759], + [1.1330089569091797, -6.200940132141113], + [1.1548964977264404, -7.103034019470215], + [0.6694081425666809, 5.149618148803711], + [-6.477108478546143, 8.125753402709961], + [-2.128732919692993, 5.718145370483398], + [-0.2911146283149719, 9.494807243347168], + [-5.136260509490967, -3.4626801013946533], + [-2.268336296081543, 2.0950677394866943], + [-2.3074982166290283, 1.416011929512024], + [2.526500701904297, -4.354028224945068], + [2.8810994625091553, -4.420501708984375], + [6.535363674163818, -1.3712174892425537], + [-2.3139383792877197, -1.604053258895874], + [-2.8106942176818848, 2.947810411453247], + [1.964376449584961, -4.37870979309082], + [-4.6179118156433105, 5.537985801696777], + [-4.050259113311768, 5.74929666519165], + [-5.584238529205322, -2.4491703510284424], + [-4.29087495803833, -2.8504812717437744], + [-5.372550964355469, -3.5668485164642334], + [3.1469333171844482, -4.8627448081970215], + [3.123589277267456, -4.992581367492676], + [-4.067410469055176, -2.196948766708374], + [8.524410247802734, -2.481196641921997], + [2.9044888019561768, -6.955131530761719], + [1.744535207748413, 0.6140708923339844], + [-0.5371056795120239, 9.977672576904297], + [-5.944954872131348, 5.402666091918945], + [-4.269192218780518, -0.22398900985717773], + [-4.904389381408691, 1.167330265045166], + [-7.78193473815918, 0.09642016887664795], + [-5.162245273590088, 0.03342288359999657], + [-4.8207688331604, -1.45375394821167], + [0.8299568295478821, -7.579293727874756], + [1.376310110092163, -4.581159591674805], + [-0.5241655111312866, 5.22355842590332], + [6.541710376739502, -1.4848874807357788], + [-1.2529723644256592, 8.306626319885254], + [9.672554016113281, -2.486372709274292], + [-5.109181880950928, 2.5145726203918457], + [-3.478289842605591, -0.9212948679924011], + [-3.878278970718384, -1.4922279119491577], + [-0.3317362666130066, 9.713889122009277], + [-6.272846698760986, -2.616835594177246], + [1.6910724639892578, 0.7943239212036133], + [-4.469627857208252, -2.6420438289642334], + [-3.986887216567993, -2.636181592941284], + [-4.039274215698242, -3.585660457611084], + [1.964935064315796, 5.530524253845215], + [-4.866207599639893, 1.4707833528518677], + [3.1600630283355713, 1.0531915426254272], + [-2.0651116371154785, 2.019411563873291], + [-0.37436598539352417, 8.699304580688477], + [-4.960967063903809, 6.645076751708984], + [-0.1688740849494934, 9.352739334106445], + [-5.2146430015563965, -2.5738699436187744], + [0.2443298101425171, -0.6004359126091003], + [-4.024174213409424, 3.929117202758789], + [-5.953670024871826, 4.956991672515869], + [-7.880518913269043, 9.738411903381348], + [-4.212689399719238, 5.389762878417969], + [-7.446821212768555, -1.897065281867981], + [-4.80356502532959, -3.7753849029541016], + [-3.180511713027954, -2.2251393795013428], + [6.043623447418213, -2.438216209411621], + [9.359804153442383, -2.5987565517425537], + [-1.617295503616333, 2.20573091506958], + [-7.751036643981934, -1.1190673112869263], + [-7.551583766937256, -1.2484943866729736], + [-2.1432712078094482, 2.867502450942993], + [-2.925886869430542, 5.4860076904296875], + [-4.374662399291992, -1.6413923501968384], + [7.137277603149414, -1.4963504076004028], + [5.388517379760742, 7.270864009857178], + [0.39641356468200684, -0.4970473349094391], + [6.274050712585449, -1.241026520729065], + [-2.5565359592437744, 2.1973586082458496], + [2.8332247734069824, -4.199100494384766], + [-4.489681720733643, -3.232581377029419], + [-4.529850959777832, -1.6066056489944458], + [2.353463888168335, 5.967262268066406], + [1.58720862865448, -6.829044342041016], + [-0.17703258991241455, 10.141193389892578], + [-0.282221257686615, 10.269222259521484], + [-4.930619716644287, -2.9032199382781982], + [-0.19456547498703003, 10.572240829467773], + [8.167098999023438, -2.1234233379364014], + [4.5197434425354, 6.928406715393066], + [-6.189538955688477, 7.736673831939697], + [-5.010356903076172, -2.3954155445098877], + [1.65000319480896, -7.742483139038086], + [-5.292544364929199, -2.7466304302215576], + [-6.426321506500244, 6.023804664611816], + [-4.803992748260498, -3.758090019226074], + [-5.599290370941162, -3.608081579208374], + [-5.834847927093506, -2.7282347679138184], + [-1.2343940734863281, 7.642928123474121], + [-4.367657661437988, 5.064820766448975], + [-3.082836389541626, 3.4402854442596436], + [7.4106926918029785, -3.0462424755096436], + [6.50540018081665, -4.124131202697754], + [7.230528354644775, -1.6018413305282593], + [-0.6933245658874512, 0.11155077815055847], + [-3.675800085067749, -2.701887845993042], + [7.672455310821533, -1.8147209882736206], + [-6.459871768951416, -2.3117847442626953], + [2.337303876876831, -2.924945831298828], + [0.5291715860366821, 6.361202239990234], + [2.2901623249053955, -6.531143665313721], + [-0.06399623304605484, -4.031043529510498], + [-1.834061622619629, 2.300027847290039], + [-5.18088960647583, -3.364910364151001], + [-4.375509738922119, 1.9323279857635498], + [9.060258865356445, -2.4501118659973145], + [-3.523486852645874, 3.7137715816497803], + [7.194217681884766, -1.4896153211593628], + [-1.1912641525268555, -1.3944915533065796], + [1.9732248783111572, 5.040698051452637], + [-4.6509552001953125, -2.1806983947753906], + [-4.264912128448486, 6.491754531860352], + [-5.739795684814453, 5.222126007080078], + [-4.01106595993042, -1.8410744667053223], + [0.662797749042511, 2.698951244354248], + [2.2141404151916504, -9.203425407409668], + [3.096714973449707, -4.677335262298584], + [-1.8369718790054321, 0.8116825819015503], + [-4.672194957733154, 1.9462188482284546], + [7.8200201988220215, -2.0213680267333984], + [2.019580602645874, -5.901984214782715], + [-2.8552029132843018, 3.476815938949585], + [2.6044256687164307, 6.250931739807129], + [-4.533103942871094, 2.585855484008789], + [2.599270820617676, -6.965291976928711], + [-5.218893527984619, 4.520853519439697], + [-6.494452953338623, 8.255562782287598], + [-1.1404492855072021, 1.4730567932128906], + [1.8618006706237793, 5.590078353881836], + [8.678277969360352, -2.345177412033081], + [0.5701003670692444, -0.8125644326210022], + [-1.2886658906936646, -0.637112021446228], + [-1.9403817653656006, 2.6028923988342285], + [-3.838805913925171, -2.5092995166778564], + [-2.895831823348999, 3.0657012462615967], + [8.895844459533691, -2.6016628742218018], + [-0.9714061617851257, -1.6814275979995728], + [1.6403746604919434, 0.20136377215385437], + [-5.543811321258545, 3.8932039737701416], + [-0.4150678515434265, 10.618143081665039], + [-0.26558417081832886, 9.272537231445312], + [8.656682968139648, -2.295212507247925], + [-3.719876766204834, 5.392642974853516], + [-4.563791751861572, 2.2561519145965576], + [-5.5199079513549805, 6.501307964324951], + [-0.2917768359184265, 9.52941608428955], + [-1.1944828033447266, -0.6044957041740417], + [0.33676815032958984, -5.524941444396973], + [-2.2999067306518555, -0.8264086842536926], + [0.03837715834379196, 2.4841768741607666], + [-6.958921909332275, 8.654070854187012], + [-4.759212970733643, 5.32271671295166], + [-5.206364154815674, -3.9408512115478516], + [-6.593770980834961, -1.5950196981430054], + [-4.736993312835693, -1.2177653312683105], + [-6.0111799240112305, -2.110243558883667], + [6.755791664123535, -4.287079811096191], + [-4.452472686767578, -2.79433536529541], + [-4.933417320251465, 5.825128555297852], + [-5.7831645011901855, 7.4922380447387695], + [-0.13441699743270874, 9.737350463867188], + [2.1003577709198, -5.386061668395996], + [-2.1845428943634033, 2.636448621749878], + [3.769801139831543, 6.928548336029053], + [-4.1872406005859375, -2.7908003330230713], + [-6.25030517578125, 7.514014720916748], + [-5.2806291580200195, 5.652698516845703], + [-7.919239521026611, -1.7331147193908691], + [-4.8915486335754395, -1.4145700931549072], + [-5.665019989013672, -2.6772029399871826], + [-5.383747577667236, -4.027249336242676], + [-1.8400615453720093, 2.3240039348602295], + [-5.956965923309326, 4.184251308441162], + [-0.2570149898529053, 10.198234558105469], + [0.8019967675209045, 6.612302780151367], + [-2.4183835983276367, 1.2925313711166382], + [2.6484909057617188, -6.447293281555176], + [-2.3366026878356934, 1.0598832368850708], + [-5.5225372314453125, 2.731607675552368], + [2.0945723056793213, -5.1352386474609375], + [-6.209896564483643, -2.5679752826690674], + [-5.542481899261475, 5.965047359466553], + [-5.361776828765869, -2.24804425239563], + [-1.1970791816711426, 9.673797607421875], + [3.2285635471343994, 0.30417174100875854], + [3.399590253829956, 6.863944053649902], + [3.1708240509033203, -4.887379169464111], + [-2.937878370285034, -0.04850352182984352], + [1.7944005727767944, -3.447233200073242], + [-2.004418134689331, 0.7061631679534912], + [8.891623497009277, -2.5504510402679443], + [-4.94967794418335, -1.2098989486694336], + [-6.256828784942627, 7.4671101570129395], + [-1.2445646524429321, 1.4574745893478394], + [8.611727714538574, -2.4516756534576416], + [-3.937790632247925, -1.108137845993042], + [-0.1838015913963318, 9.8192777633667], + [3.094851493835449, -4.675095558166504], + [-0.19812345504760742, -0.9050561785697937], + [-6.987735748291016, -1.8019686937332153], + [-2.04105281829834, 1.2983310222625732], + [-1.8744442462921143, -3.2349982261657715], + [-4.742310047149658, -2.421250581741333], + [-6.214022159576416, 7.678356170654297], + [-5.417491912841797, 2.4097681045532227], + [-0.17545264959335327, 10.192882537841797], + [3.079763412475586, -4.766325950622559], + [-4.242415904998779, -1.1705135107040405], + [-5.1924309730529785, -1.0507780313491821], + [-0.4451531767845154, -0.24104344844818115], + [-4.491207599639893, -3.320953130722046], + [0.9660748839378357, -5.942852020263672], + [-2.3272204399108887, -2.296846866607666], + [-0.24227851629257202, 9.413506507873535], + [-4.359053611755371, -2.7422027587890625], + [-5.110167503356934, -1.5168265104293823], + [2.3310277462005615, -3.512265920639038], + [5.6860785484313965, -1.189625859260559], + [-0.2228202223777771, 10.244359970092773], + [-5.148618221282959, -1.5340259075164795], + [-7.345990180969238, -1.082703948020935], + [-4.963379383087158, 3.2614808082580566], + [4.995416164398193, -0.9374890923500061], + [0.7902777791023254, -5.4570393562316895], + [-4.978635311126709, -4.296069145202637], + [0.6525677442550659, -6.119295597076416], + [3.1400482654571533, -5.0362958908081055], + [-4.487845420837402, 6.2386369705200195], + [-5.402623653411865, 1.9599889516830444], + [0.23341012001037598, 10.399085998535156], + [-5.023071765899658, 7.74247932434082], + [1.5015716552734375, -7.861004829406738], + [6.039307117462158, -2.481351375579834], + [-2.337446451187134, 0.8977336287498474], + [-3.809838056564331, -2.755478858947754], + [-5.0081305503845215, -3.9154627323150635], + [7.524394512176514, -1.7462140321731567], + [-4.516276836395264, -3.0854721069335938], + [2.9706995487213135, -4.613447189331055], + [-2.1244585514068604, 0.3347984850406647], + [2.1866519451141357, 6.053962707519531], + [-2.5424416065216064, 1.6119211912155151], + [-6.618936538696289, -1.3998085260391235], + [-6.466087818145752, -1.8077481985092163], + [6.998837947845459, -2.8213119506835938], + [-4.086136341094971, -3.278674602508545], + [1.9823894500732422, -5.45862340927124], + [-5.649796962738037, 5.613059043884277], + [-4.350240230560303, 4.654132843017578], + [-4.328170299530029, 0.13642919063568115], + [-5.436730861663818, -3.971158266067505], + [-0.17243999242782593, 9.762492179870605], + [6.270279884338379, -1.1026251316070557], + [0.5202988386154175, -0.38513094186782837], + [1.7574539184570312, 0.7637717723846436], + [2.671254873275757, -4.224998474121094], + [9.288947105407715, -2.5878355503082275], + [3.0333542823791504, -6.498545169830322], + [-7.3275556564331055, 9.0928955078125], + [0.6550988554954529, -0.5282420516014099], + [2.061633586883545, -8.348527908325195], + [-6.288557529449463, -2.570011854171753], + [-6.020836353302002, 2.9634158611297607], + [5.7264509201049805, -2.9081313610076904], + [-3.6169979572296143, -1.497025728225708], + [-2.2722256183624268, 1.8726036548614502], + [-4.490391731262207, 0.11256158351898193], + [-6.160555362701416, 7.840039253234863], + [5.402778148651123, -2.6069514751434326], + [1.6996722221374512, -8.81357192993164], + [-0.3668951988220215, -0.9701949954032898], + [3.021596670150757, 0.9645189046859741], + [-1.5157920122146606, 1.6158367395401], + [-0.45344090461730957, -0.47398877143859863], + [-6.073968410491943, 2.236388683319092], + [-1.6537256240844727, 7.19809103012085], + [-5.729478359222412, -0.6377732753753662], + [1.954864263534546, 5.617415428161621], + [-0.07824347168207169, -0.06786258518695831], + [-6.272617816925049, 8.405057907104492], + [-2.378185987472534, 1.7699288129806519], + [5.517614841461182, -0.5983408689498901], + [3.0297799110412598, -4.671186447143555], + [-4.806241512298584, 5.316061019897461], + [3.0404913425445557, -4.929754257202148], + [7.788240909576416, -2.3154122829437256], + [7.474532604217529, -2.82171893119812], + [-6.14226770401001, 7.86533260345459], + [6.835438251495361, -1.3219627141952515], + [5.3845295906066895, -1.908291220664978], + [-4.3186445236206055, -3.6768288612365723], + [5.510002613067627, 7.477304458618164], + [-3.851325750350952, -5.110774993896484], + [-4.5099968910217285, -3.753344774246216], + [-2.8878915309906006, -3.379927158355713], + [5.464981555938721, -1.0441596508026123], + [-6.206470012664795, -2.6392195224761963], + [2.790684938430786, -4.45212459564209], + [1.094457745552063, 2.9605307579040527], + [-3.447822332382202, -2.818377733230591], + [-4.6919026374816895, -3.6097218990325928], + [-0.2762620747089386, -0.5627239346504211], + [-1.0456476211547852, 3.65297532081604], + [6.695596694946289, -2.5161001682281494], + [-5.268298625946045, -3.6996450424194336], + [8.756559371948242, -2.377624273300171], + [-6.71762752532959, 1.5084114074707031], + [4.432237148284912, 7.2951741218566895], + [-1.9941250085830688, 0.27746590971946716], + [2.8978893756866455, -4.380359649658203], + [9.601578712463379, -2.692725419998169], + [-4.895726680755615, 4.0945892333984375], + [2.0325307846069336, 5.815793514251709], + [-1.4032812118530273, 0.03437462076544762], + [6.5312981605529785, -2.4258997440338135], + [3.2176451683044434, -4.8282976150512695], + [-3.8402650356292725, 4.69095516204834], + [-5.099954128265381, 7.316107749938965], + [-1.85685133934021, -2.1731183528900146], + [-2.392878770828247, 1.5024958848953247], + [1.3480339050292969, -7.914897918701172], + [3.05903697013855, 6.555274963378906], + [-3.3161017894744873, -4.3149189949035645], + [2.5118863582611084, -3.8171815872192383], + [-4.527314186096191, 0.14328604936599731], + [7.999446392059326, -1.9777804613113403], + [-2.3848767280578613, 1.9810889959335327], + [0.07224427908658981, 8.65603256225586], + [-5.312166213989258, -2.5593020915985107], + [-6.274313449859619, 8.371238708496094], + [-1.9536023139953613, 1.0642462968826294], + [5.047291278839111, -2.179079055786133], + [-2.622950315475464, -4.490674018859863], + [-5.682408332824707, 8.08610725402832], + [3.569491147994995, 4.920770645141602], + [-6.577284336090088, 7.9090447425842285], + [-6.126509189605713, 8.112979888916016], + [-5.203319072723389, -3.410921096801758], + [-4.490542888641357, -1.8139984607696533], + [-6.609035015106201, 7.821412563323975], + [8.240748405456543, -2.3559162616729736], + [-2.8047385215759277, 2.478121042251587], + [-3.7797887325286865, -3.33931827545166], + [2.5397756099700928, -4.299204349517822], + [-4.879517078399658, 5.240696907043457], + [-3.8307182788848877, 4.0013251304626465], + [-5.243765354156494, 1.2321763038635254], + [4.547427177429199, -1.1068661212921143], + [-5.233921527862549, -2.1572654247283936], + [3.15171480178833, 1.1510396003723145], + [-0.2668073773384094, 10.189189910888672], + [-2.130423069000244, -1.7714451551437378], + [-4.264126300811768, -1.3690727949142456], + [-3.383183717727661, -3.501533269882202], + [-4.584937572479248, 5.361010551452637], + [3.275982141494751, -5.209997653961182], + [-2.132779836654663, 0.5567128658294678], + [-4.709780216217041, 6.849645137786865], + [-6.65125846862793, -1.629665732383728], + [-4.0197553634643555, -1.834729790687561], + [5.566611289978027, -2.7510643005371094], + [0.4208572506904602, -3.8768622875213623], + [-6.319987773895264, 7.576444149017334], + [-5.112672328948975, 2.225022792816162], + [4.759070873260498, -0.3800481855869293], + [5.942528247833252, -1.038696527481079], + [-2.161626100540161, -0.1087946891784668], + [-4.605519771575928, -3.17728328704834], + [-2.1217572689056396, 2.3398706912994385], + [-8.318732261657715, 1.0194076299667358], + [1.3283567428588867, -6.729278564453125], + [1.6638120412826538, -6.722411155700684], + [1.7838762998580933, -7.83388614654541], + [-7.409876346588135, 9.014305114746094], + [-5.328327178955078, 5.866837501525879], + [2.0478241443634033, 1.084861397743225], + [0.8839544653892517, -4.705968856811523], + [-8.298971176147461, -1.0962270498275757], + [-5.968020439147949, -2.5456345081329346], + [1.519188404083252, -5.7548418045043945], + [9.714853286743164, -2.7183916568756104], + [2.2093403339385986, -3.918462038040161], + [0.9255855679512024, 4.750744819641113], + [-5.5813469886779785, 6.89365291595459], + [5.612980365753174, -1.815118670463562], + [6.716427803039551, -3.1205966472625732], + [-7.01218843460083, -1.635787844657898], + [2.4219462871551514, 2.589823007583618], + [-4.484740734100342, -3.9547955989837646], + [1.2078678607940674, -6.989727973937988], + [-4.075252532958984, -3.7222177982330322], + [-7.363735675811768, 9.001764297485352], + [-0.6780250668525696, 12.077142715454102], + [11.116259574890137, -3.058342218399048], + [2.9462292194366455, -5.150515079498291], + [2.6766786575317383, 5.015323638916016], + [-2.2644429206848145, 1.6022863388061523], + [-3.2903378009796143, 0.810583770275116], + [-6.530622959136963, 7.791475296020508], + [-4.972624778747559, -1.6227089166641235], + [-7.488022327423096, 9.217464447021484], + [-4.573024272918701, -5.26746940612793], + [8.342885971069336, -2.2068254947662354], + [3.033338785171509, -4.8500752449035645], + [-4.233120441436768, -2.8926472663879395], + [1.7984840869903564, -8.609314918518066], + [-5.299050331115723, 4.14506196975708], + [-5.666818618774414, -3.859194040298462], + [-3.7113559246063232, -2.852553129196167], + [2.1021344661712646, 5.837535858154297], + [-0.10531235486268997, 10.299659729003906], + [-7.064263343811035, 8.641838073730469], + [-6.953176975250244, -0.8147814869880676], + [-4.472360610961914, 5.5324296951293945], + [-5.911663055419922, 7.355493068695068], + [-0.3687397539615631, -1.110262393951416], + [6.065637588500977, -1.8773854970932007], + [-5.525279521942139, -3.487053632736206], + [3.2271883487701416, 6.410623550415039], + [-1.528214454650879, 6.379085063934326], + [-8.03711986541748, -1.0300540924072266], + [-3.3085808753967285, 4.770913124084473], + [-2.341710329055786, -0.6827228665351868], + [5.2563700675964355, 6.8241190910339355], + [-4.727962970733643, 5.368551254272461], + [1.751721978187561, 0.6036545038223267], + [-2.3014323711395264, 0.2953391671180725], + [-2.3812153339385986, 4.084929466247559], + [6.306815147399902, -1.4210377931594849], + [2.687258005142212, 0.9182348847389221], + [-5.506914138793945, -3.227602481842041], + [2.2476842403411865, 5.691404342651367], + [2.8749759197235107, -8.094291687011719], + [-0.1968713402748108, 9.7139892578125], + [-5.376672267913818, 2.891866683959961], + [2.6770458221435547, -4.19000244140625], + [-6.200317859649658, 7.923852920532227], + [2.868990421295166, 1.2523590326309204], + [-6.323774337768555, 8.178668975830078], + [-6.724374294281006, 8.51988697052002], + [-3.107149362564087, -4.521317958831787], + [2.392977714538574, -1.5410001277923584], + [3.419447660446167, -5.15234899520874], + [-0.16472750902175903, -1.0297991037368774], + [-4.781905174255371, 3.410823345184326], + [-4.467137813568115, 4.701559543609619], + [-5.8991379737854, 7.416717529296875], + [1.3497788906097412, -7.632856369018555], + [2.3305342197418213, 5.845217704772949], + [-4.338717460632324, -2.4793918132781982], + [-5.830145835876465, -3.0542492866516113], + [-0.266415536403656, 9.85346508026123], + [2.9571292400360107, -4.448763847351074], + [2.3339598178863525, 5.888518333435059], + [1.2814624309539795, 3.9108593463897705], + [-0.601388156414032, 11.522289276123047], + [-2.355649709701538, 1.0585285425186157], + [-0.12925726175308228, 9.760248184204102], + [-4.898555278778076, 4.460333347320557], + [-4.592904567718506, -2.8337438106536865], + [1.9315977096557617, -3.709394693374634], + [1.989776849746704, -6.248574733734131], + [-4.813456058502197, -2.579257011413574], + [-6.083853244781494, 5.836273193359375], + [-5.900213718414307, 5.551008224487305], + [-4.7891845703125, -3.884700059890747], + [-3.3121819496154785, 5.5684733390808105], + [1.7265512943267822, -7.007423400878906], + [6.782846927642822, -1.2032321691513062], + [5.5855302810668945, -2.523207426071167], + [-4.801892280578613, 1.642083764076233], + [-4.603152275085449, -0.5294633507728577], + [-3.4780914783477783, -2.0898399353027344], + [-2.1985762119293213, -1.041070818901062], + [-1.3435496091842651, 1.036464810371399], + [-4.1776299476623535, -3.3884801864624023], + [-4.580704689025879, 1.5910770893096924], + [3.1364781856536865, -4.720037937164307], + [-4.6525044441223145, 5.674426555633545], + [-4.486085891723633, 6.386938095092773], + [-6.51336145401001, 7.6761651039123535], + [2.193094253540039, -3.7646405696868896], + [-3.902222156524658, 4.258456707000732], + [6.466771125793457, -1.4286454916000366], + [-2.171466588973999, -2.213310480117798], + [-4.328758716583252, -2.9861295223236084], + [-2.3856303691864014, -1.947766900062561], + [0.9981785416603088, -0.033044446259737015], + [2.425255537033081, -3.6639299392700195], + [-8.093870162963867, -1.0462552309036255], + [4.867692470550537, -1.1703894138336182], + [-0.19346153736114502, -0.49483901262283325], + [-6.571792125701904, 8.112445831298828], + [7.077193737030029, -1.4368308782577515], + [-0.08102733641862869, -1.1222246885299683], + [2.8733901977539062, -4.494534492492676], + [2.072498083114624, -0.9165929555892944], + [1.2207517623901367, -5.89320182800293], + [1.0490055084228516, -6.246122360229492], + [1.5398075580596924, 5.052626609802246], + [1.4069496393203735, 0.04976293072104454], + [-5.539923667907715, -2.248603343963623], + [-0.2932496964931488, -1.2221405506134033], + [-4.703390598297119, 7.419189453125], + [-4.828333854675293, -2.115194797515869], + [-4.91326379776001, 0.14363420009613037], + [2.952263355255127, -4.58905029296875], + [2.123572826385498, -8.682004928588867], + [-3.132047653198242, 6.456199645996094], + [7.478910446166992, -2.5309364795684814], + [-2.1472928524017334, 1.4791276454925537], + [6.100351810455322, -1.0939117670059204], + [-2.538424253463745, 6.4884138107299805], + [-3.129645347595215, 1.081007719039917], + [8.486736297607422, -2.3176045417785645], + [8.245142936706543, -2.2698941230773926], + [2.2982709407806396, -6.849983215332031], + [-4.952008247375488, 4.393350124359131], + [-2.2736830711364746, 1.5200815200805664], + [-2.634888172149658, -1.1471515893936157], + [8.054980278015137, -2.567481756210327], + [-0.21882545948028564, 9.84276294708252], + [2.7026450634002686, 6.010441780090332], + [-1.3197864294052124, -2.528841733932495], + [-5.591023921966553, 7.025452613830566], + [0.03158202022314072, -0.5015310049057007], + [10.00289249420166, -2.7785751819610596], + [-0.29546529054641724, 10.699010848999023], + [-2.743551015853882, 1.748046636581421], + [-0.30072861909866333, 10.296379089355469], + [-6.161787509918213, -1.5382295846939087], + [-4.840406894683838, -0.9257176518440247], + [0.28834348917007446, -0.3603687882423401], + [9.199148178100586, -2.560537099838257], + [9.738595008850098, -3.0033206939697266], + [-4.103598117828369, -3.48746657371521], + [5.155487537384033, -0.4987228214740753], + [0.24370211362838745, -0.8029263615608215], + [8.917723655700684, -2.467539072036743], + [-0.26375457644462585, -0.9346699714660645], + [4.194483280181885, 7.271285533905029], + [-1.5678735971450806, -0.7895721197128296], + [-5.0721635818481445, 2.3936078548431396], + [-4.091546535491943, -3.6509015560150146], + [-1.5799777507781982, -1.6951978206634521], + [-2.4415700435638428, 1.9578255414962769], + [-0.6883480548858643, 6.266575813293457], + [3.3523263931274414, 6.596578598022461], + [8.79030704498291, -2.3614463806152344], + [-5.57528018951416, 5.222044944763184], + [-6.123777866363525, 3.6375081539154053], + [1.7468669414520264, 5.446751594543457], + [-0.24366921186447144, 9.83717155456543], + [-4.066661834716797, -1.6775829792022705], + [1.8247222900390625, -4.572883605957031], + [1.8421260118484497, 5.629811763763428], + [3.0559048652648926, 6.1735148429870605], + [3.4510107040405273, -4.4005584716796875], + [-7.119385719299316, 8.853340148925781], + [-6.515786647796631, 8.238080978393555], + [3.0937442779541016, -4.713735580444336], + [8.614187240600586, -2.2465908527374268], + [6.834020137786865, -3.073772430419922], + [2.4154319763183594, -3.1505911350250244], + [-6.387478351593018, 1.381018877029419], + [-7.024038791656494, -2.616530418395996], + [2.8537068367004395, -4.338650703430176], + [5.948511600494385, -2.031383514404297], + [6.5116047859191895, -3.05525803565979], + [-4.956885814666748, 5.291810989379883], + [-0.3191872239112854, 10.158102035522461], + [1.6116870641708374, 5.130357265472412], + [-1.1992156505584717, 8.850486755371094], + [-6.7788987159729, -1.7381271123886108], + [-5.440944671630859, 7.145536422729492], + [5.727038383483887, -0.9660338163375854], + [-5.800836086273193, 4.400579452514648], + [3.169583559036255, 6.319465637207031], + [-4.655742645263672, -2.2474701404571533], + [-2.6533467769622803, 2.6460726261138916], + [-2.2609732151031494, 1.7796052694320679], + [3.1201791763305664, -0.6642377376556396], + [-2.697946071624756, 1.5487250089645386], + [2.117701768875122, -9.89541244506836], + [2.7529242038726807, -5.650938034057617], + [2.2325439453125, -3.9195055961608887], + [-6.297450542449951, 1.2155464887619019], + [-0.3091340661048889, 10.798258781433105], + [3.294158697128296, -4.9185791015625], + [-3.717745304107666, 5.642733573913574], + [-4.81384801864624, -1.4471694231033325], + [1.9107178449630737, -9.044903755187988], + [-4.475646018981934, 5.022490501403809], + [3.8211324214935303, 6.825584411621094], + [-4.4698262214660645, 5.105466842651367], + [-2.943692922592163, -1.9975720643997192], + [2.327925443649292, 6.0810346603393555], + [-8.21192741394043, -1.130933403968811], + [-4.309703350067139, -3.8605549335479736], + [4.246674060821533, -0.7030686140060425], + [2.9458537101745605, -4.4429473876953125], + [-0.5243833661079407, 9.754531860351562], + [-2.282257318496704, 1.7587312459945679], + [-6.945681095123291, -0.8643258810043335], + [-5.738137722015381, 7.158021450042725], + [5.31643009185791, 7.207753658294678], + [2.6676595211029053, -4.075869083404541], + [-5.740817546844482, -0.4403790235519409], + [-6.530755519866943, 4.316115379333496], + [-2.8254246711730957, -4.093721389770508], + [-5.06796407699585, -3.0035483837127686], + [-4.8786821365356445, 2.2553000450134277], + [-1.3324198722839355, 5.779658317565918], + [8.872238159179688, -2.3455417156219482], + [1.6383715867996216, -2.9859211444854736], + [3.198559045791626, -5.089160919189453], + [-4.2811665534973145, -2.830409288406372], + [-2.179903507232666, 1.792898416519165], + [-5.202301979064941, -2.7916722297668457], + [3.1314072608947754, -4.753374099731445], + [6.918888092041016, -2.0886423587799072], + [0.4668106436729431, -0.8310659527778625], + [-4.738877296447754, -2.5019350051879883], + [4.955484390258789, 7.298184871673584], + [-5.292799472808838, -3.8456897735595703], + [2.48179292678833, 6.064973831176758], + [2.0998871326446533, -7.4896039962768555], + [-1.9128233194351196, 0.7009276151657104], + [-7.6937432289123535, -1.366564154624939], + [1.5394431352615356, -5.416385650634766], + [-2.5906713008880615, -0.8452603816986084], + [1.878026008605957, -7.671504020690918], + [1.9058823585510254, 5.305351257324219], + [-5.352237224578857, 1.0911837816238403], + [-4.976276874542236, -2.964688777923584], + [-5.163843631744385, -3.70137357711792], + [-6.068813800811768, -2.982645273208618], + [1.9155919551849365, -3.4640605449676514], + [-0.3091059923171997, 9.787663459777832], + [9.152569770812988, -2.4488885402679443], + [-4.279956340789795, -1.3098636865615845], + [2.3367977142333984, 0.9395224452018738], + [-4.306897163391113, -0.9308143854141235], + [-5.952507972717285, -2.5384726524353027], + [2.2529094219207764, -3.4784700870513916], + [-0.19968962669372559, 9.02360725402832], + [-5.311215877532959, -3.474026918411255], + [-3.380540609359741, 6.291388034820557], + [0.7799649834632874, -6.811549186706543], + [-0.7487131357192993, 4.646236419677734], + [-0.3399423360824585, -1.7492151260375977], + [2.556349039077759, -6.952934741973877], + [7.689545154571533, -2.0464487075805664], + [1.7956914901733398, 5.401512145996094], + [-0.30724436044692993, 9.277462005615234], + [2.4999380111694336, -8.1304931640625], + [-2.948793649673462, -4.410411357879639], + [-2.8837623596191406, 2.3394124507904053], + [-4.853570461273193, -3.7023231983184814], + [-7.62690544128418, -2.2701175212860107], + [2.6389386653900146, -4.296103000640869], + [-0.18968021869659424, 9.448074340820312], + [4.170260429382324, -1.0594850778579712], + [-6.1826395988464355, 5.0284552574157715], + [8.519116401672363, -2.1153998374938965], + [-6.231296062469482, -0.836129903793335], + [-1.344511866569519, -1.5478991270065308], + [-6.0514912605285645, -0.5378336310386658], + [-7.6804728507995605, 9.561226844787598], + [2.207839250564575, -7.279522895812988], + [-3.795114278793335, 6.089020729064941], + [-2.8670451641082764, 2.7666101455688477], + [1.9572432041168213, -4.084316253662109], + [3.0136125087738037, -4.540097236633301], + [-0.23214653134346008, -0.8415970206260681], + [-0.5432940721511841, 9.21304988861084], + [5.6784162521362305, -1.128136396408081], + [-4.286217212677002, -4.697298049926758], + [5.670871734619141, -1.8182638883590698], + [-5.8035502433776855, -1.5532180070877075], + [-4.552595138549805, 0.08585447072982788], + [6.666345119476318, -1.561305284500122], + [1.1967415809631348, 0.03251266106963158], + [0.2688336968421936, -4.5030107498168945], + [4.94836950302124, 6.905025482177734], + [5.994626522064209, -1.0613497495651245], + [1.7171149253845215, 5.448718070983887], + [-5.157301425933838, -0.6073745489120483], + [2.6944539546966553, 0.7360614538192749], + [-0.06927642971277237, -0.9106185436248779], + [-0.3715705871582031, 9.310197830200195], + [-0.33204635977745056, -0.640178918838501], + [1.7247657775878906, -3.119884729385376], + [-2.5763914585113525, 3.573880910873413], + [2.3916079998016357, -7.828427791595459], + [1.5608065128326416, 0.15130220353603363], + [2.389712333679199, -7.808773040771484], + [8.165786743164062, -2.099973201751709], + [-5.104907512664795, -2.8005897998809814], + [-4.765428066253662, 5.423742294311523], + [5.9351019859313965, -0.8760648965835571], + [-4.279460906982422, -2.6804041862487793], + [-6.621341228485107, 3.986741304397583], + [2.127290964126587, -10.368595123291016], + [-5.684672832489014, 2.478421449661255], + [3.0943033695220947, -6.502763748168945], + [-4.920738697052002, -2.022566556930542], + [-4.663313388824463, 6.26695442199707], + [-2.518551826477051, 2.1350393295288086], + [-0.32540786266326904, -1.4518717527389526], + [4.495413303375244, 7.078606128692627], + [-5.063450336456299, -2.97255539894104], + [-0.4575939476490021, 6.209785461425781], + [-4.790102958679199, 4.342007637023926], + [5.038720607757568, -1.0708541870117188], + [-3.9082462787628174, -3.3848888874053955], + [-5.124964237213135, -5.0158185958862305], + [-6.648436069488525, -1.7393640279769897], + [0.10016506165266037, 9.983896255493164], + [-3.241501569747925, -2.120201826095581], + [-2.030118465423584, 2.256007671356201], + [-4.9015889167785645, -4.094686508178711], + [2.276406764984131, -5.288576126098633], + [-2.3269965648651123, 0.17918461561203003], + [-5.658597469329834, -1.915047526359558], + [2.3507654666900635, -8.096250534057617], + [-2.3826897144317627, 2.353736639022827], + [-2.486020088195801, 2.502579689025879], + [3.7502176761627197, -3.630690574645996], + [5.582677364349365, -1.46916663646698], + [8.836653709411621, -2.4374754428863525], + [-6.637450695037842, -0.9824124574661255], + [-5.684901714324951, 2.9711415767669678], + [8.784436225891113, -2.1903421878814697], + [-6.342906475067139, 4.97113561630249], + [-6.533246994018555, 7.806514263153076], + [8.619585037231445, -2.5052077770233154], + [-0.8342393040657043, 9.532230377197266], + [-3.9942779541015625, -1.3238569498062134], + [-4.875524997711182, -2.017673969268799], + [-0.31750771403312683, -0.7976282835006714], + [-7.4210638999938965, -2.0345427989959717], + [-3.9923758506774902, -4.7885637283325195], + [9.091498374938965, -2.647704601287842], + [8.421805381774902, -2.191565990447998], + [1.8210753202438354, 2.2324864864349365], + [-4.381036281585693, 6.840419769287109], + [-0.3140712380409241, 9.971965789794922], + [-1.351710557937622, 5.665935516357422], + [-4.3379597663879395, -2.4307477474212646], + [-2.591616153717041, -3.6843554973602295], + [-4.362581253051758, -2.4392311573028564], + [7.888522148132324, -1.8797171115875244], + [2.7080607414245605, -4.159247398376465], + [-0.4549609422683716, 9.457338333129883], + [8.62691593170166, -2.3376595973968506], + [-4.33124303817749, -0.7893445491790771], + [-7.079366207122803, 8.561272621154785], + [4.6676411628723145, -1.1086570024490356], + [-0.2824244499206543, 10.185571670532227], + [5.7905402183532715, -0.996552586555481], + [0.06109916418790817, 1.0561766624450684], + [-4.956146240234375, 7.01954460144043], + [6.240428447723389, -1.1964962482452393], + [-5.065196514129639, -3.2031428813934326], + [3.090172290802002, -4.752241134643555], + [8.03514575958252, -3.056314706802368], + [-2.106739044189453, 1.5757755041122437], + [2.4040188789367676, 0.8474984169006348], + [-2.379081964492798, -1.2119932174682617], + [-0.31388071179389954, -0.9626133441925049], + [-4.147156238555908, 1.8538180589675903], + [-2.368243455886841, 1.802553653717041], + [-4.62662935256958, -3.057075262069702], + [5.93793249130249, -1.6434491872787476], + [1.9540536403656006, 4.941693305969238], + [-5.416281223297119, -2.5670197010040283], + [-5.209024906158447, 6.019918918609619], + [-5.36670446395874, -3.221860647201538], + [0.9325812458992004, 5.427912712097168], + [-4.218739986419678, -3.836408853530884], + [-2.3681766986846924, 2.4597864151000977], + [8.562291145324707, -2.5435593128204346], + [-5.203246116638184, -3.47495174407959], + [2.0250532627105713, -3.1740217208862305], + [-2.4470694065093994, 1.6538029909133911], + [4.90944766998291, -3.132059335708618], + [2.993352174758911, -4.707553386688232], + [-5.028212070465088, -0.6832398772239685], + [-4.3278584480285645, -3.0881991386413574], + [2.680198907852173, 0.7381981015205383], + [3.1518166065216064, -5.176715850830078], + [-5.869240760803223, 7.597616195678711], + [-4.888524055480957, 5.229557037353516], + [-2.264418125152588, 0.5153393745422363], + [4.350597381591797, -5.9835662841796875], + [2.9781501293182373, -4.794773578643799], + [-6.630454063415527, 8.444416046142578], + [-4.852741718292236, 5.198989391326904], + [2.941405773162842, -4.740839958190918], + [2.5685794353485107, -7.366564750671387], + [2.00132417678833, 5.6705121994018555], + [3.9573380947113037, -2.7314348220825195], + [2.998826265335083, -4.521334648132324], + [-3.378958225250244, -4.656672954559326], + [-5.656765460968018, 5.174116134643555], + [3.0869312286376953, -5.241751670837402], + [2.4929563999176025, -6.851721286773682], + [0.585919976234436, 0.10924537479877472], + [2.7671327590942383, -4.134726524353027], + [-5.278361797332764, 1.5873485803604126], + [2.8227484226226807, -4.541492938995361], + [-4.171916961669922, 5.6350016593933105], + [-0.15920394659042358, 9.760881423950195], + [-4.405184268951416, -3.9191977977752686], + [2.8494298458099365, -4.302958965301514], + [-0.45068758726119995, 8.836151123046875], + [5.642222881317139, 8.131363868713379], + [-3.640162229537964, -1.2262213230133057], + [0.3587186932563782, -0.5156817436218262], + [-4.86344051361084, 4.664651393890381], + [-5.486421585083008, -2.350858211517334], + [0.7520348429679871, -0.7380933165550232], + [-2.3160414695739746, -0.6451537013053894], + [-4.204355716705322, -4.055693626403809], + [-4.922646522521973, -1.4044958353042603], + [-2.5760838985443115, 6.464254379272461], + [-5.090155124664307, 6.20778751373291], + [-2.573801040649414, 2.0033490657806396], + [-3.174340009689331, 5.3200578689575195], + [-5.613556385040283, -6.087217330932617], + [2.4737470149993896, -3.99589204788208], + [-4.725984573364258, 4.9286370277404785], + [-6.1004638671875, 7.569642543792725], + [-4.310183525085449, -1.1444528102874756], + [-2.8536059856414795, -2.6047794818878174], + [-3.908679485321045, 2.9728903770446777], + [-4.165309906005859, -2.8209288120269775], + [-4.774825096130371, -2.5382027626037598], + [-4.069451808929443, 4.445192813873291], + [-2.474673271179199, -1.4013460874557495], + [2.8082387447357178, -4.523830413818359], + [-6.678243160247803, 8.602372169494629], + [-4.824288845062256, -1.9003459215164185], + [9.242862701416016, -2.586754560470581], + [6.2987470626831055, -2.6222598552703857], + [1.1474436521530151, -6.573991298675537], + [2.8293559551239014, -4.472530364990234], + [-4.328127861022949, -2.914339542388916], + [-4.5017266273498535, -2.5310862064361572], + [-0.25466424226760864, 9.451961517333984], + [-6.256134033203125, -1.495487093925476], + [8.523856163024902, -2.300168752670288], + [-2.476983070373535, -2.482548713684082], + [-6.160995006561279, 1.5729148387908936], + [-2.077073097229004, 2.4912641048431396], + [-4.466459274291992, -1.7608007192611694], + [-4.990960597991943, -3.5834453105926514], + [-2.1923458576202393, 1.7095969915390015], + [-5.960092067718506, 6.979552268981934], + [-2.3560903072357178, 2.8822805881500244], + [-3.638047933578491, 0.23339563608169556], + [9.021012306213379, -2.538222551345825], + [-5.016637325286865, -3.334911584854126], + [2.876174211502075, -4.4643144607543945], + [-5.313111782073975, -2.451244831085205], + [-6.220607280731201, 7.327998638153076], + [-5.215784549713135, -3.2880430221557617], + [-4.715061187744141, 7.527878761291504], + [2.657845973968506, -4.108721733093262], + [-4.527388572692871, -3.2968623638153076], + [2.065711498260498, 4.22464656829834], + [-5.561216354370117, 1.8241808414459229], + [-3.822983741760254, -1.3996169567108154], + [-1.9956045150756836, 0.955041766166687], + [-2.276749849319458, 0.5090857148170471], + [0.7371679544448853, -6.947328567504883], + [2.195460796356201, -3.4652035236358643], + [0.5083026885986328, 4.9794816970825195], + [1.7236735820770264, -8.093499183654785], + [-7.74160099029541, 9.393543243408203], + [-2.463458776473999, 0.892662525177002], + [2.001309394836426, 5.538524627685547], + [-5.161591053009033, 0.39263916015625], + [-7.353556156158447, 9.051778793334961], + [-3.124108076095581, -0.8264027237892151], + [-2.652294397354126, -3.590100049972534], + [-0.31004488468170166, 9.150126457214355], + [-5.074155807495117, -3.463921308517456], + [3.3546524047851562, -6.381070137023926], + [-5.520630836486816, -3.7092912197113037], + [-7.193182468414307, 8.677724838256836], + [-5.791778087615967, -3.993069887161255], + [-0.2648158371448517, -0.7585642337799072], + [6.132602214813232, -1.2249915599822998], + [-4.770352363586426, 4.089627265930176], + [-4.941522121429443, -2.5742604732513428], + [-0.9301584362983704, 0.8197522163391113], + [-0.6528695225715637, 12.26350212097168], + [1.8872358798980713, -9.072946548461914], + [3.086662769317627, -4.873427867889404], + [-4.0908074378967285, -4.235246181488037], + [9.404509544372559, -2.81520414352417], + [-3.372976303100586, -1.3272887468338013], + [9.186474800109863, -2.5418875217437744], + [2.8167362213134766, -4.5888261795043945], + [-2.237593650817871, -0.9746749401092529], + [5.280456066131592, -0.7058400511741638], + [-5.723816871643066, 3.0862739086151123], + [-6.446652889251709, 7.935311317443848], + [7.398001670837402, -3.114767074584961], + [1.8286724090576172, 1.0214895009994507], + [-5.100595951080322, 1.0376842021942139], + [-2.5075671672821045, -1.6728711128234863], + [-2.321763038635254, 3.2045226097106934], + [-0.5765635967254639, 9.405268669128418], + [1.3852055072784424, 5.700711250305176], + [-3.24892258644104, -1.5963046550750732], + [-1.2467470169067383, -1.6127554178237915], + [-5.614631652832031, -3.4799554347991943], + [6.113927841186523, -1.27625572681427], + [3.0625274181365967, -4.945578575134277], + [-4.362048625946045, -2.4320273399353027], + [2.838841199874878, -4.822693824768066], + [6.663422584533691, -3.013378858566284], + [-3.5592572689056396, -1.2702664136886597], + [2.0675437450408936, -4.508738994598389], + [3.090420722961426, -4.630683898925781], + [6.66037654876709, -1.9115676879882812], + [-0.09655372053384781, -1.4948091506958008], + [-2.0347931385040283, 0.4404423236846924], + [1.4711720943450928, -6.873312950134277], + [-3.4283978939056396, -1.4170703887939453], + [2.4187135696411133, -3.6737000942230225], + [-3.967494249343872, -0.42674487829208374], + [-3.995668649673462, 5.903936386108398], + [-5.112389087677002, -6.994501113891602], + [1.69489586353302, 5.219203948974609], + [-4.698602676391602, -0.17965513467788696], + [4.28991174697876, -0.4615943133831024], + [8.994081497192383, -2.50274395942688], + [3.3733620643615723, 6.510544300079346], + [9.2332181930542, -2.63041090965271], + [-1.4890080690383911, 1.4156321287155151], + [-5.003997802734375, -3.545463800430298], + [2.58756160736084, -6.741142272949219], + [0.10352437943220139, 9.825841903686523], + [-6.413943290710449, 7.903903007507324], + [2.7941389083862305, -6.113814830780029], + [7.221701145172119, -1.497188687324524], + [-0.9074372053146362, 9.087381362915039], + [3.1229560375213623, -4.675276756286621], + [-2.874866247177124, -3.0581958293914795], + [-2.9661848545074463, -1.9040087461471558], + [4.598071098327637, -6.361659526824951], + [7.146549224853516, -2.1326229572296143], + [4.732551097869873, 7.500863075256348], + [-3.688427686691284, 5.897889137268066], + [-5.433592796325684, 7.064657211303711], + [0.7202218174934387, -5.9249372482299805], + [-2.505582571029663, 1.304482340812683], + [3.006622552871704, -4.935549259185791], + [2.5097439289093018, -6.256264686584473], + [-0.18885260820388794, 10.059897422790527], + [7.272308826446533, -1.4687665700912476], + [-3.6284778118133545, -3.1563355922698975], + [-4.480717182159424, -0.6852341890335083], + [-4.782847881317139, 2.200974225997925], + [-2.8014955520629883, 2.5943403244018555], + [5.228855609893799, -1.0290151834487915], + [1.8530423641204834, -6.1414690017700195], + [0.4512912631034851, -0.904236376285553], + [-0.3328719735145569, 10.604031562805176], + [-6.718592643737793, -1.247942328453064], + [-4.279465675354004, -2.0207340717315674], + [-2.025629758834839, 1.8938595056533813], + [-2.9468767642974854, 5.609630584716797], + [-4.235819339752197, -0.8426812887191772], + [2.4182798862457275, -9.040693283081055], + [-4.577735424041748, -2.5179178714752197], + [-1.5804152488708496, 0.3784670829772949], + [1.8054046630859375, -8.288518905639648], + [3.3194658756256104, -4.983781814575195], + [-0.3392319083213806, 9.286264419555664], + [-5.027054309844971, 3.8712410926818848], + [-4.4181036949157715, 6.4520087242126465], + [-1.7695770263671875, 7.42720890045166], + [3.2086730003356934, 6.399167060852051], + [0.3002842664718628, -5.114145755767822], + [-2.397399663925171, 0.12171301245689392], + [-3.052508592605591, -0.9701682329177856], + [6.13696813583374, -3.3139607906341553], + [-4.825584411621094, -3.043997287750244], + [-2.5960659980773926, 1.9684559106826782], + [-6.703512191772461, 8.154886245727539], + [-4.2721757888793945, 0.9991997480392456], + [1.209250807762146, -0.12856727838516235], + [-2.249880075454712, -1.3429421186447144], + [5.8967204093933105, -1.3152836561203003], + [-0.37548065185546875, 10.82607650756836], + [-6.314002513885498, 0.8781906366348267], + [4.601466655731201, 7.117883682250977], + [1.6835213899612427, 1.167082667350769], + [-7.493973731994629, -0.9624909162521362], + [-0.6148102879524231, 8.801179885864258], + [1.4019410610198975, 5.130051136016846], + [-5.207026958465576, 0.009085472673177719], + [-4.922325134277344, -3.3959617614746094], + [2.488279104232788, -7.431580543518066], + [-0.3535274863243103, 10.720906257629395], + [-2.8928792476654053, 4.559185028076172], + [3.146151542663574, -4.726790904998779], + [-4.72226095199585, -2.020392894744873], + [3.1100597381591797, -6.352482318878174], + [-4.429914951324463, -6.070581436157227], + [-5.617006778717041, -3.3865504264831543], + [8.916455268859863, -2.940795421600342], + [-5.437499523162842, 4.618655681610107], + [-2.092803955078125, 2.778927803039551], + [-4.149102687835693, 4.7517008781433105], + [-6.203883647918701, 3.370964288711548], + [-6.723896026611328, 8.242937088012695], + [-0.5277715921401978, 9.246278762817383], + [-5.123161315917969, -1.3806707859039307], + [-5.260654926300049, -6.298273086547852], + [-5.507568836212158, 7.016960620880127], + [-0.4211077094078064, 10.45126724243164], + [-3.3500711917877197, -2.1173903942108154], + [-6.398500919342041, -2.085507392883301], + [-4.548525333404541, 6.116081237792969], + [3.102170467376709, -4.98176908493042], + [-0.14802312850952148, 9.542915344238281], + [-2.2229433059692383, 2.3100593090057373], + [2.0279951095581055, 5.513115406036377], + [-0.3132304549217224, 10.84495735168457], + [-4.29962682723999, -2.576246500015259], + [-7.141612529754639, 1.476382851600647], + [-1.1062781810760498, -3.026654005050659], + [-3.151066303253174, -2.0732407569885254], + [-5.746288776397705, -2.9249303340911865], + [0.7864444851875305, -0.1984127163887024], + [-0.2229253649711609, 10.006300926208496], + [-5.293365001678467, 4.661960124969482], + [5.361019611358643, -1.4647941589355469], + [-5.597031116485596, -2.922518491744995], + [-6.502555847167969, 7.773174285888672], + [-2.1951160430908203, 2.6382341384887695], + [-2.3240392208099365, -2.2878224849700928], + [2.727487325668335, -4.159737586975098], + [-2.490830183029175, 1.3035341501235962], + [-3.6337668895721436, -2.5253355503082275], + [-0.2823159992694855, 2.439359188079834], + [1.592557668685913, -0.048808638006448746], + [-0.21681654453277588, -1.4369817972183228], + [-4.381480693817139, -2.8176686763763428], + [-0.328738272190094, 9.770895004272461], + [-2.216763496398926, 0.9936869144439697], + [0.8652650713920593, -5.923735618591309], + [1.7342486381530762, -5.0235595703125], + [-2.620065212249756, 4.413928985595703], + [2.898144483566284, -4.4509782791137695], + [-1.3675830364227295, -0.47878021001815796], + [-2.3905017375946045, 2.6522703170776367], + [-2.030555248260498, 1.941419243812561], + [6.196857929229736, -2.7573964595794678], + [9.539338111877441, -2.6736958026885986], + [-3.1421663761138916, -2.129410982131958], + [-0.34830111265182495, 9.560342788696289], + [8.44642162322998, -2.3701913356781006], + [2.1196129322052, 1.548547625541687], + [2.604749917984009, -3.821110725402832], + [1.1030714511871338, -6.322568893432617], + [-0.20191305875778198, 10.425053596496582], + [3.147315740585327, -4.7369771003723145], + [6.154900550842285, -2.5069828033447266], + [-5.245457172393799, -3.2425296306610107], + [-5.617067337036133, -2.376823663711548], + [-2.1289472579956055, 0.29592519998550415], + [2.1491763591766357, -7.356766700744629], + [3.10772967338562, -4.655280113220215], + [-6.192060470581055, -2.1095592975616455], + [1.2118068933486938, 5.223304748535156], + [-4.481597423553467, -2.329425096511841], + [2.310107946395874, -7.783151626586914], + [-4.46457052230835, -0.6309823393821716], + [2.5096068382263184, -5.077118873596191], + [9.08870792388916, -2.544125556945801], + [-6.281426906585693, -2.3390204906463623], + [-4.842257499694824, -0.04558402672410011], + [-2.768859624862671, -3.8372721672058105], + [-2.0087532997131348, 2.028505563735962], + [-5.615348815917969, 6.698464393615723], + [-5.2909255027771, -4.0020432472229], + [-0.4210657477378845, 10.328824043273926], + [-6.334153652191162, -1.5423983335494995], + [-1.8264455795288086, 2.7247064113616943], + [-5.0189056396484375, 6.345503807067871], + [-2.206645965576172, 3.06443452835083], + [3.174687147140503, -4.747221946716309], + [2.4904119968414307, -3.6659533977508545], + [-7.839799404144287, -0.5255320072174072], + [-3.8260552883148193, 2.9694223403930664], + [-4.2409348487854, -1.916007161140442], + [0.5371043682098389, 0.21713948249816895], + [9.12940788269043, -2.6244823932647705], + [-5.6040849685668945, 5.380692481994629], + [0.29985278844833374, -0.6603043079376221], + [5.299245357513428, -0.8710450530052185], + [-0.30948853492736816, 9.667498588562012], + [-0.19554105401039124, -0.5466772317886353], + [-4.190340995788574, 6.536452770233154], + [-3.959935426712036, -1.6747570037841797], + [-5.569597244262695, 7.764614105224609], + [-1.6338986158370972, 1.5434592962265015], + [-3.3151891231536865, 0.5928962230682373], + [-6.144197463989258, 7.57283878326416], + [-1.7454860210418701, 5.640149116516113], + [-2.55564022064209, -3.849594831466675], + [0.8269153833389282, -0.18496185541152954], + [-5.457169055938721, 6.481925010681152], + [2.8700854778289795, -2.230405807495117], + [-1.6674063205718994, 3.864694356918335], + [-4.692925453186035, -2.5365912914276123], + [0.5044712424278259, -5.572279930114746], + [1.6780380010604858, -5.985039234161377], + [3.210071086883545, -4.794036388397217], + [-4.547861576080322, -2.457510471343994], + [-2.4538445472717285, 1.0419425964355469], + [4.927304744720459, -4.303326606750488], + [-3.5139572620391846, 3.2248923778533936], + [-5.274573802947998, 5.976625919342041], + [-5.253103733062744, 7.814685344696045], + [5.9960174560546875, -1.2741698026657104], + [3.9909298419952393, 6.992223262786865], + [8.987422943115234, -2.516967535018921], + [-3.368387222290039, -3.9758059978485107], + [-5.376371383666992, 4.9930500984191895], + [-0.20662039518356323, 9.88245964050293], + [-0.661978542804718, 8.811427116394043], + [2.3536765575408936, 5.939935684204102], + [-2.751182794570923, 1.7894673347473145], + [-0.5476455092430115, 12.136171340942383], + [-2.1595165729522705, 2.2369604110717773], + [-2.3643620014190674, 0.3631511926651001], + [8.229166984558105, -2.14713716506958], + [-5.738072872161865, 6.859283447265625], + [-2.1749370098114014, 1.3548451662063599], + [-2.8202731609344482, 1.7229005098342896], + [2.539196729660034, 5.643604755401611], + [3.053339719772339, -4.694038391113281], + [2.680159568786621, -4.050768852233887], + [-2.4518706798553467, 1.7878475189208984], + [9.195777893066406, -2.5674192905426025], + [1.62193763256073, -8.294904708862305], + [-7.325742721557617, -1.2336937189102173], + [0.37265461683273315, 9.75721263885498], + [-2.529599905014038, 1.7996037006378174], + [2.626119375228882, -7.207447052001953], + [-7.175210952758789, 8.822382926940918], + [-6.849419116973877, -0.961026668548584], + [7.848553657531738, -1.8993817567825317], + [-3.1379854679107666, -0.8436235189437866], + [-2.7139270305633545, -3.6617038249969482], + [-5.570270538330078, -2.7138891220092773], + [-8.28476619720459, 10.095398902893066], + [-0.13683182001113892, 9.549495697021484], + [-0.6024178266525269, -1.907103180885315], + [1.666101098060608, 5.10290002822876], + [-4.695103645324707, 5.720986366271973], + [2.3565547466278076, 1.2806037664413452], + [-1.4971961975097656, -1.0808417797088623], + [-6.366343021392822, 7.794611930847168], + [-1.903458833694458, -1.2103745937347412], + [-4.831238269805908, 6.869000434875488], + [10.8307466506958, -2.967423677444458], + [2.0505263805389404, -3.668144941329956], + [2.5520741939544678, -5.288328647613525], + [-5.1582112312316895, 2.481610059738159], + [6.079222202301025, -1.2600122690200806], + [-2.6849377155303955, 3.351142168045044], + [5.8436455726623535, -1.2405108213424683], + [2.2376959323883057, 5.9208478927612305], + [-5.864687919616699, -2.5223567485809326], + [-0.6279186606407166, -0.6814353466033936], + [2.347306966781616, -3.7020039558410645], + [-2.397454023361206, 2.5962541103363037], + [-4.252556800842285, -4.6034746170043945], + [-6.496745586395264, 1.8335756063461304], + [-2.288677215576172, 0.5617550611495972], + [-0.5172426104545593, 10.5853271484375], + [-0.19239383935928345, 10.642939567565918], + [-7.376802444458008, 8.964035034179688], + [-5.352537631988525, -5.9643659591674805], + [-0.4040148854255676, 9.475067138671875], + [-1.9427638053894043, 0.6592100858688354], + [-8.4345703125, 10.419760704040527], + [-3.6888606548309326, -4.113866806030273], + [5.196423053741455, 7.646880149841309], + [-7.0674333572387695, -2.0032267570495605], + [-4.670269012451172, 0.40505552291870117], + [-4.0005903244018555, 6.558696746826172], + [-2.1758649349212646, -1.756088137626648], + [-2.5685014724731445, 2.293095827102661], + [2.1788411140441895, 5.93326473236084], + [5.29845666885376, -1.2449322938919067], + [-3.8514435291290283, 2.678412675857544], + [6.86211633682251, -1.6173619031906128], + [-2.512700319290161, 1.8870861530303955], + [-4.74600076675415, -3.505826234817505], + [-2.172991991043091, 2.9346213340759277], + [-0.15985524654388428, 10.155729293823242], + [2.3619930744171143, -4.015202045440674], + [2.966438055038452, -5.701379776000977], + [0.3810846209526062, 9.274938583374023], + [-2.6325764656066895, -2.5891072750091553], + [2.7452032566070557, -6.569718837738037], + [-6.143352031707764, 4.703479766845703], + [2.8035809993743896, -5.135408401489258], + [2.5543227195739746, -4.83986234664917], + [6.058558464050293, -1.2135043144226074], + [1.5931479930877686, 5.2088847160339355], + [-0.215212881565094, 9.773488998413086], + [2.0365631580352783, 5.640446186065674], + [-5.18132209777832, 5.846893310546875], + [2.9933454990386963, -4.693133354187012], + [-0.06795168668031693, 9.963150978088379], + [2.2120678424835205, -5.7383623123168945], + [-4.627438545227051, -3.8694159984588623], + [-4.6377339363098145, -3.7132210731506348], + [2.4260592460632324, -4.154202461242676], + [6.851668357849121, -1.5418916940689087], + [-4.560987949371338, -3.4333655834198], + [1.5982258319854736, -2.845456838607788], + [-0.23333781957626343, 9.480411529541016], + [-5.071084499359131, 7.925809383392334], + [-5.209407806396484, 8.180906295776367], + [1.0408138036727905, 0.4451816976070404], + [-0.30632567405700684, 10.539809226989746], + [-2.407641649246216, 2.684936046600342], + [-5.476038932800293, -0.5455202460289001], + [-4.358874797821045, -1.7125424146652222], + [-2.6578288078308105, 1.5562419891357422], + [-0.39677029848098755, 11.063462257385254], + [-0.12978428602218628, 10.4884033203125], + [-4.997637748718262, -3.0938103199005127], + [1.1445305347442627, -6.311835289001465], + [-1.287962794303894, -0.11788478493690491], + [1.2972643375396729, -6.814569473266602], + [5.598987102508545, 7.631587028503418], + [7.826585292816162, -1.6509357690811157], + [2.8199615478515625, -6.254751682281494], + [-3.704342842102051, -2.410303831100464], + [-0.8400916457176208, -2.1410109996795654], + [-4.525498390197754, 5.627685546875], + [8.921515464782715, -2.421254873275757], + [3.345932722091675, -5.406307220458984], + [-1.0692269802093506, -2.7156028747558594], + [-5.184591293334961, 0.37471628189086914], + [-3.192549467086792, 4.9719390869140625], + [-0.1574968695640564, 10.01828670501709], + [-5.291069030761719, 6.332576274871826], + [-5.429682731628418, -2.22406268119812], + [-3.7988154888153076, 6.389214515686035], + [9.488167762756348, -2.5255796909332275], + [-4.510005474090576, 5.569213390350342], + [1.8714791536331177, -8.3988037109375], + [-3.480210542678833, -4.748994827270508], + [1.9645559787750244, 5.389320373535156], + [-1.4287207126617432, -2.8719098567962646], + [2.8480114936828613, -4.302227973937988], + [2.1586573123931885, 6.01066780090332], + [-0.2793757915496826, 10.878360748291016], + [0.9643729329109192, 0.8655251264572144], + [-2.6805810928344727, 1.1136667728424072], + [6.615114688873291, -2.733747959136963], + [-7.761617183685303, -1.3976768255233765], + [-4.25844144821167, -1.4139848947525024], + [1.7261202335357666, -3.197251081466675], + [-0.1440107524394989, -0.9614180326461792], + [-6.328112602233887, 7.871876239776611], + [-0.37913191318511963, 11.371997833251953], + [-2.5247433185577393, -1.3949013948440552], + [9.471600532531738, -2.647944211959839], + [-6.498209476470947, 7.7539825439453125], + [-4.194981098175049, -4.114957809448242], + [-4.205165386199951, 5.968441963195801], + [-5.301172733306885, -4.13679838180542], + [-3.036756753921509, -4.972745895385742], + [0.3114514946937561, -0.9545465707778931], + [-0.6374544501304626, 9.171083450317383], + [-2.8188674449920654, 4.956920623779297], + [-4.853507995605469, 6.538747787475586], + [0.482660710811615, 8.844694137573242], + [-1.2739381790161133, 4.9794535636901855], + [-5.688368320465088, 7.214743614196777], + [-6.303116321563721, -2.3610732555389404], + [7.717544078826904, -2.20155930519104], + [-0.1691001057624817, 9.740653038024902], + [9.409370422363281, -2.436542272567749], + [2.054428815841675, -5.269057273864746], + [5.920333385467529, 7.318764686584473], + [-5.7393317222595215, -2.521746873855591], + [-3.933029890060425, 3.9317009449005127], + [7.310225963592529, -1.6641781330108643], + [6.8635573387146, -1.2860716581344604], + [-4.666823387145996, 5.144288063049316], + [-6.7410712242126465, -0.21795010566711426], + [-0.5348857045173645, 12.087655067443848], + [2.0507354736328125, -7.883571147918701], + [-2.016918182373047, 2.3869593143463135], + [7.219771862030029, -2.647386074066162], + [-1.370464563369751, 0.06687483191490173], + [2.2816054821014404, 5.815338134765625], + [-3.7091972827911377, 0.3833528161048889], + [-2.2325847148895264, 1.7006992101669312], + [3.8883118629455566, 6.577968120574951], + [8.567730903625488, -2.7811479568481445], + [-6.729361057281494, 8.099602699279785], + [-5.038504600524902, -2.3119523525238037], + [4.726251602172852, 7.296722888946533], + [-0.2856881022453308, 0.9255797863006592], + [8.707938194274902, -2.499586343765259], + [0.910108745098114, 0.06574822962284088], + [-4.42592191696167, -0.1799919605255127], + [5.168491363525391, -1.7804914712905884], + [-4.4045939445495605, 3.4858837127685547], + [-0.4966430068016052, 11.396842956542969], + [1.9235508441925049, 5.298816680908203], + [-0.17799901962280273, 9.91000747680664], + [3.1098477840423584, -4.657602787017822], + [-2.404911756515503, 1.853863000869751], + [-3.691192865371704, -4.00084114074707], + [-3.6996374130249023, 5.096621513366699], + [-6.503326892852783, 7.8277740478515625], + [-3.1122353076934814, -3.8146746158599854], + [11.095059394836426, -3.027414321899414], + [6.382409572601318, -1.193943738937378], + [-2.3369829654693604, 1.090889811515808], + [-0.1506800651550293, 9.44542121887207], + [-0.2972218990325928, 10.012128829956055], + [4.987588882446289, 7.434778690338135], + [2.996098756790161, -4.531185150146484], + [-1.3461601734161377, 5.692115783691406], + [-2.866084337234497, 3.135014772415161], + [1.439922571182251, 0.794445812702179], + [6.471230983734131, -3.52091908454895], + [2.340040922164917, -11.054691314697266], + [2.3303561210632324, -5.287843704223633], + [0.15198040008544922, -1.4224284887313843], + [-5.070457935333252, -3.1695027351379395], + [8.517967224121094, -2.381253719329834], + [8.756930351257324, -2.446678638458252], + [-6.132030963897705, 7.193795204162598], + [6.910407543182373, -5.710076332092285], + [-4.745251178741455, -3.2052624225616455], + [2.016465663909912, 0.2471054494380951], + [-5.375401020050049, -3.2816550731658936], + [2.9876880645751953, -4.880791664123535], + [6.045654296875, 7.6872100830078125], + [-7.06633996963501, 8.961256980895996], + [8.826010704040527, -2.406517744064331], + [1.7977607250213623, 4.702841281890869], + [-0.9114397764205933, 10.02264404296875], + [2.8914802074432373, -4.338742256164551], + [-5.07492208480835, -1.6416289806365967], + [-0.35393625497817993, 11.357046127319336], + [1.6820484399795532, 5.143643379211426], + [3.0409183502197266, 1.4906748533248901], + [-5.5807414054870605, -2.693969488143921], + [1.9204535484313965, -3.4634149074554443], + [-3.5694711208343506, -2.27722430229187], + [0.5054724812507629, -0.9868154525756836], + [-5.760888576507568, -4.050221920013428], + [-3.3325440883636475, 5.910978317260742], + [-2.4499764442443848, 2.1330971717834473], + [-3.687692403793335, -3.479761838912964], + [5.2864508628845215, -3.7189364433288574], + [0.6007407307624817, 5.975222110748291], + [-3.9342844486236572, -3.5345256328582764], + [-0.8918915390968323, 9.725374221801758], + [3.2978389263153076, -5.513594627380371], + [2.452089548110962, -3.793388605117798], + [-6.533666133880615, -2.158250570297241], + [-2.960975408554077, -1.0656447410583496], + [-3.2322475910186768, -4.780464172363281], + [-5.1908392906188965, -2.095942974090576], + [4.624019145965576, -1.758083701133728], + [-5.491164207458496, -3.2428805828094482], + [0.6310955882072449, 0.5295711159706116], + [-4.67380952835083, 6.015660285949707], + [1.9300384521484375, 5.433374404907227], + [-2.8921072483062744, 0.6292979121208191], + [-5.768282413482666, -1.609923243522644], + [5.699090480804443, -1.1706809997558594], + [2.025383949279785, -9.750133514404297], + [2.991381883621216, -4.855475425720215], + [5.470312595367432, -1.6385000944137573], + [-3.084726095199585, -1.257686972618103], + [-0.9102792143821716, 0.9679915904998779], + [-5.199708938598633, -2.617655038833618], + [-2.8123772144317627, 1.9208745956420898], + [1.0966860055923462, -7.448986053466797], + [-7.11433744430542, -2.0832016468048096], + [-0.16139256954193115, -1.2482939958572388], + [8.530138969421387, -2.4539639949798584], + [-5.845448970794678, -3.5735857486724854], + [5.938145160675049, -2.2418601512908936], + [-1.367283582687378, 5.564897537231445], + [-2.5839345455169678, -2.2627274990081787], + [-6.057384967803955, 6.548734664916992], + [-2.0711846351623535, 0.2526705861091614], + [-2.7175629138946533, -1.651181936264038], + [-3.952644109725952, -2.925476312637329], + [-2.3962180614471436, 1.1896029710769653], + [1.4041039943695068, -7.393261909484863], + [-6.432272434234619, 8.04730224609375], + [-6.25949239730835, -2.925358533859253], + [-6.544575214385986, 1.9520946741104126], + [-2.176048517227173, 2.5157339572906494], + [-0.00575680285692215, 10.102853775024414], + [-6.026947498321533, -2.964831590652466], + [-1.2428503036499023, 10.088924407958984], + [-6.394239902496338, 1.2115819454193115], + [-4.547370433807373, 3.7620036602020264], + [-0.07317901402711868, -0.872200608253479], + [-2.5230302810668945, 1.6363747119903564], + [-0.9073960185050964, 5.834850311279297], + [0.6418582797050476, 5.611611366271973], + [-3.4358761310577393, -3.146148204803467], + [-4.061153411865234, -3.0227229595184326], + [-5.430801868438721, 2.9203977584838867], + [-2.1260392665863037, 1.5753856897354126], + [2.37713885307312, -11.125655174255371], + [-4.839701175689697, -1.1874905824661255], + [-5.83803653717041, 7.999261856079102], + [-4.074553966522217, -2.9756829738616943], + [3.171081781387329, -4.888167381286621], + [-5.229640483856201, -1.7854758501052856], + [3.161184549331665, -4.966643333435059], + [-5.744256496429443, 1.2866255044937134], + [7.065774440765381, -2.0663325786590576], + [-4.312323093414307, 4.806624412536621], + [-1.890103816986084, 0.1325291395187378], + [-3.423943281173706, -2.032508373260498], + [3.1214449405670166, -4.806784629821777], + [-4.537108421325684, 6.248477935791016], + [1.9374401569366455, 5.130257606506348], + [-2.2499988079071045, 2.499671220779419], + [-4.087970733642578, -0.8586868047714233], + [-5.18072509765625, -1.2737598419189453], + [-3.1401960849761963, -4.43729305267334], + [-5.04214334487915, -2.3861324787139893], + [2.881392240524292, -4.471681594848633], + [-5.349668979644775, -3.7377383708953857], + [-5.45720911026001, 4.413203239440918], + [-2.200483798980713, 0.9677730798721313], + [5.723086833953857, -1.2202342748641968], + [2.9434213638305664, -6.540180206298828], + [-6.0308942794799805, -2.5824265480041504], + [6.2143683433532715, -1.6909784078598022], + [3.0450332164764404, -7.475140571594238], + [-5.039177417755127, -3.4220993518829346], + [1.7954992055892944, 2.726882219314575], + [-2.050575017929077, -2.1994690895080566], + [-5.065646171569824, -3.082456588745117], + [-3.9067232608795166, -2.583690881729126], + [-1.6344233751296997, -2.6309702396392822], + [-5.261678218841553, 6.123313903808594], + [-6.801509380340576, -2.158186197280884], + [-2.2243950366973877, 2.1257927417755127], + [-4.793547630310059, -1.8409136533737183], + [4.781715393066406, -0.896305501461029], + [8.597450256347656, -2.3426239490509033], + [-1.8189191818237305, 2.545030355453491], + [-5.1352033615112305, -2.520341396331787], + [-0.10203982144594193, 10.322652816772461], + [-5.663843631744385, -6.064227104187012], + [1.4035981893539429, 9.512239456176758], + [-5.252600193023682, -0.2537423372268677], + [5.674478054046631, -2.528505563735962], + [-0.1961449384689331, 9.317607879638672], + [-3.533048391342163, -2.864011287689209], + [-3.0696380138397217, -2.687798500061035], + [-0.8534775376319885, 9.89962387084961], + [-0.27546048164367676, 9.789432525634766], + [1.8418439626693726, 5.870453357696533], + [-0.35954558849334717, 9.213979721069336], + [1.151589274406433, 5.265286922454834], + [8.852349281311035, -2.448786497116089], + [8.161827087402344, -2.069504976272583], + [0.7482950091362, -0.3963700532913208], + [2.8679258823394775, -4.501355171203613], + [8.75640869140625, -2.329355478286743], + [5.028007984161377, -2.8577048778533936], + [-4.228768825531006, -1.2853838205337524], + [-4.3176798820495605, -2.316413402557373], + [0.5860376954078674, -0.3473147451877594], + [-0.762982964515686, 9.06634521484375], + [-1.4074232578277588, 1.662683129310608], + [-5.106025218963623, -0.12011665105819702], + [-6.616316318511963, 8.195734024047852], + [-5.891636371612549, -1.2597345113754272], + [0.47427135705947876, -0.6281763911247253], + [0.9083962440490723, -6.5342326164245605], + [-0.3755534291267395, 9.714879989624023], + [-4.588359355926514, -2.4065778255462646], + [-4.937082767486572, 6.523397445678711], + [3.1369402408599854, -4.695474147796631], + [-5.735788822174072, -0.23895418643951416], + [0.4468473196029663, -5.235283851623535], + [-4.157186508178711, -0.8492308855056763], + [-2.266021490097046, 2.400379180908203], + [9.758038520812988, -2.635698080062866], + [-1.1257163286209106, -0.4051998555660248], + [-2.200716733932495, 2.770796537399292], + [1.4482240676879883, -6.006455421447754], + [6.4784369468688965, -3.5000288486480713], + [7.1514105796813965, -1.7268298864364624], + [-2.2747178077697754, 2.0477373600006104], + [-4.763272285461426, -2.169515371322632], + [-3.266619920730591, -1.8803280591964722], + [-2.682093381881714, 6.8778076171875], + [-5.256357669830322, 2.8546411991119385], + [-3.911670446395874, 3.990873098373413], + [-3.0431630611419678, -2.330545425415039], + [-0.47868651151657104, 10.879669189453125], + [9.615340232849121, -2.6816108226776123], + [-4.589797496795654, -0.04711586609482765], + [-5.466221332550049, 6.105922698974609], + [-0.6278332471847534, -1.0875743627548218], + [1.9570834636688232, 5.122855186462402], + [2.4747872352600098, -3.556572198867798], + [-4.19482421875, -1.7332484722137451], + [2.761169195175171, 5.946609020233154], + [-2.285060167312622, -1.1448473930358887], + [-6.174948215484619, 7.547133922576904], + [-4.0830769538879395, -1.5783220529556274], + [-5.949421405792236, -1.6147927045822144], + [-4.508551120758057, -1.0776276588439941], + [1.6005668640136719, 0.8767831325531006], + [-3.5723114013671875, -2.4386353492736816], + [-3.7781643867492676, 5.219079971313477], + [-5.4914374351501465, -3.1012609004974365], + [-0.251583456993103, 9.91884708404541], + [3.0518863201141357, -5.36620569229126], + [-5.900430679321289, 7.832091331481934], + [8.56655502319336, -2.330291509628296], + [-4.798778057098389, -3.3031206130981445], + [-6.475072383880615, 3.557908535003662], + [7.509213447570801, -3.177635908126831], + [-0.44547736644744873, 9.121009826660156], + [2.172139883041382, 5.477118015289307], + [-4.1004109382629395, -2.649693250656128], + [-2.9515740871429443, 2.7176356315612793], + [-4.820963382720947, -1.9916056394577026], + [1.9682323932647705, 4.832828521728516], + [1.5454477071762085, 1.35189688205719], + [-3.203460454940796, -3.869398832321167], + [-4.139998912811279, 6.249423980712891], + [-6.778586387634277, 9.019620895385742], + [-0.31882816553115845, 10.435466766357422], + [-5.45374059677124, -3.2407429218292236], + [-0.19288033246994019, 9.70467758178711], + [0.6154455542564392, -6.899431228637695], + [2.616028070449829, -7.171013355255127], + [-4.672775745391846, 7.233758926391602], + [5.905159950256348, 7.897097587585449], + [-0.14626258611679077, 10.257302284240723], + [-0.3658660054206848, 9.100092887878418], + [8.501633644104004, -2.343766450881958], + [0.23182061314582825, -4.344826698303223], + [-1.0997533798217773, 9.275032043457031], + [2.531614065170288, -6.458511829376221], + [-3.6173107624053955, -2.893092393875122], + [-4.804952144622803, -5.053103446960449], + [-1.6333271265029907, 5.9188456535339355], + [-6.216491222381592, 1.6765815019607544], + [-3.9597041606903076, -3.051025629043579], + [-5.474310874938965, -3.4438252449035645], + [-0.37530195713043213, 8.854389190673828], + [8.574670791625977, -3.232760190963745], + [0.705915629863739, -6.070432186126709], + [-4.415947437286377, 4.831634998321533], + [-2.7709238529205322, 0.5970731973648071], + [-2.780547618865967, 2.98052716255188], + [-0.23147451877593994, 9.762701034545898], + [-0.24330541491508484, -0.9071921110153198], + [-0.6295341849327087, -3.0480425357818604], + [-0.04967070370912552, 10.27684211730957], + [-3.930593252182007, -1.6956843137741089], + [-2.990046501159668, 4.813019752502441], + [0.9832246899604797, 0.6974911093711853], + [-6.443004131317139, 8.055222511291504], + [-5.820698261260986, 4.0561842918396], + [-5.855203628540039, 7.565086364746094], + [1.2854493856430054, -7.447132587432861], + [-3.322495460510254, -0.23123949766159058], + [-4.882940769195557, -4.673440456390381], + [2.676953077316284, -8.294017791748047], + [-4.249875545501709, 3.70493483543396], + [-0.23646116256713867, 9.738134384155273], + [6.862244606018066, -2.7633750438690186], + [-6.9676833152771, -1.7758594751358032], + [-6.288197994232178, 7.250018119812012], + [-4.665804386138916, -2.3251516819000244], + [-2.520995616912842, -2.138489007949829], + [-4.043580532073975, -5.152313232421875], + [-0.0009892359375953674, -0.6319932341575623], + [3.0067708492279053, 6.230537414550781], + [-2.384620428085327, -1.2777526378631592], + [2.450606346130371, -4.689711570739746], + [-3.4710676670074463, 5.5258402824401855], + [-0.24292927980422974, -0.6965289115905762], + [0.5961624979972839, 5.045908451080322], + [-4.720669269561768, -3.0389513969421387], + [-2.479478120803833, 2.1752583980560303], + [5.71637487411499, -2.21966552734375], + [1.4149607419967651, 4.898167610168457], + [1.8758512735366821, 2.1972744464874268], + [7.315634250640869, -1.5956056118011475], + [1.881081223487854, -5.1420817375183105], + [-5.766865253448486, 5.766033172607422], + [-4.062908172607422, -3.644655704498291], + [4.893370151519775, 6.536330223083496], + [-5.0407633781433105, -3.4034039974212646], + [-2.987488031387329, -2.5902836322784424], + [5.40877628326416, -3.415679454803467], + [3.1577579975128174, -4.953984260559082], + [2.264880895614624, -4.012228965759277], + [8.944340705871582, -2.9185831546783447], + [-0.753474235534668, 8.729012489318848], + [0.9169414043426514, 0.6547640562057495], + [3.0968239307403564, -4.681791305541992], + [6.3987884521484375, -2.499685049057007], + [1.4848802089691162, 0.23578161001205444], + [2.904146909713745, 6.143421173095703], + [-4.748397350311279, 4.211513519287109], + [4.873127460479736, 7.2261457443237305], + [-3.4638493061065674, -4.816059112548828], + [-0.2067025899887085, 9.557172775268555], + [-1.7240875959396362, 2.2622039318084717], + [-5.539928436279297, 8.033756256103516], + [-7.379386901855469, -1.9550175666809082], + [-6.100708961486816, 2.0471227169036865], + [1.1793261766433716, -6.05039644241333], + [-5.739581108093262, 2.5800018310546875], + [3.807194948196411, -3.448293447494507], + [8.747061729431152, -2.652028799057007], + [1.888461947441101, -6.32955265045166], + [-6.812022686004639, -1.214767575263977], + [-0.7941339612007141, -0.8798418641090393], + [3.2752420902252197, -5.3493266105651855], + [3.448476552963257, -5.788566589355469], + [-3.0992043018341064, 0.2226090431213379], + [7.117760181427002, -2.9302680492401123], + [-3.2034623622894287, 2.8116157054901123], + [-5.705634593963623, 4.173974990844727], + [-5.207099437713623, -1.9027189016342163], + [8.809884071350098, -2.4801220893859863], + [8.110762596130371, -2.9075992107391357], + [-4.200297832489014, -1.2914137840270996], + [0.9338067173957825, -7.860987186431885], + [-6.952840805053711, -1.241228699684143], + [-2.680678606033325, -4.45267391204834], + [-2.330927848815918, 1.882987141609192], + [-3.4162826538085938, -3.27439022064209], + [-1.4303109645843506, 1.3839291334152222], + [1.3722771406173706, 6.381411075592041], + [-5.051035404205322, -3.8694589138031006], + [0.21592682600021362, -4.867567539215088], + [-6.010531425476074, -1.5119215250015259], + [-2.195275068283081, -2.2645230293273926], + [-2.0139365196228027, 1.7659887075424194], + [2.7892282009124756, -4.431653022766113], + [-6.193996906280518, 7.326769828796387], + [-3.8743889331817627, -2.0505809783935547], + [-4.658015727996826, -3.6270809173583984], + [1.8365592956542969, 5.199042320251465], + [-3.456815481185913, 5.323017597198486], + [-6.244174480438232, 1.1483627557754517], + [-2.029611825942993, 2.495445728302002], + [-3.9975028038024902, -3.9611806869506836], + [-3.9218099117279053, -1.5199657678604126], + [-5.056249141693115, 1.8002046346664429], + [-4.571640491485596, 3.7521727085113525], + [-4.545814037322998, -2.7632339000701904], + [-4.2576212882995605, -3.4644699096679688], + [-4.333350658416748, -2.189304828643799], + [3.07484769821167, -4.654392719268799], + [-5.249392032623291, 7.538245677947998], + [-1.4062451124191284, 5.92257022857666], + [-0.7793588042259216, -1.1215718984603882], + [3.7205381393432617, -3.1955535411834717], + [-0.2350069284439087, -1.6261132955551147], + [-5.411679744720459, 2.517327070236206], + [1.9183554649353027, -8.531810760498047], + [-7.269118309020996, 8.522412300109863], + [-6.465504169464111, 7.924272060394287], + [9.101861000061035, -2.650804281234741], + [-4.584039688110352, -3.2925426959991455], + [-4.344176292419434, 4.951349258422852], + [-2.407857656478882, 0.30406439304351807], + [-5.268854141235352, 1.4549174308776855], + [-4.241622447967529, -3.3907859325408936], + [-2.0057380199432373, 1.0182338953018188], + [-2.7878620624542236, 6.233025550842285], + [-0.24798685312271118, 10.612350463867188], + [1.712308406829834, -3.274780750274658], + [-0.9778845310211182, 10.179130554199219], + [-2.5677924156188965, 2.277434825897217], + [2.7875521183013916, -5.660126686096191], + [-4.270595073699951, 6.575963497161865], + [1.1671373844146729, -6.076637268066406], + [3.0851404666900635, -4.837294578552246], + [-4.409065246582031, 6.995895862579346], + [-0.8036630749702454, -2.024397373199463], + [-2.3025734424591064, 1.2820641994476318], + [-6.021549701690674, -2.5817978382110596], + [-3.748835802078247, 5.769522190093994], + [-3.3684232234954834, 0.6943406462669373], + [2.086493730545044, -3.1347694396972656], + [-4.297427654266357, 4.8759613037109375], + [-5.668653964996338, -5.774365425109863], + [8.698161125183105, -2.3801305294036865], + [-4.00956392288208, -4.047343730926514], + [-0.8559941053390503, 10.11123275756836], + [8.645121574401855, -2.56197190284729], + [3.0003557205200195, -4.749873161315918], + [6.757869243621826, -3.0279269218444824], + [5.668462753295898, -1.1626940965652466], + [-3.901439905166626, 4.902355194091797], + [-5.918065547943115, -1.4496418237686157], + [-4.3481764793396, -2.8306450843811035], + [-2.250440835952759, 4.491937637329102], + [-5.687191009521484, 7.64219331741333], + [-0.15712028741836548, 10.400150299072266], + [2.6716578006744385, -5.713400363922119], + [-4.634994029998779, -3.211527109146118], + [-5.9188456535339355, 6.031734943389893], + [2.5464608669281006, -7.101680278778076], + [-4.851161479949951, 5.409498691558838], + [-5.869515419006348, 6.59028959274292], + [-6.1180853843688965, 4.479177474975586], + [-0.1988125443458557, 8.50715160369873], + [-4.8376145362854, 7.256103992462158], + [2.656470775604248, -4.418186187744141], + [-2.238882303237915, 2.3737337589263916], + [2.643000841140747, 0.7933979034423828], + [-8.17501449584961, 9.985074996948242], + [-0.9867390394210815, 9.688881874084473], + [-0.3198084831237793, 10.188846588134766], + [1.364242672920227, 4.660707473754883], + [3.158933401107788, -5.010248184204102], + [-6.424646854400635, 1.8820639848709106], + [-8.062609672546387, 10.14944076538086], + [-0.19114214181900024, 9.585870742797852], + [-7.387465953826904, -2.1455206871032715], + [-2.8175017833709717, 2.532252788543701], + [-6.810311794281006, 0.31540942192077637], + [-0.17378687858581543, -0.5968400239944458], + [-2.0256187915802, 1.6721761226654053], + [1.2593368291854858, 4.5262980461120605], + [1.4127986431121826, -6.890081405639648], + [-0.3213757872581482, 10.786235809326172], + [-7.216999530792236, -2.150789737701416], + [3.9230105876922607, 6.750124454498291], + [-0.369961678981781, 10.244903564453125], + [-0.26783788204193115, 10.281702041625977], + [-4.767577648162842, 6.335199356079102], + [-5.647431373596191, -1.290337324142456], + [-4.520630836486816, -2.018998622894287], + [-4.825160503387451, 6.337985038757324], + [-0.024707742035388947, -0.7905917167663574], + [-4.781017780303955, 6.299560546875], + [2.4862303733825684, -4.278668403625488], + [-5.807692050933838, 4.488059997558594], + [-4.371817111968994, -3.998544454574585], + [-2.647927761077881, 1.6481349468231201], + [1.5614149570465088, -8.500995635986328], + [-0.20991235971450806, -1.0888997316360474], + [-4.226339340209961, -3.0647170543670654], + [-2.2262425422668457, 0.2944794297218323], + [-5.831242084503174, 6.255738735198975], + [-4.699654579162598, 3.79030442237854], + [-2.4902734756469727, -1.901602864265442], + [-0.19298511743545532, 10.394974708557129], + [2.9726932048797607, -4.482673645019531], + [3.2684409618377686, -2.557969331741333], + [-4.034635066986084, -2.9471476078033447], + [-0.24583226442337036, 10.587234497070312], + [-4.862161159515381, -1.703305959701538], + [-4.667360305786133, -0.9090306758880615], + [-0.5083751082420349, 8.677692413330078], + [-0.3390570878982544, 10.498160362243652], + [0.4807385206222534, -0.4579627513885498], + [9.372925758361816, -2.6301374435424805], + [-3.959850788116455, -3.7021963596343994], + [-2.720484972000122, -3.6990816593170166], + [-2.137467861175537, -1.1009186506271362], + [-4.061452388763428, -6.008828163146973], + [2.860978364944458, -4.316814422607422], + [2.600545644760132, 1.511182188987732], + [-4.62976598739624, -4.264222145080566], + [-0.2315380573272705, 9.894876480102539], + [1.821958065032959, 5.6190009117126465], + [-5.267436504364014, 1.215464472770691], + [-0.2374160885810852, 10.431018829345703], + [-0.5859297513961792, -1.1869639158248901], + [-0.19251033663749695, -1.7048723697662354], + [-5.669857025146484, -2.5407204627990723], + [2.048366069793701, -8.700799942016602], + [1.9980542659759521, -9.23276138305664], + [-0.9526824951171875, -2.2385339736938477], + [-2.52541184425354, 0.4566965103149414], + [2.1569011211395264, 3.449770927429199], + [-4.3961687088012695, 1.718320369720459], + [8.393472671508789, -2.16239857673645], + [0.46729665994644165, -0.6886886954307556], + [5.880844593048096, -1.1937941312789917], + [2.5887606143951416, -4.77822732925415], + [-5.2083940505981445, 6.198930263519287], + [-2.7903287410736084, -1.3744703531265259], + [-5.0371599197387695, -2.557366132736206], + [-0.7616186141967773, 0.5547576546669006], + [8.653437614440918, -2.807471513748169], + [-4.9825358390808105, -2.812248468399048], + [-6.2516584396362305, 8.88595962524414], + [-0.28949737548828125, 10.699531555175781], + [-3.4868316650390625, 5.213741302490234], + [-2.1771275997161865, 2.7140660285949707], + [-4.18834924697876, 5.328364372253418], + [8.138978004455566, -2.5984456539154053], + [-0.23078390955924988, 2.504859447479248], + [6.733124256134033, -1.4457216262817383], + [-4.538951396942139, -3.1286795139312744], + [-3.5951485633850098, 5.588135719299316], + [-5.521085739135742, 0.8608984351158142], + [-6.474371433258057, 6.569794178009033], + [3.3539655208587646, 1.1593750715255737], + [-2.498936653137207, 1.4271913766860962], + [-2.1497416496276855, 2.597663164138794], + [0.02218746393918991, 9.433860778808594], + [1.589644193649292, -6.267483234405518], + [3.2878246307373047, -4.9066243171691895], + [9.302209854125977, -2.6703484058380127], + [-3.6366236209869385, -4.292679786682129], + [6.861442565917969, -2.1969573497772217], + [-3.1455180644989014, -4.465701103210449], + [-4.916066646575928, 3.4738945960998535], + [-6.464049339294434, 6.301945686340332], + [-2.162592649459839, 2.2226436138153076], + [-0.40099209547042847, 11.038050651550293], + [5.782859802246094, -1.2355577945709229], + [8.15444278717041, -2.0869596004486084], + [-3.777754783630371, -4.603456974029541], + [-0.361686646938324, 10.158317565917969], + [-0.7717880606651306, 0.37027043104171753], + [-1.12551748752594, -2.129171371459961], + [-6.343104362487793, 7.6730265617370605], + [-2.309948205947876, -0.19969230890274048], + [5.820094585418701, -1.5094940662384033], + [-2.53659987449646, 0.8623956441879272], + [1.8727710247039795, -7.290830135345459], + [3.16056489944458, -4.7311601638793945], + [1.6852235794067383, -8.865240097045898], + [-2.315343141555786, 1.6666531562805176], + [0.774064302444458, -6.666506767272949], + [3.102802038192749, -4.871628761291504], + [-2.1527316570281982, 0.7899620532989502], + [1.294463872909546, -7.779864311218262], + [1.2927424907684326, 4.702974319458008], + [-0.1535050868988037, 9.856157302856445], + [-0.775546133518219, 4.037866592407227], + [3.128006935119629, -4.905972003936768], + [2.3375658988952637, -3.641390562057495], + [-3.788159132003784, 5.816887378692627], + [6.831242561340332, -2.1469156742095947], + [1.957754135131836, -1.9005261659622192], + [-3.396740198135376, -1.4212887287139893], + [-4.412996768951416, 4.967669486999512], + [-1.1707364320755005, -1.9219225645065308], + [-2.0209670066833496, 0.27343952655792236], + [-0.2275363802909851, 9.337495803833008], + [-0.21583271026611328, 9.492952346801758], + [-6.608596324920654, 8.162747383117676], + [2.5319721698760986, -4.328982353210449], + [0.327269047498703, 4.0923919677734375], + [-4.040347099304199, -1.8043018579483032], + [-4.581712245941162, -1.419737458229065], + [-0.27370476722717285, -0.6314494609832764], + [-0.925624430179596, 1.2399300336837769], + [-4.854180335998535, -3.769219398498535], + [-5.370786190032959, -3.5924456119537354], + [-3.511428117752075, -2.1072943210601807], + [9.899137496948242, -2.7543303966522217], + [2.3084986209869385, -3.9404795169830322], + [-1.3415324687957764, 1.7541898488998413], + [-4.7802276611328125, -4.652524948120117], + [-4.319058895111084, -3.0217134952545166], + [2.3440871238708496, -2.7402732372283936], + [2.31514573097229, -3.3501641750335693], + [2.22442889213562, 5.797691345214844], + [-0.15686053037643433, 9.93897819519043], + [-0.2824694514274597, 8.785152435302734], + [9.206348419189453, -2.5159568786621094], + [7.699204921722412, -2.326779842376709], + [-2.4852678775787354, -2.902979612350464], + [-6.872112274169922, 8.743569374084473], + [-0.18179696798324585, 10.13294792175293], + [-5.605440616607666, -2.519709825515747], + [-2.5901482105255127, 2.0348873138427734], + [5.953673839569092, -5.943685054779053], + [-3.984057664871216, -2.5360827445983887], + [8.075464248657227, -2.0780632495880127], + [-2.778275489807129, 2.8258249759674072], + [-4.220702648162842, -1.279524803161621], + [-5.8776421546936035, 8.093252182006836], + [1.525578498840332, -6.584324836730957], + [-4.22764253616333, 3.21696400642395], + [8.7539644241333, -2.704681158065796], + [-0.3054831027984619, 11.262948989868164], + [-5.301896095275879, -3.5695903301239014], + [-4.850636959075928, 0.9312847852706909], + [2.871829032897949, -6.347064971923828], + [2.633528470993042, -4.112051010131836], + [3.274820566177368, 6.468689918518066], + [-0.24887704849243164, 9.303144454956055], + [-4.4645915031433105, -3.313800573348999], + [-5.602032661437988, -3.136322021484375], + [-5.555582523345947, -2.464106321334839], + [2.5739405155181885, -3.7947494983673096], + [3.7705843448638916, 5.846039772033691], + [-2.1291768550872803, 0.013441678136587143], + [6.638084888458252, -1.4817479848861694], + [-0.37428975105285645, 9.05418586730957], + [2.3173530101776123, 5.949106693267822], + [-8.685757637023926, -1.0091434717178345], + [2.9551188945770264, 4.442744255065918], + [-3.7324516773223877, 5.66031551361084], + [-1.3552961349487305, -1.1664533615112305], + [-5.190377712249756, -4.296750068664551], + [-7.519412517547607, -1.6455293893814087], + [-3.6572024822235107, -4.008912563323975], + [1.847815752029419, 4.105708122253418], + [-5.743022441864014, -3.6837046146392822], + [8.772939682006836, -2.293210744857788], + [-7.119408130645752, -1.8576364517211914], + [8.013209342956543, -2.7494914531707764], + [0.8107646107673645, -5.533923625946045], + [-5.2171831130981445, 2.1128687858581543], + [-0.3154207766056061, -1.7794243097305298], + [-3.8113105297088623, -4.266676425933838], + [-0.5589235424995422, 10.254493713378906], + [-5.150452136993408, 5.915642738342285], + [-2.879356622695923, 6.290771961212158], + [-0.9733750820159912, -0.26833534240722656], + [-5.842321872711182, -0.9301581978797913], + [-7.434793949127197, -1.7206310033798218], + [9.371440887451172, -2.6537833213806152], + [-5.338617324829102, -0.8458749055862427], + [-4.973381042480469, -0.6831063628196716], + [-2.006636619567871, 2.497838258743286], + [-1.7980730533599854, 1.895514726638794], + [-2.466205358505249, 1.2559012174606323], + [1.7065362930297852, 8.686312675476074], + [-5.939143180847168, -2.558119058609009], + [-4.920203685760498, 5.032577037811279], + [-4.480988025665283, -2.7362303733825684], + [-0.2568807601928711, 9.688240051269531], + [-6.139971733093262, 5.937531471252441], + [5.099008560180664, -1.036692500114441], + [-2.1421828269958496, 0.8824249505996704], + [2.396319627761841, -3.9394044876098633], + [-3.4489142894744873, -1.1718982458114624], + [-0.27582240104675293, 9.363325119018555], + [2.7628092765808105, -4.4227614402771], + [-5.294403553009033, -4.083499908447266], + [-4.699405193328857, -3.1079390048980713], + [1.475013256072998, 0.359943151473999], + [-6.4994730949401855, 7.755865573883057], + [-2.533825159072876, 1.8963079452514648], + [-4.4742960929870605, 5.76975679397583], + [-2.2961959838867188, -1.825515627861023], + [-4.111599445343018, -2.996182680130005], + [-4.637590408325195, -1.4980692863464355], + [-4.756382942199707, -2.5139286518096924], + [-5.585703372955322, 7.876604080200195], + [-2.8055946826934814, -0.5922679901123047], + [6.291604995727539, -1.2709845304489136], + [-0.6369576454162598, 9.47038745880127], + [9.750019073486328, -2.7191836833953857], + [-3.8003458976745605, 6.012874603271484], + [-1.9667366743087769, 0.7765223383903503], + [0.19422253966331482, -1.338090419769287], + [-0.08159715682268143, 10.407621383666992], + [-7.905266284942627, 0.11389029026031494], + [1.7499022483825684, -3.3325347900390625], + [-8.20068359375, 10.096839904785156], + [1.7442870140075684, -6.1579694747924805], + [5.856762409210205, -1.1293914318084717], + [2.9745404720306396, -4.478996753692627], + [2.9309630393981934, -4.645844459533691], + [0.997052013874054, -6.34942626953125], + [-5.189568042755127, 1.5555869340896606], + [7.788276195526123, -2.192986488342285], + [2.2408883571624756, -6.76447057723999], + [-5.101138591766357, -2.4019429683685303], + [-2.4615540504455566, 1.1692365407943726], + [-3.441143274307251, 2.0416343212127686], + [-4.683238983154297, 0.1388556957244873], + [-3.8005762100219727, 4.948338508605957], + [-0.6592378616333008, 8.76703929901123], + [2.3180456161499023, -4.013524055480957], + [-0.23175352811813354, 9.85311508178711], + [-6.22722053527832, 7.626654148101807], + [-5.220478057861328, 5.812613010406494], + [-5.6085896492004395, 6.244848251342773], + [8.104104995727539, -2.386413335800171], + [8.469400405883789, -2.316610813140869], + [-7.566469669342041, 0.48289036750793457], + [3.062066078186035, -4.754693508148193], + [-4.28228235244751, -1.6568564176559448], + [-5.261209964752197, -3.3506393432617188], + [2.7969796657562256, -5.061250686645508], + [-1.3159818649291992, -1.1032054424285889], + [5.084449291229248, 6.6730241775512695], + [-2.4459917545318604, 1.5980254411697388], + [-5.442327976226807, -3.0885009765625], + [-2.434971332550049, -0.8455997705459595], + [-6.154399394989014, -2.975879430770874], + [9.536934852600098, -2.6653494834899902], + [-7.02539587020874, 8.470848083496094], + [1.682969570159912, 2.006385564804077], + [-0.6106829047203064, 8.716007232666016], + [5.268712520599365, 7.8964924812316895], + [-0.45079755783081055, -1.339227318763733], + [8.047784805297852, -1.387493371963501], + [1.1276495456695557, -5.602588653564453], + [-4.385576248168945, -2.079033136367798], + [0.7280613780021667, 6.311362266540527], + [-1.5425310134887695, -1.1654809713363647], + [-8.625524520874023, -1.0887178182601929], + [1.8354501724243164, 5.459586143493652], + [-5.44326639175415, 3.9125516414642334], + [2.3554184436798096, -6.087496280670166], + [-5.5754828453063965, 4.15949010848999], + [-5.648501873016357, 7.080888748168945], + [-6.295036792755127, 7.263333797454834], + [2.1736323833465576, 5.463509559631348], + [1.522646188735962, -3.9463376998901367], + [6.879367351531982, -2.1248619556427], + [3.8106377124786377, 6.595369815826416], + [3.8888771533966064, -2.008718967437744], + [3.0776379108428955, 7.15787410736084], + [-8.317317962646484, -1.4265083074569702], + [-4.742909908294678, -3.1539788246154785], + [-6.120851039886475, 7.899727821350098], + [5.982924938201904, -1.0266786813735962], + [-5.978908061981201, 0.10231173038482666], + [8.399725914001465, -2.164120674133301], + [0.43375933170318604, -2.2337849140167236], + [7.039971828460693, -3.045337438583374], + [-0.5177818536758423, 9.694377899169922], + [-5.165652751922607, 4.9574480056762695], + [-4.036056995391846, -1.3878488540649414], + [6.1827263832092285, -1.454315185546875], + [0.09520857781171799, 9.621330261230469], + [6.772384166717529, -2.1265857219696045], + [-4.658935070037842, 5.215592861175537], + [-3.0825750827789307, 3.3353729248046875], + [-5.164199352264404, 5.945790767669678], + [2.6624562740325928, 0.9979209899902344], + [-4.314371585845947, -1.8376017808914185], + [-5.744798183441162, 6.781108379364014], + [-6.213874340057373, 5.704697608947754], + [9.882767677307129, -2.750976085662842], + [-5.63526725769043, 7.060426712036133], + [-1.469106912612915, -1.4205074310302734], + [-0.2855404019355774, 11.109027862548828], + [2.6913747787475586, -4.254009246826172], + [-1.8679966926574707, 4.661832809448242], + [-2.831148862838745, 7.062765598297119], + [-1.6199496984481812, 0.8137056827545166], + [-5.420220851898193, 5.747768878936768], + [-8.501931190490723, -1.0206819772720337], + [2.426781177520752, -6.311783790588379], + [2.227440595626831, 5.916581153869629], + [1.9020270109176636, -2.0111145973205566], + [6.028353214263916, -1.7822567224502563], + [-3.7045235633850098, -3.3557465076446533], + [2.478307008743286, -6.091421127319336], + [1.3960139751434326, 4.965972900390625], + [2.540658473968506, -4.669682502746582], + [8.270259857177734, -2.6524627208709717], + [-0.43265610933303833, 10.5938720703125], + [-0.20612424612045288, -0.9149137735366821], + [2.149869680404663, -6.434817314147949], + [-4.8904619216918945, 7.887953758239746], + [6.328880310058594, -3.6764309406280518], + [-5.893564701080322, -2.728227376937866], + [-3.037593364715576, 2.300279140472412], + [-1.8231520652770996, 4.117881774902344], + [8.821906089782715, -2.4337337017059326], + [-1.6588836908340454, 1.4102041721343994], + [-5.89541482925415, -1.9317854642868042], + [1.6922177076339722, -6.760737419128418], + [-4.317594528198242, 6.885039329528809], + [0.34601300954818726, -0.6481907963752747], + [-7.453794956207275, 9.47880744934082], + [1.199062466621399, 4.830163955688477], + [-6.212360858917236, 1.862524151802063], + [1.5009855031967163, -2.652160882949829], + [8.42194652557373, -2.2299721240997314], + [6.634637832641602, -2.4633491039276123], + [6.390447616577148, -1.234860897064209], + [-0.2988247573375702, 7.28053617477417], + [-0.13987678289413452, 10.353522300720215], + [-5.4987335205078125, 6.052011013031006], + [1.5189428329467773, -7.505571365356445], + [2.9919888973236084, -6.298874855041504], + [2.7414491176605225, -4.572612762451172], + [-0.16698241233825684, 10.146154403686523], + [-5.75656270980835, -2.1349575519561768], + [-2.8043787479400635, -1.6081371307373047], + [6.400055408477783, -1.3509691953659058], + [-1.3514260053634644, -0.35575518012046814], + [-3.918794870376587, 6.282288551330566], + [4.5106282234191895, -2.4901697635650635], + [-3.9798851013183594, 4.3695759773254395], + [-6.340125560760498, 7.923153400421143], + [-2.3716161251068115, 1.9353713989257812], + [0.6783148050308228, -1.7722002267837524], + [-4.715364933013916, -2.7502734661102295], + [-0.46181005239486694, 9.931174278259277], + [3.6791796684265137, -5.533354759216309], + [0.8902371525764465, -5.502591133117676], + [1.9692916870117188, 5.09819221496582], + [-5.773181915283203, 6.776577949523926], + [9.864253044128418, -2.742985963821411], + [-3.8220646381378174, 1.7491741180419922], + [-2.3634142875671387, 1.834241271018982], + [-3.467298984527588, 2.366921901702881], + [7.327695369720459, -1.8658347129821777], + [-2.8487606048583984, -1.4964088201522827], + [2.9363667964935303, -4.424395561218262], + [-7.218559741973877, -0.8557819724082947], + [-4.473480224609375, -2.0060601234436035], + [1.7831493616104126, 0.25122207403182983], + [-0.1459084153175354, 9.622982025146484], + [-4.683008670806885, -3.4024012088775635], + [-0.8874768614768982, 10.581953048706055], + [-2.869497776031494, 1.98772394657135], + [7.242237567901611, -2.0002474784851074], + [-3.720092535018921, -0.25894778966903687], + [-0.2402021288871765, 9.66092300415039], + [6.031789779663086, -1.1618648767471313], + [-1.9172112941741943, 1.4386932849884033], + [6.639469623565674, -1.6721419095993042], + [-6.422695159912109, -1.986070990562439], + [1.3993529081344604, 5.528415679931641], + [-6.7529072761535645, -0.6583538055419922], + [-4.291177749633789, -1.0046212673187256], + [2.2411692142486572, 5.485895156860352], + [-5.868825435638428, 4.515143871307373], + [0.785966694355011, -6.053930282592773], + [0.8055343627929688, -0.23334084451198578], + [-3.086785078048706, -1.7307788133621216], + [6.286294460296631, -1.0952036380767822], + [4.169861316680908, 6.883600234985352], + [7.931788921356201, -2.0824196338653564], + [-2.451336145401001, -2.741600275039673], + [-0.0025432780385017395, 9.730030059814453], + [2.855243682861328, -4.84852409362793], + [8.534920692443848, -2.373603105545044], + [-0.5038490295410156, -0.6335534453392029], + [5.6952290534973145, -1.04397714138031], + [-0.8236799836158752, 8.206696510314941], + [5.461913108825684, -4.442384243011475], + [1.758361577987671, 4.803620338439941], + [6.778323173522949, -2.36065411567688], + [-5.5308613777160645, 2.0240118503570557], + [-2.392738103866577, 2.2678723335266113], + [-6.826929569244385, 8.236872673034668], + [9.286921501159668, -2.602330446243286], + [2.8552358150482178, -5.130436897277832], + [-6.6183342933654785, 8.109769821166992], + [1.4584826231002808, 4.965367794036865], + [-3.216881036758423, -1.4268512725830078], + [1.2149629592895508, 0.7421120405197144], + [2.1138575077056885, -5.7601776123046875], + [-2.4199888706207275, 1.7069766521453857], + [2.56552791595459, -6.08931303024292], + [-5.690950393676758, -0.9653557538986206], + [9.09068775177002, -2.548893690109253], + [3.1521012783050537, 1.5590788125991821], + [-4.602818012237549, 4.16817569732666], + [-3.807884454727173, -4.906483173370361], + [-0.23420315980911255, 9.984214782714844], + [3.9873716831207275, 6.392789840698242], + [-5.9068193435668945, 5.271538734436035], + [-6.417086124420166, -2.0868542194366455], + [-3.6257669925689697, -2.275568962097168], + [7.258061408996582, -4.690612316131592], + [8.896437644958496, -2.520723819732666], + [2.416738986968994, 6.082251071929932], + [-5.620975017547607, -2.451781988143921], + [-0.3719787001609802, 10.895212173461914], + [2.9132754802703857, -4.390893936157227], + [-5.467782497406006, 1.461740255355835], + [-1.0634266138076782, 8.84065055847168], + [-2.404979705810547, 0.0021865330636501312], + [-2.784884214401245, -5.037961006164551], + [-5.270909786224365, 6.389726161956787], + [-3.5988528728485107, -2.778625011444092], + [2.186483144760132, 0.4503505527973175], + [-0.23502308130264282, 10.626245498657227], + [-3.3717308044433594, 2.4336423873901367], + [-2.378213405609131, 2.4041802883148193], + [-4.305200576782227, -2.591048002243042], + [0.9696782231330872, -6.248492240905762], + [-0.24010175466537476, 10.544906616210938], + [-5.892693996429443, -4.291596412658691], + [1.8112435340881348, -4.493589878082275], + [-4.365653991699219, 7.2301249504089355], + [1.9545490741729736, 4.993321895599365], + [7.218536853790283, -3.505302667617798], + [-2.6076934337615967, -1.2597171068191528], + [-4.104944705963135, -1.5100444555282593], + [0.0809444710612297, 9.673868179321289], + [-2.808992862701416, 5.794946670532227], + [-1.3158326148986816, 10.173524856567383], + [2.2249414920806885, -8.586097717285156], + [3.145221471786499, -4.912993431091309], + [-0.14348840713500977, 10.2455415725708], + [2.500056505203247, -7.948436737060547], + [-0.2036551833152771, 9.383203506469727], + [-6.553645610809326, 4.469040870666504], + [-0.7987105846405029, 7.0559892654418945], + [0.9560875296592712, -3.610543966293335], + [-0.535346508026123, 5.413405418395996], + [-2.7581310272216797, -0.897964358329773], + [-4.440993785858154, -1.5802029371261597], + [2.6070475578308105, 0.6185743808746338], + [1.1475147008895874, 0.7538710832595825], + [6.425233364105225, -1.1436505317687988], + [-2.7422330379486084, -1.4325201511383057], + [9.290963172912598, -2.594882011413574], + [-1.603670597076416, -1.4652204513549805], + [-0.13973897695541382, -0.43388301134109497], + [-5.134003162384033, -4.322543144226074], + [-1.8510457277297974, 1.8303922414779663], + [6.136701583862305, -1.3585988283157349], + [1.2911816835403442, -7.453608512878418], + [-0.4649277329444885, 9.427596092224121], + [0.35711127519607544, 9.282434463500977], + [1.401979923248291, 4.676489353179932], + [1.9899814128875732, 0.4555034637451172], + [-2.3834221363067627, 2.0050430297851562], + [-7.731823444366455, -0.17800140380859375], + [-0.3143100142478943, 10.717033386230469], + [1.0082035064697266, -1.630576491355896], + [2.72800612449646, -4.270906448364258], + [3.1165237426757812, -4.892711639404297], + [-0.27612870931625366, 9.378023147583008], + [3.126638650894165, -4.88770866394043], + [-2.826232671737671, 1.8428243398666382], + [-4.884274005889893, -2.356461524963379], + [-7.878140926361084, -0.7819674015045166], + [-2.4012672901153564, 2.43786358833313], + [-7.077182292938232, -0.7684770226478577], + [-1.271237850189209, 8.92631721496582], + [-2.0956900119781494, -0.9323294758796692], + [1.4667246341705322, 5.982169151306152], + [3.054033041000366, -4.89522123336792], + [-5.468589782714844, 5.40871524810791], + [-0.4228088855743408, 10.080606460571289], + [-2.5673015117645264, 1.9811550378799438], + [-5.534273624420166, 2.141432046890259], + [3.055722951889038, -4.764237880706787], + [6.541123390197754, -3.1877987384796143], + [6.323401927947998, -1.3513952493667603], + [2.8353097438812256, -6.046853542327881], + [-7.002290725708008, -0.3808140754699707], + [2.1245176792144775, -8.130821228027344], + [-2.265793800354004, 6.437355995178223], + [2.7744781970977783, -4.3111891746521], + [1.4487552642822266, -3.898869752883911], + [-6.251315116882324, -3.1620676517486572], + [2.658177375793457, -7.73222541809082], + [1.5271910429000854, -6.046576023101807], + [-0.3078569769859314, 0.33162039518356323], + [-0.7948265671730042, 9.1392822265625], + [-0.11742670089006424, 9.72592544555664], + [-3.836735963821411, 3.7807230949401855], + [9.4420747756958, -2.5826423168182373], + [-2.512953758239746, 1.9542683362960815], + [-0.827321469783783, 0.6828561425209045], + [9.3748197555542, -2.6182680130004883], + [-4.7536091804504395, 6.945596694946289], + [3.634786367416382, 1.6438862085342407], + [-2.8112082481384277, -0.777858316898346], + [9.597951889038086, -2.6607847213745117], + [3.6943297386169434, 6.730630874633789], + [-4.1612467765808105, -4.827557563781738], + [-2.4192659854888916, 2.013068199157715], + [2.0125486850738525, 5.8528032302856445], + [-4.67362642288208, 5.3726115226745605], + [2.945896863937378, -4.5658698081970215], + [0.5560336709022522, -0.7338030934333801], + [2.3419511318206787, -4.617683410644531], + [-3.3058950901031494, 3.317645311355591], + [-5.0047383308410645, 5.8034796714782715], + [2.9327609539031982, -4.706593990325928], + [-4.410526752471924, 6.624311447143555], + [-1.856755018234253, 2.0796282291412354], + [-2.4979631900787354, 0.9070850610733032], + [2.8096766471862793, -4.266963005065918], + [0.4730088710784912, 4.717339992523193], + [-4.981135368347168, -2.699671983718872], + [-0.13426420092582703, -0.9620083570480347], + [1.9711461067199707, 5.429943561553955], + [-4.6618146896362305, 1.6550238132476807], + [-5.0917134284973145, 7.025038719177246], + [0.8694025278091431, -5.418225288391113], + [-0.19429993629455566, -1.0340296030044556], + [2.302100896835327, -5.226471424102783], + [2.181774616241455, 5.749839782714844], + [-4.540796279907227, -2.682652711868286], + [2.89579439163208, 5.293991565704346], + [6.242448806762695, -2.2984585762023926], + [2.1196300983428955, 5.580346584320068], + [-2.617332696914673, -4.394920825958252], + [-2.283752202987671, 0.636922299861908], + [5.242011547088623, 7.724085807800293], + [1.6300225257873535, 1.537614107131958], + [-5.533575534820557, -3.6991384029388428], + [3.0628902912139893, 7.0402116775512695], + [-3.105058193206787, -3.0748205184936523], + [-4.779153347015381, -4.515497207641602], + [6.700010776519775, -1.3166375160217285], + [-6.519017696380615, -1.3667234182357788], + [-4.994565486907959, 6.082131385803223], + [-3.8527567386627197, -0.655545711517334], + [-5.5309858322143555, -5.288793087005615], + [2.1204402446746826, -3.4356462955474854], + [3.2773306369781494, -7.236974239349365], + [6.70853328704834, -1.494518518447876], + [-4.930795192718506, -2.575824499130249], + [1.6496949195861816, 0.8621034622192383], + [-4.941677093505859, 6.326652526855469], + [-5.014774799346924, 7.896702289581299], + [-2.7732279300689697, 2.747922897338867], + [2.9555835723876953, -4.4656982421875], + [2.378300905227661, 5.731109619140625], + [-0.14106684923171997, 9.593926429748535], + [-0.4307079315185547, 10.212957382202148], + [-4.46104621887207, -3.385540723800659], + [2.503765821456909, -6.811822414398193], + [1.6774775981903076, -5.94672966003418], + [2.8851499557495117, -4.362403869628906], + [0.40015918016433716, -0.5865949988365173], + [-2.3276844024658203, 0.015615817159414291], + [0.4286038279533386, -0.9182726144790649], + [8.319254875183105, -2.735713005065918], + [-6.272927284240723, 8.376752853393555], + [-3.3593077659606934, 6.740508079528809], + [3.218637704849243, -4.817190170288086], + [-4.171053409576416, -3.5222907066345215], + [-5.700867176055908, -2.2329156398773193], + [0.5399523973464966, -3.3388020992279053], + [-4.888254642486572, -3.961359739303589], + [-0.07161528617143631, 5.091707229614258], + [2.2381746768951416, 5.817424774169922], + [3.09924054145813, -4.645015716552734], + [-0.47814077138900757, 11.141830444335938], + [-0.8019407391548157, 10.09659194946289], + [8.370230674743652, -2.2579762935638428], + [-2.562866449356079, -1.974197268486023], + [0.7064637541770935, -0.7724615931510925], + [-5.152522563934326, -2.192476987838745], + [9.382475852966309, -2.5738909244537354], + [1.7210525274276733, 4.983189582824707], + [3.0133421421051025, -4.695308685302734], + [6.859681606292725, -3.4533841609954834], + [-7.484241008758545, -1.3811477422714233], + [-3.431320905685425, -2.544013261795044], + [-2.635780096054077, 1.057125449180603], + [-5.870193004608154, 1.6456371545791626], + [-3.407019853591919, -0.0044053830206394196], + [-4.150763988494873, -0.022859815508127213], + [-5.082922458648682, 5.915378570556641], + [3.4179508686065674, -5.464268684387207], + [-0.21509772539138794, 10.953773498535156], + [-0.1403496265411377, -1.3340805768966675], + [-5.810572624206543, 2.5850017070770264], + [-4.986721992492676, -3.288086175918579], + [-6.235752105712891, -2.5091958045959473], + [-4.3640971183776855, -4.344425678253174], + [-2.0039429664611816, 0.8021837472915649], + [-5.130648612976074, -4.085867881774902], + [3.212644577026367, -4.802578926086426], + [4.079640865325928, 6.585797309875488], + [-4.386168956756592, 0.4073494076728821], + [4.826338291168213, -1.0645619630813599], + [-2.969909906387329, -4.237184524536133], + [-4.855405807495117, -3.109198808670044], + [-2.6719915866851807, 2.1913130283355713], + [8.719955444335938, -2.402639627456665], + [-3.955648183822632, -1.8376672267913818], + [-5.524072170257568, 2.9801297187805176], + [1.9517481327056885, 6.151806831359863], + [-5.832568645477295, 4.381623268127441], + [-5.0091986656188965, -0.31203150749206543], + [2.358410596847534, -7.145527362823486], + [-0.2665335536003113, 9.305488586425781], + [1.261821985244751, 1.5773457288742065], + [-5.343977451324463, 4.6818037033081055], + [8.739053726196289, -2.416534662246704], + [-0.22996342182159424, 9.47940444946289], + [-2.6944925785064697, -3.724893808364868], + [2.7547411918640137, -4.1716203689575195], + [2.997856378555298, -4.61689567565918], + [2.5479042530059814, -3.9274072647094727], + [-5.169448375701904, -2.508906126022339], + [2.742021083831787, -4.300143241882324], + [1.7584130764007568, -6.915062427520752], + [-2.5845298767089844, 1.49819815158844], + [-4.54941463470459, -2.358929395675659], + [0.5423564314842224, 0.5033186078071594], + [-4.845736980438232, -2.5178580284118652], + [5.270147323608398, -1.1496516466140747], + [-2.4990882873535156, 1.2073253393173218], + [1.8865803480148315, -8.320006370544434], + [-5.8959126472473145, -1.9766998291015625], + [-4.215127944946289, 3.4804017543792725], + [-5.885606288909912, -1.0818265676498413], + [-5.205787181854248, -3.189258098602295], + [2.6564559936523438, -5.585443496704102], + [3.0056979656219482, -4.524473190307617], + [-0.4679439663887024, 9.440662384033203], + [8.586922645568848, -2.360400676727295], + [-4.412217140197754, 4.891173362731934], + [-5.29379415512085, -1.778989315032959], + [-6.971573352813721, 0.9214704036712646], + [-1.3351850509643555, 1.3273330926895142], + [3.093205213546753, -4.640748500823975], + [-4.284731864929199, 6.961397171020508], + [-4.935156345367432, -1.474437952041626], + [-5.059631824493408, 1.830352544784546], + [8.326021194458008, -2.285186767578125], + [1.5032650232315063, -7.537138938903809], + [5.877987384796143, 7.944385528564453], + [9.408740043640137, -2.6244571208953857], + [-2.169952869415283, -1.0954158306121826], + [-4.997832775115967, -3.2057597637176514], + [-1.5745866298675537, -2.3468730449676514], + [2.2230780124664307, 0.7387141585350037], + [-0.768284261226654, 8.739736557006836], + [2.65041446685791, -6.002254486083984], + [8.639986991882324, -2.325868844985962], + [0.506669819355011, -5.918832778930664], + [1.651031494140625, 4.625711441040039], + [-4.654013156890869, 5.156295299530029], + [2.230656147003174, -4.253389358520508], + [7.669630527496338, -1.8861993551254272], + [-5.654353618621826, -2.507720947265625], + [-4.680339813232422, -4.886753082275391], + [-0.3658692240715027, 10.165000915527344], + [-4.166608810424805, -0.9968934059143066], + [2.6287500858306885, -4.208310604095459], + [-4.920567035675049, 6.371402740478516], + [-3.157366991043091, 3.4317355155944824], + [-6.476653575897217, -1.0522547960281372], + [-3.122845411300659, 5.26235818862915], + [9.480134010314941, -2.694929361343384], + [0.6274890303611755, -0.2634590268135071], + [1.4334862232208252, 0.5914977788925171], + [-1.8138244152069092, -0.9791509509086609], + [-2.3701400756835938, 1.711113452911377], + [-2.3220510482788086, 0.1528729796409607], + [-2.441558837890625, 1.4602035284042358], + [-1.088616132736206, 9.557891845703125], + [2.61238956451416, -4.026210308074951], + [-1.8428674936294556, 5.319972038269043], + [-3.1714727878570557, 6.183510780334473], + [2.1014633178710938, -6.911348819732666], + [-2.838184118270874, 5.190442085266113], + [-4.2289252281188965, -2.5431621074676514], + [-0.6652479767799377, 9.529099464416504], + [1.9216017723083496, -4.677773475646973], + [-0.4658447504043579, 9.15293025970459], + [4.751441955566406, -2.991999864578247], + [2.6861226558685303, 4.862879753112793], + [1.3416426181793213, 2.963482618331909], + [-5.393631935119629, -4.071011543273926], + [2.552922010421753, 5.061642646789551], + [7.1309614181518555, -1.549843668937683], + [-0.3744015097618103, 10.839166641235352], + [3.0241432189941406, -4.536172389984131], + [-4.688639163970947, -3.322371482849121], + [0.07345836609601974, 9.200193405151367], + [1.6964352130889893, -3.3436315059661865], + [-2.4289400577545166, 1.8522462844848633], + [-3.331857204437256, -0.2863611578941345], + [3.096391439437866, -4.645827293395996], + [-5.271969318389893, 1.6328506469726562], + [-3.953439474105835, -2.5884199142456055], + [-5.54463529586792, -3.301281213760376], + [-4.760430335998535, -0.9660736322402954], + [2.439232110977173, -3.946315288543701], + [6.314045429229736, -1.1190282106399536], + [-4.8372273445129395, -4.232178688049316], + [-8.415042877197266, -1.4113162755966187], + [-4.401734352111816, -0.8922960758209229], + [-6.650571346282959, -1.5696414709091187], + [1.4382855892181396, 2.1952321529388428], + [-0.21767669916152954, 10.594040870666504], + [4.9128031730651855, 8.049236297607422], + [-5.208522796630859, -0.06991249322891235], + [6.969910144805908, -1.6281565427780151], + [-3.2337803840637207, -4.1209306716918945], + [-2.0424978733062744, 8.360685348510742], + [-4.859073162078857, -2.8904759883880615], + [2.0920188426971436, -9.789986610412598], + [-3.808626413345337, -3.2835142612457275], + [7.435306072235107, -3.018440008163452], + [-2.8929402828216553, -1.1214210987091064], + [-5.491802215576172, 7.731908798217773], + [-7.4153828620910645, -0.8568666577339172], + [3.0209076404571533, -4.81906795501709], + [6.935792446136475, -2.223844528198242], + [-3.3868019580841064, -0.8651675581932068], + [2.320307970046997, -6.268342971801758], + [-2.53503680229187, 1.2373547554016113], + [-0.009648270905017853, 9.614189147949219], + [6.705547332763672, -2.604292869567871], + [-0.5457857251167297, 10.443601608276367], + [-5.625362396240234, -2.24322247505188], + [1.615018606185913, -7.934191703796387], + [-1.5812116861343384, -0.26339447498321533], + [-3.4489924907684326, 5.461577415466309], + [1.8736186027526855, -5.614548683166504], + [-4.967769145965576, 5.866390705108643], + [2.8965609073638916, -4.363823413848877], + [-5.4918036460876465, -1.9303239583969116], + [2.4449284076690674, -3.699282646179199], + [2.152353525161743, -3.9203948974609375], + [9.342535972595215, -2.638105630874634], + [-4.210032939910889, -3.933479070663452], + [5.335546970367432, -1.2615432739257812], + [-5.012521266937256, 4.089680194854736], + [2.6404764652252197, -8.905364990234375], + [-4.9774861335754395, 1.1552741527557373], + [-4.541935443878174, -2.9339940547943115], + [9.675848960876465, -2.6736526489257812], + [-6.197498321533203, 7.396224021911621], + [1.866798996925354, 0.6958492994308472], + [3.2772886753082275, 0.8985196352005005], + [-5.440906047821045, 4.142731666564941], + [-1.915595531463623, 2.630831480026245], + [-5.128934383392334, -3.3649866580963135], + [2.0620830059051514, 3.8373091220855713], + [2.2206833362579346, -3.70931077003479], + [-2.345240831375122, -1.2726836204528809], + [-2.1171462535858154, -0.7631740570068359], + [0.12291911989450455, -3.008176803588867], + [-1.8736153841018677, 0.366720587015152], + [-1.7827022075653076, 1.3847988843917847], + [1.4717795848846436, -7.549495697021484], + [-4.586934566497803, -2.887460231781006], + [-0.2392064929008484, -1.0893362760543823], + [-2.449990749359131, 1.3643702268600464], + [4.6793131828308105, 7.409901142120361], + [7.001269817352295, -2.948575735092163], + [-0.6749100089073181, 1.3807380199432373], + [-5.336005687713623, -2.4062116146087646], + [-4.646911144256592, -3.6542866230010986], + [-4.316479206085205, 5.133564472198486], + [-0.407375693321228, 10.346824645996094], + [-4.138202667236328, -3.454113721847534], + [-6.234239101409912, 7.228033542633057], + [1.2216359376907349, 0.4975883960723877], + [-0.2770259380340576, -1.0670335292816162], + [-5.548219203948975, -2.004931926727295], + [-0.4424821138381958, 9.851033210754395], + [-3.4463412761688232, -1.2466847896575928], + [1.9360079765319824, -9.709500312805176], + [7.030785083770752, -1.4468809366226196], + [-6.6137495040893555, -2.1391236782073975], + [-2.163296699523926, 2.773024320602417], + [-0.48933666944503784, -0.4407293200492859], + [-1.7819743156433105, 0.26381897926330566], + [-1.095110297203064, -2.049989938735962], + [-2.7100818157196045, -1.1852009296417236], + [-5.63819694519043, -3.0201399326324463], + [2.3469417095184326, 0.7708102464675903], + [7.257194519042969, -1.922836422920227], + [-1.736641764640808, 1.3555446863174438], + [-5.996768474578857, 2.722127676010132], + [-5.866199970245361, -2.39520263671875], + [2.10736346244812, -8.294431686401367], + [-1.5247794389724731, 1.761111855506897], + [-5.844512462615967, 6.354945659637451], + [-1.3488513231277466, 5.262117385864258], + [1.9754908084869385, -6.6275634765625], + [-2.6940200328826904, -4.063652992248535], + [2.2772982120513916, -4.147820949554443], + [-5.353461742401123, -0.7074708938598633], + [-7.445248126983643, 9.222018241882324], + [-3.985969066619873, -0.6733461618423462], + [2.19416880607605, -6.9759321212768555], + [1.7374207973480225, -4.922324180603027], + [-2.641383409500122, 1.1189868450164795], + [8.17104434967041, -2.5217020511627197], + [-2.3233108520507812, 1.184696078300476], + [-4.706099033355713, 5.687230587005615], + [-2.3191258907318115, 1.9639853239059448], + [9.366311073303223, -2.5840060710906982], + [1.7357839345932007, 0.24734658002853394], + [3.0642032623291016, -4.609426021575928], + [-0.23452794551849365, 9.911700248718262], + [-3.8090789318084717, -1.9160352945327759], + [1.4645808935165405, 4.411438941955566], + [-0.2072497308254242, -1.0797559022903442], + [-5.2578229904174805, 6.144089698791504], + [3.455367088317871, 6.727216720581055], + [-3.301804304122925, 5.241763591766357], + [-4.890754222869873, 1.1211405992507935], + [-4.151955604553223, -2.593623638153076], + [-5.062215328216553, -2.8076388835906982], + [-4.73507833480835, 2.155291795730591], + [-1.7606151103973389, 2.0995521545410156], + [3.498666524887085, 6.783080101013184], + [-3.0684494972229004, 2.2488327026367188], + [2.2562496662139893, -4.054015159606934], + [3.0187270641326904, -4.532341957092285], + [1.4953994750976562, 4.999182224273682], + [-6.633438587188721, -0.7184402942657471], + [-0.38956141471862793, 10.582435607910156], + [3.0892562866210938, -4.627480983734131], + [2.541602849960327, -4.417740821838379], + [2.250823736190796, 4.377161979675293], + [5.511230945587158, -1.8619855642318726], + [-5.977554798126221, 2.4744768142700195], + [-0.16865390539169312, 10.256159782409668], + [6.817083835601807, -1.7649246454238892], + [-7.756453990936279, 0.6231582164764404], + [-1.7135111093521118, 1.4287203550338745], + [-0.3402020335197449, 9.537826538085938], + [0.5028674006462097, -5.859244346618652], + [-7.669297218322754, 0.5464138984680176], + [2.7396767139434814, 0.6597450971603394], + [-0.6749921441078186, -2.369158983230591], + [3.3075478076934814, -4.944813251495361], + [-1.1237248182296753, -2.005998134613037], + [-0.261171817779541, 10.633041381835938], + [5.617724418640137, -1.2261505126953125], + [-1.5926191806793213, -1.888283133506775], + [-2.8876330852508545, -3.9770257472991943], + [-1.2479631900787354, -0.6422460675239563], + [-0.17130109667778015, -0.9378290176391602], + [5.812155723571777, -1.0747933387756348], + [-2.5396437644958496, 4.742306232452393], + [-1.8209327459335327, 1.4255988597869873], + [-2.212247848510742, 2.6819753646850586], + [2.0829246044158936, 5.50428581237793], + [7.455132961273193, -1.9798903465270996], + [-3.5342037677764893, -1.8331960439682007], + [-5.360756874084473, 3.3921773433685303], + [6.693620204925537, -4.32867431640625], + [3.4132258892059326, -5.082468032836914], + [3.132049083709717, -4.878042221069336], + [-2.617748498916626, 2.97269606590271], + [-0.20980149507522583, -1.3550317287445068], + [2.8529789447784424, -4.989546775817871], + [0.28991925716400146, -0.6235394477844238], + [-5.352797031402588, 0.5250450372695923], + [-3.7577755451202393, -2.7215917110443115], + [-3.1347389221191406, -0.8337159752845764], + [2.919890880584717, -4.401288032531738], + [2.178435802459717, -6.732241153717041], + [2.5839459896087646, 5.915085792541504], + [-6.733060359954834, 8.192965507507324], + [-5.126263618469238, 7.758614540100098], + [7.507388591766357, -2.2454335689544678], + [-2.2838640213012695, 0.395616352558136], + [-2.2756099700927734, 1.7763378620147705], + [1.45432448387146, 1.0350526571273804], + [-4.036577224731445, 6.277519226074219], + [4.354970455169678, -1.025980830192566], + [-2.516723155975342, 1.7199751138687134], + [3.1261980533599854, -4.882922649383545], + [2.739098072052002, -4.32199764251709], + [1.3252758979797363, -6.211233139038086], + [2.428298234939575, 5.678613662719727], + [9.811138153076172, -2.726478099822998], + [-3.6263673305511475, -2.736945867538452], + [4.679986476898193, 7.00775146484375], + [9.617515563964844, -2.691295862197876], + [1.6153829097747803, -7.014892578125], + [-2.1172518730163574, 0.2581683397293091], + [-6.186890125274658, 3.5332977771759033], + [-1.9218599796295166, -2.5238590240478516], + [-5.158138751983643, -3.923074245452881], + [2.0710690021514893, -8.279173851013184], + [-6.105656147003174, 6.462235450744629], + [-0.3053133487701416, 11.66009521484375], + [2.987370252609253, -5.211069107055664], + [-0.3551781177520752, 11.015386581420898], + [2.5445539951324463, -4.044766426086426], + [0.2048909068107605, 9.9142427444458], + [2.7110326290130615, -4.152894020080566], + [1.2324755191802979, 4.689656734466553], + [-5.8432440757751465, -2.320739984512329], + [-4.0431318283081055, -3.8629543781280518], + [-4.039214611053467, 6.854180335998535], + [-7.244329929351807, 8.95920181274414], + [2.1617507934570312, -7.28983211517334], + [2.197067975997925, -4.6791300773620605], + [-2.5303595066070557, -4.44994592666626], + [-4.320836544036865, -3.924384355545044], + [7.774111270904541, -1.7288485765457153], + [-0.3416091799736023, 9.747583389282227], + [-2.6385977268218994, 2.2020976543426514], + [1.8232041597366333, -5.022054672241211], + [-5.815051078796387, 1.9527181386947632], + [1.8385307788848877, -3.084637403488159], + [3.1739213466644287, -5.0153303146362305], + [-4.369980335235596, -1.9559826850891113], + [7.368177890777588, -1.6642428636550903], + [-3.0059142112731934, 1.1137011051177979], + [3.268700361251831, -5.275712013244629], + [-6.453853607177734, 6.872604846954346], + [2.7612979412078857, -4.274712562561035], + [-1.5363596677780151, 1.8476001024246216], + [4.092061519622803, 7.011516571044922], + [-0.393657386302948, 9.268123626708984], + [-0.37199634313583374, 9.798133850097656], + [-5.371639728546143, 1.673007845878601], + [-0.3300632834434509, 10.04823112487793], + [-3.8515408039093018, 1.846161127090454], + [-4.523771286010742, -2.687298059463501], + [1.0842411518096924, 5.0178351402282715], + [2.096269369125366, 5.699686050415039], + [-4.515713691711426, 6.6483564376831055], + [-2.3584070205688477, 1.0183415412902832], + [-0.2305799126625061, 9.960260391235352], + [-4.874567031860352, -1.1091656684875488], + [-5.458521366119385, 2.3108785152435303], + [-3.7474396228790283, -3.219059944152832], + [8.991739273071289, -2.577990770339966], + [-0.3829173445701599, 9.3629150390625], + [-0.23145729303359985, 9.631758689880371], + [-0.22690850496292114, 10.534842491149902], + [-4.537496089935303, 1.2731648683547974], + [-6.4630866050720215, -1.185686707496643], + [2.9385948181152344, -4.7611799240112305], + [1.1645076274871826, 0.651688814163208], + [-0.6046754121780396, 9.465383529663086], + [0.6403133869171143, 0.6631388664245605], + [-4.36747407913208, 5.65907096862793], + [-2.9270389080047607, -3.8813345432281494], + [-4.33505392074585, -3.3479745388031006], + [-4.841933727264404, 5.555666923522949], + [2.528007745742798, -6.931140899658203], + [7.2783427238464355, -1.709734559059143], + [-5.018218994140625, 5.51165771484375], + [-0.3766675591468811, 11.258338928222656], + [-2.292746067047119, 1.4582717418670654], + [-3.798204183578491, -3.282008409500122], + [6.865664958953857, -1.4712973833084106], + [3.5182371139526367, -4.620235443115234], + [-6.231520175933838, 8.559287071228027], + [-0.2577911615371704, 10.457206726074219], + [4.222965240478516, -1.9384557008743286], + [-6.249088764190674, 5.349684238433838], + [-6.027040004730225, 1.7620288133621216], + [-4.596943378448486, -6.056124210357666], + [1.1860288381576538, 4.570417881011963], + [-6.996957302093506, -1.0874714851379395], + [-4.91120719909668, 5.8688764572143555], + [-3.972714424133301, -2.481846570968628], + [1.2546279430389404, -7.437525272369385], + [-4.585023403167725, -0.7966080904006958], + [-7.266732692718506, 1.2142444849014282], + [-1.0742796659469604, 1.5257691144943237], + [-5.110439777374268, 3.559880495071411], + [-2.5776684284210205, -3.426825761795044], + [6.022494316101074, -1.4191306829452515], + [1.4117891788482666, -7.782721996307373], + [-0.21307694911956787, -0.9966166019439697], + [-5.012027263641357, -0.6204739809036255], + [3.2797939777374268, 6.476015090942383], + [-5.381347179412842, -1.2791811227798462], + [-7.908270359039307, 9.729612350463867], + [2.978471040725708, -4.473418235778809], + [8.058176040649414, -2.1638410091400146], + [-6.635345935821533, 8.144844055175781], + [-0.5503000617027283, 0.13075248897075653], + [2.6327240467071533, -6.622897624969482], + [-5.398143291473389, -1.105189561843872], + [-1.8185056447982788, 0.15090510249137878], + [-5.424910068511963, -3.3860881328582764], + [-4.869694709777832, -4.763614177703857], + [-4.106480121612549, 3.6423327922821045], + [-0.35024282336235046, -4.919625282287598], + [-6.18284797668457, -2.3251588344573975], + [-6.168157577514648, 7.16998815536499], + [3.043107032775879, -4.675056457519531], + [6.408028602600098, -4.980048179626465], + [-5.070626735687256, -0.79996657371521], + [-3.9393317699432373, -2.0007245540618896], + [8.905208587646484, -2.499133825302124], + [5.649158000946045, -1.7969330549240112], + [-5.578683376312256, 4.946966171264648], + [-3.2787117958068848, -3.2640938758850098], + [-5.720158100128174, -2.3651225566864014], + [-5.044419288635254, 2.8330724239349365], + [2.1724154949188232, -3.769040822982788], + [-0.3107103705406189, 9.922086715698242], + [-0.21220171451568604, 9.781710624694824], + [-0.4914882779121399, 10.174934387207031], + [2.107839822769165, -3.186973810195923], + [-4.6031317710876465, -0.8236965537071228], + [7.099511623382568, -4.429059028625488], + [2.9139115810394287, -6.791751861572266], + [2.5114614963531494, -6.495757102966309], + [2.787114381790161, -4.35221529006958], + [-5.073037624359131, 5.109679222106934], + [3.4693305492401123, -4.33901309967041], + [1.7484543323516846, 0.849738359451294], + [-4.415096759796143, -2.230393171310425], + [-8.00938606262207, -1.3342974185943604], + [2.513019323348999, -5.136948585510254], + [5.886376857757568, 7.350098609924316], + [-4.709834575653076, -3.2263972759246826], + [-5.7996344566345215, 5.843909740447998], + [-2.020735502243042, 2.3437726497650146], + [1.2971845865249634, -7.860618591308594], + [-0.31946617364883423, 10.614494323730469], + [3.192610502243042, -4.78737735748291], + [-3.5172107219696045, -3.9061055183410645], + [-1.1623374223709106, -0.9533604383468628], + [4.451587200164795, 5.853166580200195], + [-2.3148765563964844, 1.3829681873321533], + [-1.9754587411880493, 2.426746368408203], + [-0.22167295217514038, 9.863922119140625], + [0.35261017084121704, -0.9746602773666382], + [3.7361679077148438, -3.2845828533172607], + [-2.5918993949890137, -2.9950754642486572], + [-0.21177494525909424, 10.127693176269531], + [1.5074151754379272, 0.13751564919948578], + [-4.3452558517456055, -3.2428295612335205], + [-0.013967521488666534, 10.060402870178223], + [7.641723155975342, -1.7739049196243286], + [-3.1751818656921387, 0.6762774586677551], + [-0.18401873111724854, 9.537684440612793], + [-3.886244535446167, -1.7968448400497437], + [-2.900790214538574, 0.7109476923942566], + [-2.395923614501953, 1.6984723806381226], + [2.8391950130462646, -5.2728424072265625], + [-2.301422595977783, 2.1609761714935303], + [-1.6129367351531982, -0.33263009786605835], + [6.49794340133667, -1.3981378078460693], + [2.825141191482544, -4.129208564758301], + [1.3353757858276367, 1.907667875289917], + [-4.651986122131348, -2.26481032371521], + [-7.501716613769531, 9.074728965759277], + [-4.590258598327637, 1.6814416646957397], + [6.508448600769043, -1.403687596321106], + [0.7733089923858643, -0.21238890290260315], + [6.831408500671387, -2.652280569076538], + [4.614253044128418, -4.307308197021484], + [2.58056640625, -3.7588610649108887], + [2.722383737564087, -3.995681047439575], + [3.962012529373169, -3.6286191940307617], + [2.382472515106201, 3.6091020107269287], + [-0.3392708897590637, 9.460932731628418], + [2.646310806274414, -4.745746612548828], + [3.085254669189453, -4.637465000152588], + [2.616649866104126, 4.731578350067139], + [-6.838606834411621, -1.9528368711471558], + [-2.057921886444092, 1.0394173860549927], + [7.668771743774414, -3.940890073776245], + [-4.361832618713379, 6.782806396484375], + [1.9132992029190063, -6.8498616218566895], + [0.927054226398468, -6.659521102905273], + [0.8012501001358032, 0.28163817524909973], + [1.3248302936553955, 1.980965495109558], + [1.2489240169525146, -7.721122741699219], + [-4.48441219329834, -3.850720167160034], + [-4.44871187210083, -3.1411478519439697], + [-6.2298173904418945, 7.672008514404297], + [-3.6416008472442627, 3.9429104328155518], + [3.2090137004852295, -5.089938163757324], + [-4.409542560577393, -1.7327053546905518], + [2.296750783920288, -4.326902389526367], + [-0.43461018800735474, 9.122026443481445], + [-0.4136470556259155, 10.50869369506836], + [2.9573590755462646, -4.447134017944336], + [-3.520085096359253, -4.2060747146606445], + [9.290502548217773, -2.585747480392456], + [-2.3312265872955322, 1.480636477470398], + [1.8143587112426758, 5.154760360717773], + [4.7761969566345215, -0.883413553237915], + [-5.466885089874268, -2.3321969509124756], + [-5.0015950202941895, -3.53837513923645], + [-2.4986565113067627, 1.291016697883606], + [-0.24342715740203857, 10.612200736999512], + [2.2993898391723633, -3.4628660678863525], + [1.844565510749817, 4.6729888916015625], + [-0.28345662355422974, 11.063189506530762], + [-0.21199005842208862, 10.178729057312012], + [-3.184068441390991, -1.749149203300476], + [-4.646252632141113, -4.408478260040283], + [-3.826697587966919, -2.9640753269195557], + [-3.824519157409668, 5.198272705078125], + [6.852890491485596, -1.4200488328933716], + [1.6897079944610596, 5.420008659362793], + [-0.5343637466430664, 10.918508529663086], + [-2.507758617401123, 1.9574397802352905], + [2.0081839561462402, 5.768181800842285], + [2.043602705001831, -4.658339023590088], + [4.335444927215576, -2.2496273517608643], + [-6.972639560699463, -2.5784289836883545], + [-4.841679096221924, -2.411254405975342], + [3.239948272705078, -4.850039005279541], + [-5.156853675842285, -2.359748601913452], + [-7.2638421058654785, 8.97485637664795], + [3.0909130573272705, -4.644619464874268], + [8.390151023864746, -2.308429002761841], + [-1.3019683361053467, 10.163185119628906], + [-2.651879072189331, -1.5115268230438232], + [0.7480920553207397, 0.47040092945098877], + [0.4098440408706665, -0.7137128710746765], + [-3.230264186859131, -1.9391812086105347], + [2.5980560779571533, -4.453279495239258], + [7.4326300621032715, -2.091632843017578], + [-2.4515380859375, 1.6900568008422852], + [1.7054646015167236, 5.343894004821777], + [0.6952596306800842, -0.5684871673583984], + [-3.315707206726074, -5.240660667419434], + [-7.923374652862549, -0.3114302158355713], + [-3.8113515377044678, 4.513520240783691], + [3.1117444038391113, 2.2932446002960205], + [2.7359089851379395, -4.666495323181152], + [-5.300013065338135, 4.474817752838135], + [4.876949787139893, -2.465836763381958], + [-5.3089776039123535, 1.2528694868087769], + [-2.3010199069976807, 1.223723292350769], + [1.2982149124145508, 0.4057464003562927], + [-0.3462672829627991, 9.471492767333984], + [0.9180507063865662, -0.308286190032959], + [-5.295827388763428, 5.114017009735107], + [-0.3228343725204468, 9.286857604980469], + [-5.383686542510986, -4.030881881713867], + [5.396198749542236, 6.969770431518555], + [5.449625492095947, 7.431593894958496], + [1.0751358270645142, -5.075286865234375], + [5.777634620666504, -1.1372712850570679], + [-4.707828998565674, -2.453517198562622], + [-5.141608715057373, -4.208653450012207], + [-3.9291441440582275, 4.687215328216553], + [2.925945281982422, -4.427727222442627], + [-0.4608843922615051, 11.830240249633789], + [-3.617971181869507, 5.423264503479004], + [0.22637850046157837, -1.0151063203811646], + [-4.35218620300293, -2.771522283554077], + [-0.267259806394577, -1.4534289836883545], + [0.007437460124492645, 9.942266464233398], + [-0.2632538676261902, -1.6287370920181274], + [2.605637311935425, -4.431469917297363], + [8.2807035446167, -3.3037726879119873], + [-5.474267482757568, -3.548616647720337], + [1.3863921165466309, -7.694999694824219], + [-2.510300874710083, 1.9101125001907349], + [3.2658755779266357, 6.54318904876709], + [-2.443286180496216, 1.763105034828186], + [2.6449625492095947, 5.269413948059082], + [2.715712785720825, -4.104007720947266], + [2.918113946914673, -4.41239595413208], + [-2.86468505859375, 0.3898426294326782], + [-7.766408443450928, 9.41948413848877], + [-4.2532572746276855, -1.264377236366272], + [-0.5656688809394836, 11.825153350830078], + [-0.1675235629081726, -1.2817652225494385], + [2.722132921218872, 4.823034286499023], + [-4.071524620056152, -3.8930041790008545], + [8.736527442932129, -2.3449323177337646], + [-4.69887113571167, 6.230665683746338], + [-5.057743549346924, -1.2914661169052124], + [-2.9449899196624756, -3.1958186626434326], + [2.979656457901001, -5.07919454574585], + [0.6199035048484802, -7.084325313568115], + [-0.2906506657600403, 9.031484603881836], + [-1.274003505706787, 8.32080078125], + [9.202803611755371, -2.5890088081359863], + [2.4981424808502197, -6.207516670227051], + [-2.5487804412841797, -0.12011706829071045], + [-4.794214725494385, -2.9678165912628174], + [-5.463901042938232, -1.3957786560058594], + [-4.1156744956970215, -1.911463737487793], + [-2.1752493381500244, 5.909412384033203], + [-5.571376323699951, -1.810756802558899], + [-5.729737758636475, 6.04374885559082], + [-6.590876579284668, -1.6133145093917847], + [-4.580013275146484, 4.13373327255249], + [-0.30671459436416626, 8.94970703125], + [-3.0117547512054443, -4.065408706665039], + [5.342337608337402, -1.0278717279434204], + [-2.3813703060150146, 1.4821261167526245], + [-2.4184885025024414, 2.324920892715454], + [-0.8495141863822937, -0.8014829158782959], + [9.162113189697266, -2.536694288253784], + [-3.5088794231414795, -2.214061975479126], + [-0.14915883541107178, -1.2526057958602905], + [3.161245822906494, -4.732503414154053], + [-5.211736679077148, -3.346813917160034], + [8.95151424407959, -2.3373866081237793], + [1.781032681465149, 5.357151985168457], + [-3.88157057762146, 0.2624523639678955], + [3.124607801437378, -4.86293363571167], + [-3.493161201477051, 5.375149726867676], + [0.8600850105285645, -4.144105911254883], + [-4.757058620452881, 6.529003143310547], + [7.210847854614258, -1.4812672138214111], + [-0.5670561790466309, -0.48139268159866333], + [-2.4938066005706787, 2.0886874198913574], + [-0.021793492138385773, 10.163763046264648], + [-3.2695834636688232, 2.993713140487671], + [-5.000361442565918, -5.53269100189209], + [-0.5081315636634827, 9.933459281921387], + [2.3803248405456543, -4.020497798919678], + [3.4499332904815674, -1.396893858909607], + [3.4994051456451416, 6.897669792175293], + [-4.354795932769775, -4.432058811187744], + [7.983693599700928, -2.5180752277374268], + [-2.6534018516540527, 2.0380465984344482], + [0.8131560683250427, -6.228379726409912], + [-7.252957820892334, 8.816896438598633], + [-3.3338348865509033, 0.9963341951370239], + [0.5993983149528503, -0.19261810183525085], + [-7.19760274887085, -2.3968074321746826], + [-3.028653621673584, -3.353508234024048], + [-2.6762497425079346, -4.090025901794434], + [1.7478792667388916, 4.664664268493652], + [4.60918664932251, -5.164761543273926], + [-4.259089946746826, 3.1068813800811768], + [6.148329257965088, -1.3446094989776611], + [-0.4474014639854431, 10.835630416870117], + [-4.192320346832275, -5.75104284286499], + [2.715902090072632, -4.542202472686768], + [-4.944801330566406, 3.025486469268799], + [-1.0094242095947266, -0.6311094760894775], + [-4.118962287902832, 6.622953414916992], + [3.245844841003418, 1.0440510511398315], + [3.19008207321167, 1.2639658451080322], + [-6.0278496742248535, -1.9143753051757812], + [-5.5293402671813965, 3.5687780380249023], + [1.513465166091919, -8.386053085327148], + [-3.6689388751983643, -1.8119022846221924], + [0.3472434878349304, -5.062845230102539], + [-0.2510153353214264, 0.431654155254364], + [8.357185363769531, -2.1422879695892334], + [-0.23773664236068726, 11.121095657348633], + [4.914747714996338, -0.918526291847229], + [-2.2382001876831055, 2.4042446613311768], + [-7.16409158706665, -1.382256031036377], + [3.2038865089416504, -4.820948123931885], + [-5.145989894866943, -3.223708391189575], + [-5.767851829528809, 6.368260383605957], + [-3.558892250061035, -4.374017238616943], + [6.556705474853516, -2.2945165634155273], + [1.9294869899749756, 4.36138916015625], + [-4.850045204162598, -1.8453174829483032], + [2.0276381969451904, 5.247354507446289], + [-5.678670883178711, 3.3386728763580322], + [-3.5851194858551025, 5.303720951080322], + [-4.788816928863525, -3.7173678874969482], + [-4.480264186859131, -3.05389666557312], + [1.9670524597167969, -3.9331369400024414], + [-0.22209852933883667, 10.12255859375], + [-5.742473602294922, -3.4831156730651855], + [1.120415210723877, 6.416116714477539], + [-0.04613635689020157, -0.5616766810417175], + [-5.670359134674072, -2.8251633644104004], + [1.9607250690460205, -8.900880813598633], + [2.5762646198272705, -4.003293514251709], + [1.8740530014038086, 5.076999664306641], + [-1.2191541194915771, -0.37420642375946045], + [-0.2152119278907776, -0.9206662178039551], + [-4.968491554260254, -1.8732213973999023], + [3.05607533454895, -4.652327537536621], + [1.3994107246398926, -3.77974534034729], + [4.460231304168701, 6.614326477050781], + [-2.1881191730499268, 2.785423994064331], + [2.028317451477051, 6.673517227172852], + [2.6238157749176025, -5.473749160766602], + [-7.0245041847229, 8.753335952758789], + [5.614301681518555, -1.0371763706207275], + [-4.844395160675049, -3.5793166160583496], + [-6.998399257659912, 8.391129493713379], + [-0.23577013611793518, -0.5361106991767883], + [2.664440393447876, -6.878142356872559], + [-5.935778617858887, 1.80100679397583], + [3.2573864459991455, -7.09065580368042], + [8.594003677368164, -2.3637940883636475], + [-5.534328460693359, -3.268099308013916], + [-2.1214168071746826, 2.5205414295196533], + [4.5986785888671875, -1.1339715719223022], + [-0.18566054105758667, 9.928939819335938], + [-0.412269651889801, 8.842613220214844], + [4.539761066436768, -0.2822727560997009], + [2.1310338973999023, -3.887019395828247], + [2.8759796619415283, -4.318090915679932], + [-8.283669471740723, -1.4037058353424072], + [5.727794170379639, -3.540579080581665], + [-1.032546043395996, -1.552681803703308], + [-3.6829116344451904, 7.489926338195801], + [-4.558492183685303, -2.66510272026062], + [6.939291477203369, -3.5801961421966553], + [-2.679456949234009, 6.215834617614746], + [2.209365129470825, -6.706372261047363], + [6.437287330627441, -1.8155709505081177], + [-3.965869665145874, -2.0960915088653564], + [5.860070705413818, -1.0785739421844482], + [-4.298376083374023, -1.666881799697876], + [4.995361804962158, -1.2389901876449585], + [-0.5825455784797668, 9.40140151977539], + [-2.1201493740081787, 2.7806358337402344], + [-6.078927516937256, 5.151002883911133], + [-4.95833158493042, -2.731187343597412], + [-1.9561363458633423, 1.5097147226333618], + [-4.517605781555176, -2.5718441009521484], + [-4.806128025054932, -3.617705821990967], + [-2.1346240043640137, 2.6914830207824707], + [9.946792602539062, -2.75785756111145], + [-5.482364177703857, 1.438976526260376], + [2.231398344039917, 5.754559516906738], + [-3.2590272426605225, -1.7852036952972412], + [-2.236590623855591, 2.172612428665161], + [-5.148348331451416, -4.028311252593994], + [-3.3910715579986572, 3.317279100418091], + [-0.09537572413682938, 9.401845932006836], + [-2.255344867706299, 1.1392278671264648], + [-2.021514892578125, 5.1313066482543945], + [-5.259281158447266, -3.7224745750427246], + [1.8118294477462769, 4.449259281158447], + [-2.132246732711792, 0.8068966865539551], + [-4.262561321258545, -2.217533826828003], + [-4.414246082305908, 4.148201942443848], + [-4.461344242095947, 0.3370974659919739], + [-5.741357326507568, -4.3383588790893555], + [-0.30968886613845825, 10.565019607543945], + [-0.5403176546096802, 8.953969955444336], + [2.961312770843506, -4.3016462326049805], + [3.110856533050537, -4.6587395668029785], + [3.07529878616333, 5.302867889404297], + [-6.20058012008667, -0.606601893901825], + [0.09937607496976852, 4.37490177154541], + [9.009176254272461, -2.4788501262664795], + [-2.9186294078826904, 0.6653944253921509], + [2.636512517929077, -3.9550437927246094], + [-0.554030179977417, 11.414827346801758], + [-5.193516254425049, -1.5285450220108032], + [8.25467300415039, -2.3463826179504395], + [3.230027198791504, -5.162839889526367], + [-3.2063775062561035, 1.5098800659179688], + [6.745291709899902, -1.6545523405075073], + [0.38310641050338745, -0.16528774797916412], + [-6.482364177703857, 7.868842124938965], + [-4.4861226081848145, 5.965127468109131], + [-0.3531379699707031, 9.019562721252441], + [-4.836253643035889, 6.894571781158447], + [-0.21445178985595703, -0.8950489163398743], + [-4.102088928222656, 6.340585708618164], + [-3.6677253246307373, -2.7209794521331787], + [2.933572292327881, 0.7109265923500061], + [1.612246036529541, -8.038451194763184], + [6.188444137573242, -1.2554426193237305], + [-4.45691442489624, -2.982635974884033], + [-0.2317572832107544, 9.265954971313477], + [-0.32830187678337097, -0.8930020332336426], + [5.753829479217529, -1.1774928569793701], + [0.716967761516571, 0.3067653775215149], + [2.654569625854492, -5.403233528137207], + [-2.112861394882202, -0.6882013082504272], + [-5.531059741973877, 5.787823677062988], + [-4.807200908660889, 6.915048599243164], + [-0.4250454306602478, 10.195564270019531], + [-0.24478769302368164, 10.145212173461914], + [-3.2870700359344482, 5.382918834686279], + [7.062095642089844, -2.8087997436523438], + [-3.9144246578216553, -5.745075225830078], + [1.0010108947753906, 5.134215354919434], + [-4.88238525390625, 3.7147397994995117], + [-0.3932388424873352, -1.057072401046753], + [2.905952215194702, -4.868636131286621], + [-2.606743097305298, -2.646629571914673], + [-0.2022693157196045, -1.5830925703048706], + [-4.4209394454956055, 1.9123737812042236], + [-5.372004508972168, 7.254214286804199], + [2.098541736602783, -4.9428839683532715], + [0.6702143549919128, -0.8459848165512085], + [2.2716329097747803, 5.689650535583496], + [-5.5019850730896, -4.516517639160156], + [3.084674596786499, -4.6634135246276855], + [3.2051937580108643, -5.356081962585449], + [9.03394889831543, -2.5150022506713867], + [-2.000953435897827, 1.6534689664840698], + [-3.1000518798828125, -0.23225048184394836], + [-7.026408672332764, -1.3087881803512573], + [2.3301308155059814, -5.194421768188477], + [-4.463616847991943, 4.253913879394531], + [-0.2612190842628479, 10.331727981567383], + [-4.192340850830078, 1.5440659523010254], + [2.205939531326294, -4.756832122802734], + [-1.741186499595642, -2.982656478881836], + [2.0451011657714844, -3.928849935531616], + [-2.000760316848755, 0.46776795387268066], + [-4.262638092041016, -5.415034294128418], + [6.613405704498291, -1.4061754941940308], + [-0.5601406097412109, -1.3549065589904785], + [-2.4370033740997314, 1.3298366069793701], + [-4.787941932678223, -3.5595569610595703], + [2.7416272163391113, -6.293396949768066], + [-0.36507439613342285, 8.613958358764648], + [-2.5042564868927, 3.099400758743286], + [-4.943583011627197, -2.6626088619232178], + [-3.564016103744507, -1.2214977741241455], + [8.727341651916504, -2.410870313644409], + [0.633906364440918, -0.3576529622077942], + [2.2879464626312256, 0.9155880808830261], + [-4.605566024780273, -2.108261823654175], + [-5.904159069061279, 6.522195339202881], + [-2.9246575832366943, -3.7250466346740723], + [-6.248127460479736, 4.164172649383545], + [-0.10195661336183548, 6.744683742523193], + [-0.5477542877197266, 11.486735343933105], + [3.1991350650787354, -4.786888599395752], + [1.9395763874053955, -6.3137736320495605], + [-5.020448684692383, 1.588733196258545], + [1.5086033344268799, -5.0856218338012695], + [-2.120148181915283, 0.4695988893508911], + [2.682237386703491, -4.091723442077637], + [-5.975998401641846, 7.895997047424316], + [-2.5055031776428223, -4.679256439208984], + [1.2847079038619995, 5.082430839538574], + [3.1450002193450928, -4.853611946105957], + [1.4974011182785034, -6.380152702331543], + [-4.487582683563232, -2.6327531337738037], + [-6.8070502281188965, 8.140705108642578], + [-6.296583652496338, 7.866180419921875], + [-6.174654483795166, -1.4664968252182007], + [10.242676734924316, -2.8193132877349854], + [-4.256486415863037, -2.5681991577148438], + [-5.315913677215576, -2.453202247619629], + [-5.063618183135986, -1.8044756650924683], + [-0.4038829803466797, 9.478767395019531], + [-0.4588997960090637, 9.069684982299805], + [0.2777673006057739, -0.63381427526474], + [-0.27524441480636597, 9.740531921386719], + [-2.5407490730285645, 4.160963535308838], + [-2.6036429405212402, -0.577811062335968], + [-3.592146635055542, 0.031131621450185776], + [2.879837989807129, -4.425410270690918], + [2.022590398788452, -4.560040473937988], + [0.48804980516433716, -2.5116422176361084], + [-5.194802761077881, -1.3233948945999146], + [1.6304471492767334, -8.229118347167969], + [-1.7125577926635742, -2.302060842514038], + [-4.768622875213623, 5.555903434753418], + [7.967019557952881, -2.8979053497314453], + [3.231407880783081, -5.1169328689575195], + [3.3654072284698486, -5.351592063903809], + [-1.979175329208374, 1.8794991970062256], + [2.055645704269409, -7.456918716430664], + [-4.620909214019775, -2.5393834114074707], + [0.47264301776885986, -0.7169495820999146], + [-4.486423969268799, 5.497454643249512], + [2.8781750202178955, -4.442109107971191], + [-2.009504556655884, -2.1717607975006104], + [-4.957953929901123, -2.998403310775757], + [-4.862701892852783, -2.2862071990966797], + [-5.137500762939453, -1.093712568283081], + [-2.0997750759124756, 1.1252764463424683], + [-4.802985668182373, 3.4682748317718506], + [-3.8811333179473877, -4.415883541107178], + [5.95911979675293, -1.2336515188217163], + [6.521612644195557, -1.4357589483261108], + [-4.267930030822754, 6.1041460037231445], + [-4.626969337463379, -1.9385825395584106], + [-7.171087741851807, -1.9355632066726685], + [-4.311883926391602, 4.646164894104004], + [-5.1786041259765625, -4.150407791137695], + [2.263526678085327, 6.189663410186768], + [5.618289470672607, -0.15366175770759583], + [1.892976999282837, 0.6934323906898499], + [-5.176546573638916, 5.1359429359436035], + [-4.324585914611816, 6.328690528869629], + [6.092080116271973, -3.8835995197296143], + [-4.597654342651367, -2.6654183864593506], + [3.0642669200897217, -5.038372993469238], + [-4.607102870941162, 0.09374922513961792], + [-4.051585674285889, -3.324432849884033], + [7.916415691375732, -2.6858701705932617], + [-5.7226243019104, 0.4503331780433655], + [-0.09213412553071976, 9.893412590026855], + [7.9493842124938965, -1.9646849632263184], + [8.131562232971191, -2.4209110736846924], + [-0.15374132990837097, -0.5343733429908752], + [2.6138546466827393, -4.229701042175293], + [6.480371952056885, 7.845902442932129], + [-2.48349928855896, 1.8457528352737427], + [8.17883586883545, -2.065675973892212], + [-5.045004367828369, -3.6338484287261963], + [-2.6583316326141357, -0.8676265478134155], + [-4.2539825439453125, -5.56904935836792], + [2.991551399230957, -4.6891679763793945], + [-0.6699594855308533, 10.58599853515625], + [-6.069229602813721, -3.0109570026397705], + [2.501774787902832, -6.628324508666992], + [-1.104052186012268, 3.404362440109253], + [3.0132579803466797, -7.833268165588379], + [9.041182518005371, -2.5633537769317627], + [2.942913770675659, -4.567453861236572], + [-3.7009479999542236, -3.4119808673858643], + [-2.372135877609253, -2.699047565460205], + [1.21934175491333, -6.170482635498047], + [-4.455252170562744, 4.824443340301514], + [-2.5922088623046875, -0.031374815851449966], + [-7.544193267822266, 0.43199336528778076], + [-4.470646381378174, -3.169292449951172], + [2.9524648189544678, -4.461284637451172], + [-4.705959796905518, -2.1872055530548096], + [-1.5497663021087646, 5.924901008605957], + [1.743451714515686, 0.3555614650249481], + [4.7969889640808105, -1.446005940437317], + [-4.871915340423584, -3.644195795059204], + [2.8975093364715576, 6.053600311279297], + [-5.429042339324951, -3.561005115509033], + [-0.4887372851371765, -1.2683087587356567], + [-1.991690754890442, 2.458494186401367], + [3.0095160007476807, -4.5610761642456055], + [-0.36642396450042725, 9.435018539428711], + [2.008147954940796, -3.9042809009552], + [-2.170574903488159, 1.1033213138580322], + [-0.6779404878616333, -1.5521601438522339], + [0.9387272000312805, 0.28378334641456604], + [8.199061393737793, -2.150928020477295], + [-5.35064697265625, 4.369643211364746], + [2.8530986309051514, -2.4061787128448486], + [-0.2055019736289978, 9.32560920715332], + [2.5070765018463135, -7.566263198852539], + [-3.623035430908203, 0.8011641502380371], + [-2.071720600128174, 2.0779247283935547], + [2.861335515975952, -3.6205966472625732], + [-3.2912559509277344, -1.591908574104309], + [-5.433957576751709, 4.722588062286377], + [-4.844963073730469, 6.399177551269531], + [-0.8320935368537903, -2.2699015140533447], + [9.550092697143555, -2.6511316299438477], + [-2.5694615840911865, -1.5677382946014404], + [-0.1516065001487732, 10.405674934387207], + [-2.63594651222229, 2.893641710281372], + [8.283116340637207, -2.6056275367736816], + [-3.5191469192504883, 3.837984085083008], + [-1.3478507995605469, -0.6744996309280396], + [3.1445043087005615, -4.702389717102051], + [-8.106436729431152, -0.9594331979751587], + [-6.989012241363525, 8.488919258117676], + [6.813614368438721, -3.3213202953338623], + [2.7321956157684326, 6.074372291564941], + [1.690632700920105, 2.037489652633667], + [2.244258165359497, -8.660564422607422], + [-1.9240244626998901, 2.6675097942352295], + [-2.2587904930114746, 1.2944555282592773], + [-7.962501525878906, 0.7341371774673462], + [2.916090250015259, -4.414127349853516], + [-2.642871618270874, 1.8651353120803833], + [-4.652489185333252, 3.967639684677124], + [-6.59977388381958, 8.038314819335938], + [-0.045520760118961334, 0.20373427867889404], + [3.1305277347564697, -4.750028610229492], + [-0.2874217629432678, 10.374855041503906], + [6.507090091705322, -5.221904754638672], + [-4.398159503936768, -3.737809181213379], + [-5.508963108062744, 5.916283130645752], + [3.266573190689087, -5.22545051574707], + [2.5773112773895264, -4.491736888885498], + [-0.24179786443710327, 10.391332626342773], + [-0.4664608836174011, 9.605104446411133], + [-1.8943876028060913, 2.027509927749634], + [3.6199376583099365, -2.9318320751190186], + [-5.164034366607666, 3.9678499698638916], + [-4.717813968658447, 7.191817283630371], + [-4.969398021697998, -3.110220432281494], + [-7.3813652992248535, -1.3083620071411133], + [1.4125498533248901, 0.6980657577514648], + [2.311368465423584, 0.8421340584754944], + [-2.80532169342041, 2.664590358734131], + [-3.213848114013672, -2.1806654930114746], + [-0.3145439028739929, 9.184915542602539], + [-0.43028342723846436, 7.184532165527344], + [-8.090665817260742, -2.042771100997925], + [3.1126396656036377, -4.954545021057129], + [-6.154839992523193, 0.08227705955505371], + [8.481468200683594, -2.2415778636932373], + [-0.021721251308918, 10.274574279785156], + [-4.48041296005249, 6.674456596374512], + [6.924317836761475, -1.7643764019012451], + [-5.656152248382568, -1.1454297304153442], + [1.3891515731811523, -6.376914024353027], + [-4.2409491539001465, 4.433056354522705], + [3.6176140308380127, 6.410494804382324], + [2.4104244709014893, 0.7725098729133606], + [-0.6237683296203613, 9.304024696350098], + [3.2805023193359375, -4.906609535217285], + [-3.1442768573760986, -4.85209846496582], + [-6.543562412261963, 7.931056499481201], + [2.121511697769165, 1.9931238889694214], + [-7.958963871002197, -1.3748764991760254], + [-2.669243812561035, -2.257301092147827], + [1.436078667640686, 5.106405258178711], + [-6.843404769897461, -2.105456829071045], + [0.6244642734527588, -0.07266741991043091], + [-0.6312240958213806, 4.960813522338867], + [-4.003749847412109, -2.5484888553619385], + [3.402754545211792, -3.3216986656188965], + [-1.1516422033309937, 1.3855010271072388], + [3.6458420753479004, 6.64144229888916], + [-0.42541831731796265, 10.107760429382324], + [-3.9512994289398193, 3.6618967056274414], + [2.4155004024505615, -3.9761245250701904], + [-0.38620465993881226, 10.95092487335205], + [-4.785550594329834, 2.1503894329071045], + [-0.8404130339622498, 2.1644999980926514], + [-0.2200419306755066, 9.386768341064453], + [1.8076581954956055, 2.1161577701568604], + [4.627861499786377, 6.528029441833496], + [-0.28804951906204224, 11.131579399108887], + [-5.056540012359619, -1.0402723550796509], + [2.0246732234954834, -10.219605445861816], + [-2.48896861076355, 2.346266746520996], + [-4.067246913909912, 6.871855735778809], + [-5.595670223236084, -1.3258787393569946], + [-6.388573169708252, 5.369586944580078], + [-4.902667045593262, -3.67330002784729], + [8.98603630065918, -2.5302188396453857], + [2.6498067378997803, -4.046263694763184], + [-0.3999118208885193, -0.9983986616134644], + [-4.56530237197876, -2.972238302230835], + [-4.673991680145264, -1.8356257677078247], + [2.7951369285583496, -4.497150897979736], + [2.9675686359405518, -4.48423433303833], + [1.7734248638153076, -3.2320749759674072], + [0.35442832112312317, -1.2062076330184937], + [-3.8081305027008057, -1.9105583429336548], + [0.6804412007331848, -0.8682482242584229], + [2.864593267440796, -4.296233177185059], + [2.9504404067993164, -4.784217834472656], + [-0.3679658770561218, 10.166524887084961], + [3.029479742050171, -8.243629455566406], + [6.24515438079834, -1.945946216583252], + [-4.844894886016846, -3.1618340015411377], + [-4.057548999786377, -1.5199958086013794], + [2.9362127780914307, -5.228177547454834], + [-3.120296001434326, 4.257476806640625], + [-3.446364402770996, 3.6189849376678467], + [-1.907986044883728, 5.6917195320129395], + [9.09575080871582, -2.6121020317077637], + [-4.8430304527282715, 1.2982264757156372], + [-8.011113166809082, 9.735740661621094], + [-6.1064934730529785, 7.227089881896973], + [2.7781453132629395, -4.172929286956787], + [-0.15695089101791382, 9.507075309753418], + [-0.8640485405921936, -1.426908016204834], + [-0.6196718811988831, -1.0149009227752686], + [2.5485641956329346, -3.2944746017456055], + [4.333242893218994, -0.947638750076294], + [2.9115099906921387, -6.699444770812988], + [-5.112796306610107, 0.8510466814041138], + [2.0590670108795166, -7.889680862426758], + [-2.2584493160247803, 1.9258629083633423], + [2.8827860355377197, -6.69941520690918], + [-3.0838046073913574, -3.256967067718506], + [-4.933950424194336, -2.2361695766448975], + [2.088960886001587, 0.8453679084777832], + [-5.459117412567139, -4.375898361206055], + [2.7816193103790283, -4.207319259643555], + [-0.3906397819519043, 10.474157333374023], + [9.163145065307617, -2.5347254276275635], + [-5.796573162078857, 4.139964580535889], + [-3.9385502338409424, 4.030768394470215], + [-2.1037862300872803, 2.774381399154663], + [2.4167606830596924, -3.9049649238586426], + [-7.718212604522705, 9.516940116882324], + [-2.2147979736328125, -1.1177349090576172], + [-0.23662501573562622, 9.938535690307617], + [-2.944948196411133, -4.508716583251953], + [7.70690393447876, -1.967758059501648], + [-2.273747205734253, 2.315859079360962], + [-4.159577369689941, -1.271783471107483], + [8.176737785339355, -2.108041524887085], + [-5.121201992034912, 4.164883136749268], + [-0.6883773803710938, 9.197482109069824], + [-4.914070129394531, -0.3786851167678833], + [-2.166718006134033, 2.58616042137146], + [-5.175309181213379, 0.1717413365840912], + [1.5392338037490845, -6.792637348175049], + [8.71606731414795, -2.4627456665039062], + [5.5017476081848145, -1.1190446615219116], + [-4.550146579742432, -3.554511785507202], + [-2.3514530658721924, 1.1038600206375122], + [-3.0597944259643555, 5.957208633422852], + [-0.6409788727760315, 9.626985549926758], + [-6.415304183959961, -1.7216633558273315], + [-0.7532593607902527, -1.1959670782089233], + [-5.683748722076416, -0.7251143455505371], + [-6.242611408233643, -2.3277664184570312], + [6.96327543258667, -5.233178615570068], + [-0.4984716773033142, -2.209322929382324], + [2.6514225006103516, -3.9565155506134033], + [9.43622875213623, -2.7251343727111816], + [-4.512317657470703, -2.580960273742676], + [10.313830375671387, -2.8468306064605713], + [-2.177572011947632, 2.436567544937134], + [-0.5632126331329346, 8.980311393737793], + [2.4671311378479004, 5.687544822692871], + [-4.51610803604126, 3.468533515930176], + [-6.860754489898682, 8.568121910095215], + [-4.65938138961792, 0.9114373326301575], + [-5.144348621368408, -2.7673280239105225], + [2.1593263149261475, 5.540815830230713], + [-6.412160873413086, 7.596673965454102], + [-5.349390506744385, -4.283225059509277], + [2.2518692016601562, -6.415026664733887], + [-2.14755916595459, 0.8432343006134033], + [-4.608323574066162, 7.543922424316406], + [5.1825714111328125, 6.8085103034973145], + [2.44472599029541, -7.726990699768066], + [-2.7494726181030273, -0.9237785935401917], + [1.2767889499664307, -5.52603006362915], + [8.957818031311035, -2.8229305744171143], + [-3.9439339637756348, -2.527650833129883], + [-6.447995662689209, 7.321552753448486], + [3.23457407951355, -4.836116790771484], + [-3.700610637664795, -2.328979253768921], + [4.747437953948975, 7.4059553146362305], + [1.2877528667449951, -8.230709075927734], + [3.118236780166626, -6.66567325592041], + [-6.626945972442627, -1.2922146320343018], + [-3.763939142227173, -1.0309051275253296], + [4.356198787689209, 6.78864860534668], + [1.447453260421753, -7.745687484741211], + [-5.223930835723877, 2.295215129852295], + [-5.934011459350586, -1.4792691469192505], + [-0.3101303279399872, -1.4346662759780884], + [-0.5441399216651917, 9.50821304321289], + [-5.487257480621338, 2.331721067428589], + [-3.2649550437927246, -1.3402550220489502], + [-8.00309944152832, 9.742823600769043], + [-2.4753262996673584, 2.223550796508789], + [-3.761897325515747, -3.774829149246216], + [8.157933235168457, -2.3238937854766846], + [7.04036808013916, -1.4072455167770386], + [1.8481049537658691, 5.315718173980713], + [-2.8041999340057373, -3.5598270893096924], + [5.833306789398193, -0.9803455471992493], + [-6.4124979972839355, 2.6411049365997314], + [3.2147576808929443, 7.037880897521973], + [-0.6065441370010376, 4.987010955810547], + [-5.768794536590576, 6.675144195556641], + [-3.215958833694458, 5.29216194152832], + [-1.7051163911819458, -2.237916946411133], + [-6.480139255523682, 8.035292625427246], + [1.6205554008483887, 3.4990928173065186], + [-2.7646193504333496, -0.5780797004699707], + [3.1038506031036377, -4.895597457885742], + [-7.602927207946777, -1.7589738368988037], + [1.6989593505859375, -7.039437294006348], + [1.69619882106781, -3.740386486053467], + [8.60761833190918, -2.7803211212158203], + [-4.325356960296631, 5.014210224151611], + [2.3829023838043213, -3.5985748767852783], + [3.134479522705078, -4.863193511962891], + [-0.5005832314491272, 11.0643310546875], + [-2.2358908653259277, -0.5123531818389893], + [1.1862149238586426, -6.375699996948242], + [-0.34613513946533203, 5.898199081420898], + [2.5291311740875244, -5.68630838394165], + [-0.2687579393386841, 9.748164176940918], + [2.9604344367980957, -4.460322380065918], + [5.844268798828125, -2.158724308013916], + [5.984756946563721, -2.9455060958862305], + [-0.1450648307800293, 9.527716636657715], + [-2.2688193321228027, 2.422863006591797], + [2.2903382778167725, -8.751215934753418], + [-6.350080966949463, -2.107801675796509], + [0.130327969789505, -0.4704382121562958], + [-4.733949661254883, 4.938189506530762], + [9.01163387298584, -2.561185598373413], + [-5.209576606750488, -2.2469072341918945], + [8.012452125549316, -2.7374000549316406], + [-2.2795608043670654, -0.1994214653968811], + [1.0133461952209473, -2.1021196842193604], + [-2.5822865962982178, -2.429598569869995], + [-5.041100978851318, -3.656627893447876], + [-0.2806098163127899, -1.6622153520584106], + [-2.045295000076294, -3.0115795135498047], + [1.9477417469024658, 1.0573023557662964], + [0.7800865173339844, 4.61221170425415], + [1.3726084232330322, -6.970172882080078], + [-7.989131927490234, -0.6419246196746826], + [0.3862560987472534, -0.7479453086853027], + [-6.481194972991943, -2.074608087539673], + [-1.981220006942749, 2.322526216506958], + [-0.873513400554657, 1.7264138460159302], + [-0.14910727739334106, 10.064186096191406], + [-6.108503818511963, 5.766426086425781], + [5.580897331237793, -2.346608877182007], + [4.540660858154297, -1.0822035074234009], + [-5.332242012023926, 7.523835182189941], + [8.436729431152344, -2.215851068496704], + [-1.9718596935272217, -1.0740857124328613], + [0.6088090538978577, 0.4787125587463379], + [-4.907902240753174, 5.8732829093933105], + [1.9993712902069092, 5.291744232177734], + [-4.217659950256348, -1.9603585004806519], + [-5.5217766761779785, -2.725288152694702], + [-2.628300905227661, -2.2646379470825195], + [3.014177083969116, -4.532906532287598], + [-5.186218738555908, -1.6466373205184937], + [-0.165119469165802, -0.8754624128341675], + [-3.2325689792633057, -2.3517379760742188], + [-5.015578746795654, 1.8358428478240967], + [2.924085855484009, -4.409695625305176], + [9.82919692993164, -2.7278859615325928], + [0.6328177452087402, 8.011225700378418], + [-3.167401075363159, 5.180734634399414], + [-3.3691508769989014, -1.1903051137924194], + [-0.7769837975502014, 9.111505508422852], + [8.776595115661621, -2.33860182762146], + [-5.407057285308838, -3.592331647872925], + [2.95906138420105, -6.190529823303223], + [-0.9223842620849609, 3.1459319591522217], + [-5.127079486846924, -0.9082303047180176], + [-4.179166316986084, -2.2009122371673584], + [-5.508342266082764, -3.366895914077759], + [-4.523914813995361, -2.0941121578216553], + [-0.3624608516693115, -0.8687217235565186], + [3.077073812484741, 5.995002746582031], + [-3.5252575874328613, 6.080753326416016], + [-3.343985080718994, -1.2663224935531616], + [1.2776288986206055, -6.683952331542969], + [3.5263302326202393, -6.573696613311768], + [-4.561854839324951, -3.869537115097046], + [-0.46143239736557007, -1.3784693479537964], + [-4.341618061065674, -2.5238754749298096], + [4.747933864593506, -1.1786466836929321], + [-3.592864990234375, 6.291590690612793], + [-5.84542989730835, -1.748487114906311], + [5.777266502380371, -2.5300638675689697], + [-4.670130729675293, -4.579252243041992], + [-5.097790241241455, 4.0758514404296875], + [-2.997492790222168, 0.406755268573761], + [-5.345942974090576, -2.722552537918091], + [9.180987358093262, -2.6590421199798584], + [-4.871302127838135, -3.542409658432007], + [1.9473681449890137, 5.158158302307129], + [-5.534952163696289, 4.445331573486328], + [-0.3030236065387726, -0.8958382606506348], + [-4.447651386260986, -2.783878803253174], + [5.863827228546143, -2.9085934162139893], + [9.275364875793457, -2.5382261276245117], + [2.07928204536438, -7.425234794616699], + [1.1009442806243896, -6.544999122619629], + [-4.865390300750732, 3.379033088684082], + [8.353066444396973, -2.1646573543548584], + [-7.4560041427612305, 9.13996696472168], + [-4.935312747955322, -1.2089630365371704], + [9.679045677185059, -2.7126028537750244], + [-3.719931125640869, -1.558350682258606], + [-0.4318011403083801, 9.979942321777344], + [1.966737985610962, 5.6620049476623535], + [0.35523566603660583, -0.611456573009491], + [-0.6951760649681091, 3.742079496383667], + [-4.625218868255615, -3.8168251514434814], + [-2.631671905517578, -3.0890519618988037], + [-5.363816261291504, 6.585267543792725], + [3.2680633068084717, -4.884331703186035], + [2.34314227104187, 4.15120792388916], + [-0.3908150792121887, 10.43173599243164], + [-1.748734474182129, 6.605603218078613], + [-3.526277780532837, -1.3103290796279907], + [-0.17103487253189087, 10.606812477111816], + [1.3737192153930664, 1.6188620328903198], + [-0.06643862277269363, 10.053306579589844], + [-4.992082118988037, -3.1095542907714844], + [-4.63681173324585, -3.503840923309326], + [3.032184600830078, -4.815157890319824], + [-4.83854341506958, -2.7780919075012207], + [-4.464186668395996, -2.1930434703826904], + [9.254444122314453, -2.653073310852051], + [-4.949868679046631, -1.9405006170272827], + [-2.2118701934814453, 2.208163022994995], + [-2.74367618560791, 0.7084110379219055], + [2.550691843032837, -3.8117332458496094], + [-4.23812198638916, -2.1383609771728516], + [6.175817966461182, -1.2221713066101074], + [-4.623312473297119, -3.6979715824127197], + [-4.911892414093018, -4.946496963500977], + [-3.495615243911743, -1.8682551383972168], + [1.597798228263855, -1.5261824131011963], + [2.178187608718872, -10.075843811035156], + [-0.16796690225601196, 9.442049980163574], + [8.821709632873535, -2.4299428462982178], + [-6.783533573150635, -1.7609857320785522], + [6.65890645980835, -1.4096019268035889], + [-4.092635154724121, -1.5335742235183716], + [7.707343578338623, -2.0427043437957764], + [8.20849323272705, -2.5591442584991455], + [-7.350734233856201, -1.8274235725402832], + [-0.18040072917938232, -1.2327786684036255], + [-5.8484787940979, -2.3929951190948486], + [5.567532062530518, -2.0855844020843506], + [-2.487311840057373, 2.0453968048095703], + [-0.04908568412065506, 9.837661743164062], + [0.22625917196273804, 9.38554573059082], + [-6.031417369842529, -0.8914031386375427], + [9.040400505065918, -2.417617082595825], + [1.977386236190796, 1.1641663312911987], + [1.448862910270691, 1.24919593334198], + [3.108325481414795, -4.847729682922363], + [-4.985076904296875, -1.1914758682250977], + [-7.551327228546143, 9.459909439086914], + [4.729162216186523, 0.3767296075820923], + [1.4553608894348145, -2.5784757137298584], + [-4.827322483062744, 1.5600515604019165], + [-7.865042209625244, 9.596467971801758], + [-0.5372428297996521, -1.6697150468826294], + [5.46104097366333, -1.4268302917480469], + [-4.666219234466553, -2.3853750228881836], + [4.647632122039795, 6.484078884124756], + [-4.809615612030029, 5.890863418579102], + [5.748058795928955, 7.683986186981201], + [-5.697534084320068, 4.490634441375732], + [-5.976711273193359, 7.787001132965088], + [-4.704270362854004, 1.6120609045028687], + [-0.5441181063652039, 11.095525741577148], + [-2.4137611389160156, 2.5390214920043945], + [-6.28761625289917, -1.9308807849884033], + [3.014763593673706, -4.530722141265869], + [2.696526050567627, -4.87476921081543], + [-5.40252161026001, -2.4833855628967285], + [-1.2067813873291016, 10.298441886901855], + [2.950500249862671, -5.371204376220703], + [-3.973369836807251, 5.425065994262695], + [-4.477971076965332, -1.5587773323059082], + [-4.296253204345703, -1.9665751457214355], + [-6.1179351806640625, 5.293440341949463], + [2.352881669998169, 5.946108341217041], + [-7.064157009124756, 1.8034179210662842], + [2.801861524581909, 1.2864868640899658], + [-3.566899061203003, -4.106453895568848], + [1.510838508605957, -6.247154235839844], + [-0.25563400983810425, 10.604707717895508], + [-4.076219081878662, 6.526669502258301], + [6.307301998138428, -0.8381454944610596], + [-2.927556037902832, 2.369676113128662], + [-2.1699655055999756, 0.6707798838615417], + [2.4892730712890625, -4.11588191986084], + [2.1216719150543213, -5.932541847229004], + [3.294175863265991, 6.466920852661133], + [-4.169797897338867, 5.641533374786377], + [1.8223621845245361, -9.066624641418457], + [-5.296006679534912, -4.47965145111084], + [-3.753533363342285, 5.786324501037598], + [-4.21876335144043, -3.592782735824585], + [-4.424215793609619, -2.3009393215179443], + [3.08868145942688, -4.6536407470703125], + [-0.2317250370979309, -0.48879697918891907], + [-5.111837387084961, 2.7200448513031006], + [-5.3505682945251465, -2.391310930252075], + [-4.915391445159912, -1.518103003501892], + [-4.558737754821777, -2.637017250061035], + [-6.367793083190918, 8.616606712341309], + [-0.5698125958442688, 5.612556457519531], + [8.677111625671387, -2.388544797897339], + [3.4534475803375244, -5.139301300048828], + [-3.9585087299346924, -0.6088847517967224], + [2.829786539077759, -4.259078502655029], + [-5.235467433929443, -3.6234774589538574], + [-4.100874423980713, -2.568566083908081], + [-0.6242903470993042, -1.4660943746566772], + [8.903227806091309, -2.51713490486145], + [-0.0348019078373909, 9.676216125488281], + [-2.1134731769561768, -0.8685574531555176], + [9.074092864990234, -2.561495542526245], + [2.3007795810699463, -3.6023707389831543], + [-1.6557947397232056, -0.28579816222190857], + [0.005603067576885223, 8.89987564086914], + [-4.209758281707764, 6.216208457946777], + [-4.886932849884033, -1.8490134477615356], + [3.1163976192474365, -4.668683052062988], + [3.0438621044158936, -5.477791786193848], + [8.765103340148926, -2.29390549659729], + [-2.9226491451263428, 5.65043830871582], + [2.7132060527801514, -3.8939402103424072], + [-3.953294515609741, -2.22343111038208], + [-0.027934499084949493, 9.204115867614746], + [-3.735761880874634, -2.4320809841156006], + [-5.1453657150268555, -3.7095086574554443], + [-4.577767372131348, -2.363445281982422], + [-6.380144119262695, 8.100770950317383], + [-4.506539821624756, 4.967782020568848], + [-3.96252703666687, -3.1736645698547363], + [-4.662493705749512, 2.0387916564941406], + [9.405587196350098, -2.791241407394409], + [-1.0255848169326782, -1.4823702573776245], + [-4.102675914764404, 5.923802375793457], + [-2.3153109550476074, 1.9965862035751343], + [-0.4279246926307678, 2.5364668369293213], + [-3.003330945968628, -1.8935950994491577], + [-0.13697010278701782, 10.328962326049805], + [-3.539747953414917, -2.510427474975586], + [-7.275432586669922, 9.057659149169922], + [2.75921368598938, -4.216449737548828], + [-2.4475224018096924, 1.9734565019607544], + [-3.7606754302978516, 7.9868927001953125], + [-6.080512046813965, 7.056164741516113], + [-7.930460453033447, -0.5592973232269287], + [-0.41240695118904114, -0.6904475688934326], + [6.252002239227295, -2.463533639907837], + [-6.677680492401123, -2.61283278465271], + [-3.619258403778076, -0.7065111398696899], + [-0.13517075777053833, 9.68124008178711], + [-5.78777551651001, 7.15916633605957], + [0.18193605542182922, 0.29837197065353394], + [0.4594571590423584, -5.778195381164551], + [0.7670221924781799, -5.594810485839844], + [-4.370233058929443, -2.5201146602630615], + [-2.3027238845825195, 2.5710697174072266], + [8.408824920654297, -2.2160470485687256], + [7.64750862121582, -2.2433197498321533], + [-6.757485866546631, 8.642452239990234], + [8.715758323669434, -2.2074320316314697], + [-0.2730407118797302, 10.735057830810547], + [6.607876300811768, -1.6255759000778198], + [6.3896284103393555, -3.2884633541107178], + [0.5788629055023193, -0.7598028779029846], + [-1.271801471710205, 5.81776237487793], + [-4.641246318817139, 3.574748992919922], + [-1.6968350410461426, 4.414989471435547], + [3.0215580463409424, -7.731476783752441], + [1.8661409616470337, 5.405051231384277], + [-7.224589824676514, 8.82407283782959], + [-0.16790634393692017, 10.599191665649414], + [2.478259801864624, -7.6899495124816895], + [2.1461710929870605, -7.398698806762695], + [-7.3486175537109375, 9.310100555419922], + [1.5111374855041504, -2.9286673069000244], + [-4.661202430725098, 3.331453323364258], + [-6.030029296875, 2.2310965061187744], + [-1.9897077083587646, 2.2690889835357666], + [2.1827187538146973, 6.241668224334717], + [-6.091242790222168, 7.675629615783691], + [2.1993868350982666, 5.672455310821533], + [-0.23479127883911133, 10.253177642822266], + [0.9351251721382141, -6.299483776092529], + [-2.557344436645508, 1.942244052886963], + [1.3739662170410156, -2.950220823287964], + [-4.552521228790283, -4.80798864364624], + [-2.8769609928131104, 3.0293664932250977], + [2.7567107677459717, -7.556484222412109], + [5.865219593048096, -5.375665187835693], + [-4.795449256896973, -2.8439602851867676], + [8.738984107971191, -2.736934185028076], + [-4.2395501136779785, -1.1867876052856445], + [8.192681312561035, -2.3021020889282227], + [-4.382142066955566, 3.7430479526519775], + [8.631172180175781, -2.489055633544922], + [4.212527751922607, -2.8579747676849365], + [3.7646725177764893, 6.498359680175781], + [-2.667126417160034, 2.051679849624634], + [0.317422091960907, -1.4640566110610962], + [3.068258047103882, -4.609068870544434], + [-7.339417934417725, 8.903456687927246], + [-0.3182185888290405, 9.247485160827637], + [2.031726121902466, 5.6391754150390625], + [-0.08762717992067337, 10.069314956665039], + [5.7518486976623535, -1.2595863342285156], + [-6.643592834472656, -2.3978419303894043], + [2.3267884254455566, -3.902005434036255], + [-0.3718741536140442, 11.788576126098633], + [-4.703702926635742, 3.8388783931732178], + [1.8388432264328003, 4.377476692199707], + [-2.765733242034912, -4.024151802062988], + [1.8219647407531738, 5.525180816650391], + [8.598809242248535, -2.4923858642578125], + [2.656094551086426, -4.384276390075684], + [-3.5946691036224365, -2.4790961742401123], + [1.7050738334655762, -3.3700249195098877], + [-4.0629167556762695, 4.817757606506348], + [1.789768934249878, -8.864463806152344], + [-6.205271244049072, -2.9837002754211426], + [3.2035861015319824, -5.094627857208252], + [-7.744020462036133, 9.473747253417969], + [0.7155572175979614, -6.717621803283691], + [-5.026094913482666, 1.1156445741653442], + [-5.4980292320251465, -3.0971150398254395], + [-3.7061874866485596, -0.9510456919670105], + [-5.630914211273193, 6.619141101837158], + [2.19395112991333, -8.215715408325195], + [2.3777475357055664, 1.8412212133407593], + [-5.699305057525635, 3.7377030849456787], + [1.9196321964263916, -6.896007537841797], + [-1.9931175708770752, 2.7001287937164307], + [9.791275978088379, -2.7674200534820557], + [2.2950212955474854, 0.8292958736419678], + [-7.7898640632629395, -0.911959171295166], + [-3.6952688694000244, 6.053678512573242], + [-4.0827412605285645, -1.503663420677185], + [-3.4300920963287354, -3.507805109024048], + [1.009948492050171, -7.172219276428223], + [0.8090180158615112, 1.0133417844772339], + [-4.9455246925354, 0.7027662992477417], + [0.19401365518569946, 4.544203758239746], + [-6.083446025848389, -2.3525283336639404], + [-2.519218683242798, 2.0867395401000977], + [6.851656436920166, -1.574171543121338], + [-5.854093074798584, -2.1242244243621826], + [-2.5282537937164307, 2.101788282394409], + [-0.3395276665687561, -1.1498303413391113], + [-5.643284320831299, -3.59604811668396], + [3.2099177837371826, -4.801139831542969], + [-3.2303788661956787, 3.4168176651000977], + [-0.10959047824144363, 10.126174926757812], + [-3.741962194442749, -1.8621160984039307], + [-5.17057991027832, -3.2753446102142334], + [-4.808356285095215, 0.47465479373931885], + [-6.05873441696167, -0.7087793350219727], + [2.9078872203826904, -4.389340400695801], + [9.457134246826172, -2.714653491973877], + [-0.5621514916419983, 12.237781524658203], + [0.9625391364097595, -6.948530197143555], + [2.9558846950531006, -4.930292129516602], + [-0.7580139636993408, -1.130422592163086], + [-5.1914238929748535, 7.324556350708008], + [6.496886730194092, -5.248767375946045], + [-1.1819384098052979, -1.9485582113265991], + [-5.197755336761475, 4.2978620529174805], + [1.6575037240982056, -4.320613384246826], + [7.1904072761535645, -1.626065969467163], + [6.5445146560668945, -0.734548807144165], + [5.62114143371582, -1.6551125049591064], + [-0.2847888469696045, 9.998793601989746], + [-0.4277457296848297, 4.161049842834473], + [-5.13045072555542, -1.82328462600708], + [-4.123535633087158, -1.0596667528152466], + [4.220055103302002, -2.3310725688934326], + [-5.3719682693481445, 1.4426075220108032], + [-3.349144458770752, 3.584800958633423], + [3.123415470123291, -4.696897506713867], + [5.923038959503174, -0.4262124001979828], + [1.7666380405426025, 0.88172447681427], + [-4.718724727630615, -3.7521493434906006], + [-6.551671504974365, 0.9186139106750488], + [0.7385653257369995, -6.0194926261901855], + [-2.291619300842285, 0.6249769926071167], + [1.8668431043624878, 5.433804512023926], + [0.6886641383171082, -0.12873628735542297], + [-5.657236576080322, 6.6325531005859375], + [-4.725494861602783, -2.373504161834717], + [1.173905611038208, -7.107099533081055], + [-5.614420413970947, 4.696199417114258], + [-4.659145832061768, -3.5839760303497314], + [4.632876396179199, -3.1597907543182373], + [-5.073098182678223, 2.803647518157959], + [-2.200336217880249, -0.8911337852478027], + [1.5491628646850586, 1.0059648752212524], + [-2.113462448120117, 2.827418565750122], + [2.821348190307617, -4.275571346282959], + [-5.918264865875244, -6.922448635101318], + [6.98087739944458, -2.4001476764678955], + [-0.3807884156703949, -0.7719603776931763], + [-0.17775359749794006, -0.4633244276046753], + [1.503035068511963, 4.954927921295166], + [-5.1138529777526855, -3.3496601581573486], + [-5.144489765167236, -3.330524206161499], + [0.6891098022460938, -0.5136678218841553], + [-0.3509829044342041, 10.783218383789062], + [-5.32686710357666, -4.215301513671875], + [-1.0675280094146729, -2.7085726261138916], + [-2.2494986057281494, 1.6787759065628052], + [-7.909435749053955, -1.1357719898223877], + [2.525319814682007, -3.80993390083313], + [2.1731321811676025, -3.733544111251831], + [-5.448239326477051, 7.914942741394043], + [3.008829355239868, 1.289384126663208], + [-3.7739622592926025, -3.0783531665802], + [8.922032356262207, -2.421211004257202], + [1.7112995386123657, 0.6570640802383423], + [-0.2315199077129364, -0.8660777807235718], + [-6.083547115325928, -2.4208829402923584], + [-5.973227024078369, 3.400509834289551], + [-6.334881782531738, 8.13698959350586], + [-4.814539432525635, -4.07075834274292], + [0.574841320514679, 0.6287195086479187], + [-4.773123264312744, -4.605257034301758], + [-5.654989719390869, -1.440463900566101], + [3.240023374557495, -5.106746673583984], + [8.101326942443848, -1.977105975151062], + [8.23613166809082, -2.6855571269989014], + [3.2706406116485596, -4.883399963378906], + [4.11100435256958, -1.9064594507217407], + [5.546851634979248, 7.338006973266602], + [-0.2748679518699646, 10.322673797607422], + [-1.1935020685195923, 1.390821099281311], + [-3.166714906692505, -0.7272722721099854], + [-5.451433181762695, 5.256858825683594], + [3.0282251834869385, -4.9799652099609375], + [-3.1241748332977295, -1.307437539100647], + [-5.014057636260986, -2.553422212600708], + [-0.3716587424278259, 10.591705322265625], + [-4.887328624725342, -0.5581788420677185], + [-4.8818135261535645, -2.510859489440918], + [-2.3007383346557617, 1.3939461708068848], + [1.9687418937683105, -9.327524185180664], + [-4.130029201507568, 4.261958599090576], + [2.1075732707977295, -3.836225748062134], + [5.666838645935059, -4.499571800231934], + [2.111997604370117, -5.088366508483887], + [-3.9276368618011475, 4.137793064117432], + [6.271148204803467, -2.0161218643188477], + [0.44567984342575073, -0.74478679895401], + [-4.863569736480713, -3.731654405593872], + [-5.395913600921631, 4.882977485656738], + [-2.664518117904663, 1.2099593877792358], + [-6.079396724700928, 0.14020037651062012], + [8.634794235229492, -2.378412961959839], + [10.125889778137207, -2.7658042907714844], + [2.8640921115875244, -4.312824249267578], + [1.1917058229446411, -6.466693878173828], + [1.6519465446472168, 5.339935302734375], + [-0.3668680787086487, 10.193459510803223], + [-0.6615079045295715, 11.689722061157227], + [-0.19673442840576172, 9.607057571411133], + [-4.525172233581543, -1.7433297634124756], + [3.1905486583709717, -4.768466949462891], + [2.2907207012176514, -6.963794708251953], + [9.547402381896973, -2.7632505893707275], + [-0.06213069707155228, 9.699917793273926], + [2.4358344078063965, 5.850528717041016], + [-5.7545166015625, -4.171847820281982], + [-0.19749075174331665, 10.493303298950195], + [-3.8010976314544678, -2.449876308441162], + [1.5853443145751953, 5.122068881988525], + [0.3745177388191223, 7.408840656280518], + [7.990586757659912, -1.868517279624939], + [9.158278465270996, -2.5384981632232666], + [-3.417614221572876, -2.8116116523742676], + [-2.626753568649292, 1.74380362033844], + [2.0323853492736816, 6.00550651550293], + [-4.02414083480835, -2.176180124282837], + [-2.743272542953491, -4.285938262939453], + [2.473437786102295, -4.503830432891846], + [-0.2524908185005188, 10.643739700317383], + [-2.6081652641296387, 1.5889437198638916], + [-5.542056560516357, 4.268122673034668], + [2.9000751972198486, -4.481826305389404], + [-0.862675130367279, 10.240255355834961], + [-2.1004323959350586, 3.428957223892212], + [-5.120510578155518, -0.45868635177612305], + [-3.225159168243408, -3.722179889678955], + [-0.7285007834434509, 0.5184329748153687], + [2.708061695098877, -4.135106086730957], + [-4.9106926918029785, -6.720715522766113], + [2.278430700302124, 5.836552619934082], + [-6.7881269454956055, -2.122845411300659], + [-0.9909327626228333, 6.061911582946777], + [-7.45226526260376, -1.9282528162002563], + [-4.479056358337402, 0.7481141686439514], + [0.23107600212097168, 7.40023136138916], + [-5.637411594390869, 1.6073075532913208], + [-3.7068161964416504, -2.354022264480591], + [-4.588112831115723, -1.4941340684890747], + [1.8684213161468506, 5.336071014404297], + [-4.546959400177002, 3.8499510288238525], + [1.2509195804595947, -6.491662979125977], + [-4.709217071533203, -5.000481605529785], + [-7.01701545715332, -2.576793670654297], + [-1.1641608476638794, -0.8343629837036133], + [-6.610559940338135, -0.6451322436332703], + [-1.1438958644866943, -2.615753650665283], + [-5.911509990692139, -0.12541866302490234], + [-0.21462291479110718, 9.550078392028809], + [-0.18550974130630493, 9.49739933013916], + [-5.833193302154541, 7.596068382263184], + [-2.7392375469207764, 1.6568325757980347], + [-3.8631913661956787, -4.896237373352051], + [-2.0968844890594482, -1.4072619676589966], + [-5.392373085021973, -1.3089419603347778], + [-0.026607997715473175, 9.04024887084961], + [1.9077256917953491, 5.455529689788818], + [-4.7493720054626465, 7.700734615325928], + [-2.445889472961426, -1.8183118104934692], + [9.202707290649414, -2.686321973800659], + [-6.891836643218994, 8.547149658203125], + [1.5110782384872437, -4.78704833984375], + [0.27345311641693115, -5.734991073608398], + [-0.3888940215110779, 10.53431510925293], + [-5.979398727416992, 6.455415725708008], + [3.008561134338379, -4.712281703948975], + [-4.227114200592041, -2.4531869888305664], + [3.276212215423584, -4.681684970855713], + [-3.39013934135437, -1.4982892274856567], + [-2.095104694366455, 2.3613617420196533], + [1.2565572261810303, -5.444714546203613], + [6.982903003692627, -2.655797004699707], + [5.275463581085205, 6.9505414962768555], + [9.207134246826172, -2.590416669845581], + [-4.65385103225708, -0.7933875322341919], + [-6.783376216888428, -1.397778868675232], + [-5.702938556671143, -3.2022793292999268], + [-4.755468845367432, -6.378970146179199], + [5.1240925788879395, 7.323054313659668], + [-4.798473834991455, -0.6956373453140259], + [2.804860830307007, -4.507120132446289], + [2.962592363357544, -4.87529182434082], + [-4.903031826019287, -3.1404941082000732], + [7.196779251098633, -1.9218202829360962], + [-5.9223856925964355, -1.0813971757888794], + [2.529287099838257, -3.317326784133911], + [2.9015095233917236, -4.765871047973633], + [-3.342059373855591, -4.742344856262207], + [0.17195940017700195, 1.8842684030532837], + [-2.390639543533325, 0.9051479697227478], + [-0.2697601914405823, 9.101552963256836], + [-7.131137371063232, 1.7685649394989014], + [-0.2227955460548401, 9.201387405395508], + [-2.2598960399627686, -1.3681076765060425], + [-3.936323881149292, -1.865803837776184], + [-4.150105953216553, -1.569136142730713], + [-4.615700721740723, -1.0360610485076904], + [-3.4572184085845947, -3.7569053173065186], + [1.6447443962097168, -5.502631187438965], + [1.9794843196868896, -4.59354305267334], + [-0.5465880036354065, 9.656035423278809], + [-6.289440631866455, -0.2607482671737671], + [8.692930221557617, -2.2741899490356445], + [-2.4685091972351074, 1.8262752294540405], + [0.931922972202301, -7.3455891609191895], + [5.612789630889893, -1.33421790599823], + [-0.21541374921798706, 9.723031997680664], + [7.537997722625732, -1.8069456815719604], + [-5.810649394989014, 7.776472091674805], + [-2.32141375541687, 1.139601469039917], + [-4.417303562164307, -1.6429321765899658], + [2.5785694122314453, -5.202996253967285], + [-3.1579437255859375, 3.3459014892578125], + [9.775250434875488, -2.65569806098938], + [-1.876830816268921, 2.177074432373047], + [-5.229762554168701, -5.225099563598633], + [2.9805684089660645, -4.7334184646606445], + [2.930710792541504, -4.424428939819336], + [-4.876875400543213, -3.046722173690796], + [-4.028376579284668, -3.7549755573272705], + [-3.1586005687713623, -0.6020671129226685], + [-2.3525679111480713, 2.078660488128662], + [-3.662888765335083, -4.23032283782959], + [-5.6600728034973145, -3.44242787361145], + [-5.6105499267578125, 7.080819606781006], + [-0.7112463116645813, 5.694555759429932], + [-0.364792138338089, 0.26420390605926514], + [1.2514925003051758, -3.8310468196868896], + [0.26324447989463806, -1.3648149967193604], + [2.268477201461792, 5.922574043273926], + [7.9331374168396, -3.2556612491607666], + [-5.104887008666992, -4.962695598602295], + [4.632640838623047, 7.124018669128418], + [-2.5189943313598633, 0.2816012501716614], + [2.5784590244293213, 1.0890904664993286], + [1.4210556745529175, 5.058917045593262], + [-5.4088850021362305, 7.612040996551514], + [-4.093927383422852, -3.12398624420166], + [-0.15650618076324463, 10.05875015258789], + [-5.08798360824585, -2.5279581546783447], + [-3.326774835586548, -3.1855247020721436], + [2.994802474975586, -4.852015018463135], + [-0.20702248811721802, 9.400413513183594], + [-4.11947774887085, 3.16534423828125], + [-2.9560494422912598, 2.3057303428649902], + [-4.933135509490967, -5.387790203094482], + [1.6051174402236938, -7.737259864807129], + [3.2578136920928955, -4.876609802246094], + [-0.24746841192245483, 10.133575439453125], + [9.092761039733887, -2.5436666011810303], + [-0.34674715995788574, 9.58845329284668], + [-4.852271556854248, -1.3629566431045532], + [-4.154041767120361, -2.590963125228882], + [-5.198864936828613, 7.816780090332031], + [-4.758791446685791, -0.5381365418434143], + [-5.058063507080078, 2.0326180458068848], + [2.579678535461426, -4.01133918762207], + [-7.309593677520752, -1.7997896671295166], + [-5.085845470428467, -0.4961419701576233], + [-1.7812532186508179, 1.3523592948913574], + [-1.5667251348495483, 1.4723963737487793], + [-2.91884446144104, -2.587933301925659], + [-5.07128381729126, 0.9726232290267944], + [3.1594674587249756, -4.73606014251709], + [3.048593759536743, -4.5673828125], + [-0.48293089866638184, 9.927547454833984], + [-0.18059787154197693, -0.993736207485199], + [1.687427282333374, 4.8373260498046875], + [-5.6027302742004395, 3.2079803943634033], + [0.25508466362953186, -0.926760196685791], + [-2.53798770904541, -3.645359992980957], + [0.014894120395183563, 9.276937484741211], + [0.5864368081092834, -1.154106616973877], + [-2.353095293045044, 1.2289382219314575], + [-4.70600700378418, 5.809273719787598], + [3.0749926567077637, -4.93320369720459], + [-5.782638072967529, 1.094190239906311], + [-0.4463915228843689, -1.257728934288025], + [-7.097556114196777, 8.715738296508789], + [-0.2512812614440918, 9.489959716796875], + [7.345931529998779, -1.7774094343185425], + [-5.103269577026367, 6.091495990753174], + [0.17986726760864258, 0.8344482183456421], + [1.7777105569839478, -7.861323833465576], + [8.43352222442627, -2.351452589035034], + [-0.3527514338493347, 9.809288024902344], + [-0.3820348381996155, -1.312812089920044], + [-5.771400451660156, 8.385736465454102], + [5.376956462860107, -1.3311344385147095], + [-4.044169902801514, -3.873842477798462], + [1.7211813926696777, 0.9767141342163086], + [0.7094366550445557, 0.15366411209106445], + [-7.353419303894043, -1.0775933265686035], + [7.113522052764893, -2.367957830429077], + [-0.045166440308094025, 10.331707000732422], + [9.009673118591309, -2.525573492050171], + [1.2624558210372925, 6.079833507537842], + [-0.272291898727417, 9.945429801940918], + [5.592644691467285, 7.141027450561523], + [-4.590017795562744, -7.186452865600586], + [-4.088841915130615, -3.7431442737579346], + [-2.3441975116729736, 2.535280704498291], + [-5.219857215881348, 6.033339023590088], + [-3.9909956455230713, 5.979569435119629], + [0.13437163829803467, -1.3397486209869385], + [-4.137993335723877, -2.4228761196136475], + [-5.717304229736328, -6.01615571975708], + [-4.4600677490234375, 6.292428493499756], + [-0.2954002022743225, 10.482126235961914], + [-3.886897563934326, -1.506851315498352], + [2.924999952316284, -3.8727495670318604], + [2.6645500659942627, -4.081199645996094], + [3.628565788269043, 6.868237018585205], + [-2.377025842666626, 2.5679304599761963], + [2.8587660789489746, -4.321879863739014], + [-0.9033697247505188, -0.32763004302978516], + [-0.33674508333206177, 10.440742492675781], + [-2.142230987548828, 2.986957311630249], + [-4.102215766906738, -2.786219596862793], + [-0.9217810034751892, 9.404217720031738], + [-0.5412325263023376, 11.194117546081543], + [7.538144588470459, -2.5292153358459473], + [2.389237403869629, 5.949911594390869], + [-3.6774370670318604, 3.101210117340088], + [2.731752872467041, -2.827197790145874], + [3.1329033374786377, -4.715770244598389], + [0.5868176817893982, 5.43071174621582], + [-5.235837459564209, -3.3224456310272217], + [-2.1206862926483154, 2.5762267112731934], + [3.042151689529419, -5.418705463409424], + [0.2095828354358673, -2.8632049560546875], + [2.859165906906128, 6.558718204498291], + [6.379403591156006, -3.0145535469055176], + [-3.456953763961792, -0.7076402902603149], + [-4.528644561767578, -2.3735368251800537], + [-0.7597816586494446, 9.125256538391113], + [2.510465383529663, -6.2052764892578125], + [2.7102818489074707, -4.1283159255981445], + [-4.837075710296631, -0.5427714586257935], + [3.80802845954895, 6.736597061157227], + [-3.484795331954956, -1.2712535858154297], + [-5.648458003997803, -0.4354703426361084], + [-0.28365206718444824, 9.999652862548828], + [-6.170759201049805, -1.0844676494598389], + [-4.796770095825195, 0.7424378395080566], + [-0.4996870160102844, 11.052772521972656], + [-6.484706401824951, 8.259001731872559], + [-2.135504961013794, 2.4827425479888916], + [5.850942134857178, -1.3283611536026], + [-0.2114458680152893, 9.526460647583008], + [1.852639079093933, 4.619369029998779], + [2.789867639541626, -4.24472713470459], + [-4.3527750968933105, -2.7254645824432373], + [-3.8617398738861084, -0.6577168703079224], + [-2.1352427005767822, 0.8669499158859253], + [2.7790169715881348, -8.123128890991211], + [-1.6817169189453125, 1.6975971460342407], + [-2.939448118209839, 2.2042434215545654], + [-3.034752130508423, -1.6589268445968628], + [2.9593775272369385, -4.873629570007324], + [-3.4629805088043213, -2.307882070541382], + [-2.1234352588653564, 1.8718725442886353], + [-5.168432712554932, 1.9109184741973877], + [-4.369287967681885, -3.8991405963897705], + [2.5889360904693604, -3.965618848800659], + [-2.5094594955444336, 1.4306093454360962], + [2.1662731170654297, -5.680576801300049], + [2.786975145339966, -4.145730495452881], + [0.1684175431728363, -0.5850574374198914], + [2.4205102920532227, -3.5813615322113037], + [0.19869160652160645, 3.0519165992736816], + [-1.2285258769989014, -2.105959892272949], + [2.523138999938965, 0.854326605796814], + [-4.761596202850342, -5.216791152954102], + [0.2162599265575409, -0.6455751061439514], + [8.005118370056152, -1.717058777809143], + [3.1127941608428955, -4.869694709777832], + [-7.621919631958008, -1.6107720136642456], + [-2.640505075454712, -1.4378072023391724], + [-3.332096815109253, 5.418819427490234], + [-5.59205961227417, -2.8505468368530273], + [-4.36226224899292, -2.4794600009918213], + [5.4758172035217285, -1.3247854709625244], + [3.015547037124634, -4.533810615539551], + [7.655797481536865, -2.02128005027771], + [8.321803092956543, -2.300572156906128], + [-2.670166254043579, 1.0929712057113647], + [2.3898041248321533, -4.033895492553711], + [-3.4255969524383545, -2.757127046585083], + [2.917410135269165, -4.389542579650879], + [-4.541202068328857, 3.647369623184204], + [-2.3045246601104736, -1.9209924936294556], + [-0.5253965854644775, 9.673999786376953], + [-4.336752414703369, -1.0413880348205566], + [2.4493372440338135, -7.693058967590332], + [4.304111480712891, 7.006052017211914], + [9.426678657531738, -2.6321396827697754], + [-7.073814392089844, -1.6704157590866089], + [-0.7008336186408997, -1.916782021522522], + [-5.312356472015381, -2.408641815185547], + [9.307108879089355, -2.968846559524536], + [-1.7733550071716309, -0.8786808252334595], + [-4.481986999511719, -1.6414233446121216], + [-5.21658182144165, 0.3894073963165283], + [0.026089541614055634, 9.195934295654297], + [5.953953266143799, 7.513726234436035], + [-4.422322750091553, -5.336528301239014], + [1.8051691055297852, 0.8845494985580444], + [0.4149163067340851, -0.40909549593925476], + [-2.7104899883270264, 5.373150825500488], + [-2.486971616744995, 6.346510887145996], + [-6.660256385803223, -1.2396777868270874], + [-4.95689582824707, -2.4079439640045166], + [3.3502249717712402, 6.834712505340576], + [2.4639320373535156, -3.414292335510254], + [-4.266261100769043, -2.9076335430145264], + [6.068885803222656, -0.04134756699204445], + [-4.936103820800781, 3.0198416709899902], + [-4.864163875579834, 3.5086300373077393], + [7.897505760192871, -2.3774523735046387], + [3.025559425354004, -4.636346817016602], + [2.9168710708618164, -3.6898694038391113], + [3.1515896320343018, -4.716403484344482], + [3.2150790691375732, -5.281859397888184], + [4.713526248931885, 7.780148029327393], + [-0.31971821188926697, -0.9475644826889038], + [-7.255760192871094, 9.017974853515625], + [4.802948951721191, 7.063727378845215], + [-3.874598979949951, 7.079711437225342], + [-2.5981435775756836, 2.0120954513549805], + [-4.246079444885254, 6.809247016906738], + [-4.441955089569092, 3.010481834411621], + [1.2656662464141846, -6.806488037109375], + [-2.5104944705963135, -2.6484835147857666], + [-5.02227258682251, -2.812537908554077], + [0.35907989740371704, 0.12701669335365295], + [-4.986182689666748, -3.181401491165161], + [-5.234992504119873, -2.938643217086792], + [5.467444896697998, -2.3561971187591553], + [-2.4101200103759766, -4.175058364868164], + [3.26560640335083, -5.1978302001953125], + [-2.3837268352508545, 1.8140156269073486], + [-0.2588866353034973, 9.561864852905273], + [-6.387326240539551, 8.82119083404541], + [-4.974136829376221, -0.5324806571006775], + [0.02849894016981125, 3.7812821865081787], + [-0.7481979727745056, 5.326066970825195], + [2.0112545490264893, -5.926887512207031], + [2.999239921569824, 6.757361888885498], + [-2.527750253677368, 1.8221629858016968], + [9.556562423706055, -2.6996853351593018], + [0.8011081218719482, 0.3280637562274933], + [0.9691982865333557, 5.336234092712402], + [3.165785789489746, -5.106015682220459], + [1.9229230880737305, 5.647118091583252], + [9.192684173583984, -2.573007822036743], + [1.938037395477295, -7.688931465148926], + [-8.177775382995605, -1.168919563293457], + [-2.0863327980041504, 2.448434829711914], + [-4.937098979949951, -0.9475474953651428], + [-7.307458877563477, -1.342999815940857], + [-5.527999401092529, 5.807558059692383], + [2.2079203128814697, 5.383924961090088], + [2.1514506340026855, 6.085151672363281], + [-3.7220518589019775, -2.150176763534546], + [-1.6860626935958862, 1.674338936805725], + [-0.18921589851379395, -1.3613958358764648], + [-5.0258097648620605, 7.036016941070557], + [6.814908027648926, -3.794691801071167], + [-3.8024966716766357, -0.4917947053909302], + [-0.342060387134552, 9.013442993164062], + [-4.032000541687012, -3.0485785007476807], + [-3.812556028366089, 2.9931514263153076], + [-4.670512676239014, 5.914575576782227], + [-2.2580058574676514, 2.438767671585083], + [1.3716940879821777, 1.2906756401062012], + [-4.133455753326416, -0.2911551594734192], + [2.991027355194092, -4.510549068450928], + [3.5266177654266357, -6.915955543518066], + [-2.5183751583099365, 2.193117380142212], + [7.539586544036865, -1.4642380475997925], + [-4.509138584136963, 6.362261772155762], + [-3.447728395462036, -3.527458906173706], + [-1.5025629997253418, 0.01407947763800621], + [2.2230584621429443, 5.64161491394043], + [1.556545376777649, -8.312763214111328], + [3.3148891925811768, -5.234903335571289], + [7.443892478942871, -2.0900626182556152], + [-2.286371946334839, 1.5240610837936401], + [1.3820013999938965, 1.733415961265564], + [-1.079384684562683, -0.6097152233123779], + [-2.957484006881714, -3.76051664352417], + [-1.2356631755828857, -1.19643235206604], + [-2.0336403846740723, -0.9008353352546692], + [2.8555445671081543, -4.634677886962891], + [2.050959348678589, -5.125990390777588], + [-7.479503631591797, -1.2944884300231934], + [2.178037405014038, 5.849892616271973], + [-2.7658677101135254, 4.755856513977051], + [-0.4723716378211975, 11.080953598022461], + [-4.611265659332275, -1.3538686037063599], + [-3.436647653579712, 3.1352012157440186], + [-5.821570873260498, 4.912747383117676], + [0.9718292355537415, -6.958499908447266], + [-6.236857891082764, 7.9122843742370605], + [1.6416460275650024, 5.625202178955078], + [8.258736610412598, -2.468810796737671], + [-0.3520039916038513, 8.951735496520996], + [5.824258804321289, -2.2698750495910645], + [-0.158555805683136, 9.757232666015625], + [-2.5576658248901367, 2.0363850593566895], + [-6.257327556610107, 7.479179859161377], + [-6.419832706451416, 8.129558563232422], + [-4.4363274574279785, -3.0139148235321045], + [8.197554588317871, -2.1511354446411133], + [-2.603349447250366, 2.2252326011657715], + [-0.30363136529922485, -1.1963363885879517], + [-2.3862931728363037, 1.6079338788986206], + [1.4741387367248535, -6.954996109008789], + [1.3701509237289429, 9.574270248413086], + [-0.5983670353889465, 11.328319549560547], + [5.4589972496032715, -1.1814383268356323], + [-5.435061454772949, -3.9677846431732178], + [3.0356853008270264, -4.892486572265625], + [-4.489552974700928, -2.1115493774414062], + [-2.282954216003418, 1.6118240356445312], + [-3.0551369190216064, -0.2922653555870056], + [2.859971046447754, -4.411246299743652], + [-4.936240196228027, 2.937852621078491], + [-2.6035587787628174, 5.6093268394470215], + [6.513503551483154, -1.8813554048538208], + [9.392167091369629, -2.6459271907806396], + [-6.272802829742432, -1.9204806089401245], + [-4.60801362991333, -2.7654385566711426], + [-3.8408114910125732, -1.0067065954208374], + [9.410035133361816, -2.606058120727539], + [-0.2931801676750183, 9.728713989257812], + [5.5472331047058105, -1.36520254611969], + [3.0152671337127686, -4.525787353515625], + [-6.94506311416626, -1.4680408239364624], + [-3.694152593612671, -1.7328215837478638], + [-6.468281269073486, 1.2697560787200928], + [6.213595867156982, -2.61932110786438], + [-4.202281475067139, -1.7739520072937012], + [-6.817368507385254, 8.047597885131836], + [-3.3029229640960693, -4.747770309448242], + [-4.471486568450928, 5.500744819641113], + [-2.2052934169769287, 4.2417192459106445], + [-2.9540841579437256, -4.090815544128418], + [-0.4004351496696472, 8.45406436920166], + [2.583848237991333, -3.9775619506835938], + [-1.9925215244293213, -0.36462172865867615], + [-4.283912181854248, -3.798722982406616], + [2.979069471359253, -5.473123073577881], + [-4.935056209564209, -3.319439649581909], + [1.849134922027588, 5.378079891204834], + [-5.08046817779541, -2.544604778289795], + [-4.991281032562256, -2.368812322616577], + [-2.7996935844421387, -4.4975128173828125], + [0.3650590777397156, -0.7460435032844543], + [2.237689733505249, -4.841917037963867], + [2.7250239849090576, 6.157505512237549], + [1.7526594400405884, -3.441946268081665], + [-4.906324863433838, -1.3894433975219727], + [-5.842685222625732, -1.4355541467666626], + [-5.294848918914795, -3.527219533920288], + [-2.4643874168395996, 2.105217695236206], + [-2.5181796550750732, 6.5600266456604], + [8.423197746276855, -2.264448642730713], + [0.15002858638763428, -4.9897308349609375], + [-2.2332608699798584, 1.1717519760131836], + [-5.3788580894470215, -3.6670310497283936], + [2.9625275135040283, 4.391496658325195], + [2.9766600131988525, -4.4706010818481445], + [4.700933933258057, 7.215274333953857], + [-4.755119800567627, -3.4716031551361084], + [-6.750513553619385, 8.287252426147461], + [-4.407637119293213, -2.6992990970611572], + [2.915569305419922, -4.680781364440918], + [-5.363654613494873, -2.0813825130462646], + [-0.3960305452346802, 9.648788452148438], + [-4.4151530265808105, -1.2433637380599976], + [-4.366539001464844, 4.899490833282471], + [3.388517379760742, -5.598576545715332], + [-0.30311834812164307, 9.665427207946777], + [-6.406229019165039, 8.195188522338867], + [-2.396653890609741, 1.6780734062194824], + [2.4594476222991943, -4.286813735961914], + [1.6439940929412842, -7.770506858825684], + [-3.707148790359497, -3.876633882522583], + [1.8804316520690918, -7.683119773864746], + [3.0473411083221436, -4.573973178863525], + [-2.663651466369629, 2.235100269317627], + [2.1969902515411377, -3.172722578048706], + [-2.42736554145813, 2.24823260307312], + [1.93912672996521, 5.2382707595825195], + [-0.7350656390190125, 9.279205322265625], + [-4.408555030822754, -2.0930092334747314], + [0.2689911723136902, 5.307831764221191], + [-5.7618794441223145, 3.969637632369995], + [-5.894857883453369, 2.3879780769348145], + [-0.2237500548362732, 9.613153457641602], + [7.190698623657227, -2.6058247089385986], + [-5.194088459014893, -2.311292886734009], + [-0.24770987033843994, 10.976518630981445], + [-4.042707920074463, -1.4182113409042358], + [-5.807501316070557, 6.885658264160156], + [-4.599955081939697, -2.449462413787842], + [-5.3837456703186035, -3.044086217880249], + [-4.2271647453308105, 6.478499889373779], + [9.08044147491455, -2.8969504833221436], + [-0.4774482250213623, -1.527664303779602], + [1.8990452289581299, -3.285475969314575], + [-4.895089626312256, -0.14706063270568848], + [3.1813533306121826, -4.758308410644531], + [5.372531414031982, -1.8061511516571045], + [-0.6501403450965881, 12.07070541381836], + [-3.9765279293060303, -3.454996347427368], + [2.5466041564941406, 4.859541893005371], + [1.6226030588150024, 5.907567977905273], + [-2.697774648666382, -1.6689778566360474], + [-2.6635172367095947, 1.7239806652069092], + [3.1664352416992188, -4.979866027832031], + [-7.803253650665283, -1.1806913614273071], + [-4.383631229400635, 4.549437046051025], + [2.937025785446167, -3.0849990844726562], + [1.6541330814361572, 3.905993700027466], + [7.993589878082275, -1.8214924335479736], + [-2.7244393825531006, -2.840282678604126], + [-6.544270038604736, -1.2073321342468262], + [-5.834470272064209, -2.372434616088867], + [-3.709988594055176, -1.1981070041656494], + [2.070181131362915, -8.80762004852295], + [0.6800720691680908, -0.10480254888534546], + [8.196890830993652, -1.9693676233291626], + [4.138406276702881, -3.0549542903900146], + [1.7669451236724854, 5.396982192993164], + [1.1865780353546143, -3.0304720401763916], + [-4.95397424697876, -2.561594009399414], + [-4.0931806564331055, 5.90179443359375], + [9.217450141906738, -2.5289461612701416], + [3.0225369930267334, -4.539163112640381], + [-0.31287193298339844, 9.162858963012695], + [-4.1049418449401855, -2.5866100788116455], + [-4.791313648223877, -3.701387643814087], + [2.4204320907592773, -8.170231819152832], + [-5.2620368003845215, 2.6905224323272705], + [-5.035383701324463, -3.4905996322631836], + [2.3912978172302246, -3.1557843685150146], + [2.499772310256958, -3.6166515350341797], + [-1.9210236072540283, 1.4622228145599365], + [1.8082637786865234, -7.942723751068115], + [-0.2309122085571289, 10.089324951171875], + [1.6971023082733154, 5.240549087524414], + [5.362420558929443, -1.0823136568069458], + [1.947566270828247, -8.000993728637695], + [-1.816528558731079, 1.566056489944458], + [0.9440165162086487, 5.3573102951049805], + [3.0088789463043213, -4.57203483581543], + [9.042511940002441, -2.4865310192108154], + [2.989201307296753, -4.605132102966309], + [7.40464973449707, -1.9875023365020752], + [1.1865060329437256, 5.885526180267334], + [-6.197357654571533, 7.446226596832275], + [-4.746584415435791, -2.8168790340423584], + [-6.012041091918945, 7.644309997558594], + [2.3809642791748047, -2.771965265274048], + [2.4242053031921387, -3.606315851211548], + [-3.2879586219787598, -3.7321155071258545], + [2.233398199081421, 5.356590270996094], + [-4.795518398284912, -3.3580334186553955], + [1.207289457321167, -6.107034206390381], + [2.4864628314971924, -4.03588342666626], + [-5.2880330085754395, 0.17228448390960693], + [2.8718559741973877, 1.044688105583191], + [2.7381842136383057, -5.682618141174316], + [-7.605682849884033, 9.25088882446289], + [2.7315521240234375, -4.258018970489502], + [2.5370328426361084, 6.170821666717529], + [-5.24783182144165, -0.4150715470314026], + [-5.630906581878662, 4.573293685913086], + [-0.48075079917907715, -1.1798137426376343], + [3.775561571121216, 5.45980978012085], + [9.758085250854492, -2.6392815113067627], + [1.6355769634246826, -4.868021011352539], + [-4.60322904586792, -3.018874406814575], + [-6.077727794647217, 7.2928009033203125], + [8.422982215881348, -2.141054153442383], + [-1.2059370279312134, -0.06942713260650635], + [2.81952166557312, -3.682520627975464], + [2.4497766494750977, -4.901283264160156], + [-0.40731149911880493, 10.251871109008789], + [3.113542318344116, -4.849030494689941], + [-2.421027421951294, -3.091846227645874], + [2.9285690784454346, -4.427242279052734], + [-7.783351421356201, -1.3438925743103027], + [-5.938085556030273, 7.225829124450684], + [1.8021327257156372, -6.11274528503418], + [-5.70196008682251, 6.457408905029297], + [-5.584388256072998, 3.885751247406006], + [-0.12884151935577393, 9.494376182556152], + [-3.6526806354522705, 5.19889497756958], + [-1.6951661109924316, -2.1257355213165283], + [6.612181186676025, 8.121729850769043], + [2.0350382328033447, 1.0582376718521118], + [-5.214433193206787, -3.3771517276763916], + [-6.0992231369018555, -0.41532307863235474], + [-4.677657604217529, -4.4187164306640625], + [0.15871888399124146, 9.513263702392578], + [-6.994444847106934, -2.115865707397461], + [7.8169169425964355, -2.703362226486206], + [1.8307740688323975, -4.682367324829102], + [1.7208478450775146, -8.150130271911621], + [-2.7640411853790283, -2.053290843963623], + [-3.8435871601104736, -2.345400810241699], + [-2.6679675579071045, 2.2904140949249268], + [-2.8703019618988037, -0.32129472494125366], + [-0.8986029028892517, 8.761373519897461], + [-0.3367960453033447, -0.7982300519943237], + [7.77322244644165, -2.303550958633423], + [-2.2280452251434326, 2.663501024246216], + [-0.26587027311325073, 10.690328598022461], + [-4.04295539855957, -1.448728084564209], + [2.5413944721221924, -7.392559051513672], + [2.3838179111480713, 5.458229064941406], + [1.659304141998291, -5.25833797454834], + [-4.197174549102783, -3.587528944015503], + [3.160810708999634, -4.732034683227539], + [-6.616415500640869, 0.026094432920217514], + [4.307616710662842, -2.531731367111206], + [-3.3389294147491455, 6.372210502624512], + [1.445813536643982, 5.33522367477417], + [-6.247277736663818, 7.297447681427002], + [-1.9310595989227295, 1.8621877431869507], + [-0.2932615876197815, 10.75373649597168], + [-2.4706177711486816, 1.8449853658676147], + [-2.1196749210357666, 0.4371013045310974], + [-3.0188863277435303, -1.444217324256897], + [-0.14230185747146606, -1.1642022132873535], + [5.383027076721191, -1.1903356313705444], + [-5.613840103149414, -1.302777647972107], + [6.112107276916504, -1.635426640510559], + [3.182560443878174, -4.824005126953125], + [-2.1779963970184326, 2.4448673725128174], + [4.710655689239502, -0.7761677503585815], + [-0.9873055219650269, 5.766767501831055], + [-0.252468466758728, 9.849454879760742], + [-4.958061218261719, 4.1349568367004395], + [-6.109089374542236, 7.22566032409668], + [-2.7182767391204834, 6.036128997802734], + [5.4052605628967285, 7.193005084991455], + [-4.980624675750732, -2.6790359020233154], + [-6.164245128631592, 6.538290500640869], + [3.138507127761841, -7.656896114349365], + [-3.9228017330169678, -1.3992397785186768], + [8.488448143005371, -2.2353577613830566], + [-6.018034934997559, 1.6587063074111938], + [8.329453468322754, -2.242133617401123], + [5.878903388977051, -2.0461881160736084], + [2.631394624710083, -4.329296112060547], + [2.2435057163238525, -4.136006832122803], + [-2.780834197998047, 2.443176746368408], + [-0.1265885829925537, 9.497406959533691], + [-0.048121459782123566, -0.8437736630439758], + [-5.735763072967529, 3.3774189949035645], + [9.07344913482666, -2.503133535385132], + [-3.663435697555542, 5.809548377990723], + [-4.396650791168213, -0.442727267742157], + [9.878396034240723, -2.7457923889160156], + [8.267806053161621, -2.2050769329071045], + [0.5422520637512207, 0.229374498128891], + [9.911407470703125, -2.752530336380005], + [-6.461761474609375, 6.841170310974121], + [-0.24185264110565186, 8.593472480773926], + [-1.0045819282531738, 1.3731577396392822], + [3.031107187271118, -4.785391807556152], + [-2.5613012313842773, 1.9364820718765259], + [-1.3909711837768555, 5.488836288452148], + [-1.9451444149017334, -0.6218604445457458], + [-3.5030786991119385, -3.335296630859375], + [-0.610059380531311, 9.428045272827148], + [1.5148448944091797, 5.16428279876709], + [0.13186275959014893, -1.3556382656097412], + [-0.3271922469139099, 10.734068870544434], + [2.78452205657959, -4.274908065795898], + [-4.3965959548950195, -2.516295909881592], + [-2.1005685329437256, 1.8604445457458496], + [4.113137245178223, -1.6819032430648804], + [-5.179214954376221, -2.8995864391326904], + [2.709498643875122, 6.2215495109558105], + [-4.99607515335083, -4.1408371925354], + [3.7081985473632812, 6.504269599914551], + [2.4743144512176514, -4.532286643981934], + [-6.398939609527588, 7.605752944946289], + [-6.490664005279541, -1.3295702934265137], + [1.817678689956665, 5.7177734375], + [-5.699857234954834, 2.529097557067871], + [-2.261329412460327, 2.031526565551758], + [-3.623100519180298, -5.677135467529297], + [2.3860368728637695, 0.9619842767715454], + [-0.8681609034538269, -0.21377530694007874], + [-5.3455119132995605, 6.844223976135254], + [-0.273853600025177, 9.591081619262695], + [2.2366244792938232, 5.788130760192871], + [-2.1426329612731934, 2.9206631183624268], + [-5.790157318115234, -1.816528081893921], + [1.7649405002593994, 0.8311708569526672], + [2.623303174972534, -4.028528213500977], + [-4.256484031677246, -1.0605958700180054], + [2.5364632606506348, 5.102964401245117], + [-1.1188501119613647, 4.575959205627441], + [2.4218227863311768, -3.7625575065612793], + [9.400895118713379, -2.735170602798462], + [2.881622076034546, -4.642043113708496], + [1.5132155418395996, -2.7119293212890625], + [-4.631959438323975, 2.8929128646850586], + [5.597898483276367, -4.522361755371094], + [-5.022673606872559, 0.05494677647948265], + [-0.07278314977884293, -1.3183823823928833], + [-4.005671501159668, 0.3743003010749817], + [-2.8074252605438232, -0.9249342679977417], + [-3.7815849781036377, -1.4219233989715576], + [-5.747331142425537, -1.0160367488861084], + [2.293076276779175, 4.961379528045654], + [8.159887313842773, -2.112562894821167], + [-2.301628589630127, 2.095266580581665], + [7.43063497543335, -3.398648738861084], + [0.05510353296995163, 9.82986831665039], + [-0.2155861258506775, 10.270038604736328], + [2.920377016067505, -4.428402900695801], + [-5.116684913635254, -6.149571418762207], + [-5.245603561401367, -3.5085556507110596], + [2.1345412731170654, 4.321700096130371], + [-4.726316452026367, 3.328965425491333], + [1.9730174541473389, -6.873505115509033], + [9.485398292541504, -2.653895139694214], + [-4.574501991271973, 3.3593199253082275], + [-4.930322170257568, 7.1057820320129395], + [2.4737348556518555, -3.652684450149536], + [2.7183682918548584, 4.6639275550842285], + [-4.537136077880859, 3.6145262718200684], + [-4.672013282775879, 0.4840348958969116], + [8.683316230773926, -2.612062454223633], + [2.875863790512085, -4.6818437576293945], + [-2.413315534591675, 0.4934028387069702], + [-7.1665778160095215, 9.033281326293945], + [-4.529240131378174, 5.344782829284668], + [-2.8383541107177734, 4.312225341796875], + [-2.56850266456604, 2.115626335144043], + [-4.3333282470703125, 2.9242355823516846], + [2.5422744750976562, -3.6323695182800293], + [-1.0500808954238892, 8.60582160949707], + [2.781451463699341, -5.523128509521484], + [-3.3889424800872803, -4.551033020019531], + [1.6646983623504639, 5.025521278381348], + [-2.0189502239227295, 6.414103031158447], + [-1.9779235124588013, 5.390422821044922], + [-3.7591283321380615, 6.539041519165039], + [-4.203793048858643, -1.4491292238235474], + [-4.297029972076416, -1.205399990081787], + [-4.111673355102539, -2.0367302894592285], + [-4.850059986114502, -5.47053337097168], + [2.552692174911499, -6.54254150390625], + [-3.7916901111602783, 6.987698078155518], + [-5.392858982086182, -4.76966667175293], + [-5.203797817230225, 2.402416944503784], + [7.017396926879883, -2.2972421646118164], + [1.23112154006958, 5.282386779785156], + [-4.188806056976318, -2.3084733486175537], + [1.9062749147415161, -3.7402536869049072], + [-2.1286327838897705, 1.587759256362915], + [2.85953688621521, 0.5132434368133545], + [-3.570335626602173, 4.156644344329834], + [-2.9566164016723633, -1.5761008262634277], + [-4.469363212585449, -5.393792629241943], + [5.649176120758057, -0.958379864692688], + [2.981325149536133, -4.553867816925049], + [1.4396498203277588, -4.515994548797607], + [6.7181315422058105, -1.7552162408828735], + [-3.8646090030670166, -1.2993603944778442], + [-5.011642932891846, 0.9163655042648315], + [-4.760619640350342, -2.5234832763671875], + [6.060091495513916, -4.63548469543457], + [-5.473137378692627, -0.9103233814239502], + [-5.496893405914307, 4.630824089050293], + [1.5235674381256104, -6.609133720397949], + [2.291475772857666, 5.504205703735352], + [-0.25608301162719727, 9.910383224487305], + [2.5676984786987305, 6.359383583068848], + [-2.6220667362213135, -4.01826286315918], + [-6.039138317108154, 6.965392589569092], + [2.2759592533111572, 3.5973381996154785], + [2.7859485149383545, 6.1359543800354], + [0.6607462167739868, -6.659150123596191], + [-4.217045783996582, -2.8305373191833496], + [-7.194104194641113, 8.873128890991211], + [-3.4104135036468506, -2.0420546531677246], + [-7.382357120513916, -1.886731505393982], + [-5.075255870819092, -3.5216710567474365], + [-6.897739887237549, 8.544861793518066], + [2.0575203895568848, -3.8070380687713623], + [1.6056627035140991, -8.550528526306152], + [8.469374656677246, -2.2510979175567627], + [-5.222923755645752, -3.0804636478424072], + [-4.368579387664795, 3.457395315170288], + [-5.835440158843994, -2.223489761352539], + [10.449664115905762, -2.890432596206665], + [-7.1862616539001465, -0.8931304216384888], + [3.1623852252960205, -1.311106562614441], + [-5.717800617218018, -2.791583776473999], + [-4.484480857849121, -1.4242011308670044], + [-2.713791847229004, 1.5348117351531982], + [2.5946457386016846, -4.011088848114014], + [-6.958485126495361, 8.418439865112305], + [1.9237754344940186, -3.3006699085235596], + [8.542381286621094, -2.5150210857391357], + [2.2926886081695557, -4.350988864898682], + [7.067419052124023, -4.109353065490723], + [-2.0006325244903564, 2.4688456058502197], + [-4.589351177215576, -2.43485426902771], + [-5.772084712982178, -2.7901318073272705], + [-2.3037867546081543, 0.7496811151504517], + [-1.2490077018737793, 6.870093822479248], + [-5.403357982635498, -2.1066701412200928], + [-3.3537700176239014, -1.7387454509735107], + [-4.957501411437988, 0.1792955994606018], + [3.07312273979187, -4.609759330749512], + [2.224452495574951, -3.76723313331604], + [-3.235257863998413, 6.5594964027404785], + [-7.263235569000244, 8.917539596557617], + [2.2752273082733154, 5.685983657836914], + [-3.2016441822052, -1.9390565156936646], + [0.30088627338409424, 9.382104873657227], + [-6.09210729598999, -2.2615349292755127], + [5.277829170227051, -1.0352140665054321], + [2.0048320293426514, -3.6842916011810303], + [-4.345740795135498, 5.768970489501953], + [1.7923707962036133, -4.134187698364258], + [0.6913073658943176, -4.639009475708008], + [-4.635700225830078, -1.0880719423294067], + [1.784900188446045, 4.919078826904297], + [-2.184319257736206, 0.9260509610176086], + [-1.3035387992858887, 0.8386125564575195], + [3.225161552429199, -4.831813812255859], + [0.6759018301963806, -5.895760536193848], + [-2.2825067043304443, 5.949220657348633], + [-4.480554580688477, -4.695676803588867], + [2.981975555419922, -4.6598100662231445], + [-0.5034822821617126, 9.228194236755371], + [-2.7104709148406982, 2.296212911605835], + [-5.375080108642578, 7.213350296020508], + [-5.984941005706787, 4.361893177032471], + [2.2608377933502197, -10.581113815307617], + [7.728769779205322, -2.690154790878296], + [-0.18523138761520386, 10.226964950561523], + [-2.487194776535034, -3.0295145511627197], + [-0.257610023021698, 9.299293518066406], + [-4.479555606842041, -3.5933101177215576], + [1.622782588005066, -7.684720993041992], + [7.340550899505615, -1.5255082845687866], + [-0.7094000577926636, 5.753246307373047], + [-2.9595770835876465, 5.456733226776123], + [-2.522202491760254, 2.3891279697418213], + [3.233736038208008, -4.838938236236572], + [-2.4751431941986084, 1.7892756462097168], + [2.674591064453125, -4.031885147094727], + [-0.7896023392677307, 9.778541564941406], + [-4.642754077911377, -1.6504729986190796], + [5.756788730621338, -2.0322036743164062], + [-5.099173545837402, 4.101259708404541], + [-4.899930477142334, 2.6892216205596924], + [-4.616164684295654, -1.740204095840454], + [-3.7839739322662354, -0.9971279501914978], + [1.1463700532913208, -6.278604030609131], + [-4.755697727203369, -2.74507999420166], + [-7.006412029266357, -2.1357498168945312], + [1.8339229822158813, 0.9753310680389404], + [-1.5559543371200562, 1.1586942672729492], + [3.0259768962860107, -4.541933059692383], + [-3.2207868099212646, -0.6402543783187866], + [6.3278069496154785, -1.277417778968811], + [3.3456742763519287, 5.504281044006348], + [-0.7933282256126404, 10.176248550415039], + [8.336642265319824, -2.1385183334350586], + [1.220672845840454, -6.135315895080566], + [-0.7826616168022156, 9.465526580810547], + [6.590014934539795, -1.3312777280807495], + [-2.3663785457611084, 1.414389729499817], + [1.1859217882156372, -6.842999458312988], + [-2.332815647125244, 0.8875586986541748], + [-5.107367038726807, 6.097744941711426], + [-5.431440830230713, -3.703036308288574], + [-4.3429036140441895, -4.434462070465088], + [3.029146909713745, -4.675721645355225], + [1.7203277349472046, 1.058913230895996], + [-5.274668216705322, 6.5806989669799805], + [-4.911197185516357, -2.9402735233306885], + [-3.0222885608673096, -2.4552807807922363], + [-5.2494635581970215, 2.2443127632141113], + [2.1501550674438477, -8.651647567749023], + [-0.2447914481163025, 9.88421630859375], + [-4.044948101043701, 4.626469612121582], + [-4.69158411026001, 6.982477188110352], + [-5.244171619415283, -2.3534281253814697], + [-6.6364312171936035, 7.527343273162842], + [6.278881549835205, -1.438188076019287], + [2.5320727825164795, -6.114597797393799], + [-2.228301763534546, 6.039981842041016], + [-0.18934845924377441, 10.133628845214844], + [-4.870008945465088, -5.283141136169434], + [0.707779049873352, 0.33694934844970703], + [3.0434343814849854, -4.79553747177124], + [-4.204517841339111, -3.653765916824341], + [1.103972315788269, -6.9499711990356445], + [-5.835428237915039, 8.035564422607422], + [-4.5547919273376465, 3.6140260696411133], + [3.0155575275421143, -4.5888214111328125], + [-2.345813035964966, 0.6955967545509338], + [-4.602541446685791, -0.2961576581001282], + [2.0470058917999268, -6.989494323730469], + [4.400068283081055, -3.06317138671875], + [-5.402238368988037, 7.523022174835205], + [0.6588799953460693, -5.387943267822266], + [-5.539252281188965, 7.998329162597656], + [5.726797580718994, 7.8154120445251465], + [3.1777091026306152, 1.272655963897705], + [-6.57290506362915, 8.649415969848633], + [2.2024385929107666, 0.7365092039108276], + [-3.3240835666656494, -2.118807554244995], + [-2.1439900398254395, 2.9188294410705566], + [7.057978630065918, -3.5398190021514893], + [1.989609956741333, -3.132967710494995], + [-4.862438678741455, -0.6472261548042297], + [-1.4765381813049316, -0.9658918380737305], + [2.148071527481079, -4.022991180419922], + [2.258573055267334, -3.1674232482910156], + [6.913045883178711, -2.5315980911254883], + [9.399389266967773, -2.9275317192077637], + [9.593894004821777, -2.7534260749816895], + [-0.24185633659362793, 9.287973403930664], + [-5.938838958740234, 1.6408380270004272], + [-6.364184856414795, 7.699458122253418], + [-1.3308627605438232, 0.1062890887260437], + [-7.051543712615967, -1.2881709337234497], + [-4.478960990905762, -2.873067617416382], + [-5.604222774505615, -2.792948007583618], + [-3.6948750019073486, 5.9230451583862305], + [-5.270407199859619, 3.875993490219116], + [2.9832262992858887, -4.521783828735352], + [-8.108627319335938, -0.6555356979370117], + [-2.3693645000457764, 1.606870412826538], + [-3.622749090194702, -0.2300233244895935], + [-3.718132257461548, -2.1327502727508545], + [2.949655055999756, -6.6509599685668945], + [0.3432435989379883, -0.6655197143554688], + [2.0986337661743164, -8.16738224029541], + [-4.304232597351074, -2.6152780055999756], + [1.1257773637771606, -5.320097923278809], + [-2.0740466117858887, 0.7434684038162231], + [5.689182758331299, -3.6676762104034424], + [-4.959273338317871, -2.2292683124542236], + [6.295414924621582, -2.873746871948242], + [7.276425838470459, -2.342336654663086], + [-5.766297817230225, 5.910623550415039], + [-3.2023799419403076, -2.0072929859161377], + [-2.514833927154541, 0.9155348539352417], + [-4.015720367431641, 5.2869768142700195], + [1.5444860458374023, -8.65912914276123], + [-3.8344993591308594, -0.21171611547470093], + [8.051706314086914, -2.279737710952759], + [-2.257251739501953, 0.9411478042602539], + [2.258244752883911, 5.522150993347168], + [-5.899003505706787, -2.448880195617676], + [1.3893120288848877, -7.672966003417969], + [3.4074113368988037, -4.3689866065979], + [0.056780122220516205, -3.6788158416748047], + [-4.5605621337890625, -0.6882436871528625], + [2.461129903793335, 5.960785865783691], + [-2.379866361618042, -2.8812806606292725], + [1.68506920337677, 5.378791809082031], + [-0.4253883957862854, 10.034473419189453], + [5.909728527069092, -2.0369925498962402], + [-3.8134896755218506, -2.988539934158325], + [2.8127400875091553, -4.269702434539795], + [0.2639623284339905, 8.22618293762207], + [-6.571317195892334, 8.205314636230469], + [1.6726305484771729, -3.407824754714966], + [-0.5739384889602661, -1.6807492971420288], + [2.7644336223602295, -4.501806735992432], + [3.0344691276550293, -4.583086967468262], + [-5.473032474517822, -5.639101028442383], + [-5.5488200187683105, 6.095088005065918], + [-6.891726016998291, 8.552654266357422], + [5.900935173034668, -1.562982201576233], + [-1.3088988065719604, 1.1457579135894775], + [-7.346545696258545, -1.389088749885559], + [-0.04234594851732254, 9.599956512451172], + [-4.708953857421875, 4.757734775543213], + [2.0324912071228027, 1.0127617120742798], + [9.315655708312988, -2.4374678134918213], + [1.173938274383545, 0.12076970934867859], + [8.894393920898438, -2.5136325359344482], + [-1.915166974067688, 5.578156471252441], + [0.030445538461208344, -0.4184536933898926], + [1.910491704940796, -9.030866622924805], + [-4.99420690536499, 2.2262303829193115], + [2.0121119022369385, -9.57605266571045], + [9.040423393249512, -2.538914918899536], + [2.228609800338745, -3.499814033508301], + [5.967069149017334, -1.1600956916809082], + [-5.417866230010986, 0.4306586980819702], + [3.1619174480438232, -4.756592750549316], + [9.08446979522705, -2.57271671295166], + [-2.530075788497925, 1.9385775327682495], + [-5.842712879180908, 4.482878684997559], + [-5.142237663269043, 2.8481223583221436], + [-5.694347858428955, 4.221343994140625], + [-5.350479602813721, 4.754607200622559], + [-0.21800965070724487, 9.886358261108398], + [-4.756282329559326, -3.8008477687835693], + [7.50828742980957, -2.4254631996154785], + [-5.019979000091553, -2.55841326713562], + [-4.151383399963379, -2.366978883743286], + [-2.284090518951416, 6.288844585418701], + [-3.5047049522399902, 5.7425384521484375], + [-6.204309463500977, 2.3936376571655273], + [5.730738162994385, -1.0468758344650269], + [-1.7488956451416016, -0.30412742495536804], + [1.9926395416259766, -9.689363479614258], + [3.223795175552368, -5.107392311096191], + [5.871948719024658, -1.3515371084213257], + [-7.597874164581299, -1.2965705394744873], + [-0.30135732889175415, 9.440862655639648], + [-2.5840158462524414, -0.4998374879360199], + [-6.428512096405029, -1.8535243272781372], + [3.1775097846984863, -4.760443210601807], + [-7.286934852600098, -0.2171485424041748], + [1.103919267654419, -6.817176342010498], + [-3.1917154788970947, 4.698010444641113], + [-5.55779504776001, -0.7935940027236938], + [-7.075679302215576, -1.8406630754470825], + [2.918231964111328, -6.617177963256836], + [-5.922255516052246, -1.9867013692855835], + [6.9330949783325195, -0.5785236358642578], + [-0.916350781917572, 9.018294334411621], + [-1.9213621616363525, 0.9780044555664062], + [2.2289912700653076, -5.918240547180176], + [-2.2650349140167236, 1.1719166040420532], + [-3.526810884475708, -2.437349319458008], + [-2.442659616470337, 1.6039283275604248], + [2.4736363887786865, 1.0569405555725098], + [-2.0207173824310303, 2.025383949279785], + [-5.647833347320557, -2.764875888824463], + [9.462071418762207, -2.652397632598877], + [-2.8457796573638916, 1.9726930856704712], + [6.3556647300720215, -1.4012848138809204], + [0.008577100932598114, 9.639592170715332], + [-5.767687797546387, 0.32626664638519287], + [-0.06787807494401932, 9.174943923950195], + [-3.109926223754883, 0.06440562009811401], + [7.192188262939453, -2.928717851638794], + [9.093977928161621, -2.531174898147583], + [3.4262895584106445, -2.2584779262542725], + [-4.717065334320068, -0.21014559268951416], + [-5.117613792419434, -1.1935710906982422], + [0.0007107183337211609, 10.049638748168945], + [-6.700222492218018, 8.550663948059082], + [2.5313704013824463, 6.910947322845459], + [2.1332719326019287, -3.419104814529419], + [-3.854490041732788, -2.3899495601654053], + [2.8401503562927246, -5.263455390930176], + [-4.417062759399414, 4.951704025268555], + [6.032407760620117, -1.2988343238830566], + [9.166176795959473, -2.556908130645752], + [-2.4113404750823975, 1.3389915227890015], + [2.7946131229400635, -4.004822731018066], + [-5.6763834953308105, 6.470908164978027], + [-7.151217937469482, -1.4016014337539673], + [2.6445043087005615, 1.0473130941390991], + [2.719850778579712, -4.136597633361816], + [3.253098249435425, -5.436180591583252], + [-4.900009632110596, -4.853755474090576], + [-1.9479296207427979, 0.10346189141273499], + [-6.048112869262695, 4.563573837280273], + [-4.469025135040283, 3.761814832687378], + [2.10785174369812, -8.242716789245605], + [-0.22001463174819946, 9.815184593200684], + [2.233323812484741, -4.7274169921875], + [0.9655186533927917, 1.5005366802215576], + [8.532519340515137, -2.1500022411346436], + [1.2294726371765137, 5.2294111251831055], + [0.7647396922111511, -4.517526626586914], + [-4.276429176330566, -2.0619027614593506], + [-5.4630656242370605, -3.5600719451904297], + [2.3929848670959473, 5.87409782409668], + [-3.1351511478424072, 6.303503036499023], + [-5.128564357757568, -4.760556221008301], + [2.9786341190338135, -4.719396114349365], + [-5.395350933074951, 4.392336368560791], + [0.5798137784004211, 8.58182430267334], + [2.728172540664673, -5.5732927322387695], + [-0.1855885088443756, -1.3702094554901123], + [-5.350798606872559, -0.8277419805526733], + [1.6130211353302002, -6.140419960021973], + [2.0903353691101074, -2.339393138885498], + [-6.143188953399658, 2.2178688049316406], + [9.187040328979492, -2.539780378341675], + [-0.43338149785995483, 10.36729621887207], + [-2.7670199871063232, 3.0203540325164795], + [2.1788485050201416, 4.51138973236084], + [3.0767464637756348, -4.619289398193359], + [-5.242280006408691, 7.6795654296875], + [-8.743014335632324, -1.1800419092178345], + [-5.206165790557861, -2.9495880603790283], + [0.5139560103416443, -5.310378074645996], + [-4.997323036193848, 3.7184629440307617], + [-3.767620801925659, -2.3367574214935303], + [0.8544172644615173, -5.664342880249023], + [7.122520923614502, -1.7853984832763672], + [-3.8447930812835693, -0.9967758059501648], + [6.1383795738220215, -2.4740164279937744], + [-5.568962574005127, 7.05463981628418], + [-5.552700519561768, 3.487589120864868], + [-0.011677391827106476, 9.864204406738281], + [-5.147395133972168, -1.9933265447616577], + [-1.978811264038086, 5.8620219230651855], + [-5.698436737060547, 7.952944755554199], + [-7.713332653045654, -1.7994391918182373], + [-3.0055651664733887, 0.1943955421447754], + [-0.20520076155662537, -3.96858286857605], + [2.72082781791687, -6.188986778259277], + [3.1998789310455322, -4.782402038574219], + [-0.39519697427749634, 10.327848434448242], + [-1.8344485759735107, 1.569740653038025], + [1.5602208375930786, 5.579753875732422], + [-3.188997983932495, -3.5062313079833984], + [-2.531503200531006, -1.0860944986343384], + [-4.641050338745117, -2.1029975414276123], + [-4.6861162185668945, -0.42945027351379395], + [-3.3007233142852783, -2.0814402103424072], + [3.192841053009033, -4.9901509284973145], + [-6.950006008148193, 8.424884796142578], + [6.24355936050415, -1.692930817604065], + [2.3612802028656006, -3.661938428878784], + [2.0986666679382324, -5.345258712768555], + [-0.19574034214019775, 5.077450275421143], + [8.888325691223145, -2.4137203693389893], + [-5.00314998626709, -2.1667630672454834], + [0.9773984551429749, -6.993507385253906], + [-0.314116895198822, 9.685051918029785], + [-7.707335948944092, 9.395797729492188], + [8.636425971984863, -2.3669466972351074], + [-6.053586483001709, -2.3875954151153564], + [1.9104033708572388, -7.39736270904541], + [0.03235214203596115, -0.6290931105613708], + [1.8708057403564453, 4.259979248046875], + [2.7530722618103027, -4.463412284851074], + [-6.1389994621276855, 7.084003448486328], + [-5.016045093536377, 1.1711467504501343], + [5.408719539642334, -0.8524186611175537], + [-4.199475288391113, -1.2466483116149902], + [-4.008312225341797, -1.8972746133804321], + [0.664302408695221, -3.670417070388794], + [9.353742599487305, -2.607858419418335], + [2.1576080322265625, -8.54651927947998], + [-5.577941417694092, 6.694387435913086], + [-3.5129220485687256, 2.46480393409729], + [-4.291900157928467, 6.155555725097656], + [2.974181652069092, -4.478501319885254], + [-5.259474277496338, -3.3788506984710693], + [8.814762115478516, -2.361985445022583], + [-2.3240230083465576, -0.429401159286499], + [2.5118801593780518, -3.3977110385894775], + [-5.859514236450195, 8.347217559814453], + [-5.207617282867432, -3.3141348361968994], + [0.23146170377731323, 0.7152748107910156], + [3.008645534515381, -4.515722274780273], + [-5.7275309562683105, 8.230215072631836], + [2.6854960918426514, -4.6924028396606445], + [-2.263237714767456, 1.3960562944412231], + [1.0204927921295166, -5.974952697753906], + [-5.701511859893799, 3.6073267459869385], + [-6.643383502960205, 5.9890007972717285], + [-1.8987956047058105, 1.3150031566619873], + [-2.493462562561035, 1.11641526222229], + [-5.165765762329102, 5.698883533477783], + [-0.4732319116592407, -0.828607439994812], + [2.306631326675415, -8.347733497619629], + [0.3230843245983124, -3.3806750774383545], + [6.496516704559326, -1.7652531862258911], + [-4.561709880828857, -3.032820463180542], + [-0.3442825675010681, 11.374749183654785], + [-2.814152717590332, -2.065060615539551], + [-1.653712272644043, 2.1729516983032227], + [-7.066415786743164, -2.0990424156188965], + [-3.361706495285034, 3.3917253017425537], + [-0.17286428809165955, -0.7897967100143433], + [-6.91016960144043, 8.362611770629883], + [8.928668022155762, -2.957510232925415], + [-8.756840705871582, 10.714559555053711], + [-4.971935749053955, 6.714672088623047], + [-5.38029670715332, -2.088819980621338], + [-1.0835249423980713, 10.464703559875488], + [-2.872870445251465, -0.70671546459198], + [-2.2168197631835938, 1.4221632480621338], + [1.765497088432312, 2.5510995388031006], + [1.472357988357544, -6.344727516174316], + [-0.37531787157058716, -0.7306909561157227], + [-0.48374348878860474, 10.981790542602539], + [-4.62053108215332, -2.2789900302886963], + [2.964820384979248, -4.445226669311523], + [-5.580143451690674, 1.5577952861785889], + [-5.020702838897705, 2.077622652053833], + [2.958879232406616, -7.615012168884277], + [-2.648932933807373, 2.14280366897583], + [1.64581298828125, -6.91602897644043], + [-0.4296644330024719, 10.999509811401367], + [-4.722112655639648, -1.9213935136795044], + [-0.9112399816513062, -0.7623646259307861], + [5.013120651245117, -0.42341306805610657], + [1.6817461252212524, -2.736940383911133], + [-5.435428619384766, -3.3411130905151367], + [-4.321774005889893, -3.2618870735168457], + [1.3295249938964844, -3.7097365856170654], + [3.052482843399048, -4.711043834686279], + [0.5944096446037292, -0.09628760814666748], + [-2.3938589096069336, 2.214019536972046], + [-0.08622295409440994, -1.10622239112854], + [2.022249937057495, -3.6405110359191895], + [1.4141416549682617, 1.727011799812317], + [-2.353492021560669, -3.2925689220428467], + [4.494796276092529, 6.810551166534424], + [-2.756981372833252, 0.06743758916854858], + [-5.037966251373291, -3.5381181240081787], + [9.394539833068848, -2.5517776012420654], + [2.4723761081695557, 6.0535736083984375], + [5.954325199127197, 7.817851543426514], + [-0.07931000739336014, 5.333924293518066], + [1.2422798871994019, -5.723225116729736], + [0.43522852659225464, -0.5290316939353943], + [-2.564694881439209, 1.822717547416687], + [-5.192447185516357, 1.1251884698867798], + [5.179455280303955, 6.827692985534668], + [1.586713433265686, -7.641848564147949], + [-2.0857856273651123, 2.428527355194092], + [-0.25316113233566284, 10.162294387817383], + [3.6426451206207275, -3.1098341941833496], + [-6.817162990570068, -1.8066257238388062], + [2.963792085647583, -4.715555191040039], + [-4.889236927032471, -3.2965667247772217], + [0.06055983155965805, -1.3864285945892334], + [-2.4124860763549805, 1.4448298215866089], + [7.994265079498291, -2.2722647190093994], + [2.762882947921753, -4.443843841552734], + [3.016005754470825, -4.533905506134033], + [-5.659854888916016, -1.7630606889724731], + [-4.598607540130615, -1.3782967329025269], + [3.2630972862243652, -4.8766584396362305], + [-0.29521939158439636, -0.5725818276405334], + [2.0545437335968018, 5.35669469833374], + [2.001114845275879, -8.058533668518066], + [-4.123534679412842, -4.564542293548584], + [4.311656475067139, -6.670251369476318], + [-0.4386584162712097, 9.396852493286133], + [-0.44333386421203613, 10.050291061401367], + [-5.26078462600708, 1.954485297203064], + [2.260023832321167, -10.339216232299805], + [2.690354824066162, -4.57119083404541], + [-7.532370090484619, -1.498104214668274], + [-7.750028133392334, -1.0861974954605103], + [-6.27997350692749, 5.6167192459106445], + [-4.222548007965088, 3.3252651691436768], + [-5.773952007293701, 1.2138639688491821], + [0.993047297000885, -5.853716850280762], + [0.6565926671028137, -0.3172439932823181], + [1.7589566707611084, -6.204981327056885], + [-6.457537651062012, -1.5413095951080322], + [9.244529724121094, -2.8155176639556885], + [1.611694574356079, 5.581210136413574], + [-4.4061598777771, -1.025744080543518], + [-1.5478193759918213, 1.141818642616272], + [-5.4162397384643555, 6.844030857086182], + [-4.389504432678223, -2.818544387817383], + [-3.4576005935668945, -5.103234767913818], + [-0.24640536308288574, -1.1355918645858765], + [-5.112758636474609, 7.220882415771484], + [-4.8363823890686035, -2.8340346813201904], + [5.031099796295166, 7.247587203979492], + [-4.424854755401611, 6.679163932800293], + [-4.833873748779297, -2.576835870742798], + [-5.433959007263184, -3.898963689804077], + [-4.402727127075195, -1.2783643007278442], + [-5.213502407073975, 7.892884731292725], + [-3.1877923011779785, 4.899956703186035], + [1.9189096689224243, 5.627981662750244], + [2.5413382053375244, -7.4466962814331055], + [-2.399229049682617, 1.5689750909805298], + [-6.426689147949219, 2.3632023334503174], + [1.2031859159469604, -7.34334659576416], + [5.871531963348389, -1.142389178276062], + [6.52263879776001, -5.09852409362793], + [-7.324207782745361, 0.9314826726913452], + [-6.54883337020874, -1.7275663614273071], + [3.5963757038116455, 1.083725929260254], + [7.683990955352783, -2.0288326740264893], + [-2.2165303230285645, 2.890362024307251], + [-2.633035898208618, 4.860184669494629], + [-3.591278314590454, 4.973013401031494], + [-3.7597625255584717, -1.3583955764770508], + [-1.8713473081588745, 5.98033332824707], + [-4.153568267822266, 6.219578742980957], + [-2.195103645324707, 2.253065824508667], + [-5.378907680511475, 6.285484790802002], + [-6.172729015350342, -0.5260905027389526], + [-2.2835631370544434, 1.665940284729004], + [2.49770188331604, 2.8635642528533936], + [2.7284059524536133, 1.3366159200668335], + [0.2494986653327942, -0.24173259735107422], + [2.0933525562286377, -3.9685733318328857], + [-4.674265384674072, -0.3358229994773865], + [-6.819056510925293, -1.4822160005569458], + [2.436325788497925, -4.002650737762451], + [-5.832512855529785, -4.199228763580322], + [2.8039119243621826, -4.21864652633667], + [-5.636678218841553, -4.022280216217041], + [-2.4992880821228027, 1.393541693687439], + [2.911228895187378, -4.386928081512451], + [-2.960988759994507, -2.7731311321258545], + [-2.683530330657959, -3.7497334480285645], + [-4.722523212432861, 4.95391321182251], + [-2.376133680343628, 1.8588594198226929], + [-5.13867712020874, 1.8326555490493774], + [3.6837337017059326, 6.238314151763916], + [-4.452917575836182, -1.4229754209518433], + [-3.527777910232544, -1.2074402570724487], + [-0.22015351057052612, 9.533108711242676], + [8.066676139831543, -2.6182949542999268], + [-2.4793736934661865, 2.3274805545806885], + [2.352142572402954, -3.91975998878479], + [9.763728141784668, -2.7098166942596436], + [-4.982412815093994, 1.0763812065124512], + [2.1306536197662354, -8.494410514831543], + [-3.8764727115631104, 6.355734348297119], + [-4.502479553222656, -1.821316123008728], + [2.577091932296753, -3.823437452316284], + [4.197261333465576, -3.4154887199401855], + [-4.922088146209717, -2.3884027004241943], + [-6.603114604949951, 7.9936323165893555], + [-4.029749870300293, -1.5077823400497437], + [-4.575283050537109, -2.9197332859039307], + [-0.1900627613067627, 9.157417297363281], + [4.575354099273682, 5.88112735748291], + [1.7895309925079346, -7.824737071990967], + [2.08550763130188, 0.47291862964630127], + [-3.353651523590088, 0.8698208928108215], + [-2.883167266845703, -1.0019659996032715], + [-5.978808879852295, 7.0005998611450195], + [2.554518938064575, -5.4444193840026855], + [3.2818028926849365, -5.329809188842773], + [-0.2373482584953308, 10.733930587768555], + [3.0221002101898193, -4.53769588470459], + [2.5920350551605225, -3.885533571243286], + [3.490006446838379, -4.387434005737305], + [6.901838779449463, -4.024695873260498], + [0.45349788665771484, -5.335721015930176], + [-4.319629192352295, -5.674241065979004], + [-3.2563812732696533, 3.5602834224700928], + [1.6266735792160034, 0.38254299759864807], + [0.4639244079589844, -5.289648056030273], + [-0.2239895462989807, 9.916414260864258], + [5.645321369171143, -1.8241745233535767], + [-0.44325190782546997, 10.736919403076172], + [4.418030261993408, -2.5873348712921143], + [1.958404779434204, -4.00294828414917], + [0.12319270521402359, -1.3920643329620361], + [-6.840061187744141, 8.259450912475586], + [3.0578067302703857, -4.923428058624268], + [1.8565629720687866, 0.17229574918746948], + [-3.3921868801116943, -3.2168571949005127], + [1.7412142753601074, 0.8517193794250488], + [-1.1688992977142334, -2.3720858097076416], + [1.0495967864990234, -5.798774719238281], + [-2.3355154991149902, 1.5791189670562744], + [-0.1748024821281433, 9.997071266174316], + [-2.277540922164917, 1.3672406673431396], + [-0.4143214821815491, 9.907397270202637], + [8.814509391784668, -2.499150514602661], + [-2.2983853816986084, -1.4338359832763672], + [-6.378128528594971, 8.399726867675781], + [6.971365928649902, -4.15007209777832], + [5.645407676696777, 7.527191162109375], + [-4.827782154083252, 6.460749626159668], + [9.705732345581055, -2.751527786254883], + [-5.593863010406494, 3.237656354904175], + [1.9318299293518066, 5.781352996826172], + [-2.423454523086548, 1.923946499824524], + [-4.098690032958984, -0.03022182360291481], + [4.599063396453857, 7.581860542297363], + [3.127784490585327, -5.2225847244262695], + [-0.24310308694839478, 10.092815399169922], + [-2.0106592178344727, 1.4268958568572998], + [-5.59312105178833, -2.414917230606079], + [-4.822612762451172, -1.3873916864395142], + [2.9357151985168457, -4.580147743225098], + [-1.549949288368225, 1.941083550453186], + [2.8121345043182373, -5.829292297363281], + [-7.404708385467529, -1.831497311592102], + [-5.572071075439453, -2.4665377140045166], + [-3.613492727279663, -2.543700695037842], + [3.100684881210327, -4.641477108001709], + [-0.28958821296691895, 1.0063775777816772], + [-2.4153892993927, 1.3531428575515747], + [-5.170799732208252, 4.465399265289307], + [-5.115644931793213, 3.533348560333252], + [-8.851729393005371, -0.7897340059280396], + [-6.738271713256836, 8.003028869628906], + [-5.157878398895264, 8.013957977294922], + [-5.0184149742126465, -2.950721025466919], + [3.920227289199829, 6.020644664764404], + [2.834934949874878, -8.556949615478516], + [-6.267858982086182, 8.218706130981445], + [-7.617002487182617, -0.6131075620651245], + [-5.626030445098877, 6.035856246948242], + [-2.930925130844116, 5.11972713470459], + [-5.052938938140869, -1.4236761331558228], + [-2.1141231060028076, 1.4592548608779907], + [-2.5095255374908447, -4.951051712036133], + [-2.9441118240356445, -3.918884515762329], + [-2.19146466255188, -0.4085990786552429], + [2.9583137035369873, -4.44822883605957], + [-4.441712856292725, 5.616494655609131], + [-4.279969692230225, -0.3902716040611267], + [-5.143345832824707, 7.1336822509765625], + [1.5883018970489502, 5.461704730987549], + [1.8125267028808594, 5.6625213623046875], + [4.976770877838135, -6.4370832443237305], + [-5.149621486663818, 1.9320389032363892], + [3.065422296524048, -4.618544101715088], + [-5.756545066833496, -2.569469690322876], + [-6.596798419952393, 8.227073669433594], + [2.463752031326294, -3.670461416244507], + [-0.025111980736255646, -1.0477681159973145], + [-3.502028703689575, 1.9092127084732056], + [-2.307095766067505, 0.5479124784469604], + [1.9772014617919922, -2.5571157932281494], + [-3.8520705699920654, -5.238036632537842], + [9.765140533447266, -2.6165430545806885], + [5.9554924964904785, -1.276283621788025], + [2.000596046447754, -3.809725046157837], + [6.1154608726501465, -1.4794234037399292], + [-5.279738903045654, 8.149106979370117], + [-3.919145345687866, -2.351029634475708], + [-3.8604986667633057, 4.34379243850708], + [-4.280130863189697, -3.5481150150299072], + [-7.095603942871094, -0.3584102392196655], + [-4.512270450592041, 0.7727816700935364], + [-4.756615161895752, -3.197404146194458], + [1.5809603929519653, -3.4812064170837402], + [-2.15578293800354, 1.4535009860992432], + [2.4410855770111084, -3.7351582050323486], + [9.059618949890137, -2.476792573928833], + [-1.2481050491333008, 8.48486042022705], + [1.3707455396652222, 4.762077808380127], + [-2.9353034496307373, -3.146545886993408], + [3.206217050552368, -4.981710433959961], + [-3.277533531188965, -0.666841983795166], + [-4.7034010887146, 3.3325538635253906], + [-6.330085277557373, -0.17598974704742432], + [-5.36037540435791, 6.73068380355835], + [-2.9332425594329834, -0.7183845043182373], + [7.808412551879883, -5.172844886779785], + [-2.9828040599823, -0.5922977924346924], + [6.142547130584717, -1.2315996885299683], + [-4.494755268096924, -2.9500744342803955], + [-3.830059766769409, 5.095954895019531], + [3.045196771621704, -4.568140506744385], + [5.908215522766113, -1.1903105974197388], + [-0.3051983714103699, 9.458869934082031], + [1.6338318586349487, 5.581984043121338], + [-3.307788610458374, 5.3546247482299805], + [-6.326536178588867, 0.4713268280029297], + [-0.1659110188484192, 10.75408935546875], + [-6.858292102813721, 8.515130043029785], + [-2.19670033454895, 1.374853253364563], + [-2.510481834411621, 4.25468635559082], + [9.414460182189941, -2.56291127204895], + [7.51889181137085, -1.639178991317749], + [-6.039803504943848, 4.148179531097412], + [8.70659065246582, -2.6316490173339844], + [2.092071771621704, -0.06944990158081055], + [-5.732616901397705, 5.510307312011719], + [-2.4112884998321533, -1.1699010133743286], + [7.753450870513916, -1.715929627418518], + [-4.972743034362793, -2.419813871383667], + [-2.165729522705078, 2.940751314163208], + [-1.5074490308761597, -1.8979705572128296], + [2.208453416824341, 5.964406967163086], + [5.4164557456970215, -1.4432164430618286], + [-0.2619851231575012, 10.6048583984375], + [1.5064163208007812, -7.828758239746094], + [-0.3274286389350891, 10.810242652893066], + [-1.7257822751998901, -0.523502767086029], + [7.748048305511475, -1.8266832828521729], + [0.983916699886322, 0.5535426735877991], + [-6.125048637390137, -2.063666820526123], + [-6.170948505401611, 7.3131422996521], + [3.0980136394500732, -4.641528606414795], + [-2.102099895477295, 0.5303628444671631], + [2.9114177227020264, -4.382748603820801], + [6.9564642906188965, -3.4739935398101807], + [1.6716645956039429, -5.776092529296875], + [-5.830735683441162, 2.5415172576904297], + [-5.445950031280518, 3.235491991043091], + [1.460561752319336, 5.958163738250732], + [-3.463731050491333, -2.7039859294891357], + [2.5802247524261475, -4.2127532958984375], + [2.896392822265625, -4.773947715759277], + [-4.133385181427002, 3.424330234527588], + [-4.374000072479248, 1.8621100187301636], + [2.6758108139038086, -4.613743305206299], + [-0.4277580976486206, 10.863086700439453], + [6.1667890548706055, -1.2952684164047241], + [-4.38577938079834, -3.1580393314361572], + [2.0534894466400146, -8.454599380493164], + [2.671968698501587, -6.634330749511719], + [-2.6449594497680664, -0.5536138415336609], + [1.1457719802856445, -7.296562194824219], + [-5.35186243057251, -2.2495970726013184], + [1.8810800313949585, -8.319562911987305], + [-2.5890328884124756, 1.1932471990585327], + [-2.3334386348724365, 1.5278193950653076], + [-6.814472198486328, 8.614265441894531], + [7.374411106109619, -1.9472953081130981], + [-2.8150813579559326, -4.269510746002197], + [-5.841925144195557, 0.8374766111373901], + [-1.9848623275756836, 1.9904557466506958], + [2.1233484745025635, 0.14478999376296997], + [-2.3955044746398926, 1.767715573310852], + [-3.229372262954712, -4.711727142333984], + [-0.16087815165519714, -1.309411883354187], + [-4.32968282699585, 6.383438587188721], + [1.8120663166046143, -2.970677614212036], + [-7.144686222076416, 8.783207893371582], + [-3.77715802192688, -1.3565107583999634], + [-0.5092914700508118, 9.357181549072266], + [-4.47145414352417, 5.5946149826049805], + [-6.696407794952393, -0.8126828074455261], + [-4.131442546844482, 6.787976264953613], + [2.6037189960479736, -3.4503273963928223], + [-0.5095188617706299, 8.865410804748535], + [5.516285419464111, -1.6192196607589722], + [-5.499630451202393, 4.007460594177246], + [-4.582517147064209, 5.53254508972168], + [-4.781758785247803, -2.8188493251800537], + [-6.974396705627441, 8.920557022094727], + [-2.5736465454101562, -3.8124637603759766], + [-2.693218946456909, -1.2907873392105103], + [-2.5334866046905518, 2.336919069290161], + [-4.46279764175415, -1.504522442817688], + [1.1990926265716553, -7.5658135414123535], + [2.078315019607544, -3.5866267681121826], + [9.21131420135498, -2.649031162261963], + [-0.5923025012016296, 9.175527572631836], + [5.13215970993042, -2.5273983478546143], + [-6.278203964233398, 2.423412322998047], + [-4.485424995422363, -2.1563193798065186], + [2.8369665145874023, -4.851921558380127], + [1.1959810256958008, -6.789137840270996], + [3.1115896701812744, -4.701268196105957], + [-5.711527347564697, -0.27423083782196045], + [-2.5663092136383057, 4.495365142822266], + [1.7993617057800293, 4.42970609664917], + [2.9560632705688477, 6.40175724029541], + [3.0104892253875732, -4.758602619171143], + [-4.972235202789307, -5.012948036193848], + [-2.9968886375427246, 1.368954062461853], + [-0.18511247634887695, 10.023452758789062], + [-5.353409767150879, 4.093920707702637], + [-0.15859252214431763, 9.551370620727539], + [-7.816843509674072, -0.6258201599121094], + [2.529268503189087, -6.893404006958008], + [0.01567815989255905, 9.915688514709473], + [-5.120238780975342, 2.207458257675171], + [-7.485517978668213, -1.2339454889297485], + [-0.9318076968193054, -0.7485548257827759], + [-2.7414774894714355, 2.870304822921753], + [2.843703031539917, 6.007394790649414], + [1.520668625831604, 5.531481742858887], + [2.924752950668335, -4.223146438598633], + [-4.944223880767822, 6.453125], + [2.103151321411133, 0.6685786247253418], + [1.2589842081069946, 5.056092262268066], + [-6.905175685882568, -1.3413832187652588], + [-2.693000555038452, 2.501088857650757], + [-5.177481651306152, -2.1362051963806152], + [-3.539863348007202, -2.8551275730133057], + [3.4773168563842773, 6.5539116859436035], + [-2.658029079437256, 2.4596855640411377], + [9.14986515045166, -2.479323625564575], + [-1.9749104976654053, 0.7118010520935059], + [-3.698535203933716, -1.68600594997406], + [-2.0766968727111816, 1.9264781475067139], + [1.1667368412017822, 0.8941490650177002], + [-0.5834316611289978, -0.9917213916778564], + [0.550725519657135, 1.7360376119613647], + [-3.758833646774292, -1.591140866279602], + [-0.41984328627586365, 5.630588531494141], + [2.7031490802764893, 6.933540344238281], + [1.6821234226226807, 1.5085314512252808], + [9.186232566833496, -2.5500805377960205], + [2.2513773441314697, -4.603313446044922], + [3.1511261463165283, -4.767467498779297], + [-5.607593536376953, -2.703491449356079], + [3.1739442348480225, -4.77199649810791], + [0.18599504232406616, -2.6756439208984375], + [2.594916343688965, -6.5313310623168945], + [-4.763225078582764, -2.7935972213745117], + [4.9132280349731445, -1.8091734647750854], + [6.122330665588379, -5.533190727233887], + [-4.931967735290527, 7.169244289398193], + [2.819227933883667, 0.9377710819244385], + [-0.5917865037918091, 8.874795913696289], + [-7.05561637878418, -1.4755685329437256], + [3.1317298412323, -4.992639541625977], + [2.393864154815674, -3.281125545501709], + [2.5236775875091553, -4.225618362426758], + [7.851713180541992, -1.7124215364456177], + [4.1215033531188965, 1.4960366487503052], + [-5.776883602142334, 7.052373886108398], + [-4.190483570098877, -1.6236234903335571], + [-1.8873710632324219, -0.526422381401062], + [1.448177695274353, -6.2464599609375], + [6.323135852813721, -2.2186427116394043], + [-0.2632472515106201, 9.929815292358398], + [-0.6975691318511963, 8.803942680358887], + [2.9337515830993652, -4.5041656494140625], + [-5.201320171356201, 1.0848876237869263], + [-2.040745496749878, 1.976859211921692], + [0.5193004012107849, -0.9439506530761719], + [6.999993801116943, -1.4739437103271484], + [-0.4990782141685486, 9.300643920898438], + [-4.520845890045166, 2.274996042251587], + [9.061829566955566, -2.4877355098724365], + [-0.40325433015823364, 5.4414963722229], + [-5.458776950836182, -3.544564723968506], + [2.943159580230713, -4.566610336303711], + [-0.48392248153686523, 11.001628875732422], + [-1.7331032752990723, 2.454697370529175], + [-3.235954999923706, -3.7615268230438232], + [0.8698289394378662, 4.749648094177246], + [-4.441406726837158, -3.9608705043792725], + [-6.469244956970215, 7.748502254486084], + [7.533763408660889, -2.299055337905884], + [-6.7010369300842285, 8.375041007995605], + [-5.658421516418457, 5.091977596282959], + [-5.797605037689209, -2.8147056102752686], + [-4.8510518074035645, -2.917673110961914], + [3.070767641067505, -4.630227088928223], + [3.1047306060791016, -6.7370405197143555], + [-1.8909064531326294, 5.911738395690918], + [-4.517204284667969, -2.5256502628326416], + [-4.569389820098877, -3.066497564315796], + [2.822331190109253, -4.474729061126709], + [6.98838472366333, -2.2386326789855957], + [2.0353176593780518, -3.386685609817505], + [3.055842876434326, 6.481821060180664], + [-5.445534706115723, -3.155866861343384], + [-4.898109436035156, -4.07407808303833], + [-0.48746156692504883, 9.717668533325195], + [-5.360353469848633, 1.015795111656189], + [-5.048083782196045, -3.9720590114593506], + [-5.105618476867676, 1.2489843368530273], + [1.9478824138641357, -4.50338077545166], + [-4.500997066497803, 3.59783935546875], + [2.8780319690704346, -4.576075553894043], + [9.737157821655273, -2.724508762359619], + [-2.8662195205688477, -4.095070838928223], + [-4.242675304412842, -3.463557720184326], + [2.653589963912964, 3.9709103107452393], + [-4.51658821105957, -1.899424433708191], + [2.6401541233062744, -3.9418065547943115], + [-6.207911968231201, 7.768200874328613], + [-3.435669183731079, -4.616267204284668], + [-5.867814540863037, 2.0436322689056396], + [-0.14286476373672485, 9.598078727722168], + [-4.409460544586182, -3.2372846603393555], + [-5.882877826690674, 7.43773078918457], + [-4.405158519744873, 3.987741708755493], + [-3.8052680492401123, -2.6703944206237793], + [-0.7101840376853943, -0.5973559617996216], + [-2.762197732925415, 5.529069900512695], + [-1.1962981224060059, -0.8214909434318542], + [-4.964566707611084, -4.0490312576293945], + [-3.802807092666626, -4.06395149230957], + [-4.80517053604126, 6.28110408782959], + [-4.912232875823975, -7.0031843185424805], + [-4.5044732093811035, 7.146536827087402], + [-3.655848741531372, -0.7827619910240173], + [-4.940906047821045, -4.71134090423584], + [3.7221832275390625, 7.125260353088379], + [-6.907700538635254, 8.41711711883545], + [-2.361039876937866, 0.8364066481590271], + [-4.853789806365967, -2.6332619190216064], + [-0.27607864141464233, 9.559420585632324], + [-1.6220917701721191, -0.4983336329460144], + [-7.065066814422607, -1.3102933168411255], + [-0.18373364210128784, -0.6585562229156494], + [8.380143165588379, -2.2505686283111572], + [-0.3661736845970154, 11.210688591003418], + [2.1487457752227783, 3.304344415664673], + [-8.02522087097168, -0.8780994415283203], + [2.6679818630218506, -4.525211334228516], + [-2.267296314239502, -1.1333116292953491], + [-0.6407883167266846, -1.0809799432754517], + [-4.934281826019287, -4.116720676422119], + [-5.72618293762207, 7.6906867027282715], + [-3.3762686252593994, 1.8098728656768799], + [8.810469627380371, -2.3818650245666504], + [-4.093834400177002, -4.3080549240112305], + [-4.26575231552124, 7.35630989074707], + [3.0938100814819336, -4.637033462524414], + [-4.74255895614624, -2.355614423751831], + [-4.894777774810791, 5.358428478240967], + [-4.906391620635986, 1.968180537223816], + [-0.2659699320793152, 9.790666580200195], + [2.9671671390533447, 6.323321342468262], + [-5.0326690673828125, -0.9247252941131592], + [2.0497539043426514, -3.435940742492676], + [-5.610664367675781, -1.9346057176589966], + [3.14377498626709, -4.868636131286621], + [-4.380904674530029, -4.206296920776367], + [2.809583902359009, -4.266326904296875], + [-5.107676029205322, -3.268428087234497], + [2.706547975540161, -4.165297508239746], + [-0.5863446593284607, 10.289955139160156], + [7.0528950691223145, -2.020324230194092], + [1.9872043132781982, -8.660597801208496], + [2.986497640609741, -4.484253883361816], + [9.566327095031738, -2.5839691162109375], + [-3.4221975803375244, 7.432075023651123], + [-6.223648548126221, 2.9882700443267822], + [-5.945311069488525, -2.6135823726654053], + [-5.274916172027588, -3.3320116996765137], + [-7.647129535675049, 0.47728919982910156], + [-0.3848283886909485, 9.548856735229492], + [6.247232437133789, -1.867313027381897], + [-4.685389041900635, -3.8215973377227783], + [-2.716637372970581, -0.7315739393234253], + [8.236214637756348, -2.7328875064849854], + [3.037841796875, -4.521469593048096], + [0.24348318576812744, 4.936291217803955], + [-6.730627059936523, 8.542415618896484], + [2.3050730228424072, 5.829017639160156], + [0.7322856187820435, 5.102555751800537], + [-1.3799721002578735, -1.4898449182510376], + [-0.16527855396270752, -0.3125614821910858], + [2.0457777976989746, 4.745514869689941], + [0.07048492878675461, 9.738510131835938], + [2.7630889415740967, -5.710131645202637], + [-5.326916694641113, -2.577923059463501], + [-5.138855457305908, -4.355937957763672], + [-3.724616765975952, -2.8563308715820312], + [2.790493965148926, -4.195460319519043], + [-4.617191791534424, -1.5178712606430054], + [-6.1354756355285645, 8.165130615234375], + [1.6019978523254395, 5.733216762542725], + [-1.0690165758132935, 4.95565128326416], + [-5.4808759689331055, 6.496181488037109], + [3.520984649658203, 5.667532920837402], + [2.9875199794769287, -4.591771602630615], + [1.2594066858291626, -4.520226955413818], + [2.2112691402435303, -7.7112226486206055], + [-1.8551112413406372, 2.3552193641662598], + [3.2003564834594727, -4.790401935577393], + [-5.133585453033447, -2.9026663303375244], + [5.879847049713135, -1.3074129819869995], + [8.616427421569824, -2.4356439113616943], + [-2.159111499786377, 5.7872772216796875], + [-6.136281490325928, 1.5804513692855835], + [-5.61246919631958, 7.495417594909668], + [-5.331209182739258, 3.363452434539795], + [1.640644907951355, -6.824272155761719], + [1.4715019464492798, -3.0497612953186035], + [-1.0770143270492554, -2.79058837890625], + [2.688281774520874, -4.545997619628906], + [-3.749720811843872, 3.831343412399292], + [-2.675503969192505, -3.197188138961792], + [-5.94329833984375, 7.3826069831848145], + [-2.3314261436462402, -3.9163265228271484], + [-6.017324924468994, 7.692695617675781], + [-4.893173694610596, 7.230035781860352], + [2.181781768798828, 5.938230514526367], + [-4.589783191680908, -3.6172983646392822], + [2.9425275325775146, -4.449031829833984], + [2.3850247859954834, -2.891674757003784], + [-2.287064790725708, 1.9834538698196411], + [0.19367912411689758, -0.5066329836845398], + [-3.589927911758423, -3.030212163925171], + [-7.291446208953857, 8.905255317687988], + [9.119468688964844, -2.4093992710113525], + [5.698708534240723, -5.536007881164551], + [-2.7450809478759766, -0.7252224683761597], + [3.950596570968628, -1.4644908905029297], + [-5.065280437469482, -3.8554985523223877], + [-0.39749085903167725, 5.335957050323486], + [0.7369831204414368, 0.07664433121681213], + [-6.98289155960083, 1.375177025794983], + [-4.229214668273926, -3.0806963443756104], + [-2.4350955486297607, 1.499575138092041], + [-3.27345609664917, -5.032326698303223], + [0.37668246030807495, 9.752531051635742], + [-6.118863582611084, 0.7866089344024658], + [2.7312748432159424, -4.48367166519165], + [-2.96736741065979, -0.9810407757759094], + [-4.896970748901367, 5.7014851570129395], + [1.3050897121429443, 5.857553958892822], + [-4.601511478424072, -3.045196056365967], + [-2.952709436416626, 3.079719305038452], + [5.693528652191162, -0.8767554759979248], + [2.860734701156616, 6.24629545211792], + [-3.752945899963379, -1.5981558561325073], + [-4.357970714569092, -2.7535722255706787], + [5.9516096115112305, -0.9947206974029541], + [-4.928398609161377, 1.3103373050689697], + [1.8092012405395508, -3.696690797805786], + [-6.738806247711182, 8.273778915405273], + [-5.5542988777160645, 5.974119663238525], + [-6.721087455749512, 8.281225204467773], + [1.372606635093689, -6.708575248718262], + [-2.2578301429748535, 1.1554104089736938], + [2.925980806350708, -4.410989761352539], + [2.492518186569214, -5.904142379760742], + [-4.304715156555176, 4.492625713348389], + [-5.939808368682861, 0.795099675655365], + [-0.15542113780975342, 10.028528213500977], + [-7.024672985076904, -2.1346676349639893], + [-5.361151218414307, -0.27690184116363525], + [4.868602752685547, -1.5449244976043701], + [-0.2195557951927185, 10.394311904907227], + [-4.453388690948486, -4.705157279968262], + [0.4528989791870117, -0.15104374289512634], + [-4.391295433044434, -3.001084566116333], + [5.579100131988525, -2.757378339767456], + [-4.613003253936768, -3.5639097690582275], + [-5.030638217926025, 2.545044183731079], + [-2.582730531692505, 1.2629995346069336], + [4.3509297370910645, 6.387449264526367], + [-4.469162464141846, -1.7888542413711548], + [-2.3035318851470947, 5.813468933105469], + [8.131550788879395, -2.3161091804504395], + [-2.467028856277466, 5.968666076660156], + [1.6737815141677856, -7.682822227478027], + [2.645616054534912, -4.089394569396973], + [1.9360153675079346, 1.6452558040618896], + [-4.669125080108643, -3.2370760440826416], + [5.464599132537842, 7.762792587280273], + [1.1953346729278564, -3.9940810203552246], + [-4.44234561920166, 4.906310081481934], + [-7.377077102661133, 9.19223690032959], + [7.885202884674072, -2.6171743869781494], + [-5.0374884605407715, -3.1391146183013916], + [8.682085037231445, -2.377939224243164], + [5.542373180389404, -1.7853261232376099], + [-1.2907260656356812, 5.144082069396973], + [2.289095401763916, -9.01517391204834], + [1.2096450328826904, -7.135465621948242], + [-5.121079444885254, 7.4389448165893555], + [-2.8548202514648438, -2.365570545196533], + [-5.523030757904053, 6.692590713500977], + [-0.025160349905490875, -0.82041335105896], + [-2.7700860500335693, 2.028303861618042], + [2.2923734188079834, -4.0902509689331055], + [-2.7541253566741943, 5.611745834350586], + [-4.202703952789307, -3.108365297317505], + [3.189997911453247, -4.788938045501709], + [-5.055209159851074, -3.207942485809326], + [-0.24022287130355835, 9.956235885620117], + [-4.2679853439331055, -2.441939115524292], + [1.756941795349121, 1.004633903503418], + [-5.1767964363098145, -1.5914872884750366], + [-4.127384185791016, -0.46816450357437134], + [8.244071006774902, -2.152783155441284], + [-4.670993804931641, -1.4501091241836548], + [-5.633798122406006, 0.8042453527450562], + [3.6963279247283936, -3.6733899116516113], + [1.2618365287780762, 4.577896595001221], + [-4.960844039916992, 6.219579696655273], + [1.415944218635559, -7.281155586242676], + [-2.3588221073150635, 5.690860271453857], + [-4.924813747406006, -2.7816760540008545], + [-5.019853591918945, -0.5884406566619873], + [5.199112415313721, -1.211566686630249], + [-3.4934494495391846, -2.030487537384033], + [-3.183464288711548, -1.0222952365875244], + [-5.0594940185546875, 7.698399543762207], + [-5.33641242980957, 1.2862447500228882], + [4.961959362030029, -0.8133814334869385], + [2.2109930515289307, -8.320229530334473], + [-4.954704761505127, -3.0916013717651367], + [-5.407325267791748, 2.3553693294525146], + [5.583995342254639, -2.988682985305786], + [-5.98099946975708, 4.142373085021973], + [2.7403485774993896, -4.382572650909424], + [-4.709240436553955, -3.3683762550354004], + [-4.8949875831604, -0.2079181671142578], + [-6.2627129554748535, -1.8161330223083496], + [-3.0660176277160645, 3.4214885234832764], + [9.033467292785645, -2.6621642112731934], + [1.221936821937561, -7.238920211791992], + [-4.628285884857178, -1.8425058126449585], + [-3.851923704147339, 7.004404544830322], + [2.995478868484497, -4.497203826904297], + [-4.8439507484436035, 5.094333648681641], + [-4.612240314483643, 4.008656978607178], + [-4.845356464385986, -2.3595287799835205], + [3.6917364597320557, 6.898978233337402], + [-6.496362209320068, 1.459592342376709], + [-5.008634090423584, 4.201541900634766], + [-3.670621633529663, 4.329820156097412], + [2.829171657562256, -4.070620059967041], + [-0.5902007222175598, 2.05288028717041], + [8.000157356262207, -2.1794445514678955], + [8.48108196258545, -2.541386365890503], + [-2.234257936477661, -1.3643600940704346], + [-4.057725429534912, 5.961124897003174], + [6.827022075653076, -1.5326354503631592], + [2.972952365875244, -4.568110466003418], + [-1.2766996622085571, 1.4762558937072754], + [-7.035744667053223, -0.45358777046203613], + [0.6134564876556396, -0.8962926864624023], + [-4.002142429351807, -2.239992141723633], + [-0.34293925762176514, 9.623479843139648], + [-5.324493885040283, -5.370379447937012], + [-3.6203248500823975, -1.3964354991912842], + [-4.1348700523376465, 2.17364239692688], + [-5.343209743499756, 8.161811828613281], + [-4.885097026824951, -2.7311737537384033], + [-2.9573912620544434, -1.2210397720336914], + [-5.017527103424072, 2.9617018699645996], + [0.8245669007301331, 0.7290835976600647], + [-7.250586032867432, -1.8044674396514893], + [0.18878746032714844, 5.167445182800293], + [-2.2037370204925537, 1.6929806470870972], + [-2.792297124862671, -1.115554690361023], + [-5.274150371551514, 4.06300687789917], + [-2.4568371772766113, 1.6767343282699585], + [-6.155076503753662, 2.68451189994812], + [-0.41292959451675415, 11.85418701171875], + [-2.398219347000122, -1.2977999448776245], + [2.0049102306365967, -6.010901927947998], + [10.410578727722168, -2.884045362472534], + [-2.6659440994262695, 4.572621822357178], + [-2.116245746612549, -3.013385057449341], + [-4.495895862579346, -4.334961414337158], + [-4.883018970489502, -1.9929288625717163], + [2.1365835666656494, -5.2939982414245605], + [-4.303287982940674, -2.921147584915161], + [-4.564569473266602, -1.466577172279358], + [2.8274662494659424, -4.608942031860352], + [2.1088125705718994, -10.056768417358398], + [-0.8617173433303833, 9.389631271362305], + [-5.320988178253174, -2.9358716011047363], + [1.6136963367462158, 5.2128119468688965], + [-6.644320011138916, 3.542412042617798], + [-5.185572147369385, -3.9870946407318115], + [-3.099168539047241, -2.2719457149505615], + [1.981952428817749, 5.492354393005371], + [-4.331464767456055, 2.2787766456604004], + [-2.0280351638793945, -0.17797702550888062], + [2.784766912460327, -4.435474395751953], + [-6.069675922393799, 6.845245361328125], + [-2.3124008178710938, 2.4690401554107666], + [8.501450538635254, -2.2849338054656982], + [1.1521492004394531, -4.592748641967773], + [7.992832660675049, -1.9952588081359863], + [2.642622709274292, -4.135313987731934], + [-2.1502463817596436, 0.764924168586731], + [-5.681773662567139, 8.160741806030273], + [-1.9169269800186157, 0.24927449226379395], + [-2.8748629093170166, 2.9409868717193604], + [2.587427854537964, 0.717254638671875], + [-0.5389099717140198, -0.8061715364456177], + [-1.1009488105773926, 10.31792163848877], + [-4.892625331878662, 0.6168290376663208], + [2.7018883228302, -5.347612380981445], + [6.519121170043945, -1.5561641454696655], + [9.648090362548828, -2.6684515476226807], + [-0.6213404536247253, -0.7092852592468262], + [3.734689235687256, 6.879890441894531], + [-6.415160655975342, -2.031050443649292], + [2.7009003162384033, -4.258874416351318], + [-4.027021884918213, 6.535686492919922], + [-6.721083164215088, 8.074562072753906], + [-5.929683685302734, -0.41650593280792236], + [-0.6475434899330139, 11.994277954101562], + [-3.8587265014648438, -2.348372220993042], + [-3.2992303371429443, -1.3839911222457886], + [-5.5689263343811035, -2.4064199924468994], + [-6.536283016204834, -1.1156516075134277], + [-2.250074625015259, 2.0443077087402344], + [-2.114806652069092, -0.8672366142272949], + [3.1033742427825928, -4.682661533355713], + [-0.040710873901844025, 9.195213317871094], + [-2.4115986824035645, 2.284881353378296], + [2.3341457843780518, 1.7323890924453735], + [2.3278658390045166, 0.7375407218933105], + [3.035525321960449, -4.791143417358398], + [8.083185195922852, -2.0255115032196045], + [3.2898027896881104, -5.316709518432617], + [-0.030055351555347443, 9.835638999938965], + [-5.83466100692749, -2.2873375415802], + [-0.3653239607810974, 9.070941925048828], + [-6.724119663238525, 8.043057441711426], + [-4.025082111358643, -3.661572217941284], + [2.210177421569824, -7.4276556968688965], + [-0.3100503087043762, 10.91131591796875], + [2.96620774269104, -4.469873428344727], + [-2.5569283962249756, 1.0407755374908447], + [-1.9813233613967896, -1.3712596893310547], + [-0.03793562203645706, 10.48541259765625], + [-1.056634783744812, 5.294073104858398], + [2.6739749908447266, -3.9769420623779297], + [-5.560576438903809, -2.7863757610321045], + [-0.35795658826828003, 9.595518112182617], + [6.713746547698975, -4.624364852905273], + [0.2347813844680786, -2.9519569873809814], + [-4.9523749351501465, 4.481350898742676], + [1.5989993810653687, -7.824270248413086], + [-5.91241979598999, -2.448622226715088], + [-6.41296911239624, -0.9764302968978882], + [-5.1600189208984375, -2.9192583560943604], + [0.7511241436004639, -6.863751411437988], + [1.9381847381591797, 0.5305883288383484], + [-4.278642654418945, -5.595726013183594], + [2.0843899250030518, 1.2892922163009644], + [-5.067387104034424, -4.135921478271484], + [-1.42643141746521, 1.34914231300354], + [-6.715479373931885, 8.636119842529297], + [-5.1846537590026855, 0.014514084905385971], + [-5.3256964683532715, -4.094717979431152], + [-3.1871836185455322, -1.663184642791748], + [7.8739142417907715, -1.9202789068222046], + [2.9713361263275146, -4.590598106384277], + [2.4821979999542236, -7.347082138061523], + [6.9028472900390625, -3.020110607147217], + [2.0994131565093994, -10.02133560180664], + [7.4192376136779785, -2.8268167972564697], + [-2.1167116165161133, 1.7520314455032349], + [-2.36165714263916, 1.5848307609558105], + [-0.5395525693893433, -1.522804856300354], + [1.3758914470672607, -7.975012302398682], + [-3.4764411449432373, -3.973426103591919], + [-2.035524845123291, 2.6445767879486084], + [3.01367449760437, -4.524899482727051], + [5.714090347290039, -4.124706745147705], + [2.591248035430908, -4.638831615447998], + [-5.592193126678467, -0.9280655384063721], + [0.7362945675849915, -6.419156074523926], + [-5.060999870300293, -3.432173252105713], + [-2.964470148086548, -3.0611374378204346], + [-3.372422933578491, -2.74699068069458], + [-0.33534008264541626, 9.099931716918945], + [2.979086399078369, -4.707720756530762], + [-5.099771022796631, -2.774672269821167], + [-6.061015605926514, 4.291409969329834], + [-4.116567134857178, -1.8762139081954956], + [-3.295365571975708, 5.60476016998291], + [0.3030250072479248, -4.57737922668457], + [-4.390252590179443, 6.333857536315918], + [-4.783072471618652, -4.475122451782227], + [1.8073866367340088, 5.571530818939209], + [-1.5012463331222534, 2.129986047744751], + [0.2541620135307312, 2.43156361579895], + [-3.8256490230560303, -2.7335898876190186], + [-6.797348499298096, -1.8942785263061523], + [-4.111577033996582, 5.1864800453186035], + [0.8803006410598755, -6.430958271026611], + [-6.852689266204834, 8.517250061035156], + [-0.3656495213508606, 10.06489086151123], + [8.103219032287598, -2.8153340816497803], + [1.2726926803588867, 1.0597585439682007], + [2.8874351978302, -4.34809684753418], + [-3.5480616092681885, 4.482072830200195], + [-3.693474769592285, -1.756585955619812], + [-6.069947719573975, 3.7635443210601807], + [-0.6519603729248047, 9.395545959472656], + [-1.775252103805542, 1.8577320575714111], + [3.3229758739471436, -5.371465682983398], + [-1.9594576358795166, 2.952543258666992], + [-5.5102925300598145, 1.5673226118087769], + [-4.775121212005615, -3.5968258380889893], + [5.6615729331970215, -1.2068101167678833], + [2.626088857650757, -3.905834913253784], + [3.8184139728546143, -0.9627479314804077], + [-7.891697406768799, 9.628106117248535], + [-0.7394514679908752, 12.595873832702637], + [-1.624216079711914, -3.80128812789917], + [6.943803787231445, -3.9103405475616455], + [-4.504637241363525, -2.2524261474609375], + [2.735701322555542, -6.0481109619140625], + [-1.0198644399642944, 1.52207612991333], + [2.4453656673431396, 1.1585108041763306], + [1.5300182104110718, 0.04862174019217491], + [5.81089448928833, -2.6600306034088135], + [-3.6420528888702393, -0.9114856719970703], + [10.451525688171387, -2.9144697189331055], + [-6.117605686187744, 7.832976818084717], + [-7.277135372161865, 1.9236299991607666], + [-6.9968390464782715, -1.4414453506469727], + [2.380373477935791, 5.470027446746826], + [-4.883208274841309, -0.5048088431358337], + [-2.9410901069641113, -2.8431427478790283], + [-4.676537990570068, 4.795576572418213], + [1.932429552078247, 5.414126396179199], + [-0.442363440990448, 10.152066230773926], + [1.0990291833877563, 0.136496439576149], + [8.703665733337402, -2.2518951892852783], + [-2.307732343673706, -0.1076166033744812], + [-5.078073978424072, 5.676353454589844], + [-5.717747688293457, 7.307281970977783], + [-5.317930698394775, 4.495734691619873], + [7.058804512023926, -2.6352479457855225], + [3.180216073989868, -4.894640922546387], + [-0.8009382486343384, -1.2737547159194946], + [2.9791147708892822, -4.505808353424072], + [-4.316706657409668, -1.3051954507827759], + [1.9208245277404785, -9.004633903503418], + [-0.17062455415725708, 9.973722457885742], + [3.193542718887329, -4.492054462432861], + [-4.771512985229492, 5.220422744750977], + [-0.8224393725395203, -2.079551935195923], + [0.8277432918548584, 2.0242488384246826], + [6.667576789855957, -2.7494027614593506], + [-5.060842990875244, -2.1380722522735596], + [-0.694540798664093, 8.523536682128906], + [-4.9068989753723145, 2.39029598236084], + [-6.201448917388916, 7.568390369415283], + [0.791148841381073, -3.18872332572937], + [-0.17427462339401245, 10.380594253540039], + [0.980003297328949, -4.554724216461182], + [3.0983593463897705, -6.920486927032471], + [-0.32641810178756714, -0.46754541993141174], + [-6.417699337005615, 8.481264114379883], + [-4.873599529266357, -3.0439021587371826], + [-1.389671802520752, 5.487787246704102], + [8.796653747558594, -2.599963903427124], + [0.8645591139793396, -5.880608558654785], + [2.6617178916931152, -0.2769854664802551], + [1.2011847496032715, 5.229890823364258], + [-0.161842942237854, 7.667500019073486], + [-5.385908603668213, 5.694537162780762], + [-1.6668857336044312, 1.726293921470642], + [1.967344045639038, -9.404460906982422], + [-5.777494430541992, 4.130730628967285], + [4.479706287384033, -1.0184228420257568], + [0.43101829290390015, -6.080495834350586], + [-5.09856653213501, -3.5235579013824463], + [4.795889377593994, 6.957246780395508], + [-0.2589322328567505, 10.70181655883789], + [-7.022611141204834, -2.2693731784820557], + [-3.3854386806488037, -1.62721848487854], + [2.3932337760925293, -4.071136474609375], + [-3.3125667572021484, -0.3221477270126343], + [-0.4658950865268707, -1.5381242036819458], + [-4.782547473907471, 1.3912855386734009], + [1.3888955116271973, -7.926400184631348], + [-4.195653915405273, -2.7798235416412354], + [2.248856782913208, 0.8657572269439697], + [6.76788854598999, -1.657554268836975], + [-4.789554595947266, 8.077033042907715], + [-8.038514137268066, 9.78575325012207], + [2.575815200805664, 6.099195957183838], + [-3.9110453128814697, -2.667607307434082], + [-3.2186172008514404, -2.5454905033111572], + [0.1036195382475853, -0.7241036891937256], + [-1.6930272579193115, 5.134525299072266], + [-6.064808368682861, 7.834810256958008], + [-3.4772040843963623, -1.6328397989273071], + [9.023443222045898, -2.3889853954315186], + [0.6853853464126587, -5.105713844299316], + [-4.865749359130859, -2.7113735675811768], + [9.558707237243652, -2.6469390392303467], + [-0.8147743940353394, 9.351505279541016], + [-2.93646240234375, -0.902294397354126], + [2.9506142139434814, -4.432814598083496], + [-4.267874240875244, 2.0854480266571045], + [-4.81575870513916, -3.586977005004883], + [-7.510511875152588, 9.294090270996094], + [-4.08633279800415, -1.4579418897628784], + [-0.8891233801841736, 8.066069602966309], + [0.14746540784835815, -5.049131393432617], + [-4.841775417327881, -2.998924732208252], + [-5.623875141143799, -5.733250617980957], + [-7.160213947296143, 8.415109634399414], + [-4.810052394866943, -4.235662460327148], + [-5.223020076751709, -2.290834903717041], + [-2.887131452560425, -2.5079636573791504], + [-2.6192562580108643, 4.831571578979492], + [-0.3542758524417877, -3.2421576976776123], + [-6.152194976806641, 4.7975358963012695], + [-3.299560785293579, 5.7232584953308105], + [-2.1650021076202393, 0.5384398102760315], + [0.15966153144836426, 9.518882751464844], + [-5.058351993560791, -3.448561906814575], + [-0.3936549425125122, 9.205713272094727], + [-3.5407609939575195, -2.356616258621216], + [-2.8042428493499756, 6.615108966827393], + [1.2127479314804077, 0.8127846717834473], + [-4.5506205558776855, -4.017089366912842], + [-2.9501514434814453, 5.898542404174805], + [-2.5364444255828857, 4.720556735992432], + [-0.4449724555015564, 8.176557540893555], + [1.278784990310669, -7.496171951293945], + [8.772878646850586, -2.482151746749878], + [2.9618265628814697, -4.762969970703125], + [-7.028806686401367, -2.432211399078369], + [-5.029597282409668, -4.73425817489624], + [-3.5401523113250732, -2.9197075366973877], + [-0.4548037648200989, 10.442124366760254], + [2.145876169204712, -4.30294132232666], + [1.470430612564087, 0.5752935409545898], + [-2.210822105407715, 0.9025282263755798], + [2.9580280780792236, -6.608267784118652], + [-4.176703929901123, 5.195559024810791], + [-0.012826330959796906, 9.623428344726562], + [2.6874141693115234, -6.492381572723389], + [-5.225086212158203, -2.307025671005249], + [-2.2297022342681885, 1.9577354192733765], + [-5.392907619476318, -4.216370582580566], + [-5.703244686126709, -1.597150206565857], + [-4.423593044281006, -3.3610613346099854], + [-6.043820381164551, 8.350055694580078], + [3.0274031162261963, -4.65830135345459], + [3.0866448879241943, -5.415283679962158], + [-3.8385894298553467, -2.0714070796966553], + [-4.0212016105651855, -2.3837809562683105], + [0.8557353615760803, -6.9794793128967285], + [-2.3262906074523926, -0.29853031039237976], + [-3.4506771564483643, -1.1163904666900635], + [-6.421549320220947, 8.095394134521484], + [5.787790775299072, -1.7955070734024048], + [6.977781772613525, -2.199631929397583], + [-2.0859692096710205, -1.0060728788375854], + [-4.932854175567627, -2.4567723274230957], + [-4.1883015632629395, 5.0971527099609375], + [-2.0206754207611084, 0.47959959506988525], + [-2.4434006214141846, 1.945304274559021], + [-2.244518995285034, -1.6055275201797485], + [3.6018292903900146, -2.7012622356414795], + [-3.8927245140075684, 6.362173080444336], + [-4.4412360191345215, -0.26236462593078613], + [-5.139965534210205, 1.4414252042770386], + [-5.283798694610596, -1.6178444623947144], + [2.7840840816497803, -4.228363513946533], + [-7.356565475463867, 8.987196922302246], + [-6.451419830322266, -2.241551637649536], + [-3.92236065864563, 5.974193572998047], + [2.400501012802124, -8.566324234008789], + [-3.65138840675354, 4.156661510467529], + [8.814542770385742, -2.466475248336792], + [2.170254945755005, -9.287786483764648], + [2.143136739730835, 4.899169445037842], + [-6.143374919891357, 4.67999792098999], + [5.566319942474365, 7.517454147338867], + [-2.7464396953582764, 6.200516700744629], + [2.8683292865753174, -7.821689128875732], + [-5.940781593322754, 3.2477009296417236], + [-5.6616058349609375, 5.30432653427124], + [-5.6688408851623535, 1.1640602350234985], + [1.706587553024292, -2.856355667114258], + [-4.590588092803955, 7.310648441314697], + [-2.7691237926483154, 2.094418525695801], + [5.914228439331055, -0.666816234588623], + [7.43158483505249, -2.9147942066192627], + [0.8175747990608215, 0.671427845954895], + [-6.387660980224609, 5.415632247924805], + [-2.9867706298828125, 4.752205848693848], + [2.51938533782959, -6.883342742919922], + [-2.548013210296631, 7.158911228179932], + [-2.7447125911712646, -1.1391801834106445], + [-3.0979654788970947, -3.481107473373413], + [2.8790135383605957, -4.401561737060547], + [1.9066144227981567, -2.9264891147613525], + [1.3697402477264404, -5.703227996826172], + [-4.572634220123291, -1.3892539739608765], + [-2.010246753692627, 2.6327474117279053], + [-2.489837884902954, 1.0000698566436768], + [0.22870194911956787, 9.38986587524414], + [8.66876220703125, -2.3303353786468506], + [-0.26046448945999146, 9.475532531738281], + [-6.654351711273193, -2.4567718505859375], + [-0.9191479682922363, -0.6020723581314087], + [-0.8417127132415771, -0.7245030999183655], + [-0.4495023488998413, -0.28150925040245056], + [-1.9757866859436035, 2.287654399871826], + [1.2423149347305298, -6.226291656494141], + [-0.48057836294174194, 11.668185234069824], + [1.9525909423828125, 4.901538848876953], + [-5.17084264755249, 6.3488969802856445], + [1.6391160488128662, 4.9785356521606445], + [1.1959452629089355, 0.6382378339767456], + [6.101994037628174, -1.385323166847229], + [1.4369709491729736, 5.135148525238037], + [2.7055537700653076, -4.126009941101074], + [2.772803783416748, -5.694098949432373], + [-4.776861190795898, 5.67641019821167], + [-4.327727794647217, -2.5023937225341797], + [2.7965524196624756, -4.2151336669921875], + [0.9855946898460388, 5.7672929763793945], + [0.6424482464790344, -0.3433097004890442], + [9.362908363342285, -2.5164477825164795], + [-0.20949959754943848, -0.24434413015842438], + [-0.7510952949523926, 9.426542282104492], + [1.5953774452209473, -8.434709548950195], + [5.38462495803833, -1.2325407266616821], + [2.8732688426971436, -3.8799569606781006], + [1.527233362197876, -7.996287822723389], + [-4.605961322784424, -0.07145929336547852], + [3.7576682567596436, -7.022047519683838], + [-8.21583080291748, -0.9994239807128906], + [-2.224745512008667, -2.756472587585449], + [-6.106052398681641, -4.207547664642334], + [1.5027934312820435, 5.0368547439575195], + [-2.6103248596191406, -3.1984214782714844], + [-4.715705394744873, -2.602496862411499], + [1.6391234397888184, -4.376972198486328], + [-5.447743892669678, -3.706634283065796], + [-4.109738826751709, -4.20726203918457], + [8.764680862426758, -2.297370672225952], + [7.493459701538086, -1.5999795198440552], + [9.949685096740723, -2.7056474685668945], + [-5.971133232116699, 6.678013801574707], + [-4.881260395050049, -1.4583948850631714], + [2.2115604877471924, 5.77260684967041], + [5.952476978302002, -1.2484105825424194], + [5.437559604644775, -4.10053825378418], + [-1.7533507347106934, 0.8279528021812439], + [-0.02295822650194168, 9.257566452026367], + [2.5952365398406982, -4.275289535522461], + [1.1086421012878418, -1.2583953142166138], + [-6.0155158042907715, -1.9659382104873657], + [6.009274005889893, -1.3227473497390747], + [0.15299183130264282, -0.693747878074646], + [2.6538453102111816, -4.043861389160156], + [5.283911228179932, -1.8936461210250854], + [-1.8283138275146484, -1.3110402822494507], + [-2.063464879989624, -0.7936339974403381], + [-3.1714107990264893, 3.3015244007110596], + [1.5822782516479492, -4.565474510192871], + [-0.8006700873374939, 7.847522735595703], + [-1.983975887298584, -0.5400775074958801], + [-1.4809952974319458, -1.906577467918396], + [-5.769565105438232, -4.328444004058838], + [2.1501364707946777, -3.1562952995300293], + [-1.0514594316482544, 5.649890899658203], + [-5.659900188446045, 5.28709602355957], + [2.683595657348633, -4.644481658935547], + [8.937312126159668, -2.449786901473999], + [2.3267440795898438, -4.803990840911865], + [-0.7285667061805725, -2.034252643585205], + [-5.633443355560303, -1.407220721244812], + [-4.776889801025391, -2.4854323863983154], + [-6.124773025512695, 7.281008243560791], + [4.508451461791992, 7.453328609466553], + [-5.113789081573486, -3.5442421436309814], + [2.0748846530914307, 5.681585311889648], + [-3.192457675933838, 3.290276527404785], + [2.2535111904144287, 5.668662071228027], + [1.0613545179367065, -6.89713716506958], + [7.214175701141357, -3.0784647464752197], + [-5.315433979034424, 6.490157604217529], + [2.3129842281341553, 0.6538499593734741], + [-2.670409679412842, 2.085891008377075], + [-4.837172031402588, -2.6145708560943604], + [-5.160519123077393, -3.843114137649536], + [4.013396739959717, -6.320346832275391], + [-5.59716272354126, 1.8690409660339355], + [-5.082993507385254, 3.0951712131500244], + [-3.3055012226104736, 4.771355628967285], + [-6.6791839599609375, 7.75592041015625], + [10.306415557861328, -2.8651273250579834], + [-7.271489143371582, -1.6973028182983398], + [-2.1742427349090576, 1.5717657804489136], + [8.9251070022583, -2.4242889881134033], + [8.065940856933594, -1.9620314836502075], + [6.642972946166992, 8.110597610473633], + [1.783707857131958, -6.387632369995117], + [0.1229654923081398, -1.3099262714385986], + [1.9110937118530273, 5.616944789886475], + [1.1924223899841309, 5.772776126861572], + [1.8580639362335205, 1.7064803838729858], + [-4.983645915985107, -3.4084055423736572], + [-4.4607157707214355, -3.550121545791626], + [-2.1779632568359375, 2.928053855895996], + [-4.758335113525391, -2.2545454502105713], + [2.246244192123413, 0.7147892713546753], + [-3.8474223613739014, 6.102777004241943], + [3.2055981159210205, -5.082544803619385], + [-5.693465232849121, 4.750709533691406], + [1.213315725326538, -4.2568206787109375], + [2.6999638080596924, 0.9969906806945801], + [-5.541265487670898, -3.3116655349731445], + [0.6716762781143188, 10.527174949645996], + [2.3752219676971436, 5.8790507316589355], + [-4.272078514099121, -1.9789105653762817], + [0.4801632761955261, -1.1962230205535889], + [2.8316614627838135, -7.363490104675293], + [1.9943583011627197, -8.008490562438965], + [-8.037337303161621, -1.6883522272109985], + [-4.945542812347412, 6.909719467163086], + [2.6654558181762695, 1.1805211305618286], + [2.443199396133423, -8.233652114868164], + [-5.032268524169922, 4.052027225494385], + [-4.082191467285156, -2.3483898639678955], + [-4.14013147354126, 5.787362098693848], + [-0.5985081791877747, 0.21475011110305786], + [-3.359053611755371, 5.940682411193848], + [-1.5288259983062744, -2.776344060897827], + [3.096235990524292, -4.6477952003479], + [-2.0859405994415283, 2.8426969051361084], + [-3.4118807315826416, 6.972977638244629], + [-4.009353160858154, -1.384946346282959], + [-3.6258556842803955, -0.05283660069108009], + [-7.4070611000061035, -1.6251035928726196], + [-2.1096832752227783, 1.1838175058364868], + [-6.70952033996582, -1.7596813440322876], + [-5.580578327178955, 7.810305595397949], + [2.6502275466918945, -6.896950721740723], + [-0.04163176566362381, 0.21163275837898254], + [-0.3128487467765808, 9.860782623291016], + [1.8669081926345825, -3.192589521408081], + [-2.991180181503296, -3.5531234741210938], + [0.4054202735424042, -1.0279760360717773], + [1.7041515111923218, 4.995783805847168], + [2.146923542022705, -3.9378113746643066], + [5.94963264465332, -3.4336421489715576], + [-0.46366560459136963, 8.596479415893555], + [-0.3065568208694458, 9.510297775268555], + [-3.9616405963897705, -1.1150493621826172], + [-4.882731914520264, -1.6925495862960815], + [1.911461353302002, 5.211099624633789], + [0.021958939731121063, -1.2940338850021362], + [-0.2301042079925537, 9.763765335083008], + [-3.9693634510040283, -2.570077896118164], + [5.657970428466797, -0.9988715052604675], + [-1.6510940790176392, 5.215696334838867], + [3.1434385776519775, -4.719817161560059], + [2.091489553451538, -5.062591075897217], + [3.0136804580688477, 4.899716854095459], + [-4.626989364624023, -3.410661458969116], + [-4.056736469268799, -2.626332998275757], + [2.483553409576416, -3.017814874649048], + [-4.804529666900635, 2.537672758102417], + [-2.184312582015991, 2.948432207107544], + [-0.407227098941803, 5.382086277008057], + [1.9550905227661133, -7.7236480712890625], + [-2.3065662384033203, 1.925782322883606], + [-4.796908378601074, 0.41881197690963745], + [0.005563013255596161, 9.927978515625], + [2.5473084449768066, -3.8567464351654053], + [8.692612648010254, -2.669600248336792], + [1.0615373849868774, -0.1852046549320221], + [-3.3819868564605713, 5.439260959625244], + [2.9796574115753174, 6.090547561645508], + [-5.377331733703613, -3.3520374298095703], + [6.358686923980713, -2.915210008621216], + [-0.3110899329185486, 9.742364883422852], + [3.0012149810791016, -4.526252269744873], + [3.130176305770874, -4.891388416290283], + [-3.1144495010375977, -2.1058661937713623], + [2.01021146774292, -7.028937816619873], + [-5.713475227355957, 6.97160530090332], + [0.4356403350830078, -4.121252059936523], + [0.25483763217926025, -0.5876892805099487], + [3.0701072216033936, -4.618239402770996], + [-3.7695562839508057, -4.595266342163086], + [-5.184845447540283, -3.447843074798584], + [0.3838653564453125, -0.33472758531570435], + [-2.8628644943237305, 4.146554946899414], + [-6.178256988525391, -1.7378126382827759], + [-2.526583194732666, 1.4598915576934814], + [2.622667074203491, -6.002208709716797], + [-2.729537010192871, 2.2838852405548096], + [-3.9947116374969482, 6.082056045532227], + [-2.220855474472046, 4.873012065887451], + [7.218934535980225, -1.8882622718811035], + [1.709467887878418, -5.951698303222656], + [-4.777406215667725, 3.29345703125], + [-2.1223337650299072, 0.7104669809341431], + [-2.346325635910034, -0.6145574450492859], + [3.8516297340393066, -0.6670502424240112], + [1.8422752618789673, 3.5906949043273926], + [5.471201419830322, 7.690888404846191], + [1.1753625869750977, -7.194009780883789], + [-5.630677700042725, 4.568537712097168], + [-0.2275475263595581, 9.04888916015625], + [0.2458980679512024, 8.028074264526367], + [-6.351155757904053, -1.8544470071792603], + [-6.604563236236572, -2.015793561935425], + [0.46016907691955566, -0.5046972036361694], + [1.1499096155166626, -7.33247184753418], + [-3.5151381492614746, -1.328452467918396], + [-4.030592441558838, -1.83596932888031], + [-3.6631429195404053, -5.773540496826172], + [-4.18165922164917, -2.554806709289551], + [0.9045758843421936, 5.926384925842285], + [-5.045116901397705, -2.7813713550567627], + [-5.138366222381592, 4.268745422363281], + [-0.20841199159622192, 9.893903732299805], + [-3.8742125034332275, -1.855017066001892], + [3.0854389667510986, -4.627739429473877], + [-4.920341491699219, 7.32091760635376], + [5.871799945831299, -0.9996510148048401], + [-3.9622018337249756, -1.5618897676467896], + [-4.372223854064941, 5.510557174682617], + [-2.2049734592437744, -2.8377797603607178], + [1.9421327114105225, 5.255002975463867], + [7.937951564788818, -1.9423860311508179], + [-4.035101413726807, 5.232962608337402], + [-5.220002174377441, -2.6266844272613525], + [-4.389270782470703, 0.9478229880332947], + [-0.31528353691101074, 9.555707931518555], + [-0.06144321709871292, 9.45030689239502], + [2.4958953857421875, -4.387120246887207], + [-4.757673263549805, -0.7082623839378357], + [-3.395129919052124, -3.6868767738342285], + [-4.113101482391357, -3.1872565746307373], + [1.4576365947723389, 4.775587558746338], + [-3.865694284439087, -3.504411458969116], + [-5.0762715339660645, 2.2039811611175537], + [-3.92861008644104, -2.3762705326080322], + [-5.54973840713501, -4.534787654876709], + [-4.532228946685791, -1.3011044263839722], + [-2.0134050846099854, 2.7331809997558594], + [7.969723224639893, -2.012216329574585], + [-3.491278648376465, -1.3528623580932617], + [6.595736026763916, -2.7031002044677734], + [5.26052713394165, -1.666157841682434], + [2.6653060913085938, -4.001589775085449], + [-4.8910112380981445, -3.080754518508911], + [-0.06297028809785843, 8.681293487548828], + [-0.5593909025192261, -0.4911980628967285], + [-5.776718616485596, -2.672121286392212], + [5.680052757263184, -1.7851482629776], + [-0.7209989428520203, -0.7355983853340149], + [-4.852038860321045, 5.632472038269043], + [-3.460080623626709, -2.212097406387329], + [-0.21118706464767456, 9.500526428222656], + [-3.548987627029419, -0.29333341121673584], + [-3.681532144546509, -1.6852736473083496], + [-6.706032752990723, -0.33185112476348877], + [-6.287467956542969, -1.7061076164245605], + [2.4523580074310303, -3.895529270172119], + [-3.725797653198242, -1.6040323972702026], + [-5.219564914703369, 4.4243268966674805], + [-0.10875911265611649, 8.670550346374512], + [-5.274162292480469, 1.729758381843567], + [-2.300766706466675, 3.200706720352173], + [2.4416005611419678, -3.387605905532837], + [2.1098825931549072, -6.907020568847656], + [3.8095638751983643, 6.520755290985107], + [-5.302148818969727, 6.407719612121582], + [-4.0166826248168945, -1.8525185585021973], + [-4.265617847442627, 5.973759651184082], + [-5.532839298248291, 7.102733612060547], + [-3.864079713821411, -1.0164427757263184], + [-5.411452770233154, 6.971872329711914], + [2.461949348449707, -5.944079399108887], + [6.261779308319092, -2.2658531665802], + [6.475348949432373, -3.1855437755584717], + [-4.9175238609313965, 5.654131889343262], + [-5.75567102432251, 5.080300331115723], + [-6.488470077514648, 7.282071113586426], + [-2.8410208225250244, -1.1114823818206787], + [-0.16834047436714172, -1.4767197370529175], + [-2.673112630844116, 2.8341333866119385], + [6.989510536193848, -0.6078662872314453], + [0.48085570335388184, -0.9913902282714844], + [-2.572941303253174, -0.5606372952461243], + [-4.896935939788818, -3.0911316871643066], + [2.427696466445923, -6.47349739074707], + [-4.321117877960205, 4.585625648498535], + [-4.052663326263428, -1.6157259941101074], + [-0.43102461099624634, 9.08801555633545], + [2.081493616104126, 4.9915852546691895], + [-7.281254291534424, 8.907997131347656], + [-2.766087532043457, 2.566678524017334], + [-5.216536998748779, -2.1130528450012207], + [-5.356953144073486, -3.4380245208740234], + [-4.647409915924072, 5.571765899658203], + [4.119259834289551, -1.8220146894454956], + [1.4907236099243164, -3.9440646171569824], + [2.9928433895111084, -4.670659065246582], + [3.5615575313568115, 6.551258087158203], + [-5.399383068084717, 5.911257266998291], + [-2.212289333343506, 2.0160138607025146], + [2.6625044345855713, 0.888441801071167], + [2.5370612144470215, -11.803902626037598], + [3.887873649597168, 6.446428298950195], + [-5.194651126861572, -3.9596574306488037], + [-5.403161525726318, 3.1368408203125], + [1.9732654094696045, 5.502096176147461], + [-0.47106248140335083, 9.373275756835938], + [-3.999535322189331, -3.6003193855285645], + [-6.168034076690674, -2.9352736473083496], + [-0.3379696011543274, -0.5266573429107666], + [-6.723144054412842, -2.0562312602996826], + [-4.4345245361328125, -3.415167808532715], + [1.073779582977295, -6.8048906326293945], + [-2.60145902633667, 2.0191080570220947], + [-4.920915603637695, -1.5637401342391968], + [-5.187362194061279, -2.86592435836792], + [-4.433830738067627, 6.176342487335205], + [3.06787371635437, -4.6684417724609375], + [-7.381859302520752, -1.5892258882522583], + [-0.25686293840408325, 10.37822151184082], + [-3.8947038650512695, 7.540642738342285], + [-5.832824230194092, -2.8386576175689697], + [-5.987623691558838, 2.292391777038574], + [-2.2712886333465576, 2.468170404434204], + [-4.585892200469971, -2.228088140487671], + [-0.23923277854919434, 9.478022575378418], + [-4.662906646728516, 4.408937454223633], + [-5.144006729125977, -0.18042725324630737], + [-2.3616256713867188, 1.5031383037567139], + [1.347254753112793, -6.506247520446777], + [6.576112270355225, -1.5211622714996338], + [0.8777746558189392, -0.3140154480934143], + [1.089402437210083, 5.300695419311523], + [-3.8918559551239014, 5.255752086639404], + [-4.248979091644287, 0.3554052710533142], + [-0.5883982181549072, 9.606462478637695], + [-4.4938178062438965, 4.61551570892334], + [8.252036094665527, -2.24019193649292], + [-5.2678751945495605, -4.15583610534668], + [-3.513840675354004, -3.380963087081909], + [8.090601921081543, -1.9276028871536255], + [-5.717584133148193, 4.257130146026611], + [-3.634145498275757, 5.421555995941162], + [5.732120990753174, -2.757002353668213], + [-4.808215618133545, 4.171194076538086], + [-4.447032928466797, -0.4615572690963745], + [-0.39584916830062866, 10.183296203613281], + [6.101051330566406, -1.3243533372879028], + [-5.421388626098633, -2.9007694721221924], + [0.7379374504089355, 6.036746501922607], + [-5.749663829803467, 7.862674713134766], + [-5.283545017242432, 3.8973066806793213], + [-0.32087838649749756, 9.581655502319336], + [3.014958620071411, -4.697381019592285], + [-2.952765941619873, -3.1347901821136475], + [-2.242319345474243, -1.905605673789978], + [-2.006044626235962, -0.580985963344574], + [2.7281174659729004, -4.15777063369751], + [-3.5420167446136475, -3.359189748764038], + [2.6841564178466797, 6.271526336669922], + [5.490149974822998, 7.551397323608398], + [2.334845781326294, -3.97471022605896], + [2.6067733764648438, -3.6650023460388184], + [3.164308547973633, -2.1000921726226807], + [-2.324341297149658, 0.8116317391395569], + [2.460399866104126, -7.152176856994629], + [-2.8024680614471436, -3.4927074909210205], + [5.419493198394775, 0.15388545393943787], + [6.132127285003662, -4.009012222290039], + [-6.951021671295166, -1.793004035949707], + [0.37414151430130005, 6.172359466552734], + [2.9504573345184326, -6.05084228515625], + [-3.844890832901001, 5.144964218139648], + [-0.021312780678272247, 10.382993698120117], + [-1.363883137702942, 1.6815863847732544], + [8.6883544921875, -2.7766635417938232], + [-2.3458449840545654, 0.9758418798446655], + [5.820011615753174, -1.285674810409546], + [-3.5827856063842773, -1.8783001899719238], + [8.119684219360352, -2.1586687564849854], + [-5.554992198944092, -2.427574396133423], + [-5.077140808105469, 6.654722213745117], + [-2.6326069831848145, -0.8336986899375916], + [8.260168075561523, -2.1163341999053955], + [3.1421022415161133, -4.711761951446533], + [9.269989967346191, -2.549772024154663], + [1.2630975246429443, 6.283102989196777], + [7.317325592041016, -1.647177815437317], + [-5.333014011383057, -0.14792221784591675], + [-7.341346263885498, -1.89413583278656], + [-5.864527225494385, -2.9393649101257324], + [5.747305870056152, -2.532226324081421], + [5.918213367462158, 7.8386640548706055], + [2.366943597793579, 0.6944578289985657], + [-2.628774881362915, 5.147693634033203], + [8.319287300109863, -2.239457845687866], + [-2.4531524181365967, -2.9054200649261475], + [-4.312981605529785, 4.33151912689209], + [2.46570086479187, -6.827740669250488], + [-4.330733299255371, 5.439152717590332], + [-3.5084633827209473, 6.001893997192383], + [-4.364734172821045, -3.1069562435150146], + [-6.46783447265625, -2.568096399307251], + [3.1366207599639893, -5.04267692565918], + [-4.8138909339904785, 4.324860572814941], + [-2.729227304458618, 2.5135698318481445], + [-2.0958104133605957, 1.194006085395813], + [9.444355964660645, -2.6399824619293213], + [-5.3091607093811035, 7.572234153747559], + [0.27168792486190796, 9.074738502502441], + [7.820030212402344, -1.9487313032150269], + [-6.532688140869141, -0.9963030219078064], + [1.5182576179504395, 0.6678113341331482], + [-4.692251682281494, -0.9780771136283875], + [5.8550496101379395, -2.530451536178589], + [-4.913994312286377, -0.07789194583892822], + [2.9617056846618652, -4.8336896896362305], + [-3.464881658554077, 5.905039310455322], + [-3.7428462505340576, -0.9123631119728088], + [-5.120650291442871, -4.068482875823975], + [2.852511167526245, -6.534206390380859], + [-4.476696491241455, -5.660457134246826], + [-2.219559907913208, 0.6421457529067993], + [-1.6585520505905151, -0.8448507189750671], + [-7.698208332061768, 9.355443000793457], + [-3.553605556488037, 1.704872965812683], + [-2.002383232116699, 1.0966750383377075], + [-6.218029499053955, 5.237786769866943], + [-5.312825679779053, 6.327553749084473], + [-4.251721382141113, 0.6788032054901123], + [0.7221778035163879, -0.5524265766143799], + [7.7731614112854, -2.516674280166626], + [2.4785866737365723, -7.910740375518799], + [-0.3547472357749939, 10.959421157836914], + [-4.874955177307129, -2.170258045196533], + [-3.417513132095337, 4.636935234069824], + [-4.574366092681885, -5.151219367980957], + [-4.313817977905273, -2.693570613861084], + [-5.2137451171875, -5.25884485244751], + [-1.0231773853302002, 9.243245124816895], + [5.973752498626709, -1.277279257774353], + [2.219599485397339, -4.1778178215026855], + [-6.707339763641357, -0.3887227773666382], + [-0.11315605789422989, -1.3064175844192505], + [-1.8565332889556885, 2.3570547103881836], + [-2.0874905586242676, 1.7555716037750244], + [-0.4454725384712219, 10.628185272216797], + [-4.743171215057373, -2.529400587081909], + [-0.2690332531929016, 9.990372657775879], + [-4.52347993850708, 2.114964485168457], + [-2.2481460571289062, 4.657233238220215], + [-2.8626787662506104, 0.8885186910629272], + [-3.03867769241333, 4.990434646606445], + [2.7101991176605225, -4.383127212524414], + [-4.816268444061279, -3.038102626800537], + [-1.911969542503357, 2.281890869140625], + [-4.809760093688965, 0.6976014375686646], + [8.685393333435059, -2.413661479949951], + [1.6330819129943848, -6.340331554412842], + [9.04159927368164, -2.629068374633789], + [-4.367115497589111, -2.8774306774139404], + [-1.9335163831710815, 1.8802921772003174], + [2.774553060531616, -4.08424186706543], + [-2.5458157062530518, 3.6309218406677246], + [-5.501626491546631, 4.005908966064453], + [2.1837728023529053, -7.322821140289307], + [9.276684761047363, -2.4331700801849365], + [-0.24532550573349, 10.777585983276367], + [2.3022801876068115, -7.101400375366211], + [8.640890121459961, -2.536970615386963], + [3.2179343700408936, -5.715227127075195], + [6.635603427886963, -1.368528962135315], + [-3.4705333709716797, 5.445198059082031], + [-4.905695915222168, 4.429360866546631], + [-3.098167657852173, -4.624000549316406], + [-4.559361457824707, -2.6288139820098877], + [-4.012497425079346, -3.9572341442108154], + [-4.912879467010498, -1.4807668924331665], + [-2.498110294342041, 0.7489597797393799], + [-4.160271644592285, -3.0223007202148438], + [-7.979771137237549, -0.8978588581085205], + [-7.471465587615967, -1.220655083656311], + [-0.8893497586250305, -0.4912055432796478], + [-5.087941646575928, -3.184502124786377], + [-3.1208980083465576, -3.4856364727020264], + [-2.0094943046569824, -0.83856201171875], + [-1.893958330154419, 6.141228199005127], + [8.004714012145996, -3.027453660964966], + [7.280842304229736, -1.6404523849487305], + [2.861055612564087, -4.330122947692871], + [-5.2309041023254395, -3.4072773456573486], + [-1.0341354608535767, 0.38483643531799316], + [-5.125663757324219, -4.116406440734863], + [3.2582921981811523, -4.868335723876953], + [8.899310111999512, -2.4452388286590576], + [-4.891351699829102, -0.45058631896972656], + [-5.768604755401611, 3.8822619915008545], + [-3.4768762588500977, -1.5571010112762451], + [-0.4599314332008362, 10.30093765258789], + [8.775679588317871, -2.40107798576355], + [-0.310920387506485, -0.611827552318573], + [7.176578044891357, -1.805337905883789], + [-0.5950619578361511, 0.5900948643684387], + [-2.0797996520996094, 2.469578981399536], + [-7.018521785736084, -1.8978376388549805], + [-2.2314741611480713, 2.100221872329712], + [6.754973411560059, -3.3010566234588623], + [-5.67033052444458, 6.753744125366211], + [-0.7688266038894653, 9.292763710021973], + [-2.8005001544952393, 2.8009719848632812], + [8.057417869567871, -1.5465413331985474], + [1.9312233924865723, -3.587604522705078], + [2.576996088027954, 0.9551880359649658], + [-4.306585788726807, -2.593463897705078], + [6.746384620666504, -1.4839766025543213], + [-4.949694633483887, -1.5730024576187134], + [-5.502488136291504, 1.0685147047042847], + [-5.523343563079834, -2.1387102603912354], + [-4.646687030792236, -1.526161551475525], + [-4.954135417938232, -2.801837205886841], + [0.3519427180290222, -5.32878303527832], + [-4.78129243850708, 6.954322338104248], + [-3.8479716777801514, 2.1839725971221924], + [1.956575870513916, -3.5154640674591064], + [-3.837146043777466, 4.013739109039307], + [-3.5917844772338867, -1.4208961725234985], + [-1.177666187286377, -0.7661126852035522], + [-2.727898359298706, -2.313972234725952], + [-2.8617987632751465, -4.489378929138184], + [7.818244457244873, -2.7560980319976807], + [-3.597093105316162, 6.937366485595703], + [8.049847602844238, -2.2754108905792236], + [-4.022854804992676, -1.6589441299438477], + [0.3708636164665222, 0.42830023169517517], + [1.7309932708740234, -8.629951477050781], + [2.708287477493286, -8.24489974975586], + [-2.1732137203216553, -0.05636334791779518], + [-2.3703603744506836, 2.361677885055542], + [7.265470027923584, -1.7645827531814575], + [1.916508436203003, 4.793807029724121], + [-0.36735087633132935, 9.262158393859863], + [-7.023648262023926, -1.3919936418533325], + [-0.4671507477760315, 9.392658233642578], + [3.310822010040283, -4.965206623077393], + [1.219519019126892, -7.9243927001953125], + [-4.564005374908447, -1.867134690284729], + [-4.049406051635742, -2.3657493591308594], + [3.12912917137146, -4.734774589538574], + [-7.220809459686279, 8.92991828918457], + [-1.813737392425537, 5.317532539367676], + [-3.9855167865753174, -1.9046813249588013], + [1.8843830823898315, -4.6240410804748535], + [-0.5804908871650696, 10.889749526977539], + [-7.776051998138428, -0.9825533032417297], + [1.7480158805847168, 5.072137832641602], + [2.7413241863250732, -4.170391082763672], + [-5.432405948638916, -3.2134313583374023], + [-5.182668685913086, -2.9793503284454346], + [-5.4611897468566895, -3.7733817100524902], + [7.378454208374023, -3.956101417541504], + [-5.752124309539795, 3.138662576675415], + [-5.730956554412842, 7.067044258117676], + [-4.8251423835754395, 5.7653045654296875], + [-5.459374904632568, -3.2886579036712646], + [-0.353346049785614, 8.622974395751953], + [-6.745480060577393, 1.7408084869384766], + [-4.413401126861572, -2.8708832263946533], + [8.627817153930664, -2.3194832801818848], + [5.310699939727783, 7.252092361450195], + [-4.914249897003174, 5.703645706176758], + [2.1760470867156982, -3.679295301437378], + [-0.6896113753318787, 12.015921592712402], + [-5.154257297515869, 3.595963716506958], + [-6.795008659362793, -1.9795032739639282], + [-4.047996997833252, -2.0749197006225586], + [-3.594513177871704, -0.6544132232666016], + [-3.6551401615142822, -0.929175078868866], + [-5.403066158294678, 3.7731106281280518], + [-2.6249935626983643, 3.960606336593628], + [1.6961991786956787, -4.255608558654785], + [-6.521273136138916, 7.954446792602539], + [-5.464166164398193, -1.2943706512451172], + [-2.216731309890747, 2.6760261058807373], + [6.657109260559082, -1.5036070346832275], + [5.067759990692139, -4.70473575592041], + [-4.635457515716553, -1.149391770362854], + [-0.328860342502594, 10.746309280395508], + [-4.3816046714782715, -2.8302366733551025], + [-0.19981253147125244, -0.6386871933937073], + [-0.15308338403701782, 5.520736217498779], + [-4.897943019866943, -3.7231180667877197], + [-6.010780334472656, 2.119629144668579], + [7.072404384613037, -1.804233431816101], + [2.210474729537964, -3.831367254257202], + [-6.5865607261657715, 8.262834548950195], + [9.544181823730469, -2.6420490741729736], + [-3.258819818496704, -0.6986621022224426], + [1.1637146472930908, -4.772561073303223], + [-4.447169780731201, -2.846816301345825], + [-4.463714122772217, 3.2945189476013184], + [2.3164381980895996, -4.271198272705078], + [-4.657726764678955, -1.4198895692825317], + [4.918710231781006, -2.657910108566284], + [2.323796033859253, -7.713699817657471], + [-4.340953350067139, -1.6380621194839478], + [2.729739189147949, -4.100529670715332], + [-6.711038112640381, -1.828063726425171], + [6.4166412353515625, -2.2460715770721436], + [-5.149203777313232, -2.9097352027893066], + [-2.4884073734283447, -4.36540412902832], + [0.6481931805610657, -4.847347259521484], + [-2.1479289531707764, 2.582742691040039], + [-3.7947885990142822, 6.087829113006592], + [6.005260944366455, -3.001324415206909], + [1.4693293571472168, 4.9492597579956055], + [-5.255786895751953, -2.5453732013702393], + [-4.2812323570251465, 4.39304256439209], + [-7.672091960906982, -1.9772576093673706], + [-2.858860731124878, -3.6328070163726807], + [1.8689123392105103, -8.225456237792969], + [-5.489528656005859, 7.202434062957764], + [0.46430689096450806, 5.408621311187744], + [2.736307382583618, -4.171425819396973], + [1.0065081119537354, -6.881979465484619], + [-0.3884614109992981, -2.114805221557617], + [6.51096773147583, -0.6981956958770752], + [-2.2217979431152344, 2.091158866882324], + [2.337660074234009, -8.140776634216309], + [-5.525199890136719, -3.326869249343872], + [2.586066246032715, 6.269243240356445], + [-4.777770042419434, -0.8482481241226196], + [3.1799399852752686, -5.023201942443848], + [5.222503185272217, 7.248684883117676], + [-3.770125150680542, -1.692077875137329], + [-3.5292797088623047, -3.360666513442993], + [6.7527008056640625, -1.1233512163162231], + [2.486685276031494, 5.879233360290527], + [1.0160198211669922, -6.9878034591674805], + [2.313572645187378, -5.841833114624023], + [-6.1513543128967285, 7.963052749633789], + [2.222341299057007, 5.643625736236572], + [-4.811010837554932, 0.945248007774353], + [3.2421534061431885, -2.838205099105835], + [-4.472756385803223, -2.0812923908233643], + [-0.1290581226348877, 8.122350692749023], + [-2.349263906478882, 1.6546275615692139], + [2.158067464828491, 4.2167768478393555], + [-2.570030927658081, 1.3351004123687744], + [-6.364169120788574, -0.8474147319793701], + [-4.064035892486572, -6.1434431076049805], + [6.048695087432861, -1.2910422086715698], + [1.3035764694213867, 0.5378385186195374], + [-6.432647228240967, 7.7930097579956055], + [-0.3402734398841858, 9.284360885620117], + [1.137606143951416, -6.3239850997924805], + [-3.711374521255493, -3.511387348175049], + [-5.6803765296936035, -2.0087716579437256], + [2.0902369022369385, 3.3237850666046143], + [-4.66183614730835, 2.403517484664917], + [2.3407764434814453, 5.613787651062012], + [-5.340691089630127, -2.116522789001465], + [-3.9897594451904297, 7.564254283905029], + [-7.67008638381958, -1.6054291725158691], + [-5.214649677276611, 3.7903800010681152], + [-0.2354537844657898, 9.511302947998047], + [-0.24349159002304077, 9.79811954498291], + [-0.46469712257385254, 9.640752792358398], + [-0.321139395236969, 8.124259948730469], + [-2.608766794204712, 2.2112131118774414], + [0.7919158935546875, 6.5675458908081055], + [-0.4042056202888489, 9.94887924194336], + [4.6508307456970215, -1.5338128805160522], + [0.3409067690372467, -0.020033899694681168], + [7.907773017883301, -2.0443811416625977], + [9.432585716247559, -2.636152505874634], + [-3.6491692066192627, -2.3550567626953125], + [-1.4426666498184204, 5.309399127960205], + [3.581594467163086, 6.597972393035889], + [7.9813666343688965, -2.3592770099639893], + [9.268906593322754, -2.610248327255249], + [-5.13137149810791, -2.2213377952575684], + [-0.5447803139686584, 8.520345687866211], + [-0.34803444147109985, 10.31938362121582], + [-3.9927923679351807, 5.798579216003418], + [2.836420774459839, -5.28800630569458], + [-3.110095262527466, -4.363406658172607], + [7.821183204650879, -2.6541287899017334], + [1.7705490589141846, 1.1873387098312378], + [-6.477915287017822, 4.674088001251221], + [-0.8894423842430115, 3.3822524547576904], + [-4.026725769042969, -1.392356514930725], + [-0.33646851778030396, 9.196596145629883], + [2.3564774990081787, 5.1085309982299805], + [1.5489366054534912, 5.483516693115234], + [3.0822954177856445, -4.821944236755371], + [3.0952951908111572, -4.771396636962891], + [-4.256014347076416, -2.9541051387786865], + [3.0358035564422607, -4.5467848777771], + [0.10496144741773605, 9.636711120605469], + [2.255474090576172, -2.9935781955718994], + [-4.801079273223877, -2.584152936935425], + [2.4246420860290527, -3.702756881713867], + [3.162423610687256, -6.938101768493652], + [0.04412224143743515, -0.3653632402420044], + [-5.241753578186035, 7.4899115562438965], + [3.287459373474121, -4.905367851257324], + [-4.805325984954834, -3.0742251873016357], + [2.509169101715088, -5.659328937530518], + [-1.7011445760726929, 2.1578946113586426], + [-0.709869384765625, 9.80479621887207], + [1.3807930946350098, -6.743926048278809], + [9.217947959899902, -2.6521737575531006], + [-3.976609945297241, -3.9731898307800293], + [-4.752929210662842, -2.971435308456421], + [-2.308375597000122, 1.659051537513733], + [-6.716217517852783, 2.4255495071411133], + [0.006080649793148041, -0.9941610097885132], + [-8.383233070373535, -0.9981486797332764], + [-4.092504978179932, -3.191950559616089], + [-0.5164335370063782, 11.481834411621094], + [4.682861804962158, -0.8203874826431274], + [2.632218599319458, -3.8873450756073], + [0.7513719201087952, -6.611107349395752], + [-5.7755303382873535, 5.0533905029296875], + [2.370501756668091, -5.252201080322266], + [-3.5562026500701904, -0.759723424911499], + [2.679095506668091, -5.898204803466797], + [-2.2699363231658936, 2.080103635787964], + [-5.484304904937744, 8.117755889892578], + [-0.4386400580406189, 10.512864112854004], + [9.768528938293457, -2.721997022628784], + [3.6734936237335205, 1.2951840162277222], + [1.6856908798217773, -6.322193622589111], + [-5.219667434692383, -3.448819875717163], + [-3.888909101486206, -4.354554653167725], + [8.412182807922363, -2.3677406311035156], + [3.219186544418335, -4.888268947601318], + [-8.211955070495605, -0.7986648082733154], + [2.855234384536743, -4.311577796936035], + [-0.4265328645706177, 8.969002723693848], + [1.971278429031372, 5.670989990234375], + [2.9593615531921387, -4.474896430969238], + [5.192123889923096, 7.620968818664551], + [0.7579556107521057, 5.218568801879883], + [-5.150426387786865, 0.5350759625434875], + [-5.0227370262146, 5.544003486633301], + [0.04309766739606857, 9.318689346313477], + [-6.5725417137146, -2.12873911857605], + [6.115644454956055, -2.5393683910369873], + [5.0384202003479, 7.788119792938232], + [-0.21343496441841125, -1.481669306755066], + [1.3207744359970093, -7.626628875732422], + [-2.5186824798583984, 2.2611985206604004], + [2.6938021183013916, -4.384255886077881], + [-0.44406503438949585, 11.585578918457031], + [7.816087245941162, -2.168076276779175], + [-7.646182537078857, -1.105315923690796], + [3.370422601699829, 6.180098533630371], + [-5.438178539276123, -1.8098779916763306], + [6.055098056793213, -1.4057717323303223], + [-4.935473442077637, 1.6948752403259277], + [-6.626588344573975, -1.8630648851394653], + [-1.4830281734466553, 1.7609840631484985], + [-0.8472239971160889, 9.197295188903809], + [0.091057188808918, 1.1531959772109985], + [-0.16328215599060059, 9.467891693115234], + [-3.000579595565796, 0.037061866372823715], + [0.4704580307006836, 4.941461563110352], + [-5.304555892944336, 7.408639907836914], + [0.5647445917129517, -5.210099697113037], + [-7.397620677947998, 9.024147033691406], + [-5.154860973358154, -1.3810067176818848], + [2.3414533138275146, -4.023355007171631], + [-5.536285877227783, -2.4825916290283203], + [2.0065252780914307, -9.763422012329102], + [-5.657035827636719, 7.111056804656982], + [8.725382804870605, -2.407747507095337], + [-0.19863361120224, 9.369514465332031], + [7.176264762878418, -1.6711467504501343], + [-0.12781360745429993, -0.69634610414505], + [-0.7712817788124084, 9.778167724609375], + [-3.7920918464660645, 0.655778169631958], + [3.6094892024993896, 1.2432459592819214], + [-5.9535322189331055, 7.021330833435059], + [-5.328791618347168, -3.5855801105499268], + [-8.318445205688477, -1.003526210784912], + [-4.577696323394775, 2.8805439472198486], + [-4.86088228225708, -3.448132276535034], + [2.346712827682495, 0.41391241550445557], + [-5.183409214019775, -3.302969217300415], + [2.836002826690674, -6.775847434997559], + [2.3223326206207275, -7.422041893005371], + [-2.487029790878296, 1.4180976152420044], + [-4.8203959465026855, -3.8874716758728027], + [-4.1412034034729, 6.459809303283691], + [-0.2509855031967163, 10.29011344909668], + [1.7620664834976196, 5.356166839599609], + [2.4976768493652344, 0.7798258066177368], + [-5.967382907867432, 1.3106038570404053], + [4.700087547302246, -1.8486276865005493], + [-6.431807041168213, -0.0024194754660129547], + [-3.7758240699768066, 0.05640428885817528], + [1.311079502105713, -6.557408332824707], + [-0.8068968653678894, 9.37778091430664], + [-3.666534662246704, -2.141777276992798], + [-5.65337610244751, -1.227307677268982], + [9.990496635437012, -2.722102403640747], + [-0.5299109816551208, 11.883060455322266], + [-3.5758488178253174, -3.7013096809387207], + [-3.986457347869873, -1.0555305480957031], + [1.7781692743301392, 5.5807085037231445], + [3.0001089572906494, -4.506101608276367], + [-4.060477256774902, -2.8745458126068115], + [2.760974168777466, -4.283524036407471], + [-3.728356122970581, 7.489980697631836], + [8.216095924377441, -2.5166590213775635], + [-6.410160064697266, 8.313268661499023], + [-5.094156742095947, -5.863102912902832], + [-6.282805919647217, 7.427776336669922], + [-1.6882057189941406, -1.93947172164917], + [-0.25054430961608887, -1.1453570127487183], + [-5.617039203643799, -3.791837453842163], + [-4.980152130126953, -7.3155622482299805], + [-0.633103609085083, -2.135287284851074], + [5.326206207275391, -2.7151987552642822], + [2.9960832595825195, -4.784660816192627], + [-6.276334285736084, 1.302219271659851], + [-4.2798171043396, -1.2644702196121216], + [-6.526736736297607, 7.974713325500488], + [-1.685056447982788, 1.9821239709854126], + [-7.471324443817139, 9.222469329833984], + [2.0501561164855957, 5.759886741638184], + [-3.9149391651153564, 5.356166839599609], + [6.369528770446777, -3.1402480602264404], + [0.4125707745552063, 7.738574504852295], + [0.4383947253227234, -5.216129302978516], + [1.016830563545227, -5.661465644836426], + [-5.626231670379639, -2.6919186115264893], + [-3.9641635417938232, -3.922104835510254], + [-0.6583371758460999, 11.655837059020996], + [-2.612928628921509, -3.1732747554779053], + [-2.3696577548980713, 2.1150946617126465], + [-2.819119691848755, 2.600257396697998], + [2.644599676132202, 4.739272117614746], + [-4.171182632446289, -1.1242784261703491], + [-5.917838096618652, -2.900585174560547], + [2.3964626789093018, 5.980262756347656], + [-0.27709364891052246, 10.079248428344727], + [-5.602181911468506, 5.647821426391602], + [3.1225602626800537, -5.290452003479004], + [0.5271839499473572, 9.23033332824707], + [2.6546339988708496, -7.410399436950684], + [8.28702449798584, -2.039466381072998], + [-4.227903366088867, -3.4274747371673584], + [-2.39505672454834, 1.642612099647522], + [0.6940428614616394, 0.4508759677410126], + [-5.224583148956299, 3.2750163078308105], + [1.0063261985778809, 0.36820340156555176], + [-2.318331241607666, 0.9666428565979004], + [-2.840540647506714, 0.47108274698257446], + [-4.334540367126465, -1.8421978950500488], + [-2.488020420074463, 2.880624294281006], + [-5.167479038238525, 3.7335381507873535], + [1.6602836847305298, 0.3072054386138916], + [-1.700732707977295, 8.555312156677246], + [4.58426570892334, 7.46810245513916], + [-2.7321903705596924, 5.038086891174316], + [-2.577404737472534, 5.337370872497559], + [-6.532623291015625, 7.636467933654785], + [0.005108587443828583, -0.2943698763847351], + [-0.2737478017807007, 9.861480712890625], + [1.9772882461547852, -5.808384418487549], + [8.042943954467773, -2.231410264968872], + [2.535048723220825, 4.565983772277832], + [-2.1795098781585693, 2.272456407546997], + [3.153386354446411, -4.972374439239502], + [-2.3862879276275635, 1.1321872472763062], + [3.2407987117767334, -5.078795433044434], + [-3.197110652923584, -3.356947660446167], + [-0.27763426303863525, 10.94752025604248], + [4.1288371086120605, -6.252185821533203], + [2.591012716293335, -5.462179183959961], + [-5.322996616363525, -2.2422125339508057], + [-2.585777997970581, 1.4318139553070068], + [-1.0789744853973389, -1.4199129343032837], + [3.1679446697235107, -4.808195114135742], + [8.75229549407959, -2.563432455062866], + [1.772722840309143, 5.226282596588135], + [-0.15219861268997192, 10.675363540649414], + [-5.268366813659668, 0.3674788773059845], + [2.5278360843658447, -6.035527229309082], + [10.048150062561035, -2.710451126098633], + [-2.423051357269287, 2.542121171951294], + [2.8347885608673096, -4.299066543579102], + [2.0992271900177, 1.0196406841278076], + [-7.19586706161499, -1.7991632223129272], + [3.166064500808716, -4.745508670806885], + [2.5688586235046387, -3.9257047176361084], + [-6.3833136558532715, 1.7412034273147583], + [-6.000194072723389, 7.763806343078613], + [-4.591341495513916, -3.0276730060577393], + [-0.16473644971847534, 9.896151542663574], + [5.329416751861572, -1.1656935214996338], + [-4.1710991859436035, -4.154557228088379], + [-3.8302862644195557, -3.63742733001709], + [1.6271365880966187, 5.407111167907715], + [-3.4546902179718018, 5.384895324707031], + [-6.9425177574157715, 8.335135459899902], + [0.06427445262670517, -0.9280056357383728], + [-1.6503188610076904, 1.2934749126434326], + [8.744311332702637, -2.4664337635040283], + [3.691030502319336, -4.087645530700684], + [-1.3759781122207642, 5.1706037521362305], + [-3.068058967590332, -1.6183751821517944], + [2.3675551414489746, -5.411792755126953], + [-4.085871696472168, -1.7752882242202759], + [3.0240983963012695, -4.540534973144531], + [-4.516077518463135, 7.578460693359375], + [-6.12571907043457, 1.833583950996399], + [2.3032519817352295, -6.183935165405273], + [2.4636566638946533, -3.7317087650299072], + [-0.030810929834842682, -1.1872326135635376], + [2.9126217365264893, -6.277737617492676], + [-3.321629047393799, 6.669985294342041], + [-6.008336067199707, -2.7950825691223145], + [-6.2292256355285645, 2.629772663116455], + [-3.907799482345581, -1.9560993909835815], + [3.0380122661590576, 6.6334757804870605], + [-4.280948638916016, -3.5542120933532715], + [-6.953339099884033, 7.964649200439453], + [-2.375145435333252, 2.2595369815826416], + [-6.218799591064453, -0.7790966033935547], + [-4.220881938934326, 4.121735095977783], + [-3.2765443325042725, 3.1095645427703857], + [4.066949367523193, -3.7191712856292725], + [-5.099918842315674, 2.4049346446990967], + [-5.1894612312316895, -1.4872124195098877], + [6.236572742462158, -1.3094018697738647], + [-6.439202785491943, 4.697427272796631], + [4.451382160186768, 6.926523685455322], + [-2.8000662326812744, -2.749345064163208], + [2.3686158657073975, 1.5387839078903198], + [2.6007707118988037, -7.249557971954346], + [-5.225546836853027, -1.330808401107788], + [-4.335779666900635, 5.400577068328857], + [-5.657081604003906, 4.905247688293457], + [-4.919501781463623, -2.1496779918670654], + [0.39005783200263977, -0.8335835933685303], + [6.9851250648498535, -2.855201005935669], + [7.44704008102417, -2.5299742221832275], + [-0.307791531085968, 10.453269958496094], + [-5.3329010009765625, 6.511453151702881], + [5.483160495758057, -2.1706383228302], + [-4.112767219543457, 5.964786052703857], + [-5.237255096435547, -2.5745410919189453], + [-4.861006259918213, -2.792583703994751], + [8.214875221252441, -2.5069501399993896], + [-3.552523374557495, -0.3328247666358948], + [-2.3876571655273438, 2.1402204036712646], + [-0.7082877159118652, 10.806628227233887], + [3.1710946559906006, -5.067471504211426], + [-7.413070201873779, -0.12965822219848633], + [-6.74807071685791, 1.5349775552749634], + [1.4953466653823853, 5.759640693664551], + [1.419148325920105, 3.725919485092163], + [-0.43872469663619995, 10.226356506347656], + [-5.121401309967041, 7.876691818237305], + [7.1655192375183105, -1.8463643789291382], + [-2.143202304840088, 0.558029055595398], + [-4.495215892791748, -2.242772340774536], + [3.0708444118499756, -4.605109214782715], + [7.7497663497924805, -2.398134469985962], + [2.7210471630096436, -4.197577953338623], + [-2.178403377532959, 1.6930484771728516], + [-4.184920310974121, -0.779147744178772], + [-5.3127617835998535, -4.028669834136963], + [-0.2845655083656311, 9.342558860778809], + [2.8923144340515137, 1.0024371147155762], + [-0.38993507623672485, -1.1678407192230225], + [-1.8618085384368896, 1.4677014350891113], + [-4.742187976837158, -2.3961281776428223], + [-1.8828043937683105, 1.3023678064346313], + [1.6707931756973267, -8.287467002868652], + [-3.963285207748413, -3.498305320739746], + [-3.4608309268951416, -3.611954927444458], + [-4.018064498901367, 5.853309631347656], + [0.023833803832530975, 9.932390213012695], + [9.156716346740723, -2.6650278568267822], + [3.258297920227051, -4.745419979095459], + [4.21638822555542, 6.757783889770508], + [-5.475576400756836, -3.625985622406006], + [6.891777515411377, -1.9993585348129272], + [-4.990320682525635, -3.695923089981079], + [-3.587350606918335, -1.4328954219818115], + [-1.2919063568115234, -2.5074455738067627], + [0.6230056881904602, 4.260320663452148], + [6.735341548919678, -2.01251220703125], + [0.3297613859176636, -0.39251112937927246], + [-4.918574333190918, -1.5565755367279053], + [-0.12642839550971985, -0.9132160544395447], + [9.060043334960938, -2.9306585788726807], + [-0.21784263849258423, 9.605226516723633], + [-2.2385294437408447, 2.9262375831604004], + [-2.8750593662261963, -2.4679911136627197], + [-4.399204730987549, -3.3966407775878906], + [2.4217464923858643, -3.817906618118286], + [2.467167615890503, -3.7683238983154297], + [-7.2331085205078125, 8.977952003479004], + [-5.837711811065674, -2.5764212608337402], + [-4.824693202972412, 2.107227087020874], + [5.593189716339111, -1.1119569540023804], + [-5.894172191619873, 7.288782596588135], + [-6.46167516708374, -1.1742295026779175], + [-2.588554620742798, 1.3043595552444458], + [3.886136770248413, 1.2051275968551636], + [1.0824861526489258, -5.332424640655518], + [-4.763935565948486, 4.592129707336426], + [-2.3214852809906006, 4.88233757019043], + [1.0670018196105957, -7.467806339263916], + [-6.613316059112549, 7.967761993408203], + [3.675452947616577, -2.8149938583374023], + [0.09465908259153366, 9.64780330657959], + [1.1515765190124512, -6.994750022888184], + [-0.20112711191177368, 3.8235089778900146], + [6.1281657218933105, -2.9731695652008057], + [-5.198085308074951, -3.4203193187713623], + [-5.490204334259033, 6.5273308753967285], + [7.018423557281494, -1.6255112886428833], + [2.630617141723633, -0.3375382423400879], + [-4.308239459991455, -2.514958143234253], + [-0.27128303050994873, 9.383174896240234], + [-1.5236284732818604, 4.922571182250977], + [-6.190927028656006, 7.897216796875], + [3.6047565937042236, 5.634138107299805], + [0.5362102389335632, -0.5402834415435791], + [1.6927859783172607, -8.082426071166992], + [3.609692335128784, 0.30357879400253296], + [-5.234055042266846, -3.6123435497283936], + [-6.463711261749268, -2.4644176959991455], + [-2.802600622177124, 1.804516077041626], + [-1.4508211612701416, 0.1905803382396698], + [-2.3729279041290283, 0.5069863796234131], + [1.5876452922821045, -3.8756778240203857], + [-0.2991707921028137, 9.042460441589355], + [-5.097104549407959, 1.2557681798934937], + [-4.301393985748291, -3.304300546646118], + [-0.5707005858421326, 10.788393020629883], + [-2.451704740524292, 1.766217589378357], + [0.5615020394325256, 5.090654373168945], + [1.8938096761703491, -7.262449264526367], + [-4.821192264556885, 0.07769441604614258], + [-6.2694172859191895, 7.814706802368164], + [-3.8461716175079346, -4.560748100280762], + [-7.1682915687561035, -1.412509799003601], + [-0.14496439695358276, 10.001032829284668], + [-2.2979507446289062, 0.0475960336625576], + [2.97694993019104, -4.65306282043457], + [8.437294960021973, -2.2701830863952637], + [-4.716345310211182, -2.2328484058380127], + [-5.474764347076416, -3.3548600673675537], + [0.9673658013343811, -3.020822763442993], + [1.0610544681549072, -3.5429484844207764], + [-3.6373867988586426, 6.132671356201172], + [2.8889405727386475, -5.2635908126831055], + [-4.326839923858643, 3.2061071395874023], + [-4.822903633117676, 4.231154918670654], + [-5.508740425109863, -1.388900637626648], + [1.0949358940124512, -6.113012313842773], + [2.1170315742492676, 5.403957843780518], + [2.9642140865325928, -4.462635040283203], + [-2.6166043281555176, 1.7436672449111938], + [-3.2667274475097656, 1.106087327003479], + [2.8962247371673584, -5.776527404785156], + [-5.307577610015869, -3.193716287612915], + [2.718827486038208, -4.2950849533081055], + [7.728309631347656, -2.2463347911834717], + [4.369439601898193, -1.2966879606246948], + [-4.999885559082031, -3.5298194885253906], + [-4.812600612640381, 4.889610767364502], + [-4.722400188446045, -2.7831695079803467], + [-4.1824445724487305, -2.0462188720703125], + [7.7910685539245605, -2.2111406326293945], + [8.110072135925293, -2.287632703781128], + [1.1321803331375122, 0.12421101331710815], + [8.846169471740723, -2.5241053104400635], + [5.825676441192627, -1.3356106281280518], + [8.373568534851074, -2.3745999336242676], + [-4.727804183959961, -2.633413076400757], + [-2.140016794204712, 2.082016944885254], + [0.09356557577848434, -0.6332730054855347], + [-0.38011884689331055, 8.585691452026367], + [-5.5354204177856445, 1.141176700592041], + [2.6487538814544678, -5.439550399780273], + [-4.7379889488220215, -2.0331296920776367], + [-0.8995669484138489, 9.807401657104492], + [-4.558103084564209, -2.97575306892395], + [2.362985372543335, 1.0743862390518188], + [-7.972322940826416, -0.9096436500549316], + [-0.23900476098060608, -1.8078975677490234], + [-4.127460479736328, -1.043986201286316], + [-3.0324668884277344, 5.027248859405518], + [0.588729202747345, -5.867914199829102], + [-4.70547342300415, -2.362142324447632], + [10.066597938537598, -2.7914841175079346], + [2.644365072250366, 1.3011494874954224], + [-5.865631580352783, 6.720609188079834], + [3.4698002338409424, 7.290833950042725], + [-3.039532423019409, 3.421286106109619], + [9.783797264099121, -2.7965452671051025], + [-1.2203223705291748, 4.530818462371826], + [-2.28961181640625, 2.0851352214813232], + [-5.527272701263428, 2.583850622177124], + [-1.8270015716552734, 1.933447003364563], + [-2.7974693775177, -4.1576762199401855], + [-0.2311437726020813, -1.083685278892517], + [2.8621256351470947, -3.9918668270111084], + [6.408712387084961, -1.388753890991211], + [-3.5723750591278076, -3.519244432449341], + [-6.8788371086120605, -1.5767433643341064], + [-2.56620192527771, -2.3938653469085693], + [-0.298195481300354, 9.525959968566895], + [-0.7442168593406677, 1.4999395608901978], + [-3.5598537921905518, 4.872527122497559], + [3.2630131244659424, -4.868767738342285], + [3.0335533618927, -4.563987731933594], + [-4.212482452392578, 2.450284004211426], + [8.314984321594238, -2.5960500240325928], + [7.640626907348633, -2.3576338291168213], + [3.218883752822876, -4.873937129974365], + [-1.2645883560180664, 1.1198540925979614], + [0.1590033769607544, -5.176145553588867], + [-0.5014483332633972, 10.436344146728516], + [-4.74741792678833, -3.6705198287963867], + [8.790637016296387, -2.4644811153411865], + [-0.43617528676986694, 9.758605003356934], + [-4.935017108917236, -3.6757287979125977], + [2.971339464187622, -0.9047222137451172], + [-3.9031670093536377, -0.21784865856170654], + [1.6499074697494507, -6.102226257324219], + [-2.0400331020355225, -3.4303693771362305], + [3.570553779602051, 6.852633953094482], + [-0.3243517279624939, 11.189276695251465], + [-4.898306369781494, -3.593642473220825], + [1.9140092134475708, 5.091121673583984], + [-1.3023664951324463, 6.718445777893066], + [-2.8595163822174072, 0.8209875226020813], + [-7.697453498840332, -1.1010075807571411], + [3.1018741130828857, -4.839885711669922], + [-6.036808490753174, 3.5473692417144775], + [-0.8221291303634644, 9.690237045288086], + [6.8292012214660645, -2.0909929275512695], + [-3.392453193664551, 2.182966470718384], + [-4.7577900886535645, 3.555659055709839], + [-3.388529062271118, 5.861786365509033], + [-5.616823196411133, -1.0574005842208862], + [-1.4182193279266357, 9.901479721069336], + [-0.17109987139701843, -0.8239532709121704], + [-6.28488302230835, 6.638857841491699], + [5.3110575675964355, -1.1986110210418701], + [1.494953989982605, -7.274165153503418], + [-4.367889881134033, 3.841892957687378], + [3.100377321243286, -4.655307769775391], + [-5.9460530281066895, 8.315773010253906], + [-6.0627336502075195, 2.370105266571045], + [5.271493434906006, 7.236065864562988], + [-3.2028136253356934, -1.819933533668518], + [-2.924562692642212, -4.450695991516113], + [-0.9059426188468933, -1.0080631971359253], + [3.1973025798797607, -6.878981590270996], + [1.9804096221923828, -9.315851211547852], + [-2.142139434814453, 0.7986118197441101], + [-5.481969833374023, 6.084975242614746], + [-0.015078015625476837, 10.26086139678955], + [8.835027694702148, -2.4597065448760986], + [6.762772083282471, -2.0914466381073], + [-5.211610317230225, 6.26723575592041], + [-4.338912487030029, 4.225233554840088], + [3.1230416297912598, -5.083671569824219], + [3.0884859561920166, -5.075268268585205], + [1.0544863939285278, -8.224315643310547], + [-5.208923816680908, 2.307018995285034], + [2.6802895069122314, 1.4962283372879028], + [-6.018472194671631, -1.7857083082199097], + [2.9990880489349365, -4.564286231994629], + [-4.606618404388428, 0.0992441177368164], + [-2.1289541721343994, 2.5715644359588623], + [-5.704043865203857, 6.1312994956970215], + [6.441850185394287, -1.4597820043563843], + [8.58430004119873, -2.680640935897827], + [-0.7866694927215576, 9.250242233276367], + [-4.796237945556641, 5.802583694458008], + [-2.9278926849365234, -1.0866609811782837], + [-2.8367435932159424, 2.9310147762298584], + [-2.784310817718506, 2.8685271739959717], + [-4.825218200683594, -2.1564462184906006], + [-1.549214482307434, 5.66068172454834], + [5.5160722732543945, -1.4434939622879028], + [-4.642493724822998, -2.5157248973846436], + [-3.3456335067749023, 4.444359302520752], + [0.8538692593574524, 6.586700439453125], + [-2.4088799953460693, 1.035054087638855], + [-2.7874109745025635, 6.2591094970703125], + [1.5308845043182373, -4.855865955352783], + [-3.4972705841064453, -1.4939851760864258], + [1.102695345878601, 5.265580177307129], + [-3.4282567501068115, 6.633624076843262], + [-2.3143725395202637, 0.13630491495132446], + [-4.920938968658447, -2.8683934211730957], + [-4.390111446380615, -0.7357056140899658], + [0.025734685361385345, -0.9054181575775146], + [-0.5998270511627197, -0.6690995693206787], + [3.0224547386169434, -4.537654876708984], + [-5.186788082122803, 6.161844253540039], + [3.613084554672241, 6.727038383483887], + [-3.286173105239868, 3.5074024200439453], + [-2.6074209213256836, -1.4128111600875854], + [2.751915216445923, -4.580312728881836], + [0.12529361248016357, 10.333962440490723], + [-6.042514801025391, 8.472627639770508], + [-0.6019373536109924, 9.68850326538086], + [3.2254350185394287, -4.8213911056518555], + [0.8026183247566223, 0.1324901282787323], + [-1.4666223526000977, 5.6523942947387695], + [9.487229347229004, -2.6393229961395264], + [-6.5612616539001465, -0.4650470018386841], + [-0.5389313101768494, -1.497045636177063], + [5.377761363983154, -1.7943412065505981], + [-4.159139156341553, 0.7066453695297241], + [2.209969997406006, -6.804497718811035], + [8.381356239318848, -2.512314558029175], + [-0.24032217264175415, 9.892007827758789], + [0.08542536944150925, -0.6095914244651794], + [-2.690509557723999, 1.2305054664611816], + [-0.25565028190612793, 3.784014940261841], + [-3.056365728378296, -1.5810827016830444], + [-5.662389278411865, -1.2868618965148926], + [-4.438051700592041, -3.114290952682495], + [3.162848949432373, -4.771021366119385], + [-0.26406747102737427, 9.97313404083252], + [-6.464436054229736, 7.865900993347168], + [1.0448646545410156, -0.37375444173812866], + [9.153307914733887, -2.4735424518585205], + [2.9425342082977295, -4.926906585693359], + [-5.923126697540283, 5.264440059661865], + [2.0787341594696045, 5.312448501586914], + [2.6318273544311523, 6.148979187011719], + [5.791609287261963, -3.5324504375457764], + [-3.3729989528656006, 4.243942737579346], + [-7.797449588775635, -1.5170066356658936], + [-4.094817161560059, 1.661689043045044], + [-4.233785152435303, -1.210958480834961], + [-6.967414379119873, -1.7572587728500366], + [-0.04129118472337723, -0.1302897036075592], + [-4.816471576690674, 0.1693958044052124], + [0.2286067008972168, -0.4194301962852478], + [-1.0690126419067383, -2.267228126525879], + [2.7868716716766357, -5.551754474639893], + [2.5492355823516846, -3.988978624343872], + [3.249356269836426, -4.907251358032227], + [-4.340564250946045, -1.8537070751190186], + [-4.0310468673706055, -2.7956936359405518], + [-4.595232963562012, 1.7983834743499756], + [-7.046231746673584, -0.4312378168106079], + [1.7478293180465698, 5.341439247131348], + [2.792680263519287, 1.7143499851226807], + [2.229982376098633, -4.621849536895752], + [8.356762886047363, -1.6815680265426636], + [6.555197715759277, -1.410626769065857], + [7.462707042694092, -4.448520183563232], + [-5.810518264770508, 2.612417697906494], + [-2.800671100616455, 6.4840593338012695], + [-5.6042585372924805, 6.184194087982178], + [-4.646697521209717, 6.30115270614624], + [-3.6414294242858887, 3.778468370437622], + [-3.7645633220672607, -1.577573299407959], + [2.634470224380493, 5.6938581466674805], + [-0.14171558618545532, 9.966609001159668], + [1.0167607069015503, -5.88999605178833], + [2.395805597305298, -3.7133305072784424], + [-4.967462062835693, -2.1046009063720703], + [3.2787468433380127, 6.099604606628418], + [-7.48184871673584, 9.069311141967773], + [2.9591901302337646, -4.448652267456055], + [-6.551868915557861, -1.3540185689926147], + [3.2214725017547607, -4.820655345916748], + [1.9184982776641846, 5.333528995513916], + [2.6928441524505615, 0.48025065660476685], + [-5.743967056274414, -1.7714961767196655], + [-4.575761795043945, -3.541581869125366], + [-3.909154176712036, -1.3359087705612183], + [-7.732803821563721, -1.4843933582305908], + [-0.1661558747291565, 10.174173355102539], + [3.0409326553344727, -4.582046985626221], + [-5.5005974769592285, 7.7551727294921875], + [-5.095366954803467, 5.228171348571777], + [2.318746328353882, 5.978045463562012], + [2.746988296508789, -4.347772121429443], + [1.1442515850067139, 5.540344715118408], + [-0.4018593430519104, 10.906105041503906], + [-1.032705545425415, -0.6017429828643799], + [-5.055933475494385, 6.691982269287109], + [-0.2683640122413635, 9.925958633422852], + [-0.5436993837356567, 9.568655014038086], + [-5.049309253692627, -2.282423973083496], + [-5.7689948081970215, -2.1331639289855957], + [-4.382099628448486, -3.2174971103668213], + [0.12343873828649521, -1.8309545516967773], + [1.542214035987854, 5.228261947631836], + [-2.5909736156463623, 2.0087568759918213], + [-1.7104798555374146, 0.6255825757980347], + [-2.6948323249816895, 2.3453917503356934], + [-5.206895351409912, -1.0132275819778442], + [-4.374067783355713, -2.231555461883545], + [2.9353010654449463, -4.5370917320251465], + [-3.486647367477417, 1.3629013299942017], + [-6.8822150230407715, -1.8025732040405273], + [1.8040635585784912, -8.80285930633545], + [5.424952983856201, 7.208050727844238], + [-2.635883331298828, 2.4042320251464844], + [1.6336336135864258, -3.0251574516296387], + [-2.138744831085205, 2.17984938621521], + [-0.43707579374313354, 11.001468658447266], + [-0.38466590642929077, 9.899561882019043], + [-4.085612773895264, -1.6634724140167236], + [-0.5464393496513367, 12.010543823242188], + [2.02382230758667, -4.946163177490234], + [-4.598419666290283, -2.7139968872070312], + [4.8896942138671875, -2.634397268295288], + [-7.440474987030029, 9.339714050292969], + [-3.4988019466400146, -2.7112276554107666], + [0.06763904541730881, -0.2825267016887665], + [6.688769340515137, -1.8228594064712524], + [7.356517791748047, -4.044536113739014], + [-5.309305667877197, -3.3890421390533447], + [-2.0311083793640137, 1.3955357074737549], + [2.551811456680298, 1.0035048723220825], + [-2.339859962463379, -0.839613676071167], + [-4.75536584854126, -0.9888055324554443], + [-3.868543863296509, 3.3859503269195557], + [-5.775645732879639, -2.663773536682129], + [-4.993223667144775, -3.9350712299346924], + [-3.8195414543151855, -0.34849071502685547], + [-8.116793632507324, -0.6886031627655029], + [-5.384373188018799, -1.8404581546783447], + [2.8416802883148193, -4.545584201812744], + [-7.1306681632995605, 8.194539070129395], + [2.329862356185913, -6.72303581237793], + [-1.9061440229415894, 1.4173917770385742], + [2.524498462677002, 0.9843617677688599], + [0.6187437772750854, -5.371331691741943], + [3.3564205169677734, -5.003661632537842], + [0.745148241519928, -5.111794471740723], + [-5.446388244628906, 1.6211246252059937], + [-6.962409973144531, 3.5641677379608154], + [8.815751075744629, -2.4750051498413086], + [-4.769159317016602, -1.3577800989151], + [-4.05986213684082, -4.834726333618164], + [-6.952132701873779, -2.1130316257476807], + [-4.5387282371521, -3.6572582721710205], + [1.3029061555862427, -6.863752365112305], + [1.1264326572418213, -3.2695624828338623], + [-5.154436111450195, 6.261594772338867], + [1.1168830394744873, -7.806467533111572], + [0.5024077892303467, 4.925537586212158], + [-4.803723335266113, -3.117694854736328], + [0.7233522534370422, 5.557063102722168], + [-5.737011432647705, 1.3747566938400269], + [1.2549092769622803, -7.198741912841797], + [7.740795135498047, -2.047668933868408], + [-3.524751901626587, -1.1602461338043213], + [-5.174313068389893, 1.9053289890289307], + [-7.3160319328308105, 8.880720138549805], + [-6.492541790008545, -2.1299567222595215], + [6.526501178741455, -3.013012170791626], + [7.468588352203369, -1.8512495756149292], + [6.336868762969971, -3.494631290435791], + [-5.5894622802734375, -2.614928960800171], + [-4.391155242919922, 6.693942546844482], + [-5.410908222198486, 7.167185306549072], + [-3.5452985763549805, -2.709216356277466], + [-6.409783363342285, -2.151636838912964], + [5.8059563636779785, -4.768601417541504], + [-5.448145866394043, 5.811700820922852], + [-2.4677278995513916, 1.7467687129974365], + [2.176192045211792, -7.324106216430664], + [0.1384216547012329, -2.219682216644287], + [2.482327461242676, -2.591888666152954], + [2.714590311050415, 5.170738697052002], + [2.232908010482788, -5.223721027374268], + [-2.162529230117798, 3.1790244579315186], + [2.270991563796997, 0.7233768701553345], + [-4.681563854217529, -2.249567747116089], + [-0.40125495195388794, 10.326484680175781], + [2.964280366897583, -4.50498104095459], + [-5.554558277130127, 2.3454298973083496], + [-0.27497488260269165, 9.695589065551758], + [2.8817408084869385, 5.434268951416016], + [6.232986927032471, -1.078075885772705], + [-5.325008869171143, -3.2566134929656982], + [-1.0216957330703735, 5.531300067901611], + [-2.6250298023223877, 3.5288028717041016], + [8.975581169128418, -2.398857831954956], + [-4.444836139678955, -1.1152043342590332], + [-0.8130795359611511, 9.653302192687988], + [-4.9665961265563965, -3.511784553527832], + [-2.2703921794891357, 6.376474380493164], + [2.1925806999206543, 5.009179592132568], + [-3.9614200592041016, -0.21113979816436768], + [-2.948681592941284, -0.20066332817077637], + [-5.7070207595825195, 7.0337605476379395], + [-1.5210638046264648, 10.71269416809082], + [0.4016878008842468, 9.98261833190918], + [9.35807991027832, -2.5951762199401855], + [-5.6821370124816895, -2.862098217010498], + [6.136105060577393, -1.3099766969680786], + [2.8623178005218506, -5.341562271118164], + [2.964254140853882, -4.793239593505859], + [-5.1739702224731445, 3.1477200984954834], + [4.76778507232666, 7.316518783569336], + [-5.802155494689941, -2.503225088119507], + [-7.008678913116455, 8.659381866455078], + [3.103292942047119, 5.599620819091797], + [-0.4659731984138489, 9.363899230957031], + [-6.812368869781494, -1.9702438116073608], + [-3.9955217838287354, -1.5552607774734497], + [-5.435262203216553, 7.610757827758789], + [1.7687361240386963, -3.324469804763794], + [-2.1521525382995605, 2.349916934967041], + [1.1410870552062988, -6.065217018127441], + [1.7227051258087158, -5.6733293533325195], + [-3.3102495670318604, 1.4803798198699951], + [-0.028582222759723663, 9.701741218566895], + [2.1879093647003174, -4.948355674743652], + [-0.2526041865348816, 9.787151336669922], + [-4.582479953765869, -3.325575113296509], + [2.8519532680511475, -4.938080787658691], + [-6.676489353179932, -1.4115034341812134], + [-3.2326033115386963, 1.4603818655014038], + [-4.067805767059326, -4.3585662841796875], + [-5.41115140914917, -3.3541452884674072], + [-4.98970890045166, -4.317956924438477], + [-3.592355489730835, 5.039551258087158], + [-3.214669942855835, -3.961487293243408], + [7.833187580108643, -2.217770576477051], + [5.624981880187988, -1.7049214839935303], + [-2.025336742401123, 2.747666120529175], + [-3.168260335922241, -2.370227098464966], + [-5.700474262237549, -5.353686332702637], + [-2.119880437850952, 2.387803077697754], + [-2.3457794189453125, 1.1782335042953491], + [-5.100815773010254, -2.2523086071014404], + [-0.33635133504867554, 10.315736770629883], + [-7.549604892730713, -1.2240523099899292], + [-5.63277530670166, 3.003005266189575], + [-8.194541931152344, 0.7894295454025269], + [-4.119691371917725, -3.9943230152130127], + [4.227659225463867, -3.2049691677093506], + [2.640559434890747, -7.121686935424805], + [3.317983388900757, 6.470180511474609], + [-7.189418315887451, -1.3625882863998413], + [-5.162391185760498, -5.479861259460449], + [9.14818000793457, -2.59838604927063], + [6.735349178314209, 8.255599975585938], + [0.24461030960083008, 10.115058898925781], + [5.98451042175293, -1.8222674131393433], + [-2.4368650913238525, 2.274524450302124], + [-7.753230571746826, -1.9032294750213623], + [1.2586191892623901, 0.44678354263305664], + [6.6305623054504395, -1.5659657716751099], + [-3.700531244277954, 4.008657455444336], + [2.997746706008911, -4.740060806274414], + [3.188133955001831, -4.683230400085449], + [-0.20458143949508667, 10.128929138183594], + [6.86478853225708, -2.45440936088562], + [-0.36514919996261597, -0.7061758041381836], + [1.3499608039855957, 4.195906639099121], + [1.0083239078521729, 5.846789836883545], + [-2.2670915126800537, 1.3442354202270508], + [-5.267061710357666, -3.1462223529815674], + [8.070510864257812, -2.0211246013641357], + [-5.0237345695495605, -2.5710439682006836], + [-4.282953262329102, -2.4276766777038574], + [-5.716721057891846, 4.533027172088623], + [-5.585287094116211, 3.3008131980895996], + [5.871470928192139, -4.225779056549072], + [-3.299842596054077, -3.2090117931365967], + [-0.21804115176200867, -0.27705925703048706], + [-4.953625679016113, -1.6401525735855103], + [-2.9276516437530518, -2.80423641204834], + [-2.8624355792999268, -4.137847900390625], + [-5.949977397918701, -1.0036492347717285], + [-0.38634294271469116, 8.855524063110352], + [-5.0148162841796875, -3.9242286682128906], + [2.556225538253784, -4.132297515869141], + [3.1215336322784424, -4.975656032562256], + [3.978656053543091, -3.771575450897217], + [-4.350369930267334, 5.5982561111450195], + [-0.06257746368646622, -0.48060697317123413], + [2.349226236343384, -3.601524591445923], + [0.58186274766922, 5.661352157592773], + [-1.8274542093276978, 0.8879892230033875], + [-2.2888829708099365, 1.8075807094573975], + [-6.94084358215332, -1.942807674407959], + [-0.15089595317840576, 10.14534854888916], + [8.624865531921387, -2.3335630893707275], + [-2.4025931358337402, 0.824002742767334], + [-0.26176905632019043, 9.310038566589355], + [-0.2219523787498474, 9.65774154663086], + [0.6071298718452454, -1.1498156785964966], + [9.474246978759766, -2.626677989959717], + [-0.25037556886672974, 10.092838287353516], + [3.1340649127960205, -4.847720623016357], + [2.509587287902832, -3.7131094932556152], + [-5.110373020172119, -0.34328967332839966], + [-0.6164665222167969, 9.17381477355957], + [-4.445337772369385, -3.459587812423706], + [-2.0475714206695557, 2.6535050868988037], + [6.798293590545654, -1.8695236444473267], + [2.4402387142181396, -5.919030666351318], + [-2.308061122894287, 0.722885251045227], + [-1.8100111484527588, -1.5969046354293823], + [1.2813128232955933, 5.256108283996582], + [0.9779655337333679, 5.204789161682129], + [2.05379319190979, 5.587696552276611], + [-0.17617136240005493, 10.48043155670166], + [-4.7938337326049805, -3.87488055229187], + [-0.339472234249115, -1.516013741493225], + [2.163207769393921, 5.619146823883057], + [-0.35704904794692993, 10.811903953552246], + [0.1532948911190033, -0.20652708411216736], + [-2.021207332611084, 1.5026990175247192], + [0.5443403720855713, -0.36224186420440674], + [-3.3922345638275146, -3.2074050903320312], + [1.945631742477417, 2.6146371364593506], + [-8.62606143951416, -1.0114902257919312], + [-3.2652642726898193, -1.9077750444412231], + [-0.7620700001716614, -2.0778236389160156], + [-5.741572856903076, 3.340045928955078], + [-3.2104337215423584, 1.2604422569274902], + [1.8730120658874512, -8.420886993408203], + [-4.398960590362549, 7.077504634857178], + [-0.253628134727478, 10.007242202758789], + [-5.193943023681641, -4.636320114135742], + [-4.810582637786865, -1.737777829170227], + [-2.7156128883361816, -1.9129385948181152], + [-3.4825403690338135, -1.2872284650802612], + [-5.589112758636475, -2.5096471309661865], + [-7.165446758270264, -1.552358865737915], + [-4.700870513916016, 3.6819002628326416], + [6.286961078643799, -5.514742851257324], + [1.9203474521636963, -9.232388496398926], + [-6.013767242431641, 4.2727742195129395], + [3.8620171546936035, 6.795007705688477], + [-5.302463054656982, -1.943837285041809], + [-3.364751100540161, -1.4410499334335327], + [-1.2399617433547974, 1.3498035669326782], + [-2.230412721633911, 2.371055841445923], + [-4.95293664932251, 7.421235084533691], + [8.464483261108398, -3.0605499744415283], + [6.788054943084717, -2.015587568283081], + [-0.7527917623519897, -1.2054017782211304], + [-0.2533823251724243, -0.4164959490299225], + [-1.7365400791168213, 5.552029609680176], + [5.869703769683838, -1.260079026222229], + [2.713524103164673, -4.298047065734863], + [4.824280738830566, -1.1103558540344238], + [-5.053755283355713, -0.6087678670883179], + [6.3529462814331055, -1.3752479553222656], + [-5.9362359046936035, -1.6065176725387573], + [-3.549236536026001, 5.943859100341797], + [-4.894627094268799, 7.182211399078369], + [6.6405463218688965, -1.8393326997756958], + [0.2809177339076996, -0.7838563919067383], + [-3.126447916030884, -0.5631057024002075], + [8.468443870544434, -2.493901491165161], + [-0.12110794335603714, 0.692724347114563], + [10.11830997467041, -2.7996599674224854], + [4.31333589553833, 7.077736854553223], + [3.1075546741485596, -4.707389831542969], + [-5.181766033172607, -2.93465256690979], + [2.3916001319885254, -4.974940776824951], + [-4.28379487991333, 3.515099048614502], + [-0.5354465842247009, -0.8762428760528564], + [-0.28046512603759766, 10.47794246673584], + [2.8422467708587646, -4.385062217712402], + [-6.303298473358154, -2.200880527496338], + [-2.91827654838562, 5.652448654174805], + [1.6901503801345825, 5.480324745178223], + [-5.926432132720947, -2.2441859245300293], + [-4.742185592651367, -4.2673187255859375], + [3.67112135887146, -6.206934928894043], + [-4.495812892913818, -2.8567206859588623], + [9.841811180114746, -2.742940664291382], + [-0.730656087398529, 5.256918430328369], + [-0.2369939684867859, 9.804678916931152], + [-5.282341480255127, 5.480712413787842], + [5.4652533531188965, -1.7828444242477417], + [-0.45142027735710144, -1.2795895338058472], + [-6.902144908905029, -2.279449701309204], + [3.1201229095458984, -6.841346740722656], + [-4.3701043128967285, -2.7353720664978027], + [-5.408483982086182, -2.907316207885742], + [2.6259326934814453, 4.667569160461426], + [-1.8054044246673584, 2.1863603591918945], + [-2.2150070667266846, 0.8935993909835815], + [0.061516277492046356, 10.441943168640137], + [-2.222621440887451, 2.105051040649414], + [6.5006422996521, -3.6540918350219727], + [-5.989588260650635, -1.2171128988265991], + [-2.4447972774505615, 1.7639421224594116], + [-6.0202460289001465, -2.479212522506714], + [-0.32098594307899475, -0.9313515424728394], + [-0.4835929274559021, 9.683402061462402], + [-0.1620941162109375, 9.725513458251953], + [2.925912618637085, -4.518478870391846], + [3.0232772827148438, -4.545236587524414], + [-2.846386194229126, -3.8435659408569336], + [-6.781282901763916, 3.9872629642486572], + [-3.394085168838501, -1.5888956785202026], + [2.6590301990509033, -4.003619194030762], + [6.684141159057617, -1.999826431274414], + [-2.6071863174438477, -3.636708974838257], + [0.053111784160137177, 9.904951095581055], + [-2.7659265995025635, -2.561439275741577], + [-6.225381374359131, 8.057233810424805], + [-6.215933799743652, -2.3298096656799316], + [-2.125311851501465, -1.3558281660079956], + [-4.732028484344482, -3.2855284214019775], + [-6.09456205368042, 2.5354115962982178], + [-4.530932903289795, 5.594597339630127], + [-4.991482257843018, -2.760533094406128], + [8.231005668640137, -2.429044723510742], + [-2.464949131011963, -1.6662015914916992], + [-5.898358345031738, -1.6084576845169067], + [-0.20362430810928345, 9.93804931640625], + [-5.363753318786621, -3.2023274898529053], + [2.3842225074768066, -3.9873485565185547], + [3.270202398300171, -4.881783485412598], + [-0.5448954105377197, 9.01932144165039], + [7.825547695159912, -2.0072388648986816], + [1.198893666267395, -6.402346611022949], + [-6.479586601257324, -0.5821800231933594], + [-0.32642537355422974, 10.21368408203125], + [0.9002553224563599, -6.908353805541992], + [6.53463888168335, -1.903152585029602], + [-4.9927754402160645, -2.5174357891082764], + [-4.819186687469482, 2.74212908744812], + [-2.471778154373169, 0.6587289571762085], + [10.15649700164795, -2.8301949501037598], + [-0.39187222719192505, 10.16737174987793], + [-2.9305436611175537, -3.9610698223114014], + [-5.408951282501221, 4.148151874542236], + [-0.46885377168655396, 10.890092849731445], + [-4.2583537101745605, -3.5267579555511475], + [-4.990975856781006, -3.3003177642822266], + [-5.501206874847412, 3.1847894191741943], + [-5.470695972442627, -3.8499646186828613], + [-2.274488687515259, 1.0809898376464844], + [7.528762340545654, -1.6267144680023193], + [-0.3854530453681946, 10.879659652709961], + [2.690539598464966, -5.869129180908203], + [1.8044960498809814, 4.00479793548584], + [-5.688028812408447, -2.2602956295013428], + [-2.3354289531707764, 2.494663953781128], + [1.0203890800476074, -6.619072914123535], + [-3.9241063594818115, -1.7116034030914307], + [-0.5349177122116089, -1.4207576513290405], + [-2.527714490890503, -0.6874874830245972], + [-2.77866530418396, 1.8452415466308594], + [-0.8149071335792542, 10.02293586730957], + [1.5435047149658203, 0.41274064779281616], + [-0.9098884463310242, 8.540315628051758], + [-6.047705173492432, -0.9593557715415955], + [-4.501385688781738, 5.46201229095459], + [8.57393741607666, -2.2728893756866455], + [3.022705316543579, -4.376148223876953], + [-0.49425244331359863, -0.8468547463417053], + [0.013371400535106659, 10.113262176513672], + [-5.6330246925354, 7.985965728759766], + [3.052851676940918, -4.933861255645752], + [-1.677734613418579, -3.176159381866455], + [8.641450881958008, -2.430760622024536], + [-0.6668111681938171, 9.937873840332031], + [-4.020601272583008, -2.378173351287842], + [-7.195263385772705, -1.7788286209106445], + [3.1846604347229004, -4.942963600158691], + [8.861557960510254, -2.5826964378356934], + [-0.906393826007843, 9.466962814331055], + [-5.241525173187256, 2.879005193710327], + [3.1886093616485596, -5.112738609313965], + [-3.0662732124328613, 2.767564535140991], + [-0.7717636823654175, 5.887284278869629], + [1.206702470779419, 1.6046802997589111], + [-7.0639214515686035, -1.7924996614456177], + [-1.2953839302062988, 1.839241862297058], + [3.060678243637085, 5.688365936279297], + [1.4639322757720947, -5.7005815505981445], + [-0.4831574261188507, -0.6082828044891357], + [9.421479225158691, -2.540138006210327], + [1.7839510440826416, 5.000504016876221], + [4.081419467926025, 6.775193691253662], + [-4.483822822570801, -0.8626523017883301], + [-4.82689905166626, -2.5482916831970215], + [-7.233598232269287, -1.1445274353027344], + [-3.530963659286499, 6.395756721496582], + [0.5262375473976135, 0.3753235638141632], + [-0.29588764905929565, 9.272119522094727], + [-0.3733507990837097, 10.16512680053711], + [-4.672693729400635, -0.21342337131500244], + [-1.801542043685913, 2.2569544315338135], + [2.168867826461792, -4.252975940704346], + [-2.531999111175537, 2.736342191696167], + [0.23230215907096863, -4.611039638519287], + [-4.8575921058654785, -3.8576252460479736], + [-4.025559425354004, 5.7089433670043945], + [-2.3026084899902344, 6.680019378662109], + [2.892817258834839, -4.55526065826416], + [-3.9846317768096924, -1.8397184610366821], + [2.192556381225586, 5.6705427169799805], + [2.3604471683502197, 4.3358025550842285], + [2.7885143756866455, 6.171146392822266], + [-2.103109121322632, 0.5304490327835083], + [1.7035393714904785, -8.155937194824219], + [-4.300454139709473, 3.79176926612854], + [-4.013016223907471, 2.8798911571502686], + [-5.6730475425720215, -2.302879810333252], + [-3.395800828933716, -3.3684751987457275], + [-4.102944850921631, -1.4876128435134888], + [8.430925369262695, -3.0792236328125], + [-6.812010765075684, -0.32688581943511963], + [-2.9293832778930664, 3.638054132461548], + [-4.890669822692871, -2.7605178356170654], + [-3.903958559036255, 8.31239128112793], + [2.445042610168457, -8.188066482543945], + [-2.1151726245880127, 0.15942317247390747], + [-0.3807752728462219, 9.36947250366211], + [-6.244001865386963, 4.960901737213135], + [-3.4931952953338623, -2.196789503097534], + [-2.2601046562194824, 2.903351306915283], + [8.627266883850098, -2.41726016998291], + [1.9015849828720093, -3.616375207901001], + [-2.7842555046081543, 4.981423854827881], + [1.3974485397338867, 5.407954216003418], + [3.1985080242156982, -4.78935432434082], + [-5.135849475860596, 6.869597911834717], + [-5.7324652671813965, 1.319013237953186], + [-0.3461281657218933, 10.549304962158203], + [-0.18059512972831726, -0.5658000707626343], + [1.9883201122283936, -8.21789836883545], + [2.6255218982696533, 0.6477760076522827], + [2.0819199085235596, -8.449302673339844], + [2.9136011600494385, -4.730463027954102], + [-3.751777410507202, -3.15051007270813], + [-4.675683498382568, -2.715026378631592], + [-2.976850986480713, -0.3886837959289551], + [-9.024688720703125, -1.1506725549697876], + [-3.9132704734802246, -1.2258957624435425], + [-6.642239093780518, 8.082108497619629], + [-0.300768107175827, -1.1379656791687012], + [-2.0186028480529785, 2.75410532951355], + [6.993235111236572, -1.459902286529541], + [2.7216107845306396, -4.453179359436035], + [-0.9555298089981079, -1.15829598903656], + [1.723865270614624, -4.883601188659668], + [-6.8927531242370605, -1.1608554124832153], + [-2.1693081855773926, 1.2884374856948853], + [-4.185079097747803, -1.6427170038223267], + [-2.6270694732666016, -4.924840450286865], + [7.080833911895752, -3.5635595321655273], + [-0.043879009783267975, -2.4417247772216797], + [3.000441789627075, -4.688950538635254], + [3.0767040252685547, 5.981820106506348], + [1.8248071670532227, -4.3797407150268555], + [-4.650569438934326, -0.12170106172561646], + [3.092996597290039, -5.008709907531738], + [-0.28588324785232544, 10.252363204956055], + [-5.6831583976745605, 4.224853992462158], + [-2.423369884490967, 1.2118241786956787], + [2.0327301025390625, -4.487978935241699], + [6.152085304260254, -2.312225341796875], + [-0.918689489364624, -1.1630858182907104], + [-5.78604793548584, 4.222485065460205], + [2.4654290676116943, -3.7970328330993652], + [2.750044107437134, -6.823054313659668], + [8.48310661315918, -2.3212156295776367], + [1.268150806427002, 1.661633014678955], + [-6.5180344581604, 6.341697692871094], + [-5.224379539489746, 4.622408390045166], + [-3.277585983276367, 5.424015998840332], + [3.856675386428833, -1.7183538675308228], + [-4.891261100769043, -1.8214774131774902], + [-5.319535732269287, -4.336029052734375], + [0.6696091294288635, 5.181523323059082], + [2.4358088970184326, -3.818532943725586], + [-5.412281513214111, -4.466117858886719], + [-5.049046516418457, -3.380042314529419], + [2.188263177871704, -4.900224208831787], + [2.289787530899048, -6.119757652282715], + [1.5211390256881714, -1.5565298795700073], + [-6.244063854217529, 7.251081943511963], + [3.149073839187622, -4.94697904586792], + [-5.165611743927002, -3.467283248901367], + [6.128611087799072, -2.7677230834960938], + [0.7252402901649475, -6.337647914886475], + [8.628429412841797, -2.459697961807251], + [-5.244823932647705, -2.24580979347229], + [-4.843100547790527, 0.5244276523590088], + [-3.1643831729888916, -1.9523396492004395], + [-3.099581003189087, 4.544467449188232], + [-2.8601577281951904, -0.012111607939004898], + [-4.182654857635498, -1.9258257150650024], + [3.159482717514038, -4.738452911376953], + [2.919607639312744, -4.4101409912109375], + [-4.031888008117676, 5.438982963562012], + [-6.675943851470947, -2.220245122909546], + [-2.131024122238159, 2.181490659713745], + [-4.902703762054443, -0.21867084503173828], + [0.5125281810760498, -1.2439285516738892], + [-2.3662447929382324, 0.8708981275558472], + [6.404326915740967, -1.8735607862472534], + [3.761643648147583, 6.149749755859375], + [-2.5826008319854736, 2.2020680904388428], + [4.763357162475586, 7.328218460083008], + [1.4146122932434082, 5.497492790222168], + [-5.7484517097473145, 2.3347692489624023], + [3.074524402618408, -4.611884593963623], + [2.497682571411133, 6.177433013916016], + [-0.4607876241207123, -0.9945330023765564], + [-3.6893491744995117, -4.212246894836426], + [-6.443215847015381, 8.025614738464355], + [-8.489655494689941, -0.865875244140625], + [-5.152583599090576, -1.9085463285446167], + [5.665609836578369, -1.180771827697754], + [-5.29429292678833, -3.583751916885376], + [3.3499269485473633, -0.5994154214859009], + [-4.068365573883057, -3.8633735179901123], + [5.1459527015686035, -2.3836731910705566], + [3.151298761367798, -2.2770543098449707], + [-3.6936075687408447, -4.613855361938477], + [-2.6539924144744873, 2.027461528778076], + [-2.4390103816986084, 1.9676200151443481], + [6.038427352905273, 7.506579875946045], + [-2.4131553173065186, 1.7260146141052246], + [-4.324952602386475, 6.925393104553223], + [-5.0745415687561035, 5.2718892097473145], + [2.9582526683807373, -4.450051784515381], + [-8.701602935791016, -0.7930985689163208], + [-5.0201029777526855, -2.9762251377105713], + [-4.2881388664245605, -2.2748405933380127], + [1.5637532472610474, 2.3368711471557617], + [3.2479262351989746, -5.12424373626709], + [-4.8828206062316895, 7.066648483276367], + [9.151582717895508, -2.5760719776153564], + [-2.1660549640655518, 2.6107075214385986], + [-2.3995189666748047, 2.5509259700775146], + [-6.181268215179443, -2.950716257095337], + [3.155958414077759, 1.0017786026000977], + [2.1914312839508057, -7.579164505004883], + [8.201873779296875, -2.4145708084106445], + [1.5992801189422607, -7.045132637023926], + [0.3385051488876343, -1.0133429765701294], + [7.107236385345459, -2.3815553188323975], + [2.585625648498535, 6.505719184875488], + [8.421669006347656, -3.17314076423645], + [2.1039888858795166, -4.966576099395752], + [-0.4636048674583435, 10.85966968536377], + [-4.52365779876709, -3.602180242538452], + [-2.858902931213379, -0.8729224801063538], + [-0.6212748289108276, -1.1743243932724], + [3.324322462081909, -4.96265983581543], + [1.086063027381897, -6.20444917678833], + [1.6663601398468018, 5.096906661987305], + [-7.03948974609375, -1.897354006767273], + [-5.033107280731201, -2.950943946838379], + [-2.584683656692505, -2.686607599258423], + [-3.221031904220581, -1.1576677560806274], + [-2.5406315326690674, 2.2232987880706787], + [-5.265618801116943, 8.019489288330078], + [-2.407212972640991, 1.4246580600738525], + [3.777754068374634, 6.30903434753418], + [-4.750678062438965, -1.8138352632522583], + [6.710528373718262, -1.946534514427185], + [-2.177417755126953, 2.653479814529419], + [2.768371343612671, -7.043878078460693], + [1.4815120697021484, -4.318668842315674], + [-2.463306188583374, -2.943099021911621], + [0.7730041742324829, -6.049419403076172], + [0.7642338871955872, -5.11472225189209], + [-6.710017681121826, -1.7002602815628052], + [8.931315422058105, -2.5297436714172363], + [-4.882259845733643, -3.16634202003479], + [-1.3255383968353271, 1.5993539094924927], + [5.238863468170166, -1.00545334815979], + [-5.503780364990234, 1.9218721389770508], + [-8.661741256713867, -0.8236831426620483], + [2.02558970451355, 1.09342622756958], + [2.326601505279541, -4.022365093231201], + [-8.092297554016113, -1.5036499500274658], + [7.8242363929748535, -1.8422913551330566], + [-7.9240641593933105, -1.3163343667984009], + [-5.4267191886901855, -2.388352870941162], + [3.0875086784362793, -4.770086765289307], + [2.353198766708374, -3.83939528465271], + [2.946899652481079, -4.340782165527344], + [3.717846155166626, 6.994950771331787], + [-6.081542015075684, 7.370838642120361], + [7.917944431304932, -2.1238715648651123], + [-4.9217071533203125, -2.2267706394195557], + [-5.835037708282471, -2.5057504177093506], + [-5.852220058441162, 6.188817977905273], + [-1.1834120750427246, -1.4170267581939697], + [0.011666618287563324, -1.1630157232284546], + [-1.16250741481781, -0.9206720590591431], + [1.9200401306152344, 5.458652496337891], + [-5.7734856605529785, -1.5455818176269531], + [-5.794096946716309, -2.7745320796966553], + [2.7962024211883545, -4.348409175872803], + [-2.515065908432007, 2.242828607559204], + [1.9573943614959717, -8.271866798400879], + [-4.73734188079834, 6.194250106811523], + [1.2482050657272339, 0.7963402271270752], + [-3.6229476928710938, -1.6590853929519653], + [2.2046942710876465, -3.8991544246673584], + [5.683787822723389, -2.3174326419830322], + [-4.62897253036499, -0.6517854332923889], + [-5.977510929107666, 4.29837703704834], + [3.0415499210357666, -5.439157962799072], + [1.4795432090759277, -5.775810241699219], + [5.356093883514404, -5.280946731567383], + [-5.379621982574463, -3.401404619216919], + [-2.0129659175872803, 1.3667773008346558], + [7.791767120361328, -2.459974527359009], + [8.422735214233398, -2.298553705215454], + [1.3462648391723633, 5.044792175292969], + [-1.3021007776260376, 0.4144148826599121], + [-5.80496072769165, -3.3934743404388428], + [-0.1853589415550232, 9.563876152038574], + [-1.9379873275756836, 1.3288122415542603], + [0.6541153192520142, -0.12211845815181732], + [-0.2690122127532959, 9.347431182861328], + [-0.006494708359241486, 9.34061050415039], + [-0.44938719272613525, -3.5919992923736572], + [-4.101731777191162, -1.531716227531433], + [2.0858347415924072, 5.859541893005371], + [2.8158466815948486, -6.112393379211426], + [-1.0001699924468994, 10.447616577148438], + [3.1207151412963867, -4.923862457275391], + [7.405083179473877, -2.3975348472595215], + [-0.306084543466568, -1.2792199850082397], + [-1.9242526292800903, -0.9517216682434082], + [0.5200955867767334, 4.932076930999756], + [-4.543209552764893, -2.2851545810699463], + [4.430787086486816, 6.709263801574707], + [2.620290517807007, -2.2848916053771973], + [2.054971933364868, 0.5812407732009888], + [5.120453357696533, -5.8957743644714355], + [-0.2555611729621887, 10.18190860748291], + [-0.35483914613723755, 11.049747467041016], + [2.004744291305542, 2.588454484939575], + [6.0374836921691895, -1.93793785572052], + [-5.682455539703369, -1.9849319458007812], + [0.3517024517059326, 0.11795303225517273], + [3.1815826892852783, -4.835906982421875], + [1.613021731376648, -6.025707244873047], + [0.41060125827789307, 0.3827991783618927], + [-0.5066365599632263, 8.169374465942383], + [2.9201433658599854, -4.730903625488281], + [6.916743755340576, -1.7202489376068115], + [3.174152135848999, -4.840862274169922], + [-6.454652786254883, -1.993094801902771], + [1.9417450428009033, -6.804292678833008], + [4.79356575012207, 7.640072822570801], + [8.174749374389648, -2.4329020977020264], + [8.705619812011719, -2.426997661590576], + [6.325464725494385, -3.330822706222534], + [3.1524620056152344, -4.721467971801758], + [-5.333956718444824, -3.2175209522247314], + [-1.5792897939682007, 1.164718508720398], + [1.9809503555297852, -9.091617584228516], + [-6.505842208862305, 8.215946197509766], + [8.345972061157227, -2.411907911300659], + [-5.160506248474121, -1.7373813390731812], + [1.4081029891967773, -7.746950149536133], + [7.607014179229736, -1.376108169555664], + [-2.6312220096588135, 2.8554019927978516], + [4.883751392364502, -0.8364009261131287], + [-2.12178111076355, 2.787834882736206], + [-4.126212120056152, -2.386810064315796], + [-0.5216773748397827, -0.9055817127227783], + [2.9159202575683594, -4.664577484130859], + [-5.265834808349609, -4.1459527015686035], + [-4.7425665855407715, -3.157114028930664], + [1.2933053970336914, -7.010215759277344], + [-4.482977867126465, 0.5005813241004944], + [7.910017490386963, -2.475964307785034], + [-5.208193302154541, -1.9789365530014038], + [-5.055382251739502, -3.1453752517700195], + [0.7897511720657349, 5.721073150634766], + [-6.302000522613525, 9.031455993652344], + [-7.893934726715088, -0.9340699911117554], + [1.4713637828826904, 3.775003671646118], + [-1.9392414093017578, 1.68772554397583], + [-0.47332972288131714, 9.460006713867188], + [8.422160148620605, -2.597019672393799], + [-4.360495090484619, -1.373193383216858], + [-0.25540250539779663, 9.910888671875], + [0.48900866508483887, -0.04911856725811958], + [-0.352356493473053, 10.613240242004395], + [-2.3105990886688232, 2.344210386276245], + [2.40669584274292, -4.257301330566406], + [-4.676976203918457, -3.558292865753174], + [-4.4528889656066895, -4.406403541564941], + [3.8601138591766357, -6.361684322357178], + [-4.638443946838379, -1.2344506978988647], + [-4.3162946701049805, 1.3723708391189575], + [0.5689799785614014, -5.8747663497924805], + [-4.2681732177734375, 6.159466743469238], + [3.0351850986480713, -4.794580936431885], + [-4.470938682556152, -1.1465097665786743], + [2.263033151626587, -7.479806423187256], + [1.7542884349822998, -3.2358882427215576], + [-0.23753881454467773, -1.2866331338882446], + [-2.660771608352661, 2.072613477706909], + [2.5750887393951416, -5.31804084777832], + [7.0745954513549805, -1.8562670946121216], + [-4.7584662437438965, -3.380457878112793], + [-1.9513640403747559, -3.844066858291626], + [-4.023605823516846, 0.6777084469795227], + [-3.6595327854156494, -1.5751968622207642], + [-5.05364465713501, -1.7771567106246948], + [-4.872919082641602, 4.756952285766602], + [1.677945613861084, -8.303783416748047], + [-6.9364495277404785, 8.40261459350586], + [-6.548523902893066, 2.808215856552124], + [9.44967269897461, -2.6345932483673096], + [2.708111524581909, -5.995516300201416], + [2.1839587688446045, 5.460141181945801], + [2.970302104949951, -4.5964741706848145], + [-6.983021259307861, -1.8733243942260742], + [-3.7528092861175537, -2.8805325031280518], + [1.8963539600372314, 5.566071033477783], + [-1.1922656297683716, 6.0180816650390625], + [2.9332916736602783, -4.520228862762451], + [-6.65647554397583, -1.8110986948013306], + [-5.107020854949951, 6.011935710906982], + [-4.034280776977539, -2.4473156929016113], + [-4.032098293304443, -4.830429553985596], + [2.378438949584961, -6.996428489685059], + [3.3611257076263428, -5.011835098266602], + [0.7855965495109558, -0.08056400716304779], + [-5.385352611541748, -2.153784990310669], + [-5.911561489105225, 7.3917765617370605], + [-2.5579259395599365, -0.703564465045929], + [-4.571768283843994, 3.174652338027954], + [0.6601876616477966, 9.593201637268066], + [-0.2784321904182434, 9.571702003479004], + [-2.669997215270996, 6.873946189880371], + [3.717278003692627, -7.156818866729736], + [-4.738781452178955, 6.442686557769775], + [5.6737141609191895, 7.808621406555176], + [-7.351085186004639, -0.7717600464820862], + [2.022692918777466, 0.968194842338562], + [1.8246831893920898, -5.961154460906982], + [-2.1089138984680176, 2.439800500869751], + [-6.611807346343994, -1.7126877307891846], + [-2.648669481277466, -1.0454148054122925], + [-0.211253821849823, 5.8061347007751465], + [0.8995395302772522, -0.2735019028186798], + [-5.796029567718506, 2.8580105304718018], + [2.9525067806243896, -4.25954532623291], + [-3.659797430038452, -3.583176612854004], + [2.321176290512085, -5.774662971496582], + [-3.1263298988342285, -3.927938461303711], + [-5.073803424835205, -1.3376678228378296], + [-3.271301507949829, 2.738485336303711], + [-6.969979763031006, 8.399158477783203], + [2.024545907974243, -5.1365251541137695], + [7.477819919586182, -1.7196582555770874], + [2.163053035736084, 1.9217323064804077], + [-4.802022457122803, -1.319859266281128], + [-6.146317958831787, -2.0458896160125732], + [-2.889495849609375, 5.731594085693359], + [-4.987234115600586, -1.0817281007766724], + [2.5492358207702637, 0.776925802230835], + [-2.016807794570923, 2.4921531677246094], + [-5.7567524909973145, 6.87484073638916], + [-2.228464126586914, 1.2217265367507935], + [-3.4196159839630127, 6.128835201263428], + [-5.498635768890381, -3.4162638187408447], + [0.5816884636878967, -1.0598896741867065], + [1.9727249145507812, 3.3680312633514404], + [5.447188854217529, -3.2880027294158936], + [3.091482400894165, -4.647947788238525], + [1.7502378225326538, 5.162452697753906], + [2.6052777767181396, 1.0174931287765503], + [-6.319387912750244, 7.604816436767578], + [-3.3212838172912598, -3.6065714359283447], + [3.1323227882385254, -4.690584182739258], + [-5.3682780265808105, -3.3388311862945557], + [5.846249103546143, -3.213479518890381], + [1.666816234588623, 4.901389122009277], + [-4.615916728973389, -3.0618114471435547], + [-5.076381206512451, -3.7261016368865967], + [-2.431272268295288, 0.4658241271972656], + [2.8572890758514404, 0.8643275499343872], + [8.79080581665039, -2.430330514907837], + [3.0308048725128174, -4.54260778427124], + [2.2293050289154053, 6.028079509735107], + [-4.040380477905273, -2.4176275730133057], + [-0.5463224649429321, 10.866119384765625], + [2.248399019241333, -6.541595935821533], + [-5.7111029624938965, -4.036668300628662], + [-2.353452444076538, 2.439314842224121], + [-2.1453514099121094, 1.234985589981079], + [-4.730004787445068, -3.1980831623077393], + [-5.152987957000732, 4.575852870941162], + [-4.874087333679199, 2.6185355186462402], + [-0.24566715955734253, 9.53230094909668], + [-4.961041450500488, 6.858561992645264], + [2.992741823196411, -4.559806823730469], + [0.3116871118545532, -0.16551055014133453], + [7.828778266906738, -2.5502634048461914], + [9.228055000305176, -2.580202341079712], + [-4.315030097961426, 7.119110107421875], + [-2.2903802394866943, 2.289567470550537], + [1.0794883966445923, -7.676938056945801], + [-4.7898736000061035, -2.885509967803955], + [-5.461341381072998, 4.201452732086182], + [-2.0298690795898438, 0.25348594784736633], + [2.007762908935547, -8.079010009765625], + [-5.089681625366211, 6.066526412963867], + [-0.066609688103199, 10.068778991699219], + [-0.3150477409362793, 9.6103515625], + [-8.665712356567383, -0.594447135925293], + [7.346944332122803, -1.7198028564453125], + [-3.8232743740081787, -4.568182468414307], + [2.2230191230773926, 5.945137023925781], + [2.5396223068237305, -4.094141006469727], + [2.420550584793091, 1.2362133264541626], + [-4.7614359855651855, 5.576956272125244], + [2.3039886951446533, -3.5150187015533447], + [2.603484869003296, -4.038390636444092], + [-4.257724285125732, -2.1782710552215576], + [8.468131065368652, -2.4375202655792236], + [-5.239181995391846, 2.4756393432617188], + [-2.625969648361206, -0.17330527305603027], + [5.750946521759033, -1.4297651052474976], + [2.669578790664673, -6.365099906921387], + [-4.981381893157959, -4.121302604675293], + [-5.49976110458374, 2.706373453140259], + [-5.645664691925049, -2.291860342025757], + [-0.11758626252412796, 9.886571884155273], + [2.024965524673462, -7.463223934173584], + [-2.6596181392669678, -4.010307788848877], + [6.738467693328857, -3.6919186115264893], + [1.0946848392486572, -5.734204292297363], + [-5.928621768951416, -2.1222407817840576], + [-0.4350161552429199, 11.184847831726074], + [-5.078165531158447, -2.044201135635376], + [8.094338417053223, -2.493741750717163], + [4.56754732131958, 7.193316459655762], + [-4.636092662811279, 3.625877618789673], + [-3.0015180110931396, 6.100519180297852], + [2.8478810787200928, -4.499407768249512], + [-5.103063106536865, 6.081208229064941], + [-3.559462547302246, 5.448097229003906], + [-1.6908392906188965, 5.284738540649414], + [-5.554652690887451, 5.397074222564697], + [4.942480087280273, -1.0533629655838013], + [9.604171752929688, -2.697997808456421], + [-0.47417956590652466, -1.3385604619979858], + [2.6105849742889404, -4.5467939376831055], + [-4.665308475494385, 0.3400896489620209], + [2.961369037628174, -4.569304466247559], + [-6.064615249633789, 8.233600616455078], + [8.295945167541504, -2.0768959522247314], + [2.2874433994293213, 0.6666779518127441], + [-0.36958104372024536, 9.103609085083008], + [-2.918527364730835, 5.491759300231934], + [2.82741117477417, -4.314971923828125], + [8.894922256469727, -2.486966609954834], + [-4.119749069213867, -3.604700803756714], + [-5.051543235778809, -2.3101584911346436], + [-7.343921184539795, -1.577082633972168], + [-6.433125019073486, 3.28531813621521], + [-4.233377933502197, 4.398733139038086], + [-5.397915363311768, -1.908462643623352], + [2.91237473487854, -4.980278015136719], + [-0.20912057161331177, 9.956235885620117], + [3.083627462387085, -5.02311897277832], + [-1.457433819770813, -0.9493837356567383], + [-4.613539218902588, -3.091887950897217], + [-4.127176284790039, -2.6461093425750732], + [9.257203102111816, -2.597505807876587], + [3.1961758136749268, -5.05647611618042], + [1.8487679958343506, -9.067139625549316], + [-4.219478130340576, -2.470784902572632], + [0.024387381970882416, -0.46608296036720276], + [-0.13853636384010315, -0.8505925536155701], + [-5.465281963348389, 6.497382640838623], + [2.2466542720794678, -7.270362377166748], + [3.9979946613311768, 6.626395225524902], + [-5.0425872802734375, 4.185259819030762], + [-3.1000325679779053, -1.2866843938827515], + [1.5522027015686035, -8.20407772064209], + [-4.816450119018555, -2.8486616611480713], + [-0.24342811107635498, 9.146917343139648], + [-2.483158588409424, 0.4913164973258972], + [7.782358646392822, -1.9353221654891968], + [-3.786393880844116, -2.776825189590454], + [-3.7137224674224854, -4.240375518798828], + [-3.837181329727173, -1.7090799808502197], + [-5.665730953216553, 4.162574768066406], + [-3.316211462020874, -2.151951789855957], + [-0.25635969638824463, 9.768281936645508], + [1.8290199041366577, 5.372771263122559], + [-6.11916971206665, 2.766343832015991], + [0.4817306399345398, -0.8907603621482849], + [3.2399446964263916, -5.087291240692139], + [8.634342193603516, -2.2454099655151367], + [3.039593458175659, -4.578426361083984], + [1.6986148357391357, 4.825840950012207], + [2.5679991245269775, -3.9831738471984863], + [-4.535130977630615, 5.541415214538574], + [-4.338199615478516, 2.204695463180542], + [-4.149886608123779, 3.683288335800171], + [6.13676643371582, -2.1270718574523926], + [4.495202541351318, -4.367433547973633], + [-3.189213752746582, -3.1027944087982178], + [2.680474042892456, -3.991227865219116], + [-4.175342082977295, -1.856798768043518], + [-5.013843059539795, 3.340198516845703], + [-2.7475812435150146, -1.3389207124710083], + [-2.6064789295196533, 0.5870285630226135], + [-3.3421175479888916, 4.917087078094482], + [-5.288288593292236, 6.008306503295898], + [2.989854097366333, -0.7605420351028442], + [6.74856424331665, -1.586244821548462], + [1.6912822723388672, 5.506486892700195], + [-0.2589300870895386, -0.7576190233230591], + [-4.78892183303833, -3.6331775188446045], + [-5.5810651779174805, -2.799391031265259], + [-5.822974681854248, 3.466993570327759], + [5.759500026702881, -1.063684344291687], + [0.9704552292823792, 1.3480201959609985], + [0.5694228410720825, 9.54190444946289], + [-3.7399566173553467, -1.6827820539474487], + [2.9089105129241943, -4.82806396484375], + [-3.1414098739624023, -1.848742127418518], + [-5.234878063201904, 6.191767692565918], + [5.007115364074707, -0.5583561658859253], + [-3.3818111419677734, 2.834721326828003], + [-0.3609694838523865, 9.573016166687012], + [-4.820371150970459, -3.1533331871032715], + [-0.11219067126512527, -1.3945006132125854], + [6.7179036140441895, -2.0830962657928467], + [-0.25351622700691223, -1.3284894227981567], + [-3.134887218475342, -2.855293035507202], + [5.363318920135498, -0.37273871898651123], + [3.249316453933716, -5.249095916748047], + [3.49951434135437, 6.440464019775391], + [-4.386354446411133, -3.8605101108551025], + [3.0463669300079346, -4.57160758972168], + [2.2871415615081787, -7.288455486297607], + [2.8396124839782715, -4.297245979309082], + [-2.973198890686035, 5.975338459014893], + [3.121030330657959, -7.333505630493164], + [-0.3176618218421936, 9.597721099853516], + [5.534030437469482, -1.6841143369674683], + [-0.6900988221168518, 9.982341766357422], + [-5.963249683380127, -2.610646963119507], + [6.488586902618408, -1.8833993673324585], + [2.905714511871338, -4.624493598937988], + [1.8769516944885254, 5.025373458862305], + [1.9223268032073975, 0.7541099786758423], + [5.698873519897461, -2.2092387676239014], + [-6.508342266082764, 8.33704662322998], + [9.89378833770752, -2.7492339611053467], + [-2.7582156658172607, 3.0423130989074707], + [-0.908336341381073, -3.2923924922943115], + [2.1447269916534424, -3.6297013759613037], + [-5.376252174377441, -2.960035562515259], + [2.4680559635162354, 0.6945861577987671], + [-2.6619513034820557, 2.2774693965911865], + [2.1211001873016357, -5.754552364349365], + [-3.6694040298461914, -3.621755838394165], + [2.615041732788086, -6.144169807434082], + [0.3641463816165924, 3.740088701248169], + [3.085174798965454, -4.7168426513671875], + [-0.2623748183250427, 10.004639625549316], + [-2.3770391941070557, -1.4401488304138184], + [-4.562593936920166, 4.212551116943359], + [-2.5259575843811035, 6.496790885925293], + [-0.6287448406219482, 9.246244430541992], + [3.313880681991577, -4.9836506843566895], + [-0.22245419025421143, 11.510026931762695], + [-3.446251153945923, -2.598017454147339], + [-1.2343131303787231, 1.3817793130874634], + [-5.2195258140563965, -2.7787764072418213], + [-2.819746255874634, -1.0643550157546997], + [5.535470008850098, -1.1722153425216675], + [3.816937208175659, -5.888187408447266], + [1.8302720785140991, -7.9491963386535645], + [6.76775598526001, -1.765587329864502], + [3.033571481704712, 6.579100608825684], + [-3.7544262409210205, -2.1575350761413574], + [-0.7194217443466187, 8.92110538482666], + [7.914962291717529, -1.7799402475357056], + [2.817434310913086, -4.265800476074219], + [-6.0828657150268555, -2.15008807182312], + [-2.3916683197021484, 1.5622014999389648], + [-2.6537604331970215, 2.1932005882263184], + [0.3649652898311615, -0.7507147789001465], + [-5.941187381744385, -3.235062837600708], + [2.0762174129486084, -8.791624069213867], + [-6.8302435874938965, 3.449692726135254], + [-4.9872026443481445, -2.0961360931396484], + [-5.460643291473389, 3.1938774585723877], + [7.427170753479004, -1.7838159799575806], + [0.20592284202575684, -0.6023325324058533], + [3.286743640899658, -5.338240623474121], + [2.767207145690918, -2.6252310276031494], + [-0.682426393032074, -2.2777626514434814], + [-3.9081552028656006, 4.540446758270264], + [-2.363067388534546, -2.6291120052337646], + [-2.335747241973877, 0.7536967396736145], + [1.6623317003250122, -4.385650634765625], + [3.1310694217681885, -4.803664684295654], + [1.9186418056488037, -5.2567338943481445], + [-0.2686347961425781, 9.222765922546387], + [-2.0439813137054443, 1.404257893562317], + [2.8576419353485107, -4.429704189300537], + [1.8612890243530273, -7.141574859619141], + [5.688669681549072, 7.681644439697266], + [6.2777323722839355, -1.2073336839675903], + [0.26643282175064087, -0.677646279335022], + [-4.365423202514648, -2.427617311477661], + [2.6986124515533447, -3.9989023208618164], + [9.034343719482422, -2.5698909759521484], + [1.805138349533081, -5.365704536437988], + [-4.867695331573486, -2.1187448501586914], + [-3.781201124191284, -2.4608051776885986], + [6.763476848602295, -1.5544157028198242], + [0.2708638608455658, 0.5892815589904785], + [-4.665734767913818, 7.962884902954102], + [1.5481332540512085, -8.53917121887207], + [2.0198042392730713, 5.53380012512207], + [7.85454797744751, -2.5241353511810303], + [5.97246789932251, 7.746939659118652], + [-3.993515729904175, -3.650486707687378], + [7.891308307647705, -2.3765203952789307], + [-4.346163272857666, 4.927518844604492], + [-4.48727560043335, -3.4203684329986572], + [-5.406295299530029, -5.313054084777832], + [0.19331985712051392, 9.453536033630371], + [-6.405582427978516, -1.9796453714370728], + [-1.9098608493804932, -0.0653960108757019], + [4.155734539031982, -0.8940920829772949], + [-0.2939223051071167, 10.428655624389648], + [-4.431371212005615, 4.901205062866211], + [-4.944530963897705, -1.078839898109436], + [-6.242672920227051, 4.888672828674316], + [1.1604361534118652, -5.869169235229492], + [-4.903517246246338, -3.9456593990325928], + [0.5410261750221252, -6.305807113647461], + [-3.4985625743865967, -1.6584562063217163], + [2.4524340629577637, 0.9650607109069824], + [2.9184556007385254, -4.3954644203186035], + [-2.189607858657837, 2.83573579788208], + [-1.9020276069641113, 2.388721227645874], + [-6.888189792633057, -0.5514251589775085], + [-8.925440788269043, -0.8478695154190063], + [-0.9372249245643616, -0.5988360047340393], + [-6.8454108238220215, -1.693503499031067], + [9.302433967590332, -2.5748531818389893], + [-4.215839385986328, 5.406550407409668], + [-4.561729907989502, -2.4260339736938477], + [-4.664012908935547, 4.623976707458496], + [-4.838119983673096, 3.3231914043426514], + [2.9485151767730713, -4.469244003295898], + [-0.8332050442695618, 1.0393699407577515], + [3.114140272140503, 6.579423427581787], + [-2.730494737625122, -1.3227304220199585], + [-1.6492362022399902, -2.0968329906463623], + [5.266551494598389, -0.9261414408683777], + [-2.314164400100708, 2.8274941444396973], + [-0.31875014305114746, -1.239027738571167], + [-5.1598687171936035, -3.941788911819458], + [-3.2799861431121826, 5.146130084991455], + [-4.587219715118408, -1.3831955194473267], + [-0.22463083267211914, 9.682202339172363], + [-6.622276306152344, 0.8986704349517822], + [-3.2072341442108154, -0.5613182783126831], + [-0.8577823042869568, 0.9546258449554443], + [-2.465399980545044, 1.9151391983032227], + [-7.488287448883057, -1.5324227809906006], + [8.378849029541016, -2.250225782394409], + [1.2104333639144897, -8.000858306884766], + [-3.5176308155059814, 5.601827144622803], + [2.2344777584075928, -6.298117637634277], + [7.026320457458496, -1.6301820278167725], + [-2.365431547164917, 4.050432205200195], + [-2.9687578678131104, -4.120327472686768], + [-4.55619478225708, -4.058466911315918], + [-0.19970488548278809, 8.872772216796875], + [-6.933810710906982, -2.576968193054199], + [-0.22153496742248535, 9.970040321350098], + [-4.646385669708252, 3.667107105255127], + [6.196513652801514, -2.7367806434631348], + [2.8648359775543213, -4.317585468292236], + [-5.277429103851318, 2.4866843223571777], + [-0.367051362991333, 9.56922721862793], + [-7.084695816040039, 8.307122230529785], + [-2.6825637817382812, 2.199805736541748], + [7.4379563331604, -2.4993011951446533], + [-4.254660129547119, 3.9193661212921143], + [-2.4458203315734863, 1.9606879949569702], + [-2.47196102142334, 1.9532068967819214], + [0.4597257375717163, 5.518064022064209], + [-2.548485517501831, 1.4253101348876953], + [-2.2373149394989014, -3.739969253540039], + [-5.145364284515381, 4.160512447357178], + [-3.8310391902923584, 2.219392776489258], + [-2.708425521850586, -4.356258392333984], + [-0.7915211319923401, -1.1499115228652954], + [0.29915571212768555, -0.6567590832710266], + [3.321662664413452, -4.950062274932861], + [2.8782026767730713, -4.35568904876709], + [-0.028765089809894562, 9.939570426940918], + [2.572059392929077, -3.726229429244995], + [9.220175743103027, -2.576918840408325], + [2.1258254051208496, 5.720669746398926], + [1.858305811882019, 5.495893478393555], + [-1.5069565773010254, 0.19790801405906677], + [-0.13024351000785828, -0.6073206067085266], + [-5.268834590911865, 7.445636749267578], + [2.6770682334899902, -8.93797779083252], + [-5.732295036315918, 0.21450477838516235], + [-4.011425018310547, -2.079946279525757], + [-2.1025898456573486, 5.473329067230225], + [-3.9017560482025146, 4.803132057189941], + [5.472973346710205, -1.1494003534317017], + [0.11155729740858078, 0.3351832628250122], + [-4.542316913604736, -3.810469388961792], + [-7.013931751251221, 8.650463104248047], + [5.9057159423828125, -2.4396069049835205], + [0.7538084387779236, 5.542450904846191], + [1.2216026782989502, -6.768052577972412], + [-3.505669355392456, -1.4104350805282593], + [2.7917163372039795, 5.8005146980285645], + [1.1309540271759033, -0.09084442257881165], + [0.03678726404905319, 9.535978317260742], + [-4.505224704742432, -2.6924033164978027], + [9.798378944396973, -2.71954083442688], + [-0.09610555320978165, -0.8197508454322815], + [-6.96608829498291, 8.817752838134766], + [2.7389345169067383, -6.86128044128418], + [10.27324390411377, -2.8274214267730713], + [1.770155668258667, 1.5045090913772583], + [2.6025149822235107, -6.347235679626465], + [1.996673583984375, -9.908672332763672], + [2.4770891666412354, 0.9827169179916382], + [5.962157726287842, -1.2557826042175293], + [-0.9505473971366882, -0.833922266960144], + [-0.400165855884552, 9.71409797668457], + [3.3932206630706787, -2.96854829788208], + [-1.1395210027694702, 0.8225113749504089], + [0.6869091391563416, 8.311441421508789], + [-4.805902004241943, -2.6210665702819824], + [-3.113420009613037, -1.423626184463501], + [-3.3349645137786865, -2.8360519409179688], + [-0.6314415335655212, -0.7063308954238892], + [0.10907212644815445, -0.4868218004703522], + [-4.9905924797058105, -2.3375725746154785], + [0.6448156833648682, -6.140569686889648], + [-3.4239284992218018, 0.7098864316940308], + [-5.214410781860352, -2.431492567062378], + [2.930616617202759, -4.609584331512451], + [-6.302468776702881, 8.002861022949219], + [-0.3376955986022949, 11.412866592407227], + [-1.927437663078308, -1.0741522312164307], + [0.7806819081306458, 0.09229324758052826], + [3.299372673034668, -5.165491580963135], + [-5.0555524826049805, 4.580819129943848], + [1.6311949491500854, -6.127541542053223], + [-0.27216458320617676, 9.476675033569336], + [3.1290900707244873, -4.689450740814209], + [9.360417366027832, -2.608727216720581], + [-4.471535682678223, 4.129122257232666], + [-2.711533784866333, 2.939939260482788], + [-6.509788513183594, -2.150836706161499], + [-2.0060043334960938, 0.22976019978523254], + [3.2344319820404053, 6.319971084594727], + [-4.927382946014404, -3.724078416824341], + [8.525712966918945, -2.4242889881134033], + [2.9100968837738037, -4.5010247230529785], + [2.6687850952148438, -3.7944605350494385], + [4.466134548187256, -2.9053914546966553], + [7.191036224365234, -2.438354253768921], + [-3.2956292629241943, -3.6099579334259033], + [-6.741849422454834, -1.756679654121399], + [4.665063381195068, 7.223666191101074], + [0.08094068616628647, -0.8641284704208374], + [-2.8461527824401855, -3.986853837966919], + [-4.312695503234863, -2.719086170196533], + [1.9200830459594727, 5.240548610687256], + [-3.4732582569122314, -3.570248603820801], + [-4.654836177825928, -3.65032958984375], + [-6.4070916175842285, 6.323612213134766], + [-1.934548258781433, 0.6258364915847778], + [5.577785015106201, -3.3396148681640625], + [-0.2705368995666504, 9.231651306152344], + [2.3010973930358887, -3.9743292331695557], + [-3.5175859928131104, -0.8781248927116394], + [-5.216187953948975, 2.1825544834136963], + [-0.41973209381103516, 10.284561157226562], + [-5.978269100189209, 7.560951232910156], + [-5.144683837890625, -2.1162450313568115], + [3.240335702896118, -5.167951583862305], + [-3.669966459274292, -3.437647581100464], + [-4.317145824432373, -1.6087994575500488], + [2.7515509128570557, 5.665931224822998], + [-5.073545932769775, -2.3030574321746826], + [-4.745274066925049, -2.8417627811431885], + [-8.262194633483887, -0.5545283555984497], + [-2.6684508323669434, 0.0052177272737026215], + [-5.18913459777832, 4.396212577819824], + [-0.32369035482406616, 10.91887092590332], + [2.09081768989563, -7.736174583435059], + [1.7312933206558228, 5.350901126861572], + [2.7640812397003174, -6.654457092285156], + [4.809084415435791, 7.376373291015625], + [-4.995405197143555, -2.5305025577545166], + [-2.163339614868164, 0.24632537364959717], + [-0.2778016924858093, 10.525725364685059], + [2.302656888961792, -5.184541702270508], + [-7.052990913391113, -2.3979005813598633], + [0.41637900471687317, -0.7483024597167969], + [-7.243354320526123, -0.548689603805542], + [3.1567676067352295, -5.045908451080322], + [0.13816899061203003, 8.498991012573242], + [-3.8077197074890137, -3.2698848247528076], + [-4.586085796356201, -4.024048328399658], + [-6.224247932434082, 7.288600921630859], + [6.196256160736084, -3.1416332721710205], + [-4.7780842781066895, -4.0617756843566895], + [-0.25366753339767456, 10.082469940185547], + [-4.2526044845581055, 7.246604919433594], + [-1.2256200313568115, -0.6716071963310242], + [-0.0954635813832283, 10.701189041137695], + [-3.474632978439331, -3.919663190841675], + [2.0730292797088623, 5.517481803894043], + [-2.125450611114502, 4.757204055786133], + [-0.018652714788913727, -1.6039674282073975], + [-0.24739372730255127, 9.621123313903809], + [-5.917356967926025, 6.930663585662842], + [-4.406920433044434, 0.7894772291183472], + [-5.009317874908447, 5.808489799499512], + [0.8004457950592041, 0.6981768608093262], + [-0.461001992225647, -0.048018213361501694], + [-0.5011700987815857, -1.145180106163025], + [-7.183628559112549, -1.9662383794784546], + [-3.4065701961517334, -1.3508352041244507], + [-2.9869048595428467, 0.5136147737503052], + [2.141697645187378, -6.467845916748047], + [-5.150789737701416, -3.6401679515838623], + [6.150217533111572, -3.5554802417755127], + [2.0885655879974365, -4.161616325378418], + [0.533430278301239, 0.723557710647583], + [-4.75949764251709, 7.553068161010742], + [-4.018118858337402, 4.261957168579102], + [-7.888663291931152, 9.825182914733887], + [-3.4282138347625732, -2.294139862060547], + [-2.6419570446014404, -0.4988054037094116], + [0.6061837673187256, -6.879425525665283], + [9.164607048034668, -2.5698745250701904], + [-2.209101438522339, 2.649998188018799], + [-6.298369884490967, -2.4233667850494385], + [2.1455416679382324, 5.299459457397461], + [-5.786266326904297, 5.170077323913574], + [5.425185680389404, -1.0018724203109741], + [-2.0379879474639893, 2.8704123497009277], + [9.208614349365234, -2.5494425296783447], + [-2.2208333015441895, 2.5619523525238037], + [1.766600489616394, 5.357425689697266], + [7.627621173858643, -1.7609130144119263], + [1.9975507259368896, -5.078670501708984], + [-2.8076019287109375, 0.12936550378799438], + [-3.484610080718994, -1.0541449785232544], + [-2.4746854305267334, 1.3003891706466675], + [-4.295980930328369, -4.439892292022705], + [-0.20625954866409302, 9.418514251708984], + [-4.319284915924072, 4.19249963760376], + [1.9344031810760498, -4.03748083114624], + [-4.248847007751465, -2.734626531600952], + [-7.081313133239746, -1.723494529724121], + [2.6281497478485107, -5.615614891052246], + [3.0168187618255615, -6.177762031555176], + [-6.055629253387451, 7.409218788146973], + [-6.819923400878906, -0.05455446615815163], + [2.7466049194335938, -4.055890083312988], + [-6.437814712524414, -1.3843480348587036], + [4.222165107727051, -3.6245174407958984], + [-4.57736873626709, 4.060950756072998], + [-4.008824348449707, 7.237565517425537], + [1.7904362678527832, -5.410189628601074], + [-4.325531959533691, 3.169725179672241], + [-3.1925973892211914, 5.128777503967285], + [0.8844276070594788, -6.947164535522461], + [-4.695805072784424, 5.644162654876709], + [-4.943892478942871, -2.3268792629241943], + [8.254960060119629, -2.224778890609741], + [-0.13380232453346252, -0.9147735834121704], + [1.9661438465118408, 5.726250648498535], + [4.544422626495361, -3.4709112644195557], + [-3.6531035900115967, -1.7642052173614502], + [-0.5883033275604248, 6.654747009277344], + [-2.8293557167053223, -3.7404863834381104], + [-2.533371686935425, 1.9067143201828003], + [-3.950310707092285, -1.4248061180114746], + [-6.8379435539245605, 8.352327346801758], + [2.564812660217285, 0.5599426031112671], + [5.922154903411865, -2.1622397899627686], + [-4.321592330932617, -3.659935235977173], + [3.3061625957489014, 6.342185974121094], + [3.0327987670898438, -4.425073146820068], + [-5.025322437286377, 3.882646322250366], + [-5.844824314117432, -0.8821626901626587], + [-5.092189311981201, -0.9077231884002686], + [-0.2622479200363159, 10.807126998901367], + [7.337172985076904, -1.7681727409362793], + [-6.244515419006348, -2.616549253463745], + [7.76237678527832, -2.314056634902954], + [-5.9112629890441895, 5.100040912628174], + [-0.29608696699142456, 10.214164733886719], + [-2.1297192573547363, 2.3358559608459473], + [-4.5851826667785645, -3.500379800796509], + [-6.006652355194092, -2.916778802871704], + [-3.094712495803833, 3.9092020988464355], + [2.1266300678253174, -5.550475597381592], + [-0.23700731992721558, 9.520917892456055], + [5.615537166595459, -1.0349267721176147], + [-4.232390880584717, -2.4579076766967773], + [8.542159080505371, -2.4365251064300537], + [-6.3527092933654785, 2.3385391235351562], + [2.228729248046875, 6.020125865936279], + [7.849504470825195, -2.3164260387420654], + [0.1911812424659729, 9.721596717834473], + [-6.177796840667725, 7.909300804138184], + [-2.6539671421051025, -3.3446269035339355], + [-2.395185947418213, -0.5144197344779968], + [8.689687728881836, -2.627776861190796], + [-4.760646820068359, -1.8979977369308472], + [-1.11642587184906, -2.611696720123291], + [-0.272980272769928, 9.302164077758789], + [-4.926734924316406, 1.6448121070861816], + [-5.954616546630859, 4.342137336730957], + [-2.8308417797088623, -4.859121322631836], + [-3.739560127258301, -3.446662664413452], + [-0.855908989906311, 9.763384819030762], + [-2.3241159915924072, -2.079324722290039], + [2.1558990478515625, 4.7803955078125], + [2.7218177318573, 5.010684967041016], + [1.8491525650024414, 5.40708065032959], + [-6.6746320724487305, -0.27895331382751465], + [8.421220779418945, -2.1878788471221924], + [-2.256901264190674, 1.2034658193588257], + [-7.064302444458008, -1.5120347738265991], + [-0.7250599265098572, 9.8936185836792], + [2.997004747390747, -6.476838111877441], + [-3.6670329570770264, 5.158364772796631], + [2.081904649734497, 1.3611024618148804], + [-7.1796488761901855, 8.610919952392578], + [0.7291082739830017, -0.10284936428070068], + [-3.595881223678589, -1.5715179443359375], + [1.4917182922363281, 5.067488670349121], + [-5.8037238121032715, -4.3248772621154785], + [7.488566875457764, -2.053433418273926], + [-3.847810745239258, -2.3807601928710938], + [-2.517834186553955, 1.2408725023269653], + [1.8799827098846436, 4.920832633972168], + [-6.934022426605225, -1.9753609895706177], + [-0.07054788619279861, 8.52613353729248], + [-4.172360420227051, -2.4710817337036133], + [-3.771629571914673, -1.2194253206253052], + [-7.159055709838867, 8.604698181152344], + [-0.3648427128791809, 10.534786224365234], + [-4.320269584655762, -3.7566940784454346], + [-4.40289306640625, -1.69368314743042], + [9.091012001037598, -2.463845729827881], + [-0.8647362589836121, 6.006145477294922], + [-4.3656134605407715, 4.7109575271606445], + [-4.82831335067749, -1.0071965456008911], + [-2.2047946453094482, -2.7404682636260986], + [-6.030868053436279, -2.4179797172546387], + [-2.653552770614624, 5.2636823654174805], + [0.08514942973852158, -1.1671470403671265], + [-5.494255542755127, 6.391593933105469], + [2.7995011806488037, -4.302284240722656], + [-1.8648759126663208, 1.2655128240585327], + [6.108779430389404, -1.2542022466659546], + [2.1460931301116943, -7.842905044555664], + [-0.18941575288772583, 9.594125747680664], + [5.684138774871826, -1.2726699113845825], + [-3.390636682510376, -4.07907772064209], + [-3.3719332218170166, -3.088996410369873], + [-4.130868911743164, 3.4166955947875977], + [-1.5257971286773682, 0.4195137619972229], + [5.750813007354736, -1.2162995338439941], + [2.6476213932037354, -4.106203556060791], + [10.004916191101074, -2.955686569213867], + [1.945220708847046, 5.483431816101074], + [6.019718647003174, 7.581532001495361], + [-5.6485276222229, 2.2733421325683594], + [-5.954742908477783, -2.8746941089630127], + [-0.7005795836448669, 1.5864402055740356], + [8.970942497253418, -2.5125818252563477], + [3.2924604415893555, 1.57571542263031], + [6.990957736968994, -2.1848714351654053], + [7.15425443649292, -2.257754325866699], + [-3.809389352798462, 4.095878601074219], + [-3.1835639476776123, -3.4026854038238525], + [-3.6340487003326416, -2.9212372303009033], + [-1.0965616703033447, 0.05865943059325218], + [-2.914513349533081, -3.476536512374878], + [-6.013838291168213, 1.8989683389663696], + [-4.122714996337891, -1.9804631471633911], + [-5.571845531463623, -3.4941508769989014], + [-4.349728584289551, -4.035472869873047], + [-0.4756621718406677, 9.37886905670166], + [-0.5455058217048645, 10.286108016967773], + [0.17640239000320435, -0.2909125089645386], + [2.7538530826568604, -4.335201740264893], + [-5.105453968048096, -4.051608085632324], + [-4.6703009605407715, 4.1323771476745605], + [-0.5834565758705139, -1.2869409322738647], + [-4.5185112953186035, -1.6824531555175781], + [-3.123530626296997, 2.701892614364624], + [2.799217939376831, 1.423034429550171], + [-5.337371826171875, 2.2020750045776367], + [-4.788959980010986, -4.226420879364014], + [-7.168344020843506, -1.1784025430679321], + [1.4698143005371094, 1.8990601301193237], + [-6.390489101409912, 7.216729640960693], + [8.957690238952637, -2.5185635089874268], + [-2.179115056991577, 2.8085174560546875], + [-7.070338726043701, -0.4588606357574463], + [2.973579168319702, -4.476823329925537], + [5.713619709014893, 7.771288871765137], + [7.271705627441406, -4.516650199890137], + [1.3518427610397339, -5.824159145355225], + [-4.3249430656433105, 4.310979843139648], + [3.002746820449829, -4.9324212074279785], + [1.1624712944030762, 0.9228041172027588], + [0.2718279957771301, 9.66130256652832], + [0.3757357895374298, -0.7881966233253479], + [0.8535658717155457, -6.568690299987793], + [-3.340034246444702, 5.624222755432129], + [-5.921932697296143, -2.1078083515167236], + [5.497859477996826, -2.261864185333252], + [-8.534153938293457, -1.2141917943954468], + [-6.115234851837158, 4.494046211242676], + [-7.904117107391357, -1.2556477785110474], + [0.3405064344406128, -5.087145805358887], + [1.3062243461608887, -7.035296440124512], + [1.1319336891174316, 5.670496940612793], + [9.01706600189209, -3.092003583908081], + [-4.358620643615723, -2.674222707748413], + [-3.669985055923462, 5.315037250518799], + [-5.816320419311523, 8.220191955566406], + [0.41729313135147095, -1.7012296915054321], + [-0.8819161653518677, 2.8514249324798584], + [-2.973341703414917, -3.532453775405884], + [-3.390740394592285, -0.7533767819404602], + [1.53922700881958, 1.018844723701477], + [-2.104740858078003, 0.8214160203933716], + [1.6503839492797852, -8.033590316772461], + [4.873721599578857, 7.497536659240723], + [-3.3163130283355713, 6.04805850982666], + [-5.727537155151367, 7.024074077606201], + [5.59846305847168, -0.688789963722229], + [1.40071439743042, -8.131368637084961], + [-0.16591864824295044, 10.350433349609375], + [-6.398904323577881, 3.121140718460083], + [1.1881706714630127, -6.7090020179748535], + [-0.9256392121315002, -0.9736038446426392], + [-3.38832688331604, -0.848956823348999], + [0.9120619893074036, -0.3947948217391968], + [2.068127393722534, -3.4540913105010986], + [0.7787644863128662, 5.1910858154296875], + [-3.290633201599121, -1.9156789779663086], + [-2.173529863357544, 3.112210988998413], + [-3.4236738681793213, -0.6870400309562683], + [-2.674675941467285, 6.708273887634277], + [-0.3040698766708374, -1.0666512250900269], + [-0.994476854801178, 8.93008804321289], + [-5.224304676055908, 4.972080230712891], + [-4.255897045135498, -4.739950180053711], + [-0.11679572612047195, -0.8466389775276184], + [7.794064521789551, -2.3013908863067627], + [-2.6763722896575928, 5.042814254760742], + [1.808219075202942, -3.8352978229522705], + [-2.7729508876800537, 3.271456003189087], + [-5.467329502105713, -7.964087009429932], + [-2.094322919845581, 1.1455146074295044], + [-4.907974720001221, 6.361330509185791], + [-2.2963030338287354, 0.8913450241088867], + [-4.065540313720703, -5.999958038330078], + [-5.5501251220703125, -5.810962677001953], + [-0.40682995319366455, 9.265049934387207], + [2.496473789215088, -4.536773681640625], + [8.458633422851562, -2.4414122104644775], + [-7.755153179168701, -2.3090600967407227], + [-3.750941038131714, -2.206019163131714], + [-1.8916757106781006, -0.5648508071899414], + [2.7416653633117676, -4.729784965515137], + [0.017402522265911102, 9.731002807617188], + [-6.36540412902832, -0.8232924938201904], + [-4.909820079803467, -2.8396058082580566], + [-0.8569527268409729, -2.858957052230835], + [-7.681865215301514, -0.2420593500137329], + [2.6183152198791504, -3.9912190437316895], + [2.468094825744629, -3.9236252307891846], + [-5.983035087585449, -2.6211624145507812], + [9.50326156616211, -2.70310378074646], + [-4.432409286499023, -4.33051872253418], + [-7.482054710388184, 9.220209121704102], + [-6.164676666259766, 2.920164108276367], + [-4.4930195808410645, -4.089262962341309], + [1.8922945261001587, -9.148262023925781], + [2.9306013584136963, -4.416784286499023], + [-6.2890753746032715, -0.9486006498336792], + [6.9191765785217285, -5.128252029418945], + [-4.881452560424805, 0.9109727144241333], + [-1.1972362995147705, -2.7758736610412598], + [-6.205099105834961, 7.415722370147705], + [-3.942650556564331, -3.733292579650879], + [-0.33339738845825195, 8.817766189575195], + [1.1354924440383911, 4.344705104827881], + [-0.3156490921974182, 10.119290351867676], + [-1.7852401733398438, 1.4389522075653076], + [-4.436834812164307, -2.1953976154327393], + [-1.9688715934753418, 6.174222946166992], + [-1.8801673650741577, -2.2144711017608643], + [-1.602254867553711, 5.786684513092041], + [-6.896115779876709, -0.979432225227356], + [-3.1848106384277344, 5.29375696182251], + [-4.976099491119385, -4.7406158447265625], + [-0.6981910467147827, 3.952173948287964], + [-2.258993625640869, 1.666406273841858], + [-5.710818767547607, -2.150047779083252], + [5.451270580291748, -1.1829055547714233], + [-0.2490437626838684, 9.635232925415039], + [1.7472285032272339, -6.761852264404297], + [1.5508407354354858, -2.9290993213653564], + [1.8936623334884644, -4.008544445037842], + [3.068128824234009, -4.425588607788086], + [-2.6483957767486572, 1.0064501762390137], + [1.8786722421646118, 5.437710762023926], + [-0.2826463580131531, 10.511515617370605], + [-4.356330871582031, -2.89542818069458], + [-1.0808480978012085, 0.7322380542755127], + [2.4237492084503174, 0.8664164543151855], + [3.145939588546753, -4.709643363952637], + [2.1681506633758545, 5.606278419494629], + [-4.319730281829834, 2.8076107501983643], + [-2.3936357498168945, 1.2848155498504639], + [8.143409729003906, -2.1581075191497803], + [2.9383726119995117, -4.624845027923584], + [-0.703891932964325, 0.10212644934654236], + [-5.038167953491211, 0.34008559584617615], + [-2.347121238708496, 2.8211545944213867], + [8.24569034576416, -2.258551836013794], + [-4.680843353271484, 6.133408546447754], + [-6.510779857635498, -1.1377476453781128], + [-2.5501654148101807, 0.4030560851097107], + [-6.579334735870361, -2.222059965133667], + [-5.521085739135742, 4.898087024688721], + [9.041752815246582, -2.5473668575286865], + [-2.369701862335205, 1.2304437160491943], + [2.6831886768341064, -5.431336402893066], + [9.082343101501465, -2.6053037643432617], + [-1.8650236129760742, 2.3341357707977295], + [5.521226406097412, 7.494955539703369], + [8.714068412780762, -2.443528413772583], + [-0.45023712515830994, 5.105391979217529], + [-1.5707639455795288, 4.843453884124756], + [0.4160032570362091, -4.352076530456543], + [1.2414261102676392, -5.800088882446289], + [-0.26730164885520935, -0.7970839738845825], + [1.5644609928131104, -7.7337646484375], + [-3.4169132709503174, -3.3258230686187744], + [8.407755851745605, -2.589449167251587], + [-3.8850085735321045, 4.77163028717041], + [-0.30408230423927307, -2.400566816329956], + [-5.457264423370361, 4.553187370300293], + [1.745444655418396, -3.6855287551879883], + [5.860029697418213, 7.287467956542969], + [2.7597923278808594, -3.1420905590057373], + [-0.30796605348587036, 10.735807418823242], + [3.0561110973358154, -4.604968547821045], + [0.20121076703071594, -1.4035130739212036], + [-3.5928432941436768, -5.216476917266846], + [-5.42353630065918, 7.092851638793945], + [-5.365904331207275, -0.356545090675354], + [1.9173789024353027, 5.031635761260986], + [0.5635591745376587, -0.04767632856965065], + [-2.2813570499420166, 1.992695927619934], + [-3.3287551403045654, 5.431838035583496], + [-5.3145623207092285, -5.104564666748047], + [5.86358118057251, -3.9526071548461914], + [-2.2764899730682373, 5.594903469085693], + [2.2956812381744385, -5.497762203216553], + [1.0008209943771362, -6.169450759887695], + [0.529049813747406, 4.998078346252441], + [2.331160306930542, -7.2941412925720215], + [7.253549098968506, -1.7970921993255615], + [-1.8827228546142578, -2.2595911026000977], + [-7.419802188873291, 9.099580764770508], + [4.780637741088867, 7.276193141937256], + [-2.4855620861053467, 1.9450020790100098], + [-3.942829132080078, 5.846542835235596], + [8.329880714416504, -2.296405076980591], + [1.8449500799179077, -9.140771865844727], + [2.3638641834259033, -6.495813846588135], + [3.3644731044769287, -5.145224571228027], + [-0.8599151968955994, -2.798142671585083], + [-4.718066692352295, 5.745692253112793], + [-5.5946784019470215, 4.352682590484619], + [-2.250121831893921, 1.019737720489502], + [9.99977970123291, -2.679332971572876], + [1.3999099731445312, 0.6907315254211426], + [6.987268924713135, -1.6430959701538086], + [-4.7452311515808105, -3.2245712280273438], + [-0.22511714696884155, 10.20542049407959], + [5.859391689300537, -1.5044704675674438], + [-5.572859764099121, -5.158329963684082], + [-5.485195636749268, 6.629103183746338], + [6.749883651733398, -5.370549201965332], + [1.4743397235870361, -0.8531349301338196], + [0.24011015892028809, -0.43936145305633545], + [0.12631934881210327, -1.0974987745285034], + [3.005612850189209, -4.686244010925293], + [-4.312194347381592, -1.4536654949188232], + [-0.31387752294540405, 9.847905158996582], + [-0.09552622586488724, -0.4093256890773773], + [-4.889861106872559, 3.304964780807495], + [-2.9927756786346436, 3.3321995735168457], + [-4.734719276428223, -3.008141040802002], + [-1.1047557592391968, 5.493251800537109], + [-5.89713716506958, 3.2302236557006836], + [-5.082168102264404, -3.378232717514038], + [-5.165849208831787, -3.4013705253601074], + [-2.064157247543335, 2.027449369430542], + [1.346909761428833, -7.907766342163086], + [-3.7030181884765625, -4.148783206939697], + [-2.9454658031463623, 5.527310371398926], + [2.339461088180542, -6.748169898986816], + [2.1795713901519775, -10.245966911315918], + [0.4698271155357361, -5.829395294189453], + [-0.20054447650909424, 10.665860176086426], + [4.338505268096924, 6.789391994476318], + [-6.309803485870361, 4.241451740264893], + [-5.455315113067627, -3.7211954593658447], + [2.7551755905151367, -8.244329452514648], + [-3.693101167678833, -1.031103253364563], + [-4.380090236663818, -2.6172635555267334], + [-6.938703536987305, -1.4111454486846924], + [-1.630943775177002, -1.1260733604431152], + [2.4696714878082275, 5.352659225463867], + [-2.275693416595459, 2.077735424041748], + [0.3920011520385742, -4.684508323669434], + [2.1056790351867676, -3.641024589538574], + [-5.537464618682861, 5.655620574951172], + [2.0738353729248047, 5.333415985107422], + [6.523239612579346, -5.4064249992370605], + [3.520521879196167, -4.920832633972168], + [5.5817108154296875, -1.1710213422775269], + [-0.5654227137565613, 0.1801980435848236], + [-5.412206172943115, -3.733135223388672], + [-0.2829967141151428, 9.58443832397461], + [1.8984742164611816, 5.9240522384643555], + [9.605401039123535, -2.6832292079925537], + [-0.9402934312820435, -0.6926849484443665], + [-5.120361328125, 6.281538009643555], + [7.456639289855957, -1.7393460273742676], + [-2.396376132965088, -0.6087874174118042], + [1.8453267812728882, -8.388373374938965], + [-4.629546642303467, -4.42360258102417], + [-0.3120090365409851, 11.04539680480957], + [2.3520309925079346, -8.090322494506836], + [2.7975738048553467, -4.228951930999756], + [1.860127568244934, -2.7595388889312744], + [-4.559553146362305, -4.366933822631836], + [-5.354415416717529, 6.740108013153076], + [-2.66694712638855, 1.9788998365402222], + [0.6169314980506897, -6.837497234344482], + [1.7044488191604614, 4.402341365814209], + [8.716530799865723, -2.3258135318756104], + [0.6309289336204529, -0.11987262964248657], + [-2.1713521480560303, 2.2173895835876465], + [-0.7166849374771118, 9.512240409851074], + [7.9907708168029785, -2.1343557834625244], + [2.938722610473633, 1.2119778394699097], + [2.6163036823272705, -3.068857192993164], + [2.2508859634399414, -6.676662445068359], + [2.2534382343292236, -4.626819610595703], + [-5.712256908416748, 2.245380163192749], + [-2.261042594909668, 2.0568201541900635], + [-1.2387704849243164, -1.1709572076797485], + [-2.582571029663086, 2.521657943725586], + [-1.8289318084716797, -0.7676026821136475], + [-4.438958644866943, -3.1539723873138428], + [-2.842623710632324, 1.8725556135177612], + [7.740543365478516, -1.9788219928741455], + [-3.892296075820923, -2.336261034011841], + [-3.471107244491577, -0.34950459003448486], + [-3.639012098312378, -2.4879751205444336], + [-2.134951591491699, 0.8411706686019897], + [-9.670562744140625, -1.125466227531433], + [5.528991222381592, 7.501033782958984], + [-4.182569980621338, 3.9820668697357178], + [-4.716320514678955, -4.921938896179199], + [-5.97561502456665, 2.263913154602051], + [-4.445008754730225, -2.7674832344055176], + [3.115628957748413, -4.698833465576172], + [-6.732515811920166, 1.6002002954483032], + [1.5412551164627075, 1.9612501859664917], + [2.0121819972991943, -9.573600769042969], + [-5.936463356018066, 4.673024654388428], + [-2.26041841506958, 2.695396900177002], + [-4.728427886962891, -1.4718481302261353], + [-4.519347667694092, -2.506457567214966], + [6.325328350067139, -1.3376871347427368], + [-2.1424877643585205, 1.8121635913848877], + [5.1063432693481445, -1.1376985311508179], + [-4.1800923347473145, -2.542698383331299], + [-0.47213810682296753, -1.3498551845550537], + [-5.882850646972656, 7.238010406494141], + [2.513733148574829, -4.137446403503418], + [-3.197441816329956, -2.5853493213653564], + [-3.8970861434936523, -3.566664457321167], + [0.2998201847076416, -0.4184657633304596], + [-6.711924076080322, 8.487774848937988], + [1.5494108200073242, -2.99252986907959], + [2.160966634750366, -3.7884883880615234], + [-0.41869258880615234, 11.251304626464844], + [1.7538580894470215, -5.967155933380127], + [-4.984631061553955, 7.024224281311035], + [-6.189244747161865, -2.229719400405884], + [1.1155705451965332, -6.7946929931640625], + [2.550516366958618, 1.0043190717697144], + [3.2749457359313965, -4.8888044357299805], + [-3.2112224102020264, -0.8506429195404053], + [-4.828035831451416, -4.99339485168457], + [-4.2031049728393555, 3.16339111328125], + [5.380941867828369, -1.0886867046356201], + [6.475841999053955, -0.8762871026992798], + [-4.0036139488220215, 6.440576553344727], + [8.291420936584473, -1.9945811033248901], + [7.107244968414307, -2.3317506313323975], + [5.406595706939697, 7.165334701538086], + [9.433930397033691, -2.763061046600342], + [-0.8257068991661072, 5.246448516845703], + [1.9107766151428223, 5.847021102905273], + [3.0314342975616455, -6.333987236022949], + [3.5102388858795166, 1.374822735786438], + [-4.660555362701416, 6.252958297729492], + [-6.370894908905029, 3.6660492420196533], + [0.30563220381736755, -0.5569978952407837], + [-0.18091288208961487, -0.8695250153541565], + [1.7088862657546997, -8.450014114379883], + [-3.0447399616241455, -3.487412691116333], + [4.719583988189697, 6.513973236083984], + [-0.4049617648124695, 11.08369255065918], + [-4.888411521911621, 3.7512006759643555], + [7.831292629241943, -2.637620449066162], + [-7.32468843460083, -1.5777156352996826], + [-6.339807987213135, -1.772983193397522], + [2.034215211868286, 5.519566059112549], + [7.0903496742248535, -3.106663465499878], + [-6.505053997039795, 8.461831092834473], + [0.9290736317634583, 0.42172807455062866], + [2.9348304271698, -5.062639236450195], + [-0.8590232729911804, 13.143592834472656], + [3.1781299114227295, -4.753586769104004], + [5.538600921630859, -1.0875663757324219], + [2.575735569000244, 3.708347797393799], + [-4.8381876945495605, -4.444230079650879], + [-5.825536251068115, 5.03309965133667], + [-4.122664928436279, 3.200090169906616], + [-0.20897316932678223, 10.162318229675293], + [-4.340160846710205, -1.3367754220962524], + [-3.4766781330108643, 4.371129989624023], + [1.8304845094680786, 5.382646083831787], + [1.835831880569458, 0.5069031119346619], + [-1.4063315391540527, 1.3151143789291382], + [0.17998772859573364, -0.4530641436576843], + [1.8095766305923462, -7.194445610046387], + [3.3077309131622314, -4.936927795410156], + [-2.901843309402466, -2.8609790802001953], + [-0.14737284183502197, 9.606361389160156], + [2.1874279975891113, -6.679080963134766], + [3.471379518508911, -1.829740047454834], + [-6.317899227142334, 1.5344979763031006], + [6.293586254119873, -2.5648913383483887], + [3.146496534347534, -4.707761764526367], + [-4.874809741973877, -4.11506986618042], + [3.880390167236328, -3.304445505142212], + [10.015369415283203, -2.768996000289917], + [-0.3193506598472595, 10.459217071533203], + [0.5936359763145447, -0.4840073585510254], + [-4.752874851226807, 1.569820761680603], + [8.899128913879395, -2.4530725479125977], + [-1.3228949308395386, 1.9388912916183472], + [-5.562851428985596, 3.8270013332366943], + [-5.560722827911377, 0.4730290174484253], + [-3.654108762741089, -1.3074275255203247], + [-3.89900279045105, 5.931451797485352], + [-3.915386438369751, 3.6227517127990723], + [8.758196830749512, -2.6161158084869385], + [-2.539987325668335, 7.5164794921875], + [6.752139568328857, -1.4961589574813843], + [-4.026198387145996, -1.7178294658660889], + [-4.891725063323975, 7.980245590209961], + [2.011897563934326, 1.0960644483566284], + [2.227961301803589, 5.944319725036621], + [2.502782106399536, -3.7670114040374756], + [-4.775070667266846, -2.7903311252593994], + [-5.225574016571045, -4.082602500915527], + [6.535804271697998, -2.0993430614471436], + [0.34882980585098267, -5.533412456512451], + [1.6352524757385254, -8.826896667480469], + [-6.021668910980225, -2.9059133529663086], + [-5.014570236206055, 4.519016265869141], + [3.2082231044769287, -5.327564239501953], + [-2.1109988689422607, 1.0626435279846191], + [-3.259012460708618, 5.174480438232422], + [-0.2979118227958679, 9.469010353088379], + [-2.5222432613372803, 0.21305280923843384], + [-4.291381359100342, -2.7991859912872314], + [-5.015571117401123, -4.313486576080322], + [7.239787578582764, -1.8572713136672974], + [5.067290782928467, -0.9736896753311157], + [-4.379416465759277, -2.504351854324341], + [1.7650411128997803, -3.925710439682007], + [2.9584875106811523, -7.890660285949707], + [-0.9967635273933411, 9.328369140625], + [2.6155521869659424, -4.143674373626709], + [-7.50478982925415, -1.17082679271698], + [9.070927619934082, -2.5117344856262207], + [-0.3307550549507141, 10.839468955993652], + [2.715858221054077, -4.249752521514893], + [-5.455129146575928, 3.0482332706451416], + [3.029917001724243, -4.730742454528809], + [-4.656826972961426, -3.1372482776641846], + [2.8253440856933594, -4.377601623535156], + [-4.461868762969971, -3.0475592613220215], + [7.592389106750488, -2.0099329948425293], + [1.48164701461792, -6.887053489685059], + [9.157105445861816, -2.5049262046813965], + [2.9059362411499023, -4.591818809509277], + [-4.822721481323242, -2.689079523086548], + [-2.4670093059539795, 2.2234184741973877], + [2.115957021713257, 5.193816184997559], + [-4.211572170257568, -2.2596986293792725], + [-2.3232386112213135, 0.11563807725906372], + [-4.823453903198242, 3.5837788581848145], + [-7.064974308013916, -2.2590694427490234], + [-0.2805483341217041, 9.791129112243652], + [-5.610440254211426, -0.8813701868057251], + [-0.13032859563827515, -1.317168116569519], + [2.6982221603393555, -4.142974853515625], + [-5.293097972869873, 8.18055534362793], + [-4.389779567718506, -1.719138503074646], + [1.3873271942138672, -6.045597076416016], + [-4.45258092880249, 3.7608518600463867], + [1.4177113771438599, 4.880727767944336], + [7.58883810043335, -1.9604390859603882], + [-4.397639751434326, -0.768572211265564], + [3.2817184925079346, -4.938136577606201], + [-1.9213634729385376, 2.3354899883270264], + [0.8050212264060974, 0.06243668124079704], + [1.4270222187042236, 5.0230512619018555], + [-0.5508802533149719, 5.173035621643066], + [2.785689115524292, -4.621307373046875], + [1.9633457660675049, 0.5643725991249084], + [-3.1369457244873047, 5.2271504402160645], + [-5.056578159332275, -3.0209786891937256], + [-5.551122188568115, 1.812024712562561], + [-2.0326035022735596, 1.259526014328003], + [7.8986921310424805, -1.9213947057724], + [-0.1306261420249939, 10.282537460327148], + [-2.0371651649475098, 2.1103153228759766], + [-0.36511147022247314, 10.549092292785645], + [6.131406307220459, -1.348059892654419], + [0.8009210228919983, 9.139703750610352], + [1.3040797710418701, 5.198212623596191], + [-2.421717643737793, 2.4947659969329834], + [-0.7937802672386169, -0.9544641375541687], + [-6.740573406219482, -1.6874356269836426], + [-5.4918532371521, 4.991438388824463], + [-6.685598850250244, -2.0547351837158203], + [-3.254713535308838, 7.011646747589111], + [-5.170505046844482, -3.165606737136841], + [-5.313973903656006, -2.4651288986206055], + [-5.43619966506958, 2.356762647628784], + [0.9271325469017029, -6.987540245056152], + [-5.2058186531066895, -0.012122038751840591], + [-4.084468841552734, 2.7516772747039795], + [-7.195772647857666, -0.8909253478050232], + [-3.056386709213257, 3.880293607711792], + [-0.3890584111213684, 10.650493621826172], + [-1.8637502193450928, 2.5859735012054443], + [2.1512458324432373, 4.157442569732666], + [-0.6192328929901123, 9.892374038696289], + [2.050194025039673, -4.4616312980651855], + [0.4754346013069153, -1.0563730001449585], + [-4.873807430267334, -4.118434906005859], + [-0.12787467241287231, 11.682918548583984], + [-3.4784984588623047, 3.905247926712036], + [2.651440382003784, 5.535748481750488], + [1.7251744270324707, -4.320625305175781], + [-3.5702452659606934, -1.656494379043579], + [2.6739656925201416, -6.551424026489258], + [-3.8826653957366943, -2.6975667476654053], + [-2.5181403160095215, 5.620217323303223], + [1.704703450202942, -0.03501220420002937], + [1.1299891471862793, -5.36942195892334], + [3.7500767707824707, -3.050262928009033], + [-5.434327602386475, -4.106876850128174], + [-6.311855316162109, 4.029003143310547], + [-3.7942843437194824, -1.049422025680542], + [2.338453531265259, -8.210916519165039], + [-7.157721996307373, -1.2852126359939575], + [4.382340431213379, -3.797579050064087], + [-3.815924882888794, -2.0256762504577637], + [2.884645700454712, -2.7368295192718506], + [-2.5972211360931396, 2.213975429534912], + [2.6916470527648926, 6.298509120941162], + [-0.953199565410614, -1.358096718788147], + [8.011975288391113, -2.394883394241333], + [5.661615371704102, -1.0246549844741821], + [-2.271085023880005, 5.947333335876465], + [-5.697875499725342, -0.021141771227121353], + [3.0311219692230225, -4.5580010414123535], + [-4.417891025543213, -1.5928763151168823], + [-4.658581733703613, 7.374131679534912], + [-5.528409004211426, -0.2833138704299927], + [-3.9708051681518555, -1.0358117818832397], + [6.68826961517334, -2.2243740558624268], + [2.7956783771514893, -4.481689453125], + [1.91727876663208, 1.7739049196243286], + [-7.592278957366943, 9.429720878601074], + [-5.622621059417725, -3.145251989364624], + [-2.2197608947753906, 1.4225332736968994], + [-6.468943119049072, 7.828258991241455], + [2.1008079051971436, 5.326786518096924], + [0.045793257653713226, -1.1198983192443848], + [-1.2418993711471558, -0.8371732234954834], + [8.422266006469727, -2.3657009601593018], + [-5.339639186859131, -4.110154151916504], + [-3.950101613998413, 5.414803504943848], + [-4.94989538192749, 3.8748528957366943], + [-1.1926912069320679, 9.146675109863281], + [-8.476105690002441, -1.0055984258651733], + [-4.335078239440918, 7.969141006469727], + [-2.874953031539917, 1.7971464395523071], + [-5.388149261474609, 7.55345344543457], + [9.187392234802246, -2.5312116146087646], + [-3.727964162826538, -4.98798131942749], + [2.7397849559783936, -4.492557048797607], + [-5.834609031677246, 8.032441139221191], + [0.02145247906446457, 10.213187217712402], + [-4.711548328399658, -2.6251542568206787], + [6.652554988861084, -2.018542766571045], + [-1.3392746448516846, -0.7379748821258545], + [-7.264466762542725, -1.6501308679580688], + [-2.5229570865631104, 1.9178431034088135], + [2.830622673034668, -4.345483779907227], + [-0.23991936445236206, 9.320266723632812], + [-2.663586139678955, 1.725610375404358], + [-0.4876616299152374, -1.1514942646026611], + [-2.8392155170440674, 4.889524459838867], + [4.66859245300293, -1.3200682401657104], + [8.717467308044434, -2.597928762435913], + [-7.2161478996276855, -1.2183377742767334], + [-0.3415266275405884, 10.30221176147461], + [5.409593105316162, 7.88801908493042], + [3.799910306930542, 5.9981536865234375], + [1.3529727458953857, 4.770103454589844], + [-4.583179473876953, 6.783651351928711], + [-2.0718283653259277, 0.9294451475143433], + [-4.463724613189697, 3.0379135608673096], + [2.457386016845703, -7.2712812423706055], + [-3.539172410964966, 5.57075309753418], + [8.840270042419434, -2.5449559688568115], + [1.1391901969909668, 4.528048515319824], + [7.585470676422119, -2.9353106021881104], + [2.0520665645599365, -6.631138801574707], + [-3.9747893810272217, 6.298965930938721], + [-0.7629074454307556, 1.1594709157943726], + [-4.661831378936768, 7.26930570602417], + [0.3078500032424927, 6.486489295959473], + [0.2599374055862427, 8.535075187683105], + [0.7482057809829712, 5.403223037719727], + [8.226801872253418, -2.3116209506988525], + [6.328395366668701, -1.7604767084121704], + [-5.093010425567627, -1.9909883737564087], + [2.9829351902008057, -4.637977600097656], + [-4.750767230987549, -2.1290318965911865], + [-4.910192966461182, 5.075879096984863], + [-5.092244625091553, 4.8713884353637695], + [-1.962788701057434, 7.095369815826416], + [6.418909072875977, -2.6918928623199463], + [-6.738420486450195, -1.9998977184295654], + [-0.41639453172683716, 9.893545150756836], + [1.6448137760162354, 5.085643768310547], + [9.310623168945312, -2.5769026279449463], + [-2.214747905731201, 1.4115965366363525], + [5.426894187927246, -1.4110027551651], + [1.7124660015106201, 5.291008949279785], + [-0.636705219745636, 9.636270523071289], + [2.819875478744507, -4.298066139221191], + [2.6313304901123047, -7.393474102020264], + [2.362424373626709, 5.9643144607543945], + [-5.988046169281006, -1.7387573719024658], + [-0.981248140335083, -0.5901213884353638], + [0.5821711421012878, -1.3063538074493408], + [-5.05626106262207, 3.416063070297241], + [-2.443493604660034, 1.8693091869354248], + [-2.3093905448913574, 1.1120563745498657], + [-0.5005642175674438, 5.299078941345215], + [-0.5914026498794556, 10.029508590698242], + [3.2674715518951416, -4.877327919006348], + [8.321782112121582, -2.2546091079711914], + [2.699369192123413, -4.117490768432617], + [-0.5756029486656189, 11.752886772155762], + [2.6022555828094482, -7.726367950439453], + [-2.7730448246002197, -1.5186184644699097], + [2.5130412578582764, -4.100472927093506], + [-6.123105049133301, 5.891110897064209], + [9.887892723083496, -2.751026153564453], + [-3.9939868450164795, 5.15781307220459], + [-6.14845609664917, 1.9178647994995117], + [3.030749559402466, -4.721884727478027], + [-7.3139472007751465, -0.7727155685424805], + [3.4487497806549072, -5.136186599731445], + [2.5709898471832275, -3.7158024311065674], + [8.607592582702637, -2.2507569789886475], + [1.3588546514511108, 1.280584692955017], + [2.6577072143554688, -7.114084243774414], + [5.996340274810791, -0.904109537601471], + [1.680370807647705, 2.02651047706604], + [7.3505964279174805, -2.57889986038208], + [4.941431999206543, -1.8281937837600708], + [-5.959776401519775, 6.086149215698242], + [-1.2367358207702637, -0.7662705183029175], + [-3.6673665046691895, -3.480577230453491], + [2.7228286266326904, -4.16639518737793], + [-2.0647900104522705, -0.9862433075904846], + [2.873565196990967, -4.335771560668945], + [-4.923717021942139, -2.369370698928833], + [-6.082939624786377, -1.5949599742889404], + [-2.5286765098571777, -0.7302247881889343], + [-6.195550441741943, 8.33242130279541], + [3.0045783519744873, -4.529632568359375], + [2.709538221359253, -4.121469020843506], + [-4.169416904449463, -1.6263465881347656], + [2.4133479595184326, 5.983012676239014], + [-4.961467266082764, -5.842016220092773], + [2.783038854598999, -4.484686851501465], + [2.161358594894409, -5.31116247177124], + [-5.395287036895752, -3.484144449234009], + [-2.5258984565734863, 2.0993385314941406], + [-0.38380056619644165, 8.937808990478516], + [-2.489436626434326, 1.588320016860962], + [-2.109886646270752, 2.2392497062683105], + [-4.97725248336792, 7.522464275360107], + [0.5678223967552185, -0.7178136706352234], + [-5.0230584144592285, -2.62821888923645], + [2.9892022609710693, -4.637246131896973], + [-7.44033670425415, 1.059159755706787], + [-0.26581475138664246, -0.8081198930740356], + [2.3275742530822754, -3.483154296875], + [-2.185364246368408, 2.64072585105896], + [1.5448729991912842, -0.2659927308559418], + [1.8840010166168213, -5.70952033996582], + [9.87088680267334, -2.8002758026123047], + [-1.403564214706421, 5.397958755493164], + [4.032052040100098, -5.1937994956970215], + [-5.033463954925537, 0.07508987188339233], + [-0.12390507012605667, 9.567777633666992], + [3.628638505935669, -3.481698751449585], + [-5.202638149261475, 5.451662540435791], + [7.280806541442871, -2.0590646266937256], + [-4.88442850112915, 2.091886520385742], + [-5.727657794952393, -3.6583006381988525], + [6.613716125488281, -1.1371906995773315], + [3.2093021869659424, -4.79970645904541], + [2.975310802459717, -4.685998439788818], + [-4.847309112548828, -0.4088374972343445], + [2.723217725753784, 0.17020587623119354], + [2.4347856044769287, -4.071310997009277], + [2.9088962078094482, -4.420497417449951], + [3.0742814540863037, -4.60833740234375], + [-3.9338085651397705, -0.8702725172042847], + [-1.7978506088256836, 0.7972818613052368], + [6.241127014160156, -1.2892550230026245], + [-1.531156301498413, 5.812262535095215], + [-5.068454265594482, 3.1067633628845215], + [-4.316485404968262, -2.817096471786499], + [-2.4093241691589355, 1.7585008144378662], + [-6.81682825088501, -0.8846322298049927], + [-0.3705734610557556, 9.595335960388184], + [-5.108569145202637, -3.1651861667633057], + [-4.585504531860352, 3.776437520980835], + [-4.247716426849365, -2.5882999897003174], + [-5.867583274841309, 7.708205223083496], + [8.022954940795898, -2.0970354080200195], + [2.140784978866577, -5.8690385818481445], + [-3.923414707183838, 4.170939922332764], + [5.328640460968018, 7.257455825805664], + [-5.787539005279541, -1.9706428050994873], + [2.829150438308716, 4.5838518142700195], + [-2.5411736965179443, 1.0159932374954224], + [-3.1452555656433105, -2.6923983097076416], + [-2.7067692279815674, 5.403149604797363], + [8.33520221710205, -2.570303201675415], + [-5.9592790603637695, -1.7273811101913452], + [-2.1770098209381104, 1.4100220203399658], + [-4.822305202484131, 5.7449541091918945], + [-2.536714792251587, 1.8207662105560303], + [-1.9565744400024414, -1.3591821193695068], + [-3.528225898742676, 3.808394193649292], + [8.827882766723633, -2.487332820892334], + [-0.8131228685379028, -0.5640147924423218], + [2.768596649169922, -8.456704139709473], + [-2.678191661834717, -0.9070373773574829], + [4.74036169052124, -1.7082395553588867], + [-2.103196859359741, 2.4313089847564697], + [-5.268517971038818, -3.7962520122528076], + [5.792333602905273, 7.909748077392578], + [4.120683193206787, 7.3546929359436035], + [-5.816361427307129, 3.5198183059692383], + [-0.36856430768966675, 10.597893714904785], + [-4.060783863067627, -1.3856794834136963], + [8.15825366973877, -2.313460111618042], + [-2.137385845184326, 5.807085990905762], + [6.629626750946045, -1.4484217166900635], + [-4.228498935699463, -2.2621123790740967], + [4.0916032791137695, -0.48402196168899536], + [-4.7430291175842285, -4.722920894622803], + [-6.199431419372559, -1.0510064363479614], + [-0.385745644569397, 10.608964920043945], + [-4.907273292541504, -3.2456986904144287], + [-5.14902400970459, 5.602283477783203], + [2.141965866088867, -3.5985443592071533], + [-1.3099629878997803, -1.5971676111221313], + [1.9679529666900635, -7.928884506225586], + [8.389185905456543, -2.022667646408081], + [0.8411339521408081, 1.148453712463379], + [-4.269069671630859, -1.9882738590240479], + [2.630485773086548, -6.334212779998779], + [0.42445600032806396, -0.22629772126674652], + [4.181411266326904, -3.3941290378570557], + [7.445712089538574, -2.6955854892730713], + [5.793720722198486, -1.3048624992370605], + [-2.4896655082702637, 5.095191478729248], + [2.79138445854187, -4.726903915405273], + [-5.107850551605225, -3.3645169734954834], + [-5.838388919830322, 2.8707022666931152], + [-5.079511642456055, -3.4033238887786865], + [-0.4627527594566345, 9.321059226989746], + [-4.132690906524658, 5.839430332183838], + [2.499526262283325, -3.4458119869232178], + [6.22594690322876, -2.106957197189331], + [2.79114031791687, -5.249488830566406], + [-1.5545403957366943, 5.545171737670898], + [6.913523197174072, -1.460487723350525], + [-0.3298882842063904, 10.584917068481445], + [-4.611401081085205, -0.8964790105819702], + [5.583084583282471, 7.962774276733398], + [3.0575807094573975, -4.590674877166748], + [-0.12952035665512085, -1.2055103778839111], + [-7.2393059730529785, 8.790647506713867], + [0.8462461233139038, 0.3972771167755127], + [1.5325117111206055, -6.823458194732666], + [4.738160610198975, -3.6694743633270264], + [0.7460351586341858, 7.045600891113281], + [-6.717082977294922, 4.041237831115723], + [-6.89504861831665, -1.2431377172470093], + [-0.5479825139045715, 9.72523307800293], + [2.714974880218506, -4.188316345214844], + [2.909883975982666, -4.389960765838623], + [-4.40264892578125, 1.2323890924453735], + [-4.369743824005127, -2.839245557785034], + [-6.950005054473877, 8.240789413452148], + [-2.3766818046569824, 0.8989213109016418], + [0.6889834403991699, -1.5645099878311157], + [-3.964578866958618, -4.404530048370361], + [-5.489552974700928, -2.266892194747925], + [1.945556402206421, -6.890982627868652], + [2.551379919052124, -3.994307279586792], + [1.9557206630706787, 4.537776947021484], + [-1.7176964282989502, 2.27081561088562], + [-0.15099257230758667, 9.065034866333008], + [5.809805393218994, 7.0907721519470215], + [0.56314617395401, 5.565773963928223], + [-3.293748140335083, 6.244156837463379], + [2.8876895904541016, -5.063960075378418], + [6.068302631378174, -1.0908238887786865], + [2.974897623062134, -4.601677894592285], + [-3.0417444705963135, -2.281590461730957], + [3.4041247367858887, 6.590336799621582], + [-6.10232400894165, 8.08747673034668], + [-4.3216938972473145, 5.129090785980225], + [-4.359495162963867, 6.065163612365723], + [-7.789179801940918, -1.1291420459747314], + [5.005462646484375, -1.2115398645401], + [-0.38242441415786743, -1.063899040222168], + [0.8136318922042847, 0.9390488266944885], + [-3.8097763061523438, 4.459926605224609], + [1.4978961944580078, 3.343337059020996], + [-5.650723457336426, 5.082764148712158], + [-0.612637460231781, -1.6991746425628662], + [2.208282709121704, -5.07126522064209], + [-4.735898971557617, -2.4125077724456787], + [2.1771841049194336, -8.738452911376953], + [1.2999805212020874, 5.5917205810546875], + [-0.5405763983726501, 9.702899932861328], + [1.5390725135803223, 5.219874382019043], + [2.7180259227752686, -4.084831237792969], + [-2.7616379261016846, 0.2206311821937561], + [3.9253756999969482, -2.715744733810425], + [-5.3092780113220215, 7.204588890075684], + [5.707635879516602, -1.1960408687591553], + [-2.0430660247802734, 2.387071132659912], + [-4.990196704864502, 8.01786994934082], + [-0.17302507162094116, 10.701088905334473], + [3.186746835708618, -4.7708587646484375], + [2.0180230140686035, -5.055956840515137], + [0.27992022037506104, 7.954065322875977], + [2.825251340866089, -4.4365739822387695], + [0.22710704803466797, 4.8748908042907715], + [-5.287325859069824, -3.7512800693511963], + [-5.276128768920898, 6.287445068359375], + [-4.8569207191467285, -1.172014832496643], + [4.7365522384643555, 7.576552391052246], + [-5.143456935882568, 0.6474987864494324], + [1.5394644737243652, -4.289390563964844], + [-0.4011349081993103, 11.365412712097168], + [-6.650545120239258, -1.7685483694076538], + [-3.6012418270111084, -2.037235975265503], + [3.4012274742126465, -5.068394660949707], + [-4.18992280960083, -3.9448912143707275], + [-4.465511322021484, -1.5725185871124268], + [-4.082632541656494, -4.031554698944092], + [-2.349029302597046, 1.6609437465667725], + [-4.758083343505859, -2.064227819442749], + [-2.1579205989837646, -0.9310508966445923], + [-4.803091526031494, 1.7241636514663696], + [-5.934014320373535, -2.9031240940093994], + [-3.593975067138672, -3.7042646408081055], + [-2.3492519855499268, 1.9315658807754517], + [-5.142667293548584, -3.1530539989471436], + [-4.460558891296387, 4.845842361450195], + [2.7440102100372314, -4.150369644165039], + [6.004493236541748, -1.8035826683044434], + [-5.754158020019531, 4.652619361877441], + [-6.010281085968018, -1.386593222618103], + [-1.6155718564987183, -0.7072923183441162], + [-2.4150729179382324, -3.1718106269836426], + [-0.49457988142967224, -1.04487144947052], + [-5.795693874359131, -1.9690459966659546], + [-4.4647216796875, -1.932315707206726], + [-0.31022340059280396, 10.377715110778809], + [-4.707141399383545, 5.481816291809082], + [-2.104313850402832, 2.6401102542877197], + [7.934005260467529, -2.5278677940368652], + [-3.323627233505249, -1.2703818082809448], + [-7.001861572265625, 1.41627037525177], + [1.8831148147583008, -7.694952011108398], + [-7.108489036560059, 8.683883666992188], + [7.611629962921143, -1.986985683441162], + [4.572361946105957, 7.163156032562256], + [3.1403825283050537, -4.697525978088379], + [-5.197179794311523, 1.7332042455673218], + [-2.4474425315856934, 1.0071133375167847], + [-4.951033592224121, -3.8887112140655518], + [-3.6864354610443115, 5.7910919189453125], + [-5.181114196777344, 1.7693724632263184], + [-0.27322977781295776, 10.801998138427734], + [-7.23195219039917, 9.11144733428955], + [0.527428925037384, -6.34758186340332], + [-0.6139289140701294, -2.4701602458953857], + [1.4904913902282715, 5.13654899597168], + [0.14812442660331726, 3.9792392253875732], + [-3.9785358905792236, -3.0455243587493896], + [1.701066017150879, 5.330480575561523], + [-2.6521756649017334, 1.2982521057128906], + [-2.5766756534576416, 0.9931665658950806], + [-1.0972036123275757, 1.5360428094863892], + [2.708939790725708, -4.1653666496276855], + [-4.968262195587158, -2.948235273361206], + [-6.007313251495361, 8.260025024414062], + [-6.211244583129883, -1.756732702255249], + [-4.4736199378967285, -2.6342642307281494], + [-0.21772152185440063, 10.352932929992676], + [0.008406035602092743, -3.2758209705352783], + [-0.8359097242355347, -1.5822224617004395], + [-2.3730671405792236, 0.9544856548309326], + [-2.981431722640991, -4.077370643615723], + [7.330377101898193, -1.788612723350525], + [1.9166921377182007, 4.556412220001221], + [8.967114448547363, -2.4162700176239014], + [-4.424829959869385, 0.08672690391540527], + [-2.1542611122131348, 2.7398059368133545], + [9.708624839782715, -2.6548235416412354], + [-3.983609437942505, 5.636059761047363], + [-2.515507698059082, 2.064164161682129], + [8.832232475280762, -2.6648943424224854], + [-3.895923614501953, -2.2942004203796387], + [2.2158186435699463, 4.569154739379883], + [2.4374401569366455, -3.8616015911102295], + [-0.2410030961036682, 10.688248634338379], + [-5.707726955413818, 6.3920135498046875], + [-4.395992755889893, -3.3907179832458496], + [-2.9327762126922607, -1.845064401626587], + [-3.9706013202667236, 6.728471755981445], + [2.300706148147583, -4.116671085357666], + [-0.5026369690895081, 9.156497955322266], + [6.872702121734619, -1.8169208765029907], + [2.727843999862671, -8.569316864013672], + [-2.9299099445343018, 5.933897018432617], + [1.891418695449829, -8.915193557739258], + [6.411188125610352, -5.213039875030518], + [2.805989980697632, -4.622074604034424], + [-2.4615824222564697, -3.1361501216888428], + [-5.365589141845703, 1.3537774085998535], + [2.416290044784546, -7.606027603149414], + [6.546281814575195, -1.402732014656067], + [0.7277255058288574, -6.798949241638184], + [3.1699321269989014, -4.740211486816406], + [4.1361918449401855, -0.9881075620651245], + [2.827070951461792, -4.280512809753418], + [-4.865603446960449, -1.020159125328064], + [-4.10552978515625, -3.4121716022491455], + [-0.22100383043289185, 10.572542190551758], + [1.2619863748550415, 6.029501914978027], + [3.037574291229248, -6.2370758056640625], + [5.661889553070068, -0.4662083089351654], + [2.571489095687866, -4.102157115936279], + [2.943969488143921, -4.729990005493164], + [-5.815750598907471, 5.84489107131958], + [0.5071808695793152, -0.5836712121963501], + [-4.7435221672058105, 2.0140912532806396], + [-5.084118366241455, -4.475847244262695], + [-5.487666130065918, -2.746126413345337], + [8.842111587524414, -2.4883906841278076], + [-6.603123188018799, -2.0139644145965576], + [2.92642879486084, -4.561728477478027], + [-2.552361249923706, -2.6750667095184326], + [2.873387575149536, -6.72769832611084], + [-4.850559234619141, -1.9335262775421143], + [2.7612969875335693, -4.183799743652344], + [1.3474133014678955, -6.777010917663574], + [4.9817070960998535, -4.181872367858887], + [9.816479682922363, -2.7033565044403076], + [1.1565041542053223, -5.6459455490112305], + [-4.184230327606201, 3.0233025550842285], + [5.411544322967529, -2.664640188217163], + [3.4986884593963623, 0.7164871692657471], + [2.9215548038482666, -4.42362642288208], + [-3.9809749126434326, 5.911604404449463], + [6.999720096588135, -2.1700432300567627], + [-4.213964939117432, 7.088075637817383], + [1.1603842973709106, 1.485643982887268], + [5.113775253295898, 7.11122465133667], + [1.8429127931594849, -8.696285247802734], + [1.3425805568695068, -4.897055625915527], + [0.8464406132698059, -5.320409774780273], + [-0.38361865282058716, 9.684515953063965], + [-1.0122137069702148, 0.04005178436636925], + [-4.271732330322266, -1.4391326904296875], + [3.971087694168091, 6.872286319732666], + [-5.235848903656006, -4.105634689331055], + [-4.584824085235596, -4.001389503479004], + [2.3629229068756104, -8.472949981689453], + [10.131335258483887, -2.812910795211792], + [-3.1203057765960693, 6.51921272277832], + [8.813565254211426, -2.3989241123199463], + [-4.007801532745361, -2.4269862174987793], + [3.980055570602417, -1.8940768241882324], + [-4.820124626159668, 6.879068851470947], + [6.244253158569336, -1.8241075277328491], + [-7.18999719619751, -1.2643393278121948], + [-5.142025470733643, -3.332547903060913], + [1.0585843324661255, 5.921337604522705], + [0.658363938331604, 8.873507499694824], + [-2.909076452255249, -4.83795166015625], + [-4.8349528312683105, 1.5222872495651245], + [-3.6495935916900635, -3.586693525314331], + [-1.4181361198425293, -0.4786317050457001], + [1.4970511198043823, -8.18187427520752], + [2.6233177185058594, -3.956019163131714], + [-7.816380023956299, 1.1833223104476929], + [-4.018073081970215, -2.3069355487823486], + [-0.9034066796302795, 5.154611110687256], + [-5.121816158294678, -3.3239152431488037], + [-5.688192844390869, -2.985045909881592], + [-5.252928256988525, -2.5945253372192383], + [4.600475311279297, 2.0551719665527344], + [7.266473293304443, -1.6263025999069214], + [-4.43191385269165, -3.3831682205200195], + [-4.755125522613525, 4.901743412017822], + [5.513216495513916, -1.0472460985183716], + [-4.906955242156982, 6.004894256591797], + [-6.317831516265869, -1.8141337633132935], + [-1.440182089805603, 0.7335850596427917], + [2.889516592025757, 6.201366424560547], + [-5.569518566131592, -3.750131368637085], + [-3.0956811904907227, -1.1949741840362549], + [-1.8093416690826416, 1.2445687055587769], + [-5.569363594055176, 7.966915130615234], + [-6.928244113922119, 8.67972183227539], + [-5.404737949371338, -3.2548811435699463], + [8.298117637634277, -2.24863338470459], + [-0.2719666063785553, -0.9101006388664246], + [-0.34788423776626587, -1.3496230840682983], + [-1.8686704635620117, 4.5796308517456055], + [6.807081699371338, -3.9330551624298096], + [-2.582801342010498, 3.0144898891448975], + [5.681273937225342, -2.2761619091033936], + [-4.6568732261657715, -2.2344093322753906], + [1.8585140705108643, 5.4831743240356445], + [-1.195687174797058, -0.6679315567016602], + [-0.40756386518478394, 10.57094955444336], + [0.42131680250167847, -0.08439727127552032], + [7.7795891761779785, -2.5310072898864746], + [5.640422821044922, -1.363424301147461], + [2.020442485809326, 4.720414161682129], + [8.202763557434082, -2.182008981704712], + [-2.8512842655181885, -2.297029733657837], + [0.9622815251350403, 0.18033485114574432], + [2.973930835723877, -4.497437000274658], + [-0.40292924642562866, 11.224632263183594], + [1.250497579574585, -6.477461338043213], + [2.6848926544189453, -4.096876621246338], + [2.7081713676452637, -3.96828293800354], + [-2.7656848430633545, -1.856532096862793], + [-5.127437114715576, 3.416192054748535], + [-5.09328031539917, -3.378545045852661], + [-4.832719326019287, -3.1212446689605713], + [-0.6483216881752014, 11.245260238647461], + [-5.078098297119141, 7.163926601409912], + [-4.1392741203308105, -1.0532249212265015], + [-8.167241096496582, -0.934794545173645], + [7.706542491912842, -1.7772263288497925], + [-2.0703675746917725, 2.2457807064056396], + [-3.595914125442505, 4.736566066741943], + [1.210012435913086, -5.389719009399414], + [-5.870029926300049, -2.2593767642974854], + [-8.003393173217773, -2.1799516677856445], + [-4.289087772369385, -1.1399766206741333], + [1.2085580825805664, 0.8558703064918518], + [3.1617496013641357, -8.624675750732422], + [0.3175109624862671, -0.5725142955780029], + [-8.585994720458984, -1.2388060092926025], + [-7.022383689880371, 8.656881332397461], + [-5.684365749359131, -3.442176103591919], + [7.259964942932129, -1.8781055212020874], + [-4.388198375701904, 5.585201263427734], + [-2.2308671474456787, 3.0882651805877686], + [-7.569947719573975, 0.17744314670562744], + [-3.9554882049560547, -3.264366388320923], + [-5.6921586990356445, -2.1091017723083496], + [-5.623412609100342, -0.9078533053398132], + [2.8086912631988525, -6.208802223205566], + [1.3404178619384766, -6.033688545227051], + [-0.23212265968322754, 9.18212890625], + [-0.9269018769264221, -0.38433024287223816], + [-4.540654182434082, 3.3783321380615234], + [-2.0882081985473633, -0.6345798969268799], + [-0.578495442867279, 11.100801467895508], + [-5.05736780166626, -4.7062087059021], + [0.6750274300575256, -0.16604068875312805], + [-2.111999273300171, 2.2565722465515137], + [-6.298715114593506, -0.007108811289072037], + [2.5053188800811768, 4.911552429199219], + [1.2933118343353271, -6.381983757019043], + [-2.932096242904663, -1.246896505355835], + [0.8807735443115234, -5.651175498962402], + [-4.761764049530029, 6.981114387512207], + [-5.497396469116211, 1.6955934762954712], + [-4.7207746505737305, -2.5182182788848877], + [7.867360591888428, -2.5449492931365967], + [-5.588201999664307, -3.172339677810669], + [6.6228251457214355, -1.4324352741241455], + [-0.049308426678180695, -0.9736586809158325], + [2.863802671432495, -6.180732250213623], + [-2.1646668910980225, 1.672589659690857], + [7.8871026039123535, -2.2252542972564697], + [-2.172717809677124, -1.6240614652633667], + [-0.40453559160232544, 9.609590530395508], + [-7.5324249267578125, -0.950634777545929], + [-1.781358242034912, 2.528113603591919], + [0.8740683197975159, 5.575887680053711], + [2.7389676570892334, -3.5843307971954346], + [-0.14577645063400269, -1.3757718801498413], + [-4.868056774139404, -1.030935525894165], + [-1.7245687246322632, -1.3361250162124634], + [-1.5962388515472412, 1.896195411682129], + [-0.5483299493789673, -0.7188092470169067], + [-0.2621764540672302, 9.57083511352539], + [-4.308775901794434, 5.580498695373535], + [1.5219535827636719, 5.7627763748168945], + [-4.246331214904785, -3.8283984661102295], + [-6.5365424156188965, -1.4633997678756714], + [-4.6895270347595215, -3.3748514652252197], + [1.6443908214569092, 5.871688365936279], + [6.531179428100586, -3.2459280490875244], + [1.1322100162506104, 4.12518310546875], + [-2.8479321002960205, 3.061558723449707], + [-5.6161885261535645, -0.5663926005363464], + [-4.012572765350342, -3.275352954864502], + [6.63799524307251, -1.4101784229278564], + [6.147668361663818, -1.4611262083053589], + [1.4708441495895386, 5.159989833831787], + [-6.500661373138428, -0.33584916591644287], + [-4.241316795349121, -2.9166996479034424], + [-2.688089609146118, 0.46640557050704956], + [-4.734394550323486, -2.6708574295043945], + [-0.887287437915802, -0.692122220993042], + [-0.8730130791664124, -0.6539424657821655], + [-5.590672016143799, 6.933185577392578], + [5.083935260772705, -1.1434171199798584], + [-4.487661838531494, -2.242338180541992], + [-5.879314422607422, 7.6797261238098145], + [2.1307127475738525, 4.778620719909668], + [-0.16313201189041138, 10.270784378051758], + [2.786039113998413, -7.93113899230957], + [-4.520508766174316, 3.983288526535034], + [8.484440803527832, -2.4328694343566895], + [-0.2467048466205597, -1.0385397672653198], + [-2.0757765769958496, 2.349428415298462], + [7.868475437164307, -2.149056911468506], + [2.666029691696167, -6.9628400802612305], + [0.36176106333732605, -5.127945899963379], + [-0.4148016571998596, 10.275362014770508], + [7.502035617828369, -2.5253400802612305], + [6.256351947784424, -2.7718913555145264], + [-3.6882832050323486, -2.2000386714935303], + [-4.012747287750244, -3.7138302326202393], + [-0.1311408281326294, 9.267329216003418], + [-2.977642297744751, 0.6306308507919312], + [-0.4724479913711548, -1.2696670293807983], + [-2.0896761417388916, 5.652748107910156], + [-0.6466405391693115, 9.415121078491211], + [2.7986738681793213, -4.28330659866333], + [0.15347641706466675, 9.874756813049316], + [-0.1949276328086853, 9.526578903198242], + [2.6809585094451904, 4.07883882522583], + [-3.29132342338562, 3.6410396099090576], + [-4.196329593658447, -2.338561534881592], + [-0.20747041702270508, 9.683380126953125], + [1.794434666633606, -5.112331390380859], + [-2.560961961746216, 2.3510665893554688], + [-2.4154717922210693, 1.9810370206832886], + [0.6211112141609192, -0.4280465245246887], + [-0.1368357539176941, 9.784385681152344], + [1.7405537366867065, 5.390533447265625], + [-8.004783630371094, -0.8297989368438721], + [-5.156872749328613, 3.3449418544769287], + [-2.474579095840454, 1.6850236654281616], + [-6.207910060882568, 7.895394802093506], + [2.7989501953125, 6.171686172485352], + [2.0540521144866943, -9.18474292755127], + [0.06773447245359421, 0.6922584772109985], + [-0.8860923647880554, -0.5773477554321289], + [4.631836414337158, -5.254977703094482], + [2.220794916152954, 0.7685551643371582], + [-7.596802234649658, 9.264184951782227], + [-5.474059104919434, -4.604716777801514], + [0.8982835412025452, -6.1133527755737305], + [1.4951891899108887, 5.269645690917969], + [7.445532321929932, -2.6985459327697754], + [-1.5155763626098633, 1.6390312910079956], + [-3.000309705734253, 5.197096824645996], + [-6.451125144958496, 7.7564311027526855], + [2.2570383548736572, 5.514130592346191], + [-3.9525909423828125, 5.825106620788574], + [-4.9506635665893555, -4.082433700561523], + [-2.9710569381713867, -1.5024372339248657], + [-1.4039380550384521, 1.3308708667755127], + [-4.267008304595947, 7.488643646240234], + [8.567052841186523, -2.3770647048950195], + [-0.1594676971435547, 8.844573974609375], + [-5.255897045135498, 3.1235225200653076], + [1.3271195888519287, 5.0273637771606445], + [2.611847162246704, -3.89929461479187], + [-3.5036089420318604, -2.4378695487976074], + [-0.3669716715812683, 10.255064964294434], + [-2.4831299781799316, 0.20185106992721558], + [-0.41334977746009827, 8.752286911010742], + [-7.912863254547119, -1.574123740196228], + [-4.75872278213501, -3.1470396518707275], + [-2.350633382797241, 2.0195817947387695], + [2.859621286392212, -4.495668411254883], + [3.139676094055176, -4.702751636505127], + [-0.32450586557388306, 9.334152221679688], + [-4.064764976501465, -3.0857598781585693], + [-9.356493949890137, -0.6616621017456055], + [-6.074349880218506, -2.375276565551758], + [-3.3160817623138428, 5.047658443450928], + [9.818819046020508, -2.6967265605926514], + [-2.897559404373169, 5.200634002685547], + [-5.019077777862549, 3.1198782920837402], + [-4.648949146270752, -3.0139405727386475], + [2.8240556716918945, -4.105258941650391], + [-2.3103349208831787, 0.8010071516036987], + [-0.893941342830658, 9.351982116699219], + [-5.308959484100342, -2.0206258296966553], + [1.8404468297958374, -9.264808654785156], + [2.180058479309082, -3.8654420375823975], + [1.671218752861023, -8.894786834716797], + [0.9205980896949768, -6.1634440422058105], + [7.279598236083984, -3.5445621013641357], + [-0.27634674310684204, 9.512794494628906], + [0.5778260827064514, -4.980113983154297], + [2.7067711353302, -4.094769477844238], + [1.8041211366653442, -8.547128677368164], + [-3.8383305072784424, -4.096254348754883], + [3.1013336181640625, 4.458612442016602], + [-3.4785118103027344, 5.591391563415527], + [-3.7952945232391357, 6.299620628356934], + [3.222210168838501, -4.818999290466309], + [-4.137072563171387, -2.9821932315826416], + [-0.030158795416355133, 0.445569783449173], + [-3.597151517868042, -2.9110219478607178], + [-4.094111442565918, -0.5140082836151123], + [-6.95718240737915, 8.955867767333984], + [-5.2077107429504395, -3.2829790115356445], + [-5.297184944152832, 2.7467262744903564], + [0.183077871799469, -0.3954486548900604], + [4.679112434387207, 7.108730316162109], + [-4.936862468719482, 7.27658224105835], + [-2.3734257221221924, 2.27935528755188], + [6.510476112365723, -1.4968012571334839], + [-3.3261168003082275, -1.1616781949996948], + [6.603168487548828, -1.2218903303146362], + [-4.542655944824219, -0.7919338941574097], + [1.3727097511291504, -4.413790225982666], + [1.0610599517822266, -0.006538603454828262], + [3.27345871925354, 0.4596925973892212], + [-0.2732791304588318, 10.25113582611084], + [1.6868594884872437, -6.815537452697754], + [-2.6964704990386963, -2.193363666534424], + [-6.288745403289795, 1.3510454893112183], + [1.1144349575042725, -7.285879611968994], + [-5.6460981369018555, -4.207843780517578], + [-3.5210649967193604, -2.696169137954712], + [2.757408857345581, 1.044026494026184], + [2.3146378993988037, -3.6478431224823], + [7.020984172821045, -2.328481674194336], + [-2.8252265453338623, -3.3685731887817383], + [6.752880573272705, -1.4751266241073608], + [-5.365774631500244, -2.485914468765259], + [-6.358052730560303, -2.2418088912963867], + [2.6978230476379395, 0.808364987373352], + [-5.1715264320373535, 4.676323890686035], + [-5.039524555206299, -0.9614530801773071], + [2.2613518238067627, -5.967352867126465], + [-2.3373477458953857, 6.795962810516357], + [0.01247616857290268, -0.27511870861053467], + [-0.1132102683186531, -0.8228931427001953], + [-6.206593990325928, -2.239910364151001], + [9.366398811340332, -2.6366097927093506], + [2.1363651752471924, -10.17041301727295], + [-2.9018876552581787, -3.5680434703826904], + [-2.378699541091919, 1.737683892250061], + [2.230550527572632, 4.507826328277588], + [-5.039517879486084, -3.0491836071014404], + [-1.276408314704895, 9.992691040039062], + [8.32093334197998, -2.1116998195648193], + [2.5425455570220947, -3.945035696029663], + [-0.5234087109565735, 9.73598575592041], + [-6.722240924835205, 8.108880996704102], + [8.811710357666016, -2.5501549243927], + [-5.956274509429932, 2.0510685443878174], + [-4.790492534637451, 1.1702643632888794], + [-1.748165488243103, 7.863067150115967], + [-4.4501471519470215, 2.953508138656616], + [8.440916061401367, -2.4034388065338135], + [3.262338399887085, -5.222370147705078], + [2.770104169845581, -4.2330780029296875], + [-4.284958362579346, -5.419419288635254], + [-2.6933138370513916, -3.0841190814971924], + [-0.1244608536362648, -0.9087424278259277], + [2.763690710067749, -4.2581281661987305], + [-8.85669994354248, -0.9469481706619263], + [8.932412147521973, -2.4519593715667725], + [3.3195230960845947, 1.4431118965148926], + [-4.595273971557617, -3.813011407852173], + [-0.6224156618118286, 0.04101313278079033], + [1.9944429397583008, 3.5832347869873047], + [-3.0522849559783936, 2.6175012588500977], + [3.1616528034210205, -4.77384090423584], + [6.545830249786377, -1.2797502279281616], + [-8.566330909729004, -0.668838381767273], + [2.9029901027679443, 1.3980659246444702], + [-7.09782075881958, -1.272932529449463], + [2.371265172958374, -3.6251704692840576], + [-0.3445398211479187, 9.682233810424805], + [9.019307136535645, -2.3615498542785645], + [-8.332656860351562, -1.8982304334640503], + [-3.8836112022399902, -2.569138526916504], + [3.0315287113189697, -4.577998638153076], + [-7.820695400238037, -1.337776780128479], + [-1.0959417819976807, 7.527438640594482], + [-4.332768440246582, -4.775842666625977], + [2.950260877609253, -4.666852951049805], + [-7.651180744171143, -1.9640787839889526], + [-0.12568402290344238, 9.965624809265137], + [-2.5008187294006348, 1.553394079208374], + [0.3941163420677185, -0.12298968434333801], + [-4.480912685394287, -2.619654417037964], + [1.735386848449707, 5.487637519836426], + [4.6757378578186035, -0.7790879011154175], + [-0.3988744616508484, 9.075435638427734], + [-5.851769924163818, -1.361742377281189], + [-2.49560546875, 0.5444756746292114], + [-5.782869815826416, 7.020418167114258], + [1.899483323097229, -9.019309997558594], + [7.986225605010986, -2.3660757541656494], + [-3.429985761642456, -5.270159721374512], + [-2.731705665588379, 4.885677337646484], + [-5.437554359436035, -2.5501677989959717], + [3.0640766620635986, -4.597208499908447], + [-6.836503028869629, 8.374605178833008], + [1.4340307712554932, -7.447999000549316], + [7.3745927810668945, -1.791649580001831], + [-4.995971202850342, -2.9027750492095947], + [-3.1576592922210693, 5.951028823852539], + [9.58346939086914, -2.6065785884857178], + [8.364128112792969, -3.3639938831329346], + [-6.429945468902588, -2.1344568729400635], + [-0.1722075343132019, -1.2662798166275024], + [6.434204578399658, -1.5898869037628174], + [-2.5387890338897705, 1.7242710590362549], + [-2.39310884475708, 1.773400902748108], + [-5.450753688812256, 7.992853164672852], + [-4.987123966217041, -4.188816070556641], + [5.216407299041748, -2.628783941268921], + [-3.940394639968872, -0.9516220092773438], + [8.829376220703125, -2.4476706981658936], + [-0.3039025068283081, 10.773015975952148], + [1.5767643451690674, -7.3995361328125], + [5.884829998016357, 7.96318244934082], + [1.6521434783935547, 5.491547584533691], + [-2.351844072341919, 2.0830235481262207], + [-0.3281490206718445, 9.39821720123291], + [-0.2694362998008728, 9.121366500854492], + [-3.042865037918091, -3.2371344566345215], + [-6.731594085693359, 8.78764820098877], + [0.4142000675201416, -5.233239650726318], + [-5.5985236167907715, 6.517357349395752], + [-5.517543315887451, 4.105435848236084], + [-2.5484564304351807, -2.7008516788482666], + [-4.289584636688232, -1.024438500404358], + [-5.331685543060303, 4.30094051361084], + [-0.7458276748657227, 1.1437265872955322], + [-3.7453503608703613, -3.354539632797241], + [-2.1730408668518066, 0.9075247049331665], + [2.726555347442627, 6.975529670715332], + [-2.193542957305908, 0.68226158618927], + [-8.423264503479004, -0.8188647031784058], + [-0.1855831742286682, 10.572866439819336], + [3.410184860229492, -5.4189300537109375], + [4.959150791168213, -1.3239399194717407], + [-3.4077389240264893, 6.35833740234375], + [-0.8160056471824646, 9.400166511535645], + [-5.05967378616333, -1.4650133848190308], + [-2.724621057510376, 2.7723958492279053], + [2.4811224937438965, -3.8869845867156982], + [-4.330688953399658, -2.412318468093872], + [-0.951637327671051, -0.7012989521026611], + [-2.890558958053589, -2.9730024337768555], + [3.3059372901916504, 6.432151794433594], + [1.8191380500793457, 0.9881612062454224], + [-2.120725631713867, 2.2807815074920654], + [9.054413795471191, -2.4144234657287598], + [-0.060330577194690704, 8.46660327911377], + [3.2826991081237793, -4.906929969787598], + [2.888901710510254, -8.346536636352539], + [4.430526256561279, -1.1155067682266235], + [2.2574708461761475, -5.990169048309326], + [-2.5911645889282227, 1.6074631214141846], + [-2.4616663455963135, 1.4144184589385986], + [-4.640437602996826, -4.269829750061035], + [8.726164817810059, -2.2429373264312744], + [-5.170943737030029, 1.4317644834518433], + [-1.7385278940200806, -2.782464027404785], + [-2.68375563621521, 3.5812184810638428], + [-2.989093542098999, 0.316011905670166], + [2.0111043453216553, -8.040289878845215], + [-0.43280667066574097, 11.757546424865723], + [-0.5903298854827881, 8.438483238220215], + [-4.759260177612305, 5.009916305541992], + [-4.748273849487305, -4.129116535186768], + [8.866820335388184, -2.887310266494751], + [-6.690993785858154, 2.085991382598877], + [0.7770090103149414, 0.46210771799087524], + [-0.1984843611717224, 9.851217269897461], + [-5.448819637298584, -0.959718644618988], + [-5.588328838348389, -2.1930525302886963], + [-0.3655449450016022, 5.76877498626709], + [2.3434784412384033, -3.7650210857391357], + [1.7346112728118896, -7.548277378082275], + [-1.710471510887146, 5.607292175292969], + [-2.0843617916107178, 0.504328727722168], + [-2.4770004749298096, 1.5564101934432983], + [-4.301805019378662, -2.6621217727661133], + [-2.8320796489715576, -2.183819055557251], + [-4.443100452423096, 0.5169217586517334], + [3.0204224586486816, -5.035190582275391], + [-0.8037075400352478, 1.0138347148895264], + [3.743497610092163, -4.408428192138672], + [-4.195451259613037, -6.244878768920898], + [-5.60930871963501, 2.399737596511841], + [-0.45141416788101196, 1.2082453966140747], + [-5.7068352699279785, 2.861027240753174], + [-3.279744863510132, -5.048127174377441], + [0.5350814461708069, -6.1613311767578125], + [-2.521549940109253, -0.9772477149963379], + [3.115830659866333, -4.681166648864746], + [9.446764945983887, -2.597223997116089], + [8.763800621032715, -2.7778713703155518], + [-5.447281837463379, -2.907216787338257], + [8.177791595458984, -2.241333484649658], + [7.286559581756592, -1.9119017124176025], + [6.254730701446533, -2.133683681488037], + [-4.985397815704346, -3.255171537399292], + [1.5728962421417236, 6.097038269042969], + [-5.057274341583252, -2.1652891635894775], + [8.330229759216309, -2.7023696899414062], + [1.835059642791748, 1.0075973272323608], + [-10.000845909118652, -0.8575963973999023], + [6.12795877456665, -1.616418719291687], + [-5.636751651763916, -0.2257562279701233], + [-0.186942458152771, -1.0413237810134888], + [3.136746883392334, -4.69516658782959], + [-0.1465107798576355, 10.075620651245117], + [9.876296997070312, -2.747046709060669], + [-4.335287094116211, 6.394620418548584], + [-2.6943557262420654, 0.4775078296661377], + [6.204495906829834, -3.092437982559204], + [-2.3975377082824707, 2.5182669162750244], + [2.7760441303253174, -4.198574542999268], + [2.5229291915893555, -5.693950653076172], + [-3.672762632369995, -5.024554252624512], + [-6.138019561767578, 2.4007229804992676], + [1.4774234294891357, -7.542109489440918], + [-7.009920120239258, -1.808970332145691], + [-3.585289716720581, -1.9857478141784668], + [3.2152669429779053, 6.245661735534668], + [3.052748203277588, -4.812684059143066], + [1.0900530815124512, -7.282054424285889], + [3.0865283012390137, -4.779096603393555], + [-5.568874835968018, -4.359206199645996], + [-4.3250932693481445, 7.840395927429199], + [-2.6158769130706787, 6.453864097595215], + [9.34080982208252, -2.5993359088897705], + [0.884638249874115, -0.3062153160572052], + [-2.9375154972076416, 3.1714894771575928], + [0.6339661478996277, 5.851705074310303], + [5.759467601776123, -1.7109273672103882], + [-3.414567232131958, 6.527609348297119], + [-5.973654270172119, 7.686861515045166], + [-0.30919063091278076, -1.4611396789550781], + [2.5145089626312256, 5.998047351837158], + [7.789222240447998, -1.956597924232483], + [-4.786905765533447, -2.2159016132354736], + [5.280610084533691, -0.7486377954483032], + [3.071946382522583, -4.6649580001831055], + [-4.571052074432373, -2.6806552410125732], + [-6.9832682609558105, 8.467884063720703], + [2.498344659805298, 0.49973249435424805], + [2.9763729572296143, -4.854322910308838], + [-0.1824193000793457, 11.151026725769043], + [-3.3940834999084473, -1.8283002376556396], + [-0.5008821487426758, 9.624141693115234], + [-3.850642681121826, 0.7079042196273804], + [-0.25459688901901245, 9.798096656799316], + [2.392141103744507, 4.892398357391357], + [1.820412039756775, 0.7484126091003418], + [-2.3961148262023926, -1.0477060079574585], + [-0.15381884574890137, 9.653854370117188], + [6.3249077796936035, -1.3212100267410278], + [-5.260138988494873, -3.152470827102661], + [-4.348729610443115, 4.509635925292969], + [9.1774320602417, -2.5645642280578613], + [-4.094287395477295, 3.0752134323120117], + [-6.228811740875244, 5.279173851013184], + [6.029450416564941, 7.891243934631348], + [7.580423355102539, -1.661191701889038], + [1.9734971523284912, -7.865242004394531], + [7.739527225494385, -1.9868043661117554], + [8.972620964050293, -2.4977080821990967], + [-4.186108589172363, -1.655398964881897], + [2.2732431888580322, 4.893743515014648], + [-6.736175537109375, -2.622163772583008], + [-0.14086049795150757, 9.732738494873047], + [-4.568405628204346, -4.810294151306152], + [-1.6701607704162598, -0.2903550863265991], + [-4.078673362731934, 6.061680793762207], + [-5.798567295074463, 4.485212326049805], + [-0.7657372355461121, 9.825918197631836], + [-0.026940234005451202, 5.140305995941162], + [-0.5578461289405823, 6.2378926277160645], + [-3.9923670291900635, -1.2524919509887695], + [-0.5221102237701416, 10.626201629638672], + [-5.139287948608398, -2.9919145107269287], + [-4.900781154632568, -2.4112865924835205], + [-5.459049701690674, -4.397517204284668], + [-2.312314748764038, 1.524448037147522], + [2.0839359760284424, 5.411818981170654], + [-5.181705951690674, 4.36757755279541], + [-5.600694179534912, 1.2310872077941895], + [-3.975583791732788, 0.062077637761831284], + [8.363669395446777, -2.629143476486206], + [-0.5201169848442078, 11.949844360351562], + [-6.585268497467041, 2.8270325660705566], + [-4.723437786102295, -4.2966508865356445], + [2.57568621635437, -4.1586222648620605], + [8.783967971801758, -2.4457621574401855], + [-4.228854179382324, -1.3201900720596313], + [-2.010944128036499, 1.4837409257888794], + [-6.573349475860596, 1.537124514579773], + [5.921349048614502, 8.049320220947266], + [-5.694993495941162, 6.377118110656738], + [-4.298022270202637, -2.460761308670044], + [-4.6629319190979, 4.736806392669678], + [2.379859685897827, -3.6356523036956787], + [-1.96001398563385, -2.6498830318450928], + [-5.811312198638916, -0.26833224296569824], + [-2.0454320907592773, -2.5682880878448486], + [2.1712706089019775, -4.845272541046143], + [0.09325512498617172, -1.1058415174484253], + [2.7249910831451416, -5.364213943481445], + [-7.047488689422607, 8.664907455444336], + [-0.15888267755508423, 10.492456436157227], + [-2.7390730381011963, 2.073716402053833], + [-0.1976180076599121, 9.52667236328125], + [2.9899938106536865, -4.504404544830322], + [1.7766962051391602, 5.8172502517700195], + [-2.4778664112091064, 1.3113676309585571], + [-7.360649585723877, 8.930991172790527], + [-6.002298831939697, 2.7734014987945557], + [-2.4302186965942383, 0.7799888253211975], + [2.7997164726257324, -4.2841949462890625], + [-2.2865545749664307, 1.5922040939331055], + [-2.516195297241211, 1.0551761388778687], + [-7.381873607635498, -1.9553357362747192], + [2.040764093399048, -2.9140641689300537], + [2.0271785259246826, -9.407196044921875], + [-4.943941593170166, 7.130607604980469], + [-0.8442546725273132, 9.651689529418945], + [6.91296911239624, -3.9082908630371094], + [-3.8195531368255615, -1.078258991241455], + [-2.1980135440826416, -2.5245065689086914], + [-2.3833892345428467, 1.6977659463882446], + [-1.8851966857910156, 1.4877276420593262], + [1.591125249862671, -4.904234886169434], + [7.420494556427002, -3.9511373043060303], + [2.766033887863159, -5.181903839111328], + [-4.546449661254883, -2.820003032684326], + [-5.187783718109131, -2.825728416442871], + [-6.768995761871338, 8.52782917022705], + [7.060426712036133, -2.7775790691375732], + [-2.7415988445281982, 2.893203020095825], + [-5.448791980743408, -6.309319019317627], + [3.011186122894287, -4.536651611328125], + [-0.4704161286354065, 6.174343109130859], + [-2.986081123352051, 3.0535244941711426], + [0.5080609917640686, 0.47586894035339355], + [-1.427443265914917, -2.176941394805908], + [0.17779994010925293, -0.6818249821662903], + [1.0511318445205688, 5.747615337371826], + [-5.590056419372559, 5.675229549407959], + [0.06598835438489914, 10.264650344848633], + [2.472071886062622, -5.654475212097168], + [-4.512331485748291, 5.871860504150391], + [-0.3336399793624878, 7.47202730178833], + [-3.85919189453125, -1.3033722639083862], + [-5.475221157073975, 2.634192705154419], + [-2.2113301753997803, 2.657592296600342], + [-3.31661319732666, 5.672123908996582], + [-4.741555690765381, -2.3397433757781982], + [-0.3790775537490845, 9.229976654052734], + [-4.842339515686035, -2.3809213638305664], + [-9.264768600463867, -0.8425192832946777], + [-4.194520473480225, 0.1808713674545288], + [4.380921840667725, -0.16866472363471985], + [2.0126678943634033, -3.7918012142181396], + [-0.2599180042743683, -1.602730631828308], + [0.758733332157135, 5.843356132507324], + [-5.0448737144470215, -3.572206735610962], + [-6.2577948570251465, 7.669354438781738], + [-4.185795307159424, -5.244562149047852], + [9.239742279052734, -2.559933662414551], + [2.1854751110076904, -4.30980110168457], + [2.965924024581909, -4.437159061431885], + [2.5210483074188232, -5.152454853057861], + [-2.8802473545074463, -2.1769628524780273], + [-4.4222846031188965, -2.6686720848083496], + [6.135111331939697, 7.841519355773926], + [-2.146575450897217, 2.907186985015869], + [3.5650949478149414, 6.759819030761719], + [2.7067148685455322, -7.463888645172119], + [-4.836653232574463, 6.32309103012085], + [-4.7849297523498535, -2.375692844390869], + [-6.588327407836914, 8.010859489440918], + [-3.9128599166870117, -1.2130789756774902], + [-3.5813331604003906, -2.5381808280944824], + [-2.246140718460083, 2.0117201805114746], + [2.2039902210235596, 5.288422107696533], + [2.9889283180236816, -4.486727714538574], + [-4.320043087005615, -0.9837139248847961], + [2.49415922164917, -5.575660705566406], + [2.27140212059021, -7.851733207702637], + [5.350132465362549, -1.6249257326126099], + [-7.781503200531006, 9.565423011779785], + [-4.580984592437744, -3.104140281677246], + [-8.229434967041016, -1.3322407007217407], + [-4.230010032653809, -2.4714269638061523], + [-4.139464855194092, -3.4113142490386963], + [-4.691987991333008, -2.564899206161499], + [9.227836608886719, -2.5660555362701416], + [1.1026537418365479, -6.823737144470215], + [8.296671867370605, -2.4484591484069824], + [-5.40774393081665, -3.5007483959198], + [-4.4150004386901855, 4.953485488891602], + [-0.3793144226074219, 0.497641384601593], + [5.7182488441467285, -3.1984806060791016], + [-2.113201141357422, 2.6525566577911377], + [0.8033614754676819, -0.6144402027130127], + [-4.506776332855225, -4.299933433532715], + [3.0481512546539307, -5.562468528747559], + [-1.7448749542236328, 5.238318920135498], + [-3.288402795791626, -3.462080717086792], + [-3.9605777263641357, -2.6140339374542236], + [8.67748737335205, -2.418029546737671], + [-7.056153774261475, -1.9570204019546509], + [-5.62322473526001, -1.502532720565796], + [-0.44278788566589355, -1.3872162103652954], + [-0.08098173886537552, 9.538159370422363], + [-5.013783931732178, -2.303819179534912], + [-4.9709792137146, 6.918605804443359], + [2.926734209060669, -6.470975399017334], + [1.6845102310180664, 5.320010185241699], + [-2.7815592288970947, -2.309680223464966], + [-6.252806186676025, 5.150590419769287], + [-2.13889479637146, -1.6460813283920288], + [-1.3314740657806396, 0.2883877754211426], + [1.9567687511444092, 5.352825164794922], + [-3.8325552940368652, -1.820216178894043], + [-1.2949917316436768, -1.4765368700027466], + [-1.6430156230926514, 2.0730137825012207], + [-5.20783805847168, -3.7074246406555176], + [-6.403884410858154, -2.9402894973754883], + [-5.7997565269470215, -1.0687323808670044], + [2.6763322353363037, -4.160665988922119], + [2.0451323986053467, -7.5798749923706055], + [-5.39011812210083, -2.6893069744110107], + [4.479264736175537, 7.1500959396362305], + [-6.1121978759765625, 7.3585405349731445], + [-5.362032413482666, 1.669927954673767], + [-5.299348831176758, 7.130645751953125], + [-5.089353084564209, 4.008449077606201], + [-0.13689345121383667, 10.023921966552734], + [6.824261665344238, -1.2549898624420166], + [0.9891474843025208, 0.3299328684806824], + [9.535823822021484, -2.6756064891815186], + [2.0394465923309326, -4.34029483795166], + [-3.7672760486602783, -3.226389169692993], + [4.856078147888184, -0.9299001693725586], + [3.0600624084472656, -4.728442192077637], + [-2.1385552883148193, 2.336162567138672], + [2.1264142990112305, -6.976927280426025], + [1.686661958694458, 5.2076215744018555], + [-3.259065866470337, -1.5987398624420166], + [-3.722644567489624, -1.9210081100463867], + [5.261594772338867, -1.1177313327789307], + [5.917918682098389, -1.0485613346099854], + [2.7026751041412354, -4.447261333465576], + [-5.190793514251709, -3.0949137210845947], + [1.8453197479248047, 4.678358554840088], + [0.5595988631248474, 0.9807828664779663], + [3.0577452182769775, -5.390082836151123], + [-0.4346197247505188, 9.340438842773438], + [-1.4456359148025513, 1.2753098011016846], + [-0.3026190400123596, 10.335569381713867], + [-2.301205635070801, 0.9709179401397705], + [3.2070505619049072, -4.796596527099609], + [-5.4813923835754395, -3.1266565322875977], + [-6.375900745391846, 8.198244094848633], + [-2.1156952381134033, -2.727025270462036], + [-1.8403866291046143, 0.5874662399291992], + [3.084184169769287, -4.651063919067383], + [-7.1492486000061035, 0.7645647525787354], + [-3.6429498195648193, 3.7577226161956787], + [-6.0235700607299805, 2.3460638523101807], + [-5.779520034790039, -0.8596682548522949], + [-5.202746391296387, -5.191375732421875], + [4.9583330154418945, -3.2810251712799072], + [-4.702121734619141, -2.119479179382324], + [-3.4850776195526123, 5.996695518493652], + [-7.987102031707764, -1.896159052848816], + [0.6018656492233276, 4.898592948913574], + [9.472504615783691, -2.6368308067321777], + [-0.25766873359680176, -1.1201726198196411], + [-1.0244925022125244, -1.7704170942306519], + [3.00327730178833, 6.022842884063721], + [3.2035601139068604, -4.806070804595947], + [8.972733497619629, -2.50512957572937], + [2.3787872791290283, 5.5000457763671875], + [-0.6604371070861816, 9.233877182006836], + [-4.377604961395264, 7.483551979064941], + [-3.2408876419067383, -2.6986584663391113], + [-5.401568412780762, -0.28294897079467773], + [-1.360370397567749, 9.86093521118164], + [1.493666172027588, 4.996466636657715], + [3.318331003189087, -5.583964824676514], + [5.6056342124938965, -1.5573389530181885], + [-5.085057735443115, -3.5026297569274902], + [-3.093092203140259, -0.481906533241272], + [-2.078336000442505, 2.263352632522583], + [-5.235402584075928, -0.0747687816619873], + [0.7810457944869995, -0.05816097930073738], + [-6.973206996917725, 8.503515243530273], + [-2.4592342376708984, -0.8131743669509888], + [2.638643503189087, -6.863297462463379], + [-2.5000646114349365, 2.1641931533813477], + [-4.089925765991211, -1.5370198488235474], + [-0.26639801263809204, 9.95727825164795], + [3.0744364261627197, -4.620603561401367], + [-2.39339280128479, -3.3197672367095947], + [-0.10644716769456863, 9.598690032958984], + [2.0098073482513428, 0.7004656791687012], + [5.2129740715026855, -1.877867579460144], + [-4.387333869934082, 1.7866418361663818], + [-4.496544361114502, -2.501146078109741], + [-5.149595737457275, -3.292416572570801], + [-3.9408740997314453, 4.493215560913086], + [-3.890226125717163, 5.02070426940918], + [0.958448588848114, -0.4342591166496277], + [1.236512303352356, 1.3882577419281006], + [7.267908573150635, -2.099130630493164], + [3.0898025035858154, -4.817476272583008], + [-2.0323171615600586, 1.5894542932510376], + [-4.741527080535889, -2.982757329940796], + [-4.9199652671813965, -1.560455083847046], + [-1.9287784099578857, 0.5305267572402954], + [-7.135468006134033, 0.9943382740020752], + [6.799905776977539, -1.5359556674957275], + [-0.9646708369255066, 5.560204029083252], + [-0.3381643295288086, 9.52879524230957], + [2.6699917316436768, -5.666743278503418], + [-3.366793632507324, -4.059546947479248], + [1.880805253982544, -8.974411010742188], + [1.0386042594909668, -7.4572858810424805], + [-5.491288661956787, 6.932773590087891], + [-0.40452611446380615, -1.5551849603652954], + [3.134410858154297, -4.994236946105957], + [-4.321465492248535, -1.9058676958084106], + [-6.4148173332214355, 7.592862129211426], + [-4.926416397094727, -3.210568428039551], + [1.983769178390503, -9.463774681091309], + [-4.890275955200195, 5.22650671005249], + [1.3760830163955688, -5.640676498413086], + [-5.361434459686279, -3.544670820236206], + [2.4950010776519775, -7.748259544372559], + [-2.534485101699829, 2.1049091815948486], + [1.8917882442474365, -4.853150367736816], + [-3.9730348587036133, 3.2400150299072266], + [-3.8726532459259033, -3.389294385910034], + [-5.031322479248047, 5.21917200088501], + [-4.0967936515808105, -3.3498454093933105], + [3.152348279953003, -5.072076797485352], + [-2.9119105339050293, -1.5341122150421143], + [2.493678569793701, 5.86555290222168], + [-5.391329288482666, 3.47707200050354], + [-1.91603684425354, 0.9947023391723633], + [-1.9865597486495972, 2.5550239086151123], + [-5.144146919250488, -3.1381778717041016], + [-0.0702795758843422, -1.0061534643173218], + [-1.7765045166015625, 1.0316762924194336], + [-2.1313998699188232, 0.15041396021842957], + [-2.6716010570526123, 0.19012969732284546], + [-5.2022223472595215, 1.9858471155166626], + [-4.897819519042969, -2.992372989654541], + [-3.5196053981781006, 6.170848369598389], + [-2.4747564792633057, -3.4836318492889404], + [-3.226780652999878, 4.6666975021362305], + [-5.745687961578369, -2.4564242362976074], + [1.219934344291687, -6.534319877624512], + [-6.069077014923096, 1.638001799583435], + [-1.8258123397827148, 5.618049144744873], + [-2.536375045776367, 1.763014316558838], + [2.386479616165161, -9.514595031738281], + [-4.436380386352539, -2.582756280899048], + [-5.461036205291748, -3.060601234436035], + [-5.592770576477051, 1.7077208757400513], + [-0.27875399589538574, 9.211902618408203], + [-4.217940807342529, -2.3387598991394043], + [-5.336556911468506, -3.3333961963653564], + [4.9047112464904785, -1.2157690525054932], + [-4.763822078704834, -0.4730348587036133], + [3.3664700984954834, 6.765437126159668], + [-2.340721845626831, 1.561444640159607], + [-0.23244518041610718, 9.826424598693848], + [-4.5091328620910645, -2.5396151542663574], + [-1.2944204807281494, 2.4470231533050537], + [-3.818202257156372, 6.332098960876465], + [-4.94870662689209, -3.1878132820129395], + [2.397235631942749, 0.6240063905715942], + [1.870469093322754, 5.461719512939453], + [7.614731311798096, -3.0033209323883057], + [-2.786907434463501, 5.634154796600342], + [-3.1872706413269043, -3.3508665561676025], + [-2.459765672683716, 3.082573652267456], + [1.4286627769470215, -7.047767162322998], + [0.1721336841583252, -0.2908112406730652], + [5.044242858886719, 6.371432304382324], + [1.6925657987594604, 0.27040040493011475], + [-2.094831943511963, 2.8165767192840576], + [-4.417288303375244, -3.448004961013794], + [-0.3450145721435547, 9.176912307739258], + [-0.19873017072677612, 10.846689224243164], + [-4.7923903465271, -2.694270133972168], + [0.7702898383140564, 5.492402076721191], + [1.8215789794921875, 2.029115676879883], + [-6.700026988983154, 8.387402534484863], + [-0.32522788643836975, -0.9497398138046265], + [0.9097110629081726, -6.350100994110107], + [1.4384713172912598, -8.052192687988281], + [-5.286027908325195, -3.423149347305298], + [-2.1371848583221436, -1.9089326858520508], + [-3.6545779705047607, -0.705706000328064], + [-4.236534118652344, -1.2600258588790894], + [4.4423980712890625, -4.487390041351318], + [-4.504456043243408, -4.2162885665893555], + [-2.140018939971924, 0.6550930142402649], + [3.204779863357544, -5.155331611633301], + [-4.040065765380859, 6.2679762840271], + [2.702357053756714, -3.639897108078003], + [1.967252492904663, 5.211671829223633], + [-2.0899274349212646, 1.073230266571045], + [-4.698486804962158, -3.587381601333618], + [3.2885005474090576, -4.996181964874268], + [-6.032954216003418, 4.692486763000488], + [9.051183700561523, -2.5684926509857178], + [3.5763485431671143, -3.2179582118988037], + [-5.214725017547607, 7.18306827545166], + [-6.672802925109863, -1.941715955734253], + [-6.523813724517822, -0.5807290077209473], + [-8.330819129943848, 0.5433506965637207], + [-4.4693474769592285, -2.285501718521118], + [8.743544578552246, -2.689547061920166], + [-0.7651664614677429, -1.8883099555969238], + [1.2729235887527466, 5.354827880859375], + [-3.2892093658447266, 0.06896555423736572], + [1.971081256866455, -0.11771385371685028], + [-5.996138095855713, -2.0971386432647705], + [1.5165687799453735, 5.501364707946777], + [6.201016426086426, -1.1762796640396118], + [2.104959487915039, -10.125202178955078], + [-5.02745246887207, 5.299979209899902], + [2.386631727218628, -5.202016353607178], + [-0.12979155778884888, 10.40919303894043], + [-2.0593864917755127, 1.3912609815597534], + [-0.3022305369377136, 10.242228507995605], + [-5.51550817489624, -2.4587624073028564], + [-5.810939311981201, 1.5845751762390137], + [2.094961404800415, -7.283555030822754], + [-3.0675559043884277, -1.1083298921585083], + [-4.821899890899658, -3.2757556438446045], + [-7.676298141479492, 9.459720611572266], + [2.405042886734009, -3.6221230030059814], + [-3.3510870933532715, -1.047448992729187], + [0.6601817607879639, -0.3305603563785553], + [2.559727430343628, -4.031507968902588], + [2.468334197998047, 5.396980285644531], + [5.94692325592041, -1.2573935985565186], + [2.945831537246704, -4.647522926330566], + [-0.3030979037284851, 10.326662063598633], + [-4.845844745635986, 4.012665271759033], + [-4.859548091888428, -2.7437379360198975], + [-4.943143367767334, -2.857163906097412], + [-4.437335968017578, -1.5208848714828491], + [1.910773754119873, -7.664937973022461], + [-4.193367958068848, 3.432673692703247], + [1.9655134677886963, -4.589938163757324], + [2.142395257949829, -7.739235877990723], + [-5.352744102478027, -3.5468790531158447], + [2.6935875415802, -1.7440136671066284], + [-5.147204875946045, 2.319091320037842], + [-2.2924892902374268, -2.4918692111968994], + [2.5006723403930664, -4.20344352722168], + [2.915792942047119, -4.581577301025391], + [2.1742136478424072, -5.300295829772949], + [2.197166681289673, -5.19240665435791], + [-6.589584827423096, -1.9871383905410767], + [-5.61185884475708, -3.6961729526519775], + [-6.3971266746521, 7.731369495391846], + [-5.753163814544678, 6.838703155517578], + [-1.725425124168396, -0.10538196563720703], + [8.439711570739746, -2.3402702808380127], + [3.25183367729187, -1.754227638244629], + [-7.411624908447266, 9.555850982666016], + [-1.7054691314697266, 5.43910551071167], + [-4.477052688598633, 3.15152645111084], + [-3.88358211517334, -2.430518865585327], + [1.5713893175125122, -6.394741058349609], + [9.251090049743652, -2.5788631439208984], + [-4.067488193511963, 0.5210165977478027], + [5.570087909698486, 7.654009819030762], + [9.287671089172363, -2.6099629402160645], + [-0.2271057367324829, 10.109384536743164], + [0.8661155104637146, -6.598427772521973], + [-3.7107856273651123, -1.3131953477859497], + [-0.6520357131958008, 8.729240417480469], + [-0.2574707567691803, -1.2050105333328247], + [-4.483213424682617, 6.506279468536377], + [2.3907840251922607, -3.2720742225646973], + [8.15760326385498, -2.043814182281494], + [-1.1799938678741455, -0.7608525156974792], + [-0.6003766655921936, 9.628437995910645], + [-3.817707061767578, -0.8549668788909912], + [6.695849895477295, -4.923734664916992], + [-5.971884250640869, 1.3872133493423462], + [1.8112411499023438, -5.431129455566406], + [-2.5118415355682373, 0.6299461126327515], + [0.35044217109680176, -6.0657057762146], + [-4.965226650238037, 5.904692649841309], + [2.8985469341278076, -4.6368584632873535], + [0.033796750009059906, -0.5317052602767944], + [-0.3294179439544678, 9.943497657775879], + [-4.95736837387085, -3.2067058086395264], + [0.6481452584266663, -0.9729897975921631], + [-1.4681272506713867, 5.886343002319336], + [1.8012114763259888, -9.607259750366211], + [6.294426441192627, -5.676132678985596], + [-3.169184923171997, -2.8464784622192383], + [-2.705073595046997, -0.6897028684616089], + [0.5947679877281189, -0.5243802070617676], + [7.860734462738037, -2.0210556983947754], + [-2.2470953464508057, 2.2850589752197266], + [-5.2094502449035645, -2.7967422008514404], + [-4.923197269439697, -2.9133265018463135], + [0.6406511664390564, -0.18161079287528992], + [2.900416851043701, 6.465762138366699], + [-2.546025037765503, 2.2994637489318848], + [-0.17886045575141907, -0.9351738691329956], + [0.03125303238630295, 9.875312805175781], + [2.7759006023406982, -4.927053451538086], + [-3.251040458679199, -0.9174997210502625], + [-1.9440416097640991, 0.979686975479126], + [-5.775644302368164, -1.6136327981948853], + [3.708019971847534, 6.522731781005859], + [-3.6476786136627197, 5.299948215484619], + [9.332144737243652, -2.629369020462036], + [2.1660404205322266, -4.964024543762207], + [-2.4029033184051514, 0.8033921122550964], + [-2.0988333225250244, 0.257857084274292], + [-0.2956082224845886, 10.037720680236816], + [-5.188952922821045, 7.001596450805664], + [-5.497976779937744, 7.822751045227051], + [4.693716526031494, -0.9702875018119812], + [-4.588502407073975, -4.392593860626221], + [-0.7467681169509888, -0.40817517042160034], + [2.945082426071167, -3.9951188564300537], + [8.68293285369873, -2.4335553646087646], + [1.596308708190918, -8.186788558959961], + [4.161410331726074, -2.3560755252838135], + [-4.072747230529785, -2.655724048614502], + [-1.1018521785736084, 9.763416290283203], + [0.697975218296051, 0.37795519828796387], + [0.9826036095619202, 5.300488471984863], + [3.156874418258667, -4.7194647789001465], + [-5.221429347991943, 5.354010105133057], + [0.9752967953681946, -6.6514811515808105], + [-4.956095218658447, 5.7393717765808105], + [-5.957509517669678, 1.9078259468078613], + [-2.165881395339966, 1.3717788457870483], + [-1.4932103157043457, 5.777517318725586], + [-4.446610450744629, -1.6287171840667725], + [-5.840809345245361, -2.0163559913635254], + [1.9535338878631592, -7.713266372680664], + [-4.907275676727295, -3.2391252517700195], + [-4.791784763336182, 1.7261296510696411], + [-5.428099155426025, 5.493999481201172], + [-3.4975178241729736, 5.328680515289307], + [-5.418151378631592, 5.500510215759277], + [-2.4694135189056396, 0.8615067005157471], + [3.109748601913452, -4.6764020919799805], + [-5.12213659286499, -3.4303038120269775], + [1.9670324325561523, -3.3950231075286865], + [-3.4026644229888916, -3.2073299884796143], + [-2.2707788944244385, 2.08475399017334], + [-2.7972140312194824, -2.443150758743286], + [3.0143420696258545, -4.493478775024414], + [2.9591376781463623, -5.969322204589844], + [-2.4358673095703125, 2.1174416542053223], + [-6.198094367980957, -1.2485395669937134], + [-4.927149295806885, 3.471001148223877], + [6.36704683303833, -1.5736557245254517], + [8.428619384765625, -2.1928956508636475], + [-3.5798723697662354, -4.462765693664551], + [-3.3606083393096924, 3.461479663848877], + [3.153198480606079, -4.93874454498291], + [-2.473374128341675, 1.8436477184295654], + [2.2840869426727295, 6.099702835083008], + [-5.568056583404541, 3.3935749530792236], + [-5.810161590576172, 7.147764682769775], + [-4.9767584800720215, 0.5425455570220947], + [-4.2079081535339355, 1.700939416885376], + [-5.097628116607666, -0.3095283508300781], + [-4.617600917816162, 1.8884319067001343], + [-3.5395870208740234, 4.594112873077393], + [1.0073517560958862, -7.284287929534912], + [-1.706365942955017, 0.7184619903564453], + [6.335570335388184, -1.8756325244903564], + [3.133608341217041, -6.258055210113525], + [-4.60146951675415, 5.7217631340026855], + [-6.021880626678467, 6.573071479797363], + [1.8465137481689453, -3.522634267807007], + [2.850809097290039, 4.8723978996276855], + [3.233273983001709, -4.9975738525390625], + [6.848906517028809, -2.726975679397583], + [-4.816388130187988, -2.769273281097412], + [5.019875526428223, 7.298941135406494], + [-2.2752392292022705, 1.7997822761535645], + [-2.429051160812378, 0.6367770433425903], + [-2.674038887023926, -4.484800338745117], + [-4.352682590484619, 3.213395833969116], + [-6.189624309539795, 3.878136157989502], + [-7.502594470977783, -1.377174735069275], + [1.4505401849746704, 4.597879886627197], + [-8.480315208435059, -0.749701738357544], + [-4.210014343261719, 3.4982380867004395], + [0.1323997974395752, 5.147139549255371], + [-0.19839709997177124, 10.13286304473877], + [7.861145973205566, -2.004073143005371], + [1.2448580265045166, -7.6058454513549805], + [-2.4951703548431396, 1.6986135244369507], + [2.3080708980560303, 5.671258449554443], + [0.03944831341505051, 9.683968544006348], + [2.4367458820343018, -3.8937294483184814], + [6.156867504119873, -2.6832046508789062], + [-4.595715522766113, -3.0237772464752197], + [-6.053704738616943, 6.4275736808776855], + [3.5261733531951904, -4.228015422821045], + [-4.124663829803467, 4.290959358215332], + [5.135303020477295, -2.378509998321533], + [-4.831729412078857, -3.2077767848968506], + [2.0980987548828125, 5.3285393714904785], + [-0.06664568930864334, 9.636261940002441], + [7.471312046051025, -1.634837031364441], + [2.170377492904663, 4.100047588348389], + [-2.853167772293091, -3.641838312149048], + [-6.429361820220947, 0.46583640575408936], + [-3.4427073001861572, -5.594487190246582], + [-4.344414234161377, 4.538399696350098], + [-0.4109399914741516, 10.555169105529785], + [-3.5056893825531006, -2.4977641105651855], + [-2.5662660598754883, 1.701706051826477], + [-0.3299761414527893, 9.368355751037598], + [-2.484251022338867, 2.1467082500457764], + [1.0550134181976318, -5.910679817199707], + [-2.1528127193450928, 0.8237413167953491], + [-4.591118335723877, -1.7492727041244507], + [0.3064362406730652, -0.002940196543931961], + [-0.3555607199668884, 10.859798431396484], + [2.7009494304656982, -4.244398593902588], + [1.6146626472473145, -7.505901336669922], + [-2.464662551879883, -1.5166540145874023], + [0.9452065825462341, -5.901432037353516], + [-7.051548480987549, 8.506745338439941], + [2.2395966053009033, 5.60781717300415], + [0.18051105737686157, -4.7365922927856445], + [10.368977546691895, -2.874086380004883], + [-0.6349526047706604, 8.880243301391602], + [-4.984197616577148, -0.1407088041305542], + [-1.8642759323120117, 1.0788183212280273], + [-2.3998093605041504, 1.6450777053833008], + [-2.485842704772949, 2.129767417907715], + [5.491456508636475, 7.646453857421875], + [2.3050434589385986, -8.417574882507324], + [-5.191493034362793, -3.6785571575164795], + [-5.615362644195557, -1.6237329244613647], + [-2.2355146408081055, 2.3896400928497314], + [-4.49035120010376, -4.024054050445557], + [-2.3574764728546143, 1.7243245840072632], + [-0.2503497004508972, 9.838478088378906], + [1.9022622108459473, -9.325258255004883], + [-0.9801729917526245, -0.4766666889190674], + [-0.41206681728363037, 9.254329681396484], + [1.0091817378997803, -5.730983734130859], + [-2.0698955059051514, 5.632890224456787], + [-4.618676662445068, -3.608792781829834], + [1.3366107940673828, -1.7804412841796875], + [-2.2582929134368896, -1.3275684118270874], + [-6.985098361968994, 8.913004875183105], + [2.9872286319732666, -4.690411567687988], + [-5.285671234130859, 2.787729024887085], + [0.04419300705194473, -1.3236753940582275], + [2.4315013885498047, -7.481040000915527], + [2.986938714981079, -4.441777229309082], + [1.5157102346420288, 0.8706333041191101], + [-2.4991726875305176, 0.8459819555282593], + [3.0290791988372803, -4.552296161651611], + [1.8435734510421753, -7.899529933929443], + [-0.0998196080327034, 9.530916213989258], + [0.8801910281181335, -6.464920520782471], + [-2.438102960586548, -1.0004686117172241], + [10.1936674118042, -2.818495273590088], + [-3.524801015853882, -0.18581002950668335], + [-6.990273952484131, 8.395492553710938], + [-3.936777353286743, -2.6750872135162354], + [2.0752909183502197, 4.977477073669434], + [-1.118261456489563, 8.927372932434082], + [-2.555870532989502, 2.3190667629241943], + [-0.1482422649860382, -0.473616361618042], + [-1.2717113494873047, -1.8073683977127075], + [1.481102466583252, -3.9459235668182373], + [-1.6431615352630615, 1.7008452415466309], + [3.197204351425171, -4.7805328369140625], + [5.412491798400879, -1.1785597801208496], + [2.9420952796936035, -4.732666015625], + [-3.856214761734009, -3.456770896911621], + [-4.91345739364624, -4.701952934265137], + [-6.645637035369873, 3.8551437854766846], + [-3.445420503616333, 0.2728853225708008], + [-1.0515681505203247, -1.0901718139648438], + [-2.272409200668335, -3.361042022705078], + [-6.493373394012451, -0.7459424734115601], + [-4.642648220062256, 6.6898698806762695], + [-5.396557331085205, 4.424863815307617], + [-3.222205400466919, 0.37590599060058594], + [2.8745486736297607, 6.444012641906738], + [2.2750632762908936, 5.826949596405029], + [-3.931493043899536, -0.02704877033829689], + [-5.200129985809326, -3.159865617752075], + [2.9669833183288574, -6.1369709968566895], + [2.9270498752593994, -4.498239040374756], + [-0.7415138483047485, 0.6497530341148376], + [-0.29297393560409546, 10.48816967010498], + [-5.194229602813721, -4.792299747467041], + [-6.223217010498047, 7.338896751403809], + [-0.31641870737075806, 10.87779712677002], + [-4.12473726272583, -2.407500982284546], + [-0.2231927514076233, 10.269425392150879], + [-5.989861965179443, 7.057740211486816], + [2.9364304542541504, -4.417448043823242], + [-2.226187229156494, 1.5830600261688232], + [-0.5009187459945679, 9.13178825378418], + [5.826920032501221, -1.0941132307052612], + [1.9413788318634033, 5.557479381561279], + [-6.363400936126709, 8.2593994140625], + [-0.6338420510292053, 10.44593334197998], + [-0.5701962113380432, 9.145315170288086], + [-4.88871955871582, -4.626739501953125], + [9.550614356994629, -2.663097620010376], + [2.1957972049713135, -3.5209906101226807], + [-7.226371765136719, -1.5406526327133179], + [5.491495132446289, -4.428829193115234], + [7.7744855880737305, -1.9548659324645996], + [-0.38738447427749634, 10.495552062988281], + [-3.903892755508423, -2.2122530937194824], + [6.300564289093018, -1.2058738470077515], + [-4.921739101409912, -1.265183925628662], + [-0.2797437310218811, 9.58482551574707], + [-3.5045993328094482, 5.703786849975586], + [-2.1613452434539795, 2.352205753326416], + [2.02982234954834, -9.698986053466797], + [-4.605020999908447, 1.953999400138855], + [-3.9171526432037354, -1.48637056350708], + [2.6302883625030518, -4.336672782897949], + [0.5658807754516602, -5.573904991149902], + [0.12901437282562256, 5.080391883850098], + [2.746518850326538, 0.7507466077804565], + [-5.881636142730713, -0.8475196957588196], + [-6.3422322273254395, 8.085384368896484], + [1.9780786037445068, -4.7060699462890625], + [-2.684464454650879, -2.634293794631958], + [-5.41312837600708, 4.343475341796875], + [-3.439223051071167, 7.735768795013428], + [1.9873926639556885, 5.458395004272461], + [-5.8971638679504395, -1.675748348236084], + [8.053820610046387, -2.1811130046844482], + [3.041132688522339, -4.567376136779785], + [-2.9742844104766846, -4.1524434089660645], + [-3.630019426345825, -2.472529172897339], + [-8.44819164276123, -0.988628625869751], + [-3.5040950775146484, -3.509830951690674], + [-2.611900806427002, -4.4849653244018555], + [2.342217206954956, -6.656146049499512], + [-2.2716619968414307, 1.571533441543579], + [2.6202075481414795, 5.930798530578613], + [4.817921161651611, 7.1230244636535645], + [-1.3458068370819092, 0.45787549018859863], + [-1.7909541130065918, 1.4396880865097046], + [-5.360311985015869, -3.2342796325683594], + [5.545091152191162, -1.075871467590332], + [2.947831392288208, -4.22922420501709], + [-5.1680731773376465, 6.32284688949585], + [-5.6866044998168945, -2.773826837539673], + [-2.9672811031341553, -2.236403703689575], + [-5.329267501831055, 2.5748512744903564], + [2.618349075317383, -5.632216453552246], + [5.054508686065674, -2.2205936908721924], + [2.979109525680542, -4.538735389709473], + [3.264030933380127, -4.881633758544922], + [9.490100860595703, -2.6364734172821045], + [-2.2299282550811768, 2.283292770385742], + [-5.853879928588867, 7.2014923095703125], + [-0.24209648370742798, 9.371305465698242], + [8.732804298400879, -2.3974950313568115], + [0.5019471049308777, -0.8429120779037476], + [6.496795654296875, -1.3111575841903687], + [7.420923709869385, -1.7320410013198853], + [-3.676816463470459, -1.5725213289260864], + [-0.31443363428115845, 11.0479736328125], + [-4.726353168487549, 6.455852508544922], + [1.747507929801941, -8.77603530883789], + [4.262072563171387, 7.139223098754883], + [2.509936571121216, 0.6098423600196838], + [-4.989904880523682, -2.330533027648926], + [2.9817488193511963, -4.523526191711426], + [2.0454466342926025, -3.2873353958129883], + [2.5524260997772217, -5.721907615661621], + [0.2049274742603302, -4.8494672775268555], + [-3.4213578701019287, -3.2840583324432373], + [1.9952361583709717, -7.867659568786621], + [3.010629415512085, -6.639257431030273], + [-5.0700225830078125, -4.598350524902344], + [-1.0169907808303833, 8.923171997070312], + [3.014709711074829, -4.636768341064453], + [-1.4069926738739014, -0.4837551712989807], + [-6.748445510864258, 8.574440002441406], + [-5.4092183113098145, 5.869808673858643], + [1.8477058410644531, 2.4284799098968506], + [-6.013797283172607, 6.278153419494629], + [-7.695066928863525, 9.611649513244629], + [3.206282615661621, 5.907439231872559], + [-1.8794976472854614, 1.6529995203018188], + [1.5128695964813232, 4.808078765869141], + [-2.1754167079925537, 0.7861267924308777], + [-4.488259315490723, -0.7578941583633423], + [-4.5065741539001465, -2.3760290145874023], + [-5.006597995758057, -5.189236164093018], + [2.552844524383545, -4.327387809753418], + [6.785079002380371, -0.7997400760650635], + [-4.431004047393799, -1.6916446685791016], + [-2.8838915824890137, 5.936110496520996], + [-2.7704126834869385, -3.7890775203704834], + [-4.365603446960449, 2.6784517765045166], + [1.4816712141036987, -8.230047225952148], + [-4.558454513549805, -0.9031872749328613], + [5.861950874328613, -1.129258632659912], + [2.1327831745147705, -3.9760332107543945], + [1.425072193145752, 5.3602614402771], + [-3.7657434940338135, -1.1754536628723145], + [2.9502789974212646, -5.168600082397461], + [-5.9611592292785645, 4.559365272521973], + [-4.892388820648193, 4.8915534019470215], + [-5.062468528747559, -3.1729519367218018], + [2.2182717323303223, -1.0857676267623901], + [8.736418724060059, -2.2667901515960693], + [6.937488079071045, -1.6202361583709717], + [2.6668221950531006, -4.302778244018555], + [3.717867136001587, -4.389113903045654], + [-8.316210746765137, -0.5585160255432129], + [2.6463160514831543, -4.030080318450928], + [-4.160604953765869, -3.3041718006134033], + [-5.823675155639648, 5.906283378601074], + [1.9762866497039795, -7.572277069091797], + [-2.1749212741851807, 0.9037764072418213], + [0.18847322463989258, -1.3571654558181763], + [-6.250865459442139, -2.7119998931884766], + [-3.3263845443725586, 7.097783088684082], + [-5.6378583908081055, -2.6173102855682373], + [9.154324531555176, -2.579807758331299], + [-1.6073633432388306, 2.1951992511749268], + [-5.239380359649658, 6.156414985656738], + [-5.0715460777282715, 1.0201359987258911], + [5.689268589019775, 7.613883972167969], + [-0.19884398579597473, -1.500411868095398], + [1.0672023296356201, -5.54975700378418], + [-8.735902786254883, -1.2484935522079468], + [1.3003969192504883, 5.333433151245117], + [8.126463890075684, -2.1125285625457764], + [-5.130614757537842, -3.952934503555298], + [-5.924220561981201, 6.0842084884643555], + [9.861586570739746, -2.735058307647705], + [6.273636341094971, -2.0473973751068115], + [-1.0440757274627686, -2.5237817764282227], + [3.290055513381958, -4.920423984527588], + [4.079770565032959, 7.146847724914551], + [2.4619200229644775, -6.424592971801758], + [-1.8304669857025146, -3.252314805984497], + [3.1034812927246094, -4.756749153137207], + [2.5732502937316895, -4.051642894744873], + [8.229096412658691, -2.3659849166870117], + [-1.2375236749649048, 1.8688387870788574], + [2.406742811203003, -3.616434335708618], + [-3.9817657470703125, -6.054541110992432], + [-5.763851642608643, 6.6486077308654785], + [-4.971933364868164, 6.266117095947266], + [6.1584954261779785, -2.0692620277404785], + [2.7857706546783447, -4.247252464294434], + [-2.9180479049682617, 2.928473949432373], + [-4.799524307250977, -2.2549850940704346], + [-4.784241199493408, -2.970693826675415], + [-2.295747756958008, 1.8000924587249756], + [8.818188667297363, -2.414485454559326], + [-5.040378093719482, -4.562587738037109], + [2.9728314876556396, 5.406334400177002], + [-5.511505603790283, -1.3430899381637573], + [8.477754592895508, -2.162177562713623], + [3.106823205947876, -3.9235594272613525], + [-6.666248321533203, -2.4684176445007324], + [2.6426703929901123, -6.244880676269531], + [-2.8988330364227295, 5.274449825286865], + [-1.936507225036621, 1.51943039894104], + [3.058410406112671, -4.818012237548828], + [-4.9403886795043945, -0.7377830147743225], + [-4.043970584869385, -1.5346683263778687], + [-3.4363179206848145, -0.45999380946159363], + [-3.8764190673828125, -1.0857380628585815], + [2.5174248218536377, -3.988713502883911], + [-6.876805782318115, -1.629380226135254], + [2.739577054977417, -4.128208160400391], + [-8.199797630310059, -1.2905362844467163], + [-4.305292129516602, -1.240839958190918], + [-0.25036442279815674, 9.495939254760742], + [-4.9395928382873535, -4.673591136932373], + [2.302605628967285, -5.331195831298828], + [-5.186172962188721, -3.034006118774414], + [1.1933916807174683, 6.416973114013672], + [1.9633936882019043, 0.5023542642593384], + [2.364741563796997, -2.8871779441833496], + [3.030625820159912, -4.915889739990234], + [-4.802439212799072, 5.401642799377441], + [-5.166299819946289, 1.5472477674484253], + [-0.6203808188438416, -1.138959527015686], + [0.5519760251045227, -4.629533767700195], + [2.574573040008545, -4.247780799865723], + [-6.0394392013549805, -2.064535617828369], + [3.2485251426696777, -4.859353065490723], + [-0.03125811368227005, 5.46773624420166], + [2.206879138946533, 5.807075500488281], + [3.554103136062622, -0.47012680768966675], + [-0.21590560674667358, 9.410050392150879], + [-6.432438373565674, 4.633681774139404], + [1.5696576833724976, -8.004141807556152], + [2.466522455215454, -4.404527187347412], + [-2.0586836338043213, 0.7479665279388428], + [2.508546829223633, -3.939405679702759], + [2.435755491256714, 5.162239074707031], + [-3.9306142330169678, -3.2768232822418213], + [-4.6416497230529785, 3.314354181289673], + [8.30743408203125, -2.2352097034454346], + [-2.3180172443389893, 1.8752764463424683], + [4.201960563659668, 7.03254508972168], + [0.03675364702939987, -0.6287171840667725], + [3.1274428367614746, -4.699821472167969], + [2.0603487491607666, -7.687089920043945], + [1.305217981338501, -4.585597038269043], + [-0.086152084171772, -0.7441233992576599], + [10.198655128479004, -2.8236865997314453], + [-0.46199095249176025, 10.822113037109375], + [8.74213981628418, -2.1653826236724854], + [-0.22772306203842163, 10.23236083984375], + [-6.202986717224121, -0.3872135877609253], + [-2.2051405906677246, 0.6128643751144409], + [-3.2210981845855713, -1.2501009702682495], + [1.9379339218139648, 1.0244940519332886], + [-2.9666621685028076, -5.54419469833374], + [2.4778549671173096, 7.007228851318359], + [-0.18069946765899658, 9.442194938659668], + [-4.994051456451416, 6.029528617858887], + [-0.31188470125198364, 10.268918991088867], + [6.215138912200928, -2.720801591873169], + [2.971026659011841, -4.565417766571045], + [-4.478229999542236, 2.5816121101379395], + [-5.128077983856201, 5.203411102294922], + [-4.261093616485596, -2.3904552459716797], + [2.086916208267212, -7.522806167602539], + [-2.657806396484375, 2.3407087326049805], + [8.017637252807617, -1.9017609357833862], + [0.7111980319023132, 0.8253875970840454], + [-5.063015460968018, -3.007411479949951], + [-6.457778453826904, -2.537165403366089], + [-2.243425130844116, 1.5977133512496948], + [2.689831495285034, -4.075821876525879], + [-2.8031675815582275, -3.244277238845825], + [1.9664950370788574, 3.39884352684021], + [1.0849918127059937, 0.6553354859352112], + [-2.7749619483947754, 2.971748113632202], + [-4.582475185394287, -2.2297823429107666], + [-2.497300148010254, 2.7595465183258057], + [-4.630441665649414, -4.6923723220825195], + [-0.6256315112113953, 10.059497833251953], + [-5.750694751739502, -2.1142008304595947], + [6.549056529998779, -1.4841045141220093], + [-4.3694915771484375, 4.619046211242676], + [-5.73293924331665, 1.7964372634887695], + [1.9086164236068726, -6.537130355834961], + [0.337891548871994, 0.2454122006893158], + [-4.448570728302002, -1.3228687047958374], + [5.496786594390869, -1.2748395204544067], + [3.1122336387634277, -4.666416168212891], + [4.964468955993652, -3.034132719039917], + [1.5527548789978027, -3.821960687637329], + [-7.547794818878174, 9.340457916259766], + [2.1714346408843994, 5.517498016357422], + [-3.9632408618927, 3.3908193111419678], + [-0.35551461577415466, -0.5602447986602783], + [8.804572105407715, -2.658357620239258], + [1.0800795555114746, -0.5107649564743042], + [9.84022331237793, -2.709963321685791], + [2.8233444690704346, -6.05495548248291], + [-5.247171878814697, -0.5136599540710449], + [0.18571162223815918, -0.9867820143699646], + [1.9226033687591553, -6.627485275268555], + [2.104825735092163, 5.820158958435059], + [-3.4018099308013916, 2.670788049697876], + [-2.4016995429992676, -0.24228054285049438], + [3.2404086589813232, -5.187699317932129], + [8.665518760681152, -2.456584930419922], + [-0.2383219599723816, 10.516668319702148], + [-3.484442710876465, 4.6850128173828125], + [2.4898808002471924, -4.24365234375], + [2.6721954345703125, -6.277805805206299], + [2.5007967948913574, 0.9825447797775269], + [2.3014769554138184, -10.888904571533203], + [0.9411590695381165, 5.218010425567627], + [-0.17620760202407837, 10.240032196044922], + [-2.5310604572296143, 1.4895663261413574], + [6.125998020172119, -5.325972557067871], + [-6.916038990020752, -1.4880074262619019], + [-1.5119757652282715, 1.3801815509796143], + [3.2209904193878174, -5.447009086608887], + [-3.603111982345581, -4.310142517089844], + [-2.4288249015808105, 5.118741989135742], + [-6.554214000701904, 1.0791324377059937], + [0.7730085253715515, -0.27580657601356506], + [-3.770585298538208, 7.67216682434082], + [0.393276572227478, -0.38210517168045044], + [6.920385837554932, -2.5848677158355713], + [-1.1455788612365723, 0.5667769908905029], + [-1.2574653625488281, -1.3713589906692505], + [-4.42149543762207, -3.572220802307129], + [-2.6906495094299316, -1.4127854108810425], + [1.1439555883407593, -6.955822944641113], + [2.328392744064331, -4.039715766906738], + [2.5123894214630127, 6.281587600708008], + [9.708802223205566, -2.6667373180389404], + [-3.062987804412842, -3.6481053829193115], + [-0.30967241525650024, 10.577325820922852], + [3.357343912124634, 5.999838829040527], + [-0.450035035610199, -0.5677646398544312], + [2.1201584339141846, -6.952326774597168], + [-2.0941689014434814, 2.0548110008239746], + [1.856294870376587, -8.788235664367676], + [-0.31228286027908325, 9.79574966430664], + [-6.307339191436768, 7.5811567306518555], + [-0.7207334637641907, 10.260856628417969], + [2.333059549331665, -7.325387001037598], + [-4.628805637359619, -2.0701329708099365], + [-4.63966178894043, -4.077983379364014], + [1.7664039134979248, 3.8220531940460205], + [-6.549924373626709, 7.870018005371094], + [7.542026996612549, -3.4727838039398193], + [2.10589599609375, -7.60998010635376], + [3.107771635055542, -4.670068740844727], + [2.894118070602417, 6.291801452636719], + [4.005068778991699, -2.8278908729553223], + [-0.31747734546661377, 8.973516464233398], + [3.678363561630249, -6.564239501953125], + [-1.831519365310669, -0.7399129867553711], + [-6.875372409820557, 8.301952362060547], + [0.7968944311141968, -0.2933241128921509], + [-2.1522457599639893, -2.0976972579956055], + [-0.4657539129257202, 9.454113960266113], + [-3.8512840270996094, 1.9555178880691528], + [-6.203954696655273, 7.359119415283203], + [3.041948080062866, -4.662998676300049], + [-3.580024003982544, -2.9777846336364746], + [8.594231605529785, -2.4962565898895264], + [7.385261058807373, -1.5281168222427368], + [-5.525884628295898, 2.94994854927063], + [-2.4049391746520996, 0.8237478137016296], + [-1.6324069499969482, 3.391680955886841], + [-2.763697385787964, 5.415019512176514], + [1.9068971872329712, -3.6915512084960938], + [3.2816946506500244, -5.088953971862793], + [-5.1090168952941895, 1.5960807800292969], + [0.44783836603164673, 7.986001014709473], + [-2.372342586517334, 2.488341808319092], + [-2.8976993560791016, 0.679206132888794], + [1.4177207946777344, -3.5466701984405518], + [-5.201789379119873, -0.8669632077217102], + [-2.7180938720703125, 2.4272613525390625], + [-5.12803316116333, -1.6981890201568604], + [6.477200984954834, -5.119621276855469], + [-4.796385288238525, 6.554736137390137], + [2.846583604812622, -3.7028605937957764], + [-4.1924357414245605, -2.593219757080078], + [7.8199687004089355, -2.438183069229126], + [-4.384396076202393, 4.640921592712402], + [2.4898393154144287, 0.7320435047149658], + [-5.77366304397583, -2.803407907485962], + [3.0640976428985596, -4.784200191497803], + [-5.471243381500244, -1.4390517473220825], + [-4.199677467346191, -3.393289804458618], + [-6.009815692901611, 2.947413682937622], + [-5.195903301239014, -3.0662598609924316], + [2.2285828590393066, -2.92478346824646], + [3.3052656650543213, -5.461047649383545], + [-3.107865571975708, -2.8584511280059814], + [2.179527997970581, -6.509571075439453], + [-8.117400169372559, -1.3647751808166504], + [3.7226412296295166, -7.626086711883545], + [-3.71667218208313, -3.7434751987457275], + [-0.049123235046863556, 10.59693431854248], + [0.8115788102149963, 1.3216460943222046], + [1.8665196895599365, -8.820051193237305], + [-5.238861560821533, 7.151548385620117], + [1.8067245483398438, 4.537424087524414], + [5.247264385223389, -1.0920870304107666], + [6.8892292976379395, -1.5250234603881836], + [6.860111236572266, -2.4925527572631836], + [2.7841808795928955, -4.519762992858887], + [-0.5462741851806641, 9.875805854797363], + [1.9127098321914673, 5.589679718017578], + [-7.491873264312744, -1.337978482246399], + [-6.99100923538208, -2.2125484943389893], + [-0.33933645486831665, 9.670524597167969], + [8.06814956665039, -2.1640422344207764], + [-4.854498386383057, -3.0944406986236572], + [-3.9094574451446533, -2.5904061794281006], + [-7.315470218658447, 0.4111137390136719], + [-0.4359707236289978, -0.6641814708709717], + [6.250085353851318, -4.075765609741211], + [-2.8949294090270996, -2.9447779655456543], + [-0.03303951770067215, 9.82619857788086], + [2.2917957305908203, 5.9926862716674805], + [-6.129702091217041, 7.498071670532227], + [-5.737423419952393, 6.892755508422852], + [2.1251862049102783, 5.233470916748047], + [7.370175838470459, -1.7757104635238647], + [1.84689199924469, -4.641784191131592], + [3.394437551498413, 5.609295845031738], + [2.657823085784912, -4.221061706542969], + [-3.3403749465942383, -0.4207921624183655], + [-4.121323585510254, 6.001105308532715], + [8.575453758239746, -2.43485426902771], + [3.1450562477111816, -6.768970966339111], + [2.483152151107788, 5.742084503173828], + [-3.4384732246398926, -0.790131688117981], + [-5.827223300933838, -2.443906307220459], + [1.6118420362472534, 5.095846176147461], + [5.383220195770264, -6.382332801818848], + [0.07864996045827866, 1.2399240732192993], + [3.634289264678955, 5.472358703613281], + [1.6135506629943848, -2.860891342163086], + [-5.259053707122803, -2.694075107574463], + [-3.8123738765716553, -2.510499954223633], + [1.921595573425293, -6.2586493492126465], + [-3.3636105060577393, 5.671857833862305], + [2.096771240234375, -7.241793632507324], + [-5.011651515960693, -1.8481882810592651], + [-3.0781466960906982, 3.3780696392059326], + [1.747032642364502, -4.1675825119018555], + [8.982511520385742, -2.627363443374634], + [-2.256265640258789, 0.10620605945587158], + [3.0263915061950684, -5.089292049407959], + [1.7527129650115967, 4.617142200469971], + [-0.2695753574371338, 10.696823120117188], + [-4.274956226348877, -6.036432266235352], + [-2.2220170497894287, 1.0058257579803467], + [2.937394380569458, -4.558955192565918], + [-5.5969719886779785, -3.4540226459503174], + [-3.650869131088257, -3.2549455165863037], + [-4.916567325592041, -1.5402153730392456], + [5.944344520568848, 7.636704921722412], + [-5.697442531585693, -1.6549072265625], + [2.457008123397827, -4.152529716491699], + [-5.255134105682373, 4.511107921600342], + [-4.9416890144348145, -1.0855990648269653], + [-3.078125238418579, 1.2321739196777344], + [0.14647775888442993, -0.3742296099662781], + [0.7081383466720581, -0.09360131621360779], + [-6.018103122711182, -1.9522794485092163], + [-1.0779350996017456, 3.5055787563323975], + [-6.938884258270264, 8.47135066986084], + [-3.6365010738372803, -4.170956611633301], + [-0.23466211557388306, 9.7240571975708], + [0.567261815071106, -6.135201930999756], + [-5.7294487953186035, 4.652227878570557], + [-2.427581548690796, 1.808310866355896], + [-4.49383544921875, 4.955145835876465], + [2.960052251815796, -4.017016887664795], + [1.8176915645599365, -6.857810020446777], + [-1.6999129056930542, -3.7348227500915527], + [-4.761922836303711, 5.858254909515381], + [0.37874603271484375, 7.968931198120117], + [-6.951406002044678, 8.681573867797852], + [1.6201213598251343, 5.206447601318359], + [-0.13898524641990662, -0.9767365455627441], + [-3.914165735244751, 5.4888763427734375], + [2.9051167964935303, -4.392331123352051], + [-0.15420234203338623, 9.622190475463867], + [2.8884634971618652, -4.564643859863281], + [3.1044511795043945, -4.147512435913086], + [-4.793979167938232, 2.137260913848877], + [-2.8973820209503174, -1.476702332496643], + [-6.086714267730713, 7.220078468322754], + [-0.7599927186965942, -3.010197877883911], + [-1.6707412004470825, 1.1914705038070679], + [3.205921173095703, -4.797232627868652], + [2.957873821258545, -4.457965850830078], + [-0.2861781120300293, 9.199556350708008], + [3.7850425243377686, 5.741883277893066], + [-2.7338807582855225, 1.6690064668655396], + [-0.6250833868980408, 5.786154270172119], + [-5.102363109588623, -5.362449645996094], + [7.771976947784424, -1.993186354637146], + [-2.342510938644409, -1.9094830751419067], + [9.610936164855957, -2.6802079677581787], + [3.042015314102173, -4.586377143859863], + [-0.24351650476455688, 9.849298477172852], + [-3.4254329204559326, 5.440060615539551], + [0.11979927867650986, -0.3190131187438965], + [-4.361177921295166, -2.0717408657073975], + [5.075869083404541, -5.59402322769165], + [-2.3195738792419434, 2.038170099258423], + [-0.26372814178466797, -0.4207565188407898], + [-3.544414758682251, -1.6257132291793823], + [5.480820178985596, -1.2145859003067017], + [-4.738082408905029, -1.972928762435913], + [2.787304162979126, -4.243221282958984], + [-6.793849945068359, 8.69759750366211], + [-0.7625027298927307, 11.989709854125977], + [-1.6693390607833862, 5.336199760437012], + [-5.425220966339111, -3.191298007965088], + [8.549254417419434, -2.5702648162841797], + [-3.2871253490448, 0.9221234321594238], + [-5.578761100769043, -1.3982701301574707], + [-5.022340297698975, 0.5623196959495544], + [0.707462728023529, 5.6495490074157715], + [-7.9365363121032715, -1.4851796627044678], + [-0.8050850033760071, -0.419502854347229], + [-0.5048630833625793, -1.1068629026412964], + [-2.5016438961029053, 0.670745849609375], + [8.650395393371582, -2.277066946029663], + [-2.430471658706665, 5.3247599601745605], + [-5.63129997253418, 4.008764266967773], + [1.5745352506637573, 4.42842960357666], + [1.924393892288208, -4.572348594665527], + [-0.7183430790901184, 5.750688076019287], + [-4.903614521026611, 5.083401679992676], + [-5.857862949371338, -3.5560524463653564], + [-7.414844036102295, 9.01298999786377], + [9.66740608215332, -2.878840208053589], + [9.847126007080078, -2.7241060733795166], + [2.9820058345794678, -4.779387474060059], + [-2.129727602005005, 2.7629554271698], + [-8.360821723937988, -1.1205092668533325], + [0.8782461285591125, -5.571911811828613], + [-3.386826753616333, -1.3538786172866821], + [-4.3422322273254395, 3.3210062980651855], + [-0.30061423778533936, 10.014829635620117], + [0.9494202733039856, 5.470632076263428], + [-2.384385347366333, 5.159466743469238], + [-3.992885112762451, -3.851198434829712], + [9.77358341217041, -2.782221555709839], + [-3.7266464233398438, -3.858327865600586], + [1.535699486732483, -7.977415084838867], + [-3.629094362258911, -4.658624172210693], + [8.584486961364746, -2.6938183307647705], + [-7.737559795379639, 9.486581802368164], + [-0.22695714235305786, 9.763082504272461], + [2.987060308456421, -6.656477928161621], + [2.5942885875701904, -4.135707855224609], + [-1.6250323057174683, 2.0232412815093994], + [-0.5824556350708008, 9.49933910369873], + [2.471489906311035, -3.899291515350342], + [0.2389666736125946, -0.5378678441047668], + [-5.689570903778076, 7.2340497970581055], + [-1.9440622329711914, 2.6277554035186768], + [4.496888160705566, -0.8884718418121338], + [-4.131179332733154, 3.33119797706604], + [-0.5213687419891357, -1.1868313550949097], + [-4.0652570724487305, -3.360720634460449], + [2.422571897506714, -3.982844591140747], + [2.171325922012329, -4.0023298263549805], + [-5.198198318481445, 7.268458366394043], + [-6.191418170928955, 1.170632004737854], + [5.635464668273926, -0.9878371953964233], + [-4.8263959884643555, 3.859034538269043], + [-1.771993637084961, 0.9356376528739929], + [3.1128125190734863, -4.66034460067749], + [-0.5442497730255127, 10.03023624420166], + [2.9107906818389893, -4.466170787811279], + [-0.4945003390312195, 9.663576126098633], + [-5.3747124671936035, -4.92521858215332], + [8.73153305053711, -2.4439971446990967], + [-3.4576351642608643, 3.57788348197937], + [-0.19178926944732666, 9.207632064819336], + [2.5378506183624268, -7.576549530029297], + [-6.160715579986572, 7.087617874145508], + [-3.409355878829956, 5.896031379699707], + [-2.362300157546997, 2.242048740386963], + [8.29683780670166, -1.8859623670578003], + [1.7997307777404785, -4.520627021789551], + [-5.124087810516357, -1.8643208742141724], + [1.5374054908752441, 0.44110333919525146], + [-4.615306377410889, -0.20763355493545532], + [2.632812976837158, -4.007296085357666], + [-3.458155870437622, -1.1400011777877808], + [1.377976655960083, 5.1992573738098145], + [3.3297319412231445, -5.8510003089904785], + [6.9556193351745605, -2.4935450553894043], + [-2.1040658950805664, 2.6454012393951416], + [-0.7422768473625183, 8.97630500793457], + [-3.724761724472046, -3.7207493782043457], + [-2.0762598514556885, -1.074093222618103], + [-0.4169604778289795, 11.021803855895996], + [-0.27551358938217163, 9.737824440002441], + [-5.704123020172119, -1.2869409322738647], + [2.1367976665496826, 5.880550384521484], + [4.327705383300781, 7.323687553405762], + [-4.90774393081665, -5.667707443237305], + [1.8676973581314087, -7.028910160064697], + [5.760984897613525, -4.905299663543701], + [3.102003335952759, -6.689568519592285], + [3.068230390548706, -4.745669364929199], + [-4.233471393585205, -4.074123382568359], + [-7.0037031173706055, 8.857588768005371], + [4.883031368255615, 7.355486869812012], + [-4.862736701965332, -4.205820083618164], + [2.055750608444214, -7.055093765258789], + [1.4419612884521484, 4.385733604431152], + [3.0547192096710205, -4.35162353515625], + [-0.4176914095878601, 10.316930770874023], + [-2.7193233966827393, -4.246460437774658], + [-2.9347636699676514, -4.452235221862793], + [0.2714325189590454, -5.386319160461426], + [3.076343297958374, -4.530074596405029], + [6.811194896697998, -1.581040382385254], + [-5.0541300773620605, -0.752758264541626], + [-2.5645298957824707, 6.022012233734131], + [1.3947149515151978, 4.727678298950195], + [3.189391851425171, -5.001821517944336], + [8.15424633026123, -2.0921685695648193], + [-6.549560546875, 7.680215358734131], + [2.8554656505584717, -4.336101531982422], + [10.809236526489258, -2.9649112224578857], + [-0.6789003014564514, 9.873242378234863], + [9.595606803894043, -2.6758387088775635], + [-4.197733402252197, -3.959024667739868], + [-1.8987277746200562, 1.774415135383606], + [-6.439718723297119, 8.39202880859375], + [-2.6062960624694824, 1.6620726585388184], + [1.2430181503295898, -3.5428268909454346], + [-5.382474422454834, -2.474912643432617], + [-6.577090740203857, 1.2222630977630615], + [2.6532113552093506, -2.7843563556671143], + [-5.218036651611328, -2.245562791824341], + [0.041828326880931854, -0.9324394464492798], + [-2.2261757850646973, 1.3424361944198608], + [1.3547279834747314, -7.924051284790039], + [-5.395137786865234, -3.4338061809539795], + [-7.2255024909973145, 1.1515108346939087], + [-5.571065425872803, -5.811498641967773], + [-3.4554293155670166, 4.380377292633057], + [-2.4399757385253906, 2.561828374862671], + [-8.026131629943848, -0.5809285640716553], + [3.8706185817718506, -2.8324453830718994], + [2.360704183578491, 5.896340370178223], + [-5.788304328918457, -1.5425244569778442], + [-4.947981357574463, 6.780541896820068], + [-3.2644293308258057, -3.104997158050537], + [-5.359197616577148, 1.0574605464935303], + [-5.312109470367432, 6.967503070831299], + [3.0785341262817383, -4.97465181350708], + [2.0916552543640137, -5.764041423797607], + [3.102633237838745, -4.652565956115723], + [-0.27442681789398193, 9.459325790405273], + [-5.469895839691162, -1.6798146963119507], + [2.471897602081299, -4.218985557556152], + [0.7152542471885681, 0.004692818969488144], + [-5.674661636352539, 3.2830679416656494], + [0.40552183985710144, -0.9914128184318542], + [-0.3906785845756531, 10.442977905273438], + [-5.473738670349121, 6.1413445472717285], + [-6.518703937530518, 7.686820983886719], + [4.971553325653076, -1.112130880355835], + [-3.9520151615142822, -3.3620293140411377], + [-3.7261962890625, -1.7892003059387207], + [3.0115926265716553, -4.726443767547607], + [-5.6263108253479, -0.6965939402580261], + [6.6435675621032715, -2.866360902786255], + [3.256035566329956, 5.503508567810059], + [-2.1590657234191895, 1.559651494026184], + [-0.23671823740005493, 10.51646900177002], + [-1.9154646396636963, 2.227631092071533], + [-3.472740411758423, -2.3990588188171387], + [2.1854240894317627, 5.475068092346191], + [-4.705148220062256, 5.619241237640381], + [-5.579172611236572, -3.4718472957611084], + [5.987508296966553, -2.9305620193481445], + [7.242532253265381, -2.243056297302246], + [3.0354387760162354, -4.559185028076172], + [8.303356170654297, -3.0204885005950928], + [-0.7931294441223145, 9.034553527832031], + [-5.930234432220459, 7.592363357543945], + [-4.073013782501221, -2.0735058784484863], + [-3.045598268508911, 5.858461380004883], + [7.869169235229492, -3.2872159481048584], + [-3.9547030925750732, 0.16464561223983765], + [-0.2745974659919739, 10.074052810668945], + [-6.0135369300842285, 1.5515302419662476], + [2.0304412841796875, -6.586455345153809], + [-2.464618444442749, 0.785775363445282], + [2.549103260040283, 1.1644591093063354], + [-5.721053600311279, 7.473816394805908], + [-2.3928184509277344, -0.9590442180633545], + [-5.830369472503662, -2.228337049484253], + [1.6826269626617432, -8.645142555236816], + [-4.607497692108154, -3.9181911945343018], + [-8.078165054321289, -0.6772112846374512], + [0.34410643577575684, 9.787678718566895], + [-3.5040090084075928, 3.4630513191223145], + [1.4188954830169678, -7.544322967529297], + [3.1592862606048584, -4.983202934265137], + [4.922618389129639, -1.0430094003677368], + [-6.127308368682861, -0.8969911336898804], + [2.8304545879364014, -4.283137798309326], + [-4.507148742675781, 7.602858066558838], + [-4.976943016052246, -3.293238401412964], + [-2.4107182025909424, 1.671474814414978], + [-5.388923645019531, -2.1490445137023926], + [6.1463236808776855, 7.795207500457764], + [-0.17455977201461792, 9.935604095458984], + [-0.7702688574790955, 5.426093101501465], + [-8.656209945678711, -0.9262148141860962], + [6.910651683807373, -1.5049043893814087], + [-2.476442813873291, 2.422536849975586], + [0.9484403729438782, -6.98016357421875], + [-6.277434349060059, 7.522214412689209], + [-3.846430540084839, 4.609070777893066], + [-5.337008953094482, -3.2795870304107666], + [-3.54145884513855, 5.632232666015625], + [-2.6369452476501465, 6.7747015953063965], + [3.0331125259399414, -4.76699686050415], + [1.563230276107788, -7.051028728485107], + [-3.797837495803833, -2.581178903579712], + [-6.111069202423096, 1.1913710832595825], + [1.7140077352523804, 5.761539459228516], + [-0.49184101819992065, 11.010560989379883], + [-3.327502489089966, -2.5851869583129883], + [-5.596375465393066, 0.4555138349533081], + [2.1009654998779297, -6.616556167602539], + [3.0998260974884033, -4.903358459472656], + [-6.730527400970459, 8.429805755615234], + [1.6001324653625488, -7.958915710449219], + [1.2170149087905884, -0.043348994106054306], + [-5.698019504547119, 2.9698126316070557], + [-4.028250217437744, 4.396964073181152], + [-4.9115519523620605, -0.7259507179260254], + [10.400097846984863, -2.860675811767578], + [-3.845087766647339, -1.4398144483566284], + [3.0639352798461914, -4.900341033935547], + [-4.7355427742004395, 3.4680135250091553], + [-0.1958237886428833, -0.7839833498001099], + [-2.9789459705352783, -3.7803151607513428], + [1.4951565265655518, 0.31692415475845337], + [-6.776126384735107, -1.8785127401351929], + [-4.656160831451416, -1.1293256282806396], + [-7.868320465087891, -1.2586957216262817], + [-4.678941249847412, 6.63246488571167], + [2.0467493534088135, 0.8643006086349487], + [-5.542635440826416, -4.495293617248535], + [6.712728500366211, -1.9016116857528687], + [-6.833446502685547, -1.8449254035949707], + [-5.489927291870117, 2.9409115314483643], + [1.662060260772705, 0.22449219226837158], + [-5.080030918121338, -5.513315200805664], + [-5.51495885848999, 6.348227024078369], + [-4.253172874450684, -3.27363657951355], + [-4.967515468597412, 5.859062194824219], + [0.6096946597099304, -5.441470146179199], + [2.0653743743896484, 5.725752830505371], + [0.6166272759437561, -0.6065992116928101], + [-6.3359551429748535, 7.739055633544922], + [5.389562129974365, 7.6473164558410645], + [2.7207159996032715, -4.204501152038574], + [1.4456872940063477, -7.776530742645264], + [-5.955726146697998, 2.235170841217041], + [6.741063594818115, -1.5337069034576416], + [2.9885122776031494, -4.5711669921875], + [6.143274307250977, -2.030177593231201], + [-3.069159746170044, 2.6051173210144043], + [-4.4117608070373535, -3.651245355606079], + [0.23827111721038818, -5.455932140350342], + [-5.86648416519165, 2.2207882404327393], + [-2.2523980140686035, -2.2676684856414795], + [2.6033806800842285, -4.032810688018799], + [-0.4104805588722229, 10.204893112182617], + [-3.743299961090088, -1.845828652381897], + [8.138069152832031, -2.0597150325775146], + [6.094742298126221, -5.01646089553833], + [-4.904278755187988, 4.729851722717285], + [1.8737881183624268, 4.418947219848633], + [-3.7206485271453857, -4.623572826385498], + [-2.422646999359131, 0.8963874578475952], + [-4.07887601852417, -1.4825800657272339], + [3.4845170974731445, -3.898984670639038], + [-7.185749530792236, -2.199572801589966], + [-1.7152831554412842, -0.6382399797439575], + [3.1169488430023193, -4.137997627258301], + [-5.180375576019287, 4.326836109161377], + [-4.567996978759766, 1.947696328163147], + [2.9894583225250244, -4.625489711761475], + [-0.30951154232025146, 11.125883102416992], + [-0.7406131625175476, 12.378304481506348], + [8.737030029296875, -2.5117685794830322], + [-5.386807441711426, -4.2605180740356445], + [6.178003311157227, -3.168567419052124], + [1.0737426280975342, -7.021167755126953], + [-5.223656177520752, -1.1351454257965088], + [-2.0313472747802734, 5.714838981628418], + [-5.74769926071167, 6.404332160949707], + [8.296067237854004, -2.5851900577545166], + [3.0362436771392822, -6.327186584472656], + [5.464468955993652, -1.4717282056808472], + [-3.3932013511657715, 5.470612049102783], + [0.8652865290641785, 4.162631988525391], + [-2.2917864322662354, 0.44062989950180054], + [-5.766663551330566, 2.1366114616394043], + [1.8534541130065918, 1.8300906419754028], + [5.564873695373535, -3.099264144897461], + [1.0465879440307617, 2.724586248397827], + [-0.2126649022102356, 10.376787185668945], + [1.4600595235824585, -7.575384140014648], + [-3.482734441757202, -2.3819057941436768], + [-6.2069549560546875, 7.828042030334473], + [-1.4477583169937134, 0.4471967816352844], + [9.355439186096191, -2.6095056533813477], + [-1.7085480690002441, 0.0447845421731472], + [9.463706970214844, -2.6337435245513916], + [-4.9693732261657715, -4.345790386199951], + [-6.278879642486572, 4.039921760559082], + [-2.650644063949585, 6.648856163024902], + [2.8820884227752686, -4.428189754486084], + [-5.286620616912842, -4.779793739318848], + [-5.667098522186279, 1.9498181343078613], + [2.5832040309906006, -4.070127964019775], + [-6.052333354949951, -1.9316378831863403], + [-5.608314037322998, -2.8123743534088135], + [3.0192556381225586, -5.850659370422363], + [-5.884652614593506, 5.769474983215332], + [-2.3825631141662598, 3.4624428749084473], + [-1.5076870918273926, 1.3364019393920898], + [2.0280745029449463, -1.4924558401107788], + [2.342479944229126, -4.63430643081665], + [-1.9165611267089844, 2.492310047149658], + [-4.566137790679932, 3.2390663623809814], + [3.765490770339966, -4.743160247802734], + [7.492432594299316, -1.8648803234100342], + [-2.4124138355255127, 1.3780744075775146], + [2.550072431564331, 4.779629707336426], + [1.8049522638320923, 4.492857933044434], + [-2.4421675205230713, -1.6198818683624268], + [2.566099166870117, -3.997372627258301], + [-4.795870780944824, -2.6071224212646484], + [2.126873254776001, 5.913630485534668], + [-2.7476789951324463, -4.132750511169434], + [5.1669135093688965, -1.4893525838851929], + [2.0884575843811035, -3.510633945465088], + [-3.9683923721313477, 0.27898842096328735], + [-3.466738224029541, -2.0216243267059326], + [5.6833577156066895, -1.3872957229614258], + [4.213104724884033, -4.001616477966309], + [7.595982074737549, -1.8750568628311157], + [-4.156936168670654, 3.6999080181121826], + [-5.8946709632873535, 3.056239128112793], + [5.463304042816162, -1.3301883935928345], + [-4.808920383453369, -3.9725024700164795], + [-4.099749565124512, -1.4177225828170776], + [-6.646021366119385, 8.024892807006836], + [2.6988155841827393, -4.057838439941406], + [-3.916264057159424, -0.5471725463867188], + [-7.932465553283691, -1.407283067703247], + [3.3070316314697266, -2.656611919403076], + [-4.2493367195129395, 4.761942386627197], + [-4.086625576019287, 4.881893157958984], + [-4.002849102020264, -1.5083242654800415], + [1.2313282489776611, -5.747679710388184], + [2.8701794147491455, -4.315234184265137], + [7.174130916595459, -1.5177894830703735], + [-3.24190354347229, -3.0710060596466064], + [6.772438049316406, -1.6952606439590454], + [-0.43577468395233154, 10.912239074707031], + [3.0680758953094482, -4.624131202697754], + [-3.3325674533843994, 6.828339576721191], + [1.5588150024414062, -8.821846008300781], + [-3.634626865386963, -2.896798849105835], + [-5.63932991027832, -2.8635947704315186], + [-5.708515644073486, -2.421776294708252], + [-4.434401035308838, 6.117016315460205], + [-6.744499206542969, 8.178661346435547], + [-5.740231990814209, 7.967609405517578], + [0.11876922100782394, -0.38105708360671997], + [-4.346622467041016, -3.6179134845733643], + [-4.838626384735107, -1.9560774564743042], + [-2.9464073181152344, -4.919857025146484], + [-0.9053913950920105, 9.932947158813477], + [2.6573355197906494, 5.186517715454102], + [-2.994541883468628, 6.031356334686279], + [-4.739073276519775, -2.508199691772461], + [-2.434706926345825, 0.9243757724761963], + [6.140453338623047, -1.3820720911026], + [2.195164680480957, -8.629794120788574], + [1.3779741525650024, -2.691211700439453], + [-4.655581951141357, 0.608389139175415], + [-0.10050804167985916, 10.086870193481445], + [2.8892791271209717, -4.512493133544922], + [-5.449891567230225, 8.302833557128906], + [-2.3638343811035156, 1.5142033100128174], + [-2.0353763103485107, 0.12595760822296143], + [-5.379183292388916, 6.100278854370117], + [-4.564136981964111, -4.290642738342285], + [-0.8217228651046753, 2.8422086238861084], + [0.9724748730659485, -5.835970878601074], + [-6.622704029083252, 0.16485941410064697], + [-5.962324619293213, -1.8247750997543335], + [-7.632625579833984, -1.8132866621017456], + [2.298898458480835, -7.60236930847168], + [2.5838587284088135, -4.262200355529785], + [-2.099627733230591, 2.476731538772583], + [10.965100288391113, -3.0110113620758057], + [-3.558619260787964, -4.67698860168457], + [-7.357481479644775, 0.15111172199249268], + [-3.622370958328247, -2.8575356006622314], + [-5.688258647918701, -4.790169715881348], + [-2.909741163253784, 5.471047401428223], + [-3.6754958629608154, -1.8396636247634888], + [-5.282967567443848, -0.835246205329895], + [-2.2640137672424316, 2.204653024673462], + [-5.594976902008057, -1.3376888036727905], + [-7.747208118438721, -1.2687033414840698], + [-4.682065486907959, 3.4076929092407227], + [-2.596190929412842, 2.0393152236938477], + [-5.115657806396484, 5.421422481536865], + [-3.522731065750122, 3.7521109580993652], + [-6.6552205085754395, 1.2002148628234863], + [-2.281564235687256, 2.6712770462036133], + [-4.882826328277588, 7.64497184753418], + [-3.744004011154175, -1.431021809577942], + [-4.424249649047852, -1.6342206001281738], + [-3.162099599838257, -3.688175678253174], + [-6.952691555023193, 8.836146354675293], + [-0.26164817810058594, -0.4065261781215668], + [2.104849338531494, -8.937017440795898], + [-3.505108594894409, -2.4831182956695557], + [-2.162081003189087, 2.605327844619751], + [-6.755771160125732, 8.326501846313477], + [7.6604390144348145, -2.636018753051758], + [2.0424964427948, -3.6301612854003906], + [0.02308478206396103, -0.7185666561126709], + [-3.386612892150879, 5.526172637939453], + [-4.785431385040283, -2.4489076137542725], + [-4.645472049713135, -1.7491955757141113], + [-2.065203905105591, 5.454058647155762], + [-1.0064088106155396, 5.86736536026001], + [1.849149465560913, -3.2793054580688477], + [-0.17846107482910156, 10.582382202148438], + [2.940627336502075, -4.765241622924805], + [-4.411297798156738, 0.5847129821777344], + [6.307407855987549, -1.3053077459335327], + [5.641600608825684, -4.944286346435547], + [1.7252545356750488, 4.975893020629883], + [2.6711175441741943, -4.09090518951416], + [6.49624490737915, -2.953474521636963], + [1.4673218727111816, 4.101724147796631], + [1.2293410301208496, -6.025049209594727], + [-3.952498197555542, 6.399674415588379], + [3.5904359817504883, 6.359230995178223], + [-0.5129920244216919, 9.604572296142578], + [1.4357236623764038, 6.27054500579834], + [-1.4018895626068115, 5.612518787384033], + [2.868509292602539, -4.358494281768799], + [-1.0222156047821045, 9.507113456726074], + [-4.65352201461792, 4.621242046356201], + [3.1581170558929443, -4.856453895568848], + [-4.915956020355225, -0.22001290321350098], + [7.507760047912598, -1.718001365661621], + [2.150630235671997, -6.773716449737549], + [-2.255265951156616, -1.945282220840454], + [-2.835251569747925, 2.304089307785034], + [-4.929269790649414, -4.709616661071777], + [-6.884371280670166, 3.4549248218536377], + [-0.2537217140197754, 7.605180740356445], + [-2.3643810749053955, 2.0786519050598145], + [-5.796620845794678, -0.15160810947418213], + [-7.409115314483643, 9.018997192382812], + [2.800935745239258, 0.8492774963378906], + [2.592298746109009, -7.490229606628418], + [-3.04843807220459, 6.218899726867676], + [-5.407158374786377, 2.7875375747680664], + [1.2026687860488892, 4.832079887390137], + [-4.739149570465088, -2.4240972995758057], + [-4.460320949554443, -2.4204468727111816], + [-3.738539934158325, -3.376264810562134], + [6.1222147941589355, -5.1285400390625], + [-2.6657259464263916, 0.8640891313552856], + [3.142768383026123, -4.710082054138184], + [-2.628375291824341, -2.3302524089813232], + [-0.9478286504745483, 9.360651016235352], + [-8.076562881469727, -1.3050802946090698], + [3.8221075534820557, -5.495157241821289], + [-2.691969156265259, 4.865395545959473], + [7.115703105926514, -2.169153928756714], + [2.753925085067749, -4.163257598876953], + [-0.19114691019058228, 10.235858917236328], + [1.5489656925201416, -8.195483207702637], + [-2.4514217376708984, 3.876657724380493], + [3.4951822757720947, -3.130157709121704], + [-3.4691431522369385, 5.536060810089111], + [1.492429494857788, -8.264315605163574], + [-1.7176762819290161, 0.907356858253479], + [-1.9204095602035522, 1.9875298738479614], + [2.061305284500122, 2.012702226638794], + [-6.182708740234375, 7.366086959838867], + [0.10086636990308762, 8.553858757019043], + [-2.135021209716797, 0.6472563743591309], + [1.6910964250564575, 4.356534004211426], + [3.0868608951568604, -4.851526260375977], + [2.9997522830963135, -4.512184143066406], + [-2.4700000286102295, 1.9135276079177856], + [-0.23380213975906372, 10.069402694702148], + [-1.951100468635559, 2.4646005630493164], + [-4.8099141120910645, -0.34848666191101074], + [0.47230011224746704, 0.7043168544769287], + [2.0001919269561768, -7.666255950927734], + [-2.795705556869507, 2.3763649463653564], + [-2.0550992488861084, 2.531200647354126], + [2.972496509552002, -4.470758438110352], + [6.871004581451416, -1.8352724313735962], + [-6.07581090927124, 7.204521179199219], + [-2.212599754333496, 2.2474403381347656], + [3.1830670833587646, -4.81449031829834], + [-1.1056009531021118, 10.688335418701172], + [-0.10551468282938004, -2.9964654445648193], + [-3.2646610736846924, 3.5440280437469482], + [6.699377536773682, -3.9084672927856445], + [1.1481108665466309, 1.0615450143814087], + [1.2280024290084839, 0.6512824892997742], + [8.52940845489502, -2.394216775894165], + [0.020767860114574432, 9.586402893066406], + [-4.724826335906982, -2.5634377002716064], + [-0.2531086206436157, 9.421392440795898], + [2.6881659030914307, -4.0735602378845215], + [-0.2588987946510315, 9.96926498413086], + [7.345553874969482, -1.589745283126831], + [2.01289439201355, -7.522937774658203], + [-5.351683616638184, -3.2262156009674072], + [2.2180721759796143, -3.7693302631378174], + [-5.5819597244262695, 4.856564521789551], + [-3.2386386394500732, -4.405105113983154], + [1.6129077672958374, -8.072396278381348], + [-6.7047505378723145, -0.6953859329223633], + [1.639625906944275, -5.913850784301758], + [-5.978306293487549, -0.30046457052230835], + [-6.489321231842041, 8.20616340637207], + [-0.25254958868026733, 10.035202026367188], + [-5.618600368499756, 7.455165863037109], + [-5.064562797546387, 7.348178863525391], + [-1.3406612873077393, -0.64170241355896], + [-5.166599750518799, 1.182084560394287], + [-6.078968524932861, 4.696014881134033], + [-2.0342395305633545, 1.5490636825561523], + [3.1168386936187744, -4.774213790893555], + [2.890528917312622, -4.675481796264648], + [-4.730222702026367, 3.5772323608398438], + [2.7021381855010986, -5.647727012634277], + [-6.613522052764893, 8.278614044189453], + [-2.420844554901123, 1.8919986486434937], + [-2.699018716812134, 1.3406305313110352], + [2.8705155849456787, 6.421635627746582], + [-2.450399160385132, 1.8971583843231201], + [-2.4737462997436523, 1.3961843252182007], + [-0.567004919052124, -1.7480348348617554], + [0.12738627195358276, -1.4725602865219116], + [2.1530838012695312, 0.9248661994934082], + [3.94673228263855, -4.633203983306885], + [2.182929277420044, 0.9952493906021118], + [-6.1095356941223145, -2.3794987201690674], + [-2.0467915534973145, 2.115204334259033], + [-2.927151918411255, 6.446408271789551], + [-4.108799934387207, -3.5419156551361084], + [2.200301170349121, -3.7558224201202393], + [-2.8922030925750732, -2.9392929077148438], + [8.08435344696045, -2.458879232406616], + [9.060482025146484, -2.542391538619995], + [-5.231753826141357, -2.2966840267181396], + [0.5673164129257202, 9.903369903564453], + [4.077253818511963, 7.175535202026367], + [2.004363775253296, 0.4249476194381714], + [-4.806901931762695, -0.3183000087738037], + [2.354001045227051, 5.547348499298096], + [6.077366352081299, -2.9068167209625244], + [-3.4823567867279053, 3.8371009826660156], + [-1.4157297611236572, 4.8361358642578125], + [8.071394920349121, -2.587925434112549], + [9.82983684539795, -2.767209768295288], + [-5.691656589508057, -2.8679912090301514], + [-0.023348398506641388, 9.53769302368164], + [2.841134786605835, -4.47959566116333], + [-0.006944961845874786, 8.40338134765625], + [2.7255053520202637, -4.2302045822143555], + [5.23250150680542, 7.586887359619141], + [-1.309667706489563, 10.101005554199219], + [-4.483644485473633, -1.2192763090133667], + [-0.4563015103340149, 10.361380577087402], + [-7.700584888458252, -1.452902913093567], + [3.017137289047241, -4.693800926208496], + [3.721421480178833, 6.422694683074951], + [-6.169795513153076, 7.229961395263672], + [-2.5647027492523193, 1.6378989219665527], + [-5.25821590423584, -7.101934909820557], + [-5.251185417175293, -5.169076442718506], + [-5.060708522796631, 6.285058498382568], + [4.44758939743042, -2.1483089923858643], + [2.8238725662231445, -4.566575050354004], + [-2.4536828994750977, 2.0529212951660156], + [-0.5690959692001343, 8.826391220092773], + [-3.062269687652588, 6.822617053985596], + [-2.2016959190368652, 0.7101031541824341], + [-5.743575572967529, 1.1762676239013672], + [-3.8359644412994385, -0.4648520350456238], + [-4.8730034828186035, 0.5908650159835815], + [2.705399990081787, -4.317874908447266], + [8.655123710632324, -2.450589418411255], + [5.356683254241943, -1.8880516290664673], + [8.928916931152344, -2.530036211013794], + [1.7666574716567993, 6.66755485534668], + [-0.5204723477363586, 11.434392929077148], + [3.197261333465576, -5.129818439483643], + [3.055413246154785, -4.600831985473633], + [-5.449608325958252, -3.1901373863220215], + [3.121206045150757, -4.890146255493164], + [0.9390333294868469, -3.9713666439056396], + [-7.552394390106201, 9.167763710021973], + [-5.455955982208252, -1.0896409749984741], + [8.971673965454102, -2.3712000846862793], + [2.9618871212005615, -5.540165901184082], + [-2.9829461574554443, 4.71442985534668], + [-5.8233256340026855, -2.6364192962646484], + [-4.695006847381592, 1.6276847124099731], + [9.003755569458008, -2.7453863620758057], + [-4.74982213973999, 8.023090362548828], + [-1.0013145208358765, 0.60425865650177], + [1.6582133769989014, -7.111485481262207], + [2.54762601852417, -5.975298881530762], + [-4.464413642883301, -4.147576332092285], + [0.31839561462402344, 1.029099941253662], + [2.093518018722534, -4.012701988220215], + [-5.189291477203369, 2.077224016189575], + [3.056562662124634, -4.600883960723877], + [2.865537643432617, -5.9043474197387695], + [-0.7414621710777283, 11.993949890136719], + [-6.629345417022705, 7.937739849090576], + [0.5157924294471741, -0.4523700177669525], + [2.6372644901275635, 0.9332388639450073], + [-0.4429473280906677, 10.335264205932617], + [-4.42371129989624, -1.3856736421585083], + [-4.167239189147949, -1.2054065465927124], + [-5.829624176025391, 1.8725496530532837], + [-1.7424293756484985, 0.9920641183853149], + [2.4330923557281494, -5.8598456382751465], + [1.4508311748504639, 0.2941080927848816], + [-5.817025661468506, -2.338175058364868], + [-5.491297245025635, -1.568927526473999], + [-4.047447681427002, 3.6130788326263428], + [-3.61242413520813, 5.479036808013916], + [-0.41389650106430054, 10.088713645935059], + [-5.030110836029053, -0.347334623336792], + [-0.28253239393234253, 10.541644096374512], + [-0.08528775721788406, 9.592733383178711], + [-2.553725004196167, 2.244300603866577], + [0.3347432613372803, -0.07013900578022003], + [-2.5015652179718018, 1.600096344947815], + [3.024503707885742, -5.954869270324707], + [-4.863081455230713, -2.970207452774048], + [-4.238187789916992, -3.173680543899536], + [-5.076874256134033, 1.2770737409591675], + [-4.565271854400635, 4.074665069580078], + [-5.352134704589844, -3.5481574535369873], + [-3.679872751235962, 5.103275299072266], + [-5.3095784187316895, 6.119269371032715], + [-4.610828876495361, -0.6846137046813965], + [9.653841972351074, -2.6224169731140137], + [2.3960604667663574, -3.724229335784912], + [-6.163618087768555, -2.506148338317871], + [-2.2666923999786377, -2.152998208999634], + [-0.14688318967819214, 9.970623016357422], + [-6.142654895782471, -2.5561347007751465], + [1.0858008861541748, -3.3234994411468506], + [-4.08027982711792, 3.737240791320801], + [2.88015079498291, 0.6804747581481934], + [8.82214069366455, -2.3806231021881104], + [-4.91449499130249, 0.46741753816604614], + [-2.3520267009735107, 0.6483498215675354], + [-6.461052417755127, 7.6959757804870605], + [4.9583210945129395, -1.7977638244628906], + [-2.3478739261627197, 1.434685468673706], + [2.277625799179077, -3.9575107097625732], + [8.454938888549805, -2.1808531284332275], + [1.3239960670471191, -4.038561820983887], + [0.7031498551368713, -2.9620511531829834], + [-0.13768500089645386, 9.394783973693848], + [-4.326785087585449, -0.7017101049423218], + [-3.417426824569702, -1.8482286930084229], + [5.726065158843994, -1.563284158706665], + [-3.8236258029937744, 0.3895389437675476], + [3.3800132274627686, -3.2183897495269775], + [-3.438335657119751, -0.060764554888010025], + [3.1043689250946045, -4.660423755645752], + [-3.729632616043091, -5.660485744476318], + [-5.322159290313721, -3.4480795860290527], + [2.669218063354492, -6.961088180541992], + [2.8078622817993164, -4.336389064788818], + [7.204948425292969, -1.843014121055603], + [5.203111171722412, -1.0980024337768555], + [-7.010868072509766, 8.890647888183594], + [-3.7866125106811523, 7.110164642333984], + [8.108654975891113, -2.086973190307617], + [2.953472375869751, -4.598752975463867], + [-0.29404425621032715, 9.65624713897705], + [-2.6868741512298584, -4.586982250213623], + [-5.172865390777588, -1.8005564212799072], + [-4.7063469886779785, -3.0850777626037598], + [-7.145284175872803, 8.554543495178223], + [2.8523316383361816, -4.324848175048828], + [-4.37092924118042, -2.107067823410034], + [2.81679368019104, -4.155650615692139], + [-4.891305446624756, -3.598879098892212], + [3.318373203277588, 5.94611930847168], + [-1.2861870527267456, 1.5472412109375], + [0.29617616534233093, -1.3080064058303833], + [-6.844027042388916, 7.980271339416504], + [3.170147657394409, -4.739078521728516], + [4.061873435974121, 5.632311820983887], + [-5.942274570465088, 4.950325965881348], + [5.555637836456299, -3.8381142616271973], + [-2.723733425140381, 0.9842181205749512], + [-6.176784992218018, 6.925264358520508], + [4.089572429656982, -1.5684185028076172], + [-4.03339147567749, -3.3437182903289795], + [-0.7105090022087097, 12.115568161010742], + [-2.7005326747894287, -1.342929720878601], + [0.04845938831567764, -0.8169666528701782], + [-4.828903675079346, -2.9888837337493896], + [2.1854758262634277, -7.945250034332275], + [-4.488701820373535, 6.551097393035889], + [-4.422891616821289, -2.33724045753479], + [5.621878147125244, 7.328324317932129], + [-0.5017234683036804, 10.726469039916992], + [-2.6834661960601807, 2.6956875324249268], + [-2.2604715824127197, -1.214728593826294], + [-4.183607578277588, -4.154163360595703], + [-7.587981224060059, 9.486104965209961], + [-0.9497554898262024, 9.991554260253906], + [-4.1204705238342285, -1.188775897026062], + [-7.468238353729248, 9.121353149414062], + [1.9005974531173706, 1.144421100616455], + [9.256468772888184, -2.597484827041626], + [-2.745922803878784, 2.909609079360962], + [-4.362524032592773, 3.7150022983551025], + [-4.96877384185791, -1.6977566480636597], + [-5.148115634918213, -3.3352391719818115], + [-4.294408321380615, -0.8326804637908936], + [0.13385730981826782, -0.9533475637435913], + [-5.082258224487305, -3.04376482963562], + [-5.518998146057129, 7.3466997146606445], + [3.073385000228882, -4.605691432952881], + [-2.2007369995117188, -0.08825498819351196], + [1.3703193664550781, -6.92048454284668], + [-6.171160697937012, 7.876395225524902], + [-5.140976428985596, -3.282442331314087], + [3.553539991378784, -4.089529037475586], + [-0.5858208537101746, -0.3680405020713806], + [-5.250507831573486, 6.029391765594482], + [9.141923904418945, -2.5563912391662598], + [-5.367671489715576, -1.289312481880188], + [2.4653804302215576, 6.027969837188721], + [-2.3342628479003906, 2.802269458770752], + [0.4316021203994751, -1.011961579322815], + [0.3580303192138672, -0.06790122389793396], + [3.195237398147583, 6.581158638000488], + [7.374475002288818, -2.6206440925598145], + [-2.2788684368133545, 0.6584423780441284], + [0.902716875076294, -6.868040561676025], + [-0.20326119661331177, -1.343161702156067], + [1.9176065921783447, -9.494529724121094], + [8.404001235961914, -2.598771333694458], + [0.9155868291854858, 5.563067436218262], + [-0.6020099520683289, 8.383394241333008], + [-5.010725021362305, -3.3492462635040283], + [-8.533381462097168, -0.5177059173583984], + [6.262606143951416, 7.710929870605469], + [-0.44204479455947876, -1.1168426275253296], + [-5.504177093505859, 7.043235778808594], + [1.395707607269287, -7.927322864532471], + [-3.232943296432495, -2.038856029510498], + [-0.2268337607383728, 10.298171997070312], + [-1.0398359298706055, -0.7479251623153687], + [1.5410983562469482, -3.280231237411499], + [-0.9915205240249634, -1.1234091520309448], + [-2.16060733795166, 2.245347738265991], + [-4.716114044189453, -0.18141674995422363], + [-5.110592365264893, -4.688989162445068], + [-5.060078144073486, -2.749631881713867], + [-4.659677028656006, 5.020698547363281], + [-6.410536289215088, 8.468299865722656], + [2.170942544937134, 5.4495344161987305], + [-6.08634614944458, -1.7335197925567627], + [-4.405613422393799, -2.8506247997283936], + [3.120835542678833, -4.724625587463379], + [9.004977226257324, -2.4288246631622314], + [-2.453643321990967, 1.3704354763031006], + [7.245995044708252, -1.5450433492660522], + [0.5458545088768005, 9.856481552124023], + [0.9575297236442566, -0.1469142735004425], + [-2.4737093448638916, -2.7978384494781494], + [-7.947636604309082, -1.374325156211853], + [2.2635653018951416, -5.5464982986450195], + [-6.395035266876221, -1.439674735069275], + [-3.394273519515991, 6.272087097167969], + [-2.3561837673187256, -1.7999835014343262], + [5.013064384460449, -1.0019627809524536], + [-3.7629754543304443, -4.483057498931885], + [-2.5406243801116943, 6.426558494567871], + [-0.14579921960830688, 9.756584167480469], + [-5.303393840789795, 7.671449661254883], + [1.4287089109420776, 4.832982063293457], + [3.2225043773651123, -4.815417766571045], + [7.019661903381348, -1.742534875869751], + [-6.379763126373291, 7.858115196228027], + [0.12834519147872925, 10.43391227722168], + [8.381962776184082, -2.499084234237671], + [4.299313068389893, 6.840207576751709], + [-4.07021951675415, -2.6638357639312744], + [9.026968955993652, -2.5138375759124756], + [2.6386208534240723, -4.117863178253174], + [10.357194900512695, -2.853428602218628], + [-6.963469982147217, 8.510791778564453], + [-3.1564393043518066, -2.6023707389831543], + [-8.474143028259277, 1.8184493780136108], + [-1.993708610534668, 5.679617881774902], + [3.0811362266540527, -4.658746719360352], + [1.6199396848678589, -3.5534896850585938], + [2.3314530849456787, -3.804500102996826], + [3.631307363510132, 0.3875908851623535], + [8.130348205566406, -1.8221616744995117], + [-2.2871270179748535, 0.5822392702102661], + [5.986076354980469, -1.209898829460144], + [-3.8358216285705566, -1.9805775880813599], + [9.183603286743164, -2.674328088760376], + [8.552149772644043, -2.453678846359253], + [-2.157914876937866, -3.190058469772339], + [-4.458145618438721, 3.2553324699401855], + [1.648277759552002, -8.451087951660156], + [3.1101622581481934, -4.6563591957092285], + [-4.880955219268799, -4.242203712463379], + [3.2222230434417725, -4.816298484802246], + [1.7696338891983032, -3.339473247528076], + [-1.0006096363067627, -0.9226435422897339], + [-2.6231765747070312, 1.4967681169509888], + [-4.226722240447998, 5.501126766204834], + [7.727737903594971, -2.0826168060302734], + [-3.8257086277008057, -1.430822730064392], + [-6.405685901641846, -1.4128546714782715], + [5.5263352394104, -1.12590754032135], + [1.2067947387695312, -7.61576509475708], + [-4.982055187225342, -3.0903327465057373], + [-4.3639445304870605, -3.767427682876587], + [-3.8662731647491455, -1.305485725402832], + [2.8410003185272217, -4.289955139160156], + [0.994038999080658, -4.885173797607422], + [-4.410515308380127, 3.4317848682403564], + [-5.346757411956787, 4.434305191040039], + [-3.3660786151885986, -2.479846715927124], + [-1.0058363676071167, -0.6349722146987915], + [6.874638557434082, -1.6206036806106567], + [2.905557155609131, -4.529752731323242], + [2.3833653926849365, -3.785454511642456], + [-6.24798059463501, -0.38666462898254395], + [-5.38986873626709, 7.226583003997803], + [-5.0663371086120605, -2.47890305519104], + [-4.795444488525391, -1.0963817834854126], + [-3.9725406169891357, -1.8410946130752563], + [3.9347822666168213, -6.149505138397217], + [5.705684185028076, -2.845987319946289], + [3.1751339435577393, -4.75108528137207], + [-0.23540276288986206, 9.7672119140625], + [3.0856921672821045, -1.459592342376709], + [-3.7992570400238037, -2.6053390502929688], + [8.145955085754395, -2.08556866645813], + [-4.343535900115967, 6.843165397644043], + [4.314184665679932, -4.308501243591309], + [2.560363292694092, -8.173906326293945], + [-2.4097132682800293, 0.9770225286483765], + [-3.0738391876220703, -1.632400631904602], + [1.2748574018478394, -5.9806342124938965], + [0.24632591009140015, -0.07480394840240479], + [-3.4980885982513428, 1.0790300369262695], + [-2.0260121822357178, 5.185940265655518], + [6.037153720855713, -1.7665194272994995], + [-5.349171161651611, 2.8937385082244873], + [1.5435740947723389, 2.1541216373443604], + [-0.5601852536201477, 9.398754119873047], + [0.11054479330778122, 5.029168605804443], + [-6.3645477294921875, -2.221724033355713], + [-6.071809768676758, -1.5219777822494507], + [-4.034663200378418, -2.639408826828003], + [1.7793630361557007, 5.163609504699707], + [-6.679859638214111, -1.080098032951355], + [-2.63260817527771, -3.2794930934906006], + [0.5914610028266907, -1.0580698251724243], + [-4.868325710296631, -3.050711154937744], + [-3.5633275508880615, 5.080053806304932], + [-5.008533954620361, -2.9496896266937256], + [6.7505202293396, -3.830789566040039], + [-5.268293857574463, -2.505690097808838], + [-0.08197224885225296, 9.661581039428711], + [4.291591644287109, -2.7119619846343994], + [-0.40735191106796265, 10.060384750366211], + [2.030796527862549, 0.6342304944992065], + [-6.441568851470947, 4.930693626403809], + [3.963615655899048, 6.8606462478637695], + [3.30820369720459, -4.939915657043457], + [-5.870947360992432, -2.796947717666626], + [-4.909389972686768, -5.691694259643555], + [0.5078102946281433, -0.5601150393486023], + [-2.4638912677764893, -3.16223406791687], + [-1.8006078004837036, -2.34802508354187], + [2.0526981353759766, -6.242066383361816], + [-6.128626823425293, -2.354337215423584], + [1.155210018157959, -7.134571075439453], + [-2.0693275928497314, 2.786320924758911], + [-0.16120237112045288, 9.73695182800293], + [-3.4227888584136963, -4.099419593811035], + [1.1624125242233276, -5.529474258422852], + [-0.503168523311615, -0.9916707873344421], + [7.467464923858643, -1.8499852418899536], + [7.2710442543029785, -2.2093825340270996], + [-0.19205617904663086, 9.18902587890625], + [-0.1534615159034729, -0.9649412631988525], + [2.518855333328247, -5.896738529205322], + [-2.929579019546509, -3.7242743968963623], + [1.7686710357666016, 5.476564884185791], + [0.39767390489578247, 10.417840957641602], + [2.2604620456695557, 5.646485328674316], + [-7.416099548339844, -1.2019777297973633], + [-1.5551472902297974, 0.1450444459915161], + [-3.5403356552124023, -0.9653654098510742], + [2.349414348602295, -3.445439338684082], + [8.855632781982422, -2.489328145980835], + [0.6560816168785095, -0.6100406050682068], + [0.3724188506603241, 0.7919042706489563], + [8.28052043914795, -2.107854127883911], + [-5.982578754425049, -2.448573350906372], + [-4.908450603485107, 7.296378135681152], + [-0.6776339411735535, -3.288733959197998], + [4.330708026885986, -1.3240309953689575], + [1.5250211954116821, 0.0008952729403972626], + [-3.6532623767852783, -3.220428705215454], + [-5.189363956451416, -2.7246530055999756], + [5.2246575355529785, -1.2233607769012451], + [2.4431569576263428, 5.433459281921387], + [-5.663323879241943, 6.249951362609863], + [5.891824245452881, -1.324428915977478], + [-2.4879541397094727, -0.6253081560134888], + [-3.9282596111297607, -0.059728506952524185], + [3.155308246612549, -4.8250885009765625], + [-4.266509532928467, 7.804173946380615], + [2.8383572101593018, -4.587287425994873], + [-5.4701409339904785, 7.623286247253418], + [-5.257758140563965, -3.259363889694214], + [2.8703572750091553, -4.200809001922607], + [-3.0491950511932373, 2.4268388748168945], + [2.6441619396209717, -7.795808792114258], + [5.100560188293457, 7.351995944976807], + [-2.0649335384368896, 0.16898787021636963], + [-5.398252964019775, -4.294802188873291], + [8.515532493591309, -2.628843069076538], + [-4.915910243988037, -5.854529857635498], + [2.6102240085601807, -3.7598092555999756], + [-2.794757843017578, -1.6053681373596191], + [-1.605359435081482, 1.7443233728408813], + [-4.281367778778076, 1.5436197519302368], + [1.5607118606567383, -6.978379726409912], + [-2.441713809967041, 2.4787113666534424], + [9.059839248657227, -2.5638482570648193], + [-4.157745838165283, -3.4970757961273193], + [2.7329773902893066, -7.47466516494751], + [-0.18801528215408325, 9.684279441833496], + [6.785758972167969, -3.595139265060425], + [-2.776310682296753, 2.790532350540161], + [-4.323706150054932, 4.552097320556641], + [-0.7121307849884033, -0.7556101083755493], + [-4.1898274421691895, -0.8875325918197632], + [-3.6858677864074707, -3.232149362564087], + [-3.7427480220794678, -1.1481544971466064], + [0.5716179609298706, 0.44228214025497437], + [-4.495848655700684, 1.2368065118789673], + [-4.416425704956055, 5.632992744445801], + [-0.3867456912994385, 10.764509201049805], + [6.943925380706787, -1.8470467329025269], + [-0.41438156366348267, 10.69852066040039], + [3.055572271347046, -4.59312105178833], + [-4.239479064941406, -1.1501532793045044], + [-4.9363203048706055, 5.801989555358887], + [6.8579583168029785, -1.8697994947433472], + [-4.388373374938965, -3.3067104816436768], + [9.308117866516113, -2.6067779064178467], + [-5.4454874992370605, -2.4936740398406982], + [0.07683365792036057, 9.423888206481934], + [-4.022542953491211, -1.5443092584609985], + [0.3417638838291168, -3.103013277053833], + [-4.32223653793335, -4.028814315795898], + [2.4149537086486816, -3.040938138961792], + [-1.5236132144927979, -0.3803841769695282], + [-5.437683582305908, -2.919353723526001], + [-4.9633307456970215, 6.5757036209106445], + [2.417556047439575, 0.8504241704940796], + [8.341986656188965, -2.3738462924957275], + [-4.317905426025391, -0.46883535385131836], + [6.394899845123291, 7.998417854309082], + [-4.483351230621338, 3.1212213039398193], + [-3.37961745262146, 3.3540804386138916], + [1.9658749103546143, 5.634150981903076], + [-3.2604854106903076, -1.2430628538131714], + [-4.677823066711426, -2.859178066253662], + [-2.3175716400146484, 1.893105387687683], + [2.817241668701172, -7.829788684844971], + [7.308845520019531, -1.5273078680038452], + [2.3474085330963135, 1.2604740858078003], + [2.319868803024292, -2.601025342941284], + [-2.3468470573425293, 1.6782735586166382], + [-4.7037434577941895, 5.317281723022461], + [-0.21937024593353271, 10.293749809265137], + [2.1967289447784424, -3.8095836639404297], + [5.6001996994018555, -1.3550703525543213], + [-4.374940872192383, 5.246780872344971], + [-5.827851295471191, 0.8951749801635742], + [1.3564937114715576, -5.067843914031982], + [-1.5175788402557373, -2.937669515609741], + [1.2083961963653564, -2.7293291091918945], + [-6.095737934112549, 1.6684526205062866], + [-4.451333045959473, -1.2415231466293335], + [-3.5405290126800537, -1.9099881649017334], + [0.9974625706672668, -6.577038288116455], + [8.114964485168457, -2.3436238765716553], + [-2.156524181365967, 2.3322134017944336], + [-4.446466445922852, -2.7926135063171387], + [5.996984958648682, -1.6291183233261108], + [-5.0409417152404785, 4.786072731018066], + [1.742138147354126, 1.4967471361160278], + [2.711061716079712, -4.115211486816406], + [-4.459035873413086, -2.524489402770996], + [-5.922229290008545, 2.010087728500366], + [-4.681793689727783, -3.2616701126098633], + [2.1848666667938232, 5.504349708557129], + [-1.3920114040374756, 5.067040920257568], + [2.673954963684082, -6.2323455810546875], + [0.21994787454605103, 0.014901924878358841], + [3.1016297340393066, -4.64255428314209], + [-2.6189136505126953, 1.2566163539886475], + [-3.0184285640716553, 4.987656593322754], + [-5.0244140625, -1.390329360961914], + [-3.9897987842559814, 3.601149559020996], + [6.21554708480835, -1.118359088897705], + [9.365836143493652, -2.6221821308135986], + [2.7721378803253174, -4.252232551574707], + [-4.617279052734375, 5.476672172546387], + [7.2565741539001465, -1.7128535509109497], + [-0.5269235968589783, 9.536134719848633], + [5.889753341674805, -0.9380761981010437], + [-2.3300836086273193, 1.3297523260116577], + [-3.308337688446045, 5.873891830444336], + [-0.8105292916297913, -0.6953122615814209], + [-2.2291483879089355, 1.0840171575546265], + [-0.373418927192688, 9.971343994140625], + [-2.503330707550049, 1.879540205001831], + [-2.862295389175415, -0.34938153624534607], + [-3.0370850563049316, 7.196882724761963], + [3.0409181118011475, -6.510427474975586], + [9.726410865783691, -2.8734304904937744], + [-5.488103866577148, 2.151057243347168], + [-0.2692110538482666, 9.936939239501953], + [2.2985732555389404, -6.851174354553223], + [-0.8129797577857971, 9.551513671875], + [2.543531894683838, 3.2744524478912354], + [-5.973569869995117, -2.3838655948638916], + [-6.165432929992676, 1.8087090253829956], + [-0.4675357937812805, 9.487245559692383], + [-0.6525999903678894, 10.456015586853027], + [0.8040823340415955, -7.347838401794434], + [5.73745584487915, -1.1708701848983765], + [-0.6475925445556641, 9.243192672729492], + [-5.27020788192749, 4.066476821899414], + [8.327875137329102, -2.734144926071167], + [7.828303337097168, -3.004624128341675], + [7.668435573577881, -1.8882447481155396], + [-6.553455352783203, 2.7269840240478516], + [0.4359254240989685, -0.5945770740509033], + [-2.590348243713379, 2.040781259536743], + [2.2790186405181885, 1.157875657081604], + [9.784368515014648, -2.7040703296661377], + [3.478813648223877, -2.994475841522217], + [8.364352226257324, -2.235088348388672], + [2.7311646938323975, -4.462325096130371], + [7.69715690612793, -1.9758299589157104], + [4.909304141998291, 7.185779571533203], + [-0.2592660188674927, 10.142267227172852], + [8.10169506072998, -2.402059316635132], + [-4.640817165374756, -3.4894421100616455], + [-2.1060261726379395, -2.3568832874298096], + [-3.4140589237213135, -2.5107810497283936], + [-0.29457688331604004, 9.47878646850586], + [-6.057806491851807, 5.104049205780029], + [-5.964518070220947, -2.112717628479004], + [-2.6362640857696533, -4.001236915588379], + [-4.897655010223389, -2.056896924972534], + [-3.8948400020599365, 6.2081780433654785], + [-2.968425989151001, 0.022368308156728745], + [6.140676498413086, -1.2620035409927368], + [6.252536296844482, -1.2387775182724], + [0.6222546100616455, -0.47646069526672363], + [2.0541062355041504, 5.0688700675964355], + [-0.30461394786834717, 9.373589515686035], + [2.6676900386810303, -4.2559380531311035], + [-2.9831466674804688, -0.7244822978973389], + [-6.201083660125732, 2.4494690895080566], + [1.0556309223175049, -6.631840705871582], + [2.5454647541046143, -3.86651611328125], + [-6.367247104644775, 1.086883544921875], + [-5.742088794708252, 4.78693962097168], + [4.693472385406494, 6.94818115234375], + [-6.550867557525635, -1.4774249792099], + [-4.408542633056641, -3.0509016513824463], + [9.182994842529297, -2.5283353328704834], + [-3.7178404331207275, -3.19714617729187], + [5.440080165863037, -1.3902169466018677], + [-0.29558268189430237, 5.1486406326293945], + [5.626972198486328, 7.4144744873046875], + [-5.696503162384033, -0.9210622906684875], + [9.834115028381348, -2.733949899673462], + [7.705173015594482, -2.113713502883911], + [-7.663850784301758, 9.457456588745117], + [9.336374282836914, -2.605649709701538], + [-2.163623809814453, 0.5180023908615112], + [1.7806395292282104, 2.223989725112915], + [0.9984214901924133, 0.20952674746513367], + [-4.155540943145752, -2.2662699222564697], + [5.643596649169922, -0.9265565872192383], + [-7.765639781951904, 1.1894644498825073], + [3.112499952316284, -7.259729862213135], + [-3.037867784500122, 4.940704345703125], + [-2.576875686645508, 3.097423791885376], + [-3.8641862869262695, 5.30636739730835], + [-3.604870080947876, -1.5503336191177368], + [-5.6031880378723145, 4.708958148956299], + [-0.15360230207443237, 8.557498931884766], + [-3.899489641189575, -3.9855692386627197], + [5.8858642578125, -1.8346543312072754], + [1.8547735214233398, -2.766258955001831], + [3.1780126094818115, -4.777874946594238], + [-4.731677055358887, -2.2857298851013184], + [-7.069555282592773, -1.7605067491531372], + [-4.970062732696533, 5.701553821563721], + [1.6767487525939941, 4.451471328735352], + [-2.668809175491333, 6.200986862182617], + [-0.5801325440406799, 11.699359893798828], + [-4.742227077484131, -1.280750036239624], + [2.4219319820404053, -9.342828750610352], + [1.5520639419555664, -5.291987419128418], + [-0.30509042739868164, 9.722580909729004], + [1.8885334730148315, -8.832563400268555], + [2.5596930980682373, -3.7809011936187744], + [3.3662173748016357, 6.040472030639648], + [-7.252989292144775, -1.27383291721344], + [-0.40683847665786743, 8.998380661010742], + [-0.6333548426628113, 9.334012985229492], + [1.8466074466705322, 4.944011688232422], + [3.150825262069702, -8.265059471130371], + [3.194056272506714, -4.785824298858643], + [2.967878580093384, -4.503172874450684], + [9.395081520080566, -2.809027910232544], + [2.788141965866089, -4.282109260559082], + [-4.7581071853637695, -1.1506847143173218], + [-4.693939685821533, -3.9363367557525635], + [-5.817581653594971, 2.1365880966186523], + [-5.560417175292969, 1.699310302734375], + [-3.2261064052581787, -4.795905113220215], + [-7.785342693328857, -1.639340877532959], + [-0.7956992983818054, -0.5259234309196472], + [-4.708331108093262, 5.078404426574707], + [2.0525104999542236, -8.585798263549805], + [-1.075829267501831, -0.22093762457370758], + [-4.81486177444458, -3.964318037033081], + [7.725462913513184, -1.8650243282318115], + [2.578946828842163, 0.7129775285720825], + [-4.156118869781494, 3.7011640071868896], + [0.06255238503217697, 9.959312438964844], + [7.732003211975098, -1.8942320346832275], + [-4.660155296325684, -1.6980873346328735], + [1.325408697128296, 4.668383598327637], + [2.2312378883361816, -3.9304022789001465], + [3.4470813274383545, 6.305843830108643], + [0.9261534810066223, 5.6887431144714355], + [-0.38530558347702026, 10.48868179321289], + [-6.483898162841797, 1.9215799570083618], + [-3.5551278591156006, 5.54487943649292], + [-0.2444523572921753, -1.5591459274291992], + [-1.3523809909820557, 1.2621158361434937], + [-5.494880199432373, 4.476832389831543], + [-8.38055419921875, 10.231344223022461], + [-7.850395679473877, 9.690778732299805], + [-0.22680306434631348, 9.812745094299316], + [-2.3719396591186523, 1.7313357591629028], + [-6.0264434814453125, 1.6457544565200806], + [2.5196125507354736, 0.8425385355949402], + [-2.6109437942504883, 6.044533729553223], + [3.666395425796509, -3.0822582244873047], + [-5.493963718414307, -2.846585988998413], + [9.308941841125488, -2.6760451793670654], + [3.3031299114227295, -4.934239864349365], + [0.48978865146636963, -5.973520278930664], + [-5.615860939025879, 6.796998977661133], + [6.341560363769531, -5.209929466247559], + [0.3841508626937866, -0.3638431429862976], + [-2.228973627090454, 2.0410678386688232], + [-2.648146867752075, 2.240736484527588], + [1.0658172369003296, 5.177292346954346], + [5.831390380859375, -0.8740229606628418], + [-0.22446483373641968, 9.915281295776367], + [1.7210512161254883, -5.740682601928711], + [-5.911473751068115, -3.098029851913452], + [1.5677767992019653, 6.605358123779297], + [1.9802873134613037, 5.439069747924805], + [3.280909776687622, -4.898665428161621], + [1.0037500858306885, -2.5371782779693604], + [-6.047605037689209, -1.8262063264846802], + [-4.857637882232666, -3.301419973373413], + [-1.4120984077453613, 9.076659202575684], + [-4.029702186584473, -2.9869384765625], + [0.008816264569759369, -0.5045344829559326], + [-3.2778000831604004, 6.335796356201172], + [-5.542300701141357, 1.7659856081008911], + [-5.695886135101318, 0.9231499433517456], + [-8.42844295501709, -1.1585924625396729], + [3.0806028842926025, -4.6190595626831055], + [1.7656115293502808, 5.013675212860107], + [-1.042788028717041, -1.7170928716659546], + [6.143380165100098, -1.1240965127944946], + [-2.2413058280944824, 1.679571509361267], + [-3.9900739192962646, 0.20704442262649536], + [-0.2862038016319275, 9.379037857055664], + [-2.363377809524536, 1.612886905670166], + [-3.22871994972229, -1.1170499324798584], + [-0.8344333171844482, 8.872466087341309], + [-2.6899378299713135, 6.55964469909668], + [2.1943798065185547, -4.397912979125977], + [6.947503089904785, -1.6030348539352417], + [2.7411859035491943, 5.635129928588867], + [-1.6289215087890625, 0.47731703519821167], + [0.24872976541519165, 9.673559188842773], + [1.5809736251831055, 5.401179313659668], + [0.9884620308876038, 0.8446751832962036], + [2.1600797176361084, -3.9052999019622803], + [-0.23135018348693848, 9.80076789855957], + [2.59684157371521, -4.393352031707764], + [-6.676402568817139, -2.240358591079712], + [-0.5451138019561768, 9.641082763671875], + [-4.414066314697266, 1.19192373752594], + [-2.6904094219207764, 2.5962579250335693], + [-3.56514573097229, 5.192885398864746], + [-4.370015621185303, -1.6700711250305176], + [2.7793824672698975, -3.987480878829956], + [-1.1974598169326782, 0.9242701530456543], + [-2.6186342239379883, 2.367288112640381], + [-3.9820358753204346, 5.640040397644043], + [1.9396374225616455, -7.3182878494262695], + [-0.9748623967170715, 7.92527961730957], + [-4.7913289070129395, -3.1632936000823975], + [5.510787487030029, -3.400110960006714], + [5.18615198135376, 7.725910186767578], + [-0.7187942266464233, -1.0961592197418213], + [2.2279598712921143, -6.485226631164551], + [3.0160605907440186, -4.652398109436035], + [0.19565144181251526, -0.7371285557746887], + [-1.940908670425415, 0.41696029901504517], + [-1.1831201314926147, 2.8472063541412354], + [-5.232753753662109, 6.38706111907959], + [-0.20547103881835938, 9.748855590820312], + [-2.2155849933624268, 2.8927664756774902], + [-2.5887534618377686, 1.8974826335906982], + [-6.502322673797607, 8.395315170288086], + [-5.381011009216309, 5.681249141693115], + [8.76293659210205, -2.336858034133911], + [7.756989002227783, -2.088519811630249], + [2.251919984817505, 5.504849433898926], + [-0.22934043407440186, -0.16361010074615479], + [-7.111645221710205, 8.90555191040039], + [-0.1984993815422058, 9.580885887145996], + [-5.338953018188477, -2.5783989429473877], + [-5.8380656242370605, 7.504115104675293], + [9.545838356018066, -2.6673576831817627], + [-0.9376085996627808, -0.820310115814209], + [2.3114519119262695, 4.388305187225342], + [10.00969409942627, -2.780996561050415], + [1.4637351036071777, 6.089384078979492], + [4.188327789306641, -0.9529808759689331], + [9.472223281860352, -2.6497738361358643], + [-3.849461317062378, -3.1566388607025146], + [-2.35033917427063, 1.1908854246139526], + [-0.15275222063064575, 10.112483978271484], + [5.228954315185547, 6.966657638549805], + [3.2214808464050293, -5.077299118041992], + [-0.8100956082344055, 3.2755956649780273], + [10.303547859191895, -2.875556230545044], + [-4.911362171173096, -2.2370028495788574], + [10.481057167053223, -2.8955471515655518], + [-4.949575424194336, -2.999027729034424], + [-4.191747188568115, -2.8067626953125], + [-2.3649885654449463, 0.8220739960670471], + [-0.2152612805366516, 10.754573822021484], + [-7.645346641540527, -1.7758591175079346], + [-5.851866722106934, -2.512455701828003], + [7.008428573608398, -1.9166420698165894], + [-0.3067818284034729, 10.282273292541504], + [-2.3330070972442627, 1.3133107423782349], + [2.0781164169311523, -3.567079544067383], + [8.17905044555664, -2.30253005027771], + [-4.479428768157959, -2.4617013931274414], + [-3.532940149307251, 5.193933486938477], + [-5.570495128631592, -3.3584866523742676], + [-7.751536846160889, 9.41378402709961], + [9.805926322937012, -2.7051985263824463], + [-5.1878767013549805, -3.4544336795806885], + [3.047106981277466, -4.570496559143066], + [-4.511327266693115, 6.499467849731445], + [7.362380027770996, -1.791798710823059], + [-5.609584331512451, -1.3154352903366089], + [-4.549599647521973, -1.722147822380066], + [0.10367947071790695, 9.928415298461914], + [2.3755507469177246, -2.7733166217803955], + [-5.721502780914307, 6.728952884674072], + [-5.723327159881592, -2.816784620285034], + [7.001100063323975, -2.3736279010772705], + [9.420682907104492, -2.6415388584136963], + [-0.44405293464660645, 9.685535430908203], + [6.668221950531006, -2.7208006381988525], + [5.140723705291748, -1.059592843055725], + [-2.49897837638855, -0.8403387069702148], + [-5.442403316497803, 5.856793403625488], + [-3.706336498260498, -2.3776633739471436], + [-3.6984703540802, -1.937666416168213], + [-7.428966045379639, 9.14663314819336], + [-2.7427453994750977, 1.9758774042129517], + [5.131979465484619, -0.9945728778839111], + [-4.090276718139648, -4.176662445068359], + [-0.7961137294769287, 8.442328453063965], + [3.3774077892303467, -5.032806873321533], + [4.665276050567627, 7.14584493637085], + [-5.325332164764404, -2.8087241649627686], + [-5.095883846282959, 1.1150463819503784], + [-7.61996603012085, -1.4772001504898071], + [-5.31440544128418, 2.6250011920928955], + [-5.551565647125244, 5.411993026733398], + [9.363282203674316, -2.7011947631835938], + [9.521782875061035, -2.5876827239990234], + [6.785114765167236, -1.7963300943374634], + [-2.3882954120635986, 2.223968267440796], + [0.6841978430747986, -6.827371120452881], + [-2.940964937210083, -0.2589331269264221], + [-2.3951759338378906, 1.262630581855774], + [-2.367788553237915, 0.38690614700317383], + [-4.9764885902404785, 5.578701019287109], + [3.245490312576294, -4.849199295043945], + [1.6376174688339233, -3.309309244155884], + [-4.713769912719727, 3.023662805557251], + [0.45758360624313354, -0.3225265145301819], + [1.370776891708374, -8.118895530700684], + [-4.764174938201904, -3.1243369579315186], + [-0.09543503075838089, -1.000470519065857], + [-6.258086681365967, 8.36444091796875], + [5.303098678588867, -2.220120906829834], + [-0.18322741985321045, 10.09621810913086], + [-2.3915956020355225, 1.1219834089279175], + [-2.013038158416748, 2.4863688945770264], + [-4.58353853225708, 7.019560813903809], + [3.2597436904907227, -4.868740081787109], + [3.060027837753296, -5.692963600158691], + [5.323440074920654, -3.442265748977661], + [1.2877047061920166, -4.575183868408203], + [-0.18662786483764648, -1.29159677028656], + [-6.714777946472168, -1.7513484954833984], + [-5.27094030380249, -0.34697389602661133], + [-6.129979133605957, -1.7953978776931763], + [7.393222808837891, -3.261955499649048], + [7.3369221687316895, -4.316038131713867], + [3.563342571258545, -5.294900894165039], + [-3.466656446456909, -2.669588565826416], + [1.5385568141937256, 1.1817227602005005], + [-5.2139058113098145, 5.34400749206543], + [3.0484135150909424, -4.634805202484131], + [2.453967809677124, -4.62431526184082], + [0.02672361582517624, 5.488979816436768], + [3.145286798477173, -4.7069854736328125], + [-5.093439102172852, -3.5780365467071533], + [-2.5527236461639404, 2.71284818649292], + [4.661173343658447, 7.20515251159668], + [-4.768723964691162, -2.0470030307769775], + [5.800359725952148, -2.7103536128997803], + [-0.1096198633313179, 10.426922798156738], + [-7.5084099769592285, 9.185564994812012], + [2.8003575801849365, -4.377408981323242], + [0.3898000717163086, -0.5076191425323486], + [-0.7273982167243958, 8.295099258422852], + [2.559781312942505, -6.608016014099121], + [-4.299898624420166, -3.498009204864502], + [-0.5149892568588257, 9.422431945800781], + [0.23437154293060303, 5.127756595611572], + [1.8701295852661133, 4.589583396911621], + [-5.98960542678833, -0.45472288131713867], + [-5.356583595275879, 5.778450012207031], + [10.146445274353027, -2.81139874458313], + [8.464747428894043, -2.527923583984375], + [-6.634572505950928, -2.2704899311065674], + [-5.118344783782959, -3.1734421253204346], + [-5.6426191329956055, -2.4314358234405518], + [-4.646307945251465, 5.392524719238281], + [0.27124208211898804, 0.40717554092407227], + [-4.605996131896973, 5.510457992553711], + [-5.818645000457764, -2.1349220275878906], + [7.506450176239014, -1.8662289381027222], + [-5.38045072555542, 4.253270626068115], + [6.819187641143799, -1.7131174802780151], + [2.7697913646698, -4.363956451416016], + [-5.1211018562316895, -1.4822958707809448], + [-4.423614501953125, 4.808406352996826], + [-0.08923489600419998, 9.683843612670898], + [-0.15897876024246216, 9.959259033203125], + [6.098387241363525, -1.9085208177566528], + [-3.3375885486602783, -1.754052758216858], + [-0.4845349192619324, -0.6140537261962891], + [-5.527426242828369, -2.309952974319458], + [-2.224741220474243, 0.03192519769072533], + [1.5231754779815674, -2.6726996898651123], + [-5.206611156463623, -3.5823028087615967], + [9.346857070922852, -2.531282663345337], + [-2.392242193222046, 1.1845852136611938], + [2.985651731491089, -4.483198165893555], + [-0.17071646451950073, 9.712506294250488], + [-0.384044349193573, 10.215789794921875], + [-5.195894718170166, 6.137857913970947], + [1.675519585609436, 1.3024688959121704], + [-4.58608865737915, 6.230853080749512], + [0.38004162907600403, -5.047396659851074], + [2.234575033187866, -5.7925519943237305], + [2.888152599334717, -4.355003356933594], + [2.450469493865967, -3.7424323558807373], + [1.6311826705932617, -7.727765083312988], + [2.739342212677002, -5.070975303649902], + [-5.357133388519287, 7.5901641845703125], + [-3.5251572132110596, -1.4217000007629395], + [2.5302093029022217, -5.1289262771606445], + [-3.341219425201416, -2.4928324222564697], + [-3.9975039958953857, 4.148069381713867], + [-5.185814380645752, -2.0091071128845215], + [-0.2561131715774536, 9.001688003540039], + [-3.4974563121795654, -3.4676103591918945], + [-0.6541447639465332, 0.5783510804176331], + [-0.2800939083099365, 10.454801559448242], + [-5.741480350494385, -4.295563697814941], + [1.825148582458496, 5.250180244445801], + [-0.5667997002601624, 11.800552368164062], + [-4.400920867919922, 4.4696550369262695], + [-0.36734098196029663, -0.44171494245529175], + [-6.202446460723877, 5.678688049316406], + [1.558812141418457, -6.217907905578613], + [-0.337163507938385, -0.4326314926147461], + [0.11012540012598038, -0.9135597944259644], + [-4.441257953643799, -3.403965711593628], + [6.324348449707031, -1.8182178735733032], + [-7.425441265106201, -0.5302037000656128], + [-0.12665626406669617, -1.635398268699646], + [5.5216898918151855, -1.1730784177780151], + [-5.272181987762451, 3.9821617603302], + [-0.4744877219200134, 8.572759628295898], + [-1.4070918560028076, 2.8192555904388428], + [4.019721508026123, -0.6670950651168823], + [2.1658172607421875, -3.6813971996307373], + [-0.6857923865318298, -2.180880546569824], + [1.429355502128601, 1.1302516460418701], + [-7.933906078338623, -1.7449346780776978], + [-6.95762300491333, -0.6087812185287476], + [-7.012369632720947, 8.779823303222656], + [6.200325012207031, -1.1986843347549438], + [-2.2017388343811035, 2.5437285900115967], + [3.8884737491607666, 1.5214142799377441], + [-5.741079807281494, -2.269099712371826], + [6.165672779083252, -3.411905527114868], + [-2.0682179927825928, 1.3338074684143066], + [-5.269528388977051, 1.813917875289917], + [-1.1879215240478516, -1.2101951837539673], + [8.383076667785645, -2.5053293704986572], + [-2.484830141067505, 1.9775694608688354], + [-4.941626071929932, -4.332398414611816], + [-4.709750652313232, 5.6493754386901855], + [2.1666340827941895, -7.367563247680664], + [2.6321237087249756, -4.075138092041016], + [-2.4701688289642334, 0.42093217372894287], + [-3.776590347290039, -2.0736892223358154], + [1.9169814586639404, -7.202336311340332], + [-4.629441738128662, -1.3075331449508667], + [-2.8239824771881104, -4.9476318359375], + [-0.30959266424179077, 10.503629684448242], + [-6.4084296226501465, 2.120720386505127], + [-3.376152753829956, -1.5786722898483276], + [-2.4656410217285156, 2.120514392852783], + [2.855689287185669, -4.381930828094482], + [-2.2897050380706787, 1.1668915748596191], + [7.137479782104492, -1.8751157522201538], + [2.6963369846343994, -4.376533508300781], + [0.843051016330719, 0.14330771565437317], + [6.003486156463623, -2.611222505569458], + [-0.23651540279388428, 9.526595115661621], + [-5.177535533905029, 6.074012756347656], + [3.0724027156829834, -4.686660289764404], + [2.1532936096191406, 5.816859245300293], + [-2.11967396736145, 0.7630568146705627], + [-6.397319316864014, -2.052537202835083], + [-1.8679488897323608, 5.439587593078613], + [6.5887250900268555, -1.2416366338729858], + [-4.7394890785217285, 5.295015811920166], + [8.261256217956543, -2.200254440307617], + [-6.455938339233398, 7.991267204284668], + [-5.339780330657959, -3.2093443870544434], + [3.106757879257202, -4.657556056976318], + [1.823081374168396, -4.869757652282715], + [-4.913634777069092, -3.2578940391540527], + [-4.4238104820251465, 6.251126289367676], + [-2.8106274604797363, 7.097268104553223], + [2.01409649848938, -7.117807388305664], + [2.7363274097442627, -4.3094377517700195], + [-4.6147236824035645, 5.323916435241699], + [5.101826190948486, 6.995645523071289], + [-0.40495985746383667, 9.970308303833008], + [-6.430390357971191, 8.06538200378418], + [1.8408429622650146, 0.7438682317733765], + [0.40987515449523926, 1.566896677017212], + [-0.266624391078949, 10.562780380249023], + [2.527249574661255, -4.008346080780029], + [-5.218607425689697, 3.2382049560546875], + [-6.2874979972839355, 7.822365760803223], + [2.331355571746826, -4.71259880065918], + [0.5171306729316711, -0.41306251287460327], + [-7.674158573150635, 9.34115219116211], + [-0.16572463512420654, 10.186864852905273], + [8.45492172241211, -2.251599073410034], + [2.836768388748169, -3.9175422191619873], + [5.788374900817871, -1.1227535009384155], + [-4.923368453979492, 4.9422502517700195], + [-2.499135971069336, 1.95319664478302], + [-0.5856426954269409, 9.067885398864746], + [-0.15725338459014893, 9.903853416442871], + [-3.417965888977051, -0.3825056552886963], + [-6.486152172088623, 7.784872531890869], + [-2.6327502727508545, 2.2682363986968994], + [-6.807932376861572, 3.381897449493408], + [-2.7294845581054688, 6.4824981689453125], + [7.934900760650635, -1.931289792060852], + [-4.545295238494873, -2.698789596557617], + [0.03619491308927536, -0.8358190059661865], + [-2.5326130390167236, -2.5134520530700684], + [-5.025475978851318, -1.4140520095825195], + [-1.9426393508911133, 2.5571401119232178], + [-5.886894702911377, 5.570347785949707], + [-5.210700511932373, -4.317066192626953], + [-1.1549948453903198, 9.828014373779297], + [9.068743705749512, -2.5449516773223877], + [-5.20700216293335, -1.5723000764846802], + [-7.483139514923096, -1.4980663061141968], + [6.696424961090088, -2.931772232055664], + [1.4359948635101318, 5.132756233215332], + [0.8035926222801208, -6.846034526824951], + [-2.5226192474365234, 1.113739252090454], + [4.493565082550049, -5.6222381591796875], + [1.898299217224121, -5.762318134307861], + [-3.1324901580810547, -1.161284327507019], + [1.051527500152588, 4.701291561126709], + [-2.5956625938415527, 4.5404815673828125], + [8.3560152053833, -2.1792376041412354], + [-2.555584192276001, 1.6093841791152954], + [-5.9370598793029785, 0.6562114953994751], + [3.102134943008423, 1.4992880821228027], + [1.1776188611984253, -5.507194519042969], + [-5.303610324859619, -1.8774694204330444], + [-2.082608699798584, -1.063275694847107], + [-4.14764928817749, -3.6962668895721436], + [0.8984720706939697, -5.6049652099609375], + [-0.8239021897315979, -1.1312599182128906], + [3.01809024810791, -8.001274108886719], + [-3.849297046661377, -1.2163764238357544], + [2.954939603805542, -4.913736343383789], + [-3.49824595451355, 5.613152503967285], + [7.305213928222656, -1.5874850749969482], + [9.227198600769043, -2.5430071353912354], + [-2.1434009075164795, 2.8033156394958496], + [-0.19396084547042847, 9.96883773803711], + [-1.6416274309158325, -2.076270580291748], + [1.9673402309417725, -7.902419090270996], + [3.052398920059204, -4.827771186828613], + [3.055342674255371, -4.7804484367370605], + [0.7207463979721069, -6.199784278869629], + [2.757614850997925, -4.096176624298096], + [1.9902992248535156, 0.9274857640266418], + [2.0303738117218018, -9.809405326843262], + [-0.09141222387552261, -0.3551473617553711], + [-3.510540246963501, -3.9366743564605713], + [-1.3752493858337402, 6.920629501342773], + [-8.071368217468262, -0.686219334602356], + [-2.303157091140747, -0.8769909739494324], + [2.0504167079925537, -9.88681411743164], + [-1.8595547676086426, 0.8878794312477112], + [5.554250240325928, 7.678767204284668], + [-0.7238029837608337, 9.229608535766602], + [1.4616918563842773, -5.705776214599609], + [-1.5250728130340576, 0.8299927711486816], + [8.610992431640625, -2.4491353034973145], + [-4.528031349182129, -2.195239543914795], + [-0.5144885778427124, 9.086080551147461], + [4.421010494232178, 7.224768161773682], + [-4.492376327514648, -2.6936967372894287], + [-4.836742877960205, -3.2528469562530518], + [3.7070963382720947, 0.4515581727027893], + [2.354121685028076, -3.8796372413635254], + [-1.0327504873275757, -0.5913028120994568], + [-6.270712375640869, -2.0310022830963135], + [-0.473021000623703, -1.3276077508926392], + [-0.5963164567947388, 0.5372709631919861], + [-2.6647372245788574, -0.6662114262580872], + [-2.562469959259033, 2.1312220096588135], + [-4.979389667510986, 6.012646675109863], + [2.6159324645996094, -4.350933074951172], + [-3.7225284576416016, 6.254698753356934], + [-7.025777339935303, -1.069300651550293], + [-4.671273231506348, 1.0504423379898071], + [-3.1081912517547607, -2.6545071601867676], + [8.49437141418457, -2.4822232723236084], + [-3.0440948009490967, -3.2101666927337646], + [-6.285099506378174, 6.43682336807251], + [-5.036440372467041, -2.9467272758483887], + [-3.818791151046753, -1.2692502737045288], + [3.0103800296783447, -2.7379119396209717], + [5.135174751281738, -1.1089320182800293], + [-3.82700777053833, -2.8829987049102783], + [-3.956835985183716, -1.180895209312439], + [-2.1162025928497314, 2.117764949798584], + [3.2613422870635986, -5.1562700271606445], + [-2.9976933002471924, -0.5794044733047485], + [6.294708251953125, -1.422301173210144], + [-0.5120821595191956, 11.158000946044922], + [3.024515390396118, -4.557486534118652], + [1.749625325202942, 4.357943058013916], + [-4.997264385223389, 8.006856918334961], + [-1.398924469947815, 2.2433955669403076], + [-8.519607543945312, -1.330765724182129], + [-6.754218578338623, -1.5317761898040771], + [-2.0853750705718994, -3.04980206489563], + [2.923301935195923, -4.650241851806641], + [2.288097620010376, 0.952292799949646], + [-7.8050127029418945, -1.0262117385864258], + [-2.8050997257232666, -4.825547218322754], + [-2.0499422550201416, 2.391068935394287], + [0.97849041223526, 9.600309371948242], + [2.6846957206726074, -5.275533676147461], + [5.862001895904541, -3.212324380874634], + [5.599587917327881, -2.346304178237915], + [1.0358130931854248, -5.452406883239746], + [6.948858261108398, -1.5304204225540161], + [9.307083129882812, -2.891771078109741], + [8.666277885437012, -2.5274298191070557], + [2.3517987728118896, -3.8682501316070557], + [-3.476177453994751, -1.3750828504562378], + [-4.286956310272217, -4.638053894042969], + [2.027163505554199, -7.559591293334961], + [-5.819313049316406, -3.5328633785247803], + [1.7853988409042358, -9.167262077331543], + [-4.073277950286865, -3.4205496311187744], + [-0.3458327651023865, 9.123612403869629], + [-0.24815815687179565, 10.402393341064453], + [-5.711868762969971, 7.64027214050293], + [-5.524500370025635, -1.7877572774887085], + [-1.7264577150344849, 0.33939218521118164], + [-0.0678260400891304, 9.490839004516602], + [0.8870166540145874, -0.1955985426902771], + [1.789738416671753, -2.777351140975952], + [-4.307420253753662, -4.278520107269287], + [-0.9000377655029297, 8.825063705444336], + [0.8855084776878357, -4.0130391120910645], + [-6.50208854675293, -1.6168403625488281], + [-3.407505989074707, -2.9419639110565186], + [3.292818307876587, -4.745160102844238], + [-4.596865653991699, 0.7781280279159546], + [-4.141374111175537, 5.451381683349609], + [2.390089988708496, 4.051746368408203], + [-2.420944929122925, 2.6111629009246826], + [-1.5501221418380737, 1.02494215965271], + [-4.896116733551025, 7.950343608856201], + [1.3131203651428223, -7.0220537185668945], + [-5.302954196929932, -3.71162486076355], + [-1.9748663902282715, -1.7647032737731934], + [4.103543758392334, -3.228564500808716], + [-6.146331310272217, -2.116060495376587], + [-2.0778093338012695, 0.5033230185508728], + [2.287074565887451, -4.7574872970581055], + [-0.7154141068458557, 8.928023338317871], + [9.435166358947754, -2.628556728363037], + [7.254745960235596, -3.057899236679077], + [-0.31507256627082825, -1.4581612348556519], + [-0.24822968244552612, 9.843330383300781], + [-2.0075273513793945, 2.506741762161255], + [-0.46408990025520325, 5.111053943634033], + [-4.218036651611328, -4.834964752197266], + [-6.981578350067139, -0.9706861972808838], + [2.985448122024536, -4.732304573059082], + [-5.397643566131592, -0.30308377742767334], + [0.9409990906715393, -4.513726234436035], + [-2.780707359313965, 1.5547194480895996], + [-5.23112154006958, 0.8208670616149902], + [-0.5693119168281555, -1.0751310586929321], + [-2.872953176498413, 3.0274436473846436], + [-2.3293957710266113, 0.42349016666412354], + [4.815542697906494, 7.4586029052734375], + [-5.004697799682617, -1.885206937789917], + [-3.974699020385742, 6.5867486000061035], + [-6.585883140563965, 8.401427268981934], + [4.598576068878174, -2.4787309169769287], + [-4.191616058349609, -2.5783426761627197], + [-0.316161572933197, 9.579462051391602], + [-5.799357891082764, 9.070979118347168], + [2.9605462551116943, -5.081140995025635], + [-0.2705317735671997, 9.558466911315918], + [0.588457465171814, -5.806160926818848], + [-5.21024751663208, -3.695946216583252], + [-2.243366241455078, 1.6611897945404053], + [6.766366481781006, -3.396988868713379], + [-0.14094895124435425, -0.6914085745811462], + [-2.405745267868042, -4.453808784484863], + [2.4670581817626953, -7.115649223327637], + [3.066929817199707, -4.613430976867676], + [-0.13288909196853638, 9.55937385559082], + [1.5742440223693848, -8.902359008789062], + [-7.367209434509277, 9.174856185913086], + [0.002131842076778412, -1.0070120096206665], + [-4.310196399688721, -2.1729230880737305], + [-5.519097805023193, -4.060796737670898], + [-4.9482855796813965, 0.7338337898254395], + [3.293104410171509, -5.186422824859619], + [7.015888214111328, -3.619422197341919], + [2.3931376934051514, -4.017220497131348], + [7.919800758361816, -2.4467575550079346], + [2.9621846675872803, -4.451346397399902], + [-6.794832229614258, 8.253594398498535], + [-1.451397180557251, 0.7738361954689026], + [2.2579567432403564, 5.6405792236328125], + [-5.844670295715332, 6.853842735290527], + [2.8057918548583984, -4.228135585784912], + [2.0458784103393555, 5.850010871887207], + [-2.4339804649353027, 1.4121977090835571], + [-5.302928447723389, -2.787580728530884], + [-1.9936227798461914, 1.2145087718963623], + [-0.19758445024490356, 10.350919723510742], + [-7.278304576873779, -0.8549280166625977], + [6.398898601531982, -3.107434034347534], + [7.999627590179443, -2.3277831077575684], + [-0.40933626890182495, 8.938933372497559], + [-4.637491226196289, 6.8278608322143555], + [-7.384151458740234, -2.082763671875], + [3.0894713401794434, -4.740102291107178], + [4.505028247833252, 6.945771217346191], + [2.2002992630004883, 6.042440414428711], + [0.8763324022293091, -6.298641204833984], + [2.478916883468628, -7.590325832366943], + [-4.601300239562988, -2.7697136402130127], + [-0.20264893770217896, 9.868220329284668], + [-3.9308292865753174, -0.8887563347816467], + [-0.22396820783615112, 9.260709762573242], + [1.4580295085906982, 5.018064498901367], + [-3.463221788406372, 5.056902885437012], + [-7.786937713623047, 9.407783508300781], + [3.068955659866333, -4.746613502502441], + [2.9452922344207764, -6.470376014709473], + [0.7861388325691223, -4.044302463531494], + [-0.7695542573928833, -0.7878972291946411], + [-2.7504398822784424, -4.013909339904785], + [-5.1228742599487305, 6.843308925628662], + [-7.852452754974365, 9.548627853393555], + [-3.5315072536468506, 6.429712772369385], + [-6.4236159324646, -1.9670908451080322], + [-2.135348320007324, 1.6797173023223877], + [2.044823408126831, 1.009040117263794], + [1.4155123233795166, -7.006553649902344], + [-4.6898722648620605, -2.786781072616577], + [-0.27625006437301636, 9.612650871276855], + [-2.5991570949554443, -0.19130921363830566], + [-2.067063808441162, 2.598717451095581], + [6.568390369415283, -1.5075575113296509], + [-1.3829935789108276, 1.5371830463409424], + [1.5676820278167725, -7.570754051208496], + [-4.532046794891357, -4.809745788574219], + [-5.521275043487549, 1.4979854822158813], + [5.281149387359619, -0.8417263627052307], + [-7.694682598114014, -1.1163595914840698], + [-2.5958964824676514, 3.4332361221313477], + [2.617706537246704, -5.047624588012695], + [2.082123041152954, 5.308218479156494], + [-7.402834415435791, 8.969141960144043], + [1.6438266038894653, 5.273681640625], + [2.895132303237915, -4.360632419586182], + [-6.989129543304443, 8.383176803588867], + [-3.720942735671997, -0.5320279598236084], + [-2.376455307006836, -2.0378811359405518], + [1.6973950862884521, -5.999627113342285], + [4.1712727546691895, 6.676729202270508], + [-8.7609224319458, -0.7495653629302979], + [6.056950092315674, -1.5399681329727173], + [-5.317969799041748, 6.416321754455566], + [-4.880861759185791, -2.9395458698272705], + [-5.770634174346924, 3.999196767807007], + [-2.0875887870788574, 1.7560575008392334], + [6.818628787994385, -1.43278968334198], + [2.2746994495391846, 5.883759498596191], + [1.1398327350616455, 0.1829218864440918], + [-2.272498369216919, 0.9269362092018127], + [1.6328976154327393, 5.020537376403809], + [0.28593355417251587, 8.616873741149902], + [-2.369616746902466, -2.6182992458343506], + [3.0374414920806885, -4.564603328704834], + [-4.595213413238525, -2.6991922855377197], + [-0.22975444793701172, 9.050646781921387], + [5.8479533195495605, -1.0393377542495728], + [-1.513932466506958, -3.2800843715667725], + [-0.40954822301864624, 8.719829559326172], + [-6.015244007110596, -2.2478415966033936], + [3.3525378704071045, -5.44912576675415], + [-2.8565754890441895, 2.8624701499938965], + [-4.717513561248779, 7.491669178009033], + [2.2702181339263916, -4.144503116607666], + [-0.38862502574920654, 9.997251510620117], + [-1.5148450136184692, -2.0295073986053467], + [-4.934218406677246, -1.2913702726364136], + [-2.3895816802978516, 2.7089552879333496], + [-0.17654410004615784, 7.327008247375488], + [-4.666330814361572, -2.275954484939575], + [-6.071465969085693, 6.187213897705078], + [1.8041061162948608, -7.114235877990723], + [1.265123724937439, -7.060894012451172], + [-4.767788887023926, -1.4626041650772095], + [3.1086835861206055, -4.661777496337891], + [-4.084939479827881, 5.589807033538818], + [-1.5496119260787964, 8.371342658996582], + [-1.4798328876495361, 7.73900032043457], + [9.786861419677734, -2.7177608013153076], + [-6.160233974456787, 7.905220031738281], + [2.205660104751587, -3.426234006881714], + [8.855481147766113, -2.6848108768463135], + [-2.5137088298797607, -4.35627555847168], + [2.01198410987854, -3.689113140106201], + [-0.5137903690338135, 10.111332893371582], + [-6.65678596496582, -1.6967750787734985], + [-2.0219247341156006, 2.4460196495056152], + [7.9557318687438965, -2.094672441482544], + [2.7106833457946777, -3.0551817417144775], + [2.5862162113189697, -6.452896595001221], + [-4.691797733306885, -2.5421271324157715], + [3.343842029571533, -5.341888427734375], + [-5.664150238037109, 7.873982906341553], + [-5.00409460067749, -2.713458776473999], + [1.0966436862945557, -6.741239547729492], + [2.2097342014312744, 6.137694835662842], + [3.2525696754455566, -5.169712066650391], + [-0.6713671684265137, 8.863741874694824], + [-4.447697162628174, -3.606977939605713], + [-3.3341257572174072, 6.963635444641113], + [2.165361166000366, -10.208860397338867], + [1.2972135543823242, -3.5251710414886475], + [-5.22391939163208, -3.7230334281921387], + [0.8823065757751465, -6.036259651184082], + [3.0511457920074463, -4.941431045532227], + [-2.62809681892395, 5.421064376831055], + [-8.095118522644043, -1.6933096647262573], + [-2.528562307357788, -0.9655276536941528], + [-0.7712956070899963, 0.2830365300178528], + [1.9132663011550903, 4.7837724685668945], + [-5.131410121917725, 0.6256226301193237], + [-6.44878625869751, 7.541897773742676], + [-1.7917227745056152, 1.4521559476852417], + [-4.703668117523193, -0.20844751596450806], + [-4.708620071411133, -2.841292142868042], + [-3.861729383468628, -2.436612844467163], + [-7.323899269104004, 1.7605490684509277], + [1.3492238521575928, -7.006664276123047], + [0.6541446447372437, -2.9134809970855713], + [-4.532915115356445, 1.93729829788208], + [5.799692630767822, -2.4366250038146973], + [2.381394863128662, -8.621720314025879], + [2.1596908569335938, 6.166357517242432], + [3.4230685234069824, -3.1811463832855225], + [-6.1349873542785645, 7.652894973754883], + [-4.301610469818115, -2.323664665222168], + [2.2206308841705322, -7.141119480133057], + [2.922011375427246, -4.391351699829102], + [-2.3979527950286865, 0.06925565004348755], + [-6.229339122772217, 8.268445014953613], + [1.6920745372772217, -6.37314510345459], + [2.8548433780670166, -4.926061630249023], + [-4.4455246925354, 5.567288398742676], + [-8.016894340515137, 1.399605631828308], + [-4.109201908111572, -1.934767246246338], + [5.75378942489624, 7.4058380126953125], + [1.239218831062317, -6.638755798339844], + [-0.34651249647140503, 11.0704345703125], + [-0.3664364218711853, 11.741506576538086], + [-4.84387731552124, -3.6792991161346436], + [-7.066107273101807, 9.270832061767578], + [-4.046013832092285, -0.9979543685913086], + [-4.619997978210449, 5.2995100021362305], + [2.822596549987793, 0.703889012336731], + [-5.010056018829346, -2.9185900688171387], + [-2.490840196609497, 0.8753147721290588], + [1.6893820762634277, 4.108442306518555], + [-5.300160884857178, 6.215301036834717], + [-0.28114187717437744, 6.324914932250977], + [2.9390809535980225, -4.422030448913574], + [-3.8966052532196045, -2.3223845958709717], + [2.482470750808716, -2.9874508380889893], + [-7.069019794464111, -1.3658990859985352], + [3.2225253582000732, -4.855557441711426], + [-4.6268630027771, -2.579724073410034], + [1.4318771362304688, 5.545205593109131], + [-5.743916034698486, 7.486635684967041], + [2.0016326904296875, 5.376983642578125], + [8.236035346984863, -2.084275484085083], + [1.005508542060852, 4.839890956878662], + [-0.38874369859695435, 10.955366134643555], + [0.9612868428230286, -5.038814544677734], + [1.5065901279449463, -5.767827987670898], + [-5.441133499145508, -3.6541945934295654], + [-4.381078720092773, -2.0896947383880615], + [3.2165615558624268, -4.809258460998535], + [-1.9743280410766602, -0.016346696764230728], + [1.7803094387054443, 5.606094837188721], + [-4.028781890869141, -2.108295440673828], + [0.08472337573766708, -0.9600867629051208], + [-2.932588815689087, -4.302433013916016], + [-1.0964914560317993, 1.6542580127716064], + [-4.8953166007995605, -2.800377130508423], + [2.7267062664031982, -4.110024929046631], + [-2.11116886138916, 2.62062406539917], + [7.719626426696777, -2.2560861110687256], + [-2.8374383449554443, 2.9181933403015137], + [3.1485254764556885, -4.710210800170898], + [4.10153341293335, 6.9429240226745605], + [-4.9585652351379395, -4.899218559265137], + [7.6779465675354, -1.9155794382095337], + [7.363518238067627, -2.218951940536499], + [3.103806257247925, -4.651849746704102], + [-0.35928595066070557, -0.4365209937095642], + [2.87856388092041, -4.483719825744629], + [1.7525122165679932, -8.397424697875977], + [-3.7397096157073975, 5.877340316772461], + [-7.136023044586182, 8.640040397644043], + [-2.9763429164886475, 5.719161033630371], + [-5.993861675262451, 7.238531112670898], + [5.481691837310791, -3.924891233444214], + [-2.627983331680298, 2.4211506843566895], + [-0.26754093170166016, 5.2995219230651855], + [-3.644613265991211, -2.2414097785949707], + [-7.070976257324219, -1.8433144092559814], + [5.514938831329346, -1.2268768548965454], + [-0.18197190761566162, -0.9458122849464417], + [-2.1139824390411377, 5.991792678833008], + [0.5545165538787842, 0.35659804940223694], + [-3.927724599838257, -4.039474010467529], + [-5.970731258392334, 7.279193878173828], + [-3.0201947689056396, -1.704778790473938], + [0.05709128826856613, -0.0814695954322815], + [-3.6191227436065674, -3.4511208534240723], + [6.874763488769531, -1.5377624034881592], + [-2.597123861312866, 1.3627873659133911], + [8.21309757232666, -2.3096580505371094], + [1.264357328414917, 4.737869739532471], + [-4.4811530113220215, -1.8619577884674072], + [-0.29141682386398315, -1.2542240619659424], + [3.008523464202881, -4.615394592285156], + [6.9797210693359375, -1.5972236394882202], + [-2.10882306098938, 0.1744731068611145], + [-2.167105197906494, 2.308751106262207], + [-4.00489616394043, -1.868428111076355], + [2.214733123779297, -9.195934295654297], + [9.382489204406738, -2.5711781978607178], + [7.05567741394043, -2.413227081298828], + [2.752699851989746, 1.0489792823791504], + [-7.414586544036865, -1.6895294189453125], + [3.0842597484588623, -4.9624199867248535], + [-5.366953372955322, 3.360158920288086], + [1.1784470081329346, -5.958696365356445], + [-1.2365909814834595, -2.971731185913086], + [9.036752700805664, -2.5249674320220947], + [-2.603682518005371, 1.3291590213775635], + [-2.6195127964019775, 1.6036927700042725], + [-5.06851053237915, 4.5674729347229], + [7.017065525054932, -4.530811309814453], + [0.8959801197052002, -6.754735946655273], + [2.0683298110961914, 5.284852027893066], + [-0.4681106209754944, 11.763544082641602], + [8.0169038772583, -2.6750001907348633], + [-0.3813541531562805, 11.348894119262695], + [0.7459205985069275, -6.663758277893066], + [9.071681022644043, -2.8945863246917725], + [-5.993536472320557, -2.747833013534546], + [1.8476839065551758, 5.432580947875977], + [-4.769096374511719, -3.2895147800445557], + [-4.8717360496521, 7.12846565246582], + [-0.23953837156295776, 9.531143188476562], + [-0.27837610244750977, 10.290841102600098], + [3.787109136581421, 6.891688823699951], + [2.5654938220977783, -7.01103401184082], + [-0.32873499393463135, 9.86051082611084], + [-5.119194507598877, -3.9861860275268555], + [-6.117406368255615, -1.5887258052825928], + [-4.5537614822387695, -4.685863971710205], + [5.599381446838379, -1.2047312259674072], + [2.0303966999053955, 5.331782341003418], + [2.0480072498321533, -6.491028308868408], + [-5.6857829093933105, 8.368743896484375], + [-1.9880199432373047, 4.839321136474609], + [-5.014258861541748, -4.466179847717285], + [-5.078136920928955, 2.01251220703125], + [-2.9296605587005615, -4.033441066741943], + [3.4148616790771484, -1.3598991632461548], + [-7.1744704246521, -0.0598144568502903], + [-4.406861782073975, -4.19592809677124], + [8.50307559967041, -2.3895156383514404], + [4.912869930267334, -3.3682727813720703], + [-4.1647725105285645, -4.931888103485107], + [3.4483883380889893, -5.133735656738281], + [7.35015344619751, -1.5817424058914185], + [2.4658920764923096, 6.012823104858398], + [-5.11073112487793, -4.011809825897217], + [-2.658798933029175, -2.0379347801208496], + [2.4900386333465576, -3.7712786197662354], + [0.9417111277580261, -0.36488842964172363], + [-1.2525303363800049, -0.21198758482933044], + [-5.804443836212158, -0.6617729663848877], + [2.876765012741089, -3.968560218811035], + [6.296496391296387, -1.496138095855713], + [-0.445948988199234, -1.0875312089920044], + [-4.961424350738525, -1.9047280550003052], + [-4.200496673583984, 1.8809468746185303], + [-6.66027307510376, 8.106844902038574], + [8.497103691101074, -2.5992729663848877], + [2.9969608783721924, -5.717148780822754], + [-0.9293711185455322, 5.5920209884643555], + [-5.831605434417725, 7.662567138671875], + [-5.189737319946289, -2.9190566539764404], + [-1.9844250679016113, -0.17753338813781738], + [6.2262654304504395, -1.2732445001602173], + [-4.917579174041748, 4.931913375854492], + [-4.56378698348999, 5.4406633377075195], + [1.5487385988235474, 5.412446975708008], + [2.72890305519104, -4.1458587646484375], + [2.355794668197632, -5.06343936920166], + [0.7361549139022827, -6.030149459838867], + [-0.8044977188110352, 9.420459747314453], + [-6.125179290771484, 1.6644688844680786], + [7.217254161834717, -2.213716745376587], + [3.464078664779663, 6.3933539390563965], + [7.5544562339782715, -2.4282724857330322], + [-4.9266438484191895, -3.9020488262176514], + [-0.34222865104675293, 9.67184066772461], + [-0.23594051599502563, 9.629804611206055], + [-2.105567216873169, 2.592390775680542], + [0.10548614710569382, -2.1613776683807373], + [7.112871170043945, -4.962418556213379], + [6.439252853393555, -1.3248211145401], + [-2.5609867572784424, 2.1896743774414062], + [-2.2613441944122314, 2.5149056911468506], + [4.88141393661499, -1.0475389957427979], + [0.07652371376752853, 5.253643989562988], + [-4.202220439910889, 3.2887699604034424], + [8.354840278625488, -2.3511364459991455], + [-4.84613561630249, -2.8053057193756104], + [-5.6300554275512695, 4.1820220947265625], + [-0.10771150141954422, -0.45309901237487793], + [-0.9469089508056641, 0.7341556549072266], + [-1.568156123161316, -0.9112038612365723], + [-4.589669704437256, -3.9458117485046387], + [0.325810045003891, -0.677686333656311], + [5.547339916229248, -2.67494797706604], + [-2.1053900718688965, 0.602313220500946], + [-6.505643367767334, 8.398279190063477], + [-5.954721927642822, 1.5154200792312622], + [-2.9269726276397705, 3.254056930541992], + [-0.8122428059577942, 8.39745807647705], + [-7.392817974090576, -1.5037333965301514], + [-3.1646173000335693, 5.5991411209106445], + [-4.495001792907715, 6.065843105316162], + [-6.251838207244873, 7.55836296081543], + [1.520373821258545, -6.52680778503418], + [-6.983689785003662, 8.459177017211914], + [-3.6816952228546143, -1.8032023906707764], + [-5.183372497558594, 4.620569705963135], + [-6.641634941101074, 1.585796594619751], + [-7.29295539855957, 9.14506721496582], + [2.0779993534088135, 0.6625054478645325], + [0.9972811341285706, 5.253108978271484], + [2.652961015701294, -5.481899738311768], + [-7.547216415405273, -1.180163025856018], + [-2.1798508167266846, 1.745160460472107], + [-4.187981128692627, 1.219152808189392], + [-3.8467113971710205, -1.4770270586013794], + [2.4420034885406494, 5.746842861175537], + [-4.050544261932373, -3.0965025424957275], + [7.616530418395996, -1.8740254640579224], + [-3.47552752494812, -0.12845003604888916], + [3.1389453411102295, 1.409830927848816], + [1.77776038646698, -6.106461524963379], + [-5.613805770874023, 8.276749610900879], + [-6.546825408935547, -1.621113896369934], + [3.347435712814331, -5.473350524902344], + [5.464446544647217, 0.23799452185630798], + [-2.2180049419403076, 2.765995740890503], + [5.296525955200195, -4.454656600952148], + [-3.518617630004883, -4.815231800079346], + [-3.4266836643218994, -2.3298654556274414], + [-4.676554203033447, 1.542262315750122], + [-4.427333831787109, -3.8582658767700195], + [-5.090432643890381, 6.521926403045654], + [2.3692643642425537, -5.160428047180176], + [-1.4434667825698853, 5.264047622680664], + [8.913163185119629, -2.5533134937286377], + [-5.473748683929443, 6.2026143074035645], + [-6.569385051727295, 1.3279058933258057], + [-4.403769016265869, -2.056715965270996], + [-3.5336339473724365, 7.851678848266602], + [0.00985591858625412, 9.896574020385742], + [-1.9006569385528564, -1.4646042585372925], + [-5.102785110473633, -2.0825655460357666], + [2.5778770446777344, -4.610337734222412], + [4.125524520874023, 6.852126121520996], + [6.881761074066162, -1.9127529859542847], + [1.819752812385559, -3.1951353549957275], + [-3.4505653381347656, -4.368679523468018], + [-4.453726291656494, -1.8939894437789917], + [-5.136720180511475, -4.136674404144287], + [-4.79024076461792, 2.366708755493164], + [2.2607579231262207, -4.496921062469482], + [-2.0782394409179688, 2.525425434112549], + [-2.470947265625, 0.9435149431228638], + [3.243394613265991, 7.110252380371094], + [8.828202247619629, -2.4455888271331787], + [2.0573606491088867, -7.178155899047852], + [-1.7167760133743286, 2.441152334213257], + [-3.5246422290802, -2.099663734436035], + [2.1731388568878174, -2.9183309078216553], + [-0.14397242665290833, -1.0275486707687378], + [-2.7087862491607666, 2.51371431350708], + [9.071513175964355, -2.5453691482543945], + [9.264199256896973, -2.6284713745117188], + [-3.5016276836395264, 5.3338303565979], + [-6.409060955047607, -2.504925489425659], + [2.415527582168579, -6.818532466888428], + [-2.287994623184204, -0.039800647646188736], + [-0.3545067310333252, 0.06730398535728455], + [4.149150848388672, 5.770688056945801], + [2.1768412590026855, -7.568898677825928], + [-6.42229700088501, 2.3982906341552734], + [-2.184583902359009, 0.13013172149658203], + [2.3134896755218506, -3.6181299686431885], + [-5.625718116760254, -2.2234230041503906], + [5.1005072593688965, -1.3126063346862793], + [-0.6242008209228516, 0.858426570892334], + [-2.304759979248047, -0.8887686729431152], + [1.0416929721832275, 0.2276027500629425], + [-2.1671502590179443, 1.1406513452529907], + [4.602688789367676, 6.701930999755859], + [-2.669985294342041, -2.020089626312256], + [-6.395529747009277, -2.4494125843048096], + [5.203452110290527, -1.2423468828201294], + [2.363858222961426, 0.7526021003723145], + [3.2346644401550293, -5.046123027801514], + [3.1971309185028076, -5.112251281738281], + [-4.950720310211182, -1.9825271368026733], + [1.9611403942108154, -6.0768842697143555], + [3.3548407554626465, 6.500654697418213], + [-5.191050052642822, 4.850289821624756], + [6.768888473510742, -1.4115943908691406], + [-4.5293755531311035, -5.87505578994751], + [-3.403315544128418, -1.7183531522750854], + [-4.815967082977295, -3.1074435710906982], + [-0.5097255706787109, 10.640054702758789], + [-0.3977314829826355, 11.098213195800781], + [-4.520421504974365, -3.9667809009552], + [-4.026491641998291, -2.3771297931671143], + [2.214513063430786, -3.8561360836029053], + [-5.221866607666016, -3.4719789028167725], + [1.7196705341339111, 0.5336514711380005], + [-2.6261446475982666, -0.9527264833450317], + [-6.604682445526123, 8.256425857543945], + [-3.746988534927368, -4.748992443084717], + [0.6270636916160583, -5.852415084838867], + [2.5865447521209717, 6.027033805847168], + [2.5500833988189697, -6.7917633056640625], + [9.163542747497559, -2.5310299396514893], + [-4.717733383178711, 5.455926895141602], + [-7.243733882904053, -1.793640375137329], + [-4.715641021728516, -2.8942148685455322], + [0.10651039332151413, 5.341450214385986], + [6.4998273849487305, -3.0450644493103027], + [-5.4714741706848145, -0.43696922063827515], + [-2.349456310272217, 1.978903889656067], + [1.8037632703781128, -6.335781097412109], + [-3.295924425125122, -3.9486277103424072], + [-0.23550665378570557, 9.98147201538086], + [-3.3866891860961914, 7.179067611694336], + [2.331178903579712, 3.937579870223999], + [-2.562668561935425, -0.3702300488948822], + [-6.834817409515381, 8.261697769165039], + [2.97563099861145, -4.573089599609375], + [-0.560316264629364, 9.918624877929688], + [0.09853794425725937, -0.8133490681648254], + [2.790616750717163, 1.1381146907806396], + [-4.132730484008789, -3.412733554840088], + [3.196136236190796, 1.2540699243545532], + [-6.579975605010986, -1.9451602697372437], + [-3.617680311203003, -2.3390886783599854], + [-0.24734598398208618, 9.772459030151367], + [-1.7670515775680542, 7.2760725021362305], + [-4.612437725067139, -0.8185994029045105], + [-5.0821404457092285, 2.5686235427856445], + [-1.982436180114746, 0.5066184997558594], + [8.973782539367676, -2.6364636421203613], + [-2.469132661819458, 2.347917318344116], + [2.6521732807159424, -7.9588303565979], + [-3.7153000831604004, -1.580749750137329], + [-0.4028339087963104, -0.6538653373718262], + [-5.675745487213135, 6.64497709274292], + [0.17642831802368164, 5.284472942352295], + [2.910836935043335, -4.449301719665527], + [-5.215386390686035, 6.346469879150391], + [-2.76084041595459, 5.881552219390869], + [-4.0993828773498535, -1.72342050075531], + [-0.3496782183647156, 9.983508110046387], + [2.596501588821411, -4.526024341583252], + [-5.352493762969971, -2.8910439014434814], + [2.9728786945343018, -4.484023571014404], + [4.953608989715576, 6.18941593170166], + [-3.9044597148895264, -2.1254312992095947], + [2.9952380657196045, 6.225647926330566], + [-2.9647252559661865, 5.363440990447998], + [0.3490341603755951, -1.0567436218261719], + [-5.965647220611572, -1.9184401035308838], + [-3.1911191940307617, -5.270938396453857], + [-2.669119119644165, 2.298567533493042], + [5.433272838592529, -1.1151608228683472], + [-2.34543776512146, 2.3099353313446045], + [-2.447512626647949, 0.651970624923706], + [3.0101499557495117, -4.791625499725342], + [-6.662559986114502, 6.828183174133301], + [1.330676555633545, 5.6638994216918945], + [-5.305695056915283, 5.047268390655518], + [-0.5269940495491028, 9.974459648132324], + [1.4862974882125854, 0.3011864125728607], + [2.911170721054077, -4.3822197914123535], + [1.8267130851745605, 5.355221271514893], + [-0.4159197211265564, 11.10940933227539], + [8.002022743225098, -1.9201065301895142], + [-7.098280429840088, -0.2837252616882324], + [-3.880413770675659, -2.0935821533203125], + [0.9571263194084167, -0.1192217469215393], + [-0.15529996156692505, 9.625991821289062], + [-6.094978332519531, -2.5631673336029053], + [1.5805230140686035, 4.381541728973389], + [-0.9302720427513123, -0.6882728338241577], + [-5.514435291290283, 6.750062942504883], + [-8.821847915649414, -0.9387403726577759], + [-2.719069004058838, -1.444151759147644], + [-3.8977978229522705, -5.4034271240234375], + [-4.482845783233643, 3.354403018951416], + [-5.133882999420166, 2.301546335220337], + [-4.451354503631592, -4.1258440017700195], + [-0.5636592507362366, 9.17519474029541], + [-5.88850736618042, -1.0345953702926636], + [3.20708966255188, -4.799448490142822], + [-5.03338098526001, 0.647239089012146], + [-1.8383889198303223, -2.782086133956909], + [-7.25258207321167, 9.01369571685791], + [-0.19174307584762573, 9.644132614135742], + [-6.199867248535156, 4.946810722351074], + [-3.0665624141693115, -4.557394981384277], + [-6.893042087554932, -1.6684372425079346], + [3.4210903644561768, -6.31095552444458], + [-3.5291266441345215, -3.451202630996704], + [2.2150442600250244, -7.5385613441467285], + [-1.7765555381774902, 1.1766263246536255], + [-5.781868934631348, 2.6535394191741943], + [2.8973031044006348, -4.624311447143555], + [2.2811906337738037, -4.1352739334106445], + [-5.1722941398620605, 6.4110612869262695], + [-1.6704963445663452, -0.5505790710449219], + [-5.2110724449157715, -0.9328917860984802], + [-5.220789909362793, -3.9024343490600586], + [2.466007947921753, -4.553861618041992], + [3.0531580448150635, -5.632687091827393], + [4.680713653564453, 7.4557108879089355], + [-2.5793402194976807, 1.9359855651855469], + [-0.10645539313554764, 10.68193244934082], + [-4.202532768249512, 1.9593089818954468], + [-6.486974239349365, -1.030090570449829], + [9.185709953308105, -2.634216547012329], + [2.3554928302764893, -6.611969947814941], + [-4.017902851104736, -0.2893570065498352], + [-7.6473612785339355, -1.3443604707717896], + [-6.90907096862793, 8.344905853271484], + [3.123363971710205, -4.976512908935547], + [-7.028315544128418, -0.8893994688987732], + [8.089563369750977, -2.0218491554260254], + [-2.3360183238983154, -3.123250722885132], + [1.258940577507019, 2.129875659942627], + [2.2782199382781982, 5.128336429595947], + [-2.4977588653564453, 1.6843498945236206], + [-5.936685562133789, 2.1045095920562744], + [-0.013009972870349884, 9.734489440917969], + [3.147733688354492, -7.365877151489258], + [-3.2999088764190674, -4.856955528259277], + [1.940284013748169, -3.084054708480835], + [1.2986088991165161, 1.1576679944992065], + [-0.27843040227890015, 9.470481872558594], + [0.7465615272521973, -6.230311393737793], + [1.0660221576690674, 5.900386810302734], + [-0.7917695641517639, 9.8181791305542], + [-1.1576893329620361, 1.131945013999939], + [-6.604689121246338, 7.562956809997559], + [2.3477940559387207, -3.639241933822632], + [8.590447425842285, -2.706019878387451], + [-0.215741366147995, -0.6117671132087708], + [-4.906919956207275, -3.7504146099090576], + [-4.537283420562744, -4.354402542114258], + [3.641141176223755, -2.517672061920166], + [0.5537203550338745, -0.983549952507019], + [2.875763177871704, 0.8296365737915039], + [-6.914700508117676, 8.53829574584961], + [5.132166862487793, -1.1212736368179321], + [3.436357259750366, 6.3872785568237305], + [7.773983478546143, -2.2950844764709473], + [-3.5765469074249268, -1.8223572969436646], + [-0.32750624418258667, 10.441001892089844], + [5.137722969055176, -2.320112466812134], + [-4.881587505340576, 4.903040885925293], + [-4.462091445922852, -4.28206729888916], + [-2.5598549842834473, 0.9851280450820923], + [-4.474015712738037, -3.7401182651519775], + [-5.665197372436523, 7.355831146240234], + [-4.098323345184326, -3.290403366088867], + [-5.113811016082764, -3.2692646980285645], + [-5.828280925750732, 7.341310977935791], + [-5.452761173248291, 4.291983127593994], + [-5.8694586753845215, -1.8257094621658325], + [-5.6841654777526855, 6.607596397399902], + [-4.91468620300293, -3.3584024906158447], + [-0.5003256797790527, 9.202804565429688], + [-3.3356754779815674, 6.122175216674805], + [-5.07149076461792, 7.523317813873291], + [-5.7129411697387695, -1.2905603647232056], + [2.0488128662109375, -3.446146011352539], + [-0.14202433824539185, 9.405403137207031], + [-4.178625583648682, 4.827350616455078], + [2.2272746562957764, -3.7731049060821533], + [-5.769484519958496, -4.1775617599487305], + [-0.43249547481536865, 10.412769317626953], + [-4.801852703094482, 1.4125627279281616], + [-7.92235803604126, -1.1119755506515503], + [-4.494621753692627, -1.1868935823440552], + [1.0513502359390259, -5.033133506774902], + [-5.1258416175842285, -5.2598347663879395], + [-4.873265743255615, 5.301441669464111], + [-4.073357582092285, 5.865462303161621], + [2.1850426197052, -3.1309235095977783], + [-2.807455062866211, 1.3944672346115112], + [1.8822935819625854, -4.943271160125732], + [1.2451977729797363, 0.21515882015228271], + [5.0866379737854, -1.6219581365585327], + [-4.532065391540527, 5.595762252807617], + [7.996697902679443, -2.40309739112854], + [-1.850276231765747, 2.472975254058838], + [-3.09678053855896, -4.593950271606445], + [1.792351484298706, -6.360415458679199], + [-3.522998809814453, -1.9558168649673462], + [4.562636375427246, -0.30272042751312256], + [-4.115022659301758, 1.4865881204605103], + [7.041648864746094, -2.5440502166748047], + [-4.468175888061523, 4.491066932678223], + [-7.2285685539245605, -1.2103666067123413], + [-0.3437679409980774, 10.236669540405273], + [-5.413033962249756, -6.193228721618652], + [-4.576297760009766, -2.6315712928771973], + [-4.341585636138916, -4.901285171508789], + [-4.978224277496338, 3.28818416595459], + [-2.4095044136047363, 4.369562149047852], + [-7.147643566131592, 1.7452512979507446], + [-0.2562099099159241, -1.6003140211105347], + [-4.01906681060791, -2.1310698986053467], + [5.89291524887085, -1.4545704126358032], + [-5.01408576965332, -2.2783281803131104], + [6.378901958465576, -3.2393031120300293], + [-2.5763626098632812, 1.4351812601089478], + [0.723314642906189, -5.256137371063232], + [2.513223886489868, -6.99122953414917], + [-0.16423839330673218, 9.573646545410156], + [-5.414581775665283, -2.307603597640991], + [-0.41320347785949707, 10.83779525756836], + [7.061243534088135, -1.5798286199569702], + [-0.10612712055444717, -0.9225027561187744], + [-7.518427848815918, -1.0943446159362793], + [-7.559682846069336, -1.2770686149597168], + [3.5181806087493896, 6.209423065185547], + [5.875995635986328, -1.2211774587631226], + [-7.421818256378174, 9.205127716064453], + [2.802096366882324, -5.344476222991943], + [0.9179198145866394, -6.7884368896484375], + [1.9191579818725586, -3.7218639850616455], + [-3.9384026527404785, -1.07915461063385], + [2.184727907180786, -6.124400615692139], + [-5.983436584472656, -1.1280781030654907], + [8.535104751586914, -2.4909801483154297], + [-0.2324424386024475, 9.245513916015625], + [-6.093191623687744, 7.938221454620361], + [3.1539976596832275, -4.861860752105713], + [9.327120780944824, -2.612351417541504], + [2.259176254272461, 0.6915584802627563], + [-4.9660749435424805, 0.9453518390655518], + [-5.047581195831299, -3.0432255268096924], + [-0.8347695469856262, 3.4602129459381104], + [-5.520777225494385, 6.332444190979004], + [2.7749359607696533, -7.314356327056885], + [-2.6253550052642822, 0.7129741311073303], + [9.74409008026123, -2.7170631885528564], + [-6.509871482849121, -2.1705315113067627], + [8.84485912322998, -2.5984153747558594], + [-6.5453057289123535, 1.3240822553634644], + [-2.154050588607788, 2.220174789428711], + [-6.374885082244873, 7.368349075317383], + [2.624593734741211, -4.05568790435791], + [1.4944591522216797, 5.432748794555664], + [-0.17065376043319702, 8.882017135620117], + [-4.682910442352295, -3.82743501663208], + [-2.966578960418701, 4.705549716949463], + [-0.25298386812210083, 9.479412078857422], + [-5.325235843658447, 2.0856716632843018], + [1.795900821685791, 1.1211358308792114], + [-1.909186840057373, 1.402303695678711], + [1.8033695220947266, 5.355484485626221], + [-4.251211643218994, 1.854655385017395], + [-0.9373285174369812, -0.53142911195755], + [-1.0145716667175293, -1.2103251218795776], + [0.7232035994529724, -7.391286849975586], + [2.7243006229400635, -4.058483600616455], + [-4.448824405670166, 7.462852478027344], + [-1.9043395519256592, 6.2219343185424805], + [8.461150169372559, -2.5509369373321533], + [-2.0742814540863037, 2.472116470336914], + [-4.022784233093262, -2.863023042678833], + [2.553936243057251, -4.0754499435424805], + [1.8164631128311157, 0.7996630072593689], + [-0.38329893350601196, 11.033031463623047], + [-4.542321681976318, -3.0785017013549805], + [2.386375665664673, 1.8490630388259888], + [1.537055253982544, -6.601919174194336], + [-5.3293137550354, -2.102426528930664], + [-2.1308815479278564, -0.012023869901895523], + [-0.24536210298538208, 9.840182304382324], + [-6.018112659454346, 3.4240660667419434], + [-0.20812195539474487, 9.764278411865234], + [2.6519577503204346, -4.093647003173828], + [-6.625072956085205, 7.662012100219727], + [0.8605518341064453, -4.950379848480225], + [-4.994627952575684, -2.839467763900757], + [2.919930934906006, -7.0330352783203125], + [-2.49466872215271, -1.75502610206604], + [2.777021884918213, -4.325943946838379], + [3.0186989307403564, -4.787978649139404], + [7.112102031707764, -1.6923750638961792], + [-2.461019992828369, 1.3303053379058838], + [8.977862358093262, -2.6115562915802], + [-3.5534539222717285, -2.3882148265838623], + [-0.16487091779708862, 10.095462799072266], + [0.2308778166770935, -1.064408779144287], + [-5.255539417266846, -3.476642370223999], + [2.1484463214874268, -6.228363037109375], + [-2.0152103900909424, 5.722003936767578], + [1.3164092302322388, -7.252607822418213], + [-0.15964347124099731, -1.2869523763656616], + [-5.218897342681885, 6.295122146606445], + [2.5888900756835938, -6.015343189239502], + [-2.5922470092773438, 1.9030017852783203], + [2.8103091716766357, -4.200713634490967], + [-0.2629043459892273, 9.757261276245117], + [2.1172521114349365, -7.142972946166992], + [1.530510425567627, -7.289898872375488], + [9.217985153198242, -2.58747935295105], + [9.910721778869629, -2.753168821334839], + [-3.2345938682556152, 3.4931981563568115], + [2.62445330619812, -4.401912689208984], + [-0.1274915337562561, 10.69156265258789], + [-6.785362720489502, 8.446829795837402], + [2.905766725540161, -4.375593185424805], + [3.077918291091919, -4.967741012573242], + [-3.298067569732666, 2.4034316539764404], + [2.782879114151001, -4.091828346252441], + [-0.4320791959762573, 10.197662353515625], + [1.3427953720092773, 0.2325858771800995], + [1.6539058685302734, -3.38883638381958], + [-0.1658363938331604, 9.882875442504883], + [2.9473302364349365, -6.661900997161865], + [-3.3397789001464844, 6.731325149536133], + [-1.0673177242279053, 5.450489044189453], + [7.169897556304932, -2.194823980331421], + [-0.5902140140533447, 9.050322532653809], + [-6.39078950881958, 7.628430366516113], + [3.165616273880005, -5.438531875610352], + [-4.411525249481201, 2.306906223297119], + [-5.192257881164551, -1.7207262516021729], + [7.442123889923096, -1.9285650253295898], + [-6.4528985023498535, 8.270401000976562], + [-4.369517803192139, -1.2493549585342407], + [-6.228822231292725, 7.163268089294434], + [-6.63966703414917, -1.6964833736419678], + [1.7924773693084717, 4.698541164398193], + [0.32870322465896606, -0.39933329820632935], + [-3.988668918609619, -1.3265883922576904], + [3.8278276920318604, 6.738673210144043], + [7.917169570922852, -3.0181772708892822], + [2.273341417312622, -4.530023574829102], + [7.215600490570068, -3.2316582202911377], + [-0.23889118432998657, 9.228743553161621], + [6.545700550079346, -0.22450929880142212], + [2.7042829990386963, -4.426272869110107], + [8.774713516235352, -2.330247640609741], + [-6.426239490509033, 6.029633522033691], + [9.3834228515625, -2.646484375], + [-5.411427974700928, 1.6459051370620728], + [-2.984346866607666, 5.983538627624512], + [3.9417850971221924, 7.086504936218262], + [3.08174991607666, -4.619502067565918], + [-0.5369384288787842, 8.869194984436035], + [-4.272738933563232, 5.383707046508789], + [-0.34885066747665405, 9.340023040771484], + [2.4238102436065674, -3.5024328231811523], + [-2.502779722213745, 0.5535383224487305], + [-4.895751476287842, 4.695662021636963], + [0.12670466303825378, -0.44370514154434204], + [-0.2278822660446167, 9.516117095947266], + [3.7192001342773438, 6.784745216369629], + [2.929011821746826, -4.46124267578125], + [0.08098682016134262, 2.974590539932251], + [2.754099130630493, -3.272224187850952], + [-5.193253517150879, 4.35477876663208], + [-5.663816452026367, 5.654886722564697], + [1.026934266090393, 4.875582695007324], + [-2.3778717517852783, -0.6864715814590454], + [-6.173849105834961, 7.374311447143555], + [-7.654633045196533, -1.2604321241378784], + [-0.22538137435913086, 10.122926712036133], + [-2.945417642593384, 5.720664024353027], + [1.8529675006866455, 5.068958759307861], + [8.789124488830566, -2.3653132915496826], + [2.540008783340454, 5.450257301330566], + [-1.9219069480895996, -1.022219181060791], + [4.856505870819092, -1.2135473489761353], + [2.828934907913208, -4.4692702293396], + [2.3889198303222656, -4.140683650970459], + [4.764503002166748, -1.211022138595581], + [-2.595979928970337, 0.709782600402832], + [-2.697097063064575, -0.5809799432754517], + [-2.4384067058563232, 1.6180676221847534], + [-1.0536187887191772, 5.518716335296631], + [-3.437659978866577, 3.675562620162964], + [-4.3363213539123535, 0.9068605303764343], + [-5.1831955909729, -2.068462610244751], + [-3.471867322921753, 5.122115612030029], + [-2.1153674125671387, -0.3734261691570282], + [4.324159145355225, 7.091567039489746], + [1.9920008182525635, 5.731398582458496], + [3.4021718502044678, 4.83925199508667], + [4.731128692626953, -2.9514949321746826], + [-5.939454555511475, -1.5473740100860596], + [3.294121026992798, 5.243322849273682], + [-2.778364896774292, 0.670108437538147], + [-5.170527935028076, 3.386718511581421], + [-3.6412999629974365, -3.149812936782837], + [2.956305742263794, -4.465304851531982], + [3.1254281997680664, -1.992644190788269], + [-3.502096652984619, 6.287979602813721], + [-0.24127793312072754, 9.60063362121582], + [-3.082937002182007, -3.2076759338378906], + [-5.143953323364258, -7.459779739379883], + [-4.597331523895264, -0.8854788541793823], + [2.411334276199341, 0.771535336971283], + [-6.0513081550598145, 2.853189468383789], + [-3.702598810195923, -2.402287244796753], + [1.417886734008789, -7.834010601043701], + [-2.102834939956665, -2.376535177230835], + [-2.3477001190185547, -0.828959584236145], + [8.381837844848633, -2.1664950847625732], + [-5.533722400665283, -2.2053866386413574], + [-5.849732875823975, 1.2882193326950073], + [-5.8202667236328125, -2.151820659637451], + [0.6152322888374329, -6.072257041931152], + [-6.077571868896484, -0.7963486909866333], + [5.582334041595459, -0.8843947649002075], + [2.660008192062378, -6.432267665863037], + [-0.7973982691764832, 9.503655433654785], + [8.963178634643555, -2.4592092037200928], + [-5.91827917098999, -4.726413249969482], + [9.32340145111084, -2.5791051387786865], + [-4.956321716308594, -3.1890244483947754], + [7.96571683883667, -2.0643460750579834], + [-2.613473653793335, -0.8120393753051758], + [8.827418327331543, -2.4982717037200928], + [-6.018558502197266, -1.3355579376220703], + [-4.719243049621582, -5.170909881591797], + [3.1709768772125244, -4.750505447387695], + [-4.032588958740234, -3.932370901107788], + [-0.3707726001739502, 9.585678100585938], + [-5.280160427093506, -1.6209653615951538], + [-2.991882562637329, 3.0956501960754395], + [-4.848090648651123, -3.387441635131836], + [-4.233785152435303, -2.6409049034118652], + [2.74599289894104, -4.176052093505859], + [-2.165005683898926, 5.906332015991211], + [2.9823997020721436, -4.497689247131348], + [-3.3082897663116455, 2.963378667831421], + [-4.3051838874816895, -2.636259078979492], + [6.8197550773620605, -1.6402596235275269], + [-2.937751054763794, 6.3485517501831055], + [-6.008294582366943, 7.410892963409424], + [-2.1969692707061768, 2.398367166519165], + [-7.827430725097656, 9.629775047302246], + [7.8040452003479, -1.9293358325958252], + [-6.240264415740967, -1.7042917013168335], + [1.8092623949050903, 0.6620737314224243], + [6.6397705078125, -1.372974157333374], + [-5.045931339263916, 2.0728793144226074], + [-5.5180439949035645, 5.537662982940674], + [-4.912740707397461, -1.8087934255599976], + [-2.396052360534668, 1.6705151796340942], + [10.342167854309082, -2.863372564315796], + [0.0712161585688591, 10.243197441101074], + [-3.065847158432007, 0.41127896308898926], + [-5.878432273864746, -2.160719633102417], + [5.211434841156006, -1.036055564880371], + [8.400378227233887, -2.590275764465332], + [-4.490240573883057, 2.816019296646118], + [-0.49008607864379883, 11.542816162109375], + [2.175626754760742, 5.71298360824585], + [-4.7622551918029785, -3.656816244125366], + [0.5387396216392517, -0.758618950843811], + [-5.3392252922058105, 4.457573890686035], + [3.1552999019622803, -4.764307022094727], + [5.518834590911865, -1.2940223217010498], + [-4.200776100158691, 3.546846628189087], + [-3.629891872406006, -4.296056270599365], + [1.0509570837020874, 0.1804141402244568], + [6.010669231414795, -2.3185341358184814], + [6.6132988929748535, -1.7398700714111328], + [2.928910970687866, -5.207250118255615], + [-0.37070921063423157, -0.5498528480529785], + [-5.934122562408447, -2.6019439697265625], + [2.98919415473938, -4.504423141479492], + [1.1843494176864624, -6.477544784545898], + [6.6240925788879395, -1.1205087900161743], + [-2.484661817550659, 2.1979520320892334], + [-3.954374313354492, 5.6444807052612305], + [-2.1087729930877686, 2.474379777908325], + [7.694094181060791, -3.3093302249908447], + [-4.326839447021484, -2.989084482192993], + [-6.78640604019165, -0.7523733377456665], + [2.874971628189087, 0.8302847146987915], + [-1.3427753448486328, -0.7307932376861572], + [3.0461385250091553, -4.570590972900391], + [-2.900393009185791, -3.5509426593780518], + [-2.1974759101867676, -0.1727239489555359], + [7.709659099578857, -1.8633610010147095], + [-6.546765327453613, -0.7166666984558105], + [2.9572598934173584, -4.500744819641113], + [-2.4294116497039795, 0.9799094200134277], + [-5.2722859382629395, -2.372177839279175], + [4.86110258102417, -4.707854747772217], + [-2.440657377243042, -2.153627872467041], + [3.1986348628997803, -5.614912033081055], + [3.2744028568267822, -5.56216287612915], + [8.241337776184082, -2.2682502269744873], + [-3.151074171066284, -2.2080233097076416], + [-2.4020886421203613, 1.517514705657959], + [-1.7803468704223633, 7.627080917358398], + [1.6299347877502441, -2.9652633666992188], + [-4.985096454620361, 3.7921009063720703], + [-3.095033884048462, -3.813864231109619], + [-5.0050201416015625, -2.6082963943481445], + [-4.218243598937988, -2.309098482131958], + [-0.23221075534820557, 9.559057235717773], + [-5.5354695320129395, 1.9458295106887817], + [2.8290884494781494, -4.238252639770508], + [3.021019697189331, 6.332098007202148], + [-2.267371892929077, 0.7103153467178345], + [2.9794085025787354, -4.468742370605469], + [-5.830428600311279, 7.23503303527832], + [-3.478193998336792, -2.0023982524871826], + [-5.1558661460876465, 4.13723087310791], + [0.4505508542060852, -5.74226713180542], + [-0.5876545310020447, 8.713555335998535], + [1.4610989093780518, -7.715527057647705], + [1.9420676231384277, -7.430049896240234], + [-0.6126512885093689, -2.1818325519561768], + [-4.15430212020874, -2.0321996212005615], + [2.7445878982543945, -4.687704086303711], + [-7.7170586585998535, -1.3162533044815063], + [-3.332331895828247, 3.3978705406188965], + [-0.28952693939208984, 9.148082733154297], + [4.701132297515869, 7.288569927215576], + [2.8776962757110596, -4.245698928833008], + [0.7593429088592529, 5.6790571212768555], + [1.3369953632354736, -7.545842170715332], + [7.867590427398682, -2.0789897441864014], + [-0.2501980662345886, 0.025371234863996506], + [2.043954610824585, 0.6168036460876465], + [-0.24883347749710083, 9.698990821838379], + [0.2031184434890747, 9.610187530517578], + [-3.166613817214966, -2.5403754711151123], + [-2.5897679328918457, -0.3246310353279114], + [-4.0284423828125, -3.348970890045166], + [1.7977361679077148, 5.57646369934082], + [7.29421854019165, -2.519279956817627], + [-5.206590175628662, -2.6129696369171143], + [-2.1647276878356934, 2.096060276031494], + [-4.509632110595703, -4.193682670593262], + [2.6368021965026855, 1.068974494934082], + [-6.626244068145752, 7.324703216552734], + [-6.366701602935791, 7.846404075622559], + [1.7680988311767578, -6.787620544433594], + [2.5817737579345703, -4.458449840545654], + [-4.763879299163818, 0.8143391609191895], + [-5.0011067390441895, -0.356891930103302], + [-4.807472229003906, 4.568209171295166], + [0.12415861338376999, 9.8253755569458], + [1.376854658126831, -6.700192451477051], + [2.489079236984253, 4.318868637084961], + [-2.120913028717041, 2.7037835121154785], + [-5.024913787841797, 0.2800886631011963], + [8.859288215637207, -2.366651773452759], + [5.581605911254883, -0.8642491698265076], + [-2.2959907054901123, 1.7373689413070679], + [-4.446732997894287, -2.3995025157928467], + [-0.3504001796245575, -1.3745683431625366], + [-2.853080987930298, -3.2761805057525635], + [-5.047256946563721, 6.677374362945557], + [-4.62125825881958, -4.570008277893066], + [-0.19981533288955688, 10.529170989990234], + [8.3518648147583, -2.4799931049346924], + [7.443671703338623, -1.597788691520691], + [6.669421672821045, -2.847769021987915], + [-2.8961455821990967, 3.1725075244903564], + [3.0524561405181885, -4.588728427886963], + [9.30514907836914, -2.5797510147094727], + [3.1277663707733154, -4.695034027099609], + [2.466808557510376, -6.227386951446533], + [-6.556567668914795, 0.6453573703765869], + [-3.180337905883789, -1.613503098487854], + [-7.781344890594482, -1.136486291885376], + [-4.236823558807373, -2.0172388553619385], + [1.1238385438919067, 5.246782302856445], + [0.32180851697921753, 5.125458717346191], + [-2.6266801357269287, 1.3565692901611328], + [-6.150543689727783, 5.311583518981934], + [-0.33500152826309204, 10.054349899291992], + [4.413094997406006, -1.8146049976348877], + [-1.3926637172698975, -0.6731441020965576], + [-5.256168365478516, 6.424137115478516], + [-6.8962082862854, 8.738926887512207], + [3.221165657043457, -6.602598190307617], + [-0.2536066770553589, 8.531286239624023], + [-1.1591283082962036, 1.378596544265747], + [-4.797001361846924, -2.6609437465667725], + [-4.693304061889648, -3.3378312587738037], + [-0.43035149574279785, 9.78316879272461], + [-5.467246055603027, 6.48634672164917], + [-5.298130512237549, 2.752048969268799], + [4.430264949798584, -1.8192777633666992], + [2.062159538269043, 3.1945056915283203], + [-5.725442409515381, -1.2610161304473877], + [8.657876968383789, -2.2419097423553467], + [-5.0183939933776855, -3.211742639541626], + [-5.564281940460205, 0.42194950580596924], + [-4.867546558380127, 2.216104030609131], + [4.56450891494751, -3.7581915855407715], + [-4.2084455490112305, -3.1734907627105713], + [8.112523078918457, -2.1621408462524414], + [-0.1325664520263672, -0.08525092899799347], + [2.8668887615203857, -4.528071403503418], + [5.22471809387207, -1.3030539751052856], + [-7.880096435546875, -1.1446459293365479], + [2.7518503665924072, -6.804583549499512], + [-5.549271106719971, 4.263317584991455], + [-0.23144572973251343, -0.4041617214679718], + [2.2288005352020264, 5.239564418792725], + [-3.147897481918335, -1.2558962106704712], + [0.022878222167491913, -0.8855896592140198], + [0.8820623755455017, 5.8515119552612305], + [-4.2984938621521, -2.8748342990875244], + [-4.289378643035889, 4.605536937713623], + [1.8145318031311035, -2.895090103149414], + [0.8533896803855896, -0.2990305423736572], + [-5.284829616546631, 1.2764201164245605], + [-1.0619229078292847, 5.833487510681152], + [-3.966756820678711, -3.450312852859497], + [9.5975341796875, -2.7160403728485107], + [-4.360002040863037, -0.610109269618988], + [0.6060615181922913, -0.6453722715377808], + [0.4639509916305542, 6.52455472946167], + [-5.0941596031188965, -3.9745876789093018], + [-4.930136680603027, -4.9955153465271], + [-5.07642126083374, -1.9127918481826782], + [1.9819869995117188, -3.5854547023773193], + [4.804494857788086, -0.6740008592605591], + [-6.286886692047119, -2.047199249267578], + [3.0122580528259277, -4.529001235961914], + [7.817698001861572, -2.38236403465271], + [2.8882248401641846, -4.355482578277588], + [-6.032873630523682, 5.696789741516113], + [-5.072140216827393, 6.42580509185791], + [-2.3808720111846924, 0.5538529753684998], + [4.474409580230713, -2.0056519508361816], + [0.23986589908599854, -0.38635993003845215], + [-3.5860660076141357, -1.5215860605239868], + [-1.0648818016052246, 9.635278701782227], + [8.316435813903809, -2.3545801639556885], + [-6.868826389312744, 0.5627316236495972], + [-5.745725631713867, 2.3328635692596436], + [-6.066473960876465, -1.5200523138046265], + [-2.519225835800171, 1.9156743288040161], + [2.5896823406219482, -3.9613707065582275], + [-0.25361448526382446, 9.15146541595459], + [-4.685477256774902, -3.0167129039764404], + [0.22007548809051514, -5.2968854904174805], + [1.0786550045013428, -3.4685280323028564], + [-6.8558831214904785, 8.200533866882324], + [0.48254644870758057, 0.32611358165740967], + [8.813780784606934, -2.709587574005127], + [4.410944938659668, 6.595959663391113], + [-6.5390801429748535, -1.8330676555633545], + [-5.1563897132873535, 2.191929578781128], + [-2.050715684890747, 0.3493911325931549], + [-4.743719100952148, -2.374462842941284], + [2.735900402069092, -4.151180267333984], + [-0.016880668699741364, -1.4745934009552002], + [1.1914479732513428, -7.683375835418701], + [-5.197403430938721, -3.0987298488616943], + [-0.2830865979194641, 9.680727005004883], + [-4.937801837921143, -0.6413717269897461], + [-2.5094265937805176, 4.321296691894531], + [9.348681449890137, -2.4618122577667236], + [2.229525327682495, -4.8102312088012695], + [-0.06082481890916824, 10.520378112792969], + [-5.476962566375732, 5.9636993408203125], + [-3.748779773712158, -1.638586401939392], + [-5.309966564178467, 3.2936830520629883], + [4.6830525398254395, -0.8588438034057617], + [2.701305389404297, -4.068131446838379], + [1.7371327877044678, -6.859159469604492], + [8.154053688049316, -2.740802049636841], + [3.0074093341827393, -4.726306438446045], + [5.041763782501221, -3.0227887630462646], + [-0.365153431892395, 10.790451049804688], + [-6.43824577331543, 7.749133586883545], + [0.17738446593284607, -0.3758803606033325], + [-2.5429985523223877, 1.8983769416809082], + [-4.4822096824646, -2.7769482135772705], + [-4.6250481605529785, -1.9924155473709106], + [-5.032729625701904, 3.8434512615203857], + [-2.1382672786712646, 0.2796499729156494], + [-6.276136875152588, 8.43809986114502], + [-3.7351667881011963, -1.1787375211715698], + [-0.24736618995666504, 10.030725479125977], + [-5.49127721786499, 6.757655620574951], + [3.846653461456299, -3.4419944286346436], + [8.433724403381348, -2.2724554538726807], + [6.342357158660889, -2.2648961544036865], + [4.135427474975586, 6.522906303405762], + [8.563136100769043, -2.298898458480835], + [8.903912544250488, -2.273031234741211], + [-4.182654857635498, 6.080226898193359], + [2.216520071029663, -6.6372270584106445], + [0.28458672761917114, 9.107841491699219], + [-4.106557369232178, -3.0353827476501465], + [-4.180324077606201, -2.670015335083008], + [8.397015571594238, -2.5657827854156494], + [-2.7163259983062744, 2.1895790100097656], + [-6.4332404136657715, 8.239538192749023], + [-0.5072894096374512, 11.605350494384766], + [0.4615136384963989, -0.9439411163330078], + [-2.927358388900757, -0.3450823426246643], + [-4.435623645782471, -3.1761934757232666], + [2.948038101196289, -4.12226676940918], + [-2.9274260997772217, 3.0023748874664307], + [-5.187142372131348, 2.501021385192871], + [2.3442020416259766, 5.848517894744873], + [3.1087753772735596, -6.943730354309082], + [3.2275924682617188, 5.511531829833984], + [0.0941527709364891, 6.4263386726379395], + [-0.27673351764678955, 9.431312561035156], + [-2.4977121353149414, 2.2067689895629883], + [-2.9452641010284424, 6.196933746337891], + [-6.38935661315918, 7.899112224578857], + [-6.831120014190674, -1.601192831993103], + [-4.895777225494385, 5.842605113983154], + [-2.3081681728363037, 1.2909140586853027], + [-2.2324016094207764, -1.9226802587509155], + [-0.4531504809856415, -1.2827370166778564], + [-0.47827887535095215, 10.238336563110352], + [2.187770128250122, -8.348640441894531], + [-7.40842866897583, 9.05722427368164], + [-0.29381054639816284, 9.65826416015625], + [-5.220445156097412, 4.537260055541992], + [2.227698564529419, 5.32069206237793], + [-6.085017204284668, 3.543612480163574], + [-2.25626540184021, 1.7943302392959595], + [2.9022839069366455, 5.89720344543457], + [-0.503756046295166, 5.756178855895996], + [-6.956358909606934, -2.271202564239502], + [3.1938083171844482, -4.7827911376953125], + [-3.8445346355438232, 6.584199905395508], + [1.6861940622329712, -2.6119117736816406], + [1.551130771636963, -7.774789810180664], + [2.392815351486206, -3.489682674407959], + [-2.2617404460906982, 2.388669013977051], + [-4.222832202911377, -3.4036197662353516], + [-4.2820143699646, -3.4962050914764404], + [1.9555251598358154, -7.562687397003174], + [6.9151458740234375, -2.4068405628204346], + [5.3083696365356445, 7.266488552093506], + [2.270491600036621, -3.905388593673706], + [4.896473407745361, -1.0724904537200928], + [-4.425071716308594, -4.075861930847168], + [-6.773410320281982, 8.168571472167969], + [2.818816900253296, -4.411949157714844], + [0.0753057524561882, 9.605859756469727], + [-3.4061732292175293, 5.981639862060547], + [-3.1529810428619385, -2.871039390563965], + [-1.6152880191802979, 0.8529505133628845], + [-6.828420162200928, -1.4974356889724731], + [-0.3516393303871155, 11.213172912597656], + [1.0668456554412842, -5.463245868682861], + [-4.192202568054199, -2.234947919845581], + [8.985005378723145, -2.4985129833221436], + [-2.3896586894989014, 5.883820056915283], + [-2.422203302383423, 1.3493276834487915], + [-0.36821621656417847, 9.863752365112305], + [1.3559309244155884, -7.595250129699707], + [-3.7856476306915283, -2.45971941947937], + [-1.7732810974121094, 1.9142409563064575], + [-7.356787204742432, -0.8267865180969238], + [6.053602695465088, -1.313470721244812], + [1.6675196886062622, 4.982546329498291], + [-4.69292688369751, -3.4090158939361572], + [1.8616594076156616, 6.01254940032959], + [-0.26280367374420166, 9.53720474243164], + [-4.940793037414551, 1.6369699239730835], + [2.784456968307495, -4.317653656005859], + [-5.583435535430908, -0.4261767864227295], + [2.9844558238983154, -4.641260623931885], + [-7.438050270080566, -0.8750152587890625], + [0.05033668130636215, -2.6748812198638916], + [-3.8686840534210205, -0.9154936075210571], + [-4.426331996917725, -3.6624889373779297], + [-3.582732677459717, -0.23866641521453857], + [-3.941493034362793, -5.8820343017578125], + [0.9039406180381775, -5.310060501098633], + [-2.1448566913604736, 6.544386386871338], + [-0.5609440803527832, 9.182241439819336], + [-2.471677541732788, 0.8157027959823608], + [-5.856566905975342, -2.8572912216186523], + [-5.822596073150635, 4.260415077209473], + [2.9104387760162354, -4.402608394622803], + [-3.3662350177764893, -5.373128890991211], + [-2.5666768550872803, 2.514662981033325], + [2.9014458656311035, -4.574419975280762], + [2.2570080757141113, -6.723381042480469], + [2.582799196243286, -4.401031494140625], + [-0.2913053631782532, 9.32379150390625], + [-6.608442783355713, -2.9091291427612305], + [-4.7755045890808105, 5.110037803649902], + [-0.26583564281463623, 9.865214347839355], + [-1.8830872774124146, -0.817878782749176], + [-4.718382835388184, -1.7030470371246338], + [-0.3293529152870178, 10.430148124694824], + [1.1006255149841309, -3.786989450454712], + [1.8168103694915771, -5.778430461883545], + [-1.3724534511566162, 8.545629501342773], + [-3.9135468006134033, -4.354831695556641], + [-1.0709493160247803, -3.0276601314544678], + [1.0700042247772217, -6.920274257659912], + [9.717337608337402, -2.705810308456421], + [-4.529755592346191, -3.047818899154663], + [4.280734539031982, -1.1048449277877808], + [-5.325337886810303, 1.1155197620391846], + [-3.834920883178711, 6.219380855560303], + [1.1889328956604004, -7.827114582061768], + [-3.9586009979248047, -4.201876640319824], + [2.5142734050750732, -4.102566719055176], + [-2.0387489795684814, 2.4007773399353027], + [-2.104966640472412, 2.4798574447631836], + [1.8620854616165161, -7.101822853088379], + [2.8615353107452393, -4.282561779022217], + [-0.6490140557289124, 0.9728620052337646], + [-5.082211017608643, -5.831417083740234], + [6.519381046295166, -1.7725152969360352], + [3.4879865646362305, -2.9351632595062256], + [7.396177291870117, -3.8977158069610596], + [-0.20892232656478882, -0.19849637150764465], + [1.2469627857208252, 1.8320521116256714], + [8.888782501220703, -2.9119045734405518], + [-4.404569625854492, 6.557677268981934], + [2.572303056716919, 1.1750587224960327], + [-0.30433303117752075, 10.750528335571289], + [0.5354678630828857, -2.892704725265503], + [-5.8687238693237305, 7.093453407287598], + [9.977614402770996, -2.7388577461242676], + [1.819444179534912, -7.959935188293457], + [-0.2179471254348755, -2.145376443862915], + [1.5152276754379272, -6.3459248542785645], + [-2.0201311111450195, -0.9262738227844238], + [-0.45820876955986023, -1.82553231716156], + [-4.7012763023376465, 5.436251163482666], + [2.525465250015259, 5.4120988845825195], + [3.022930145263672, -4.537408828735352], + [-2.499866247177124, 2.137282371520996], + [-2.168828010559082, 2.8483500480651855], + [-5.304322719573975, -2.848644495010376], + [-3.5757644176483154, 0.033215995877981186], + [-2.7235794067382812, 0.8652873039245605], + [2.0275192260742188, 5.266469955444336], + [8.834084510803223, -2.545180559158325], + [7.825498104095459, -1.8865017890930176], + [-5.512109756469727, 8.259865760803223], + [-2.231438159942627, 4.155788421630859], + [-5.480520248413086, 2.933743715286255], + [-2.303978204727173, 0.9026048183441162], + [-2.167090654373169, -2.477369546890259], + [-1.0030882358551025, -1.5704171657562256], + [-0.2333018183708191, 9.446601867675781], + [-2.494330406188965, 2.5308644771575928], + [-5.153378486633301, -2.300816297531128], + [1.9393413066864014, -7.305547714233398], + [-4.243010520935059, -4.818097114562988], + [4.377780437469482, 6.759990692138672], + [2.628418207168579, -7.5222954750061035], + [2.1226799488067627, 5.356258392333984], + [-2.5154128074645996, -1.446171760559082], + [-2.525906801223755, 1.150577425956726], + [-6.216508388519287, 3.3932831287384033], + [-2.2714836597442627, 0.04177313670516014], + [1.89316725730896, -7.740904808044434], + [-0.23444032669067383, 9.82433795928955], + [2.364659309387207, -4.4471635818481445], + [5.206295490264893, 7.367049217224121], + [-5.654494762420654, 8.70569896697998], + [6.779360294342041, -1.4351978302001953], + [-5.211611270904541, -3.116034507751465], + [7.562977313995361, -1.8852381706237793], + [-5.79710054397583, 8.117100715637207], + [-3.866684913635254, -1.3367828130722046], + [-2.658446788787842, 2.717130184173584], + [-2.765531301498413, -0.7134970426559448], + [2.6595733165740967, -5.345414161682129], + [-6.191254615783691, 7.314151763916016], + [-5.927493095397949, 7.3516693115234375], + [0.9887327551841736, -6.707584381103516], + [-4.995010852813721, 3.37624192237854], + [-5.293441295623779, 6.396504878997803], + [-3.855412244796753, 6.286176681518555], + [-6.576999664306641, 8.314788818359375], + [-5.810678958892822, -0.49667441844940186], + [-5.709686756134033, -0.7372591495513916], + [-5.605550289154053, -2.9640135765075684], + [-4.957854270935059, 1.2227330207824707], + [-5.277634143829346, 2.253830909729004], + [-7.414568901062012, -1.6241267919540405], + [-4.4928364753723145, -4.11319637298584], + [2.9032132625579834, -4.391114234924316], + [2.574737548828125, 0.7996649742126465], + [2.684314489364624, -4.15447998046875], + [-6.658060550689697, 8.319395065307617], + [0.2679821848869324, 9.529630661010742], + [-2.056749105453491, 2.5387017726898193], + [-5.431042671203613, 5.634001731872559], + [8.2160062789917, -2.3429276943206787], + [-2.896062135696411, 2.56097149848938], + [1.8833975791931152, -6.625400066375732], + [-2.3158299922943115, 2.6519217491149902], + [-0.4987789988517761, 10.163118362426758], + [-4.320108413696289, -1.8020386695861816], + [-3.549487352371216, 3.8129851818084717], + [-0.2941526770591736, 9.14774227142334], + [2.612882375717163, -6.951302528381348], + [-0.24189072847366333, 10.183887481689453], + [-2.7411248683929443, 0.8586970567703247], + [1.4567586183547974, -6.583202838897705], + [-6.138707637786865, 3.2122042179107666], + [-4.601226329803467, -2.2566745281219482], + [-2.9790914058685303, 3.3312134742736816], + [1.608616590499878, -5.567516326904297], + [-0.10396667569875717, -1.481756567955017], + [5.493213176727295, -0.9855663776397705], + [1.6966816186904907, -7.612184524536133], + [-0.04198349267244339, 9.949334144592285], + [2.344304323196411, 0.7719899415969849], + [-0.3098307251930237, 10.294149398803711], + [4.659567356109619, -0.9554584622383118], + [-2.6849477291107178, -2.646078586578369], + [2.995490789413452, -4.503003120422363], + [-3.3585667610168457, 3.466790199279785], + [-4.494300365447998, -1.0015699863433838], + [2.8360531330108643, -4.499373435974121], + [-4.82676887512207, 3.8670120239257812], + [-4.142510414123535, -2.2875516414642334], + [-5.00337553024292, -3.0743472576141357], + [-6.49655818939209, -1.946750283241272], + [-4.848138332366943, -2.9010009765625], + [3.3691458702087402, 6.713445663452148], + [-4.416717529296875, -1.1772769689559937], + [-5.555588245391846, -3.4510929584503174], + [6.120438098907471, -1.3452430963516235], + [-4.381556034088135, -2.6218793392181396], + [-6.599687576293945, 8.220682144165039], + [2.521054744720459, -4.606656074523926], + [2.315286159515381, -6.451312065124512], + [-2.3401811122894287, 1.2157294750213623], + [2.324953317642212, -6.132689476013184], + [-2.8641860485076904, 0.4989228844642639], + [0.3227325975894928, -2.834521532058716], + [7.791328430175781, -3.357434034347534], + [-5.448152542114258, -5.744968891143799], + [-2.253897190093994, 5.9975481033325195], + [-0.34589940309524536, 10.157060623168945], + [3.1862826347351074, -4.774085521697998], + [-0.17501193284988403, -1.476362705230713], + [1.0497411489486694, 0.4414801597595215], + [-6.355898380279541, 0.8242315053939819], + [2.1461355686187744, -3.637425422668457], + [2.432873010635376, 1.2288026809692383], + [9.305200576782227, -2.614933967590332], + [-0.29351067543029785, 9.981927871704102], + [-6.304108142852783, 5.055961608886719], + [-2.2085132598876953, 0.8309925198554993], + [7.276725769042969, -2.2924673557281494], + [1.5436052083969116, -6.276092052459717], + [7.9311842918396, -1.895408034324646], + [3.156292676925659, -5.050302028656006], + [-7.7562689781188965, -1.7443143129348755], + [5.785985469818115, -1.3284298181533813], + [9.191410064697266, -2.549593210220337], + [8.04575252532959, -2.6973142623901367], + [1.1522562503814697, -4.3616251945495605], + [-0.23429083824157715, 9.693138122558594], + [-4.0124616622924805, -1.2109297513961792], + [-7.649015426635742, -1.4723396301269531], + [-0.44768160581588745, 9.879927635192871], + [1.053213357925415, -1.1708292961120605], + [3.181720733642578, -4.785360336303711], + [-2.4721667766571045, -0.6199720501899719], + [-5.146897315979004, -0.549569845199585], + [1.6306015253067017, 5.087681293487549], + [-4.370314121246338, 0.2790156602859497], + [-5.4789910316467285, 2.579402208328247], + [-4.379275321960449, 4.718564987182617], + [8.95693302154541, -2.6744368076324463], + [1.9988651275634766, 5.0136590003967285], + [-0.3146924376487732, 10.813222885131836], + [-2.5435147285461426, 6.69246244430542], + [-4.114955425262451, -2.816533088684082], + [2.2458298206329346, 0.8316824436187744], + [6.447144031524658, -1.5208373069763184], + [-4.510254859924316, 3.2543089389801025], + [-5.822653293609619, -3.629988431930542], + [0.29653263092041016, -0.0041879452764987946], + [-4.057154178619385, -1.1667324304580688], + [-5.262201309204102, 7.6531877517700195], + [0.9919832348823547, -5.9270524978637695], + [-4.080652236938477, 5.599383354187012], + [-5.579160213470459, 5.781768798828125], + [3.147352933883667, -4.71258544921875], + [6.105234622955322, 7.773792743682861], + [-5.501904010772705, 2.524831771850586], + [-1.3533880710601807, -0.3121670186519623], + [-3.3586008548736572, 4.679623603820801], + [-0.8907502293586731, 2.5075836181640625], + [2.698692560195923, -4.287929058074951], + [-2.7763025760650635, -4.589540004730225], + [2.957876443862915, -4.876346111297607], + [-4.542128562927246, -2.317842960357666], + [-4.961836338043213, -2.75937557220459], + [-0.3990890383720398, 9.363822937011719], + [0.659442126750946, -0.14913150668144226], + [-0.15274685621261597, 10.03213882446289], + [-2.688586473464966, 3.2320845127105713], + [-4.43390417098999, 5.440138339996338], + [-5.704188823699951, -2.378429412841797], + [-5.45068883895874, -1.6711198091506958], + [-6.126500129699707, 6.757909297943115], + [2.7406489849090576, -3.9067461490631104], + [-4.803188800811768, 7.247532367706299], + [-2.3941943645477295, 1.3583190441131592], + [4.5099639892578125, -3.110168218612671], + [-7.542670726776123, 9.269743919372559], + [-2.3386242389678955, 0.7735299468040466], + [1.97867751121521, -4.355593681335449], + [-6.485869884490967, 7.753777503967285], + [3.152907371520996, -4.96203088760376], + [-0.13676899671554565, 9.749698638916016], + [0.40344661474227905, 9.776819229125977], + [2.650517702102661, -3.873338460922241], + [-0.07375670224428177, 9.69460391998291], + [7.521061420440674, -1.8156766891479492], + [-2.2861454486846924, 0.8471200466156006], + [4.917347431182861, 6.741874694824219], + [-3.867431879043579, -3.0268075466156006], + [2.0727007389068604, -6.854480743408203], + [-0.6141740083694458, -0.5654443502426147], + [-2.151475191116333, -1.2652473449707031], + [-2.4666788578033447, 1.8088549375534058], + [-4.362391948699951, -1.4597760438919067], + [7.905226707458496, -2.257737398147583], + [8.850064277648926, -2.5662615299224854], + [-2.749319076538086, 4.620384693145752], + [-0.49278122186660767, 11.257953643798828], + [3.1200263500213623, -5.1825761795043945], + [1.5537900924682617, 5.149007797241211], + [-5.154122352600098, 5.656185150146484], + [-2.3615381717681885, 5.679823398590088], + [-0.5390071272850037, 11.129746437072754], + [-2.183243989944458, 2.743401288986206], + [-0.08625394850969315, 9.485965728759766], + [-4.178821086883545, 7.26370096206665], + [3.0661568641662598, -4.8157124519348145], + [-7.254543781280518, -1.9013303518295288], + [-1.3185532093048096, -2.4908759593963623], + [2.2811315059661865, 1.416857361793518], + [-4.964460849761963, -0.31551802158355713], + [-5.803575038909912, -2.8383495807647705], + [4.7119269371032715, -0.9791644215583801], + [0.001803569495677948, -1.3651654720306396], + [8.483046531677246, -2.3470458984375], + [-2.756504535675049, -4.569285869598389], + [-2.413555383682251, -2.4349021911621094], + [1.9430902004241943, 0.9610837697982788], + [9.01928997039795, -2.6649913787841797], + [-4.893002986907959, -3.3266098499298096], + [3.027858018875122, -4.560689926147461], + [-2.0844175815582275, -0.3850153088569641], + [1.7211904525756836, -2.8918678760528564], + [-3.4739320278167725, -3.1421992778778076], + [3.1341166496276855, -4.692426681518555], + [3.077768564224243, -2.3788187503814697], + [1.018273115158081, -3.910121440887451], + [-4.382186412811279, -2.2320103645324707], + [6.525619983673096, -4.061219215393066], + [-5.915350437164307, -2.5790631771087646], + [-7.461653232574463, -0.49885475635528564], + [1.815563678741455, 5.230855941772461], + [-2.1968271732330322, -1.7536567449569702], + [-4.2533392906188965, -1.4867147207260132], + [-3.769200563430786, -3.273704767227173], + [3.16721248626709, -4.977490425109863], + [-2.171143054962158, -0.13559311628341675], + [-3.614711284637451, 3.575510263442993], + [0.8020512461662292, -0.1488059163093567], + [-8.533147811889648, -0.6447017192840576], + [-6.5752482414245605, 8.254671096801758], + [-5.795868396759033, 0.11568319797515869], + [2.981401205062866, -4.649075031280518], + [6.811287879943848, -3.0374982357025146], + [1.8696210384368896, -7.373496055603027], + [3.239105463027954, 5.885400772094727], + [-5.39103364944458, 3.684359312057495], + [-2.1644365787506104, 0.24700483679771423], + [-5.115714073181152, 7.7335205078125], + [-0.08722890168428421, 8.936323165893555], + [2.2413251399993896, -4.151721954345703], + [-5.226289749145508, -3.070552110671997], + [-4.408731460571289, -2.7387332916259766], + [-3.206756353378296, 5.7109551429748535], + [-7.430433750152588, 8.946846008300781], + [-6.550195217132568, -1.8775635957717896], + [-3.8748152256011963, -1.3108224868774414], + [1.5180927515029907, -6.240049839019775], + [-0.31999605894088745, -0.7662818431854248], + [-5.1842145919799805, -3.4259374141693115], + [6.211849689483643, -1.274789810180664], + [1.2429211139678955, 1.01775324344635], + [2.0203874111175537, -9.952072143554688], + [2.3756611347198486, 0.97962486743927], + [4.244773864746094, 6.372272968292236], + [5.395658016204834, -3.0185153484344482], + [3.2250046730041504, -3.8511722087860107], + [6.079594135284424, 7.612865924835205], + [3.072840690612793, -4.618412494659424], + [-4.275461196899414, 4.484505653381348], + [-2.4339592456817627, 1.0787612199783325], + [-0.9466539621353149, 7.814349174499512], + [-5.681407451629639, -1.6381438970565796], + [8.461518287658691, -2.3159542083740234], + [-7.71226167678833, -2.04880690574646], + [0.41038191318511963, -5.991296768188477], + [6.149197578430176, -1.0324777364730835], + [-7.187642574310303, 8.728309631347656], + [-0.2604459524154663, 9.495279312133789], + [-4.72070837020874, -1.1625466346740723], + [1.9425642490386963, 0.5627594590187073], + [-2.5390634536743164, 1.7728912830352783], + [-3.332425355911255, -4.656749248504639], + [-0.17449289560317993, 9.3887939453125], + [3.2825915813446045, -4.969485759735107], + [-0.05448932200670242, 5.904594898223877], + [3.032883405685425, -4.7401323318481445], + [3.065129041671753, -6.411866188049316], + [-4.825667858123779, 6.450071334838867], + [-3.1453449726104736, 5.3784260749816895], + [-6.108595371246338, 7.503759860992432], + [-0.9298487305641174, -0.9952584505081177], + [-6.445774555206299, 1.816054344177246], + [-1.579642415046692, 1.292820930480957], + [-5.562928676605225, -3.616596221923828], + [-3.5989742279052734, 5.922100067138672], + [-2.763735771179199, 0.6324697732925415], + [2.1757075786590576, 5.78878116607666], + [-5.118671894073486, 6.564206123352051], + [-0.12176818400621414, 9.987099647521973], + [-2.7646329402923584, 2.278017044067383], + [2.1088740825653076, -9.884201049804688], + [-6.65731954574585, -1.7005850076675415], + [-0.20697247982025146, 10.247716903686523], + [-7.00897741317749, -0.12885427474975586], + [-5.452188968658447, 4.925289154052734], + [-4.072386741638184, -1.6328802108764648], + [-4.790989398956299, -2.795362949371338], + [1.854083776473999, 0.1492847204208374], + [1.2982136011123657, 0.6134194135665894], + [-3.9893362522125244, -3.673265218734741], + [1.9607245922088623, 3.210522174835205], + [0.2428574562072754, -1.2920476198196411], + [-2.5924994945526123, 1.6529889106750488], + [-6.637661457061768, 8.256656646728516], + [-3.2765605449676514, -0.27690428495407104], + [2.6026782989501953, 0.6717406511306763], + [0.4122851490974426, 5.236420631408691], + [-4.646020889282227, -2.900167465209961], + [6.83751106262207, -1.8316127061843872], + [6.173672199249268, -2.6887261867523193], + [2.2961084842681885, -7.920046806335449], + [-6.332169532775879, 7.602234840393066], + [-2.034514904022217, -1.9087772369384766], + [10.066069602966309, -2.7867040634155273], + [2.6416451930999756, 0.8120450973510742], + [3.528726816177368, 6.623115539550781], + [-5.55924654006958, 8.14989185333252], + [2.1610119342803955, -10.237180709838867], + [-0.5315563678741455, -0.5470801591873169], + [1.0984103679656982, -5.98370361328125], + [-4.0940327644348145, -1.4986830949783325], + [-2.35770583152771, 0.4122927188873291], + [-4.705252170562744, -4.053946495056152], + [-0.21435612440109253, 9.155288696289062], + [-2.2594053745269775, -1.567949652671814], + [-2.2420401573181152, 1.3046842813491821], + [-0.021550782024860382, 8.513460159301758], + [4.258706569671631, 0.3682551085948944], + [-0.3053220510482788, 9.464518547058105], + [-6.799644470214844, -2.0941450595855713], + [6.917665958404541, -1.507448673248291], + [-0.2986149191856384, 9.972984313964844], + [-2.7157318592071533, 2.4837148189544678], + [-1.6368305683135986, -3.16941237449646], + [7.686976909637451, -2.1777868270874023], + [7.707345485687256, -1.718340277671814], + [-6.4453816413879395, 0.020259972661733627], + [-0.21212220191955566, 10.263444900512695], + [-7.087381839752197, 2.931624174118042], + [3.318767547607422, 1.2429038286209106], + [-9.153672218322754, -1.2044436931610107], + [-5.4036946296691895, -2.418757200241089], + [2.8577897548675537, -4.135988235473633], + [2.6353585720062256, 5.461999893188477], + [-3.3544678688049316, -0.3449445366859436], + [-5.900320053100586, 8.492806434631348], + [8.1522798538208, -2.0596392154693604], + [9.006936073303223, -2.666480302810669], + [-7.36491060256958, -1.56629478931427], + [-6.125275135040283, 5.90220832824707], + [-0.3632051348686218, 9.142187118530273], + [1.7330275774002075, 0.781067967414856], + [2.208735704421997, 5.628620147705078], + [-4.685645580291748, 7.63563346862793], + [1.2649855613708496, 0.010607045143842697], + [1.4249900579452515, -7.700704574584961], + [4.553410053253174, -1.3438403606414795], + [-0.016363032162189484, 9.825826644897461], + [1.0713374614715576, -7.514147758483887], + [-4.181766986846924, -1.1651653051376343], + [-5.118924617767334, -2.205026626586914], + [0.2776586413383484, 1.9530497789382935], + [-4.363231182098389, 0.47811877727508545], + [-3.3923215866088867, 5.591334819793701], + [8.479376792907715, -2.4302079677581787], + [-0.6504085659980774, -0.696356475353241], + [6.32496452331543, -2.4894614219665527], + [-5.953659534454346, 4.693512916564941], + [2.905595064163208, -4.639646530151367], + [4.172410011291504, -3.9731199741363525], + [-0.3510914444923401, 9.962211608886719], + [-4.743057727813721, 4.3816728591918945], + [2.0496723651885986, -6.7353010177612305], + [-4.354384422302246, -3.0032169818878174], + [3.899993658065796, 6.349562644958496], + [0.009800396859645844, -0.37857785820961], + [-4.0844950675964355, 0.39205288887023926], + [-2.610865354537964, -4.600841522216797], + [6.154372692108154, -2.858715772628784], + [0.5357316732406616, 0.5858442783355713], + [8.048871994018555, -2.7089531421661377], + [-5.7246317863464355, -3.8800036907196045], + [2.076399087905884, -4.63630485534668], + [-6.013576030731201, -1.502683401107788], + [-4.7289958000183105, -4.009681701660156], + [-4.452800273895264, -2.8572542667388916], + [3.2030537128448486, -7.35385799407959], + [1.847536563873291, 0.8716575503349304], + [-1.6249146461486816, -0.5891704559326172], + [2.9010894298553467, -4.384007453918457], + [3.503159284591675, -6.581536293029785], + [-2.602322578430176, 2.306061267852783], + [-0.595599353313446, -1.4191057682037354], + [-4.712568283081055, -0.7785455584526062], + [-7.6423115730285645, -1.5799163579940796], + [-0.39290058612823486, 11.351634979248047], + [-6.786727428436279, -1.0262778997421265], + [1.4651387929916382, -7.059842109680176], + [-1.196205735206604, -2.365560293197632], + [-7.924068927764893, -0.7599256038665771], + [0.44516319036483765, -0.8505934476852417], + [-4.500820159912109, -3.4633448123931885], + [-4.273781776428223, -1.5674484968185425], + [1.665042519569397, 5.184104919433594], + [0.11204319447278976, -0.9810729622840881], + [-4.999851703643799, 1.8518561124801636], + [2.626648187637329, -5.054008483886719], + [-2.7111964225769043, -2.279395818710327], + [-2.1130783557891846, -2.3539721965789795], + [3.0636699199676514, -4.615386962890625], + [3.115736246109009, -4.676844596862793], + [1.218787670135498, -7.0288896560668945], + [2.7772257328033447, -6.263525009155273], + [-6.490062713623047, -1.8039542436599731], + [3.2575571537017822, -4.873204231262207], + [5.971005916595459, -1.0694748163223267], + [-0.7457818984985352, 5.4394636154174805], + [-0.3582456707954407, 10.830817222595215], + [-0.8217105865478516, 9.087583541870117], + [-5.021631717681885, -2.1657426357269287], + [6.360751152038574, -2.328594446182251], + [9.102328300476074, -2.6418840885162354], + [3.2502315044403076, -4.863819122314453], + [-6.065537929534912, 7.127686500549316], + [0.2213330864906311, -1.0115431547164917], + [-4.525650978088379, -2.802215337753296], + [-3.726273775100708, 5.718819618225098], + [3.0781149864196777, -4.9280619621276855], + [3.217554807662964, -0.5023466944694519], + [-3.349254846572876, -3.5521352291107178], + [-4.472916603088379, -2.464679002761841], + [8.14271068572998, -2.4827449321746826], + [-6.878072261810303, 8.452569961547852], + [3.074920415878296, -6.023886680603027], + [2.5131189823150635, 0.6442793607711792], + [-0.3255370259284973, 9.520942687988281], + [-2.107083320617676, 5.866199016571045], + [-3.636741876602173, 3.611069917678833], + [6.443716526031494, -5.155061721801758], + [1.818525791168213, 5.398557186126709], + [-6.275414943695068, -2.72393536567688], + [-0.9764903783798218, -1.0107910633087158], + [2.8435938358306885, -7.139424800872803], + [2.9530069828033447, -4.62933349609375], + [-1.4214458465576172, 9.665251731872559], + [-2.4736337661743164, 1.7871503829956055], + [5.705734729766846, -1.1772314310073853], + [-5.469720840454102, -3.8900256156921387], + [1.111872911453247, -5.9160051345825195], + [-3.6164309978485107, -3.0141289234161377], + [-2.573087453842163, -3.4628746509552], + [7.88055944442749, -1.8447158336639404], + [3.1043949127197266, -4.872749328613281], + [5.464908123016357, -1.0741404294967651], + [3.0301036834716797, -4.685091972351074], + [-4.144578456878662, -0.871366024017334], + [2.7854678630828857, -4.272861003875732], + [-2.8983654975891113, 5.578404903411865], + [-2.436917781829834, 0.4093213677406311], + [-4.622460842132568, -3.0851597785949707], + [8.011763572692871, -2.6915535926818848], + [1.841737151145935, -3.2484734058380127], + [-2.8054721355438232, 2.0603187084198], + [-5.1761155128479, -3.176753520965576], + [2.3850507736206055, 5.27075719833374], + [-8.088081359863281, -1.422761082649231], + [-2.711428642272949, 2.3490219116210938], + [0.14463073015213013, 9.792312622070312], + [3.080151319503784, 6.483449935913086], + [5.976940631866455, -3.0844945907592773], + [6.261420249938965, -1.388056993484497], + [7.786222457885742, -1.413574457168579], + [3.0267810821533203, -4.850321292877197], + [3.3492233753204346, -5.009946823120117], + [1.3420265913009644, 0.9424106478691101], + [-2.407209634780884, 1.7986570596694946], + [-0.2452559471130371, -1.3733603954315186], + [3.2463855743408203, -5.234116554260254], + [-0.2206912636756897, -0.6040298938751221], + [-6.138632297515869, 3.866750955581665], + [-3.1184685230255127, -3.9985811710357666], + [-4.201366901397705, -3.1365277767181396], + [3.4868175983428955, -5.548434734344482], + [0.24020034074783325, 10.187349319458008], + [-7.857950687408447, 9.582131385803223], + [5.0890679359436035, -1.0581539869308472], + [7.958608150482178, -2.0917556285858154], + [2.4462146759033203, -3.6591784954071045], + [-0.183152973651886, 10.29922866821289], + [-0.23504364490509033, 8.950931549072266], + [0.4721006751060486, -5.460751056671143], + [-2.3293066024780273, 0.7463754415512085], + [-6.224730014801025, 6.280324459075928], + [-4.333372592926025, -4.037901401519775], + [0.8452133536338806, 9.565024375915527], + [0.8785353302955627, -6.350619316101074], + [7.855879306793213, -1.9095301628112793], + [-2.5769312381744385, 1.3115442991256714], + [-5.48487663269043, 2.5435729026794434], + [-3.856005907058716, -1.2707902193069458], + [-4.821944713592529, -4.42390775680542], + [-0.4169479012489319, 9.35659408569336], + [10.586015701293945, -2.922771692276001], + [-6.047646999359131, 7.1118316650390625], + [2.892592668533325, 6.501502990722656], + [-5.152310371398926, -2.118842363357544], + [-2.27034854888916, 0.9321725368499756], + [2.802884817123413, -4.250408172607422], + [3.295884132385254, -7.107082843780518], + [-3.560152292251587, -1.8567250967025757], + [-4.139217853546143, 6.249142646789551], + [-2.0764825344085693, 2.3064358234405518], + [-3.946404218673706, -0.1453724503517151], + [9.03162670135498, -2.558400869369507], + [-2.241964817047119, -0.7645996809005737], + [1.7667902708053589, 5.096640586853027], + [-3.8106400966644287, 5.55194091796875], + [-4.953711986541748, 7.272488594055176], + [2.544393539428711, 6.443665027618408], + [-5.418600559234619, 7.844353675842285], + [-6.282623767852783, 7.832938194274902], + [-7.036339282989502, 8.435707092285156], + [-8.753183364868164, 10.738800048828125], + [3.03894305229187, -4.5683698654174805], + [-5.829779148101807, -2.631828546524048], + [-0.30395233631134033, 9.864702224731445], + [-3.4667563438415527, 4.784661293029785], + [-2.0210120677948, -2.0713982582092285], + [-4.499227046966553, -2.3501474857330322], + [-2.339003562927246, 1.7546030282974243], + [-4.765214443206787, -3.225860595703125], + [3.187121629714966, -4.868091583251953], + [3.2155697345733643, -4.847805023193359], + [6.915847301483154, -1.7071728706359863], + [2.3360977172851562, 5.377020835876465], + [-4.741076469421387, 4.034845352172852], + [1.3061063289642334, -0.08224104344844818], + [-2.5358495712280273, 1.852664828300476], + [2.510284423828125, -4.140069961547852], + [-3.5787456035614014, -2.20961332321167], + [2.5804049968719482, -3.9079880714416504], + [-2.0010533332824707, 5.329946517944336], + [0.23186904191970825, 9.750510215759277], + [-1.5542628765106201, -0.6075122356414795], + [-4.9117865562438965, -2.8573713302612305], + [-2.0982491970062256, 2.7332000732421875], + [-2.345777750015259, -0.9150103330612183], + [1.4100935459136963, 5.681833267211914], + [-0.3752085566520691, 11.437236785888672], + [-7.048984050750732, 8.670493125915527], + [5.969305515289307, -1.9280959367752075], + [-3.4756920337677, -2.6090214252471924], + [-5.006409168243408, 2.1159207820892334], + [6.947517395019531, -2.8303239345550537], + [1.7808213233947754, -5.387948036193848], + [-4.654090881347656, -2.9230263233184814], + [8.296226501464844, -2.2206904888153076], + [-5.445027828216553, 5.349736213684082], + [-5.862354755401611, -1.8606992959976196], + [-1.0141361951828003, 9.821798324584961], + [-2.5037002563476562, 2.1231067180633545], + [-9.304197311401367, -1.1183234453201294], + [-3.0188357830047607, -1.2014249563217163], + [-4.104285717010498, -3.3273520469665527], + [-5.684794902801514, -3.0110044479370117], + [2.2163007259368896, 6.012877941131592], + [3.107633352279663, -4.6560564041137695], + [-3.07327938079834, -2.296444892883301], + [1.7040646076202393, -7.303872108459473], + [7.385467052459717, -1.813801646232605], + [-5.639646053314209, -3.0645172595977783], + [-4.6869282722473145, -1.7965751886367798], + [-7.805957794189453, -1.8480926752090454], + [-2.0643768310546875, 2.536470413208008], + [3.138380289077759, -4.94731330871582], + [-2.882084608078003, 2.5989882946014404], + [-3.526402711868286, -2.406798839569092], + [-5.418145179748535, -1.4245916604995728], + [2.920222043991089, -4.577964782714844], + [1.3043222427368164, -7.919659614562988], + [-3.152360677719116, -2.2787959575653076], + [2.531968832015991, 5.822405815124512], + [-6.067348480224609, 8.618935585021973], + [0.8840473890304565, -6.633249759674072], + [-4.365331172943115, -2.6974804401397705], + [-2.220351219177246, 1.092768907546997], + [2.3925974369049072, -7.51923942565918], + [5.659035682678223, 7.164214134216309], + [-1.4831912517547607, 1.341745138168335], + [1.8345428705215454, -4.094473838806152], + [-3.35363507270813, 6.751730442047119], + [-4.358622074127197, 3.173264741897583], + [9.07243824005127, -2.5328612327575684], + [-2.5208580493927, 2.00620174407959], + [9.158028602600098, -2.5622353553771973], + [2.8418896198272705, -4.816270351409912], + [3.040759325027466, -4.561676025390625], + [-2.623988628387451, 2.466423511505127], + [-4.038321495056152, 0.22940370440483093], + [0.0586051270365715, 9.685722351074219], + [-4.824016094207764, -2.9857256412506104], + [1.1242883205413818, 4.014815807342529], + [8.610459327697754, -2.539669990539551], + [-2.726639986038208, -3.962290048599243], + [-5.161945819854736, -4.163010120391846], + [-5.204919815063477, 7.143764495849609], + [2.0917470455169678, -8.895776748657227], + [1.7964558601379395, -6.476141929626465], + [-4.087443828582764, -2.8823235034942627], + [-0.6119051575660706, 11.558464050292969], + [-5.624786853790283, 5.255783557891846], + [1.6196351051330566, 5.114492416381836], + [-4.803211212158203, -6.876217842102051], + [8.698746681213379, -2.459853410720825], + [7.144676208496094, -1.6936380863189697], + [-4.982033729553223, -1.9325538873672485], + [-4.574513912200928, -5.337686538696289], + [4.815647125244141, -1.0655009746551514], + [-5.983299255371094, -2.7066810131073], + [0.8142993450164795, -0.38338571786880493], + [-0.2813710570335388, 10.427055358886719], + [6.273268699645996, -1.8467901945114136], + [3.937361478805542, 6.123342990875244], + [-4.61942720413208, -2.0146796703338623], + [-4.735532283782959, -2.949394464492798], + [-5.9536662101745605, 4.564294815063477], + [-5.912228107452393, 7.655014991760254], + [-3.590287208557129, -1.6558071374893188], + [-1.8675143718719482, 1.430967092514038], + [7.627341270446777, -1.9937351942062378], + [-2.458653450012207, 1.9202723503112793], + [0.27430689334869385, 9.415388107299805], + [0.03061728924512863, 8.295018196105957], + [-3.0464420318603516, 2.5975279808044434], + [2.768404245376587, 1.0757187604904175], + [0.4814720153808594, 0.2668003737926483], + [1.504650592803955, -3.0199053287506104], + [1.6136614084243774, 0.34943830966949463], + [-6.843315124511719, 8.465351104736328], + [-5.475146770477295, -3.8351144790649414], + [-6.626724720001221, -1.6038131713867188], + [-5.43836784362793, 7.1706342697143555], + [-0.2606983780860901, -3.7293546199798584], + [4.996824741363525, 7.145249366760254], + [0.1103515550494194, 10.220401763916016], + [-0.5362295508384705, 11.79288101196289], + [1.2864784002304077, -5.955411911010742], + [-2.2447221279144287, 0.661339521408081], + [9.548600196838379, -2.6196908950805664], + [-3.747016668319702, 5.915300369262695], + [-0.23066824674606323, 9.275800704956055], + [2.1109213829040527, 5.760795593261719], + [-0.3051519989967346, -0.4438512921333313], + [1.978257656097412, -5.745685577392578], + [5.707151889801025, 7.331804275512695], + [-0.2081483006477356, 10.528361320495605], + [3.002246856689453, -4.51253604888916], + [0.7246823906898499, -6.539470195770264], + [-4.746948719024658, -3.1047842502593994], + [7.128372669219971, -2.357041120529175], + [-2.863341808319092, 3.0650529861450195], + [5.884101390838623, -1.2514350414276123], + [-5.201700210571289, -1.625182032585144], + [1.6243999004364014, -6.887728214263916], + [-2.3791520595550537, 1.9096635580062866], + [7.935882091522217, -2.1512272357940674], + [1.3296422958374023, 5.175547122955322], + [-2.7036867141723633, 6.833858489990234], + [-4.789499759674072, -1.173532485961914], + [8.772801399230957, -2.7838990688323975], + [-2.8720831871032715, 3.139676094055176], + [-0.9627365469932556, 9.442732810974121], + [2.9538702964782715, -6.038776874542236], + [-2.474660634994507, -0.24264299869537354], + [3.0365469455718994, -4.561953544616699], + [-3.844219446182251, -2.357085943222046], + [2.9384186267852783, -4.428951740264893], + [-2.463336944580078, 1.7336738109588623], + [8.335930824279785, -2.4168541431427], + [2.767122745513916, 0.9113128781318665], + [-0.21889984607696533, 9.0477294921875], + [-5.4457526206970215, 0.05158143863081932], + [-0.1570780873298645, 9.424827575683594], + [2.460254192352295, -7.451794624328613], + [-3.0714662075042725, -2.0129034519195557], + [-1.9789949655532837, 2.6618683338165283], + [-8.610058784484863, -0.9115887880325317], + [0.6738535761833191, -0.43437159061431885], + [-6.624155521392822, -2.5629096031188965], + [-7.816461086273193, -1.003720998764038], + [0.536144495010376, -0.37225577235221863], + [1.6539673805236816, 5.196858882904053], + [-2.6542017459869385, 2.003075361251831], + [-5.119887828826904, 2.6640608310699463], + [-5.8298020362854, 6.021506309509277], + [2.082733392715454, -3.1799099445343018], + [-0.09742219001054764, 2.639075756072998], + [-0.3745582699775696, 10.382545471191406], + [-4.559380054473877, -2.1143367290496826], + [-6.246553897857666, -1.9491806030273438], + [2.747697353363037, -5.696682453155518], + [-4.300517559051514, -3.5823676586151123], + [9.945436477661133, -2.743250608444214], + [-8.145034790039062, -1.0758734941482544], + [2.32616925239563, -3.438917875289917], + [5.583115100860596, -1.435875654220581], + [4.116897106170654, -2.9638566970825195], + [-2.378563642501831, 2.086843252182007], + [-9.651816368103027, -0.9750415086746216], + [-4.168097972869873, -0.4021826982498169], + [-4.343652248382568, -4.207065105438232], + [-5.400675296783447, -3.170837879180908], + [-5.227623462677002, 1.455373764038086], + [3.0910451412200928, -4.662495136260986], + [7.083247184753418, -1.6664398908615112], + [-5.902242660522461, -2.9479753971099854], + [-5.085024356842041, -2.138906240463257], + [2.78308367729187, 6.419037342071533], + [-4.729156970977783, -2.817354440689087], + [-4.560725688934326, 1.938630223274231], + [-5.24961519241333, -4.03998327255249], + [-2.0876049995422363, 0.4368072748184204], + [3.005770683288574, -4.65114688873291], + [-5.283629894256592, 7.153060436248779], + [2.7172963619232178, -6.567587852478027], + [-5.255892276763916, -3.3394248485565186], + [-2.1366543769836426, 5.423989295959473], + [-5.362227916717529, 0.9617699384689331], + [2.2928578853607178, -3.6951992511749268], + [-5.826941013336182, -0.038790348917245865], + [1.6701099872589111, 0.8210705518722534], + [-3.8024518489837646, -2.5196828842163086], + [5.694968223571777, 7.788242816925049], + [-6.949601650238037, 8.544838905334473], + [-2.683682680130005, 5.5024518966674805], + [-5.095006942749023, -3.7455546855926514], + [1.6944186687469482, 5.397444248199463], + [-4.6546244621276855, -3.7183423042297363], + [-0.21762734651565552, 10.320796966552734], + [2.2016775608062744, 1.3351212739944458], + [-5.7556939125061035, 4.074631690979004], + [3.1068389415740967, -4.653773784637451], + [-5.9245686531066895, 7.720231533050537], + [-3.796363115310669, 5.965357780456543], + [-4.431276321411133, -2.7683675289154053], + [-5.132416725158691, -3.762707471847534], + [-1.1103246212005615, 8.5128173828125], + [1.5494495630264282, 4.914586067199707], + [-4.437685489654541, -3.689659595489502], + [-2.914275884628296, 4.577861785888672], + [6.556626796722412, -2.9355685710906982], + [-6.213592052459717, 4.240351676940918], + [-7.939754009246826, -0.29162073135375977], + [5.367293834686279, -1.0875868797302246], + [-4.093881130218506, -1.2222384214401245], + [-5.1278395652771, 0.7362287640571594], + [-5.101035118103027, -3.6601157188415527], + [-3.546832799911499, 0.37486839294433594], + [-6.653930187225342, -2.039259433746338], + [2.272908926010132, 5.421905517578125], + [-5.21829080581665, 5.900698661804199], + [7.634396553039551, -3.679152727127075], + [-2.2407870292663574, 2.1163644790649414], + [7.246683597564697, -1.9427438974380493], + [2.350780487060547, -4.635036468505859], + [-6.0179619789123535, -2.584254026412964], + [4.701575756072998, -2.264047861099243], + [7.0877556800842285, -2.1144983768463135], + [9.283011436462402, -2.6025164127349854], + [-5.261607646942139, 1.48129141330719], + [-5.124461650848389, -1.5197616815567017], + [0.7574674487113953, 0.716150164604187], + [3.668776512145996, 6.853180408477783], + [6.095061779022217, -2.672168254852295], + [-1.2765003442764282, 5.9966888427734375], + [0.6596718430519104, -0.0024918802082538605], + [1.113008737564087, -5.375099182128906], + [-4.3364033699035645, 4.333871841430664], + [2.6349031925201416, -4.314975738525391], + [-5.635043144226074, 6.9096856117248535], + [7.867397308349609, -3.232029914855957], + [-4.56621789932251, -0.8386273384094238], + [-4.897151947021484, 3.6117894649505615], + [4.1478166580200195, -2.7461535930633545], + [0.9437466263771057, 5.264392852783203], + [-2.8809406757354736, -4.521854877471924], + [3.0936439037323, -4.640613555908203], + [-6.5411810874938965, -3.2607834339141846], + [2.943194627761841, 1.035477876663208], + [-4.685771465301514, -3.496842861175537], + [3.019430160522461, -4.545722007751465], + [3.9635050296783447, 6.737794399261475], + [-6.371966361999512, -2.251946449279785], + [6.191350936889648, -3.502537488937378], + [1.8318902254104614, -5.272333145141602], + [-0.6809345483779907, -0.8565024137496948], + [2.2485227584838867, -5.246331214904785], + [-3.7728519439697266, -1.5959182977676392], + [7.619334697723389, -1.6421473026275635], + [-4.774180889129639, -2.388918399810791], + [-3.72086501121521, 4.309511184692383], + [-0.25380730628967285, -0.748232364654541], + [-1.8134875297546387, 2.4260170459747314], + [-2.547840118408203, 2.3962016105651855], + [-3.7918484210968018, 3.673417806625366], + [-2.0261552333831787, 2.340421438217163], + [8.949419975280762, -2.3248980045318604], + [1.0589237213134766, -0.3114370107650757], + [-4.539846897125244, -2.876683473587036], + [-0.1642685830593109, 0.1549718827009201], + [-5.968786716461182, 6.461023807525635], + [-4.2309393882751465, -1.235016942024231], + [2.6330301761627197, 1.023543119430542], + [-0.4061104655265808, 9.351057052612305], + [3.086374521255493, -4.816205024719238], + [-2.24953031539917, 2.522867202758789], + [2.220221757888794, -3.381192922592163], + [-1.6599011421203613, 5.493873596191406], + [2.7254414558410645, -4.117948532104492], + [-1.0046241283416748, 1.239014983177185], + [-4.477665424346924, -3.1211769580841064], + [1.5437546968460083, 5.0002665519714355], + [-1.649432897567749, -1.1299147605895996], + [-1.8883346319198608, 5.567562103271484], + [-4.485517501831055, -1.1190074682235718], + [1.9160499572753906, -6.3341498374938965], + [2.371284246444702, 5.931343078613281], + [-3.2123796939849854, -2.431253671646118], + [3.009406089782715, -7.225758075714111], + [2.7543208599090576, -5.440117835998535], + [-3.7447781562805176, -3.5560500621795654], + [8.618891716003418, -2.517198324203491], + [-0.19041311740875244, 10.120223999023438], + [-1.7609800100326538, 2.325000762939453], + [5.129644393920898, -1.2213830947875977], + [2.218059778213501, -7.100706100463867], + [-4.872633457183838, 5.216846466064453], + [1.6601836681365967, -7.427301406860352], + [-6.006368160247803, 7.012698650360107], + [9.538311004638672, -2.591545581817627], + [-5.33931303024292, -2.9850282669067383], + [-3.1451103687286377, 2.297816276550293], + [-3.5595357418060303, -2.8911869525909424], + [-5.443254470825195, 8.118025779724121], + [-0.6272639632225037, 9.276826858520508], + [8.694476127624512, -2.3966124057769775], + [-0.5402612090110779, -1.0886718034744263], + [-4.766783714294434, 5.169191360473633], + [-5.058554172515869, -1.7989585399627686], + [-4.477762699127197, -2.882371187210083], + [-6.737742900848389, 8.186789512634277], + [1.1860241889953613, -7.485711574554443], + [-4.399660110473633, -3.266749620437622], + [-2.417437791824341, -1.79506516456604], + [-7.405518531799316, -1.7786871194839478], + [-0.2967935800552368, -1.4267603158950806], + [1.9623806476593018, -9.765331268310547], + [-5.859600067138672, 1.4890403747558594], + [-2.5437586307525635, 2.1466238498687744], + [-3.111433982849121, 4.850959777832031], + [-5.655858516693115, 6.5543928146362305], + [-7.397970676422119, -0.9933467507362366], + [-0.23464053869247437, 9.91555118560791], + [-7.5070013999938965, 9.663074493408203], + [-5.74091100692749, -2.183539390563965], + [0.2684088349342346, 7.551713943481445], + [-2.569648504257202, 1.9605828523635864], + [1.7657312154769897, 4.796770095825195], + [1.952148199081421, 1.0607572793960571], + [-5.291853904724121, 8.31898307800293], + [-0.25940555334091187, 10.18424129486084], + [-6.521067142486572, 7.409967422485352], + [-4.479725360870361, 6.13731575012207], + [-0.578818142414093, 9.753839492797852], + [5.826342582702637, -0.3118903338909149], + [-1.9673817157745361, 1.3470345735549927], + [-0.22173058986663818, 9.307395935058594], + [-4.166903018951416, -2.0306215286254883], + [-3.6436381340026855, -3.2154672145843506], + [7.613149166107178, -1.7935551404953003], + [-0.3950287103652954, 9.76290512084961], + [3.205857992172241, -6.803972244262695], + [-5.926360130310059, 4.229121685028076], + [2.844975471496582, -4.506328582763672], + [2.552614688873291, -4.024088382720947], + [7.4805378913879395, -3.4298837184906006], + [-5.653714656829834, -1.7860225439071655], + [-1.7027745246887207, 2.614952802658081], + [9.194260597229004, -2.628504991531372], + [-4.654540538787842, -2.9769608974456787], + [3.0653557777404785, -4.5964579582214355], + [-0.3808579444885254, 9.094359397888184], + [-1.6679978370666504, 2.4040932655334473], + [-3.5358827114105225, -5.0820841789245605], + [2.0502614974975586, 0.8078906536102295], + [-2.6858389377593994, -2.905946731567383], + [8.500506401062012, -1.9922833442687988], + [1.8923190832138062, 5.382014274597168], + [-3.5726382732391357, -3.5663907527923584], + [2.3491604328155518, -4.286861896514893], + [2.5653750896453857, -4.206292152404785], + [-4.90374231338501, 2.8319332599639893], + [-4.448824882507324, 7.4246110916137695], + [-0.6666225790977478, 0.21368080377578735], + [-0.27938777208328247, 9.235654830932617], + [-4.869327068328857, -1.128614902496338], + [2.9111478328704834, -4.381121635437012], + [-6.058187961578369, 3.093946695327759], + [2.5731987953186035, -4.36522102355957], + [-7.24052619934082, 9.004724502563477], + [6.477327346801758, -1.3152716159820557], + [9.362668991088867, -2.61704421043396], + [2.7666614055633545, -4.0760087966918945], + [0.44499361515045166, -0.4658016562461853], + [-0.4464675188064575, 10.834945678710938], + [-7.614826679229736, -1.7076326608657837], + [-0.5004705190658569, 9.870596885681152], + [-0.0681341364979744, 10.358717918395996], + [1.2939248085021973, -5.0834856033325195], + [3.86191987991333, 6.475680828094482], + [3.081791639328003, -4.837283134460449], + [9.408900260925293, -2.6899914741516113], + [-0.2564474940299988, 10.13176155090332], + [-4.922536849975586, 6.3644118309021], + [-0.14538630843162537, -1.2001545429229736], + [-6.133953094482422, 8.103862762451172], + [-1.4810370206832886, 0.23382031917572021], + [2.949110269546509, -4.447004318237305], + [-4.440723419189453, -2.011225938796997], + [1.1503398418426514, -5.848918914794922], + [-6.401446342468262, -0.9207370281219482], + [2.017080783843994, 5.526693344116211], + [-4.243556499481201, 6.474048614501953], + [-0.2997922897338867, 10.779008865356445], + [7.693522930145264, -2.2567145824432373], + [-4.920002460479736, -2.4326114654541016], + [-8.32629108428955, 10.131274223327637], + [1.775229573249817, -3.3500142097473145], + [-4.935135841369629, 2.2864861488342285], + [2.1434125900268555, 5.817963600158691], + [8.06335735321045, -2.0645697116851807], + [-0.3071478605270386, 9.222443580627441], + [-2.211383104324341, 6.209437370300293], + [1.2616405487060547, 4.586339473724365], + [-7.88915491104126, -1.2797820568084717], + [-3.5822784900665283, -2.303562879562378], + [7.770902156829834, -1.979695200920105], + [-4.009456157684326, -2.0758893489837646], + [8.062064170837402, -1.9072809219360352], + [-0.10926003009080887, 5.854842185974121], + [-0.4876681864261627, -0.39206618070602417], + [-4.4375834465026855, -1.9401108026504517], + [-6.10935640335083, -2.3449981212615967], + [-3.813704490661621, -2.6469600200653076], + [-2.2318532466888428, 1.8009709119796753], + [-4.370994567871094, -2.3392789363861084], + [2.5359342098236084, -2.608009099960327], + [-4.390761375427246, 5.462748050689697], + [-2.4103291034698486, -1.7353620529174805], + [-7.724583148956299, -0.31077706813812256], + [-0.837786078453064, 11.039602279663086], + [2.5654823780059814, -7.5959086418151855], + [2.134279489517212, -7.118171691894531], + [2.1787827014923096, 4.421794414520264], + [-4.992187976837158, -1.6691805124282837], + [-0.5177086591720581, 8.869054794311523], + [-4.302436351776123, -0.8262341022491455], + [-4.996383190155029, 8.153626441955566], + [-3.308269739151001, -2.065427541732788], + [2.302417278289795, 5.587532043457031], + [3.066154956817627, -4.703758239746094], + [6.536725997924805, -1.060428261756897], + [0.5245282649993896, 0.3188878297805786], + [-5.120857238769531, -2.7912862300872803], + [6.136856555938721, -1.3300141096115112], + [2.959918260574341, -4.643989562988281], + [-6.277735233306885, 2.451040744781494], + [-3.267364263534546, -1.3820579051971436], + [-1.3997604846954346, 0.4149990975856781], + [-1.791012167930603, -1.4709199666976929], + [-4.931061744689941, -2.332709550857544], + [-0.05704865604639053, -0.9725827574729919], + [0.7091567516326904, 0.7842376232147217], + [-3.9984214305877686, -4.119915962219238], + [2.4644277095794678, 5.807863235473633], + [2.0533154010772705, 5.507746696472168], + [-5.465122699737549, -1.3433977365493774], + [1.8185194730758667, 5.304149627685547], + [2.676927328109741, -4.255667686462402], + [-4.232319355010986, -4.185461044311523], + [-3.650770902633667, -3.992358446121216], + [1.5532443523406982, -7.953732490539551], + [-0.21629607677459717, 9.212533950805664], + [2.987860679626465, -8.224178314208984], + [-5.862133502960205, 2.466221332550049], + [-2.599034547805786, 2.444930076599121], + [-3.0985829830169678, -2.207789421081543], + [1.2264033555984497, 5.479290962219238], + [-1.8558833599090576, 5.873614311218262], + [1.230792760848999, 0.40428411960601807], + [5.308439254760742, -1.1768118143081665], + [2.8739545345306396, -4.314356327056885], + [-3.2979538440704346, 6.448666095733643], + [3.41999888420105, -5.557992935180664], + [1.7849403619766235, -9.211134910583496], + [-5.572046756744385, -4.593932151794434], + [2.9772026538848877, -4.474827766418457], + [-9.22548770904541, -1.242646336555481], + [-4.7549824714660645, 0.49777650833129883], + [3.388690233230591, -1.7234723567962646], + [-5.103130340576172, 3.457695245742798], + [1.277524709701538, -5.245849609375], + [-0.1906455159187317, 9.812522888183594], + [-5.358105182647705, -0.7904811501502991], + [3.0076892375946045, -5.008878707885742], + [-2.8842594623565674, 2.351377248764038], + [-5.6732330322265625, 5.019484043121338], + [-3.131963014602661, 5.3907856941223145], + [-4.414146423339844, 7.171825408935547], + [-2.2390189170837402, 1.959149718284607], + [-2.573715925216675, -4.104485988616943], + [-2.5630507469177246, 1.908012866973877], + [-0.09545410424470901, -1.1588879823684692], + [-4.31638765335083, -1.474231481552124], + [-3.6883537769317627, -3.1325743198394775], + [-4.596978664398193, -2.47896671295166], + [2.044027328491211, 5.804521560668945], + [-6.645830154418945, -1.8644927740097046], + [2.330399751663208, 0.3842564821243286], + [2.7766754627227783, -4.2481536865234375], + [-0.013846643269062042, 8.764959335327148], + [6.254828929901123, -1.167737364768982], + [-6.788512706756592, -1.0516841411590576], + [1.997959852218628, -3.0801751613616943], + [-4.984079360961914, -2.9473631381988525], + [-3.392920970916748, 5.268181324005127], + [-3.4406650066375732, -1.7796543836593628], + [-6.397061824798584, 7.720058441162109], + [-1.9271519184112549, 2.3732802867889404], + [-0.4537574350833893, -0.4583064615726471], + [-0.23678642511367798, 10.153858184814453], + [-0.35046446323394775, 1.126961350440979], + [2.9244439601898193, -4.448729515075684], + [3.974592447280884, 6.691403388977051], + [-6.566051959991455, -1.5107793807983398], + [-4.401668071746826, -4.288195610046387], + [-2.6101577281951904, -0.7882192134857178], + [3.001520872116089, -4.569212913513184], + [8.479345321655273, -2.1714093685150146], + [2.997512102127075, -4.552077293395996], + [7.482208251953125, -1.583389401435852], + [2.4197065830230713, -5.482871055603027], + [-4.195337772369385, -2.365483283996582], + [-4.926825046539307, -3.4894962310791016], + [2.425750255584717, -4.0586042404174805], + [-0.3971952795982361, -1.1002427339553833], + [-5.638369083404541, 1.5159493684768677], + [1.8087992668151855, 5.605105876922607], + [6.381082057952881, -1.5102906227111816], + [2.5018692016601562, -4.842046737670898], + [-4.448379039764404, -2.4255197048187256], + [-0.34697335958480835, -0.503131091594696], + [6.141782760620117, -1.3722702264785767], + [3.2538228034973145, 1.045310616493225], + [6.415783405303955, -2.45287823677063], + [2.3028879165649414, 5.635932922363281], + [2.277362585067749, 6.191888809204102], + [-0.35022127628326416, 9.489516258239746], + [-0.5080989599227905, -1.1247214078903198], + [-4.316661357879639, -3.140900135040283], + [-6.429249286651611, 7.74533748626709], + [3.152000665664673, -4.71840763092041], + [-5.746872425079346, -1.109696388244629], + [-5.143527507781982, -4.056119918823242], + [1.2275609970092773, -6.840836524963379], + [-2.725071668624878, 1.9166157245635986], + [4.112414360046387, -3.6020729541778564], + [2.3567028045654297, -3.685363531112671], + [-0.2629602551460266, 0.938488245010376], + [-1.7497870922088623, 5.338527202606201], + [-2.0852770805358887, 5.572576522827148], + [-2.4992148876190186, 2.35903263092041], + [8.207531929016113, -2.3869898319244385], + [2.1151506900787354, 5.497793197631836], + [-0.025119371712207794, 10.351680755615234], + [7.457411766052246, -5.134974002838135], + [-0.3340161442756653, 9.777305603027344], + [-4.593876838684082, -1.1794298887252808], + [-2.86136794090271, 3.8663275241851807], + [-5.333609104156494, -2.584310531616211], + [5.563392639160156, -1.9555813074111938], + [3.2245943546295166, -4.8319549560546875], + [8.647242546081543, -2.354888439178467], + [-2.4699838161468506, 1.3746894598007202], + [-2.736753225326538, 2.7972757816314697], + [0.7190983295440674, 5.047914981842041], + [-4.7797112464904785, -3.4341604709625244], + [8.331454277038574, -1.9683088064193726], + [-3.78234601020813, 5.237391471862793], + [1.7173306941986084, -5.353785514831543], + [4.307621479034424, 7.240350723266602], + [4.382511138916016, -0.09435895085334778], + [-2.3875203132629395, 0.4952494502067566], + [3.263751983642578, 6.639280319213867], + [2.996986150741577, -4.571269989013672], + [1.8284213542938232, -3.4911792278289795], + [-0.28503453731536865, 9.585177421569824], + [6.019346714019775, -1.142177700996399], + [4.01648473739624, 6.876731872558594], + [-4.9526495933532715, -2.80277943611145], + [-4.980404376983643, 6.4493513107299805], + [-7.531130313873291, 9.329216957092285], + [5.779144763946533, -2.5825982093811035], + [1.5912343263626099, 5.817142963409424], + [-4.7263875007629395, 5.150582313537598], + [-5.6627984046936035, 4.8455915451049805], + [-4.200480937957764, 4.3300862312316895], + [-5.298742771148682, 8.004871368408203], + [8.18376636505127, -2.055575132369995], + [-0.22730332612991333, 9.34531021118164], + [-0.4785137176513672, 11.000934600830078], + [-4.929982662200928, -1.0413254499435425], + [-7.990584850311279, 9.81328010559082], + [-0.2034817934036255, 9.788113594055176], + [2.4370551109313965, -5.044867515563965], + [-0.646740734577179, 10.786287307739258], + [-3.084594964981079, -3.031916379928589], + [-7.294412612915039, -1.956027626991272], + [-0.41414135694503784, 11.328669548034668], + [2.7455894947052, -4.530055522918701], + [1.7508193254470825, 5.281656742095947], + [-5.175629138946533, -3.292001724243164], + [-0.5204921364784241, 12.017240524291992], + [2.4632742404937744, -4.271615982055664], + [0.026374690234661102, 9.737842559814453], + [-0.33245450258255005, -0.9708355069160461], + [2.0056264400482178, -8.722970962524414], + [-3.6520473957061768, -1.2619109153747559], + [-4.426237106323242, -1.3223071098327637], + [-4.258656978607178, -3.6375725269317627], + [-2.64379620552063, -1.0064805746078491], + [2.3152127265930176, -7.040825843811035], + [-3.7687814235687256, -1.65874183177948], + [-2.999634265899658, -0.4274216294288635], + [-2.5867068767547607, -1.3212718963623047], + [-6.013631343841553, 6.396620750427246], + [-2.734114408493042, 2.142726182937622], + [-5.701232433319092, -2.3482506275177], + [5.408392906188965, -1.2090768814086914], + [0.3478986322879791, -0.7054753303527832], + [-5.3885955810546875, -3.3594307899475098], + [2.7810680866241455, -4.672749996185303], + [1.3600471019744873, -6.416872978210449], + [-5.272694110870361, 3.7719573974609375], + [-1.536960244178772, -1.132681965827942], + [2.0390076637268066, 3.859266996383667], + [-7.617924213409424, -1.254300832748413], + [-4.8872294425964355, -3.3870961666107178], + [-1.9497530460357666, 2.708780288696289], + [3.0610411167144775, -5.561924934387207], + [-2.760049819946289, -1.4349501132965088], + [-0.1862756609916687, 10.39697551727295], + [-2.561457395553589, 1.608312964439392], + [1.631038784980774, 5.399378776550293], + [2.6202566623687744, -3.93508243560791], + [-0.4651105999946594, 8.468719482421875], + [-3.7600057125091553, -1.1123816967010498], + [-2.1304450035095215, -2.138117551803589], + [-4.54602575302124, -2.223879098892212], + [-2.1113669872283936, 0.6759651303291321], + [-3.17085862159729, -1.1366747617721558], + [-2.8712525367736816, 2.532424211502075], + [3.0070619583129883, -4.5210723876953125], + [-4.817138195037842, -2.9896461963653564], + [-5.226957321166992, 6.249868869781494], + [1.106205701828003, 5.404026985168457], + [2.2119786739349365, -4.711424827575684], + [-5.65242338180542, -2.492884874343872], + [6.623137474060059, -2.1019580364227295], + [0.2245001196861267, -5.073826789855957], + [6.032063007354736, -2.1708738803863525], + [-5.956967830657959, 2.783768653869629], + [0.5612761378288269, 4.984236717224121], + [-0.46186524629592896, 8.918418884277344], + [-4.489655494689941, 7.377182960510254], + [-0.10185546427965164, 11.12563419342041], + [-6.392770290374756, 8.00857925415039], + [1.8610972166061401, 5.239737510681152], + [5.407209873199463, -3.192124128341675], + [-5.737205982208252, 7.754590034484863], + [-5.474610805511475, 7.210459232330322], + [-2.5819032192230225, 2.0492749214172363], + [-4.324317932128906, 5.976778030395508], + [1.5080320835113525, 0.6877343654632568], + [-2.609159469604492, -2.2246978282928467], + [2.1143064498901367, 3.227104902267456], + [-3.6990201473236084, -4.785330772399902], + [-0.2659232020378113, -0.3458448052406311], + [-0.261147677898407, 9.490328788757324], + [0.733858585357666, -5.6285271644592285], + [-0.6622070074081421, -2.28836989402771], + [7.230276584625244, -1.7246640920639038], + [2.612151861190796, 1.0645126104354858], + [-1.3634788990020752, 1.1800713539123535], + [-6.562693119049072, -2.134962797164917], + [0.7298206686973572, -6.306407928466797], + [-4.386390209197998, -2.6294643878936768], + [-4.639862060546875, -3.3376619815826416], + [3.170348882675171, -5.062261581420898], + [2.1657326221466064, -5.6758646965026855], + [2.836393117904663, -4.490026473999023], + [-5.274548053741455, -3.199531316757202], + [-4.910365104675293, -3.7555992603302], + [3.531756639480591, 0.4124854803085327], + [3.214690923690796, -4.809198379516602], + [2.670686721801758, -1.3491953611373901], + [-5.260767459869385, -2.4529025554656982], + [-3.029798746109009, 4.267166614532471], + [-5.019286632537842, -2.712278366088867], + [2.061067819595337, -5.158383369445801], + [-4.9862961769104, -0.027833882719278336], + [3.1954028606414795, -4.843367099761963], + [-0.23924970626831055, 10.177865982055664], + [6.98190450668335, -0.9205979108810425], + [-5.90939474105835, 0.5165801048278809], + [-5.735702037811279, -0.68621826171875], + [-1.3367409706115723, -1.6174707412719727], + [6.57159423828125, -2.1011321544647217], + [3.7766683101654053, 5.753937244415283], + [1.3510140180587769, 5.717614650726318], + [1.9773483276367188, 4.794411659240723], + [-5.3038811683654785, 7.618109703063965], + [-5.1322407722473145, -2.9190523624420166], + [2.3803741931915283, 4.96092414855957], + [-5.956066608428955, 1.598354697227478], + [2.0114784240722656, 5.746039390563965], + [2.4280598163604736, -4.215662956237793], + [-4.188866138458252, 4.316204071044922], + [-5.273514270782471, 6.453042030334473], + [-5.084630012512207, 4.0367112159729], + [-5.840989589691162, 4.906210422515869], + [-5.896892070770264, -0.16373693943023682], + [2.9767839908599854, -4.753787517547607], + [-2.219215154647827, 2.863091230392456], + [2.330909013748169, -6.481878280639648], + [-4.871242046356201, -4.068284034729004], + [4.961465835571289, -1.208473563194275], + [-6.053350448608398, -2.635256052017212], + [2.8692173957824707, 0.6341679692268372], + [5.459838390350342, -1.0088510513305664], + [-5.107066631317139, -2.5541508197784424], + [-6.393639087677002, 8.135927200317383], + [0.9943040013313293, -5.5329413414001465], + [3.1239426136016846, -4.761806488037109], + [2.457852602005005, -4.698835372924805], + [2.3496294021606445, -3.6845920085906982], + [-4.687548637390137, 5.651102066040039], + [0.26909953355789185, 9.831573486328125], + [-2.3115241527557373, -2.037841796875], + [-4.883898735046387, -1.9121772050857544], + [-2.8228161334991455, 0.7725610136985779], + [2.3856303691864014, -5.03493595123291], + [-4.772964954376221, 7.414074897766113], + [-5.6014485359191895, -4.156608581542969], + [1.4325792789459229, 1.9088407754898071], + [-3.929720163345337, -3.3739778995513916], + [1.3797061443328857, 0.4702345132827759], + [-2.426435708999634, 0.8898223638534546], + [-0.49826663732528687, 9.10047721862793], + [7.904854774475098, -2.266542911529541], + [-5.237997531890869, -3.4180524349212646], + [-0.5306342244148254, 9.385021209716797], + [-6.5684919357299805, -2.321965456008911], + [-2.436952590942383, 2.710130214691162], + [-3.0983567237854004, -1.3232699632644653], + [-3.491746187210083, -2.069826364517212], + [5.494403839111328, 7.5971174240112305], + [5.205158710479736, 6.618903636932373], + [-6.696751117706299, 3.5336244106292725], + [-5.584239482879639, 3.177385091781616], + [-2.551422357559204, -2.4248127937316895], + [-1.5556261539459229, 4.75835657119751], + [-4.303347587585449, -2.8413147926330566], + [1.05318021774292, -7.115050315856934], + [1.5993276834487915, -4.823833465576172], + [-0.052170462906360626, -0.4851202368736267], + [-2.710881471633911, 0.9047837853431702], + [0.7907717227935791, 1.0772454738616943], + [6.976657390594482, -2.329040288925171], + [0.8974117040634155, 0.3796522617340088], + [-2.5347964763641357, 0.4698590636253357], + [-6.45361852645874, 2.572205066680908], + [1.5013794898986816, 0.5487974882125854], + [3.4164135456085205, -5.445513725280762], + [-4.797881126403809, 2.1796226501464844], + [-5.262809753417969, -2.8354837894439697], + [-0.4649321436882019, 9.567475318908691], + [-7.441258907318115, 9.491628646850586], + [-1.2897230386734009, 0.4943689703941345], + [2.762700319290161, -7.885793209075928], + [-5.10828971862793, -5.210040092468262], + [-1.6806868314743042, 0.7556869983673096], + [-2.0277934074401855, -3.207304000854492], + [2.9439210891723633, -4.666278839111328], + [-4.949782848358154, 6.126712799072266], + [-0.2429409623146057, 9.82455825805664], + [1.606872797012329, 0.6545661091804504], + [2.9210407733917236, -4.420251369476318], + [3.0639517307281494, -4.672604084014893], + [-0.2388501763343811, 9.818666458129883], + [-4.1042609214782715, -4.021588325500488], + [8.603896141052246, -2.4251291751861572], + [-6.4576735496521, -2.608316421508789], + [-2.841921806335449, -1.7922053337097168], + [-5.825625896453857, -3.710726499557495], + [7.467401504516602, -1.7741655111312866], + [2.666954755783081, -4.045746326446533], + [-7.372159004211426, -2.6063389778137207], + [1.4613335132598877, 5.783455848693848], + [8.637835502624512, -2.3680479526519775], + [2.798139810562134, -4.1970930099487305], + [1.454046607017517, 2.8967790603637695], + [-5.727651119232178, -4.003796100616455], + [2.2820920944213867, 1.078903079032898], + [0.14813625812530518, 5.515221118927002], + [0.9532623887062073, 1.6669362783432007], + [2.959301233291626, -4.541665077209473], + [-3.8024771213531494, -3.562657356262207], + [5.629446506500244, -1.3097258806228638], + [1.4140516519546509, -0.30182433128356934], + [-5.237029552459717, -3.4729316234588623], + [-2.570302724838257, 1.7114630937576294], + [2.0229320526123047, -8.15522575378418], + [-7.6845574378967285, -1.3949137926101685], + [-5.684080600738525, 2.6906721591949463], + [-2.206355571746826, 2.197728395462036], + [-4.801102638244629, -4.208284854888916], + [-2.442831516265869, 1.427606463432312], + [9.969005584716797, -2.743305206298828], + [-0.21934860944747925, 9.715240478515625], + [-4.317562103271484, -4.439553737640381], + [0.6843579411506653, -0.14013764262199402], + [1.260358452796936, 0.704342246055603], + [2.511901378631592, -4.0815863609313965], + [9.302006721496582, -2.566772699356079], + [1.9946022033691406, -7.271805763244629], + [-5.5974955558776855, 4.587864398956299], + [-3.723938465118408, -2.6404237747192383], + [6.786911487579346, -1.7516802549362183], + [-5.004619121551514, -3.3262455463409424], + [1.9277746677398682, 5.761340618133545], + [-2.231829881668091, 1.404361605644226], + [-0.2003735899925232, 11.437621116638184], + [-6.647348880767822, 8.033154487609863], + [-4.545418739318848, 5.648155212402344], + [4.8372111320495605, -0.9289783835411072], + [3.1927759647369385, -4.774662494659424], + [-4.279881000518799, 0.1538219451904297], + [-5.2286906242370605, 5.826937198638916], + [-1.9253039360046387, 2.1896302700042725], + [-4.00529670715332, -4.049558639526367], + [1.7115380764007568, 0.3100506663322449], + [4.995054721832275, -0.15520358085632324], + [-1.650942325592041, -3.4335110187530518], + [-2.189692735671997, 6.000931739807129], + [-2.0993692874908447, -0.8209128379821777], + [2.9432566165924072, -2.525848627090454], + [1.668595552444458, -7.442904472351074], + [3.0153281688690186, -4.65535306930542], + [-0.06613237410783768, -0.21486598253250122], + [-2.3171088695526123, 0.9146182537078857], + [-0.21817231178283691, 9.847089767456055], + [6.8812947273254395, -2.9534103870391846], + [-4.844092845916748, -0.8433704376220703], + [-0.42347222566604614, 9.300399780273438], + [-3.333189010620117, 2.9473044872283936], + [8.132824897766113, -1.9892452955245972], + [-6.991522789001465, 8.704477310180664], + [7.039488792419434, -2.1618828773498535], + [-6.137661457061768, 7.58814811706543], + [1.2640902996063232, 0.47085511684417725], + [-1.6206225156784058, 5.675323009490967], + [2.6183807849884033, -2.948242425918579], + [9.451108932495117, -2.598360776901245], + [-0.0695175901055336, -0.5862788558006287], + [-0.30609339475631714, 10.365142822265625], + [-2.9500696659088135, 5.212362289428711], + [-6.5235514640808105, 7.7047014236450195], + [-4.204364776611328, -3.485793352127075], + [4.305168628692627, 7.068626403808594], + [3.1778783798217773, -4.9302897453308105], + [1.397813320159912, -6.193687915802002], + [-2.382209539413452, 2.191134214401245], + [-0.21094077825546265, 10.625869750976562], + [-7.407040119171143, -0.058762077242136], + [-4.995725631713867, 4.380577087402344], + [-3.074378490447998, -5.137350082397461], + [-5.1647047996521, -2.4369475841522217], + [5.733042240142822, -2.9079761505126953], + [0.6428119540214539, -6.106464385986328], + [-2.947498083114624, -0.293967604637146], + [2.289573907852173, -7.6089582443237305], + [-0.2501369118690491, 9.527534484863281], + [-5.122308254241943, 3.8305978775024414], + [5.303859233856201, -0.9980599284172058], + [3.049325704574585, -4.5973968505859375], + [8.770272254943848, -2.41875958442688], + [7.216009616851807, -2.574755907058716], + [1.2088110446929932, 5.096306800842285], + [-4.927162170410156, 4.85732364654541], + [-6.677082538604736, 8.064882278442383], + [-6.602572917938232, -0.8591881394386292], + [-0.35264796018600464, 9.298677444458008], + [-1.5099422931671143, 8.506613731384277], + [6.115114212036133, -1.4783505201339722], + [-3.7368900775909424, -2.2293272018432617], + [-5.060184478759766, 3.817850112915039], + [6.964162349700928, 8.285223007202148], + [3.6622817516326904, -6.684362411499023], + [2.5087246894836426, -3.871579885482788], + [-5.216574668884277, -3.578805685043335], + [-0.7615645527839661, 9.628748893737793], + [-3.2379066944122314, 2.9614086151123047], + [-3.3831708431243896, 4.789654731750488], + [-0.1503552794456482, 10.285713195800781], + [10.271536827087402, -2.8423678874969482], + [-4.37222957611084, -2.0562777519226074], + [3.4768965244293213, -7.609564781188965], + [-4.827086448669434, 2.2941806316375732], + [-4.856444835662842, 5.343151092529297], + [-4.350942134857178, -2.142672538757324], + [-6.110096454620361, 7.756688594818115], + [-4.60015344619751, -3.251221179962158], + [9.830636024475098, -2.7664620876312256], + [-2.802201986312866, 3.068408250808716], + [-5.710445880889893, 7.409701824188232], + [-5.32112979888916, 1.72698175907135], + [-2.628751516342163, 1.8161091804504395], + [-4.7299628257751465, 5.246386528015137], + [7.564703941345215, -2.089428424835205], + [-4.119363307952881, -1.7247381210327148], + [-6.3814921379089355, 7.394624710083008], + [0.08010797947645187, 10.441343307495117], + [2.126058340072632, 5.526328086853027], + [-7.721680164337158, -1.3173519372940063], + [-6.460664749145508, 8.064657211303711], + [-4.018102645874023, 2.9563777446746826], + [-0.29748886823654175, 10.805795669555664], + [-7.7382001876831055, 9.49805736541748], + [-2.306734323501587, 1.0257703065872192], + [-5.722005367279053, 1.0088465213775635], + [-0.23654425144195557, -1.109442114830017], + [2.7803843021392822, -8.08573055267334], + [-1.8496251106262207, 0.7899272441864014], + [-1.225677490234375, 1.7963333129882812], + [-5.139441013336182, -3.23549485206604], + [-4.635625839233398, 3.3935067653656006], + [0.6337316036224365, 4.809328556060791], + [6.138849258422852, -1.4638584852218628], + [2.163339138031006, -7.566439628601074], + [2.4215571880340576, -7.6809210777282715], + [-4.82634973526001, -2.8639421463012695], + [-2.332484483718872, 1.390589952468872], + [-2.313560962677002, 0.8578687906265259], + [-5.1176066398620605, -0.1303054690361023], + [-3.134038209915161, 5.3418707847595215], + [-5.572208881378174, -2.4033539295196533], + [-2.563040256500244, 2.286085844039917], + [-0.0713132694363594, -0.8485221862792969], + [-4.735221862792969, -2.601736545562744], + [-5.0839409828186035, -2.1850738525390625], + [-4.740370273590088, -0.5491241216659546], + [7.938767910003662, -1.8741683959960938], + [-5.44895076751709, -1.608638882637024], + [0.6052872538566589, -0.3612629771232605], + [-0.5219756364822388, 0.4447331428527832], + [1.1870436668395996, 5.765524864196777], + [-3.4680027961730957, -2.681647300720215], + [6.818079471588135, -2.218618154525757], + [-3.676434278488159, 1.886501669883728], + [-5.450658321380615, -4.910223007202148], + [-0.2074154019355774, 9.536331176757812], + [-4.9384050369262695, -2.90251088142395], + [-4.860824108123779, 7.158814430236816], + [2.085716485977173, -6.146486759185791], + [2.9746243953704834, -4.689332008361816], + [2.7747786045074463, -5.803168296813965], + [5.607228755950928, -1.1171921491622925], + [7.196732997894287, -2.7262039184570312], + [8.710371971130371, -2.4130780696868896], + [1.3393843173980713, 5.005022048950195], + [-0.5208072662353516, 4.923423767089844], + [-4.138382434844971, 6.747585773468018], + [-0.06413225084543228, -0.3781060576438904], + [-1.657659888267517, 4.105210304260254], + [7.787891864776611, -4.344410419464111], + [-2.146217107772827, -1.8774845600128174], + [2.810359239578247, -2.2817366123199463], + [3.2186203002929688, -4.8174147605896], + [2.0851283073425293, -5.60034704208374], + [-0.5871623158454895, -1.1603699922561646], + [-7.061680316925049, 8.51775074005127], + [-5.573890209197998, -2.48636531829834], + [-4.791749000549316, 3.566309928894043], + [-0.4493336081504822, 11.227261543273926], + [1.8729008436203003, 5.022672176361084], + [-5.2344069480896, 7.769158363342285], + [0.4844983220100403, -1.292737364768982], + [1.800356388092041, -7.799822807312012], + [1.9220893383026123, 5.6721038818359375], + [2.13337779045105, -4.0163984298706055], + [-6.252792835235596, 8.480215072631836], + [-3.1925241947174072, 3.440568208694458], + [-4.783031463623047, 6.775487899780273], + [-3.3391826152801514, -1.9946438074111938], + [2.0283992290496826, 5.31822395324707], + [-4.575438022613525, -2.668672561645508], + [7.10425329208374, -1.9044266939163208], + [8.9984769821167, -2.4446752071380615], + [-1.342067837715149, -0.683493435382843], + [-7.981995105743408, -0.9573286771774292], + [2.063514471054077, 0.5627506971359253], + [-5.198395729064941, -2.9443938732147217], + [-2.874180555343628, 2.916567087173462], + [-0.6235947012901306, 9.456254959106445], + [-4.756168842315674, -1.768578290939331], + [-3.6212971210479736, 1.171167254447937], + [-2.2733991146087646, 2.4552526473999023], + [-3.017960548400879, -4.265735626220703], + [-2.1626672744750977, 0.8130063414573669], + [-4.372642993927002, -2.9059696197509766], + [1.8851302862167358, -9.337753295898438], + [5.461480140686035, -1.1898828744888306], + [9.555724143981934, -2.823422431945801], + [-0.607821524143219, 0.8897901773452759], + [-4.922165393829346, 0.01362806186079979], + [10.2593355178833, -2.8384673595428467], + [-6.046720027923584, 6.113854885101318], + [0.8729725480079651, -0.04829392209649086], + [9.101083755493164, -2.4113099575042725], + [6.168681621551514, -2.4966413974761963], + [3.0504720211029053, -5.004331111907959], + [-5.156198978424072, 7.929746627807617], + [-6.362819194793701, 1.2949861288070679], + [-4.172224521636963, 6.391583442687988], + [-4.821797847747803, -3.1593899726867676], + [-4.130523681640625, -2.521899938583374], + [-3.707362413406372, -3.9467101097106934], + [6.8035407066345215, -2.9992835521698], + [3.05342960357666, -7.112335205078125], + [-2.6593101024627686, 2.4406042098999023], + [3.193878412246704, -4.822450160980225], + [-4.230435848236084, 2.1962296962738037], + [9.878775596618652, -2.7476460933685303], + [-4.206944465637207, -3.156998872756958], + [1.8195239305496216, -3.4424893856048584], + [-4.663396835327148, -2.4780783653259277], + [2.8581326007843018, -4.290853500366211], + [-5.052728176116943, 5.360318183898926], + [-4.776240825653076, -2.916672706604004], + [4.674081325531006, 7.133266925811768], + [5.776665687561035, -1.22963547706604], + [-1.9941966533660889, 0.43064427375793457], + [-0.44653183221817017, 10.85698127746582], + [1.9234392642974854, -3.253267288208008], + [-2.030193328857422, 1.722245693206787], + [-0.22174811363220215, 9.172687530517578], + [-4.330818176269531, 1.8168851137161255], + [-0.16197934746742249, -0.4215027689933777], + [2.215437650680542, -3.3944146633148193], + [0.9975845217704773, -7.172085285186768], + [-5.213089466094971, 4.766509056091309], + [-0.7605635523796082, -0.7231943607330322], + [-4.340107440948486, 3.303493022918701], + [-1.343177318572998, -1.4003241062164307], + [1.8584293127059937, -8.43467903137207], + [-0.2713109850883484, 10.176898956298828], + [-2.2278859615325928, 2.411675453186035], + [-0.0929233506321907, 9.740160942077637], + [0.011860840022563934, 9.815727233886719], + [0.7999313473701477, 5.741134166717529], + [-7.514529705047607, 9.1845703125], + [0.6203842759132385, -1.179972767829895], + [7.695355415344238, -2.315092086791992], + [8.321866035461426, -2.35443377494812], + [2.7627673149108887, -6.596494197845459], + [4.413881301879883, 7.22974967956543], + [-4.866940498352051, -2.8162143230438232], + [2.934155225753784, -4.414515018463135], + [-4.957225322723389, -2.5994067192077637], + [2.854370355606079, -4.423630714416504], + [8.77509593963623, -2.3306143283843994], + [-3.946434497833252, -0.5689934492111206], + [-6.646503925323486, 8.048066139221191], + [-5.10902738571167, -2.694344997406006], + [2.6995737552642822, 3.958411931991577], + [2.759955644607544, 3.957026243209839], + [1.6159452199935913, 7.038392543792725], + [-0.21301347017288208, -1.5684105157852173], + [-4.96395206451416, -0.9531084299087524], + [-2.5787415504455566, 2.1024794578552246], + [-0.29430288076400757, 10.678422927856445], + [-3.4441165924072266, -1.9884778261184692], + [-2.393321990966797, 0.9196926355361938], + [-4.302526950836182, -2.910236358642578], + [4.819906711578369, -0.19741195440292358], + [-5.137967586517334, -4.197592735290527], + [2.7820990085601807, -4.210683345794678], + [8.559514045715332, -2.43796706199646], + [-7.005350589752197, -1.308910608291626], + [1.562915563583374, -5.075255393981934], + [-5.702613830566406, -2.325533628463745], + [3.894721269607544, -0.7339526414871216], + [6.41636848449707, -1.263330101966858], + [2.6511082649230957, 5.586808681488037], + [3.4516305923461914, -5.487277507781982], + [-0.12981778383255005, -3.7294249534606934], + [-6.064323902130127, 5.6637187004089355], + [-6.021753311157227, -1.7715346813201904], + [-4.879951477050781, -3.0630075931549072], + [-0.40975433588027954, 11.0730562210083], + [1.8647009134292603, 4.915867805480957], + [3.6568658351898193, 6.400301933288574], + [-0.3524337410926819, 9.166921615600586], + [-0.14252883195877075, 9.237507820129395], + [-3.8489911556243896, -2.316373348236084], + [5.364080905914307, -1.1039448976516724], + [-5.117002964019775, 5.481624603271484], + [1.3960678577423096, -0.18118639290332794], + [1.207183599472046, 0.46542590856552124], + [2.4516384601593018, -4.004153728485107], + [5.025219440460205, 7.181124210357666], + [-2.9413304328918457, -4.124968528747559], + [-3.8688948154449463, -1.8691318035125732], + [2.2698678970336914, -9.262500762939453], + [-6.01317834854126, -2.390530824661255], + [1.405550241470337, -2.877067804336548], + [-4.868716716766357, -2.6754307746887207], + [2.251706838607788, 5.100446701049805], + [3.0005266666412354, -4.529613971710205], + [-4.530759811401367, -3.6479294300079346], + [2.1271462440490723, 5.26539421081543], + [-2.470285654067993, 1.0854074954986572], + [-2.2328872680664062, 2.313082456588745], + [4.495354175567627, -0.40317821502685547], + [-5.758554935455322, 2.633833646774292], + [2.323953866958618, 5.921512603759766], + [-5.428830623626709, -2.9956157207489014], + [-0.5690165162086487, -0.9832968711853027], + [1.3537167310714722, -7.625561714172363], + [-0.39854514598846436, -0.31036972999572754], + [3.0768487453460693, -4.612104892730713], + [-2.1516408920288086, 0.8985261917114258], + [-4.515267848968506, -3.2979085445404053], + [-0.10548169165849686, 10.124798774719238], + [-6.906510829925537, 8.365238189697266], + [-2.4323387145996094, 1.0590096712112427], + [-2.9974381923675537, 5.056341171264648], + [2.0666112899780273, -6.837707996368408], + [-1.5155457258224487, 3.8228375911712646], + [-0.33612197637557983, 10.367403030395508], + [2.5728957653045654, -8.240133285522461], + [-4.258283615112305, -3.9318244457244873], + [-4.735260486602783, -1.972367286682129], + [5.2884745597839355, -0.9906399250030518], + [2.2797319889068604, -8.895204544067383], + [1.0446473360061646, 5.695680141448975], + [-5.361247539520264, 7.7412214279174805], + [-4.937249183654785, -0.36286836862564087], + [-5.3677144050598145, -0.5261405110359192], + [-2.595557928085327, 1.6470386981964111], + [-7.695328235626221, -1.348905324935913], + [0.24581319093704224, -0.22142747044563293], + [-5.2105793952941895, -3.369401216506958], + [-4.39479923248291, -5.197754859924316], + [-5.59602689743042, -3.7860472202301025], + [0.25598394870758057, 0.18145638704299927], + [-5.645577907562256, 6.128817081451416], + [2.520936965942383, -4.2469658851623535], + [-5.326229572296143, -0.37853044271469116], + [-3.6688737869262695, 7.49409294128418], + [-3.302427053451538, -1.1855229139328003], + [1.083833932876587, -7.369226455688477], + [-0.3257775902748108, -1.163472294807434], + [0.24573200941085815, 5.5535888671875], + [-3.6326181888580322, 5.664069175720215], + [-4.838296413421631, -1.5598615407943726], + [-0.27190572023391724, 9.690986633300781], + [1.061367392539978, 6.58156681060791], + [-1.3958929777145386, 3.2559397220611572], + [-5.835317611694336, 4.827559947967529], + [2.582156181335449, 0.8434576988220215], + [2.7878262996673584, -4.2442626953125], + [-6.010840892791748, 7.077596664428711], + [-3.9758999347686768, -2.283031702041626], + [2.8820319175720215, 4.785152435302734], + [5.075768947601318, -2.6124179363250732], + [-5.2965312004089355, -2.2022716999053955], + [-2.0913803577423096, 2.849228620529175], + [2.6852316856384277, -4.6216583251953125], + [-3.1864144802093506, -3.666698455810547], + [-5.764989376068115, 1.062601923942566], + [-5.401723861694336, -0.6186684370040894], + [-3.2727572917938232, -1.4171096086502075], + [-8.1176118850708, -0.6471059322357178], + [-3.3151023387908936, 1.6709550619125366], + [-4.41636848449707, 3.8494420051574707], + [-6.256432056427002, -2.201167345046997], + [-3.723879814147949, 6.767048358917236], + [-6.839836597442627, 8.421765327453613], + [-0.7026110887527466, -1.7167474031448364], + [-5.678530216217041, 4.794625759124756], + [3.1342077255249023, -4.735428810119629], + [-6.642037868499756, 8.184576034545898], + [-4.674501895904541, 4.459050178527832], + [1.4568800926208496, -7.553520202636719], + [-4.1128973960876465, 7.1840128898620605], + [-2.544938564300537, 2.110788583755493], + [6.051438331604004, -1.8126264810562134], + [-2.189992904663086, 3.070655107498169], + [0.8070675730705261, 0.47382378578186035], + [-0.1903119683265686, 10.196754455566406], + [-2.471062421798706, 1.3822243213653564], + [-8.328264236450195, 10.09210205078125], + [-4.803438186645508, 7.5112199783325195], + [-0.20007425546646118, 9.209054946899414], + [5.423379421234131, -3.622464418411255], + [-0.2163901925086975, 10.371288299560547], + [3.3764328956604004, -0.3811875581741333], + [6.147796154022217, -1.5794906616210938], + [0.4032202959060669, -0.39996594190597534], + [-3.935737371444702, 5.30211067199707], + [2.147106409072876, -8.38894271850586], + [-4.844445705413818, -2.6188719272613525], + [-0.361750990152359, -1.0912786722183228], + [-3.5472986698150635, 2.262289047241211], + [-5.030144214630127, 6.148097991943359], + [-3.04673433303833, -3.1036698818206787], + [-1.0851466655731201, 0.495747447013855], + [-1.4104299545288086, 1.222860336303711], + [-5.7170844078063965, -1.9443944692611694], + [3.1116626262664795, -4.66733980178833], + [-4.406268119812012, -2.44323468208313], + [-2.4680535793304443, 1.253446340560913], + [-2.305330753326416, 0.5404694080352783], + [3.376230478286743, 7.004056930541992], + [5.566413402557373, -3.465585470199585], + [2.6719446182250977, -3.3685407638549805], + [-0.16393429040908813, -0.9502936005592346], + [1.847578763961792, -7.107234477996826], + [-4.079001426696777, -2.952364683151245], + [-0.5077964663505554, 1.0690150260925293], + [-0.04228467494249344, -0.6276068687438965], + [-2.174448251724243, 5.16469669342041], + [-0.33854925632476807, 10.090001106262207], + [6.836268901824951, -3.9571263790130615], + [-4.534952640533447, 4.563952922821045], + [-5.389484882354736, 7.00793981552124], + [-6.703477382659912, -0.7469332218170166], + [8.539359092712402, -2.2876853942871094], + [-4.681535720825195, 6.3044962882995605], + [-8.050318717956543, -1.1899762153625488], + [-0.24051040410995483, 9.569831848144531], + [-2.893768548965454, 2.711888074874878], + [-3.7000203132629395, 6.074366092681885], + [6.91198205947876, -2.057262659072876], + [6.629572868347168, -1.4096906185150146], + [8.639524459838867, -2.4660043716430664], + [5.252686977386475, 7.339214324951172], + [-4.747679233551025, -2.500640630722046], + [-5.918961048126221, 6.635765552520752], + [2.914824962615967, -5.575227737426758], + [-7.921148777008057, -1.1822174787521362], + [5.9612298011779785, -1.093978762626648], + [-6.418453693389893, 7.605634689331055], + [-2.0023140907287598, 2.5806288719177246], + [2.448184013366699, 0.9581781625747681], + [-2.586705446243286, -1.7946678400039673], + [2.969905376434326, 0.8414902687072754], + [2.407320976257324, 0.8502382040023804], + [-5.08928918838501, 3.2212607860565186], + [-5.074622631072998, 1.4756237268447876], + [-5.375502109527588, 6.04813289642334], + [-6.637188911437988, -2.221585512161255], + [2.0808260440826416, -4.292444229125977], + [8.816143035888672, -2.4298818111419678], + [-2.494751453399658, 1.811812400817871], + [-2.85356068611145, 2.314711809158325], + [-1.8216805458068848, 5.9268083572387695], + [-6.302722454071045, 3.5104310512542725], + [-0.1520957350730896, 9.723065376281738], + [-6.531408786773682, 8.204764366149902], + [-4.07574462890625, -2.0515408515930176], + [-5.768544673919678, 4.2956767082214355], + [-2.594881772994995, 2.02883243560791], + [-2.3687734603881836, 6.164670467376709], + [-3.5437700748443604, 4.944983959197998], + [-2.3978054523468018, -4.487454414367676], + [8.984902381896973, -2.526813268661499], + [1.6685991287231445, -8.622539520263672], + [2.421754837036133, 1.0428590774536133], + [1.763167142868042, 4.9205827713012695], + [-4.647576808929443, 4.483978748321533], + [8.66838550567627, -2.4166550636291504], + [4.13287878036499, 6.49181604385376], + [-6.616109371185303, -1.6511019468307495], + [-5.478509426116943, -3.3306102752685547], + [-0.18883854150772095, 9.16081714630127], + [-4.425904750823975, 0.17198145389556885], + [0.20739054679870605, 9.337141990661621], + [1.92466139793396, 5.567770957946777], + [6.892627239227295, -2.6880178451538086], + [3.702908754348755, -2.589982271194458], + [-6.736721515655518, -0.9331040978431702], + [0.22577714920043945, 2.1070454120635986], + [-0.5694156885147095, 9.463167190551758], + [-0.36093002557754517, 10.423219680786133], + [2.8512423038482666, -5.548239231109619], + [-5.857507228851318, 1.895577311515808], + [2.6789867877960205, -4.104855537414551], + [-3.62408185005188, -3.1580088138580322], + [7.5935187339782715, -1.5002943277359009], + [-4.72845983505249, -3.7215776443481445], + [8.304383277893066, -2.313307762145996], + [-2.1512115001678467, 0.599422812461853], + [6.165473461151123, -1.9991308450698853], + [8.758484840393066, -2.55340313911438], + [-4.651904582977295, 6.244287490844727], + [-5.684327602386475, 8.721186637878418], + [2.928182363510132, -4.662805080413818], + [2.5687904357910156, -4.07615852355957], + [-2.492185115814209, 5.876338958740234], + [-2.210526466369629, 1.1674131155014038], + [-6.886047840118408, -1.8384557962417603], + [-4.962640762329102, 3.860463857650757], + [1.6275542974472046, -8.601758003234863], + [-3.1721112728118896, 2.902700185775757], + [-5.2289652824401855, 1.7360812425613403], + [0.6679733395576477, 0.5498256087303162], + [-5.353998184204102, 5.963369369506836], + [-5.894092082977295, -1.536452054977417], + [7.318240165710449, -2.598548173904419], + [5.33847713470459, -1.962536096572876], + [-0.2144586443901062, 9.758716583251953], + [-4.751550674438477, 2.277952194213867], + [-0.054883070290088654, 9.802728652954102], + [1.5046738386154175, -7.109460353851318], + [-6.359127521514893, 8.128561019897461], + [-0.771321713924408, 12.651479721069336], + [4.658685684204102, -1.1797794103622437], + [-2.5965027809143066, 0.8985003232955933], + [2.8235554695129395, -4.295533180236816], + [2.200686454772949, 4.778487205505371], + [-0.33050602674484253, 10.557525634765625], + [-2.4482762813568115, 2.007568359375], + [9.681580543518066, -2.6991794109344482], + [1.1563822031021118, -7.6007466316223145], + [-3.5176961421966553, 5.571221351623535], + [-4.775755405426025, -2.773146867752075], + [7.008479118347168, -2.1015079021453857], + [-4.080148220062256, -4.0744171142578125], + [-4.067834854125977, -2.2830944061279297], + [-0.19212323427200317, 9.75186538696289], + [-2.329096555709839, 2.0611231327056885], + [2.616015672683716, -6.476524353027344], + [0.6883123517036438, -0.2315479964017868], + [1.427695631980896, -6.105539321899414], + [2.421015501022339, -7.693411827087402], + [2.052543878555298, 5.700551509857178], + [2.4549927711486816, -4.074458599090576], + [-2.3132288455963135, 6.349156379699707], + [2.5346438884735107, -6.122199058532715], + [-0.4481836259365082, -1.3073493242263794], + [4.09723424911499, 7.205811500549316], + [1.4400339126586914, -6.403006553649902], + [-0.2855464816093445, 9.664581298828125], + [-0.38164955377578735, 9.569318771362305], + [5.123414993286133, -4.231972694396973], + [-2.370027780532837, 4.609524726867676], + [-3.656545400619507, -0.6374071836471558], + [8.057162284851074, -2.4393503665924072], + [1.861916184425354, -2.8993818759918213], + [2.9758617877960205, -4.777170181274414], + [2.1752512454986572, 5.335072040557861], + [-2.2555949687957764, 0.4430931806564331], + [1.610675573348999, -3.5644805431365967], + [7.495593547821045, -2.6120479106903076], + [0.291745126247406, -0.894727885723114], + [-7.220011234283447, 9.088506698608398], + [-4.694385528564453, 5.718264579772949], + [-4.805172920227051, -1.4596514701843262], + [-0.23362356424331665, 9.998425483703613], + [-5.4765119552612305, -2.4869325160980225], + [-1.49733567237854, -1.4581631422042847], + [-0.3807898163795471, 10.503921508789062], + [-5.169771671295166, 2.517935276031494], + [5.787043571472168, -1.1386312246322632], + [-3.258897066116333, -3.1555848121643066], + [-4.038357734680176, 5.262546062469482], + [2.097038984298706, 0.9435886144638062], + [-3.563829183578491, -3.6728909015655518], + [-4.971573352813721, 3.3986008167266846], + [4.779504299163818, -1.2231365442276], + [8.317523956298828, -2.3300955295562744], + [6.337832927703857, 7.917181015014648], + [1.5603606700897217, -8.215799331665039], + [3.1562130451202393, -4.88996696472168], + [3.0459468364715576, -6.513798236846924], + [0.16598159074783325, 5.32523250579834], + [0.9792112708091736, 0.30394813418388367], + [-5.26418924331665, -4.284689426422119], + [-5.896370887756348, 2.169795274734497], + [2.809274435043335, -5.888470649719238], + [-2.331486463546753, 1.3527776002883911], + [-7.0912394523620605, -1.1689655780792236], + [-5.619359016418457, 5.098641872406006], + [1.765393853187561, -7.306190490722656], + [0.9973320364952087, 4.358692169189453], + [-0.8792270421981812, 9.303278923034668], + [1.288069725036621, 5.390199661254883], + [6.393523216247559, -3.5064198970794678], + [-6.2073845863342285, 7.672515869140625], + [-2.4007298946380615, 6.015055179595947], + [-7.569639682769775, -1.100240707397461], + [-2.3339664936065674, 1.458672046661377], + [-6.121899127960205, 6.075155258178711], + [6.2754621505737305, -2.531184434890747], + [-1.4355742931365967, -0.5948333740234375], + [7.7500505447387695, -2.5399153232574463], + [-4.097857475280762, -2.462636709213257], + [-2.499298095703125, 2.3016321659088135], + [-2.2185282707214355, -0.8707573413848877], + [2.19394588470459, -4.065296173095703], + [-5.016974925994873, -2.611224412918091], + [1.2968511581420898, -5.494691848754883], + [-0.15378892421722412, 9.410200119018555], + [5.621684551239014, -1.0901459455490112], + [-4.136699199676514, -3.077441930770874], + [1.9468317031860352, -2.925112009048462], + [-4.4768548011779785, 6.657675743103027], + [-4.32882833480835, -2.577540397644043], + [-4.627902507781982, 4.2328948974609375], + [-6.981485366821289, -0.5856437683105469], + [-4.055020332336426, -0.4304676651954651], + [-7.895351409912109, -0.9950879812240601], + [1.841552495956421, 1.7040611505508423], + [9.119181632995605, -3.045910596847534], + [-4.922351837158203, 5.832752227783203], + [-5.651278018951416, 5.793926239013672], + [-3.8063364028930664, -2.5254967212677], + [-4.8421454429626465, 7.765934467315674], + [-4.298195838928223, -1.081339955329895], + [-5.035280227661133, 4.311262130737305], + [-7.749260425567627, 9.625807762145996], + [0.6180108785629272, -0.1827152669429779], + [-2.030073881149292, 1.24644136428833], + [-4.584961414337158, -2.8988335132598877], + [1.895500659942627, -3.4160358905792236], + [-7.74716329574585, -0.5978603363037109], + [-6.3310980796813965, 2.022515058517456], + [-4.8102312088012695, -3.813185214996338], + [2.4302990436553955, -7.683874130249023], + [2.0597076416015625, -2.879446268081665], + [-5.304006099700928, 2.5710883140563965], + [1.4720796346664429, -6.8965044021606445], + [-4.6040940284729, 5.349094867706299], + [-5.616645336151123, -3.273160696029663], + [6.524295806884766, -1.7567187547683716], + [2.217665433883667, 5.368137359619141], + [-6.528665065765381, 2.308039426803589], + [2.678802490234375, 1.0851269960403442], + [1.923137903213501, 5.618445873260498], + [-6.906482219696045, 8.564427375793457], + [-0.056876011192798615, 1.332109808921814], + [-5.891845703125, -0.9270123839378357], + [-2.603750467300415, 1.6202934980392456], + [2.014765977859497, 4.286206245422363], + [-5.551405429840088, -3.4262168407440186], + [2.584674596786499, -8.290079116821289], + [2.314795732498169, -4.47123908996582], + [-5.436075687408447, -1.2389031648635864], + [-2.127161741256714, 1.9998704195022583], + [2.486001968383789, -7.686821937561035], + [-6.225019931793213, 1.474945306777954], + [-5.126780986785889, 6.306243896484375], + [-5.888261318206787, 7.2798566818237305], + [-8.005659103393555, -0.8207855224609375], + [6.835957050323486, -0.9429130554199219], + [-0.40125715732574463, -0.5921366810798645], + [-2.4661452770233154, 1.5873335599899292], + [1.633401870727539, -6.548953533172607], + [-7.385148525238037, -1.0477969646453857], + [5.434789180755615, -1.0683263540267944], + [-1.0935297012329102, 8.947606086730957], + [8.744393348693848, -2.312481164932251], + [8.512162208557129, -2.383100748062134], + [-0.48739415407180786, 8.845027923583984], + [-4.723633766174316, 2.478757381439209], + [-1.6451144218444824, 2.068957567214966], + [-2.0543458461761475, -0.7614682912826538], + [-3.7966973781585693, -1.3207406997680664], + [2.7598938941955566, -4.189531326293945], + [-0.18860182166099548, -1.0285584926605225], + [-4.223463535308838, -3.0010428428649902], + [4.628890514373779, -0.7409838438034058], + [-4.7603230476379395, -3.2861337661743164], + [-5.154980659484863, -2.891866445541382], + [-5.92997407913208, -2.178797721862793], + [-4.830916881561279, -3.690655469894409], + [9.83327579498291, -2.7427892684936523], + [7.410457611083984, -1.6110697984695435], + [1.9712250232696533, -0.48757654428482056], + [5.385159969329834, -2.124488592147827], + [-0.3113521337509155, 9.506963729858398], + [2.63024640083313, -3.8483355045318604], + [-6.646325588226318, 8.005960464477539], + [-3.214155435562134, -3.46388840675354], + [-5.943541049957275, 5.774891376495361], + [2.7630484104156494, -6.2823686599731445], + [-6.241359710693359, -2.4993295669555664], + [-7.337278366088867, -1.1048911809921265], + [2.4561595916748047, -8.551029205322266], + [7.538020610809326, -1.8952361345291138], + [0.325103759765625, 4.973876953125], + [3.240792989730835, -5.099631309509277], + [-0.2576447129249573, 9.563554763793945], + [-5.334745407104492, -3.0969269275665283], + [1.7981233596801758, 4.597400665283203], + [9.637762069702148, -2.5933566093444824], + [1.3660249710083008, -6.798822402954102], + [1.3383485078811646, -0.019093845039606094], + [9.892304420471191, -2.714857339859009], + [5.751936912536621, -1.1882086992263794], + [3.238337278366089, 1.5048483610153198], + [-4.0763397216796875, -1.7655823230743408], + [1.773646593093872, -6.005708694458008], + [2.6311380863189697, -5.708776950836182], + [-2.7553834915161133, 0.8982908725738525], + [2.3731207847595215, -8.127656936645508], + [-5.867996692657471, -2.4169223308563232], + [-2.8778886795043945, 2.985874652862549], + [-7.1216535568237305, 8.94395637512207], + [-5.766401290893555, 6.683443069458008], + [-2.330404758453369, -0.5821861028671265], + [1.8356776237487793, 5.769624710083008], + [6.697213172912598, -5.004207134246826], + [4.257114887237549, -0.420085608959198], + [-4.0975117683410645, -3.5209336280822754], + [-6.643005847930908, -1.9288822412490845], + [-3.021681547164917, -3.707604169845581], + [-4.153656482696533, -1.4549823999404907], + [-2.16158127784729, 1.6628838777542114], + [-4.954789638519287, -2.4426777362823486], + [2.6981475353240967, -4.630690097808838], + [7.147512912750244, -1.7231714725494385], + [-2.7494657039642334, 2.176490306854248], + [-4.07036828994751, 4.431330680847168], + [-8.944201469421387, -1.1460658311843872], + [-5.281362533569336, -2.9341204166412354], + [-4.99447774887085, -3.6453850269317627], + [-0.3688167929649353, 9.656441688537598], + [5.322357654571533, -0.9164941310882568], + [3.270803689956665, -4.895042419433594], + [0.257000207901001, -0.4692710340023041], + [-5.363603115081787, 6.246256351470947], + [3.8457181453704834, -3.4393980503082275], + [4.586650371551514, -1.0473840236663818], + [-5.832788467407227, 2.9773080348968506], + [5.6945319175720215, -1.2189394235610962], + [2.015061140060425, 6.008739471435547], + [7.985764980316162, -1.6046913862228394], + [-2.4661710262298584, 6.174617767333984], + [5.498927593231201, -1.027750849723816], + [-5.016198635101318, -3.969223737716675], + [-4.618527412414551, -1.5565311908721924], + [-4.3776021003723145, -5.591089725494385], + [5.378281116485596, 7.582356929779053], + [-5.77792501449585, 4.554882049560547], + [2.363201379776001, 5.659409523010254], + [2.6978752613067627, -4.017212390899658], + [1.0285106897354126, 0.5842834115028381], + [-6.692599773406982, 8.140290260314941], + [1.3542747497558594, -7.61358118057251], + [-2.346762180328369, 0.5372071266174316], + [-6.623505115509033, -2.5903844833374023], + [-5.014079570770264, -5.529150009155273], + [-3.1990439891815186, -1.8070247173309326], + [-5.25695276260376, -1.032723069190979], + [-2.648322820663452, -4.414918899536133], + [7.503901481628418, -1.247370719909668], + [1.7622894048690796, -3.46138072013855], + [-5.594531536102295, 5.480258464813232], + [-3.27302622795105, -1.2536860704421997], + [-5.183366298675537, -3.0637125968933105], + [1.8796308040618896, 5.582791328430176], + [4.948329448699951, 6.912554740905762], + [3.1757798194885254, -4.90647029876709], + [-3.7235326766967773, -4.200788497924805], + [-0.9613298177719116, 9.868640899658203], + [-2.624268054962158, 2.0127320289611816], + [5.954891681671143, -1.192271113395691], + [-3.2998247146606445, -2.8963191509246826], + [2.9590697288513184, -4.653975486755371], + [-2.31140398979187, 2.1866471767425537], + [-8.16025161743164, 9.945125579833984], + [0.17729836702346802, -0.1977539360523224], + [-3.7351934909820557, -2.125192165374756], + [8.413527488708496, -2.106215238571167], + [9.565754890441895, -2.6955347061157227], + [-2.231924295425415, 0.26591956615448], + [-3.452819585800171, -1.8994823694229126], + [1.3538355827331543, 0.14072799682617188], + [1.6908766031265259, 5.34787654876709], + [-2.494889974594116, 1.785382628440857], + [1.8931200504302979, -6.197169780731201], + [-0.07605922967195511, 9.360109329223633], + [0.9476715922355652, -7.123794078826904], + [8.995220184326172, -2.494050979614258], + [-0.5597164034843445, 9.255705833435059], + [1.473360538482666, 5.233373165130615], + [-3.4405019283294678, -2.8070249557495117], + [-6.18053674697876, 7.297787189483643], + [-2.2444355487823486, 0.32713210582733154], + [2.5905721187591553, -4.534180641174316], + [2.1885182857513428, 4.5842742919921875], + [-0.31815218925476074, 10.012810707092285], + [-3.0474612712860107, -2.292591094970703], + [-5.194841384887695, -2.88751482963562], + [7.347559452056885, -1.6076432466506958], + [-0.7567740082740784, -0.5702745914459229], + [-4.788095474243164, 6.686858654022217], + [1.1867579221725464, -6.7350006103515625], + [-4.551280498504639, 4.720091819763184], + [-5.652050971984863, 6.869375228881836], + [-4.763618469238281, 3.546783685684204], + [-6.562296390533447, 7.464649677276611], + [-2.9332191944122314, -1.6447478532791138], + [2.770191192626953, 1.0683515071868896], + [-2.096357822418213, 2.1343326568603516], + [2.1418404579162598, -3.819528818130493], + [0.2017883062362671, 5.231225967407227], + [-5.670076847076416, 5.065549850463867], + [-0.7656589150428772, 9.580565452575684], + [-2.6905694007873535, 1.7648842334747314], + [1.5351264476776123, 5.453930854797363], + [6.219621658325195, -1.4352658987045288], + [3.051546812057495, -2.814016819000244], + [-2.0410215854644775, 1.6714189052581787], + [-4.6597466468811035, 2.1688530445098877], + [7.725132465362549, -1.9151885509490967], + [9.097583770751953, -2.5813510417938232], + [1.3789541721343994, -7.542630195617676], + [1.9943110942840576, -7.25727653503418], + [7.688165664672852, -1.8788082599639893], + [-4.951390266418457, -1.7229670286178589], + [4.982339382171631, -1.6288092136383057], + [2.272055149078369, -6.127754211425781], + [-6.851464748382568, 8.356201171875], + [1.7433037757873535, -7.640649795532227], + [-2.6530282497406006, 1.779526948928833], + [-4.460294246673584, -1.9713451862335205], + [-0.28649431467056274, 8.775018692016602], + [-6.249505043029785, -1.8786648511886597], + [-5.3566765785217285, -3.695277452468872], + [-5.9258246421813965, 5.312225818634033], + [4.614678382873535, 6.817522048950195], + [-0.11108458787202835, 0.16011469066143036], + [9.135737419128418, -2.5161101818084717], + [2.925915479660034, 1.1615049839019775], + [-3.717238187789917, 2.2900068759918213], + [1.809255838394165, -6.0843505859375], + [-1.6280720233917236, 0.7604732513427734], + [1.6809693574905396, -7.6577863693237305], + [0.7190430164337158, 0.7745074033737183], + [3.8138034343719482, -7.16431999206543], + [-4.641273498535156, -2.9868991374969482], + [-0.36077171564102173, 10.337366104125977], + [-0.17570936679840088, 0.3615516722202301], + [-3.5971977710723877, -1.2567789554595947], + [-0.2167077660560608, 9.938638687133789], + [4.846322536468506, 7.05100154876709], + [-5.433492183685303, 7.722696304321289], + [-6.1117377281188965, 6.1270222663879395], + [-0.11831612139940262, 9.989206314086914], + [1.4742088317871094, 4.4305500984191895], + [-6.554208755493164, -2.3580706119537354], + [-4.5277509689331055, -2.233774185180664], + [2.558971881866455, -7.419611930847168], + [-7.0804924964904785, -1.6852089166641235], + [-2.708498239517212, -3.36602783203125], + [-5.502858638763428, 8.111886024475098], + [-0.8894455432891846, 8.099968910217285], + [2.824284553527832, -4.23274564743042], + [-0.7964984774589539, 5.579682350158691], + [1.7586824893951416, 0.874076247215271], + [0.9197289347648621, 8.391246795654297], + [0.9628412127494812, -6.113547325134277], + [2.5442850589752197, 1.615448236465454], + [-5.006471633911133, 6.958993434906006], + [2.3146016597747803, -4.591687202453613], + [7.275877475738525, -4.095416069030762], + [-5.261361122131348, -3.1714868545532227], + [2.091395378112793, 5.754636764526367], + [2.4092729091644287, -7.282716751098633], + [9.312185287475586, -2.502906084060669], + [1.3833608627319336, -5.788003444671631], + [-5.418356895446777, -3.3002736568450928], + [-1.156623363494873, 1.3137518167495728], + [1.8063489198684692, -5.004298210144043], + [-7.160458564758301, 8.674250602722168], + [-5.829375743865967, 6.861259937286377], + [-0.3156609535217285, 9.438858032226562], + [0.1690702736377716, -0.850775420665741], + [-2.560338258743286, 1.935486078262329], + [-6.123947620391846, 7.265985488891602], + [-5.416950702667236, 5.178643703460693], + [10.030901908874512, -2.790088415145874], + [9.535088539123535, -2.670515298843384], + [-2.575326442718506, 5.667280197143555], + [2.4121077060699463, 6.279993057250977], + [8.254755973815918, -2.434230089187622], + [2.5741288661956787, 4.178485870361328], + [2.6397879123687744, 6.099198818206787], + [-2.6656200885772705, 0.585728645324707], + [1.8104705810546875, -7.638313293457031], + [-6.086479663848877, 3.144407272338867], + [-0.2819949984550476, 9.47397232055664], + [-5.280910968780518, -3.4143059253692627], + [-4.638112545013428, 3.116180658340454], + [2.646122694015503, -4.318143367767334], + [-3.6675500869750977, -2.384601354598999], + [-4.994317531585693, -4.3549041748046875], + [-1.722730278968811, 1.127830147743225], + [-3.402863025665283, 1.7492339611053467], + [2.3435375690460205, -6.673192024230957], + [-0.12705257534980774, 1.2325748205184937], + [-4.678767681121826, 2.746117353439331], + [5.511725902557373, -1.14568293094635], + [6.303496360778809, -2.528296709060669], + [-6.5651373863220215, 7.798348426818848], + [-3.3800785541534424, -3.503803014755249], + [-0.47125935554504395, 9.729972839355469], + [1.3500208854675293, -6.389513969421387], + [4.224736213684082, -2.787829637527466], + [1.723602294921875, -8.226028442382812], + [-0.7282267808914185, -0.48532915115356445], + [-7.0070013999938965, -2.786858320236206], + [-4.605746746063232, 5.881418704986572], + [-4.593454360961914, -2.0517923831939697], + [-5.25988245010376, -3.3990638256073], + [3.1094372272491455, -4.909146785736084], + [-5.643225193023682, 5.166632652282715], + [-5.014552116394043, -1.7586556673049927], + [-4.305736541748047, -2.8056209087371826], + [-7.106448650360107, -0.7840174436569214], + [0.4149702191352844, -0.3116375803947449], + [-2.4719676971435547, 1.9916249513626099], + [8.411601066589355, -2.37553071975708], + [-0.01143086701631546, 11.236947059631348], + [8.451435089111328, -2.221120595932007], + [0.28589698672294617, -0.4715149998664856], + [2.7990684509277344, -4.647171974182129], + [-1.0247900485992432, 3.9162962436676025], + [8.44997787475586, -2.408823013305664], + [1.9827990531921387, -3.162019968032837], + [7.487545013427734, -1.8065211772918701], + [2.8714919090270996, -4.47238826751709], + [2.731860399246216, -4.4207258224487305], + [-5.262441158294678, 6.181845664978027], + [2.4451382160186768, 5.407151222229004], + [-2.4130032062530518, 2.0766117572784424], + [-3.455493211746216, -1.9008101224899292], + [8.949195861816406, -2.7276134490966797], + [6.3888349533081055, -2.7919743061065674], + [1.2578551769256592, -6.918244361877441], + [-5.000442028045654, 1.9582387208938599], + [1.8398767709732056, 5.574251174926758], + [-2.529493570327759, -2.4845144748687744], + [-4.68048620223999, 6.942294120788574], + [8.360919952392578, -2.1836483478546143], + [-3.9590489864349365, 5.581878662109375], + [5.158564567565918, -5.456336498260498], + [-3.928765296936035, -0.12102067470550537], + [-1.995168924331665, 2.541020631790161], + [-4.962117671966553, -0.3738343417644501], + [3.1834394931793213, 6.383358001708984], + [-4.055788516998291, 5.981671333312988], + [-0.518653392791748, 9.112932205200195], + [-1.8430845737457275, 2.4241952896118164], + [2.3965017795562744, -7.165475845336914], + [2.649714946746826, -4.307600021362305], + [-3.8657946586608887, -1.5638881921768188], + [-4.636178493499756, -2.458590030670166], + [-2.5608558654785156, 2.3231754302978516], + [-5.584728717803955, -5.148370265960693], + [5.414749622344971, -1.1821976900100708], + [-5.162501811981201, 2.4247896671295166], + [0.6079855561256409, -0.40054547786712646], + [-2.444136381149292, 1.7429324388504028], + [3.2031922340393066, -4.798256874084473], + [-4.191345691680908, -2.9336910247802734], + [-5.673245429992676, -2.9368269443511963], + [-6.163629055023193, 7.80485725402832], + [-2.502140760421753, 6.527843475341797], + [-0.5254061818122864, 8.962060928344727], + [-2.0969269275665283, 2.1069111824035645], + [1.9127564430236816, 4.7876739501953125], + [-4.953246593475342, -0.7946568131446838], + [-2.0061187744140625, 2.5508456230163574], + [-0.3545982241630554, 10.107194900512695], + [-3.776785135269165, -2.4355218410491943], + [-1.1831251382827759, -1.450632095336914], + [-2.033524990081787, 2.524449586868286], + [-5.286773204803467, -4.17722225189209], + [-0.21965736150741577, 9.6827974319458], + [-5.853390216827393, 1.4794484376907349], + [5.514223575592041, -1.1297622919082642], + [-5.897691249847412, 6.520388603210449], + [-2.0060670375823975, 2.3101887702941895], + [-2.5043580532073975, -3.4573633670806885], + [-3.468388795852661, -2.0948493480682373], + [3.1034722328186035, -4.858210563659668], + [-1.6289321184158325, 0.23418325185775757], + [1.7643024921417236, -8.79211711883545], + [0.12988543510437012, 9.671045303344727], + [-4.725133419036865, -5.455723762512207], + [-4.342689514160156, -2.571286201477051], + [-6.524959564208984, -1.1409622430801392], + [-2.2347583770751953, -0.8382555246353149], + [6.113600730895996, -5.374371528625488], + [-5.08452844619751, 0.5547909736633301], + [-4.342251300811768, -2.7245516777038574], + [-7.6523027420043945, 9.349668502807617], + [1.9650237560272217, -4.8043365478515625], + [-7.485083103179932, -2.030715227127075], + [-3.26263165473938, -1.378832221031189], + [3.0825035572052, -4.794671535491943], + [-0.9578135013580322, 1.3429185152053833], + [1.998443365097046, 5.433910369873047], + [5.526546478271484, -1.3716679811477661], + [-2.390016794204712, 1.5997419357299805], + [-0.2735486626625061, 9.199108123779297], + [-3.048036813735962, 2.9715871810913086], + [1.9562318325042725, -9.601409912109375], + [2.6182174682617188, -4.025396823883057], + [-0.27337759733200073, 9.697948455810547], + [-5.722418308258057, -2.6495823860168457], + [-5.497103691101074, 2.1680665016174316], + [1.9432344436645508, -9.335195541381836], + [-5.298529624938965, -2.0108890533447266], + [1.3137822151184082, -6.826351165771484], + [-8.419074058532715, -1.1630438566207886], + [1.6178531646728516, -6.345824241638184], + [-0.3288135528564453, 9.978424072265625], + [-4.936534881591797, 7.348244667053223], + [6.7256646156311035, -5.599827766418457], + [-3.8094682693481445, -1.9723012447357178], + [-5.221680164337158, -3.2944576740264893], + [-2.4029154777526855, 1.673944115638733], + [-5.244546413421631, 0.9117518663406372], + [-3.5294272899627686, 0.9517320394515991], + [-5.609993934631348, -4.67366361618042], + [-2.8862764835357666, -2.5698702335357666], + [2.8424088954925537, -4.565185546875], + [9.669472694396973, -2.702683925628662], + [-1.317194938659668, 7.744433403015137], + [1.9748568534851074, -4.0205535888671875], + [-5.304594993591309, -3.6703221797943115], + [0.5740612149238586, -1.0484198331832886], + [-6.916027069091797, 8.760336875915527], + [-4.929707050323486, 1.4196159839630127], + [-5.087864398956299, -4.107507228851318], + [2.906710386276245, -6.367375373840332], + [-1.3077392578125, 1.2010830640792847], + [-0.4319433271884918, -1.8441425561904907], + [4.430912494659424, -0.8791780471801758], + [-2.5445501804351807, 2.011939287185669], + [-0.9757842421531677, -0.6314073204994202], + [-7.148772716522217, 8.712653160095215], + [-5.843902111053467, 7.543085098266602], + [-2.664530038833618, -0.8086066246032715], + [2.566995620727539, 0.4606069326400757], + [-2.9358086585998535, -1.038907766342163], + [1.9221107959747314, -6.939964771270752], + [-3.8550360202789307, 3.234488010406494], + [2.75032901763916, -7.346015930175781], + [-5.345808506011963, -2.692934989929199], + [2.680802583694458, -4.099475383758545], + [-4.995119571685791, 2.4666764736175537], + [5.853879928588867, -2.5234556198120117], + [-0.6443807482719421, 11.933296203613281], + [1.8624215126037598, 3.5236620903015137], + [-0.24539393186569214, 9.674803733825684], + [1.033071517944336, 0.5814483165740967], + [1.950554609298706, 5.557499885559082], + [5.651757717132568, -2.1422314643859863], + [-3.762392282485962, 5.732560634613037], + [6.367963790893555, -3.300508975982666], + [-5.161213397979736, -2.30312442779541], + [-7.3528547286987305, -1.0925536155700684], + [-0.5369880795478821, -1.0783494710922241], + [0.8566275238990784, 4.622783660888672], + [-5.040516376495361, 1.579291820526123], + [-4.511541843414307, -4.405955791473389], + [-6.917242527008057, -1.159438133239746], + [-0.8840146064758301, 9.171182632446289], + [4.89959192276001, -3.3330531120300293], + [-6.593611240386963, 8.775806427001953], + [-0.5885593295097351, 9.146705627441406], + [-5.537827968597412, 1.1231942176818848], + [0.6092641949653625, -0.8850610852241516], + [-0.40910524129867554, 9.121271133422852], + [1.5137827396392822, -3.1256296634674072], + [8.9238862991333, -2.5260379314422607], + [1.874314785003662, 0.5192489624023438], + [-0.24393683671951294, -0.9542871713638306], + [1.7790113687515259, 5.855559349060059], + [-0.35072118043899536, 10.348875045776367], + [-4.06588077545166, -3.7501730918884277], + [9.26134204864502, -2.5948610305786133], + [2.2805750370025635, -3.9965415000915527], + [-5.482175350189209, -3.7868237495422363], + [-5.976353645324707, 7.568490505218506], + [-4.471927165985107, 3.0748138427734375], + [-0.42768537998199463, 10.636248588562012], + [0.3115771412849426, 0.0183982215821743], + [-4.910181522369385, 2.1973323822021484], + [-0.4273532032966614, 9.434309005737305], + [-2.28541898727417, 1.366459608078003], + [-2.6230905055999756, 1.8644644021987915], + [-4.761581897735596, -2.368957996368408], + [-0.9480577707290649, 5.292265892028809], + [-0.9195687770843506, 8.113186836242676], + [-2.6081995964050293, -0.46540743112564087], + [1.4490708112716675, -3.348468065261841], + [-2.1270346641540527, 2.099043846130371], + [-4.547877788543701, -3.114112377166748], + [0.0810340866446495, 0.440204381942749], + [-0.20935744047164917, 10.201763153076172], + [-6.543032169342041, -0.3744293451309204], + [-5.20674467086792, -1.3283283710479736], + [-7.587292194366455, -1.2323166131973267], + [3.204756498336792, -0.8091211318969727], + [-1.4293924570083618, -2.094028949737549], + [-5.266638278961182, -3.0402867794036865], + [-0.27316761016845703, -1.0711396932601929], + [4.452495098114014, 6.916629791259766], + [9.882099151611328, -2.7450649738311768], + [-5.89582633972168, 0.6633584499359131], + [6.070718765258789, -1.2785749435424805], + [-5.1737380027771, -2.0203146934509277], + [1.166311502456665, 5.131952285766602], + [6.663834095001221, -3.34740948677063], + [-0.4719175696372986, 11.954787254333496], + [7.004665851593018, -2.0997750759124756], + [-4.050637722015381, -2.317880630493164], + [-2.5766146183013916, 1.5195698738098145], + [0.7270643711090088, 5.307091236114502], + [2.9714787006378174, 6.019201278686523], + [-6.166588306427002, 0.3790334463119507], + [0.39893344044685364, 0.8077641725540161], + [-6.129336357116699, 7.4429426193237305], + [1.894446611404419, 5.440981864929199], + [-1.4525537490844727, -0.662329375743866], + [2.053750991821289, -7.28670597076416], + [2.0518107414245605, 4.859123229980469], + [1.8570449352264404, 5.653355121612549], + [-2.873913288116455, -4.029940128326416], + [-2.102299690246582, 0.5691925287246704], + [-2.334980010986328, 0.7574007511138916], + [-0.32101014256477356, -0.38234657049179077], + [8.5233154296875, -2.2149314880371094], + [-6.359039783477783, -2.628404140472412], + [0.05595725029706955, 9.740370750427246], + [-6.845274448394775, -1.041028618812561], + [-4.0564703941345215, -3.1073434352874756], + [-0.2797946333885193, 10.854736328125], + [-5.00369119644165, 3.8214774131774902], + [3.607051134109497, -3.292254686355591], + [-0.5476312637329102, 10.857305526733398], + [-0.3015372157096863, 10.239516258239746], + [-3.0941007137298584, 6.327696323394775], + [0.36242425441741943, -2.343961000442505], + [-7.125840663909912, -1.0239932537078857], + [-1.0940126180648804, -1.6473244428634644], + [-4.167735576629639, 3.4671316146850586], + [4.908236026763916, 1.9625519514083862], + [9.376564979553223, -2.628079891204834], + [-0.43295687437057495, 10.836906433105469], + [-0.6587971448898315, 8.66537094116211], + [-6.671506881713867, 7.281103134155273], + [-3.7859086990356445, -3.5366365909576416], + [3.1034200191497803, -4.976646423339844], + [-2.5616447925567627, 1.1469298601150513], + [5.67417573928833, -1.590762972831726], + [3.580289125442505, 1.354326605796814], + [8.681801795959473, -2.3947911262512207], + [-4.664252758026123, -0.471565842628479], + [-5.412754535675049, 3.936800241470337], + [-2.108747720718384, 2.452169895172119], + [-1.9464983940124512, -3.6060702800750732], + [0.09767355769872665, -2.2689714431762695], + [-2.5453555583953857, 2.0329532623291016], + [1.3749778270721436, -7.155400276184082], + [-3.42193341255188, 3.2095696926116943], + [2.7811145782470703, -6.930182456970215], + [2.0604541301727295, -5.414135932922363], + [-4.299106597900391, -5.73103141784668], + [-4.054218769073486, -3.318058967590332], + [3.2226297855377197, 1.0971907377243042], + [2.7401020526885986, -7.1559672355651855], + [2.8619329929351807, -4.4349870681762695], + [2.639380693435669, 0.8263295292854309], + [-4.982382297515869, -3.256999969482422], + [-4.934414386749268, -1.583407998085022], + [-3.9369757175445557, -3.2075564861297607], + [-0.008314676582813263, 9.628808975219727], + [2.52093243598938, -4.529622554779053], + [-0.17639058828353882, 10.432978630065918], + [-6.065877437591553, -3.1592774391174316], + [-3.985757350921631, -1.746996283531189], + [-5.437098026275635, 1.8271077871322632], + [9.100680351257324, -2.5995962619781494], + [-4.901212215423584, 6.738513469696045], + [2.578756332397461, -4.51931095123291], + [-4.89756441116333, -2.208599805831909], + [1.6205873489379883, -7.785048961639404], + [2.203547954559326, -6.318360328674316], + [7.195690631866455, -3.706850051879883], + [-3.5779659748077393, -1.8338067531585693], + [-5.058260917663574, -2.9461238384246826], + [-6.007680892944336, 7.515954494476318], + [-0.43639901280403137, -1.2403204441070557], + [-2.119080066680908, 0.8869891166687012], + [-0.8012832403182983, -2.002596139907837], + [-1.8879984617233276, -1.6896611452102661], + [1.740874171257019, 5.0243635177612305], + [-5.000786304473877, -3.807785749435425], + [3.0472915172576904, -4.575201988220215], + [9.268594741821289, -2.6026012897491455], + [2.1278650760650635, -4.462645530700684], + [1.890419602394104, 1.5615161657333374], + [2.733349084854126, 1.087507724761963], + [-4.596530437469482, 4.874396324157715], + [-5.433994770050049, -3.3172447681427], + [-2.3033878803253174, 1.1719733476638794], + [5.403787136077881, -1.3651275634765625], + [-0.48310133814811707, -1.623918056488037], + [-0.5777391791343689, 8.699094772338867], + [2.156601667404175, 4.171095848083496], + [-3.217602014541626, -5.02769660949707], + [-4.184763431549072, -3.317164897918701], + [-3.631042242050171, -5.201916694641113], + [-4.749694347381592, -1.819153070449829], + [-1.972549557685852, 1.6563847064971924], + [-2.3729541301727295, 2.18219256401062], + [-5.0857038497924805, -3.594644784927368], + [0.2902016043663025, -5.054802417755127], + [0.013988398015499115, -0.662041962146759], + [7.90273904800415, -3.0679728984832764], + [-3.274059295654297, 3.546330213546753], + [-5.589430809020996, -3.306833505630493], + [-9.674839973449707, -0.9201980829238892], + [-2.1094882488250732, -0.18542081117630005], + [2.9058806896209717, -4.374758720397949], + [-4.50917387008667, -4.473238945007324], + [-0.2847254276275635, 9.318649291992188], + [-6.256813049316406, 7.28961706161499], + [-4.351150035858154, -2.771557331085205], + [1.840402364730835, -3.441148281097412], + [-3.670377016067505, 3.293617010116577], + [2.6807968616485596, -5.081360340118408], + [-2.1073477268218994, 6.133411407470703], + [-2.2889039516448975, 1.3345106840133667], + [3.5414977073669434, 1.3621689081192017], + [-5.182148456573486, 6.558011531829834], + [1.2466585636138916, -7.617156028747559], + [-5.672181129455566, 5.7186689376831055], + [-5.1290693283081055, -5.283662796020508], + [7.834888458251953, -2.1282551288604736], + [2.3985350131988525, -4.983644008636475], + [-2.679306745529175, 2.816399097442627], + [2.988741636276245, -4.511411666870117], + [-5.187620639801025, -2.433189868927002], + [-4.790043354034424, -3.2226908206939697], + [-4.104462146759033, 3.8191616535186768], + [-4.455725193023682, -2.3600962162017822], + [1.0307061672210693, 6.349858283996582], + [-8.916401863098145, -1.0608627796173096], + [2.8011603355407715, -4.228897571563721], + [-9.33964729309082, -1.2525006532669067], + [-2.112896203994751, 2.1112332344055176], + [-0.46321380138397217, 9.72723388671875], + [-2.5665223598480225, 2.0209083557128906], + [-5.620279788970947, 0.9109636545181274], + [-4.58207368850708, -3.7281320095062256], + [-5.52193546295166, 7.964603424072266], + [-5.688144207000732, -2.2483675479888916], + [8.226746559143066, -2.1713597774505615], + [-0.6944282054901123, 0.6882684230804443], + [2.2644600868225098, 5.695553779602051], + [9.583989143371582, -2.5304665565490723], + [-0.29490727186203003, 10.849298477172852], + [-4.371903419494629, -3.0785815715789795], + [-5.596896648406982, 7.796563148498535], + [-2.6285173892974854, 1.0297634601593018], + [-8.2870454788208, -2.077561616897583], + [-6.603993892669678, 8.507791519165039], + [9.577750205993652, -2.576540470123291], + [4.371667385101318, 6.5545454025268555], + [-4.844772815704346, -5.459942817687988], + [6.903478145599365, -1.348301887512207], + [2.06553053855896, 5.048013687133789], + [-3.2531940937042236, 3.149902582168579], + [-3.993705987930298, -3.4147417545318604], + [-6.721339225769043, -2.113879680633545], + [-4.628978252410889, -1.6937663555145264], + [2.3637521266937256, -1.8347907066345215], + [-1.7385144233703613, -2.305088758468628], + [-0.19899767637252808, 9.68056869506836], + [-2.5525424480438232, 2.340489387512207], + [2.125945806503296, -3.417888879776001], + [-0.2833089232444763, 10.084209442138672], + [1.6760884523391724, -2.9411098957061768], + [2.516883611679077, 6.283016204833984], + [-0.33264970779418945, 10.3147554397583], + [-3.9709479808807373, -1.9291714429855347], + [2.795644998550415, -4.470470905303955], + [-4.397776126861572, -3.328789472579956], + [-0.055095918476581573, 5.050217628479004], + [-1.4199610948562622, 10.017959594726562], + [-2.9114279747009277, 3.1825287342071533], + [-3.7613563537597656, -2.9544320106506348], + [0.7960320115089417, -5.848826885223389], + [-4.781872272491455, -2.064297914505005], + [1.9626376628875732, 5.222179412841797], + [-7.1054863929748535, -1.3342491388320923], + [1.9222753047943115, -9.364990234375], + [-4.799480438232422, -1.4295748472213745], + [-2.4401793479919434, -0.4684079885482788], + [-0.5759868621826172, 9.145283699035645], + [-5.284235000610352, -2.985114812850952], + [-3.812394857406616, -3.9633824825286865], + [-0.40164870023727417, 11.648943901062012], + [-5.340766429901123, -3.110976219177246], + [3.131844997406006, -4.692827224731445], + [-5.492312908172607, -3.6228721141815186], + [-2.429969549179077, 2.0253355503082275], + [-4.468873977661133, -3.652618169784546], + [-4.717635631561279, -1.335137128829956], + [-1.6331946849822998, -2.713282346725464], + [2.6319243907928467, -3.946300745010376], + [-4.9158244132995605, -3.259986639022827], + [-4.731321811676025, 6.254796981811523], + [-1.6686595678329468, 1.3929177522659302], + [-0.3110473155975342, 10.644451141357422], + [8.50252914428711, -2.328658103942871], + [-3.772472858428955, 5.80415153503418], + [-4.465356349945068, 0.06623774766921997], + [-5.019671440124512, -3.260258197784424], + [-2.477111339569092, 1.9127689599990845], + [5.611661434173584, -5.165753364562988], + [-5.994885444641113, -2.782334327697754], + [-5.142840385437012, 1.4519615173339844], + [-2.4354395866394043, 1.8272594213485718], + [3.177637815475464, -4.7520751953125], + [-5.753582000732422, -5.9155049324035645], + [-2.5612564086914062, -1.914019227027893], + [1.4239915609359741, -8.314189910888672], + [6.507687091827393, -3.209735631942749], + [2.039172649383545, -5.384777545928955], + [0.9123920798301697, -5.666837692260742], + [-5.928704738616943, 7.229861259460449], + [-0.7595780491828918, 9.418420791625977], + [2.3838798999786377, 1.9880033731460571], + [1.5885064601898193, -7.346951484680176], + [-3.77057147026062, -1.2425062656402588], + [2.531466245651245, -0.9785201549530029], + [-2.4982895851135254, 1.1174451112747192], + [-0.4370929002761841, 8.476003646850586], + [-4.180668354034424, -1.2510799169540405], + [-0.23031437397003174, 9.762495040893555], + [0.4411327838897705, 10.149131774902344], + [2.854614496231079, -7.519033432006836], + [3.10850191116333, -4.776985168457031], + [0.39092230796813965, 4.777360439300537], + [7.336835861206055, -1.9894553422927856], + [-4.687570095062256, 3.7955257892608643], + [-5.5184550285339355, 1.9359599351882935], + [-3.156996488571167, 4.761068344116211], + [-0.4250149726867676, 9.454156875610352], + [1.6444377899169922, -8.326885223388672], + [-4.14773416519165, -2.6965601444244385], + [-2.7880632877349854, 5.685245990753174], + [-0.4440540075302124, 9.65938949584961], + [-0.552878201007843, 9.009989738464355], + [-0.8330757021903992, 5.182509899139404], + [2.086611270904541, -3.414738655090332], + [3.025334596633911, 0.8938745260238647], + [-3.950962781906128, -2.7081058025360107], + [-2.1390202045440674, 1.1931898593902588], + [2.0804967880249023, -8.639328002929688], + [0.004702053964138031, 0.5851045846939087], + [-3.958143949508667, -1.5197219848632812], + [-3.6496312618255615, -4.218231678009033], + [2.2907512187957764, -6.400196075439453], + [-0.31439000368118286, 10.465496063232422], + [1.400282859802246, -6.062241554260254], + [3.089918375015259, -4.676136016845703], + [5.788838863372803, -1.8592592477798462], + [-5.217361927032471, 6.271679401397705], + [5.631251335144043, -3.6032018661499023], + [-2.7693190574645996, -1.4028360843658447], + [-4.626811504364014, -4.162869930267334], + [-4.8948445320129395, -1.522476315498352], + [-5.218246936798096, 6.790063858032227], + [-2.5377771854400635, 2.7309978008270264], + [0.1206636056303978, -0.5934146642684937], + [7.788583755493164, -1.9670246839523315], + [-3.5909502506256104, -2.3042960166931152], + [-6.482931613922119, -2.3195488452911377], + [-2.880589008331299, 2.334172248840332], + [5.532044410705566, -0.08686113357543945], + [-3.9904816150665283, 5.951444625854492], + [-5.374783515930176, 6.2147417068481445], + [1.4731740951538086, 5.037199974060059], + [-7.395008563995361, 9.129481315612793], + [0.05474381893873215, 7.24733829498291], + [9.66381549835205, -2.6974198818206787], + [-4.626201152801514, -0.5475183129310608], + [2.076361656188965, 1.5407110452651978], + [-2.734279155731201, -1.9352048635482788], + [-7.185629844665527, 8.804098129272461], + [-0.43322205543518066, 11.60325813293457], + [3.241133213043213, -4.844669342041016], + [3.224388360977173, -4.819721698760986], + [-1.1063129901885986, 8.420248031616211], + [-7.299544811248779, -2.235771417617798], + [-2.454983949661255, 0.7847467064857483], + [-0.1800849735736847, -1.2124239206314087], + [-6.1983723640441895, -0.9946596622467041], + [2.8393356800079346, -4.23931360244751], + [1.6281262636184692, 0.6850773096084595], + [-4.708405017852783, -2.5278711318969727], + [-0.411077618598938, 10.863640785217285], + [-4.354879856109619, -3.36448335647583], + [0.28166162967681885, -0.4455435276031494], + [-3.2972331047058105, -2.736926794052124], + [-0.21884208917617798, 9.642454147338867], + [-5.672397613525391, 3.135126829147339], + [-8.525177001953125, -1.8265725374221802], + [-2.9385101795196533, -2.390658378601074], + [0.7842069268226624, -7.130995750427246], + [2.5535528659820557, -4.157082557678223], + [8.213608741760254, -2.186875581741333], + [8.956791877746582, -2.618497610092163], + [-0.24884992837905884, 9.765595436096191], + [-6.847784519195557, -0.8456093072891235], + [-5.121596336364746, -3.181814193725586], + [2.898782968521118, -4.993472099304199], + [-5.348501205444336, 6.127293586730957], + [6.786934852600098, -1.7086880207061768], + [-5.1406989097595215, -3.3534388542175293], + [3.184615135192871, -4.761532783508301], + [-0.23906511068344116, 9.546615600585938], + [-5.683351993560791, 5.773324012756348], + [-2.422865152359009, 1.7527713775634766], + [-2.146193265914917, 0.8179169297218323], + [-5.033410549163818, -3.4830241203308105], + [-5.735508441925049, -1.9036158323287964], + [-5.952620506286621, 3.1373391151428223], + [9.919364929199219, -2.739166736602783], + [-5.5135178565979, 5.301904678344727], + [2.1796247959136963, 6.018809795379639], + [-2.3303418159484863, 1.8410391807556152], + [3.2147066593170166, -4.727095127105713], + [3.0219297409057617, -4.536080360412598], + [1.5953782796859741, -4.079083442687988], + [0.16213959455490112, 9.582845687866211], + [-3.5059964656829834, 5.962434768676758], + [-4.473143100738525, -2.6985528469085693], + [-3.7070908546447754, 5.647642135620117], + [-0.26620781421661377, 10.023821830749512], + [-6.0295844078063965, -0.780950665473938], + [3.133718729019165, -4.7412543296813965], + [-1.9632518291473389, 2.0879764556884766], + [-4.9728240966796875, -2.485248327255249], + [0.8791598081588745, -7.135828971862793], + [-4.0352325439453125, -3.082500696182251], + [2.1731512546539307, -5.564114570617676], + [-3.393216371536255, -2.705012559890747], + [2.546865463256836, 1.0028327703475952], + [-7.551965236663818, -2.3049638271331787], + [-1.4669462442398071, -1.4974292516708374], + [-6.3547468185424805, 7.771937370300293], + [8.458901405334473, -2.3307945728302], + [-0.20249903202056885, 10.618942260742188], + [-0.9392109513282776, 4.662172794342041], + [-0.37609922885894775, 9.369911193847656], + [2.9018678665161133, -5.916459083557129], + [-3.8263933658599854, -2.546077013015747], + [3.047175407409668, -4.572812080383301], + [-1.7930904626846313, 1.0196683406829834], + [-5.916286945343018, -3.167099952697754], + [0.9068977236747742, 1.4169915914535522], + [-0.30658644437789917, 8.846914291381836], + [2.418879747390747, -7.194294452667236], + [5.222930908203125, 7.501534938812256], + [-0.39661842584609985, 11.324426651000977], + [-4.167113304138184, 5.76412296295166], + [-3.3350167274475098, -3.7289066314697266], + [-1.6622614860534668, 1.5429868698120117], + [3.5925791263580322, -1.0329158306121826], + [8.952452659606934, -2.334101915359497], + [-2.4898576736450195, 2.0403175354003906], + [-0.2325180172920227, -1.38975989818573], + [1.0601388216018677, -7.248883247375488], + [-2.164545774459839, 2.900395154953003], + [1.8352351188659668, 5.5172247886657715], + [-4.536823272705078, 2.274199962615967], + [-0.3236843943595886, 9.977727890014648], + [-6.070040702819824, 8.234159469604492], + [2.708897113800049, -4.511775970458984], + [3.105827569961548, -7.328860282897949], + [-2.351950168609619, 0.8880376219749451], + [1.6966049671173096, -8.276955604553223], + [5.238162040710449, -3.260605573654175], + [-0.06157243996858597, 10.246589660644531], + [-5.851507663726807, 1.8663686513900757], + [-0.2672290802001953, -1.2025160789489746], + [-2.8618295192718506, -1.3164011240005493], + [0.2366301417350769, 0.4503209888935089], + [-0.7231006026268005, 9.460468292236328], + [2.214510202407837, 4.050625801086426], + [-0.25824761390686035, -1.1107171773910522], + [-5.570106029510498, -2.2255241870880127], + [-6.043049335479736, 6.967591285705566], + [1.8694887161254883, -4.544950485229492], + [-4.301887512207031, -2.581763505935669], + [-4.2566399574279785, -3.017474889755249], + [-2.230407953262329, -3.5794050693511963], + [-0.7472636103630066, -0.6156988143920898], + [-5.81702995300293, -1.848656177520752], + [-5.5382513999938965, -2.391909122467041], + [1.4812796115875244, -4.8057756423950195], + [6.0908379554748535, -2.384024143218994], + [1.8805265426635742, 5.417882919311523], + [6.566343307495117, -1.1583982706069946], + [-6.179098606109619, 5.710806369781494], + [-2.2239465713500977, 0.8907884359359741], + [-0.2610207200050354, 9.67384147644043], + [0.6992215514183044, -2.309278726577759], + [2.1707074642181396, -7.407424449920654], + [6.368296146392822, -1.9173610210418701], + [-0.2879309058189392, 10.213027954101562], + [-1.1108603477478027, -1.124907374382019], + [3.0065758228302, -4.5172038078308105], + [2.209413528442383, 5.834291934967041], + [-3.8573615550994873, -1.6912468671798706], + [0.4444120526313782, -0.8953290581703186], + [5.800440311431885, -2.09708833694458], + [0.7263439297676086, 5.24921989440918], + [-2.495882987976074, 0.9157399535179138], + [-5.019657135009766, 4.349303245544434], + [-4.416409015655518, -0.9851205348968506], + [-0.5902785062789917, -0.8274420499801636], + [2.8064024448394775, -5.640674114227295], + [1.8906800746917725, 0.5521531701087952], + [-2.9235756397247314, -0.8668321967124939], + [1.8897604942321777, -7.350659370422363], + [-4.837817668914795, 0.7459992170333862], + [-2.1489362716674805, 2.964411973953247], + [-5.434739589691162, -3.251420736312866], + [-4.448612689971924, -1.6216485500335693], + [-2.870818614959717, -2.8811888694763184], + [1.8461718559265137, -5.801507949829102], + [6.302341938018799, -2.0185747146606445], + [-1.5303930044174194, -1.3582950830459595], + [-0.08069128543138504, 10.11564826965332], + [3.000354528427124, -4.529260635375977], + [-6.146457195281982, -2.2415130138397217], + [-0.6794857382774353, 7.928842067718506], + [2.4101221561431885, 5.994047164916992], + [-4.34334659576416, -2.9871127605438232], + [-5.443639278411865, -2.6051127910614014], + [8.484134674072266, -3.1965999603271484], + [-0.2733362317085266, 9.469841003417969], + [0.3487352132797241, -5.703334808349609], + [2.8545591831207275, -4.394792079925537], + [8.818191528320312, -2.4787495136260986], + [7.60056209564209, -2.8165969848632812], + [1.6526392698287964, 5.238317012786865], + [2.3848841190338135, -4.738224029541016], + [-0.5348766446113586, 9.19338607788086], + [-4.313924789428711, -4.576926231384277], + [0.372201532125473, -5.168249130249023], + [-4.612368106842041, 3.574826955795288], + [2.6396236419677734, -3.863590955734253], + [3.188732147216797, -5.043152809143066], + [9.026087760925293, -2.5143630504608154], + [-8.350014686584473, -1.1759775876998901], + [-2.1845757961273193, 2.8371660709381104], + [-0.8244525194168091, -3.1807796955108643], + [4.1435956954956055, 7.00770378112793], + [-5.068138599395752, 2.324314832687378], + [6.72260046005249, -1.4504586458206177], + [9.13520336151123, -2.575098752975464], + [-4.338488578796387, -3.4050252437591553], + [2.978316307067871, -4.4790849685668945], + [-2.9066131114959717, 3.0693182945251465], + [-5.129660129547119, 3.5698301792144775], + [-9.097734451293945, -1.4673916101455688], + [-4.875361919403076, 2.893817663192749], + [-3.149238348007202, -3.9434144496917725], + [-7.537713527679443, -1.3373744487762451], + [4.687380790710449, 6.788826942443848], + [2.561694622039795, -7.478453636169434], + [10.129542350769043, -2.8141119480133057], + [3.095115900039673, -4.650162220001221], + [-5.14926290512085, -0.20550745725631714], + [8.56566333770752, -2.652996301651001], + [7.681318759918213, -2.236722946166992], + [1.4168891906738281, -7.118249893188477], + [8.991825103759766, -2.418867588043213], + [-6.183406829833984, 3.3929545879364014], + [-1.8504822254180908, 1.6472724676132202], + [7.284310817718506, -4.032302379608154], + [3.0088794231414795, -4.654439449310303], + [-4.5762553215026855, 1.0753135681152344], + [9.281643867492676, -2.654724359512329], + [5.950382709503174, -1.0541605949401855], + [2.5813770294189453, -4.270309925079346], + [-0.19916671514511108, 10.669206619262695], + [-0.185197651386261, 10.268314361572266], + [3.1514596939086914, -4.719257831573486], + [2.857239007949829, -4.109250545501709], + [-8.021077156066895, 9.782084465026855], + [1.4716300964355469, 1.5851854085922241], + [-5.069023609161377, 6.331776142120361], + [-0.9108376502990723, -0.2537177503108978], + [2.270996570587158, 5.869212627410889], + [-4.9846510887146, -3.349442481994629], + [-2.7965011596679688, 5.388373374938965], + [-0.14772826433181763, -0.9000347852706909], + [-4.674438953399658, 5.246489524841309], + [-2.803312063217163, -3.9078261852264404], + [-0.6899304986000061, -0.5716589689254761], + [-3.634336233139038, -4.417987823486328], + [0.9925346970558167, -7.078085899353027], + [1.7036255598068237, -6.23356294631958], + [1.4033368825912476, -7.003471374511719], + [9.718708038330078, -2.6385295391082764], + [-7.292668342590332, -1.8952640295028687], + [0.841769814491272, -6.752772808074951], + [-4.4357500076293945, 1.4255074262619019], + [-3.877373456954956, -2.6547725200653076], + [2.953911066055298, -5.638992786407471], + [-7.010560512542725, 8.236396789550781], + [-0.33056849241256714, 11.257646560668945], + [-5.213198661804199, 6.774015426635742], + [-2.103184461593628, 0.7279331684112549], + [-0.27241194248199463, 10.298248291015625], + [8.238551139831543, -2.0473825931549072], + [-3.1788012981414795, -2.4247610569000244], + [-0.8516114950180054, 9.438865661621094], + [-3.522792100906372, -1.7052838802337646], + [4.608096122741699, -3.177356481552124], + [-5.728605270385742, 7.940604209899902], + [-5.399232387542725, 5.312286853790283], + [-2.366358995437622, 1.7589502334594727], + [2.5072262287139893, -3.9395182132720947], + [2.4934422969818115, -5.030630111694336], + [-5.54169225692749, 3.3109190464019775], + [0.5654363632202148, 0.09520752727985382], + [-0.33345353603363037, 3.6212542057037354], + [-7.858977794647217, -1.727474331855774], + [-2.145003318786621, 0.15365666151046753], + [-4.4970316886901855, 3.573780059814453], + [2.906771183013916, -4.792909622192383], + [2.354329824447632, 3.2632851600646973], + [4.555464267730713, -6.928472995758057], + [2.025770425796509, 0.8241910934448242], + [9.178862571716309, -2.5040934085845947], + [2.482898235321045, 1.0894368886947632], + [-0.46327102184295654, 9.27638053894043], + [2.3705294132232666, -6.667876243591309], + [-5.414087772369385, -1.798110842704773], + [-5.862575054168701, 4.095727920532227], + [-4.13724946975708, -4.27134370803833], + [2.9050090312957764, -4.723884582519531], + [-2.2724361419677734, 3.010917901992798], + [-2.6352698802948, 1.8974038362503052], + [1.0182697772979736, -5.2085418701171875], + [9.262408256530762, -2.450725555419922], + [2.9858558177948, -4.487243175506592], + [-4.624427318572998, -2.7377326488494873], + [-5.07533597946167, -1.5553544759750366], + [-4.044724941253662, 5.776921272277832], + [-5.293767929077148, -2.5885729789733887], + [-5.366907596588135, 2.1249639987945557], + [6.171237945556641, -1.128226399421692], + [1.282666802406311, -5.622527122497559], + [-3.5153541564941406, -2.4088940620422363], + [-2.4640824794769287, 1.755086898803711], + [1.2290902137756348, 1.4361017942428589], + [-2.0906152725219727, 2.747556209564209], + [2.812217950820923, -7.93486213684082], + [-7.141170501708984, -0.604375958442688], + [-1.8664765357971191, -2.2701258659362793], + [-5.948024272918701, 2.011340379714966], + [-7.1129374504089355, 8.656330108642578], + [-6.386355400085449, 7.551645278930664], + [0.8283336758613586, -6.915297031402588], + [1.385996699333191, -7.1179938316345215], + [2.882521867752075, -4.540777683258057], + [-3.9758036136627197, -1.895431637763977], + [-2.001314401626587, -1.2063959836959839], + [8.879714012145996, -2.5144903659820557], + [2.8841123580932617, -4.377213954925537], + [5.451491355895996, -1.025568962097168], + [-5.0788140296936035, -3.9851624965667725], + [2.180737257003784, 5.424500942230225], + [-3.539884328842163, 3.026448965072632], + [-5.477259635925293, 6.545594215393066], + [-1.3653759956359863, 4.217304229736328], + [5.010903835296631, -1.0668691396713257], + [-6.9320807456970215, -0.901282548904419], + [-1.6308791637420654, -2.4114019870758057], + [-4.584125518798828, -2.537447214126587], + [2.8924410343170166, -4.612630844116211], + [-5.085099697113037, -2.5770857334136963], + [-0.6434726119041443, 9.694990158081055], + [5.4219536781311035, 7.491511821746826], + [-2.4242796897888184, 1.8913719654083252], + [-1.6888971328735352, 5.104935646057129], + [5.882009029388428, -1.0694822072982788], + [6.169503688812256, -1.7239066362380981], + [0.9520428776741028, -6.990804195404053], + [-1.0385500192642212, -1.3073595762252808], + [-5.242030143737793, -3.01037859916687], + [5.596359729766846, -3.1272435188293457], + [-4.856984615325928, 6.605449676513672], + [-0.29120171070098877, 10.828689575195312], + [6.528060436248779, -1.8341803550720215], + [-2.760838508605957, -0.7910336256027222], + [-3.859713077545166, -3.51357102394104], + [-3.0900256633758545, 1.1558382511138916], + [-5.043763637542725, 4.788996696472168], + [-0.39316076040267944, 11.181100845336914], + [-0.5607808232307434, -0.16384848952293396], + [-2.130157470703125, 2.630354642868042], + [-5.572991847991943, 4.482322692871094], + [-3.4313318729400635, 3.797616481781006], + [-6.389279842376709, 7.34197998046875], + [-3.9980175495147705, -2.518801689147949], + [-4.591233253479004, -3.2097177505493164], + [2.493385076522827, -8.378904342651367], + [-4.755087375640869, 5.312292098999023], + [-7.055836200714111, 8.53744125366211], + [-4.983834743499756, 2.947554349899292], + [-3.6590168476104736, -4.9361162185668945], + [-0.22288358211517334, 9.498734474182129], + [-6.551608562469482, 1.0800856351852417], + [-4.714565753936768, -2.546032667160034], + [-3.1257500648498535, 2.7115252017974854], + [-2.2314226627349854, 2.340210199356079], + [-7.528111457824707, 1.976397156715393], + [6.45823335647583, -1.4369300603866577], + [-0.6202818751335144, 1.6316536664962769], + [1.3985964059829712, 5.0638580322265625], + [-7.574489116668701, 9.208595275878906], + [3.617396116256714, -3.9741177558898926], + [-5.842353343963623, -2.5032856464385986], + [-4.260536193847656, 6.035188674926758], + [0.0620475634932518, -4.6841535568237305], + [-8.617177963256836, -0.27662134170532227], + [0.36690017580986023, -2.0162248611450195], + [-0.4534902572631836, 9.835601806640625], + [6.651715278625488, -2.6477596759796143], + [0.9846406579017639, 5.203991889953613], + [1.9390454292297363, -1.788343071937561], + [-2.60029673576355, 1.045212745666504], + [-1.7682857513427734, -3.664970636367798], + [-0.19903242588043213, 9.165611267089844], + [3.1618783473968506, -4.749887943267822], + [-2.522953987121582, 2.380194902420044], + [2.1202619075775146, 0.6773393154144287], + [2.9592134952545166, -4.710803508758545], + [9.414753913879395, -2.650423049926758], + [3.2239043712615967, -5.125336647033691], + [-3.563551902770996, -0.4614299535751343], + [3.9117419719696045, -6.519936561584473], + [0.6403500437736511, -0.9335112571716309], + [5.508305072784424, -0.9960713386535645], + [2.10429310798645, -3.733572244644165], + [3.055304765701294, -5.0001630783081055], + [-0.26557183265686035, 9.405839920043945], + [2.8592705726623535, -4.330516815185547], + [-5.155420780181885, 3.167856454849243], + [-0.7113555073738098, 1.5448403358459473], + [-3.9753966331481934, -1.945188045501709], + [-4.584360599517822, 6.079267501831055], + [7.751199245452881, -1.9697593450546265], + [-4.867917537689209, -2.8366925716400146], + [-5.400973796844482, -2.788008689880371], + [-7.361334800720215, 0.06734883785247803], + [-2.361548662185669, -2.099113941192627], + [-7.4412970542907715, 9.019286155700684], + [8.33322811126709, -2.432011842727661], + [5.973537921905518, -1.0779730081558228], + [-4.344567775726318, -2.6155922412872314], + [-4.528327465057373, -3.979346513748169], + [-3.567725419998169, -3.0325067043304443], + [1.862123727798462, -9.002937316894531], + [3.0081582069396973, -4.771031856536865], + [6.20744514465332, -1.1649051904678345], + [-2.8156046867370605, 5.972695350646973], + [-4.453756809234619, -3.10817551612854], + [-2.62927508354187, -0.8392795324325562], + [6.783183574676514, -0.798740029335022], + [-5.33371639251709, -2.694951057434082], + [-5.404120445251465, -3.749307870864868], + [2.386583089828491, 6.051164150238037], + [-5.75410795211792, 8.180923461914062], + [1.9410736560821533, 4.866645336151123], + [-0.15843087434768677, -0.8754836320877075], + [8.654539108276367, -2.456984758377075], + [9.2850923538208, -2.5557444095611572], + [-2.110654592514038, 1.8005883693695068], + [-2.6676509380340576, -1.8777767419815063], + [-2.97225022315979, -1.283951759338379], + [7.4192423820495605, -4.35148811340332], + [-4.51200008392334, 1.7123233079910278], + [-8.20961856842041, -0.9463752508163452], + [3.040477752685547, -4.564693450927734], + [8.044768333435059, -2.0162765979766846], + [-4.919434547424316, -3.4445791244506836], + [1.6871728897094727, -8.210500717163086], + [-5.8859477043151855, 4.118422985076904], + [-4.921816349029541, 5.637144088745117], + [-4.010450839996338, -2.724675416946411], + [-5.106626033782959, 2.8934061527252197], + [-2.2593514919281006, 0.5243973731994629], + [-0.531555712223053, 11.328693389892578], + [3.1335487365722656, -4.902071952819824], + [-0.9747611284255981, -2.946451425552368], + [-5.80832052230835, 5.283624649047852], + [2.586547374725342, -4.990370273590088], + [-4.903422832489014, 3.79004168510437], + [-4.506489276885986, 3.616244077682495], + [-5.018115043640137, -2.4732930660247803], + [-7.9458746910095215, -0.8709410429000854], + [10.30981731414795, -2.841426134109497], + [1.8122889995574951, -7.0353193283081055], + [8.969405174255371, -2.5155515670776367], + [1.2554728984832764, 0.22864490747451782], + [7.910531520843506, -2.0260560512542725], + [-7.062533855438232, -1.5226011276245117], + [3.224515438079834, -5.0474772453308105], + [7.247835159301758, -2.2141261100769043], + [-3.9123260974884033, -2.3534746170043945], + [-0.3412359952926636, 9.010808944702148], + [-5.52230978012085, -3.6690196990966797], + [2.110020399093628, -5.654062271118164], + [-6.721785068511963, -2.5319697856903076], + [-2.18841814994812, 0.11883479356765747], + [-2.1181223392486572, 5.844576835632324], + [6.661152362823486, -1.5302894115447998], + [2.0125956535339355, -9.41002082824707], + [-7.2562575340271, 8.743953704833984], + [-3.6888985633850098, 5.789711952209473], + [5.89557409286499, -1.2879823446273804], + [-0.404041051864624, 8.769538879394531], + [-0.49733471870422363, 8.511568069458008], + [3.1015992164611816, -5.372079849243164], + [5.0423808097839355, -4.319434642791748], + [8.874704360961914, -2.4770264625549316], + [2.990474224090576, -7.1304402351379395], + [5.506158828735352, -3.6103343963623047], + [2.3759562969207764, 5.551791191101074], + [-6.943075656890869, -0.24339330196380615], + [-7.267764568328857, 9.292716026306152], + [5.070757865905762, -5.908431529998779], + [-4.763698101043701, 2.829878568649292], + [-5.698808193206787, 4.329713821411133], + [-4.679599285125732, 4.561591148376465], + [-3.996206760406494, -3.341952323913574], + [-5.475419044494629, -2.3315651416778564], + [2.9630796909332275, -4.590712547302246], + [-2.388296127319336, 1.3237526416778564], + [7.4790496826171875, -1.9340659379959106], + [1.9623870849609375, -4.155269622802734], + [1.7115721702575684, 5.540098190307617], + [-2.5345170497894287, 1.8406113386154175], + [-5.058379650115967, -2.5517947673797607], + [-4.261693954467773, -4.03782844543457], + [-5.204529285430908, 1.2130931615829468], + [-0.3350558578968048, -1.4870681762695312], + [5.176669597625732, -0.9788554906845093], + [5.975985050201416, -1.251719355583191], + [-0.30037909746170044, 11.274682998657227], + [-6.783179759979248, 8.568832397460938], + [0.3792061507701874, 0.16433748602867126], + [9.826896667480469, -2.722430467605591], + [-0.5545109510421753, 9.340185165405273], + [-4.835506439208984, -2.9210028648376465], + [1.958392858505249, 5.253911972045898], + [-2.629120111465454, 1.949645757675171], + [-0.27343958616256714, 9.675171852111816], + [-3.970334768295288, 5.968711853027344], + [-0.22041112184524536, 9.590667724609375], + [2.767094373703003, -7.600993633270264], + [-1.0027105808258057, -0.5211463570594788], + [1.213762640953064, 0.9060134291648865], + [-4.132215976715088, -3.2014577388763428], + [9.477677345275879, -2.685750961303711], + [2.766528844833374, 4.813610553741455], + [1.6329929828643799, -8.90938949584961], + [-0.40454453229904175, 11.07498550415039], + [-5.080899715423584, -2.5904805660247803], + [-0.4624202847480774, 9.062191009521484], + [-2.0511529445648193, 7.810149669647217], + [-0.07029209285974503, -0.5534613728523254], + [-0.46129369735717773, 7.771999359130859], + [-6.182504177093506, -1.4434324502944946], + [-4.030968189239502, -5.302277088165283], + [1.295966625213623, 5.079450607299805], + [8.540960311889648, -2.3931949138641357], + [0.6104716062545776, -0.31836894154548645], + [-4.873762130737305, 6.79578161239624], + [1.5503573417663574, 0.9645625352859497], + [3.2421839237213135, -4.847811698913574], + [2.720710515975952, -4.06855583190918], + [-4.824296474456787, -0.541975736618042], + [-2.198996067047119, 1.9574936628341675], + [-0.4324202537536621, 10.183201789855957], + [-2.080801248550415, 0.05346500501036644], + [-0.613955557346344, 10.364937782287598], + [-2.1850788593292236, 1.8584274053573608], + [-5.258816242218018, -3.534958600997925], + [7.882532596588135, -1.9980202913284302], + [-2.4079720973968506, 1.8476951122283936], + [1.7167398929595947, -6.392512798309326], + [-3.774003267288208, -2.795724630355835], + [2.9537370204925537, -4.459893703460693], + [-4.02176570892334, -3.226602792739868], + [-0.5783361792564392, 5.358728408813477], + [7.867390155792236, -2.0356998443603516], + [-0.23337113857269287, -1.6819287538528442], + [1.7706139087677002, 0.29447129368782043], + [-5.448246479034424, -3.5176918506622314], + [-3.6937062740325928, -1.4753903150558472], + [2.3896114826202393, -2.3240854740142822], + [-6.380948543548584, 7.606870651245117], + [2.276463747024536, -3.6509273052215576], + [7.468344688415527, -1.7862000465393066], + [-5.232956886291504, 6.338619232177734], + [-4.220165729522705, -2.408301830291748], + [-5.254542827606201, -2.8692984580993652], + [9.12192440032959, -2.617479085922241], + [-6.028530120849609, -1.3328049182891846], + [-2.9358608722686768, 3.189135789871216], + [8.917821884155273, -2.5989677906036377], + [9.293882369995117, -2.5514938831329346], + [-4.180357933044434, -2.9583327770233154], + [-5.168639183044434, -3.355525016784668], + [8.748052597045898, -2.475407361984253], + [-2.6794703006744385, 4.591098308563232], + [-2.346759080886841, 0.40738219022750854], + [2.7694880962371826, -4.278284072875977], + [6.900400161743164, -1.6373512744903564], + [-5.226675033569336, 5.573757171630859], + [-2.0521609783172607, 2.4104487895965576], + [-4.125786781311035, 0.8425049185752869], + [-5.134796619415283, 2.467407464981079], + [-0.31227463483810425, 10.295703887939453], + [-2.5505259037017822, 2.107653856277466], + [-0.28617793321609497, 9.213406562805176], + [-4.563570022583008, 6.701102256774902], + [-5.124098300933838, -1.6688975095748901], + [2.4850990772247314, -4.134834289550781], + [-2.5191385746002197, -0.25192949175834656], + [-5.161197662353516, -2.3096492290496826], + [-5.638822555541992, 2.825162649154663], + [-0.29982882738113403, 9.955431938171387], + [4.702910900115967, 7.269932746887207], + [-4.095451831817627, -0.9465577602386475], + [1.6006594896316528, 5.219630718231201], + [1.0243041515350342, -6.369325160980225], + [-4.263261318206787, 0.42788416147232056], + [-5.147944927215576, -4.2253031730651855], + [-0.1518530249595642, 10.363527297973633], + [6.893329620361328, -1.9603010416030884], + [-3.8546831607818604, -1.9315773248672485], + [-3.312389612197876, -2.443143129348755], + [2.933293581008911, -6.5707807540893555], + [1.9591047763824463, -7.762134552001953], + [8.507821083068848, -2.4537909030914307], + [0.8960837721824646, -5.679966449737549], + [-2.46217942237854, 0.0011225901544094086], + [8.243767738342285, -2.465562343597412], + [2.7012410163879395, -4.007544040679932], + [3.081892251968384, -4.64356803894043], + [1.5231983661651611, -5.106346607208252], + [5.633040428161621, -1.1589699983596802], + [-3.5057785511016846, -2.748548746109009], + [0.4881887435913086, 8.377833366394043], + [-4.559678554534912, 5.840847969055176], + [6.397088050842285, -0.8740459680557251], + [-4.551856994628906, 3.3267083168029785], + [-2.0285067558288574, 2.561234951019287], + [2.91825008392334, -4.440540790557861], + [-0.5213162899017334, 9.651728630065918], + [-5.2040019035339355, 6.110293388366699], + [6.289248466491699, -1.4161953926086426], + [-3.789599895477295, -2.8719706535339355], + [-0.7872316837310791, -0.5331571698188782], + [-4.582218170166016, 5.793510437011719], + [-6.150414943695068, 3.875195264816284], + [-2.294884204864502, 2.340695858001709], + [-3.9869086742401123, -1.5046895742416382], + [-7.747516632080078, 9.34912109375], + [3.143911123275757, -4.743817329406738], + [7.417886734008789, -2.7607057094573975], + [-4.842262268066406, -2.907407522201538], + [3.6955201625823975, -0.23491644859313965], + [-0.07872427254915237, 0.023100104182958603], + [-0.5073295831680298, -1.2450240850448608], + [-7.927459716796875, 10.023164749145508], + [-7.487043857574463, 9.089280128479004], + [1.679177165031433, -6.157897472381592], + [-6.619929790496826, 7.966207504272461], + [-4.50415563583374, -5.023162841796875], + [-0.9866672158241272, 9.087547302246094], + [-2.2695343494415283, 1.2670029401779175], + [-7.47683572769165, -0.9821169376373291], + [-3.114112138748169, -4.7564544677734375], + [-2.760195732116699, 2.6709187030792236], + [1.6267421245574951, 0.5536913275718689], + [-3.15449857711792, -1.0159664154052734], + [-6.502861022949219, 8.081075668334961], + [-4.2778449058532715, -3.938249111175537], + [1.6154894828796387, 5.292091369628906], + [-6.161080837249756, 8.241072654724121], + [-7.815499782562256, -1.1878615617752075], + [3.5223937034606934, -5.806504249572754], + [-5.817355155944824, 8.17135238647461], + [-1.254571795463562, 5.699896335601807], + [4.4490966796875, 6.9801836013793945], + [-3.5001626014709473, -3.3310539722442627], + [2.7570040225982666, -4.859879970550537], + [-4.747453689575195, 2.1771092414855957], + [8.1506929397583, -2.8312618732452393], + [5.36259126663208, -2.3449947834014893], + [-2.447659969329834, 2.3646533489227295], + [3.1267309188842773, -4.928304672241211], + [2.1879873275756836, 4.822281360626221], + [-2.60331392288208, 0.3944103717803955], + [-2.9380459785461426, -0.918725311756134], + [-5.592832088470459, 1.6490908861160278], + [-5.015627384185791, -3.0510101318359375], + [5.168311595916748, -0.936704158782959], + [4.424077033996582, 6.341150283813477], + [2.232335329055786, -6.890974044799805], + [-2.823336362838745, -1.6627389192581177], + [-6.275384902954102, 1.2519360780715942], + [2.669145107269287, -4.035411357879639], + [7.512997150421143, -1.6422348022460938], + [2.948699712753296, -4.457298755645752], + [3.36382794380188, -5.016134738922119], + [0.5150126218795776, -6.389047145843506], + [4.831822395324707, 6.2617082595825195], + [-5.016936302185059, -2.29754376411438], + [1.8834667205810547, -9.150100708007812], + [9.543608665466309, -2.6535112857818604], + [2.974252462387085, -4.6874165534973145], + [4.9794840812683105, 7.197423458099365], + [-4.224910259246826, -2.261896848678589], + [-2.36881947517395, 1.7062556743621826], + [-2.350587844848633, -1.4574124813079834], + [6.7935309410095215, -2.519028425216675], + [8.248351097106934, -2.1417813301086426], + [-5.342123508453369, -2.4124388694763184], + [1.7851438522338867, 3.196558713912964], + [6.247764587402344, -3.1238315105438232], + [-5.4929351806640625, -4.990639686584473], + [-4.179664611816406, -3.0426599979400635], + [-4.560136318206787, -2.7357609272003174], + [-2.7382988929748535, -3.892918348312378], + [-0.2979945242404938, -4.355800628662109], + [5.767062664031982, -0.9292476177215576], + [-4.355499744415283, -5.168473243713379], + [2.984125852584839, -4.499412536621094], + [2.107971668243408, -5.067410945892334], + [5.160959243774414, -1.1258139610290527], + [-4.4239068031311035, -2.3089804649353027], + [-4.0464701652526855, 5.442523002624512], + [-4.169014930725098, -1.8004368543624878], + [-5.23195219039917, 2.708861827850342], + [-7.182641983032227, -2.129246234893799], + [-0.5203547477722168, -0.1694561243057251], + [-0.2549228072166443, 9.185001373291016], + [-0.1809491515159607, 9.500707626342773], + [-6.635942459106445, 8.281197547912598], + [4.228915214538574, -0.013293597847223282], + [8.306414604187012, -1.5449830293655396], + [-5.51582670211792, 4.716065406799316], + [1.1139039993286133, 0.7132807970046997], + [-0.7195025086402893, 9.875332832336426], + [-0.6635951399803162, 11.745586395263672], + [1.5021610260009766, -4.705326557159424], + [-3.944387674331665, 0.14095157384872437], + [-5.854846954345703, 3.979046583175659], + [-5.844910144805908, -3.207948923110962], + [-4.963529586791992, -3.2597413063049316], + [-4.392082691192627, -1.6269484758377075], + [-5.174392223358154, -2.8774635791778564], + [-0.33449244499206543, 9.988475799560547], + [-5.256729602813721, -1.2098952531814575], + [-0.9745622277259827, 6.657330513000488], + [-2.8135874271392822, 4.669978141784668], + [-0.07468468695878983, 6.301461219787598], + [-5.537572383880615, -3.7656705379486084], + [-3.3160746097564697, -0.7624403238296509], + [-7.108919620513916, -1.4396127462387085], + [0.7176540493965149, -0.4202428460121155], + [-5.308457374572754, -6.049533843994141], + [1.5853173732757568, 5.098267078399658], + [-7.749435901641846, 9.594704627990723], + [-4.980936050415039, -3.4588422775268555], + [-5.046788692474365, 0.7244049906730652], + [-2.450784683227539, 0.648108959197998], + [2.2686681747436523, 5.079575538635254], + [-4.992154598236084, 1.6313725709915161], + [2.01483416557312, 5.525370121002197], + [-0.31325411796569824, 9.534557342529297], + [2.7333061695098877, 0.7506734132766724], + [-4.782461166381836, -2.4128577709198], + [8.753361701965332, -2.424450159072876], + [5.9859490394592285, -3.9312407970428467], + [-3.484917640686035, -1.6219362020492554], + [-6.216188430786133, 5.410251140594482], + [7.107147693634033, -2.897740125656128], + [-6.418790817260742, -1.6702638864517212], + [-4.221670627593994, -3.744800090789795], + [0.4998142719268799, -0.8454270958900452], + [-5.27481746673584, 6.281542778015137], + [2.813166379928589, -4.321767807006836], + [8.548637390136719, -2.647780179977417], + [-4.299586772918701, 5.8134870529174805], + [1.9611444473266602, -3.51304292678833], + [0.6118302941322327, -0.7209779620170593], + [-2.611943483352661, -4.717743396759033], + [0.9584295153617859, 9.603187561035156], + [-5.280148506164551, 2.166224956512451], + [1.582298755645752, 5.037642478942871], + [-6.743956089019775, -1.9383996725082397], + [-4.894234657287598, 1.580777645111084], + [-4.643561840057373, -0.6776289939880371], + [2.8241641521453857, 0.9793130159378052], + [5.614477634429932, 7.045557022094727], + [1.170585036277771, 2.592757225036621], + [-7.465444087982178, 9.090028762817383], + [-2.496474504470825, 2.747274160385132], + [-4.5011444091796875, -2.764620065689087], + [-0.7279948592185974, 9.530341148376465], + [-5.276623249053955, 3.3732473850250244], + [-4.4772772789001465, 4.054072856903076], + [7.004303455352783, -1.5155138969421387], + [2.952535390853882, -6.15731143951416], + [-5.635124683380127, 7.638207912445068], + [2.041762351989746, -9.134794235229492], + [-5.3532490730285645, -1.4768052101135254], + [2.6241109371185303, 6.56294584274292], + [1.855738878250122, 5.589690685272217], + [-0.5505984425544739, 11.445048332214355], + [-4.466796398162842, -3.6700844764709473], + [1.9179316759109497, -7.796984672546387], + [-3.3799374103546143, -5.0832719802856445], + [-5.069595813751221, 4.880736351013184], + [-4.889525890350342, -3.1966543197631836], + [-5.5119099617004395, 7.488960266113281], + [-6.0819315910339355, -2.0787289142608643], + [-5.725470066070557, 1.5852972269058228], + [-2.004641532897949, 5.40903377532959], + [-2.277766704559326, -2.0222978591918945], + [-5.76361608505249, 6.250665187835693], + [2.1089975833892822, 5.814826488494873], + [-2.1457643508911133, 2.0348927974700928], + [-5.978122234344482, -2.3273606300354004], + [-0.3694058060646057, 9.887659072875977], + [7.960465908050537, -2.0944411754608154], + [-2.1152076721191406, 1.7784919738769531], + [-4.872541904449463, 7.372105121612549], + [8.944380760192871, -2.5995006561279297], + [0.6374030709266663, 0.0036575309932231903], + [-0.6076617240905762, 9.248083114624023], + [-5.134877681732178, -3.860713243484497], + [-0.40701907873153687, 11.487817764282227], + [-2.5171163082122803, 2.123589038848877], + [0.5952450037002563, 6.128100395202637], + [-2.5309081077575684, 2.2390949726104736], + [-4.733905792236328, -1.732125997543335], + [-0.27043771743774414, 9.624736785888672], + [2.4416568279266357, -5.598135471343994], + [4.260159015655518, 6.684671401977539], + [-6.755517482757568, 8.479723930358887], + [2.321807622909546, 5.762942790985107], + [1.2449051141738892, -8.090333938598633], + [5.143324375152588, -0.2421150505542755], + [-2.8001742362976074, 4.03610897064209], + [2.930168390274048, -6.023810386657715], + [-1.4792557954788208, 4.752140522003174], + [0.37373247742652893, -1.05314302444458], + [9.53624153137207, -2.6730237007141113], + [-0.11986071616411209, 9.82581901550293], + [3.070364236831665, -6.4810991287231445], + [-5.490437984466553, -2.2433245182037354], + [-4.761554718017578, 4.718361854553223], + [-4.400921821594238, -2.337707996368408], + [1.4726765155792236, -6.644911289215088], + [0.8582168817520142, -6.285548686981201], + [-6.390418529510498, 7.6459574699401855], + [6.252595901489258, -1.4045408964157104], + [-0.6891761422157288, 10.08243179321289], + [2.454073429107666, -3.2819314002990723], + [-6.6020989418029785, -0.2804267406463623], + [2.267998695373535, 1.1824270486831665], + [-4.7469658851623535, -3.4512295722961426], + [3.0018396377563477, -2.7957756519317627], + [-5.881051540374756, 1.9032593965530396], + [-0.22188204526901245, 9.974630355834961], + [3.033036470413208, -4.577368259429932], + [-2.6143417358398438, -3.5784692764282227], + [4.039209842681885, -3.7241809368133545], + [-0.4672718644142151, -0.3424507975578308], + [-0.25934356451034546, 10.567670822143555], + [-5.0617780685424805, -2.855851411819458], + [-4.122868061065674, -4.768625259399414], + [-0.2501576542854309, 10.212108612060547], + [-5.004939556121826, 5.997776985168457], + [0.16037559509277344, -0.46682095527648926], + [0.6569079756736755, -0.19270732998847961], + [-2.4965391159057617, 1.2319691181182861], + [-2.0276169776916504, -0.9699433445930481], + [2.895881175994873, -4.493138313293457], + [1.7312824726104736, -8.10511589050293], + [-4.73475980758667, 8.029799461364746], + [0.1408645510673523, -1.200350284576416], + [-3.0765371322631836, -2.1151340007781982], + [-2.304708242416382, 0.5125589370727539], + [1.636565089225769, -7.593285083770752], + [-3.1167795658111572, -4.238469123840332], + [0.5501877665519714, -1.2154196500778198], + [-5.064567565917969, 5.955361366271973], + [2.8637259006500244, -6.640196800231934], + [1.7788701057434082, -6.949259281158447], + [2.2840301990509033, 5.435728073120117], + [-5.082956790924072, -0.8848276734352112], + [-3.9606263637542725, -2.5148909091949463], + [-2.2305259704589844, -1.5537667274475098], + [3.0614144802093506, -4.7938947677612305], + [-2.64623761177063, 6.557666301727295], + [8.945876121520996, -2.8161003589630127], + [2.3005363941192627, -5.7890825271606445], + [2.0465188026428223, -8.42641544342041], + [-0.19302374124526978, -0.8087215423583984], + [0.08848734945058823, -0.6053259968757629], + [3.3523600101470947, 5.418549537658691], + [-7.253092288970947, -1.7333208322525024], + [-6.557213306427002, 8.021476745605469], + [1.6149605512619019, -4.849525451660156], + [-2.0758121013641357, 2.555293560028076], + [-2.157743453979492, 6.292786598205566], + [2.238065481185913, 0.8717185258865356], + [-4.916844844818115, -4.561755657196045], + [1.9233722686767578, 4.877481460571289], + [-0.24564921855926514, 9.35595417022705], + [2.435405969619751, -3.2616891860961914], + [3.092088460922241, -4.84873104095459], + [3.7246291637420654, -6.610085487365723], + [-5.1146979331970215, -4.83011531829834], + [2.4018518924713135, -4.343184471130371], + [-2.298513174057007, 1.9876352548599243], + [-3.635399341583252, -1.0217972993850708], + [6.647550106048584, -1.8177016973495483], + [-5.124826908111572, -1.4192270040512085], + [-5.060060024261475, -2.4153521060943604], + [-6.691869258880615, 8.250862121582031], + [-6.85344934463501, -0.8404488563537598], + [-5.486537456512451, -2.0092852115631104], + [6.036896228790283, -1.8874783515930176], + [-4.123732566833496, 5.496936798095703], + [3.151761054992676, -4.888103485107422], + [2.2790751457214355, -5.4749860763549805], + [-3.198603630065918, -2.0125725269317627], + [-7.421550273895264, -2.146045446395874], + [2.962834119796753, -6.886649131774902], + [2.098623514175415, -6.429965019226074], + [1.6456619501113892, 5.312765121459961], + [1.681504249572754, -8.018112182617188], + [-2.1648666858673096, 0.9957338571548462], + [-5.292667865753174, -2.942410945892334], + [-6.0577192306518555, 8.134718894958496], + [-7.288496494293213, 8.770195960998535], + [3.3935720920562744, -5.440589427947998], + [-0.3897111415863037, 9.745147705078125], + [-3.9233205318450928, 3.1910812854766846], + [8.290095329284668, -2.1959292888641357], + [-6.269765377044678, -2.633601427078247], + [4.172921180725098, -0.38913726806640625], + [1.671177864074707, 1.4405392408370972], + [8.584160804748535, -2.3412904739379883], + [-0.4853273034095764, 11.664152145385742], + [-3.1616294384002686, 3.0161375999450684], + [-4.063013076782227, -2.415532112121582], + [-2.351806402206421, 0.5232972502708435], + [-4.418075084686279, 6.114766597747803], + [-0.28670087456703186, -1.0558114051818848], + [1.2358497381210327, -6.769718170166016], + [1.5043530464172363, -8.374889373779297], + [-4.956079959869385, -1.4243582487106323], + [-5.3195905685424805, 1.7898873090744019], + [-2.518653392791748, 1.675253987312317], + [-3.99824595451355, -3.8523266315460205], + [7.417157173156738, -2.518805742263794], + [2.641411542892456, -7.439111709594727], + [2.4545047283172607, 3.710489511489868], + [-4.150944709777832, -5.075832366943359], + [-4.549046039581299, -2.6937057971954346], + [-5.029928207397461, -1.560779333114624], + [3.110394239425659, 1.063626766204834], + [-0.26289963722229004, 9.579103469848633], + [10.281761169433594, -2.8358209133148193], + [-0.3057350516319275, 9.796096801757812], + [0.6064448952674866, -0.3672429323196411], + [2.2981741428375244, 5.712123870849609], + [1.4065368175506592, 5.04353141784668], + [8.516664505004883, -2.4556963443756104], + [-2.2028968334198, -0.24731892347335815], + [-3.7495172023773193, -3.3370773792266846], + [-0.435272753238678, 10.903753280639648], + [7.764855861663818, -1.8770933151245117], + [-3.389549493789673, -4.093979358673096], + [0.18568095564842224, -0.5954110026359558], + [0.8840852379798889, -3.1720781326293945], + [-5.621798038482666, -2.4379584789276123], + [-5.492228984832764, -3.8421895503997803], + [-6.424883842468262, 7.666517734527588], + [2.425201177597046, -4.365960121154785], + [0.9046310186386108, 6.432611465454102], + [3.2064411640167236, -1.7550841569900513], + [2.2942540645599365, -7.328481674194336], + [2.7930567264556885, -4.318840026855469], + [2.9218955039978027, -4.549232482910156], + [-4.141926288604736, -1.9585199356079102], + [-1.6654784679412842, 1.0739946365356445], + [-5.3702712059021, -1.600651502609253], + [1.6437888145446777, 0.891568124294281], + [-0.839976966381073, 5.658496856689453], + [6.044866561889648, -0.9646052122116089], + [-5.044407367706299, -1.7292131185531616], + [-3.1934866905212402, 3.810023307800293], + [-6.343577861785889, -1.9018696546554565], + [1.7852736711502075, -7.771125793457031], + [-6.561171054840088, -1.5473679304122925], + [-2.289869785308838, 1.112557053565979], + [-1.9560600519180298, 5.437353134155273], + [3.049163341522217, -4.76102352142334], + [-0.6305965781211853, 1.8635178804397583], + [8.674263000488281, -2.3794844150543213], + [7.570297718048096, -2.0588557720184326], + [7.988542079925537, -2.290982246398926], + [6.735814571380615, -1.9503254890441895], + [-3.125324010848999, -0.32277435064315796], + [-4.276814937591553, -1.9160493612289429], + [-2.964759111404419, -2.8478782176971436], + [0.5420846343040466, 9.657527923583984], + [-6.027196407318115, 2.545269012451172], + [6.819884300231934, -2.866455316543579], + [-4.976952075958252, -3.0160505771636963], + [2.051614999771118, 5.121577262878418], + [-0.30678755044937134, 9.499883651733398], + [-2.395617961883545, 1.6468034982681274], + [-3.877546787261963, 3.379094123840332], + [2.331855297088623, -3.8645412921905518], + [-7.61178731918335, -1.331630825996399], + [-2.1526050567626953, -0.43225860595703125], + [-6.449727535247803, 1.8873988389968872], + [-4.373234272003174, -3.324613094329834], + [4.839539527893066, -1.145797848701477], + [-3.3989694118499756, -2.2906463146209717], + [-0.43111473321914673, 9.224115371704102], + [2.58282732963562, -3.8090949058532715], + [5.605790615081787, -1.6516215801239014], + [-0.5015761256217957, 11.870794296264648], + [1.0750999450683594, 0.6048438549041748], + [-2.1928296089172363, 0.8653623461723328], + [-3.328936815261841, 5.676459312438965], + [-5.525533199310303, 3.0924718379974365], + [-2.755577325820923, -3.182918071746826], + [3.2319371700286865, 1.4869049787521362], + [9.357223510742188, -2.5742902755737305], + [-6.219064235687256, 1.5046216249465942], + [9.21010684967041, -2.562974214553833], + [6.60291051864624, -2.705138921737671], + [-5.294336318969727, -3.7752597332000732], + [-0.4492816925048828, 10.778676986694336], + [-5.701349258422852, -5.8514204025268555], + [-4.9718017578125, -2.965346097946167], + [-6.17626428604126, -0.4777241349220276], + [-4.349586009979248, -3.0898115634918213], + [-2.4488794803619385, 0.9372889995574951], + [-3.1624906063079834, 3.156770706176758], + [6.162832736968994, -2.4849209785461426], + [-7.392638683319092, -1.5731014013290405], + [2.088454484939575, -7.534076690673828], + [-6.535794734954834, 7.292411804199219], + [-5.39068078994751, -3.248866319656372], + [-5.3363847732543945, 6.181878089904785], + [-4.8209028244018555, 2.2776331901550293], + [-4.191405296325684, -1.741644263267517], + [-7.098998069763184, 8.792156219482422], + [2.0880324840545654, -7.350421905517578], + [-6.969087600708008, 8.864258766174316], + [-1.7738077640533447, 6.084725379943848], + [-3.664119243621826, -2.5443170070648193], + [6.88862419128418, -2.163409471511841], + [1.84132719039917, 0.7066564559936523], + [-0.11569472402334213, -1.0299088954925537], + [-2.2051033973693848, 0.7507081627845764], + [0.19640052318572998, 5.405839443206787], + [1.9555301666259766, -6.372909069061279], + [1.312966227531433, 5.116599082946777], + [-2.4555580615997314, 0.43936941027641296], + [8.566221237182617, -2.4769480228424072], + [2.2930636405944824, 0.7318910360336304], + [-2.287409782409668, 1.3513580560684204], + [-2.970703363418579, -3.851412534713745], + [-0.058861203491687775, -0.6341116428375244], + [-5.174026966094971, -0.11683911085128784], + [-4.855456352233887, 2.7275211811065674], + [-0.502168595790863, 9.83387565612793], + [2.8560945987701416, -4.856876373291016], + [2.7811496257781982, -4.217617034912109], + [-0.16555926203727722, -2.796558141708374], + [6.542205333709717, -3.6652743816375732], + [-2.445666551589966, 1.2945499420166016], + [-4.137670516967773, 6.378671646118164], + [-4.3027520179748535, -1.8652299642562866], + [1.7020025253295898, 4.892780303955078], + [-3.948967695236206, -1.4028135538101196], + [-1.57785165309906, -3.8563127517700195], + [1.711394190788269, -8.656932830810547], + [7.739743709564209, -1.8325875997543335], + [-0.5233851075172424, 9.58047866821289], + [-2.725018262863159, 1.6664916276931763], + [2.9840707778930664, 1.0991076231002808], + [3.3845088481903076, -5.402717590332031], + [-4.79923152923584, -2.9524736404418945], + [-5.060290336608887, -1.6040691137313843], + [-5.832365989685059, -2.7907230854034424], + [-6.778467655181885, 9.158652305603027], + [1.7374224662780762, -8.797094345092773], + [-2.0621416568756104, 5.420920372009277], + [-0.43889278173446655, 0.7720771431922913], + [6.577775478363037, -4.066065311431885], + [8.728474617004395, -2.446791887283325], + [-2.214773178100586, 3.0379583835601807], + [6.897472381591797, -1.4149092435836792], + [-2.1511175632476807, 2.796050786972046], + [0.6227824091911316, -6.213518142700195], + [-0.2437300682067871, 10.153653144836426], + [-5.346466541290283, 6.182409286499023], + [-0.40824824571609497, 9.798481941223145], + [-6.429055690765381, 0.05787980183959007], + [-0.23535305261611938, 9.932625770568848], + [-3.6151959896087646, -2.560514211654663], + [-6.0031352043151855, 5.428452491760254], + [-2.560441732406616, 2.2204463481903076], + [-3.6007163524627686, -1.7681950330734253], + [-0.3345487117767334, 11.337541580200195], + [1.4066493511199951, 4.911952972412109], + [-1.9204885959625244, 1.6463042497634888], + [6.833818435668945, -2.0839877128601074], + [2.629354238510132, -4.067405700683594], + [-4.314906597137451, -3.9795186519622803], + [-0.5286784768104553, 9.397504806518555], + [-4.760067939758301, -2.847527503967285], + [3.2848799228668213, 6.575252532958984], + [-2.9602980613708496, -3.012402296066284], + [0.23592746257781982, 9.728994369506836], + [2.6001358032226562, 6.336336135864258], + [-4.474761486053467, 5.853071689605713], + [-5.356788158416748, -3.4024689197540283], + [0.28584301471710205, 0.4600207805633545], + [-2.4513509273529053, 1.7462767362594604], + [-6.761806011199951, -0.9005110263824463], + [0.014756821095943451, 0.3199704587459564], + [-1.1640933752059937, 5.524007320404053], + [8.79617977142334, -2.44616436958313], + [0.21468603610992432, -4.292031764984131], + [-6.254110813140869, 8.268688201904297], + [-2.6032824516296387, 2.6993367671966553], + [-0.6420266032218933, 5.102459907531738], + [-4.522468566894531, 0.30294209718704224], + [-0.27082735300064087, 11.47163200378418], + [-0.18268442153930664, 8.839316368103027], + [2.377936601638794, -5.334262847900391], + [-0.6610806584358215, 9.715791702270508], + [-6.987154006958008, 8.877028465270996], + [0.6377283334732056, -4.232388496398926], + [-4.895125389099121, 3.528932809829712], + [-3.58493709564209, -1.5535153150558472], + [3.1220195293426514, 6.35598611831665], + [3.4170103073120117, -5.089871883392334], + [-4.206799030303955, 4.958377361297607], + [-2.7639482021331787, 1.6014416217803955], + [-3.8799779415130615, 5.826834678649902], + [9.75432300567627, -2.719665288925171], + [-0.21261978149414062, 9.160792350769043], + [9.11058521270752, -2.595031261444092], + [1.4911577701568604, -5.190370559692383], + [-5.505282878875732, 5.294591903686523], + [5.7459564208984375, -3.5394842624664307], + [-6.524511814117432, 8.145058631896973], + [3.062464952468872, -5.146670341491699], + [3.2708704471588135, -4.886089324951172], + [4.959803104400635, -4.56080961227417], + [-5.476361274719238, 0.7103949785232544], + [-8.302433013916016, 10.108248710632324], + [-5.0849995613098145, 4.467818260192871], + [-6.250710964202881, -1.1964555978775024], + [2.7976396083831787, -4.078185081481934], + [-5.399415016174316, -2.6576836109161377], + [0.42625099420547485, 9.143014907836914], + [-4.400862216949463, -3.1747167110443115], + [-2.708893299102783, 1.9898487329483032], + [-8.889933586120605, -0.8852002620697021], + [-6.387904644012451, -1.489899754524231], + [-4.762807369232178, -3.435391426086426], + [-6.400792598724365, 2.337233781814575], + [2.920839309692383, -4.809570789337158], + [-4.1923089027404785, -5.113330841064453], + [2.7251381874084473, 4.149591445922852], + [1.9173927307128906, 5.385952472686768], + [-0.9768527746200562, -0.29382777214050293], + [7.716598987579346, -2.8044607639312744], + [-4.111548900604248, -1.1197069883346558], + [0.2223292589187622, 9.909738540649414], + [-2.0771231651306152, 2.909538984298706], + [-4.840966701507568, 6.131053924560547], + [-4.179462909698486, 7.02065372467041], + [-6.005988597869873, -2.4597017765045166], + [-0.06274054199457169, -0.842652440071106], + [3.1823227405548096, -4.774892807006836], + [2.4906084537506104, -3.5321404933929443], + [3.2676918506622314, -4.880678653717041], + [2.264155149459839, -4.018457412719727], + [-3.9673824310302734, 3.652216672897339], + [-5.429910182952881, -3.5404868125915527], + [-3.946585178375244, -1.8887624740600586], + [-0.39551347494125366, 9.039970397949219], + [0.9148812890052795, -5.122769355773926], + [-2.2350990772247314, -0.9204713702201843], + [8.303313255310059, -2.1959054470062256], + [3.0717031955718994, -4.821664333343506], + [-0.06718375533819199, -1.5261751413345337], + [-5.2027764320373535, -3.100940465927124], + [-4.719175815582275, 1.1052507162094116], + [1.430811882019043, 2.354487657546997], + [-4.383963584899902, -3.134962320327759], + [-1.9284536838531494, -0.09152987599372864], + [2.7902958393096924, -6.667508602142334], + [-2.282963275909424, 6.020753383636475], + [-4.701809883117676, 5.340466499328613], + [-2.7542190551757812, 2.573594093322754], + [-3.6921660900115967, 5.467966079711914], + [7.5233283042907715, -2.8969810009002686], + [6.161264896392822, -1.3386597633361816], + [9.459115028381348, -2.6239774227142334], + [-3.91838002204895, -3.0031790733337402], + [5.447328567504883, -1.1870313882827759], + [-4.355594158172607, -2.690175771713257], + [-0.23115569353103638, 9.424445152282715], + [-4.392111301422119, -3.741299867630005], + [2.2854578495025635, -10.792346954345703], + [3.260174512863159, -4.872276782989502], + [-1.8529078960418701, -0.9666554927825928], + [-3.897463798522949, 0.22726517915725708], + [-5.549378871917725, 6.36417293548584], + [5.001986980438232, -1.4720715284347534], + [-0.41226768493652344, 9.392620086669922], + [2.7857444286346436, 6.118485450744629], + [-0.21112066507339478, 9.876890182495117], + [-6.050337314605713, 7.752018928527832], + [-4.9693284034729, 4.3795366287231445], + [-4.5224223136901855, 7.368805885314941], + [-6.825564861297607, 0.9738572835922241], + [-0.5697402954101562, -1.1360929012298584], + [-4.57735538482666, -2.7386012077331543], + [-4.519859313964844, 4.224680423736572], + [2.86110782623291, -4.609244346618652], + [5.752195835113525, -2.42055082321167], + [4.253844738006592, -3.4959716796875], + [-5.314039707183838, -3.2777597904205322], + [-4.070462226867676, 3.0237877368927], + [-5.353936672210693, -1.9716497659683228], + [-5.811951160430908, 3.4771454334259033], + [-6.314381122589111, 2.4516260623931885], + [1.1609421968460083, 1.3200794458389282], + [-0.47426944971084595, 10.418222427368164], + [-5.029414653778076, -7.081940650939941], + [2.177720785140991, -3.430428981781006], + [9.408586502075195, -2.610326051712036], + [-2.4855849742889404, 1.3327640295028687], + [-4.723510265350342, 4.315819263458252], + [-0.2718345820903778, -0.5330063700675964], + [-5.1456780433654785, -1.4609427452087402], + [-5.293994426727295, 2.7070415019989014], + [-1.4509660005569458, -0.7479763031005859], + [-0.38188791275024414, 11.448802947998047], + [0.2587924003601074, 7.09871768951416], + [1.978809118270874, -8.388511657714844], + [2.9861342906951904, -4.578776836395264], + [2.209690809249878, -3.765333414077759], + [-4.682138442993164, -1.367409110069275], + [2.1783788204193115, 5.540111064910889], + [-5.049523830413818, 6.620293617248535], + [-2.739408016204834, 0.6016419529914856], + [-4.6416473388671875, 5.643007278442383], + [-1.1727721691131592, 0.5739043354988098], + [-2.4609310626983643, 2.2792716026306152], + [-4.8569254875183105, 4.957878589630127], + [2.7317309379577637, -4.275170803070068], + [-4.068379878997803, -3.6637825965881348], + [-5.589784145355225, 4.644052028656006], + [1.7481129169464111, 5.112574100494385], + [-2.822537660598755, -4.671219825744629], + [-3.979499101638794, -1.655603051185608], + [2.9050099849700928, -4.459274768829346], + [9.203076362609863, -2.4809799194335938], + [8.974442481994629, -2.436014413833618], + [-0.38510650396347046, 10.556976318359375], + [-3.078840970993042, -1.0149364471435547], + [-0.04312918335199356, -0.8872078657150269], + [2.265087366104126, 5.932248115539551], + [5.056667804718018, -1.2007122039794922], + [-5.132503986358643, 2.1565613746643066], + [-5.255734920501709, -3.4551706314086914], + [3.0351359844207764, -4.554098129272461], + [-0.2894129157066345, -0.5325544476509094], + [-2.112579107284546, 0.3740324079990387], + [-4.124486923217773, -2.5057380199432373], + [-1.658686876296997, 2.382124185562134], + [-0.38409608602523804, 3.2638113498687744], + [-5.366766929626465, 3.632617235183716], + [2.5275769233703613, 5.337450981140137], + [1.3552372455596924, 4.833252429962158], + [-7.078304767608643, 0.5562094449996948], + [1.737419605255127, 5.180092811584473], + [-4.971737384796143, -1.199280023574829], + [6.335141658782959, -1.1076730489730835], + [-7.9161481857299805, 9.741753578186035], + [-6.821845531463623, -1.983343243598938], + [-2.675175428390503, 2.2127904891967773], + [2.221245050430298, 5.676599025726318], + [3.1044437885284424, -3.2101237773895264], + [-4.361320495605469, 4.531540870666504], + [-5.042491436004639, -3.316950559616089], + [2.1583633422851562, -6.804670333862305], + [-8.681523323059082, 10.704151153564453], + [-0.8753119111061096, 0.06160416826605797], + [7.427764415740967, -1.8209737539291382], + [-5.025683879852295, 6.848422050476074], + [-1.7638330459594727, 6.653275489807129], + [-0.5480293035507202, 9.55704116821289], + [5.40043306350708, 7.393687725067139], + [2.8132736682891846, -4.348974704742432], + [-3.689544200897217, -0.9888838529586792], + [-6.577573299407959, 7.846566200256348], + [-1.7176125049591064, 5.723265171051025], + [-4.803008079528809, 6.484320640563965], + [3.6771509647369385, -2.369969606399536], + [3.2032439708709717, -4.812440872192383], + [-4.125611782073975, -1.0922280550003052], + [2.673504590988159, -3.629253387451172], + [-0.20951342582702637, 9.736464500427246], + [9.77320384979248, -2.7198660373687744], + [-6.016157627105713, 8.105995178222656], + [-5.6445770263671875, -1.4804881811141968], + [3.0874886512756348, -4.679244041442871], + [-3.392132520675659, 5.613427639007568], + [-4.911438941955566, 4.799760341644287], + [-0.8317400813102722, 10.142017364501953], + [2.780698537826538, -4.309813976287842], + [-4.078749179840088, 2.921248197555542], + [-2.2390317916870117, 1.4845417737960815], + [7.177374362945557, -2.612574815750122], + [7.106852054595947, -1.8620671033859253], + [3.679759979248047, 6.647044658660889], + [5.944933891296387, 7.85609769821167], + [-3.831087350845337, 5.0606255531311035], + [3.4453442096710205, 6.531667232513428], + [7.890808582305908, -1.8982495069503784], + [7.443447113037109, -1.8660359382629395], + [2.128598690032959, 5.470942497253418], + [5.253000736236572, -4.116006851196289], + [-3.5791735649108887, 5.640724182128906], + [9.4318265914917, -2.609691619873047], + [-1.9582322835922241, -1.6976752281188965], + [-6.138858795166016, 7.8289713859558105], + [-4.700603008270264, 4.117315769195557], + [2.0869662761688232, 5.641500473022461], + [2.5613958835601807, -3.9076590538024902], + [-3.5304458141326904, -1.6232932806015015], + [2.6436502933502197, -4.007532119750977], + [-0.13132822513580322, 10.16623306274414], + [-4.735079765319824, 5.118866920471191], + [-5.2889628410339355, 7.737771034240723], + [9.213794708251953, -2.5169122219085693], + [-4.627098083496094, -3.8370168209075928], + [2.895266056060791, -4.359481334686279], + [-6.313117504119873, -0.3893476724624634], + [-2.3199431896209717, 0.7039600610733032], + [2.4473440647125244, 1.1160156726837158], + [-6.101607322692871, 2.4211461544036865], + [-5.651622295379639, 5.314109802246094], + [5.933605670928955, -1.1641905307769775], + [1.9528634548187256, 0.5991260409355164], + [-4.549654006958008, -0.7025253772735596], + [-2.5089802742004395, -1.0498172044754028], + [8.396689414978027, -2.4224445819854736], + [2.0005125999450684, 5.6304931640625], + [2.5110838413238525, -6.524736404418945], + [-5.023951530456543, -3.308251142501831], + [9.218273162841797, -2.4780240058898926], + [1.6183292865753174, -2.474137544631958], + [-4.62929630279541, -3.2931160926818848], + [7.133640766143799, -1.6013449430465698], + [-2.2794885635375977, 1.204216480255127], + [5.419339656829834, -1.383486032485962], + [0.24024748802185059, 1.4992772340774536], + [1.6311211585998535, 5.201685905456543], + [2.5663552284240723, 0.8204684257507324], + [2.6362862586975098, 0.9207209348678589], + [-0.8126590847969055, -3.0649521350860596], + [9.144539833068848, -2.5662810802459717], + [8.820018768310547, -2.6460540294647217], + [6.7308878898620605, -1.7674976587295532], + [-2.4940264225006104, 1.2548221349716187], + [9.483861923217773, -2.6787455081939697], + [1.7589150667190552, -8.73642635345459], + [-2.396880865097046, 1.7018159627914429], + [0.2417149543762207, 0.3297727108001709], + [8.362875938415527, -2.5567336082458496], + [1.1843430995941162, -0.14054527878761292], + [-7.328449726104736, -1.3751773834228516], + [-2.5652573108673096, 1.4342187643051147], + [0.8026108741760254, -0.18659311532974243], + [2.721818685531616, -4.377063751220703], + [-4.759100437164307, -2.7865962982177734], + [0.5808835029602051, -0.83818119764328], + [-0.7783830165863037, 8.104524612426758], + [-4.492353916168213, -2.7236239910125732], + [-3.905728578567505, 4.609804153442383], + [-0.6637607216835022, 9.696045875549316], + [-3.283275842666626, -2.114769697189331], + [-2.1537797451019287, -1.068602204322815], + [6.172919750213623, 8.243626594543457], + [5.542436122894287, 7.379477500915527], + [-2.1618144512176514, -0.858831524848938], + [6.855152606964111, -1.4097388982772827], + [-3.2448599338531494, -2.289557456970215], + [-5.32918643951416, 1.2250066995620728], + [3.239741086959839, -4.852391242980957], + [-4.610074520111084, 3.899441957473755], + [-4.770735263824463, -2.6477315425872803], + [5.881730079650879, -1.3928279876708984], + [2.9798824787139893, -4.530059337615967], + [-4.1889328956604, 4.951340675354004], + [-2.2080025672912598, 2.3053536415100098], + [0.5746210813522339, -0.10257676243782043], + [7.998790264129639, -2.303388833999634], + [-0.33522915840148926, 9.431710243225098], + [6.7222208976745605, 8.45150089263916], + [3.168383836746216, -5.225539207458496], + [6.507319450378418, -1.3863517045974731], + [-7.442950248718262, 9.21534252166748], + [-5.378129482269287, -0.7901475429534912], + [-2.5488698482513428, -0.8601321578025818], + [-5.817640781402588, -4.694404602050781], + [-5.232668399810791, -2.638176202774048], + [-3.1434121131896973, 5.445012092590332], + [-4.323604106903076, -3.529984951019287], + [-1.6437747478485107, 0.8077303171157837], + [0.668046236038208, 5.26434326171875], + [2.8587374687194824, -4.3193254470825195], + [-5.586108684539795, -2.9276692867279053], + [2.5622079372406006, -4.295610427856445], + [0.29391220211982727, -1.7958863973617554], + [-4.052445888519287, 4.5765252113342285], + [2.100594997406006, 5.4130754470825195], + [-5.729532718658447, -2.8496665954589844], + [-4.2705979347229, -1.7354878187179565], + [2.296754837036133, -3.117417573928833], + [-0.29182642698287964, 9.821754455566406], + [-3.0305023193359375, 6.240579605102539], + [-3.5765042304992676, 5.558448791503906], + [-5.959595203399658, 3.838745355606079], + [-4.138856410980225, -4.360626220703125], + [1.3985815048217773, -6.476335048675537], + [6.952714920043945, -1.4990299940109253], + [5.80604887008667, -2.044130563735962], + [2.9003803730010986, -4.75480318069458], + [-7.220154285430908, 1.7309982776641846], + [-5.661722660064697, -2.7544219493865967], + [0.0992351695895195, 8.724456787109375], + [-5.421508312225342, 3.8308887481689453], + [2.9195539951324463, -4.474936485290527], + [-3.781355381011963, 2.0723235607147217], + [-6.85888147354126, -1.9580051898956299], + [-4.83135986328125, -2.4943368434906006], + [-3.6387107372283936, -1.2444477081298828], + [2.2809019088745117, -3.5565342903137207], + [2.6197569370269775, 4.441893577575684], + [1.304311990737915, -7.824676036834717], + [8.904254913330078, -2.410794496536255], + [-4.722705841064453, -2.042717218399048], + [8.009482383728027, -3.1136279106140137], + [-1.1741929054260254, 9.551294326782227], + [3.2178633213043213, -5.14492130279541], + [1.5008317232131958, 3.040254592895508], + [0.29051101207733154, 0.2457447350025177], + [1.5055229663848877, -8.323978424072266], + [-4.552520751953125, -2.204836368560791], + [-3.1338202953338623, 3.5529825687408447], + [-5.368530750274658, 5.694879531860352], + [-5.3962836265563965, -2.0376136302948], + [-2.5981545448303223, 2.3049418926239014], + [-4.91798210144043, -3.1847898960113525], + [-2.480100393295288, 2.1422715187072754], + [-2.419504165649414, -0.7257996201515198], + [2.9686806201934814, -6.472280502319336], + [3.067328691482544, -4.754356384277344], + [-5.298452854156494, 7.643784523010254], + [-4.30738639831543, 5.071264743804932], + [-3.7101142406463623, 4.640944480895996], + [-3.610459089279175, -2.323343515396118], + [-5.723772048950195, -4.0198211669921875], + [7.513725280761719, -2.124364137649536], + [3.2758617401123047, 6.429635047912598], + [-3.0064382553100586, 3.0395495891571045], + [-0.4057723879814148, 10.874542236328125], + [-7.892838001251221, -1.4869927167892456], + [-4.029457092285156, -0.5052890777587891], + [-5.970294952392578, -2.3956382274627686], + [-2.527277708053589, 1.6984087228775024], + [-4.915240287780762, -1.1535662412643433], + [-5.680400371551514, -3.199477195739746], + [-1.7726149559020996, -1.754294514656067], + [2.9681789875030518, -4.46028995513916], + [-2.1361403465270996, 0.24415820837020874], + [0.44646286964416504, -5.123842239379883], + [-6.890560626983643, 8.813655853271484], + [3.974287271499634, 6.770021915435791], + [9.26651668548584, -2.5000195503234863], + [-5.4450154304504395, -3.435765027999878], + [8.101305961608887, -2.2198269367218018], + [-6.068007946014404, 7.717088222503662], + [-5.0898261070251465, -4.913858890533447], + [6.0470967292785645, 7.433833599090576], + [-6.776505470275879, 8.107481956481934], + [3.080065965652466, -4.632861137390137], + [1.2118220329284668, 1.5478988885879517], + [-1.1000113487243652, 9.538352966308594], + [-0.35077598690986633, -0.822233259677887], + [-5.414083957672119, 0.6952301859855652], + [-6.821185111999512, -1.3988944292068481], + [-0.2787005603313446, 7.63955545425415], + [-4.352930545806885, -3.2752978801727295], + [2.8658320903778076, -4.236750602722168], + [6.4106597900390625, -1.4767338037490845], + [-4.912575721740723, -2.336282968521118], + [4.743494510650635, -1.3503037691116333], + [1.883685827255249, 4.941226959228516], + [-0.35469865798950195, 9.527069091796875], + [-0.1341317892074585, -1.3774604797363281], + [-3.9289069175720215, -1.8509107828140259], + [2.7343766689300537, -7.195867538452148], + [-5.9687371253967285, -4.3477983474731445], + [8.207646369934082, -2.231834888458252], + [3.164062738418579, -4.733509063720703], + [-3.9123785495758057, -3.6862952709198], + [-5.824199199676514, 1.9233206510543823], + [-0.3505910038948059, 8.975220680236816], + [-4.713405132293701, 1.6685422658920288], + [1.137401819229126, 0.3531256318092346], + [-4.1437177658081055, -2.254075765609741], + [-5.194502353668213, -3.307960271835327], + [8.084368705749512, -2.2280914783477783], + [2.9523284435272217, -4.4476704597473145], + [-2.328923225402832, -0.01146579161286354], + [7.5082783699035645, -1.7417452335357666], + [0.06144320219755173, -1.0219789743423462], + [-0.6660026907920837, -0.3506511151790619], + [-4.7740478515625, -2.184556722640991], + [-0.14444848895072937, -0.988388180732727], + [3.230313539505005, -4.996048927307129], + [-4.9001078605651855, -2.596825361251831], + [0.47403091192245483, 10.510597229003906], + [7.936456203460693, -2.8150975704193115], + [1.8653250932693481, 0.972297191619873], + [-3.0672032833099365, -3.840654134750366], + [-4.911488056182861, 0.04996662959456444], + [2.844087839126587, -4.391706466674805], + [2.9414796829223633, 6.377874851226807], + [-5.363864421844482, -3.5579636096954346], + [-3.4141228199005127, 3.534088373184204], + [3.160527467727661, -4.749300479888916], + [-6.501582622528076, -2.1792500019073486], + [1.2572247982025146, 0.133463054895401], + [2.4486234188079834, -4.24623966217041], + [0.44013017416000366, -5.694089889526367], + [-4.072482109069824, -3.5588338375091553], + [-1.9982175827026367, 1.9432916641235352], + [6.693686008453369, -5.2255964279174805], + [3.097853660583496, -5.780906677246094], + [-5.6797027587890625, 8.458724021911621], + [-4.337024688720703, -5.634549617767334], + [-5.997143745422363, -2.2749974727630615], + [6.427528381347656, -1.8542732000350952], + [-2.337047815322876, 0.5559132695198059], + [0.12746268510818481, 10.465354919433594], + [-2.7335703372955322, 1.6712219715118408], + [2.723252296447754, -4.1151227951049805], + [3.214751958847046, -3.030160903930664], + [-5.492530345916748, -3.669616460800171], + [3.027106761932373, -4.548460006713867], + [-1.8859612941741943, 1.9735187292099], + [2.7038803100585938, -4.108897686004639], + [-2.5597481727600098, 1.803049087524414], + [-4.712562084197998, -2.6759865283966064], + [-5.0121750831604, 5.950863838195801], + [-6.307717800140381, -2.3617770671844482], + [3.008410692214966, -4.515789985656738], + [5.201168537139893, -1.0692627429962158], + [-2.2207231521606445, 0.287656307220459], + [1.6173641681671143, -7.591055870056152], + [-0.06769580394029617, 5.271866321563721], + [2.8283538818359375, 6.602324962615967], + [2.6916933059692383, -4.31173038482666], + [-3.2787842750549316, -1.1839879751205444], + [2.0433268547058105, -7.239521503448486], + [-6.652316570281982, 3.0726795196533203], + [3.082620859146118, -4.622165679931641], + [-5.444432735443115, 4.988306999206543], + [1.5747480392456055, 5.130378723144531], + [-0.6923748254776001, 8.555313110351562], + [-4.209630489349365, 5.02221155166626], + [1.5631526708602905, -0.1137792319059372], + [0.9268918633460999, -6.156866073608398], + [-2.7164361476898193, 2.463463306427002], + [-5.929380416870117, -2.5719990730285645], + [-5.201158046722412, 2.512600898742676], + [-5.64180326461792, -0.11951243877410889], + [3.61999773979187, -1.2832196950912476], + [-0.28739941120147705, 10.108163833618164], + [-6.458775043487549, 7.73027229309082], + [-5.284598350524902, 2.0903635025024414], + [-3.9506797790527344, -2.580449104309082], + [-2.0277953147888184, 2.5422523021698], + [-4.998817443847656, -2.9652116298675537], + [1.842213749885559, 5.202311038970947], + [-2.4663379192352295, 1.5813413858413696], + [2.405176877975464, -3.948596477508545], + [-3.94486927986145, -2.8121232986450195], + [-6.0155744552612305, -1.8155063390731812], + [-4.26643180847168, -2.7071449756622314], + [6.618227481842041, -2.135514736175537], + [2.481942892074585, 0.6001182198524475], + [-4.121690273284912, -2.722341775894165], + [4.545071125030518, 6.967355728149414], + [-4.9336748123168945, 5.907398700714111], + [-3.9788873195648193, -0.7801113128662109], + [0.1898193359375, 10.505857467651367], + [8.726536750793457, -2.4419591426849365], + [-5.938692569732666, 2.3412537574768066], + [-5.8687262535095215, -0.13640284538269043], + [0.9486823678016663, -0.22500228881835938], + [-5.064276218414307, -3.1676533222198486], + [-4.9704766273498535, -3.453824996948242], + [-4.252246856689453, -2.312145948410034], + [2.7169811725616455, -6.06202507019043], + [-3.537490129470825, -1.5111281871795654], + [-3.975942850112915, 6.11024808883667], + [-3.740760326385498, -3.0396034717559814], + [7.913326263427734, -1.9689635038375854], + [2.9687812328338623, -4.841067314147949], + [5.715474605560303, 7.396304607391357], + [-6.259415149688721, 7.777092456817627], + [-5.212584495544434, -2.5226094722747803], + [-4.424355983734131, -3.25929594039917], + [-4.80883264541626, -3.7861602306365967], + [-3.013723611831665, 3.18047833442688], + [-2.959442377090454, 3.280573606491089], + [-0.2540730834007263, 11.525885581970215], + [2.6995022296905518, -3.2503561973571777], + [2.7611215114593506, -4.333591938018799], + [2.4318838119506836, -3.4340927600860596], + [-2.0358965396881104, 1.9910632371902466], + [7.070662975311279, -1.6739898920059204], + [4.813189506530762, 6.810271739959717], + [-3.4386186599731445, 5.608304977416992], + [6.309094429016113, -1.3298676013946533], + [1.3719005584716797, -7.070470809936523], + [-5.821823596954346, -1.6908520460128784], + [-7.307844638824463, -1.3392587900161743], + [3.2051339149475098, -4.802996635437012], + [-3.089937925338745, -3.6257410049438477], + [1.6062431335449219, -6.999663829803467], + [0.881924033164978, -6.487457275390625], + [-3.051330327987671, 4.928381443023682], + [0.8013811707496643, -6.867165565490723], + [-1.9551329612731934, 1.255629539489746], + [-3.9794418811798096, 0.05470019206404686], + [-5.768561840057373, 7.762687683105469], + [3.10745906829834, -4.653070449829102], + [-5.922272205352783, -2.058880090713501], + [2.398261547088623, 5.786291122436523], + [2.025960683822632, 4.780897617340088], + [1.9696080684661865, 5.664750099182129], + [1.367931604385376, 0.042220424860715866], + [2.0738015174865723, 5.490627288818359], + [-0.26942574977874756, 9.426016807556152], + [6.319584369659424, -2.2556073665618896], + [-2.597198009490967, 2.0566301345825195], + [-4.882280349731445, -2.4062516689300537], + [9.815677642822266, -2.6844189167022705], + [-5.724409580230713, 7.9365081787109375], + [-7.1432719230651855, 8.702814102172852], + [-1.305445671081543, 5.582573890686035], + [-0.26536792516708374, 9.74331283569336], + [-5.001495838165283, -2.5981502532958984], + [1.5286595821380615, -5.947360992431641], + [3.0585882663726807, -4.744701862335205], + [3.1289784908294678, -4.912437438964844], + [-0.6203852891921997, 8.926630020141602], + [-5.104150772094727, 1.0424045324325562], + [3.0274994373321533, -4.5732927322387695], + [-5.554047107696533, -4.707730293273926], + [-3.9556331634521484, 5.866556644439697], + [-6.396738052368164, 6.992974758148193], + [-4.370029449462891, 2.8488974571228027], + [-0.20941156148910522, 8.560206413269043], + [2.476656675338745, -6.595423698425293], + [-7.507339954376221, -1.0288255214691162], + [-1.4992479085922241, 2.436492681503296], + [3.012943744659424, -4.5426483154296875], + [2.7113049030303955, -4.083596706390381], + [-3.7295889854431152, 5.623467445373535], + [-2.348129987716675, 1.4138771295547485], + [-8.192893028259277, -1.2773452997207642], + [0.24966949224472046, 5.802214622497559], + [-3.756439685821533, -1.9309669733047485], + [-2.290353775024414, 2.6428725719451904], + [6.414828300476074, -5.370341777801514], + [-5.119616508483887, -2.686509132385254], + [-2.1892871856689453, 2.5918054580688477], + [-0.15857410430908203, 10.136088371276855], + [5.8482985496521, -3.4240219593048096], + [-5.384266376495361, 7.810880661010742], + [-3.2640013694763184, -4.894680023193359], + [8.922192573547363, -2.4735794067382812], + [-2.388411283493042, 1.6014482975006104], + [-2.4643750190734863, 2.108177423477173], + [-3.8422341346740723, -2.5147178173065186], + [1.2273764610290527, 4.931267261505127], + [5.849258899688721, -1.2041023969650269], + [-2.524254083633423, 2.185060977935791], + [-0.24081474542617798, 9.211837768554688], + [-4.933865547180176, 6.137881755828857], + [2.9611175060272217, -4.670873165130615], + [2.394843339920044, -4.3545966148376465], + [5.292037010192871, -1.6761736869812012], + [9.242815971374512, -2.594813108444214], + [-0.013593800365924835, -0.9218642711639404], + [1.8153144121170044, 4.494205474853516], + [9.000414848327637, -2.5922176837921143], + [-8.872071266174316, -1.1335371732711792], + [1.4115993976593018, -1.1651909351348877], + [-2.388608455657959, 0.3548603653907776], + [-5.356387138366699, 7.452974319458008], + [9.69118595123291, -2.720262289047241], + [-5.392055988311768, -3.580009698867798], + [-2.984421730041504, 6.071433067321777], + [9.548666954040527, -2.6732168197631836], + [9.336169242858887, -2.6820616722106934], + [1.0972895622253418, 5.109918594360352], + [1.7871700525283813, -6.7001447677612305], + [1.1900103092193604, 5.190874099731445], + [-0.8141124844551086, 8.054924011230469], + [8.822463035583496, -2.5553746223449707], + [-7.415127277374268, -0.8778666853904724], + [3.0475566387176514, -4.595053672790527], + [-5.148064136505127, 0.7476897239685059], + [3.535245895385742, -2.4776642322540283], + [-2.076852321624756, -2.562988758087158], + [-4.231382846832275, -3.917874574661255], + [1.7010056972503662, 1.3884340524673462], + [-3.9251606464385986, -3.9818665981292725], + [-9.534985542297363, -1.0711296796798706], + [-6.770617961883545, -0.40983057022094727], + [0.036936454474925995, 10.139928817749023], + [-0.21990257501602173, 9.56396484375], + [-1.8566828966140747, 5.50356388092041], + [-3.5429365634918213, -3.8772871494293213], + [3.0792267322540283, -4.1883769035339355], + [-2.356299638748169, 1.5930408239364624], + [2.0251262187957764, -3.6573243141174316], + [-4.167027950286865, -3.1025493144989014], + [-0.25133487582206726, -0.5636487007141113], + [-6.651628017425537, -1.7967286109924316], + [-0.47723495960235596, -0.9864510297775269], + [-4.9646806716918945, -3.7700393199920654], + [-6.390222072601318, 8.264103889465332], + [-0.4856608510017395, 10.016849517822266], + [-6.490919589996338, 7.439092636108398], + [8.855977058410645, -2.544304847717285], + [-4.877659797668457, -3.2361481189727783], + [1.243112325668335, -2.9758284091949463], + [3.000206708908081, -7.76380729675293], + [7.798840522766113, -2.052213430404663], + [-5.96244478225708, -0.35691308975219727], + [9.031136512756348, -2.5160958766937256], + [-2.242260217666626, 1.6674391031265259], + [-6.445493221282959, -1.3157285451889038], + [-7.5404887199401855, -1.7632787227630615], + [-6.493801116943359, -2.184649705886841], + [-4.157005786895752, -3.1171863079071045], + [6.7474541664123535, -1.2940874099731445], + [-2.966564178466797, 5.033963203430176], + [1.0099973678588867, 0.7463890314102173], + [2.310861349105835, -1.138187289237976], + [-0.5115800499916077, 9.812982559204102], + [5.679830551147461, -1.2320884466171265], + [-2.769237995147705, -5.007312774658203], + [-0.19373774528503418, 9.825764656066895], + [-6.540781497955322, 8.131316184997559], + [1.4258869886398315, 0.9687415361404419], + [6.456414699554443, -2.6052868366241455], + [0.18631017208099365, 0.5364457964897156], + [-3.753629446029663, 6.298111915588379], + [-4.910053730010986, -4.0387420654296875], + [-5.498126983642578, 3.9749386310577393], + [3.0301859378814697, -4.848686695098877], + [3.249403953552246, -5.186272621154785], + [-5.439371585845947, 3.3805294036865234], + [-4.0669779777526855, 1.3746720552444458], + [2.251302480697632, 5.682888031005859], + [-3.844251871109009, 7.7026777267456055], + [0.059297941625118256, -1.0778279304504395], + [-5.668233871459961, 7.974521636962891], + [5.616572856903076, 7.151393890380859], + [1.5627367496490479, 4.932836055755615], + [1.509495735168457, 0.31461605429649353], + [5.381749153137207, -1.669411063194275], + [3.0224335193634033, -5.045429229736328], + [1.4713692665100098, 1.8197332620620728], + [-5.275886058807373, -1.4881784915924072], + [1.6322163343429565, 4.070296287536621], + [-3.723527669906616, 2.92665696144104], + [-5.6401286125183105, -3.443554639816284], + [-2.490718126296997, 1.9143413305282593], + [-4.502878189086914, -2.8668863773345947], + [1.67474365234375, -3.9561729431152344], + [9.185975074768066, -2.480903387069702], + [-2.657015085220337, 0.40698641538619995], + [2.416045665740967, 6.080488204956055], + [3.3031904697418213, -4.9298248291015625], + [3.384442090988159, 6.937198638916016], + [-6.345473289489746, -1.8923511505126953], + [-5.515738010406494, -6.284080982208252], + [-4.640507698059082, 3.646125078201294], + [2.945787191390991, -5.560739517211914], + [8.684954643249512, -2.354543447494507], + [4.124922275543213, 0.14163237810134888], + [8.425878524780273, -2.3873558044433594], + [0.16397440433502197, 9.545628547668457], + [-2.5913970470428467, 1.1414152383804321], + [-2.831918954849243, 2.8169126510620117], + [0.33120793104171753, -0.1744493842124939], + [-5.377261638641357, 7.39134407043457], + [-6.8429341316223145, -0.7868919968605042], + [2.03733229637146, -7.1566925048828125], + [-4.67698335647583, -2.6998040676116943], + [-4.315310001373291, -3.263151168823242], + [-1.608408808708191, -0.7762926816940308], + [-3.8147130012512207, -2.4499423503875732], + [2.6399831771850586, -4.027704238891602], + [-3.8732750415802, -1.829038143157959], + [1.7136051654815674, -5.383846282958984], + [-7.239260196685791, 1.617183804512024], + [6.713194847106934, -1.4510064125061035], + [0.1131393238902092, 7.671487331390381], + [6.626585960388184, -2.2491114139556885], + [-0.6487905383110046, -2.5946390628814697], + [-5.048768520355225, 1.7623379230499268], + [-1.9797704219818115, 2.570849895477295], + [8.850654602050781, -2.5328896045684814], + [-4.463428974151611, 5.448352813720703], + [-0.19466596841812134, 9.430204391479492], + [7.641615390777588, -2.29367733001709], + [2.0541024208068848, 5.577563762664795], + [6.00155782699585, 7.732882499694824], + [-3.2147104740142822, 1.9479504823684692], + [1.0454800128936768, -3.097637891769409], + [-4.1746602058410645, -3.283435821533203], + [5.302741527557373, 7.61504602432251], + [1.9405715465545654, 5.229528903961182], + [2.9123520851135254, -4.392016887664795], + [2.8156726360321045, -4.259525299072266], + [-0.11634128540754318, -0.8893576860427856], + [-3.437507390975952, -3.1071574687957764], + [4.5440897941589355, 7.229402542114258], + [-3.4392311573028564, -2.1100590229034424], + [-5.072877883911133, 8.099432945251465], + [4.1224751472473145, 7.043546199798584], + [-5.279229164123535, 6.373021602630615], + [1.295020341873169, 5.018444538116455], + [2.1472432613372803, 3.815945863723755], + [-4.439695835113525, 6.0258965492248535], + [-6.395694255828857, -1.9327366352081299], + [0.11306511610746384, -4.533550262451172], + [8.855676651000977, -2.6254827976226807], + [-1.1017661094665527, 9.034828186035156], + [-5.256229877471924, -2.592341184616089], + [-0.5866815447807312, 11.72532844543457], + [-5.979546546936035, 6.633245944976807], + [6.003241062164307, -1.2986739873886108], + [-7.154544830322266, 8.72162914276123], + [-5.1019368171691895, 0.40820056200027466], + [-3.148847818374634, 3.827465772628784], + [1.8968873023986816, 5.273619651794434], + [-7.139145851135254, 0.383489727973938], + [2.4493865966796875, -7.746377944946289], + [-4.4000115394592285, 3.7481529712677], + [-2.336211919784546, 5.764848232269287], + [-5.554683208465576, 2.088353395462036], + [-5.507910251617432, -1.0059536695480347], + [2.5926032066345215, -6.2914204597473145], + [-4.445157527923584, 0.40197211503982544], + [7.9472222328186035, -2.0079538822174072], + [8.134320259094238, -2.957031488418579], + [-4.334401607513428, -2.39428448677063], + [-2.557110548019409, 1.8734126091003418], + [-2.3375158309936523, 0.4219852089881897], + [-4.4981842041015625, -2.965067148208618], + [6.396860599517822, -1.4562475681304932], + [-5.227173328399658, -2.178168535232544], + [-2.66141939163208, 2.6366848945617676], + [-8.262036323547363, -0.964657187461853], + [6.190922737121582, -2.4840712547302246], + [7.062088966369629, -1.4753674268722534], + [-0.17251795530319214, 9.773441314697266], + [-0.12074179202318192, 8.961496353149414], + [-0.22953742742538452, 11.19024658203125], + [-3.9224226474761963, -2.601879835128784], + [-3.217993974685669, -5.436405181884766], + [2.5861828327178955, -5.066676139831543], + [2.8629963397979736, -4.931214809417725], + [-2.3571410179138184, 0.7326004505157471], + [1.4109219312667847, 0.7503305077552795], + [2.660238027572632, -7.263113975524902], + [1.8514714241027832, -4.814910411834717], + [-1.5460072755813599, 1.0263522863388062], + [2.281327962875366, 3.509565591812134], + [-2.417217493057251, 1.1362022161483765], + [-3.76405930519104, -2.4330978393554688], + [-4.365825653076172, 3.2533814907073975], + [-3.2389605045318604, -1.3577431440353394], + [-5.6911797523498535, 3.470130681991577], + [8.47890567779541, -2.5580923557281494], + [2.1196348667144775, -4.391367435455322], + [-2.9326345920562744, 5.465533256530762], + [-4.213241100311279, -4.763725757598877], + [2.2426412105560303, 5.785221099853516], + [1.8607087135314941, -5.407207489013672], + [-3.9280409812927246, -5.845025062561035], + [-6.506270885467529, 8.448694229125977], + [-2.9658119678497314, 3.319030284881592], + [-7.154119968414307, 8.684526443481445], + [0.14187031984329224, 5.163217544555664], + [2.5069656372070312, -6.173461437225342], + [3.268587350845337, -5.366936206817627], + [-2.0452706813812256, 4.865025043487549], + [1.267319917678833, 0.47228729724884033], + [9.208353996276855, -2.5968680381774902], + [-1.878631591796875, 2.3854808807373047], + [3.131814956665039, -4.887689113616943], + [-4.965731143951416, -4.001527309417725], + [2.7174227237701416, -5.691960334777832], + [3.1425843238830566, -4.71524715423584], + [0.8223692178726196, 6.547895431518555], + [-2.3182458877563477, 2.3439459800720215], + [-6.295248508453369, 8.92697525024414], + [-3.967127561569214, -1.5166923999786377], + [-3.8395304679870605, -2.0846707820892334], + [8.022696495056152, -1.4105075597763062], + [-4.786250114440918, -0.5718912482261658], + [-4.8041300773620605, -1.539157748222351], + [5.1167311668396, 6.735394477844238], + [0.7713664174079895, -0.24150113761425018], + [-0.39126378297805786, 10.904455184936523], + [0.8464878797531128, 5.152355194091797], + [-0.6456939578056335, 9.107251167297363], + [2.316406011581421, -6.364604949951172], + [-5.295400142669678, -1.0828901529312134], + [-4.736639499664307, -2.3960824012756348], + [-1.7869712114334106, 2.1434285640716553], + [2.7644407749176025, -4.219496726989746], + [-7.223331928253174, -1.7802433967590332], + [-6.168769836425781, 7.200376033782959], + [-3.444204330444336, 2.755675792694092], + [-5.347212314605713, 2.310354471206665], + [1.798163890838623, 5.846913814544678], + [3.0065157413482666, -6.4886250495910645], + [2.4612724781036377, -6.938085556030273], + [-0.3826131224632263, 10.920005798339844], + [-5.474195957183838, -4.3697686195373535], + [-7.173618793487549, -1.7702409029006958], + [-6.451015949249268, -2.0796611309051514], + [-6.464641571044922, -0.42893630266189575], + [8.357678413391113, -2.390004873275757], + [-0.33347946405410767, 10.182008743286133], + [-5.122490406036377, -2.995194673538208], + [2.16965913772583, 5.698352813720703], + [2.575169324874878, -6.033721923828125], + [3.042955160140991, -4.840787410736084], + [-4.29084587097168, -2.712207555770874], + [-6.2314839363098145, -2.3451766967773438], + [1.171318769454956, -4.494655609130859], + [3.1258180141448975, -4.677775859832764], + [-2.6167562007904053, -3.687892436981201], + [-6.4839653968811035, -1.2345377206802368], + [6.754540920257568, -1.6209572553634644], + [1.9160817861557007, -8.771076202392578], + [-3.9148268699645996, -5.9426774978637695], + [-5.1573967933654785, -3.5091440677642822], + [3.08532452583313, -4.64862585067749], + [-4.790098190307617, -2.9625985622406006], + [2.563037157058716, -3.9043169021606445], + [3.4091269969940186, -3.7264866828918457], + [-4.454351902008057, 4.039676189422607], + [5.244184494018555, 7.175957679748535], + [-0.29330724477767944, 10.531792640686035], + [6.252908229827881, -3.718233823776245], + [2.3420908451080322, 1.148924469947815], + [1.6270203590393066, 0.340520441532135], + [-5.115705966949463, 6.964761734008789], + [2.897606611251831, -4.503995895385742], + [-4.020016670227051, 0.9149134159088135], + [-2.425626754760742, 1.7650102376937866], + [-2.4440643787384033, 1.5466606616973877], + [-2.656731605529785, -1.470540165901184], + [1.3654935359954834, -7.36816930770874], + [-2.253506898880005, -1.1232813596725464], + [-4.438205242156982, -3.4830477237701416], + [-0.08131886273622513, 10.094198226928711], + [2.7946395874023438, -4.335111618041992], + [-0.5070337653160095, 9.463836669921875], + [3.034083127975464, -4.564973831176758], + [-5.014795780181885, -3.4246914386749268], + [-5.030201435089111, -1.3305834531784058], + [-1.096852421760559, -0.6512891054153442], + [-5.928438186645508, -3.1183125972747803], + [2.046766519546509, 5.333309650421143], + [-6.2561354637146, 6.639488220214844], + [-4.766517162322998, -2.6040937900543213], + [-4.7706475257873535, -2.6176936626434326], + [2.419745922088623, 5.815422058105469], + [2.8468308448791504, -5.116387844085693], + [-1.733221173286438, -0.7222362160682678], + [-7.764936923980713, 9.43679141998291], + [2.1167104244232178, -3.480055332183838], + [-0.1532575786113739, -1.2809170484542847], + [3.6716363430023193, -3.533592939376831], + [1.1167856454849243, -6.826880931854248], + [1.8582488298416138, 0.689730703830719], + [-5.359318733215332, -3.44006085395813], + [-4.250606536865234, -3.3813414573669434], + [-3.306548833847046, 3.402714490890503], + [7.4114837646484375, -3.1617724895477295], + [2.7464096546173096, -5.798523426055908], + [-3.441762685775757, -4.398111820220947], + [3.189558267593384, -4.785355091094971], + [-5.708865642547607, 1.4291349649429321], + [-3.5042121410369873, 6.895256996154785], + [0.8018314838409424, -0.3634797930717468], + [1.9013785123825073, 5.357796669006348], + [-5.3842058181762695, -2.608099937438965], + [-5.226058006286621, -3.8712515830993652], + [4.769359111785889, 7.1203999519348145], + [-6.666049480438232, -1.1517822742462158], + [-4.402902603149414, -1.2523834705352783], + [2.6588423252105713, -3.7481303215026855], + [2.5659596920013428, -3.5768189430236816], + [-6.825483322143555, -1.703020691871643], + [-2.9041242599487305, -1.1575895547866821], + [-5.4715471267700195, 6.326838493347168], + [-4.801058769226074, -1.0110670328140259], + [2.9180562496185303, -4.918008804321289], + [1.9494547843933105, -3.039418935775757], + [-6.082208156585693, 7.527268409729004], + [-0.19092339277267456, 10.693581581115723], + [-3.128990411758423, 0.6499441862106323], + [-0.4188345670700073, -0.49846726655960083], + [-3.4201128482818604, -2.853715181350708], + [-5.649684906005859, 6.550747871398926], + [-6.155087947845459, -3.0494461059570312], + [0.8886738419532776, -3.6795499324798584], + [-0.36134904623031616, 10.873968124389648], + [-8.713247299194336, -1.2282867431640625], + [-3.4024195671081543, 5.121912956237793], + [-5.789482593536377, -2.8620352745056152], + [-3.1608335971832275, -0.7789667248725891], + [-0.6166556477546692, 8.786293029785156], + [-0.5624388456344604, 8.511665344238281], + [-2.375070095062256, -1.742362380027771], + [2.4114668369293213, 1.6215990781784058], + [1.2396830320358276, -6.582070827484131], + [-2.7150254249572754, 1.7847825288772583], + [-3.346850633621216, -4.273775100708008], + [-5.906823635101318, 4.599952220916748], + [-0.19916892051696777, -1.433470606803894], + [-5.693603038787842, 8.653884887695312], + [-8.073203086853027, -1.6672160625457764], + [2.6593711376190186, 0.9932653903961182], + [-5.973339557647705, 8.073362350463867], + [-2.6916491985321045, -4.262097358703613], + [-1.707971215248108, 5.398857593536377], + [-5.085068702697754, -1.7018784284591675], + [1.3015997409820557, 5.006459712982178], + [-2.794149398803711, -4.062084674835205], + [6.008294582366943, -2.5490572452545166], + [3.1419804096221924, -4.712741374969482], + [4.679114818572998, 6.999496936798096], + [2.9392619132995605, -4.497927665710449], + [-5.86953592300415, 1.8537884950637817], + [-5.123993396759033, -1.7587438821792603], + [3.131171941757202, -5.180695533752441], + [1.315100908279419, -3.6530473232269287], + [1.8836504220962524, 6.292635440826416], + [-4.632084846496582, -2.8253557682037354], + [-3.484572172164917, -2.8436522483825684], + [4.75989294052124, -6.385698318481445], + [-2.0824270248413086, 2.344270944595337], + [-4.957408428192139, -2.1632559299468994], + [2.4195263385772705, -4.011174201965332], + [1.8998464345932007, -3.808216094970703], + [-0.8105503916740417, 1.5117374658584595], + [0.4002749025821686, -5.406757354736328], + [-3.5761945247650146, 5.872223854064941], + [-2.2740542888641357, 2.124382495880127], + [-2.841806173324585, 3.0625619888305664], + [-4.3900861740112305, -2.8805594444274902], + [8.10573673248291, -2.168259382247925], + [-0.8968257308006287, -0.4183952212333679], + [-5.019197940826416, 1.8055332899093628], + [-4.227786064147949, -1.9046478271484375], + [-0.5386061072349548, -1.7825734615325928], + [1.5409138202667236, 1.5202443599700928], + [-4.938990116119385, -2.9900949001312256], + [-5.270946979522705, 6.702249526977539], + [-4.301502704620361, -1.2514787912368774], + [-5.4320878982543945, 4.529467582702637], + [2.9005110263824463, -4.395354270935059], + [-6.4740166664123535, 1.967793583869934], + [-5.406120777130127, -1.966059923171997], + [-3.6901094913482666, 3.3026058673858643], + [-6.6576666831970215, 8.070019721984863], + [6.348692417144775, -2.417647123336792], + [0.23471349477767944, -1.2132024765014648], + [2.735182523727417, -6.931635856628418], + [-5.1757493019104, 1.1021945476531982], + [-5.011767864227295, 6.553069114685059], + [6.58709192276001, -2.5712459087371826], + [1.5960392951965332, -3.9600789546966553], + [-4.103309631347656, 0.22126853466033936], + [2.723362684249878, -4.1064453125], + [-2.451690435409546, 2.1340110301971436], + [0.2861803472042084, -0.4096590280532837], + [1.3666070699691772, -5.864614486694336], + [2.403151273727417, -7.431467056274414], + [-3.617520570755005, 6.489877700805664], + [-0.5121237635612488, 11.888065338134766], + [-3.0821070671081543, -1.1478465795516968], + [-4.192331790924072, -1.8038979768753052], + [-6.3383870124816895, 7.521589756011963], + [-0.08782333880662918, 9.542703628540039], + [0.7226484417915344, -6.621908664703369], + [-4.139918804168701, -2.1475284099578857], + [-6.527174472808838, -1.7400321960449219], + [-4.7480340003967285, -2.3281779289245605], + [-4.630329608917236, -3.202995538711548], + [-0.4127991199493408, 10.211729049682617], + [-3.832357883453369, -2.2308430671691895], + [0.36147838830947876, 5.600582122802734], + [-2.5171992778778076, 1.7925046682357788], + [-0.014814324676990509, 5.0641350746154785], + [-4.6820454597473145, -1.9694581031799316], + [-8.361618995666504, -0.7951040267944336], + [-6.913930416107178, 1.0345700979232788], + [-3.9411814212799072, -3.624437093734741], + [1.6620972156524658, 0.7073720693588257], + [-2.992845296859741, -2.109537363052368], + [-1.393965482711792, 5.4924116134643555], + [-0.3041000962257385, 10.159919738769531], + [6.381572723388672, -3.4716763496398926], + [3.4426159858703613, 6.734616279602051], + [2.094423532485962, -7.695531845092773], + [0.8146308064460754, -5.983458518981934], + [2.1584951877593994, -3.4929544925689697], + [-5.580092906951904, 5.752803802490234], + [2.570371627807617, -4.079530239105225], + [-4.90717887878418, 5.793369293212891], + [2.4929306507110596, -8.098978042602539], + [-2.386786937713623, 1.5750643014907837], + [-3.8272159099578857, -3.070385456085205], + [2.155017852783203, 3.961104154586792], + [8.390905380249023, -2.6291730403900146], + [2.5089104175567627, -3.8417623043060303], + [-5.164320468902588, 6.045876502990723], + [2.5034217834472656, -3.9949371814727783], + [-4.8536481857299805, -2.7976491451263428], + [-5.190978050231934, -3.439464569091797], + [8.428269386291504, -2.275858163833618], + [-1.2607580423355103, -1.6161240339279175], + [6.387284755706787, -3.9681150913238525], + [-4.8524489402771, -1.965256690979004], + [-0.3329458236694336, -1.1556495428085327], + [0.249498188495636, 10.562446594238281], + [-5.969168186187744, -2.87619948387146], + [2.631493330001831, -4.387706756591797], + [2.2476909160614014, -8.924036979675293], + [-3.4078404903411865, -3.232842445373535], + [6.250504970550537, -1.7417265176773071], + [-2.554269313812256, 0.9981223344802856], + [-2.356194257736206, 1.158464789390564], + [-6.110143661499023, 2.5822296142578125], + [-4.188795566558838, -0.24893122911453247], + [-7.061934947967529, 8.807571411132812], + [0.7248334288597107, -2.1306567192077637], + [5.411155700683594, -0.9913216829299927], + [9.061366081237793, -2.510418653488159], + [-5.815865516662598, 7.855862617492676], + [-0.3416745066642761, 10.127639770507812], + [-5.081564903259277, 3.462869882583618], + [9.30848503112793, -2.5991992950439453], + [-1.3183550834655762, -0.4426070749759674], + [-8.59644603729248, -1.0895124673843384], + [8.611452102661133, -2.463341474533081], + [1.0194590091705322, -8.083598136901855], + [8.462578773498535, -2.257970094680786], + [-4.951626300811768, 2.563749313354492], + [-1.7002030611038208, 8.529662132263184], + [-8.441292762756348, -0.600829005241394], + [-5.881875991821289, 4.755950927734375], + [-1.782774806022644, -2.3961429595947266], + [6.3571319580078125, -2.5395796298980713], + [-5.708613872528076, 7.823421955108643], + [6.375906467437744, -1.3152809143066406], + [0.8447486758232117, -0.28469857573509216], + [-3.086684465408325, 2.573289632797241], + [-4.106494426727295, -2.096341371536255], + [3.0027596950531006, -4.323094367980957], + [-5.20374059677124, -3.2850124835968018], + [3.1431703567504883, -4.702630996704102], + [-2.76960825920105, 1.7310138940811157], + [-2.480079412460327, 2.005607843399048], + [0.5521863102912903, -5.939640522003174], + [-0.321183979511261, 10.37489128112793], + [3.193406343460083, -5.1771345138549805], + [-4.760630130767822, -2.892585515975952], + [3.034517526626587, 6.309774398803711], + [-4.025649547576904, 1.7869929075241089], + [-0.24972277879714966, 10.40085220336914], + [-5.6209282875061035, 6.791182041168213], + [1.2060257196426392, 1.063912272453308], + [-4.97799825668335, -2.4312050342559814], + [-1.781006097793579, -0.6607523560523987], + [-4.883498668670654, -4.306911468505859], + [9.66855239868164, -2.765244245529175], + [1.5899909734725952, -0.1608540415763855], + [-3.721369504928589, -1.0152623653411865], + [-5.047481060028076, -2.136009454727173], + [-2.78448486328125, 2.029517889022827], + [-2.7933735847473145, -3.2110211849212646], + [-2.150135040283203, 1.9489641189575195], + [1.022353172302246, -6.069234848022461], + [-0.7477321028709412, 13.598730087280273], + [-4.092557907104492, 0.7423421144485474], + [-5.493626117706299, 4.924893379211426], + [8.567137718200684, -2.1693174839019775], + [-4.605033874511719, -3.998117208480835], + [8.78270435333252, -2.301809787750244], + [3.0636675357818604, -4.778801441192627], + [-4.193501949310303, -5.07161283493042], + [-3.4533755779266357, -1.4278678894042969], + [0.36500483751296997, 0.24100542068481445], + [-5.8103928565979, 8.165812492370605], + [-2.091464042663574, -3.502624273300171], + [8.129823684692383, -1.9546691179275513], + [2.6886603832244873, -6.440742015838623], + [1.953503131866455, -3.2711572647094727], + [-4.460026741027832, 0.564372181892395], + [-2.429593324661255, 0.8197426795959473], + [2.8406035900115967, -4.291654586791992], + [-3.777437210083008, 2.5454349517822266], + [-0.5749263167381287, -0.7996869087219238], + [5.797617435455322, -1.1081939935684204], + [2.7090365886688232, -4.073061943054199], + [-3.0997965335845947, -3.851351499557495], + [-4.886322498321533, -2.961599826812744], + [-0.5622444748878479, 9.413771629333496], + [-0.19625979661941528, 10.143596649169922], + [-2.2487571239471436, 1.6447163820266724], + [-3.799703359603882, -3.2525150775909424], + [4.131008625030518, 6.5942792892456055], + [-4.982583522796631, 6.28382682800293], + [-3.8594934940338135, -2.2145462036132812], + [1.638500452041626, 1.549669623374939], + [1.2475605010986328, -6.1546478271484375], + [-2.465686321258545, 1.864913821220398], + [-5.652617931365967, -1.1986647844314575], + [-0.4469313621520996, -1.3939186334609985], + [-5.6833882331848145, -3.067819595336914], + [0.7600100636482239, 9.2322998046875], + [6.219567775726318, -1.4924951791763306], + [-3.792198419570923, -1.2568398714065552], + [-0.20312482118606567, -0.6244440674781799], + [-5.410480499267578, -3.7284557819366455], + [2.821035861968994, -4.164738655090332], + [4.915751934051514, -2.7895877361297607], + [2.6032373905181885, -3.9667654037475586], + [1.4405630826950073, -7.305034637451172], + [3.0147335529327393, -4.513071060180664], + [2.716806173324585, -5.445183277130127], + [-0.20904546976089478, 10.749383926391602], + [-7.816382884979248, -0.736912727355957], + [1.9805779457092285, 4.566067695617676], + [5.642423629760742, -1.888292908668518], + [-5.611353397369385, -2.599382162094116], + [-5.525852203369141, 7.00469970703125], + [-2.4398136138916016, 1.7147923707962036], + [-1.6848324537277222, -0.3342438340187073], + [-2.0111193656921387, 5.390187740325928], + [-4.501307487487793, -1.3001528978347778], + [2.9727017879486084, -4.467195510864258], + [9.191375732421875, -2.517570972442627], + [-6.465142250061035, 7.742387771606445], + [-2.513523817062378, 1.8582414388656616], + [9.131160736083984, -2.6638638973236084], + [2.0104124546051025, -4.480478286743164], + [-4.984091281890869, -3.348965883255005], + [3.2843058109283447, -4.90000057220459], + [1.8050158023834229, 0.38610702753067017], + [5.349942684173584, 7.192432403564453], + [-0.2624850273132324, -2.0686938762664795], + [-4.513009071350098, -3.6537344455718994], + [1.0792391300201416, -7.249155044555664], + [3.3118720054626465, -4.965506553649902], + [1.969064474105835, 5.388594627380371], + [-2.094562530517578, -1.937290072441101], + [-4.448975086212158, -4.366774559020996], + [-3.3108303546905518, -1.4851311445236206], + [-4.252388954162598, 6.540849208831787], + [1.2703361511230469, -6.539665699005127], + [0.29733458161354065, -0.6924092173576355], + [3.910644769668579, 6.711800575256348], + [-9.103219032287598, 11.236957550048828], + [8.339848518371582, -2.714258909225464], + [8.323477745056152, -2.5763020515441895], + [-4.856970310211182, 7.752175331115723], + [8.59725570678711, -2.4033377170562744], + [-6.594445705413818, 3.992412805557251], + [-6.225718021392822, 5.888360977172852], + [-2.5459601879119873, -4.48278284072876], + [6.830605506896973, -2.1076271533966064], + [3.0922839641571045, -7.077427387237549], + [-2.688382387161255, 0.5253400206565857], + [1.3242175579071045, 0.33483532071113586], + [-2.9574034214019775, -4.454219818115234], + [-0.5421493649482727, 10.85861873626709], + [3.0072476863861084, -4.524579048156738], + [8.170734405517578, -2.0814201831817627], + [-5.8872151374816895, 6.885067462921143], + [-4.405561447143555, 7.272900581359863], + [1.5269904136657715, 6.560214042663574], + [-2.1269404888153076, 1.8664917945861816], + [-5.994790554046631, -2.734347105026245], + [-0.8482332229614258, 8.533347129821777], + [0.3942105770111084, 0.12155216932296753], + [-0.21563678979873657, 10.814626693725586], + [-2.707533121109009, -1.224858283996582], + [0.9358585476875305, -0.09033866226673126], + [-4.935633182525635, -2.4506263732910156], + [-0.45911771059036255, -0.6413373947143555], + [-5.059228420257568, -1.0937961339950562], + [2.154616117477417, -7.064296722412109], + [-4.820703029632568, 5.636500358581543], + [2.4043691158294678, 4.239823818206787], + [-7.860328674316406, -0.9699177742004395], + [-2.331552743911743, -0.29388535022735596], + [1.4176154136657715, -7.931684494018555], + [8.102666854858398, -2.1737489700317383], + [-4.9447340965271, -3.204763412475586], + [-3.5758090019226074, 4.763172626495361], + [-4.391903877258301, -2.5576980113983154], + [-5.218916893005371, 1.3866910934448242], + [0.7403761744499207, 0.04396423324942589], + [-5.797617435455322, 4.691995143890381], + [-7.1319260597229, -0.9958507418632507], + [-3.378093957901001, 2.775891065597534], + [-5.651879787445068, -2.606506824493408], + [-2.8965237140655518, 3.149418354034424], + [-0.6913676857948303, -0.844342827796936], + [-4.1551618576049805, -3.169919729232788], + [3.2192025184631348, -4.813084602355957], + [2.740173578262329, -6.426147937774658], + [-4.5688700675964355, 6.146632194519043], + [-5.383164882659912, 6.3617401123046875], + [-5.574095726013184, -1.9212886095046997], + [-0.337012380361557, -1.0967081785202026], + [0.9618086218833923, 6.648733615875244], + [-0.32452648878097534, 10.127889633178711], + [1.947544813156128, -4.523374080657959], + [9.195799827575684, -2.751802921295166], + [-3.617299795150757, -1.9479166269302368], + [-3.206583261489868, -2.226376533508301], + [6.816573619842529, -1.6037884950637817], + [-1.9455116987228394, 0.1539248824119568], + [2.168734073638916, 5.364169120788574], + [-5.154879093170166, -7.226776599884033], + [-5.357046604156494, 2.2684545516967773], + [-6.946313381195068, 1.8193475008010864], + [1.4725589752197266, -5.695892333984375], + [-0.31438130140304565, 9.108316421508789], + [-7.027407169342041, -1.3312042951583862], + [-3.868572950363159, -4.043055057525635], + [1.633126974105835, -8.602535247802734], + [5.966481685638428, -1.4936360120773315], + [-5.007058620452881, 7.42816162109375], + [1.9464809894561768, 5.487074851989746], + [-4.592169284820557, -3.6514358520507812], + [7.344094753265381, -3.2153985500335693], + [-2.86799693107605, 3.0768625736236572], + [3.788163423538208, 6.407269477844238], + [-5.99044942855835, 7.915790557861328], + [6.665623188018799, -1.908833622932434], + [-3.737715005874634, -2.354614019393921], + [3.17159104347229, -5.030538558959961], + [-5.744446277618408, -2.6775031089782715], + [-4.876278400421143, -0.6547403931617737], + [-2.283987283706665, 0.8200643062591553], + [-0.4791107773780823, 9.247380256652832], + [3.5313100814819336, 1.4795862436294556], + [-2.1037940979003906, 2.6291308403015137], + [5.1235785484313965, -1.7537798881530762], + [-7.984095096588135, -1.2246073484420776], + [2.8756463527679443, -4.461834907531738], + [1.3571887016296387, -6.196446418762207], + [-0.29745811223983765, 9.390697479248047], + [-0.2453191876411438, 9.614385604858398], + [-4.221871376037598, -3.7565834522247314], + [2.749204397201538, 5.5250139236450195], + [-5.377833843231201, 1.9664126634597778], + [0.33560577034950256, -1.375258207321167], + [-0.18982845544815063, 10.310859680175781], + [1.4703081846237183, -6.903597831726074], + [-4.230835914611816, -1.8536759614944458], + [-0.11087048798799515, -0.42466726899147034], + [-2.2707056999206543, 1.4734036922454834], + [-5.324745178222656, 5.580586910247803], + [-4.518885612487793, -0.5548303127288818], + [5.399688243865967, -3.926527738571167], + [1.1800100803375244, -0.8296747207641602], + [-3.349863290786743, -2.7368812561035156], + [1.682647705078125, -8.644571304321289], + [-4.473051071166992, -1.9372801780700684], + [-5.684239864349365, 5.381476879119873], + [-7.490923881530762, 9.288186073303223], + [1.2477691173553467, 5.380831718444824], + [-5.7176008224487305, 2.796056032180786], + [1.6721731424331665, 1.469550371170044], + [3.288499116897583, -4.907941818237305], + [0.08531605452299118, 8.742082595825195], + [-3.2732856273651123, -2.816296339035034], + [-6.590755462646484, 8.439482688903809], + [3.310688018798828, -5.263495445251465], + [-0.49893081188201904, 9.547426223754883], + [-5.594465255737305, -2.710834503173828], + [2.751145601272583, 1.2709695100784302], + [-2.8979203701019287, 3.123461961746216], + [1.8144339323043823, -5.426267147064209], + [2.2286431789398193, -5.706526756286621], + [-4.989677906036377, -3.1969261169433594], + [0.9717064499855042, 6.568581581115723], + [-0.4863736629486084, 4.864686489105225], + [-1.438493251800537, -3.330427885055542], + [-4.43867826461792, -3.874549150466919], + [7.14877462387085, -1.762529730796814], + [2.6475396156311035, 6.006823539733887], + [-0.3709563612937927, 10.942974090576172], + [1.0143827199935913, -5.730167388916016], + [-0.21813595294952393, 9.523202896118164], + [0.34823256731033325, 0.07149487733840942], + [1.9103288650512695, -9.588608741760254], + [-4.742425918579102, -4.175196647644043], + [-3.0191776752471924, 5.109270095825195], + [3.5234761238098145, 6.567784786224365], + [-0.24979740381240845, 9.423179626464844], + [5.160556316375732, 6.8625922203063965], + [-2.6381099224090576, -4.559972763061523], + [2.6379377841949463, -4.061807632446289], + [-2.7281758785247803, -3.8447084426879883], + [-4.951357364654541, -2.87980055809021], + [5.077488422393799, -0.6111982464790344], + [2.100128412246704, 6.145933151245117], + [-3.0585508346557617, -1.3208369016647339], + [-2.265197992324829, -1.2494086027145386], + [-5.079898834228516, -3.5088937282562256], + [-3.8477768898010254, -2.963796377182007], + [2.868995189666748, -4.589351177215576], + [-5.235293865203857, -3.031686782836914], + [-0.5164051651954651, 10.106559753417969], + [-2.3933098316192627, 0.7352893352508545], + [-2.6988556385040283, -3.073085308074951], + [-4.091013431549072, 3.138928174972534], + [-5.33342170715332, -3.02103590965271], + [-3.6774046421051025, -2.7801811695098877], + [0.8219918608665466, -5.078803062438965], + [0.21205857396125793, -5.339152812957764], + [2.130556344985962, -10.230626106262207], + [3.0850648880004883, -4.656971454620361], + [2.960836172103882, -4.499933242797852], + [-3.3593857288360596, -1.8417123556137085], + [-5.676967144012451, 7.444788932800293], + [-2.0054075717926025, 2.1444642543792725], + [-5.0100483894348145, 6.40201473236084], + [-2.653386354446411, -0.8620168566703796], + [3.2591912746429443, -4.8672966957092285], + [-4.979189395904541, 6.59771728515625], + [-2.3897950649261475, 1.5148355960845947], + [-3.2883312702178955, 5.254561424255371], + [0.8547148704528809, 4.994488716125488], + [5.423292636871338, -4.590978622436523], + [-6.560518741607666, -0.9916842579841614], + [0.8622049689292908, 3.971886396408081], + [-5.079514026641846, -0.7035843133926392], + [0.04574369639158249, 10.039590835571289], + [-2.0781044960021973, 2.7519683837890625], + [3.5996406078338623, -1.5733355283737183], + [-0.4215351343154907, 9.550187110900879], + [-1.553279995918274, -1.469983458518982], + [-5.507389545440674, -1.9958208799362183], + [8.894411087036133, -2.337655544281006], + [0.5789938569068909, 4.876932144165039], + [-5.127758502960205, -4.211304187774658], + [-6.444278240203857, 2.1102044582366943], + [2.7780182361602783, -4.131794452667236], + [2.57389760017395, -6.046494483947754], + [5.1955671310424805, -2.0351526737213135], + [0.05014949291944504, 9.599688529968262], + [0.8449704051017761, -0.0683009922504425], + [-5.393592357635498, 7.397418022155762], + [1.4911342859268188, -5.727837562561035], + [-1.6537812948226929, 6.136956214904785], + [2.7470529079437256, 4.818235874176025], + [-2.395885705947876, 5.818006992340088], + [-5.378353595733643, 3.555314779281616], + [-5.245247840881348, 4.086404800415039], + [4.482310771942139, -3.490107297897339], + [-3.8084919452667236, -2.741668939590454], + [-7.5660481452941895, -1.7504833936691284], + [7.196609020233154, -2.5494816303253174], + [0.38230282068252563, 5.481380462646484], + [-4.691917896270752, -4.492996692657471], + [1.3960423469543457, -8.520099639892578], + [-2.451552629470825, 1.3206363916397095], + [-5.023157596588135, 1.8393338918685913], + [-5.6367011070251465, -4.375573635101318], + [2.367204427719116, -4.1035332679748535], + [8.671526908874512, -2.3201913833618164], + [2.8622305393218994, -5.973414421081543], + [-2.447648525238037, 1.7781782150268555], + [-4.1161580085754395, -2.2678871154785156], + [2.2214953899383545, -6.7875800132751465], + [-2.4483697414398193, 6.5377678871154785], + [-5.140355110168457, 7.135676383972168], + [-0.9308352470397949, 9.113515853881836], + [-6.264390468597412, 6.572304725646973], + [-2.2065372467041016, -0.7981793284416199], + [-2.5804641246795654, 1.9888688325881958], + [-5.577280521392822, -4.108277320861816], + [-6.85298490524292, 8.36085033416748], + [7.7704081535339355, -2.05698561668396], + [3.0278751850128174, -4.844122886657715], + [0.058126501739025116, 10.368302345275879], + [8.648168563842773, -2.3170599937438965], + [-2.6363279819488525, 1.4149507284164429], + [-6.540842056274414, 8.226773262023926], + [7.764915466308594, -1.8475091457366943], + [2.2835350036621094, 5.62571907043457], + [6.554610252380371, -1.6161748170852661], + [-7.314397811889648, -1.9615087509155273], + [-3.3275656700134277, -0.1955772042274475], + [-2.1271567344665527, 1.5910474061965942], + [-4.511487007141113, -2.3073410987854004], + [-5.7801690101623535, -2.1564228534698486], + [8.079535484313965, -1.6278587579727173], + [-6.87114953994751, -1.2299913167953491], + [-3.8348746299743652, 5.594122409820557], + [-0.924867570400238, -1.4737626314163208], + [2.424208879470825, -4.669644832611084], + [-4.881718158721924, -2.714557409286499], + [4.416397571563721, -3.680560827255249], + [9.099069595336914, -2.5765297412872314], + [2.340904951095581, -4.472128868103027], + [-4.624811172485352, 5.990792274475098], + [2.6840593814849854, -4.311057090759277], + [-4.876158237457275, -3.5454699993133545], + [5.778629779815674, -1.974061131477356], + [-0.5111777186393738, 10.375553131103516], + [-2.6319737434387207, 2.3434998989105225], + [-3.190260648727417, -0.9341007471084595], + [-5.152066707611084, -4.616293430328369], + [-0.41317182779312134, 10.462395668029785], + [6.284312725067139, -2.2772557735443115], + [2.8428990840911865, -4.304602146148682], + [-0.8863832354545593, 7.438594818115234], + [-4.484571933746338, -0.7865363955497742], + [-0.2743062973022461, 8.624979972839355], + [6.851028919219971, -1.5608042478561401], + [-4.526254177093506, -3.6161234378814697], + [-2.4580395221710205, -1.319862961769104], + [-2.4095656871795654, 0.9263941049575806], + [-0.36965376138687134, 10.454936981201172], + [-2.355677366256714, 2.2521145343780518], + [0.6177815794944763, -6.537369728088379], + [-4.246695041656494, 1.7897752523422241], + [-6.0846357345581055, -1.2340139150619507], + [-7.335663318634033, 8.980613708496094], + [-2.5516037940979004, 1.6724694967269897], + [2.342106819152832, 5.993842124938965], + [2.495619058609009, -4.839922904968262], + [-6.9004292488098145, -0.8710824251174927], + [-0.604641854763031, -0.321748822927475], + [-2.2169389724731445, 2.3295698165893555], + [1.3967983722686768, -3.356705904006958], + [-5.537919044494629, 7.474778652191162], + [-4.150375843048096, -3.802089214324951], + [-4.146142482757568, 3.8498456478118896], + [-2.515108346939087, 0.7543937563896179], + [-4.764139652252197, -3.7906904220581055], + [1.583550214767456, -4.486952781677246], + [-5.00272274017334, -3.3923542499542236], + [-0.5121192336082458, 12.226118087768555], + [-4.191404342651367, 4.829961776733398], + [-4.761082649230957, -2.6553196907043457], + [-0.7257393598556519, 8.649242401123047], + [-5.631659030914307, 3.3017160892486572], + [-4.497935771942139, -2.4579789638519287], + [8.530831336975098, -2.2861483097076416], + [-6.629318714141846, -1.5730804204940796], + [2.2517378330230713, -7.98921012878418], + [8.560395240783691, -2.340815305709839], + [-5.117077827453613, -2.9382216930389404], + [-3.272446870803833, 7.607253074645996], + [-4.910604000091553, 5.652477264404297], + [-4.112446308135986, -1.1534922122955322], + [2.264540195465088, 2.3821117877960205], + [-3.179533004760742, -1.7973443269729614], + [9.450801849365234, -2.4723236560821533], + [3.23868727684021, -4.866372108459473], + [6.0376200675964355, -1.3734064102172852], + [-6.004691123962402, 7.800595283508301], + [-2.953650712966919, -4.662264347076416], + [7.820969104766846, -1.8707737922668457], + [-2.6603801250457764, 3.046503782272339], + [2.5632667541503906, -4.88023042678833], + [-5.085812091827393, 2.477909564971924], + [8.16524887084961, -2.9938883781433105], + [6.779460430145264, -1.4767590761184692], + [5.426220417022705, -1.2043025493621826], + [-0.895888090133667, 9.835616111755371], + [1.2316880226135254, -7.274077415466309], + [-3.9208171367645264, -2.5089261531829834], + [1.8684606552124023, -4.172270774841309], + [-1.6787967681884766, 2.521806478500366], + [1.842970609664917, -8.303481101989746], + [2.804483413696289, -4.429535388946533], + [-3.1379635334014893, -4.679396629333496], + [1.8009015321731567, 4.935272693634033], + [2.9921584129333496, -4.506805419921875], + [-5.698134422302246, -0.5693581700325012], + [-2.463754177093506, 1.8992376327514648], + [-6.739397048950195, -1.7059215307235718], + [6.646409034729004, -1.681002140045166], + [3.9329111576080322, -5.75034761428833], + [-4.702919960021973, -2.8817856311798096], + [1.230318546295166, -6.08601713180542], + [2.841780662536621, -10.057958602905273], + [1.306347131729126, -7.75731086730957], + [-5.180331230163574, -3.5923211574554443], + [5.810225009918213, -1.3168681859970093], + [-0.6255751252174377, 8.416199684143066], + [-3.328235387802124, 3.521615982055664], + [-3.737562417984009, -0.8133496642112732], + [-3.583075761795044, -1.4822276830673218], + [-0.19616037607192993, 10.300003051757812], + [2.6220390796661377, -4.15245246887207], + [1.9828071594238281, 5.762399196624756], + [3.5131094455718994, 4.9553117752075195], + [-2.3909666538238525, 1.7321135997772217], + [2.775770902633667, -4.337197303771973], + [-3.7780253887176514, 4.794373512268066], + [-5.407032489776611, 4.816887855529785], + [8.973912239074707, -2.5470798015594482], + [0.9725410342216492, -0.11857452988624573], + [-0.2522028088569641, 1.8074649572372437], + [6.787256240844727, -1.5337448120117188], + [-2.032153367996216, 0.7369630932807922], + [-7.024171352386475, 8.626830101013184], + [2.9034371376037598, 0.7893904447555542], + [7.245770454406738, -1.5099492073059082], + [-1.9112569093704224, 2.2535948753356934], + [3.1997363567352295, -4.996142387390137], + [-6.951294422149658, -2.446848154067993], + [-5.740611553192139, -1.7282832860946655], + [0.5221700668334961, 0.451495885848999], + [-4.378610134124756, -3.5157954692840576], + [2.3520660400390625, 5.906366348266602], + [-0.24785977602005005, 9.732756614685059], + [-2.0280656814575195, 2.0752952098846436], + [-5.7222514152526855, 0.7044022083282471], + [-3.525317430496216, 2.7824313640594482], + [6.490798473358154, -4.989288330078125], + [-4.9462456703186035, 5.448974609375], + [-0.1270783543586731, -1.1752108335494995], + [1.4637808799743652, -7.429188251495361], + [-7.095343112945557, 8.902894973754883], + [-2.7509148120880127, 5.663331031799316], + [-7.881707191467285, -0.22951984405517578], + [-3.1510050296783447, 6.095771789550781], + [-0.2797926664352417, 8.961516380310059], + [-6.4255852699279785, 7.776223182678223], + [-4.936959743499756, 2.7336392402648926], + [-1.1792244911193848, 7.4665913581848145], + [0.8795415163040161, 0.12982255220413208], + [-2.6871964931488037, 2.762293577194214], + [9.610822677612305, -2.650266170501709], + [-6.645106792449951, 8.336038589477539], + [6.379093170166016, -1.2281365394592285], + [-6.299807071685791, -2.893263578414917], + [-5.149538993835449, -3.3376152515411377], + [7.502962112426758, -1.7023259401321411], + [-4.156474590301514, -1.797170639038086], + [2.1029810905456543, 5.82433557510376], + [-0.29012417793273926, 9.384775161743164], + [2.692805767059326, -6.3867926597595215], + [3.067969560623169, -4.666603088378906], + [2.3300838470458984, 5.630433082580566], + [-6.388177394866943, 7.643916130065918], + [-5.125752925872803, -3.8569509983062744], + [-0.39920109510421753, 11.369966506958008], + [-3.2133114337921143, -2.2802820205688477], + [-2.417928457260132, 1.4926984310150146], + [0.007502280175685883, -3.4473652839660645], + [-4.273788928985596, -2.2238030433654785], + [-2.8157641887664795, -5.071201324462891], + [8.335330963134766, -2.473313093185425], + [7.934249401092529, -1.8748542070388794], + [2.5017805099487305, -5.6555376052856445], + [7.0342302322387695, -1.7692924737930298], + [-0.27294570207595825, 9.642852783203125], + [3.919553518295288, -3.0361075401306152], + [-0.08156464248895645, -0.4442364573478699], + [3.085206985473633, -4.651177406311035], + [-0.6353138089179993, 9.28695011138916], + [-5.232790946960449, -4.254640102386475], + [-2.470693826675415, 1.1432853937149048], + [-1.875719428062439, 0.78183513879776], + [3.069833517074585, -4.624410629272461], + [8.493518829345703, -2.2813212871551514], + [-5.89042854309082, 7.586684226989746], + [-1.4622607231140137, 1.0836608409881592], + [-0.2096582055091858, 10.652210235595703], + [4.574939250946045, 6.8746795654296875], + [-4.25670862197876, -3.621073007583618], + [2.7835309505462646, -3.497488021850586], + [-0.43165355920791626, 2.1994616985321045], + [2.4951860904693604, 0.8700110912322998], + [-5.1422200202941895, -1.721284031867981], + [-2.6041791439056396, 0.49881887435913086], + [-5.9976983070373535, -2.6783013343811035], + [0.3556808829307556, -0.2523164749145508], + [0.2518417239189148, -0.5885753035545349], + [1.296668529510498, -6.068830966949463], + [2.467517137527466, -0.880862832069397], + [-5.357835292816162, -2.9781014919281006], + [-4.056746006011963, -1.1626248359680176], + [-6.056519508361816, 7.117137432098389], + [2.7534053325653076, -4.119723796844482], + [2.2039573192596436, -5.546277046203613], + [0.41170722246170044, 10.225109100341797], + [-4.120389461517334, -4.025582313537598], + [-5.9487738609313965, -2.768526077270508], + [-3.5475542545318604, -5.056602478027344], + [2.834291696548462, -4.383904457092285], + [-0.29511183500289917, 10.650516510009766], + [2.1345293521881104, -4.403416633605957], + [2.963701009750366, -5.1759443283081055], + [-4.619540214538574, 5.875605583190918], + [-5.217453479766846, -2.2987220287323], + [-4.287832736968994, -3.815131425857544], + [-7.5794878005981445, -0.560734748840332], + [0.3101643919944763, -5.586528778076172], + [-4.664013862609863, -2.8008251190185547], + [-4.848258018493652, -0.5153416991233826], + [-1.0504164695739746, -2.6462604999542236], + [-3.758491039276123, 5.565053939819336], + [-5.108767032623291, -3.0783557891845703], + [4.6555609703063965, -1.3862773180007935], + [1.7197387218475342, -8.807920455932617], + [-5.900513172149658, 7.306969165802002], + [-4.699041366577148, -2.5440618991851807], + [-5.014868259429932, -4.763395309448242], + [-5.093635559082031, 7.645541191101074], + [-5.965278148651123, 7.200831413269043], + [-2.297813892364502, -0.791671633720398], + [-5.996676921844482, -0.5416412353515625], + [-5.503678798675537, -2.6195995807647705], + [2.7491366863250732, -4.367266654968262], + [-0.520239531993866, 8.889995574951172], + [5.2421088218688965, -1.6447464227676392], + [-6.8941330909729, 8.475664138793945], + [-5.229847431182861, -1.9295848608016968], + [-2.4329304695129395, 2.5255346298217773], + [-4.976164817810059, 6.0309247970581055], + [2.8867759704589844, -7.993497371673584], + [-6.807717800140381, 8.492512702941895], + [3.4591290950775146, -5.609932899475098], + [-2.370628595352173, -0.7704598903656006], + [-3.998887300491333, -1.6242430210113525], + [-1.9180939197540283, -1.8309625387191772], + [5.4992218017578125, -1.322440266609192], + [-9.029340744018555, -1.0158013105392456], + [3.1677420139312744, -4.895691871643066], + [-2.539522647857666, 2.29793381690979], + [3.259861707687378, -6.9310503005981445], + [-0.35319775342941284, 9.386098861694336], + [2.1713268756866455, 0.8735345602035522], + [-0.6482408046722412, 8.892363548278809], + [-6.332880020141602, 7.219521522521973], + [-5.671422481536865, -1.7088176012039185], + [3.2698307037353516, -5.190073490142822], + [1.1365324258804321, -0.2728762924671173], + [-4.7957844734191895, -2.182337999343872], + [8.842684745788574, -2.8536617755889893], + [-2.1185357570648193, 2.6536223888397217], + [-0.23597174882888794, 9.611970901489258], + [2.4877707958221436, -6.970708847045898], + [-1.065000295639038, 9.565414428710938], + [3.0209875106811523, -6.349532127380371], + [-3.0732643604278564, -2.691882848739624], + [6.158750057220459, -1.4425667524337769], + [-2.213655948638916, 1.3721615076065063], + [1.8160762786865234, -5.723946571350098], + [-2.638997793197632, -0.24677890539169312], + [-0.4969109296798706, 0.4469592869281769], + [3.0096347332000732, -7.016905784606934], + [-2.4993298053741455, 0.5181959867477417], + [-5.35795259475708, -1.2638241052627563], + [-0.3680649399757385, 8.932134628295898], + [-3.28340220451355, -1.8487900495529175], + [-0.5053237080574036, 10.117351531982422], + [-2.952786684036255, 6.671692371368408], + [-3.8442959785461426, 5.808087348937988], + [1.1317918300628662, -0.37460899353027344], + [2.2630703449249268, 5.646409034729004], + [-5.382922649383545, -3.340848684310913], + [-4.221229076385498, 1.7096596956253052], + [-2.323729991912842, 1.6692956686019897], + [-7.6384663581848145, 9.26181697845459], + [-0.380778968334198, 9.66423225402832], + [-2.7834270000457764, -2.999333143234253], + [5.525965213775635, -1.1566935777664185], + [2.8014376163482666, -4.635620594024658], + [-4.577510833740234, -1.8377931118011475], + [-6.131921291351318, 7.270725250244141], + [-0.6338925957679749, -1.209659457206726], + [-6.588549613952637, 6.747294902801514], + [7.15256929397583, -1.48715341091156], + [1.197947382926941, 6.94400691986084], + [1.9661498069763184, -6.582979202270508], + [7.186238765716553, -2.8292930126190186], + [-3.7322402000427246, 2.4322144985198975], + [-2.594484567642212, 1.9750999212265015], + [-2.322322130203247, 4.756439208984375], + [6.753890037536621, -2.576817035675049], + [0.027851693332195282, -0.8376357555389404], + [-6.545731067657471, 7.744199752807617], + [-5.219102382659912, -1.7560333013534546], + [9.630179405212402, -2.679898738861084], + [-2.252671480178833, 1.45637047290802], + [0.5841838121414185, -0.06261171400547028], + [-0.21748846769332886, 9.628971099853516], + [-3.778909683227539, 6.594740867614746], + [-5.046298980712891, 3.508903741836548], + [-7.577315807342529, -0.7768245935440063], + [-0.2811009883880615, 9.865111351013184], + [6.746519565582275, -1.5260297060012817], + [0.12383329123258591, -0.1117648333311081], + [2.1589176654815674, -8.643899917602539], + [-3.7489078044891357, 3.342045783996582], + [-2.8435165882110596, 3.0828135013580322], + [2.353837490081787, -8.582983016967773], + [-2.4994969367980957, 2.0184738636016846], + [-4.083238124847412, -2.0188167095184326], + [-1.9396182298660278, 1.5623244047164917], + [2.088501214981079, -9.037569046020508], + [-1.848633050918579, 1.249488353729248], + [1.7566969394683838, -5.842403411865234], + [-5.266469478607178, -1.5126283168792725], + [-2.4842371940612793, -1.3938802480697632], + [1.4962403774261475, -7.660663604736328], + [-7.65017557144165, -0.34364938735961914], + [2.006263017654419, 5.0034637451171875], + [2.441401958465576, -6.096667289733887], + [-3.2643191814422607, -3.461435079574585], + [-4.4876580238342285, -3.446913003921509], + [-0.43673521280288696, -0.45364969968795776], + [1.711935043334961, -6.531801223754883], + [-4.265727996826172, 2.977142333984375], + [6.236555099487305, -1.127077579498291], + [2.287883996963501, -6.969357013702393], + [4.781919479370117, -1.361270546913147], + [3.1443593502044678, -4.983001708984375], + [1.2939497232437134, -2.9943759441375732], + [8.916069984436035, -2.7957613468170166], + [-6.180356502532959, 7.413339614868164], + [-5.84448766708374, 7.88486909866333], + [-5.346618175506592, -0.3503803610801697], + [-0.5346641540527344, 5.586665630340576], + [-6.049034595489502, 7.36018180847168], + [-3.712153673171997, -2.6299853324890137], + [3.128635883331299, -4.793852806091309], + [-5.331478595733643, -4.134396553039551], + [2.2913992404937744, 5.778436660766602], + [-1.882802963256836, -1.3535798788070679], + [-1.221954584121704, 6.432681560516357], + [1.779801607131958, -4.6859331130981445], + [-2.5229439735412598, 2.010791540145874], + [-4.808181285858154, -4.98011589050293], + [-5.4529709815979, -3.845569372177124], + [-4.529303073883057, -5.02774715423584], + [1.8330118656158447, 1.021653652191162], + [2.1052463054656982, 5.913973808288574], + [-0.2680830955505371, 9.868748664855957], + [8.333528518676758, -2.2377278804779053], + [-0.19397741556167603, 9.257855415344238], + [-0.329883337020874, 10.65405559539795], + [-3.643968105316162, 3.3398449420928955], + [8.788212776184082, -2.4537413120269775], + [1.302368402481079, 0.4666450619697571], + [1.1914923191070557, 5.841181755065918], + [4.267569541931152, 0.08917540311813354], + [0.7935844659805298, 0.17149589955806732], + [-2.116675853729248, 2.841142177581787], + [2.3516032695770264, -4.018670082092285], + [-4.2056803703308105, 6.162013053894043], + [1.0574281215667725, -7.175373077392578], + [-3.5583388805389404, 4.504642009735107], + [-0.3029429316520691, 9.245116233825684], + [2.1595160961151123, -4.146597862243652], + [1.9618585109710693, -9.724349975585938], + [2.3593013286590576, -4.148419380187988], + [1.793921947479248, -7.692759037017822], + [-2.3223674297332764, 0.9652085304260254], + [-2.1888699531555176, 1.6782350540161133], + [-4.893955707550049, 6.702230453491211], + [-4.26391077041626, 5.496340751647949], + [-4.558377742767334, -3.935378074645996], + [-2.773550271987915, 2.8514902591705322], + [-4.688260078430176, -4.195874214172363], + [3.0753238201141357, -4.7962727546691895], + [-0.5525755286216736, 12.013082504272461], + [2.6700620651245117, -4.082578182220459], + [0.7304472923278809, 1.0210899114608765], + [2.5195064544677734, -3.756474733352661], + [-7.671097755432129, -0.2274242639541626], + [2.7468912601470947, -4.379677772521973], + [2.5737576484680176, 6.295137882232666], + [-1.4056826829910278, -0.34660768508911133], + [1.849623441696167, -8.954822540283203], + [-4.419073581695557, 7.511505126953125], + [3.0896918773651123, -4.802229881286621], + [2.9338741302490234, -7.368283748626709], + [0.8104841113090515, -6.19502592086792], + [-3.8067572116851807, 5.591696262359619], + [2.1055023670196533, -6.859396934509277], + [7.811044216156006, -1.9182456731796265], + [-2.7867062091827393, 1.6488693952560425], + [-1.830069899559021, 5.697940349578857], + [-1.146358847618103, -1.2889246940612793], + [3.1999945640563965, -4.7822980880737305], + [-6.964658260345459, -1.4703176021575928], + [0.3191958963871002, -0.4299255609512329], + [8.509663581848145, -2.379906415939331], + [-3.356365203857422, -0.8327206373214722], + [2.896794557571411, -4.366653919219971], + [-5.511338710784912, 5.452420711517334], + [-5.536985874176025, -2.8203933238983154], + [-4.136263370513916, -2.457322835922241], + [6.012038230895996, -2.7330408096313477], + [8.52334976196289, -2.8265645503997803], + [8.418752670288086, -2.222015857696533], + [-4.589625835418701, 5.915738105773926], + [-2.6059019565582275, 2.6181323528289795], + [-0.8020860552787781, 12.16301155090332], + [-5.243610858917236, -4.586601734161377], + [-6.913058757781982, 8.6380033493042], + [9.031489372253418, -2.5463361740112305], + [8.988001823425293, -2.5062642097473145], + [0.6962445974349976, -5.475947380065918], + [8.153532981872559, -3.5403616428375244], + [2.8636462688446045, -4.663820266723633], + [1.9798781871795654, -7.695413589477539], + [-2.57377028465271, -3.2042806148529053], + [-4.777087211608887, 5.1913652420043945], + [-5.575345993041992, -2.476388692855835], + [10.052169799804688, -2.764496088027954], + [-4.49557638168335, 5.752396583557129], + [5.947633266448975, -2.3382763862609863], + [-2.4133121967315674, 1.4780051708221436], + [-4.816333293914795, -2.7085208892822266], + [-3.14591646194458, -4.182188034057617], + [-5.634749889373779, 4.798809051513672], + [-5.46261739730835, 4.244933128356934], + [2.2227067947387695, 5.699999809265137], + [0.866250216960907, -5.346713066101074], + [2.8000576496124268, -4.231973648071289], + [2.265444040298462, -6.967584133148193], + [-5.696269512176514, -2.1189372539520264], + [7.295868396759033, -2.938112497329712], + [0.8998073935508728, 0.5584026575088501], + [2.2730259895324707, 0.7722541689872742], + [1.8756158351898193, 5.650472640991211], + [0.2710229158401489, -0.28814050555229187], + [-0.5171827673912048, 11.432865142822266], + [1.5647988319396973, 5.249434947967529], + [-5.048807621002197, -3.120548963546753], + [1.182828664779663, -7.396063804626465], + [5.272579669952393, -1.0191367864608765], + [2.127204656600952, -7.457079887390137], + [-2.561981678009033, -0.1440356969833374], + [-2.876976251602173, 2.4704267978668213], + [9.403194427490234, -2.6054904460906982], + [-5.262772083282471, -2.3832132816314697], + [-4.7682929039001465, 1.8331139087677002], + [2.1420071125030518, 5.026634693145752], + [-4.228734493255615, -1.438306450843811], + [-2.3842568397521973, 1.3938443660736084], + [-7.778886318206787, -1.7687748670578003], + [1.9544050693511963, -9.597855567932129], + [5.442793369293213, -1.1006208658218384], + [-4.120347023010254, -0.48603034019470215], + [2.418081045150757, 5.919475078582764], + [-2.9969823360443115, 5.760686874389648], + [2.8102238178253174, -7.195560455322266], + [-3.2536213397979736, 0.6254457235336304], + [-4.20113468170166, 0.4206733703613281], + [3.089686632156372, -4.639040946960449], + [-5.257237911224365, 1.3115559816360474], + [-4.537788391113281, -1.5734403133392334], + [-4.9676618576049805, 1.0044116973876953], + [-3.4612104892730713, -3.7838261127471924], + [-2.932626485824585, -0.7756174802780151], + [-2.9211549758911133, 3.012967824935913], + [5.158592224121094, -4.561853885650635], + [-3.2435548305511475, 6.892996788024902], + [-5.293118476867676, -3.3714892864227295], + [4.812593936920166, -3.943918466567993], + [-7.296894550323486, 8.882213592529297], + [-5.3296380043029785, 2.551750659942627], + [-4.668883800506592, -2.8667995929718018], + [-5.156032085418701, -3.0513722896575928], + [0.5664340853691101, -2.389890193939209], + [4.241497039794922, -0.7252959609031677], + [-4.086696624755859, -3.810267686843872], + [-7.881141185760498, -0.9750103950500488], + [-0.255088746547699, 10.289090156555176], + [-5.097222805023193, 3.8097589015960693], + [-4.259069442749023, -2.1307373046875], + [-0.44833606481552124, -1.1635639667510986], + [2.4295599460601807, 6.26643705368042], + [-3.8155019283294678, 6.144449234008789], + [8.562743186950684, -2.2793428897857666], + [-6.327476501464844, -0.05420589819550514], + [-4.458839416503906, 6.8951592445373535], + [9.024399757385254, -2.504836320877075], + [-5.296146392822266, -3.272390365600586], + [-4.844401836395264, -1.2024601697921753], + [-4.557586669921875, -3.8352530002593994], + [-0.22080302238464355, -1.4912641048431396], + [-6.3012495040893555, -2.636955499649048], + [-5.204165458679199, 0.7211024761199951], + [9.030268669128418, -2.4603188037872314], + [9.20002269744873, -2.562915086746216], + [-2.7083208560943604, 5.940420150756836], + [-5.881546497344971, 3.4120821952819824], + [9.04849910736084, -2.4295990467071533], + [-2.7569174766540527, 1.8818721771240234], + [-4.555464267730713, 3.624002695083618], + [-5.6209235191345215, 0.13861238956451416], + [-0.6472803950309753, 12.094827651977539], + [-5.370546817779541, 4.992603302001953], + [6.804459571838379, -2.0073158740997314], + [-2.375028133392334, 2.0678486824035645], + [-3.926614761352539, -2.723640203475952], + [-3.9864158630371094, -4.500354766845703], + [-3.4610464572906494, -1.774135708808899], + [-3.3386178016662598, -2.1737821102142334], + [3.0486326217651367, -4.7527360916137695], + [-2.5620505809783936, -3.3680481910705566], + [-0.6566956639289856, 9.799365043640137], + [-6.0378594398498535, 5.163863658905029], + [3.002537250518799, -4.538300037384033], + [-0.627666175365448, 12.319522857666016], + [-2.5089046955108643, 5.899345874786377], + [-4.842060565948486, 1.5889451503753662], + [-0.4512386918067932, 9.448676109313965], + [1.7185500860214233, 5.031632900238037], + [7.531345367431641, -4.197726249694824], + [-5.3918328285217285, 7.991495132446289], + [-6.301298141479492, 2.3508119583129883], + [-0.14390885829925537, 9.500066757202148], + [-4.946766376495361, -0.6851938366889954], + [-0.26546359062194824, 10.211548805236816], + [2.4132161140441895, -4.1011762619018555], + [-5.256375789642334, -6.302371978759766], + [1.9452879428863525, 5.328601360321045], + [2.0794873237609863, 5.583730697631836], + [-7.332474231719971, -1.876318097114563], + [2.819091558456421, 0.9464690685272217], + [-0.5142285227775574, 10.473382949829102], + [2.8326852321624756, -6.921690464019775], + [-4.24609899520874, -2.1944665908813477], + [1.8290839195251465, 5.818483352661133], + [-5.668245792388916, -2.63883638381958], + [-4.435193061828613, -0.5898845195770264], + [-5.120916843414307, -5.1290788650512695], + [-2.467128038406372, 1.163586139678955], + [0.13611763715744019, -5.082226276397705], + [-2.6658735275268555, 2.371100902557373], + [-1.7732417583465576, -0.41717296838760376], + [-1.9327261447906494, -2.3921959400177], + [2.789900779724121, -4.6462931632995605], + [4.051486492156982, -3.912670612335205], + [-1.0190725326538086, -2.8758599758148193], + [-0.215914785861969, 9.255399703979492], + [0.029619120061397552, -3.309735059738159], + [-0.10125476866960526, 10.254687309265137], + [2.287019968032837, 5.99323844909668], + [5.670456886291504, -1.2098950147628784], + [8.466965675354004, -2.3568596839904785], + [-4.81829309463501, 3.942934989929199], + [-4.750871658325195, 6.942601203918457], + [-2.1957247257232666, 1.3343690633773804], + [-6.189965724945068, 7.966388702392578], + [7.371498107910156, -3.058081865310669], + [-3.791242837905884, -1.8728989362716675], + [-6.4214863777160645, 7.676766395568848], + [8.599705696105957, -2.3878300189971924], + [3.146954298019409, 6.173445224761963], + [0.6597625017166138, -6.435169219970703], + [2.6042160987854004, 6.235171318054199], + [1.9490067958831787, -8.685684204101562], + [-0.1612653136253357, 10.80392837524414], + [8.317946434020996, -2.2396931648254395], + [1.717098593711853, 3.967331647872925], + [2.7603275775909424, -7.696578025817871], + [-5.145020008087158, -0.6160503625869751], + [-1.428984522819519, 2.8545167446136475], + [-0.41868555545806885, 10.754411697387695], + [1.7036793231964111, 1.5883835554122925], + [-2.235365390777588, -3.1958963871002197], + [-5.289377689361572, 1.8456796407699585], + [7.212182521820068, -1.6977251768112183], + [-2.198267936706543, -1.2861989736557007], + [-2.6538355350494385, -0.01928502693772316], + [-5.426646709442139, 3.2747604846954346], + [-3.5807459354400635, 4.726381301879883], + [2.561728000640869, -3.968243360519409], + [-2.507211446762085, 2.182886838912964], + [5.374701023101807, -5.517287254333496], + [4.942180633544922, 6.938294410705566], + [1.327822208404541, 1.70095694065094], + [-5.206029415130615, -3.6405229568481445], + [-5.135799407958984, -2.62375545501709], + [-2.535917043685913, 0.8726347088813782], + [-4.13539457321167, 3.260499954223633], + [-0.19448935985565186, 9.537811279296875], + [-2.163365602493286, 2.805879831314087], + [3.2509918212890625, -4.8557329177856445], + [2.9961953163146973, -4.720677852630615], + [2.194572925567627, -2.916396141052246], + [-6.832528591156006, 8.243237495422363], + [1.8894003629684448, -3.5744287967681885], + [-5.344546794891357, 5.071389198303223], + [-0.1955741047859192, 9.827409744262695], + [2.8534462451934814, -4.320175647735596], + [5.503372669219971, -1.0998849868774414], + [1.8582630157470703, -5.8191022872924805], + [-0.9511380791664124, 8.518569946289062], + [-3.1808218955993652, -1.6983739137649536], + [-4.441977024078369, -6.051403045654297], + [-5.541128158569336, -3.4596664905548096], + [-3.963104009628296, 6.504300117492676], + [-8.153882026672363, 9.912324905395508], + [-0.46409475803375244, 5.547429084777832], + [-5.008598804473877, -3.723409652709961], + [-4.590876579284668, 6.833887100219727], + [6.076782703399658, 7.819735527038574], + [2.4766736030578613, -4.317299842834473], + [-3.4558627605438232, -4.599172592163086], + [-5.364657878875732, 7.71879768371582], + [2.9681951999664307, 5.916738510131836], + [-0.8994930982589722, -0.1494326889514923], + [-0.3397272229194641, 10.437095642089844], + [-5.114630222320557, -2.463273763656616], + [3.098665237426758, -4.987555503845215], + [9.04937744140625, -2.512612819671631], + [6.817732810974121, -1.4156361818313599], + [-4.548299312591553, 1.318974256515503], + [5.964099884033203, -1.1013001203536987], + [1.7697055339813232, 5.369634628295898], + [6.701805591583252, -2.0344133377075195], + [-0.9800794720649719, 9.893451690673828], + [-7.064694404602051, -1.795812964439392], + [-5.612231731414795, 6.061666488647461], + [1.6109604835510254, -8.577131271362305], + [2.8397634029388428, -4.675281524658203], + [-1.029830813407898, -3.352116107940674], + [8.506522178649902, -2.247267961502075], + [-6.621379852294922, -1.6524592638015747], + [1.353649377822876, 5.083351135253906], + [2.0799355506896973, -9.308374404907227], + [2.8638482093811035, -3.9327335357666016], + [-2.7219884395599365, 6.773816108703613], + [-5.408227443695068, -1.5370100736618042], + [2.086264133453369, -3.500119209289551], + [9.185370445251465, -2.5604090690612793], + [-2.869886875152588, 2.9839677810668945], + [3.1526072025299072, -4.722496032714844], + [-4.5211944580078125, -2.5674221515655518], + [9.21511173248291, -2.5834591388702393], + [-3.3248252868652344, -3.576232433319092], + [-4.4371657371521, -2.8323538303375244], + [5.7685866355896, -3.447622060775757], + [-4.691851615905762, 2.763381004333496], + [-2.2344982624053955, -0.9186129570007324], + [-6.741288661956787, -1.3066414594650269], + [-4.728896617889404, -1.9411886930465698], + [-5.713952541351318, 1.8255764245986938], + [3.889007806777954, -3.7177765369415283], + [-0.26273608207702637, 9.678991317749023], + [-0.5516279935836792, 6.446773529052734], + [-4.647339344024658, -3.013611078262329], + [-1.247381567955017, 0.18162932991981506], + [-1.751037836074829, -0.8912312984466553], + [-0.20445749163627625, -0.2139303833246231], + [2.3236496448516846, -8.765165328979492], + [3.1671500205993652, -6.312972068786621], + [-4.417156219482422, -1.816120982170105], + [3.217280149459839, -4.82470178604126], + [-0.39297574758529663, 10.639649391174316], + [-5.89019775390625, 0.06603705883026123], + [-2.220745325088501, 0.18800514936447144], + [-8.422999382019043, -0.9934854507446289], + [-6.094765663146973, 1.4523398876190186], + [2.7850277423858643, -6.521263122558594], + [5.246947765350342, -2.5985047817230225], + [8.814703941345215, -2.382943868637085], + [-2.7318789958953857, -1.19537353515625], + [0.6920957565307617, -5.54632568359375], + [6.616227626800537, -2.093898057937622], + [1.494267463684082, -7.158065319061279], + [8.765641212463379, -2.360534429550171], + [2.4220685958862305, -6.409397602081299], + [2.9629948139190674, -4.6743574142456055], + [0.9672242999076843, 0.49884676933288574], + [-2.539762258529663, 0.7459203004837036], + [7.525172710418701, -1.8327014446258545], + [-1.215114712715149, -1.1176546812057495], + [-4.301497936248779, -0.9624519944190979], + [7.6410112380981445, -1.9063166379928589], + [-0.5089884400367737, 11.187454223632812], + [-5.488187789916992, -2.5109527111053467], + [-0.2173035740852356, 10.077266693115234], + [-0.41490036249160767, 10.458248138427734], + [-4.681018829345703, -0.9351361989974976], + [5.810546875, -1.2125805616378784], + [-5.080101490020752, -1.899041771888733], + [2.861762523651123, -4.671919822692871], + [5.979764461517334, -2.6114494800567627], + [1.1098366975784302, -4.900148868560791], + [1.9676997661590576, -8.244321823120117], + [1.5343250036239624, 7.051235198974609], + [2.513439416885376, -2.916249990463257], + [-4.303848743438721, -2.9357709884643555], + [8.10739803314209, -1.8811372518539429], + [-4.067802906036377, 4.311039447784424], + [-5.613020420074463, -2.8353681564331055], + [-5.227303981781006, 2.2608683109283447], + [1.3383779525756836, 0.6308644413948059], + [-4.902116298675537, -2.908308267593384], + [-5.030984401702881, -1.3707212209701538], + [-5.776575565338135, -0.16175931692123413], + [5.043167591094971, -2.314157009124756], + [-4.320517063140869, -1.1581789255142212], + [-4.2815470695495605, -2.695894479751587], + [6.610291481018066, -5.147429466247559], + [0.48457664251327515, -0.568260133266449], + [-1.7525323629379272, 5.683896064758301], + [-2.2990927696228027, -1.8692153692245483], + [0.34857580065727234, -0.13432607054710388], + [-2.4344937801361084, 3.0661816596984863], + [-4.925631999969482, -3.931405544281006], + [2.7700278759002686, -5.931415557861328], + [2.214160203933716, 3.31181263923645], + [-5.811117649078369, 3.7827260494232178], + [-5.3858513832092285, -2.7574117183685303], + [-7.420899391174316, -0.27411949634552], + [-6.186818599700928, 8.015962600708008], + [-4.84112024307251, -4.6143646240234375], + [0.7834368944168091, -6.1343183517456055], + [-6.979318618774414, -1.7283114194869995], + [-0.1524921953678131, -0.6771353483200073], + [8.045771598815918, -2.0088467597961426], + [2.322397470474243, -3.7173879146575928], + [4.914610385894775, -1.0534018278121948], + [2.650237798690796, -3.863363027572632], + [-2.4443981647491455, 1.0460525751113892], + [-2.4430418014526367, 1.3345680236816406], + [-0.24748247861862183, 10.010940551757812], + [-0.03313063830137253, -1.371500849723816], + [4.867419719696045, -1.4636256694793701], + [5.442333698272705, 7.689205169677734], + [-6.33581018447876, -2.8998489379882812], + [1.2163316011428833, -6.701156139373779], + [8.809040069580078, -2.4885504245758057], + [-6.096085548400879, -1.1092841625213623], + [-4.862292766571045, -4.11017370223999], + [2.8580210208892822, -4.247639179229736], + [-4.054360389709473, -1.300291895866394], + [-2.742492914199829, 6.195962429046631], + [0.11368446797132492, 9.737714767456055], + [-4.435125350952148, 0.4373457133769989], + [0.6818718314170837, -5.815700531005859], + [2.0965278148651123, 4.602372169494629], + [8.843377113342285, -2.4190053939819336], + [1.615448236465454, -8.009679794311523], + [9.6824312210083, -2.6780459880828857], + [-4.384617805480957, -2.8432013988494873], + [-4.969984531402588, -2.81643009185791], + [2.9799623489379883, -4.476810932159424], + [2.021183729171753, -7.401712417602539], + [-0.2043224573135376, 9.535665512084961], + [-4.669999599456787, -6.105002403259277], + [-0.3873656392097473, 11.221282958984375], + [-7.371725559234619, -1.6776117086410522], + [3.4066033363342285, -5.148440837860107], + [-2.7643091678619385, 2.569610595703125], + [-5.4559006690979, 2.8849146366119385], + [-0.16180682182312012, 9.917633056640625], + [3.2233541011810303, -5.224379062652588], + [-5.607043743133545, -3.438889503479004], + [2.7837467193603516, -3.2304482460021973], + [-4.1168951988220215, -3.0430190563201904], + [2.8016979694366455, -4.194500923156738], + [7.929198741912842, -1.8979973793029785], + [-4.160689353942871, -3.415806531906128], + [7.889174461364746, -2.277545690536499], + [-4.895023822784424, -0.7566037178039551], + [3.574195384979248, -2.1401584148406982], + [-2.3295481204986572, 5.678022861480713], + [3.1433098316192627, -4.9779582023620605], + [-4.713881015777588, 1.2879854440689087], + [2.2892704010009766, -3.4283359050750732], + [-1.9600374698638916, 1.0049858093261719], + [-4.70646333694458, 6.241971969604492], + [-4.8999924659729, 0.12569934129714966], + [-5.3327789306640625, -1.459905982017517], + [-7.880836486816406, 9.71243667602539], + [7.856797695159912, -4.604677200317383], + [-2.6011159420013428, 5.520908355712891], + [-5.386873722076416, 1.8338340520858765], + [3.0141119956970215, -6.421038627624512], + [1.6276201009750366, 0.41290050745010376], + [-7.645493030548096, -1.9221200942993164], + [-3.1233344078063965, -1.3194122314453125], + [5.062868595123291, -2.624380350112915], + [2.9132206439971924, -3.955350637435913], + [0.13500818610191345, 0.288978636264801], + [1.9429652690887451, 5.390357971191406], + [-5.535030841827393, -3.306746006011963], + [4.528003692626953, 6.444326400756836], + [-5.4111552238464355, -0.39252036809921265], + [-6.522514343261719, 7.993398666381836], + [2.842895746231079, -4.443567752838135], + [-2.9405412673950195, -4.574067115783691], + [-0.2802528142929077, 0.5989353060722351], + [-3.2581098079681396, 2.6077990531921387], + [2.99005126953125, -4.497732639312744], + [-5.799016952514648, -1.7585281133651733], + [-4.672420978546143, 0.6780157089233398], + [1.8150041103363037, 5.094034194946289], + [-0.9596753716468811, -2.8709514141082764], + [-4.481119632720947, -2.936735153198242], + [-0.151317298412323, 10.166943550109863], + [2.9514787197113037, -4.4373674392700195], + [-3.8932268619537354, -2.6351020336151123], + [1.6087983846664429, -2.5211126804351807], + [-2.3393185138702393, 2.204275369644165], + [3.0482194423675537, -4.592584609985352], + [-8.083439826965332, -1.0082224607467651], + [7.9421515464782715, -1.9620356559753418], + [3.142489194869995, -4.948451042175293], + [-3.692033052444458, 6.521730422973633], + [-1.7741961479187012, 0.5300134420394897], + [-2.0163416862487793, 1.3145709037780762], + [5.292685508728027, -1.2244038581848145], + [-5.9644341468811035, 7.695659160614014], + [-6.486629009246826, -1.880961298942566], + [6.1777119636535645, -1.4171277284622192], + [-4.803585529327393, 0.9082776308059692], + [8.194944381713867, -2.491014242172241], + [3.0635879039764404, -5.003819942474365], + [2.7670605182647705, -4.211272239685059], + [-3.1741530895233154, 2.51652193069458], + [5.95485258102417, -1.2932320833206177], + [-4.328676223754883, 0.5604262351989746], + [-5.242832660675049, -3.6299502849578857], + [-7.588469982147217, -1.1058086156845093], + [-4.413374423980713, 6.457453727722168], + [-3.7588911056518555, 5.862915992736816], + [-5.954052448272705, -1.1282826662063599], + [1.9143025875091553, -6.6419477462768555], + [1.0198216438293457, -0.08061578869819641], + [3.0866734981536865, -4.636344909667969], + [-4.878274440765381, 0.057549234479665756], + [-2.3889548778533936, 1.226515769958496], + [-5.088409423828125, 6.139910697937012], + [1.9074316024780273, 5.532507419586182], + [-3.334554433822632, 3.7090842723846436], + [4.6402459144592285, -3.102193593978882], + [-4.7835493087768555, 5.207526206970215], + [-3.4917709827423096, -0.22549903392791748], + [-3.8599307537078857, -1.8255010843276978], + [-2.4539220333099365, 1.3816651105880737], + [2.8252170085906982, -6.309538841247559], + [-4.9306864738464355, -0.9227181673049927], + [-6.169844627380371, 7.093082427978516], + [-4.6694769859313965, 2.572185516357422], + [-4.820859432220459, 7.253363132476807], + [5.095480442047119, 7.463536739349365], + [3.225548505783081, -4.833274841308594], + [-0.11114639788866043, -1.5473735332489014], + [2.477595567703247, 6.285173416137695], + [-2.939276695251465, -1.6436437368392944], + [7.807816505432129, -2.213862180709839], + [7.3037428855896, -1.6281015872955322], + [3.0933663845062256, -4.714313983917236], + [1.3918534517288208, 5.922464847564697], + [-4.568141460418701, -0.7564581036567688], + [-4.34597635269165, 2.3628265857696533], + [2.2413628101348877, -3.6002156734466553], + [1.9780220985412598, -5.7605085372924805], + [-5.917185306549072, 5.758001327514648], + [-4.775683879852295, -3.493911027908325], + [1.9358091354370117, 0.9112998247146606], + [3.09586238861084, -4.694553852081299], + [-3.557049512863159, 2.258929967880249], + [-2.7912189960479736, -2.3674161434173584], + [6.104249477386475, -3.948883056640625], + [-2.3366053104400635, 2.479849100112915], + [-4.158541679382324, 6.069481372833252], + [-5.105563640594482, 0.8759989738464355], + [-3.5615127086639404, -3.7274248600006104], + [3.2927262783050537, -5.162386894226074], + [5.480981349945068, -1.1232786178588867], + [7.388230323791504, -3.3643765449523926], + [-4.486631870269775, -0.790462076663971], + [-2.2482309341430664, 0.22006410360336304], + [-3.7297637462615967, -3.606031656265259], + [-0.3758801817893982, 10.22404670715332], + [-5.31751012802124, -3.2104082107543945], + [-5.212162017822266, -2.1134769916534424], + [-3.5281360149383545, -2.7418198585510254], + [-0.6817521452903748, -0.6306308507919312], + [-4.101810455322266, -3.911628246307373], + [1.8607306480407715, -9.16480827331543], + [-4.840261936187744, 1.7994004487991333], + [-4.648102283477783, 6.766520977020264], + [-5.167318344116211, 2.7243454456329346], + [-3.4271271228790283, 3.1664140224456787], + [-4.466407299041748, 2.061718702316284], + [0.9626808762550354, -6.473217010498047], + [-3.6332411766052246, -4.005781173706055], + [-4.942636966705322, 1.0106393098831177], + [-4.468654155731201, -2.680798292160034], + [1.271349549293518, 4.5918731689453125], + [-7.05941915512085, 8.719253540039062], + [-7.483164310455322, -1.8413242101669312], + [-4.501257419586182, -5.924717903137207], + [-1.5881136655807495, -3.7618229389190674], + [-5.175415515899658, 5.317656517028809], + [-6.269149303436279, 8.783422470092773], + [-2.7091898918151855, 1.9821137189865112], + [-1.7043429613113403, 1.7726905345916748], + [0.46407467126846313, -2.4028680324554443], + [1.1644566059112549, -3.8322525024414062], + [6.159769058227539, -1.7738018035888672], + [-5.669515132904053, 4.243616580963135], + [-5.293949604034424, -3.966906785964966], + [-0.21244418621063232, 9.718496322631836], + [2.1849586963653564, -5.650106430053711], + [-0.21304365992546082, -0.8284955620765686], + [-6.79049015045166, -0.48978734016418457], + [-5.1710920333862305, -1.9801450967788696], + [1.3607242107391357, 1.3896092176437378], + [-3.192988157272339, -2.591736078262329], + [-6.684780597686768, -2.657457113265991], + [-4.084399700164795, -3.0838963985443115], + [-0.2112380862236023, 9.924375534057617], + [2.995439291000366, 1.3753970861434937], + [-5.948827266693115, -0.8984681963920593], + [-5.289261341094971, -3.3201076984405518], + [1.6866204738616943, -8.339681625366211], + [8.368273735046387, -2.1702046394348145], + [2.938918352127075, -4.788547992706299], + [1.3058538436889648, -7.155938148498535], + [2.4981768131256104, -3.892136335372925], + [-0.573934018611908, -1.208324909210205], + [-3.9207961559295654, -1.4458576440811157], + [-8.499486923217773, -0.9667869806289673], + [-5.257280349731445, 6.524136543273926], + [-4.559237957000732, -4.117805004119873], + [3.2772836685180664, 6.337679862976074], + [-4.471376895904541, -2.854281187057495], + [-0.547856330871582, 9.901695251464844], + [-0.1269250214099884, -0.7145862579345703], + [1.707495927810669, 1.5257445573806763], + [-1.020546317100525, -2.0047411918640137], + [8.683239936828613, -2.4141852855682373], + [1.984184980392456, -3.0382797718048096], + [2.231382131576538, 5.7459821701049805], + [-5.117342472076416, 1.3692513704299927], + [-8.587003707885742, -1.184696912765503], + [-4.1867265701293945, -4.5718231201171875], + [2.779367208480835, 3.366543769836426], + [1.939687728881836, -7.403216361999512], + [7.384766578674316, -2.527844190597534], + [-0.2841727137565613, 10.976614952087402], + [2.3383233547210693, -7.684340953826904], + [-3.979522705078125, -0.5454722046852112], + [3.0736989974975586, -4.93733024597168], + [-5.706509113311768, 6.38407039642334], + [-5.319851398468018, -2.6370866298675537], + [2.3823678493499756, -4.0532331466674805], + [-3.9434974193573, 6.618401527404785], + [2.0151593685150146, 5.123989582061768], + [-4.885678768157959, -2.7919225692749023], + [3.1525795459747314, -4.771028518676758], + [-1.96706223487854, 5.555981636047363], + [-0.931243360042572, -2.504241943359375], + [2.899170160293579, -5.097326278686523], + [-6.358165264129639, 2.457854747772217], + [-2.4763708114624023, 1.8251330852508545], + [4.338486194610596, 6.961236476898193], + [8.796163558959961, -2.4399054050445557], + [4.40325927734375, -3.1911468505859375], + [-1.5287601947784424, 8.519905090332031], + [-3.58058762550354, -2.919633626937866], + [-0.3176195025444031, 10.329174041748047], + [2.5994560718536377, -4.300532341003418], + [1.9486541748046875, -4.865182876586914], + [2.681469440460205, -4.105900764465332], + [2.7157537937164307, -4.102221965789795], + [-5.158148288726807, 5.134932518005371], + [-5.816135883331299, -2.683310031890869], + [-1.8729901313781738, 1.1038390398025513], + [-3.632211923599243, -0.5231732726097107], + [-4.972270965576172, -1.5803906917572021], + [0.4624101519584656, -1.819543480873108], + [-0.6333999633789062, 8.663471221923828], + [-1.4044773578643799, -4.415308952331543], + [-4.1619977951049805, 1.983864188194275], + [0.40542447566986084, 9.60470962524414], + [-4.082324028015137, -6.409714698791504], + [-7.9954118728637695, -0.474568247795105], + [-5.171846866607666, -3.0625650882720947], + [-6.0178985595703125, 1.144779920578003], + [-5.47513484954834, 5.762599945068359], + [-4.110948085784912, -2.0331833362579346], + [-4.042339324951172, -2.390110731124878], + [-3.9903619289398193, -4.765869140625], + [-3.8986892700195312, 5.73125696182251], + [2.39186429977417, -5.563088893890381], + [0.022063128650188446, -0.8672930598258972], + [-2.5116982460021973, -1.1323285102844238], + [-6.328680515289307, 8.06475830078125], + [5.72557258605957, -0.9572180509567261], + [-5.40604829788208, 6.195725440979004], + [-2.5993521213531494, -1.326163411140442], + [-4.463326930999756, 4.810020446777344], + [-0.5533056855201721, 11.737733840942383], + [1.3304216861724854, 5.900883674621582], + [-6.424893379211426, 8.18929386138916], + [5.6989827156066895, -2.6342594623565674], + [-0.37347257137298584, -0.5846930742263794], + [1.826902151107788, -6.391049861907959], + [1.2041277885437012, 1.3467875719070435], + [-4.746957778930664, -1.3429536819458008], + [-2.2239773273468018, -0.5526589751243591], + [0.04950540512800217, 9.590237617492676], + [8.252400398254395, -2.3592631816864014], + [2.2963171005249023, -5.503933906555176], + [7.871360778808594, -1.6247098445892334], + [-0.20803338289260864, -3.3354570865631104], + [-1.5636017322540283, 2.158888578414917], + [-3.3989298343658447, -4.544574737548828], + [-5.749087333679199, -2.89978289604187], + [-4.631181716918945, 5.699977874755859], + [-5.581753253936768, -2.7002944946289062], + [-1.0402318239212036, -0.7253255248069763], + [-4.843166351318359, -2.2783327102661133], + [3.065406084060669, -4.599516868591309], + [-2.022144079208374, 5.79620361328125], + [2.3131911754608154, -3.5414211750030518], + [-6.263331890106201, -1.4301402568817139], + [-6.680217266082764, 8.355721473693848], + [-5.265354633331299, -1.7252535820007324], + [-4.076319217681885, -5.500035285949707], + [5.32805061340332, 7.830724716186523], + [-5.345456600189209, -3.128140687942505], + [5.3051323890686035, -0.9748931527137756], + [-6.667623043060303, -0.4456496238708496], + [-0.2009555697441101, 10.08996868133545], + [1.4546273946762085, -7.755960464477539], + [-1.7761716842651367, 2.3031246662139893], + [-4.073512077331543, -4.943625450134277], + [1.9944393634796143, 4.90172004699707], + [-5.291310787200928, -1.6364539861679077], + [0.2120850682258606, -4.882942199707031], + [-2.4906656742095947, 1.8627527952194214], + [9.276237487792969, -2.575674295425415], + [-4.56823205947876, -3.4671270847320557], + [-8.060927391052246, -0.7970759868621826], + [2.187347173690796, -3.6938483715057373], + [3.6028902530670166, 6.868354320526123], + [-2.307623863220215, 2.5996530055999756], + [1.3563393354415894, 4.723045349121094], + [-5.674832344055176, 6.695004463195801], + [2.557666778564453, -5.11549186706543], + [2.3123342990875244, 4.927727699279785], + [2.7379376888275146, -4.896414756774902], + [-5.214169979095459, 0.41503024101257324], + [-5.682609558105469, -2.1647861003875732], + [0.46620094776153564, -0.5188050866127014], + [-0.17536503076553345, 9.53536605834961], + [2.0746662616729736, -3.6463704109191895], + [-3.7353315353393555, -5.620500087738037], + [4.388930797576904, -1.14478600025177], + [-1.5297191143035889, 2.374948740005493], + [1.6481399536132812, 0.47708046436309814], + [3.1486032009124756, -4.711462497711182], + [0.9940970540046692, 0.18830132484436035], + [-3.5856826305389404, -3.139578104019165], + [8.889786720275879, -2.4662468433380127], + [-6.7358880043029785, -0.512291669845581], + [-0.933419942855835, 9.076221466064453], + [-5.98527717590332, 7.6617631912231445], + [-6.60986852645874, -2.0327444076538086], + [0.5259655117988586, 0.3705019950866699], + [0.8976680636405945, 0.3878538906574249], + [-6.902548313140869, 8.481668472290039], + [2.2530479431152344, 0.6158345937728882], + [0.378922700881958, -0.36555689573287964], + [5.923046588897705, -3.7790932655334473], + [0.01027553528547287, -1.054986596107483], + [1.8497132062911987, -6.486606597900391], + [-5.9700236320495605, 0.4023153781890869], + [9.089892387390137, -2.5180609226226807], + [-2.239224672317505, 2.6014750003814697], + [1.4921960830688477, -7.256357192993164], + [0.3051896393299103, -0.1598769873380661], + [0.30522385239601135, -0.07297933101654053], + [1.9455461502075195, 5.099554061889648], + [3.9857571125030518, -4.622736930847168], + [-3.850618362426758, -1.5286375284194946], + [8.762818336486816, -2.4704902172088623], + [1.9574401378631592, -3.7778756618499756], + [1.076101303100586, -5.0202484130859375], + [2.045444965362549, -5.306635856628418], + [-4.030004024505615, -2.2033464908599854], + [-3.183783769607544, 3.1322021484375], + [-6.491380214691162, 0.44791531562805176], + [-0.02829403430223465, 9.553787231445312], + [-5.469980716705322, -3.278855800628662], + [-0.5517969727516174, 9.620658874511719], + [2.8699731826782227, -2.367070436477661], + [0.1105373278260231, -0.7233683466911316], + [-7.104690074920654, -0.8963106870651245], + [1.3427108526229858, -6.1311798095703125], + [3.05918288230896, -4.60221004486084], + [9.647074699401855, -2.6805222034454346], + [-0.42333632707595825, 8.63681411743164], + [8.45992374420166, -2.3479771614074707], + [2.347902536392212, -3.9835121631622314], + [3.101557970046997, -4.667130470275879], + [8.605777740478516, -2.359844446182251], + [3.0767223834991455, -4.619373321533203], + [-0.3318926692008972, 10.498149871826172], + [8.075112342834473, -2.121472120285034], + [0.8560529351234436, -5.7241363525390625], + [-4.950424671173096, -2.0508978366851807], + [-5.07373571395874, -2.7888879776000977], + [2.9194161891937256, -4.5952863693237305], + [-4.831033229827881, -0.14302349090576172], + [-4.5518317222595215, -6.056201457977295], + [3.3938186168670654, -6.576976776123047], + [-1.9627081155776978, -0.7340155839920044], + [-0.6252307295799255, 11.978755950927734], + [-5.009641170501709, -2.2013444900512695], + [7.972484111785889, -2.8170220851898193], + [0.7758602499961853, 6.884950637817383], + [1.8614072799682617, 5.0136237144470215], + [-5.518608093261719, 6.504593849182129], + [-5.141891956329346, -1.8380600214004517], + [1.556472897529602, -7.839483737945557], + [0.16416382789611816, -0.5212513208389282], + [-5.042879104614258, 6.096341133117676], + [1.5358994007110596, -6.990667819976807], + [-2.5919182300567627, 1.9551173448562622], + [4.582396507263184, -1.4366061687469482], + [-3.2039291858673096, -3.15478777885437], + [8.903740882873535, -2.427945375442505], + [-2.304391384124756, 1.345950961112976], + [2.9262077808380127, 5.760467529296875], + [-4.045869827270508, -2.6625356674194336], + [2.7651560306549072, -4.297759056091309], + [3.2574455738067627, -0.03256667032837868], + [3.10349702835083, -4.954195976257324], + [-5.629543781280518, 3.054185628890991], + [-4.6069207191467285, 3.2228314876556396], + [-6.2816548347473145, -3.27817440032959], + [-6.817638874053955, -1.3999818563461304], + [-5.2750349044799805, 7.579750061035156], + [2.5579476356506348, -4.1138129234313965], + [8.161681175231934, -2.4566001892089844], + [-2.197507381439209, 0.505182147026062], + [3.9098496437072754, 6.326714515686035], + [2.545541524887085, -3.8687751293182373], + [-2.6903703212738037, 4.387282371520996], + [-5.487293243408203, -2.9001035690307617], + [9.256057739257812, -2.6130592823028564], + [-5.384567737579346, 5.223604679107666], + [5.282416820526123, -1.2567795515060425], + [2.418217420578003, -8.116971015930176], + [2.123279333114624, -3.5281245708465576], + [-0.13741743564605713, 5.415473937988281], + [-1.0664184093475342, 1.568325400352478], + [7.814308166503906, -1.99113130569458], + [-4.954102993011475, 6.164296627044678], + [-2.0654101371765137, 1.7141406536102295], + [-5.563832759857178, -4.080756187438965], + [0.011495284736156464, 8.956029891967773], + [-7.35014533996582, 2.0184128284454346], + [1.9616212844848633, 5.573519706726074], + [-0.29309576749801636, 9.871585845947266], + [-4.958447456359863, -2.8847477436065674], + [5.949728965759277, -3.7552695274353027], + [1.565361499786377, 5.374666690826416], + [-4.8143086433410645, -4.245564937591553], + [-5.029416561126709, -2.2554924488067627], + [-7.377862453460693, 9.250487327575684], + [6.843769550323486, -1.97615385055542], + [-4.0102620124816895, -5.362515449523926], + [0.5440993309020996, -0.41822540760040283], + [-5.5092034339904785, 7.347592830657959], + [9.408598899841309, -2.6101996898651123], + [2.3487493991851807, -6.303730010986328], + [-2.1865012645721436, 2.0449161529541016], + [-4.6276397705078125, -3.2413933277130127], + [-5.355658054351807, -2.08183217048645], + [2.23250675201416, 5.634032249450684], + [-3.335838556289673, 6.004167556762695], + [-4.681028842926025, -0.2987549901008606], + [-3.0169992446899414, 3.1081345081329346], + [1.9886095523834229, 0.5281907320022583], + [1.8725543022155762, 5.466739654541016], + [-2.7212116718292236, -3.8822429180145264], + [-4.690388202667236, -3.919750452041626], + [1.575045108795166, -7.772573471069336], + [7.353797435760498, -2.1729912757873535], + [-5.744447231292725, 5.9464874267578125], + [2.022348165512085, -6.867081642150879], + [2.3099288940429688, -3.7361085414886475], + [-4.737332820892334, 2.2604823112487793], + [5.974337100982666, -1.8145594596862793], + [-5.703505992889404, 8.566134452819824], + [0.7597154378890991, -6.629970550537109], + [-3.12984037399292, 6.038897514343262], + [-2.535268545150757, -0.5322808027267456], + [5.822831630706787, -2.911062717437744], + [-5.961063861846924, 4.660436630249023], + [1.400291919708252, 0.042892586439847946], + [-4.192229747772217, 6.859437942504883], + [-0.3544601500034332, 7.86702823638916], + [2.5414035320281982, -3.7167513370513916], + [8.056251525878906, -2.5365264415740967], + [3.1359283924102783, -4.721565246582031], + [-6.005068302154541, 5.655729293823242], + [1.7720906734466553, 5.117461204528809], + [2.560018301010132, 4.398736476898193], + [6.681972503662109, -2.116745710372925], + [0.36008429527282715, -5.879115104675293], + [-8.530275344848633, -0.9957278966903687], + [-0.990581214427948, 9.681527137756348], + [-5.801455974578857, 5.713573455810547], + [-2.1953177452087402, 2.5273044109344482], + [-2.4620728492736816, 2.382657051086426], + [9.525506019592285, -2.7278807163238525], + [1.5443400144577026, -7.722599506378174], + [-3.2142839431762695, -4.1347808837890625], + [4.073622703552246, 6.584144592285156], + [0.6403825879096985, 0.66417396068573], + [-4.413348197937012, -2.6282155513763428], + [1.5638097524642944, 0.15343612432479858], + [-3.4187395572662354, -3.512833833694458], + [1.340781331062317, -6.508579254150391], + [1.74479079246521, -4.090510368347168], + [-2.3014204502105713, -0.5928083658218384], + [3.077610731124878, -5.21027135848999], + [-0.4101300537586212, -0.20671191811561584], + [-0.35648050904273987, 1.0153459310531616], + [2.389047861099243, -7.412293434143066], + [3.0584113597869873, -4.7021484375], + [1.8871371746063232, -4.329415798187256], + [-1.4101381301879883, 0.2600522041320801], + [-3.471942186355591, 1.4895621538162231], + [1.9797589778900146, -6.297811031341553], + [-2.520848274230957, 1.1382538080215454], + [0.6260121464729309, -0.6082803606987], + [7.065797805786133, -1.3334920406341553], + [-1.3821196556091309, 0.2945423126220703], + [-4.91223669052124, -2.78448224067688], + [6.218512058258057, -1.656615138053894], + [-0.34756338596343994, 9.076600074768066], + [-2.69667911529541, -1.2257124185562134], + [1.1353199481964111, -7.206119537353516], + [5.196537494659424, 7.888427734375], + [8.6550931930542, -2.429340124130249], + [-0.4714509844779968, 10.630536079406738], + [-0.39904361963272095, -0.7262365221977234], + [2.67964506149292, -4.333357334136963], + [-2.543330669403076, 2.505704879760742], + [4.052365303039551, -3.5296332836151123], + [-5.631797790527344, -2.727771282196045], + [-0.12832659482955933, 10.401071548461914], + [6.775835990905762, -2.2893764972686768], + [2.2975032329559326, 5.489447593688965], + [6.5274128913879395, -1.9506107568740845], + [-0.2698533535003662, 10.580545425415039], + [1.2186609506607056, -6.341556549072266], + [3.338604211807251, -5.62992525100708], + [1.7476507425308228, 1.3407751321792603], + [-2.7825255393981934, -1.3028312921524048], + [7.371830463409424, -2.038484573364258], + [-2.917099714279175, -2.666423797607422], + [2.9109182357788086, -4.428658485412598], + [0.9544537663459778, -0.3011128306388855], + [-0.19398373365402222, -1.6669098138809204], + [1.9228622913360596, -5.95267391204834], + [-4.893060207366943, 3.2243478298187256], + [2.4833154678344727, -8.387773513793945], + [-3.774897813796997, -1.913596510887146], + [-0.28429144620895386, 9.153605461120605], + [-0.2399103045463562, 10.312520027160645], + [1.899529218673706, -8.827869415283203], + [-6.053162574768066, 1.7530815601348877], + [2.2062885761260986, -3.925302028656006], + [-3.96545147895813, -2.373817205429077], + [3.0322773456573486, -4.8974785804748535], + [0.8653114438056946, 0.01570701226592064], + [-2.9685428142547607, -4.157622337341309], + [-5.229612827301025, -3.0827653408050537], + [-2.6477367877960205, -4.018317699432373], + [-2.164562463760376, 2.264674186706543], + [-4.281726360321045, 6.259321212768555], + [-5.698604106903076, -2.6413140296936035], + [-2.3485090732574463, 0.46390509605407715], + [9.137110710144043, -2.6030049324035645], + [-6.499292850494385, 8.629648208618164], + [-0.2954179644584656, 9.034032821655273], + [3.282836437225342, -5.223825454711914], + [3.8906033039093018, -0.7172319889068604], + [5.659307479858398, -1.0694270133972168], + [2.425368070602417, 1.0815399885177612], + [-4.703187465667725, -2.831669807434082], + [2.3855388164520264, -4.243194580078125], + [1.7288081645965576, -7.196470737457275], + [0.058639101684093475, -4.253724098205566], + [-4.326887607574463, -3.5946145057678223], + [3.086108446121216, -4.70189094543457], + [-5.10160493850708, -1.5871628522872925], + [-0.6172628402709961, 11.303892135620117], + [1.6702079772949219, -0.07256992161273956], + [1.3664226531982422, -5.91511344909668], + [3.677995443344116, 6.428365707397461], + [-8.23575496673584, -1.2468631267547607], + [0.9704030156135559, -6.678607940673828], + [-4.184030532836914, -3.981898546218872], + [-2.6443307399749756, -0.9772478342056274], + [-4.982260704040527, -4.394360065460205], + [-5.786469459533691, -1.1244193315505981], + [8.25517749786377, -2.484269618988037], + [2.879526376724243, -4.503002643585205], + [-5.978997707366943, 7.579764366149902], + [3.1556479930877686, -4.743786811828613], + [2.3674097061157227, -3.4129626750946045], + [5.67437744140625, 7.606529235839844], + [-4.713939189910889, 6.134009838104248], + [9.192339897155762, -2.6529948711395264], + [8.409515380859375, -2.0422234535217285], + [-5.401368141174316, -3.065844774246216], + [2.5838301181793213, -4.2478437423706055], + [-2.7068660259246826, 2.865844964981079], + [-0.7451369762420654, 0.0510820709168911], + [7.231812000274658, -1.7918751239776611], + [-3.9088752269744873, -0.9226981401443481], + [1.7722896337509155, -9.41929817199707], + [0.5370016694068909, -0.5409466028213501], + [-2.3837854862213135, 1.6585338115692139], + [-4.244779109954834, -2.6187849044799805], + [-5.608372211456299, 4.201288223266602], + [1.5142804384231567, 5.31789493560791], + [8.466483116149902, -2.324484348297119], + [-0.16068392992019653, -0.679246187210083], + [3.095179319381714, -6.365572929382324], + [-5.038000106811523, -3.098210096359253], + [-1.8503090143203735, 1.9125417470932007], + [-0.4056165814399719, 11.420829772949219], + [2.1601693630218506, -9.412211418151855], + [-6.954239368438721, 8.442296981811523], + [2.259232521057129, 6.1274333000183105], + [-5.65265417098999, -4.651388168334961], + [7.052866458892822, -4.176614761352539], + [-0.3758907616138458, -1.0561323165893555], + [-2.8796534538269043, 3.310100793838501], + [4.137947082519531, 1.6934990882873535], + [-5.165623188018799, 2.5523390769958496], + [-5.255741596221924, 2.5745887756347656], + [-3.649599075317383, -2.2943742275238037], + [1.6914743185043335, -4.832507610321045], + [7.346096992492676, -1.5022999048233032], + [3.2001631259918213, -4.783805847167969], + [0.8160966038703918, 5.419624328613281], + [2.1466424465179443, -3.4036452770233154], + [-0.14916789531707764, 10.410181045532227], + [-4.803256988525391, -1.9624500274658203], + [-5.367495536804199, -3.208117723464966], + [2.8044886589050293, -7.800651550292969], + [3.068675994873047, -4.907627105712891], + [2.8592867851257324, -4.302769660949707], + [-3.7698214054107666, -3.6609432697296143], + [-2.179837226867676, 2.70839262008667], + [-4.325967311859131, -3.8518545627593994], + [-0.3343280553817749, -0.6852121353149414], + [7.448389053344727, -2.1810405254364014], + [-2.306252956390381, 2.6087496280670166], + [5.6868062019348145, -2.102008819580078], + [-3.9738383293151855, 0.5195069313049316], + [1.4029381275177002, -6.065270900726318], + [-7.204953670501709, -0.870143711566925], + [0.48905831575393677, -4.282376766204834], + [0.709198534488678, -0.7524676322937012], + [2.408261775970459, -3.6856272220611572], + [-6.805784702301025, 8.34839153289795], + [-4.342936038970947, -3.4852073192596436], + [-4.417296886444092, -2.708730697631836], + [-4.414303779602051, -3.287722587585449], + [-5.633126735687256, -4.2792463302612305], + [-4.170320987701416, 5.465316295623779], + [0.9431813359260559, 5.02150821685791], + [2.138035535812378, 5.223752021789551], + [-5.295552730560303, -2.7738611698150635], + [-4.763492107391357, 2.0258898735046387], + [0.40870901942253113, 0.5412947535514832], + [8.774538040161133, -2.1951098442077637], + [-3.552560567855835, 6.026364803314209], + [-7.226214408874512, 8.7332181930542], + [7.961181163787842, -2.03810977935791], + [-6.731944561004639, -1.2219053506851196], + [-4.477127552032471, -1.397220492362976], + [-4.899778366088867, -3.2133948802948], + [-3.25542950630188, -4.8607587814331055], + [-6.046977519989014, 7.645330429077148], + [-3.03631854057312, -1.3887265920639038], + [6.3126912117004395, -5.579524040222168], + [2.2458603382110596, -5.887728214263916], + [-5.268217086791992, 2.744729995727539], + [-4.82993745803833, -3.6703617572784424], + [1.4947021007537842, -6.1231255531311035], + [-2.2223005294799805, 1.4535021781921387], + [-5.351101398468018, -4.220283508300781], + [-2.637075185775757, -3.4726521968841553], + [-1.296334981918335, 1.706438422203064], + [3.2697086334228516, -7.460213661193848], + [-3.540356397628784, 4.696376800537109], + [-5.662593364715576, -3.5662920475006104], + [1.5867538452148438, 0.7867468595504761], + [1.806239128112793, -8.878419876098633], + [-3.2987449169158936, 5.312411308288574], + [7.1625518798828125, -3.2825863361358643], + [7.268249034881592, -2.0607998371124268], + [3.076709032058716, -4.7501420974731445], + [-4.802099704742432, 5.9993577003479], + [-3.712726593017578, -1.5826878547668457], + [2.2915070056915283, -1.277085542678833], + [-1.8616677522659302, 1.9699031114578247], + [-4.126752853393555, -3.965826988220215], + [-2.6760549545288086, 0.7714178562164307], + [7.688239574432373, -1.8942818641662598], + [3.0695555210113525, -4.707720756530762], + [-0.15726321935653687, 9.810932159423828], + [10.390727043151855, -2.8546535968780518], + [-6.070877552032471, 3.431600332260132], + [-4.694083213806152, -3.8286426067352295], + [3.304985761642456, -5.340362548828125], + [1.9930164813995361, 5.591704845428467], + [-7.063759803771973, 9.005114555358887], + [2.2093169689178467, 5.961853981018066], + [8.362401008605957, -2.4152650833129883], + [6.6472954750061035, -1.373534083366394], + [8.1325101852417, -2.4090940952301025], + [-7.555679798126221, -1.7554672956466675], + [-2.4579522609710693, 0.6858099699020386], + [-4.466639995574951, -3.8363242149353027], + [5.892038822174072, -1.23013174533844], + [-1.9329593181610107, 1.4945927858352661], + [2.952291250228882, -4.462389945983887], + [-4.203042507171631, 6.023401737213135], + [3.139010190963745, -4.788753509521484], + [6.097656726837158, 8.080301284790039], + [7.639443874359131, -2.947283983230591], + [3.275728702545166, -5.228774070739746], + [1.7787920236587524, 5.079911231994629], + [-2.2151432037353516, 1.8969972133636475], + [7.695566654205322, -1.913495421409607], + [-1.9881312847137451, 2.451117992401123], + [-2.976781129837036, 3.351576566696167], + [-1.9109878540039062, -2.966745615005493], + [3.16780686378479, -5.135032653808594], + [-3.2807719707489014, -1.5692967176437378], + [7.711180210113525, -3.2475812435150146], + [1.3494908809661865, 0.15763744711875916], + [-2.9258711338043213, 5.41286563873291], + [-2.514697313308716, -3.9557135105133057], + [3.27626895904541, -4.892028331756592], + [2.513908624649048, -11.856668472290039], + [-4.168934345245361, -3.085327386856079], + [-6.076461315155029, 7.523305892944336], + [-5.812631130218506, -1.0647653341293335], + [1.2397962808609009, 1.4171355962753296], + [3.114814281463623, -4.771335601806641], + [-0.12584194540977478, -0.5528839230537415], + [2.2944276332855225, 5.413593292236328], + [-4.359945774078369, 6.483576774597168], + [2.461888313293457, -6.837149143218994], + [-2.127911329269409, 1.7489984035491943], + [-2.056817054748535, 0.9513118267059326], + [-5.32052755355835, 2.293811082839966], + [2.261986494064331, -10.868091583251953], + [-2.481536388397217, 1.483193278312683], + [3.073190212249756, -5.5129828453063965], + [2.471025228500366, -5.24094820022583], + [-2.4805305004119873, -1.0218597650527954], + [-7.025396347045898, -1.0674433708190918], + [-4.985337734222412, -3.0197222232818604], + [-0.23432111740112305, 8.909435272216797], + [-2.4930102825164795, 6.069855690002441], + [-4.589397430419922, -1.3522298336029053], + [-0.9834004044532776, 0.4635646939277649], + [2.9855268001556396, -4.467303276062012], + [1.0540417432785034, 0.4589605927467346], + [-6.796111583709717, 8.657085418701172], + [6.300532817840576, -1.5442920923233032], + [-4.2684221267700195, -2.030911922454834], + [-6.266026020050049, 7.389853000640869], + [-6.07417106628418, -2.514410972595215], + [-5.765864372253418, 0.6946994066238403], + [2.353492498397827, -7.636072635650635], + [7.695202827453613, -1.9121291637420654], + [-5.3614912033081055, -4.575113773345947], + [2.1345717906951904, 5.712198734283447], + [0.8834937810897827, 4.997753143310547], + [-3.3350725173950195, 5.928575038909912], + [1.836066722869873, -8.270528793334961], + [0.1789838671684265, 10.463833808898926], + [-5.556784152984619, 7.090171813964844], + [-7.257850646972656, -1.101279854774475], + [-3.1286251544952393, -0.908403754234314], + [4.058213710784912, 6.607460975646973], + [1.757167100906372, -5.913572788238525], + [-3.424576759338379, 6.751006126403809], + [3.527940034866333, 0.7151580452919006], + [-1.7757954597473145, 1.9619637727737427], + [-3.9058806896209717, -0.6720373630523682], + [2.1116151809692383, 5.662289142608643], + [-4.759908199310303, -1.8721262216567993], + [-2.4562222957611084, -2.8323867321014404], + [-2.932000160217285, 3.864520311355591], + [-5.019442081451416, 3.4786531925201416], + [0.8360697627067566, -0.2446119636297226], + [-4.473165988922119, -3.43009090423584], + [-4.8114142417907715, -2.362907648086548], + [-5.658929347991943, 4.282903671264648], + [2.9012324810028076, -4.383703231811523], + [-5.618933200836182, -3.394296884536743], + [-4.476536750793457, -2.7488832473754883], + [-3.587975025177002, -2.492753267288208], + [-4.287303447723389, 5.780596733093262], + [-0.41777634620666504, 10.467723846435547], + [-6.960636615753174, -2.3956663608551025], + [2.8808844089508057, -2.741236686706543], + [-0.6184151768684387, 5.1357550621032715], + [-6.13306188583374, -2.4825334548950195], + [8.950582504272461, -2.5784637928009033], + [1.049484133720398, 1.528803825378418], + [2.0934882164001465, -5.000174522399902], + [1.2783373594284058, -0.16530229151248932], + [-1.8677124977111816, 0.001207049936056137], + [-3.687709331512451, -2.031471014022827], + [2.3435933589935303, -2.998725652694702], + [-1.5360329151153564, 0.4775121212005615], + [2.303485870361328, -2.7409467697143555], + [3.0643675327301025, 0.7579708695411682], + [7.569696426391602, -3.341895580291748], + [-3.3169641494750977, -1.9627710580825806], + [1.6667371988296509, -7.955311298370361], + [1.0709376335144043, -6.785213470458984], + [3.0139529705047607, -4.524238586425781], + [7.19507360458374, -3.3366334438323975], + [-1.2014416456222534, -1.3516331911087036], + [-4.9457106590271, -1.901254653930664], + [2.629892110824585, -4.017172336578369], + [-6.5507283210754395, 8.55787181854248], + [-0.11096466332674026, 10.659768104553223], + [1.81839919090271, 5.266347885131836], + [-5.686939716339111, -4.057064056396484], + [-1.8738067150115967, 1.6808172464370728], + [7.224189281463623, -1.834032416343689], + [2.869359254837036, -4.42832088470459], + [-0.6642928719520569, 9.980569839477539], + [-4.17034387588501, -3.624642848968506], + [-7.115261554718018, -1.0753647089004517], + [-5.354860305786133, -2.8433237075805664], + [-0.31606411933898926, 9.79300308227539], + [-5.302806377410889, 1.3919607400894165], + [-2.3598077297210693, 1.65842604637146], + [8.211806297302246, -2.5377767086029053], + [-2.381326913833618, 0.9667001962661743], + [-2.692148447036743, 2.461784601211548], + [2.226252317428589, -9.201818466186523], + [-2.2596864700317383, -0.8916695713996887], + [-5.140661239624023, 0.2408512830734253], + [2.7270026206970215, -4.493463039398193], + [5.381481170654297, -1.775847315788269], + [-6.475582599639893, -1.7885303497314453], + [-4.335964202880859, -1.1609693765640259], + [1.7481364011764526, -8.616835594177246], + [-5.284518241882324, 6.442084312438965], + [-1.8540979623794556, -0.43717843294143677], + [8.05270767211914, -2.201477289199829], + [-6.0049920082092285, 7.1566853523254395], + [-4.875809192657471, -0.7260429859161377], + [2.1858489513397217, 5.634462356567383], + [-3.5403809547424316, 0.7221423983573914], + [2.0226311683654785, 0.2138453722000122], + [-1.9101283550262451, 2.3238518238067627], + [3.099078893661499, -4.736124515533447], + [-0.15333038568496704, -0.9537532329559326], + [-4.109453201293945, -0.7991306185722351], + [1.246041178703308, 4.866332054138184], + [-8.706189155578613, -0.8871344327926636], + [2.887042999267578, -4.375724792480469], + [-0.538154125213623, 9.887208938598633], + [3.0501232147216797, -4.5778584480285645], + [-5.576087474822998, 7.290194034576416], + [5.738363742828369, -1.7213212251663208], + [2.5009407997131348, 6.211826324462891], + [1.5881531238555908, 1.680265188217163], + [-4.038998126983643, -2.0648677349090576], + [-0.17103278636932373, 9.823982238769531], + [1.2574341297149658, -2.4693429470062256], + [-0.8524861931800842, 9.274402618408203], + [-7.812581539154053, 9.618135452270508], + [-4.413076400756836, -3.0183374881744385], + [2.205972909927368, -1.7631756067276], + [-4.010748386383057, 6.558907508850098], + [-0.5808685421943665, 9.288496017456055], + [2.6226918697357178, -7.3973894119262695], + [-3.918989658355713, 1.4277993440628052], + [-1.8388947248458862, 1.4694476127624512], + [-5.787086009979248, 4.316393852233887], + [7.771109104156494, -2.0282740592956543], + [6.670084476470947, -1.531077265739441], + [-3.714411497116089, -3.2770211696624756], + [-2.7922146320343018, -1.8788174390792847], + [7.462978363037109, -2.4543817043304443], + [-4.600284576416016, -0.6187871098518372], + [-1.014868974685669, -1.5003467798233032], + [-4.699224948883057, -3.331529378890991], + [-2.9560725688934326, 1.5106465816497803], + [-0.4508863091468811, 9.295015335083008], + [-4.508761882781982, -4.557470321655273], + [9.410211563110352, -2.6066160202026367], + [5.849454879760742, -1.1120514869689941], + [0.716519296169281, -6.729349613189697], + [-0.2358594536781311, 9.859886169433594], + [-5.656625270843506, 7.630705833435059], + [-4.694813251495361, 1.9845715761184692], + [-0.5663999319076538, 9.528895378112793], + [-0.39045923948287964, 10.87295913696289], + [2.783304214477539, -4.328394889831543], + [-2.3355021476745605, 2.770996570587158], + [1.2081828117370605, -7.365755081176758], + [-0.8749449849128723, 9.21750259399414], + [-5.196936130523682, -3.477818727493286], + [10.155674934387207, -3.055704355239868], + [2.611745595932007, -3.9178426265716553], + [3.4734902381896973, -1.4536280632019043], + [-2.091247797012329, 1.7785283327102661], + [2.669847249984741, 6.143156051635742], + [1.8377209901809692, 1.6857552528381348], + [7.747503757476807, -2.380204916000366], + [2.025766134262085, -9.810745239257812], + [-4.185990810394287, -1.8954230546951294], + [5.294480800628662, -2.17012619972229], + [-0.6297303438186646, 8.87213134765625], + [-8.746228218078613, -0.8130522966384888], + [5.638441562652588, 7.438002586364746], + [2.0042665004730225, 5.098410606384277], + [-4.997680187225342, -3.355962038040161], + [-4.062756538391113, -0.8787446022033691], + [7.823608875274658, -1.8330203294754028], + [1.2092068195343018, -6.3538818359375], + [-5.616633415222168, -1.7910568714141846], + [1.942755937576294, 5.9133710861206055], + [-5.596917629241943, -5.073910236358643], + [-0.2078818678855896, 9.103750228881836], + [3.181159734725952, -5.126568794250488], + [-0.21956688165664673, 10.834325790405273], + [3.866346597671509, -3.577974557876587], + [-2.011709451675415, 0.5946712493896484], + [8.83981990814209, -2.901049852371216], + [-4.65137243270874, -3.7731239795684814], + [-4.450684070587158, -3.7405097484588623], + [-0.24459123611450195, 10.243921279907227], + [-3.696235418319702, -3.5519683361053467], + [0.25752508640289307, -5.379023551940918], + [3.0901541709899902, -4.809755802154541], + [-2.070923328399658, 1.6815975904464722], + [9.811068534851074, -2.6847474575042725], + [-0.3890201449394226, 11.296632766723633], + [-0.5241221785545349, -2.6470813751220703], + [-5.790839672088623, -4.247287273406982], + [-3.388129949569702, 0.819521427154541], + [-5.159294128417969, -3.035740852355957], + [-7.220828056335449, -1.8680428266525269], + [2.437446117401123, -7.376829624176025], + [-2.6238465309143066, 0.03596126660704613], + [-5.313035488128662, 5.806318283081055], + [3.288766384124756, -5.437291145324707], + [2.7581374645233154, -6.515439033508301], + [2.314760684967041, 1.3937374353408813], + [-4.677555561065674, -2.9016737937927246], + [2.0957882404327393, 2.613530397415161], + [-2.4603657722473145, 1.275086760520935], + [-1.740380883216858, -1.334431529045105], + [-2.667891025543213, 2.282404899597168], + [2.6898443698883057, -4.083437442779541], + [-5.182957649230957, 6.352614402770996], + [2.3251290321350098, -3.824488401412964], + [-4.811424732208252, -3.3506486415863037], + [2.5546536445617676, -4.575779914855957], + [0.5638371706008911, -4.517731189727783], + [-3.4589293003082275, -4.055533409118652], + [8.091447830200195, -2.207836866378784], + [-0.3978351950645447, 9.340987205505371], + [-2.763787031173706, -1.1418856382369995], + [-4.206387996673584, -3.0435969829559326], + [0.420180082321167, 8.141876220703125], + [1.8516641855239868, 5.3659987449646], + [-4.66173791885376, -3.589747667312622], + [1.2725181579589844, 0.3807118535041809], + [7.350456714630127, -1.7799855470657349], + [-1.1623799800872803, 1.5193592309951782], + [-4.049699306488037, -2.119694471359253], + [-5.686949253082275, 7.080147743225098], + [-3.210054636001587, 3.4001524448394775], + [6.509013652801514, -0.8663667440414429], + [-6.334902763366699, -2.412696599960327], + [-2.9047930240631104, 2.852672815322876], + [-1.7937743663787842, -0.637380063533783], + [-5.881011962890625, -1.5459407567977905], + [2.366335391998291, 4.923222541809082], + [-3.7281758785247803, -3.489819288253784], + [3.340317964553833, -4.991320610046387], + [2.8909919261932373, -4.41274356842041], + [-2.5386431217193604, -1.514640212059021], + [-0.14832407236099243, 9.916165351867676], + [0.6311805248260498, -6.230334281921387], + [-3.555537223815918, 3.848341226577759], + [-6.775393009185791, 8.330925941467285], + [-4.251724720001221, 4.722897052764893], + [-1.4860765933990479, -0.8763865828514099], + [8.054122924804688, -2.6023759841918945], + [0.5577332377433777, -1.0450667142868042], + [-0.8916784524917603, -0.5288115739822388], + [2.5753097534179688, -4.530512809753418], + [-6.401544094085693, 8.125545501708984], + [-0.7850430607795715, -0.6589497327804565], + [-0.28980982303619385, 8.40511703491211], + [-2.3315277099609375, 0.12210232019424438], + [-5.897947788238525, -1.0490697622299194], + [5.478871822357178, -3.47468900680542], + [2.541365385055542, -4.496495246887207], + [-4.276503086090088, 5.210502624511719], + [-0.5455405712127686, 9.050924301147461], + [2.087026357650757, 4.997344970703125], + [1.6815736293792725, -5.795596122741699], + [-0.39758676290512085, 9.77752685546875], + [-6.013182640075684, -2.5893237590789795], + [8.685442924499512, -2.2569501399993896], + [2.9898159503936768, -4.5127763748168945], + [1.584141492843628, 5.3635125160217285], + [-3.262835741043091, -3.951787233352661], + [2.8356218338012695, -4.298254013061523], + [2.5211100578308105, -4.406601905822754], + [3.24269700050354, -5.339163780212402], + [-7.211987018585205, -1.64528489112854], + [2.2194135189056396, -4.285466194152832], + [-5.928471088409424, 6.920756816864014], + [-5.623648166656494, -2.0674471855163574], + [-5.101752758026123, 0.3444458842277527], + [-6.39799165725708, 2.405320882797241], + [-2.8846187591552734, 2.3557112216949463], + [4.1117963790893555, 5.698224067687988], + [9.325469970703125, -2.6104187965393066], + [-2.164797067642212, 0.026251908391714096], + [-0.690966784954071, 5.770081043243408], + [-1.3395087718963623, 7.292603492736816], + [-2.3767917156219482, 5.639820098876953], + [4.714498996734619, 6.972500324249268], + [-7.941586971282959, -1.2690480947494507], + [-2.463418960571289, 1.7466484308242798], + [3.200143575668335, -5.140291690826416], + [-4.877778053283691, -3.6579906940460205], + [-6.9782633781433105, -2.0122218132019043], + [3.216207265853882, -6.010129928588867], + [-2.438847303390503, -1.619864583015442], + [1.5367666482925415, 0.636299192905426], + [-5.514089584350586, 6.8954057693481445], + [-5.332615852355957, 5.93931245803833], + [1.6301950216293335, -7.325212478637695], + [2.490457534790039, 1.3066307306289673], + [0.05071651190519333, -0.27929484844207764], + [-5.152385711669922, -3.7121217250823975], + [-3.244621515274048, 0.7655200958251953], + [-6.273504734039307, 7.549076080322266], + [1.9309024810791016, -8.910749435424805], + [4.787269115447998, 6.846376419067383], + [-3.979879379272461, 5.449257850646973], + [-0.21019011735916138, 10.46163558959961], + [7.345613956451416, -5.0256805419921875], + [2.7059364318847656, -4.342498779296875], + [2.9736926555633545, -4.468215465545654], + [2.1437079906463623, 5.483613967895508], + [-6.714993476867676, 3.4808077812194824], + [-4.047490119934082, -3.2306504249572754], + [-5.075046062469482, 0.8032195568084717], + [-0.12740391492843628, 10.203680038452148], + [1.6586625576019287, -5.289181709289551], + [-5.306248188018799, 5.519230365753174], + [4.666938781738281, 6.933863639831543], + [-2.3042495250701904, 1.9855598211288452], + [3.285552501678467, 6.434582710266113], + [2.813061237335205, -4.334805965423584], + [1.9194003343582153, -2.4197323322296143], + [-5.748277187347412, 4.430525302886963], + [-8.862870216369629, -0.9385656118392944], + [8.149496078491211, -2.048067808151245], + [6.501321792602539, -2.590021848678589], + [-2.262385129928589, 1.8422824144363403], + [-5.516274929046631, 3.996311902999878], + [-2.3841915130615234, 1.2960690259933472], + [-5.42266321182251, -2.524549722671509], + [-2.4287054538726807, -0.4047461152076721], + [5.741608619689941, -1.8558698892593384], + [-5.203418254852295, -3.5471272468566895], + [-0.37512463331222534, 9.999835014343262], + [2.1816604137420654, 5.545442581176758], + [0.41695111989974976, 9.950202941894531], + [2.520735502243042, -3.8208096027374268], + [-4.265155792236328, -3.053950548171997], + [-2.1020166873931885, 2.4766499996185303], + [-2.1065871715545654, 0.21891993284225464], + [-6.034437656402588, 7.4006547927856445], + [-2.634148120880127, 2.6287853717803955], + [9.114002227783203, -2.659851551055908], + [-3.6397311687469482, -5.056523323059082], + [-2.376047372817993, 3.309199810028076], + [-2.4029204845428467, 0.13588929176330566], + [1.1801202297210693, 1.1145284175872803], + [-5.598996639251709, -3.836928129196167], + [-2.288327693939209, -1.4277129173278809], + [-7.067368030548096, -1.1324750185012817], + [1.9519917964935303, 1.5082991123199463], + [3.310925245285034, -5.246399402618408], + [-2.1535561084747314, 0.7180578112602234], + [3.136740207672119, -4.817657470703125], + [-3.3526127338409424, -1.764320969581604], + [-0.27909672260284424, 9.470630645751953], + [-4.453757286071777, -2.436941146850586], + [1.128899335861206, -6.803306579589844], + [-5.116588115692139, -3.630279779434204], + [2.067075729370117, -8.586308479309082], + [-0.2968277335166931, 10.095810890197754], + [-8.14374828338623, -1.802554726600647], + [1.4109584093093872, -7.450373649597168], + [-2.620544910430908, 2.022667407989502], + [-7.1993889808654785, -2.4040520191192627], + [2.202282190322876, -7.559096813201904], + [2.3555381298065186, -6.659342288970947], + [0.6199120283126831, -5.85899543762207], + [-3.8229682445526123, -0.9902637004852295], + [-4.890685558319092, 0.4634275436401367], + [2.3254554271698, 5.527946472167969], + [2.9229929447174072, -5.521932125091553], + [-4.156130313873291, 2.617565631866455], + [-2.3117527961730957, 1.0617581605911255], + [5.176070690155029, -4.929592609405518], + [-5.407434940338135, 6.56913948059082], + [1.4146065711975098, -8.087767601013184], + [-5.014672756195068, 7.161667823791504], + [8.23125171661377, -2.3310964107513428], + [1.7667111158370972, -3.198216199874878], + [-2.036234140396118, 2.365935802459717], + [3.0192954540252686, 5.652074813842773], + [-5.377093315124512, -2.13614821434021], + [5.36219596862793, -1.0053749084472656], + [2.0161774158477783, -8.945728302001953], + [0.4920186996459961, -1.0235283374786377], + [2.666212797164917, -3.9955711364746094], + [2.411407232284546, -4.1542863845825195], + [0.3558524250984192, -0.41915208101272583], + [2.9083025455474854, -4.40147590637207], + [-4.031352519989014, 5.237801551818848], + [-4.2960920333862305, 6.908907413482666], + [3.1233737468719482, -4.796856880187988], + [-6.342030048370361, 2.8509042263031006], + [-6.217334270477295, 7.60215950012207], + [-5.4442458152771, -2.3656747341156006], + [-4.595051288604736, 3.818767547607422], + [-4.110483646392822, -2.2475640773773193], + [-3.82165265083313, -2.6344776153564453], + [-2.9417731761932373, 6.261421203613281], + [0.21385520696640015, -0.6386787295341492], + [5.087956428527832, 6.935455799102783], + [8.705184936523438, -2.4909884929656982], + [-2.6665425300598145, 6.7606987953186035], + [-4.864339351654053, 5.802101135253906], + [-5.184077739715576, -3.243455171585083], + [-3.8747448921203613, -1.9693015813827515], + [-4.871663570404053, 7.178943634033203], + [0.7685568928718567, 1.5306408405303955], + [-0.5604047179222107, -1.783063530921936], + [-1.891908049583435, 1.7973945140838623], + [-5.010323524475098, 5.893918991088867], + [2.4822278022766113, 5.090802192687988], + [-0.6390450596809387, 8.968971252441406], + [-0.20993798971176147, 10.00117015838623], + [-3.2770159244537354, -3.936292886734009], + [-0.34023517370224, 10.728921890258789], + [-5.4593119621276855, 6.288972854614258], + [-1.9629197120666504, 2.133344888687134], + [1.6872395277023315, 5.755999565124512], + [3.026306629180908, -4.573501110076904], + [-0.18661275506019592, -1.3806627988815308], + [-6.283632278442383, -1.7263950109481812], + [1.9593095779418945, -6.833976745605469], + [-5.976781368255615, -1.8280771970748901], + [-4.107380390167236, -2.9171128273010254], + [2.9332451820373535, -4.0076727867126465], + [-6.8211774826049805, -0.5680349469184875], + [-1.6700385808944702, 5.528499126434326], + [-5.893789768218994, -1.4236232042312622], + [-0.20543748140335083, 9.692754745483398], + [9.910943984985352, -2.7563374042510986], + [-0.8460775017738342, 8.839740753173828], + [-2.197619676589966, 1.4814461469650269], + [9.24450397491455, -2.5890252590179443], + [-0.2706541121006012, -0.9401160478591919], + [8.59194564819336, -2.2842869758605957], + [0.6725620627403259, -5.534272193908691], + [-2.3180899620056152, 2.1484248638153076], + [0.6383686065673828, -5.763250350952148], + [2.2604076862335205, 5.88392448425293], + [2.7072856426239014, -6.027950286865234], + [-2.437331199645996, 2.013568639755249], + [-6.959728240966797, -1.3060777187347412], + [2.428396463394165, 6.023670196533203], + [1.2199199199676514, -7.152195453643799], + [-5.068637371063232, -3.116314649581909], + [1.3568840026855469, 5.226378440856934], + [-5.790523052215576, -1.496935486793518], + [-3.745349645614624, -3.426232099533081], + [-4.408298015594482, -4.077816009521484], + [2.8559741973876953, -4.568238258361816], + [-4.0574493408203125, 6.33410120010376], + [-2.056281089782715, 1.39990234375], + [1.027164340019226, -7.093204975128174], + [-4.373478889465332, -1.9006695747375488], + [3.30664324760437, 6.24677848815918], + [-5.188560962677002, -2.415231466293335], + [3.080761194229126, -2.91979718208313], + [-0.8007273077964783, -0.8963505029678345], + [-6.318296909332275, 8.428287506103516], + [-5.805644512176514, -2.256300210952759], + [1.7865935564041138, 5.548247337341309], + [-2.2067883014678955, 0.2958303689956665], + [7.953834056854248, -2.124798059463501], + [-6.442687034606934, 8.53581428527832], + [-5.92672061920166, 2.576693058013916], + [-8.154354095458984, -1.1655727624893188], + [1.4835453033447266, -3.126505136489868], + [-0.32331448793411255, 10.018993377685547], + [-7.361724376678467, 8.934956550598145], + [4.50025749206543, 6.975851058959961], + [-6.875134468078613, -2.6714932918548584], + [1.7913498878479004, -8.718077659606934], + [3.1696200370788574, -4.980050563812256], + [-2.371873140335083, 1.1165015697479248], + [-6.439091205596924, 7.8069329261779785], + [-0.18712520599365234, 9.93402099609375], + [7.590155124664307, -3.2769670486450195], + [2.6287457942962646, -3.7893478870391846], + [2.3051259517669678, -3.513519048690796], + [-7.114037990570068, -1.0929381847381592], + [-4.923459053039551, -3.2826688289642334], + [1.5742366313934326, 0.10598146915435791], + [-5.018437385559082, 5.093950271606445], + [-0.2027684450149536, 9.914332389831543], + [1.1723233461380005, -5.098104953765869], + [-4.668298721313477, -0.7912251949310303], + [2.413181781768799, 0.26664432883262634], + [5.5695481300354, 7.317255973815918], + [-0.3383527398109436, 8.869224548339844], + [-5.231162071228027, -2.744112730026245], + [3.714517831802368, 6.91148567199707], + [1.942657709121704, -4.074728012084961], + [2.3106529712677, -6.791599750518799], + [-2.767498254776001, -3.575791120529175], + [4.341683387756348, 6.764038562774658], + [9.054618835449219, -2.507174491882324], + [4.719624996185303, 7.411598205566406], + [1.7445579767227173, -3.3724958896636963], + [-5.026341915130615, 7.248870849609375], + [-5.478783130645752, 5.3215837478637695], + [6.300624370574951, -2.021425724029541], + [-3.8366212844848633, 4.516076564788818], + [-3.701948404312134, -3.071688413619995], + [3.106992483139038, -4.011886119842529], + [-4.670315265655518, -4.1391425132751465], + [-3.1900384426116943, -3.668382167816162], + [-5.5787272453308105, -2.1515653133392334], + [-2.7047371864318848, 5.184070587158203], + [5.499974727630615, -1.2225098609924316], + [8.261046409606934, -2.385617256164551], + [-5.5639190673828125, 6.572618007659912], + [9.121170997619629, -2.5298140048980713], + [0.4430381655693054, -0.31125569343566895], + [2.9854440689086914, -4.503172874450684], + [5.856419563293457, -2.5317013263702393], + [-5.089854717254639, 4.7144575119018555], + [-3.880291700363159, -1.3721686601638794], + [1.1393979787826538, -3.691601037979126], + [-5.458784580230713, -2.7302634716033936], + [1.3686903715133667, -7.423549652099609], + [2.982114553451538, -4.495361804962158], + [-0.019653744995594025, -0.5482950806617737], + [-6.772008419036865, 1.6926805973052979], + [-2.7429468631744385, 2.613556146621704], + [2.5066709518432617, -4.233160018920898], + [-1.4272966384887695, -1.683486819267273], + [-6.572211742401123, 8.102981567382812], + [-3.403961420059204, 2.5432770252227783], + [-8.320450782775879, -1.179036259651184], + [0.038325972855091095, -0.883201539516449], + [-4.886133670806885, -3.632030725479126], + [1.9892280101776123, -8.684860229492188], + [-2.043029308319092, 0.9737943410873413], + [-0.03143761307001114, -0.8921781182289124], + [-0.3296840786933899, 9.981634140014648], + [-3.8924357891082764, 3.801795244216919], + [-6.694797515869141, 8.17672061920166], + [-4.624969959259033, 5.694971084594727], + [3.0563571453094482, -4.655352592468262], + [8.158480644226074, -2.5002262592315674], + [-5.277407646179199, 4.884361267089844], + [-3.0067248344421387, 5.631901741027832], + [8.395129203796387, -2.433037757873535], + [-6.338155269622803, 8.108460426330566], + [7.581284046173096, -2.2911202907562256], + [-5.024187088012695, -1.064566969871521], + [-5.283045291900635, -3.354106903076172], + [-4.603437900543213, 0.1583886742591858], + [9.744757652282715, -2.698641538619995], + [6.676451683044434, -1.369775652885437], + [-2.462982177734375, 1.4523934125900269], + [-2.892444133758545, 2.8165218830108643], + [-3.3620002269744873, 6.107036590576172], + [-0.3019791841506958, 9.569430351257324], + [-4.9159464836120605, 1.433029294013977], + [2.339143991470337, -3.924147844314575], + [2.7296180725097656, -4.137568473815918], + [-6.824096202850342, -2.413942575454712], + [-0.5605959892272949, 11.501550674438477], + [2.0915684700012207, 5.532560348510742], + [-3.1939659118652344, -0.5964598059654236], + [-2.581415891647339, 2.040787696838379], + [-0.6082375049591064, 2.490535259246826], + [0.879432737827301, -6.217530250549316], + [-2.015516996383667, 1.1292688846588135], + [-2.489478826522827, -4.1901469230651855], + [1.4961984157562256, 1.247189998626709], + [-3.940885305404663, -2.1479198932647705], + [-4.768154621124268, 5.709577560424805], + [2.1534481048583984, 3.0402231216430664], + [7.601434230804443, -1.8745828866958618], + [-2.098217010498047, 2.7365834712982178], + [5.141687870025635, 7.650749206542969], + [-0.2327951192855835, 9.420673370361328], + [1.9324829578399658, 5.413464069366455], + [-1.26426100730896, 5.439560890197754], + [-2.2683322429656982, 2.209300994873047], + [9.572915077209473, -2.686678886413574], + [8.646668434143066, -2.560462236404419], + [-0.2837219834327698, 8.689994812011719], + [2.260247230529785, -6.7031073570251465], + [2.4753658771514893, 0.8806339502334595], + [1.623784065246582, 3.1361429691314697], + [-3.3550145626068115, -3.621075391769409], + [-2.159895658493042, 2.454324245452881], + [5.155725479125977, -1.6228461265563965], + [6.623222351074219, -1.3771060705184937], + [9.806818008422852, -2.7320384979248047], + [-0.6569885611534119, 11.150861740112305], + [-4.467246055603027, -1.2049250602722168], + [-4.33135986328125, 8.319023132324219], + [-7.575798988342285, -1.66239333152771], + [-2.103606939315796, -0.8911635279655457], + [-1.8772318363189697, 7.932178497314453], + [-7.5605573654174805, -1.6885881423950195], + [-4.837307453155518, -1.1424723863601685], + [-5.138871669769287, -2.900418996810913], + [1.4274356365203857, -0.6084547638893127], + [-0.4655647873878479, 11.094642639160156], + [8.707839965820312, -2.7530646324157715], + [6.129976749420166, -1.1034430265426636], + [5.005441665649414, -1.4252954721450806], + [-7.063251972198486, -1.5415703058242798], + [3.2950656414031982, -4.931113243103027], + [-5.15676736831665, 6.524549961090088], + [2.823143482208252, -6.584917068481445], + [-4.464592933654785, -1.920997977256775], + [1.8077493906021118, 5.242824554443359], + [2.3593127727508545, 4.513816833496094], + [-0.3373315930366516, 10.223097801208496], + [-7.131433010101318, 8.902061462402344], + [-4.315406322479248, 5.599967002868652], + [0.6974300146102905, -0.9671710133552551], + [2.438642740249634, -7.32131290435791], + [-4.945955753326416, -2.8275809288024902], + [2.654256582260132, -4.273067951202393], + [-2.2786245346069336, 1.034196376800537], + [0.899233877658844, 0.19031363725662231], + [-4.832481861114502, -3.9858157634735107], + [2.531446933746338, 0.7264535427093506], + [2.22133469581604, -8.346470832824707], + [3.039336919784546, -4.5580244064331055], + [-2.2022817134857178, 2.405008554458618], + [1.8760534524917603, 6.5392584800720215], + [-4.936499118804932, -4.017924785614014], + [8.078343391418457, -2.3264830112457275], + [-5.2885613441467285, -3.1134254932403564], + [-5.222634792327881, -2.2262446880340576], + [2.550647020339966, -3.958444118499756], + [-2.377626895904541, 2.033238410949707], + [-6.597866058349609, 1.9298087358474731], + [-5.470042705535889, -3.1440060138702393], + [1.6206341981887817, 5.442846298217773], + [-4.809932708740234, -3.7215869426727295], + [5.80790376663208, -1.0693824291229248], + [-0.3135198950767517, 9.933351516723633], + [7.287458896636963, -1.9882129430770874], + [8.745686531066895, -2.288921594619751], + [8.57617473602295, -2.3813364505767822], + [-2.2953174114227295, 0.8354480266571045], + [1.9328749179840088, -3.416355848312378], + [2.1241164207458496, -8.179834365844727], + [1.619419813156128, 5.182832717895508], + [1.896323800086975, -8.103717803955078], + [-5.289665699005127, 2.0657472610473633], + [-3.241147756576538, -2.800036668777466], + [-2.477264404296875, 1.9117118120193481], + [3.2224178314208984, -5.1058197021484375], + [-1.1001100540161133, 4.680292129516602], + [-0.5818303823471069, 8.964462280273438], + [5.244630336761475, -1.0887755155563354], + [-6.138416767120361, 4.16201639175415], + [-2.049239158630371, 2.6584949493408203], + [-4.47369909286499, -2.6205098628997803], + [-6.107905864715576, 7.428064346313477], + [-5.796543598175049, -0.6210078597068787], + [-3.9301815032958984, -1.9499225616455078], + [2.874833822250366, -4.334612846374512], + [-4.6972336769104, 0.743537425994873], + [-5.271562099456787, -2.604318141937256], + [9.17104434967041, -2.5380208492279053], + [1.5245270729064941, -3.167344570159912], + [-4.028540134429932, -1.639750599861145], + [-0.1091550663113594, 10.119955062866211], + [4.911530017852783, -1.6985331773757935], + [2.630227565765381, -4.031994342803955], + [-3.8068408966064453, -2.8057076930999756], + [-6.5216755867004395, 8.512280464172363], + [-4.389326572418213, -3.642791509628296], + [2.0470752716064453, 0.7241392731666565], + [-4.697819709777832, -1.505588412284851], + [7.855041027069092, -2.2424840927124023], + [2.869600772857666, 1.2507003545761108], + [3.015486001968384, -4.540729522705078], + [2.563829183578491, -4.084560394287109], + [-1.7486240863800049, 1.8334366083145142], + [-0.22614824771881104, 9.784992218017578], + [2.3581368923187256, -10.762100219726562], + [2.3620107173919678, -3.2005860805511475], + [3.2755792140960693, -5.178977966308594], + [5.2369561195373535, -3.314072847366333], + [-5.39687967300415, 7.006012439727783], + [1.7930970191955566, -7.590493679046631], + [-6.311156749725342, 1.5912872552871704], + [0.2698916792869568, 5.725576400756836], + [-4.60170841217041, 3.4508094787597656], + [-0.3292399048805237, 10.90498161315918], + [2.246269464492798, -5.902949333190918], + [-3.067512035369873, 3.3966500759124756], + [3.1935665607452393, -5.822325706481934], + [3.102857828140259, -4.671301364898682], + [-5.183609485626221, -2.3394172191619873], + [0.6459000110626221, -0.5124087929725647], + [3.044207811355591, -4.621262550354004], + [5.527270793914795, -0.5505831241607666], + [2.3250577449798584, -3.8139262199401855], + [-4.078006744384766, -1.4283984899520874], + [3.136775016784668, -4.696659088134766], + [-4.7153520584106445, -2.7403430938720703], + [-0.3232825994491577, 10.573308944702148], + [-4.964765548706055, 5.06815242767334], + [-5.28863000869751, -3.1589391231536865], + [1.5138335227966309, -8.200332641601562], + [-4.974203586578369, -2.8867268562316895], + [3.0630505084991455, -4.596593379974365], + [-5.456546306610107, 1.2660201787948608], + [3.209397315979004, -2.3703455924987793], + [5.988414287567139, -1.6487447023391724], + [3.3224985599517822, -5.2207536697387695], + [-0.14108967781066895, 9.189902305603027], + [-8.580016136169434, -1.1037424802780151], + [-2.7474172115325928, 2.8719403743743896], + [-4.153196334838867, 2.2424466609954834], + [-0.49580150842666626, 6.385690689086914], + [3.1443886756896973, -4.800885200500488], + [-4.753720760345459, 1.9563430547714233], + [-2.212162494659424, 1.9426679611206055], + [-4.786797523498535, 4.072720050811768], + [1.3463008403778076, -6.198883533477783], + [7.993223667144775, -1.9857333898544312], + [-6.158280372619629, 7.4407525062561035], + [8.297035217285156, -2.336022138595581], + [-0.44158321619033813, 5.027958869934082], + [-2.8457510471343994, 5.704963684082031], + [8.894476890563965, -2.1865599155426025], + [1.523298740386963, 4.20340633392334], + [-4.004644393920898, 7.171359062194824], + [2.266803503036499, 3.7596681118011475], + [-1.2069683074951172, -2.801215887069702], + [2.004147529602051, -3.484438419342041], + [7.970527172088623, -2.587655544281006], + [-3.458021879196167, 5.8911566734313965], + [2.4962995052337646, -5.830415725708008], + [-1.503188967704773, -1.280565619468689], + [-0.24673551321029663, 9.98851203918457], + [-7.180752277374268, -1.834424376487732], + [-5.518111705780029, -2.6525473594665527], + [1.830224871635437, 3.4969358444213867], + [-0.19244146347045898, 9.540557861328125], + [-1.888203501701355, 2.286036252975464], + [-4.767259120941162, -2.3515164852142334], + [2.2940402030944824, -0.9116405248641968], + [-2.064905881881714, 0.652985155582428], + [-0.42631256580352783, 9.54941177368164], + [-3.684410810470581, -1.7721980810165405], + [-3.069746494293213, -2.364579439163208], + [-5.721099376678467, -2.135253429412842], + [-0.7077531218528748, 9.599512100219727], + [2.983341932296753, -4.647599697113037], + [7.14007043838501, -5.612934589385986], + [-4.29367208480835, 5.173667907714844], + [9.607905387878418, -2.859302520751953], + [-0.160028874874115, 10.547850608825684], + [-5.132950782775879, -2.80814266204834], + [-2.4840426445007324, 1.9031000137329102], + [-4.347501277923584, 1.82461416721344], + [-6.320681095123291, 8.293713569641113], + [7.9475998878479, -1.9647520780563354], + [1.6464109420776367, -6.877869606018066], + [-2.222517728805542, 2.1204564571380615], + [3.1547629833221436, -4.9291229248046875], + [2.161182165145874, 0.9804613590240479], + [5.955300807952881, -1.4620572328567505], + [3.1739470958709717, -4.7604241371154785], + [-4.0821919441223145, 5.12144136428833], + [-5.7033867835998535, 2.9671757221221924], + [3.0301387310028076, -4.554121971130371], + [-0.3485027551651001, -0.9499468803405762], + [1.8074684143066406, -8.721453666687012], + [0.6141846776008606, -0.7873011231422424], + [2.748931646347046, -4.113292694091797], + [2.0921316146850586, -3.957685708999634], + [-2.8279073238372803, -5.19645881652832], + [9.185227394104004, -2.5792717933654785], + [0.4817364811897278, 5.476186752319336], + [-2.5649778842926025, 2.1439437866210938], + [0.47306758165359497, -5.887237548828125], + [-2.0138680934906006, 2.2514593601226807], + [-1.7123433351516724, 5.832510948181152], + [6.132624626159668, -3.2761788368225098], + [-4.681423187255859, -3.4477698802948], + [-4.581672668457031, -1.1741901636123657], + [5.192042827606201, -1.4933863878250122], + [-2.494778633117676, 1.5383254289627075], + [-3.688077688217163, -4.07114315032959], + [-2.5251052379608154, 2.0922372341156006], + [-5.186999797821045, -1.805001139640808], + [1.1003557443618774, 1.0312203168869019], + [-1.860053300857544, 5.307156085968018], + [-4.080985069274902, -1.7639358043670654], + [-0.4763411581516266, -0.0015879236161708832], + [5.006629467010498, -1.0724421739578247], + [-3.511183977127075, 4.964853286743164], + [-4.464206218719482, -0.4962019920349121], + [-2.4484832286834717, 1.9183591604232788], + [-2.184920072555542, -1.1272541284561157], + [-0.23130720853805542, 9.49697494506836], + [6.057930946350098, -1.5220803022384644], + [1.5026768445968628, 5.434474468231201], + [0.03314303606748581, 10.504585266113281], + [7.219535827636719, -2.482450246810913], + [-4.762783527374268, -3.8307344913482666], + [-4.559977054595947, 0.15539708733558655], + [0.018311522901058197, -1.2901657819747925], + [3.4691379070281982, -2.713862895965576], + [-5.977630138397217, 5.048604965209961], + [-2.2733829021453857, 0.37728261947631836], + [-4.96006441116333, -2.8918259143829346], + [7.552395820617676, -3.9170899391174316], + [4.690303325653076, -2.194580078125], + [0.2705535292625427, -1.0924255847930908], + [-5.869747638702393, 0.510419487953186], + [-6.903661251068115, 0.23135387897491455], + [-3.2143771648406982, -2.0309770107269287], + [-5.796749591827393, -3.771338701248169], + [-4.383670330047607, -1.1406919956207275], + [2.110153913497925, -7.162932395935059], + [-4.71638822555542, -3.2009851932525635], + [2.8095905780792236, 5.956892013549805], + [-3.8117599487304688, -2.1215100288391113], + [-2.054229736328125, 2.058016300201416], + [1.4559822082519531, -6.988287448883057], + [-2.8247294425964355, 1.8442562818527222], + [-2.2949814796447754, 0.7251783609390259], + [2.154562473297119, 2.7039339542388916], + [-0.21644669771194458, 5.882139205932617], + [-2.879261016845703, 5.078603744506836], + [-0.22037869691848755, 10.218717575073242], + [-2.176062822341919, 1.1489967107772827], + [-4.058272361755371, 3.7808542251586914], + [-4.847882270812988, 6.773390769958496], + [-6.078323841094971, 8.12964153289795], + [-5.598721981048584, -2.385986089706421], + [-4.841665744781494, -1.6771607398986816], + [3.564080238342285, -3.055089235305786], + [-4.911067485809326, -0.08522045612335205], + [-1.7881629467010498, 2.0138087272644043], + [-3.858537435531616, -3.4281558990478516], + [-4.978333950042725, -1.43138587474823], + [-1.1401644945144653, 8.561009407043457], + [-4.267033100128174, -3.430187463760376], + [-3.734677791595459, -2.3510453701019287], + [-0.7095048427581787, -0.4949072599411011], + [2.5622026920318604, -3.731253147125244], + [-0.1502624750137329, -1.1048564910888672], + [-2.838343620300293, 3.0997204780578613], + [-4.058530807495117, -4.629996299743652], + [-3.828925132751465, -2.0102341175079346], + [-2.257633686065674, 1.1804810762405396], + [-4.917075157165527, -3.044358491897583], + [-0.2839144468307495, 9.792899131774902], + [8.265335083007812, -2.918142318725586], + [2.0087356567382812, -4.596923351287842], + [2.8037116527557373, -5.938320159912109], + [-2.837268114089966, 1.9226285219192505], + [-4.44871187210083, -1.6405678987503052], + [-0.5798794627189636, 6.27902889251709], + [2.3902220726013184, -6.581384181976318], + [5.573672771453857, -2.1877572536468506], + [2.5001027584075928, -7.940673828125], + [0.8886131644248962, -3.7382452487945557], + [-0.29795515537261963, 9.362152099609375], + [1.1419223546981812, -5.739447593688965], + [-2.39923357963562, -0.8822622895240784], + [-2.7525453567504883, 6.513166904449463], + [-3.516972303390503, 4.861295223236084], + [1.8353592157363892, 5.550867557525635], + [-2.9286248683929443, -0.8000756502151489], + [-6.3970232009887695, 7.841653823852539], + [-2.2398104667663574, -2.280353307723999], + [-3.7735536098480225, -2.540703773498535], + [2.614672899246216, -4.23375129699707], + [-5.573866367340088, 4.250557899475098], + [7.567436218261719, -2.007578134536743], + [1.512427568435669, 4.9446120262146], + [-0.6248608231544495, 8.056156158447266], + [-2.3343355655670166, 2.1960482597351074], + [1.4326738119125366, 5.163037300109863], + [-6.061227321624756, 6.110759735107422], + [-6.900711536407471, -1.4531456232070923], + [-2.0374250411987305, -2.411179542541504], + [-5.168335437774658, -2.1592955589294434], + [7.509632110595703, -1.7545095682144165], + [-2.047412395477295, -2.8093254566192627], + [3.835883855819702, -5.109789848327637], + [2.905660390853882, -4.598740100860596], + [3.124542236328125, -6.0355095863342285], + [2.8986058235168457, -4.645863056182861], + [-4.5815958976745605, -1.5154300928115845], + [-0.26384401321411133, 9.870816230773926], + [-4.769337177276611, -2.024057149887085], + [2.0650808811187744, -3.3825602531433105], + [3.197476387023926, -4.8653693199157715], + [-4.694124698638916, -2.9476981163024902], + [-0.3235737681388855, 11.54400634765625], + [-4.647408962249756, -0.7309088706970215], + [-0.9079292416572571, 1.9259225130081177], + [-4.169032096862793, -1.367226481437683], + [8.022933006286621, -2.5570924282073975], + [-6.024515151977539, 2.4920096397399902], + [-5.11667013168335, 5.812005996704102], + [3.1946632862091064, -4.783095836639404], + [2.3152573108673096, -3.7822818756103516], + [-4.441692352294922, 5.884622573852539], + [-3.6149966716766357, -1.3435122966766357], + [6.405208587646484, -1.3544483184814453], + [3.0925962924957275, -4.636877536773682], + [-4.58211088180542, -0.5205276012420654], + [-0.7144559621810913, 0.42791640758514404], + [-3.5687320232391357, 4.003737449645996], + [0.04371664673089981, -0.7082250118255615], + [3.0977694988250732, -0.08494281768798828], + [-4.40225076675415, -3.4418609142303467], + [2.525437593460083, -4.446475982666016], + [-0.2337743639945984, 10.382466316223145], + [-3.735680103302002, 5.796457767486572], + [6.725587844848633, -1.152352213859558], + [-4.8765740394592285, -3.1405186653137207], + [8.822470664978027, -2.4231832027435303], + [5.0578508377075195, 7.519061088562012], + [-3.4220798015594482, -1.4556411504745483], + [-5.013424396514893, -0.5313958525657654], + [-0.2755187153816223, 9.935762405395508], + [-5.476046085357666, -1.8233760595321655], + [6.542618751525879, -1.4377379417419434], + [-3.7727952003479004, 7.716470718383789], + [-2.6528074741363525, 2.022876262664795], + [-6.298555850982666, 7.3889546394348145], + [3.0629868507385254, -4.766683578491211], + [-0.4111173152923584, 10.779025077819824], + [7.767850399017334, -1.903954029083252], + [2.3603105545043945, 6.262690544128418], + [-4.682133197784424, -2.7236413955688477], + [1.644838809967041, -5.428640365600586], + [-3.433887481689453, 6.816786766052246], + [-5.277437686920166, -4.292466163635254], + [2.1852669715881348, -7.379096031188965], + [-7.117794036865234, -1.873788833618164], + [-3.5345919132232666, 1.2847676277160645], + [-0.5602080225944519, 9.446860313415527], + [3.6913955211639404, -4.855504989624023], + [-5.454752445220947, -2.9945154190063477], + [3.0708320140838623, -4.851816177368164], + [-4.7417378425598145, -1.8024276494979858], + [-5.201859951019287, 2.942162036895752], + [-3.251194715499878, -1.3228938579559326], + [3.4657421112060547, 6.5912981033325195], + [1.6599515676498413, -2.988208770751953], + [-0.14817529916763306, 9.033348083496094], + [-0.046788282692432404, 8.742133140563965], + [-4.518360137939453, -3.1652309894561768], + [-0.03038085252046585, 9.736100196838379], + [-5.029835224151611, -2.3423545360565186], + [1.4337505102157593, 2.6426849365234375], + [1.4859540462493896, -6.91433048248291], + [6.191661834716797, -2.8983662128448486], + [-5.042450904846191, 1.4306795597076416], + [-6.296820640563965, -2.2474334239959717], + [3.023876905441284, -4.565473556518555], + [3.299663782119751, -5.064756393432617], + [-4.746726989746094, -2.316589593887329], + [-6.770862579345703, -0.07968294620513916], + [0.3635944426059723, 0.3428152799606323], + [1.1225776672363281, 0.7297728061676025], + [-2.0892155170440674, 0.5623571872711182], + [-4.788440227508545, -3.0767853260040283], + [7.907127857208252, -2.045055627822876], + [-0.6626701951026917, 1.4360252618789673], + [-2.3452560901641846, -4.495025634765625], + [-3.7783257961273193, -0.13226771354675293], + [-0.6912136077880859, -0.6311792135238647], + [-4.102390766143799, 5.609116554260254], + [-2.5076942443847656, 5.513864517211914], + [9.780166625976562, -2.7299628257751465], + [8.478433609008789, -2.2961275577545166], + [4.405365467071533, 7.268596649169922], + [-7.609628677368164, -1.802396297454834], + [1.8519084453582764, 5.722497940063477], + [3.0351507663726807, -4.55506706237793], + [-5.181742191314697, -2.376264810562134], + [-5.002366542816162, -1.6959654092788696], + [-5.4836812019348145, -2.197356700897217], + [-1.2103767395019531, 2.540522813796997], + [-3.4370033740997314, -0.7274047136306763], + [2.7579281330108643, 1.1414521932601929], + [-3.046818971633911, -2.330414295196533], + [2.9996469020843506, -4.517147064208984], + [-3.8583033084869385, -2.619605541229248], + [-6.4827446937561035, 7.486177444458008], + [-2.334399938583374, 1.4273983240127563], + [8.904668807983398, -2.4713215827941895], + [-7.070491790771484, -1.870780110359192], + [2.9945027828216553, -4.53395938873291], + [-5.647386074066162, 3.218869209289551], + [-6.8778605461120605, -2.378079652786255], + [-5.414700984954834, -2.8047497272491455], + [-0.2760545611381531, 11.23546028137207], + [-4.731420993804932, -2.34507417678833], + [-2.6051440238952637, 1.2909680604934692], + [-0.26229143142700195, 9.038253784179688], + [-0.4707159996032715, 9.149621963500977], + [-6.531779766082764, 7.009492874145508], + [-0.8383285403251648, 8.586935043334961], + [-1.839622974395752, 0.5164579153060913], + [-0.5778653025627136, 11.552669525146484], + [-5.2585530281066895, 1.6870877742767334], + [-5.422979831695557, -3.4331893920898438], + [-0.18401092290878296, 9.917423248291016], + [-4.862621784210205, -3.622802972793579], + [2.7071611881256104, 6.275228500366211], + [2.646338939666748, -5.725795269012451], + [3.375541925430298, -4.962155342102051], + [-6.303464412689209, 0.39248156547546387], + [-5.720040798187256, -2.3473973274230957], + [2.7916016578674316, -4.3759870529174805], + [9.09826374053955, -2.5521419048309326], + [-0.40072816610336304, 11.13070297241211], + [-6.632444858551025, 7.808714866638184], + [-0.2053777575492859, 9.424748420715332], + [-4.9888176918029785, 7.416757583618164], + [2.2469818592071533, -7.71835994720459], + [-4.965386867523193, -5.810214996337891], + [-0.44048333168029785, 8.982624053955078], + [2.3460233211517334, -4.754062175750732], + [1.023392915725708, -6.813831329345703], + [-5.123942852020264, -2.17077374458313], + [1.4726457595825195, -6.3373894691467285], + [-5.315756320953369, 3.946669578552246], + [-3.94258975982666, 3.8115248680114746], + [2.2194507122039795, 5.097694396972656], + [2.998981475830078, -5.63753604888916], + [-5.5278801918029785, 8.443178176879883], + [-4.772124290466309, -4.274570941925049], + [6.590566158294678, -2.855144739151001], + [-5.90072774887085, -0.800613284111023], + [-4.42376708984375, -4.0132365226745605], + [-5.132968425750732, -2.599557876586914], + [-2.585631847381592, 2.644558906555176], + [2.1174778938293457, -8.336861610412598], + [-0.2136324644088745, 9.452860832214355], + [-0.11748237162828445, 0.32375580072402954], + [1.3998667001724243, -5.086907863616943], + [-2.652719736099243, 2.253248453140259], + [6.066330432891846, -5.533501625061035], + [-4.2099528312683105, -3.7556326389312744], + [2.9731523990631104, -4.487519264221191], + [3.5582942962646484, 6.523715496063232], + [8.952620506286621, -2.5651051998138428], + [1.8725088834762573, -7.2318220138549805], + [-0.649355411529541, -1.079604148864746], + [-0.8768063187599182, 6.279667377471924], + [0.5741958618164062, -0.8063709735870361], + [-0.31068187952041626, 11.1138916015625], + [8.15038013458252, -2.0172274112701416], + [-3.7822651863098145, -2.8389203548431396], + [3.1497390270233154, -4.713542938232422], + [1.8824782371520996, -3.109370470046997], + [-5.881157875061035, -2.471210479736328], + [-5.690343856811523, 2.5038673877716064], + [9.194849014282227, -2.6674890518188477], + [-5.0155110359191895, -4.487497329711914], + [-4.637334823608398, -3.379150390625], + [0.3068024516105652, -0.666431188583374], + [-4.404473304748535, -1.5276318788528442], + [2.7685000896453857, -4.66778564453125], + [-4.47446870803833, -4.0462260246276855], + [2.6052510738372803, -3.996616840362549], + [-0.3942127823829651, 10.561456680297852], + [-0.1270011067390442, -2.6655967235565186], + [2.6048781871795654, -7.76181173324585], + [0.7715951800346375, -6.149355888366699], + [0.6810407042503357, -0.3534625172615051], + [-5.603309154510498, 7.158980369567871], + [-4.8157148361206055, 1.611831784248352], + [-4.178287982940674, -1.8576987981796265], + [-0.3970987796783447, 9.12315559387207], + [-6.766340732574463, -2.376997709274292], + [-5.215938568115234, 7.4903364181518555], + [-4.5091633796691895, -3.2904772758483887], + [0.21514976024627686, 9.38675594329834], + [2.9157655239105225, -4.803814888000488], + [3.049086809158325, -4.98499870300293], + [-0.002901025116443634, 9.844986915588379], + [3.124790668487549, -4.93721342086792], + [1.8612477779388428, -3.5210812091827393], + [-3.7985267639160156, -2.707913637161255], + [-4.644021511077881, -2.992629289627075], + [-6.140511989593506, -1.4447983503341675], + [-6.535871982574463, 7.224900245666504], + [-6.024783611297607, -0.6768045425415039], + [-4.926520824432373, -3.3199074268341064], + [-2.01253604888916, 2.5557494163513184], + [-5.411459922790527, -4.057952880859375], + [9.229083061218262, -2.7705650329589844], + [1.985097885131836, 5.397407531738281], + [-7.44433069229126, -1.4429899454116821], + [7.964437007904053, -2.097900867462158], + [-4.514397144317627, 0.9860345125198364], + [-0.30393731594085693, 10.067055702209473], + [-5.096890926361084, 7.370436191558838], + [0.05395977944135666, 9.698446273803711], + [-0.2883252501487732, 9.35639476776123], + [-0.8409662246704102, 9.451189041137695], + [-0.2582129240036011, 9.447309494018555], + [3.195258378982544, -5.524327278137207], + [-2.078270196914673, 0.7198642492294312], + [-0.32827675342559814, 9.521383285522461], + [-3.1600840091705322, 1.7809199094772339], + [-5.490851879119873, 7.797459125518799], + [9.099967002868652, -2.4893698692321777], + [-6.283853530883789, 7.50438117980957], + [-3.20198130607605, 6.0721845626831055], + [-5.475083827972412, 2.452061176300049], + [-5.4061970710754395, 0.1797385811805725], + [-2.4229395389556885, -1.5910893678665161], + [-8.559934616088867, -1.1341279745101929], + [-5.126893520355225, 0.6327273845672607], + [-0.31699806451797485, 9.597317695617676], + [-6.449391841888428, 8.419563293457031], + [-2.1675305366516113, 2.602109432220459], + [0.738312840461731, 5.315325736999512], + [-5.180338382720947, 2.5581722259521484], + [-4.7224650382995605, -2.9239139556884766], + [-2.4153926372528076, 1.7715541124343872], + [8.737935066223145, -2.561234951019287], + [-2.6510367393493652, -3.5927960872650146], + [-0.20437127351760864, 10.501078605651855], + [-3.6133949756622314, 4.346152305603027], + [1.2546216249465942, -5.5262770652771], + [-0.41060537099838257, 10.591909408569336], + [-4.0636444091796875, 6.481194972991943], + [-6.800137042999268, -2.553995132446289], + [-6.097182750701904, -1.7375699281692505], + [-3.182671546936035, 2.7793970108032227], + [-5.31146764755249, -0.3332180976867676], + [-4.865661144256592, 6.045108795166016], + [5.266317844390869, 7.414429187774658], + [-4.467482566833496, 4.269619941711426], + [3.2757184505462646, -5.1968302726745605], + [-6.597035884857178, -1.9692494869232178], + [-2.5164403915405273, 2.851266384124756], + [5.215284824371338, -3.4397404193878174], + [0.4312884211540222, 9.6549072265625], + [-2.5215466022491455, 0.34693336486816406], + [2.9357850551605225, -4.59751033782959], + [-4.907580852508545, -0.3848099708557129], + [-4.740926265716553, 6.148137092590332], + [8.261049270629883, -2.3601744174957275], + [1.559572696685791, -5.60297966003418], + [-5.633326053619385, -1.2002511024475098], + [6.339128017425537, -1.2674261331558228], + [-4.420463562011719, -3.9342024326324463], + [5.622551918029785, 7.285726547241211], + [-2.6279475688934326, 2.344977855682373], + [1.9332430362701416, -7.998224258422852], + [9.204471588134766, -2.608711004257202], + [-0.16260606050491333, 10.10395336151123], + [-3.8062446117401123, -2.86267352104187], + [-4.2407331466674805, 3.164530038833618], + [-5.806027412414551, 1.5292302370071411], + [-4.921889781951904, -3.172714948654175], + [-2.595099925994873, 2.361727237701416], + [-3.354660749435425, -1.7255383729934692], + [-1.446031093597412, 1.4228105545043945], + [5.047004222869873, -0.9726593494415283], + [-0.33452802896499634, 9.415749549865723], + [-2.613199472427368, 5.662931442260742], + [1.9670536518096924, -2.876465082168579], + [2.5394251346588135, 5.636711597442627], + [2.562251329421997, -5.729991436004639], + [2.4839682579040527, -4.25035285949707], + [-0.12811726331710815, 10.096553802490234], + [-1.9590299129486084, 2.4370005130767822], + [2.1006133556365967, -9.95240306854248], + [-4.304231643676758, -2.23960280418396], + [9.231520652770996, -2.596052646636963], + [-0.3234546184539795, 8.895511627197266], + [9.272448539733887, -2.7014760971069336], + [-4.697947025299072, -1.905995488166809], + [-0.04249703139066696, -0.44174686074256897], + [5.523548603057861, 7.500702857971191], + [-5.851297378540039, -2.213182210922241], + [-5.9240593910217285, 7.505945205688477], + [9.60106372833252, -2.7327239513397217], + [-1.7349101305007935, -1.7879657745361328], + [2.497011661529541, -5.260960578918457], + [-2.404618263244629, 1.7991864681243896], + [-0.06498748809099197, 10.512594223022461], + [-5.57565450668335, -4.267308235168457], + [-0.09483546763658524, 10.103693962097168], + [3.4249017238616943, -5.105306148529053], + [2.3347957134246826, 1.081847906112671], + [2.423006296157837, -3.6114654541015625], + [-5.603771686553955, -3.2439911365509033], + [2.404909372329712, -3.0122787952423096], + [-3.7273504734039307, -3.703026533126831], + [2.0997989177703857, 0.9640361070632935], + [-0.0005209818482398987, 0.26723966002464294], + [-3.541487216949463, 6.67929744720459], + [2.8863728046417236, 0.6826752424240112], + [-4.00440788269043, 6.270115852355957], + [9.389301300048828, -2.610910177230835], + [-2.482290506362915, 0.7287281155586243], + [-10.056268692016602, 12.363546371459961], + [-4.4319939613342285, -2.6991450786590576], + [-5.463572025299072, -1.545372486114502], + [0.5782514214515686, 0.8837111592292786], + [6.280674457550049, -1.4488805532455444], + [-3.1048107147216797, -0.5959120988845825], + [2.9599435329437256, -4.449875831604004], + [2.971177339553833, -4.506711006164551], + [-4.892702579498291, 0.06603950262069702], + [-2.9129669666290283, 3.705185651779175], + [0.6304026246070862, 0.21996468305587769], + [-3.4506642818450928, -0.7248140573501587], + [-0.7379972338676453, 10.704387664794922], + [-4.225536823272705, -2.531095027923584], + [-1.153991460800171, 3.168606996536255], + [-0.9049839377403259, 9.617180824279785], + [-4.08108377456665, 4.289913654327393], + [-4.161053657531738, 0.7841830253601074], + [-4.578044414520264, -1.81143057346344], + [-3.8778932094573975, -2.449855089187622], + [-2.6374170780181885, 6.199719429016113], + [-4.203078746795654, 4.472384452819824], + [2.315762996673584, -4.401920318603516], + [-4.505617141723633, -3.247084379196167], + [-5.002878665924072, -4.778632640838623], + [-4.872865200042725, -4.218445777893066], + [-0.22869271039962769, 9.945062637329102], + [2.552457094192505, -6.280060768127441], + [-4.749208927154541, 6.684324264526367], + [-7.49729585647583, 9.232197761535645], + [-3.4279539585113525, 3.029215097427368], + [-2.4879353046417236, -0.8056283593177795], + [-5.051614284515381, 3.1481752395629883], + [-5.420980930328369, 3.152721643447876], + [-3.040421962738037, -1.3397233486175537], + [0.2237866222858429, -3.786262273788452], + [-6.676931858062744, -1.766021728515625], + [-6.004206657409668, 7.575837135314941], + [-2.26247501373291, 0.5804236531257629], + [-4.736108303070068, -2.9489269256591797], + [0.9251065850257874, 0.704546332359314], + [-3.494298219680786, -1.1874319314956665], + [7.725387096405029, -1.916915774345398], + [-0.4185734987258911, 9.710789680480957], + [1.7140966653823853, -4.391084671020508], + [-4.0270466804504395, -0.8833667039871216], + [2.197072744369507, -5.771966934204102], + [-2.563275098800659, 3.230745315551758], + [-1.9496513605117798, 1.3146682977676392], + [1.0920647382736206, -6.721059799194336], + [-4.965441703796387, 7.149294853210449], + [-5.681220531463623, -1.9553107023239136], + [-6.874022006988525, -1.0532411336898804], + [-4.8459577560424805, 3.8081274032592773], + [2.98549485206604, -4.498114109039307], + [-2.615792989730835, 1.890071988105774], + [3.1775624752044678, -5.10137939453125], + [-3.042257308959961, 6.281190872192383], + [-0.3800514340400696, 10.67778491973877], + [-6.043280124664307, 8.070361137390137], + [7.811593532562256, -1.6986624002456665], + [-6.744302749633789, 7.814483642578125], + [3.134061574935913, -4.693957805633545], + [-2.46646785736084, -3.9062118530273438], + [1.5545729398727417, 5.377349853515625], + [1.0305002927780151, 0.6581181287765503], + [0.513715922832489, -0.16226841509342194], + [2.9210920333862305, -4.755612373352051], + [-3.9409682750701904, 5.817983627319336], + [-0.32875609397888184, 11.58966064453125], + [-4.236345291137695, 4.500686168670654], + [1.6886876821517944, -8.154058456420898], + [-6.127237319946289, -1.8268805742263794], + [-2.5137221813201904, 1.348656415939331], + [2.8839643001556396, -4.58369255065918], + [-2.8614752292633057, -1.6448609828948975], + [8.905774116516113, -2.411174774169922], + [2.989471912384033, -4.716553211212158], + [0.4536712169647217, 5.4877519607543945], + [-4.239005088806152, -0.19531261920928955], + [-4.40116024017334, -1.1343475580215454], + [-4.187216281890869, -0.6911566853523254], + [-2.550611972808838, 4.249454975128174], + [-3.908595323562622, -1.6042896509170532], + [-2.373760223388672, 1.721429705619812], + [-7.469161033630371, -1.3517366647720337], + [5.087076187133789, 7.828276634216309], + [-4.120180606842041, -1.5273972749710083], + [3.213986396789551, -4.817925453186035], + [8.806665420532227, -2.2746615409851074], + [-2.641497850418091, -1.191591501235962], + [0.9592178463935852, 0.19444161653518677], + [3.074329137802124, -4.989078521728516], + [8.297514915466309, -2.123440980911255], + [-0.6246189475059509, 1.8514188528060913], + [0.4750300645828247, 6.899713039398193], + [-6.553619861602783, -1.2792021036148071], + [-0.2576823830604553, 9.789867401123047], + [3.231473445892334, -3.3308990001678467], + [2.3347628116607666, -3.449786901473999], + [-6.639261245727539, -1.9428313970565796], + [-7.740898609161377, -1.704118251800537], + [-6.419222354888916, -2.1340904235839844], + [10.232844352722168, -2.8386411666870117], + [-4.272534370422363, 1.053860068321228], + [-0.18121540546417236, 8.720773696899414], + [-1.4218419790267944, 1.6104893684387207], + [-5.182901859283447, -3.4043328762054443], + [1.437010407447815, 5.398589134216309], + [2.187797784805298, -6.92864465713501], + [0.38355377316474915, -0.7166702747344971], + [-2.4180526733398438, 0.7648100256919861], + [-3.1819489002227783, 5.817863464355469], + [-3.8750195503234863, -3.412297487258911], + [1.345477819442749, 5.942692756652832], + [-5.622527599334717, 6.608485698699951], + [-5.031850337982178, 2.443235158920288], + [-5.045310020446777, -1.5509697198867798], + [-0.8957932591438293, 5.808254718780518], + [-2.494140863418579, 1.8584169149398804], + [-3.2830874919891357, -3.8885810375213623], + [-3.452537775039673, -1.710074543952942], + [-5.709655284881592, 4.429818153381348], + [2.8524298667907715, 6.1635236740112305], + [-2.5981743335723877, 0.7132124900817871], + [-2.0602779388427734, 1.8340402841567993], + [7.478069305419922, -2.1567764282226562], + [0.22855231165885925, -1.4502273797988892], + [2.3595364093780518, 5.744650840759277], + [-6.442643165588379, -1.4270480871200562], + [-0.3127296566963196, 10.995516777038574], + [3.018756151199341, -4.754413604736328], + [-6.026248455047607, -1.9518758058547974], + [7.43898344039917, -1.682693362236023], + [-4.930420875549316, 5.092939853668213], + [-4.2289228439331055, -1.739142656326294], + [-4.427249908447266, -2.3277676105499268], + [2.6827895641326904, -4.259458541870117], + [2.827993154525757, -4.292003631591797], + [-3.6618645191192627, -0.6830955147743225], + [3.234008550643921, -5.113039016723633], + [-3.0122556686401367, -2.494086980819702], + [-4.345859527587891, -2.5918285846710205], + [-2.344944477081299, -1.3440405130386353], + [2.448153257369995, 5.284929275512695], + [-4.586042404174805, -0.7694708108901978], + [0.637477695941925, 5.654166221618652], + [1.7665460109710693, -7.130409240722656], + [2.977818250656128, -4.496550559997559], + [-0.7859811782836914, -2.1492016315460205], + [-6.187411308288574, -2.3186309337615967], + [-3.131309747695923, 3.28014874458313], + [8.050165176391602, -2.4583418369293213], + [-2.4857723712921143, 0.2883566617965698], + [9.527277946472168, -2.727933645248413], + [-4.496810436248779, -3.391176462173462], + [-2.2561209201812744, 2.1311771869659424], + [-0.2321174144744873, 10.062260627746582], + [-2.7855279445648193, -1.9639499187469482], + [-0.21567422151565552, 9.928768157958984], + [-2.2285897731781006, -1.9724862575531006], + [2.6513314247131348, -4.436480522155762], + [3.095643997192383, -4.836511611938477], + [4.155693531036377, 7.035403728485107], + [1.4730089902877808, 4.718507766723633], + [-7.687744140625, -1.7085647583007812], + [1.0857712030410767, -6.856240272521973], + [2.9260942935943604, -4.403026580810547], + [-0.31472086906433105, -1.0818349123001099], + [-4.820677280426025, -4.510455131530762], + [8.492148399353027, -2.1360256671905518], + [3.272731304168701, -4.8994140625], + [2.2743446826934814, 5.761729717254639], + [1.8544312715530396, -7.415612697601318], + [10.154107093811035, -2.7542026042938232], + [2.8095548152923584, -4.255314350128174], + [-3.138068437576294, -3.4081690311431885], + [-4.447906017303467, -2.446946859359741], + [2.1193721294403076, -6.569938659667969], + [3.267223358154297, -4.163783073425293], + [-0.021485842764377594, -0.8798933029174805], + [-0.9878148436546326, 7.803003311157227], + [-8.52838134765625, -1.3013421297073364], + [-0.39716094732284546, 11.309627532958984], + [1.821873664855957, 5.236003875732422], + [-0.31183677911758423, 10.663671493530273], + [2.799886465072632, -4.34274959564209], + [-0.5997387170791626, -1.5694149732589722], + [8.8043794631958, -2.437300205230713], + [8.917126655578613, -2.641730308532715], + [-3.3487045764923096, -1.7193883657455444], + [-1.8851025104522705, 1.7483068704605103], + [-6.0250725746154785, -3.0436389446258545], + [-4.202437400817871, -2.917496919631958], + [-4.7058563232421875, -4.078592300415039], + [-2.6917903423309326, 1.6451010704040527], + [-0.18641644716262817, 9.602385520935059], + [2.9441678524017334, -4.842086315155029], + [-2.1101129055023193, -1.519479513168335], + [8.378819465637207, -2.3793718814849854], + [-4.685667514801025, -5.977468490600586], + [-4.787835121154785, 5.937721252441406], + [2.1630406379699707, 5.908510208129883], + [-2.612473726272583, 2.1481821537017822], + [-0.1265128254890442, 10.465593338012695], + [-4.889638900756836, 2.9219329357147217], + [-4.4944024085998535, -3.932426691055298], + [3.072046995162964, -4.60447883605957], + [-5.947328090667725, 7.710676670074463], + [2.36609148979187, -3.979407548904419], + [-7.646413326263428, -0.32855403423309326], + [-6.348866939544678, -1.789384126663208], + [-5.674376964569092, 7.474521160125732], + [-2.1324539184570312, 0.5128821134567261], + [8.474067687988281, -2.4849164485931396], + [3.00411057472229, -4.728355407714844], + [-2.903703212738037, -1.5996503829956055], + [-2.0468952655792236, 2.255948305130005], + [9.085144996643066, -2.601332902908325], + [2.170748233795166, 5.690776824951172], + [3.4609501361846924, -4.570476055145264], + [-2.288409471511841, -2.6878769397735596], + [-2.9485104084014893, 1.737949252128601], + [-0.18374580144882202, 9.890962600708008], + [1.196583867073059, 1.842401385307312], + [2.9449095726013184, -4.694583415985107], + [2.9888463020324707, -4.519867897033691], + [9.144692420959473, -2.713696241378784], + [-7.794422626495361, -0.23564589023590088], + [-0.33985191583633423, 10.54918384552002], + [-4.469743251800537, -2.9506375789642334], + [0.40168148279190063, -5.405124664306641], + [-6.203510761260986, -2.5226197242736816], + [4.256199359893799, 6.6816534996032715], + [3.179797887802124, -4.925551891326904], + [-2.368668556213379, 1.0153545141220093], + [8.360821723937988, -2.2421655654907227], + [-4.98488712310791, -2.7912418842315674], + [1.791192650794983, 5.691076755523682], + [3.2796714305877686, 6.298275470733643], + [2.3664510250091553, -6.197339057922363], + [7.42002534866333, -1.2420574426651], + [-0.16973012685775757, 9.610319137573242], + [-0.2484297752380371, 9.751466751098633], + [-5.995100021362305, -1.7647007703781128], + [-1.8040599822998047, 1.5220050811767578], + [2.826038122177124, -4.4821672439575195], + [-0.19196254014968872, 9.86251449584961], + [-4.3588385581970215, -2.785541534423828], + [-3.3302001953125, -2.7669291496276855], + [-5.670713424682617, 0.765276312828064], + [-2.8483097553253174, -0.7955565452575684], + [-5.657650470733643, 1.1164380311965942], + [-1.782699704170227, 2.2257323265075684], + [-3.976773977279663, -2.3834521770477295], + [7.285343647003174, -1.8563501834869385], + [-4.439175605773926, 5.802783012390137], + [1.8857896327972412, -3.837768316268921], + [3.140904426574707, 6.9596099853515625], + [-2.545991897583008, 6.637327194213867], + [-7.39885139465332, 9.566313743591309], + [-4.684385299682617, 1.551937460899353], + [4.743031978607178, 6.867895603179932], + [1.9944350719451904, -3.4718151092529297], + [-6.280287265777588, 6.53023624420166], + [2.791933298110962, -4.207612991333008], + [-4.509913444519043, -2.1628928184509277], + [-4.141380786895752, -4.081781387329102], + [-6.48606014251709, 0.14335286617279053], + [-0.8581020832061768, 9.157112121582031], + [2.230867624282837, -4.113897800445557], + [-3.2768638134002686, 3.445420980453491], + [-2.5984551906585693, 6.281431198120117], + [5.473130702972412, -1.8214303255081177], + [-3.281001567840576, -4.153561592102051], + [-2.6993210315704346, -1.786159873008728], + [1.5233362913131714, 5.5447797775268555], + [1.7866342067718506, -1.8811392784118652], + [3.2269351482391357, -5.004553318023682], + [0.24012088775634766, -0.7505234479904175], + [-7.090263366699219, -1.9261915683746338], + [9.28743839263916, -2.565063238143921], + [1.122115969657898, -3.133993148803711], + [-0.2828943133354187, 10.805943489074707], + [-6.532199382781982, 8.042011260986328], + [-2.2841765880584717, 1.0378385782241821], + [1.912928581237793, -2.8455450534820557], + [-0.2445804476737976, 9.769712448120117], + [-2.476663827896118, 0.8462936878204346], + [-7.857734203338623, -0.35465145111083984], + [-2.7218880653381348, -4.092136383056641], + [-6.499172687530518, 7.908431053161621], + [-6.16422176361084, -0.8772785663604736], + [-3.9843943119049072, -2.755321741104126], + [-6.074153423309326, 7.4404215812683105], + [3.132535457611084, -5.927224636077881], + [-1.9135760068893433, 2.3150970935821533], + [-5.059877395629883, -0.8345556259155273], + [-4.430037975311279, -3.646315336227417], + [-0.06829769164323807, 10.659571647644043], + [-5.596024990081787, 3.8076560497283936], + [0.8120700716972351, -0.22915524244308472], + [2.2436885833740234, -6.47934627532959], + [-0.37951821088790894, 10.017568588256836], + [1.820897102355957, -4.766404151916504], + [2.6904332637786865, -6.20803165435791], + [-5.216286659240723, -1.8948420286178589], + [5.207442760467529, -3.266889810562134], + [-0.15134936571121216, 9.908074378967285], + [2.4185965061187744, -5.03658390045166], + [-5.218078136444092, -2.5368247032165527], + [3.2054483890533447, -4.978562355041504], + [2.8364672660827637, -4.61961030960083], + [2.941629648208618, -5.684970855712891], + [-1.9174554347991943, 6.658496856689453], + [-4.869160175323486, -2.2104341983795166], + [-0.5198151469230652, 9.349781036376953], + [-1.4134714603424072, 5.636588096618652], + [-5.675242900848389, -0.9468238949775696], + [0.47931969165802, 6.992936134338379], + [-5.337700366973877, 6.4699296951293945], + [10.073816299438477, -2.8423030376434326], + [-4.49884557723999, -2.924661874771118], + [-2.351022958755493, 1.489087462425232], + [8.702601432800293, -2.486269235610962], + [-2.2370071411132812, 5.486997604370117], + [-4.200729846954346, -3.4559381008148193], + [-2.3326237201690674, 2.5847668647766113], + [2.949122190475464, -4.406121253967285], + [5.1971611976623535, 7.014835357666016], + [-2.29714035987854, -0.07913029193878174], + [0.36725538969039917, -5.849491119384766], + [-5.306721210479736, 6.259819030761719], + [9.491240501403809, -2.587442398071289], + [-4.808276653289795, 3.25799822807312], + [-2.189267873764038, 5.164763450622559], + [-5.55063533782959, 1.5859041213989258], + [1.4249963760375977, -6.592934608459473], + [9.144271850585938, -2.5051193237304688], + [3.1591594219207764, 6.518538475036621], + [-5.3681721687316895, -0.6120672225952148], + [-3.9904286861419678, -4.312051773071289], + [-0.5196594595909119, 6.673433780670166], + [-5.112924098968506, -3.9628236293792725], + [9.499529838562012, -2.8966116905212402], + [-1.0498197078704834, -1.048184871673584], + [-4.336746692657471, 4.654811382293701], + [5.522110939025879, -1.279585361480713], + [8.995633125305176, -2.309560775756836], + [-3.9294207096099854, -5.676677227020264], + [-6.119749546051025, 7.487604141235352], + [3.111468553543091, 5.232538223266602], + [-2.9416985511779785, -1.620357632637024], + [1.9770874977111816, 5.044143199920654], + [3.62225604057312, -7.445510387420654], + [8.780202865600586, -2.297030210494995], + [-6.015183925628662, 0.8100916147232056], + [-2.995955228805542, -1.3052088022232056], + [-2.5035314559936523, 2.1680595874786377], + [-2.6676547527313232, 6.317843914031982], + [7.2388739585876465, -2.444965124130249], + [2.5779504776000977, -4.1580400466918945], + [-1.7608115673065186, 0.11369618773460388], + [-5.4293904304504395, -2.1367688179016113], + [3.005338191986084, -4.528164386749268], + [3.0369250774383545, -4.5681352615356445], + [-4.315533638000488, 3.457366943359375], + [-3.6195905208587646, -1.911062479019165], + [-3.5804667472839355, 2.044420003890991], + [-4.791350841522217, 0.06696116924285889], + [-2.4982147216796875, 2.1040337085723877], + [-5.509336471557617, -3.4781010150909424], + [-5.177968502044678, 2.964082956314087], + [-4.734241008758545, -2.6615378856658936], + [1.7674154043197632, 5.421521186828613], + [-0.10610569268465042, 3.9029252529144287], + [1.6951110363006592, -2.6864514350891113], + [1.1616714000701904, 0.5989951491355896], + [-4.691817760467529, -1.9599803686141968], + [-1.7357087135314941, 2.2279043197631836], + [-4.4312334060668945, -1.135550618171692], + [-6.015552043914795, -1.4465872049331665], + [2.0220024585723877, -3.8499157428741455], + [3.1619131565093994, -4.789558410644531], + [5.544734477996826, -3.316941022872925], + [1.4980406761169434, 0.4793945550918579], + [8.779648780822754, -3.00536847114563], + [-7.938747882843018, -1.1534541845321655], + [-5.110350131988525, -2.6934452056884766], + [3.130575180053711, -4.738462924957275], + [3.4209001064300537, -5.411403656005859], + [-0.04195959120988846, 8.5416898727417], + [-0.20780891180038452, 10.790008544921875], + [-2.4807755947113037, -0.3648536801338196], + [-3.478559970855713, -1.950938105583191], + [5.157472610473633, -0.6393463611602783], + [-1.7153854370117188, -1.1673376560211182], + [2.2429885864257812, -4.618867874145508], + [2.7784879207611084, -3.441132068634033], + [8.961041450500488, -2.8607120513916016], + [2.4750092029571533, -5.547430992126465], + [-7.688709259033203, -1.541642665863037], + [3.1344175338745117, -3.636413335800171], + [1.9637868404388428, 5.2700042724609375], + [-5.348424434661865, 7.052923202514648], + [-4.030798435211182, -2.86664080619812], + [-3.320444107055664, 6.421683311462402], + [0.9634073376655579, -6.931084156036377], + [0.2721884250640869, -5.965217113494873], + [-2.664843797683716, 1.9019497632980347], + [-5.3606181144714355, 6.0124125480651855], + [-4.24023962020874, -3.707089900970459], + [1.909592628479004, 4.722292423248291], + [-7.936935901641846, -1.342782735824585], + [-0.1789115071296692, 9.87338924407959], + [-0.2315889596939087, 9.598470687866211], + [-5.020826816558838, -1.9521358013153076], + [5.389925479888916, 7.323459625244141], + [2.5495834350585938, -4.00939416885376], + [-2.651787757873535, 1.9228044748306274], + [-5.219484806060791, 4.587740898132324], + [0.5040209889411926, -6.991589546203613], + [2.3089914321899414, 2.7164268493652344], + [0.338387131690979, -0.6892426609992981], + [-0.23201662302017212, 9.29736328125], + [-7.375720500946045, -1.1627898216247559], + [2.327756404876709, -6.814920425415039], + [-4.736233234405518, 5.0391740798950195], + [-3.240999698638916, -0.6400516033172607], + [-2.306109666824341, -1.840938925743103], + [2.6524996757507324, -4.377825736999512], + [-4.561310768127441, -2.3503029346466064], + [-0.25426214933395386, 11.332246780395508], + [3.4279286861419678, 1.1009341478347778], + [2.7782645225524902, -4.510335445404053], + [0.6582958698272705, -5.981200695037842], + [2.6593477725982666, -4.25133752822876], + [-4.76384973526001, -2.1060874462127686], + [-5.1742777824401855, -3.68591570854187], + [1.4452805519104004, -5.341084003448486], + [-6.234229564666748, 8.810559272766113], + [-0.30541473627090454, 10.13986587524414], + [2.872547149658203, -4.317495822906494], + [9.232036590576172, -2.4236228466033936], + [-3.875994920730591, -2.523052215576172], + [0.20674502849578857, -0.7241013050079346], + [7.894329071044922, -2.465135097503662], + [-1.4612382650375366, 1.472968578338623], + [0.011147789657115936, -1.0775842666625977], + [2.983344316482544, -4.531145095825195], + [1.7426609992980957, 5.414251804351807], + [-2.5119874477386475, -3.7427022457122803], + [-0.33350038528442383, 4.9399003982543945], + [-2.2698216438293457, 0.1809978485107422], + [2.357815742492676, -3.9665043354034424], + [-2.5474627017974854, 0.7803705930709839], + [-3.653212785720825, -1.77670419216156], + [-4.7417731285095215, -2.4673733711242676], + [-2.4597954750061035, -0.7743031978607178], + [-0.9565674662590027, -0.5936977863311768], + [-0.3385761082172394, -2.579425573348999], + [8.390686988830566, -2.3430979251861572], + [1.4275269508361816, 5.603504180908203], + [-3.6895787715911865, -2.1322033405303955], + [1.0973880290985107, -6.566035270690918], + [-5.580740451812744, -3.3076870441436768], + [-4.257697105407715, -2.0670006275177], + [7.321811199188232, -1.864166259765625], + [-5.162537574768066, -3.1259772777557373], + [-8.121052742004395, 9.993781089782715], + [-1.2153218984603882, -1.2285486459732056], + [-0.2839784026145935, 10.064901351928711], + [-4.6965012550354, -1.4715298414230347], + [5.825387477874756, 7.704838275909424], + [2.999729871749878, -5.004580020904541], + [-4.3299994468688965, 5.9968976974487305], + [3.2545950412750244, -5.08956241607666], + [-6.0271687507629395, 2.475834846496582], + [-2.3041372299194336, -3.712615728378296], + [2.767996072769165, -5.248109817504883], + [7.849973201751709, -1.821563720703125], + [-2.5533792972564697, -1.2841646671295166], + [8.382140159606934, -2.5004360675811768], + [-0.5638836026191711, -3.036360025405884], + [9.396467208862305, -2.6208388805389404], + [9.041516304016113, -2.535473108291626], + [-5.564321994781494, 2.2059266567230225], + [-2.366940498352051, 1.209879755973816], + [-5.807918071746826, -2.5604679584503174], + [6.807034492492676, -4.338089466094971], + [-5.150778293609619, -1.402601957321167], + [-4.618476390838623, -3.844099998474121], + [3.3066327571868896, 1.5351521968841553], + [0.9509053826332092, 0.9173927307128906], + [-5.510140419006348, -2.569627046585083], + [3.491947889328003, -5.193881034851074], + [-4.502626895904541, -0.6124528646469116], + [-7.109671592712402, -1.160719394683838], + [-4.850679874420166, 1.6372333765029907], + [2.826908826828003, -5.32930326461792], + [-3.1870288848876953, -3.798516035079956], + [-5.577012538909912, -0.9670523405075073], + [-3.861642599105835, -2.0331027507781982], + [5.23128604888916, -1.1503962278366089], + [-2.741448163986206, 1.6752368211746216], + [-1.3728322982788086, -0.581627368927002], + [2.0798637866973877, -3.9391462802886963], + [2.380763053894043, -4.3100690841674805], + [-2.4270246028900146, 0.9063625335693359], + [2.2839345932006836, -3.7576799392700195], + [-5.704676151275635, 0.3930455446243286], + [4.971445560455322, -0.910947322845459], + [3.3286118507385254, -5.297368049621582], + [-2.463928461074829, -2.5316264629364014], + [-0.6880438923835754, 9.030940055847168], + [-7.537300109863281, -1.3309874534606934], + [-5.149668216705322, 6.278463363647461], + [-2.8959665298461914, -3.938434362411499], + [-2.463247299194336, 1.2577625513076782], + [9.006227493286133, -2.5307633876800537], + [-3.9353549480438232, -0.14052259922027588], + [-5.640517234802246, 5.706411838531494], + [-4.756533145904541, -4.68122673034668], + [5.291650772094727, -2.483492136001587], + [1.9742236137390137, -3.9417455196380615], + [1.5212666988372803, -6.725014686584473], + [-2.248789072036743, 0.6504218578338623], + [8.845460891723633, -2.4675376415252686], + [2.0981454849243164, -5.13875150680542], + [-1.8562617301940918, 4.065437316894531], + [-2.9933156967163086, 3.0376980304718018], + [-4.776257514953613, -2.3553521633148193], + [8.502313613891602, -2.396418809890747], + [-4.436941623687744, 4.480396270751953], + [-5.091357707977295, 2.5285582542419434], + [7.230750560760498, -1.6954256296157837], + [-4.812393665313721, 2.418100357055664], + [-6.118020057678223, 7.642953872680664], + [-2.3465304374694824, 0.34403926134109497], + [0.4292382001876831, 2.926302433013916], + [-5.634909629821777, -3.2753915786743164], + [-0.2085644006729126, 9.61699390411377], + [-4.805328369140625, -2.9702236652374268], + [1.93483567237854, -3.087517499923706], + [3.0421955585479736, -4.752077579498291], + [1.8308569192886353, -9.088109970092773], + [-5.280788421630859, 7.574345588684082], + [6.868371486663818, -3.6572787761688232], + [-4.119748592376709, -3.035724401473999], + [-5.698776721954346, -3.9432809352874756], + [-0.16781538724899292, 10.585867881774902], + [5.077225208282471, -1.177889347076416], + [2.9765751361846924, -3.5174596309661865], + [8.616456031799316, -2.156275987625122], + [2.347646951675415, -6.969461917877197], + [-6.7703776359558105, -1.7564496994018555], + [-0.06880594044923782, 9.887974739074707], + [3.4806714057922363, -3.531010150909424], + [3.015347957611084, 0.1509312093257904], + [-1.0167572498321533, -0.6623942255973816], + [-4.460291385650635, -3.189321517944336], + [-5.761988639831543, -1.9491575956344604], + [9.13827133178711, -2.5580313205718994], + [5.994495868682861, -1.9990932941436768], + [-6.695199012756348, 7.946660995483398], + [-5.627035617828369, 1.0414503812789917], + [-7.12152624130249, 1.8384116888046265], + [2.671360969543457, -6.013082504272461], + [3.0967953205108643, -5.7635722160339355], + [-3.323834180831909, -1.5816149711608887], + [2.0214853286743164, -3.662747621536255], + [-0.1444612741470337, 9.942651748657227], + [-4.2367424964904785, -2.5429275035858154], + [-2.9290428161621094, 0.6988641619682312], + [-3.6727964878082275, 4.612333297729492], + [2.979619026184082, -4.8842949867248535], + [-0.8064654469490051, -0.38399818539619446], + [-6.532602787017822, 8.356294631958008], + [-2.5634477138519287, 2.5585267543792725], + [0.7099069952964783, -5.862962245941162], + [0.44509822130203247, -0.014919910579919815], + [-5.7763776779174805, 0.64909827709198], + [1.8748209476470947, 5.472209930419922], + [-5.006616115570068, -1.2772088050842285], + [2.959386110305786, -4.465270042419434], + [-5.187493324279785, -2.4317991733551025], + [2.6654276847839355, -5.788145065307617], + [-3.999810218811035, -2.7113149166107178], + [-5.104593753814697, 3.5040018558502197], + [-4.302615642547607, -1.5485566854476929], + [9.366766929626465, -2.6816093921661377], + [0.41717463731765747, 7.728517532348633], + [-2.563549757003784, 5.226881980895996], + [-0.26263564825057983, 9.831539154052734], + [7.8085222244262695, -3.394761800765991], + [9.230151176452637, -2.6625192165374756], + [0.11292915791273117, 9.707489013671875], + [2.792742967605591, -4.887565612792969], + [-1.8690866231918335, 1.3902589082717896], + [5.928451061248779, -2.7050511837005615], + [0.39081817865371704, 10.151829719543457], + [1.7436949014663696, 0.7437312602996826], + [1.6446802616119385, 5.630610466003418], + [6.079503536224365, -1.4468512535095215], + [-6.252699375152588, -1.9394453763961792], + [-4.228763580322266, 6.50394344329834], + [3.509800672531128, 6.51605749130249], + [1.7678303718566895, -6.559499263763428], + [0.9906147122383118, -6.479673385620117], + [4.821278095245361, 7.072171688079834], + [-4.919486045837402, -2.614990472793579], + [1.5076303482055664, 5.218908309936523], + [-4.269645690917969, -2.654977560043335], + [-1.0641297101974487, -1.461685299873352], + [3.6556949615478516, 5.01230001449585], + [6.379549503326416, -2.067603349685669], + [4.445279598236084, -3.3088247776031494], + [0.5417502522468567, -0.2022847980260849], + [0.32990890741348267, 8.256768226623535], + [-2.705869436264038, 4.129131317138672], + [1.9373867511749268, -3.5101118087768555], + [3.808817148208618, 5.965154647827148], + [2.9360029697418213, -5.328874588012695], + [0.9127965569496155, -6.084663391113281], + [-4.821695327758789, 3.1461546421051025], + [1.3511426448822021, -5.944995880126953], + [-2.1324613094329834, 1.1984022855758667], + [-2.389468193054199, 1.2763031721115112], + [-5.644298076629639, -4.0700883865356445], + [-5.3236517906188965, -5.027186870574951], + [-7.582081317901611, -0.34838902950286865], + [-4.1264801025390625, -3.483973741531372], + [-3.9280951023101807, 0.8416133522987366], + [-4.867091655731201, -2.0855190753936768], + [-4.350903034210205, 1.8404150009155273], + [-3.226170063018799, 5.429530620574951], + [-3.148390769958496, 3.405054807662964], + [-5.581691265106201, -3.799023151397705], + [-5.8285231590271, 7.637565612792969], + [0.6842084527015686, 6.182598114013672], + [-0.04016352444887161, 11.346631050109863], + [8.304442405700684, -2.3657782077789307], + [-4.60200834274292, -1.9760719537734985], + [2.3414556980133057, 5.930193901062012], + [3.534686326980591, 6.716721534729004], + [6.505050182342529, -2.354323625564575], + [-8.778006553649902, -0.6808866262435913], + [2.484769582748413, -4.186192989349365], + [-1.2845778465270996, -3.241391897201538], + [-2.24098801612854, 1.2253103256225586], + [-0.09897125512361526, -1.477403998374939], + [2.0341811180114746, 5.1705121994018555], + [-3.283949136734009, 5.486906051635742], + [-4.655488014221191, -3.9690911769866943], + [2.8769474029541016, -4.541131973266602], + [-5.076828479766846, -3.47573184967041], + [-4.132645130157471, 5.5257415771484375], + [4.17605447769165, 6.991270542144775], + [2.9104063510894775, -4.566178321838379], + [9.546772003173828, -2.64551043510437], + [9.555379867553711, -2.668954610824585], + [-0.16414546966552734, 10.284212112426758], + [2.431694269180298, -5.210355758666992], + [0.3892347812652588, -0.8274587392807007], + [-3.5961663722991943, -1.9359995126724243], + [-4.118427753448486, 1.2773691415786743], + [-4.723566055297852, -2.264681339263916], + [-1.2008626461029053, 0.11554557085037231], + [2.342616319656372, -2.9086649417877197], + [-4.360668659210205, 6.0247063636779785], + [7.836218357086182, -2.1781208515167236], + [-2.792356491088867, -3.130685329437256], + [3.0148873329162598, -4.538671493530273], + [2.4770522117614746, -2.536675214767456], + [9.923493385314941, -2.7563722133636475], + [-4.243168830871582, 5.387796878814697], + [5.240928649902344, -1.9867528676986694], + [-3.39701247215271, -2.003775119781494], + [1.6823673248291016, -2.766695976257324], + [-0.2704562544822693, 9.665295600891113], + [-5.228600025177002, 6.67597770690918], + [-2.3692195415496826, 2.0828983783721924], + [9.282029151916504, -2.6427059173583984], + [-5.978905200958252, 4.90628719329834], + [1.297877550125122, 0.6690202951431274], + [-2.278540849685669, 0.6827570796012878], + [6.0053629875183105, -3.1557369232177734], + [-1.549049735069275, 0.8759873509407043], + [2.327282190322876, -5.094046592712402], + [-0.5909544825553894, 5.435054302215576], + [2.4972360134124756, 5.541834831237793], + [7.808351516723633, -2.041234016418457], + [1.5184069871902466, -8.447065353393555], + [6.768660068511963, -1.832223892211914], + [-2.7094762325286865, -3.3322389125823975], + [2.2415120601654053, -6.7778730392456055], + [-3.1012279987335205, 3.408590078353882], + [-1.5080362558364868, 2.639734983444214], + [-0.22338855266571045, -1.0157088041305542], + [-4.7629523277282715, -3.429982900619507], + [-0.5918978452682495, 9.465214729309082], + [1.5800073146820068, 0.6019794940948486], + [4.936858654022217, 7.526020050048828], + [-1.059173345565796, -2.145822286605835], + [5.80837869644165, -1.1864014863967896], + [-2.323185443878174, 6.060534954071045], + [-0.7725669145584106, -0.6455065011978149], + [-7.197290897369385, -1.591552495956421], + [5.7446608543396, -1.9331923723220825], + [-7.0243330001831055, -1.122793436050415], + [7.876865863800049, -2.27817702293396], + [1.9014476537704468, -3.3736531734466553], + [-2.537024974822998, 2.0798847675323486], + [3.2664504051208496, -5.211831569671631], + [2.891165018081665, -4.489867687225342], + [-0.2821429967880249, -0.4129864573478699], + [2.349451780319214, -7.534362316131592], + [-0.13322609663009644, 9.926558494567871], + [3.1848719120025635, -4.898301601409912], + [-0.7627073526382446, -0.7705139517784119], + [-2.311371088027954, 2.3452095985412598], + [6.591294765472412, -4.556273460388184], + [-5.765051364898682, -1.699759602546692], + [6.0012617111206055, 7.802137851715088], + [6.044691562652588, -1.2247637510299683], + [9.168713569641113, -2.5534632205963135], + [-4.708014011383057, -1.6797999143600464], + [-2.289141893386841, -1.776971697807312], + [-2.284104824066162, -1.4699963331222534], + [-2.4826278686523438, 3.2898871898651123], + [-6.341063976287842, 4.254343032836914], + [-4.823403835296631, -3.173841714859009], + [2.5714874267578125, -4.199084281921387], + [-3.8988420963287354, 1.9420173168182373], + [-0.27336356043815613, -0.9364362955093384], + [8.944828987121582, -2.69266676902771], + [-2.766019344329834, -1.5390664339065552], + [-5.32266092300415, 3.8741261959075928], + [4.549607276916504, -4.904446125030518], + [2.0341341495513916, 5.295891761779785], + [-5.040883541107178, 4.992687702178955], + [-5.134993076324463, -3.4380605220794678], + [-5.959815502166748, -0.9995947480201721], + [-0.74843430519104, 0.286358505487442], + [-5.956471920013428, -1.8285902738571167], + [-2.5149199962615967, 1.9816831350326538], + [-0.6672636866569519, -0.5646345019340515], + [-4.452411651611328, -4.91328763961792], + [-7.1041579246521, -2.4859769344329834], + [-1.5349602699279785, -1.4135023355484009], + [-0.06590534001588821, 10.105524063110352], + [-4.709287166595459, 6.4429121017456055], + [8.14332389831543, -1.9593414068222046], + [6.834420680999756, -1.9383095502853394], + [-4.538607120513916, -3.72251558303833], + [-2.3979485034942627, 0.5881722569465637], + [-5.317887783050537, -2.9780266284942627], + [0.4201907515525818, -6.021145820617676], + [0.4104681611061096, -0.9616453647613525], + [0.25032806396484375, -5.352972507476807], + [1.588201642036438, -0.5980242490768433], + [8.084907531738281, -1.913587212562561], + [-2.1755588054656982, -0.016864124685525894], + [-6.378794193267822, 1.7580028772354126], + [9.083876609802246, -2.6687560081481934], + [-5.000946521759033, 4.280179500579834], + [-5.7680768966674805, 4.3924031257629395], + [-4.187325954437256, -3.783799409866333], + [-4.998136520385742, 2.5064165592193604], + [2.134723424911499, 5.2985520362854], + [-3.3133161067962646, -4.652135372161865], + [1.602895736694336, 5.173192501068115], + [0.1229318305850029, 7.740996360778809], + [-4.318173885345459, 0.3087422251701355], + [-3.9064505100250244, -0.9753028154373169], + [-6.6238112449646, 8.46364688873291], + [-5.713260173797607, 7.13552188873291], + [-7.2698140144348145, -1.6658064126968384], + [-2.7700812816619873, 0.7760151624679565], + [2.0728490352630615, -3.601088285446167], + [-2.533468723297119, -0.5375154614448547], + [-2.570833444595337, 1.8143796920776367], + [3.0388712882995605, -4.566824913024902], + [5.610227108001709, -2.685966730117798], + [-5.292622089385986, -3.468315839767456], + [-2.4225244522094727, 1.6812236309051514], + [0.6056461930274963, 5.323105812072754], + [4.366215705871582, -3.1173269748687744], + [-4.278749465942383, -3.7691495418548584], + [-6.553826808929443, 8.282116889953613], + [-5.6133012771606445, -0.8936234712600708], + [5.8005828857421875, 7.578953742980957], + [2.954374074935913, -4.668846607208252], + [-3.673387289047241, -2.40008807182312], + [-4.4123663902282715, -3.062814712524414], + [6.81182861328125, -3.4442124366760254], + [8.89212417602539, -2.4483156204223633], + [8.655527114868164, -2.3362863063812256], + [-4.68637228012085, 3.4177610874176025], + [1.1671562194824219, -7.300202369689941], + [-0.2052021622657776, 9.87288761138916], + [-3.873744249343872, -1.7704917192459106], + [2.4464755058288574, -4.093488693237305], + [-0.2606963515281677, 9.274835586547852], + [-0.3421802520751953, 10.440387725830078], + [3.345435857772827, -5.30670166015625], + [1.368784785270691, -5.523275852203369], + [-0.07348794490098953, -1.266855239868164], + [4.273525238037109, 1.593347430229187], + [0.9405637383460999, -7.25195837020874], + [-3.583597421646118, 6.228488922119141], + [1.5912834405899048, 4.663183212280273], + [-4.752954006195068, -3.314744710922241], + [-5.091952800750732, 3.526831865310669], + [8.516181945800781, -2.328955888748169], + [-6.335394859313965, 7.90867280960083], + [-2.471886396408081, 1.0308293104171753], + [7.438165664672852, -1.7117148637771606], + [5.719487190246582, -2.2539923191070557], + [-6.764997959136963, 8.440364837646484], + [-5.14610481262207, -7.103358268737793], + [3.782224655151367, 6.249220848083496], + [5.330443859100342, 7.61041259765625], + [-0.18930602073669434, 9.34783935546875], + [-4.344877243041992, -3.7404749393463135], + [-6.882704257965088, -1.7193495035171509], + [2.9840519428253174, -4.694645404815674], + [7.944375514984131, -2.2085587978363037], + [-5.116978168487549, -2.6564693450927734], + [2.3135578632354736, -3.959052324295044], + [-2.2826154232025146, -0.5487698316574097], + [-1.6461334228515625, 1.864424228668213], + [2.9006550312042236, -6.7544050216674805], + [-2.3805131912231445, 1.1683851480484009], + [2.3796796798706055, -7.78791618347168], + [-4.978703022003174, -3.649218797683716], + [-0.6734488010406494, -1.3818219900131226], + [2.0271646976470947, -8.065654754638672], + [-5.934316158294678, 6.995596885681152], + [5.412951946258545, 7.9554338455200195], + [9.331371307373047, -2.629173994064331], + [-5.423360347747803, 0.9829288721084595], + [6.406275272369385, -1.3564430475234985], + [-4.911421298980713, -3.9580841064453125], + [1.5688121318817139, 5.204967498779297], + [0.5024744868278503, 5.2284955978393555], + [-2.0395190715789795, 6.4253387451171875], + [-0.028911657631397247, 3.106062173843384], + [3.883314847946167, -2.98356032371521], + [4.088907718658447, -5.985003471374512], + [5.732050895690918, -1.2688313722610474], + [-1.7330996990203857, 0.6350905895233154], + [2.595237970352173, 5.038300514221191], + [-2.609208583831787, 2.17128849029541], + [-3.6466689109802246, -5.483328342437744], + [8.57118034362793, -2.3487489223480225], + [-0.2549324035644531, 9.046710014343262], + [2.0682196617126465, 5.487565040588379], + [0.6641231179237366, 0.6106505990028381], + [-3.47583270072937, -2.8115622997283936], + [-3.468740463256836, -2.6179020404815674], + [-4.855709075927734, -2.1914896965026855], + [2.4435718059539795, -3.570828676223755], + [-5.617275238037109, -3.681823253631592], + [9.835614204406738, -2.7451677322387695], + [-6.460242748260498, 8.206631660461426], + [2.789935827255249, 5.803013801574707], + [-6.374776840209961, 7.743923664093018], + [-6.996934413909912, -1.4148188829421997], + [2.3128960132598877, 0.8203611373901367], + [2.243391275405884, -7.045315265655518], + [-2.4729247093200684, 1.8692469596862793], + [-5.53042459487915, -1.291488528251648], + [-2.0873262882232666, -0.8132250905036926], + [1.878021478652954, 1.1173776388168335], + [-6.19400691986084, -1.2457093000411987], + [7.978844165802002, -2.7776827812194824], + [-5.0300726890563965, 0.3584587574005127], + [6.9637861251831055, -3.601125478744507], + [-0.007688678801059723, 1.5912190675735474], + [-4.903794765472412, -2.4318764209747314], + [-1.3127031326293945, 1.754460334777832], + [-0.2945265769958496, 4.369643688201904], + [-6.910942077636719, -1.650718331336975], + [-4.8787007331848145, -2.090317726135254], + [-1.1508402824401855, 5.407293319702148], + [3.0434653759002686, -4.630226135253906], + [2.9175612926483154, -2.622175455093384], + [-2.8980038166046143, 2.801795244216919], + [-4.91616678237915, -4.451931953430176], + [-4.354501247406006, 6.9623212814331055], + [2.024242639541626, -6.772030830383301], + [2.563371181488037, -4.018685817718506], + [-5.249977111816406, 7.342209815979004], + [-4.723288059234619, 5.987696647644043], + [9.345996856689453, -2.541898012161255], + [-6.9169745445251465, -1.355385661125183], + [-5.4069647789001465, 5.393828392028809], + [3.0058720111846924, -4.519411087036133], + [8.955972671508789, -2.5248453617095947], + [2.031662940979004, 5.468637466430664], + [7.805602073669434, -2.2925100326538086], + [2.033111810684204, 0.7441309690475464], + [1.9167571067810059, 5.931726455688477], + [5.489318370819092, -1.0338197946548462], + [-5.665213108062744, 6.7726874351501465], + [-2.1578874588012695, 2.6142983436584473], + [-5.909297466278076, -1.3051649332046509], + [-4.768402576446533, -2.339743137359619], + [-5.4336934089660645, -2.0208613872528076], + [2.787341594696045, -4.27559757232666], + [-5.388566493988037, -3.2795135974884033], + [2.4774906635284424, -8.402854919433594], + [2.0190608501434326, 0.836616039276123], + [-0.4914148449897766, 11.437204360961914], + [2.4362170696258545, 6.178830146789551], + [-5.705141544342041, 3.217423915863037], + [-4.384645462036133, -2.99859881401062], + [-7.889163017272949, -2.02156400680542], + [10.304488182067871, -2.8528082370758057], + [4.775876045227051, 7.061419486999512], + [7.70612907409668, -2.3307955265045166], + [2.736971616744995, -4.221163749694824], + [2.851182699203491, -4.352673053741455], + [-5.899359226226807, -4.3701300621032715], + [-4.04695987701416, -1.4758793115615845], + [2.0612034797668457, 5.557226181030273], + [-2.9872570037841797, 0.11226281523704529], + [-0.7620111107826233, -0.4804615080356598], + [-0.4673083424568176, 8.93674087524414], + [-2.796393394470215, 2.5051820278167725], + [-3.3045074939727783, -2.039520025253296], + [-0.21799057722091675, 10.029046058654785], + [-0.8217607140541077, -1.770485758781433], + [-2.197432041168213, -1.2696185111999512], + [8.913662910461426, -2.4173572063446045], + [6.522034168243408, -1.4585756063461304], + [-4.557949066162109, 6.907718658447266], + [-7.3594441413879395, 8.938582420349121], + [4.9790496826171875, -0.9226452112197876], + [1.750625491142273, -3.62011456489563], + [-3.6356849670410156, -2.262211561203003], + [1.7947094440460205, 5.309557914733887], + [2.0475497245788574, -3.756152391433716], + [-2.7542531490325928, 2.569592237472534], + [1.8093364238739014, 5.782238960266113], + [2.7863223552703857, -3.9597835540771484], + [-2.673319101333618, 1.9366205930709839], + [2.73433518409729, -6.445530891418457], + [-3.773810863494873, -2.718950033187866], + [-4.840713977813721, -2.189099073410034], + [-3.0040948390960693, -0.5779566764831543], + [1.9152398109436035, -5.780524253845215], + [-2.4610986709594727, 1.8389911651611328], + [5.703541278839111, -1.2859567403793335], + [3.3740057945251465, 1.3707398176193237], + [-5.465665340423584, 0.8007758259773254], + [-4.650189399719238, 4.186418533325195], + [-6.614515781402588, 8.271240234375], + [-2.8792383670806885, -4.007515907287598], + [-9.386861801147461, -0.8981717824935913], + [8.210719108581543, -2.097792625427246], + [-5.179929733276367, -3.3429062366485596], + [2.4432613849639893, 5.182594299316406], + [5.153524875640869, -0.8424414992332458], + [-4.000682830810547, 5.936265468597412], + [-0.5799808502197266, 9.813583374023438], + [-2.4175937175750732, -2.9012670516967773], + [-5.154083728790283, 3.865447521209717], + [-0.3992817997932434, 10.700925827026367], + [7.5209197998046875, -1.7013500928878784], + [-5.69730281829834, 7.355889797210693], + [-1.9473789930343628, 2.64746356010437], + [-2.745764970779419, 5.068186283111572], + [-5.63042688369751, 1.9929012060165405], + [2.8232455253601074, -5.911164283752441], + [6.678273677825928, -1.1251531839370728], + [2.4161489009857178, -7.710402965545654], + [6.353251934051514, -1.5917749404907227], + [-6.764034748077393, 2.1690492630004883], + [2.6948390007019043, 6.476057529449463], + [-4.24440336227417, -2.67183256149292], + [-3.5089452266693115, 2.9771430492401123], + [-8.509262084960938, -0.9454907178878784], + [-0.30760657787323, -0.8230233192443848], + [1.4424104690551758, -4.046692848205566], + [-7.701567649841309, 0.5317996740341187], + [-1.5827789306640625, -2.910571336746216], + [-1.3957561254501343, -3.4529898166656494], + [-6.212316036224365, -2.460444688796997], + [7.294800281524658, -1.8822481632232666], + [2.1887924671173096, 5.857509613037109], + [-4.191386699676514, 5.403295516967773], + [1.6919665336608887, -5.117011547088623], + [7.857922077178955, -2.0437872409820557], + [-1.6124746799468994, 5.589272975921631], + [8.507438659667969, -1.9202479124069214], + [-3.1593356132507324, -1.1013915538787842], + [-6.04896879196167, -2.4694783687591553], + [-5.537965297698975, 1.8388105630874634], + [-6.227096080780029, -0.8353424072265625], + [-0.5017474889755249, -0.7069885730743408], + [0.21687090396881104, -5.31776762008667], + [-2.495110273361206, 2.100741147994995], + [2.961587905883789, -4.521259784698486], + [-8.888136863708496, -1.3691574335098267], + [4.08976411819458, -3.8408327102661133], + [-1.3941185474395752, -0.9935200214385986], + [-3.0542852878570557, 3.4525420665740967], + [-4.823639869689941, -2.9523003101348877], + [-2.3818159103393555, 2.3081319332122803], + [0.594494640827179, -5.5961761474609375], + [-6.934319972991943, 7.437314510345459], + [2.1932404041290283, -3.864631414413452], + [-3.4731245040893555, -0.16814130544662476], + [-5.3884663581848145, 7.55825138092041], + [1.297240138053894, 1.5739459991455078], + [7.506288051605225, -2.1096394062042236], + [4.963895797729492, -3.5324323177337646], + [2.7807321548461914, -4.203217506408691], + [-4.262705326080322, -2.0897839069366455], + [3.374424457550049, -4.358765602111816], + [3.091951608657837, -4.631272315979004], + [-2.232832431793213, 0.08253216743469238], + [-5.883904933929443, 5.4038825035095215], + [-4.565053462982178, 1.031773328781128], + [-7.792807102203369, -0.9598502516746521], + [3.258066415786743, -3.016655206680298], + [-3.704760789871216, 6.475261211395264], + [7.211660385131836, -2.7544610500335693], + [-6.927231311798096, 8.437458038330078], + [3.056166172027588, -4.759141445159912], + [3.096459150314331, -4.64931583404541], + [-0.3867374062538147, 10.703226089477539], + [2.8386824131011963, -4.524367809295654], + [3.0696661472320557, -3.4905292987823486], + [-0.21831178665161133, 9.875509262084961], + [-3.9200327396392822, -2.0547492504119873], + [2.690711259841919, 5.884634971618652], + [-5.056450366973877, -3.9229767322540283], + [-4.3325629234313965, 3.025364637374878], + [0.5355746150016785, -5.493945598602295], + [-2.3426878452301025, 1.926296591758728], + [6.510972499847412, -2.257504463195801], + [2.399458646774292, 1.6522051095962524], + [-4.981240272521973, 8.017744064331055], + [-0.3032001852989197, 9.730897903442383], + [-5.627715587615967, 6.220948696136475], + [-1.3016879558563232, 10.336273193359375], + [-4.5912766456604, 3.376758337020874], + [-1.1499930620193481, -0.804387629032135], + [-2.261241912841797, 1.1128718852996826], + [2.7221386432647705, -6.5626678466796875], + [-2.449120283126831, 2.0903284549713135], + [-4.054112434387207, -2.6046431064605713], + [-2.340749740600586, 2.0756349563598633], + [-5.215914726257324, -1.3564115762710571], + [2.4076764583587646, 6.041906356811523], + [0.39780735969543457, -0.5263099074363708], + [-4.039522647857666, -3.6541588306427], + [9.0621337890625, -2.5625030994415283], + [2.2835276126861572, -5.948559761047363], + [7.262360095977783, -2.4529101848602295], + [0.011570803821086884, 9.681916236877441], + [-0.2823377847671509, -1.2497825622558594], + [0.5817185044288635, -0.627317488193512], + [1.986358880996704, 5.689563751220703], + [3.134859800338745, -4.900869369506836], + [1.7772985696792603, 0.9678632020950317], + [-0.01780439168214798, 10.069679260253906], + [-7.099812984466553, -1.369250774383545], + [-4.763381481170654, -2.6569268703460693], + [2.259589910507202, 5.361400604248047], + [-2.693699836730957, -0.8142924308776855], + [-0.39385032653808594, 10.681730270385742], + [-0.5180726051330566, -0.9975260496139526], + [-2.4367663860321045, 1.9024999141693115], + [1.5657739639282227, -2.6030476093292236], + [-5.1873393058776855, -3.281264305114746], + [-6.614007472991943, 7.911310195922852], + [-3.5903241634368896, -0.18168598413467407], + [6.65513277053833, -1.4499262571334839], + [5.304165363311768, 6.87100887298584], + [-3.269463300704956, 5.92230224609375], + [0.6405567526817322, -6.192857265472412], + [1.4345598220825195, 0.9439555406570435], + [-4.554751873016357, -2.465824842453003], + [2.3980472087860107, 6.387127876281738], + [1.3714306354522705, -7.710012435913086], + [1.9587953090667725, 5.201216697692871], + [8.167309761047363, -2.0131306648254395], + [-0.5854375958442688, 10.281274795532227], + [-2.251207113265991, 0.9313507080078125], + [-1.4293190240859985, 5.13016414642334], + [-1.573002815246582, 2.012664556503296], + [2.1667611598968506, -7.020851135253906], + [-7.712884426116943, -1.6374146938323975], + [8.118330001831055, -2.3196499347686768], + [0.8517204523086548, 4.581889629364014], + [2.9389708042144775, -4.527353286743164], + [-4.66969633102417, -1.6194779872894287], + [0.7008101344108582, -5.152413368225098], + [-3.834825277328491, -2.270071268081665], + [-3.4419257640838623, -1.1853095293045044], + [-1.417468786239624, 0.840897262096405], + [-2.2773377895355225, 1.082817554473877], + [-3.2759134769439697, -1.828935980796814], + [-6.0029683113098145, 2.4845070838928223], + [-1.9999288320541382, 2.5469112396240234], + [-2.251322031021118, 5.339158058166504], + [-2.3746438026428223, 0.9269367456436157], + [-0.517242968082428, 10.572988510131836], + [-4.152764797210693, 5.92667293548584], + [-2.3765311241149902, 1.3915653228759766], + [-7.09890604019165, 8.767271041870117], + [-6.020503520965576, 6.585446834564209], + [2.833101987838745, -4.8671369552612305], + [-3.3311007022857666, 7.488429069519043], + [-2.5004289150238037, 1.953635811805725], + [-2.6216232776641846, 1.8085495233535767], + [-3.947748899459839, -2.371948719024658], + [-5.027842044830322, -2.6613523960113525], + [-2.33323073387146, 1.6356476545333862], + [0.6511802673339844, -0.4910622239112854], + [5.919015407562256, -1.4705625772476196], + [2.962388753890991, -4.562303066253662], + [6.094264507293701, -1.7199238538742065], + [-3.751235246658325, -3.363990068435669], + [5.059081554412842, -2.13016414642334], + [-3.9175212383270264, -1.295377492904663], + [1.7570295333862305, 4.521470546722412], + [-1.0236660242080688, -0.42681071162223816], + [1.3659043312072754, -5.277153015136719], + [2.4464542865753174, -3.551513433456421], + [-2.6680290699005127, 2.353482484817505], + [-5.512815952301025, 2.363217830657959], + [-3.732043504714966, -1.0412890911102295], + [2.206489324569702, 5.764919281005859], + [-4.293694496154785, -3.5859920978546143], + [-4.032156467437744, -1.3479565382003784], + [0.16738444566726685, 9.95998764038086], + [-4.64586877822876, -1.0432488918304443], + [-1.4375964403152466, -0.5434873104095459], + [-4.247112274169922, -2.6828360557556152], + [-3.91213059425354, -2.1513330936431885], + [-3.203772783279419, -2.0629687309265137], + [7.970541477203369, -2.268794059753418], + [-3.1135194301605225, -2.1557228565216064], + [7.448960304260254, -1.6531224250793457], + [3.0721805095672607, 1.7655013799667358], + [-2.4388973712921143, 1.6349292993545532], + [1.904829502105713, -6.564017295837402], + [-2.39184308052063, 2.8122215270996094], + [2.5475568771362305, 1.2303000688552856], + [-0.10459662228822708, 8.960302352905273], + [-4.969863414764404, 2.4750232696533203], + [1.9196405410766602, 1.2803646326065063], + [6.2113118171691895, -6.212398529052734], + [-1.6819244623184204, -1.0176283121109009], + [-6.0468034744262695, 5.855082035064697], + [-2.7530019283294678, 1.7086881399154663], + [7.963568210601807, -2.0247435569763184], + [2.4937679767608643, -4.127743721008301], + [5.336151599884033, -1.2292145490646362], + [1.4710679054260254, -6.270351886749268], + [-2.723135471343994, 2.1038625240325928], + [-3.0400779247283936, 3.035715341567993], + [1.0963889360427856, -7.305294990539551], + [-2.4084300994873047, 2.587905168533325], + [2.2382619380950928, -3.679818868637085], + [-4.444594860076904, 6.258893966674805], + [-0.5185346603393555, 5.630959510803223], + [1.59627366065979, 4.835702896118164], + [-4.652952194213867, -2.71289324760437], + [1.6425542831420898, -8.76301383972168], + [-0.32083553075790405, 9.367627143859863], + [-4.921443462371826, -3.036848783493042], + [-2.3673617839813232, 0.9836444854736328], + [1.543285846710205, -7.792068958282471], + [-0.157711923122406, 9.410965919494629], + [-4.72581148147583, -1.5301856994628906], + [-0.6952071785926819, 12.104581832885742], + [-4.757393836975098, 5.43078088760376], + [0.17023241519927979, -1.2512123584747314], + [-6.045050144195557, -2.1471285820007324], + [3.1167900562286377, -4.823299407958984], + [-5.364938735961914, 7.594864845275879], + [-0.1954442858695984, -0.9096832275390625], + [-5.928863525390625, 3.45235276222229], + [-2.3855717182159424, 1.8654223680496216], + [3.1262781620025635, -4.9083251953125], + [-4.21762228012085, 5.520780563354492], + [-3.0853428840637207, 5.348950386047363], + [1.5544233322143555, -4.345419883728027], + [7.112462997436523, -1.8941344022750854], + [2.6550965309143066, -5.034027576446533], + [5.989731788635254, -5.050668716430664], + [1.0437772274017334, 5.601064205169678], + [-3.5224735736846924, -2.3532488346099854], + [-3.6101646423339844, 6.5618391036987305], + [-5.809667587280273, 4.641627311706543], + [-2.412733316421509, 6.097267150878906], + [-4.245970726013184, -2.1624951362609863], + [-4.7519612312316895, -1.311245083808899], + [-0.1853480339050293, 9.665650367736816], + [-0.3720807433128357, 10.126121520996094], + [-7.762050151824951, -1.726487398147583], + [-2.1128010749816895, 2.3097808361053467], + [-4.011449337005615, -2.5950019359588623], + [-4.43355655670166, -4.436174392700195], + [-2.6131348609924316, -1.5523284673690796], + [1.778976321220398, 5.362417221069336], + [5.218948841094971, 7.648824214935303], + [-5.2258195877075195, -3.989154815673828], + [3.272453546524048, -5.206382751464844], + [-2.7546133995056152, 1.8746813535690308], + [-0.4095950722694397, 10.78960132598877], + [0.6333966851234436, 5.234382152557373], + [3.357174873352051, -5.383909225463867], + [2.5979483127593994, -3.836049795150757], + [-5.086850166320801, -3.142399549484253], + [-7.809554576873779, -1.7477747201919556], + [-4.928255558013916, -0.7083357572555542], + [-5.6952595710754395, 4.408681869506836], + [1.0297740697860718, -5.311575889587402], + [-0.22387462854385376, 10.761622428894043], + [-5.611242771148682, 4.956345558166504], + [3.094031810760498, -4.8188018798828125], + [3.021907329559326, -4.535874366760254], + [1.2312225103378296, -5.634853363037109], + [-2.2903482913970947, 5.963294982910156], + [9.705107688903809, -2.616237163543701], + [5.131663799285889, -1.0614951848983765], + [-2.7396535873413086, -2.811462879180908], + [-3.422959089279175, -2.8781635761260986], + [-5.538039207458496, -1.2981165647506714], + [2.5835368633270264, -4.023616790771484], + [-4.82326078414917, -2.652385950088501], + [0.2836669385433197, -4.5985798835754395], + [3.0708372592926025, -6.100141525268555], + [-6.929794788360596, 8.775981903076172], + [-1.3093310594558716, -1.0578118562698364], + [-5.4110283851623535, -0.5289240479469299], + [-3.408132314682007, -2.4448885917663574], + [-2.505808115005493, 2.343656063079834], + [0.18405362963676453, -0.5178465247154236], + [0.9068322777748108, 0.46294742822647095], + [-4.468161582946777, -3.447425603866577], + [7.927732944488525, -1.8003515005111694], + [2.1864001750946045, -3.6050055027008057], + [9.330642700195312, -2.604419469833374], + [-1.1110780239105225, 8.31675910949707], + [-2.387786865234375, 1.7424265146255493], + [-3.120415449142456, 6.158933162689209], + [1.747739553451538, -7.7470245361328125], + [-3.913648843765259, -2.1550910472869873], + [1.390188455581665, -7.1893768310546875], + [-0.05246669799089432, 10.2750825881958], + [-4.463839054107666, 5.304693698883057], + [2.658569812774658, -3.9016878604888916], + [-6.318103790283203, 1.707044005393982], + [9.557751655578613, -2.6563572883605957], + [2.371032238006592, 3.924682855606079], + [2.6271116733551025, -3.6362578868865967], + [-5.003378868103027, 7.673859596252441], + [-2.310312509536743, 2.6639602184295654], + [2.7336947917938232, -5.784976959228516], + [-5.126891136169434, -3.0221846103668213], + [-2.6268723011016846, 2.1287682056427], + [3.0543272495269775, -4.5979156494140625], + [6.37516450881958, -2.0925331115722656], + [0.6966052651405334, 7.898827075958252], + [-0.2718096375465393, 9.545096397399902], + [5.0044026374816895, 7.160555839538574], + [1.7116001844406128, 4.779058933258057], + [-4.214969158172607, -1.8083957433700562], + [-4.811110019683838, -0.5920293927192688], + [6.659651279449463, -2.7715718746185303], + [-0.2146834135055542, 10.075453758239746], + [8.686532974243164, -2.3862295150756836], + [8.43045425415039, -2.1848573684692383], + [-4.5981950759887695, 6.388918876647949], + [1.4519214630126953, 5.5156965255737305], + [-0.20005393028259277, 9.876778602600098], + [-4.267370700836182, -1.223150610923767], + [2.1011154651641846, -9.451103210449219], + [1.6731196641921997, 5.282519340515137], + [3.2635529041290283, -5.110564708709717], + [-0.9633087515830994, -1.651447057723999], + [7.845824241638184, -2.105839967727661], + [-0.18472573161125183, -0.7479492425918579], + [7.099366664886475, -2.7178680896759033], + [-3.76940655708313, 0.7301856279373169], + [-6.011172771453857, 7.2769246101379395], + [-2.5546987056732178, 0.8060204386711121], + [3.121405601501465, -4.78199577331543], + [-5.75286340713501, -2.286451578140259], + [-0.4237053394317627, 10.423885345458984], + [-4.464554786682129, -3.3109018802642822], + [2.362792491912842, -4.989359378814697], + [-0.5394415259361267, 10.12993049621582], + [-5.083754539489746, -3.161062479019165], + [3.0189967155456543, -4.550266265869141], + [-5.335503101348877, 1.6269985437393188], + [-4.530949115753174, -0.2590002417564392], + [-5.130263328552246, -2.611720323562622], + [2.739553928375244, -4.298789024353027], + [-0.29235517978668213, 10.071037292480469], + [-7.29356050491333, -0.35572898387908936], + [3.1168668270111084, -4.675524711608887], + [-4.849353790283203, -3.9590580463409424], + [2.1561408042907715, -5.817080497741699], + [2.0391790866851807, -3.5967319011688232], + [-6.243788242340088, 7.782692909240723], + [3.1077966690063477, -5.6394853591918945], + [-0.2950328588485718, 9.36033821105957], + [-0.23724228143692017, 9.898324966430664], + [2.8610384464263916, -4.385555744171143], + [-3.8622853755950928, -1.2614432573318481], + [2.8103139400482178, 6.103066921234131], + [2.1254279613494873, -10.380298614501953], + [3.2356598377227783, -5.072676658630371], + [1.7279465198516846, 4.7209014892578125], + [5.3212666511535645, -1.048166275024414], + [-6.055976390838623, 2.209343194961548], + [-7.326361179351807, 9.260564804077148], + [-0.20505481958389282, 10.079029083251953], + [-5.38836669921875, 1.7517913579940796], + [1.395222783088684, -7.982786178588867], + [-4.7443389892578125, -2.5330746173858643], + [-0.20412784814834595, 9.772493362426758], + [-0.4730599522590637, 10.35202407836914], + [1.416707992553711, -6.01265811920166], + [-0.5132201313972473, -1.241640567779541], + [-6.053208351135254, -2.5104587078094482], + [-3.5475552082061768, -3.4611246585845947], + [1.399622917175293, -6.414984703063965], + [1.5507285594940186, -5.9456892013549805], + [0.870491087436676, 4.64070987701416], + [2.759854793548584, 6.202397346496582], + [-6.926729679107666, -2.2042362689971924], + [-4.593173027038574, -2.4642746448516846], + [-3.1548876762390137, 5.191923141479492], + [-5.493114948272705, 2.349193811416626], + [-4.556467056274414, -2.1129629611968994], + [-5.792057514190674, 1.4196208715438843], + [-3.6356253623962402, -2.0126311779022217], + [-1.5378888845443726, 2.227156400680542], + [1.2105226516723633, 0.15496623516082764], + [-1.9920217990875244, -2.6628878116607666], + [-1.3325482606887817, -0.9142714738845825], + [-2.7423524856567383, -4.5685858726501465], + [-4.323944091796875, -2.778823137283325], + [-3.8462696075439453, 5.02980899810791], + [3.0071165561676025, -4.733890056610107], + [-5.166240215301514, -3.836473226547241], + [1.0480998754501343, 1.8398268222808838], + [1.4491684436798096, -2.638718843460083], + [-0.20604479312896729, 10.01407241821289], + [-5.243087291717529, 6.498807907104492], + [-4.644706726074219, -2.0256309509277344], + [-1.02546226978302, 4.283159255981445], + [1.5407907962799072, -7.96137809753418], + [-5.138660907745361, -2.5521976947784424], + [-0.5937334895133972, 9.21805477142334], + [-4.6723408699035645, -3.997464179992676], + [-6.038496494293213, -1.0633522272109985], + [-2.244655132293701, 0.5759189128875732], + [1.6296916007995605, 4.5441083908081055], + [2.741692304611206, -4.1432390213012695], + [8.913399696350098, -2.36342453956604], + [0.1614353060722351, 9.899467468261719], + [-3.0689170360565186, 0.6026729345321655], + [-7.443062782287598, 8.991849899291992], + [-3.6940648555755615, -2.4294872283935547], + [-6.042356014251709, -1.8864773511886597], + [7.591115474700928, -1.895362138748169], + [1.1493170261383057, -3.8804891109466553], + [10.176613807678223, -2.8843867778778076], + [1.7609769105911255, 5.318942546844482], + [-7.231464385986328, -2.1034297943115234], + [2.1427266597747803, 5.732743263244629], + [2.645907163619995, -4.037137508392334], + [-1.882426142692566, 0.8418165445327759], + [-4.452235698699951, -2.4477713108062744], + [2.507542133331299, -4.352060794830322], + [2.853497266769409, -6.579907417297363], + [2.0868735313415527, -9.95796012878418], + [1.6568890810012817, -8.266672134399414], + [2.22894549369812, 5.607007026672363], + [1.231655478477478, 2.6786420345306396], + [-3.510763645172119, -2.4658637046813965], + [7.16837739944458, -2.5401322841644287], + [1.9886977672576904, 0.8792097568511963], + [-4.658533573150635, -3.9285614490509033], + [-6.523557186126709, 8.308746337890625], + [-7.21216344833374, 9.253013610839844], + [-1.3493571281433105, 4.279504299163818], + [-5.2710371017456055, -2.8565447330474854], + [1.9057209491729736, 5.599157333374023], + [2.903175115585327, -5.880364418029785], + [2.406672954559326, -4.032864093780518], + [-4.543090343475342, -1.8235249519348145], + [-5.271089553833008, -1.6908951997756958], + [-3.778055191040039, -0.8370994329452515], + [-2.137301445007324, 5.498198509216309], + [-2.236461877822876, 1.3046942949295044], + [-3.952331304550171, -5.859391212463379], + [-1.3144787549972534, 9.909040451049805], + [2.9443156719207764, 1.2678565979003906], + [-0.40349680185317993, -0.9781863689422607], + [3.3365654945373535, -5.287744045257568], + [2.9227731227874756, -4.396430492401123], + [2.2535908222198486, -4.976780891418457], + [7.162708282470703, -1.6306716203689575], + [-5.406389236450195, 4.841763973236084], + [8.88703441619873, -2.5159237384796143], + [-2.3036749362945557, -0.2764045000076294], + [-0.20309343934059143, -1.6057356595993042], + [2.271390676498413, -7.025277614593506], + [2.179062843322754, 0.7012360692024231], + [2.8922674655914307, -4.547768592834473], + [-3.5958034992218018, -2.2974438667297363], + [2.917694330215454, -4.460038185119629], + [7.787137508392334, -2.404174327850342], + [-0.1075245812535286, 9.673990249633789], + [-5.355248928070068, -3.7404613494873047], + [-4.872560501098633, -2.9381494522094727], + [-2.5394062995910645, 1.2227944135665894], + [-2.0114364624023438, 2.516781806945801], + [-2.686846971511841, -1.926242470741272], + [-6.2418694496154785, -0.6032882928848267], + [2.8205244541168213, -4.4391326904296875], + [-5.158496379852295, -1.9783169031143188], + [-6.872058391571045, 1.3029946088790894], + [-4.55249547958374, 0.19560855627059937], + [0.7333484292030334, -7.16998815536499], + [2.79689621925354, -4.320830345153809], + [-4.430202007293701, 3.5338962078094482], + [-5.042807102203369, -3.0994999408721924], + [-1.4187003374099731, 1.2169609069824219], + [5.668537616729736, -2.527419328689575], + [-5.999075412750244, -2.784540891647339], + [-6.165576934814453, 4.124316215515137], + [0.3825222849845886, 9.510385513305664], + [2.4657764434814453, 6.0711669921875], + [9.723532676696777, -2.7214083671569824], + [-3.0827434062957764, -1.7622745037078857], + [-4.636195182800293, -1.0393047332763672], + [2.9098527431488037, -4.391264915466309], + [-4.9471611976623535, -2.51562762260437], + [-0.25447046756744385, 10.384454727172852], + [2.918924570083618, -4.504205703735352], + [2.155226707458496, 5.799659729003906], + [-0.25706201791763306, 9.303289413452148], + [-6.286976337432861, 2.9465649127960205], + [2.9188687801361084, 0.9356915354728699], + [6.703531265258789, -4.6245927810668945], + [2.0097641944885254, 1.1848276853561401], + [-2.0310256481170654, 0.8005778789520264], + [-2.491795301437378, 2.0255212783813477], + [1.428074598312378, 1.6893573999404907], + [2.687781572341919, -6.904745101928711], + [2.2617533206939697, -3.6976845264434814], + [3.9942915439605713, 6.9227471351623535], + [6.297830581665039, -1.3002948760986328], + [-0.9235992431640625, 8.673192977905273], + [-2.076658248901367, 0.4576282501220703], + [-0.6126843690872192, 9.311747550964355], + [2.8114993572235107, -3.905421257019043], + [3.1466219425201416, -4.714387893676758], + [-4.150386810302734, -1.9601731300354004], + [-2.8554351329803467, 3.014021158218384], + [-3.757136106491089, -3.0935046672821045], + [2.358370542526245, -3.9562151432037354], + [-4.263664722442627, 5.518547058105469], + [-6.029996871948242, -2.669132947921753], + [-4.737425804138184, 2.129809617996216], + [-7.9838738441467285, -1.7570891380310059], + [-2.5331923961639404, 0.5389630198478699], + [-2.309966564178467, 2.145857095718384], + [8.48500919342041, -2.4170825481414795], + [-0.9596045613288879, 1.2518454790115356], + [-5.9883012771606445, -1.5502434968948364], + [-0.24033302068710327, 10.29358196258545], + [8.06873607635498, -2.0063652992248535], + [-0.2266746163368225, 11.137025833129883], + [-0.312347412109375, 9.046262741088867], + [0.5626130104064941, 4.401857376098633], + [-6.182860851287842, 1.4641605615615845], + [-6.6161065101623535, -2.0221292972564697], + [-4.210306167602539, -1.8060306310653687], + [-0.40079599618911743, 10.84556770324707], + [2.3576035499572754, -6.415384292602539], + [1.693655014038086, 5.167400360107422], + [5.291229724884033, -2.363929510116577], + [-6.388549327850342, 7.595519065856934], + [-0.31726616621017456, 10.251428604125977], + [1.871910572052002, -7.715267181396484], + [1.5342799425125122, -5.069870948791504], + [-0.19805312156677246, 9.505805969238281], + [-0.31267768144607544, 9.438335418701172], + [-4.984357833862305, -2.218527317047119], + [-3.12622332572937, -1.4630463123321533], + [-5.746567249298096, 6.998205661773682], + [-5.221668720245361, 0.7873656749725342], + [0.10304784029722214, -0.7772144675254822], + [1.6719613075256348, -8.91799545288086], + [-2.4524383544921875, 1.2509894371032715], + [-3.430267095565796, -1.7793740034103394], + [2.375976324081421, -4.062981128692627], + [-2.927722215652466, -3.0446062088012695], + [-0.6424406170845032, -0.7110202312469482], + [2.0932796001434326, -4.244210243225098], + [2.920663595199585, 6.265611171722412], + [2.1316022872924805, -3.9565958976745605], + [-1.1205627918243408, 9.629816055297852], + [-5.617282390594482, 6.580801486968994], + [-4.453991413116455, -2.277893543243408], + [-1.8274004459381104, 2.39670991897583], + [0.8275263905525208, -6.1186723709106445], + [0.5056526064872742, 6.211175441741943], + [-3.0749728679656982, 4.854275703430176], + [2.7911694049835205, -4.226685523986816], + [-4.6910295486450195, -5.529119491577148], + [-2.53631854057312, 1.9415885210037231], + [2.1733357906341553, -3.7210144996643066], + [-4.749588489532471, 3.610964775085449], + [2.8876445293426514, -4.455377101898193], + [-4.561119556427002, -2.52785325050354], + [5.537075042724609, -1.1966397762298584], + [6.092004776000977, -2.2912027835845947], + [4.59846305847168, -1.4186345338821411], + [3.1325666904449463, -4.748695373535156], + [-5.638729572296143, 4.073976039886475], + [-3.1033337116241455, 5.619095802307129], + [1.7541018724441528, 5.305654048919678], + [-5.182332515716553, -2.046246290206909], + [-3.30228328704834, -2.717747449874878], + [-0.39127594232559204, 11.20539665222168], + [-4.31100606918335, -2.3690390586853027], + [6.608625888824463, -1.5959787368774414], + [-0.15049654245376587, 10.410381317138672], + [-6.209255695343018, 8.136214256286621], + [-0.15670490264892578, 9.492107391357422], + [-3.194316864013672, -4.419631481170654], + [-5.421580791473389, -2.430912971496582], + [2.1557276248931885, -6.761050701141357], + [0.0267140194773674, 9.358007431030273], + [-5.010457515716553, -2.898242235183716], + [-4.4275431632995605, 3.068671941757202], + [3.007801055908203, -4.802120208740234], + [3.9744131565093994, -1.837467908859253], + [2.679584264755249, -4.428250312805176], + [-4.312744617462158, -1.1534358263015747], + [1.878506064414978, 5.414925575256348], + [-2.652104616165161, 1.600508689880371], + [-3.4037773609161377, -2.5635764598846436], + [-0.6219897270202637, -0.5771507024765015], + [-4.5346293449401855, 5.406834125518799], + [-2.3463549613952637, 2.252890110015869], + [-0.6040356755256653, -0.471061110496521], + [-4.039120197296143, -4.564291954040527], + [2.3062894344329834, -3.0364060401916504], + [1.9294703006744385, 0.6687437295913696], + [-7.828027248382568, 9.53391170501709], + [4.687764644622803, -3.463134765625], + [0.3974955677986145, -1.0040770769119263], + [-0.16901862621307373, 10.018108367919922], + [3.1052472591400146, -4.668168544769287], + [1.98643159866333, 4.263429641723633], + [7.694161415100098, -3.7189769744873047], + [2.684561014175415, -4.15405797958374], + [2.460418462753296, -5.348162651062012], + [2.800088405609131, -4.465199947357178], + [6.5310750007629395, -1.4283620119094849], + [2.680978775024414, -5.709118843078613], + [-6.779780864715576, 8.209493637084961], + [-4.745669364929199, -2.8112566471099854], + [-7.689672946929932, -1.8006898164749146], + [5.866668701171875, -1.283936858177185], + [3.022300958633423, -4.533423900604248], + [-3.457728147506714, -3.244197368621826], + [2.1927101612091064, 5.873919486999512], + [-7.866183757781982, -1.2244274616241455], + [-5.224192142486572, -2.051201105117798], + [-5.05372953414917, -3.309483766555786], + [-3.736240863800049, -1.3006781339645386], + [2.1216323375701904, 1.7422542572021484], + [4.05118989944458, -2.2720329761505127], + [-4.916372776031494, -3.6184611320495605], + [2.775259256362915, -4.22530460357666], + [6.990902900695801, -3.320530414581299], + [-5.195061683654785, -3.9880383014678955], + [1.8671196699142456, -3.1093897819519043], + [4.931826591491699, -1.174102544784546], + [3.154463768005371, -4.804667949676514], + [9.395323753356934, -2.6502249240875244], + [-0.4447556138038635, 10.167274475097656], + [1.1216076612472534, 6.815033435821533], + [-4.129737377166748, -3.4321553707122803], + [7.829955577850342, -2.4114606380462646], + [-4.332764148712158, 5.243068695068359], + [-4.5082621574401855, 5.263969421386719], + [3.047438621520996, -5.394540786743164], + [2.5630099773406982, -5.851593017578125], + [-2.888049840927124, 2.7081687450408936], + [0.1667860448360443, -4.924290657043457], + [8.269950866699219, -2.231288194656372], + [-2.543668031692505, 1.1476460695266724], + [-4.222095489501953, 4.847003936767578], + [-0.5206385254859924, 12.433344841003418], + [-4.94109582901001, -1.6935292482376099], + [-2.660310983657837, 6.9378662109375], + [-3.858097553253174, 5.23671817779541], + [5.620014667510986, -2.157633066177368], + [-1.5837479829788208, -2.8885912895202637], + [-3.595825433731079, 5.841213703155518], + [-4.9248576164245605, -3.3524796962738037], + [1.9684371948242188, 3.2020318508148193], + [1.6591243743896484, -7.826927185058594], + [2.937657594680786, -4.610510349273682], + [1.9674124717712402, 5.480294227600098], + [-0.33532875776290894, 10.751363754272461], + [9.587132453918457, -2.697960615158081], + [-5.019096374511719, 6.0718464851379395], + [-5.295969486236572, -3.4051718711853027], + [8.50672721862793, -2.1586344242095947], + [-5.196604251861572, -3.4163148403167725], + [1.4106628894805908, -7.45892333984375], + [-2.0842154026031494, 2.2301018238067627], + [-0.6487939953804016, -0.8315367102622986], + [5.921227931976318, -4.295046806335449], + [6.369687557220459, -3.182065725326538], + [-5.60267972946167, 7.025596618652344], + [-4.122101783752441, 6.559948921203613], + [-0.683307409286499, 5.3374738693237305], + [2.497955083847046, 6.124309539794922], + [-4.64143705368042, -3.5510470867156982], + [-4.809381484985352, -2.723806619644165], + [-0.934503436088562, 0.0012761764228343964], + [1.9842822551727295, -3.356255531311035], + [4.839829921722412, -1.59748113155365], + [-1.4970461130142212, 1.0214842557907104], + [-3.2192270755767822, -1.5062735080718994], + [-0.6221051812171936, 8.721202850341797], + [-4.099745273590088, 4.990462303161621], + [-4.210137844085693, -3.7234046459198], + [1.8463189601898193, 5.506147861480713], + [-4.996367454528809, -1.8678609132766724], + [-0.613862931728363, 9.5205078125], + [-6.583127498626709, 7.977014541625977], + [-2.672260046005249, 1.75267493724823], + [2.5127224922180176, -7.227287292480469], + [7.951564311981201, -2.0254132747650146], + [-6.426003932952881, 8.45300006866455], + [-4.152729034423828, 0.9818559885025024], + [2.8265316486358643, -4.261035919189453], + [-4.6015472412109375, -2.1795332431793213], + [3.04841685295105, -4.594362258911133], + [-6.253991603851318, 6.175741195678711], + [-2.240220308303833, 1.2248754501342773], + [-0.5338377356529236, -0.926094114780426], + [-4.149068355560303, -1.7691744565963745], + [-0.25247931480407715, 9.469354629516602], + [-4.608358383178711, -0.04464435949921608], + [-0.9721484184265137, -0.4883631467819214], + [7.539679050445557, -2.0906920433044434], + [2.7532899379730225, -3.9497921466827393], + [7.439917087554932, -2.0931055545806885], + [-2.9490911960601807, 2.603471040725708], + [9.212809562683105, -2.5396814346313477], + [-4.690945148468018, -5.013982772827148], + [-0.4305599331855774, 10.635881423950195], + [-3.751621961593628, 5.567665100097656], + [1.0946571826934814, -8.004984855651855], + [3.045667886734009, -4.574437141418457], + [1.4855942726135254, 0.9303222894668579], + [-6.059401988983154, -1.8238908052444458], + [3.1062591075897217, -4.828062057495117], + [7.541574001312256, -1.9239025115966797], + [-0.3881348967552185, 10.398670196533203], + [5.974433898925781, -1.2866653203964233], + [-5.939892292022705, -2.682612657546997], + [0.4582896828651428, -5.3412275314331055], + [-6.869715213775635, 8.191827774047852], + [9.043158531188965, -2.306180238723755], + [-6.094763278961182, -2.556044101715088], + [-0.14892464876174927, 9.762812614440918], + [-2.0192394256591797, 1.6683028936386108], + [-6.1114726066589355, 3.3278777599334717], + [1.905615210533142, 4.681722164154053], + [0.9208424687385559, -4.414939880371094], + [2.6382877826690674, -4.39452600479126], + [7.156595706939697, -1.6108464002609253], + [-5.096534729003906, -2.779940605163574], + [-7.6407318115234375, -0.5457431077957153], + [8.273590087890625, -2.6170713901519775], + [-4.531454086303711, -3.5555782318115234], + [-4.445929050445557, 4.443780899047852], + [4.782575607299805, 7.277829170227051], + [-2.2414658069610596, -0.7170838117599487], + [-0.0831146165728569, -1.6288189888000488], + [-6.048709392547607, 3.2723212242126465], + [-4.306650161743164, -3.6972837448120117], + [-4.856080532073975, -1.1123677492141724], + [2.765148162841797, 1.5905712842941284], + [1.2908153533935547, -7.888527870178223], + [-1.7415103912353516, 0.9986329078674316], + [0.41722753643989563, -4.223929405212402], + [-5.294482707977295, -4.922379493713379], + [-4.52842903137207, 5.087897300720215], + [-2.57338285446167, 0.7396173477172852], + [-6.168226718902588, 1.8835550546646118], + [-0.6683396697044373, 11.258282661437988], + [-1.2187819480895996, 9.564043045043945], + [9.305455207824707, -2.6003923416137695], + [2.4851233959198, -4.221858024597168], + [-0.12239963561296463, 9.553266525268555], + [1.7696902751922607, -7.7382330894470215], + [-0.4320383667945862, 10.510287284851074], + [-7.9917144775390625, 0.20369482040405273], + [-0.2074262499809265, 9.874175071716309], + [5.710957050323486, -1.2093017101287842], + [-0.8128563761711121, 9.126373291015625], + [-2.4077839851379395, 1.7830040454864502], + [-5.489994049072266, -1.3731552362442017], + [6.3676581382751465, -3.274718761444092], + [2.5428926944732666, 3.810117721557617], + [3.1031863689422607, -4.645774841308594], + [-5.1297712326049805, 6.832813262939453], + [2.191002607345581, 5.520183563232422], + [2.325690984725952, -3.8501598834991455], + [-5.557708740234375, 7.281864643096924], + [9.18643856048584, -2.5379507541656494], + [-5.448245048522949, 2.5337002277374268], + [-2.418464422225952, 2.336287498474121], + [8.56632137298584, -2.354966640472412], + [-2.2953908443450928, 2.0861785411834717], + [-5.11820125579834, 2.47957181930542], + [1.8950269222259521, -3.1510088443756104], + [-3.792985677719116, 6.392557144165039], + [9.569781303405762, -2.6475539207458496], + [-2.4941234588623047, 1.7257559299468994], + [1.4425832033157349, -6.177701950073242], + [-0.10109419375658035, 10.046680450439453], + [1.6746169328689575, 4.643185138702393], + [-0.33308112621307373, 9.272041320800781], + [-4.871662616729736, -3.8593881130218506], + [-0.22272926568984985, 9.546760559082031], + [2.5163309574127197, -4.8656907081604], + [-4.2860260009765625, 5.599400520324707], + [-4.906492710113525, -1.9876240491867065], + [-6.227973461151123, 3.956981897354126], + [-0.4619750380516052, 9.713071823120117], + [-6.147215366363525, 4.679208755493164], + [1.9607648849487305, -7.5083513259887695], + [3.0349347591400146, -4.553144454956055], + [-6.15683126449585, 7.583256721496582], + [-2.4782755374908447, 6.471206188201904], + [0.0085902139544487, -0.5398894548416138], + [-3.2783470153808594, 5.602829933166504], + [1.6282570362091064, 5.255354404449463], + [-3.581738233566284, -3.667556047439575], + [-6.119619846343994, -1.9985756874084473], + [2.2842090129852295, 5.288847923278809], + [-4.144440650939941, 4.429171085357666], + [0.015962176024913788, 10.12779426574707], + [-0.44967007637023926, 10.262508392333984], + [4.187199115753174, -4.79347562789917], + [5.367242336273193, 7.4868340492248535], + [7.139216423034668, -4.974593639373779], + [-5.084219932556152, 5.4452595710754395], + [2.4491777420043945, -5.833169937133789], + [-0.30295640230178833, 9.301033020019531], + [7.98032808303833, -2.353224277496338], + [-2.6792149543762207, 1.9959708452224731], + [-0.27138954401016235, 9.87285327911377], + [-7.2900166511535645, -1.0699222087860107], + [-4.163913726806641, 1.0719608068466187], + [-3.179612159729004, -1.4495502710342407], + [3.0211503505706787, -5.441929340362549], + [-2.279916286468506, 2.1715805530548096], + [-2.208906650543213, 2.353525161743164], + [-5.994770526885986, -2.4296023845672607], + [8.411848068237305, -2.2975876331329346], + [-2.3643932342529297, 1.667160987854004], + [-2.2717909812927246, -1.8494846820831299], + [-2.2458207607269287, -1.8012970685958862], + [-4.470423698425293, 1.12047278881073], + [-3.4303407669067383, -2.2358245849609375], + [1.464883804321289, 0.6307904720306396], + [2.3248369693756104, -2.8494017124176025], + [5.7738165855407715, 7.139346599578857], + [-5.495723247528076, 6.335480213165283], + [0.5372788310050964, -2.6788532733917236], + [-2.363870620727539, 2.1880295276641846], + [8.822508811950684, -2.4742279052734375], + [2.921095848083496, -4.616203308105469], + [-1.9766921997070312, 5.362723350524902], + [2.9934730529785156, -4.442202568054199], + [-5.729262828826904, 4.0702409744262695], + [0.6538440585136414, -0.41693875193595886], + [0.5089318156242371, 7.80784273147583], + [-2.3019564151763916, -0.2203352451324463], + [0.5089372992515564, -6.0779314041137695], + [1.0463917255401611, 0.41691237688064575], + [3.0217833518981934, -4.5756683349609375], + [-5.3651275634765625, -3.378175735473633], + [3.1270687580108643, -5.049001693725586], + [-0.3636282682418823, 10.695415496826172], + [-1.927851915359497, -0.8311309814453125], + [0.7600961923599243, -0.27647531032562256], + [-5.115658760070801, 3.249619245529175], + [-0.4110190272331238, 7.806556701660156], + [1.0599706172943115, -0.020300868898630142], + [-4.0451884269714355, 4.314793109893799], + [-0.6704960465431213, 0.1818874329328537], + [3.1803677082061768, -4.773501396179199], + [-0.911008358001709, 8.512655258178711], + [2.323902130126953, -4.202602386474609], + [-0.1105230525135994, 9.472066879272461], + [2.9569923877716064, -4.451239585876465], + [-3.7133798599243164, -0.9255251288414001], + [2.8711678981781006, -5.967093467712402], + [-0.6949959993362427, -0.923888087272644], + [-5.539464473724365, 6.820052623748779], + [-0.46385079622268677, 11.430007934570312], + [-7.747167587280273, -2.2313232421875], + [4.485231876373291, 7.067577362060547], + [-3.341722249984741, -0.6286572217941284], + [-2.6928296089172363, 5.122291564941406], + [-4.93190336227417, 7.222703456878662], + [-6.666203498840332, 8.21119499206543], + [-6.628627300262451, 0.1441516876220703], + [-4.9980788230896, -1.2856792211532593], + [-6.24220609664917, 8.328999519348145], + [-4.391372203826904, -2.8878209590911865], + [1.1079597473144531, 0.8344482183456421], + [-4.631302356719971, 3.613670825958252], + [-6.1408562660217285, -0.6673704981803894], + [-2.523117780685425, 1.1930114030838013], + [3.1524240970611572, -4.966650009155273], + [-6.212963581085205, 8.10328483581543], + [-6.457201957702637, 7.954145431518555], + [-6.530436038970947, 8.528470993041992], + [-6.405847549438477, -0.30219554901123047], + [-5.926669597625732, 7.579922676086426], + [-3.2369797229766846, -0.2159547209739685], + [2.958134889602661, 1.0855480432510376], + [3.0084950923919678, -4.546741485595703], + [-6.090921401977539, 8.372171401977539], + [-5.163684844970703, -3.6650445461273193], + [-5.350679874420166, -3.854431390762329], + [-6.569912433624268, 7.801540374755859], + [4.8267083168029785, -1.0756908655166626], + [-5.998136043548584, 7.061299800872803], + [0.06652580946683884, -4.212008953094482], + [-4.467530250549316, 3.086416482925415], + [0.2133617401123047, 8.003211975097656], + [1.4067751169204712, 4.089125633239746], + [-6.515852451324463, 8.611382484436035], + [-5.15320348739624, -2.695403814315796], + [-4.120427131652832, 7.0471343994140625], + [-5.794015884399414, 5.615279197692871], + [1.1557508707046509, -4.616455078125], + [2.539489507675171, -4.423070430755615], + [3.1600496768951416, -4.909058570861816], + [-4.790816783905029, 6.710622787475586], + [-5.216558933258057, -3.124317169189453], + [-2.3381001949310303, 0.9405956268310547], + [-4.483781814575195, -2.3924317359924316], + [3.699230432510376, 6.167280197143555], + [10.247193336486816, -2.839606523513794], + [-0.22120434045791626, 9.822272300720215], + [1.661821961402893, 6.680006504058838], + [-2.0913007259368896, -0.6754159927368164], + [-0.43015557527542114, -1.397857904434204], + [6.370072364807129, -4.672314643859863], + [-0.5250368118286133, 9.25189208984375], + [-3.000542402267456, 2.0379393100738525], + [-4.587039947509766, -4.2450032234191895], + [-4.778517246246338, -2.5165305137634277], + [6.15500545501709, -5.104554176330566], + [-2.2381913661956787, -3.051668643951416], + [0.7060127854347229, 0.2750205993652344], + [-5.682888507843018, 1.7582343816757202], + [-5.168529033660889, 1.0260459184646606], + [-2.069286346435547, 5.527658462524414], + [2.7705371379852295, -5.282010078430176], + [1.7805287837982178, 4.900069713592529], + [-2.102353811264038, -0.8262496590614319], + [8.410118103027344, -2.0764174461364746], + [-3.605048418045044, -1.2081955671310425], + [-2.0689890384674072, 1.746809720993042], + [-2.8263561725616455, 2.618921995162964], + [-4.760761737823486, -4.869340896606445], + [0.9416912198066711, -5.692509651184082], + [-5.156404972076416, -3.454602003097534], + [2.234502077102661, 5.685545921325684], + [-5.2203369140625, 6.215732097625732], + [-0.23755019903182983, 10.892637252807617], + [-6.342693328857422, 3.167422294616699], + [-6.071033954620361, -0.18225061893463135], + [-4.07916259765625, -0.03766686096787453], + [-5.196560382843018, -3.1836044788360596], + [1.1534417867660522, -7.002374649047852], + [-7.5270304679870605, -1.37896728515625], + [-4.649154186248779, -3.4069817066192627], + [-4.568871021270752, -6.75955867767334], + [-4.193089485168457, -0.9393194913864136], + [8.747645378112793, -2.3581912517547607], + [-2.2325494289398193, 2.600686550140381], + [-5.469332218170166, -1.1298922300338745], + [-0.19868236780166626, 8.728292465209961], + [-5.208130359649658, -1.4602073431015015], + [-4.960281848907471, 1.6349740028381348], + [-4.723769187927246, -2.5930891036987305], + [-5.00848913192749, 4.7865495681762695], + [-4.326722621917725, 5.702170372009277], + [-5.446327209472656, 5.198788642883301], + [-8.640536308288574, -0.7694313526153564], + [-7.385537147521973, -1.750434160232544], + [1.9971122741699219, -2.981236219406128], + [-0.2225828766822815, 10.201626777648926], + [-2.712524652481079, 1.7337886095046997], + [-2.0737650394439697, 2.69064998626709], + [2.5194900035858154, -5.771486282348633], + [-2.264427423477173, 0.40581804513931274], + [-5.801573276519775, 7.652144432067871], + [-4.11096715927124, -2.4613630771636963], + [-0.30870991945266724, 10.409856796264648], + [-5.354025363922119, 4.95571231842041], + [1.1263909339904785, 0.2836768627166748], + [-6.721768856048584, 8.09091567993164], + [-5.239152908325195, -0.9876077175140381], + [5.4979071617126465, -2.0082218647003174], + [7.782217979431152, -2.7641544342041016], + [-5.559567928314209, 7.36020565032959], + [7.787484645843506, -1.4942827224731445], + [8.67665958404541, -2.295011281967163], + [-0.23523980379104614, 9.752723693847656], + [2.977304220199585, -4.826387405395508], + [3.0162479877471924, -2.954610586166382], + [3.505704164505005, 6.754343032836914], + [-2.454055070877075, 1.727023959159851], + [-3.5623912811279297, -1.870578646659851], + [-3.3487966060638428, -3.927327871322632], + [-5.257767200469971, 6.52017879486084], + [6.709008693695068, -1.4974415302276611], + [-2.6553032398223877, -1.3313453197479248], + [3.116269111633301, 4.7635698318481445], + [-2.7524192333221436, -3.444664239883423], + [8.493622779846191, -2.2770297527313232], + [-6.644399642944336, 1.5940970182418823], + [-6.0126166343688965, 4.340056419372559], + [1.9163563251495361, -8.458059310913086], + [-2.028151750564575, 0.14506196975708008], + [3.6677908897399902, -3.685260057449341], + [-3.0614960193634033, -1.5226565599441528], + [-3.560692548751831, -4.672996520996094], + [0.6297625303268433, -6.572070121765137], + [-3.5622060298919678, 3.4939849376678467], + [6.3682756423950195, -4.149972915649414], + [2.717759370803833, -1.4841951131820679], + [2.7953290939331055, -4.131043434143066], + [-0.5502634048461914, -0.7533423900604248], + [-4.752355098724365, -4.1437578201293945], + [-4.928307056427002, 6.071372032165527], + [2.7982661724090576, -4.284951210021973], + [-6.092893600463867, -1.6798646450042725], + [0.3916667103767395, 6.152152061462402], + [-5.791721343994141, 0.1209179162979126], + [2.0657663345336914, 5.453371047973633], + [1.3125827312469482, -7.746976852416992], + [5.027864933013916, 7.301677703857422], + [1.9156391620635986, 4.680219650268555], + [2.104975461959839, 5.8438215255737305], + [7.064027309417725, -2.008559465408325], + [3.2889962196350098, 6.554245471954346], + [1.8651753664016724, 4.745424270629883], + [2.798966646194458, -4.49997615814209], + [1.0971161127090454, 5.733414649963379], + [-1.8326010704040527, -1.2696268558502197], + [-6.336541652679443, 8.22783088684082], + [-3.9224960803985596, -2.588099956512451], + [3.3286328315734863, -5.5446271896362305], + [-0.2190954089164734, 10.182853698730469], + [0.453643262386322, -0.441556453704834], + [-2.2731120586395264, 1.7722671031951904], + [2.202460527420044, 5.895282745361328], + [-4.743154048919678, 2.8605785369873047], + [-2.1416523456573486, 1.028138279914856], + [3.083249092102051, -4.971959590911865], + [1.8242955207824707, -3.098069429397583], + [-2.1986324787139893, -1.2536168098449707], + [-4.894078254699707, 6.092007637023926], + [2.751065969467163, -3.732792615890503], + [1.8729517459869385, 4.828032970428467], + [6.869696140289307, -2.5114078521728516], + [-1.2572171688079834, -1.4955917596817017], + [3.114439010620117, -4.667213439941406], + [9.567813873291016, -2.6744210720062256], + [-4.740683555603027, 5.658128261566162], + [1.6811065673828125, -8.76901626586914], + [8.671426773071289, -2.429243326187134], + [-5.954718112945557, 6.1577324867248535], + [9.97518253326416, -2.760385036468506], + [-4.024713039398193, -2.9066336154937744], + [-2.334174871444702, 1.656416416168213], + [-5.091752052307129, -3.369567632675171], + [-2.074556827545166, -4.0026679039001465], + [8.280441284179688, -2.5520739555358887], + [-4.56947660446167, -4.356757164001465], + [-6.267691135406494, -2.583618640899658], + [0.7313147187232971, -6.033679962158203], + [-0.02049846202135086, 9.82608413696289], + [9.538703918457031, -2.6854565143585205], + [-0.9287136197090149, 0.775108277797699], + [2.2498857975006104, 1.4230514764785767], + [-5.166940689086914, 7.077121734619141], + [-0.10849005728960037, 9.22622299194336], + [2.6235263347625732, -6.39536714553833], + [5.282565593719482, -2.2594382762908936], + [-1.137900948524475, -3.276348114013672], + [-5.482722759246826, 4.404326915740967], + [-0.7728087902069092, 10.02182388305664], + [-2.1892855167388916, 0.4505212903022766], + [2.9591071605682373, -2.7298052310943604], + [2.2007429599761963, -9.633334159851074], + [-5.780788898468018, 5.0822954177856445], + [6.919208526611328, -1.409544587135315], + [1.4731367826461792, 4.819487571716309], + [-3.910024642944336, -2.6795876026153564], + [-5.543532371520996, 7.108049392700195], + [1.5641027688980103, -8.266633033752441], + [2.0003867149353027, -8.826054573059082], + [7.22041654586792, -2.399027109146118], + [-5.4399638175964355, 6.3965067863464355], + [2.704676866531372, -4.108138084411621], + [-4.074993133544922, 5.862994194030762], + [-7.857064247131348, -1.503731369972229], + [6.026799201965332, -1.220594882965088], + [-6.512382507324219, -1.8918319940567017], + [5.857324123382568, -1.2608628273010254], + [0.6980867981910706, -7.163879871368408], + [-5.152268886566162, -3.184363603591919], + [1.625334620475769, 4.848983287811279], + [-3.1214890480041504, 0.0778965950012207], + [3.126091957092285, -2.6174063682556152], + [-0.3108276128768921, 9.515223503112793], + [-5.193272113800049, 3.226543664932251], + [3.1245930194854736, -4.718564987182617], + [-0.3752153515815735, 10.775726318359375], + [1.6856226921081543, -6.917272567749023], + [-4.193109512329102, -3.9353601932525635], + [-5.228634357452393, 6.846214771270752], + [5.610893726348877, -1.4568818807601929], + [1.6349552869796753, -7.663296222686768], + [1.599079966545105, 0.36833828687667847], + [2.8134634494781494, -4.979508399963379], + [5.333151817321777, -0.9890678524971008], + [-5.435679912567139, -5.2570977210998535], + [-5.109768390655518, -0.5709018111228943], + [6.607835292816162, -1.8327581882476807], + [-2.464796543121338, 1.3778226375579834], + [-3.899883985519409, -2.8534648418426514], + [-5.714337348937988, 0.9585505723953247], + [3.740010976791382, 1.3462637662887573], + [-4.292917251586914, -2.2931525707244873], + [2.1780717372894287, -7.82388973236084], + [-0.7025301456451416, 9.501436233520508], + [-5.485527515411377, 7.941883087158203], + [-1.368598461151123, -0.47281259298324585], + [-4.374461650848389, -2.7980895042419434], + [-3.150489330291748, 4.9205451011657715], + [1.213632583618164, 4.723478317260742], + [-3.495612859725952, -2.2912676334381104], + [-0.3510853946208954, -1.1444045305252075], + [-0.3331265449523926, 10.845809936523438], + [-2.1798765659332275, 0.3681161403656006], + [-2.856595039367676, 5.330151557922363], + [3.8400075435638428, -4.069924354553223], + [-5.162847518920898, -4.007446765899658], + [-5.451040744781494, -3.7176005840301514], + [-7.1751861572265625, -1.1714142560958862], + [2.503321886062622, -6.720376968383789], + [-4.788126468658447, 4.217745780944824], + [3.0280816555023193, -4.6168012619018555], + [-4.405160427093506, -2.341566324234009], + [-1.5102776288986206, 1.8820161819458008], + [1.8383030891418457, 4.3454060554504395], + [-5.3903889656066895, -1.1243115663528442], + [3.2446162700653076, -5.154918670654297], + [-0.29543501138687134, 9.77895736694336], + [0.5370610356330872, -5.127212047576904], + [-0.3396546244621277, 10.11376953125], + [-4.185779094696045, -2.19529128074646], + [-4.3188323974609375, -2.59203839302063], + [-4.583809852600098, 0.6164357662200928], + [-2.1062257289886475, -0.6405256986618042], + [-3.73348069190979, 6.38941764831543], + [9.193780899047852, -2.5738296508789062], + [-3.006239175796509, -4.124188423156738], + [-6.195121765136719, 2.3511738777160645], + [0.8918919563293457, 5.045737266540527], + [2.813875436782837, -5.331385135650635], + [-3.292102575302124, 5.5616679191589355], + [-5.683173656463623, 3.5389490127563477], + [-5.3560967445373535, 6.221151351928711], + [-5.233332633972168, 6.383580684661865], + [-7.094924449920654, 8.653616905212402], + [-2.865778923034668, -1.5131014585494995], + [-5.267360210418701, -2.4161508083343506], + [-4.511860370635986, -2.4400975704193115], + [3.027010679244995, -4.55186653137207], + [3.636721611022949, 1.4248430728912354], + [-4.414384365081787, -4.1258864402771], + [8.828164100646973, -2.49011492729187], + [3.180263042449951, -4.762292385101318], + [-0.5892528891563416, 12.209026336669922], + [-0.7632660865783691, 9.1180419921875], + [-4.715471267700195, 3.4411516189575195], + [-4.514298915863037, -2.455634832382202], + [4.920169353485107, -1.491604208946228], + [9.00623607635498, -2.4236676692962646], + [-3.9467780590057373, -2.1423909664154053], + [1.3399089574813843, 6.723784446716309], + [-4.801707744598389, -2.6757254600524902], + [1.7785930633544922, -6.578741550445557], + [-4.419519901275635, -0.9829796552658081], + [-5.843039035797119, 3.5241875648498535], + [0.045118652284145355, -3.586304187774658], + [-4.226919174194336, -2.379611015319824], + [9.02570629119873, -2.367084503173828], + [2.866137742996216, 0.972868800163269], + [2.9436185359954834, -4.370457649230957], + [-4.436470031738281, 6.604148864746094], + [1.693089246749878, -2.8977322578430176], + [0.2615157961845398, 7.674690246582031], + [-5.1472859382629395, 3.7346885204315186], + [7.5901875495910645, -2.216805934906006], + [1.6979734897613525, 3.163339853286743], + [3.0262081623077393, -4.685932636260986], + [9.191656112670898, -2.5642755031585693], + [-3.6335642337799072, -2.026149034500122], + [-5.059957027435303, 4.524003028869629], + [4.2647786140441895, -0.2311343550682068], + [-6.915960788726807, -1.4055348634719849], + [-2.0264806747436523, 2.55193829536438], + [3.416396379470825, -2.559483766555786], + [5.690954208374023, -1.5537265539169312], + [-7.39186429977417, 9.157060623168945], + [3.1278350353240967, -4.895843505859375], + [7.369950771331787, -2.0297300815582275], + [-2.1045737266540527, -0.720806896686554], + [0.6036198139190674, -0.05964157357811928], + [-3.619224786758423, -3.936278820037842], + [-5.822405815124512, -2.350085496902466], + [-1.686589241027832, 2.38885235786438], + [-0.9498675465583801, 3.2795536518096924], + [0.9353049397468567, -5.177712440490723], + [5.673694133758545, -0.23724454641342163], + [9.515227317810059, -2.6998329162597656], + [-5.148189067840576, -3.346925735473633], + [-2.9626359939575195, -4.700969696044922], + [3.12050461769104, -4.675215244293213], + [-3.5034797191619873, -5.272536277770996], + [-3.0914623737335205, 1.5904619693756104], + [-3.4404103755950928, -1.6258937120437622], + [-3.592336893081665, -1.81804621219635], + [-6.775183200836182, -0.6660463809967041], + [-5.730047702789307, 3.3479979038238525], + [-3.6101882457733154, -2.3244287967681885], + [-2.329211711883545, 0.1494109034538269], + [-2.2391507625579834, 2.1944825649261475], + [3.1821954250335693, -4.759634494781494], + [1.337224006652832, 4.382262229919434], + [-1.4258286952972412, -0.9790488481521606], + [3.1271066665649414, -4.953634262084961], + [-0.2551334500312805, -1.8347300291061401], + [-5.590057373046875, -2.5132861137390137], + [-5.881393909454346, -3.1676695346832275], + [-5.419682025909424, -2.285073757171631], + [3.012561559677124, -4.787803649902344], + [1.8905818462371826, -8.176935195922852], + [-0.8667059540748596, -0.8615158796310425], + [-8.32325553894043, -0.29176104068756104], + [-2.370025396347046, 0.5908955931663513], + [2.260603666305542, -10.695087432861328], + [-0.3608390688896179, 11.989595413208008], + [8.701581001281738, -2.5024383068084717], + [0.026465587317943573, 10.473007202148438], + [-5.0767741203308105, 4.567193031311035], + [-3.42720627784729, -2.5100133419036865], + [-3.7582833766937256, -2.5256223678588867], + [-2.863635301589966, 0.6924460530281067], + [-6.085565090179443, 3.0069727897644043], + [1.0361627340316772, 0.8948029279708862], + [7.510051250457764, -2.673947811126709], + [-6.425718784332275, 3.582578182220459], + [2.9678423404693604, -4.6405134201049805], + [-3.500434637069702, -1.9389029741287231], + [8.384669303894043, -2.222039222717285], + [-7.864444255828857, -1.1102961301803589], + [-4.594819068908691, 6.06803035736084], + [7.59327507019043, -2.8218443393707275], + [2.642998456954956, -4.53200626373291], + [-3.5659921169281006, -2.2173409461975098], + [-2.3062217235565186, 2.00102162361145], + [3.0051345825195312, -4.726526260375977], + [-4.29152774810791, -5.229807376861572], + [0.9600755572319031, -6.5850830078125], + [2.226212978363037, -6.685182571411133], + [-0.22698372602462769, 9.714811325073242], + [-6.909440994262695, -0.6296188831329346], + [-3.1389968395233154, -1.7770568132400513], + [-1.0181641578674316, 9.301799774169922], + [-4.450168132781982, -3.5693471431732178], + [-4.397679328918457, 0.18136709928512573], + [-2.1730620861053467, 5.766538619995117], + [-4.261819362640381, 7.601906776428223], + [1.9777085781097412, -4.553408622741699], + [6.712107181549072, -1.397884726524353], + [6.0770344734191895, -1.3033310174942017], + [9.984966278076172, -2.7411587238311768], + [7.234358310699463, -1.8807270526885986], + [2.531446695327759, -3.9313204288482666], + [-0.08921582251787186, -1.1138337850570679], + [-6.025224208831787, 7.877363204956055], + [2.7289204597473145, 0.9737664461135864], + [0.7980504631996155, -5.004586219787598], + [-2.992919683456421, -5.059690475463867], + [-0.2561846375465393, 9.123726844787598], + [-4.417037010192871, -2.3649332523345947], + [-0.28448033332824707, 9.15898323059082], + [6.552286624908447, -4.450953960418701], + [6.6733317375183105, -1.2713618278503418], + [-4.421359062194824, 5.9304399490356445], + [-3.868797540664673, 4.930626392364502], + [-0.24691933393478394, 9.728260040283203], + [1.5108745098114014, 5.000731468200684], + [-0.38558298349380493, -3.8002374172210693], + [-6.351348400115967, -2.2489402294158936], + [-3.5536317825317383, -0.9646035432815552], + [-1.5571187734603882, -0.6912142038345337], + [-6.772762775421143, -2.0434751510620117], + [-3.321131944656372, -1.4921931028366089], + [2.79115891456604, -5.498022079467773], + [-3.7772390842437744, -2.322495698928833], + [-4.778818130493164, -2.9588167667388916], + [-3.0008385181427, 3.385420560836792], + [1.568629503250122, 0.40737712383270264], + [2.871325731277466, -4.539928913116455], + [-4.644507884979248, 3.8573100566864014], + [-3.486896514892578, 3.5481619834899902], + [3.0728445053100586, -4.615401268005371], + [-4.158873081207275, -1.9673048257827759], + [-3.6820240020751953, -3.1744139194488525], + [1.5510573387145996, -7.954030990600586], + [-4.978866100311279, -3.1115622520446777], + [-2.452451467514038, 1.859361171722412], + [-4.790843963623047, 6.749898910522461], + [-4.290421009063721, 5.945069313049316], + [2.7088117599487305, 0.8708978891372681], + [-0.38377100229263306, 0.48966073989868164], + [-2.469677209854126, 0.9744910001754761], + [-3.966323137283325, -2.5860188007354736], + [-3.5264837741851807, 6.107876300811768], + [1.8272991180419922, -4.700479507446289], + [-1.7646710872650146, -1.3152871131896973], + [-2.3308706283569336, 0.9728153944015503], + [-5.06655740737915, -0.17235040664672852], + [4.528632640838623, 1.741268515586853], + [-6.914675712585449, -1.846838355064392], + [6.09834623336792, -4.486377239227295], + [-2.055753707885742, 1.3288847208023071], + [-1.8964859247207642, 2.2417421340942383], + [2.8247649669647217, -4.3272504806518555], + [6.955341815948486, -1.4470231533050537], + [-0.5802497267723083, 9.228515625], + [-5.914473056793213, 5.594061374664307], + [-2.3685760498046875, 5.833896160125732], + [1.5962029695510864, -6.545412540435791], + [2.145597219467163, 6.004590034484863], + [-3.932265520095825, -1.7473981380462646], + [-3.9515392780303955, -3.6818196773529053], + [-5.06436014175415, -4.003359794616699], + [1.7917306423187256, 5.214968681335449], + [-4.953346252441406, -1.1916617155075073], + [7.204269886016846, -1.6899957656860352], + [-3.940032720565796, -1.8333629369735718], + [3.867809534072876, 5.776645660400391], + [-2.9060120582580566, -0.6926158666610718], + [-2.670530080795288, 0.5900167226791382], + [1.7233014106750488, 3.7851178646087646], + [-4.455731391906738, -1.8537830114364624], + [10.468167304992676, -2.959152936935425], + [-4.85841703414917, -3.1819794178009033], + [-3.859900712966919, -0.5152376890182495], + [-5.581419467926025, 5.100495338439941], + [-0.08475805073976517, 10.017746925354004], + [2.9030749797821045, 4.912651062011719], + [-4.47976016998291, 0.023664113134145737], + [5.120338439941406, -2.5347068309783936], + [0.3344445526599884, -0.16610637307167053], + [-4.453495502471924, -3.3126542568206787], + [6.47776460647583, -1.4622751474380493], + [-1.0406888723373413, -1.4976286888122559], + [-5.422140598297119, -6.845788955688477], + [1.0160397291183472, 8.63192367553711], + [-3.2955410480499268, -2.2159645557403564], + [-5.063247203826904, 3.607614040374756], + [-5.3109893798828125, -2.8544838428497314], + [-2.4255731105804443, 1.4063957929611206], + [-3.9640285968780518, -3.020447015762329], + [-1.8076773881912231, 2.125314950942993], + [2.8037993907928467, -4.538415908813477], + [7.988187313079834, -2.6512584686279297], + [-0.3129987120628357, 10.448020935058594], + [-3.199303388595581, 0.05698549374938011], + [-1.0335413217544556, -0.5707821249961853], + [-5.073500156402588, -5.435083866119385], + [1.0760167837142944, 7.079981803894043], + [3.042466402053833, -4.733389854431152], + [-4.5957417488098145, 6.5396246910095215], + [1.2085649967193604, 5.5627312660217285], + [-3.935234308242798, -3.5312693119049072], + [-1.547727108001709, 0.07567140460014343], + [6.967417240142822, -1.582218050956726], + [9.324075698852539, -2.6184380054473877], + [2.88674259185791, -4.455488681793213], + [-5.047998905181885, -3.3884222507476807], + [-5.5691447257995605, -3.0964064598083496], + [1.7691423892974854, 4.540807723999023], + [-7.356012344360352, 9.452584266662598], + [-5.31873893737793, -3.4949421882629395], + [5.834625244140625, -1.1141403913497925], + [-1.6834080219268799, 1.157802939414978], + [-5.2691240310668945, -3.0659186840057373], + [-3.868643283843994, 5.847639083862305], + [-0.2122253179550171, 9.992473602294922], + [-4.6312971115112305, 3.9068126678466797], + [-4.676849842071533, 4.726490497589111], + [-5.104603290557861, 5.346263885498047], + [2.331109046936035, 3.763798952102661], + [-6.2862935066223145, -2.7952635288238525], + [-5.4672322273254395, -3.3692784309387207], + [-1.719510555267334, -1.3979861736297607], + [2.494865894317627, -3.563624620437622], + [2.528048276901245, -6.205162048339844], + [1.51863694190979, -7.284548759460449], + [-0.5450454354286194, 9.63177490234375], + [2.599900484085083, -4.32367467880249], + [-6.423642635345459, -2.148069143295288], + [-0.28376394510269165, 10.153560638427734], + [-5.0976481437683105, -2.990567445755005], + [-5.55376672744751, -3.2740042209625244], + [3.2889816761016846, -4.914240837097168], + [-5.753394603729248, -1.3072587251663208], + [3.0274786949157715, -4.719106674194336], + [-4.784214496612549, -3.923954725265503], + [3.30542254447937, -4.933256149291992], + [5.201663494110107, 8.027512550354004], + [-5.722327709197998, -2.09464693069458], + [-3.4426705837249756, -5.211236476898193], + [-4.366209506988525, -3.557692289352417], + [-4.955846309661865, -4.583257675170898], + [2.863781452178955, -5.3332977294921875], + [2.9328761100769043, -3.2045857906341553], + [-4.7423906326293945, -3.4989984035491943], + [-5.531594753265381, -1.9506511688232422], + [-2.490666151046753, 1.898478388786316], + [3.637615919113159, -1.7781095504760742], + [2.962678909301758, -4.4850568771362305], + [-2.448866844177246, 4.043885707855225], + [-3.4924261569976807, 4.868412494659424], + [-4.573811054229736, 4.906374931335449], + [-8.324202537536621, -0.9173876047134399], + [-5.898006916046143, 7.239248275756836], + [1.2083559036254883, 1.586970329284668], + [9.797436714172363, -2.7274110317230225], + [2.1242873668670654, 5.628631591796875], + [0.4692310690879822, -1.1975244283676147], + [3.534636974334717, 1.4394068717956543], + [-4.116770267486572, 5.173342704772949], + [-8.080977439880371, -0.9681471586227417], + [2.533130645751953, -7.77778434753418], + [-4.952306747436523, 4.140262603759766], + [0.4063596725463867, -5.260554313659668], + [7.072441577911377, -1.7619599103927612], + [-5.290579319000244, 0.718151330947876], + [0.3946665823459625, -1.090263843536377], + [-2.871250867843628, -2.6643669605255127], + [-1.9062645435333252, 1.0398945808410645], + [0.31898272037506104, -2.8303816318511963], + [-0.7336923480033875, 8.35584545135498], + [-5.328421592712402, 5.507160663604736], + [-4.310868263244629, 4.700319290161133], + [-2.152768611907959, 2.5312716960906982], + [-0.7706483006477356, -0.8353795409202576], + [-0.8054414987564087, -0.34745556116104126], + [-0.929470956325531, 9.105459213256836], + [5.5451130867004395, 7.047921180725098], + [-5.032121181488037, -6.1842193603515625], + [-4.806413173675537, 5.845533847808838], + [5.531096458435059, -0.5255371928215027], + [1.804774284362793, 0.8027454614639282], + [1.8078022003173828, -5.4068803787231445], + [-0.38612687587738037, 10.295347213745117], + [2.0034003257751465, 1.0056577920913696], + [-7.381631851196289, -0.3684781789779663], + [2.672081708908081, -7.947234630584717], + [6.017538070678711, -1.7873784303665161], + [2.200016736984253, 3.9325320720672607], + [-1.9065155982971191, 1.6735411882400513], + [-5.539205074310303, -5.909850120544434], + [-6.336702823638916, -2.1460111141204834], + [-6.016456127166748, 6.608126640319824], + [1.678405523300171, -8.397621154785156], + [1.3809009790420532, -5.927811622619629], + [-0.42800092697143555, 9.857686996459961], + [-0.5269444584846497, 8.996339797973633], + [2.024627685546875, -8.623674392700195], + [-4.415394306182861, -2.265869379043579], + [-4.172027587890625, -4.396068572998047], + [7.428768634796143, -2.9403746128082275], + [-1.8745176792144775, 2.490372657775879], + [3.1329715251922607, -4.701097011566162], + [3.5345051288604736, 5.470666408538818], + [-6.3315300941467285, 7.739532947540283], + [1.8293960094451904, 5.919071674346924], + [1.8663043975830078, -7.235037803649902], + [2.113722085952759, 2.4699547290802], + [1.9011797904968262, -8.16749382019043], + [-1.6709067821502686, 7.643975734710693], + [5.933852672576904, -1.1050949096679688], + [-5.739042282104492, 3.4516243934631348], + [-0.6009355783462524, 5.620482921600342], + [2.487884759902954, -1.4052931070327759], + [1.3137962818145752, -5.8996782302856445], + [-2.0643975734710693, 1.0057666301727295], + [0.2930251955986023, -0.8652405142784119], + [-7.9058613777160645, -1.235397458076477], + [-6.195062160491943, 7.068482398986816], + [3.0399279594421387, -4.556218147277832], + [-2.5189015865325928, -0.9047420024871826], + [-0.966880738735199, -0.7335511445999146], + [4.690910339355469, 6.981297016143799], + [3.06831955909729, -4.644391059875488], + [9.302743911743164, -2.6166164875030518], + [-2.8127524852752686, -3.1901915073394775], + [-0.8653872609138489, 8.818429946899414], + [8.892327308654785, -2.3257105350494385], + [-7.757511615753174, -1.5002633333206177], + [-5.348198890686035, 5.811222076416016], + [1.6645795106887817, 0.11799488961696625], + [-2.6404778957366943, -0.15845757722854614], + [7.434910297393799, -1.8124037981033325], + [5.590229511260986, 6.963099956512451], + [9.181292533874512, -2.619189500808716], + [-3.373405933380127, -0.22624701261520386], + [-2.036137819290161, 1.906285047531128], + [2.7827305793762207, -4.457720756530762], + [-3.6151158809661865, -3.414593458175659], + [6.897964000701904, -3.325922727584839], + [2.7244486808776855, -4.025606155395508], + [-8.164835929870605, -1.7229888439178467], + [8.378442764282227, -2.4528722763061523], + [4.388092517852783, -1.8258870840072632], + [2.25128173828125, -7.773445129394531], + [-4.324692726135254, -1.870190143585205], + [-2.6442625522613525, -3.55116605758667], + [-2.9027185440063477, 2.9938793182373047], + [0.14428216218948364, 9.700164794921875], + [-2.4153590202331543, -0.7839008569717407], + [0.4192674458026886, -4.5879669189453125], + [-4.449286937713623, -2.461022138595581], + [-4.547383785247803, -3.409891128540039], + [3.279515266418457, -4.3256354331970215], + [2.6196911334991455, 0.930443525314331], + [-1.4550098180770874, -1.7581630945205688], + [-6.2478108406066895, 2.90065336227417], + [-4.509586334228516, -1.7937860488891602], + [3.6838834285736084, -2.8809754848480225], + [-3.295569658279419, -3.331247568130493], + [-0.36250582337379456, 7.373480796813965], + [8.2396240234375, -2.1058149337768555], + [-4.7558465003967285, -2.541124105453491], + [-0.19947928190231323, 9.570413589477539], + [-2.907212972640991, 4.646495819091797], + [-5.831984519958496, -2.3863179683685303], + [-7.529510974884033, 9.205798149108887], + [-6.620927333831787, 8.170126914978027], + [9.91658878326416, -2.7196977138519287], + [7.176660060882568, -4.689580917358398], + [0.3058924674987793, 8.31425952911377], + [-5.41032075881958, -2.7565934658050537], + [9.010249137878418, -2.5623905658721924], + [-0.38196060061454773, -1.1140316724777222], + [5.306729793548584, -1.4382758140563965], + [-6.745202541351318, 3.546178102493286], + [1.410452127456665, -4.571045875549316], + [-0.6058452725410461, -1.4323629140853882], + [3.285125970840454, -4.90213680267334], + [-6.17673921585083, 5.695272922515869], + [2.964474678039551, -4.474093437194824], + [5.42478609085083, 7.62064266204834], + [2.4843125343322754, -3.8923239707946777], + [0.06112874299287796, -1.3335121870040894], + [0.5432900786399841, -5.7188005447387695], + [-5.016502857208252, -3.861382007598877], + [9.298983573913574, -2.624506711959839], + [3.056631565093994, 5.972558498382568], + [8.339744567871094, -2.3227245807647705], + [-3.6732378005981445, -2.72086763381958], + [-0.8459620475769043, 8.218531608581543], + [-5.542320251464844, -2.1091701984405518], + [-6.9103684425354, 8.829887390136719], + [-4.959649085998535, 7.06519889831543], + [0.5289404988288879, -0.943362832069397], + [-1.956798791885376, 0.7046347856521606], + [0.9591711163520813, 0.16176167130470276], + [-4.5607428550720215, 4.187973976135254], + [-3.5697076320648193, 6.434592247009277], + [2.070646047592163, -7.820681095123291], + [-5.010505199432373, -3.4246010780334473], + [3.1581485271453857, -4.7297563552856445], + [-6.473145961761475, 8.491061210632324], + [-4.336867809295654, -2.8830246925354004], + [-0.3214043974876404, 11.160497665405273], + [2.4434094429016113, 2.078230381011963], + [-3.413076162338257, 6.399090766906738], + [2.9826648235321045, -4.839048385620117], + [-0.5620790123939514, 9.491822242736816], + [-2.4781434535980225, 1.3210660219192505], + [1.663896083831787, 5.420413970947266], + [3.1656410694122314, -4.833797454833984], + [-2.142838954925537, 1.4938764572143555], + [-6.021402359008789, 6.400279521942139], + [-6.475399494171143, 0.31552767753601074], + [-5.152110576629639, -2.3201303482055664], + [-4.864039897918701, -1.057377576828003], + [-4.745062351226807, -2.273315191268921], + [-2.359050989151001, 1.1791436672210693], + [1.115833044052124, -0.2867203950881958], + [-4.539318561553955, -3.230306386947632], + [-5.149689197540283, -2.339643716812134], + [-0.27767032384872437, 10.9241361618042], + [-3.514310598373413, 3.694166660308838], + [5.170278072357178, -1.2054301500320435], + [1.0152363777160645, -6.350261688232422], + [-5.069892406463623, -2.3104476928710938], + [-4.730989933013916, -1.6606433391571045], + [6.10735559463501, -1.1720017194747925], + [3.39650297164917, -5.3384294509887695], + [5.450362682342529, -2.245436906814575], + [-2.5126237869262695, -4.665651798248291], + [2.644366979598999, -4.9812726974487305], + [1.9612271785736084, -8.257074356079102], + [-4.38456916809082, -0.7579455971717834], + [-4.554732799530029, -2.3838443756103516], + [-8.159455299377441, -1.0693663358688354], + [-3.411200761795044, -3.8489651679992676], + [3.087366819381714, -4.807486534118652], + [-0.5021889805793762, 9.30459976196289], + [-5.47616720199585, 5.806463241577148], + [1.8718922138214111, -6.681822299957275], + [-1.1707550287246704, 9.853870391845703], + [-4.509951114654541, -4.062684535980225], + [-5.587482929229736, 6.042312145233154], + [-8.42301082611084, -0.5380570888519287], + [-3.8657617568969727, 5.070034503936768], + [1.9403269290924072, 5.754002571105957], + [-4.003091335296631, -2.5019004344940186], + [3.2115566730499268, -4.816965579986572], + [2.692603826522827, -3.5415337085723877], + [-6.958542346954346, -1.3528037071228027], + [-8.892555236816406, -0.897499680519104], + [-6.478837490081787, 2.0042564868927], + [-5.159708499908447, 2.330524206161499], + [6.0636677742004395, -2.5111474990844727], + [-2.505530595779419, 1.4257153272628784], + [-5.087879657745361, -3.511148691177368], + [-0.260824978351593, 10.375595092773438], + [-0.887652575969696, 6.9768476486206055], + [0.8259496092796326, -3.9616892337799072], + [-5.565240383148193, -3.238541841506958], + [8.849800109863281, -2.3947722911834717], + [8.039582252502441, -2.3249762058258057], + [-6.097884654998779, 5.494475364685059], + [-3.738849401473999, -4.392491340637207], + [7.146166801452637, -1.9226685762405396], + [-4.857639789581299, -2.678335189819336], + [2.8607871532440186, -4.500260353088379], + [-5.968722820281982, -2.640054702758789], + [-3.8902790546417236, 0.12644606828689575], + [-1.4436910152435303, -1.5607892274856567], + [-3.9418179988861084, -3.5841124057769775], + [-1.0136603116989136, 9.627079010009766], + [9.938309669494629, -2.762220859527588], + [-4.221181392669678, -3.7665717601776123], + [-5.830387592315674, -2.5293123722076416], + [-4.491096496582031, -0.31150782108306885], + [4.142091274261475, -0.9645488858222961], + [3.0762367248535156, -4.615626335144043], + [8.785439491271973, -2.4155282974243164], + [-2.685359001159668, 2.2272825241088867], + [2.4495956897735596, -5.7977447509765625], + [-5.279510974884033, -0.9116646647453308], + [-4.100876808166504, -2.2358222007751465], + [0.23630958795547485, 2.902531623840332], + [1.3372907638549805, -7.191529273986816], + [0.6370982527732849, -0.9072501063346863], + [1.9571070671081543, 5.954991340637207], + [6.373163223266602, -1.5221271514892578], + [-4.783558368682861, -2.376610040664673], + [8.518290519714355, -2.333573579788208], + [-0.301607608795166, 9.753974914550781], + [-6.019811630249023, 2.3849525451660156], + [1.3774192333221436, 4.793961524963379], + [-2.831432580947876, 2.7613303661346436], + [-0.3355295658111572, 2.3089845180511475], + [-1.514894723892212, 5.301915168762207], + [-4.474081039428711, -2.6806447505950928], + [-0.011351175606250763, -0.34166377782821655], + [-4.908766269683838, -3.587164878845215], + [-4.259510517120361, -2.5237746238708496], + [-0.21170783042907715, -1.0673993825912476], + [-2.2187211513519287, 0.9740263223648071], + [-2.0960986614227295, -0.512778639793396], + [-4.465617656707764, -1.0633426904678345], + [0.4628278613090515, -5.84606409072876], + [2.2718164920806885, -3.5921409130096436], + [1.130957841873169, -7.965358734130859], + [-4.656829357147217, 5.255451202392578], + [-2.7347326278686523, 2.5812747478485107], + [-0.17290747165679932, 9.197649955749512], + [-2.189314126968384, 2.4375529289245605], + [-4.263516902923584, 7.3566365242004395], + [1.9994781017303467, -8.968208312988281], + [-4.652586460113525, 5.863361835479736], + [0.10727762430906296, -3.9389758110046387], + [1.6009628772735596, 5.554912567138672], + [-0.34381020069122314, 9.389944076538086], + [-1.6139734983444214, -2.562983274459839], + [7.302114486694336, -2.502777338027954], + [-2.20455002784729, 0.7440481781959534], + [1.3146288394927979, 6.030440807342529], + [-0.08068881183862686, -1.0520533323287964], + [-2.0294814109802246, 2.3681821823120117], + [1.8961312770843506, -7.582864761352539], + [-4.88678503036499, -3.0419304370880127], + [-4.059435844421387, -1.7927221059799194], + [-2.997504472732544, -2.0418882369995117], + [-0.11147672683000565, 9.768887519836426], + [-0.3654174208641052, 9.23124885559082], + [3.000304698944092, -4.689298629760742], + [-5.5768537521362305, 6.024754047393799], + [-4.388693332672119, -4.145415782928467], + [-4.770846366882324, -3.634204387664795], + [7.203851699829102, -1.8249045610427856], + [-5.306578159332275, 3.7441565990448], + [-5.649529457092285, 8.756969451904297], + [3.031334161758423, -4.689449310302734], + [5.564985275268555, -1.500641942024231], + [2.948943853378296, -4.690851211547852], + [-0.1958414912223816, 9.993532180786133], + [-5.40850305557251, -0.9170025587081909], + [1.1409516334533691, 0.0743887722492218], + [-2.599646806716919, 0.5122563242912292], + [0.4850465655326843, -6.519589424133301], + [-4.764052391052246, -0.7098029255867004], + [-2.2972447872161865, -0.9196332097053528], + [-2.946599006652832, 7.018477439880371], + [-2.914555549621582, 2.44563889503479], + [9.395660400390625, -2.5126736164093018], + [-4.870242595672607, 3.9760844707489014], + [0.8303395509719849, -6.650243282318115], + [-0.8164860606193542, 9.003717422485352], + [1.3943560123443604, -7.565182209014893], + [-6.8877739906311035, 8.681324005126953], + [-3.1525185108184814, -2.7165815830230713], + [1.4829766750335693, -8.48412036895752], + [2.453618288040161, -3.7391445636749268], + [2.174257516860962, -5.106291770935059], + [-1.2835716009140015, 1.555587649345398], + [1.6257705688476562, 6.344932556152344], + [-0.6246077418327332, 9.911861419677734], + [2.835521936416626, -4.7318525314331055], + [2.908491849899292, -4.501174449920654], + [-4.7445292472839355, -4.078562259674072], + [9.209976196289062, -2.5024354457855225], + [0.25190216302871704, -0.3847580552101135], + [-3.840954303741455, -3.7440712451934814], + [-5.376180171966553, 4.628024101257324], + [-2.736058473587036, -2.0885396003723145], + [7.637619972229004, -2.0734405517578125], + [2.3911020755767822, -6.002354621887207], + [2.1167714595794678, 5.501175880432129], + [-0.26282554864883423, 10.032299041748047], + [0.5472339987754822, -1.014472484588623], + [-2.657773971557617, -4.278892993927002], + [4.873345851898193, -1.8641215562820435], + [-2.6266913414001465, 6.898366928100586], + [-2.666795253753662, 2.3243539333343506], + [-0.7558728456497192, 9.36039924621582], + [-5.070654392242432, -3.472555637359619], + [3.04593825340271, -4.798744201660156], + [3.1650946140289307, -4.762953758239746], + [1.0296783447265625, -6.16641902923584], + [-4.908771991729736, -1.4024012088775635], + [9.690730094909668, -2.608501672744751], + [-5.245163440704346, 2.093374729156494], + [-2.719312906265259, -2.453033447265625], + [3.4260876178741455, 6.076315879821777], + [-7.025964736938477, 8.53332233428955], + [9.275257110595703, -2.5338640213012695], + [-0.8308060169219971, -0.8871117234230042], + [-4.8460373878479, 7.388078689575195], + [-8.502398490905762, -1.3387720584869385], + [2.0757992267608643, -6.979854583740234], + [1.6215882301330566, 5.066243648529053], + [-5.896727561950684, 4.949358940124512], + [-5.536759853363037, -2.456662893295288], + [-4.975035190582275, 2.2697932720184326], + [-4.542323589324951, -0.3752896785736084], + [-2.4693045616149902, 1.782189965248108], + [3.0284245014190674, -4.566798686981201], + [-6.112147808074951, 4.719252586364746], + [1.9675672054290771, -3.3876218795776367], + [2.7037603855133057, -4.386035919189453], + [-4.481815338134766, 3.7001380920410156], + [-4.757138729095459, -2.3864948749542236], + [2.530956268310547, -3.8115060329437256], + [2.277318239212036, -6.821967601776123], + [0.2611379027366638, -5.165661334991455], + [-5.315859317779541, -3.621676206588745], + [-4.769021987915039, -1.7020765542984009], + [3.0042831897735596, -4.8255109786987305], + [-2.419971466064453, 1.5425474643707275], + [2.9053540229797363, -4.383246421813965], + [8.855267524719238, -2.666851043701172], + [7.983300685882568, -2.0922086238861084], + [-4.8651909828186035, -1.3491982221603394], + [-3.942645788192749, 6.963160514831543], + [-2.4212472438812256, 6.167062759399414], + [2.563389778137207, -4.024920463562012], + [5.836855411529541, -2.194624662399292], + [-0.13441359996795654, 10.347850799560547], + [-1.3561509847640991, 1.345399022102356], + [-5.781431674957275, 2.268794298171997], + [-6.424465179443359, 3.5045249462127686], + [0.019784562289714813, -0.3507578670978546], + [-4.320038795471191, -3.450608491897583], + [5.1668243408203125, 7.526120662689209], + [7.367004871368408, -2.450784921646118], + [-2.9957330226898193, 5.519648551940918], + [-0.21573373675346375, -1.0548776388168335], + [-4.523502349853516, 4.1634521484375], + [-0.5550169348716736, 12.030078887939453], + [2.828928232192993, -4.257443904876709], + [-4.313864231109619, 3.8284618854522705], + [-6.2395453453063965, 5.808545112609863], + [-1.404383659362793, -0.5293749570846558], + [-6.384124279022217, 0.37070995569229126], + [2.9498655796051025, -4.73765754699707], + [1.5022417306900024, 5.373252868652344], + [3.0585429668426514, -4.893678665161133], + [-5.294393062591553, -3.16945481300354], + [-3.111327648162842, -2.600046396255493], + [0.6965960264205933, -5.681794166564941], + [-0.33829134702682495, 10.217504501342773], + [-3.984257936477661, -2.149012327194214], + [-0.2304731011390686, -0.6760268211364746], + [7.6866888999938965, -2.731346845626831], + [-0.2339244782924652, -1.0024603605270386], + [7.7652764320373535, -2.3471877574920654], + [1.8461287021636963, -7.110287189483643], + [7.890157222747803, -2.684744119644165], + [-2.761309862136841, 1.8228411674499512], + [3.0452749729156494, -4.690400123596191], + [-4.773881435394287, -3.099226951599121], + [2.946549654006958, -4.812603950500488], + [-5.863354206085205, 3.306666135787964], + [2.867619276046753, 6.239501476287842], + [3.237165927886963, -4.841324329376221], + [-0.30070388317108154, 7.201397895812988], + [2.5473902225494385, 5.816755294799805], + [-4.941677570343018, -3.5593202114105225], + [3.0140814781188965, -4.527979850769043], + [-2.3692808151245117, -0.38795825839042664], + [7.632472991943359, -2.3127706050872803], + [-1.3368433713912964, -0.30235186219215393], + [-0.9041985273361206, 9.664974212646484], + [5.607149600982666, 7.659543991088867], + [-3.0891358852386475, 2.580219268798828], + [-4.291439533233643, -2.886888027191162], + [1.7378062009811401, 5.579604625701904], + [-6.140827178955078, 2.3107054233551025], + [-3.126138925552368, -1.2484830617904663], + [6.1836724281311035, -0.3490790128707886], + [3.108414649963379, -4.837510108947754], + [9.58824634552002, -2.6132278442382812], + [-4.5115966796875, 3.3500919342041016], + [3.8211584091186523, -2.6600682735443115], + [7.509427070617676, -1.7695281505584717], + [7.013800144195557, -4.029539108276367], + [-8.086129188537598, -1.0227113962173462], + [1.133573055267334, 2.8963992595672607], + [-2.5539441108703613, 6.678971290588379], + [-4.010607719421387, 6.650479793548584], + [2.888145685195923, -4.190392017364502], + [3.027409315109253, -4.710381031036377], + [-0.7913452386856079, 9.270208358764648], + [-1.323114037513733, 1.576708436012268], + [-3.3928191661834717, -2.379617929458618], + [1.2881782054901123, -7.762735843658447], + [-4.74721097946167, -0.11665123701095581], + [-3.77480149269104, -1.1616590023040771], + [-3.574392080307007, 3.0200254917144775], + [6.815710544586182, -2.6876325607299805], + [0.889374315738678, 0.5974684953689575], + [2.2097232341766357, 1.1107970476150513], + [5.815518856048584, -2.043830156326294], + [-0.12455760687589645, -0.6037357449531555], + [-0.18443691730499268, -0.912893533706665], + [6.8407063484191895, -1.9771777391433716], + [-2.338862895965576, 1.8660234212875366], + [-5.324843883514404, 1.9950977563858032], + [4.335425853729248, -1.0357627868652344], + [5.24470853805542, -1.3079057931900024], + [-0.5656402707099915, 9.594902038574219], + [-5.3706488609313965, 5.331198215484619], + [-6.20969820022583, 3.4051032066345215], + [-5.177535057067871, 2.515716314315796], + [-3.9753222465515137, 5.250771522521973], + [1.8628897666931152, -3.4537947177886963], + [8.952261924743652, -2.519096612930298], + [-6.737861156463623, -1.3738839626312256], + [-3.985233783721924, -3.359206199645996], + [-2.6301844120025635, -2.3714897632598877], + [4.48179292678833, 0.3095172047615051], + [-4.12729549407959, -2.9577078819274902], + [7.066455364227295, -1.518044114112854], + [-2.400542736053467, -0.9820510149002075], + [-5.146460056304932, -2.464775800704956], + [-0.45007163286209106, 8.959443092346191], + [-3.5172178745269775, -3.7217376232147217], + [2.7960598468780518, -4.097592830657959], + [0.9410638213157654, 0.6131760478019714], + [-0.4306519031524658, 11.37392807006836], + [2.6399893760681152, -5.8480544090271], + [-6.255560398101807, 3.307529926300049], + [0.5483700633049011, -0.4404227137565613], + [-5.012863636016846, 6.0475358963012695], + [3.0464611053466797, -4.663973808288574], + [-4.914510726928711, 7.740704536437988], + [2.8791301250457764, -6.525299072265625], + [-3.689741611480713, 7.253074645996094], + [-4.376823902130127, 6.81200647354126], + [-3.9445793628692627, 5.249388217926025], + [7.387237071990967, -2.1599342823028564], + [3.1151485443115234, -4.694859981536865], + [-4.6915154457092285, 3.9045002460479736], + [-3.8414363861083984, 3.5362393856048584], + [1.1980431079864502, 5.457344055175781], + [-0.15588799118995667, -0.565498948097229], + [-3.7983810901641846, 5.903354644775391], + [-2.45434832572937, -2.909343957901001], + [-2.3171401023864746, 1.0930060148239136], + [6.319092273712158, 7.923630237579346], + [-4.481715679168701, 6.666572570800781], + [0.49569398164749146, -0.8141942024230957], + [0.5570799112319946, 0.471246600151062], + [-7.010170936584473, -1.500891089439392], + [-2.0772054195404053, -0.8012580871582031], + [-4.22577428817749, 1.1963704824447632], + [-2.094538927078247, -3.123399257659912], + [1.6037787199020386, -7.522913932800293], + [-4.249245643615723, -1.6851242780685425], + [5.633292198181152, -1.0517288446426392], + [1.962156057357788, 5.339649677276611], + [-5.889758586883545, -3.296804189682007], + [3.1420185565948486, -4.766982078552246], + [-4.062309265136719, 2.519219160079956], + [0.3344728350639343, 0.385775089263916], + [-5.292203903198242, 7.492029190063477], + [2.5629303455352783, -3.628887414932251], + [2.0894417762756348, -3.5307939052581787], + [-4.6228766441345215, -3.153149366378784], + [-2.0626707077026367, 0.09295898675918579], + [-3.139025926589966, -4.894014358520508], + [-1.825227975845337, 1.5428860187530518], + [2.5247366428375244, 6.160942077636719], + [-5.408769607543945, -2.5978572368621826], + [-0.7726185321807861, 0.5594771504402161], + [2.7915701866149902, -6.975519180297852], + [-6.458547115325928, 4.759787082672119], + [2.604008913040161, -5.865077495574951], + [-4.540110111236572, -3.1421773433685303], + [2.5687062740325928, -4.374484062194824], + [-4.769418239593506, 3.267908811569214], + [2.4945552349090576, -3.515746831893921], + [2.8503029346466064, -5.178484916687012], + [-4.146883487701416, 6.156457424163818], + [-4.1407999992370605, -1.575699806213379], + [-1.9163737297058105, -0.7316563725471497], + [-6.0177388191223145, -0.23855376243591309], + [-5.098774433135986, -1.6306978464126587], + [2.949610471725464, -4.442946434020996], + [-0.21560412645339966, 10.717280387878418], + [6.9538092613220215, 8.194079399108887], + [-2.8893394470214844, -1.9803646802902222], + [2.5171191692352295, -4.084884166717529], + [-4.996022701263428, 6.04128360748291], + [-6.054492950439453, -0.9044628143310547], + [-0.28737884759902954, 10.438915252685547], + [-4.939627170562744, 7.381658554077148], + [-5.073200225830078, -3.3261661529541016], + [2.3614752292633057, 1.1143548488616943], + [-5.692556858062744, 6.419402122497559], + [-5.353919506072998, -2.1674141883850098], + [4.0068254470825195, 6.9708051681518555], + [1.6720263957977295, -8.783028602600098], + [-2.5601301193237305, 2.0044519901275635], + [2.2372210025787354, -2.9583089351654053], + [-7.1297173500061035, -1.4760311841964722], + [-4.6984148025512695, -3.812300443649292], + [-4.252496242523193, 0.060384687036275864], + [-0.2353733777999878, 10.265467643737793], + [3.1685950756073, -4.90229606628418], + [0.8344790935516357, -5.5989885330200195], + [-5.739561557769775, 3.230656862258911], + [1.2886691093444824, -3.093287706375122], + [-2.426356792449951, 1.636060357093811], + [-2.390925645828247, 2.27453351020813], + [-2.3748323917388916, 1.6138888597488403], + [1.6892309188842773, -8.225144386291504], + [-1.7084975242614746, 5.843072891235352], + [0.6651063561439514, -0.12313926219940186], + [-6.458081245422363, 7.972235679626465], + [-6.767908573150635, -1.7508152723312378], + [-8.33695125579834, -1.243238925933838], + [5.630254745483398, -0.6234036684036255], + [-4.01655387878418, 6.219855785369873], + [-0.0563318207859993, 10.156501770019531], + [-2.3316218852996826, 5.672818183898926], + [-5.259142875671387, 7.102132797241211], + [2.6838362216949463, 5.780282020568848], + [-2.0958645343780518, 2.7592289447784424], + [-4.971200466156006, 7.831141948699951], + [-2.6010518074035645, 0.7705658674240112], + [-4.818630695343018, -0.24242353439331055], + [2.373316526412964, -3.9780588150024414], + [-0.49293625354766846, 10.649979591369629], + [-4.838132381439209, -2.216769218444824], + [-0.11993653327226639, 9.63248062133789], + [-5.083104610443115, 3.4219107627868652], + [2.1626434326171875, 4.967132568359375], + [-2.2425005435943604, -1.8436672687530518], + [-3.6341116428375244, -1.928937554359436], + [-2.2921559810638428, 1.952736735343933], + [-7.384634017944336, 8.906148910522461], + [-4.7200188636779785, -6.091722011566162], + [-5.534440994262695, 7.520822525024414], + [7.711322784423828, -1.7939813137054443], + [-2.4553911685943604, 1.5840837955474854], + [-1.8958823680877686, 2.1734635829925537], + [-0.9121092557907104, -0.9407230019569397], + [-5.0510735511779785, -0.6658008694648743], + [-7.314313888549805, -2.0312061309814453], + [2.2954585552215576, 5.688555717468262], + [-2.782819986343384, 0.7475687265396118], + [-3.589939832687378, 5.6182732582092285], + [-0.3665141463279724, 9.651369094848633], + [-5.047933101654053, -2.2939021587371826], + [-0.272996723651886, 10.641937255859375], + [0.5575149059295654, -6.863696098327637], + [1.3122719526290894, 4.939996719360352], + [-3.7330844402313232, -1.4666715860366821], + [1.824434518814087, 4.955582618713379], + [1.7079061269760132, -5.313863754272461], + [-5.831172943115234, 2.2422738075256348], + [-5.093430995941162, 6.910531997680664], + [-2.7922399044036865, 5.378201961517334], + [-3.6105480194091797, 5.843572616577148], + [-1.9071756601333618, 1.4658191204071045], + [1.2721468210220337, -5.910703659057617], + [-1.14323890209198, -1.6481772661209106], + [2.1172192096710205, -7.219040870666504], + [-4.507523059844971, -1.57477605342865], + [-2.4889800548553467, 1.7675889730453491], + [-5.544716835021973, -4.030697822570801], + [-4.046578407287598, -2.661346673965454], + [-4.034593105316162, 5.699878692626953], + [-2.5054609775543213, 2.202136754989624], + [3.102796792984009, -4.654669761657715], + [-5.241248607635498, -2.4881975650787354], + [-5.4192986488342285, -3.248843193054199], + [-2.886039972305298, 5.362102031707764], + [1.3453906774520874, 1.2807931900024414], + [2.9832940101623535, -4.7021403312683105], + [9.408364295959473, -2.684826135635376], + [-0.5052899718284607, 11.335044860839844], + [-3.2895710468292236, 5.4137701988220215], + [-0.5633590817451477, -1.355324387550354], + [-0.014913372695446014, -3.507265329360962], + [-7.0287089347839355, -1.7936002016067505], + [-6.504078388214111, 8.403624534606934], + [7.344498634338379, -1.8268109560012817], + [5.009840488433838, -3.6143956184387207], + [-2.825345516204834, 6.373104572296143], + [7.052710056304932, -4.403468132019043], + [-3.851839303970337, -1.2552787065505981], + [2.9141345024108887, -4.873953819274902], + [-8.085721015930176, -1.7695847749710083], + [4.186409950256348, 7.214171886444092], + [-6.173751354217529, -1.271450400352478], + [2.552687883377075, 4.236605644226074], + [-2.3897886276245117, 1.8049910068511963], + [-4.617617130279541, -3.7845494747161865], + [-1.1439952850341797, 8.801770210266113], + [3.2344131469726562, -4.8352179527282715], + [4.450496673583984, -3.747360944747925], + [1.36442232131958, -7.149238109588623], + [-5.190822124481201, -3.14388108253479], + [1.3668618202209473, -6.30722713470459], + [-4.9464921951293945, -3.575495719909668], + [-3.2354865074157715, -1.4912818670272827], + [-7.713517189025879, -1.0145071744918823], + [1.9157536029815674, -3.7510881423950195], + [-4.323574542999268, -2.4063899517059326], + [-4.244161605834961, 5.93870735168457], + [1.049744963645935, -7.45435905456543], + [2.086812734603882, -4.177752494812012], + [-5.209327697753906, -3.8440334796905518], + [7.8090410232543945, -3.364973783493042], + [0.15377748012542725, -1.1385895013809204], + [-4.434092044830322, 0.2596336007118225], + [-5.863908290863037, 1.0901410579681396], + [-4.2297043800354, -4.3610639572143555], + [-2.348644495010376, 1.7637379169464111], + [-7.9860053062438965, -0.8358851671218872], + [-2.3832499980926514, 1.4053117036819458], + [-2.778642177581787, 4.658010005950928], + [4.652793884277344, -3.4269206523895264], + [2.8127329349517822, -5.777061462402344], + [-5.084996223449707, 7.626431465148926], + [1.5122191905975342, -0.22518816590309143], + [-0.9644326567649841, 8.807039260864258], + [5.63864278793335, 7.629662036895752], + [0.6043006777763367, -0.2971652150154114], + [7.112912178039551, -1.435097098350525], + [9.45237922668457, -2.6350576877593994], + [2.88218092918396, -4.313387870788574], + [1.38162362575531, 2.480461359024048], + [-4.882965087890625, -0.9985243082046509], + [-0.41579383611679077, 10.999834060668945], + [-3.7420051097869873, -1.7837122678756714], + [-2.8857839107513428, -4.27686071395874], + [-0.22413858771324158, -0.6394908428192139], + [-7.361415386199951, -1.4786326885223389], + [-3.155975580215454, -1.780410647392273], + [6.545711040496826, -1.3504416942596436], + [-3.5433766841888428, -3.7060251235961914], + [5.955129146575928, -2.399470090866089], + [-0.4011109471321106, 8.923149108886719], + [-0.2985841631889343, 10.615921020507812], + [-7.521602153778076, -0.8449634909629822], + [-0.2311406433582306, -1.3773062229156494], + [-1.792659044265747, 1.2653262615203857], + [-4.202317237854004, 5.663707256317139], + [-4.92158842086792, 7.05788516998291], + [-0.47485703229904175, 11.027286529541016], + [7.134034633636475, -1.5979640483856201], + [-4.652830600738525, 7.73380184173584], + [-5.080466270446777, -2.5313026905059814], + [-3.513190984725952, -3.7824866771698], + [4.497215747833252, 0.058995988219976425], + [-1.1397560834884644, 0.47867143154144287], + [-2.0657777786254883, 2.2012178897857666], + [2.348931074142456, 4.2524614334106445], + [-1.1218063831329346, 8.683366775512695], + [-3.4833128452301025, -3.177229642868042], + [-5.257973670959473, -2.1864731311798096], + [-2.102067708969116, 2.494211435317993], + [-4.481990814208984, -2.1639857292175293], + [-6.5204644203186035, 7.908172607421875], + [-5.120090484619141, -2.9892232418060303], + [-2.233471155166626, 2.189673900604248], + [-2.5054962635040283, 1.8028502464294434], + [-1.022538661956787, -1.095250129699707], + [-2.4516024589538574, -0.7209445834159851], + [-0.22942441701889038, 9.109819412231445], + [-4.813711166381836, -2.070007085800171], + [-4.163003444671631, 5.648423194885254], + [-7.705970287322998, -1.3941787481307983], + [-3.94588303565979, -2.4563190937042236], + [8.297258377075195, -2.3552558422088623], + [3.016310930252075, -4.649921417236328], + [-2.380783796310425, 1.4141043424606323], + [2.0529401302337646, -6.181234836578369], + [8.080965042114258, -2.123152494430542], + [2.2282989025115967, -7.656129360198975], + [-5.331060886383057, -2.7274694442749023], + [-2.3945090770721436, 0.7068981528282166], + [-5.005125522613525, 2.8107802867889404], + [-4.9332733154296875, -3.874089241027832], + [3.210566759109497, -4.969449996948242], + [-7.004385471343994, 8.525705337524414], + [-3.038670063018799, -4.905937194824219], + [5.7248687744140625, 7.340386867523193], + [-5.703080177307129, -5.349333763122559], + [-3.2055823802948, -2.706570625305176], + [-6.874070644378662, 8.774349212646484], + [-0.7923356294631958, -2.4616081714630127], + [-3.536389112472534, 5.942553520202637], + [-5.2439398765563965, -0.8224380612373352], + [-5.447836399078369, 4.418952941894531], + [-4.071605205535889, -1.968833327293396], + [-0.8582800626754761, -0.6532520055770874], + [1.070550560951233, -5.9564642906188965], + [-0.26961708068847656, 9.329408645629883], + [6.897978782653809, -1.6218936443328857], + [-8.068672180175781, -0.8773249387741089], + [-2.4570977687835693, 1.8565126657485962], + [10.078378677368164, -2.798778772354126], + [-4.161672115325928, -3.229767084121704], + [-0.29552847146987915, 9.889960289001465], + [1.8799012899398804, 5.463732719421387], + [-2.65277099609375, -0.6825031042098999], + [-2.779120445251465, -1.6889262199401855], + [-5.776321887969971, 1.9400500059127808], + [-2.474350690841675, 2.174099922180176], + [-1.2513200044631958, 2.6023199558258057], + [-5.813912391662598, 7.340216636657715], + [-5.4735493659973145, -4.334758758544922], + [-0.6154899001121521, -0.5523844957351685], + [-5.810971736907959, -1.2862106561660767], + [7.414501667022705, 8.636816024780273], + [-3.4856975078582764, -1.690415859222412], + [-4.61470365524292, -2.480623960494995], + [0.4961767792701721, -5.116269111633301], + [-5.165360450744629, 7.314225196838379], + [-3.5462069511413574, -0.4122128486633301], + [-3.828470230102539, -0.5403316020965576], + [3.232525110244751, -4.943713188171387], + [-0.21194803714752197, 10.177485466003418], + [2.418897867202759, 0.8236855268478394], + [-3.116556167602539, -0.9704914093017578], + [1.4069150686264038, 1.337541937828064], + [-2.415128231048584, 1.4398596286773682], + [-0.9919849634170532, -3.2007791996002197], + [-5.846506595611572, -1.8724626302719116], + [-5.127217769622803, 2.1510167121887207], + [2.0426738262176514, 5.469173431396484], + [2.132054090499878, -4.662895679473877], + [2.088451385498047, 5.630738258361816], + [-5.328420162200928, 0.779659628868103], + [-4.21771240234375, -3.661907911300659], + [-6.388076305389404, 7.29006290435791], + [1.7931770086288452, 0.4924408793449402], + [9.352350234985352, -2.6171839237213135], + [-2.8159866333007812, -2.0998759269714355], + [-5.55265474319458, 1.8408390283584595], + [-0.038941897451877594, -1.0880130529403687], + [1.7144091129302979, -5.451724052429199], + [-5.714441299438477, 8.060422897338867], + [5.583774089813232, -0.8957123160362244], + [-5.384792804718018, -3.4313955307006836], + [-5.87623405456543, -3.681018590927124], + [0.35975319147109985, 4.61507511138916], + [4.705318450927734, 6.782093048095703], + [-2.5238101482391357, -3.5551702976226807], + [2.1992695331573486, 4.978161811828613], + [8.778130531311035, -2.4440066814422607], + [-2.854285717010498, 0.7684887051582336], + [-3.9744646549224854, -1.6466764211654663], + [-5.844180583953857, 7.032376766204834], + [2.5968997478485107, -3.94793701171875], + [-6.205540180206299, -1.823032259941101], + [1.0100147724151611, 6.001154899597168], + [7.087400913238525, -2.009143114089966], + [2.7294628620147705, -4.931918144226074], + [3.042855739593506, -2.210794687271118], + [7.020145893096924, -3.0911738872528076], + [3.628545045852661, -5.9557037353515625], + [-5.806354999542236, -1.266793131828308], + [2.618556261062622, -5.220150947570801], + [-4.86193323135376, 7.259973526000977], + [-2.300196886062622, 1.36674964427948], + [-2.515766143798828, 1.7410115003585815], + [0.650211751461029, -1.1576176881790161], + [-5.112941741943359, 1.3231680393218994], + [-5.296523571014404, -4.2448883056640625], + [1.4308996200561523, 5.452826023101807], + [8.581954002380371, -2.3925840854644775], + [-2.271587371826172, 0.5013693571090698], + [-2.802959442138672, 1.9126497507095337], + [-5.337530612945557, -2.732356309890747], + [-2.815403699874878, -1.1869267225265503], + [1.2955965995788574, -6.014134407043457], + [3.1591665744781494, -4.725856781005859], + [2.0474774837493896, 5.92344856262207], + [-3.990373373031616, -2.3884689807891846], + [2.4715538024902344, -3.8047971725463867], + [-6.0079522132873535, -2.056931257247925], + [2.5322020053863525, -3.564505100250244], + [5.823869228363037, -1.0320308208465576], + [-1.2552359104156494, -0.03635582700371742], + [0.01658519357442856, -0.2492837905883789], + [8.767661094665527, -2.4135005474090576], + [-0.36497747898101807, -0.7770145535469055], + [-2.5611021518707275, 1.9934026002883911], + [-5.758290767669678, 6.759546279907227], + [-0.2579013705253601, 9.643484115600586], + [8.54124641418457, -2.5025107860565186], + [-2.1978421211242676, 1.2501918077468872], + [2.2383413314819336, -6.426711082458496], + [1.8704814910888672, -5.143810272216797], + [-0.5398145318031311, 8.873780250549316], + [1.659697413444519, 5.417489051818848], + [1.896728754043579, -8.900962829589844], + [2.2709383964538574, 5.218874931335449], + [-2.812044143676758, -4.694045066833496], + [-0.4601253867149353, 9.890060424804688], + [-6.847849369049072, 8.546623229980469], + [-0.27589350938796997, -0.86224365234375], + [3.1467578411102295, -4.8084821701049805], + [-0.1300964057445526, -0.8024795055389404], + [2.996610403060913, -4.643310546875], + [-8.433773040771484, -0.9592206478118896], + [-4.442982196807861, -2.5286951065063477], + [-0.2519407272338867, 9.742155075073242], + [-5.5064826011657715, 2.917628526687622], + [8.375630378723145, -2.4081244468688965], + [3.0152599811553955, -4.756658554077148], + [-0.3645896315574646, 10.040115356445312], + [-0.8303436040878296, 9.517694473266602], + [-1.963776707649231, 0.9854305982589722], + [6.3269524574279785, -1.3951280117034912], + [8.443549156188965, -2.2328221797943115], + [-6.010921001434326, 5.963986873626709], + [-4.3786940574646, -1.4522604942321777], + [2.545379400253296, -4.169515132904053], + [-3.8782756328582764, -4.808724403381348], + [-6.809676647186279, -2.411933183670044], + [-0.4236655831336975, -0.6787500381469727], + [-2.9647090435028076, 4.648648262023926], + [-3.5478720664978027, -2.7367286682128906], + [2.441159963607788, -4.119377613067627], + [-4.812805652618408, -3.7184360027313232], + [-0.40198564529418945, 9.937999725341797], + [8.348973274230957, -2.266810894012451], + [-2.317875385284424, 0.8466659188270569], + [8.2216796875, -2.6522459983825684], + [-0.38773053884506226, 11.196218490600586], + [-2.4031741619110107, -2.2018861770629883], + [-5.931422233581543, -2.0475528240203857], + [-0.32057636976242065, 9.319093704223633], + [3.169387102127075, -6.3543243408203125], + [-5.034694671630859, -2.692314624786377], + [3.1017532348632812, -4.666696548461914], + [6.358578205108643, -1.223272681236267], + [-0.44368475675582886, -0.47276589274406433], + [4.483321666717529, -6.088432312011719], + [4.667120456695557, -3.802900552749634], + [5.119949817657471, -4.180230140686035], + [2.608711004257202, -4.115569114685059], + [6.803696155548096, -1.8695658445358276], + [-6.895643711090088, 8.325861930847168], + [2.586474657058716, -4.572110176086426], + [-5.533858776092529, -1.8736120462417603], + [1.6097080707550049, -7.135239601135254], + [-2.947202682495117, 0.6071063876152039], + [1.8763864040374756, -4.521760940551758], + [-2.4358577728271484, 1.847916603088379], + [-5.2860798835754395, 7.180795669555664], + [-2.6730129718780518, -3.217730760574341], + [-5.295212745666504, -2.9019346237182617], + [-6.698103427886963, 8.194828033447266], + [-8.37143325805664, -0.5613447427749634], + [7.396710395812988, -4.785221099853516], + [7.633988857269287, -2.1178524494171143], + [4.236108303070068, 0.26423460245132446], + [3.6538045406341553, -5.22743558883667], + [-3.5741360187530518, -1.3232476711273193], + [-0.1597740650177002, 0.052713122218847275], + [2.435351848602295, -8.698596000671387], + [2.540635347366333, -3.767362594604492], + [-6.437060832977295, 5.942538261413574], + [-6.522489070892334, 8.271987915039062], + [-3.644573450088501, -4.460442066192627], + [2.878080129623413, 1.0508066415786743], + [0.850572407245636, -0.7087503671646118], + [-0.27152884006500244, 8.24928092956543], + [-3.9825055599212646, -0.27997899055480957], + [-5.659210205078125, -2.9820199012756348], + [-3.584230661392212, -3.435011148452759], + [-6.438751697540283, 2.8057641983032227], + [-7.100544452667236, -1.7206352949142456], + [-6.067233085632324, 7.12741231918335], + [2.621987819671631, -8.333740234375], + [3.1398367881774902, -4.5126423835754395], + [-3.154644727706909, 4.7107086181640625], + [3.089270830154419, -4.64183235168457], + [-3.2899672985076904, -3.9971606731414795], + [-4.361651420593262, -2.961840867996216], + [-2.196892499923706, 5.592419624328613], + [-3.0907623767852783, -4.730693817138672], + [-0.18571287393569946, 10.767803192138672], + [-2.604848623275757, -2.421152353286743], + [3.058954954147339, -3.7791450023651123], + [-6.435293674468994, 7.755578994750977], + [-4.292938709259033, 4.773135185241699], + [-5.865528106689453, -2.726346254348755], + [2.2376534938812256, 6.1948394775390625], + [2.719724655151367, -4.008333683013916], + [-2.07220196723938, 2.567606210708618], + [2.0635437965393066, 5.90152645111084], + [-5.226539134979248, -2.412689447402954], + [-3.546116352081299, -2.189380168914795], + [-3.653442144393921, -2.1837821006774902], + [-5.293120384216309, 1.1673234701156616], + [3.563307523727417, 5.6729583740234375], + [-6.467250347137451, 7.836886405944824], + [-4.456018924713135, -4.074598789215088], + [-4.7188897132873535, -4.47258996963501], + [-5.692951679229736, -2.9589641094207764], + [-0.2386685013771057, 9.311031341552734], + [3.6099321842193604, -3.3347976207733154], + [-2.1809003353118896, 0.8457409143447876], + [-6.9830169677734375, -1.5030311346054077], + [1.4534934759140015, -7.297880172729492], + [-3.3252193927764893, 6.109560966491699], + [-3.070108652114868, 3.0855801105499268], + [-0.5006394386291504, 10.76500129699707], + [0.4163118004798889, 9.571462631225586], + [5.796942234039307, -1.0801721811294556], + [-2.5164635181427, 6.052940368652344], + [-4.664019584655762, -3.0118091106414795], + [-5.399769306182861, 1.7735437154769897], + [-0.13210970163345337, 9.908841133117676], + [-3.6326711177825928, -2.554593324661255], + [-5.858152866363525, -2.5673251152038574], + [7.88805627822876, -3.2460219860076904], + [3.0465755462646484, -4.771775722503662], + [-5.8373799324035645, 3.225520372390747], + [-0.6088846921920776, 9.433292388916016], + [-2.5730597972869873, -0.12483823299407959], + [-6.747067928314209, 3.373417615890503], + [-5.667402744293213, -0.7861751914024353], + [-5.668059825897217, 6.93510627746582], + [-4.690255641937256, -2.708015203475952], + [-5.138269424438477, -4.5346527099609375], + [2.961663007736206, -4.7071123123168945], + [-5.080532550811768, -0.15415704250335693], + [2.1942169666290283, -7.959792137145996], + [-5.963499546051025, -2.930799722671509], + [0.36784765124320984, -5.198186874389648], + [-5.145576000213623, -1.2028253078460693], + [-3.5108935832977295, -3.393224000930786], + [-6.223881244659424, 5.27839994430542], + [-6.665104389190674, 7.929581642150879], + [8.113964080810547, -1.921862006187439], + [-5.239521503448486, 5.4852447509765625], + [4.700984477996826, 7.1546549797058105], + [-0.05990297347307205, 10.378358840942383], + [-1.179062008857727, 0.37275129556655884], + [-2.402754068374634, -0.34840506315231323], + [-2.7892019748687744, 2.9469079971313477], + [7.297824382781982, -2.4149718284606934], + [0.8508539199829102, -5.9842939376831055], + [-0.17213284969329834, 9.494452476501465], + [-5.23093843460083, 2.1163251399993896], + [5.625807285308838, -1.1808048486709595], + [-5.700649261474609, -2.0458199977874756], + [0.4042426347732544, -5.208240985870361], + [-5.625645160675049, 5.877312183380127], + [0.7501811385154724, -5.569563388824463], + [-2.4288296699523926, 1.4607298374176025], + [0.11282532662153244, 8.811827659606934], + [-5.090713024139404, -2.3166372776031494], + [-0.3645687699317932, 10.097267150878906], + [-5.787120342254639, -1.3347679376602173], + [2.360236406326294, 1.0778356790542603], + [-0.2766791582107544, 10.940059661865234], + [3.253441095352173, -5.133325576782227], + [3.9133224487304688, -3.686683177947998], + [-0.26140260696411133, 7.600435256958008], + [8.680462837219238, -2.4639506340026855], + [-5.058320999145508, -0.2359485626220703], + [-3.989082098007202, -2.158376932144165], + [-5.620115756988525, -2.4152719974517822], + [-4.429145336151123, 4.453049659729004], + [9.070351600646973, -2.5580031871795654], + [2.017163038253784, -7.224063396453857], + [-2.901794672012329, 6.751734733581543], + [3.140316963195801, -4.712855815887451], + [-6.456911563873291, 8.536828994750977], + [0.060630373656749725, 9.363832473754883], + [-3.5726068019866943, -2.3900225162506104], + [-2.2256813049316406, 0.1187703013420105], + [2.066896915435791, -5.867956161499023], + [-2.9846389293670654, 6.439021587371826], + [-1.4736742973327637, 1.9175618886947632], + [-1.929665207862854, 0.11590877175331116], + [-6.088878154754639, 7.982465744018555], + [9.72443962097168, -2.693838357925415], + [0.636624813079834, -6.552788257598877], + [-2.579442024230957, 2.0879764556884766], + [-3.03818941116333, 0.9513010382652283], + [1.7411682605743408, 2.393808603286743], + [-1.885855793952942, 2.4228789806365967], + [0.2169540524482727, 9.640483856201172], + [2.6587514877319336, -4.479825973510742], + [-4.491329193115234, -3.127568483352661], + [-0.7851327657699585, -2.708455801010132], + [2.9041149616241455, -4.818537712097168], + [-4.244218826293945, -1.6492201089859009], + [2.7733232975006104, -6.257327079772949], + [2.9188430309295654, -5.1519365310668945], + [-6.534034252166748, -0.8790205717086792], + [1.3930909633636475, -3.941596031188965], + [-5.192370891571045, -3.356309175491333], + [-2.470917224884033, 1.777673602104187], + [1.785080909729004, -5.116617679595947], + [5.069305896759033, 7.449737548828125], + [-5.544954776763916, 2.7664108276367188], + [-5.733588695526123, 3.8221323490142822], + [9.619889259338379, -2.6646649837493896], + [-0.760169506072998, 10.114270210266113], + [2.917585611343384, -4.731203079223633], + [-1.802524209022522, 5.753859043121338], + [-6.411564350128174, -1.7810320854187012], + [9.743234634399414, -2.8424222469329834], + [-5.845923900604248, 7.745809555053711], + [8.345658302307129, -2.2727138996124268], + [-8.048206329345703, -1.118648886680603], + [-5.284265518188477, -3.2828567028045654], + [-3.9885060787200928, 3.6245083808898926], + [-4.31013822555542, -4.167916297912598], + [8.985397338867188, -2.4017961025238037], + [-2.3602962493896484, 1.775241732597351], + [-3.169198513031006, -1.3987524509429932], + [-6.105849742889404, 6.736054420471191], + [-3.7538506984710693, -2.8479392528533936], + [2.853623390197754, -4.2821455001831055], + [-1.1586201190948486, -0.9278509616851807], + [3.0438106060028076, -4.764334678649902], + [9.23516845703125, -2.5927016735076904], + [-2.7016818523406982, -1.4966472387313843], + [-6.759626388549805, -2.1077723503112793], + [-0.2573557496070862, 10.279973030090332], + [7.668763637542725, -1.7562893629074097], + [-4.15008020401001, -1.3237842321395874], + [0.8059523701667786, -0.5360867977142334], + [2.3783440589904785, -5.709323883056641], + [-0.2458130121231079, 9.48965072631836], + [6.826199054718018, -1.660220980644226], + [2.9076850414276123, -4.786022663116455], + [-0.26496225595474243, 10.359633445739746], + [-0.08403492718935013, 9.838483810424805], + [7.818354606628418, -4.332880020141602], + [3.0778820514678955, -4.822237968444824], + [9.770731925964355, -2.7066333293914795], + [9.13620662689209, -2.4430739879608154], + [2.4164602756500244, -4.1411614418029785], + [-0.3314596712589264, -1.4178663492202759], + [-5.290895938873291, 3.1413633823394775], + [9.284126281738281, -2.621528148651123], + [-0.2898799777030945, 9.913869857788086], + [7.8055877685546875, -1.9562400579452515], + [-4.091953754425049, 5.277020454406738], + [-0.8812872767448425, 9.325456619262695], + [9.1477689743042, -2.558042526245117], + [-0.07871580868959427, -0.236053466796875], + [4.576232433319092, -2.274855136871338], + [-3.6240973472595215, -1.3151246309280396], + [5.853229999542236, -1.2884474992752075], + [-1.7881170511245728, 1.093369722366333], + [7.849617004394531, -3.076785087585449], + [6.536258220672607, -1.4138237237930298], + [1.242128610610962, -0.09475654363632202], + [-0.00516790896654129, 9.498502731323242], + [-1.8374829292297363, 1.1342451572418213], + [0.710914134979248, -6.259152889251709], + [-2.8132777214050293, -4.019321918487549], + [-4.386354446411133, -0.8711304068565369], + [-4.260766506195068, 0.28227877616882324], + [1.6639282703399658, -0.7008458971977234], + [3.0244054794311523, -4.504151344299316], + [-4.9359564781188965, -3.022277355194092], + [2.8074333667755127, -8.662038803100586], + [-3.804346799850464, -2.2645423412323], + [-2.071533679962158, 0.08396762609481812], + [-2.2562317848205566, 1.10221266746521], + [-5.82574987411499, 2.725400686264038], + [3.0981497764587402, -4.750201225280762], + [-5.519718647003174, -2.3528265953063965], + [5.7835259437561035, -3.954671859741211], + [-5.561428546905518, 2.526318073272705], + [-1.9022548198699951, 3.859525680541992], + [-4.528217792510986, -2.813730478286743], + [-5.36165189743042, -4.197772979736328], + [-2.7960045337677, 1.6450215578079224], + [5.6869893074035645, 7.661626815795898], + [1.9360315799713135, 4.349536895751953], + [2.3894870281219482, 6.117700576782227], + [-2.731374502182007, -3.7302744388580322], + [-4.898478031158447, -1.9933303594589233], + [-4.941494464874268, -3.2774465084075928], + [-6.785851955413818, 8.627429962158203], + [-4.76505184173584, -3.074578285217285], + [2.951380968093872, -4.452689170837402], + [2.4613029956817627, -4.913879871368408], + [-3.697704553604126, -2.4208695888519287], + [6.595329284667969, -1.4397543668746948], + [-2.469186544418335, -1.1883050203323364], + [6.255448818206787, -1.7828041315078735], + [5.488462448120117, -3.2887661457061768], + [1.3820393085479736, 5.679477691650391], + [7.875044345855713, -2.256795644760132], + [-3.6416218280792236, -2.190399408340454], + [-0.16290032863616943, 10.336235046386719], + [-5.064168453216553, 1.5367525815963745], + [-1.776625633239746, 2.3157565593719482], + [-0.9527146220207214, -1.604941964149475], + [0.6590002775192261, -5.795905113220215], + [-3.959984302520752, -1.9889050722122192], + [-5.322055816650391, -6.617486953735352], + [-4.298605918884277, 4.677213191986084], + [-2.3307738304138184, 1.876861333847046], + [2.2730772495269775, 3.276381731033325], + [8.498128890991211, -2.447411298751831], + [2.936210870742798, -4.962151050567627], + [-2.065073251724243, 4.262382984161377], + [-5.293706893920898, -2.2117321491241455], + [5.717185974121094, -1.3718661069869995], + [-6.705742359161377, 0.6306042671203613], + [-4.49904203414917, 0.6269351243972778], + [-0.8101690411567688, 1.2678136825561523], + [3.049224853515625, -4.5749664306640625], + [-7.746585369110107, -1.6834458112716675], + [-4.431207180023193, -2.7696449756622314], + [-5.589179515838623, -2.7241733074188232], + [4.047623157501221, -1.1002870798110962], + [-0.2656814455986023, 6.548553466796875], + [-0.21825963258743286, 9.551592826843262], + [-5.25585412979126, 6.446041584014893], + [-2.3082122802734375, 2.537221908569336], + [-5.069022178649902, 3.530611276626587], + [3.223937511444092, -4.867165565490723], + [-2.927518606185913, 2.9882471561431885], + [-2.0342354774475098, 2.6671245098114014], + [-0.8630144000053406, 4.7716827392578125], + [-6.488752841949463, -1.6163793802261353], + [1.6625018119812012, -8.446521759033203], + [-8.62478256225586, -0.12781310081481934], + [0.39967095851898193, -0.5726515054702759], + [-2.1307294368743896, 0.5180224180221558], + [-4.96927547454834, 6.49883508682251], + [5.396716594696045, -2.039646625518799], + [-4.958901882171631, -1.8874839544296265], + [-3.1123228073120117, -3.772738218307495], + [-7.252710819244385, 8.98081111907959], + [-4.041157245635986, -2.609055757522583], + [-3.608973979949951, 2.9522266387939453], + [-5.230748653411865, -2.495651960372925], + [-2.367107629776001, 2.3101842403411865], + [1.472360610961914, -4.513400554656982], + [-5.747828960418701, 1.1530123949050903], + [-1.009519338607788, 9.791879653930664], + [-2.0863096714019775, -2.777297258377075], + [3.0377132892608643, -4.673895835876465], + [-2.1173007488250732, 1.9946070909500122], + [-5.106862545013428, -2.7347218990325928], + [-3.5934574604034424, -2.471891164779663], + [-2.019643783569336, 2.686589002609253], + [3.3755366802215576, -5.380705833435059], + [-3.8895251750946045, -5.490545272827148], + [-2.001702308654785, 1.9665998220443726], + [2.7098705768585205, -4.236172676086426], + [-0.2805209159851074, 9.436810493469238], + [-2.574387311935425, -2.933067798614502], + [-7.3360915184021, 8.907938003540039], + [-2.394780158996582, 1.6758071184158325], + [1.910500168800354, -5.633073806762695], + [2.9736907482147217, -4.781238079071045], + [-6.806055068969727, -1.8457111120224], + [1.6560640335083008, 0.31630653142929077], + [5.900257587432861, -1.8561421632766724], + [-4.374007701873779, -2.182582378387451], + [-5.057657241821289, 5.792202949523926], + [-0.37095242738723755, 9.609542846679688], + [4.269430637359619, 6.867249011993408], + [-2.713209390640259, -3.2865092754364014], + [9.491262435913086, -2.7133123874664307], + [3.209087610244751, -4.8014702796936035], + [-2.837092161178589, -3.1674745082855225], + [-5.3437981605529785, -2.801182985305786], + [-5.585964202880859, 5.142567157745361], + [0.01563756912946701, 9.192045211791992], + [1.2979074716567993, -6.609684467315674], + [8.954924583435059, -2.5438406467437744], + [-6.507650375366211, 8.133368492126465], + [-4.492058753967285, -2.451659917831421], + [-5.717122554779053, -1.010398507118225], + [0.466907799243927, -2.6132795810699463], + [-6.517483234405518, 8.014522552490234], + [1.5048505067825317, -3.4822604656219482], + [5.48750638961792, -3.37890362739563], + [3.248929738998413, -5.097740650177002], + [0.9794072508811951, 0.480387806892395], + [9.277034759521484, -2.6988894939422607], + [-3.9117681980133057, -1.995725154876709], + [9.592062950134277, -2.6756768226623535], + [-2.0994694232940674, 0.5882412791252136], + [-3.710700750350952, 3.879748582839966], + [2.543997287750244, 6.525545597076416], + [-2.8359975814819336, 0.6224834322929382], + [-2.7387940883636475, -2.2150964736938477], + [1.6707773208618164, 0.6987869739532471], + [2.8304941654205322, 2.711848020553589], + [-4.661062240600586, -2.2939350605010986], + [-2.5159568786621094, 2.0042049884796143], + [-2.6052446365356445, 2.040667772293091], + [3.296936511993408, -3.512556791305542], + [-0.670536458492279, -1.0162941217422485], + [6.428467273712158, -1.1237741708755493], + [-2.675520896911621, -1.0918910503387451], + [-0.020711131393909454, -0.4565467834472656], + [-2.620347261428833, -3.4845821857452393], + [-5.993936061859131, 2.180511236190796], + [1.9704415798187256, 5.440548896789551], + [-6.623250484466553, 8.512859344482422], + [-3.2104361057281494, -0.9053946733474731], + [-1.5193641185760498, -2.3234972953796387], + [-4.218318462371826, -2.141094207763672], + [-2.000612735748291, 0.6992974281311035], + [3.105287551879883, -4.7659454345703125], + [-2.3211166858673096, 0.8161119222640991], + [2.631417989730835, 0.7839206457138062], + [-4.429305553436279, -4.056637763977051], + [6.539284706115723, -3.015411138534546], + [3.857553243637085, -5.518095016479492], + [-2.741142511367798, 1.8847368955612183], + [-4.123504161834717, -1.3637731075286865], + [-3.7197248935699463, -1.3499135971069336], + [2.7758772373199463, 6.226362228393555], + [-0.39377307891845703, 9.39578914642334], + [-4.553267002105713, 4.856886863708496], + [-3.7909843921661377, -2.5347414016723633], + [6.034216403961182, -2.0976617336273193], + [-2.4556572437286377, 1.7222827672958374], + [-5.662657260894775, 5.316517353057861], + [6.942224979400635, -2.4408257007598877], + [-0.2064799666404724, 9.526355743408203], + [2.2672312259674072, 3.712373971939087], + [2.597848653793335, -4.030642986297607], + [-0.2570597529411316, 9.797201156616211], + [-3.163787841796875, 5.60949182510376], + [-7.448404312133789, -1.2464720010757446], + [-0.6899047493934631, -3.5142433643341064], + [-3.540933847427368, -3.476982831954956], + [0.6871967911720276, 0.676303505897522], + [-4.308104991912842, -1.6985496282577515], + [7.155366897583008, -1.989072322845459], + [-4.815688133239746, 2.9955949783325195], + [-7.259067535400391, 8.831236839294434], + [-4.461470603942871, 4.557086944580078], + [-0.32592666149139404, 10.491291046142578], + [-0.027340836822986603, -0.7471100091934204], + [-3.0998079776763916, 3.813185691833496], + [8.037511825561523, -2.1319260597229004], + [2.8890438079833984, -4.924817085266113], + [-1.8985252380371094, 1.8853055238723755], + [9.813776969909668, -2.704254388809204], + [-5.445791721343994, -2.7298123836517334], + [-0.28048819303512573, 10.451333999633789], + [-1.0705171823501587, -1.2317390441894531], + [-1.2513262033462524, 9.105768203735352], + [-5.101036548614502, -2.6131818294525146], + [2.321070909500122, 4.685183048248291], + [-4.030472755432129, 7.744296073913574], + [-4.620970249176025, -2.9581143856048584], + [-2.4365999698638916, 2.648014545440674], + [-6.16717004776001, 7.969649314880371], + [-5.827260494232178, -3.582200288772583], + [2.876499891281128, -4.359148979187012], + [-5.062119960784912, -3.135300397872925], + [-0.30624476075172424, -0.6895667314529419], + [3.2758734226226807, -5.176905632019043], + [-2.3485476970672607, 1.0581250190734863], + [2.5257256031036377, -4.809159278869629], + [3.5379810333251953, 1.6732317209243774], + [-5.065463542938232, -2.5895092487335205], + [2.3128774166107178, 5.774127960205078], + [-0.6281175017356873, 12.019647598266602], + [-4.855488300323486, -3.1302926540374756], + [-3.8819000720977783, -2.5682382583618164], + [5.7296013832092285, -1.7418965101242065], + [-4.330250263214111, -3.63582181930542], + [0.2833954691886902, 10.027200698852539], + [8.888337135314941, -2.512911558151245], + [0.20861762762069702, -3.9819154739379883], + [6.843125820159912, -1.1967356204986572], + [0.5614696145057678, -5.589215278625488], + [2.8274176120758057, -7.005009651184082], + [0.8749349117279053, 5.647271156311035], + [-3.557835578918457, -2.715311288833618], + [-4.036502838134766, 6.533005714416504], + [3.075636148452759, -4.611029624938965], + [-5.287196636199951, -4.043608665466309], + [-2.4810588359832764, 1.9755183458328247], + [0.3606714606285095, 6.861664772033691], + [-0.30428892374038696, 10.208664894104004], + [1.30607008934021, 0.8196561336517334], + [8.766322135925293, -2.598740816116333], + [-6.8267903327941895, 8.40488052368164], + [-4.816306114196777, -3.424227476119995], + [-4.759121417999268, 2.010708808898926], + [-6.044596195220947, -1.508657693862915], + [-5.134453296661377, -2.252608060836792], + [-2.7698705196380615, 1.5402568578720093], + [-4.425467014312744, 5.05916690826416], + [-4.561382293701172, 3.8927695751190186], + [5.798299789428711, -1.2169841527938843], + [-5.980534076690674, 8.472984313964844], + [-7.2400360107421875, -2.6731655597686768], + [6.357072353363037, -5.864933967590332], + [-5.13620138168335, 0.5322629809379578], + [3.188520669937134, -4.767731189727783], + [-4.771258354187012, -4.69536018371582], + [-5.227755546569824, 6.657168388366699], + [0.6278955340385437, -6.696162223815918], + [-4.4714674949646, -1.8255280256271362], + [-4.731563091278076, -1.5573166608810425], + [0.8265635371208191, -5.56051778793335], + [2.8063642978668213, -4.516435623168945], + [-7.272758960723877, 8.834112167358398], + [-4.610016822814941, -4.055814266204834], + [-5.825303077697754, 7.3197855949401855], + [-3.5565896034240723, -3.1273484230041504], + [1.6626167297363281, 5.574204444885254], + [-4.221886157989502, 4.526324272155762], + [-2.274073839187622, 0.9656764268875122], + [9.780543327331543, -2.761162042617798], + [-4.23278284072876, 3.5155279636383057], + [-4.636390209197998, -1.0379053354263306], + [2.7192184925079346, -5.330208778381348], + [-6.067507266998291, -2.1802613735198975], + [-3.474302053451538, 4.8910813331604], + [-0.41563189029693604, -4.024777412414551], + [2.0704681873321533, -10.190971374511719], + [-5.079033374786377, -1.3748877048492432], + [-4.009562969207764, 7.24001932144165], + [-3.9856133460998535, -3.4118893146514893], + [-0.22725838422775269, 9.979303359985352], + [-0.3398851752281189, 9.811126708984375], + [-2.7964017391204834, -4.641544342041016], + [-5.74770450592041, -2.1326189041137695], + [2.4799606800079346, 0.9384812116622925], + [1.583756685256958, 1.2286981344223022], + [-5.20789098739624, -2.9179346561431885], + [-5.675023078918457, -0.060582879930734634], + [-5.159996509552002, 6.366354465484619], + [-5.197933673858643, -3.9776530265808105], + [-2.3310725688934326, 0.1621881127357483], + [-0.2117546796798706, 10.189495086669922], + [-4.5584235191345215, -2.8935234546661377], + [3.3896501064300537, -0.0023690052330493927], + [-4.292349338531494, -2.2986762523651123], + [8.556535720825195, -2.577653169631958], + [3.680302381515503, 6.647244453430176], + [-4.835741996765137, -4.218667507171631], + [7.176903247833252, -4.7183661460876465], + [-0.33611029386520386, -1.5772396326065063], + [5.219070911407471, -1.374302864074707], + [-2.372272253036499, 0.8853085041046143], + [-0.34738481044769287, 10.007070541381836], + [-2.138533592224121, 0.17469578981399536], + [2.1041600704193115, 1.0201250314712524], + [-0.4361855387687683, -0.8092639446258545], + [0.6415730714797974, -6.027766227722168], + [2.335689067840576, -4.092220783233643], + [0.43223708868026733, 5.452157974243164], + [-5.9994282722473145, 8.107017517089844], + [-6.431883335113525, -1.6178616285324097], + [2.068669557571411, 0.9872392416000366], + [-3.528728723526001, 3.6292836666107178], + [-2.3577802181243896, 1.4703457355499268], + [1.2372493743896484, -7.845191955566406], + [-6.441967487335205, 7.942545413970947], + [-0.06892705708742142, 8.574625015258789], + [6.036451816558838, 7.556915760040283], + [-2.6950483322143555, -4.585709571838379], + [4.703209400177002, -1.0947461128234863], + [-4.787745475769043, -2.4290289878845215], + [1.9925611019134521, -4.339413642883301], + [-5.904530048370361, -1.306605577468872], + [8.903680801391602, -2.47546648979187], + [-5.5320563316345215, 5.072213649749756], + [-3.670837879180908, -2.3173742294311523], + [-2.4374139308929443, -2.40401291847229], + [-5.083755016326904, 1.6721913814544678], + [-0.3998420536518097, 6.538450241088867], + [-6.195009231567383, 6.806764602661133], + [1.527010202407837, -7.9881463050842285], + [-0.22876808047294617, 8.552181243896484], + [4.763319492340088, -1.232359766960144], + [1.4650859832763672, -2.8268885612487793], + [-4.479221343994141, 6.45448112487793], + [9.845032691955566, -2.7279365062713623], + [-6.884426593780518, 8.823474884033203], + [-3.5199997425079346, -2.3797121047973633], + [-6.165280342102051, 8.179476737976074], + [-4.400759220123291, -1.8898999691009521], + [-4.232551574707031, -2.4228339195251465], + [-6.097826957702637, 4.966887474060059], + [4.494223117828369, -3.7479472160339355], + [-4.387709140777588, 7.415216445922852], + [-4.578713417053223, -1.5277043581008911], + [-4.673056602478027, -2.660330057144165], + [2.631880760192871, -4.228239059448242], + [9.264251708984375, -2.6442272663116455], + [1.787497639656067, -2.848846197128296], + [-4.894503593444824, -4.37859582901001], + [1.8441004753112793, -3.519986152648926], + [-0.7222989201545715, 8.940140724182129], + [3.3372366428375244, -5.363961219787598], + [-0.536576509475708, -1.4751824140548706], + [-2.0001332759857178, 5.73975944519043], + [-4.114044666290283, 4.900326251983643], + [-0.396419495344162, -0.834843635559082], + [-6.271622180938721, 8.467033386230469], + [-0.42369621992111206, 9.803902626037598], + [-0.08179879933595657, 10.146016120910645], + [-5.397914886474609, 0.2170584499835968], + [1.6297380924224854, 5.047887802124023], + [2.9100677967071533, -3.3795111179351807], + [-2.515852212905884, -4.205582618713379], + [0.23261216282844543, -0.4657517671585083], + [-0.18931365013122559, -1.4110990762710571], + [-5.1037516593933105, -4.5938310623168945], + [2.153714895248413, -8.17788314819336], + [3.0135512351989746, -4.75301456451416], + [1.8370361328125, 0.7705959677696228], + [-4.662502288818359, 0.3423449993133545], + [2.106515645980835, 5.385780334472656], + [1.070361614227295, 1.854066252708435], + [7.962172985076904, -1.9263826608657837], + [1.2089844942092896, 4.93304443359375], + [-0.5246538519859314, 10.349831581115723], + [-4.853721618652344, 6.552352428436279], + [-5.060206890106201, -4.682567596435547], + [9.230915069580078, -2.561167001724243], + [1.9827919006347656, -6.924369812011719], + [5.0199809074401855, -1.1209139823913574], + [-3.353736400604248, 3.3703324794769287], + [1.8820714950561523, -5.052430629730225], + [2.342862606048584, -3.086081027984619], + [-3.4334089756011963, -1.7536977529525757], + [6.1971354484558105, -1.4610466957092285], + [1.844591498374939, 5.39598274230957], + [2.0771374702453613, 5.7119059562683105], + [-3.3982765674591064, -1.3720505237579346], + [-5.228240966796875, -3.475855588912964], + [-4.880902290344238, 7.399966239929199], + [8.229475975036621, -2.414806604385376], + [-2.745063304901123, -0.11790335178375244], + [2.5384514331817627, -4.211770057678223], + [3.0633292198181152, 6.320550918579102], + [7.451510429382324, -2.25666880607605], + [-0.5183286666870117, 11.25940227508545], + [-2.1074254512786865, -0.9756995439529419], + [2.4366514682769775, 6.153862476348877], + [2.4692842960357666, -8.98293685913086], + [5.482408046722412, -0.585885226726532], + [-6.696557998657227, -1.5834447145462036], + [-4.438063144683838, -3.073650360107422], + [-6.928094387054443, -1.520689845085144], + [-0.04996652156114578, -1.482404351234436], + [-4.884998321533203, -2.29134202003479], + [-6.023788928985596, 2.255709648132324], + [-5.6110076904296875, 7.907541275024414], + [4.854626178741455, -2.2237441539764404], + [0.8281756043434143, -1.8384122848510742], + [-0.3276755213737488, 10.696216583251953], + [-6.214107036590576, 5.2216644287109375], + [-5.502387523651123, 6.864786624908447], + [2.8446919918060303, 5.398312568664551], + [-0.44402462244033813, 10.754166603088379], + [-5.56082010269165, -2.246492624282837], + [3.109198808670044, -4.672852516174316], + [2.8117763996124268, -4.497550964355469], + [-3.5032360553741455, -3.392204761505127], + [6.612964153289795, 7.91291618347168], + [-2.468820095062256, 2.4163172245025635], + [-2.2790675163269043, 1.314717411994934], + [1.6672568321228027, 4.351165771484375], + [-2.2041687965393066, 2.2952451705932617], + [0.054639868438243866, -2.1347849369049072], + [-4.723226547241211, -2.198920726776123], + [1.5557551383972168, -0.2298840582370758], + [-3.531210422515869, 6.835882186889648], + [1.9127330780029297, 5.154172420501709], + [2.0255637168884277, 1.0378196239471436], + [-2.6128623485565186, 2.0343408584594727], + [-0.5435266494750977, -0.40296614170074463], + [-3.407944917678833, -1.8540388345718384], + [-6.0870747566223145, 1.4536267518997192], + [-4.6978936195373535, -0.2806488871574402], + [1.776789665222168, 0.9676305055618286], + [-4.648064613342285, 8.877288818359375], + [-7.828431129455566, -0.829230546951294], + [-1.137619972229004, -0.8255283832550049], + [6.4083638191223145, -5.438630104064941], + [5.141476154327393, -1.3712130784988403], + [-5.095999240875244, -2.781397581100464], + [-0.15523535013198853, 9.942960739135742], + [5.118913173675537, -1.2242666482925415], + [-4.2635884284973145, -5.2752556800842285], + [-4.540937900543213, 1.1177364587783813], + [-2.833545446395874, -2.4974923133850098], + [-6.058482646942139, 6.933698654174805], + [-5.889499664306641, 2.543041706085205], + [-4.059048652648926, 5.6717634201049805], + [7.108451843261719, -1.8056961297988892], + [0.8414676785469055, -6.1769866943359375], + [-5.876851558685303, 6.032919883728027], + [-4.891242504119873, -2.694899559020996], + [-3.691746473312378, -4.7343430519104], + [-3.8579723834991455, 5.3460516929626465], + [2.13531756401062, -4.205726623535156], + [9.497627258300781, -2.473280906677246], + [-4.179846286773682, 0.869930624961853], + [-6.914731502532959, -1.9541503190994263], + [4.947787284851074, -2.945765256881714], + [2.761641025543213, -4.298681259155273], + [4.6415910720825195, -1.0721566677093506], + [6.842653751373291, -1.57680344581604], + [-8.08771800994873, -1.7171982526779175], + [-6.98625373840332, -1.4573869705200195], + [-5.138146877288818, 6.189438819885254], + [-5.107508182525635, 3.9413514137268066], + [-5.430840969085693, 2.2497944831848145], + [7.564554214477539, -2.3757474422454834], + [-2.166508436203003, 2.799544095993042], + [1.810315728187561, 5.038007736206055], + [2.838524580001831, -4.535804748535156], + [-0.09389925748109818, 9.506290435791016], + [2.9564692974090576, -4.443711280822754], + [8.479344367980957, -2.3679559230804443], + [6.461184501647949, -1.35890531539917], + [-5.96978235244751, 2.228632926940918], + [4.360057353973389, -0.9571849703788757], + [-2.6239469051361084, 2.2017195224761963], + [-8.405879974365234, -0.6248258352279663], + [-4.501047611236572, 4.75099515914917], + [6.306576728820801, -3.8849880695343018], + [1.712828516960144, 0.3537403643131256], + [-3.003891706466675, -2.2371599674224854], + [-4.965591907501221, -2.9089081287384033], + [8.556960105895996, -2.3063340187072754], + [0.11030983179807663, -0.7571926116943359], + [-2.795158624649048, 1.3371034860610962], + [-3.451841115951538, 5.42289400100708], + [5.9177703857421875, 7.703248023986816], + [1.5960800647735596, -8.396279335021973], + [-0.27412718534469604, 9.41605281829834], + [-5.397119045257568, 2.879798173904419], + [-0.2045118808746338, 10.352460861206055], + [3.4900686740875244, 6.055610656738281], + [-2.759869337081909, 2.5718367099761963], + [-5.7125935554504395, -4.0850019454956055], + [-3.771733283996582, -5.620474338531494], + [-0.6915541291236877, 2.4227707386016846], + [-6.5624518394470215, 1.7781686782836914], + [8.14357852935791, -3.1809163093566895], + [-7.099617958068848, 8.269998550415039], + [1.7651588916778564, -7.156536102294922], + [1.016005516052246, -0.12273795902729034], + [-6.836642742156982, 1.6333913803100586], + [-7.5392889976501465, 9.178213119506836], + [7.288430213928223, -1.3996962308883667], + [-5.1382598876953125, 4.833273887634277], + [-0.9697207808494568, 8.657027244567871], + [2.53334641456604, -6.191004753112793], + [1.2242023944854736, -5.691654205322266], + [2.5752999782562256, 0.7035258412361145], + [-3.7312698364257812, -2.8836705684661865], + [-3.780407428741455, -3.4525513648986816], + [8.650969505310059, -2.6046388149261475], + [0.07917577773332596, -1.175221562385559], + [2.961426019668579, -4.453266143798828], + [7.3261003494262695, -2.0835957527160645], + [-4.818158149719238, -2.966000556945801], + [-4.166495323181152, 4.402284622192383], + [7.335076808929443, -1.8842183351516724], + [-0.35964614152908325, 11.161022186279297], + [-7.035240650177002, 8.395768165588379], + [2.0685806274414062, 5.9269304275512695], + [-0.30329763889312744, -1.0972388982772827], + [2.475590467453003, -3.748422384262085], + [-6.019735813140869, 0.3753618597984314], + [-5.103139400482178, 3.0971548557281494], + [3.3579938411712646, -5.341816425323486], + [9.359259605407715, -2.5989606380462646], + [-8.677556037902832, -1.0638279914855957], + [-0.009660370647907257, 8.376890182495117], + [5.274315357208252, -2.2986416816711426], + [2.129411458969116, 5.8650665283203125], + [-4.007867813110352, -2.0378034114837646], + [2.4352471828460693, -3.5722415447235107], + [-6.098101615905762, 7.780389785766602], + [-5.08117151260376, 0.8268221616744995], + [-5.8132100105285645, 2.304424524307251], + [-4.412086486816406, -3.9807887077331543], + [2.3759593963623047, 1.0209931135177612], + [1.899198055267334, 5.4979400634765625], + [-5.561723709106445, 7.148069381713867], + [-0.16818669438362122, -0.7243550419807434], + [-6.402205944061279, -1.9604544639587402], + [2.1064422130584717, -0.7414296865463257], + [-6.053867816925049, 3.193138360977173], + [5.6011061668396, 7.381045341491699], + [3.0029489994049072, -4.616512298583984], + [-3.884279489517212, -4.586335182189941], + [0.421172559261322, -0.8376703858375549], + [0.6092768907546997, -6.106998443603516], + [-2.0515549182891846, 2.9138495922088623], + [-0.30380260944366455, 9.365562438964844], + [-4.762627601623535, -1.8304284811019897], + [-0.1867004632949829, -1.2227041721343994], + [-5.350698947906494, -3.398280382156372], + [9.368128776550293, -2.5944159030914307], + [-4.968440055847168, 1.9964390993118286], + [2.979701042175293, -4.479058265686035], + [-0.886846661567688, 8.490091323852539], + [1.4492772817611694, 5.071255683898926], + [9.538561820983887, -2.7718374729156494], + [-0.380769819021225, -1.010759949684143], + [-2.9026012420654297, 2.1227753162384033], + [-4.529268264770508, 1.6731163263320923], + [-6.319736003875732, -2.4641337394714355], + [2.395266532897949, 0.43824800848960876], + [7.823718547821045, -1.976118803024292], + [-2.305746078491211, 3.2152843475341797], + [1.4608676433563232, -5.431096076965332], + [-1.419700264930725, 0.8701469898223877], + [7.915578842163086, -2.784209966659546], + [-5.386899948120117, -1.2180274724960327], + [-3.754155397415161, 4.251605033874512], + [-0.9686045050621033, 8.986021041870117], + [-2.9085588455200195, 1.6529561281204224], + [8.441861152648926, -2.6920716762542725], + [-3.1205384731292725, -3.5210580825805664], + [2.9953010082244873, -4.498535633087158], + [7.987255573272705, -2.0619449615478516], + [-2.1706125736236572, 2.4649951457977295], + [-3.6864593029022217, -1.3181430101394653], + [-5.323071002960205, 1.51870858669281], + [5.863598823547363, -2.9194180965423584], + [5.680790424346924, -1.0312577486038208], + [-2.3540937900543213, 1.6783201694488525], + [-5.6684393882751465, 6.384909629821777], + [1.0511198043823242, 0.6514318585395813], + [-5.079702377319336, 8.073514938354492], + [-2.2628512382507324, 2.6717686653137207], + [2.8331618309020996, -4.964144706726074], + [5.8991169929504395, -1.159552812576294], + [2.90563702583313, -4.469412326812744], + [-0.005422480404376984, 10.111806869506836], + [2.574613332748413, -6.1368608474731445], + [-4.611148357391357, 5.529020309448242], + [-5.202930927276611, 2.433854579925537], + [0.004719965159893036, 8.56727123260498], + [8.855090141296387, -2.596158266067505], + [6.627155303955078, -1.4772084951400757], + [1.324018955230713, -7.161502838134766], + [0.4169843792915344, 7.433103084564209], + [-0.2192220389842987, -1.6407548189163208], + [-4.717767238616943, -2.9302313327789307], + [2.3524692058563232, 5.884268760681152], + [5.238177299499512, -3.811009645462036], + [-2.0145254135131836, 2.0294177532196045], + [-4.239974498748779, 6.475425720214844], + [-4.75236177444458, 1.5190008878707886], + [-5.327395915985107, 7.088615894317627], + [-0.304696649312973, -1.389837622642517], + [0.8940709233283997, -5.750053405761719], + [-0.4277656078338623, -1.0012569427490234], + [-5.541188716888428, -4.821667671203613], + [-5.001391410827637, 2.30010724067688], + [-2.3807413578033447, 1.157799482345581], + [-3.4337780475616455, 5.269299507141113], + [-2.4766950607299805, 1.7714465856552124], + [0.6217289566993713, 4.018495082855225], + [-5.33409309387207, 8.484630584716797], + [-0.8260365128517151, -0.7419241070747375], + [6.324368953704834, -3.8511714935302734], + [-4.4206862449646, -1.5795257091522217], + [0.7555211186408997, 9.637043952941895], + [-3.7237675189971924, 3.7603399753570557], + [-4.621614456176758, -3.584765672683716], + [-4.37736701965332, -2.79817271232605], + [-5.102710247039795, -4.203505039215088], + [-2.9493215084075928, 0.6794854402542114], + [7.355122089385986, -2.5258476734161377], + [1.396837830543518, -6.460668563842773], + [-2.033715009689331, 2.222695827484131], + [2.6893420219421387, -4.202591896057129], + [-4.79813814163208, -3.302680730819702], + [7.3237504959106445, -1.7512602806091309], + [-2.7344043254852295, -3.2998437881469727], + [3.0012543201446533, -4.507656097412109], + [-4.119235038757324, -2.3973987102508545], + [-3.623901605606079, 6.098316192626953], + [-5.555481433868408, -2.2426095008850098], + [-2.33050274848938, 1.8229624032974243], + [7.151199817657471, -1.7517999410629272], + [2.3467745780944824, -4.1989288330078125], + [-0.4855780005455017, 10.406047821044922], + [-0.05944604426622391, 1.0010255575180054], + [2.3646459579467773, 0.6431248784065247], + [2.979987859725952, -4.629884243011475], + [9.389786720275879, -2.5935394763946533], + [-4.738908767700195, -2.7047312259674072], + [-1.3800277709960938, 0.819757342338562], + [1.1399593353271484, -3.2858126163482666], + [-4.685367107391357, 3.453606128692627], + [1.8743531703948975, -7.7035017013549805], + [1.089255452156067, 0.6304715871810913], + [1.3868680000305176, -6.902667045593262], + [0.33914583921432495, 9.61494255065918], + [-5.025725364685059, 5.014021873474121], + [1.4551228284835815, -4.426707744598389], + [2.7160632610321045, -4.63827657699585], + [-5.408697605133057, -3.8526968955993652], + [-5.150588035583496, -3.6230857372283936], + [-3.3720791339874268, -1.504136323928833], + [8.681098937988281, -2.369525194168091], + [2.562695026397705, -4.168543815612793], + [-4.524287700653076, -0.802052915096283], + [-2.1577861309051514, 1.5902613401412964], + [10.127193450927734, -2.7751476764678955], + [-0.6562437415122986, 9.693342208862305], + [-3.852405548095703, -4.722512245178223], + [-4.106864929199219, -1.6763899326324463], + [9.732417106628418, -2.6974592208862305], + [2.9389731884002686, -4.675896644592285], + [-2.41743540763855, 1.646818995475769], + [0.20854038000106812, -1.1341451406478882], + [2.219007730484009, -6.521600723266602], + [9.529813766479492, -2.6745126247406006], + [3.4245758056640625, -5.530888080596924], + [3.153226852416992, -5.098484992980957], + [-3.47827410697937, -3.5431463718414307], + [9.007962226867676, -2.5417561531066895], + [-5.14794921875, 3.917808771133423], + [-0.32025057077407837, -0.7149232625961304], + [1.6040815114974976, -1.932546854019165], + [3.016598701477051, -4.600491523742676], + [-0.4343084692955017, 10.106832504272461], + [8.577570915222168, -2.310188055038452], + [-0.14362895488739014, 9.379048347473145], + [2.9975664615631104, -4.072359561920166], + [-5.133150577545166, -2.4931766986846924], + [-2.270031690597534, 0.4056702256202698], + [4.371135234832764, 7.107487678527832], + [-4.835284233093262, 2.8066775798797607], + [-2.6577885150909424, 4.085392951965332], + [-6.166013717651367, -0.9777294993400574], + [-2.459399461746216, 2.335373878479004], + [0.12459927052259445, -4.192347526550293], + [-4.514298439025879, -3.555790901184082], + [-3.8422229290008545, -2.6214077472686768], + [3.202756404876709, -5.025721549987793], + [2.8485429286956787, -4.333233833312988], + [2.6945412158966064, -4.124037742614746], + [-3.429060220718384, -2.609623670578003], + [7.551320552825928, -1.7682000398635864], + [5.738305568695068, 7.994222640991211], + [-0.5563267469406128, -0.7630336284637451], + [-2.3097856044769287, 2.621427536010742], + [-6.513786792755127, 7.707082271575928], + [-4.0996270179748535, -3.2864067554473877], + [-2.5380382537841797, 2.0448760986328125], + [-1.5604383945465088, 6.028961181640625], + [-2.457702875137329, 1.9291759729385376], + [0.2082591950893402, 7.7762250900268555], + [-1.9698649644851685, 0.8577976226806641], + [-5.169366359710693, -2.235581398010254], + [-5.242276668548584, 3.005855083465576], + [2.937467575073242, -4.688329219818115], + [-5.7916107177734375, 6.598917007446289], + [3.552511692047119, 6.991270065307617], + [2.4056029319763184, 5.679611682891846], + [-2.3316056728363037, 1.54696786403656], + [-2.3160383701324463, -2.2337286472320557], + [-4.992377758026123, -3.1291537284851074], + [8.901518821716309, -2.3735554218292236], + [-2.2264041900634766, 0.37137091159820557], + [-2.6661980152130127, -1.177549123764038], + [-4.53825044631958, 3.486896276473999], + [2.3486998081207275, -5.036419868469238], + [-0.16973286867141724, 9.86960220336914], + [0.9806912541389465, 5.530977249145508], + [-5.491356372833252, 0.944246768951416], + [-4.544445514678955, -0.22546207904815674], + [6.298535346984863, -1.554207444190979], + [2.6688125133514404, -7.805294990539551], + [-0.26488810777664185, 9.744909286499023], + [-3.5551488399505615, 4.735193252563477], + [-4.398520469665527, -2.4049484729766846], + [0.9028767943382263, 0.28615519404411316], + [2.113980293273926, 0.652395486831665], + [-4.445704460144043, -3.095045328140259], + [-4.310690879821777, 6.151425361633301], + [9.720416069030762, -2.7452428340911865], + [3.187755823135376, -5.100481986999512], + [-3.656644582748413, 2.4538328647613525], + [-5.75498628616333, 8.484306335449219], + [-5.856368541717529, 6.8866658210754395], + [10.020764350891113, -2.7860891819000244], + [-2.2813913822174072, 1.6712348461151123], + [3.455336570739746, 5.777068138122559], + [-2.4442641735076904, 1.1411373615264893], + [-2.1674702167510986, 0.9001115560531616], + [-0.11110622435808182, 9.581348419189453], + [4.430666446685791, 0.40473371744155884], + [-4.346833229064941, -2.3277053833007812], + [-5.154710292816162, 3.1762073040008545], + [-1.365166425704956, 8.428930282592773], + [10.273353576660156, -2.8858840465545654], + [0.4254058003425598, -5.344005107879639], + [-7.242959499359131, 1.603740930557251], + [-4.757388591766357, -2.7844579219818115], + [-0.4849713444709778, 9.426660537719727], + [-3.4248311519622803, -4.835964202880859], + [4.207915782928467, 7.049460411071777], + [1.429727554321289, 5.192264080047607], + [-3.2785484790802, -2.6684072017669678], + [-6.208662033081055, 7.756292343139648], + [1.937103033065796, 5.368641376495361], + [2.9081921577453613, -4.379743576049805], + [3.262859344482422, -4.960002899169922], + [7.402307033538818, -3.297074317932129], + [-5.061178684234619, -0.8000574111938477], + [1.2399048805236816, 3.3835103511810303], + [5.422545909881592, -1.0613120794296265], + [2.372063398361206, -8.247838973999023], + [-2.3889904022216797, 1.6525001525878906], + [-5.1748480796813965, -3.9557547569274902], + [2.7236080169677734, -4.181611061096191], + [1.799582600593567, 0.6768921613693237], + [-0.40286070108413696, 8.936349868774414], + [-4.84943151473999, -3.1604535579681396], + [2.7830424308776855, -4.517606735229492], + [-0.2995051145553589, 10.337568283081055], + [-4.001128673553467, 6.577125072479248], + [-0.7571812272071838, -0.6305080652236938], + [-4.8819098472595215, -3.88439679145813], + [1.8072669506072998, -6.5371246337890625], + [-5.181220054626465, 2.6468570232391357], + [7.407214164733887, -4.401408672332764], + [9.135476112365723, -2.5249319076538086], + [-4.562855243682861, -3.8597466945648193], + [-0.13295254111289978, -1.591386318206787], + [2.817387342453003, -4.256294250488281], + [-3.822558641433716, 4.179913520812988], + [-1.1665762662887573, 9.723175048828125], + [5.824978351593018, -3.115701675415039], + [2.7125728130340576, -7.638257026672363], + [-5.954378604888916, 7.13202428817749], + [-5.0701518058776855, 4.070603370666504], + [1.78350830078125, -3.3702449798583984], + [0.5590872764587402, 0.3912457227706909], + [5.397133827209473, -0.4227971136569977], + [2.193697214126587, -5.305822372436523], + [-3.4917044639587402, 3.5071470737457275], + [8.501092910766602, -2.3044557571411133], + [2.872400999069214, -4.584146499633789], + [-2.4915082454681396, 1.9771133661270142], + [5.234445095062256, -1.1975996494293213], + [2.062670946121216, 5.984779357910156], + [-0.37037116289138794, -0.43070152401924133], + [6.663464069366455, -1.5868247747421265], + [-4.274313449859619, 5.068757057189941], + [-4.650686264038086, 4.754939079284668], + [9.777981758117676, -2.7070672512054443], + [-3.131288528442383, -1.662866234779358], + [2.280219316482544, 5.890626907348633], + [-2.180056095123291, -0.45052602887153625], + [-3.518742322921753, -2.1828951835632324], + [-0.26699066162109375, 9.485270500183105], + [-0.20878463983535767, 9.621140480041504], + [1.3853918313980103, 0.7934666872024536], + [-5.610357284545898, 7.877133369445801], + [0.8719555735588074, -0.25725942850112915], + [1.985755443572998, -7.746580123901367], + [4.061990737915039, 6.777401924133301], + [2.989877939224243, -4.490969181060791], + [-3.0033457279205322, -2.0052568912506104], + [-3.280102252960205, -3.674936532974243], + [-6.044318675994873, 3.15929913520813], + [-0.5828731656074524, -1.1488028764724731], + [6.348774433135986, -3.7297117710113525], + [-1.5692863464355469, 0.2698552906513214], + [-2.6445839405059814, -0.5879634618759155], + [-4.6335883140563965, 5.778608322143555], + [1.305757761001587, -6.381427764892578], + [-6.7273478507995605, 4.011728286743164], + [-4.660128116607666, -3.703704595565796], + [3.2053167819976807, -4.797128677368164], + [-4.7419657707214355, 0.5900379419326782], + [2.938234567642212, -4.514871597290039], + [0.8019806742668152, -0.3886222839355469], + [-2.4782238006591797, 1.9110840559005737], + [-1.9901806116104126, 0.7386059165000916], + [-4.062439918518066, -2.3122243881225586], + [-3.2744100093841553, -2.2598156929016113], + [3.128652811050415, -4.68256950378418], + [-0.007764287292957306, 9.950773239135742], + [-4.381689071655273, -3.274553060531616], + [-4.291919231414795, -2.639162302017212], + [9.224520683288574, -2.5880916118621826], + [-3.9624667167663574, 4.228785991668701], + [3.0453779697418213, -5.4306416511535645], + [8.40859317779541, -2.4906527996063232], + [-5.460682392120361, -0.6062749028205872], + [-5.020174980163574, 3.4538698196411133], + [3.2789361476898193, -4.9284987449646], + [-0.17424601316452026, 9.614433288574219], + [6.891811847686768, -1.7936903238296509], + [-6.913081169128418, 8.86632251739502], + [2.760443925857544, -7.248598575592041], + [-6.858949661254883, 6.375576496124268], + [-0.24683064222335815, 10.05875015258789], + [-4.7497944831848145, 7.714285850524902], + [-6.532039165496826, -2.14399790763855], + [-3.6071865558624268, -3.580853223800659], + [2.7708616256713867, 1.3453716039657593], + [0.03719223290681839, -0.9887889623641968], + [-4.282796859741211, 4.640223979949951], + [0.6508874893188477, -6.613480091094971], + [5.3952178955078125, -2.7641680240631104], + [-2.0484297275543213, 2.081573247909546], + [1.784949541091919, -8.555062294006348], + [-2.8722517490386963, 2.863750696182251], + [-6.21576452255249, 7.393763065338135], + [-7.314846515655518, -2.1378161907196045], + [-3.5195045471191406, 0.9941948652267456], + [-2.4418869018554688, 1.1127744913101196], + [-2.2097537517547607, 0.8188658356666565], + [-4.1909499168396, 5.928221225738525], + [-3.8863370418548584, -3.3931901454925537], + [-4.012277603149414, 6.369438171386719], + [-7.089582920074463, -0.4418679475784302], + [-2.6772620677948, -2.3174681663513184], + [-4.119480609893799, -4.392593860626221], + [-4.542223930358887, 6.432660102844238], + [6.179362773895264, -3.8650972843170166], + [-0.665920078754425, 7.746121406555176], + [1.2162866592407227, -6.913658618927002], + [-2.390984058380127, 1.8233181238174438], + [-3.1876490116119385, -1.0431480407714844], + [-0.3786051273345947, 8.752449035644531], + [1.9385244846343994, 5.627425193786621], + [-5.058926105499268, -4.2599334716796875], + [2.690027952194214, -5.524968147277832], + [-3.533555746078491, 3.7534048557281494], + [-3.6810495853424072, 3.9271647930145264], + [-5.015737533569336, 2.224605083465576], + [-3.6568689346313477, 6.045680999755859], + [-0.4101378321647644, 9.201075553894043], + [2.856698989868164, -4.335610389709473], + [-5.4290995597839355, -3.5795514583587646], + [8.785733222961426, -2.4484574794769287], + [-4.290428161621094, -2.1446754932403564], + [-3.6475436687469482, -5.618095874786377], + [1.7902432680130005, 5.123297214508057], + [-3.663010358810425, 4.600477695465088], + [-0.09202053397893906, -0.4790107011795044], + [-2.423353910446167, 1.5364665985107422], + [-5.218077659606934, -3.490108013153076], + [-3.8406107425689697, -3.722578763961792], + [3.2005198001861572, -4.803592681884766], + [-0.3034166693687439, 10.440784454345703], + [5.342705726623535, -6.6922688484191895], + [1.9228284358978271, 5.1227006912231445], + [2.72053599357605, -4.050144195556641], + [-2.1127851009368896, 2.810530185699463], + [3.4545083045959473, -3.1417112350463867], + [3.2007858753204346, -4.931469917297363], + [-6.669763088226318, -2.307757616043091], + [-2.2212440967559814, 3.0965983867645264], + [-5.253088474273682, -3.952451705932617], + [-4.173181056976318, 6.562188625335693], + [9.17175579071045, -2.6018240451812744], + [-2.8430721759796143, 3.0991172790527344], + [-5.767037868499756, 2.0263118743896484], + [-4.2632737159729, -2.788313627243042], + [2.3930675983428955, -3.0779497623443604], + [2.927424192428589, -5.037083625793457], + [-5.189813137054443, -0.2353072166442871], + [9.156106948852539, -2.6749093532562256], + [-5.557967662811279, 2.539994239807129], + [-2.37416410446167, 1.6662826538085938], + [1.3148820400238037, 0.7359153032302856], + [1.7034047842025757, -8.87574577331543], + [2.8059890270233154, -4.441464900970459], + [1.6828835010528564, -7.841945171356201], + [-1.9697128534317017, 2.6314504146575928], + [1.966132640838623, -4.416975975036621], + [-7.421174049377441, -0.7530887126922607], + [1.5873994827270508, 1.231119990348816], + [-5.304234981536865, -3.3315489292144775], + [1.594728946685791, 0.3038172721862793], + [-5.96902322769165, 2.834028720855713], + [-4.547659397125244, -1.5342997312545776], + [1.9864513874053955, -9.18130111694336], + [-6.291680812835693, 2.3540775775909424], + [3.6631052494049072, -2.8198084831237793], + [1.9430179595947266, 1.78701651096344], + [-6.282381057739258, 7.395184516906738], + [-1.3238774538040161, -1.1439582109451294], + [1.976482629776001, 5.172029495239258], + [-8.126524925231934, 9.91893482208252], + [-3.757158041000366, -2.457381248474121], + [1.6298682689666748, 5.4642534255981445], + [0.7032552361488342, -5.544283866882324], + [2.53094744682312, -4.083757400512695], + [2.8608834743499756, -4.522538185119629], + [1.8127609491348267, -5.325586795806885], + [-2.4952948093414307, 5.902120590209961], + [-0.22421002388000488, 9.860616683959961], + [-0.2046486735343933, 9.693029403686523], + [0.8406248688697815, 5.599356651306152], + [-0.06500370055437088, 10.046835899353027], + [-5.059620380401611, 7.16903018951416], + [-1.3938077688217163, -1.526039958000183], + [-0.5647583603858948, 9.465265274047852], + [-3.8667104244232178, -1.1952705383300781], + [0.448669970035553, -0.7108506560325623], + [-4.923125743865967, 4.494611740112305], + [-4.253668785095215, 5.964503288269043], + [-5.105200290679932, 4.083293914794922], + [-3.649024248123169, -0.7925246953964233], + [3.145888090133667, -4.718189716339111], + [2.373886823654175, -3.8220736980438232], + [-4.619436264038086, -3.088216781616211], + [-0.3053291440010071, 10.637481689453125], + [3.0969862937927246, -4.862944602966309], + [1.9146149158477783, -0.007911358028650284], + [-3.933255672454834, 2.854576349258423], + [-7.572916507720947, -1.2339993715286255], + [5.971567630767822, -1.251867651939392], + [-3.650463819503784, -0.9265629649162292], + [0.8933910727500916, 4.766311168670654], + [-4.0421648025512695, -2.5390446186065674], + [2.453925371170044, -6.685749053955078], + [-1.8063175678253174, 2.056720733642578], + [-6.500433444976807, -1.227920413017273], + [-8.378538131713867, -0.8657546043395996], + [0.9676559567451477, -0.06790390610694885], + [-2.162667989730835, 1.9578877687454224], + [-5.734463691711426, 8.21715259552002], + [-4.558145523071289, 2.96075701713562], + [1.7513303756713867, 5.512709617614746], + [2.5519914627075195, -4.930847644805908], + [-5.260965824127197, 1.854357361793518], + [-0.5520749092102051, 9.3442964553833], + [3.0485072135925293, -4.984925270080566], + [-1.7862725257873535, -0.7094213962554932], + [3.4954240322113037, -5.746482849121094], + [9.482004165649414, -2.6491923332214355], + [-5.7124762535095215, -2.9032270908355713], + [-0.25034236907958984, 9.312150955200195], + [1.817854881286621, -7.8389177322387695], + [-5.240279674530029, -3.122901201248169], + [-6.638846397399902, 7.915366172790527], + [-0.6935365200042725, -0.9622429609298706], + [-4.089720249176025, -1.502974271774292], + [-8.223845481872559, -1.2286865711212158], + [2.0850164890289307, 5.426124572753906], + [-2.461043119430542, 1.9423348903656006], + [2.312008857727051, 5.519838333129883], + [3.139892816543579, -6.863171577453613], + [2.8611881732940674, -6.242896556854248], + [-2.731595516204834, -3.750864267349243], + [-2.1535494327545166, 2.7244699001312256], + [-4.548005104064941, 6.806937217712402], + [-3.7621119022369385, 3.6682960987091064], + [-2.352771759033203, 2.6001386642456055], + [-5.059793472290039, 6.336939811706543], + [3.9918243885040283, 7.077713966369629], + [-0.3992769718170166, 9.440319061279297], + [-1.2775955200195312, 0.5290161967277527], + [6.692165851593018, -3.1256139278411865], + [7.856746196746826, -3.9009690284729004], + [6.190426349639893, -2.3551037311553955], + [1.3491065502166748, -7.233246803283691], + [-5.102329730987549, -2.5876781940460205], + [3.105325937271118, -4.895015239715576], + [-4.513530254364014, 7.163967609405518], + [2.794975519180298, -5.664767742156982], + [2.9454777240753174, -4.581342697143555], + [-6.811939716339111, 8.468257904052734], + [-0.3540775775909424, 11.02475643157959], + [1.4263778924942017, -8.210919380187988], + [1.9609358310699463, 1.2847949266433716], + [-2.4659411907196045, 4.6939287185668945], + [-6.824184894561768, 8.284034729003906], + [-0.38745981454849243, 10.589245796203613], + [-0.28938812017440796, 9.53876781463623], + [-3.8301126956939697, 0.20302748680114746], + [-4.720105171203613, 5.926017761230469], + [-6.804864406585693, -1.9017308950424194], + [-4.767305850982666, 4.244869709014893], + [-0.04733157902956009, 9.542901039123535], + [-7.358612060546875, 8.929035186767578], + [-2.3262481689453125, 0.9716141223907471], + [3.081336259841919, -2.2797186374664307], + [1.5935617685317993, -8.064279556274414], + [0.4943695664405823, -4.109162330627441], + [10.331583976745605, -2.844068765640259], + [2.5576508045196533, -6.046136379241943], + [1.232560157775879, -4.672738552093506], + [-5.19075345993042, 0.12082290649414062], + [2.73190975189209, -4.140743255615234], + [2.9356653690338135, -4.761990547180176], + [-3.04182505607605, -4.463923454284668], + [-5.761180877685547, -3.912449836730957], + [2.222252368927002, -8.80177116394043], + [-5.649848461151123, 5.163569450378418], + [2.0140082836151123, -7.70750617980957], + [3.0814566612243652, -4.647987365722656], + [1.9715077877044678, 4.910665512084961], + [3.221161127090454, 1.2845475673675537], + [-4.734340190887451, -5.531214714050293], + [9.060383796691895, -2.4945244789123535], + [3.1527462005615234, 1.1811888217926025], + [6.84136438369751, -1.2755905389785767], + [-0.3509383797645569, 9.058088302612305], + [-0.2770628035068512, 4.0885396003723145], + [-4.05363130569458, -2.791445732116699], + [-6.811769962310791, 8.497608184814453], + [-3.3470070362091064, 3.693290948867798], + [-4.18112850189209, -3.42301344871521], + [1.9725546836853027, -4.880046844482422], + [0.9723785519599915, 5.797428607940674], + [1.7889201641082764, 4.892569065093994], + [5.260257244110107, -1.2108696699142456], + [-2.6747567653656006, -4.746021270751953], + [-3.9344067573547363, -2.5829412937164307], + [-5.620484828948975, -2.4268133640289307], + [-5.950771808624268, 4.599728584289551], + [-0.8096569180488586, 9.187307357788086], + [5.043783664703369, -4.158023357391357], + [7.737675666809082, -1.7099554538726807], + [8.352601051330566, -2.090841293334961], + [2.4445507526397705, -3.582097291946411], + [7.208720684051514, -1.6235746145248413], + [3.1347906589508057, -4.7551422119140625], + [2.277606248855591, 6.000137805938721], + [2.402235507965088, -4.143564701080322], + [-5.043435573577881, -4.305041313171387], + [2.904655933380127, -4.380748748779297], + [7.4806365966796875, -2.3772590160369873], + [-4.820827007293701, 7.564311981201172], + [2.3176662921905518, 5.86483097076416], + [1.162325382232666, 0.34127742052078247], + [2.1898739337921143, 5.625347137451172], + [-8.224139213562012, -1.035568118095398], + [-1.625488519668579, 1.085013747215271], + [-4.712260723114014, 4.31003475189209], + [-5.325592517852783, 6.532068252563477], + [-3.0127878189086914, 0.5651882886886597], + [-0.266590416431427, 10.596044540405273], + [-2.7174763679504395, 2.775963544845581], + [-3.6930391788482666, -4.277435302734375], + [-1.1860194206237793, 8.361533164978027], + [-4.455209255218506, -3.478654146194458], + [-3.7122371196746826, 0.19708490371704102], + [-6.027205944061279, 2.4043495655059814], + [-0.6606288552284241, 12.431695938110352], + [3.8811981678009033, 6.916560173034668], + [2.964517831802368, -5.063833236694336], + [-0.8720874190330505, 1.5429770946502686], + [-5.184572219848633, -2.647332191467285], + [3.436984062194824, 6.301762580871582], + [9.71288013458252, -2.6714839935302734], + [-1.082947015762329, 9.61769962310791], + [-0.00964856892824173, -0.996631383895874], + [-4.109772205352783, 4.909318447113037], + [5.986457347869873, -1.5732167959213257], + [-1.3119910955429077, 1.4861469268798828], + [-2.012784004211426, -1.9258689880371094], + [2.0561001300811768, 5.056987285614014], + [-0.06920576840639114, 10.055651664733887], + [-3.788264036178589, -1.2772947549819946], + [-4.767364025115967, -2.221769332885742], + [2.731410264968872, -5.865384101867676], + [1.8862388134002686, -3.0073750019073486], + [9.70430850982666, -2.66198468208313], + [6.833622932434082, -1.4934955835342407], + [2.51249623298645, -4.789884567260742], + [2.919616460800171, -4.49094295501709], + [-5.0533294677734375, -0.48559725284576416], + [-4.578963279724121, -4.030121803283691], + [-4.420138835906982, -3.240010976791382], + [1.6575860977172852, 4.395142555236816], + [-5.159327030181885, 6.009033203125], + [-5.2443461418151855, -2.920966863632202], + [-5.285762310028076, -0.7631778717041016], + [1.4457342624664307, -6.404767990112305], + [-4.816492557525635, 3.280059576034546], + [-7.02544641494751, 8.805490493774414], + [-2.759328603744507, 2.618990182876587], + [-1.6066510677337646, -2.734849214553833], + [-5.87927770614624, 2.2702741622924805], + [-0.5256791710853577, 11.498493194580078], + [-3.4017834663391113, -2.5600426197052], + [2.8698642253875732, -4.336424827575684], + [3.0227267742156982, -4.656108856201172], + [-0.28893619775772095, 10.292635917663574], + [1.805722951889038, 1.6601084470748901], + [-0.25398194789886475, 8.871543884277344], + [-4.710999965667725, -3.4742307662963867], + [-7.330494403839111, 8.885437965393066], + [-4.758880615234375, -7.069106101989746], + [9.550626754760742, -2.632577896118164], + [-2.5057780742645264, 5.957207679748535], + [-2.271036148071289, 1.1570297479629517], + [-0.27992182970046997, 9.997419357299805], + [1.709703803062439, -8.596466064453125], + [2.1955275535583496, 6.034633159637451], + [7.44201135635376, -2.2147834300994873], + [-3.7131173610687256, -1.305235743522644], + [-2.4550812244415283, 1.9212467670440674], + [-3.563899278640747, -0.2171364426612854], + [-6.09506893157959, -2.324083089828491], + [5.3526530265808105, -3.9856314659118652], + [9.906562805175781, -2.7227046489715576], + [-0.7503036260604858, 7.853119373321533], + [6.388629913330078, -2.7734386920928955], + [-2.1766903400421143, 2.6679065227508545], + [1.9456405639648438, -8.616619110107422], + [-0.2504419684410095, 10.231510162353516], + [-7.357585906982422, -0.8083208799362183], + [-4.09100866317749, -1.628895878791809], + [-7.070878505706787, 8.849444389343262], + [3.1821041107177734, 6.141875267028809], + [-6.0318098068237305, -2.268988847732544], + [2.9613454341888428, -5.845259666442871], + [2.350794553756714, -3.7806947231292725], + [1.7294652462005615, -7.484232425689697], + [-7.032484531402588, 8.649374008178711], + [2.8710529804229736, -4.332664966583252], + [-4.499253749847412, -1.0557385683059692], + [-2.1244349479675293, 6.333491325378418], + [-3.138139009475708, -0.7661204934120178], + [-0.054906196892261505, -0.7363513112068176], + [2.3364384174346924, -11.074113845825195], + [-5.197248935699463, 2.490943193435669], + [-3.3810181617736816, -2.663316488265991], + [0.49494248628616333, -0.8654923439025879], + [2.2456214427948, 5.781713485717773], + [2.77836012840271, -4.192709922790527], + [-7.73350191116333, 9.459844589233398], + [8.624312400817871, -2.443331718444824], + [5.813458442687988, -2.019534111022949], + [8.144381523132324, -2.0722339153289795], + [-0.9435082077980042, -0.40909576416015625], + [0.8740350008010864, -5.182538032531738], + [-6.352149486541748, 3.843393325805664], + [-4.411226272583008, -2.618156909942627], + [3.196988821029663, -4.786860942840576], + [-0.35954350233078003, 9.973392486572266], + [-0.557197630405426, 11.767415046691895], + [2.764296293258667, -5.095574378967285], + [2.715055465698242, -6.413395404815674], + [-5.894017696380615, 2.829457998275757], + [-3.5802876949310303, 3.373736619949341], + [-6.702480792999268, 8.485657691955566], + [-0.6250893473625183, 9.810567855834961], + [-0.3770425319671631, 11.133712768554688], + [6.486971378326416, -2.51269268989563], + [-2.0884878635406494, 1.05832040309906], + [-2.4438118934631348, 1.4432346820831299], + [-3.931422472000122, 6.772666931152344], + [2.2506492137908936, 6.083226203918457], + [3.1214687824249268, -4.716940402984619], + [2.248307943344116, 3.5902493000030518], + [1.1847550868988037, -6.37887716293335], + [0.5151038765907288, -0.2500535845756531], + [2.8392093181610107, -4.285964488983154], + [-3.8919219970703125, -5.63328742980957], + [2.65197491645813, -4.852106094360352], + [-1.4534739255905151, -2.922391176223755], + [-4.453490257263184, -1.2110998630523682], + [-4.414210796356201, -4.721015453338623], + [-2.3886659145355225, 2.3123362064361572], + [8.182756423950195, -2.3217616081237793], + [3.0715434551239014, -5.084356784820557], + [-3.5989997386932373, 5.691107749938965], + [-4.691891193389893, 7.63859224319458], + [-6.113340377807617, -2.1635162830352783], + [-0.5139047503471375, 9.507020950317383], + [-5.714212894439697, 7.627303123474121], + [1.8832035064697266, -3.830204725265503], + [-5.120840549468994, 2.561861991882324], + [-4.049009323120117, -2.390510082244873], + [-4.287868499755859, -3.9700567722320557], + [-7.923121929168701, -0.813011884689331], + [-3.6454038619995117, -1.8151754140853882], + [2.3112943172454834, -2.9045794010162354], + [6.570051670074463, -2.617089033126831], + [-4.600124359130859, -3.3700459003448486], + [-2.8807809352874756, 1.5571597814559937], + [3.835665702819824, 6.743739128112793], + [-4.842580318450928, -1.9741531610488892], + [1.8634591102600098, -9.199722290039062], + [-4.707428932189941, 7.22652530670166], + [8.713189125061035, -2.467468023300171], + [6.598294734954834, -1.229048490524292], + [1.164420247077942, -6.07227897644043], + [-3.186763048171997, -4.477814674377441], + [-3.9179065227508545, -2.7617640495300293], + [-6.242924690246582, -1.2559360265731812], + [-4.139572620391846, -2.5091054439544678], + [-0.3280462622642517, 10.50121784210205], + [-0.3468974232673645, 9.915643692016602], + [1.605229139328003, -8.566656112670898], + [-0.8967857956886292, -0.9124253988265991], + [2.915316581726074, -4.790409088134766], + [-0.31657907366752625, -1.6808985471725464], + [-0.31339383125305176, 8.736350059509277], + [0.12470763176679611, 9.468509674072266], + [-2.750995397567749, 1.4157835245132446], + [-3.9373624324798584, -3.464574098587036], + [2.2796995639801025, 1.020890712738037], + [-6.680999279022217, -2.541027307510376], + [-3.0744574069976807, 6.6768903732299805], + [-0.11022574454545975, 8.852367401123047], + [-0.2509840428829193, -0.9084669351577759], + [-4.09366512298584, -1.8750625848770142], + [-0.5664944052696228, -0.7814199924468994], + [-1.065359115600586, 8.653133392333984], + [-3.7590839862823486, -1.9182158708572388], + [-5.27529764175415, 7.5421624183654785], + [3.0255329608917236, -4.576205730438232], + [6.654426097869873, -2.370389223098755], + [6.557926177978516, -4.646050453186035], + [1.9542450904846191, -5.217061996459961], + [-5.95739221572876, 7.741961479187012], + [5.732161045074463, -1.4969754219055176], + [-5.037107467651367, 4.771854877471924], + [-0.5383246541023254, -1.1951210498809814], + [-0.24261605739593506, -0.5238537788391113], + [3.508509635925293, -4.4836344718933105], + [5.088383197784424, 7.42781400680542], + [3.214357376098633, -4.804249286651611], + [-1.9576860666275024, 2.425443172454834], + [-5.605236530303955, 2.428797960281372], + [-5.998353958129883, 0.6586486101150513], + [3.2602310180664062, -4.872825622558594], + [8.420053482055664, -2.31189227104187], + [2.174856424331665, -10.249899864196777], + [-0.10380906611680984, -1.6262282133102417], + [-4.069169044494629, -2.7282137870788574], + [-8.410229682922363, -0.8895581960678101], + [-0.9845612645149231, 6.315536975860596], + [-0.28337281942367554, 9.692821502685547], + [-6.301821708679199, -2.321833848953247], + [7.0713701248168945, -2.810927152633667], + [-5.200864315032959, -3.4801347255706787], + [5.719320297241211, -4.794766426086426], + [-6.017611026763916, -2.908620595932007], + [-6.009183406829834, 4.499907493591309], + [-6.825900077819824, 8.24377727508545], + [2.943570852279663, -5.162116050720215], + [2.9391071796417236, 1.340427041053772], + [-4.540246963500977, -2.2969954013824463], + [-4.962299823760986, -3.0321576595306396], + [-0.2788252830505371, 10.478983879089355], + [-3.6544137001037598, 1.931388258934021], + [9.541386604309082, -2.6518075466156006], + [6.012803077697754, -1.1055448055267334], + [0.9074002504348755, 3.927619457244873], + [0.7216781973838806, -0.03139377012848854], + [-5.860743999481201, 8.677194595336914], + [-3.4910149574279785, -2.8148608207702637], + [1.5172584056854248, -2.8115394115448], + [-4.795082092285156, -2.657517433166504], + [-6.165033340454102, 7.79099178314209], + [-2.4509596824645996, 2.0501527786254883], + [0.5092270970344543, -1.5790315866470337], + [-1.4323914051055908, 2.6876184940338135], + [3.4797234535217285, -3.7152669429779053], + [-4.732612133026123, 7.0598955154418945], + [2.2878434658050537, -4.644168853759766], + [-5.192850589752197, -2.7413899898529053], + [2.8861706256866455, -4.4383745193481445], + [2.8562703132629395, -4.31815767288208], + [3.250079393386841, -5.033803462982178], + [-4.824710369110107, -2.8082919120788574], + [-6.880462169647217, -2.5175702571868896], + [-3.4634745121002197, -2.6663658618927], + [-2.495889902114868, 1.2401787042617798], + [-3.449143648147583, -0.4267464280128479], + [0.04756217449903488, -4.586212158203125], + [-3.2660515308380127, 5.1545939445495605], + [-0.4114658236503601, 11.43408203125], + [-4.508302211761475, -4.099278450012207], + [5.504668712615967, -1.5194919109344482], + [-2.328089475631714, 1.4773101806640625], + [1.6603975296020508, -7.526029586791992], + [2.7797794342041016, 6.021047592163086], + [3.0153539180755615, -4.723944664001465], + [-5.677824020385742, 5.158267021179199], + [8.567626953125, -2.3921010494232178], + [-0.7789495587348938, -4.44882869720459], + [6.219330310821533, -1.5006427764892578], + [3.062798500061035, -5.140568733215332], + [10.262831687927246, -2.843269109725952], + [-5.92167329788208, -1.886064052581787], + [-6.064167499542236, -1.8410505056381226], + [-3.66416597366333, -1.35651433467865], + [0.5389831066131592, -0.9061384201049805], + [-4.520158767700195, 5.338653564453125], + [-4.043882846832275, 6.4304890632629395], + [-5.170227527618408, 3.89908504486084], + [-4.0959930419921875, -2.6759448051452637], + [-5.053584575653076, -3.4147696495056152], + [-5.691646099090576, 2.7734897136688232], + [-4.751739501953125, 1.507896065711975], + [-4.008796215057373, -2.333794355392456], + [-0.33677613735198975, 10.574353218078613], + [-0.2337213158607483, 10.087071418762207], + [2.943397045135498, -5.04719352722168], + [-1.2349305152893066, 3.3800413608551025], + [2.4224536418914795, 1.1079574823379517], + [7.669995307922363, -2.671811103820801], + [-7.494401454925537, -2.2742650508880615], + [-2.0646941661834717, 2.396216869354248], + [2.984316110610962, -4.520529747009277], + [6.399628162384033, -2.2108240127563477], + [-0.20608872175216675, 1.204382300376892], + [-6.4476637840271, 3.5727438926696777], + [-0.21375352144241333, 9.623181343078613], + [-2.3882224559783936, 1.2086035013198853], + [-6.847869396209717, 3.5632083415985107], + [0.9132694602012634, -5.360415458679199], + [-5.532938480377197, 0.5684562921524048], + [-3.442718029022217, -1.244760274887085], + [-0.6271085739135742, 8.928630828857422], + [5.3974127769470215, -1.0818346738815308], + [-4.911714553833008, -3.340564727783203], + [-5.95431661605835, -2.704655647277832], + [-5.222123622894287, 2.3895299434661865], + [-4.575165271759033, 5.348446846008301], + [-3.5768275260925293, -2.45404314994812], + [1.7454822063446045, -3.5478193759918213], + [1.7852349281311035, -6.753077507019043], + [1.7154628038406372, -8.823620796203613], + [-5.901158809661865, 2.463283061981201], + [-0.2935224175453186, 10.396163940429688], + [-5.786900043487549, -2.9783148765563965], + [-5.824988842010498, 4.128057479858398], + [-2.306781530380249, 0.6486290693283081], + [-6.175147533416748, 7.912514686584473], + [-6.4348835945129395, 2.223395347595215], + [2.85661244392395, -4.5880632400512695], + [-6.104137897491455, 7.52803897857666], + [2.690322160720825, -4.18414831161499], + [9.650923728942871, -2.923888921737671], + [6.625182628631592, -1.2957936525344849], + [-4.9446282386779785, 7.2852630615234375], + [1.0202488899230957, -0.25677958130836487], + [-6.43562650680542, 7.6421403884887695], + [-5.129581928253174, 1.650178074836731], + [1.843188762664795, 5.264497756958008], + [-4.344086647033691, 6.160597801208496], + [-3.352268934249878, 5.8300580978393555], + [-5.721734523773193, 7.296055316925049], + [2.191903591156006, 5.790266036987305], + [2.3707666397094727, 4.55613899230957], + [-2.654337167739868, -1.6951714754104614], + [2.6418426036834717, -4.492254734039307], + [-1.996086597442627, 2.296804189682007], + [-6.15986442565918, 7.303983688354492], + [2.3860814571380615, -3.545504331588745], + [0.5700332522392273, -5.178861618041992], + [-3.519009828567505, -3.3153679370880127], + [-3.440098285675049, -2.0142762660980225], + [-6.841184616088867, -1.11150062084198], + [-0.561010479927063, 2.3661012649536133], + [1.3013927936553955, -7.824437141418457], + [-2.6201045513153076, -1.0203441381454468], + [-5.182251453399658, -3.5755553245544434], + [0.04913371056318283, 9.531784057617188], + [6.323256969451904, -1.195389747619629], + [-2.804382085800171, -3.3038125038146973], + [6.222896099090576, -1.4420655965805054], + [-3.7560298442840576, -0.9663962125778198], + [-2.688368320465088, -1.4621793031692505], + [-5.320369243621826, 6.402993202209473], + [1.3893834352493286, 1.6678194999694824], + [-0.2289676070213318, 10.854716300964355], + [-3.265023708343506, 6.830512046813965], + [-6.008437633514404, 7.143017768859863], + [-5.491567611694336, 2.055711507797241], + [-3.282093048095703, 4.972282409667969], + [-0.49555718898773193, 9.454194068908691], + [-5.78663969039917, 4.768996238708496], + [4.252850532531738, -3.1141197681427], + [1.1216305494308472, 5.180119514465332], + [5.261765003204346, -1.1581900119781494], + [-0.8379673361778259, 0.8820191025733948], + [-0.2467784881591797, 9.604223251342773], + [-5.386165142059326, 3.7240164279937744], + [-4.929183006286621, 4.704750061035156], + [-5.662648677825928, 4.587719917297363], + [-6.761987686157227, -2.470728635787964], + [-5.145269870758057, 1.6078708171844482], + [9.528108596801758, -2.7655255794525146], + [-3.776557207107544, -1.4127320051193237], + [3.305596113204956, -5.299020767211914], + [-1.6899049282073975, 5.318277835845947], + [-4.630831241607666, -3.8733267784118652], + [-6.5699944496154785, 2.0005433559417725], + [-5.213967323303223, 7.5038161277771], + [-3.2940070629119873, -2.2984066009521484], + [-5.617029666900635, 6.551541328430176], + [-1.170737862586975, -0.8867241144180298], + [-3.762057304382324, -0.9281560778617859], + [-4.391951084136963, -2.8954081535339355], + [-5.296871662139893, -4.247462749481201], + [-4.112627029418945, 2.9775171279907227], + [-0.47220832109451294, 11.058004379272461], + [-4.030852794647217, -3.116461992263794], + [-2.493925094604492, 1.7673225402832031], + [2.550959825515747, -3.7732131481170654], + [-7.154042720794678, -1.7008174657821655], + [-2.3659374713897705, 4.542832374572754], + [4.176642894744873, -5.159809112548828], + [0.9316239953041077, 0.19981370866298676], + [-2.8898909091949463, -4.152566432952881], + [3.0982778072357178, 1.06586492061615], + [-5.158219814300537, -3.1526434421539307], + [-2.929889678955078, -2.1676955223083496], + [-4.519113063812256, 5.790678977966309], + [-5.452836036682129, -2.2710397243499756], + [-0.47652214765548706, 9.007068634033203], + [2.3675713539123535, 6.196252822875977], + [3.327631711959839, -5.342471599578857], + [-1.1805436611175537, 5.353157043457031], + [2.86150860786438, -4.582277297973633], + [-5.90305757522583, 0.6853644251823425], + [1.7881466150283813, 0.35538187623023987], + [-2.409022808074951, 1.793652057647705], + [-1.6644021272659302, 0.45765817165374756], + [9.775994300842285, -3.078040361404419], + [-2.2059974670410156, 3.0585734844207764], + [-0.5050044655799866, 10.988676071166992], + [-4.9883599281311035, 4.2000956535339355], + [-2.7567341327667236, 1.9935904741287231], + [-5.393638610839844, 0.35819584131240845], + [3.0035593509674072, 6.096223831176758], + [-0.5085390210151672, 11.825166702270508], + [-2.4718518257141113, 1.6222717761993408], + [-5.443933963775635, -1.439052939414978], + [2.238201379776001, -7.72368049621582], + [1.0841600894927979, -5.608512878417969], + [1.433426856994629, 4.786017417907715], + [-2.7219316959381104, 6.669312000274658], + [2.2101263999938965, -3.8926491737365723], + [2.8945634365081787, 6.315957546234131], + [4.128621578216553, 6.751916885375977], + [0.9350395798683167, -7.395318031311035], + [-6.800445079803467, -1.75242018699646], + [-7.254427433013916, 8.908050537109375], + [-2.762799024581909, -0.03757346048951149], + [-6.317600727081299, 6.534281253814697], + [4.235946178436279, -3.75689959526062], + [-5.424253940582275, 6.802499771118164], + [9.8297700881958, -2.703256368637085], + [-0.8642023205757141, -0.7820101976394653], + [-4.7701096534729, -2.739379644393921], + [-6.618252754211426, 8.580059051513672], + [-0.7083294987678528, 6.875692367553711], + [-6.1410231590271, 6.384762763977051], + [3.2254905700683594, -5.381524562835693], + [-4.373985290527344, -2.512915849685669], + [-2.0485856533050537, 2.282743215560913], + [-0.4077189564704895, 11.10822868347168], + [2.0303432941436768, 1.2626534700393677], + [1.0123324394226074, 1.5387948751449585], + [2.7769811153411865, -4.537010192871094], + [-5.5962347984313965, 8.068971633911133], + [-2.4353060722351074, 1.1350641250610352], + [2.8573381900787354, -4.315418243408203], + [-5.449261665344238, -2.8630120754241943], + [-4.483285903930664, -3.27020525932312], + [3.294163227081299, 6.631900787353516], + [-3.7654473781585693, -2.6247003078460693], + [1.864151954650879, 4.903433799743652], + [2.565595865249634, -7.205294132232666], + [2.634608507156372, 6.324353218078613], + [-5.69499397277832, 7.196613311767578], + [9.210411071777344, -2.6101458072662354], + [-3.966318130493164, -2.67999005317688], + [1.2650396823883057, 0.4376622438430786], + [-4.080597877502441, 3.219923257827759], + [-7.70623254776001, -1.1210334300994873], + [5.262264728546143, -3.4290359020233154], + [-5.661425590515137, -2.484072685241699], + [7.368247032165527, -1.5391807556152344], + [-5.898961544036865, 4.219112396240234], + [-0.25386083126068115, 10.50289535522461], + [1.9625475406646729, 5.678800582885742], + [8.654784202575684, -2.3621246814727783], + [8.355969429016113, -2.681792974472046], + [-5.697054386138916, 2.827702522277832], + [-6.143662929534912, -2.2366888523101807], + [9.575055122375488, -2.411189317703247], + [3.214953899383545, -5.126099586486816], + [5.29356050491333, -1.8411141633987427], + [-0.16474494338035583, 5.193366050720215], + [10.044366836547852, -2.7776682376861572], + [-2.5463743209838867, -3.200129747390747], + [5.275104522705078, -1.6061469316482544], + [1.5156694650650024, -7.857089996337891], + [7.348848819732666, -1.982110857963562], + [-2.0989322662353516, 2.702035427093506], + [-5.000942230224609, 3.5737922191619873], + [0.892910361289978, -0.15259236097335815], + [-6.548716068267822, 7.357659339904785], + [-4.362045764923096, -0.2832985520362854], + [-2.3398830890655518, 5.124996185302734], + [-4.28279447555542, 5.735651969909668], + [5.226319789886475, -4.312298774719238], + [-0.488680362701416, 11.624738693237305], + [9.37692928314209, -1.949295163154602], + [-6.007270336151123, -2.884798765182495], + [-5.852322101593018, 3.3692119121551514], + [-5.749649524688721, 1.5044931173324585], + [-0.25445371866226196, 9.894980430603027], + [2.707853078842163, -4.1302080154418945], + [3.1530115604400635, 6.574795246124268], + [0.657249391078949, -5.480358123779297], + [-1.294618844985962, 1.5901402235031128], + [6.271254062652588, 7.679988861083984], + [-3.769749641418457, 0.7940455675125122], + [5.836175441741943, -1.2026013135910034], + [-5.878848552703857, -1.6457756757736206], + [-2.789013385772705, -1.7138351202011108], + [2.1798226833343506, 5.661492347717285], + [-0.2723114490509033, 9.363327026367188], + [-3.725247621536255, -2.4912362098693848], + [2.4207136631011963, -4.501789093017578], + [1.0458334684371948, 9.334396362304688], + [2.6941168308258057, 4.89958381652832], + [-5.821866512298584, 6.991365432739258], + [5.5381011962890625, -2.5699191093444824], + [1.8301098346710205, -9.02590274810791], + [-5.210157871246338, -1.717675805091858], + [7.667226791381836, -1.7383214235305786], + [-0.6709058284759521, 9.117918014526367], + [1.1492401361465454, -7.76663875579834], + [-2.991764545440674, -4.252496719360352], + [-5.567777156829834, 2.709871768951416], + [-0.274644136428833, 9.529973030090332], + [2.234882116317749, 4.8825201988220215], + [7.973452091217041, -1.926838994026184], + [3.1208250522613525, -4.685973167419434], + [5.2675604820251465, -0.400295227766037], + [-4.310194492340088, -1.445483684539795], + [4.872293472290039, 7.1858978271484375], + [-0.2810884714126587, 11.066335678100586], + [3.7716121673583984, 5.742678642272949], + [-3.747591733932495, -2.1603593826293945], + [-5.091026306152344, 2.382530689239502], + [-4.128108501434326, -3.7697346210479736], + [-0.7824212908744812, 5.223342418670654], + [5.132978439331055, -1.696207880973816], + [1.8325879573822021, -3.331089735031128], + [-2.7266085147857666, 0.6690710783004761], + [-0.1332150101661682, -1.5465415716171265], + [-4.509324073791504, 6.6036529541015625], + [2.8977549076080322, -4.414615154266357], + [-8.186497688293457, -0.8338596820831299], + [-4.444846153259277, -0.7088457345962524], + [2.78257155418396, -4.203879356384277], + [-0.005321569740772247, 5.562434196472168], + [7.102820873260498, -2.6190664768218994], + [-0.24522531032562256, 9.442105293273926], + [6.174686431884766, -2.1169021129608154], + [-5.504358291625977, 6.199980735778809], + [2.4502737522125244, 5.66595983505249], + [0.8970392942428589, 0.9380295276641846], + [-4.374271392822266, -2.064256429672241], + [6.977451801300049, -3.187518358230591], + [-5.352473735809326, -6.155196189880371], + [-4.275109767913818, 5.002048492431641], + [6.720510959625244, -2.1752357482910156], + [8.154025077819824, -2.0480480194091797], + [2.098727226257324, 0.9311090111732483], + [1.6142754554748535, -8.269060134887695], + [-2.5597095489501953, 2.000441789627075], + [-5.797264575958252, -2.624340534210205], + [-4.845936298370361, -3.5375514030456543], + [4.6527934074401855, -1.1150320768356323], + [2.831829786300659, -4.260529518127441], + [-5.498256206512451, -1.8492285013198853], + [2.0661423206329346, -8.519999504089355], + [-4.59501314163208, -3.8940885066986084], + [0.2987987995147705, -4.989786624908447], + [2.889566659927368, -4.754851341247559], + [3.2305471897125244, -4.835258960723877], + [-5.963327884674072, 2.4095704555511475], + [4.970804214477539, -2.498582124710083], + [-3.747680425643921, 7.68520450592041], + [2.1002070903778076, -10.06283187866211], + [4.612149238586426, -0.9483690857887268], + [-5.051122188568115, -3.5574285984039307], + [-5.573426723480225, -0.17588531970977783], + [-5.54139518737793, 5.452065944671631], + [0.07689445465803146, 9.792428970336914], + [-3.8204753398895264, -2.2769298553466797], + [1.8178105354309082, -6.8091721534729], + [-1.9679046869277954, -1.5098134279251099], + [-6.010831832885742, -1.504214882850647], + [9.413191795349121, -2.5200440883636475], + [-5.05354642868042, 7.075451850891113], + [-5.048827648162842, -3.8411142826080322], + [-5.538066387176514, -2.9315435886383057], + [-0.3600648045539856, 10.80032730102539], + [-3.6624467372894287, 5.834662914276123], + [-4.229902267456055, -2.0237948894500732], + [-5.827227592468262, 6.0685272216796875], + [9.508336067199707, -2.6474902629852295], + [5.831704616546631, -3.253450632095337], + [-2.9246883392333984, 3.2536556720733643], + [-0.5249027609825134, 9.884668350219727], + [-3.744702100753784, 3.832296133041382], + [1.7189661264419556, -5.787130832672119], + [-0.3885369896888733, 11.185689926147461], + [-0.07452557235956192, -0.918881356716156], + [-3.916949987411499, -1.304146409034729], + [-5.435274600982666, -3.8926165103912354], + [-4.884726047515869, -2.75024676322937], + [2.0973269939422607, -3.9317855834960938], + [-5.504368305206299, 6.11067533493042], + [-0.43696117401123047, 11.04686450958252], + [-5.0481343269348145, -3.5174033641815186], + [5.309275150299072, -1.1287235021591187], + [7.858487129211426, -2.058605909347534], + [7.594352722167969, -3.9297401905059814], + [-2.1218745708465576, 2.8945212364196777], + [1.4264694452285767, -7.445935249328613], + [-0.24880987405776978, 10.236352920532227], + [-2.63066029548645, 2.3629531860351562], + [5.432028293609619, 7.034572601318359], + [0.5052289962768555, -0.18082138895988464], + [4.982413291931152, 7.662083148956299], + [-2.2165327072143555, -4.01496696472168], + [5.592677116394043, -4.211331367492676], + [-4.136960506439209, -1.7368055582046509], + [-0.29479116201400757, 9.688255310058594], + [-5.565820693969727, -2.4673216342926025], + [4.992156982421875, -3.17545485496521], + [6.585272312164307, -1.368263840675354], + [5.7320990562438965, -1.8754185438156128], + [1.072332739830017, -4.557792663574219], + [3.0544865131378174, -4.622169494628906], + [3.945388078689575, -3.72737193107605], + [-2.2848329544067383, 0.4157010614871979], + [8.789388656616211, -2.4005494117736816], + [0.443261981010437, -0.23878514766693115], + [7.16251802444458, -2.1386382579803467], + [0.007818929851055145, 9.206343650817871], + [-5.446404933929443, -1.9478553533554077], + [1.8826895952224731, 5.334877967834473], + [-2.760192632675171, 0.5419086217880249], + [-1.027026891708374, 5.58784294128418], + [3.252866506576538, -4.802846431732178], + [2.128948926925659, -3.9178781509399414], + [2.8037664890289307, 5.209290504455566], + [-0.5728306770324707, -2.2192652225494385], + [-4.526072978973389, 5.264342308044434], + [-4.15599250793457, -3.2759292125701904], + [-8.396260261535645, -0.8676233291625977], + [-5.100569725036621, -2.7039546966552734], + [-5.4707417488098145, -2.933133840560913], + [-5.542242527008057, 5.173601150512695], + [-0.6750363707542419, 9.734783172607422], + [5.289949893951416, 6.873904228210449], + [-4.612112045288086, 3.5828473567962646], + [-3.1057851314544678, 5.50287389755249], + [2.245502233505249, 4.371959209442139], + [0.16407078504562378, 9.837686538696289], + [-1.5277080535888672, 1.164780616760254], + [5.115557670593262, -1.174066424369812], + [-1.1303975582122803, 6.099143981933594], + [-0.29712599515914917, -1.5103387832641602], + [-6.016440391540527, -1.54468834400177], + [2.6848320960998535, -5.685641288757324], + [-5.355734348297119, 6.916566848754883], + [2.3018457889556885, 1.196362853050232], + [5.6724324226379395, -0.8882299661636353], + [-2.4041740894317627, 1.7349265813827515], + [-4.251913070678711, -2.5039377212524414], + [-4.047126293182373, -3.6861648559570312], + [1.9045119285583496, 4.477293014526367], + [2.698561906814575, -6.227380275726318], + [3.7580888271331787, -2.941553831100464], + [2.2914040088653564, -4.166797637939453], + [-0.12867963314056396, 9.849264144897461], + [-0.061705417931079865, 9.681843757629395], + [-5.882327556610107, -2.271775960922241], + [-4.747334003448486, -4.081108570098877], + [-4.761971950531006, -0.9708422422409058], + [-4.3799238204956055, -2.9361231327056885], + [-8.159592628479004, -1.0601650476455688], + [3.3376412391662598, -5.242588996887207], + [-2.246492624282837, 2.0187368392944336], + [-4.3258538246154785, -2.4259543418884277], + [6.738640308380127, -4.849713325500488], + [-2.5701711177825928, 1.4280248880386353], + [-2.408712148666382, 1.3476239442825317], + [-5.210875988006592, -4.055977821350098], + [-3.7476868629455566, -1.8829506635665894], + [-0.3312135338783264, 11.03950023651123], + [5.66113805770874, -1.1153546571731567], + [8.700716972351074, -2.395817518234253], + [5.862337589263916, -1.6406561136245728], + [5.5508341789245605, -4.0609517097473145], + [8.52741813659668, -2.3511736392974854], + [-5.9389729499816895, 1.9559575319290161], + [-4.336169719696045, -4.165106773376465], + [-4.793649196624756, -2.37253737449646], + [-6.617590427398682, -1.4811571836471558], + [2.7617223262786865, -6.875799655914307], + [-3.331467866897583, -1.5716687440872192], + [0.8889608383178711, -6.9755988121032715], + [-0.26582592725753784, 5.8968305587768555], + [2.696643352508545, 5.947909355163574], + [-2.19352388381958, -2.0370523929595947], + [-6.3091559410095215, 2.7757551670074463], + [2.976792812347412, -4.494126796722412], + [8.332432746887207, -2.1416385173797607], + [-3.973280668258667, 7.375771999359131], + [-5.587160110473633, -3.7984611988067627], + [-0.4284086227416992, 11.071864128112793], + [-0.2537683844566345, 9.913871765136719], + [0.2390376329421997, -0.32997584342956543], + [-1.8290132284164429, -1.2348419427871704], + [5.34246826171875, -1.2301334142684937], + [2.1459407806396484, -10.424427032470703], + [-3.8126749992370605, 4.8511247634887695], + [0.7373493313789368, -0.3273460566997528], + [-5.449659824371338, -3.224931478500366], + [-3.6649038791656494, 5.592395782470703], + [-5.162500858306885, 7.316771507263184], + [-2.0572221279144287, 1.449819803237915], + [-5.167686939239502, 4.456029415130615], + [2.9502131938934326, -4.440281391143799], + [-6.93639612197876, -1.2563536167144775], + [-4.978339672088623, -2.2712550163269043], + [-5.251377582550049, 4.006153583526611], + [-3.602616786956787, 5.721155643463135], + [-5.308838844299316, -3.1534345149993896], + [-4.56554651260376, -0.4140934944152832], + [1.2259981632232666, -6.185432434082031], + [-0.6594061851501465, 9.334291458129883], + [-4.386082172393799, -0.9379488825798035], + [9.225370407104492, -2.584134101867676], + [2.2545883655548096, -3.3570330142974854], + [5.591831684112549, -1.4380780458450317], + [-2.1793477535247803, 1.0175117254257202], + [-7.772016525268555, -1.9981685876846313], + [-5.386725902557373, -3.1495816707611084], + [6.1171040534973145, -1.5415818691253662], + [-0.13940006494522095, 10.092079162597656], + [7.827033519744873, -2.1357240676879883], + [-0.35721397399902344, 9.39427661895752], + [-0.39983218908309937, 10.239133834838867], + [-6.570371150970459, -1.7323455810546875], + [-4.79864501953125, -1.6453989744186401], + [-2.5151350498199463, 1.1694856882095337], + [-3.8154618740081787, 4.202171325683594], + [4.771971225738525, -1.5941550731658936], + [-8.492774963378906, -0.36842572689056396], + [-4.763473033905029, -3.047231435775757], + [2.376146078109741, 4.771538734436035], + [-2.0089035034179688, -1.0483384132385254], + [2.320019245147705, -7.564229488372803], + [-0.1905943751335144, 9.931024551391602], + [-3.5803263187408447, 1.538296103477478], + [-1.9083338975906372, 2.590337038040161], + [-4.11506986618042, -1.9944051504135132], + [-4.685940265655518, -3.5787155628204346], + [-5.349971294403076, -2.4430747032165527], + [-5.272278308868408, -3.7024621963500977], + [5.950268268585205, -1.3187334537506104], + [-2.2607791423797607, 2.3805220127105713], + [6.055839538574219, 8.0617036819458], + [3.005373239517212, -4.69952392578125], + [-5.020009517669678, 4.094277858734131], + [-5.630878925323486, 5.638685703277588], + [-3.2375166416168213, -0.9840163588523865], + [0.69082111120224, -2.521834135055542], + [-7.496735572814941, -1.3592215776443481], + [-4.525699138641357, 5.948762893676758], + [-1.9713072776794434, 0.4815967082977295], + [-2.4340767860412598, 1.6251887083053589], + [-2.6092307567596436, 5.946109771728516], + [-5.339296817779541, -0.5780572295188904], + [-4.747018337249756, -2.0135416984558105], + [-2.1542367935180664, 1.3266284465789795], + [0.7593119144439697, -0.20595303177833557], + [1.7627836465835571, 5.121280670166016], + [-2.1359827518463135, 0.7975602149963379], + [-5.361507892608643, 6.277787208557129], + [-0.6004928946495056, 11.173799514770508], + [2.5453031063079834, -3.9069035053253174], + [1.5707448720932007, -7.731960773468018], + [2.608388662338257, 0.887204647064209], + [-2.985271692276001, -2.8747169971466064], + [-0.15840435028076172, 10.18436050415039], + [-3.7993388175964355, -3.3401336669921875], + [-5.14865255355835, 7.945025444030762], + [0.9709580540657043, -6.643024444580078], + [6.815409183502197, -1.3208723068237305], + [-6.348531246185303, -2.3186440467834473], + [1.7040505409240723, -4.094464302062988], + [-5.222898006439209, 6.685059547424316], + [1.4112024307250977, 0.2538137137889862], + [-7.24531364440918, -1.4283771514892578], + [3.0772435665130615, -5.22184944152832], + [-4.465753078460693, -3.590930223464966], + [2.7944109439849854, -7.482873439788818], + [5.922708034515381, -5.174591541290283], + [-6.611238956451416, 7.2181291580200195], + [4.09918212890625, 6.843365669250488], + [-4.921581268310547, 1.7192133665084839], + [7.008228302001953, -1.6178501844406128], + [-3.2646477222442627, -2.034877061843872], + [3.3509819507598877, -6.232111930847168], + [-4.0934247970581055, -3.7009236812591553], + [-2.176018476486206, 1.6388288736343384], + [-3.9663493633270264, -2.5119245052337646], + [-4.662100315093994, -4.993233680725098], + [4.094629764556885, -2.2067556381225586], + [-2.498286485671997, 2.192354202270508], + [-7.771346569061279, -1.2338320016860962], + [6.236639022827148, -1.352156162261963], + [1.7782173156738281, 5.5743608474731445], + [-3.0730392932891846, -0.9156481623649597], + [8.958294868469238, -2.466259717941284], + [1.1111732721328735, -7.049729824066162], + [-3.664424180984497, -1.3285243511199951], + [-0.6709626913070679, 1.7818669080734253], + [-0.8915795683860779, 9.576312065124512], + [-4.463364601135254, 5.635510444641113], + [-2.1071949005126953, -0.8789079785346985], + [-4.390733242034912, -1.9588432312011719], + [-4.7914204597473145, -2.9497921466827393], + [8.669698715209961, -2.9753878116607666], + [-3.9296813011169434, -3.6945950984954834], + [2.558479070663452, -5.74690055847168], + [-5.628532886505127, 4.081822872161865], + [6.194509983062744, -1.7499791383743286], + [-5.105400085449219, 2.001852035522461], + [7.253862380981445, -2.9339585304260254], + [-2.83979868888855, 0.540922224521637], + [-4.15835428237915, -0.1544489860534668], + [1.8083102703094482, 6.146218299865723], + [2.8756263256073, -4.339186191558838], + [-3.9190213680267334, -0.506563127040863], + [2.0683672428131104, 5.629115104675293], + [-5.151208400726318, -3.636162757873535], + [1.5041344165802002, -5.11643123626709], + [3.257129669189453, -4.860389709472656], + [5.7845306396484375, -1.1766855716705322], + [-2.4765124320983887, 2.071962833404541], + [-4.876128673553467, -3.3317508697509766], + [-4.512107849121094, -2.9077913761138916], + [9.66970157623291, -2.7006914615631104], + [-4.542026519775391, 3.233191728591919], + [0.7879590392112732, 1.1656807661056519], + [-6.093861103057861, 1.918055534362793], + [9.070937156677246, -2.4773542881011963], + [-3.340928554534912, -1.022915244102478], + [-4.906287670135498, -2.1033005714416504], + [4.502007007598877, -1.198636770248413], + [1.048274278640747, -6.49600887298584], + [5.8731369972229, -1.267304539680481], + [1.8861278295516968, -3.809002637863159], + [8.660514831542969, -2.37162184715271], + [3.2087090015411377, -4.801908493041992], + [-1.826631784439087, 0.6361964344978333], + [-3.218029499053955, 0.812375009059906], + [-0.6235092282295227, -1.1926087141036987], + [-0.6866016387939453, -1.2286264896392822], + [-6.396017551422119, 1.2585192918777466], + [-5.186434268951416, -3.5978877544403076], + [-2.4422309398651123, -2.313974618911743], + [-2.403902769088745, 0.8332632780075073], + [2.923938512802124, -4.893653869628906], + [-2.2642815113067627, 1.3394461870193481], + [-3.7829532623291016, -3.454894781112671], + [6.379923343658447, -1.2958325147628784], + [-0.21854227781295776, 9.511256217956543], + [9.092781066894531, -2.4628851413726807], + [3.0951857566833496, -4.919116973876953], + [-4.6498541831970215, -0.4263807535171509], + [-3.8649632930755615, -2.9331347942352295], + [-2.1719539165496826, 6.151289939880371], + [-1.9508821964263916, 2.0992090702056885], + [-4.933767795562744, -3.0296437740325928], + [-5.019267559051514, -2.2755467891693115], + [-2.666088581085205, 0.22365915775299072], + [-1.0249556303024292, -1.6431931257247925], + [-3.8907506465911865, -2.60258412361145], + [7.325455188751221, -2.3960354328155518], + [2.0577874183654785, 5.889136791229248], + [-4.035667896270752, -2.377746820449829], + [-4.050067901611328, 2.1614456176757812], + [2.447990655899048, -8.542890548706055], + [-0.27900272607803345, 9.67193603515625], + [2.006370782852173, -6.749884605407715], + [-0.31789278984069824, 9.156270980834961], + [-4.191564083099365, -2.0260043144226074], + [-4.061061859130859, 5.526589393615723], + [-2.443981885910034, -2.3543918132781982], + [2.882176160812378, 6.155906677246094], + [-0.45612001419067383, 9.652409553527832], + [0.5816882252693176, -0.1375744491815567], + [-5.730062961578369, -3.4886765480041504], + [-0.5174323916435242, 11.007052421569824], + [6.922399044036865, -1.3398414850234985], + [9.878559112548828, -2.7280843257904053], + [2.9296181201934814, -4.516911506652832], + [-4.5082011222839355, -2.103973150253296], + [2.9230377674102783, -4.703897953033447], + [-3.935413122177124, 1.7981127500534058], + [2.9446606636047363, -4.582501411437988], + [8.188952445983887, -1.9545568227767944], + [6.535790920257568, -4.64147424697876], + [-4.401113033294678, 6.7765045166015625], + [2.558366060256958, -7.254267692565918], + [-7.146578311920166, -1.5657498836517334], + [-6.237253189086914, -2.154740810394287], + [4.7041335105896, 7.136229515075684], + [-5.00222635269165, 6.6558074951171875], + [-4.4553327560424805, -2.283545970916748], + [4.9840521812438965, -0.33201277256011963], + [-1.9210655689239502, 1.5779762268066406], + [-3.4583070278167725, 5.658175468444824], + [-4.289318561553955, -2.753554105758667], + [-3.8410966396331787, -4.420584678649902], + [5.351094722747803, 7.1864213943481445], + [-4.920704364776611, 5.339628219604492], + [2.622260808944702, 6.151264190673828], + [2.685628652572632, -8.356500625610352], + [-7.872409343719482, -1.4222474098205566], + [-2.5195424556732178, -0.5678646564483643], + [-4.583425045013428, -1.5403510332107544], + [2.655123710632324, -6.897491455078125], + [0.09038566797971725, -0.15905635058879852], + [2.3904364109039307, -3.852393865585327], + [-0.519096314907074, -1.8958311080932617], + [-3.0102121829986572, 3.49169659614563], + [-0.9876959323883057, -0.21516850590705872], + [9.028033256530762, -2.503807544708252], + [2.0825629234313965, 0.809939444065094], + [-4.505549907684326, -2.7029917240142822], + [2.5890891551971436, -5.237915992736816], + [4.4916157722473145, 6.943103313446045], + [-0.6706625819206238, 4.509694576263428], + [4.152529716491699, -0.37531477212905884], + [-5.893283367156982, 3.9981820583343506], + [-4.504745960235596, -2.869405746459961], + [-5.530246734619141, -3.633636713027954], + [8.06049633026123, -2.1054084300994873], + [-0.2434360384941101, 10.375711441040039], + [6.329504489898682, -0.8287712931632996], + [-4.871326923370361, 5.1968255043029785], + [-5.665038108825684, 5.831768035888672], + [-5.058594226837158, -1.3206223249435425], + [-5.078243732452393, -3.249074697494507], + [-4.84749174118042, 5.460498809814453], + [3.0274736881256104, -4.55037784576416], + [1.42722749710083, -7.826925277709961], + [-5.433808326721191, 6.617534637451172], + [-3.8780901432037354, -2.5771830081939697], + [6.41885232925415, -1.4613693952560425], + [-6.456436634063721, 2.2562620639801025], + [-2.2447903156280518, 0.610379695892334], + [-3.9923593997955322, 4.818714141845703], + [1.9395606517791748, 2.7541892528533936], + [1.6932928562164307, -3.4144041538238525], + [-4.198277950286865, -1.5307759046554565], + [-4.570704460144043, -1.5864742994308472], + [-5.562246799468994, -2.3059349060058594], + [-0.3487923741340637, 9.009642601013184], + [9.486594200134277, -2.74544358253479], + [-5.429844379425049, 1.6687235832214355], + [-8.234135627746582, -0.3047668933868408], + [2.733680009841919, -4.631605625152588], + [-3.2966902256011963, -0.48308035731315613], + [1.8847651481628418, -3.607360601425171], + [-4.024046897888184, 6.071545600891113], + [-1.9333139657974243, 2.1274471282958984], + [-4.839748382568359, -3.312021493911743], + [-3.1354262828826904, 0.5925233960151672], + [-5.017224311828613, -3.888523578643799], + [-5.3068647384643555, -1.7374404668807983], + [-0.41556596755981445, 9.639852523803711], + [-0.024617411196231842, 0.04434674605727196], + [2.0396037101745605, 5.780228137969971], + [-0.3717026114463806, 10.60676383972168], + [-4.6677141189575195, -3.258322238922119], + [2.280225992202759, 1.1395913362503052], + [2.066315174102783, -7.430755615234375], + [-0.9829457998275757, 1.5491358041763306], + [-4.478813648223877, -4.139070510864258], + [1.2996065616607666, -5.960662841796875], + [-5.034393310546875, -2.231478452682495], + [2.572723388671875, -5.6207427978515625], + [-0.3316555619239807, 10.80189037322998], + [-3.0450689792633057, 4.796468734741211], + [-6.078332424163818, -1.7836436033248901], + [-5.208720684051514, -2.9533114433288574], + [2.482994794845581, -3.821782112121582], + [-6.647238731384277, 7.221234321594238], + [-3.2254416942596436, -1.3569176197052002], + [-3.8232243061065674, -1.2448116540908813], + [-1.9573156833648682, 0.039014335721731186], + [0.17506730556488037, 0.7328665852546692], + [2.80092191696167, -6.961757659912109], + [-5.4811835289001465, 4.722655296325684], + [0.2060697078704834, -5.301664352416992], + [-5.145208835601807, 4.040365695953369], + [-0.4193264842033386, 9.565133094787598], + [-4.057499885559082, 5.886739253997803], + [-5.9900617599487305, 7.384822845458984], + [-0.3030504584312439, 10.261323928833008], + [-3.2257766723632812, 5.333395481109619], + [-0.38115060329437256, 11.008638381958008], + [-2.4601151943206787, 0.20037400722503662], + [-1.8480947017669678, 1.9747413396835327], + [8.37511920928955, -2.4290096759796143], + [2.254096746444702, -3.773268461227417], + [-2.4711592197418213, 1.5149149894714355], + [-3.813514232635498, -3.156632661819458], + [-7.3210859298706055, 9.025978088378906], + [1.104851484298706, -6.30809211730957], + [7.916628360748291, -2.2387397289276123], + [2.0757296085357666, -10.777472496032715], + [2.2316973209381104, -6.080513000488281], + [2.2923333644866943, -3.8213746547698975], + [-2.2731754779815674, 5.689570903778076], + [2.250354051589966, -5.646237850189209], + [1.4037761688232422, -7.915081977844238], + [-3.3660709857940674, -1.0963250398635864], + [-5.953108310699463, 5.752773284912109], + [3.015314817428589, -4.524464130401611], + [-1.8036812543869019, 5.99985408782959], + [-0.9654976725578308, -1.6272356510162354], + [-4.631421089172363, 4.228625297546387], + [4.6037774085998535, 6.977814197540283], + [-8.355428695678711, -1.2328245639801025], + [-4.8293890953063965, -2.741590976715088], + [-0.3901825547218323, 9.907194137573242], + [-5.029649257659912, -3.0499937534332275], + [-5.48944616317749, -1.7621058225631714], + [-4.075893402099609, -2.080157995223999], + [-5.198387622833252, 3.96528697013855], + [2.7395060062408447, 0.7870951890945435], + [7.390613079071045, -2.673737049102783], + [2.5526294708251953, -2.5064899921417236], + [-1.8425172567367554, -1.8125485181808472], + [8.402416229248047, -3.343425989151001], + [-4.46923303604126, -1.4222220182418823], + [-5.975941181182861, -2.751189947128296], + [-7.698596477508545, 9.536887168884277], + [-4.695874214172363, 6.97567081451416], + [5.187587261199951, 7.053291320800781], + [0.04459207504987717, 9.517871856689453], + [1.6814385652542114, 5.117429733276367], + [-2.810696840286255, 0.3424748182296753], + [-5.281834602355957, 7.909361362457275], + [-3.310046434402466, 5.886900901794434], + [-2.494652032852173, 0.6489728689193726], + [4.857672691345215, 0.11224570870399475], + [-2.746656656265259, 2.7164313793182373], + [-4.799914836883545, 2.7488667964935303], + [3.151508331298828, -4.945328712463379], + [2.569114923477173, -6.920557975769043], + [-7.283926486968994, 8.830076217651367], + [-5.037707805633545, 0.7675842642784119], + [-3.561967611312866, -1.2381819486618042], + [-2.5400099754333496, 2.0055465698242188], + [9.702239990234375, -2.7200541496276855], + [-2.4635043144226074, 0.9010007977485657], + [1.1727118492126465, -6.804221153259277], + [-5.451590061187744, -3.969287633895874], + [-2.4135096073150635, 0.5477609038352966], + [-3.8998091220855713, 1.0952762365341187], + [-8.077104568481445, -1.148437261581421], + [-0.5036081671714783, 8.868090629577637], + [8.350333213806152, -2.315748453140259], + [-4.786832332611084, -1.9061247110366821], + [0.7523308992385864, -6.365907192230225], + [4.8656744956970215, -0.9527530074119568], + [-4.334666728973389, -5.743902206420898], + [-7.89233922958374, -0.9712600708007812], + [-1.5550854206085205, 0.7455624938011169], + [8.927340507507324, -2.5562241077423096], + [-6.4003825187683105, 7.502882480621338], + [-6.121462821960449, 5.119457244873047], + [-0.28027188777923584, 8.95037841796875], + [-1.547731876373291, 2.122417449951172], + [-3.5380194187164307, -0.8153062462806702], + [5.734716892242432, -1.3418433666229248], + [-6.009750843048096, 8.1128568649292], + [-0.2749308943748474, 10.527524948120117], + [-3.2964560985565186, -1.3964027166366577], + [3.1041388511657715, -4.670036315917969], + [-2.7053213119506836, 1.805732250213623], + [-4.296947002410889, -2.0408499240875244], + [1.4265971183776855, -4.925025939941406], + [-5.9158830642700195, 7.18587589263916], + [-5.281961917877197, -1.5063375234603882], + [2.7018489837646484, 0.9000951647758484], + [9.149352073669434, -2.6513137817382812], + [-2.270794153213501, 2.394463062286377], + [-4.596913814544678, -0.6338585019111633], + [5.923415184020996, -2.398362159729004], + [-7.888809680938721, -0.7372667789459229], + [-4.788836479187012, -3.7206828594207764], + [1.8671488761901855, -4.023492813110352], + [-4.716383934020996, -1.383803129196167], + [-5.066715240478516, 6.817808151245117], + [-5.237706661224365, -1.2035561800003052], + [2.5674195289611816, -4.142574787139893], + [-7.3131842613220215, -1.632837176322937], + [-2.8549630641937256, 5.062766075134277], + [-6.268517971038818, 4.783953666687012], + [-2.301231622695923, 1.5213770866394043], + [-0.3114127516746521, 10.718332290649414], + [-0.20757246017456055, 9.86060905456543], + [-7.19014310836792, -1.8291172981262207], + [6.300907135009766, -1.795005440711975], + [-2.7607548236846924, 2.5869967937469482], + [-1.7620476484298706, -1.9174566268920898], + [-0.7867037653923035, 9.382676124572754], + [0.03384944796562195, -1.6004022359848022], + [2.8230621814727783, -4.421088695526123], + [-1.8996745347976685, 2.0701851844787598], + [2.2876222133636475, -6.437321186065674], + [-0.15331071615219116, 10.388776779174805], + [2.5307135581970215, 6.39577579498291], + [7.793812274932861, -2.0523412227630615], + [-6.968313694000244, -1.2774337530136108], + [3.2807929515838623, 1.0828534364700317], + [-2.5233664512634277, 2.2743022441864014], + [-1.1662651300430298, 1.6252954006195068], + [1.459657907485962, -2.7178733348846436], + [5.333442211151123, -1.1607650518417358], + [-4.930902004241943, 6.102688312530518], + [-7.987048625946045, -0.9788472652435303], + [-3.6026885509490967, 5.539441108703613], + [-5.09120512008667, -1.3624306917190552], + [-2.4824154376983643, 1.7594650983810425], + [0.6200240254402161, -3.2144765853881836], + [1.223766565322876, 0.7602701187133789], + [2.3695263862609863, -5.364195346832275], + [-0.38278549909591675, 10.827540397644043], + [-4.093353748321533, -3.8602607250213623], + [-3.57080340385437, -3.1425530910491943], + [-0.15680181980133057, 9.980228424072266], + [-5.763831615447998, 6.998244762420654], + [5.818877220153809, -1.07541024684906], + [-6.6378655433654785, -0.3593043088912964], + [2.5133657455444336, -6.989015579223633], + [2.520160436630249, -4.0841875076293945], + [-5.231454372406006, -0.7012475728988647], + [-1.1415338516235352, -1.2454347610473633], + [-0.23108649253845215, 9.911924362182617], + [-3.423929214477539, 6.86769962310791], + [-5.965334892272949, -1.8635154962539673], + [-5.721062183380127, 1.8869637250900269], + [-0.6316514611244202, 10.068164825439453], + [8.331061363220215, -2.546332597732544], + [6.117501735687256, -3.986680507659912], + [-3.5631327629089355, 5.3990607261657715], + [-0.4442949891090393, 9.149343490600586], + [4.25136661529541, -4.931035995483398], + [5.028319835662842, -1.876062035560608], + [7.365833759307861, -2.122581958770752], + [2.2013189792633057, -4.092500686645508], + [2.1239445209503174, 5.063806533813477], + [10.183460235595703, -2.7967369556427], + [-3.9859604835510254, 5.5264482498168945], + [-6.3613505363464355, 8.58328914642334], + [-2.2182323932647705, 2.385805130004883], + [-2.3322510719299316, 4.970450401306152], + [0.23990365862846375, -4.082589149475098], + [-2.3958542346954346, 0.6222877502441406], + [-4.841950416564941, 4.362484455108643], + [9.131845474243164, -2.5707056522369385], + [-0.2182498574256897, 9.599714279174805], + [-2.8078131675720215, -2.9901959896087646], + [-1.3818751573562622, -0.8811439275741577], + [1.8052632808685303, 5.569754600524902], + [-5.942739009857178, -2.9036269187927246], + [-4.314439296722412, 6.554159641265869], + [-4.398802280426025, 7.77744722366333], + [-0.2998158931732178, 9.684405326843262], + [-6.367703914642334, 2.6120502948760986], + [2.8161160945892334, -4.243759632110596], + [-1.6798038482666016, 4.84727668762207], + [2.367788553237915, 5.8698201179504395], + [1.5931646823883057, 5.5585198402404785], + [-0.4426570534706116, 10.26207160949707], + [3.90411639213562, 6.788032531738281], + [-5.362703800201416, -3.1311638355255127], + [-5.443812847137451, -0.5333231091499329], + [-5.480592250823975, -2.675410509109497], + [2.758605718612671, -4.177109718322754], + [-5.904721736907959, 4.96604585647583], + [3.492359161376953, 6.829780578613281], + [-4.014553546905518, 4.365800857543945], + [-0.1611681580543518, 9.655670166015625], + [6.53950309753418, -2.2232587337493896], + [-3.1765878200531006, -1.0944983959197998], + [4.0519938468933105, 6.808479309082031], + [-2.034287452697754, 0.9813389778137207], + [-5.00200080871582, -0.08111011981964111], + [1.2615866661071777, -6.412457466125488], + [-2.899256467819214, 1.4099620580673218], + [0.12510311603546143, 8.696270942687988], + [9.0691556930542, -2.5280849933624268], + [-5.656602382659912, -3.0359857082366943], + [2.4540255069732666, 0.7759851217269897], + [-2.490760087966919, 6.155663013458252], + [-1.36539888381958, 1.7637701034545898], + [-2.841531991958618, 2.9916069507598877], + [-4.440827369689941, -2.4558167457580566], + [-3.429283857345581, -4.607112884521484], + [9.187049865722656, -2.506171941757202], + [-0.2871025800704956, 7.882063865661621], + [-5.510344505310059, -3.434084177017212], + [4.42298698425293, 7.003650665283203], + [2.774165153503418, -7.035090923309326], + [0.4763285517692566, 0.3968076705932617], + [0.432683527469635, -5.659402370452881], + [-3.6065776348114014, -0.22613096237182617], + [-3.166865110397339, -1.4590580463409424], + [3.1179230213165283, -4.669665336608887], + [-4.910264015197754, 4.277502059936523], + [-4.1823410987854, -2.8796727657318115], + [-5.049344539642334, -1.8383585214614868], + [-3.6078081130981445, -1.5524452924728394], + [0.540167510509491, -5.440704345703125], + [-4.752307415008545, -3.574639320373535], + [-2.880748987197876, 3.121188163757324], + [-2.6941051483154297, 2.432518482208252], + [-3.521655797958374, -2.03299880027771], + [-3.0084011554718018, -1.6739964485168457], + [-3.590202808380127, -2.1853771209716797], + [-5.508450984954834, -2.429825782775879], + [-0.32121890783309937, 11.33956527709961], + [0.20531201362609863, 6.766592979431152], + [-0.2626280188560486, 9.200687408447266], + [-5.091683864593506, -3.557683229446411], + [-1.0961623191833496, 10.316032409667969], + [0.8986120223999023, -6.1796064376831055], + [0.4808751940727234, 4.99465274810791], + [-5.134243965148926, 6.497966766357422], + [-9.21664047241211, -1.0517200231552124], + [0.35319533944129944, -0.19230294227600098], + [-0.24753081798553467, 9.824832916259766], + [-2.8820619583129883, 0.8232659101486206], + [-4.524170398712158, -3.7679595947265625], + [5.354255199432373, -1.1187745332717896], + [9.888251304626465, -2.7467691898345947], + [3.359863042831421, -5.546603202819824], + [-6.876078128814697, -1.7014321088790894], + [-4.259122848510742, 3.0225107669830322], + [6.1574578285217285, -1.1855645179748535], + [-2.0949575901031494, 0.45424044132232666], + [-6.392895221710205, -3.0347580909729004], + [-4.494650363922119, -1.8141319751739502], + [2.828451633453369, 0.8775705695152283], + [-5.622255802154541, 3.069268226623535], + [9.488551139831543, -2.6536717414855957], + [-6.624150276184082, 7.997045516967773], + [-3.9982059001922607, 6.153558731079102], + [-8.397760391235352, -1.1568098068237305], + [5.454786777496338, -0.9864339232444763], + [-5.714560031890869, 3.3563435077667236], + [2.8001749515533447, -4.226954460144043], + [1.9667491912841797, 5.433255195617676], + [1.9173786640167236, 5.41610050201416], + [2.990758180618286, -4.559261322021484], + [-3.742292881011963, -2.972334623336792], + [-6.453939914703369, 8.191322326660156], + [-5.197292804718018, 4.668801307678223], + [-4.497566223144531, -2.3520846366882324], + [-3.614915132522583, -2.7950751781463623], + [-3.0254104137420654, -0.339192271232605], + [-6.203609943389893, 6.728884696960449], + [-4.341935157775879, -0.659434974193573], + [6.6620259284973145, -1.629311442375183], + [2.389777898788452, 6.125811576843262], + [1.084824562072754, 0.5479356050491333], + [-5.483035564422607, 6.413005828857422], + [2.708024263381958, -7.5027971267700195], + [-4.360445499420166, 3.3684799671173096], + [-4.647209644317627, -2.9727163314819336], + [2.140319347381592, 5.201947212219238], + [-5.516417980194092, 3.5603907108306885], + [6.798971652984619, -2.124354839324951], + [-1.3823859691619873, -0.954818606376648], + [5.809174060821533, 7.6075286865234375], + [2.5412633419036865, -7.502007484436035], + [-5.460163593292236, 3.5618720054626465], + [2.538790702819824, -3.881124973297119], + [-2.113764762878418, 2.804269552230835], + [-4.167205333709717, -4.916268348693848], + [-6.974271297454834, -0.843511164188385], + [0.116474948823452, -1.0924290418624878], + [3.328399896621704, -5.249619007110596], + [-1.5374871492385864, -0.789139986038208], + [0.8075310587882996, 0.26219987869262695], + [-5.141844272613525, 1.4692100286483765], + [-7.219634532928467, -1.5665565729141235], + [4.702630519866943, 6.474161148071289], + [-4.032931327819824, -2.0777413845062256], + [5.872182369232178, -1.1756738424301147], + [-4.641418933868408, 5.531377792358398], + [-4.44509744644165, -5.504151344299316], + [-1.8958908319473267, 2.203964948654175], + [9.102067947387695, -2.6030871868133545], + [1.9312989711761475, -9.475237846374512], + [-4.5402045249938965, 0.43690603971481323], + [2.2718751430511475, 5.2166595458984375], + [-2.070286989212036, 2.412989854812622], + [0.05092596262693405, -0.24092471599578857], + [-4.3719482421875, 5.938869953155518], + [-4.393506050109863, -2.623701333999634], + [-5.215737819671631, -3.2622532844543457], + [-2.542309045791626, 1.6041343212127686], + [-4.8099446296691895, -3.4181134700775146], + [-3.665886878967285, -4.4392218589782715], + [3.403470993041992, -3.732609748840332], + [-6.020935535430908, 5.354259490966797], + [-5.101918697357178, 0.1894564926624298], + [-4.798577308654785, 7.466358184814453], + [-3.693877935409546, 0.14048326015472412], + [-3.8632946014404297, -2.420560121536255], + [-5.317897319793701, -2.1751492023468018], + [5.1075968742370605, 7.2580766677856445], + [-4.532471179962158, 6.486874580383301], + [-3.1870384216308594, -1.2633249759674072], + [1.814969778060913, 5.571849822998047], + [-4.86948823928833, -2.0874111652374268], + [-0.2508297562599182, 9.430404663085938], + [0.8363832235336304, 5.510180473327637], + [-2.3135945796966553, 2.662463426589966], + [2.182695150375366, -5.278451919555664], + [-4.464026927947998, -3.663879632949829], + [2.870344877243042, -5.721530914306641], + [-0.2675929665565491, 9.24539566040039], + [-3.0400593280792236, -1.8098217248916626], + [-1.7298107147216797, 1.8831453323364258], + [-5.528503894805908, -2.007185459136963], + [-5.977967739105225, -3.7666263580322266], + [-2.4917585849761963, 4.953841209411621], + [-5.260592937469482, -1.9359041452407837], + [-3.0693552494049072, -1.3606468439102173], + [-5.1543097496032715, -2.903275728225708], + [-4.116940975189209, 4.3421502113342285], + [-1.508545160293579, -0.24500101804733276], + [2.43044114112854, -7.529746055603027], + [1.2941021919250488, -5.865899562835693], + [0.017768673598766327, -4.682803630828857], + [3.267967700958252, -5.2387895584106445], + [1.9487237930297852, -8.688278198242188], + [-5.869445323944092, -0.6231110692024231], + [2.098015069961548, 0.3681222200393677], + [-6.572415351867676, 8.157631874084473], + [-4.5210795402526855, -2.174931526184082], + [-6.831476211547852, -0.8847083449363708], + [-2.8310694694519043, 0.843508243560791], + [9.791720390319824, -2.9562366008758545], + [-2.081815719604492, 6.131794452667236], + [9.576921463012695, -2.699991464614868], + [-4.605969429016113, -0.4143328070640564], + [-0.20089054107666016, 9.750265121459961], + [-3.853832960128784, -0.8643732070922852], + [0.09321670979261398, 5.257438659667969], + [-2.1400301456451416, 0.9886476993560791], + [-6.958416938781738, 8.501655578613281], + [-4.1815996170043945, 4.478528022766113], + [-0.35240429639816284, 11.569195747375488], + [-5.546162128448486, -1.284227728843689], + [-2.2664308547973633, 2.318892002105713], + [-0.05425802618265152, -4.321987152099609], + [9.180187225341797, -2.550180673599243], + [-3.9339234828948975, -1.8233705759048462], + [1.9384934902191162, -4.222809791564941], + [-3.5781242847442627, -2.270214319229126], + [3.1619462966918945, -4.735713958740234], + [-4.825104236602783, -2.7887444496154785], + [3.1194355487823486, -4.740289688110352], + [-4.652725696563721, -3.5261240005493164], + [-2.3356385231018066, 5.270124435424805], + [-3.451545476913452, -2.9054079055786133], + [6.192253589630127, -2.3746418952941895], + [3.045520782470703, -4.5685038566589355], + [-3.575119733810425, -3.565927505493164], + [2.209507703781128, -3.541778564453125], + [-1.1557650566101074, 10.038022994995117], + [3.1807119846343994, -4.755944728851318], + [-0.18626940250396729, 9.888917922973633], + [-3.0641729831695557, -3.365079641342163], + [-4.614945888519287, 2.637897491455078], + [6.612570285797119, -1.4173294305801392], + [4.894150733947754, -2.292424440383911], + [-6.1070027351379395, -1.0441393852233887], + [-4.7068047523498535, -1.6109726428985596], + [-5.3597941398620605, -2.183502674102783], + [-5.134986400604248, -2.9621405601501465], + [-4.931063652038574, 6.963238716125488], + [-4.268985271453857, 4.449006080627441], + [-3.6109507083892822, 3.916980028152466], + [-6.699700355529785, 8.03573989868164], + [-1.7162522077560425, 0.3393486738204956], + [-5.595522403717041, 5.091268539428711], + [-6.390703201293945, -1.5977100133895874], + [-0.2113112509250641, -0.8503462672233582], + [-6.876988410949707, 8.397719383239746], + [-5.407118320465088, 6.981801986694336], + [-4.6806721687316895, -3.809809446334839], + [-1.7654459476470947, -0.621692419052124], + [-4.226962566375732, -2.69184947013855], + [-4.984807968139648, 5.279519081115723], + [-4.788717746734619, -5.86298942565918], + [2.9320130348205566, -4.473901271820068], + [0.8515810966491699, -5.038191795349121], + [-5.076395511627197, -3.1668739318847656], + [-6.228915691375732, 7.84523868560791], + [1.0228192806243896, -6.867516040802002], + [-5.088602542877197, -4.192240238189697], + [-4.427680015563965, 6.7435197830200195], + [-5.851099014282227, -0.740857720375061], + [-3.959080457687378, -0.8348277807235718], + [0.08481108397245407, -0.8349876403808594], + [-4.031396865844727, 3.4047744274139404], + [-2.846721887588501, -0.9950343370437622], + [6.6179304122924805, -2.323096990585327], + [-5.129937648773193, 5.930508136749268], + [1.2241125106811523, -2.5452022552490234], + [2.583127021789551, -3.861614942550659], + [5.215312957763672, 7.036404609680176], + [0.47754234075546265, -6.07043981552124], + [-4.935445785522461, 0.3300706744194031], + [0.7459146976470947, 5.64784049987793], + [-2.447575330734253, 2.389930486679077], + [2.005420446395874, -6.2046427726745605], + [-4.76173210144043, 5.458250999450684], + [-6.836666584014893, -0.5016897916793823], + [3.360475778579712, -5.1421003341674805], + [-4.525428295135498, -2.711458444595337], + [5.125546455383301, -1.0643349885940552], + [-2.0744388103485107, 2.460675001144409], + [-5.836069583892822, 1.6057358980178833], + [-4.243982315063477, 3.187969923019409], + [-2.505181074142456, -2.221173048019409], + [-4.0732808113098145, -1.7717870473861694], + [-0.16228988766670227, -0.6020764708518982], + [-7.824197292327881, -1.512529730796814], + [-4.165756702423096, -2.7121877670288086], + [3.0774614810943604, 4.67071008682251], + [-2.7720301151275635, 2.730837821960449], + [-0.5287207961082458, 11.586801528930664], + [3.193965435028076, 6.209693908691406], + [-0.47862106561660767, -1.2819215059280396], + [3.040313482284546, -4.664495468139648], + [-7.607710361480713, -1.5048274993896484], + [-4.459370136260986, 3.6364917755126953], + [0.4840978980064392, 0.3085699677467346], + [-5.357140064239502, -3.8118607997894287], + [-3.52435040473938, 3.9950454235076904], + [-3.71394944190979, -2.8246400356292725], + [-2.1985061168670654, 2.1924257278442383], + [-2.335153341293335, 0.6337387561798096], + [-0.3561931252479553, 10.850228309631348], + [-2.4109842777252197, 0.47744220495224], + [-7.293118000030518, 8.887859344482422], + [-5.284060478210449, -3.0350029468536377], + [-5.6731977462768555, -1.3853241205215454], + [-6.8893866539001465, 8.305997848510742], + [-5.2501749992370605, 1.6010618209838867], + [-6.640738487243652, 8.234758377075195], + [-0.82175213098526, -1.9105045795440674], + [-2.9190149307250977, 3.267185926437378], + [2.345245122909546, -8.514566421508789], + [-3.400348424911499, -2.7290701866149902], + [-0.46715566515922546, -0.550394594669342], + [1.853150486946106, 5.132091522216797], + [-4.9794111251831055, -2.4197123050689697], + [0.6199702620506287, -0.593833327293396], + [-3.4566352367401123, -3.515519618988037], + [-4.992380142211914, 4.698355674743652], + [2.0771501064300537, 5.36860466003418], + [0.9913161396980286, -7.537046432495117], + [-5.22170877456665, 1.9864917993545532], + [1.298499345779419, -3.183704376220703], + [-4.450342178344727, -3.4002296924591064], + [9.428955078125, -2.5672309398651123], + [1.695772647857666, -7.070619106292725], + [0.42115747928619385, -6.163773536682129], + [-0.3016412854194641, 10.63272476196289], + [-5.464160442352295, -2.5628955364227295], + [-4.873851299285889, -2.6937172412872314], + [-0.9923939108848572, 9.20542049407959], + [0.359403133392334, 4.727199554443359], + [-2.191943883895874, 1.544331669807434], + [2.9545180797576904, -4.605441093444824], + [-4.805598258972168, 2.10319447517395], + [2.6196770668029785, 5.5214033126831055], + [-5.145334720611572, -2.0823872089385986], + [-5.072323322296143, -3.120769739151001], + [1.2349995374679565, 5.5905561447143555], + [0.8659576177597046, -6.245060920715332], + [4.38720178604126, -1.3716282844543457], + [8.231339454650879, -2.3781750202178955], + [-1.2643604278564453, -1.2837177515029907], + [-2.4172327518463135, -0.45808711647987366], + [5.326059341430664, 7.647442817687988], + [4.888401985168457, -1.198142409324646], + [-4.475849628448486, 6.684679985046387], + [-4.695393085479736, -0.37686413526535034], + [0.5383718609809875, -0.6314160823822021], + [-4.369235038757324, -1.7575732469558716], + [-2.3051323890686035, 1.4619358777999878], + [2.9041781425476074, -7.767983436584473], + [2.6526358127593994, -3.9739701747894287], + [-5.581817626953125, -2.4863502979278564], + [5.368088245391846, 7.65907096862793], + [-4.94738245010376, 7.199801921844482], + [-4.395192623138428, -3.3675217628479004], + [0.22456678748130798, -0.597118079662323], + [-5.538639545440674, -2.364853858947754], + [-4.697048664093018, 2.4648773670196533], + [-7.409632205963135, 9.417234420776367], + [-5.6317596435546875, 7.843052864074707], + [2.4252145290374756, -3.9130828380584717], + [8.349818229675293, -2.1291496753692627], + [-3.0679829120635986, 5.2116265296936035], + [4.501858711242676, 6.842428207397461], + [2.9161040782928467, -7.250391960144043], + [7.638603687286377, -2.572800397872925], + [-2.0025839805603027, 0.2685808539390564], + [8.576653480529785, -2.582003116607666], + [4.72247314453125, -4.861668109893799], + [-2.8978254795074463, 2.941047430038452], + [-2.5329067707061768, 1.5477399826049805], + [-6.569547653198242, -0.760334312915802], + [3.160309314727783, -4.7388834953308105], + [0.012652121484279633, -0.8652229309082031], + [9.611242294311523, -2.6750242710113525], + [-6.097761631011963, 1.9815980195999146], + [-4.472314834594727, -5.066884994506836], + [-2.4042906761169434, 1.87736976146698], + [-5.176802158355713, -4.852906227111816], + [2.967083215713501, -4.465807914733887], + [-2.3387279510498047, 2.3412952423095703], + [-4.010909080505371, -1.361728549003601], + [-2.151679039001465, 2.9218130111694336], + [2.3604202270507812, -5.172695159912109], + [-2.563432455062866, 0.6939746141433716], + [6.564406871795654, -1.7299526929855347], + [2.0277040004730225, 5.646237373352051], + [1.737856149673462, 0.9061065912246704], + [-4.793147563934326, 1.8165618181228638], + [-4.239603042602539, -1.3051373958587646], + [1.6900538206100464, -7.046142578125], + [-0.2503179907798767, -1.7240886688232422], + [6.677433013916016, -2.5562050342559814], + [4.19974946975708, -2.277228832244873], + [-2.3961362838745117, 4.4226274490356445], + [2.451859712600708, -4.180090427398682], + [-3.684415578842163, -0.9656153321266174], + [-4.971998691558838, 5.884181976318359], + [-4.681640148162842, -3.474834680557251], + [-4.830299377441406, -3.5066492557525635], + [2.678030252456665, -6.374834060668945], + [-0.19091111421585083, 10.15738582611084], + [-2.8868777751922607, 4.914327621459961], + [9.221534729003906, -2.640320301055908], + [-3.116851329803467, 6.449681282043457], + [3.7027950286865234, -2.7557010650634766], + [6.0507683753967285, -3.0184617042541504], + [5.840897560119629, -1.0783449411392212], + [2.9191653728485107, -6.189093589782715], + [3.4285545349121094, 6.64309024810791], + [-6.259909152984619, -2.2929468154907227], + [-4.059571743011475, -1.9896334409713745], + [-5.7901692390441895, -3.74751877784729], + [-2.9837698936462402, 2.3468687534332275], + [-6.142782688140869, 5.169152736663818], + [-3.2036631107330322, 4.736430644989014], + [2.3711211681365967, -4.269599437713623], + [-4.163543701171875, -2.241448402404785], + [-5.6710524559021, -3.563694715499878], + [-5.057760715484619, 1.1467288732528687], + [-2.4792304039001465, 1.9928172826766968], + [-5.138614177703857, -2.01212215423584], + [-5.037485122680664, -2.905412435531616], + [2.5782506465911865, -4.571588516235352], + [-5.956058025360107, -0.15160048007965088], + [-4.414877414703369, -4.470131874084473], + [5.779201984405518, -1.1378488540649414], + [-6.390114784240723, -2.277669668197632], + [-2.254913330078125, 0.632530689239502], + [0.3783809542655945, -5.613192558288574], + [-4.317929744720459, -4.5344367027282715], + [-5.173901081085205, 8.567423820495605], + [-6.171546459197998, -2.56709623336792], + [1.8756122589111328, 4.0685601234436035], + [5.637008190155029, -1.6564655303955078], + [-4.596833229064941, -2.105703592300415], + [-2.8539319038391113, -4.0457444190979], + [-4.605316638946533, 3.087737560272217], + [2.209113121032715, -2.447726011276245], + [-0.22123810648918152, -0.696443498134613], + [-5.849221706390381, 5.1770782470703125], + [-2.3795106410980225, -2.592219591140747], + [-5.063424110412598, -1.093271017074585], + [-3.5898637771606445, 5.860282897949219], + [-2.7886390686035156, -0.07277548313140869], + [1.8515808582305908, 5.565839767456055], + [2.334714651107788, -4.6021647453308105], + [-4.294656753540039, -6.5912933349609375], + [-3.6445040702819824, -5.120896339416504], + [-3.6164352893829346, -1.6225718259811401], + [-5.055140018463135, 2.7295782566070557], + [-5.3401265144348145, -2.7966883182525635], + [2.7315688133239746, 6.462336540222168], + [0.11874949187040329, 10.208398818969727], + [-5.815182685852051, -1.302261233329773], + [-4.429133892059326, -3.647036552429199], + [-5.035292148590088, 6.522638320922852], + [-1.4031291007995605, 1.5295637845993042], + [-3.6803090572357178, -2.9289705753326416], + [2.3422775268554688, -7.3026909828186035], + [-2.106163263320923, 2.1235318183898926], + [-0.6218668222427368, 0.15108588337898254], + [2.0604088306427, -4.569246292114258], + [-0.34093350172042847, 11.644668579101562], + [-4.813932418823242, -3.0115108489990234], + [-7.542582035064697, 9.346920013427734], + [5.6094489097595215, -1.3446531295776367], + [1.7311198711395264, 4.814789295196533], + [-7.328169345855713, 9.102531433105469], + [-3.600297212600708, -4.81620979309082], + [8.403343200683594, -2.990597724914551], + [-3.2855260372161865, -2.5830838680267334], + [-4.369767189025879, -0.5350894331932068], + [-4.645547389984131, 3.836052894592285], + [-3.9250495433807373, 3.281093120574951], + [-6.012523174285889, 3.9209911823272705], + [-7.881594181060791, -1.0392115116119385], + [-0.18319392204284668, 9.722469329833984], + [0.49736160039901733, 2.445908308029175], + [10.189447402954102, -2.813967227935791], + [-5.560416221618652, 4.64634895324707], + [2.4664018154144287, -3.797820568084717], + [2.276128053665161, -5.839094161987305], + [-4.667247772216797, -0.42149317264556885], + [5.732175350189209, -1.4264174699783325], + [-5.905702114105225, 2.2937262058258057], + [-5.28385066986084, 6.264564514160156], + [-6.871112823486328, 8.598997116088867], + [-3.7850399017333984, 5.444301128387451], + [-0.3699546456336975, 10.758110046386719], + [-5.488087177276611, 4.700281143188477], + [-1.0082695484161377, 5.380489826202393], + [-4.897369384765625, -2.9834563732147217], + [-2.284102201461792, 1.070900321006775], + [2.7858216762542725, -4.71535587310791], + [8.747628211975098, -3.185558557510376], + [-2.2221202850341797, 0.9727747440338135], + [4.723714351654053, 7.068022727966309], + [6.038790225982666, -2.139286756515503], + [-4.763521194458008, 7.056433200836182], + [2.8455207347869873, -4.333133220672607], + [-0.2531527876853943, 9.958642959594727], + [-4.924363613128662, 4.427421569824219], + [-5.390961170196533, -3.340880870819092], + [9.642582893371582, -2.867082357406616], + [-5.5443034172058105, 5.067462921142578], + [-2.5420281887054443, 2.618879556655884], + [-0.23889172077178955, 8.743233680725098], + [-6.714279651641846, 8.72147274017334], + [-4.405921936035156, -4.022282123565674], + [-3.0699851512908936, 5.315925121307373], + [4.819273471832275, -0.7406813502311707], + [-6.666645526885986, -1.6977308988571167], + [0.5263883471488953, 5.503292560577393], + [-5.418290138244629, 3.7206013202667236], + [-1.9918016195297241, 2.817164421081543], + [-0.3550708591938019, 8.055822372436523], + [-5.791189670562744, -1.484226942062378], + [6.905538082122803, -1.9635107517242432], + [-6.5895562171936035, 3.639279365539551], + [-0.4462541937828064, 11.246597290039062], + [-5.243343353271484, 6.245901107788086], + [2.575356960296631, -3.978351593017578], + [-2.899484872817993, 2.420034408569336], + [-2.3586857318878174, 0.2869061231613159], + [7.209371089935303, -4.1246161460876465], + [-5.166904449462891, 5.941504955291748], + [-5.769185543060303, -2.2469873428344727], + [-6.344165325164795, 7.547809600830078], + [-3.3285186290740967, 4.833191394805908], + [-2.49633526802063, 1.5368688106536865], + [-2.515742778778076, 1.7016503810882568], + [0.3912971615791321, -0.051956404000520706], + [-5.495540618896484, 5.802173614501953], + [-4.36484432220459, 6.508880138397217], + [-5.1426873207092285, 6.563356399536133], + [-6.548908710479736, -1.7174590826034546], + [4.235107898712158, 6.553739070892334], + [1.6522109508514404, 5.21181583404541], + [-0.5469241738319397, 9.535629272460938], + [7.389039516448975, -2.1014275550842285], + [7.36317777633667, -2.063715696334839], + [-2.7786824703216553, 1.9308351278305054], + [8.578880310058594, -2.4083235263824463], + [-6.840054035186768, 8.503885269165039], + [-6.6877055168151855, -2.0852713584899902], + [-0.17519816756248474, -0.8210151195526123], + [9.170455932617188, -2.53397274017334], + [-2.035507917404175, 5.289649486541748], + [-4.6708784103393555, -5.7786970138549805], + [2.3062291145324707, -8.782106399536133], + [2.1112637519836426, 5.805415153503418], + [7.4634270668029785, -2.677375316619873], + [0.8939027786254883, -6.713399410247803], + [7.410715579986572, -1.7154358625411987], + [-2.6096506118774414, 3.287506580352783], + [2.5992395877838135, -3.9402339458465576], + [-3.2459676265716553, -3.6757521629333496], + [-4.017267227172852, 5.905889511108398], + [-2.692243814468384, 5.463079452514648], + [6.454899787902832, -1.3488085269927979], + [-5.051377773284912, 6.256720542907715], + [-6.431192874908447, -0.9194393157958984], + [2.0472025871276855, 3.866438865661621], + [2.1494383811950684, 5.920035362243652], + [7.126671314239502, -1.385515570640564], + [7.786121368408203, -2.016958475112915], + [-2.068415880203247, 2.0553698539733887], + [8.051846504211426, -2.4614126682281494], + [10.34721851348877, -2.866334915161133], + [0.9149573445320129, -6.403718948364258], + [-3.618751287460327, -4.52317476272583], + [-0.34744030237197876, 9.713844299316406], + [-0.8966934680938721, 9.656854629516602], + [2.9081509113311768, -5.066895484924316], + [1.4242647886276245, 4.771035194396973], + [8.447728157043457, -2.281512975692749], + [8.150128364562988, -2.5590479373931885], + [-3.6496405601501465, -5.030506134033203], + [1.674570083618164, 5.034179210662842], + [-4.975500106811523, -3.1533854007720947], + [-4.113506317138672, -2.5741846561431885], + [9.097065925598145, -2.533656358718872], + [-3.7958343029022217, 3.2149441242218018], + [5.5802435874938965, -3.0148708820343018], + [-5.464056968688965, 4.258569240570068], + [-2.701308250427246, -0.37382078170776367], + [-4.883490562438965, 7.04390811920166], + [-5.043223857879639, -1.9815341234207153], + [-3.300182342529297, -0.5535612106323242], + [8.043963432312012, -2.6836624145507812], + [3.0017240047454834, -4.515682220458984], + [2.8369057178497314, -4.842050075531006], + [-4.167183876037598, -2.0699918270111084], + [-2.837233543395996, 2.9538381099700928], + [2.831458330154419, -4.276712894439697], + [-5.9451117515563965, 4.534666061401367], + [1.8704267740249634, -6.935935974121094], + [-5.276073455810547, 7.364832878112793], + [1.735959768295288, -7.081791877746582], + [-2.3644821643829346, 0.6103297472000122], + [-4.617166996002197, 4.175667762756348], + [-5.612707614898682, -0.9099112749099731], + [6.835319995880127, -5.322811603546143], + [2.0775091648101807, 1.9800726175308228], + [1.211862564086914, -5.90980339050293], + [-2.2113614082336426, 1.1988276243209839], + [-6.141208171844482, 6.991391181945801], + [-4.066345691680908, -1.7581995725631714], + [3.326186418533325, 5.83024787902832], + [-4.493291854858398, 0.7892864942550659], + [-6.225102424621582, 0.6209852695465088], + [1.228308916091919, 3.7758231163024902], + [-2.7545554637908936, 2.250792980194092], + [-5.860835552215576, 3.305428981781006], + [2.119567632675171, 5.813714027404785], + [-6.323335647583008, 2.9527173042297363], + [2.3531856536865234, -4.994865417480469], + [-2.4238107204437256, 5.51716423034668], + [7.133786678314209, -1.7670801877975464], + [-5.111308574676514, -3.676753044128418], + [2.0206379890441895, 5.293033599853516], + [0.8816088438034058, 5.323799133300781], + [-4.939866542816162, -2.709003210067749], + [1.923889398574829, -6.412625789642334], + [-3.586423635482788, -2.9192888736724854], + [-1.3787459135055542, -0.5945483446121216], + [1.392466425895691, 5.47969913482666], + [-6.373440265655518, -2.00014066696167], + [-5.577783107757568, 1.3836491107940674], + [2.2145512104034424, -2.932764768600464], + [1.324159860610962, -6.378904342651367], + [2.3718841075897217, -3.7941806316375732], + [-5.289487361907959, -2.93155837059021], + [-6.04107141494751, 5.876084804534912], + [1.2297375202178955, 0.5260601043701172], + [8.618067741394043, -2.1979470252990723], + [-5.711167812347412, -3.0449464321136475], + [1.1826107501983643, -6.417923927307129], + [-5.440281867980957, -4.66853141784668], + [-4.807764530181885, 5.800086975097656], + [2.780996084213257, -4.478200912475586], + [-1.2573870420455933, -0.32252010703086853], + [-2.494816303253174, 0.6386469006538391], + [1.899583101272583, 5.076845645904541], + [-3.2959554195404053, -3.7299606800079346], + [-4.216160297393799, 3.390927791595459], + [3.09356951713562, -4.6529741287231445], + [1.4029209613800049, 1.2129924297332764], + [2.230933666229248, -9.499998092651367], + [-0.6430554986000061, 12.256540298461914], + [3.3009450435638428, -4.926782608032227], + [-0.2322443723678589, -1.2081125974655151], + [-2.760725259780884, -1.1866475343704224], + [3.13771915435791, -4.706095218658447], + [-4.387585163116455, 6.970499038696289], + [-5.819334506988525, -2.3191163539886475], + [2.7457807064056396, -6.250727653503418], + [-5.505223751068115, 1.2762500047683716], + [0.9995463490486145, -6.066112518310547], + [-0.35051149129867554, 12.11298942565918], + [8.778814315795898, -2.324397563934326], + [-6.083432197570801, 3.2348244190216064], + [6.077678203582764, -5.911039352416992], + [-0.6017597317695618, 5.705569267272949], + [-5.9817657470703125, 5.984928131103516], + [-5.180776119232178, -2.383476972579956], + [-3.1262929439544678, -2.5931289196014404], + [-5.445552349090576, -0.6910120844841003], + [2.4138059616088867, -3.9494094848632812], + [-4.6795148849487305, -2.513178825378418], + [5.529164791107178, -5.171987533569336], + [6.143258571624756, -3.3301475048065186], + [-3.3423001766204834, 3.383047580718994], + [-3.4444143772125244, -4.242488861083984], + [0.24170318245887756, -0.4613831043243408], + [-3.801128625869751, 3.5103447437286377], + [-5.612894535064697, -2.0922837257385254], + [-4.351165294647217, 3.725407123565674], + [-1.7999516725540161, 0.48859262466430664], + [0.32453203201293945, -0.9360135793685913], + [-5.146933078765869, -2.7346279621124268], + [-0.222731351852417, 9.169391632080078], + [1.3979053497314453, -6.666115760803223], + [2.6896989345550537, -4.657411575317383], + [-3.314147710800171, -1.0334049463272095], + [-0.041695185005664825, 8.955137252807617], + [-0.13318133354187012, -0.6410080194473267], + [-0.11396563798189163, 9.88399887084961], + [-6.085504055023193, 8.07348918914795], + [-0.04637659341096878, 5.536230087280273], + [-2.622857093811035, 2.0982542037963867], + [-0.1854439377784729, 9.53738784790039], + [2.2682454586029053, -8.159786224365234], + [-4.388858795166016, -3.8325510025024414], + [-2.594550371170044, -1.189037799835205], + [-3.017573595046997, -2.90914249420166], + [5.764451026916504, -2.5241785049438477], + [0.5664746165275574, -0.6462609171867371], + [-4.560535907745361, -3.8038294315338135], + [-4.3804192543029785, -2.016050338745117], + [-2.43037748336792, -1.1362624168395996], + [-1.7960418462753296, 8.213525772094727], + [7.920853137969971, -2.4997270107269287], + [-4.521965503692627, -2.1373627185821533], + [2.3999102115631104, 6.532806396484375], + [-0.20098435878753662, 10.900144577026367], + [1.317218542098999, -8.115933418273926], + [-0.050630487501621246, -1.2292628288269043], + [7.564207553863525, -2.759810209274292], + [-5.695338726043701, 6.005552291870117], + [0.8736828565597534, -0.0031419210135936737], + [8.479241371154785, -2.477992296218872], + [-6.055902481079102, -1.1152634620666504], + [-5.01637077331543, -0.9607957601547241], + [-0.23189589381217957, -1.0434964895248413], + [9.501445770263672, -2.636711359024048], + [3.156575918197632, -4.864105701446533], + [-4.7894487380981445, -1.994953989982605], + [0.11802869290113449, 9.730542182922363], + [1.9498627185821533, -6.111982822418213], + [0.1487310528755188, 10.319650650024414], + [-4.366396427154541, -4.631455421447754], + [-0.060503698885440826, -0.9787025451660156], + [-6.122251033782959, -2.8650944232940674], + [3.210240125656128, 5.616690635681152], + [2.0105228424072266, -3.9295389652252197], + [2.556917667388916, -4.2472734451293945], + [-6.219913959503174, -1.8426299095153809], + [-1.6085755825042725, -1.3834346532821655], + [0.9930921196937561, -6.497281074523926], + [-6.668800354003906, 8.100021362304688], + [-0.2512747049331665, 9.863447189331055], + [-4.912023544311523, 1.2777589559555054], + [-2.3891761302948, 2.0793750286102295], + [-0.8158339858055115, -3.72115421295166], + [-3.878735065460205, -1.2628997564315796], + [-4.927392482757568, 2.630641460418701], + [-3.9888112545013428, -1.8213621377944946], + [-1.5184800624847412, -0.7517824172973633], + [-4.351935863494873, -2.044872522354126], + [8.666934967041016, -2.3987724781036377], + [9.36596965789795, -2.6176955699920654], + [3.180263042449951, -5.033361911773682], + [-5.1971282958984375, -2.4071764945983887], + [4.972445487976074, -0.9578887224197388], + [-3.8192994594573975, -2.6988632678985596], + [-6.22000789642334, -2.591123342514038], + [6.967903137207031, -1.971543788909912], + [9.305150032043457, -2.6035120487213135], + [-6.045063495635986, 7.895915508270264], + [-2.419180393218994, 1.135371446609497], + [-0.14153122901916504, 9.275952339172363], + [-6.204545021057129, 3.493316888809204], + [2.077824831008911, 5.550835609436035], + [-5.110222339630127, 3.2269790172576904], + [-5.518814563751221, 6.196425914764404], + [2.3283777236938477, -4.01912784576416], + [8.809483528137207, -2.419896125793457], + [-5.425388336181641, 6.736303329467773], + [-2.213019609451294, 2.7927539348602295], + [-0.24240583181381226, 11.015958786010742], + [0.584918200969696, 2.1288821697235107], + [-3.2990219593048096, 5.954105854034424], + [-3.8642022609710693, -1.4740506410598755], + [-4.835655689239502, -2.4518303871154785], + [-3.6189544200897217, -0.3755885362625122], + [-4.82009744644165, -2.7917850017547607], + [-1.4826946258544922, 8.860179901123047], + [7.12815523147583, -1.8360975980758667], + [-5.85585880279541, -1.7976089715957642], + [-4.398745059967041, -0.030684594064950943], + [1.959369421005249, 0.6194150447845459], + [-5.867249011993408, 8.036208152770996], + [-0.47366994619369507, 9.091455459594727], + [-0.4598451256752014, 10.840578079223633], + [-5.0789971351623535, -2.302050828933716], + [-8.188886642456055, -1.5240422487258911], + [8.69215202331543, -2.4733476638793945], + [-0.1329231560230255, -0.5178784132003784], + [-3.8776955604553223, -2.9731521606445312], + [2.944201707839966, -4.719536304473877], + [2.548983097076416, -4.853024959564209], + [2.737025499343872, -4.093134880065918], + [0.3123971223831177, 9.33798599243164], + [-5.045577526092529, -3.2632462978363037], + [-0.2307921051979065, 10.555370330810547], + [-5.178274631500244, -3.1322033405303955], + [7.979798793792725, -1.9859390258789062], + [2.558415174484253, -7.736107349395752], + [8.166470527648926, -2.369055986404419], + [0.24210026860237122, -4.369326114654541], + [-1.954857587814331, 0.38437536358833313], + [0.3762156367301941, -4.352563858032227], + [5.815629482269287, 7.506670951843262], + [7.270761966705322, -2.251195192337036], + [3.508084297180176, -0.3992997705936432], + [-1.5325911045074463, 5.944170951843262], + [-6.9052958488464355, -1.2847118377685547], + [-6.436984539031982, 4.275036811828613], + [10.136212348937988, -2.793612241744995], + [-2.7072739601135254, -4.706057548522949], + [-4.275314807891846, -2.1823508739471436], + [-7.081948757171631, -0.8919202089309692], + [-1.7773627042770386, -1.2870900630950928], + [-6.876232147216797, -1.7397902011871338], + [-5.293702125549316, 4.814493179321289], + [-0.24295777082443237, 10.126107215881348], + [-4.682796955108643, -2.9453232288360596], + [10.208224296569824, -2.812880516052246], + [2.8665876388549805, -4.3197431564331055], + [-2.9858365058898926, 3.123284101486206], + [-3.111152410507202, -2.154888868331909], + [3.091371536254883, -4.654605865478516], + [-1.6721519231796265, 2.2405495643615723], + [-4.9005279541015625, 1.267104983329773], + [-2.8294730186462402, -3.90616774559021], + [1.3258837461471558, 0.6046105623245239], + [-2.514845609664917, -2.8708138465881348], + [2.3229918479919434, -3.9059267044067383], + [1.4007741212844849, 3.872680902481079], + [-4.225031852722168, 4.555654048919678], + [-0.2113296091556549, -1.7042526006698608], + [2.710278272628784, -8.10272216796875], + [2.4070851802825928, -8.044522285461426], + [-2.3617703914642334, 1.860394835472107], + [-4.478799819946289, -3.6346898078918457], + [-8.090357780456543, -1.1435073614120483], + [-4.084706783294678, -4.21064567565918], + [-2.767634630203247, 1.7115099430084229], + [-4.354583263397217, 4.174330234527588], + [-2.9676616191864014, 5.729248046875], + [-0.23341667652130127, -0.9770983457565308], + [3.539889097213745, -2.802436590194702], + [1.9891440868377686, 2.5082266330718994], + [-1.8303298950195312, 1.8603731393814087], + [-3.3129265308380127, -2.0665783882141113], + [-0.7575771808624268, 4.122518539428711], + [5.481746196746826, -0.9929664134979248], + [-4.303236484527588, -2.90423321723938], + [3.2802038192749023, -5.2888078689575195], + [-4.259371280670166, -2.2876245975494385], + [1.0046210289001465, 0.847631573677063], + [2.0841100215911865, -6.683307647705078], + [-4.802193641662598, 6.303463935852051], + [-4.32226037979126, 7.910740852355957], + [2.9117650985717773, -4.6015706062316895], + [1.2972464561462402, 4.8260087966918945], + [-7.283749103546143, 8.853703498840332], + [-1.9246124029159546, -0.6282995939254761], + [-0.2923465669155121, -1.9090057611465454], + [-5.076358795166016, -3.1221847534179688], + [-5.8105998039245605, 6.972643852233887], + [8.159086227416992, -1.9674307107925415], + [-0.6525970697402954, -1.0943734645843506], + [-5.899163722991943, 3.716014862060547], + [-4.774742603302002, 8.121647834777832], + [-2.944439172744751, 5.898889064788818], + [6.724164962768555, -2.391261339187622], + [-1.1427645683288574, -1.4509103298187256], + [1.4552477598190308, -7.22800350189209], + [-5.016020774841309, -2.4993135929107666], + [-0.8362272381782532, 0.10022814571857452], + [0.6799359321594238, -6.366162300109863], + [3.405771255493164, -5.538800239562988], + [0.29883426427841187, -0.5365153551101685], + [-2.62957763671875, 5.489551544189453], + [-6.733717441558838, 8.448249816894531], + [-2.593432664871216, 2.4152917861938477], + [7.9090189933776855, -2.183364152908325], + [-5.3524041175842285, -4.117460250854492], + [-2.346903085708618, 1.4827773571014404], + [-7.406889915466309, -1.8609570264816284], + [-4.470617771148682, -0.9371609091758728], + [-0.6786357760429382, -1.3773983716964722], + [-0.7652263641357422, 8.601839065551758], + [10.248308181762695, -2.8300681114196777], + [8.489258766174316, -2.485036849975586], + [-2.5316600799560547, 2.112424373626709], + [0.4345943331718445, -0.2489878535270691], + [-4.990180492401123, -3.46258807182312], + [-0.0959857776761055, 10.485311508178711], + [0.5104647278785706, -1.2617679834365845], + [5.121582508087158, -1.0604225397109985], + [-5.071468353271484, 0.7937673330307007], + [-4.700977802276611, -2.7884349822998047], + [-2.1729748249053955, 2.4313929080963135], + [2.967874765396118, -4.6114397048950195], + [2.4599838256835938, -3.0974924564361572], + [-4.800247669219971, -3.975266695022583], + [1.7977794408798218, 5.6197967529296875], + [8.570904731750488, -2.4221837520599365], + [6.4702982902526855, -1.2752403020858765], + [9.61484432220459, -2.754974603652954], + [-2.7627761363983154, 5.9257307052612305], + [-7.714174747467041, -1.2843014001846313], + [2.3022043704986572, -9.554471969604492], + [3.1530964374542236, -4.730249404907227], + [2.8024230003356934, -4.536509037017822], + [-4.586578845977783, -3.9449965953826904], + [-5.428900241851807, -0.305875301361084], + [-5.364563465118408, 1.6493333578109741], + [3.1935441493988037, -0.16051241755485535], + [-0.2635902762413025, 9.368616104125977], + [2.6460487842559814, -5.972886085510254], + [-2.5744731426239014, 2.001044273376465], + [1.2610434293746948, -7.654170513153076], + [-5.015707492828369, 1.5695291757583618], + [-4.820908069610596, -1.3795133829116821], + [-6.779959201812744, 8.407363891601562], + [-4.79899263381958, 6.519157409667969], + [3.897963762283325, 7.227523326873779], + [-5.199441432952881, -4.172905921936035], + [-6.910446643829346, -0.8022009134292603], + [0.32004719972610474, -0.951636016368866], + [9.430703163146973, -2.617751359939575], + [3.870548725128174, 5.6043267250061035], + [2.05529522895813, 5.332466125488281], + [-1.4744157791137695, 1.8008192777633667], + [8.121271133422852, -2.42376971244812], + [-1.922428011894226, 2.002026319503784], + [-1.7281323671340942, 1.8850497007369995], + [-4.75050163269043, -1.3362072706222534], + [2.78731632232666, -4.107134819030762], + [-4.479517459869385, 5.265345096588135], + [0.0808224007487297, -0.7247791290283203], + [-1.791951298713684, 1.9091018438339233], + [-2.1641554832458496, 2.249295473098755], + [2.887350082397461, -1.1249889135360718], + [-5.427718639373779, 8.422530174255371], + [2.3125407695770264, -5.43666934967041], + [-3.437944173812866, -1.2951205968856812], + [2.953613519668579, 6.261303901672363], + [1.1902351379394531, -7.803422927856445], + [-4.558913230895996, -3.3050403594970703], + [-8.149476051330566, -1.3543264865875244], + [-1.338314414024353, -2.4666011333465576], + [1.781184434890747, 0.3200960159301758], + [-6.39336633682251, 7.625923156738281], + [9.997971534729004, -2.721052408218384], + [-2.129608392715454, 0.7221230268478394], + [-4.917197227478027, 1.6469264030456543], + [-6.76253080368042, -1.4659638404846191], + [-1.1310268640518188, -0.7495447397232056], + [3.1638240814208984, -4.802546501159668], + [2.9731223583221436, -4.839179515838623], + [-2.403012752532959, -3.0218188762664795], + [-4.863070487976074, -2.385383367538452], + [3.176206350326538, -4.936180114746094], + [1.899836778640747, -9.148033142089844], + [2.9885571002960205, -4.513012886047363], + [-1.0450968742370605, -0.296527624130249], + [1.017058253288269, -7.051093578338623], + [2.316549062728882, -9.294881820678711], + [1.8028557300567627, -0.09147357940673828], + [-4.185950756072998, -2.539530038833618], + [6.376730918884277, -1.1516473293304443], + [0.8797828555107117, -5.920206069946289], + [-2.7019331455230713, 2.1110470294952393], + [-2.4806509017944336, 2.0936191082000732], + [-2.262554883956909, 0.5022076964378357], + [-0.12096262723207474, -0.8571696877479553], + [-0.31261947751045227, -1.0125011205673218], + [2.3219923973083496, -5.0558180809021], + [-6.666550159454346, 8.23716926574707], + [2.0559165477752686, -9.27926254272461], + [-3.935561418533325, -2.2711398601531982], + [-2.3576040267944336, 1.2387086153030396], + [2.9752888679504395, -4.649821758270264], + [-5.2152180671691895, 6.498190879821777], + [-2.335005760192871, 1.496269702911377], + [6.977171421051025, -1.104373812675476], + [-3.2660014629364014, 4.987009048461914], + [-0.28959131240844727, 7.578396797180176], + [-0.2366674542427063, 9.64335823059082], + [2.028412103652954, 5.194459915161133], + [7.586730480194092, -2.62787127494812], + [-5.1845269203186035, -2.6569745540618896], + [3.358534574508667, -5.122664451599121], + [8.308629035949707, -2.3567631244659424], + [-4.166265964508057, -3.5872442722320557], + [2.5449836254119873, -4.071532249450684], + [-4.750272750854492, -0.26334989070892334], + [4.070384502410889, 0.2493882179260254], + [-5.988537788391113, 3.693185329437256], + [-3.4263288974761963, -2.5762951374053955], + [-1.2770216464996338, 0.6686910390853882], + [-4.6051716804504395, -4.211965560913086], + [-4.583084583282471, 3.309356689453125], + [-0.6877138614654541, -0.2961488962173462], + [-6.143479347229004, -2.1495747566223145], + [-4.443078517913818, -3.155924081802368], + [-2.167541980743408, 2.9138293266296387], + [7.884608745574951, -2.0583488941192627], + [1.521723747253418, 5.250918388366699], + [-2.481330156326294, -1.7815371751785278], + [2.9720122814178467, -6.257166385650635], + [3.090310573577881, -4.967096328735352], + [-5.641913890838623, 2.386383056640625], + [-5.453445911407471, -3.5793840885162354], + [-4.541471481323242, -2.7579054832458496], + [-0.236264169216156, 9.432422637939453], + [2.0718953609466553, -4.948763847351074], + [-4.853368759155273, 2.02201771736145], + [2.620242118835449, -4.05742073059082], + [-7.388132572174072, 9.021312713623047], + [-2.1825263500213623, 1.4218114614486694], + [1.7998480796813965, 3.506871223449707], + [-6.06476354598999, -1.806495189666748], + [1.9476268291473389, -0.03235744312405586], + [2.107597589492798, -6.217187881469727], + [7.8552422523498535, -2.1809136867523193], + [-0.47868067026138306, 10.738130569458008], + [2.0773561000823975, -4.149176597595215], + [6.912564277648926, -2.443603038787842], + [1.6902477741241455, 5.772282600402832], + [3.603076219558716, -3.205397367477417], + [-0.2393016219139099, 9.675124168395996], + [-2.4670212268829346, 2.048154592514038], + [4.04652738571167, -2.648838758468628], + [-1.0811446905136108, -0.5307925343513489], + [2.529254198074341, -3.4347150325775146], + [-2.552858591079712, 1.9085490703582764], + [0.07392828911542892, 5.723878860473633], + [-2.4675188064575195, 0.5775820016860962], + [-2.5710623264312744, -3.2436435222625732], + [3.2166106700897217, -5.702702522277832], + [0.0023259446024894714, -1.1243070363998413], + [-0.2558665871620178, 9.877811431884766], + [1.308793544769287, -0.09821945428848267], + [-4.510892868041992, -2.1270077228546143], + [1.2438130378723145, -2.8355789184570312], + [-0.08296603709459305, 9.523645401000977], + [-0.4396907091140747, 9.033187866210938], + [1.9624474048614502, -3.0637073516845703], + [1.699179768562317, -3.354661703109741], + [2.7637569904327393, -5.507957935333252], + [8.109379768371582, -2.5682382583618164], + [3.0504798889160156, -5.349678993225098], + [-5.339761257171631, 6.5753302574157715], + [-4.320586681365967, 3.3847320079803467], + [-5.88182258605957, 5.98087739944458], + [-5.371687412261963, -1.4267538785934448], + [-3.946075916290283, -3.5303409099578857], + [-1.9299978017807007, -2.5265052318573], + [-3.713393449783325, 5.451160430908203], + [-4.560920238494873, -2.8751540184020996], + [0.24881577491760254, 10.408000946044922], + [-5.732625484466553, 2.940298557281494], + [-6.337880611419678, 7.982234954833984], + [-2.0484957695007324, -0.9340847134590149], + [2.9667723178863525, -4.681772232055664], + [2.0289690494537354, -6.894611835479736], + [-0.3751581907272339, 9.51504135131836], + [-4.481402397155762, 4.210078716278076], + [-3.4905784130096436, -2.520890712738037], + [-6.316962718963623, 3.399249792098999], + [1.9277467727661133, 5.14790678024292], + [-4.812820911407471, 2.495396375656128], + [-0.23490861058235168, -1.212488055229187], + [-2.564361333847046, 5.738755226135254], + [-5.060827255249023, 0.44501394033432007], + [-7.545294284820557, -1.8512452840805054], + [-6.3460869789123535, 5.340456008911133], + [2.3564608097076416, -5.742526531219482], + [2.6203017234802246, -4.607762336730957], + [1.4827969074249268, 4.2491912841796875], + [-4.168144702911377, -2.0302257537841797], + [-3.18880033493042, -1.292351484298706], + [-7.186060428619385, -0.8732553124427795], + [2.957961320877075, -4.6134161949157715], + [-0.8637449741363525, -3.0095889568328857], + [-0.31072157621383667, 11.392030715942383], + [1.5501130819320679, 5.089422702789307], + [-0.2294003963470459, 9.284189224243164], + [7.083624362945557, -2.0055012702941895], + [2.925562620162964, -4.833449840545654], + [-1.0619924068450928, -0.33256426453590393], + [2.040963888168335, -6.6028032302856445], + [-5.492756366729736, 5.512298583984375], + [-2.5710017681121826, -0.33538955450057983], + [-6.145430088043213, 7.916776657104492], + [-3.6798131465911865, -1.555298089981079], + [-1.988240122795105, 0.3389415740966797], + [-2.192509174346924, 1.9116984605789185], + [3.975043535232544, 6.761467933654785], + [2.940380811691284, -4.479907512664795], + [8.095613479614258, -2.2621772289276123], + [-0.2869998514652252, -1.915636420249939], + [3.4150702953338623, 6.589872360229492], + [3.097663164138794, -3.4946413040161133], + [2.6525719165802, -4.0664849281311035], + [-5.4949846267700195, -1.2744600772857666], + [-0.9062873721122742, -0.4250801205635071], + [-0.3193665146827698, 9.198274612426758], + [-0.9917736053466797, 9.288970947265625], + [1.8859325647354126, -9.733870506286621], + [-2.1185672283172607, 2.8576812744140625], + [-2.3641397953033447, -1.6603926420211792], + [-3.9080469608306885, 5.261796951293945], + [-5.391122341156006, 5.041505336761475], + [-4.407548427581787, -1.106991171836853], + [-3.0329010486602783, -0.501495361328125], + [2.2655603885650635, 0.29147863388061523], + [-5.294593811035156, -2.2557718753814697], + [-2.597978353500366, 6.0827956199646], + [-2.4115684032440186, 1.695717453956604], + [-5.720981597900391, 6.0427703857421875], + [-5.9120659828186035, -3.82287859916687], + [-4.926281452178955, 2.334244966506958], + [1.7285890579223633, -8.846166610717773], + [8.391966819763184, -2.2069671154022217], + [-5.2657151222229, 5.840468406677246], + [-1.5964571237564087, 1.6275099515914917], + [0.31792792677879333, -0.42802584171295166], + [-3.858602285385132, -3.5790460109710693], + [-4.2585906982421875, -1.8774203062057495], + [0.19000548124313354, -0.2580763101577759], + [0.3305254578590393, -0.6719719767570496], + [-3.885249137878418, -1.5980613231658936], + [4.4867353439331055, 6.234976291656494], + [-2.1371476650238037, 5.163054466247559], + [4.311633110046387, 6.986015319824219], + [-6.0046467781066895, 7.876751899719238], + [6.364527702331543, -1.3205647468566895], + [-5.309808254241943, 4.380725383758545], + [3.034729480743408, -4.794248104095459], + [-5.1692891120910645, -2.7863919734954834], + [2.6608457565307617, -4.277469635009766], + [-2.094799757003784, -1.3677366971969604], + [-4.262453079223633, -3.1425697803497314], + [1.864487648010254, 0.8665042519569397], + [-7.046518325805664, -1.220969319343567], + [-5.085140228271484, 2.895317792892456], + [-3.3333017826080322, -2.6103568077087402], + [-2.7565925121307373, -0.234375], + [-2.056903600692749, 2.816920757293701], + [-4.419341564178467, -2.349302053451538], + [5.340585231781006, -1.1221532821655273], + [-5.118832111358643, -5.226654052734375], + [-4.985465049743652, -0.9455043077468872], + [-3.398111343383789, 3.6988377571105957], + [2.5512797832489014, -3.996546506881714], + [2.4841439723968506, -4.302643775939941], + [-2.9950320720672607, -1.4971004724502563], + [3.5760669708251953, -0.5988136529922485], + [1.2227919101715088, -6.569737911224365], + [5.425946235656738, -2.89046311378479], + [2.3396358489990234, 3.005974054336548], + [1.7512143850326538, 5.397897720336914], + [2.9303784370422363, -7.587440490722656], + [-4.463005065917969, -1.5981868505477905], + [-0.4224919080734253, 10.9788179397583], + [-5.635107517242432, 7.132426738739014], + [-0.2883259654045105, 10.18697738647461], + [-6.688049793243408, -2.3060390949249268], + [-3.8139443397521973, -5.151911735534668], + [-0.17992240190505981, 10.857863426208496], + [1.9164767265319824, -3.541505813598633], + [7.274212837219238, -1.703293800354004], + [2.198995351791382, 5.247862339019775], + [-4.069882869720459, 6.268644332885742], + [-2.274972677230835, 6.241121768951416], + [6.653937816619873, -2.2199251651763916], + [-3.387136697769165, -2.722397565841675], + [1.4976191520690918, 5.323912143707275], + [-4.034447193145752, -2.815765380859375], + [7.974902629852295, -2.297490358352661], + [6.468536853790283, -1.3392324447631836], + [-5.276263236999512, 7.223888874053955], + [0.03941439837217331, -0.427572101354599], + [2.851116895675659, -2.3246054649353027], + [7.753725528717041, -2.568113088607788], + [-3.898435115814209, -4.555801868438721], + [-5.660428524017334, 5.499311923980713], + [-2.888706922531128, 1.8574519157409668], + [1.8232576847076416, -4.695812225341797], + [-6.318844795227051, -1.446468472480774], + [-2.6156511306762695, 1.4394667148590088], + [-4.2734174728393555, -2.187133312225342], + [2.1416282653808594, 5.574738502502441], + [8.865788459777832, -2.3799593448638916], + [4.945835590362549, -3.375802755355835], + [-0.2887657880783081, 10.231456756591797], + [-7.481359004974365, 9.127779006958008], + [2.170304775238037, -6.6890058517456055], + [-4.280488014221191, -2.6545608043670654], + [0.01570092886686325, 9.878921508789062], + [-2.621701717376709, 6.120376110076904], + [-5.882050037384033, 0.8368713855743408], + [2.998382806777954, -4.927784442901611], + [1.85756254196167, 0.6725674867630005], + [-4.51745080947876, -2.602872610092163], + [-5.058517932891846, -2.804313898086548], + [-4.762092590332031, -6.719414710998535], + [0.03278248757123947, -0.7227684259414673], + [3.0311028957366943, -4.602800369262695], + [-0.9840955138206482, -0.291185587644577], + [-3.581103801727295, -1.1083489656448364], + [-0.31588947772979736, 9.421916961669922], + [-0.4206429123878479, 5.811539173126221], + [2.5488412380218506, 0.7619664669036865], + [-2.2272090911865234, 1.1489486694335938], + [-5.3402886390686035, 6.58413028717041], + [2.945661783218384, -4.622993469238281], + [8.906494140625, -2.4630067348480225], + [-0.27485451102256775, -0.817375659942627], + [-3.94343638420105, -2.0236916542053223], + [-5.585536479949951, 3.0916972160339355], + [-1.3271427154541016, 1.3976540565490723], + [-3.233945608139038, -3.8839564323425293], + [-4.48284387588501, -4.054819107055664], + [2.5860371589660645, -4.005153656005859], + [2.913923978805542, -4.405144691467285], + [-2.1560254096984863, -0.05246317759156227], + [2.4604732990264893, -3.8892569541931152], + [-2.727872610092163, -4.080223083496094], + [-2.545895576477051, 1.7888774871826172], + [-5.949862003326416, 7.011826515197754], + [-6.507713794708252, 7.968006134033203], + [2.323970317840576, -10.94525146484375], + [7.868596076965332, -4.220682621002197], + [-2.4031338691711426, 1.212668776512146], + [1.6094322204589844, -7.420222759246826], + [-5.868529796600342, 7.563041687011719], + [2.572781801223755, -5.293046951293945], + [-5.465295314788818, 8.625736236572266], + [-4.927048206329346, 6.088263988494873], + [0.031901441514492035, -0.9982536435127258], + [-4.518613338470459, -2.8707449436187744], + [-5.685466766357422, 5.956596374511719], + [2.4740750789642334, -6.222409248352051], + [-1.8374052047729492, 2.1199162006378174], + [-4.306548595428467, -1.630094289779663], + [-2.4570813179016113, 1.8351613283157349], + [2.003347873687744, -6.431927680969238], + [-5.326233386993408, 3.8221476078033447], + [-5.000619888305664, -2.468224287033081], + [2.5707473754882812, 0.9040524363517761], + [4.002676010131836, -3.194934606552124], + [-0.1856597661972046, 9.655050277709961], + [4.010566234588623, -0.20834332704544067], + [-4.860670566558838, 2.552729368209839], + [1.9193049669265747, -5.047811508178711], + [5.9424519538879395, -1.186449646949768], + [-0.5713300108909607, 9.103214263916016], + [1.7809374332427979, -8.847929000854492], + [1.986433982849121, 4.774301528930664], + [-5.6304497718811035, 4.453739166259766], + [-5.780429363250732, -2.566915988922119], + [2.8179996013641357, -7.105535984039307], + [8.776230812072754, -2.5081722736358643], + [2.013293504714966, -7.922035217285156], + [2.093366861343384, 5.750096321105957], + [0.060844697058200836, -0.6477431058883667], + [0.9645178914070129, 0.9183124899864197], + [-4.735334873199463, 7.077098846435547], + [-0.3553001880645752, 9.301009178161621], + [1.6562271118164062, 4.888707160949707], + [-2.3853445053100586, 2.5020077228546143], + [-4.620919227600098, -1.9277101755142212], + [-0.8944709300994873, 9.23233413696289], + [3.4878416061401367, -7.223865509033203], + [-5.946195125579834, 6.356273174285889], + [2.1534268856048584, 4.533363342285156], + [6.41784143447876, -5.33260440826416], + [-5.100403785705566, 5.974198341369629], + [-5.600000858306885, 6.449865818023682], + [-3.2917654514312744, 5.425545692443848], + [-2.4730985164642334, 1.8004000186920166], + [1.5659035444259644, 6.146208763122559], + [-4.249379634857178, 4.812112808227539], + [-7.150283336639404, -1.0589522123336792], + [-4.7726664543151855, -2.6270666122436523], + [8.211618423461914, -2.142679214477539], + [-5.138664722442627, 6.035774230957031], + [-5.185623645782471, -5.5921630859375], + [-0.990659236907959, -1.2869516611099243], + [0.7136794924736023, -6.229169845581055], + [-4.596185207366943, -3.6565353870391846], + [-2.1231343746185303, -0.06866270303726196], + [-0.7213107347488403, 1.4764798879623413], + [-5.919916152954102, -1.0305650234222412], + [7.6872172355651855, -2.5144829750061035], + [-6.410363674163818, 8.071557998657227], + [-5.224280834197998, -4.181854248046875], + [4.186375141143799, -3.937781810760498], + [-0.4245300889015198, 9.131416320800781], + [5.333186626434326, -4.075716495513916], + [-6.512117862701416, -0.7542361617088318], + [-0.6454691290855408, 7.7282233238220215], + [2.8087518215179443, -4.313097953796387], + [-4.081897735595703, -4.180792808532715], + [3.062974691390991, -4.497694969177246], + [2.0650856494903564, 5.079957962036133], + [1.6186597347259521, 5.354337692260742], + [-6.421327114105225, -1.127133846282959], + [-5.552785396575928, 5.782553672790527], + [1.7458164691925049, -6.405390739440918], + [-5.397355556488037, 2.0168838500976562], + [-5.4218902587890625, 0.5766942501068115], + [1.4170539379119873, 1.4279669523239136], + [2.6224443912506104, 5.901427268981934], + [-0.34759074449539185, 11.16950798034668], + [2.7970099449157715, -4.3012375831604], + [-0.2956058979034424, 2.175257921218872], + [4.903336048126221, -1.929151177406311], + [-5.104947090148926, 0.5840765237808228], + [-4.343778133392334, -1.1436408758163452], + [-1.0628502368927002, -0.5527312755584717], + [3.254207134246826, 0.890121340751648], + [-5.804118633270264, -2.9876224994659424], + [-6.716762542724609, -1.735430359840393], + [-4.6959967613220215, -3.7614283561706543], + [1.851387619972229, -6.571477890014648], + [-0.15099680423736572, -1.4214553833007812], + [-0.22049182653427124, 9.426719665527344], + [-4.968010425567627, 2.1612768173217773], + [2.909278154373169, -4.431974411010742], + [7.204068660736084, -3.9107062816619873], + [2.050074815750122, -3.243513822555542], + [0.4157128930091858, -0.4690740704536438], + [-5.029362201690674, 1.95647132396698], + [-1.6227478981018066, 0.7325141429901123], + [-6.432277202606201, -1.992071509361267], + [-2.1862800121307373, -4.017294883728027], + [7.193203926086426, -1.527187705039978], + [2.3788580894470215, -3.6269142627716064], + [-6.570520877838135, -0.9504813551902771], + [-3.8808276653289795, -2.7082479000091553], + [-1.2707669734954834, 7.411138534545898], + [-3.645338535308838, -0.5656099915504456], + [6.254814624786377, -3.1928470134735107], + [2.813383102416992, 6.684435844421387], + [-3.5889222621917725, 2.9439117908477783], + [-3.7428038120269775, -5.421769142150879], + [2.7312417030334473, -4.573227882385254], + [8.162958145141602, -2.082494020462036], + [-6.416172027587891, 4.789830207824707], + [4.103969097137451, -3.6444778442382812], + [2.358335256576538, -7.4223313331604], + [-3.6245062351226807, -1.3341838121414185], + [1.302994728088379, -0.09846067428588867], + [5.786904811859131, -2.9701461791992188], + [-0.2663344740867615, 10.93448257446289], + [3.188169240951538, -4.768437385559082], + [-7.834201335906982, -1.710119366645813], + [-3.6529128551483154, 1.5503391027450562], + [-2.2331607341766357, -3.1658575534820557], + [2.7794408798217773, -4.352731704711914], + [-3.183884620666504, 5.845369338989258], + [9.355945587158203, -2.6868114471435547], + [-5.781955718994141, 1.894321322441101], + [3.156137466430664, -5.107687950134277], + [6.862415313720703, -2.580124616622925], + [-3.3579158782958984, 1.1346081495285034], + [2.565912961959839, -3.986767292022705], + [4.966832637786865, -1.1536556482315063], + [-3.5615968704223633, -2.555858612060547], + [-6.751964092254639, 8.498591423034668], + [2.9602231979370117, -4.508828639984131], + [5.41724157333374, -0.9601819515228271], + [-3.650789260864258, -4.586359024047852], + [-2.9352712631225586, -4.552923679351807], + [-2.894282579421997, -1.1929470300674438], + [0.17133191227912903, -0.24444036185741425], + [-3.6804792881011963, -3.411904811859131], + [3.5882766246795654, -2.9643704891204834], + [3.0062477588653564, -4.698702812194824], + [-0.3941897749900818, 9.67041015625], + [-4.173348903656006, -2.502587080001831], + [-3.868457555770874, 0.18685239553451538], + [-0.611343264579773, 9.664892196655273], + [-5.455604076385498, -3.4608094692230225], + [6.745590686798096, -1.5340982675552368], + [1.0988163948059082, 0.21206173300743103], + [-4.8792195320129395, -0.18146175146102905], + [0.8768426775932312, -6.091346263885498], + [1.9786479473114014, -3.488154172897339], + [2.0505759716033936, 1.0644785165786743], + [-3.0191617012023926, 5.3583478927612305], + [3.167001485824585, -2.8002352714538574], + [-2.142594575881958, 2.55359148979187], + [-5.610323429107666, 2.074345350265503], + [-4.141254901885986, -1.9967378377914429], + [-1.8598088026046753, 2.3189897537231445], + [7.195037364959717, -1.699137568473816], + [-2.3255972862243652, 5.502068042755127], + [-1.0604602098464966, -0.4841372072696686], + [-3.8914577960968018, -4.236669540405273], + [-0.0024941042065620422, 8.937620162963867], + [-0.3278510570526123, 10.663612365722656], + [-2.643876791000366, 0.692954957485199], + [-2.559906005859375, 0.1484500765800476], + [-4.352456092834473, -1.131150484085083], + [-5.439600467681885, 1.488014817237854], + [2.83038067817688, -4.253896236419678], + [-1.3939075469970703, -1.3084487915039062], + [-4.516066551208496, -2.203416109085083], + [2.197756052017212, -7.392735958099365], + [2.181298017501831, -3.452219247817993], + [-4.249199390411377, -1.0590285062789917], + [-6.089081764221191, 1.8888221979141235], + [2.544718027114868, 6.215400695800781], + [-5.509294033050537, 6.380368232727051], + [-0.8567668795585632, -0.12774240970611572], + [8.693062782287598, -2.336623430252075], + [-0.6289950609207153, 9.639673233032227], + [-0.2657708525657654, 10.568008422851562], + [-2.2225348949432373, 3.0127010345458984], + [1.9880366325378418, -6.231951713562012], + [-5.285477161407471, 1.2577849626541138], + [3.0034496784210205, -4.653642654418945], + [6.07898473739624, -0.8082584142684937], + [5.730706214904785, -5.290017127990723], + [2.294344186782837, 6.426739692687988], + [5.26442813873291, -1.7036269903182983], + [2.3708953857421875, -5.648874759674072], + [-0.24213266372680664, 9.22150993347168], + [-0.036722250282764435, 9.561933517456055], + [-2.0685696601867676, 2.7250638008117676], + [-2.0744545459747314, -0.6934375762939453], + [-0.39672160148620605, 11.014823913574219], + [-5.232075214385986, -1.9040757417678833], + [-5.237515926361084, 4.532332897186279], + [-6.032479286193848, -2.796062707901001], + [0.8624891042709351, -6.44635534286499], + [-6.874240398406982, -0.7824523448944092], + [-2.0223987102508545, 5.302613258361816], + [-6.228868007659912, -2.264129877090454], + [-6.406556606292725, -3.1212809085845947], + [1.6974742412567139, -3.3515045642852783], + [4.8926167488098145, -0.9454261660575867], + [2.8605897426605225, -4.561872959136963], + [5.488556861877441, -1.0242273807525635], + [-5.878119945526123, 3.117393732070923], + [-0.19663876295089722, 9.53862190246582], + [-4.7154130935668945, -3.7012226581573486], + [-6.082488536834717, 7.276401996612549], + [-4.458311557769775, -2.5536081790924072], + [-0.2563474178314209, 9.853034973144531], + [1.4004175662994385, -2.796832323074341], + [9.030064582824707, -2.440957546234131], + [7.492268085479736, -1.7130285501480103], + [-5.569781303405762, 2.082008123397827], + [-0.0018794015049934387, 9.961116790771484], + [-2.431591510772705, 2.5145015716552734], + [-3.9433505535125732, -0.9695224165916443], + [9.744967460632324, -2.699104070663452], + [3.1054012775421143, -4.654727935791016], + [8.037016868591309, -4.158215045928955], + [-5.101678371429443, 6.906974792480469], + [2.0394508838653564, 5.763282775878906], + [2.677577018737793, -4.463311672210693], + [6.6496052742004395, -1.9796313047409058], + [-4.74376106262207, 3.532247304916382], + [3.446233034133911, -4.984744071960449], + [-5.756766319274902, 2.6325371265411377], + [-2.0084218978881836, 5.732369422912598], + [-1.2276430130004883, -0.9120101928710938], + [-0.3863491415977478, 11.713465690612793], + [-1.166025161743164, -0.9820605516433716], + [0.5082356333732605, -5.543562889099121], + [3.8256776332855225, -0.874882698059082], + [-5.245980739593506, -3.2894928455352783], + [1.5303065776824951, 5.409806251525879], + [0.7570555806159973, -5.606753349304199], + [-5.8837761878967285, 2.5261924266815186], + [-4.663232326507568, 3.2766482830047607], + [5.698624610900879, 7.9571943283081055], + [7.031432151794434, -1.7765426635742188], + [-5.5941243171691895, 2.966029167175293], + [-2.563861608505249, 0.3663432002067566], + [4.363844394683838, -1.0497325658798218], + [0.8993656635284424, -6.068759918212891], + [-5.014406681060791, -1.9517232179641724], + [-4.995788097381592, -2.054295063018799], + [-4.39531135559082, -3.6358225345611572], + [-1.5936577320098877, -0.03786385431885719], + [2.9554011821746826, -4.688451290130615], + [-5.596385478973389, -4.096348285675049], + [6.862989902496338, -2.0154922008514404], + [-4.954029560089111, -1.9002608060836792], + [-4.503228664398193, -2.236420154571533], + [8.38139533996582, -2.2257421016693115], + [-4.410604476928711, 3.834573984146118], + [5.310110569000244, -6.06888484954834], + [-4.877471446990967, -0.7369642853736877], + [-0.13360613584518433, 10.40924072265625], + [-5.268064498901367, 2.7256977558135986], + [-6.1063923835754395, 7.829739570617676], + [-2.797349214553833, -3.385174512863159], + [-4.597311019897461, -4.00142240524292], + [10.631807327270508, -2.9214699268341064], + [0.6588545441627502, 5.541274070739746], + [-9.445335388183594, -0.8877493143081665], + [-2.476392984390259, 6.058939456939697], + [-0.15739813446998596, -0.30208900570869446], + [-2.031662702560425, 5.674663543701172], + [5.441339015960693, -2.430884599685669], + [-6.1131815910339355, -1.7274738550186157], + [-2.2794315814971924, -0.9567877054214478], + [-4.241722583770752, -1.942267894744873], + [-2.6648309230804443, -0.8682410717010498], + [-4.740006923675537, 7.971616744995117], + [6.5101752281188965, -1.1266591548919678], + [-2.244136333465576, -2.713651418685913], + [2.6449692249298096, 0.7135146856307983], + [-0.05349517613649368, 9.003314971923828], + [2.043837308883667, 5.154292106628418], + [-0.21113526821136475, 6.272360324859619], + [-6.666514873504639, 8.244646072387695], + [-2.109816074371338, 2.153752326965332], + [1.538691759109497, 5.559035778045654], + [-2.593230962753296, -2.7647621631622314], + [-4.934672832489014, -2.055445671081543], + [2.7751920223236084, -4.636196613311768], + [-0.16574907302856445, 9.54216194152832], + [-4.936751842498779, 5.112702369689941], + [-5.294148921966553, -2.2576863765716553], + [-6.123236179351807, 7.52844762802124], + [-6.16367244720459, 7.240225791931152], + [1.1880991458892822, 4.870392799377441], + [2.2293317317962646, 5.835376262664795], + [1.7533293962478638, 4.368927001953125], + [1.418412685394287, -7.819886684417725], + [-4.775894641876221, -2.8560688495635986], + [1.266837477684021, 0.7683346271514893], + [-4.173794746398926, -2.5293259620666504], + [-3.0672552585601807, -4.396890640258789], + [1.5520546436309814, 0.11990264058113098], + [-3.79862380027771, -2.618114948272705], + [0.11476724594831467, -3.853489637374878], + [-4.974380016326904, -4.258276462554932], + [8.101980209350586, -1.8872811794281006], + [-4.635807037353516, 5.290765762329102], + [2.1854255199432373, 5.558713436126709], + [-1.962895154953003, 1.4599360227584839], + [5.78346586227417, -1.324373483657837], + [3.078795909881592, -4.82818603515625], + [-4.924239635467529, -0.9169111847877502], + [0.6557520627975464, -0.6940984129905701], + [-0.30414801836013794, 9.812782287597656], + [-5.358092784881592, 4.4303436279296875], + [-5.435571193695068, -2.513115167617798], + [-5.120505332946777, 8.006155014038086], + [-4.857950687408447, -3.1111550331115723], + [-3.7398388385772705, -4.621184349060059], + [1.0962005853652954, 5.071599006652832], + [3.1781647205352783, -4.830248832702637], + [3.1347668170928955, 5.95499324798584], + [1.4949214458465576, -5.593139171600342], + [2.5329034328460693, -5.942829132080078], + [7.261989593505859, -1.8274497985839844], + [2.2292566299438477, -3.9003798961639404], + [7.771334171295166, -3.1422741413116455], + [-4.470886707305908, -0.6172423362731934], + [-2.560349941253662, 1.8731952905654907], + [5.4044647216796875, 7.244908332824707], + [1.776049017906189, 5.099496841430664], + [1.9494960308074951, -4.300715923309326], + [-4.138460159301758, 5.497116565704346], + [9.150428771972656, -2.466928720474243], + [2.138195753097534, -3.6229310035705566], + [-4.100443363189697, 2.8238608837127686], + [5.397828578948975, -1.2361018657684326], + [-5.0368123054504395, -3.4332101345062256], + [1.0745350122451782, 5.062580108642578], + [1.0864168405532837, -3.9294817447662354], + [-6.652889728546143, 8.33566951751709], + [3.280611991882324, -5.123190879821777], + [-3.431983709335327, -0.5360091328620911], + [0.5226745009422302, -5.492918491363525], + [9.209983825683594, -2.4550178050994873], + [-0.08577776700258255, 9.810495376586914], + [-4.672442436218262, -1.5959664583206177], + [8.087675094604492, -2.046907424926758], + [2.5657846927642822, -3.6091458797454834], + [-4.369259834289551, -0.6418001651763916], + [-1.922261357307434, 0.50855553150177], + [-6.359268665313721, 8.097384452819824], + [-5.6235480308532715, 3.5057990550994873], + [2.6476805210113525, -4.932140350341797], + [-0.3772994875907898, -0.3596360683441162], + [-0.20928889513015747, 9.83489990234375], + [7.863785266876221, -2.249694585800171], + [-0.2217845916748047, 9.848447799682617], + [-2.5577309131622314, 4.401137351989746], + [-5.304211616516113, -3.3016512393951416], + [3.2024948596954346, -4.911144256591797], + [-5.580393314361572, 4.316274642944336], + [-2.1944940090179443, 0.9991270303726196], + [-7.504594802856445, -1.9675785303115845], + [-0.21259146928787231, 9.583610534667969], + [-5.457131862640381, 7.085472106933594], + [-5.312316417694092, -2.6135032176971436], + [-6.745055675506592, 3.364814281463623], + [3.0343074798583984, -1.1271249055862427], + [3.0588481426239014, -6.382241249084473], + [-3.4809858798980713, -1.979845404624939], + [2.613281488418579, -4.170857906341553], + [2.6744325160980225, -4.239938735961914], + [1.74132239818573, -3.6118648052215576], + [-0.2419317364692688, 9.93073844909668], + [-4.552833080291748, 5.265146255493164], + [-2.550119161605835, -0.34941110014915466], + [-3.7994110584259033, -3.497871160507202], + [3.1782126426696777, -1.3951929807662964], + [0.25634765625, 5.652749061584473], + [9.30773639678955, -2.6055052280426025], + [-0.11397159844636917, 9.873916625976562], + [-1.169179081916809, 5.469892501831055], + [1.3613955974578857, -6.883790969848633], + [-5.102268695831299, -2.583272695541382], + [-2.015976667404175, 0.46460551023483276], + [-0.08066458255052567, 9.712858200073242], + [-4.239632606506348, -1.3351465463638306], + [-5.104334354400635, -3.600712776184082], + [-6.849968910217285, -1.7719365358352661], + [-0.056515879929065704, 8.668844223022461], + [2.6285226345062256, -6.178671836853027], + [1.2852022647857666, 0.10002639889717102], + [-2.2918035984039307, 1.3195135593414307], + [4.747954845428467, -1.1086177825927734], + [-0.4754828214645386, -1.3076497316360474], + [0.6628533601760864, -0.1186971366405487], + [5.837130069732666, -1.1431804895401], + [4.446210861206055, 6.539302825927734], + [-5.410463809967041, -0.8435133695602417], + [-4.256229400634766, -5.605882167816162], + [8.65714168548584, -2.3412020206451416], + [-7.394372940063477, 9.128917694091797], + [2.6010122299194336, -2.815692901611328], + [2.1525537967681885, -6.179986953735352], + [-6.497155666351318, 3.553568124771118], + [3.2353954315185547, -4.971674919128418], + [1.4786745309829712, -6.8946428298950195], + [6.014208793640137, -1.1800072193145752], + [-4.298014163970947, 1.7162567377090454], + [-2.5354011058807373, 0.23163920640945435], + [2.5078482627868652, -6.8559675216674805], + [-6.96116304397583, 8.443979263305664], + [-2.429054021835327, 2.035280704498291], + [2.198899984359741, -6.750160217285156], + [3.0433855056762695, -4.636815071105957], + [-2.8418524265289307, 5.823408603668213], + [-4.228435516357422, 3.5643680095672607], + [-8.323287010192871, -0.6855818033218384], + [7.217858791351318, -1.6499590873718262], + [2.7496750354766846, -4.164048671722412], + [1.5455174446105957, 0.31293022632598877], + [0.5641359686851501, -0.8891842365264893], + [2.825092077255249, -4.297206878662109], + [-5.889761447906494, -0.19546645879745483], + [-0.32031166553497314, 10.381793975830078], + [-0.3712453842163086, 10.323177337646484], + [-0.22778484225273132, -0.7496399879455566], + [2.06306529045105, -3.2199666500091553], + [-0.17135056853294373, -0.9358423352241516], + [4.0590057373046875, 6.101511001586914], + [10.047969818115234, -2.55353045463562], + [-2.681342601776123, 6.293055057525635], + [3.0013511180877686, -4.511109352111816], + [-3.8278725147247314, 0.016478773206472397], + [-4.622457981109619, 5.310425758361816], + [0.06943600624799728, 11.21652889251709], + [-4.621477127075195, -3.951634645462036], + [-1.1481139659881592, -0.40259507298469543], + [1.918200969696045, 4.996484756469727], + [8.919135093688965, -2.444566011428833], + [-4.555850028991699, 5.988029479980469], + [3.0677921772003174, -7.161561965942383], + [-1.6767343282699585, 2.380418539047241], + [0.03009682148694992, 10.401762008666992], + [2.8977527618408203, -4.707050800323486], + [9.070368766784668, -2.5897674560546875], + [-5.056091785430908, -2.1512458324432373], + [7.655566692352295, -2.0348575115203857], + [9.033803939819336, -2.440315008163452], + [0.8877354264259338, -5.595788955688477], + [-2.948411703109741, 3.0709164142608643], + [-2.1028645038604736, 2.0128324031829834], + [-1.3276095390319824, -1.79596745967865], + [-6.213877201080322, 4.473822116851807], + [1.900863528251648, -4.120138645172119], + [-3.0064613819122314, 6.007079124450684], + [-5.25787353515625, 4.546215057373047], + [-4.616852760314941, -3.043893575668335], + [-2.304220199584961, 1.6457306146621704], + [-2.100787401199341, 0.3551492691040039], + [3.138476610183716, -4.723725318908691], + [-2.56611967086792, 1.6662791967391968], + [-2.244194507598877, -2.250781536102295], + [1.9981939792633057, 5.750356674194336], + [0.3392503261566162, -0.8784388303756714], + [-3.4456708431243896, 5.162504196166992], + [-6.060744285583496, 8.447208404541016], + [-5.949352741241455, 6.761221408843994], + [1.3180701732635498, -5.347955703735352], + [-3.678821086883545, 0.2209336757659912], + [-0.8806092143058777, 10.163373947143555], + [-4.797701835632324, -3.210503578186035], + [-3.915454149246216, -1.5900028944015503], + [4.538036346435547, 7.323187828063965], + [1.075773000717163, -6.117389678955078], + [2.2002899646759033, -7.730652332305908], + [-3.098818063735962, -1.7907007932662964], + [-5.766232967376709, -0.944321870803833], + [2.973327398300171, -4.89969539642334], + [0.3812198042869568, 4.784731864929199], + [-0.4035356640815735, 0.38167518377304077], + [-5.319548606872559, 6.626841068267822], + [-5.642782688140869, -2.2377538681030273], + [-3.580894708633423, -1.6843057870864868], + [1.1565356254577637, -6.842756271362305], + [6.696208477020264, -1.551207184791565], + [-0.9898495078086853, 9.502426147460938], + [1.1996443271636963, -6.950077056884766], + [0.7126994132995605, -5.91303825378418], + [-4.182326793670654, -2.8267982006073], + [-5.201265811920166, -5.506948471069336], + [-1.5608426332473755, -3.122790575027466], + [-4.959023952484131, -2.975271463394165], + [9.545897483825684, -2.7667086124420166], + [8.68241024017334, -2.3364713191986084], + [1.9665956497192383, 5.799717903137207], + [-3.6063263416290283, -3.8105483055114746], + [-5.335358142852783, -3.140763998031616], + [2.3799242973327637, -4.611979961395264], + [-2.5516810417175293, -3.63118577003479], + [-2.7914156913757324, 1.4923031330108643], + [-1.5650054216384888, 8.31985092163086], + [5.203501224517822, 7.0604376792907715], + [3.6173243522644043, 6.006241798400879], + [-6.604826927185059, 7.8409552574157715], + [0.0736527368426323, 8.272112846374512], + [-4.223756790161133, 4.805209636688232], + [-6.302494525909424, 8.15552806854248], + [-0.21336573362350464, 10.055204391479492], + [-0.4085301458835602, -1.3771662712097168], + [2.129132032394409, -6.22825813293457], + [2.768542766571045, -7.5272603034973145], + [-4.841975688934326, 6.484409332275391], + [-5.531472682952881, -3.76617431640625], + [3.1332738399505615, -5.038718223571777], + [-4.291351795196533, 6.000184059143066], + [2.3780863285064697, -4.134458541870117], + [-5.040332794189453, -2.3891336917877197], + [6.582738399505615, -2.961430788040161], + [-2.946005344390869, -3.161442518234253], + [2.334901809692383, -7.032785892486572], + [-4.744424819946289, -3.116572380065918], + [-3.257499933242798, -0.7642368078231812], + [-0.6085715889930725, 11.245380401611328], + [-4.905236721038818, -1.8672879934310913], + [-1.7127196788787842, 1.8326829671859741], + [2.5317137241363525, -7.218844413757324], + [6.925717353820801, -2.0039355754852295], + [-0.2870404124259949, 9.83338451385498], + [-4.622098922729492, -3.0905516147613525], + [-2.171273946762085, 2.4267992973327637], + [-3.9186432361602783, 4.99237585067749], + [-4.946267604827881, -3.590162515640259], + [-5.147143840789795, -3.0369067192077637], + [-5.141225337982178, -3.1266562938690186], + [4.213078498840332, 7.009632110595703], + [1.9955337047576904, -7.571688652038574], + [0.7401598691940308, -6.529162883758545], + [-0.14295345544815063, 9.632590293884277], + [-2.0316951274871826, 2.1648287773132324], + [-7.420836925506592, -1.2675822973251343], + [-0.29562991857528687, 9.393153190612793], + [8.259934425354004, -2.174546003341675], + [0.319667249917984, -0.32911476492881775], + [-7.10391092300415, 3.679830312728882], + [-0.5288471579551697, 9.325202941894531], + [-6.434507846832275, -1.332884669303894], + [-2.3496639728546143, 1.4309443235397339], + [-3.9633724689483643, -1.4287923574447632], + [-5.477114200592041, 2.572444200515747], + [2.9697043895721436, -6.395259857177734], + [6.275021076202393, -1.2421844005584717], + [1.517709493637085, 5.256997585296631], + [-2.344404458999634, 5.323516845703125], + [1.9405238628387451, -4.849689483642578], + [2.081827402114868, 5.255132675170898], + [-3.4075875282287598, -2.7865958213806152], + [2.6202845573425293, -4.096119403839111], + [0.4280429482460022, -0.3699462413787842], + [-2.3854827880859375, 3.2703089714050293], + [-5.182436466217041, 6.773762226104736], + [2.534450054168701, -8.080209732055664], + [2.922722816467285, 1.4407298564910889], + [-2.2758593559265137, -1.2786885499954224], + [-3.0844342708587646, -2.659398317337036], + [3.1867921352386475, -4.955319404602051], + [2.7371513843536377, -4.232492446899414], + [-2.6044225692749023, 1.9184905290603638], + [1.04250168800354, -7.587134838104248], + [-6.042370319366455, 4.124395370483398], + [8.157820701599121, -2.364750862121582], + [-0.26253563165664673, 9.357177734375], + [-6.289730548858643, 7.22547721862793], + [-5.17120361328125, 5.661166667938232], + [-5.23672342300415, -2.947432279586792], + [-4.258749485015869, 3.144887685775757], + [-7.363847255706787, 8.959228515625], + [2.3069674968719482, 5.885608196258545], + [-0.1674882173538208, -1.0293184518814087], + [-7.3743109703063965, -1.5960601568222046], + [-0.20313847064971924, 10.195013046264648], + [1.0692387819290161, -7.29661226272583], + [-7.560781955718994, -1.476089358329773], + [-7.176494121551514, -1.7286933660507202], + [-6.930388927459717, -1.6655299663543701], + [-4.682860851287842, 0.40021026134490967], + [-5.181387424468994, -3.122610092163086], + [-0.5054997205734253, 11.35569953918457], + [1.7098307609558105, 0.9185770153999329], + [-3.672487258911133, 6.2916412353515625], + [7.027792453765869, -4.114774703979492], + [-3.384742498397827, 3.709388017654419], + [8.088757514953613, -1.8836699724197388], + [-3.9830873012542725, -0.9894884824752808], + [2.693873167037964, -3.986741781234741], + [-3.1280438899993896, 3.0923197269439697], + [-5.476294040679932, -1.9879075288772583], + [-0.11687655001878738, 9.486295700073242], + [-1.670053482055664, 1.1319687366485596], + [-3.620368003845215, -1.5230860710144043], + [-4.949841499328613, -1.270046353340149], + [-0.40601906180381775, -0.8380205631256104], + [-1.2003710269927979, -0.6771083474159241], + [2.311231851577759, -5.484548568725586], + [8.952582359313965, -2.479844093322754], + [-5.078823566436768, -3.395940065383911], + [10.456612586975098, -2.8859143257141113], + [1.5478515625, 2.067657232284546], + [6.042657375335693, -1.0146009922027588], + [-2.1102423667907715, 2.2517290115356445], + [-6.1809563636779785, 4.449079990386963], + [-7.0931267738342285, 8.616683006286621], + [-5.206428527832031, 6.519469261169434], + [-4.848851680755615, -3.697746992111206], + [-4.025853157043457, -1.3800019025802612], + [-0.22189509868621826, 7.921262741088867], + [-4.404548645019531, -3.716909170150757], + [-5.0600481033325195, 7.4700212478637695], + [0.1672981083393097, -3.5830576419830322], + [2.8889102935791016, -4.316292762756348], + [-5.2887983322143555, 2.6816349029541016], + [9.072577476501465, -2.588050603866577], + [3.349515199661255, -1.632189393043518], + [-2.07831072807312, 1.64617121219635], + [2.9443776607513428, -4.254273414611816], + [-6.901357650756836, 8.746676445007324], + [0.020313076674938202, -0.7312435507774353], + [-5.662563323974609, -2.119028329849243], + [-5.741875171661377, 7.915875434875488], + [-5.4569573402404785, 6.688363552093506], + [-4.362905502319336, -2.4103479385375977], + [-5.140377998352051, 7.5314106941223145], + [-0.2927572727203369, 10.465286254882812], + [3.165724992752075, -5.065890312194824], + [-1.3868989944458008, -0.7345782518386841], + [-5.010329723358154, -5.753554344177246], + [-4.6336140632629395, 8.174720764160156], + [-4.972856044769287, -2.969141721725464], + [-0.29578134417533875, -1.2294023036956787], + [-3.645616292953491, -2.506316900253296], + [-7.940186977386475, 0.6516566276550293], + [-2.2618768215179443, 2.1400952339172363], + [8.765259742736816, -2.351886034011841], + [-4.334169864654541, 3.2865846157073975], + [-0.3262709975242615, 10.703678131103516], + [-8.209273338317871, 10.022815704345703], + [5.358700275421143, -1.0827707052230835], + [-5.79571008682251, -2.492145538330078], + [-1.3302197456359863, 10.13217544555664], + [-5.287557601928711, 6.9412078857421875], + [-5.353028774261475, -3.0149033069610596], + [-5.184764385223389, -5.960663795471191], + [-3.5507192611694336, -1.5183371305465698], + [-2.2229294776916504, -1.6743354797363281], + [-0.0015541985630989075, 10.22382640838623], + [-4.2817888259887695, 0.48546284437179565], + [5.294376850128174, -5.327428817749023], + [4.624539852142334, -0.9811561107635498], + [3.031419515609741, 0.37405508756637573], + [-4.78334379196167, -2.4323508739471436], + [-2.8420159816741943, 2.8493616580963135], + [1.2949531078338623, -6.795783042907715], + [2.3732242584228516, 6.061807155609131], + [-7.424015522003174, -1.1613911390304565], + [-4.856496334075928, -4.045053958892822], + [-2.338381052017212, 0.9644052982330322], + [-0.8746578097343445, -1.9656063318252563], + [-4.889645099639893, -5.4901556968688965], + [3.148127794265747, -4.712309837341309], + [7.011718273162842, -1.4579771757125854], + [-5.77590799331665, 6.8912672996521], + [1.698845386505127, 5.325213432312012], + [-5.196814060211182, 2.537950038909912], + [0.9034552574157715, 5.514614105224609], + [2.0427405834198, 5.4208173751831055], + [3.003746271133423, -4.653712749481201], + [-0.9619729518890381, -1.5834206342697144], + [1.7268919944763184, 5.371721267700195], + [-5.517571926116943, 6.637956619262695], + [3.309654474258423, -5.08096981048584], + [-7.17629861831665, 8.974003791809082], + [0.22056424617767334, 9.829804420471191], + [-4.284084320068359, -2.352017641067505], + [7.599672317504883, -2.707439422607422], + [-0.2989639341831207, -1.7389050722122192], + [-5.92107629776001, -1.8621313571929932], + [-4.768768787384033, -0.7358460426330566], + [-1.2508883476257324, -2.9082798957824707], + [0.1941811442375183, 9.769306182861328], + [-5.88291072845459, -2.179866075515747], + [-4.734010219573975, 5.583000183105469], + [0.2944934070110321, -0.2767986059188843], + [2.695385694503784, -4.984153747558594], + [2.135953664779663, 1.718908429145813], + [-6.086233139038086, 6.732004165649414], + [-7.050113677978516, 0.3278700113296509], + [2.3002989292144775, -5.746606826782227], + [-4.690306663513184, 6.113556861877441], + [-6.477233409881592, 7.049843788146973], + [-6.644567966461182, 8.281647682189941], + [-5.665848731994629, 7.400215148925781], + [-0.5441486239433289, 9.105908393859863], + [-2.0426206588745117, -3.7916810512542725], + [-4.815094470977783, -2.941321611404419], + [-2.284599542617798, 1.1167017221450806], + [-4.969106197357178, -2.286269426345825], + [-4.749411106109619, -4.727773189544678], + [-7.790180683135986, 9.603376388549805], + [-2.79394793510437, -3.8679006099700928], + [2.251516819000244, 4.734775543212891], + [-2.654103994369507, -4.951198577880859], + [1.943723440170288, 4.991140842437744], + [0.44945454597473145, -0.622363269329071], + [-5.214262962341309, 4.046265125274658], + [-2.4421374797821045, 1.0307193994522095], + [-2.7907869815826416, -2.5981266498565674], + [-4.785358428955078, 1.6990619897842407], + [-4.542984962463379, -0.7105987668037415], + [-5.055372714996338, -3.5138626098632812], + [0.47156399488449097, -6.285865306854248], + [-0.07478807121515274, -0.5637911558151245], + [-8.131093978881836, -0.5656044483184814], + [8.831612586975098, -2.5117905139923096], + [-4.552652359008789, -2.1849305629730225], + [-6.59613561630249, -2.71112322807312], + [3.014301061630249, -4.727662563323975], + [2.118157148361206, -7.04074764251709], + [-1.4988256692886353, 2.342970371246338], + [0.4409443736076355, -5.044544219970703], + [3.6126537322998047, 6.603053092956543], + [2.5753531455993652, -4.408451557159424], + [0.10519259423017502, 9.561992645263672], + [-2.159109115600586, -1.949029803276062], + [2.453625440597534, -4.092473983764648], + [7.462878704071045, -1.9682039022445679], + [-0.21912223100662231, 10.34677505493164], + [-4.033722400665283, -4.261549949645996], + [-4.945540428161621, 7.215036392211914], + [-0.8869919180870056, -1.7781902551651], + [-6.901928901672363, -2.351632833480835], + [-5.752675533294678, -3.837702751159668], + [-2.7152326107025146, -3.5102975368499756], + [-4.887230396270752, 2.8849687576293945], + [4.557790279388428, 7.073240756988525], + [-4.5782952308654785, -3.1703436374664307], + [0.3575751781463623, -6.005252838134766], + [-5.663239002227783, -1.8670605421066284], + [-2.641622543334961, 1.7883082628250122], + [-0.2559470534324646, 9.48379135131836], + [-5.3929009437561035, -0.2959321141242981], + [-2.792904853820801, -1.1403053998947144], + [-2.3873281478881836, 1.6560094356536865], + [-2.734410524368286, 2.9534950256347656], + [-6.773054122924805, 8.483023643493652], + [6.449273586273193, -3.7626707553863525], + [-4.833024024963379, 7.28349494934082], + [-4.981805324554443, -3.484013557434082], + [10.584146499633789, -2.9266369342803955], + [-4.734096527099609, -3.2588722705841064], + [-0.07951415330171585, 9.390172958374023], + [-2.009183168411255, 2.343642234802246], + [2.0728249549865723, 5.613714218139648], + [1.5564576387405396, 4.771970272064209], + [-5.164113998413086, 7.304737091064453], + [2.516033887863159, -4.355279445648193], + [-3.7070865631103516, -4.09906530380249], + [6.517958164215088, -1.480014443397522], + [-3.596566915512085, -0.3514927625656128], + [3.0300076007843018, -4.74705696105957], + [-4.821265697479248, -1.450953722000122], + [-4.51869535446167, -2.2046430110931396], + [-5.449063301086426, -1.942040205001831], + [-5.919780254364014, -3.0505292415618896], + [-6.073829650878906, -2.9659805297851562], + [6.954342365264893, -4.668982982635498], + [-4.931769847869873, 5.132193088531494], + [2.9438557624816895, -4.765557289123535], + [-2.217015266418457, 2.5162129402160645], + [-2.1024067401885986, 4.63442325592041], + [7.393067836761475, -2.0539796352386475], + [-4.657775402069092, -3.208404302597046], + [3.26371693611145, -4.876795768737793], + [-5.78821325302124, 3.0686049461364746], + [-5.557070732116699, -1.9977142810821533], + [7.536238193511963, -1.8880937099456787], + [0.17422449588775635, 8.525732040405273], + [2.6672093868255615, -7.012182235717773], + [-3.6787800788879395, -0.9228018522262573], + [1.808617115020752, -1.5195413827896118], + [-9.647761344909668, -1.191733717918396], + [2.134838819503784, -3.8194692134857178], + [0.9010767340660095, -5.508402347564697], + [-4.89978551864624, 3.435114622116089], + [-3.522181510925293, -4.271492958068848], + [-5.499715805053711, 4.034104347229004], + [1.9771602153778076, 4.9866437911987305], + [10.041346549987793, -2.7886431217193604], + [1.3829491138458252, 1.0853533744812012], + [-2.276073694229126, 1.093812108039856], + [-0.7826788425445557, 1.2590893507003784], + [1.9882533550262451, -9.350873947143555], + [-2.2902657985687256, -0.50677490234375], + [-2.5641582012176514, -0.9949139356613159], + [5.978821754455566, -3.128873109817505], + [-2.279092311859131, 1.9417136907577515], + [-5.792280673980713, -3.50272536277771], + [1.814190149307251, -8.837156295776367], + [-2.4708926677703857, 1.5594269037246704], + [2.7027506828308105, -5.791439056396484], + [-5.7521281242370605, -2.574371814727783], + [-2.9494311809539795, -4.503726005554199], + [-4.993731498718262, 3.116647481918335], + [-6.27215576171875, -0.7767674326896667], + [3.0717921257019043, -4.607337951660156], + [-2.776323080062866, 1.4567023515701294], + [-4.286205291748047, 2.134669303894043], + [-0.17761844396591187, 10.191460609436035], + [-4.540131092071533, -3.331364870071411], + [-3.6094844341278076, -1.504451870918274], + [2.577655076980591, -3.980168104171753], + [8.783555030822754, -2.2317306995391846], + [1.9829437732696533, 4.428685188293457], + [-0.29926031827926636, 10.292290687561035], + [4.742244243621826, -1.0985373258590698], + [-5.91034460067749, 6.11726713180542], + [6.26227331161499, -1.5893839597702026], + [2.476179361343384, -8.274822235107422], + [7.211398124694824, -2.6549320220947266], + [0.843780517578125, -0.041463833302259445], + [-1.658402919769287, -1.314756989479065], + [-1.1795276403427124, -2.4428656101226807], + [2.894315242767334, -4.367374897003174], + [-5.179112434387207, -3.7471628189086914], + [6.577948570251465, -0.5662373304367065], + [1.9126490354537964, -3.1074092388153076], + [1.2143678665161133, 0.27549952268600464], + [2.7952075004577637, -4.270687103271484], + [4.82778787612915, -4.305824279785156], + [1.8332990407943726, 5.478503227233887], + [2.5096590518951416, 6.425668716430664], + [3.235430955886841, -4.871395111083984], + [-2.0505764484405518, 5.1767425537109375], + [8.62209415435791, -2.423053741455078], + [-4.816132068634033, -2.567080020904541], + [-3.2122089862823486, 5.466982841491699], + [-0.4553069472312927, 10.301368713378906], + [-4.629907131195068, -3.968548536300659], + [-5.733489513397217, -2.507269859313965], + [-5.391201496124268, -3.6059508323669434], + [-5.146416187286377, 6.301385402679443], + [-2.361525774002075, -0.008309129625558853], + [1.7594099044799805, 5.351116180419922], + [-0.20607012510299683, 9.37218952178955], + [-6.019704818725586, 6.762581825256348], + [-2.3822078704833984, 6.015773773193359], + [0.20275592803955078, 10.300369262695312], + [-0.4788666367530823, 10.625933647155762], + [3.144843816757202, -4.830554008483887], + [-0.2187398076057434, 9.691282272338867], + [-0.39141005277633667, 10.640380859375], + [1.7027215957641602, 0.5139274001121521], + [-6.695518970489502, -1.550946831703186], + [-5.995570659637451, 7.923274993896484], + [-3.3255324363708496, -2.7650935649871826], + [5.599273681640625, -1.0346043109893799], + [-5.235670566558838, -3.013319730758667], + [2.9586551189422607, 1.0532294511795044], + [-2.596358060836792, 0.6895060539245605], + [-2.7434747219085693, 4.4417805671691895], + [-5.114573955535889, -2.571065664291382], + [1.5890100002288818, 5.183121681213379], + [4.549335956573486, -1.2181657552719116], + [2.326446294784546, 5.223422050476074], + [9.39296817779541, -2.5939829349517822], + [-5.141662120819092, -0.7156863212585449], + [2.5383787155151367, -3.985377550125122], + [-5.149994373321533, 1.5565707683563232], + [-2.267751693725586, 1.049224853515625], + [-5.874969005584717, 7.085306167602539], + [-4.096903324127197, -1.7253634929656982], + [-2.6341018676757812, 4.57139778137207], + [-4.77761697769165, -3.206475019454956], + [1.703321933746338, -2.94816517829895], + [1.8971803188323975, -4.726876258850098], + [8.62863826751709, -2.3158023357391357], + [6.389265537261963, -4.18764591217041], + [-1.865626335144043, 1.523634672164917], + [2.066877603530884, -3.013108491897583], + [-0.12065339833498001, 9.165424346923828], + [-0.12606340646743774, -0.8666106462478638], + [-6.312105655670166, 2.019252061843872], + [2.0050556659698486, -5.024868488311768], + [-5.08527946472168, 5.152132987976074], + [2.372833490371704, 0.6057767271995544], + [8.362199783325195, -2.3605401515960693], + [-3.1681387424468994, 3.10896635055542], + [4.994622707366943, -1.8223644495010376], + [3.1173255443573, -4.687375068664551], + [8.658890724182129, -2.746055841445923], + [-5.8117451667785645, 1.8706673383712769], + [-5.489973068237305, -6.894734859466553], + [-4.541424751281738, -5.377541542053223], + [0.7535364031791687, -0.00934373214840889], + [-5.979318618774414, 4.205794811248779], + [-0.1360960602760315, 9.560724258422852], + [5.784559726715088, -6.028186798095703], + [5.034663677215576, 7.071748733520508], + [-0.1366795301437378, 9.302441596984863], + [-3.3675220012664795, -1.145021915435791], + [-4.2938151359558105, 6.269725322723389], + [-5.300449848175049, -3.817589044570923], + [-4.603420734405518, -3.1399447917938232], + [-4.084129810333252, -4.621091365814209], + [0.5486968755722046, -4.6425065994262695], + [-4.777505397796631, -0.3950731158256531], + [6.973491191864014, -2.5209808349609375], + [1.9672281742095947, -7.712210178375244], + [-4.952789306640625, 2.7838165760040283], + [-2.6588404178619385, 2.1104753017425537], + [9.426985740661621, -2.8389556407928467], + [2.531708002090454, 5.7291412353515625], + [-5.683198928833008, -3.272681951522827], + [-5.364175319671631, 4.8772687911987305], + [5.179482936859131, 7.673440456390381], + [-6.806577205657959, 8.252509117126465], + [7.277320384979248, -1.7930185794830322], + [-1.4786607027053833, -0.5103427171707153], + [-0.7262894511222839, 9.979775428771973], + [-3.8855369091033936, -1.5245429277420044], + [-2.747598886489868, -3.451125144958496], + [0.5828322172164917, -0.6200981140136719], + [0.20398873090744019, 9.189817428588867], + [2.371347427368164, -6.664200782775879], + [-2.7281486988067627, 5.511523246765137], + [-3.8147876262664795, -1.2884615659713745], + [10.130022048950195, -2.828322172164917], + [3.137885570526123, -4.899419784545898], + [-0.45380228757858276, 10.506122589111328], + [8.760161399841309, -2.364795684814453], + [-2.4943430423736572, 1.8899856805801392], + [-2.8270599842071533, 2.2895283699035645], + [-5.2849860191345215, 1.2449603080749512], + [-0.4382557272911072, 11.116852760314941], + [-4.676156520843506, 4.883360862731934], + [-0.2979634404182434, 9.844154357910156], + [5.6360063552856445, -1.3437968492507935], + [-7.444009304046631, -1.8264821767807007], + [3.2400922775268555, -4.8409929275512695], + [3.3284435272216797, -4.965062141418457], + [-0.20574134588241577, 10.280330657958984], + [5.855330944061279, -1.0702191591262817], + [-5.862278461456299, -2.464858293533325], + [3.2587897777557373, -5.239196300506592], + [8.697883605957031, -2.36264967918396], + [-5.616486072540283, -3.152040481567383], + [4.050887107849121, -0.9385918378829956], + [-0.26766377687454224, 10.241287231445312], + [2.0028188228607178, 5.516799449920654], + [-0.9261125922203064, -1.0261974334716797], + [-2.114375114440918, 0.1958964467048645], + [-5.102115154266357, -2.7917540073394775], + [2.0705673694610596, 5.343540191650391], + [-4.0408172607421875, 6.136321067810059], + [-4.393179893493652, 4.640724182128906], + [7.503262519836426, -2.181016206741333], + [-5.862390518188477, -1.4180995225906372], + [1.3191337585449219, -6.4329938888549805], + [-1.178931474685669, 10.109281539916992], + [-6.1348161697387695, -2.1668686866760254], + [9.578043937683105, -2.714751958847046], + [-5.163699626922607, -0.41745972633361816], + [2.25464129447937, -4.377854347229004], + [-0.7448223233222961, 7.909417152404785], + [2.139845609664917, -3.01930832862854], + [-0.4226204752922058, -0.8582534193992615], + [8.282931327819824, -2.072741746902466], + [-0.3799721598625183, 8.257793426513672], + [-2.597623825073242, 6.352128505706787], + [-1.4410459995269775, 5.996026039123535], + [2.3000199794769287, -6.126458168029785], + [-5.206384181976318, -3.0712432861328125], + [5.200267791748047, -2.1504929065704346], + [-2.3662517070770264, 1.430050015449524], + [-3.78094744682312, 5.300743103027344], + [-6.005259990692139, -0.7690083384513855], + [8.300761222839355, -2.2415053844451904], + [-6.686275959014893, 8.56003189086914], + [-4.525396823883057, -3.655979871749878], + [1.3569386005401611, -6.822449684143066], + [2.3791935443878174, -4.986678123474121], + [-7.317722320556641, -0.8566657304763794], + [-4.6407151222229, -2.8009445667266846], + [-4.327478885650635, -2.5607120990753174], + [2.8139703273773193, -4.2448883056640625], + [8.384995460510254, -2.2315852642059326], + [-0.3923209309577942, 8.9636812210083], + [0.8220815658569336, -0.17433284223079681], + [-1.9631730318069458, 0.7668293118476868], + [-0.35371989011764526, 10.463693618774414], + [-6.712887763977051, -2.0336291790008545], + [-4.792501449584961, 4.308640480041504], + [-4.535268306732178, -0.6757088899612427], + [6.479638576507568, -1.3528296947479248], + [-0.30672627687454224, 9.85009765625], + [-4.257168292999268, 4.261670112609863], + [-2.2274587154388428, 0.7406197786331177], + [-0.17997193336486816, 9.468040466308594], + [8.863801956176758, -2.8752403259277344], + [-5.148143291473389, -6.40916633605957], + [1.9127066135406494, -3.0808732509613037], + [-0.15261268615722656, 7.499072074890137], + [7.582421779632568, -1.7938998937606812], + [5.082119464874268, -2.064631700515747], + [-2.488016366958618, 0.7902823686599731], + [8.999542236328125, -2.5892112255096436], + [4.540628910064697, -2.9874861240386963], + [-1.02586829662323, -0.5394487977027893], + [0.8027001619338989, -6.470320701599121], + [-0.06007695943117142, -0.2570856511592865], + [3.9498708248138428, 6.751983642578125], + [6.365990161895752, -2.525810480117798], + [-0.3216778337955475, -0.8136210441589355], + [0.3425777554512024, -0.355917364358902], + [-4.115626335144043, 6.422296524047852], + [1.7287105321884155, -7.833088397979736], + [2.842268228530884, -4.449477195739746], + [-5.122651100158691, 5.716293811798096], + [3.228107213973999, -5.103210926055908], + [-0.17208361625671387, 9.521403312683105], + [-3.385110855102539, -3.005289316177368], + [-2.1515026092529297, 2.702761650085449], + [3.3071210384368896, 1.1614207029342651], + [-2.143577814102173, 1.2457777261734009], + [5.608445644378662, -1.051579475402832], + [-4.539149761199951, -3.0546326637268066], + [1.203474760055542, 1.554864764213562], + [-2.3279430866241455, -1.958100438117981], + [7.029343128204346, -2.3758575916290283], + [-2.162919759750366, -2.3295843601226807], + [-0.32233038544654846, 6.311922073364258], + [-3.391505479812622, -2.8560214042663574], + [-2.970759153366089, 2.951019048690796], + [-3.0142438411712646, 4.978426933288574], + [-4.357590675354004, -3.870344877243042], + [1.8671619892120361, 5.615151882171631], + [-3.0181427001953125, -2.4164164066314697], + [6.203695774078369, -2.26603102684021], + [-5.045261859893799, 3.9475700855255127], + [-4.595538139343262, 0.8203830122947693], + [6.550156593322754, 7.983320236206055], + [3.3512067794799805, -5.010739326477051], + [-2.0499653816223145, 5.400877952575684], + [-4.811180114746094, -2.7465813159942627], + [1.928551197052002, -7.609867095947266], + [2.6954147815704346, -3.149883985519409], + [1.959533452987671, -5.666152477264404], + [0.4502452611923218, -4.819910049438477], + [6.330219268798828, -3.211911201477051], + [5.484798908233643, -3.0812604427337646], + [1.572744607925415, 4.680700302124023], + [2.711984395980835, -4.446547508239746], + [2.7284090518951416, -5.601905822753906], + [1.5040669441223145, 5.354206562042236], + [2.368746519088745, 6.073304176330566], + [2.090472459793091, -6.88698673248291], + [-2.7713544368743896, 2.9429221153259277], + [8.724566459655762, -2.296966314315796], + [3.036074161529541, -4.581565856933594], + [2.2038118839263916, -7.010870456695557], + [-4.079830646514893, -2.8976693153381348], + [2.050391912460327, -9.41586685180664], + [7.567126274108887, -2.730555295944214], + [2.037870168685913, 5.751144886016846], + [1.686293125152588, -8.232290267944336], + [-6.479726791381836, 7.2189178466796875], + [-2.1735384464263916, 2.5777361392974854], + [-0.16558915376663208, 10.232248306274414], + [-3.921349287033081, 0.18721497058868408], + [2.5854697227478027, -2.8930630683898926], + [-4.056334018707275, -1.6515450477600098], + [-4.258647441864014, 6.783098220825195], + [-5.173572540283203, 2.543132781982422], + [10.276047706604004, -2.8523976802825928], + [-5.401357173919678, 4.098966121673584], + [-3.28830885887146, -4.471373558044434], + [-3.654407262802124, -3.784677505493164], + [-6.141899585723877, -0.20799505710601807], + [-0.3357504606246948, 10.777091026306152], + [-2.4020402431488037, -1.6950984001159668], + [-5.565347194671631, 0.13344818353652954], + [2.081746816635132, -9.112227439880371], + [-0.09306968003511429, 0.2822272777557373], + [-4.295272350311279, -3.954618215560913], + [2.860153913497925, 1.057808756828308], + [-2.754387617111206, 1.3226474523544312], + [-4.008718013763428, -0.7064536809921265], + [3.184196710586548, -4.770673751831055], + [-5.334536075592041, 7.673372745513916], + [-6.377770900726318, 7.7335968017578125], + [2.152205228805542, 5.502511978149414], + [-0.29807013273239136, 9.061715126037598], + [6.998637676239014, -1.6551339626312256], + [-4.650333881378174, 2.086590051651001], + [-0.206851065158844, 10.342891693115234], + [-2.0505740642547607, 2.6194984912872314], + [2.295663833618164, -8.175314903259277], + [-0.8632795214653015, 8.77455997467041], + [-4.815045356750488, 6.062427520751953], + [-5.292928218841553, -0.7773237824440002], + [1.6357446908950806, -7.302530765533447], + [0.543189287185669, -0.41117000579833984], + [9.168352127075195, -2.5703749656677246], + [-6.434896945953369, 6.659785270690918], + [-4.086580753326416, -2.810948610305786], + [1.8741496801376343, -7.295408248901367], + [-6.08216667175293, -2.4323947429656982], + [-5.003752708435059, -0.010670427232980728], + [-2.434117078781128, -2.3012659549713135], + [1.9667847156524658, 0.7779874205589294], + [-5.64575719833374, 2.582590341567993], + [1.5558863878250122, -7.765727996826172], + [-0.43855810165405273, 10.959362030029297], + [-5.6111931800842285, 2.348475217819214], + [-2.2189674377441406, 1.9146064519882202], + [8.458110809326172, -2.359435796737671], + [9.842530250549316, -2.723257303237915], + [1.633582592010498, -5.417757987976074], + [-2.3941776752471924, 1.6054332256317139], + [-3.5095696449279785, -2.7755930423736572], + [-4.846017837524414, 1.029420018196106], + [-2.3615705966949463, 1.6462149620056152], + [-0.10839921981096268, 10.720504760742188], + [1.058718204498291, -3.372934579849243], + [-5.16694974899292, -2.352738618850708], + [-2.536149740219116, 2.0921521186828613], + [-4.449315547943115, -0.8624709844589233], + [1.5709257125854492, 5.320250988006592], + [2.728649854660034, -4.019981384277344], + [-5.660112380981445, 8.270426750183105], + [8.848050117492676, -2.40820574760437], + [3.133734941482544, -4.815140724182129], + [-5.689082622528076, 6.681680679321289], + [8.994813919067383, -2.475693464279175], + [1.4126670360565186, 0.24575909972190857], + [-7.48938512802124, -1.3441153764724731], + [-3.8853490352630615, 6.0145978927612305], + [1.8640592098236084, -8.939788818359375], + [0.7992985844612122, -0.08448687195777893], + [-4.634964466094971, -3.7596275806427], + [2.361168146133423, 5.899944305419922], + [-5.263585567474365, -1.4209810495376587], + [-4.520308971405029, -3.823307514190674], + [-6.666553497314453, -1.0045347213745117], + [-5.0392165184021, -3.6695287227630615], + [3.1063084602355957, -4.650842189788818], + [-7.738958835601807, -1.481723666191101], + [-4.803719997406006, 0.06231402978301048], + [-3.306769609451294, 1.7029922008514404], + [7.652688026428223, -2.176048755645752], + [-3.7977373600006104, -2.636258125305176], + [2.0524442195892334, 5.539463520050049], + [-4.554612159729004, -1.9592360258102417], + [2.7154250144958496, -4.798897743225098], + [-0.0017210319638252258, 5.537525177001953], + [-0.3101472854614258, 9.515063285827637], + [2.8345165252685547, -4.295630931854248], + [-5.040201663970947, 2.057170867919922], + [-4.5217719078063965, -3.11594295501709], + [3.1666324138641357, -4.74581241607666], + [-5.6520233154296875, 1.8058513402938843], + [-4.379481792449951, -2.96870756149292], + [7.461198806762695, -1.5989598035812378], + [2.221733808517456, -7.860384941101074], + [-5.831920146942139, 7.785147666931152], + [-3.2293050289154053, -1.8558589220046997], + [1.9941127300262451, -6.995020389556885], + [-4.007195472717285, -4.373967170715332], + [7.705204963684082, -1.75114905834198], + [8.611983299255371, -2.3645987510681152], + [-5.030426025390625, -1.406537413597107], + [2.970614194869995, -4.462388038635254], + [-4.449296951293945, 5.777731895446777], + [-4.411501407623291, 3.606677770614624], + [2.1512625217437744, -7.064601421356201], + [1.0680732727050781, 0.7927634119987488], + [-3.6946957111358643, -2.4228241443634033], + [-2.345510244369507, 1.8559740781784058], + [0.204813152551651, 0.6517421007156372], + [-6.87925386428833, 4.473241806030273], + [2.035701036453247, 5.697508811950684], + [7.144988059997559, -0.805708646774292], + [-0.24228239059448242, 11.283231735229492], + [-4.191976070404053, -3.05141019821167], + [1.086060643196106, -3.6671700477600098], + [-2.497190237045288, -1.1948875188827515], + [-2.4958624839782715, 1.9432400465011597], + [5.4272894859313965, -2.0348641872406006], + [-9.153253555297852, -1.0071449279785156], + [5.963648319244385, -1.933390498161316], + [-4.510072708129883, -3.425015687942505], + [-3.8910486698150635, -4.579257011413574], + [1.516455054283142, -4.534002304077148], + [-0.07814652472734451, 0.37402358651161194], + [-3.091221570968628, 5.015890121459961], + [3.29962158203125, -4.926982402801514], + [2.9448883533477783, -5.494658470153809], + [-3.523216962814331, -4.004279613494873], + [0.40649354457855225, -5.607870101928711], + [2.110907554626465, -7.824245929718018], + [-1.8927494287490845, 2.639832019805908], + [2.177516222000122, -7.264424800872803], + [-7.03520393371582, 0.8006246089935303], + [-0.7568855285644531, 9.27768325805664], + [-5.865574359893799, 1.8292086124420166], + [-3.6150410175323486, 2.8460426330566406], + [1.136314034461975, -5.369011402130127], + [9.445075988769531, -2.601175308227539], + [0.6237319111824036, -0.9807112216949463], + [-5.635058879852295, -2.65742826461792], + [-3.1445722579956055, 2.0985474586486816], + [-3.9840314388275146, 6.238519668579102], + [0.4327438473701477, -4.828183650970459], + [2.5255916118621826, -8.89601993560791], + [1.27590811252594, -5.64023494720459], + [-4.2744140625, 4.380819797515869], + [-3.0931923389434814, -1.0377851724624634], + [-7.4481425285339355, -1.1154121160507202], + [-0.2559734880924225, -1.4422720670700073], + [3.564969062805176, 6.36598014831543], + [-4.925416469573975, 1.9727028608322144], + [-0.21644386649131775, -1.1953314542770386], + [-2.391190767288208, 0.6141527891159058], + [2.0619146823883057, -3.4463918209075928], + [6.272490501403809, -1.2013922929763794], + [-4.772439956665039, 1.1334030628204346], + [2.8998935222625732, -6.503246307373047], + [-0.1775805950164795, 9.150100708007812], + [-6.913845539093018, -2.4734649658203125], + [-5.081681728363037, 1.7097059488296509], + [-5.5610480308532715, 5.95112943649292], + [3.085752248764038, -4.939731597900391], + [2.4929842948913574, -6.061983108520508], + [-4.935421943664551, 4.907327175140381], + [1.182448148727417, -7.267892360687256], + [9.424304008483887, -2.567399740219116], + [-0.14714211225509644, 9.591447830200195], + [-0.45458197593688965, 5.558388710021973], + [-4.6295037269592285, -2.392005681991577], + [-0.8012136816978455, 13.24724006652832], + [-0.6578058004379272, 7.29730749130249], + [-0.27221864461898804, 9.971435546875], + [-8.142504692077637, -0.9108693599700928], + [4.146914005279541, -4.840643882751465], + [-4.741821765899658, 5.476051330566406], + [-1.7009270191192627, 2.221559762954712], + [6.033389091491699, -1.6501715183258057], + [5.1857171058654785, -1.806918740272522], + [-7.962100505828857, -1.4005522727966309], + [-2.047851324081421, 2.831296682357788], + [-3.5389745235443115, -3.52427077293396], + [-2.225578546524048, 2.415815591812134], + [-0.29248660802841187, 10.317895889282227], + [-5.407036781311035, 0.014622744172811508], + [4.838684558868408, 7.105205535888672], + [5.748812198638916, -1.266588807106018], + [3.958583116531372, -1.8112016916275024], + [-0.4110580086708069, 9.406705856323242], + [-6.379665851593018, 7.776775360107422], + [-5.917267322540283, 5.517134666442871], + [0.9892471432685852, 0.26502132415771484], + [0.06792979687452316, 9.958390235900879], + [-2.4012036323547363, 1.6588777303695679], + [2.1892406940460205, -4.296134948730469], + [4.207971572875977, -0.1826331615447998], + [0.1952928900718689, 0.44367516040802], + [-1.178458571434021, 9.80216121673584], + [-4.11522912979126, -1.2443599700927734], + [-5.442628383636475, -2.532299757003784], + [-2.666653633117676, 4.388941764831543], + [3.552908182144165, 6.461540222167969], + [-2.0417275428771973, -3.1003334522247314], + [2.7345433235168457, -3.096283435821533], + [-5.688589572906494, -2.637068033218384], + [0.3079797029495239, -1.352357268333435], + [0.8435814380645752, -4.963620185852051], + [2.8811681270599365, -4.999996185302734], + [-2.4225080013275146, 0.9627596139907837], + [-6.380645275115967, -1.6754239797592163], + [-4.6201252937316895, 4.779150485992432], + [1.96474289894104, 4.3325066566467285], + [-5.438089847564697, -0.3677138686180115], + [1.1698837280273438, 4.33278751373291], + [8.196742057800293, -2.0158281326293945], + [-5.272876262664795, 5.01261043548584], + [2.8905580043792725, -4.380908012390137], + [7.059728622436523, -1.390053629875183], + [-5.24179220199585, -2.4587974548339844], + [1.3949110507965088, -7.793620586395264], + [-5.227090358734131, -3.48323130607605], + [-2.614521026611328, 1.7742204666137695], + [0.46125346422195435, -0.9500784873962402], + [0.7771894931793213, -6.633108615875244], + [0.8132793307304382, -5.42352294921875], + [-3.820448160171509, -1.901727557182312], + [6.296666145324707, -1.8819409608840942], + [-2.0855729579925537, -0.7368801832199097], + [2.93611741065979, -4.4253082275390625], + [-1.620585560798645, 0.870815098285675], + [-0.22968989610671997, 10.583093643188477], + [-0.539050817489624, 10.964645385742188], + [0.31132325530052185, -0.45816734433174133], + [-0.15448418259620667, -1.119964599609375], + [-2.85176157951355, 5.290250778198242], + [-4.321656703948975, -3.074158191680908], + [7.865242004394531, -1.5995622873306274], + [-1.1310189962387085, 8.696188926696777], + [1.9713811874389648, 1.0083236694335938], + [0.8094786405563354, 5.427182197570801], + [-0.5165703892707825, 10.613219261169434], + [-0.6343725323677063, -0.7247278690338135], + [-0.33810311555862427, 9.930059432983398], + [2.2852466106414795, -3.7605977058410645], + [8.079920768737793, -2.1175930500030518], + [1.8429937362670898, 1.328283667564392], + [-2.553938388824463, -1.4587609767913818], + [-0.4382994771003723, 9.3347749710083], + [5.873265743255615, -1.9313215017318726], + [8.29526424407959, -2.432152032852173], + [-3.6269516944885254, -1.092248558998108], + [-6.166268825531006, 7.543880462646484], + [-5.947445392608643, 1.0680640935897827], + [-3.2181060314178467, -3.368199110031128], + [1.6413993835449219, -6.280095100402832], + [-5.955219745635986, 1.3521922826766968], + [-3.8987314701080322, -2.6935946941375732], + [-2.6525843143463135, 2.8661234378814697], + [-0.25411123037338257, 10.253707885742188], + [-2.6584572792053223, 2.0280978679656982], + [-2.1880507469177246, 2.4948551654815674], + [0.6517725586891174, 6.013619422912598], + [3.027836322784424, -4.544507026672363], + [2.422940969467163, 6.340165138244629], + [-5.5904927253723145, 3.2535383701324463], + [-4.28096866607666, -4.059196949005127], + [-4.7710137367248535, 1.8816137313842773], + [-0.4835531711578369, 10.751702308654785], + [-4.798707485198975, -2.8033392429351807], + [2.3447043895721436, 0.7542603015899658], + [-2.6821815967559814, -2.800060987472534], + [2.843677520751953, -4.3054914474487305], + [-5.817291259765625, 5.482950210571289], + [-7.273876667022705, -1.9479848146438599], + [-6.153401851654053, -1.55135977268219], + [-3.647883653640747, -3.5518734455108643], + [9.102490425109863, -2.5517706871032715], + [2.4247019290924072, -4.09307861328125], + [2.8466246128082275, -4.25453519821167], + [-3.965801477432251, -3.8093085289001465], + [-0.2913273572921753, 10.474568367004395], + [2.0567805767059326, -7.485349178314209], + [-5.446017742156982, -0.03604889288544655], + [-3.2942943572998047, 2.5605857372283936], + [-4.723680019378662, 5.082693099975586], + [8.994412422180176, -2.4808244705200195], + [4.259236812591553, 7.134465217590332], + [1.7103309631347656, -4.719254493713379], + [1.6255908012390137, -8.369842529296875], + [3.0484464168548584, -4.676602363586426], + [-2.5700161457061768, -2.888087511062622], + [-0.1935468316078186, 9.627626419067383], + [-4.646130084991455, -1.3783867359161377], + [1.354352355003357, 4.835215091705322], + [9.149195671081543, -2.7273380756378174], + [0.26628607511520386, 9.128458976745605], + [-2.352313280105591, 5.930732250213623], + [-3.9194915294647217, -3.679058790206909], + [-2.797463893890381, 0.654656708240509], + [5.6407294273376465, -1.1238051652908325], + [3.435811758041382, -2.2393856048583984], + [-3.8246843814849854, -2.3320395946502686], + [3.159306764602661, -6.385035991668701], + [-5.31400728225708, -2.791677236557007], + [-0.13301721215248108, -0.7949671149253845], + [-1.6577775478363037, 1.2298469543457031], + [-7.053290843963623, -1.0345075130462646], + [3.0558183193206787, -4.684408187866211], + [-3.2840328216552734, 5.390827655792236], + [3.3185787200927734, -5.277637958526611], + [-5.261345386505127, 5.1506500244140625], + [1.0607819557189941, -7.199665069580078], + [2.9392507076263428, -4.584815979003906], + [-7.624389171600342, -1.1304391622543335], + [-4.992893695831299, -2.241117238998413], + [-0.2692906856536865, 10.824617385864258], + [-4.579887866973877, -2.9346063137054443], + [-7.963737964630127, -1.4111700057983398], + [2.6051080226898193, -7.156893730163574], + [-5.179681301116943, -3.76365327835083], + [3.182987928390503, -7.117976188659668], + [-4.684960842132568, 2.2451980113983154], + [-0.19085901975631714, 10.514242172241211], + [-2.2278621196746826, -1.2073932886123657], + [-0.3838563561439514, -1.0455377101898193], + [5.033415794372559, -4.888179779052734], + [-0.30743837356567383, 8.696026802062988], + [-6.551055908203125, -2.6598129272460938], + [6.99965238571167, -1.5640435218811035], + [-1.1999406814575195, 5.890756607055664], + [0.2151312232017517, 5.142574310302734], + [-0.07551229745149612, 9.061872482299805], + [5.121110439300537, 6.683189868927002], + [-0.0487368181347847, 10.50989055633545], + [0.8143304586410522, 0.5170409679412842], + [-5.224755764007568, -0.5242516994476318], + [-2.5036888122558594, 1.9230337142944336], + [0.7362607717514038, -6.790760040283203], + [6.5370774269104, -1.3086305856704712], + [-5.001401424407959, -3.615978240966797], + [3.9872567653656006, -5.451071739196777], + [2.599830389022827, -5.001425266265869], + [-3.834601640701294, -2.172783613204956], + [-0.37421149015426636, 10.871919631958008], + [-3.080625295639038, 2.276313066482544], + [6.3067450523376465, -1.3818519115447998], + [-3.04235577583313, -0.5634096264839172], + [-0.26076239347457886, 9.396482467651367], + [9.511187553405762, -2.6906354427337646], + [2.9121854305267334, 1.1739215850830078], + [5.479590892791748, -1.035176157951355], + [-3.497206926345825, -1.407104253768921], + [1.7450859546661377, -3.557403802871704], + [-6.498244285583496, 0.5034003257751465], + [2.0257349014282227, 5.623595237731934], + [0.9348607659339905, -6.583795547485352], + [1.0193610191345215, 0.7373596429824829], + [6.422556400299072, -4.32112979888916], + [2.1091854572296143, -7.239494800567627], + [8.860529899597168, -2.3828604221343994], + [-3.4050815105438232, -1.51036536693573], + [2.9311368465423584, -4.413503646850586], + [7.992072582244873, -2.1436517238616943], + [-5.183776378631592, 4.308207035064697], + [-4.80147123336792, -4.040006637573242], + [-5.84411096572876, 4.561557292938232], + [-6.7215094566345215, -1.7484277486801147], + [2.7369296550750732, -6.755197525024414], + [-3.121706962585449, 0.237368643283844], + [3.097135066986084, -4.847376823425293], + [-2.4574577808380127, 1.2857158184051514], + [-5.921121597290039, -2.3049709796905518], + [-1.469557762145996, 0.9404797554016113], + [-3.703106164932251, -2.0470478534698486], + [-5.812134265899658, 6.2283101081848145], + [1.8973143100738525, 5.686367034912109], + [-3.697575330734253, -3.736835241317749], + [5.366132736206055, -1.1203559637069702], + [-4.564920902252197, -1.2004179954528809], + [-1.6097981929779053, -1.5121804475784302], + [-5.308915138244629, 4.955418109893799], + [-3.427381753921509, -2.3348968029022217], + [-2.7707276344299316, 2.1254730224609375], + [9.178717613220215, -2.4728715419769287], + [1.8030444383621216, 4.231923580169678], + [-2.231027126312256, 1.6838876008987427], + [-6.269359111785889, 7.614725112915039], + [-2.1351006031036377, 1.1763827800750732], + [-1.2319438457489014, 8.956478118896484], + [-0.3016875088214874, -1.3919061422348022], + [-7.204275608062744, 1.9231996536254883], + [-0.2747562527656555, 10.59201431274414], + [1.8221049308776855, 4.506249904632568], + [-7.538266658782959, -0.8671021461486816], + [2.1497650146484375, 4.652472972869873], + [2.997999906539917, -4.550336837768555], + [-5.873802661895752, 0.41041362285614014], + [-2.098222017288208, 1.2254719734191895], + [-4.048404693603516, -1.5228058099746704], + [2.4662280082702637, -6.042625427246094], + [3.200805902481079, -4.828028678894043], + [-0.2579250931739807, 9.365497589111328], + [-4.738848686218262, -3.9982080459594727], + [-2.0483222007751465, 5.566712379455566], + [-3.556032419204712, 5.924277305603027], + [-4.716740131378174, -3.7239151000976562], + [-4.496811389923096, -1.5475867986679077], + [-2.789715051651001, 4.822342872619629], + [-7.000529766082764, -1.2970246076583862], + [-4.28502893447876, -2.1493980884552], + [8.78390121459961, -2.425550699234009], + [3.224463701248169, -5.05233907699585], + [-6.160481929779053, 7.360074996948242], + [-3.7101857662200928, -2.011227607727051], + [2.636945962905884, -4.251997947692871], + [1.329351544380188, -6.953078746795654], + [-4.891186237335205, 2.5004379749298096], + [7.522526264190674, -2.681043863296509], + [-2.5722315311431885, 1.9005461931228638], + [2.3645710945129395, -3.7503392696380615], + [-6.529895305633545, 6.872713088989258], + [7.117634296417236, -1.7856521606445312], + [-4.62031888961792, -1.903863549232483], + [2.097810983657837, 0.10720129311084747], + [-2.0499446392059326, 5.6323561668396], + [-5.163054943084717, 2.4134037494659424], + [2.9752533435821533, -4.468109607696533], + [2.3255128860473633, -4.17396354675293], + [2.1182644367218018, 5.2379655838012695], + [-3.0185210704803467, 0.6204973459243774], + [-6.389834403991699, -1.259329080581665], + [2.7985923290252686, -4.930625915527344], + [5.830149173736572, -1.5810397863388062], + [-0.19157081842422485, 9.567312240600586], + [-4.075569152832031, -2.6420161724090576], + [-6.668856143951416, -0.46661698818206787], + [-3.5735604763031006, 3.020463705062866], + [5.177004814147949, -1.372804880142212], + [6.404196739196777, -2.0601422786712646], + [7.742375373840332, -2.2787115573883057], + [2.523283004760742, -3.8940601348876953], + [-5.108016014099121, -4.6310811042785645], + [7.72396183013916, -1.8251893520355225], + [6.612884044647217, -0.24399256706237793], + [4.549828052520752, 7.257665634155273], + [3.1786110401153564, -5.049495220184326], + [2.7654755115509033, -4.155599594116211], + [-2.715820550918579, 1.5594350099563599], + [1.3812087774276733, 0.6978830099105835], + [-0.3646291494369507, 10.531397819519043], + [-2.8988900184631348, -1.111707091331482], + [-0.5116240382194519, 10.720094680786133], + [3.508849859237671, -5.21968936920166], + [2.8313615322113037, -4.2295002937316895], + [2.046264171600342, 5.433396339416504], + [-5.337404251098633, -3.4789416790008545], + [8.839194297790527, -2.3613522052764893], + [1.3702104091644287, -7.5090813636779785], + [1.4931457042694092, 5.802427768707275], + [-0.3985275626182556, 9.339544296264648], + [-4.820922374725342, -2.8523454666137695], + [4.399814605712891, 6.793927192687988], + [-4.787050724029541, -0.18347585201263428], + [-1.0101380348205566, -0.6768182516098022], + [-4.603744029998779, -4.59343957901001], + [1.9334404468536377, 4.329944610595703], + [-5.017800331115723, -2.7031872272491455], + [-5.186746120452881, -1.3428560495376587], + [-5.126558780670166, -2.6574411392211914], + [-6.073313236236572, -0.7345813512802124], + [-4.721770763397217, 0.3387284576892853], + [6.0991387367248535, -3.198302984237671], + [5.6992597579956055, -1.2208069562911987], + [-6.85631799697876, 8.609773635864258], + [-4.570642948150635, 7.114177703857422], + [-7.401371479034424, -1.4820663928985596], + [1.9510776996612549, -3.634873628616333], + [-5.78671407699585, -3.4786903858184814], + [0.6847335696220398, 5.752092361450195], + [2.4866528511047363, -8.013775825500488], + [3.0459630489349365, -4.9344682693481445], + [-2.5724809169769287, -3.274103879928589], + [-1.7190264463424683, 2.401062250137329], + [3.0950958728790283, -4.747254848480225], + [-5.122490882873535, 3.9395718574523926], + [-1.1897804737091064, 5.069727897644043], + [-4.7938103675842285, -4.201704978942871], + [-4.967636585235596, -1.4987565279006958], + [-0.7691901922225952, 9.50561809539795], + [3.0980541706085205, -4.80559778213501], + [-4.100066661834717, -1.2126966714859009], + [1.9720513820648193, -4.889551162719727], + [-3.2593045234680176, 5.435023784637451], + [-4.179422378540039, 4.744770050048828], + [-4.823080062866211, -1.8080228567123413], + [-5.501439571380615, -2.421006917953491], + [-3.7974789142608643, -2.983764410018921], + [-7.460509777069092, -1.9635947942733765], + [-9.06316089630127, -1.1866196393966675], + [2.7535271644592285, 0.7276067733764648], + [-2.7906386852264404, 2.2435386180877686], + [-2.168673038482666, 0.9405519366264343], + [-4.812315940856934, -0.9904952049255371], + [-3.8944032192230225, 6.03059196472168], + [1.687451720237732, -8.452169418334961], + [-4.656735897064209, -6.703489303588867], + [-3.831305742263794, -1.2296792268753052], + [1.8166675567626953, 5.316534519195557], + [-0.11729270964860916, 9.876167297363281], + [-0.4302522540092468, 11.225181579589844], + [-5.896392822265625, -2.3794806003570557], + [8.773181915283203, -2.4083259105682373], + [-4.189027309417725, -2.5869462490081787], + [-4.683109760284424, -0.9373475909233093], + [-4.056512832641602, -1.8220895528793335], + [-2.271822929382324, 2.8146064281463623], + [-0.5013515949249268, 8.767995834350586], + [3.3381705284118652, -5.324411392211914], + [-5.713959217071533, -1.965981125831604], + [7.271921634674072, -3.5211074352264404], + [-3.1267526149749756, -2.27311110496521], + [-1.9871488809585571, 2.1094460487365723], + [3.1366848945617676, -4.918993949890137], + [-0.3970401883125305, -2.341984510421753], + [1.2785993814468384, -7.106000900268555], + [-4.5581207275390625, 0.11734950542449951], + [-0.004837311804294586, -1.3170689344406128], + [-3.406592607498169, 6.081873893737793], + [2.3731672763824463, -4.707441329956055], + [-2.0728235244750977, 2.041897773742676], + [-1.3886654376983643, -0.6939353942871094], + [-1.9983121156692505, -0.000995580106973648], + [5.221352577209473, -1.1549888849258423], + [2.721496820449829, -4.111356735229492], + [-2.199899435043335, 2.014188051223755], + [-5.238902568817139, -1.7764164209365845], + [-4.612416744232178, -3.4802796840667725], + [-7.574580192565918, 9.360787391662598], + [-4.483829021453857, 4.547898292541504], + [-7.244155406951904, -1.8041412830352783], + [3.196883201599121, -5.044105529785156], + [4.276984691619873, 6.8882036209106445], + [5.510818004608154, -1.6643036603927612], + [-0.3150486350059509, 9.647977828979492], + [5.342998027801514, 7.366510391235352], + [-6.449784755706787, -2.0182831287384033], + [-3.6575939655303955, 5.242290019989014], + [1.9282352924346924, 0.8465790152549744], + [2.3010494709014893, -4.920994758605957], + [8.441492080688477, -2.419387102127075], + [3.200110673904419, -5.099359512329102], + [-5.897364139556885, -2.6207168102264404], + [-6.216847896575928, 2.615957498550415], + [2.362927198410034, -3.57352614402771], + [-0.20384353399276733, 9.4615478515625], + [1.7246928215026855, -4.647665023803711], + [1.4658372402191162, -5.933692932128906], + [-4.442788124084473, -4.442042350769043], + [2.899522066116333, 1.4171558618545532], + [3.0336735248565674, -6.941344738006592], + [-4.223263740539551, -2.5904886722564697], + [1.9968664646148682, -6.421052932739258], + [0.858485758304596, 0.7563847303390503], + [-2.9890429973602295, 4.159090518951416], + [2.3520538806915283, 5.860236644744873], + [-5.5334792137146, -2.4894497394561768], + [5.806405544281006, -1.1421805620193481], + [0.9055789113044739, 7.331838607788086], + [-4.8503828048706055, -1.0004541873931885], + [-4.727899074554443, 0.8657400608062744], + [6.256032466888428, -4.830554008483887], + [-5.082067012786865, 5.558615684509277], + [2.903447151184082, -4.483652114868164], + [-7.349671840667725, 0.8189797401428223], + [-5.53422212600708, 6.420082092285156], + [-5.684121131896973, -2.654411792755127], + [-0.43784624338150024, 9.952009201049805], + [-1.1819210052490234, -0.5097549557685852], + [1.921142816543579, 1.2295523881912231], + [7.92734956741333, -1.887511968612671], + [-3.836995840072632, -2.715724229812622], + [2.1680800914764404, -3.209186553955078], + [-5.474717140197754, -5.3401713371276855], + [-4.062484264373779, 2.289073944091797], + [-0.9922704100608826, -2.2756009101867676], + [-3.416719675064087, -3.2009503841400146], + [5.874820709228516, -0.9223371744155884], + [1.1242159605026245, -5.446890830993652], + [2.8733365535736084, -4.274046421051025], + [-4.371757984161377, -2.0320041179656982], + [-4.971019268035889, 2.0232818126678467], + [-0.22941839694976807, 9.719932556152344], + [-4.810066223144531, -2.7022809982299805], + [-8.385062217712402, -1.0039316415786743], + [-4.004385471343994, -2.5173912048339844], + [-2.9778196811676025, -3.4557816982269287], + [-7.809683799743652, -0.36698997020721436], + [2.8307316303253174, -4.388249397277832], + [6.34190034866333, -1.3825299739837646], + [-6.211560249328613, 3.605531930923462], + [2.337897300720215, 5.691537857055664], + [-7.79413366317749, 9.440317153930664], + [-0.6808597445487976, -0.21132147312164307], + [-4.566507816314697, 7.252607345581055], + [-5.654084205627441, -2.1726267337799072], + [3.01348614692688, -4.507102966308594], + [8.165349006652832, -2.1607584953308105], + [0.046885840594768524, 4.779034614562988], + [-4.792770862579346, 1.41305673122406], + [-2.8366262912750244, 5.3945512771606445], + [-5.335473537445068, 1.05594801902771], + [-4.78066873550415, -3.908820390701294], + [-0.2791685461997986, -0.9912385940551758], + [-5.630609035491943, -1.642274260520935], + [-2.326873540878296, -0.9510998725891113], + [-5.618051052093506, 8.69000244140625], + [-5.22967529296875, 6.6252899169921875], + [6.254115104675293, -2.2404468059539795], + [-5.208974361419678, -2.666593313217163], + [1.225335955619812, -4.098860740661621], + [-4.294131278991699, -3.258305311203003], + [-1.8575999736785889, 1.2108845710754395], + [-2.8344852924346924, 0.6521252393722534], + [2.5941073894500732, -4.3100786209106445], + [-3.896484613418579, -5.6978654861450195], + [-4.27179479598999, -0.7812955379486084], + [5.615896224975586, -1.0719611644744873], + [-0.8191502094268799, 9.871757507324219], + [2.1788055896759033, 5.4176859855651855], + [-2.8358817100524902, 1.6243398189544678], + [-4.600344657897949, -1.1445428133010864], + [-6.724696636199951, -1.2816317081451416], + [-6.40098237991333, -1.8429667949676514], + [3.135066509246826, -4.896824836730957], + [-4.8400397300720215, -3.7439544200897217], + [-5.537903308868408, 1.6159523725509644], + [1.9755167961120605, -3.6571204662323], + [-5.998183250427246, -2.4523136615753174], + [-2.7635037899017334, 2.743307590484619], + [7.293755054473877, -1.6110459566116333], + [-4.850906848907471, -3.0202624797821045], + [-0.9907916784286499, 8.960018157958984], + [-5.80641508102417, -2.289182424545288], + [-5.9734721183776855, 7.2876081466674805], + [6.8097004890441895, -1.8922384977340698], + [-4.476023197174072, -2.7799720764160156], + [-4.10874605178833, -3.2757656574249268], + [-1.8848538398742676, 2.1015548706054688], + [-5.633602142333984, 7.121312618255615], + [9.351317405700684, -2.5848639011383057], + [-0.7740262746810913, 9.364497184753418], + [-3.8470041751861572, 5.68084192276001], + [1.6183526515960693, -8.476353645324707], + [1.9964087009429932, 1.5157185792922974], + [-2.637014865875244, 2.0880613327026367], + [-3.3830883502960205, 0.25439101457595825], + [-4.820831775665283, 1.8058332204818726], + [-3.298342704772949, -2.238999128341675], + [5.5313286781311035, -0.47732752561569214], + [1.832511067390442, 5.536481857299805], + [-0.06944812089204788, 7.0819597244262695], + [3.2389731407165527, 6.4213547706604], + [4.188175678253174, 6.773418426513672], + [-5.624588489532471, 5.9544596672058105], + [0.9579526782035828, 6.313227653503418], + [-0.22126996517181396, -1.1180716753005981], + [-0.8876569867134094, 8.878875732421875], + [3.1742923259735107, -4.747410774230957], + [-6.443587779998779, 5.190585613250732], + [-5.196818828582764, 4.062661170959473], + [-3.5721962451934814, 0.31861090660095215], + [2.9878456592559814, -4.4846296310424805], + [-5.432549953460693, -1.9105218648910522], + [2.9794435501098633, -4.480293273925781], + [6.234982967376709, -2.648080825805664], + [-5.580871105194092, 2.5189974308013916], + [-6.704822063446045, -0.3805515766143799], + [2.0098659992218018, 0.4964323043823242], + [-3.789405107498169, -2.455512762069702], + [5.0320892333984375, -1.6990076303482056], + [-5.597413539886475, 2.140895366668701], + [3.0614123344421387, -5.462146282196045], + [-0.029721029102802277, 8.742361068725586], + [-1.2606443166732788, 8.392478942871094], + [-0.4481354355812073, 10.601631164550781], + [-0.38858336210250854, 9.461532592773438], + [4.456669807434082, 7.019630432128906], + [3.0146000385284424, -4.7616167068481445], + [-4.304397106170654, -2.1051502227783203], + [-0.5253193378448486, 10.517355918884277], + [-4.596236705780029, -2.3427906036376953], + [-1.6082719564437866, -2.6838762760162354], + [-3.7910940647125244, 4.727126121520996], + [-2.5224316120147705, -2.467508554458618], + [5.215282440185547, -6.618852138519287], + [-4.734933376312256, -3.6968863010406494], + [-4.718931198120117, 6.012272834777832], + [2.9016871452331543, 5.333038806915283], + [-3.928321361541748, 6.040298938751221], + [-6.266375541687012, 3.098857879638672], + [7.858632564544678, -2.075007438659668], + [3.0454390048980713, -4.781126022338867], + [-2.5307865142822266, -1.2410303354263306], + [2.8559939861297607, -4.508637428283691], + [-4.4837965965271, -3.248563051223755], + [3.158329486846924, -4.737551689147949], + [-0.7252548933029175, 3.527803421020508], + [4.35519552230835, -1.7526332139968872], + [4.628714084625244, 7.171669960021973], + [7.647422790527344, -3.950329542160034], + [-1.26251220703125, 4.49681282043457], + [-0.1287754774093628, 9.488520622253418], + [3.1602096557617188, -4.73859167098999], + [-1.6114600896835327, 1.9414310455322266], + [-4.504665374755859, -0.45986902713775635], + [0.7556918859481812, -0.3862444758415222], + [-0.19402161240577698, -1.042565941810608], + [-2.0808327198028564, 5.793750286102295], + [-5.255685329437256, -3.0378317832946777], + [-2.9376890659332275, 6.598956108093262], + [9.40734577178955, -2.618312120437622], + [-0.1910368651151657, -1.6123476028442383], + [-4.461231708526611, -2.787172317504883], + [-4.95314884185791, 6.393166542053223], + [7.970147609710693, -2.141878843307495], + [3.0804049968719482, -5.166067600250244], + [-5.312551021575928, -3.5123627185821533], + [-4.890617847442627, -0.8160275220870972], + [8.951021194458008, -2.2978436946868896], + [-6.3720269203186035, -0.7509005069732666], + [-3.5255885124206543, -2.5769708156585693], + [-2.3210537433624268, 1.4099494218826294], + [-0.7873741984367371, 8.844030380249023], + [1.967468500137329, -3.3767149448394775], + [-6.127719402313232, -2.6393957138061523], + [3.0331239700317383, -4.769683837890625], + [2.1178808212280273, 5.906679630279541], + [-0.5399115085601807, 1.5325030088424683], + [-4.662755489349365, -3.2843496799468994], + [-0.27552926540374756, 10.383065223693848], + [-5.951543807983398, -2.3314123153686523], + [2.5721945762634277, -5.758681297302246], + [-5.342801570892334, 5.3695902824401855], + [-0.9693882465362549, 8.888518333435059], + [-4.455394744873047, -0.5355185270309448], + [-2.0623655319213867, 0.8750498294830322], + [-6.065971374511719, 8.310626029968262], + [5.314224720001221, -3.4060676097869873], + [-1.4643588066101074, 0.14139428734779358], + [-0.31609243154525757, 9.446544647216797], + [-3.871408224105835, 5.214287757873535], + [-6.643187046051025, 7.091056823730469], + [-3.929518699645996, -3.6434013843536377], + [9.440285682678223, -2.726074457168579], + [3.2471506595611572, -4.852755546569824], + [-2.603389024734497, 1.9279645681381226], + [0.5354610681533813, 0.254209041595459], + [5.7091240882873535, -0.9665233492851257], + [-3.6512725353240967, -0.8414731621742249], + [6.130702495574951, -1.173851490020752], + [-2.22800874710083, 1.3211901187896729], + [-7.814113140106201, -1.143865942955017], + [1.6220930814743042, 5.672440528869629], + [-5.069288730621338, -3.2841055393218994], + [2.7922556400299072, -4.3212890625], + [2.9335498809814453, -4.611844062805176], + [1.854116678237915, -0.14168743789196014], + [-3.343087911605835, 4.905581951141357], + [-4.956583499908447, 7.2807416915893555], + [7.2666544914245605, -1.6829099655151367], + [-4.41335391998291, -1.3025532960891724], + [-2.5942275524139404, -4.109562873840332], + [-4.383398532867432, -2.2113845348358154], + [-5.465400218963623, 4.0452399253845215], + [-3.087482213973999, -2.3733723163604736], + [-4.216294288635254, -1.4295529127120972], + [-0.30582547187805176, 9.257284164428711], + [2.0110228061676025, -7.1977996826171875], + [-1.4032213687896729, 4.654969215393066], + [2.1341795921325684, -8.30813217163086], + [-6.399734973907471, 7.628203392028809], + [-5.706654071807861, 4.542017936706543], + [5.592677116394043, -1.0948216915130615], + [3.7646901607513428, -2.2768185138702393], + [-4.695023059844971, -2.7389564514160156], + [-7.044384002685547, -0.23857402801513672], + [4.787658214569092, -1.9381036758422852], + [-0.5772407054901123, -0.5183893442153931], + [-0.3283982276916504, 7.72200870513916], + [-0.3959144353866577, 9.379964828491211], + [2.0018603801727295, -8.550701141357422], + [-5.107376575469971, 6.290870666503906], + [3.950237989425659, -0.8435208797454834], + [8.91211986541748, -2.4103825092315674], + [-5.731778621673584, 7.569713592529297], + [2.2752068042755127, -4.0059967041015625], + [-0.07295293360948563, 9.870936393737793], + [0.08423130959272385, 10.195514678955078], + [-0.2795022130012512, 8.474640846252441], + [-4.933777332305908, -4.369289875030518], + [9.2044677734375, -2.556365728378296], + [2.8868136405944824, -5.12396240234375], + [4.9456682205200195, -1.0528098344802856], + [2.2817633152008057, 5.820952415466309], + [-2.420201063156128, 1.2556930780410767], + [-1.1432783603668213, -0.3494037687778473], + [6.945301055908203, -1.4604318141937256], + [8.479151725769043, -2.358691453933716], + [-4.4419169425964355, 1.993897795677185], + [3.010529041290283, -4.603976726531982], + [2.8233847618103027, -4.319960594177246], + [-0.10633230954408646, 9.093611717224121], + [-3.49413800239563, -1.5146621465682983], + [-2.29130220413208, 1.1482669115066528], + [2.2147939205169678, -2.93601393699646], + [4.659767150878906, -4.316035747528076], + [-0.5513971447944641, 11.731792449951172], + [2.056368589401245, 5.8614959716796875], + [1.5733050107955933, 3.737459421157837], + [-7.102102756500244, -0.9382326602935791], + [-5.0382256507873535, -1.9751955270767212], + [0.6749935150146484, 9.647683143615723], + [-7.316689968109131, -1.6203986406326294], + [-4.065410137176514, -1.2834234237670898], + [2.7985894680023193, -4.177934169769287], + [2.712592363357544, -4.305352210998535], + [-5.572868824005127, 2.8895976543426514], + [1.0457432270050049, 4.18336296081543], + [3.337313175201416, 6.019275665283203], + [-3.005171060562134, -3.7010929584503174], + [8.312357902526855, -2.4946815967559814], + [-1.2588305473327637, -2.893129825592041], + [-3.657684326171875, -0.9518126249313354], + [2.3469645977020264, 5.044829368591309], + [-6.5281572341918945, 8.431380271911621], + [2.2212564945220947, -3.5220236778259277], + [-6.809057235717773, -2.0786983966827393], + [1.9393091201782227, -7.653253555297852], + [2.3453571796417236, 6.0163893699646], + [-5.051329612731934, -0.17444980144500732], + [2.5011866092681885, -4.431520462036133], + [0.8498280644416809, 5.236947059631348], + [-5.284207820892334, 1.560712456703186], + [-0.17156827449798584, 8.860454559326172], + [-0.29824507236480713, 9.519064903259277], + [2.701932191848755, -4.264966011047363], + [1.7366433143615723, 5.758446216583252], + [-3.5106265544891357, -0.14983850717544556], + [1.2718961238861084, -5.319202423095703], + [-4.7070136070251465, -5.838710784912109], + [-7.655810832977295, 9.306495666503906], + [-6.222463130950928, 0.05396449193358421], + [-0.15381401777267456, -1.2818173170089722], + [-4.301613807678223, -1.0026445388793945], + [-2.3556244373321533, 1.3495571613311768], + [2.933048725128174, -4.4180707931518555], + [0.4851493239402771, 0.38160210847854614], + [-2.238558530807495, -0.3330613374710083], + [-0.17174416780471802, 9.72067642211914], + [-2.4023971557617188, 2.1405370235443115], + [-5.679464340209961, 6.637935638427734], + [2.3860483169555664, -3.75978946685791], + [-2.2480220794677734, 1.9265109300613403], + [-5.1448493003845215, -1.6602767705917358], + [2.0478904247283936, 5.592554092407227], + [-2.1791768074035645, 2.3937718868255615], + [2.9032142162323, -5.770284175872803], + [-1.1957072019577026, 1.2880632877349854], + [-6.761628150939941, 8.109552383422852], + [5.5332255363464355, -2.422276735305786], + [-3.924384355545044, -0.7997456789016724], + [-4.133241176605225, -2.101278066635132], + [-4.343698501586914, -2.6124556064605713], + [-0.23562395572662354, 9.776871681213379], + [-4.527831554412842, -3.368020534515381], + [2.5278375148773193, -4.090209484100342], + [2.067248582839966, 5.42757511138916], + [2.4920828342437744, -3.5981757640838623], + [-0.26548272371292114, 10.009378433227539], + [9.34028148651123, -2.604536294937134], + [-5.283459186553955, 2.405019998550415], + [-1.2387665510177612, 1.7149091958999634], + [2.742140054702759, 6.253536224365234], + [-5.143584728240967, -3.242950201034546], + [1.304584264755249, -5.851747512817383], + [2.5018603801727295, 6.022896766662598], + [1.2642240524291992, -6.699678897857666], + [-0.6650113463401794, 9.659440040588379], + [-9.011577606201172, -0.9699505567550659], + [-0.2349948287010193, 9.362553596496582], + [-0.38798201084136963, 9.391853332519531], + [-3.5216002464294434, -3.6871280670166016], + [-3.963926076889038, -1.6512295007705688], + [-4.555785179138184, 5.466061592102051], + [-6.061089992523193, -0.800495982170105], + [-5.220872402191162, 1.4092298746109009], + [3.059349298477173, -4.815947532653809], + [-0.33212727308273315, 9.336517333984375], + [2.176090955734253, 5.195236682891846], + [2.5158188343048096, 6.487185478210449], + [0.8464088439941406, 6.612492561340332], + [3.078305721282959, -4.6190643310546875], + [2.487637758255005, -3.94655704498291], + [1.6304712295532227, 5.161126613616943], + [0.1733301281929016, -0.5609105825424194], + [-1.6247164011001587, 1.0120394229888916], + [-6.1500396728515625, 7.786193370819092], + [1.9456250667572021, 5.502466201782227], + [2.3276548385620117, -3.846440553665161], + [8.537900924682617, -1.8868684768676758], + [-5.011716365814209, -2.235865354537964], + [-5.4380693435668945, 4.672029972076416], + [-4.628825664520264, -3.1064419746398926], + [-4.373396396636963, -4.024899005889893], + [-0.7565534710884094, -0.9838577508926392], + [-0.4459216594696045, 8.830771446228027], + [-5.3329362869262695, 6.142149448394775], + [-0.19121700525283813, 10.480400085449219], + [-1.6230788230895996, -2.479600191116333], + [-5.12164831161499, -3.865765333175659], + [-3.456066846847534, -1.6164939403533936], + [-2.229680299758911, 2.3490424156188965], + [-3.312682628631592, 0.3498252034187317], + [-4.470890045166016, 0.7886343002319336], + [-3.0579946041107178, -5.208846092224121], + [-0.2474261224269867, -1.293614149093628], + [-4.44625186920166, -1.5178080797195435], + [-0.6531260013580322, -0.5792520046234131], + [-4.407937049865723, 2.404568672180176], + [1.7519292831420898, 5.670734405517578], + [-3.0498080253601074, 5.891012191772461], + [-3.8397257328033447, 5.3389739990234375], + [1.9485752582550049, -7.175383567810059], + [4.287918567657471, -1.0945404767990112], + [-0.4967805743217468, 9.539019584655762], + [-2.6578750610351562, 2.4589414596557617], + [-5.147697448730469, -2.2172701358795166], + [2.665552854537964, -8.839574813842773], + [-3.4750778675079346, -1.3345253467559814], + [-0.26421260833740234, 9.905623435974121], + [-2.0733463764190674, -0.43252432346343994], + [-4.331287860870361, 5.986567497253418], + [-0.19381994009017944, 9.87820816040039], + [-1.1896418333053589, -0.6175209283828735], + [-1.9287874698638916, -0.5846912860870361], + [-5.650106906890869, 6.919166564941406], + [9.803524017333984, -2.7397801876068115], + [1.6396843194961548, -2.7034499645233154], + [-5.1812663078308105, -0.547031044960022], + [2.6333792209625244, -3.882288694381714], + [-0.6879317760467529, 0.832567572593689], + [-3.264295816421509, -0.7598443031311035], + [-5.464209079742432, 1.9723140001296997], + [-4.923125267028809, 6.526956558227539], + [-2.5990443229675293, 1.9407323598861694], + [-4.479797840118408, 2.9331488609313965], + [-6.984118938446045, -1.4437700510025024], + [-0.28558945655822754, 9.999784469604492], + [-5.838986396789551, -2.9207077026367188], + [-6.471930027008057, -1.6715538501739502], + [2.776129961013794, -5.413187026977539], + [-6.589748382568359, 8.083316802978516], + [-5.996953010559082, -0.6010623574256897], + [-4.765656471252441, 3.3728153705596924], + [-3.8620636463165283, -1.565954566001892], + [-6.296689510345459, 2.7530200481414795], + [-2.9863131046295166, 1.9970866441726685], + [6.97028112411499, -1.3225326538085938], + [-0.3125728368759155, 9.624761581420898], + [-4.2932000160217285, 4.627021312713623], + [3.0839216709136963, -5.032064437866211], + [-5.110622882843018, -2.1722524166107178], + [-0.18848896026611328, 9.44131088256836], + [2.390558958053589, -3.4541118144989014], + [-7.052073955535889, -0.6081821918487549], + [-5.691199779510498, 2.552642822265625], + [-4.987468719482422, -2.9775807857513428], + [-2.511615514755249, 1.7639089822769165], + [0.2653372883796692, -0.3647398054599762], + [-1.8749542236328125, 2.4682557582855225], + [8.452508926391602, -2.3999087810516357], + [0.40780335664749146, 5.231396675109863], + [2.9115970134735107, -4.362979412078857], + [1.924992561340332, 3.2706751823425293], + [2.6839640140533447, -4.582862854003906], + [2.3974785804748535, -5.7671003341674805], + [-5.3316521644592285, -3.104334592819214], + [8.876470565795898, -2.6030538082122803], + [2.863044023513794, -6.347143650054932], + [-7.310597896575928, 9.193436622619629], + [3.017772912979126, -4.551274299621582], + [-4.219720363616943, -5.611706256866455], + [-2.8240246772766113, 6.025444507598877], + [-4.308770656585693, -2.9895784854888916], + [-5.620593070983887, 2.2592432498931885], + [3.017519474029541, -4.521023750305176], + [3.722228765487671, -5.123763084411621], + [-3.9290759563446045, 5.665631294250488], + [3.0350182056427, -4.7784223556518555], + [-0.5055414438247681, 5.475375175476074], + [-2.3267147541046143, 0.961525559425354], + [0.06785344332456589, -2.426978826522827], + [-0.5029964447021484, 0.6468431353569031], + [-0.4605976939201355, 10.216075897216797], + [-2.390699863433838, 1.0684581995010376], + [-6.138711452484131, 5.867598056793213], + [-0.551232635974884, 11.001214981079102], + [-3.317957639694214, -1.0329327583312988], + [-5.61755895614624, 3.9195520877838135], + [-0.16706284880638123, -1.2376667261123657], + [-2.20082688331604, 4.18853759765625], + [2.619739055633545, -3.9759771823883057], + [-2.0672495365142822, 2.5106194019317627], + [-0.7604727149009705, -0.1686447113752365], + [0.9097802639007568, -7.2397027015686035], + [1.0213404893875122, 5.53314733505249], + [-3.637197256088257, -0.22456103563308716], + [-4.131417751312256, 2.654005765914917], + [-4.364438533782959, -1.0396424531936646], + [2.992706775665283, -4.501407623291016], + [8.757899284362793, -2.3198444843292236], + [6.839913845062256, -1.7386025190353394], + [-6.434182643890381, -2.2510902881622314], + [-5.4419121742248535, -5.144146919250488], + [-3.497654676437378, 5.200093746185303], + [8.77207088470459, -2.429468870162964], + [2.730626344680786, -3.7307822704315186], + [-2.404996871948242, 1.4823126792907715], + [0.5933457016944885, -0.14365053176879883], + [-4.316097736358643, -2.2026333808898926], + [-7.9846978187561035, -0.7925139665603638], + [-2.350219964981079, 0.641693115234375], + [-6.949524879455566, 8.619518280029297], + [-7.0320143699646, -1.292069435119629], + [-0.39723077416419983, -1.2291024923324585], + [1.8423088788986206, 2.3571999073028564], + [-3.935201406478882, -1.1255255937576294], + [2.2930703163146973, -3.422618865966797], + [-0.19359362125396729, 9.61069107055664], + [-4.037129878997803, -4.256264686584473], + [-4.643406391143799, 2.274686098098755], + [2.9908862113952637, 1.2024551630020142], + [2.4381141662597656, 4.864694595336914], + [-4.1667890548706055, -2.4468014240264893], + [9.270812034606934, -2.5531814098358154], + [-3.7597391605377197, -1.693988561630249], + [-5.377874374389648, -3.143354654312134], + [-4.871696949005127, 6.087838172912598], + [-8.859663963317871, -1.0800492763519287], + [-1.915217638015747, 5.7325029373168945], + [3.475383758544922, 0.7299627065658569], + [-5.237341403961182, 1.6326273679733276], + [-2.4203593730926514, -1.975435733795166], + [-2.373857021331787, 1.211553692817688], + [2.4857356548309326, -4.1628804206848145], + [2.5239195823669434, -7.064340591430664], + [2.842559814453125, -4.335117340087891], + [8.8423490524292, -2.405118227005005], + [-0.5761369466781616, 8.735403060913086], + [-3.733550786972046, 1.6369198560714722], + [-5.20812463760376, -3.6496784687042236], + [-2.771592378616333, -0.1853204369544983], + [0.15471151471138, -0.18254095315933228], + [2.4693233966827393, -7.302446365356445], + [-5.344377517700195, 1.903506875038147], + [-2.8812639713287354, 5.825671195983887], + [-0.1539856195449829, 9.988779067993164], + [2.2293589115142822, 5.670557975769043], + [-5.13885498046875, 0.2552033066749573], + [-3.382927179336548, -1.8405948877334595], + [-5.113032817840576, -2.934589385986328], + [2.5624964237213135, -7.385472297668457], + [-4.819338321685791, 2.234787702560425], + [-5.077114582061768, 3.5140326023101807], + [-4.375345230102539, 4.754755973815918], + [1.585552453994751, 5.3640055656433105], + [-4.075033664703369, -3.9510228633880615], + [-3.1806585788726807, 6.914877891540527], + [-5.112308025360107, 6.892112731933594], + [3.233233690261841, -5.047821521759033], + [-5.826122283935547, 2.2690184116363525], + [-4.055312156677246, 5.688624858856201], + [-5.1661696434021, -3.345001220703125], + [-3.5976595878601074, -5.338834762573242], + [-1.668885350227356, 0.12929457426071167], + [2.6301090717315674, 6.26779842376709], + [-3.1428849697113037, 5.922868728637695], + [-2.644416570663452, 2.1954407691955566], + [-3.987152338027954, -3.069545030593872], + [1.6185808181762695, -8.901830673217773], + [8.668082237243652, -2.6600189208984375], + [9.341452598571777, -2.4920241832733154], + [-3.8246042728424072, -1.0084019899368286], + [-0.47500115633010864, 9.581199645996094], + [1.2672795057296753, -8.091888427734375], + [-5.249720096588135, 4.729586601257324], + [0.9513168931007385, 5.5542449951171875], + [-3.9556171894073486, -2.5947492122650146], + [1.3697715997695923, 4.997536659240723], + [8.467328071594238, -2.1078362464904785], + [-4.359048843383789, -1.4890803098678589], + [1.6267619132995605, 5.345419883728027], + [1.6855746507644653, 5.371677398681641], + [-4.389241695404053, -1.4992321729660034], + [-5.002865791320801, -1.7532614469528198], + [-4.09883975982666, -1.739963173866272], + [1.9162580966949463, -8.924253463745117], + [-0.32142698764801025, 8.826528549194336], + [7.669922828674316, -1.9641287326812744], + [-4.517575740814209, -2.3967549800872803], + [-3.387843132019043, 3.8159873485565186], + [-5.021649360656738, 4.462853908538818], + [-5.255329132080078, -1.9144800901412964], + [2.5766117572784424, -6.7440266609191895], + [0.7423593401908875, -0.3714379072189331], + [-2.3324291706085205, 1.6433545351028442], + [-2.7599573135375977, 2.3940141201019287], + [-4.607077121734619, 5.4392242431640625], + [-6.181259632110596, 0.8515799045562744], + [5.236180782318115, -2.170222043991089], + [3.103067636489868, -4.674403190612793], + [-5.394526481628418, 3.96765398979187], + [1.4394845962524414, 5.013064384460449], + [1.9238600730895996, -9.089920043945312], + [8.869242668151855, -2.430938959121704], + [4.641828536987305, 7.534794330596924], + [-5.262386798858643, 1.5016595125198364], + [2.401834726333618, 6.0560150146484375], + [3.3245840072631836, -5.310191631317139], + [-2.1478705406188965, 0.4921175241470337], + [-5.277333736419678, 5.038170337677002], + [-0.4021046757698059, 9.455734252929688], + [2.563232183456421, -4.159406661987305], + [-0.17394351959228516, 10.910055160522461], + [-1.0491580963134766, 0.746802568435669], + [1.2176638841629028, -0.03210419788956642], + [-6.554562091827393, 5.029275894165039], + [1.6303030252456665, -3.0819337368011475], + [-4.451225280761719, -3.349276542663574], + [2.6690123081207275, 1.191796898841858], + [2.186344861984253, 5.6225762367248535], + [-4.280087471008301, -3.7209384441375732], + [-4.302116394042969, -2.610807418823242], + [9.243453025817871, -2.4929373264312744], + [-3.0965969562530518, -2.372100830078125], + [2.4088757038116455, -6.8573222160339355], + [-1.9962166547775269, 2.5558247566223145], + [-0.2820185124874115, -1.1288009881973267], + [1.3893153667449951, -2.6973276138305664], + [-4.6439690589904785, 6.11312198638916], + [1.4439187049865723, -7.737786293029785], + [7.571023464202881, -2.7762744426727295], + [-2.4004299640655518, 5.460349082946777], + [2.0382630825042725, 0.9322512149810791], + [1.0752522945404053, 0.4531517028808594], + [-4.9312052726745605, 3.099817991256714], + [1.7425189018249512, -6.098113059997559], + [-3.113319158554077, -4.109947204589844], + [9.454712867736816, -2.6935875415802], + [-3.3886735439300537, 3.812411069869995], + [-0.3932505249977112, 10.485797882080078], + [3.148947238922119, -4.9461259841918945], + [-5.5301690101623535, 4.478694915771484], + [-4.663761615753174, -3.293471574783325], + [-2.3179867267608643, -3.504516363143921], + [9.01127815246582, -2.567011594772339], + [1.5164804458618164, -3.3121418952941895], + [-5.167897701263428, -3.454428195953369], + [-2.7120330333709717, 2.178877353668213], + [2.6385653018951416, -3.8655645847320557], + [8.206305503845215, -3.917715549468994], + [8.72187328338623, -2.2146058082580566], + [1.6569496393203735, -3.018341064453125], + [7.72111177444458, -2.232536792755127], + [-0.2742844223976135, 11.0953369140625], + [2.3508410453796387, 5.485899448394775], + [-4.730599880218506, -1.9153813123703003], + [1.9639678001403809, -3.1137969493865967], + [-4.455667018890381, 5.259820461273193], + [-6.391573905944824, 0.3517261743545532], + [-3.6434004306793213, -1.3932768106460571], + [-3.8424036502838135, 6.249730110168457], + [3.14483380317688, -4.733046054840088], + [-5.584200382232666, 6.956246376037598], + [3.0695762634277344, -4.60161018371582], + [8.55285358428955, -2.4021871089935303], + [2.91284441947937, -4.58851432800293], + [2.366844415664673, 5.720873832702637], + [1.7051451206207275, -7.030152320861816], + [0.7326974272727966, -6.5468268394470215], + [2.754000425338745, -4.112429618835449], + [2.789071798324585, 0.7551470994949341], + [-3.8747851848602295, -0.659420371055603], + [-5.637604236602783, 8.86375617980957], + [1.9306581020355225, 0.15210114419460297], + [-2.360180377960205, -2.104430675506592], + [-2.382138967514038, 4.932220458984375], + [2.223179340362549, -6.169212341308594], + [-2.763333559036255, -4.888698577880859], + [2.999648332595825, -4.505972385406494], + [-5.115145683288574, 3.4812755584716797], + [3.9500892162323, -0.8684536218643188], + [7.720961093902588, -1.9248040914535522], + [2.0595319271087646, -9.724166870117188], + [-0.9941604137420654, 9.224607467651367], + [-5.516514778137207, 8.065059661865234], + [-4.208166599273682, 1.6617542505264282], + [3.216980218887329, -5.117959022521973], + [-6.326954364776611, 8.948858261108398], + [6.5616984367370605, -1.3181309700012207], + [1.9478776454925537, 4.457093238830566], + [6.1739182472229, -5.517978668212891], + [1.8697649240493774, -5.167215347290039], + [-4.6064534187316895, 5.169000148773193], + [1.8464908599853516, 5.570962905883789], + [2.3862547874450684, -4.353930473327637], + [5.687314033508301, -1.1120986938476562], + [-0.03844303637742996, 5.245051383972168], + [-0.43117254972457886, -1.2621665000915527], + [1.9804518222808838, -5.846132278442383], + [-7.667764186859131, 9.344503402709961], + [8.804705619812012, -2.3621296882629395], + [-5.807790279388428, 5.766661643981934], + [8.591118812561035, -2.3182690143585205], + [-4.641054153442383, -1.8661139011383057], + [8.663527488708496, -2.664851188659668], + [-3.2700254917144775, -1.3432918787002563], + [-0.49109917879104614, 5.128037452697754], + [-3.0368926525115967, 2.3840742111206055], + [2.288198947906494, -9.165938377380371], + [-1.8370890617370605, -2.51366925239563], + [-2.258681058883667, 1.211728811264038], + [-1.458364486694336, 4.61228609085083], + [-2.8646395206451416, -1.41151762008667], + [-2.8776731491088867, -2.153491973876953], + [-4.848315715789795, -1.5346121788024902], + [1.7529234886169434, 4.762636184692383], + [-4.676143169403076, -2.8316001892089844], + [-0.5222402215003967, -1.6414295434951782], + [-0.3898234963417053, 10.350818634033203], + [-3.2616236209869385, -1.147599697113037], + [-2.99375057220459, 5.090934753417969], + [0.5512674450874329, 5.273011684417725], + [-2.144549608230591, 0.8051170110702515], + [9.05548095703125, -2.883094072341919], + [2.899566888809204, -4.593399524688721], + [-6.4263434410095215, -2.5930678844451904], + [5.97249174118042, -2.8670918941497803], + [0.5361607670783997, 1.571675181388855], + [-0.2453795075416565, 9.663995742797852], + [2.360330820083618, 0.8661917448043823], + [-2.4597342014312744, 3.088444232940674], + [-0.9554495811462402, 4.090436935424805], + [-0.18193382024765015, 9.881780624389648], + [0.9596764445304871, -6.371963977813721], + [2.274541139602661, -8.151601791381836], + [-4.885950565338135, -3.112884283065796], + [1.4413862228393555, 5.541505813598633], + [4.154239654541016, -4.7854156494140625], + [-5.028472423553467, 5.469633102416992], + [-4.576209545135498, -0.27530384063720703], + [-3.793936252593994, -2.439480781555176], + [2.2386374473571777, -3.525038719177246], + [3.3702642917633057, -5.021376132965088], + [7.602747440338135, -4.051257133483887], + [4.027378559112549, 6.708563327789307], + [5.721080303192139, -2.4632747173309326], + [-4.657244682312012, -2.6058034896850586], + [1.4817240238189697, 1.2926267385482788], + [3.6174886226654053, -5.374911308288574], + [-2.0946474075317383, -0.6165361404418945], + [-4.335618495941162, -2.7283952236175537], + [1.9117988348007202, 5.289385795593262], + [-2.834810972213745, -4.287049770355225], + [8.572222709655762, -2.38806414604187], + [-4.3016510009765625, 4.148695468902588], + [-1.339809775352478, 0.6625245809555054], + [-6.261202335357666, 6.7494215965271], + [1.749834656715393, 5.823633670806885], + [7.966293811798096, -4.504970550537109], + [3.2203352451324463, 6.764617919921875], + [0.3611457645893097, -0.035518113523721695], + [1.7660161256790161, 0.9191322326660156], + [-6.915785789489746, 8.481435775756836], + [-0.10285139828920364, 10.334412574768066], + [1.7235770225524902, -6.861276149749756], + [-3.112565755844116, -4.14663028717041], + [7.624488830566406, -3.3835642337799072], + [3.0131192207336426, -4.522683143615723], + [9.086125373840332, -2.6959168910980225], + [-4.27230167388916, -2.601677179336548], + [-4.653396129608154, -3.134453535079956], + [8.742837905883789, -2.576831579208374], + [-7.052212238311768, -1.2456183433532715], + [3.3090481758117676, -4.938328742980957], + [-0.2876758575439453, 9.934592247009277], + [-5.343620300292969, 2.6783053874969482], + [-6.293884754180908, 1.7254664897918701], + [-2.376314163208008, 1.480049967765808], + [-4.180888652801514, -3.1892430782318115], + [2.0136735439300537, 4.948712348937988], + [-0.11939433962106705, -0.9732345342636108], + [1.7985336780548096, -6.143364429473877], + [1.4536535739898682, 1.4123404026031494], + [-2.2233469486236572, -1.6351717710494995], + [-2.9486780166625977, 4.593005180358887], + [1.879150390625, -2.8299763202667236], + [-1.602170705795288, 0.8661686778068542], + [-3.3050155639648438, -2.0395352840423584], + [2.840027332305908, -4.325133323669434], + [-0.15920966863632202, 10.504942893981934], + [1.212809443473816, -8.08976936340332], + [-1.8925485610961914, -2.419118642807007], + [9.324088096618652, -2.569410562515259], + [-2.55823016166687, 2.0009148120880127], + [1.471130132675171, -7.844676494598389], + [-6.979843616485596, -2.052873134613037], + [2.167618989944458, -3.9335484504699707], + [1.760705828666687, -7.641729831695557], + [-3.9420320987701416, -4.169930458068848], + [7.33761739730835, -2.630389451980591], + [-4.515927791595459, -3.593898296356201], + [3.0214927196502686, -4.926052093505859], + [-5.882955551147461, 5.399261474609375], + [2.1430165767669678, 1.6289894580841064], + [1.7569825649261475, -3.9613397121429443], + [10.670275688171387, -2.9644076824188232], + [-1.2485967874526978, -2.571392297744751], + [-3.055330991744995, 5.109026908874512], + [-5.395400047302246, 4.222699165344238], + [-5.051583766937256, 2.329859733581543], + [6.713160037994385, -1.9990450143814087], + [-1.3218878507614136, -1.5565377473831177], + [-4.247274875640869, 2.5752761363983154], + [-1.8791598081588745, -3.3555283546447754], + [-5.632561683654785, -2.5923359394073486], + [-4.403465270996094, 2.690131664276123], + [-5.0876898765563965, -1.4607564210891724], + [1.5517163276672363, 0.494828999042511], + [1.910785436630249, -5.948653697967529], + [3.029209852218628, -6.910060882568359], + [-6.516764163970947, 7.88975715637207], + [6.768861770629883, -5.411332130432129], + [3.4627840518951416, 5.939862251281738], + [-6.94321870803833, -1.7336827516555786], + [3.1187312602996826, -4.814748287200928], + [1.1366326808929443, -6.639308452606201], + [-3.8154618740081787, -3.2787187099456787], + [3.0476129055023193, -4.689460277557373], + [2.3017804622650146, 5.305938720703125], + [-5.928897857666016, 5.360891342163086], + [2.035501480102539, -3.6979994773864746], + [-4.182005882263184, -2.2517216205596924], + [-4.455173015594482, -3.161226511001587], + [6.430699825286865, -1.237841010093689], + [-2.3979854583740234, 1.589509129524231], + [8.006897926330566, -2.313730478286743], + [-1.2567436695098877, 2.12345552444458], + [-0.5822656154632568, 9.38094711303711], + [0.9222322106361389, -6.159592151641846], + [-3.656938314437866, -0.9322786331176758], + [4.468394756317139, -1.2441883087158203], + [-3.9305174350738525, 5.803412437438965], + [8.428132057189941, -1.9951244592666626], + [1.3943328857421875, 1.1256593465805054], + [-2.4967339038848877, 1.4921255111694336], + [8.459790229797363, -2.141098737716675], + [-1.2111912965774536, 5.370943069458008], + [-6.712881565093994, 8.203865051269531], + [0.48161691427230835, -6.22117280960083], + [2.174039125442505, 6.4074249267578125], + [-3.846968412399292, 2.6177523136138916], + [-5.409377574920654, 5.36686897277832], + [-0.22455263137817383, 9.864964485168457], + [-3.967221736907959, -2.774993896484375], + [-2.8427205085754395, -1.9892570972442627], + [-5.788346767425537, -2.4163506031036377], + [-3.8580029010772705, -1.3714598417282104], + [-5.348062038421631, -3.2253782749176025], + [8.450464248657227, -2.5790140628814697], + [1.6124756336212158, -7.671412944793701], + [-6.648414134979248, -1.5930997133255005], + [-4.988985538482666, 2.102790594100952], + [-7.320462703704834, -0.5054800510406494], + [-2.665893316268921, 4.831202983856201], + [-2.174485683441162, 2.2896347045898438], + [-2.8398842811584473, 6.653696060180664], + [-6.031290531158447, -1.8993561267852783], + [-1.4582303762435913, -0.6526528596878052], + [-4.3416056632995605, -2.849574327468872], + [6.532395362854004, -1.5462926626205444], + [1.051554560661316, -6.18638277053833], + [-5.243470668792725, -5.6130852699279785], + [9.052072525024414, -2.495399236679077], + [8.939179420471191, -2.429917335510254], + [3.2668542861938477, -4.879073143005371], + [-4.511319160461426, 5.829779624938965], + [-4.723435878753662, 0.22768503427505493], + [-6.244472980499268, 7.372504234313965], + [4.891470432281494, -4.252113342285156], + [-0.2757183313369751, 5.191939353942871], + [-2.912172794342041, -1.5752884149551392], + [2.572798490524292, 1.2737361192703247], + [-6.493470668792725, -1.1200345754623413], + [-0.3473396301269531, 9.487531661987305], + [1.548954725265503, -8.154533386230469], + [-8.54014778137207, 10.488574981689453], + [-0.3504663109779358, 9.747039794921875], + [3.2524898052215576, -3.0764904022216797], + [3.110894203186035, -4.66336727142334], + [-5.489800930023193, 7.9111480712890625], + [8.269122123718262, -2.1893045902252197], + [-6.541715145111084, 7.298573017120361], + [-5.8246917724609375, 8.74715518951416], + [-4.795803070068359, 1.637924313545227], + [-6.437885761260986, -2.557023763656616], + [0.9359816908836365, -2.2737767696380615], + [-3.376255512237549, -3.1151912212371826], + [1.0741970539093018, -6.847308158874512], + [-0.5643815994262695, 9.442873001098633], + [5.175204753875732, -1.0863722562789917], + [4.929703235626221, -2.48188853263855], + [-6.456667423248291, 3.386017322540283], + [-6.01885461807251, 7.971462249755859], + [2.4996607303619385, -3.792562246322632], + [-3.934084177017212, -2.2658257484436035], + [-4.607118129730225, 0.48510146141052246], + [6.039419651031494, -2.610778331756592], + [-4.7484211921691895, -3.2593376636505127], + [-2.1153693199157715, -2.155689239501953], + [4.861410617828369, 7.126445770263672], + [-0.47777387499809265, -1.2187471389770508], + [-4.444756984710693, -3.9436542987823486], + [-6.817441940307617, 8.449731826782227], + [-2.111619234085083, 1.7917933464050293], + [-6.635767936706543, -2.1820952892303467], + [-4.496212005615234, -2.079918146133423], + [-3.980135679244995, -1.2323448657989502], + [6.271719932556152, -6.598649978637695], + [5.820487022399902, -1.238172173500061], + [-5.614187717437744, -7.582732677459717], + [-3.346588134765625, -2.4159209728240967], + [-4.37917947769165, 0.4043763279914856], + [-2.058995246887207, 0.7750221490859985], + [0.6844747066497803, 5.34658145904541], + [1.6746124029159546, -6.579132080078125], + [-6.783599376678467, 7.742537498474121], + [-0.9018260836601257, -2.2630455493927], + [0.29543671011924744, -1.2119388580322266], + [-5.1927571296691895, -5.107111930847168], + [1.8212261199951172, 5.202516555786133], + [-6.434045314788818, -2.6173062324523926], + [1.713513970375061, -3.4479002952575684], + [7.912318229675293, -2.215219259262085], + [-4.42854118347168, -3.2618298530578613], + [-1.7844935655593872, 6.191370010375977], + [0.07049768418073654, 9.945777893066406], + [-6.578497886657715, 8.823293685913086], + [-3.6282248497009277, -4.0703840255737305], + [-8.00279426574707, 9.664953231811523], + [-3.671217203140259, -1.3894294500350952], + [-2.3008320331573486, 3.3694405555725098], + [0.6899881958961487, -0.2529345750808716], + [6.6625494956970215, -4.002616882324219], + [7.2400922775268555, -1.9287817478179932], + [1.8584060668945312, 0.416840136051178], + [1.4011850357055664, -7.523210525512695], + [-7.639749050140381, 9.463318824768066], + [-0.7735029458999634, -1.1210793256759644], + [2.5327632427215576, -3.86415696144104], + [2.1702840328216553, -3.9349429607391357], + [8.065962791442871, -1.7847349643707275], + [-0.39747750759124756, 9.519219398498535], + [0.1164209172129631, 9.901100158691406], + [-4.349228382110596, -4.576115608215332], + [1.9398305416107178, -9.101249694824219], + [1.9819104671478271, -9.611103057861328], + [3.023702621459961, -4.54207706451416], + [-2.4509167671203613, 1.7089259624481201], + [-1.5839061737060547, 9.620709419250488], + [-0.8781201243400574, 0.7633510231971741], + [-0.09085071831941605, 0.787870466709137], + [-3.9226510524749756, -4.502426624298096], + [-5.803238391876221, 4.710686206817627], + [-5.439043045043945, 1.5239208936691284], + [-4.475090026855469, -1.857446551322937], + [-5.533956050872803, 3.9000797271728516], + [0.6560472249984741, -6.118710517883301], + [6.281795978546143, 7.807087421417236], + [4.390793323516846, 7.084781646728516], + [-5.571321487426758, 6.809188365936279], + [-0.17647665739059448, 9.581939697265625], + [-5.656282424926758, -2.2701380252838135], + [8.410453796386719, -2.5199368000030518], + [3.1711604595184326, -4.94033145904541], + [-5.575591564178467, 2.2901628017425537], + [-2.0088353157043457, 2.2770957946777344], + [2.919835329055786, -4.525844573974609], + [4.330352306365967, -3.466094732284546], + [-4.627029895782471, 4.9601359367370605], + [2.027465581893921, -3.5610787868499756], + [5.412119388580322, -1.0461082458496094], + [2.4370272159576416, -5.989296913146973], + [-3.07299542427063, -1.5047826766967773], + [-2.7864558696746826, 2.202113389968872], + [-0.2183976173400879, 9.491165161132812], + [1.2556326389312744, 5.875322341918945], + [-1.3657029867172241, 0.25345271825790405], + [-3.2551732063293457, -2.0965945720672607], + [-4.307614803314209, -2.916722536087036], + [-4.092110633850098, -1.2346910238265991], + [7.418355941772461, -3.351247549057007], + [-6.373080730438232, 1.937991738319397], + [7.2335524559021, -1.8563413619995117], + [2.7216436862945557, -4.664862632751465], + [-2.4234042167663574, 1.2827640771865845], + [-1.659339427947998, 1.922174096107483], + [5.166220664978027, -1.3757916688919067], + [3.5427823066711426, 6.721900463104248], + [-3.6796810626983643, 1.12107515335083], + [-5.702645778656006, -2.4142327308654785], + [10.007779121398926, -2.803839921951294], + [-4.763824462890625, -1.4255341291427612], + [-0.7716053128242493, 3.5800647735595703], + [-1.6214919090270996, -0.007804755121469498], + [-4.663092136383057, 1.986632227897644], + [-0.0927654579281807, 9.644830703735352], + [3.1478350162506104, -4.717736721038818], + [0.6139888167381287, 0.8449878692626953], + [-4.795831203460693, -1.4646258354187012], + [8.156546592712402, -2.4683022499084473], + [-5.015756607055664, -1.9639629125595093], + [7.755504131317139, -2.014957904815674], + [2.8143038749694824, -4.37135124206543], + [2.727661371231079, -4.435194969177246], + [1.668269395828247, 5.693270206451416], + [-2.592092275619507, 1.7813268899917603], + [-7.03231143951416, -1.9405009746551514], + [-2.4886724948883057, 2.331803321838379], + [-0.30082619190216064, 9.883180618286133], + [-3.8613779544830322, -1.2188405990600586], + [7.484533309936523, -2.1540420055389404], + [2.622081995010376, -4.514593124389648], + [9.379589080810547, -2.624619722366333], + [-6.028125286102295, -2.181933641433716], + [2.267601490020752, 5.393363952636719], + [-2.3787405490875244, 1.6924233436584473], + [1.742521047592163, 0.743560791015625], + [-1.332384467124939, 0.3078206181526184], + [-5.09686279296875, -2.734265089035034], + [2.171125650405884, -10.253535270690918], + [-5.687662124633789, -3.280998468399048], + [5.516766548156738, -1.0935068130493164], + [-2.1917262077331543, 2.6051392555236816], + [-4.681740760803223, -2.2052271366119385], + [-5.817599773406982, -4.4991536140441895], + [-4.845278739929199, -0.6010907888412476], + [-2.513615608215332, 5.175930500030518], + [-4.621867656707764, -3.796410083770752], + [-0.16217929124832153, 10.727998733520508], + [3.001913070678711, -4.819285869598389], + [-1.5992240905761719, -1.060841679573059], + [-2.4942169189453125, 1.7338484525680542], + [-4.332356929779053, -2.7941033840179443], + [9.047329902648926, -2.5204367637634277], + [2.1116831302642822, -8.506263732910156], + [2.0682504177093506, -9.320470809936523], + [-0.7109349370002747, -1.9900468587875366], + [-4.28893518447876, 4.850723743438721], + [3.110186815261841, -5.172198295593262], + [-4.178687572479248, -2.437601327896118], + [-4.18841028213501, -1.0873974561691284], + [-2.334575653076172, 0.7025629878044128], + [2.9098405838012695, -4.44207763671875], + [7.2902512550354, -1.7199066877365112], + [-5.45329475402832, 0.9815168380737305], + [-2.518817663192749, 1.1818431615829468], + [7.548410892486572, -2.3923604488372803], + [-2.1888234615325928, 2.5488693714141846], + [-1.4808924198150635, -2.605437755584717], + [-1.90570068359375, -1.4508436918258667], + [9.35020923614502, -2.8457748889923096], + [-3.725177526473999, -2.198552370071411], + [-4.49648380279541, -3.1462337970733643], + [-7.126535892486572, 8.947961807250977], + [2.133695125579834, -3.8443338871002197], + [-3.4992549419403076, -1.514049768447876], + [-1.491711974143982, 0.052286501973867416], + [-2.9329144954681396, -1.792288899421692], + [-5.591146945953369, -0.23315691947937012], + [2.0358617305755615, -3.573829412460327], + [1.791126012802124, 1.130258560180664], + [6.661346435546875, -2.2518696784973145], + [8.918716430664062, -2.3799545764923096], + [-4.47524881362915, -2.636084794998169], + [-2.351541519165039, 1.2030657529830933], + [-3.8267228603363037, -1.5090582370758057], + [6.427180290222168, -1.4806288480758667], + [-1.2365647554397583, -1.8558026552200317], + [-4.283183574676514, 3.1327078342437744], + [2.967118501663208, -4.547308444976807], + [-2.1963658332824707, 2.8153316974639893], + [-6.730230808258057, -1.9343866109848022], + [-5.305790424346924, -3.399096727371216], + [-6.637296676635742, 2.7378756999969482], + [-5.5860137939453125, -4.124942779541016], + [9.363948822021484, -2.2431814670562744], + [-2.6427762508392334, 1.3919192552566528], + [3.355534791946411, 6.27053689956665], + [-2.729849100112915, 2.5401532649993896], + [-6.0433430671691895, -0.7362409830093384], + [-5.0640435218811035, 1.7988996505737305], + [-5.374244213104248, 7.592099189758301], + [-4.9008259773254395, -3.025352954864502], + [9.937275886535645, -2.7667977809906006], + [-4.783116817474365, 6.985911846160889], + [-0.17468273639678955, -1.0631252527236938], + [-0.6095278859138489, 9.778213500976562], + [8.455733299255371, -2.2688968181610107], + [1.3409826755523682, 5.543733596801758], + [2.5844919681549072, -6.6818084716796875], + [-4.948242664337158, -1.087323546409607], + [2.614896059036255, 6.0328779220581055], + [-2.118824005126953, 0.7662822008132935], + [-5.055466651916504, 6.774205207824707], + [-2.331104278564453, 2.9219565391540527], + [9.688528060913086, -2.7055976390838623], + [2.962287187576294, -7.21815824508667], + [-0.115418441593647, 1.1811553239822388], + [-7.693355083465576, 9.338577270507812], + [-6.134908199310303, -2.508885145187378], + [-5.595778465270996, -3.3282628059387207], + [-7.365373611450195, -0.9625946879386902], + [-0.32178735733032227, 9.614953994750977], + [-0.41825538873672485, 10.969529151916504], + [-0.6685510873794556, -0.5870136022567749], + [1.5343111753463745, 5.925102233886719], + [2.896355390548706, -4.367795944213867], + [-0.1296130120754242, -0.7314320802688599], + [-0.2375507950782776, 9.89285659790039], + [-4.69997501373291, -3.0740370750427246], + [3.0451910495758057, -4.662450790405273], + [-2.650472402572632, -3.952296495437622], + [-2.6508004665374756, 4.996997833251953], + [-5.3411688804626465, -1.7513877153396606], + [6.56884765625, -1.4394384622573853], + [2.359604835510254, -2.3740580081939697], + [-3.4844624996185303, -0.07532858848571777], + [1.3333721160888672, -7.984898090362549], + [2.3572494983673096, 5.908813953399658], + [1.3606643676757812, -8.511411666870117], + [8.41594409942627, -2.2316792011260986], + [0.603262722492218, -0.6972653269767761], + [3.1803715229034424, -4.703773021697998], + [-3.648528575897217, -2.8397576808929443], + [2.1675026416778564, -3.5961859226226807], + [6.903257846832275, -1.399922490119934], + [-4.727490425109863, -2.855147123336792], + [-5.108675479888916, 0.665706992149353], + [1.2787070274353027, 2.7494232654571533], + [-1.5387593507766724, 0.7269083261489868], + [6.230530261993408, -2.0855400562286377], + [-0.22102349996566772, 9.435504913330078], + [-4.909770965576172, 4.900088310241699], + [-2.791156530380249, -2.248549222946167], + [2.997187376022339, -4.694019317626953], + [-2.604968309402466, 2.196833372116089], + [-0.4077802300453186, 9.784584999084473], + [-2.7201948165893555, 2.2433788776397705], + [-4.449508190155029, 4.77532958984375], + [-4.838481903076172, -2.7107999324798584], + [-4.190543174743652, 4.379605770111084], + [3.370722532272339, -1.6807862520217896], + [-2.4869296550750732, 2.09200119972229], + [-4.871675968170166, -3.0270705223083496], + [0.3196125030517578, -0.7203503847122192], + [7.977728366851807, -2.0642218589782715], + [8.063044548034668, -2.1139352321624756], + [-6.49066686630249, 7.881204605102539], + [-2.111374616622925, -0.07451021671295166], + [-3.3603713512420654, 6.619472503662109], + [-0.2683042287826538, 9.561858177185059], + [-7.901466369628906, -0.9102874398231506], + [2.922187566757202, -4.455469131469727], + [-2.692701578140259, -1.4083219766616821], + [9.693275451660156, -2.7179062366485596], + [-4.440035343170166, -1.8585976362228394], + [-6.149245738983154, 5.132053852081299], + [-4.401738166809082, -3.4986510276794434], + [-2.6466259956359863, 1.819184422492981], + [-3.5478885173797607, -3.7297136783599854], + [-5.12908411026001, 1.950058937072754], + [-4.2181172370910645, -1.5956979990005493], + [-2.346670150756836, 1.5894865989685059], + [3.8876965045928955, 6.585931777954102], + [9.723847389221191, -2.7028520107269287], + [1.4421069622039795, 4.83704948425293], + [7.404356002807617, -1.896629810333252], + [-2.72823166847229, -3.505068302154541], + [3.073779582977295, -4.794687271118164], + [-5.1966633796691895, -3.464755058288574], + [1.6886967420578003, 3.6522116661071777], + [5.3564534187316895, 7.517570495605469], + [8.694504737854004, -2.025465965270996], + [-5.293683052062988, -5.109532356262207], + [-2.330768346786499, 2.15313720703125], + [4.067498683929443, -3.5998857021331787], + [1.2065225839614868, -7.623428821563721], + [-5.585904598236084, -3.047940254211426], + [-4.774641990661621, -1.9374353885650635], + [-2.4831764698028564, 1.621755838394165], + [-5.915868282318115, 5.816905975341797], + [2.4447057247161865, -3.7968852519989014], + [-2.416260004043579, -2.436945915222168], + [-2.7439849376678467, -4.271721839904785], + [-0.22415560483932495, 9.42481517791748], + [-5.79802942276001, -2.9408535957336426], + [1.2304720878601074, 0.35439544916152954], + [1.986248254776001, 1.3159029483795166], + [2.0156233310699463, 5.524473667144775], + [-2.9529876708984375, 4.432106018066406], + [-0.08018536120653152, 9.831169128417969], + [-2.2191522121429443, 0.49179649353027344], + [-3.243683338165283, 5.293028831481934], + [-4.791792869567871, 1.8171383142471313], + [-4.734683036804199, -2.964057445526123], + [-0.299504816532135, 9.728940963745117], + [-5.115746021270752, -2.4007720947265625], + [-3.874898672103882, -2.6252245903015137], + [-5.3264994621276855, -2.5793161392211914], + [-0.12880730628967285, 5.310459136962891], + [-6.467830181121826, -1.2949802875518799], + [-1.8969306945800781, 1.3870524168014526], + [7.362828731536865, -4.145663261413574], + [2.4259071350097656, -3.5958664417266846], + [-4.313604831695557, 6.439985275268555], + [-5.586080074310303, 5.582225799560547], + [-5.00132417678833, -3.071803092956543], + [-1.7822856903076172, 1.79723060131073], + [-3.7158167362213135, -1.2944146394729614], + [-5.688988208770752, -3.09381103515625], + [-6.2851667404174805, 6.762301445007324], + [-5.204083442687988, -2.1231367588043213], + [5.382213115692139, -1.0597716569900513], + [-6.194957256317139, -0.8975392580032349], + [2.650759696960449, -4.1573615074157715], + [-5.863531589508057, 3.350768566131592], + [-7.68728494644165, -1.7986071109771729], + [-7.479731559753418, -0.760719895362854], + [-0.5155138373374939, 9.270210266113281], + [-1.8529930114746094, 5.308851718902588], + [5.7752203941345215, -1.146514892578125], + [-2.0926241874694824, 2.6809544563293457], + [0.4273862838745117, -5.764667987823486], + [-7.398457050323486, -0.7291535139083862], + [-5.608745098114014, 4.41719913482666], + [0.5508245825767517, -5.388988494873047], + [5.934696674346924, -2.4655673503875732], + [-4.385326385498047, 5.721843719482422], + [-4.837945461273193, 3.310877799987793], + [2.525268316268921, -3.7952840328216553], + [-4.092257022857666, 2.790350914001465], + [-2.472508430480957, 1.3227958679199219], + [2.2102606296539307, -6.654158592224121], + [9.720194816589355, -2.677417039871216], + [1.8079155683517456, 5.37070369720459], + [2.9081342220306396, -4.378045558929443], + [1.9598398208618164, -6.6975884437561035], + [2.1178343296051025, -3.3837995529174805], + [2.600224733352661, 1.3368061780929565], + [2.9108664989471436, -4.395917892456055], + [-4.623661994934082, -3.9239065647125244], + [-2.0654830932617188, 2.613654613494873], + [-2.3968007564544678, 2.0452921390533447], + [-0.15945026278495789, -1.311061978340149], + [-0.7209426164627075, -1.1772540807724], + [0.29059574007987976, -5.404949188232422], + [2.95660662651062, -5.455924987792969], + [7.2613630294799805, -3.1536757946014404], + [-2.8844759464263916, 2.5902607440948486], + [-5.636229515075684, 6.92711067199707], + [-0.659310519695282, 11.73914909362793], + [2.267944812774658, 5.431403160095215], + [4.693097114562988, 6.800118446350098], + [4.939711093902588, -4.256923675537109], + [2.321540594100952, -3.612194776535034], + [5.996306896209717, -1.1360819339752197], + [2.751305341720581, -6.80147647857666], + [8.864846229553223, -2.5642921924591064], + [-2.1417734622955322, -2.32589054107666], + [-0.9925540089607239, 9.285228729248047], + [-1.420015811920166, 5.285097122192383], + [-6.771768093109131, 1.598371982574463], + [2.34708833694458, -7.062236785888672], + [-2.2676239013671875, -2.7956302165985107], + [0.6849754452705383, -5.117162704467773], + [3.7016961574554443, 5.802223205566406], + [-3.3846166133880615, 5.878910064697266], + [1.8256919384002686, 4.335145950317383], + [-5.723508834838867, -0.9473416209220886], + [-1.2517948150634766, -2.216733455657959], + [2.6899969577789307, -4.907664775848389], + [3.7797138690948486, -3.971384048461914], + [-6.5047407150268555, 5.528561592102051], + [-0.4772014021873474, 9.404932975769043], + [-4.449019432067871, 5.777843952178955], + [2.183284044265747, -7.162295341491699], + [-4.863417148590088, -2.495164632797241], + [-4.858999729156494, -2.9832041263580322], + [6.122647762298584, -5.21640157699585], + [9.12585735321045, -2.5863144397735596], + [6.3109307289123535, -1.3278790712356567], + [3.703352928161621, -0.883428692817688], + [9.335087776184082, -2.594928503036499], + [-0.2702716588973999, 9.54859733581543], + [-4.364898681640625, 4.298053741455078], + [-5.3361639976501465, 2.0873525142669678], + [-4.742387294769287, -2.2981529235839844], + [-5.2286272048950195, 7.353874206542969], + [-1.5998116731643677, -0.3107962906360626], + [9.117104530334473, -2.8443286418914795], + [-5.595218181610107, 3.6640684604644775], + [1.6034411191940308, -3.7394609451293945], + [-0.6260122656822205, -2.549952268600464], + [2.4277987480163574, 6.146343231201172], + [0.11822306364774704, 5.867870330810547], + [2.9130373001098633, -4.416718482971191], + [2.0117616653442383, -5.097830295562744], + [3.6445019245147705, 6.565678596496582], + [-3.0185158252716064, -2.199148178100586], + [-5.520836353302002, 2.2678709030151367], + [2.946636915206909, 6.508906364440918], + [3.039957046508789, -3.2991783618927], + [2.811285972595215, -6.972699165344238], + [-4.54761266708374, -5.165898323059082], + [-4.965742111206055, 3.090122938156128], + [5.483852386474609, -2.0502872467041016], + [-0.5407662987709045, -2.001840114593506], + [0.5902891159057617, -5.943061828613281], + [9.287650108337402, -2.6511800289154053], + [1.6761220693588257, 5.023233890533447], + [-6.0369086265563965, 7.8027143478393555], + [-3.259490728378296, -1.0140862464904785], + [-5.040251731872559, 4.120670318603516], + [5.186532497406006, 7.141923427581787], + [-3.8768365383148193, -3.3312413692474365], + [8.66124439239502, -2.289546012878418], + [-2.4710052013397217, 1.7620986700057983], + [-2.467320680618286, 1.9770318269729614], + [-5.783201694488525, 6.509051322937012], + [0.5307413339614868, 1.795777678489685], + [-1.2922451496124268, -3.352048635482788], + [2.4729907512664795, -6.728248596191406], + [-0.21264570951461792, 9.049975395202637], + [6.131102085113525, -1.8214499950408936], + [3.098801851272583, -7.345612525939941], + [-5.623335361480713, -2.452781915664673], + [-3.0873894691467285, 3.7137272357940674], + [7.847598075866699, -1.919281005859375], + [1.6325459480285645, -8.747364044189453], + [8.435444831848145, -2.673631429672241], + [-2.666546583175659, 1.4777076244354248], + [3.14186954498291, -4.761320114135742], + [-3.3798346519470215, -0.6504094004631042], + [-2.7113630771636963, 2.2077815532684326], + [2.184705972671509, 5.802558898925781], + [2.9858219623565674, -4.502772331237793], + [0.04602792114019394, -0.6406025886535645], + [-5.48045015335083, 7.862331867218018], + [-5.276404857635498, -4.106544017791748], + [-5.403564929962158, -1.4090479612350464], + [2.5738282203674316, -6.788764476776123], + [-6.407738208770752, 1.7327336072921753], + [-3.7965314388275146, -1.8938837051391602], + [-0.5217015147209167, 12.16887092590332], + [-2.399700880050659, 2.7720072269439697], + [-3.5399701595306396, -3.3617103099823], + [8.676199913024902, -2.940645933151245], + [-5.207290172576904, -1.3547815084457397], + [-7.09000825881958, 8.805108070373535], + [-4.056337833404541, -2.1503446102142334], + [-3.267533302307129, -1.4485498666763306], + [-0.3755543828010559, 11.048666000366211], + [-2.695178270339966, -3.908649206161499], + [1.912475347518921, -4.824769973754883], + [-0.3651741147041321, 10.54672622680664], + [-0.48001039028167725, 11.666963577270508], + [-0.34106212854385376, 9.732416152954102], + [6.946580410003662, -2.1624786853790283], + [-2.083392858505249, -2.7837884426116943], + [-5.078652858734131, -3.6696014404296875], + [-6.754513263702393, 8.298945426940918], + [8.629048347473145, -2.250169515609741], + [-2.6370880603790283, 2.067453384399414], + [3.1036033630371094, -4.796609878540039], + [-4.211843490600586, -1.9697664976119995], + [2.3274354934692383, -6.241642951965332], + [0.010305486619472504, -0.4848044216632843], + [1.6953434944152832, -3.3157737255096436], + [-4.37569522857666, -2.6422979831695557], + [-5.125570297241211, -0.24866586923599243], + [-2.997039794921875, 3.2158148288726807], + [0.8603662252426147, -6.517824649810791], + [-0.8334346413612366, 4.809821605682373], + [-8.120999336242676, 9.886617660522461], + [3.093243360519409, -4.63847541809082], + [-5.677354335784912, 7.107510089874268], + [-4.99098014831543, 5.707371234893799], + [6.267144680023193, 7.986405372619629], + [4.520605564117432, 6.854313850402832], + [-5.338629722595215, 4.385149002075195], + [2.9173669815063477, -4.3190388679504395], + [-0.27517837285995483, 10.36929702758789], + [2.9954001903533936, -4.5037431716918945], + [-6.339078903198242, 8.262207984924316], + [0.089618019759655, 5.315332412719727], + [-3.472914934158325, -2.7063801288604736], + [9.084399223327637, -2.5084469318389893], + [-2.466172933578491, 4.488595962524414], + [0.5233285427093506, -5.500199317932129], + [-3.7611072063446045, 3.86515736579895], + [-6.459361553192139, 8.169897079467773], + [9.114190101623535, -2.5134994983673096], + [-0.23111999034881592, 9.522672653198242], + [2.2507503032684326, 5.669737815856934], + [-2.342738151550293, 1.4194862842559814], + [2.0439045429229736, 0.8563541173934937], + [-5.1036200523376465, -2.2946178913116455], + [-0.2726072072982788, 9.317190170288086], + [-4.908257961273193, 4.542389869689941], + [1.319798469543457, 4.6928300857543945], + [-4.944726467132568, -3.796004295349121], + [0.4386780261993408, -1.3737448453903198], + [0.06763183325529099, -0.7151519060134888], + [-3.132664918899536, -3.8134806156158447], + [-3.665659189224243, -2.050375461578369], + [0.983646810054779, -5.961424827575684], + [5.864879131317139, -2.814497709274292], + [2.8155434131622314, -5.73840856552124], + [-0.559012234210968, 11.487900733947754], + [-2.3306710720062256, -1.5394548177719116], + [-7.597146034240723, -1.5905252695083618], + [-7.430922985076904, 1.683304786682129], + [-5.105682849884033, -4.086698055267334], + [2.641627788543701, -4.477283954620361], + [-2.0462570190429688, 2.676429033279419], + [-3.4649784564971924, -1.6695514917373657], + [3.5283396244049072, 7.230036735534668], + [-4.87417459487915, -2.536957263946533], + [3.117415189743042, -4.672382354736328], + [3.043917417526245, -7.115654945373535], + [-4.963792324066162, -2.594716787338257], + [8.872481346130371, -2.4669525623321533], + [-5.8779706954956055, 4.271581172943115], + [-2.354198932647705, 2.59782338142395], + [-5.22691535949707, -3.993190050125122], + [-0.39223402738571167, 11.749714851379395], + [-0.1051456406712532, 9.794426918029785], + [2.8210608959198, -7.536553382873535], + [-4.7398295402526855, -3.704040765762329], + [-6.919607639312744, -1.8956502676010132], + [7.737891674041748, -2.0248193740844727], + [-4.8988752365112305, 6.690443992614746], + [2.6902358531951904, -4.0958571434021], + [-0.39737337827682495, 9.476149559020996], + [-2.416929006576538, 2.2892134189605713], + [-2.4676120281219482, 1.8356730937957764], + [7.82798957824707, -1.9695219993591309], + [8.702034950256348, -2.4013636112213135], + [-4.969243049621582, 3.791245222091675], + [1.634789228439331, -3.9549825191497803], + [4.871741771697998, 7.441172122955322], + [-4.599751949310303, -2.375277280807495], + [-0.5290969014167786, -0.7802575826644897], + [2.882838249206543, -4.419476509094238], + [-0.6058400273323059, -0.5668168067932129], + [-2.823106050491333, -1.2501271963119507], + [1.6348997354507446, 5.026312351226807], + [-2.4309213161468506, 1.3539395332336426], + [1.381011724472046, -6.249382972717285], + [0.21598148345947266, -0.38468408584594727], + [3.500469923019409, 0.8587124347686768], + [-0.7715241312980652, -0.868603527545929], + [6.27461576461792, -1.2661792039871216], + [-5.759357929229736, 6.06201171875], + [1.8832767009735107, 5.606878280639648], + [6.705814361572266, -0.7969971895217896], + [-5.579085826873779, -2.0899393558502197], + [5.2337327003479, -1.1030290126800537], + [2.1107234954833984, -7.18362283706665], + [-0.1707363724708557, 9.625118255615234], + [2.691300868988037, -4.522504806518555], + [-2.4058165550231934, 2.2083146572113037], + [7.637218475341797, -3.028242349624634], + [2.143059015274048, -5.698441982269287], + [-5.7983222007751465, 6.46002197265625], + [-2.05741024017334, 2.691004753112793], + [-7.82319974899292, 9.88719654083252], + [-4.88037633895874, -1.5928548574447632], + [2.0770342350006104, 5.157195091247559], + [7.358819961547852, -1.9650299549102783], + [-2.481983184814453, -3.139610767364502], + [6.387216091156006, -1.401748538017273], + [-2.3965871334075928, -1.9515289068222046], + [-2.510098695755005, 0.37019914388656616], + [-6.439536094665527, 7.646730899810791], + [-3.284907102584839, -4.333283424377441], + [3.0090062618255615, -4.7529096603393555], + [-0.3420296311378479, 9.837421417236328], + [-5.694281101226807, 4.482159614562988], + [-3.1159310340881348, 3.0610835552215576], + [7.063631057739258, -2.4070656299591064], + [8.442059516906738, -2.252113103866577], + [3.1267712116241455, -4.851908206939697], + [1.9712965488433838, -3.4852960109710693], + [-4.538124084472656, -2.4397053718566895], + [-6.867262363433838, -0.8654722571372986], + [-2.583798408508301, -2.593682289123535], + [1.788673758506775, -8.962663650512695], + [1.7164785861968994, -2.8228466510772705], + [7.291516304016113, -3.3822786808013916], + [2.364500045776367, 5.549152374267578], + [0.38753432035446167, -0.012948323041200638], + [-6.173166751861572, 2.5437171459198], + [-4.693625450134277, -0.8312439918518066], + [-1.3337571620941162, -0.8425918817520142], + [8.203858375549316, -2.139695882797241], + [0.4538569450378418, 0.2610751986503601], + [-3.063544511795044, 3.5068600177764893], + [0.6376998424530029, 3.9460055828094482], + [3.470890998840332, -5.52616548538208], + [-5.134052753448486, -4.127582550048828], + [-3.0032644271850586, 6.157120227813721], + [-0.30273735523223877, 9.865741729736328], + [-5.1631083488464355, -0.004895452409982681], + [-4.383593559265137, -3.4436874389648438], + [5.126683712005615, -1.8036168813705444], + [7.093929290771484, -1.58633553981781], + [5.067777156829834, -1.0990384817123413], + [-8.433636665344238, -1.0417414903640747], + [-0.5828351378440857, -1.6675080060958862], + [0.8432454466819763, -5.401727676391602], + [-7.424563407897949, -0.6632490158081055], + [2.6136186122894287, -7.09977912902832], + [-1.4482394456863403, -2.1002371311187744], + [-5.483364582061768, 3.736274003982544], + [-2.0051698684692383, 1.5620251893997192], + [-4.7975077629089355, -3.2648065090179443], + [9.788150787353516, -2.7161476612091064], + [-4.586289405822754, -2.6210432052612305], + [-3.9927456378936768, -3.435028553009033], + [-3.0227925777435303, -0.1834096908569336], + [-3.6532483100891113, -3.4371485710144043], + [-5.13284158706665, -3.3817648887634277], + [-0.31663888692855835, -2.7243423461914062], + [-5.548904895782471, -3.6882681846618652], + [4.252880096435547, 6.5675811767578125], + [5.535841464996338, -1.2586971521377563], + [-1.884178876876831, -0.8984918594360352], + [-4.680943965911865, 4.96262264251709], + [2.5378873348236084, -4.921433925628662], + [2.536862373352051, 0.9191219806671143], + [-2.0895118713378906, 1.3568642139434814], + [3.0665395259857178, -4.795039176940918], + [-4.63259744644165, 7.484999656677246], + [-5.965453624725342, 7.562688827514648], + [0.1442030966281891, -4.86741828918457], + [5.754432201385498, -1.0487289428710938], + [-5.06288480758667, -2.922468900680542], + [6.989863395690918, -1.9125980138778687], + [-1.290389895439148, 1.4552003145217896], + [6.84360408782959, -2.0391690731048584], + [-6.382584095001221, -2.16019606590271], + [-3.258758068084717, -0.7996758222579956], + [-4.695836544036865, 5.11226749420166], + [-7.290646076202393, -2.024106502532959], + [0.2699021100997925, -0.11749449372291565], + [1.6374585628509521, 2.3243515491485596], + [3.1306450366973877, -4.8076252937316895], + [2.572143316268921, -4.347749710083008], + [1.0901157855987549, -1.8451873064041138], + [2.9870855808258057, -5.355579376220703], + [-0.6630178689956665, 9.754440307617188], + [-4.975697040557861, -1.635247826576233], + [2.8535139560699463, -5.0227813720703125], + [5.202948570251465, -0.9837063550949097], + [-3.336749315261841, -1.5080068111419678], + [-1.875615119934082, -2.7079944610595703], + [-0.8091590404510498, -0.8350906372070312], + [-6.148791790008545, 8.101922988891602], + [9.008843421936035, -2.799151659011841], + [-0.1914483904838562, 9.621377944946289], + [-2.61604380607605, -4.807689189910889], + [-2.4082648754119873, 1.2623711824417114], + [-0.3635934591293335, 10.752097129821777], + [-2.436067819595337, 5.180545806884766], + [1.2107715606689453, -7.911990642547607], + [-0.2233934998512268, 10.54741096496582], + [-2.820901870727539, -4.147299289703369], + [0.5008202791213989, -5.141977310180664], + [2.9022610187530518, -4.385593414306641], + [-0.11151010543107986, 10.311043739318848], + [4.4032440185546875, -2.4563419818878174], + [-6.0222487449646, -2.1121535301208496], + [2.2523367404937744, -3.42885422706604], + [5.058931827545166, -1.05521559715271], + [2.0966639518737793, -3.512220859527588], + [-0.3348691463470459, 9.195230484008789], + [3.111903667449951, -4.6612958908081055], + [-3.4892637729644775, -3.95302414894104], + [-0.1805727481842041, 9.771788597106934], + [5.7232818603515625, -1.9932801723480225], + [2.916579246520996, -5.933391571044922], + [-5.016251087188721, -2.7422566413879395], + [6.390669822692871, -4.60213565826416], + [-5.232003211975098, 6.238914966583252], + [2.142683506011963, -5.379070281982422], + [-3.3232858180999756, -2.5137455463409424], + [5.436258316040039, -1.0407365560531616], + [-4.858983993530273, 7.515842437744141], + [1.320145606994629, -7.646256446838379], + [-6.651952743530273, 7.890965938568115], + [9.166534423828125, -2.568044424057007], + [-4.437914848327637, -3.7954256534576416], + [-0.33094120025634766, 9.383096694946289], + [0.5376265645027161, -0.679097592830658], + [-3.731923818588257, 6.723041534423828], + [-3.9411747455596924, 4.278252124786377], + [3.0135509967803955, -4.540672302246094], + [-2.7338907718658447, 2.529238224029541], + [0.06218051165342331, -0.30116432905197144], + [-5.508240222930908, 7.74592399597168], + [-4.285793781280518, -3.4408514499664307], + [-4.318088054656982, 0.17107200622558594], + [-3.695327043533325, 3.0343494415283203], + [2.5966007709503174, -7.702118873596191], + [-3.8373095989227295, 6.9485273361206055], + [-0.40251094102859497, 11.048301696777344], + [-4.277441501617432, -3.3791675567626953], + [8.342574119567871, -1.972002387046814], + [3.119478702545166, -4.829187393188477], + [2.921231985092163, -6.617727279663086], + [1.6429171562194824, 1.810442566871643], + [-0.4923609495162964, -1.9716447591781616], + [-3.525827646255493, 3.7939255237579346], + [-0.5181020498275757, 5.377254009246826], + [1.487032175064087, -6.151181221008301], + [2.3182308673858643, 5.846733570098877], + [8.266308784484863, -2.5882973670959473], + [-2.8380777835845947, 2.44140362739563], + [-2.7931268215179443, -4.330506801605225], + [0.20613360404968262, 8.54953384399414], + [-5.2197723388671875, 4.10771369934082], + [-4.4346184730529785, -1.4173589944839478], + [-5.339968204498291, 0.5724696516990662], + [4.703589916229248, 7.075438499450684], + [-5.918666362762451, -2.4560282230377197], + [1.1828373670578003, 5.8328447341918945], + [2.165238618850708, -3.9002912044525146], + [-0.38238662481307983, 10.725296020507812], + [5.086343765258789, -2.021641254425049], + [2.887727975845337, -4.6412787437438965], + [8.805512428283691, -2.4053874015808105], + [-2.1581645011901855, 0.6365474462509155], + [-0.11306486278772354, -1.2633577585220337], + [7.737668991088867, -1.802876353263855], + [2.1548213958740234, -3.923619508743286], + [-4.999374866485596, -1.9106817245483398], + [-0.44264671206474304, -1.3553086519241333], + [8.391793251037598, -2.6590781211853027], + [1.125028371810913, -7.7758073806762695], + [0.2781530022621155, 4.888443946838379], + [-3.4217841625213623, -3.094860553741455], + [-4.199729919433594, -0.617071807384491], + [-2.4093515872955322, 1.2020524740219116], + [-2.753307819366455, -1.6095812320709229], + [-0.18054771423339844, 9.949024200439453], + [-3.212216377258301, -0.1800626516342163], + [-0.21001207828521729, 9.007284164428711], + [3.0762453079223633, -4.834719657897949], + [-5.529738426208496, 6.174283027648926], + [-2.805830717086792, -3.5723769664764404], + [1.108048439025879, -6.8358154296875], + [2.66835355758667, -3.993492364883423], + [1.7876229286193848, -7.523862838745117], + [-4.536061763763428, -2.531477212905884], + [-4.73673152923584, -3.8353044986724854], + [-0.48023176193237305, -1.0562522411346436], + [4.956106185913086, -1.860809326171875], + [-5.661798477172852, 6.534612655639648], + [-5.4271063804626465, 6.9382100105285645], + [3.0659821033477783, -4.6119256019592285], + [7.360694885253906, -4.794791221618652], + [-2.2265257835388184, 0.45103031396865845], + [3.06044602394104, -4.759976387023926], + [-4.411518573760986, -0.8543840646743774], + [2.051469326019287, 5.3432817459106445], + [-1.1092853546142578, 6.804291725158691], + [1.9037859439849854, -8.309385299682617], + [-0.3728902339935303, 9.758772850036621], + [-0.5410568118095398, 11.208683013916016], + [-0.7898232936859131, 9.4380464553833], + [2.6357970237731934, -4.287919521331787], + [0.3674830198287964, 9.668365478515625], + [-4.681924343109131, 4.68419075012207], + [-5.694156646728516, 5.492767333984375], + [2.4035582542419434, -8.987425804138184], + [-2.321719169616699, 2.2813656330108643], + [2.8214118480682373, -4.265590667724609], + [0.8955995440483093, 0.5552346706390381], + [-0.10736579447984695, 10.408025741577148], + [-1.3371332883834839, -2.008533000946045], + [-4.080922603607178, 1.2868983745574951], + [-5.178313255310059, 4.530928611755371], + [3.266510248184204, 6.8057026863098145], + [1.978083610534668, -8.19899845123291], + [-5.7805304527282715, -2.574225664138794], + [-2.1974825859069824, 0.9478562474250793], + [-4.824182510375977, 2.6327667236328125], + [-6.477808475494385, 5.1251420974731445], + [-5.332732677459717, 3.94331693649292], + [7.314113140106201, -3.4108829498291016], + [-2.981933116912842, -3.127542734146118], + [3.133594512939453, -4.936047554016113], + [-2.9756736755371094, -0.6980910301208496], + [1.6399437189102173, -7.124053955078125], + [3.2110097408294678, -5.034770965576172], + [-4.160672664642334, 0.09930062294006348], + [-5.140854358673096, 5.9648332595825195], + [-0.5011276602745056, 10.795125961303711], + [2.4503231048583984, -3.521721363067627], + [-6.723890781402588, 8.834676742553711], + [8.393610954284668, -2.433966636657715], + [-4.541301250457764, -5.172769546508789], + [-5.167209148406982, 4.587542533874512], + [-0.19673842191696167, 9.843448638916016], + [-1.4035260677337646, 1.2578368186950684], + [-2.6282684803009033, 1.9487053155899048], + [-2.3088128566741943, 1.1202751398086548], + [-2.4738833904266357, 1.8118486404418945], + [1.3127787113189697, -6.684892654418945], + [-7.079433917999268, -0.6472521424293518], + [2.950888156890869, -4.640775203704834], + [-4.572258949279785, -1.8541380167007446], + [-5.264203071594238, 0.803394079208374], + [0.3772087097167969, -6.082577228546143], + [-3.1021463871002197, -4.7257184982299805], + [-3.433513879776001, 3.3380508422851562], + [1.8125567436218262, -4.968441486358643], + [3.1995162963867188, -4.783023357391357], + [-4.633805751800537, 3.342674970626831], + [2.524529457092285, -5.746232032775879], + [6.960928440093994, -2.3306400775909424], + [-5.23066520690918, -2.4435508251190186], + [2.2302744388580322, -6.963080883026123], + [-4.956798553466797, -1.00267493724823], + [-6.269479274749756, 7.979740142822266], + [3.0535166263580322, -4.8729729652404785], + [-3.405236005783081, 6.223989486694336], + [-0.32237592339515686, -1.2925552129745483], + [2.3079841136932373, 5.507279396057129], + [-5.557528018951416, 2.9429640769958496], + [-3.3086354732513428, -2.814814805984497], + [0.6874018311500549, 5.130743026733398], + [-0.25047096610069275, -1.6983693838119507], + [7.822610855102539, -2.201215982437134], + [-2.7622287273406982, 0.0954056978225708], + [2.1725375652313232, -7.8490071296691895], + [-0.23627829551696777, 10.425592422485352], + [-1.5883430242538452, 2.109055995941162], + [-4.330114364624023, -4.172008514404297], + [-5.115105628967285, -3.601322889328003], + [-1.4056395292282104, 0.43718478083610535], + [-6.624531269073486, 1.9848157167434692], + [1.0462069511413574, -6.82415246963501], + [-4.061587810516357, 4.39495849609375], + [1.9243195056915283, 5.524980068206787], + [4.797610759735107, -1.3937283754348755], + [-2.3284714221954346, -1.3289611339569092], + [-5.060173511505127, -2.964318037033081], + [2.978262186050415, -4.7281975746154785], + [2.837846279144287, -6.32472038269043], + [3.0352728366851807, -4.5555739402771], + [-3.5099563598632812, 5.505089282989502], + [-2.638920545578003, 1.286628246307373], + [2.0037102699279785, -7.954405784606934], + [-7.009079456329346, -2.7640345096588135], + [-4.5039143562316895, -2.972618341445923], + [-6.0605998039245605, -2.5260586738586426], + [0.5182305574417114, -3.0223147869110107], + [-5.312403202056885, -2.0557005405426025], + [-4.604936122894287, -3.8649771213531494], + [-3.299213409423828, 6.768776893615723], + [-2.2924633026123047, 2.422039031982422] + ], + "3": [ + [1.923166275024414, 5.712525367736816], + [10.186968803405762, -2.4701473712921143], + [9.17404842376709, -2.3292527198791504], + [-5.095323085784912, 7.756850242614746], + [-4.298985004425049e-6, 12.860621452331543], + [0.19149774312973022, 10.527395248413086], + [3.0298516750335693, 1.2213494777679443], + [-2.0667083263397217, 2.3048043251037598], + [4.279618740081787, -4.034858226776123], + [-5.3092522621154785, -0.9229210615158081], + [-4.386757850646973, 7.730414867401123], + [-2.5176644325256348, 1.341917872428894], + [-1.5079145431518555, 1.3960304260253906], + [2.0279362201690674, 0.7968196868896484], + [8.331459045410156, -2.1829354763031006], + [8.623146057128906, -2.4404871463775635], + [8.70099925994873, -2.3690664768218994], + [-4.8759684562683105, -3.2179858684539795], + [1.962540626525879, 2.0263140201568604], + [1.5363010168075562, 7.48828125], + [-4.22374153137207, 3.6377596855163574], + [-2.323697328567505, -4.0726776123046875], + [6.037708282470703, 8.085406303405762], + [4.233505725860596, 6.924252510070801], + [3.43253231048584, 1.6398522853851318], + [1.566695213317871, 4.5980939865112305], + [-6.083540439605713, 0.45589303970336914], + [-3.877514600753784, -2.8520004749298096], + [-4.67616081237793, 5.736174583435059], + [1.3843839168548584, -6.954136848449707], + [3.267559766769409, -6.188920974731445], + [7.893820285797119, -2.0416691303253174], + [0.1963217854499817, 10.915397644042969], + [-6.676833152770996, -0.31148314476013184], + [-5.1126322746276855, 6.913414001464844], + [2.617449998855591, -7.147054195404053], + [2.130061388015747, 5.307493209838867], + [-2.537184953689575, 2.0193932056427], + [-3.2814524173736572, -3.0739943981170654], + [-2.6970882415771484, 5.094587326049805], + [-4.164379119873047, -6.645175933837891], + [0.5934523940086365, -0.9970918893814087], + [0.2218785285949707, -1.2192094326019287], + [-2.1408560276031494, 2.3791863918304443], + [0.08311115950345993, 10.1039457321167], + [0.1395968794822693, 11.25020980834961], + [0.26863324642181396, 11.607603073120117], + [1.7077686786651611, -0.9845388531684875], + [2.658151149749756, 0.9369915723800659], + [2.121933698654175, -8.168600082397461], + [6.8893866539001465, -1.7928858995437622], + [-4.390801906585693, -5.8876848220825195], + [-1.9091416597366333, 2.2919631004333496], + [7.938023090362549, -2.4483983516693115], + [0.7240004539489746, -0.7849148511886597], + [0.7818012237548828, -0.7749778628349304], + [-2.199626922607422, -0.7619302272796631], + [2.7579996585845947, 0.8587784171104431], + [-3.3020288944244385, 4.7617597579956055], + [-4.369958400726318, -1.1309605836868286], + [0.2293972373008728, 10.993375778198242], + [0.045878224074840546, 8.976078033447266], + [3.0292370319366455, -4.2571916580200195], + [2.717031717300415, 2.2119901180267334], + [-0.008625932037830353, 9.624282836914062], + [0.04987411946058273, 9.499662399291992], + [-4.327565670013428, 4.584546089172363], + [8.930206298828125, -2.534527063369751], + [-2.1046977043151855, 2.5840964317321777], + [3.121784210205078, -3.8488237857818604], + [-0.9688707590103149, -3.9457626342773438], + [6.881948947906494, -1.451067328453064], + [1.5634503364562988, 4.441298961639404], + [-0.820389449596405, 1.6243152618408203], + [-1.156456708908081, -3.6169493198394775], + [0.1461309790611267, 10.352025032043457], + [8.210474967956543, -2.245255470275879], + [2.0619864463806152, -7.428831100463867], + [-2.480740547180176, 0.2867172360420227], + [0.43892669677734375, 11.101037979125977], + [-3.689653158187866, -1.8057552576065063], + [-0.5340957641601562, -1.4377222061157227], + [-6.935196399688721, 8.272113800048828], + [-3.095372438430786, -5.81436824798584], + [-2.2575862407684326, -2.3020012378692627], + [-1.7907733917236328, 1.963542103767395], + [-4.320589065551758, 4.339857578277588], + [-2.231947660446167, 2.239091396331787], + [8.452874183654785, -2.327016592025757], + [-0.1919688582420349, 0.8287200331687927], + [2.230170965194702, 3.3710439205169678], + [-5.973573207855225, -2.434225082397461], + [2.9741804599761963, -6.4429144859313965], + [4.1771087646484375, -7.941206932067871], + [0.010351710021495819, 9.443580627441406], + [7.094405651092529, 8.53982162475586], + [0.5810214877128601, 11.260324478149414], + [2.3540923595428467, 2.979285955429077], + [-5.80935525894165, 8.635397911071777], + [0.294586718082428, 11.465460777282715], + [4.290166854858398, -3.615493059158325], + [-5.323716640472412, -0.6304290294647217], + [7.156858921051025, -1.754266619682312], + [1.0797560214996338, 4.887914657592773], + [3.016577959060669, 4.563912391662598], + [0.01377444714307785, 12.519710540771484], + [3.2115087509155273, -4.469808578491211], + [-3.9848620891571045, -4.947583198547363], + [0.7718746662139893, -0.7188646793365479], + [8.208189964294434, -2.509636640548706], + [7.074162483215332, -2.205254316329956], + [4.3750128746032715, -4.893464088439941], + [0.13073444366455078, 12.054134368896484], + [-1.4798710346221924, 1.5177899599075317], + [-2.453281879425049, 1.9812971353530884], + [2.6999752521514893, -8.07756233215332], + [2.922224283218384, -6.298108100891113], + [6.256570339202881, 7.758296489715576], + [9.868314743041992, -2.4207003116607666], + [0.24836647510528564, 10.68665885925293], + [4.009624004364014, 1.7709195613861084], + [-1.4987396001815796, 3.1565701961517334], + [8.607081413269043, -2.436495304107666], + [0.07085608690977097, -0.9938223361968994], + [6.781080722808838, 8.402974128723145], + [2.2148642539978027, 5.275533676147461], + [0.033366672694683075, 12.054849624633789], + [8.102940559387207, -2.8200013637542725], + [-4.7154717445373535, -2.4017646312713623], + [1.8550851345062256, -8.062753677368164], + [2.633435010910034, 0.8137595057487488], + [-1.923346996307373, 2.830873489379883], + [2.7295117378234863, 5.6153364181518555], + [-2.2703826427459717, 1.1951429843902588], + [-0.12798398733139038, 13.051217079162598], + [3.0151174068450928, -4.380148887634277], + [0.04718225449323654, 12.467606544494629], + [-0.03523267060518265, 9.581768035888672], + [3.445288896560669, 1.44894278049469], + [2.6666018962860107, -3.7980170249938965], + [5.513133525848389, -1.185786247253418], + [-3.517986536026001, 7.567009449005127], + [-5.123913764953613, -1.6025041341781616], + [6.659610748291016, 8.158845901489258], + [1.045049786567688, -0.4929051399230957], + [-3.906736135482788, 5.764359474182129], + [6.625141620635986, -1.5293090343475342], + [8.667190551757812, -2.41630220413208], + [-3.83471941947937, -5.432232856750488], + [-7.100668430328369, 8.337930679321289], + [-4.952246189117432, -3.046538829803467], + [-2.8564794063568115, -2.7099931240081787], + [-2.1213412284851074, 2.680522918701172], + [-3.597648859024048, 5.434130668640137], + [2.1667518615722656, 4.88487434387207], + [4.400606632232666, -4.099833965301514], + [-3.819545269012451, -3.555039644241333], + [-4.345963001251221, -3.2262585163116455], + [-3.4940898418426514, 4.0708160400390625], + [5.308462142944336, -0.7417153716087341], + [0.00356852263212204, 11.676040649414062], + [4.462414264678955, -3.3975934982299805], + [-2.4855799674987793, -0.28430598974227905], + [-2.3525960445404053, 1.430207371711731], + [4.558990001678467, 6.501803398132324], + [4.171508312225342, -5.514762878417969], + [6.679357528686523, -1.3764934539794922], + [-4.087858200073242, -5.736680030822754], + [6.159582614898682, -1.2952675819396973], + [-7.6541361808776855, 0.03914665803313255], + [3.803079128265381, -2.693821668624878], + [-0.02264174073934555, -1.401994228363037], + [-2.2240376472473145, 2.6639597415924072], + [-4.3977952003479, -4.674587726593018], + [-2.1823816299438477, 0.0669892430305481], + [-6.88809871673584, 7.998096466064453], + [0.09124474972486496, 11.656001091003418], + [-3.929258108139038, -6.525277137756348], + [-2.1021971702575684, 2.4961135387420654], + [-4.59656286239624, -1.66714346408844], + [-6.666830539703369, 5.118427276611328], + [-2.2939627170562744, 1.039825439453125], + [-4.4986701011657715, -6.132152080535889], + [-3.8724148273468018, -6.057952404022217], + [-0.06291062384843826, 13.516863822937012], + [5.923674583435059, -5.273838043212891], + [8.667418479919434, -2.326355457305908], + [6.203286647796631, 7.870963096618652], + [9.1713228225708, -2.3174591064453125], + [5.759832382202148, -1.8778629302978516], + [3.342133045196533, -5.785650253295898], + [2.583481550216675, -5.8197150230407715], + [2.963508129119873, -4.096055030822754], + [2.82564115524292, -3.769040822982788], + [1.9048779010772705, 1.453795313835144], + [-3.6197869777679443, -5.820910930633545], + [2.3993561267852783, 2.65267276763916], + [-0.5160817503929138, -1.2460395097732544], + [-2.8619906902313232, -3.350327730178833], + [3.32726788520813, -6.666099548339844], + [2.9863736629486084, 5.875877380371094], + [0.1884893774986267, 11.579038619995117], + [9.724224090576172, -2.3306238651275635], + [-3.690378427505493, -2.8929431438446045], + [4.712705135345459, 6.980263710021973], + [8.07857608795166, -2.406658411026001], + [-0.22979944944381714, 10.251127243041992], + [-4.096139907836914, -0.9240356087684631], + [9.749378204345703, -2.549525499343872], + [5.914847373962402, 7.962011337280273], + [6.8112311363220215, 8.33510971069336], + [-1.767999291419983, 0.24372464418411255], + [6.233893871307373, -1.3364112377166748], + [2.8347837924957275, -9.418670654296875], + [9.465847969055176, -2.3039324283599854], + [-3.225433588027954, -3.4114391803741455], + [3.1514780521392822, -4.140440464019775], + [-3.345060110092163, -4.323141574859619], + [0.11114952713251114, -1.5935367345809937], + [9.463480949401855, -2.6862194538116455], + [2.9744985103607178, -7.578717231750488], + [3.5205178260803223, -2.8309781551361084], + [3.0201752185821533, -4.262521743774414], + [7.0209574699401855, -3.554940938949585], + [5.89466667175293, 7.5903825759887695], + [10.660443305969238, -2.4678878784179688], + [-0.014259524643421173, 12.622401237487793], + [0.3344447612762451, 11.41539192199707], + [5.797173500061035, 8.074466705322266], + [-4.3543381690979, -3.234513759613037], + [-1.7464004755020142, 1.7193152904510498], + [4.194605350494385, 7.468677997589111], + [-1.775026798248291, 4.987886905670166], + [2.9281105995178223, -5.754475116729736], + [5.463726043701172, 7.104715347290039], + [5.260494232177734, 7.582061767578125], + [-0.011457689106464386, 9.429226875305176], + [-2.1489405632019043, 2.547947406768799], + [-0.018089719116687775, 12.538005828857422], + [-3.907485246658325, -5.791439533233643], + [4.209717273712158, -3.9835495948791504], + [1.3866517543792725, 5.398693084716797], + [1.8884377479553223, 5.064176559448242], + [5.80034875869751, 7.90321159362793], + [3.276254892349243, -4.141395568847656], + [2.1441733837127686, 5.406015872955322], + [4.777323246002197, -4.060165882110596], + [-3.6019694805145264, 4.77958345413208], + [-0.1443704068660736, 0.11654125154018402], + [2.591111421585083, 4.233035087585449], + [0.06392829865217209, 11.544204711914062], + [-3.815758466720581, -2.889491558074951], + [4.798192501068115, -4.07074499130249], + [-5.744680881500244, 1.513062596321106], + [-6.882721424102783, 8.062807083129883], + [-0.015619941055774689, 12.886407852172852], + [-1.2596726417541504, 1.8153311014175415], + [0.3140931725502014, 11.415977478027344], + [-4.941941738128662, -1.5498656034469604], + [5.017538547515869, -4.208502769470215], + [-3.586350202560425, -4.2464094161987305], + [0.09753977507352829, 9.215631484985352], + [0.009127788245677948, 12.97754192352295], + [-0.11370376497507095, 0.7158745527267456], + [2.587822675704956, -8.29287052154541], + [7.482633113861084, -2.3797380924224854], + [-5.180680751800537, -2.2506537437438965], + [-1.2177369594573975, 1.4795011281967163], + [-4.082170486450195, -1.2735694646835327], + [9.729121208190918, -2.368138074874878], + [6.804758548736572, -1.712491512298584], + [0.9399204850196838, -0.6350886821746826], + [-4.753169536590576, 5.409332275390625], + [8.741662979125977, -2.372117042541504], + [7.548356533050537, -1.6529687643051147], + [-0.021871156990528107, 12.866302490234375], + [2.5504376888275146, -9.361059188842773], + [-3.975365400314331, -1.8108433485031128], + [10.92576789855957, -2.5318682193756104], + [0.9213719964027405, -6.904351234436035], + [2.7164273262023926, -3.882563829421997], + [2.0768654346466064, 0.7501082420349121], + [1.0622280836105347, 10.86895751953125], + [-1.779085397720337, -1.0178046226501465], + [5.09913969039917, -6.339712142944336], + [-3.278635263442993, -3.213439702987671], + [4.030844688415527, 6.913975715637207], + [-6.249556064605713, 1.524152159690857], + [3.4037861824035645, 1.6262314319610596], + [-2.5709972381591797, 1.8293373584747314], + [2.760176181793213, -3.718815565109253], + [4.692921161651611, -3.2121012210845947], + [-3.37888765335083, -1.429423451423645], + [2.476923704147339, -6.698441028594971], + [-2.6458427906036377, 2.031909942626953], + [7.248981952667236, -2.5707972049713135], + [-1.4618643522262573, 0.9348756074905396], + [-4.5417585372924805, -6.275923728942871], + [3.1315343379974365, 5.938145637512207], + [-7.086607456207275, 8.111319541931152], + [-0.3998962640762329, 1.3191702365875244], + [5.792082786560059, -1.2186616659164429], + [0.2089700698852539, 11.812829971313477], + [1.7544262409210205, -6.562420845031738], + [0.27608877420425415, 11.55419921875], + [-2.9938042163848877, -3.6971256732940674], + [8.626099586486816, -2.3450498580932617], + [7.798113822937012, -2.056765556335449], + [3.488912582397461, -7.156964302062988], + [5.121194362640381, -3.9736320972442627], + [2.091618537902832, -6.4222540855407715], + [-0.03626985102891922, 8.925887107849121], + [-0.3224056363105774, 9.9010648727417], + [5.86544132232666, 7.608242034912109], + [-4.8787102699279785, -1.9469478130340576], + [-3.242017984390259, -2.7274672985076904], + [8.975204467773438, -2.7068097591400146], + [3.0628812313079834, -8.433521270751953], + [-1.4362058639526367, 1.298961877822876], + [8.608383178710938, -2.2557427883148193], + [-2.2723004817962646, 2.4823315143585205], + [-0.6826978921890259, 1.4383624792099], + [8.505975723266602, -2.296503782272339], + [-0.04666370898485184, 13.09369945526123], + [-2.8108811378479004, -4.9596476554870605], + [0.15665733814239502, 10.65312385559082], + [2.819877862930298, 6.301062107086182], + [2.228421449661255, 3.8872106075286865], + [2.9849445819854736, -3.7272286415100098], + [-2.4016616344451904, 2.2493836879730225], + [0.11319654434919357, 11.416028022766113], + [-4.0230183601379395, -2.4374592304229736], + [1.970287799835205, -7.474142551422119], + [-5.122263431549072, 4.551918029785156], + [-5.421192169189453, -0.8997753858566284], + [3.1833536624908447, 1.490346074104309], + [-6.025362491607666, 7.331891059875488], + [-3.1503894329071045, -3.914541006088257], + [-2.2177631855010986, 1.3412030935287476], + [-0.7214571237564087, -2.8793671131134033], + [8.973569869995117, -2.205742597579956], + [2.849813222885132, -9.268548965454102], + [-5.280742168426514, -2.2344789505004883], + [-6.149082660675049, 7.027108192443848], + [3.0896804332733154, -7.2922515869140625], + [-0.6387088894844055, 1.0113365650177002], + [-2.4449775218963623, 3.678335666656494], + [6.8081464767456055, 8.36477279663086], + [1.1683564186096191, -7.007298469543457], + [1.43153977394104, -5.202295780181885], + [5.864555835723877, 8.096383094787598], + [2.036198377609253, 7.329326629638672], + [6.786579608917236, -4.06802225112915], + [3.112574815750122, -3.5030858516693115], + [-0.013262100517749786, 12.26551628112793], + [5.598920822143555, 7.666264057159424], + [1.8107497692108154, 1.577401876449585], + [8.37906265258789, -2.247480630874634], + [0.3099876642227173, -0.1351504623889923], + [1.1789588928222656, 4.151272773742676], + [5.83836030960083, -2.8206660747528076], + [2.1224453449249268, 5.892640590667725], + [-1.6657419204711914, 0.8868619203567505], + [-5.119870662689209, 6.390076637268066], + [5.633605480194092, -1.1491540670394897], + [3.249235153198242, -4.700351238250732], + [-2.452894926071167, 0.35514092445373535], + [-3.7484395503997803, -1.0061358213424683], + [4.274442672729492, 7.097624778747559], + [8.479762077331543, -2.3173038959503174], + [-0.9515258073806763, -2.8359289169311523], + [2.4540841579437256, -9.019481658935547], + [-6.196824550628662, 7.199419975280762], + [2.639932870864868, -8.268793106079102], + [-4.41699743270874, -6.905279636383057], + [5.755023002624512, -1.279392123222351], + [4.230847358703613, -7.897250175476074], + [-7.3325347900390625, -0.5549887418746948], + [-0.9984608292579651, -1.4226349592208862], + [3.2321383953094482, -4.663393020629883], + [-4.478943347930908, -4.185605049133301], + [-4.808577537536621, 8.098184585571289], + [-2.0622503757476807, 2.2811779975891113], + [2.416139841079712, 0.3297024071216583], + [-5.6086812019348145, -0.9803295135498047], + [8.443620681762695, -2.256537437438965], + [-2.323845624923706, 1.5740772485733032], + [5.5149054527282715, 7.524563789367676], + [-2.020571231842041, 2.608792781829834], + [0.21945637464523315, 12.61376953125], + [-5.246276378631592, 6.018656253814697], + [-2.1093833446502686, 1.7605798244476318], + [-1.023575782775879, -3.393537759780884], + [5.583070278167725, -2.3148245811462402], + [-2.1138837337493896, 2.386673927307129], + [-2.2091727256774902, -2.7974963188171387], + [0.21816158294677734, 8.932809829711914], + [5.2414679527282715, -2.81699800491333], + [-5.0126214027404785, 7.527608871459961], + [1.7716065645217896, 4.865456581115723], + [-0.6757649779319763, -2.5923783779144287], + [3.8701539039611816, -6.419556617736816], + [3.561790943145752, 0.9494733810424805], + [4.159260272979736, 1.8322588205337524], + [3.7536261081695557, -7.428476333618164], + [3.6393473148345947, -7.466378211975098], + [10.872421264648438, -2.4908607006073], + [6.330671787261963, -3.153208017349243], + [8.078231811523438, -2.1922526359558105], + [2.062650680541992, 4.972495079040527], + [2.924586296081543, -3.9972984790802], + [2.293483257293701, 3.6705119609832764], + [-1.8877943754196167, 2.440044641494751], + [-1.6142023801803589, 2.153439521789551], + [5.011627674102783, -1.3247692584991455], + [5.916971683502197, -5.039427757263184], + [-3.764116048812866, -3.4053869247436523], + [3.271198034286499, -9.049598693847656], + [3.9722912311553955, -3.607841968536377], + [9.090288162231445, -2.444514274597168], + [-5.928053855895996, 7.025883674621582], + [1.3804404735565186, -0.19924642145633698], + [-2.049865245819092, 2.5237653255462646], + [0.2723958492279053, -0.7484468817710876], + [-5.078528881072998, -5.311267852783203], + [1.0349161624908447, -0.6557892560958862], + [-4.59503698348999, -6.818849563598633], + [0.1600770354270935, 12.152297973632812], + [7.143134593963623, -1.9409371614456177], + [-2.119990348815918, -3.4425179958343506], + [3.515620470046997, -2.951437473297119], + [-3.436469316482544, -3.179266929626465], + [-0.006425090134143829, 12.74217414855957], + [-1.2633758783340454, -2.490833282470703], + [-4.43129301071167, 4.883650779724121], + [-0.9751047492027283, 0.921862006187439], + [2.9032480716705322, -5.109917163848877], + [4.798676490783691, 6.859370231628418], + [8.641999244689941, -2.5037741661071777], + [1.5693519115447998, -7.749803066253662], + [-2.1633613109588623, 2.5630643367767334], + [3.4650707244873047, -5.869541168212891], + [3.7469708919525146, -5.356411933898926], + [10.43747615814209, -2.3246757984161377], + [7.678816318511963, -2.794074058532715], + [-7.09714937210083, 0.0532602034509182], + [-6.013054370880127, -0.599441647529602], + [-0.7789810299873352, -0.9455163478851318], + [4.266061305999756, -5.396533489227295], + [-1.4624773263931274, -1.9193037748336792], + [-4.371728420257568, -3.530677318572998], + [4.951706886291504, 6.8463969230651855], + [6.665976524353027, 8.332009315490723], + [3.283872365951538, -7.692051410675049], + [0.21799498796463013, 10.755768775939941], + [1.663750410079956, -7.389347076416016], + [2.8599982261657715, -4.483364105224609], + [2.476325750350952, -7.318038463592529], + [-7.21685266494751, 7.690310001373291], + [3.486889123916626, -7.684232711791992], + [3.954669237136841, -2.9037516117095947], + [1.0200005769729614, 11.108953475952148], + [-3.0051753520965576, -4.4881744384765625], + [3.662527084350586, 1.709303617477417], + [5.49060583114624, 8.131227493286133], + [2.9607505798339844, -3.7922534942626953], + [6.766577243804932, -1.461067795753479], + [3.1800289154052734, -6.932290077209473], + [2.3312249183654785, -8.182511329650879], + [-2.64471697807312, 1.7695814371109009], + [-2.3169100284576416, 2.0975427627563477], + [-3.9048101902008057, -6.32321834564209], + [6.65470552444458, -1.4564646482467651], + [2.695059061050415, 4.357561111450195], + [0.46994346380233765, -0.29620885848999023], + [3.05281138420105, -4.556271553039551], + [-4.3707451820373535, -1.5595916509628296], + [-2.7696287631988525, 3.3434016704559326], + [-0.7464876770973206, 0.8315167427062988], + [-4.362400054931641, -1.5362030267715454], + [8.303536415100098, -2.4635813236236572], + [1.6437735557556152, -6.22955322265625], + [0.156744122505188, 12.401032447814941], + [2.6582770347595215, 3.170762777328491], + [-4.211752891540527, 4.7506303787231445], + [3.2356488704681396, -4.803571701049805], + [0.0928909108042717, 12.593511581420898], + [3.268183946609497, -3.083242177963257], + [5.946646690368652, 7.5731096267700195], + [-4.581088066101074, 5.991800308227539], + [-5.953556060791016, 5.127727508544922], + [-4.827236175537109, -6.7928619384765625], + [-3.073687791824341, 0.5982168912887573], + [0.6322945952415466, 6.93365478515625], + [-4.5290632247924805, -2.73307466506958], + [7.705207824707031, -2.625251054763794], + [4.307261943817139, -3.5443356037139893], + [0.5858203768730164, -5.9155378341674805], + [0.03047197312116623, 9.869772911071777], + [-2.1854960918426514, 2.0492405891418457], + [-3.7962887287139893, -5.909502029418945], + [3.608802318572998, -3.113536834716797], + [-0.16166386008262634, -0.026059497147798538], + [2.79107928276062, -3.908074378967285], + [1.8981478214263916, -7.615415096282959], + [-2.1838185787200928, 1.246016502380371], + [5.0990986824035645, -1.4984464645385742], + [3.9238336086273193, -2.9914345741271973], + [9.244174003601074, -2.255434036254883], + [2.733483076095581, -3.2858152389526367], + [0.6649404168128967, -1.2967499494552612], + [8.54038143157959, -2.2842538356781006], + [9.179106712341309, -2.1682591438293457], + [-0.2406291365623474, -1.1368871927261353], + [-1.6970715522766113, 1.6407802104949951], + [-3.0546610355377197, -5.521082878112793], + [-1.4036014080047607, 1.7183455228805542], + [-0.47998136281967163, -1.4039169549942017], + [3.0526626110076904, -3.1606194972991943], + [4.389710903167725, -3.8327324390411377], + [-4.045994758605957, 5.52793025970459], + [-4.490739345550537, 4.093655586242676], + [2.7507588863372803, 0.5001270771026611], + [-0.6377227902412415, 1.3805714845657349], + [0.08514326065778732, 13.124191284179688], + [5.0423407554626465, 6.967031478881836], + [-3.957836866378784, 6.312112331390381], + [5.507256031036377, -4.351712226867676], + [-7.602957725524902, 8.940817832946777], + [6.7362895011901855, 8.207730293273926], + [7.743364334106445, -2.109888792037964], + [-2.586766242980957, 1.8750921487808228], + [1.9227490425109863, 5.121614933013916], + [-0.01800357550382614, -1.4607908725738525], + [-4.435278415679932, -7.055146217346191], + [0.3605582118034363, -5.310659408569336], + [-0.12551838159561157, 9.905946731567383], + [-2.837798595428467, 2.140509605407715], + [5.508721828460693, -4.460968494415283], + [3.7944953441619873, 1.3405487537384033], + [2.760382652282715, 2.625793695449829], + [11.318994522094727, -2.482454538345337], + [-1.4491941928863525, -2.9339518547058105], + [-7.089715480804443, 8.255168914794922], + [0.8496133685112, 0.05335323140025139], + [-2.4941189289093018, 1.8859919309616089], + [5.149735927581787, -2.6852831840515137], + [0.12010388821363449, 11.854305267333984], + [-4.05516242980957, -4.104193687438965], + [-4.052695274353027, 5.586822986602783], + [-6.096126079559326, -0.8623231649398804], + [-2.2892513275146484, 2.226731538772583], + [2.822197198867798, 6.298823356628418], + [8.403815269470215, -2.509045362472534], + [3.451045274734497, -5.273435592651367], + [1.6507840156555176, -7.482369422912598], + [2.2446439266204834, 3.6387269496917725], + [3.0510666370391846, -7.029919624328613], + [0.9583373665809631, -0.1493511199951172], + [1.3345651626586914, -0.4351266026496887], + [4.2627339363098145, 1.7177330255508423], + [0.09273355454206467, 9.92607307434082], + [4.018735885620117, -3.546128273010254], + [-5.034903049468994, 4.129546642303467], + [3.2411303520202637, -7.095949172973633], + [0.14597976207733154, 9.710305213928223], + [3.205801248550415, -4.487518310546875], + [3.468691110610962, -3.4136974811553955], + [0.03483479470014572, 13.476773262023926], + [-3.579240322113037, -4.650923728942871], + [-2.4739034175872803, 1.1911215782165527], + [4.951578617095947, 6.978175163269043], + [-3.8549981117248535, 3.7584307193756104], + [-4.328164100646973, -0.6922115087509155], + [2.7220518589019775, -3.8035595417022705], + [-1.9611988067626953, -2.9299635887145996], + [0.029186837375164032, 12.613271713256836], + [6.509805202484131, -3.110903263092041], + [0.18737536668777466, 10.270099639892578], + [8.461029052734375, -2.584933042526245], + [4.000118255615234, -2.2115252017974854], + [-6.445555210113525, 7.459342956542969], + [6.880326271057129, -1.9808639287948608], + [-4.592887878417969, -1.114427089691162], + [4.250182151794434, -3.786440849304199], + [4.060868740081787, -5.178540229797363], + [0.6564115881919861, -0.607276439666748], + [5.024505138397217, 8.632365226745605], + [5.1383376121521, 6.567975044250488], + [-2.68932843208313, 1.9493378400802612], + [5.293734073638916, -2.2784500122070312], + [2.39347243309021, -2.029203414916992], + [2.840726852416992, -3.9429335594177246], + [0.022374562919139862, 9.58248519897461], + [9.378849983215332, -2.353640079498291], + [-2.1145119667053223, 2.6484735012054443], + [3.237922430038452, -4.5836567878723145], + [-4.342560291290283, -0.5941590070724487], + [2.4866130352020264, -7.874846458435059], + [5.797023296356201, -1.2810885906219482], + [3.2848150730133057, -8.639945983886719], + [5.261045455932617, -2.446173906326294], + [5.119577884674072, -2.9217658042907715], + [-4.1971869468688965, -3.373133420944214], + [3.889111042022705, -6.090909957885742], + [2.430797815322876, -7.676032066345215], + [0.43632805347442627, 10.60243034362793], + [-4.532634258270264, -6.814457893371582], + [6.032081127166748, -4.875583648681641], + [3.2908573150634766, -3.6997153759002686], + [3.8390676975250244, -3.513256311416626], + [-0.6563208699226379, 1.2465405464172363], + [8.649199485778809, -2.336517572402954], + [10.06627082824707, -2.372606039047241], + [3.309954881668091, -6.723389148712158], + [6.699707508087158, -1.3938168287277222], + [-1.6470305919647217, 0.6492462158203125], + [0.15639889240264893, 10.436920166015625], + [-3.853597402572632, -1.7794767618179321], + [7.647884845733643, 9.04907512664795], + [1.445703148841858, 1.781739592552185], + [-0.9925301671028137, 0.641452968120575], + [-3.5586488246917725, 5.424882888793945], + [-2.0521914958953857, 2.1664974689483643], + [-2.8949310779571533, -2.369158983230591], + [5.946899890899658, 7.237512588500977], + [-0.319397509098053, -3.7023210525512695], + [5.70952844619751, -2.85569167137146], + [3.2284533977508545, -5.865930557250977], + [-4.214853286743164, -3.1635022163391113], + [3.861829996109009, 1.8496549129486084], + [3.193758010864258, -4.47588586807251], + [-6.380531311035156, 7.508771896362305], + [1.7005622386932373, 3.015960693359375], + [6.736451625823975, -1.440869688987732], + [7.488539695739746, -2.0964138507843018], + [-1.5305304527282715, 2.230436086654663], + [1.4001781940460205, -7.070560455322266], + [-3.7740185260772705, -2.34317946434021], + [-5.07797384262085, -2.215076208114624], + [-0.32600119709968567, -1.7129788398742676], + [-2.535372257232666, 2.351670980453491], + [-2.836306571960449, 6.871009349822998], + [9.501192092895508, -2.5072286128997803], + [-0.02313513308763504, 12.38166618347168], + [6.286587238311768, 7.815624713897705], + [-1.5949090719223022, -3.143300771713257], + [-4.8320746421813965, -0.46516942977905273], + [0.4524909257888794, 0.8714834451675415], + [1.3517184257507324, 1.923966884613037], + [3.0315568447113037, -8.380273818969727], + [5.100189208984375, 6.997089385986328], + [-1.212913990020752, 1.7057199478149414], + [-3.799082040786743, -5.705673694610596], + [-2.566322088241577, 0.9891864061355591], + [4.308068752288818, 5.904695510864258], + [2.941894054412842, -4.042888641357422], + [8.637388229370117, -2.4678194522857666], + [1.3840103149414062, -6.927926063537598], + [7.248092174530029, -2.4352076053619385], + [5.672569274902344, -4.092276573181152], + [-2.7000720500946045, 2.3249475955963135], + [-2.2934768199920654, 2.2257983684539795], + [2.4687209129333496, -8.52615737915039], + [2.2585816383361816, -3.4082257747650146], + [-3.2724649906158447, 4.297115802764893], + [10.07780647277832, -2.425813674926758], + [4.555392265319824, 6.569790840148926], + [7.7276411056518555, -2.110154867172241], + [-1.5409384965896606, 2.6887710094451904], + [-2.5077707767486572, -4.166877746582031], + [-2.2296364307403564, 2.4816842079162598], + [7.710790157318115, -2.5830743312835693], + [-3.208815336227417, 5.100016117095947], + [-3.635568380355835, 7.292816162109375], + [-4.561079502105713, -6.949620723724365], + [0.25590747594833374, 11.748531341552734], + [-7.451361179351807, 8.939604759216309], + [-6.665997505187988, 2.2187306880950928], + [7.993043422698975, -2.226684808731079], + [2.6312992572784424, 5.729016304016113], + [-4.614354610443115, -5.919525146484375], + [3.8534440994262695, 5.9005889892578125], + [8.22017765045166, -2.234081506729126], + [-2.9970059394836426, -3.379784345626831], + [-3.495671510696411, -3.7264068126678467], + [-2.4471445083618164, 0.9961649179458618], + [1.9533331394195557, -8.34194564819336], + [-2.549241065979004, 2.188143253326416], + [1.3481733798980713, -0.7116946578025818], + [-0.07015491276979446, 9.84184455871582], + [-7.623434543609619, -0.21911633014678955], + [4.058875560760498, 7.092362403869629], + [-3.910982370376587, -0.729929506778717], + [3.6023712158203125, -9.016402244567871], + [2.3702800273895264, -7.861378192901611], + [2.2154757976531982, 1.3102936744689941], + [-3.1168246269226074, -5.26460599899292], + [2.98093843460083, -8.543094635009766], + [0.30225640535354614, 10.321795463562012], + [2.2954931259155273, -6.924630165100098], + [2.0063440799713135, 1.7595809698104858], + [-3.191234827041626, 6.887819290161133], + [-0.4791922867298126, -2.448837995529175], + [3.0247743129730225, -3.7587921619415283], + [-6.448604106903076, 7.0676469802856445], + [10.53158187866211, -2.4315085411071777], + [3.316124439239502, -5.934142589569092], + [5.105432987213135, -6.604645729064941], + [2.196824789047241, 0.8465927243232727], + [2.1516058444976807, 4.787576675415039], + [-6.304881572723389, 7.285674095153809], + [-0.19385921955108643, 0.5596654415130615], + [1.9483811855316162, -7.681097984313965], + [0.13241815567016602, 10.325401306152344], + [3.0330755710601807, -4.269652366638184], + [2.408742904663086, -3.495044469833374], + [-3.9118354320526123, -0.9272154569625854], + [2.1888082027435303, 3.836092710494995], + [8.73830509185791, -2.316340923309326], + [5.263653755187988, 6.650018215179443], + [2.271725654602051, 3.078930377960205], + [-2.079918384552002, 2.327584743499756], + [6.6736273765563965, -3.1656219959259033], + [0.46895772218704224, -1.03469979763031], + [-3.6614956855773926, 4.483763694763184], + [-4.792062759399414, -3.309969186782837], + [-2.848788022994995, 1.773785948753357], + [3.215157985687256, 5.2972235679626465], + [-2.8591463565826416, -3.4170706272125244], + [-5.226775646209717, -1.077884554862976], + [1.1129035949707031, -6.627507209777832], + [-3.179098129272461, -3.279423475265503], + [1.1697328090667725, -4.866567611694336], + [-2.2785420417785645, -3.687142848968506], + [1.5472499132156372, -7.688666343688965], + [3.058934450149536, -4.179365158081055], + [0.5772301554679871, -1.2364277839660645], + [4.58951997756958, 5.8686981201171875], + [-2.76629900932312, 1.39718496799469], + [-4.368307590484619, -2.6589698791503906], + [5.08888578414917, -4.985361099243164], + [-0.1812664270401001, -1.2241846323013306], + [0.09208428114652634, 8.649381637573242], + [-2.7011499404907227, 2.170759439468384], + [2.2441070079803467, 3.453796148300171], + [-2.5043537616729736, 1.9352946281433105], + [0.20483016967773438, 9.688201904296875], + [3.0453736782073975, -7.140298843383789], + [7.226428031921387, -2.257322072982788], + [-2.339233636856079, 0.037271078675985336], + [-3.3849713802337646, -5.98043155670166], + [3.597764730453491, -8.476402282714844], + [6.502232074737549, -1.4130606651306152], + [-2.726783037185669, 1.2834347486495972], + [-3.453073501586914, -3.979315757751465], + [7.673180103302002, -1.596319556236267], + [2.659642457962036, -9.67800235748291], + [-5.374209880828857, 5.182149887084961], + [-2.014988899230957, 2.3671836853027344], + [-2.7382044792175293, 2.005647659301758], + [0.3642035722732544, 11.20989990234375], + [-2.0681731700897217, -3.8115360736846924], + [7.863051891326904, -2.489027500152588], + [-4.539085388183594, 4.910957336425781], + [2.462887763977051, -8.91860580444336], + [3.0414412021636963, -4.3108906745910645], + [-4.08412504196167, -3.1908774375915527], + [8.52387523651123, -2.3331637382507324], + [7.020106315612793, -1.880698800086975], + [2.9904026985168457, 6.085745811462402], + [-1.8178422451019287, 2.1539111137390137], + [0.02910201996564865, 13.687402725219727], + [2.7584691047668457, -3.8430371284484863], + [-6.916858196258545, -0.04634929075837135], + [0.9410666823387146, -0.5861269235610962], + [-3.722216844558716, -0.3799140453338623], + [3.0036580562591553, -3.446385145187378], + [1.1663258075714111, 0.9525688886642456], + [1.5005360841751099, 0.11259631812572479], + [-4.882640838623047, 5.065183639526367], + [0.5956760048866272, 7.629588603973389], + [3.2237508296966553, -8.522773742675781], + [2.0598948001861572, -9.260791778564453], + [-5.119020462036133, -7.502196311950684], + [-5.470689296722412, -0.8957846164703369], + [3.688037157058716, -6.3839430809021], + [1.802558422088623, -0.20726917684078217], + [0.2400168776512146, -3.0937583446502686], + [-2.0540108680725098, 2.630488634109497], + [2.2733051776885986, 0.5401767492294312], + [8.59156322479248, -2.159019708633423], + [-4.661971569061279, -1.5421255826950073], + [2.83622145652771, -3.804767370223999], + [-2.044013261795044, 2.552257537841797], + [4.862879753112793, -4.227568626403809], + [2.3386971950531006, 2.2116739749908447], + [-1.9746510982513428, 2.5247950553894043], + [0.7407292723655701, 4.3170857429504395], + [2.5830299854278564, -9.45833969116211], + [2.4236419200897217, 1.8096507787704468], + [2.363283157348633, 6.16042947769165], + [2.238976240158081, 2.4249870777130127], + [-1.257167100906372, -1.9349792003631592], + [-1.4744296073913574, -1.4266592264175415], + [-4.221771717071533, -2.8022754192352295], + [-5.350130558013916, -1.444710612297058], + [6.1535325050354, 7.921171188354492], + [2.1928584575653076, 0.7143857479095459], + [-5.087289810180664, -5.647459030151367], + [-4.619722366333008, 3.9725396633148193], + [2.8802473545074463, -3.676896095275879], + [3.0547008514404297, -6.705240249633789], + [-4.654177188873291, -3.547334909439087], + [-4.386796951293945, -6.689128875732422], + [0.20287996530532837, 10.345211029052734], + [-5.3555989265441895, 6.226921081542969], + [-4.6225104331970215, -6.260018825531006], + [7.547358989715576, 8.93321418762207], + [1.7025768756866455, 3.2874197959899902], + [-0.13864001631736755, -1.5335248708724976], + [-2.7694785594940186, 1.5556820631027222], + [4.027717113494873, -8.796980857849121], + [-0.1354638934135437, 14.267379760742188], + [-1.0468920469284058, 1.760128140449524], + [-2.3867690563201904, 2.2911643981933594], + [4.0539045333862305, -3.7998292446136475], + [0.6832082867622375, -0.7455219030380249], + [9.726888656616211, -2.4523961544036865], + [3.8269271850585938, 1.4694730043411255], + [1.0255569219589233, -0.4744587540626526], + [-4.997364521026611, 5.193805694580078], + [-3.858914852142334, -1.9737975597381592], + [0.3203750252723694, 11.147771835327148], + [-0.07686538249254227, 12.170906066894531], + [0.07469629496335983, 10.40913200378418], + [6.423154354095459, 8.202512741088867], + [3.484724283218384, 5.449771881103516], + [2.737313985824585, 3.6832528114318848], + [-4.397115230560303, -6.453704833984375], + [4.9247002601623535, -0.9695159792900085], + [4.162909984588623, -5.135776042938232], + [-1.3364992141723633, 1.1120814085006714], + [6.2163004875183105, -3.039782762527466], + [-1.550020456314087, 1.5977507829666138], + [-5.83622407913208, -1.4254333972930908], + [-4.886885643005371, -1.034953236579895], + [-2.26537823677063, 2.3771257400512695], + [-0.042515404522418976, 9.515115737915039], + [4.251221179962158, 1.7305552959442139], + [-3.8516123294830322, -0.8917363286018372], + [-3.471416711807251, -4.070336818695068], + [-5.116601467132568, -6.611849784851074], + [-2.1457276344299316, -3.059122085571289], + [2.1825454235076904, 3.3111748695373535], + [0.1815040111541748, 10.365097045898438], + [-6.8173747062683105, 8.136534690856934], + [-5.475475311279297, -1.7954691648483276], + [-2.647587537765503, 2.328280210494995], + [5.73309850692749, -2.658036470413208], + [3.9018099308013916, -4.456159591674805], + [-6.093417644500732, 0.2738391160964966], + [4.679440021514893, -3.2865993976593018], + [5.615747928619385, 7.865071773529053], + [5.408877849578857, -2.6753528118133545], + [-3.555055856704712, -1.2638450860977173], + [5.98540735244751, -4.633810997009277], + [9.26845932006836, -2.7615115642547607], + [-3.7899043560028076, 4.418156623840332], + [-5.958548069000244, -0.09609317779541016], + [3.357079267501831, -4.310957908630371], + [2.9009244441986084, -8.9865140914917], + [4.201301574707031, -4.781800746917725], + [3.523681402206421, 1.6029638051986694], + [0.21035337448120117, 9.871262550354004], + [-4.688535213470459, -6.473311424255371], + [-3.3969342708587646, -0.6811627149581909], + [8.615743637084961, -2.381955862045288], + [-4.70067834854126, -3.0934650897979736], + [-0.022614605724811554, 9.271535873413086], + [2.6702239513397217, -3.8224267959594727], + [9.299424171447754, -2.408146381378174], + [-5.438093662261963, -2.915437698364258], + [8.209824562072754, -2.435476064682007], + [6.729115962982178, -1.8155895471572876], + [0.6211693286895752, -1.1179925203323364], + [7.6888909339904785, -2.0547144412994385], + [-5.714262008666992, 5.322115898132324], + [2.6507558822631836, -3.124964475631714], + [1.0921257734298706, -0.4652394652366638], + [10.735899925231934, -2.4759557247161865], + [2.9552114009857178, -4.151917457580566], + [4.057968616485596, -3.719829797744751], + [-0.07256568223237991, 9.317283630371094], + [-2.6990368366241455, -3.902766704559326], + [-7.541488170623779, -0.11995470523834229], + [2.2296981811523438, 5.126669883728027], + [3.4811813831329346, -3.2363386154174805], + [-1.9864449501037598, 2.422755002975464], + [2.3788647651672363, 4.9432220458984375], + [10.64186954498291, -2.5612995624542236], + [4.373897075653076, -3.883040189743042], + [2.7313005924224854, -8.765222549438477], + [3.9504377841949463, 6.772416114807129], + [-5.613785266876221, 3.9523913860321045], + [4.300535202026367, -6.189094543457031], + [3.693434238433838, -7.519011497497559], + [1.585174560546875, 1.7449908256530762], + [-3.528663396835327, -5.538071632385254], + [3.759148597717285, -5.643064498901367], + [2.7175064086914062, 1.8527837991714478], + [1.8465577363967896, -7.227387428283691], + [3.717852830886841, 0.22598087787628174], + [-1.2942719459533691, 0.9073874354362488], + [6.5222954750061035, 8.207191467285156], + [7.176703929901123, -2.011033773422241], + [-2.1861541271209717, 2.04482102394104], + [5.850640773773193, -1.7197622060775757], + [-1.925611138343811, -4.2201690673828125], + [-3.7006466388702393, -5.780957221984863], + [5.965109348297119, 7.432375431060791], + [2.4277732372283936, 5.891180038452148], + [-3.756423234939575, -2.222097396850586], + [1.48688805103302, 1.971542239189148], + [2.9403862953186035, 2.0631206035614014], + [-5.063858509063721, 6.421722888946533], + [-2.2404561042785645, 2.5934877395629883], + [1.4973701238632202, 5.774971008300781], + [-3.492886781692505, -4.307781219482422], + [5.985876560211182, 7.505191802978516], + [-4.247194290161133, 4.956636428833008], + [5.249215602874756, 7.33005428314209], + [-3.2995519638061523, -4.4345808029174805], + [3.3831653594970703, 1.329555630683899], + [1.4672653675079346, 0.9050270318984985], + [1.9281563758850098, 5.18153190612793], + [5.577788829803467, -1.2045964002609253], + [2.4161980152130127, 5.549463272094727], + [3.7366058826446533, -6.935386657714844], + [-4.278846263885498, 8.471534729003906], + [4.979180812835693, -4.540271282196045], + [-3.0555317401885986, -0.21064519882202148], + [-0.03171766549348831, 13.074518203735352], + [3.928112268447876, -4.835299491882324], + [-2.2074360847473145, -3.4031405448913574], + [-5.860266208648682, 6.75730037689209], + [-3.7109360694885254, 5.09920597076416], + [0.036771051585674286, 12.491048812866211], + [-2.217874765396118, 2.862855911254883], + [-6.231373310089111, 0.8245388269424438], + [6.174760818481445, -1.3491333723068237], + [-4.1229567527771, 3.7912330627441406], + [-2.609546184539795, 1.9812806844711304], + [11.08173656463623, -2.702768087387085], + [-1.7537841796875, 1.6697190999984741], + [-7.27688455581665, -1.2688452005386353], + [-2.218177556991577, 1.9690314531326294], + [2.258113145828247, 0.13108080625534058], + [4.027493000030518, -2.5372231006622314], + [-3.4211063385009766, 3.740482807159424], + [2.629376173019409, 2.855684995651245], + [3.3604485988616943, 4.8635640144348145], + [6.667534351348877, -1.5066920518875122], + [1.6194652318954468, -0.2075551450252533], + [8.952229499816895, -2.388972043991089], + [2.974647283554077, -8.250473022460938], + [-3.8304903507232666, -4.4672064781188965], + [3.5599868297576904, -3.3751697540283203], + [-2.41923189163208, 2.075190305709839], + [-5.782154560089111, -1.85897958278656], + [7.073679447174072, -1.540977120399475], + [2.9229767322540283, -3.9524857997894287], + [-2.200568437576294, 2.8901968002319336], + [-2.425092935562134, 1.5446032285690308], + [3.7528090476989746, -6.142971515655518], + [4.631546497344971, 1.953956961631775], + [-5.731229305267334, 5.706666946411133], + [0.18283456563949585, 10.299016952514648], + [0.03875880688428879, 9.194278717041016], + [-4.667196273803711, 5.50434684753418], + [0.16185003519058228, 11.053014755249023], + [-4.907754421234131, -5.713277339935303], + [-4.466375827789307, 3.8357813358306885], + [3.0466511249542236, -9.370613098144531], + [-4.002919673919678, -5.971949577331543], + [-3.3707711696624756, 8.077692031860352], + [1.6185390949249268, 3.862645387649536], + [3.693396806716919, -3.5461747646331787], + [-0.9799998998641968, -3.3355276584625244], + [1.455221176147461, -5.663877487182617], + [2.6952691078186035, 0.7854994535446167], + [-0.05923695117235184, 13.40696907043457], + [-6.212189197540283, 0.237662672996521], + [-4.408324718475342, -6.677109241485596], + [-2.4695160388946533, 2.106121301651001], + [-4.508766174316406, -3.5400452613830566], + [-2.5878515243530273, -4.918952941894531], + [-0.03408009558916092, 12.957496643066406], + [-6.7592878341674805, -1.178019642829895], + [-3.93579363822937, -5.9773406982421875], + [8.34609317779541, -2.3976097106933594], + [-6.256052494049072, 7.164284706115723], + [-4.632336139678955, -5.827201843261719], + [-0.585381805896759, -1.811850666999817], + [-6.2860894203186035, 7.482151985168457], + [-3.9072329998016357, 6.065021991729736], + [0.33800190687179565, 11.119525909423828], + [-5.3161187171936035, 4.513291358947754], + [-1.6042897701263428, -4.128565788269043], + [0.9547322392463684, -2.4049675464630127], + [-3.7590548992156982, -3.956920623779297], + [3.0825583934783936, -4.342235088348389], + [0.9278938174247742, -6.263386249542236], + [1.844512939453125, 4.10488224029541], + [3.812030553817749, -3.290743350982666], + [-4.760955333709717, -6.906946182250977], + [5.876414775848389, 7.677511692047119], + [5.560453414916992, 7.165605545043945], + [-4.18399715423584, 3.6168088912963867], + [-2.3813071250915527, 1.3612003326416016], + [1.0563277006149292, 3.8523366451263428], + [0.24941426515579224, 10.756513595581055], + [-1.8651537895202637, 0.3234420120716095], + [2.6080636978149414, 4.004092693328857], + [2.937347412109375, 0.9058796167373657], + [-4.316024303436279, -2.7172863483428955], + [7.559905529022217, -2.24833607673645], + [4.584094047546387, 7.035257816314697], + [7.814823150634766, -2.3379883766174316], + [0.2026994824409485, 10.480184555053711], + [-2.8234832286834717, -0.9402629137039185], + [7.118739604949951, 8.657801628112793], + [3.4558775424957275, -3.7968175411224365], + [-4.292918682098389, -6.176420211791992], + [7.5887532234191895, -2.73980975151062], + [2.2457268238067627, 5.501559734344482], + [2.2520487308502197, -1.888710379600525], + [5.677549839019775, -1.1514488458633423], + [4.056467056274414, 6.9068074226379395], + [3.212247848510742, -6.358726978302002], + [-0.6513556838035583, -1.5496208667755127], + [-5.304882526397705, -3.4942233562469482], + [-2.3215155601501465, 2.213273048400879], + [9.597229957580566, -2.38152813911438], + [3.3455328941345215, -4.915919780731201], + [9.712993621826172, -2.542717933654785], + [-1.7802120447158813, 2.75494384765625], + [4.444420337677002, 5.986018180847168], + [-4.277723789215088, 1.5031818151474], + [9.989296913146973, -2.495898962020874], + [-0.7936555743217468, -0.3206300735473633], + [7.0086445808410645, 8.398869514465332], + [0.06009345501661301, 10.057024002075195], + [1.4451240301132202, 1.8401134014129639], + [-1.7389370203018188, 1.544202446937561], + [-7.235811233520508, 3.5777153968811035], + [3.780177354812622, -3.591113567352295], + [-3.038738489151001, -2.414548397064209], + [3.496478319168091, -4.36128044128418], + [6.709088325500488, -1.7956796884536743], + [3.525012731552124, -5.081275939941406], + [-2.452849864959717, -4.8687310218811035], + [9.249348640441895, -2.231980323791504], + [3.3005809783935547, 6.913815498352051], + [-0.0468180850148201, 9.829830169677734], + [3.1091058254241943, 0.6709403395652771], + [-3.9489471912384033, -4.681516647338867], + [-0.6298743486404419, -1.968459963798523], + [0.1112053319811821, 11.857011795043945], + [-6.732491493225098, 8.200618743896484], + [-2.6678385734558105, 5.980871677398682], + [-2.6173858642578125, 1.9670253992080688], + [-3.0921924114227295, -4.770444393157959], + [7.042763710021973, -1.86483895778656], + [-2.5238747596740723, 0.054059263318777084], + [7.868553638458252, -2.3757870197296143], + [-5.115938663482666, -1.5515297651290894], + [0.5925080180168152, -1.0863094329833984], + [8.348466873168945, -2.1973073482513428], + [0.042547933757305145, 12.046236991882324], + [3.5241215229034424, -4.8574419021606445], + [-2.2266194820404053, -4.4307708740234375], + [8.461173057556152, -2.956530809402466], + [-2.210265874862671, 2.4399125576019287], + [0.10257809609174728, -1.4893662929534912], + [2.4344656467437744, 4.335186004638672], + [5.116662979125977, -4.7508745193481445], + [2.5009024143218994, -5.495153903961182], + [-4.857336521148682, -3.859092950820923], + [6.751760482788086, -1.4758187532424927], + [-0.03346056491136551, 9.481019973754883], + [-5.154839515686035, -6.437843322753906], + [4.420742988586426, -3.914119243621826], + [-4.133537292480469, -6.082220077514648], + [-1.9177770614624023, 2.5499606132507324], + [6.328848361968994, -1.3273048400878906], + [-4.7940850257873535, -7.296921253204346], + [2.5139477252960205, -7.0063581466674805], + [-6.300718784332275, -1.034009575843811], + [7.3837971687316895, -1.4893211126327515], + [-5.100646495819092, 1.9371927976608276], + [2.545905590057373, 6.132481575012207], + [10.237752914428711, -2.5034422874450684], + [0.7426899671554565, 7.9555463790893555], + [0.5272099375724792, -1.1877177953720093], + [6.046212673187256, -1.5065319538116455], + [3.1559948921203613, -4.018281936645508], + [2.0927140712738037, 3.3728458881378174], + [1.42728590965271, -0.6859269142150879], + [-2.9930918216705322, -2.3797078132629395], + [-0.33814260363578796, -1.8834216594696045], + [-4.3802971839904785, -6.476513862609863], + [8.548100471496582, -2.2932419776916504], + [-2.3912031650543213, -2.62849760055542], + [10.32167911529541, -2.4864110946655273], + [9.79047966003418, -2.4320361614227295], + [3.7498295307159424, -3.391533613204956], + [8.872011184692383, -2.3811495304107666], + [-1.8747389316558838, 1.2868380546569824], + [5.717535018920898, -4.068755149841309], + [-7.8921217918396, -0.5422463417053223], + [-4.4173150062561035, -3.097491979598999], + [-0.6051933765411377, -0.47228100895881653], + [2.783764123916626, -6.528753280639648], + [1.8488900661468506, 5.999650001525879], + [-1.746588110923767, 2.1950902938842773], + [5.927262306213379, 8.143702507019043], + [-5.302679061889648, -2.218339443206787], + [-6.297211170196533, -0.3282325267791748], + [4.40987491607666, 1.8858717679977417], + [3.3225343227386475, -8.511322975158691], + [2.247081995010376, -6.875174522399902], + [6.689159393310547, 8.303764343261719], + [-3.3448026180267334, -4.915488243103027], + [-4.578120708465576, -3.181565999984741], + [-2.1471593379974365, 2.2879233360290527], + [-4.237065315246582, -6.284313201904297], + [8.548514366149902, -2.347320079803467], + [2.6992247104644775, -2.4908976554870605], + [0.6847682595252991, -0.8851425647735596], + [8.081494331359863, -2.224332094192505], + [2.597216844558716, -3.2076222896575928], + [7.345051288604736, -5.7615742683410645], + [-6.174177646636963, 6.484879493713379], + [4.376392841339111, -8.203514099121094], + [3.2573649883270264, -2.1969425678253174], + [1.4661227464675903, 1.2674866914749146], + [5.722970008850098, -6.780378341674805], + [-6.600131511688232, 8.632929801940918], + [-2.2061829566955566, 2.085186004638672], + [-2.0520308017730713, -3.358640432357788], + [3.0278844833374023, -4.203246116638184], + [-4.676711559295654, -6.70200252532959], + [0.07196115702390671, 12.230497360229492], + [1.0634384155273438, 4.834216594696045], + [6.397498607635498, 7.831031799316406], + [-4.869583606719971, -7.180456161499023], + [-2.3258936405181885, -3.718175172805786], + [-3.280736207962036, 2.7963008880615234], + [4.5183491706848145, 6.848742485046387], + [-6.335849285125732, -1.2738492488861084], + [6.396547794342041, 8.600997924804688], + [3.262596368789673, -4.74683952331543], + [1.4737085103988647, -0.09653712809085846], + [-4.681909561157227, -2.6506247520446777], + [-2.274729013442993, 2.384441375732422], + [2.773366928100586, -5.822641372680664], + [-1.7275943756103516, 0.46296656131744385], + [2.6601202487945557, -8.255037307739258], + [-6.686333656311035, 6.532540798187256], + [6.296535015106201, -1.8420244455337524], + [8.353985786437988, -2.285897970199585], + [-4.9667887687683105, -7.174239158630371], + [-2.2257323265075684, 2.8937876224517822], + [1.9281096458435059, 4.681674003601074], + [7.252110004425049, 8.687263488769531], + [2.2134974002838135, 5.274372100830078], + [3.6019127368927, -4.257198810577393], + [2.684347152709961, -9.295292854309082], + [-2.0815045833587646, 2.597278356552124], + [3.0084211826324463, 0.6250002980232239], + [3.581578016281128, -5.805415630340576], + [-6.519284725189209, 7.487218379974365], + [4.552475452423096, -3.4015438556671143], + [3.9073894023895264, 1.5774751901626587], + [2.6776158809661865, -6.147391319274902], + [9.610901832580566, -2.3844430446624756], + [1.1009275913238525, -6.642912864685059], + [1.2672131061553955, -6.995002746582031], + [0.4273991584777832, -1.2407855987548828], + [8.948676109313965, -2.5096688270568848], + [2.755272150039673, 5.387136459350586], + [2.539445638656616, 5.038320064544678], + [-4.6273064613342285, -3.195728063583374], + [4.62161111831665, 6.211788177490234], + [5.877745628356934, -5.551519393920898], + [-4.039472579956055, -3.0781943798065186], + [-2.4041552543640137, 2.01810359954834], + [-4.962273120880127, -4.296667098999023], + [-4.1426167488098145, -6.559126853942871], + [-2.550553798675537, 1.6732829809188843], + [7.107005596160889, -1.9405654668807983], + [-3.669551134109497, -2.381455898284912], + [-4.403432369232178, 3.9963133335113525], + [-1.108070969581604, -0.6555036902427673], + [3.5920088291168213, -8.362951278686523], + [-4.224392414093018, -6.032885551452637], + [3.8801231384277344, 1.7910188436508179], + [-4.037335395812988, -3.075063467025757], + [3.012669801712036, 1.371393084526062], + [4.100954055786133, 6.6601176261901855], + [5.066457271575928, -1.457605004310608], + [-3.2457895278930664, 6.279531478881836], + [8.444181442260742, -2.373070478439331], + [4.065593242645264, -8.791439056396484], + [-1.4685527086257935, 2.01663875579834], + [6.035544395446777, -4.43583345413208], + [10.276350975036621, -2.3238604068756104], + [-2.396688222885132, 1.4928956031799316], + [3.9790713787078857, 0.8264171481132507], + [5.45366096496582, 6.895747184753418], + [-4.444913864135742, 5.297734260559082], + [-0.436510294675827, -0.7750383615493774], + [6.73370361328125, -1.668073296546936], + [-3.5246660709381104, -2.1950762271881104], + [-0.6118312478065491, 0.840552031993866], + [-1.9752914905548096, 2.455897569656372], + [-0.7099891304969788, -4.133740425109863], + [5.8063225746154785, 7.501180171966553], + [3.07995343208313, -4.233246803283691], + [3.0223140716552734, -4.280091285705566], + [9.83919906616211, -2.47957444190979], + [8.039215087890625, -2.0821313858032227], + [8.240921020507812, -2.30260968208313], + [2.5427355766296387, -6.159818649291992], + [10.548452377319336, -2.4110074043273926], + [3.9736645221710205, -3.630889892578125], + [6.459796905517578, 8.187355041503906], + [-4.355520248413086, 5.15736722946167], + [2.355625867843628, -3.0121076107025146], + [0.17541199922561646, 10.180880546569824], + [7.377353191375732, -1.984767198562622], + [0.12880879640579224, 11.56395149230957], + [2.2377078533172607, -7.923301696777344], + [-2.924316644668579, -3.6522393226623535], + [3.980811357498169, -3.118577718734741], + [6.775961875915527, 8.429527282714844], + [9.405682563781738, -2.3951776027679443], + [6.419861316680908, 7.941266059875488], + [2.7725634574890137, -9.050368309020996], + [3.0620245933532715, -4.329130172729492], + [0.03567641228437424, 9.401691436767578], + [-3.453636407852173, -1.2574437856674194], + [8.423930168151855, -2.310100555419922], + [2.3020436763763428, -5.185385227203369], + [3.2643778324127197, -4.949583053588867], + [-5.754886150360107, 7.219134330749512], + [-5.2612833976745605, 0.0795450210571289], + [0.8953089118003845, -0.7614468932151794], + [5.404820919036865, 7.153600692749023], + [5.960888385772705, -5.294181823730469], + [3.338770627975464, -4.694272994995117], + [8.023314476013184, -2.2154223918914795], + [8.368120193481445, -2.579450845718384], + [-4.2063822746276855, 5.590058326721191], + [-5.241272449493408, -0.42252498865127563], + [2.203447103500366, -5.671875953674316], + [1.522154450416565, -0.2607406675815582], + [-4.756580829620361, 6.591578960418701], + [-2.882943630218506, -0.7689797282218933], + [3.7660892009735107, -7.017022609710693], + [-4.869978904724121, -3.091547727584839], + [1.9822280406951904, 4.741365432739258], + [-2.7724802494049072, 1.8489189147949219], + [-4.677853107452393, -6.620509624481201], + [-2.427950859069824, 1.7829524278640747], + [-2.5714833736419678, 1.8039562702178955], + [8.79263687133789, -2.377122640609741], + [2.8884310722351074, -7.394012451171875], + [8.366011619567871, -2.349274158477783], + [-5.227685928344727, -3.9059221744537354], + [-6.036501407623291, -2.0432395935058594], + [-1.4842031002044678, -2.9326012134552], + [3.3448989391326904, 0.9830071926116943], + [-6.012786388397217, 6.690896987915039], + [3.2705185413360596, 1.5567363500595093], + [-6.036001682281494, -0.5169192552566528], + [0.08969687670469284, 11.878374099731445], + [0.9200015664100647, 0.35545986890792847], + [5.602951526641846, -5.191095352172852], + [7.635185718536377, -1.5846608877182007], + [-0.8237187266349792, -1.6695835590362549], + [4.100724220275879, -3.8269639015197754], + [5.811499118804932, -2.0701215267181396], + [-5.16288948059082, 6.39440393447876], + [0.15217888355255127, -0.5042287111282349], + [2.287543535232544, -7.851357460021973], + [-4.084614276885986, 4.397858619689941], + [-4.107492446899414, -6.19423770904541], + [-5.137281894683838, 5.763555526733398], + [3.394160509109497, -5.779562473297119], + [-0.013664193451404572, 12.69081974029541], + [-1.7689255475997925, 2.167811632156372], + [-6.417386531829834, 8.25217056274414], + [5.663003444671631, -1.1860588788986206], + [0.15557998418807983, 10.101852416992188], + [6.146135330200195, -4.6813273429870605], + [2.596163749694824, 1.3058031797409058], + [-2.3358261585235596, 2.675191640853882], + [-2.088165760040283, 2.3590807914733887], + [-0.6281582117080688, -0.5006566047668457], + [-5.772070407867432, 5.7874884605407715], + [-4.4600348472595215, 4.008025646209717], + [-2.1230924129486084, 5.103774070739746], + [2.371642827987671, -3.624680757522583], + [-3.7574679851531982, 5.790994644165039], + [-2.530012369155884, -3.49096941947937], + [5.186187267303467, 7.373664379119873], + [2.49367356300354, 4.899517059326172], + [2.2538087368011475, -7.879247188568115], + [1.6445434093475342, 8.957778930664062], + [-5.157130718231201, 3.9791314601898193], + [5.816721439361572, -1.3465074300765991], + [3.094087600708008, -4.360306262969971], + [-1.3781871795654297, 1.09414541721344], + [3.7611188888549805, -1.8931678533554077], + [6.405353546142578, -1.231088638305664], + [5.8343424797058105, 7.420129776000977], + [3.8960824012756348, 1.2257936000823975], + [5.736632823944092, -2.448002338409424], + [-4.690562725067139, -3.3498547077178955], + [-2.8551557064056396, -3.666989803314209], + [7.189420700073242, -2.069183349609375], + [4.2334771156311035, 7.121110439300537], + [2.3920769691467285, 2.170929193496704], + [3.0974478721618652, -6.8283915519714355], + [3.693666696548462, -3.53851580619812], + [3.908233404159546, -3.421356439590454], + [3.0882253646850586, -8.165434837341309], + [-4.197168350219727, 4.578702926635742], + [2.5887911319732666, -8.0355224609375], + [-1.4076824188232422, 1.8290683031082153], + [0.39604824781417847, -4.856678009033203], + [8.041900634765625, -2.131211996078491], + [-4.425605773925781, -4.95293664932251], + [-4.980944633483887, -2.9860692024230957], + [-2.7630934715270996, -3.5725443363189697], + [-3.9411604404449463, 4.809790134429932], + [-2.7740774154663086, 0.5083739757537842], + [-3.6463229656219482, 3.8311009407043457], + [-3.3488850593566895, 5.690650463104248], + [-5.174418926239014, -1.5501946210861206], + [-1.2813801765441895, 1.707574725151062], + [6.748814105987549, -1.8641055822372437], + [3.9661457538604736, 1.4635556936264038], + [-2.9917871952056885, -4.763942718505859], + [0.1851068139076233, 11.654312133789062], + [3.5006155967712402, -3.5300815105438232], + [-5.853157997131348, -0.215151846408844], + [0.45831775665283203, -1.2119086980819702], + [6.2428483963012695, 8.047019958496094], + [9.13213062286377, -2.581829071044922], + [5.598613262176514, 6.939469814300537], + [-5.4225077629089355, -1.5531660318374634], + [5.770929336547852, -1.4230272769927979], + [-1.7099634408950806, 0.9376175403594971], + [-6.399027347564697, 7.157568454742432], + [6.8441996574401855, 8.736108779907227], + [-2.5830228328704834, -2.795217752456665], + [-2.4911582469940186, 1.6672828197479248], + [5.3781232833862305, -3.201737642288208], + [1.9824726581573486, 3.936460494995117], + [2.4002816677093506, 0.7532594203948975], + [0.1681678295135498, 6.3320770263671875], + [3.0701231956481934, 5.581402778625488], + [2.768897771835327, -3.7665469646453857], + [0.5268541574478149, -5.748998641967773], + [-2.9679737091064453, -2.1464240550994873], + [7.1191887855529785, -2.5984046459198], + [7.57748556137085, -1.97879159450531], + [4.6721978187561035, -0.586682140827179], + [3.6539218425750732, -8.054852485656738], + [3.1184403896331787, -5.487703323364258], + [3.1295666694641113, -4.4363884925842285], + [5.727134704589844, -1.1243327856063843], + [-5.300243854522705, 6.4591217041015625], + [-1.4930866956710815, 1.0931216478347778], + [-4.757115840911865, 4.063143730163574], + [-4.480586528778076, 5.444103240966797], + [0.18667209148406982, 11.994474411010742], + [10.802738189697266, -2.4894497394561768], + [3.027092933654785, -4.20777702331543], + [3.258582353591919, -4.04073429107666], + [4.48814058303833, 5.995918273925781], + [0.17529523372650146, 11.630356788635254], + [-2.9227094650268555, 1.9936598539352417], + [-7.18310022354126, 8.343317031860352], + [2.9975602626800537, -4.5939130783081055], + [3.2153568267822266, -4.633928298950195], + [2.719163656234741, -3.364100694656372], + [2.817864179611206, -8.885576248168945], + [-1.6879616975784302, -4.689785003662109], + [0.10480853170156479, -1.4764567613601685], + [5.346723556518555, 7.224998474121094], + [2.8441572189331055, -3.9123144149780273], + [-4.72890043258667, -0.291512131690979], + [-6.440243244171143, 8.403505325317383], + [-3.378398895263672, 5.557999610900879], + [-0.09223724156618118, 9.56338119506836], + [4.435906887054443, 0.9935466051101685], + [0.2433207631111145, 9.769891738891602], + [-1.5570460557937622, -2.622610330581665], + [-2.1980128288269043, 1.8874939680099487], + [0.35190117359161377, 10.112710952758789], + [-2.00338077545166, 2.352815866470337], + [0.08727278560400009, -1.4427568912506104], + [2.5549733638763428, -3.743352174758911], + [-1.4058524370193481, -3.9707353115081787], + [7.18919038772583, -1.707423210144043], + [-4.194304466247559, -5.982273101806641], + [2.0201449394226074, 3.4204518795013428], + [0.852252185344696, 11.262521743774414], + [8.285880088806152, -2.254995107650757], + [-4.342044353485107, -6.535038948059082], + [2.180682897567749, -7.258079528808594], + [-2.92236590385437, 6.115274906158447], + [-2.8909308910369873, 0.7508885264396667], + [-6.008646488189697, -1.755031704902649], + [0.7062978148460388, -6.177031517028809], + [2.827470302581787, -4.010339736938477], + [4.231289386749268, 1.4870529174804688], + [3.8050894737243652, -3.9616973400115967], + [1.2948195934295654, -6.630768775939941], + [9.667157173156738, -2.389864683151245], + [3.146592855453491, -9.983366966247559], + [-5.027419090270996, 4.044938087463379], + [4.54528284072876, 7.3505706787109375], + [8.0453519821167, -2.366262197494507], + [2.4787216186523438, 0.29521530866622925], + [3.2972562313079834, -3.7541825771331787], + [4.366953372955322, 1.8747715950012207], + [-2.092012643814087, 2.4675827026367188], + [-2.76241135597229, -4.173847198486328], + [-0.3377295732498169, -0.7962404489517212], + [3.1875760555267334, 1.894802212715149], + [-2.3160464763641357, 2.785151958465576], + [0.31943386793136597, 10.825048446655273], + [5.388144016265869, 7.308597564697266], + [0.019126109778881073, 11.634565353393555], + [-2.8482096195220947, -3.7393343448638916], + [-3.6781890392303467, 1.7978616952896118], + [-5.0381760597229, 4.627828121185303], + [3.369443893432617, -3.419050693511963], + [6.577734470367432, 8.102057456970215], + [2.4265661239624023, -7.891907691955566], + [0.2236679196357727, 11.829490661621094], + [8.76543140411377, -2.3840458393096924], + [-6.662410259246826, 6.628836631774902], + [0.14039433002471924, -1.4997929334640503], + [-2.347918748855591, 1.040982961654663], + [-4.393457889556885, -6.615082740783691], + [-5.353766918182373, -0.14723163843154907], + [9.96480941772461, -2.430933952331543], + [5.122799396514893, -3.9698562622070312], + [-0.03923458606004715, 9.477611541748047], + [8.203621864318848, -2.26828932762146], + [1.501818060874939, -7.941379547119141], + [8.201041221618652, -2.451678514480591], + [3.1248080730438232, -2.8533284664154053], + [-1.2430880069732666, 1.5205414295196533], + [1.5389834642410278, -5.000140190124512], + [-5.2663726806640625, 6.787527084350586], + [9.625139236450195, -2.236262083053589], + [5.592029094696045, -2.8686485290527344], + [-4.132750034332275, -4.854767799377441], + [-0.6576154828071594, -2.770087242126465], + [0.14299601316452026, 10.126290321350098], + [3.364469051361084, -8.025471687316895], + [0.1349433958530426, -1.4916770458221436], + [3.382188558578491, -3.613100051879883], + [2.3943142890930176, -3.1506731510162354], + [6.467283725738525, -1.3825637102127075], + [-4.22567081451416, -6.236588478088379], + [-2.160466432571411, 2.3123583793640137], + [6.8734025955200195, 8.41925048828125], + [6.536046504974365, 7.9954938888549805], + [-2.536240339279175, -2.8587563037872314], + [-6.378974437713623, -1.3602460622787476], + [1.297553539276123, 3.9080116748809814], + [-2.183263063430786, 2.099792003631592], + [-1.1810375452041626, 1.6648281812667847], + [-4.087643146514893, 3.838468313217163], + [-0.16714614629745483, -1.7484039068222046], + [2.904006242752075, -8.618571281433105], + [0.22097617387771606, 10.987693786621094], + [-2.2713265419006348, 2.4614768028259277], + [-2.81531023979187, -3.0740768909454346], + [-0.5356818437576294, 3.771409749984741], + [-2.0649068355560303, 2.384246826171875], + [-1.9094239473342896, 0.29149129986763], + [0.35471224784851074, -1.0993382930755615], + [2.7743544578552246, 0.7203674912452698], + [0.09707175940275192, 11.618239402770996], + [-4.329960346221924, -6.525125980377197], + [7.9016594886779785, -2.5754621028900146], + [9.3460111618042, -2.4520843029022217], + [3.036412000656128, -3.1472716331481934], + [4.072134494781494, -7.520406723022461], + [3.78340220451355, -3.7296431064605713], + [-2.2542765140533447, -1.6952787637710571], + [-1.7052183151245117, -3.9310078620910645], + [-5.144471645355225, -2.3472788333892822], + [4.299761772155762, -3.602961540222168], + [-3.954155683517456, -6.420022964477539], + [2.767735719680786, -8.489945411682129], + [3.9751579761505127, -3.9170784950256348], + [-4.832896709442139, 5.154807090759277], + [-4.521677494049072, -6.517213821411133], + [-2.390686273574829, 2.1281256675720215], + [-3.2268483638763428, -4.842053413391113], + [0.12850147485733032, 9.626940727233887], + [-3.8663547039031982, -5.337832450866699], + [1.6513422727584839, -7.335087776184082], + [0.1705939769744873, 0.7508522272109985], + [3.369068145751953, -8.33591079711914], + [-3.552152633666992, -4.578485488891602], + [-4.894617557525635, 5.162946701049805], + [3.0752460956573486, 1.019800066947937], + [-5.259586334228516, -2.03408145904541], + [2.5787127017974854, 5.957352161407471], + [3.571425199508667, 1.3497439622879028], + [2.369910717010498, 3.5460894107818604], + [-0.7467575669288635, -0.6079641580581665], + [2.0852386951446533, -8.460346221923828], + [-2.807785749435425, -3.376448631286621], + [-4.138054370880127, 5.020677089691162], + [-2.9346916675567627, -4.307267189025879], + [2.4916529655456543, 5.446246147155762], + [-2.4825937747955322, 1.6547750234603882], + [-3.886902093887329, -3.5735201835632324], + [1.375643014907837, -5.854997634887695], + [0.018997304141521454, 9.38730239868164], + [3.130403518676758, 0.4241114854812622], + [-2.094524621963501, 2.2327489852905273], + [-2.14955472946167, 2.4415905475616455], + [-4.425197124481201, -7.342887878417969], + [-6.322170734405518, -0.061532262712717056], + [-0.3257898688316345, 9.332494735717773], + [4.293402194976807, -1.1168419122695923], + [-2.676654577255249, 1.9322017431259155], + [-3.0988996028900146, 7.140069961547852], + [0.38085585832595825, 12.129505157470703], + [2.1510965824127197, 4.015661239624023], + [-5.327367305755615, -0.4824049472808838], + [-6.821059703826904, -1.1808744668960571], + [-4.65641450881958, -2.4290401935577393], + [-6.413479328155518, -0.4323459267616272], + [-4.160722732543945, 3.8688528537750244], + [2.471526622772217, -3.42081618309021], + [0.2369728684425354, 10.96291446685791], + [5.3680524826049805, -3.7555649280548096], + [-1.380479097366333, 2.112102746963501], + [-1.9640016555786133, 2.5424625873565674], + [1.918923020362854, 5.6224188804626465], + [3.034156322479248, -4.274733066558838], + [0.03121113032102585, 11.995677947998047], + [1.7494444847106934, 1.6801944971084595], + [-4.141049861907959, -5.659193992614746], + [-2.159492254257202, -4.348325252532959], + [-2.394892454147339, -3.741497278213501], + [0.05167465656995773, 9.55888843536377], + [-0.016727395355701447, 9.783430099487305], + [9.641101837158203, -2.38122820854187], + [-6.851923942565918, 1.5695009231567383], + [0.19144922494888306, 8.830814361572266], + [-6.801651477813721, 7.957464218139648], + [-1.0560518503189087, -2.77221417427063], + [-2.2598609924316406, 1.187233328819275], + [-0.09896797686815262, 9.365489959716797], + [2.2903411388397217, 5.263978004455566], + [1.1018198728561401, 0.9475630521774292], + [-2.5207583904266357, 1.5987321138381958], + [-2.145449638366699, 2.794938564300537], + [-2.4647529125213623, 1.6332085132598877], + [5.081993579864502, 6.3539557456970215], + [5.0521135330200195, 6.29546594619751], + [6.279250144958496, -1.5267711877822876], + [8.44605541229248, -2.314985513687134], + [-4.410437107086182, -6.997461318969727], + [2.6383678913116455, -7.773435592651367], + [9.16211223602295, -2.300868034362793], + [-4.726887226104736, -5.748931407928467], + [-2.0948116779327393, 1.8880542516708374], + [3.075756788253784, -5.640837669372559], + [1.6997342109680176, -7.827430248260498], + [-1.635270357131958, 1.193429708480835], + [2.218700885772705, 5.814149856567383], + [2.8308136463165283, -2.804823160171509], + [5.775542736053467, -4.99830436706543], + [0.19237250089645386, 11.150951385498047], + [-4.7336249351501465, -6.997287750244141], + [2.6079485416412354, -9.13467025756836], + [10.962449073791504, -2.51751971244812], + [-2.2696688175201416, -0.5051060914993286], + [0.001148514449596405, 9.903692245483398], + [0.3078077435493469, 11.92113971710205], + [-0.4375908374786377, -1.8303357362747192], + [3.3368589878082275, -8.413107872009277], + [-4.513002872467041, -0.33439338207244873], + [0.632681667804718, -0.8944419026374817], + [5.478329181671143, -1.8458480834960938], + [6.505643367767334, -2.4549148082733154], + [8.63986873626709, -2.478480100631714], + [5.159968852996826, 6.570534706115723], + [-2.3645033836364746, -0.8593982458114624], + [-4.546793460845947, 5.591669082641602], + [3.3203601837158203, -4.732227325439453], + [3.899674892425537, -3.516752243041992], + [-4.206777572631836, 4.1628618240356445], + [8.22049617767334, -2.222749948501587], + [1.493964672088623, -0.36718258261680603], + [0.04007940739393234, 12.542405128479004], + [8.632768630981445, -2.6297056674957275], + [2.1063506603240967, 5.541199684143066], + [-3.6610023975372314, 5.303463935852051], + [2.845562219619751, -2.943096399307251], + [3.4877195358276367, -10.71786880493164], + [1.869710922241211, 6.219069480895996], + [6.02604341506958, 7.538142204284668], + [1.3769134283065796, -6.325760841369629], + [-4.913290500640869, 4.042313575744629], + [-0.04364074021577835, 9.8922119140625], + [3.4276976585388184, -7.526219367980957], + [9.883134841918945, -2.5190396308898926], + [-4.865947246551514, -7.987842559814453], + [2.099790096282959, 4.971652030944824], + [-4.752037048339844, -4.537732124328613], + [6.706401348114014, 8.154760360717773], + [6.975344181060791, -1.6946130990982056], + [-6.120781421661377, 4.612005233764648], + [-5.213494777679443, 5.730583190917969], + [2.848191499710083, 0.6316745281219482], + [5.224316120147705, 6.476934432983398], + [3.8517818450927734, -3.3284239768981934], + [-3.1128251552581787, 6.402732849121094], + [-1.8532166481018066, 1.8705782890319824], + [4.523754596710205, 6.334173202514648], + [-1.7690751552581787, -3.309006929397583], + [9.316815376281738, -2.2994749546051025], + [2.86128830909729, -2.925797700881958], + [-2.0924646854400635, 2.0799014568328857], + [0.17402046918869019, 10.258512496948242], + [8.743626594543457, -2.3234946727752686], + [-4.275707721710205, -6.445220947265625], + [-2.9956462383270264, 3.2786333560943604], + [-6.683211803436279, -0.2188776731491089], + [-3.432631254196167, -6.166727066040039], + [-5.587820053100586, 4.78476619720459], + [-5.679732322692871, -2.014356851577759], + [-5.11342191696167, 7.995840072631836], + [0.15735429525375366, 10.198871612548828], + [-4.19824743270874, -6.487001895904541], + [-3.7852184772491455, -5.765366554260254], + [2.0107195377349854, -6.686903953552246], + [3.086237907409668, -5.887996673583984], + [2.6496875286102295, -3.7307868003845215], + [1.1372556686401367, -1.6335972547531128], + [-4.394257068634033, 0.409121036529541], + [2.3109447956085205, -8.108277320861816], + [7.551889896392822, -2.172602415084839], + [2.9032599925994873, 1.5083613395690918], + [5.93182897567749, -4.615822792053223], + [8.82883071899414, -2.206563711166382], + [3.082839012145996, -4.347924709320068], + [1.5348284244537354, -6.376129150390625], + [2.4224655628204346, 2.8270537853240967], + [1.2080622911453247, -0.3534812033176422], + [3.2102572917938232, 1.3026394844055176], + [6.396985054016113, 8.236083984375], + [-2.1857104301452637, 2.4246420860290527], + [2.431173324584961, -3.433950662612915], + [0.08915334194898605, 11.964483261108398], + [1.4886083602905273, 6.514989376068115], + [3.9358737468719482, -3.8150546550750732], + [2.086364984512329, -6.449272155761719], + [-7.285059928894043, -1.4661810398101807], + [2.85575532913208, -4.075314521789551], + [1.430370569229126, 5.762944221496582], + [2.7447195053100586, -3.955014944076538], + [0.18887704610824585, 10.482419967651367], + [1.8636474609375, 5.5548529624938965], + [-4.696345329284668, -8.063873291015625], + [-3.139432907104492, 6.282861709594727], + [2.140737295150757, 0.7635905146598816], + [0.014295332133769989, 13.043270111083984], + [-5.024404048919678, 6.1705002784729], + [-4.032208442687988, -2.8084447383880615], + [7.82710599899292, -2.0931296348571777], + [-0.700587809085846, 1.336866855621338], + [3.221667528152466, -4.557328701019287], + [-7.375561237335205, -0.2950706481933594], + [2.8965871334075928, -8.808462142944336], + [3.6356213092803955, -5.841527938842773], + [-3.6578369140625, -1.6330220699310303], + [-7.043503761291504, 7.5919342041015625], + [1.5746431350708008, 0.27462518215179443], + [9.845274925231934, -2.3654987812042236], + [-0.09126550704240799, 13.808568954467773], + [2.7452521324157715, -7.393895149230957], + [3.488290309906006, -7.314848899841309], + [2.1560113430023193, 4.325094223022461], + [3.4803764820098877, -7.841960906982422], + [-6.719057559967041, 8.241598129272461], + [-5.23550271987915, -4.81235408782959], + [7.893947124481201, -2.5206503868103027], + [3.7105672359466553, -7.228824138641357], + [-2.1072254180908203, 2.564181327819824], + [-2.8113338947296143, -1.3831828832626343], + [6.571255207061768, -3.251532793045044], + [-4.750286102294922, -7.081172943115234], + [3.0197818279266357, -4.280339241027832], + [0.8567937016487122, 0.18729327619075775], + [-1.22226881980896, -0.07225057482719421], + [-7.565337657928467, -0.4383801221847534], + [6.470170497894287, -1.7975157499313354], + [9.243468284606934, -2.3646860122680664], + [3.021404981613159, -1.893839716911316], + [0.8273923397064209, -0.971376895904541], + [-6.947723865509033, 8.198972702026367], + [-2.2338387966156006, 2.116745710372925], + [2.6678223609924316, 3.8984501361846924], + [0.3455650806427002, 10.05456256866455], + [3.4937191009521484, -5.178353309631348], + [6.4199604988098145, 7.893540382385254], + [8.853904724121094, -2.3457460403442383], + [-8.283079147338867, 0.016161438077688217], + [-0.07208026200532913, 9.389803886413574], + [-3.9318342208862305, -2.4979565143585205], + [-1.9828068017959595, 2.3652026653289795], + [-2.1608288288116455, -1.7358318567276], + [3.0389087200164795, -7.966132640838623], + [2.460923194885254, 5.781554222106934], + [-2.585756301879883, 2.117361068725586], + [6.295200824737549, 7.89622688293457], + [7.604093074798584, -1.8238075971603394], + [0.3007271885871887, -1.287122130393982], + [-6.2059645652771, 8.226374626159668], + [0.006101183593273163, 11.724315643310547], + [7.609224319458008, -1.9723316431045532], + [4.015849590301514, -3.1187562942504883], + [-2.4935903549194336, 0.7991524934768677], + [4.5451579093933105, -4.8175458908081055], + [1.7340984344482422, 1.0165547132492065], + [1.9781434535980225, -1.1848750114440918], + [-2.678074598312378, -3.570530652999878], + [6.119476795196533, -1.418756127357483], + [4.190812587738037, -0.574740469455719], + [1.460350751876831, -7.388251304626465], + [-1.7261866331100464, 2.397994041442871], + [2.0114731788635254, 4.456537246704102], + [-2.7043328285217285, 7.201501846313477], + [2.5549709796905518, 5.378100395202637], + [-4.472380638122559, 4.805462837219238], + [3.1174702644348145, -4.461038589477539], + [-1.8590850830078125, 1.9509388208389282], + [8.48486042022705, -2.2924110889434814], + [2.4158215522766113, 3.663029909133911], + [6.930427074432373, -1.7698755264282227], + [0.36258864402770996, 0.2411881983280182], + [-3.200126886367798, -0.5171424150466919], + [2.8723514080047607, -4.00564432144165], + [2.9340968132019043, -3.225294828414917], + [-4.649919509887695, -1.6213511228561401], + [7.157371520996094, -2.03926944732666], + [7.952403545379639, -2.131471872329712], + [5.280096530914307, -4.716574192047119], + [-2.182202100753784, 2.611725091934204], + [3.588928461074829, 1.7242166996002197], + [-6.183116912841797, -1.7017098665237427], + [-4.212206840515137, -4.964718818664551], + [-3.3191285133361816, -5.496363639831543], + [5.529531478881836, -1.3190604448318481], + [3.819796323776245, -7.470699310302734], + [-2.5739009380340576, 2.9784297943115234], + [-5.030904769897461, 6.9121623039245605], + [5.978695392608643, -2.8579816818237305], + [-4.616629600524902, -6.2990217208862305], + [1.3715488910675049, -6.677273273468018], + [1.5104947090148926, 0.8875244855880737], + [1.8808162212371826, 0.9784011840820312], + [0.01037006825208664, 11.830183029174805], + [-3.2789807319641113, 3.6706924438476562], + [1.913524866104126, -0.8583000898361206], + [-0.3100076913833618, 0.4019843637943268], + [3.7259607315063477, -3.3623061180114746], + [-3.8353660106658936, -1.0859413146972656], + [9.939688682556152, -2.364530563354492], + [3.4401748180389404, -5.273789405822754], + [1.8677085638046265, 4.752344131469727], + [5.668681621551514, -1.1591013669967651], + [4.118005275726318, 1.078254222869873], + [-1.2815719842910767, -2.3425698280334473], + [6.4090256690979, 7.8245649337768555], + [-2.884899377822876, -0.5079783201217651], + [-4.8538289070129395, 4.475015163421631], + [-4.2000346183776855, -6.397863388061523], + [-2.0873279571533203, 2.679943084716797], + [2.233081102371216, 3.8793585300445557], + [-2.2035317420959473, 2.283446788787842], + [3.8646864891052246, 5.926628112792969], + [-4.006669998168945, -4.1175384521484375], + [2.5659048557281494, -6.207348346710205], + [2.3037102222442627, 0.5708003640174866], + [-7.579379558563232, 8.822124481201172], + [-7.477187156677246, 8.71298885345459], + [-4.599847316741943, -1.1096960306167603], + [1.7166088819503784, -7.623157024383545], + [-4.519554615020752, 4.110344886779785], + [-0.29289981722831726, -1.9485831260681152], + [3.313232183456421, 6.347111701965332], + [0.7231021523475647, 7.442876815795898], + [5.454164028167725, -3.722071647644043], + [3.318967819213867, -5.215549945831299], + [-5.098141193389893, 0.01752733811736107], + [3.492344617843628, -8.551685333251953], + [-2.913874387741089, 1.6319040060043335], + [-4.5166144371032715, 4.912172317504883], + [8.279474258422852, -2.2771573066711426], + [-2.6465537548065186, 1.731510043144226], + [8.563578605651855, -2.3645060062408447], + [2.117002010345459, 0.24767261743545532], + [1.9258546829223633, -7.887192726135254], + [-3.5419514179229736, 5.138157367706299], + [-2.5207905769348145, 1.6379637718200684], + [-4.71828031539917, -1.1716786623001099], + [-2.378554582595825, 1.307555913925171], + [4.1031012535095215, 6.509306907653809], + [5.8968706130981445, 7.570525646209717], + [3.8805253505706787, 1.7907899618148804], + [-4.071878433227539, -3.4015676975250244], + [-2.160428524017334, 2.5252346992492676], + [-5.35272741317749, -4.05276346206665], + [1.4282050132751465, 5.616843223571777], + [1.5359961986541748, -2.7713100910186768], + [2.6879327297210693, 1.6206797361373901], + [-2.0198540687561035, -3.7699203491210938], + [-0.4107822775840759, -1.7945787906646729], + [-4.370245456695557, -7.5859456062316895], + [-4.174499034881592, -6.2971906661987305], + [-4.508229732513428, -6.682939052581787], + [1.1522557735443115, 0.09610585868358612], + [-4.6847615242004395, 5.446864128112793], + [0.97591632604599, 1.4987093210220337], + [3.1149022579193115, -3.8801052570343018], + [-2.2990429401397705, 2.510654926300049], + [-3.0259456634521484, 4.7609543800354], + [-5.310964107513428, -2.1357500553131104], + [-1.4135799407958984, 1.9559561014175415], + [-2.409869909286499, 2.4038586616516113], + [3.373544931411743, -3.2694427967071533], + [-3.7792208194732666, -5.517510414123535], + [2.993246078491211, 0.5257050395011902], + [3.373356342315674, -3.644336700439453], + [-4.73127555847168, 5.74147891998291], + [-1.2188165187835693, -0.5592936277389526], + [-3.558372735977173, -3.587203025817871], + [-4.2256760597229, 4.493442535400391], + [3.5230209827423096, 1.0042070150375366], + [8.428128242492676, -2.3016438484191895], + [0.17329883575439453, 9.34874153137207], + [-1.7204946279525757, 1.0699800252914429], + [3.378739595413208, -7.042452335357666], + [2.600172996520996, -9.301033020019531], + [-4.02406120300293, -5.107719898223877], + [3.019089937210083, 5.90213680267334], + [-4.23073148727417, -4.584275722503662], + [4.024806976318359, 5.707725524902344], + [4.273496150970459, -3.619960069656372], + [2.1235201358795166, -7.882200241088867], + [-4.19088077545166, -5.719677925109863], + [-3.989211320877075, 4.191969871520996], + [-5.963069438934326, 7.807344436645508], + [-6.015117645263672, 6.968624114990234], + [0.024577759206295013, -1.1993054151535034], + [-3.587237596511841, -1.4827134609222412], + [0.9545252919197083, -6.365622043609619], + [-3.7555508613586426, -5.6148271560668945], + [1.888887643814087, -7.955472946166992], + [7.376716613769531, -4.589683532714844], + [-5.747434616088867, 8.66606330871582], + [-2.4661641120910645, 1.8386503458023071], + [-2.109553337097168, 2.6130263805389404], + [-3.2339346408843994, -4.6567230224609375], + [6.793088436126709, -1.8758015632629395], + [-2.272160053253174, 2.2762720584869385], + [-4.4115471839904785, -1.3892970085144043], + [-2.139927864074707, 2.291623115539551], + [-6.888363361358643, -0.6094352602958679], + [-1.3176805973052979, 1.7715092897415161], + [-1.5607134103775024, 1.3661237955093384], + [-2.1030848026275635, 2.5553171634674072], + [0.1593509316444397, 11.388513565063477], + [-0.9433826804161072, 1.341718316078186], + [-5.518641948699951, 6.445423126220703], + [-4.934943199157715, 4.103228569030762], + [-2.019054889678955, 2.2417104244232178], + [9.749785423278809, -2.419081449508667], + [0.01839762181043625, 9.702335357666016], + [-2.5777854919433594, 0.8607380390167236], + [-1.9777262210845947, 2.297621726989746], + [-5.791654586791992, 6.141634464263916], + [-3.636106491088867, -6.193056106567383], + [9.673422813415527, -2.3634836673736572], + [3.280949831008911, -7.610238552093506], + [3.2652931213378906, -5.395709037780762], + [-2.0559628009796143, 2.5735042095184326], + [-6.562978267669678, -0.6878128051757812], + [5.814868450164795, 7.206218719482422], + [3.3453986644744873, 0.8599838018417358], + [-5.788290500640869, -0.8689343929290771], + [4.632049083709717, -2.2242462635040283], + [-0.30025675892829895, -1.6043108701705933], + [-3.7998697757720947, -5.751159191131592], + [-5.001956462860107, 6.2338948249816895], + [4.209190845489502, -2.2453575134277344], + [2.8294215202331543, 0.8010561466217041], + [4.634699821472168, -6.469472885131836], + [-2.1934661865234375, 2.5026776790618896], + [-4.347314357757568, -6.979157447814941], + [3.0295817852020264, 3.9036061763763428], + [-2.115455389022827, 2.62788462638855], + [-2.080327033996582, 2.4329299926757812], + [3.1822097301483154, 1.344765067100525], + [1.1005467176437378, 6.322061538696289], + [-3.5372564792633057, 5.088632583618164], + [6.438700199127197, -3.4592034816741943], + [-0.6866400837898254, -1.3444342613220215], + [-4.01043701171875, 5.203764915466309], + [-3.417288064956665, 0.2758433222770691], + [4.008990287780762, -3.544935464859009], + [11.262859344482422, -2.5909054279327393], + [-5.771752834320068, 6.262333869934082], + [-3.0836150646209717, -4.136345863342285], + [-1.6611640453338623, -4.117550849914551], + [3.906390428543091, 5.730770111083984], + [-1.7513858079910278, 2.1535613536834717], + [0.07621335238218307, 9.752948760986328], + [-0.21576297283172607, 10.180268287658691], + [2.8032610416412354, 4.378046035766602], + [1.4864603281021118, -2.5654280185699463], + [3.2480063438415527, -7.075751781463623], + [-2.9719231128692627, -3.796691656112671], + [-2.7847869396209717, 5.551907539367676], + [-6.126133918762207, 7.404532432556152], + [6.158275127410889, -4.8379364013671875], + [6.645649433135986, 8.285347938537598], + [5.877320766448975, 7.382654190063477], + [2.9677460193634033, -4.243749141693115], + [-1.1112183332443237, -3.17448353767395], + [7.740836143493652, 9.12897777557373], + [3.785174608230591, -7.553911209106445], + [-2.6503586769104004, 0.9492595195770264], + [-4.689027309417725, -3.1533310413360596], + [-3.370508909225464, -2.4969735145568848], + [4.563538551330566, -3.5778560638427734], + [-6.823719024658203, -0.44260871410369873], + [-4.576993465423584, -2.763996124267578], + [4.424277305603027, -3.5865259170532227], + [-4.12982177734375, 7.270864486694336], + [-4.383346080780029, -2.4769625663757324], + [2.0181775093078613, -2.489739418029785], + [2.744682788848877, 2.216834783554077], + [8.548157691955566, -2.5549581050872803], + [-0.03080577403306961, 12.58157730102539], + [-6.719062328338623, 8.252274513244629], + [8.583111763000488, -2.305485963821411], + [-0.02706756442785263, -1.6325808763504028], + [-3.8029234409332275, -2.2206544876098633], + [3.134366273880005, 2.3119165897369385], + [-2.795133352279663, -4.5201416015625], + [2.9565415382385254, -6.970595359802246], + [1.429834246635437, 0.2789510488510132], + [1.8849222660064697, 6.603854179382324], + [-4.592057228088379, -2.329962968826294], + [-2.728398561477661, 4.457525253295898], + [0.0806618258357048, 11.469955444335938], + [-4.8176798820495605, -7.681885242462158], + [6.923634052276611, -2.3209524154663086], + [0.5824955105781555, -5.315377235412598], + [7.425168514251709, 8.803842544555664], + [1.1973521709442139, -0.7882591485977173], + [-3.405839681625366, -3.761085033416748], + [-2.1248998641967773, 1.461103916168213], + [-4.779351711273193, -4.024050712585449], + [3.35496187210083, -3.8122448921203613], + [3.58581280708313, 0.9653306007385254], + [2.8823726177215576, -4.09766960144043], + [-0.7836715579032898, 1.4961808919906616], + [-2.33498477935791, -4.589588165283203], + [2.391679525375366, -7.7875447273254395], + [-2.1748909950256348, 1.9974673986434937], + [7.686471462249756, -2.1389191150665283], + [8.120169639587402, -2.337155818939209], + [3.1123147010803223, -4.39486837387085], + [2.3422605991363525, 1.2732197046279907], + [0.02849709242582321, 9.662940979003906], + [2.4843332767486572, -6.00709867477417], + [-4.014746189117432, -2.5286054611206055], + [-2.556137800216675, 1.7855719327926636], + [-2.2874538898468018, -3.242532730102539], + [6.756758213043213, -4.868058204650879], + [-2.6795761585235596, -5.20527458190918], + [2.753438711166382, -2.587573766708374], + [-0.44644784927368164, -2.4922125339508057], + [3.4272067546844482, -8.17219352722168], + [-2.7283096313476562, 2.5448057651519775], + [10.227154731750488, -2.386389970779419], + [-4.65794038772583, -6.414074897766113], + [4.071107387542725, -2.4840900897979736], + [2.1472251415252686, 1.2741676568984985], + [7.715505599975586, -2.1351888179779053], + [3.6567695140838623, -6.696964263916016], + [-3.8693273067474365, -1.0908968448638916], + [-0.0061901286244392395, 9.217529296875], + [8.244629859924316, -2.212716579437256], + [-6.48912239074707, 1.6753727197647095], + [-4.041497707366943, -6.504953384399414], + [2.971719980239868, -7.14235782623291], + [-3.382471799850464, -5.480588912963867], + [6.069783687591553, -1.3499222993850708], + [-2.124910354614258, 2.609949827194214], + [4.7974371910095215, -4.303774356842041], + [8.280341148376465, -2.5559206008911133], + [-2.7227556705474854, 6.096270561218262], + [2.0735955238342285, -8.301258087158203], + [3.532625913619995, -7.220193862915039], + [2.335874557495117, -2.6835646629333496], + [0.04416888207197189, 9.106213569641113], + [5.860699653625488, -1.972370982170105], + [0.48684442043304443, 9.541488647460938], + [4.2130584716796875, 6.404837131500244], + [2.4115986824035645, 1.6120524406433105], + [-6.873032093048096, -1.6948515176773071], + [6.560227394104004, 8.428851127624512], + [3.6941215991973877, 1.6363197565078735], + [-2.773099184036255, 1.474467158317566], + [0.4761802554130554, 10.516179084777832], + [7.199826717376709, -1.6479984521865845], + [-7.265219211578369, 0.497058629989624], + [-2.284273862838745, 2.4150567054748535], + [2.283447504043579, 5.87196159362793], + [2.828064203262329, -1.8949793577194214], + [0.051943473517894745, 11.394969940185547], + [3.0537712574005127, -7.1372599601745605], + [-4.5517354011535645, -6.290322303771973], + [7.443546772003174, -1.6673320531845093], + [-2.2234013080596924, 5.576115608215332], + [-6.460495471954346, -1.596097707748413], + [8.363181114196777, -2.265763998031616], + [-2.943837881088257, -3.620347499847412], + [1.5908550024032593, -6.014366626739502], + [8.469364166259766, -2.420152425765991], + [0.9802371859550476, -2.2956185340881348], + [-2.1519947052001953, 2.4789113998413086], + [-2.841717481613159, -4.122271537780762], + [5.941939353942871, -3.8555734157562256], + [1.2840454578399658, -6.925305366516113], + [0.21023112535476685, 11.811315536499023], + [0.8555305004119873, -3.8992650508880615], + [-3.2212908267974854, 5.987044334411621], + [2.6895086765289307, -3.6148359775543213], + [-4.269713878631592, -6.710944175720215], + [0.11616795510053635, 11.232818603515625], + [-2.921560525894165, -2.963261365890503], + [-0.8975176811218262, 1.5471726655960083], + [-2.490757942199707, 1.6890020370483398], + [2.4612858295440674, 1.4312149286270142], + [2.6742804050445557, -3.879340887069702], + [-0.11246723681688309, -0.4053538143634796], + [1.132395625114441, -0.8729075193405151], + [0.3168871998786926, -1.4880462884902954], + [-4.351276874542236, -6.829748153686523], + [-4.51393461227417, -2.578273057937622], + [-3.747244119644165, -1.356512427330017], + [0.1396784782409668, 10.104299545288086], + [-3.214526891708374, 5.298206329345703], + [8.154866218566895, -2.1175167560577393], + [0.9841154217720032, -1.0677857398986816], + [-4.562313079833984, 4.482261657714844], + [-4.288114547729492, -6.432285308837891], + [2.8673715591430664, 0.7875761389732361], + [1.0169368982315063, 0.7727185487747192], + [-3.478405237197876, -0.6465834379196167], + [1.695141315460205, 1.9694610834121704], + [0.18402981758117676, 10.632768630981445], + [-4.269083499908447, -6.326301097869873], + [2.964233875274658, -4.183992862701416], + [6.823644638061523, -1.6102513074874878], + [0.34024935960769653, 0.3542397916316986], + [4.070374965667725, 5.459190368652344], + [7.003812313079834, 8.40147590637207], + [0.04137437790632248, 10.467140197753906], + [-2.5873517990112305, 1.6608850955963135], + [-2.2003870010375977, 0.040560122579336166], + [-4.25341272354126, -6.267584323883057], + [-5.8973307609558105, 7.293045997619629], + [-3.565312623977661, 6.8085737228393555], + [2.2492334842681885, -8.507902145385742], + [-4.6987199783325195, -7.124508857727051], + [3.337683916091919, -3.591059446334839], + [3.7692482471466064, -3.666309118270874], + [5.324492931365967, 7.100907325744629], + [5.1095781326293945, 6.640325546264648], + [-2.4748218059539795, 1.7651177644729614], + [-1.2932071685791016, -3.5838000774383545], + [1.7857894897460938, 4.892372131347656], + [-4.0813398361206055, 4.752060413360596], + [-4.39541482925415, -5.734778881072998], + [-0.021167822182178497, 13.118573188781738], + [-2.6251041889190674, 1.930833101272583], + [-1.8442105054855347, -4.314027786254883], + [4.516464710235596, 1.9951146841049194], + [-4.70698881149292, 4.268146991729736], + [-4.0164713859558105, 4.061953544616699], + [5.0170111656188965, 6.843509674072266], + [-3.5811338424682617, -2.361987352371216], + [-1.862959623336792, 5.820987224578857], + [-5.90272855758667, 0.3812837600708008], + [2.89506196975708, -4.101626873016357], + [8.222907066345215, -2.5821633338928223], + [-0.3258633017539978, -0.992563784122467], + [-6.939528942108154, 6.993525505065918], + [-4.767442226409912, -3.7641043663024902], + [1.302534580230713, -0.2826716899871826], + [5.850439071655273, 7.729942321777344], + [-2.3436696529388428, 2.1007449626922607], + [0.07109735161066055, -1.4509490728378296], + [-5.670255661010742, -1.0992242097854614], + [-0.07174781709909439, -1.541237711906433], + [-2.507148504257202, 2.251896619796753], + [-2.4138948917388916, 1.2997685670852661], + [-3.1200177669525146, -2.735476493835449], + [1.3955186605453491, -6.219770431518555], + [0.09191887825727463, 11.560033798217773], + [-3.374803066253662, 6.792609691619873], + [1.970093011856079, -8.083258628845215], + [-1.7517201900482178, 1.5440186262130737], + [-2.3154561519622803, -4.359859943389893], + [-3.5761682987213135, -5.803219795227051], + [-0.016303665935993195, 12.850431442260742], + [4.716597557067871, 6.726423263549805], + [-2.6004745960235596, 0.7533867359161377], + [2.0050013065338135, 5.6366868019104], + [0.12081020325422287, 10.409444808959961], + [-3.8008615970611572, 5.28657865524292], + [-6.157354354858398, 7.087101459503174], + [3.658083438873291, -7.358674049377441], + [7.679460525512695, -2.4181582927703857], + [7.817357540130615, -2.126915454864502], + [2.49118971824646, 5.57332181930542], + [3.2445857524871826, -3.5304806232452393], + [2.861841917037964, -3.4897749423980713], + [-2.6476516723632812, -0.019755128771066666], + [4.470710277557373, 1.9290684461593628], + [-3.5315802097320557, 6.164644241333008], + [-5.07033109664917, -4.255789756774902], + [3.190274477005005, -5.106023788452148], + [-4.531997203826904, -5.974336624145508], + [-4.448859214782715, -0.6530687212944031], + [3.1807754039764404, -9.419330596923828], + [9.907732963562012, -2.4085617065429688], + [3.9176809787750244, -5.445046901702881], + [3.0642828941345215, -3.9583675861358643], + [0.20407193899154663, 11.645622253417969], + [-5.1698102951049805, -2.7830848693847656], + [-4.489372253417969, 6.7946577072143555], + [4.448937892913818, -5.457842826843262], + [0.14034762978553772, -1.4313353300094604], + [-5.8218560218811035, 7.495065212249756], + [6.573649883270264, 7.954059600830078], + [0.1529579758644104, 11.617376327514648], + [-5.059876918792725, -3.1973674297332764], + [-2.763855457305908, -4.049683570861816], + [-4.669216632843018, -6.430269241333008], + [-0.011775262653827667, 12.390068054199219], + [0.15159398317337036, 10.051774978637695], + [6.779784679412842, -1.5417817831039429], + [8.027363777160645, -2.323025703430176], + [-3.9930567741394043, -3.2542173862457275], + [3.4730947017669678, -7.117377281188965], + [-4.755087375640869, 4.750894546508789], + [0.7372423410415649, 0.9527443647384644], + [9.022582054138184, -2.7033843994140625], + [-0.037453509867191315, -1.542898416519165], + [-3.009082078933716, -3.631625175476074], + [-2.254910469055176, 1.9697057008743286], + [-4.955500602722168, 3.9359781742095947], + [-5.693090915679932, 3.9342710971832275], + [-6.510216236114502, -0.9256895184516907], + [8.875025749206543, -2.3756115436553955], + [0.0280718132853508, 9.713726997375488], + [-1.6395959854125977, 2.2870891094207764], + [2.24829363822937, 0.5848664045333862], + [2.1735053062438965, 2.470463514328003], + [0.0005774423480033875, 12.949623107910156], + [0.11586343497037888, -4.673401355743408], + [10.797286033630371, -2.554262399673462], + [-2.0890345573425293, 2.4106154441833496], + [8.374831199645996, -2.47342586517334], + [3.302682638168335, -6.217213153839111], + [-4.330092430114746, 3.9899260997772217], + [-3.147408962249756, -0.5993152856826782], + [3.9717156887054443, -3.220629930496216], + [-5.936091423034668, 6.818600177764893], + [9.76573371887207, -2.4785735607147217], + [6.703214168548584, -1.5093134641647339], + [-2.918337821960449, 6.6935529708862305], + [3.50468373298645, 0.5878864526748657], + [6.610731601715088, -2.7533576488494873], + [8.612318992614746, -2.5502877235412598], + [3.710425853729248, -3.152247190475464], + [2.9519588947296143, -5.862215995788574], + [3.123396635055542, 5.97686767578125], + [-7.4059600830078125, 0.002416130155324936], + [0.24275654554367065, 0.2628166377544403], + [-6.857264041900635, 7.998628616333008], + [2.822862386703491, 3.7710461616516113], + [0.16090363264083862, 11.339137077331543], + [-2.0433945655822754, 0.8243073225021362], + [3.6554245948791504, -6.134009838104248], + [1.2500872611999512, 1.4690097570419312], + [-3.3986995220184326, -3.091963052749634], + [4.3991265296936035, -3.801532506942749], + [-1.6069118976593018, 0.070931077003479], + [-6.454044818878174, 7.608334064483643], + [-5.301876068115234, 5.669519424438477], + [-4.373074054718018, -7.0744428634643555], + [-3.572057008743286, 5.4626874923706055], + [-6.639130115509033, 8.044490814208984], + [-3.1049110889434814, -4.192941188812256], + [-2.833801507949829, -5.659276008605957], + [4.45120906829834, 6.502410411834717], + [-1.3492262363433838, -3.1499197483062744], + [-2.632216215133667, 2.2892308235168457], + [-2.613187789916992, 2.1075942516326904], + [-6.008877754211426, 5.672207832336426], + [-4.236288547515869, -6.622823715209961], + [0.50441575050354, -5.172105312347412], + [2.69598650932312, -7.118681907653809], + [-0.042955465614795685, 10.03764820098877], + [0.02644234150648117, 10.578056335449219], + [8.305656433105469, -2.2500481605529785], + [2.7338359355926514, 6.932538032531738], + [-4.817220211029053, 8.52061653137207], + [-5.0174946784973145, -2.9879684448242188], + [3.766077995300293, -3.4970810413360596], + [-2.2386422157287598, 2.3288156986236572], + [-6.398123264312744, 7.4733781814575195], + [1.929734468460083, -8.734363555908203], + [0.12264745682477951, 9.166022300720215], + [-1.9017601013183594, -0.0353512205183506], + [-3.8741514682769775, -5.6693902015686035], + [0.7147740721702576, -5.894015312194824], + [-2.202441453933716, 2.6652305126190186], + [1.6549642086029053, -7.225954532623291], + [3.7093842029571533, -6.057112216949463], + [-2.533590793609619, -3.90867018699646], + [2.3996732234954834, 5.287251949310303], + [-0.0074694231152534485, 9.379098892211914], + [-0.9742711186408997, -3.2762458324432373], + [-6.499290943145752, -0.3205918073654175], + [-3.8873918056488037, -3.3676598072052], + [2.644071102142334, -4.478822231292725], + [6.433477878570557, -0.6069939136505127], + [6.984034061431885, 8.397467613220215], + [-2.2245383262634277, 1.4008694887161255], + [2.6284244060516357, 5.780307769775391], + [1.1648240089416504, -6.619448661804199], + [-2.5886781215667725, 1.7605938911437988], + [-3.698991298675537, -0.5969769954681396], + [-0.009246714413166046, 12.731404304504395], + [8.02894115447998, -2.1513149738311768], + [-6.289656162261963, 7.829800605773926], + [-0.10699910670518875, 14.345643997192383], + [3.844782829284668, -2.2057321071624756], + [-0.566031277179718, 0.1675538420677185], + [-0.030983395874500275, 8.85671329498291], + [7.132922649383545, -3.4698164463043213], + [2.820927143096924, 4.306679725646973], + [0.23120206594467163, 11.00709056854248], + [-2.1502604484558105, 2.388903856277466], + [3.479640245437622, 1.2473167181015015], + [-3.1137478351593018, -5.000070571899414], + [-4.257717609405518, 4.628262996673584], + [-3.6336774826049805, -5.306280612945557], + [6.37274694442749, 8.27159309387207], + [5.999936103820801, 8.021008491516113], + [-5.137239933013916, 5.257030963897705], + [2.8849096298217773, -4.096482753753662], + [3.8398590087890625, 6.779798984527588], + [-5.769688129425049, 6.204684734344482], + [-2.0968477725982666, 2.250847339630127], + [8.907045364379883, -2.2372095584869385], + [7.182870388031006, -1.9328011274337769], + [0.46692484617233276, 0.711835503578186], + [-4.470266342163086, -6.544318675994873], + [0.5133443474769592, 11.54887580871582], + [-4.182454586029053, -1.9395054578781128], + [6.687099456787109, -3.0919549465179443], + [2.9990668296813965, -2.462773561477661], + [4.574746608734131, 6.457314968109131], + [-1.1577987670898438, 0.9541279077529907], + [1.8918561935424805, 5.9848480224609375], + [8.89452838897705, -2.1944756507873535], + [-3.638298749923706, -5.546779632568359], + [3.2302186489105225, 2.0370771884918213], + [-4.063099384307861, -6.957009315490723], + [-0.39378711581230164, -1.8038662672042847], + [-0.06562919169664383, 12.242179870605469], + [-2.240043878555298, 2.0958619117736816], + [-0.04019094258546829, 8.796030044555664], + [-1.659389615058899, 2.193897008895874], + [1.342162847518921, -7.379767417907715], + [3.22355055809021, -4.489654541015625], + [-4.5170416831970215, -2.6617960929870605], + [3.3575010299682617, -3.1187832355499268], + [-5.3858561515808105, 0.07289224863052368], + [-3.1115589141845703, 2.918303966522217], + [0.09618698805570602, 12.646596908569336], + [-5.315154552459717, 5.058749675750732], + [3.5906496047973633, -6.7604851722717285], + [-2.383913516998291, 1.960173487663269], + [9.54399585723877, -2.3075475692749023], + [3.644860029220581, -3.4869368076324463], + [-2.5413239002227783, -3.580068349838257], + [-2.0751430988311768, -0.2981683313846588], + [5.246606349945068, 6.752828598022461], + [-5.558589458465576, -1.992784857749939], + [9.49588680267334, -2.3483681678771973], + [-0.6398365497589111, 10.23684310913086], + [3.630479097366333, 1.9127353429794312], + [1.6819860935211182, -7.676694869995117], + [2.3782105445861816, -7.420628547668457], + [0.11196111887693405, -1.5868757963180542], + [2.990767240524292, -4.170328140258789], + [2.489246129989624, -9.230646133422852], + [0.346662700176239, -1.1323024034500122], + [10.46312141418457, -2.455486536026001], + [-8.207151412963867, 0.14766156673431396], + [1.272063136100769, -6.668950080871582], + [1.3952128887176514, -7.647705554962158], + [8.974093437194824, -2.3570210933685303], + [9.079818725585938, -2.2777626514434814], + [-5.574280261993408, -2.221710205078125], + [2.3050296306610107, -0.3370541036128998], + [3.3715381622314453, -6.5871453285217285], + [3.0042943954467773, 5.3589277267456055], + [9.136500358581543, -2.410707712173462], + [-1.5936734676361084, 2.345151424407959], + [-5.288660526275635, -2.3254668712615967], + [-2.0800399780273438, 2.475611448287964], + [-3.643106698989868, -5.370199203491211], + [-0.060616858303546906, 12.950822830200195], + [-5.535351753234863, 6.7869181632995605], + [5.1039910316467285, 6.468914985656738], + [2.075305938720703, -7.087901592254639], + [-2.235093593597412, 2.2250378131866455], + [-3.7242648601531982, -4.165919303894043], + [4.444738388061523, -3.6469781398773193], + [-2.520296096801758, 7.554917335510254], + [-0.87172931432724, 0.38552233576774597], + [-3.4468929767608643, -4.089045524597168], + [1.8563214540481567, 1.316189169883728], + [-4.658471584320068, -7.199432373046875], + [-3.266902208328247, -5.0313920974731445], + [-6.796700954437256, 0.16119027137756348], + [-4.9179792404174805, -2.2840497493743896], + [0.41712045669555664, -0.45124948024749756], + [-0.016456104815006256, -1.4044729471206665], + [8.405363082885742, -2.2916576862335205], + [8.180692672729492, -2.1722047328948975], + [4.89231538772583, -3.714783191680908], + [3.2536308765411377, -3.9673101902008057], + [2.7729811668395996, -2.590791702270508], + [-2.7913568019866943, -3.4822821617126465], + [-5.236052513122559, 8.080464363098145], + [-1.2616981267929077, -2.655402898788452], + [2.2248623371124268, 1.5347297191619873], + [5.026086807250977, -4.368781089782715], + [0.021207444369792938, 9.687674522399902], + [0.23178213834762573, 11.407238006591797], + [2.9459383487701416, -8.022319793701172], + [-1.4145801067352295, 1.9857326745986938], + [2.1873209476470947, 1.6955736875534058], + [0.15358978509902954, 10.121797561645508], + [4.976997375488281, -2.3969316482543945], + [-3.2657947540283203, 1.0255242586135864], + [-2.471705675125122, 2.241835117340088], + [-2.937849521636963, -5.584167003631592], + [-2.336421489715576, 1.4241106510162354], + [6.059533596038818, 7.966915130615234], + [1.517531156539917, -7.615496635437012], + [-5.248073101043701, 5.051788330078125], + [3.4037041664123535, -5.837794303894043], + [-2.4362902641296387, 2.1639912128448486], + [-2.879582166671753, 2.2280900478363037], + [-3.517479658126831, -2.215789794921875], + [6.748546123504639, 8.308878898620605], + [2.3023781776428223, -2.206433057785034], + [-3.300769567489624, 5.980443954467773], + [-4.395791530609131, -5.474553108215332], + [4.409830570220947, 6.757185935974121], + [-4.843897342681885, -0.7415634393692017], + [4.305607318878174, -6.266818046569824], + [-5.606805324554443, -0.11337065696716309], + [-6.9270243644714355, 7.793424606323242], + [-2.4420931339263916, -3.39402437210083], + [4.265660285949707, -3.3264029026031494], + [-5.987091541290283, 4.517526626586914], + [-6.745331287384033, 7.776323318481445], + [2.5512287616729736, -7.312950134277344], + [2.059067487716675, -7.235282897949219], + [0.1606082320213318, 12.145894050598145], + [4.142261028289795, -9.340248107910156], + [5.044919967651367, 7.979001045227051], + [-6.0651726722717285, -1.9385687112808228], + [2.9099745750427246, -4.027996063232422], + [2.4032669067382812, -5.684085845947266], + [0.006260804831981659, 12.438562393188477], + [2.2224278450012207, -6.523101806640625], + [-2.2115814685821533, 2.825820207595825], + [0.08054798096418381, 10.056419372558594], + [0.36978232860565186, 5.7438836097717285], + [0.23888158798217773, 10.647916793823242], + [3.050403356552124, -4.3655548095703125], + [2.425433874130249, -7.309027194976807], + [-0.9641821384429932, -0.7910516262054443], + [7.428041934967041, -2.4129905700683594], + [3.8221189975738525, -3.505012273788452], + [2.979593515396118, 4.4029860496521], + [-3.259251832962036, -5.4409332275390625], + [3.5469911098480225, -4.633121490478516], + [-5.433470726013184, 6.197685241699219], + [-4.603312969207764, -1.9902170896530151], + [-5.921911716461182, 7.345064163208008], + [0.04358302801847458, 9.61257553100586], + [1.9130218029022217, -8.191117286682129], + [-5.815113544464111, -0.9409792423248291], + [9.0332670211792, -2.3884291648864746], + [-2.2006332874298096, 2.2497737407684326], + [-4.692501544952393, 5.795292854309082], + [2.1879196166992188, -8.773447036743164], + [-4.217963695526123, -1.9606561660766602], + [2.795013666152954, -9.559041023254395], + [2.8425161838531494, -4.2414140701293945], + [-0.11176932603120804, 9.36703872680664], + [0.6543771624565125, 10.32801628112793], + [-4.803408145904541, -6.312878608703613], + [-1.9473989009857178, 2.0746283531188965], + [2.9419639110565186, -8.636040687561035], + [1.9557774066925049, -8.206175804138184], + [-5.825546741485596, 6.803284645080566], + [4.230458736419678, -3.841489553451538], + [4.289936065673828, -4.576584815979004], + [6.056910991668701, -3.240830659866333], + [-7.065959453582764, 8.405738830566406], + [0.036944203078746796, 9.521791458129883], + [2.603290319442749, 3.2211477756500244], + [6.183630466461182, -1.9547381401062012], + [0.21279507875442505, 10.672283172607422], + [-0.016155444085597992, -1.6077874898910522], + [3.4491446018218994, -3.4518609046936035], + [-3.48441481590271, 3.738792657852173], + [3.215705156326294, -9.073739051818848], + [-2.133829116821289, 2.5811495780944824], + [5.759807109832764, 7.949337482452393], + [0.024054162204265594, -1.7879369258880615], + [8.640018463134766, -2.4011151790618896], + [2.69183611869812, -8.77901840209961], + [1.8355796337127686, 4.104944229125977], + [-2.421013832092285, 1.958938717842102], + [-2.349717140197754, 2.1527678966522217], + [-4.192023754119873, -5.597414970397949], + [4.354029178619385, -2.5714616775512695], + [0.6862434148788452, -0.8230515122413635], + [-3.9030234813690186, 6.214028358459473], + [-5.0894060134887695, 4.018491744995117], + [-1.3068040609359741, -4.086979866027832], + [-2.6540863513946533, 4.4996418952941895], + [4.3967976570129395, -3.8021481037139893], + [2.9781479835510254, -5.944960594177246], + [0.5522400140762329, -0.8136810064315796], + [-2.4134464263916016, 2.0786426067352295], + [-2.113842725753784, 2.3455471992492676], + [6.704372882843018, 8.353469848632812], + [7.6801066398620605, -1.86182701587677], + [0.06383358687162399, 10.02859115600586], + [9.070956230163574, -2.3226969242095947], + [8.00330924987793, -1.9210392236709595], + [-2.132658004760742, 2.464507818222046], + [-3.4369800090789795, -4.506942272186279], + [-2.1602442264556885, -0.07098233699798584], + [-1.9379992485046387, 2.400542974472046], + [7.744659423828125, 9.158681869506836], + [0.7546879053115845, -5.814116477966309], + [-4.4783244132995605, -2.364158868789673], + [8.124564170837402, -2.2772810459136963], + [2.0568087100982666, 1.3777319192886353], + [8.129661560058594, -2.348764657974243], + [-4.043725967407227, -6.404105186462402], + [3.0671699047088623, 6.228056907653809], + [0.014251522719860077, 11.295036315917969], + [3.7467973232269287, -8.497568130493164], + [4.390894412994385, -4.571681976318359], + [1.4977476596832275, 0.212856262922287], + [-5.878993511199951, 6.780588150024414], + [-4.555558681488037, -7.121518611907959], + [6.081027507781982, 8.42953872680664], + [-4.131836414337158, -2.727994680404663], + [-1.038809061050415, -0.6296272873878479], + [-6.204367637634277, 8.112285614013672], + [-2.8777127265930176, -1.6756824254989624], + [-3.5656139850616455, -4.775607109069824], + [3.148484706878662, -2.64166259765625], + [8.760736465454102, -2.369262218475342], + [-4.432857990264893, -3.158064365386963], + [8.631048202514648, -2.24861216545105], + [-5.566572189331055, -3.137265205383301], + [-6.716837406158447, 7.6776556968688965], + [7.296582221984863, -2.3791964054107666], + [-5.77487325668335, -3.103907346725464], + [8.226962089538574, -2.22516131401062], + [-2.775254249572754, -5.157127857208252], + [0.38080912828445435, -0.9108484983444214], + [2.7991116046905518, -3.283674955368042], + [2.0181171894073486, 0.02678927406668663], + [-2.484684705734253, -4.365268707275391], + [1.9148426055908203, 2.5228750705718994], + [2.599487543106079, 4.7529754638671875], + [-2.4252195358276367, 2.4529647827148438], + [4.0346808433532715, 1.6446855068206787], + [-2.3541181087493896, 1.5780361890792847], + [1.631983757019043, 3.9544966220855713], + [2.3086297512054443, 0.7156010866165161], + [-5.071610927581787, 5.0656256675720215], + [-0.04429800063371658, 9.515727996826172], + [3.1306259632110596, 1.0641508102416992], + [8.543230056762695, -2.4992589950561523], + [8.201111793518066, -2.185634136199951], + [-2.4707698822021484, -4.547662734985352], + [0.2578470706939697, -1.258618712425232], + [6.677677154541016, -2.6725151538848877], + [3.626087188720703, -4.004838943481445], + [-1.848972201347351, 2.462282180786133], + [1.2769057750701904, 1.771753191947937], + [-2.426572561264038, -4.387058734893799], + [4.252053737640381, 6.944337368011475], + [2.4876489639282227, 3.31390118598938], + [4.7966227531433105, -4.289884090423584], + [-4.4051337242126465, -1.3068089485168457], + [-2.1281888484954834, 2.6698288917541504], + [0.9271600842475891, 1.2795401811599731], + [-5.797111988067627, -1.326867938041687], + [-2.2010300159454346, 2.1655054092407227], + [-7.461943626403809, -0.3529808521270752], + [-3.560837984085083, -2.1024317741394043], + [7.1665730476379395, 8.581859588623047], + [-3.463104486465454, 6.503047466278076], + [0.05240624397993088, 10.48444938659668], + [-0.05291939526796341, 9.078874588012695], + [0.13656121492385864, 9.946123123168945], + [6.738832950592041, 8.12489128112793], + [11.333674430847168, -2.587170362472534], + [-6.525206565856934, 7.907719612121582], + [3.190549373626709, -7.877017021179199], + [-2.659838914871216, 5.314647197723389], + [-4.711066246032715, 5.868090629577637], + [3.4668898582458496, -4.214482307434082], + [3.357572317123413, -8.84486198425293], + [-3.38926100730896, -5.085930824279785], + [-1.446796178817749, 1.2521973848342896], + [2.1439199447631836, 4.463462829589844], + [0.056932441890239716, 12.230359077453613], + [2.2620649337768555, 5.3749589920043945], + [5.45239782333374, -1.1653422117233276], + [8.703936576843262, -2.3509790897369385], + [4.776967525482178, -3.4460737705230713], + [0.006983809173107147, 11.74095344543457], + [0.031481556594371796, 12.97557258605957], + [1.169165849685669, -0.19684307277202606], + [5.27491569519043, -3.818690538406372], + [-4.9770612716674805, 5.556466102600098], + [3.1091606616973877, -4.378434658050537], + [3.532001495361328, -3.653494358062744], + [-4.759451389312744, -3.1194212436676025], + [-0.3988783359527588, -1.1872522830963135], + [1.4177449941635132, 3.9351673126220703], + [0.18859010934829712, 10.435224533081055], + [3.2461259365081787, -11.356722831726074], + [2.5241692066192627, -4.331253528594971], + [0.19304603338241577, 11.753850936889648], + [-1.817923903465271, 1.735582709312439], + [7.240113735198975, 8.757018089294434], + [3.0846259593963623, -4.326621055603027], + [-4.956183910369873, -4.945601463317871], + [6.387482166290283, 8.429819107055664], + [-5.6801629066467285, 0.43629252910614014], + [4.573516845703125, 7.273430824279785], + [-2.30633544921875, 2.899822950363159], + [8.712211608886719, -2.3142473697662354], + [2.2029197216033936, -1.8965591192245483], + [-2.093817710876465, 2.2622997760772705], + [-1.6802324056625366, 1.3861830234527588], + [3.4119019508361816, -8.291149139404297], + [-1.976837158203125, 1.373961091041565], + [0.1882902979850769, 10.724395751953125], + [-2.40567946434021, 1.871724247932434], + [1.8895705938339233, -7.255353927612305], + [-2.171581268310547, -4.173445701599121], + [3.0257534980773926, 0.5868080854415894], + [-2.2650258541107178, 2.2390048503875732], + [-4.597741603851318, -6.8578200340271], + [7.594982624053955, -3.04510235786438], + [2.8889527320861816, 6.620151996612549], + [7.839070796966553, -2.3336141109466553], + [1.2536602020263672, 3.6226131916046143], + [-1.2374916076660156, -0.6166567802429199], + [-5.5785746574401855, -0.21874594688415527], + [0.22030997276306152, 10.99891471862793], + [-3.627136468887329, -3.096912145614624], + [5.014458179473877, -0.7241712808609009], + [2.2081258296966553, 5.468356132507324], + [10.131285667419434, -2.4543235301971436], + [2.708238363265991, -7.920662879943848], + [-0.9894289970397949, -3.7423646450042725], + [4.555706977844238, -4.257050037384033], + [8.524017333984375, -2.2271437644958496], + [7.888519763946533, -2.626629114151001], + [4.483825206756592, 6.912684917449951], + [3.2725093364715576, -8.552977561950684], + [3.68691086769104, -3.5964393615722656], + [-0.052667371928691864, -1.738732933998108], + [3.338677406311035, -6.644252777099609], + [2.823699712753296, -3.965956926345825], + [9.981636047363281, -2.431314706802368], + [8.1097993850708, -2.114239454269409], + [4.058687686920166, -5.470398902893066], + [-6.50398063659668, 7.613830089569092], + [-5.803886890411377, -0.754175066947937], + [-5.876650333404541, 2.324951171875], + [3.5019304752349854, 6.956937313079834], + [-1.6408542394638062, 1.9893985986709595], + [3.556678533554077, -7.233598232269287], + [2.7364935874938965, 5.375400543212891], + [-4.2809295654296875, 5.276448726654053], + [7.447564125061035, -2.1465365886688232], + [-0.06731314212083817, 10.185453414916992], + [-2.7579543590545654, -3.9297871589660645], + [3.4150357246398926, -4.691915512084961], + [5.431088447570801, -4.585263729095459], + [2.6138198375701904, -8.800758361816406], + [0.008828990161418915, 9.41226577758789], + [1.9926469326019287, -8.747873306274414], + [3.626905918121338, -4.897207260131836], + [9.260085105895996, -2.4322917461395264], + [-2.9180736541748047, -2.6796512603759766], + [3.0047433376312256, -3.5975406169891357], + [9.840170860290527, -2.477698564529419], + [-4.726790904998779, -1.737288475036621], + [-2.336634635925293, 1.4808992147445679], + [3.34171986579895, -3.1966280937194824], + [8.862076759338379, -2.5793659687042236], + [-6.591461181640625, 7.7502617835998535], + [-6.040933609008789, 6.4294233322143555], + [4.177005290985107, 6.289549350738525], + [3.553297758102417, -5.817386627197266], + [9.44684886932373, -2.427351474761963], + [-2.09175181388855, 2.642855405807495], + [0.6394472718238831, -0.2955302298069], + [4.6686601638793945, -3.923444986343384], + [-2.394639253616333, -0.4337748885154724], + [0.07498591393232346, 1.7359133958816528], + [0.7098991274833679, -0.8168928027153015], + [1.8137872219085693, -6.667735576629639], + [7.153365135192871, 8.631818771362305], + [-3.9459779262542725, -5.892581939697266], + [-1.51676607131958, -4.499907493591309], + [4.45133638381958, -4.530129432678223], + [-4.656763553619385, -4.202075004577637], + [2.8776779174804688, -4.043934345245361], + [4.503486156463623, 7.0323166847229], + [-5.431574821472168, 7.112713813781738], + [5.1985907554626465, -3.063661813735962], + [2.1978156566619873, -5.404364585876465], + [1.973099708557129, 4.845365524291992], + [-2.808206558227539, 3.446624517440796], + [-4.90354585647583, -1.6549118757247925], + [1.994555950164795, 4.84882926940918], + [3.1702945232391357, 1.4207645654678345], + [-3.5553457736968994, 6.022071838378906], + [-2.390493154525757, 1.735002040863037], + [-1.8591854572296143, 2.568807363510132], + [2.754476547241211, 1.7370797395706177], + [-6.78660249710083, 7.2512640953063965], + [0.01435571163892746, -1.578015685081482], + [-3.095022439956665, 3.6986067295074463], + [6.664271831512451, -1.552005648612976], + [5.534793376922607, -5.3727312088012695], + [0.5268957018852234, -1.0113708972930908], + [-4.844419002532959, -7.269454002380371], + [-4.521496772766113, 4.078824043273926], + [-3.8235723972320557, -6.168667316436768], + [-4.540778636932373, 5.7767744064331055], + [7.386167049407959, 8.892012596130371], + [3.472297191619873, -9.022468566894531], + [-1.91159987449646, 2.2953128814697266], + [-2.4297354221343994, 1.1100748777389526], + [-2.3975460529327393, -4.062647819519043], + [7.161768436431885, -5.725997447967529], + [2.518587112426758, 2.359386920928955], + [3.6760246753692627, -8.61324691772461], + [4.243699550628662, -3.1006267070770264], + [-4.412478923797607, -6.507136821746826], + [-5.1240692138671875, -0.07441115379333496], + [-2.4153552055358887, 1.4081693887710571], + [-4.608346462249756, 5.095317840576172], + [-4.8813252449035645, -6.9334716796875], + [-0.026050634682178497, 13.370079040527344], + [7.922417163848877, -2.20974063873291], + [7.025288105010986, 8.475991249084473], + [-4.953382968902588, -7.221680641174316], + [0.23298972845077515, 8.338214874267578], + [2.9448447227478027, -4.165916442871094], + [-3.006206750869751, -3.2083966732025146], + [-6.953691005706787, 7.635435104370117], + [3.0412189960479736, -3.8045575618743896], + [-4.051158905029297, -4.446628093719482], + [0.4905572533607483, 0.693091094493866], + [-1.6888117790222168, -3.409261465072632], + [-4.505038738250732, -0.22680199146270752], + [3.4561209678649902, -4.331143379211426], + [0.5900673270225525, -1.0219899415969849], + [1.0827701091766357, -0.5767951011657715], + [4.5431036949157715, -5.038481712341309], + [1.5615381002426147, 0.08048415184020996], + [-3.423382043838501, -5.594610691070557], + [-2.5762557983398438, 1.8644976615905762], + [-4.5907511711120605, -6.7528252601623535], + [-3.7621662616729736, -5.630458831787109], + [2.826019525527954, -3.951262950897217], + [-3.0704550743103027, 1.2306145429611206], + [2.658130168914795, 4.011434555053711], + [0.08319311589002609, 10.03696060180664], + [6.422804832458496, -1.1968451738357544], + [4.58289098739624, -3.4638566970825195], + [-2.724534749984741, -4.353652000427246], + [-0.016955263912677765, 9.783527374267578], + [8.810269355773926, -2.363741159439087], + [8.33837890625, -2.1421477794647217], + [3.7054758071899414, 1.8556770086288452], + [0.6607360243797302, -0.761825680732727], + [7.553916931152344, -1.7582913637161255], + [0.2816351652145386, 11.330009460449219], + [-3.9939675331115723, -7.309331893920898], + [3.7142276763916016, 1.2019258737564087], + [0.002489916980266571, 9.504932403564453], + [-4.321564197540283, -2.5844414234161377], + [8.907984733581543, -2.509303331375122], + [7.808535099029541, -2.127887010574341], + [0.003827981650829315, 11.877129554748535], + [3.1990044116973877, 6.001128196716309], + [0.1449158787727356, 10.02309799194336], + [0.7256333231925964, -0.6550244092941284], + [1.5154187679290771, -7.358832359313965], + [1.7830251455307007, 2.997964382171631], + [0.03175758570432663, 9.5743408203125], + [-3.285240411758423, 3.416670799255371], + [2.480879068374634, 3.644329071044922], + [2.716468572616577, -3.802473306655884], + [-3.3511550426483154, 2.6713221073150635], + [3.612571954727173, -7.068629264831543], + [0.8553589582443237, 5.665383338928223], + [-5.486881732940674, -0.2161247730255127], + [-0.2838767468929291, 0.5827521681785583], + [-0.13644134998321533, 0.17198246717453003], + [0.11199276894330978, 5.398406028747559], + [5.088084697723389, 7.571844100952148], + [-3.6250522136688232, 5.536857604980469], + [-3.7769739627838135, -4.3337812423706055], + [0.5218759775161743, -5.339272499084473], + [-0.7650570273399353, 0.7627468705177307], + [1.1716046333312988, -0.5499657988548279], + [-3.9233896732330322, 6.102158546447754], + [8.417097091674805, -2.3062117099761963], + [-4.480437755584717, -7.58211612701416], + [0.23831266164779663, 11.277765274047852], + [6.40342903137207, 8.378999710083008], + [2.8304696083068848, -3.993105173110962], + [4.415487766265869, -3.316088914871216], + [4.109568119049072, 2.030132532119751], + [0.041954152286052704, 9.681672096252441], + [-2.1239020824432373, 2.281050205230713], + [0.14720946550369263, 11.745193481445312], + [2.5209147930145264, -4.690827369689941], + [2.0622689723968506, -7.802762985229492], + [3.3945224285125732, -4.728902339935303], + [-0.1499803066253662, -4.715301513671875], + [-2.496401309967041, 2.1712770462036133], + [0.8180554509162903, -6.141071796417236], + [-3.5449421405792236, -1.3847254514694214], + [2.282761573791504, 5.900448799133301], + [2.228720188140869, -1.9599354267120361], + [4.1471266746521, 1.858434796333313], + [-1.9762873649597168, 2.1867659091949463], + [-2.5060813426971436, 2.051527261734009], + [2.985234260559082, -4.2118940353393555], + [3.6673829555511475, 1.4867433309555054], + [2.825812578201294, -3.701986074447632], + [7.700667381286621, -2.3280413150787354], + [2.947929620742798, -4.228700637817383], + [2.5571188926696777, -3.622528553009033], + [-3.4763565063476562, -3.2753100395202637], + [-4.638214588165283, -0.6244024038314819], + [-2.1770522594451904, 2.0880727767944336], + [1.894848108291626, -7.513154983520508], + [-0.01300782710313797, 12.436662673950195], + [1.959162712097168, 2.1985971927642822], + [-0.08878011256456375, 13.211684226989746], + [0.22740262746810913, 11.47344970703125], + [9.48434829711914, -2.348052501678467], + [-6.01362943649292, 6.512880802154541], + [2.0893661975860596, 4.31272029876709], + [-4.074469566345215, 5.569291114807129], + [0.7255948781967163, -0.876717209815979], + [-2.017385721206665, 2.437533378601074], + [-4.070961952209473, 5.16029167175293], + [5.036248683929443, 6.58170223236084], + [0.23669451475143433, 11.215394973754883], + [10.79287338256836, -2.6168625354766846], + [-5.874938488006592, 6.2288007736206055], + [6.977104187011719, -1.9302557706832886], + [0.1816590428352356, 11.149816513061523], + [-5.183102130889893, 8.301721572875977], + [-4.28511905670166, -6.543807029724121], + [-0.7328457236289978, 10.289459228515625], + [6.443567752838135, -1.663694143295288], + [0.8351266384124756, -0.29511821269989014], + [4.67249059677124, -2.1517322063446045], + [6.341882705688477, -2.5087578296661377], + [-0.1665281057357788, 10.032675743103027], + [-3.9575703144073486, -2.7464535236358643], + [0.002270154654979706, 12.463113784790039], + [-1.8256583213806152, 2.378481864929199], + [6.205639839172363, -2.7191267013549805], + [3.1091501712799072, 1.364375114440918], + [3.4118926525115967, -7.850363731384277], + [-4.428140163421631, 4.8290791511535645], + [4.936269283294678, -2.4745571613311768], + [-4.686288356781006, 5.452192306518555], + [2.995530843734741, -6.088070392608643], + [4.334275722503662, 1.9988998174667358], + [5.302041053771973, -4.277615070343018], + [-0.045525915920734406, 13.43939208984375], + [1.2246639728546143, -6.480412483215332], + [-4.500329971313477, -5.510541915893555], + [-5.070377826690674, -0.31166642904281616], + [3.0422918796539307, 6.335821151733398], + [1.066640019416809, -0.7409292459487915], + [1.007900595664978, -0.6359865069389343], + [2.3999807834625244, 0.6605486869812012], + [3.76615309715271, 0.6550371646881104], + [5.2116546630859375, 7.646699905395508], + [4.362305164337158, 7.892929553985596], + [1.8799381256103516, -3.02797532081604], + [3.4669573307037354, 5.735754013061523], + [1.647054672241211, 4.102856636047363], + [-0.41191622614860535, -0.872786819934845], + [-5.2095208168029785, -4.011612415313721], + [2.0748918056488037, -0.9801863431930542], + [3.1481339931488037, -4.452061176300049], + [8.624302864074707, -2.427861452102661], + [5.435969829559326, -2.934258222579956], + [2.2395074367523193, -5.4959397315979], + [5.871998310089111, -1.2171310186386108], + [1.9220836162567139, 4.766922950744629], + [2.846450090408325, -4.773257255554199], + [9.634458541870117, -2.398716926574707], + [-0.01972479373216629, 13.274604797363281], + [6.047865390777588, 7.473667144775391], + [-2.0742969512939453, 2.3938307762145996], + [9.124420166015625, -2.497727394104004], + [-0.6384192109107971, 0.8163096904754639], + [-5.737969875335693, -1.29715096950531], + [6.606640338897705, 8.062667846679688], + [-0.07741839438676834, -1.530828833580017], + [2.7138516902923584, -8.402905464172363], + [-6.2918291091918945, 7.091707229614258], + [-2.3179023265838623, 1.3624889850616455], + [-2.179854393005371, 0.1501535177230835], + [-6.773046970367432, 7.925992965698242], + [-6.4992899894714355, 8.02125358581543], + [-4.266052722930908, -3.90407133102417], + [1.8262038230895996, 0.30349549651145935], + [-4.468104839324951, -1.8010956048965454], + [0.8111737370491028, -0.35734400153160095], + [-5.401157855987549, 6.128931045532227], + [-4.9088640213012695, -7.511335849761963], + [0.9062904715538025, 1.2665766477584839], + [8.91715145111084, -2.5472967624664307], + [5.460246562957764, 8.94970989227295], + [0.032214514911174774, 9.514005661010742], + [-6.355144023895264, 7.16969108581543], + [-2.2930495738983154, 2.3968586921691895], + [-4.091921329498291, 6.818962097167969], + [2.7666921615600586, -3.706693172454834], + [-3.014029026031494, 5.569454193115234], + [-4.322124481201172, -3.8344969749450684], + [8.650921821594238, -2.395536184310913], + [3.6166512966156006, -3.407485246658325], + [7.606801986694336, -1.9666460752487183], + [8.747039794921875, -2.586588144302368], + [-4.628778457641602, 6.569455623626709], + [-4.401554584503174, 5.5622878074646], + [5.25722599029541, -4.975388526916504], + [6.917052745819092, 8.499177932739258], + [2.9228522777557373, 5.04845666885376], + [-4.913429260253906, 5.274714946746826], + [0.8754919767379761, -3.5085086822509766], + [0.3745739459991455, 11.494667053222656], + [2.9852688312530518, -3.7344136238098145], + [-4.850895404815674, -1.8463810682296753], + [-5.634859561920166, -1.2429362535476685], + [4.790111064910889, -2.62613582611084], + [-4.291675090789795, -1.0398612022399902], + [4.3100266456604, -3.6778066158294678], + [6.71327543258667, -2.6516706943511963], + [-3.340609312057495, -1.0965042114257812], + [5.76543664932251, 8.177192687988281], + [-0.11846628040075302, -1.613282322883606], + [6.538636684417725, 7.939852714538574], + [-2.7358078956604004, 1.9750794172286987], + [1.7595806121826172, 5.595102787017822], + [3.1671807765960693, -4.465134620666504], + [-4.976186752319336, 6.307356834411621], + [-5.536075115203857, -1.5145649909973145], + [-3.511453866958618, -4.93673038482666], + [-0.06931913644075394, 0.8030738234519958], + [3.4864203929901123, -2.0481178760528564], + [-0.7693879008293152, -0.6426683664321899], + [2.743028163909912, -6.465981483459473], + [6.408217906951904, -4.369320869445801], + [-5.354905605316162, 5.512084007263184], + [2.9540839195251465, -3.7580671310424805], + [8.87230396270752, -2.267784833908081], + [3.3248255252838135, -4.6723480224609375], + [6.625697612762451, 8.065774917602539], + [8.69058609008789, -2.3546736240386963], + [-2.991330623626709, -2.605239152908325], + [4.019434452056885, -2.2110140323638916], + [6.50322961807251, -4.061193466186523], + [-2.5833628177642822, -2.1913983821868896], + [7.172656059265137, -1.9862290620803833], + [3.2813169956207275, -6.200456619262695], + [-4.235630512237549, -6.798370838165283], + [6.032493591308594, -5.194769859313965], + [5.331993579864502, 7.938471794128418], + [1.4901957511901855, 1.506473422050476], + [-2.9608001708984375, 0.6863312125205994], + [4.760854244232178, 7.849705696105957], + [-2.183609962463379, 2.556518793106079], + [2.394547700881958, 3.7237613201141357], + [-0.36143314838409424, -2.4312984943389893], + [5.760661602020264, 7.013257026672363], + [-2.847123622894287, 1.6932767629623413], + [3.494523763656616, -4.258966445922852], + [0.6018076539039612, -1.1259130239486694], + [-6.33109712600708, 7.254271507263184], + [-2.505709409713745, 2.1217329502105713], + [7.075750350952148, 8.609219551086426], + [2.8008205890655518, -3.736128330230713], + [-1.4457223415374756, 1.2064627408981323], + [-1.8706846237182617, 2.374119997024536], + [-2.171339750289917, 5.939173698425293], + [1.5119438171386719, 0.6422089338302612], + [-4.610379695892334, -6.322904586791992], + [10.859126091003418, -2.527794361114502], + [-4.99277925491333, -2.9066293239593506], + [3.5731916427612305, -5.093301773071289], + [4.857034206390381, 2.1001131534576416], + [5.4380784034729, 7.565685749053955], + [-0.4394477307796478, 1.8542060852050781], + [9.543543815612793, -2.418335199356079], + [2.4545462131500244, 3.499412775039673], + [4.094767093658447, 1.4770010709762573], + [7.1853461265563965, -2.2545461654663086], + [-2.3569729328155518, 3.860424518585205], + [-5.619068145751953, -1.8969327211380005], + [2.286943197250366, 3.38651704788208], + [5.676839351654053, 7.152986526489258], + [-6.263674259185791, 7.59080696105957], + [-4.658107757568359, -0.836462676525116], + [-4.795172214508057, 5.122772216796875], + [-3.704242467880249, -2.4205193519592285], + [-5.175995349884033, -1.759290099143982], + [6.341930866241455, 7.8136138916015625], + [-1.8262865543365479, -3.767688751220703], + [9.109725952148438, -2.386601209640503], + [8.100597381591797, -2.185776472091675], + [-4.217319488525391, -5.50771427154541], + [0.8610830903053284, 11.166187286376953], + [6.258669376373291, 7.710372447967529], + [3.7184388637542725, -7.338770866394043], + [3.438405752182007, 1.7419521808624268], + [-2.075446128845215, 2.3755719661712646], + [7.6858439445495605, -2.5193593502044678], + [-4.179614067077637, -6.20702600479126], + [-8.181743621826172, -0.7042982578277588], + [-2.697084426879883, -3.5337891578674316], + [1.6419492959976196, 4.976623058319092], + [2.6128451824188232, 2.879878282546997], + [0.0988263413310051, 11.52623176574707], + [-2.6691620349884033, -3.552402973175049], + [-1.5874828100204468, -4.366684913635254], + [7.468721389770508, -1.7939482927322388], + [3.428805112838745, -4.659947395324707], + [0.1339266300201416, 8.99815559387207], + [-3.980092763900757, -5.710773944854736], + [-5.251401424407959, 7.271039962768555], + [-3.582742214202881, -6.056023597717285], + [-2.378171443939209, 1.431134819984436], + [-4.991957187652588, 4.256886005401611], + [-3.1521236896514893, -4.672391891479492], + [9.545104026794434, -2.422187566757202], + [1.556978464126587, 5.518714904785156], + [0.10913848131895065, 12.088756561279297], + [-1.1592445373535156, 1.3275635242462158], + [-3.784224033355713, 5.394937992095947], + [1.6276111602783203, 0.03496045991778374], + [4.373148441314697, -3.734387159347534], + [3.1097047328948975, -4.395836353302002], + [-5.200389385223389, -6.714353084564209], + [-2.191960096359253, -1.2681974172592163], + [1.1470375061035156, -7.118984222412109], + [-5.354163646697998, -0.9413363337516785], + [-5.408033847808838, 6.245135307312012], + [9.529064178466797, -2.4058573246002197], + [-5.045132637023926, 6.179025650024414], + [-1.4406328201293945, -3.9753684997558594], + [3.377432346343994, 6.20625638961792], + [2.286085367202759, -8.150222778320312], + [-2.033693552017212, 2.4378297328948975], + [2.793898344039917, -7.738872051239014], + [-1.5633121728897095, 5.980703353881836], + [3.067190408706665, -7.394099712371826], + [-2.0600662231445312, 2.344242811203003], + [-3.303999185562134, -3.7851526737213135], + [4.498551368713379, -2.6398704051971436], + [-7.472001552581787, -1.148119330406189], + [3.6360976696014404, -3.6945226192474365], + [0.19672656059265137, 10.945771217346191], + [-4.860432147979736, -7.718761444091797], + [6.327843189239502, -1.1098421812057495], + [0.12694615125656128, 9.894893646240234], + [3.204793691635132, -6.323122978210449], + [5.988229274749756, -1.30361008644104], + [4.289204120635986, -3.6930267810821533], + [3.1347999572753906, -6.048205375671387], + [3.4658265113830566, -5.119651794433594], + [-1.3305704593658447, -3.650250196456909], + [-4.690809726715088, -7.090312957763672], + [2.374175786972046, 5.32432746887207], + [-2.5161287784576416, 2.8416879177093506], + [5.9325737953186035, -1.2014328241348267], + [2.960998773574829, -8.321979522705078], + [1.5491951704025269, 0.48393476009368896], + [9.458150863647461, -2.345860242843628], + [2.7791059017181396, -8.99260425567627], + [-6.790429592132568, 7.7121381759643555], + [0.02146243304014206, 12.823198318481445], + [7.780677318572998, -2.5114622116088867], + [-4.161787509918213, -5.313525199890137], + [-4.801749229431152, -0.7368220090866089], + [-4.076159954071045, -6.732139587402344], + [-1.7493155002593994, 2.4179627895355225], + [-6.0660247802734375, -2.260183095932007], + [0.6601685881614685, 12.933878898620605], + [8.618557929992676, -2.335331916809082], + [-6.6778154373168945, -1.852113127708435], + [7.621590614318848, -2.149129629135132], + [-3.5287582874298096, 4.901395797729492], + [7.339687824249268, -3.1224658489227295], + [5.885961532592773, 7.760009288787842], + [1.4940582513809204, -6.993224143981934], + [3.23752760887146, -2.9255011081695557], + [2.6987764835357666, -3.760915517807007], + [5.573116779327393, 7.400031566619873], + [5.8666911125183105, 7.325972557067871], + [9.673762321472168, -2.3825271129608154], + [1.9993035793304443, 4.356936931610107], + [7.920155048370361, -2.10418701171875], + [-4.4712700843811035, -2.2085564136505127], + [0.10417649894952774, -1.3685503005981445], + [2.3069796562194824, -6.792834281921387], + [5.332680702209473, -1.1907812356948853], + [-2.4446423053741455, 1.8334213495254517], + [-2.080681085586548, -1.71830153465271], + [2.668365955352783, 6.49397611618042], + [-3.5897204875946045, -5.551777362823486], + [-5.0294108390808105, -1.2978917360305786], + [-0.3023565411567688, 6.610143184661865], + [-3.459232807159424, -1.851849913597107], + [5.1754326820373535, 7.22830867767334], + [-4.075562477111816, 3.658782482147217], + [2.5644195079803467, -6.682125568389893], + [3.7307872772216797, -7.272752285003662], + [3.901918649673462, -3.2658421993255615], + [-5.427114963531494, 4.905430793762207], + [1.2202417850494385, 0.07510042190551758], + [4.770387172698975, 2.0043416023254395], + [0.675706684589386, -1.1433676481246948], + [1.1378816366195679, 10.210989952087402], + [2.5125796794891357, -3.599733352661133], + [7.961154460906982, 9.4175386428833], + [3.2727432250976562, -2.9810123443603516], + [-3.040778875350952, -3.843285322189331], + [-1.5267044305801392, 0.6369739770889282], + [7.634424686431885, -2.1172096729278564], + [9.41727352142334, -2.3842098712921143], + [1.9983725547790527, -7.691629409790039], + [8.397383689880371, -2.4578936100006104], + [3.185760259628296, -4.4321746826171875], + [0.004620246589183807, 12.10555648803711], + [-2.3386008739471436, -3.6995174884796143], + [-4.635060787200928, 4.219581604003906], + [-3.591610908508301, -0.7873958349227905], + [-2.3177363872528076, 2.7744123935699463], + [-4.059915065765381, -1.4384790658950806], + [8.78030014038086, -2.4627864360809326], + [-2.090639591217041, 2.7161850929260254], + [5.582858562469482, 7.150545120239258], + [2.9000651836395264, -9.418441772460938], + [-3.9952194690704346, 5.026083946228027], + [0.13538289070129395, 9.790159225463867], + [7.805568218231201, -2.2145426273345947], + [3.8338024616241455, -3.327039957046509], + [-3.4698073863983154, 2.059736490249634], + [-2.3402860164642334, 1.293047547340393], + [-1.7659302949905396, 0.9770969152450562], + [-2.4464292526245117, -3.495265245437622], + [9.032456398010254, -2.3905928134918213], + [-1.3363758325576782, 2.0203258991241455], + [-2.2247486114501953, 0.7813889980316162], + [-3.6749155521392822, -5.994781017303467], + [-4.642752647399902, -7.781201362609863], + [7.4399590492248535, 8.854695320129395], + [2.79626202583313, -3.911588191986084], + [-2.909210443496704, -4.43662691116333], + [-1.8830795288085938, 1.3903586864471436], + [-4.4922661781311035, -6.642292499542236], + [4.694133281707764, -2.3506126403808594], + [3.0681276321411133, -4.320428848266602], + [-2.48209285736084, -2.1380889415740967], + [-4.126006126403809, -5.874004364013672], + [-3.9609506130218506, -6.231460094451904], + [4.013861656188965, 1.855719804763794], + [3.489224672317505, -5.037412643432617], + [-5.623720169067383, 8.325056076049805], + [-3.7286336421966553, -4.052309989929199], + [5.7309956550598145, 7.002470970153809], + [4.453570365905762, -2.7763216495513916], + [3.9561502933502197, -4.35392951965332], + [-4.032727241516113, -6.217609882354736], + [-5.300264835357666, -2.815110921859741], + [-4.696791172027588, -6.97563362121582], + [-3.4784815311431885, -6.340841770172119], + [7.127511024475098, -1.8132039308547974], + [-4.593255043029785, 3.612335443496704], + [-0.9395106434822083, 0.4719449281692505], + [-3.7319095134735107, 6.166475772857666], + [10.064432144165039, -2.3846471309661865], + [6.403355121612549, -5.682585716247559], + [3.8043363094329834, 1.601510763168335], + [-4.86099100112915, 4.408379077911377], + [0.183793842792511, 12.351402282714844], + [2.8314168453216553, -8.766334533691406], + [0.06550122052431107, -1.2316031455993652], + [-2.6180899143218994, 1.4452495574951172], + [-2.6259829998016357, -5.590349197387695], + [-6.111403942108154, -0.7041131258010864], + [-4.776404857635498, 1.7843290567398071], + [-4.079563140869141, -2.9076755046844482], + [5.462658882141113, -0.9012917876243591], + [2.4485867023468018, 4.133745193481445], + [1.915865182876587, 2.327838182449341], + [-5.8084797859191895, -0.8174931406974792], + [-4.271609306335449, -6.400853157043457], + [1.970808506011963, 1.9092622995376587], + [4.44813871383667, -7.878655433654785], + [-4.977046489715576, -6.716438293457031], + [8.192326545715332, -2.514854669570923], + [6.156033039093018, 7.691498756408691], + [-6.6040167808532715, 0.5626683235168457], + [6.706475257873535, -1.54544198513031], + [4.291309356689453, 5.931558609008789], + [1.5877610445022583, -7.874016284942627], + [1.4105722904205322, -0.05931726470589638], + [-3.028111696243286, -3.086441993713379], + [6.275340557098389, 7.978663444519043], + [-2.1215932369232178, 2.330275535583496], + [-2.473747968673706, 1.7258415222167969], + [1.6740535497665405, -0.2063131183385849], + [7.112148284912109, -4.678351879119873], + [0.5471380352973938, 10.992127418518066], + [-2.2718987464904785, 0.9618412256240845], + [6.745726108551025, -5.598610877990723], + [3.9716875553131104, -3.1923062801361084], + [6.937561511993408, -1.3870245218276978], + [-5.206386089324951, 4.333576202392578], + [2.4004714488983154, 5.070438385009766], + [-3.0821545124053955, 4.103353500366211], + [-4.852737903594971, -3.496516466140747], + [-4.716198444366455, -6.830343723297119], + [-4.996606349945068, 2.4199166297912598], + [2.286942720413208, 5.001404762268066], + [0.5114868879318237, -5.624972343444824], + [-4.095250606536865, 5.109900951385498], + [-0.4418759346008301, 3.244777202606201], + [7.210021018981934, 8.607312202453613], + [7.362795352935791, -2.826442003250122], + [-2.4996938705444336, -4.230857849121094], + [0.017290644347667694, 14.104255676269531], + [0.004576496779918671, 11.978950500488281], + [8.692742347717285, -2.342994451522827], + [0.12752777338027954, 9.688095092773438], + [7.119045257568359, -2.709218740463257], + [3.8338589668273926, 1.5907493829727173], + [-4.750176429748535, 4.577967643737793], + [8.360892295837402, -2.2898364067077637], + [0.21307367086410522, 10.447650909423828], + [9.306867599487305, -2.353407621383667], + [2.9169797897338867, -4.109283447265625], + [5.281440258026123, 6.778191566467285], + [-3.8172929286956787, -2.1328630447387695], + [3.0438339710235596, 6.304542541503906], + [3.6038739681243896, -5.694375038146973], + [0.0919138565659523, -1.2002893686294556], + [1.8919013738632202, -7.624096393585205], + [9.599084854125977, -2.4047353267669678], + [-7.3422160148620605, 2.1505184173583984], + [-4.5130181312561035, -5.795616149902344], + [4.69392204284668, -4.264828205108643], + [-2.3713440895080566, 1.6589841842651367], + [-4.896678924560547, 4.874720096588135], + [2.8964433670043945, 1.560144066810608], + [2.989795207977295, 1.3920526504516602], + [2.6344046592712402, 0.07505640387535095], + [7.158089637756348, -1.8862698078155518], + [6.417988300323486, -1.4346791505813599], + [3.163390874862671, -4.782998561859131], + [1.032031536102295, -6.580105781555176], + [-6.867338180541992, 8.060148239135742], + [-1.642317533493042, 2.2027971744537354], + [0.6224101781845093, 5.711249828338623], + [3.946120023727417, -7.6160759925842285], + [-4.661491870880127, -6.997976779937744], + [-2.841198682785034, -4.459100723266602], + [4.969951152801514, 7.465895652770996], + [10.092814445495605, -2.5483815670013428], + [2.415036201477051, -3.173656702041626], + [4.008457660675049, -3.3521382808685303], + [-3.3980534076690674, -3.307067394256592], + [-4.6031975746154785, -6.203464031219482], + [-2.3777377605438232, 2.124053716659546], + [0.22115248441696167, 11.222188949584961], + [-1.7670793533325195, 0.1927134394645691], + [-1.3095930814743042, 1.8588786125183105], + [9.433873176574707, -2.2966277599334717], + [1.787878155708313, -7.10904598236084], + [-3.0245888233184814, -5.080879211425781], + [-2.436399459838867, 1.6913485527038574], + [-2.74534273147583, -3.889629602432251], + [-0.9909765124320984, -1.4089932441711426], + [-3.117854595184326, -3.6713082790374756], + [-6.8467793464660645, 8.052854537963867], + [-2.0450472831726074, 2.3390591144561768], + [0.16798877716064453, 10.240312576293945], + [-7.069235324859619, -0.7069119215011597], + [-5.658020496368408, -1.1865251064300537], + [-3.893364191055298, 6.394784927368164], + [-4.377062797546387, -0.9028757810592651], + [-2.6190569400787354, 6.994689464569092], + [-0.11531240493059158, -1.8461339473724365], + [4.053305149078369, -7.126590251922607], + [-2.0040338039398193, -1.323627233505249], + [3.7409555912017822, -3.0306339263916016], + [3.9263927936553955, -7.829926013946533], + [-3.8200910091400146, -0.7497080564498901], + [1.0759673118591309, -0.45269709825515747], + [9.473470687866211, -2.348126173019409], + [2.4297547340393066, 2.100320816040039], + [-4.949292182922363, 4.892215728759766], + [2.226356267929077, 0.281366229057312], + [-7.980469226837158, 0.059166070073843], + [2.957585096359253, -3.6045286655426025], + [3.8581016063690186, -7.670821189880371], + [3.3835275173187256, -4.658373832702637], + [-4.214902877807617, 5.006052494049072], + [2.1156961917877197, 4.880348205566406], + [-2.226959466934204, -3.112683057785034], + [-0.16053998470306396, -1.6470893621444702], + [2.669480323791504, -3.781660318374634], + [1.9345455169677734, 5.67426872253418], + [5.481962203979492, -2.9569156169891357], + [3.63973331451416, -7.178676128387451], + [-3.227511167526245, 3.372884750366211], + [-0.0817369893193245, 9.528989791870117], + [6.804364204406738, -2.301321268081665], + [-2.0487515926361084, 2.634396553039551], + [1.909085988998413, -7.848993301391602], + [3.1075026988983154, -4.301826000213623], + [-3.7276642322540283, -2.2639577388763428], + [3.3550827503204346, 1.5742154121398926], + [-5.395300388336182, 5.93251895904541], + [4.9551920890808105, 7.667214393615723], + [2.906719923019409, -4.127409934997559], + [3.437380313873291, 1.3204275369644165], + [-4.811105251312256, 5.384231090545654], + [-0.5872842669487, 10.14035701751709], + [-2.465761184692383, -2.818063259124756], + [3.238431215286255, -10.058816909790039], + [3.1080210208892822, -4.090538024902344], + [1.9937565326690674, 0.160310298204422], + [3.592583417892456, -6.173037052154541], + [3.103408098220825, -3.835008382797241], + [3.1416547298431396, -6.181987762451172], + [3.2233335971832275, -7.847420692443848], + [3.309774160385132, -7.836935997009277], + [6.205695629119873, -3.1690690517425537], + [0.9307015538215637, -0.9074273109436035], + [-0.14702537655830383, -1.6517691612243652], + [-3.847390651702881, -2.5432636737823486], + [1.4954149723052979, 5.690494537353516], + [7.037884712219238, -1.6992356777191162], + [-1.6436326503753662, 1.2165757417678833], + [5.083806037902832, -5.588842391967773], + [8.143294334411621, -2.468461751937866], + [0.22777408361434937, 9.963434219360352], + [3.4809741973876953, -7.064995765686035], + [-1.6466234922409058, 0.604996919631958], + [1.8752515316009521, 2.892610788345337], + [2.83535099029541, -2.857142210006714], + [-1.168581247329712, 2.4220712184906006], + [2.4422361850738525, -8.259450912475586], + [3.442162275314331, -4.809682846069336], + [-3.1005260944366455, 6.0503950119018555], + [-7.217229843139648, -1.3932594060897827], + [-0.9806374907493591, -3.605975389480591], + [2.880215644836426, -4.0097126960754395], + [-2.0759243965148926, 2.472320318222046], + [4.20391321182251, -0.7457399964332581], + [-5.7301411628723145, 6.7088751792907715], + [3.740934133529663, -8.91136360168457], + [3.2970945835113525, -7.585997581481934], + [8.478506088256836, -2.3016576766967773], + [-2.550671339035034, 1.9765607118606567], + [-7.636402130126953, -0.016170386224985123], + [0.21111077070236206, 11.204439163208008], + [-4.369913578033447, -6.578015327453613], + [1.3266208171844482, -0.7932947874069214], + [1.3559088706970215, 4.039924621582031], + [-4.555444240570068, -6.331172943115234], + [-5.115202903747559, 0.04942983016371727], + [2.175706624984741, 1.0363445281982422], + [-5.096024513244629, -4.299715995788574], + [-2.016632080078125, 2.2837226390838623], + [1.7906556129455566, -3.87192702293396], + [-6.290837287902832, 2.8814806938171387], + [-6.829939842224121, 7.630189895629883], + [0.12484436482191086, 9.632808685302734], + [5.696539402008057, -1.1156989336013794], + [3.6424787044525146, -3.3142988681793213], + [7.670864105224609, -2.0828664302825928], + [2.8729660511016846, -7.732192516326904], + [-4.997217655181885, 3.934340238571167], + [2.6713006496429443, -2.617791175842285], + [-5.192404270172119, -1.972947120666504], + [0.6347381472587585, 8.026866912841797], + [0.019816569983959198, 11.884620666503906], + [-4.029575347900391, -3.138775110244751], + [-1.2677814960479736, 1.6475476026535034], + [2.593472719192505, -0.6020908355712891], + [-3.736294984817505, 0.3573572635650635], + [8.558218955993652, -2.315737009048462], + [-6.261437892913818, 7.538157939910889], + [-4.821534633636475, -6.425703048706055], + [0.30764448642730713, -0.6447612047195435], + [2.0523014068603516, -5.207148551940918], + [-6.590664863586426, 2.936367988586426], + [-0.9494336247444153, -1.8012663125991821], + [0.16762477159500122, 11.363665580749512], + [-2.0832743644714355, 2.5496084690093994], + [2.159919023513794, 4.641797065734863], + [3.7216241359710693, 0.7976658940315247], + [2.755945920944214, 5.904068470001221], + [0.38961929082870483, 11.111459732055664], + [3.5536606311798096, -2.6995227336883545], + [2.5192782878875732, -2.962947130203247], + [6.649302005767822, -2.7496330738067627], + [-4.777940273284912, 5.515526294708252], + [8.37079906463623, -2.4329264163970947], + [-4.8863654136657715, -6.368384838104248], + [3.372688055038452, 6.200183868408203], + [6.5029730796813965, 8.23128890991211], + [-2.7387120723724365, 1.3109256029129028], + [-0.037555284798145294, 10.039493560791016], + [1.7603707313537598, 10.237466812133789], + [0.4932789206504822, 0.635732889175415], + [0.3140372037887573, -0.43241065740585327], + [-6.386491298675537, 7.139548301696777], + [3.5512607097625732, -5.537812232971191], + [-3.732189893722534, -5.971879959106445], + [-5.16611909866333, -5.8325324058532715], + [7.4017744064331055, -1.8831394910812378], + [3.221885919570923, 1.7643557786941528], + [8.26866626739502, -2.339531183242798], + [4.553582668304443, -3.6343834400177], + [-4.381756782531738, -6.742227554321289], + [-2.1642439365386963, 2.5596070289611816], + [-1.8158771991729736, -4.050511360168457], + [-4.256439685821533, -1.978225588798523], + [3.365360736846924, -3.004375696182251], + [-2.9330124855041504, -4.836452484130859], + [-2.4482154846191406, 1.3805043697357178], + [-4.895684242248535, 5.845414161682129], + [-2.0992836952209473, 2.554387331008911], + [2.778320550918579, 6.569573402404785], + [3.7350025177001953, 1.608606219291687], + [5.574310779571533, 6.885727882385254], + [3.0672430992126465, -5.663203239440918], + [1.3169420957565308, 5.270834922790527], + [0.5298614501953125, -0.9935500621795654], + [3.6426854133605957, -6.529361724853516], + [-3.3588056564331055, 7.5544586181640625], + [1.9812886714935303, -6.9904093742370605], + [-0.29054564237594604, 8.913650512695312], + [-2.2762973308563232, 1.4644721746444702], + [2.4869768619537354, 1.6894804239273071], + [-5.595110893249512, -1.6250756978988647], + [-4.668710231781006, -3.2723472118377686], + [3.2284622192382812, -3.62893009185791], + [-2.23757004737854, 1.9632843732833862], + [-2.1573069095611572, -3.6064560413360596], + [-0.03601796180009842, 12.745697021484375], + [-2.969151496887207, -2.2804925441741943], + [3.3607523441314697, -1.2721611261367798], + [3.192624807357788, -2.735527276992798], + [-5.130509853363037, -4.168055534362793], + [-3.7448313236236572, -0.80597984790802], + [-0.5226123929023743, -1.880380630493164], + [-3.412179946899414, -5.607725143432617], + [-4.535695552825928, 2.4376585483551025], + [-6.580520153045654, -1.615583062171936], + [2.3803532123565674, -1.1015188694000244], + [9.197901725769043, -2.359511613845825], + [-4.401375770568848, 4.649068832397461], + [-6.402275562286377, 4.909979820251465], + [6.100592136383057, -4.1853108406066895], + [-0.09611798077821732, 12.950933456420898], + [4.193612098693848, -3.4212114810943604], + [2.9630022048950195, -4.665997505187988], + [6.548893451690674, 8.096723556518555], + [-2.6993937492370605, -5.020205020904541], + [-4.934173107147217, -2.31695556640625], + [-2.0624067783355713, 2.2002720832824707], + [0.8637731671333313, -0.8715057373046875], + [-5.117739200592041, 2.982365846633911], + [2.6385176181793213, 0.4008900821208954], + [9.851927757263184, -2.4777743816375732], + [3.7392842769622803, -8.58839225769043], + [7.65001916885376, -2.4204461574554443], + [1.8144127130508423, 3.9002909660339355], + [-2.0130350589752197, 2.147383689880371], + [2.776606798171997, -3.9422144889831543], + [0.4472338557243347, 10.739567756652832], + [1.9724233150482178, -0.18396398425102234], + [0.1147332713007927, 12.142494201660156], + [-3.9230964183807373, -0.22599321603775024], + [-2.164515733718872, -2.7850959300994873], + [4.027745723724365, 1.3668562173843384], + [8.46770191192627, -2.3427987098693848], + [-5.981642246246338, -0.3174512982368469], + [-4.3571038246154785, -7.004681587219238], + [-4.438692569732666, -6.73729944229126], + [4.528384208679199, -1.639701247215271], + [-4.220659255981445, 4.524760723114014], + [-1.646261215209961, -2.4560625553131104], + [-3.321087121963501, -5.799407482147217], + [3.7376034259796143, -3.201674461364746], + [-4.9418559074401855, -7.872377872467041], + [-5.031352996826172, -5.97137451171875], + [2.6408536434173584, 4.249747276306152], + [8.142542839050293, -2.4409618377685547], + [-2.639073371887207, -2.654204845428467], + [2.7912704944610596, -3.8914682865142822], + [5.963049411773682, 7.555614471435547], + [-0.03194428235292435, 13.176139831542969], + [2.2590219974517822, 1.0576456785202026], + [-5.396594524383545, 6.359792709350586], + [1.554992914199829, 2.109360933303833], + [-3.952099084854126, 5.536190032958984], + [8.80822467803955, -2.4483020305633545], + [1.093888759613037, -1.9447518587112427], + [0.08825557678937912, 12.517995834350586], + [9.311519622802734, -2.362095594406128], + [-5.081934928894043, -3.123533010482788], + [2.7530078887939453, -7.996322154998779], + [4.593948841094971, -4.023923873901367], + [-3.4931745529174805, -2.8528683185577393], + [3.264425277709961, -3.9846320152282715], + [-4.559800624847412, 5.291641712188721], + [2.4639217853546143, 0.38581740856170654], + [1.5843065977096558, 5.652711868286133], + [-0.4391374886035919, 5.337121963500977], + [0.10839419811964035, 8.865633964538574], + [-5.396912097930908, -2.534268617630005], + [1.1402194499969482, 4.924840927124023], + [7.679997444152832, -2.115007162094116], + [-5.970922946929932, 6.9039306640625], + [6.434711456298828, 7.916851043701172], + [3.2074992656707764, -4.580994606018066], + [2.7937309741973877, 6.7500810623168945], + [8.253222465515137, -2.1979191303253174], + [-0.33647096157073975, 5.2041497230529785], + [-6.7017059326171875, 7.713608264923096], + [-1.5662670135498047, 2.1491568088531494], + [2.348334789276123, 1.1387605667114258], + [1.9737164974212646, -7.093343734741211], + [10.230058670043945, -2.473431348800659], + [-3.853067636489868, 4.670015335083008], + [-6.5470356941223145, 7.891822338104248], + [-0.3174958825111389, 6.066493034362793], + [2.630652666091919, -3.2742178440093994], + [8.191641807556152, -2.2597036361694336], + [-2.1894397735595703, 2.3706371784210205], + [-2.2459561824798584, 2.229485273361206], + [9.544974327087402, -2.346191644668579], + [-4.11929178237915, -2.4462602138519287], + [-4.950302600860596, -6.568235397338867], + [1.2698581218719482, -7.274728298187256], + [0.5467976927757263, -5.619235038757324], + [-6.4757232666015625, 3.074826955795288], + [-4.095264434814453, -2.0432615280151367], + [-3.7333996295928955, -1.600734829902649], + [-2.275029420852661, 1.5782089233398438], + [6.210524082183838, 8.102010726928711], + [0.17510586977005005, 10.95411491394043], + [-5.136936664581299, 4.444807529449463], + [-4.237886905670166, -6.169740200042725], + [4.4845871925354, 1.9752672910690308], + [-4.502216815948486, 4.966553688049316], + [-4.892806053161621, 5.29206657409668], + [2.735119104385376, -2.470276117324829], + [-2.988999128341675, -3.1886565685272217], + [2.4872114658355713, 5.5584716796875], + [3.512206792831421, -6.786788463592529], + [-6.370133876800537, 0.9004039168357849], + [-0.6968895196914673, -0.626503050327301], + [1.9629237651824951, 5.960056304931641], + [-4.082768440246582, -0.28534215688705444], + [2.441167116165161, 2.3070266246795654], + [2.649315595626831, -7.609206676483154], + [-7.872103691101074, -0.23607420921325684], + [-3.0578761100769043, -5.066598415374756], + [-2.359858274459839, 2.5228028297424316], + [2.1025986671447754, -8.577033996582031], + [-5.603715419769287, -1.9848312139511108], + [-0.7271396517753601, -1.3435114622116089], + [-3.389132022857666, -0.585773229598999], + [-2.159787178039551, 0.4449709355831146], + [3.8561015129089355, -3.605839967727661], + [-4.2801055908203125, -7.232505798339844], + [-2.545898675918579, 1.8561639785766602], + [4.777585506439209, -7.214008331298828], + [1.9586400985717773, 3.208946466445923], + [4.095817565917969, -3.4405977725982666], + [2.113947629928589, -8.552678108215332], + [1.3356047868728638, -6.698534965515137], + [-4.619409561157227, 3.3398914337158203], + [1.1806401014328003, 6.037133693695068], + [6.898739337921143, 8.547835350036621], + [1.102041244506836, 3.55501389503479], + [-4.522139072418213, -3.553205728530884], + [-0.753345787525177, 0.3946085274219513], + [5.83713960647583, 7.90664005279541], + [-3.129425048828125, -3.5526373386383057], + [-3.7201318740844727, -6.120793342590332], + [8.017976760864258, -2.086684226989746], + [7.647354602813721, -2.150186061859131], + [-1.8042372465133667, 1.7708004713058472], + [-3.315849781036377, 3.9396932125091553], + [5.802848815917969, -1.128825068473816], + [5.093186378479004, -2.347881317138672], + [9.34378433227539, -2.3109664916992188], + [5.12652063369751, 7.5377092361450195], + [-4.305578708648682, -3.4684605598449707], + [0.14675021171569824, 9.733819961547852], + [-2.0293617248535156, 2.2480971813201904], + [5.776453495025635, -4.487082004547119], + [-0.3183530867099762, -1.7271678447723389], + [1.2606415748596191, -6.866035461425781], + [-0.7771328091621399, -0.37161239981651306], + [-2.369049072265625, 1.377935767173767], + [-6.168393611907959, 6.5376787185668945], + [10.476519584655762, -2.475832223892212], + [3.8544199466705322, -3.359046697616577], + [-3.218499183654785, -1.4804624319076538], + [-4.592483043670654, -6.294436931610107], + [-5.4495062828063965, -2.271536350250244], + [3.1763172149658203, -8.095770835876465], + [-4.131258487701416, -3.3212730884552], + [-0.4399053454399109, 10.50196361541748], + [5.760291576385498, 7.254059791564941], + [-1.6116440296173096, 0.3728283941745758], + [-1.459407091140747, 1.9150599241256714], + [2.848419189453125, -4.2615132331848145], + [4.2307658195495605, -4.37410831451416], + [0.1600995659828186, 0.31621184945106506], + [-2.130556583404541, 2.628255844116211], + [6.089545726776123, -1.9671252965927124], + [0.621331512928009, 0.30471745133399963], + [-6.370540142059326, 7.511135578155518], + [6.492434501647949, 7.911084175109863], + [-3.114610195159912, -4.005349159240723], + [8.527007102966309, -2.5430526733398438], + [3.6456458568573, -3.721580982208252], + [-5.910539627075195, 5.811990737915039], + [0.33541640639305115, -3.6028201580047607], + [-1.0258347988128662, 1.547638177871704], + [4.098353385925293, -3.768880605697632], + [3.92939829826355, 1.5498545169830322], + [5.668025493621826, -3.1484134197235107], + [-4.609964847564697, -6.928442001342773], + [5.135826587677002, -3.5199949741363525], + [10.632567405700684, -2.581151247024536], + [2.677347421646118, -4.358838081359863], + [3.366351366043091, 1.2950307130813599], + [-4.4498982429504395, -1.6226330995559692], + [6.92202615737915, -4.838871002197266], + [8.398591041564941, -2.2837631702423096], + [-2.5549190044403076, 2.1044514179229736], + [-6.465728282928467, -0.9914470911026001], + [-1.717991590499878, 2.5665910243988037], + [6.712605953216553, -1.386818289756775], + [-3.4248855113983154, -5.564266204833984], + [-7.175948619842529, -0.5706839561462402], + [2.7986197471618652, -5.5862226486206055], + [2.0311739444732666, 5.964920997619629], + [9.431397438049316, -2.4523799419403076], + [9.80435848236084, -2.3724489212036133], + [0.22242110967636108, 11.353937149047852], + [-2.5578176975250244, -3.6123945713043213], + [-0.06340903788805008, 12.758901596069336], + [4.7217488288879395, -0.4280882477760315], + [1.330359697341919, 1.493909239768982], + [-1.7026393413543701, -0.6318827867507935], + [3.170990467071533, -6.653953552246094], + [10.39303207397461, -2.5204594135284424], + [-4.749810695648193, -6.134733200073242], + [-5.404154300689697, 7.186064720153809], + [3.5318381786346436, 1.0936847925186157], + [2.896512031555176, -3.6490859985351562], + [7.660586357116699, -3.459307909011841], + [10.227472305297852, -2.364262342453003], + [0.373271107673645, -0.595694899559021], + [0.48866599798202515, -5.407409191131592], + [2.317824602127075, 0.43597352504730225], + [2.400668144226074, 4.96683406829834], + [11.641871452331543, -2.525285482406616], + [0.6930978298187256, 11.46599292755127], + [-0.4105285406112671, -0.4675576090812683], + [2.956789016723633, -4.599078178405762], + [3.245244026184082, -2.9853718280792236], + [5.877766132354736, 7.206400394439697], + [2.4519965648651123, 5.55695104598999], + [-2.9210665225982666, 6.651461124420166], + [7.533459186553955, -1.989943027496338], + [-2.1397712230682373, 6.409566879272461], + [-4.727264404296875, 4.517666816711426], + [-7.5763020515441895, 8.886442184448242], + [1.699544906616211, -6.297416687011719], + [-6.1387481689453125, 6.369267463684082], + [9.376038551330566, -2.40082049369812], + [1.2845087051391602, -0.35039830207824707], + [1.663790225982666, 0.8144633769989014], + [1.87156081199646, -7.081439971923828], + [-5.016571998596191, 5.171468257904053], + [0.8423908352851868, -5.963567733764648], + [8.94038200378418, -2.3833751678466797], + [5.035415172576904, 7.9707183837890625], + [-2.293059825897217, 2.103621482849121], + [8.661049842834473, -2.333279848098755], + [2.578594207763672, -8.975915908813477], + [8.972601890563965, -2.374877691268921], + [-6.3573126792907715, 1.2444263696670532], + [8.391779899597168, -2.258126735687256], + [8.1699800491333, -2.9611237049102783], + [9.049484252929688, -2.248831272125244], + [6.581965446472168, 7.9887847900390625], + [0.3283913731575012, 0.562225341796875], + [-5.232822418212891, -3.529057502746582], + [6.496532917022705, 8.319843292236328], + [-2.142216205596924, 2.2510523796081543], + [2.8857598304748535, 4.400723934173584], + [1.963301420211792, -7.903706073760986], + [-4.320400238037109, -5.9544677734375], + [-1.8125543594360352, 1.685149908065796], + [2.3326661586761475, 3.6523032188415527], + [-6.634973049163818, 6.825077056884766], + [-7.0519328117370605, 8.08221435546875], + [11.437432289123535, -2.4550693035125732], + [5.728137493133545, -4.362048149108887], + [7.0272908210754395, -2.920152425765991], + [6.66303825378418, -1.5461363792419434], + [-3.860673666000366, -1.06211519241333], + [4.584876537322998, 6.968388557434082], + [3.798565626144409, -7.611093521118164], + [-2.2145333290100098, 2.666832685470581], + [0.23328477144241333, 11.167329788208008], + [-4.557682514190674, -5.948526382446289], + [-0.2347230315208435, 5.79825496673584], + [4.644216060638428, 6.802628517150879], + [2.9244964122772217, -9.089982986450195], + [-5.531451225280762, 6.551587104797363], + [-2.1686360836029053, 2.472816228866577], + [0.009781472384929657, 9.612405776977539], + [-0.029048331081867218, 9.915586471557617], + [-4.330955505371094, 4.720726013183594], + [7.9459452629089355, -2.225374460220337], + [3.8498334884643555, -5.670151710510254], + [2.2537174224853516, 5.62945556640625], + [3.196843385696411, -4.524625778198242], + [3.541231632232666, -7.922311305999756], + [2.058328628540039, 4.659514904022217], + [-0.015981145203113556, 12.436838150024414], + [5.668773174285889, -1.1404746770858765], + [3.7668063640594482, -3.61529278755188], + [-5.235483646392822, -0.015144411474466324], + [-2.1793055534362793, -2.053101062774658], + [-2.721059560775757, -4.9419708251953125], + [-3.285512924194336, 0.057450708001852036], + [-5.999478816986084, 5.313251495361328], + [-3.3878743648529053, -5.8317694664001465], + [-4.28208065032959, -6.246269226074219], + [3.762815475463867, -3.315347909927368], + [6.67001485824585, 8.127497673034668], + [8.789702415466309, -2.268630027770996], + [-7.285074710845947, -0.5140314102172852], + [-6.557986259460449, 7.643546104431152], + [-6.402763843536377, 0.1040048599243164], + [-5.0899271965026855, 5.811372756958008], + [2.650879383087158, 3.033596992492676], + [-3.519979238510132, 4.778521537780762], + [-1.5947130918502808, -0.6553438901901245], + [-3.107292413711548, -2.469576835632324], + [2.9107320308685303, -3.9777097702026367], + [3.0594935417175293, -3.891397714614868], + [10.889238357543945, -2.5219123363494873], + [-4.152336597442627, -6.663989067077637], + [-2.542828321456909, 2.1097776889801025], + [0.1158946081995964, 0.3512096107006073], + [3.0416014194488525, -4.711869239807129], + [1.1534487009048462, 0.8308628797531128], + [-4.693187713623047, -2.710289716720581], + [-0.33629971742630005, 10.115884780883789], + [8.383332252502441, -2.5560965538024902], + [1.4975758790969849, 6.619890213012695], + [-0.46997061371803284, -0.5371273756027222], + [5.130062580108643, -4.923494338989258], + [-4.1933441162109375, -6.71685266494751], + [0.07885532826185226, 12.286205291748047], + [4.392350673675537, 6.597005844116211], + [-0.027412183582782745, 11.920082092285156], + [-2.4672508239746094, 1.1758041381835938], + [5.888338565826416, 8.048911094665527], + [-1.261771321296692, 0.5150861740112305], + [-4.308938026428223, -1.97635018825531], + [4.163161754608154, 1.7716535329818726], + [0.671570897102356, 0.6899166107177734], + [9.16254711151123, -2.553210496902466], + [1.371725082397461, -7.233214855194092], + [-2.410907745361328, -3.358832359313965], + [2.465970516204834, 0.89055335521698], + [-0.44904083013534546, -1.9187654256820679], + [8.50426959991455, -2.307739019393921], + [-4.7371015548706055, -5.764404296875], + [-3.530349016189575, -3.516350030899048], + [-0.2792486548423767, -1.7149766683578491], + [-4.9695963859558105, 7.816633224487305], + [-2.0586438179016113, 1.1918836832046509], + [-3.740861177444458, 2.229039192199707], + [3.4242894649505615, -5.356333255767822], + [-4.053419589996338, 0.8810160160064697], + [-2.30194354057312, 0.804550290107727], + [-2.5333731174468994, -1.3819618225097656], + [3.3127191066741943, 6.57338285446167], + [4.4376630783081055, 6.699803352355957], + [-2.114339590072632, 2.30378794670105], + [-7.0799479484558105, 0.009050961583852768], + [0.19953536987304688, 10.547829627990723], + [2.4170234203338623, 4.164478302001953], + [-1.7179335355758667, -3.468513250350952], + [7.019555568695068, -1.6964104175567627], + [3.428034543991089, -4.094820976257324], + [-3.9843451976776123, -0.8860732913017273], + [1.3932075500488281, -0.8158650398254395], + [1.8029944896697998, -7.512787818908691], + [-4.99182653427124, 7.4673638343811035], + [-2.017219305038452, 2.4192752838134766], + [-6.168957233428955, -1.3435572385787964], + [8.528321266174316, -2.4578936100006104], + [8.667771339416504, -2.551135301589966], + [-1.0022900104522705, 0.1651214361190796], + [0.12974625825881958, 9.974772453308105], + [0.2763173282146454, 1.3857430219650269], + [-1.8143184185028076, 1.8209835290908813], + [4.67152738571167, 6.9526214599609375], + [2.3153903484344482, 2.0143039226531982], + [0.012441270053386688, 12.660259246826172], + [-4.454041957855225, -4.654199600219727], + [3.5749223232269287, -6.004795074462891], + [0.18782085180282593, 11.791324615478516], + [2.83039927482605, -7.699052810668945], + [2.9643828868865967, -3.69089412689209], + [1.9297280311584473, 5.153151512145996], + [-6.272933483123779, 0.0804375410079956], + [-2.5489487648010254, 1.6329487562179565], + [0.17136627435684204, 11.214407920837402], + [-2.5497536659240723, -0.8827618956565857], + [8.65066146850586, -1.9724886417388916], + [-4.7029266357421875, 3.310839891433716], + [-0.04359287768602371, 13.477433204650879], + [5.397475719451904, 6.711962699890137], + [3.576443672180176, -8.102682113647461], + [-6.102654933929443, -1.971091866493225], + [-2.598581075668335, 1.8407492637634277], + [3.942654848098755, 1.4314903020858765], + [8.784079551696777, -2.322114944458008], + [3.7229321002960205, 1.4911327362060547], + [2.229220390319824, 0.3162294328212738], + [-2.846404552459717, 6.538424491882324], + [5.638034343719482, -1.1140285730361938], + [6.4001970291137695, -1.3999885320663452], + [2.594130754470825, -9.363332748413086], + [-3.6944611072540283, -6.253385066986084], + [-2.4477570056915283, 1.877323865890503], + [-4.450140476226807, 6.329156398773193], + [2.80497670173645, 0.845890462398529], + [2.483121156692505, -3.9458394050598145], + [13.23850154876709, -2.81748628616333], + [3.441725254058838, -8.580404281616211], + [3.0598084926605225, -4.333681106567383], + [8.736702919006348, 10.122241020202637], + [-7.063109874725342, 8.280394554138184], + [-4.405133247375488, -3.0232512950897217], + [-4.667813301086426, -1.098423957824707], + [5.514657497406006, 7.966876029968262], + [-6.487808704376221, 7.535482406616211], + [-4.711445331573486, -6.622186660766602], + [-1.5629411935806274, 5.297032356262207], + [2.207895517349243, 0.9768689870834351], + [2.35009503364563, -0.6224946975708008], + [0.0700443908572197, 9.75543212890625], + [-2.558546543121338, 1.639690637588501], + [6.827544689178467, 8.581846237182617], + [4.506401538848877, -3.517767906188965], + [-7.561046123504639, -0.6569286584854126], + [8.06192398071289, -2.0366640090942383], + [-2.391139268875122, 1.9828113317489624], + [10.01134204864502, -2.3725368976593018], + [-2.211517572402954, 1.5213677883148193], + [1.11536705493927, -6.493659973144531], + [3.816549062728882, -3.3622970581054688], + [10.1497802734375, -2.388076066970825], + [2.365379571914673, -5.367436408996582], + [6.4356913566589355, -4.747837543487549], + [3.6886942386627197, -2.8882880210876465], + [0.17005091905593872, 12.248580932617188], + [9.186514854431152, -2.4002845287323], + [-2.4326889514923096, -0.07397305965423584], + [0.2916722297668457, 0.12511619925498962], + [-2.6343905925750732, 2.082103967666626], + [3.8543460369110107, -8.288482666015625], + [6.8073201179504395, 8.297271728515625], + [5.244332790374756, -4.319119453430176], + [-4.403065204620361, -2.9493634700775146], + [9.748457908630371, -2.399590015411377], + [-4.629058361053467, 3.0437521934509277], + [-0.22535985708236694, 0.3022354245185852], + [3.2002346515655518, -4.431720733642578], + [0.2651132345199585, 10.72086238861084], + [1.2401726245880127, -6.216299533843994], + [0.2279108762741089, -1.2760685682296753], + [-3.3294756412506104, 5.216036319732666], + [4.3260111808776855, -6.389678955078125], + [2.850402593612671, -4.0566301345825195], + [-3.604008674621582, -1.7637020349502563], + [5.675576686859131, -7.225564956665039], + [0.07470893114805222, 11.469182968139648], + [-6.629132270812988, 7.375723838806152], + [1.8654403686523438, -8.670665740966797], + [3.7789347171783447, -2.808576822280884], + [0.0021669790148735046, 9.688617706298828], + [6.980929851531982, 8.396903038024902], + [-5.251962184906006, 6.012625694274902], + [-2.1920888423919678, 1.4381240606307983], + [6.952081203460693, -2.511350393295288], + [-3.894685983657837, -6.035205364227295], + [-4.820027828216553, -7.088191032409668], + [3.1369712352752686, -8.509593963623047], + [-4.907541751861572, 5.440513610839844], + [-4.344912052154541, -1.9415959119796753], + [8.314906120300293, -2.5351827144622803], + [-0.015176601707935333, 12.373098373413086], + [7.127431392669678, -1.4633512496948242], + [-0.026532717049121857, 12.91891098022461], + [-5.478129863739014, 5.005153656005859], + [1.9760138988494873, 3.0027987957000732], + [-5.40641450881958, -0.027697209268808365], + [6.8599162101745605, -2.7691705226898193], + [7.419438362121582, -2.4962141513824463], + [8.436812400817871, -2.296915292739868], + [5.4691948890686035, -2.665193796157837], + [6.508520603179932, -1.486651062965393], + [-1.8833107948303223, 1.5644385814666748], + [0.18083685636520386, 11.093286514282227], + [-0.4155873656272888, 9.851476669311523], + [-3.652970790863037, 4.750758171081543], + [0.047246091067790985, 8.987760543823242], + [6.3305840492248535, -5.697063446044922], + [-3.5510241985321045, 0.5093690156936646], + [2.240370035171509, -6.382564544677734], + [6.256036281585693, -1.2030919790267944], + [6.7290143966674805, 8.202348709106445], + [3.607105016708374, 5.252709865570068], + [3.6173341274261475, 1.6476441621780396], + [-4.607565402984619, 7.783717632293701], + [0.6617828011512756, 1.2114475965499878], + [2.0821115970611572, 5.324300765991211], + [-7.211010932922363, 8.358942031860352], + [-1.1737539768218994, -3.653923749923706], + [5.129432201385498, -3.0681722164154053], + [-3.21359920501709, -1.1123093366622925], + [-3.116619825363159, 4.993722438812256], + [-2.6934337615966797, 1.4822973012924194], + [0.41398710012435913, 10.737109184265137], + [-0.8060198426246643, 1.813847541809082], + [-3.703904867172241, -3.335557222366333], + [-6.752722263336182, 7.71131706237793], + [-2.3740012645721436, 1.8223562240600586], + [-4.5269856452941895, -6.663838863372803], + [-5.0083770751953125, -7.595451831817627], + [3.0195043087005615, 0.557486355304718], + [3.1400556564331055, -7.373944282531738], + [3.639265775680542, 1.116355299949646], + [3.2846314907073975, -6.982624053955078], + [-3.8988449573516846, -6.145145416259766], + [-4.627614498138428, -7.1032280921936035], + [4.247357368469238, -3.5435993671417236], + [-4.175347805023193, -6.202902793884277], + [3.303004503250122, -3.784337282180786], + [-6.9276604652404785, 8.374258041381836], + [2.7830777168273926, -9.43216323852539], + [4.159707546234131, -4.440206050872803], + [-3.402385950088501, 3.4937024116516113], + [7.51011848449707, -2.5316579341888428], + [-2.087808847427368, 2.383819818496704], + [3.997368097305298, 6.356712341308594], + [7.631453514099121, -2.1498541831970215], + [4.001083850860596, -2.9552671909332275], + [3.4586405754089355, -6.865400314331055], + [2.7251458168029785, -3.829442262649536], + [-3.996502161026001, 5.112297534942627], + [4.6423420906066895, -1.823363184928894], + [9.004929542541504, -2.3265154361724854], + [1.052369475364685, 11.642383575439453], + [-3.504218816757202, 3.703559637069702], + [5.941333770751953, 7.644353866577148], + [-5.428997039794922, 5.786925315856934], + [0.1380733847618103, 0.693021297454834], + [-2.0264997482299805, 1.8583256006240845], + [0.2898752689361572, 11.010696411132812], + [5.63411283493042, 7.248309135437012], + [-0.02352876216173172, 12.404714584350586], + [-4.413946628570557, -6.848718643188477], + [4.9918317794799805, 6.717328071594238], + [-3.095590114593506, -4.164958953857422], + [-2.6320111751556396, 1.5137109756469727], + [-2.087826728820801, -0.16348636150360107], + [5.753872394561768, -4.56132698059082], + [-0.025655068457126617, 0.8721142411231995], + [-3.2467129230499268, -5.7942705154418945], + [4.162072658538818, -3.607783079147339], + [-3.6170785427093506, -5.0806989669799805], + [4.105855464935303, -3.9482858180999756], + [-3.816009759902954, -5.872292995452881], + [8.669075012207031, -2.443336248397827], + [-0.006235308945178986, 12.910726547241211], + [-1.6085363626480103, -0.8974796533584595], + [4.222805023193359, -0.1074775904417038], + [0.23202383518218994, 0.4394850730895996], + [-0.3890620470046997, -1.3393434286117554], + [0.12661737203598022, 10.050407409667969], + [-0.24832826852798462, -1.76457679271698], + [0.18909603357315063, 10.7793550491333], + [-0.9667883515357971, 0.9407397508621216], + [5.1534953117370605, 7.9100565910339355], + [-0.9364538192749023, 1.9842644929885864], + [-1.0689579248428345, -2.872009515762329], + [3.6389617919921875, -7.504123210906982], + [-3.9822170734405518, -2.970176935195923], + [-4.409590244293213, -4.621842861175537], + [0.9340359568595886, 11.464213371276855], + [7.351714611053467, 8.86578369140625], + [-0.12213192135095596, -1.6920527219772339], + [-2.2814176082611084, 2.251146078109741], + [-2.345857620239258, -4.003193378448486], + [3.4173104763031006, 6.21601676940918], + [3.9797260761260986, -8.122304916381836], + [8.17939567565918, -2.217695951461792], + [4.299241542816162, -3.8325753211975098], + [1.851609230041504, -7.059345245361328], + [-0.34785088896751404, -1.271173357963562], + [-4.473407745361328, 7.591501712799072], + [-7.607127666473389, 0.12247288227081299], + [-0.17457255721092224, -1.4525688886642456], + [-3.2228944301605225, 1.5715612173080444], + [3.088559627532959, -4.310952663421631], + [-2.174769639968872, 2.7856194972991943], + [2.1926491260528564, 0.07727968692779541], + [5.045083522796631, -0.7704758048057556], + [0.06117921322584152, 12.21171760559082], + [9.74775505065918, -2.4922475814819336], + [-2.6798582077026367, 1.0776387453079224], + [-5.347158432006836, 6.107607841491699], + [-4.849714279174805, -6.288743495941162], + [3.859724283218384, -3.63861346244812], + [3.6304357051849365, -7.395721435546875], + [0.23423177003860474, 11.770620346069336], + [-5.274435043334961, 5.616824626922607], + [9.427591323852539, -2.3781819343566895], + [6.100379467010498, -1.256308674812317], + [3.492993116378784, -5.269021034240723], + [4.389372825622559, 1.9955180883407593], + [-3.547065258026123, 4.576916694641113], + [-2.383718729019165, 1.3808531761169434], + [-1.651533603668213, 6.701068878173828], + [0.993101179599762, -4.362805366516113], + [-7.0428056716918945, 3.9849231243133545], + [-1.9293134212493896, 0.8977820873260498], + [-1.2476661205291748, 1.5125350952148438], + [6.335207462310791, -5.588131904602051], + [3.1346094608306885, -8.583173751831055], + [5.180444240570068, -0.2269802689552307], + [-4.670594215393066, 4.46129035949707], + [1.2518479824066162, 1.4263142347335815], + [-1.9791362285614014, 0.46712547540664673], + [4.046698093414307, -3.498809337615967], + [4.436817646026611, -1.2683124542236328], + [9.163355827331543, -2.4974377155303955], + [7.497950077056885, -2.0315322875976562], + [0.5484400987625122, -1.2636445760726929], + [8.863160133361816, -2.4639475345611572], + [-4.526258945465088, -2.6996653079986572], + [-4.493792533874512, -1.865360140800476], + [-5.1917500495910645, -3.5273149013519287], + [-2.503178834915161, 1.8912159204483032], + [-2.0835931301116943, 2.023397207260132], + [1.858414888381958, 2.3884644508361816], + [-1.9667705297470093, 2.191736936569214], + [1.873568058013916, -5.779404163360596], + [2.421522378921509, -7.850802898406982], + [-3.78922176361084, 5.931722640991211], + [2.1770846843719482, 4.282622814178467], + [-5.085281848907471, -1.5127991437911987], + [0.8809494376182556, 6.866053104400635], + [5.248382091522217, 0.5056041479110718], + [5.819525241851807, 7.212398529052734], + [-7.400722026824951, 0.29332399368286133], + [-1.6897026300430298, 2.2397496700286865], + [-4.889381408691406, -0.5443861484527588], + [3.9228365421295166, 1.6964927911758423], + [-4.686852931976318, 2.380535840988159], + [3.2419817447662354, -4.6436848640441895], + [2.848126173019409, -3.9574294090270996], + [5.140842437744141, 7.335898399353027], + [5.865268230438232, 7.231413841247559], + [3.478541851043701, -9.430973052978516], + [-2.194807529449463, -4.001725673675537], + [-5.7885212898254395, 0.7985460758209229], + [3.0512053966522217, -6.074982166290283], + [0.0030270740389823914, 11.92508316040039], + [-0.043690867722034454, 13.265029907226562], + [-3.094968318939209, -2.6450228691101074], + [-6.257693767547607, 7.161182403564453], + [-3.934490442276001, 6.080536842346191], + [6.842495441436768, 8.495369911193848], + [-6.599443435668945, 8.049394607543945], + [-1.3855912685394287, 1.625586986541748], + [1.8418006896972656, 6.025287628173828], + [0.5618378520011902, -1.0159894227981567], + [1.9194039106369019, -3.5848138332366943], + [5.142581462860107, -0.9995448589324951], + [-2.2913012504577637, 2.257723569869995], + [0.6356256604194641, -0.8658847808837891], + [-2.070639133453369, 2.474442720413208], + [8.690763473510742, -2.2954471111297607], + [4.094614505767822, 1.7296158075332642], + [-0.7669961452484131, -3.7391417026519775], + [-1.5437004566192627, -1.5690462589263916], + [-1.6666531562805176, 2.0166397094726562], + [-4.749699115753174, -6.937491416931152], + [8.092134475708008, -2.2214391231536865], + [2.2207682132720947, 1.7770408391952515], + [-0.8419758677482605, 5.593138694763184], + [-7.538783073425293, -0.16002202033996582], + [-3.188873529434204, -3.9573583602905273], + [2.171882390975952, 5.595944404602051], + [-4.054956912994385, -3.6325433254241943], + [-1.653639316558838, -1.1922625303268433], + [-5.089266777038574, 5.074763298034668], + [6.860533237457275, 8.365449905395508], + [8.286760330200195, -2.172335386276245], + [-0.05464143306016922, 13.022382736206055], + [-3.048041820526123, 1.6004012823104858], + [-1.9987592697143555, 2.5841891765594482], + [-3.4335732460021973, -3.886479139328003], + [7.031830310821533, -2.76806378364563], + [-3.21767258644104, -1.653679609298706], + [2.214749574661255, 2.402909994125366], + [2.380096912384033, 4.25779914855957], + [3.899238109588623, -3.653770685195923], + [3.034963369369507, -8.014408111572266], + [6.379196643829346, -1.3969477415084839], + [-0.8030908703804016, 3.1086928844451904], + [5.246982097625732, 6.601566314697266], + [0.2796359658241272, 10.946154594421387], + [-5.69584321975708, -1.4125378131866455], + [7.048050880432129, 8.589642524719238], + [3.422208547592163, 5.9584269523620605], + [-6.089655876159668, -0.2537887692451477], + [7.446916103363037, -2.265850305557251], + [-4.029847145080566, 0.7864148020744324], + [2.9232707023620605, 4.321302890777588], + [-4.407575607299805, -6.447185516357422], + [2.5859735012054443, 0.6952061653137207], + [3.1633946895599365, -9.329856872558594], + [-4.778696537017822, 4.394898891448975], + [-3.6525261402130127, -5.896728038787842], + [-5.695855140686035, 6.565363883972168], + [2.845017194747925, -4.016167163848877], + [-2.11860728263855, -3.8972935676574707], + [-4.58493709564209, -7.5636701583862305], + [3.0076396465301514, -8.748409271240234], + [6.079291820526123, -4.517210006713867], + [9.131842613220215, -2.4281671047210693], + [2.1486165523529053, -8.128501892089844], + [-5.681755542755127, -1.3579025268554688], + [-1.1569262742996216, 6.326982498168945], + [0.35365748405456543, -0.6209316849708557], + [7.210287570953369, -2.7995998859405518], + [3.853461980819702, -3.802438497543335], + [0.019151441752910614, 12.311437606811523], + [-1.579762578010559, -3.847599506378174], + [-6.754148006439209, 6.651784896850586], + [-6.0668721199035645, 0.019338127225637436], + [-5.447885990142822, 4.722801208496094], + [1.6965478658676147, -6.386928558349609], + [-6.347946643829346, -0.005070570856332779], + [-2.5105323791503906, 2.1423537731170654], + [-1.0494279861450195, -0.6410715579986572], + [4.6874165534973145, -2.0651347637176514], + [1.7809114456176758, 4.91770076751709], + [-4.612029552459717, 5.734236717224121], + [1.1449248790740967, 1.6298168897628784], + [-5.996319770812988, 8.608917236328125], + [1.1090619564056396, 10.52061653137207], + [1.498199462890625, 3.4906136989593506], + [-2.180543899536133, 2.443964958190918], + [-4.354496479034424, -6.964447021484375], + [3.31988787651062, 1.02826726436615], + [7.132307529449463, 9.128595352172852], + [3.745830535888672, -4.157069206237793], + [3.4603688716888428, -7.533555507659912], + [-4.982956409454346, 4.791567802429199], + [1.9961841106414795, 5.604215621948242], + [-4.5401763916015625, 4.1347880363464355], + [-0.19513654708862305, -1.3391412496566772], + [-6.693832874298096, -0.6379595994949341], + [1.4551275968551636, 1.1874066591262817], + [-4.575071811676025, 5.515439987182617], + [0.2419634461402893, 11.905838012695312], + [2.4894142150878906, 5.875140190124512], + [2.4971821308135986, -7.7320451736450195], + [-0.6385088562965393, -0.8852227330207825], + [3.063100576400757, -5.420487880706787], + [2.9823801517486572, -4.215579986572266], + [0.027266912162303925, 9.13705062866211], + [3.9277164936065674, -3.378361940383911], + [2.7777187824249268, 5.305643081665039], + [-0.604208767414093, 0.3466818034648895], + [3.984661340713501, -3.702754259109497], + [1.1000512838363647, 0.585169792175293], + [-5.656165599822998, 6.220636367797852], + [-3.6824951171875, 6.346318244934082], + [4.65591287612915, -1.2852798700332642], + [10.636996269226074, -2.4734528064727783], + [-2.2633121013641357, 2.449965238571167], + [0.5847817659378052, 4.289263725280762], + [-2.396766424179077, 1.7621060609817505], + [0.3092491626739502, 0.6806440949440002], + [-0.09999252110719681, -1.8540310859680176], + [-2.793473720550537, -2.4028096199035645], + [3.009366273880005, -4.141036033630371], + [7.014585018157959, -2.486726760864258], + [-7.077630519866943, 8.46689224243164], + [2.939626455307007, -4.041346073150635], + [2.3766729831695557, -3.6897244453430176], + [1.7783128023147583, 6.171669006347656], + [0.1705145239830017, 0.5854415893554688], + [2.487957000732422, -8.983034133911133], + [-0.07278711348772049, 9.115358352661133], + [-1.5180485248565674, 1.4255939722061157], + [-4.954266548156738, 8.345791816711426], + [3.151273250579834, -4.367691516876221], + [2.1707615852355957, 3.5705599784851074], + [1.5667481422424316, 4.74621057510376], + [-2.473130226135254, 1.8597675561904907], + [2.9045956134796143, 0.3350353538990021], + [-2.257749557495117, 2.4085636138916016], + [1.8488829135894775, -8.428979873657227], + [3.913633346557617, -7.840752124786377], + [-1.151572346687317, 1.8611973524093628], + [-0.91921067237854, -3.544188976287842], + [-6.1089911460876465, -1.1976062059402466], + [0.07481419295072556, 9.810479164123535], + [4.593958377838135, -3.278663396835327], + [9.00356388092041, -2.6685731410980225], + [-2.6833431720733643, 2.3682096004486084], + [-2.119119644165039, 2.691803216934204], + [1.4127464294433594, -7.2164998054504395], + [0.33002668619155884, 10.841897964477539], + [-1.257826566696167, 1.7369850873947144], + [8.184924125671387, -2.2263855934143066], + [-2.864107847213745, 2.1247355937957764], + [-1.4390742778778076, 1.3880739212036133], + [-4.095749855041504, -6.687808513641357], + [8.578852653503418, -2.54620361328125], + [1.550571322441101, 2.04129958152771], + [-2.206422805786133, 2.8850362300872803], + [-1.5307304859161377, -0.5125634074211121], + [-2.3508825302124023, 1.0424288511276245], + [0.4185805320739746, 10.669387817382812], + [-5.677567958831787, 7.816361427307129], + [-7.012241363525391, 8.301607131958008], + [-1.5974687337875366, 2.21030592918396], + [5.255727291107178, -1.1365208625793457], + [-3.4777629375457764, -3.247199296951294], + [-2.021554708480835, -3.207313299179077], + [-3.3062798976898193, -0.7845464944839478], + [2.231900691986084, -7.519152641296387], + [2.5860655307769775, -8.314760208129883], + [6.680507659912109, -4.518006324768066], + [3.284407377243042, -4.983015060424805], + [3.4156441688537598, -7.541955471038818], + [3.4723918437957764, -3.077523946762085], + [-4.225444316864014, -5.82826042175293], + [5.800569534301758, 7.772709846496582], + [3.4298388957977295, -4.499622821807861], + [5.462195873260498, 6.68234920501709], + [7.036082744598389, 8.55323600769043], + [-4.522750377655029, 3.830256223678589], + [2.5805442333221436, -7.536915302276611], + [1.2561283111572266, -7.233347415924072], + [2.9401748180389404, -3.8465025424957275], + [6.720758438110352, 8.241467475891113], + [-2.414907693862915, 1.5174616575241089], + [-5.2636260986328125, 5.514710903167725], + [3.121373414993286, -4.159460067749023], + [-8.074790000915527, -0.09975755214691162], + [11.45154094696045, -2.569814443588257], + [-4.879654884338379, 5.4827728271484375], + [7.964138507843018, -2.472169876098633], + [3.027977228164673, -4.44940185546875], + [2.472269296646118, 0.531302273273468], + [-4.982021808624268, -1.0362207889556885], + [2.3312714099884033, -8.542888641357422], + [-6.409049987792969, 7.424687385559082], + [-6.168671131134033, 6.6550517082214355], + [3.068746328353882, -4.349478721618652], + [0.26455485820770264, 11.574214935302734], + [3.1918892860412598, -3.9957327842712402], + [-5.081588268280029, 3.940537214279175], + [-5.989743709564209, -0.5355473160743713], + [4.245997428894043, -3.9921178817749023], + [3.1307437419891357, -2.2562735080718994], + [-4.399746417999268, 4.229046821594238], + [0.1771250069141388, -1.2983254194259644], + [-5.278071403503418, 5.482909679412842], + [-4.218916416168213, -1.4238581657409668], + [5.885809421539307, 7.94573974609375], + [-5.346917152404785, 1.5743577480316162], + [1.8937625885009766, -7.7359819412231445], + [-3.114243268966675, -3.8625593185424805], + [3.5792903900146484, -3.1581175327301025], + [2.420952796936035, 2.771862030029297], + [-1.8116669654846191, 1.4588446617126465], + [-3.03013277053833, -4.866781711578369], + [-3.8145272731781006, 3.904309034347534], + [-2.3243799209594727, 2.380079984664917], + [1.6795252561569214, -6.573678016662598], + [3.1041014194488525, -4.44325065612793], + [6.99587345123291, -1.9735933542251587], + [1.1165735721588135, -6.590222358703613], + [0.11890941113233566, 4.751622200012207], + [6.682887554168701, 8.322511672973633], + [-2.424739122390747, 2.1476285457611084], + [0.5320804715156555, 10.773599624633789], + [-0.10004711896181107, 10.124521255493164], + [-4.04256010055542, 5.6786208152771], + [-4.8076300621032715, -0.9808816909790039], + [-3.7757318019866943, -5.94013786315918], + [-3.2142655849456787, 2.1043949127197266], + [0.3164787292480469, 11.800971984863281], + [-2.315789222717285, 2.1850852966308594], + [1.385272741317749, -2.489173650741577], + [8.624564170837402, -2.1981141567230225], + [-6.659071922302246, -0.12382519245147705], + [2.1389546394348145, -8.403260231018066], + [3.3160994052886963, -7.977477550506592], + [3.223790407180786, -3.281276226043701], + [8.194598197937012, -2.490583658218384], + [-2.5256576538085938, 1.7115055322647095], + [-0.41608762741088867, -0.6401826739311218], + [2.8329105377197266, -2.070514678955078], + [11.210487365722656, -2.4957656860351562], + [7.717520236968994, -2.013827085494995], + [-3.471339464187622, -4.149880886077881], + [-4.435399055480957, -6.509281635284424], + [4.20211124420166, -7.96752405166626], + [-6.559777736663818, 0.659344494342804], + [-6.937053203582764, -1.6081792116165161], + [5.249472618103027, -2.1208720207214355], + [0.045864515006542206, 11.921672821044922], + [3.0058753490448, -6.9352827072143555], + [0.2847147583961487, 11.748189926147461], + [-4.5328450202941895, -6.4078688621521], + [3.4916651248931885, 1.3092948198318481], + [-2.15637469291687, 2.787820816040039], + [-0.010540194809436798, 9.81776237487793], + [-6.271614074707031, 7.168947696685791], + [-0.016653545200824738, 12.604217529296875], + [-6.142220973968506, 1.170167088508606], + [-4.167731761932373, -6.657119274139404], + [0.022013477981090546, 12.118766784667969], + [9.567107200622559, -2.3353991508483887], + [1.903101921081543, -2.9165291786193848], + [-4.8000407218933105, -4.628332614898682], + [1.1092177629470825, 0.7523906230926514], + [3.1203105449676514, -7.7615251541137695], + [3.725867986679077, -3.3634719848632812], + [1.3118839263916016, -7.090649127960205], + [8.861939430236816, -2.627103090286255], + [0.5556930303573608, -0.771288275718689], + [3.4386789798736572, -6.739333629608154], + [9.243668556213379, -2.3973495960235596], + [1.907660961151123, 0.38944923877716064], + [3.654139757156372, 1.9642285108566284], + [5.474812030792236, 7.871644020080566], + [0.6854329109191895, 0.32969576120376587], + [-0.09613616019487381, 13.855700492858887], + [2.724734306335449, -3.0636351108551025], + [-5.509130001068115, 6.210434913635254], + [-6.8564066886901855, 7.964166641235352], + [3.554213285446167, -4.923194885253906], + [-4.663862228393555, 7.235929489135742], + [0.16780775785446167, 11.499428749084473], + [-1.4561316967010498, 1.8157252073287964], + [2.722012758255005, -7.528388023376465], + [-3.882441282272339, -2.0825231075286865], + [-4.644918918609619, -3.234332323074341], + [0.1145135685801506, 9.866495132446289], + [2.9158003330230713, 5.955478191375732], + [-6.027717113494873, 0.41829735040664673], + [-2.5433666706085205, 1.643614649772644], + [-5.588371753692627, 4.34309720993042], + [-5.929928779602051, 7.036109447479248], + [-2.2043120861053467, 2.544203519821167], + [3.323381185531616, -3.033064603805542], + [1.6788791418075562, 1.287976861000061], + [-1.5854681730270386, -1.3426271677017212], + [-2.4592843055725098, 0.8711376190185547], + [-2.489915609359741, 1.428758978843689], + [-3.108283758163452, -3.7084991931915283], + [3.0224013328552246, 6.350467681884766], + [1.1515629291534424, 7.629309177398682], + [1.632673978805542, -1.615577220916748], + [-4.638255596160889, -6.3126397132873535], + [10.960108757019043, -2.5119457244873047], + [2.7081520557403564, -2.724231719970703], + [3.0550718307495117, 8.460305213928223], + [2.7270171642303467, -9.737910270690918], + [2.4780306816101074, -7.865808963775635], + [3.5495200157165527, -2.7462313175201416], + [-6.890446186065674, 7.21036958694458], + [-5.088212013244629, -0.9574080109596252], + [5.278690814971924, 7.0055389404296875], + [10.20238971710205, -2.3507211208343506], + [6.181507587432861, 7.609745979309082], + [1.0427684783935547, -0.2723245322704315], + [-2.6482560634613037, -3.412571430206299], + [3.583829164505005, -7.6978888511657715], + [4.100374698638916, 6.553739070892334], + [-3.7146153450012207, 0.13220590353012085], + [0.1891043782234192, 10.371545791625977], + [-2.06964373588562, -3.813462018966675], + [1.1351666450500488, -0.37106865644454956], + [3.9458887577056885, 1.6261309385299683], + [-2.1046464443206787, 2.0916123390197754], + [-4.724120616912842, -2.922516345977783], + [-4.7939019203186035, 7.480791091918945], + [1.7976088523864746, 3.836620569229126], + [3.4513189792633057, 0.8443176746368408], + [3.2518298625946045, -4.484926223754883], + [-2.6574032306671143, 2.416875123977661], + [2.7056562900543213, 4.130709648132324], + [-3.7712159156799316, -0.06795495748519897], + [10.432766914367676, -2.4883196353912354], + [-5.239108562469482, 0.8898909091949463], + [-7.122865200042725, 8.326984405517578], + [-7.332873821258545, -0.45575857162475586], + [6.781966686248779, 8.325115203857422], + [-2.4644696712493896, 1.6114214658737183], + [-2.0852301120758057, 2.4684836864471436], + [-0.020921416580677032, 9.210793495178223], + [0.21262359619140625, 10.59844970703125], + [-0.7369784712791443, 1.7052829265594482], + [3.182910203933716, -2.7142534255981445], + [-4.665226936340332, 3.287865400314331], + [-3.184474468231201, -3.9553797245025635], + [-5.0590291023254395, -3.0688729286193848], + [1.5464946031570435, 5.8989081382751465], + [-4.917327404022217, -6.403712749481201], + [4.369683265686035, 7.127676963806152], + [0.7516134977340698, -0.6113265752792358], + [7.881838321685791, -2.5979831218719482], + [3.4412808418273926, 0.6317992806434631], + [-2.6576600074768066, -1.3028491735458374], + [8.328288078308105, -2.2371368408203125], + [0.5018972754478455, 11.418952941894531], + [-0.03634197264909744, 13.318037986755371], + [-2.081775188446045, 2.4837920665740967], + [4.633010387420654, -2.8042094707489014], + [-2.8735268115997314, -0.11645030975341797], + [-4.663735389709473, -7.458138942718506], + [0.0015038177371025085, 12.274988174438477], + [-6.455165386199951, -0.018233779817819595], + [3.3279707431793213, -3.2328855991363525], + [-4.8346848487854, -5.907147407531738], + [3.440509557723999, -7.8932013511657715], + [2.964488983154297, -4.193456172943115], + [1.1272094249725342, -6.746549606323242], + [1.1345219612121582, -0.7951785922050476], + [-4.8218536376953125, -1.1839691400527954], + [7.574698448181152, -2.8170700073242188], + [3.997347116470337, -6.068944931030273], + [-7.38707160949707, 0.34156739711761475], + [3.6937873363494873, -7.896297931671143], + [3.4439680576324463, -6.061323165893555], + [-2.3929145336151123, 1.8331935405731201], + [-4.512638092041016, -5.293926239013672], + [-2.0638322830200195, 2.633423328399658], + [2.108602523803711, 5.447996616363525], + [1.8730688095092773, 1.8872958421707153], + [-2.8257572650909424, -2.9481611251831055], + [-3.9274203777313232, -2.814795732498169], + [-1.2171250581741333, 1.5742965936660767], + [-4.147043228149414, -2.8183493614196777], + [-2.7544641494750977, -4.904655933380127], + [1.5056030750274658, -3.247295618057251], + [6.172727108001709, -3.263714551925659], + [3.9194207191467285, -7.178131580352783], + [1.7814226150512695, 3.225116014480591], + [-0.0443352535367012, 9.415623664855957], + [-0.27148815989494324, 0.38987287878990173], + [-4.572022914886475, -6.6113762855529785], + [-1.855438470840454, -3.573298215866089], + [0.18273335695266724, 10.301309585571289], + [1.5632662773132324, 2.9320671558380127], + [5.42758321762085, -2.3609344959259033], + [-2.5176496505737305, 0.9268664121627808], + [0.20938724279403687, 11.778205871582031], + [3.5750339031219482, -3.6564717292785645], + [4.146458148956299, -3.582423448562622], + [-2.177457571029663, 0.651604413986206], + [1.2976900339126587, -7.182932376861572], + [-0.011511750519275665, 12.167770385742188], + [-1.884482502937317, 1.5586535930633545], + [3.1624038219451904, -4.444659233093262], + [11.169965744018555, -2.5840086936950684], + [-2.5555062294006348, -1.298511028289795], + [-1.5061358213424683, -0.335340291261673], + [0.18403691053390503, -1.5330501794815063], + [-4.843125343322754, -7.254680633544922], + [-2.272280693054199, 3.031080484390259], + [3.287341356277466, -3.601536273956299], + [1.2233517169952393, 5.376198768615723], + [2.68113112449646, -9.510599136352539], + [0.17906159162521362, 11.323172569274902], + [-0.09490019828081131, -1.6886550188064575], + [-3.3081517219543457, -3.3933002948760986], + [8.332777976989746, -2.3138861656188965], + [-2.801166296005249, 5.166110992431641], + [-3.055267572402954, 2.841442108154297], + [1.8155395984649658, -7.298943996429443], + [3.5090532302856445, -6.351479530334473], + [1.1276286840438843, -0.8434416055679321], + [3.6755928993225098, 1.1607784032821655], + [-6.969518184661865, 7.958845138549805], + [0.1640276312828064, 9.027120590209961], + [-4.5407257080078125, -7.096851348876953], + [-3.5667343139648438, -0.11130350828170776], + [-5.684335708618164, -1.9752181768417358], + [-3.9420230388641357, -5.733514785766602], + [0.1830800175666809, 10.982828140258789], + [-2.7473766803741455, -5.329829692840576], + [-4.671016216278076, -7.752501010894775], + [7.334277629852295, -1.9943087100982666], + [3.909313440322876, -7.177240371704102], + [5.976559162139893, -1.8825606107711792], + [3.5237603187561035, -3.6026270389556885], + [1.9443364143371582, -7.334376811981201], + [10.630242347717285, -2.5483648777008057], + [-5.037459850311279, -3.4041075706481934], + [5.25294303894043, -3.9510719776153564], + [-2.409330368041992, 2.023906707763672], + [9.4147310256958, -2.3434841632843018], + [5.222391605377197, 7.419552803039551], + [-3.9822678565979004, -4.399577617645264], + [-4.908263206481934, -4.308477878570557], + [1.1427042484283447, 2.3822712898254395], + [2.320923089981079, 3.6314525604248047], + [2.961219072341919, -4.152463436126709], + [3.208622694015503, -6.361543655395508], + [0.07512747496366501, 8.443697929382324], + [-2.4367144107818604, 2.191930055618286], + [-2.231489419937134, 1.7659668922424316], + [-1.9860926866531372, 2.0069663524627686], + [0.1668054461479187, 10.133338928222656], + [-2.5705068111419678, -3.0290567874908447], + [2.271937608718872, -8.261260986328125], + [-0.004816122353076935, 11.120348930358887], + [-3.6114912033081055, 4.32831335067749], + [0.1620998978614807, 10.012715339660645], + [3.5246689319610596, -7.0950164794921875], + [-6.215022563934326, -0.7868887782096863], + [-0.06459421664476395, 13.566070556640625], + [10.875968933105469, -2.5801148414611816], + [2.4846408367156982, -7.731753349304199], + [6.70009183883667, 8.180157661437988], + [-8.064570426940918, -0.13771355152130127], + [2.31075119972229, 5.661043643951416], + [6.56716251373291, -5.784091472625732], + [-4.189732074737549, -6.200387477874756], + [-3.7530951499938965, 5.3981709480285645], + [2.9418187141418457, -10.087137222290039], + [3.257681131362915, -4.577596664428711], + [5.813986301422119, -3.213832139968872], + [2.5189058780670166, -7.531379699707031], + [0.4543491005897522, 9.928495407104492], + [-1.0735691785812378, -3.6672987937927246], + [3.3388891220092773, -3.5009548664093018], + [-4.0875468254089355, -2.6321892738342285], + [-1.5948446989059448, 2.263472318649292], + [1.1810951232910156, -0.3581947982311249], + [8.048626899719238, -2.157864809036255], + [0.2941194176673889, 12.213038444519043], + [6.871821403503418, -1.6105799674987793], + [8.024669647216797, -1.831395149230957], + [2.3605000972747803, 0.3284933567047119], + [-2.498317241668701, 1.7341651916503906], + [2.447160005569458, 6.612817764282227], + [0.1285334825515747, 9.901121139526367], + [5.542410373687744, -5.49500036239624], + [8.966744422912598, -2.327547311782837], + [3.247868061065674, -3.5427582263946533], + [2.841858148574829, -4.001362323760986], + [6.353073596954346, 8.273252487182617], + [2.2339394092559814, -8.61803150177002], + [0.7404300570487976, -0.6504104733467102], + [5.7430739402771, -6.0425567626953125], + [-5.2491841316223145, -7.155956745147705], + [2.955744504928589, -8.754338264465332], + [4.7355475425720215, -3.708519458770752], + [7.837994575500488, -2.1476025581359863], + [-0.37593168020248413, -0.6576330661773682], + [4.558191299438477, 7.282878398895264], + [2.673903703689575, 6.170164108276367], + [0.12757015228271484, 10.223566055297852], + [3.628570318222046, 1.933624505996704], + [0.035347871482372284, 11.83757495880127], + [-4.675548553466797, -7.186450004577637], + [3.0901901721954346, -3.9258527755737305], + [9.011998176574707, -2.4350473880767822], + [-2.258253335952759, 1.9231774806976318], + [-4.430202484130859, 6.9879655838012695], + [0.20438510179519653, 10.575328826904297], + [3.628159284591675, 1.5129486322402954], + [3.0369248390197754, -4.216429710388184], + [8.15282917022705, -2.1363399028778076], + [7.150345802307129, -5.843425750732422], + [-0.6114916801452637, -2.2156429290771484], + [1.9707462787628174, -7.761383056640625], + [9.813958168029785, -2.398848533630371], + [9.725696563720703, -2.367272138595581], + [-0.012663312256336212, 9.574661254882812], + [0.22183853387832642, 10.872583389282227], + [-4.325566291809082, -6.466858863830566], + [-3.9419822692871094, -3.979729175567627], + [1.6626720428466797, 2.623962163925171], + [9.357329368591309, -2.2953550815582275], + [-4.477227210998535, -0.5612261295318604], + [-0.05793095380067825, 13.278493881225586], + [-2.255662679672241, -4.159518718719482], + [2.7446820735931396, 0.16561338305473328], + [1.9558236598968506, -7.279503345489502], + [-0.6786510944366455, -2.037280559539795], + [-0.03235841542482376, 9.572699546813965], + [4.048299312591553, 7.546626091003418], + [9.77894115447998, -2.4402363300323486], + [-1.5099515914916992, -3.9977593421936035], + [5.489953517913818, -1.6342116594314575], + [-2.6628925800323486, -5.011371612548828], + [-3.140294313430786, 3.1968448162078857], + [10.643007278442383, -2.454686403274536], + [3.5149455070495605, 5.738935470581055], + [3.497556447982788, -7.418268203735352], + [3.2909905910491943, -4.0140204429626465], + [3.0668187141418457, 0.8329764604568481], + [7.032333850860596, -1.6710573434829712], + [9.102935791015625, -2.338301420211792], + [-1.9201490879058838, 2.166140556335449], + [2.3828136920928955, -6.457036972045898], + [3.1475820541381836, -2.866520643234253], + [3.9426167011260986, -7.7950439453125], + [0.20839697122573853, 10.381155014038086], + [2.363821029663086, -7.818159103393555], + [-3.626619577407837, -0.6689850091934204], + [-3.6386501789093018, -2.245976448059082], + [2.8915107250213623, -4.4730658531188965], + [2.669651746749878, 4.077637672424316], + [-3.916567087173462, -1.3679449558258057], + [0.941096842288971, 10.508432388305664], + [-2.909554958343506, -4.765530109405518], + [2.616199254989624, 7.578291893005371], + [-0.06327296048402786, 12.246089935302734], + [-1.3314619064331055, 1.1766831874847412], + [-4.328470230102539, 6.950097560882568], + [8.851804733276367, -2.3863141536712646], + [6.15678596496582, 7.943507194519043], + [-4.525508403778076, -2.2061240673065186], + [4.912936687469482, -3.503835916519165], + [-1.1155180931091309, 1.5543395280838013], + [-6.9270853996276855, -0.4718232750892639], + [2.7015016078948975, -7.166464805603027], + [-6.7148756980896, 1.3881398439407349], + [8.164185523986816, -2.3258719444274902], + [-2.1522104740142822, 0.46011149883270264], + [-0.2618018090724945, -1.7077702283859253], + [6.745391368865967, 8.146221160888672], + [1.1943186521530151, 2.5721652507781982], + [10.138358116149902, -2.588841438293457], + [-4.534284591674805, 5.013761043548584], + [6.262878894805908, 7.838190078735352], + [3.536432981491089, -5.987340927124023], + [10.157862663269043, -2.3364171981811523], + [2.3469457626342773, 3.5457704067230225], + [-1.9565707445144653, 1.5977303981781006], + [-3.891801595687866, 5.036346435546875], + [-1.344181776046753, 2.1745340824127197], + [2.622897148132324, -8.87612247467041], + [9.625417709350586, -2.344515085220337], + [8.26944351196289, -2.283534288406372], + [-5.705169200897217, -3.649261236190796], + [6.1852030754089355, 8.00186824798584], + [-5.00909423828125, -4.16372013092041], + [-5.488812446594238, 6.310595512390137], + [0.23296475410461426, 11.521032333374023], + [-3.2414042949676514, -2.272873878479004], + [-4.527444839477539, -6.491483211517334], + [-4.051948547363281, -6.643662452697754], + [2.9121453762054443, 1.551548719406128], + [8.026185035705566, -2.3689329624176025], + [-3.097050428390503, -5.0714569091796875], + [1.2197134494781494, -0.39802610874176025], + [7.852786540985107, -2.080815553665161], + [-2.2861413955688477, 0.300346314907074], + [-2.3867082595825195, 2.164130687713623], + [-5.471184253692627, 6.282971382141113], + [6.007406711578369, -1.3033372163772583], + [-4.112904071807861, 8.140782356262207], + [-2.873342275619507, 5.360354423522949], + [3.2401010990142822, -4.149035930633545], + [-2.1770265102386475, 2.7519731521606445], + [2.941118001937866, -4.0682268142700195], + [-2.5389840602874756, 1.633961796760559], + [-4.4489850997924805, 4.441404342651367], + [-3.835252523422241, -3.817239761352539], + [6.2559943199157715, -4.932350158691406], + [3.6083502769470215, -3.4982845783233643], + [4.1379475593566895, 1.799085021018982], + [-7.430308818817139, -0.6625714302062988], + [0.7322953343391418, -6.508852005004883], + [4.646630764007568, -3.2610809803009033], + [3.060062885284424, -4.2288055419921875], + [4.135914325714111, -4.3850531578063965], + [-5.7657341957092285, 6.228415489196777], + [3.158709764480591, -6.62759256362915], + [1.5073983669281006, 1.7219728231430054], + [-3.2835333347320557, -4.910553932189941], + [-2.258417844772339, 2.3644769191741943], + [0.4774220585823059, -1.0658559799194336], + [6.6050920486450195, 7.961329460144043], + [2.858886480331421, 1.1917065382003784], + [-4.287164688110352, -5.918838024139404], + [6.4249396324157715, 8.122615814208984], + [10.232222557067871, -2.4157888889312744], + [-1.7390302419662476, 2.2381250858306885], + [-3.4563825130462646, -4.280241012573242], + [-5.259965419769287, 6.044931411743164], + [0.19262641668319702, 10.3370943069458], + [-4.421525478363037, -5.987493991851807], + [-2.053938150405884, -1.4364721775054932], + [2.759045124053955, -3.573598623275757], + [6.407359600067139, -3.9038617610931396], + [-5.645348072052002, 6.947790145874023], + [-4.121257305145264, -1.7015546560287476], + [2.9799835681915283, -9.636021614074707], + [-2.32633638381958, 2.325120210647583], + [-1.032554268836975, -0.5370405316352844], + [8.963114738464355, -2.497131109237671], + [-2.968534231185913, 3.816290855407715], + [5.762378215789795, 8.377730369567871], + [-0.5488093495368958, 6.3352556228637695], + [-6.045483112335205, 6.616547584533691], + [7.9730143547058105, -2.7215747833251953], + [-1.7984943389892578, -3.1643216609954834], + [-4.6134867668151855, 5.513216495513916], + [3.41778302192688, -3.2699573040008545], + [3.073688507080078, -4.341479301452637], + [2.696723461151123, -8.521318435668945], + [-5.207886219024658, 1.049822449684143], + [2.9140617847442627, -4.487547874450684], + [-0.08130986243486404, 10.927484512329102], + [-4.235020637512207, 4.645749092102051], + [-0.01412159949541092, 12.145625114440918], + [3.6529390811920166, -7.208279132843018], + [2.108032464981079, 4.3533148765563965], + [2.210369825363159, 5.128995895385742], + [11.083256721496582, -2.470402956008911], + [0.09688162058591843, 12.588056564331055], + [5.825740814208984, 7.428281784057617], + [3.8895950317382812, 1.825419306755066], + [-6.439747333526611, -1.4364738464355469], + [-5.731917858123779, 6.5504608154296875], + [5.888929843902588, -5.866497993469238], + [-0.01668686419725418, 10.013400077819824], + [-0.37002792954444885, -2.0386803150177], + [1.5915536880493164, 2.085254430770874], + [5.057236194610596, -4.438924312591553], + [3.8614234924316406, -3.4309098720550537], + [3.9752109050750732, -3.1880104541778564], + [-3.8152730464935303, 4.937445640563965], + [-2.3280868530273438, 3.0679492950439453], + [7.871087551116943, -2.3782944679260254], + [5.82096529006958, -2.1188926696777344], + [2.3073248863220215, 3.8356540203094482], + [2.956362009048462, 6.689326286315918], + [3.7143125534057617, -7.380842685699463], + [-4.374147415161133, -6.486112117767334], + [2.2811479568481445, 5.380674362182617], + [-0.6497541666030884, 1.4574114084243774], + [-4.149637699127197, -1.3010468482971191], + [4.625919818878174, 6.196401596069336], + [-2.417475700378418, 2.190459966659546], + [3.187932014465332, -4.0457940101623535], + [-2.504096031188965, 1.658552646636963], + [-4.814185619354248, -0.9546492099761963], + [0.2700209617614746, 11.224571228027344], + [2.7535743713378906, -8.63675594329834], + [0.7059332728385925, -0.032252904027700424], + [2.8244054317474365, -3.7056055068969727], + [-6.005342483520508, 5.486166000366211], + [-4.652418613433838, -3.38702130317688], + [0.713124692440033, 11.025537490844727], + [3.3744876384735107, -3.3560256958007812], + [5.817249774932861, 8.685616493225098], + [0.9442042708396912, 0.29122835397720337], + [3.0807671546936035, -4.230660915374756], + [-3.4892661571502686, -4.183874130249023], + [-1.5080918073654175, 1.9531255960464478], + [3.714257001876831, 6.840508937835693], + [3.553175687789917, 1.5112570524215698], + [2.8204891681671143, -3.970371723175049], + [1.4864532947540283, 2.865461587905884], + [-4.563762664794922, -6.331865310668945], + [3.7108211517333984, -6.076267242431641], + [5.795682907104492, -3.8048386573791504], + [-2.6148083209991455, -5.52607536315918], + [8.804763793945312, -2.4163568019866943], + [1.9649584293365479, 2.7563483715057373], + [-1.0869474411010742, 1.3879362344741821], + [7.739036560058594, -6.348389625549316], + [-4.834385395050049, -6.86883544921875], + [3.1455729007720947, -3.6151180267333984], + [3.0298542976379395, 5.715328216552734], + [1.6803629398345947, -2.5100221633911133], + [6.420679092407227, -0.9111790060997009], + [-6.765018939971924, 0.0688474178314209], + [2.978177785873413, -4.191736221313477], + [4.616821765899658, -1.9248212575912476], + [3.2844669818878174, 1.8785487413406372], + [3.5186731815338135, 6.130491256713867], + [4.469095706939697, -3.428407907485962], + [-2.576392412185669, 2.4317033290863037], + [3.002709150314331, -3.894794225692749], + [-6.740225315093994, -1.811427354812622], + [-5.152767658233643, -0.6164641380310059], + [3.197024345397949, -3.375234365463257], + [-4.5092644691467285, -6.363764762878418], + [-6.266952037811279, 7.192108154296875], + [0.022243671119213104, 9.357772827148438], + [1.007529377937317, -0.5970261096954346], + [6.283751010894775, -1.263017177581787], + [2.3478844165802, -1.293948769569397], + [-3.8498120307922363, -3.784075975418091], + [5.910984516143799, -1.1874969005584717], + [-0.6076014637947083, 0.9109959006309509], + [4.855771541595459, -3.309579372406006], + [2.887758493423462, -4.106345176696777], + [-5.25518274307251, -3.419245481491089], + [-4.127077102661133, -6.15321159362793], + [3.493971109390259, -3.497042179107666], + [2.39259934425354, -3.4778363704681396], + [-1.3123767375946045, -3.3264408111572266], + [4.811424732208252, -6.146176815032959], + [-2.7695558071136475, -0.31728821992874146], + [0.13102155923843384, 9.926315307617188], + [-6.163206577301025, 7.083112716674805], + [0.13543224334716797, 11.279584884643555], + [2.0651423931121826, -6.68333625793457], + [2.8718760013580322, -3.825484037399292], + [6.815922260284424, -6.07917594909668], + [-3.5498197078704834, -4.1525444984436035], + [4.794318199157715, -3.2261416912078857], + [-5.548598766326904, 7.307550430297852], + [7.894038200378418, -2.2253353595733643], + [-0.017668969929218292, 9.403538703918457], + [2.9811718463897705, -4.6909942626953125], + [5.462177753448486, -4.355852127075195], + [1.1837315559387207, -7.200493812561035], + [7.219385147094727, 8.862201690673828], + [-3.737745523452759, 3.373091459274292], + [-2.49381422996521, 1.937509536743164], + [-2.3160605430603027, 2.0479817390441895], + [-4.747430324554443, -7.762180805206299], + [5.227695941925049, 7.237326622009277], + [-5.095139503479004, -1.8614754676818848], + [1.454038381576538, 4.926124095916748], + [4.715842247009277, -1.138353705406189], + [3.9527947902679443, -3.4908387660980225], + [0.4934765696525574, -1.2200764417648315], + [2.1155688762664795, 5.391363143920898], + [-3.675926446914673, -5.055181980133057], + [-2.0288467407226562, 2.533344030380249], + [-4.008036136627197, -5.257791519165039], + [-6.0941643714904785, 6.580073833465576], + [-2.5044667720794678, 1.7274293899536133], + [-2.866130828857422, 0.23049396276474], + [3.844618320465088, 1.225274920463562], + [7.9015116691589355, -2.55871844291687], + [-4.37080717086792, -4.066283702850342], + [5.16875696182251, -4.447386741638184], + [3.3355844020843506, -4.211495399475098], + [-3.944455146789551, -5.730594635009766], + [-2.5509238243103027, 2.1074202060699463], + [0.7599372267723083, -0.8750755190849304], + [2.028862237930298, 1.1548439264297485], + [3.763469934463501, -3.428507089614868], + [-1.931700587272644, 1.2740261554718018], + [7.40000581741333, 8.85383129119873], + [-1.9507137537002563, 1.5929710865020752], + [-0.8499886393547058, 0.7707071304321289], + [1.2922978401184082, -0.45599955320358276], + [-1.736443281173706, 2.2735249996185303], + [5.7627949714660645, 7.377990245819092], + [-6.430426120758057, 7.867157936096191], + [1.5285699367523193, -7.378251075744629], + [2.220520257949829, 4.909722328186035], + [1.3234343528747559, 5.5076398849487305], + [-0.04868245869874954, 9.270405769348145], + [5.203805446624756, -0.6587972640991211], + [2.918480634689331, 5.365011215209961], + [-4.158481121063232, -0.9527676701545715], + [10.588942527770996, -2.4375810623168945], + [5.724489688873291, -2.9747016429901123], + [-2.895195245742798, -3.8225104808807373], + [5.084228992462158, -4.226762771606445], + [-0.014783211052417755, 13.16478157043457], + [1.7114673852920532, -8.428260803222656], + [2.03141188621521, -7.706315517425537], + [-3.68607497215271, -3.8649954795837402], + [-5.378550052642822, -0.16393399238586426], + [-4.243382453918457, -6.898633003234863], + [3.1433002948760986, -4.464147567749023], + [5.348581314086914, -1.1285687685012817], + [3.9663302898406982, -7.3153533935546875], + [7.424661636352539, 9.055444717407227], + [0.040938667953014374, 11.6802339553833], + [-1.3423237800598145, 1.5351618528366089], + [4.174187183380127, -0.5104734301567078], + [0.5105894207954407, -0.9069472551345825], + [0.664993166923523, 0.6803626418113708], + [5.945316791534424, -1.4200661182403564], + [-1.8552265167236328, 1.3156936168670654], + [-0.4614526331424713, -2.0680980682373047], + [1.8938753604888916, -6.626197814941406], + [2.8785178661346436, -2.601750612258911], + [2.150275230407715, 4.898423671722412], + [-2.3051140308380127, 1.5017169713974], + [-2.388728141784668, 1.7755907773971558], + [-4.648601055145264, -1.118920922279358], + [2.7968971729278564, -9.421302795410156], + [-0.0014072731137275696, 12.16988754272461], + [-5.856875896453857, 6.9618072509765625], + [0.18958145380020142, 10.544025421142578], + [0.09738355129957199, 9.398478507995605], + [3.731105327606201, 7.164108753204346], + [6.65164041519165, 8.399255752563477], + [2.177159309387207, 4.181120872497559], + [-0.06250680238008499, 13.021648406982422], + [-6.83281946182251, 0.26079070568084717], + [6.679027557373047, 8.062702178955078], + [7.411863803863525, -5.914028644561768], + [-0.007614202797412872, 12.925919532775879], + [-2.6131746768951416, -3.4611763954162598], + [3.123187780380249, -4.305362701416016], + [-3.80068039894104, 2.2571167945861816], + [2.499699592590332, -7.718984127044678], + [-0.019905753433704376, 12.628683090209961], + [-4.322112560272217, 5.688156604766846], + [-5.277477741241455, 4.1241912841796875], + [-1.6584855318069458, -3.4737212657928467], + [-5.122242450714111, 6.136770248413086], + [-8.40844440460205, 0.19708776473999023], + [7.717198371887207, -2.042632818222046], + [4.099912166595459, -3.0310237407684326], + [5.069578647613525, 6.427295207977295], + [3.4175803661346436, -8.418127059936523], + [-2.9723451137542725, -4.896491050720215], + [-3.6508171558380127, 5.70433235168457], + [8.506744384765625, -2.390159845352173], + [0.7467705011367798, -0.6910359859466553], + [6.4940409660339355, -3.507842540740967], + [6.774853706359863, -2.179870843887329], + [4.275408744812012, -2.9756691455841064], + [3.152113914489746, -5.06295108795166], + [2.7876007556915283, 0.13734523952007294], + [-0.46755385398864746, 10.099020004272461], + [-5.444461345672607, 3.2814266681671143], + [3.247068166732788, -4.525803565979004], + [2.6257691383361816, 3.7724878787994385], + [-2.6621994972229004, 2.280604600906372], + [-3.0533013343811035, 0.8532652258872986], + [0.07170551270246506, 9.809205055236816], + [-2.9730117321014404, -1.5021697282791138], + [-3.916710615158081, 3.779170274734497], + [-2.7859408855438232, -1.4502769708633423], + [-2.9516441822052, -4.138127326965332], + [3.055515766143799, -4.140499114990234], + [-5.817540168762207, 6.446663856506348], + [-4.245290279388428, -5.592384338378906], + [7.571953773498535, -5.285874366760254], + [9.80199909210205, -2.508877992630005], + [0.2781750559806824, 11.169610023498535], + [-2.445521354675293, -4.115204334259033], + [4.688318729400635, -3.8543636798858643], + [-2.129887104034424, 2.512765884399414], + [-2.7702510356903076, -4.7841715812683105], + [-3.8299946784973145, 5.771603584289551], + [2.9139935970306396, 3.8159101009368896], + [1.6863579750061035, 1.965157389640808], + [-1.4341859817504883, 1.8251919746398926], + [8.41164493560791, -2.352691173553467], + [2.1310770511627197, -6.467406749725342], + [-3.4389095306396484, -5.401336669921875], + [2.7320001125335693, 1.3986808061599731], + [-4.832961559295654, -3.386723518371582], + [-3.493293046951294, -3.0919787883758545], + [-4.957065105438232, 0.2265409231185913], + [9.180889129638672, -2.431652307510376], + [1.562368631362915, -6.430596351623535], + [8.443958282470703, -2.2926442623138428], + [-0.4275088906288147, 0.6580675840377808], + [9.159895896911621, -2.3989315032958984], + [0.022976689040660858, 12.450874328613281], + [3.218313694000244, -8.311054229736328], + [7.212006092071533, -1.5350335836410522], + [-5.1224045753479, -3.47995662689209], + [5.98639440536499, -1.5023856163024902], + [7.263772487640381, 8.726221084594727], + [1.2460460662841797, 4.912140846252441], + [0.07967715710401535, 9.522584915161133], + [-2.2304718494415283, 1.9328683614730835], + [-0.8323323130607605, 4.8289408683776855], + [-2.3684113025665283, 2.1366963386535645], + [6.4436469078063965, 8.171036720275879], + [2.2979469299316406, 1.9925020933151245], + [-1.5660327672958374, 2.204890251159668], + [2.9388067722320557, -7.893843650817871], + [-4.46602201461792, 6.493437767028809], + [5.65455961227417, -5.271941184997559], + [6.508565902709961, -2.2247321605682373], + [1.9976677894592285, 5.615451812744141], + [2.4820098876953125, -7.825701713562012], + [-2.20678973197937, 2.446026086807251], + [-2.5948731899261475, 2.0818514823913574], + [-4.13661003112793, -6.007190704345703], + [1.7581843137741089, -8.231000900268555], + [-1.8251750469207764, 5.591850280761719], + [-2.663546323776245, -3.7980308532714844], + [8.841025352478027, -2.350792407989502], + [4.71007776260376, 6.718826770782471], + [-5.580778121948242, 5.000454902648926], + [-2.1493852138519287, -3.495086431503296], + [-1.9308054447174072, 2.3143649101257324], + [6.813973903656006, -1.2397276163101196], + [-7.937950611114502, -0.02145886793732643], + [-1.5403441190719604, 1.7851064205169678], + [2.9611587524414062, -3.507329225540161], + [-3.869051456451416, -5.825749397277832], + [3.356217622756958, -6.807802677154541], + [-5.773404598236084, 4.946589946746826], + [0.103350929915905, 9.604792594909668], + [-5.047036647796631, -3.076491117477417], + [4.245188236236572, -3.768470525741577], + [5.053147792816162, 6.691901206970215], + [7.410264015197754, -2.784899950027466], + [4.420480728149414, -0.8068815469741821], + [-2.483712673187256, 2.058053970336914], + [2.194129228591919, 5.03135871887207], + [-1.573612093925476, 2.1039083003997803], + [-3.01631236076355, 2.115502119064331], + [-4.036515712738037, -1.330318808555603], + [-3.9405276775360107, 5.509842395782471], + [2.2231369018554688, 1.2686690092086792], + [-5.3932204246521, 0.8137708902359009], + [3.1479134559631348, 6.58713436126709], + [-5.7864508628845215, 7.0736541748046875], + [-0.7640720009803772, -2.1655287742614746], + [4.283159255981445, -8.533048629760742], + [1.4227471351623535, 4.565683364868164], + [5.733261585235596, -2.1554622650146484], + [-6.082584381103516, -0.3130958080291748], + [4.7489447593688965, -3.953516721725464], + [-2.6568570137023926, 1.5487539768218994], + [1.2195895910263062, 5.903806686401367], + [0.007024101912975311, 13.376033782958984], + [4.758880138397217, -4.845544815063477], + [6.007166862487793, -3.1848742961883545], + [9.140985488891602, -2.3401525020599365], + [-3.298569440841675, -4.332823753356934], + [-2.6269495487213135, 7.35391902923584], + [2.926912546157837, -6.157773017883301], + [7.683154106140137, -2.3592779636383057], + [0.3112284541130066, 12.17596435546875], + [2.2174084186553955, 6.0762434005737305], + [1.129243016242981, 6.219363212585449], + [2.48271107673645, 1.346914529800415], + [-7.853250026702881, 0.136519193649292], + [3.0201871395111084, -8.29605484008789], + [-4.603671550750732, -6.5427141189575195], + [4.89934778213501, -3.1211602687835693], + [3.3258750438690186, -4.646054267883301], + [3.2731940746307373, -5.625156402587891], + [2.0359129905700684, -8.291638374328613], + [2.7599527835845947, -3.1211507320404053], + [5.081324100494385, -0.9731172323226929], + [-5.539834499359131, 3.2428486347198486], + [-2.324256181716919, -3.0216310024261475], + [5.518733501434326, -1.4043666124343872], + [-4.410179615020752, -5.94857931137085], + [-2.555023193359375, 1.7388607263565063], + [-0.025075383484363556, 12.454879760742188], + [2.59967303276062, -5.797074794769287], + [10.66937255859375, -2.439481496810913], + [2.2582576274871826, -2.2080352306365967], + [1.947401523590088, 4.5967864990234375], + [-1.0906672477722168, -3.830634355545044], + [-5.291031360626221, -2.113218307495117], + [-3.223405599594116, -4.493061065673828], + [-2.27950382232666, -3.653639793395996], + [3.0752272605895996, 1.8251714706420898], + [0.07820325344800949, 10.50942611694336], + [-3.2891547679901123, -1.5104738473892212], + [-2.6844851970672607, 1.8995318412780762], + [7.493982315063477, -5.833788871765137], + [-2.1528666019439697, 2.284925937652588], + [-1.5006619691848755, 0.5714231729507446], + [-0.13424676656723022, -1.4250274896621704], + [-4.049124240875244, 4.625028610229492], + [-1.9671953916549683, 1.5619628429412842], + [-3.996332883834839, -1.6085284948349], + [6.844444751739502, 8.231184005737305], + [-0.4453178644180298, -1.2522565126419067], + [4.482919216156006, 6.262319087982178], + [-0.007875807583332062, 9.117958068847656], + [-2.450791597366333, -2.794822931289673], + [2.0152382850646973, 0.9385085105895996], + [0.5449780225753784, 5.530256271362305], + [-5.231008052825928, -1.507030725479126], + [1.087983250617981, -7.093251705169678], + [-0.9032878875732422, -1.6185921430587769], + [3.8295483589172363, 1.4686994552612305], + [7.515809535980225, -2.3463985919952393], + [4.438478946685791, -1.0643140077590942], + [-4.823601245880127, -3.270216703414917], + [-1.1298646926879883, -3.824226140975952], + [6.454128742218018, -1.478512167930603], + [8.232837677001953, -2.0521867275238037], + [-2.2561147212982178, 2.460409164428711], + [7.267771244049072, -1.9731048345565796], + [-5.5028462409973145, 6.374916076660156], + [2.143665075302124, 4.154040813446045], + [-7.321651935577393, 8.58328628540039], + [0.15829700231552124, 12.449098587036133], + [11.830906867980957, -2.546365737915039], + [0.010033838450908661, 8.71413803100586], + [-0.6423527598381042, 3.863158702850342], + [2.385852575302124, 4.348660469055176], + [-0.013609476387500763, 12.142224311828613], + [-0.13198396563529968, -1.4662388563156128], + [0.6752373576164246, -0.9029759764671326], + [-2.039299964904785, -3.4451920986175537], + [3.305063486099243, -4.907623767852783], + [4.6045403480529785, -5.0909624099731445], + [3.0887444019317627, -2.9905834197998047], + [-4.18952751159668, -6.0996809005737305], + [-0.11958945542573929, 9.703442573547363], + [-1.9986987113952637, 2.42031192779541], + [6.134560585021973, 7.65018892288208], + [-2.5583949089050293, 1.7912489175796509], + [6.124056339263916, -1.0255266427993774], + [-1.2997773885726929, -0.47976112365722656], + [3.3672661781311035, -6.591809272766113], + [9.690929412841797, -2.393697500228882], + [4.130038738250732, 1.7940810918807983], + [-0.2135118544101715, 2.277053117752075], + [-2.7191665172576904, 1.6112736463546753], + [-2.9539339542388916, 2.1215081214904785], + [2.63702654838562, 6.339649677276611], + [7.359229564666748, -2.610736608505249], + [0.3754895329475403, 10.031713485717773], + [6.58219575881958, -1.199217438697815], + [-2.140207052230835, 0.8029114007949829], + [1.8116371631622314, -7.360154151916504], + [-4.381402492523193, -4.685518264770508], + [3.138514995574951, 6.369266510009766], + [4.542439937591553, 7.155035972595215], + [-3.750096082687378, 3.657494306564331], + [-5.205346584320068, 5.850724220275879], + [-5.628844738006592, 6.0538153648376465], + [0.12197553366422653, 12.397838592529297], + [-1.3893389701843262, -2.0662996768951416], + [-4.233853816986084, -0.05065513029694557], + [1.2523548603057861, 1.5639317035675049], + [3.660522222518921, -4.892411708831787], + [8.195000648498535, -2.171173095703125], + [-3.6960949897766113, 4.790732383728027], + [-2.147139310836792, 2.6365349292755127], + [3.128549814224243, 0.8819335103034973], + [-5.115861415863037, -4.464047431945801], + [7.155522346496582, -4.6090474128723145], + [-5.399923801422119, -0.8718860745429993], + [-3.5885205268859863, 5.345780849456787], + [1.484941005706787, -7.044029235839844], + [5.880970001220703, -1.8009099960327148], + [-0.03047216683626175, 9.79924201965332], + [0.1432974934577942, 11.034344673156738], + [9.676204681396484, -2.3985812664031982], + [6.103005886077881, -3.2884788513183594], + [-2.602271318435669, 0.3021865785121918], + [-3.4264206886291504, -6.269608974456787], + [0.15679782629013062, 10.571683883666992], + [8.292378425598145, -2.245439291000366], + [1.2941826581954956, 1.3381413221359253], + [-3.678412914276123, -6.604224681854248], + [5.289292812347412, 7.350472450256348], + [1.10053551197052, 10.912063598632812], + [-3.3286211490631104, -3.018540382385254], + [-5.532454013824463, -1.1396507024765015], + [3.525169610977173, -7.202530384063721], + [0.07490944117307663, 9.607943534851074], + [-2.368363857269287, -1.5365270376205444], + [9.02085018157959, -2.330801486968994], + [-6.468707084655762, 7.173779010772705], + [2.4506161212921143, 3.0635526180267334], + [2.457686185836792, -7.97490930557251], + [3.65165638923645, -3.451693296432495], + [-5.527894496917725, 4.0187530517578125], + [0.5463871359825134, -1.0978717803955078], + [-2.850754499435425, 1.2988128662109375], + [-2.6958563327789307, 1.4539263248443604], + [3.338404417037964, -3.2810583114624023], + [2.4856927394866943, 5.882180213928223], + [0.00497853010892868, 13.152997970581055], + [-4.144967555999756, 6.675920009613037], + [0.43859434127807617, -5.007576942443848], + [-5.1884331703186035, 5.915750026702881], + [8.811290740966797, -2.6361865997314453], + [-4.379775047302246, 4.066758155822754], + [4.476590633392334, 6.763909339904785], + [5.797284126281738, -1.9117082357406616], + [-0.04482359439134598, 13.675357818603516], + [-2.823376417160034, -3.2538254261016846], + [8.7284517288208, -2.536875009536743], + [9.650842666625977, -2.401177167892456], + [0.04132496565580368, 11.895917892456055], + [-7.342918872833252, 8.654983520507812], + [1.7765382528305054, 1.4825507402420044], + [-2.2753713130950928, 2.565603017807007], + [0.5030635595321655, 0.005162607878446579], + [-1.0977989435195923, 1.8093003034591675], + [-5.666154384613037, -0.3306516408920288], + [-0.09756726771593094, 14.170365333557129], + [9.516201972961426, -2.4480843544006348], + [2.9615671634674072, -4.213572978973389], + [2.498364210128784, -3.676504611968994], + [5.719429969787598, -1.986120581626892], + [3.530303478240967, 1.6074097156524658], + [1.8604068756103516, -6.808847904205322], + [3.0074799060821533, -2.6306750774383545], + [5.033527851104736, -3.243007183074951], + [3.731212854385376, 1.1989762783050537], + [6.049874782562256, -2.880019426345825], + [-2.6085519790649414, 2.0315065383911133], + [2.145378351211548, -2.5539610385894775], + [-5.154046535491943, 2.549537181854248], + [-0.03290129452943802, 9.403095245361328], + [-1.894240379333496, 1.6351406574249268], + [-6.458970069885254, 7.791272163391113], + [-2.76161789894104, -1.5753400325775146], + [-0.022969253361225128, 9.419225692749023], + [3.5782768726348877, -2.9867005348205566], + [5.289008140563965, 7.510720252990723], + [-3.9295408725738525, 4.621537208557129], + [-4.2525105476379395, -2.5656888484954834], + [3.209717273712158, -7.9405436515808105], + [-1.6761085987091064, -4.158572196960449], + [6.073974132537842, 7.548786163330078], + [-1.9498854875564575, 1.774698257446289], + [-2.5893189907073975, -3.600102663040161], + [7.480676651000977, -2.432631254196167], + [2.789484739303589, -3.9950649738311768], + [3.173262596130371, -5.606326103210449], + [3.4840292930603027, -3.330754280090332], + [8.576109886169434, -2.276470422744751], + [-1.4283243417739868, 1.8106368780136108], + [-6.410717487335205, -0.6840724349021912], + [5.33056640625, -3.8908941745758057], + [-1.7742245197296143, 2.3424065113067627], + [0.13792115449905396, 8.646602630615234], + [0.8197647929191589, 3.673112154006958], + [0.008220665156841278, 12.518777847290039], + [2.886467695236206, -3.914436101913452], + [3.43669056892395, -3.73413348197937], + [-2.650190591812134, 2.5400888919830322], + [8.857413291931152, -2.3037779331207275], + [3.8550055027008057, -1.5051254034042358], + [-5.053443431854248, -7.15170431137085], + [-5.147468090057373, 5.344771385192871], + [2.07395339012146, 1.6351839303970337], + [6.1034932136535645, 7.76284122467041], + [4.529127597808838, 7.357739448547363], + [7.891798496246338, -2.274744987487793], + [3.959556818008423, 1.6778180599212646], + [-2.776660680770874, -0.8767412900924683], + [3.71278977394104, 1.597307801246643], + [2.6492679119110107, -5.5494890213012695], + [-4.590916156768799, 4.259377479553223], + [-2.581012487411499, 6.102286338806152], + [8.002549171447754, -2.1619060039520264], + [0.151048481464386, 11.778829574584961], + [6.175831317901611, 7.606842041015625], + [-3.96186900138855, -6.161296367645264], + [3.494837999343872, -7.07205867767334], + [-3.325955390930176, -5.615113735198975], + [8.874869346618652, -2.3365819454193115], + [-3.192063331604004, 0.5070178508758545], + [4.7958245277404785, 7.3032684326171875], + [-0.02820856124162674, -1.5947916507720947], + [8.530049324035645, -2.039724111557007], + [0.3210573196411133, 10.5593843460083], + [3.5717127323150635, -3.0168473720550537], + [-1.4380145072937012, 1.5498239994049072], + [0.7894879579544067, -7.168806076049805], + [9.269892692565918, -2.3344805240631104], + [8.013909339904785, -2.4692046642303467], + [-1.5203909873962402, 1.2043147087097168], + [7.959139347076416, 9.355401992797852], + [-4.522597312927246, -0.9666439294815063], + [10.108171463012695, -2.438856840133667], + [-8.05362319946289, -0.10388529300689697], + [3.380392074584961, -9.821022033691406], + [0.1920676827430725, -2.553654670715332], + [1.1899285316467285, -7.597821235656738], + [-2.5381977558135986, 1.4312196969985962], + [-2.5982067584991455, 0.9837871789932251], + [2.9525134563446045, -7.814089298248291], + [-2.4590816497802734, 2.2021985054016113], + [-5.5529022216796875, 2.160778760910034], + [7.453369140625, -2.428260087966919], + [2.730721950531006, -8.739141464233398], + [6.919187545776367, -2.6266958713531494], + [0.03567840903997421, -1.2806652784347534], + [5.704035758972168, -1.2532652616500854], + [-2.923400640487671, -3.508086681365967], + [-2.040318250656128, 1.3880945444107056], + [0.17518573999404907, 10.288005828857422], + [4.042964458465576, 6.7544074058532715], + [3.4757943153381348, -2.3164584636688232], + [1.3842723369598389, -0.3639472723007202], + [3.8528828620910645, -6.893840789794922], + [-6.032534599304199, 7.201641082763672], + [-1.1754481792449951, -3.740222692489624], + [-0.04651040583848953, 9.528554916381836], + [-5.434731483459473, 6.6537017822265625], + [2.4979050159454346, -6.002906322479248], + [-3.8670578002929688, -5.890593528747559], + [3.648881673812866, -4.805415153503418], + [2.7385270595550537, -9.491808891296387], + [-7.0427632331848145, 8.020890235900879], + [7.6066107749938965, -1.9785767793655396], + [8.580770492553711, -2.505398988723755], + [4.981899261474609, 6.790382385253906], + [4.976330280303955, -1.114029049873352], + [5.562983989715576, 7.294198989868164], + [6.985433101654053, -1.4992552995681763], + [-2.1645419597625732, 2.7057602405548096], + [-4.533702850341797, 5.171459197998047], + [4.403865814208984, 7.30352783203125], + [2.626720666885376, -3.794337272644043], + [3.8744072914123535, 7.2465643882751465], + [2.6971595287323, -5.7244133949279785], + [-2.4474916458129883, 0.7727161645889282], + [-4.840617656707764, 4.280861854553223], + [3.5882418155670166, -2.8318161964416504], + [-2.3053410053253174, 2.289301872253418], + [-4.3716583251953125, -6.947914123535156], + [-1.8969449996948242, 2.3902018070220947], + [-3.413280725479126, -4.854981422424316], + [2.7959141731262207, 0.6621926426887512], + [1.8512173891067505, 2.928187131881714], + [-1.3838939666748047, 0.8437929153442383], + [4.212832927703857, -3.399787187576294], + [4.607237815856934, 7.31171178817749], + [5.951968193054199, 8.310820579528809], + [4.8678154945373535, 7.341788291931152], + [6.635719299316406, -3.4516236782073975], + [3.282681703567505, -4.078031063079834], + [-2.500471353530884, -4.5695414543151855], + [2.8070037364959717, 3.8634889125823975], + [5.7795939445495605, 7.897730827331543], + [7.478030204772949, -1.9621949195861816], + [9.235162734985352, -2.2145884037017822], + [-3.7828919887542725, 0.6867210865020752], + [-2.101030111312866, 2.511953115463257], + [5.170008659362793, -0.1873074769973755], + [0.04312270134687424, 9.682807922363281], + [10.689541816711426, -2.412433624267578], + [-6.768771171569824, -1.9861136674880981], + [8.782293319702148, -2.2728254795074463], + [2.4413535594940186, -9.016349792480469], + [1.107197642326355, 9.486604690551758], + [-2.4051096439361572, 0.6912985444068909], + [7.82198429107666, -2.104804039001465], + [5.89886999130249, -1.7063084840774536], + [-2.3982114791870117, 2.1604044437408447], + [7.517074108123779, -2.4579107761383057], + [6.1626410484313965, 8.235940933227539], + [-5.186282157897949, -6.334875106811523], + [-5.4294233322143555, -0.9053558707237244], + [-1.8471494913101196, 2.6728193759918213], + [4.961477756500244, 6.848239898681641], + [-2.7435102462768555, 1.720914363861084], + [3.4585423469543457, -6.277409553527832], + [-3.763183116912842, 4.1380486488342285], + [0.9830440878868103, -6.7714457511901855], + [-2.1238467693328857, -1.3490163087844849], + [8.331564903259277, -2.7501049041748047], + [-3.335813045501709, 0.5328541398048401], + [-0.06672052294015884, -1.722532868385315], + [2.2425007820129395, 5.669667720794678], + [-2.7811124324798584, -2.3322370052337646], + [-4.018874645233154, -6.469536304473877], + [1.1818455457687378, -7.36422061920166], + [0.9888573288917542, -0.6261734962463379], + [3.670186758041382, -2.8653724193573], + [1.9894657135009766, 1.7100701332092285], + [8.157572746276855, -2.2382686138153076], + [5.3637189865112305, 7.990825653076172], + [0.06883113831281662, 9.633280754089355], + [-5.047528266906738, -7.213759422302246], + [0.10332285612821579, 12.181838035583496], + [-4.150927543640137, -1.5228924751281738], + [5.548535346984863, 7.142885684967041], + [-1.6868510246276855, -3.261476993560791], + [3.152883291244507, -8.669388771057129], + [2.474247932434082, -4.668308258056641], + [5.419527530670166, -4.241107940673828], + [3.065951108932495, 3.7075371742248535], + [-3.2934117317199707, -2.981480836868286], + [-3.5730059146881104, -5.865860462188721], + [6.84109354019165, -4.1529622077941895], + [-0.05989331752061844, 13.10448932647705], + [-3.3357412815093994, 0.8027624487876892], + [2.6206328868865967, 4.524383544921875], + [-2.1629180908203125, 2.4878528118133545], + [9.569631576538086, -2.45969557762146], + [0.099788598716259, 12.024959564208984], + [-4.568243503570557, -7.193711280822754], + [-2.0584535598754883, -3.643799066543579], + [1.0334210395812988, -6.309772968292236], + [-4.230747222900391, 4.309547424316406], + [2.368269681930542, 4.172430992126465], + [1.7579503059387207, -0.12729719281196594], + [-5.035551071166992, -2.5871214866638184], + [4.210554122924805, -3.5239439010620117], + [-2.045673370361328, -0.507224977016449], + [-3.5844719409942627, -5.264091491699219], + [-2.0978426933288574, 2.525982141494751], + [-3.8744451999664307, -3.3750741481781006], + [-2.976311683654785, 3.703425407409668], + [3.2829229831695557, -4.751547813415527], + [7.954482555389404, -2.683908462524414], + [3.10935378074646, -3.9998395442962646], + [-4.245521068572998, -1.7276400327682495], + [2.122800827026367, 4.909909248352051], + [3.4408090114593506, -9.565908432006836], + [-4.1762213706970215, -6.038357734680176], + [1.9534261226654053, 3.2968266010284424], + [0.2664682865142822, 11.73208236694336], + [8.331157684326172, -2.185417890548706], + [-4.5715837478637695, 3.6262784004211426], + [5.220723628997803, -3.0474026203155518], + [8.47011661529541, -2.551381826400757], + [6.524425983428955, -2.7377710342407227], + [10.097721099853516, -2.4320762157440186], + [-4.46943998336792, -6.558353424072266], + [3.050593852996826, -6.574191093444824], + [3.7802734375, -3.0441670417785645], + [5.9072465896606445, -3.1762654781341553], + [3.5554637908935547, 1.568135142326355], + [5.501463413238525, -4.246677398681641], + [0.5510071516036987, 4.208320617675781], + [-2.7533457279205322, -1.1453428268432617], + [-4.0722198486328125, -0.6203362941741943], + [8.56035327911377, -2.340949296951294], + [6.970268249511719, -4.5120110511779785], + [-5.679928302764893, -0.3040798306465149], + [-7.6310811042785645, -0.7361196279525757], + [3.7877049446105957, -4.169094085693359], + [3.9783637523651123, -8.33038330078125], + [2.9617631435394287, -4.245870113372803], + [2.9913909435272217, -4.231432914733887], + [2.528292417526245, -7.736089706420898], + [8.68758773803711, -2.367403745651245], + [-6.312452793121338, 7.3656110763549805], + [3.361252546310425, -5.209989070892334], + [-6.001779079437256, 4.450603008270264], + [1.1881380081176758, 9.048627853393555], + [-7.13682222366333, 7.966350555419922], + [-2.732722043991089, 6.104436874389648], + [-5.636005401611328, -0.7514310479164124], + [-4.579658031463623, -4.000146865844727], + [-2.9754722118377686, -0.7149426937103271], + [-3.4976065158843994, 6.155428886413574], + [11.675740242004395, -2.5718019008636475], + [-3.0789296627044678, -0.4740874171257019], + [-2.0827648639678955, 2.203441858291626], + [9.130956649780273, -2.5448834896087646], + [-5.141661643981934, -4.877890586853027], + [-5.102670669555664, 6.019233703613281], + [-2.132444143295288, -4.505105018615723], + [-2.20074725151062, -4.4149065017700195], + [-2.7009918689727783, -3.372911214828491], + [-5.273358345031738, -4.019107818603516], + [3.327009439468384, 0.9039038419723511], + [-6.009905815124512, -0.652450442314148], + [2.339418411254883, 4.6167097091674805], + [-4.458471775054932, -6.5489349365234375], + [-1.1488333940505981, -3.998396635055542], + [7.075247764587402, -2.1884944438934326], + [0.45878100395202637, 10.225906372070312], + [7.096463680267334, 8.484342575073242], + [-2.5794789791107178, -3.406630039215088], + [7.1146745681762695, -1.754926085472107], + [3.5089471340179443, -7.162409782409668], + [-4.413154125213623, -6.368648529052734], + [-2.4024503231048584, 1.967344880104065], + [8.190681457519531, -2.183014392852783], + [-4.813353061676025, -1.033836841583252], + [1.6240794658660889, -5.723788261413574], + [3.654949903488159, 6.7874321937561035], + [3.6520659923553467, -4.890540599822998], + [12.081387519836426, -2.6814000606536865], + [-2.4509270191192627, 2.237879991531372], + [6.537878513336182, 7.950221538543701], + [4.210682392120361, 1.8288934230804443], + [4.862874507904053, -3.425959825515747], + [4.842128753662109, -7.048877239227295], + [2.7686235904693604, -5.921346664428711], + [2.0891363620758057, 2.6478688716888428], + [6.988990306854248, -1.4679914712905884], + [2.185152053833008, -8.010791778564453], + [-5.00032377243042, -0.12789738178253174], + [0.4776129722595215, -5.098743438720703], + [-2.2100071907043457, 2.233013868331909], + [1.3749313354492188, 0.8487936854362488], + [-2.4053759574890137, 1.5370838642120361], + [-6.1961669921875, -0.051047686487436295], + [0.5423381328582764, -5.671784400939941], + [-5.635687351226807, -0.8991145491600037], + [-2.277034282684326, 2.0446479320526123], + [-2.535233497619629, 1.9646838903427124], + [-3.2519617080688477, -2.9732704162597656], + [-4.949656009674072, -3.0579988956451416], + [4.001913547515869, -4.010349750518799], + [-1.3428329229354858, -2.3377163410186768], + [-3.5845248699188232, 4.853006362915039], + [6.4366559982299805, -4.982001304626465], + [0.07563718408346176, -1.4408290386199951], + [7.079670429229736, -2.9912664890289307], + [-0.047493286430835724, 13.119131088256836], + [-4.524400234222412, -3.009680986404419], + [0.9972487092018127, -0.6767547130584717], + [-5.200658798217773, -5.692943572998047], + [2.6373822689056396, -3.1897637844085693], + [6.180517196655273, -1.6946686506271362], + [5.906618595123291, 7.938750267028809], + [5.911082744598389, -1.2747198343276978], + [-2.1206655502319336, 2.6621592044830322], + [-2.78212571144104, -3.4690730571746826], + [7.8452887535095215, -2.0557730197906494], + [-2.3919572830200195, 1.9981151819229126], + [-2.223198652267456, 2.2589728832244873], + [-5.057039737701416, -4.890445232391357], + [5.399450778961182, -5.371148109436035], + [0.5392538905143738, 12.27011489868164], + [-0.05673576146364212, 9.999442100524902], + [9.426326751708984, -2.6848456859588623], + [-4.3659515380859375, 5.091700553894043], + [0.6189939379692078, -1.0006341934204102], + [0.10184364765882492, 11.591897010803223], + [3.661532163619995, -3.4023823738098145], + [2.917144536972046, 1.9550031423568726], + [0.5755419135093689, -1.3027260303497314], + [-0.12422878295183182, -1.3432635068893433], + [-1.1113656759262085, 1.7243847846984863], + [-4.5035319328308105, -2.3397247791290283], + [-0.8752034306526184, 1.15871262550354], + [3.2224085330963135, -5.871340751647949], + [-2.8367691040039062, -3.627527952194214], + [6.4619221687316895, 8.079654693603516], + [2.2661986351013184, 4.883423805236816], + [0.0488717183470726, -2.78959321975708], + [8.730986595153809, -2.368238687515259], + [-1.3165754079818726, -0.9353674650192261], + [3.520339012145996, -7.290851593017578], + [-1.824533224105835, 0.3763720393180847], + [3.4108083248138428, -5.229951858520508], + [0.16541796922683716, 11.592653274536133], + [9.14786434173584, -2.4682083129882812], + [-3.221318006515503, -3.2162744998931885], + [-3.419321298599243, -6.049254417419434], + [-7.277394771575928, 8.702072143554688], + [6.791234970092773, -1.4210588932037354], + [7.797752857208252, 9.196678161621094], + [-2.171926736831665, 2.802140235900879], + [-6.717867374420166, 1.9859131574630737], + [1.7200508117675781, 5.955147743225098], + [2.729187250137329, -3.8616204261779785], + [-4.937241077423096, -3.4170405864715576], + [8.089442253112793, -2.2020461559295654], + [0.759696900844574, -0.7619560360908508], + [2.998164415359497, -7.9712653160095215], + [8.705952644348145, -2.3885366916656494], + [-4.854440689086914, -6.833372592926025], + [-6.07227087020874, 6.972256660461426], + [-2.590846300125122, 1.8648148775100708], + [3.29521107673645, 0.7873148918151855], + [-7.719110012054443, 0.08834326267242432], + [9.928973197937012, -2.502281427383423], + [7.9073333740234375, -2.131345510482788], + [-4.274275779724121, -6.686684608459473], + [3.212433099746704, -7.559176445007324], + [-5.854648113250732, -0.6567510366439819], + [-0.08905047923326492, 9.700352668762207], + [-2.5319905281066895, 1.8060647249221802], + [0.13366255164146423, -1.2428735494613647], + [3.043604612350464, -2.4677979946136475], + [-2.534846782684326, 1.8392430543899536], + [8.038453102111816, -2.230738401412964], + [8.319296836853027, -2.3033106327056885], + [7.835879802703857, -6.029956817626953], + [-7.624163627624512, 8.829620361328125], + [-4.029921054840088, 3.2717692852020264], + [-3.2455027103424072, -4.4252495765686035], + [5.653562545776367, -1.4447486400604248], + [-0.6394813656806946, 1.464087963104248], + [0.0363539382815361, 9.498228073120117], + [3.2635204792022705, -3.788574695587158], + [-4.561330318450928, 3.578904628753662], + [0.020101480185985565, 9.050661087036133], + [-4.959825038909912, 5.1263427734375], + [3.898703098297119, 1.8051105737686157], + [-0.05039746314287186, 12.332742691040039], + [-0.11961746960878372, -0.44947847723960876], + [9.504630088806152, -2.3451669216156006], + [2.0425503253936768, 2.6351921558380127], + [1.7267365455627441, 2.041226625442505], + [2.7583119869232178, -7.092700004577637], + [5.483397960662842, -4.574191570281982], + [1.7119197845458984, -8.501250267028809], + [3.494415760040283, -2.9236748218536377], + [2.2937710285186768, -4.029430389404297], + [-0.42424625158309937, -2.58829665184021], + [-4.811692714691162, -7.166084289550781], + [3.4695217609405518, 1.5437158346176147], + [2.8244166374206543, -3.2409677505493164], + [4.231682777404785, -7.727752685546875], + [6.0292792320251465, -1.9154654741287231], + [-4.095154285430908, -6.622830867767334], + [-1.8030149936676025, 0.6191953420639038], + [-6.7919745445251465, 7.889423370361328], + [7.660677909851074, -2.1236181259155273], + [-4.946794509887695, -4.806652545928955], + [1.5039172172546387, -0.25600191950798035], + [2.286384344100952, -8.354473114013672], + [1.9456171989440918, -4.184369087219238], + [1.8981437683105469, -6.933958053588867], + [0.4153304696083069, -0.6334377527236938], + [5.124145030975342, 7.474535942077637], + [8.648543357849121, -2.44905686378479], + [0.2146201729774475, 8.827033996582031], + [-5.851983547210693, -0.7504557371139526], + [0.9868351817131042, -5.346551895141602], + [0.07033949345350266, 12.053800582885742], + [4.450663089752197, -3.522535800933838], + [7.639633655548096, -2.071835994720459], + [-4.3970160484313965, 5.297302722930908], + [-3.943864107131958, -6.419955730438232], + [8.911111831665039, -2.3182215690612793], + [3.5864455699920654, -2.625831127166748], + [2.110250234603882, -6.919788360595703], + [-2.032813310623169, 2.3966827392578125], + [3.275954008102417, -4.250640869140625], + [-6.534389019012451, 7.168476581573486], + [1.0935328006744385, 2.091329574584961], + [-4.760421276092529, -1.9067201614379883], + [3.097796678543091, 6.2676825523376465], + [1.6695196628570557, 5.545013427734375], + [-2.6996357440948486, -3.077852487564087], + [1.7116410732269287, 7.7183332443237305], + [-0.05380804091691971, 13.683053970336914], + [0.7030772566795349, -4.415796756744385], + [0.14111953973770142, 12.661003112792969], + [3.1397600173950195, 0.8731523156166077], + [2.859741449356079, -3.6277835369110107], + [10.58549976348877, -2.4923088550567627], + [5.009271621704102, 7.5027313232421875], + [-2.7228119373321533, -4.8982648849487305], + [8.84044361114502, -2.417311906814575], + [9.405386924743652, -2.2901618480682373], + [8.660689353942871, -2.1714060306549072], + [5.42944860458374, 7.237081527709961], + [-4.399975776672363, -3.614468574523926], + [2.2426578998565674, -7.890816688537598], + [8.213262557983398, -2.2877824306488037], + [-3.221252679824829, -3.7472236156463623], + [3.6818602085113525, -7.100636005401611], + [-2.1060335636138916, -3.304386854171753], + [3.4767212867736816, -3.2746098041534424], + [2.9796700477600098, -7.6435136795043945], + [1.0006520748138428, -4.865532875061035], + [-4.598995685577393, 5.100356101989746], + [-5.8585429191589355, -1.9510687589645386], + [-4.488097667694092, 8.236888885498047], + [1.8130173683166504, 1.4335697889328003], + [6.3971848487854, 8.270349502563477], + [7.304856777191162, -1.707666277885437], + [-2.0535480976104736, 0.6961414813995361], + [2.670964241027832, 5.973443031311035], + [-3.7202136516571045, -1.0555826425552368], + [-2.452332019805908, -3.2474915981292725], + [0.2679707407951355, 11.883612632751465], + [2.4429264068603516, 1.6641207933425903], + [2.659925699234009, -3.8767778873443604], + [0.9600275158882141, -0.43673714995384216], + [4.73066520690918, 6.777190685272217], + [3.002253770828247, -8.250802993774414], + [-3.256194829940796, 0.2818700075149536], + [-5.498980522155762, 5.039102554321289], + [0.0855676457285881, 11.620646476745605], + [6.210238933563232, 7.694155693054199], + [3.132662057876587, 1.7647954225540161], + [-4.466578006744385, 0.7927250862121582], + [-7.088348865509033, 8.30233383178711], + [1.9844377040863037, 2.3952157497406006], + [3.498239755630493, 7.300612449645996], + [-1.789602279663086, -3.3738901615142822], + [3.1611108779907227, -4.542697429656982], + [9.327810287475586, -2.2888877391815186], + [2.459419012069702, -2.8488643169403076], + [-6.8491129875183105, 0.09433293342590332], + [-3.113266706466675, -6.080069065093994], + [-1.875105381011963, 1.7863155603408813], + [-2.5975539684295654, -4.4345903396606445], + [-1.2064567804336548, 1.7184315919876099], + [2.2649710178375244, -8.347070693969727], + [-5.94360876083374, 6.834540367126465], + [1.401547908782959, 5.562483310699463], + [-4.7450947761535645, -2.55204439163208], + [-4.572696685791016, 5.621835708618164], + [3.8165905475616455, -7.47686767578125], + [0.17907139658927917, -3.838787794113159], + [6.636454105377197, 8.04401969909668], + [-0.47171682119369507, -0.9855382442474365], + [6.0397515296936035, -1.4504528045654297], + [-2.1501028537750244, 2.6451025009155273], + [-2.8498523235321045, -3.1010289192199707], + [3.1511857509613037, -4.430270671844482], + [-3.6734931468963623, -1.4276188611984253], + [3.957249402999878, -3.6447486877441406], + [-2.264849901199341, 2.0496082305908203], + [-1.5830111503601074, 6.241022109985352], + [-4.547461986541748, -6.359412670135498], + [-0.12488541752099991, -1.4483213424682617], + [3.5626630783081055, -7.640704154968262], + [-0.3688925504684448, -0.8993106484413147], + [0.12886500358581543, 12.2345552444458], + [-2.332704544067383, -4.447409152984619], + [-1.4193384647369385, 1.2757577896118164], + [1.131007432937622, -0.5797550082206726], + [2.0335276126861572, 4.56490421295166], + [6.084248065948486, -3.3164687156677246], + [6.072872161865234, -5.874172687530518], + [-2.1065332889556885, 0.41985905170440674], + [-1.9596220254898071, 1.7108639478683472], + [-6.582949161529541, 7.910843849182129], + [-0.03898698836565018, 13.226876258850098], + [1.254643201828003, -7.397409915924072], + [-2.0188400745391846, 2.258296251296997], + [10.56971263885498, -2.4520864486694336], + [2.883239507675171, -6.670590400695801], + [-2.1501212120056152, 2.5214476585388184], + [6.917568206787109, -6.355268478393555], + [7.3589768409729, -2.425224542617798], + [0.3096635937690735, -4.101280212402344], + [-2.0518085956573486, 2.232043981552124], + [-1.3617053031921387, 2.0375359058380127], + [-4.949748992919922, -7.933043479919434], + [0.5757566094398499, -5.882408142089844], + [-1.7894659042358398, 2.4312987327575684], + [8.372920989990234, -2.24783992767334], + [-2.5586583614349365, 1.8503392934799194], + [-0.08653242141008377, 5.620848178863525], + [-7.464273929595947, 8.749795913696289], + [3.6898725032806396, -3.2920074462890625], + [-4.684244632720947, 3.9739253520965576], + [2.002570390701294, 3.1272878646850586], + [-4.850437164306641, 5.300343036651611], + [0.24699491262435913, 10.665175437927246], + [-2.1329383850097656, 2.693711280822754], + [7.395110607147217, -1.8130544424057007], + [3.7099530696868896, -5.434631824493408], + [3.467766523361206, -5.81378173828125], + [6.154085636138916, 7.9775590896606445], + [-3.1079092025756836, -0.44331544637680054], + [-2.441129684448242, 1.4710865020751953], + [-2.519578695297241, 1.2496919631958008], + [-4.753897190093994, -2.814391851425171], + [7.785548686981201, -2.20168137550354], + [-2.665724992752075, 2.355703353881836], + [3.5662553310394287, -7.195969581604004], + [-2.5776116847991943, 1.8326650857925415], + [-0.07819933444261551, 13.388087272644043], + [4.301063537597656, -3.6988003253936768], + [2.8551275730133057, -4.062767028808594], + [-2.7080328464508057, -2.8915610313415527], + [-2.9037535190582275, 2.3539469242095947], + [0.295041024684906, 11.734209060668945], + [0.031031779944896698, 10.353721618652344], + [-2.3209567070007324, 2.010139226913452], + [-5.33218240737915, 6.368382453918457], + [6.91493558883667, -5.531339645385742], + [-2.841310977935791, 6.299479961395264], + [0.05809073895215988, 12.190887451171875], + [2.2091312408447266, -0.011111412197351456], + [0.51109379529953, -0.9163806438446045], + [8.668907165527344, -2.2441108226776123], + [3.0276215076446533, -4.305069446563721], + [-2.2063534259796143, 2.8182852268218994], + [0.028707019984722137, 12.051995277404785], + [-5.1744065284729, -1.8938214778900146], + [0.5921932458877563, -1.1155325174331665], + [0.5122731924057007, -0.8977010250091553], + [-5.2831130027771, 6.0490946769714355], + [6.036384105682373, -1.2346705198287964], + [2.6001861095428467, -7.187698841094971], + [-4.368812561035156, 4.866724967956543], + [-4.708642482757568, -7.368613243103027], + [0.2789521813392639, 11.595026969909668], + [-4.334731101989746, -6.646949291229248], + [6.2969889640808105, 8.425529479980469], + [0.16039550304412842, 10.13833999633789], + [2.7162158489227295, -3.6772773265838623], + [2.113804578781128, 0.20833516120910645], + [-4.978708744049072, -7.093268394470215], + [-3.916701078414917, -2.2793142795562744], + [7.808013916015625, -2.627974271774292], + [-5.063116073608398, -7.19682502746582], + [0.006681434810161591, 9.827920913696289], + [-1.5827767848968506, 1.6455090045928955], + [4.253962516784668, -7.653372764587402], + [-6.389239311218262, 7.452770233154297], + [3.178260564804077, 6.912379264831543], + [-2.555082321166992, 1.946998119354248], + [1.5729236602783203, 0.03751957044005394], + [-5.4391374588012695, -2.3756825923919678], + [-3.3607189655303955, -2.5583913326263428], + [-3.9892241954803467, -6.713442802429199], + [8.590472221374512, -2.3477046489715576], + [2.56144118309021, -7.558170318603516], + [-4.560698986053467, -3.389087438583374], + [-1.8712745904922485, 2.008174419403076], + [3.832610607147217, -3.479346513748169], + [-3.377924680709839, -3.519266366958618], + [3.5661542415618896, 6.474118232727051], + [2.572272539138794, 2.1525070667266846], + [-4.782595634460449, -5.657987594604492], + [0.17314445972442627, 10.252738952636719], + [8.41354751586914, -2.3674604892730713], + [0.40951603651046753, -1.0923635959625244], + [-2.0115256309509277, 0.6602505445480347], + [3.459279775619507, -6.894762992858887], + [8.555221557617188, -2.2558465003967285], + [2.937809705734253, -3.622521162033081], + [2.151538848876953, -6.4102935791015625], + [8.647599220275879, -2.5664222240448], + [4.59783935546875, -4.34193229675293], + [-4.64238977432251, 1.4636213779449463], + [-0.2126094400882721, -2.217834234237671], + [-4.420254230499268, -5.8303375244140625], + [6.1405768394470215, -4.329495906829834], + [-2.513596296310425, 0.05061578378081322], + [4.046244144439697, -3.542398691177368], + [-5.190682888031006, -0.6158028841018677], + [-6.599833965301514, -0.675751805305481], + [7.193020343780518, 8.647761344909668], + [4.414215087890625, 6.834044456481934], + [-5.665931701660156, 6.800375938415527], + [10.98488998413086, -2.522454023361206], + [2.309779167175293, 3.8463046550750732], + [1.9371449947357178, -7.705479621887207], + [10.21828842163086, -2.4783289432525635], + [0.21428149938583374, 11.412923812866211], + [-4.476904392242432, -6.4280314445495605], + [-1.521028995513916, 0.7951512336730957], + [2.0878875255584717, -8.099563598632812], + [3.918351411819458, 1.6931675672531128], + [-2.1260156631469727, 2.697899580001831], + [3.7587690353393555, -3.916790723800659], + [-0.30713117122650146, -1.6996532678604126], + [9.999468803405762, -2.5003554821014404], + [-4.694550037384033, 3.469651460647583], + [0.13434821367263794, 10.57326889038086], + [-4.7390265464782715, -5.691720008850098], + [-0.03407645970582962, 9.019287109375], + [2.581702947616577, 4.122660160064697], + [-3.843559503555298, -5.659152030944824], + [5.432106971740723, 7.589446067810059], + [-0.012909658253192902, 0.6693859100341797], + [-6.6222004890441895, 7.836559295654297], + [1.866550326347351, -0.05978177860379219], + [5.2051262855529785, -3.7227694988250732], + [-5.021175861358643, -7.414932727813721], + [5.654637336730957, -2.756380319595337], + [4.913086414337158, 6.341132164001465], + [-4.711662292480469, 5.8302459716796875], + [-4.694753170013428, 4.121440410614014], + [3.2658398151397705, -4.800169944763184], + [3.948896646499634, -3.576772928237915], + [3.1711080074310303, 5.938753128051758], + [2.3062944412231445, 1.5656535625457764], + [-4.402662754058838, -2.9287726879119873], + [-4.031321048736572, -6.0078125], + [5.009962558746338, -3.1768405437469482], + [-0.03641039878129959, 11.950017929077148], + [-4.317370891571045, 0.5922099947929382], + [-3.9257755279541016, 7.47951078414917], + [-0.998594343662262, -3.671401023864746], + [1.9180645942687988, 4.913032531738281], + [3.7285516262054443, 1.7473571300506592], + [8.216063499450684, -2.2436153888702393], + [2.106959581375122, -8.01646900177002], + [-1.2480809688568115, 1.8058279752731323], + [4.866442680358887, -0.23758669197559357], + [-2.6796722412109375, 2.036454916000366], + [3.328169107437134, -7.69499397277832], + [3.154181718826294, -4.425843238830566], + [-2.3268537521362305, 2.1301796436309814], + [-4.380242824554443, 4.48499870300293], + [3.179032802581787, -4.320674419403076], + [0.9719921946525574, 0.8663651943206787], + [-1.5228707790374756, 2.076796770095825], + [-2.1829264163970947, 2.355649948120117], + [-2.461207151412964, 2.0812249183654785], + [8.822161674499512, -2.381077766418457], + [11.114191055297852, -2.517119884490967], + [0.03533761948347092, 9.266180038452148], + [-4.279616832733154, 4.948385238647461], + [3.092844247817993, -4.418128967285156], + [-6.20748233795166, 0.16288530826568604], + [-2.411534309387207, 2.275596857070923], + [-3.471733331680298, 5.2678680419921875], + [-7.611042499542236, 0.0769280195236206], + [0.6715494394302368, -1.855535626411438], + [-0.12198973447084427, 10.096478462219238], + [2.8350942134857178, -4.12721586227417], + [3.845675230026245, -2.8059985637664795], + [-3.865485191345215, 5.243000030517578], + [0.020793966948986053, 9.83566665649414], + [3.5424065589904785, -8.861852645874023], + [3.529266595840454, -4.37410831451416], + [1.4485172033309937, -6.902335166931152], + [6.116837024688721, -4.740294933319092], + [3.1821341514587402, -9.279092788696289], + [-3.9967381954193115, -0.9012589454650879], + [-2.537797212600708, 1.9556337594985962], + [0.026592008769512177, 12.816036224365234], + [-4.896060943603516, -6.064696311950684], + [-3.9596197605133057, -3.976937770843506], + [-2.3856990337371826, -2.045591115951538], + [-4.49062967300415, -2.5578644275665283], + [4.0270891189575195, 6.431113243103027], + [-3.810128688812256, -5.6372880935668945], + [4.19778299331665, -6.51186466217041], + [2.3468308448791504, 1.6877585649490356], + [10.229907035827637, -2.3981454372406006], + [2.384021520614624, -9.480819702148438], + [-4.604628086090088, -7.468886375427246], + [0.5105566382408142, 11.131908416748047], + [3.9783222675323486, -7.2488932609558105], + [4.789872646331787, -5.89703893661499], + [9.247314453125, -2.6182615756988525], + [0.3953254818916321, 11.403595924377441], + [-2.578890085220337, 2.1155881881713867], + [3.805314302444458, -3.3024044036865234], + [7.347609996795654, -2.365994691848755], + [3.2256908416748047, 0.9380216598510742], + [-6.2211785316467285, 0.39589524269104004], + [-2.371464967727661, -5.2944135665893555], + [-2.1765308380126953, 2.548950433731079], + [0.045468442142009735, 11.96666145324707], + [2.4520490169525146, -6.722814083099365], + [2.213916063308716, -3.326856851577759], + [3.8091447353363037, -3.295301675796509], + [3.6359031200408936, -5.2298712730407715], + [3.023512601852417, -7.870030879974365], + [-2.105146646499634, 2.3556156158447266], + [2.1970531940460205, 0.4007323682308197], + [-2.1375153064727783, 2.5646121501922607], + [-0.21445241570472717, -1.3551783561706543], + [-2.2466471195220947, -3.521878480911255], + [3.028672933578491, -6.678000450134277], + [-2.177903413772583, 1.8213049173355103], + [-2.2086122035980225, 2.1694295406341553], + [10.459747314453125, -2.449718713760376], + [-6.394920825958252, 7.339765548706055], + [3.3337020874023438, -4.790827751159668], + [1.7243273258209229, 5.500471115112305], + [-4.0521159172058105, -0.832533061504364], + [8.256287574768066, -2.271507501602173], + [5.157846927642822, 7.1543426513671875], + [2.426086664199829, -2.282252550125122], + [1.9840404987335205, 6.0174126625061035], + [9.425930976867676, -2.399106025695801], + [-5.262127876281738, 4.842071533203125], + [7.40866756439209, -5.0457353591918945], + [-4.576612949371338, 4.267418384552002], + [-2.3089101314544678, 2.3280153274536133], + [3.444553852081299, 1.216503381729126], + [8.829806327819824, -2.30303955078125], + [1.8444100618362427, -7.117498397827148], + [-2.773512125015259, -1.6049532890319824], + [4.928567886352539, -6.154648303985596], + [5.774380683898926, -1.0786932706832886], + [-5.230820178985596, -6.043430328369141], + [4.183005332946777, 1.7940651178359985], + [-0.11286302655935287, -1.4495905637741089], + [-0.08792299777269363, 13.11986255645752], + [-4.956675052642822, 5.411904335021973], + [-7.015937328338623, 7.377007484436035], + [1.4232499599456787, 0.2454986572265625], + [-1.9900007247924805, -3.520045042037964], + [2.5984137058258057, 3.4292025566101074], + [2.421485185623169, 2.179128646850586], + [-4.025114059448242, 5.514636516571045], + [1.7942675352096558, 1.8728587627410889], + [-2.238075017929077, -3.4736740589141846], + [-4.356935024261475, 3.641177177429199], + [-0.050906963646411896, 9.602556228637695], + [-1.6426373720169067, 1.7459748983383179], + [-1.0062377452850342, -3.486107110977173], + [9.16906452178955, -2.452470302581787], + [4.533253192901611, 7.599178314208984], + [7.782996654510498, -2.3433845043182373], + [-1.8110328912734985, -3.702453374862671], + [9.038070678710938, -2.333350896835327], + [-4.7419819831848145, 4.893224716186523], + [0.24800902605056763, 10.550198554992676], + [0.39035624265670776, -1.4822067022323608], + [-3.3404929637908936, -3.3793861865997314], + [8.51261043548584, -2.512787342071533], + [3.89856219291687, -3.3859283924102783], + [-2.8525755405426025, -2.7618961334228516], + [1.9782843589782715, 6.646385192871094], + [-3.6224005222320557, -4.323236465454102], + [-3.5071709156036377, -5.347177505493164], + [-6.652985095977783, 6.830005645751953], + [2.8517959117889404, -4.0652241706848145], + [-0.4569196105003357, 1.219711184501648], + [9.03382396697998, -2.239145278930664], + [-3.119053602218628, -5.0116496086120605], + [4.204298973083496, -8.281474113464355], + [2.4859163761138916, -3.2674806118011475], + [-4.5135064125061035, 5.516819000244141], + [9.204345703125, -2.4796478748321533], + [-4.524640083312988, -6.791085720062256], + [-1.4576442241668701, 1.2026945352554321], + [-3.5816571712493896, -1.8288944959640503], + [-2.9408931732177734, -0.6102753281593323], + [2.3382647037506104, -8.812219619750977], + [2.5263001918792725, 3.0224812030792236], + [-0.024187274277210236, 12.934744834899902], + [-3.525402069091797, -3.7012574672698975], + [8.833765983581543, -2.212876081466675], + [1.8289730548858643, -6.28516960144043], + [5.9353251457214355, -1.3319097757339478], + [2.358865976333618, 0.32764720916748047], + [-6.406095504760742, -2.5224273204803467], + [-6.225449562072754, -0.01981056109070778], + [-2.197396993637085, 1.9305437803268433], + [-0.5506520867347717, -0.5490511655807495], + [0.068194679915905, 10.360556602478027], + [1.7853083610534668, -7.687186241149902], + [-1.7282572984695435, 2.069319009780884], + [-2.111100435256958, 2.2524397373199463], + [0.07454919070005417, 12.066243171691895], + [-2.4315927028656006, -1.7931588888168335], + [-4.496265888214111, -3.1848273277282715], + [2.122692823410034, 3.53826642036438], + [-4.00607967376709, -3.2945921421051025], + [9.638352394104004, -2.3678743839263916], + [-5.571616172790527, 6.551877498626709], + [2.456674814224243, -9.19573974609375], + [4.483409404754639, -3.5344934463500977], + [6.621196269989014, -2.70674729347229], + [-3.35101580619812, -3.4431419372558594], + [-3.784825563430786, -0.9565268754959106], + [3.762706995010376, -7.257835865020752], + [-4.571659564971924, -4.336515426635742], + [-2.2221896648406982, -4.244059085845947], + [0.8141079545021057, -0.5592577457427979], + [-3.8458597660064697, -3.41562557220459], + [6.005428791046143, 7.7930827140808105], + [2.1882598400115967, 5.7976484298706055], + [-1.0665074586868286, -2.818174123764038], + [2.791696548461914, -5.872541904449463], + [3.443248987197876, -5.231689453125], + [-4.876803874969482, -3.8221418857574463], + [1.9100064039230347, 4.641541481018066], + [-4.02063512802124, -6.146882057189941], + [-6.507958889007568, 6.650352478027344], + [-4.464993000030518, -6.360387802124023], + [-4.413896560668945, -6.445295810699463], + [3.7089145183563232, 1.1904479265213013], + [5.819390773773193, 7.473849296569824], + [0.9018452167510986, 5.358380317687988], + [0.2372327446937561, 10.464410781860352], + [-4.7893385887146, 4.28178596496582], + [6.939465045928955, -2.2168867588043213], + [1.8114275932312012, -8.362640380859375], + [1.767805576324463, -8.478744506835938], + [7.463598728179932, -1.6536380052566528], + [-5.507121562957764, 4.456401824951172], + [10.098584175109863, -2.3719327449798584], + [-2.363410234451294, -0.8915485143661499], + [5.437611103057861, 7.569522857666016], + [-2.6787383556365967, 1.7568578720092773], + [0.6815040707588196, 10.877912521362305], + [0.07132642716169357, 9.438031196594238], + [0.20102304220199585, 10.240625381469727], + [3.9809792041778564, -3.475551128387451], + [3.1486217975616455, -8.139415740966797], + [4.716146945953369, 6.546882152557373], + [0.7305086255073547, -0.8510704040527344], + [2.7057783603668213, 6.289031028747559], + [-4.350680351257324, 4.381892681121826], + [5.970643520355225, -2.21405029296875], + [0.014816395938396454, 12.71200942993164], + [-4.740299701690674, -5.849130630493164], + [3.6313326358795166, -2.5347940921783447], + [3.6553122997283936, 1.1432639360427856], + [2.9392850399017334, -4.035479545593262], + [-3.699627637863159, -3.894379138946533], + [0.08154260367155075, 12.622950553894043], + [0.157839834690094, 10.170736312866211], + [3.6692278385162354, -2.765580654144287], + [3.546879529953003, -3.1772377490997314], + [-4.8163018226623535, -7.016904830932617], + [0.2247266173362732, 11.138242721557617], + [7.045664310455322, -4.536244869232178], + [5.500545501708984, -3.522677183151245], + [-3.0828938484191895, 3.141965627670288], + [7.197383880615234, 8.596122741699219], + [3.7278034687042236, 1.811609148979187], + [-2.5666403770446777, 2.025754690170288], + [7.618146896362305, 9.035751342773438], + [9.211030960083008, -2.4501965045928955], + [8.823001861572266, -2.3480241298675537], + [-3.1415977478027344, -1.7563235759735107], + [8.405595779418945, -2.520972490310669], + [2.577234983444214, -3.7602038383483887], + [-4.520279407501221, -3.583317995071411], + [-4.3492584228515625, -4.486002445220947], + [2.07757306098938, 2.0307486057281494], + [-2.2714622020721436, 1.714414358139038], + [9.236994743347168, -2.267324686050415], + [3.3195455074310303, -3.7348053455352783], + [2.9279181957244873, -4.322854995727539], + [0.06137322634458542, 11.632011413574219], + [-3.469268798828125, -0.004581395536661148], + [6.442450523376465, -2.743729829788208], + [-2.379615068435669, 2.31367826461792], + [3.0008838176727295, -5.796574592590332], + [5.133042335510254, -4.609797477722168], + [-5.129137992858887, -1.5289008617401123], + [-4.101774215698242, 4.7969160079956055], + [-6.622539043426514, -1.361854076385498], + [3.4579062461853027, -7.114208221435547], + [8.784817695617676, -2.387620687484741], + [5.372142791748047, 6.879181861877441], + [-5.88169002532959, 5.657642364501953], + [7.483299255371094, -1.8541361093521118], + [-7.251494884490967, 8.444459915161133], + [2.8428308963775635, -3.924640655517578], + [2.0783426761627197, 0.7887885570526123], + [8.017614364624023, -2.072463035583496], + [5.041697978973389, 7.243649482727051], + [-7.126945972442627, 8.504243850708008], + [-7.134782791137695, 8.387392044067383], + [2.899301052093506, -3.210955858230591], + [9.952099800109863, -2.4957058429718018], + [-1.1097297668457031, -3.1657445430755615], + [-3.2129476070404053, -0.7320929765701294], + [-3.242725133895874, 0.9890955686569214], + [6.372249126434326, -5.583291053771973], + [2.639101028442383, -8.340519905090332], + [-1.4788066148757935, 1.867489218711853], + [0.7808769941329956, -5.624320983886719], + [0.01648586243391037, 11.513927459716797], + [3.5286848545074463, -5.926527976989746], + [2.6876285076141357, 4.631882667541504], + [-2.6163041591644287, 2.1837427616119385], + [8.169777870178223, -2.283097982406616], + [0.06669586151838303, 10.805145263671875], + [-2.5572500228881836, 1.6619065999984741], + [-7.1867756843566895, -1.597037434577942], + [-3.8689141273498535, -0.69446861743927], + [-5.094666004180908, -3.6889750957489014], + [8.814027786254883, -2.2626659870147705], + [-3.9386088848114014, -3.4336912631988525], + [-7.537316799163818, 8.820636749267578], + [-4.611439228057861, 3.914931535720825], + [-4.658031463623047, -3.918229103088379], + [-6.65543794631958, 7.278059959411621], + [-2.0031344890594482, 0.3374185562133789], + [-5.008373260498047, -2.825953245162964], + [2.961860418319702, 1.39812171459198], + [1.7859958410263062, 0.11196720600128174], + [-4.859574317932129, 4.693902969360352], + [-3.6867802143096924, -0.3494950532913208], + [1.286529541015625, 4.9757232666015625], + [-4.805335998535156, 5.082126617431641], + [-1.9192947149276733, -3.7384700775146484], + [-2.4507386684417725, 2.03024959564209], + [-2.593190908432007, 0.16554981470108032], + [-2.182739019393921, 2.4032506942749023], + [3.112156391143799, -3.445922613143921], + [-2.795330286026001, -4.290556907653809], + [2.9681549072265625, -6.209050178527832], + [-5.201711177825928, -3.928781747817993], + [-7.7538347244262695, -0.10322010517120361], + [1.936532974243164, 5.5784101486206055], + [4.171182155609131, -2.9582884311676025], + [5.780905485153198e-5, 12.095098495483398], + [-0.18678238987922668, -1.6298924684524536], + [0.5638247728347778, -0.9094830751419067], + [-1.33394193649292, -0.3672015070915222], + [1.6305935382843018, 2.0114409923553467], + [-0.12380481511354446, 9.98205280303955], + [-1.1532909870147705, -3.2144248485565186], + [0.0008730217814445496, 14.03493881225586], + [3.408712863922119, 7.086600303649902], + [-2.0690886974334717, 2.36519455909729], + [2.7817118167877197, -0.13999369740486145], + [9.770684242248535, -2.3411035537719727], + [3.6945016384124756, -2.675492286682129], + [-2.2794883251190186, 2.132880926132202], + [1.2449878454208374, -7.206367492675781], + [0.00835435837507248, 12.291804313659668], + [2.1320221424102783, 1.6809555292129517], + [-5.845247268676758, 7.795635223388672], + [0.2782612442970276, 11.79842758178711], + [9.179132461547852, -2.365143060684204], + [4.605931758880615, 6.911996841430664], + [3.559001922607422, -4.085444927215576], + [-4.723076820373535, -7.367653846740723], + [-5.440135955810547, 4.997525215148926], + [4.933607578277588, -3.376436710357666], + [-5.58207368850708, 4.169595241546631], + [6.803872585296631, 8.75938606262207], + [-1.795839786529541, -4.449220180511475], + [1.2171224355697632, 5.751703262329102], + [-2.0877673625946045, 2.6990511417388916], + [-7.580976963043213, -0.6917769908905029], + [-1.539725422859192, 2.1439850330352783], + [8.173038482666016, -2.1566054821014404], + [-2.380300760269165, -4.109010219573975], + [1.0644948482513428, -7.216099739074707], + [-1.5083427429199219, -0.7519541382789612], + [2.70249342918396, 4.2038774490356445], + [-4.391580581665039, -2.423234224319458], + [6.869496822357178, -2.8409507274627686], + [4.430657386779785, 1.4918876886367798], + [-5.586647033691406, 8.238933563232422], + [2.5199973583221436, 4.793373107910156], + [8.926962852478027, -2.3171536922454834], + [5.883056163787842, -1.2666016817092896], + [-2.913691282272339, -1.1318103075027466], + [-1.7549490928649902, 2.3171348571777344], + [4.850236892700195, -2.1559345722198486], + [5.965665340423584, 7.661445617675781], + [-5.310883045196533, 5.94858980178833], + [8.721881866455078, -2.268650770187378], + [2.4513087272644043, -8.682594299316406], + [3.3331105709075928, 6.493892669677734], + [-1.5021731853485107, 1.4419456720352173], + [-4.98707914352417, -7.068775653839111], + [-1.243409514427185, 3.8038740158081055], + [-3.5923545360565186, 5.479020595550537], + [8.178906440734863, -2.2689015865325928], + [-1.9358729124069214, 2.210686683654785], + [-4.755472183227539, -1.8983433246612549], + [0.25375229120254517, 10.700191497802734], + [9.609869956970215, -2.501411199569702], + [-2.0670430660247803, 2.4392073154449463], + [9.857373237609863, -2.4148054122924805], + [-5.63397216796875, 6.381474494934082], + [-0.41464680433273315, -1.7421447038650513], + [-1.880715250968933, 1.973138451576233], + [-6.807494163513184, 7.271456718444824], + [8.382458686828613, -2.1488230228424072], + [2.7011513710021973, 6.047347545623779], + [0.19043177366256714, 10.65792179107666], + [3.8495681285858154, 1.517478108406067], + [6.802305698394775, 8.203761100769043], + [-5.830454349517822, 6.6222357749938965], + [-2.5436675548553467, 2.217729330062866], + [6.836707592010498, 8.346101760864258], + [-2.573593854904175, 1.8200137615203857], + [0.039615146815776825, 12.375722885131836], + [-4.957246780395508, 7.218658447265625], + [-6.845949649810791, -0.21656465530395508], + [0.5450944304466248, -3.8051042556762695], + [-3.2957653999328613, -2.3715364933013916], + [-2.2232956886291504, 2.3370935916900635], + [4.741445064544678, -8.459335327148438], + [-7.805391788482666, -0.9045962691307068], + [10.094395637512207, -2.5204648971557617], + [-5.488447666168213, 6.005052089691162], + [0.939033567905426, -7.485886573791504], + [2.488431215286255, -7.083410739898682], + [1.271573781967163, 1.247247338294983], + [-0.6289774179458618, 0.4298986792564392], + [6.36225700378418, -3.109633207321167], + [-0.0708608403801918, -0.728289008140564], + [0.01212119311094284, 12.784948348999023], + [-6.554092884063721, 4.901925086975098], + [-2.361114263534546, 2.1411547660827637], + [-2.1935641765594482, 2.4318535327911377], + [3.451676607131958, -3.8338394165039062], + [4.118495464324951, 1.8685694932937622], + [-3.9143848419189453, -2.164698600769043], + [-0.06738574057817459, 9.700100898742676], + [-0.9180687665939331, 1.2431286573410034], + [-0.1359735131263733, -1.6873875856399536], + [4.180897235870361, -8.039368629455566], + [-2.18045973777771, 2.875836133956909], + [-5.581949710845947, 0.2964056134223938], + [-4.139617443084717, 4.338596343994141], + [-5.082042217254639, -2.264423370361328], + [-2.7397358417510986, -2.8429067134857178], + [2.274616003036499, 1.9244440793991089], + [-2.6951329708099365, -2.1599700450897217], + [2.425703763961792, 5.875158786773682], + [3.7805707454681396, -4.142533779144287], + [-3.8140885829925537, -3.820840835571289], + [-4.922139644622803, 7.122983932495117], + [-2.691685438156128, -5.124103546142578], + [0.4785172939300537, 0.4349135160446167], + [3.0146868228912354, -3.1932764053344727], + [-4.651248455047607, -0.6958423852920532], + [-4.477327346801758, 4.321865558624268], + [-3.7674643993377686, -5.663203716278076], + [2.8313114643096924, -4.033823490142822], + [0.007127217948436737, 10.02810287475586], + [-7.882509231567383, 0.46026480197906494], + [1.175577163696289, 10.323991775512695], + [4.479711055755615, 5.796147346496582], + [-4.9457478523254395, -3.4065897464752197], + [-4.472893714904785, -5.01425838470459], + [0.05412750691175461, 10.79355239868164], + [1.3117659091949463, -7.2037353515625], + [-3.996441125869751, -4.5093889236450195], + [0.06985067576169968, 9.539666175842285], + [9.48829174041748, -2.351391077041626], + [-4.3362298011779785, -4.203005313873291], + [5.629908084869385, -3.066645383834839], + [9.060192108154297, -2.340869665145874], + [-5.0878777503967285, 4.7464752197265625], + [1.2182964086532593, -0.5078760981559753], + [-1.7750227451324463, 1.7260147333145142], + [8.550623893737793, -2.3257529735565186], + [9.569009780883789, -2.3447494506835938], + [0.23537343740463257, 12.178698539733887], + [5.211090564727783, 7.6445817947387695], + [-6.114952564239502, 1.7909423112869263], + [1.1855688095092773, 0.43142133951187134], + [3.6865503787994385, -7.614592552185059], + [-0.09192318469285965, 13.69783878326416], + [-1.530586838722229, 2.1082587242126465], + [2.4755947589874268, -5.758370399475098], + [2.4346115589141846, -8.10002326965332], + [-0.20478397607803345, 10.417092323303223], + [3.279763698577881, -7.649588584899902], + [-3.6406595706939697, -5.218534469604492], + [-3.201629877090454, 4.414061069488525], + [2.550741672515869, -3.4449329376220703], + [2.7765650749206543, -3.537973165512085], + [9.21695613861084, -2.5834920406341553], + [2.7429561614990234, -10.002880096435547], + [6.741700649261475, -1.341345191001892], + [7.938207149505615, -2.0061628818511963], + [-4.699699878692627, -4.7960405349731445], + [-2.077038526535034, 2.565202236175537], + [-5.7526373863220215, 6.6861419677734375], + [-0.33069467544555664, -1.6658638715744019], + [-3.94777774810791, 4.282281875610352], + [2.666020154953003, 0.6338235139846802], + [4.55380392074585, 7.460757255554199], + [0.5876704454421997, -5.883810043334961], + [2.341348171234131, -8.186177253723145], + [-6.580501079559326, -1.2968616485595703], + [3.0014078617095947, 5.234799385070801], + [2.8908028602600098, -9.842281341552734], + [-1.912853717803955, -0.09322676062583923], + [-2.119049310684204, 2.5523488521575928], + [0.138362318277359, -4.830232620239258], + [3.726871967315674, -7.865539073944092], + [-1.8565517663955688, 2.545539379119873], + [4.226748943328857, -5.25620174407959], + [3.899182081222534, -3.5444717407226562], + [-4.379040241241455, -0.8026180863380432], + [-7.756682872772217, -0.6912602186203003], + [1.5987108945846558, 1.4751454591751099], + [2.07269024848938, -2.956735372543335], + [-0.6069712042808533, -2.583113431930542], + [-2.448831796646118, 2.467559337615967], + [-4.563774108886719, 5.165539741516113], + [-0.009285636246204376, 14.039817810058594], + [4.048112392425537, 2.054663896560669], + [10.06184196472168, -2.4600603580474854], + [0.0652768537402153, -1.5423442125320435], + [-6.681580066680908, 8.100775718688965], + [6.797266483306885, 8.236791610717773], + [3.522362470626831, 6.460248947143555], + [3.2963974475860596, -4.4745941162109375], + [-3.889575242996216, -2.619593381881714], + [0.019497744739055634, 12.391959190368652], + [-4.310134410858154, 6.0228047370910645], + [-4.644886493682861, -3.6474411487579346], + [-2.7339727878570557, 1.9120594263076782], + [-2.0265350341796875, -3.509971857070923], + [7.6143059730529785, -3.736193895339966], + [7.645492076873779, -2.636723279953003], + [0.6726625561714172, -0.8397268056869507], + [3.748514413833618, -7.528213977813721], + [-0.04585731774568558, 12.215583801269531], + [-5.494845867156982, 4.275475025177002], + [8.225301742553711, -2.1879451274871826], + [-5.626941204071045, 4.214232444763184], + [-8.26628589630127, -0.9171976447105408], + [0.08763807266950607, 10.192731857299805], + [2.081766366958618, -3.315878391265869], + [-1.9030110836029053, -3.9133970737457275], + [-3.0535638332366943, 0.9281300902366638], + [9.560837745666504, -2.496096611022949], + [9.574353218078613, -2.418950319290161], + [1.6880621910095215, -7.970417022705078], + [-2.13901424407959, 2.400256872177124], + [5.5246901512146, 7.567084312438965], + [-4.156482219696045, -6.288383960723877], + [-3.7879912853240967, -6.040545463562012], + [0.24895942211151123, -1.293074607849121], + [0.14680618047714233, 10.287546157836914], + [2.2060112953186035, 5.414686679840088], + [3.910595178604126, 1.196341633796692], + [-1.1630533933639526, 1.575404405593872], + [-5.041916370391846, 5.626358509063721], + [-3.608469247817993, 6.094203472137451], + [-2.738060712814331, 5.980006217956543], + [-0.8703685998916626, 10.196889877319336], + [5.283200740814209, 6.825894832611084], + [-2.9524619579315186, -4.230404853820801], + [-0.04838878661394119, 10.099623680114746], + [8.429229736328125, -2.2872958183288574], + [-5.658253192901611, 1.9216482639312744], + [3.2576611042022705, -4.6525163650512695], + [-2.1255202293395996, 2.709956169128418], + [1.9193499088287354, 1.4391080141067505], + [-4.059150218963623, 2.817108392715454], + [6.311336040496826, 7.833741664886475], + [0.04219131916761398, 9.224084854125977], + [-4.099000453948975, 5.621720790863037], + [-6.684858798980713, -1.8112496137619019], + [2.720566511154175, 0.36131608486175537], + [3.6667540073394775, -2.029465436935425], + [0.49487656354904175, -0.9922086000442505], + [3.4477274417877197, -4.514128684997559], + [1.9234848022460938, 4.917168140411377], + [-5.403285026550293, 6.174056053161621], + [6.036621570587158, 7.819963455200195], + [4.894693851470947, -2.7309932708740234], + [-6.591048717498779, 7.932950973510742], + [-4.642608165740967, -6.360189437866211], + [0.05181356519460678, -1.4527677297592163], + [3.038285493850708, -3.1590683460235596], + [-2.5155460834503174, -0.5740357637405396], + [6.984043598175049, -1.3007606267929077], + [-2.1094272136688232, 2.502020835876465], + [-3.8401834964752197, -2.399184465408325], + [-4.699265480041504, -6.363368034362793], + [3.9255640506744385, 1.4805008172988892], + [-5.6854023933410645, 6.635634422302246], + [3.6131513118743896, 5.135649681091309], + [-2.188527822494507, 2.837791681289673], + [0.5777570605278015, -1.0863007307052612], + [0.39004236459732056, 9.807336807250977], + [-4.255412578582764, 2.191906690597534], + [-5.229112148284912, -1.1426727771759033], + [-4.053398132324219, -2.3817431926727295], + [5.8469319343566895, 7.710958957672119], + [-2.647608757019043, -2.785979986190796], + [0.2493874430656433, 10.72265625], + [1.8464590311050415, 5.506252765655518], + [-2.039097309112549, 2.376214027404785], + [-5.042224884033203, 5.324782848358154], + [-2.172485828399658, 4.181215286254883], + [5.539726257324219, 7.596658706665039], + [2.8270742893218994, -4.008360385894775], + [3.152390241622925, 1.2477811574935913], + [3.339146375656128, -9.096379280090332], + [1.677314043045044, -7.042112350463867], + [-3.5531246662139893, 3.6723334789276123], + [6.537469387054443, 7.959824562072754], + [-5.663508892059326, -0.6417439579963684], + [5.346046447753906, -3.6872353553771973], + [-3.075805425643921, 5.349984169006348], + [4.547973155975342, 6.890676498413086], + [-5.02824592590332, -3.8282692432403564], + [4.409053325653076, -3.6375107765197754], + [-2.1671977043151855, 2.8381712436676025], + [2.8921611309051514, -4.013258934020996], + [-0.035550184547901154, 9.536701202392578], + [9.167732238769531, -2.3791112899780273], + [4.713013648986816, 7.439800262451172], + [2.1805150508880615, -6.764150619506836], + [-4.409732341766357, -6.659671783447266], + [-0.3607997000217438, -1.9876121282577515], + [6.05128812789917, 7.887821197509766], + [-1.6633285284042358, 0.7315641045570374], + [2.878638744354248, 5.228338241577148], + [-5.380248069763184, 6.471197605133057], + [11.645634651184082, -2.569385290145874], + [4.999472141265869, 6.457707405090332], + [-4.686959743499756, 4.141050338745117], + [-2.5898795127868652, 1.861568808555603], + [2.5347440242767334, -3.1576087474823], + [-3.492586135864258, -5.872278213500977], + [6.050685405731201, -1.2316919565200806], + [1.174515724182129, 1.2586039304733276], + [-4.187675476074219, -7.048228740692139], + [-0.05533451586961746, 9.30090045928955], + [-4.01116943359375, 4.159430503845215], + [6.2547221183776855, 7.582491397857666], + [6.459240436553955, 7.8282999992370605], + [-2.0124764442443848, 2.489654779434204], + [8.297293663024902, -2.268392324447632], + [-4.1920623779296875, 3.0917675495147705], + [3.1283180713653564, -4.459973335266113], + [0.9561414122581482, 0.682980477809906], + [3.162775754928589, -8.892964363098145], + [3.9850013256073, -0.275454044342041], + [4.5141119956970215, 7.177880764007568], + [8.218523025512695, -2.1563689708709717], + [2.648146152496338, 2.4366471767425537], + [2.7790849208831787, 5.8125762939453125], + [2.7807719707489014, -1.0790730714797974], + [-0.040445394814014435, 10.162071228027344], + [2.2089691162109375, 3.463183879852295], + [-2.2545180320739746, 2.2318308353424072], + [4.0352983474731445, -8.528327941894531], + [5.8486409187316895, 7.481008529663086], + [-3.883300542831421, 0.42273038625717163], + [-3.936933994293213, -1.0678528547286987], + [-3.0619146823883057, -2.498281717300415], + [1.7618545293807983, 0.010797929018735886], + [6.667705059051514, -1.953498363494873], + [-3.987056016921997, 2.8915629386901855], + [-4.393099308013916, -4.240383148193359], + [-4.465376377105713, 4.74428653717041], + [4.049920558929443, -8.179893493652344], + [-2.2617013454437256, 2.305762767791748], + [4.498308181762695, -3.330472230911255], + [5.230215549468994, 7.604356288909912], + [-7.130016803741455, -0.023875121027231216], + [-2.3578684329986572, 2.3150200843811035], + [2.8799991607666016, -6.27669620513916], + [2.1518404483795166, -8.166163444519043], + [9.138270378112793, -2.3545448780059814], + [6.410985469818115, 7.695796966552734], + [-2.0362257957458496, 2.8143043518066406], + [-6.257073879241943, -0.6633591651916504], + [-3.8013956546783447, -3.181349992752075], + [5.246175289154053, -4.657316207885742], + [-2.7942349910736084, -4.107088088989258], + [1.7477878332138062, 5.606369495391846], + [9.591938972473145, -2.3729798793792725], + [-4.192451477050781, -3.5333733558654785], + [2.3678247928619385, 4.64714241027832], + [5.706210613250732, 7.5318827629089355], + [2.4739930629730225, 2.876720666885376], + [-6.449293613433838, -1.7282037734985352], + [-3.793945550918579, -2.584084987640381], + [-1.3438944816589355, 5.369067668914795], + [8.416053771972656, -2.2692878246307373], + [-2.1857047080993652, 2.5326690673828125], + [0.159160315990448, 10.620614051818848], + [-7.101055145263672, 0.16844689846038818], + [-6.283448696136475, 7.15963077545166], + [5.845526695251465, 7.178295135498047], + [2.0190491676330566, 1.0884274244308472], + [-2.3974549770355225, 5.72206449508667], + [-5.896416664123535, -1.1686229705810547], + [-7.139122486114502, -0.45777708292007446], + [3.486372947692871, -6.402183532714844], + [2.807164192199707, -4.656109809875488], + [1.6751503944396973, 5.627701759338379], + [-2.348703622817993, 1.7884633541107178], + [-1.6621811389923096, 1.8890109062194824], + [-4.638542652130127, -2.3072731494903564], + [-0.3996152877807617, 0.6473775506019592], + [-3.9437263011932373, -3.122845411300659], + [-4.065909385681152, 5.502728462219238], + [1.6153113842010498, -0.8527302145957947], + [-5.355461120605469, -0.8428678512573242], + [0.026309065520763397, 12.723299026489258], + [2.8869221210479736, -8.841550827026367], + [9.18465518951416, -2.324528694152832], + [-3.0189740657806396, 1.9281377792358398], + [-6.002774715423584, 6.9543867111206055], + [-2.777376651763916, 4.247189521789551], + [0.5556853413581848, -1.0740200281143188], + [-0.8837698101997375, -3.471733331680298], + [1.5142573118209839, 1.6532007455825806], + [3.652045965194702, -6.262937545776367], + [1.000852346420288, -6.363610744476318], + [-4.398131370544434, -4.381963729858398], + [7.4048171043396, 8.795368194580078], + [1.1016511917114258, 0.036601271480321884], + [-3.378631591796875, -2.6041042804718018], + [0.08320062607526779, 12.493408203125], + [-2.546532392501831, 2.0349349975585938], + [10.29042911529541, -2.5702645778656006], + [2.343345880508423, -6.121762275695801], + [4.187867641448975, -3.5973739624023438], + [-0.2756156325340271, -1.5680111646652222], + [3.1888654232025146, -6.301517009735107], + [-0.10058886557817459, 12.749149322509766], + [3.1263134479522705, -3.76288104057312], + [3.8051862716674805, -4.059600830078125], + [-2.1646742820739746, 2.873791217803955], + [3.8621177673339844, 1.599340796470642], + [-3.2687950134277344, -2.8044426441192627], + [-4.026363372802734, 4.214877128601074], + [-4.267322540283203, -3.3630502223968506], + [3.581064462661743, 1.4574545621871948], + [0.17645686864852905, 10.326202392578125], + [4.3810954093933105, -4.361311912536621], + [-1.9848346710205078, 2.384223461151123], + [-4.18071985244751, -5.851271629333496], + [10.203452110290527, -2.43520450592041], + [8.309966087341309, -2.298339366912842], + [1.8588745594024658, 4.482069492340088], + [5.412239074707031, -3.1802947521209717], + [0.5011829733848572, 4.333845615386963], + [0.5926290154457092, -1.1346824169158936], + [-6.761719226837158, -0.09635519981384277], + [2.530416250228882, -9.501361846923828], + [2.8651695251464844, -4.071976661682129], + [-4.9870076179504395, 6.181794166564941], + [-2.3621323108673096, 1.2423501014709473], + [-5.105323791503906, 5.291655540466309], + [-2.071178436279297, 2.102479934692383], + [0.5920013785362244, 11.375680923461914], + [9.1867036819458, -2.4425978660583496], + [2.4118571281433105, -1.0118762254714966], + [0.18847376108169556, 10.965667724609375], + [4.094665050506592, 1.5761874914169312], + [4.5273518562316895, -1.6314114332199097], + [8.34450626373291, -2.296963691711426], + [2.960024118423462, -9.26863956451416], + [2.575801372528076, 8.715665817260742], + [2.883641481399536, -9.106904029846191], + [7.9370951652526855, -2.1199722290039062], + [3.0378921031951904, -4.323112487792969], + [0.05549376457929611, 12.158838272094727], + [-5.452925205230713, -2.560619592666626], + [0.04545288532972336, 9.904868125915527], + [8.52799129486084, -2.2756237983703613], + [2.0729432106018066, 4.859148025512695], + [0.08772652596235275, 11.409003257751465], + [-4.385982990264893, -3.361478090286255], + [-4.487453937530518, -6.849394798278809], + [-2.064960479736328, 2.5362792015075684], + [-1.6669023036956787, 3.391014814376831], + [0.1350211501121521, 11.28367805480957], + [2.321962833404541, -4.123664855957031], + [-2.2001328468322754, 1.7142220735549927], + [-5.273471832275391, 4.736819267272949], + [-2.128310441970825, 0.7514001131057739], + [0.08545129746198654, 9.929924011230469], + [-5.102756977081299, -0.9733298420906067], + [-0.10734621435403824, -1.1348987817764282], + [2.853424310684204, 6.694892883300781], + [2.6820790767669678, -7.589876174926758], + [3.236845016479492, -7.826848983764648], + [-3.668816089630127, -1.7946079969406128], + [-3.8542230129241943, 0.40397220849990845], + [3.867452383041382, 0.44310247898101807], + [9.036640167236328, -2.3401782512664795], + [9.202997207641602, -2.7716801166534424], + [-1.6353931427001953, -3.8493311405181885], + [-1.8793816566467285, 2.2636845111846924], + [-1.7220090627670288, 2.0091848373413086], + [-4.039480686187744, -4.529633045196533], + [-4.13079309463501, -6.032308578491211], + [-2.2177059650421143, 0.6412866115570068], + [-1.44624662399292, 6.014128684997559], + [5.893169403076172, -1.2795706987380981], + [3.0057458877563477, -6.903345108032227], + [4.619129180908203, -2.4994957447052], + [3.1355700492858887, 1.5607171058654785], + [7.203906059265137, -2.853006601333618], + [5.544891834259033, -0.7397308349609375], + [-3.3450329303741455, -5.486454010009766], + [8.193585395812988, -2.221233606338501], + [0.006660036742687225, 13.341056823730469], + [-2.718745708465576, 6.568120956420898], + [3.5085489749908447, -9.253116607666016], + [2.384237051010132, 5.886733055114746], + [-2.276901960372925, -1.9778608083724976], + [-2.0179221630096436, -0.9864199161529541], + [-1.4927105903625488, 1.6096099615097046], + [-0.706720769405365, -3.8290951251983643], + [4.144759178161621, -3.4085521697998047], + [3.1472442150115967, -4.250370025634766], + [4.190517902374268, -7.268135070800781], + [-5.093336582183838, 4.685492038726807], + [5.419325351715088, 6.629638195037842], + [5.076100826263428, 7.3367767333984375], + [-3.274500608444214, -4.56546688079834], + [-5.08810567855835, -2.0369603633880615], + [3.366553544998169, 1.9383715391159058], + [-2.446878671646118, 2.0542430877685547], + [11.099143028259277, -2.432945489883423], + [5.065886974334717, -3.561079978942871], + [-4.970622539520264, -2.0473828315734863], + [-4.6237263679504395, -7.891824722290039], + [-0.14589089155197144, 13.366219520568848], + [2.381931781768799, -6.617938041687012], + [4.906239986419678, -1.192463994026184], + [-1.8991611003875732, 2.342787742614746], + [2.3519084453582764, -6.958695888519287], + [0.0703204795718193, 9.359379768371582], + [0.27188241481781006, 12.05703067779541], + [1.9650049209594727, 0.5096182823181152], + [-2.707555055618286, 1.9551984071731567], + [4.608922481536865, -3.6007144451141357], + [6.116735935211182, 7.668530464172363], + [-6.863988399505615, -0.005616072565317154], + [2.8135311603546143, -6.773473739624023], + [-2.2781245708465576, -4.5629143714904785], + [2.6176064014434814, 3.7417566776275635], + [9.281388282775879, -2.41247820854187], + [4.661402225494385, 6.616719722747803], + [-1.9010810852050781, 1.312860131263733], + [6.436413764953613, 7.90634822845459], + [5.09596586227417, 6.944816589355469], + [-0.05633104592561722, 9.798062324523926], + [-1.9684761762619019, 1.7725659608840942], + [-3.582597017288208, -5.575831413269043], + [6.004336833953857, 7.519652366638184], + [2.671144723892212, 6.204909324645996], + [4.866179466247559, -3.404346466064453], + [4.086939334869385, 1.7130926847457886], + [-1.3220937252044678, -0.34597617387771606], + [-2.083289384841919, 2.025761127471924], + [-1.2755354642868042, -0.4850097596645355], + [1.517282247543335, -7.804896831512451], + [2.858006000518799, -3.919739246368408], + [6.154168605804443, -3.6665570735931396], + [-2.5231738090515137, 1.6897505521774292], + [0.053845278918743134, 9.75047492980957], + [7.8209228515625, -2.196112871170044], + [-1.4873597621917725, -4.12148380279541], + [5.7696404457092285, 7.492373943328857], + [-0.011804528534412384, 12.428969383239746], + [-7.187479496002197, 8.571578979492188], + [-2.6847987174987793, -4.897339820861816], + [2.297511339187622, 1.7685216665267944], + [2.9846303462982178, -4.210989952087402], + [0.6553660035133362, 0.28580862283706665], + [3.2241477966308594, -4.709095001220703], + [-2.102207899093628, 2.3747470378875732], + [5.814798831939697, 7.762514114379883], + [-1.4905548095703125, -0.6128271818161011], + [0.023162178695201874, 11.672274589538574], + [-0.978995680809021, 1.640324592590332], + [-4.998152732849121, -5.324035167694092], + [-3.4320573806762695, -0.21922844648361206], + [2.3881399631500244, 5.6082868576049805], + [6.300088405609131, -1.3905431032180786], + [-3.619398832321167, -1.5626503229141235], + [0.0279955193400383, 11.925294876098633], + [-4.861087799072266, -2.1355350017547607], + [2.551711082458496, -3.663665533065796], + [3.635791063308716, -3.826589822769165], + [-7.549087047576904, -0.6813347339630127], + [3.1310667991638184, -2.631213426589966], + [-2.400541305541992, 2.8389194011688232], + [-2.255819082260132, 2.9961838722229004], + [-4.357213497161865, -6.201274871826172], + [2.44602632522583, 4.006893157958984], + [5.1823410987854, -3.3605315685272217], + [-4.620039463043213, -3.1791346073150635], + [0.23678332567214966, 10.945557594299316], + [0.08071178942918777, -1.4081056118011475], + [-2.006931781768799, 2.268801689147949], + [0.8952393531799316, -3.6598403453826904], + [0.770388126373291, 0.39444607496261597], + [3.1185052394866943, -4.290584564208984], + [6.892641544342041, 8.578596115112305], + [-1.9614830017089844, -3.496478319168091], + [4.514903545379639, -4.0064311027526855], + [-4.968417644500732, -3.1356303691864014], + [-2.1997292041778564, 2.1971261501312256], + [-7.147252082824707, 8.444890022277832], + [5.9285125732421875, 7.402184009552002], + [7.892609119415283, -2.1382362842559814], + [-5.910960674285889, 0.43456554412841797], + [0.6696714162826538, 2.725585699081421], + [0.23677057027816772, 11.816433906555176], + [-4.5521769523620605, -7.0457658767700195], + [3.384330987930298, 1.5654897689819336], + [3.652280569076538, -3.086597442626953], + [2.0514957904815674, 0.5773049592971802], + [6.7501444816589355, -1.3323440551757812], + [-0.07664734870195389, 12.033205032348633], + [-1.9234000444412231, 2.4770355224609375], + [-2.1950674057006836, 1.4763001203536987], + [2.335317850112915, -1.1346434354782104], + [5.660251140594482, 7.564112663269043], + [3.4231584072113037, -4.812325477600098], + [1.5626912117004395, 4.381017208099365], + [-2.1495089530944824, 2.520974636077881], + [5.942967414855957, -1.862344741821289], + [5.1110405921936035, 6.5888590812683105], + [4.209399700164795, -3.6280996799468994], + [0.2532607913017273, 11.041452407836914], + [2.553945302963257, 4.068464279174805], + [2.705151081085205, -8.620429992675781], + [8.480380058288574, -2.2440319061279297], + [6.043192386627197, -2.706709861755371], + [4.369873523712158, 1.289138913154602], + [4.242189407348633, 6.880834102630615], + [-6.514846324920654, 7.540772914886475], + [-3.6212151050567627, 4.998280048370361], + [-4.6857686042785645, 5.054343223571777], + [-1.291359543800354, 1.3034292459487915], + [-2.183241605758667, 2.0789787769317627], + [4.3447747230529785, 1.9735180139541626], + [-6.248257637023926, 7.298947811126709], + [8.189711570739746, -2.2476565837860107], + [5.0498552322387695, -4.330727577209473], + [-4.919244289398193, -1.7438758611679077], + [3.6204886436462402, -3.498629570007324], + [-5.655036449432373, -0.8903341889381409], + [-1.4670861959457397, -3.3036062717437744], + [0.020091526210308075, 9.076310157775879], + [-0.32361146807670593, 5.115757942199707], + [-3.535064220428467, -4.783402442932129], + [2.4904377460479736, 5.777144908905029], + [-6.724137783050537, 0.9989112615585327], + [2.5270321369171143, 2.0797998905181885], + [-0.9567840099334717, -3.519749164581299], + [2.27834153175354, -7.718780040740967], + [3.866905927658081, 6.194916725158691], + [6.85171365737915, -4.358132839202881], + [7.944916248321533, -2.220491409301758], + [4.333705902099609, -3.2350356578826904], + [-4.462825298309326, 4.931466102600098], + [-1.6538753509521484, 1.793623685836792], + [-2.513822555541992, 1.9382613897323608], + [-2.193763256072998, -3.496523141860962], + [2.535301923751831, -7.583578109741211], + [-4.012312889099121, -4.331787109375], + [0.2698536515235901, 11.412211418151855], + [7.819459438323975, -1.8461850881576538], + [0.16261893510818481, 10.025821685791016], + [-3.891690254211426, -1.0201454162597656], + [-1.488484501838684, -2.813969612121582], + [-4.676345348358154, -7.3939433097839355], + [-0.3558809459209442, 0.8327000141143799], + [-2.250310182571411, -1.0436222553253174], + [-6.379222393035889, 7.295754909515381], + [-4.7107014656066895, -7.34043550491333], + [-6.39453649520874, 7.372149467468262], + [3.686335802078247, -2.2309043407440186], + [-0.8238851428031921, -0.5365599989891052], + [4.561234951019287, -4.30114221572876], + [-6.786154270172119, -0.7256615161895752], + [-0.15662670135498047, -1.5620919466018677], + [-0.020088978111743927, 13.039369583129883], + [4.068467617034912, 1.6812901496887207], + [7.411831855773926, -1.6657947301864624], + [2.2381467819213867, 4.738500595092773], + [0.20959866046905518, 9.834632873535156], + [7.6612772941589355, -1.8324785232543945], + [-5.927316188812256, 6.761990547180176], + [-1.4565494060516357, 1.0070359706878662], + [4.016012191772461, 7.160815238952637], + [0.07311556488275528, -3.419274091720581], + [5.871711254119873, -4.281742095947266], + [0.10100620239973068, 9.974864959716797], + [-6.0335822105407715, 7.014918804168701], + [2.982670783996582, -4.224636077880859], + [0.4525783658027649, 10.090246200561523], + [8.174842834472656, -2.2638790607452393], + [2.222214460372925, 1.7111680507659912], + [-4.877633571624756, -1.6476200819015503], + [9.909011840820312, -2.563817262649536], + [2.6248345375061035, -7.354884624481201], + [-0.4045666456222534, -1.8181971311569214], + [8.386191368103027, -2.1708319187164307], + [-4.003933429718018, 4.992014408111572], + [4.996562480926514, -0.8856610655784607], + [3.815478563308716, -5.97116756439209], + [-5.888556957244873, 5.84016227722168], + [-2.871657609939575, 7.304603576660156], + [4.652881622314453, -3.3670783042907715], + [-3.5226638317108154, -2.958516836166382], + [-5.414796352386475, -1.063012719154358], + [0.0012648627161979675, 9.946355819702148], + [2.4334309101104736, -4.53749942779541], + [3.757276773452759, 1.4441277980804443], + [2.188932180404663, 5.0848307609558105], + [2.739349603652954, -7.503973960876465], + [2.708791494369507, -7.904720306396484], + [0.77060467004776, 2.0540072917938232], + [-0.05038989335298538, 9.643774032592773], + [1.7136647701263428, -6.958558082580566], + [-6.111368656158447, 7.63162899017334], + [6.492886543273926, 8.332704544067383], + [0.4172099232673645, 5.026158332824707], + [2.4459056854248047, 1.2925981283187866], + [0.23722803592681885, 11.106895446777344], + [1.6750199794769287, -5.955894470214844], + [-7.772006511688232, 0.007483121007680893], + [0.16397446393966675, 9.938859939575195], + [-2.555208683013916, 7.056648254394531], + [0.15865319967269897, 10.226236343383789], + [7.8686842918396, -2.1008353233337402], + [6.135636806488037, 7.727142333984375], + [-3.2357776165008545, 0.3835197687149048], + [7.485348224639893, -1.8511499166488647], + [1.7010703086853027, 5.975203990936279], + [-1.6093652248382568, 0.33693939447402954], + [-5.439078330993652, 7.612171173095703], + [5.267858982086182, 7.152075290679932], + [3.8974571228027344, -3.7218635082244873], + [-6.59496545791626, 8.054911613464355], + [3.785977602005005, 1.829256296157837], + [-4.006539821624756, -5.09686279296875], + [2.1003048419952393, 2.8620617389678955], + [1.689293622970581, -7.456732749938965], + [2.8998448848724365, -3.723693370819092], + [2.8757102489471436, 6.5744524002075195], + [-4.01220703125, 5.1890106201171875], + [7.686227321624756, -1.9316879510879517], + [2.963153600692749, -7.117510795593262], + [-2.1567885875701904, 2.3768973350524902], + [2.1272995471954346, -7.85207986831665], + [0.11778395622968674, 11.678874969482422], + [-0.3175685405731201, -1.8421353101730347], + [-4.073369026184082, -6.629478454589844], + [-4.490551471710205, -5.62193489074707], + [5.907288074493408, -1.3206382989883423], + [5.107651233673096, 7.393754482269287], + [-2.375601053237915, -4.0312652587890625], + [1.5660548210144043, 5.472088813781738], + [-0.08233765512704849, -1.6946988105773926], + [4.567116737365723, -3.3904716968536377], + [-3.0647103786468506, -4.668735504150391], + [-2.0318586826324463, 2.4428799152374268], + [-0.05403590947389603, 11.780967712402344], + [6.114802360534668, 7.921064376831055], + [0.14674252271652222, 10.116589546203613], + [-0.20688849687576294, -1.667495846748352], + [0.19602328538894653, 11.408870697021484], + [2.4018373489379883, -8.927122116088867], + [1.1576991081237793, -7.074034690856934], + [4.100601673126221, -4.161842346191406], + [3.635864734649658, -3.1428279876708984], + [3.658820867538452, 1.8023178577423096], + [3.791959047317505, -3.524271011352539], + [-3.533904790878296, -6.040062427520752], + [-2.0805296897888184, 1.1264108419418335], + [1.5425477027893066, 2.401293992996216], + [-4.796098709106445, -2.6823925971984863], + [-4.267777919769287, -6.1301116943359375], + [-3.538609743118286, 5.47646951675415], + [7.952076435089111, -2.320157289505005], + [-6.112452030181885, 7.493768692016602], + [-1.2545273303985596, 2.026961326599121], + [2.1392109394073486, 4.851346969604492], + [0.17222100496292114, 10.507823944091797], + [4.753836154937744, -3.6285502910614014], + [-4.415139675140381, 4.506697654724121], + [7.391781330108643, -1.7967628240585327], + [-2.098470687866211, 2.6011266708374023], + [-4.788991451263428, 5.104162216186523], + [-6.171428203582764, -1.4528095722198486], + [3.4052159786224365, -3.1842293739318848], + [2.11220383644104, 1.7707303762435913], + [8.838491439819336, -2.452476739883423], + [-2.1693596839904785, -0.6126980185508728], + [-1.4311718940734863, 1.8895453214645386], + [-3.7581822872161865, -6.465762615203857], + [2.7972471714019775, 5.857097625732422], + [2.600463628768921, -8.503955841064453], + [2.0202934741973877, 4.519809246063232], + [-4.399500370025635, -2.1266939640045166], + [0.08343010395765305, 11.80138874053955], + [-1.8120908737182617, 0.9377226233482361], + [3.6957483291625977, -3.085941791534424], + [2.059955358505249, 1.1257210969924927], + [2.0470523834228516, 1.7655664682388306], + [5.231892108917236, -1.186423420906067], + [-2.138493299484253, 2.653604030609131], + [2.812138319015503, -3.333223342895508], + [2.888921022415161, -2.3249425888061523], + [2.44586443901062, -7.768553256988525], + [1.6801855564117432, -7.5164794921875], + [-2.061114549636841, 2.1511645317077637], + [4.995944499969482, -1.351807951927185], + [0.2548813223838806, 11.380995750427246], + [0.04964631050825119, 12.860610961914062], + [4.768702030181885, 6.9802141189575195], + [-3.862135887145996, -6.321316719055176], + [4.114094257354736, -4.4354963302612305], + [-2.061397075653076, 2.7430949211120605], + [-5.12809419631958, 6.0229644775390625], + [3.47638201713562, 6.792074203491211], + [2.8189287185668945, 0.5365070104598999], + [-2.5646846294403076, 1.7258048057556152], + [-2.588366746902466, 2.0216867923736572], + [2.1485507488250732, -3.140428304672241], + [-2.1686899662017822, 2.216468095779419], + [-2.686891794204712, -3.428779363632202], + [-0.8728773593902588, -3.273850202560425], + [-1.8558558225631714, 2.254960775375366], + [6.450629711151123, 8.191347122192383], + [-4.471317768096924, 4.520644187927246], + [6.29517936706543, 7.827346324920654], + [-2.9178121089935303, -1.5323735475540161], + [3.758136510848999, -5.5487823486328125], + [2.569960355758667, -3.100907325744629], + [9.639408111572266, -2.3789353370666504], + [6.9159932136535645, 8.479774475097656], + [9.226994514465332, -2.3151705265045166], + [3.832223892211914, -2.3020215034484863], + [2.786771535873413, 5.273481369018555], + [-0.2139817178249359, -1.5575765371322632], + [3.798044204711914, -6.367455005645752], + [4.379438400268555, 1.4733343124389648], + [2.622196674346924, 3.5795977115631104], + [-5.501150608062744, -2.405139684677124], + [-4.597836971282959, -0.8844183683395386], + [3.6945409774780273, -3.4500534534454346], + [-5.411814212799072, 5.404876232147217], + [3.43852162361145, -7.378313064575195], + [-5.608628749847412, 7.454334259033203], + [-1.3774281740188599, 0.16291210055351257], + [1.2372949123382568, -6.883404731750488], + [-3.892306089401245, -5.802011489868164], + [-2.7946197986602783, 1.9054971933364868], + [-5.839803695678711, 7.1588826179504395], + [2.1898295879364014, -8.131088256835938], + [3.839136838912964, -3.2223703861236572], + [2.127065420150757, 4.979423999786377], + [-0.14360389113426208, -1.5305383205413818], + [2.6841094493865967, 5.821737766265869], + [-0.09420115500688553, -1.5428498983383179], + [3.3384292125701904, -4.966496467590332], + [3.1662955284118652, -4.5881500244140625], + [2.4306490421295166, 4.808948040008545], + [10.763337135314941, -2.407130479812622], + [2.2308387756347656, 2.591874122619629], + [8.736488342285156, -2.2867634296417236], + [-4.116189002990723, -6.3529229164123535], + [4.4959845542907715, 6.938725471496582], + [-3.3982324600219727, 5.536592483520508], + [-3.4825398921966553, -2.4566121101379395], + [-2.163947582244873, 2.3235554695129395], + [-0.07580751925706863, 13.549521446228027], + [-5.839037895202637, 6.573910713195801], + [-2.5907042026519775, 3.5895919799804688], + [10.304007530212402, -2.4454615116119385], + [7.615650177001953, -4.41430139541626], + [-4.462279319763184, -3.598187208175659], + [-0.06250745803117752, 9.650251388549805], + [2.6175756454467773, 4.738497734069824], + [-2.403663158416748, 2.07141375541687], + [-7.540765285491943, -0.6936521530151367], + [-0.085439033806324, 12.83256721496582], + [-2.3410465717315674, 1.716976523399353], + [2.596719980239868, 1.424975037574768], + [-2.4615886211395264, -4.239468097686768], + [2.338249921798706, 5.186298370361328], + [2.469625473022461, 5.489739418029785], + [1.8416874408721924, -6.931560516357422], + [-5.332211494445801, -3.346082925796509], + [2.4501092433929443, -7.2165117263793945], + [3.2548534870147705, -3.3148012161254883], + [-5.24940299987793, 5.454757213592529], + [0.5623747706413269, -1.1121492385864258], + [-2.9403443336486816, 2.933119535446167], + [-2.4598629474639893, -2.726377010345459], + [-2.351184129714966, 1.8932366371154785], + [0.24092674255371094, 11.075424194335938], + [-2.436505079269409, -1.409921407699585], + [2.872823715209961, -4.029686450958252], + [-5.370175361633301, -5.913998603820801], + [-0.8198047280311584, 0.09127281606197357], + [-2.9959685802459717, -3.4870011806488037], + [2.70977783203125, -5.497649669647217], + [3.076115608215332, -4.3509368896484375], + [1.5499331951141357, -3.527031660079956], + [7.275473117828369, -3.2876880168914795], + [2.9725096225738525, -4.218901634216309], + [-2.460650682449341, -1.9472991228103638], + [9.455719947814941, -2.4277727603912354], + [-4.6894636154174805, -6.777915954589844], + [2.2196052074432373, -0.3450847268104553], + [-3.7951643466949463, -2.425894260406494], + [4.452950954437256, -4.20884895324707], + [-5.139060020446777, 5.952398777008057], + [-2.057307720184326, 2.3976402282714844], + [-7.4295430183410645, -0.4235643148422241], + [-4.387185573577881, -1.1128778457641602], + [-6.663976192474365, -0.237082839012146], + [-0.042950816452503204, 13.672243118286133], + [-5.41880464553833, -0.21156394481658936], + [5.348217487335205, -3.2388064861297607], + [8.122063636779785, -3.001138925552368], + [-5.3791327476501465, -6.233127593994141], + [3.9534151554107666, -3.2910497188568115], + [6.380678653717041, -1.7005032300949097], + [4.564094543457031, -4.536779403686523], + [-8.554459571838379, -0.11801934242248535], + [4.299270153045654, 6.710440635681152], + [10.512120246887207, -2.6811392307281494], + [-4.548681259155273, 6.077937126159668], + [1.8876692056655884, 1.249380111694336], + [2.267179250717163, 5.768410682678223], + [-4.927282810211182, -0.6996898055076599], + [-3.6215310096740723, -2.965571880340576], + [-3.7119829654693604, -3.290630578994751], + [-2.2408690452575684, -2.685310125350952], + [-3.117948532104492, -3.723675489425659], + [2.2083051204681396, 4.527422904968262], + [3.4011194705963135, -8.31075668334961], + [0.18687570095062256, 12.667515754699707], + [1.2309045791625977, 1.6959524154663086], + [0.15033268928527832, 10.042669296264648], + [0.20974934101104736, 12.01880931854248], + [2.0787017345428467, -2.2584714889526367], + [-4.198397159576416, -6.5370635986328125], + [0.44651538133621216, -0.8980268239974976], + [-1.8347883224487305, 0.5221946239471436], + [-4.780982494354248, -3.88910174369812], + [-7.444782733917236, 8.619390487670898], + [-5.263489246368408, 6.026603698730469], + [4.088306427001953, -3.416832685470581], + [-4.751347064971924, -7.357765197753906], + [-3.4696762561798096, -5.501605987548828], + [1.576095461845398, 3.440201759338379], + [-4.025533199310303, -5.922915458679199], + [-4.3997578620910645, -3.6449263095855713], + [-5.297688961029053, -4.019646644592285], + [-4.509411811828613, 4.546909809112549], + [-4.601208209991455, -6.372633934020996], + [0.9971857666969299, 1.6557365655899048], + [0.1378316581249237, -0.9450476169586182], + [9.95621395111084, -2.3724305629730225], + [5.635528087615967, -6.069234371185303], + [3.9952914714813232, -3.46256422996521], + [7.5066094398498535, -2.554734706878662], + [-5.193987846374512, -2.1354620456695557], + [5.97997522354126, 7.658688545227051], + [0.0855129286646843, 11.894549369812012], + [2.906867027282715, -10.09054946899414], + [1.4449186325073242, 5.285383701324463], + [0.1950376033782959, 10.530176162719727], + [0.2197011113166809, 10.747701644897461], + [-1.6830461025238037, -2.811115026473999], + [3.0046017169952393, -8.838189125061035], + [-5.15336275100708, 1.4221597909927368], + [-2.8357603549957275, -3.7827725410461426], + [-2.0370442867279053, 2.4587581157684326], + [2.9561173915863037, -10.056585311889648], + [3.2887651920318604, 0.86215740442276], + [-1.884626865386963, 0.48346471786499023], + [-2.4672136306762695, 0.8143186569213867], + [3.0635507106781006, -7.756363391876221], + [-4.683859825134277, 5.147046089172363], + [-4.126309394836426, -5.069074630737305], + [-1.625619888305664, -1.848910927772522], + [-2.542523145675659, 1.80387282371521], + [-3.802053213119507, -5.568686485290527], + [-1.574110507965088, 2.0621302127838135], + [3.785858392715454, 1.716660976409912], + [-2.325631856918335, -3.569838762283325], + [2.7252490520477295, -8.013529777526855], + [-2.569841146469116, 2.225067377090454], + [0.24318194389343262, 10.838897705078125], + [9.205679893493652, -2.3374311923980713], + [-3.200568199157715, -1.441124439239502], + [-1.4968966245651245, 1.591779351234436], + [4.916545867919922, 6.374919414520264], + [1.9475367069244385, -7.309500217437744], + [-2.1621367931365967, 2.4110872745513916], + [-0.6943452954292297, -2.303748846054077], + [-0.31546545028686523, -0.13573572039604187], + [-2.6452114582061768, 5.707252025604248], + [-3.6398327350616455, -3.7065436840057373], + [-3.5499746799468994, 5.318596839904785], + [7.121462821960449, -1.9566940069198608], + [0.40203210711479187, -2.884631872177124], + [6.67114782333374, -7.301529407501221], + [-7.67445182800293, -0.2822335958480835], + [0.06668823212385178, 10.608749389648438], + [6.520370960235596, 8.169694900512695], + [1.5197811126708984, -0.5873100757598877], + [0.6961265802383423, -5.7205810546875], + [-5.148696422576904, 5.937347412109375], + [-2.212169885635376, 1.184985637664795], + [2.5550239086151123, 2.1019723415374756], + [0.028346173465251923, 9.393399238586426], + [4.147109031677246, -4.562130928039551], + [-2.3679468631744385, 1.3371241092681885], + [-5.211157321929932, -2.302088975906372], + [6.272949695587158, -5.3029375076293945], + [1.991194486618042, 5.206369876861572], + [-3.1827852725982666, -5.213028907775879], + [-3.8960490226745605, -4.815978050231934], + [-2.5664145946502686, -4.657735347747803], + [-4.5721049308776855, -5.562324523925781], + [3.315270185470581, -4.8317365646362305], + [6.064523220062256, 7.653895854949951], + [3.6445369720458984, -3.158721923828125], + [-4.861546039581299, -1.061032772064209], + [-5.08621072769165, -1.3615351915359497], + [-1.9920110702514648, -2.4002020359039307], + [3.695106267929077, -4.897951126098633], + [0.13916045427322388, 11.522178649902344], + [6.751810073852539, 8.134770393371582], + [6.674511432647705, -3.322519302368164], + [-4.2551960945129395, -6.067785263061523], + [5.997391223907471, 7.775647163391113], + [1.6429755687713623, -6.72470760345459], + [6.84428596496582, -2.157599687576294], + [9.108928680419922, -2.4294915199279785], + [-2.97420334815979, -4.471905708312988], + [5.0218939781188965, 8.001502990722656], + [3.5654685497283936, -3.986499786376953], + [7.906261444091797, -2.4700591564178467], + [-1.902883529663086, -3.6112425327301025], + [2.2400200366973877, -7.957997798919678], + [5.688607692718506, 7.819640159606934], + [-4.192483425140381, -3.4018967151641846], + [2.7508933544158936, 7.472609519958496], + [0.02212022989988327, 12.428630828857422], + [2.0304670333862305, -7.670723915100098], + [1.7735742330551147, 3.643378257751465], + [1.159593105316162, 11.771513938903809], + [-6.011525630950928, -2.783071279525757], + [-3.832784652709961, -2.5407845973968506], + [-0.0061994269490242004, 13.869636535644531], + [8.647282600402832, -2.461127519607544], + [3.076197862625122, -5.445330619812012], + [-6.618994235992432, 3.2958593368530273], + [5.610437870025635, 7.051291465759277], + [-3.935960054397583, -3.0558011531829834], + [4.227634906768799, 5.959394931793213], + [-3.8408493995666504, -1.8932112455368042], + [-4.344043254852295, 3.528912305831909], + [-3.3489902019500732, -5.021512508392334], + [0.13281941413879395, 11.169079780578613], + [2.0328733921051025, 5.436629295349121], + [-2.195206880569458, 2.4070019721984863], + [-3.8694517612457275, 5.355346202850342], + [4.122320652008057, 1.6598728895187378], + [8.51661491394043, -2.3962037563323975], + [2.3351047039031982, 4.850425720214844], + [5.490004062652588, 7.081625461578369], + [4.46536922454834, 1.7707103490829468], + [-5.148391246795654, -7.018764019012451], + [3.621351957321167, -3.4263904094696045], + [3.899646520614624, -3.2280309200286865], + [-6.215399265289307, 7.171868324279785], + [0.17503780126571655, 11.142168045043945], + [-2.5042247772216797, 1.9421368837356567], + [-0.058603234589099884, 13.821687698364258], + [5.300359725952148, -5.198402404785156], + [6.048673629760742, -1.2908021211624146], + [4.646753311157227, -1.0663704872131348], + [-4.209636211395264, -2.539261817932129], + [0.9206015467643738, 1.0343481302261353], + [8.924078941345215, -2.4177868366241455], + [-4.816758632659912, -7.027121543884277], + [3.065706729888916, -4.33663272857666], + [-5.870746612548828, 6.391226768493652], + [-6.07466459274292, 7.913996696472168], + [-0.3404462933540344, 9.662068367004395], + [4.143320560455322, 1.8235161304473877], + [6.881960868835449, -4.618100166320801], + [-0.39621788263320923, 9.850652694702148], + [-7.169548988342285, 8.421154975891113], + [9.151143074035645, -2.30682635307312], + [-0.3631382882595062, -0.8908480405807495], + [-1.5433415174484253, 1.2335128784179688], + [-4.585069179534912, -7.40911865234375], + [3.7328383922576904, -3.6130411624908447], + [-1.3296077251434326, 3.9181137084960938], + [3.038560152053833, 0.7129706740379333], + [-5.807943820953369, -2.734412431716919], + [3.2163822650909424, -4.381440162658691], + [1.4348475933074951, -7.908478260040283], + [0.07235568016767502, 11.62447452545166], + [5.9392571449279785, -1.1268113851547241], + [-2.649568796157837, 2.1757185459136963], + [3.4514071941375732, 6.042095184326172], + [2.623749017715454, 5.228879451751709], + [-5.166954517364502, 5.936983108520508], + [-4.310603618621826, -0.03914523497223854], + [-5.074116230010986, -8.217692375183105], + [3.1154849529266357, -7.043332099914551], + [1.9165539741516113, 4.7009711265563965], + [-4.754044055938721, 4.814680576324463], + [-1.986416220664978, 1.8457111120224], + [-0.04332173615694046, 9.013301849365234], + [-2.161344528198242, 2.6912615299224854], + [0.10832201689481735, 9.074552536010742], + [3.209507942199707, -7.540703773498535], + [3.107149839401245, -8.757488250732422], + [3.1407296657562256, -4.263674259185791], + [2.1260159015655518, 0.6040880680084229], + [-2.446568727493286, 1.9711989164352417], + [2.2187464237213135, 1.406685471534729], + [-2.1595094203948975, 2.727119207382202], + [3.770967721939087, -3.6177499294281006], + [7.324166774749756, 8.899213790893555], + [2.0927586555480957, 1.1508468389511108], + [9.498002052307129, -2.4490973949432373], + [0.38447993993759155, 10.674671173095703], + [4.07256555557251, 6.967362403869629], + [1.5160846710205078, 2.3127808570861816], + [7.154459476470947, 8.74514389038086], + [0.3731388449668884, 11.931270599365234], + [-7.5671162605285645, -1.0465010404586792], + [2.878288507461548, -6.982881546020508], + [-4.844177722930908, -4.844084739685059], + [-4.175633907318115, -2.260904550552368], + [3.411593198776245, -7.749934673309326], + [6.738499164581299, 8.263099670410156], + [0.14452499151229858, 10.006885528564453], + [6.293584823608398, -1.2957382202148438], + [-4.341466426849365, -3.141610860824585], + [5.604852676391602, -1.5466954708099365], + [-3.0243332386016846, -3.2141168117523193], + [-3.475754976272583, -5.085513114929199], + [-5.579955577850342, -0.6286752223968506], + [-2.724674701690674, 3.7935140132904053], + [0.056899599730968475, 9.869192123413086], + [5.375908374786377, -1.7689523696899414], + [-5.247693061828613, 7.735578536987305], + [5.905284881591797, -4.6440629959106445], + [4.212815761566162, -3.644502878189087], + [-3.897932767868042, 5.580567359924316], + [1.0004768371582031, -0.566799521446228], + [-2.4504568576812744, -3.358635663986206], + [-6.783646106719971, 8.258562088012695], + [2.8182497024536133, -2.6519882678985596], + [-2.148883581161499, -3.757803201675415], + [-6.974018096923828, 8.116398811340332], + [-5.353571891784668, 1.8337029218673706], + [0.36137211322784424, 12.238784790039062], + [1.7137279510498047, 9.678548812866211], + [-2.6422858238220215, 1.8867474794387817], + [11.193827629089355, -2.575463056564331], + [4.763185024261475, -2.1716148853302], + [-0.031192012131214142, 13.581705093383789], + [3.3309214115142822, -5.241600036621094], + [-1.1991121768951416, 1.111663818359375], + [-0.16116636991500854, 9.960216522216797], + [0.6262608170509338, 11.020343780517578], + [-0.9133787155151367, -0.3802029490470886], + [-0.09473247081041336, 10.003218650817871], + [-4.961719036102295, 4.647953033447266], + [-5.34775447845459, 2.47157883644104], + [4.017864227294922, -5.168353080749512], + [-2.4396443367004395, 1.755180835723877], + [-4.445021152496338, 4.641567707061768], + [3.0630249977111816, -4.6497063636779785], + [4.9992852210998535, 6.683382511138916], + [5.813444137573242, -2.918931245803833], + [0.1994161605834961, 10.315079689025879], + [11.00687313079834, -2.521850824356079], + [1.8539189100265503, 5.788132667541504], + [2.5866148471832275, 5.634044647216797], + [-4.87229061126709, 4.0041117668151855], + [-4.312218189239502, 5.23154354095459], + [3.613457441329956, -6.782179832458496], + [1.4285895824432373, 5.267813682556152], + [-2.2428510189056396, 0.7522628307342529], + [9.10840892791748, -2.2984254360198975], + [-2.528782606124878, 2.032531976699829], + [-0.05484778434038162, 9.420654296875], + [-2.2797791957855225, 1.0985779762268066], + [1.8174676895141602, 2.9504945278167725], + [-4.521094799041748, 6.066126823425293], + [-2.1412711143493652, 2.4631547927856445], + [-1.9807491302490234, -3.463869094848633], + [-7.075822353363037, 8.239007949829102], + [4.617774963378906, -3.118312120437622], + [3.027387857437134, -10.634721755981445], + [-2.8868026733398438, 5.689050674438477], + [-3.7152163982391357, -1.0513075590133667], + [-6.217777252197266, -0.4641633629798889], + [3.1731226444244385, -4.703338623046875], + [9.891716003417969, -2.476212739944458], + [6.119735240936279, -1.2205744981765747], + [1.6436562538146973, 3.1485512256622314], + [-5.019675254821777, -7.479921817779541], + [9.068748474121094, -2.3757288455963135], + [9.826272964477539, -2.3758060932159424], + [-1.972046971321106, 2.29264235496521], + [7.742628574371338, -2.0449728965759277], + [3.392021894454956, 6.444640159606934], + [4.253285884857178, -9.010322570800781], + [-6.3690924644470215, 7.400415420532227], + [-2.4508042335510254, -4.111291885375977], + [-3.680058240890503, -2.5155375003814697], + [-4.782077312469482, -0.304828405380249], + [0.09914105385541916, 11.667459487915039], + [-4.431438446044922, -6.517735481262207], + [-0.009380169212818146, 13.023580551147461], + [3.150794267654419, -4.554279327392578], + [-4.899137020111084, -1.0394108295440674], + [3.037158250808716, -3.7492268085479736], + [4.300759792327881, -5.041383743286133], + [-4.9635748863220215, -6.290012359619141], + [-4.4684157371521, 5.022597312927246], + [4.904477596282959, -2.7161667346954346], + [0.3528972864151001, 10.620635986328125], + [-4.033169269561768, -3.2183284759521484], + [3.164361000061035, -4.4348955154418945], + [8.50512409210205, -2.4207160472869873], + [0.044445984065532684, 9.832258224487305], + [2.7804324626922607, -3.9560892581939697], + [2.985430955886841, -7.865853309631348], + [5.847890377044678, -5.092015266418457], + [0.0061265453696250916, -1.3940322399139404], + [3.0293214321136475, -4.310452461242676], + [0.1654728651046753, 11.347308158874512], + [3.399942636489868, 1.0158509016036987], + [-2.199312448501587, 2.2137999534606934], + [3.096993923187256, -4.372871398925781], + [3.832350969314575, 1.8939704895019531], + [10.187520027160645, -2.379307985305786], + [-4.983837127685547, -4.740119934082031], + [5.304569244384766, -3.0662081241607666], + [7.996766567230225, -2.1655478477478027], + [6.6541218757629395, -2.2779972553253174], + [5.778926372528076, 7.651952743530273], + [-4.5891947746276855, 4.887800216674805], + [-5.860934257507324, 1.2569001913070679], + [5.886569499969482, -1.1879059076309204], + [2.176318883895874, -8.006157875061035], + [-1.8848888874053955, 0.4376060962677002], + [4.691540241241455, -5.845179557800293], + [3.8533055782318115, 1.7671617269515991], + [1.810015082359314, 0.2867063283920288], + [-3.790395498275757, -1.1498498916625977], + [2.9140923023223877, -3.2130119800567627], + [-3.5975518226623535, -1.1762148141860962], + [1.7886319160461426, -6.134129047393799], + [8.24663257598877, -2.340157985687256], + [-2.320829153060913, -4.877573013305664], + [5.511385917663574, 7.622125148773193], + [-4.533469200134277, -2.580756664276123], + [0.21301209926605225, 10.666707992553711], + [-4.978538990020752, -6.707989692687988], + [2.1530873775482178, 0.2077426016330719], + [-2.829496145248413, -1.5308386087417603], + [8.38881778717041, -2.3013083934783936], + [1.1492100954055786, -0.5532041788101196], + [3.1975269317626953, 6.534482955932617], + [-2.5337719917297363, 2.1837575435638428], + [-5.58954381942749, -2.0313987731933594], + [3.8650195598602295, -3.501643419265747], + [-5.003634929656982, -3.6781694889068604], + [6.409874439239502, 7.89111328125], + [-4.385267734527588, -1.282314419746399], + [-2.0638692378997803, 2.3742947578430176], + [-4.0796356201171875, -0.36814743280410767], + [3.0735323429107666, -6.735286712646484], + [6.8214921951293945, 8.304784774780273], + [-2.174574136734009, -3.7208290100097656], + [0.9247550368309021, 0.7904202342033386], + [7.082225322723389, -4.069265365600586], + [5.079529762268066, -2.046306610107422], + [3.0592596530914307, -4.400357723236084], + [4.0818963050842285, -3.864149808883667], + [-7.627102851867676, -0.1076122522354126], + [2.300180435180664, -2.102534532546997], + [-7.00895357131958, -1.3395060300827026], + [-4.021825313568115, -2.3902857303619385], + [2.9287307262420654, -9.423178672790527], + [-0.059604711830616, 12.61062240600586], + [4.359493732452393, -8.389020919799805], + [2.44621205329895, -8.345756530761719], + [-2.034090995788574, 2.468489170074463], + [3.7785723209381104, -3.4162893295288086], + [3.659437656402588, -2.848742961883545], + [2.1863467693328857, -8.007894515991211], + [-3.669647455215454, -5.544663906097412], + [1.5510532855987549, -6.7784833908081055], + [8.452960014343262, -2.227309226989746], + [0.053700678050518036, 9.972780227661133], + [3.4591994285583496, -4.3917927742004395], + [-0.45702269673347473, -2.5984137058258057], + [5.9062066078186035, 7.78943395614624], + [1.8603901863098145, 4.195588111877441], + [-2.3761823177337646, -3.9925625324249268], + [-2.647987127304077, 6.151539325714111], + [2.517735719680786, -8.999429702758789], + [-0.8812442421913147, -3.3290297985076904], + [3.3499367237091064, 1.154776930809021], + [2.9643094539642334, -4.200261116027832], + [1.31808340549469, 5.75624418258667], + [2.523327589035034, 2.11468243598938], + [8.075560569763184, -2.2590219974517822], + [1.5460765361785889, -7.88798713684082], + [3.287750005722046, -8.941011428833008], + [0.10455989092588425, 10.020513534545898], + [0.655194878578186, 7.413803577423096], + [-4.2283453941345215, 4.599610805511475], + [-2.8579885959625244, -2.355560541152954], + [-4.84313440322876, -1.6718077659606934], + [2.8355534076690674, -3.951054811477661], + [3.1340389251708984, -3.6643621921539307], + [-5.623912334442139, 4.557782173156738], + [3.069481611251831, -5.301483154296875], + [1.1135365962982178, 5.420391082763672], + [1.5201079845428467, -3.322892189025879], + [0.17449915409088135, 11.815376281738281], + [5.313040256500244, 6.914852619171143], + [2.6385338306427, 1.260987401008606], + [1.3753925561904907, -7.246978759765625], + [-1.9636096954345703, 0.8199791312217712], + [-4.999481678009033, -4.767245292663574], + [-2.3405020236968994, 2.187617063522339], + [2.7254550457000732, -7.668978214263916], + [0.24529296159744263, 11.04899787902832], + [4.672139644622803, 7.263994216918945], + [3.383606195449829, -8.003600120544434], + [-3.2042036056518555, -0.6326249837875366], + [1.4797353744506836, 0.9543880224227905], + [4.475982189178467, 5.926799774169922], + [6.364823818206787, -1.0986026525497437], + [2.2421858310699463, 0.26087942719459534], + [8.636783599853516, -2.3503856658935547], + [-3.4943931102752686, 3.836766481399536], + [-1.6194441318511963, 1.2606593370437622], + [-5.340704917907715, 5.929535388946533], + [-4.243931293487549, -6.267178535461426], + [4.78842306137085, -3.4780540466308594], + [-3.612860679626465, -1.6731315851211548], + [-4.04226541519165, 0.7799943089485168], + [-2.405625104904175, 1.824467420578003], + [-2.1619460582733154, 2.709674119949341], + [-7.487460613250732, -1.1485910415649414], + [-1.7712433338165283, -3.2256088256835938], + [-2.0677640438079834, 2.435884714126587], + [4.213045597076416, -3.456028461456299], + [9.644549369812012, -2.369601011276245], + [8.676785469055176, -2.3133509159088135], + [-0.6934293508529663, 10.024880409240723], + [0.5514494180679321, -5.2574143409729], + [-4.014835357666016, 3.0491113662719727], + [2.967923164367676, 4.594762802124023], + [1.7619664669036865, -0.09144249558448792], + [-2.082355260848999, 1.8538811206817627], + [-2.4689033031463623, -4.865172863006592], + [-0.008603163063526154, 13.127283096313477], + [1.8040657043457031, -2.383615255355835], + [1.9105092287063599, -6.718879699707031], + [-1.9122966527938843, 2.1564574241638184], + [5.601021766662598, -2.5175678730010986], + [-3.8678441047668457, -5.485928058624268], + [-4.781107425689697, 5.341973304748535], + [2.3329670429229736, 2.93491268157959], + [0.0986359640955925, 12.376683235168457], + [3.1996586322784424, -5.485045433044434], + [2.3109641075134277, 3.3900411128997803], + [-0.6653372049331665, 0.7915241122245789], + [7.230305194854736, 8.734390258789062], + [2.198256015777588, -8.044892311096191], + [-5.539674282073975, 3.070394515991211], + [9.90720272064209, -2.496466875076294], + [-4.319375038146973, 4.7344160079956055], + [2.284123182296753, 1.556991457939148], + [0.22033953666687012, 12.174531936645508], + [-2.194535732269287, 2.1230976581573486], + [5.203600883483887, -5.74058723449707], + [0.2193043828010559, 10.962087631225586], + [-4.6758880615234375, -6.320735454559326], + [-4.878502368927002, 5.844545364379883], + [-5.114161968231201, -0.6651334762573242], + [-2.282663106918335, 2.4436287879943848], + [3.270005941390991, 1.146762490272522], + [-1.8522871732711792, 1.2197315692901611], + [0.1597048044204712, 10.11880874633789], + [7.978135585784912, -2.203730821609497], + [-2.226865530014038, 2.3683888912200928], + [3.1954753398895264, -4.547908782958984], + [-2.3989412784576416, 1.721580147743225], + [2.396745443344116, -6.101335048675537], + [-1.0503400564193726, 1.4991157054901123], + [3.1191914081573486, -4.432307243347168], + [-5.316554069519043, -0.4329349398612976], + [2.6362416744232178, 0.8291810750961304], + [3.076219081878662, -4.379852294921875], + [-2.0063440799713135, 2.295158624649048], + [-4.103122234344482, 3.701676607131958], + [-2.3563787937164307, -3.096285820007324], + [-1.9295971393585205, 2.530003309249878], + [0.06424056738615036, 13.211894989013672], + [-4.303684711456299, 5.435979843139648], + [-2.6215851306915283, 2.0218608379364014], + [-6.364574909210205, 6.8824663162231445], + [-5.202923774719238, 4.6798272132873535], + [4.170974254608154, -3.654334783554077], + [9.057252883911133, -2.695289373397827], + [7.992930889129639, -2.328399896621704], + [3.5027668476104736, -5.382790565490723], + [6.386373996734619, -4.440299034118652], + [6.555855751037598, 8.068965911865234], + [0.94341641664505, -0.2728632688522339], + [-7.411954402923584, 8.637300491333008], + [2.273545026779175, -7.077691078186035], + [-6.333024024963379, 7.5056891441345215], + [-2.155958414077759, 2.6273458003997803], + [7.332366466522217, 8.81287670135498], + [2.9991672039031982, -4.25302791595459], + [0.008781544864177704, 9.12929916381836], + [-2.169402837753296, 2.2706151008605957], + [-4.45626974105835, 3.328991174697876], + [5.539337158203125, -4.098016262054443], + [-0.6110378503799438, -1.7410004138946533], + [5.136858940124512, -1.8129597902297974], + [3.0341498851776123, -3.9074203968048096], + [3.541881799697876, -7.31847620010376], + [2.45890212059021, 3.633291482925415], + [0.3147355914115906, 11.603714942932129], + [2.221595048904419, 5.853204727172852], + [-4.332851886749268, -6.147860527038574], + [9.0423002243042, -2.4366257190704346], + [-1.2337868213653564, -0.8376946449279785], + [0.7678831815719604, -5.600157737731934], + [6.287917613983154, -4.501309394836426], + [-5.6622796058654785, 4.757084846496582], + [6.432480335235596, -3.123359203338623], + [0.2985655665397644, -1.330556869506836], + [5.535700798034668, -2.1960017681121826], + [3.4435291290283203, -6.435697078704834], + [0.5124326348304749, -0.9266782402992249], + [0.5647802352905273, -5.886131763458252], + [3.0050315856933594, -8.228586196899414], + [3.0650599002838135, -7.292518138885498], + [-7.233316898345947, 0.3875291347503662], + [-2.652536630630493, 2.148489236831665], + [-4.796209812164307, -3.219208240509033], + [3.1152026653289795, -4.605273246765137], + [2.5543620586395264, 4.930423736572266], + [-3.951655149459839, 6.455660343170166], + [-3.122955560684204, -1.1858326196670532], + [-1.906092882156372, 1.961403727531433], + [5.298791408538818, -1.200422763824463], + [3.1473846435546875, -6.970762252807617], + [4.575043678283691, 6.7723069190979], + [-7.346201419830322, 8.520637512207031], + [-4.2649030685424805, -6.145638465881348], + [4.132750988006592, -3.696640729904175], + [-3.1816415786743164, -5.5697221755981445], + [-6.251010894775391, -0.20693671703338623], + [-3.078495740890503, -0.14417427778244019], + [-2.6626827716827393, 2.062380790710449], + [0.19809764623641968, 10.872786521911621], + [-2.3387954235076904, 2.6400320529937744], + [-4.884899616241455, -6.730576992034912], + [-2.5651276111602783, 1.6126164197921753], + [9.94327449798584, -2.6356213092803955], + [2.0337164402008057, 0.44335299730300903], + [-4.058002948760986, -3.6503913402557373], + [-3.2148513793945312, 5.028128623962402], + [7.99927282333374, -1.9917583465576172], + [9.871735572814941, -2.6318154335021973], + [5.07357120513916, -5.489025592803955], + [8.717284202575684, -2.3302109241485596], + [4.571748733520508, -3.589780807495117], + [3.6958253383636475, 1.6265913248062134], + [-2.2447965145111084, -3.814300298690796], + [8.387673377990723, -2.2465813159942627], + [-1.1989250183105469, -4.053031921386719], + [2.6310505867004395, -8.07919692993164], + [6.630406856536865, 8.137601852416992], + [2.749668836593628, -3.866255044937134], + [8.350573539733887, -2.455037832260132], + [10.890471458435059, -2.5051233768463135], + [2.162991762161255, 5.355116844177246], + [-0.03604436665773392, 8.943449974060059], + [-0.04990876466035843, 10.468133926391602], + [6.548146724700928, -1.1900570392608643], + [-0.029778070747852325, 10.869231224060059], + [3.9719479084014893, 6.674926280975342], + [7.672153949737549, -2.104726552963257], + [-5.153693199157715, 6.001641273498535], + [0.6623969078063965, 1.0371675491333008], + [4.919129371643066, 2.121424436569214], + [6.732058048248291, 8.445170402526855], + [4.479269027709961, -2.5953447818756104], + [-2.536410093307495, 2.4987130165100098], + [0.2004522681236267, 10.161827087402344], + [-7.271934986114502, 3.8161051273345947], + [3.5957131385803223, 6.329878330230713], + [0.13227665424346924, 9.762067794799805], + [5.478540897369385, -1.4123024940490723], + [0.30110543966293335, 10.284062385559082], + [-2.9272189140319824, -4.7707929611206055], + [-2.3417108058929443, 2.0082597732543945], + [-0.8409040570259094, -3.2427165508270264], + [2.2503483295440674, -8.25985336303711], + [0.011149875819683075, 12.260211944580078], + [-4.81663179397583, -7.540558815002441], + [2.897820234298706, -4.133599758148193], + [3.225956439971924, -7.566021919250488], + [6.322361469268799, 8.110452651977539], + [-4.963391304016113, 6.045199394226074], + [-5.811152935028076, -0.46290338039398193], + [0.10691475123167038, 9.727052688598633], + [-2.179236888885498, 2.2476725578308105], + [3.66143536567688, -3.38317608833313], + [-0.08445627242326736, 13.420973777770996], + [-1.234184741973877, -0.7737294435501099], + [0.42032063007354736, 12.074199676513672], + [1.3990802764892578, -0.15958361327648163], + [-4.565927028656006, -6.522198677062988], + [-4.082765102386475, 4.144020080566406], + [2.333430051803589, -1.5318635702133179], + [-1.4108672142028809, 0.09875115752220154], + [10.929790496826172, -2.5631983280181885], + [1.4720085859298706, 11.365256309509277], + [3.0316827297210693, -4.2808966636657715], + [-6.505497455596924, -0.248848557472229], + [-4.9081501960754395, -6.604419231414795], + [-2.4732141494750977, 3.535991907119751], + [6.9720306396484375, -1.3566068410873413], + [-3.8254730701446533, -1.4703031778335571], + [3.822277307510376, 6.2366533279418945], + [-5.190323829650879, -7.043274879455566], + [-2.155329704284668, -2.8477671146392822], + [3.028857469558716, -8.62900447845459], + [-2.1920008659362793, 2.062386989593506], + [6.809192657470703, -1.5839179754257202], + [8.424847602844238, -2.527852773666382], + [-2.2164828777313232, 3.9432899951934814], + [-0.41660845279693604, 2.1945669651031494], + [8.674775123596191, -2.34912371635437], + [7.211282730102539, -1.721265196800232], + [-5.699936866760254, 0.6876354217529297], + [3.3133175373077393, 1.829461693763733], + [-4.582274913787842, 6.61150598526001], + [-6.2513651847839355, 0.9861849546432495], + [-2.8683998584747314, -4.50370979309082], + [3.0329720973968506, -4.727023601531982], + [-3.7833878993988037, -0.08026349544525146], + [1.8144891262054443, -6.3502888679504395], + [-5.244902610778809, -6.451173305511475], + [0.22227627038955688, 11.210517883300781], + [-3.9817354679107666, 5.808866500854492], + [-4.26290225982666, -5.419947147369385], + [0.0422472283244133, 10.92770004272461], + [0.026904813945293427, 9.429129600524902], + [-4.549876689910889, -5.989035606384277], + [-1.4380216598510742, -2.5359952449798584], + [-2.227903127670288, 3.081705331802368], + [2.4607579708099365, -7.049715995788574], + [0.6624957919120789, 0.2254389226436615], + [2.4489352703094482, -8.581377983093262], + [-2.4252121448516846, -4.324118137359619], + [9.578629493713379, -2.2930967807769775], + [-6.511122226715088, 7.348507881164551], + [2.7002880573272705, -8.231898307800293], + [-7.246245384216309, 1.5550626516342163], + [2.6184990406036377, -3.516780376434326], + [6.125991344451904, -2.9076945781707764], + [2.9934566020965576, -8.022404670715332], + [7.185431003570557, -1.9237362146377563], + [4.090120315551758, -3.628528118133545], + [4.291362762451172, 6.960522651672363], + [2.173027515411377, 4.038238048553467], + [2.5888185501098633, -1.4208046197891235], + [-1.4484843015670776, 1.4044973850250244], + [6.591061115264893, 8.195347785949707], + [-2.1295175552368164, 2.5141332149505615], + [2.462575912475586, -7.640496253967285], + [-3.0496253967285156, -1.443130612373352], + [-5.9767608642578125, -1.6758694648742676], + [5.856242656707764, -1.605540156364441], + [4.104137897491455, -2.4652974605560303], + [2.5863239765167236, 3.8823869228363037], + [1.8364675045013428, 2.3424034118652344], + [0.6801131963729858, -5.012248992919922], + [-2.406155824661255, 2.1692981719970703], + [3.8315646648406982, -7.312602996826172], + [-5.9886908531188965, 7.0369157791137695], + [-4.526928901672363, -2.6407225131988525], + [-1.115330696105957, 1.6187090873718262], + [-3.200603723526001, 1.961513638496399], + [-4.394885063171387, -7.358329772949219], + [-2.7917797565460205, 1.0253814458847046], + [-2.078038454055786, 2.12214732170105], + [-3.341339349746704, 4.672811508178711], + [-2.2028281688690186, 1.9001232385635376], + [5.264073848724365, 7.906097888946533], + [6.081273555755615, -1.3347169160842896], + [-4.050806522369385, 5.3520026206970215], + [1.8210136890411377, 3.181983232498169], + [1.2770836353302002, 3.698314905166626], + [5.026032447814941, 6.247479438781738], + [3.084197998046875, -7.402157783508301], + [0.0014304444193840027, 11.426983833312988], + [-3.4132473468780518, -4.283840179443359], + [-2.1367263793945312, 2.7761781215667725], + [-2.4724316596984863, 1.746757984161377], + [-1.4189987182617188, 2.192199230194092], + [0.12769711017608643, 10.45634651184082], + [-2.2585055828094482, 2.164641857147217], + [2.8276147842407227, -3.051800012588501], + [-2.3571810722351074, 1.011687159538269], + [-2.217268228530884, 0.46881210803985596], + [-4.824272632598877, -2.6520092487335205], + [7.071070194244385, -2.1166861057281494], + [-2.4155995845794678, -0.5262448191642761], + [-0.7599316835403442, -0.0423412062227726], + [-0.013818629086017609, 11.630290985107422], + [3.4377176761627197, -7.845625877380371], + [4.965257167816162, 7.167128562927246], + [2.5673646926879883, 0.7642521262168884], + [-0.5623531341552734, 1.1717255115509033], + [-2.0776524543762207, -4.207056522369385], + [3.7424304485321045, -8.553689002990723], + [2.267385244369507, 5.37661075592041], + [-2.0692193508148193, 1.3566534519195557], + [3.9336302280426025, 1.3502068519592285], + [-4.127755641937256, 4.935760498046875], + [-5.769092082977295, 3.1071300506591797], + [1.5963789224624634, 3.5420634746551514], + [6.838873386383057, -1.415979266166687], + [-3.7911322116851807, 5.561285018920898], + [6.035384654998779, -2.9692933559417725], + [3.660309076309204, -3.452147960662842], + [-0.04996258765459061, -1.6895692348480225], + [3.6461493968963623, -8.595754623413086], + [7.127978324890137, 8.499613761901855], + [-0.0013493970036506653, 12.639068603515625], + [0.21434366703033447, 11.571450233459473], + [-3.1688435077667236, -0.8930224776268005], + [-3.042461395263672, -3.0360188484191895], + [3.5122427940368652, -4.611200332641602], + [1.429276943206787, 4.659992218017578], + [3.889146089553833, 6.693720817565918], + [-0.548364520072937, -2.183375120162964], + [-5.233875274658203, 0.557110071182251], + [-4.036663055419922, -6.217772960662842], + [3.9696996212005615, -4.07049560546875], + [-4.334914684295654, -0.49547523260116577], + [-4.865278720855713, -7.835526943206787], + [-1.3121451139450073, -2.7649753093719482], + [0.08124833554029465, 12.292500495910645], + [5.954308986663818, -2.2646524906158447], + [2.4557688236236572, 0.5043795108795166], + [4.276791572570801, 1.6675139665603638], + [5.850069999694824, -2.330871343612671], + [-5.938486576080322, 4.544988632202148], + [6.092067718505859, 7.550385475158691], + [-4.508065700531006, -3.505352735519409], + [2.200366258621216, -8.845355987548828], + [-0.024928279221057892, 13.388416290283203], + [-2.581916570663452, 1.6250635385513306], + [3.5511980056762695, -3.3526031970977783], + [-0.08997482806444168, 13.259025573730469], + [-1.0036944150924683, -1.5489624738693237], + [3.6191117763519287, -7.975024223327637], + [1.9098470211029053, 4.371232986450195], + [7.79836368560791, -1.9944075345993042], + [4.792408466339111, -1.700728416442871], + [-2.545578956604004, -1.689521074295044], + [-2.5084426403045654, 2.2847707271575928], + [-2.3988561630249023, 3.3441853523254395], + [-5.991458415985107, 7.179873466491699], + [1.4468713998794556, 0.2760040760040283], + [2.4340598583221436, 1.1069121360778809], + [2.5685603618621826, 3.472557783126831], + [3.0040361881256104, -4.039671421051025], + [-5.052369594573975, -5.71914529800415], + [8.135416984558105, -2.271402359008789], + [6.507753849029541, -3.749506711959839], + [7.771266460418701, -2.014613151550293], + [1.7348496913909912, 0.24812600016593933], + [-5.729724407196045, -1.296024203300476], + [4.852653980255127, -4.780601501464844], + [-2.406308174133301, -4.2177839279174805], + [-6.4976487159729, -1.4906822443008423], + [-6.499686241149902, 7.610259056091309], + [3.962571382522583, 6.08897590637207], + [0.00034230202436447144, 12.79160213470459], + [0.35694199800491333, 11.867260932922363], + [4.02958345413208, -4.350461959838867], + [6.540780544281006, -1.4153562784194946], + [2.5107581615448, 4.235079288482666], + [8.917428016662598, -2.716859817504883], + [2.2550833225250244, 4.219442844390869], + [0.609347403049469, -0.8555177450180054], + [7.77824068069458, -2.0539684295654297], + [-3.872716188430786, -1.4459973573684692], + [-2.379887104034424, 2.2660233974456787], + [-2.1629841327667236, 2.737562894821167], + [-6.769627094268799, -0.7902733087539673], + [3.0367443561553955, -9.408413887023926], + [-3.976300001144409, -3.045114755630493], + [2.00164532661438, 5.236374855041504], + [-7.543954372406006, -0.6319336891174316], + [3.2831804752349854, 1.0558903217315674], + [1.6527831554412842, -7.050183296203613], + [-5.128530502319336, -2.0923397541046143], + [-4.91919469833374, -1.0715126991271973], + [-3.8502185344696045, 7.41205358505249], + [3.356477975845337, -3.5650582313537598], + [-5.104923248291016, -3.5252273082733154], + [0.17799073457717896, 10.191389083862305], + [2.8281500339508057, 2.8269431591033936], + [-3.46085524559021, -1.1195653676986694], + [-1.2473188638687134, 1.6564314365386963], + [-2.368870258331299, 2.4339101314544678], + [3.269472599029541, -2.31907320022583], + [3.313455104827881, 0.4985668659210205], + [9.549017906188965, -2.3199634552001953], + [10.845183372497559, -2.557164430618286], + [-2.173997163772583, 2.6707396507263184], + [-6.927055835723877, -0.07762384414672852], + [3.4320831298828125, -3.5672152042388916], + [3.1826350688934326, 1.1460950374603271], + [5.443087577819824, -3.617082357406616], + [2.3754966259002686, 5.4987993240356445], + [-0.49431318044662476, -1.9882714748382568], + [1.4354071617126465, -0.4142322838306427], + [0.5297796130180359, 10.463801383972168], + [-4.731309413909912, 3.484224319458008], + [-1.4742602109909058, 1.4023849964141846], + [-1.4552438259124756, 0.3385813236236572], + [0.5605754256248474, -0.5174487233161926], + [2.605412721633911, 6.603363513946533], + [1.9185576438903809, 2.654942750930786], + [10.060745239257812, -2.4612157344818115], + [-2.1294302940368652, 2.241504669189453], + [0.12727206945419312, -2.2927472591400146], + [-7.54801607131958, 8.925924301147461], + [-4.423890113830566, -3.405996799468994], + [3.013852834701538, -5.97836446762085], + [3.604631185531616, -2.750249147415161], + [1.953235387802124, 4.6884684562683105], + [2.3723762035369873, 3.0253958702087402], + [-2.2353179454803467, 2.0265471935272217], + [3.5793232917785645, -6.795549392700195], + [2.486765146255493, -9.752431869506836], + [1.539859414100647, -7.943378925323486], + [4.300209999084473, -3.9993529319763184], + [2.758803129196167, 0.6569966077804565], + [4.216932773590088, 7.637502670288086], + [1.1352086067199707, 4.735116481781006], + [6.451255798339844, -1.4385697841644287], + [-5.123964309692383, -6.269954681396484], + [0.3274792432785034, 7.525368690490723], + [8.020285606384277, -2.31146502494812], + [-4.059850692749023, -4.495989799499512], + [3.901261329650879, 5.682055473327637], + [0.24776357412338257, 10.52487564086914], + [-4.964806079864502, 4.691924571990967], + [2.0489413738250732, -7.313429832458496], + [-2.6230902671813965, 1.8034552335739136], + [-6.6111159324646, -2.0150465965270996], + [6.651291370391846, -1.5196982622146606], + [-2.2871313095092773, 1.1067243814468384], + [5.805753231048584, -2.4431021213531494], + [2.3323769569396973, -9.39297866821289], + [1.7273657321929932, 10.575296401977539], + [4.4734063148498535, 7.661993026733398], + [5.76752233505249, 7.365664482116699], + [3.4373390674591064, -2.6971957683563232], + [3.2199695110321045, -3.593055009841919], + [-2.897897720336914, 5.7439141273498535], + [1.240582823753357, -7.307400703430176], + [-4.820102691650391, -0.5380338430404663], + [-5.55307149887085, -1.4513970613479614], + [0.09572749584913254, 11.979593276977539], + [-1.6115410327911377, -3.5545125007629395], + [9.148774147033691, -2.321528673171997], + [-5.333550930023193, 3.5139365196228027], + [3.107386350631714, -2.4573984146118164], + [4.96531343460083, -4.636614799499512], + [3.208906412124634, -3.758486270904541], + [5.930732250213623, 7.325477123260498], + [6.577291965484619, 8.211824417114258], + [1.4651525020599365, 0.031151559203863144], + [-4.348654747009277, -3.4258642196655273], + [9.621766090393066, -2.4507086277008057], + [-5.9210124015808105, 0.4668477773666382], + [3.571503162384033, -3.0293827056884766], + [6.274867534637451, 7.852075099945068], + [-0.0120912566781044, -0.9572861194610596], + [4.153897285461426, 1.8198224306106567], + [2.170159101486206, -7.830545425415039], + [1.7986928224563599, 0.29310888051986694], + [-4.5795698165893555, -6.662836074829102], + [-3.1238253116607666, 3.014256715774536], + [-1.206639051437378, -1.9551726579666138], + [3.335106134414673, -6.633070468902588], + [4.867694854736328, 6.344594955444336], + [0.6274155974388123, -0.23886676132678986], + [3.02066969871521, -4.199196815490723], + [4.015369892120361, -3.4138920307159424], + [-4.802721977233887, -2.602435827255249], + [-6.798518657684326, -0.10454952716827393], + [-4.667273044586182, -3.576158285140991], + [5.060798168182373, -3.1177408695220947], + [0.3743615746498108, -1.1643511056900024], + [4.439174652099609, 7.241382598876953], + [5.844550609588623, 7.879882335662842], + [-0.0023534372448921204, 12.530508041381836], + [-1.1054902076721191, 1.7057265043258667], + [-0.15313762426376343, -1.5030758380889893], + [-1.9617325067520142, 2.020951509475708], + [-4.776950359344482, -6.698544979095459], + [-4.292096138000488, -6.519837379455566], + [0.8634108901023865, 5.911380767822266], + [3.1917026042938232, -4.442971706390381], + [2.078794479370117, 0.01609991118311882], + [1.0277104377746582, -6.722012519836426], + [3.4087629318237305, -3.925525188446045], + [-6.285206317901611, 7.746936798095703], + [-4.385357856750488, 4.453773498535156], + [4.381159782409668, -3.762544870376587], + [-2.8988258838653564, 6.210119724273682], + [-2.7130849361419678, -3.8115596771240234], + [-4.286759853363037, -3.5739290714263916], + [-2.4686384201049805, 1.6533221006393433], + [7.370581150054932, 8.769888877868652], + [-4.150665283203125, -2.4779422283172607], + [0.5543298125267029, -1.060752034187317], + [-4.534399509429932, -1.8716861009597778], + [3.048487663269043, -4.021451950073242], + [0.21596133708953857, 10.64107894897461], + [-0.01512105017900467, 12.986913681030273], + [2.7593657970428467, 3.644580841064453], + [9.11229133605957, -2.379760265350342], + [2.429879903793335, -8.524870872497559], + [2.597402334213257, 5.710659980773926], + [-2.1522209644317627, 2.6829755306243896], + [3.253267526626587, 1.8281663656234741], + [-4.653379440307617, 6.33995246887207], + [-5.729798793792725, 0.2811024785041809], + [-4.489768981933594, 4.6843366622924805], + [7.882297992706299, 9.395307540893555], + [4.631262302398682, -3.005073308944702], + [4.489065647125244, 6.729698657989502], + [1.1832599639892578, -6.488805770874023], + [3.680608034133911, 6.1495208740234375], + [2.741281032562256, -3.71651554107666], + [10.706488609313965, -2.5378758907318115], + [-3.306286573410034, -1.684449315071106], + [0.7253279089927673, -1.2920126914978027], + [-2.03662109375, 2.3857674598693848], + [3.0372772216796875, -7.975495338439941], + [-4.738198280334473, 3.7200777530670166], + [1.822263479232788, 2.1561851501464844], + [2.087031841278076, 4.728552341461182], + [6.106158256530762, -6.741992473602295], + [1.4512120485305786, 5.822168350219727], + [0.06479423493146896, 12.236677169799805], + [2.4642345905303955, -9.124722480773926], + [7.862278461456299, -1.6768641471862793], + [-4.906238079071045, -2.9157378673553467], + [8.310129165649414, -2.4019033908843994], + [0.17791366577148438, 10.04631233215332], + [2.091564416885376, 8.997785568237305], + [1.8240174055099487, -0.36255699396133423], + [0.21420007944107056, 10.621219635009766], + [0.0894508883357048, 11.078176498413086], + [0.6739658713340759, 4.951678276062012], + [2.741638660430908, -9.361637115478516], + [3.0006296634674072, -8.392129898071289], + [3.4304816722869873, -6.986663818359375], + [-3.6558034420013428, 6.015005111694336], + [2.1200222969055176, 2.551997423171997], + [5.548795223236084, -1.616254210472107], + [3.647953748703003, -8.865249633789062], + [7.626468181610107, -2.1410725116729736], + [-6.904036998748779, 0.690981388092041], + [-3.453650712966919, -1.4204195737838745], + [-0.5947479605674744, -2.0317089557647705], + [0.084538035094738, 9.885982513427734], + [1.8954212665557861, 5.191875457763672], + [-1.4156773090362549, 0.6495761275291443], + [7.152151584625244, -1.7695063352584839], + [3.8573215007781982, -3.4803054332733154], + [-0.1664217710494995, 0.5511478185653687], + [4.963581562042236, -3.3805294036865234], + [-4.63114595413208, -1.413611888885498], + [-2.3014163970947266, 2.182887077331543], + [7.405155658721924, -4.502457618713379], + [-3.6592462062835693, 6.018888473510742], + [6.108367443084717, -3.7303383350372314], + [0.07431166619062424, 13.375067710876465], + [4.436707973480225, -3.6384735107421875], + [3.0269458293914795, 0.5778188109397888], + [-4.160610675811768, -2.072427988052368], + [3.7748992443084717, -4.6499342918396], + [0.1446322798728943, 9.262702941894531], + [7.2509636878967285, -2.0501651763916016], + [7.172591686248779, -3.3508129119873047], + [0.2113630175590515, 10.739921569824219], + [2.330244302749634, 3.5770764350891113], + [-1.051468014717102, 2.0084826946258545], + [0.24469059705734253, 11.19577407836914], + [-3.7086808681488037, 5.447751998901367], + [2.2134780883789062, -8.10052490234375], + [-6.990834712982178, -0.09284591674804688], + [-4.833768367767334, -6.5420122146606445], + [-0.047939665615558624, 9.740211486816406], + [1.586479902267456, -6.418854713439941], + [-5.5611958503723145, 3.1371917724609375], + [3.0384886264801025, -3.581622362136841], + [5.440214157104492, -2.305109739303589], + [-4.566585063934326, -6.677088260650635], + [11.308225631713867, -2.568885087966919], + [-2.0556061267852783, 2.5477614402770996], + [2.5972158908843994, -5.083987236022949], + [2.6518590450286865, 1.9655627012252808], + [8.641670227050781, -2.3212995529174805], + [8.788208961486816, -2.278902292251587], + [1.5760753154754639, -7.4722580909729], + [-0.221416175365448, -1.5290712118148804], + [3.514362096786499, -2.543872594833374], + [4.4638352394104, -4.297394752502441], + [-4.626107692718506, -3.2252357006073], + [10.739022254943848, -2.5285167694091797], + [-4.995200157165527, -3.32098126411438], + [-3.214772939682007, -5.356750965118408], + [1.1064149141311646, -6.5337629318237305], + [-5.494630336761475, -6.333569526672363], + [3.350781202316284, 1.5787575244903564], + [-2.9080584049224854, -0.8435240387916565], + [7.613557815551758, -2.007601499557495], + [3.0975446701049805, -7.672560691833496], + [-6.460777759552002, -1.9653228521347046], + [-6.043185234069824, -1.1159873008728027], + [3.542692184448242, -4.7571635246276855], + [-3.3454763889312744, -2.88195538520813], + [0.654024064540863, -0.8788894414901733], + [3.730475664138794, 1.2726751565933228], + [-4.455615997314453, -5.692179203033447], + [3.4053101539611816, -4.9385480880737305], + [0.42444097995758057, -1.1385160684585571], + [2.6299326419830322, 4.1421356201171875], + [5.238781929016113, 6.6565022468566895], + [3.56242299079895, 1.4476103782653809], + [2.5363266468048096, 3.9939687252044678], + [4.68601131439209, -0.6482844352722168], + [0.17202216386795044, 10.300053596496582], + [-2.0667901039123535, 2.274815320968628], + [-5.960489749908447, 5.728771686553955], + [-1.5555243492126465, -3.185239553451538], + [-6.56859827041626, 0.1417330503463745], + [2.782524824142456, -3.164257287979126], + [0.11223762482404709, 12.704675674438477], + [1.9755942821502686, 1.984850287437439], + [-3.9628055095672607, -1.9132211208343506], + [-2.708519220352173, 2.9976840019226074], + [3.0541749000549316, -8.442852973937988], + [3.180971622467041, 6.340808868408203], + [-2.1151962280273438, 2.2342984676361084], + [-4.066991806030273, -7.00412654876709], + [0.2520926594734192, 11.097433090209961], + [3.3798718452453613, -8.036505699157715], + [-0.010221309959888458, 13.793106079101562], + [1.6838295459747314, 2.148952007293701], + [-5.324243068695068, -1.9184826612472534], + [2.0132663249969482, 3.7058255672454834], + [2.5249130725860596, 3.124872922897339], + [-0.5673841834068298, -1.732601523399353], + [0.22840017080307007, 11.788376808166504], + [-3.9220125675201416, -4.614301681518555], + [3.3309731483459473, -7.796635627746582], + [3.491903305053711, -6.59548282623291], + [0.05661385506391525, 9.622331619262695], + [-1.6049814224243164, -0.7613474130630493], + [-2.078913688659668, 2.408438205718994], + [-3.010007619857788, -4.832053184509277], + [-1.2595446109771729, -4.488133907318115], + [5.5367045402526855, 7.68092155456543], + [2.341609239578247, -8.206680297851562], + [7.258508205413818, -1.0460158586502075], + [2.7834317684173584, -8.619426727294922], + [-6.176646709442139, 0.5674389004707336], + [2.736135721206665, -3.494314670562744], + [6.9921555519104, 8.356513977050781], + [10.774157524108887, -2.6830451488494873], + [2.7683420181274414, -3.272118091583252], + [6.3188700675964355, 8.205831527709961], + [0.013870827853679657, 11.601463317871094], + [5.916678428649902, -5.84222412109375], + [1.5266098976135254, 0.06505030393600464], + [3.881230115890503, 1.5855494737625122], + [-2.8926665782928467, -4.154870986938477], + [0.19847851991653442, 10.567946434020996], + [3.363724946975708, -5.429017066955566], + [-3.4325923919677734, -2.3016726970672607], + [-4.463071823120117, -1.9395564794540405], + [0.10855548828840256, 9.93106460571289], + [7.858331203460693, -2.2306153774261475], + [-0.010598547756671906, 13.025444030761719], + [6.739747524261475, -2.0585744380950928], + [2.71979022026062, -4.038706302642822], + [-3.3681750297546387, -5.319160461425781], + [5.38737154006958, 7.130414009094238], + [0.13300377130508423, 10.45699405670166], + [-4.094367980957031, 5.145158767700195], + [-0.39018794894218445, -1.712023138999939], + [2.808138370513916, -3.902316093444824], + [-4.761465549468994, 7.535429954528809], + [2.370858907699585, 0.6518936157226562], + [-1.469048023223877, 1.7589439153671265], + [-3.5025112628936768, -4.205617427825928], + [-3.6118154525756836, -6.065374851226807], + [3.6754233837127686, -2.9305052757263184], + [2.661700487136841, -8.40791130065918], + [-2.775818109512329, 1.7528680562973022], + [1.4542546272277832, 5.858431816101074], + [9.117321968078613, -2.2498233318328857], + [1.450120449066162, 5.954694747924805], + [-4.919692516326904, 1.055601716041565], + [2.9988534450531006, -4.2294440269470215], + [1.9508168697357178, -4.46226692199707], + [3.386556386947632, -2.943161725997925], + [-7.306938648223877, -1.8758649826049805], + [-4.428825855255127, -6.8905463218688965], + [7.330738544464111, 9.139143943786621], + [-6.6372175216674805, 6.803611755371094], + [-2.687892198562622, -3.532477855682373], + [-3.9531261920928955, -3.5513265132904053], + [-3.453218460083008, 3.8766098022460938], + [2.041480302810669, -7.9111528396606445], + [-1.216064691543579, -1.2708250284194946], + [-3.34043025970459, 6.249642848968506], + [-4.508006572723389, -6.162978649139404], + [-3.5555360317230225, -2.4248178005218506], + [-4.262123107910156, 5.834559917449951], + [2.9156100749969482, 1.1672186851501465], + [-1.885301113128662, -3.077505350112915], + [-5.508938789367676, -1.356371283531189], + [3.341285228729248, -4.9322967529296875], + [6.766578674316406, -5.4730072021484375], + [-4.95885705947876, -7.528968334197998], + [2.6931681632995605, -3.888803005218506], + [-6.036280155181885, 6.873729705810547], + [3.6688625812530518, -8.281933784484863], + [4.442324161529541, -3.9851884841918945], + [-1.0466440916061401, -3.382901430130005], + [0.33936142921447754, -1.387698769569397], + [-3.396672010421753, -3.8040401935577393], + [-2.269533395767212, -2.850700616836548], + [2.9593727588653564, -4.216697692871094], + [-0.6685618162155151, 0.612854540348053], + [0.6386493444442749, -0.9561870098114014], + [9.00291919708252, -2.3661129474639893], + [-1.3132933378219604, -3.1677868366241455], + [5.321261882781982, -2.6895623207092285], + [2.9237139225006104, -5.250455856323242], + [-1.033825397491455, -3.5098049640655518], + [-5.898234844207764, 0.5023068189620972], + [-3.835411787033081, -6.646276473999023], + [-5.21710729598999, -2.925853729248047], + [-5.3342509269714355, 6.92138147354126], + [9.178472518920898, -2.4361774921417236], + [-3.7444498538970947, -3.501652240753174], + [3.5161211490631104, -6.438188076019287], + [2.371102809906006, 4.573325157165527], + [0.08851819485425949, 11.184645652770996], + [9.74987506866455, -2.4155776500701904], + [1.3042030334472656, -6.43926477432251], + [2.8898680210113525, -10.438558578491211], + [7.5918049812316895, -1.9378328323364258], + [-1.1187540292739868, 1.4065537452697754], + [-0.03642059117555618, 9.251708030700684], + [-4.48588752746582, -2.2267279624938965], + [-5.8343024253845215, 1.4271845817565918], + [8.301324844360352, -2.2734553813934326], + [4.186661243438721, 1.4862852096557617], + [0.07553928345441818, 9.291217803955078], + [-2.08016037940979, 2.4767353534698486], + [-0.01670987159013748, 13.869462966918945], + [6.897140026092529, -2.0351779460906982], + [5.383377552032471, 6.970709800720215], + [11.218071937561035, -2.535405158996582], + [-2.5266072750091553, 1.9614688158035278], + [-2.18898606300354, 2.6618430614471436], + [2.513732671737671, -6.319389820098877], + [0.5220775008201599, -5.466343879699707], + [-1.9287184476852417, 2.420151710510254], + [-1.966912031173706, 2.0812857151031494], + [9.397582054138184, -2.2997868061065674], + [9.791197776794434, -2.4482004642486572], + [-5.182236194610596, -0.5427128672599792], + [-3.1783607006073, -4.398608684539795], + [-0.20040977001190186, -1.1185927391052246], + [-0.04822903126478195, -1.4118502140045166], + [10.867358207702637, -2.502016305923462], + [2.4528260231018066, 2.871732473373413], + [-4.04286003112793, -5.029290199279785], + [-4.291821002960205, -5.628608703613281], + [7.523685932159424, -3.0604512691497803], + [-3.6202757358551025, -5.8084716796875], + [2.8636412620544434, -4.111555576324463], + [-1.7244391441345215, -3.6248981952667236], + [-4.712609767913818, 4.455538749694824], + [0.19655996561050415, 11.506649017333984], + [0.6671504974365234, -0.8344751000404358], + [-4.924074649810791, -4.849043846130371], + [5.611598491668701, 7.052918434143066], + [-7.203062057495117, -1.9882818460464478], + [3.2970569133758545, -3.126511335372925], + [-0.9004543423652649, 0.6847897171974182], + [0.16046679019927979, 10.194923400878906], + [2.3533129692077637, 0.29802271723747253], + [1.5520124435424805, -0.13794507086277008], + [2.3526809215545654, -8.420458793640137], + [-2.148397207260132, 2.4928693771362305], + [2.47536301612854, 6.467227458953857], + [-2.1760857105255127, 2.1778359413146973], + [6.449527740478516, -1.4066604375839233], + [-1.352626085281372, -0.8963305950164795], + [3.9380905628204346, -2.9296176433563232], + [-0.852511465549469, -3.1348001956939697], + [0.19164204597473145, 10.813364028930664], + [-2.3838374614715576, 1.964180827140808], + [-4.996414661407471, 4.805309772491455], + [-4.096012592315674, -5.0366902351379395], + [7.8421783447265625, -2.0811071395874023], + [1.4238032102584839, -6.759593963623047], + [-2.5787887573242188, -4.738736152648926], + [-2.2852752208709717, -2.9830639362335205], + [4.620730400085449, -4.001710414886475], + [3.464308500289917, -7.830513954162598], + [-2.575453042984009, 2.1353094577789307], + [-4.080097198486328, 4.667263031005859], + [-0.8203561305999756, -1.7415956258773804], + [3.853006601333618, 6.361072540283203], + [6.744541645050049, -1.5100277662277222], + [3.8016345500946045, -7.632868766784668], + [3.535029649734497, 0.8487892150878906], + [-1.9713242053985596, 2.3846518993377686], + [-7.740653038024902, 9.121402740478516], + [-2.756026268005371, 2.0562219619750977], + [-4.989187717437744, -1.8513511419296265], + [0.1850244402885437, 12.572713851928711], + [-2.2366132736206055, 2.4336423873901367], + [-4.570888996124268, -7.475139617919922], + [0.1997774839401245, 10.807641983032227], + [-6.477241516113281, 7.467717170715332], + [2.722749948501587, -6.260214805603027], + [1.9626743793487549, 0.23945248126983643], + [-3.2936527729034424, 6.20121431350708], + [-5.961541652679443, 4.34898042678833], + [-2.850435733795166, 0.8185045123100281], + [-7.8950724601745605, 0.1684809923171997], + [3.262598752975464, -8.143465042114258], + [2.421923875808716, -7.481325149536133], + [3.2868125438690186, -4.587711334228516], + [1.7388200759887695, -0.18554925918579102], + [-2.831629753112793, 0.5047215223312378], + [7.078943729400635, -4.056543350219727], + [8.831742286682129, -2.3054306507110596], + [0.13620877265930176, 9.881303787231445], + [-2.1380879878997803, 2.0188541412353516], + [-2.2928552627563477, 2.745615005493164], + [3.4666025638580322, -6.759824752807617], + [5.317928791046143, 6.708795547485352], + [10.114361763000488, -2.3940494060516357], + [-3.230210065841675, -2.807255744934082], + [-4.8606109619140625, 4.423933029174805], + [3.735626459121704, -3.611881971359253], + [-4.144225597381592, -4.697493553161621], + [2.9981114864349365, -4.241425514221191], + [-2.8460848331451416, -3.1561050415039062], + [3.725618600845337, -3.339921236038208], + [8.441927909851074, -2.2276294231414795], + [-6.7241644859313965, 6.6134562492370605], + [-4.7033562660217285, 4.237320423126221], + [-4.708794593811035, 7.400603294372559], + [3.166208267211914, -2.775266408920288], + [-4.627746105194092, -7.209826469421387], + [-6.826573848724365, 1.9242039918899536], + [-2.231908082962036, 2.0194168090820312], + [3.4287526607513428, -1.9024372100830078], + [2.860578775405884, 1.1241556406021118], + [-4.579830646514893, -5.890789985656738], + [9.288424491882324, -2.372704267501831], + [2.411098003387451, -2.2636196613311768], + [3.827584981918335, -0.6140329241752625], + [6.997696399688721, -2.1987669467926025], + [-3.243644952774048, 3.5381548404693604], + [1.2747771739959717, -0.3100109100341797], + [-0.013872988522052765, 9.528360366821289], + [-3.4088661670684814, -0.0778471827507019], + [2.2751903533935547, -8.307188034057617], + [-2.6575710773468018, -1.681789517402649], + [-6.418795108795166, 7.753972053527832], + [3.8878014087677, -3.7377514839172363], + [5.6202263832092285, -5.792487144470215], + [-0.03214854747056961, 13.371809005737305], + [0.37585753202438354, 10.007545471191406], + [10.6292085647583, -2.457169771194458], + [3.0227534770965576, -4.2612175941467285], + [-2.3288536071777344, 1.7553236484527588], + [7.000590801239014, 8.465131759643555], + [0.1816501021385193, 10.259798049926758], + [4.122520446777344, 6.934293746948242], + [1.751115083694458, 5.808119773864746], + [6.95157527923584, -1.8132719993591309], + [1.8990514278411865, 5.188078880310059], + [3.8043272495269775, -6.690074920654297], + [4.213955402374268, 1.8652135133743286], + [8.348214149475098, -2.279057741165161], + [0.07636282593011856, -1.3130650520324707], + [8.397132873535156, -2.219250440597534], + [4.577688694000244, 6.032639503479004], + [3.189448356628418, -7.876420974731445], + [3.801440954208374, -7.686092853546143], + [4.2528557777404785, -3.3329527378082275], + [3.643249034881592, 6.064106464385986], + [-3.4536235332489014, 3.5250046253204346], + [8.722814559936523, -2.25677227973938], + [0.10440867394208908, 9.86229133605957], + [0.18069368600845337, 10.657567977905273], + [2.513256311416626, -8.777420997619629], + [-4.086086750030518, -6.149788856506348], + [2.5990993976593018, -5.181491851806641], + [2.710829496383667, 1.813167929649353], + [1.990476369857788, -4.0843400955200195], + [-4.9902167320251465, 5.678609848022461], + [-3.831279993057251, -6.49760627746582], + [6.391206741333008, -1.3140722513198853], + [1.5027016401290894, 1.2093148231506348], + [6.116449356079102, 7.960934638977051], + [-2.352489471435547, 2.3292808532714844], + [-4.673498153686523, 5.399555206298828], + [-3.911712884902954, -6.004673957824707], + [-3.3791959285736084, -5.133172035217285], + [-2.2005245685577393, -1.3540977239608765], + [5.432690143585205, -4.927173137664795], + [-0.7359874844551086, -1.706905484199524], + [3.040379285812378, -4.346413612365723], + [-2.0100464820861816, 1.9862607717514038], + [5.98209285736084, -0.8396997451782227], + [4.124878883361816, -3.589951515197754], + [-4.386019229888916, 3.85905122756958], + [-2.91982102394104, 2.4893555641174316], + [3.49165678024292, 6.310732841491699], + [0.19506418704986572, 11.458312034606934], + [0.21898102760314941, 11.27951431274414], + [2.3401620388031006, 0.13228744268417358], + [1.1217920780181885, -6.817397594451904], + [7.038355827331543, -3.3630311489105225], + [5.961439609527588, -1.3009666204452515], + [-0.6363477110862732, 0.9508349299430847], + [3.854107618331909, 1.89738929271698], + [4.2955098152160645, -3.488097667694092], + [-3.2218410968780518, 5.495932579040527], + [1.277348518371582, -1.114409327507019], + [0.21388202905654907, 11.911676406860352], + [-5.26921272277832, 6.227418422698975], + [-4.508428573608398, 4.629112720489502], + [3.814847946166992, -3.6825311183929443], + [-4.229982852935791, 7.408914089202881], + [-4.217339992523193, 4.382125377655029], + [2.7888829708099365, 5.429644584655762], + [-1.3668456077575684, -2.914217948913574], + [-3.83549427986145, -5.108340740203857], + [4.53781795501709, -4.349250793457031], + [-4.830770015716553, -3.418818235397339], + [-3.428081750869751, -3.3401384353637695], + [-2.1175732612609863, 2.5467045307159424], + [-2.030834197998047, 2.120378017425537], + [-4.3094801902771, -6.545825004577637], + [8.411763191223145, -2.2908780574798584], + [-4.478188991546631, -6.944352149963379], + [-6.473119735717773, -1.8634147644042969], + [-4.300163745880127, 4.457036972045898], + [9.778963088989258, -2.430586576461792], + [9.995935440063477, -2.5153450965881348], + [-3.9143574237823486, 0.6785417199134827], + [-2.071629524230957, 2.411391019821167], + [4.63515043258667, 6.46681022644043], + [10.20728874206543, -2.4152281284332275], + [-4.040369510650635, -6.074331283569336], + [2.9365389347076416, -4.160858631134033], + [4.153077602386475, 7.383273124694824], + [4.994552135467529, 7.056883811950684], + [2.8162107467651367, -9.177412986755371], + [-2.3354313373565674, 2.1313841342926025], + [10.031230926513672, -2.3712053298950195], + [0.6190196871757507, -0.8816525936126709], + [3.501406669616699, -5.040568828582764], + [-2.2063517570495605, 0.5564828515052795], + [-0.6851599812507629, 1.3752111196517944], + [3.545182466506958, -5.886906623840332], + [-4.99541711807251, 5.298687934875488], + [2.348822832107544, -8.860757827758789], + [3.043288469314575, -4.0696516036987305], + [3.4651310443878174, -3.835435628890991], + [3.350393533706665, 6.000666618347168], + [0.5045280456542969, -0.7838619351387024], + [6.530775547027588, -1.45401132106781], + [0.21496987342834473, -1.5888251066207886], + [3.269757032394409, -3.3161885738372803], + [9.148015022277832, -2.3584885597229004], + [-2.4236843585968018, 2.131434440612793], + [0.33832019567489624, -0.9550549387931824], + [2.2689549922943115, -7.914648056030273], + [-0.2243100106716156, -1.8440073728561401], + [-2.254293203353882, 2.75938081741333], + [-2.8106579780578613, -3.7026469707489014], + [5.856990337371826, -2.6003968715667725], + [0.4076763987541199, 11.09058666229248], + [-4.703494071960449, 5.644383430480957], + [4.980082035064697, -3.3827147483825684], + [0.04282922297716141, -1.4504071474075317], + [4.261489391326904, -3.812885046005249], + [2.346661329269409, 4.522800922393799], + [-2.539321184158325, 1.410451054573059], + [0.18228286504745483, 11.752578735351562], + [6.311225414276123, -1.108505129814148], + [5.434325695037842, -4.210975170135498], + [0.10149603337049484, 9.944744110107422], + [-6.315321445465088, 5.1957197189331055], + [6.132333755493164, 7.796865940093994], + [5.27998161315918, -5.234540939331055], + [0.7988650798797607, 6.026027679443359], + [-2.4663500785827637, 2.6665236949920654], + [0.3248182535171509, 10.792059898376465], + [6.597102165222168, 8.510457038879395], + [-0.767738938331604, 4.822429656982422], + [0.08509510010480881, 11.822338104248047], + [11.151739120483398, -2.501709222793579], + [9.181429862976074, -2.3395445346832275], + [3.4898340702056885, -5.358202934265137], + [0.13132816553115845, 12.014455795288086], + [2.382031202316284, 2.877159357070923], + [8.337215423583984, -2.3826870918273926], + [0.14576870203018188, 10.472816467285156], + [6.733405113220215, -3.6156349182128906], + [8.049970626831055, -2.1318671703338623], + [2.658681631088257, -7.022731781005859], + [0.15675508975982666, 10.24747371673584], + [0.014162115752696991, 11.406867980957031], + [-2.681428909301758, 2.1514487266540527], + [-0.051116056740283966, 8.799540519714355], + [4.765965938568115, -5.0406107902526855], + [9.297590255737305, -2.391880750656128], + [0.0053607746958732605, 12.187414169311523], + [2.5325260162353516, -9.135562896728516], + [2.7973461151123047, -8.378877639770508], + [-4.2364020347595215, -3.607757806777954], + [-2.0760040283203125, 2.570984125137329], + [-5.141173839569092, 4.689635753631592], + [-6.2585015296936035, 5.844708442687988], + [-4.247772216796875, -3.328556776046753], + [-3.3376166820526123, -5.179255485534668], + [1.774766445159912, 2.194890022277832], + [-3.0338971614837646, -3.67333722114563], + [10.329876899719238, -2.4627764225006104], + [3.624738931655884, -3.7791271209716797], + [1.8372507095336914, 5.348474979400635], + [-3.781697988510132, -3.980645179748535], + [-4.345926761627197, -5.959239482879639], + [-6.610766410827637, -0.7736497521400452], + [-2.0711240768432617, 2.548746347427368], + [3.7374823093414307, -2.956512212753296], + [-2.541614055633545, 1.78709077835083], + [-2.00530743598938, 2.2780816555023193], + [3.3859381675720215, 6.448024749755859], + [-4.107458591461182, -1.6355732679367065], + [-2.7605745792388916, -1.1652830839157104], + [0.11901890486478806, 9.591903686523438], + [-4.770911693572998, -3.436354875564575], + [7.898590087890625, -2.4678561687469482], + [6.772874355316162, 8.259416580200195], + [-1.521883249282837, 1.9933308362960815], + [-2.1913397312164307, 2.4769253730773926], + [-7.126708984375, -0.216180682182312], + [0.1618325114250183, 11.924071311950684], + [-2.556217670440674, 2.050205707550049], + [-5.606964111328125, -1.6802552938461304], + [1.9699952602386475, 2.619788885116577], + [3.464029550552368, 6.513427257537842], + [4.2394490242004395, 7.433815956115723], + [9.13782024383545, -2.3261983394622803], + [4.972701549530029, -2.953150749206543], + [-2.52902889251709, 1.8732653856277466], + [2.4164745807647705, 0.4532957673072815], + [-3.792152166366577, -0.8163366317749023], + [2.8882923126220703, -3.795708417892456], + [-1.5973901748657227, 0.7666749954223633], + [-2.0895066261291504, 2.2635915279388428], + [-4.026012897491455, -6.252435207366943], + [-0.04006446152925491, 12.662237167358398], + [3.2721269130706787, -4.7556962966918945], + [-2.13019061088562, 2.0513064861297607], + [0.16620516777038574, 9.572345733642578], + [-2.2263524532318115, -0.4026881456375122], + [4.544906139373779, 1.8503233194351196], + [0.2484460473060608, 10.846267700195312], + [-4.197453022003174, -3.0571815967559814], + [-7.302585124969482, 8.41440486907959], + [-6.890326976776123, 7.9007568359375], + [8.146905899047852, -2.609840154647827], + [2.67761492729187, 5.843585014343262], + [3.1954567432403564, 1.157288670539856], + [-2.774723768234253, -3.6877360343933105], + [3.0578994750976562, -4.963497638702393], + [2.6941378116607666, -3.8989250659942627], + [1.936401605606079, -8.261407852172852], + [-6.848727226257324, 8.050548553466797], + [-2.617736339569092, 1.0540478229522705], + [4.046474456787109, 1.9411616325378418], + [-0.9445114731788635, 1.4785315990447998], + [-1.8525893688201904, -3.391326665878296], + [6.9958672523498535, -1.8668060302734375], + [-3.809786558151245, -2.8954293727874756], + [-0.823813259601593, 1.6577540636062622], + [2.829500436782837, 6.634988784790039], + [3.2048251628875732, -4.6551833152771], + [-5.5888543128967285, 2.5730743408203125], + [7.938674449920654, -2.1565353870391846], + [2.760835886001587, 4.510840892791748], + [-6.728734493255615, 7.190138816833496], + [-2.1617445945739746, 2.7058117389678955], + [-5.238167762756348, 5.843710899353027], + [3.513004779815674, -8.273797035217285], + [-4.4561944007873535, -1.2755564451217651], + [5.85846471786499, -2.8271400928497314], + [7.682671070098877, -2.6870880126953125], + [-2.10719895362854, 2.5755808353424072], + [1.995927333831787, -7.338289260864258], + [3.313619375228882, -6.436338424682617], + [-4.592739582061768, -6.7727155685424805], + [6.067022800445557, -4.46334981918335], + [-2.278010606765747, 2.6144888401031494], + [2.5238375663757324, -3.1638424396514893], + [2.6612465381622314, -3.8131463527679443], + [-0.009658880531787872, 12.476173400878906], + [4.029017925262451, -4.027057647705078], + [-0.17980283498764038, -2.090637683868408], + [7.234165668487549, -2.226806640625], + [-5.546743869781494, -7.129092216491699], + [2.745622396469116, -3.905928373336792], + [10.520662307739258, -2.513113021850586], + [-4.329890251159668, -6.523669242858887], + [-4.810750484466553, -6.843041896820068], + [0.4295284152030945, -1.0855258703231812], + [-4.62851095199585, 5.758904457092285], + [4.086825847625732, -2.884491205215454], + [6.233840465545654, 7.8446946144104], + [-4.026095867156982, -1.593552589416504], + [-2.17592453956604, 2.6018476486206055], + [0.4640348553657532, -1.1708883047103882], + [-3.9059884548187256, -3.624532699584961], + [-2.5938661098480225, -2.8296892642974854], + [3.371976375579834, -9.064957618713379], + [-5.970101833343506, -1.1845306158065796], + [-2.5478525161743164, 1.8320329189300537], + [-3.6135079860687256, 5.0067315101623535], + [4.595508575439453, -3.1351735591888428], + [-0.05855328589677811, 14.470972061157227], + [-3.0367431640625, -4.853304862976074], + [-0.04032469540834427, 9.467456817626953], + [0.2623593807220459, 11.308574676513672], + [-2.5450119972229004, 2.8285293579101562], + [2.7302467823028564, -8.832834243774414], + [-0.00955171138048172, 12.429790496826172], + [5.653360843658447, 7.803368091583252], + [-1.4894092082977295, 1.4279896020889282], + [-2.798319101333618, -0.9585328102111816], + [3.3237946033477783, -3.292879581451416], + [-5.2973103523254395, 7.41907262802124], + [2.6141693592071533, -8.62037467956543], + [0.36031049489974976, 7.059329032897949], + [1.106328010559082, 3.218047857284546], + [-6.420157432556152, 6.464954376220703], + [0.25013968348503113, -1.2359288930892944], + [3.098314046859741, -3.0292842388153076], + [-2.028592586517334, 2.3933212757110596], + [6.104309558868408, 8.123729705810547], + [-4.854944705963135, -0.32627183198928833], + [-3.7385780811309814, -3.1352856159210205], + [-2.3512895107269287, 2.483774423599243], + [1.9550273418426514, 0.18002834916114807], + [-5.940413475036621, -0.8671626448631287], + [4.6420087814331055, -3.9824378490448], + [8.086392402648926, -2.137303113937378], + [3.228706121444702, -2.168398380279541], + [-2.0846951007843018, 2.4225895404815674], + [-2.0262327194213867, 2.0762369632720947], + [-4.407808780670166, 5.498700141906738], + [2.77034854888916, -2.966750383377075], + [-3.5946669578552246, -0.804165244102478], + [4.813891410827637, -3.2511842250823975], + [-2.1249186992645264, 2.292632818222046], + [8.39008903503418, -2.411957025527954], + [-0.042817749083042145, -1.2970019578933716], + [6.710084438323975, -2.3672828674316406], + [4.63735294342041, -2.6334192752838135], + [0.5487034916877747, 7.833003997802734], + [-4.310329914093018, -6.813790798187256], + [-3.256821870803833, -3.3551785945892334], + [-4.919551372528076, 4.671879291534424], + [3.6227188110351562, -7.497137069702148], + [1.9578678607940674, 4.978308200836182], + [-0.15210843086242676, 10.358802795410156], + [0.05553398281335831, -1.2076869010925293], + [3.2917087078094482, 4.921031951904297], + [-0.7069135308265686, 0.5340903997421265], + [-1.5182909965515137, -4.3883490562438965], + [0.3424932360649109, 10.530241012573242], + [3.0227811336517334, -9.316405296325684], + [-4.8544230461120605, -6.46933650970459], + [8.573286056518555, -2.2952940464019775], + [-1.2738776206970215, 1.5858701467514038], + [-0.9774768352508545, 1.3004308938980103], + [1.4982346296310425, -6.628829479217529], + [-0.8707308173179626, -3.2681543827056885], + [2.4757821559906006, 4.208405494689941], + [9.229018211364746, -2.287513017654419], + [3.4799630641937256, 1.2500873804092407], + [-2.2021307945251465, 2.3520455360412598], + [-0.9453368782997131, 1.2415088415145874], + [2.945814609527588, -9.067700386047363], + [11.277194023132324, -2.530371904373169], + [-2.4828779697418213, -4.389538764953613], + [-3.9101765155792236, -6.097877502441406], + [0.19502443075180054, 10.203848838806152], + [7.995765209197998, -2.1687114238739014], + [1.8732640743255615, -7.17270040512085], + [-6.245548725128174, 2.649348258972168], + [-5.038873672485352, -2.951726198196411], + [8.516234397888184, -2.316650867462158], + [5.571354866027832, 7.642104148864746], + [-2.2263898849487305, 2.3005776405334473], + [-5.810703754425049, 5.41030216217041], + [3.571610689163208, -3.8908183574676514], + [0.45013517141342163, -1.0340688228607178], + [-4.603113651275635, -2.653928518295288], + [3.804487466812134, -3.001574754714966], + [1.8659696578979492, 0.28635174036026], + [0.05555885285139084, 11.644440650939941], + [-2.398545742034912, 6.4275970458984375], + [8.0575590133667, -2.2088756561279297], + [6.515071392059326, -5.952954292297363], + [4.10360860824585, -3.575502395629883], + [0.030814997851848602, -1.527417778968811], + [-1.713196873664856, 0.5911956429481506], + [6.305830955505371, -5.118925094604492], + [0.057706646621227264, 12.31984806060791], + [-0.14356744289398193, -1.6980853080749512], + [1.4502105712890625, 4.939918041229248], + [2.7894325256347656, -7.0842814445495605], + [7.532478332519531, -2.3045780658721924], + [-3.4306600093841553, 5.459074974060059], + [5.158401966094971, -3.0797946453094482], + [-5.760538578033447, 0.2145073413848877], + [2.1730990409851074, 1.7265361547470093], + [8.859641075134277, -2.472626209259033], + [3.191377878189087, 1.4411182403564453], + [-8.775795936584473, 0.01467251405119896], + [0.043110184371471405, 9.608587265014648], + [-3.989305019378662, 5.077732086181641], + [-3.6184608936309814, -5.420367240905762], + [0.09592246264219284, 9.4981689453125], + [-3.3190901279449463, -5.025903701782227], + [0.08520131558179855, 11.63560676574707], + [2.203479528427124, -7.699246883392334], + [2.9194681644439697, -2.18070387840271], + [-4.309717655181885, -6.725142002105713], + [-0.06653857976198196, -1.3735586404800415], + [0.5557324290275574, 10.700733184814453], + [4.012872219085693, -2.567218065261841], + [2.449061632156372, 5.686347007751465], + [-1.0134047269821167, 0.8516929149627686], + [-4.243710041046143, -5.6272172927856445], + [2.2539451122283936, -7.9857635498046875], + [9.075065612792969, -2.439267158508301], + [-2.849710702896118, -2.6606788635253906], + [0.05637865513563156, 11.293655395507812], + [2.4217259883880615, -8.008709907531738], + [8.099799156188965, -2.2138712406158447], + [-0.03770226985216141, 12.977289199829102], + [1.7126531600952148, -6.899158477783203], + [-1.8264367580413818, 2.4526658058166504], + [3.679743528366089, 6.845243453979492], + [6.470601558685303, 8.202249526977539], + [-2.004392385482788, 0.17284941673278809], + [-1.4232431650161743, 0.13816729187965393], + [-1.0859133005142212, 3.9158856868743896], + [2.486853837966919, 5.392858505249023], + [7.159404277801514, -1.842993140220642], + [-6.122025012969971, 0.2988208532333374], + [-5.68049430847168, 4.388896942138672], + [-4.591384410858154, -6.3463134765625], + [0.09359591454267502, 11.91299819946289], + [8.07915210723877, -2.1626834869384766], + [2.4640610218048096, -1.294331669807434], + [7.591521739959717, 9.323102951049805], + [-3.959599494934082, 4.581744194030762], + [2.8130125999450684, -3.9701552391052246], + [3.8363475799560547, -3.6249072551727295], + [1.6023632287979126, 5.108431816101074], + [3.970062494277954, -8.321680068969727], + [-3.7438366413116455, -1.6953824758529663], + [8.80547046661377, -2.485239267349243], + [-4.457911014556885, -6.137621879577637], + [7.747198581695557, -2.7846109867095947], + [6.656955718994141, -1.8354592323303223], + [-4.440703392028809, 1.7078641653060913], + [8.976402282714844, -2.39979887008667], + [10.950748443603516, -2.4336764812469482], + [3.040537118911743, -7.685752868652344], + [3.7453830242156982, 1.189289927482605], + [4.249848365783691, 1.9367371797561646], + [-2.0814566612243652, 2.4798052310943604], + [-4.158549785614014, -2.5925562381744385], + [-2.3524813652038574, -5.32151985168457], + [0.02713143080472946, 11.853063583374023], + [3.546945095062256, -6.426131248474121], + [8.282939910888672, -2.3830223083496094], + [-3.8086655139923096, -5.702200889587402], + [3.4681224822998047, -3.731050729751587], + [0.8879868388175964, -6.503061294555664], + [3.0106492042541504, -4.248698711395264], + [-0.0316740944981575, 9.636164665222168], + [-0.45348674058914185, 9.758336067199707], + [2.5614020824432373, -8.475019454956055], + [1.7194961309432983, -7.908247947692871], + [-2.7374112606048584, 2.3505849838256836], + [-2.7860043048858643, 0.7746084928512573], + [4.00175666809082, -3.0849201679229736], + [3.066380739212036, 1.4141854047775269], + [1.5182747840881348, 5.684833526611328], + [-4.9372029304504395, -2.83392596244812], + [1.6468830108642578, 1.6839219331741333], + [-4.023106098175049, -6.449526786804199], + [5.830699443817139, 7.5413360595703125], + [3.3130762577056885, -6.55665922164917], + [0.20661604404449463, 10.990160942077637], + [2.836329221725464, -4.050542831420898], + [2.6967217922210693, 1.120786190032959], + [-3.1335294246673584, -0.4829093813896179], + [2.1794891357421875, 4.207856178283691], + [3.6609857082366943, 1.366262435913086], + [0.5805802941322327, 10.626042366027832], + [-4.199878692626953, -2.4597856998443604], + [-2.719356060028076, 7.633719444274902], + [-2.715811014175415, -3.0695226192474365], + [3.8251469135284424, -3.607069730758667], + [-4.918252944946289, -3.6175777912139893], + [-0.15454256534576416, -2.56142520904541], + [-0.9792267680168152, -3.3199503421783447], + [3.740342378616333, -3.443821907043457], + [7.143429279327393, -1.618787407875061], + [-2.127279043197632, 2.652203321456909], + [7.778500080108643, -2.7175536155700684], + [-3.1571719646453857, 2.4983785152435303], + [0.7580402493476868, -5.2300944328308105], + [2.953963041305542, -6.708205699920654], + [-3.1523056030273438, 4.9592604637146], + [5.916561603546143, 7.257315635681152], + [2.3404722213745117, -0.3003894090652466], + [0.23770058155059814, 11.005348205566406], + [-3.3978865146636963, -2.6356067657470703], + [-2.6249687671661377, 2.1556460857391357], + [9.152305603027344, -2.25972580909729], + [-2.5662806034088135, 2.0233848094940186], + [6.121477127075195, -4.371020793914795], + [-6.315078258514404, 7.219274520874023], + [0.14561957120895386, 10.149051666259766], + [-2.136976718902588, 2.1432228088378906], + [-2.651623010635376, -4.222683429718018], + [2.7913944721221924, -4.302706718444824], + [-2.2677040100097656, 2.2645695209503174], + [-3.7184295654296875, 8.098012924194336], + [3.5182430744171143, -2.951406478881836], + [-2.2038118839263916, 2.3065919876098633], + [-2.8055264949798584, 1.0921027660369873], + [-1.8819494247436523, 2.1558170318603516], + [-4.655979156494141, 6.392482280731201], + [-6.552864074707031, 7.572754383087158], + [2.8827931880950928, -7.510984420776367], + [-4.623239994049072, 6.466166973114014], + [-2.1287693977355957, 2.5642752647399902], + [-6.093538761138916, 7.788036346435547], + [4.7105393409729, -1.9933555126190186], + [-2.8386471271514893, -4.9363484382629395], + [-4.412168979644775, -0.5112756490707397], + [3.6438629627227783, -3.5186774730682373], + [-0.09096599370241165, 9.429641723632812], + [-2.1046767234802246, 2.6787238121032715], + [2.4865283966064453, -3.2060482501983643], + [-5.008485794067383, -7.427365303039551], + [-3.454988718032837, 2.7656116485595703], + [2.5613951683044434, -7.389608383178711], + [3.2536299228668213, -4.358311653137207], + [-2.1076300144195557, 2.6036088466644287], + [-5.098362922668457, -7.1281561851501465], + [-3.915400266647339, 6.075187683105469], + [-3.8148913383483887, 4.236362934112549], + [-1.7635422945022583, 0.9967958927154541], + [0.28314048051834106, 12.085994720458984], + [8.277904510498047, -2.30930495262146], + [-1.8187896013259888, 5.669739723205566], + [-2.795149087905884, -4.731791973114014], + [0.8882350325584412, -0.7507665753364563], + [2.0529520511627197, 3.1886749267578125], + [2.132485866546631, 0.7722208499908447], + [-3.9223859310150146, 3.954228162765503], + [2.428816080093384, -3.3179945945739746], + [2.279383659362793, -7.932024002075195], + [7.626041412353516, 9.150721549987793], + [-4.622961521148682, -0.9400631189346313], + [7.925910472869873, -1.994038462638855], + [5.777929782867432, -0.5536051988601685], + [-1.3474072217941284, 1.8930696249008179], + [-3.409846544265747, -3.036076307296753], + [-3.0993149280548096, -3.215461492538452], + [6.938248157501221, 8.32237434387207], + [1.9378676414489746, 5.9554362297058105], + [7.1658616065979, -2.800283670425415], + [3.8321075439453125, -4.828998565673828], + [1.6328281164169312, 3.5836002826690674], + [-2.770271062850952, -4.6470184326171875], + [8.679421424865723, -2.205637216567993], + [5.388835430145264, 7.629099369049072], + [1.821972370147705, 2.298790216445923], + [-2.431283712387085, -3.7736124992370605], + [6.239223480224609, -2.65635085105896], + [-3.3333096504211426, -5.050220489501953], + [3.3723363876342773, -3.70190167427063], + [-3.146625280380249, -3.4836056232452393], + [1.2079328298568726, -6.836486339569092], + [-2.118558168411255, -3.3903486728668213], + [-0.03578002005815506, 9.399538040161133], + [-1.8003125190734863, 1.9546962976455688], + [4.3263020515441895, 1.856634259223938], + [4.431848526000977, -3.4186995029449463], + [2.4417641162872314, -5.708049297332764], + [-2.290499687194824, 3.0854313373565674], + [1.6710344552993774, -6.920086860656738], + [4.521791458129883, -4.19044303894043], + [7.5227484703063965, -1.9595433473587036], + [-5.403803825378418, -2.2291524410247803], + [10.040840148925781, -2.456486463546753], + [-2.1607093811035156, 2.3108489513397217], + [0.2031325101852417, 11.924520492553711], + [2.3433265686035156, 4.48013973236084], + [-3.56579327583313, -0.9247620105743408], + [-2.0524396896362305, 2.475719451904297], + [-3.1871914863586426, 5.011222839355469], + [4.2250590324401855, -3.899590253829956], + [6.6790947914123535, 8.03959846496582], + [-2.0873324871063232, 2.432750940322876], + [-0.8225612640380859, -3.236420154571533], + [-3.965217351913452, -2.453579902648926], + [-4.287308216094971, 4.261844158172607], + [-4.269224166870117, -2.733441114425659], + [-4.960959434509277, 0.8964279890060425], + [5.236413478851318, -2.6645689010620117], + [5.695066928863525, 7.642374038696289], + [8.314120292663574, -2.26413893699646], + [-4.3984694480896, -6.546316623687744], + [6.8809027671813965, -4.630078315734863], + [0.025897137820720673, 12.72940444946289], + [-1.884750247001648, -0.5471331477165222], + [-4.310318470001221, 5.4332275390625], + [3.176762342453003, -4.061542510986328], + [7.635426998138428, -2.3349688053131104], + [-5.990283489227295, 6.7192158699035645], + [-0.6498029828071594, -0.45784032344818115], + [1.2317692041397095, -0.11486940085887909], + [8.351046562194824, -2.2906744480133057], + [1.0703251361846924, -7.001885414123535], + [-1.9449132680892944, -3.631929636001587], + [3.2541587352752686, -5.606221675872803], + [0.14908605813980103, 12.330224990844727], + [-4.297892093658447, 5.313852310180664], + [4.023781776428223, -8.240478515625], + [-4.6309099197387695, 4.220632553100586], + [1.7214666604995728, -0.05189870670437813], + [0.10860537737607956, 9.021688461303711], + [-5.082543849945068, 4.062077522277832], + [2.990633964538574, -6.740946292877197], + [3.1200129985809326, -4.274395942687988], + [1.782056450843811, -0.9728402495384216], + [1.6031923294067383, 5.256410598754883], + [-3.3363609313964844, 7.976612091064453], + [-4.489299297332764, 3.759721040725708], + [-5.207309246063232, -0.021630946546792984], + [1.5642527341842651, 5.8473944664001465], + [2.8651797771453857, 5.504642963409424], + [2.281057357788086, -2.050062417984009], + [-4.298868656158447, -2.874347448348999], + [8.122235298156738, -2.33555006980896], + [10.427906036376953, -2.555328130722046], + [7.221868515014648, -2.761683225631714], + [7.336211681365967, -2.3380286693573], + [7.512349605560303, 9.00955867767334], + [-4.709806442260742, -2.840031862258911], + [3.209975004196167, -5.945808410644531], + [2.8751256465911865, -3.57275652885437], + [3.9884884357452393, 1.4195650815963745], + [-6.641376972198486, -0.6510187387466431], + [-3.4554340839385986, -1.3911247253417969], + [8.954129219055176, -2.6592729091644287], + [4.041591167449951, -2.9680774211883545], + [3.758239507675171, 1.0658823251724243], + [5.412449359893799, -3.3659963607788086], + [-3.7249186038970947, -2.0391533374786377], + [-3.4105567932128906, 5.748363494873047], + [0.239124596118927, 11.292939186096191], + [5.158699035644531, -0.9411196708679199], + [-0.8845359683036804, 0.7801973223686218], + [5.906999111175537, 7.595571041107178], + [8.236565589904785, -2.2255806922912598], + [2.0415916442871094, -1.4849706888198853], + [4.100169658660889, -0.9206218719482422], + [-5.109702110290527, 5.603421688079834], + [7.198132038116455, 8.697702407836914], + [-3.202024221420288, -0.7694723010063171], + [0.007223658263683319, -0.11845535039901733], + [4.219539642333984, 2.072448253631592], + [0.26082301139831543, 11.36832046508789], + [4.041030406951904, -3.503809690475464], + [0.08499711006879807, 9.762493133544922], + [1.3193955421447754, -7.33421516418457], + [5.68904447555542, -6.87874698638916], + [5.60422420501709, -5.7209367752075195], + [-2.181365728378296, 5.674939155578613], + [-4.42057466506958, 4.672289848327637], + [2.7232472896575928, -8.815217018127441], + [2.9037506580352783, -4.003083229064941], + [1.9661808013916016, -8.015931129455566], + [8.249594688415527, -2.3784635066986084], + [6.330904006958008, -1.3820291757583618], + [2.6295225620269775, 1.4380855560302734], + [3.6641793251037598, -3.792149305343628], + [3.8375895023345947, -7.010313034057617], + [4.799079418182373, -0.9357749223709106], + [-2.043654203414917, 2.2698216438293457], + [-2.4853265285491943, 2.139866590499878], + [-4.603317737579346, -6.23520040512085], + [-4.019068717956543, 0.16853183507919312], + [-1.56782865524292, 1.7724356651306152], + [4.440847873687744, -2.6445844173431396], + [2.6683695316314697, -9.542306900024414], + [0.6099112033843994, -0.9404206275939941], + [-2.0582361221313477, 2.527540445327759], + [-0.04973209649324417, 13.389466285705566], + [-6.498727321624756, 0.41078293323516846], + [-1.9789305925369263, 2.0481202602386475], + [-5.715037822723389, 6.466554641723633], + [6.6175055503845215, 8.709439277648926], + [0.28788572549819946, 10.943796157836914], + [-2.075990915298462, 2.506802797317505], + [6.433664798736572, 8.061151504516602], + [0.03508853167295456, 12.314495086669922], + [-0.00987156480550766, -1.5291272401809692], + [0.9329443573951721, 4.568761825561523], + [6.925796985626221, -2.30267596244812], + [3.0903520584106445, -4.408708572387695], + [0.9771727919578552, -0.16783268749713898], + [6.299882888793945, -4.255627632141113], + [0.10842316597700119, 11.403985023498535], + [6.9863715171813965, -5.454758644104004], + [7.260575771331787, -2.5467655658721924], + [2.040428876876831, 4.089882850646973], + [-2.5237133502960205, -3.27227783203125], + [-5.833670139312744, -2.557968854904175], + [2.186269760131836, 1.3908578157424927], + [-5.4935221672058105, 1.808229684829712], + [8.160694122314453, 9.59156322479248], + [-4.115420341491699, -5.335695266723633], + [-3.6321842670440674, 5.299482345581055], + [9.494850158691406, -2.529362440109253], + [-6.67494535446167, -0.5435095429420471], + [3.9286015033721924, -4.51362419128418], + [3.3020589351654053, -4.723818778991699], + [-2.1361465454101562, 0.8472504615783691], + [-3.213099718093872, -0.992634654045105], + [4.467739105224609, 6.890326023101807], + [-0.05016655474901199, 9.410308837890625], + [2.0559442043304443, -0.13573777675628662], + [7.542079448699951, -2.172842264175415], + [2.2033157348632812, -3.1223721504211426], + [4.2679243087768555, -3.5745127201080322], + [-0.05951840430498123, 13.206483840942383], + [-1.7213950157165527, 5.338601589202881], + [-4.4677863121032715, 0.5475950241088867], + [4.366855144500732, -5.101110935211182], + [3.3631856441497803, -4.137056827545166], + [5.1840033531188965, -7.645208358764648], + [5.38092565536499, -1.2797609567642212], + [5.80499792098999, 7.24738073348999], + [7.674849033355713, 9.09010124206543], + [-0.040554411709308624, 9.790304183959961], + [-4.737645626068115, -3.859100818634033], + [-7.033858299255371, -0.34846174716949463], + [2.3596856594085693, 4.761767387390137], + [2.809819459915161, 4.10856294631958], + [-2.738048553466797, 1.2110679149627686], + [-2.3065178394317627, 1.9923964738845825], + [-4.040539264678955, -6.483705520629883], + [-5.344483852386475, -3.117356538772583], + [3.9220097064971924, -3.481107711791992], + [1.851353406906128, 0.21938350796699524], + [0.5500630736351013, 10.392106056213379], + [7.607956886291504, -2.001760482788086], + [2.360874891281128, -8.882770538330078], + [-6.1338348388671875, 7.110661506652832], + [2.2141716480255127, 5.829967498779297], + [8.056815147399902, -2.169884443283081], + [1.715859055519104, 0.13862469792366028], + [-4.902288913726807, -5.523506164550781], + [7.931708812713623, -2.384204626083374], + [-2.647540330886841, -3.763068914413452], + [0.11445730179548264, 9.749890327453613], + [-1.6036297082901, 1.5723835229873657], + [0.4093804955482483, 0.11344286799430847], + [0.9216535687446594, 0.9687671661376953], + [-3.3559560775756836, -2.8724000453948975], + [-3.6348440647125244, 5.3694891929626465], + [3.3335416316986084, -4.706465721130371], + [-7.313745021820068, 8.694844245910645], + [-5.897806644439697, -0.891843318939209], + [5.23157262802124, -5.770472526550293], + [1.7619545459747314, 4.067702293395996], + [5.325131893157959, -3.186579942703247], + [3.1874139308929443, -4.339396953582764], + [6.389706134796143, 8.50679874420166], + [3.8625152111053467, 1.6844629049301147], + [-7.809127330780029, -0.20454025268554688], + [-5.52642297744751, -0.17851293087005615], + [-2.677910804748535, 1.9683951139450073], + [-4.749858856201172, 1.1629115343093872], + [-4.3865485191345215, -6.886534214019775], + [-1.2460027933120728, -1.0842962265014648], + [7.527845859527588, -2.531217336654663], + [4.7702460289001465, 7.042974472045898], + [6.488187313079834, -5.960334777832031], + [2.0186893939971924, 0.11807116866111755], + [-5.673679828643799, -2.869737386703491], + [-2.22983455657959, -3.617689609527588], + [3.500559091567993, 1.9778441190719604], + [-3.691979169845581, 5.960726737976074], + [8.59167194366455, -2.272409677505493], + [-4.6423773765563965, -6.326450347900391], + [7.038571834564209, -1.5875033140182495], + [2.2208826541900635, 4.551614761352539], + [2.899822473526001, -8.345272064208984], + [-3.8971035480499268, -5.396632194519043], + [-4.4945454597473145, -0.18929684162139893], + [-2.2792298793792725, 2.350508451461792], + [-7.43739652633667, -1.7530701160430908], + [-2.4210410118103027, 2.991152763366699], + [6.9174299240112305, -1.6446453332901], + [3.060340166091919, -2.394249677658081], + [0.12343733757734299, 11.932548522949219], + [-2.864746332168579, -4.278352737426758], + [2.537736177444458, 1.0206271409988403], + [3.7327301502227783, -3.0821640491485596], + [5.377302169799805, -6.308362007141113], + [0.6861249804496765, -0.8121151924133301], + [9.248326301574707, -2.271336317062378], + [-1.5429680347442627, 0.7388268709182739], + [2.7178804874420166, 5.763901710510254], + [2.3613412380218506, 5.549941062927246], + [1.2958199977874756, -1.3286951780319214], + [-0.9991496205329895, -2.790358066558838], + [-2.180102586746216, 2.2837560176849365], + [-4.352982521057129, 4.28419303894043], + [3.0598623752593994, 2.0739994049072266], + [-4.55112361907959, 5.087237358093262], + [-2.81337571144104, -4.956871509552002], + [3.1722843647003174, -4.5353102684021], + [-2.028374195098877, 2.2934062480926514], + [4.739704608917236, 7.1466546058654785], + [5.19621467590332, -1.5269848108291626], + [-0.09831935912370682, 14.030341148376465], + [9.104453086853027, -2.3488385677337646], + [-4.309055328369141, -6.303003311157227], + [6.879344463348389, -2.850895643234253], + [-2.0929462909698486, 2.5054378509521484], + [-0.12999141216278076, -1.6719967126846313], + [0.20369607210159302, 10.612762451171875], + [0.5346717238426208, -1.1311901807785034], + [9.154805183410645, -2.2898623943328857], + [3.428884506225586, 6.885872840881348], + [4.081357479095459, -3.509873151779175], + [4.016482830047607, -6.782831192016602], + [-2.286724805831909, -3.810321569442749], + [-1.826514720916748, 2.380707025527954], + [-1.9818142652511597, 2.62790584564209], + [-1.6494996547698975, 1.426830768585205], + [3.3037068843841553, -4.703001022338867], + [1.3473796844482422, -0.2702740728855133], + [-4.2257866859436035, -3.7542343139648438], + [7.954471111297607, -2.2476847171783447], + [3.8258230686187744, -7.702303886413574], + [-5.555868625640869, 4.76371955871582], + [6.738110542297363, -1.888400673866272], + [5.381311893463135, 8.2012357711792], + [-1.700749158859253, -0.6177535057067871], + [-2.5459015369415283, 1.8735346794128418], + [-4.682076930999756, 4.831995964050293], + [2.8573105335235596, 4.8553948402404785], + [6.840223789215088, 8.2728271484375], + [-2.206786870956421, 2.3439199924468994], + [4.149363040924072, 1.976425290107727], + [1.7568418979644775, 6.069455146789551], + [8.398802757263184, -2.3278472423553467], + [-1.9888927936553955, -2.045565366744995], + [8.144122123718262, -2.253556728363037], + [2.3643009662628174, 3.160733938217163], + [3.6473164558410645, 5.684900283813477], + [5.876110076904297, -1.219281554222107], + [5.5252909660339355, -1.213395118713379], + [2.8423573970794678, 4.277179718017578], + [-3.796889543533325, 4.216578483581543], + [-0.12628036737442017, 13.189599990844727], + [0.15368670225143433, 10.119136810302734], + [0.984950840473175, -6.889474391937256], + [-2.4323318004608154, 6.102881908416748], + [1.2364434003829956, -0.40310683846473694], + [5.454295635223389, 7.405387878417969], + [2.795478582382202, -9.289690017700195], + [5.193587779998779, -4.513273239135742], + [-4.847517013549805, 6.116304397583008], + [-4.142524242401123, 4.399201393127441], + [7.761274814605713, -2.0700411796569824], + [3.1929502487182617, -3.9645681381225586], + [6.092386722564697, -1.364699125289917], + [-3.069911241531372, -5.950718879699707], + [3.696549654006958, -3.633070945739746], + [0.07757710665464401, 12.124378204345703], + [-0.04018474370241165, 9.983498573303223], + [3.523721218109131, -3.424290418624878], + [-0.3435360789299011, 9.59065055847168], + [8.92603874206543, -2.251453399658203], + [-2.203728437423706, 2.721893787384033], + [-0.15995749831199646, -1.0645989179611206], + [-4.794608116149902, 4.6981964111328125], + [-3.369577169418335, -5.617121696472168], + [5.870804786682129, 7.684389114379883], + [-4.142642498016357, 4.372708797454834], + [8.936995506286621, -2.4813520908355713], + [5.9137163162231445, 7.952608108520508], + [-2.1398367881774902, 2.6470205783843994], + [-3.926438570022583, -6.1185102462768555], + [3.1108787059783936, -8.101375579833984], + [3.3044698238372803, -4.607071876525879], + [2.1121346950531006, 5.969069480895996], + [-2.973586320877075, -2.9178526401519775], + [-5.345804691314697, 5.569352149963379], + [-3.1350314617156982, -5.285398006439209], + [3.942239999771118, -6.331428050994873], + [-3.8857247829437256, -3.2390635013580322], + [1.911608099937439, -7.803872108459473], + [-1.0087896585464478, -2.3090784549713135], + [1.5431621074676514, -4.590136528015137], + [1.6071183681488037, -7.55476713180542], + [-6.293191432952881, 0.4065083861351013], + [-1.5933585166931152, 0.9791855812072754], + [-5.508143901824951, -3.2235281467437744], + [3.752307176589966, -7.749598503112793], + [0.5750669240951538, -1.0949461460113525], + [-4.875515937805176, -2.126307964324951], + [2.266204595565796, 2.7525644302368164], + [-5.97578763961792, -0.37420886754989624], + [-4.647069454193115, -3.8253092765808105], + [9.44909381866455, -2.404296398162842], + [7.87588357925415, 9.34113883972168], + [-5.120497226715088, 1.235758662223816], + [-4.5199360847473145, -1.2939015626907349], + [3.307898998260498, -3.387244939804077], + [-6.451899528503418, -0.4931206703186035], + [7.808907985687256, -2.539973020553589], + [0.1616097092628479, 10.033601760864258], + [-2.16373610496521, 2.3402116298675537], + [-7.193000316619873, -0.20374822616577148], + [2.991802215576172, -8.424771308898926], + [1.2604628801345825, 0.9108847975730896], + [3.0298011302948, -4.842159271240234], + [-1.8896780014038086, 1.1605015993118286], + [-4.45187520980835, -6.258382797241211], + [-2.271235704421997, -3.8859755992889404], + [-0.042260654270648956, 12.24860954284668], + [1.6072673797607422, 1.2872118949890137], + [2.4989335536956787, 5.689834117889404], + [-2.7579686641693115, 4.778665065765381], + [0.07004385441541672, 12.98829460144043], + [5.327194690704346, 7.99163818359375], + [3.5142412185668945, -3.8069517612457275], + [4.164651393890381, -7.021477699279785], + [3.2333216667175293, -6.275933265686035], + [-0.0022069886326789856, 12.504912376403809], + [3.683507204055786, -8.647279739379883], + [-2.211019277572632, 2.2554867267608643], + [0.9083670973777771, -0.9301513433456421], + [-1.6380717754364014, 2.3895158767700195], + [-5.649631977081299, 3.131378173828125], + [-0.24779942631721497, -1.6739311218261719], + [1.9011681079864502, 6.234076976776123], + [0.046366386115550995, 12.879890441894531], + [8.948848724365234, -2.3551723957061768], + [-4.1568169593811035, -6.325594902038574], + [-4.831013202667236, -3.0502288341522217], + [5.799508094787598, 7.550240993499756], + [8.196147918701172, -2.165187120437622], + [-0.37060731649398804, -0.45788782835006714], + [-7.250817775726318, 8.507170677185059], + [-1.4835939407348633, -3.872981309890747], + [2.94041109085083, -4.0806803703308105], + [-2.9776923656463623, -2.709587812423706], + [3.8648433685302734, -3.5948069095611572], + [-2.6505110263824463, 1.3662068843841553], + [2.0027544498443604, 2.1859381198883057], + [-3.340806245803833, -0.8087912797927856], + [-3.322859048843384, -0.26058095693588257], + [2.794553518295288, -2.8117544651031494], + [-4.464265823364258, 6.360106468200684], + [-5.567710876464844, 6.464425086975098], + [3.9518511295318604, 1.9398947954177856], + [-3.93926739692688, -4.87225866317749], + [5.675777912139893, 8.102731704711914], + [-2.328219175338745, -1.5264805555343628], + [7.120013236999512, -2.8065402507781982], + [-3.3586719036102295, 4.445705413818359], + [2.3391952514648438, 4.098971843719482], + [-1.7304489612579346, 1.7993465662002563], + [3.388946294784546, -6.928171634674072], + [-4.75203275680542, 4.6131591796875], + [-4.831492900848389, 4.124274253845215], + [0.0006421133875846863, 12.555299758911133], + [3.3160412311553955, -3.3632419109344482], + [5.823894023895264, 7.298408508300781], + [1.2078022956848145, -0.8025535345077515], + [-2.0860671997070312, 0.5115734934806824], + [0.31789740920066833, 0.8871385455131531], + [-3.410780668258667, -0.16124963760375977], + [0.1776246428489685, 11.330926895141602], + [2.8498635292053223, -8.151591300964355], + [-1.9147992134094238, 2.326199531555176], + [2.432523488998413, -6.741268157958984], + [9.780632972717285, -2.5197808742523193], + [-2.2518270015716553, -3.7245328426361084], + [3.3326847553253174, -5.075521469116211], + [2.7599263191223145, -9.433503150939941], + [-0.1190231516957283, 9.15046501159668], + [-3.559717893600464, -2.4206926822662354], + [9.89450454711914, -2.327162504196167], + [-5.052740573883057, -7.703675746917725], + [3.3194103240966797, -7.468375205993652], + [2.757551670074463, -7.1634674072265625], + [0.7063282132148743, 0.721575915813446], + [3.8664400577545166, -3.399479389190674], + [-4.002490997314453, -6.327178001403809], + [-5.923269271850586, 4.565882682800293], + [2.487135648727417, -8.330545425415039], + [-3.7535507678985596, -5.726995468139648], + [0.24525195360183716, 11.262301445007324], + [-4.554050922393799, -1.2263263463974], + [-4.628598213195801, 5.587920188903809], + [-6.494273662567139, 7.770514965057373], + [8.680895805358887, -2.3610565662384033], + [-4.296097278594971, -6.649720191955566], + [-4.8364129066467285, -3.1766409873962402], + [1.654207706451416, 4.065547943115234], + [-0.016894228756427765, 12.257287979125977], + [5.663995742797852, -3.6799330711364746], + [-0.06418842822313309, 13.068636894226074], + [2.3080391883850098, 1.8274372816085815], + [-1.1889827251434326, -3.682657480239868], + [-4.529672622680664, -0.6002007722854614], + [7.203246593475342, 8.74821662902832], + [0.22495293617248535, 11.044281959533691], + [2.0447309017181396, 0.2522922158241272], + [-2.227729320526123, 2.514517307281494], + [3.752183675765991, -3.089630365371704], + [0.0985027477145195, 9.66993522644043], + [7.956421375274658, -2.4676315784454346], + [2.6058967113494873, -6.519880294799805], + [6.779435634613037, 8.506902694702148], + [3.6969573497772217, -5.688331604003906], + [2.888636827468872, 5.12552547454834], + [-1.1555997133255005, -0.7712066173553467], + [3.2070724964141846, -5.139139175415039], + [7.361526966094971, -1.9761905670166016], + [-0.19983646273612976, -1.4871083498001099], + [-9.064265251159668, 0.17819571495056152], + [-2.2225236892700195, 1.8165241479873657], + [2.4900057315826416, 4.058038711547852], + [1.8390750885009766, 0.03142746910452843], + [8.103154182434082, -2.2349507808685303], + [3.3685662746429443, -3.023164987564087], + [3.5156922340393066, -3.4722912311553955], + [2.3073558807373047, 5.930473804473877], + [-7.40647554397583, -1.3569831848144531], + [5.27958345413208, -6.773516654968262], + [2.0246970653533936, 4.947904109954834], + [9.96444034576416, -2.4512739181518555], + [-5.24813985824585, -4.871211051940918], + [10.499358177185059, -2.452932596206665], + [2.4588210582733154, -7.423313617706299], + [-2.5256640911102295, -3.335418462753296], + [-0.23449942469596863, -1.89085853099823], + [2.62605357170105, -9.016571044921875], + [0.2745993733406067, 12.293883323669434], + [2.604027509689331, 3.724586248397827], + [4.354162693023682, -1.5762850046157837], + [6.315834045410156, -3.3092730045318604], + [-2.195188045501709, 2.371708869934082], + [-2.3214657306671143, -3.3939363956451416], + [-2.4916486740112305, -2.805537462234497], + [-1.442486047744751, 1.073602318763733], + [8.374184608459473, -2.2731330394744873], + [4.5228352546691895, 1.7214148044586182], + [2.839158296585083, -9.620645523071289], + [-4.850316524505615, 3.14017915725708], + [-2.4128315448760986, 1.6049425601959229], + [6.2429118156433105, -2.6502695083618164], + [-3.423865556716919, 3.290302276611328], + [-3.862870216369629, -0.15947413444519043], + [0.9588651061058044, -0.14331208169460297], + [-2.9341647624969482, 2.5905020236968994], + [0.07460885494947433, 2.840759038925171], + [-3.581049919128418, -6.46971321105957], + [0.01736324280500412, 13.180437088012695], + [-2.286776304244995, -4.054858684539795], + [7.717473030090332, -2.7604944705963135], + [-2.4302942752838135, 1.4773821830749512], + [3.8775746822357178, 0.6383494138717651], + [3.3289220333099365, -8.772863388061523], + [2.8228139877319336, -3.129153251647949], + [7.5997633934021, -2.0363471508026123], + [2.8259403705596924, -2.9093282222747803], + [5.277400970458984, 6.617875099182129], + [3.409024953842163, -4.926607131958008], + [-2.4982450008392334, -4.541263580322266], + [3.2455976009368896, -7.0288238525390625], + [-1.1363290548324585, 2.202446699142456], + [-2.4067423343658447, 1.022897481918335], + [3.4362127780914307, -4.161318302154541], + [0.03878553956747055, 0.26346874237060547], + [-0.35510361194610596, 9.97633171081543], + [5.241185665130615, 6.478353977203369], + [5.224352836608887, -2.2260429859161377], + [-3.940051555633545, 1.7394496202468872], + [1.045648217201233, 11.118770599365234], + [3.089891195297241, 6.334508895874023], + [4.3839640617370605, 5.911978721618652], + [3.852992534637451, -2.8675830364227295], + [0.03929906338453293, -1.5472655296325684], + [-4.912360668182373, -2.6734538078308105], + [-1.938562273979187, 1.2801380157470703], + [8.856982231140137, -2.3343708515167236], + [3.1854584217071533, -4.595381259918213], + [-3.6346638202667236, -0.9122828841209412], + [3.5459671020507812, -2.9803810119628906], + [-3.477518320083618, -5.120635986328125], + [-2.77695631980896, 1.8868755102157593], + [2.543879270553589, -8.566082954406738], + [0.189250648021698, 10.684507369995117], + [-0.06696606427431107, -2.3448197841644287], + [-1.2120273113250732, 1.3922053575515747], + [-4.7665791511535645, 5.796541213989258], + [0.6172369122505188, -0.9270424246788025], + [4.63329553604126, -5.625446319580078], + [-6.510354995727539, 7.514839172363281], + [6.730190753936768, -2.0545291900634766], + [-4.181522369384766, 6.141262054443359], + [2.853922128677368, 1.9418373107910156], + [-2.5171380043029785, 1.8738927841186523], + [-2.1822917461395264, 2.4140546321868896], + [-6.486199855804443, 7.594362258911133], + [-5.7352519035339355, 4.065234184265137], + [-0.08334452658891678, 9.484408378601074], + [0.3113635182380676, 10.507824897766113], + [2.9777820110321045, -8.169195175170898], + [6.007075786590576, -0.21473222970962524], + [1.4991614818572998, -7.767477989196777], + [7.8735551834106445, -2.3025214672088623], + [3.3791515827178955, -3.673858880996704], + [3.4850873947143555, 6.507657051086426], + [-5.909717559814453, 6.778879165649414], + [-2.110086679458618, 2.6760082244873047], + [2.7327210903167725, 2.0081818103790283], + [3.338707447052002, 1.638609528541565], + [0.57948899269104, -1.0325909852981567], + [3.138085126876831, 6.549947738647461], + [5.687880992889404, -4.044960021972656], + [3.6397504806518555, 1.1564475297927856], + [0.033713869750499725, 10.326861381530762], + [2.077448606491089, -7.454301357269287], + [3.7517788410186768, 1.8481091260910034], + [3.060840129852295, -3.9949190616607666], + [-4.308812618255615, 4.612033367156982], + [-5.271239757537842, 5.85484504699707], + [1.5148849487304688, 4.844604015350342], + [-4.658610820770264, -6.151686668395996], + [7.862660884857178, -2.342473268508911], + [3.5721499919891357, -9.146221160888672], + [0.23842871189117432, 10.861042022705078], + [0.2430112361907959, 11.12353515625], + [2.815577745437622, -3.94861102104187], + [-4.2468132972717285, -6.575056552886963], + [0.15078628063201904, 10.166934967041016], + [-0.11134690791368484, 13.286521911621094], + [3.8114826679229736, -5.041759490966797], + [10.035120964050293, -2.401200294494629], + [2.414506673812866, -8.535947799682617], + [6.111900806427002, 7.5053863525390625], + [-0.13452601432800293, 0.09294477105140686], + [3.19213604927063, -4.691107749938965], + [-4.221126556396484, 4.162819862365723], + [-4.355906009674072, -6.604041576385498], + [-2.482654333114624, 1.4688414335250854], + [6.5115180015563965, -1.4672802686691284], + [-5.1152729988098145, 5.810281276702881], + [7.359842300415039, 8.913394927978516], + [1.5622570514678955, 1.9826799631118774], + [-0.23188263177871704, -1.717241644859314], + [3.541069507598877, 6.416131019592285], + [4.094597339630127, -3.753347396850586], + [2.9367787837982178, 0.9430446028709412], + [7.232426643371582, -3.018343210220337], + [1.7903845310211182, 1.2533602714538574], + [2.178778886795044, 1.1018980741500854], + [-2.1212363243103027, 2.377711772918701], + [0.21450471878051758, 10.921993255615234], + [-5.608632564544678, 5.314505100250244], + [-4.648990154266357, -6.414015293121338], + [-3.1629226207733154, -1.6663979291915894], + [0.11450260132551193, 12.60076904296875], + [6.378379821777344, -4.262453556060791], + [1.7456789016723633, -2.67128849029541], + [-5.099409580230713, 5.369738578796387], + [-6.414719104766846, 5.544068336486816], + [1.367607831954956, -6.241913318634033], + [-2.5557925701141357, -3.6860191822052], + [2.796827554702759, -4.02161169052124], + [9.649072647094727, -2.3803393840789795], + [2.4184277057647705, -6.633195877075195], + [5.920567989349365, 7.359503269195557], + [-0.032582350075244904, 9.208868980407715], + [0.572880744934082, -1.0255800485610962], + [0.2791668176651001, 9.263825416564941], + [0.7925317883491516, 1.017039179801941], + [3.881939172744751, 1.6021748781204224], + [-1.8393784761428833, 1.1873106956481934], + [0.4203602075576782, 10.387523651123047], + [0.14990359544754028, 10.350259780883789], + [-0.1014685109257698, 14.348844528198242], + [1.0283986330032349, -0.6058305501937866], + [-4.536860942840576, -2.991081476211548], + [-2.1650192737579346, 2.7411751747131348], + [0.9302712082862854, -0.4034198522567749], + [2.9185593128204346, 0.9396693706512451], + [-2.6202661991119385, 1.9809397459030151], + [-4.120197772979736, -1.755447506904602], + [-6.650140762329102, 7.802199840545654], + [-3.510056257247925, 3.6712429523468018], + [-3.879956007003784, -2.6845157146453857], + [0.025092177093029022, 11.862030029296875], + [3.2792375087738037, -8.626245498657227], + [3.50213360786438, 1.2898848056793213], + [8.868012428283691, -2.421410322189331], + [4.419161319732666, -4.149350166320801], + [-5.954484462738037, -0.6446816921234131], + [8.244307518005371, -2.2147324085235596], + [0.13298654556274414, 10.41354751586914], + [-3.277066946029663, 4.939058303833008], + [3.3855643272399902, -6.1220574378967285], + [-5.581702709197998, -5.456607818603516], + [6.54041051864624, -3.4354732036590576], + [-2.978032350540161, -4.653613090515137], + [5.517248153686523, -1.9048526287078857], + [-5.336156368255615, -1.258396029472351], + [0.1971888542175293, 10.406322479248047], + [3.5605342388153076, -7.213625907897949], + [-4.6140336990356445, -2.7720868587493896], + [-7.070023059844971, -0.9092128872871399], + [2.630532741546631, -5.887067794799805], + [-4.637760162353516, 7.980533599853516], + [1.8335366249084473, -7.5250678062438965], + [3.357365846633911, -3.5657951831817627], + [-5.321481704711914, 6.070030689239502], + [0.9870002865791321, -6.603153228759766], + [5.846207618713379, -1.2025713920593262], + [-2.1700377464294434, 2.4909582138061523], + [-1.1005480289459229, -3.534248113632202], + [5.112610340118408, -3.338879346847534], + [-4.374326229095459, -2.9299540519714355], + [7.484714984893799, 8.87086296081543], + [9.935911178588867, -2.460780143737793], + [2.686790704727173, -3.7748324871063232], + [-2.2803728580474854, 2.3478305339813232], + [0.022855885326862335, -1.6187361478805542], + [3.4379818439483643, -5.051835060119629], + [0.2844616174697876, -1.2335995435714722], + [-3.591749429702759, -0.9401723742485046], + [-7.521751403808594, 8.789495468139648], + [-4.468536853790283, -7.158563137054443], + [1.505334734916687, -0.3254263997077942], + [6.199382305145264, 8.144168853759766], + [-2.1369822025299072, 2.566513776779175], + [-6.196034908294678, 7.354609966278076], + [2.100952386856079, -8.495283126831055], + [-2.1977968215942383, 2.199145793914795], + [-1.429548740386963, -3.429166316986084], + [-1.9727487564086914, -3.5141870975494385], + [-4.956389427185059, 4.340611457824707], + [3.168569326400757, -4.145071029663086], + [3.401333808898926, -4.227801322937012], + [0.08715861290693283, 9.645818710327148], + [5.920233249664307, -1.0689316987991333], + [3.070434093475342, -3.1493167877197266], + [-3.696301221847534, -4.1875], + [-4.144677639007568, 6.945666790008545], + [4.020706653594971, -3.0754239559173584], + [8.658385276794434, -2.31402850151062], + [-0.9226083159446716, -1.886332631111145], + [6.849137306213379, -2.5259830951690674], + [-4.531823635101318, 6.807887554168701], + [-3.1135849952697754, -1.3491965532302856], + [1.0352020263671875, -6.923704147338867], + [0.20692342519760132, 10.617070198059082], + [1.2592980861663818, -0.0370873399078846], + [0.4987793564796448, 0.012903328984975815], + [-4.520878791809082, 4.717922687530518], + [2.666104793548584, 6.0926923751831055], + [2.860630750656128, -3.9857141971588135], + [3.0341718196868896, -4.2915449142456055], + [-3.920560598373413, 3.6942338943481445], + [3.9697182178497314, -8.400144577026367], + [-3.4641940593719482, -4.712823390960693], + [-0.021501965820789337, 9.057201385498047], + [3.1911184787750244, -4.044009685516357], + [-5.662153720855713, -2.2516534328460693], + [1.492614507675171, -7.848647117614746], + [-2.268301486968994, 2.697558879852295], + [8.255484580993652, -2.247075080871582], + [3.4334967136383057, -4.7328057289123535], + [5.123663425445557, -4.770403861999512], + [10.197239875793457, -2.598113775253296], + [-2.411396026611328, -3.973344087600708], + [0.5648914575576782, -1.0103424787521362], + [7.040032386779785, 8.417163848876953], + [-6.040675163269043, 4.498985290527344], + [1.7941138744354248, 5.232412815093994], + [3.479438066482544, -2.74824595451355], + [9.520609855651855, -2.3605310916900635], + [2.610825300216675, -3.821699380874634], + [-7.134859085083008, 8.890766143798828], + [3.249793291091919, -2.161043882369995], + [-0.37609219551086426, -4.148616790771484], + [-4.384104251861572, -6.762166500091553], + [-2.2767655849456787, 2.024819850921631], + [0.14538246393203735, 11.75841236114502], + [-5.973114967346191, 6.712602615356445], + [3.8139090538024902, -3.837937355041504], + [3.535126209259033, -3.7433207035064697], + [-4.416521072387695, -0.4846111536026001], + [6.922766208648682, -1.8712401390075684], + [3.4644548892974854, -8.150726318359375], + [1.8163402080535889, -8.319412231445312], + [-3.766451597213745, -5.942028045654297], + [2.287562131881714, -3.281860113143921], + [-5.146804332733154, -0.9350587129592896], + [7.1933112144470215, -3.6431827545166016], + [-5.593778133392334, -1.0670801401138306], + [-3.623581886291504, -4.1060285568237305], + [9.057963371276855, -2.331861972808838], + [7.176645755767822, -1.9311823844909668], + [5.4282050132751465, 7.596070289611816], + [-4.668806552886963, -7.228496551513672], + [3.9282472133636475, -3.048964262008667], + [3.941025972366333, 5.322636604309082], + [-3.830923318862915, -2.3740992546081543], + [-1.2889180183410645, 1.5676124095916748], + [2.7132556438446045, 1.5182738304138184], + [-5.828256130218506, 6.651834011077881], + [2.666710615158081, -7.507347583770752], + [9.791333198547363, -2.470014810562134], + [3.507559299468994, 1.0183473825454712], + [0.12092398852109909, 9.621251106262207], + [3.145662546157837, -6.672945976257324], + [-2.038517951965332, 1.6056634187698364], + [-5.691944599151611, -0.7461767196655273], + [9.836162567138672, -2.4359915256500244], + [3.008888006210327, -4.1944990158081055], + [4.0132365226745605, -2.563908100128174], + [-7.476262092590332, 8.79945182800293], + [-2.363497495651245, 2.23004412651062], + [-1.846218466758728, 1.698512077331543], + [2.4268550872802734, 4.145396709442139], + [6.262009143829346, -1.2767330408096313], + [-3.3433151245117188, -3.501582622528076], + [3.223323106765747, -4.206311225891113], + [7.66973876953125, -3.1532716751098633], + [2.309134006500244, 5.253793239593506], + [2.5301523208618164, 0.14571619033813477], + [0.171481192111969, 0.4539961814880371], + [-2.3979551792144775, 2.1007893085479736], + [2.579827070236206, 5.592215061187744], + [-4.9078288078308105, 0.5652061104774475], + [-5.003316402435303, -3.5029263496398926], + [6.484823703765869, -1.4570393562316895], + [0.21826177835464478, -1.0956612825393677], + [-2.067647933959961, 2.597867250442505], + [4.803520202636719, 7.171773433685303], + [4.158401012420654, -4.69782829284668], + [0.2602643370628357, 10.668048858642578], + [0.16075462102890015, 9.783456802368164], + [-1.8905596733093262, -2.1523942947387695], + [3.465444326400757, -4.974492073059082], + [-3.250890016555786, -4.897561073303223], + [-4.010758399963379, 6.507943630218506], + [-5.885813236236572, 6.700746536254883], + [1.232757806777954, -6.581001281738281], + [-3.841179132461548, -2.791865110397339], + [5.9572224617004395, 8.136056900024414], + [0.037390343844890594, 8.95515251159668], + [1.5069096088409424, -7.338477611541748], + [2.037719964981079, 5.442264556884766], + [2.080566167831421, 2.273146867752075], + [6.416714191436768, 7.909404754638672], + [5.113057613372803, -4.431598663330078], + [-4.789117813110352, -3.777801513671875], + [-4.969306468963623, 5.008089065551758], + [6.10981559753418, 8.065740585327148], + [-0.4646359384059906, -2.0334746837615967], + [1.770871639251709, 3.583165407180786], + [0.22709274291992188, 10.939828872680664], + [-0.0029155686497688293, 12.714799880981445], + [1.2456245422363281, -4.458395481109619], + [-2.007413625717163, 0.6600146293640137], + [7.626235485076904, 9.016276359558105], + [-3.525238513946533, -2.730792760848999], + [2.349423408508301, -3.1387548446655273], + [-4.345462322235107, -4.765623092651367], + [-2.591200590133667, 1.9820250272750854], + [0.0742897316813469, 9.468079566955566], + [-5.034790515899658, 4.889156341552734], + [-6.683806896209717, 7.456308364868164], + [-6.198845386505127, 7.781532287597656], + [-2.4882619380950928, 1.1196311712265015], + [-6.728095531463623, 7.94970703125], + [-6.0753254890441895, 4.868847846984863], + [0.23402446508407593, 11.04769515991211], + [-5.14565896987915, 5.199662685394287], + [-6.098110675811768, -0.5528449416160583], + [2.7319986820220947, 3.5588271617889404], + [1.8132773637771606, 2.200812578201294], + [3.4236316680908203, -4.692888259887695], + [8.527783393859863, -2.495549440383911], + [2.9022796154022217, 5.058267593383789], + [-2.234961748123169, 2.271702527999878], + [0.6796738505363464, -5.996373176574707], + [-4.530653953552246, 5.585260391235352], + [-3.098040819168091, -0.5665676593780518], + [-4.549370288848877, -6.763217926025391], + [-3.5223233699798584, -1.4998456239700317], + [-2.203510284423828, 2.3032097816467285], + [2.994274616241455, -3.626183271408081], + [3.403501510620117, 6.1867194175720215], + [0.4392393231391907, -1.4805097579956055], + [3.6439363956451416, -5.202442169189453], + [5.769259452819824, -3.9339053630828857], + [3.5247738361358643, -6.847901821136475], + [3.905695676803589, 1.7828770875930786], + [-1.3974659442901611, -3.275575637817383], + [-1.1217691898345947, -3.6793675422668457], + [-2.5991463661193848, 1.826296329498291], + [-0.02641201764345169, 9.274843215942383], + [8.869032859802246, -2.3336329460144043], + [5.607363224029541, 7.295770645141602], + [-0.07282549887895584, 14.205525398254395], + [10.979979515075684, -2.504230260848999], + [-2.431694269180298, -1.8894742727279663], + [8.03625774383545, -2.1375081539154053], + [2.845360040664673, -6.764848709106445], + [3.0134356021881104, 6.2288126945495605], + [-4.015135288238525, -6.421260356903076], + [-3.25081729888916, 4.554726600646973], + [-2.7974698543548584, 5.320193290710449], + [3.346240758895874, -4.761453628540039], + [1.4837299585342407, -7.635931968688965], + [3.6962597370147705, 6.415950775146484], + [-1.5399680137634277, 1.809655785560608], + [0.14907318353652954, 11.077733039855957], + [-2.135392427444458, -0.15681391954421997], + [-2.697408437728882, 2.378281354904175], + [7.049035549163818, -2.1457035541534424], + [3.4820594787597656, -5.025529861450195], + [1.7167750597000122, -0.08680014312267303], + [6.938877105712891, 8.607037544250488], + [-1.895645260810852, 2.390561580657959], + [-3.074538230895996, -2.4741151332855225], + [2.188523530960083, -5.9745774269104], + [-4.045157432556152, -6.1654791831970215], + [2.2787299156188965, 5.184133529663086], + [-1.9333879947662354, -2.4625141620635986], + [-3.061037540435791, -4.7821245193481445], + [-2.183790445327759, -2.803976535797119], + [0.14431554079055786, 9.94359302520752], + [-4.178335666656494, 1.4179210662841797], + [5.308355808258057, 7.499845504760742], + [-5.186059474945068, 1.9884012937545776], + [-2.9369986057281494, -4.22441291809082], + [-2.397867441177368, -2.87705135345459], + [8.085511207580566, -2.429283380508423], + [2.7533316612243652, -3.4595136642456055], + [-4.988206386566162, 6.076031684875488], + [-5.237080097198486, -2.208958387374878], + [2.4665560722351074, 3.5340821743011475], + [-5.111242771148682, 5.7577056884765625], + [-0.07395584136247635, 13.351099967956543], + [-2.280207395553589, 1.5507118701934814], + [-2.14235782623291, 2.6112377643585205], + [-6.516251087188721, 7.135871410369873], + [3.7733700275421143, -8.850750923156738], + [-0.006356008350849152, 9.433507919311523], + [6.215244770050049, 7.760490417480469], + [-4.798904895782471, -1.6987179517745972], + [-0.15998023748397827, 10.125646591186523], + [-0.5331643223762512, -0.3072969913482666], + [2.5489752292633057, -8.861835479736328], + [5.427823543548584, -4.777571678161621], + [3.389230489730835, -2.3904898166656494], + [6.128366470336914, 7.718659400939941], + [0.0792422816157341, 11.704780578613281], + [2.102285623550415, 5.111695289611816], + [-4.442857265472412, -3.040428876876831], + [2.885479211807251, -3.5957791805267334], + [-3.9491100311279297, -5.762154579162598], + [6.939988136291504, -5.872679233551025], + [8.395381927490234, -2.599581003189087], + [0.016742698848247528, 9.416521072387695], + [-3.5774283409118652, -5.900638580322266], + [-5.056435585021973, 4.986974239349365], + [-5.019412994384766, -0.7484148740768433], + [4.01608419418335, -8.708087921142578], + [-4.7017717361450195, -6.361264228820801], + [0.15296432375907898, -2.7469747066497803], + [-1.6507515907287598, 5.970892906188965], + [0.2501041889190674, 12.229888916015625], + [-3.01411771774292, -4.3577985763549805], + [7.3005194664001465, -1.8463449478149414], + [3.3719754219055176, -6.816162586212158], + [3.1680891513824463, -4.152035236358643], + [4.1432576179504395, -3.3731706142425537], + [0.13483381271362305, 10.33359432220459], + [-5.649299144744873, 6.819454669952393], + [7.349038124084473, -2.7425663471221924], + [2.8673455715179443, -7.253448009490967], + [-3.1858575344085693, 4.334691047668457], + [6.091801166534424, -2.287534475326538], + [5.570965766906738, -5.943714618682861], + [-2.340566635131836, 2.562747001647949], + [-4.875767707824707, -2.9948055744171143], + [7.670319080352783, -2.063908100128174], + [0.14115244150161743, 11.047710418701172], + [2.602619171142578, -8.212614059448242], + [1.7411777973175049, 0.356586217880249], + [-5.223254680633545, -3.764177083969116], + [0.0944737121462822, 9.45718765258789], + [-3.3012797832489014, -6.1639485359191895], + [1.4807922840118408, -0.19562794268131256], + [5.73800802230835, 7.382104873657227], + [8.501296997070312, -2.6031405925750732], + [3.664435625076294, 1.4785043001174927], + [-2.582301378250122, -4.754889488220215], + [2.776278257369995, -5.236329078674316], + [-1.999606966972351, 1.831403136253357], + [-5.946980953216553, 6.599375247955322], + [-6.196408271789551, -2.4183759689331055], + [-3.218656301498413, -2.3954238891601562], + [2.0310237407684326, -8.405354499816895], + [7.083549976348877, -1.915984034538269], + [-6.921321868896484, 1.5725560188293457], + [3.780322790145874, -3.741037368774414], + [-4.87269401550293, 0.5145343542098999], + [-3.6823580265045166, 2.8952994346618652], + [1.145889163017273, 2.17840576171875], + [0.7963050007820129, -4.077274322509766], + [0.369792103767395, 10.366018295288086], + [7.593451976776123, -3.048685312271118], + [1.3770475387573242, -7.3735857009887695], + [2.774599313735962, 0.49125611782073975], + [3.2975637912750244, -4.064202785491943], + [2.263706922531128, 3.100466251373291], + [-0.09286279231309891, 7.0067243576049805], + [2.3325374126434326, -5.112000465393066], + [-5.505658149719238, -2.033360004425049], + [-1.8143134117126465, -3.2495012283325195], + [6.34305477142334, 7.746597766876221], + [-5.060381889343262, -7.6092634201049805], + [-4.816366195678711, -2.7873880863189697], + [-4.988554000854492, 5.409763813018799], + [0.12219922989606857, 12.464561462402344], + [-2.180945634841919, -1.669018030166626], + [2.241598606109619, -7.9627766609191895], + [1.7506436109542847, -3.9734079837799072], + [10.917476654052734, -2.4942171573638916], + [-3.213681936264038, 5.334835529327393], + [-0.04809284955263138, 9.428474426269531], + [-2.5982606410980225, 1.9631468057632446], + [1.7512919902801514, -6.60482120513916], + [3.986187696456909, 6.729389190673828], + [0.05421816557645798, 9.853271484375], + [5.896969318389893, -4.313839912414551], + [-2.6497790813446045, 6.225233554840088], + [6.408420562744141, -5.215981483459473], + [-0.027023203670978546, 9.409930229187012], + [9.581719398498535, -2.5095579624176025], + [-1.6765817403793335, 0.7180622816085815], + [-2.2453324794769287, 1.5390546321868896], + [-5.59655237197876, 6.533749580383301], + [4.1766228675842285, -3.590993642807007], + [1.2789218425750732, 1.3877406120300293], + [2.1536600589752197, 5.233883380889893], + [4.202723026275635, 1.5461184978485107], + [7.6907758712768555, -2.1323282718658447], + [-2.2980611324310303, 1.991390585899353], + [-2.4493794441223145, 1.6730711460113525], + [-1.9642809629440308, 2.399097442626953], + [5.590240001678467, -1.2908796072006226], + [4.134984016418457, -3.3122057914733887], + [4.7402520179748535, -0.8751726746559143], + [-0.10127777606248856, 5.534636497497559], + [-7.0492143630981445, 8.104303359985352], + [-2.1815168857574463, 2.385213613510132], + [-0.35078567266464233, 11.037032127380371], + [2.300823926925659, -6.838003158569336], + [-5.450246334075928, 4.964329719543457], + [-5.141770839691162, -1.534801721572876], + [3.557486057281494, 6.993696212768555], + [-3.062464714050293, 0.2860516905784607], + [7.527591228485107, -2.3312370777130127], + [3.8548409938812256, -5.986101150512695], + [1.8001890182495117, -1.626731276512146], + [5.652092456817627, 7.70604133605957], + [3.148986577987671, -3.9518842697143555], + [-4.522887229919434, -5.4023637771606445], + [3.6984941959381104, 5.493058204650879], + [4.708918571472168, 6.480781555175781], + [1.6744794845581055, 4.0160980224609375], + [5.782708644866943, 7.437827110290527], + [-2.109034776687622, 2.2067835330963135], + [-4.415821552276611, -0.8458569645881653], + [1.9697668552398682, -7.164193153381348], + [2.496652841567993, -7.648805141448975], + [2.972290277481079, -7.302367687225342], + [3.7057411670684814, 1.1093887090682983], + [-3.373041868209839, -4.7565436363220215], + [4.614861965179443, -1.2073801755905151], + [0.05837573856115341, -1.1624287366867065], + [8.646345138549805, -2.194427490234375], + [1.4785335063934326, 2.257887601852417], + [0.5360825061798096, -0.8547180891036987], + [6.366557598114014, -1.3334980010986328], + [-2.457019567489624, 7.548672199249268], + [-1.8437496423721313, -0.37197208404541016], + [7.767111301422119, -2.0559868812561035], + [5.8348212242126465, -1.2627098560333252], + [0.21030932664871216, 10.39493465423584], + [-2.4401066303253174, -3.286951780319214], + [0.1392650008201599, 10.618973731994629], + [5.709487438201904, 7.890175819396973], + [3.9609830379486084, 6.8005170822143555], + [2.610886335372925, -3.830543041229248], + [2.9011993408203125, -3.9173531532287598], + [-6.023491382598877, -1.0225600004196167], + [-3.5899059772491455, 4.677125930786133], + [1.8288623094558716, 5.785470008850098], + [2.340675115585327, -7.932260990142822], + [3.636399984359741, 5.393572807312012], + [4.17590856552124, -8.441851615905762], + [-2.492593288421631, -3.160362482070923], + [5.875289440155029, 7.3718180656433105], + [5.466014385223389, 7.524023056030273], + [-4.940943717956543, -7.458462715148926], + [-6.373148441314697, 8.128257751464844], + [2.689058542251587, -3.7591869831085205], + [-5.69780969619751, -0.8966431617736816], + [4.21605920791626, 1.8144737482070923], + [8.136019706726074, 9.572827339172363], + [2.3998444080352783, -7.6613359451293945], + [-4.18049955368042, 3.230477809906006], + [-0.008016057312488556, 12.149649620056152], + [-4.384248733520508, 5.783116340637207], + [3.4877941608428955, -7.542823314666748], + [1.7846331596374512, 4.680028438568115], + [-2.195148229598999, -3.742814302444458], + [0.8107152581214905, -6.202909469604492], + [-2.636141061782837, 1.8588451147079468], + [1.1608433723449707, 2.4595987796783447], + [8.383513450622559, -2.2502281665802], + [4.4928812980651855, -7.188150405883789], + [-4.699338436126709, 4.772688865661621], + [-3.36033296585083, -5.018841743469238], + [-2.3632829189300537, 1.4425002336502075], + [0.22390931844711304, 10.15299129486084], + [0.19711968302726746, 0.7315350770950317], + [-2.7566051483154297, -3.301426649093628], + [6.28781795501709, -1.6066068410873413], + [1.2314319610595703, 9.293764114379883], + [-1.8495509624481201, 2.109236240386963], + [-2.400738000869751, 2.2645559310913086], + [3.0959949493408203, -4.000395774841309], + [2.6820385456085205, -8.146627426147461], + [-3.2373428344726562, 3.2222654819488525], + [-2.1822280883789062, 2.779637098312378], + [-6.663144588470459, 7.197523593902588], + [-0.6886276602745056, 0.6561175584793091], + [-5.5568976402282715, -2.648120164871216], + [5.331503868103027, -1.3807201385498047], + [3.1708920001983643, -6.039902687072754], + [-6.624587535858154, 6.711367607116699], + [5.915590763092041, 7.3358354568481445], + [6.589614391326904, 7.93040657043457], + [0.5179287791252136, 1.5946894884109497], + [-6.775317668914795, 7.755533695220947], + [8.564131736755371, -2.3825623989105225], + [4.083564281463623, 1.8429356813430786], + [7.192417621612549, 8.652361869812012], + [-6.444568157196045, 7.680675029754639], + [-3.7019851207733154, -5.695267677307129], + [3.127143144607544, -8.883386611938477], + [-6.364315032958984, 7.110269546508789], + [6.460500240325928, 8.179710388183594], + [2.936645746231079, -7.716076374053955], + [3.2935409545898438, -4.494439601898193], + [-2.741701602935791, 0.8332459926605225], + [-6.585764408111572, 6.482728004455566], + [2.8232200145721436, -4.077814102172852], + [2.8908300399780273, -4.083882808685303], + [-6.346795558929443, -0.2658029794692993], + [6.170076847076416, -1.7566477060317993], + [-3.1562554836273193, -5.274291038513184], + [-1.6749889850616455, -2.779083251953125], + [-0.004151768982410431, 12.055013656616211], + [8.423365592956543, -2.3731939792633057], + [-4.938457012176514, 5.3748779296875], + [-1.401794672012329, 1.904992699623108], + [8.38154125213623, -2.322892665863037], + [0.14071321487426758, 9.817726135253906], + [6.007835865020752, -2.256481885910034], + [-4.423038005828857, -1.879564642906189], + [-4.495143413543701, -2.4453227519989014], + [-0.2564684748649597, -1.2991355657577515], + [-2.6895110607147217, 2.09390926361084], + [-7.193398475646973, -0.6610627174377441], + [-1.4581499099731445, -0.7424004077911377], + [3.6588854789733887, -5.569832801818848], + [4.5002923011779785, -3.036827325820923], + [1.557132363319397, -0.2414868175983429], + [0.029578737914562225, 11.775374412536621], + [-2.7247047424316406, -4.775108814239502], + [9.512005805969238, -2.359340190887451], + [0.49903297424316406, -5.32337760925293], + [-2.117805242538452, -3.686795234680176], + [2.3533718585968018, -3.5384442806243896], + [2.8242576122283936, -3.980808973312378], + [2.550971746444702, 3.870274782180786], + [5.17841100692749, -3.0770723819732666], + [4.071730136871338, -3.478900194168091], + [-0.0017344430088996887, 13.744159698486328], + [-5.031590938568115, -6.418036460876465], + [3.3989720344543457, -4.853994846343994], + [-0.4964873194694519, 9.399911880493164], + [-3.528987169265747, -4.718455791473389], + [-3.6111209392547607, 3.791367292404175], + [-2.1526601314544678, 2.317246437072754], + [0.028953425586223602, 12.433536529541016], + [-1.8017542362213135, 0.3335837125778198], + [5.307775020599365, 7.689838886260986], + [-0.02507442981004715, 12.492578506469727], + [2.617182970046997, 4.194821357727051], + [-0.21197831630706787, 8.936267852783203], + [3.647515296936035, 6.257914066314697], + [-2.0988738536834717, 2.359222173690796], + [6.1980695724487305, -3.841182231903076], + [-1.6846864223480225, 5.721105575561523], + [2.881969451904297, 6.115353107452393], + [8.086694717407227, -2.2001070976257324], + [-4.0144782066345215, -5.743592262268066], + [2.945113182067871, -4.190250396728516], + [-1.6870728731155396, 1.2901020050048828], + [5.448078155517578, -1.2525794506072998], + [8.780152320861816, -2.473828077316284], + [3.0023484230041504, -7.0080389976501465], + [-4.545940399169922, -3.181560516357422], + [-4.469695568084717, -1.508326530456543], + [-2.122185230255127, 2.3446993827819824], + [7.465798854827881, 8.857853889465332], + [10.219590187072754, -2.4530694484710693], + [3.3546316623687744, -8.948785781860352], + [-3.913588762283325, -3.4516756534576416], + [-1.8049349784851074, 1.7984801530838013], + [0.2267025113105774, 11.365104675292969], + [-3.8481013774871826, 4.023108005523682], + [-3.277116537094116, -2.228733777999878], + [-3.83904767036438, 7.901426792144775], + [-2.757850170135498, -3.180096387863159], + [5.661373615264893, -1.0186790227890015], + [3.3673975467681885, -4.883504867553711], + [-2.4061381816864014, 2.0610713958740234], + [2.6376309394836426, -8.122196197509766], + [2.972424268722534, -4.169137001037598], + [-0.34423768520355225, -4.012221336364746], + [7.713018417358398, -2.514251470565796], + [0.272510290145874, 9.603469848632812], + [3.7828850746154785, -7.763890266418457], + [3.9717981815338135, -3.4951441287994385], + [2.7051045894622803, -8.5419921875], + [7.493332862854004, -2.0384011268615723], + [-1.4814432859420776, 0.3816813826560974], + [1.5974127054214478, -6.963637351989746], + [2.631544828414917, 0.4104980230331421], + [0.45572251081466675, 11.476125717163086], + [-5.2419753074646, 6.619381904602051], + [3.206547975540161, 1.1392651796340942], + [-2.5214672088623047, 1.9126896858215332], + [0.17354834079742432, 10.487624168395996], + [-2.87595534324646, 1.468351125717163], + [1.118849754333496, -6.857913494110107], + [0.54514080286026, -0.8842777013778687], + [11.356032371520996, -2.6035282611846924], + [-2.0153648853302, 1.4142595529556274], + [6.184169292449951, -2.9127490520477295], + [5.929563045501709, -3.26899790763855], + [0.39546656608581543, 2.0354349613189697], + [-4.0658183097839355, 4.976515769958496], + [-3.889841318130493, 4.025628089904785], + [-0.048409171402454376, 12.74937915802002], + [-0.09597069770097733, 13.145225524902344], + [-2.7660505771636963, 2.5483739376068115], + [2.2157509326934814, -2.5997369289398193], + [3.9439828395843506, -3.454908847808838], + [1.7924367189407349, 5.715258598327637], + [-3.867743730545044, 3.9768526554107666], + [-4.959314823150635, -7.156431198120117], + [6.395821571350098, 7.981166839599609], + [-7.4691009521484375, -0.17970776557922363], + [5.51773738861084, -0.8212528228759766], + [-4.741729259490967, 5.209358215332031], + [0.5499999523162842, 7.566737651824951], + [-4.604629039764404, -5.940631866455078], + [-4.854307651519775, -3.629277467727661], + [2.0632665157318115, 5.262391090393066], + [-2.4473135471343994, 2.389899969100952], + [-1.5154434442520142, 0.5402309894561768], + [-5.819044589996338, -0.661267876625061], + [7.547540187835693, -2.363628387451172], + [0.2907907962799072, 11.084187507629395], + [-5.358725070953369, -1.5790314674377441], + [-0.0014019683003425598, 13.779558181762695], + [4.576399803161621, -3.6585850715637207], + [-3.81860613822937, -0.4646192789077759], + [-7.467848300933838, -0.06005597487092018], + [-0.8738639950752258, -3.161435842514038], + [2.454660654067993, 3.852644443511963], + [-5.883370876312256, 6.058312892913818], + [4.115889072418213, -8.30108642578125], + [8.855578422546387, -2.5212156772613525], + [2.265052080154419, 5.841413497924805], + [7.124825954437256, 8.511911392211914], + [-3.0732133388519287, -2.614410877227783], + [2.8380331993103027, -6.687455654144287], + [-3.622957468032837, -3.993178606033325], + [0.6707833409309387, -1.0500965118408203], + [1.6314328908920288, -7.663447380065918], + [-4.411777019500732, -7.095030784606934], + [-4.184174537658691, 3.7116775512695312], + [7.192422866821289, -1.7569414377212524], + [-5.600854396820068, -2.7279980182647705], + [-5.357204914093018, 6.050301551818848], + [1.861971139907837, 5.339902877807617], + [3.1721599102020264, -8.24143123626709], + [-2.73699688911438, -3.328002691268921], + [-1.9182848930358887, 2.454623222351074], + [2.305086851119995, -8.873601913452148], + [-2.0103259086608887, 1.1279679536819458], + [0.5409521460533142, -1.056277871131897], + [-2.352412223815918, -0.22423818707466125], + [9.592110633850098, -2.4452965259552], + [7.82233190536499, 9.205649375915527], + [-2.2072594165802, 0.10553193092346191], + [-3.731708526611328, 5.4705047607421875], + [-3.812514543533325, -5.672393798828125], + [-2.423046827316284, 3.9183666706085205], + [-1.7925949096679688, 2.1311681270599365], + [-2.5160112380981445, 1.6510268449783325], + [7.017058849334717, 8.52466106414795], + [2.367495059967041, -1.9773503541946411], + [-0.07528407126665115, 14.088641166687012], + [-1.6404619216918945, -3.6770644187927246], + [10.053278923034668, -2.4912259578704834], + [-2.5311689376831055, 2.113823890686035], + [3.3847837448120117, -2.960859537124634], + [4.133089542388916, -3.2926483154296875], + [-1.0167773962020874, 0.43730103969573975], + [-0.046437568962574005, 9.096364974975586], + [-5.9851250648498535, 7.364556312561035], + [3.9439890384674072, 6.415903568267822], + [-4.372438907623291, 6.351531028747559], + [2.126189947128296, 2.3475472927093506], + [3.582474708557129, 1.0908730030059814], + [-4.746745586395264, -6.526764869689941], + [1.9801690578460693, -6.404658317565918], + [-5.116697311401367, -3.0605602264404297], + [3.054534912109375, -3.777499198913574], + [8.701068878173828, -2.2804296016693115], + [-3.9118640422821045, 3.3289644718170166], + [-0.041550345718860626, 12.39252758026123], + [0.031417421996593475, 11.615779876708984], + [-3.813835859298706, 7.2284770011901855], + [0.2730262875556946, 11.433271408081055], + [7.752259731292725, -2.115807056427002], + [5.292497158050537, 7.488341331481934], + [-4.604066848754883, -1.4422061443328857], + [-5.487231731414795, -1.7878066301345825], + [4.6776604652404785, 6.4704694747924805], + [9.508645057678223, -2.4094760417938232], + [0.4827924966812134, -0.9672096371650696], + [1.7779560089111328, -2.79632306098938], + [5.833441734313965, 7.840100288391113], + [8.640862464904785, -2.349125385284424], + [-4.693069934844971, 6.364487648010254], + [1.7811853885650635, 1.5278557538986206], + [1.1218856573104858, 3.7658941745758057], + [2.630549192428589, -6.829896450042725], + [1.1960055828094482, -7.246809482574463], + [1.5841599702835083, -6.757410049438477], + [3.853318214416504, -6.062986373901367], + [-2.0600502490997314, 2.3670618534088135], + [-3.4265754222869873, -3.770728826522827], + [0.21933364868164062, 11.632097244262695], + [3.345942258834839, -4.004410743713379], + [7.12084436416626, 8.790255546569824], + [-0.7829219102859497, 1.8527024984359741], + [2.173776865005493, -7.844179153442383], + [0.2504717707633972, 11.716079711914062], + [-3.8339486122131348, 4.120331764221191], + [-1.4847389459609985, 0.5171434879302979], + [4.764955043792725, -4.290745258331299], + [0.4853646755218506, -0.9616373777389526], + [-2.146125316619873, 2.645432710647583], + [-5.373437404632568, 0.8745672702789307], + [4.010296821594238, -3.485661745071411], + [4.086959362030029, -3.6765334606170654], + [8.940037727355957, -2.553718328475952], + [3.467947483062744, -3.455993890762329], + [3.651209592819214, -6.645127296447754], + [3.4275717735290527, -2.456885814666748], + [-0.05915186554193497, -1.5162957906723022], + [3.1336371898651123, -3.7075393199920654], + [9.235674858093262, -2.4090845584869385], + [-0.011106379330158234, 12.352631568908691], + [-2.724757671356201, -1.1748290061950684], + [-2.1856746673583984, -3.7164862155914307], + [-2.1144227981567383, 2.549422264099121], + [-4.144639015197754, 5.9251389503479], + [2.349246025085449, -7.196737766265869], + [0.2559936046600342, 10.013483047485352], + [0.47671908140182495, 0.1469327211380005], + [7.986791133880615, -2.2315871715545654], + [1.458533763885498, -6.768582344055176], + [3.8818812370300293, -3.4859561920166016], + [-4.044429302215576, 3.6510426998138428], + [-6.828821659088135, -1.2716268301010132], + [-1.9569021463394165, 2.28094744682312], + [8.448393821716309, -2.306459665298462], + [-2.501791477203369, 2.190054416656494], + [-2.2785139083862305, 2.151775360107422], + [9.540509223937988, -2.306328058242798], + [-4.7440619468688965, -2.0922317504882812], + [2.434450626373291, 5.235660552978516], + [8.674872398376465, -2.4887523651123047], + [3.0701045989990234, -4.30873966217041], + [0.2433907389640808, 9.707294464111328], + [-4.381607532501221, -3.713099241256714], + [5.73272180557251, -2.6674013137817383], + [4.261081218719482, -4.922335624694824], + [-4.389019966125488, -5.146866321563721], + [-3.7271382808685303, -6.814121246337891], + [-7.92663049697876, -0.3402191400527954], + [-4.386929035186768, -4.777890205383301], + [-4.997025012969971, -3.7849931716918945], + [7.032309532165527, -2.242471218109131], + [-4.368937015533447, -5.896844863891602], + [0.05326824635267258, 12.316712379455566], + [7.314167022705078, -6.360459327697754], + [7.55449914932251, 8.978353500366211], + [-2.0591866970062256, 2.5540850162506104], + [-4.177845001220703, -2.0601706504821777], + [2.190284490585327, -8.477045059204102], + [8.242690086364746, -2.263899087905884], + [2.79121470451355, -9.062034606933594], + [-1.3532416820526123, 1.39021635055542], + [3.5635530948638916, -6.797883033752441], + [-0.3966817855834961, -0.1804436445236206], + [3.0951764583587646, -3.595940351486206], + [2.857684850692749, -3.9610726833343506], + [3.9654290676116943, -7.9379072189331055], + [-2.5548954010009766, 1.7768532037734985], + [3.362257242202759, -7.4249677658081055], + [-6.112655162811279, -2.2289459705352783], + [9.061389923095703, -2.2692692279815674], + [3.1550161838531494, -8.860872268676758], + [3.1507556438446045, -4.424539566040039], + [2.227787971496582, 5.813277721405029], + [3.6931116580963135, -3.1851091384887695], + [-2.09539532661438, 2.2463486194610596], + [-2.16467547416687, 2.4072861671447754], + [2.390913248062134, 4.325060844421387], + [-6.360752582550049, 7.430471420288086], + [9.32533073425293, -2.289593458175659], + [0.009150318801403046, 9.96861457824707], + [1.0358247756958008, -1.524569034576416], + [3.796248197555542, -3.639711380004883], + [1.2133876085281372, -6.437909126281738], + [5.4688286781311035, 7.339792251586914], + [5.062860012054443, 7.465729713439941], + [-3.415940999984741, 1.329160213470459], + [-0.010275430977344513, 9.907488822937012], + [0.9897794127464294, 0.33427193760871887], + [1.244753360748291, -2.955944776535034], + [5.973702907562256, -1.2040454149246216], + [0.028346054255962372, 9.044212341308594], + [6.636376857757568, 8.337995529174805], + [4.225875377655029, -6.266228675842285], + [-4.215842247009277, -6.738442420959473], + [-6.376929759979248, 6.403105735778809], + [-1.8425716161727905, 1.9776350259780884], + [3.0398590564727783, -4.4484405517578125], + [5.718685626983643, -1.197419285774231], + [-1.9950227737426758, 2.5246670246124268], + [-4.3147406578063965, 5.899199485778809], + [8.178994178771973, -2.547607421875], + [2.355962038040161, 4.009779930114746], + [9.539223670959473, -2.31213116645813], + [3.4734318256378174, -2.7535245418548584], + [0.25043171644210815, 10.751535415649414], + [-0.7347304224967957, -2.9662880897521973], + [3.758283853530884, 5.917337417602539], + [4.509690761566162, -2.831857681274414], + [3.6030867099761963, -5.490511417388916], + [-4.939432144165039, -7.539984226226807], + [-6.866458892822266, 0.03971194848418236], + [-2.307023763656616, 1.791281819343567], + [-3.9969351291656494, 5.388385772705078], + [4.7381510734558105, -1.8108407258987427], + [-0.08178479224443436, 13.714942932128906], + [9.267340660095215, -2.2872748374938965], + [3.511575698852539, 1.5165650844573975], + [8.276731491088867, -2.6163992881774902], + [2.006844997406006, 0.075737863779068], + [-5.960628032684326, 6.886955261230469], + [4.857377529144287, -1.0599240064620972], + [3.510058641433716, -6.850386142730713], + [2.86344575881958, -3.5867202281951904], + [3.194209575653076, 1.089211344718933], + [-1.5466158390045166, -4.3266401290893555], + [2.427046775817871, 4.0338215827941895], + [4.324948787689209, -4.931085109710693], + [6.584676265716553, 8.107224464416504], + [2.9805192947387695, -6.4646525382995605], + [3.940911054611206, -3.8134148120880127], + [-0.013725049793720245, 13.407529830932617], + [-1.6741137504577637, 5.275742530822754], + [8.773049354553223, -2.315178155899048], + [-0.2773685157299042, -1.79556143283844], + [-2.3610446453094482, -3.7002604007720947], + [4.624981880187988, -5.335418701171875], + [0.5363833904266357, -0.9088699221611023], + [-4.877620220184326, -7.044843673706055], + [3.9755938053131104, -3.582660436630249], + [-1.0830950736999512, -1.198637843132019], + [-4.838437557220459, -6.88851261138916], + [-4.621121883392334, -1.8275229930877686], + [-4.834867000579834, 5.574792861938477], + [4.0084733963012695, -4.696568965911865], + [4.199371337890625, 1.8037946224212646], + [-4.305765151977539, -1.3005998134613037], + [-5.253218650817871, 6.262698173522949], + [0.11138658970594406, 9.73675537109375], + [8.46469783782959, -2.2637383937835693], + [-1.8954931497573853, 2.305077075958252], + [-4.543015956878662, -5.7657012939453125], + [-4.4869866371154785, -6.996128082275391], + [3.161853075027466, -7.6649675369262695], + [4.35211706161499, -2.794398784637451], + [-5.824035167694092, -0.7186297178268433], + [2.201087713241577, 1.2118514776229858], + [-2.512458324432373, -4.133301258087158], + [4.538730621337891, -1.9925106763839722], + [5.102035999298096, 6.742443084716797], + [-4.812062740325928, -6.871567726135254], + [4.118767261505127, 1.616925597190857], + [1.8913860321044922, -4.140078544616699], + [-2.3209173679351807, 2.7756714820861816], + [1.0654184818267822, -0.40227875113487244], + [2.6757619380950928, -3.8443186283111572], + [1.138667345046997, -1.1443184614181519], + [-4.205798625946045, -2.059619903564453], + [-1.5583709478378296, -2.993483304977417], + [-5.310253620147705, -2.496258497238159], + [2.5601515769958496, -3.698077917098999], + [3.473729372024536, -5.8418073654174805], + [2.438373327255249, 5.522271156311035], + [2.396859884262085, -2.362407922744751], + [0.13590562343597412, 9.643584251403809], + [-6.720464706420898, 7.925217151641846], + [8.902132987976074, -2.6138460636138916], + [-2.718526601791382, 2.979130744934082], + [1.0240976810455322, 7.123669147491455], + [-5.496773719787598, 6.040633201599121], + [-5.437432289123535, -0.9190886616706848], + [0.23309272527694702, 10.194435119628906], + [-5.164653301239014, -2.438978910446167], + [1.6438961029052734, -8.205506324768066], + [3.297719955444336, -4.498078346252441], + [0.3021239638328552, -1.423368215560913], + [0.21503329277038574, 11.163347244262695], + [-1.4298945665359497, 1.6493786573410034], + [-0.7406191229820251, 1.3978768587112427], + [-0.12101966887712479, -1.507045865058899], + [-5.435808181762695, -1.0351468324661255], + [-4.303478240966797, -4.188305854797363], + [-3.15132737159729, -1.6169267892837524], + [-2.301016092300415, 1.0321601629257202], + [-2.3347768783569336, 1.1825110912322998], + [7.291390419006348, -1.7909492254257202], + [-4.660001277923584, -0.5866029262542725], + [-0.8165901303291321, -3.169069766998291], + [3.487302303314209, -7.305217266082764], + [-3.6595754623413086, -5.171787261962891], + [-4.512286186218262, 5.046650409698486], + [8.882363319396973, -2.4018514156341553], + [1.8804327249526978, -6.233298301696777], + [3.187756299972534, -4.501433372497559], + [0.10964422672986984, 11.536693572998047], + [-6.7893452644348145, 8.064590454101562], + [-6.561452388763428, 6.141042709350586], + [5.8974432945251465, -1.2426725625991821], + [0.8134323954582214, -6.338374137878418], + [5.9524359703063965, -0.5034984946250916], + [-2.0757625102996826, 0.9132259488105774], + [4.1428961753845215, -5.213639736175537], + [-4.379684925079346, -6.5608110427856445], + [-4.281501293182373, 7.241450786590576], + [0.8566218018531799, -6.511236190795898], + [-1.2829468250274658, -3.217971086502075], + [-6.749468803405762, -0.036098841577768326], + [-4.775514125823975, 5.649195194244385], + [6.609529972076416, -1.8416210412979126], + [5.847287654876709, -1.19874107837677], + [-0.6752994656562805, 0.6768911480903625], + [3.3749656677246094, -6.276088714599609], + [7.129018783569336, -3.755511522293091], + [7.2783308029174805, -1.5779635906219482], + [-1.542414665222168, 1.791296362876892], + [9.632312774658203, -2.3754053115844727], + [1.278698444366455, -0.7434583306312561], + [2.1368510723114014, -8.75352954864502], + [-6.267017841339111, 7.0947489738464355], + [-5.6961140632629395, -0.3281700015068054], + [-0.4238688349723816, 0.07633213698863983], + [-1.0997573137283325, -3.748960494995117], + [6.562065124511719, -4.837774276733398], + [3.8761370182037354, 1.4831006526947021], + [-3.881188154220581, -2.1045567989349365], + [-2.3259799480438232, 2.393641710281372], + [-2.5768187046051025, -0.7690665125846863], + [-4.548678398132324, -6.561709403991699], + [3.158489942550659, 5.278802871704102], + [4.188745498657227, -3.9688737392425537], + [-3.481722116470337, -3.3641018867492676], + [3.255488157272339, -7.709320545196533], + [-4.715286731719971, -3.256690263748169], + [-3.051054000854492, -5.812304496765137], + [3.340548276901245, -8.109344482421875], + [4.521726131439209, 5.982141494750977], + [-1.957384705543518, -3.4294021129608154], + [-5.684816837310791, 6.381791114807129], + [6.475943088531494, -1.478786826133728], + [-0.2823552191257477, -1.8147581815719604], + [-0.003093130886554718, 9.574501991271973], + [8.458617210388184, -2.3566887378692627], + [4.326375484466553, -3.6412835121154785], + [-3.458648681640625, 2.8689513206481934], + [5.5600666999816895, -4.60766077041626], + [-3.592453956604004, -1.5819447040557861], + [-1.950373888015747, 2.099750280380249], + [-1.509403944015503, 1.7612725496292114], + [4.21365213394165, -3.795325756072998], + [0.3120619058609009, 12.207382202148438], + [5.304666996002197, 6.745767593383789], + [10.788280487060547, -2.4463093280792236], + [0.942503035068512, 5.501424789428711], + [-0.09632421284914017, 11.228303909301758], + [-5.358943462371826, 2.960631847381592], + [2.9083378314971924, -4.14024019241333], + [-2.129915714263916, 2.133997678756714], + [-6.197900772094727, 7.168167591094971], + [-2.1279098987579346, 2.459925889968872], + [-1.3055092096328735, -4.269584655761719], + [-2.6003293991088867, -2.401482343673706], + [3.104585647583008, -4.459751129150391], + [-0.42455512285232544, 9.493581771850586], + [3.342076063156128, -6.711838722229004], + [-1.4490396976470947, 2.0726089477539062], + [-2.186776876449585, 2.0790250301361084], + [1.6126646995544434, -7.5396199226379395], + [-3.3615221977233887, -5.638547897338867], + [3.246955633163452, 6.452032089233398], + [5.8722147941589355, 7.718170166015625], + [-1.979374885559082, 2.190600633621216], + [3.831113576889038, -9.071847915649414], + [2.2868053913116455, 3.0990521907806396], + [-4.479297161102295, -5.855915069580078], + [-1.2482895851135254, -4.09095573425293], + [-4.994479179382324, -3.0312087535858154], + [-4.955463409423828, -1.073862910270691], + [7.963546276092529, -2.3464179039001465], + [-2.596064567565918, 1.4741109609603882], + [-4.51464319229126, 4.734199523925781], + [-1.9964189529418945, 2.6284589767456055], + [2.625621795654297, 4.404594898223877], + [0.5672945976257324, 10.741517066955566], + [-5.031428813934326, -4.340572357177734], + [-5.410736560821533, -3.7694146633148193], + [-1.638213038444519, -4.329708576202393], + [0.17871534824371338, 10.174806594848633], + [0.22826725244522095, 11.471025466918945], + [1.002223014831543, 5.289421081542969], + [0.007514946162700653, 9.686077117919922], + [3.1089513301849365, -4.430010795593262], + [-3.328683614730835, -5.277097702026367], + [2.521867036819458, -7.111462593078613], + [-4.621734142303467, -0.24513643980026245], + [0.0822562500834465, 12.222864151000977], + [1.1864776611328125, -6.997736930847168], + [2.6233253479003906, -9.152278900146484], + [6.434741497039795, 7.968984603881836], + [-2.517193555831909, 1.5436820983886719], + [7.466864109039307, -1.9413896799087524], + [2.1581532955169678, 1.6799213886260986], + [-2.919964075088501, 2.0820930004119873], + [-2.9921562671661377, -0.5022149682044983], + [5.239833831787109, -3.09844708442688], + [-1.4730572700500488, -4.4505462646484375], + [-2.8393232822418213, -4.335157871246338], + [2.398271322250366, 1.785587191581726], + [1.6636013984680176, -7.713469982147217], + [8.230347633361816, -2.1390786170959473], + [1.9049952030181885, -0.8860487937927246], + [-3.124763250350952, 3.8259780406951904], + [-6.522576332092285, 7.552679061889648], + [3.875025510787964, 1.734751582145691], + [3.155233144760132, 6.747337341308594], + [4.67119026184082, 6.249107360839844], + [-2.441962480545044, -4.9087419509887695], + [-1.8762104511260986, 2.5604138374328613], + [-3.303809881210327, -4.97517204284668], + [6.024313449859619, 7.445835113525391], + [0.4507894515991211, -5.022513389587402], + [-2.478541135787964, 1.9769572019577026], + [-4.932515621185303, -6.243093013763428], + [-5.1891279220581055, 4.359485149383545], + [-5.015721797943115, 7.037311553955078], + [3.6209514141082764, -2.6408073902130127], + [1.0051982402801514, -7.201261520385742], + [1.4525920152664185, 1.743345856666565], + [1.9900116920471191, 3.9669158458709717], + [4.879868984222412, -2.6912624835968018], + [-6.238768577575684, -2.1937453746795654], + [3.4803466796875, 1.1597727537155151], + [3.639085054397583, -4.325212478637695], + [0.03350728005170822, 9.272799491882324], + [-5.755873680114746, 7.782141208648682], + [2.475614309310913, 1.568934440612793], + [1.4242346286773682, -5.929703712463379], + [-4.115272045135498, -2.4717178344726562], + [5.352421283721924, -0.5978291034698486], + [3.3003175258636475, -5.6048150062561035], + [-2.1324782371520996, 2.46447491645813], + [8.731271743774414, -2.4204061031341553], + [-2.168081760406494, 2.2443795204162598], + [2.6350276470184326, 0.04546258971095085], + [4.592889308929443, -3.867717981338501], + [8.94387435913086, -2.324796438217163], + [0.07196211069822311, 10.091524124145508], + [3.3939127922058105, 1.059177041053772], + [1.7454370260238647, 5.190221786499023], + [4.934437274932861, -1.5682164430618286], + [1.4832525253295898, 5.244022369384766], + [-4.119096755981445, -6.380890846252441], + [-5.076098918914795, 4.052792549133301], + [4.259355545043945, -1.9148070812225342], + [5.374593257904053, 7.659487247467041], + [5.2204179763793945, 7.330533981323242], + [1.6831910610198975, -7.681550025939941], + [3.67600417137146, -4.324510097503662], + [6.45373010635376, -3.6594057083129883], + [-3.2862420082092285, -3.405925750732422], + [-6.235672473907471, 6.042150497436523], + [0.1908392310142517, 11.527790069580078], + [-2.428417682647705, 2.1043035984039307], + [0.16839152574539185, 9.079845428466797], + [3.2747960090637207, -3.370903253555298], + [3.313720464706421, -4.051292896270752], + [6.024800777435303, 7.5604658126831055], + [6.315474033355713, -1.4080688953399658], + [5.477250099182129, 7.333036422729492], + [3.462808847427368, -5.672671318054199], + [0.555784285068512, -0.8274389505386353], + [0.2963396906852722, 12.420520782470703], + [-3.9218719005584717, -1.5521864891052246], + [-6.483658313751221, 7.965018272399902], + [-0.07515955716371536, 9.719878196716309], + [0.5930940508842468, -4.933342456817627], + [-2.1802332401275635, -2.1694488525390625], + [7.768363952636719, -2.5677969455718994], + [9.64395809173584, -2.4577152729034424], + [-1.00395929813385, 1.1612235307693481], + [-4.468735694885254, 5.377919673919678], + [8.562699317932129, -2.3703768253326416], + [3.4622485637664795, -3.5669257640838623], + [3.0270841121673584, -3.8897008895874023], + [2.751124620437622, 3.0831291675567627], + [-2.2318661212921143, 2.028965950012207], + [1.3907610177993774, -7.105733871459961], + [-4.235645771026611, -6.492794513702393], + [-4.607769966125488, -6.4051618576049805], + [-3.79876971244812, -3.4984939098358154], + [2.2859952449798584, 3.74513840675354], + [-2.205176591873169, 2.45875883102417], + [2.8564260005950928, -3.7754929065704346], + [6.623460292816162, -2.937622308731079], + [5.976637363433838, -5.282668590545654], + [3.02571177482605, 6.130449295043945], + [2.4870798587799072, -4.0356950759887695], + [0.22801339626312256, 10.694747924804688], + [0.15889602899551392, 11.168001174926758], + [4.017333984375, -4.365654945373535], + [-2.5814921855926514, 0.6693055033683777], + [4.4680280685424805, -3.4529712200164795], + [-1.0394654273986816, -0.6336849927902222], + [-2.3100690841674805, 1.7409652471542358], + [-2.1338796615600586, 2.598968744277954], + [2.7155139446258545, -5.164980888366699], + [-1.9263921976089478, 1.7913886308670044], + [3.389796018600464, -3.8358616828918457], + [2.0405702590942383, -6.632637023925781], + [2.6172561645507812, -8.38962173461914], + [-4.42242431640625, -3.120046377182007], + [-5.306010723114014, -3.774486541748047], + [0.20867300033569336, 10.735629081726074], + [-5.401096820831299, -0.3355010151863098], + [-2.348989248275757, 2.530503511428833], + [-4.3291335105896, -6.77520227432251], + [-5.531282901763916, 2.636711597442627], + [9.715807914733887, -2.356295108795166], + [-5.132450580596924, 5.258875846862793], + [0.015432678163051605, -1.5090590715408325], + [-6.568610668182373, 6.656155586242676], + [3.940129518508911, -3.6331164836883545], + [-4.640120029449463, -7.15374755859375], + [7.239090919494629, 8.601503372192383], + [-5.814764499664307, 0.4973573088645935], + [-4.299441814422607, 3.3158552646636963], + [-3.897277593612671, 7.037073612213135], + [2.9675652980804443, -4.1663360595703125], + [-3.812683582305908, -5.40883731842041], + [-3.8947930335998535, -6.488252639770508], + [1.3511719703674316, 9.999824523925781], + [-0.6256169080734253, -1.3412960767745972], + [2.3076093196868896, -8.319855690002441], + [-0.06555140763521194, 13.162203788757324], + [-1.9447022676467896, -3.047114133834839], + [2.995000123977661, -8.350950241088867], + [8.180437088012695, -2.220128059387207], + [5.067853927612305, 7.171818733215332], + [-6.528547763824463, 8.373326301574707], + [-4.4253129959106445, 5.757051467895508], + [3.0494511127471924, -4.254488945007324], + [-6.077809810638428, -0.8862563371658325], + [7.883760929107666, -2.380202293395996], + [-4.099001407623291, -5.890921592712402], + [2.3405802249908447, 3.0701215267181396], + [-4.721170902252197, -3.72676420211792], + [-2.6094398498535156, 2.1028945446014404], + [-5.389664649963379, 6.067534923553467], + [4.358103275299072, -8.895904541015625], + [-1.933840036392212, 1.6795499324798584], + [-0.36053624749183655, -0.7668286561965942], + [5.701110363006592, -6.974288463592529], + [2.860746145248413, 6.510805130004883], + [-2.875049591064453, 1.2256516218185425], + [-1.0943450927734375, 1.6471788883209229], + [-5.809179782867432, 7.928752899169922], + [-4.9249749183654785, -3.741124391555786], + [3.9154059886932373, 5.264676094055176], + [-3.00134539604187, -4.047326564788818], + [-4.02982234954834, -6.172627925872803], + [1.3900858163833618, -8.230433464050293], + [3.8041651248931885, 1.6472641229629517], + [10.55623722076416, -2.5024447441101074], + [-1.9971684217453003, -4.1511430740356445], + [-6.329540729522705, -1.9202405214309692], + [-6.506828784942627, 0.36390548944473267], + [0.14906609058380127, 10.383689880371094], + [5.627042293548584, -1.1609824895858765], + [-3.78515887260437, -1.4251800775527954], + [2.0924620628356934, 2.7127459049224854], + [9.903312683105469, -2.470001459121704], + [-4.710604190826416, -2.54571270942688], + [-4.874822616577148, -3.1442854404449463], + [-2.1959054470062256, 2.197535753250122], + [3.6828086376190186, -2.2652008533477783], + [5.254579544067383, -1.2725766897201538], + [6.064470291137695, 7.638583660125732], + [-3.0823700428009033, -3.9456546306610107], + [-3.3191025257110596, -5.205652236938477], + [-3.4199163913726807, -3.315276861190796], + [1.4694099426269531, -7.856130599975586], + [8.96730899810791, -2.3338162899017334], + [3.055838108062744, -4.290192604064941], + [1.184952974319458, -6.474019527435303], + [-4.037580966949463, 6.177084922790527], + [-7.179569721221924, 8.545527458190918], + [4.063442230224609, 1.503631830215454], + [-4.459782600402832, -6.273339748382568], + [9.20482349395752, -2.4760119915008545], + [-2.989072322845459, 5.939174652099609], + [0.19194549322128296, 10.437294006347656], + [-2.3731420040130615, 2.3289220333099365], + [4.974610805511475, -4.033193588256836], + [6.023844242095947, 7.823266983032227], + [2.0752594470977783, -3.2120251655578613], + [1.0459635257720947, -6.71213436126709], + [6.026841640472412, -4.591824054718018], + [-1.2540802955627441, 1.2214179039001465], + [-2.4846608638763428, 1.6453971862792969], + [-4.5916314125061035, 4.879332065582275], + [8.057238578796387, -2.317359685897827], + [6.350628852844238, -4.103643417358398], + [5.415117263793945, 6.780261516571045], + [-5.518913269042969, -2.9489502906799316], + [3.0915780067443848, -3.018467664718628], + [2.857177734375, 6.142857551574707], + [3.337770462036133, -8.631332397460938], + [1.3241015672683716, 0.7334309816360474], + [-2.31485915184021, 2.329627513885498], + [0.18120849132537842, 12.327112197875977], + [8.70910930633545, -2.3993871212005615], + [2.6152329444885254, 5.3840508460998535], + [10.67533016204834, -2.5784037113189697], + [6.089583873748779, 7.901681900024414], + [5.816754341125488, -1.3230615854263306], + [3.94726300239563, -7.17627477645874], + [-0.04124445468187332, 9.51644229888916], + [1.9261412620544434, -5.18474006652832], + [10.892054557800293, -2.5778143405914307], + [-4.272206783294678, -5.2144880294799805], + [0.010208792984485626, -1.6032201051712036], + [0.5380398631095886, -0.8304105997085571], + [-4.289076328277588, -6.468235015869141], + [2.379948139190674, -7.727837085723877], + [4.272035121917725, -3.987931728363037], + [8.78084945678711, -2.505439281463623], + [-0.12544992566108704, -1.743226170539856], + [-5.372846603393555, 2.66864013671875], + [-5.828951358795166, 1.249788761138916], + [4.5956597328186035, -3.9603590965270996], + [5.5936150550842285, -2.4743449687957764], + [1.981839895248413, -8.169975280761719], + [-2.5227086544036865, 1.6418150663375854], + [1.5327962636947632, 5.664090633392334], + [6.773702621459961, 8.203556060791016], + [-2.5181803703308105, 1.2187188863754272], + [3.631328582763672, -3.5244686603546143], + [-2.5503485202789307, 0.7960203886032104], + [-0.03078300505876541, 9.807621002197266], + [-2.8806097507476807, -5.171540260314941], + [6.531379222869873, 8.114496231079102], + [4.064881324768066, -3.3811123371124268], + [-2.0641331672668457, 2.450728178024292], + [0.20768135786056519, 9.643695831298828], + [-4.456748008728027, -0.9368942379951477], + [0.07315283268690109, 9.083152770996094], + [9.284436225891113, -2.40867018699646], + [1.9651706218719482, 6.020064353942871], + [10.210124015808105, -2.3882529735565186], + [8.82201862335205, -2.3016250133514404], + [-3.4769132137298584, -3.520801544189453], + [5.632522106170654, -1.5386141538619995], + [5.600582599639893, -2.6965858936309814], + [-5.096766948699951, 3.732252836227417], + [-3.5331180095672607, -4.3798909187316895], + [3.533954620361328, -4.947256565093994], + [0.9020527601242065, 2.002060651779175], + [-3.313652276992798, 4.809051036834717], + [-0.07515925914049149, 14.423608779907227], + [3.0493462085723877, -1.858003854751587], + [3.310863733291626, 6.05704402923584], + [1.187056064605713, -3.4172606468200684], + [-3.9780819416046143, -1.4388861656188965], + [-2.1564016342163086, -3.9967403411865234], + [8.118416786193848, -2.185366630554199], + [-0.1152089312672615, 10.715185165405273], + [2.9081640243530273, -9.677035331726074], + [2.6253130435943604, -4.288700103759766], + [-2.910632848739624, 5.494936943054199], + [6.124339580535889, -2.4563755989074707], + [4.938099384307861, -0.2814514935016632], + [-2.8526806831359863, 1.6625392436981201], + [9.765822410583496, -2.6947519779205322], + [-6.66015100479126, -0.34627556800842285], + [2.1138787269592285, -8.958538055419922], + [3.8886706829071045, -3.2138774394989014], + [-3.9450266361236572, -3.637009382247925], + [-1.2622727155685425, 1.5571956634521484], + [8.105109214782715, -2.417156457901001], + [-0.12432693690061569, -1.2771737575531006], + [-5.82859468460083, 5.195937156677246], + [-3.996927499771118, -4.434581756591797], + [-4.092548370361328, -6.045936584472656], + [2.897028684616089, -4.098472595214844], + [-3.221648693084717, 3.2249436378479004], + [-0.6411758661270142, 0.03429829701781273], + [3.179008722305298, -7.147771835327148], + [0.3561568856239319, 10.948324203491211], + [-6.673208236694336, -0.09559381008148193], + [-6.419747829437256, -0.7140360474586487], + [-1.889061689376831, 1.9151345491409302], + [2.423567533493042, -7.407083988189697], + [-1.9199585914611816, 1.8277711868286133], + [-1.983232021331787, 2.508667230606079], + [-3.516740322113037, -4.314753532409668], + [3.494739294052124, -3.3922278881073], + [-4.365106105804443, 4.191798210144043], + [-3.870574712753296, -6.031641006469727], + [-1.3315988779067993, 1.7373508214950562], + [-2.3363590240478516, -4.555163383483887], + [5.506657600402832, -0.49598461389541626], + [0.1194940134882927, 9.683698654174805], + [-4.8125739097595215, -1.1348944902420044], + [-2.632244825363159, 2.6200380325317383], + [0.2344159483909607, 0.1911870390176773], + [-2.5411970615386963, 1.7758814096450806], + [-2.2911782264709473, 1.8228240013122559], + [-3.556095838546753, 6.005497932434082], + [5.901164531707764, 8.149914741516113], + [-3.8378005027770996, 5.218935012817383], + [2.2534472942352295, -6.608762264251709], + [-2.108588457107544, 2.326554775238037], + [2.8149142265319824, -9.274585723876953], + [8.858405113220215, -2.3047025203704834], + [0.6134054064750671, 8.026869773864746], + [3.6326706409454346, -7.816978931427002], + [-3.921369791030884, -5.437350749969482], + [4.060174465179443, 1.7076926231384277], + [9.050515174865723, -2.345301866531372], + [-6.4557623863220215, 7.724337577819824], + [2.54508900642395, 1.032389521598816], + [0.5041331052780151, 11.408129692077637], + [5.917539119720459, -3.1642956733703613], + [-5.355620384216309, 3.399304151535034], + [-2.691972255706787, 2.4972307682037354], + [3.0303330421447754, -4.255768775939941], + [-3.11635422706604, -5.027990818023682], + [4.127015590667725, 7.321688652038574], + [3.858776330947876, 5.193119525909424], + [0.21492046117782593, 12.088935852050781], + [3.0048704147338867, -7.037803649902344], + [-0.004915542900562286, 13.136731147766113], + [-4.079413414001465, 3.924351692199707], + [-1.7396478652954102, 1.3849836587905884], + [5.867488384246826, -2.1139962673187256], + [-3.297461748123169, 3.231128454208374], + [3.8151955604553223, -6.266388893127441], + [-1.8642587661743164, -4.172126770019531], + [3.0052435398101807, -3.5834014415740967], + [6.367729663848877, 8.221273422241211], + [-3.599012613296509, -3.6015870571136475], + [4.7928786277771, 6.661755084991455], + [3.298077344894409, -3.1886556148529053], + [-3.010096788406372, -4.307694435119629], + [-4.920738697052002, 4.008212566375732], + [-0.686952531337738, -1.604681372642517], + [-2.720592737197876, 1.3832730054855347], + [4.198363304138184, -4.484511375427246], + [-4.8116559982299805, -3.140162229537964], + [9.832180976867676, -2.4289050102233887], + [1.8541908264160156, -4.0364484786987305], + [-2.185007095336914, 2.5887575149536133], + [4.77924108505249, 2.0802626609802246], + [7.549929141998291, -2.229921817779541], + [3.250761032104492, 1.451133370399475], + [1.6654410362243652, 5.195874214172363], + [-4.123763084411621, -2.8465943336486816], + [7.047074794769287, 8.432914733886719], + [5.091431140899658, 6.40852165222168], + [2.7348427772521973, 3.3315534591674805], + [7.915892124176025, -2.067159414291382], + [-0.9338779449462891, -2.242156744003296], + [7.901963710784912, -2.166348457336426], + [3.141879081726074, 1.758158802986145], + [-2.5853590965270996, -5.1635894775390625], + [3.979004144668579, 6.535121440887451], + [-5.540529727935791, 5.5550713539123535], + [-4.931230068206787, -2.678253173828125], + [-5.35432243347168, -1.979341983795166], + [-4.827061653137207, 5.392798900604248], + [-6.158182144165039, 7.051966190338135], + [1.3649722337722778, -7.195746421813965], + [6.008773326873779, -1.440622329711914], + [2.558892011642456, -8.653593063354492], + [5.319606304168701, -4.398155212402344], + [3.9453985691070557, -3.769541025161743], + [-2.0661518573760986, 2.5434787273406982], + [-8.044317245483398, 0.08227014541625977], + [-0.2280944585800171, -0.9447146058082581], + [-4.557554244995117, 1.7110002040863037], + [1.1804420948028564, 4.795765399932861], + [3.392099142074585, -6.126441955566406], + [0.21186143159866333, 9.834413528442383], + [-0.03486806899309158, 13.181011199951172], + [3.2002036571502686, -4.503482818603516], + [-3.1556084156036377, 4.287360191345215], + [-6.656948089599609, -0.28779834508895874], + [3.6126506328582764, 1.1387194395065308], + [-0.0273711159825325, 12.81683349609375], + [-4.123226642608643, 4.620270729064941], + [-3.972468852996826, -2.9076929092407227], + [9.18969440460205, -2.3848488330841064], + [-6.5835442543029785, 7.576422214508057], + [3.3775622844696045, -4.455933570861816], + [3.066012382507324, -4.320087432861328], + [0.20596078038215637, -1.1753921508789062], + [0.0061029717326164246, 12.793705940246582], + [-5.167884349822998, -1.7736071348190308], + [-5.110898017883301, 5.100093841552734], + [2.6446115970611572, -3.462064743041992], + [-4.7161545753479, -0.8669236898422241], + [-6.108151435852051, 7.171165466308594], + [10.309962272644043, -2.4577276706695557], + [5.786522388458252, 7.502345085144043], + [4.179758548736572, 6.225558280944824], + [4.033347129821777, -2.8181917667388916], + [3.0271854400634766, -8.26431655883789], + [-2.322551965713501, 0.45959174633026123], + [2.5897223949432373, -6.4296417236328125], + [4.035384654998779, -8.558606147766113], + [0.6613917946815491, -0.3169018626213074], + [0.12783300876617432, 11.68007755279541], + [-5.0993523597717285, -0.9664594531059265], + [-2.054333209991455, 1.953403353691101], + [-4.415744304656982, -6.9420695304870605], + [8.539983749389648, -2.6649506092071533], + [3.041827917098999, -5.384688377380371], + [5.165895938873291, -0.862345278263092], + [-3.445810317993164, -2.6594765186309814], + [0.12258201092481613, 11.607830047607422], + [5.993144512176514, -2.947817325592041], + [0.5039075613021851, -6.361626148223877], + [3.5013785362243652, 1.5473673343658447], + [-3.6646111011505127, -5.894034385681152], + [3.743842601776123, -5.695775508880615], + [1.7425549030303955, -6.9917778968811035], + [6.052384853363037, -1.1247588396072388], + [2.018766164779663, -7.793405532836914], + [7.945616245269775, 9.413738250732422], + [3.2117984294891357, -2.7380623817443848], + [-1.1548981666564941, -1.712380290031433], + [4.10867977142334, 1.498177409172058], + [3.647526741027832, -3.201582193374634], + [3.269798517227173, -6.989473819732666], + [4.165909290313721, 1.8904327154159546], + [-4.472264766693115, -6.820075035095215], + [-2.0491926670074463, -3.2585289478302], + [1.085737943649292, -5.284445285797119], + [-1.7142088413238525, 1.0302605628967285], + [-3.6070563793182373, 5.3255181312561035], + [-3.934194803237915, 5.422588348388672], + [3.4136390686035156, -6.8592143058776855], + [3.17323899269104, -8.246574401855469], + [-3.85032057762146, -5.747425079345703], + [-6.3409881591796875, 0.6233160495758057], + [-4.80325174331665, 0.21371209621429443], + [5.450015544891357, -2.1776726245880127], + [-3.47530460357666, 1.027255654335022], + [6.621148586273193, -5.449972152709961], + [0.7668324112892151, -2.2482006549835205], + [2.917639970779419, -7.139446258544922], + [-2.713383197784424, -3.435361623764038], + [-4.745513439178467, 3.7452476024627686], + [-2.2579362392425537, -4.430815696716309], + [1.830772876739502, -1.3587192296981812], + [-2.486050844192505, 4.347462177276611], + [-0.0986476019024849, 13.204378128051758], + [6.950991153717041, 8.491249084472656], + [-2.132936716079712, 2.5455665588378906], + [-5.8711652755737305, 2.652937173843384], + [4.432091236114502, 6.288825035095215], + [2.124870538711548, -3.0153167247772217], + [-2.384232759475708, -3.6162948608398438], + [6.433193683624268, 8.258935928344727], + [-5.127827167510986, 5.698544502258301], + [-2.5479519367218018, 1.9588679075241089], + [1.6529428958892822, 3.5738773345947266], + [5.506563663482666, 7.569522857666016], + [3.0586557388305664, -3.925529718399048], + [3.222822427749634, 1.7442461252212524], + [-2.774181604385376, 1.759435772895813], + [-4.130852699279785, -2.4821479320526123], + [-1.2649469375610352, 1.6385174989700317], + [2.9040722846984863, -6.988163471221924], + [-4.696867942810059, -2.728982448577881], + [2.743593215942383, -10.016993522644043], + [-2.384906530380249, 2.122852087020874], + [4.868139266967773, -4.206413745880127], + [4.256316184997559, -3.1273984909057617], + [3.1057751178741455, -9.717933654785156], + [-4.18227481842041, -6.018399238586426], + [-3.889392137527466, -6.534363746643066], + [2.388897657394409, -3.2744553089141846], + [-4.064159870147705, 5.283132553100586], + [-2.5015709400177, 1.877814769744873], + [6.8477630615234375, 8.210123062133789], + [-5.793671131134033, 2.5193450450897217], + [-2.1597800254821777, -0.6225389242172241], + [3.0164601802825928, -4.399238586425781], + [7.066451549530029, 8.475883483886719], + [-5.013377666473389, -5.043776512145996], + [-1.9078339338302612, -3.335597276687622], + [3.3216845989227295, -7.167708873748779], + [6.26275110244751, -2.3731462955474854], + [7.048345565795898, -2.0520737171173096], + [4.834636211395264, -4.210855484008789], + [-2.284104347229004, -3.7390873432159424], + [-4.341516971588135, -2.169451951980591], + [-3.1289823055267334, -1.4948853254318237], + [3.1425509452819824, -7.825496673583984], + [-1.690746784210205, 5.769702911376953], + [0.03091757744550705, 9.629438400268555], + [-3.639549732208252, -5.8712358474731445], + [1.3068456649780273, 1.2497411966323853], + [8.021824836730957, -2.1147942543029785], + [2.9392971992492676, -4.173856735229492], + [3.0896530151367188, 0.5735732316970825], + [-2.302495241165161, 1.1895965337753296], + [3.2675483226776123, 0.8679559230804443], + [6.531689167022705, 7.939416885375977], + [2.9454452991485596, -2.509389877319336], + [2.096186399459839, 3.685260534286499], + [2.909229040145874, 4.554567337036133], + [-3.59757399559021, -4.228428840637207], + [3.0348212718963623, -5.136473655700684], + [7.459682464599609, -2.199936866760254], + [-3.2961909770965576, -2.913614511489868], + [2.0208020210266113, 3.7819833755493164], + [1.9689395427703857, 0.046206917613744736], + [4.011682987213135, -8.014338493347168], + [6.4324727058410645, 8.080013275146484], + [-2.0523312091827393, 2.237870931625366], + [-5.742147922515869, 0.27843964099884033], + [10.09592342376709, -2.3663504123687744], + [-3.120962381362915, -1.5915939807891846], + [0.7820757031440735, -0.33910226821899414], + [3.4740145206451416, -6.448075294494629], + [-2.4567325115203857, 2.110299587249756], + [-0.5026935338973999, 9.591683387756348], + [6.5784196853637695, 8.10131549835205], + [8.082245826721191, -2.1352436542510986], + [-4.164740085601807, -6.403946876525879], + [-0.8337967991828918, -2.1359927654266357], + [3.4815750122070312, -7.248815536499023], + [-0.5238325595855713, -1.5292342901229858], + [-4.316007137298584, 4.223930358886719], + [4.3295488357543945, -3.0278069972991943], + [-1.7776992321014404, 0.22875604033470154], + [1.0442695617675781, 5.567241668701172], + [-6.514318943023682, 2.0385468006134033], + [-4.568280220031738, -3.58571195602417], + [4.400022029876709, -6.143611907958984], + [2.3086578845977783, 2.7529263496398926], + [7.008052825927734, 8.885733604431152], + [-7.127965927124023, 6.819795608520508], + [7.010557174682617, -2.0011680126190186], + [8.118851661682129, -2.841723918914795], + [9.355350494384766, -2.3364064693450928], + [-5.144962787628174, 4.348033905029297], + [0.08441894501447678, 9.772764205932617], + [-4.693418025970459, -1.065956711769104], + [-0.04773593693971634, 12.430757522583008], + [0.26005661487579346, 11.997684478759766], + [-0.010190792381763458, 10.26755428314209], + [-2.637688398361206, 6.157552242279053], + [-1.4045764207839966, 0.4026642143726349], + [0.5605806708335876, -6.826507568359375], + [-5.591155052185059, 4.042827129364014], + [8.316927909851074, -2.264508008956909], + [10.089865684509277, -2.4393837451934814], + [3.150336265563965, -3.6922731399536133], + [-0.3729267120361328, -1.772692322731018], + [-3.893778085708618, -6.287796974182129], + [-4.391456127166748, -1.9243074655532837], + [-4.487165451049805, -6.674429416656494], + [-2.441911220550537, 1.6449695825576782], + [2.9099085330963135, 6.370814323425293], + [4.620774745941162, -4.274660110473633], + [3.0454678535461426, -4.287586212158203], + [7.247607231140137, 8.807977676391602], + [2.943591356277466, -7.410732269287109], + [5.639279365539551, -2.514622449874878], + [-3.0486066341400146, -5.114182472229004], + [-2.277247905731201, 1.2881872653961182], + [-4.242315292358398, -6.157553195953369], + [2.008859872817993, -3.67979097366333], + [7.699689865112305, -1.9456732273101807], + [3.387397527694702, -3.571556329727173], + [3.3539326190948486, -5.068059921264648], + [-4.508031368255615, -6.607083320617676], + [-4.939684867858887, 2.5840516090393066], + [-2.0472233295440674, 2.4982736110687256], + [0.3302451968193054, 8.5560302734375], + [-2.373114824295044, -2.3078503608703613], + [-4.901736259460449, -7.046184062957764], + [-4.809829235076904, -2.7454257011413574], + [6.460232257843018, -1.358124852180481], + [2.7194035053253174, 1.2283352613449097], + [3.254340410232544, -8.139755249023438], + [8.483139991760254, -2.3376500606536865], + [1.1919543743133545, -0.4738972783088684], + [10.234562873840332, -2.4594368934631348], + [6.621460437774658, -3.9436194896698], + [-4.722964763641357, -6.675759315490723], + [0.5349018573760986, -0.9295320510864258], + [2.786865472793579, -8.712873458862305], + [3.2529714107513428, -5.921112537384033], + [6.700735092163086, -3.6862294673919678], + [1.1003451347351074, 6.71626091003418], + [2.892409563064575, -2.698230504989624], + [5.959247589111328, 7.78480339050293], + [2.0969974994659424, 5.2094855308532715], + [-6.576199054718018, 0.9252310991287231], + [10.02881145477295, -2.4155993461608887], + [-4.279696464538574, -6.084494113922119], + [-3.894442081451416, -5.068828582763672], + [1.4257466793060303, -7.4730377197265625], + [-5.821152210235596, -2.424433708190918], + [-4.161184310913086, -6.716042518615723], + [-3.807533025741577, 5.511029243469238], + [6.132479190826416, 8.22262954711914], + [-1.6329841613769531, -3.8857486248016357], + [2.2188775539398193, 4.233480453491211], + [3.6287434101104736, 1.834706425666809], + [-4.803431987762451, -1.4471458196640015], + [0.21791791915893555, 10.814563751220703], + [0.6275121569633484, -0.9831293821334839], + [2.3969666957855225, 1.0372713804244995], + [-4.446645259857178, -3.387394666671753], + [2.7458736896514893, -3.8847639560699463], + [-4.650896072387695, -5.018852233886719], + [1.4993131160736084, 3.5433785915374756], + [-1.9589295387268066, 2.1504244804382324], + [3.303964138031006, 4.750495910644531], + [-7.982107639312744, 0.20927083492279053], + [2.524035930633545, -3.279989004135132], + [3.0266706943511963, -4.265126705169678], + [1.9424619674682617, -8.285484313964844], + [-2.35945463180542, 5.909524917602539], + [9.460448265075684, -2.4323978424072266], + [-3.675063371658325, -0.8127102851867676], + [7.541088581085205, 8.936197280883789], + [10.244100570678711, -2.3604323863983154], + [-2.337254762649536, 2.211789846420288], + [5.940229892730713, 8.221110343933105], + [2.404158353805542, -7.735495090484619], + [-4.126871109008789, -6.210494041442871], + [1.4164600372314453, -7.168018817901611], + [6.878045082092285, 8.95483112335205], + [-0.12817531824111938, -1.730361819267273], + [3.835899829864502, 1.474281907081604], + [-7.058237075805664, -0.4029078483581543], + [-0.039156146347522736, 10.007741928100586], + [1.397773265838623, -7.434213161468506], + [5.976325511932373, -1.0329841375350952], + [-4.391024112701416, 3.295924425125122], + [8.123917579650879, -2.1612398624420166], + [-2.7568671703338623, 2.1263809204101562], + [1.2473485469818115, -7.211411952972412], + [12.090828895568848, -2.6252801418304443], + [-4.904856204986572, -2.6418800354003906], + [8.504972457885742, -2.3350658416748047], + [4.620260238647461, 6.078092575073242], + [-4.490293025970459, -2.3532888889312744], + [-1.3471264839172363, -2.391831398010254], + [-1.6508023738861084, 0.2627961039543152], + [4.458680629730225, -3.319255828857422], + [5.775356292724609, -4.794257164001465], + [7.476756572723389, 8.848062515258789], + [2.337926149368286, -6.892533302307129], + [-2.4542617797851562, 5.703228950500488], + [0.2214629054069519, 11.978961944580078], + [3.686253786087036, -0.038542572408914566], + [3.173187732696533, -4.426939487457275], + [-1.4708809852600098, -3.6854381561279297], + [3.662951707839966, 6.236956596374512], + [1.7144941091537476, 4.8876237869262695], + [3.946258306503296, -3.0766093730926514], + [-5.749429225921631, 4.152153015136719], + [-5.121093273162842, 5.621213436126709], + [3.081660032272339, -7.7865986824035645], + [3.797882318496704, 1.5746413469314575], + [2.847864866256714, -4.182855129241943], + [-5.140603065490723, 5.055318832397461], + [5.950714111328125, -4.030166149139404], + [2.0244133472442627, -0.30846720933914185], + [-3.402737855911255, -1.5427064895629883], + [8.713513374328613, -2.3015825748443604], + [-3.607525110244751, -2.8233907222747803], + [-2.587510108947754, 1.6839094161987305], + [3.169016122817993, -4.568887233734131], + [-5.037060737609863, -6.6806488037109375], + [3.6151163578033447, -7.304990768432617], + [0.02383594959974289, 9.187162399291992], + [2.785384178161621, -3.9475085735321045], + [3.0293047428131104, -3.734177827835083], + [-3.713108777999878, -5.450089454650879], + [-4.110079288482666, -1.8385751247406006], + [-4.0658745765686035, -6.571915626525879], + [-0.036537475883960724, -1.3772624731063843], + [-5.797980785369873, 0.07858026027679443], + [2.209381103515625, -2.333526849746704], + [6.253476619720459, 7.7873454093933105], + [-2.0934224128723145, -4.62883186340332], + [10.636784553527832, -2.5474560260772705], + [2.717364549636841, -8.783784866333008], + [4.490871906280518, -3.267942190170288], + [-1.7534984350204468, 2.3893072605133057], + [-4.906552791595459, 6.992937088012695], + [2.148608922958374, -7.669804573059082], + [-2.061016321182251, 2.6071248054504395], + [-4.925051212310791, 5.053337097167969], + [3.554502010345459, -5.843982219696045], + [-2.4715020656585693, 1.9564698934555054], + [-3.9819211959838867, -6.405933856964111], + [1.0439026355743408, 0.555229663848877], + [7.101337909698486, 8.482894897460938], + [3.5543928146362305, 1.5273576974868774], + [-1.4215140342712402, 1.4404677152633667], + [3.782510280609131, 6.0303955078125], + [-2.8560898303985596, -3.1742403507232666], + [7.476770877838135, -1.8683364391326904], + [-5.075491905212402, -3.7820613384246826], + [-4.947229862213135, -0.26016753911972046], + [-1.1149238348007202, -0.6983266472816467], + [7.944990634918213, -2.1827714443206787], + [3.1452977657318115, -7.996432304382324], + [-3.1392643451690674, -1.5515825748443604], + [-2.4725568294525146, 1.574267864227295], + [-1.9615727663040161, 2.6512749195098877], + [0.004357032477855682, 13.447230339050293], + [2.486974000930786, -8.366294860839844], + [2.0400502681732178, 4.135063171386719], + [3.419682025909424, -6.608785629272461], + [3.408430337905884, -6.11519193649292], + [2.062577962875366, -3.1249563694000244], + [-2.3125998973846436, -3.5013318061828613], + [6.9366302490234375, -1.5267359018325806], + [2.921950578689575, -5.160801887512207], + [8.354226112365723, 9.808305740356445], + [8.792328834533691, -2.3820338249206543], + [5.8273234367370605, -2.5939249992370605], + [0.6117357611656189, -0.952958345413208], + [-1.8791992664337158, -4.010683059692383], + [-3.932349443435669, 1.8481793403625488], + [8.3047456741333, -2.259615421295166], + [-1.2569081783294678, -4.1676249504089355], + [4.5231804847717285, 6.638350486755371], + [2.7804176807403564, 3.9865167140960693], + [-4.596560478210449, -2.8129684925079346], + [-2.8754184246063232, 1.732910394668579], + [-5.051023006439209, -7.732657432556152], + [-2.637545347213745, 2.1710619926452637], + [-4.676764011383057, -3.0973148345947266], + [2.391723871231079, -5.057889938354492], + [3.8044536113739014, 1.2929985523223877], + [3.072161912918091, -4.331794738769531], + [-4.464918613433838, -6.552891254425049], + [-1.2243726253509521, 0.736324667930603], + [1.4009294509887695, -3.441769599914551], + [2.713345527648926, 5.700133323669434], + [9.219528198242188, -2.3615787029266357], + [-2.560389280319214, -0.5900241732597351], + [-2.4177331924438477, 1.5838581323623657], + [0.7999052405357361, 1.9764653444290161], + [0.1852901577949524, 10.379663467407227], + [4.903914928436279, -2.5074193477630615], + [-2.0986998081207275, 2.6989963054656982], + [-4.482876300811768, -0.8042954206466675], + [2.519483804702759, 0.9067438244819641], + [-4.279625415802002, -5.980918884277344], + [4.112544059753418, 1.6905176639556885], + [2.2718098163604736, -4.022766590118408], + [-5.320504665374756, -0.3359382152557373], + [2.9223482608795166, -4.135525703430176], + [7.014639377593994, 8.562155723571777], + [-4.830646991729736, -2.9818084239959717], + [1.805954933166504, 2.2963640689849854], + [0.22931194305419922, 0.9267452955245972], + [-2.0506906509399414, 2.5003628730773926], + [-2.223806858062744, -4.792769432067871], + [3.481549024581909, -4.875532150268555], + [-5.160737991333008, -1.7187851667404175], + [-3.1482365131378174, 4.702690124511719], + [-2.1311607360839844, 2.7009646892547607], + [2.7051470279693604, -8.376775741577148], + [-4.113284587860107, -3.835136890411377], + [4.166614055633545, 6.8682990074157715], + [-6.726159572601318, -1.484814167022705], + [9.420870780944824, -2.3468639850616455], + [3.5046889781951904, 3.188469171524048], + [-0.09513863176107407, -1.5528701543807983], + [6.2137532234191895, 7.789761066436768], + [-3.6485912799835205, -1.800559639930725], + [-4.108688831329346, -5.401663780212402], + [5.929541110992432, -1.7856004238128662], + [5.790116786956787, -1.2477831840515137], + [3.17234468460083, -4.377593517303467], + [6.289033889770508, 8.147140502929688], + [-3.648371458053589, -0.3000715970993042], + [7.304887294769287, 8.789348602294922], + [2.1952667236328125, -6.654079914093018], + [9.834450721740723, -2.4538497924804688], + [3.592622756958008, -8.388909339904785], + [-3.3426625728607178, -2.5758345127105713], + [-4.281138896942139, -6.847439765930176], + [-2.1652610301971436, 0.988884687423706], + [4.3028883934021, -3.8788368701934814], + [-4.722262859344482, -3.6132466793060303], + [3.624727964401245, 1.6488800048828125], + [3.6496365070343018, 5.9997100830078125], + [1.0397042036056519, 0.4686630964279175], + [11.0979585647583, -2.5363175868988037], + [-5.799671649932861, 6.848637580871582], + [3.046663284301758, 1.0884352922439575], + [-4.929714679718018, -1.5469952821731567], + [-2.5045294761657715, -3.443434953689575], + [12.878849983215332, -2.8239314556121826], + [-7.919313430786133, -0.19766879081726074], + [-2.8378283977508545, 2.1698291301727295], + [-2.0610101222991943, 2.455031394958496], + [5.439713001251221, 7.4822678565979], + [-1.3835532665252686, 1.2873027324676514], + [4.907934665679932, 7.466987609863281], + [0.2780514359474182, 10.586982727050781], + [-3.595975160598755, -4.279935359954834], + [2.4169061183929443, 5.405978679656982], + [-3.294959306716919, 5.599480152130127], + [10.847091674804688, -2.476923704147339], + [3.543684482574463, -8.63408088684082], + [-3.944591522216797, 4.1642608642578125], + [-4.6690993309021, 5.134674072265625], + [0.03862660378217697, 12.398109436035156], + [5.0747222900390625, 6.793081760406494], + [-4.599523067474365, -7.143703937530518], + [2.5437755584716797, 4.434401035308838], + [-0.09040040522813797, 14.331229209899902], + [3.851245880126953, 6.450010299682617], + [-5.090699672698975, 2.390251398086548], + [-2.5910325050354004, 1.7930341958999634], + [-2.4943370819091797, 2.55098295211792], + [5.007962226867676, 7.125870227813721], + [3.1035072803497314, -4.346148490905762], + [-2.455704689025879, 2.1830523014068604], + [3.459808588027954, 1.1537419557571411], + [3.855536699295044, -7.088841915130615], + [-2.1120424270629883, 2.049609899520874], + [0.22549456357955933, 10.666912078857422], + [7.29763650894165, -2.071702241897583], + [4.207798004150391, 1.9146989583969116], + [-0.037203021347522736, 12.15222454071045], + [7.559632778167725, -2.1086490154266357], + [-2.5455474853515625, 0.8113566637039185], + [3.6894519329071045, -6.02795934677124], + [1.520158052444458, -8.04892349243164], + [-2.9002065658569336, 1.4068756103515625], + [5.24205207824707, -1.9264434576034546], + [-2.5761215686798096, 2.0185739994049072], + [6.582682132720947, 8.090810775756836], + [8.58983039855957, -2.4956698417663574], + [3.147301435470581, -8.03547477722168], + [1.852160930633545, 3.662600040435791], + [0.7159646153450012, 0.20276546478271484], + [-3.5067055225372314, -5.014790058135986], + [-4.476521968841553, 5.392513751983643], + [3.737715244293213, 1.4244240522384644], + [-2.5446112155914307, -3.224893569946289], + [5.460647106170654, 7.611999034881592], + [6.837315082550049, 8.378908157348633], + [-4.137381553649902, -1.057039737701416], + [-4.412628173828125, -6.738579750061035], + [-4.506925582885742, -4.21666955947876], + [2.239694356918335, 1.8043426275253296], + [4.314423561096191, 0.2622344195842743], + [2.1236748695373535, 4.937854290008545], + [-1.3328174352645874, 1.697073221206665], + [-5.6138529777526855, -0.3881678581237793], + [-2.268972158432007, 1.1983164548873901], + [-5.9815354347229, -2.209774971008301], + [-2.0534701347351074, -3.0306317806243896], + [7.0184783935546875, -6.313521862030029], + [2.593428134918213, 3.4644553661346436], + [5.740634441375732, -1.9139481782913208], + [1.9930875301361084, 2.08307147026062], + [0.47496962547302246, -1.113617181777954], + [2.248227834701538, 1.8695412874221802], + [9.657435417175293, -2.335232973098755], + [-3.519819974899292, -1.4898865222930908], + [6.453787326812744, 8.060018539428711], + [-1.4542909860610962, 1.7915481328964233], + [2.726538896560669, -2.662250280380249], + [-1.0993597507476807, -3.826883554458618], + [-1.7005915641784668, -4.1175923347473145], + [0.7929847836494446, 11.29617691040039], + [3.9639360904693604, -1.76828134059906], + [2.5035808086395264, 4.5448102951049805], + [1.0395965576171875, -0.007117722183465958], + [2.1181297302246094, 5.101523399353027], + [-2.135063409805298, 2.6894052028656006], + [-0.12910312414169312, 10.045492172241211], + [1.8471177816390991, 0.13944533467292786], + [6.05625581741333, -1.3236337900161743], + [-0.44799232482910156, 9.813032150268555], + [-1.6341317892074585, -0.07225537300109863], + [2.440538167953491, -9.114437103271484], + [-5.400439262390137, -2.405582904815674], + [-7.86228084564209, 1.6348925828933716], + [1.810819387435913, 1.5629247426986694], + [1.8522701263427734, -7.244720458984375], + [-5.233022212982178, 3.2704617977142334], + [0.4658517837524414, -0.8743730187416077], + [-0.06258410960435867, 12.1652193069458], + [-2.0860068798065186, 2.4507102966308594], + [-2.196350336074829, 1.9086936712265015], + [9.92455005645752, -2.40134596824646], + [2.358900547027588, 1.993329405784607], + [0.9381628632545471, -0.3343490660190582], + [4.402897357940674, -3.459848642349243], + [1.9268691539764404, 5.225610733032227], + [3.0760228633880615, -4.937658309936523], + [-4.63012170791626, -6.543919563293457], + [-4.691805839538574, -3.167703151702881], + [-4.601059436798096, -6.402606010437012], + [-3.0500147342681885, -4.046797275543213], + [-0.9374428391456604, -3.288360357284546], + [-4.121335983276367, -6.329845428466797], + [0.13996833562850952, 11.68879508972168], + [-4.9747633934021, -4.357179641723633], + [-4.615661144256592, 5.896472930908203], + [0.03590921312570572, -0.9393717050552368], + [3.093386173248291, -4.359683990478516], + [-1.9561288356781006, 2.6284618377685547], + [3.4927732944488525, -5.549773216247559], + [8.033308982849121, -2.4613263607025146], + [3.5366103649139404, -3.2350940704345703], + [-7.1071577072143555, 7.4917731285095215], + [-1.6847279071807861, -4.0406413078308105], + [3.354076862335205, 5.601694583892822], + [3.344982624053955, -5.942804336547852], + [-6.461586952209473, 7.3111467361450195], + [-0.4294564723968506, -1.9623756408691406], + [-6.6384663581848145, -0.5813082456588745], + [-0.14318692684173584, -2.7746992111206055], + [3.6905314922332764, -7.8958330154418945], + [0.6208069920539856, 10.756739616394043], + [6.179518222808838, -1.1416183710098267], + [8.42362117767334, -2.257901430130005], + [4.459526538848877, 1.3949099779129028], + [-4.989358425140381, -8.281824111938477], + [-2.1918509006500244, 2.8298916816711426], + [-4.48391580581665, 5.519561767578125], + [0.0890147015452385, 11.592072486877441], + [-3.61784291267395, -5.504508972167969], + [4.173725128173828, -3.6526849269866943], + [-4.14133882522583, -3.4999077320098877], + [-6.368458271026611, 7.910353183746338], + [-2.560758352279663, 1.6534301042556763], + [3.2917444705963135, 0.20960605144500732], + [3.6006176471710205, -5.431309223175049], + [-5.206566333770752, -3.3939075469970703], + [-2.9268686771392822, -1.1769767999649048], + [5.342445373535156, -1.1695698499679565], + [9.120505332946777, -2.3650858402252197], + [-3.8405516147613525, -1.9687259197235107], + [3.7611782550811768, -7.844692230224609], + [-4.168374538421631, -5.8121232986450195], + [1.9233810901641846, 4.347633361816406], + [0.056424953043460846, -1.5527442693710327], + [3.4250199794769287, 7.057493209838867], + [-4.139744281768799, -0.653201699256897], + [9.628434181213379, -2.3951804637908936], + [-5.849627494812012, 7.536827087402344], + [-0.048367686569690704, 12.684063911437988], + [-3.8873367309570312, -2.6147196292877197], + [1.5638182163238525, 0.2929628789424896], + [6.8270063400268555, -1.5299022197723389], + [8.144718170166016, -2.241607427597046], + [3.385664701461792, 1.367231011390686], + [8.960970878601074, -2.416328191757202], + [-4.937271595001221, 5.511465549468994], + [-3.779879331588745, -2.5104947090148926], + [8.09687328338623, -2.285956859588623], + [-2.354231119155884, 2.2480223178863525], + [2.7476437091827393, -7.911380767822266], + [8.340328216552734, -2.2376773357391357], + [-7.280460834503174, -1.2489961385726929], + [10.110335350036621, -2.5447885990142822], + [0.1444874405860901, 10.141386985778809], + [4.808312892913818, -3.7933809757232666], + [-2.46437668800354, -4.374314785003662], + [-2.9826643466949463, 1.7523411512374878], + [-2.6804821491241455, -2.5537097454071045], + [3.3407108783721924, -6.137602806091309], + [-2.069059133529663, -3.557461977005005], + [-4.256483554840088, 3.903621196746826], + [3.9365341663360596, -3.755481481552124], + [-6.613783836364746, 8.122380256652832], + [-4.129718780517578, -1.1893843412399292], + [2.8545796871185303, -4.065946102142334], + [-2.028383731842041, 2.389774799346924], + [0.14730340242385864, 11.951964378356934], + [2.1409718990325928, -8.779881477355957], + [-5.907812595367432, 7.494663238525391], + [0.13539987802505493, 10.176432609558105], + [-5.37307596206665, 4.195723533630371], + [4.101686954498291, -3.8460333347320557], + [3.7296688556671143, -3.568617582321167], + [-7.0146164894104, 0.5906391143798828], + [-0.0372127965092659, 12.262015342712402], + [0.19814544916152954, 10.29709243774414], + [-1.3916531801223755, 1.0901696681976318], + [-5.282468795776367, 5.838626861572266], + [1.4334990978240967, -7.748209476470947], + [4.664592266082764, 7.3979387283325195], + [0.1198686882853508, 11.449515342712402], + [-3.033188581466675, 5.805508613586426], + [2.6629927158355713, -1.1542953252792358], + [0.7343428134918213, 5.281747817993164], + [8.82239818572998, -2.302647352218628], + [-6.116404056549072, 7.632484436035156], + [3.511133909225464, -5.442060947418213], + [8.337599754333496, -2.5010950565338135], + [2.6554207801818848, -3.239262580871582], + [8.110302925109863, -2.210725784301758], + [-0.32186657190322876, -1.6160043478012085], + [-0.40909093618392944, -1.8423423767089844], + [9.061701774597168, -2.290238380432129], + [3.1471965312957764, -4.253143310546875], + [10.309331893920898, -2.396782398223877], + [-3.894144296646118, -5.29810905456543], + [7.489383697509766, -2.034092903137207], + [2.366536855697632, 3.054056406021118], + [-3.045123815536499, -3.961777448654175], + [7.4023308753967285, -2.7858593463897705], + [-2.234475612640381, 2.3862650394439697], + [2.7545011043548584, 0.9483391642570496], + [7.382327556610107, -1.9759851694107056], + [-2.305171012878418, 2.7368364334106445], + [6.883550643920898, 8.339292526245117], + [-4.752542972564697, -6.6975531578063965], + [-2.44982647895813, 1.5263192653656006], + [6.458611965179443, -4.599344730377197], + [3.9697439670562744, -3.6112067699432373], + [0.28834009170532227, 11.275405883789062], + [4.692584991455078, -4.207291126251221], + [2.4280011653900146, -3.463329553604126], + [-3.370940685272217, -2.894585132598877], + [3.617449998855591, -6.78037166595459], + [-0.06710822135210037, 9.495698928833008], + [7.728662967681885, -2.229647636413574], + [-2.080216884613037, 2.504854440689087], + [-4.534550189971924, -6.753468990325928], + [6.416451930999756, -1.3140034675598145], + [-2.9921867847442627, -4.330036163330078], + [-3.7916018962860107, -0.6287861466407776], + [-2.8673834800720215, 4.89988899230957], + [3.3030807971954346, -4.657315254211426], + [5.258866786956787, -1.350258708000183], + [3.7967758178710938, 1.466819405555725], + [1.6402020454406738, -0.953313946723938], + [0.09183745831251144, 9.647577285766602], + [-6.235581874847412, -2.418200731277466], + [3.201451539993286, -8.49789047241211], + [7.576179027557373, 8.982695579528809], + [-3.560892343521118, 5.369647979736328], + [-4.073608875274658, -5.84031343460083], + [-4.575023651123047, -5.987171173095703], + [1.9521613121032715, 3.6111297607421875], + [-7.154750347137451, 1.3455060720443726], + [-0.056841202080249786, 12.50081729888916], + [4.528848171234131, 1.857965111732483], + [6.296217918395996, -3.9082601070404053], + [6.520259380340576, -5.736549377441406], + [5.0774312019348145, 7.259032249450684], + [-0.0585981085896492, 13.281789779663086], + [0.18929380178451538, 10.4761962890625], + [2.6087684631347656, 5.629890441894531], + [-2.1096086502075195, 2.5396857261657715], + [-5.5316691398620605, 6.899741172790527], + [1.8008043766021729, -7.230104923248291], + [1.9874603748321533, 2.9581472873687744], + [4.9790191650390625, -2.926236391067505], + [-4.345015048980713, -2.4723360538482666], + [6.743106365203857, 8.38194465637207], + [0.945252001285553, -6.460042953491211], + [-2.088470458984375, 2.443312883377075], + [2.2307794094085693, 4.697499752044678], + [9.303276062011719, -2.344578981399536], + [9.179327964782715, -2.5560104846954346], + [9.659796714782715, -2.336536169052124], + [3.0742828845977783, -8.690668106079102], + [-3.816330671310425, -6.562104225158691], + [5.988600730895996, -1.300614833831787], + [0.16071563959121704, 10.256173133850098], + [3.403528928756714, -4.700267791748047], + [2.0226147174835205, 3.975804090499878], + [2.8336079120635986, -3.806701421737671], + [-6.473202705383301, -0.14854252338409424], + [-2.053454637527466, 2.461369514465332], + [4.346757411956787, -0.7824981808662415], + [0.9974127411842346, -5.416351318359375], + [6.849258899688721, 8.420679092407227], + [4.6806640625, -3.678356409072876], + [3.9223883152008057, -3.4940690994262695], + [-4.355284214019775, 0.05268227681517601], + [3.333390951156616, -3.594900608062744], + [8.79301643371582, -2.296246290206909], + [8.255831718444824, -2.2580745220184326], + [0.23647981882095337, 11.465120315551758], + [-6.182960033416748, -1.82917320728302], + [6.4434123039245605, -2.6496729850769043], + [3.904735803604126, -6.34049654006958], + [1.0331226587295532, 11.220357894897461], + [3.695817232131958, 1.69888174533844], + [7.891682147979736, -2.193674087524414], + [0.019604496657848358, 12.896337509155273], + [1.7438281774520874, 5.087787628173828], + [10.70841121673584, -2.6407885551452637], + [3.4408860206604004, 5.527263641357422], + [1.328987717628479, 5.760004043579102], + [0.8991628885269165, -6.908961296081543], + [-0.03461766988039017, 12.48641586303711], + [3.09883451461792, -3.54921555519104], + [-2.5847558975219727, -4.029264450073242], + [-0.06420398503541946, 12.830530166625977], + [0.7654197812080383, 10.328316688537598], + [-2.1156649589538574, 2.3678314685821533], + [-0.019934482872486115, 9.486777305603027], + [3.5299572944641113, 6.945514678955078], + [9.191533088684082, -2.2946650981903076], + [-5.103062152862549, -6.944929599761963], + [0.010385803878307343, 12.924673080444336], + [8.169074058532715, -2.2034263610839844], + [-2.5518088340759277, 2.274228572845459], + [1.3171900510787964, 1.9818295240402222], + [3.7167303562164307, -2.5798065662384033], + [5.542468070983887, -1.1582525968551636], + [0.16649824380874634, 11.888833999633789], + [0.4250630736351013, -2.5869011878967285], + [1.0259983539581299, -6.062259674072266], + [2.7867603302001953, 4.430837631225586], + [-4.93729305267334, -7.451798439025879], + [-0.1965116262435913, -1.4095228910446167], + [-4.3192291259765625, 0.11084222793579102], + [9.950125694274902, -2.469672679901123], + [0.1322285532951355, 11.265958786010742], + [6.471423625946045, -1.36465322971344], + [-4.802145481109619, -0.7149876952171326], + [6.895902156829834, 8.260345458984375], + [8.997108459472656, -2.713080644607544], + [2.5143234729766846, -7.348775863647461], + [-4.804599285125732, -7.64052152633667], + [-1.7343318462371826, -3.727734327316284], + [-5.989333629608154, 0.6355551481246948], + [-4.8707075119018555, -6.868350028991699], + [2.3588321208953857, 4.708654403686523], + [-2.275212287902832, -2.8228914737701416], + [2.3633882999420166, 4.632464408874512], + [4.552051067352295, 6.124658584594727], + [2.5192534923553467, 2.883833408355713], + [4.442084312438965, 0.2821629047393799], + [1.1439467668533325, -7.495020389556885], + [7.254383563995361, 8.918060302734375], + [0.2665432095527649, 10.052921295166016], + [-4.68617057800293, -7.00443172454834], + [-2.311849594116211, 6.38142204284668], + [-4.715019702911377, -7.263165473937988], + [-5.007200717926025, -1.832961916923523], + [-3.6625962257385254, -1.886401891708374], + [-3.3761210441589355, -2.5830435752868652], + [-2.2633864879608154, 2.1804471015930176], + [-2.083876371383667, 2.6722872257232666], + [-4.324639320373535, -5.79706335067749], + [0.1903812289237976, 9.822139739990234], + [-0.5694946646690369, -1.6600528955459595], + [-1.805646300315857, -0.1584109663963318], + [8.604412078857422, -2.353010416030884], + [5.9417500495910645, 7.886746406555176], + [-2.4476373195648193, 0.6864445209503174], + [-0.20537978410720825, 9.357000350952148], + [7.158847332000732, 8.665925025939941], + [-3.950787305831909, -2.8751778602600098], + [-2.2049639225006104, -4.446394920349121], + [5.931846618652344, 7.578575134277344], + [9.222119331359863, -2.3314051628112793], + [7.4227495193481445, 8.950047492980957], + [-4.4375739097595215, 5.488180160522461], + [-7.283330917358398, 0.24084079265594482], + [-6.447974681854248, 7.269412040710449], + [-3.46106219291687, -2.750797986984253], + [-1.0185964107513428, 1.7744560241699219], + [2.7409310340881348, -6.749579429626465], + [-4.2517409324646, -3.3447697162628174], + [-4.300608158111572, -1.3013023138046265], + [-5.867823123931885, 7.542309761047363], + [-0.697458028793335, -1.857874870300293], + [-0.013494320213794708, 13.589259147644043], + [3.7720491886138916, -8.2987060546875], + [-6.141444683074951, 2.297333240509033], + [-4.483290672302246, -3.2149951457977295], + [12.48793888092041, -2.686690092086792], + [3.2304470539093018, -5.837657451629639], + [10.399226188659668, -2.5344345569610596], + [10.712532997131348, -2.437734365463257], + [1.936584711074829, -7.222930431365967], + [0.18969178199768066, 10.400118827819824], + [7.826650142669678, -2.0089383125305176], + [-1.8673441410064697, 2.47898530960083], + [2.4373624324798584, 0.18449434638023376], + [2.428927183151245, 3.26533579826355], + [-2.851824998855591, 1.6410183906555176], + [5.367370128631592, -1.2516590356826782], + [1.3990886211395264, -7.922484397888184], + [3.473680257797241, 5.1057538986206055], + [-6.8534321784973145, 7.272096157073975], + [6.411909580230713, -2.333604335784912], + [5.757119178771973, -1.3130155801773071], + [-2.1489317417144775, 2.6203043460845947], + [2.684615135192871, 3.3059422969818115], + [-2.315086603164673, -4.52204704284668], + [0.005428127944469452, 13.197750091552734], + [1.500206470489502, -6.746385097503662], + [3.1783030033111572, -3.903379201889038], + [-3.6005921363830566, 5.5522894859313965], + [-4.179233074188232, -6.032032012939453], + [-2.3094184398651123, 1.3989150524139404], + [9.015433311462402, -2.3685638904571533], + [2.9284775257110596, -4.091981887817383], + [5.258121967315674, -4.516857147216797], + [0.8213462829589844, 4.117447853088379], + [7.592416286468506, -2.008544683456421], + [3.1266067028045654, -8.078167915344238], + [7.692785739898682, -2.433455228805542], + [0.11002068966627121, 10.38257122039795], + [1.8046660423278809, -6.7855730056762695], + [10.324331283569336, -2.300499677658081], + [-6.873294353485107, 7.240754127502441], + [3.760453939437866, -3.5424487590789795], + [-2.0567398071289062, -2.9342451095581055], + [-4.349071979522705, 6.159424781799316], + [0.3917285203933716, -0.6518139243125916], + [3.4325473308563232, -7.651538372039795], + [-0.01821216195821762, -1.4560400247573853], + [8.327652931213379, -2.241997480392456], + [3.4095141887664795, 1.1714950799942017], + [2.5447537899017334, 3.475051164627075], + [0.2635629177093506, 11.259223937988281], + [-4.602590084075928, -7.630205154418945], + [-3.190591335296631, -3.721640110015869], + [-3.452249050140381, 5.691983222961426], + [2.2663495540618896, 4.907073974609375], + [-0.03978533297777176, 13.551706314086914], + [7.206934928894043, 8.704742431640625], + [1.010926365852356, 4.335879802703857], + [3.7192938327789307, 0.9544352293014526], + [-5.007635593414307, -5.681784152984619], + [2.8554868698120117, 6.205595016479492], + [7.284195423126221, -2.4005749225616455], + [0.05266600102186203, 9.654865264892578], + [3.2312023639678955, -4.454311847686768], + [-1.789827585220337, -3.449737787246704], + [3.678373336791992, -3.039539098739624], + [-0.9925365447998047, -3.3473775386810303], + [8.418732643127441, -2.345090389251709], + [2.4104979038238525, -10.088825225830078], + [-3.6050589084625244, -4.2579264640808105], + [-2.2117016315460205, 2.404956817626953], + [2.1120941638946533, -8.295150756835938], + [-4.281846523284912, 5.004971981048584], + [-2.239290475845337, 2.030937910079956], + [-2.024000644683838, 2.669370412826538], + [3.1887850761413574, -3.1049890518188477], + [-0.2602650225162506, -1.182152271270752], + [3.7430007457733154, -8.468408584594727], + [-2.8390884399414062, -3.5678932666778564], + [-2.2322275638580322, 2.4380924701690674], + [-2.310427188873291, 0.7052892446517944], + [-2.0123934745788574, 0.9083536863327026], + [0.8565007448196411, -5.177008628845215], + [0.15877705812454224, 10.081502914428711], + [5.037216663360596, 6.79724645614624], + [-2.0578246116638184, -5.110910415649414], + [-4.647339344024658, -6.395704746246338], + [-3.4033114910125732, -5.049633979797363], + [-8.170910835266113, -0.6337445974349976], + [7.097076892852783, -3.4609005451202393], + [0.2800430655479431, 11.925487518310547], + [-2.516587257385254, -1.422084927558899], + [-4.764049053192139, 8.494729995727539], + [-6.238178253173828, 7.422399520874023], + [-4.732824802398682, -6.974815845489502], + [-4.113521099090576, 4.269564151763916], + [3.195915460586548, -4.488082408905029], + [-5.025102138519287, -2.0085840225219727], + [5.808549404144287, -1.5133682489395142], + [2.7762324810028076, -3.9674298763275146], + [-2.181715965270996, 0.676134467124939], + [-4.9928765296936035, -2.221874237060547], + [-2.27592396736145, 0.5143011808395386], + [-2.0560505390167236, -0.6491243243217468], + [-3.2389004230499268, 2.2700159549713135], + [-1.9306461811065674, 1.6458792686462402], + [2.3061418533325195, 0.20534414052963257], + [-7.309355735778809, -0.9159691333770752], + [5.813766956329346, 7.595091819763184], + [8.311505317687988, -2.276944875717163], + [-2.5694079399108887, 2.3482065200805664], + [-3.6861157417297363, 4.792863845825195], + [6.221436023712158, -3.9586944580078125], + [-3.7352654933929443, -5.560527801513672], + [-2.326131582260132, -4.085231781005859], + [3.080037832260132, 3.831869125366211], + [9.960783958435059, -2.276135206222534], + [1.5409274101257324, -0.44124120473861694], + [3.9399263858795166, 1.621537685394287], + [5.666699409484863, -3.292198896408081], + [0.957651674747467, -6.103535175323486], + [-3.099411964416504, 0.8664678335189819], + [10.556809425354004, -2.4805257320404053], + [0.18605095148086548, 9.597332000732422], + [3.2561428546905518, 1.162361979484558], + [-4.708414554595947, 5.81264591217041], + [-5.037130832672119, -7.663027763366699], + [-1.54018235206604, -3.978285789489746], + [-0.07148648053407669, 8.708250045776367], + [5.84227991104126, -1.2729356288909912], + [5.658957004547119, -4.741549491882324], + [2.9486820697784424, -4.1996307373046875], + [-5.241771221160889, -7.2526092529296875], + [4.561563968658447, -3.9192981719970703], + [8.437308311462402, -2.3098251819610596], + [-5.193241596221924, -2.7530088424682617], + [2.4054601192474365, 6.345148086547852], + [5.982132911682129, 7.898509502410889], + [-4.045234680175781, -3.3813812732696533], + [3.0637574195861816, -4.3058576583862305], + [4.307982921600342, -3.6885812282562256], + [2.3939011096954346, -7.825748443603516], + [-3.197289228439331, 1.3794292211532593], + [0.03002249449491501, 8.737969398498535], + [6.719233989715576, 8.311605453491211], + [2.7072765827178955, -6.523604869842529], + [3.3071200847625732, -8.215473175048828], + [-4.694399833679199, 5.195900917053223], + [-0.5733864903450012, -2.4113426208496094], + [0.11339633911848068, 11.347801208496094], + [1.7385880947113037, 5.165239334106445], + [5.740339756011963, -2.2549169063568115], + [1.993666172027588, 4.534880638122559], + [1.067220687866211, 11.149950981140137], + [3.461272954940796, 1.1144956350326538], + [-2.7625157833099365, -5.069477558135986], + [0.010699011385440826, -1.093345046043396], + [-3.8170905113220215, -5.468220233917236], + [-6.379119396209717, 7.2343292236328125], + [-2.564026355743408, 1.812335729598999], + [-6.42476224899292, 6.6674909591674805], + [-2.6811652183532715, -4.964374542236328], + [-6.223292827606201, -1.749688982963562], + [-4.334392547607422, 4.7005934715271], + [8.084856033325195, -2.120774030685425], + [6.487819671630859, 8.172624588012695], + [-4.0727410316467285, -6.349753379821777], + [2.131082534790039, 2.361645460128784], + [-2.4251697063446045, 1.3563988208770752], + [2.0365993976593018, -0.14412690699100494], + [2.772270441055298, -7.753077507019043], + [1.0439728498458862, -2.088533639907837], + [3.528118133544922, -7.220066547393799], + [10.005711555480957, -2.531348943710327], + [6.54311466217041, -2.644601583480835], + [4.646030426025391, -4.294861793518066], + [4.246184349060059, 1.8113141059875488], + [2.9738962650299072, -8.257499694824219], + [-3.3652007579803467, 5.526289463043213], + [3.4755561351776123, -7.538277626037598], + [-2.9515254497528076, -3.8347909450531006], + [3.6117098331451416, -3.4365108013153076], + [-2.1847898960113525, -3.7523701190948486], + [-2.6280410289764404, 1.5971001386642456], + [-2.416826009750366, 1.4569718837738037], + [-4.492945194244385, 5.419697284698486], + [-1.6951496601104736, -4.07717227935791], + [-0.3224225640296936, 10.013542175292969], + [0.3072124123573303, 10.721094131469727], + [-3.916620969772339, 5.651129722595215], + [-5.178986072540283, 4.860236644744873], + [2.6252918243408203, -8.963356018066406], + [3.9030961990356445, 1.1320890188217163], + [-0.9491380453109741, 6.263893127441406], + [3.615814208984375, 1.3415634632110596], + [2.104163408279419, 2.35485577583313], + [1.664987325668335, -7.006529331207275], + [2.526475667953491, 5.9425506591796875], + [3.2067112922668457, -3.840733766555786], + [0.09986495226621628, 9.661750793457031], + [-6.358575344085693, 7.4083967208862305], + [8.700997352600098, 10.110157012939453], + [4.7165069580078125, -1.4989687204360962], + [-5.297192096710205, -3.26191782951355], + [-0.3367850184440613, 9.79798698425293], + [5.585392475128174, -1.208121657371521], + [1.9024930000305176, 1.810341715812683], + [-1.8555537462234497, 2.090505838394165], + [3.8689706325531006, -7.093478679656982], + [-6.674248218536377, 0.4580878019332886], + [4.490678787231445, -3.73747181892395], + [3.2819206714630127, -4.419317245483398], + [5.50508451461792, -3.729672908782959], + [-2.8092033863067627, -5.428271293640137], + [5.152403354644775, 7.161589622497559], + [-4.005517482757568, 4.330944061279297], + [0.08624725788831711, -0.20897607505321503], + [9.075604438781738, -2.6468207836151123], + [-0.11648447066545486, -1.5123687982559204], + [3.100355863571167, -3.908687114715576], + [2.260939121246338, 6.029447078704834], + [-1.006966471672058, -3.540214776992798], + [-0.8081628680229187, -2.3158154487609863], + [-1.9174360036849976, 2.2955329418182373], + [1.3816733360290527, -0.39252734184265137], + [0.8634759187698364, -0.6113462448120117], + [2.7721598148345947, -3.7451326847076416], + [-2.8688008785247803, 5.812106609344482], + [-4.757801055908203, -7.38775110244751], + [-1.6661794185638428, 1.4502582550048828], + [-4.742893695831299, 3.5433263778686523], + [-1.1847797632217407, -0.8804565668106079], + [-1.8641886711120605, -2.9439189434051514], + [5.939189434051514, 8.119778633117676], + [6.792344570159912, -2.2355258464813232], + [8.808883666992188, -2.491851568222046], + [5.933657646179199, 7.804730415344238], + [1.3875185251235962, 4.819528102874756], + [-4.0420451164245605, -6.33443546295166], + [-5.116743564605713, 7.833797454833984], + [-7.6294169425964355, -1.323496699333191], + [7.961996555328369, -2.0875158309936523], + [3.2876341342926025, -6.326879501342773], + [3.316091775894165, -6.367555618286133], + [2.134709596633911, 1.7420631647109985], + [-2.797104597091675, -5.57374906539917], + [-1.9850484132766724, 1.7130060195922852], + [2.4976556301116943, 3.3827996253967285], + [-4.889018535614014, -4.619634628295898], + [-2.478501081466675, 0.8267114758491516], + [6.177650451660156, 8.45291805267334], + [-2.2276577949523926, 2.0789036750793457], + [1.5710526704788208, 3.975663900375366], + [3.452840566635132, -4.247615337371826], + [0.7749733328819275, -0.8316400051116943], + [-6.601558685302734, 7.571686744689941], + [-2.0781655311584473, 1.4078320264816284], + [2.9700124263763428, -4.321750164031982], + [-0.6785723567008972, 10.120111465454102], + [-6.751913070678711, 7.987504005432129], + [0.12239193171262741, 12.52249526977539], + [3.4101979732513428, -8.323460578918457], + [1.853266954421997, -6.746574401855469], + [2.7291643619537354, -9.721315383911133], + [0.5201874375343323, 4.529484272003174], + [-4.809945583343506, 3.710092782974243], + [-2.276827335357666, 5.98797607421875], + [4.940560340881348, 6.349548816680908], + [8.861929893493652, -2.334158182144165], + [-2.1125144958496094, 2.2089598178863525], + [3.279208183288574, -6.616798400878906], + [5.817863941192627, -1.217002272605896], + [-3.7965543270111084, -0.6760520339012146], + [7.765013694763184, -2.5145678520202637], + [3.2327826023101807, -3.5799036026000977], + [-5.796585559844971, -2.252441167831421], + [2.337574005126953, 5.1536760330200195], + [3.632451295852661, 0.5837242603302002], + [1.7211616039276123, 5.018516540527344], + [1.3935396671295166, -0.27571696043014526], + [0.013919048011302948, 12.594585418701172], + [7.6730828285217285, 9.099319458007812], + [0.4180483818054199, 10.46060562133789], + [-3.892176866531372, -2.6742045879364014], + [-2.918663501739502, -4.910160064697266], + [3.0532233715057373, -6.327753067016602], + [-4.340457439422607, -5.843527317047119], + [-0.007060535252094269, 12.712677001953125], + [2.2323062419891357, 5.059340000152588], + [6.4163384437561035, -5.383014678955078], + [3.4548394680023193, 4.931585788726807], + [-1.324188232421875, 5.550934314727783], + [-4.349819660186768, 5.5025715827941895], + [0.22716450691223145, 4.331768989562988], + [8.427681922912598, -2.4339795112609863], + [1.9213082790374756, -8.023717880249023], + [8.658673286437988, -2.3965468406677246], + [0.19317150115966797, 10.121596336364746], + [3.1600286960601807, -4.790763854980469], + [5.022122859954834, 6.32996940612793], + [0.17308509349822998, -1.4967917203903198], + [-2.505934476852417, -3.264763355255127], + [-4.3193817138671875, -3.107304096221924], + [2.3620359897613525, -0.09610936045646667], + [0.13514238595962524, 11.806646347045898], + [3.779419183731079, -7.6455841064453125], + [3.7621071338653564, -6.940759181976318], + [3.026588201522827, 0.8029986619949341], + [-6.74029541015625, 8.896138191223145], + [-4.864207744598389, -0.042396727949380875], + [0.10818659514188766, 2.039829730987549], + [2.2411701679229736, -6.318200588226318], + [2.8946213722229004, -6.777126312255859], + [0.41925400495529175, 10.584073066711426], + [5.352436542510986, 6.581051826477051], + [-4.40817403793335, -4.563248157501221], + [1.6953059434890747, -7.374170780181885], + [-4.9240946769714355, 5.256102561950684], + [9.662775993347168, -2.3177995681762695], + [8.674712181091309, -2.3163535594940186], + [4.2375922203063965, -3.9517855644226074], + [-3.6044981479644775, -5.2443013191223145], + [-4.4883246421813965, -4.969171524047852], + [3.4797165393829346, -3.8777616024017334], + [-4.007850646972656, -2.307603597640991], + [3.1956989765167236, -3.4374287128448486], + [4.172547340393066, -3.416872978210449], + [-5.954072952270508, 6.699092864990234], + [3.4637081623077393, -9.115945816040039], + [-5.285549640655518, -2.8638222217559814], + [-2.56854248046875, 1.7849559783935547], + [-2.3672332763671875, -3.1517250537872314], + [-2.2491486072540283, 1.6788583993911743], + [0.27048903703689575, 11.592723846435547], + [2.7681572437286377, 5.29884672164917], + [0.7490807175636292, 10.891940116882324], + [-3.266540288925171, 4.249100208282471], + [6.728794097900391, -1.960183024406433], + [-4.846112251281738, -2.128217935562134], + [-7.19425630569458, 8.400153160095215], + [3.204866409301758, 1.4283784627914429], + [-6.471916675567627, 7.3374176025390625], + [2.491948366165161, 0.9615886211395264], + [-4.349618434906006, 4.792117118835449], + [-5.4495673179626465, -0.9834142327308655], + [9.045358657836914, -2.4243032932281494], + [-3.568650960922241, -3.1549127101898193], + [0.12363975495100021, 10.113759994506836], + [3.044055938720703, -4.321019649505615], + [8.8058443069458, -2.4595000743865967], + [-2.287796974182129, 6.54597806930542], + [-2.8878610134124756, -0.4502067267894745], + [-3.4530980587005615, -3.3151776790618896], + [4.131985187530518, -2.8096001148223877], + [2.6158149242401123, -7.998762130737305], + [2.222379684448242, 5.385071277618408], + [0.053872041404247284, 12.778715133666992], + [-2.985579490661621, 7.320252418518066], + [3.018763303756714, -4.243188381195068], + [3.0049233436584473, -2.635275363922119], + [-0.060783691704273224, 12.952013969421387], + [3.3919007778167725, -4.371744632720947], + [2.9580137729644775, -7.870372295379639], + [3.2501304149627686, -8.348618507385254], + [-2.4772114753723145, -2.519383192062378], + [-3.1388208866119385, 3.058279514312744], + [1.864088773727417, -8.511638641357422], + [-4.44378137588501, 3.7102930545806885], + [-4.943192481994629, -3.4624626636505127], + [-3.831916093826294, 4.781703948974609], + [3.497441291809082, 1.6664174795150757], + [5.297567844390869, 7.4064621925354], + [2.5167582035064697, -7.284122467041016], + [2.221156597137451, 2.093066453933716], + [0.4091914892196655, -0.861434817314148], + [-1.9345574378967285, 2.7033402919769287], + [-3.75988507270813, 3.6330034732818604], + [-4.216397762298584, -2.8029143810272217], + [-3.165198564529419, -3.84542179107666], + [4.1056294441223145, 6.062440872192383], + [-4.2503767013549805, 0.65571129322052], + [4.0599493980407715, 1.7963002920150757], + [1.2157573699951172, -7.346494197845459], + [0.031211309134960175, 9.2151517868042], + [6.655599117279053, 8.226738929748535], + [10.540712356567383, -2.5165107250213623], + [3.917613983154297, -4.765871047973633], + [0.2713901400566101, 0.5298447012901306], + [-6.099830150604248, 1.1555252075195312], + [-0.7719926238059998, 9.628029823303223], + [-1.3248915672302246, 1.8094701766967773], + [-0.004634566605091095, 14.014311790466309], + [9.66434383392334, -2.5710036754608154], + [-4.470633029937744, 5.9839043617248535], + [2.000237226486206, 0.1453484743833542], + [8.472561836242676, -2.3119328022003174], + [-2.1706435680389404, 2.7540154457092285], + [0.19423609972000122, 10.612655639648438], + [3.1381418704986572, -8.647693634033203], + [2.3034536838531494, 2.4939775466918945], + [-0.08956176787614822, 15.07490062713623], + [6.46065092086792, 7.944583415985107], + [0.2263914942741394, 10.789169311523438], + [5.782564163208008, -1.2339189052581787], + [2.244877576828003, 4.404690742492676], + [2.959508180618286, -4.160959243774414], + [0.7495889067649841, -0.9719318151473999], + [-2.750814914703369, 0.8090921640396118], + [2.693814277648926, -5.189666748046875], + [4.377400875091553, -3.459566116333008], + [-2.6173832416534424, -3.95108962059021], + [2.2051455974578857, -6.332369804382324], + [-4.774479389190674, 3.9333791732788086], + [0.2800058126449585, -1.2430026531219482], + [2.1938040256500244, -8.438868522644043], + [8.98068904876709, -2.3635475635528564], + [-0.0002035573124885559, 12.531618118286133], + [-2.470144033432007, -3.6762003898620605], + [5.880703449249268, -1.2334730625152588], + [8.350513458251953, -2.293807029724121], + [7.842066287994385, -2.4682657718658447], + [1.914439082145691, 0.13356515765190125], + [3.208559274673462, -4.500227451324463], + [-3.032259225845337, -3.634371757507324], + [-3.391601324081421, -4.180690765380859], + [3.111400842666626, -8.54130744934082], + [4.434773921966553, 6.736163139343262], + [3.030777931213379, -4.161381721496582], + [-7.836349010467529, -0.3569732904434204], + [4.041369915008545, -3.4939613342285156], + [2.6731255054473877, -3.6823160648345947], + [-4.245265007019043, -5.040866374969482], + [2.306384325027466, 3.5363452434539795], + [3.8735430240631104, 1.1840285062789917], + [5.1389079093933105, -3.651998996734619], + [-3.9435336589813232, -3.83494234085083], + [-2.3174028396606445, -4.108990669250488], + [-3.96175217628479, 7.293603420257568], + [-4.259495258331299, -5.141844749450684], + [3.5042262077331543, -3.9760076999664307], + [3.279528856277466, -3.8559093475341797], + [-3.9377553462982178, 5.0692219734191895], + [2.753540277481079, -7.493124961853027], + [5.412637710571289, -1.4708539247512817], + [-6.6808552742004395, 2.3243138790130615], + [4.459695816040039, 1.9513036012649536], + [-5.356786251068115, 6.976855754852295], + [7.219869613647461, 8.747346878051758], + [-4.7324538230896, -1.5477806329727173], + [-5.492589473724365, -4.025440216064453], + [-3.0111048221588135, 2.74003529548645], + [1.9722025394439697, 4.734959602355957], + [1.0274654626846313, 1.710082769393921], + [-2.1334047317504883, 2.01578950881958], + [2.534597635269165, 4.385075569152832], + [3.4579126834869385, 4.89774751663208], + [-3.7650249004364014, -4.618307113647461], + [-4.070557117462158, 5.195685863494873], + [-5.113790512084961, 1.5368303060531616], + [2.41862416267395, -7.926957130432129], + [-1.8610109090805054, 1.7920701503753662], + [0.024403326213359833, 12.334739685058594], + [-2.2027859687805176, 2.6144590377807617], + [2.4776229858398438, -7.774687767028809], + [0.06913750618696213, 11.956279754638672], + [0.08535384386777878, 9.069698333740234], + [4.069339275360107, -2.745788812637329], + [3.2982189655303955, -7.284149646759033], + [-5.076443195343018, -6.8457183837890625], + [5.922479152679443, -5.522449493408203], + [-1.4357366561889648, 0.8841354250907898], + [2.5838425159454346, 5.577840805053711], + [-4.38774299621582, -6.98145866394043], + [-2.1856424808502197, -4.108328819274902], + [-3.463514566421509, -0.44210004806518555], + [-3.817688226699829, -6.0630998611450195], + [-2.137298583984375, 2.5098369121551514], + [-2.2816030979156494, 2.1789631843566895], + [8.192362785339355, -2.2015843391418457], + [-3.41736102104187, -4.4495038986206055], + [0.1947457194328308, 10.805885314941406], + [9.280306816101074, -2.393922805786133], + [3.270169973373413, -3.9895076751708984], + [4.380918025970459, 1.8466280698776245], + [3.279855489730835, -3.6250436305999756], + [1.0832749605178833, -6.6147308349609375], + [-3.469292163848877, 4.900935649871826], + [3.4370241165161133, 6.23838996887207], + [-5.9135541915893555, -0.8179114460945129], + [-3.605395555496216, -5.023102283477783], + [5.68400764465332, -5.060788154602051], + [3.3781661987304688, -5.402514934539795], + [8.246720314025879, -2.244619369506836], + [0.8363745808601379, 4.315669059753418], + [-6.77258825302124, 7.859565734863281], + [6.252094745635986, -2.4973227977752686], + [2.4447414875030518, 3.931398630142212], + [6.3604936599731445, -1.4446704387664795], + [1.0226199626922607, -6.635259628295898], + [2.562793254852295, -4.807580471038818], + [3.72933030128479, 1.594170093536377], + [3.7791688442230225, -3.6129488945007324], + [-0.10314393788576126, 3.140244483947754], + [1.7300976514816284, -7.755392074584961], + [-2.123504638671875, 0.3517929017543793], + [-1.7265329360961914, 0.8299933075904846], + [1.378807783126831, 4.102799892425537], + [-4.757294178009033, -2.7379720211029053], + [-0.04014725238084793, 9.057673454284668], + [0.2052934765815735, 10.530220031738281], + [3.4537999629974365, -6.1236467361450195], + [-5.554138660430908, -2.9586901664733887], + [8.441575050354004, -2.3842804431915283], + [-0.004940696060657501, 12.545087814331055], + [-4.3206787109375, -6.996849060058594], + [-5.133663654327393, 7.64326810836792], + [0.1415882110595703, 11.74372673034668], + [2.9463682174682617, -5.263843059539795], + [-2.5169694423675537, -2.741903066635132], + [2.863471508026123, -4.0157270431518555], + [0.0067731961607933044, -1.4455329179763794], + [8.882584571838379, -2.3059937953948975], + [-5.98061990737915, 0.41865867376327515], + [-4.763084411621094, -6.6085968017578125], + [3.366041421890259, -2.210901975631714], + [0.2765113115310669, 12.036270141601562], + [2.528174638748169, 3.861353635787964], + [-1.0971932411193848, 0.7380185723304749], + [0.041282348334789276, 12.49172592163086], + [3.435689687728882, -6.816792011260986], + [2.2088074684143066, -6.671183109283447], + [7.218489170074463, -1.738663911819458], + [-0.09174633771181107, 12.818681716918945], + [-1.948702335357666, -3.509361743927002], + [-4.649416923522949, 4.6557698249816895], + [4.384035587310791, 6.6674909591674805], + [-0.03482503443956375, 12.892073631286621], + [-0.5675129890441895, 9.443079948425293], + [2.1862740516662598, 5.045052528381348], + [0.0763811394572258, 11.584924697875977], + [-0.7673764824867249, 0.5593595504760742], + [5.574595928192139, -1.2413005828857422], + [-4.4261298179626465, 4.385361194610596], + [-3.9728646278381348, -5.754062652587891], + [0.21503621339797974, 9.815271377563477], + [6.43488073348999, -1.6505026817321777], + [-4.1161112785339355, 7.023500442504883], + [8.25905990600586, -2.235271692276001], + [7.4787774085998535, -1.928634762763977], + [-3.4310061931610107, -4.424294471740723], + [2.801217794418335, -6.426366329193115], + [4.238295078277588, -3.547069787979126], + [5.4175639152526855, -4.098214149475098], + [-2.607802152633667, -3.376368284225464], + [2.315890073776245, 2.7755982875823975], + [-4.381707668304443, -6.589113235473633], + [3.7939674854278564, -1.5251845121383667], + [-4.532323360443115, 6.821025848388672], + [2.613157033920288, -9.218664169311523], + [-0.3336767256259918, -1.8184102773666382], + [-3.0137581825256348, 1.8756297826766968], + [1.5973433256149292, -6.96076774597168], + [-3.718012571334839, -2.597137451171875], + [-3.2309443950653076, -5.540457248687744], + [-2.4575912952423096, 3.4323251247406006], + [-4.638354778289795, -3.587310552597046], + [-4.946982383728027, 4.941950798034668], + [-3.3846914768218994, 4.130999565124512], + [0.16497904062271118, 11.978096008300781], + [0.028254441916942596, 12.030941009521484], + [4.280158042907715, 5.616497039794922], + [0.5840091109275818, -0.6870524287223816], + [2.1419379711151123, 5.262609004974365], + [0.08499424904584885, 9.354066848754883], + [-4.695539951324463, -6.739072799682617], + [-4.059485912322998, -5.995361328125], + [-6.038789749145508, 6.491063594818115], + [3.4089109897613525, -7.358388900756836], + [2.859964370727539, -7.9398393630981445], + [0.677001416683197, -2.3255133628845215], + [11.277630805969238, -2.4753952026367188], + [0.19795620441436768, 10.750049591064453], + [-3.989915132522583, -2.309455156326294], + [0.23632198572158813, 11.406248092651367], + [3.1340434551239014, -4.049550533294678], + [-3.3774092197418213, -4.283190727233887], + [3.2102158069610596, -3.775085687637329], + [5.297770977020264, 7.217857837677002], + [1.6528682708740234, -6.51327657699585], + [5.413456439971924, 7.309492588043213], + [-4.097204208374023, -6.376197814941406], + [8.124472618103027, -2.1415398120880127], + [3.1608664989471436, 6.409129619598389], + [6.925801753997803, -1.6239651441574097], + [1.4805951118469238, -0.9467544555664062], + [0.6998893618583679, -0.7437723875045776], + [1.5544097423553467, -7.374382019042969], + [-2.496612310409546, 1.760820746421814], + [-1.306761384010315, 1.9728666543960571], + [-5.369583606719971, 2.1659860610961914], + [2.25152587890625, 4.0036420822143555], + [-2.2634222507476807, 1.1629103422164917], + [6.989710330963135, 8.431432723999023], + [-5.575450420379639, -2.4117727279663086], + [-3.97662091255188, -2.7365448474884033], + [5.391226291656494, -1.7753138542175293], + [0.18907707929611206, 10.373405456542969], + [2.2507646083831787, 3.6412885189056396], + [3.3790884017944336, -8.824220657348633], + [4.760461807250977, 2.1644999980926514], + [-3.737352132797241, -1.4130425453186035], + [-0.09795910865068436, 9.7271089553833], + [6.352814674377441, 7.911348342895508], + [2.718231439590454, 0.35235580801963806], + [-0.36061447858810425, 1.162697672843933], + [-2.23638916015625, 0.011139210313558578], + [11.356880187988281, -2.5143089294433594], + [7.253352642059326, -2.214839458465576], + [9.399981498718262, -2.3551933765411377], + [-4.535171985626221, -5.25607967376709], + [2.386390209197998, 1.226663589477539], + [0.23700231313705444, 11.22555160522461], + [0.017684631049633026, 9.583739280700684], + [-4.848613739013672, -7.401629447937012], + [-5.35396146774292, -1.011968731880188], + [9.2528715133667, -2.185194969177246], + [-0.3416858911514282, -4.175123691558838], + [-2.899827718734741, -0.923709511756897], + [3.562591552734375, -3.3821210861206055], + [2.556673288345337, 6.19957160949707], + [-1.5351324081420898, 1.3399206399917603], + [1.8539888858795166, 2.8808348178863525], + [2.2202517986297607, 2.520507574081421], + [2.9593396186828613, -4.071855545043945], + [3.623704433441162, -3.5617640018463135], + [-2.054652690887451, 2.6077895164489746], + [3.4930508136749268, -4.850088119506836], + [8.708087921142578, -2.362978219985962], + [7.507501125335693, -2.1412956714630127], + [-2.895355701446533, 4.709776878356934], + [5.329259872436523, 7.274971961975098], + [-5.76525354385376, 6.450734615325928], + [3.1668901443481445, -8.25345230102539], + [-2.0308868885040283, 2.381835460662842], + [4.61943244934082, 8.003515243530273], + [0.011022977530956268, 9.345443725585938], + [8.349334716796875, -2.3838322162628174], + [1.9617314338684082, -7.300841331481934], + [-2.5773632526397705, 1.7412574291229248], + [-3.679989814758301, 5.237240791320801], + [-0.38864320516586304, 0.7742491960525513], + [3.093950033187866, -4.51630973815918], + [2.89876127243042, -6.976377010345459], + [1.8554619550704956, -7.992292404174805], + [0.9906907677650452, 1.0190125703811646], + [3.851367712020874, -3.9955689907073975], + [0.4972313642501831, -0.944886326789856], + [0.1275433897972107, 10.135395050048828], + [-4.843786239624023, 3.4164302349090576], + [3.9084103107452393, -3.504774332046509], + [6.566095352172852, -1.69084894657135], + [-3.2737529277801514, -3.1049230098724365], + [2.3585948944091797, -7.35807991027832], + [2.143676996231079, -7.47166633605957], + [-3.698781728744507, -5.784862041473389], + [-2.1154277324676514, 2.2759790420532227], + [2.0480051040649414, 5.135924816131592], + [4.89232873916626, 7.485602378845215], + [3.4018192291259766, -5.154753684997559], + [-3.1370153427124023, -2.4891114234924316], + [-2.593440532684326, 1.8841608762741089], + [3.2076523303985596, -3.452066659927368], + [-2.1668708324432373, 0.5698825120925903], + [-6.926906108856201, 1.6528868675231934], + [3.710447311401367, 6.19304895401001], + [3.549164056777954, -6.146246910095215], + [2.2593770027160645, -2.8820605278015137], + [-4.138873100280762, 4.368007183074951], + [1.9082485437393188, 2.7112367153167725], + [-1.940378189086914, 1.6277070045471191], + [2.7215330600738525, 3.8775413036346436], + [1.8328032493591309, 0.8613244295120239], + [-4.929532527923584, 3.6193454265594482], + [1.7822675704956055, -3.227008104324341], + [0.10180311650037766, 9.848880767822266], + [3.379411220550537, -3.0820789337158203], + [-3.324550151824951, 5.324311256408691], + [-5.8225483894348145, 2.1755733489990234], + [0.14686188101768494, 0.827107310295105], + [8.051861763000488, -2.0948643684387207], + [3.4785397052764893, -5.769062042236328], + [2.389011859893799, 5.35427188873291], + [1.0316131114959717, 4.668805122375488], + [8.280694961547852, -2.3184587955474854], + [2.380949020385742, -7.960142612457275], + [3.2808616161346436, 1.432271122932434], + [-2.5353896617889404, 2.166327476501465], + [-2.1271352767944336, 2.2437233924865723], + [1.6623427867889404, 1.2816509008407593], + [-2.3031342029571533, -1.2562999725341797], + [8.378809928894043, -2.2988147735595703], + [-4.452225208282471, -3.678071975708008], + [2.5119876861572266, -7.46195650100708], + [2.260131359100342, 4.172800064086914], + [-0.263887882232666, -1.8835275173187256], + [-0.40186840295791626, -1.7723954916000366], + [1.572279691696167, 1.5227731466293335], + [-2.2204408645629883, 2.097411870956421], + [-4.303606986999512, -2.8698227405548096], + [-2.4809677600860596, 2.0313799381256104], + [2.478841543197632, -7.8124823570251465], + [-4.369582653045654, 5.918010711669922], + [-2.0724856853485107, 2.7529265880584717], + [-2.3500001430511475, -4.298454284667969], + [3.1388795375823975, -4.5087432861328125], + [-2.5240375995635986, 2.1824724674224854], + [8.903806686401367, -2.6847617626190186], + [-5.784188747406006, 6.3434038162231445], + [-2.0143749713897705, -4.599681854248047], + [8.0764741897583, -2.192592144012451], + [4.1488423347473145, -3.4818804264068604], + [-4.207892894744873, -4.104758262634277], + [-4.145284652709961, 3.5156443119049072], + [3.2913668155670166, -2.8982231616973877], + [2.3874242305755615, 3.60676646232605], + [3.8045809268951416, -7.576379299163818], + [2.6299169063568115, -6.682120323181152], + [0.22940069437026978, 10.837495803833008], + [2.53126859664917, 4.4132771492004395], + [-4.033397674560547, -6.299344062805176], + [6.503025531768799, -3.3140623569488525], + [5.583711624145508, -2.0379042625427246], + [0.1751578450202942, -2.9568421840667725], + [-6.387308597564697, -2.2404301166534424], + [3.2877418994903564, 1.2497285604476929], + [-1.7927144765853882, 1.7659024000167847], + [2.9852397441864014, -4.306004524230957], + [0.8079003095626831, -3.807777166366577], + [-4.946094036102295, 4.313991546630859], + [5.197837829589844, -0.6581643223762512], + [0.6295790076255798, -4.152749061584473], + [2.222362756729126, 2.6660141944885254], + [-0.6838166117668152, -1.8381203413009644], + [-5.281806468963623, 4.503445625305176], + [-3.4247682094573975, 5.359195709228516], + [3.9985105991363525, 6.17879581451416], + [3.955061197280884, -4.23842191696167], + [-5.064333438873291, -8.1883544921875], + [-4.076097011566162, -6.569762229919434], + [0.2708495259284973, 9.293954849243164], + [6.601925373077393, -1.4346226453781128], + [-2.8823554515838623, -3.8171095848083496], + [2.4171245098114014, 0.6732194423675537], + [3.7714760303497314, -2.2002017498016357], + [0.04161875694990158, 13.058513641357422], + [-4.288105487823486, 5.209348678588867], + [0.14852410554885864, 10.190839767456055], + [6.33643102645874, 8.388006210327148], + [5.886768341064453, 7.783234119415283], + [5.547299861907959, 7.715569972991943], + [-2.1967668533325195, 2.455227851867676], + [1.7147722244262695, 2.7890636920928955], + [-2.1610991954803467, 2.5299150943756104], + [-6.847315311431885, 7.196444511413574], + [7.008161544799805, -1.734272837638855], + [-4.642927646636963, -3.179793357849121], + [-4.994260787963867, 4.75226354598999], + [1.8769018650054932, -8.236128807067871], + [-1.670027732849121, 2.0197880268096924], + [4.374963283538818, 1.8828376531600952], + [-0.07552380114793777, 13.142946243286133], + [0.2407875657081604, 10.890365600585938], + [-5.367579460144043, 5.52012825012207], + [3.503807783126831, -6.172474384307861], + [9.649287223815918, -2.3103554248809814], + [1.6132320165634155, -7.543944358825684], + [3.7784032821655273, -5.118211269378662], + [3.862799882888794, -4.07576847076416], + [-2.099722146987915, -0.660602867603302], + [-2.168231248855591, -1.4427909851074219], + [-2.4482669830322266, 2.1284329891204834], + [-0.010901756584644318, 13.18097972869873], + [-0.26072797179222107, -1.7953850030899048], + [4.916057586669922, -0.9326196312904358], + [-0.07244092971086502, 9.687426567077637], + [-4.013332366943359, -1.9956365823745728], + [3.696864128112793, -9.062369346618652], + [2.283552408218384, 4.97543478012085], + [10.193795204162598, -2.4044039249420166], + [-4.4323344230651855, -7.079895973205566], + [3.1421868801116943, -3.4364373683929443], + [-5.577798366546631, -0.6409651041030884], + [-4.996647357940674, -8.028762817382812], + [7.352488994598389, -2.4208898544311523], + [3.339001178741455, 5.35793924331665], + [9.680148124694824, -2.47176456451416], + [7.316503524780273, -1.7589977979660034], + [-4.605492115020752, -3.6360247135162354], + [-2.4520928859710693, 2.014315128326416], + [-2.1385881900787354, 2.4743130207061768], + [-3.5369157791137695, -5.096884727478027], + [8.388096809387207, -2.4343831539154053], + [-2.649844169616699, -2.942131757736206], + [-0.6792798638343811, 9.761564254760742], + [-4.930487155914307, -7.260906219482422], + [-2.1715810298919678, 2.5459656715393066], + [-1.8097724914550781, -3.74957537651062], + [1.8369354009628296, 0.4168521463871002], + [0.13647055625915527, 9.83525276184082], + [-2.213002920150757, 2.215451955795288], + [-4.837208271026611, 4.834201335906982], + [-4.7448344230651855, -6.410074234008789], + [-2.5411570072174072, 2.1024465560913086], + [-3.868720769882202, 5.712652683258057], + [-3.7301881313323975, -6.0333123207092285], + [-0.8105036616325378, -1.1880069971084595], + [3.5810658931732178, 1.2615007162094116], + [0.9920400977134705, 0.18466417491436005], + [2.7297723293304443, -3.8816494941711426], + [6.053284645080566, -2.265650987625122], + [3.0925848484039307, 4.055272102355957], + [7.898876190185547, -2.068341016769409], + [-0.11273864656686783, -1.708340048789978], + [-4.838102340698242, 8.638667106628418], + [-3.98494029045105, 6.571536064147949], + [5.44830846786499, -1.3161001205444336], + [-4.756518363952637, -7.330544471740723], + [5.5760393142700195, -2.1196677684783936], + [-5.56186056137085, 1.046028971672058], + [2.122847557067871, 3.3254916667938232], + [3.5648844242095947, 6.278507232666016], + [-7.918502330780029, -0.17915630340576172], + [3.072835683822632, -5.186095237731934], + [3.360865354537964, -2.4089279174804688], + [-2.9231598377227783, 0.8234604001045227], + [0.1351926624774933, -1.3454536199569702], + [-5.154337406158447, 5.388152599334717], + [3.8927016258239746, 6.838245391845703], + [2.581127643585205, -3.684150457382202], + [5.5808491706848145, -2.9583864212036133], + [4.018412113189697, 1.6440702676773071], + [8.005400657653809, -2.5833494663238525], + [3.038268804550171, 4.806964874267578], + [3.935025453567505, -3.75834584236145], + [-3.254615545272827, 6.035636901855469], + [-7.820016860961914, -0.25963258743286133], + [8.389805793762207, -2.2685558795928955], + [2.8174917697906494, -4.299471855163574], + [2.9261553287506104, -4.57112979888916], + [-0.7664884924888611, -2.3095428943634033], + [-2.2186875343322754, 2.243216037750244], + [-3.553102731704712, -2.351365327835083], + [2.2941031455993652, 5.605350494384766], + [0.12901830673217773, 10.213516235351562], + [-4.83854866027832, -7.17189884185791], + [0.1753631830215454, 10.112641334533691], + [2.1169559955596924, 1.765933632850647], + [8.39626693725586, 9.800000190734863], + [-2.491032600402832, 1.9259684085845947], + [3.3005874156951904, -3.9538309574127197], + [-3.6160998344421387, -2.5686802864074707], + [0.22068864107131958, 11.680078506469727], + [5.732904434204102, -1.2990751266479492], + [-2.685551643371582, -5.580513000488281], + [-4.604119777679443, -3.482034206390381], + [5.020758152008057, 7.299699783325195], + [-2.087758779525757, 2.2732505798339844], + [2.7307803630828857, -8.056480407714844], + [1.2897274494171143, 7.601638317108154], + [-3.6525094509124756, 4.953232288360596], + [9.331531524658203, -2.2702038288116455], + [0.32274091243743896, -1.6302491426467896], + [-7.573814392089844, -0.3245856761932373], + [2.4603993892669678, -9.353033065795898], + [1.3029937744140625, 6.421368598937988], + [-4.994424819946289, -3.246061086654663], + [-0.028854496777057648, 12.81452751159668], + [7.942572116851807, -2.198085069656372], + [-2.4021852016448975, -0.6916886568069458], + [2.3966777324676514, -2.553109884262085], + [-5.955149173736572, 0.02940952405333519], + [-0.04469115287065506, 13.148405075073242], + [-5.116488933563232, 3.696047306060791], + [3.270616292953491, -2.983231782913208], + [3.039306879043579, 1.4558380842208862], + [-4.9540228843688965, -5.219474792480469], + [10.360973358154297, -2.5070645809173584], + [5.473759174346924, -1.8710652589797974], + [-4.563573360443115, -7.055393218994141], + [-0.4435257315635681, -2.744549512863159], + [2.192124128341675, 4.216096878051758], + [-2.274146556854248, 2.627159357070923], + [1.6432263851165771, -6.084823131561279], + [5.6206512451171875, -2.5742738246917725], + [-4.3244123458862305, -6.943218231201172], + [8.9873628616333, -2.6051571369171143], + [-5.628244876861572, 6.276371955871582], + [8.086835861206055, -2.4076857566833496], + [-5.273871898651123, 5.822062969207764], + [3.812028408050537, 6.146035194396973], + [-0.022435195744037628, -1.5496240854263306], + [3.201274871826172, -6.961771011352539], + [1.1831655502319336, -0.5243678689002991], + [8.560639381408691, -2.2925264835357666], + [-4.093378067016602, -2.4989466667175293], + [-4.333597183227539, 1.550616979598999], + [-4.955770492553711, 2.2014217376708984], + [3.5660717487335205, -8.229232788085938], + [1.6763055324554443, 0.11365686357021332], + [-0.03381199389696121, 13.864800453186035], + [-1.6491272449493408, 2.4324119091033936], + [1.7216272354125977, -0.38149288296699524], + [2.701854705810547, 5.395909309387207], + [7.741801738739014, -2.5734670162200928], + [-3.9482223987579346, -0.6007654666900635], + [-3.7498018741607666, -3.8044774532318115], + [-2.345578670501709, 1.9978128671646118], + [3.851515531539917, 6.125170707702637], + [-0.07852447777986526, 12.907087326049805], + [-4.675242900848389, -6.040366172790527], + [-4.0359086990356445, -3.2714836597442627], + [4.190805912017822, -3.553177833557129], + [1.8567334413528442, 4.848398685455322], + [-2.164576768875122, 2.603281021118164], + [-5.4252543449401855, 5.343979835510254], + [2.959219455718994, 5.85373592376709], + [2.140763282775879, 0.22561737895011902], + [-2.2721588611602783, -3.1585748195648193], + [-2.336317300796509, 2.2457151412963867], + [-4.843346118927002, -7.65757942199707], + [3.7683115005493164, 1.7078982591629028], + [-7.02632474899292, 8.148441314697266], + [2.0369508266448975, -3.926717519760132], + [10.574555397033691, -2.6268258094787598], + [-4.635455131530762, 4.6038103103637695], + [7.016335964202881, -1.5946687459945679], + [0.9109493494033813, -5.947637557983398], + [6.624995708465576, -4.445495128631592], + [-2.1209864616394043, 2.5473580360412598], + [9.260702133178711, -2.454902410507202], + [-6.050203800201416, -0.8071572780609131], + [8.850136756896973, -2.3976058959960938], + [6.973100185394287, -2.9965591430664062], + [-0.23972535133361816, -1.2144103050231934], + [1.7691632509231567, 0.0028655491769313812], + [9.263428688049316, -2.3442440032958984], + [-2.505413293838501, 3.0142219066619873], + [-2.3239712715148926, 1.300791621208191], + [7.89796257019043, -2.1099627017974854], + [-4.935263633728027, -6.308867454528809], + [-5.330505847930908, 6.766699314117432], + [8.198612213134766, -2.214280366897583], + [-0.021580763161182404, 12.944700241088867], + [3.238128423690796, 0.8792014122009277], + [1.9999876022338867, 0.3279203474521637], + [-2.104782819747925, 2.4685630798339844], + [-4.9936137199401855, 5.613278388977051], + [2.0143778324127197, 1.4880812168121338], + [3.5595810413360596, -4.285677433013916], + [-2.6704211235046387, -3.596614360809326], + [-6.365869045257568, 7.6162309646606445], + [-4.645537376403809, -6.39846134185791], + [10.797752380371094, -2.594705820083618], + [3.663653612136841, -6.296405792236328], + [2.329524278640747, -3.4497034549713135], + [0.24660557508468628, 10.979244232177734], + [-2.394122362136841, 2.127807378768921], + [-2.2134206295013428, -4.054892539978027], + [-0.4208582043647766, 7.981035232543945], + [5.042696952819824, 6.55116081237793], + [-5.79647970199585, 6.542627334594727], + [-2.1396243572235107, 2.4323766231536865], + [2.841383457183838, 6.155561447143555], + [3.059471368789673, -5.881731033325195], + [0.01861601322889328, 10.54317855834961], + [1.8144941329956055, 1.6235032081604004], + [5.68123722076416, -1.1624795198440552], + [-2.2833633422851562, 1.0685356855392456], + [9.040327072143555, -2.3603546619415283], + [0.13288241624832153, 9.377206802368164], + [3.0584192276000977, -4.315548896789551], + [-0.6670930981636047, -2.60687518119812], + [5.656871318817139, -6.17863130569458], + [-3.4835283756256104, -3.5200517177581787], + [-2.0658862590789795, 2.455214738845825], + [1.56640625, -0.26084035634994507], + [-0.4571636915206909, -1.3936964273452759], + [2.9627623558044434, -8.34090805053711], + [8.034518241882324, -1.9932414293289185], + [-3.031538963317871, 2.5934152603149414], + [6.983898639678955, -4.887419700622559], + [-5.650754451751709, -0.3214449882507324], + [-2.4447638988494873, 2.176295280456543], + [8.032244682312012, -2.487515926361084], + [3.2146553993225098, -6.922801971435547], + [3.561218023300171, -4.250487327575684], + [-2.042532444000244, 2.4712724685668945], + [0.7436898350715637, -6.792125701904297], + [4.537764549255371, 7.337103843688965], + [7.090017318725586, -1.7248573303222656], + [3.257551908493042, -6.554027080535889], + [-3.281306505203247, -5.289639949798584], + [-2.3328592777252197, -4.187196254730225], + [-3.65887713432312, 3.5913705825805664], + [3.0378878116607666, -4.466989517211914], + [3.3100175857543945, -3.770010232925415], + [-0.050834186375141144, 9.285627365112305], + [0.169641375541687, 11.501964569091797], + [10.172158241271973, -2.3689773082733154], + [-6.304677486419678, -0.24033403396606445], + [2.3919146060943604, -6.947017669677734], + [-1.0836479663848877, 2.2827401161193848], + [5.539977073669434, 7.765721797943115], + [-5.664261341094971, -0.8684217929840088], + [3.9803664684295654, 5.89194393157959], + [4.321011543273926, 1.9285635948181152], + [-4.823906421661377, -3.33536958694458], + [2.5504086017608643, -0.703536331653595], + [3.473889112472534, -8.18506145477295], + [-5.398337364196777, -2.3007936477661133], + [-2.4968738555908203, 1.909027099609375], + [5.023512840270996, 6.810754776000977], + [8.491711616516113, -2.2741200923919678], + [3.103412389755249, -1.129723072052002], + [-4.719861030578613, -7.055692672729492], + [0.6615824103355408, -1.645546793937683], + [7.712987422943115, -2.3403966426849365], + [-2.2129337787628174, 2.487854480743408], + [-4.8721208572387695, 4.9463300704956055], + [5.664245128631592, 7.613948822021484], + [-6.504476070404053, 7.26917839050293], + [-4.693228721618652, -3.461883783340454], + [4.765038013458252, 7.47614860534668], + [-0.0025532320141792297, 11.76756763458252], + [2.992504119873047, -3.3446366786956787], + [-4.82031774520874, -1.8387058973312378], + [-3.8491148948669434, 5.834461212158203], + [2.3949661254882812, 4.608442306518555], + [-1.7223196029663086, 1.3170603513717651], + [3.582686185836792, -3.199712038040161], + [4.437122821807861, -4.745456218719482], + [1.826472282409668, -8.074324607849121], + [1.6263679265975952, -8.039307594299316], + [-6.167787551879883, 6.811811923980713], + [-3.461357355117798, -0.9111185073852539], + [-0.17717796564102173, 0.7916444540023804], + [3.0740482807159424, -2.9409728050231934], + [0.7212526202201843, 11.061065673828125], + [5.928675651550293, -1.2609230279922485], + [8.034440040588379, -2.0511767864227295], + [5.807154178619385, -4.674271106719971], + [2.5467476844787598, -7.201376914978027], + [2.4597103595733643, 0.8095939755439758], + [6.703645706176758, -5.949352741241455], + [-3.57395076751709, -0.9887802600860596], + [7.4108357429504395, -2.492387056350708], + [-4.111464500427246, -1.5129402875900269], + [6.698477268218994, 8.346226692199707], + [-2.2495100498199463, -3.820495843887329], + [-5.006195068359375, 5.448965072631836], + [8.379643440246582, -2.422795534133911], + [6.350527286529541, -1.3893588781356812], + [-4.892784595489502, -7.433516979217529], + [3.431976795196533, -3.688505172729492], + [5.274569034576416, 7.140959739685059], + [-3.743084669113159, -3.9206783771514893], + [-4.6301445960998535, -6.303484916687012], + [3.1202428340911865, -4.465642929077148], + [7.83427095413208, -2.4317030906677246], + [2.8264825344085693, -8.554676055908203], + [-3.3547112941741943, 0.4583251476287842], + [-2.6035237312316895, 1.847296118736267], + [-4.095195770263672, -6.606610298156738], + [8.94859504699707, -2.5707614421844482], + [-0.20464903116226196, 9.661067962646484], + [-2.106424570083618, 2.2472305297851562], + [-6.2216105461120605, 5.8948445320129395], + [-2.1660876274108887, 2.708475351333618], + [-2.2126681804656982, 2.8489835262298584], + [-5.893883228302002, 7.423543930053711], + [-0.9634814858436584, -1.4903030395507812], + [-2.084132671356201, 1.9612971544265747], + [-0.15616637468338013, 14.993699073791504], + [2.2706897258758545, 5.242251396179199], + [-4.169742584228516, -6.688442707061768], + [2.2935636043548584, 5.526494979858398], + [-4.143901348114014, -0.8307090401649475], + [-1.1847790479660034, -2.3687994480133057], + [4.813602924346924, -3.754385471343994], + [0.19885402917861938, 10.764619827270508], + [4.743520259857178, -2.8972389698028564], + [-4.008443832397461, 7.493200778961182], + [-5.1499457359313965, 5.859165668487549], + [1.6272016763687134, 2.055514335632324], + [3.1974666118621826, -4.168111801147461], + [-5.851807117462158, 4.921566009521484], + [8.168927192687988, -2.225649118423462], + [-2.325878858566284, 2.0973830223083496], + [0.18990826606750488, 10.784730911254883], + [2.93585467338562, -3.753173351287842], + [4.527885913848877, -4.888309955596924], + [3.161752462387085, -4.462259769439697], + [-0.7498059868812561, 1.604385256767273], + [-5.670257568359375, -2.0506136417388916], + [0.5340321660041809, -0.7245541214942932], + [-5.218659400939941, -0.6126589775085449], + [9.586670875549316, -2.356858015060425], + [3.771418809890747, 6.499977111816406], + [-0.030523069202899933, 9.669770240783691], + [3.5011870861053467, -4.880623817443848], + [2.711016893386841, 2.113515615463257], + [6.594349384307861, -3.0743088722229004], + [2.552973985671997, 4.895027160644531], + [3.338832378387451, -4.739163875579834], + [-0.032390840351581573, 9.839340209960938], + [-3.380640983581543, -1.0548487901687622], + [5.3996806144714355, -6.229778289794922], + [-4.018831253051758, -6.253891944885254], + [3.0874550342559814, 5.607296466827393], + [-4.340455532073975, -1.4364668130874634], + [7.822991847991943, 9.194747924804688], + [-2.224724054336548, 2.169156551361084], + [-2.5379810333251953, 1.8114293813705444], + [-3.000018358230591, -5.038974761962891], + [3.179089307785034, -4.101735591888428], + [4.256788730621338, 1.4063347578048706], + [-2.118191957473755, -3.862375259399414], + [0.07430510967969894, 9.275153160095215], + [6.193535327911377, -1.542784571647644], + [-7.267262935638428, 8.711689949035645], + [1.1307616233825684, 5.184267997741699], + [-5.380980014801025, 5.169915199279785], + [-2.3791592121124268, 1.481398582458496], + [-2.428795576095581, 2.195744276046753], + [-1.7618749141693115, 2.082378387451172], + [8.511350631713867, -2.269287347793579], + [0.20537018775939941, 11.545083999633789], + [-5.193323612213135, -0.23401427268981934], + [3.6508257389068604, -5.014595031738281], + [3.6408803462982178, 6.371835708618164], + [3.7613277435302734, -2.894031047821045], + [-2.53423810005188, -5.172205924987793], + [-2.1781694889068604, -0.9869216084480286], + [5.849109649658203, -4.890621662139893], + [4.0410261154174805, -7.200174331665039], + [-2.058696985244751, -3.7609524726867676], + [-4.384042263031006, -6.360996246337891], + [-0.016660518944263458, 12.213190078735352], + [4.245847225189209, -7.907557964324951], + [2.464122772216797, -8.82303237915039], + [0.15845400094985962, 11.675795555114746], + [3.0014684200286865, -4.127630233764648], + [0.06166844815015793, 12.700922012329102], + [-0.0607263520359993, 13.729043006896973], + [-5.137964248657227, 7.644492149353027], + [3.3089468479156494, -8.416250228881836], + [0.1409076452255249, 9.419757843017578], + [1.5323445796966553, 4.776111602783203], + [-1.415053367614746, 1.5426349639892578], + [2.7315618991851807, -3.5281832218170166], + [3.516801595687866, -0.8257114291191101], + [-3.2865707874298096, -0.8370523452758789], + [-0.06004280596971512, 13.553094863891602], + [-2.572801113128662, 1.5159823894500732], + [-4.395019054412842, -6.8535990715026855], + [2.8230814933776855, -4.157096862792969], + [5.008800983428955, 6.917403697967529], + [1.778212070465088, 4.115078926086426], + [3.9791128635406494, -3.58543062210083], + [2.4670562744140625, -9.112424850463867], + [-2.3173928260803223, -3.698725700378418], + [2.290720224380493, -2.971548557281494], + [3.1979405879974365, 6.901826858520508], + [0.9175506234169006, -0.6269559264183044], + [-2.091268301010132, 2.513404130935669], + [-2.927215814590454, 1.4694406986236572], + [-7.099434852600098, -0.020031575113534927], + [1.17941415309906, -4.911752223968506], + [1.2486790418624878, 3.3297812938690186], + [0.16742777824401855, 11.81917953491211], + [-3.0642826557159424, -4.354181289672852], + [9.79149341583252, -2.356588840484619], + [0.07703786343336105, 9.71973991394043], + [8.364360809326172, -2.2592341899871826], + [1.957336664199829, -3.102724313735962], + [-2.522235155105591, 0.5345977544784546], + [-4.943923473358154, -3.1090948581695557], + [3.505263090133667, -2.6721479892730713], + [6.2337141036987305, -1.3913847208023071], + [-6.338918685913086, -0.23587441444396973], + [7.421138286590576, -2.4354631900787354], + [-0.08788273483514786, -1.5913053750991821], + [-6.4074788093566895, 8.248186111450195], + [3.2890114784240723, -6.252743721008301], + [-1.7666996717453003, -1.0507363080978394], + [-3.4638071060180664, -3.993798017501831], + [6.061563014984131, -1.2613054513931274], + [0.013644091784954071, 9.270095825195312], + [-5.869946479797363, -0.4652656316757202], + [-2.148958206176758, -0.47085443139076233], + [2.726060628890991, -9.225717544555664], + [-4.440852165222168, 4.119955062866211], + [-1.5370758771896362, -0.8679220676422119], + [6.2945122718811035, -1.4354363679885864], + [-4.922998428344727, -0.11990213394165039], + [8.399861335754395, -2.517606735229492], + [-5.845174312591553, 0.05093913897871971], + [-4.791799068450928, -6.731996536254883], + [-4.824845314025879, 5.112717151641846], + [9.624157905578613, -2.3298351764678955], + [0.4056817889213562, 12.233509063720703], + [3.8229801654815674, -1.271436333656311], + [8.472542762756348, -2.3522021770477295], + [-2.5151171684265137, 1.564893126487732], + [0.40163594484329224, 11.835094451904297], + [0.6773534417152405, 11.439271926879883], + [-2.129348039627075, 2.3585433959960938], + [-1.799533724784851, 1.3026219606399536], + [-1.629252552986145, 1.3905037641525269], + [7.574291706085205, -2.0145938396453857], + [-2.3821861743927, -4.3489603996276855], + [-8.198187828063965, -0.281597375869751], + [-5.119846820831299, 4.489507675170898], + [-0.22381746768951416, 0.6021406650543213], + [2.0590221881866455, -7.13237190246582], + [1.300361156463623, -0.08858205378055573], + [2.287156820297241, -5.0692596435546875], + [-1.1522921323776245, 1.8778058290481567], + [-2.2395312786102295, 2.6441383361816406], + [0.9021404385566711, 8.412958145141602], + [-6.045897006988525, 7.361355781555176], + [-1.6464619636535645, 2.2073938846588135], + [0.040519289672374725, 12.001547813415527], + [11.232844352722168, -2.5967180728912354], + [-6.819754600524902, 0.39334404468536377], + [6.493239879608154, -1.4677451848983765], + [8.560561180114746, -2.3572709560394287], + [3.3486857414245605, -2.187873601913452], + [6.793822765350342, -2.260058641433716], + [-0.2018612027168274, 9.943161010742188], + [2.2042813301086426, -2.7781734466552734], + [4.858641624450684, -3.898231267929077], + [-2.3921406269073486, 3.135209798812866], + [-0.016221828758716583, 8.998912811279297], + [1.2326040267944336, -6.682741165161133], + [-5.429442882537842, 4.637908458709717], + [2.5742037296295166, 0.6102570295333862], + [-2.2348740100860596, 2.583192825317383], + [3.2351391315460205, -3.4201884269714355], + [7.617154121398926, -4.834622859954834], + [8.551411628723145, -2.3176794052124023], + [8.074545860290527, 9.493523597717285], + [-2.0874876976013184, -1.2803068161010742], + [2.9819977283477783, -4.303824424743652], + [-6.565054416656494, 7.679920196533203], + [-2.7324435710906982, 1.8249878883361816], + [-6.997500896453857, 8.100032806396484], + [7.097204685211182, -1.7693607807159424], + [-6.930392742156982, 8.043903350830078], + [-1.6618741750717163, 2.311694622039795], + [2.175971269607544, -3.130903959274292], + [1.5572506189346313, -6.421258926391602], + [2.653467893600464, 4.722569465637207], + [3.6041057109832764, -6.918008804321289], + [6.237473011016846, -4.157397270202637], + [0.20222902297973633, 10.946756362915039], + [0.08860325068235397, 0.6234381198883057], + [5.4094438552856445, -2.072834014892578], + [1.7761805057525635, -7.710374355316162], + [1.6514508724212646, 2.768867254257202], + [0.24133425951004028, 10.534305572509766], + [-1.660962462425232, 1.6050149202346802], + [-1.5599946975708008, 1.9183919429779053], + [-0.05747164040803909, 12.911365509033203], + [3.456692934036255, -3.1950185298919678], + [-0.010339610278606415, -1.6672346591949463], + [2.059467077255249, -8.086626052856445], + [4.079460620880127, -2.304053544998169], + [-3.925457239151001, -6.93245792388916], + [6.716919898986816, 8.148000717163086], + [-0.8529817461967468, 1.5329360961914062], + [-4.870114326477051, -4.546358108520508], + [4.945276260375977, 6.39091682434082], + [-4.463493824005127, -5.55771541595459], + [2.7778637409210205, -7.900128364562988], + [0.015023462474346161, 9.512492179870605], + [-5.997042179107666, -2.273549795150757], + [2.7903990745544434, -3.183039426803589], + [2.3353285789489746, -8.630727767944336], + [0.12369643896818161, 9.491358757019043], + [-5.1147990226745605, -5.7382097244262695], + [-1.8006157875061035, 0.3727172315120697], + [1.8137682676315308, 1.1387933492660522], + [2.012272357940674, -7.652896881103516], + [2.015742301940918, 6.03244686126709], + [-5.756246089935303, 0.17957061529159546], + [7.1027398109436035, -1.5776711702346802], + [-6.9646782875061035, -1.76154363155365], + [-0.03838331252336502, 12.212961196899414], + [7.229190349578857, 8.637629508972168], + [-4.451846599578857, -6.16904354095459], + [3.530984401702881, -6.284207344055176], + [6.780287742614746, -4.394349098205566], + [7.820938587188721, -2.0964949131011963], + [1.2077275514602661, -0.7125124931335449], + [3.039872169494629, -4.215153694152832], + [-3.615994691848755, -5.421806335449219], + [9.252523422241211, -2.3139712810516357], + [1.7805508375167847, -7.590628623962402], + [2.2858965396881104, 4.524816036224365], + [2.3801944255828857, 5.421214580535889], + [10.833965301513672, -2.4842519760131836], + [3.615070343017578, -3.4307687282562256], + [2.284329652786255, 5.351558685302734], + [4.006765365600586, 1.932915449142456], + [-2.8566012382507324, -0.22333258390426636], + [-2.138239622116089, 2.760850191116333], + [6.453343868255615, -5.171069622039795], + [-2.445267677307129, -0.15240401029586792], + [1.7084733247756958, -7.98565673828125], + [-4.380948066711426, -3.941585063934326], + [0.05493348091840744, 12.050529479980469], + [-4.222458362579346, -1.5717848539352417], + [2.8170998096466064, -8.677260398864746], + [-8.180033683776855, -0.22433042526245117], + [-2.1938838958740234, 2.794825792312622], + [-4.678819179534912, -3.101987838745117], + [-5.837000370025635, 2.082949638366699], + [3.2955381870269775, -3.7940680980682373], + [8.564570426940918, -2.3491084575653076], + [-2.4443066120147705, -4.338687896728516], + [5.168665885925293, -1.095235824584961], + [0.09380524605512619, 9.703105926513672], + [-2.768064498901367, -3.124311685562134], + [4.656418323516846, 6.429386615753174], + [-3.847463369369507, 4.065588474273682], + [-2.6858043670654297, -3.7918872833251953], + [-3.10402512550354, -5.382641792297363], + [-1.5429067611694336, 1.5293642282485962], + [2.7958812713623047, -9.537296295166016], + [0.844042956829071, -4.093477249145508], + [0.26265400648117065, 9.76225471496582], + [3.0058343410491943, -4.233312129974365], + [4.379788875579834, -1.5569401979446411], + [-3.749809503555298, -6.13798713684082], + [-4.38201379776001, -7.400389194488525], + [-1.6452022790908813, 2.325230836868286], + [3.751638650894165, 1.439034104347229], + [3.5321953296661377, -4.9215593338012695], + [3.467913866043091, -5.355118751525879], + [6.5084943771362305, 8.09189510345459], + [0.2802339196205139, 11.180728912353516], + [-2.6826469898223877, 1.8815637826919556], + [2.184401750564575, 3.615159034729004], + [-4.651026248931885, -6.976512908935547], + [-0.23975729942321777, 8.99937629699707], + [5.365285396575928, 6.867534637451172], + [-2.373522996902466, 2.0770509243011475], + [8.586325645446777, -2.347308874130249], + [-2.384830951690674, 3.09047269821167], + [5.134909629821777, 7.814877986907959], + [8.027817726135254, -2.5608456134796143], + [2.807509183883667, 3.06261944770813], + [-0.25284436345100403, -1.1803255081176758], + [3.5940029621124268, -6.520277976989746], + [-2.6144022941589355, 2.252718448638916], + [9.815587997436523, -2.525707483291626], + [-6.017817974090576, 6.920157432556152], + [-2.210965156555176, 2.355105400085449], + [-2.108354330062866, 2.5554044246673584], + [5.352132320404053, 7.504549980163574], + [9.508493423461914, -2.3821675777435303], + [2.126523494720459, -2.8988137245178223], + [4.063029766082764, 6.86755895614624], + [1.7019994258880615, 0.37323272228240967], + [-4.240202903747559, -6.752816200256348], + [7.189770698547363, 8.579601287841797], + [0.1566881537437439, 11.252588272094727], + [-6.403696060180664, 7.482770919799805], + [-2.192943811416626, 1.893997073173523], + [-2.538760185241699, 1.0673915147781372], + [6.853649139404297, -2.1902759075164795], + [0.15332770347595215, 9.869539260864258], + [-5.133727550506592, -5.113471508026123], + [-4.693150997161865, -5.807394027709961], + [0.27073389291763306, 11.189780235290527], + [3.1144282817840576, 6.1773271560668945], + [2.4983603954315186, 0.9392971396446228], + [8.493969917297363, -2.434007406234741], + [0.09203844517469406, 9.861190795898438], + [3.104518175125122, -4.421009540557861], + [-2.5379891395568848, -1.0658773183822632], + [-3.820434808731079, -5.991600036621094], + [7.6219706535339355, -2.141216278076172], + [-1.089540958404541, -3.6616098880767822], + [-0.31321635842323303, 6.532401084899902], + [0.46196359395980835, -1.1653159856796265], + [-4.661885738372803, 5.911623001098633], + [3.258385419845581, -7.332188129425049], + [0.1951020359992981, 11.456096649169922], + [-5.817071437835693, -2.728778600692749], + [4.0845417976379395, 6.697956085205078], + [2.878584146499634, -5.622687816619873], + [-4.871859073638916, 1.4719635248184204], + [-2.5897934436798096, 1.8976998329162598], + [8.83110523223877, -2.323268413543701], + [-4.180515289306641, -5.418997764587402], + [1.6215118169784546, -7.728663921356201], + [3.0537304878234863, -4.286606311798096], + [5.840511322021484, 7.783558368682861], + [2.700563907623291, 0.06092330440878868], + [-2.6780619621276855, 2.275332450866699], + [0.4038843512535095, -1.2194664478302002], + [4.546898365020752, 6.007228851318359], + [2.758751392364502, -7.427949905395508], + [-2.027581214904785, 2.4606070518493652], + [-4.584530353546143, 4.953665256500244], + [6.210248947143555, 8.257972717285156], + [-2.160562038421631, 2.593477249145508], + [-3.4456002712249756, 5.023860454559326], + [-3.682558298110962, -6.231024265289307], + [4.869103908538818, 6.555885314941406], + [-6.348743438720703, 1.662976622581482], + [-5.068421840667725, -7.536165237426758], + [0.006397835910320282, 13.455097198486328], + [-2.358901023864746, 1.1260523796081543], + [-2.089975357055664, 2.5416877269744873], + [2.044489622116089, -7.693994522094727], + [3.7371222972869873, 1.44195556640625], + [-6.1388115882873535, 6.9770002365112305], + [3.0569756031036377, -3.8598387241363525], + [-1.5830525159835815, 0.6557573676109314], + [8.26077938079834, -2.293717622756958], + [-1.9004932641983032, 2.4582107067108154], + [0.38483327627182007, 4.902019500732422], + [-1.27395498752594, -3.026170492172241], + [-4.834472179412842, -6.94258975982666], + [-4.540935039520264, 0.2085639238357544], + [-3.8541629314422607, -2.0540387630462646], + [0.8773817420005798, -6.495467185974121], + [6.027681827545166, -1.2707289457321167], + [8.85010814666748, -2.2519845962524414], + [2.601696014404297, 6.0472259521484375], + [-6.366635799407959, 7.38071346282959], + [10.452532768249512, -2.470968246459961], + [-5.682677268981934, 4.003384590148926], + [1.5826573371887207, 4.5256829261779785], + [7.407919406890869, -2.10770320892334], + [-7.037383079528809, 7.9015350341796875], + [2.6121151447296143, 3.305096387863159], + [-0.022171564400196075, 12.666918754577637], + [0.2779584527015686, 11.394346237182617], + [-2.3184280395507812, 2.245215654373169], + [2.1448023319244385, 3.0012686252593994], + [-3.3370845317840576, -3.036452054977417], + [-5.059725284576416, -3.070002794265747], + [2.429594039916992, 2.1655428409576416], + [-2.10569429397583, 2.457947254180908], + [3.0247743129730225, -8.168521881103516], + [1.8224743604660034, 1.9310330152511597], + [3.6870129108428955, -3.506274461746216], + [3.315274477005005, 1.2497483491897583], + [2.6859326362609863, -9.193063735961914], + [1.543785572052002, -7.697976112365723], + [-5.581688404083252, 4.361783504486084], + [3.5848169326782227, 1.2388955354690552], + [3.0161945819854736, -4.1786041259765625], + [0.00943022221326828, 12.65888786315918], + [-5.217251777648926, -1.854714274406433], + [-4.18373441696167, -6.239175796508789], + [-2.277127504348755, 2.256887674331665], + [5.4049153327941895, -5.136059761047363], + [-0.02030283957719803, 12.218083381652832], + [6.7669548988342285, -1.4759007692337036], + [2.6035964488983154, -3.6391053199768066], + [-0.019948013126850128, 12.995210647583008], + [2.894927740097046, 1.6024034023284912], + [0.16774910688400269, 9.92142105102539], + [-4.101735591888428, -5.770990371704102], + [-4.49254035949707, -5.464800834655762], + [-6.303807735443115, -2.088547945022583], + [1.1570535898208618, -5.614740371704102], + [-4.0218377113342285, -6.374131679534912], + [1.6976206302642822, 3.032310724258423], + [-2.1430866718292236, -3.4816858768463135], + [-4.406653881072998, -6.628235816955566], + [-3.401404857635498, -3.2841923236846924], + [-1.7505309581756592, -3.6063485145568848], + [7.937244892120361, -2.1646502017974854], + [-3.0819385051727295, -4.236528396606445], + [-5.147060871124268, -5.912976264953613], + [2.9330551624298096, -3.0424273014068604], + [-2.5693628787994385, -4.6309356689453125], + [2.5813868045806885, -9.884790420532227], + [6.638801097869873, 8.018932342529297], + [0.2809963822364807, 11.107675552368164], + [8.042825698852539, -2.286472797393799], + [0.07519017904996872, 12.281817436218262], + [6.558165550231934, -1.71622896194458], + [3.612039566040039, -3.926583766937256], + [-1.4147971868515015, 1.0153181552886963], + [-2.1581404209136963, 0.9672731161117554], + [-5.079737186431885, 5.27835750579834], + [3.487558603286743, 2.077467441558838], + [-1.7299383878707886, 2.182920217514038], + [-2.7309136390686035, 2.1401209831237793], + [2.4577550888061523, 1.9376165866851807], + [3.70298171043396, -4.1782121658325195], + [-1.036144733428955, -3.6851887702941895], + [-1.7975993156433105, 1.4779633283615112], + [0.2617669105529785, 10.94105052947998], + [1.753737449645996, -0.119558185338974], + [-6.8966288566589355, 7.82072639465332], + [-1.9360052347183228, 2.3844211101531982], + [-4.8708720207214355, 0.09630990028381348], + [-4.690818786621094, 5.016769886016846], + [-4.036274433135986, -3.5734403133392334], + [-2.105942964553833, 2.6088201999664307], + [-3.119155168533325, -3.831733226776123], + [-0.4565771818161011, -2.1787729263305664], + [-4.878213882446289, -1.4584153890609741], + [-1.1923174858093262, 0.08489334583282471], + [1.7762211561203003, -7.787006855010986], + [1.1765391826629639, -0.4688577651977539], + [5.221495628356934, 7.35730504989624], + [-0.6626554131507874, -0.1522461622953415], + [3.697232961654663, -3.3845036029815674], + [8.562992095947266, -2.3417627811431885], + [-2.590742349624634, 2.1706995964050293], + [0.15718382596969604, 11.598870277404785], + [-2.2726564407348633, -3.8230273723602295], + [8.360483169555664, -2.1984426975250244], + [-1.7797904014587402, 0.09196516871452332], + [1.8813762664794922, 1.496663212776184], + [-0.03418690711259842, 12.394161224365234], + [3.1380269527435303, -2.599040985107422], + [-1.0613884925842285, 0.5675273537635803], + [-2.3986825942993164, 2.3299522399902344], + [3.0158040523529053, -4.01114559173584], + [6.110927104949951, 7.494462966918945], + [-0.5529512763023376, -1.8535871505737305], + [9.190874099731445, -2.3035171031951904], + [-3.8377315998077393, 5.995581150054932], + [-5.235881328582764, 5.873419761657715], + [0.04706030339002609, 8.727835655212402], + [6.464768409729004, -5.236710548400879], + [-3.6993353366851807, 3.626518726348877], + [-0.5045136213302612, -1.9541741609573364], + [2.281249761581421, -2.7958905696868896], + [-4.514922618865967, -6.3477325439453125], + [6.771409511566162, -1.364804744720459], + [2.369784116744995, 2.005303144454956], + [-2.5217320919036865, 5.641232490539551], + [9.162064552307129, -2.4535460472106934], + [0.4589086174964905, -1.4166712760925293], + [3.93353009223938, -3.6917803287506104], + [0.12827104330062866, 11.49746322631836], + [2.5869648456573486, -6.679293632507324], + [3.647799253463745, -5.977021217346191], + [2.445768117904663, -7.957223892211914], + [0.15392369031906128, 11.590112686157227], + [-1.883641004562378, -0.6529780626296997], + [-4.527024745941162, -2.470764398574829], + [-3.8226706981658936, -1.372637152671814], + [6.8909010887146, 8.382795333862305], + [0.19092649221420288, 10.352052688598633], + [-1.4524680376052856, 2.049543857574463], + [1.8267755508422852, -7.048840045928955], + [6.2858357429504395, 7.750370979309082], + [-1.9618099927902222, 2.477663993835449], + [8.056123733520508, -2.168060779571533], + [4.719140529632568, -2.9279913902282715], + [-2.3587875366210938, 2.1521596908569336], + [3.671358108520508, 1.252806305885315], + [0.537514865398407, -1.0924371480941772], + [8.211230278015137, -2.225489377975464], + [8.066132545471191, -2.2100675106048584], + [5.628121852874756, 7.8666558265686035], + [-4.860954761505127, -6.714237213134766], + [11.127955436706543, -2.536909341812134], + [-1.9804487228393555, 1.659837245941162], + [2.502169609069824, -5.645964622497559], + [-4.017628192901611, -2.050529718399048], + [3.0727145671844482, -5.033270835876465], + [-2.167940855026245, 2.059530735015869], + [-4.537306308746338, -6.795253753662109], + [-2.0033538341522217, 1.4016748666763306], + [6.744597911834717, 8.235140800476074], + [3.679750919342041, -3.98000168800354], + [-3.923643112182617, -5.431493759155273], + [2.916520357131958, -7.558274269104004], + [7.956126689910889, -2.366926908493042], + [-1.44775390625, -4.008919715881348], + [-4.651856899261475, -6.955304145812988], + [-3.988499641418457, 6.306491851806641], + [0.23849612474441528, 0.2849276661872864], + [-5.0361151695251465, 4.01694393157959], + [6.801929473876953, -2.878906011581421], + [7.189844131469727, 8.756242752075195], + [0.19901275634765625, 10.653560638427734], + [2.326287269592285, 5.636496543884277], + [4.355090141296387, -6.614711284637451], + [2.3492136001586914, -2.313457727432251], + [9.311070442199707, -2.3978211879730225], + [-5.129868030548096, -2.854336977005005], + [-2.6418092250823975, -3.541886806488037], + [-1.8756474256515503, 2.530766725540161], + [4.245907306671143, -1.0248708724975586], + [-0.9076848030090332, -3.4573862552642822], + [-1.7937740087509155, 2.302968978881836], + [-2.521411180496216, 1.7945579290390015], + [-1.5704718828201294, 1.9874640703201294], + [6.403250694274902, -2.0035316944122314], + [10.4141206741333, -2.3775970935821533], + [8.259896278381348, -2.443239450454712], + [2.779602289199829, -8.750214576721191], + [3.9099578857421875, 6.713274002075195], + [9.449475288391113, -2.402735710144043], + [-6.436662197113037, 7.356412887573242], + [3.422044038772583, -4.069996356964111], + [-4.18699312210083, -6.678097248077393], + [4.400035381317139, -3.3905155658721924], + [1.9009568691253662, 2.9863765239715576], + [5.406482219696045, 7.2722930908203125], + [-5.447588920593262, 4.961385726928711], + [-2.92925763130188, -3.646085500717163], + [-4.972250461578369, -4.3046722412109375], + [-1.180884838104248, -0.3238663971424103], + [-5.29914665222168, 6.656178951263428], + [-7.473635196685791, -0.2583264112472534], + [1.1025465726852417, -3.8271617889404297], + [-0.0446225181221962, -1.5047389268875122], + [6.831751823425293, -1.8131749629974365], + [3.493394613265991, -7.1095051765441895], + [2.715625524520874, -9.473000526428223], + [0.021215729415416718, 12.153593063354492], + [5.092519283294678, 6.509675979614258], + [2.9043643474578857, -4.816161155700684], + [-2.4919841289520264, -5.12000036239624], + [-0.2559315860271454, -1.8844751119613647], + [10.549695014953613, -2.5246410369873047], + [-0.13895195722579956, -0.06973262131214142], + [-2.306023359298706, 2.211956739425659], + [5.713954448699951, 7.645303726196289], + [-2.750392436981201, -5.343622207641602], + [-3.7081034183502197, 5.805006980895996], + [-0.41162043809890747, -2.1728250980377197], + [2.019808530807495, 5.810433387756348], + [3.764723062515259, 1.1678415536880493], + [6.058674335479736, -1.1314014196395874], + [-0.02819950133562088, 9.741644859313965], + [0.844971776008606, -0.6454144716262817], + [3.119882822036743, -6.050042152404785], + [2.075377941131592, -8.097126007080078], + [8.920437812805176, -2.373194456100464], + [0.37230730056762695, 11.96044921875], + [-2.0998408794403076, 2.6123037338256836], + [3.2000200748443604, 0.10225403308868408], + [3.2367045879364014, -2.895070791244507], + [1.5936009883880615, -2.247649908065796], + [-4.181839466094971, 4.330104827880859], + [-0.4588269889354706, 1.1143254041671753], + [7.546470642089844, -2.4497334957122803], + [0.5852487087249756, -2.342836856842041], + [1.0413172245025635, -0.7184873819351196], + [7.927283763885498, 9.507662773132324], + [0.5864651203155518, -1.0315444469451904], + [5.333433151245117, -3.8790276050567627], + [0.1441408395767212, -1.4066418409347534], + [3.126544713973999, -6.9457106590271], + [1.8938279151916504, 1.239333987236023], + [2.375218629837036, 3.749127149581909], + [-7.5822224617004395, 0.5608910322189331], + [5.992469310760498, 7.866462707519531], + [6.609594345092773, 8.029975891113281], + [-2.1891062259674072, 2.3456387519836426], + [-2.8703815937042236, -2.3464112281799316], + [0.10386889427900314, 9.9727783203125], + [-2.94521164894104, 2.6999330520629883], + [-3.4123218059539795, -2.383894920349121], + [0.5353769063949585, -1.1167696714401245], + [-1.9065160751342773, -3.7092597484588623], + [3.783989667892456, -3.4303319454193115], + [-2.012852191925049, 2.145658016204834], + [-6.465286731719971, 6.567058086395264], + [7.2717509269714355, 8.845001220703125], + [-5.163741588592529, 3.3460757732391357], + [8.285326957702637, -2.2209084033966064], + [5.185986042022705, 6.498444557189941], + [-1.864532709121704, -3.145792245864868], + [2.8514182567596436, -8.810312271118164], + [-2.8283369541168213, -0.5598992705345154], + [2.9141647815704346, -8.982711791992188], + [2.9083051681518555, -2.82062029838562], + [-4.637632846832275, -6.858992099761963], + [-0.15393632650375366, 14.153882026672363], + [-5.181502342224121, -0.7738389372825623], + [-4.721700668334961, 5.92831563949585], + [0.8070212006568909, -0.7852931618690491], + [-4.594380855560303, 7.490748405456543], + [3.251164674758911, -8.059853553771973], + [0.0225178524851799, 11.93369197845459], + [-5.479351043701172, 3.34543514251709], + [0.08061879128217697, 12.366510391235352], + [-5.823406219482422, -0.3696502447128296], + [-4.471396446228027, 5.476531982421875], + [1.38801109790802, -6.770824432373047], + [10.350895881652832, -2.3670196533203125], + [7.537454605102539, -2.645904064178467], + [2.9677672386169434, -4.183821201324463], + [1.6051143407821655, 2.4202330112457275], + [-3.462139368057251, -1.9968639612197876], + [3.7688472270965576, 6.974002361297607], + [1.1802783012390137, -6.660337448120117], + [2.949573278427124, -3.6502559185028076], + [-2.34991717338562, 2.549642562866211], + [3.379002332687378, -7.802083969116211], + [6.281161785125732, 7.584111213684082], + [0.5635769963264465, 0.6532992124557495], + [2.4627416133880615, 2.486534357070923], + [3.7978525161743164, 1.495322585105896], + [0.03462063521146774, 11.990726470947266], + [-0.6544170379638672, -4.342484474182129], + [2.415756940841675, -7.136818885803223], + [8.303925514221191, -2.304678440093994], + [3.8277902603149414, 1.599570631980896], + [-2.260910987854004, -0.22256255149841309], + [-2.006970167160034, 2.5098540782928467], + [1.9688127040863037, 4.82609748840332], + [6.354335308074951, 8.001510620117188], + [3.3966224193573, -5.285219669342041], + [-3.3939037322998047, 3.5389387607574463], + [-4.236335277557373, -5.450887203216553], + [1.5924643278121948, 5.050929069519043], + [2.2878358364105225, -3.87434720993042], + [-5.5734782218933105, -0.9547989368438721], + [7.949310779571533, -2.1620588302612305], + [6.828301429748535, -2.8408424854278564], + [0.9303779006004333, 11.44051742553711], + [0.07571875303983688, -1.4394584894180298], + [7.4500555992126465, -5.358077049255371], + [-0.024026282131671906, 8.824320793151855], + [0.03677653521299362, 8.880216598510742], + [-4.483158588409424, 5.246494770050049], + [2.105048418045044, 9.447942733764648], + [6.1426310539245605, -1.313186526298523], + [-4.907938003540039, 6.003322601318359], + [-1.274005651473999, 1.568147897720337], + [2.340956926345825, 3.537614345550537], + [-2.542480230331421, 1.9314149618148804], + [-3.9617395401000977, -4.9700398445129395], + [-6.578535556793213, -0.019809845834970474], + [2.976672410964966, -4.113736629486084], + [9.381793022155762, -2.403620481491089], + [-0.9618731141090393, -2.6485424041748047], + [6.227043628692627, -3.844464063644409], + [-0.010941751301288605, 9.674560546875], + [2.443739414215088, 0.5345823764801025], + [-2.241546392440796, 2.203272581100464], + [0.0696912333369255, 11.87862491607666], + [2.0672214031219482, -4.99621057510376], + [-4.033785820007324, -4.833354473114014], + [7.77905797958374, -1.932027816772461], + [-4.180366039276123, -1.9826399087905884], + [7.714799404144287, -1.9941977262496948], + [-2.0388004779815674, -3.3013765811920166], + [-0.5120500326156616, 4.9832329750061035], + [0.25890517234802246, 11.056785583496094], + [3.6237080097198486, -3.4670941829681396], + [-4.249105930328369, 6.56707763671875], + [1.8622184991836548, 7.481842517852783], + [7.74608850479126, -2.244318962097168], + [-2.5600693225860596, 1.6994750499725342], + [4.886438846588135, -2.4077770709991455], + [-0.5981361269950867, -0.6855990290641785], + [3.518839120864868, 1.8158451318740845], + [6.200523853302002, -1.5406445264816284], + [0.0886756107211113, 12.46844482421875], + [2.928323984146118, -3.375617742538452], + [3.95918345451355, -3.2981884479522705], + [-3.231583595275879, 0.08042502403259277], + [-3.40346360206604, -5.0561676025390625], + [6.157101631164551, -4.950125217437744], + [4.616580486297607, 6.223622798919678], + [-4.8985114097595215, -7.495863914489746], + [-4.005650520324707, -1.5429526567459106], + [2.3037469387054443, -2.769801378250122], + [2.4254448413848877, 5.736176490783691], + [-0.012023456394672394, 12.543378829956055], + [2.437736749649048, 2.0455405712127686], + [1.6582376956939697, -0.5886838436126709], + [-0.014584966003894806, 12.787649154663086], + [3.652998208999634, 1.1889917850494385], + [-7.252601623535156, -1.722856879234314], + [2.0524747371673584, -8.3265380859375], + [2.9609105587005615, -4.1484479904174805], + [0.13567012548446655, 11.782495498657227], + [-2.3720510005950928, 5.523141860961914], + [5.10354471206665, -2.736725091934204], + [-2.1515183448791504, 0.048360105603933334], + [3.41457462310791, 1.2610114812850952], + [-6.164896488189697, 6.643190383911133], + [-2.213437795639038, 1.5322524309158325], + [2.8643200397491455, -8.040762901306152], + [0.29256850481033325, 10.667360305786133], + [5.45725679397583, -5.088205814361572], + [4.582253932952881, 6.066427230834961], + [4.439141750335693, -3.3288938999176025], + [2.6710739135742188, -8.089021682739258], + [2.969754934310913, -4.099332809448242], + [9.20580768585205, -2.322722911834717], + [2.1648499965667725, -8.520828247070312], + [-4.782474040985107, -7.507901191711426], + [9.551522254943848, -2.4550602436065674], + [-5.270178318023682, -3.846052885055542], + [3.274097442626953, -4.564138889312744], + [3.61738657951355, -7.3485517501831055], + [-4.695266246795654, 1.3594982624053955], + [1.520918846130371, -0.5939908027648926], + [8.099920272827148, -2.19283127784729], + [3.027449369430542, -4.194113731384277], + [7.873410701751709, -2.2202577590942383], + [5.869000434875488, 7.260663986206055], + [-0.8228248953819275, -1.8826364278793335], + [2.4750471115112305, -3.2987420558929443], + [-1.679634928703308, -4.323516845703125], + [-6.0195841789245605, -0.8794278502464294], + [6.3555588722229, -5.294086933135986], + [1.4151616096496582, 5.383548736572266], + [2.352933168411255, 5.710923194885254], + [-1.3533295392990112, 1.1748507022857666], + [-4.584389686584473, -3.5614750385284424], + [9.048973083496094, -2.3678038120269775], + [5.122180461883545, 6.967362880706787], + [-1.8876304626464844, -3.3748812675476074], + [-2.1374101638793945, -2.2794086933135986], + [2.1165339946746826, 7.26214075088501], + [-4.616546154022217, -6.790295600891113], + [-2.696195363998413, 2.124722719192505], + [3.7864203453063965, -3.3878116607666016], + [7.057253837585449, 8.539111137390137], + [6.823073387145996, -1.5143860578536987], + [8.363778114318848, -2.2861135005950928], + [-3.988936424255371, -6.258045673370361], + [-1.296260118484497, -1.9021793603897095], + [-4.827586650848389, -1.9913192987442017], + [1.690450668334961, -7.751233100891113], + [4.572920322418213, -3.94682240486145], + [0.014395885169506073, 12.15450668334961], + [3.580082654953003, -3.3521921634674072], + [4.762075901031494, 6.659193992614746], + [-4.592845439910889, -1.934548258781433], + [1.5098354816436768, 5.263016700744629], + [4.1920857429504395, -3.6400859355926514], + [5.635921955108643, -0.24580255150794983], + [-2.323925495147705, 2.131901741027832], + [3.850956916809082, -3.0861639976501465], + [-4.198841571807861, -6.551368713378906], + [1.2390903234481812, 6.120744705200195], + [1.9375531673431396, -6.238119125366211], + [5.196200370788574, -4.273867607116699], + [-1.3264142274856567, 1.3333089351654053], + [3.430572509765625, -7.881563663482666], + [5.397322654724121, -1.4910870790481567], + [-2.355823040008545, 1.113538146018982], + [-2.100841760635376, 0.503902792930603], + [3.140505075454712, -4.213226318359375], + [1.662125587463379, 3.35654616355896], + [6.650405406951904, 8.232728004455566], + [4.845397472381592, -4.149753093719482], + [-0.14206671714782715, -1.5749565362930298], + [-1.9816968441009521, 2.4041285514831543], + [2.692523717880249, 0.5176674127578735], + [2.6698482036590576, -2.4068214893341064], + [6.1201043128967285, -1.8923351764678955], + [6.772868633270264, -1.6433831453323364], + [3.00539231300354, 0.20942559838294983], + [-4.247196197509766, -6.659095764160156], + [-2.19685959815979, 2.471874475479126], + [-5.885781288146973, 6.698083877563477], + [0.20174282789230347, 10.439826965332031], + [2.092440128326416, 0.3516399562358856], + [1.956822156906128, -8.80733871459961], + [1.0548352003097534, -6.052053451538086], + [-4.109839916229248, -6.887232780456543], + [-5.46953821182251, 1.8039013147354126], + [-5.909929275512695, -0.27000176906585693], + [-4.824793338775635, 5.793952941894531], + [-0.21715211868286133, -0.9506085515022278], + [5.628143787384033, -2.0528104305267334], + [9.819411277770996, -2.576484441757202], + [-4.225884437561035, -5.275040626525879], + [1.414333701133728, 0.10767501592636108], + [2.6293389797210693, -8.597681045532227], + [-6.447638034820557, -0.3361775279045105], + [8.266251564025879, -2.243156909942627], + [-5.189150333404541, 7.15205717086792], + [-4.608518123626709, 7.3320183753967285], + [9.240884780883789, -2.3219316005706787], + [-1.4776328802108765, -2.0108890533447266], + [6.508668899536133, -1.5279923677444458], + [2.188619613647461, -8.82359504699707], + [9.201238632202148, -2.426204204559326], + [8.358614921569824, -2.279301404953003], + [0.14760708808898926, -3.906592845916748], + [3.0466883182525635, -4.2086029052734375], + [-2.6654374599456787, -3.199458360671997], + [2.772529363632202, -3.957395076751709], + [0.40793919563293457, -0.9258365035057068], + [-4.104213714599609, -5.6563520431518555], + [-0.2541617155075073, -1.302563190460205], + [-2.915451765060425, 1.3088579177856445], + [-4.523967266082764, -6.722349643707275], + [-4.067991256713867, -3.6435792446136475], + [-5.547269344329834, 5.989853382110596], + [-0.7134323716163635, -1.8487120866775513], + [5.58535623550415, 7.786466598510742], + [3.4056403636932373, -4.796896934509277], + [-0.9437291622161865, -3.357487440109253], + [-4.976772308349609, -2.832611322402954], + [2.370744466781616, 5.371762275695801], + [0.6788705587387085, 5.594736099243164], + [-3.558088541030884, -5.258603096008301], + [7.528019428253174, -2.6987884044647217], + [-5.861814975738525, 7.530792713165283], + [2.80290150642395, 6.253875732421875], + [3.734257698059082, -3.5309555530548096], + [3.979327440261841, -3.2485849857330322], + [3.617866277694702, -4.060140609741211], + [-2.4818713665008545, 1.4741544723510742], + [0.04085289686918259, 11.497709274291992], + [-3.059694528579712, 5.464012145996094], + [8.858855247497559, -2.3337433338165283], + [-5.640193462371826, -2.866229295730591], + [-0.07564110308885574, 13.395790100097656], + [4.285501003265381, -2.7529094219207764], + [-1.310694694519043, -3.7557973861694336], + [7.513203144073486, -2.058717966079712], + [9.686201095581055, -2.4874536991119385], + [-2.426023483276367, 2.1909124851226807], + [-4.336869716644287, -1.8014270067214966], + [-6.636118412017822, 7.599549293518066], + [-3.2719645500183105, -0.4787587523460388], + [3.3371469974517822, -6.583226203918457], + [8.305455207824707, -2.1794557571411133], + [4.166144847869873, -8.452972412109375], + [4.4485602378845215, -3.097766637802124], + [2.8272652626037598, -10.160253524780273], + [-4.347449779510498, 2.64719557762146], + [3.5507071018218994, -6.6395182609558105], + [6.8455891609191895, -2.041757822036743], + [-2.0429813861846924, 1.1995373964309692], + [3.073453903198242, 6.092439651489258], + [3.2717959880828857, -4.798708915710449], + [-3.9276480674743652, -6.269163131713867], + [0.07169228047132492, 11.234769821166992], + [6.078954219818115, 7.4549665451049805], + [8.703205108642578, -2.286147356033325], + [-5.539292812347412, -1.0461095571517944], + [-5.210849761962891, 5.725825786590576], + [2.0888595581054688, 0.26480820775032043], + [3.1722114086151123, -4.769099235534668], + [2.980968713760376, -4.0869855880737305], + [8.276860237121582, -2.1922991275787354], + [3.1699554920196533, -4.23099422454834], + [0.5448315143585205, 0.6953317523002625], + [-5.541203022003174, 2.1881866455078125], + [7.243185520172119, 8.66493034362793], + [0.1323816478252411, -1.6344577074050903], + [5.072677135467529, 6.394455909729004], + [-2.399212598800659, -3.4546494483947754], + [5.158203601837158, -3.6536660194396973], + [7.495258808135986, -2.209724187850952], + [-0.01863200217485428, 11.520356178283691], + [-2.7281839847564697, 2.27697491645813], + [0.034415535628795624, 11.880680084228516], + [2.9031479358673096, -4.819897174835205], + [6.250072002410889, -3.0702602863311768], + [7.564938068389893, -2.3422915935516357], + [-4.9749369621276855, 5.451356410980225], + [2.3638579845428467, -6.577183723449707], + [-2.658109426498413, 0.2180275321006775], + [-2.6055777072906494, 2.0514001846313477], + [-5.788142681121826, 1.5056648254394531], + [5.444577217102051, -5.500568389892578], + [1.0155855417251587, -0.701539933681488], + [0.5104486346244812, 6.444372177124023], + [1.9659414291381836, -5.751520156860352], + [-0.03291589766740799, 12.729707717895508], + [2.5379021167755127, 6.217250347137451], + [1.6211994886398315, 1.8234262466430664], + [-4.647362232208252, -2.178645133972168], + [3.468498468399048, 0.6943330764770508], + [-4.030237197875977, 3.624912977218628], + [0.5650065541267395, -1.0837897062301636], + [-5.111046314239502, 5.652111053466797], + [0.20400583744049072, 11.838129043579102], + [-2.327322483062744, 6.065491199493408], + [-4.491744518280029, -6.581921577453613], + [0.07237499207258224, 9.69570255279541], + [6.627542972564697, -2.7206084728240967], + [0.2681812644004822, 10.926265716552734], + [-4.936988353729248, 7.429779052734375], + [3.061082124710083, 1.2511276006698608], + [9.397723197937012, -2.304246664047241], + [-4.22199821472168, 3.8844845294952393], + [-3.0463852882385254, -3.0414068698883057], + [0.1950497031211853, 11.41187858581543], + [-1.777684211730957, 1.3876924514770508], + [7.102234363555908, 8.817913055419922], + [1.6239681243896484, -5.673403263092041], + [-0.311210036277771, -1.0338693857192993], + [5.824470043182373, -0.4214550256729126], + [8.044361114501953, -2.296504020690918], + [-4.563173294067383, -5.180239677429199], + [8.423378944396973, -2.3981049060821533], + [3.3985536098480225, 6.569520950317383], + [0.09048502892255783, 9.738418579101562], + [-2.495551586151123, 1.4844697713851929], + [-0.6366780400276184, 0.2906081974506378], + [-2.2875595092773438, -3.1355702877044678], + [6.46314001083374, -0.7722508907318115], + [-2.1330647468566895, 2.3950252532958984], + [-2.6370270252227783, 1.776956558227539], + [8.357757568359375, -2.441494941711426], + [-2.54844331741333, -4.592018127441406], + [-5.090352535247803, -2.956523895263672], + [0.5276607871055603, -0.37082982063293457], + [6.343362331390381, -3.029381513595581], + [2.2070093154907227, 2.3867502212524414], + [3.817861318588257, 5.735595703125], + [9.054381370544434, -2.409451723098755], + [-2.5977885723114014, 2.9414267539978027], + [6.770166873931885, -5.202020645141602], + [3.4135448932647705, -7.369891166687012], + [2.896716833114624, 6.517087936401367], + [-3.8716909885406494, 7.320075035095215], + [3.8528213500976562, 6.873208999633789], + [-3.1027228832244873, -3.3850948810577393], + [0.9998837113380432, -0.5710300207138062], + [8.545378684997559, -2.3997585773468018], + [3.042856454849243, -2.1418373584747314], + [8.760693550109863, -2.252067804336548], + [3.273503065109253, -2.768181085586548], + [-7.940598964691162, 0.6879626512527466], + [4.135722637176514, 1.687637448310852], + [-3.559748411178589, -2.5676772594451904], + [-0.9971224069595337, -2.2577531337738037], + [2.213841438293457, 2.514111280441284], + [3.4612011909484863, -3.674484968185425], + [2.796875238418579, -9.415369033813477], + [-1.973591685295105, 2.425579071044922], + [1.8496218919754028, 1.68509840965271], + [0.014746956527233124, -1.2797718048095703], + [-0.22353357076644897, 11.311528205871582], + [-3.9875662326812744, -2.0294857025146484], + [0.013690046966075897, 9.469955444335938], + [4.235899448394775, -2.047731399536133], + [5.51110315322876, -0.14726054668426514], + [-4.108726978302002, -2.185359239578247], + [9.110979080200195, -2.351393461227417], + [-3.5657355785369873, 5.571369171142578], + [4.861580848693848, -4.188102722167969], + [-6.176913738250732, 0.5004070997238159], + [4.354489803314209, 1.9669424295425415], + [-5.709216594696045, 4.52587890625], + [3.616802453994751, -9.157504081726074], + [1.1910350322723389, -4.700018882751465], + [2.087064504623413, -7.548252105712891], + [2.438033103942871, -5.250421047210693], + [1.3849091529846191, -0.5569460988044739], + [1.9659175872802734, 1.9308568239212036], + [0.005813293159008026, 9.27540397644043], + [-1.56679105758667, -4.899845600128174], + [6.821814060211182, -5.8901214599609375], + [-2.7932868003845215, -5.034664154052734], + [0.1696714162826538, 11.872125625610352], + [6.638449192047119, 8.430211067199707], + [0.23443859815597534, 10.875164031982422], + [-4.818307876586914, 6.477523326873779], + [1.1655831336975098, 6.349023818969727], + [0.8476643562316895, 0.06615915894508362], + [-0.01853228360414505, 12.145034790039062], + [3.1044762134552, -7.672987937927246], + [3.7230148315429688, -3.200300455093384], + [0.015248946845531464, 12.859333038330078], + [3.5845324993133545, 1.5008370876312256], + [3.0835225582122803, -4.5881667137146], + [-5.176478385925293, 6.694569110870361], + [0.9511078000068665, -0.5078550577163696], + [-3.3006200790405273, -0.7368796467781067], + [7.316061973571777, -1.8543261289596558], + [3.1796882152557373, -4.078001022338867], + [0.5261825919151306, -5.6912078857421875], + [2.616299867630005, -9.546239852905273], + [-5.788989543914795, -1.4365034103393555], + [6.323818206787109, -1.7047768831253052], + [2.9343557357788086, -7.707101821899414], + [-2.371872901916504, -0.8331055045127869], + [2.444761037826538, 4.128571510314941], + [7.184988498687744, -2.5038883686065674], + [3.2678401470184326, -2.736128807067871], + [8.033829689025879, -2.915238618850708], + [8.819138526916504, -2.2669193744659424], + [-1.9713222980499268, 1.776779055595398], + [-4.614787578582764, -6.495466232299805], + [-5.340118885040283, -3.5857760906219482], + [3.5044925212860107, -5.587621688842773], + [0.0325082466006279, 0.6731935739517212], + [3.5735015869140625, -6.517565727233887], + [5.978534698486328, -1.5345698595046997], + [2.2756924629211426, 3.5682270526885986], + [1.1228255033493042, 1.83519446849823], + [2.176481246948242, -8.640398025512695], + [8.578741073608398, -2.3783955574035645], + [-1.8132705688476562, 1.543273687362671], + [3.0619709491729736, -4.3337082862854], + [-0.028932280838489532, 12.199834823608398], + [-4.141504287719727, -6.563935279846191], + [3.1316111087799072, -4.4201250076293945], + [-6.391894817352295, 6.461008071899414], + [-2.1371138095855713, 2.3065078258514404], + [9.546317100524902, -2.4121925830841064], + [6.9521307945251465, 8.368638038635254], + [-3.236297369003296, -2.983569860458374], + [-2.0823957920074463, 2.4787471294403076], + [3.67779803276062, -3.3459408283233643], + [2.790224313735962, -8.493680953979492], + [6.720772743225098, -1.6457387208938599], + [-4.023687839508057, 7.292327404022217], + [0.24011993408203125, 11.088096618652344], + [2.2955586910247803, 1.7212578058242798], + [-0.23717457056045532, 9.218013763427734], + [-2.6754469871520996, 2.104948043823242], + [4.498776912689209, 1.9812229871749878], + [2.2637040615081787, -8.020084381103516], + [-7.205593109130859, 8.19991683959961], + [7.194820404052734, -2.0538220405578613], + [1.7492048740386963, 5.291343688964844], + [8.080113410949707, -2.2931838035583496], + [-5.047339916229248, -3.0571417808532715], + [0.09737008064985275, 10.002727508544922], + [-6.789818286895752, 7.8966827392578125], + [10.093847274780273, -2.4597747325897217], + [-3.2341206073760986, -5.031879425048828], + [2.2641239166259766, -3.241821050643921], + [-6.4971442222595215, -2.507965326309204], + [-5.6280741691589355, -2.1361467838287354], + [1.1411471366882324, -5.682986259460449], + [5.457424640655518, 7.499258041381836], + [7.985456943511963, -2.183654308319092], + [-2.389221429824829, 0.025881346315145493], + [9.863088607788086, -2.37753963470459], + [5.409933090209961, 8.059488296508789], + [5.339083194732666, 7.664533615112305], + [-0.04981566220521927, 9.800539016723633], + [4.3269782066345215, -3.2001214027404785], + [5.832981109619141, -1.5851095914840698], + [-4.698362350463867, -2.1663413047790527], + [-4.265629291534424, -5.121067047119141], + [-5.643224239349365, 6.811941146850586], + [-5.577755451202393, -1.3535019159317017], + [2.8161582946777344, -3.27075457572937], + [-3.3359673023223877, -3.3441689014434814], + [-3.93715500831604, -2.267287254333496], + [5.611330986022949, 7.299548625946045], + [1.9182095527648926, -4.364571571350098], + [0.6395716667175293, -5.889456748962402], + [-2.317100763320923, -4.299306392669678], + [0.015616379678249359, 1.050784945487976], + [1.6497905254364014, -6.421919345855713], + [4.987738132476807, 6.618899345397949], + [5.380321025848389, 7.120569229125977], + [5.339871406555176, -1.450642466545105], + [-5.1260552406311035, -3.297163486480713], + [-2.4358201026916504, 3.318869113922119], + [-6.840534687042236, 8.042060852050781], + [0.2776188254356384, 10.973631858825684], + [-2.7560925483703613, 5.325681686401367], + [-5.820700168609619, 4.968631744384766], + [-2.3569092750549316, 2.1326024532318115], + [-1.1478019952774048, -4.00933313369751], + [6.075537204742432, 7.7331085205078125], + [-2.2108075618743896, 2.7695555686950684], + [2.58035945892334, -8.576584815979004], + [-0.03193957358598709, 9.377656936645508], + [-7.212037563323975, 2.474442720413208], + [3.1096534729003906, -4.370908260345459], + [2.533033609390259, 0.578911304473877], + [1.1633920669555664, 5.0920023918151855], + [-3.195251226425171, -0.5816236734390259], + [5.8867621421813965, -3.3284413814544678], + [-5.868990421295166, 6.692285537719727], + [-2.998685598373413, -3.2724225521087646], + [-2.1340672969818115, 2.6101467609405518], + [9.492393493652344, -2.4615638256073], + [8.79807186126709, -2.6732747554779053], + [2.179677724838257, -7.581618785858154], + [4.346617221832275, 7.035179138183594], + [3.7754204273223877, -6.883164405822754], + [3.542124032974243, -3.1996428966522217], + [-0.01798505336046219, 9.716072082519531], + [8.981281280517578, -2.275925874710083], + [1.9029327630996704, 0.21526989340782166], + [-1.589404821395874, -1.4321492910385132], + [-7.224488258361816, 8.455892562866211], + [0.06554686278104782, 9.450263977050781], + [-0.8300955295562744, 1.2925434112548828], + [-2.037334442138672, 0.10059899091720581], + [-4.626753330230713, -1.1345840692520142], + [-2.401818037033081, 2.216007709503174], + [-6.986140727996826, 8.007288932800293], + [5.849815845489502, -5.3130106925964355], + [-4.785221576690674, -4.497036457061768], + [3.838102340698242, -3.65537166595459], + [4.267777442932129, -3.612462043762207], + [-4.374454021453857, -6.742330551147461], + [-4.546840190887451, 4.297467231750488], + [2.601750373840332, 1.543547511100769], + [-5.553850173950195, -2.908797264099121], + [0.5332829356193542, 0.8431824445724487], + [-4.366760730743408, -0.8045786023139954], + [5.821450233459473, -0.37622421979904175], + [-3.7079365253448486, -3.566999673843384], + [-5.114027500152588, 1.4784523248672485], + [2.3988800048828125, -3.5532991886138916], + [-3.6036572456359863, 6.22114896774292], + [0.03745716065168381, 12.60345458984375], + [-6.739618301391602, 7.4277448654174805], + [6.15383768081665, -1.3115772008895874], + [-0.07354594022035599, 9.779947280883789], + [-4.560838222503662, -6.789057731628418], + [0.2507091164588928, 11.284998893737793], + [-6.674622535705566, 7.1665802001953125], + [-2.022172689437866, -4.285623550415039], + [-1.2311081886291504, 0.6344325542449951], + [2.5714457035064697, 5.574118614196777], + [-4.82284688949585, -7.102727890014648], + [0.24425500631332397, 11.661221504211426], + [0.019613318145275116, 11.963358879089355], + [0.5999665856361389, 11.459041595458984], + [9.234539985656738, -2.3605399131774902], + [5.070840358734131, 7.198276519775391], + [6.2536845207214355, -2.828557252883911], + [2.6361358165740967, -2.5123822689056396], + [4.1382737159729, 1.7321767807006836], + [1.104825735092163, -0.6735002398490906], + [-4.492339611053467, -0.3086118698120117], + [-3.089508533477783, -3.9193837642669678], + [10.092445373535156, -2.4078257083892822], + [-2.0522170066833496, 0.04289704188704491], + [-4.519198894500732, -1.823583960533142], + [-6.979166507720947, 8.324930191040039], + [8.561800956726074, -2.4650871753692627], + [-2.411217212677002, -2.1504757404327393], + [-2.557770013809204, -1.9079481363296509], + [1.4726109504699707, -7.221121311187744], + [1.8865220546722412, 4.178143501281738], + [6.564926624298096, -5.302613735198975], + [-4.231159687042236, -6.02543830871582], + [1.795924425125122, 5.320700645446777], + [2.6314034461975098, -3.83433198928833], + [2.2281508445739746, 1.7460793256759644], + [-5.600701808929443, -3.03973650932312], + [-4.492539405822754, -2.60522723197937], + [-6.878123760223389, -0.20995962619781494], + [-3.595186948776245, -6.059847831726074], + [-2.9812519550323486, -4.622966289520264], + [0.4070971608161926, 11.051794052124023], + [-4.536600589752197, 4.901762962341309], + [3.6468005180358887, -6.360355377197266], + [-3.4166903495788574, 6.6786580085754395], + [-1.5319842100143433, 0.019016530364751816], + [0.2771960496902466, 11.30168628692627], + [-4.588804721832275, 4.015564918518066], + [2.742408275604248, 3.359408140182495], + [2.4407880306243896, 5.929142475128174], + [-2.2002623081207275, 2.192857265472412], + [2.6457359790802, -2.406872034072876], + [2.7990574836730957, -3.7069854736328125], + [-7.543560981750488, -0.17947912216186523], + [0.20333945751190186, 10.816089630126953], + [2.8072116374969482, -3.8948636054992676], + [-1.8296654224395752, 2.106869697570801], + [-4.605356693267822, 8.873525619506836], + [3.1278092861175537, -7.5718231201171875], + [8.282034873962402, -2.2441153526306152], + [2.931868553161621, -2.922675609588623], + [0.15376096963882446, 9.73354721069336], + [2.1334660053253174, 3.591449022293091], + [-2.1485342979431152, 2.679626941680908], + [3.3463711738586426, -4.490861892700195], + [8.115490913391113, -2.4878032207489014], + [-6.279581546783447, 6.350995063781738], + [0.21766990423202515, 10.828514099121094], + [2.3666951656341553, 3.5452206134796143], + [1.594810962677002, 0.21299278736114502], + [-5.083378314971924, -1.3228142261505127], + [2.9114606380462646, 5.6614813804626465], + [-2.5311362743377686, 2.2342846393585205], + [0.09063857048749924, 10.218820571899414], + [5.655932426452637, -1.7437127828598022], + [2.403050661087036, -8.957650184631348], + [-3.708127737045288, -2.127209424972534], + [5.614266395568848, -2.7373626232147217], + [6.554781436920166, -1.501502275466919], + [-4.435554504394531, 5.00597620010376], + [0.1411377191543579, 9.807523727416992], + [-5.4569196701049805, 3.9371144771575928], + [-3.821009397506714, -6.42930793762207], + [9.295148849487305, -2.3154284954071045], + [2.9859864711761475, 1.9725672006607056], + [3.7007250785827637, -8.469602584838867], + [3.259002923965454, -8.552637100219727], + [-2.078427314758301, 2.635385274887085], + [-4.620663642883301, 4.831801414489746], + [8.328963279724121, -2.2360403537750244], + [5.70692777633667, 7.264082908630371], + [1.5506150722503662, 1.7939002513885498], + [-2.059008836746216, 2.290698528289795], + [-6.897634029388428, 8.05538558959961], + [4.10835599899292, 2.0342652797698975], + [-4.80864953994751, -3.0672075748443604], + [-5.748119831085205, 6.574596405029297], + [-4.944950103759766, -2.9960100650787354], + [0.1882878541946411, 11.81890869140625], + [-4.701240062713623, -6.8433356285095215], + [1.2576266527175903, 1.6412262916564941], + [-2.168921709060669, 2.5351293087005615], + [0.09158354252576828, 9.679922103881836], + [-0.8574526309967041, -0.5681725740432739], + [7.171820640563965, 8.605759620666504], + [10.046467781066895, -2.467395067214966], + [8.894972801208496, -2.426266670227051], + [0.12133102864027023, 9.6937837600708], + [-2.515964984893799, 1.7580275535583496], + [-2.5828049182891846, -3.097376823425293], + [-3.9392502307891846, 6.046328544616699], + [-3.7570598125457764, 4.6755595207214355], + [4.221002101898193, 0.9634217023849487], + [-2.113828420639038, -3.4501702785491943], + [-5.88877534866333, 0.9907864332199097], + [-2.623600482940674, 2.2650563716888428], + [5.897253513336182, -1.266663908958435], + [-3.108445882797241, 3.0705511569976807], + [10.517118453979492, -2.4186508655548096], + [-6.970335006713867, 7.9818267822265625], + [-0.2029595822095871, -1.8258895874023438], + [0.19973036646842957, -3.9749791622161865], + [3.6078317165374756, -8.120098114013672], + [0.02590971440076828, 9.964994430541992], + [-3.8692305088043213, -2.577108860015869], + [-3.4177587032318115, 3.313593626022339], + [0.37446439266204834, -4.788064002990723], + [-4.376898765563965, -6.906501770019531], + [-5.446954250335693, -1.4967087507247925], + [3.5046274662017822, -2.4310128688812256], + [3.48771595954895, -8.489310264587402], + [1.7927961349487305, 4.64871883392334], + [-2.5184473991394043, 1.4449458122253418], + [-0.8489516377449036, -0.8031891584396362], + [3.0484988689422607, -10.079092979431152], + [0.1255008578300476, 9.634187698364258], + [-1.5458338260650635, 1.9607220888137817], + [2.738729476928711, 4.450894832611084], + [3.356281042098999, -5.157077312469482], + [2.02297043800354, 3.852337121963501], + [-3.688549757003784, 5.960519790649414], + [4.836636066436768, -0.5983147621154785], + [5.075082778930664, -0.9209325313568115], + [2.630418300628662, -4.956710338592529], + [2.201796770095825, -7.579763889312744], + [2.6101014614105225, 4.2076873779296875], + [-4.2871413230896, -6.027924537658691], + [3.4798696041107178, -2.3501675128936768], + [-6.445926189422607, 7.521886825561523], + [-1.50059175491333, 1.9506415128707886], + [-2.1527516841888428, -0.8721849918365479], + [-1.0216351747512817, -0.4650596082210541], + [3.5148231983184814, 1.3564435243606567], + [-4.868227481842041, 6.20608377456665], + [-2.5195744037628174, -3.508453845977783], + [3.1259772777557373, -3.3465044498443604], + [-2.5005075931549072, 0.1521511673927307], + [-4.943792819976807, 5.588932991027832], + [-4.602963924407959, 5.387887477874756], + [2.21006178855896, -8.733804702758789], + [4.165524482727051, 1.8069950342178345], + [-4.46116304397583, -1.4541183710098267], + [-0.38235968351364136, -1.611798882484436], + [2.046969175338745, 2.078031301498413], + [3.7591075897216797, -4.1801605224609375], + [-2.6751742362976074, 1.2610918283462524], + [-4.698072910308838, -6.972984790802002], + [-3.973010301589966, -4.902411460876465], + [6.515854358673096, 8.185748100280762], + [1.8582673072814941, 5.726160049438477], + [-6.596185207366943, 5.423452377319336], + [-0.036957092583179474, 13.818052291870117], + [2.5595102310180664, -1.129611849784851], + [0.0743858739733696, 9.627479553222656], + [5.566221714019775, -2.329387664794922], + [1.460182547569275, -7.451877593994141], + [8.031096458435059, -2.212986946105957], + [-3.0940184593200684, -2.4213783740997314], + [-2.888329267501831, 0.7495051026344299], + [8.26525592803955, -2.299802303314209], + [3.034618854522705, 1.3338128328323364], + [4.380450248718262, 1.9281514883041382], + [3.9722635746002197, -5.842257499694824], + [8.04916000366211, -2.258913993835449], + [6.967455863952637, 8.477041244506836], + [10.220158576965332, -2.4607536792755127], + [2.658743143081665, 1.7485507726669312], + [-6.02223014831543, 7.321139335632324], + [-0.06313670426607132, 12.45751953125], + [2.4983408451080322, -4.130672931671143], + [-3.3193070888519287, -4.785185813903809], + [-3.867419481277466, -5.572107315063477], + [0.38581618666648865, -2.105062246322632], + [2.2046449184417725, 0.9186989665031433], + [6.317239761352539, 8.59733772277832], + [7.683372974395752, -2.4220168590545654], + [4.4712347984313965, -8.405458450317383], + [-2.196213483810425, 2.6751482486724854], + [-0.6508463621139526, -2.473484754562378], + [5.165757179260254, -3.3729360103607178], + [3.1216928958892822, -6.201224327087402], + [1.7699698209762573, 1.083165168762207], + [-2.225959062576294, 2.3165977001190186], + [7.8098578453063965, -2.2558586597442627], + [9.057881355285645, -2.4056501388549805], + [3.547250986099243, 2.033477783203125], + [7.266750812530518, 8.808573722839355], + [0.03527050465345383, 12.20733642578125], + [-2.087773323059082, 2.5589404106140137], + [2.385241746902466, -8.256271362304688], + [0.07288210839033127, 11.616485595703125], + [8.949036598205566, -2.4496257305145264], + [-4.0944037437438965, -3.575453042984009], + [4.771526336669922, -3.409235715866089], + [2.6969316005706787, -3.803591728210449], + [0.055994145572185516, 12.429279327392578], + [2.6331875324249268, -8.875991821289062], + [3.6792266368865967, -3.4606049060821533], + [-0.7592229247093201, 1.8421915769577026], + [1.994811773300171, -8.41633415222168], + [-2.4523372650146484, 1.3577975034713745], + [-2.131829261779785, 2.69378399848938], + [1.6455373764038086, -6.552302837371826], + [10.695343017578125, -2.452047109603882], + [-2.0577151775360107, 2.4451892375946045], + [-2.130622386932373, 2.556748867034912], + [7.95215368270874, -2.0958173274993896], + [-2.6166043281555176, -4.925090312957764], + [-2.291011095046997, 2.182358503341675], + [-4.740835666656494, -7.131309509277344], + [9.061781883239746, -2.412611961364746], + [-0.9476506114006042, -2.856943130493164], + [-6.721521854400635, 8.102731704711914], + [-4.847353458404541, -6.898138999938965], + [-0.14664849638938904, -1.624959111213684], + [1.5064221620559692, 0.2256297767162323], + [-5.296009540557861, -1.0090057849884033], + [2.416760206222534, 1.179237961769104], + [-3.724191427230835, -2.447042226791382], + [-2.3691680431365967, 2.1448919773101807], + [-5.293850421905518, -0.6509158611297607], + [-2.883359670639038, 3.1163909435272217], + [2.2192630767822266, 5.775197505950928], + [-6.901556968688965, 0.38273441791534424], + [-0.48063063621520996, 9.741376876831055], + [1.2606807947158813, -6.288806438446045], + [-0.034549780189991, 9.45172119140625], + [1.5830739736557007, 3.9755618572235107], + [-2.487102746963501, 2.2196993827819824], + [-7.200922966003418, 8.476375579833984], + [-5.633332252502441, 4.4584150314331055], + [2.998596668243408, -4.182243347167969], + [-4.320043563842773, -6.388424873352051], + [0.31545597314834595, 11.354355812072754], + [2.9739744663238525, 1.480108618736267], + [-0.011569328606128693, 12.653213500976562], + [5.9720234870910645, -1.6967231035232544], + [-4.706990718841553, 5.8909478187561035], + [2.4364025592803955, -0.034469667822122574], + [5.682406425476074, -2.1314587593078613], + [-2.359280824661255, 1.5985419750213623], + [-4.6473870277404785, 5.103501319885254], + [-2.5545475482940674, -2.605766534805298], + [6.1706976890563965, 8.054040908813477], + [-6.4851861000061035, 7.934867858886719], + [-3.8453896045684814, -6.028143882751465], + [3.7859671115875244, -3.6585583686828613], + [-2.615532159805298, 1.093360424041748], + [-5.837007999420166, 6.369524955749512], + [-1.2291600704193115, 0.25913354754447937], + [2.948612928390503, 3.1226887702941895], + [8.159207344055176, -2.482417583465576], + [-0.1429785043001175, -1.104071021080017], + [5.3514933586120605, 7.196201324462891], + [1.705241322517395, -7.171914100646973], + [-0.1999799609184265, -1.4305073022842407], + [1.4120056629180908, 1.2746330499649048], + [7.171231269836426, -2.429932117462158], + [-3.1356124877929688, 1.9023363590240479], + [-4.383562088012695, -6.423239707946777], + [7.275078296661377, 8.786911010742188], + [2.1097583770751953, -6.158987998962402], + [-2.9866926670074463, -3.747112274169922], + [6.135714054107666, -3.163144826889038], + [8.334211349487305, -2.3048653602600098], + [7.349815845489502, -2.119086265563965], + [1.7206470966339111, 0.15298469364643097], + [2.7533457279205322, -3.9092843532562256], + [-7.174143314361572, 2.6001338958740234], + [0.43417948484420776, 0.615281879901886], + [-3.136831521987915, 3.3421237468719482], + [3.9571378231048584, 1.5418148040771484], + [3.082742929458618, -4.3132500648498535], + [2.4924826622009277, -4.837897300720215], + [-1.0497689247131348, 10.470258712768555], + [-3.4884536266326904, -2.8642752170562744], + [-2.290996789932251, 2.291410207748413], + [-2.1463656425476074, 6.651963710784912], + [4.266749858856201, -4.366667747497559], + [8.099502563476562, 9.4747314453125], + [3.501091957092285, 1.7994037866592407], + [7.992730617523193, -2.2127983570098877], + [2.4837253093719482, 2.1552484035491943], + [-5.257603168487549, -0.9235973358154297], + [-4.919210910797119, -7.247790336608887], + [0.5623759031295776, -3.155012607574463], + [0.009102635085582733, 12.186409950256348], + [-2.2617344856262207, 2.5996341705322266], + [0.2078571915626526, 10.79475212097168], + [-4.672030925750732, 6.445315837860107], + [2.3217852115631104, 0.6537103056907654], + [-1.0285321474075317, 6.274654388427734], + [3.600918769836426, -1.7687324285507202], + [1.8216599225997925, -7.468562602996826], + [3.6016695499420166, 1.1471909284591675], + [1.9455645084381104, 3.885321617126465], + [-5.842782497406006, 6.230628967285156], + [5.855041980743408, -1.2267478704452515], + [1.2469079494476318, -7.028358459472656], + [1.324259877204895, 5.966482639312744], + [1.1512391567230225, -6.77257776260376], + [-3.755833387374878, -3.0529329776763916], + [-4.337667942047119, 6.956424713134766], + [1.847147822380066, -0.0421651192009449], + [3.9751760959625244, -4.928893089294434], + [-0.8432534337043762, 1.3905004262924194], + [-4.624508380889893, -6.569883346557617], + [-5.578739643096924, -1.2750955820083618], + [-3.9025886058807373, -5.737117290496826], + [7.3482794761657715, -2.222273111343384], + [-3.5983707904815674, 6.070602893829346], + [2.5956380367279053, -7.234430313110352], + [7.659019947052002, -3.252938985824585], + [-0.5568788051605225, -2.1750338077545166], + [2.7164196968078613, -3.476224184036255], + [1.3884376287460327, -6.842176914215088], + [1.2740075588226318, -5.353883743286133], + [-4.674997329711914, -5.8573198318481445], + [6.717412948608398, -1.3570681810379028], + [-1.480437994003296, 1.7345446348190308], + [3.576820135116577, -7.088398456573486], + [2.2414281368255615, -7.456636428833008], + [-0.1292952299118042, 9.365873336791992], + [-4.1926093101501465, -4.118273735046387], + [7.32328462600708, -1.9666188955307007], + [0.6000260710716248, 8.144415855407715], + [-6.003457546234131, -1.6999198198318481], + [2.4379539489746094, -8.44194221496582], + [4.77603816986084, 6.01711368560791], + [-0.37495487928390503, 1.6669152975082397], + [-2.719125747680664, -3.5467700958251953], + [6.447157382965088, 7.907319068908691], + [-3.5437824726104736, -5.491907596588135], + [-1.3327617645263672, 5.395334243774414], + [2.772923231124878, -2.5170962810516357], + [-1.7093216180801392, 2.4283347129821777], + [4.1089348793029785, -6.4247636795043945], + [0.20535051822662354, 10.42699146270752], + [6.211447238922119, 8.213703155517578], + [-0.8105503916740417, 1.4808299541473389], + [3.712222099304199, -5.151266098022461], + [-3.4361376762390137, -4.06267786026001], + [-1.4352071285247803, 1.6112581491470337], + [4.562160968780518, -1.9189163446426392], + [-0.04694724828004837, 12.754807472229004], + [-4.171144485473633, 5.207836151123047], + [2.567272901535034, 0.6537268161773682], + [9.246975898742676, -2.3219316005706787], + [-4.281844615936279, 4.69209623336792], + [-2.216230630874634, 2.108409881591797], + [0.8556277751922607, -0.6048367023468018], + [2.416600465774536, -9.196693420410156], + [-4.267702102661133, -6.376920700073242], + [-0.017163224518299103, 12.374554634094238], + [-4.307908535003662, -1.8151228427886963], + [3.057326555252075, -4.318586826324463], + [-2.152367115020752, 2.189643621444702], + [1.3634686470031738, 0.4603065252304077], + [-2.080101728439331, 2.449000120162964], + [-3.924238920211792, -2.9205849170684814], + [-2.3421308994293213, 2.381351947784424], + [-2.3362650871276855, 2.2676079273223877], + [-0.0435379222035408, 12.808401107788086], + [-4.0875163078308105, 4.294793128967285], + [0.00021748989820480347, 13.388422012329102], + [-0.004355020821094513, 12.451871871948242], + [1.9020106792449951, 3.7354462146759033], + [-0.03977174311876297, 8.998957633972168], + [-6.0088419914245605, 5.693614482879639], + [2.220014810562134, 2.7039599418640137], + [0.16087692975997925, 11.688359260559082], + [-5.20924711227417, 6.155026435852051], + [-3.000445604324341, -1.395204782485962], + [8.498758316040039, -2.4459664821624756], + [4.904125690460205, -1.6499249935150146], + [2.6637279987335205, -3.866501808166504], + [3.4729106426239014, -8.536872863769531], + [-4.161811828613281, -6.186990737915039], + [7.168222427368164, 8.797506332397461], + [3.6206979751586914, -7.257942199707031], + [-2.121628522872925, 2.4621808528900146], + [1.3613333702087402, 4.914227485656738], + [-5.225709915161133, 5.058442115783691], + [-4.3588361740112305, -1.512506127357483], + [-2.15344500541687, 2.406493663787842], + [0.650593101978302, -1.00078547000885], + [-2.045145034790039, 2.3892335891723633], + [7.535281181335449, -2.011538505554199], + [3.134019136428833, -4.434411525726318], + [-2.23022723197937, 2.1310997009277344], + [2.324409246444702, 1.070712685585022], + [-2.1609792709350586, -3.426628589630127], + [5.842602252960205, -2.456313371658325], + [6.2636637687683105, -2.630995273590088], + [-4.451993465423584, -6.557899475097656], + [-0.021512456238269806, 9.616010665893555], + [-6.047062397003174, 6.781943321228027], + [6.198998928070068, 7.766557216644287], + [-3.8001668453216553, -1.9959137439727783], + [1.7890841960906982, -8.061960220336914], + [-3.166982412338257, -4.808078289031982], + [-4.794857501983643, 3.7448842525482178], + [-2.294393539428711, 2.0471198558807373], + [5.835775852203369, -1.8970032930374146], + [0.3415617048740387, -1.9895440340042114], + [-1.1924811601638794, -3.975980520248413], + [7.905740261077881, -2.1774866580963135], + [2.3955886363983154, -5.264859199523926], + [6.354158401489258, -3.4205434322357178], + [1.5108898878097534, -6.983955383300781], + [7.748389720916748, -2.4346702098846436], + [0.042543940246105194, 12.559181213378906], + [0.29255789518356323, -1.3054906129837036], + [3.5548934936523438, -3.6353838443756104], + [1.7128865718841553, 4.220947265625], + [-4.168851375579834, 3.1911280155181885], + [-2.1082844734191895, 2.5591928958892822], + [-1.9578617811203003, 2.2160630226135254], + [-4.711406230926514, -5.732443809509277], + [9.515955924987793, -2.440605640411377], + [1.4826898574829102, -7.101712226867676], + [2.153994560241699, 1.33122980594635], + [9.405104637145996, -2.5712335109710693], + [-1.9054354429244995, -3.842674970626831], + [3.7193939685821533, -3.908935546875], + [3.071230173110962, 1.3480947017669678], + [-4.013852596282959, 4.209321022033691], + [2.0210306644439697, -7.906862258911133], + [3.148918390274048, -4.3236284255981445], + [4.473376274108887, 7.105035781860352], + [5.195559978485107, 7.800876140594482], + [0.1471150517463684, 11.019265174865723], + [-2.572511911392212, 1.85587477684021], + [-4.371819972991943, 3.6993777751922607], + [-0.002087540924549103, 9.952411651611328], + [-0.46480125188827515, 1.0410860776901245], + [2.6319634914398193, -9.416281700134277], + [7.128876209259033, -1.7570239305496216], + [-2.172468423843384, 2.5674891471862793], + [-1.9663841724395752, -3.2833595275878906], + [3.196497678756714, -2.8085458278656006], + [0.15704989433288574, 11.757393836975098], + [3.0814316272735596, -6.546142578125], + [2.4613852500915527, 6.0719451904296875], + [8.294248580932617, -2.2609453201293945], + [3.198267936706543, 1.2291405200958252], + [2.444544553756714, -7.817164421081543], + [-0.04371459037065506, 12.81232738494873], + [8.128315925598145, -2.353513479232788], + [0.6081580519676208, -5.494007110595703], + [3.0582220554351807, -3.611422061920166], + [-2.0459744930267334, -4.305519104003906], + [-6.302383899688721, -0.3945808410644531], + [7.558948516845703, -2.3552231788635254], + [4.849449157714844, -5.382607936859131], + [0.5464156270027161, 1.1330091953277588], + [0.15743744373321533, 9.914169311523438], + [6.795202732086182, -1.8831160068511963], + [3.8368735313415527, 0.8715802431106567], + [2.4611294269561768, -0.4944850206375122], + [-2.539668321609497, 5.357811450958252], + [8.678595542907715, -2.4546382427215576], + [2.4308221340179443, 5.313340663909912], + [-4.66473388671875, -7.090886116027832], + [3.163245677947998, 0.9482330083847046], + [1.6146374940872192, -7.813046932220459], + [5.1589765548706055, 7.254308223724365], + [-0.14003092050552368, 9.713462829589844], + [2.557354688644409, -6.710552215576172], + [2.916788339614868, -4.1057538986206055], + [-3.77522873878479, 6.556553840637207], + [-2.0333333015441895, -3.4860329627990723], + [6.519611358642578, -3.170474052429199], + [3.5148050785064697, -6.871355056762695], + [0.7996090054512024, -6.015355587005615], + [-2.5478837490081787, 2.246713161468506], + [-4.649938106536865, 0.9014179706573486], + [-5.377350330352783, 3.938326835632324], + [-2.7864062786102295, 2.9202778339385986], + [-2.562476634979248, 0.8655878305435181], + [-6.005394458770752, -2.0365657806396484], + [-4.050113201141357, -5.607648849487305], + [0.48281651735305786, -1.1593036651611328], + [4.468942165374756, -3.6432769298553467], + [0.006475262343883514, 11.60735034942627], + [0.45557576417922974, -4.546838760375977], + [2.6039741039276123, 0.25640931725502014], + [0.18832188844680786, 11.538484573364258], + [-0.20543015003204346, 9.548529624938965], + [-2.525475263595581, 1.7154443264007568], + [-2.347498655319214, -2.944575071334839], + [5.7019267082214355, 7.837602615356445], + [7.076249599456787, -1.8481475114822388], + [-0.11945158988237381, 14.009910583496094], + [4.2073283195495605, 7.153995513916016], + [3.1714398860931396, -6.172327995300293], + [9.267578125, -2.4950835704803467], + [-6.47353982925415, -0.09219074249267578], + [-0.17648839950561523, 9.841710090637207], + [5.009790897369385, 7.65462064743042], + [5.274446487426758, -0.0802159309387207], + [9.78134822845459, -2.3942277431488037], + [-1.2878857851028442, -2.0961005687713623], + [-2.534672737121582, 1.8917157649993896], + [0.19211190938949585, 10.504526138305664], + [-0.04862750321626663, 12.560325622558594], + [2.495330333709717, -6.25458288192749], + [-6.110362529754639, 5.869695663452148], + [-4.626273155212402, -6.224617004394531], + [6.634955883026123, -1.3554595708847046], + [0.24296844005584717, 11.144676208496094], + [10.122209548950195, -2.4426610469818115], + [-3.3136162757873535, -4.696854114532471], + [-4.142143726348877, -1.4165540933609009], + [3.2893362045288086, -6.138592720031738], + [2.978266477584839, -4.244405746459961], + [-4.655914783477783, -4.507605075836182], + [-2.1856377124786377, 2.3697850704193115], + [-7.35977029800415, 8.626632690429688], + [-3.8477623462677, -6.048273086547852], + [1.8146710395812988, -8.102178573608398], + [-2.879185914993286, 5.160039901733398], + [4.330930233001709, -2.0292181968688965], + [-2.7637839317321777, 2.033604145050049], + [-0.07601077109575272, 9.602190017700195], + [4.284936428070068, -2.687124490737915], + [-2.5510854721069336, 1.933862328529358], + [7.831801891326904, -2.046175718307495], + [3.9132583141326904, -3.16679048538208], + [-4.685565948486328, 0.14666879177093506], + [1.9388222694396973, 4.147125244140625], + [6.463582515716553, -1.707222819328308], + [4.6377692222595215, -0.5834999084472656], + [6.629416465759277, 8.147758483886719], + [3.653505802154541, -7.164213180541992], + [0.4803439974784851, 12.253761291503906], + [2.5021255016326904, -8.210615158081055], + [5.923574924468994, -3.178483724594116], + [7.943008899688721, -2.140617609024048], + [6.848796844482422, 8.278995513916016], + [-2.4592907428741455, -1.6043627262115479], + [-1.3923958539962769, -1.8975629806518555], + [-2.0988929271698, 2.569575071334839], + [-4.5706963539123535, 5.965616226196289], + [-3.6033618450164795, 2.963573694229126], + [0.5813494324684143, -1.0766297578811646], + [-0.2817957401275635, -1.0253455638885498], + [-2.108555793762207, 2.4329168796539307], + [6.809377670288086, -1.6351755857467651], + [10.00886058807373, -2.406346321105957], + [8.325993537902832, -2.6365878582000732], + [3.0969467163085938, -3.848487615585327], + [-5.859694957733154, 6.765666484832764], + [2.535645008087158, -8.234149932861328], + [-4.183504581451416, -3.362180233001709], + [0.4621904492378235, -1.1147559881210327], + [-4.6668477058410645, -3.206674814224243], + [6.501151084899902, -2.7568042278289795], + [7.975972652435303, -2.299229383468628], + [-4.816044330596924, 5.430086135864258], + [-5.915393352508545, 0.2334601879119873], + [-4.770933628082275, -2.4930222034454346], + [-5.856112480163574, 5.3074951171875], + [-1.8464980125427246, 2.0277085304260254], + [-0.8249502778053284, -0.43972548842430115], + [-4.745843410491943, -6.990774154663086], + [-4.666706562042236, -4.062103271484375], + [2.916455030441284, -4.123802185058594], + [-2.17643666267395, 2.2313525676727295], + [0.8611910343170166, -5.947076797485352], + [-1.6656224727630615, -1.0635219812393188], + [3.069851875305176, -7.531228065490723], + [7.805490970611572, -2.636354923248291], + [2.712108612060547, -3.222527027130127], + [3.467339277267456, 1.9515928030014038], + [-3.1736929416656494, 3.318665027618408], + [-6.024673938751221, -1.756714940071106], + [6.04003381729126, -4.494941234588623], + [6.736149311065674, -4.268161773681641], + [0.1535164713859558, 9.919666290283203], + [5.407454490661621, -2.027545928955078], + [2.00462007522583, 2.054324150085449], + [-3.525512933731079, 1.8929771184921265], + [3.41287899017334, -5.830418586730957], + [0.010120920836925507, 12.775854110717773], + [7.692134380340576, -2.5172975063323975], + [-7.3707098960876465, 7.610870361328125], + [1.6587408781051636, 2.26233172416687], + [1.5159876346588135, 0.4189058542251587], + [-1.9527322053909302, 2.5326485633850098], + [4.557518482208252, 6.609471321105957], + [-2.4725699424743652, -0.29529422521591187], + [3.502645254135132, -5.085333824157715], + [-6.067027568817139, 5.093430995941162], + [3.418773889541626, 5.716341972351074], + [9.215921401977539, -2.4530367851257324], + [8.348496437072754, -2.4262311458587646], + [-2.412522792816162, 1.2717535495758057], + [-5.784327983856201, 8.169440269470215], + [4.242160797119141, -3.7421228885650635], + [-3.7998664379119873, -0.5258069634437561], + [2.945587396621704, -7.131409168243408], + [7.251283168792725, -2.164466619491577], + [6.610292911529541, -1.4773707389831543], + [-6.759373664855957, 7.91049861907959], + [1.6684025526046753, -0.30977317690849304], + [1.9552271366119385, 3.591893196105957], + [3.7996485233306885, 6.5029144287109375], + [2.3029041290283203, 3.4405105113983154], + [-4.078286170959473, -2.016207456588745], + [4.417245864868164, -4.135364532470703], + [6.197266101837158, 7.9650726318359375], + [8.397208213806152, -2.4357969760894775], + [-2.672239065170288, -3.8410065174102783], + [-2.3304529190063477, -1.2312182188034058], + [2.6980197429656982, 5.95527458190918], + [-1.7822847366333008, 1.944419264793396], + [2.3983287811279297, 5.289517879486084], + [-1.6042490005493164, -3.3941891193389893], + [-2.619394063949585, 2.172313928604126], + [-4.1452789306640625, 4.150196552276611], + [-6.367225646972656, 7.493774890899658], + [-2.5846617221832275, 2.1445553302764893], + [3.0955288410186768, -4.228297710418701], + [5.593338966369629, 7.6800856590271], + [6.833632946014404, 8.43521785736084], + [2.1016855239868164, 2.3749608993530273], + [-2.3517985343933105, 1.8745843172073364], + [1.8121623992919922, -2.8911190032958984], + [6.297410488128662, -1.3756390810012817], + [-6.490565776824951, 7.5427446365356445], + [-3.8106322288513184, 6.45177698135376], + [1.4574964046478271, 0.24251443147659302], + [-4.086546421051025, -2.2220561504364014], + [2.7782981395721436, -3.8528029918670654], + [-6.237311363220215, 7.126713275909424], + [-4.6011223793029785, -6.798848628997803], + [-4.49805212020874, -2.825108289718628], + [1.833066701889038, -7.569043159484863], + [-3.1194961071014404, 3.230133056640625], + [2.7281532287597656, -8.180980682373047], + [1.9775452613830566, 3.0438735485076904], + [-3.819256544113159, 6.206319808959961], + [-3.6737630367279053, -5.425655364990234], + [0.7381380796432495, -0.8537667393684387], + [0.01132296770811081, 9.64162826538086], + [6.54616117477417, 8.207084655761719], + [8.0670804977417, -2.2396347522735596], + [0.043021492660045624, 12.677093505859375], + [-2.8780040740966797, -4.497127532958984], + [-5.412898540496826, 5.651613235473633], + [3.303725004196167, -4.939604759216309], + [3.434419870376587, -8.610105514526367], + [-3.351348638534546, 3.753607749938965], + [0.17131882905960083, 12.164190292358398], + [-3.7057440280914307, -5.261518478393555], + [-6.241138935089111, 7.339041233062744], + [-2.0072929859161377, 2.076521635055542], + [1.2866560220718384, 0.43335801362991333], + [-5.042280673980713, -4.806690216064453], + [-3.588610887527466, -1.1097373962402344], + [2.1101510524749756, -2.2568464279174805], + [0.07472424954175949, 10.113852500915527], + [-4.5951457023620605, -7.074334621429443], + [1.8187841176986694, 6.748723030090332], + [3.8165018558502197, 6.919654369354248], + [-2.5093510150909424, 2.234902858734131], + [-4.331140995025635, -3.6914799213409424], + [-5.292281150817871, -3.4658315181732178], + [9.984565734863281, -2.4707438945770264], + [4.241837501525879, -4.582340240478516], + [-7.054739475250244, 0.4360229969024658], + [-2.432626962661743, 2.369612216949463], + [7.948822498321533, -2.3839282989501953], + [-0.6421181559562683, -2.2325096130371094], + [7.161145210266113, -6.211658477783203], + [-0.739711344242096, 1.04755437374115], + [-4.9866719245910645, -7.236828804016113], + [-1.2335468530654907, 1.4551700353622437], + [3.305417776107788, -4.480175971984863], + [0.571807861328125, 5.5049638748168945], + [8.755391120910645, -2.1996824741363525], + [-4.318239688873291, -7.212980270385742], + [1.186915636062622, 0.4530192017555237], + [0.4948886036872864, -6.334890842437744], + [-6.04678201675415, 2.4832775592803955], + [-3.147352457046509, -5.195355415344238], + [2.6065144538879395, 4.666123390197754], + [-6.684576511383057, -0.12104976177215576], + [-6.215089797973633, 0.4999256134033203], + [-0.8989076018333435, 0.6171792149543762], + [8.75731086730957, -2.610562562942505], + [4.57566499710083, -1.7672113180160522], + [-1.5163971185684204, -4.491049766540527], + [1.5286850929260254, -6.699983596801758], + [-3.9649908542633057, -1.1821073293685913], + [3.0213840007781982, -4.257567405700684], + [3.4518368244171143, -4.4652180671691895], + [6.267128944396973, -4.085341453552246], + [-0.04302329570055008, 9.282535552978516], + [3.992832899093628, -3.55663800239563], + [-1.1290826797485352, 0.66510009765625], + [-0.03193075209856033, 11.988189697265625], + [6.316766738891602, -1.393453598022461], + [3.088324785232544, -4.152251243591309], + [2.4631028175354004, 4.927114009857178], + [1.5733503103256226, 1.9245878458023071], + [0.049640171229839325, 10.307306289672852], + [-0.20077329874038696, 9.463685989379883], + [11.413369178771973, -2.6042640209198], + [-4.687010765075684, -5.256630897521973], + [6.119383335113525, -2.3246848583221436], + [-5.468903064727783, 7.127859115600586], + [3.704911470413208, -6.209884166717529], + [2.875535011291504, -3.908007860183716], + [4.559913158416748, -4.074097633361816], + [-6.569020748138428, 2.317598581314087], + [10.567082405090332, -2.4836766719818115], + [2.665628671646118, -8.179214477539062], + [-2.6120972633361816, 2.014936923980713], + [-1.9607480764389038, 0.08356881141662598], + [-6.077083110809326, -2.432321310043335], + [5.124090194702148, -5.154653072357178], + [-4.253835201263428, 6.0800981521606445], + [-2.5257444381713867, 1.49753999710083], + [1.156408429145813, -0.5695778131484985], + [-0.13486671447753906, 9.412504196166992], + [-2.1919353008270264, 2.574479818344116], + [-1.9225695133209229, -0.2708186209201813], + [9.41164493560791, -2.315267562866211], + [-4.760730266571045, 4.439248561859131], + [-1.6585229635238647, 2.390101671218872], + [5.54991340637207, 6.9841718673706055], + [-3.4505345821380615, 7.608277320861816], + [-2.121856451034546, -4.07721471786499], + [1.4143221378326416, 5.409548759460449], + [-4.195885181427002, -5.807786464691162], + [-5.438559055328369, -0.38313037157058716], + [1.2187490463256836, -0.5685324668884277], + [3.4038991928100586, -4.8294548988342285], + [1.84761381149292, -7.1767706871032715], + [2.067504644393921, 5.649008750915527], + [3.627397298812866, 1.3632853031158447], + [-2.2300281524658203, 1.042217493057251], + [-2.293597936630249, 2.129633665084839], + [-1.191336989402771, -3.615818500518799], + [-3.682687282562256, -6.108243465423584], + [3.9003608226776123, 1.5359020233154297], + [-4.680372714996338, -6.351713180541992], + [-0.9512708187103271, -2.554583787918091], + [7.775364398956299, -2.1132473945617676], + [8.939640998840332, -2.415654420852661], + [2.982686758041382, -3.5218493938446045], + [3.4743494987487793, -3.5063636302948], + [1.8810429573059082, 1.6415475606918335], + [3.363445520401001, 1.9397475719451904], + [3.105193853378296, 1.983049988746643], + [-1.2868329286575317, 1.5168561935424805], + [7.315249443054199, 9.361709594726562], + [-3.1633455753326416, -1.288103699684143], + [-1.107317566871643, -2.013321876525879], + [-1.8091620206832886, 1.6981343030929565], + [0.20078998804092407, 11.533523559570312], + [-4.001674175262451, 4.938950538635254], + [-0.5241758823394775, -4.744928359985352], + [-5.5776896476745605, -2.2781121730804443], + [-2.568277359008789, 1.8307809829711914], + [-6.761462688446045, 7.941601753234863], + [2.4166853427886963, -8.575828552246094], + [8.686615943908691, -2.3060433864593506], + [5.645181179046631, -0.9983292818069458], + [1.837538480758667, 1.9376736879348755], + [-4.332761764526367, 4.790271759033203], + [-4.918191432952881, 5.666912078857422], + [-2.4970500469207764, 2.2359817028045654], + [-5.0889363288879395, 5.246119976043701], + [3.859326124191284, -3.6207525730133057], + [-4.74764347076416, 4.469333648681641], + [-4.843667030334473, -7.2761077880859375], + [2.7546794414520264, 1.6328521966934204], + [-5.803464889526367, 0.0887519121170044], + [6.0887556076049805, -1.3923442363739014], + [1.663348913192749, -6.4266204833984375], + [-3.935701608657837, -6.356289863586426], + [-2.1252996921539307, 5.993133068084717], + [-2.567101001739502, 1.6679028272628784], + [-5.174328327178955, -2.7989323139190674], + [-2.087801694869995, 0.7309346199035645], + [-0.985734760761261, -2.7479188442230225], + [11.690033912658691, -2.6773815155029297], + [5.6685309410095215, -3.229180097579956], + [-0.1456848382949829, 9.004172325134277], + [2.7375800609588623, -8.79423713684082], + [2.4821035861968994, -7.735199928283691], + [-2.3403522968292236, 3.228323221206665], + [10.074807167053223, -2.505336046218872], + [-6.883159637451172, 8.125408172607422], + [-0.24981576204299927, -1.393469214439392], + [0.09363480657339096, -1.4951757192611694], + [6.751038074493408, -2.4755280017852783], + [1.4460418224334717, 1.5684086084365845], + [-5.618321418762207, 6.7192888259887695], + [-2.4355764389038086, 1.3946670293807983], + [-3.8102777004241943, -1.0979677438735962], + [-2.247354745864868, 1.5852192640304565], + [-1.1012026071548462, -3.492931365966797], + [-3.984173059463501, -0.2643859386444092], + [3.3623743057250977, -2.978925943374634], + [-1.1124904155731201, 1.984423279762268], + [3.0242607593536377, -4.194046974182129], + [4.420281887054443, 7.285183906555176], + [7.903648376464844, -2.161945104598999], + [4.126288414001465, -3.7904789447784424], + [-6.867060661315918, 8.268205642700195], + [5.2333984375, 7.331171989440918], + [1.6852893829345703, 0.013799216598272324], + [-0.3166019320487976, 0.3916615843772888], + [3.696481466293335, -3.7770376205444336], + [2.2343509197235107, -3.1182968616485596], + [5.74705696105957, 7.946461200714111], + [3.8993308544158936, 1.0426610708236694], + [0.607954204082489, 0.3549794852733612], + [6.046936511993408, -1.2616009712219238], + [-1.8670411109924316, -0.33016517758369446], + [4.565728664398193, 6.73214054107666], + [3.76308012008667, 1.160180926322937], + [0.11273597925901413, -1.1692006587982178], + [-3.4564826488494873, -6.585869789123535], + [-0.12772321701049805, 0.5316990613937378], + [3.93916916847229, 1.7275358438491821], + [0.0699603483080864, 10.259834289550781], + [2.4899537563323975, 4.194938659667969], + [2.9922025203704834, -4.2381272315979], + [7.8874359130859375, -2.13611102104187], + [1.6902199983596802, -7.552617073059082], + [-0.5960780382156372, 9.376852035522461], + [-2.6232285499572754, -2.357043743133545], + [4.55779504776001, -0.48534584045410156], + [-5.793097496032715, 8.559370040893555], + [-2.656519889831543, 3.784660816192627], + [3.280696153640747, -3.6101462841033936], + [-0.4399634599685669, 8.808759689331055], + [3.9781200885772705, -7.705621719360352], + [-6.798192501068115, 4.830448150634766], + [-4.469804286956787, 4.6709442138671875], + [0.003223709762096405, 12.66185188293457], + [2.657555103302002, 3.271883249282837], + [-4.064876556396484, -2.7953059673309326], + [-1.4181333780288696, 1.9900320768356323], + [-2.1639130115509033, 2.006666898727417], + [1.696413278579712, 5.6805524826049805], + [-2.256641387939453, 2.1487748622894287], + [3.329596757888794, -3.1065304279327393], + [4.927195072174072, -3.9179880619049072], + [7.6381516456604, -3.170498847961426], + [-5.404904842376709, 7.195913314819336], + [3.37660551071167, -3.9782090187072754], + [0.2220587134361267, 10.74051284790039], + [3.028233528137207, -4.441762924194336], + [2.0850934982299805, 4.485291481018066], + [0.0315813347697258, 10.67660903930664], + [-2.194429874420166, -3.8045952320098877], + [2.1956746578216553, 2.9386415481567383], + [2.2645556926727295, -7.596630096435547], + [-0.015906699001789093, 12.55979061126709], + [-5.242549419403076, 5.185548305511475], + [6.475746154785156, -1.4830867052078247], + [-5.029890537261963, -6.253785133361816], + [-4.215692043304443, 4.726044654846191], + [3.504478693008423, -4.309111595153809], + [2.4706602096557617, 5.396671295166016], + [8.089314460754395, -2.412750482559204], + [-4.1954779624938965, 3.8693459033966064], + [2.1303281784057617, -1.0889931917190552], + [-4.465178489685059, 5.136572360992432], + [5.281547546386719, 7.106963157653809], + [0.14967751502990723, 11.025390625], + [4.73343563079834, -3.5453414916992188], + [7.220534324645996, -1.424917221069336], + [-5.310347080230713, 7.3328423500061035], + [1.6372125148773193, 5.238790988922119], + [8.07773494720459, -2.0819594860076904], + [-5.1158270835876465, -7.6237616539001465], + [-2.4027259349823, 2.14736270904541], + [6.238453388214111, -3.7399964332580566], + [1.8028233051300049, -6.357563018798828], + [0.1969699263572693, 10.985170364379883], + [4.4912800788879395, -2.595054864883423], + [8.552536964416504, -2.401484489440918], + [0.30052483081817627, -1.1910121440887451], + [0.2336776852607727, 9.175516128540039], + [-4.412546634674072, 5.182110786437988], + [4.160135269165039, 5.995115280151367], + [-5.159477710723877, 5.320491790771484], + [-4.300985813140869, -6.577962875366211], + [2.7756645679473877, -6.947413444519043], + [-1.2881276607513428, 1.6250616312026978], + [1.617958426475525, -7.672569274902344], + [0.23801714181900024, 10.823541641235352], + [6.541350364685059, -1.6883774995803833], + [-5.1808905601501465, 4.147123336791992], + [0.7790331244468689, -0.816948413848877], + [2.281550884246826, 5.536093711853027], + [10.353499412536621, -2.47359299659729], + [2.388526201248169, 2.1641788482666016], + [-2.392941951751709, 6.220419883728027], + [-7.488594055175781, -0.11285936832427979], + [-0.7486839294433594, -0.39384177327156067], + [2.3244264125823975, -5.6621198654174805], + [-6.7939677238464355, 2.3891994953155518], + [-6.046375751495361, -1.8008074760437012], + [-5.194944858551025, 4.847035884857178], + [0.5874312520027161, -1.0067886114120483], + [4.981679439544678, -1.0431760549545288], + [-2.09590744972229, 1.6680883169174194], + [-2.4765355587005615, -3.9172089099884033], + [0.9519317746162415, -0.12592504918575287], + [-2.778043270111084, -5.3366498947143555], + [-4.568843364715576, -7.0060625076293945], + [-4.829864978790283, 5.250630855560303], + [4.536004066467285, -3.3757431507110596], + [-5.729583263397217, 7.683999061584473], + [-0.6823037266731262, -2.33591365814209], + [-3.017076253890991, 0.9346613883972168], + [-5.112891674041748, -2.238180160522461], + [-2.270303249359131, 2.3207733631134033], + [4.80648136138916, 6.48203182220459], + [-7.098935127258301, -0.20572960376739502], + [-3.058837652206421, -1.9718860387802124], + [-6.672894477844238, 8.295160293579102], + [4.667283535003662, -2.2123215198516846], + [3.4167802333831787, -8.088727951049805], + [-0.28041478991508484, -1.6259523630142212], + [-2.218721389770508, 0.4655742645263672], + [2.62666392326355, -9.273059844970703], + [6.71237325668335, -5.800306797027588], + [5.330514430999756, 6.801950931549072], + [7.234990119934082, 8.715023040771484], + [-2.4233570098876953, 0.9028687477111816], + [7.324477195739746, -1.5946835279464722], + [8.745774269104004, -2.3848581314086914], + [-3.7306082248687744, -1.1588486433029175], + [-3.303946018218994, 6.498445510864258], + [-3.8845248222351074, 6.366271018981934], + [3.9546549320220947, -8.926042556762695], + [6.145308017730713, 7.538102149963379], + [-4.256163120269775, -2.9031295776367188], + [-4.723107814788818, -6.576674461364746], + [-4.312840938568115, -2.2864043712615967], + [-3.0474607944488525, 2.7669835090637207], + [0.12728196382522583, 12.705548286437988], + [-4.515798091888428, -3.007556200027466], + [6.5350213050842285, -1.6132866144180298], + [0.5127015709877014, 10.970324516296387], + [-3.9027786254882812, -4.5595269203186035], + [2.886955738067627, -2.6750359535217285], + [7.571547031402588, -2.101900339126587], + [6.191750526428223, -4.048095226287842], + [-3.4680771827697754, -0.8393656015396118], + [4.860774517059326, 7.418579578399658], + [-6.400555610656738, 6.912552833557129], + [-4.4410481452941895, -6.844128608703613], + [-2.510577440261841, 1.367130160331726], + [-2.331604242324829, 2.1895151138305664], + [0.2687310576438904, 12.261333465576172], + [3.7712624073028564, -3.0012102127075195], + [-1.8455582857131958, 2.43102765083313], + [6.399383068084717, 7.952175140380859], + [4.051376819610596, -3.5458924770355225], + [-2.2648367881774902, 2.259026527404785], + [6.812150478363037, 8.461384773254395], + [7.927510738372803, -2.087171792984009], + [4.424967288970947, -1.751407504081726], + [-4.746201038360596, -1.7181185483932495], + [-0.2954922616481781, -1.4046827554702759], + [-2.912308931350708, 1.758088231086731], + [8.398052215576172, -2.263676881790161], + [4.348668575286865, -3.47786021232605], + [-3.098492383956909, -4.180139064788818], + [-1.6249336004257202, -1.1734988689422607], + [7.198122501373291, 8.688968658447266], + [6.1791768074035645, -1.5458725690841675], + [-6.743326187133789, 8.446176528930664], + [-4.6149725914001465, 4.077128887176514], + [8.676084518432617, -2.2570083141326904], + [2.2527387142181396, 3.767658233642578], + [1.958336591720581, -7.846950531005859], + [6.622885704040527, 8.216850280761719], + [-2.2008159160614014, 2.529340982437134], + [1.5645763874053955, -6.773005485534668], + [0.6428385376930237, 5.7033796310424805], + [8.419638633728027, -2.213284730911255], + [-3.766162157058716, -6.139786720275879], + [3.381925582885742, -3.96488356590271], + [2.374384641647339, -8.290413856506348], + [-6.730373859405518, 8.004169464111328], + [-4.728102207183838, -0.45348191261291504], + [4.634414196014404, -3.7814767360687256], + [-6.055253505706787, 6.606264591217041], + [-2.211289167404175, 2.1010847091674805], + [-0.10092718154191971, 13.84092903137207], + [2.663555860519409, -3.9709103107452393], + [-6.507751941680908, 2.7674460411071777], + [-2.506788492202759, -2.1243584156036377], + [-4.088362216949463, 4.612025260925293], + [-4.423097133636475, -6.902823448181152], + [6.639859676361084, -2.7892866134643555], + [-4.563313961029053, 6.1311469078063965], + [4.301389694213867, -2.986478567123413], + [-2.494216203689575, -2.8715951442718506], + [-6.612068176269531, 7.625250339508057], + [3.134594440460205, -3.6581108570098877], + [6.722706317901611, 8.205888748168945], + [8.432648658752441, -2.2377188205718994], + [6.295475482940674, 8.12440299987793], + [-3.147172212600708, -3.992905616760254], + [5.13300085067749, -5.0792436599731445], + [7.496423244476318, -2.0186283588409424], + [-2.6484792232513428, -4.620704650878906], + [9.719440460205078, -2.4018118381500244], + [1.8064547777175903, -0.13732650876045227], + [2.471088171005249, 3.9850871562957764], + [-0.21153104305267334, -0.09675188362598419], + [-2.627807855606079, 2.1963579654693604], + [1.46146821975708, 5.398426055908203], + [1.2746098041534424, 2.335148334503174], + [2.1886773109436035, 3.477485179901123], + [6.1211066246032715, 7.545492172241211], + [0.1067311093211174, 9.157479286193848], + [4.405206203460693, -4.040773391723633], + [3.688924551010132, -8.270488739013672], + [-2.5898993015289307, 2.155733108520508], + [4.590024471282959, -3.3555610179901123], + [-2.365077257156372, 2.15108585357666], + [3.7449796199798584, 6.043972969055176], + [2.6642825603485107, -3.8059093952178955], + [2.006798505783081, 4.259982109069824], + [5.876973628997803, -1.2408796548843384], + [7.026367664337158, 8.427011489868164], + [-4.597317218780518, -2.4814791679382324], + [3.6122238636016846, 1.0766122341156006], + [-1.3013136386871338, 1.2384353876113892], + [8.338768005371094, -2.2108449935913086], + [-4.893965721130371, -0.20776331424713135], + [-1.213847041130066, 1.5090564489364624], + [0.08454101532697678, 12.149676322937012], + [5.899995803833008, 7.296131610870361], + [-0.006788559257984161, 9.342647552490234], + [8.107771873474121, -2.5542056560516357], + [2.4843556880950928, 4.366706848144531], + [4.2055888175964355, 7.11540412902832], + [2.105485200881958, 0.2901722490787506], + [9.007543563842773, -2.349970579147339], + [-1.8108673095703125, 1.594473123550415], + [1.1894290447235107, -0.11856743693351746], + [8.031155586242676, -2.117717742919922], + [-2.574136734008789, -2.7299344539642334], + [6.124894618988037, 7.7804059982299805], + [-1.7256861925125122, 1.7273439168930054], + [-2.003918170928955, 2.356560468673706], + [-5.273195743560791, -2.6412594318389893], + [7.352143287658691, -1.7572376728057861], + [3.8310327529907227, 5.392425060272217], + [2.1845829486846924, -6.974583625793457], + [3.8634419441223145, 7.054025650024414], + [-2.6343276500701904, 1.8436152935028076], + [-2.8628666400909424, 0.7828457355499268], + [-2.881211042404175, 1.4048575162887573], + [8.94913101196289, -2.4218533039093018], + [-5.151956081390381, -3.0605010986328125], + [-1.8831446170806885, -3.27410626411438], + [6.404696941375732, -1.418182611465454], + [4.174403190612793, -7.398760795593262], + [2.1898324489593506, -7.9464898109436035], + [0.5798527598381042, -0.9587854146957397], + [-5.116790771484375, -4.200421333312988], + [7.348844528198242, -2.257826089859009], + [-2.2197084426879883, -3.631429672241211], + [5.81868314743042, -3.0069525241851807], + [3.0901100635528564, 6.492304801940918], + [1.942755937576294, 0.5779192447662354], + [-4.1699042320251465, 4.394562244415283], + [9.85959529876709, -2.362549066543579], + [3.568556070327759, -8.123498916625977], + [-2.0712084770202637, 2.3720548152923584], + [-2.5354766845703125, 2.2008750438690186], + [0.1723003387451172, 10.282770156860352], + [6.265980243682861, -1.5468989610671997], + [1.9961235523223877, -6.728942394256592], + [-2.32633113861084, -3.8490302562713623], + [7.636880397796631, -2.1409709453582764], + [-4.691165447235107, 4.836780548095703], + [-4.591193675994873, -1.4556418657302856], + [6.73547887802124, 8.197332382202148], + [-6.212604999542236, -0.7309466600418091], + [4.079502105712891, 1.6643314361572266], + [2.7745635509490967, 5.770450592041016], + [2.752340316772461, -3.8722083568573], + [3.0904381275177, -7.341331958770752], + [3.1406898498535156, -8.436990737915039], + [-0.10685420781373978, 9.859474182128906], + [3.450517177581787, -6.960344314575195], + [2.515397548675537, 5.260220527648926], + [-1.847178339958191, 2.234071969985962], + [1.662086009979248, 3.04083251953125], + [6.020195484161377, -1.0665638446807861], + [-2.3618595600128174, 1.91324782371521], + [-1.8581305742263794, 0.6723664999008179], + [-3.5425848960876465, -3.860375165939331], + [8.73305606842041, -2.2216224670410156], + [0.3319080173969269, 0.840295672416687], + [-0.6426331400871277, -2.1753733158111572], + [-4.273924827575684, 4.276258945465088], + [-5.021046161651611, -3.5592634677886963], + [2.6938674449920654, -4.754630088806152], + [-2.2974703311920166, -0.6387937068939209], + [-5.0167622566223145, -6.927422046661377], + [-4.808441638946533, 5.177943229675293], + [-2.200935125350952, 2.2843821048736572], + [-3.0316879749298096, -3.965562343597412], + [1.804087519645691, -0.09044815599918365], + [-1.8796684741973877, 1.7962573766708374], + [-2.4567654132843018, 2.1587045192718506], + [0.41569072008132935, -5.980521202087402], + [-4.963242053985596, -1.3813472986221313], + [0.9221585392951965, -0.6208847761154175], + [-6.873856067657471, 7.9133806228637695], + [7.589575290679932, -2.810300350189209], + [7.814349174499512, -2.463304042816162], + [-2.4738662242889404, 1.4264016151428223], + [1.7641730308532715, 1.7211929559707642], + [-4.365612506866455, -0.3824639320373535], + [1.4133262634277344, -0.22705698013305664], + [5.279935836791992, -6.570179462432861], + [-2.5980265140533447, 1.5409380197525024], + [0.8400418758392334, -5.203343868255615], + [8.877530097961426, -2.4819753170013428], + [-0.0122915580868721, 10.028165817260742], + [-3.50240421295166, 3.71626353263855], + [2.872452974319458, -8.103489875793457], + [-3.025015115737915, -1.8520457744598389], + [-7.084887504577637, 8.29879093170166], + [-5.90447998046875, -2.3733325004577637], + [-1.4297397136688232, -3.63966965675354], + [-5.1960530281066895, 6.365711212158203], + [10.192523956298828, -2.359546422958374], + [4.38032865524292, 1.849277138710022], + [2.685579538345337, -3.8358848094940186], + [-0.0744602158665657, 12.41169261932373], + [3.573350191116333, 6.348565578460693], + [3.4684460163116455, -3.6041886806488037], + [4.6661553382873535, 6.669699668884277], + [-4.620508670806885, -6.858235836029053], + [-2.4613773822784424, 2.268723487854004], + [-4.667710304260254, 7.565821647644043], + [-4.70919942855835, -3.0767133235931396], + [-4.63749361038208, 6.0905561447143555], + [10.162055015563965, -2.601097583770752], + [6.471775054931641, -1.3501341342926025], + [1.0706415176391602, -6.587491512298584], + [3.7867603302001953, -3.642911434173584], + [-4.77494478225708, -2.5672523975372314], + [-1.0867520570755005, -3.8870441913604736], + [-3.5500457286834717, -3.911651134490967], + [-5.715120792388916, 6.087023735046387], + [4.483883857727051, 6.625936031341553], + [9.232210159301758, -2.35522198677063], + [-4.282243251800537, -2.705293893814087], + [3.0994455814361572, 0.8282350897789001], + [0.2089717984199524, 10.571277618408203], + [0.4937465190887451, -0.9762198328971863], + [4.157382011413574, 6.7724833488464355], + [-4.918575763702393, -4.800732612609863], + [6.671583652496338, -2.167832851409912], + [5.894960880279541, -4.078804969787598], + [2.1139566898345947, 0.9743825197219849], + [8.028861045837402, -2.3461339473724365], + [1.5856865644454956, -7.231606483459473], + [2.2134320735931396, 5.9066314697265625], + [5.255404949188232, 7.016472816467285], + [-2.3805534839630127, -3.230607748031616], + [-0.01443309336900711, 11.467044830322266], + [-5.8875041007995605, 6.718328475952148], + [8.450692176818848, -2.2971627712249756], + [4.411278247833252, -3.807011365890503], + [-4.505661487579346, 4.986011505126953], + [3.7750723361968994, 1.9053326845169067], + [-2.5114810466766357, -3.237718343734741], + [-4.598985195159912, -2.031810760498047], + [-5.151674270629883, 5.729576587677002], + [9.292707443237305, -2.316635847091675], + [0.37534552812576294, 11.286513328552246], + [-4.033309459686279, -2.0153563022613525], + [-4.390957355499268, -3.406262159347534], + [-2.1616320610046387, 2.709022283554077], + [9.269407272338867, -2.79327654838562], + [0.9800987839698792, 1.7217174768447876], + [2.3896617889404297, 5.925858020782471], + [1.811522126197815, 2.1379361152648926], + [-2.948401689529419, -4.757096290588379], + [-0.5400515794754028, -1.6251062154769897], + [7.867976188659668, -2.301121950149536], + [-3.004183530807495, -2.4531333446502686], + [-6.947790145874023, -0.06959104537963867], + [6.899813175201416, 8.315070152282715], + [-4.058657169342041, -4.022316932678223], + [6.499246597290039, 8.131925582885742], + [7.909173488616943, -2.514055013656616], + [-2.6248433589935303, 2.192067861557007], + [3.805887222290039, -3.3567450046539307], + [-2.4306976795196533, -2.2575302124023438], + [2.590994119644165, -6.617309093475342], + [-1.9167582988739014, -0.4556845724582672], + [1.9967894554138184, 4.935566425323486], + [-5.057319641113281, -0.8654428124427795], + [-3.358731746673584, -5.863404750823975], + [4.514540195465088, 1.619679570198059], + [7.353956699371338, 8.851570129394531], + [2.4164865016937256, 5.508577823638916], + [-2.8024075031280518, -2.9186627864837646], + [-5.320865154266357, -4.2623443603515625], + [-2.179575204849243, 2.6220247745513916], + [2.135920524597168, -8.400598526000977], + [3.2331483364105225, -4.7770843505859375], + [-5.434592247009277, 5.1692118644714355], + [3.6788437366485596, -3.3160808086395264], + [2.599229574203491, -8.015429496765137], + [3.325336456298828, -4.098133087158203], + [-4.336269378662109, -3.503643274307251], + [-5.626894474029541, 6.082970142364502], + [8.217358589172363, -2.617387533187866], + [-1.184421420097351, 1.6715826988220215], + [-4.812015056610107, -4.482180595397949], + [-4.303389072418213, -2.677767515182495], + [0.10479443520307541, 9.266300201416016], + [7.924941539764404, -2.315603017807007], + [3.1494767665863037, -4.470417499542236], + [-2.44093656539917, -4.133087158203125], + [8.218161582946777, -2.195908308029175], + [-6.629242420196533, 7.687551498413086], + [-6.435583591461182, 6.618838310241699], + [1.281745433807373, 5.632974624633789], + [-4.454524517059326, 7.6477484703063965], + [-4.1084513664245605, -6.310305595397949], + [2.6684377193450928, -7.365375518798828], + [-4.733471870422363, 7.706892013549805], + [3.0077643394470215, -4.162420272827148], + [-0.9487345218658447, 8.08739948272705], + [4.2062201499938965, 1.7348040342330933], + [9.387781143188477, -2.315927743911743], + [7.247159004211426, -1.8650002479553223], + [1.7018247842788696, 5.361291408538818], + [-1.6320160627365112, -0.8579181432723999], + [-5.020195960998535, 3.8698039054870605], + [3.2853877544403076, -5.11481237411499], + [-4.531304359436035, -0.5533959865570068], + [-1.955863118171692, 2.2596428394317627], + [-2.052043914794922, 2.6729650497436523], + [5.852049350738525, 7.144013404846191], + [0.15318816900253296, 10.91267204284668], + [-0.053856976330280304, 8.845637321472168], + [0.027903370559215546, 9.542084693908691], + [3.5001211166381836, -3.090054750442505], + [-2.033013343811035, 0.10249790549278259], + [-3.835705280303955, -2.5876963138580322], + [-1.990812063217163, 0.9211117625236511], + [8.814295768737793, -2.4294211864471436], + [-0.03808123618364334, 14.174341201782227], + [-2.525022029876709, 1.438179612159729], + [-2.3327088356018066, 0.9891847372055054], + [-4.977583885192871, -1.9361833333969116], + [0.629685640335083, -1.0544788837432861], + [0.5539472699165344, 11.032720565795898], + [7.019625186920166, -2.7321317195892334], + [2.454550266265869, -7.235226631164551], + [-1.2449461221694946, -2.7741734981536865], + [-2.5702311992645264, 1.652896761894226], + [4.3567376136779785, 6.712185859680176], + [-2.1926865577697754, 2.4575469493865967], + [-4.475656032562256, -6.3499956130981445], + [6.097156047821045, 7.677168846130371], + [0.04833739250898361, 8.6683931350708], + [-1.4394618272781372, 1.493921160697937], + [0.31054815649986267, -1.292109727859497], + [-0.33579888939857483, -1.1183862686157227], + [5.999459743499756, -1.5678712129592896], + [-5.682986736297607, -1.5043731927871704], + [-1.2079529762268066, 0.4116203784942627], + [8.106752395629883, -2.225208282470703], + [-0.9500765204429626, -0.8687469363212585], + [2.6776654720306396, -9.677107810974121], + [-3.9782583713531494, -2.8023126125335693], + [0.11910932511091232, 11.686068534851074], + [-3.842320680618286, 5.680247783660889], + [0.12800145149230957, 10.033699035644531], + [3.1188199520111084, -8.614898681640625], + [0.6612614393234253, 0.23370280861854553], + [-6.22633695602417, 0.12089920043945312], + [-4.360848903656006, -3.612142324447632], + [-6.640778541564941, 2.3515965938568115], + [2.7144391536712646, 1.7305892705917358], + [5.450401306152344, -1.1883400678634644], + [1.3248637914657593, 4.094672203063965], + [-2.0300679206848145, 2.339951753616333], + [5.842531681060791, -4.928192615509033], + [-2.031534194946289, -3.9145143032073975], + [-2.8554890155792236, -5.107254981994629], + [-5.49411153793335, -2.919964075088501], + [3.7036197185516357, -3.370540142059326], + [3.112830877304077, -3.993340015411377], + [-2.3080105781555176, 1.3936651945114136], + [-2.0777013301849365, 2.579383611679077], + [-0.5233235955238342, 0.40128129720687866], + [-1.6057780981063843, 1.913662314414978], + [2.899902105331421, -4.4434428215026855], + [4.2052321434021, -3.1672255992889404], + [6.251247882843018, -5.330763816833496], + [7.208170413970947, -1.7221791744232178], + [-1.7687678337097168, 2.3303020000457764], + [2.99762225151062, -5.3050217628479], + [3.6688029766082764, -3.508070707321167], + [-5.464970588684082, -1.3454216718673706], + [-4.704348087310791, -7.218730926513672], + [8.178913116455078, -2.493999719619751], + [3.439755439758301, 4.8260817527771], + [-2.4218432903289795, 6.529193878173828], + [-4.78786039352417, -5.321709632873535], + [-1.6187870502471924, -2.459925889968872], + [-5.131765842437744, 5.324202537536621], + [4.665798664093018, 6.635994911193848], + [-2.1439812183380127, 2.503460645675659], + [-6.587968349456787, -0.7774319052696228], + [2.820368528366089, -3.9917571544647217], + [-1.4028761386871338, -2.8225743770599365], + [-4.46234655380249, 6.566544532775879], + [5.280611991882324, 6.7621564865112305], + [8.517099380493164, -2.2596352100372314], + [7.184394359588623, 8.646273612976074], + [3.3440001010894775, -6.24488639831543], + [3.0853846073150635, -7.814896106719971], + [-4.408152103424072, 4.248546600341797], + [-2.514939308166504, 1.3435499668121338], + [3.036339521408081, 1.4127658605575562], + [5.362065315246582, -1.1479824781417847], + [-2.1755902767181396, 2.3847432136535645], + [-2.1609551906585693, 1.413697600364685], + [1.7077564001083374, 3.3400981426239014], + [-2.2672152519226074, -2.1678225994110107], + [-3.666069746017456, -4.7425947189331055], + [6.504884243011475, -1.4241639375686646], + [-2.0469160079956055, 2.5152735710144043], + [-3.3937020301818848, -5.587338447570801], + [-2.301085948944092, 3.1839516162872314], + [3.44329833984375, -4.893770694732666], + [9.858124732971191, -2.389535665512085], + [0.565689742565155, -0.9850313067436218], + [-4.097475051879883, -6.59017276763916], + [-4.518054485321045, 3.0474040508270264], + [-5.190138339996338, -0.9064131379127502], + [8.194740295410156, -2.221576690673828], + [3.299135446548462, -4.767922401428223], + [10.062726020812988, -2.4047608375549316], + [1.1025880575180054, 4.054115295410156], + [-0.7710021138191223, 0.6151589751243591], + [-3.9813616275787354, -4.85352897644043], + [2.4796814918518066, -8.990524291992188], + [1.7074414491653442, -6.887748718261719], + [6.215310096740723, -1.5666247606277466], + [8.05413818359375, -2.380567789077759], + [-4.977323532104492, -1.6845213174819946], + [8.44753360748291, -2.264443874359131], + [5.48801851272583, 7.908786773681641], + [0.16524899005889893, 11.065631866455078], + [3.7304983139038086, 5.239993095397949], + [-1.1243672370910645, -2.133654832839966], + [-0.08939672261476517, 9.642927169799805], + [6.139958381652832, 8.19633960723877], + [-2.198563814163208, 2.4122869968414307], + [-5.003285884857178, -3.2768118381500244], + [-2.3728814125061035, -5.181585311889648], + [0.07084112614393234, 12.467818260192871], + [-3.2902991771698, 0.7234209775924683], + [2.2506954669952393, -9.099150657653809], + [-7.730296611785889, -0.6516765356063843], + [-0.28204429149627686, -0.43441304564476013], + [-3.1696054935455322, 7.403285026550293], + [4.992236614227295, -0.657648503780365], + [10.245366096496582, -2.3393659591674805], + [5.667123317718506, -1.5740007162094116], + [-4.304659366607666, -6.731490135192871], + [3.0614326000213623, 0.7014098167419434], + [3.1027910709381104, -3.6384193897247314], + [-5.675825595855713, 6.556058883666992], + [4.901233673095703, -3.221083402633667], + [-5.160430431365967, -6.726025581359863], + [-4.200772762298584, 6.604610919952393], + [4.791046142578125, 7.29539155960083], + [-6.8355793952941895, -0.802497923374176], + [3.202826738357544, -4.379371643066406], + [-1.7820136547088623, 2.1473751068115234], + [3.5790038108825684, -8.258089065551758], + [-6.804063320159912, 7.965795516967773], + [2.8801515102386475, -4.028289794921875], + [-2.5930027961730957, -2.628661632537842], + [4.479287147521973, -2.8063433170318604], + [-0.5461698174476624, -1.4605218172073364], + [7.550764083862305, -2.0379409790039062], + [6.18918514251709, -1.256158709526062], + [3.031040668487549, -2.219310998916626], + [-0.0036205127835273743, 9.385923385620117], + [5.874632835388184, 8.05189323425293], + [-0.03661692887544632, 9.027068138122559], + [-2.3123350143432617, 0.6450808048248291], + [-2.1549224853515625, 2.4840900897979736], + [-4.798581123352051, 4.780893325805664], + [5.071595668792725, -3.0868632793426514], + [3.5143911838531494, 0.9538581371307373], + [-4.307961940765381, -3.2870519161224365], + [-3.2148191928863525, -5.084048271179199], + [-2.0633864402770996, 2.2257189750671387], + [-5.089540004730225, 5.964137077331543], + [2.8529748916625977, -7.164834499359131], + [1.935197114944458, -4.454946041107178], + [0.15531772375106812, 10.211248397827148], + [3.170093297958374, -3.003887414932251], + [2.404702663421631, -6.144047737121582], + [6.651268482208252, 8.143450736999512], + [-6.795704364776611, 7.557070732116699], + [4.3769612312316895, 7.021231651306152], + [2.4578518867492676, 1.8950068950653076], + [-5.3946146965026855, -2.001763105392456], + [3.9799702167510986, 0.9139735102653503], + [-4.089597702026367, 6.822507858276367], + [0.05091600865125656, 12.377655029296875], + [-7.951291561126709, -0.3453575372695923], + [-4.812861919403076, -5.25911808013916], + [-5.391574382781982, -0.597115159034729], + [5.506160259246826, -1.318159580230713], + [3.4748685359954834, -7.912107467651367], + [-3.9931294918060303, -1.5018336772918701], + [-4.446933269500732, 7.155460834503174], + [3.3383123874664307, -4.3161845207214355], + [0.4670301079750061, 10.52365779876709], + [2.173762321472168, 5.181926727294922], + [6.606353282928467, 8.243870735168457], + [-2.511181116104126, 2.170225143432617], + [-0.016054339706897736, 12.259668350219727], + [-0.003591485321521759, 12.630325317382812], + [0.16035467386245728, 8.737262725830078], + [7.612562656402588, -1.8827322721481323], + [2.9384958744049072, 0.5537884831428528], + [6.920345783233643, -6.080099105834961], + [6.069230079650879, -5.304954528808594], + [-2.395277261734009, 0.25980955362319946], + [0.23587846755981445, 1.2480778694152832], + [0.1545071005821228, 11.61880111694336], + [-7.041078567504883, -0.5397226810455322], + [-5.07431173324585, -1.6981078386306763], + [-2.7080721855163574, 1.8121167421340942], + [3.388165235519409, -8.07629680633545], + [6.659181118011475, 8.127665519714355], + [-3.5326988697052, -4.974637031555176], + [-3.755976915359497, -5.847745895385742], + [2.535804510116577, 1.0378365516662598], + [3.8478922843933105, 6.560614585876465], + [-2.2285401821136475, -1.74693763256073], + [10.67922306060791, -2.5010268688201904], + [-2.2752091884613037, 2.4013845920562744], + [-4.794795989990234, 7.207106113433838], + [1.695131778717041, -7.657705783843994], + [6.415981769561768, 7.825316429138184], + [-3.7771623134613037, -3.494985818862915], + [0.039746932685375214, 12.39428424835205], + [-7.038751125335693, 8.732048034667969], + [-4.7910614013671875, -5.692644119262695], + [2.3553709983825684, 5.397510528564453], + [3.9604828357696533, -3.579571485519409], + [3.908808469772339, -3.657388925552368], + [1.3232052326202393, 5.005336761474609], + [-1.8502280712127686, -0.060589853674173355], + [0.9778311848640442, -6.169471740722656], + [9.863089561462402, -2.4414706230163574], + [0.2669704556465149, 11.403909683227539], + [1.5813848972320557, 1.8405038118362427], + [6.190033435821533, 7.757006645202637], + [-2.8354318141937256, -3.503462314605713], + [3.285853624343872, -7.365602493286133], + [8.189454078674316, -2.413639545440674], + [2.9523770809173584, -8.084098815917969], + [-5.337072372436523, 4.513513565063477], + [2.6663968563079834, -3.775158405303955], + [-0.07170061022043228, -2.3532650470733643], + [0.28573447465896606, 10.28704833984375], + [9.148812294006348, -2.3898613452911377], + [-1.6728764772415161, 1.607019305229187], + [-4.484095573425293, 5.58298397064209], + [-3.4538419246673584, -4.826780796051025], + [0.23551440238952637, 0.11622056365013123], + [0.13634592294692993, 10.256938934326172], + [5.681863307952881, 7.899256706237793], + [-2.110896348953247, -0.054400209337472916], + [-5.472486972808838, 4.809593200683594], + [3.7899577617645264, -7.087345123291016], + [2.0726802349090576, 4.847519874572754], + [0.1274341344833374, 9.856269836425781], + [-3.453381299972534, 4.438990592956543], + [2.7335829734802246, -2.255565643310547], + [-1.936930537223816, 2.37587833404541], + [-0.2695910930633545, -1.3118363618850708], + [-4.1520514488220215, -2.6203339099884033], + [0.12842822074890137, 9.662389755249023], + [-6.8932318687438965, 8.028146743774414], + [-6.594151020050049, 1.9825559854507446], + [-4.214938640594482, -4.820050239562988], + [0.20146727561950684, 10.728137969970703], + [-0.3119412362575531, -1.593437671661377], + [-6.265428066253662, 7.200960636138916], + [1.7223265171051025, 4.588800430297852], + [-4.740448951721191, 5.5760722160339355], + [-7.538108825683594, 8.803553581237793], + [5.5804362297058105, 7.189455986022949], + [0.01901905983686447, 12.385162353515625], + [2.356597661972046, 4.236937522888184], + [-4.744199752807617, 7.157219886779785], + [-6.450971603393555, 6.873810768127441], + [-2.5333516597747803, 2.1311545372009277], + [7.143536567687988, -2.4471821784973145], + [2.167083978652954, -7.760980606079102], + [2.2646725177764893, -7.970759391784668], + [-2.2950713634490967, 2.3534913063049316], + [-2.0174989700317383, -3.2576487064361572], + [-6.471442222595215, 0.8159579038619995], + [2.0359809398651123, -7.742156982421875], + [-2.2634594440460205, 2.7616865634918213], + [2.869410514831543, -8.092811584472656], + [-3.9517502784729004, -3.945418119430542], + [-2.6018640995025635, 2.5022165775299072], + [-2.4186134338378906, 2.3851399421691895], + [3.12019419670105, 4.125123977661133], + [3.36254620552063, -3.0427277088165283], + [-1.8294577598571777, -0.003740791231393814], + [-2.6528148651123047, 6.4215192794799805], + [-4.800109386444092, -6.920183181762695], + [0.05367284268140793, 9.838635444641113], + [0.22858363389968872, 11.388859748840332], + [0.18170028924942017, 11.729109764099121], + [0.5486204028129578, -1.067658543586731], + [9.138537406921387, -2.487253427505493], + [-6.512996196746826, -0.7303846478462219], + [2.954502820968628, 1.4620214700698853], + [-3.365079402923584, -2.338942289352417], + [4.849493980407715, 0.11619415879249573], + [6.365400314331055, -2.9796109199523926], + [-2.457500696182251, 2.158465623855591], + [3.5700507164001465, 1.0810277462005615], + [2.344585418701172, 5.350245475769043], + [6.166741371154785, -3.894188642501831], + [2.4071505069732666, -7.345358371734619], + [1.637054443359375, -7.724184036254883], + [2.2762339115142822, -3.4752776622772217], + [0.010936014354228973, 9.813268661499023], + [-1.3853418827056885, -3.9452009201049805], + [0.6858227849006653, -4.607030868530273], + [0.03702609986066818, 11.956926345825195], + [-3.593642473220825, 4.186800956726074], + [-1.9901171922683716, 2.41907000541687], + [4.185452461242676, -3.0561912059783936], + [2.0709259510040283, -5.559092998504639], + [-5.284101486206055, 6.043638229370117], + [0.05600660294294357, 12.571581840515137], + [2.194610595703125, 2.688183546066284], + [1.8169453144073486, 3.574432611465454], + [7.090724468231201, -1.735028862953186], + [-5.122525691986084, 4.123049736022949], + [8.204404830932617, -2.180593490600586], + [1.2049760818481445, -0.35013246536254883], + [6.414623737335205, -5.828198432922363], + [-4.453889846801758, -6.276322364807129], + [6.247066974639893, 8.045978546142578], + [2.082674264907837, 2.468083143234253], + [2.570641040802002, -7.569408416748047], + [-2.226261854171753, -3.299652338027954], + [-5.559310436248779, 6.023277282714844], + [6.112902641296387, -1.382648229598999], + [1.742032766342163, 0.9922088384628296], + [-1.3652184009552002, 1.4556174278259277], + [3.987109899520874, 6.2833027839660645], + [0.37337344884872437, 10.776334762573242], + [-1.8417397737503052, -3.131805181503296], + [-3.5499773025512695, -1.3073593378067017], + [-2.387911558151245, 2.411529302597046], + [4.90983247756958, -1.8450978994369507], + [-3.788606882095337, -2.934636354446411], + [2.9661858081817627, -4.163517951965332], + [2.881206512451172, 6.341080188751221], + [0.08323400467634201, 11.428625106811523], + [5.058237552642822, -1.7255407571792603], + [6.357540607452393, -1.0660203695297241], + [1.3451038599014282, 4.915403366088867], + [-2.391627550125122, 1.751562476158142], + [-6.8704142570495605, 1.954196572303772], + [3.2475287914276123, -3.8064842224121094], + [8.297226905822754, -2.6307613849639893], + [3.1941475868225098, -4.828454494476318], + [3.8633620738983154, -2.136878252029419], + [3.509417772293091, -3.5660603046417236], + [1.0168635845184326, -6.859152793884277], + [1.6200711727142334, 1.312790870666504], + [2.520179033279419, -8.19996452331543], + [-1.4014798402786255, 0.4786432385444641], + [-4.943974494934082, 6.429482936859131], + [-3.748861074447632, 7.037693500518799], + [-1.264864206314087, 1.8099355697631836], + [-4.640202522277832, 5.225004196166992], + [4.955598831176758, -6.045849800109863], + [3.1837990283966064, -2.8994054794311523], + [3.483009099960327, -5.823136806488037], + [3.356900453567505, 4.9912109375], + [0.15923529863357544, 10.281994819641113], + [0.1605178713798523, 10.321102142333984], + [-2.3202219009399414, 0.7415593862533569], + [3.1596486568450928, -4.447164535522461], + [2.6731927394866943, -8.182533264160156], + [8.677565574645996, -2.4070956707000732], + [0.47476696968078613, -0.9196375608444214], + [0.49660927057266235, -0.8368399739265442], + [-4.129535675048828, -3.017648935317993], + [-5.222560405731201, -1.3850404024124146], + [-4.37422513961792, -3.5177533626556396], + [-6.523179531097412, 7.547217845916748], + [-1.7505145072937012, 1.704472303390503], + [-4.646660327911377, 6.052319049835205], + [-0.010461576282978058, 9.821301460266113], + [-1.8780726194381714, 2.4676451683044434], + [2.957226037979126, -4.212647914886475], + [1.3666654825210571, -0.8627183437347412], + [2.0436720848083496, 3.2426671981811523], + [7.05971097946167, 8.558789253234863], + [9.673370361328125, -2.4011552333831787], + [-3.2874608039855957, -5.970005989074707], + [3.6570961475372314, 1.6394509077072144], + [0.06785183399915695, 12.449272155761719], + [-6.00728178024292, 7.88470983505249], + [3.4318315982818604, 7.410943031311035], + [4.320007801055908, 1.8422695398330688], + [-7.69799280166626, -0.5039125680923462], + [-4.339170932769775, 8.743908882141113], + [2.5801517963409424, -8.77998161315918], + [7.403735160827637, -1.923214077949524], + [-4.556697368621826, 5.813703536987305], + [2.0740716457366943, 5.6951398849487305], + [0.17713147401809692, 10.779525756835938], + [-4.564592361450195, 6.378018379211426], + [1.0210193395614624, 6.719511032104492], + [-4.610464572906494, 6.583749771118164], + [6.309576511383057, -1.4572081565856934], + [5.720545291900635, -1.3229732513427734], + [3.075680732727051, -4.310780048370361], + [-2.5792667865753174, 1.7798008918762207], + [1.7269189357757568, -0.1754736602306366], + [-3.545804500579834, 5.337925910949707], + [1.3546258211135864, 2.881762742996216], + [2.939121961593628, -4.134833812713623], + [2.95102596282959, -10.182596206665039], + [2.877858877182007, -7.817872524261475], + [-2.1875879764556885, 1.5622979402542114], + [8.284186363220215, -2.2502529621124268], + [3.3034369945526123, -4.493161201477051], + [-7.204659938812256, -0.19990026950836182], + [-6.565737724304199, 7.056365966796875], + [-6.235702991485596, 4.9850921630859375], + [-5.1289825439453125, -5.47542667388916], + [-5.1273884773254395, -8.186372756958008], + [9.40061092376709, -2.4547369480133057], + [3.008887767791748, -4.125578880310059], + [-4.728784084320068, -1.5017489194869995], + [10.8271484375, -2.4801249504089355], + [-2.2270846366882324, 2.601562261581421], + [0.046146027743816376, 9.5482177734375], + [9.049249649047852, -2.3839757442474365], + [6.158782482147217, -2.632922410964966], + [2.519820213317871, 1.9230904579162598], + [5.287626266479492, -0.2366003841161728], + [-0.3259430527687073, -1.9972270727157593], + [5.772077560424805, -3.0404136180877686], + [4.545329570770264, -3.773526430130005], + [3.846606492996216, 1.5735129117965698], + [-2.040534019470215, -3.3001863956451416], + [0.7022104859352112, 7.549242973327637], + [-3.6128125190734863, -2.129511594772339], + [0.2162153720855713, 11.211732864379883], + [0.3779931366443634, -0.4274817109107971], + [-0.49100393056869507, -1.9768725633621216], + [3.5061686038970947, -8.374429702758789], + [-4.912819862365723, -2.97263240814209], + [-0.7948121428489685, -3.1380012035369873], + [0.16963762044906616, 10.031742095947266], + [0.05027657002210617, 14.112970352172852], + [-1.2829551696777344, 1.1454428434371948], + [-3.712390184402466, -5.647649765014648], + [-5.881947994232178, -0.7453451156616211], + [-5.997312545776367, 6.940202713012695], + [3.271557569503784, -4.612419128417969], + [0.6134676933288574, 5.306887626647949], + [-4.725597858428955, 5.045178413391113], + [1.7314523458480835, 5.698437690734863], + [-2.348809242248535, -4.084774494171143], + [3.4959981441497803, -4.774641513824463], + [6.642369747161865, 8.227155685424805], + [-5.526612281799316, 7.037082672119141], + [-4.702426910400391, -6.269534111022949], + [7.389763355255127, -1.885311484336853], + [6.046407222747803, -0.7657771110534668], + [4.4746317863464355, -4.167761325836182], + [-4.182644844055176, -6.530178546905518], + [9.443410873413086, -2.3489339351654053], + [-4.511765956878662, 3.7544565200805664], + [2.09828782081604, 0.18921050429344177], + [-2.5372731685638428, 1.9803653955459595], + [-5.544467926025391, -3.466219663619995], + [3.0554497241973877, -6.922671318054199], + [1.8267619609832764, -6.82381534576416], + [-3.3111743927001953, -4.135573863983154], + [-3.421508550643921, -4.064393997192383], + [0.16253352165222168, 9.481303215026855], + [-5.298617839813232, -2.059203863143921], + [6.103546142578125, -1.335058331489563], + [-4.532555103302002, -0.5643318295478821], + [0.21720612049102783, 11.427030563354492], + [4.482917308807373, -2.818352460861206], + [-4.991888046264648, 6.250333786010742], + [3.540754795074463, -4.1363654136657715], + [5.840149402618408, -2.011754035949707], + [-3.675550699234009, -5.306614875793457], + [0.04864465445280075, 9.836065292358398], + [0.24214941263198853, 11.802249908447266], + [9.198552131652832, -2.2929999828338623], + [0.40127167105674744, -0.29008206725120544], + [8.824395179748535, -2.516211748123169], + [-6.235111713409424, 0.5935854911804199], + [2.7780508995056152, 4.206938743591309], + [2.997019052505493, -6.613320350646973], + [0.14663159847259521, 10.135157585144043], + [2.5887792110443115, -3.4506020545959473], + [8.428793907165527, -2.342308759689331], + [6.587290287017822, -3.2130134105682373], + [-3.309324026107788, 3.4394495487213135], + [-4.415369510650635, -7.232206344604492], + [3.490823984146118, 6.498215675354004], + [9.615923881530762, -2.4637725353240967], + [-2.727869749069214, -3.881934404373169], + [4.242007732391357, 1.8904452323913574], + [-7.29573392868042, -0.04726863279938698], + [5.820540904998779, -4.4138922691345215], + [2.942896604537964, -4.189240455627441], + [-3.107625722885132, 3.107858419418335], + [5.637203693389893, -1.1456607580184937], + [3.0028505325317383, 6.469493865966797], + [-2.1890151500701904, 2.4492034912109375], + [-3.597698926925659, 2.9754676818847656], + [-3.7007124423980713, -2.588928461074829], + [-3.423190116882324, -1.8161314725875854], + [-0.0057459548115730286, 9.912763595581055], + [-5.469482421875, 5.35161018371582], + [-6.034538269042969, -1.0117340087890625], + [-0.14717966318130493, 14.358236312866211], + [2.6755597591400146, -3.8830037117004395], + [-3.668729782104492, 6.803288459777832], + [9.413748741149902, -2.5121114253997803], + [0.07007163017988205, 11.927530288696289], + [8.655409812927246, -2.2461092472076416], + [9.738259315490723, -2.4408113956451416], + [-3.6727049350738525, -5.953937530517578], + [3.799344539642334, 5.250107288360596], + [1.1359436511993408, -0.18368415534496307], + [2.081880807876587, 2.3252310752868652], + [-3.751304864883423, 6.647139549255371], + [-1.009099006652832, 1.5888444185256958], + [-0.04951757937669754, 13.223522186279297], + [-3.8795013427734375, 0.8776577711105347], + [-1.1084455251693726, -3.5052597522735596], + [3.7239370346069336, -3.4558136463165283], + [-2.116288423538208, 2.549630880355835], + [-0.13628029823303223, 9.523551940917969], + [-4.410593509674072, -6.631485939025879], + [2.658228635787964, -0.03473407402634621], + [3.064603805541992, 4.692045211791992], + [0.324984610080719, 11.52862548828125], + [-4.168981552124023, 5.697259902954102], + [2.9374420642852783, -2.7215256690979004], + [4.670854091644287, -0.0605049766600132], + [4.341639041900635, 6.893255233764648], + [-2.5018277168273926, 1.6542199850082397], + [2.1777312755584717, -4.555716037750244], + [-3.9686367511749268, -6.439784526824951], + [0.10985486954450607, 12.11317253112793], + [2.490429639816284, 4.37680721282959], + [4.337843418121338, -3.6716463565826416], + [5.644690990447998, 6.867067337036133], + [3.018759250640869, 0.8792519569396973], + [0.40776342153549194, 10.434331893920898], + [-2.749549627304077, -4.0778608322143555], + [5.963229656219482, 8.027969360351562], + [8.736238479614258, -2.2873833179473877], + [-4.949980735778809, -1.2228443622589111], + [-5.961170196533203, 0.10024923086166382], + [0.31079137325286865, -0.4487230181694031], + [7.159267902374268, -3.00189471244812], + [-2.1301398277282715, 2.537447929382324], + [6.675517559051514, 8.021820068359375], + [-2.320446014404297, 0.8916317820549011], + [7.750990867614746, -2.024667978286743], + [-5.537569999694824, -0.10171675682067871], + [7.560314655303955, -6.723124980926514], + [2.9757237434387207, 0.7808257341384888], + [2.4438087940216064, 6.623435974121094], + [-2.6532516479492188, -1.5765681266784668], + [5.8726277351379395, -5.262284755706787], + [0.019538216292858124, 9.470110893249512], + [-2.667828321456909, -3.8638970851898193], + [-3.074784994125366, -3.9306018352508545], + [3.458406448364258, -4.899966716766357], + [-5.462291717529297, -1.8989351987838745], + [2.4304568767547607, 2.050997018814087], + [1.3596608638763428, 5.82997989654541], + [6.725673198699951, -5.768283843994141], + [2.399294137954712, 5.649069786071777], + [7.823220729827881, -2.0634615421295166], + [-2.0721774101257324, 2.5040433406829834], + [3.8279409408569336, -3.675719976425171], + [-1.6908338069915771, -3.8034298419952393], + [-5.193801403045654, -7.255222320556641], + [8.199389457702637, 9.57987117767334], + [-0.8234996199607849, 0.4208262264728546], + [4.004539966583252, -8.702596664428711], + [-5.0351033210754395, -8.000089645385742], + [-1.7247947454452515, 1.5553480386734009], + [2.790611505508423, -7.897403717041016], + [3.9730942249298096, 1.7985957860946655], + [-2.0677473545074463, 2.421555757522583], + [-2.759892702102661, -3.0843427181243896], + [0.10136931389570236, 12.384788513183594], + [1.938516616821289, 5.7422895431518555], + [8.90244197845459, -2.4498302936553955], + [-1.649385929107666, -4.740193843841553], + [-1.4231104850769043, 1.7454602718353271], + [-3.9499826431274414, -3.95699405670166], + [-4.4057936668396, -2.9338743686676025], + [-3.453258752822876, 3.3310763835906982], + [1.8571443557739258, -6.57313346862793], + [-3.9029269218444824, 6.25343132019043], + [3.1834192276000977, -3.4566190242767334], + [4.538100242614746, -7.4132184982299805], + [0.12644213438034058, 9.736199378967285], + [6.2978363037109375, -1.4534791707992554], + [0.31089553236961365, -0.5162590146064758], + [2.4386048316955566, -8.804557800292969], + [2.5165555477142334, -7.754593849182129], + [-5.181674480438232, -3.0074660778045654], + [-5.143300533294678, -1.2153228521347046], + [9.440557479858398, -2.297712564468384], + [3.612541437149048, 6.366342544555664], + [-5.013396739959717, -1.8867894411087036], + [-2.419426679611206, -1.4491814374923706], + [-2.0982868671417236, 2.615924119949341], + [5.67986536026001, 7.760834693908691], + [3.639678955078125, -3.4822638034820557], + [-2.4300737380981445, 1.5889118909835815], + [-5.333856105804443, -1.3555160760879517], + [-0.0645519569516182, 9.567398071289062], + [3.033418655395508, -7.197340965270996], + [-0.039867766201496124, 12.373859405517578], + [2.5369038581848145, -7.910757064819336], + [2.9298415184020996, -10.12587833404541], + [1.6702347993850708, -0.1134316623210907], + [-1.4916198253631592, 1.442891240119934], + [0.509287416934967, -1.260029911994934], + [-1.6172140836715698, -0.3052942454814911], + [3.55464506149292, -3.2787866592407227], + [2.6462154388427734, -8.253583908081055], + [-3.1090855598449707, -4.387076377868652], + [5.035483360290527, -0.8071856498718262], + [2.195925235748291, 0.26218023896217346], + [0.23050552606582642, 11.461240768432617], + [-0.42939287424087524, -2.814725637435913], + [4.097683429718018, 1.62168288230896], + [3.74702525138855, -7.7054901123046875], + [7.054944038391113, -1.9543805122375488], + [4.793615818023682, 6.499271869659424], + [0.11171673983335495, 9.797173500061035], + [2.0672643184661865, 5.329174518585205], + [6.643813610076904, -1.4659349918365479], + [5.201361179351807, -1.196290135383606], + [3.6725547313690186, 1.3642604351043701], + [-0.11606726795434952, -1.6361333131790161], + [-5.698642730712891, 4.063115119934082], + [1.6516085863113403, 0.304442822933197], + [3.00775146484375, -4.293992042541504], + [-5.096742153167725, -1.171521782875061], + [0.1500535011291504, 0.25002238154411316], + [3.4016363620758057, -3.8512632846832275], + [-3.928495168685913, -5.45323371887207], + [-4.237887859344482, -0.35792165994644165], + [-5.3040289878845215, 4.146720886230469], + [-6.55702018737793, 5.312728404998779], + [-4.439657688140869, 4.612500190734863], + [3.1856679916381836, -3.6571078300476074], + [7.226288795471191, -1.9811714887619019], + [1.796211838722229, 0.6459513902664185], + [3.8795368671417236, -7.492611885070801], + [7.63993501663208, -2.185478925704956], + [-4.775966167449951, 9.040372848510742], + [2.8460826873779297, -0.45483481884002686], + [2.5797743797302246, -3.7473673820495605], + [4.092064380645752, -3.053684711456299], + [1.9258203506469727, 0.7427022457122803], + [7.882361888885498, -2.1827800273895264], + [2.662635564804077, -8.707130432128906], + [-0.3988471031188965, 1.3069738149642944], + [-2.1545560359954834, 2.700636863708496], + [6.530393123626709, -1.48348867893219], + [3.8513307571411133, -3.3508217334747314], + [8.77828311920166, -2.388474941253662], + [-3.8758795261383057, -0.5763862729072571], + [-5.755184650421143, 6.731101036071777], + [-4.2942376136779785, -6.800370693206787], + [0.6287221312522888, -1.0150398015975952], + [-6.3607096672058105, -0.8317797780036926], + [-2.570366859436035, 2.1258859634399414], + [-4.489316463470459, -5.199064254760742], + [0.45963340997695923, -0.8789992332458496], + [-2.726705312728882, -3.0527145862579346], + [2.4188883304595947, -8.28351879119873], + [-4.336973190307617, 4.557160377502441], + [4.492822647094727, -4.068071365356445], + [-4.362311840057373, 5.53946590423584], + [0.6410815119743347, 8.518218040466309], + [4.213550090789795, -3.843670129776001], + [-2.3256540298461914, 0.2014346718788147], + [-8.219927787780762, -0.579848051071167], + [0.7177547812461853, 5.884881973266602], + [3.148674249649048, -4.296346664428711], + [-2.3020260334014893, 2.5209109783172607], + [-3.9839296340942383, -1.8581615686416626], + [-4.997246265411377, 3.807471513748169], + [6.452925205230713, -4.952666759490967], + [6.405013561248779, 8.015588760375977], + [-0.06363768130540848, 13.756229400634766], + [1.981801986694336, 5.201934814453125], + [-4.069531440734863, -0.49154531955718994], + [3.055464267730713, -3.754606008529663], + [6.911744594573975, -2.4250974655151367], + [0.22495180368423462, 11.100323677062988], + [-5.24414587020874, -2.6110661029815674], + [-3.428913116455078, -5.871163845062256], + [-2.0859463214874268, 2.3817203044891357], + [-1.6919974088668823, 0.8922554850578308], + [6.6717143058776855, 8.1787748336792], + [0.9013254046440125, -0.4883376955986023], + [-3.2508385181427, -1.9867924451828003], + [-6.32309103012085, -1.052789568901062], + [-0.4299996495246887, 1.1186809539794922], + [6.373571395874023, -1.4276392459869385], + [2.4815285205841064, -2.0638272762298584], + [5.786159038543701, -0.8787945508956909], + [-2.432939291000366, 0.9936717748641968], + [-3.2974114418029785, -5.435209274291992], + [3.0618577003479004, 1.1561576128005981], + [2.98474383354187, 0.6868481040000916], + [2.381988286972046, 5.0073652267456055], + [4.480835437774658, -0.9957001209259033], + [-1.094500184059143, -3.523538827896118], + [6.4492878913879395, 7.943967342376709], + [1.9125369787216187, 4.296884536743164], + [0.21107524633407593, 11.897359848022461], + [-4.118815898895264, -5.042269706726074], + [-4.930520534515381, 5.354216575622559], + [7.181366443634033, 8.874930381774902], + [2.6611287593841553, -6.172093868255615], + [9.45106029510498, -2.371007204055786], + [5.867403984069824, 7.388927936553955], + [0.10801691561937332, -1.5655375719070435], + [-4.369734287261963, -0.918769896030426], + [-0.5657731890678406, 0.7904232144355774], + [-2.496666669845581, 2.4457545280456543], + [-2.5293445587158203, 2.3507492542266846], + [-2.841501235961914, 2.378634452819824], + [9.287160873413086, -2.314039945602417], + [-2.7956182956695557, -1.6690527200698853], + [7.239282608032227, 8.730396270751953], + [0.6236371994018555, -4.9096999168396], + [-1.1674134731292725, 1.6117308139801025], + [6.279839992523193, -1.5863794088363647], + [-4.985919952392578, 4.404534816741943], + [7.344915866851807, 8.93894100189209], + [-4.0745649337768555, -6.037779808044434], + [3.314711093902588, -7.088576793670654], + [5.280333995819092, -1.7615206241607666], + [0.46337395906448364, 11.254870414733887], + [-7.268103122711182, -0.15124404430389404], + [-2.4340386390686035, -2.784132719039917], + [-0.9546780586242676, -2.274085760116577], + [8.254912376403809, -2.2383861541748047], + [0.012410692870616913, 12.97401237487793], + [-5.358806610107422, -1.5014610290527344], + [0.058358125388622284, 9.988463401794434], + [-4.377493381500244, 6.150732517242432], + [-2.4786195755004883, 1.009498953819275], + [-1.016249418258667, 0.7726333737373352], + [0.5555494427680969, 12.165265083312988], + [-6.745299816131592, 8.33064079284668], + [-1.174682378768921, 1.6585556268692017], + [-2.739258050918579, 2.2179131507873535], + [2.8511760234832764, -4.170965671539307], + [3.141587972640991, 0.9886391162872314], + [-0.013180084526538849, 13.727204322814941], + [2.5545547008514404, 0.8819319009780884], + [-2.007446527481079, 2.2151987552642822], + [-2.552772045135498, 2.3106963634490967], + [-5.434566020965576, 6.822511672973633], + [0.24442178010940552, -1.2825180292129517], + [-4.302640438079834, -3.78836727142334], + [-0.15346407890319824, 9.614532470703125], + [-0.050441570580005646, 11.761643409729004], + [3.643449544906616, 6.961662292480469], + [-2.1752917766571045, 2.639636754989624], + [-2.3603217601776123, 2.317072629928589], + [2.2695767879486084, 2.3768794536590576], + [2.7953855991363525, -3.36338472366333], + [-4.372313499450684, -7.00643253326416], + [5.7433342933654785, -3.0356056690216064], + [-0.5020079612731934, -1.0162241458892822], + [9.214505195617676, -2.382155656814575], + [-4.3857035636901855, -5.816327095031738], + [3.6051268577575684, -7.552996635437012], + [3.5623068809509277, -3.829596757888794], + [0.056675516068935394, -1.580718994140625], + [6.123014450073242, -2.7550289630889893], + [-2.3454999923706055, 2.3952724933624268], + [4.053770542144775, 1.4846891164779663], + [8.738631248474121, -2.394169569015503], + [9.776487350463867, -2.40873646736145], + [2.48217511177063, -6.126217365264893], + [4.0680623054504395, 1.3421114683151245], + [-5.228072643280029, 4.573690414428711], + [2.3106935024261475, 5.063213348388672], + [6.0493597984313965, -3.6951820850372314], + [7.705587387084961, -2.1352288722991943], + [5.708885669708252, 7.401869773864746], + [7.423375606536865, -1.9256149530410767], + [4.7298150062561035, 7.369178295135498], + [3.985727548599243, -8.549339294433594], + [2.41790509223938, 3.866356611251831], + [4.897259712219238, 6.619785308837891], + [-5.466794490814209, 4.834257125854492], + [2.8070898056030273, 4.481743335723877], + [-3.7910799980163574, 0.7101823091506958], + [3.065753698348999, -4.339421272277832], + [3.158942699432373, -4.369253635406494], + [-3.9260313510894775, 3.5926177501678467], + [-0.42978161573410034, 0.49870407581329346], + [7.240078449249268, -5.460442543029785], + [1.9617588520050049, -3.122081756591797], + [0.26157766580581665, 11.323463439941406], + [6.666905879974365, -1.4109125137329102], + [-4.81942892074585, -6.973876953125], + [-0.1654621660709381, -1.172224521636963], + [-5.09048318862915, -3.4089086055755615], + [0.25329941511154175, 11.2107572555542], + [0.07712893933057785, 11.782022476196289], + [3.926098108291626, -3.5739424228668213], + [-4.393231391906738, 4.028106212615967], + [2.902562379837036, -4.050599098205566], + [0.07695078104734421, 11.902034759521484], + [-3.048866033554077, 2.862701416015625], + [0.23569554090499878, 11.023658752441406], + [3.3769073486328125, -5.460533142089844], + [-2.161374568939209, 2.675997257232666], + [7.529380798339844, -2.083894968032837], + [1.7657508850097656, -0.3435603380203247], + [8.985152244567871, -2.327505350112915], + [-1.9484093189239502, 0.8670998811721802], + [-0.8407505750656128, 1.5430666208267212], + [5.462963581085205, 7.018941879272461], + [-3.620002031326294, -5.561485767364502], + [0.8115014433860779, 0.4818662405014038], + [3.8262903690338135, -7.169073581695557], + [-4.5549187660217285, -1.7884894609451294], + [2.9838149547576904, 1.3038393259048462], + [3.3136184215545654, -8.73779296875], + [-2.478342294692993, 2.1412100791931152], + [-6.784210205078125, 7.920452117919922], + [6.877036094665527, 8.541513442993164], + [7.629551887512207, -2.0146164894104004], + [5.623403549194336, -2.2799317836761475], + [-1.7808047533035278, -3.729806661605835], + [-3.503192186355591, -4.6267008781433105], + [0.3546801805496216, -3.7834370136260986], + [-4.0583295822143555, 3.789445161819458], + [2.646031618118286, -8.662010192871094], + [-2.420804023742676, 1.4819573163986206], + [0.3547181487083435, 10.232580184936523], + [1.5056512355804443, -7.481487274169922], + [9.39253044128418, -2.3617937564849854], + [3.285921335220337, -4.800749778747559], + [-7.80922794342041, -0.4239068031311035], + [-3.0709164142608643, -0.47693246603012085], + [5.638733863830566, -2.9241702556610107], + [-2.4113872051239014, 2.308443784713745], + [3.302868604660034, 1.0206153392791748], + [5.109345436096191, 6.610674858093262], + [2.6532886028289795, -3.6945745944976807], + [-6.798031806945801, 7.725020408630371], + [4.1175665855407715, -3.7979888916015625], + [0.6767687201499939, 6.827478408813477], + [2.8154470920562744, 0.647476077079773], + [-4.424635887145996, -0.30756211280822754], + [-5.818670749664307, -2.1966817378997803], + [4.262071132659912, -3.7101619243621826], + [6.110739231109619, -1.4882582426071167], + [-4.553628444671631, -7.510059356689453], + [-5.427147388458252, 4.782559394836426], + [-5.494802951812744, 6.467253684997559], + [5.538567066192627, -5.499995231628418], + [-2.797837972640991, 2.0186257362365723], + [-5.824279308319092, 6.743938446044922], + [3.4077537059783936, -5.502402305603027], + [3.4173901081085205, -2.9975883960723877], + [8.545392036437988, -2.2713849544525146], + [6.269449234008789, -1.25900137424469], + [-2.07438588142395, 0.10290586948394775], + [-1.1572858095169067, 1.4797766208648682], + [3.3713796138763428, -8.51722526550293], + [4.987285137176514, -3.9271128177642822], + [2.6322715282440186, -8.031749725341797], + [-1.8767677545547485, 2.5374534130096436], + [-4.528187274932861, -5.896373271942139], + [-0.3177722096443176, 0.9413046836853027], + [9.644269943237305, -2.4385387897491455], + [3.427990674972534, 6.072931289672852], + [-4.891376972198486, -2.558354616165161], + [-6.4923906326293945, 7.221987724304199], + [2.598024606704712, -3.6340415477752686], + [-0.8832306265830994, -3.175907850265503], + [0.1932908296585083, 11.05180835723877], + [2.6800496578216553, -3.5633811950683594], + [1.966048002243042, -8.183499336242676], + [3.063328981399536, -5.254173278808594], + [-2.486436605453491, 1.3485265970230103], + [8.889264106750488, -2.3045005798339844], + [-4.020932197570801, -1.2691620588302612], + [0.6292745471000671, -0.9384446144104004], + [-1.478525996208191, -1.1182447671890259], + [3.346923589706421, -4.7634382247924805], + [-4.333308696746826, -6.239467620849609], + [3.42745041847229, -7.899003982543945], + [5.905355453491211, -2.9571120738983154], + [-2.294494390487671, 2.1021475791931152], + [0.02115427702665329, 9.258134841918945], + [-1.2298215627670288, 0.8518618941307068], + [8.22371768951416, -2.242380142211914], + [-1.8637882471084595, 2.4718120098114014], + [1.076218605041504, -0.41777610778808594], + [5.494631290435791, 7.855279922485352], + [2.99692702293396, -3.4150009155273438], + [-5.0269598960876465, 3.915395498275757], + [0.1772192120552063, 10.316672325134277], + [-5.358240604400635, 5.945862770080566], + [2.6344285011291504, -6.363614082336426], + [-1.447464942932129, 1.3374015092849731], + [-2.8298733234405518, 1.1618518829345703], + [-3.784794569015503, -4.325829029083252], + [4.048679351806641, -7.871422290802002], + [-2.400505542755127, 1.3629364967346191], + [-4.672447204589844, -7.5997700691223145], + [0.026900343596935272, 12.110383033752441], + [-1.5040584802627563, 3.4353294372558594], + [2.5609896183013916, -7.730189323425293], + [-2.371713638305664, 1.227639079093933], + [3.7060911655426025, -5.546583652496338], + [-5.2453227043151855, 5.352519989013672], + [-5.755777835845947, 6.760361671447754], + [2.5667240619659424, -8.233139038085938], + [0.34314674139022827, 11.583900451660156], + [-2.0144379138946533, 2.4929182529449463], + [-4.504581928253174, -7.044521808624268], + [-4.447854995727539, 3.8357698917388916], + [2.547318935394287, 4.074794769287109], + [3.1631662845611572, 0.6962114572525024], + [8.24919605255127, -2.237589120864868], + [-4.376866340637207, -6.595944404602051], + [8.137974739074707, -2.3526992797851562], + [2.2597908973693848, -2.517430543899536], + [3.2214620113372803, 1.1252449750900269], + [0.4962453842163086, 0.1914108246564865], + [-5.157945156097412, -3.2347028255462646], + [-2.6231818199157715, 0.7939967513084412], + [6.769387722015381, -1.58938467502594], + [-2.9672114849090576, -3.6259047985076904], + [2.3455312252044678, -9.431368827819824], + [5.392828464508057, -8.108175277709961], + [4.463526248931885, 1.9458606243133545], + [-1.0075668096542358, -0.27826523780822754], + [3.830615997314453, -3.5591771602630615], + [6.35193395614624, -1.0415383577346802], + [3.628514528274536, -6.908146381378174], + [-4.475845813751221, 5.74260139465332], + [0.8920060992240906, -0.8063966035842896], + [2.494745969772339, 5.338086128234863], + [4.471139430999756, -2.3869197368621826], + [-2.392505168914795, 2.1046271324157715], + [1.6859204769134521, -6.794480323791504], + [9.152005195617676, -2.3374412059783936], + [-2.4712791442871094, 2.1360793113708496], + [0.2540232539176941, -1.2029298543930054], + [-2.550960063934326, 2.5291738510131836], + [2.3825302124023438, -7.437254428863525], + [3.3352091312408447, -1.5582040548324585], + [3.9390461444854736, 1.2100516557693481], + [6.127985954284668, -1.346713900566101], + [9.940906524658203, -2.314931631088257], + [2.66166615486145, -7.5367841720581055], + [-1.1773415803909302, -4.056402206420898], + [8.130576133728027, -1.9646633863449097], + [2.4930784702301025, -7.0079851150512695], + [3.5944950580596924, -5.3539958000183105], + [-5.189541339874268, 5.830327987670898], + [-4.665419578552246, 3.694823741912842], + [6.062829494476318, 7.516973495483398], + [1.5063090324401855, 5.516668319702148], + [-5.923696041107178, 6.901383399963379], + [2.235780715942383, -8.474063873291016], + [3.326674699783325, -4.301078796386719], + [-4.280422687530518, -6.367206573486328], + [-0.6158205270767212, 9.023487091064453], + [-0.03497924655675888, -1.6743766069412231], + [0.24437296390533447, 10.883024215698242], + [-2.467581272125244, 1.5225894451141357], + [6.776846885681152, -3.537663698196411], + [3.1968584060668945, -6.915505886077881], + [-3.1533682346343994, 5.213944435119629], + [10.050841331481934, -2.415705442428589], + [5.379104137420654, -1.0394046306610107], + [6.469283580780029, -2.6533782482147217], + [-0.04116935282945633, 9.62942886352539], + [3.353008985519409, -3.9320075511932373], + [-2.4160311222076416, 1.8345863819122314], + [-0.06799191981554031, 13.061065673828125], + [8.453694343566895, -2.3197011947631836], + [-4.707828044891357, 5.554651260375977], + [-7.28191614151001, 8.515504837036133], + [-1.1990537643432617, 0.9282751083374023], + [4.560725688934326, 1.9677790403366089], + [8.660988807678223, -2.3393914699554443], + [-0.09744704514741898, 8.869351387023926], + [-4.578180313110352, -7.054254531860352], + [2.043308973312378, 5.198141098022461], + [-5.612460136413574, -1.2714580297470093], + [0.16025054454803467, 9.63818359375], + [6.240530490875244, -3.0237841606140137], + [0.5226554274559021, -0.9640026688575745], + [0.25708717107772827, 11.04545783996582], + [0.12081020325422287, 11.139655113220215], + [-4.599454402923584, -6.183232307434082], + [0.25626903772354126, 10.908292770385742], + [3.8988170623779297, 1.5381742715835571], + [-3.558053731918335, -5.645066261291504], + [3.106562852859497, -2.847639799118042], + [-1.6081781387329102, -4.256277084350586], + [1.1899349689483643, 4.708981513977051], + [1.9210846424102783, 0.46715885400772095], + [5.006536483764648, 6.996206760406494], + [0.4900413155555725, 12.25189208984375], + [5.94545841217041, 7.729879856109619], + [2.1179888248443604, 0.30216360092163086], + [1.7785084247589111, -2.0539305210113525], + [1.3891620635986328, 1.0425931215286255], + [-4.816044330596924, -6.894506931304932], + [3.121492624282837, -8.993812561035156], + [8.712420463562012, -2.271996259689331], + [-4.178308963775635, 3.8690741062164307], + [-5.461050510406494, -3.395879030227661], + [-0.5361227989196777, 5.958306789398193], + [2.9012839794158936, -8.86954116821289], + [-1.6790525913238525, 2.0449302196502686], + [1.434013843536377, 4.855566501617432], + [-2.536419153213501, 2.1800332069396973], + [-3.001796007156372, -2.0313589572906494], + [7.167960166931152, -1.4224387407302856], + [-4.078668117523193, 3.749969482421875], + [3.499990701675415, -3.550607681274414], + [6.658302307128906, -4.398604393005371], + [3.5110487937927246, 1.0212299823760986], + [9.071911811828613, -2.2524561882019043], + [-1.4900684356689453, -4.066258430480957], + [6.294303894042969, -1.3752291202545166], + [-0.07400006800889969, 9.332498550415039], + [-4.112092971801758, -5.781669616699219], + [2.048283338546753, 1.7213256359100342], + [6.126807689666748, -5.454042434692383], + [3.1309289932250977, 0.6723616123199463], + [3.538604497909546, -3.618968963623047], + [1.5441157817840576, -6.106583118438721], + [8.426263809204102, -2.3072683811187744], + [2.250002145767212, 1.2797973155975342], + [2.065190076828003, 0.11182144284248352], + [5.163995265960693, -1.0531940460205078], + [-4.702916145324707, -7.155643463134766], + [-3.2960784435272217, -0.9926322102546692], + [-5.360134601593018, 4.278214454650879], + [-2.1009905338287354, 2.5839414596557617], + [0.11072712391614914, 10.226358413696289], + [1.060135841369629, -0.18049509823322296], + [3.9022953510284424, 1.8638705015182495], + [-4.7991437911987305, 6.899308204650879], + [8.051855087280273, -2.434250593185425], + [4.576467037200928, -3.564995527267456], + [-0.05200041085481644, 9.747171401977539], + [0.30559706687927246, 10.443456649780273], + [5.642487049102783, 7.553011417388916], + [-2.4335274696350098, 2.4267830848693848], + [-2.926847219467163, -2.598783016204834], + [3.4953134059906006, -6.260501861572266], + [2.33245587348938, 4.185091018676758], + [0.1550121307373047, 10.044193267822266], + [-4.9336018562316895, -2.826432943344116], + [3.4597132205963135, -3.9908573627471924], + [-4.811681270599365, -3.1310319900512695], + [3.3280906677246094, -5.169242858886719], + [7.475129127502441, -1.7361326217651367], + [-2.616267204284668, 2.003498077392578], + [-5.117550373077393, -0.6412315964698792], + [1.4311124086380005, -3.8341376781463623], + [7.688553333282471, -1.9794564247131348], + [-2.2395713329315186, 2.3087656497955322], + [3.0926496982574463, 1.0184983015060425], + [-1.5509891510009766, 2.180687427520752], + [-3.488790273666382, -5.630563735961914], + [3.617981433868408, 1.01490318775177], + [1.9100580215454102, 5.295511722564697], + [8.412896156311035, -2.2894375324249268], + [-0.8747779726982117, 1.7965258359909058], + [-3.5750925540924072, 5.870266914367676], + [-1.0738950967788696, -3.6169321537017822], + [-3.1121089458465576, -5.374325752258301], + [0.03541826456785202, 9.687824249267578], + [-4.0417985916137695, 0.7285789251327515], + [-3.298159599304199, -5.997137069702148], + [9.822415351867676, -2.50115966796875], + [-3.5285708904266357, -4.862548828125], + [0.8850204348564148, 5.511975288391113], + [-0.039554186165332794, 9.767276763916016], + [-0.8336672186851501, -2.794797897338867], + [2.4007670879364014, 3.8509018421173096], + [0.21374553442001343, 10.471793174743652], + [5.805384159088135, -1.5868453979492188], + [5.587884426116943, -4.999417304992676], + [2.4604763984680176, -7.640322208404541], + [1.9810516834259033, 2.381314516067505], + [9.684996604919434, -2.473737955093384], + [-3.879338026046753, -6.000268936157227], + [0.2936713397502899, -5.409143924713135], + [-2.2396116256713867, 2.253270387649536], + [-4.610288143157959, -7.138301849365234], + [7.008464336395264, -2.0333592891693115], + [-0.06336421519517899, -1.7069975137710571], + [5.173409938812256, -5.259616851806641], + [3.886657953262329, -3.6873908042907715], + [8.378503799438477, -2.2887141704559326], + [-7.075796604156494, 8.222962379455566], + [-5.4550909996032715, 6.497013092041016], + [0.09490691870450974, 12.100042343139648], + [5.8367180824279785, 7.940227508544922], + [7.293534755706787, 8.6915283203125], + [3.013821840286255, -4.257083892822266], + [-0.11758691817522049, -1.5162140130996704], + [2.5485503673553467, 4.713564872741699], + [3.8107614517211914, -5.234309673309326], + [0.9481781125068665, -5.7692646980285645], + [3.6898224353790283, 6.605222225189209], + [6.5884928703308105, -2.149726629257202], + [3.7672224044799805, -2.4457709789276123], + [7.503511428833008, -2.169314384460449], + [2.204113721847534, -8.885154724121094], + [6.678158283233643, 8.317626953125], + [-2.6524035930633545, 1.9766355752944946], + [-0.07029754668474197, 13.526371002197266], + [-7.413054943084717, -0.5642850399017334], + [-0.7949173450469971, -2.504986524581909], + [-2.636476516723633, -3.3462512493133545], + [4.3837666511535645, 7.454465389251709], + [-6.943458080291748, -0.3749244213104248], + [0.6891136765480042, 0.8328235149383545], + [8.908378601074219, -2.3179404735565186], + [-3.7974464893341064, -5.244525909423828], + [4.870449066162109, 7.680765151977539], + [0.004270546138286591, 12.793545722961426], + [-4.179787635803223, -1.1109073162078857], + [0.26030099391937256, 11.852010726928711], + [8.829031944274902, -2.327285051345825], + [4.01108980178833, -3.6408677101135254], + [3.8794729709625244, 1.9133505821228027], + [3.395183801651001, 1.0792299509048462], + [-2.0643694400787354, 2.628821611404419], + [-2.841989755630493, -3.750885009765625], + [-4.4413557052612305, -6.55263090133667], + [1.4210927486419678, -6.5106072425842285], + [-3.7680323123931885, -1.3785803318023682], + [3.084961175918579, -4.063547134399414], + [2.8253495693206787, -9.563606262207031], + [2.692908763885498, 3.422250986099243], + [3.1479828357696533, -4.300843715667725], + [-1.0066485404968262, 0.1686023473739624], + [-4.673355579376221, -3.2928526401519775], + [-0.053770728409290314, 13.595964431762695], + [6.970688343048096, 8.638511657714844], + [3.6091718673706055, -3.4713993072509766], + [-4.0633931159973145, -5.524146556854248], + [-5.815462589263916, -1.2873436212539673], + [-4.13923978805542, 4.317958354949951], + [-3.113618850708008, 5.736947059631348], + [3.126169443130493, -4.31151008605957], + [-4.33459997177124, -6.739919662475586], + [0.1922665238380432, 11.014543533325195], + [-4.72732400894165, -2.248042106628418], + [-3.908109426498413, 5.756277084350586], + [1.4861222505569458, 4.858497619628906], + [0.49335259199142456, 3.6517679691314697], + [2.0880751609802246, 8.218358993530273], + [2.9693853855133057, -4.2093963623046875], + [-3.3308541774749756, -5.029916763305664], + [-7.084323406219482, 8.146543502807617], + [1.7367632389068604, -0.211502343416214], + [8.540499687194824, -2.3157198429107666], + [7.128773212432861, -5.863307476043701], + [-5.014110088348389, -3.0233402252197266], + [2.569286346435547, -8.934389114379883], + [-2.2519166469573975, 6.155789375305176], + [-5.556850433349609, 2.513523817062378], + [-3.4825279712677, -5.080940246582031], + [10.867314338684082, -2.5058319568634033], + [2.536752462387085, 6.278067588806152], + [3.2423226833343506, -6.9925312995910645], + [3.1838786602020264, -4.46302604675293], + [8.194271087646484, -2.3358304500579834], + [-1.4014945030212402, -3.4370572566986084], + [2.7011616230010986, -9.292835235595703], + [-5.798262119293213, 4.193083763122559], + [-3.9651129245758057, 3.5353763103485107], + [-4.959606170654297, 4.743295669555664], + [-2.5017356872558594, 1.8746856451034546], + [-4.98903226852417, 6.077192306518555], + [2.3439157009124756, -1.880887508392334], + [-2.6091740131378174, -3.2527637481689453], + [-1.9185209274291992, 2.369326591491699], + [-4.857132434844971, -6.083921432495117], + [-3.954746961593628, -6.320371627807617], + [0.17124199867248535, 10.496959686279297], + [-1.1953284740447998, -3.112304449081421], + [3.032011032104492, -4.302619934082031], + [0.15511834621429443, 12.195367813110352], + [2.244781732559204, 4.992999076843262], + [3.612636089324951, -3.5775511264801025], + [-2.1853320598602295, 2.3107001781463623], + [5.825098037719727, 7.2910871505737305], + [3.9735310077667236, -3.6548078060150146], + [7.08286714553833, -2.1617929935455322], + [-5.040598392486572, 5.856980323791504], + [6.146109580993652, -2.748832941055298], + [3.3687398433685303, -5.305998802185059], + [-2.312471628189087, 2.1841201782226562], + [-4.198714256286621, 4.0241169929504395], + [-4.034572601318359, 3.8751890659332275], + [3.3068084716796875, -7.0620646476745605], + [8.405792236328125, -2.454049825668335], + [2.1646533012390137, 5.656084060668945], + [-0.05098087340593338, 12.559831619262695], + [10.13232707977295, -2.360503911972046], + [1.935079574584961, -6.859988689422607], + [2.4029581546783447, 5.2612199783325195], + [-5.461150646209717, -3.4564292430877686], + [-7.539788246154785, 0.41838717460632324], + [2.007359266281128, 5.762483596801758], + [2.3270604610443115, -9.347639083862305], + [0.6586211919784546, -1.2683507204055786], + [5.359144687652588, 6.86200475692749], + [2.793073892593384, 4.164877891540527], + [2.712416172027588, -8.460551261901855], + [-6.061997413635254, -0.6925827860832214], + [-1.3007547855377197, -0.08485585451126099], + [-2.060436248779297, 2.3418076038360596], + [-5.757172107696533, 4.7413859367370605], + [-2.1511499881744385, 2.1330957412719727], + [6.400491237640381, 7.81488037109375], + [2.0059831142425537, 5.0592827796936035], + [3.412923574447632, -3.762068033218384], + [-4.880661964416504, -5.900966644287109], + [3.9314897060394287, -7.087508201599121], + [3.137202501296997, -3.569993495941162], + [2.946820020675659, -5.573190689086914], + [-4.971794605255127, 3.9977290630340576], + [-5.153565883636475, 7.414834976196289], + [-2.1038856506347656, 1.73383367061615], + [8.287578582763672, -2.2626655101776123], + [-3.6496365070343018, 5.980086326599121], + [5.974462032318115, -2.451244592666626], + [3.7173407077789307, -3.7376534938812256], + [3.422062635421753, -8.14376163482666], + [-1.6801401376724243, -1.5955525636672974], + [7.419341087341309, -2.6271255016326904], + [-3.7293126583099365, -4.988330841064453], + [-3.33237624168396, 6.058032989501953], + [-4.605291366577148, -1.2399755716323853], + [1.66810941696167, -4.87158203125], + [-5.0594682693481445, -4.265398025512695], + [5.979161262512207, -5.000044822692871], + [0.5613985061645508, -4.915198802947998], + [2.4943082332611084, -8.488665580749512], + [3.2805092334747314, -4.7417097091674805], + [5.561005115509033, -1.3509303331375122], + [-3.6985442638397217, -3.2458155155181885], + [7.0504069328308105, -1.9790077209472656], + [-5.239701271057129, 0.02984130010008812], + [-1.1431218385696411, -2.2853682041168213], + [-6.066495418548584, 0.4188348054885864], + [4.27039909362793, 6.446414947509766], + [-4.779635906219482, -6.3573455810546875], + [3.353771924972534, -5.238375663757324], + [-5.121245861053467, 5.704388618469238], + [0.1015041396021843, 9.867667198181152], + [-4.509021759033203, -7.131363868713379], + [2.4389543533325195, 5.153048992156982], + [4.9654927253723145, 7.417102813720703], + [-4.6545844078063965, 1.7707070112228394], + [2.3785829544067383, -5.985677719116211], + [5.727993965148926, -1.1797387599945068], + [-2.7005584239959717, 2.611319065093994], + [7.925971508026123, -1.961693286895752], + [4.077397346496582, -6.126728057861328], + [1.5798466205596924, -7.411526679992676], + [3.467787981033325, -7.007158279418945], + [0.039400212466716766, 9.516263961791992], + [1.4381581544876099, 5.280638694763184], + [-2.024827718734741, 2.429089307785034], + [3.630553960800171, -2.4311490058898926], + [0.5904856324195862, -6.067479610443115], + [-4.433169841766357, -3.4344160556793213], + [-5.333856105804443, -1.1978771686553955], + [-2.4839959144592285, -2.4606034755706787], + [5.972740650177002, -1.3132445812225342], + [2.9412496089935303, -8.521005630493164], + [-2.0970566272735596, 2.546424388885498], + [-1.0155746936798096, -2.545252561569214], + [2.9893648624420166, -8.795568466186523], + [8.979033470153809, -2.3199894428253174], + [2.148777484893799, 0.13932469487190247], + [3.2999258041381836, 0.49545788764953613], + [3.5616607666015625, 1.0706175565719604], + [3.403968572616577, -5.821664333343506], + [-2.6401901245117188, -0.2924094796180725], + [3.2202401161193848, 6.4804792404174805], + [0.0503576323390007, 12.877046585083008], + [5.031879901885986, -1.2025710344314575], + [0.01591508835554123, 12.674488067626953], + [-4.103680610656738, -6.64601993560791], + [2.5800960063934326, -9.150429725646973], + [-4.222537517547607, -6.417415618896484], + [-0.5967352390289307, 0.3441060781478882], + [-1.3487681150436401, 0.8311993479728699], + [-0.1489526629447937, 5.304050445556641], + [5.906365871429443, 7.779392242431641], + [-2.6757519245147705, -4.226255416870117], + [-3.3563218116760254, 6.238250732421875], + [1.4437958002090454, -2.6054975986480713], + [6.476094722747803, -1.4177794456481934], + [-2.4526538848876953, 1.7283188104629517], + [4.5008063316345215, 6.530739784240723], + [10.094931602478027, -2.5460712909698486], + [7.527846336364746, -2.320796012878418], + [2.781435489654541, -8.780506134033203], + [-0.07950491458177567, 13.392440795898438], + [7.765872478485107, -2.592970132827759], + [4.685237407684326, -2.1710333824157715], + [0.18848007917404175, 10.851390838623047], + [5.855769634246826, -1.0243316888809204], + [11.276808738708496, -2.6863150596618652], + [-0.30514490604400635, 0.9370880126953125], + [8.201961517333984, -2.2376761436462402], + [10.247174263000488, -2.376610517501831], + [2.6830861568450928, 3.853036403656006], + [-3.6686904430389404, -3.335376024246216], + [-6.3640666007995605, 7.324398040771484], + [4.390805721282959, 6.917295455932617], + [6.066281795501709, -1.8688244819641113], + [2.913963794708252, -4.077580451965332], + [2.5405428409576416, 1.5478848218917847], + [-4.46978235244751, -6.530947685241699], + [6.444145679473877, 7.773568153381348], + [8.734267234802246, -2.396080732345581], + [0.07307475060224533, 9.474931716918945], + [8.988468170166016, -2.3106777667999268], + [-4.017984867095947, 5.725765228271484], + [2.772862195968628, 1.4713023900985718], + [10.207564353942871, -2.4064319133758545], + [-1.901132583618164, 2.0638232231140137], + [-5.0119500160217285, -0.5967869758605957], + [3.8927972316741943, -3.6228694915771484], + [3.8273580074310303, 6.482119560241699], + [2.5086162090301514, 2.643397569656372], + [-4.411673069000244, -6.485243320465088], + [0.907697856426239, -5.580350399017334], + [2.88942289352417, -7.905434608459473], + [-1.1488516330718994, -3.8659446239471436], + [-7.6042585372924805, -0.6699604988098145], + [-7.3025665283203125, -0.14412403106689453], + [0.35994666814804077, 11.088088989257812], + [2.6331608295440674, -3.7195322513580322], + [8.962082862854004, -2.507012128829956], + [0.7887353897094727, -6.035890579223633], + [-2.3397207260131836, 2.0184316635131836], + [3.015446186065674, -7.882134437561035], + [-1.2775458097457886, 0.46532243490219116], + [-4.779871463775635, 4.9057207107543945], + [1.0674731731414795, -6.6001176834106445], + [0.15186285972595215, 9.785691261291504], + [4.320577144622803, 6.67496919631958], + [-5.067365646362305, 5.085668087005615], + [7.978657245635986, -2.150916814804077], + [6.72658109664917, -1.6785372495651245], + [-2.293785810470581, -4.394599914550781], + [2.0197291374206543, 4.548847198486328], + [-2.221867084503174, 1.2072185277938843], + [-7.083886623382568, -0.8478274345397949], + [4.1200175285339355, -7.400700092315674], + [-3.672889471054077, -2.0031285285949707], + [4.878702640533447, -4.409989356994629], + [3.893167495727539, -3.718812942504883], + [3.832947254180908, -5.925546646118164], + [-2.1051878929138184, 2.0465381145477295], + [-1.9998481273651123, -3.9668288230895996], + [-2.1444694995880127, 2.2422568798065186], + [8.609801292419434, -2.2801692485809326], + [-5.281589031219482, -2.163094997406006], + [4.436068058013916, -4.263113021850586], + [-3.5353376865386963, -5.638458251953125], + [-4.704733371734619, 5.81787633895874], + [0.589565098285675, -0.9096360802650452], + [-4.228695392608643, -1.892825722694397], + [-1.2325425148010254, -2.871915102005005], + [1.4335947036743164, 0.46947962045669556], + [8.684860229492188, -2.5675485134124756], + [-2.381587266921997, 2.3161890506744385], + [-1.7593053579330444, 2.4736263751983643], + [-1.2412666082382202, 0.7387286424636841], + [7.576859951019287, 8.956843376159668], + [-4.414628028869629, 6.589287757873535], + [3.6154909133911133, 6.983806610107422], + [-0.05589780956506729, -1.1957186460494995], + [-5.516841411590576, 4.6439056396484375], + [5.181441783905029, -2.161970376968384], + [-2.7240328788757324, 6.082063674926758], + [3.2006428241729736, 4.638130187988281], + [3.0173799991607666, -4.216487884521484], + [2.009314775466919, -6.674566268920898], + [1.5845729112625122, 3.5706448554992676], + [0.020287804305553436, 9.607854843139648], + [-4.054388046264648, -3.0174720287323], + [11.249342918395996, -2.549943208694458], + [0.19260936975479126, 10.662088394165039], + [2.221855401992798, 2.0895497798919678], + [7.474606990814209, -2.5041654109954834], + [4.917014122009277, -0.8451842069625854], + [0.22271227836608887, -1.3126808404922485], + [7.465125560760498, 8.86107063293457], + [9.389362335205078, -2.4247496128082275], + [-3.657299757003784, 3.63114595413208], + [2.5868494510650635, 3.9739792346954346], + [4.182303428649902, 2.049938440322876], + [3.041125535964966, -3.772935152053833], + [1.187793493270874, -0.5992532968521118], + [-1.6012440919876099, -1.0155171155929565], + [1.7014532089233398, -3.103827953338623], + [4.733057498931885, 6.244152069091797], + [3.0962636470794678, -3.6474320888519287], + [-1.936861515045166, -3.937377691268921], + [6.352649688720703, -1.5242958068847656], + [3.2399520874023438, -3.386371374130249], + [-4.698705196380615, -7.719779014587402], + [-4.339258670806885, 5.7859086990356445], + [-4.341699123382568, -3.3080084323883057], + [2.469984769821167, -8.932273864746094], + [-7.596842288970947, -0.43802618980407715], + [-2.298908233642578, 1.9137139320373535], + [7.762310981750488, -2.3785130977630615], + [8.273567199707031, -2.654583215713501], + [-5.476161003112793, 4.971155166625977], + [2.1816885471343994, 4.054032325744629], + [0.328374445438385, 11.915904998779297], + [1.8798948526382446, 0.2326238751411438], + [6.506141662597656, 8.36865520477295], + [-6.617680549621582, -0.7276232242584229], + [1.5931110382080078, -0.04078978672623634], + [3.5472471714019775, -3.0029447078704834], + [7.827024936676025, -2.128892183303833], + [7.410402774810791, -2.583587408065796], + [-2.280805826187134, 0.9975113868713379], + [7.882416248321533, -2.2306745052337646], + [3.160179853439331, -7.559539794921875], + [-6.3236212730407715, 2.5659031867980957], + [0.09644990414381027, 11.46406364440918], + [3.9748756885528564, -3.2421858310699463], + [9.719034194946289, -2.3314568996429443], + [0.36717891693115234, 10.862863540649414], + [3.3947622776031494, -2.8457818031311035], + [6.115264892578125, -3.333134889602661], + [3.131726026535034, -6.193221092224121], + [5.596852779388428, -3.6362874507904053], + [-2.550090789794922, -0.4309772849082947], + [3.5052711963653564, 1.4769469499588013], + [2.527543544769287, -5.782465934753418], + [2.7457687854766846, -8.198708534240723], + [7.904789447784424, -2.217625617980957], + [4.856454849243164, -2.3883931636810303], + [7.384239673614502, -1.8036869764328003], + [3.0020854473114014, -4.208701133728027], + [1.8528170585632324, 3.652247667312622], + [-5.8556694984436035, -1.0993191003799438], + [-4.566666126251221, -7.279832363128662], + [1.185043454170227, 1.1849972009658813], + [1.1799676418304443, -0.6840381622314453], + [8.135062217712402, -2.1833367347717285], + [0.03644930571317673, 9.376258850097656], + [-1.5243444442749023, -2.649552822113037], + [2.97098708152771, 1.0227967500686646], + [-4.771364688873291, -7.47884464263916], + [-3.3340418338775635, 5.686955451965332], + [-2.2147164344787598, 2.4408340454101562], + [-7.13101863861084, 0.01978277787566185], + [2.2076914310455322, -8.323636054992676], + [0.20816904306411743, 10.616300582885742], + [-4.235046863555908, -3.4266998767852783], + [0.24612277746200562, 11.342950820922852], + [2.5906240940093994, 4.6337690353393555], + [-1.8212813138961792, -0.05129042640328407], + [-7.7163214683532715, 0.3149482011795044], + [-5.391184329986572, -0.7389422655105591], + [2.4729745388031006, 4.572912693023682], + [2.979405164718628, 1.9693959951400757], + [7.463955402374268, 8.85097885131836], + [6.3457255363464355, -4.525605201721191], + [-2.1383907794952393, 2.395869016647339], + [0.18945974111557007, 10.410911560058594], + [0.25811928510665894, 11.459504127502441], + [-4.530573844909668, -5.947090148925781], + [4.628369331359863, 6.769192695617676], + [9.209826469421387, -2.4574034214019775], + [0.1345672607421875, 9.605225563049316], + [-5.076308727264404, -3.153862476348877], + [-6.4038543701171875, 7.545992851257324], + [8.993245124816895, -2.4409825801849365], + [-0.036133237183094025, 13.822541236877441], + [4.281157970428467, -3.2753825187683105], + [2.608821153640747, -7.792517185211182], + [-0.044412799179553986, 13.086191177368164], + [2.1857640743255615, 3.1341207027435303], + [4.007818698883057, -3.4236369132995605], + [-7.178726673126221, 0.11630070209503174], + [-4.862864017486572, -7.624252796173096], + [6.461032867431641, 8.161930084228516], + [0.3553212285041809, -0.31775838136672974], + [1.1849420070648193, 4.692772388458252], + [2.065380096435547, -8.658273696899414], + [1.1189043521881104, 0.9604133367538452], + [-4.1504106521606445, -2.5632452964782715], + [-0.2784223258495331, -1.5834568738937378], + [2.0844922065734863, 2.7961394786834717], + [4.1214776039123535, 1.5364540815353394], + [-2.7325150966644287, -2.5143535137176514], + [5.2620744705200195, -2.883279323577881], + [4.184580326080322, -7.527396202087402], + [1.5679823160171509, 3.160377264022827], + [-4.476451396942139, -6.926703453063965], + [-5.755100727081299, -0.7531364560127258], + [-3.8414225578308105, -5.999089241027832], + [-2.5686824321746826, -3.713440418243408], + [-4.741517066955566, -7.367416858673096], + [-0.024459905922412872, 12.411140441894531], + [2.064455032348633, -6.942549228668213], + [-4.42922830581665, 4.946543216705322], + [6.5575480461120605, -1.3496795892715454], + [4.046165943145752, 1.722500205039978], + [-7.364569187164307, 1.8957618474960327], + [-4.470755577087402, 5.005888938903809], + [4.0744500160217285, 1.7595198154449463], + [-3.720796823501587, -1.9745851755142212], + [6.173874378204346, -2.544489622116089], + [5.413170337677002, -1.4196752309799194], + [-2.4086973667144775, -3.122626304626465], + [-3.3749911785125732, -4.164122581481934], + [0.37367862462997437, 11.712814331054688], + [-3.1790871620178223, 0.2792648673057556], + [-2.7924516201019287, 2.7827064990997314], + [2.8473124504089355, -3.8329265117645264], + [-2.226337432861328, 6.324002265930176], + [8.59827709197998, -2.344444513320923], + [1.514679193496704, -0.2811999022960663], + [3.2871172428131104, -4.182923793792725], + [8.658520698547363, -2.397845506668091], + [2.402879476547241, 3.5645318031311035], + [-2.819265842437744, -5.210002899169922], + [-2.467160224914551, 2.180800676345825], + [1.6660513877868652, -7.550265312194824], + [-0.5363785624504089, 1.10385262966156], + [-7.4063544273376465, 0.34993767738342285], + [-2.008796453475952, 1.9597753286361694], + [0.022744707763195038, 11.944445610046387], + [3.7819790840148926, -3.6180810928344727], + [3.035534143447876, -7.8068060874938965], + [4.2439446449279785, -3.3859164714813232], + [0.917255163192749, 0.5883240699768066], + [-0.01550263911485672, 12.27414608001709], + [-4.017256259918213, -6.467454433441162], + [2.862297296524048, -10.071866035461426], + [-7.056840419769287, -1.900586485862732], + [2.189985513687134, -6.970495223999023], + [-1.5507001876831055, 1.2364968061447144], + [1.788274884223938, -8.054515838623047], + [2.591881036758423, 5.462488651275635], + [-6.854360103607178, 8.196203231811523], + [-1.5855777263641357, 2.155442714691162], + [5.294579029083252, 7.617346286773682], + [-4.662754535675049, 4.023772716522217], + [3.3258841037750244, -5.277070045471191], + [4.023698329925537, -3.695713758468628], + [6.659595489501953, -1.44210684299469], + [9.493180274963379, -2.4715182781219482], + [0.14522916078567505, 11.552397727966309], + [-7.766149520874023, -0.33566105365753174], + [-3.6964526176452637, -4.733697891235352], + [-0.023460395634174347, 13.203483581542969], + [-2.145479440689087, 2.2791996002197266], + [0.12295859307050705, 10.329588890075684], + [1.9818668365478516, -2.8441390991210938], + [-5.993057727813721, 6.125176429748535], + [-5.124339580535889, 6.887553691864014], + [-3.7306528091430664, -6.131687164306641], + [3.174424648284912, -3.723499298095703], + [3.325437307357788, -5.113848686218262], + [4.922471046447754, 6.92582893371582], + [2.1550707817077637, 4.794553279876709], + [0.15278756618499756, -1.0461187362670898], + [-5.661586284637451, 7.0799784660339355], + [3.00744891166687, -4.42029333114624], + [0.5714536905288696, -5.622492790222168], + [-2.8813631534576416, 1.450061321258545], + [-5.500204563140869, -1.1855107545852661], + [-2.170215606689453, 2.1665170192718506], + [-4.834920406341553, -0.9988424777984619], + [0.2940514087677002, -3.50174880027771], + [-4.407978534698486, -5.305456161499023], + [5.013781547546387, 6.950687408447266], + [-0.9676904082298279, 1.6983705759048462], + [-1.2647051811218262, 1.330225944519043], + [-0.9622936844825745, 0.9830571413040161], + [-3.959261417388916, 5.228474140167236], + [-2.439056158065796, 2.019751787185669], + [-6.4820427894592285, 7.42637300491333], + [-2.172584056854248, 1.9876071214675903], + [0.007356338202953339, 8.979415893554688], + [2.4341211318969727, 5.91766357421875], + [5.93259859085083, -1.240653157234192], + [8.5049409866333, -2.2590816020965576], + [-4.2690958976745605, -5.998254776000977], + [1.9932618141174316, 3.1462442874908447], + [-5.246806621551514, 6.674162864685059], + [-2.607858180999756, 1.8270701169967651], + [-4.491675853729248, 3.4582228660583496], + [-2.517781972885132, -3.0197653770446777], + [4.042294979095459, -4.290300369262695], + [-5.341524600982666, 5.293906211853027], + [5.889611721038818, -4.581138610839844], + [4.21212911605835, 1.6965265274047852], + [-1.4254640340805054, -4.359786033630371], + [-6.918715000152588, 8.126201629638672], + [3.4506895542144775, -4.890108108520508], + [-3.9256751537323, -6.453935623168945], + [1.5034419298171997, 2.2171950340270996], + [8.796151161193848, -2.250437021255493], + [2.6569080352783203, -3.704320192337036], + [4.079195976257324, -6.714545249938965], + [-5.429961204528809, -3.607905149459839], + [-2.934253454208374, 3.5566771030426025], + [3.3319251537323, 0.8345106244087219], + [-5.830017566680908, 0.9900505542755127], + [-6.010385036468506, 4.352089881896973], + [7.598080635070801, -2.021151542663574], + [8.451178550720215, -2.2410640716552734], + [8.631789207458496, -2.347261667251587], + [2.9578804969787598, -9.57116985321045], + [5.764155387878418, 7.731278419494629], + [-1.8700581789016724, 0.9785019159317017], + [2.715471029281616, 4.531344413757324], + [-2.7519140243530273, -3.8691136837005615], + [7.0293660163879395, -2.9701836109161377], + [3.6176652908325195, -5.905956268310547], + [0.9199944138526917, -0.6564004421234131], + [3.252000093460083, -7.816072940826416], + [-1.9767155647277832, 2.1813483238220215], + [-4.526761531829834, 5.483517646789551], + [8.453704833984375, -2.450688123703003], + [-2.1143858432769775, -0.9984748959541321], + [6.720696449279785, -1.4952071905136108], + [-0.5370898842811584, -1.0799967050552368], + [7.61826229095459, 9.48205852508545], + [-1.059717059135437, -0.9498125314712524], + [4.758968830108643, -1.0281959772109985], + [3.767225742340088, -4.6007771492004395], + [-4.08396053314209, -5.667039394378662], + [6.511678218841553, -2.203127145767212], + [-4.386539936065674, -6.542881965637207], + [-2.778904438018799, -4.398933410644531], + [-4.558544635772705, -7.241118431091309], + [-5.38939905166626, 5.175434589385986], + [5.998529434204102, -1.2626813650131226], + [0.19253212213516235, 11.368050575256348], + [2.8960769176483154, -6.900340557098389], + [1.0500915050506592, 4.740292549133301], + [-2.03112530708313, 1.633102297782898], + [5.124454975128174, -2.8106863498687744], + [7.484110355377197, -2.1119167804718018], + [-2.1398937702178955, 2.418586254119873], + [4.372334003448486, 7.159406661987305], + [-2.3888332843780518, -2.559903144836426], + [0.16937726736068726, 11.959699630737305], + [-3.7399115562438965, 4.684236526489258], + [-4.9870171546936035, -3.204869508743286], + [-6.916449069976807, 2.1021311283111572], + [-4.606160640716553, 7.674720287322998], + [2.8383257389068604, -5.319414138793945], + [-0.11163050681352615, 14.539907455444336], + [3.628411054611206, -9.117810249328613], + [-4.368420600891113, -6.616878509521484], + [7.446289539337158, -1.8764561414718628], + [-4.636821269989014, -6.799008369445801], + [0.07825212925672531, 12.390563011169434], + [-7.060077667236328, 8.039434432983398], + [-1.2124850749969482, 1.6574296951293945], + [-5.680736064910889, 6.615936279296875], + [0.11273740977048874, 12.369049072265625], + [3.314861536026001, -7.724728107452393], + [0.13600194454193115, 13.256345748901367], + [2.777628183364868, -9.407756805419922], + [8.960614204406738, -2.396597146987915], + [-5.495927333831787, 6.643492221832275], + [-5.060889720916748, 5.885180473327637], + [-4.224229335784912, -7.011500358581543], + [-2.9065096378326416, -3.9251701831817627], + [-4.359043598175049, -1.9058266878128052], + [-2.1409735679626465, 2.459439277648926], + [8.781904220581055, -2.3825619220733643], + [0.7426007390022278, 4.808688163757324], + [8.280652046203613, -2.2250254154205322], + [-5.637513637542725, -5.735789775848389], + [6.65562105178833, -1.9423202276229858], + [4.021583080291748, -3.5988287925720215], + [-2.118877649307251, -2.846961736679077], + [1.804935336112976, 0.20230501890182495], + [1.2843695878982544, 10.269706726074219], + [2.853926420211792, 1.3089319467544556], + [-1.4351986646652222, -2.5577311515808105], + [7.418362140655518, -2.084454298019409], + [3.3109562397003174, -2.600975751876831], + [5.372967720031738, -2.693925142288208], + [-5.438766956329346, -0.36576390266418457], + [3.8965721130371094, -3.0489320755004883], + [-0.09612507373094559, 13.804092407226562], + [0.009091131389141083, 9.188033103942871], + [2.6305978298187256, -3.8237686157226562], + [5.2974324226379395, -1.199635624885559], + [8.368684768676758, -2.2844974994659424], + [-4.66779899597168, 4.582430839538574], + [-2.1795685291290283, 2.6089372634887695], + [-1.0863255262374878, 0.21409356594085693], + [0.09577911347150803, 9.661922454833984], + [2.2351980209350586, 5.233006477355957], + [8.700615882873535, -2.542175531387329], + [7.198852062225342, 8.715127944946289], + [-2.281351327896118, 2.1712706089019775], + [-0.08620531111955643, 13.998794555664062], + [-3.2973740100860596, 0.3177313208580017], + [4.4201154708862305, -3.5110836029052734], + [-2.4018805027008057, 2.4658865928649902], + [-5.16886043548584, -4.460018157958984], + [3.0872654914855957, -4.902295112609863], + [-0.04922182112932205, 13.196922302246094], + [-4.3309102058410645, -6.6743669509887695], + [3.8939459323883057, -3.5463032722473145], + [6.931784629821777, -3.8962271213531494], + [4.585017681121826, -3.5694851875305176], + [3.366471529006958, -4.825068950653076], + [-0.004606790840625763, 12.25672721862793], + [1.9861419200897217, -7.23831033706665], + [2.6782243251800537, 1.9220025539398193], + [0.1937657594680786, 10.426804542541504], + [-7.596282482147217, -0.12132835388183594], + [5.302232265472412, 7.48919677734375], + [3.3877882957458496, -4.024065017700195], + [8.135737419128418, -2.4192817211151123], + [0.07813488692045212, 9.441173553466797], + [-1.9347586631774902, 1.1397956609725952], + [-0.8383272886276245, -1.0716720819473267], + [5.547563076019287, 7.598982810974121], + [-4.5455322265625, 4.925504684448242], + [-2.6919331550598145, -4.733739852905273], + [4.106224060058594, -3.867361545562744], + [2.2648122310638428, 4.5048980712890625], + [-0.021075792610645294, 12.416141510009766], + [0.1496381163597107, 9.989380836486816], + [0.012749962508678436, 9.852846145629883], + [-4.4456257820129395, 6.87364387512207], + [3.7195255756378174, -3.213163137435913], + [3.0846264362335205, 5.876192092895508], + [-7.002940654754639, -1.0910974740982056], + [-2.3519136905670166, 2.538012742996216], + [-5.144134998321533, 6.60003662109375], + [0.8935039639472961, 6.628818035125732], + [-2.2238574028015137, 2.2115697860717773], + [6.162108898162842, -0.8160640001296997], + [6.520837306976318, -3.9436049461364746], + [-3.723451614379883, -2.494218587875366], + [-5.409181118011475, 5.162595748901367], + [-5.233184814453125, 5.887329578399658], + [6.241199493408203, -2.9864108562469482], + [-4.930208683013916, -3.095263719558716], + [3.741366147994995, -3.949141263961792], + [-5.53815221786499, 4.219308376312256], + [-2.465181589126587, 2.230405569076538], + [-5.145480632781982, -0.9847984910011292], + [11.090384483337402, -2.5660321712493896], + [-5.474823474884033, -0.6281457543373108], + [6.386470317840576, -4.470561504364014], + [-2.7561728954315186, -3.480181932449341], + [2.2016584873199463, -8.079012870788574], + [4.068461894989014, 1.027976632118225], + [-3.751368761062622, -2.7269742488861084], + [-0.4155538082122803, 1.223108172416687], + [5.168796062469482, 7.250030517578125], + [10.19122314453125, -2.5061521530151367], + [-6.4230427742004395, -1.546330451965332], + [3.7791624069213867, -3.276122808456421], + [-0.9635695815086365, -1.415752649307251], + [-4.719688892364502, -3.472470998764038], + [3.9052062034606934, -3.3664968013763428], + [-5.855103492736816, -0.7895300388336182], + [9.773100852966309, -2.5162410736083984], + [-2.360272169113159, 1.2682349681854248], + [0.5191605091094971, -5.479903697967529], + [4.214096546173096, -1.1920310258865356], + [5.4651007652282715, 6.767176151275635], + [3.6803245544433594, -4.5274248123168945], + [-3.4020836353302, -3.2024919986724854], + [4.093026161193848, 6.739724159240723], + [3.488142251968384, -7.867807388305664], + [-3.721992015838623, 3.666173219680786], + [-6.0426812171936035, 6.808388710021973], + [-3.795856237411499, -4.600205898284912], + [3.600198984146118, -7.974403381347656], + [-0.9946390986442566, 1.4578839540481567], + [3.726579189300537, -8.149975776672363], + [-4.284308910369873, 6.671828746795654], + [2.929940938949585, -6.0819807052612305], + [0.8087999224662781, 0.3353610038757324], + [2.2247302532196045, 0.5215587615966797], + [5.9922099113464355, 7.495063781738281], + [1.9746806621551514, -7.08537483215332], + [4.254792213439941, 1.7545192241668701], + [6.419055461883545, -1.478528380393982], + [0.08278500288724899, 10.27431869506836], + [1.406827449798584, -0.49917733669281006], + [2.2579739093780518, -6.6167802810668945], + [-4.238448619842529, -5.421468257904053], + [-1.5125209093093872, 1.9214988946914673], + [-4.202604293823242, -2.1714298725128174], + [7.822153568267822, -1.9577614068984985], + [-4.811530113220215, -2.3454678058624268], + [10.929231643676758, -2.4860312938690186], + [3.3803012371063232, -8.915002822875977], + [3.897397041320801, -7.5237884521484375], + [-4.734707355499268, -8.18581771850586], + [-2.7694733142852783, -0.9792699813842773], + [3.1328651905059814, -1.765874981880188], + [4.394993782043457, 7.513723850250244], + [-0.033718593418598175, 13.150246620178223], + [2.437882661819458, -5.952584266662598], + [8.414875030517578, -2.391080379486084], + [7.973808765411377, -2.1602275371551514], + [-2.325411796569824, 1.224810242652893], + [6.15902042388916, -1.3301957845687866], + [4.234309673309326, -1.521424651145935], + [-2.128257989883423, 2.5780255794525146], + [1.6640061140060425, 0.30855900049209595], + [1.1568915843963623, -6.6714701652526855], + [2.7650864124298096, -3.9082553386688232], + [-0.7856611609458923, -3.068309783935547], + [4.903891086578369, 6.3918538093566895], + [-2.0462639331817627, 2.437434434890747], + [2.8183867931365967, -3.368901491165161], + [-3.5297300815582275, -4.128332614898682], + [-0.4985671639442444, -1.298303484916687], + [-5.0947370529174805, 5.732210636138916], + [-5.357738018035889, -1.0446184873580933], + [3.335547924041748, -3.346808671951294], + [6.636143684387207, -1.596676230430603], + [-0.12146838754415512, -1.0988062620162964], + [5.995472431182861, -1.252808690071106], + [-2.181180953979492, 2.6677396297454834], + [3.5405547618865967, -3.235447645187378], + [-6.518847942352295, 7.890224933624268], + [7.752237796783447, 9.120058059692383], + [1.6795964241027832, -7.4764251708984375], + [-1.2791181802749634, 1.4871201515197754], + [0.2206929326057434, 10.517343521118164], + [0.4877110719680786, 11.169475555419922], + [-5.048507213592529, -2.818831205368042], + [-0.017954163253307343, -1.4649927616119385], + [11.082592964172363, -2.6023213863372803], + [3.3508481979370117, -6.112918853759766], + [-5.556097507476807, -2.3703129291534424], + [7.788212299346924, -2.2716915607452393], + [4.461842060089111, 7.386737823486328], + [-5.3341546058654785, -3.4770922660827637], + [-6.8108391761779785, 8.033846855163574], + [-6.861526012420654, 7.86472225189209], + [-5.516907215118408, 5.78302001953125], + [-4.659269332885742, -6.648264408111572], + [3.5820658206939697, -3.721797466278076], + [-5.557240962982178, 6.19090461730957], + [4.539526462554932, 6.263296127319336], + [-4.408139705657959, -6.040016174316406], + [6.083580493927002, 8.161273956298828], + [1.7624659538269043, -7.903470039367676], + [-6.1071696281433105, -2.9167306423187256], + [3.140160083770752, -9.019192695617676], + [-2.2741763591766357, 2.2829437255859375], + [9.478127479553223, -2.4065661430358887], + [-2.584495782852173, 1.8847918510437012], + [-1.5958231687545776, 1.9560595750808716], + [-6.641180515289307, 7.635918617248535], + [6.072595596313477, -3.310699701309204], + [9.723212242126465, -2.4690592288970947], + [-6.073662281036377, -0.8857533931732178], + [-4.473822593688965, -7.378093719482422], + [2.6629674434661865, -8.367371559143066], + [3.349569320678711, -3.5083658695220947], + [3.6403043270111084, -3.293623208999634], + [0.5203730463981628, 10.440065383911133], + [2.7831950187683105, -3.8533852100372314], + [8.038779258728027, -2.631484270095825], + [2.242762327194214, 5.766185760498047], + [4.887364864349365, 7.076480865478516], + [4.099107265472412, -7.653781890869141], + [-1.7922234535217285, 1.0296541452407837], + [7.981802463531494, -2.5256574153900146], + [-2.0812480449676514, 2.578261375427246], + [2.8125455379486084, -8.360054016113281], + [-4.943418502807617, 6.234410285949707], + [3.061476707458496, -2.9448606967926025], + [-2.3665823936462402, 2.177894115447998], + [-2.5319340229034424, 1.8197076320648193], + [5.645524501800537, -5.548379898071289], + [-3.2906267642974854, -4.636374473571777], + [0.23012065887451172, -1.3139276504516602], + [-3.68363356590271, -3.2867863178253174], + [9.132707595825195, -2.375343084335327], + [1.969064474105835, 2.0268828868865967], + [-4.472818851470947, -6.714926719665527], + [-5.144323825836182, 4.409610271453857], + [6.301778793334961, 8.101072311401367], + [6.957387447357178, -1.5661872625350952], + [-5.393205642700195, 5.507903575897217], + [3.5408828258514404, 1.7212910652160645], + [-5.612489223480225, -1.9727904796600342], + [2.2327373027801514, -8.153881072998047], + [-2.4408211708068848, 6.611743450164795], + [-1.0265411138534546, 1.7604364156723022], + [2.9382174015045166, -6.338241100311279], + [1.871518850326538, -7.607933521270752], + [7.487350940704346, -2.1935644149780273], + [-0.5593579411506653, 0.4087737798690796], + [2.073563575744629, -7.877852439880371], + [1.933351755142212, 7.5420379638671875], + [1.581174373626709, 5.5407562255859375], + [0.5021520853042603, -1.1093493700027466], + [2.5715038776397705, -6.224498748779297], + [7.259676456451416, 8.701915740966797], + [0.044172994792461395, 9.458976745605469], + [5.154707908630371, -3.1519412994384766], + [-5.19229793548584, 3.287247896194458], + [0.08194508403539658, -1.6006335020065308], + [8.343240737915039, -2.2820637226104736], + [-5.276498794555664, -3.178537607192993], + [7.848933696746826, -1.8209155797958374], + [7.662300109863281, -1.9793580770492554], + [2.7257184982299805, 3.297663927078247], + [10.248749732971191, -2.3446991443634033], + [0.23873049020767212, 10.496343612670898], + [3.571680784225464, -5.182449817657471], + [5.67957067489624, -5.374523162841797], + [3.3622701168060303, -7.193741798400879], + [0.031892769038677216, 9.55673599243164], + [3.8704564571380615, -7.463200569152832], + [4.476788520812988, -3.5121443271636963], + [6.240954875946045, -4.7603864669799805], + [-1.7214611768722534, -3.8884241580963135], + [5.835200786590576, -2.2362706661224365], + [9.862669944763184, -2.391523838043213], + [-1.8761838674545288, 2.403899669647217], + [1.9673480987548828, 3.4960992336273193], + [7.002879619598389, -4.694718360900879], + [1.4895966053009033, -7.428203582763672], + [3.057405471801758, 5.596627235412598], + [2.841977834701538, 4.74426794052124], + [-4.860905170440674, -7.870543956756592], + [3.5825774669647217, -8.021886825561523], + [1.7159271240234375, 6.018857955932617], + [-0.2663023769855499, -1.8157379627227783], + [8.961471557617188, -2.389747142791748], + [7.233027935028076, -1.84245765209198], + [-2.5330958366394043, 1.5793282985687256], + [-4.338605880737305, -5.041998863220215], + [0.11412399262189865, 11.529272079467773], + [7.607203006744385, 9.011638641357422], + [5.670767307281494, -2.524334192276001], + [2.6297833919525146, -9.395769119262695], + [4.689579010009766, 7.955310821533203], + [0.14994466304779053, -1.4570823907852173], + [6.739569187164307, -2.736485004425049], + [-4.545320987701416, 2.9063220024108887], + [3.7929954528808594, -5.817370414733887], + [6.830350875854492, -5.694868087768555], + [-2.0720608234405518, -0.060944024473428726], + [-0.0073879435658454895, 12.056026458740234], + [-2.5704236030578613, 1.7251266241073608], + [3.392709493637085, -7.825207710266113], + [9.624466896057129, -2.387272596359253], + [1.8260955810546875, 4.024142265319824], + [-4.881890773773193, 4.403785705566406], + [7.415188789367676, -2.6255035400390625], + [-2.6884958744049072, -4.178308486938477], + [7.51594877243042, -1.9212828874588013], + [8.287245750427246, -2.281770944595337], + [-3.3805270195007324, -5.982936859130859], + [-4.075854778289795, 5.46674919128418], + [3.4386556148529053, 0.9684962034225464], + [0.8038445115089417, 11.201952934265137], + [3.070899248123169, 1.8862850666046143], + [5.9938273429870605, -1.0745424032211304], + [2.944079875946045, -4.153660774230957], + [5.752490043640137, 7.565832138061523], + [0.6087521314620972, -1.1681702136993408], + [0.2542816400527954, 11.303613662719727], + [0.12732046842575073, 10.26692008972168], + [8.612699508666992, -2.7295048236846924], + [4.456171035766602, -4.320470809936523], + [-4.374110221862793, -6.9593505859375], + [0.3340159058570862, 11.91236686706543], + [7.108833312988281, -2.220834255218506], + [3.6980361938476562, -4.617242813110352], + [2.0312623977661133, 5.179865837097168], + [2.17475962638855, 3.850137233734131], + [0.07491081207990646, 10.002172470092773], + [2.6317873001098633, 5.312228679656982], + [-3.9886012077331543, 4.224693298339844], + [6.159389019012451, 7.565519332885742], + [-4.608901500701904, 4.957358360290527], + [4.340453624725342, -1.091891884803772], + [2.940885305404663, -2.6887292861938477], + [3.256884813308716, 0.7724193334579468], + [1.8647152185440063, 5.70678186416626], + [-4.909465312957764, -7.553783416748047], + [-0.027726538479328156, 12.702072143554688], + [2.624718427658081, 6.1667680740356445], + [9.655562400817871, -2.3714826107025146], + [-4.172951698303223, -6.285928726196289], + [-2.2779057025909424, 2.1295840740203857], + [-1.4119899272918701, 1.8990808725357056], + [-2.994671106338501, -3.2342798709869385], + [7.395158767700195, 8.812885284423828], + [2.530005693435669, 3.6660072803497314], + [5.454488277435303, -3.5018222332000732], + [-0.12436959892511368, -1.5311189889907837], + [-2.9403188228607178, -4.380627632141113], + [-2.3616199493408203, -3.2514665126800537], + [-5.664770126342773, 4.173727035522461], + [2.7803900241851807, 1.6773220300674438], + [-0.05655784159898758, 12.599074363708496], + [2.3494622707366943, 5.382126808166504], + [7.062397003173828, -5.230943202972412], + [0.5038512349128723, 8.126301765441895], + [1.120542287826538, 6.7181925773620605], + [-2.2568130493164062, 0.38114362955093384], + [-5.101644515991211, -5.9679412841796875], + [3.1148030757904053, -7.3068132400512695], + [2.760519504547119, 6.758331775665283], + [4.29926872253418, -3.0140202045440674], + [0.11693369597196579, 12.619709014892578], + [-0.2909057140350342, -1.563990592956543], + [-1.1962103843688965, -1.0631414651870728], + [-4.595262050628662, -0.17508572340011597], + [-0.992137610912323, 2.19606614112854], + [-2.180058240890503, 2.481959104537964], + [4.560550212860107, 0.5139408111572266], + [3.6590421199798584, 6.856372833251953], + [2.779456615447998, -3.434779405593872], + [2.6699063777923584, -9.113447189331055], + [-0.20359399914741516, -1.5951303243637085], + [3.6356747150421143, -3.456493377685547], + [0.5135684609413147, 10.317426681518555], + [-4.579291820526123, -7.206177234649658], + [-6.206848621368408, -2.525049924850464], + [0.06818711012601852, 12.48924446105957], + [4.830348014831543, -3.4838342666625977], + [8.075274467468262, -2.3948981761932373], + [-2.2779428958892822, -3.5024242401123047], + [-5.016454219818115, 7.9422078132629395], + [1.4625790119171143, 0.9664179086685181], + [-5.077422618865967, 1.4091973304748535], + [7.228224277496338, -1.7699419260025024], + [5.328366756439209, 6.696240425109863], + [-2.2775373458862305, -2.5118088722229004], + [1.1749188899993896, -0.49355509877204895], + [4.610986232757568, -3.5328447818756104], + [-3.4762675762176514, -4.918495178222656], + [-0.5376924872398376, -0.8696972131729126], + [3.5226871967315674, -4.939726829528809], + [5.9116387367248535, -5.154217720031738], + [0.7004874348640442, 0.45595085620880127], + [2.328502655029297, 6.373997688293457], + [4.159840106964111, -8.832632064819336], + [3.109149932861328, -5.855442047119141], + [-3.2673890590667725, -2.1898458003997803], + [2.4665002822875977, -8.49001407623291], + [10.095268249511719, -2.4650886058807373], + [4.431492328643799, -5.484365463256836], + [-3.0056676864624023, -3.509655237197876], + [8.174725532531738, -2.4467196464538574], + [2.4176456928253174, -3.442279577255249], + [0.0938134714961052, 9.805023193359375], + [3.204963445663452, 0.9733774662017822], + [1.8710618019104004, 0.3488423228263855], + [-2.0760786533355713, 2.392002820968628], + [-3.041203022003174, -1.5871844291687012], + [0.11136429756879807, 10.800647735595703], + [9.27410888671875, -2.6112544536590576], + [-3.0669949054718018, -4.846145153045654], + [-1.5159761905670166, 0.04820540174841881], + [5.989777088165283, 7.529575824737549], + [9.028903007507324, -2.442742109298706], + [4.535807132720947, 5.769879341125488], + [3.8164865970611572, 1.1791962385177612], + [-2.207965612411499, 0.44608643651008606], + [-4.036118030548096, -4.759782314300537], + [-4.5890398025512695, -6.706278324127197], + [-1.9413666725158691, 2.4983787536621094], + [-2.3987233638763428, 1.209410548210144], + [3.243704319000244, 1.5300003290176392], + [3.199586868286133, 1.540192723274231], + [-3.438918352127075, 0.14568889141082764], + [-0.4142758250236511, 3.7332913875579834], + [4.294435977935791, -8.573370933532715], + [0.10433750599622726, 9.687170028686523], + [-3.4440293312072754, -3.514680862426758], + [3.497666597366333, -4.980146408081055], + [1.3982532024383545, -7.477002143859863], + [1.2175167798995972, -6.775591850280762], + [1.9504244327545166, 5.129051208496094], + [2.964959144592285, -4.153169631958008], + [-4.979255676269531, -4.469232559204102], + [-0.7062872052192688, -3.921105146408081], + [7.93678617477417, -2.179598093032837], + [3.0945863723754883, -4.386943340301514], + [2.652427911758423, -8.216653823852539], + [3.1024320125579834, -5.731991767883301], + [0.2597586512565613, 11.196708679199219], + [-2.046992540359497, 2.7985029220581055], + [-4.252333641052246, -6.452881336212158], + [-2.2762303352355957, 0.09598910808563232], + [-4.048892498016357, -2.568878412246704], + [-4.04407262802124, 4.579277992248535], + [1.7222025394439697, 2.1812522411346436], + [5.9226603507995605, -1.2764328718185425], + [4.407931327819824, -4.690831184387207], + [8.108599662780762, -2.1521687507629395], + [-0.10845715552568436, -0.3925873339176178], + [-2.273176670074463, 2.7050936222076416], + [0.04252433031797409, 9.373327255249023], + [-6.220478534698486, 0.11017215251922607], + [-2.3489108085632324, 1.9969674348831177], + [-5.169564247131348, 4.963994979858398], + [-6.4184346199035645, -0.4324723482131958], + [-5.886050701141357, 1.2592710256576538], + [2.2779455184936523, 2.632718801498413], + [2.962362051010132, -4.078912734985352], + [4.218961238861084, 6.906827926635742], + [3.476890802383423, -3.4623303413391113], + [3.855844259262085, 1.7187600135803223], + [-2.2927935123443604, 2.331049680709839], + [-0.6068154573440552, -0.9922565221786499], + [3.3544435501098633, -5.679476737976074], + [6.697676181793213, -3.312105894088745], + [2.563649892807007, 5.732739448547363], + [-1.9079744815826416, -4.156035423278809], + [6.545582294464111, 7.932181358337402], + [2.7536439895629883, 4.490150451660156], + [10.214937210083008, -2.5265800952911377], + [6.386587619781494, -1.4419291019439697], + [-5.340731620788574, -1.0846835374832153], + [-2.8300886154174805, -3.2957100868225098], + [3.49422025680542, -6.291418552398682], + [7.7014055252075195, -2.983966827392578], + [9.10588550567627, -2.3791630268096924], + [6.542910099029541, -1.3551667928695679], + [-2.154270887374878, 2.04227876663208], + [-4.6254377365112305, 5.089863300323486], + [1.9353349208831787, -8.054624557495117], + [-2.1358389854431152, 2.464233636856079], + [1.6840596199035645, 1.9641274213790894], + [-4.834737300872803, -0.15888386964797974], + [3.854466676712036, -3.364544630050659], + [-2.0258948802948, 2.449345350265503], + [2.8765780925750732, -3.832608461380005], + [-2.475451946258545, -4.093807220458984], + [-4.2148237228393555, -0.5121127367019653], + [7.916268825531006, -2.1159965991973877], + [6.420212268829346, 8.060515403747559], + [-5.105617046356201, -1.4283629655838013], + [-7.127687931060791, 8.362968444824219], + [-3.9961905479431152, -2.760730266571045], + [7.423369884490967, -1.6539850234985352], + [2.133777379989624, -7.824095726013184], + [0.049657873809337616, 11.91622543334961], + [-2.934504270553589, -3.314973831176758], + [6.449357509613037, -5.502621650695801], + [-0.059451885521411896, 13.30660629272461], + [1.7867932319641113, -7.188899993896484], + [3.0594961643218994, -2.7132256031036377], + [3.5690371990203857, -2.4446046352386475], + [-0.0012098625302314758, 9.608171463012695], + [5.005013942718506, -1.2184938192367554], + [-1.1304481029510498, 1.508233666419983], + [-1.9696134328842163, 2.4460673332214355], + [2.577777624130249, -8.29715347290039], + [8.229081153869629, -2.2054975032806396], + [-1.2033686637878418, 1.6178416013717651], + [9.981470108032227, -2.3510842323303223], + [-1.9832569360733032, 2.7736666202545166], + [6.846042156219482, -2.2301547527313232], + [-0.05791623145341873, 9.426528930664062], + [-2.978120803833008, 2.0930771827697754], + [-1.6684479713439941, 1.881361722946167], + [-0.04475129395723343, 12.593587875366211], + [0.15790694952011108, 9.932917594909668], + [2.132730007171631, 4.41232967376709], + [-0.7760574817657471, 1.4733232259750366], + [-6.457583904266357, 0.17908591032028198], + [0.024758629500865936, 10.784937858581543], + [5.532502174377441, 7.245175361633301], + [2.9207913875579834, 1.3592348098754883], + [3.578317880630493, -3.7807366847991943], + [-0.6669980883598328, 1.198087215423584], + [-2.890310049057007, 5.90220832824707], + [-3.247685194015503, -0.9600933790206909], + [1.7417396306991577, -6.977085113525391], + [4.089579105377197, 0.05339622125029564], + [3.3975493907928467, -7.775885581970215], + [-1.4438412189483643, 1.7546902894973755], + [7.292656898498535, -4.470458984375], + [6.126922607421875, 7.791025161743164], + [0.1286071538925171, 10.304232597351074], + [-3.073350667953491, -5.59769344329834], + [-2.0858728885650635, 2.6639997959136963], + [-4.22156286239624, -5.541595935821533], + [-3.2326416969299316, -2.276448965072632], + [-6.33909797668457, -0.5942869186401367], + [-4.388360023498535, 7.2705793380737305], + [-2.161830186843872, 2.6252262592315674], + [-3.9409635066986084, 5.685988903045654], + [-4.372961521148682, -6.74192476272583], + [-2.4506993293762207, 2.129068613052368], + [-1.785900592803955, 2.058058023452759], + [1.9015257358551025, -0.307222843170166], + [-6.3312153816223145, -1.9630966186523438], + [2.190415143966675, 2.164409875869751], + [-6.156189441680908, 7.461705207824707], + [-4.853510856628418, -7.39837121963501], + [3.8112990856170654, -7.043471336364746], + [-4.771927356719971, 4.546334266662598], + [3.0801966190338135, -7.8832502365112305], + [-1.2807577848434448, -0.41833317279815674], + [-6.78180456161499, 7.9135637283325195], + [2.423192262649536, -8.945706367492676], + [0.0852498933672905, 11.840235710144043], + [3.8813397884368896, -5.336562156677246], + [2.958536386489868, -7.75032901763916], + [-3.7759110927581787, -5.03730583190918], + [3.2149338722229004, -3.635573625564575], + [2.6581733226776123, -8.319782257080078], + [-2.223811388015747, 2.0447301864624023], + [3.325303792953491, 1.221442461013794], + [5.428867816925049, 7.870123863220215], + [-3.0984280109405518, 3.413233995437622], + [4.383441925048828, -6.143682479858398], + [8.077925682067871, -2.0349414348602295], + [-2.378286838531494, -4.146186828613281], + [-2.5322678089141846, 0.06454813480377197], + [-3.7086451053619385, -1.9301010370254517], + [-5.311499118804932, -3.9094362258911133], + [3.7572505474090576, -3.624192476272583], + [-2.997481107711792, 2.72955060005188], + [4.39325475692749, -3.635441541671753], + [0.28553324937820435, 11.916576385498047], + [9.069007873535156, -2.4077680110931396], + [3.9229156970977783, 5.933671951293945], + [-2.3612825870513916, 1.9022009372711182], + [0.6558166146278381, -1.2822872400283813], + [0.2987552285194397, 10.428821563720703], + [-5.330377101898193, -1.6258126497268677], + [-5.914757251739502, -1.0001987218856812], + [-2.5282578468322754, 1.7529267072677612], + [-8.297822952270508, 1.87263023853302], + [9.038860321044922, -2.321849822998047], + [-5.839448928833008, 0.9538098573684692], + [-3.857121706008911, 8.013004302978516], + [-4.2406840324401855, -6.610201358795166], + [-0.05088139325380325, 12.504950523376465], + [-2.027559280395508, 1.2771763801574707], + [-6.052064418792725, 7.736993789672852], + [8.15204906463623, -2.1778435707092285], + [-6.145699501037598, 8.267415046691895], + [-0.05191732197999954, 9.381738662719727], + [1.326200246810913, 5.281818389892578], + [2.699688196182251, 4.5024003982543945], + [-2.2407803535461426, 1.3469499349594116], + [-5.282235145568848, -3.1576857566833496], + [-0.003446526825428009, 12.291715621948242], + [1.0178608894348145, -0.5968188047409058], + [4.116104602813721, -2.9049150943756104], + [1.8838019371032715, 2.2273542881011963], + [7.770233631134033, 9.232933044433594], + [0.2777591943740845, -0.5831369161605835], + [-2.5480616092681885, -2.055346965789795], + [-7.589850902557373, 0.15018689632415771], + [6.7152628898620605, 8.165578842163086], + [-2.7038257122039795, -0.8245036005973816], + [2.6827681064605713, -8.018919944763184], + [-2.6507821083068848, 1.8291661739349365], + [-3.6511943340301514, 5.197879791259766], + [3.9767000675201416, 1.240744709968567], + [0.6973435282707214, -2.0691702365875244], + [1.8767731189727783, -8.016536712646484], + [6.103002548217773, 8.312294006347656], + [-2.0740854740142822, 2.468907594680786], + [-2.966632843017578, 6.574367523193359], + [6.936259746551514, 8.382696151733398], + [-3.136045217514038, 1.2536004781723022], + [7.765423774719238, -1.815529227256775], + [0.22203224897384644, 10.494722366333008], + [-2.2457363605499268, 2.3424437046051025], + [1.3993377685546875, -0.2245534509420395], + [2.4130496978759766, 6.320572853088379], + [-5.7732977867126465, 5.341141223907471], + [-6.192139148712158, 6.609129428863525], + [0.07207571715116501, 11.982275009155273], + [-2.3373939990997314, 1.9383264780044556], + [4.3878655433654785, -3.2289228439331055], + [-0.5793279409408569, 0.288390576839447], + [5.3886637687683105, -0.6776295304298401], + [-3.004481554031372, -4.757181167602539], + [4.262750148773193, -3.6637191772460938], + [0.24394136667251587, 11.204172134399414], + [-3.581062078475952, 4.761753559112549], + [-5.043459415435791, -7.960406303405762], + [2.2654707431793213, 5.950201511383057], + [6.751737117767334, 8.238791465759277], + [0.2673123776912689, 0.3457593023777008], + [-3.5565567016601562, -3.000070333480835], + [9.285451889038086, -2.4694325923919678], + [3.1463911533355713, -4.530511856079102], + [6.515841007232666, 7.9955596923828125], + [5.731880187988281, 8.135200500488281], + [2.6165969371795654, 3.8883144855499268], + [-1.8906280994415283, 1.19520902633667], + [0.07663994282484055, 11.724489212036133], + [9.43295955657959, -2.3830349445343018], + [-6.001275539398193, 6.826333999633789], + [0.06897347420454025, 12.63223648071289], + [5.729459285736084, -3.7207071781158447], + [-3.5422632694244385, -4.879518985748291], + [-3.227613687515259, -4.177487373352051], + [-5.514449596405029, 6.6193060874938965], + [-3.8608691692352295, -1.3450710773468018], + [-7.170328140258789, 0.4258228540420532], + [-2.182382345199585, 2.1290407180786133], + [3.0171873569488525, -4.295776844024658], + [-2.263425350189209, 2.388137102127075], + [-4.416309833526611, -6.338569164276123], + [2.503290891647339, -7.002821922302246], + [5.473217010498047, -1.271562933921814], + [-2.1650614738464355, 2.4326717853546143], + [-4.437014102935791, 4.873247146606445], + [3.7157695293426514, -3.7927286624908447], + [3.880511522293091, -3.4082815647125244], + [0.1342589259147644, 11.266939163208008], + [-1.9875192642211914, 0.8999233245849609], + [6.48920202255249, -4.458184719085693], + [7.610273361206055, -2.4566290378570557], + [3.363368511199951, -5.337508201599121], + [-3.8366568088531494, -0.9250738620758057], + [-4.638740062713623, 4.095577239990234], + [2.1773386001586914, -6.138302803039551], + [-5.6154680252075195, 5.932653427124023], + [-6.061731815338135, 6.922772407531738], + [-1.340312123298645, 1.9703234434127808], + [4.611735820770264, -4.249062538146973], + [-2.5736820697784424, -4.599024772644043], + [7.475615978240967, -2.8737263679504395], + [-2.2142813205718994, 2.2711777687072754], + [-4.73166561126709, -2.0767836570739746], + [-3.4463746547698975, -4.326641082763672], + [-2.230940103530884, 1.0969101190567017], + [-3.8943090438842773, -0.14652538299560547], + [-2.9119880199432373, -3.2928030490875244], + [1.5200062990188599, 6.075448036193848], + [-0.07722551375627518, 13.726207733154297], + [-2.1141505241394043, 2.06646728515625], + [-2.0957303047180176, 0.2499644160270691], + [-3.899336814880371, -2.4051315784454346], + [1.7341896295547485, 0.506496787071228], + [-2.945913553237915, 1.4705382585525513], + [2.8091351985931396, -4.346515655517578], + [-1.9523136615753174, -4.261703968048096], + [-2.1576483249664307, -0.5490163564682007], + [-4.124685764312744, -6.36004638671875], + [3.0888593196868896, 0.5580533742904663], + [-4.754116535186768, -2.5310118198394775], + [-4.279964447021484, -6.650287628173828], + [-6.810847759246826, 0.780735969543457], + [-5.561045169830322, -0.40356290340423584], + [-0.01829797774553299, 12.999814987182617], + [4.43665075302124, 5.696191787719727], + [-4.805503845214844, 4.026870250701904], + [-3.3704779148101807, -4.982596397399902], + [0.04721086472272873, 12.500870704650879], + [-1.7388473749160767, 0.4803335666656494], + [-2.313272714614868, 1.0946916341781616], + [2.6713011264801025, 1.7674682140350342], + [-5.581955432891846, -6.450779914855957], + [-4.199941635131836, 3.447690010070801], + [-4.103555679321289, -2.164102792739868], + [0.05116146057844162, 12.345136642456055], + [-4.769171714782715, 6.010876178741455], + [2.516101360321045, 3.3760550022125244], + [3.566711664199829, 6.153314113616943], + [1.8529107570648193, 2.5515477657318115], + [-2.034477949142456, 2.482088088989258], + [9.905808448791504, -2.3518054485321045], + [2.3376145362854004, 4.431462287902832], + [-4.3176093101501465, 7.214364528656006], + [0.33781856298446655, -1.3429977893829346], + [3.211312770843506, -4.39742374420166], + [2.524350881576538, 4.744407653808594], + [2.6922099590301514, -3.809705972671509], + [-3.5952093601226807, 6.144315242767334], + [8.278669357299805, -2.1970739364624023], + [1.770498275756836, -5.823117733001709], + [0.13662254810333252, 0.4096061587333679], + [0.7542465925216675, -0.5528973340988159], + [2.454411506652832, 4.122969627380371], + [4.973254680633545, -3.428551435470581], + [1.6895439624786377, 1.2637132406234741], + [0.03908645361661911, 10.411848068237305], + [4.492443561553955, 1.3633099794387817], + [3.1232852935791016, -3.889071464538574], + [2.838481903076172, 6.005434989929199], + [-6.901565074920654, -1.3465216159820557], + [-4.477100372314453, -3.158691644668579], + [0.03679852932691574, 10.882888793945312], + [0.2981768250465393, 12.031204223632812], + [-0.26167136430740356, -1.6252795457839966], + [9.105378150939941, -2.2536814212799072], + [8.356199264526367, -2.210271120071411], + [3.019904375076294, -4.090508460998535], + [7.448797702789307, -1.8189375400543213], + [3.259481430053711, -5.802915096282959], + [-4.661635398864746, -4.312784194946289], + [9.465895652770996, -2.3052711486816406], + [-3.837878942489624, -6.563906192779541], + [-3.7747321128845215, -3.5115163326263428], + [1.4657962322235107, -2.9777109622955322], + [-6.864851474761963, 4.226709842681885], + [-3.492466688156128, 3.377305746078491], + [2.52065110206604, 4.50395393371582], + [9.298413276672363, -2.390556573867798], + [1.1600544452667236, -7.061301231384277], + [0.1167026087641716, 10.041265487670898], + [1.42875337600708, 2.534824848175049], + [-1.2034337520599365, -0.45782506465911865], + [-3.5207149982452393, -5.649558067321777], + [0.045525841414928436, 12.685598373413086], + [5.634628772735596, 7.3857421875], + [7.8877081871032715, 9.47480297088623], + [0.04642795771360397, -0.23549120128154755], + [0.11436646431684494, 9.883245468139648], + [-5.001053810119629, 5.271164894104004], + [-0.5008983612060547, 1.0343302488327026], + [3.200472116470337, -4.519864082336426], + [3.133739471435547, -4.089683532714844], + [7.7719035148620605, -4.472866535186768], + [6.425943374633789, -1.3317350149154663], + [-3.727196455001831, -2.2576255798339844], + [0.003465704619884491, 11.979445457458496], + [2.698016405105591, 0.7881088256835938], + [3.2989604473114014, -3.5661561489105225], + [-2.4561610221862793, 1.2425341606140137], + [5.57321834564209, 7.694907188415527], + [3.7424476146698, 1.5160712003707886], + [-0.9893063902854919, -1.7850459814071655], + [1.2594562768936157, 1.345035433769226], + [2.1882941722869873, 3.7749240398406982], + [3.001652956008911, -10.374283790588379], + [7.942955493927002, 9.364168167114258], + [3.1258933544158936, 1.0917773246765137], + [0.1725429892539978, 10.207976341247559], + [8.687750816345215, -2.5321834087371826], + [2.304778814315796, 5.955718994140625], + [2.2667105197906494, 2.8301641941070557], + [0.22457242012023926, 10.637502670288086], + [1.7319283485412598, 5.489919662475586], + [0.20980042219161987, 11.358185768127441], + [0.958447277545929, 6.3313188552856445], + [-2.5962915420532227, 2.1338186264038086], + [0.2283053994178772, 11.164373397827148], + [-4.697680473327637, -6.048885345458984], + [3.3474373817443848, 1.3755545616149902], + [3.4933524131774902, -3.546513557434082], + [2.2271230220794678, 5.422654151916504], + [-0.03097362071275711, 14.347044944763184], + [-0.09431817382574081, -1.6239922046661377], + [6.514460563659668, -5.782674789428711], + [2.562065839767456, -7.348303318023682], + [3.0540173053741455, -8.478200912475586], + [7.679251194000244, -2.1179676055908203], + [2.4881365299224854, 4.114055633544922], + [1.4414889812469482, 0.11436492204666138], + [-4.702899932861328, -0.03319847956299782], + [-0.131849467754364, -1.6328418254852295], + [-6.168582439422607, 7.316900730133057], + [1.3526060581207275, 6.049492835998535], + [-0.03117961436510086, 13.443178176879883], + [-4.229641437530518, -6.114771842956543], + [2.0987327098846436, -0.005406741052865982], + [-0.3916996121406555, -1.2061282396316528], + [1.6945000886917114, 5.192117691040039], + [-5.821371555328369, 7.967223167419434], + [-1.1228493452072144, -3.4731743335723877], + [-3.704317092895508, -1.0332210063934326], + [-4.738278865814209, -3.703748941421509], + [0.04367976635694504, 12.216358184814453], + [-1.7940435409545898, 0.8782553672790527], + [3.634869337081909, -3.167942762374878], + [6.232577800750732, -3.0595266819000244], + [-5.28399658203125, -3.139106035232544], + [-0.412075936794281, -1.5384794473648071], + [-3.343409776687622, -0.9707949161529541], + [2.2411282062530518, 5.378426551818848], + [3.2931056022644043, -4.713541030883789], + [3.5183892250061035, 6.430200576782227], + [-5.417759418487549, 5.5454864501953125], + [4.394480228424072, -8.05101203918457], + [2.336406946182251, 5.995248794555664], + [-3.4960861206054688, -5.671149253845215], + [-3.128119707107544, -5.502155303955078], + [1.3952105045318604, 3.1884963512420654], + [-2.1122381687164307, -3.993098258972168], + [6.235692977905273, -1.998797059059143], + [3.7661640644073486, -4.597652912139893], + [-5.958349704742432, 6.656243324279785], + [-6.907963275909424, 4.528133392333984], + [0.04827486723661423, 9.366111755371094], + [-4.761371612548828, -2.056642770767212], + [-2.286053419113159, 3.1036593914031982], + [-2.102365255355835, 2.5958003997802734], + [2.8002614974975586, -3.897878408432007], + [-1.3486785888671875, 1.076718807220459], + [1.4939589500427246, 0.2547207474708557], + [-4.8577470779418945, -8.215410232543945], + [1.1748645305633545, 5.222250938415527], + [-4.210488796234131, -6.424676895141602], + [-1.9895710945129395, 2.4313712120056152], + [3.3392035961151123, -3.6038458347320557], + [-7.515283584594727, -0.07633328437805176], + [0.3934365510940552, 11.748627662658691], + [8.257591247558594, -2.3633384704589844], + [1.6311862468719482, 0.7308741211891174], + [2.953279733657837, 1.1913410425186157], + [-5.377249717712402, 6.023589134216309], + [4.1056647300720215, -3.5470833778381348], + [-3.1193175315856934, 1.3917531967163086], + [-2.847316265106201, 1.714249610900879], + [-0.6627838611602783, 1.156150460243225], + [3.668396234512329, -3.0040929317474365], + [-1.9895673990249634, -3.697737693786621], + [2.255465269088745, 1.546357274055481], + [8.374944686889648, -2.608992338180542], + [-4.849380970001221, 1.9560083150863647], + [3.3012735843658447, -5.94659423828125], + [-3.4574639797210693, -5.7443013191223145], + [-2.4311740398406982, -3.253455877304077], + [0.7069463133811951, -5.970332145690918], + [-4.154771327972412, -2.578305721282959], + [3.5632245540618896, 1.0053781270980835], + [-4.016521453857422, -2.65501070022583], + [-3.999480962753296, -1.5158233642578125], + [-1.0795607566833496, 1.102323055267334], + [2.776087760925293, -7.626208305358887], + [-3.3246266841888428, -1.1905792951583862], + [-1.9971293210983276, 0.9983630180358887], + [-6.099215507507324, 0.2994416356086731], + [2.7021484375, -8.539355278015137], + [0.008502773940563202, 13.087237358093262], + [1.7703015804290771, 0.18180111050605774], + [-6.812157154083252, 8.281774520874023], + [10.540846824645996, -2.4901747703552246], + [2.5296599864959717, 4.680312156677246], + [-2.4586174488067627, 1.982880711555481], + [9.81377124786377, -2.3565638065338135], + [2.351996898651123, -7.309276103973389], + [-5.169774055480957, 4.254332542419434], + [-4.355597019195557, 4.479852676391602], + [3.263674020767212, -4.58273458480835], + [3.950183153152466, -3.7538583278656006], + [-2.9451725482940674, -4.388236045837402], + [6.255107879638672, -2.9513967037200928], + [2.634349822998047, 5.121879577636719], + [3.0382745265960693, 5.435122489929199], + [-0.2121114432811737, -1.6679695844650269], + [0.020357422530651093, 13.599031448364258], + [0.06709104031324387, 11.852896690368652], + [1.898996353149414, -4.530496597290039], + [-4.593576908111572, -3.92094087600708], + [-3.8469350337982178, -3.8324244022369385], + [3.5732674598693848, -7.929544448852539], + [2.95940899848938, -7.514580726623535], + [-0.22705429792404175, 7.863728046417236], + [-2.0952279567718506, -3.099677324295044], + [7.819015026092529, -1.6555956602096558], + [-6.4829792976379395, 7.217465400695801], + [-4.365023136138916, -6.521620750427246], + [-2.023428440093994, 2.4875853061676025], + [5.389909267425537, 7.105869770050049], + [3.197557210922241, -6.091973781585693], + [9.691320419311523, -2.358907461166382], + [-1.5416674613952637, 1.9379749298095703], + [-5.014796733856201, 4.378552436828613], + [-4.203545570373535, 5.573094844818115], + [-2.985623598098755, -2.8938324451446533], + [-4.838266372680664, -7.736340522766113], + [3.892052412033081, -3.4421722888946533], + [-4.1201252937316895, -6.387209892272949], + [0.7351447939872742, -0.9818170666694641], + [2.7993786334991455, -7.436315059661865], + [7.560998439788818, -2.1495425701141357], + [-2.4457690715789795, 1.4390753507614136], + [-0.543704628944397, 0.7183185815811157], + [8.724175453186035, -2.3713972568511963], + [-4.38191556930542, -3.0417428016662598], + [2.8817946910858154, -3.991528034210205], + [2.9976556301116943, -4.221888542175293], + [2.460139274597168, -0.07382841408252716], + [0.20764732360839844, 9.35641098022461], + [3.107274293899536, -2.9388387203216553], + [6.8515706062316895, -2.928741216659546], + [9.722434043884277, -2.38974666595459], + [-3.8452742099761963, -1.71965491771698], + [-1.1907825469970703, -3.819401741027832], + [3.721069574356079, -3.524125814437866], + [-0.22577908635139465, -1.518633246421814], + [0.9854751229286194, 7.6805620193481445], + [2.825371503829956, 1.4224437475204468], + [8.308557510375977, -2.362123727798462], + [-4.031007289886475, -2.7762012481689453], + [7.348921775817871, -2.5609171390533447], + [7.066741943359375, -1.710042119026184], + [10.302765846252441, -2.464299201965332], + [5.039241313934326, 6.9107465744018555], + [-1.9589372873306274, 6.556301116943359], + [-2.521578788757324, -3.0952906608581543], + [-1.9744480848312378, 2.5252304077148438], + [-4.151010513305664, -2.497356653213501], + [-1.989052653312683, 2.092698812484741], + [-6.768836975097656, 7.867698669433594], + [4.01192045211792, 1.6941090822219849], + [-2.632422924041748, -4.231372833251953], + [2.3995707035064697, -9.165651321411133], + [9.539993286132812, -2.4604928493499756], + [-3.7215635776519775, 0.7230871915817261], + [1.7833646535873413, -4.990551948547363], + [-3.358154058456421, -5.070685863494873], + [5.888199329376221, -3.0073089599609375], + [3.0261189937591553, -2.811228036880493], + [0.013265542685985565, 13.629432678222656], + [2.442978620529175, 4.574365615844727], + [-4.783275127410889, 4.060497760772705], + [5.573269367218018, -3.024996042251587], + [8.88470458984375, -2.422154188156128], + [-2.520427703857422, 1.5709432363510132], + [1.8545159101486206, 6.2273454666137695], + [-4.8036675453186035, -7.123522758483887], + [7.046480178833008, -5.060901165008545], + [3.3859951496124268, -4.652830123901367], + [-4.895457744598389, -6.8925886154174805], + [3.5542404651641846, -3.9154698848724365], + [7.178635120391846, 8.572758674621582], + [-6.300233364105225, 7.0621538162231445], + [-1.7336684465408325, -0.5268828868865967], + [-4.697792053222656, -1.4761149883270264], + [6.083491325378418, 7.692069053649902], + [8.166387557983398, -2.097676992416382], + [-2.572995901107788, 1.9950608015060425], + [-2.3196754455566406, 2.390538454055786], + [0.4051547646522522, 0.4136674404144287], + [7.149511814117432, -2.798173189163208], + [-1.8588154315948486, 2.3757150173187256], + [6.662030220031738, -5.865828514099121], + [3.5484068393707275, -8.264313697814941], + [0.24406129121780396, -1.469639778137207], + [-0.03140420466661453, 9.473785400390625], + [-2.100198984146118, 2.556460380554199], + [3.5882582664489746, 6.016086578369141], + [-4.662858486175537, 4.755183219909668], + [0.6460040211677551, -0.4969504475593567], + [1.6312012672424316, 0.264432430267334], + [-2.007640838623047, 2.2227776050567627], + [6.820703506469727, 8.357144355773926], + [-4.100809574127197, 5.4397101402282715], + [3.243096113204956, -7.1065168380737305], + [2.8998398780822754, 6.655744552612305], + [9.060205459594727, -2.224198341369629], + [3.542250156402588, -3.5594115257263184], + [3.946129083633423, -6.5137152671813965], + [0.230235755443573, 10.803779602050781], + [3.7966511249542236, -7.911189079284668], + [2.6516377925872803, 4.134662628173828], + [-6.087588310241699, 6.508724689483643], + [8.661253929138184, -2.3155062198638916], + [6.9135942459106445, -3.267209529876709], + [0.6815059781074524, 10.720602035522461], + [-4.953826427459717, -3.9119980335235596], + [2.0719571113586426, 0.5437325835227966], + [8.295438766479492, -2.601282835006714], + [8.642312049865723, -2.4369404315948486], + [8.400993347167969, -2.433173418045044], + [1.643715739250183, -6.301227569580078], + [9.929680824279785, -2.387011766433716], + [7.19657564163208, -3.5393612384796143], + [-2.1109187602996826, 2.5849688053131104], + [1.5541863441467285, 1.9507066011428833], + [-1.8818391561508179, -2.0648374557495117], + [8.916523933410645, -2.3655025959014893], + [7.13599967956543, -6.043496131896973], + [0.04096215218305588, 9.263038635253906], + [-1.4389557838439941, 2.058664560317993], + [0.16571837663650513, 10.226219177246094], + [9.63060474395752, -2.470364809036255], + [1.5118412971496582, -1.0765527486801147], + [-2.564319372177124, 2.3975625038146973], + [5.978098392486572, -3.0813822746276855], + [6.455118656158447, -1.153056263923645], + [-4.810840129852295, 4.227489471435547], + [-1.9020789861679077, 1.5997130870819092], + [3.117339849472046, -7.802365779876709], + [0.32845014333724976, 11.979000091552734], + [5.301782608032227, 6.7745280265808105], + [-1.973864197731018, 2.3227221965789795], + [4.218288898468018, -6.225257873535156], + [2.660710573196411, 6.19091272354126], + [13.47265338897705, -2.8216378688812256], + [-3.780092477798462, -6.141132354736328], + [2.6043713092803955, 5.766049385070801], + [-3.6371397972106934, -4.587907791137695], + [-1.9947024583816528, -5.019518852233887], + [-2.089458703994751, 0.06779977679252625], + [-5.480683326721191, -0.5919537544250488], + [6.058683395385742, -1.3346736431121826], + [-1.534168004989624, 0.9858500957489014], + [2.5222132205963135, -8.844915390014648], + [-1.378468632698059, 1.5558537244796753], + [1.4378547668457031, -3.1427433490753174], + [3.69643497467041, -6.681842803955078], + [6.4957146644592285, -3.8702659606933594], + [-6.842853546142578, 7.987682342529297], + [-5.74730920791626, -1.6582361459732056], + [-3.5396006107330322, -3.8369691371917725], + [-1.5815311670303345, 1.9591752290725708], + [1.8384718894958496, -7.455839157104492], + [8.808687210083008, -2.3555748462677], + [9.149145126342773, -2.5158565044403076], + [6.746875286102295, 8.272995948791504], + [-2.2059028148651123, 2.286543369293213], + [-0.9582971334457397, 1.4975539445877075], + [2.742202043533325, 4.6585259437561035], + [3.2448415756225586, 4.710373878479004], + [0.25422123074531555, -1.4256874322891235], + [2.495781183242798, 2.327025890350342], + [1.212296485900879, -4.008070468902588], + [-0.1416599154472351, 5.723072052001953], + [5.715132236480713, -1.2766532897949219], + [-2.248013734817505, 2.051564931869507], + [-2.772655725479126, -2.00754976272583], + [6.091663837432861, 8.152566909790039], + [-1.0111161470413208, 1.5417298078536987], + [0.13276833295822144, 9.907570838928223], + [3.524773120880127, -4.839140892028809], + [-1.8882224559783936, 1.8718949556350708], + [-3.780040740966797, -6.133102893829346], + [1.2858320474624634, 4.896145820617676], + [3.5798981189727783, 0.8570291996002197], + [-2.1379761695861816, 2.5610921382904053], + [-5.861785411834717, 2.815192461013794], + [-5.07866096496582, 3.8029799461364746], + [-2.859499216079712, 1.0925066471099854], + [3.3218486309051514, -3.073786973953247], + [-1.6541852951049805, -4.042777061462402], + [2.76706862449646, -9.424636840820312], + [6.347869396209717, -1.4728599786758423], + [0.17453685402870178, -0.855840802192688], + [7.6771063804626465, 9.242162704467773], + [-1.9895155429840088, 2.336416721343994], + [-5.007973670959473, 3.7179243564605713], + [-0.12482460588216782, -1.4978333711624146], + [1.1294119358062744, -1.3930506706237793], + [4.184999942779541, -3.458850860595703], + [-6.529487133026123, 7.780529022216797], + [0.40545201301574707, 11.246438980102539], + [4.032177925109863, -2.97198224067688], + [-2.1295793056488037, -2.2317745685577393], + [-4.232686519622803, 5.68828010559082], + [-3.275059938430786, -5.575961112976074], + [0.044857434928417206, 12.26434326171875], + [5.803186416625977, -1.2191466093063354], + [1.1775016784667969, 4.463299751281738], + [-5.759251117706299, 6.5624589920043945], + [0.03404992073774338, 12.249212265014648], + [3.2493839263916016, -4.547754287719727], + [8.133517265319824, -2.263387680053711], + [0.17743080854415894, 10.160882949829102], + [2.2843124866485596, 5.362146377563477], + [9.249785423278809, -2.408893346786499], + [-5.211003303527832, -2.821202039718628], + [2.9639713764190674, -7.073604583740234], + [-2.477112054824829, -4.594648361206055], + [3.3252274990081787, 1.9903310537338257], + [2.932650566101074, -3.5813703536987305], + [-0.9696986079216003, -3.5644876956939697], + [-0.1675625443458557, 9.063765525817871], + [-2.2954092025756836, 2.7007129192352295], + [3.048539400100708, -6.197820663452148], + [3.6480212211608887, -3.339049816131592], + [-3.8526735305786133, -4.283052921295166], + [-4.039076805114746, -6.154778957366943], + [0.00906563550233841, -1.2977954149246216], + [3.454852819442749, 6.754589080810547], + [-0.6152089238166809, -2.0393788814544678], + [-2.6457014083862305, -2.9959990978240967], + [2.528536558151245, 3.336588144302368], + [-5.314666271209717, -1.2379335165023804], + [2.740338087081909, 3.9690053462982178], + [-2.448615550994873, 2.469226837158203], + [1.8904705047607422, 0.03310916945338249], + [0.5052178502082825, 9.860715866088867], + [11.049195289611816, -2.5412070751190186], + [-2.4343719482421875, 1.8957641124725342], + [-1.9863839149475098, -3.4700229167938232], + [0.15546011924743652, 10.260674476623535], + [2.1449196338653564, 6.45810604095459], + [-5.246193885803223, 5.487192630767822], + [2.8205926418304443, -8.589317321777344], + [1.5151770114898682, 0.16943195462226868], + [5.971832752227783, -4.670051574707031], + [2.1518912315368652, 4.7193708419799805], + [6.1193013191223145, -3.044088125228882], + [-0.9680203199386597, 0.1856129914522171], + [3.6106276512145996, -7.916498184204102], + [3.9908478260040283, -3.5294957160949707], + [-2.0863869190216064, 2.338840961456299], + [-6.643794536590576, -1.6763256788253784], + [-5.4182305335998535, 6.487477779388428], + [-5.364487171173096, -3.5691304206848145], + [3.243983507156372, -4.641406536102295], + [8.506843566894531, -2.4531710147857666], + [-6.018613338470459, 7.3207197189331055], + [2.5589115619659424, -6.969449043273926], + [9.891212463378906, -2.3394217491149902], + [0.3477761149406433, 11.051606178283691], + [2.9277055263519287, -4.013937473297119], + [-3.911736011505127, -3.6871862411499023], + [9.540701866149902, -2.3188159465789795], + [-3.3226494789123535, -4.082802772521973], + [3.603503704071045, -5.066087245941162], + [0.03019379824399948, 9.811466217041016], + [-2.294264554977417, 2.285325765609741], + [3.662297010421753, -2.449293613433838], + [0.8979368805885315, 5.491154670715332], + [-3.0408718585968018, -3.2183659076690674], + [-5.049879550933838, -3.0841550827026367], + [5.562347412109375, 7.015964508056641], + [-0.5270882248878479, 0.3700805604457855], + [-3.1676719188690186, -4.0144853591918945], + [2.789372444152832, -3.7790064811706543], + [1.3962242603302002, -7.685967922210693], + [-0.001879282295703888, 12.614906311035156], + [-5.0274882316589355, 6.947707653045654], + [-5.4230055809021, 6.270457744598389], + [-3.9797616004943848, -5.940193176269531], + [2.078110933303833, 0.8800713419914246], + [-1.8572871685028076, 2.273237705230713], + [2.8624000549316406, -4.063824653625488], + [3.5805771350860596, -3.0254132747650146], + [-3.9794704914093018, 4.239774227142334], + [2.3872244358062744, -0.027697447687387466], + [-1.8950037956237793, 2.097554922103882], + [3.077787160873413, -4.380695343017578], + [2.197657346725464, 0.1818949431180954], + [-4.936615467071533, 0.047565992921590805], + [-3.2318246364593506, -2.3842384815216064], + [1.7029194831848145, 0.5602260828018188], + [-3.950732946395874, -3.098954439163208], + [0.8612737059593201, -2.0149238109588623], + [-2.1568655967712402, 2.7698781490325928], + [4.845296382904053, -4.166916370391846], + [3.715780019760132, -2.3370044231414795], + [-1.2963643074035645, 1.145684838294983], + [-4.469067096710205, -7.306934356689453], + [-4.341079235076904, -1.178328037261963], + [7.157188415527344, 8.603477478027344], + [4.019552707672119, -3.249502420425415], + [-0.08815575391054153, 10.474854469299316], + [-6.514941215515137, 7.532168865203857], + [2.770807981491089, 2.961911916732788], + [1.5522181987762451, -0.2287503033876419], + [3.9954144954681396, -2.5646493434906006], + [-2.081285238265991, 2.4340384006500244], + [9.73209285736084, -2.3847196102142334], + [-0.20378682017326355, -1.622094988822937], + [2.917093515396118, -4.095073223114014], + [-3.5458085536956787, -2.8384921550750732], + [-4.723268985748291, -6.6172332763671875], + [2.9766969680786133, -4.200551986694336], + [5.963725566864014, 7.702980041503906], + [1.8413832187652588, 6.0899858474731445], + [-1.6405701637268066, -4.078438758850098], + [9.06032657623291, -2.332145929336548], + [-0.8396667242050171, -3.289231061935425], + [3.7573726177215576, -3.414771318435669], + [2.904181480407715, -3.9323904514312744], + [-0.4025726914405823, 5.690001964569092], + [-4.988503456115723, -0.1545811891555786], + [0.018023423850536346, 11.718244552612305], + [3.963641405105591, -3.2288978099823], + [9.746203422546387, -2.487363576889038], + [5.214583873748779, -1.5972199440002441], + [-3.479771375656128, 3.5117926597595215], + [-6.253651142120361, 0.34517496824264526], + [-4.958298206329346, -0.8451557159423828], + [-5.676191329956055, -2.7419145107269287], + [-3.1226706504821777, -4.595353126525879], + [2.3215229511260986, -4.075468063354492], + [0.8571704030036926, -0.6926347017288208], + [2.956244707107544, -8.065180778503418], + [2.7813990116119385, -3.8479506969451904], + [-2.266430616378784, -3.894521474838257], + [-2.256470203399658, 2.2656638622283936], + [-4.660673141479492, 5.550687313079834], + [-5.209118366241455, 5.375664710998535], + [1.3655582666397095, -0.010137978941202164], + [2.2080600261688232, -2.250455617904663], + [4.655128002166748, -7.876923561096191], + [3.3605544567108154, -2.768460512161255], + [-4.412527084350586, -4.186023712158203], + [3.253469228744507, -7.978977680206299], + [1.803475022315979, 0.057954635471105576], + [7.99749231338501, -2.226701498031616], + [0.014539532363414764, 9.919783592224121], + [-1.4874441623687744, 3.8926448822021484], + [1.9450092315673828, 4.9119486808776855], + [8.974461555480957, -2.3597443103790283], + [1.8181692361831665, 1.0293774604797363], + [1.029029369354248, -6.489518165588379], + [-4.661296844482422, 3.3847761154174805], + [6.83429479598999, -2.7258472442626953], + [1.3858916759490967, -6.711805820465088], + [2.9588468074798584, -6.545487403869629], + [-6.1865105628967285, 0.5402840375900269], + [2.18009614944458, 6.02583122253418], + [6.423658847808838, -5.693965911865234], + [-2.851051092147827, 2.5280940532684326], + [5.027118682861328, -3.657717704772949], + [3.391432762145996, -4.038156986236572], + [-2.6246278285980225, -3.0041072368621826], + [5.662415504455566, -1.1699302196502686], + [6.6758713722229, 8.378355979919434], + [0.7205374836921692, -0.6640067100524902], + [6.972404956817627, -1.6169129610061646], + [-1.8311035633087158, -3.072779893875122], + [0.18194234371185303, 11.407136917114258], + [-3.6525487899780273, -5.709442138671875], + [-5.662562847137451, 4.321479797363281], + [3.6683385372161865, -7.447805404663086], + [4.206633567810059, -3.554889678955078], + [-6.405833721160889, 0.5451161861419678], + [1.7503902912139893, 0.5627414584159851], + [8.03197193145752, -2.1700315475463867], + [5.977456569671631, -2.964370012283325], + [-2.1931047439575195, -4.013100624084473], + [0.2072153091430664, 10.256949424743652], + [0.6133086085319519, -0.8340297341346741], + [-5.956940650939941, -0.9528825283050537], + [2.5620670318603516, -6.314455032348633], + [-1.0060920715332031, 2.8586935997009277], + [-4.960913181304932, -4.152022361755371], + [10.007877349853516, -2.3076696395874023], + [-4.33983850479126, -6.441008567810059], + [6.203027248382568, -1.285204529762268], + [0.020695678889751434, 12.63958740234375], + [-2.149993658065796, -0.5661871433258057], + [2.6632487773895264, -7.730950355529785], + [5.659691333770752, 7.026564598083496], + [-4.258110523223877, 4.261109352111816], + [7.2327399253845215, -1.733772873878479], + [4.103919506072998, -3.6670687198638916], + [6.037333011627197, 7.530542373657227], + [-2.077242136001587, 2.4425790309906006], + [4.26314640045166, 7.369237899780273], + [2.3073341846466064, 6.221930503845215], + [-1.8514050245285034, 1.9023361206054688], + [-4.530292987823486, -2.7841553688049316], + [6.125009536743164, -1.6260462999343872], + [3.680283308029175, 6.676366806030273], + [-4.005758285522461, -6.595668792724609], + [0.14524251222610474, 10.416589736938477], + [-3.2310242652893066, 4.947371959686279], + [3.0034749507904053, 5.987181663513184], + [3.489773988723755, -5.682393550872803], + [-2.7293951511383057, -4.054129600524902], + [-1.914857268333435, 2.3001720905303955], + [2.347452163696289, 0.4833186864852905], + [6.357862949371338, 8.042837142944336], + [6.139297962188721, -4.611250877380371], + [-6.080681324005127, 6.968520164489746], + [2.869835376739502, -8.829030990600586], + [3.800508499145508, -3.582336664199829], + [1.4788085222244263, 1.2476762533187866], + [0.3491796851158142, 11.943460464477539], + [-3.798872470855713, -3.940352439880371], + [-2.915390729904175, -4.665558815002441], + [-5.111688137054443, 2.942669630050659], + [-4.220405578613281, -2.454861640930176], + [-2.0045769214630127, -3.643719434738159], + [4.70900821685791, 6.633347988128662], + [-3.660996675491333, -4.074230670928955], + [6.9764323234558105, 8.722887992858887], + [0.06698640435934067, -1.3637590408325195], + [-5.181518077850342, -0.15666353702545166], + [0.8083915114402771, 1.182348370552063], + [-4.180721759796143, -6.09761381149292], + [-1.093574047088623, 0.46963608264923096], + [-2.790308713912964, -3.2911689281463623], + [5.332980632781982, -4.1675944328308105], + [-1.9928399324417114, 1.9324336051940918], + [-4.339639186859131, 5.90967321395874], + [-4.830882549285889, -7.3172197341918945], + [3.826483726501465, -3.3264448642730713], + [0.5443758368492126, -0.9902032017707825], + [-2.0197677612304688, 0.19630849361419678], + [3.154270648956299, -10.67677116394043], + [3.078775644302368, -9.859134674072266], + [-3.2966678142547607, 5.080293655395508], + [7.791347026824951, -2.125239133834839], + [2.0522689819335938, -8.663361549377441], + [0.028065018355846405, 11.041359901428223], + [-3.9734597206115723, 5.662217617034912], + [3.172124147415161, -3.8056766986846924], + [3.8719112873077393, -9.268407821655273], + [4.705288410186768, -3.383185386657715], + [6.163247585296631, 7.608968734741211], + [5.477621078491211, 7.1728973388671875], + [-2.3670451641082764, -1.7284202575683594], + [-0.0363202765583992, 9.420886993408203], + [3.5477488040924072, -5.463194847106934], + [-2.565303087234497, 1.3787747621536255], + [-3.9888827800750732, 5.736504554748535], + [2.6373534202575684, -6.114602565765381], + [0.14636749029159546, 11.009986877441406], + [-3.98270583152771, -6.603486061096191], + [-1.5735511779785156, -4.25730037689209], + [-2.643575668334961, -4.7559685707092285], + [1.7987473011016846, 6.2517290115356445], + [5.73925256729126, -1.1898740530014038], + [1.0424168109893799, -0.26998478174209595], + [-1.254954218864441, 1.743908166885376], + [-7.026647090911865, -0.6614201068878174], + [1.834825038909912, 4.634201526641846], + [-1.5385823249816895, 2.005934715270996], + [3.1143674850463867, -1.9334641695022583], + [-0.16314983367919922, -1.6825157403945923], + [0.9666727185249329, -5.968340873718262], + [2.024484872817993, 5.111630916595459], + [0.06717931479215622, 12.149763107299805], + [0.050031594932079315, 9.883395195007324], + [0.1319555640220642, 10.085517883300781], + [4.067316055297852, 6.559916019439697], + [-4.501891613006592, -2.160559892654419], + [6.130323886871338, 7.557881832122803], + [7.796010494232178, -2.2317588329315186], + [2.9158105850219727, -2.9182989597320557], + [-1.3632460832595825, 1.6201667785644531], + [-1.0470788478851318, -0.6985068321228027], + [5.352051734924316, -1.6456997394561768], + [3.856253147125244, 7.15659761428833], + [6.382335662841797, -1.4314099550247192], + [7.956925868988037, -2.166637420654297], + [0.033461444079875946, 9.731277465820312], + [-3.0940701961517334, -2.5415337085723877], + [-4.641936779022217, -6.51876974105835], + [-3.0283703804016113, -0.3484209179878235], + [2.9848525524139404, -4.196938514709473], + [-2.1753509044647217, 2.2852656841278076], + [4.239041805267334, 5.859454154968262], + [-1.9876737594604492, 1.7491854429244995], + [5.574952602386475, 7.622531890869141], + [0.030813805758953094, 9.524497032165527], + [9.633584022521973, -2.381823778152466], + [-5.34588623046875, 0.28939831256866455], + [10.166216850280762, -2.4089019298553467], + [6.328366756439209, -5.266528129577637], + [2.0268783569335938, 5.471609115600586], + [0.1584768295288086, 0.35591650009155273], + [9.445273399353027, -2.3672211170196533], + [-1.747558832168579, -4.432282447814941], + [-2.811109781265259, -2.5509016513824463], + [1.9796476364135742, 0.180789053440094], + [-6.282692909240723, 5.268402099609375], + [-5.585183143615723, -1.4335129261016846], + [3.781615972518921, -6.190308570861816], + [1.3815703392028809, -7.147538661956787], + [9.192632675170898, -2.2973220348358154], + [6.708761692047119, 8.183967590332031], + [6.308534145355225, -2.3299741744995117], + [-0.22813254594802856, -1.7134003639221191], + [-7.994302272796631, -0.4132949113845825], + [-5.750690937042236, 6.393662452697754], + [2.074486255645752, 2.5638887882232666], + [-2.483157157897949, 6.608778476715088], + [0.01648341864347458, 12.437383651733398], + [2.7114105224609375, -3.03666615486145], + [3.145296573638916, -4.414891242980957], + [5.388339519500732, 7.50026273727417], + [2.605088472366333, -7.356868743896484], + [4.206773281097412, -3.8540256023406982], + [3.1558923721313477, -8.821742057800293], + [-3.9829113483428955, 5.544767379760742], + [1.336612343788147, -6.369636535644531], + [0.09236209839582443, -2.205414295196533], + [-5.742225170135498, -3.507169008255005], + [0.1477488875389099, 10.001312255859375], + [-5.493550777435303, -2.4577317237854004], + [2.7610089778900146, -6.94610595703125], + [2.245076894760132, -7.961575508117676], + [7.374260425567627, -2.068918228149414], + [-5.938916206359863, -2.534590005874634], + [7.580012798309326, -2.6225690841674805], + [4.59252405166626, -3.8220062255859375], + [2.446349859237671, 4.705534934997559], + [3.26735520362854, -4.213519096374512], + [-6.53568696975708, 7.287786960601807], + [-3.983124017715454, -5.827991008758545], + [-5.3334059715271, -0.7973947525024414], + [-2.4469332695007324, 1.8082131147384644], + [3.2098472118377686, -7.952881813049316], + [-5.686807155609131, 7.098700046539307], + [-2.777336597442627, 6.366561412811279], + [-1.2537142038345337, 1.7733772993087769], + [5.263254642486572, -5.983470916748047], + [4.617724895477295, 7.081611633300781], + [-4.042820453643799, -1.096176266670227], + [-5.820024490356445, 7.464438438415527], + [-7.7309136390686035, -1.0068888664245605], + [-2.2493984699249268, 1.6971020698547363], + [-6.893233776092529, -0.43725836277008057], + [0.21004712581634521, 10.310049057006836], + [-3.0706255435943604, -0.6706504225730896], + [-0.05248487740755081, 9.381290435791016], + [-5.390945911407471, -6.45235538482666], + [-2.336677074432373, 2.521275758743286], + [-6.652360439300537, 7.1676025390625], + [3.8758325576782227, 1.6826092004776], + [3.202038288116455, 4.777029514312744], + [4.603306293487549, -3.218445301055908], + [-2.8259074687957764, 0.8591868281364441], + [8.801700592041016, -2.466219186782837], + [2.575007200241089, -9.184322357177734], + [-0.06753057986497879, 9.879947662353516], + [6.556553363800049, 8.47957992553711], + [-3.578951597213745, -5.919655799865723], + [-1.9988131523132324, 2.477876663208008], + [6.0638427734375, -1.2211908102035522], + [8.297099113464355, -2.3833110332489014], + [-1.5328670740127563, 1.3575106859207153], + [3.8972008228302, -3.5495119094848633], + [-3.979109048843384, -0.8888073563575745], + [-6.361876010894775, 7.264231204986572], + [-2.208312749862671, -0.9341868162155151], + [1.9251115322113037, -8.24195384979248], + [-5.593593120574951, 6.347720146179199], + [5.5924601554870605, -1.144088864326477], + [10.096211433410645, -2.4002268314361572], + [-4.2437286376953125, -6.481558799743652], + [-2.4547359943389893, -3.548842191696167], + [-4.168972015380859, -2.056831121444702], + [-2.1487648487091064, 2.5869152545928955], + [3.9265549182891846, -3.5673587322235107], + [1.1375370025634766, -7.062641620635986], + [-1.0094857215881348, 0.6316686272621155], + [-2.056941032409668, 2.524491310119629], + [-2.32205867767334, 1.9498131275177002], + [-4.948513031005859, -3.4118454456329346], + [-4.6322407722473145, 2.9052321910858154], + [3.2526774406433105, -8.179816246032715], + [-2.6391611099243164, 0.6571149230003357], + [8.399615287780762, -2.612623453140259], + [5.8122687339782715, 7.2868194580078125], + [-4.597353935241699, 3.5519535541534424], + [-0.04299033433198929, 10.080316543579102], + [-1.0273220539093018, 0.4263072609901428], + [0.181643545627594, 11.628219604492188], + [-2.8212578296661377, -3.316983938217163], + [0.7898680567741394, -0.47142690420150757], + [2.9123990535736084, -4.005659580230713], + [-7.977627277374268, 0.048894401639699936], + [-3.0182008743286133, -3.1375081539154053], + [-0.2633955776691437, -1.3345738649368286], + [-2.0320544242858887, -3.175903081893921], + [1.330474853515625, -7.450561046600342], + [9.544991493225098, -2.3506953716278076], + [-2.4141652584075928, 1.2649425268173218], + [5.085819721221924, -2.6945040225982666], + [-0.07412996143102646, -1.53913414478302], + [0.09841399639844894, 10.920965194702148], + [0.2894223928451538, -2.903076410293579], + [-4.3999342918396, 3.468341112136841], + [-6.41079568862915, 0.665083110332489], + [-2.85893177986145, -2.2249391078948975], + [-2.846651792526245, 6.612820625305176], + [2.0637614727020264, 1.9207392930984497], + [-3.2098801136016846, -2.516587495803833], + [1.8615641593933105, -4.2636003494262695], + [0.2237887978553772, 10.829301834106445], + [-2.468923807144165, 1.6066205501556396], + [-6.6221795082092285, 1.1863529682159424], + [5.6129984855651855, -1.163997769355774], + [-1.5962475538253784, 1.4323145151138306], + [1.0899126529693604, 0.10535803437232971], + [-4.2176008224487305, -1.3915114402770996], + [-4.810530185699463, -0.8671694993972778], + [8.992838859558105, -2.3400681018829346], + [1.0021531581878662, 4.7227864265441895], + [-6.696900367736816, 7.90505313873291], + [-2.1377432346343994, 2.614145517349243], + [3.3127129077911377, -5.192442417144775], + [-3.9650344848632812, 4.179241180419922], + [3.0461347103118896, 6.254152774810791], + [0.11523853987455368, 11.825754165649414], + [3.8733742237091064, 1.6759382486343384], + [-4.631540298461914, -1.4597212076187134], + [10.737435340881348, -2.5676634311676025], + [-5.096022605895996, -0.6763116717338562], + [-2.515501022338867, 1.7611258029937744], + [2.6748101711273193, -2.6537022590637207], + [-5.394500255584717, 3.7210495471954346], + [1.5572903156280518, 0.14587727189064026], + [-2.212514877319336, 2.2135074138641357], + [3.6648108959198, -7.307374477386475], + [-5.826690196990967, 3.4875903129577637], + [-6.324696063995361, 8.492134094238281], + [3.5422308444976807, -5.501564025878906], + [3.1495656967163086, 6.923504829406738], + [5.4470295906066895, -3.8159759044647217], + [-4.4413323402404785, -7.502708435058594], + [-3.2676303386688232, 3.3709139823913574], + [8.195838928222656, -2.376521348953247], + [3.0255022048950195, -4.042933940887451], + [3.1149942874908447, -3.067368745803833], + [-4.070199966430664, -5.748479843139648], + [-2.1418704986572266, 2.722337245941162], + [0.07662277668714523, 9.788053512573242], + [-2.2487943172454834, 2.367201805114746], + [1.2961492538452148, 4.499435901641846], + [-4.941079616546631, -7.565203666687012], + [3.9453318119049072, -3.238795280456543], + [-4.541433811187744, 4.2434000968933105], + [-2.1506381034851074, 2.193232297897339], + [1.9102813005447388, -7.845497131347656], + [-0.017198093235492706, 9.237031936645508], + [0.10230749100446701, 9.399093627929688], + [-2.107478618621826, 2.6105868816375732], + [3.1900293827056885, 1.110176920890808], + [3.772437572479248, -3.3896772861480713], + [-6.43262243270874, -1.4535456895828247], + [6.8731865882873535, 8.31442642211914], + [2.0371038913726807, 5.669281005859375], + [-2.581280469894409, 0.9206346869468689], + [3.0575735569000244, -3.418684244155884], + [-2.887049913406372, -1.4326021671295166], + [-2.409506320953369, 0.8158206939697266], + [4.127971172332764, -8.430612564086914], + [9.700322151184082, -2.34124755859375], + [5.23449182510376, 7.493130683898926], + [-4.193984508514404, -6.9906816482543945], + [6.8689656257629395, 8.333434104919434], + [7.428952693939209, 8.80190658569336], + [-4.47916841506958, 5.550237655639648], + [6.209262371063232, -5.738374710083008], + [2.677225112915039, -3.744572639465332], + [7.9277873039245605, -2.1357979774475098], + [4.293630599975586, -3.065566301345825], + [-2.3772125244140625, 2.31923508644104], + [-2.6718082427978516, 6.530995845794678], + [-3.47965669631958, -1.7034128904342651], + [-2.977684736251831, -5.157375335693359], + [-2.2498204708099365, 1.1586380004882812], + [7.59216833114624, 9.061928749084473], + [0.04525905102491379, 9.483987808227539], + [-2.767108201980591, 1.6799957752227783], + [7.834237575531006, -2.4713759422302246], + [2.855269193649292, -4.867631912231445], + [-5.543850898742676, 6.271820068359375], + [-0.506775438785553, -1.4571930170059204], + [4.418390274047852, -4.502905368804932], + [0.0653420016169548, 11.642032623291016], + [-4.51896858215332, -6.782834529876709], + [-0.06361610442399979, -0.14019089937210083], + [3.017463445663452, -4.182483673095703], + [5.2345290184021, -3.5017192363739014], + [8.168953895568848, -2.4327242374420166], + [-2.04164981842041, -4.96580696105957], + [-2.641774892807007, -4.056873321533203], + [-6.644561767578125, -1.8062381744384766], + [6.730364799499512, 8.284738540649414], + [7.340141296386719, -3.17285418510437], + [4.044159412384033, 1.526939868927002], + [2.1390464305877686, -1.5224252939224243], + [-4.5657830238342285, -7.038901329040527], + [-1.110123872756958, -3.292682409286499], + [-2.4994723796844482, 2.1547770500183105], + [0.9692022204399109, -7.798920631408691], + [-2.1061949729919434, 2.710282802581787], + [9.589184761047363, -2.5125691890716553], + [-4.4981279373168945, -3.1698787212371826], + [2.1852850914001465, -4.556931495666504], + [1.8305236101150513, 5.307012557983398], + [-0.6617329120635986, -3.123239040374756], + [7.5727219581604, 8.986645698547363], + [4.555104732513428, 1.9877861738204956], + [-2.8568453788757324, -5.257382392883301], + [1.2246652841567993, -0.9360567927360535], + [-2.279914140701294, 2.012439250946045], + [-1.8813440799713135, 2.383861780166626], + [1.4850594997406006, -7.685995101928711], + [-5.585878849029541, 6.959353446960449], + [3.024752616882324, -4.339882850646973], + [-0.04500586539506912, 9.877346992492676], + [6.738564491271973, 8.473611831665039], + [3.786329507827759, 6.1334710121154785], + [3.2746496200561523, 5.656191825866699], + [-3.5797414779663086, -6.392204284667969], + [1.1963505744934082, -3.7956159114837646], + [-3.891172170639038, -5.973759651184082], + [-2.493826150894165, 2.4110584259033203], + [-5.763554096221924, 4.810802459716797], + [3.1493589878082275, -8.399980545043945], + [5.749081134796143, 7.623560428619385], + [2.08343768119812, -5.948695182800293], + [-4.081861972808838, 6.649956703186035], + [3.6654579639434814, -3.0270135402679443], + [-4.58605432510376, -6.161350250244141], + [3.019355058670044, -2.9624650478363037], + [5.419719219207764, 7.276638984680176], + [3.890247106552124, 5.256797790527344], + [4.01763391494751, 1.8119683265686035], + [-3.228393316268921, -4.6111955642700195], + [3.1033992767333984, -8.81967544555664], + [-2.4109885692596436, -0.6656174063682556], + [3.9962384700775146, -3.5665009021759033], + [2.7854084968566895, -4.386029243469238], + [2.088041067123413, 4.509039402008057], + [-4.995071887969971, -4.590443134307861], + [-2.293828248977661, 2.339660167694092], + [5.811105251312256, 7.1745405197143555], + [-5.753610134124756, 6.717029571533203], + [2.9891631603240967, -4.229648590087891], + [2.671367883682251, -8.04262924194336], + [-0.03624672442674637, 9.518861770629883], + [-3.9086241722106934, -4.357542514801025], + [-3.6110851764678955, 7.084144592285156], + [-4.017115116119385, 4.927489280700684], + [-3.8257791996002197, -3.1118996143341064], + [3.839893102645874, -8.295568466186523], + [2.9034721851348877, -3.9954402446746826], + [-3.944955587387085, -3.7101099491119385], + [-4.944732666015625, 4.6487226486206055], + [-4.753165245056152, -7.324648857116699], + [2.0814924240112305, 1.934203028678894], + [-2.2173428535461426, 1.3014698028564453], + [-3.647993326187134, -2.0921401977539062], + [-4.942072868347168, -3.4243509769439697], + [-0.029191620647907257, 12.05834674835205], + [9.009824752807617, -2.296022415161133], + [-2.152592182159424, 2.7200796604156494], + [9.088360786437988, -2.303724765777588], + [-4.570742130279541, -7.343456268310547], + [3.3082873821258545, -3.7328763008117676], + [6.047999858856201, -3.0390946865081787], + [3.9039666652679443, 1.335676670074463], + [-3.250652551651001, -2.484475612640381], + [7.6187968254089355, -1.8107408285140991], + [0.19008898735046387, 10.140096664428711], + [2.4669156074523926, 0.5158804655075073], + [-5.048377513885498, 1.0378323793411255], + [-0.3816169500350952, 2.972790002822876], + [1.970501184463501, 4.176896572113037], + [0.31738632917404175, 11.368385314941406], + [4.9915690422058105, 7.287998199462891], + [4.4782843589782715, 6.604825019836426], + [1.0385229587554932, 2.5316758155822754], + [-5.102461814880371, 5.47593879699707], + [5.720162868499756, -5.532688140869141], + [4.080068588256836, -2.872373104095459], + [0.10462861508131027, 0.6848458647727966], + [-2.624593496322632, -3.02500319480896], + [-5.702702045440674, -0.27693474292755127], + [-4.655320644378662, 5.044493675231934], + [3.1531319618225098, 4.963513374328613], + [8.221680641174316, -2.220863103866577], + [-2.1937096118927, 2.178529977798462], + [8.493729591369629, -2.3010077476501465], + [-3.108105182647705, 3.6221067905426025], + [0.117350272834301, 12.541473388671875], + [0.0965270921587944, 10.181791305541992], + [3.599806070327759, -6.2164788246154785], + [-4.231260776519775, -0.6845826506614685], + [4.917689800262451, -1.493923544883728], + [2.974954843521118, -3.998631238937378], + [5.2823662757873535, -0.5098366141319275], + [6.354007720947266, -6.271749973297119], + [3.863774299621582, 1.3525726795196533], + [-1.8534430265426636, -1.138175129890442], + [6.527236461639404, -4.364890098571777], + [8.432835578918457, -2.4024746417999268], + [5.9890456199646, 8.353042602539062], + [-0.10235030204057693, 14.38022518157959], + [-5.627168655395508, -0.21714389324188232], + [-3.785463571548462, 0.902477502822876], + [-0.7934704422950745, 0.9961869716644287], + [-4.230597019195557, -6.571786880493164], + [-2.0333380699157715, 2.0661776065826416], + [8.610116004943848, -2.3252837657928467], + [-4.536651134490967, 4.192121982574463], + [3.364816427230835, -2.4114458560943604], + [7.727562427520752, -2.2630674839019775], + [2.6641736030578613, -3.615715503692627], + [2.441584587097168, -8.617389678955078], + [-1.9905908107757568, 2.141740083694458], + [0.053978972136974335, 11.723370552062988], + [4.124680042266846, -8.467123985290527], + [0.04194604605436325, 12.04290771484375], + [2.356847047805786, -4.177048683166504], + [3.46545672416687, -3.631758689880371], + [-2.546705722808838, 2.287118673324585], + [-0.007005937397480011, 12.126522064208984], + [0.44532638788223267, -2.3220081329345703], + [5.374085426330566, -6.9784111976623535], + [-3.2119436264038086, 4.499207496643066], + [4.441441059112549, -7.435905456542969], + [3.4827520847320557, -3.206418752670288], + [-1.7474429607391357, -0.5191205143928528], + [3.8769214153289795, -3.4974029064178467], + [7.329278469085693, -3.43318772315979], + [-2.110912561416626, 1.5708646774291992], + [-2.0695548057556152, 2.343953847885132], + [1.0571038722991943, -7.167874813079834], + [-4.84391450881958, -5.522368431091309], + [8.475919723510742, -2.42439341545105], + [0.19862180948257446, 9.246269226074219], + [3.8842265605926514, 1.5847373008728027], + [4.412694454193115, -2.425891160964966], + [0.15546143054962158, 10.020139694213867], + [2.1232962608337402, 0.9220341444015503], + [-4.227630615234375, -6.770130157470703], + [2.409885883331299, 3.3297252655029297], + [-2.4124536514282227, 2.175942897796631], + [2.5840976238250732, 4.043952941894531], + [4.007254123687744, -3.3726749420166016], + [2.9287168979644775, -2.9378812313079834], + [-0.923318088054657, -2.5665667057037354], + [3.309652090072632, -3.6016836166381836], + [-3.055079221725464, -4.114096641540527], + [-2.4814040660858154, 1.8778103590011597], + [-4.699548721313477, -6.805859565734863], + [-4.6888861656188965, -7.2598466873168945], + [2.721048593521118, 2.0763065814971924], + [-6.070973873138428, 5.492290496826172], + [-0.5583128333091736, -1.2816978693008423], + [4.799246311187744, 6.77448844909668], + [3.0393617153167725, -7.855625152587891], + [-3.7570135593414307, 4.978860855102539], + [-5.688055515289307, 4.908594131469727], + [7.502240180969238, -2.2541325092315674], + [2.8238325119018555, -3.6841962337493896], + [4.639232158660889, 6.210112571716309], + [-3.640601396560669, -5.276368618011475], + [0.12076108902692795, 10.600996017456055], + [5.093106269836426, -4.410599231719971], + [2.2075085639953613, 1.976737380027771], + [3.203742742538452, 1.102455496788025], + [-4.086319923400879, -3.2132225036621094], + [8.703093528747559, -2.2909419536590576], + [8.76590347290039, -2.3891372680664062], + [-2.3897907733917236, 2.4372878074645996], + [-0.08447916060686111, 9.127737045288086], + [2.260000705718994, 0.8912943601608276], + [-0.04926712065935135, 12.762176513671875], + [-5.0116143226623535, -2.1521339416503906], + [1.4895092248916626, -0.3248905837535858], + [2.5592145919799805, 0.6026690006256104], + [-3.9556736946105957, -5.059362411499023], + [11.137528419494629, -2.506592035293579], + [7.289608478546143, -2.4201574325561523], + [8.32055377960205, -2.255251169204712], + [-3.880213499069214, -2.7897837162017822], + [4.944080829620361, -3.8466007709503174], + [-4.422187328338623, -7.371399879455566], + [1.1142191886901855, -7.054627418518066], + [-5.107213020324707, 3.6909167766571045], + [0.6059297323226929, -5.846999168395996], + [2.3403542041778564, -9.091512680053711], + [-4.946197509765625, -1.3015592098236084], + [-3.579145669937134, -4.426817893981934], + [-6.888767242431641, 1.670041799545288], + [-3.390320301055908, -4.813266754150391], + [-1.3900794982910156, -2.9730217456817627], + [4.162850379943848, -3.5465307235717773], + [-2.0893337726593018, 0.9395748376846313], + [0.21045196056365967, 8.120388984680176], + [3.2853055000305176, -4.700859546661377], + [8.44471549987793, -2.298940896987915], + [6.283109664916992, -2.3887996673583984], + [-7.232014179229736, -0.18804025650024414], + [-1.992292881011963, 1.3655939102172852], + [7.857239246368408, -2.7018239498138428], + [3.02582049369812, -4.2564568519592285], + [-0.01783723384141922, 11.99746036529541], + [7.121674060821533, -1.9515630006790161], + [8.574370384216309, -2.348630905151367], + [-6.175696849822998, 2.1502885818481445], + [1.8586201667785645, 1.8127599954605103], + [8.45848560333252, -2.68572735786438], + [0.129204660654068, -1.7618368864059448], + [-2.394416570663452, 2.0902750492095947], + [6.57378625869751, -2.802025556564331], + [-1.5249332189559937, 1.886682152748108], + [3.0898444652557373, 6.699618339538574], + [3.4019885063171387, -2.2898147106170654], + [8.257533073425293, -2.497239828109741], + [2.7726223468780518, -3.9157192707061768], + [-0.2298373579978943, -1.6015973091125488], + [-4.768519401550293, -0.4682016968727112], + [9.629813194274902, -2.3356740474700928], + [6.7256083488464355, 8.316973686218262], + [-2.657200574874878, 1.237593173980713], + [1.8511461019515991, -7.155251979827881], + [-2.1156229972839355, 2.4420530796051025], + [7.725967884063721, -2.087310314178467], + [5.556426525115967, -3.089446783065796], + [-4.336540222167969, 3.558488607406616], + [2.382838487625122, -9.017574310302734], + [3.093285322189331, 2.003938913345337], + [0.13798362016677856, 11.87470817565918], + [-3.1771187782287598, 3.152366876602173], + [4.26727819442749, -3.7323250770568848], + [-5.124495983123779, 7.147576332092285], + [-6.3801703453063965, -0.7176434993743896], + [-4.381165981292725, -6.344148635864258], + [2.085557222366333, 4.366177082061768], + [9.619368553161621, -2.3769686222076416], + [-3.9541847705841064, 4.889348030090332], + [0.012579523026943207, -1.566977858543396], + [2.3398239612579346, 4.432475566864014], + [-6.2573418617248535, 7.598676681518555], + [2.879117250442505, -4.214998245239258], + [-2.1172597408294678, 2.6322739124298096], + [-6.0821123123168945, 5.142946720123291], + [-0.043963201344013214, 9.065078735351562], + [5.775860786437988, 7.843649864196777], + [3.4843945503234863, -5.357856273651123], + [-1.4104992151260376, 1.2944105863571167], + [-4.527425765991211, 6.955931663513184], + [-0.8141344785690308, -2.363095760345459], + [5.753698348999023, -5.065034866333008], + [0.002165965735912323, 12.526361465454102], + [-4.287117004394531, 3.214498281478882], + [-6.07733678817749, 7.024938583374023], + [-2.243096351623535, 1.9646869897842407], + [-6.461925029754639, 7.568610668182373], + [1.9173917770385742, 0.8302993774414062], + [-4.682949066162109, -1.4499558210372925], + [2.750232458114624, -9.360185623168945], + [2.466177225112915, -3.3936948776245117], + [1.721579909324646, -4.556875705718994], + [3.8177144527435303, -3.626770496368408], + [-2.126816987991333, 2.548337936401367], + [0.49873822927474976, 10.943490028381348], + [-4.574690341949463, -6.866261005401611], + [7.332583904266357, -3.773050546646118], + [1.797242522239685, -7.027263641357422], + [3.4549636840820312, -5.568269729614258], + [7.159663677215576, -3.0199873447418213], + [9.00216293334961, -2.4646146297454834], + [4.051145553588867, 6.251511573791504], + [-2.8656795024871826, -5.109235763549805], + [3.2923097610473633, -3.2086756229400635], + [1.5374255180358887, -5.723456382751465], + [2.1319849491119385, 0.6037055253982544], + [-3.9894113540649414, -4.215879440307617], + [3.2330212593078613, -8.245782852172852], + [-5.166658878326416, -3.12459397315979], + [-0.7002856135368347, 8.571436882019043], + [9.142501831054688, -2.5026748180389404], + [2.852145195007324, -5.103700160980225], + [-3.646784543991089, -1.1565059423446655], + [1.5847060680389404, 0.11759242415428162], + [2.5029447078704834, -7.852582931518555], + [-3.1636760234832764, 0.6303927898406982], + [1.8380396366119385, 4.743770599365234], + [-3.827741861343384, -0.5965288877487183], + [3.146364450454712, 4.574577808380127], + [-2.399336576461792, 3.3283867835998535], + [6.874826431274414, 8.483015060424805], + [1.4854137897491455, 5.117277145385742], + [1.5909156799316406, 2.266632318496704], + [-2.7140953540802, -4.790087699890137], + [-2.1855077743530273, 1.0295764207839966], + [-7.319514751434326, 8.510149955749512], + [-3.7635605335235596, 7.11989164352417], + [7.996367931365967, -2.3717944622039795], + [8.824228286743164, -2.2641074657440186], + [5.977896213531494, -1.254714846611023], + [2.9138710498809814, 1.1133699417114258], + [-2.1404078006744385, 2.267068386077881], + [4.4238481521606445, 1.8240275382995605], + [-3.345721483230591, -5.397510051727295], + [3.2474365234375, 6.4955549240112305], + [-3.6237361431121826, -1.9929543733596802], + [2.389286756515503, 0.1278858780860901], + [-1.477180004119873, -1.4960832595825195], + [3.019845724105835, 1.5005966424942017], + [-2.33221435546875, -0.5048680305480957], + [-0.011168666183948517, 12.913150787353516], + [-6.035262584686279, 5.123508453369141], + [3.0264251232147217, -7.178178787231445], + [2.872450590133667, -9.528009414672852], + [-2.3319594860076904, -4.752831935882568], + [5.695366382598877, 7.2554216384887695], + [-5.589431285858154, -1.210664987564087], + [3.5301876068115234, -3.8029096126556396], + [10.744339942932129, -2.5669782161712646], + [6.45674467086792, -2.240630865097046], + [3.440767526626587, -7.121196746826172], + [0.6630478501319885, 0.7098809480667114], + [0.14731603860855103, 10.079156875610352], + [1.0836691856384277, -6.471507549285889], + [2.05118727684021, 4.193425178527832], + [1.675853967666626, -7.097809791564941], + [5.960842132568359, -4.671882629394531], + [0.2908744215965271, 11.572649002075195], + [0.2906638979911804, 11.017244338989258], + [7.583128452301025, 9.002933502197266], + [5.9919610023498535, 7.5486297607421875], + [-2.34486985206604, 2.388413667678833], + [-3.8418009281158447, 4.40376091003418], + [-4.908738136291504, -7.617002487182617], + [-1.7775814533233643, 2.274083375930786], + [-1.7668657302856445, -3.3022449016571045], + [-1.40961754322052, 0.6582039594650269], + [2.954909086227417, -4.680335998535156], + [-6.630605220794678, 8.187426567077637], + [-4.515841960906982, -6.509127616882324], + [2.848170042037964, -7.045376300811768], + [-2.622652530670166, -3.303994655609131], + [-2.120500326156616, 2.251861333847046], + [-2.0281569957733154, 2.4926044940948486], + [2.174657106399536, 4.305585861206055], + [2.81372332572937, -8.42894172668457], + [0.21334105730056763, 11.482646942138672], + [0.18406826257705688, 10.312505722045898], + [-3.720959186553955, -4.430584907531738], + [7.523824691772461, -1.538676142692566], + [5.9528489112854, -2.8871543407440186], + [-6.715210437774658, 8.012147903442383], + [2.3821194171905518, 3.3337066173553467], + [3.060997724533081, -4.2281293869018555], + [-1.5063941478729248, -4.0510358810424805], + [1.2248508930206299, -7.444316864013672], + [0.8267989754676819, 3.2899115085601807], + [9.196440696716309, -2.3748862743377686], + [-1.1199069023132324, 1.5138251781463623], + [-2.8559370040893555, -3.7770450115203857], + [3.4520552158355713, -7.706982612609863], + [-3.213625192642212, 2.8159399032592773], + [-3.3766632080078125, -0.7454109191894531], + [10.775557518005371, -2.4912269115448], + [2.7968149185180664, 4.533940315246582], + [-1.7506844997406006, -4.724081039428711], + [-3.154677152633667, -3.8627254962921143], + [7.926944255828857, -2.1515886783599854], + [0.87493497133255, -0.56145840883255], + [-2.856349229812622, -0.9010415077209473], + [3.2562062740325928, -4.7067084312438965], + [3.1232941150665283, -9.222652435302734], + [2.122652292251587, 0.7633278965950012], + [2.9489519596099854, -9.323442459106445], + [-6.864736557006836, -2.2940480709075928], + [1.5659937858581543, -7.294411659240723], + [5.785749435424805, -1.073264479637146], + [6.430887699127197, -1.399010419845581], + [-4.164041996002197, -5.980193138122559], + [2.25758957862854, -3.313875436782837], + [0.6400381922721863, 5.446371078491211], + [0.009318821132183075, 12.983978271484375], + [-3.1466591358184814, -5.703766822814941], + [10.121573448181152, -2.423978567123413], + [1.6377438306808472, 0.27293217182159424], + [2.5469601154327393, 5.141142845153809], + [-4.695468425750732, -7.072839736938477], + [8.198925971984863, -2.936131238937378], + [7.198155879974365, -1.993284821510315], + [-5.090003490447998, -0.9382666349411011], + [-0.9224796891212463, -1.198491096496582], + [-4.802555561065674, -6.852883338928223], + [-1.8146191835403442, 1.7425785064697266], + [-2.1026697158813477, 2.678291082382202], + [2.7385451793670654, 6.191889762878418], + [-2.3996636867523193, 4.121433734893799], + [3.01777720451355, 1.3591536283493042], + [-5.322036266326904, 6.292967796325684], + [6.179295063018799, 7.934035301208496], + [3.669764757156372, -8.103504180908203], + [4.630831241607666, -3.230415105819702], + [-2.700735330581665, -3.419442892074585], + [7.628567218780518, -2.056347370147705], + [-3.842949628829956, -3.100939989089966], + [-5.166319370269775, 5.697230339050293], + [-4.02372932434082, -5.242663383483887], + [-3.115963935852051, -0.11406564712524414], + [3.9641354084014893, 1.718493103981018], + [1.7209528684616089, 4.654650688171387], + [11.190286636352539, -2.6378567218780518], + [6.849313259124756, 8.406636238098145], + [4.371471881866455, -3.4766480922698975], + [2.5074727535247803, 5.9346089363098145], + [-5.526484489440918, -1.5260612964630127], + [0.013969354331493378, 12.963567733764648], + [1.8184536695480347, -0.8783938884735107], + [4.199215412139893, -3.265728235244751], + [-2.3190371990203857, 1.9682382345199585], + [-3.5177786350250244, -1.1957134008407593], + [1.679643988609314, -6.599503517150879], + [5.913079738616943, 7.556588649749756], + [3.0787651538848877, 0.886691689491272], + [-0.18526524305343628, 9.464760780334473], + [-4.644312381744385, -6.800209999084473], + [0.734669029712677, -5.879059314727783], + [-4.125925540924072, -3.6386969089508057], + [-4.758498668670654, 3.8368189334869385], + [-1.8811635971069336, -3.457188844680786], + [-2.6304805278778076, 0.8036750555038452], + [6.232142925262451, -5.044642448425293], + [5.920080661773682, -2.524233102798462], + [2.4163899421691895, -5.15740442276001], + [-4.241816997528076, -6.326491355895996], + [3.3453238010406494, 6.1115803718566895], + [-5.030216693878174, 5.884023666381836], + [2.962898015975952, -6.844706058502197], + [2.9406425952911377, -4.154623985290527], + [5.438204288482666, -5.655638694763184], + [0.08249758929014206, 11.650835037231445], + [2.6122045516967773, 5.588303565979004], + [2.8904871940612793, -4.134154319763184], + [-5.257097244262695, -5.921419143676758], + [-4.983969211578369, -7.49846076965332], + [-4.568028926849365, -5.616775989532471], + [-1.9762336015701294, -1.0163390636444092], + [-4.265800952911377, -1.726242184638977], + [-2.2254199981689453, 2.4634478092193604], + [2.5963923931121826, -8.987566947937012], + [3.537714719772339, -4.984328746795654], + [-4.62551736831665, -3.243103265762329], + [3.0714328289031982, -8.220990180969238], + [0.25393885374069214, 11.282035827636719], + [1.6063593626022339, -4.472655773162842], + [-2.3306427001953125, -3.226911783218384], + [10.98915958404541, -2.549410581588745], + [2.001149892807007, -2.9644243717193604], + [2.9368960857391357, -4.094155311584473], + [-1.4996421337127686, 1.4567385911941528], + [5.316110134124756, 7.1479291915893555], + [-0.04896680265665054, -1.483181357383728], + [4.715552806854248, 6.860419273376465], + [5.38369083404541, -5.291179656982422], + [-4.836109638214111, -6.998691558837891], + [-3.8420932292938232, 5.668451309204102], + [0.707467794418335, -0.7488677501678467], + [-6.008210182189941, 6.828536033630371], + [5.450886249542236, -1.6716564893722534], + [-3.8563992977142334, 6.9957756996154785], + [6.398889064788818, -2.1969714164733887], + [-5.1886515617370605, 3.8852968215942383], + [8.900033950805664, -2.503399133682251], + [4.712217807769775, -4.3469319343566895], + [-0.43134957551956177, -3.232574462890625], + [7.2813720703125, -1.7177647352218628], + [0.18914180994033813, 11.855064392089844], + [1.789327621459961, 3.431183099746704], + [-3.631549835205078, -1.2151097059249878], + [5.05126428604126, 1.3136608600616455], + [3.0050137042999268, -6.514099597930908], + [-5.968933582305908, 6.695068359375], + [-5.350092887878418, -2.709191083908081], + [-6.081984996795654, 0.650022029876709], + [-2.446819543838501, 2.276249647140503], + [-0.05086720734834671, 9.524532318115234], + [-1.5956887006759644, 2.017190933227539], + [0.8792815208435059, -5.815772533416748], + [3.3320577144622803, -8.98672866821289], + [0.953747570514679, -7.018985748291016], + [-4.547325611114502, -1.075515627861023], + [3.7458786964416504, -5.827179908752441], + [2.5715577602386475, 2.9214136600494385], + [-3.8864455223083496, -6.2680559158325195], + [8.929057121276855, -2.5208699703216553], + [7.729204177856445, -2.0770838260650635], + [-2.3571701049804688, 2.1790521144866943], + [-5.40230131149292, -1.1192888021469116], + [8.844557762145996, -2.3866097927093506], + [5.7672247886657715, 7.56441593170166], + [7.034404277801514, -2.264570474624634], + [0.1184278056025505, 11.289468765258789], + [-5.907378673553467, -2.4727420806884766], + [5.539830684661865, -3.27978777885437], + [2.3763864040374756, -8.90855598449707], + [-4.717781066894531, -5.213735103607178], + [2.220299005508423, -8.446512222290039], + [-2.893800735473633, -2.7801592350006104], + [8.307931900024414, -2.290722370147705], + [3.472276449203491, 7.0694260597229], + [-0.8461717367172241, 1.934048056602478], + [-2.374418258666992, 2.142918586730957], + [2.7957379817962646, -3.9844810962677], + [2.149296760559082, 0.08347748219966888], + [2.2731211185455322, 5.89625883102417], + [-0.6123266220092773, -2.2828376293182373], + [3.249345541000366, -8.025598526000977], + [0.16385787725448608, 12.421168327331543], + [1.215135097503662, -6.469851970672607], + [4.56804895401001, -4.005421161651611], + [-4.5739288330078125, 5.012473106384277], + [-5.389922142028809, -0.966887354850769], + [8.312071800231934, -2.321659564971924], + [-5.221856594085693, -3.377211332321167], + [3.2403650283813477, -3.6951162815093994], + [3.243324041366577, -7.987783432006836], + [2.969899892807007, -5.836296081542969], + [-3.4766905307769775, -3.8790769577026367], + [0.9970195889472961, -6.48469352722168], + [6.6775736808776855, 8.172313690185547], + [-0.37341994047164917, -1.7677690982818604], + [7.307472229003906, 8.797499656677246], + [0.3357577323913574, -0.5004972219467163], + [11.031543731689453, -2.5671098232269287], + [-6.917965412139893, 7.536659240722656], + [-4.9369635581970215, -3.29573655128479], + [8.588818550109863, -2.2324326038360596], + [2.7647316455841064, -5.968235015869141], + [2.300168514251709, -5.104159355163574], + [-4.985841274261475, -2.816371440887451], + [-4.039546966552734, 5.396639823913574], + [-2.3629038333892822, 1.4646939039230347], + [7.415438652038574, -2.0115551948547363], + [-2.071951150894165, 2.4590108394622803], + [6.980258941650391, -2.1951682567596436], + [3.548133373260498, -4.770735740661621], + [3.036407709121704, -4.233651161193848], + [0.11805521696805954, 9.620391845703125], + [-3.9619314670562744, -1.3471591472625732], + [2.570085048675537, -7.778099060058594], + [4.423861980438232, 5.871392250061035], + [3.4619717597961426, -4.139660358428955], + [1.382223129272461, -6.1677374839782715], + [3.4901509284973145, -4.016857147216797], + [4.953701972961426, -2.904371500015259], + [4.156257152557373, -3.5863330364227295], + [-2.04076886177063, 1.1507325172424316], + [6.361091136932373, 8.011627197265625], + [-2.9568727016448975, 5.388777256011963], + [0.18469536304473877, 0.5556621551513672], + [3.6256887912750244, 5.3151774406433105], + [2.6969172954559326, 5.507150650024414], + [-4.99389123916626, -3.135885000228882], + [3.1603262424468994, -4.097322940826416], + [-4.473851680755615, 5.888511657714844], + [0.2605744004249573, 10.68645191192627], + [5.516663074493408, -1.1608493328094482], + [-3.71610426902771, 5.597146034240723], + [7.8568434715271, -2.375495672225952], + [3.991624116897583, -3.1052234172821045], + [1.3784799575805664, 7.14057731628418], + [3.6840922832489014, -3.9755637645721436], + [-5.119466304779053, -4.975057125091553], + [-5.734811305999756, -2.700610637664795], + [2.5346572399139404, -3.741518020629883], + [3.199280261993408, 0.8494671583175659], + [-3.2679073810577393, -5.367560863494873], + [-2.1965525150299072, 2.5247788429260254], + [-4.529154300689697, -2.9661340713500977], + [2.608848810195923, 3.0703248977661133], + [0.4593523144721985, -1.1723071336746216], + [-2.1140570640563965, 2.528566598892212], + [-4.9127583503723145, -7.396585941314697], + [-4.963108539581299, 5.816592693328857], + [-1.5980744361877441, -3.04704213142395], + [-0.48338210582733154, -1.285103440284729], + [-0.0583157017827034, 9.934402465820312], + [0.3909643888473511, 10.22981071472168], + [0.0017775818705558777, 12.140424728393555], + [3.5899271965026855, -3.8278555870056152], + [-4.991293430328369, 6.523420333862305], + [-4.313773155212402, -6.439011573791504], + [-1.3877513408660889, 5.70804500579834], + [3.081787347793579, -4.682512283325195], + [2.987398386001587, -3.7197797298431396], + [2.0119240283966064, 2.537599802017212], + [5.841738224029541, -2.7107861042022705], + [2.8463146686553955, -4.022326946258545], + [-2.8079798221588135, -3.448240041732788], + [-4.263259410858154, -6.25022029876709], + [-3.8627755641937256, 4.095259666442871], + [-2.2653932571411133, 2.7941675186157227], + [-5.364163398742676, 6.528353214263916], + [0.01152067631483078, 9.461381912231445], + [-4.175748348236084, -6.136806488037109], + [-6.833899021148682, -0.6935524344444275], + [2.286710500717163, 5.86094856262207], + [0.11494164913892746, 10.303900718688965], + [4.1547064781188965, -4.436032295227051], + [-5.434422969818115, -2.5824942588806152], + [5.844073295593262, -4.925796031951904], + [3.8789479732513428, 5.769756317138672], + [6.388510704040527, -1.4694362878799438], + [-5.043323993682861, -6.443181991577148], + [-0.7389504909515381, 1.6017042398452759], + [8.223888397216797, -2.442997694015503], + [-0.8501504063606262, 0.7966285943984985], + [3.2466022968292236, -3.810561180114746], + [2.8044793605804443, -8.731510162353516], + [-2.613816499710083, 3.3238229751586914], + [-1.610061764717102, 1.7836332321166992], + [9.221537590026855, -2.4607319831848145], + [-1.9700548648834229, 2.7433698177337646], + [-3.62644362449646, -0.8862813711166382], + [-0.07519645243883133, 13.226034164428711], + [9.640177726745605, -2.338402509689331], + [-0.46161088347435, -1.2364548444747925], + [0.5246335864067078, -0.9866977334022522], + [-2.359297275543213, 2.0643112659454346], + [2.6880548000335693, 1.133139967918396], + [-5.525439262390137, 5.238028049468994], + [-2.846001625061035, -4.022593975067139], + [3.2901809215545654, -6.455552577972412], + [-3.166142702102661, -4.588634014129639], + [-1.6255639791488647, 1.092352271080017], + [0.38894256949424744, 0.06475931406021118], + [3.1974356174468994, -4.565456390380859], + [-4.145236492156982, 3.84934401512146], + [2.328150510787964, -7.696061134338379], + [3.748323678970337, 1.7316733598709106], + [-2.6208744049072266, 3.928330183029175], + [1.911895751953125, -2.9685850143432617], + [1.5536251068115234, 3.6992287635803223], + [-0.5789483189582825, -2.1760201454162598], + [-2.593571186065674, 1.8348346948623657], + [-1.3551757335662842, -4.128769874572754], + [-1.696119785308838, -3.98884916305542], + [3.7990570068359375, 1.7062466144561768], + [-0.045453496277332306, 9.394932746887207], + [2.7054896354675293, -3.8439276218414307], + [2.276576280593872, 5.213663101196289], + [-5.323913097381592, 0.25089991092681885], + [5.587006568908691, 7.5027899742126465], + [1.0200133323669434, -0.6483068466186523], + [4.041244983673096, -9.404065132141113], + [1.855656385421753, 5.421559810638428], + [-4.737520217895508, -1.7003848552703857], + [-2.445006847381592, 2.0791566371917725], + [2.872368097305298, 0.7899042963981628], + [3.884302854537964, -7.845868110656738], + [5.260010242462158, -2.7714226245880127], + [2.5593698024749756, 5.867305278778076], + [-2.743677854537964, -4.137885570526123], + [3.7122702598571777, 1.431442379951477], + [0.19505435228347778, 8.749979019165039], + [8.728590965270996, -2.4316084384918213], + [-1.99981689453125, 2.4096875190734863], + [-3.519534111022949, -3.553196668624878], + [-5.0316033363342285, 2.092909097671509], + [-1.9178309440612793, 2.3809072971343994], + [9.494199752807617, -2.5174763202667236], + [-4.609871864318848, -2.3736321926116943], + [-2.110929250717163, 2.7326176166534424], + [3.340665817260742, -4.047503471374512], + [-3.355830430984497, -2.57780385017395], + [3.8464596271514893, -3.118605852127075], + [3.429251194000244, -5.271414279937744], + [-4.978115558624268, -3.0241997241973877], + [-3.7657010555267334, -0.16511720418930054], + [2.1245908737182617, -0.18875175714492798], + [4.491042613983154, 1.9122132062911987], + [-1.3945726156234741, 1.676789402961731], + [9.6932373046875, -2.4218380451202393], + [-6.629414081573486, 6.030049800872803], + [-4.627927780151367, 4.852693557739258], + [-2.3928744792938232, 1.5224993228912354], + [-4.980104923248291, 6.991596221923828], + [-0.051523931324481964, 9.524608612060547], + [6.424585819244385, -2.3152482509613037], + [0.5948855876922607, -0.9123912453651428], + [-1.4513790607452393, 4.807253360748291], + [3.005765676498413, -4.208414554595947], + [1.5207335948944092, 1.6014925241470337], + [-3.294930934906006, -2.657752275466919], + [1.3488929271697998, 5.374537467956543], + [2.99426531791687, -7.464014053344727], + [-2.8526618480682373, -4.327943325042725], + [-0.13228797912597656, 1.8671331405639648], + [-2.7665460109710693, 1.665351390838623], + [1.420783519744873, -7.646152973175049], + [-2.6626899242401123, 2.111875295639038], + [8.170490264892578, -2.3466744422912598], + [2.5020925998687744, 0.3222815990447998], + [2.5346319675445557, 6.203455448150635], + [3.8511126041412354, -8.28653621673584], + [3.6415228843688965, -3.5439727306365967], + [-4.776982307434082, 4.773881912231445], + [-3.3336048126220703, 3.5386388301849365], + [2.9207518100738525, -7.047028541564941], + [-1.9183707237243652, -3.2872493267059326], + [-1.899726152420044, 1.4982631206512451], + [9.81746768951416, -2.361154556274414], + [8.737784385681152, -2.259936571121216], + [-5.7186431884765625, -1.4527798891067505], + [0.11118107289075851, 9.498079299926758], + [-4.11016321182251, -5.621108055114746], + [2.7757039070129395, -8.433073043823242], + [-0.21371036767959595, -1.7212804555892944], + [2.8280394077301025, 1.616376280784607], + [3.936598062515259, -3.7961456775665283], + [2.4619300365448, 2.050812244415283], + [9.267827033996582, -2.3056013584136963], + [-2.3167078495025635, 2.2489230632781982], + [0.6419995427131653, 10.680959701538086], + [9.052998542785645, -2.350837469100952], + [5.800206184387207, 7.442859649658203], + [-1.9636023044586182, 2.508246898651123], + [4.1536970138549805, -7.209744930267334], + [-1.1073329448699951, 2.0699408054351807], + [-5.730952262878418, 6.86713981628418], + [2.4407546520233154, 5.42710018157959], + [4.7858967781066895, -3.406493663787842], + [0.10981612652540207, 11.725397109985352], + [7.909918308258057, -2.0588204860687256], + [-2.9701664447784424, -3.828171491622925], + [-0.029517777264118195, 12.158823013305664], + [5.197090148925781, -4.4150261878967285], + [-5.6594414710998535, 6.323663711547852], + [-4.651627063751221, -2.0883052349090576], + [5.511794090270996, -6.470754623413086], + [2.4757919311523438, -8.42532730102539], + [-1.2768914699554443, -2.610116958618164], + [-4.530215263366699, -5.512079238891602], + [-2.4936883449554443, 1.7270491123199463], + [3.917010545730591, 5.242168426513672], + [7.959157466888428, -2.3548576831817627], + [0.16276293992996216, 12.53492546081543], + [-2.220796823501587, 2.459257125854492], + [-1.2304686307907104, 1.3376425504684448], + [-4.963156223297119, -2.1755363941192627], + [-0.13630110025405884, 4.398007392883301], + [2.7000908851623535, -6.822159767150879], + [0.5728351473808289, -0.9444772005081177], + [2.011523485183716, 2.1408605575561523], + [1.9981017112731934, -8.183460235595703], + [6.129961013793945, -2.8682258129119873], + [-4.738282203674316, -6.609307765960693], + [-1.7900105714797974, -3.5318546295166016], + [4.1524577140808105, -3.6341023445129395], + [2.180422067642212, 0.17402005195617676], + [-4.207352161407471, -3.2443830966949463], + [1.936755895614624, -7.84609317779541], + [-5.6082868576049805, 6.705199241638184], + [-0.08286649733781815, 13.586812019348145], + [5.682965278625488, -2.4464657306671143], + [-1.0855993032455444, -0.48287972807884216], + [-4.682950496673584, -1.9031412601470947], + [-4.7487311363220215, 5.56477165222168], + [-0.8534706830978394, 1.7410646677017212], + [1.1783056259155273, -5.369111061096191], + [-2.5810554027557373, 1.8896363973617554], + [-2.2566468715667725, 2.331770420074463], + [-3.3104639053344727, -4.076728343963623], + [6.014601230621338, -1.2160980701446533], + [-4.622155666351318, -2.7406537532806396], + [6.128124237060547, -2.2783305644989014], + [0.0033531710505485535, 14.44083309173584], + [11.015887260437012, -2.4956862926483154], + [9.245992660522461, -2.4551894664764404], + [3.2058818340301514, -4.300630569458008], + [-3.800675630569458, -1.1748465299606323], + [3.8475897312164307, 1.7220464944839478], + [-4.538670063018799, 5.055785179138184], + [-2.539591073989868, 1.8636729717254639], + [-1.840842843055725, -4.721332550048828], + [0.04274433106184006, 13.378870964050293], + [2.752535104751587, 0.9151674509048462], + [9.180533409118652, -2.358104944229126], + [4.982409954071045, 7.335519790649414], + [6.779743671417236, -1.4927955865859985], + [-0.8611718416213989, -3.107520580291748], + [6.608607292175293, -1.4862993955612183], + [1.4599409103393555, -6.285837173461914], + [6.894702911376953, -5.815858840942383], + [-2.154158353805542, 0.4128737151622772], + [3.3004038333892822, 1.3862472772598267], + [3.9600679874420166, -3.7233002185821533], + [1.8777382373809814, 4.30800199508667], + [1.6887147426605225, -0.048904988914728165], + [7.764576435089111, -2.0716207027435303], + [-3.059056520462036, 5.194579124450684], + [3.1501731872558594, -4.563593864440918], + [11.391576766967773, -2.6022732257843018], + [-5.380326747894287, -3.3171262741088867], + [-0.046172209084033966, 12.203502655029297], + [-2.2085072994232178, 2.453080654144287], + [0.049103789031505585, -1.4688955545425415], + [-4.660398006439209, 4.578410625457764], + [3.750929117202759, -7.7547454833984375], + [5.109820365905762, -0.9212460517883301], + [-2.576371431350708, -3.5854873657226562], + [-1.6566160917282104, 2.0886428356170654], + [2.279775857925415, -7.855893135070801], + [-2.1258411407470703, 1.9359813928604126], + [-0.79206782579422, -3.136908531188965], + [-2.1320431232452393, 1.4942339658737183], + [-2.020111322402954, 1.9614392518997192], + [5.94688606262207, -5.734646797180176], + [-2.858935594558716, 2.594728946685791], + [-2.28175950050354, -3.800044536590576], + [3.6514925956726074, -5.829129695892334], + [0.2056138515472412, 9.797754287719727], + [-5.215552806854248, 5.853157043457031], + [-2.0877954959869385, -3.2050681114196777], + [4.026615619659424, -5.760002136230469], + [5.82915735244751, 8.222808837890625], + [-3.823235273361206, -5.348025321960449], + [0.035568468272686005, 11.811594009399414], + [-6.185670375823975, 7.625034332275391], + [-6.446781635284424, 7.585559368133545], + [-2.414905548095703, -0.16259628534317017], + [4.16249418258667, -5.894777297973633], + [7.715054035186768, -2.4597232341766357], + [7.2164130210876465, -1.7260315418243408], + [-4.860373020172119, -2.4246604442596436], + [3.103292942047119, -4.3115692138671875], + [-0.6887652277946472, -2.414928913116455], + [3.1961512565612793, -4.016634464263916], + [3.1304848194122314, -4.3188300132751465], + [-2.3055708408355713, -2.392988920211792], + [-2.3961331844329834, 2.37518310546875], + [3.258378267288208, 4.896097183227539], + [5.682213306427002, 7.846582412719727], + [-2.154292106628418, 5.5416765213012695], + [-5.760446071624756, -2.6408681869506836], + [-4.459312915802002, -6.474226474761963], + [6.615145206451416, -1.4920713901519775], + [-0.15656006336212158, -1.6362639665603638], + [-4.6645050048828125, 4.651357650756836], + [-7.106698989868164, -1.0538169145584106], + [2.5585427284240723, 0.6523091793060303], + [7.852107524871826, -2.0262839794158936], + [0.8564773797988892, 6.069698810577393], + [-2.046938180923462, 2.533229112625122], + [9.767792701721191, -2.3912513256073], + [-3.5797877311706543, -2.7419395446777344], + [-4.371187686920166, -6.4207868576049805], + [0.6128576993942261, -0.5050628185272217], + [-2.5488150119781494, 1.6463979482650757], + [-2.3279223442077637, -4.099634647369385], + [1.7689201831817627, -7.770644187927246], + [1.6925524473190308, -0.06559386849403381], + [4.0098724365234375, 1.5940388441085815], + [-4.38625431060791, 4.875512599945068], + [8.043096542358398, -2.3475730419158936], + [-1.9785850048065186, 2.2643320560455322], + [2.6405389308929443, -5.333363056182861], + [1.0956602096557617, -7.308258533477783], + [0.5622634291648865, 11.437722206115723], + [-3.51094126701355, -0.5052823424339294], + [0.16224688291549683, 9.845085144042969], + [-2.524346113204956, 0.11317276954650879], + [-0.06338728219270706, 13.0357084274292], + [4.939154624938965, 7.1143035888671875], + [-3.347557306289673, 6.252788066864014], + [-0.7658839225769043, -3.007164239883423], + [0.17471301555633545, 10.344465255737305], + [-5.771727085113525, -0.47367990016937256], + [3.6963140964508057, 7.221689701080322], + [7.162281513214111, -1.586491584777832], + [-3.8027021884918213, 5.25179386138916], + [-4.511622905731201, -6.81854248046875], + [-4.290489196777344, 4.47466516494751], + [-1.3658297061920166, 2.1764426231384277], + [-4.798415184020996, 3.551178216934204], + [1.3898210525512695, -0.3692452907562256], + [4.386298179626465, -5.132359504699707], + [-6.369625568389893, -2.19952654838562], + [-3.727411985397339, 0.5515961647033691], + [-1.961874008178711, 2.389681577682495], + [-7.743484020233154, 1.5511187314987183], + [7.876458644866943, -2.0571272373199463], + [6.3668532371521, -3.0779075622558594], + [-5.37824010848999, 4.2481231689453125], + [3.611741781234741, -3.190023183822632], + [0.5057368874549866, 1.025683045387268], + [8.63649845123291, -2.256483793258667], + [-6.475225925445557, 7.459575653076172], + [-5.465895175933838, -4.431623458862305], + [2.115992307662964, 4.622622013092041], + [-3.405040979385376, 3.8928134441375732], + [3.150662660598755, -4.4642229080200195], + [1.3641380071640015, -7.238137245178223], + [0.1375941038131714, 11.54682445526123], + [2.968597173690796, 4.773716926574707], + [-4.002248764038086, -2.7257251739501953], + [0.1748233437538147, 10.215654373168945], + [5.4286322593688965, -2.5723350048065186], + [9.026137351989746, -2.5529839992523193], + [-4.067907810211182, -2.8618929386138916], + [9.159798622131348, -2.4634759426116943], + [-4.3618645668029785, -0.9690456390380859], + [-0.06744534522294998, 12.391993522644043], + [-5.086583614349365, -5.796145439147949], + [3.728212594985962, -8.071296691894531], + [4.239621639251709, -5.123658180236816], + [-5.380431175231934, 4.971850395202637], + [6.131262302398682, 7.838112831115723], + [-4.247242450714111, -1.2401692867279053], + [-7.659900188446045, -0.4754143953323364], + [7.567046165466309, -2.3417327404022217], + [-2.9129140377044678, -0.8873535990715027], + [0.011481456458568573, 10.631061553955078], + [6.180546760559082, 7.684345245361328], + [2.9306163787841797, -4.8389177322387695], + [3.7294976711273193, -7.943347930908203], + [-4.618862628936768, -3.43996262550354], + [11.066447257995605, -2.52907395362854], + [-4.24070930480957, -6.38375186920166], + [-2.136751651763916, 2.4810264110565186], + [7.510373592376709, 8.883244514465332], + [4.034788608551025, -3.600308418273926], + [1.0185974836349487, 5.683333396911621], + [8.11852741241455, 9.516561508178711], + [-4.013865947723389, 3.8388476371765137], + [2.9087073802948, -3.1278529167175293], + [-5.735896587371826, 1.4705978631973267], + [-3.0561001300811768, -4.259958267211914], + [-5.114413261413574, 7.170392036437988], + [6.968166828155518, -1.665326714515686], + [-4.064300537109375, 2.6046693325042725], + [-2.065471887588501, 2.3478479385375977], + [-5.905762195587158, 7.050416946411133], + [0.09167670458555222, 5.499743461608887], + [0.6520577073097229, 11.200831413269043], + [8.15136432647705, -2.312944173812866], + [-4.578649044036865, -6.4881157875061035], + [8.328089714050293, -2.2652995586395264], + [0.17225170135498047, 10.592266082763672], + [3.3046624660491943, -7.132884502410889], + [5.869832992553711, -1.1637804508209229], + [2.166184186935425, -8.687800407409668], + [6.091219425201416, -3.2799887657165527], + [2.6004812717437744, -3.610525369644165], + [-4.963571548461914, 4.518245220184326], + [-0.0919850543141365, 13.938068389892578], + [9.161487579345703, -2.669637680053711], + [-2.4595730304718018, 1.946274995803833], + [1.5745503902435303, 0.8954259157180786], + [-4.728813648223877, -1.562820553779602], + [5.605076313018799, -2.4546124935150146], + [-0.11698979884386063, 13.365592956542969], + [-4.702258110046387, -1.3274736404418945], + [3.668621778488159, -6.675807476043701], + [-2.6034796237945557, 1.7692939043045044], + [-6.236733913421631, 4.006648063659668], + [-3.5422720909118652, -1.892080545425415], + [6.250355243682861, 8.241214752197266], + [0.05979447811841965, 9.648674011230469], + [2.9503085613250732, -3.9321582317352295], + [-4.9715681076049805, 6.193825721740723], + [11.730231285095215, -2.599522590637207], + [3.482267141342163, 1.922524094581604], + [2.7908499240875244, 3.7904961109161377], + [4.8986992835998535, 6.117977142333984], + [-2.259687662124634, 2.3809006214141846], + [6.094872951507568, -1.7585147619247437], + [-2.5058231353759766, 1.3545167446136475], + [6.7740864753723145, 8.392971992492676], + [3.732820749282837, -3.1259396076202393], + [5.842596530914307, -0.9464256763458252], + [4.41000509262085, 7.429486274719238], + [-2.0651631355285645, 0.9826614856719971], + [-4.371573448181152, -3.5586488246917725], + [6.474156379699707, 8.111160278320312], + [9.93517017364502, -2.459223508834839], + [0.4754750728607178, 11.203011512756348], + [2.226431131362915, -5.944596290588379], + [-2.990311861038208, -0.20254701375961304], + [2.5778722763061523, -2.4834635257720947], + [-5.034010410308838, 5.611023902893066], + [-4.275516986846924, 1.3569294214248657], + [0.21483081579208374, 11.353494644165039], + [0.18238943815231323, 10.10342025756836], + [0.04391329735517502, 9.40257453918457], + [3.422673463821411, -7.813358783721924], + [-0.11351776868104935, 9.55797004699707], + [-0.023736007511615753, 12.626091957092285], + [1.4509764909744263, -0.8876879215240479], + [-3.250988721847534, -1.5892599821090698], + [-5.377490520477295, -3.5947744846343994], + [3.9834959506988525, 0.5339205861091614], + [-6.339305877685547, 1.9716960191726685], + [0.8707588315010071, 11.987995147705078], + [-1.9853143692016602, 2.5937485694885254], + [-4.5288615226745605, -4.74993896484375], + [-4.343159198760986, 6.379950046539307], + [-5.321267127990723, 7.295924186706543], + [2.25475811958313, -5.72274923324585], + [2.906648874282837, -4.058104991912842], + [6.851230144500732, 8.466806411743164], + [-4.560022830963135, -0.6913694143295288], + [8.929450035095215, -2.4534547328948975], + [-2.5088002681732178, 2.0548346042633057], + [4.860837459564209, -3.268759250640869], + [9.933206558227539, -2.4317071437835693], + [-0.015063710510730743, 9.278238296508789], + [-4.54594087600708, -5.629301071166992], + [-5.2241291999816895, -4.9554219245910645], + [8.946969032287598, -2.3673624992370605], + [0.19859784841537476, 10.112071990966797], + [-2.081230401992798, 2.5650405883789062], + [-2.4396438598632812, 1.6320185661315918], + [7.9363627433776855, -2.7726399898529053], + [-3.3117754459381104, -3.613954782485962], + [3.7943739891052246, -5.670553207397461], + [2.933060884475708, 6.704325199127197], + [3.668963670730591, -3.5565316677093506], + [-2.8524529933929443, -3.3371779918670654], + [-3.6093053817749023, -3.812889337539673], + [5.656020641326904, 8.143078804016113], + [0.09943204373121262, 11.947254180908203], + [-2.531287670135498, -2.8867905139923096], + [0.42858290672302246, -0.8474032878875732], + [-2.2946949005126953, -4.892132759094238], + [-4.781728744506836, -2.802051067352295], + [-4.807278633117676, 7.886594295501709], + [0.07416064292192459, -1.445449948310852], + [6.090538501739502, -1.2395524978637695], + [-7.352694511413574, -0.11120593547821045], + [2.8266348838806152, -4.095067501068115], + [0.32451480627059937, 11.096900939941406], + [7.621027946472168, -2.2020723819732666], + [3.153623342514038, -4.304777145385742], + [3.506342649459839, -4.064981460571289], + [-1.4188090562820435, -4.096707344055176], + [-2.1127867698669434, -4.445934772491455], + [7.129584789276123, -3.510507345199585], + [0.1706739068031311, 11.529879570007324], + [-6.631063938140869, 7.684911727905273], + [5.987395763397217, -1.2736738920211792], + [-2.1381678581237793, 2.230452060699463], + [1.9878337383270264, -7.576513290405273], + [-5.515053749084473, -0.04442572966217995], + [1.630313515663147, -7.245440483093262], + [4.160853385925293, -8.286027908325195], + [3.423517942428589, -7.309947967529297], + [-4.693666458129883, -5.596327781677246], + [-2.6786539554595947, 1.2795162200927734], + [0.5619928240776062, -3.7764861583709717], + [-1.6738616228103638, 2.3559792041778564], + [2.594374179840088, -7.8337202072143555], + [8.033733367919922, -2.1321256160736084], + [2.967435121536255, 4.24796199798584], + [-2.1755573749542236, 2.6079907417297363], + [-4.8385491371154785, 6.681821823120117], + [2.3986923694610596, -8.113275527954102], + [4.354979515075684, 6.454354286193848], + [2.2068355083465576, 1.724655032157898], + [-4.963366508483887, -0.5869875550270081], + [3.1760122776031494, -3.474247932434082], + [1.999065637588501, 5.923984527587891], + [-5.442685604095459, 6.486534118652344], + [-2.1119673252105713, 2.2995517253875732], + [-1.2967790365219116, 0.5536100268363953], + [-3.1252660751342773, -3.6367075443267822], + [-4.298502445220947, 4.6809468269348145], + [3.948991060256958, -4.271872043609619], + [2.943906545639038, -4.197819232940674], + [-5.783067226409912, 6.546435356140137], + [4.40820837020874, -3.5875027179718018], + [5.439914703369141, -1.6243622303009033], + [7.96692419052124, -2.164470911026001], + [7.266621112823486, -1.79301118850708], + [5.905951976776123, -7.255875587463379], + [-4.227388858795166, -2.6094186305999756], + [3.2839717864990234, -6.3291826248168945], + [6.523426532745361, 7.991371154785156], + [3.226494073867798, -3.159888982772827], + [5.398350238800049, -1.265529751777649], + [0.20335066318511963, 12.098155975341797], + [8.300324440002441, -2.3521978855133057], + [6.988958835601807, -2.4914023876190186], + [7.191365718841553, -2.8066563606262207], + [1.97971773147583, 2.840956926345825], + [-4.287617206573486, -1.5717594623565674], + [9.495518684387207, -2.4434521198272705], + [1.6819220781326294, 6.349077224731445], + [2.36035418510437, 5.435030460357666], + [3.455580472946167, -7.919288635253906], + [-0.01777983456850052, 9.797751426696777], + [7.98730993270874, -2.375216245651245], + [7.28033971786499, -2.4691970348358154], + [-2.9821856021881104, -2.5170271396636963], + [-4.5590643882751465, -0.8166787624359131], + [-4.4113450050354, -4.898682117462158], + [-5.84909200668335, 6.958295822143555], + [2.3159804344177246, 3.419125556945801], + [0.6434535384178162, -4.795609474182129], + [8.199300765991211, -2.298611640930176], + [8.656612396240234, -2.362983226776123], + [-5.210646152496338, 6.340732574462891], + [-3.417207717895508, -3.9848005771636963], + [-1.7999961376190186, 2.194295883178711], + [5.960398197174072, 7.907947063446045], + [-3.9195215702056885, -5.440149784088135], + [-0.13432344794273376, -1.219992995262146], + [3.789384126663208, 1.4516419172286987], + [3.246241807937622, -3.333735466003418], + [4.082225799560547, -8.52669620513916], + [-4.7611823081970215, -6.5439910888671875], + [0.041578225791454315, 11.961928367614746], + [2.488187551498413, 2.2930233478546143], + [2.2122175693511963, 4.856553077697754], + [-6.291293621063232, 7.360035419464111], + [7.584896087646484, -2.1997230052948], + [-4.021751403808594, 4.120760440826416], + [7.197685718536377, 9.027649879455566], + [4.268866062164307, -3.5546486377716064], + [6.868957042694092, 8.279549598693848], + [-4.430588722229004, -6.375308036804199], + [7.961287975311279, -2.3435003757476807], + [-0.006154604256153107, 12.650915145874023], + [-3.669689416885376, 6.044860363006592], + [-1.9767427444458008, -0.18726661801338196], + [3.1064116954803467, -4.156037330627441], + [-0.32149797677993774, 0.8416883945465088], + [1.7148518562316895, 7.021047592163086], + [6.049604892730713, -3.968069553375244], + [-2.0872271060943604, -1.1587655544281006], + [4.6153950691223145, -3.8113961219787598], + [7.74427604675293, -1.994012713432312], + [4.254330158233643, -3.690232276916504], + [-3.9898643493652344, 4.383048057556152], + [7.511949062347412, -2.24819278717041], + [-5.013420581817627, -6.223911285400391], + [7.813520908355713, -2.0897839069366455], + [5.0718674659729, -4.134446620941162], + [-6.167901515960693, -1.0958268642425537], + [-4.062863349914551, -4.641639709472656], + [4.229450702667236, -4.42999267578125], + [1.7502139806747437, -8.119810104370117], + [3.327378034591675, -6.2233099937438965], + [2.335184335708618, 3.4619791507720947], + [2.809821605682373, 4.866829872131348], + [3.004737615585327, -3.7612464427948], + [3.3185133934020996, 1.4707064628601074], + [-3.4202592372894287, -3.1799428462982178], + [-0.1252712607383728, 10.508522033691406], + [1.6519906520843506, 2.1967122554779053], + [-4.946850299835205, -3.345714807510376], + [5.160532474517822, -1.2980633974075317], + [2.640803098678589, -7.648951530456543], + [5.352686405181885, -4.887171268463135], + [-3.568835973739624, 2.8712692260742188], + [2.573009967803955, 0.4747873544692993], + [-1.9287033081054688, 2.2813704013824463], + [0.3724127411842346, 10.94188117980957], + [-6.4423956871032715, 7.504701614379883], + [-1.6301504373550415, 1.9371949434280396], + [4.184227466583252, -2.789623498916626], + [1.2858887910842896, -5.1115946769714355], + [-3.771314859390259, -1.1721655130386353], + [9.905011177062988, -2.505730390548706], + [-7.344601154327393, -1.8550996780395508], + [2.737980604171753, -7.551640510559082], + [-4.477113723754883, -7.169168472290039], + [-1.4782557487487793, 1.67959463596344], + [-4.826784610748291, -5.484645843505859], + [-3.567984104156494, -3.6642932891845703], + [-3.134406566619873, 6.165414333343506], + [-1.751882791519165, 0.404816597700119], + [-0.08715421706438065, 13.406865119934082], + [2.8450849056243896, -8.39510440826416], + [4.121764659881592, 5.418580055236816], + [2.76279354095459, 6.1027679443359375], + [0.33034390211105347, 11.210491180419922], + [0.02637564390897751, 9.704475402832031], + [10.61196231842041, -2.4424726963043213], + [2.8128833770751953, 6.235225677490234], + [4.559318542480469, -3.1857168674468994], + [-0.5133379101753235, 9.843280792236328], + [1.431464433670044, 4.388255596160889], + [1.1219478845596313, -6.787544250488281], + [-2.207552194595337, 2.4360833168029785], + [-0.0320015624165535, 12.667852401733398], + [-7.063797950744629, 8.246715545654297], + [4.465542316436768, -3.7468676567077637], + [8.360063552856445, -2.2627227306365967], + [-2.81499981880188, 2.341158151626587], + [2.546588182449341, -5.46232271194458], + [-1.9214709997177124, 2.2286128997802734], + [-4.484746932983398, -1.8924378156661987], + [-2.145509958267212, -0.2497425675392151], + [-3.176539182662964, -1.3817858695983887], + [0.26064974069595337, 8.642984390258789], + [-5.494112968444824, 6.095067501068115], + [3.9894320964813232, 1.5488189458847046], + [-2.3518500328063965, -4.945503234863281], + [4.344259262084961, -1.3200048208236694], + [4.35615873336792, -3.4259119033813477], + [2.237974166870117, 3.5022833347320557], + [-5.59213399887085, 6.906060695648193], + [-0.9673884510993958, 1.6884431838989258], + [0.0897509977221489, 12.103433609008789], + [0.2545141577720642, 10.997802734375], + [-2.419013738632202, 1.3430806398391724], + [1.2855000495910645, 4.511554718017578], + [10.186271667480469, -2.4187521934509277], + [-4.438318729400635, 2.0774850845336914], + [2.3977272510528564, 4.884006023406982], + [5.055572509765625, -1.3641399145126343], + [-5.3503193855285645, -7.652827739715576], + [10.654864311218262, -2.4121997356414795], + [-2.2388827800750732, 2.4674673080444336], + [-5.315915584564209, 5.836124897003174], + [1.018548607826233, -7.030292510986328], + [8.392921447753906, -2.2215628623962402], + [2.2560367584228516, 1.3830748796463013], + [3.5654735565185547, -7.448311805725098], + [-3.5216262340545654, -1.61762535572052], + [-4.537110805511475, -7.024544715881348], + [0.0859939381480217, 12.838802337646484], + [0.9466560482978821, 2.0471184253692627], + [1.3062047958374023, -6.167003154754639], + [-6.096963882446289, 6.929462432861328], + [3.5386319160461426, -9.027189254760742], + [1.6003503799438477, -0.7684289216995239], + [-2.209611415863037, 2.448546886444092], + [3.656536817550659, -3.457963466644287], + [2.858405351638794, -9.203548431396484], + [-3.9944522380828857, -5.810004234313965], + [-6.640237331390381, -0.03258645907044411], + [-2.107846736907959, 2.6446943283081055], + [-3.731886386871338, 5.30787467956543], + [3.522733211517334, 6.151662349700928], + [5.575097560882568, -2.6248080730438232], + [-3.987962484359741, -3.7004010677337646], + [8.168278694152832, -2.1646714210510254], + [-2.923663854598999, 2.276279926300049], + [2.8895211219787598, -7.454034805297852], + [3.9671976566314697, -3.7872536182403564], + [-3.5946292877197266, -4.128139972686768], + [6.795845031738281, -2.485671043395996], + [-2.1265709400177, 2.630586624145508], + [-2.9422616958618164, -3.9196624755859375], + [0.792285144329071, -6.2806854248046875], + [-2.7285244464874268, -4.197141647338867], + [5.160170078277588, -3.9866292476654053], + [-3.103689432144165, -0.30419498682022095], + [1.0759313106536865, 5.588266849517822], + [-1.4008665084838867, -0.5429098606109619], + [7.945827960968018, -2.398699998855591], + [6.719140529632568, -1.563355803489685], + [6.957241535186768, -1.7449382543563843], + [-1.8017152547836304, 2.626371145248413], + [-2.211540460586548, 1.1749804019927979], + [3.0974481105804443, 0.7958617210388184], + [-2.9029347896575928, 5.970438003540039], + [-3.342715263366699, -3.059048652648926], + [-3.7160608768463135, 4.265934467315674], + [-2.130591869354248, 2.501239776611328], + [-1.5662533044815063, 1.0609381198883057], + [3.461780309677124, -4.563716888427734], + [-4.912717342376709, 6.047013282775879], + [-7.099193096160889, -0.8306737542152405], + [4.452571392059326, -3.0255582332611084], + [3.2863595485687256, 6.285371780395508], + [-4.67172384262085, -5.750215530395508], + [-5.069087028503418, 8.192548751831055], + [3.095625400543213, -10.179656982421875], + [3.338789224624634, -8.445396423339844], + [2.7635860443115234, -8.013216972351074], + [-4.248745441436768, -5.415980339050293], + [0.0203891322016716, 12.243839263916016], + [-2.0817453861236572, -3.950093984603882], + [-4.010598659515381, -2.2365260124206543], + [-0.007046349346637726, 12.875173568725586], + [0.24005556106567383, 11.015201568603516], + [0.11812251061201096, 10.109248161315918], + [-1.2743104696273804, 4.969895839691162], + [0.1538512110710144, 10.286165237426758], + [4.8129353523254395, 7.400934219360352], + [-0.9157142043113708, -3.058302164077759], + [1.7307864427566528, 5.952613830566406], + [8.816779136657715, -2.3763740062713623], + [2.4200246334075928, 5.6077775955200195], + [-6.005202293395996, -1.6185771226882935], + [8.536303520202637, -2.230226516723633], + [5.531008243560791, 7.3376970291137695], + [3.1223607063293457, -8.759574890136719], + [-2.4150922298431396, 2.1049716472625732], + [0.10600285977125168, 9.865943908691406], + [-5.147153377532959, -3.041353225708008], + [-1.1019761562347412, -2.172372579574585], + [-2.47502064704895, 2.3778440952301025], + [1.917980670928955, -7.053617477416992], + [-7.50531530380249, 8.800793647766113], + [0.3103076219558716, 10.718218803405762], + [3.2943270206451416, -4.092972755432129], + [4.223949909210205, 1.6010223627090454], + [-2.865217447280884, -4.761155605316162], + [6.1765055656433105, -1.4237006902694702], + [10.212818145751953, -2.4349048137664795], + [-3.103442907333374, -5.515716552734375], + [7.772904872894287, -2.2598817348480225], + [3.5452749729156494, -7.737988471984863], + [-2.6740291118621826, -2.92948317527771], + [-5.455193519592285, -3.721773862838745], + [-4.070084095001221, 5.704141616821289], + [5.153654098510742, -2.1650846004486084], + [2.737647771835327, 2.5433475971221924], + [2.4489665031433105, 5.933413505554199], + [1.7853193283081055, 1.606459617614746], + [-6.415194988250732, -1.085537075996399], + [-3.3628008365631104, 5.761089324951172], + [3.237821102142334, -8.754331588745117], + [-4.452500820159912, 4.073729991912842], + [-6.369741916656494, 7.907223224639893], + [2.1065332889556885, 4.440585136413574], + [-4.5113725662231445, -6.274650573730469], + [-2.5195157527923584, 1.8946157693862915], + [4.786832332611084, -4.728278160095215], + [0.14610368013381958, 11.81892204284668], + [-5.280019283294678, 5.980002403259277], + [-7.0974626541137695, -0.9801744222640991], + [1.6394755840301514, -0.04124707356095314], + [2.425901412963867, 1.409593105316162], + [0.9911409020423889, -0.6361183524131775], + [-1.8122148513793945, 6.301462173461914], + [1.7607436180114746, 2.2368948459625244], + [7.45202112197876, -2.4249632358551025], + [6.138236045837402, -1.7830568552017212], + [3.042246103286743, -4.454364776611328], + [-5.336898326873779, -0.31957703828811646], + [7.3406853675842285, -2.927266836166382], + [5.475391864776611, 7.974668502807617], + [-4.192167282104492, -5.741361141204834], + [0.8809216618537903, 3.3834922313690186], + [4.425060749053955, 6.982938289642334], + [2.7982847690582275, -7.622566223144531], + [-0.8884804248809814, -2.8241279125213623], + [0.060418061912059784, 9.487689971923828], + [-1.3916739225387573, 2.1833908557891846], + [-0.8048650622367859, 0.5355988144874573], + [-4.6613078117370605, -6.780073642730713], + [7.538329601287842, -2.4591987133026123], + [5.971806049346924, -1.6382324695587158], + [-5.1142497062683105, 5.6861162185668945], + [3.103522539138794, -4.073333263397217], + [-4.944626331329346, -6.399576663970947], + [0.1663048267364502, 10.286760330200195], + [-2.4451355934143066, 1.5527321100234985], + [6.047806262969971, 7.466425895690918], + [4.168416500091553, -8.021940231323242], + [-4.405750274658203, 7.92919921875], + [-0.20674678683280945, -1.5382081270217896], + [2.6345291137695312, -6.795171737670898], + [0.16088348627090454, 9.553539276123047], + [-0.03473223000764847, 12.04153823852539], + [2.7144687175750732, -3.619865894317627], + [5.523068904876709, 7.625472068786621], + [-0.15869176387786865, -0.666789710521698], + [-2.5609817504882812, 1.6135321855545044], + [-7.075976848602295, 8.26117992401123], + [8.009809494018555, -2.3721539974212646], + [3.7574524879455566, -3.690748691558838], + [2.372303009033203, 5.545258522033691], + [-2.171842575073242, 2.8124496936798096], + [-6.690571308135986, 6.950813293457031], + [-4.380106449127197, -6.407510757446289], + [1.4261572360992432, 1.3759738206863403], + [-1.6385577917099, 2.2625975608825684], + [1.2168463468551636, -6.578125], + [-2.391976833343506, 1.676985263824463], + [4.187110424041748, 1.8385287523269653], + [0.5684652328491211, -0.8869401216506958], + [-2.5298678874969482, -3.2136967182159424], + [1.8671576976776123, 4.462521076202393], + [3.0251877307891846, 4.704324722290039], + [-1.1711481809616089, 0.3358415961265564], + [1.2842209339141846, -7.611593246459961], + [2.0212154388427734, 3.0131871700286865], + [0.2011060118675232, 11.282186508178711], + [-3.4026670455932617, -3.7876365184783936], + [-2.124343156814575, 2.485548973083496], + [3.1543238162994385, -7.664322853088379], + [4.14336633682251, -3.3093063831329346], + [8.072052001953125, -2.39111065864563], + [3.602966547012329, 1.9409288167953491], + [-2.180372476577759, 2.3766555786132812], + [3.0623435974121094, -3.7868518829345703], + [-6.030462741851807, 7.2559943199157715], + [-0.2951326370239258, -1.3521212339401245], + [-1.186047077178955, -2.140315294265747], + [5.223630905151367, -1.1773039102554321], + [4.54998779296875, 7.355219841003418], + [0.3208535611629486, -1.2646050453186035], + [1.2763221263885498, 0.9599696397781372], + [2.982553482055664, -4.190540313720703], + [3.640833616256714, -8.71927261352539], + [0.20262891054153442, 10.760318756103516], + [-6.300480842590332, 6.442295074462891], + [3.1267831325531006, -2.92986798286438], + [9.424918174743652, -2.4621288776397705], + [-3.2239229679107666, -5.175372123718262], + [-3.57354736328125, -2.5096335411071777], + [3.6976566314697266, -3.2332589626312256], + [3.0401220321655273, -4.25181770324707], + [-2.128382921218872, 2.4531848430633545], + [2.2795495986938477, 2.427953004837036], + [-2.8731276988983154, -4.7141876220703125], + [0.8586172461509705, -4.519216537475586], + [-4.884781360626221, -7.571689605712891], + [2.4143903255462646, -6.704748630523682], + [3.9990265369415283, 5.684425354003906], + [6.824392795562744, -0.7836751341819763], + [-0.9170296788215637, -3.4522922039031982], + [3.790977716445923, -3.776275873184204], + [-7.3614020347595215, -0.276824951171875], + [6.498454570770264, 8.300769805908203], + [3.9714195728302, 1.609360933303833], + [-2.1840884685516357, 2.293325901031494], + [-5.660426616668701, 5.659318447113037], + [-2.9447743892669678, -3.896390199661255], + [8.229771614074707, -2.317549228668213], + [2.10942006111145, -8.188692092895508], + [3.6549508571624756, -6.531100273132324], + [-1.7410736083984375, 0.5087011456489563], + [-7.462095737457275, 2.9591481685638428], + [-2.445709228515625, 1.6794096231460571], + [-0.4689633250236511, -1.8114242553710938], + [-2.4822638034820557, -4.046835422515869], + [2.4195337295532227, 6.116498947143555], + [6.053837299346924, 7.640528678894043], + [2.5908048152923584, -7.492363452911377], + [7.481639385223389, -1.7339767217636108], + [1.8664772510528564, 4.555027008056641], + [3.678898334503174, -3.6712846755981445], + [4.026343822479248, 6.395920276641846], + [-1.5574053525924683, 1.9915193319320679], + [-0.05424731224775314, -1.6344486474990845], + [-2.2187728881835938, 2.422334909439087], + [-4.391809940338135, -7.265361309051514], + [-7.555515766143799, -0.11338686943054199], + [-5.271963119506836, -1.6708344221115112], + [-6.087584018707275, -0.8158252835273743], + [3.5074305534362793, -7.1562604904174805], + [3.035677909851074, 4.782510280609131], + [-4.163630962371826, -6.067281723022461], + [2.5937306880950928, 2.4349071979522705], + [0.7820934653282166, -6.63121223449707], + [4.810699939727783, -4.44782018661499], + [2.9910566806793213, -4.164746284484863], + [7.407517910003662, -1.9434643983840942], + [-4.228011608123779, -5.813342571258545], + [-5.272207736968994, 8.873983383178711], + [2.4428653717041016, -7.031115531921387], + [-0.29714030027389526, 0.8359678983688354], + [-0.05298251658678055, 9.907511711120605], + [2.3956410884857178, -5.646929740905762], + [-5.198806285858154, 7.245466232299805], + [-6.178808212280273, -1.654166340827942], + [2.545255184173584, 1.978092074394226], + [2.6239373683929443, -5.221740245819092], + [-4.184170722961426, -6.2987961769104], + [-3.556931257247925, 5.459600448608398], + [2.405891180038452, 1.8312925100326538], + [0.23600298166275024, 11.084428787231445], + [-0.03957987576723099, 9.970592498779297], + [-5.603212833404541, -2.4869492053985596], + [-4.942480564117432, -6.133208751678467], + [-7.945528507232666, 9.338706016540527], + [-0.3410605490207672, -1.6495544910430908], + [-2.4789371490478516, 2.0129177570343018], + [-2.7121801376342773, -1.6933053731918335], + [2.9332115650177, -2.953505039215088], + [-0.7329018712043762, -2.0556018352508545], + [-2.4547295570373535, -3.8866894245147705], + [-2.907620429992676, -1.252219557762146], + [7.962172985076904, -2.2519779205322266], + [8.56967830657959, -2.4794869422912598], + [1.4266166687011719, -5.862586975097656], + [-3.527461051940918, -3.145350933074951], + [-2.3215460777282715, 2.4489214420318604], + [2.4804582595825195, 3.092721700668335], + [-0.03311402350664139, 12.80593490600586], + [-4.276877403259277, 4.3818559646606445], + [-4.343079090118408, -6.153955459594727], + [1.1561774015426636, 0.7723012566566467], + [-0.8947141170501709, 7.119354248046875], + [0.06539302319288254, 12.094526290893555], + [-2.3931760787963867, 0.38340136408805847], + [3.0075743198394775, -4.2536797523498535], + [3.115396022796631, -2.085676431655884], + [-4.239355564117432, -5.861456871032715], + [-4.789498805999756, -7.176766395568848], + [-2.9425485134124756, 0.03377174958586693], + [1.701115369796753, -7.3689446449279785], + [-3.7460062503814697, -5.454606056213379], + [0.04569470137357712, 9.729938507080078], + [3.651520013809204, -3.878887176513672], + [-0.8852996230125427, 1.6846799850463867], + [-6.747243404388428, -1.234653115272522], + [-3.4580295085906982, -5.509124755859375], + [5.384781360626221, 7.797782897949219], + [-2.0174736976623535, 2.5868797302246094], + [9.338887214660645, -2.341553211212158], + [-3.262019395828247, 4.776184558868408], + [1.9140238761901855, -8.498666763305664], + [5.611945152282715, 7.735281944274902], + [-2.379369020462036, 1.2622911930084229], + [5.827155113220215, -2.871047258377075], + [-4.187853813171387, -0.21352827548980713], + [-1.3658028841018677, -0.9696906208992004], + [-6.986137866973877, 3.6219799518585205], + [2.93337082862854, 5.389704704284668], + [3.2280914783477783, -8.037158012390137], + [6.320063591003418, 7.90131950378418], + [1.3481383323669434, 11.17375373840332], + [-5.994950771331787, 7.650491714477539], + [-2.062587261199951, 2.307504415512085], + [3.071507692337036, -3.124117612838745], + [-4.576125144958496, -1.1296974420547485], + [1.630449652671814, 2.24798321723938], + [3.966365098953247, 6.4088640213012695], + [6.379147529602051, -1.3973239660263062], + [3.9422261714935303, 6.485042572021484], + [-4.078797817230225, 4.779971122741699], + [-0.1796586513519287, 0.6879309415817261], + [3.1861536502838135, -3.7974939346313477], + [0.18772953748703003, 10.333307266235352], + [-5.623830318450928, 6.238724231719971], + [-7.913150310516357, -0.5370887517929077], + [-3.208163022994995, -5.338466167449951], + [-3.7099664211273193, 3.624523639678955], + [1.9720492362976074, -7.228621006011963], + [0.9234262108802795, -0.7489333748817444], + [-2.2433884143829346, -0.21527642011642456], + [2.9884238243103027, -10.025354385375977], + [3.3657591342926025, -4.0276079177856445], + [8.852544784545898, -2.4389288425445557], + [1.9407107830047607, 3.0601446628570557], + [-1.46550714969635, -0.13517862558364868], + [3.910388231277466, -8.530448913574219], + [-5.82050085067749, 5.11798095703125], + [7.432049751281738, -1.6826847791671753], + [3.1298091411590576, 4.702138900756836], + [-5.857559680938721, 6.482430934906006], + [-5.580644607543945, 6.985480308532715], + [1.474508285522461, -0.1572675108909607], + [-5.1499199867248535, 0.43963950872421265], + [-4.36123514175415, -6.176725387573242], + [4.850447177886963, 6.0778913497924805], + [-6.136107921600342, 6.840973854064941], + [-6.423191547393799, 0.13450109958648682], + [-4.989198207855225, -3.657705783843994], + [4.4338836669921875, -0.7913554906845093], + [4.291962146759033, 6.741654872894287], + [-5.4431471824646, 5.389176368713379], + [1.4299017190933228, 5.0275468826293945], + [1.5471816062927246, 1.625353455543518], + [2.856865644454956, -4.067958831787109], + [-6.725342750549316, -0.4096680283546448], + [-6.939938068389893, -0.5768572688102722], + [-5.757896900177002, -0.11834299564361572], + [-6.782385349273682, 8.055130958557129], + [0.23710930347442627, 10.853119850158691], + [-3.735748291015625, -1.0598723888397217], + [-6.805564880371094, 8.023086547851562], + [-2.6417922973632812, 1.9540921449661255], + [-6.592236518859863, -0.06677818298339844], + [1.1630418300628662, 5.269457817077637], + [2.9625303745269775, -3.9165804386138916], + [0.534572958946228, 11.027186393737793], + [-4.472219944000244, -2.0426361560821533], + [-2.340285301208496, -3.305361032485962], + [6.164125919342041, -1.3243008852005005], + [0.07756604999303818, 1.2658635377883911], + [7.861206531524658, -1.4750863313674927], + [-0.0038347914814949036, 12.960404396057129], + [3.4424400329589844, -7.807804107666016], + [-0.8285097479820251, 1.402572512626648], + [-4.4480156898498535, -6.573202133178711], + [6.243160724639893, -1.3511085510253906], + [-4.279222011566162, 5.17185115814209], + [-2.916677951812744, 0.4209580421447754], + [-2.3248984813690186, 2.1686441898345947], + [9.222992897033691, -2.3417773246765137], + [6.345718860626221, 8.167673110961914], + [-1.8709473609924316, -4.315762996673584], + [-2.1908414363861084, 2.757098436355591], + [2.120412826538086, -5.92851448059082], + [7.801394939422607, -2.3605875968933105], + [2.7877869606018066, -4.000808238983154], + [2.9412920475006104, 0.814720630645752], + [-6.2166008949279785, -1.3216960430145264], + [-5.366100788116455, -5.074418067932129], + [-1.862726092338562, 2.331953525543213], + [8.42553997039795, -2.3158655166625977], + [2.768345594406128, -8.588211059570312], + [1.993375301361084, -4.578372955322266], + [3.0744011402130127, -6.31174898147583], + [-1.9139416217803955, 2.460564374923706], + [-4.167415618896484, 4.782516002655029], + [5.10366678237915, 6.33720064163208], + [-3.7984163761138916, -2.2378835678100586], + [0.22493606805801392, 10.8458833694458], + [-5.050981044769287, -0.9500823020935059], + [-0.06510091572999954, 9.378801345825195], + [3.1149744987487793, -4.10980224609375], + [0.07829337567090988, 11.753583908081055], + [-4.170013904571533, -5.796447277069092], + [-5.341201305389404, 3.780129909515381], + [-2.067028284072876, 2.6148386001586914], + [-2.863034725189209, 0.4045106768608093], + [-5.291296482086182, -0.07601362466812134], + [-5.20689058303833, 5.2219085693359375], + [-3.1505374908447266, 3.4479024410247803], + [-4.457892894744873, -3.3996105194091797], + [-5.084004878997803, -2.679717540740967], + [3.3410279750823975, -4.554697036743164], + [-4.713232040405273, -3.9885711669921875], + [7.724596977233887, -2.301403284072876], + [1.551693320274353, 1.7682733535766602], + [9.86877155303955, -2.3259425163269043], + [0.172329843044281, 10.220431327819824], + [0.6902482509613037, -4.725401878356934], + [0.6061647534370422, -1.1198968887329102], + [3.1715383529663086, -4.955302715301514], + [-1.3205426931381226, 1.9609142541885376], + [5.107820987701416, -3.925389051437378], + [2.919348955154419, 0.7049367427825928], + [3.2489171028137207, -4.896185874938965], + [0.08934562653303146, 9.767939567565918], + [-1.5683906078338623, 1.6158865690231323], + [9.163366317749023, -2.3930046558380127], + [7.105716228485107, 8.546422004699707], + [0.5216503143310547, -1.0451369285583496], + [2.910330057144165, -3.4515058994293213], + [3.040236711502075, -3.885004758834839], + [7.999913692474365, -2.073329210281372], + [-2.2898967266082764, 1.3051496744155884], + [8.772854804992676, -2.5912463665008545], + [10.646048545837402, -2.438971757888794], + [3.3939380645751953, -6.6243791580200195], + [-4.54470682144165, -2.402827739715576], + [-0.9007840752601624, 1.890921950340271], + [7.018046855926514, -3.1295711994171143], + [3.176478862762451, -4.754284858703613], + [-1.8403515815734863, -0.1271645724773407], + [2.9308698177337646, -4.159217834472656], + [7.00280237197876, 8.579265594482422], + [8.428138732910156, -2.4066436290740967], + [2.882305383682251, -7.908147811889648], + [-3.527207612991333, -3.828019857406616], + [-0.04470080882310867, 9.700576782226562], + [0.08711724728345871, 9.442730903625488], + [2.7220747470855713, -2.344135046005249], + [-2.3875603675842285, 2.076927423477173], + [7.936290264129639, -2.1920011043548584], + [-2.4389264583587646, 2.6641690731048584], + [10.602755546569824, -2.491798162460327], + [-2.4718592166900635, 2.075756549835205], + [-3.7232890129089355, -3.046611785888672], + [-5.169409275054932, 6.112476348876953], + [3.608376979827881, 7.182476997375488], + [3.783520460128784, -6.555428981781006], + [3.440598249435425, -6.803956985473633], + [3.6665937900543213, -8.172466278076172], + [6.142292499542236, 7.722463130950928], + [4.17084264755249, -3.4614760875701904], + [-0.8119056224822998, -3.0704848766326904], + [-3.52846097946167, -0.6612799167633057], + [6.723784923553467, -2.977587938308716], + [2.4505224227905273, 5.148648738861084], + [8.215410232543945, -2.201531410217285], + [1.3512541055679321, -5.631406784057617], + [1.322628378868103, -0.9367218613624573], + [4.322164535522461, -6.321203231811523], + [5.689940929412842, 7.874699592590332], + [-6.9513773918151855, 2.5154402256011963], + [-5.394169807434082, 5.268857479095459], + [-5.047529220581055, -2.447172164916992], + [2.8921971321105957, -1.7779977321624756], + [-0.04046625643968582, 9.456850051879883], + [-2.286503553390503, -0.4030350148677826], + [3.7025346755981445, -8.856771469116211], + [-4.278251647949219, 4.001255989074707], + [-0.8096665143966675, -0.9261438250541687], + [5.161921977996826, 7.609170436859131], + [-1.9687201976776123, 0.10040146112442017], + [-4.003971099853516, 6.496931552886963], + [-4.038214683532715, -2.1878011226654053], + [-3.9804704189300537, 5.370658874511719], + [0.05851519852876663, -1.5946792364120483], + [0.567466139793396, -4.759029865264893], + [0.6528305411338806, -1.1499792337417603], + [2.383302927017212, 2.3247458934783936], + [1.7127876281738281, -6.202188014984131], + [0.7152711749076843, -1.8737550973892212], + [-2.8498377799987793, -3.233950614929199], + [3.0637130737304688, -2.9311254024505615], + [-1.8224889039993286, 2.350270986557007], + [-4.411758899688721, -6.312768459320068], + [5.025705337524414, 7.269621849060059], + [-6.635672092437744, 7.954804420471191], + [4.100931644439697, -7.384981155395508], + [9.019083976745605, -2.356264352798462], + [4.97097635269165, 7.276214122772217], + [3.6589250564575195, -5.114908695220947], + [-2.5344245433807373, 1.832818865776062], + [3.05741286277771, -4.118584156036377], + [-4.814547538757324, -1.3231950998306274], + [1.147770881652832, -6.854576587677002], + [-4.736677169799805, 5.397904396057129], + [-0.007693953812122345, 12.328617095947266], + [8.6502685546875, -2.2377612590789795], + [-4.128591060638428, 6.663043975830078], + [0.15232831239700317, 11.245424270629883], + [0.24161282181739807, -0.24320602416992188], + [-1.5961977243423462, 1.902889609336853], + [4.245242595672607, 6.832785606384277], + [-0.043448157608509064, 13.859524726867676], + [2.912343740463257, 3.210853099822998], + [0.199191153049469, 10.467900276184082], + [-3.108187675476074, 1.8660862445831299], + [-2.647914171218872, -5.015740394592285], + [-1.054152250289917, 0.32022929191589355], + [3.6035635471343994, 1.3898762464523315], + [3.3185551166534424, 1.6352981328964233], + [6.039024829864502, -5.909212112426758], + [-1.1559903621673584, -4.098613739013672], + [-6.30103063583374, 7.196147918701172], + [-4.47411584854126, -5.924860954284668], + [2.111051082611084, 2.2263591289520264], + [2.4220356941223145, 5.173215866088867], + [-2.8889896869659424, 5.713364601135254], + [-5.749466419219971, -1.0031342506408691], + [5.717525005340576, -2.63822340965271], + [1.1131125688552856, -7.463711261749268], + [-5.5945000648498535, -2.1149842739105225], + [2.1769020557403564, 5.503586769104004], + [0.04027687758207321, 12.051689147949219], + [5.517996788024902, 8.101085662841797], + [6.949568271636963, 8.652257919311523], + [6.983731746673584, -4.999452114105225], + [-5.232019901275635, -3.4970223903656006], + [-0.06423420459032059, 9.69499397277832], + [-5.280872821807861, 0.040158387273550034], + [-2.9636552333831787, -2.9667937755584717], + [1.7023117542266846, 5.64264440536499], + [-6.507547855377197, 6.5659637451171875], + [-5.446972370147705, 4.493899345397949], + [-5.386470317840576, 8.17062759399414], + [-5.7731709480285645, 6.195316314697266], + [-4.135176181793213, -3.874101400375366], + [-4.946128845214844, -0.6270057559013367], + [-5.181702613830566, -0.10286533832550049], + [-1.979243278503418, 2.2139477729797363], + [-3.5464396476745605, -5.457507610321045], + [4.661327362060547, -6.55044412612915], + [4.16682767868042, -4.582117557525635], + [0.2667298913002014, 11.006590843200684], + [4.374523162841797, -3.9232654571533203], + [0.2219730019569397, 12.501668930053711], + [9.289467811584473, -2.3708436489105225], + [3.3496363162994385, -6.314444065093994], + [-2.080442190170288, 2.308337926864624], + [-1.9082136154174805, 2.3762502670288086], + [4.004724979400635, -3.4843268394470215], + [3.7547004222869873, -3.6216530799865723], + [4.059239387512207, -3.5304529666900635], + [-4.633945465087891, -6.768465995788574], + [2.198796033859253, 5.439201831817627], + [-5.403468608856201, 4.221510410308838], + [-2.430147409439087, 2.8017444610595703], + [-4.065147876739502, -4.694654941558838], + [0.01481955498456955, 12.564021110534668], + [-4.205447196960449, -3.287907838821411], + [0.02155100554227829, 9.586688995361328], + [-1.0711122751235962, 1.6615906953811646], + [3.7254230976104736, -4.603664398193359], + [-2.9723610877990723, -1.681556224822998], + [6.912313938140869, 8.30129337310791], + [-5.885645389556885, 6.2625508308410645], + [-3.9871742725372314, 4.998407363891602], + [4.211883544921875, -2.9375226497650146], + [0.16576355695724487, 9.668551445007324], + [5.6947245597839355, 7.669909477233887], + [-4.899363994598389, -0.8867883086204529], + [2.1028616428375244, -8.743814468383789], + [8.495295524597168, -2.5033419132232666], + [0.18813204765319824, 11.579581260681152], + [-4.207467079162598, -6.405079364776611], + [2.4948890209198, -4.661563396453857], + [7.216846942901611, 8.722354888916016], + [9.08048152923584, -2.3772189617156982], + [6.438329219818115, 7.833061218261719], + [-4.2685322761535645, -3.106945753097534], + [8.264477729797363, -2.2967052459716797], + [-2.8852336406707764, 2.431302309036255], + [-6.954885005950928, -0.512069046497345], + [0.2103489637374878, 11.057790756225586], + [-2.5787181854248047, 2.186300277709961], + [1.8012497425079346, -6.102852821350098], + [-2.9198999404907227, -4.410857200622559], + [3.7466413974761963, -3.7110984325408936], + [4.47647762298584, -8.106523513793945], + [-4.17023229598999, -2.183988332748413], + [2.869188070297241, -9.391637802124023], + [-3.315920114517212, 3.275696039199829], + [3.474510908126831, -3.232475996017456], + [2.4474217891693115, -6.064895153045654], + [6.6956706047058105, -1.9927464723587036], + [2.9235222339630127, 0.6968798637390137], + [3.1844658851623535, -5.489894866943359], + [4.22581672668457, -2.7502458095550537], + [1.885619044303894, 3.5543808937072754], + [-1.0040110349655151, -2.234281063079834], + [7.037079334259033, 8.442604064941406], + [-5.477580547332764, 7.297547817230225], + [-4.07384729385376, -2.5003349781036377], + [-1.8883914947509766, -3.2963216304779053], + [-5.136593818664551, 4.1774210929870605], + [-0.8261405825614929, -2.2231602668762207], + [-3.7173006534576416, -3.710343599319458], + [-1.4412462711334229, -3.4319403171539307], + [-2.3430943489074707, -3.9966225624084473], + [-1.057798981666565, 1.8215852975845337], + [-5.33613920211792, -1.6268632411956787], + [4.653250217437744, -3.7641661167144775], + [9.132482528686523, -2.4112069606781006], + [-5.102772235870361, 3.9740817546844482], + [-2.6419804096221924, -2.9685218334198], + [-2.139486789703369, -1.2927848100662231], + [2.7211196422576904, -7.551606178283691], + [-5.068049907684326, -3.553893566131592], + [0.6084610819816589, -6.106263160705566], + [9.178399085998535, -2.4408388137817383], + [7.629631519317627, -1.9228065013885498], + [-1.3209929466247559, 2.0575523376464844], + [7.993811130523682, -1.98000168800354], + [-0.717234194278717, -0.7663953900337219], + [2.4247303009033203, 5.727991580963135], + [-2.120744228363037, 2.7133405208587646], + [6.034716606140137, -5.518213272094727], + [-4.370626449584961, 5.21433687210083], + [-1.8222836256027222, 2.1049633026123047], + [4.639662265777588, 6.4978251457214355], + [0.2297859787940979, 12.360723495483398], + [-6.532957553863525, 8.286958694458008], + [0.21159446239471436, 10.721453666687012], + [7.415103912353516, -2.0150909423828125], + [4.555981636047363, -0.2216688096523285], + [-1.5010621547698975, 2.044262409210205], + [0.10872512310743332, 12.294082641601562], + [-4.620615482330322, -6.8071417808532715], + [-4.585054874420166, 4.753415107727051], + [-4.76214075088501, -1.0644432306289673], + [-5.543610095977783, -2.484819173812866], + [6.733266353607178, -3.9061052799224854], + [-4.25412130355835, 6.55760383605957], + [-3.727367639541626, -5.746731758117676], + [3.538259506225586, -7.925951957702637], + [0.098331980407238, 9.54997444152832], + [1.6696133613586426, -7.962841033935547], + [3.109602212905884, -4.394720554351807], + [9.131621360778809, -2.4909064769744873], + [0.03179279714822769, -1.5860871076583862], + [2.888896942138672, -5.657676696777344], + [3.0618393421173096, -4.333565711975098], + [-2.0084524154663086, -3.730712652206421], + [3.421977996826172, -3.8323826789855957], + [5.495880603790283, -0.42120862007141113], + [0.1969330906867981, 11.050762176513672], + [-2.9604804515838623, 0.8196462392807007], + [-3.791929006576538, -1.6308518648147583], + [5.368764400482178, -3.0219886302948], + [3.294158697128296, -3.741732358932495], + [-1.5555676221847534, -0.5818881392478943], + [6.06541633605957, -2.3785362243652344], + [-3.527561664581299, 4.739424228668213], + [2.1934962272644043, -7.855344772338867], + [10.008179664611816, -2.3445098400115967], + [-1.4252732992172241, 1.2799618244171143], + [3.380255937576294, -7.599016189575195], + [0.10878115147352219, 11.897560119628906], + [-1.140616536140442, 1.3942053318023682], + [-4.270687580108643, -4.002120494842529], + [-1.6482411623001099, -3.299783945083618], + [3.255598545074463, -3.336514472961426], + [6.958550930023193, 8.413061141967773], + [8.7859525680542, -2.466681480407715], + [2.613689661026001, 5.250772476196289], + [-5.013827323913574, 7.563270568847656], + [-4.908926963806152, -3.5208945274353027], + [-4.492999076843262, 4.641205787658691], + [0.23201429843902588, 10.844449996948242], + [1.4941699504852295, 5.8846893310546875], + [0.04041502624750137, -3.141166925430298], + [-1.9838337898254395, 2.0953822135925293], + [-0.7453503608703613, -3.132758855819702], + [4.035594463348389, -4.73629093170166], + [4.86433744430542, -3.3443686962127686], + [-3.8134424686431885, -6.145173072814941], + [6.193151950836182, -1.2982293367385864], + [-3.3046040534973145, -4.20468282699585], + [-4.263322353363037, -3.9733917713165283], + [-0.05695147067308426, 12.897941589355469], + [-3.294184923171997, 2.7846574783325195], + [-2.3421096801757812, 2.573596715927124], + [2.4597980976104736, -3.2914435863494873], + [4.880421161651611, 6.976283550262451], + [3.044250249862671, -3.901829957962036], + [1.273479700088501, 4.873245716094971], + [1.5692927837371826, 3.841684103012085], + [2.2907443046569824, 0.45850616693496704], + [3.6017887592315674, 6.3324103355407715], + [-8.130040168762207, -0.0398414172232151], + [4.388182640075684, -4.023334980010986], + [3.4276232719421387, -3.1511900424957275], + [0.04661303013563156, 9.810720443725586], + [-4.430899143218994, 5.313994407653809], + [-2.2594621181488037, -4.887507438659668], + [0.0011616870760917664, 13.39169692993164], + [4.964727878570557, -1.5687991380691528], + [-3.774033308029175, 4.897097587585449], + [8.173436164855957, -2.249804973602295], + [9.75163459777832, -2.3347012996673584], + [6.261892795562744, -2.2951066493988037], + [8.066280364990234, -2.3760993480682373], + [-4.434372901916504, -3.1636178493499756], + [-6.196122169494629, 7.884108543395996], + [-1.6346015930175781, -1.0449466705322266], + [5.41904878616333, -1.503656029701233], + [-6.357348442077637, -0.10584509372711182], + [-2.9105982780456543, -0.20457231998443604], + [3.7629761695861816, 1.548550009727478], + [6.273130416870117, 7.976620674133301], + [-3.3165338039398193, -1.0128393173217773], + [-6.259984016418457, -0.012645963579416275], + [2.751103401184082, -3.2758231163024902], + [-2.9325034618377686, -4.317289352416992], + [2.712895631790161, -7.651943683624268], + [3.854499578475952, 1.947590708732605], + [-1.8596553802490234, -3.7153432369232178], + [-2.7469494342803955, -3.362051248550415], + [0.0748932883143425, 12.455238342285156], + [2.8525166511535645, -9.517036437988281], + [2.485124111175537, 2.6259195804595947], + [2.791431188583374, -10.139566421508789], + [3.017820358276367, -4.274552822113037], + [5.4531941413879395, 7.436086654663086], + [-4.655951023101807, -7.270823001861572], + [6.242464542388916, -1.651091456413269], + [-2.09830641746521, 2.6186773777008057], + [2.2296719551086426, 0.3441239893436432], + [0.13075095415115356, 9.724650382995605], + [4.6810688972473145, 1.7794133424758911], + [5.595169544219971, 7.074363708496094], + [-0.2618808150291443, 9.623659133911133], + [-0.8433393836021423, 1.6304595470428467], + [0.3883639872074127, -1.3577696084976196], + [7.5881853103637695, -2.1229746341705322], + [-4.467098712921143, 4.115062713623047], + [0.6633793711662292, 11.695058822631836], + [1.9093390703201294, -7.712909698486328], + [2.9214208126068115, -0.07228372991085052], + [0.15388137102127075, 12.091411590576172], + [2.3087961673736572, -6.572343826293945], + [7.553277969360352, -2.131645441055298], + [-0.08694500476121902, -1.7436038255691528], + [3.390953540802002, 6.8090715408325195], + [-3.6033151149749756, -5.788257598876953], + [1.795782446861267, -0.06527163088321686], + [-4.006747722625732, 7.353663444519043], + [-1.5914645195007324, 2.2217836380004883], + [6.408374309539795, -6.498478889465332], + [-2.2798891067504883, 2.733609676361084], + [5.048287391662598, -4.214725494384766], + [-2.9342734813690186, -1.2438600063323975], + [3.2938787937164307, 1.2572966814041138], + [-5.895021438598633, 2.003371477127075], + [1.0813372135162354, -0.648970365524292], + [1.8560996055603027, 3.165297269821167], + [3.0125691890716553, -7.735141754150391], + [-1.7567368745803833, 0.708795964717865], + [-2.1513051986694336, 2.2317392826080322], + [-3.6584136486053467, -2.5917723178863525], + [7.760806560516357, -2.038898229598999], + [1.7923078536987305, 0.5420653820037842], + [-0.8026592135429382, -0.6658931970596313], + [-2.134540557861328, 2.642596960067749], + [6.228325366973877, 7.950899600982666], + [-4.183979034423828, -2.14751935005188], + [1.204426646232605, -7.222916603088379], + [-5.473793029785156, 6.922283172607422], + [4.025119781494141, 6.280035972595215], + [9.04039478302002, -2.3280012607574463], + [-4.503676891326904, 4.559779167175293], + [3.6581687927246094, 1.0336824655532837], + [-2.3221986293792725, 2.191366195678711], + [-4.46823787689209, -1.6539455652236938], + [0.08494251221418381, 11.817185401916504], + [-3.300910234451294, -2.7155373096466064], + [3.0000970363616943, -4.042754650115967], + [-0.09336096793413162, 13.651590347290039], + [4.5914082527160645, -3.4543967247009277], + [2.368286371231079, 5.679111480712891], + [2.9685211181640625, -2.5825469493865967], + [8.890515327453613, -2.3406100273132324], + [7.342201232910156, -1.7527153491973877], + [-2.838782548904419, -2.1490931510925293], + [2.670729398727417, -6.861340522766113], + [-4.886825084686279, -7.635164260864258], + [3.1138927936553955, -4.669567108154297], + [0.1947140097618103, 11.155881881713867], + [2.189164876937866, -8.968544960021973], + [-2.297482967376709, 1.5553168058395386], + [-5.19164514541626, 4.682090759277344], + [5.813957691192627, 7.979684829711914], + [-4.215090274810791, 4.458488941192627], + [0.7393049597740173, -6.250067710876465], + [3.0939714908599854, -3.321186065673828], + [9.10338306427002, -2.6022980213165283], + [-2.4799280166625977, 2.026733160018921], + [-4.415528774261475, -6.685976028442383], + [0.05164843052625656, 9.34333610534668], + [3.7182974815368652, -3.6632132530212402], + [-2.8707942962646484, 1.8549668788909912], + [6.854304790496826, -1.5688186883926392], + [2.846142530441284, -3.838567018508911], + [2.089155435562134, -7.455926895141602], + [2.6186392307281494, -7.497472763061523], + [1.8171391487121582, 4.455267906188965], + [-4.380248546600342, -6.139379501342773], + [-3.327009439468384, -1.162601351737976], + [-7.533106327056885, -0.21646583080291748], + [-2.162940740585327, -4.125311851501465], + [5.886833190917969, 7.783041954040527], + [-3.5963540077209473, 5.558721542358398], + [-3.470136880874634, -3.511009693145752], + [-7.77770471572876, 0.15095305442810059], + [5.158242702484131, -1.6619150638580322], + [1.7632337808609009, 0.7245476841926575], + [7.89621114730835, -2.1179771423339844], + [6.991572380065918, -1.6854709386825562], + [8.788250923156738, -2.531562328338623], + [0.11566286534070969, 11.861604690551758], + [0.9889793992042542, -5.88969612121582], + [-5.435396671295166, -2.185056447982788], + [-3.7420310974121094, 3.6354238986968994], + [2.1717019081115723, 3.8628289699554443], + [-1.539285659790039, 1.6080760955810547], + [0.31036871671676636, 10.538167953491211], + [-3.366631031036377, -4.662200927734375], + [-0.2133905589580536, -1.2606333494186401], + [-1.062277913093567, 0.6742504239082336], + [1.61724853515625, -3.521217107772827], + [-0.19207894802093506, 5.000615119934082], + [5.113578796386719, -2.211935520172119], + [-1.9313710927963257, 0.37527644634246826], + [2.2674405574798584, 1.9779785871505737], + [3.1658120155334473, -4.466463565826416], + [7.562901020050049, -3.9153823852539062], + [-6.982394695281982, 8.182538986206055], + [-6.931736946105957, 7.791830539703369], + [0.73666912317276, -0.176945298910141], + [9.172186851501465, -2.37178111076355], + [2.3493497371673584, -8.370964050292969], + [-5.52331018447876, 4.348603248596191], + [-0.5545107126235962, 0.5299170017242432], + [1.2857916355133057, 5.9914870262146], + [3.1952478885650635, -4.935962677001953], + [2.6143643856048584, 6.064262390136719], + [2.835541248321533, -4.016626834869385], + [8.524128913879395, -2.2953219413757324], + [1.962493658065796, 4.120255470275879], + [0.0505523607134819, 9.53400707244873], + [3.2892770767211914, -3.722350835800171], + [-3.3846542835235596, -4.638672828674316], + [9.263041496276855, -2.4968864917755127], + [3.446441650390625, 1.721788763999939], + [-4.513873100280762, -5.674289703369141], + [1.0949362516403198, -0.2980845272541046], + [5.327996253967285, -2.0160744190216064], + [6.798756122589111, -2.3595423698425293], + [6.670756816864014, -1.8751195669174194], + [3.663013219833374, -5.2797136306762695], + [-2.1264283657073975, 2.6322901248931885], + [9.64433765411377, -2.3370659351348877], + [4.721179008483887, -0.41775745153427124], + [-2.4033055305480957, 3.232823610305786], + [1.2986280918121338, -5.071591377258301], + [7.369113922119141, -2.3224258422851562], + [-3.019667863845825, -3.373499631881714], + [-3.671520471572876, -2.8327667713165283], + [7.431402683258057, -2.861961603164673], + [3.5473592281341553, 6.101927757263184], + [-4.572718143463135, -7.287998676300049], + [2.161686897277832, 3.779930353164673], + [-0.6124484539031982, 0.9791309833526611], + [1.8013584613800049, -2.450021982192993], + [-3.4824564456939697, -2.7450666427612305], + [5.280790328979492, -1.923361897468567], + [1.7088532447814941, -7.415514945983887], + [1.2836151123046875, -7.528377532958984], + [2.0694801807403564, 0.7517416477203369], + [7.297871112823486, -2.3888068199157715], + [-4.767731189727783, 5.772380828857422], + [-2.195223808288574, 1.7535557746887207], + [-0.1249099150300026, -0.5380037426948547], + [1.944490671157837, -6.5909881591796875], + [2.8329217433929443, -4.028890609741211], + [1.768824577331543, 1.093513011932373], + [-2.3089964389801025, -3.858825445175171], + [3.6620452404022217, -3.395906686782837], + [6.995212078094482, 8.634183883666992], + [-2.126624584197998, 2.667008638381958], + [7.218639373779297, -4.112538814544678], + [2.555229425430298, -7.515965461730957], + [6.018272399902344, -5.538914680480957], + [2.794222116470337, -3.5218963623046875], + [0.3579086363315582, -0.22362492978572845], + [10.316840171813965, -2.3847262859344482], + [-4.670751094818115, 0.2453213930130005], + [-4.199568748474121, -5.839735507965088], + [4.014369487762451, -3.6917269229888916], + [4.4649834632873535, 6.850152969360352], + [10.892868995666504, -2.49359130859375], + [3.0272421836853027, -3.9250543117523193], + [8.068522453308105, -2.169644594192505], + [-2.858837842941284, -1.3546223640441895], + [3.7583420276641846, -6.222103118896484], + [2.7903008460998535, -7.316910743713379], + [-0.25656405091285706, -1.6234043836593628], + [0.1541193127632141, 10.009574890136719], + [3.1220529079437256, -4.055861473083496], + [3.3287508487701416, -2.8780295848846436], + [3.2625839710235596, -4.389739990234375], + [5.862161159515381, -2.6659834384918213], + [-4.514901161193848, 3.5876429080963135], + [0.11637311428785324, 9.630660057067871], + [-4.7867608070373535, -7.016922950744629], + [-1.5807342529296875, -3.651233434677124], + [6.701093673706055, 8.260658264160156], + [9.017806053161621, -2.420689344406128], + [-0.01467115432024002, 12.14272689819336], + [2.7227141857147217, 3.0663750171661377], + [-3.4242749214172363, -5.531679153442383], + [3.242086410522461, -3.919517993927002], + [4.733879089355469, -4.24589729309082], + [-2.2847483158111572, 2.183701276779175], + [0.2062646746635437, 10.96876049041748], + [1.5790104866027832, -7.254283905029297], + [-1.9592902660369873, 2.582801580429077], + [-0.08405036479234695, 13.146068572998047], + [0.0499873086810112, 11.358701705932617], + [-2.473259210586548, -4.268972396850586], + [-1.6936436891555786, 1.0210461616516113], + [2.8329696655273438, -4.034699440002441], + [0.1271107792854309, 12.038507461547852], + [2.2160804271698, -8.001439094543457], + [0.1880287528038025, 10.467423439025879], + [0.08802991360425949, 9.290594100952148], + [1.8015090227127075, 2.423443078994751], + [2.401437759399414, 4.677046775817871], + [3.2591326236724854, -3.651106119155884], + [-1.1765152215957642, -1.9948973655700684], + [1.7996292114257812, -7.5243072509765625], + [7.165764331817627, -2.884669542312622], + [-6.750189781188965, 0.3512841463088989], + [0.00787227600812912, 9.92494010925293], + [2.845651388168335, -4.037515163421631], + [1.0772275924682617, -6.778054237365723], + [6.068563938140869, -1.2401769161224365], + [6.520583629608154, -2.3169844150543213], + [7.220732688903809, 9.001399993896484], + [2.3312437534332275, 5.765125274658203], + [-2.655700206756592, -4.053330421447754], + [-1.8327922821044922, 5.017842769622803], + [-6.4940571784973145, -0.8081467151641846], + [2.7895777225494385, 4.256953239440918], + [-0.40030837059020996, 1.6979084014892578], + [-2.68261456489563, -3.2449514865875244], + [-0.03784484416246414, 12.578529357910156], + [2.1458075046539307, 3.8658952713012695], + [-4.016543865203857, -6.410455703735352], + [-0.06540519744157791, 10.778976440429688], + [-4.640799045562744, 5.102880477905273], + [0.2863946557044983, -0.4192935526371002], + [-2.5744669437408447, 2.0268805027008057], + [0.15740734338760376, 11.99859619140625], + [-6.731863975524902, 8.02647876739502], + [0.2123984694480896, 10.523923873901367], + [-3.4210612773895264, -2.0646586418151855], + [-5.056342124938965, 4.0005903244018555], + [4.968502521514893, -3.9246017932891846], + [9.138876914978027, -2.3289132118225098], + [3.3358471393585205, 6.865356922149658], + [3.694962739944458, 5.597513198852539], + [2.8278067111968994, -7.305299758911133], + [-2.357980489730835, 2.052614450454712], + [0.3695915937423706, -1.251665711402893], + [3.999427080154419, 1.4075764417648315], + [-3.9754769802093506, -5.11606502532959], + [5.644122123718262, -5.318073272705078], + [0.05938642472028732, 9.621280670166016], + [4.207783222198486, 1.6185234785079956], + [-4.669559001922607, 5.5398101806640625], + [6.16146993637085, -1.916727900505066], + [5.863545894622803, 7.801176071166992], + [-2.832811117172241, -4.999849319458008], + [5.9571709632873535, 7.756669521331787], + [4.961400985717773, 6.9958367347717285], + [9.252740859985352, -2.507728338241577], + [2.4894559383392334, 0.972275972366333], + [-4.769308567047119, -2.1563193798065186], + [-3.9760079383850098, -6.257446765899658], + [-2.1742987632751465, 1.562842845916748], + [-4.224364280700684, -6.034623622894287], + [-6.923704624176025, 7.609880447387695], + [0.02940308302640915, 9.232574462890625], + [2.544049024581909, -2.7713003158569336], + [3.479149580001831, -8.374580383300781], + [6.580385684967041, 8.496283531188965], + [-4.469760894775391, 3.38155198097229], + [1.234100341796875, -7.278635025024414], + [5.843343257904053, -4.977843284606934], + [-0.2546500861644745, -1.8074828386306763], + [-3.1216647624969482, 3.365435838699341], + [-1.2961922883987427, -4.121891021728516], + [4.8337531089782715, 7.678936004638672], + [5.213813304901123, -2.7305996417999268], + [-4.114344120025635, 5.112024307250977], + [2.932077169418335, -9.201618194580078], + [7.508841037750244, -1.639983057975769], + [-4.904680252075195, 4.892715930938721], + [7.1279168128967285, -1.6018086671829224], + [-3.892216205596924, 4.95792293548584], + [0.2342599630355835, 10.60890007019043], + [6.231851577758789, 8.311161041259766], + [2.523448944091797, -8.17673397064209], + [-2.336629629135132, 6.945868015289307], + [-3.7251389026641846, 6.1594977378845215], + [1.7154269218444824, -6.984007835388184], + [0.1827067732810974, 10.016031265258789], + [-4.346858501434326, -2.2244670391082764], + [-4.782392501831055, -6.756433486938477], + [0.07167252153158188, -1.417733907699585], + [2.9924957752227783, 1.66945481300354], + [0.12245183438062668, 11.826648712158203], + [3.0844366550445557, -4.231969833374023], + [3.0143494606018066, 0.951673150062561], + [0.052210740745067596, 9.571060180664062], + [-0.6238821148872375, 9.301702499389648], + [2.099783420562744, 0.38128891587257385], + [-1.5369255542755127, 2.2433583736419678], + [2.6890947818756104, 4.058692932128906], + [-2.2091710567474365, 2.3247947692871094], + [-5.35051965713501, -3.281284809112549], + [0.096110038459301, 0.8879745602607727], + [8.144734382629395, -2.423879861831665], + [2.8015503883361816, -9.745884895324707], + [2.397108316421509, 4.610021591186523], + [7.743160247802734, -2.0843374729156494], + [7.8160529136657715, -2.4964096546173096], + [0.17564994096755981, 10.290374755859375], + [0.057655446231365204, 8.41567611694336], + [0.15359961986541748, 11.704511642456055], + [0.6811549067497253, -0.6942088603973389], + [-3.898947238922119, -6.755000591278076], + [-3.7982571125030518, -4.487117767333984], + [4.266623497009277, -8.396759986877441], + [2.6965172290802, -4.202566146850586], + [2.130857229232788, 1.4507454633712769], + [5.57313871383667, -1.2246007919311523], + [-0.07283730059862137, 12.662527084350586], + [4.345252513885498, -2.939560651779175], + [-3.5223631858825684, -3.370518207550049], + [8.013216972351074, -2.187453031539917], + [-3.7582085132598877, 6.592166900634766], + [-6.354315280914307, 7.293118953704834], + [-1.7023471593856812, -3.430943012237549], + [5.188799858093262, -3.4588892459869385], + [0.9145038723945618, 11.35352897644043], + [1.5896719694137573, -4.674345016479492], + [-0.017628587782382965, -1.5721092224121094], + [-6.9305291175842285, -0.16039228439331055], + [5.773181438446045, 7.808488845825195], + [-1.645979881286621, 1.85586416721344], + [0.5580335855484009, -1.2690788507461548], + [3.0380332469940186, 4.830256462097168], + [1.4179881811141968, 4.6342668533325195], + [-2.074251890182495, 2.1609017848968506], + [-2.1614913940429688, 2.479989767074585], + [2.813486099243164, 6.011303424835205], + [-1.3887755870819092, 1.3702350854873657], + [1.7698805332183838, 6.624907493591309], + [-4.7537312507629395, 5.176198482513428], + [3.9579226970672607, -3.4902637004852295], + [-4.371450424194336, 7.377540111541748], + [2.057284116744995, -7.565313339233398], + [-1.9821510314941406, -2.7179205417633057], + [-2.585965633392334, 2.043447494506836], + [8.043591499328613, -2.255141496658325], + [0.33751291036605835, 10.944931030273438], + [2.0892815589904785, -3.2716081142425537], + [5.848083019256592, -1.2113581895828247], + [3.5414764881134033, -4.933133125305176], + [-1.8917877674102783, -3.216975450515747], + [-1.8325152397155762, 2.346308946609497], + [10.662373542785645, -2.5410518646240234], + [2.1165027618408203, -5.549283981323242], + [-2.059617280960083, 2.414562225341797], + [-4.080324649810791, 4.214959144592285], + [-2.694228410720825, -5.224804878234863], + [-6.596514701843262, 6.832056045532227], + [0.16912919282913208, 11.86703109741211], + [-0.41090723872184753, 0.4846615195274353], + [2.9502193927764893, -4.218950271606445], + [7.112624645233154, -5.366328239440918], + [0.32363778352737427, 11.522241592407227], + [8.98337173461914, -2.3923137187957764], + [3.9604294300079346, -3.301232099533081], + [0.25771504640579224, 11.416378021240234], + [9.63544750213623, -2.4839603900909424], + [6.611593723297119, -3.78515625], + [-4.8993072509765625, -2.0308046340942383], + [-2.7029638290405273, -1.3759244680404663], + [2.3871216773986816, 4.132216453552246], + [-3.9667389392852783, -2.241661548614502], + [6.629579544067383, 8.213470458984375], + [-4.454160213470459, -7.484265327453613], + [-6.725618839263916, 8.110042572021484], + [5.905147075653076, -5.249080657958984], + [8.592963218688965, -2.5492336750030518], + [3.4732375144958496, 5.325771331787109], + [7.105179309844971, 8.676088333129883], + [6.527869701385498, -2.5661849975585938], + [-4.594760417938232, -2.7432868480682373], + [2.8506438732147217, 4.168790817260742], + [0.18901985883712769, 10.615270614624023], + [2.057420492172241, -3.2360665798187256], + [0.13891631364822388, 9.74233627319336], + [4.447289943695068, 7.232004165649414], + [3.958956003189087, 5.375879764556885], + [3.497545003890991, -3.6355159282684326], + [-0.06204206496477127, 10.37640380859375], + [-2.2259230613708496, -3.9146018028259277], + [-1.726501226425171, -3.406712770462036], + [-3.4058446884155273, -3.284940242767334], + [3.3650364875793457, 0.8542691469192505], + [3.0437445640563965, -4.137150764465332], + [7.63911771774292, -1.6599892377853394], + [7.900501251220703, -2.2559192180633545], + [2.2356526851654053, 4.900947570800781], + [3.191927671432495, -5.477897644042969], + [8.551114082336426, -2.471855878829956], + [-6.669722080230713, 8.385502815246582], + [4.053372859954834, -4.585002899169922], + [3.4665606021881104, 6.397843837738037], + [-0.004344053566455841, 12.445959091186523], + [-2.0830044746398926, -4.155648231506348], + [6.705154895782471, -1.7887842655181885], + [3.0777087211608887, -4.078088760375977], + [8.177413940429688, -2.1662285327911377], + [-6.418319225311279, 7.408805847167969], + [0.9867722392082214, -6.354454040527344], + [4.268476963043213, -3.115788459777832], + [-0.5218462347984314, -2.227301836013794], + [-1.9583756923675537, 0.7368510961532593], + [-8.578717231750488, -0.42201220989227295], + [2.8183505535125732, -3.483818292617798], + [-7.359102725982666, -0.0740739107131958], + [-2.3552401065826416, 3.7368249893188477], + [-5.770802974700928, -1.6464827060699463], + [-3.4323184490203857, 4.4749250411987305], + [-5.487024784088135, 6.080550193786621], + [-4.688319683074951, 0.5466919541358948], + [3.515888214111328, -6.613043785095215], + [0.17025041580200195, 10.890714645385742], + [-1.34548819065094, 1.9342576265335083], + [6.439280986785889, 7.922918796539307], + [2.3180124759674072, -7.419699668884277], + [7.808326244354248, -2.282504081726074], + [2.962315559387207, 4.382078647613525], + [3.4965059757232666, -5.012501239776611], + [2.0711634159088135, 5.676150321960449], + [-5.77949333190918, 5.958004951477051], + [-2.267977237701416, 2.945178985595703], + [1.6499218940734863, -7.925522804260254], + [6.356496334075928, 7.881158828735352], + [-4.754744052886963, -3.313352346420288], + [-0.39812779426574707, -3.956918954849243], + [2.9818074703216553, -4.226054668426514], + [2.4999983310699463, -8.099109649658203], + [1.5623908042907715, 4.2504048347473145], + [-4.209270000457764, 5.2630720138549805], + [6.40177583694458, -1.1061017513275146], + [-2.4955530166625977, -3.4001686573028564], + [2.505093812942505, 2.092736005783081], + [-4.9358110427856445, -6.049198150634766], + [-2.1386406421661377, 2.5004043579101562], + [-2.4060723781585693, 1.47175133228302], + [4.382500171661377, -1.5435054302215576], + [12.73824405670166, -2.688990354537964], + [0.5172012448310852, -0.9476698040962219], + [1.4691710472106934, -6.1113176345825195], + [-2.580763339996338, 1.6911967992782593], + [2.1759135723114014, -2.3059194087982178], + [3.6980068683624268, -7.6910929679870605], + [-2.0283799171447754, 0.7755154967308044], + [-6.629812240600586, 7.291219234466553], + [0.31207627058029175, 8.547739028930664], + [7.004921913146973, 8.476921081542969], + [3.349342107772827, -2.8766977787017822], + [-4.180614471435547, -6.020683765411377], + [-2.1322503089904785, 2.3976926803588867], + [8.13343334197998, -2.175588607788086], + [-4.794884204864502, -6.278088569641113], + [8.50158977508545, -2.221733570098877], + [-4.795636177062988, -6.346261978149414], + [1.9304730892181396, -6.431648254394531], + [4.280381202697754, -3.47544527053833], + [-0.05074841529130936, 12.645926475524902], + [-7.893586158752441, -0.07700502872467041], + [-3.1112334728240967, 7.310732364654541], + [-6.140531539916992, -3.072190046310425], + [0.472881019115448, -5.51824951171875], + [1.0960243940353394, 4.588827133178711], + [-0.05298853665590286, 13.248973846435547], + [-4.770450115203857, 4.804017066955566], + [-4.0954909324646, -1.548593521118164], + [1.974935531616211, -7.268974304199219], + [7.641486644744873, 9.146463394165039], + [-2.0591013431549072, 2.559018135070801], + [3.6459386348724365, -2.962312936782837], + [0.222551167011261, 11.672830581665039], + [3.29514479637146, -4.2095770835876465], + [-3.08978009223938, -2.689593553543091], + [6.382567882537842, 7.857370376586914], + [-0.20513883233070374, -1.463942289352417], + [5.672220706939697, 7.301241397857666], + [1.7008874416351318, 2.943301200866699], + [4.558221340179443, 1.9233142137527466], + [-0.3110448122024536, -1.6997267007827759], + [2.5750010013580322, -2.994534730911255], + [2.71858811378479, 3.629164695739746], + [6.385885238647461, 7.999540328979492], + [2.6275293827056885, 1.5067533254623413], + [2.443962335586548, 2.0809121131896973], + [-3.6015923023223877, 5.687971115112305], + [3.4041993618011475, -3.138599157333374], + [5.966586589813232, -4.38200044631958], + [2.506134510040283, -8.696146965026855], + [8.198324203491211, -2.2080724239349365], + [-2.942352533340454, -3.7589991092681885], + [2.8349006175994873, 4.424668312072754], + [-5.140315532684326, 4.229152202606201], + [-5.318217754364014, -1.7631579637527466], + [3.241506338119507, -2.673208475112915], + [-1.301649808883667, 1.6152652502059937], + [-5.4169440269470215, 4.089907169342041], + [-4.534579277038574, -1.8979748487472534], + [1.752711296081543, -7.7098069190979], + [-5.022522449493408, -1.328834891319275], + [-0.01769978553056717, 12.955257415771484], + [3.5144784450531006, 1.4265296459197998], + [4.193434715270996, -3.762512445449829], + [-4.650839328765869, -7.3818359375], + [-2.852677583694458, 1.3779736757278442], + [-3.335986852645874, -5.403556823730469], + [-4.3441996574401855, -6.854320049285889], + [3.3789427280426025, -0.40220117568969727], + [3.865091562271118, -6.9548139572143555], + [10.150609016418457, -2.4130189418792725], + [-7.338237762451172, 7.601968288421631], + [8.325969696044922, -2.3032171726226807], + [2.2721107006073, 4.921010971069336], + [-2.217512369155884, 2.281794309616089], + [-2.3890562057495117, -1.6441043615341187], + [3.6678881645202637, -6.505374908447266], + [4.514585018157959, 6.979013442993164], + [-0.036111779510974884, 12.190150260925293], + [-2.056816816329956, -3.414306402206421], + [-3.0643081665039062, -3.5740630626678467], + [-0.03762448579072952, 0.6543686389923096], + [-3.2181448936462402, -5.466829776763916], + [-5.989134788513184, 5.925610065460205], + [-3.3057339191436768, -4.029773235321045], + [-0.033792562782764435, 12.768916130065918], + [-5.591731071472168, 6.837769031524658], + [-2.629020929336548, 2.7124338150024414], + [-2.0459179878234863, 1.428645133972168], + [5.48685359954834, 7.251231670379639], + [-6.358311176300049, -1.9152129888534546], + [-2.342690944671631, 2.2396326065063477], + [2.506120443344116, -6.477756023406982], + [-0.10424251109361649, 13.501291275024414], + [-5.374166488647461, -3.680992364883423], + [3.5039188861846924, 1.164735198020935], + [7.249430179595947, 8.647480010986328], + [2.010829210281372, -9.45377254486084], + [9.23340129852295, -2.3245575428009033], + [0.020420126616954803, 8.762359619140625], + [5.9613423347473145, -2.792639970779419], + [-1.9965553283691406, -3.3544154167175293], + [6.875794887542725, 8.446137428283691], + [8.232356071472168, -2.343707323074341], + [3.632162094116211, 1.2626184225082397], + [-2.510422468185425, 2.8496992588043213], + [-2.5567753314971924, 1.5929123163223267], + [3.1497418880462646, 0.6015329360961914], + [-5.273949146270752, -0.5195900797843933], + [-0.569324791431427, 9.674468994140625], + [6.682801723480225, -4.181216239929199], + [-5.167757511138916, -2.9286282062530518], + [-1.5420271158218384, 1.5573917627334595], + [-2.1110827922821045, 2.3420393466949463], + [-2.8599491119384766, 2.463548183441162], + [8.218169212341309, -2.5683438777923584], + [4.045126914978027, -3.7329282760620117], + [4.781190395355225, -1.06886625289917], + [-1.7839618921279907, 2.001556873321533], + [5.563396453857422, -0.9801551103591919], + [2.0319459438323975, -5.191795349121094], + [-3.007397413253784, 0.5927574038505554], + [-3.8785197734832764, 5.85038948059082], + [0.6320435404777527, 7.188911437988281], + [4.186505317687988, -8.270323753356934], + [-2.1203227043151855, 2.500657320022583], + [7.2724385261535645, -1.9122803211212158], + [-6.622352123260498, -2.146223306655884], + [4.340341091156006, -3.3142611980438232], + [-0.8917840123176575, -3.1967551708221436], + [3.7361528873443604, 6.615771770477295], + [-4.53515100479126, -7.488530158996582], + [-1.4717726707458496, -3.0976245403289795], + [-4.950565338134766, -7.615030765533447], + [6.719210624694824, -1.7952892780303955], + [-5.602245807647705, 0.04423820599913597], + [3.6111719608306885, 1.8450831174850464], + [6.725546360015869, 8.512558937072754], + [9.578679084777832, -2.387732982635498], + [3.4493420124053955, -5.088708877563477], + [0.8613260388374329, -0.8029232025146484], + [-2.5391829013824463, 1.8492753505706787], + [0.017320923507213593, 12.230414390563965], + [10.211274147033691, -2.4859933853149414], + [0.4895480275154114, -1.1622651815414429], + [3.1681106090545654, -5.803980827331543], + [-0.040534503757953644, 9.699597358703613], + [5.340569019317627, -1.2099021673202515], + [3.7349929809570312, -3.3355982303619385], + [3.2075836658477783, -6.4482831954956055], + [1.4448721408843994, -0.2657180726528168], + [5.133505821228027, 6.650702476501465], + [-4.784186840057373, -2.144916534423828], + [-2.1918227672576904, -4.055863857269287], + [5.445150375366211, -1.2329856157302856], + [-0.040291137993335724, 10.320676803588867], + [0.28826838731765747, 11.90920639038086], + [5.401103973388672, -1.2607765197753906], + [-0.1470162272453308, 9.337905883789062], + [0.16559827327728271, 10.132240295410156], + [6.085669994354248, 7.808226585388184], + [-5.852569580078125, -1.1081947088241577], + [2.771251678466797, -3.974342107772827], + [2.2887771129608154, -8.162454605102539], + [7.078785419464111, -2.5806546211242676], + [4.080395221710205, -2.8055903911590576], + [1.538610816001892, 5.88974142074585], + [2.4851903915405273, 0.5407446026802063], + [2.6221227645874023, 0.5231698751449585], + [4.645639419555664, -3.883796453475952], + [3.1243937015533447, -4.0568084716796875], + [7.1410746574401855, -5.431990623474121], + [-2.533578395843506, -0.3059771955013275], + [2.3252480030059814, 1.6978390216827393], + [2.5870132446289062, -3.713113784790039], + [8.746187210083008, -2.314534902572632], + [-5.064358711242676, 5.194812774658203], + [2.8744966983795166, -3.63309383392334], + [-3.1850695610046387, 5.39288330078125], + [-7.0670294761657715, -0.06476938724517822], + [2.9416027069091797, -3.554474115371704], + [-5.097123622894287, 4.429681777954102], + [6.522724628448486, 8.092933654785156], + [0.23617523908615112, 9.767844200134277], + [-4.537258625030518, -7.611788272857666], + [0.17766427993774414, 11.062788009643555], + [0.21675032377243042, 11.456985473632812], + [6.473964214324951, -2.7997331619262695], + [5.926539897918701, 7.561676979064941], + [9.856959342956543, -2.4202215671539307], + [-2.153587579727173, 2.6677935123443604], + [-4.521318435668945, -6.951074600219727], + [-6.980310916900635, 8.139190673828125], + [-5.448837757110596, 6.605917930603027], + [0.09286422282457352, -1.5787640810012817], + [-4.315201282501221, -6.673968315124512], + [-3.7936909198760986, 4.630886554718018], + [2.2844560146331787, 4.083168983459473], + [-5.456584453582764, -3.4021356105804443], + [-6.545718669891357, 6.865184783935547], + [2.9492125511169434, -7.459386348724365], + [0.029677443206310272, 10.07406997680664], + [-3.6121973991394043, 4.132194995880127], + [-3.6551358699798584, -5.989206314086914], + [0.04386060684919357, 12.077762603759766], + [5.080469131469727, 7.00482177734375], + [-3.1774399280548096, 5.15869665145874], + [2.5291717052459717, -4.581502914428711], + [9.225491523742676, -2.5158278942108154], + [-2.0431342124938965, 0.36400577425956726], + [3.31895112991333, 1.0519992113113403], + [0.09230517596006393, 12.207714080810547], + [-3.5294547080993652, -2.7767653465270996], + [-0.5676500201225281, -0.128038227558136], + [8.853515625, -2.360462188720703], + [2.056469678878784, 1.8745161294937134], + [-3.6572961807250977, 0.7878516316413879], + [8.197976112365723, -2.221261739730835], + [9.054532051086426, -2.446143865585327], + [-2.3611867427825928, -0.47419387102127075], + [0.19422006607055664, 10.602447509765625], + [4.434695243835449, 6.75108528137207], + [2.541977643966675, -7.403390884399414], + [0.23281651735305786, 10.476391792297363], + [7.472930431365967, -2.696218490600586], + [-4.746572017669678, -6.037233352661133], + [9.567666053771973, -2.4579007625579834], + [-5.8241424560546875, 5.471335411071777], + [1.131676435470581, 0.7452431321144104], + [4.28262186050415, 1.6478028297424316], + [-2.3492698669433594, 2.318004846572876], + [3.0009877681732178, -3.722338914871216], + [2.4853451251983643, -8.146978378295898], + [6.799004077911377, 8.20197582244873], + [-3.7805607318878174, 4.768282413482666], + [0.13923120498657227, 10.315691947937012], + [2.8832833766937256, -7.126935005187988], + [5.0895586013793945, -4.337587356567383], + [-1.8536036014556885, -2.903632402420044], + [0.22677522897720337, 10.958370208740234], + [-4.788360118865967, -7.318039417266846], + [6.901103973388672, -2.625333309173584], + [7.633038520812988, -2.5586299896240234], + [0.03741436451673508, 9.71712875366211], + [-5.877858638763428, -0.9280663132667542], + [-2.823870897293091, 4.232281684875488], + [3.31166934967041, -4.09389591217041], + [10.021244049072266, -2.4839329719543457], + [3.8767857551574707, -7.592302322387695], + [-2.388307571411133, 2.386939287185669], + [0.2549969553947449, 11.479466438293457], + [3.0327088832855225, -4.236798286437988], + [0.12568926811218262, 4.651207447052002], + [3.420177698135376, -8.152915000915527], + [3.80080509185791, -0.4668682813644409], + [-5.4567694664001465, 2.7184109687805176], + [-4.300290107727051, 5.213475227355957], + [-6.470297813415527, 7.924502372741699], + [3.2957804203033447, -5.000280380249023], + [-2.9792463779449463, 2.9050657749176025], + [-1.3514180183410645, 0.8098914623260498], + [-5.569820880889893, -1.7469482421875], + [3.0921852588653564, -4.32443380355835], + [-4.530111312866211, -6.86332893371582], + [0.6265062093734741, -5.671247482299805], + [-2.197622299194336, 0.7309319972991943], + [-1.1832659244537354, -3.9818320274353027], + [1.6622250080108643, -0.6792421340942383], + [3.1025352478027344, -4.263205528259277], + [-2.0212574005126953, 6.4911909103393555], + [-1.7424880266189575, -4.013520240783691], + [-3.53174090385437, -5.598229885101318], + [3.272862195968628, -4.65013313293457], + [-2.443979024887085, 1.8906947374343872], + [-2.1545751094818115, 3.03730845451355], + [0.20860546827316284, 10.499096870422363], + [-3.7831056118011475, -5.627687931060791], + [-0.4347442388534546, -2.618903875350952], + [7.1956915855407715, -2.243396520614624], + [-5.24194860458374, 4.5892229080200195], + [1.600661039352417, -8.374014854431152], + [-2.1364026069641113, 2.5737993717193604], + [-6.20130729675293, 2.294346809387207], + [-3.8408565521240234, -5.0304789543151855], + [3.568852424621582, -3.286952495574951], + [-0.39148658514022827, 8.635377883911133], + [-3.9000279903411865, 3.911482810974121], + [8.305739402770996, -2.23410964012146], + [-1.077651023864746, 9.468893051147461], + [1.3848447799682617, 2.1443734169006348], + [1.4997124671936035, -0.4414519667625427], + [-4.849278926849365, -6.496074199676514], + [-4.269411087036133, -1.2591997385025024], + [2.7683489322662354, -7.1047258377075195], + [11.6261568069458, -2.640345335006714], + [9.035470008850098, -2.38529896736145], + [6.949101448059082, -1.6947096586227417], + [-3.0189175605773926, 6.081716537475586], + [0.17966514825820923, 11.345781326293945], + [3.1076090335845947, -4.438884735107422], + [3.580822706222534, -3.270923376083374], + [3.056830644607544, -4.199910640716553], + [3.554154396057129, -6.828889846801758], + [2.7811107635498047, -3.940067768096924], + [-4.960494041442871, -0.06180352345108986], + [8.303261756896973, -2.2674596309661865], + [-1.4855254888534546, 1.5954421758651733], + [-2.4850094318389893, 2.095703125], + [-6.66021203994751, 7.526217460632324], + [-1.6377757787704468, 1.0411443710327148], + [3.202298402786255, -8.491583824157715], + [2.878215789794922, -6.84101676940918], + [-6.70683479309082, 5.643844127655029], + [6.354369163513184, -3.1713321208953857], + [1.6179308891296387, 5.544839859008789], + [3.1418063640594482, -4.470666408538818], + [6.884430408477783, 8.329883575439453], + [2.5599372386932373, -3.571840286254883], + [5.127592086791992, 7.48053503036499], + [-2.3644087314605713, 1.8485440015792847], + [-2.2852671146392822, -3.312018871307373], + [-0.32812944054603577, -1.4305006265640259], + [-2.5336532592773438, 1.658371090888977], + [-4.600916385650635, -6.56882381439209], + [3.220423460006714, -4.981521129608154], + [-4.382517337799072, -4.716348648071289], + [-0.4696173667907715, 0.006746288388967514], + [4.022347927093506, -8.512670516967773], + [-5.4433794021606445, 6.100905895233154], + [-2.432868719100952, 1.832448959350586], + [-3.5304133892059326, -5.304042816162109], + [-4.826226234436035, -3.3022234439849854], + [-4.084228038787842, 3.652880907058716], + [0.12454622238874435, 9.922316551208496], + [-2.1547651290893555, 2.4658541679382324], + [8.123644828796387, -2.132689952850342], + [-0.03764361888170242, 12.598901748657227], + [1.755845069885254, 0.030706580728292465], + [0.1627504825592041, 10.089729309082031], + [6.437232494354248, -1.2759695053100586], + [-2.310007333755493, 1.4740043878555298], + [8.381243705749512, -2.3272969722747803], + [3.372201681137085, -5.560151100158691], + [2.1730732917785645, -7.9438982009887695], + [2.971332311630249, -3.8506100177764893], + [-2.0092098712921143, 0.6089536547660828], + [-4.517330169677734, 7.19728946685791], + [4.331969261169434, -2.7406399250030518], + [-2.358761787414551, 1.6559815406799316], + [-2.5428218841552734, 1.8392574787139893], + [3.3673832416534424, -6.356651306152344], + [-5.795592784881592, 5.15647029876709], + [-1.9128884077072144, -2.896160840988159], + [1.1283843517303467, 0.1853151172399521], + [-2.9299826622009277, 7.053316116333008], + [9.199036598205566, -2.3169806003570557], + [-6.297321796417236, 2.2802891731262207], + [-4.08553409576416, -7.109035491943359], + [-2.295238733291626, 2.196150302886963], + [0.17425799369812012, 4.600265979766846], + [8.484503746032715, -2.4886257648468018], + [-3.527489185333252, -3.181074857711792], + [3.8967504501342773, 5.66934061050415], + [6.04683256149292, 7.475271224975586], + [2.516592025756836, 3.7031891345977783], + [2.9278666973114014, -8.555730819702148], + [3.7594985961914062, -3.649489641189575], + [6.531703948974609, 8.048547744750977], + [1.6725958585739136, -0.259697824716568], + [-5.906496524810791, 6.787505149841309], + [2.4043822288513184, 4.798825263977051], + [-7.701598167419434, -0.08211803436279297], + [-2.261439085006714, 2.3982295989990234], + [-4.060242176055908, -1.2461130619049072], + [0.18349534273147583, 10.70517349243164], + [-4.169373989105225, -6.423748970031738], + [-2.150087356567383, 2.5180535316467285], + [7.554588794708252, -2.8173153400421143], + [-3.910975694656372, 0.8454329967498779], + [3.803900718688965, -3.0848100185394287], + [10.11191463470459, -2.4388163089752197], + [9.127585411071777, -2.303591012954712], + [4.038519859313965, -4.11302375793457], + [-2.0679430961608887, -2.197195291519165], + [-4.784099578857422, -3.156318426132202], + [8.062024116516113, -2.4691593647003174], + [-2.183750629425049, 2.746654748916626], + [-3.6633074283599854, 3.701883316040039], + [3.5738871097564697, -5.5053534507751465], + [-0.13418811559677124, 13.499377250671387], + [-3.6111183166503906, 6.971927165985107], + [3.1732943058013916, -8.34833812713623], + [3.5524275302886963, -7.26487398147583], + [-2.0196943283081055, 2.5433926582336426], + [-3.9571497440338135, 4.071436882019043], + [7.768415451049805, -2.0462372303009033], + [-3.721283197402954, 4.947719573974609], + [-0.04802147299051285, 0.6775460839271545], + [1.8628041744232178, -6.699134826660156], + [-2.7114622592926025, 1.1226906776428223], + [5.689024448394775, -3.250091314315796], + [-2.6572775840759277, -2.109647274017334], + [-0.019754119217395782, 12.262384414672852], + [0.5552113652229309, 12.560132026672363], + [2.634369134902954, 0.7187397480010986], + [-2.259460687637329, -3.318554639816284], + [7.080495834350586, -2.4285497665405273], + [-3.913856267929077, -2.2898738384246826], + [0.4623035788536072, 1.5158653259277344], + [0.5239850878715515, -4.767405033111572], + [-4.664791584014893, 7.636845111846924], + [8.382689476013184, -2.21370530128479], + [0.050953321158885956, 12.160591125488281], + [7.602715015411377, -2.4045653343200684], + [-2.0340912342071533, 1.7028015851974487], + [-1.8960943222045898, 2.474149227142334], + [10.035935401916504, -2.451148271560669], + [3.797203302383423, 1.575042486190796], + [1.730393409729004, -8.44974136352539], + [4.591649055480957, -3.2356832027435303], + [-4.009057521820068, 5.725611686706543], + [6.243338108062744, -3.0478034019470215], + [1.5913835763931274, 4.2818121910095215], + [-0.04635185748338699, 12.620565414428711], + [-3.278191328048706, 6.0931501388549805], + [-6.947574615478516, 0.023856397718191147], + [-4.164529800415039, -3.6792023181915283], + [0.17259854078292847, 11.264135360717773], + [0.10770481079816818, 11.313173294067383], + [6.648282051086426, 8.381192207336426], + [-6.6655707359313965, 7.639933109283447], + [1.5673428773880005, 0.9578536748886108], + [4.417511940002441, -3.623981475830078], + [-1.2805877923965454, -3.9001948833465576], + [0.16491562128067017, 10.268474578857422], + [-0.5628378987312317, 1.566412329673767], + [3.48655104637146, -4.043494701385498], + [0.16878360509872437, 9.65919303894043], + [1.1410661935806274, 1.3894660472869873], + [4.541342735290527, -3.8362035751342773], + [4.882504940032959, 7.926413536071777], + [-2.677583932876587, -3.973681926727295], + [0.1936374306678772, 11.294565200805664], + [3.1765711307525635, 6.7507524490356445], + [3.137716293334961, -8.161555290222168], + [1.81113600730896, -7.57349157333374], + [-1.4055161476135254, 1.7516428232192993], + [3.6257898807525635, 1.2917486429214478], + [2.889744997024536, -6.065855503082275], + [3.1096949577331543, -4.027927398681641], + [5.9984612464904785, -2.671720504760742], + [-0.703402042388916, 5.865494728088379], + [2.678964376449585, 5.691897392272949], + [0.06359701603651047, 11.997194290161133], + [-2.146637439727783, -4.159186840057373], + [-3.0212149620056152, -4.146028995513916], + [5.008475303649902, -3.6436874866485596], + [-3.521239995956421, -1.2302051782608032], + [-5.073009014129639, 6.407817840576172], + [-3.66939640045166, 4.765789985656738], + [0.016145698726177216, 9.228582382202148], + [2.6658220291137695, -3.764521837234497], + [3.873225688934326, -3.1656227111816406], + [2.4342868328094482, -5.253721714019775], + [-5.804294109344482, -2.296203851699829], + [-6.540245056152344, 7.0344157218933105], + [6.883243083953857, -1.3722738027572632], + [-1.0056756734848022, -0.7595558166503906], + [5.942367076873779, -1.1657429933547974], + [6.4128499031066895, -3.1795003414154053], + [-5.044076919555664, -7.697939872741699], + [3.4204602241516113, -8.415441513061523], + [3.9195144176483154, -7.9954514503479], + [-4.499650955200195, -1.6169832944869995], + [2.31946063041687, -8.322159767150879], + [7.616978645324707, -2.288210391998291], + [7.50588846206665, -2.048483371734619], + [2.7593839168548584, -7.364271640777588], + [-3.72379994392395, 7.0945281982421875], + [0.21917980909347534, 10.85728931427002], + [3.2189621925354004, 6.520049095153809], + [-0.09321696311235428, 0.7652828693389893], + [3.1341660022735596, -4.034451484680176], + [7.7101006507873535, -2.160862922668457], + [2.419374704360962, -3.314527750015259], + [-4.782836437225342, 4.7992706298828125], + [2.32997727394104, 3.7384235858917236], + [-2.5663270950317383, 2.0970911979675293], + [2.6012461185455322, -3.758448600769043], + [4.482507705688477, -3.500103712081909], + [7.99738073348999, -2.5070860385894775], + [-0.5675085783004761, -1.4369449615478516], + [-2.7356250286102295, -0.8166624903678894], + [2.2989656925201416, -7.797497749328613], + [7.992885112762451, -2.217299222946167], + [-0.9298835396766663, -0.8019019961357117], + [2.6598098278045654, 1.3836528062820435], + [-4.867075443267822, 4.288168430328369], + [-0.8119168281555176, 1.8004037141799927], + [-4.519882678985596, -3.232053518295288], + [-4.3812575340271, 5.682304382324219], + [7.181153297424316, -1.7689555883407593], + [2.1725409030914307, 5.494468688964844], + [0.17926567792892456, 10.2977294921875], + [4.040876388549805, -3.630844831466675], + [3.172002077102661, 0.7363358736038208], + [-7.189352035522461, -0.5783500671386719], + [-2.1072704792022705, -0.9339238405227661], + [3.8741331100463867, -3.4159293174743652], + [0.48997288942337036, -0.9784756302833557], + [3.026731014251709, -2.8694040775299072], + [10.178678512573242, -2.6351099014282227], + [6.463470935821533, -2.48878812789917], + [-1.5156230926513672, 1.867326259613037], + [6.220925331115723, 7.788427352905273], + [2.192551851272583, -1.0506516695022583], + [9.31214714050293, -2.4268734455108643], + [1.033876895904541, 4.806869029998779], + [0.07314900308847427, -1.443708062171936], + [2.5860531330108643, 4.493812561035156], + [4.486563682556152, -3.6282105445861816], + [8.049840927124023, -2.521350622177124], + [2.2215869426727295, 6.1385884284973145], + [6.727880001068115, -2.6864564418792725], + [11.201157569885254, -2.55507493019104], + [7.585118770599365, -1.7687017917633057], + [-2.226653814315796, -1.055966854095459], + [2.723635196685791, -9.18600082397461], + [6.523454666137695, -1.8914586305618286], + [-5.923070430755615, 0.40607553720474243], + [-4.970364093780518, 6.2589030265808105], + [1.7642955780029297, -0.5316066741943359], + [-4.916785717010498, -3.6799564361572266], + [5.822874546051025, -1.2727940082550049], + [-0.09383077174425125, 15.428122520446777], + [7.258751392364502, -1.69414484500885], + [4.221839904785156, -3.869340658187866], + [0.9048747420310974, -5.937130928039551], + [5.859837532043457, -4.423862457275391], + [-2.3654136657714844, -3.514195203781128], + [-2.122910976409912, 2.4903666973114014], + [-5.898265838623047, 0.5351216197013855], + [8.332932472229004, -2.317963123321533], + [5.032108306884766, -1.2099194526672363], + [3.1489970684051514, -9.355779647827148], + [-0.10007006675004959, 13.973794937133789], + [4.55910587310791, -5.630849838256836], + [8.250960350036621, -2.1950948238372803], + [-3.4461307525634766, -5.133295059204102], + [-1.588524341583252, 4.061403751373291], + [3.1056129932403564, -4.390692234039307], + [3.0079457759857178, -3.9874391555786133], + [0.002264849841594696, 9.619422912597656], + [-1.1878167390823364, -4.126829624176025], + [-3.1182849407196045, -2.434326171875], + [2.535107374191284, 1.6691917181015015], + [-7.190207004547119, 0.05134999379515648], + [-4.2105631828308105, -1.9351472854614258], + [-4.165557384490967, 3.2990150451660156], + [-4.582169055938721, -4.502751350402832], + [9.144871711730957, -2.2514264583587646], + [-4.493278980255127, -7.0475263595581055], + [-2.1541051864624023, 1.9435970783233643], + [-0.0818222239613533, 14.112196922302246], + [7.376149654388428, -2.030334234237671], + [2.5280375480651855, 5.480776786804199], + [-3.2688639163970947, -5.559280872344971], + [8.217778205871582, -2.307716131210327], + [0.03565113991498947, 9.722827911376953], + [3.6329381465911865, -7.486306190490723], + [3.287639856338501, -4.968260765075684], + [-5.787421703338623, 5.221575736999512], + [-2.705747365951538, 6.145334243774414], + [4.6622819900512695, -4.009939193725586], + [-4.615514278411865, -6.796142578125], + [-7.178065776824951, 8.411250114440918], + [8.507384300231934, -2.324953317642212], + [2.4508583545684814, 5.296236038208008], + [3.8196818828582764, -6.4376444816589355], + [-6.068760871887207, -1.4397754669189453], + [7.460720062255859, -2.7025864124298096], + [-2.1934192180633545, 2.2276864051818848], + [4.6254682540893555, 1.9577845335006714], + [-6.152451038360596, 2.504448175430298], + [4.669325351715088, -3.8596553802490234], + [3.6851608753204346, 5.128934860229492], + [7.000499248504639, 8.421894073486328], + [-2.9626166820526123, 3.069643974304199], + [7.84106969833374, -2.392591953277588], + [8.267254829406738, -2.2080483436584473], + [0.21885031461715698, 10.954957008361816], + [-3.909269332885742, -4.072274208068848], + [3.2764313220977783, 6.464001655578613], + [6.990718364715576, 8.889383316040039], + [-1.868628978729248, 1.7088148593902588], + [2.4830117225646973, 0.18654540181159973], + [2.112539291381836, 0.4198397994041443], + [8.971488952636719, -2.302699327468872], + [-0.055935151875019073, 10.009315490722656], + [3.893721103668213, -8.37912368774414], + [-2.306627035140991, -3.0374224185943604], + [3.1766016483306885, -4.524934768676758], + [-3.7409493923187256, -0.7720078229904175], + [-5.282026290893555, -4.342584609985352], + [-1.9157978296279907, 2.376101493835449], + [7.48896598815918, -1.9846051931381226], + [-2.1198782920837402, 2.5206143856048584], + [-0.08724356442689896, 0.3173305094242096], + [-4.387701511383057, 8.100007057189941], + [0.2622305154800415, 11.378606796264648], + [3.654076337814331, -6.446885108947754], + [1.875446081161499, 5.321033954620361], + [-3.7264211177825928, -3.868037223815918], + [3.3070333003997803, -3.012025833129883], + [7.138304710388184, -1.69279944896698], + [-4.7422919273376465, -3.55329966545105], + [2.1970646381378174, -4.653888702392578], + [2.136831045150757, 5.457791328430176], + [-2.687579870223999, 1.8547435998916626], + [11.0743989944458, -2.4813501834869385], + [-0.03894997388124466, 12.587146759033203], + [-4.150058269500732, -3.6178019046783447], + [-1.894171118736267, 2.5911624431610107], + [6.0286993980407715, -1.230055809020996], + [-4.128148555755615, 6.050830841064453], + [5.82899284362793, 7.671772003173828], + [1.9107754230499268, 4.998622417449951], + [-2.1338629722595215, 2.6695396900177], + [1.9356188774108887, -0.9772199988365173], + [-0.0411575511097908, 13.996122360229492], + [-4.795444965362549, 0.06498199701309204], + [-4.210848331451416, 4.389268398284912], + [6.440933704376221, -1.4132493734359741], + [11.300840377807617, -2.599933385848999], + [-4.540492534637451, 3.8454439640045166], + [2.5126125812530518, 1.9791139364242554], + [-0.1594061255455017, 13.95016098022461], + [9.215255737304688, -2.3868813514709473], + [1.6183966398239136, -7.94507360458374], + [1.9714725017547607, -6.953755855560303], + [4.398540019989014, -3.8996872901916504], + [5.6043381690979, 7.298933029174805], + [2.116565465927124, -6.0317606925964355], + [3.420239210128784, -4.761086463928223], + [3.407404661178589, -8.223077774047852], + [-7.410823345184326, 0.13714563846588135], + [-2.533327102661133, 1.6590898036956787], + [-5.4389567375183105, 5.9326887130737305], + [0.12217681854963303, -1.5606892108917236], + [2.5873920917510986, 4.179035663604736], + [-0.5744569897651672, -2.051093816757202], + [3.1375386714935303, -4.003608226776123], + [3.5673599243164062, -5.805388450622559], + [7.8169097900390625, -2.3604326248168945], + [-6.141071319580078, 6.9128875732421875], + [0.8607794642448425, -1.3361212015151978], + [0.46628254652023315, 11.408451080322266], + [-4.73534631729126, -1.6465615034103394], + [0.18543893098831177, 11.718374252319336], + [2.5992848873138428, 0.4424183964729309], + [-4.368575096130371, 2.158571243286133], + [0.38320088386535645, -1.1056913137435913], + [-2.0474939346313477, 2.3673019409179688], + [8.364047050476074, -2.27323317527771], + [-6.818714618682861, 6.186622619628906], + [-2.0260157585144043, 2.5910956859588623], + [5.2930169105529785, -2.4069268703460693], + [-0.09547335654497147, 15.10086441040039], + [-0.9165064096450806, -3.2640724182128906], + [2.87800669670105, -5.210794448852539], + [2.16147780418396, -2.993504524230957], + [-5.360050201416016, 6.218695163726807], + [5.6712751388549805, -3.303774118423462], + [-1.0570920705795288, -3.5079662799835205], + [-2.826097249984741, -1.126038670539856], + [-4.59261417388916, -6.069216728210449], + [2.9648683071136475, -4.079998970031738], + [-4.545786380767822, -3.2597780227661133], + [2.6550488471984863, 4.3610992431640625], + [4.555582523345947, -7.447556495666504], + [0.14164555072784424, 12.191526412963867], + [-3.925999879837036, 7.941015720367432], + [-3.452565908432007, -4.677016258239746], + [-4.530441761016846, -6.560784339904785], + [2.548691749572754, -3.60144305229187], + [7.358269214630127, -1.6474275588989258], + [3.6526687145233154, -3.393486261367798], + [-5.01887845993042, -7.316574573516846], + [0.23870331048965454, 8.792984008789062], + [-4.58713960647583, 3.2764320373535156], + [-0.03171975165605545, 9.82672119140625], + [-2.6451122760772705, -1.9150428771972656], + [-5.676826000213623, 0.11066150665283203], + [9.44261360168457, -2.3374669551849365], + [-4.619934558868408, -7.792801856994629], + [11.197113990783691, -2.5980117321014404], + [-2.0775790214538574, 2.3282382488250732], + [-1.2029433250427246, 0.3512674570083618], + [-4.168933391571045, 4.051331043243408], + [-3.9041152000427246, 4.231748580932617], + [-2.5038211345672607, 1.997806191444397], + [7.521827697753906, -2.45552659034729], + [-0.18338894844055176, 4.020611763000488], + [4.916022777557373, 7.294218063354492], + [3.7369558811187744, -3.3573029041290283], + [7.3284220695495605, -2.6420414447784424], + [1.9297542572021484, 2.2194578647613525], + [-2.916098117828369, 2.8650424480438232], + [1.98221755027771, -6.114100933074951], + [2.499983549118042, 5.306873798370361], + [-1.8860957622528076, -3.5079472064971924], + [0.16883718967437744, 10.90462589263916], + [-4.326825141906738, -6.034745693206787], + [-6.005428791046143, 7.065160751342773], + [-0.7906084656715393, -2.6824791431427], + [3.3648533821105957, -4.911527633666992], + [0.13329854607582092, -1.0982615947723389], + [-3.5812737941741943, -0.5230748057365417], + [8.982377052307129, -2.3216123580932617], + [5.765890598297119, -2.018202066421509], + [-2.0372188091278076, 1.665894627571106], + [5.69946813583374, -2.5974080562591553], + [-1.3040424585342407, -1.2836319208145142], + [-2.6000847816467285, 1.7958295345306396], + [3.0303213596343994, 4.631763458251953], + [-0.0431869700551033, 12.489076614379883], + [3.531571388244629, -6.984328269958496], + [8.119280815124512, 9.519824028015137], + [2.3867712020874023, -7.573518753051758], + [-3.5426299571990967, -2.195685863494873], + [3.28288197517395, 0.10665766894817352], + [-3.7494404315948486, -5.821589946746826], + [-1.4754060506820679, -0.7922992706298828], + [-4.812048435211182, -3.885404586791992], + [8.555984497070312, -2.3341314792633057], + [1.7793248891830444, 4.033932209014893], + [-3.7289063930511475, -4.028436660766602], + [2.586552858352661, -9.442245483398438], + [-6.9572930335998535, 8.154142379760742], + [-4.527333736419678, -6.66987419128418], + [-2.0562074184417725, 2.3726987838745117], + [-5.23818826675415, -2.8126351833343506], + [-4.018317699432373, -5.523852825164795], + [7.768920421600342, -1.9127345085144043], + [-7.397751331329346, -0.03287482634186745], + [-4.196239948272705, -6.282479286193848], + [4.95560884475708, -3.1338441371917725], + [-2.2662463188171387, 2.9778389930725098], + [5.014116287231445, -5.516925811767578], + [-3.5683746337890625, -3.093573570251465], + [6.735098838806152, -1.5345791578292847], + [1.647477149963379, 2.161543607711792], + [4.578434467315674, 5.827237129211426], + [1.5315515995025635, 0.36646515130996704], + [-7.182626247406006, -2.2409276962280273], + [-0.4939020574092865, -2.195538282394409], + [-2.203106641769409, 1.5308353900909424], + [5.277624130249023, -0.9230223894119263], + [-0.7363780736923218, -1.3167840242385864], + [-2.043407440185547, 2.6017532348632812], + [2.821131944656372, -3.7756998538970947], + [2.237231492996216, 3.82037353515625], + [-4.419930934906006, 4.2913994789123535], + [6.837693691253662, -6.538372039794922], + [3.8275840282440186, -6.938255786895752], + [3.9747612476348877, -8.80218505859375], + [4.709981918334961, -3.6506450176239014], + [5.449412822723389, -3.378971815109253], + [2.529426336288452, -6.147149085998535], + [2.9216482639312744, -3.10170841217041], + [2.716961145401001, 0.4281311631202698], + [6.401347637176514, -2.850970506668091], + [-3.533529281616211, -2.5469725131988525], + [4.782929420471191, -2.3706157207489014], + [-6.483373165130615, -0.16070258617401123], + [3.462458372116089, -5.360095500946045], + [-5.282820224761963, -0.7576245069503784], + [-5.9064621925354, 7.0116071701049805], + [-2.626626968383789, 1.7338290214538574], + [2.761845827102661, -8.020890235900879], + [9.345069885253906, -2.367297887802124], + [-2.650022506713867, -5.19545841217041], + [2.0899722576141357, -8.391948699951172], + [0.009237565100193024, -1.6912683248519897], + [-7.587396144866943, 8.877999305725098], + [-4.3522629737854, -4.13252067565918], + [-6.098395347595215, 6.634180068969727], + [3.0781328678131104, -8.5013427734375], + [-6.260652542114258, 0.4423167109489441], + [-2.125539779663086, 2.0362539291381836], + [3.251472234725952, -4.688946723937988], + [1.125080943107605, 6.841601371765137], + [-1.1767669916152954, 1.639267921447754], + [-4.248950958251953, 4.827796936035156], + [-5.279998302459717, 5.207878112792969], + [2.9131672382354736, 5.916775703430176], + [-2.6809816360473633, 5.480084419250488], + [-4.057380676269531, -5.786046981811523], + [8.827116966247559, -2.3603951930999756], + [-4.643102169036865, 3.494245767593384], + [0.1267738938331604, 9.486074447631836], + [0.14053189754486084, 10.296992301940918], + [-4.138538837432861, -6.455876350402832], + [3.2099225521087646, -9.848419189453125], + [5.8837456703186035, -2.845048666000366], + [1.2357481718063354, 4.654374599456787], + [5.9389777183532715, -2.415499448776245], + [3.236614227294922, -4.200132369995117], + [7.084138870239258, -6.810613632202148], + [-2.5210330486297607, -3.555053234100342], + [1.8508704900741577, -0.38869792222976685], + [5.467906475067139, 7.903674125671387], + [2.5496459007263184, 5.636998176574707], + [0.12496756762266159, 9.943560600280762], + [-4.508040904998779, -7.090288162231445], + [-4.089087009429932, -6.751201629638672], + [3.8595993518829346, 5.342466354370117], + [3.6527655124664307, -3.296494245529175], + [0.22585421800613403, 10.820531845092773], + [-2.303758144378662, 2.1893370151519775], + [2.4638314247131348, -8.24376106262207], + [-2.236342668533325, 2.506885290145874], + [9.091816902160645, -2.3496997356414795], + [3.474220037460327, -2.03470516204834], + [1.9190528392791748, 0.06804855167865753], + [-2.4408586025238037, 1.65939199924469], + [-2.1589457988739014, 2.1934869289398193], + [-1.5345040559768677, 1.7925795316696167], + [3.1658055782318115, -2.9597930908203125], + [2.8047637939453125, 0.48441052436828613], + [1.9869697093963623, -6.957619667053223], + [4.820455074310303, -3.809648275375366], + [-5.242882251739502, -0.16672146320343018], + [7.6790385246276855, 9.176904678344727], + [0.21432149410247803, 10.187198638916016], + [3.891263246536255, -3.2200663089752197], + [3.1708123683929443, 6.531826972961426], + [-6.133956432342529, -0.672897458076477], + [-1.914783000946045, -0.3370611071586609], + [-4.282818794250488, -7.267284393310547], + [-6.1551289558410645, 0.6037222146987915], + [2.4411470890045166, 1.8608916997909546], + [8.799105644226074, -2.383013963699341], + [-3.3113644123077393, 5.578662872314453], + [-4.834956645965576, -6.77454948425293], + [3.2025439739227295, -3.6439342498779297], + [2.058318853378296, 4.836755752563477], + [3.2352852821350098, -4.28872013092041], + [-2.5052435398101807, 1.7287863492965698], + [3.7037270069122314, -3.386188268661499], + [-4.559931755065918, 6.399304389953613], + [5.430691242218018, 7.328880310058594], + [6.969874858856201, -1.5750508308410645], + [0.048169784247875214, 9.338386535644531], + [2.66266131401062, 1.459238886833191], + [2.4739720821380615, -1.8500490188598633], + [-3.87929630279541, -2.2292330265045166], + [-2.034331798553467, 1.78275728225708], + [-4.054535388946533, 3.6936094760894775], + [6.376257419586182, -1.0156947374343872], + [-4.164268970489502, -3.2396461963653564], + [5.162160396575928, -4.568857192993164], + [-0.7789513468742371, 0.7642629742622375], + [-2.4061481952667236, -4.2606201171875], + [-0.1725294589996338, -0.12145598232746124], + [3.4876530170440674, 1.0800014734268188], + [0.0806075856089592, 9.513736724853516], + [2.4348795413970947, -3.798213243484497], + [1.5948231220245361, -6.422544956207275], + [-6.320831775665283, 0.05745827779173851], + [2.0037221908569336, -7.278746604919434], + [9.589442253112793, -2.305004835128784], + [1.5328342914581299, -0.15549606084823608], + [0.036009810864925385, 1.6089805364608765], + [2.5426442623138428, -8.39211654663086], + [0.17032629251480103, 9.47226333618164], + [0.20938140153884888, 10.546892166137695], + [2.6738667488098145, 3.4278433322906494], + [1.8529374599456787, -3.4441077709198], + [5.3045501708984375, -6.872998237609863], + [-2.556426763534546, 1.8244327306747437], + [-2.3470780849456787, 2.2075726985931396], + [3.120668649673462, 2.2985990047454834], + [1.3938579559326172, -6.069938659667969], + [-1.726139783859253, -2.9745934009552], + [4.1183390617370605, -3.2590105533599854], + [1.3549611568450928, -6.2346906661987305], + [1.3005784749984741, -2.2626771926879883], + [7.993106365203857, -2.2209179401397705], + [3.3160555362701416, -3.7141244411468506], + [0.05566210299730301, -1.4343639612197876], + [4.214344024658203, 1.2157859802246094], + [8.601592063903809, -2.463951826095581], + [3.9292376041412354, -0.17176854610443115], + [-4.634418964385986, -7.054797172546387], + [5.019622325897217, -1.1263562440872192], + [-1.9049327373504639, 2.3810391426086426], + [0.02173810452222824, -3.5279905796051025], + [7.0374627113342285, -1.8553239107131958], + [7.942739009857178, -2.1557772159576416], + [8.225577354431152, -2.314401388168335], + [-4.221604347229004, 5.456489086151123], + [3.929946184158325, 1.630124568939209], + [-5.8210129737854, -0.03611517325043678], + [-4.787682056427002, 5.361859321594238], + [-0.10401538759469986, -1.4911264181137085], + [3.363255739212036, -3.8145859241485596], + [-2.090339422225952, 2.6168274879455566], + [2.1120104789733887, -6.42261266708374], + [-2.4454705715179443, 2.09784197807312], + [3.2407796382904053, -4.577728271484375], + [0.5795531868934631, -0.5772116184234619], + [8.200357437133789, -2.328706979751587], + [4.574092388153076, 7.077861309051514], + [-0.6813756823539734, -1.3846174478530884], + [-3.479250431060791, -5.644593715667725], + [-2.075566053390503, -4.598274230957031], + [-5.433897495269775, 7.679527282714844], + [-6.035111904144287, 2.0858945846557617], + [-5.031063079833984, -2.4196386337280273], + [-3.806536912918091, -5.804496765136719], + [-2.0933279991149902, -4.149369716644287], + [6.885246276855469, 8.625043869018555], + [-1.9182093143463135, 2.553313732147217], + [3.7301149368286133, -3.0844881534576416], + [-1.4386570453643799, -2.100870370864868], + [-3.43578839302063, -0.5634016990661621], + [0.06637903302907944, -1.5396125316619873], + [9.005829811096191, -2.415015697479248], + [2.6239497661590576, -4.765057563781738], + [-0.5541593432426453, -1.9572103023529053], + [6.371382236480713, -1.2996599674224854], + [-0.9919052720069885, -2.2849323749542236], + [-3.999450922012329, -6.064940452575684], + [-6.364784240722656, 8.518266677856445], + [3.800602436065674, -8.609752655029297], + [4.3212971687316895, -3.5236191749572754], + [6.77257776260376, -6.145382881164551], + [0.18359333276748657, 10.358766555786133], + [5.767578601837158, 7.5299482345581055], + [2.5954971313476562, 4.4899582862854], + [4.159371376037598, -3.396289348602295], + [6.418066501617432, 7.789377212524414], + [7.482827663421631, -2.6859323978424072], + [7.686127662658691, -2.4925601482391357], + [0.570137619972229, -1.3930562734603882], + [2.4301915168762207, 4.740365982055664], + [2.4742953777313232, 3.2002570629119873], + [3.3961052894592285, -3.2579829692840576], + [-4.993264675140381, -7.40940523147583], + [2.086904525756836, -7.847891807556152], + [-3.880250930786133, 4.192432403564453], + [0.2035316824913025, 10.612768173217773], + [-6.518184185028076, -2.151710033416748], + [-5.691281318664551, 6.338940143585205], + [-5.018186092376709, 5.662882328033447], + [2.424647331237793, 4.061468601226807], + [-7.444179058074951, 0.40102720260620117], + [2.6695773601531982, -3.785515308380127], + [8.387989044189453, -2.1680195331573486], + [-6.988800525665283, 8.269352912902832], + [2.3416426181793213, 3.8325698375701904], + [-4.569173336029053, -2.907241106033325], + [4.5262041091918945, 6.953668594360352], + [0.26174288988113403, 10.554458618164062], + [6.44492769241333, -2.046790599822998], + [-4.238008975982666, -3.812152624130249], + [-4.2962446212768555, -3.1541788578033447], + [-2.1479153633117676, 2.7032246589660645], + [2.5233211517333984, -9.144996643066406], + [3.1122584342956543, 4.519745349884033], + [-2.0495080947875977, 1.0140318870544434], + [-2.1958694458007812, 2.79304575920105], + [9.594252586364746, -2.3724887371063232], + [-6.460970401763916, -0.626514196395874], + [0.6697974801063538, 6.444450855255127], + [0.1074022576212883, 10.884721755981445], + [3.537059783935547, -1.8950246572494507], + [1.683088779449463, 2.150782823562622], + [0.9925714135169983, -6.01677131652832], + [3.8264076709747314, -5.006840705871582], + [-0.0091518834233284, 13.918600082397461], + [-4.411642551422119, -4.696149826049805], + [-5.118697643280029, 7.0185546875], + [2.2424662113189697, 5.095754623413086], + [-5.355559825897217, 5.568452835083008], + [3.2786145210266113, 1.0909446477890015], + [1.3884646892547607, 2.6995649337768555], + [2.9291608333587646, -9.34335708618164], + [0.2160232663154602, 10.780448913574219], + [2.017731189727783, 4.814485549926758], + [-4.75853157043457, -6.98945951461792], + [1.538898229598999, -0.17232483625411987], + [10.799744606018066, -2.531134843826294], + [3.208270311355591, 4.718906879425049], + [-6.489748954772949, -1.3552882671356201], + [-5.450562953948975, 1.7520641088485718], + [0.2214788794517517, 11.195755958557129], + [6.763818264007568, -1.6001291275024414], + [-2.356769561767578, 2.156684160232544], + [-2.045699119567871, 2.1731393337249756], + [-5.53401517868042, -3.952658176422119], + [5.818543910980225, -2.496596336364746], + [3.022595167160034, -4.12193489074707], + [8.262486457824707, -2.458021879196167], + [3.0056519508361816, -5.303720951080322], + [5.426705837249756, -1.9986668825149536], + [1.6549403667449951, 5.073710918426514], + [-4.835486888885498, -5.806795120239258], + [3.714651346206665, 5.684948921203613], + [-3.167051076889038, 5.061328887939453], + [0.005829460918903351, -1.5211081504821777], + [-5.5242767333984375, -1.4798630475997925], + [-1.457072138786316, -1.5901176929473877], + [7.873916149139404, -2.0726773738861084], + [4.012878894805908, -3.5383756160736084], + [-5.464730739593506, -3.266256809234619], + [2.5946078300476074, 0.5932133793830872], + [0.28770554065704346, 9.926197052001953], + [3.537264823913574, 0.35543742775917053], + [-2.2074732780456543, 2.5889945030212402], + [7.927056789398193, -2.0474917888641357], + [8.08241081237793, -2.2045929431915283], + [-5.367599010467529, 6.1694135665893555], + [-2.04837965965271, 2.0657010078430176], + [2.653141736984253, 0.9474875330924988], + [-2.9822351932525635, -3.9221906661987305], + [2.9803831577301025, -4.168145179748535], + [6.529299259185791, -4.326505184173584], + [9.050084114074707, -2.3708789348602295], + [-6.68557596206665, -0.6978975534439087], + [2.776184320449829, -7.260011672973633], + [6.674183368682861, 8.110898971557617], + [-5.231683731079102, -3.6770379543304443], + [2.7770869731903076, 7.192178726196289], + [-6.518910884857178, -0.771928608417511], + [-0.9320463538169861, -3.1839377880096436], + [2.0226080417633057, 1.03607177734375], + [8.591155052185059, -2.224391460418701], + [3.8004860877990723, -7.757505416870117], + [0.9129372239112854, -5.841845512390137], + [-1.8695995807647705, 2.4024577140808105], + [0.2417392134666443, 11.065923690795898], + [7.112008094787598, -2.3710410594940186], + [2.4121253490448, 3.819758176803589], + [2.930997610092163, -9.753348350524902], + [5.207730293273926, -1.0987229347229004], + [-4.65786600112915, -3.8942534923553467], + [5.327067852020264, -1.2410961389541626], + [2.826956033706665, 3.5243661403656006], + [0.4185558557510376, -1.1807438135147095], + [-1.6519345045089722, 2.4247615337371826], + [-2.0887539386749268, -2.8932788372039795], + [0.2421783208847046, 10.89708137512207], + [-4.616194248199463, -3.1263797283172607], + [-4.437918186187744, 4.031847953796387], + [7.4271416664123535, -1.7569314241409302], + [-2.241957426071167, 2.3927929401397705], + [-5.04352331161499, 3.8514866828918457], + [6.242265224456787, -1.5147643089294434], + [6.424417972564697, -1.2012571096420288], + [5.44287109375, -3.186379909515381], + [0.7435274124145508, -0.12760743498802185], + [2.7830114364624023, 4.319750785827637], + [-4.436918258666992, -6.290511608123779], + [0.520596444606781, 10.374778747558594], + [-3.2541353702545166, -2.6556994915008545], + [3.573338747024536, -7.280920028686523], + [5.594421863555908, -1.1864482164382935], + [4.379120826721191, -3.4318621158599854], + [4.887188911437988, 6.173920631408691], + [5.354231357574463, 7.039782524108887], + [0.05763261765241623, 9.221336364746094], + [7.21596097946167, 8.689619064331055], + [-2.2205493450164795, 2.1240060329437256], + [0.08114796131849289, 9.472259521484375], + [-5.1001877784729, -1.9471017122268677], + [0.054691605269908905, 12.186644554138184], + [-3.809195041656494, -6.417107582092285], + [0.297539621591568, -0.6292538046836853], + [8.17104721069336, -2.5625269412994385], + [-2.1964192390441895, 2.6121058464050293], + [10.280476570129395, -2.50901198387146], + [-2.0958423614501953, -0.2504933476448059], + [-3.8015236854553223, -6.658015727996826], + [2.7036020755767822, -9.232982635498047], + [2.439162015914917, 3.870802640914917], + [4.686624050140381, 7.524412631988525], + [-4.667900562286377, -2.5653252601623535], + [2.479132890701294, -7.643558502197266], + [4.511092662811279, 6.767719268798828], + [-1.841526746749878, -3.7427661418914795], + [2.1945042610168457, 4.754428863525391], + [0.18260353803634644, 11.025504112243652], + [2.7223870754241943, 3.188425302505493], + [0.2719343304634094, 11.386594772338867], + [5.766672611236572, -2.615551710128784], + [3.344484329223633, 5.003203392028809], + [-0.020604975521564484, 11.385956764221191], + [4.0855536460876465, -3.106442451477051], + [5.4878315925598145, -2.769226312637329], + [3.3891518115997314, -4.828104019165039], + [-2.132272481918335, 1.5918357372283936], + [-4.963104248046875, 6.072601795196533], + [-3.5872743129730225, -5.511767387390137], + [2.5822365283966064, 6.611661434173584], + [7.5078959465026855, 8.874191284179688], + [8.158978462219238, -2.3005197048187256], + [-4.132970333099365, -2.173311948776245], + [3.220299482345581, 0.9765605926513672], + [-4.512893199920654, -0.25204968452453613], + [-1.3658145666122437, 1.950744390487671], + [0.930420458316803, -6.949060440063477], + [0.2113882303237915, 10.45767593383789], + [1.9788281917572021, -6.174738883972168], + [-7.585380554199219, -0.8315877914428711], + [0.07094448059797287, 10.819416999816895], + [4.2208404541015625, -7.725428104400635], + [7.545567989349365, 9.010383605957031], + [1.3546125888824463, 0.27590882778167725], + [-2.5312674045562744, 1.832370638847351], + [-2.526690721511841, 1.8488210439682007], + [7.2853779792785645, -2.370920419692993], + [5.881916522979736, -5.260410785675049], + [-3.711655616760254, -6.154921531677246], + [-1.9186246395111084, 2.500826358795166], + [-2.2148375511169434, 2.2789993286132812], + [0.4884597659111023, -1.0626260042190552], + [1.0352795124053955, -6.660109996795654], + [-0.9906818866729736, -1.6574641466140747], + [-3.7227602005004883, -2.549140691757202], + [-2.136120319366455, 2.37896728515625], + [9.201338768005371, -2.367493152618408], + [-1.9572585821151733, 1.6688090562820435], + [3.0660207271575928, -5.187821865081787], + [-2.718992233276367, -1.6192069053649902], + [-4.054470539093018, -2.5723772048950195], + [2.7652924060821533, -3.3405091762542725], + [-0.1681855320930481, -2.1576802730560303], + [6.64739990234375, -2.0769569873809814], + [-5.165354251861572, -0.22977662086486816], + [-2.5761795043945312, 1.6097804307937622], + [-3.2882883548736572, 2.6176090240478516], + [-2.568713903427124, 0.9369490146636963], + [-3.3024544715881348, 3.9776413440704346], + [8.266266822814941, -2.3250224590301514], + [3.4767508506774902, -4.798110008239746], + [1.5429134368896484, -7.117746353149414], + [-8.019569396972656, 0.012949701398611069], + [-5.758482933044434, 7.189691543579102], + [0.1195947453379631, 9.406792640686035], + [2.312676191329956, -6.384543418884277], + [3.3527512550354004, -4.999611854553223], + [-4.562021732330322, 4.676983833312988], + [-3.7594258785247803, 8.346099853515625], + [8.032917022705078, -2.1941378116607666], + [-0.14945381879806519, 9.132735252380371], + [7.276640892028809, -1.8753657341003418], + [-5.213324069976807, 6.148298263549805], + [6.414539813995361, -1.714370608329773], + [1.3573741912841797, 1.1678420305252075], + [8.0354585647583, -2.201467275619507], + [5.729324817657471, 7.463119029998779], + [-3.7260420322418213, -4.997272491455078], + [2.195852756500244, -7.5523295402526855], + [9.725091934204102, -2.442075490951538], + [-2.7809245586395264, -0.21741604804992676], + [9.327265739440918, -2.365320920944214], + [0.3026077151298523, 10.97942066192627], + [1.3007478713989258, -6.369110107421875], + [0.052640192210674286, 9.881864547729492], + [10.071844100952148, -2.4985480308532715], + [4.0654072761535645, -7.796113967895508], + [2.496581554412842, 0.9083170294761658], + [-2.234579563140869, 0.9622324705123901], + [3.2439229488372803, 1.3843073844909668], + [-3.144789218902588, -2.9730637073516846], + [2.89809250831604, -3.6848506927490234], + [-2.9592983722686768, 4.632105350494385], + [-3.3362205028533936, -2.8874499797821045], + [0.2996520400047302, 11.377921104431152], + [4.909307956695557, 7.414381504058838], + [3.676429033279419, -2.8609626293182373], + [1.741563320159912, -6.546993255615234], + [-2.4520957469940186, 2.2153966426849365], + [-2.2560908794403076, 2.4701786041259766], + [9.001482963562012, -2.355433702468872], + [8.65062427520752, -2.352447748184204], + [-4.49744176864624, 5.2072014808654785], + [-4.105050563812256, -6.100905418395996], + [-3.8805606365203857, 5.350308418273926], + [7.932845592498779, -2.141136407852173], + [7.7866291999816895, -2.2927896976470947], + [-2.7075722217559814, -3.5136008262634277], + [2.4243834018707275, -7.595156192779541], + [2.305297374725342, -7.006450176239014], + [6.625064373016357, 8.059653282165527], + [-3.440824508666992, 5.43635368347168], + [-3.5659806728363037, -2.4754366874694824], + [2.4704878330230713, -8.673948287963867], + [1.787761926651001, -6.634174346923828], + [8.245469093322754, -2.2385122776031494], + [7.018056869506836, -2.787572145462036], + [-1.2030751705169678, 1.955182433128357], + [9.738414764404297, -2.451861619949341], + [2.83144211769104, -8.9625244140625], + [-1.8104417324066162, 2.1896917819976807], + [-3.426203489303589, 5.410787582397461], + [-5.8851189613342285, 7.576343536376953], + [-2.4195621013641357, 1.834832787513733], + [-6.893327236175537, 8.037134170532227], + [5.335421562194824, -3.3870179653167725], + [0.23731514811515808, -2.126983404159546], + [9.735644340515137, -2.3483197689056396], + [-4.914064407348633, -2.3754820823669434], + [-7.917346477508545, 4.3570756912231445], + [0.5371618866920471, -1.060270071029663], + [0.08744745701551437, 12.765473365783691], + [-5.279019832611084, 6.002111911773682], + [5.768025875091553, -3.200793981552124], + [0.3964306116104126, -4.593043327331543], + [-1.5059864521026611, -3.050779104232788], + [0.16297513246536255, 11.61813735961914], + [2.434648275375366, -3.217120885848999], + [-2.0198850631713867, 1.640990138053894], + [9.026094436645508, -2.407291889190674], + [6.551024913787842, -1.4655665159225464], + [-1.95090651512146, 2.525580883026123], + [-5.0075764656066895, -2.573654890060425], + [-4.26734733581543, -6.260598659515381], + [-2.380876302719116, -4.787881851196289], + [-2.969938039779663, 1.0209015607833862], + [0.07266014069318771, 10.1495361328125], + [0.3244335651397705, -0.1756991744041443], + [-4.3236403465271, -6.747262954711914], + [-6.917364597320557, 8.146960258483887], + [-5.673004627227783, -0.3931996822357178], + [-2.888967752456665, -5.26766300201416], + [9.67585563659668, -2.5541329383850098], + [4.672185897827148, -4.063862323760986], + [-3.611246347427368, -4.84309196472168], + [4.789761066436768, 7.041293144226074], + [0.2548791766166687, 5.213537693023682], + [2.7450358867645264, -7.1005940437316895], + [-2.9721662998199463, -2.428299903869629], + [9.123364448547363, -2.4051806926727295], + [-7.413394451141357, 8.384352684020996], + [4.436794281005859, 5.9631242752075195], + [-4.959131240844727, 6.450201988220215], + [3.6232411861419678, -1.3256975412368774], + [-5.701114177703857, 0.03996574506163597], + [-4.513708591461182, 7.308632850646973], + [-4.574903964996338, 5.216961860656738], + [1.5664054155349731, -0.165984109044075], + [3.3173537254333496, -6.907392501831055], + [3.0435631275177, 1.0661190748214722], + [-4.8887858390808105, -1.7816680669784546], + [8.446969032287598, -2.172891855239868], + [-5.391149997711182, 0.3369064927101135], + [0.72150719165802, -5.62519645690918], + [3.233931064605713, -3.7469217777252197], + [1.946460485458374, 5.166672229766846], + [1.9927494525909424, -5.451077461242676], + [4.360752105712891, -5.500814437866211], + [-3.7834737300872803, 5.18226957321167], + [5.39423131942749, 6.886074066162109], + [0.020183078944683075, 11.504125595092773], + [3.9832193851470947, -3.7642550468444824], + [6.007659435272217, 7.7213134765625], + [3.2937707901000977, -8.780719757080078], + [0.03605120629072189, 12.240355491638184], + [2.4547886848449707, 3.828977108001709], + [-2.059114933013916, 2.480670213699341], + [2.4018428325653076, -3.6119132041931152], + [0.1972694993019104, 11.192643165588379], + [-0.0035089924931526184, 12.034303665161133], + [2.7615091800689697, -8.035758972167969], + [-1.0127990245819092, 1.9745033979415894], + [-5.3670549392700195, -0.8797842264175415], + [-2.9915506839752197, 4.457974433898926], + [3.59726619720459, 0.8144878149032593], + [2.878826379776001, -7.161649703979492], + [5.640858173370361, 7.292692184448242], + [-5.939863681793213, -1.7776046991348267], + [-0.8165744543075562, 1.6168910264968872], + [-4.145263195037842, -2.8668577671051025], + [4.2865471839904785, 1.7972958087921143], + [6.803586006164551, 8.230100631713867], + [3.6811325550079346, 5.219780921936035], + [-3.6093204021453857, 5.5420122146606445], + [8.043852806091309, -2.544189214706421], + [2.4893782138824463, -8.685220718383789], + [-1.652425765991211, -2.3310999870300293], + [-4.290647983551025, 3.558262348175049], + [-3.7808005809783936, -6.468139171600342], + [4.320252418518066, 6.201504230499268], + [-2.539618968963623, 1.4837592840194702], + [5.837229251861572, -1.449402093887329], + [1.9216179847717285, -7.911101341247559], + [-5.105098247528076, -3.038869619369507], + [5.276578426361084, 7.065581321716309], + [7.822917461395264, -2.5861217975616455], + [3.1048524379730225, 0.9916063547134399], + [0.25518059730529785, 11.121703147888184], + [1.897648811340332, -8.121417045593262], + [4.851191520690918, -3.6348655223846436], + [-2.470412254333496, -4.660982131958008], + [-0.4527820944786072, -1.3162157535552979], + [-0.02316463738679886, 12.821134567260742], + [2.8092033863067627, -10.100656509399414], + [-3.6672041416168213, -3.140597105026245], + [-0.05511397868394852, 13.546459197998047], + [3.8379905223846436, 1.4941658973693848], + [1.5511754751205444, -7.387863636016846], + [-1.5330334901809692, 1.7266119718551636], + [-1.681165337562561, -0.6056568026542664], + [9.596181869506836, -2.4323108196258545], + [-2.3285882472991943, 1.4813311100006104], + [0.9615550637245178, 1.703713059425354], + [-0.03366083651781082, 10.018647193908691], + [8.851566314697266, -2.2400476932525635], + [0.008072666823863983, 11.802617073059082], + [-2.148773670196533, -0.7330096960067749], + [-4.439795970916748, 4.203693866729736], + [-2.1224067211151123, 1.9284582138061523], + [3.2724006175994873, -8.706357955932617], + [-0.8762090802192688, 0.3565135896205902], + [3.6055054664611816, 1.1140614748001099], + [-0.6854124069213867, 1.4796284437179565], + [-2.495095729827881, 1.609387755393982], + [-2.0421438217163086, 1.6798632144927979], + [3.379971981048584, -6.256782054901123], + [-2.1901745796203613, 2.1609153747558594], + [4.786500930786133, 7.028866767883301], + [-4.061041355133057, 4.701259613037109], + [10.712897300720215, -2.523806095123291], + [-1.1107585430145264, -1.080623745918274], + [2.101823091506958, 4.1730217933654785], + [8.92667007446289, -2.362696409225464], + [0.12319283932447433, 12.216397285461426], + [0.04579954594373703, 12.166642189025879], + [-4.734259128570557, -3.6648736000061035], + [6.418056964874268, 7.832993507385254], + [-4.319161415100098, -6.260341644287109], + [7.411489963531494, 8.814599990844727], + [2.9682493209838867, -4.215842247009277], + [-2.094892978668213, 2.602544069290161], + [-3.398230791091919, -5.6720147132873535], + [3.2253713607788086, 6.410077095031738], + [-2.291409730911255, 2.3186068534851074], + [1.5879402160644531, 2.4280545711517334], + [5.544199466705322, -2.2055580615997314], + [3.734746217727661, 5.449123382568359], + [7.125386714935303, -1.8900645971298218], + [0.2450581192970276, 11.363916397094727], + [2.7794833183288574, -7.772483825683594], + [-3.891028881072998, -1.7736084461212158], + [-3.216008424758911, 7.540426254272461], + [2.7503678798675537, 3.551713228225708], + [6.996297359466553, 8.425849914550781], + [-4.448476314544678, -6.613754749298096], + [7.466602325439453, 8.877768516540527], + [-3.9511659145355225, -2.9183552265167236], + [0.19997793436050415, 9.948966979980469], + [-3.3482143878936768, 0.8437508940696716], + [-3.7607710361480713, 3.096025228500366], + [-5.460081577301025, 6.41860294342041], + [5.041027545928955, 7.061190128326416], + [6.4396796226501465, 8.46403694152832], + [-3.2448151111602783, -0.6812037229537964], + [0.28547537326812744, 10.687601089477539], + [6.7564377784729, -5.2348127365112305], + [8.618073463439941, -2.3244147300720215], + [-5.4665398597717285, -0.1608615517616272], + [-3.741208553314209, 5.065304279327393], + [5.885056972503662, -4.797242641448975], + [-2.496770143508911, 4.143115043640137], + [-0.030936069786548615, 12.996488571166992], + [0.29718977212905884, 0.6216802597045898], + [2.938288450241089, -2.8082852363586426], + [-2.962677240371704, -2.514493703842163], + [1.9908990859985352, 2.0898597240448], + [-3.3863437175750732, -3.7338368892669678], + [-3.186648368835449, -1.696337342262268], + [0.003969185054302216, 9.949460983276367], + [-2.2163641452789307, 2.3264548778533936], + [-2.059946298599243, 2.3021678924560547], + [-0.017329759895801544, 12.585710525512695], + [2.915494680404663, -9.70902156829834], + [-2.604262590408325, -3.8918917179107666], + [-1.7200847864151, 1.1897584199905396], + [-2.805304765701294, 3.3235747814178467], + [-3.3439643383026123, -2.5185136795043945], + [0.7867644429206848, 9.657035827636719], + [3.9827539920806885, 6.79636812210083], + [-4.280479431152344, -6.305477142333984], + [1.6823372840881348, -3.6354668140411377], + [-3.724635362625122, -6.168825149536133], + [3.945798635482788, 5.31942081451416], + [0.18407946825027466, 10.578962326049805], + [-0.009680457413196564, 12.089520454406738], + [-0.03252644091844559, 9.058134078979492], + [1.5742835998535156, 2.938459634780884], + [-2.3249216079711914, 2.0659048557281494], + [0.2919815182685852, 10.349998474121094], + [3.2730722427368164, -3.6906840801239014], + [4.113168239593506, -3.771893262863159], + [-7.369686603546143, 0.7377200126647949], + [-2.5596916675567627, -3.4342880249023438], + [1.5024662017822266, 7.530425071716309], + [-1.3180707693099976, 1.9553335905075073], + [-1.5942109823226929, -3.0706403255462646], + [-2.7242250442504883, -3.2016117572784424], + [2.896793842315674, -9.486005783081055], + [2.8618619441986084, -6.700776100158691], + [1.459364652633667, 3.8950889110565186], + [-4.6995038986206055, -0.4713163375854492], + [-5.050173282623291, -6.395282745361328], + [-1.6326220035552979, -1.4240071773529053], + [-2.531642198562622, 2.4572932720184326], + [5.669787883758545, -1.1197965145111084], + [-4.473576545715332, -5.790935039520264], + [-4.443075180053711, 4.404057025909424], + [3.3370420932769775, -7.150691986083984], + [0.01057916134595871, 12.437057495117188], + [-4.982357978820801, -2.1081130504608154], + [0.24618852138519287, 9.843687057495117], + [5.603909015655518, -1.192574143409729], + [-2.4483940601348877, -5.308672904968262], + [-2.602264881134033, -4.629335880279541], + [-5.19663667678833, -2.1654765605926514], + [3.149596691131592, -4.330607891082764], + [-1.7944800853729248, -3.7829999923706055], + [2.9143893718719482, 4.714241027832031], + [-2.2989327907562256, 1.493247628211975], + [-3.487844228744507, -4.990230560302734], + [-4.352895259857178, 5.397590637207031], + [2.4931857585906982, -7.673540115356445], + [8.839492797851562, -2.4961676597595215], + [-4.601267337799072, -4.675991058349609], + [1.4817638397216797, -7.616488456726074], + [-4.651695728302002, -6.923360824584961], + [0.18156033754348755, 10.305550575256348], + [-5.361542224884033, 5.913083076477051], + [7.1138739585876465, 8.4965238571167], + [3.8535637855529785, -6.163346290588379], + [1.022966980934143, -0.9689078330993652], + [8.805449485778809, -2.3426597118377686], + [-1.0459376573562622, 0.552381157875061], + [-2.3844330310821533, 2.035938024520874], + [-2.5916693210601807, -4.199943542480469], + [-1.6345200538635254, -0.8574420809745789], + [6.574735641479492, -1.782511830329895], + [0.2502247393131256, 0.6713125109672546], + [2.413006544113159, -7.833270072937012], + [0.043036870658397675, 9.61023235321045], + [0.23957425355911255, 11.205574035644531], + [8.753678321838379, -2.2845447063446045], + [-3.047454595565796, -1.0064053535461426], + [-1.3580825328826904, 1.3958855867385864], + [3.3057284355163574, -4.705793857574463], + [-6.107327938079834, -2.098273515701294], + [-2.485020875930786, 1.517369031906128], + [1.7807514667510986, -8.22918701171875], + [3.0954174995422363, 0.5791733264923096], + [-4.225783348083496, -3.2148587703704834], + [-4.3645524978637695, 4.0113983154296875], + [3.8836348056793213, -2.8982622623443604], + [-6.621073246002197, -0.07069098949432373], + [7.910319805145264, -2.200157880783081], + [3.4975173473358154, -3.841801643371582], + [8.698832511901855, -2.2981793880462646], + [-5.271166801452637, 2.5929582118988037], + [-4.213479995727539, 3.6270511150360107], + [-4.055697441101074, -6.0937700271606445], + [-4.341916561126709, -6.688886642456055], + [3.420194149017334, -4.4793596267700195], + [0.08418374508619308, 10.475990295410156], + [-1.1550074815750122, -0.09078294038772583], + [6.778104305267334, -1.4805659055709839], + [7.82462739944458, -2.524563789367676], + [6.713703632354736, 8.095476150512695], + [5.2798848152160645, -2.7332570552825928], + [-1.9181489944458008, -4.571230411529541], + [0.11918454617261887, 11.869165420532227], + [-2.2202975749969482, 0.5319511890411377], + [-7.1361083984375, -0.1904219388961792], + [8.264241218566895, -2.3306267261505127], + [-3.688396692276001, -3.258141279220581], + [-5.313331127166748, -0.7644410729408264], + [-1.7698532342910767, 2.0722568035125732], + [-0.07194875925779343, -1.4749925136566162], + [-1.5114941596984863, -2.7760894298553467], + [4.1330037117004395, 6.717917442321777], + [-4.967644691467285, -3.6227242946624756], + [1.0319774150848389, 7.408344268798828], + [-5.233660697937012, 5.307683944702148], + [3.00990891456604, -3.707414150238037], + [-4.929609298706055, -5.938302993774414], + [6.006863117218018, -1.2362216711044312], + [-4.878630638122559, 4.814483165740967], + [3.2071268558502197, -4.395083904266357], + [8.757144927978516, -2.4296188354492188], + [1.5418752431869507, -1.8195983171463013], + [0.95542973279953, 10.897388458251953], + [0.20796585083007812, 10.450277328491211], + [-2.3261919021606445, 2.3710122108459473], + [1.857130527496338, 5.303454875946045], + [-0.15443193912506104, 8.96540355682373], + [4.824258327484131, -3.376124620437622], + [-2.7916181087493896, -3.0448005199432373], + [3.591468572616577, -8.228799819946289], + [-5.734335422515869, -4.155755043029785], + [2.740845203399658, 1.3082808256149292], + [-4.625087261199951, 4.000616073608398], + [0.3424833416938782, -1.3370455503463745], + [0.18749934434890747, -1.3050962686538696], + [-4.743956089019775, -2.258087396621704], + [-4.866154193878174, 5.456629753112793], + [3.0236823558807373, -4.2841901779174805], + [-2.7517311573028564, -0.6428768634796143], + [0.08298587054014206, 13.247272491455078], + [-4.910995960235596, -2.3088319301605225], + [4.840867042541504, -3.483733654022217], + [-6.715701580047607, 8.698575973510742], + [-2.255868434906006, 2.3351166248321533], + [6.310446739196777, -5.6363935470581055], + [0.17318135499954224, 11.104849815368652], + [-2.5782129764556885, -3.091435670852661], + [3.0591306686401367, -4.353630065917969], + [4.296550750732422, 6.798175811767578], + [-2.3089518547058105, 1.004871129989624], + [-2.2080695629119873, 1.9276930093765259], + [2.226238965988159, 3.0358245372772217], + [-0.023716159164905548, 12.690693855285645], + [1.8226237297058105, 4.950687885284424], + [4.326879024505615, -3.903620958328247], + [0.21403056383132935, 11.585866928100586], + [0.5166561603546143, 10.53221321105957], + [2.6350204944610596, 6.220726013183594], + [0.4585946202278137, -0.6782943606376648], + [-6.970845699310303, 8.202338218688965], + [2.9445626735687256, -4.023371696472168], + [8.719475746154785, -2.4180424213409424], + [0.003017507493495941, -1.474453330039978], + [1.245794415473938, -6.599134922027588], + [-2.7493085861206055, 1.8904998302459717], + [-4.506372451782227, -2.270090103149414], + [8.047337532043457, -2.488600969314575], + [-4.973802089691162, 6.026262283325195], + [5.889270305633545, -1.2128962278366089], + [-1.719503402709961, 0.8442072868347168], + [-4.128106594085693, -6.176407814025879], + [-4.677229404449463, -3.6367859840393066], + [-6.8826375007629395, -1.087735891342163], + [2.4544107913970947, 4.527535915374756], + [2.623544454574585, -3.6717355251312256], + [0.036270253360271454, 9.853370666503906], + [-0.03289789706468582, 9.789911270141602], + [-2.952702045440674, 0.2193405032157898], + [3.2387142181396484, -2.4037628173828125], + [10.324395179748535, -2.479434013366699], + [3.1254360675811768, -6.826053142547607], + [-3.9509077072143555, -5.484653472900391], + [-2.0235683917999268, 6.74581241607666], + [-5.796411991119385, 0.4542367458343506], + [3.2860634326934814, 1.9681981801986694], + [-4.642171382904053, -3.6308159828186035], + [2.3341116905212402, 0.34781020879745483], + [0.055204443633556366, 12.621936798095703], + [-4.642490863800049, -2.882899045944214], + [-2.691878080368042, -1.0670545101165771], + [5.802598476409912, 7.586003303527832], + [-5.136075019836426, -2.5075414180755615], + [-1.503767728805542, 1.8447085618972778], + [0.1597849726676941, -0.1741129606962204], + [2.5233070850372314, 1.5872431993484497], + [8.468282699584961, 9.857996940612793], + [5.473328590393066, -0.8657493591308594], + [-1.7916475534439087, 1.0387450456619263], + [-5.033004283905029, 7.251069068908691], + [4.231315612792969, -4.424436569213867], + [-4.428852558135986, -1.0998830795288086], + [4.061493396759033, -3.555835723876953], + [3.349344253540039, -8.25084400177002], + [-4.851036071777344, 8.106971740722656], + [2.8774216175079346, -4.054146766662598], + [-6.300269603729248, 7.285768985748291], + [0.25467634201049805, -3.7455828189849854], + [3.3832809925079346, -4.163145065307617], + [-2.4556660652160645, -1.5688830614089966], + [6.415136337280273, -2.2981932163238525], + [1.829242467880249, 1.502455711364746], + [3.5741283893585205, -8.885589599609375], + [2.890449047088623, -4.033112049102783], + [-5.069045543670654, -5.790944576263428], + [-0.45071977376937866, -0.8978025317192078], + [-2.5648181438446045, 1.849311113357544], + [-7.030794620513916, -0.038115981966257095], + [3.6201295852661133, 1.3490455150604248], + [-2.2330970764160156, 2.944110631942749], + [0.09581642597913742, 10.141557693481445], + [5.429042816162109, -1.6893872022628784], + [9.42640209197998, -2.4013919830322266], + [-1.9039878845214844, 1.9186497926712036], + [4.397686004638672, -3.447133779525757], + [-1.3043746948242188, 1.5461305379867554], + [2.885608434677124, 1.3317095041275024], + [-0.8907608389854431, -2.503086805343628], + [3.126474142074585, -6.6754231452941895], + [8.880158424377441, -2.306436538696289], + [-4.820572853088379, 5.280158042907715], + [0.11014043539762497, 9.925305366516113], + [1.8334128856658936, -7.984272480010986], + [3.3296926021575928, -9.262208938598633], + [3.93794846534729, 6.610821723937988], + [-5.503279209136963, -2.560180902481079], + [-2.2455992698669434, 2.2533035278320312], + [-3.913630485534668, -2.936711549758911], + [6.0255045890808105, -2.3953053951263428], + [-1.9131039381027222, 2.3777525424957275], + [2.9304471015930176, -5.750120639801025], + [-4.980992794036865, 4.033577919006348], + [2.6502277851104736, 1.4158726930618286], + [-4.515008449554443, 4.152626037597656], + [-5.317048072814941, -0.39125216007232666], + [-3.509037971496582, 5.435113430023193], + [7.120710849761963, -5.164706707000732], + [11.509005546569824, -2.640718936920166], + [-2.0994389057159424, 2.536951780319214], + [-2.2372970581054688, 0.9759708642959595], + [-2.1051719188690186, 1.8720314502716064], + [6.495099067687988, -1.6692918539047241], + [1.5783754587173462, -7.475744247436523], + [7.739307403564453, -2.0273406505584717], + [-4.276144027709961, -5.533046722412109], + [1.9480855464935303, 5.0926513671875], + [-2.8338263034820557, -5.555459022521973], + [9.26962947845459, -2.322699785232544], + [-5.155847549438477, -0.3303593397140503], + [2.928236246109009, -2.7159130573272705], + [-0.06818164139986038, 10.690113067626953], + [7.653717041015625, -2.0107860565185547], + [1.0861680507659912, -4.709107875823975], + [2.644249439239502, 0.770244300365448], + [5.154454708099365, 6.729969024658203], + [3.270799398422241, -5.7752203941345215], + [-4.74291467666626, 5.851687431335449], + [9.511157989501953, -2.473318338394165], + [3.6925504207611084, -3.3231213092803955], + [1.640566349029541, -7.6922407150268555], + [-4.471127033233643, 4.62615966796875], + [-1.9253867864608765, 2.273361921310425], + [2.353355884552002, -5.846027851104736], + [3.556821823120117, -3.249028444290161], + [-5.125584125518799, -3.7461369037628174], + [7.012145519256592, -3.2274014949798584], + [6.958487033843994, -2.0767099857330322], + [-1.8986923694610596, 1.9643253087997437], + [5.901434421539307, 7.523466110229492], + [-1.9295991659164429, 2.5725085735321045], + [5.463158130645752, -1.2481645345687866], + [-4.604313373565674, -5.603972434997559], + [0.24182242155075073, 11.014970779418945], + [0.13331067562103271, 9.83221435546875], + [-4.072815895080566, -1.2222763299942017], + [3.3090546131134033, -4.684323310852051], + [-5.452412128448486, -1.4303196668624878], + [9.531248092651367, -2.4472744464874268], + [-3.491929769515991, 0.7534441947937012], + [1.29563307762146, -5.492393970489502], + [-4.5673394203186035, -6.323570728302002], + [3.5087404251098633, 1.019808053970337], + [3.061607599258423, -4.3306193351745605], + [-1.8653877973556519, 2.508519411087036], + [2.0925607681274414, 5.3164472579956055], + [-2.807661294937134, -4.874438762664795], + [4.137715816497803, 1.8387869596481323], + [-4.087964057922363, -3.6405866146087646], + [3.4235668182373047, -8.444177627563477], + [5.449585437774658, -2.0278565883636475], + [3.575853109359741, 1.6923894882202148], + [-4.612512111663818, 7.9110636711120605], + [-2.4776089191436768, 1.6707402467727661], + [-3.7182915210723877, -5.773571014404297], + [2.6305503845214844, -9.776567459106445], + [-2.291741371154785, -1.4510184526443481], + [2.753396511077881, -3.868894338607788], + [-0.5073940753936768, -1.1833044290542603], + [3.188394069671631, -5.548272609710693], + [9.243224143981934, -2.471526861190796], + [3.0161216259002686, 6.343252182006836], + [-1.587361454963684, 1.300524353981018], + [4.553627014160156, -2.9671294689178467], + [0.2051650881767273, 10.350749969482422], + [3.5111351013183594, -6.628479480743408], + [-1.4588993787765503, 1.2642954587936401], + [4.292684078216553, -7.775950908660889], + [1.1461161375045776, -7.259984016418457], + [7.506436824798584, -2.1405766010284424], + [-2.9204561710357666, 0.34991538524627686], + [3.583357810974121, -3.572437286376953], + [0.12435715645551682, 12.383309364318848], + [-3.834834337234497, -1.4336756467819214], + [2.364556074142456, -8.953385353088379], + [-7.730388641357422, 0.1921151876449585], + [-6.317734718322754, -0.4879183769226074], + [3.2631092071533203, 1.9056283235549927], + [-1.7852050065994263, 2.263370990753174], + [-2.3874871730804443, 1.9980608224868774], + [3.2035887241363525, -4.8349409103393555], + [-2.526768922805786, 2.123441696166992], + [-4.3588480949401855, -3.143995523452759], + [3.640566110610962, 1.643499732017517], + [6.011966705322266, 7.370048522949219], + [0.21776056289672852, 10.94131851196289], + [-3.3090174198150635, -1.1123055219650269], + [4.40398645401001, -3.7420921325683594], + [2.3891842365264893, -8.38306999206543], + [5.542707920074463, -4.467563629150391], + [-2.9050514698028564, -5.273229598999023], + [1.9385931491851807, -0.7102534770965576], + [-4.970665454864502, 3.5585880279541016], + [10.322192192077637, -2.3724091053009033], + [8.545997619628906, -2.223837375640869], + [-6.185486316680908, 3.1750833988189697], + [-0.766189694404602, -1.6321953535079956], + [-0.5408581495285034, -1.308712363243103], + [-2.441756010055542, -2.262326955795288], + [3.282661199569702, -7.887500762939453], + [-2.4717965126037598, 1.8865994215011597], + [1.5248892307281494, -0.030501145869493484], + [-4.7104105949401855, 5.3905181884765625], + [-3.120276689529419, 5.014091491699219], + [-0.40951743721961975, -2.045811414718628], + [-2.261019468307495, 1.0720287561416626], + [-4.7817912101745605, -0.2515825033187866], + [-0.5873451232910156, -2.4723026752471924], + [-0.19637766480445862, -1.4694100618362427], + [-1.1626678705215454, -3.8738853931427], + [2.150822401046753, 5.169252872467041], + [4.168270111083984, -3.100830554962158], + [-3.630458354949951, -3.0725748538970947], + [1.886307716369629, 2.3967225551605225], + [-2.122462511062622, 2.558549404144287], + [-6.622628688812256, 6.550759315490723], + [-2.2524352073669434, -0.4157574772834778], + [-3.002182960510254, -4.508736610412598], + [-4.493462085723877, 3.9831225872039795], + [-4.931284427642822, 4.976046085357666], + [-0.009216316044330597, 12.87034797668457], + [2.9181644916534424, 5.409052848815918], + [-0.07643295079469681, 12.819024085998535], + [-7.6080121994018555, 1.0742794275283813], + [-2.750929594039917, 1.9127798080444336], + [-6.550994873046875, 7.151235580444336], + [4.613692760467529, -2.763442277908325], + [2.6846132278442383, 5.908352851867676], + [7.5439453125, -2.3131392002105713], + [0.026836447417736053, 9.740514755249023], + [-2.6456918716430664, -4.832038879394531], + [9.543493270874023, -2.50618577003479], + [-3.7643556594848633, -6.220922470092773], + [4.62963342666626, -3.9665255546569824], + [-5.644678115844727, 0.29878461360931396], + [3.201328992843628, -4.54276180267334], + [-4.78964376449585, 1.6992864608764648], + [0.03678195923566818, 9.733926773071289], + [-0.048598118126392365, 12.8971529006958], + [1.517343282699585, 4.966151237487793], + [-4.1800537109375, 4.9019012451171875], + [-1.7929949760437012, -3.603986978530884], + [3.0930569171905518, 6.105025291442871], + [-2.262312650680542, -3.532541036605835], + [2.009589910507202, -8.299175262451172], + [0.7019101977348328, -0.6473204493522644], + [-1.6402318477630615, -3.8043079376220703], + [-2.1444826126098633, 2.2778537273406982], + [1.1403191089630127, -7.173188209533691], + [5.467418670654297, -2.79878568649292], + [-4.473564624786377, -6.584672927856445], + [4.151697635650635, -3.563971757888794], + [2.517627716064453, -6.793493270874023], + [-3.647937774658203, -2.3114981651306152], + [-3.6673929691314697, -6.034584999084473], + [2.3873672485351562, 1.3508579730987549], + [3.5109403133392334, 1.3666422367095947], + [-2.352694272994995, 2.8575026988983154], + [-3.270319700241089, 3.5142180919647217], + [2.6910293102264404, -5.448469161987305], + [2.075895071029663, 3.2963640689849854], + [4.787548542022705, 6.521458148956299], + [4.7948689460754395, 7.734835624694824], + [0.1943843960762024, 10.238443374633789], + [-2.958824396133423, 1.4110236167907715], + [-0.0826152041554451, 14.300020217895508], + [2.9936041831970215, -3.5101230144500732], + [-2.0965147018432617, 2.3647515773773193], + [-5.909033298492432, -0.5765830874443054], + [-4.135461807250977, -2.427860975265503], + [1.0536682605743408, 4.565524101257324], + [3.473365545272827, -6.827332496643066], + [2.778350830078125, 1.9396445751190186], + [-5.243222236633301, 5.05089807510376], + [3.3451201915740967, -6.52816104888916], + [1.2860476970672607, -7.333796977996826], + [3.0745348930358887, 4.64260196685791], + [9.342111587524414, -2.3646271228790283], + [1.2506005764007568, -0.3345564901828766], + [6.624861240386963, 8.013249397277832], + [7.306857109069824, -2.000105381011963], + [-2.184328317642212, 2.3372676372528076], + [6.271215915679932, -2.648850917816162], + [2.8241164684295654, 0.7369995713233948], + [-5.135524749755859, -2.8831520080566406], + [2.597412347793579, 1.309510350227356], + [3.1239113807678223, -3.5200624465942383], + [-2.298717737197876, 0.9836030006408691], + [1.8887163400650024, -3.1274354457855225], + [-4.303159236907959, -3.8256237506866455], + [8.264484405517578, -2.2760469913482666], + [0.21546000242233276, 11.978424072265625], + [5.848938465118408, -1.6023141145706177], + [-0.05242902785539627, 12.585084915161133], + [-4.484364032745361, -7.257524490356445], + [-3.5541365146636963, -2.455167055130005], + [-2.194838047027588, 2.5776703357696533], + [0.10771047323942184, 9.554627418518066], + [-3.995398998260498, 3.1854119300842285], + [-0.0221293643116951, 12.469432830810547], + [-4.420123100280762, 5.770514488220215], + [-4.863100051879883, -0.10072875022888184], + [3.0467491149902344, -4.270681381225586], + [5.788980007171631, 8.555256843566895], + [0.11261808127164841, 10.897589683532715], + [-2.4746551513671875, -3.8773839473724365], + [2.119995355606079, 2.8286917209625244], + [-5.013636589050293, -1.6503922939300537], + [0.19629281759262085, 11.527307510375977], + [-1.7440282106399536, -0.1112055778503418], + [0.9529626965522766, -6.528652667999268], + [5.334914684295654, 7.83920431137085], + [-5.900076389312744, 6.9824323654174805], + [-4.789245128631592, 7.76990270614624], + [2.366464853286743, 5.580728530883789], + [-4.835576057434082, -7.756437301635742], + [2.944312810897827, 1.1410428285598755], + [-5.856868267059326, -2.7621521949768066], + [1.1997051239013672, -4.363461971282959], + [1.9136987924575806, -8.202478408813477], + [2.352721929550171, 0.7617230415344238], + [-1.565428376197815, 1.442042350769043], + [1.7124133110046387, -8.388080596923828], + [-2.2211077213287354, -3.7238872051239014], + [2.6531598567962646, -3.7811410427093506], + [-5.111084461212158, -2.924379825592041], + [-0.6775577068328857, -0.5713223814964294], + [-2.5291342735290527, 3.160020112991333], + [-2.670356035232544, -3.5187056064605713], + [-2.6449012756347656, 2.0326921939849854], + [1.1929035186767578, 2.542433023452759], + [9.78690242767334, -2.325780153274536], + [-6.697659015655518, 7.834468841552734], + [2.9463722705841064, -9.334501266479492], + [-0.16193819046020508, 9.890231132507324], + [2.6939408779144287, 5.9934844970703125], + [-6.358961582183838, -1.3118373155593872], + [3.621547222137451, -5.791489601135254], + [2.1605265140533447, 3.839038133621216], + [-0.2805023491382599, 0.8090199828147888], + [-5.96316385269165, -2.829312801361084], + [-6.680798053741455, 0.585821270942688], + [7.271590709686279, -1.786932349205017], + [-5.726522922515869, -0.10153281688690186], + [-0.02265409380197525, -1.7033681869506836], + [-4.520317554473877, -7.58148193359375], + [-2.323016405105591, 1.0964404344558716], + [-3.021979570388794, -4.4561967849731445], + [2.6731913089752197, -7.958250522613525], + [0.8950592279434204, -0.6545084118843079], + [6.07539701461792, -5.8563385009765625], + [-2.310616970062256, -0.4421154856681824], + [-0.05835109204053879, -1.5195149183273315], + [6.225948333740234, 7.766366958618164], + [-2.091707706451416, -2.626725912094116], + [5.5826416015625, -0.9742466807365417], + [2.8586745262145996, -9.096418380737305], + [4.651099681854248, -2.0125908851623535], + [-2.667806386947632, 2.245920419692993], + [0.00535690039396286, 13.262948989868164], + [6.20983362197876, 7.718391418457031], + [6.473886013031006, -2.294508218765259], + [-1.6706066131591797, 1.9890960454940796], + [2.8832218647003174, -4.100699424743652], + [2.245269298553467, 6.51087760925293], + [-2.832831621170044, -3.3559062480926514], + [-2.1660211086273193, -3.3871681690216064], + [-2.218778133392334, 2.2355403900146484], + [-0.9253745675086975, -3.3180768489837646], + [-2.1130385398864746, 2.4767868518829346], + [-3.0692732334136963, -5.2837982177734375], + [6.587479114532471, -2.226917266845703], + [3.7133023738861084, 0.8167043924331665], + [8.316832542419434, -2.549894094467163], + [-0.005940981209278107, 13.232694625854492], + [0.18549972772598267, 10.406623840332031], + [-3.8191211223602295, 3.3869569301605225], + [-0.9777359962463379, -3.298891544342041], + [-0.5159763693809509, -1.551313042640686], + [2.7457387447357178, -5.381109237670898], + [-7.642754554748535, 0.0629427433013916], + [0.05441348999738693, 12.19303035736084], + [3.5395493507385254, -7.901805877685547], + [-2.5032269954681396, 1.6119763851165771], + [6.183022499084473, 7.475069999694824], + [4.780272960662842, 5.9624481201171875], + [-3.828356981277466, -5.855195045471191], + [-4.508244514465332, -6.172579765319824], + [-3.3524434566497803, -2.7138497829437256], + [-5.733837604522705, -0.4898379445075989], + [8.76877212524414, -2.4626924991607666], + [2.2693018913269043, -5.2860307693481445], + [7.4418511390686035, -2.120474100112915], + [9.830326080322266, -2.3221371173858643], + [4.976538181304932, 7.506712913513184], + [4.517225742340088, -3.548257827758789], + [7.947997570037842, -2.1093523502349854], + [-4.507049083709717, -3.119182825088501], + [-4.297200679779053, -3.383387327194214], + [2.800211191177368, -7.526071548461914], + [7.717568874359131, -2.354606866836548], + [1.8666625022888184, 3.44458270072937], + [-2.431311845779419, 1.990831971168518], + [-1.4400235414505005, -0.04189646616578102], + [-5.414920330047607, -0.19488525390625], + [0.20703190565109253, 11.136377334594727], + [-2.68163800239563, -3.0644290447235107], + [-4.434276580810547, -6.5250701904296875], + [-5.63316011428833, 1.5259039402008057], + [-2.63732647895813, 1.7568269968032837], + [9.103156089782715, -2.7225329875946045], + [0.05246191471815109, 9.432414054870605], + [-3.4516189098358154, -3.5810306072235107], + [0.12027847021818161, 10.304946899414062], + [2.532790422439575, -9.172786712646484], + [6.144961833953857, 7.864875316619873], + [-4.411250591278076, -5.118257522583008], + [-2.0972161293029785, 2.5919952392578125], + [5.452680587768555, -1.2550514936447144], + [-0.4274349808692932, -1.084512710571289], + [3.8764123916625977, -3.566154956817627], + [2.5477492809295654, 6.038561820983887], + [5.088949680328369, 7.0759453773498535], + [3.003875970840454, -3.0623247623443604], + [-3.917750597000122, 6.699435234069824], + [6.345386028289795, -1.3728034496307373], + [1.8855090141296387, -7.261843681335449], + [0.22945719957351685, 11.11307430267334], + [-0.788696825504303, 4.7876129150390625], + [3.045982599258423, -4.150437355041504], + [-2.5885636806488037, 1.936627745628357], + [9.398823738098145, -2.633070230484009], + [0.3546111583709717, 11.136279106140137], + [-2.4808783531188965, 1.6220804452896118], + [7.638988018035889, -1.6605929136276245], + [1.5471115112304688, -0.14996154606342316], + [-3.6113998889923096, -6.471220970153809], + [-1.4061965942382812, -3.9131414890289307], + [2.098355770111084, 3.983215093612671], + [-5.536050319671631, 6.503780364990234], + [-2.515387773513794, 1.8993780612945557], + [1.3199785947799683, -0.33179646730422974], + [6.73786735534668, -2.787271738052368], + [5.867208003997803, 7.635369300842285], + [-6.324194431304932, 7.487491130828857], + [2.740664005279541, -8.156187057495117], + [-4.461867809295654, 6.4269208908081055], + [-5.876344680786133, 4.010473728179932], + [2.657825231552124, -5.744422435760498], + [0.23952654004096985, 0.6566658020019531], + [0.1353258490562439, 9.272350311279297], + [4.43550443649292, -2.4079630374908447], + [3.5788629055023193, 0.8169268369674683], + [-2.729938268661499, -3.846122980117798], + [-4.132147789001465, -1.7034591436386108], + [5.077718257904053, -0.861804187297821], + [-4.017603397369385, 5.425116539001465], + [0.27204662561416626, 11.616415023803711], + [0.17275303602218628, 10.411386489868164], + [-0.028652019798755646, 12.22015380859375], + [-3.868258237838745, 5.1173200607299805], + [6.62274694442749, 8.04773998260498], + [6.046697616577148, -2.989435911178589], + [2.8428423404693604, 1.756608009338379], + [5.377739429473877, -2.1574432849884033], + [-3.9789693355560303, 2.8071367740631104], + [2.644413709640503, -9.009531021118164], + [4.814828395843506, -3.377542495727539], + [3.5925590991973877, -4.955310821533203], + [-7.699799060821533, -0.22816789150238037], + [8.15946102142334, -2.201568365097046], + [-2.097578763961792, 5.66097354888916], + [-3.9463555812835693, -1.2587236166000366], + [-0.10326916724443436, 13.548032760620117], + [-4.683305740356445, -6.784305095672607], + [-1.9671984910964966, 1.3862152099609375], + [9.428618431091309, -2.3867387771606445], + [2.3613474369049072, -7.170032024383545], + [4.7751898765563965, -0.22040677070617676], + [2.6619455814361572, -8.433018684387207], + [6.147915363311768, -1.377040982246399], + [-0.04831940680742264, 13.459405899047852], + [-2.3836238384246826, -4.592320442199707], + [1.927234411239624, 4.079258918762207], + [8.654598236083984, -2.2847654819488525], + [2.037745475769043, -7.599971771240234], + [2.813642740249634, -3.9025347232818604], + [-0.18011265993118286, 9.586771011352539], + [-7.030186176300049, 8.476926803588867], + [-1.576617956161499, -1.0443249940872192], + [5.834296703338623, -1.3363977670669556], + [3.667173147201538, -6.655137062072754], + [-4.01631498336792, 7.143915176391602], + [-5.706497669219971, -3.1216604709625244], + [8.716676712036133, -2.3878018856048584], + [0.3302881717681885, 10.562273025512695], + [1.4916294813156128, -7.238894462585449], + [-1.3828344345092773, -1.989262580871582], + [8.516619682312012, -2.3426482677459717], + [2.6469008922576904, -9.771435737609863], + [1.83803129196167, 5.487867832183838], + [5.968864917755127, 7.858165264129639], + [-4.595573425292969, -0.9067199230194092], + [10.220372200012207, -2.355332136154175], + [-6.158023357391357, 6.993797302246094], + [4.169698715209961, 6.485532760620117], + [4.87933349609375, -3.3006231784820557], + [0.15497446060180664, 11.375972747802734], + [-2.4249982833862305, -3.8435933589935303], + [-2.9252984523773193, 1.6395447254180908], + [3.499903917312622, -6.999850273132324], + [6.020383834838867, 7.756618022918701], + [-3.276562452316284, -4.036388397216797], + [-0.28135067224502563, -1.7708274126052856], + [-3.007127523422241, -4.971205711364746], + [7.007149696350098, 8.620650291442871], + [1.6153393983840942, -0.8352195024490356], + [-2.5547754764556885, -4.13886833190918], + [3.446453332901001, -7.409940719604492], + [-4.511088848114014, -6.4942779541015625], + [4.6425580978393555, -1.7656456232070923], + [-4.462960243225098, -4.788041114807129], + [7.2310471534729, -1.716040015220642], + [-2.8589627742767334, -1.6112583875656128], + [3.044633388519287, -3.9041802883148193], + [1.7130045890808105, 5.9767351150512695], + [5.265351295471191, 6.539593696594238], + [-0.05558783560991287, 13.938726425170898], + [-2.465954303741455, 1.7558372020721436], + [6.908349514007568, 8.433326721191406], + [-4.942502975463867, -7.078213691711426], + [-1.2261829376220703, 0.5915923118591309], + [-3.6689159870147705, 5.305945873260498], + [6.7419586181640625, -1.6008918285369873], + [-5.432498931884766, 3.5317370891571045], + [0.11200647801160812, 9.84225082397461], + [1.4408334493637085, -6.926884174346924], + [1.3861379623413086, 1.2424324750900269], + [-6.2358174324035645, -1.9207048416137695], + [0.07321765273809433, -1.4445503950119019], + [7.530939102172852, -2.081066131591797], + [1.8555958271026611, 4.446541786193848], + [-1.444753885269165, -3.821230173110962], + [-4.61819314956665, -2.7992658615112305], + [0.10861971229314804, -0.2169356346130371], + [5.028857231140137, -2.166173219680786], + [-4.432705402374268, 5.285100936889648], + [1.5241835117340088, 0.20540732145309448], + [2.9309275150299072, -3.9238224029541016], + [3.7300307750701904, 1.038182020187378], + [7.628185749053955, -1.9977065324783325], + [-4.294528961181641, 6.733869552612305], + [1.5645167827606201, -7.279473304748535], + [-5.038087368011475, 5.667848587036133], + [6.449441909790039, -4.644879341125488], + [2.5088040828704834, -3.3345491886138916], + [3.7652034759521484, -2.631438732147217], + [1.5581119060516357, 3.431320905685425], + [2.581791639328003, -0.4469384551048279], + [7.082871913909912, 8.650835037231445], + [4.2106852531433105, -3.792703866958618], + [-2.7478692531585693, -4.08584451675415], + [-3.7412631511688232, -2.349884271621704], + [6.311832427978516, -3.716562032699585], + [9.2592134475708, -2.2803051471710205], + [-2.31061053276062, -4.056474208831787], + [8.872319221496582, -2.333684206008911], + [4.698537349700928, -1.4556063413619995], + [-4.843861103057861, -6.44340705871582], + [-3.5844013690948486, -1.9264994859695435], + [2.653475046157837, 0.37803977727890015], + [3.7049362659454346, -6.5078125], + [5.566166400909424, 7.536495208740234], + [-1.7592055797576904, 1.8656814098358154], + [3.100789785385132, -7.970719337463379], + [0.517172634601593, 11.333288192749023], + [5.450066566467285, -4.524198055267334], + [0.42089569568634033, -0.5531111359596252], + [7.586231708526611, -2.5695924758911133], + [-6.31266450881958, -0.999877393245697], + [6.939959526062012, 8.51555347442627], + [3.966951608657837, -8.177699089050293], + [0.24440377950668335, 11.145451545715332], + [-2.818368434906006, -3.784451484680176], + [3.121537923812866, -4.39903450012207], + [4.773314476013184, -3.3480799198150635], + [9.439042091369629, -2.3225882053375244], + [-3.346670389175415, 2.3978159427642822], + [2.475491523742676, -4.663007736206055], + [1.7838670015335083, 2.2004623413085938], + [8.37804889678955, -2.3603386878967285], + [0.21281373500823975, 11.329008102416992], + [3.1459429264068604, -4.439431190490723], + [4.2677106857299805, 2.0080909729003906], + [-4.201714515686035, -6.4383416175842285], + [-3.6463046073913574, -3.8367464542388916], + [-2.0599277019500732, -3.8396804332733154], + [-3.8863790035247803, -2.6134774684906006], + [-0.5034230351448059, -1.1012285947799683], + [-2.3355178833007812, 1.9742363691329956], + [3.265126943588257, -4.549782752990723], + [2.7344069480895996, -8.305289268493652], + [0.16582095623016357, 12.135251998901367], + [1.2822849750518799, -0.7317537069320679], + [9.860258102416992, -2.467564821243286], + [2.7698380947113037, 6.049600124359131], + [-2.068845272064209, -1.2027100324630737], + [-2.0507893562316895, 2.6181728839874268], + [-4.439592361450195, 5.2265238761901855], + [-3.042983293533325, 0.6826103329658508], + [5.16406774520874, 7.267041206359863], + [-2.1576292514801025, -1.923351526260376], + [8.717187881469727, -2.3604509830474854], + [3.2322874069213867, 1.4768555164337158], + [0.2563825249671936, 9.461548805236816], + [-2.465322732925415, 1.6890677213668823], + [6.339509963989258, -2.663573980331421], + [-0.033655233681201935, 12.225687026977539], + [5.545655727386475, 7.51457405090332], + [6.279789924621582, 7.777647495269775], + [-2.2637922763824463, -3.3775808811187744], + [-3.4767463207244873, -5.266215801239014], + [2.4790689945220947, 4.391905784606934], + [3.5041005611419678, -5.1033220291137695], + [3.6898117065429688, -3.6698615550994873], + [-3.349304437637329, -4.980615615844727], + [0.16535431146621704, 12.135909080505371], + [5.93872594833374, 7.647468566894531], + [4.102485179901123, -3.649653196334839], + [4.741045951843262, 6.624445915222168], + [3.9019131660461426, -7.519028663635254], + [0.013696067035198212, 12.18195915222168], + [2.8811991214752197, -7.292142391204834], + [1.3761045932769775, 1.6593283414840698], + [4.424038410186768, 1.8367887735366821], + [-0.019719786942005157, 12.260318756103516], + [-7.449765682220459, 2.7054054737091064], + [-4.674746513366699, -6.8916425704956055], + [2.688735246658325, -7.683538436889648], + [0.15645092725753784, 9.477088928222656], + [2.116901397705078, 1.9426997900009155], + [8.44722843170166, -2.4112021923065186], + [-2.653357744216919, 1.8942800760269165], + [-3.0534207820892334, 1.1132903099060059], + [9.1712064743042, -2.3646585941314697], + [-2.4860117435455322, 2.4598960876464844], + [3.543677806854248, -7.632613182067871], + [3.414727210998535, -3.7737784385681152], + [-3.096555233001709, -3.8935787677764893], + [-3.8822648525238037, -5.447220325469971], + [3.3903439044952393, -7.977893352508545], + [-3.9484012126922607, -6.352437973022461], + [3.90132737159729, -3.464444875717163], + [-2.5951037406921387, 1.8101426362991333], + [-4.94398832321167, 5.447832107543945], + [2.286576509475708, 6.067424774169922], + [0.36633163690567017, 0.7071758508682251], + [3.705662488937378, -6.998317718505859], + [3.0326290130615234, -3.718035936355591], + [-2.945270299911499, -6.171132564544678], + [-1.6185864210128784, -2.133955717086792], + [-2.551375389099121, 1.9032355546951294], + [-5.206477642059326, 3.3180885314941406], + [0.6968531012535095, -0.7246794700622559], + [-4.7230072021484375, -3.087885856628418], + [0.23638731241226196, 10.979028701782227], + [-4.55266809463501, 4.810537338256836], + [0.12813621759414673, 10.148782730102539], + [5.2567925453186035, 7.377701759338379], + [2.7054483890533447, -8.005929946899414], + [-0.009802408516407013, 12.98049545288086], + [-1.3733391761779785, 0.6431512832641602], + [-6.136755466461182, -0.947778582572937], + [0.21083801984786987, 11.153870582580566], + [5.091590404510498, -1.9148398637771606], + [-4.1109747886657715, -2.1085143089294434], + [2.3049004077911377, -3.218029260635376], + [-6.969933986663818, 2.5748796463012695], + [0.09230738133192062, 11.509305000305176], + [-2.1076619625091553, 2.611555337905884], + [3.484468936920166, -2.858184576034546], + [-3.6874382495880127, -6.261231422424316], + [-4.228067874908447, -1.9572073221206665], + [2.4674813747406006, 5.312444686889648], + [4.508016109466553, 1.9331824779510498], + [6.697153091430664, -1.4396955966949463], + [2.123967409133911, -4.4261603355407715], + [-2.141559362411499, 2.2376818656921387], + [0.21663564443588257, 11.992233276367188], + [3.1043317317962646, -3.3535828590393066], + [2.8264882564544678, -2.6648457050323486], + [4.538859844207764, 5.902335166931152], + [0.7483100891113281, -0.90090012550354], + [-5.891765117645264, -0.7813391089439392], + [3.3243823051452637, -3.981783390045166], + [0.1461506485939026, 10.098762512207031], + [3.3523201942443848, -6.9344706535339355], + [4.100269794464111, 1.974366545677185], + [-5.013859272003174, 5.702698707580566], + [1.5053362846374512, -7.222850799560547], + [9.540738105773926, -2.3149163722991943], + [-2.420903444290161, 2.2185707092285156], + [-3.2889530658721924, -5.539210319519043], + [-7.67411470413208, -0.08885753154754639], + [9.159619331359863, -2.312802314758301], + [2.7359745502471924, 6.207607746124268], + [-6.548974514007568, 7.012913703918457], + [-0.01157040148973465, 11.963302612304688], + [-1.7478346824645996, -3.394475221633911], + [-4.809906482696533, -4.526936054229736], + [-5.326266765594482, -2.883728504180908], + [-2.911654233932495, 2.9626786708831787], + [2.4538609981536865, 0.3971330225467682], + [-2.8065671920776367, -3.208091974258423], + [6.854298114776611, -2.4681198596954346], + [2.6378681659698486, -9.677343368530273], + [0.40377119183540344, -3.2264010906219482], + [8.951518058776855, -2.438431978225708], + [8.582266807556152, -2.366267442703247], + [6.294798851013184, 7.894807815551758], + [2.540527582168579, -8.409157752990723], + [-2.1452767848968506, 2.4175379276275635], + [-3.5173394680023193, 3.7997381687164307], + [0.06378059834241867, 9.549718856811523], + [-4.321761608123779, -6.873487949371338], + [-6.098273754119873, -0.32301557064056396], + [2.6737606525421143, 5.611501216888428], + [-4.887965202331543, 6.6307759284973145], + [-6.504677772521973, 0.07159489393234253], + [3.2423877716064453, -7.91663932800293], + [-4.648856163024902, 4.367692947387695], + [-2.4435088634490967, -2.372089385986328], + [5.599955081939697, 7.974618911743164], + [3.01092529296875, -4.27908992767334], + [-1.580322027206421, 1.4345669746398926], + [0.20041388273239136, 10.295940399169922], + [-2.5563364028930664, 1.9708205461502075], + [-2.11279296875, 2.342273473739624], + [0.03543686121702194, 9.341501235961914], + [-0.11947814375162125, -1.5958889722824097], + [-2.1448111534118652, 2.782982349395752], + [-3.3262832164764404, -0.44704651832580566], + [3.404768705368042, -4.019728660583496], + [-4.306324481964111, -5.905726432800293], + [5.8643059730529785, 7.753185272216797], + [-4.207522392272949, -2.6328108310699463], + [8.507340431213379, -2.462786912918091], + [3.759636878967285, -3.860447645187378], + [-4.477888584136963, -7.006959438323975], + [8.349985122680664, -2.4726719856262207], + [5.979832649230957, -1.2286304235458374], + [-2.527071237564087, 5.454980850219727], + [0.1441900134086609, 12.993997573852539], + [-3.936932325363159, -5.33574104309082], + [-5.2946906089782715, 5.926320552825928], + [0.22962206602096558, 10.64310073852539], + [4.955265522003174, -1.8993884325027466], + [3.673816442489624, -3.291740655899048], + [-0.05216545611619949, -1.6157790422439575], + [9.720295906066895, -2.3456342220306396], + [4.342970848083496, -1.7328494787216187], + [-6.472459316253662, -1.5778223276138306], + [10.105313301086426, -2.3337175846099854], + [3.3987209796905518, 1.7481669187545776], + [3.2715258598327637, 1.3470863103866577], + [-2.1880943775177, 2.7272839546203613], + [6.5996928215026855, -3.117037296295166], + [-2.1136207580566406, 2.646514892578125], + [-0.4891437292098999, -1.296291708946228], + [2.835238218307495, -4.019516468048096], + [-6.8468756675720215, -0.21232759952545166], + [-2.403942346572876, 2.4892308712005615], + [3.8195478916168213, -8.258251190185547], + [-2.184673547744751, 2.243687152862549], + [8.172850608825684, -2.1785385608673096], + [1.360475778579712, 11.606559753417969], + [2.9524707794189453, -4.185120582580566], + [7.4862775802612305, -4.970161437988281], + [7.771838665008545, -2.34428334236145], + [-2.477104425430298, 2.3342838287353516], + [10.49602222442627, -2.354112386703491], + [-6.41425895690918, -2.2002034187316895], + [3.0082576274871826, -4.267358303070068], + [-1.8919498920440674, 2.4159023761749268], + [-4.050587177276611, 5.0307488441467285], + [-0.19523048400878906, 0.45263123512268066], + [0.11389105767011642, 9.881423950195312], + [2.8074610233306885, -4.018166542053223], + [0.01303904503583908, 12.623554229736328], + [-5.446193218231201, -1.2841459512710571], + [3.7983436584472656, 1.6444569826126099], + [-2.1939921379089355, -1.8386191129684448], + [0.22034400701522827, 11.609901428222656], + [-4.919118404388428, -7.307703018188477], + [3.118927240371704, -2.8088371753692627], + [1.7683895826339722, -6.450489044189453], + [3.4382903575897217, -2.9740045070648193], + [-3.525233030319214, -4.469051361083984], + [4.674750804901123, 6.567030906677246], + [2.115949869155884, 5.149625778198242], + [8.014798164367676, -2.04909348487854], + [-5.311468601226807, -1.233408808708191], + [-1.2766599655151367, 1.2073192596435547], + [1.7694498300552368, 5.535824775695801], + [-3.9161055088043213, 6.207605361938477], + [-1.9001848697662354, 2.3837850093841553], + [-1.4955785274505615, 1.982247233390808], + [4.8981218338012695, -1.1657466888427734], + [9.898889541625977, -2.374189615249634], + [-4.6789984703063965, 5.000882625579834], + [-4.565899848937988, -6.485214710235596], + [9.297930717468262, -2.3365533351898193], + [-0.6507748961448669, 1.2980610132217407], + [0.23736906051635742, 10.926969528198242], + [2.266357183456421, 5.298897743225098], + [2.740110397338867, 0.9891707897186279], + [7.709853649139404, -1.8693336248397827], + [5.909798622131348, -2.6352133750915527], + [2.003497838973999, 3.2815520763397217], + [-1.9088184833526611, 2.151141405105591], + [6.520085334777832, -3.4864070415496826], + [-1.0350944995880127, -0.8059037327766418], + [4.134298801422119, 1.3739869594573975], + [-6.157440662384033, -0.36626434326171875], + [-4.316445350646973, -6.355415344238281], + [-3.537686347961426, 4.666158199310303], + [3.578441858291626, -3.5682361125946045], + [2.8926920890808105, -9.474708557128906], + [-3.4592411518096924, -0.6973458528518677], + [-4.596580505371094, 5.085515975952148], + [3.002873420715332, -3.915753126144409], + [-1.7713555097579956, 2.3989133834838867], + [0.1801995038986206, 10.198819160461426], + [6.711444854736328, -1.7916816473007202], + [7.909426212310791, -2.035137176513672], + [-4.12245512008667, -6.5962677001953125], + [0.05593579262495041, 9.342487335205078], + [-4.59214973449707, 5.202457904815674], + [3.4587299823760986, 6.175161361694336], + [4.554098129272461, -2.472440242767334], + [-6.2736124992370605, -0.36452436447143555], + [5.832208633422852, 7.241656303405762], + [-6.513391017913818, 7.768725395202637], + [9.380041122436523, -2.455927610397339], + [-2.6877481937408447, -3.5382070541381836], + [4.623350620269775, 7.1942033767700195], + [-5.324246406555176, -2.1484971046447754], + [-4.7263102531433105, -2.872316598892212], + [8.263625144958496, 9.74576187133789], + [3.578692674636841, -3.891880989074707], + [2.034979820251465, 2.5832788944244385], + [-0.7385082840919495, -2.8228142261505127], + [2.249809503555298, -7.845952987670898], + [-2.7005577087402344, -1.2458049058914185], + [0.17086458206176758, 10.463388442993164], + [0.3383789360523224, -1.9936164617538452], + [-1.9798554182052612, 2.4936935901641846], + [-3.9997408390045166, -1.781678318977356], + [8.262221336364746, -2.349890947341919], + [4.813395023345947, -3.0730721950531006], + [-2.2451868057250977, 0.9773064851760864], + [5.493402004241943, -4.966033458709717], + [2.9311764240264893, 4.459756851196289], + [5.727327346801758, 2.524261713027954], + [6.206964015960693, -1.7113219499588013], + [1.9677183628082275, 5.612676620483398], + [0.15872007608413696, 11.185725212097168], + [-5.570027828216553, -4.023340225219727], + [-3.8700339794158936, 5.826878070831299], + [-6.534000873565674, 6.92946720123291], + [0.5159679651260376, 0.3625195324420929], + [0.06087666004896164, 10.61204719543457], + [8.37023639678955, -2.330763578414917], + [2.8191492557525635, -9.869958877563477], + [3.4669840335845947, -2.886622190475464], + [7.432116985321045, -2.310230016708374], + [-5.941925525665283, -1.7579866647720337], + [-2.9618027210235596, 1.2899967432022095], + [11.457047462463379, -2.571410894393921], + [-2.5860393047332764, -3.369699478149414], + [3.305560827255249, -4.53044319152832], + [2.753588914871216, 4.708359241485596], + [6.1394171714782715, -1.3908597230911255], + [4.832870006561279, -4.28514289855957], + [-7.670202255249023, -0.7852500677108765], + [7.115416049957275, -1.510294795036316], + [3.924077272415161, 6.966948986053467], + [2.337491512298584, 4.480734825134277], + [3.270001173019409, 6.516336917877197], + [4.281841278076172, 1.8616350889205933], + [-2.15853214263916, 2.3258981704711914], + [0.1730852723121643, -0.2535448670387268], + [-1.8238333463668823, -0.39888525009155273], + [4.412322521209717, 5.712240219116211], + [2.7044527530670166, -7.538605690002441], + [-5.644143581390381, 8.277310371398926], + [-6.944633960723877, 8.059745788574219], + [11.46154499053955, -2.7731709480285645], + [5.589101314544678, -1.231714129447937], + [-4.825386047363281, 3.538174867630005], + [1.1134812831878662, 11.652413368225098], + [9.555941581726074, -2.465012550354004], + [9.314400672912598, -2.3760292530059814], + [0.18311047554016113, 10.375798225402832], + [9.167315483093262, -2.4021084308624268], + [-1.542338252067566, -1.48128080368042], + [-0.022740788757801056, 14.146448135375977], + [-1.9425406455993652, -3.174475908279419], + [6.904269695281982, -1.6752221584320068], + [2.9377129077911377, -3.811108350753784], + [-0.3910869359970093, 1.043919324874878], + [3.300398349761963, -4.955835342407227], + [-4.147836685180664, -5.998174667358398], + [2.76745867729187, -3.7000067234039307], + [4.921777248382568, -1.490073323249817], + [3.2056996822357178, -4.114305019378662], + [0.10203161090612411, -0.760411262512207], + [3.6313440799713135, 2.0682222843170166], + [-5.490646839141846, -2.9879508018493652], + [8.995924949645996, -2.544325828552246], + [-3.109282970428467, 2.7671592235565186], + [3.665038585662842, -8.195219993591309], + [-3.9133098125457764, 3.9173996448516846], + [-3.1355390548706055, -4.356437683105469], + [1.0500004291534424, -7.097284317016602], + [2.592062473297119, 1.986838459968567], + [3.421224355697632, 5.116035461425781], + [1.0243604183197021, -0.2642689049243927], + [1.3829622268676758, 1.6380332708358765], + [2.8596794605255127, -4.0230393409729], + [1.328192949295044, 5.273767471313477], + [-2.4910950660705566, 1.8991528749465942], + [-1.7199429273605347, -3.714794635772705], + [1.931150197982788, 5.465201377868652], + [-3.9725847244262695, -4.268207550048828], + [-3.728522777557373, 5.196247100830078], + [-6.401374340057373, 0.08602094650268555], + [3.0507233142852783, -10.163030624389648], + [0.24763500690460205, 10.621370315551758], + [9.937334060668945, -2.2789416313171387], + [1.5416924953460693, 5.440023422241211], + [3.8927226066589355, -2.6246769428253174], + [8.890100479125977, -2.3205206394195557], + [1.4222779273986816, 0.7207323312759399], + [6.067509174346924, 7.326959609985352], + [1.6172511577606201, 3.6162917613983154], + [7.382406711578369, -2.2462527751922607], + [1.9418742656707764, -3.9503636360168457], + [-3.988405704498291, 5.784091949462891], + [-4.3444390296936035, 3.4818785190582275], + [-6.486071586608887, 1.46979820728302], + [-3.1228408813476562, 1.021934986114502], + [0.8545008301734924, 7.746002197265625], + [2.8250887393951416, -7.051153182983398], + [7.073337554931641, 8.445820808410645], + [3.1482174396514893, -4.454640865325928], + [2.3720710277557373, -8.587015151977539], + [-3.156048059463501, -4.141997814178467], + [-5.092716693878174, -2.2923691272735596], + [-1.7661606073379517, 0.8710910081863403], + [0.4134742319583893, -4.612658500671387], + [-2.504082679748535, 2.1181137561798096], + [7.6497321128845215, -2.2788665294647217], + [-4.877715110778809, -4.671200275421143], + [0.07733272761106491, 11.882552146911621], + [-0.10867167264223099, 0.9946845769882202], + [1.1661564111709595, -6.82559871673584], + [-0.19056430459022522, -1.5874905586242676], + [4.815175533294678, -0.05941644683480263], + [-4.7847580909729, -7.303739547729492], + [3.9698970317840576, 1.1735774278640747], + [3.0958821773529053, 0.26176774501800537], + [4.209510326385498, -4.998967170715332], + [-5.077314853668213, 2.47002911567688], + [6.5523905754089355, 7.977210998535156], + [-0.21736228466033936, 8.557141304016113], + [-2.113556146621704, 2.5953171253204346], + [5.6721320152282715, 7.465974807739258], + [-3.379610776901245, -4.633613586425781], + [0.1930345892906189, 10.631046295166016], + [-2.4550466537475586, 1.7243986129760742], + [-1.8031333684921265, 2.174786329269409], + [3.5462496280670166, -7.969552040100098], + [-0.6647082567214966, -2.340998411178589], + [4.068823337554932, -3.9026987552642822], + [-0.3875086307525635, -1.3316906690597534], + [-4.527047157287598, 4.899903297424316], + [-3.2430880069732666, 5.9080610275268555], + [3.06811261177063, -4.300444602966309], + [-0.007618255913257599, 13.015626907348633], + [-2.8339359760284424, -4.430404186248779], + [6.958662509918213, 8.668573379516602], + [6.727072238922119, 8.124696731567383], + [-4.554061412811279, -7.802754878997803], + [-1.2550493478775024, 3.2264087200164795], + [4.910651683807373, 6.25730037689209], + [4.481216907501221, 5.965483665466309], + [5.069296360015869, -4.1433000564575195], + [-2.0259671211242676, -0.13628268241882324], + [-0.06282640248537064, 11.717775344848633], + [-3.244481325149536, 2.7560043334960938], + [-2.524854898452759, -2.6460676193237305], + [5.006532669067383, -0.6945586800575256], + [1.2355360984802246, -5.03629207611084], + [0.05342286080121994, 9.27151870727539], + [2.65796160697937, 0.8782784342765808], + [7.858449459075928, -2.261990547180176], + [-6.107285976409912, 7.108404159545898], + [0.06201999634504318, 11.197738647460938], + [3.9983041286468506, -3.7444794178009033], + [3.13509464263916, -3.6840827465057373], + [-5.255333423614502, -1.610946774482727], + [2.479651689529419, 1.8995765447616577], + [4.035706043243408, -4.063655376434326], + [2.2507853507995605, 3.457723379135132], + [4.727637767791748, -4.29827356338501], + [-5.557041645050049, 0.7262213230133057], + [7.967879772186279, 9.346349716186523], + [-2.2250733375549316, 2.5053751468658447], + [-4.00785493850708, -4.954812526702881], + [-7.197076320648193, 7.772977828979492], + [-0.18382394313812256, 10.337638854980469], + [-2.4571495056152344, 2.1558470726013184], + [-0.0710257962346077, 14.521411895751953], + [5.492173671722412, 7.69740629196167], + [7.541604995727539, -2.4006824493408203], + [8.561599731445312, -2.3424971103668213], + [0.41464972496032715, -0.5950558185577393], + [-6.026508331298828, -1.4504761695861816], + [-2.380758047103882, -4.318497657775879], + [9.331485748291016, -2.650745153427124], + [-4.163771629333496, -5.232199668884277], + [-3.0430729389190674, -3.5966861248016357], + [-2.8256828784942627, 0.801238477230072], + [1.0914796590805054, -0.3584248423576355], + [2.5629210472106934, -4.854742050170898], + [-2.3008058071136475, 2.1810097694396973], + [7.875142574310303, -2.571373462677002], + [1.3054131269454956, 6.745922088623047], + [-0.055254705250263214, 9.042027473449707], + [3.3653335571289062, -3.553964853286743], + [1.5428264141082764, -7.358160972595215], + [4.066823482513428, -4.555706024169922], + [2.9002525806427, -4.104903221130371], + [8.743254661560059, -2.2475812435150146], + [2.331200361251831, 5.627316474914551], + [-1.3702337741851807, 1.813491702079773], + [2.708448648452759, -3.739922523498535], + [-1.057252287864685, -3.5137064456939697], + [-6.059671878814697, 7.491363048553467], + [8.305893898010254, -2.3822877407073975], + [-2.3090808391571045, 0.025218185037374496], + [-2.1994669437408447, 2.139834403991699], + [-0.009832210838794708, 12.515044212341309], + [1.0960066318511963, 3.4188108444213867], + [7.942389011383057, -2.153684377670288], + [2.6615402698516846, -8.571746826171875], + [7.302729606628418, 8.773395538330078], + [3.1790597438812256, -4.553458213806152], + [-5.861603260040283, -1.1086877584457397], + [-2.1513144969940186, 2.3240933418273926], + [3.4112987518310547, 1.376569390296936], + [-2.343010187149048, -4.137066841125488], + [2.1161091327667236, 3.5699288845062256], + [-4.359010219573975, -2.326409101486206], + [-3.099134922027588, 5.72819709777832], + [-3.2002179622650146, 3.386483907699585], + [2.519474744796753, 2.9576640129089355], + [-1.287253499031067, -0.19247925281524658], + [1.8423759937286377, 5.770369529724121], + [3.2323153018951416, -2.6705732345581055], + [2.809954881668091, 3.941293478012085], + [-2.573462724685669, -4.15334415435791], + [-0.0035558417439460754, 12.647927284240723], + [-2.321322441101074, 2.7438888549804688], + [-1.9700124263763428, 2.391382932662964], + [0.19077765941619873, 9.611194610595703], + [1.5613021850585938, -7.593310832977295], + [-4.90994930267334, 5.152164936065674], + [-5.906944751739502, 7.644783020019531], + [2.4452216625213623, 2.3344783782958984], + [4.5121941566467285, 6.688663482666016], + [0.1572985053062439, 11.605894088745117], + [10.063361167907715, -2.4149062633514404], + [-2.092437982559204, 0.6818674802780151], + [2.5448219776153564, -8.212451934814453], + [-4.721247673034668, 3.7321555614471436], + [-1.8441022634506226, -3.0457308292388916], + [9.031373023986816, -2.3258049488067627], + [-4.406104564666748, -6.976981163024902], + [6.815438747406006, -2.4973180294036865], + [3.2797372341156006, 5.014714241027832], + [3.0779287815093994, -4.325632572174072], + [3.3926515579223633, 5.877105236053467], + [-3.8910129070281982, -6.303586006164551], + [-2.222003936767578, 1.2712903022766113], + [-2.3758254051208496, 2.7878994941711426], + [-3.616687059402466, -1.2327805757522583], + [-2.468877077102661, -3.1487600803375244], + [8.139893531799316, -2.2043545246124268], + [3.245131254196167, -3.420855760574341], + [-2.4223408699035645, 2.0458624362945557], + [-2.1548478603363037, 2.283296823501587], + [3.5116021633148193, 5.108921051025391], + [2.0084006786346436, -8.446624755859375], + [6.660058975219727, 8.235322952270508], + [2.7278900146484375, -3.819779634475708], + [0.5113566517829895, -0.8077583312988281], + [7.089723110198975, -2.439392566680908], + [-3.1673498153686523, 2.638157606124878], + [0.5920095443725586, 10.874683380126953], + [0.33259317278862, -0.22833767533302307], + [-5.328032970428467, 6.453456878662109], + [-6.344634532928467, 7.279616355895996], + [-4.090017795562744, -6.275635719299316], + [3.583469867706299, -3.1097943782806396], + [-3.5848536491394043, -5.332864761352539], + [-2.7280499935150146, -1.5986055135726929], + [-2.4885597229003906, 1.1120415925979614], + [4.176266670227051, -7.653625965118408], + [7.1203179359436035, -4.3197760581970215], + [-0.02128881961107254, 13.624255180358887], + [7.537281513214111, -2.7136411666870117], + [0.12692111730575562, 10.226648330688477], + [-0.6872811317443848, 1.294242262840271], + [1.1187599897384644, -0.4516414999961853], + [10.090155601501465, -2.326092481613159], + [2.451286554336548, 0.42460405826568604], + [3.5003981590270996, 1.4877680540084839], + [-3.563030958175659, 5.599785804748535], + [-7.105984210968018, 8.335714340209961], + [3.5734939575195312, 1.1842422485351562], + [10.73597240447998, -2.595909357070923], + [-2.0556302070617676, -0.09936311841011047], + [3.865967273712158, -7.215255260467529], + [6.732130527496338, -3.681516408920288], + [-3.0828356742858887, -4.3495192527771], + [0.23434585332870483, 11.162491798400879], + [-2.5180821418762207, -3.8640124797821045], + [7.258208751678467, -2.870210886001587], + [-3.1598293781280518, -4.4353179931640625], + [3.440469980239868, -2.6883904933929443], + [6.618666648864746, -5.310744285583496], + [-3.3197786808013916, -3.284457206726074], + [2.593545913696289, -3.7402358055114746], + [0.49555009603500366, -0.9762629270553589], + [-2.543860673904419, -1.1670246124267578], + [3.399308443069458, -3.033116579055786], + [2.247856855392456, -5.873846530914307], + [3.207266092300415, -8.055974960327148], + [-2.1979451179504395, 2.160163402557373], + [-2.270141363143921, 1.8622593879699707], + [-0.6675893068313599, -2.6799659729003906], + [7.185192584991455, 8.706629753112793], + [9.476573944091797, -2.3349974155426025], + [1.7697901725769043, 5.22144889831543], + [2.8063833713531494, -4.049646377563477], + [-2.3302195072174072, 1.3633079528808594], + [2.4560930728912354, 6.501618385314941], + [3.630155324935913, -5.637887954711914], + [0.22433334589004517, 10.496724128723145], + [6.338749408721924, 7.838632583618164], + [8.244940757751465, -2.393359422683716], + [-7.651947975158691, -0.32981443405151367], + [-4.190673828125, -6.12666654586792], + [-3.5771186351776123, 7.060365676879883], + [4.489428520202637, 6.919584274291992], + [1.6163336038589478, 1.8836464881896973], + [2.8254566192626953, -4.055768966674805], + [-4.349809169769287, -5.935351848602295], + [-6.573882579803467, -0.6869339942932129], + [2.325747013092041, 0.8454396724700928], + [3.0788655281066895, 3.812652826309204], + [6.669732570648193, 8.019244194030762], + [-2.4986560344696045, 2.1613035202026367], + [1.8328049182891846, 5.361867904663086], + [8.617280006408691, -2.4454867839813232], + [-0.17838121950626373, -2.654114246368408], + [0.41472506523132324, 11.656286239624023], + [7.283046245574951, 8.766107559204102], + [2.1114377975463867, 1.930649995803833], + [1.6024644374847412, 5.097243309020996], + [4.417569637298584, -3.916398286819458], + [3.1738369464874268, 6.915491104125977], + [0.31431257724761963, 8.401137351989746], + [-2.115499258041382, 2.127225875854492], + [0.14174950122833252, 9.06010627746582], + [-4.677064418792725, -5.96103572845459], + [10.154793739318848, -2.47405743598938], + [0.05630164593458176, 12.733766555786133], + [-5.538894176483154, -3.2961950302124023], + [3.742558717727661, 1.7395741939544678], + [8.791783332824707, -2.2941782474517822], + [-2.3643906116485596, 2.1804964542388916], + [0.44229239225387573, -4.917259693145752], + [6.299203872680664, -0.940356433391571], + [-3.6963107585906982, -4.730736255645752], + [7.958259105682373, -2.190291166305542], + [5.400854587554932, -4.709353923797607], + [-4.495305061340332, -7.7675275802612305], + [2.7431178092956543, -3.9099526405334473], + [9.429790496826172, -2.350130319595337], + [-1.8000030517578125, 1.4359447956085205], + [3.079052686691284, -4.235653877258301], + [5.473696231842041, -0.941936194896698], + [10.722648620605469, -2.5006308555603027], + [3.1707561016082764, -2.946594476699829], + [0.782938539981842, -6.054747581481934], + [-4.455877780914307, -6.880556106567383], + [6.845441818237305, 8.250101089477539], + [-5.330924034118652, -2.1865220069885254], + [3.191124677658081, 6.195516586303711], + [-4.258052349090576, 4.450181484222412], + [3.2763543128967285, -6.291027545928955], + [-6.867825031280518, 7.407125473022461], + [2.991957902908325, -4.0067315101623535], + [-4.677847385406494, -7.212540626525879], + [2.279297113418579, 1.7757134437561035], + [-4.103756427764893, 6.247742652893066], + [-2.2014315128326416, 2.74802303314209], + [6.176535129547119, 7.636358737945557], + [3.635411024093628, -8.047013282775879], + [7.286449909210205, 8.647217750549316], + [-6.157470226287842, 7.220329761505127], + [7.390565395355225, -2.1463427543640137], + [-1.5633130073547363, 1.7424119710922241], + [8.16263484954834, -2.340698003768921], + [5.613238334655762, -1.2626724243164062], + [-2.4795844554901123, 2.1214561462402344], + [3.504192352294922, -6.531998157501221], + [-2.993938684463501, -2.5628373622894287], + [-4.665483474731445, -4.708966255187988], + [2.9161298274993896, -4.257543087005615], + [9.22419548034668, -2.3460328578948975], + [8.018010139465332, -2.3668034076690674], + [2.0960254669189453, 4.979901313781738], + [3.7059903144836426, -5.711043357849121], + [5.866814136505127, 7.72052526473999], + [-4.388935565948486, 3.743619680404663], + [7.2370686531066895, 8.641363143920898], + [3.004467010498047, -4.236765384674072], + [3.198183059692383, -4.77695369720459], + [2.287555456161499, -9.710962295532227], + [0.03256379812955856, 9.483936309814453], + [-0.8005130887031555, -2.2165520191192627], + [6.836485385894775, -2.0776240825653076], + [3.2925913333892822, 5.526564598083496], + [-6.084869861602783, -0.4061317443847656], + [-1.3855825662612915, 1.0964304208755493], + [-1.5908207893371582, -4.26479434967041], + [1.186566948890686, 0.14992816746234894], + [2.558628797531128, -9.026118278503418], + [-1.2075645923614502, -3.9845025539398193], + [-1.0388563871383667, 0.6908863186836243], + [-6.348569393157959, 7.947122573852539], + [1.7950327396392822, 4.774936199188232], + [2.757880210876465, -8.5425443649292], + [-3.8161327838897705, -6.503252983093262], + [7.685410499572754, -2.1304333209991455], + [-0.9396910071372986, 1.0716280937194824], + [-2.1682288646698, 1.9163892269134521], + [1.007612943649292, 11.983925819396973], + [6.103559970855713, 8.282268524169922], + [1.5086591243743896, -6.123984336853027], + [-0.12851369380950928, 9.608287811279297], + [-5.568644046783447, 6.045988082885742], + [1.0179109573364258, -5.579806804656982], + [2.5607855319976807, -6.526925086975098], + [4.15458869934082, -3.313924551010132], + [-2.3109915256500244, 2.0469512939453125], + [6.16390323638916, 7.886290073394775], + [1.7831209897994995, -7.338804721832275], + [1.4252116680145264, -7.602522850036621], + [7.316284656524658, -2.3160312175750732], + [3.554957151412964, -6.164946556091309], + [-2.3428704738616943, -4.589738368988037], + [-6.4781036376953125, -2.1665079593658447], + [-4.6389875411987305, -7.200916767120361], + [-2.9585773944854736, -3.423562526702881], + [-0.6885609030723572, -3.4425275325775146], + [2.0614354610443115, -7.935740947723389], + [0.7191227078437805, 11.201804161071777], + [-4.241288185119629, -1.233460545539856], + [3.7315499782562256, -7.689359188079834], + [9.021870613098145, -2.3302314281463623], + [-4.447600841522217, -6.441070079803467], + [-0.894528329372406, 1.5289119482040405], + [-0.13020676374435425, 9.482515335083008], + [7.566160678863525, -1.9726862907409668], + [-3.6694750785827637, 6.779394626617432], + [-5.222611427307129, -0.7268508672714233], + [-4.495924949645996, 5.060495376586914], + [-6.483362674713135, 7.545140743255615], + [3.022941827774048, -3.440876007080078], + [9.212837219238281, -2.4126124382019043], + [3.5509281158447266, -3.1530184745788574], + [6.7605156898498535, 8.266341209411621], + [7.012173175811768, -5.564486026763916], + [-5.439472675323486, 7.9615325927734375], + [-6.458065986633301, -0.5830469131469727], + [3.977179765701294, -7.363636016845703], + [-5.837738513946533, 6.889785289764404], + [3.1552093029022217, -3.8979828357696533], + [-2.5708494186401367, 1.9300220012664795], + [-1.544346570968628, 1.9697967767715454], + [2.0994784832000732, -6.590387344360352], + [-4.288788318634033, -6.542867660522461], + [6.10293436050415, -1.3507335186004639], + [0.2114836573600769, 10.63625717163086], + [-2.1460933685302734, 2.756059169769287], + [-2.1958372592926025, 2.2189557552337646], + [4.172008037567139, -6.686283588409424], + [3.8122353553771973, 0.8377950191497803], + [3.494286060333252, -3.7504403591156006], + [3.6453261375427246, -3.3073790073394775], + [8.06269359588623, -2.4269979000091553], + [8.401726722717285, -2.4255025386810303], + [-2.111548662185669, 1.9395577907562256], + [2.1246907711029053, 4.751808166503906], + [-2.4127860069274902, 2.16174054145813], + [2.475836992263794, -2.2183408737182617], + [5.951249599456787, -0.8109513521194458], + [3.310271978378296, -6.732085704803467], + [2.1747725009918213, -7.647528171539307], + [-4.85880708694458, -6.854241847991943], + [0.2443663477897644, 11.466909408569336], + [1.141732931137085, -6.935432434082031], + [-2.3643903732299805, 2.1593048572540283], + [0.897918164730072, 0.0762149840593338], + [3.73384428024292, -7.168453216552734], + [4.384798526763916, -4.093823432922363], + [7.641295433044434, -2.082669734954834], + [6.309387683868408, -1.63581383228302], + [3.282522439956665, -4.8001580238342285], + [-2.116894006729126, -2.314951181411743], + [-0.9867849349975586, 0.7211617827415466], + [8.250387191772461, -2.1514651775360107], + [-5.419849872589111, 0.20453202724456787], + [6.219407558441162, -2.923316717147827], + [0.10922514647245407, 9.078527450561523], + [3.0335185527801514, -4.107824325561523], + [3.1760220527648926, -6.788238048553467], + [-2.5222816467285156, 2.1778812408447266], + [6.730772495269775, -1.7399688959121704], + [-3.1062254905700684, 6.361124038696289], + [2.7628889083862305, -3.9429972171783447], + [2.821885347366333, -3.80375599861145], + [3.0038487911224365, -4.234376907348633], + [-2.311258554458618, 2.234961748123169], + [-3.1563074588775635, -4.61875057220459], + [6.903372764587402, -1.5883491039276123], + [4.0058817863464355, 5.489076614379883], + [7.969701290130615, -2.0171523094177246], + [4.756494045257568, 6.964230537414551], + [-6.201669692993164, 7.832271099090576], + [-2.8506438732147217, -3.797189235687256], + [2.2986624240875244, 7.194491386413574], + [-4.165625095367432, 4.561506271362305], + [3.1129612922668457, -4.77811336517334], + [-5.740816116333008, -2.7781403064727783], + [-6.382225513458252, -0.724177360534668], + [8.568070411682129, -2.365675210952759], + [0.2527276277542114, 11.105825424194336], + [6.863093852996826, 8.246930122375488], + [-2.026456832885742, 2.453043222427368], + [3.5521864891052246, -4.432745933532715], + [1.4157724380493164, -7.047373294830322], + [-1.139821171760559, 0.5391970276832581], + [3.52824330329895, -4.276264190673828], + [9.293856620788574, -2.4165713787078857], + [0.047796957194805145, 9.970718383789062], + [1.9931516647338867, 5.062091827392578], + [-0.11415351182222366, 12.508222579956055], + [-3.334757089614868, -4.168630599975586], + [2.0599677562713623, -6.390471458435059], + [0.07338058203458786, 11.877300262451172], + [0.06525402516126633, 9.662646293640137], + [-2.938459873199463, -3.6126558780670166], + [-2.2833306789398193, 2.187434434890747], + [7.3122382164001465, -1.916808009147644], + [0.08302056044340134, -1.4427319765090942], + [-4.453816890716553, -5.859622001647949], + [3.4987025260925293, -5.309752941131592], + [9.405888557434082, -2.4109432697296143], + [-1.3099288940429688, 1.412885069847107], + [-1.8702399730682373, 2.334050416946411], + [3.859896183013916, 1.7414051294326782], + [5.516669750213623, 7.751226425170898], + [-5.812609672546387, 0.032196756452322006], + [-2.7056691646575928, -3.7593600749969482], + [7.09860372543335, 8.749666213989258], + [-1.381735920906067, -3.772162914276123], + [2.780590772628784, 6.199654579162598], + [3.562694787979126, 1.6389950513839722], + [2.5752522945404053, -7.178016185760498], + [-5.061167240142822, 5.257800579071045], + [0.06232570856809616, 12.364324569702148], + [-5.417495250701904, -2.360010862350464], + [0.10163896530866623, 11.400732040405273], + [3.7868218421936035, -8.476868629455566], + [-2.1415152549743652, 2.175109386444092], + [10.719220161437988, -2.5223143100738525], + [4.972756862640381, 6.224119663238525], + [-1.9117465019226074, 1.8638626337051392], + [0.0812707468867302, 9.555845260620117], + [4.1193132400512695, 1.8369789123535156], + [6.71172571182251, -1.7789074182510376], + [-5.339982032775879, 4.308103084564209], + [0.12766003608703613, 12.245708465576172], + [-2.0753235816955566, -3.5496160984039307], + [-2.541534185409546, -3.1972405910491943], + [0.21869081258773804, 9.958837509155273], + [-5.864711284637451, 6.309956073760986], + [6.333917140960693, -5.548534393310547], + [-0.26300233602523804, 5.232402801513672], + [-2.768218994140625, 2.090399742126465], + [-3.073951482772827, -3.7220027446746826], + [-1.982017159461975, -1.658246397972107], + [-5.8142218589782715, 5.2411651611328125], + [3.6625595092773438, 1.3521963357925415], + [2.015846014022827, 5.36198091506958], + [3.441620349884033, -5.39684534072876], + [-3.650982618331909, -5.97608757019043], + [-0.3849875330924988, -0.839400053024292], + [-3.4600770473480225, -6.211952209472656], + [1.8382819890975952, -0.8679412603378296], + [2.5631067752838135, 1.3477603197097778], + [2.240432024002075, -8.271458625793457], + [3.576162576675415, -5.9774956703186035], + [-1.5178921222686768, 3.274833917617798], + [5.366489887237549, 7.201961517333984], + [6.409874439239502, 7.909134864807129], + [9.364745140075684, -2.3485710620880127], + [-4.271193027496338, 5.7273454666137695], + [0.11050205677747726, 12.763370513916016], + [2.922942638397217, -4.101884841918945], + [7.077238082885742, -1.3684085607528687], + [3.9823782444000244, -3.3791873455047607], + [-6.086689472198486, -1.1892606019973755], + [2.8930861949920654, -8.546388626098633], + [3.5775206089019775, -3.279904365539551], + [-1.780454158782959, -2.616807460784912], + [-4.047503471374512, -6.549760818481445], + [-3.806772470474243, 5.831027507781982], + [7.072296142578125, -1.6991382837295532], + [-1.9370170831680298, 2.262599229812622], + [-5.174926280975342, -2.9455063343048096], + [1.6464239358901978, -6.784640789031982], + [2.726116180419922, -2.363492727279663], + [-6.561272621154785, -0.5325766801834106], + [7.880948543548584, -2.342515707015991], + [-2.2510955333709717, -4.073924541473389], + [-5.430164337158203, -1.5014901161193848], + [3.405095338821411, -8.107391357421875], + [8.262370109558105, -2.1288652420043945], + [-4.414668083190918, -3.6123197078704834], + [-3.0297248363494873, -4.975823402404785], + [6.236331462860107, -1.359359860420227], + [0.0008277818560600281, 13.173198699951172], + [0.9561470150947571, -5.898654460906982], + [-4.443614482879639, 7.339552879333496], + [-6.436131954193115, -0.1632378101348877], + [4.0761003494262695, 7.0890092849731445], + [-2.3482351303100586, 1.6148406267166138], + [-5.271359443664551, -2.113917112350464], + [8.371383666992188, -2.1789278984069824], + [8.206780433654785, -2.1829583644866943], + [-5.614144802093506, 0.002891894429922104], + [-1.0337119102478027, 1.4138069152832031], + [-4.509675979614258, 4.704850196838379], + [1.4030616283416748, 4.490819931030273], + [-7.039891242980957, -0.3169541358947754], + [2.9758946895599365, -5.793148517608643], + [-4.835786819458008, -1.9188004732131958], + [3.2034108638763428, -6.342113494873047], + [6.454614162445068, 7.8054585456848145], + [8.402471542358398, -2.258744955062866], + [4.197378635406494, 1.7898563146591187], + [0.2126343846321106, 10.903597831726074], + [-2.394751787185669, 0.8880866765975952], + [-7.35712194442749, 0.16939163208007812], + [-4.75439977645874, -6.862521171569824], + [0.0633702203631401, 0.6940816640853882], + [-0.04292333871126175, 9.65963363647461], + [8.474358558654785, -2.4206533432006836], + [0.1252266764640808, 10.28170394897461], + [7.60055685043335, -2.2667596340179443], + [-2.157160758972168, 2.612231969833374], + [-2.2182891368865967, 2.579118251800537], + [-2.259627342224121, 2.2273058891296387], + [-1.4760794639587402, -3.9865434169769287], + [0.05014453083276749, -1.01616632938385], + [-5.887917995452881, -0.8805315494537354], + [0.18883204460144043, 8.454580307006836], + [4.501652240753174, 1.9126662015914917], + [3.4766781330108643, -6.802189826965332], + [1.8504185676574707, -7.274136543273926], + [-7.3011603355407715, -1.3030868768692017], + [-2.3035788536071777, -3.873242139816284], + [0.08715974539518356, 8.80555534362793], + [-2.304121494293213, 2.290066719055176], + [-2.3473405838012695, 2.1495862007141113], + [9.128035545349121, -2.580855369567871], + [-4.829899311065674, -5.951656341552734], + [8.927672386169434, -2.4004783630371094], + [3.7828891277313232, 1.6000503301620483], + [-5.047964096069336, -3.7635724544525146], + [8.794562339782715, -2.302790880203247], + [2.6418867111206055, 1.364733338356018], + [6.274896621704102, -1.408753752708435], + [-5.108957767486572, 6.493310928344727], + [-1.0835018157958984, 4.476714611053467], + [-4.802438259124756, -6.8439106941223145], + [-0.01238972693681717, 12.699421882629395], + [3.569997549057007, -3.2154955863952637], + [-6.699720859527588, 8.206437110900879], + [-0.027542896568775177, 12.80797290802002], + [7.226177215576172, -1.9021872282028198], + [0.11530648916959763, 9.702550888061523], + [5.91873836517334, -1.2395639419555664], + [3.083078622817993, -1.842117190361023], + [-5.064558506011963, 3.4426698684692383], + [-1.7249754667282104, -0.4054384231567383], + [7.776913166046143, -2.001307249069214], + [2.5712506771087646, 5.824309349060059], + [-2.243885040283203, 1.458414077758789], + [3.184413433074951, -6.655191421508789], + [-2.2499794960021973, 2.941441059112549], + [4.066915035247803, -3.5350148677825928], + [-1.95473313331604, 2.595975875854492], + [9.134225845336914, -2.3265597820281982], + [-4.0961151123046875, -3.182967185974121], + [3.3066580295562744, -6.34054708480835], + [3.2655975818634033, -6.113864421844482], + [2.893120527267456, -4.01482629776001], + [-7.195289134979248, -0.05553114786744118], + [0.975408136844635, 1.7737587690353394], + [3.342184543609619, -6.490894317626953], + [8.116920471191406, -2.212686061859131], + [0.8546083569526672, -0.8929967284202576], + [-0.6071036458015442, -2.947613477706909], + [9.096524238586426, -2.3418591022491455], + [-5.263325214385986, 5.474327087402344], + [6.489105224609375, -1.304167628288269], + [2.696580648422241, 1.0622729063034058], + [7.568932056427002, -2.094823122024536], + [-0.35213959217071533, -1.609886646270752], + [2.7941043376922607, -8.512313842773438], + [-5.0965256690979, -0.08970415592193604], + [3.3143808841705322, 1.1416176557540894], + [0.01086144894361496, 12.561176300048828], + [8.130764961242676, -2.281797170639038], + [-5.316610813140869, -2.394134044647217], + [10.875652313232422, -2.4971611499786377], + [6.107570171356201, -4.409651756286621], + [-5.195980548858643, 5.139832496643066], + [-4.204720973968506, -1.776013731956482], + [-3.156456470489502, -2.6926798820495605], + [2.946707010269165, -3.5615341663360596], + [-7.484425067901611, 9.001896858215332], + [3.2413864135742188, -3.0261690616607666], + [8.58259105682373, -2.1995441913604736], + [8.200337409973145, -2.1944527626037598], + [-2.2416632175445557, 2.449342966079712], + [6.529549598693848, -4.257871627807617], + [-2.0730202198028564, 2.473895311355591], + [-2.3499674797058105, 2.1950199604034424], + [-3.590123176574707, -1.277329444885254], + [2.815286874771118, -3.9019646644592285], + [3.1055829524993896, -8.124662399291992], + [3.4664571285247803, -3.624272346496582], + [1.3710401058197021, -7.518106937408447], + [2.3612375259399414, -2.116722345352173], + [-5.331821918487549, -4.820686340332031], + [-4.357189655303955, -3.771644115447998], + [-5.4591965675354, 0.8618643283843994], + [3.4549343585968018, -8.210668563842773], + [2.9204185009002686, -3.3593146800994873], + [1.175788402557373, 3.449537754058838], + [1.3500758409500122, -6.975043296813965], + [-4.852548122406006, -3.499433755874634], + [-3.9437081813812256, -2.8688509464263916], + [8.308115005493164, -2.237703561782837], + [-3.3703134059906006, 5.063611030578613], + [0.038325004279613495, 13.120000839233398], + [0.047648780047893524, 12.818181037902832], + [1.3634006977081299, -7.7504777908325195], + [-0.5761376023292542, -1.4742799997329712], + [5.569716930389404, -2.0849521160125732], + [8.261019706726074, -2.188014268875122], + [1.0706707239151, -0.45290806889533997], + [6.991586208343506, -2.6487629413604736], + [3.670743942260742, 6.444808006286621], + [-3.482933282852173, -0.40692412853240967], + [0.19908952713012695, 10.416522026062012], + [-4.8322529792785645, -6.153294563293457], + [0.13492536544799805, 10.585624694824219], + [-2.6229190826416016, 1.4251857995986938], + [-5.052014350891113, 6.2999982833862305], + [-4.083734512329102, -3.462848663330078], + [9.774420738220215, -2.486729621887207], + [-4.152098655700684, -5.3872761726379395], + [3.6257383823394775, -3.3040547370910645], + [-4.631270885467529, -7.574501037597656], + [-2.7311272621154785, 1.5759541988372803], + [-1.242700219154358, -3.419097661972046], + [4.351744174957275, -3.7191507816314697], + [2.8644566535949707, -3.3061938285827637], + [8.42101764678955, -2.362213373184204], + [0.6033195853233337, -0.2128414511680603], + [-3.747797966003418, -3.0173656940460205], + [-4.290797233581543, 6.064240455627441], + [-0.07432980090379715, 9.498247146606445], + [2.6480042934417725, -5.454260349273682], + [3.1428871154785156, -4.521279811859131], + [2.4296624660491943, -2.9642302989959717], + [-1.0975663661956787, -3.186455488204956], + [3.598355770111084, -3.41342830657959], + [5.7643723487854, 7.562744140625], + [4.376892566680908, -8.048919677734375], + [2.2204229831695557, 5.030745506286621], + [0.09427320212125778, 12.032722473144531], + [3.0266635417938232, -0.8108234405517578], + [-5.743727207183838, -0.3065696954727173], + [7.562072277069092, -2.5113275051116943], + [3.7768826484680176, -4.118576526641846], + [0.10547816008329391, 10.573160171508789], + [9.46927547454834, -2.3267431259155273], + [-4.433857440948486, -6.645796775817871], + [5.068857192993164, -0.6281112432479858], + [1.9007577896118164, 4.977588176727295], + [3.9228527545928955, 5.387414932250977], + [0.023522429168224335, 12.249130249023438], + [3.0435924530029297, -6.396237850189209], + [-2.1472342014312744, 2.476372480392456], + [-5.0947699546813965, -7.3191070556640625], + [3.9682037830352783, -2.9140961170196533], + [9.048066139221191, -2.400749444961548], + [2.4998056888580322, -9.159673690795898], + [4.778346538543701, -3.6433486938476562], + [2.0270473957061768, 2.640150547027588], + [2.090106248855591, 4.820835113525391], + [5.847770690917969, -2.5604841709136963], + [2.3336691856384277, 2.277512788772583], + [3.501499891281128, -8.559965133666992], + [2.541029691696167, -6.152360916137695], + [-5.48245096206665, 5.156747817993164], + [-1.7812691926956177, 1.5718324184417725], + [9.198735237121582, -2.360011339187622], + [-5.308003902435303, 2.161611795425415], + [9.25664234161377, -2.4170982837677], + [2.380082845687866, 5.232275009155273], + [-4.607820510864258, -2.462859630584717], + [3.3650007247924805, -3.952828884124756], + [5.779323101043701, -5.265097618103027], + [5.167644500732422, 7.193152904510498], + [-2.1096925735473633, -3.2130746841430664], + [6.694235324859619, -1.3766446113586426], + [3.3278045654296875, -5.113545894622803], + [5.241961479187012, 7.530806541442871], + [5.711280345916748, -3.0461008548736572], + [2.5222280025482178, 5.522076606750488], + [6.447494983673096, 8.103515625], + [0.2346016764640808, 8.71670913696289], + [-4.656723499298096, -1.8537019491195679], + [-2.785073757171631, -4.105661392211914], + [-0.05656880885362625, 9.594606399536133], + [-2.862330675125122, -0.88370281457901], + [-5.223233699798584, -0.5380850434303284], + [0.1351451873779297, 9.534523963928223], + [1.41787850856781, 1.7055810689926147], + [-3.9134268760681152, -5.42653751373291], + [-2.1547982692718506, 2.3296563625335693], + [3.403322458267212, 4.931713104248047], + [1.218015432357788, 0.727581262588501], + [0.04203485697507858, 9.562906265258789], + [0.5069743990898132, -1.0276484489440918], + [2.816182851791382, -3.708369493484497], + [8.966157913208008, -2.3328115940093994], + [5.987396717071533, 8.091934204101562], + [-6.80262565612793, 8.048373222351074], + [0.1706179976463318, 11.351282119750977], + [-1.9891120195388794, 2.18172025680542], + [-2.3083364963531494, -1.1563482284545898], + [-4.340989589691162, -6.9314470291137695], + [-0.12374619394540787, -1.6689764261245728], + [8.072554588317871, -2.2116916179656982], + [3.5291197299957275, -8.456239700317383], + [4.886939525604248, 6.587369918823242], + [7.335284233093262, -1.721922755241394], + [3.0261995792388916, 4.712070941925049], + [2.827817678451538, -4.027632713317871], + [-0.06301707774400711, 14.412683486938477], + [2.2242472171783447, 2.42501163482666], + [0.109271340072155, 11.997962951660156], + [0.15164393186569214, 11.5103759765625], + [-4.8594560623168945, 4.619454383850098], + [-4.9165472984313965, 5.756244659423828], + [2.1895182132720947, 3.0690736770629883], + [0.09247206896543503, 12.544175148010254], + [2.3532190322875977, 4.4037933349609375], + [-3.895528554916382, -6.3823161125183105], + [-1.9771323204040527, 2.223816156387329], + [-0.04620439559221268, 12.866765022277832], + [2.355421304702759, -6.058961868286133], + [-1.665544867515564, -1.0432583093643188], + [5.461512088775635, 7.659379482269287], + [6.524081707000732, 8.049001693725586], + [-2.2409403324127197, 2.136852741241455], + [10.312275886535645, -2.370265483856201], + [-1.0805494785308838, 1.761935830116272], + [-4.198885440826416, 3.5709428787231445], + [-1.0915896892547607, 0.836557149887085], + [-4.94906759262085, -5.5327839851379395], + [-2.2470130920410156, 0.9492959380149841], + [0.02557002753019333, 12.789091110229492], + [-6.545997142791748, 7.640043258666992], + [7.235323905944824, 8.85385513305664], + [-4.617027759552002, -3.2708146572113037], + [-4.373987674713135, -6.933162689208984], + [8.396929740905762, -2.564267873764038], + [8.028173446655273, -2.250678777694702], + [0.048319511115550995, 12.923266410827637], + [6.511718273162842, -2.753092050552368], + [1.6304941177368164, 4.809980392456055], + [-4.853720188140869, 5.28420352935791], + [3.4284112453460693, -4.3397216796875], + [3.8872363567352295, 2.396902084350586], + [9.210916519165039, -2.3033413887023926], + [3.6025867462158203, 1.5886870622634888], + [-0.01808745414018631, 12.11713981628418], + [1.1768823862075806, -5.832492828369141], + [4.403672695159912, -4.96816349029541], + [-0.45718759298324585, -5.338132858276367], + [-2.3982300758361816, 3.0731914043426514], + [2.4565417766571045, -2.000734329223633], + [2.0484325885772705, 1.8111051321029663], + [-3.8958044052124023, -1.3001453876495361], + [0.18761664628982544, 11.037606239318848], + [2.785343885421753, 1.9525870084762573], + [-4.950900554656982, 4.488593101501465], + [5.491713523864746, 7.271467208862305], + [-2.087902545928955, 2.4121668338775635], + [-0.5456129908561707, 9.351131439208984], + [0.3556262254714966, 10.279144287109375], + [5.006865978240967, -3.9024248123168945], + [2.403696298599243, -2.017605781555176], + [0.8206107020378113, -0.34758132696151733], + [8.560027122497559, -2.330336570739746], + [-4.531503677368164, -5.643205642700195], + [2.4519736766815186, 4.56307315826416], + [-3.456301212310791, -3.409487724304199], + [3.8634557723999023, -3.809816360473633], + [10.800675392150879, -2.568404197692871], + [2.134092092514038, 5.5251264572143555], + [0.14733707904815674, 12.162497520446777], + [4.266246795654297, -3.055598020553589], + [2.574458599090576, 5.707767009735107], + [-4.280004024505615, -6.31430721282959], + [7.806169509887695, -2.158508062362671], + [3.4485111236572266, -5.998275279998779], + [3.7283287048339844, -4.615205764770508], + [-4.306326866149902, -6.456117630004883], + [0.07637303322553635, 9.495328903198242], + [4.944005489349365, 7.584257125854492], + [-7.066138744354248, 8.230399131774902], + [-0.5398779511451721, -1.3952745199203491], + [0.13772493600845337, 11.433460235595703], + [0.3898794651031494, 0.4305179715156555], + [0.244978666305542, 10.700691223144531], + [-4.810482501983643, -5.650380611419678], + [8.81861686706543, -2.23876953125], + [0.13201183080673218, 9.70403003692627], + [2.337484121322632, 4.427367687225342], + [9.304865837097168, -2.4077141284942627], + [2.8311104774475098, -10.050268173217773], + [-4.5175700187683105, -3.730835437774658], + [-3.940553665161133, -4.685811996459961], + [-4.71765661239624, -7.439855575561523], + [5.38714599609375, -0.9806353449821472], + [-5.219520568847656, -0.3223114013671875], + [-3.954662322998047, 5.61566686630249], + [2.5866801738739014, 4.337080955505371], + [-2.9079530239105225, 5.824111461639404], + [-4.745604038238525, -7.153585433959961], + [10.450196266174316, -2.366887331008911], + [-1.2717735767364502, 1.244388461112976], + [1.9819648265838623, 5.483450889587402], + [1.108678936958313, 2.9503724575042725], + [-4.0075364112854, -6.319677352905273], + [3.7627270221710205, -3.407884120941162], + [10.050463676452637, -2.4525437355041504], + [-5.3011393547058105, -3.0817935466766357], + [-6.324066638946533, 7.791952133178711], + [5.485676288604736, -4.948199272155762], + [10.093862533569336, -2.523811101913452], + [7.385899543762207, 8.976131439208984], + [2.3893980979919434, 6.208083152770996], + [-1.8703150749206543, -4.120527267456055], + [8.727248191833496, -2.385385274887085], + [2.4585487842559814, -8.335441589355469], + [-2.448223829269409, -4.134670734405518], + [-2.460841655731201, 2.9330101013183594], + [2.480891466140747, -3.5031306743621826], + [-0.09356267005205154, 12.684977531433105], + [-7.576854228973389, -0.3707542419433594], + [6.792433738708496, -2.686857223510742], + [-2.9757864475250244, -2.2802836894989014], + [2.7844324111938477, -7.200765609741211], + [-0.1770540475845337, -0.980758011341095], + [5.29617977142334, -0.7996673583984375], + [-1.0200046300888062, 9.412220001220703], + [-4.881441593170166, -2.5138752460479736], + [0.007896654307842255, 9.266866683959961], + [-4.343144416809082, -6.516746520996094], + [-4.5005388259887695, -7.151650905609131], + [2.7395951747894287, -8.363637924194336], + [0.24666684865951538, 10.91786003112793], + [9.015563011169434, -2.404776096343994], + [-4.8705949783325195, -3.5483016967773438], + [8.885710716247559, -2.494328737258911], + [-2.377328634262085, 2.235211133956909], + [4.046872615814209, -3.688136339187622], + [-3.229795217514038, -1.374382495880127], + [3.419034719467163, -7.414456367492676], + [4.791731357574463, -3.207639694213867], + [4.5844035148620605, -4.2121429443359375], + [-3.0900816917419434, -3.4992659091949463], + [-2.942267656326294, -5.249456882476807], + [2.974632978439331, 4.529993057250977], + [3.206041097640991, -7.83609676361084], + [1.5955885648727417, -7.992173194885254], + [-4.676802635192871, -6.536853790283203], + [-2.0605967044830322, -3.7405309677124023], + [5.941842555999756, 7.199110984802246], + [2.932178258895874, -5.14910364151001], + [-0.25958704948425293, -0.9090615510940552], + [3.533980131149292, -3.2434589862823486], + [-2.761348009109497, -0.9740311503410339], + [-4.85606575012207, -1.6362320184707642], + [3.0997278690338135, -8.880996704101562], + [2.1334712505340576, 2.460137367248535], + [1.8182073831558228, -7.602844715118408], + [-2.2717881202697754, 2.236570119857788], + [-4.485188007354736, 5.098284721374512], + [-2.721856117248535, 2.793999433517456], + [-2.194444417953491, 2.4028947353363037], + [6.001247882843018, -1.6120874881744385], + [2.587134599685669, 1.7553198337554932], + [2.330287218093872, -7.166902542114258], + [0.1874740719795227, 12.414694786071777], + [3.160311460494995, -3.969616174697876], + [-2.504899024963379, -2.6107118129730225], + [-4.141556262969971, -4.3575053215026855], + [5.365975856781006, -0.7670580744743347], + [-2.0527164936065674, -4.904998779296875], + [-0.07045633345842361, 14.135587692260742], + [1.9070587158203125, 3.5349180698394775], + [2.8005688190460205, -8.045741081237793], + [-5.949492931365967, 2.564594030380249], + [-0.01596105843782425, 9.596517562866211], + [3.193373441696167, -4.430985450744629], + [2.9252493381500244, -8.284470558166504], + [5.460815906524658, -1.1089898347854614], + [1.6865571737289429, 5.685100555419922], + [-3.2071895599365234, -2.693664312362671], + [7.367947101593018, -1.8230959177017212], + [-0.02215225249528885, -3.4574291706085205], + [-5.3266143798828125, 4.469171524047852], + [7.372082710266113, 8.772862434387207], + [3.0492353439331055, -8.160484313964844], + [-4.26494836807251, 3.817467451095581], + [5.980961799621582, 7.529285430908203], + [-0.6035366654396057, -1.6235321760177612], + [0.47955983877182007, -0.65160071849823], + [-0.017143793404102325, 12.303641319274902], + [6.769402980804443, 8.272510528564453], + [-3.8834567070007324, -1.6917909383773804], + [4.492666721343994, 1.63203763961792], + [5.880600452423096, -3.0564351081848145], + [-6.413632869720459, 7.988685607910156], + [-2.0757172107696533, 2.2450900077819824], + [10.844426155090332, -2.5284788608551025], + [7.9275689125061035, -2.664677858352661], + [3.2952635288238525, 1.3942679166793823], + [10.871182441711426, -2.5266194343566895], + [-4.815597057342529, -3.475196123123169], + [4.154463291168213, -3.9832475185394287], + [-0.3292315602302551, -1.7276227474212646], + [2.706359624862671, -3.8288729190826416], + [-4.4828290939331055, -3.5159008502960205], + [-2.2131636142730713, 2.398232936859131], + [0.21185225248336792, 10.50748062133789], + [-1.3691515922546387, -2.584874391555786], + [-4.511818885803223, 5.131173610687256], + [1.9282429218292236, -6.5942487716674805], + [-6.624966144561768, 6.793518543243408], + [-0.8922349810600281, 0.7079046964645386], + [2.100299596786499, 4.99452543258667], + [6.313320636749268, 8.18686294555664], + [0.48313337564468384, 10.819252967834473], + [2.7334067821502686, -3.9256346225738525], + [-2.257918357849121, 0.7912702560424805], + [0.11377155035734177, 9.896756172180176], + [3.19376802444458, 1.3360456228256226], + [-5.572390556335449, 5.293471813201904], + [2.3572030067443848, 5.100288391113281], + [1.9758763313293457, 0.332946240901947], + [-2.920602560043335, -3.902503728866577], + [-1.7707340717315674, -0.9416375160217285], + [2.7446582317352295, -3.8746345043182373], + [8.355376243591309, -2.2624588012695312], + [-0.03814368695020676, -1.6279234886169434], + [3.3776063919067383, -4.762214660644531], + [-1.7298874855041504, 2.1458780765533447], + [-3.6615450382232666, -2.549248456954956], + [-0.04860157519578934, 12.897314071655273], + [-4.188236713409424, -7.027915954589844], + [-1.201507329940796, -0.7906418442726135], + [2.7996771335601807, -4.023110389709473], + [3.265289545059204, -8.44698429107666], + [1.805178165435791, 5.300776481628418], + [1.7366058826446533, -7.8666887283325195], + [-3.506486654281616, 3.6078343391418457], + [-2.1134517192840576, 2.3577568531036377], + [-0.04405505210161209, 12.433013916015625], + [3.1131532192230225, -4.265294075012207], + [-3.8280138969421387, -5.838559627532959], + [8.29312801361084, -2.321462392807007], + [-4.577024936676025, 4.583454132080078], + [3.0117452144622803, -4.822967529296875], + [3.0288119316101074, -3.8688666820526123], + [4.141867160797119, 1.8562873601913452], + [8.517376899719238, -2.3795883655548096], + [-3.4199025630950928, -4.941030502319336], + [-5.157266616821289, -0.3406943082809448], + [-2.3029117584228516, -4.0026936531066895], + [0.041985444724559784, 9.579219818115234], + [-0.0723763182759285, 9.64605712890625], + [-4.141031265258789, 4.9276533126831055], + [2.6545045375823975, 0.4916609525680542], + [0.15212523937225342, 10.611808776855469], + [1.6340912580490112, -4.766952037811279], + [-2.144399881362915, 0.045325811952352524], + [-2.3644683361053467, 1.1598951816558838], + [0.07802694290876389, 12.50894546508789], + [4.407952785491943, -4.416043281555176], + [-2.4209530353546143, 1.9512981176376343], + [-4.01157808303833, -6.773393630981445], + [7.36494779586792, -1.8679453134536743], + [0.7872136235237122, -5.469294548034668], + [2.661879777908325, -6.606590270996094], + [7.809657573699951, -2.0195324420928955], + [6.327692031860352, 8.492918968200684], + [5.280238628387451, 7.661908149719238], + [-0.029233939945697784, 9.28403091430664], + [2.8744056224823, -4.09584903717041], + [-4.6692681312561035, -1.5892672538757324], + [8.819548606872559, -2.462451934814453], + [0.22742235660552979, 11.167320251464844], + [-4.176650047302246, 6.384255886077881], + [-0.06581289321184158, 12.967307090759277], + [-4.894019603729248, -4.187567710876465], + [4.624326229095459, -3.7657997608184814], + [-2.710594654083252, -4.418668270111084], + [-7.5229878425598145, -0.007095221430063248], + [2.956381320953369, -9.41207504272461], + [1.9404213428497314, -8.438316345214844], + [7.932619571685791, -2.184629201889038], + [9.000761985778809, -2.3739588260650635], + [-2.5456225872039795, -4.451565742492676], + [-0.38024622201919556, -1.706809163093567], + [7.635265827178955, 9.01505184173584], + [-5.979809284210205, 4.5814738273620605], + [-2.561795473098755, 1.994585394859314], + [2.2264492511749268, 2.8026862144470215], + [3.1228725910186768, -4.153250694274902], + [3.074284076690674, -8.452329635620117], + [-4.189305305480957, -6.918107986450195], + [-3.901710271835327, 3.9156694412231445], + [-2.055734634399414, 2.264958143234253], + [-1.0372498035430908, -3.82570743560791], + [2.813342809677124, -8.670422554016113], + [-2.789289951324463, 2.6717376708984375], + [2.9765777587890625, -4.028543949127197], + [2.912792682647705, 2.258110284805298], + [2.4971230030059814, -8.162784576416016], + [0.20235568284988403, 11.091558456420898], + [-5.2370524406433105, 6.638789653778076], + [2.734433889389038, -9.893586158752441], + [-0.076236791908741, 14.390380859375], + [-4.129076957702637, -5.758602619171143], + [-2.5870039463043213, -2.8677656650543213], + [-1.2198081016540527, -2.5023133754730225], + [6.2206549644470215, 8.049829483032227], + [5.792405605316162, -1.2208877801895142], + [3.1191513538360596, -7.7035346031188965], + [-4.246224880218506, -1.8236852884292603], + [9.584453582763672, -2.4175288677215576], + [-5.633601665496826, 5.083838939666748], + [0.2656975984573364, 0.05684942379593849], + [3.229562520980835, -5.192702293395996], + [-0.03782046586275101, 8.930878639221191], + [0.14152216911315918, 12.090551376342773], + [-3.0578248500823975, 6.438751697540283], + [6.762312889099121, -2.170936346054077], + [7.476961612701416, 8.918622970581055], + [-5.173472881317139, -7.571062088012695], + [4.17258882522583, 1.9967888593673706], + [6.71489143371582, -5.089816570281982], + [0.6581839323043823, -1.2209715843200684], + [-2.531172513961792, 2.1626524925231934], + [9.752066612243652, -2.3887414932250977], + [-7.711151599884033, 0.06556618213653564], + [0.07165902107954025, 12.242301940917969], + [0.17271679639816284, 9.815736770629883], + [0.7859213948249817, 10.732430458068848], + [5.975846290588379, -1.880599856376648], + [2.4587700366973877, -9.087587356567383], + [5.344720840454102, -1.2085436582565308], + [-2.12419056892395, 2.827071189880371], + [-4.483577251434326, -7.062505722045898], + [-2.0050132274627686, 2.2063002586364746], + [-4.970981597900391, 5.147818088531494], + [3.825138568878174, -7.396239280700684], + [8.782599449157715, -2.2417895793914795], + [-4.7293877601623535, -3.2390592098236084], + [5.650944232940674, 8.044109344482422], + [-3.151780605316162, -3.779479742050171], + [3.8082940578460693, -3.21301007270813], + [-0.6164740920066833, -2.547351121902466], + [-5.331207752227783, 1.342065453529358], + [2.6310060024261475, -7.819133758544922], + [-4.449824810028076, -6.832952499389648], + [-2.7644476890563965, 1.6022535562515259], + [1.1211881637573242, -7.063166618347168], + [0.03648214787244797, 13.003101348876953], + [-4.7286376953125, 1.658408761024475], + [3.1358516216278076, -4.4494476318359375], + [3.0084614753723145, -4.298423767089844], + [4.288283348083496, 1.8973287343978882], + [-0.0695609524846077, 13.283592224121094], + [2.335364818572998, -8.458512306213379], + [-2.8053576946258545, 1.5509564876556396], + [-0.22943580150604248, -1.5520764589309692], + [7.035977840423584, -4.651511192321777], + [-2.0610063076019287, 0.7650641202926636], + [-3.215123414993286, 3.4474549293518066], + [-2.2669849395751953, 2.8130476474761963], + [-2.396336793899536, 1.455635666847229], + [-4.13440465927124, -6.086616039276123], + [-0.2658707797527313, -2.2401859760284424], + [6.4375176429748535, 8.341157913208008], + [3.4048779010772705, 7.269017696380615], + [-0.08502871543169022, 13.252090454101562], + [0.19169914722442627, 10.32105541229248], + [1.7648952007293701, -7.803569316864014], + [-5.482299327850342, 4.790981292724609], + [5.636577129364014, -4.212623119354248], + [-4.738020896911621, 3.7359535694122314], + [-1.0277752876281738, -3.5457351207733154], + [4.230581760406494, -3.623701810836792], + [2.5869269371032715, -8.623161315917969], + [3.1036970615386963, -4.406779766082764], + [3.6241190433502197, -5.905170440673828], + [-0.03715486079454422, 13.259710311889648], + [0.8141918778419495, 10.62232494354248], + [2.286421060562134, -7.62074089050293], + [-1.8685685396194458, 0.47088003158569336], + [-4.592932224273682, 5.509240627288818], + [0.028612785041332245, 12.735864639282227], + [-2.37788724899292, 2.2610764503479004], + [-3.813955783843994, -3.280595064163208], + [-7.906854152679443, 0.09792542457580566], + [-0.815579891204834, 1.162380337715149], + [1.8471060991287231, -7.453789710998535], + [8.567290306091309, -2.2977168560028076], + [0.23771989345550537, 11.195435523986816], + [8.418450355529785, -2.2283527851104736], + [8.590280532836914, -2.3322207927703857], + [7.995742321014404, -4.1843109130859375], + [-2.761549472808838, 0.19055479764938354], + [0.11412381380796432, 9.818653106689453], + [4.8099684715271, -4.524148941040039], + [10.078763008117676, -2.363939046859741], + [-1.3318337202072144, -0.6853838562965393], + [-4.83885383605957, -2.783484697341919], + [-2.096799612045288, 2.421281099319458], + [-2.390286684036255, 2.386798858642578], + [7.5410380363464355, -1.6708509922027588], + [9.842252731323242, -2.428382396697998], + [0.1818649172782898, 10.204044342041016], + [4.410051345825195, 1.8881429433822632], + [-7.225064754486084, -0.04399419203400612], + [8.26400089263916, -2.2729547023773193], + [-0.02078581601381302, 8.672418594360352], + [-2.112095355987549, 2.7897794246673584], + [2.9892501831054688, -7.846146106719971], + [2.4306602478027344, -0.5781835913658142], + [-3.8228399753570557, 3.659001588821411], + [-0.035115428268909454, 13.141609191894531], + [3.197565793991089, 3.9307854175567627], + [5.879087924957275, -2.4696547985076904], + [-3.02636456489563, -3.03090763092041], + [2.5005486011505127, -3.4569501876831055], + [-3.6907124519348145, 5.058650970458984], + [2.843585968017578, -4.022486686706543], + [2.2598514556884766, -3.8707597255706787], + [3.7093758583068848, 2.0467922687530518], + [-4.949389457702637, -2.148198127746582], + [5.606577396392822, 7.438446998596191], + [-0.5472770929336548, -2.243410348892212], + [-3.1378490924835205, -5.385042190551758], + [7.9089250564575195, -2.9327175617218018], + [2.750157117843628, -7.531012058258057], + [9.353388786315918, -2.4215548038482666], + [3.1932156085968018, -6.510125160217285], + [4.118825435638428, -7.8284525871276855], + [2.4293081760406494, 2.6981585025787354], + [2.359395742416382, -7.707016944885254], + [-1.6940600872039795, 1.8141623735427856], + [7.379054546356201, 8.978564262390137], + [9.950611114501953, -2.434953451156616], + [-3.259732484817505, -5.227128982543945], + [7.767741680145264, 9.221760749816895], + [-3.074249029159546, -2.8924920558929443], + [-4.464372158050537, -6.373899936676025], + [-3.8211557865142822, -3.175783395767212], + [-4.238177299499512, 5.381258964538574], + [-0.029541321098804474, 14.791797637939453], + [1.52720046043396, 1.2697261571884155], + [-4.584307670593262, -6.409829139709473], + [8.279231071472168, -2.3867428302764893], + [-6.1421942710876465, 7.028928756713867], + [-4.046917915344238, 3.802319288253784], + [2.498396873474121, 5.585610389709473], + [3.540508270263672, -7.7725372314453125], + [-2.8170621395111084, -2.9555585384368896], + [-3.9526572227478027, -4.430479049682617], + [-2.6437017917633057, 3.035940408706665], + [-0.5014182925224304, 9.430636405944824], + [-2.031742811203003, -0.9277732968330383], + [-1.0935916900634766, 5.852922439575195], + [1.3297992944717407, -5.904847145080566], + [-4.656789779663086, -3.639028310775757], + [2.979006052017212, 1.9466619491577148], + [2.51046085357666, 3.461205244064331], + [2.35760235786438, 5.012537002563477], + [5.749144077301025, 7.060670852661133], + [-4.109511375427246, 5.435834884643555], + [-1.3953300714492798, 1.8940097093582153], + [1.4047787189483643, -7.437638282775879], + [1.6079840660095215, -7.969069004058838], + [0.15968340635299683, 9.685453414916992], + [2.817361354827881, -8.206831932067871], + [0.1253224015235901, 13.480833053588867], + [1.6830023527145386, -8.192216873168945], + [-2.8036344051361084, 2.218658208847046], + [7.697160243988037, -2.4111745357513428], + [4.010143756866455, 1.4995228052139282], + [3.206307888031006, -8.322978019714355], + [-3.997570514678955, 4.94037389755249], + [-4.867712020874023, -7.183137893676758], + [2.893308401107788, -4.028528690338135], + [3.136432409286499, -4.479404449462891], + [3.7879931926727295, -7.090874671936035], + [-3.8186545372009277, -0.8122426271438599], + [2.7807109355926514, -3.7936198711395264], + [11.297333717346191, -2.5394983291625977], + [3.2829058170318604, 1.2961269617080688], + [2.2002289295196533, -8.456792831420898], + [-6.314564228057861, 0.4444824457168579], + [3.5727603435516357, -2.4754745960235596], + [-2.623575448989868, 1.986855149269104], + [4.009802341461182, 1.8773672580718994], + [3.8420767784118652, -6.8464460372924805], + [5.500279903411865, 7.786931991577148], + [-3.2437806129455566, -5.087060451507568], + [-3.1939079761505127, -5.872999668121338], + [-4.6593475341796875, -1.3647788763046265], + [-5.386026859283447, -3.231581926345825], + [3.0820720195770264, 1.51172935962677], + [-0.9931560158729553, 6.410604000091553], + [-1.1636632680892944, 0.7489760518074036], + [9.92752742767334, -2.494906425476074], + [3.571733236312866, 0.5506572127342224], + [-3.714179277420044, -5.390044212341309], + [9.751062393188477, -2.3729047775268555], + [5.902877330780029, -5.512248992919922], + [-4.325852870941162, -6.000028610229492], + [-2.496074914932251, 1.8063132762908936], + [5.364999294281006, -2.937798261642456], + [6.449766635894775, 8.127967834472656], + [11.5871000289917, -2.5767228603363037], + [0.4225085973739624, -0.9261688590049744], + [3.0175886154174805, -7.94014310836792], + [3.036761522293091, -7.9351091384887695], + [4.390448093414307, -2.110755443572998], + [5.638084888458252, -2.4612300395965576], + [-2.7538492679595947, -4.1113739013671875], + [0.17841249704360962, 11.697651863098145], + [-4.335693836212158, -2.7583959102630615], + [-5.746171474456787, -0.04002690687775612], + [5.361325263977051, 7.5367231369018555], + [-2.951679229736328, 1.7312642335891724], + [7.889461994171143, -1.9928761720657349], + [7.173462867736816, -2.5212597846984863], + [2.381883144378662, 5.111519813537598], + [-4.9860711097717285, -3.1159133911132812], + [1.542952060699463, -0.04082800820469856], + [7.13573694229126, -6.312338352203369], + [3.3606555461883545, 4.038276672363281], + [-4.155971050262451, 5.140176773071289], + [9.788883209228516, -2.2645013332366943], + [3.96539044380188, 1.492600440979004], + [2.8668930530548096, -4.03408145904541], + [-4.269735813140869, -1.4921611547470093], + [4.212710857391357, 0.13164451718330383], + [2.09519624710083, 4.923048973083496], + [-4.2512898445129395, -6.015084266662598], + [1.4970802068710327, -7.631645679473877], + [0.19323688745498657, 10.653756141662598], + [0.1536584198474884, -1.3096109628677368], + [3.061568260192871, -4.333125114440918], + [-5.1177849769592285, -0.8884167671203613], + [2.6923015117645264, -6.417614459991455], + [-4.951538562774658, -2.3818342685699463], + [3.005387544631958, -4.207004547119141], + [2.1929941177368164, -4.946515083312988], + [-1.9825730323791504, -3.7221920490264893], + [3.3573288917541504, -8.137470245361328], + [1.8227907419204712, -6.519350051879883], + [0.8006016612052917, -4.29213809967041], + [-1.9135982990264893, 2.551311492919922], + [4.883327484130859, -3.7360246181488037], + [3.0294435024261475, -4.273888111114502], + [3.7031524181365967, -3.159503221511841], + [0.3762965798377991, 11.228048324584961], + [-4.779066562652588, -7.122745513916016], + [3.3646228313446045, -6.311899662017822], + [2.72448992729187, -3.939467191696167], + [3.0884320735931396, -4.263576984405518], + [-0.01893002539873123, 12.519647598266602], + [-2.786020517349243, 2.1131157875061035], + [-5.206704616546631, 7.491634845733643], + [11.257261276245117, -2.6251256465911865], + [0.32595378160476685, -0.6932196021080017], + [2.572721004486084, 1.6276130676269531], + [2.003713369369507, 0.5524150729179382], + [0.19097578525543213, 11.654945373535156], + [-7.75436544418335, -0.9972279071807861], + [-4.580017566680908, 5.053240776062012], + [-4.273904323577881, -2.6762633323669434], + [-6.870115280151367, 7.961920738220215], + [2.5150961875915527, 3.5618748664855957], + [4.229452133178711, 1.73725426197052], + [3.4992406368255615, 6.933567047119141], + [-2.470876455307007, 1.815447449684143], + [7.6783528327941895, 9.146236419677734], + [-2.1559200286865234, 2.730213165283203], + [-4.164066791534424, 6.142381191253662], + [-1.6008107662200928, 1.346750259399414], + [3.79050350189209, -2.9134814739227295], + [8.084918022155762, -2.2329156398773193], + [0.6284247636795044, 1.0898841619491577], + [-4.112914085388184, 4.204387187957764], + [0.8561254143714905, -6.552194595336914], + [4.8000054359436035, -1.7092900276184082], + [2.9099552631378174, -4.889400005340576], + [-2.152843475341797, 2.521376848220825], + [3.0593106746673584, -7.964983940124512], + [-2.996037244796753, -4.305122375488281], + [-2.01997971534729, 1.71964693069458], + [-1.4985558986663818, 4.262526512145996], + [-6.269816875457764, 6.481504440307617], + [6.433892726898193, 7.8504743576049805], + [-4.318055629730225, -1.8585537672042847], + [4.004387378692627, -8.256559371948242], + [-5.091200828552246, -1.8978832960128784], + [-2.0100581645965576, 1.1681928634643555], + [0.26472294330596924, -0.34016919136047363], + [-4.77705717086792, 5.661570072174072], + [-0.12926596403121948, 9.241652488708496], + [3.8388564586639404, 6.374393463134766], + [3.2361388206481934, 6.9878129959106445], + [-6.617868423461914, 7.759053707122803], + [3.711583375930786, -3.4250922203063965], + [-1.5355477333068848, 1.7032512426376343], + [-4.495497226715088, -7.207986831665039], + [3.738191604614258, -6.843745708465576], + [-0.668440580368042, -0.12074744701385498], + [7.914944171905518, -2.064542293548584], + [-3.672828435897827, -1.1883316040039062], + [3.4437096118927, -6.14085578918457], + [-4.360039710998535, -3.644381046295166], + [-1.773909568786621, 1.248915672302246], + [3.1202518939971924, -4.403359413146973], + [-1.3866912126541138, -3.8327760696411133], + [-7.042496204376221, 7.059267044067383], + [-0.998195469379425, 1.759889006614685], + [5.255937099456787, -4.637722015380859], + [-4.8603010177612305, -4.560261249542236], + [-4.576537609100342, 6.898225784301758], + [-0.03305918723344803, 11.683612823486328], + [-6.124322891235352, 7.059359550476074], + [-6.7580084800720215, 7.313539981842041], + [-4.280284404754639, -2.9258246421813965], + [-4.342841148376465, -5.059114456176758], + [-0.03607422858476639, 13.641963958740234], + [2.85392165184021, -9.063114166259766], + [1.9753363132476807, 2.7157914638519287], + [-3.38824462890625, 5.281991958618164], + [2.8850655555725098, -10.20058822631836], + [-1.638695478439331, -2.961336374282837], + [1.8131077289581299, 5.990345001220703], + [-5.043656826019287, -2.971637487411499], + [3.790821075439453, -2.9770658016204834], + [-4.90034294128418, 2.632294178009033], + [2.1320791244506836, 5.593209266662598], + [-4.3921990394592285, -2.5811007022857666], + [-2.17271089553833, 0.9418753981590271], + [-7.110077381134033, 8.476114273071289], + [-4.929754734039307, -1.274749755859375], + [-5.015141010284424, 5.500970840454102], + [8.024373054504395, -1.77296781539917], + [-2.7979304790496826, 2.238548517227173], + [5.02421236038208, -5.171848297119141], + [5.43153715133667, 7.93557071685791], + [-2.574697494506836, 1.5765345096588135], + [3.242288589477539, 1.5469529628753662], + [4.093561172485352, -3.4484546184539795], + [-2.50997257232666, 2.020869493484497], + [2.157876491546631, 0.890235424041748], + [-2.9769060611724854, 2.43859601020813], + [4.668596267700195, -4.160174369812012], + [2.7199056148529053, -3.810572862625122], + [-4.983461380004883, 4.793538570404053], + [-1.4411053657531738, 1.2269046306610107], + [-0.049433059990406036, 13.117790222167969], + [4.5014872550964355, 5.716151237487793], + [2.1800267696380615, 2.36677885055542], + [-5.641922473907471, 4.227502346038818], + [-2.6943132877349854, -3.9003512859344482], + [-5.89191198348999, 0.20813167095184326], + [-6.215631008148193, -0.284870982170105], + [4.132168292999268, 6.225212097167969], + [-4.062089443206787, -2.9634339809417725], + [6.141586780548096, 7.433050632476807], + [0.18344736099243164, 12.205615997314453], + [-4.486638069152832, 4.855041027069092], + [-3.58392596244812, -4.985882759094238], + [3.3099048137664795, -3.823873281478882], + [-2.890558958053589, -3.8396010398864746], + [3.343888998031616, -3.404996633529663], + [4.58413553237915, 6.649931907653809], + [7.828182697296143, -2.132438898086548], + [2.258134603500366, -7.355536937713623], + [4.006712436676025, 5.340113639831543], + [-3.6271579265594482, 4.690014362335205], + [4.558060646057129, -4.443861484527588], + [3.4073736667633057, 1.6731668710708618], + [3.790954828262329, 6.706267356872559], + [2.491023540496826, -7.515125274658203], + [5.105122089385986, 7.058619499206543], + [-6.3760151863098145, 7.269330024719238], + [-1.7354373931884766, -3.9024105072021484], + [-0.020051904022693634, 13.56299877166748], + [-2.287944793701172, 0.918630838394165], + [8.16683292388916, -2.245929002761841], + [3.095412015914917, -2.9547955989837646], + [1.4603090286254883, 5.104001998901367], + [2.253009080886841, -5.288843631744385], + [5.090193271636963, 7.164968490600586], + [-2.444749116897583, -1.6416478157043457], + [-4.709956645965576, -5.706465721130371], + [-5.660907745361328, 7.492959976196289], + [4.912171840667725, -0.668618381023407], + [3.54461932182312, 1.4629597663879395], + [-5.981429576873779, -0.14636093378067017], + [0.025418512523174286, 0.8671018481254578], + [4.040208339691162, -3.439263105392456], + [-4.615135669708252, -2.5198657512664795], + [2.7045233249664307, -3.746464490890503], + [-2.3599791526794434, 1.5486235618591309], + [-3.5758590698242188, -3.3517134189605713], + [-5.186603546142578, -2.708543539047241], + [0.6896684169769287, -1.0341509580612183], + [2.0357894897460938, 5.092141151428223], + [-2.2279279232025146, 2.4994099140167236], + [-4.146022796630859, -6.192684173583984], + [-2.6068737506866455, 2.041754961013794], + [-1.9007656574249268, 2.343186855316162], + [-2.1342644691467285, 2.484758138656616], + [1.8702733516693115, 5.692193508148193], + [2.182095527648926, -8.071039199829102], + [-4.402656555175781, 6.325457572937012], + [7.128542900085449, 8.520164489746094], + [-7.883753299713135, 0.806091845035553], + [0.04295658320188522, 12.229055404663086], + [6.119065761566162, -1.423313021659851], + [-6.067224979400635, 6.92922306060791], + [4.522420883178711, 1.9635735750198364], + [3.820446252822876, 1.3019706010818481], + [5.467632293701172, 6.931846618652344], + [3.1108193397521973, -3.9406888484954834], + [-2.1441476345062256, -0.9167680740356445], + [1.4713208675384521, -7.4780473709106445], + [-0.04476339370012283, 9.611677169799805], + [-2.5734803676605225, 5.893259048461914], + [2.979313611984253, -4.196848392486572], + [2.2075982093811035, 0.7768823504447937], + [0.24767762422561646, 11.07136344909668], + [-2.487546682357788, 4.734992980957031], + [6.718228816986084, -3.1379342079162598], + [2.516780138015747, -8.763589859008789], + [-2.0783398151397705, 2.381143569946289], + [-2.424945592880249, 2.048478603363037], + [-3.152068853378296, 3.236276626586914], + [3.67559552192688, -8.327893257141113], + [-2.1123361587524414, 2.1985151767730713], + [4.602623462677002, -3.7102854251861572], + [-0.24616128206253052, 5.922226428985596], + [-2.0253090858459473, -4.101487636566162], + [-0.9469516277313232, 1.6488850116729736], + [-3.9323177337646484, -1.9874905347824097], + [3.5734379291534424, 6.423007965087891], + [-1.4869316816329956, -3.8807265758514404], + [-3.8256523609161377, -5.825076103210449], + [-4.08473014831543, -5.544266223907471], + [-0.47986388206481934, 0.8183379173278809], + [2.480459451675415, 4.034917831420898], + [2.668379068374634, 6.711814880371094], + [3.1734564304351807, -8.087043762207031], + [-6.759449481964111, 0.204537034034729], + [-4.420882225036621, -6.827371597290039], + [9.157415390014648, -2.362696409225464], + [-2.0184738636016846, -0.9983246326446533], + [4.154087543487549, 1.7921947240829468], + [0.5431691408157349, 10.519351959228516], + [8.997248649597168, -2.2379205226898193], + [0.15403860807418823, 9.988354682922363], + [6.178432941436768, 7.679699897766113], + [2.4332385063171387, 3.1901776790618896], + [0.2484920620918274, 11.3582181930542], + [-4.592827320098877, -7.042062282562256], + [-2.3058860301971436, 1.8737117052078247], + [3.036057710647583, -8.338475227355957], + [1.1690716743469238, 4.069340705871582], + [3.4490129947662354, 4.932828903198242], + [-1.2829186916351318, 1.578665018081665], + [0.09728877991437912, 9.24498462677002], + [3.7162420749664307, -3.590322732925415], + [2.665332555770874, 0.6960692405700684], + [0.4086187481880188, -1.1757704019546509], + [0.005993656814098358, 12.004535675048828], + [3.2557199001312256, 0.28667861223220825], + [-3.498431921005249, -5.2067365646362305], + [-2.1138699054718018, 2.3406882286071777], + [3.1819252967834473, -8.190397262573242], + [3.0151422023773193, -4.258472919464111], + [6.722166061401367, -2.7694733142852783], + [6.698842525482178, -1.4769493341445923], + [7.8576273918151855, -2.1001946926116943], + [-1.2722692489624023, 1.4280447959899902], + [2.6634819507598877, 4.50663948059082], + [3.011739730834961, -3.363901376724243], + [-6.95924711227417, -0.046046141535043716], + [4.522837162017822, 6.700456142425537], + [3.0360820293426514, 1.534511685371399], + [3.54460072517395, 1.5697928667068481], + [-3.140199899673462, 2.8324410915374756], + [5.509609699249268, -0.7244417667388916], + [-5.058377742767334, 4.183442115783691], + [-4.088297367095947, -5.994163513183594], + [4.897522926330566, -0.7608141899108887], + [2.5979206562042236, 3.1078107357025146], + [10.016042709350586, -2.384470224380493], + [3.1054909229278564, -4.44133186340332], + [-2.6106300354003906, 5.884161472320557], + [3.45670485496521, -7.482086181640625], + [6.399032115936279, 7.81493616104126], + [-1.8778398036956787, -3.794726610183716], + [0.5759401917457581, 12.152114868164062], + [-4.861785411834717, 1.568846344947815], + [7.891061305999756, -2.293717384338379], + [8.796529769897461, -2.2918174266815186], + [3.900498628616333, -3.4204156398773193], + [-4.344404697418213, -3.1261909008026123], + [3.3841474056243896, -5.123845100402832], + [5.263701915740967, -1.463171124458313], + [-4.788118839263916, -6.110403060913086], + [0.9124197363853455, -4.558972358703613], + [-5.800703048706055, 6.578380584716797], + [2.1256425380706787, 0.04765206202864647], + [-4.061078071594238, -1.4950196743011475], + [0.20911484956741333, 10.44801139831543], + [10.20794677734375, -2.3651537895202637], + [2.1025922298431396, 1.0035597085952759], + [2.674895763397217, 0.9681764841079712], + [-4.651701927185059, 5.194622039794922], + [4.276956081390381, 6.229126453399658], + [-3.5174434185028076, -5.614932060241699], + [2.8613979816436768, -7.819883346557617], + [-5.411355018615723, -0.07602989673614502], + [4.3594560623168945, -3.910598039627075], + [4.251519680023193, 1.6970691680908203], + [2.941006898880005, -3.0563251972198486], + [5.346800327301025, 6.761783599853516], + [-2.206425428390503, 1.9894384145736694], + [3.1447818279266357, 1.3559809923171997], + [3.5472171306610107, 5.038394451141357], + [9.3804349899292, -2.334355592727661], + [1.7855865955352783, -8.167342185974121], + [1.4553080797195435, -0.21227329969406128], + [1.7318124771118164, 5.718750476837158], + [3.13739275932312, -4.463170528411865], + [-0.5793243050575256, -1.8669403791427612], + [2.9107167720794678, -4.203614711761475], + [-1.996288776397705, 2.3292176723480225], + [0.04914622753858566, 8.90485954284668], + [-1.8426941633224487, 1.218291997909546], + [0.1113925501704216, 11.678182601928711], + [2.7589316368103027, -3.8538880348205566], + [7.805286884307861, -2.0234789848327637], + [0.30738264322280884, 3.302400588989258], + [-0.09037972241640091, 9.956072807312012], + [9.409806251525879, -2.343648672103882], + [3.2801663875579834, 1.0136158466339111], + [-4.711879253387451, -6.805350303649902], + [3.3403589725494385, -4.9509053230285645], + [-4.048300266265869, 3.157287120819092], + [-2.5419976711273193, -0.9172722697257996], + [-4.459782123565674, -6.737397193908691], + [-3.9239959716796875, -2.1522488594055176], + [5.981748104095459, 7.545697212219238], + [8.635754585266113, -2.4943344593048096], + [-0.04217011481523514, 11.631477355957031], + [-7.159911632537842, -0.5787404775619507], + [0.04799383133649826, 9.343001365661621], + [1.5711917877197266, 2.0097196102142334], + [-4.730597019195557, -6.481738090515137], + [2.439523935317993, -7.668581962585449], + [3.139043092727661, 4.606184959411621], + [-1.8797221183776855, 2.2503609657287598], + [0.17597514390945435, 11.297063827514648], + [2.4455883502960205, -7.56822395324707], + [0.2135414481163025, 10.685851097106934], + [3.7725672721862793, -3.2810986042022705], + [-3.7060983180999756, -2.565769910812378], + [-4.528707027435303, -1.193966269493103], + [-4.292457580566406, -6.0353288650512695], + [3.965120553970337, 7.3165435791015625], + [-2.9727156162261963, -3.913917303085327], + [3.5275304317474365, -3.6549339294433594], + [-2.392059564590454, 1.7320340871810913], + [-2.4764761924743652, 1.733053207397461], + [-7.044037342071533, -0.5887190103530884], + [2.6350674629211426, -9.283805847167969], + [1.8048969507217407, -6.902949810028076], + [-4.936723232269287, -2.788892984390259], + [2.6247737407684326, 4.145556926727295], + [3.401798963546753, 1.8668593168258667], + [-2.1978657245635986, -5.051120758056641], + [3.335942029953003, -5.021380424499512], + [0.5843992829322815, -1.1114548444747925], + [-1.2569471597671509, 1.6375305652618408], + [10.734719276428223, -2.5260169506073], + [2.448369026184082, -7.985428333282471], + [4.581212520599365, -3.6223418712615967], + [9.230461120605469, -2.383384943008423], + [3.391904830932617, -6.923173427581787], + [6.767061710357666, -4.043667793273926], + [3.4591968059539795, -8.170948028564453], + [-4.706064701080322, 4.183910846710205], + [-4.233210563659668, 4.4400506019592285], + [0.11119198054075241, 13.013387680053711], + [0.7512914538383484, -0.7681525945663452], + [-2.0189521312713623, 2.3871870040893555], + [-3.157142400741577, 1.2460185289382935], + [3.8834569454193115, -3.758527994155884], + [0.07610522955656052, 9.439510345458984], + [1.626295804977417, -7.7040252685546875], + [-2.4226694107055664, 1.477706789970398], + [-2.421114921569824, 1.4131271839141846], + [-2.658207654953003, 2.856750726699829], + [1.239079475402832, -7.368144512176514], + [2.931180715560913, -2.8034918308258057], + [7.476200103759766, -2.8419768810272217], + [0.7827897667884827, 3.6835927963256836], + [-4.939302921295166, 0.47202247381210327], + [3.524510383605957, 1.1396915912628174], + [-2.4120683670043945, 1.7814973592758179], + [-0.04245639592409134, 12.834587097167969], + [3.0357611179351807, -2.5314316749572754], + [4.327017784118652, -3.9040935039520264], + [8.127511978149414, -2.2753827571868896], + [6.452961444854736, 7.953253746032715], + [-2.8041248321533203, 1.126229166984558], + [5.756830215454102, -3.379119634628296], + [3.2504944801330566, -4.40975284576416], + [1.8059608936309814, -0.4698318839073181], + [3.8019192218780518, -5.988663673400879], + [-2.608158826828003, -3.4023354053497314], + [4.009169578552246, -4.756709098815918], + [8.160589218139648, -2.274945020675659], + [-0.2576535940170288, -1.5816818475723267], + [-2.5123655796051025, 1.6794284582138062], + [-1.480331540107727, 1.263898491859436], + [3.8306186199188232, -3.520256280899048], + [7.341799736022949, 8.930233001708984], + [0.257507860660553, 11.27912712097168], + [-5.600335121154785, -2.0527966022491455], + [-0.04939515143632889, 12.640596389770508], + [-4.247987270355225, -2.6362714767456055], + [2.40916109085083, 6.2191877365112305], + [1.4526244401931763, -6.951414108276367], + [-4.081081390380859, -6.712491035461426], + [-2.88673734664917, 2.9455807209014893], + [8.137758255004883, -2.278618097305298], + [3.0019071102142334, -10.30990982055664], + [0.7174925208091736, -1.0532543659210205], + [3.7118680477142334, 6.259241104125977], + [-5.485936641693115, 7.293237209320068], + [-0.8507694602012634, -1.885012149810791], + [0.03766392916440964, -1.436865210533142], + [-0.025836177170276642, 9.733814239501953], + [0.09062104672193527, 12.161794662475586], + [5.81614875793457, 7.409523010253906], + [-6.7540388107299805, 3.0205562114715576], + [-2.466771364212036, 1.783841609954834], + [2.305689573287964, 5.826569557189941], + [-2.309051752090454, 1.9791420698165894], + [-4.3073601722717285, -6.179769515991211], + [-2.2637174129486084, 2.8696513175964355], + [7.063215732574463, -1.697757363319397], + [4.0406575202941895, -7.505224227905273], + [3.1804726123809814, 1.8697971105575562], + [-0.5248925089836121, 9.289257049560547], + [2.8484134674072266, -3.338693618774414], + [-2.4610707759857178, 1.8860350847244263], + [0.23539483547210693, 11.100420951843262], + [-2.2688710689544678, -1.2845863103866577], + [2.8532235622406006, -7.9456892013549805], + [5.269479751586914, 7.4086174964904785], + [1.5930023193359375, 5.819746971130371], + [-4.289114475250244, -6.49365234375], + [-2.8659822940826416, -4.463228225708008], + [2.7295663356781006, 3.1994094848632812], + [8.701777458190918, -2.33648419380188], + [2.042971611022949, 0.18574202060699463], + [1.9013769626617432, 1.9316986799240112], + [3.2454912662506104, -2.995575189590454], + [4.87142276763916, -7.147783279418945], + [3.388655662536621, -6.530026435852051], + [-1.951251745223999, -0.6333725452423096], + [-4.17842960357666, -6.584488868713379], + [6.664388179779053, -1.5761945247650146], + [-1.5455513000488281, 1.41560697555542], + [2.5043692588806152, 1.3192827701568604], + [-2.3006386756896973, -4.3384552001953125], + [0.681827962398529, 6.577742576599121], + [8.842512130737305, -2.3091704845428467], + [2.86470103263855, -7.764921188354492], + [3.086979866027832, -4.327899932861328], + [2.625079393386841, -6.488066673278809], + [3.017582416534424, -10.55147933959961], + [6.578235149383545, -5.0957489013671875], + [0.451682448387146, -1.055678367614746], + [-3.69758677482605, -4.230849266052246], + [1.5211520195007324, -4.025850772857666], + [1.2535134553909302, -0.8042140007019043], + [-0.022853799164295197, 12.6795015335083], + [-2.281618118286133, 1.1453622579574585], + [1.5533874034881592, -7.5555830001831055], + [2.259084463119507, -8.123197555541992], + [2.322934150695801, 3.8626339435577393], + [0.20147746801376343, 10.883304595947266], + [-4.246480464935303, -5.335487365722656], + [1.9410526752471924, -1.6700421571731567], + [-4.340137004852295, -5.060604095458984], + [-0.9645043611526489, -3.5260021686553955], + [0.14655661582946777, 9.798561096191406], + [3.8252923488616943, -6.408566474914551], + [-0.01914317160844803, 12.735148429870605], + [0.23398226499557495, 11.40116024017334], + [0.04385172575712204, 8.83271312713623], + [-4.143451690673828, -3.427844285964966], + [1.8256354331970215, -7.647274494171143], + [-2.3005218505859375, 2.3084754943847656], + [6.436450958251953, -1.4772416353225708], + [-2.4690639972686768, -4.413356781005859], + [-1.873173475265503, 0.7598050832748413], + [-4.630037784576416, -3.221100091934204], + [-5.401583194732666, -0.9236060976982117], + [-5.083496570587158, -2.293426752090454], + [3.7713475227355957, -7.5977463722229], + [-1.1433802843093872, -3.7718160152435303], + [3.317903757095337, -0.5617262125015259], + [-1.8806865215301514, 6.362105369567871], + [0.1351107954978943, 9.610919952392578], + [5.139161109924316, -2.8844945430755615], + [-2.3277666568756104, 2.300664186477661], + [-2.425166130065918, 1.3708577156066895], + [-0.3179493248462677, 1.432895302772522], + [-3.5807740688323975, -3.9924027919769287], + [-3.771833896636963, -1.8349133729934692], + [-4.62473726272583, 4.994956016540527], + [-3.0482733249664307, -3.994666814804077], + [-3.9642910957336426, -6.921465873718262], + [5.793774604797363, -4.625466346740723], + [-2.536855697631836, -0.8208249807357788], + [2.9540164470672607, -5.825360298156738], + [3.6555469036102295, -3.931389331817627], + [5.803491115570068, -2.729830503463745], + [2.9561071395874023, -3.030134916305542], + [-4.93092679977417, -3.6643455028533936], + [-2.4255597591400146, 1.4609684944152832], + [5.692481517791748, -4.144290924072266], + [0.7043496966362, 11.034215927124023], + [2.602417230606079, -8.361759185791016], + [5.659019947052002, -1.2649940252304077], + [-1.8210519552230835, -0.6068370342254639], + [-4.984817981719971, -1.5112978219985962], + [-4.153326988220215, -6.146574974060059], + [2.0458385944366455, 4.678060531616211], + [-5.781369686126709, 6.099778175354004], + [4.863567352294922, -6.290097236633301], + [-2.402587890625, -0.9599053859710693], + [-6.0836100578308105, -1.7637687921524048], + [-4.402698040008545, -2.7830216884613037], + [4.185730934143066, 5.599623680114746], + [-2.329655647277832, 5.613752841949463], + [-2.8803651332855225, -0.6941708922386169], + [3.794499397277832, -2.995889902114868], + [-7.136423110961914, -0.6290781497955322], + [-4.361669063568115, -6.865969181060791], + [3.184703826904297, -8.740875244140625], + [-4.870193004608154, -2.7789015769958496], + [1.2636449337005615, -0.5461326837539673], + [0.12033867090940475, 10.19734001159668], + [-3.8886947631835938, -3.876363754272461], + [-2.067500591278076, 2.4012835025787354], + [3.412018060684204, -7.846423149108887], + [2.4822309017181396, 0.716827392578125], + [-2.1014292240142822, 2.4429070949554443], + [3.0295021533966064, -9.370418548583984], + [-1.3104877471923828, 1.8535196781158447], + [-4.401515483856201, -4.945643424987793], + [-3.739853858947754, -5.088165283203125], + [1.6916189193725586, -5.194616794586182], + [7.091426372528076, -4.972134590148926], + [0.3308589458465576, -1.9092754125595093], + [-3.671152114868164, -1.8509489297866821], + [-0.07067913562059402, 13.63711166381836], + [5.671179294586182, -1.8675682544708252], + [-0.1365172266960144, 13.914236068725586], + [1.5261741876602173, 3.5313525199890137], + [-0.6791333556175232, -1.319907784461975], + [-2.3047730922698975, 2.607104778289795], + [-4.522797107696533, -7.268499374389648], + [10.496097564697266, -2.5091326236724854], + [-4.392547607421875, 5.492613315582275], + [-1.4765764474868774, -2.858022689819336], + [3.2344915866851807, -8.195268630981445], + [-3.822838544845581, 5.288094520568848], + [3.5948092937469482, -8.611462593078613], + [5.425909519195557, 7.276331901550293], + [-4.438779354095459, 4.95197868347168], + [4.491620063781738, 6.780289649963379], + [3.0327308177948, 5.90669059753418], + [1.9768500328063965, 0.9755077362060547], + [-0.37917622923851013, -1.4921058416366577], + [11.515649795532227, -2.642207384109497], + [5.158023357391357, 6.459335803985596], + [-6.40725564956665, 7.142639636993408], + [0.024630360305309296, 12.121160507202148], + [-6.132086277008057, 8.525615692138672], + [4.165798664093018, 1.7439663410186768], + [8.653788566589355, -2.3741040229797363], + [-2.601470947265625, 2.1842222213745117], + [-3.0138754844665527, -3.879254102706909], + [-0.09545011073350906, 13.055994033813477], + [-7.455673694610596, -0.22070276737213135], + [8.019009590148926, -2.446385145187378], + [-4.951011657714844, -1.8489989042282104], + [-1.2373602390289307, 1.096012830734253], + [-3.608325481414795, -4.017662048339844], + [2.501894235610962, 1.8260709047317505], + [-6.607166767120361, 6.435344696044922], + [-0.003258712589740753, 9.410038948059082], + [-4.13147497177124, -2.7633447647094727], + [3.5323643684387207, -7.292236328125], + [9.328197479248047, -2.3470232486724854], + [1.71085524559021, -7.927324295043945], + [5.882134914398193, -2.2286906242370605], + [3.2317421436309814, -1.6587412357330322], + [2.016040086746216, 7.389122009277344], + [-1.24933660030365, 0.6998311281204224], + [0.07872777432203293, 12.750616073608398], + [-4.845134258270264, -0.9857157468795776], + [7.8027849197387695, -2.99534010887146], + [3.368410110473633, 0.8797488212585449], + [2.846088171005249, -3.953476905822754], + [-2.4571897983551025, 1.8292649984359741], + [-1.8337819576263428, 1.8053010702133179], + [2.2146012783050537, -5.3507280349731445], + [-0.054098911583423615, 12.767560958862305], + [-5.5259108543396, 4.884430885314941], + [-3.60304594039917, -4.216178894042969], + [-2.5367588996887207, 1.8633358478546143], + [-5.000968933105469, 5.728512287139893], + [3.6713948249816895, -2.7966103553771973], + [1.7430459260940552, -7.518775463104248], + [6.1545729637146, -3.416065216064453], + [1.0646244287490845, -6.989658355712891], + [2.993030309677124, 5.363669395446777], + [-1.3925191164016724, -0.29120776057243347], + [-2.1076600551605225, 1.5998530387878418], + [-2.173811435699463, 2.5329253673553467], + [2.09795880317688, 3.4004569053649902], + [2.3617172241210938, 5.224828720092773], + [-5.819246292114258, 6.0864152908325195], + [-3.656341791152954, 6.140837669372559], + [3.676518201828003, -3.418966770172119], + [-2.582439422607422, 2.0322914123535156], + [-1.2701194286346436, -1.7243940830230713], + [-6.734604358673096, 7.914709091186523], + [2.815812826156616, -7.021244049072266], + [-3.8876490592956543, -4.144223213195801], + [4.663986682891846, 0.7332535982131958], + [-5.577317714691162, 4.323123931884766], + [-3.560854196548462, -5.607303619384766], + [1.148895502090454, 5.81689453125], + [1.9583971500396729, 3.1531741619110107], + [-6.301988124847412, 1.857240080833435], + [8.372419357299805, -2.3177621364593506], + [8.323963165283203, -2.199500322341919], + [1.0016425848007202, -5.583779335021973], + [0.18061977624893188, 10.141801834106445], + [3.0198636054992676, -3.355801582336426], + [-2.340775966644287, 2.880295515060425], + [1.8731744289398193, 2.132709503173828], + [1.452059268951416, 0.0986214429140091], + [5.454277515411377, -4.8257060050964355], + [-2.18046498298645, 2.7981300354003906], + [-1.8140063285827637, 2.1816413402557373], + [-3.475689649581909, 5.178845405578613], + [-4.593385219573975, -6.535767555236816], + [7.0612263679504395, 8.49096965789795], + [3.3994619846343994, -3.5305349826812744], + [9.224350929260254, -2.235304594039917], + [-7.398812770843506, -1.0165777206420898], + [4.85467004776001, -1.2938508987426758], + [-5.075448989868164, 0.27477210760116577], + [3.373605966567993, 1.2610301971435547], + [-6.232620716094971, 0.24462389945983887], + [2.038888692855835, 2.370435953140259], + [4.486940860748291, -1.356070637702942], + [-4.336546421051025, 3.9506871700286865], + [-5.25968599319458, 2.3149843215942383], + [2.296321153640747, -8.19267749786377], + [2.369218111038208, -3.203094720840454], + [9.713293075561523, -2.436396360397339], + [0.17030292749404907, 11.922210693359375], + [0.07924329489469528, 10.193050384521484], + [-3.928145170211792, -5.671736240386963], + [3.455756425857544, -7.471841812133789], + [3.496464967727661, -3.9088783264160156], + [7.57893705368042, -1.9627891778945923], + [-4.1850199699401855, -5.930705547332764], + [3.7011051177978516, -5.440919876098633], + [4.574690341949463, 5.880234718322754], + [4.151378154754639, 5.889029502868652], + [3.316336154937744, 0.7249350547790527], + [3.373357057571411, -4.777831077575684], + [3.735196590423584, 1.5190309286117554], + [-5.075690746307373, 8.042311668395996], + [-3.34916615486145, 5.937658309936523], + [-7.2784295082092285, 8.669140815734863], + [8.306227684020996, -2.2868666648864746], + [0.023236863315105438, 9.403829574584961], + [4.660929203033447, 7.546079158782959], + [8.044651985168457, -2.240513563156128], + [-4.6878838539123535, -6.544399738311768], + [6.084364414215088, -2.509270429611206], + [-2.1990978717803955, 2.7120437622070312], + [-2.0296058654785156, 1.898404836654663], + [4.098888397216797, -3.785707950592041], + [-2.0465660095214844, 0.06667476892471313], + [-4.008865833282471, 5.816381931304932], + [2.1996939182281494, 0.6335220336914062], + [2.5702834129333496, 5.59718132019043], + [3.771054744720459, 7.005241394042969], + [-3.8462510108947754, -3.8306829929351807], + [-3.565526008605957, -1.6184961795806885], + [0.7413465976715088, -6.515846252441406], + [10.286620140075684, -2.5064151287078857], + [3.594273805618286, -6.430841445922852], + [2.0788156986236572, 4.758801460266113], + [-4.287930965423584, -0.8828746676445007], + [-2.8507630825042725, -3.2450368404388428], + [1.5331518650054932, 2.0680625438690186], + [1.8246827125549316, 1.45441734790802], + [0.10759287327528, 9.595701217651367], + [-5.368278503417969, 4.882896900177002], + [2.930060625076294, 6.556260108947754], + [5.398632049560547, -7.804762840270996], + [-4.382691860198975, -2.824740171432495], + [6.7476606369018555, -1.9325509071350098], + [-4.57742166519165, 0.015100236982107162], + [-6.1477274894714355, 7.635898590087891], + [-5.859541893005371, 7.853889465332031], + [-6.258598804473877, 7.498469352722168], + [-0.04113186150789261, 12.291764259338379], + [3.175708532333374, -8.301980972290039], + [3.499483108520508, 1.009029507637024], + [-5.3990702629089355, 4.701623916625977], + [5.381594181060791, 7.787123203277588], + [-3.491847276687622, -2.3981335163116455], + [-5.430479526519775, 5.265729904174805], + [-4.824495792388916, -5.975471019744873], + [2.025299072265625, 0.9672709703445435], + [-4.4082255363464355, -1.5850011110305786], + [1.0825530290603638, 4.849410057067871], + [1.507991075515747, -0.3841315507888794], + [3.033154010772705, -2.289238691329956], + [-2.719578504562378, -0.14990317821502686], + [-4.53694486618042, -6.228633403778076], + [-2.1482901573181152, 2.5465564727783203], + [-2.9352192878723145, 0.25358420610427856], + [1.1521944999694824, -7.002102851867676], + [2.2928645610809326, 4.562918186187744], + [4.4645490646362305, -6.616472244262695], + [-7.280389308929443, 8.676776885986328], + [0.25026631355285645, 11.121114730834961], + [1.0289232730865479, -6.713436126708984], + [9.104470252990723, -2.4503190517425537], + [1.147895097732544, -7.085479736328125], + [-0.006739325821399689, 12.320941925048828], + [-2.3002355098724365, 1.3760263919830322], + [-4.595591068267822, -7.3322367668151855], + [5.668936729431152, -1.1562563180923462], + [3.653691530227661, 1.5857411623001099], + [5.720912456512451, -2.711074113845825], + [4.727975368499756, 6.92419958114624], + [2.882035493850708, -4.142092704772949], + [4.1656060218811035, -0.9853042364120483], + [3.555607795715332, -3.4729068279266357], + [3.9157605171203613, 6.022164821624756], + [-5.887556552886963, 6.498321533203125], + [7.427079677581787, 8.83184814453125], + [7.368326187133789, -3.1284844875335693], + [1.5152332782745361, -6.490913391113281], + [0.3769192695617676, 1.249808669090271], + [0.016094200313091278, 12.068180084228516], + [-3.8539204597473145, 7.992158889770508], + [-5.58681583404541, 4.198154449462891], + [5.706140995025635, 7.364790916442871], + [5.812219142913818, -1.1646207571029663], + [2.5351061820983887, 0.9129003286361694], + [-2.2524120807647705, 3.0140905380249023], + [6.735602855682373, -2.679795980453491], + [3.045142412185669, -2.9612834453582764], + [5.566574573516846, -3.7411062717437744], + [2.9959213733673096, -8.631389617919922], + [-4.374378681182861, -1.3512827157974243], + [2.626234769821167, -0.2057102769613266], + [-3.2336111068725586, -4.046861171722412], + [2.012235403060913, 3.923031806945801], + [-6.56787633895874, 7.698360919952393], + [2.3830602169036865, 0.3545714020729065], + [2.1308658123016357, 0.2529992461204529], + [-0.938697874546051, 1.6275348663330078], + [-6.576637268066406, 7.682913303375244], + [10.107291221618652, -2.4566140174865723], + [0.8481234312057495, 5.867650985717773], + [2.3814029693603516, -3.5830376148223877], + [3.6833620071411133, -6.489354133605957], + [3.4186394214630127, -4.80435848236084], + [-4.980287551879883, -3.5939133167266846], + [-4.906716823577881, -3.0356616973876953], + [9.90118408203125, -2.380147695541382], + [6.57232666015625, -1.8631089925765991], + [3.7532293796539307, -3.1313469409942627], + [-5.575278282165527, -3.9424211978912354], + [8.875958442687988, -2.467054605484009], + [2.026033639907837, 5.277731895446777], + [-0.17330402135849, 0.8441199660301208], + [3.465256452560425, -4.932092189788818], + [2.880833387374878, -6.8174214363098145], + [-5.011377811431885, -6.6176018714904785], + [-0.18797346949577332, -1.3598192930221558], + [-3.758565902709961, -1.9524191617965698], + [3.3983194828033447, -5.0484724044799805], + [2.561424493789673, 3.7989394664764404], + [-8.032349586486816, 0.1375408172607422], + [3.181246757507324, -3.8395397663116455], + [-4.805241584777832, -3.4759433269500732], + [0.1481834053993225, 10.343199729919434], + [3.8582804203033447, -3.5837552547454834], + [-5.531922817230225, 6.334405422210693], + [2.7841036319732666, 5.060517311096191], + [-4.4648871421813965, -0.9402223229408264], + [-0.8658089637756348, -3.3589272499084473], + [-6.765618801116943, 7.075277328491211], + [3.6658356189727783, 1.6980528831481934], + [1.866575837135315, -8.720451354980469], + [3.265728712081909, -7.326077461242676], + [3.1897130012512207, -4.022908687591553], + [0.11573194712400436, 11.567167282104492], + [-5.081368923187256, -2.4454963207244873], + [1.9736018180847168, 1.8577674627304077], + [-2.0191545486450195, 2.344996690750122], + [5.31662130355835, -7.23268461227417], + [-1.2016379833221436, 1.5505629777908325], + [3.4874961376190186, -2.7675068378448486], + [-4.466742038726807, -2.561422348022461], + [7.1425461769104, -2.2734591960906982], + [0.1510372757911682, -1.4448708295822144], + [5.2461066246032715, -2.2632529735565186], + [-5.394223690032959, -1.0401852130889893], + [6.1645307540893555, -2.290008783340454], + [-6.626282215118408, -0.7312959432601929], + [9.134153366088867, -2.342456340789795], + [6.118601322174072, -3.351975202560425], + [-4.334601879119873, -6.625558376312256], + [4.771434783935547, 7.303976058959961], + [-3.6095612049102783, -5.478147983551025], + [-1.8631551265716553, 2.4805967807769775], + [-1.1513803005218506, 1.792812466621399], + [-4.747337818145752, -3.39367938041687], + [-4.913875102996826, 7.0695648193359375], + [3.3828206062316895, -3.8924953937530518], + [5.118053913116455, -1.171298623085022], + [-5.075000286102295, -4.305617332458496], + [10.059819221496582, -2.4398577213287354], + [-0.4744442105293274, -0.4679625630378723], + [-2.421008586883545, 1.8442257642745972], + [-4.95618200302124, -3.260215997695923], + [2.0397188663482666, 0.18744108080863953], + [4.755520343780518, 7.255866527557373], + [3.2752346992492676, -4.046467304229736], + [-0.09164328128099442, 9.773621559143066], + [-1.6108261346817017, -1.212274193763733], + [2.0021603107452393, 5.2489118576049805], + [-5.000787258148193, -2.5642993450164795], + [3.1267340183258057, -9.168132781982422], + [-1.482709527015686, 2.40085506439209], + [3.896527051925659, -3.43198561668396], + [4.358047962188721, -7.5400543212890625], + [-2.5056636333465576, 1.9799779653549194], + [-2.7300798892974854, 0.04511987790465355], + [4.142154216766357, -3.23624324798584], + [2.0430333614349365, -7.88330078125], + [-2.9536097049713135, 4.9936323165893555], + [2.8189356327056885, -3.9308106899261475], + [6.737201690673828, -5.771904945373535], + [-0.013258524239063263, 12.081350326538086], + [-4.685483455657959, -6.464221000671387], + [-3.7121520042419434, -2.2306814193725586], + [-0.23367345333099365, 2.1631031036376953], + [8.744559288024902, -2.3458430767059326], + [-0.1071125939488411, 0.9376576542854309], + [-2.8476641178131104, -4.651360511779785], + [-3.028341293334961, -5.5128326416015625], + [10.218485832214355, -2.4825754165649414], + [-0.22150635719299316, -1.6779165267944336], + [-1.9973191022872925, 2.504530906677246], + [-0.8059223890304565, -3.1141855716705322], + [-1.810154676437378, 1.2089226245880127], + [8.338461875915527, 9.843223571777344], + [0.18868356943130493, 11.699970245361328], + [-4.343313694000244, -6.261347770690918], + [-2.0850179195404053, 2.3949732780456543], + [3.4347574710845947, -8.438687324523926], + [0.33774906396865845, 11.012555122375488], + [-2.125574827194214, 2.968597173690796], + [5.494292736053467, 0.2289435863494873], + [-3.851560354232788, -5.088122367858887], + [7.872519016265869, -2.4520041942596436], + [2.4855127334594727, -7.619987964630127], + [-4.1628804206848145, -5.987486839294434], + [-4.616643905639648, -6.021951675415039], + [0.20166867971420288, 10.061802864074707], + [3.340883493423462, -6.7015180587768555], + [-3.1055290699005127, -3.1938440799713135], + [0.12427007406949997, 9.721315383911133], + [7.110034465789795, 8.483661651611328], + [-1.9046615362167358, 2.3948357105255127], + [0.37222641706466675, 11.1473388671875], + [1.416182518005371, -7.527671813964844], + [2.727565050125122, -9.172772407531738], + [-2.291553258895874, 1.9048293828964233], + [3.2022101879119873, -4.556406021118164], + [-0.025034911930561066, 9.494817733764648], + [-0.9515748620033264, 2.866691827774048], + [-0.04165739566087723, 9.43994140625], + [2.281536817550659, 4.766535758972168], + [8.238178253173828, -2.30786395072937], + [0.9878893494606018, -6.218476295471191], + [-0.042920179665088654, 9.733331680297852], + [0.4748714566230774, -6.10093355178833], + [-4.94420051574707, -0.9784610271453857], + [-0.6306820511817932, -1.8361942768096924], + [3.913853168487549, -3.467712163925171], + [8.579427719116211, -2.5654423236846924], + [9.233114242553711, -2.4827940464019775], + [3.7920620441436768, -3.6049578189849854], + [-4.827217102050781, -3.8483164310455322], + [-2.1919233798980713, -3.3759543895721436], + [-4.992579936981201, 6.082878112792969], + [0.32600703835487366, 3.6784021854400635], + [-2.1979973316192627, -2.630408525466919], + [2.2956626415252686, 4.372235298156738], + [1.5872002840042114, 3.685253858566284], + [-6.619778633117676, -0.2543918490409851], + [2.0584957599639893, 2.991905689239502], + [-5.089133262634277, -1.0165916681289673], + [-4.702351093292236, 3.8642537593841553], + [3.3639838695526123, -7.338577747344971], + [1.184792160987854, 3.9165596961975098], + [0.37719613313674927, -0.6441076397895813], + [8.197142601013184, -2.2670738697052], + [7.106043338775635, -1.6433178186416626], + [-6.013339519500732, -2.1004397869110107], + [1.993480920791626, 0.9824522733688354], + [7.595607757568359, -4.146996974945068], + [0.20613247156143188, 11.289762496948242], + [2.637101650238037, -3.183990716934204], + [7.99625825881958, -2.0859758853912354], + [-4.946204662322998, -6.881745338439941], + [-5.69035005569458, -2.9085800647735596], + [5.328027725219727, -2.060270071029663], + [-1.7717288732528687, -3.862731695175171], + [3.259533643722534, -6.472629547119141], + [2.5985701084136963, -2.4768226146698], + [-3.3770248889923096, -5.237859725952148], + [-4.353600978851318, -3.8244478702545166], + [-3.5058515071868896, -2.479950189590454], + [-4.237221717834473, -2.5600948333740234], + [0.040574438869953156, -1.6181432008743286], + [-5.887990474700928, 6.719991683959961], + [-1.3162014484405518, -1.8261094093322754], + [2.8954904079437256, -6.5080413818359375], + [3.049325704574585, -4.3103203773498535], + [-2.4557414054870605, -3.7571918964385986], + [0.5730514526367188, 0.7063937187194824], + [-4.974629878997803, 6.672333240509033], + [-6.394773960113525, -0.8668071627616882], + [-4.864414215087891, 6.358184814453125], + [-6.3347272872924805, 7.3932647705078125], + [-3.8884389400482178, 2.868516206741333], + [-3.9441888332366943, -6.568328380584717], + [6.6985650062561035, 8.11522102355957], + [-2.6067917346954346, 1.8574703931808472], + [2.6514999866485596, 4.471156120300293], + [1.6468079090118408, 5.371432304382324], + [0.12619549036026, 10.20185661315918], + [-2.178191900253296, -3.331272840499878], + [-4.269570350646973, -6.316764831542969], + [0.20234405994415283, 10.788328170776367], + [2.5175774097442627, 5.411203384399414], + [-5.761186122894287, 3.00852632522583], + [7.248966693878174, -3.9980921745300293], + [0.06531625241041183, 9.60287857055664], + [-6.5255513191223145, 7.414982795715332], + [2.835456371307373, -4.021536827087402], + [-4.849123001098633, 3.8061940670013428], + [-4.23031759262085, -6.864685535430908], + [2.9781463146209717, -4.22157096862793], + [2.5703647136688232, 0.8734949827194214], + [3.108957052230835, -10.608173370361328], + [-0.054163701832294464, 13.158731460571289], + [-2.492565631866455, -1.214828610420227], + [-3.5792901515960693, -4.051757335662842], + [-0.0204702690243721, 13.098234176635742], + [-2.553903102874756, 2.102386951446533], + [-0.3133730888366699, -1.2329155206680298], + [-3.919625997543335, 4.132256984710693], + [2.6188929080963135, 4.267457962036133], + [-4.678104877471924, -3.242594003677368], + [-6.274991512298584, -0.2829381823539734], + [-2.512190103530884, -4.2610626220703125], + [11.402985572814941, -2.4959969520568848], + [6.019906520843506, 7.665921211242676], + [0.05726247280836105, 9.575399398803711], + [-2.1267383098602295, 2.299237012863159], + [3.0094234943389893, -8.661824226379395], + [-5.199155330657959, -1.8536254167556763], + [6.08159065246582, -5.549127578735352], + [-4.2140278816223145, 6.010706424713135], + [-1.140607476234436, 5.138942718505859], + [4.852578639984131, -3.41044020652771], + [-0.0012438371777534485, 12.660839080810547], + [6.267459869384766, -4.818562984466553], + [-3.4334025382995605, -5.498260021209717], + [3.4541821479797363, -4.750675678253174], + [-3.553391456604004, -5.049389839172363], + [2.265662431716919, 5.4312543869018555], + [-2.654655694961548, 1.932875394821167], + [4.069435119628906, -3.561479091644287], + [-2.4329030513763428, -4.269569396972656], + [-2.530893564224243, -3.247058391571045], + [2.9055392742156982, -4.055405139923096], + [2.7076189517974854, 5.582740306854248], + [-1.9754562377929688, -0.8965914845466614], + [0.15631264448165894, 9.680723190307617], + [-4.107767105102539, -6.728797912597656], + [-1.5380533933639526, -3.348196268081665], + [0.5013567209243774, -5.831581115722656], + [-4.620716571807861, -5.6293182373046875], + [8.838485717773438, -2.4127628803253174], + [2.9951212406158447, -3.933889627456665], + [-7.054112911224365, -0.01941252127289772], + [8.216248512268066, -2.182509183883667], + [-3.1494390964508057, -4.549124717712402], + [-2.8314616680145264, 1.57121741771698], + [-1.6777966022491455, 1.0926951169967651], + [0.6622870564460754, -0.7655714154243469], + [3.4600179195404053, -5.620016574859619], + [-6.207671642303467, -1.30093252658844], + [2.0383145809173584, -8.154513359069824], + [5.148964881896973, 7.398257255554199], + [2.0338566303253174, -6.4212775230407715], + [3.020256519317627, -4.2249603271484375], + [4.972227573394775, -1.0087822675704956], + [-4.383009433746338, -5.8079047203063965], + [10.0785493850708, -2.3926916122436523], + [-6.23041296005249, 7.428549289703369], + [3.6989800930023193, -5.374312400817871], + [-2.4946041107177734, 2.07702374458313], + [3.4900498390197754, -3.9621026515960693], + [2.0748190879821777, 0.7456945180892944], + [3.2309610843658447, -4.708662509918213], + [8.84781551361084, -2.325493574142456], + [2.8132572174072266, -3.9227066040039062], + [7.127048015594482, 8.581180572509766], + [5.770995616912842, -4.855851173400879], + [1.9561786651611328, -7.57473087310791], + [-4.8604655265808105, 4.319453716278076], + [-4.512827396392822, -1.1152642965316772], + [8.621933937072754, -2.2995312213897705], + [-6.078379154205322, 6.19744348526001], + [-7.082136154174805, 8.10060977935791], + [-2.025822401046753, -3.382025957107544], + [5.354304790496826, -0.8983906507492065], + [-5.016299724578857, -1.0081173181533813], + [-7.0868659019470215, -0.037439826875925064], + [-2.666125535964966, 1.2818665504455566], + [-2.7953877449035645, -3.741377115249634], + [-3.795315742492676, -3.273136854171753], + [-6.964592933654785, 7.013844966888428], + [-2.326432466506958, -3.6532907485961914], + [-1.867488145828247, 2.4115405082702637], + [-2.746023178100586, 3.309863567352295], + [4.09622049331665, -3.595885992050171], + [-5.440773963928223, 6.9258012771606445], + [-5.64512300491333, -2.7542591094970703], + [4.327897548675537, -4.8308587074279785], + [8.579497337341309, -2.481912136077881], + [-3.9679744243621826, 5.809004783630371], + [4.231415271759033, -7.626747131347656], + [7.093484878540039, -2.8569533824920654], + [-2.1961007118225098, 2.37068247795105], + [5.403665065765381, -5.3027143478393555], + [2.9284298419952393, -4.085244178771973], + [-2.3189001083374023, 2.281472682952881], + [4.706185817718506, -5.417636871337891], + [5.102848529815674, 7.396889686584473], + [3.758223295211792, -3.9055368900299072], + [4.825595855712891, 6.984120845794678], + [3.7584903240203857, -3.6264374256134033], + [4.620851039886475, -5.661111831665039], + [-4.927371025085449, 5.837854385375977], + [0.19418376684188843, 10.552530288696289], + [8.282950401306152, -2.292656898498535], + [3.0602385997772217, 1.4555253982543945], + [-3.8876750469207764, -1.4257808923721313], + [-4.432809829711914, 6.01480770111084], + [-2.1385498046875, 2.0833117961883545], + [-3.494550943374634, -5.918329238891602], + [-3.3113627433776855, 3.236832857131958], + [4.662787437438965, -6.564718246459961], + [3.2478854656219482, -6.769225120544434], + [-2.550562620162964, 1.8142411708831787], + [2.5446321964263916, -8.470913887023926], + [-2.3225367069244385, 2.3031961917877197], + [-5.557241439819336, -0.2899821996688843], + [-4.860461235046387, 6.050037384033203], + [6.960941791534424, -5.055834770202637], + [7.090796947479248, 8.576024055480957], + [1.1055943965911865, -6.3991899490356445], + [0.05859135836362839, 12.335575103759766], + [-5.0450358390808105, 6.40451717376709], + [-0.6844358444213867, -2.7401981353759766], + [3.451002359390259, -7.926132678985596], + [-2.6934173107147217, -4.926738739013672], + [1.7149574756622314, 2.4860446453094482], + [3.7903082370758057, -3.2912309169769287], + [-3.2886881828308105, 4.877601623535156], + [-5.9948344230651855, -0.2083134651184082], + [-3.8775508403778076, -3.4440691471099854], + [0.26895636320114136, 11.563183784484863], + [4.258784770965576, 5.699329376220703], + [2.80779767036438, 5.2263922691345215], + [4.0686187744140625, 1.194518804550171], + [3.6127166748046875, 1.4485470056533813], + [7.623266220092773, -2.25746488571167], + [1.23580002784729, -0.2996284067630768], + [-5.136936187744141, 5.933840751647949], + [2.5626556873321533, 5.747496604919434], + [-2.1325247287750244, 0.7251794934272766], + [9.90262222290039, -2.503316640853882], + [3.166982412338257, -8.253421783447266], + [6.473356246948242, -1.5862597227096558], + [-4.453212261199951, -6.959630489349365], + [6.771216869354248, 8.035050392150879], + [0.24774283170700073, 10.97422981262207], + [1.7426210641860962, -6.532228469848633], + [2.282294988632202, 3.8481462001800537], + [-4.749769687652588, -6.695995330810547], + [-5.937283992767334, 4.65371036529541], + [1.8795175552368164, 1.6271873712539673], + [-2.5618937015533447, 1.844947338104248], + [-4.810982704162598, -6.854181289672852], + [5.62338399887085, 7.181075096130371], + [6.798466205596924, 8.52591323852539], + [0.24238163232803345, 10.383543014526367], + [5.765003681182861, -6.662406921386719], + [-4.590586185455322, -6.3146820068359375], + [3.3557989597320557, -3.734091281890869], + [0.19082695245742798, 10.101289749145508], + [0.0010268613696098328, 12.450965881347656], + [-2.3608510494232178, -3.7127187252044678], + [-0.09755785018205643, -1.8601868152618408], + [-5.938431262969971, 7.1316633224487305], + [0.27355414628982544, -1.4933605194091797], + [3.804891347885132, -5.067623138427734], + [-6.467138767242432, 7.152393341064453], + [-2.2631144523620605, -3.23370099067688], + [-2.595055103302002, 1.8568904399871826], + [2.788578748703003, 5.618863105773926], + [7.280050754547119, -1.7784241437911987], + [-2.499554395675659, 2.7127535343170166], + [4.283350944519043, -3.708874464035034], + [-4.795118808746338, -6.859890460968018], + [-5.25239896774292, 4.2621283531188965], + [-0.03200811892747879, 13.235383033752441], + [-0.6354928016662598, 1.4292083978652954], + [-0.2531909942626953, 9.688295364379883], + [-3.558809995651245, -5.540499210357666], + [-2.464503288269043, 2.159989356994629], + [6.766852855682373, 8.343896865844727], + [6.625072002410889, 8.059135437011719], + [-7.408199787139893, 8.701809883117676], + [2.3202273845672607, -6.0753703117370605], + [0.21051925420761108, 10.681873321533203], + [-1.1736899614334106, -0.5532488226890564], + [7.293415069580078, -4.77468204498291], + [2.6423635482788086, -0.03230774775147438], + [4.459803104400635, -2.4855339527130127], + [-2.137209177017212, -3.248978853225708], + [2.3723456859588623, -0.4000585079193115], + [3.2237203121185303, -4.384855270385742], + [-1.9555308818817139, 2.4392764568328857], + [-2.1793854236602783, 2.253588914871216], + [2.9771296977996826, -7.85258150100708], + [6.237339496612549, 7.71714973449707], + [-6.541296482086182, 7.568972587585449], + [-4.386973857879639, -6.702336311340332], + [-2.286804437637329, -1.3101203441619873], + [-2.2006638050079346, 2.4718382358551025], + [6.722529411315918, -1.6979130506515503], + [-4.156251430511475, 5.869686126708984], + [-6.471917629241943, 0.2110271453857422], + [1.2442193031311035, 4.645291328430176], + [3.1361281871795654, 0.7586522102355957], + [4.269785404205322, -3.40380597114563], + [-4.30195951461792, -7.09981632232666], + [2.185159683227539, 3.4198620319366455], + [2.821655035018921, -7.000746726989746], + [2.9525442123413086, -4.168111801147461], + [8.605700492858887, -2.279799461364746], + [3.962817430496216, -3.56512713432312], + [0.1348159909248352, 10.197345733642578], + [0.04567401856184006, 12.950246810913086], + [2.014387845993042, 2.8988702297210693], + [-3.985092878341675, 3.146184206008911], + [2.5244429111480713, 6.063138484954834], + [5.2103166580200195, 7.428908348083496], + [0.14475256204605103, 11.232132911682129], + [-1.2176973819732666, 1.4378708600997925], + [-2.1615262031555176, 0.8588660955429077], + [-5.058756351470947, -4.355947017669678], + [-3.3191404342651367, -5.9543843269348145], + [1.9760074615478516, 3.554844379425049], + [4.654058933258057, 2.09051775932312], + [-0.5706068873405457, -0.023201528936624527], + [-4.316013813018799, -1.183485984802246], + [2.801492691040039, -3.4250426292419434], + [-3.925809144973755, -6.393111228942871], + [-0.06202203780412674, 13.50488567352295], + [-1.853421926498413, 2.4663164615631104], + [-2.484532594680786, 4.54083776473999], + [-0.4141608476638794, -1.9941519498825073], + [2.322455644607544, -7.5297322273254395], + [-5.443221092224121, 6.9161200523376465], + [1.5561003684997559, 1.5453100204467773], + [-5.097314834594727, -1.0953822135925293], + [-1.3214964866638184, -0.670129656791687], + [4.078380107879639, 5.448122978210449], + [10.497641563415527, -2.510040521621704], + [-2.3848798274993896, 1.886928915977478], + [2.4868967533111572, -3.2599575519561768], + [1.6532031297683716, -0.2149919867515564], + [2.3756215572357178, 5.245769500732422], + [-1.6306893825531006, 0.6258956789970398], + [1.6922569274902344, -7.711942672729492], + [-4.590394973754883, 5.9508466720581055], + [3.5694499015808105, -4.297384262084961], + [6.758026599884033, -1.5742965936660767], + [8.933890342712402, -2.555039405822754], + [-4.758668422698975, -2.7404210567474365], + [-2.507460117340088, 2.0744125843048096], + [-4.780533790588379, 6.705042839050293], + [-4.50331449508667, -3.4620344638824463], + [2.8515634536743164, -3.694218873977661], + [-2.261688232421875, 0.8725882768630981], + [-6.341850757598877, -2.244741916656494], + [-4.905578136444092, 5.49067497253418], + [-3.7298614978790283, 2.7588798999786377], + [4.225529670715332, 1.7377362251281738], + [-1.720304012298584, 1.9872525930404663], + [-4.147416591644287, -2.6823859214782715], + [-6.713487148284912, 7.845522880554199], + [8.715327262878418, -2.342424154281616], + [6.7799787521362305, -1.4708096981048584], + [-3.465099573135376, 5.107494354248047], + [6.933302879333496, -1.774945616722107], + [3.9196994304656982, 6.430417537689209], + [9.728617668151855, -2.405989408493042], + [-0.6666933298110962, -2.543264627456665], + [1.6163277626037598, 4.57312536239624], + [-2.976557493209839, 1.7123335599899292], + [2.7162787914276123, -5.309079170227051], + [2.6587259769439697, -7.750873565673828], + [-6.088474273681641, -1.1279433965682983], + [2.509448289871216, 6.256803512573242], + [8.839167594909668, -2.3263437747955322], + [0.07422613352537155, 12.340009689331055], + [-0.0021987035870552063, 13.229266166687012], + [3.956519842147827, -9.377944946289062], + [-4.71267557144165, 4.574672698974609], + [8.32036304473877, -2.1527092456817627], + [4.294084072113037, 7.273088455200195], + [-4.618618488311768, -6.744265079498291], + [-5.3285746574401855, -3.1811788082122803], + [-0.5125573873519897, -2.0831656455993652], + [-5.612583637237549, -1.7345174551010132], + [0.30837199091911316, -0.2574145495891571], + [4.4823198318481445, 6.4298810958862305], + [-0.38432303071022034, -1.287035584449768], + [3.698601007461548, -3.523820161819458], + [8.507919311523438, -2.35410475730896], + [0.5671345591545105, -1.0147922039031982], + [3.392176389694214, 6.562939643859863], + [8.920104026794434, -2.3315603733062744], + [-4.139563083648682, 5.577093124389648], + [0.06967412680387497, 9.635790824890137], + [9.038616180419922, -2.3999955654144287], + [1.4640202522277832, -7.319728851318359], + [-5.379098415374756, -1.992018461227417], + [1.433780312538147, 3.0955522060394287], + [1.1422924995422363, -0.40346813201904297], + [6.242555141448975, 7.636307239532471], + [3.1661534309387207, -7.372369766235352], + [0.7270076870918274, -0.988646388053894], + [8.6145658493042, -2.5766401290893555], + [4.451761245727539, -7.997285842895508], + [3.071214437484741, -4.256277084350586], + [-5.9969587326049805, 1.750583529472351], + [-1.6140491962432861, 0.7397705912590027], + [3.8727664947509766, -7.0466766357421875], + [4.689152240753174, -0.8260073661804199], + [-5.854552268981934, -0.8884968161582947], + [-3.9876482486724854, -6.372226715087891], + [7.969481945037842, -2.0772829055786133], + [8.431086540222168, -2.309804677963257], + [7.08153772354126, -3.0511395931243896], + [-2.37266206741333, -4.796972274780273], + [3.023578405380249, -4.304964065551758], + [9.960938453674316, -2.377756357192993], + [-2.282383680343628, 2.080495834350586], + [3.4980719089508057, -6.034613609313965], + [2.8475732803344727, 0.45267677307128906], + [5.661454677581787, 7.2418084144592285], + [7.729445934295654, -2.241731643676758], + [-4.378743648529053, -3.7150704860687256], + [-4.740433692932129, 4.590484619140625], + [-2.8954579830169678, -4.312000274658203], + [2.3262648582458496, 3.400421142578125], + [-0.018548615276813507, 11.920696258544922], + [3.602557420730591, -7.748549461364746], + [-4.723754405975342, -6.274918556213379], + [-4.122028827667236, -0.8733932971954346], + [-4.406838417053223, -6.379010200500488], + [-2.600100040435791, 1.011855125427246], + [-2.0665905475616455, 2.4934701919555664], + [-4.544508934020996, -6.772177696228027], + [3.0323808193206787, 0.9877865314483643], + [3.203989028930664, -3.9757814407348633], + [0.4032299518585205, -1.2912839651107788], + [-2.507758140563965, 1.9757615327835083], + [4.569489002227783, -3.196838140487671], + [9.322876930236816, -2.290677309036255], + [1.5899550914764404, -6.747925281524658], + [7.887612819671631, -2.1665399074554443], + [2.2882118225097656, 6.6882853507995605], + [-2.792994260787964, -1.7537115812301636], + [-4.831282138824463, -1.00955069065094], + [3.5727579593658447, -7.247965335845947], + [-2.2047698497772217, 2.2420413494110107], + [-4.966481685638428, 4.975467681884766], + [-6.22282075881958, 6.9852118492126465], + [2.699073076248169, -9.119714736938477], + [8.305746078491211, -2.3646974563598633], + [0.5633581876754761, -5.675108432769775], + [-4.912907123565674, -5.634003162384033], + [8.814107894897461, -2.3064887523651123], + [1.3177827596664429, 6.652097702026367], + [2.8538668155670166, -4.059932708740234], + [-2.136929988861084, 2.0905003547668457], + [9.578837394714355, -2.5481488704681396], + [4.934504985809326, 2.0090978145599365], + [-0.04908115416765213, 13.1857271194458], + [2.2988381385803223, -8.55937385559082], + [7.459829807281494, -1.682485580444336], + [-2.9614546298980713, -1.28545343875885], + [1.948643684387207, 3.4312140941619873], + [-6.17614221572876, -0.22965818643569946], + [6.6604180335998535, -1.6431337594985962], + [5.383604526519775, 7.629100322723389], + [-2.3959743976593018, 2.225823163986206], + [-4.333309650421143, 4.610697269439697], + [8.351783752441406, -2.467024803161621], + [-1.0288463830947876, -2.0696709156036377], + [-5.144246578216553, -4.46484375], + [-3.8226230144500732, -3.1316769123077393], + [-4.434289455413818, -6.74202823638916], + [0.023009471595287323, 13.771080017089844], + [7.628543376922607, 9.023744583129883], + [3.1885645389556885, -7.378060817718506], + [0.23560374975204468, 11.111909866333008], + [8.61313533782959, -2.554939031600952], + [-2.678724765777588, -4.586965560913086], + [0.24874335527420044, 11.145458221435547], + [-2.5347933769226074, -1.6126987934112549], + [7.10905647277832, -1.5527732372283936], + [2.4250924587249756, -8.972749710083008], + [6.5467705726623535, 8.105976104736328], + [1.501396656036377, 5.274711608886719], + [-1.2659153938293457, 1.9536093473434448], + [-6.8975605964660645, -0.8669672012329102], + [2.7818315029144287, -9.58039665222168], + [6.60023832321167, 8.084722518920898], + [0.21599453687667847, 10.64105224609375], + [5.3172125816345215, 7.125979900360107], + [3.5018041133880615, -6.972353935241699], + [6.369451999664307, -1.3495441675186157], + [3.4333760738372803, -2.9032609462738037], + [-2.3375816345214844, -4.188500881195068], + [4.0719380378723145, 1.8428680896759033], + [-0.002621687948703766, -0.6978901624679565], + [5.326152324676514, -4.1717448234558105], + [-3.092858076095581, 4.46860933303833], + [-5.53407621383667, 6.072267532348633], + [10.130441665649414, -2.540032386779785], + [-4.471252918243408, -6.812472343444824], + [2.7054543495178223, 5.853205680847168], + [-2.1288890838623047, 2.52459454536438], + [2.9818365573883057, -3.8460798263549805], + [-4.316251754760742, -0.8771505355834961], + [-2.0826971530914307, 2.465571641921997], + [3.4993722438812256, -4.587016582489014], + [3.241673231124878, -4.635720252990723], + [-1.612088918685913, -1.2329765558242798], + [1.753807783126831, 6.188563823699951], + [3.2222630977630615, -3.5453946590423584], + [8.527594566345215, -2.3019020557403564], + [-5.396665096282959, 6.669349193572998], + [0.03570406883955002, 9.193697929382324], + [-5.316840648651123, 3.6507749557495117], + [10.026141166687012, -2.4361259937286377], + [-5.9286627769470215, 6.278041839599609], + [1.4586560726165771, -0.0713629275560379], + [5.647656440734863, 7.349211692810059], + [7.95154333114624, -2.4021823406219482], + [5.549449443817139, 7.388433456420898], + [1.13893723487854, -0.3434309661388397], + [5.672544002532959, -3.686986207962036], + [-2.4605958461761475, -3.6389400959014893], + [-3.394181966781616, -3.8800675868988037], + [0.2589401602745056, 11.252445220947266], + [1.606980800628662, 0.19630149006843567], + [-3.729449510574341, 3.7187204360961914], + [-4.353186130523682, 5.184699058532715], + [3.8687422275543213, -4.979698181152344], + [-3.95487380027771, -2.234001636505127], + [-2.591371536254883, 1.9896663427352905], + [-3.151806116104126, -4.723904609680176], + [2.16687273979187, 5.54461669921875], + [7.189284801483154, -3.3872978687286377], + [2.9432857036590576, -6.3037614822387695], + [-3.087104082107544, -4.261096000671387], + [5.537886142730713, 6.995030879974365], + [3.0969555377960205, -3.615358352661133], + [0.047826580703258514, 12.474172592163086], + [-3.7107179164886475, -2.144634962081909], + [-4.59297513961792, -6.758676052093506], + [3.0526368618011475, -10.260770797729492], + [-3.378160238265991, 5.779911994934082], + [0.7129073739051819, -5.4271392822265625], + [3.0920603275299072, -4.0784454345703125], + [-2.182612657546997, -2.9345052242279053], + [2.374704122543335, -3.897672414779663], + [6.929844856262207, -1.9629268646240234], + [7.755758762359619, 9.643845558166504], + [10.301840782165527, -2.4854652881622314], + [-4.542770862579346, -7.2436604499816895], + [-4.337190628051758, -1.5584372282028198], + [0.2531796991825104, -0.3533337712287903], + [3.576505661010742, -3.7516627311706543], + [2.08675217628479, 4.244828701019287], + [4.437730312347412, -0.7864317297935486], + [7.887142181396484, -2.149862051010132], + [-3.5755770206451416, 0.16700822114944458], + [-5.169276237487793, -5.659641265869141], + [1.7713394165039062, -7.560413837432861], + [-2.0542073249816895, 2.554072856903076], + [3.1267318725585938, -6.892923355102539], + [-2.2433345317840576, 1.8113868236541748], + [-2.4982619285583496, 1.8749057054519653], + [-3.8956682682037354, -6.459243297576904], + [-0.016209550201892853, 9.804193496704102], + [-0.27224987745285034, -1.563228964805603], + [4.202597141265869, -4.076168060302734], + [-4.1018290519714355, -5.022223949432373], + [1.891357660293579, 3.5326366424560547], + [-4.666468620300293, -7.48569393157959], + [-4.148268699645996, -6.318004608154297], + [3.16237735748291, 1.9648140668869019], + [2.326180934906006, 2.7143118381500244], + [2.3131539821624756, -8.694915771484375], + [2.872483730316162, -10.358436584472656], + [-3.650552988052368, -5.817880153656006], + [0.07739072293043137, 11.250774383544922], + [0.7668322324752808, 0.10631544888019562], + [3.113501787185669, -4.085446357727051], + [-3.96879506111145, -1.5673413276672363], + [3.387521266937256, -7.196866512298584], + [-3.4578773975372314, -5.258416175842285], + [3.094312906265259, 1.6757768392562866], + [2.6153409481048584, 1.7128063440322876], + [3.008542060852051, -4.2898101806640625], + [-5.173090934753418, -1.2368162870407104], + [4.072986602783203, 6.686753273010254], + [2.8552873134613037, -3.7470734119415283], + [4.365719795227051, 6.471092700958252], + [-0.5103176832199097, 1.4176573753356934], + [-1.573776125907898, -4.496782302856445], + [2.835008382797241, -4.13447904586792], + [-1.4360989332199097, 2.0923585891723633], + [2.5200917720794678, 5.201951503753662], + [4.38806676864624, -3.7471871376037598], + [6.210570812225342, 7.503022193908691], + [2.8869974613189697, -9.012258529663086], + [7.805441379547119, -2.46146297454834], + [-3.488140106201172, -0.7605994939804077], + [-2.0763370990753174, 2.403958559036255], + [-0.3213772475719452, 0.670099675655365], + [1.091383934020996, 4.1017327308654785], + [6.405665874481201, 8.16784381866455], + [2.819594621658325, -8.115875244140625], + [-1.9435700178146362, 2.2161715030670166], + [6.587539196014404, -1.4956238269805908], + [-5.169628620147705, -1.7376494407653809], + [4.030505657196045, 7.4632086753845215], + [-5.922476291656494, 7.82564640045166], + [2.944563627243042, 1.9648526906967163], + [3.670287609100342, -3.9838874340057373], + [1.2555755376815796, 1.9620174169540405], + [2.945786714553833, -4.172786235809326], + [-2.156071901321411, 2.2911272048950195], + [8.614066123962402, -2.3396027088165283], + [0.675355851650238, -0.3843974471092224], + [5.357016086578369, -3.9637129306793213], + [-2.589503288269043, -4.719831466674805], + [6.289804935455322, -1.3352044820785522], + [2.0795481204986572, 1.8539236783981323], + [-3.8149616718292236, -2.7808969020843506], + [2.9848673343658447, -3.548677921295166], + [2.6507656574249268, -8.79057788848877], + [7.159067153930664, -1.8878440856933594], + [2.181105375289917, 4.7360992431640625], + [9.191929817199707, -2.3587701320648193], + [-0.1319277286529541, 9.780355453491211], + [6.371241092681885, 8.163459777832031], + [2.2772207260131836, 5.635400772094727], + [-6.335047245025635, 5.410765171051025], + [3.3746469020843506, -0.22733739018440247], + [6.705272674560547, 8.256871223449707], + [-3.186533212661743, -3.6538703441619873], + [-2.8103585243225098, -4.224916934967041], + [3.1154348850250244, -4.062300682067871], + [3.280226469039917, -4.767630577087402], + [2.3210718631744385, 3.829772472381592], + [0.24612504243850708, 10.62405014038086], + [1.0870766639709473, -5.474643230438232], + [2.8815512657165527, 4.318775177001953], + [1.8044369220733643, 4.89414119720459], + [4.931021690368652, 6.423261642456055], + [2.153404474258423, -0.02440488710999489], + [2.3932254314422607, 6.0550689697265625], + [0.0003457590937614441, 10.340628623962402], + [-1.558976173400879, 2.0958378314971924], + [4.308745861053467, -3.2300398349761963], + [-4.839005470275879, -6.240390777587891], + [7.415675163269043, -2.3304197788238525], + [-8.35364055633545, -0.4013315439224243], + [3.9093854427337646, -3.139223575592041], + [-4.202373504638672, -6.342589378356934], + [-2.201457977294922, 2.7727067470550537], + [2.155941963195801, 4.440990447998047], + [0.6948875188827515, -6.766702651977539], + [-0.8841710686683655, 1.1202298402786255], + [6.417693614959717, -2.149902105331421], + [-3.579972982406616, -2.8921749591827393], + [8.709269523620605, -2.3235023021698], + [-0.28103122115135193, -1.7060860395431519], + [-2.470484733581543, 1.820796251296997], + [2.2487905025482178, 5.004703521728516], + [2.239678382873535, 2.3836939334869385], + [0.12150567024946213, 10.193717956542969], + [1.9722347259521484, 4.921921253204346], + [5.832831859588623, -3.897136926651001], + [5.470840930938721, -0.9995462894439697], + [2.2233588695526123, 1.0976858139038086], + [1.2144334316253662, 5.766650676727295], + [-4.894833087921143, 5.740142345428467], + [2.032601833343506, -0.3512343168258667], + [5.067512035369873, 6.530229091644287], + [-2.233389377593994, 2.4360005855560303], + [-4.118939399719238, -4.520325183868408], + [-3.269192934036255, -2.8703420162200928], + [0.35713624954223633, 0.5485621690750122], + [-2.4171903133392334, -5.015486717224121], + [-3.23974347114563, -5.229859352111816], + [0.6559658050537109, -0.9213197231292725], + [5.094553470611572, -0.5055988430976868], + [6.813175678253174, -1.358472228050232], + [-2.1066901683807373, 2.508674383163452], + [2.5084664821624756, -9.066115379333496], + [1.508842945098877, -7.521230697631836], + [6.146739482879639, -1.4462664127349854], + [9.625561714172363, -2.328819513320923], + [0.03819649666547775, 9.789825439453125], + [-3.7934322357177734, -2.2378668785095215], + [-0.033707208931446075, 9.078022003173828], + [-0.005031891167163849, 12.98417854309082], + [0.035370998084545135, 12.12869644165039], + [0.41768282651901245, 8.982406616210938], + [3.0956573486328125, -8.62421989440918], + [-2.1018173694610596, 3.180558919906616], + [-0.052704818546772, 12.374183654785156], + [4.078361988067627, 1.3434361219406128], + [1.725178837776184, -6.001142501831055], + [-4.198023319244385, 4.137670516967773], + [-4.696735858917236, -0.9347907304763794], + [-4.403430461883545, -5.646422863006592], + [-0.103427954018116, 14.484752655029297], + [2.3969509601593018, 1.5057181119918823], + [5.894948959350586, -2.896667718887329], + [-5.616329193115234, 4.707794666290283], + [2.7696588039398193, 2.0124287605285645], + [3.5340089797973633, 6.175167083740234], + [0.08701019734144211, 9.164773941040039], + [1.4163694381713867, -6.649352073669434], + [2.618211269378662, -9.674125671386719], + [-4.880258083343506, -6.565193176269531], + [-1.2817004919052124, 1.892228126525879], + [-0.007332630455493927, 12.285299301147461], + [2.9023337364196777, -4.109076976776123], + [-2.0947468280792236, 2.384024143218994], + [-2.5340158939361572, 1.6757701635360718], + [6.456108093261719, 7.845381736755371], + [0.172715961933136, 11.88135814666748], + [1.2197993993759155, -0.5797333717346191], + [0.9390011429786682, -6.480563163757324], + [-5.2679338455200195, 1.2781158685684204], + [5.844383239746094, 7.408939361572266], + [-3.7079312801361084, -3.6324195861816406], + [-5.456037521362305, 7.623172283172607], + [-4.880075454711914, -2.8663580417633057], + [3.255642890930176, -3.7641756534576416], + [-6.062585353851318, 3.7221639156341553], + [-4.74218225479126, -6.570178031921387], + [-0.03296256810426712, 11.475475311279297], + [1.4263521432876587, -6.688024520874023], + [6.685096263885498, 8.206464767456055], + [4.298803806304932, -2.997610330581665], + [2.3911139965057373, 3.718449354171753], + [-5.327955722808838, -1.3802059888839722], + [4.431122303009033, -3.539926052093506], + [4.004533290863037, -3.295379400253296], + [6.518228054046631, 8.00777816772461], + [4.247964382171631, 6.237591743469238], + [2.611872434616089, -8.999805450439453], + [2.557143449783325, -8.70350456237793], + [-2.527222156524658, 1.6235119104385376], + [0.5107277035713196, 11.785103797912598], + [-2.5131313800811768, 2.2631137371063232], + [-5.337998867034912, 6.240777969360352], + [7.801583766937256, -1.9577841758728027], + [8.929287910461426, -2.430016279220581], + [-3.035376787185669, -4.153609275817871], + [0.17787063121795654, 9.956624984741211], + [-6.604261875152588, 7.526713848114014], + [3.5779693126678467, -3.8759896755218506], + [-3.843113899230957, 5.653647422790527], + [-3.699153184890747, -5.356710910797119], + [6.71892786026001, 8.560646057128906], + [5.531357288360596, -1.4789904356002808], + [-4.986656665802002, 0.04514777287840843], + [-2.0638887882232666, 1.0281000137329102], + [-2.153461456298828, 2.7351019382476807], + [-6.109128952026367, 6.692075252532959], + [5.7478179931640625, -2.867732524871826], + [0.22117048501968384, 11.296027183532715], + [-4.7256388664245605, -6.958619117736816], + [-4.845475673675537, -1.0311416387557983], + [-3.137108564376831, -4.022036075592041], + [2.5529778003692627, 5.354808330535889], + [-4.516251087188721, 3.7387473583221436], + [0.11125271767377853, 12.092138290405273], + [3.4285926818847656, -4.663222789764404], + [-3.6366512775421143, -6.318422317504883], + [3.483590602874756, -3.3658430576324463], + [-5.464378833770752, -1.6800215244293213], + [7.971567630767822, -2.1667306423187256], + [7.912513732910156, -2.1336159706115723], + [0.3959346413612366, 10.661415100097656], + [1.468245267868042, -7.612814903259277], + [-3.3834550380706787, -5.1741414070129395], + [-4.296323299407959, 4.537291049957275], + [0.8565019965171814, 2.0804033279418945], + [-6.288753032684326, 7.153842449188232], + [3.528623580932617, -5.69428014755249], + [-2.733814001083374, 1.533751130104065], + [2.463531017303467, 5.639880657196045], + [10.180625915527344, -2.513214349746704], + [7.484642028808594, -2.211510419845581], + [0.24711874127388, -1.3151249885559082], + [5.293548107147217, 7.960585594177246], + [-2.274348258972168, -3.0675742626190186], + [-1.9872560501098633, 1.7892881631851196], + [2.537419080734253, 1.1640987396240234], + [6.489940643310547, -5.329274654388428], + [-2.1110312938690186, 2.610036849975586], + [8.152976989746094, -2.117173671722412], + [8.202620506286621, -2.3198583126068115], + [2.92240571975708, 7.530787467956543], + [-2.696859836578369, 5.921717166900635], + [-2.2454240322113037, 2.5797483921051025], + [4.089447021484375, 1.8409478664398193], + [-0.7845925688743591, -2.9749338626861572], + [3.282625436782837, 1.239353060722351], + [-2.666064739227295, 2.144937753677368], + [6.054733753204346, -2.8411762714385986], + [2.5521352291107178, 4.2977447509765625], + [0.05473601073026657, 12.105239868164062], + [0.295285165309906, 8.748880386352539], + [-2.524606704711914, 2.1032180786132812], + [-0.15161991119384766, 4.530492782592773], + [-6.373350620269775, -0.6367750763893127], + [2.3397881984710693, 5.923731327056885], + [-4.308169841766357, -6.339336395263672], + [-2.61234188079834, 2.0481324195861816], + [3.412325620651245, -9.006078720092773], + [6.684234142303467, 8.157880783081055], + [1.9530558586120605, 2.1912589073181152], + [3.138932466506958, 4.6613240242004395], + [3.1640217304229736, -8.097452163696289], + [-5.019550800323486, 6.028348445892334], + [-1.5491859912872314, -3.805354356765747], + [-0.07980663329362869, 1.3624203205108643], + [-2.468468189239502, 2.034883975982666], + [3.0351710319519043, -9.093683242797852], + [-2.2996628284454346, 2.6751554012298584], + [-6.013232707977295, 3.8654658794403076], + [-3.755201816558838, -1.8600056171417236], + [4.595478534698486, 1.967171549797058], + [1.2518166303634644, 0.17839255928993225], + [-0.06126505881547928, -3.239629030227661], + [2.645127058029175, 5.796725749969482], + [2.1030352115631104, 4.4291276931762695], + [1.0624454021453857, -4.186285972595215], + [1.9944281578063965, 4.551418304443359], + [-0.8350380063056946, 0.007781904190778732], + [-0.09467894583940506, 9.316824913024902], + [-3.9435219764709473, 5.157806396484375], + [9.17423152923584, -2.281367063522339], + [-4.182790279388428, -1.7799479961395264], + [1.5397456884384155, 1.6201276779174805], + [3.5300028324127197, -5.087894439697266], + [6.37421178817749, -1.094298005104065], + [4.4358391761779785, -2.906404733657837], + [-2.6096246242523193, 1.9086034297943115], + [0.3792518675327301, -3.9673166275024414], + [-3.5350430011749268, -4.3162689208984375], + [-2.585195779800415, 2.2126193046569824], + [9.679429054260254, -2.476133108139038], + [7.444173336029053, -2.1970126628875732], + [8.223371505737305, -2.216848134994507], + [5.330679416656494, 7.515696048736572], + [1.7838597297668457, 2.8749806880950928], + [-0.01198560744524002, 9.863165855407715], + [-2.358908176422119, 2.1245944499969482], + [-0.04123026877641678, 9.869768142700195], + [-5.488621711730957, -0.03404569998383522], + [2.999181032180786, -4.088537216186523], + [-3.172753095626831, -2.6012656688690186], + [-0.03707123547792435, 9.81589126586914], + [3.7221648693084717, -3.5673444271087646], + [6.62248420715332, -1.450354814529419], + [-4.293997287750244, 5.110751152038574], + [-6.822323322296143, 6.871431350708008], + [2.914424419403076, 6.39090633392334], + [-5.543763160705566, 0.1363377571105957], + [4.000138282775879, -5.489460468292236], + [-2.010814905166626, 2.5088460445404053], + [0.10716145485639572, 11.10651969909668], + [7.847573757171631, -2.129666566848755], + [0.23400509357452393, 11.026521682739258], + [8.338218688964844, -2.316761016845703], + [6.739675998687744, 8.348365783691406], + [-2.2246570587158203, 1.5595965385437012], + [0.0016424581408500671, 9.098381042480469], + [-5.043299674987793, -1.8322800397872925], + [-2.704890489578247, -3.580183267593384], + [5.879622936248779, -1.2018309831619263], + [-5.7573561668396, 5.872803688049316], + [3.532449245452881, -1.1289734840393066], + [-3.447051763534546, 3.6572916507720947], + [2.2785990238189697, 5.000090599060059], + [-1.2331113815307617, -3.836819887161255], + [7.969674587249756, -2.149387836456299], + [2.5642197132110596, -3.9026081562042236], + [-6.882852077484131, -0.60325688123703], + [11.230561256408691, -2.578209638595581], + [3.0206685066223145, -4.152281761169434], + [-3.145240068435669, -1.2513242959976196], + [-4.343000888824463, -3.799428939819336], + [2.513827085494995, -3.6324524879455566], + [1.7520980834960938, -8.15768051147461], + [6.926837921142578, -1.327656865119934], + [-2.502471685409546, 1.6881135702133179], + [0.060990624129772186, 12.2506742477417], + [5.142690658569336, 7.145606994628906], + [1.9509303569793701, -8.129474639892578], + [-2.076237916946411, 2.2733817100524902], + [3.1789846420288086, -6.440167427062988], + [9.492164611816406, -2.359679698944092], + [-7.266211986541748, 8.525420188903809], + [6.945600986480713, -1.6049928665161133], + [2.7396955490112305, -7.303186893463135], + [2.1051249504089355, 4.005293369293213], + [-2.786216974258423, -3.389943838119507], + [2.971538782119751, 4.503418922424316], + [-2.608032464981079, -3.328721046447754], + [-3.3035871982574463, -3.856006383895874], + [0.1930946409702301, -3.850391387939453], + [10.155561447143555, -2.454524040222168], + [3.3158440589904785, -7.745234966278076], + [7.546692371368408, -2.3171186447143555], + [-0.12053102999925613, 9.802021026611328], + [5.915677547454834, -3.5627310276031494], + [8.928576469421387, -2.578812837600708], + [-5.868149280548096, 7.030473709106445], + [6.355392932891846, 7.9999799728393555], + [3.0681025981903076, -4.324878215789795], + [-2.1440248489379883, 2.6367788314819336], + [4.6192851066589355, 6.920262336730957], + [5.481439113616943, 7.614030838012695], + [8.601019859313965, -2.4875149726867676], + [-0.031642742455005646, 10.117544174194336], + [-3.1844589710235596, -5.107296466827393], + [0.1763809323310852, 11.926599502563477], + [3.3690731525421143, -8.341712951660156], + [1.0380771160125732, -0.24202567338943481], + [4.276249408721924, 7.129429817199707], + [-3.07129168510437, -1.9015653133392334], + [0.1672939658164978, 10.202835083007812], + [0.9755261540412903, -0.677445113658905], + [2.947821855545044, -3.3988845348358154], + [-4.125540256500244, -6.0787577629089355], + [6.70295524597168, -3.7191455364227295], + [8.49824047088623, -2.1970226764678955], + [6.681443691253662, -2.0177595615386963], + [-2.9974420070648193, 0.23180431127548218], + [-7.6962409019470215, -0.2419586181640625], + [-2.896359443664551, 0.09115928411483765], + [3.2171919345855713, 1.2448283433914185], + [5.501490592956543, 7.725028991699219], + [2.714536428451538, -3.838090419769287], + [-2.9133834838867188, -1.972061038017273], + [-6.626056671142578, 7.536255359649658], + [2.737516164779663, 0.7276396751403809], + [1.9948899745941162, 5.257991313934326], + [-3.1414222717285156, -3.896465301513672], + [-4.216709613800049, -1.172672152519226], + [-2.506061553955078, -3.3298113346099854], + [3.5708725452423096, -7.539731025695801], + [4.10029411315918, -4.03448486328125], + [-2.78350567817688, -3.9174587726593018], + [0.4620901346206665, -5.922318458557129], + [0.23727506399154663, 10.579309463500977], + [-0.17142444849014282, -1.4980531930923462], + [0.7536638975143433, -6.026784896850586], + [-2.3916783332824707, 1.9151008129119873], + [2.116642951965332, 5.325356483459473], + [-4.947936534881592, 6.384657859802246], + [-3.237785816192627, -1.1925593614578247], + [-4.136686325073242, -2.380279779434204], + [-3.914742946624756, -2.545985221862793], + [-3.0083634853363037, -3.7451577186584473], + [-3.278783082962036, -3.9569404125213623], + [8.136025428771973, -2.3022525310516357], + [-2.167139768600464, 2.706892728805542], + [4.443637371063232, -3.928603410720825], + [-4.406185626983643, -0.847845196723938], + [7.407650947570801, -4.542553901672363], + [3.9338204860687256, 5.7670392990112305], + [-2.4344937801361084, 1.8216279745101929], + [2.2207906246185303, 1.27719247341156], + [6.683483600616455, 8.053832054138184], + [4.25459623336792, 1.423952579498291], + [5.165127277374268, -5.0510969161987305], + [0.9484339356422424, 1.252313494682312], + [-5.697015285491943, -1.8734331130981445], + [9.136865615844727, -2.3023922443389893], + [-1.7513502836227417, -0.44115880131721497], + [0.116756372153759, 11.936891555786133], + [1.5597245693206787, 1.5348924398422241], + [0.2656904458999634, 11.657674789428711], + [3.049325704574585, -2.1178548336029053], + [3.1828038692474365, -3.35550594329834], + [-3.7458786964416504, -5.586150646209717], + [4.155182838439941, -4.040050506591797], + [4.683841228485107, -6.023383140563965], + [-3.147310972213745, 5.578742980957031], + [6.2458391189575195, -1.1162151098251343], + [-1.793107271194458, 0.0322241447865963], + [-4.71580171585083, -5.873134613037109], + [2.710202217102051, 0.4525141716003418], + [-0.8153268694877625, -3.136051893234253], + [3.78853178024292, -4.577727317810059], + [-4.715875148773193, -6.4317307472229], + [2.912858724594116, -9.412538528442383], + [3.0084407329559326, 1.6978422403335571], + [3.2314836978912354, -3.3025996685028076], + [6.223802089691162, 8.197373390197754], + [10.64234447479248, -2.5969715118408203], + [9.03197193145752, -2.3881208896636963], + [-5.449864864349365, -3.85455060005188], + [2.483276128768921, -8.151965141296387], + [10.214571952819824, -2.451279401779175], + [0.28705745935440063, 9.935500144958496], + [-4.849135875701904, 1.5278139114379883], + [3.728426456451416, -4.136457443237305], + [6.1303606033325195, -3.3551247119903564], + [-4.347620487213135, -3.097507953643799], + [-2.6448888778686523, 1.685689091682434], + [2.667900800704956, -7.494906902313232], + [3.2277143001556396, -4.325732707977295], + [-4.0813517570495605, -3.0368599891662598], + [8.506179809570312, -2.3024704456329346], + [5.216400623321533, 6.67852783203125], + [-5.380526542663574, 8.574918746948242], + [-5.611952781677246, -2.739453077316284], + [0.6833702921867371, 11.853278160095215], + [-2.3662667274475098, 2.3412303924560547], + [3.943986654281616, -3.0017762184143066], + [0.07018011063337326, 9.63218879699707], + [1.9371886253356934, 5.139427661895752], + [2.161486864089966, 4.9314117431640625], + [8.082111358642578, -2.210447072982788], + [3.051877737045288, -4.338604927062988], + [8.124028205871582, -2.1285951137542725], + [2.8283157348632812, -4.036776065826416], + [2.7278053760528564, -5.372683525085449], + [5.2399163246154785, -2.2135536670684814], + [-4.054579734802246, -2.7148654460906982], + [7.385406970977783, -1.9859999418258667], + [-1.6068075895309448, 1.830212116241455], + [0.6479331254959106, -5.546990871429443], + [4.055371284484863, 1.5919934511184692], + [-3.2274439334869385, 7.186001777648926], + [2.2421467304229736, -5.980189800262451], + [-1.834004521369934, 2.443507432937622], + [1.8961374759674072, 5.081093788146973], + [11.20884895324707, -2.4712769985198975], + [-0.058815307915210724, 9.002660751342773], + [0.361019492149353, 6.444549083709717], + [-6.9363861083984375, 8.128324508666992], + [2.6948699951171875, -3.3709909915924072], + [-4.492299556732178, -5.430488586425781], + [4.592254638671875, 1.9976330995559692], + [-4.100246906280518, -1.9373779296875], + [3.5039751529693604, -3.181652069091797], + [3.6079177856445312, -6.539770603179932], + [-6.437140464782715, 7.468830108642578], + [0.678324282169342, 11.593866348266602], + [8.03309440612793, -1.996350884437561], + [0.9640882611274719, 1.9888161420822144], + [-4.659983158111572, 3.867210626602173], + [8.961209297180176, -2.3279731273651123], + [0.8097277283668518, -0.8875133991241455], + [6.522767543792725, -1.4040493965148926], + [-6.080286502838135, 6.8735809326171875], + [7.554073810577393, -2.776984930038452], + [9.699413299560547, -2.344123601913452], + [0.9355865120887756, -6.461084365844727], + [-6.293829441070557, 0.7072387933731079], + [7.585311412811279, -2.2110402584075928], + [9.185592651367188, -2.53202748298645], + [1.5187220573425293, -5.357268333435059], + [-1.6860883235931396, 2.242809534072876], + [4.7745184898376465, -6.474271774291992], + [1.2469229698181152, -1.0683614015579224], + [3.6268022060394287, -4.256225109100342], + [-5.9328203201293945, -0.8865158557891846], + [5.538726329803467, -3.103471279144287], + [6.444371700286865, -4.274105548858643], + [8.105048179626465, -2.384751558303833], + [-2.0324008464813232, 2.4535202980041504], + [-2.633471727371216, 1.9020726680755615], + [4.092379570007324, -3.5658254623413086], + [3.0468528270721436, -4.305830955505371], + [-2.0570852756500244, 2.4509336948394775], + [8.817557334899902, -2.4035937786102295], + [-5.1086859703063965, -3.553440809249878], + [-5.065428256988525, -0.8217455148696899], + [8.752663612365723, -2.4545857906341553], + [3.5175538063049316, -5.544989585876465], + [-3.671069383621216, -5.339395523071289], + [-5.6356377601623535, -3.6169161796569824], + [10.98283863067627, -2.420819044113159], + [-3.999149799346924, -5.216174125671387], + [-3.15818190574646, 3.6874728202819824], + [3.2077720165252686, -8.554132461547852], + [6.462571620941162, 8.113935470581055], + [-4.663532257080078, -7.652798652648926], + [-2.075723648071289, 2.383742094039917], + [-3.349917411804199, -1.703802227973938], + [-1.105926275253296, 1.435935378074646], + [-5.040729522705078, -0.999411940574646], + [8.336750030517578, -2.5658442974090576], + [-1.2455999851226807, 1.5814296007156372], + [2.36727237701416, -5.672654151916504], + [2.9896554946899414, -4.081210136413574], + [2.0095298290252686, 3.0592947006225586], + [-0.09552497416734695, -1.765541672706604], + [-2.382685422897339, 1.8174866437911987], + [1.9656484127044678, 5.394744396209717], + [-2.5135982036590576, 1.7053322792053223], + [-1.320364236831665, -4.087646961212158], + [0.9208402037620544, 5.632988929748535], + [-2.5593202114105225, 1.659602165222168], + [2.691068410873413, -3.5407626628875732], + [3.2150652408599854, -8.061346054077148], + [-3.9375016689300537, -5.727611541748047], + [-4.283620834350586, 5.915518760681152], + [-4.19284725189209, -1.8810425996780396], + [3.3738129138946533, -9.348039627075195], + [-2.7002267837524414, -0.912091851234436], + [-6.215809345245361, 6.099099159240723], + [-1.9275221824645996, -1.618497610092163], + [0.021076194941997528, 9.287793159484863], + [-6.714646339416504, 7.137850761413574], + [1.5656981468200684, -3.161731481552124], + [-7.264645099639893, 6.923295974731445], + [-4.718197345733643, -2.448335886001587], + [-5.435947895050049, 5.57635498046875], + [3.0770657062530518, -4.299827575683594], + [5.48981237411499, 7.975484848022461], + [3.4631142616271973, -2.5372672080993652], + [1.9746642112731934, 5.019960403442383], + [1.6144403219223022, -6.929451942443848], + [1.7232325077056885, -6.868546962738037], + [1.2224712371826172, -7.546457290649414], + [7.396299839019775, 8.839755058288574], + [-6.513904094696045, 0.3997947573661804], + [2.0439350605010986, 4.727728366851807], + [-1.280827283859253, -3.2359931468963623], + [0.5496422052383423, 7.837154865264893], + [1.8442164659500122, 0.04462204501032829], + [-0.5411643385887146, -2.405550241470337], + [-2.319765329360962, 1.9188356399536133], + [-1.1374188661575317, 1.2069790363311768], + [3.2666385173797607, 0.8630926609039307], + [-3.0656120777130127, -4.791818618774414], + [-7.713337421417236, -0.11639034748077393], + [-0.0048179104924201965, 12.946396827697754], + [-2.749835252761841, -4.794670104980469], + [-4.072820663452148, -6.467780113220215], + [0.26872003078460693, 10.869930267333984], + [-0.09193164855241776, 9.304315567016602], + [0.12421887367963791, 9.507205963134766], + [0.9802911877632141, -6.873239040374756], + [3.085639238357544, -9.04265022277832], + [-4.797643661499023, 5.1493988037109375], + [0.6177926659584045, 12.261917114257812], + [-2.6254403591156006, -4.759526252746582], + [2.7158074378967285, 6.024595260620117], + [-2.092611312866211, 2.445347309112549], + [1.345749855041504, -0.27173107862472534], + [-3.86078143119812, -5.955669403076172], + [-1.5914239883422852, 1.8756053447723389], + [-3.844785451889038, -2.7852606773376465], + [-2.552846670150757, 1.631420612335205], + [-3.1587889194488525, -4.855040550231934], + [6.9333415031433105, -2.687323808670044], + [-0.8023650050163269, -0.19517377018928528], + [4.342923641204834, 1.929089069366455], + [8.234969139099121, -2.2519290447235107], + [-0.6088067889213562, -2.485475778579712], + [0.9954569935798645, -3.632969617843628], + [4.354427814483643, 1.756264090538025], + [9.047533988952637, -2.381520986557007], + [2.717900037765503, -7.351755619049072], + [0.42891961336135864, -1.0472372770309448], + [7.1044206619262695, -1.8186637163162231], + [-2.7610011100769043, 1.4930977821350098], + [2.552703619003296, 2.007551431655884], + [8.560572624206543, -2.8840134143829346], + [1.4794535636901855, 5.162499904632568], + [6.06476354598999, 8.140069961547852], + [-6.452106952667236, 7.540679931640625], + [2.045600652694702, 1.5125528573989868], + [5.514514446258545, -2.4155733585357666], + [-1.0764104127883911, 0.058201517909765244], + [2.5739312171936035, -9.35051441192627], + [2.842808961868286, -3.990654230117798], + [1.8640758991241455, -5.583305835723877], + [-2.2458479404449463, 2.9487690925598145], + [7.138623237609863, -1.4101139307022095], + [-5.567985534667969, 7.267347812652588], + [4.992990016937256, 6.706251621246338], + [1.4455634355545044, -7.326674461364746], + [3.7851815223693848, -3.645962953567505], + [-4.456874370574951, -6.4549641609191895], + [2.353242874145508, 1.8748046159744263], + [0.19547396898269653, 11.45909309387207], + [-2.5733845233917236, 1.58834707736969], + [0.23563116788864136, 11.203217506408691], + [8.547987937927246, -2.232543706893921], + [-4.125109672546387, -6.331532955169678], + [3.3553125858306885, 1.4974943399429321], + [4.461019039154053, 6.065950393676758], + [0.1537286639213562, 10.960588455200195], + [1.959719181060791, 4.131084442138672], + [-2.3761374950408936, 2.356626272201538], + [-2.541194200515747, -3.9281530380249023], + [7.0866498947143555, 8.571037292480469], + [-4.577703952789307, -6.410134792327881], + [2.392829418182373, 3.6190695762634277], + [4.493808269500732, -4.078422546386719], + [7.690512180328369, -2.1354243755340576], + [-2.413802146911621, 5.618729114532471], + [-4.371225833892822, -6.279083251953125], + [11.22901439666748, -2.468628406524658], + [2.9122955799102783, -4.080397129058838], + [3.8432576656341553, 1.527518391609192], + [-2.0987355709075928, -0.536756157875061], + [-7.0506110191345215, 7.7668070793151855], + [-2.1815571784973145, -1.8796942234039307], + [-1.0929811000823975, 1.0171421766281128], + [-5.976344585418701, 8.61440372467041], + [-5.125655651092529, -1.632914662361145], + [-1.6792519092559814, 1.779876947402954], + [3.52333927154541, -6.343975067138672], + [-2.0210955142974854, 2.43928599357605], + [8.331774711608887, -2.1783533096313477], + [5.814351558685303, -1.2039607763290405], + [-6.435433864593506, 7.659621238708496], + [0.2952863276004791, -0.6060938835144043], + [-1.5253331661224365, 1.7863762378692627], + [8.227694511413574, -2.3455023765563965], + [-2.9515037536621094, -0.9662411212921143], + [3.753127336502075, -4.575977802276611], + [7.57269287109375, -2.1312811374664307], + [-2.099257230758667, 2.3103365898132324], + [-0.46340304613113403, -1.8839741945266724], + [10.376030921936035, -2.4605276584625244], + [3.500007390975952, 6.522976875305176], + [-3.6804709434509277, 3.956738233566284], + [-2.2048938274383545, -3.043631076812744], + [6.08935022354126, -3.081996202468872], + [3.8217499256134033, 1.6086012125015259], + [3.059851884841919, 6.257119655609131], + [-2.066042423248291, 1.7871156930923462], + [-2.996598958969116, -4.474854469299316], + [3.738744020462036, 1.3165851831436157], + [-3.7517240047454834, 0.8636142015457153], + [9.824411392211914, -2.3824174404144287], + [4.356476306915283, -8.266615867614746], + [0.9859176278114319, 5.464353561401367], + [3.1234872341156006, -7.479117393493652], + [0.17460638284683228, 10.047906875610352], + [-3.359431505203247, 3.178312063217163], + [-3.5760629177093506, -6.09261417388916], + [1.2882843017578125, -7.25320291519165], + [6.35528564453125, -3.2206242084503174], + [7.507298946380615, -2.8134052753448486], + [-6.242046356201172, -0.7270391583442688], + [-4.518722057342529, 5.594241142272949], + [-2.514112710952759, 2.0278897285461426], + [9.827309608459473, -2.3864729404449463], + [0.22524160146713257, 10.798234939575195], + [-6.117498874664307, 5.241044998168945], + [0.5091265439987183, -1.2036747932434082], + [3.7789227962493896, -3.2792725563049316], + [-5.752170562744141, -1.5355114936828613], + [-2.470271110534668, 1.180040955543518], + [-6.024728298187256, -2.9114367961883545], + [2.131983757019043, 3.395306348800659], + [-2.6725518703460693, 0.9135550856590271], + [-6.209981918334961, -2.115415573120117], + [3.212836265563965, -4.023714065551758], + [4.478445529937744, 1.7371026277542114], + [-4.118078708648682, 7.016019821166992], + [-2.11208438873291, 2.139904022216797], + [-4.475285053253174, -6.358165740966797], + [6.034330368041992, -2.847633123397827], + [9.231988906860352, -2.4399120807647705], + [0.2947438955307007, 11.720112800598145], + [-4.386544704437256, -5.695345401763916], + [2.6857526302337646, 4.882419586181641], + [0.14000532031059265, -1.3376846313476562], + [-5.354215621948242, -2.95771861076355], + [10.05522346496582, -2.430708169937134], + [-4.5130743980407715, -3.491753578186035], + [5.8158159255981445, -1.1768721342086792], + [-0.02341378480195999, 12.373100280761719], + [7.519114971160889, -5.134596824645996], + [8.623276710510254, -2.4001591205596924], + [0.12620282173156738, 9.80388069152832], + [-4.852976322174072, 5.19539737701416], + [-3.6656200885772705, -3.7431910037994385], + [-4.580154895782471, -6.43831205368042], + [4.640400409698486, 7.1655378341674805], + [-5.34037446975708, 6.954781532287598], + [-2.1435937881469727, 2.583895683288574], + [6.733506202697754, -4.28178596496582], + [-3.9716196060180664, -5.647595405578613], + [0.37963777780532837, -2.0830483436584473], + [2.3646323680877686, -0.8149529695510864], + [-6.274496555328369, 6.147292137145996], + [1.843400239944458, 0.2571261525154114], + [-3.3322689533233643, 3.266988515853882], + [-2.5076916217803955, 2.1155505180358887], + [-2.149885892868042, -4.620284080505371], + [-5.625290393829346, 4.868078231811523], + [3.9163198471069336, -3.709083318710327], + [5.846412658691406, -1.6760274171829224], + [4.720828533172607, 6.182007312774658], + [-2.168729305267334, 2.21701979637146], + [-5.520883083343506, 5.964008331298828], + [-2.081073522567749, 2.0111587047576904], + [1.0075547695159912, -4.9163970947265625], + [0.18647116422653198, 10.493854522705078], + [-6.785986423492432, 0.007106658071279526], + [-4.9786200523376465, -3.294355630874634], + [6.808322429656982, -1.411104440689087], + [-2.5637996196746826, -4.540064811706543], + [-2.189103603363037, 2.285905599594116], + [-3.5123374462127686, -2.2803893089294434], + [-3.2402384281158447, -0.2840060591697693], + [-2.040679454803467, -2.8347485065460205], + [-4.506622791290283, -5.671388149261475], + [-0.0429081991314888, 9.537858963012695], + [-2.0162081718444824, 2.3578429222106934], + [-1.2392345666885376, -3.421942949295044], + [0.8924078345298767, -7.059145450592041], + [7.471124172210693, 8.859174728393555], + [-3.943530797958374, -6.068354606628418], + [1.8695895671844482, 5.856308937072754], + [2.395021915435791, -7.807356357574463], + [2.3847084045410156, -3.492408037185669], + [-4.777233600616455, 4.701003074645996], + [3.4920315742492676, -4.956274509429932], + [-4.4627766609191895, 5.595336437225342], + [0.9572877287864685, -3.7119972705841064], + [-3.030327081680298, -0.8694366812705994], + [-5.008987903594971, 5.55435848236084], + [0.3302150368690491, 9.692557334899902], + [-1.6329933404922485, 2.0130081176757812], + [8.663439750671387, -2.460773468017578], + [-2.1845486164093018, 0.6156625151634216], + [4.621766567230225, -2.3104875087738037], + [0.005720131099224091, 12.691356658935547], + [-5.206843852996826, 4.430233001708984], + [0.2932480573654175, 10.87224006652832], + [3.795555830001831, -3.0999951362609863], + [-4.938905715942383, 4.1706647872924805], + [4.809826850891113, 7.100651741027832], + [9.349987983703613, -2.435468912124634], + [8.756314277648926, -2.4675405025482178], + [-4.729069232940674, 0.9709500074386597], + [1.9311141967773438, -2.90940260887146], + [9.640545845031738, -2.446347951889038], + [-6.529539585113525, 7.946866989135742], + [-2.264709949493408, 2.503171682357788], + [-0.013126261532306671, 8.605854034423828], + [-3.7551307678222656, -5.29291296005249], + [0.1850932240486145, 12.439033508300781], + [2.8792076110839844, -4.040854454040527], + [7.287932872772217, -1.3258397579193115], + [-6.954329013824463, 8.204436302185059], + [-4.216606140136719, -6.613792419433594], + [7.752564907073975, -2.5163872241973877], + [1.6877961158752441, 2.3333442211151123], + [4.326043605804443, 2.0352165699005127], + [-4.643486499786377, -6.484762191772461], + [-5.5587897300720215, 4.27831506729126], + [0.6824919581413269, -1.1012195348739624], + [2.20097017288208, 1.1902625560760498], + [-2.3198647499084473, -4.134373664855957], + [-2.5222818851470947, 1.6663451194763184], + [-1.303011178970337, -0.6783275008201599], + [-3.3070414066314697, -4.262453079223633], + [6.044956684112549, 8.269163131713867], + [2.873667001724243, -4.085231304168701], + [4.469275951385498, 1.8686045408248901], + [-3.850045919418335, -3.830132484436035], + [9.851983070373535, -2.389180898666382], + [-4.30147647857666, -5.780910015106201], + [9.857842445373535, -2.511749029159546], + [-2.014594554901123, 1.6223244667053223], + [0.39053910970687866, 0.031736280769109726], + [-0.837843656539917, 1.1346055269241333], + [3.4163930416107178, 1.6753665208816528], + [3.42889142036438, -5.12734317779541], + [-6.248952388763428, 7.529955863952637], + [1.9525110721588135, 1.8520362377166748], + [-2.862278699874878, -1.0815577507019043], + [3.2146754264831543, -4.460129261016846], + [1.8368117809295654, 0.2773805856704712], + [-3.096618413925171, 2.8292462825775146], + [-1.9438806772232056, 2.091759204864502], + [2.9862005710601807, -7.651472091674805], + [0.19585269689559937, 12.02692985534668], + [-4.155725002288818, -4.563821315765381], + [2.4921793937683105, -2.162055253982544], + [6.66183614730835, -1.5343464612960815], + [0.837135374546051, -0.6368853449821472], + [-2.1644840240478516, 2.2007925510406494], + [-0.40630024671554565, -0.7604577541351318], + [3.3138885498046875, -2.882766008377075], + [-0.03908390551805496, 9.552336692810059], + [0.053917236626148224, -2.2546284198760986], + [-3.6913645267486572, -5.797189712524414], + [-4.913200378417969, 3.7296271324157715], + [-3.371344804763794, -3.8274624347686768], + [0.9449825882911682, -5.727253437042236], + [3.6062498092651367, -8.308202743530273], + [1.277416467666626, -3.6622660160064697], + [-0.144605815410614, 9.251142501831055], + [-4.09546422958374, 7.6919965744018555], + [2.489065647125244, -7.949942588806152], + [9.233782768249512, -2.3771114349365234], + [-1.40265953540802, 0.2074437439441681], + [2.0511443614959717, -5.181759834289551], + [5.664881229400635, 7.770359516143799], + [0.015679948031902313, 9.679595947265625], + [2.512054204940796, 5.33658504486084], + [8.493886947631836, -2.357313871383667], + [-4.938362121582031, -2.2740185260772705], + [-2.5353245735168457, 0.2277446985244751], + [-4.878123760223389, 5.364344596862793], + [-0.9833540320396423, 1.290899395942688], + [-3.274553060531616, -6.269989013671875], + [-3.068852424621582, 3.2197375297546387], + [8.022479057312012, -2.253368616104126], + [0.11376308649778366, 9.927005767822266], + [-6.047818660736084, -1.3092273473739624], + [-5.2383503913879395, -1.531069278717041], + [2.0943803787231445, 5.370302677154541], + [-4.882831573486328, 4.350621700286865], + [0.12610453367233276, 11.038824081420898], + [8.891091346740723, -2.2681729793548584], + [-2.7711730003356934, -1.783822774887085], + [6.228281497955322, -3.196216583251953], + [-4.3943095207214355, 4.547634124755859], + [-4.4177093505859375, 4.838212013244629], + [7.22393274307251, -2.9488730430603027], + [-2.100848913192749, 1.0004172325134277], + [-4.129589557647705, -6.112109184265137], + [3.129448652267456, -2.4523439407348633], + [2.8014445304870605, -2.8283445835113525], + [-2.5560860633850098, 1.9448198080062866], + [-3.368339776992798, 3.452582359313965], + [0.05139534920454025, 9.925844192504883], + [-2.3058459758758545, 1.261292815208435], + [-2.635162115097046, 2.9987568855285645], + [8.048850059509277, -2.20039439201355], + [1.8401875495910645, 5.260708808898926], + [5.289383411407471, -5.773618698120117], + [1.1861586570739746, -2.3979218006134033], + [-6.450122833251953, 5.712601184844971], + [7.235795974731445, -2.2522764205932617], + [1.8161633014678955, 1.410096526145935], + [0.9190112352371216, -6.552651405334473], + [1.1952959299087524, -7.156442642211914], + [2.6342647075653076, 3.869422674179077], + [-6.1946702003479, 6.921653747558594], + [5.261386394500732, 7.91486120223999], + [0.038993291556835175, 13.198541641235352], + [-4.606010437011719, -6.182908535003662], + [-2.2066526412963867, 2.1570842266082764], + [-2.55881929397583, 1.7736455202102661], + [3.4523158073425293, -6.181290626525879], + [2.9897234439849854, -4.161359786987305], + [7.7353835105896, -2.0875794887542725], + [-2.248002290725708, -0.9755827188491821], + [-2.425764799118042, 1.6757723093032837], + [3.1446573734283447, -3.7965962886810303], + [1.9849693775177002, -4.198301792144775], + [-0.9563080072402954, 0.7170165777206421], + [-4.390185832977295, -1.4026073217391968], + [-3.3551952838897705, -3.1362717151641846], + [-4.691298961639404, -7.154883861541748], + [2.876814365386963, -3.9545648097991943], + [2.7787320613861084, -3.9385159015655518], + [-5.327666759490967, -1.2785941362380981], + [9.892202377319336, -2.39058518409729], + [3.464887857437134, -7.01195764541626], + [2.9952139854431152, 1.9290112257003784], + [-0.05140656977891922, 12.532674789428711], + [-5.426217079162598, 4.744475364685059], + [2.503777265548706, -8.130699157714844], + [0.8876489400863647, 0.40178680419921875], + [-7.0393385887146, 0.051950808614492416], + [-3.184384346008301, -1.064345121383667], + [-1.6516070365905762, 0.48919975757598877], + [3.4224531650543213, -7.690499305725098], + [0.6293300986289978, -5.27266788482666], + [2.1902639865875244, 5.506505966186523], + [7.70772123336792, -2.4694788455963135], + [-0.17949360609054565, 9.051261901855469], + [10.020971298217773, -2.428056478500366], + [1.3356101512908936, 2.0870325565338135], + [4.90085506439209, 6.423941612243652], + [2.6846797466278076, 5.545995712280273], + [0.2230149507522583, 10.616893768310547], + [-6.272615909576416, -0.3858374357223511], + [3.6568148136138916, 1.3400157690048218], + [-3.653895616531372, -4.550113677978516], + [-3.1682565212249756, -1.70682692527771], + [-4.479600429534912, -6.377252578735352], + [3.4411799907684326, 6.043642997741699], + [-4.370748043060303, -2.5527589321136475], + [0.6588203310966492, -0.9828498959541321], + [-2.064865827560425, 2.500600814819336], + [0.07772558182477951, 9.777844429016113], + [-5.18895959854126, 4.714933395385742], + [-0.02759677916765213, 12.365676879882812], + [6.816072940826416, 8.41783618927002], + [0.4584124684333801, -0.9141891002655029], + [2.296529531478882, -7.083090782165527], + [-5.009283542633057, 4.292778968811035], + [-6.528665065765381, 7.593356132507324], + [-3.8400635719299316, -3.147129774093628], + [-4.764288425445557, -3.774930238723755], + [-4.254981517791748, -5.560014724731445], + [-0.7556759715080261, -2.002915143966675], + [8.146241188049316, -2.2485005855560303], + [7.894716739654541, -2.0366599559783936], + [-1.5048153400421143, 2.4225215911865234], + [-7.42185640335083, -0.7590000629425049], + [-6.675714015960693, -0.4917914867401123], + [-2.1258533000946045, 2.6671369075775146], + [2.881131172180176, 4.5993876457214355], + [5.115884304046631, -1.4140889644622803], + [8.08864688873291, -2.5691821575164795], + [7.108524322509766, 8.48194408416748], + [1.5912351608276367, -0.8775296211242676], + [7.092125415802002, -2.3064463138580322], + [-2.5195505619049072, 1.7373838424682617], + [3.1959855556488037, -4.148996353149414], + [-3.803032636642456, -2.9163477420806885], + [2.2256662845611572, 5.970607757568359], + [6.41637659072876, 7.952884674072266], + [6.596129894256592, -4.621382713317871], + [0.2094188928604126, 10.653053283691406], + [-0.023676104843616486, 13.3153076171875], + [-1.1080360412597656, -3.821232557296753], + [0.2509682774543762, 10.613059043884277], + [8.202265739440918, -2.317917585372925], + [7.037990093231201, 8.751777648925781], + [-5.097805500030518, 6.961402893066406], + [-2.704538345336914, -3.372375726699829], + [2.7069685459136963, -9.77869987487793], + [1.2565321922302246, 4.638431549072266], + [-7.142963409423828, 8.168510437011719], + [-3.7130014896392822, -4.676487445831299], + [-2.712256669998169, -4.689523696899414], + [-4.405420780181885, -0.5650708079338074], + [0.30428171157836914, 12.236611366271973], + [-1.4398492574691772, -0.4156199097633362], + [-2.51037859916687, 2.223999261856079], + [7.723100185394287, -2.5748841762542725], + [3.031493902206421, -6.97208309173584], + [7.610726833343506, -2.1324045658111572], + [3.924668550491333, 0.7256078720092773], + [-4.374861240386963, -4.157200813293457], + [8.493870735168457, -2.291781187057495], + [-5.134846210479736, -3.0885443687438965], + [4.077584743499756, -1.8497775793075562], + [5.311898231506348, 7.322856426239014], + [5.171360015869141, -6.3592634201049805], + [0.43142300844192505, -4.336198806762695], + [-2.150576114654541, 2.52704119682312], + [-3.8433756828308105, -5.889314651489258], + [-2.551239490509033, -3.109604597091675], + [8.768736839294434, -2.306704044342041], + [-2.28194260597229, 2.2301955223083496], + [6.240777492523193, -1.199488878250122], + [0.7077598571777344, 0.903741180896759], + [2.1102821826934814, 3.765566349029541], + [-4.343648910522461, -3.2457191944122314], + [-6.7298712730407715, 7.465919017791748], + [-2.5628821849823, 2.2557921409606934], + [7.708662986755371, -2.2213191986083984], + [3.4408528804779053, 0.9412596225738525], + [3.093599319458008, -8.879800796508789], + [3.343634843826294, -4.128110408782959], + [-1.9620771408081055, 0.4625024199485779], + [3.333878755569458, -0.8213971853256226], + [7.085929870605469, -1.9256160259246826], + [1.9656312465667725, -7.6351728439331055], + [1.534845232963562, -6.255257606506348], + [5.5679612159729, 7.445348739624023], + [-0.04554516822099686, 9.850225448608398], + [3.783766746520996, -7.4630255699157715], + [-6.313468933105469, 6.135396957397461], + [-3.70682954788208, 6.457431793212891], + [-1.1331456899642944, 1.7392020225524902], + [5.060792446136475, 7.23048210144043], + [8.407302856445312, -2.2407233715057373], + [0.6712016463279724, -0.8573178052902222], + [0.26339080929756165, -0.6493064761161804], + [-2.120849132537842, 2.276311159133911], + [-2.0242156982421875, -3.735459327697754], + [-2.2183096408843994, 2.2436418533325195], + [8.89449405670166, -2.478715181350708], + [2.4936306476593018, -6.347261428833008], + [3.0335443019866943, 1.8207097053527832], + [-5.647047996520996, 6.536345481872559], + [0.24730545282363892, 12.009631156921387], + [0.1110953614115715, 11.957101821899414], + [7.827986717224121, -2.0403144359588623], + [1.521898627281189, -0.8264265060424805], + [7.5249152183532715, -2.5371406078338623], + [3.3321762084960938, -1.1969469785690308], + [0.22543078660964966, 10.558197021484375], + [-0.3365664482116699, -1.1224308013916016], + [2.310804605484009, -7.545236587524414], + [0.22122561931610107, 5.569798469543457], + [4.154995441436768, -0.24352937936782837], + [-6.651417255401611, 8.058455467224121], + [-3.1274845600128174, 4.413151264190674], + [-4.684116363525391, -6.8957977294921875], + [-4.80037260055542, -0.8332522511482239], + [-4.91611909866333, -1.111768364906311], + [-5.879080295562744, 0.10837817192077637], + [5.484083652496338, -6.514910697937012], + [4.642549991607666, -1.29999840259552], + [-4.309873580932617, 4.399672508239746], + [-6.968888759613037, 8.275500297546387], + [0.0836898609995842, 12.101338386535645], + [2.7050750255584717, -7.670342445373535], + [-2.152036428451538, 2.573164701461792], + [6.047969341278076, 7.454465866088867], + [-1.1053498983383179, -3.4800405502319336], + [-6.452447414398193, 7.67215633392334], + [-4.529968738555908, 5.807910919189453], + [-6.90610933303833, -0.6484934687614441], + [-1.9937981367111206, -4.49251127243042], + [-2.0814919471740723, -3.078862428665161], + [-4.453925609588623, -6.388539791107178], + [-1.7528622150421143, 2.1770431995391846], + [-5.455196857452393, 3.995063066482544], + [0.0716203972697258, 12.078672409057617], + [4.8451080322265625, 7.183178424835205], + [-1.5598454475402832, 1.8660746812820435], + [5.787724018096924, -4.907940864562988], + [-2.2198333740234375, 2.5451722145080566], + [-5.0793585777282715, -0.21863675117492676], + [1.971761703491211, -5.469289779663086], + [-7.113541126251221, -0.8866163492202759], + [-4.38034200668335, 4.9501190185546875], + [7.0009331703186035, -1.7276946306228638], + [0.10901849716901779, 10.42059326171875], + [2.931542158126831, 0.35705307126045227], + [1.1588735580444336, 5.845893383026123], + [3.122605562210083, -4.453189849853516], + [-2.5704128742218018, 1.2003380060195923], + [2.5800676345825195, -3.3203623294830322], + [-2.630709648132324, 1.8015261888504028], + [7.408634185791016, -2.236440420150757], + [-4.4068284034729, -1.3986016511917114], + [-5.695301532745361, 6.097992897033691], + [-0.41109776496887207, 1.3843756914138794], + [8.877110481262207, -2.5849814414978027], + [-3.4837234020233154, 6.026047706604004], + [-0.04470009356737137, 9.545156478881836], + [2.9628570079803467, -4.198882102966309], + [2.181849241256714, 2.257274866104126], + [-7.745054721832275, -0.4688831567764282], + [-1.2287561893463135, 1.2911208868026733], + [-1.7977588176727295, -3.2202088832855225], + [-4.161595821380615, -5.33435583114624], + [-5.266866683959961, 6.927486896514893], + [1.3970019817352295, -3.5433199405670166], + [0.19038426876068115, 11.138860702514648], + [2.9245645999908447, -4.714395999908447], + [0.1839250922203064, 10.16788387298584], + [-4.754475116729736, -1.0393356084823608], + [3.954493761062622, 1.448264241218567], + [-3.8049509525299072, -3.241560459136963], + [1.3070974349975586, 0.16342408955097198], + [3.557410955429077, -6.2007975578308105], + [5.53564977645874, -1.5239044427871704], + [-3.401978015899658, -4.088227272033691], + [-7.128289222717285, -0.671221911907196], + [2.3387069702148438, -2.379094123840332], + [6.323153018951416, -1.5051933526992798], + [0.24176490306854248, 10.97704029083252], + [-5.221724033355713, -0.6121952533721924], + [-5.477565288543701, -2.6620001792907715], + [-3.3101866245269775, -3.9459495544433594], + [4.584837436676025, -0.7891234159469604], + [1.377187967300415, -7.04541015625], + [-4.962283611297607, -6.78227424621582], + [1.8501747846603394, -6.970111846923828], + [3.011417865753174, -4.210248947143555], + [-1.435388445854187, 0.06825992465019226], + [-0.8331801891326904, -0.82420814037323], + [0.878411591053009, 11.887615203857422], + [-5.657322883605957, 8.050264358520508], + [3.62834095954895, -8.553839683532715], + [8.028684616088867, -2.4522714614868164], + [-2.05230712890625, 2.40673565864563], + [-1.3141028881072998, -4.184665679931641], + [-4.992431640625, -6.442766189575195], + [8.288060188293457, -2.156684160232544], + [-4.158759117126465, -4.232664585113525], + [2.790940284729004, -3.8477742671966553], + [-1.1219987869262695, 1.236956238746643], + [2.345196485519409, 4.424957275390625], + [-2.120356559753418, 2.3763914108276367], + [-3.348621129989624, -1.1295053958892822], + [-3.468409299850464, -1.9193222522735596], + [8.82597541809082, -2.6883316040039062], + [-1.622934103012085, -2.957481622695923], + [3.202777147293091, -6.533612251281738], + [-7.5051469802856445, 3.9664151668548584], + [-4.118192195892334, 3.944861650466919], + [-4.307114124298096, 0.8043414354324341], + [-4.6003899574279785, -7.187970161437988], + [-0.022471435368061066, 8.8721923828125], + [8.386885643005371, -2.2529194355010986], + [0.7636407017707825, -0.5057201981544495], + [-0.13612496852874756, -1.4252662658691406], + [4.652407169342041, -3.9632697105407715], + [8.713055610656738, -2.314237594604492], + [3.358377695083618, -6.122811317443848], + [-7.638752460479736, 8.783872604370117], + [4.202834606170654, 1.3822729587554932], + [2.5801427364349365, -8.175371170043945], + [-4.5310516357421875, -5.118317127227783], + [-6.427093982696533, 2.685736656188965], + [0.2862052321434021, 11.228842735290527], + [-0.16179782152175903, 8.909067153930664], + [-1.7705615758895874, 2.0851681232452393], + [-0.08952195197343826, 9.842264175415039], + [-4.3107380867004395, 6.060566425323486], + [3.1653482913970947, -5.500165939331055], + [1.8721791505813599, -8.616812705993652], + [-0.2805859446525574, -1.6870373487472534], + [3.167032241821289, 1.7985079288482666], + [-1.9153212308883667, 2.3163998126983643], + [0.4846312999725342, -0.9233800172805786], + [2.516770839691162, 6.557892799377441], + [0.20993292331695557, 11.090839385986328], + [-7.496821880340576, -0.18527936935424805], + [4.123363018035889, 6.783149242401123], + [-1.1154273748397827, -1.0527379512786865], + [-5.714555263519287, 5.4381513595581055], + [-2.537328004837036, 1.7659062147140503], + [7.636223316192627, -1.8216103315353394], + [3.355304479598999, -5.593205451965332], + [1.8040730953216553, -8.335163116455078], + [3.813565492630005, -5.49220609664917], + [8.320988655090332, -2.3179266452789307], + [7.352358818054199, -2.4619979858398438], + [-5.792330265045166, 6.454223155975342], + [7.914951801300049, -2.1229734420776367], + [8.08456802368164, -2.3504769802093506], + [-4.2038044929504395, -5.503457069396973], + [5.0236921310424805, 6.481184482574463], + [-3.494969367980957, -5.91530704498291], + [-2.4260201454162598, -4.060715675354004], + [-3.6646487712860107, -5.149677276611328], + [6.739166736602783, -1.399226188659668], + [-5.797397136688232, -2.6315114498138428], + [3.7386314868927, -3.572431802749634], + [3.085996150970459, 5.188376426696777], + [5.249566555023193, -3.163231134414673], + [-4.5303120613098145, -4.663942337036133], + [2.3246817588806152, 0.495780348777771], + [4.9722065925598145, 7.0818023681640625], + [7.463347434997559, -4.881245136260986], + [-4.046344757080078, -6.094712734222412], + [7.850670337677002, -2.4264180660247803], + [-5.867919445037842, -0.6444715261459351], + [6.490570545196533, 8.159147262573242], + [-1.4583985805511475, 2.3419721126556396], + [2.7656009197235107, -3.8025476932525635], + [10.387677192687988, -2.500900983810425], + [-5.16473913192749, 5.557277679443359], + [6.141146183013916, 7.585104465484619], + [0.48857051134109497, -1.0896637439727783], + [7.239832401275635, -2.911864757537842], + [3.2682228088378906, -4.052908420562744], + [0.3866507411003113, 11.468226432800293], + [-2.232607126235962, 3.3257155418395996], + [1.0126643180847168, -0.45029693841934204], + [-1.7081081867218018, 2.1382269859313965], + [2.4680964946746826, -7.243729114532471], + [6.38377046585083, 7.864626407623291], + [-4.254090309143066, -6.627503395080566], + [3.2418525218963623, -3.7403452396392822], + [1.1402981281280518, 3.9838035106658936], + [7.903306484222412, -2.1649982929229736], + [-2.1029834747314453, 2.610689878463745], + [-0.3622521162033081, 9.516373634338379], + [-3.622007131576538, -2.5859196186065674], + [-7.103268623352051, 8.074090003967285], + [5.753856182098389, 7.232532501220703], + [5.444777011871338, -2.637805700302124], + [-3.7070624828338623, -6.20115852355957], + [-5.078010082244873, 5.251434326171875], + [5.386845111846924, 7.378353118896484], + [-3.048180103302002, 4.641147613525391], + [-6.659433841705322, 7.509948253631592], + [-5.159099578857422, -4.380709648132324], + [0.4757837653160095, -1.2200971841812134], + [-5.204593181610107, 5.724674701690674], + [8.966822624206543, -2.3841068744659424], + [-2.2736053466796875, 2.883038282394409], + [-4.245420932769775, -6.49533748626709], + [3.666898012161255, -3.2512929439544678], + [-3.0449442863464355, 4.5968732833862305], + [-2.701700210571289, 2.96927809715271], + [-3.1883366107940674, -4.10838508605957], + [0.002510957419872284, 9.73791790008545], + [1.8119051456451416, 5.866827964782715], + [0.19963693618774414, 11.734484672546387], + [-0.014521904289722443, 12.778458595275879], + [-0.6068429350852966, -2.42293381690979], + [-3.145035982131958, -2.7010486125946045], + [-2.576594114303589, -4.346810817718506], + [-5.284063816070557, 5.7242231369018555], + [3.6398918628692627, -4.452029705047607], + [-1.3354185819625854, 1.7317614555358887], + [-4.17817497253418, 3.931981325149536], + [-3.684903621673584, -1.6760303974151611], + [2.9488203525543213, 4.429228782653809], + [5.176685333251953, -3.0820746421813965], + [0.9262524247169495, -0.1436542272567749], + [-4.158448696136475, 3.8614590167999268], + [-3.358637571334839, -0.7388227581977844], + [-0.08044696599245071, 9.938727378845215], + [9.374311447143555, -2.4181230068206787], + [-2.086430311203003, 0.43934839963912964], + [-4.588041305541992, -3.7590785026550293], + [-2.2211802005767822, 2.6181929111480713], + [-6.792969226837158, -0.4819132685661316], + [2.185835599899292, -7.322676658630371], + [2.7538645267486572, -7.4317426681518555], + [4.016472339630127, -7.8500237464904785], + [-4.839846134185791, 4.953392028808594], + [-5.234282493591309, 6.461636543273926], + [0.43287891149520874, -0.8939501047134399], + [2.5260937213897705, -3.8277156352996826], + [-4.341666221618652, -1.8493189811706543], + [-4.712601184844971, -1.7994149923324585], + [2.587136745452881, -6.092788219451904], + [10.084972381591797, -2.5264551639556885], + [1.5164457559585571, -2.8085293769836426], + [2.636835813522339, 4.071274757385254], + [2.416782855987549, -8.208683967590332], + [7.230985164642334, -2.689692974090576], + [6.238496780395508, -2.9446370601654053], + [-7.764219284057617, 0.4128319025039673], + [5.6584153175354, -1.3011863231658936], + [-3.2996208667755127, -5.005878448486328], + [3.5123515129089355, -8.71961498260498], + [-3.990525007247925, -4.131706237792969], + [-4.772226810455322, 5.422630786895752], + [-0.0033701136708259583, 12.072757720947266], + [11.04699420928955, -2.613269090652466], + [3.0849130153656006, -6.404978275299072], + [4.4107866287231445, 6.4686503410339355], + [-2.2776734828948975, 2.9535162448883057], + [-3.157609701156616, 2.823782444000244], + [-5.299340724945068, 6.319581031799316], + [2.5341315269470215, 5.642805576324463], + [-7.187301158905029, 8.442172050476074], + [-4.649092197418213, -7.272490501403809], + [7.867101192474365, -2.1258046627044678], + [5.251175880432129, -4.88297176361084], + [-2.2705442905426025, -4.650251865386963], + [2.6436870098114014, -8.520635604858398], + [-0.6645316481590271, 0.3958439230918884], + [-5.048855781555176, -6.887397766113281], + [-1.8984453678131104, -3.834538698196411], + [6.8153181076049805, 8.273242950439453], + [0.21999269723892212, 10.970576286315918], + [-5.248843669891357, 5.082068920135498], + [-4.853799343109131, -0.8332421779632568], + [-3.1696956157684326, 3.695695400238037], + [-3.6321051120758057, 4.268607139587402], + [1.1614797115325928, 0.36769214272499084], + [7.918594837188721, -2.225933074951172], + [-4.645352840423584, -6.847564697265625], + [6.815680027008057, 8.32188892364502], + [1.8579033613204956, 6.769331932067871], + [-5.353543758392334, -2.9492013454437256], + [1.4043312072753906, 1.114609956741333], + [0.04816844314336777, 1.7282072305679321], + [2.8791401386260986, 4.2910566329956055], + [2.0992701053619385, -4.622548580169678], + [2.91039776802063, 1.529295563697815], + [-1.0137766599655151, 1.2634767293930054], + [3.3936283588409424, 0.4425313472747803], + [8.171034812927246, -2.203934907913208], + [4.508209228515625, 2.0443012714385986], + [-3.923924684524536, -1.0863062143325806], + [4.23260498046875, 6.60577917098999], + [3.0192768573760986, -8.197334289550781], + [0.1936778426170349, 11.139668464660645], + [-5.755831241607666, -0.1323341727256775], + [3.7940211296081543, -3.4084761142730713], + [-6.449328422546387, 6.667389392852783], + [4.082911968231201, 1.6993614435195923], + [-6.793816089630127, 8.15442943572998], + [-6.153109073638916, 8.271769523620605], + [-5.032987117767334, -6.289809226989746], + [4.395055294036865, -3.531447172164917], + [3.944689989089966, -7.035752773284912], + [1.0610677003860474, -0.24461886286735535], + [0.5143194198608398, -1.0690984725952148], + [-3.719613790512085, -4.141355991363525], + [-4.895633220672607, 5.372618198394775], + [2.8893234729766846, -7.3870391845703125], + [5.001591682434082, 6.736185073852539], + [2.2798054218292236, 5.217687129974365], + [-1.115483283996582, 0.5374369025230408], + [0.14633673429489136, 9.988845825195312], + [2.6198108196258545, -3.6067087650299072], + [5.271468162536621, 7.078527450561523], + [0.129613995552063, 9.646761894226074], + [-0.12111873179674149, 14.616798400878906], + [-2.077141284942627, 2.518340826034546], + [0.18239909410476685, 10.229837417602539], + [-4.284360885620117, -5.9339494705200195], + [-4.7242255210876465, 4.317509651184082], + [2.563751697540283, -2.8005402088165283], + [3.2658894062042236, -6.394957065582275], + [0.2967715859413147, 0.00012954697012901306], + [-4.80840539932251, 5.336040496826172], + [-3.329704999923706, 7.0351409912109375], + [-3.0445942878723145, 0.08755123615264893], + [3.4226434230804443, 1.4031661748886108], + [3.9097554683685303, -7.176067352294922], + [8.163100242614746, -2.214641809463501], + [4.995871067047119, -2.4227030277252197], + [-5.969761848449707, 0.1151776909828186], + [-2.2878267765045166, 0.818772554397583], + [5.981042385101318, -0.9885042905807495], + [-2.355743408203125, 0.8002505302429199], + [-2.5487163066864014, 1.6529752016067505], + [-4.037252426147461, -5.98004150390625], + [-3.4557573795318604, -2.14845871925354], + [2.7037994861602783, -3.9577701091766357], + [2.8375327587127686, -6.912337779998779], + [-4.064821243286133, 6.362420082092285], + [-6.1429619789123535, 5.5189361572265625], + [2.968419313430786, -3.6582465171813965], + [2.92504620552063, -6.583930015563965], + [5.920470714569092, -1.2576550245285034], + [-2.20721435546875, 0.8652836084365845], + [-5.03208065032959, 3.537574291229248], + [2.5804786682128906, -3.2420642375946045], + [0.9536669850349426, -0.8999929428100586], + [3.4654324054718018, -2.847846269607544], + [-6.218926906585693, -2.5752830505371094], + [6.309092998504639, -1.513272762298584], + [0.34046316146850586, -0.9755675792694092], + [-5.9938645362854, 6.599667072296143], + [8.604778289794922, -2.3339247703552246], + [2.0862324237823486, 0.28337544202804565], + [4.618411540985107, -3.8239753246307373], + [7.762527942657471, -2.0789499282836914], + [3.6721675395965576, -6.958189964294434], + [0.13651281595230103, -0.7639670372009277], + [2.870802164077759, 4.099163055419922], + [3.177471876144409, 1.0012328624725342], + [-6.016624927520752, -0.3863227963447571], + [1.385772705078125, -0.13823425769805908], + [-3.2762458324432373, 5.845032215118408], + [-4.335722923278809, -1.8420664072036743], + [1.9123997688293457, 4.213597297668457], + [3.078737497329712, -4.541949272155762], + [3.162080764770508, -8.700101852416992], + [5.037694454193115, 7.074170112609863], + [10.981078147888184, -2.594757318496704], + [-2.0630977153778076, 1.7976090908050537], + [9.32736873626709, -2.4210829734802246], + [5.521420001983643, 7.939504623413086], + [-1.2566131353378296, 1.6465383768081665], + [7.752391815185547, -2.019041061401367], + [7.917812824249268, -2.0808534622192383], + [2.723827600479126, -7.996804237365723], + [0.736445963382721, -1.5698291063308716], + [-2.3477842807769775, 2.0972673892974854], + [-2.0375540256500244, 2.430429697036743], + [9.30806827545166, -2.5935051441192627], + [-0.020765013992786407, 13.02914810180664], + [5.091114044189453, 6.7621941566467285], + [0.141902357339859, -2.243511199951172], + [-4.627012252807617, 4.679813385009766], + [1.9713490009307861, 0.08189007639884949], + [8.827723503112793, -2.448573350906372], + [-0.039570339024066925, 12.94028091430664], + [-2.1214070320129395, 2.6647684574127197], + [-0.041248030960559845, 9.826492309570312], + [-5.762692928314209, -1.1549571752548218], + [-4.708598613739014, -0.706371009349823], + [0.5101664066314697, -0.9369422197341919], + [7.6037797927856445, -1.9543704986572266], + [9.495743751525879, -2.6933367252349854], + [-0.9472458958625793, -2.2204720973968506], + [8.391042709350586, -2.307237386703491], + [0.8414960503578186, -1.2054959535598755], + [8.457240104675293, -2.2959861755371094], + [-0.31173813343048096, -1.4103199243545532], + [6.788123607635498, 8.355294227600098], + [-3.9289894104003906, -0.42963626980781555], + [3.1926369667053223, 0.9497795104980469], + [-4.131201267242432, -6.438077926635742], + [-0.09925813227891922, -1.7391878366470337], + [-2.5641701221466064, 1.84634530544281], + [5.22305154800415, -1.2816849946975708], + [7.040648937225342, 8.601449966430664], + [9.417475700378418, -2.4461419582366943], + [-4.736670970916748, 4.5464677810668945], + [0.4842262268066406, 5.324535369873047], + [2.593890905380249, 6.108774185180664], + [0.014816097915172577, 13.084644317626953], + [-2.8473479747772217, -2.5906143188476562], + [6.146335124969482, -3.7409088611602783], + [5.288148403167725, 7.265243053436279], + [6.960061550140381, 8.497350692749023], + [4.30197286605835, -3.017176389694214], + [-5.1429314613342285, 7.724715232849121], + [-4.9725117683410645, 5.588081359863281], + [2.965805768966675, -4.151010990142822], + [9.7632417678833, -2.3730804920196533], + [6.290234565734863, -3.105090856552124], + [2.5850627422332764, -2.4682931900024414], + [-5.765092849731445, 0.4708383083343506], + [-5.10889196395874, -3.1159865856170654], + [2.394829034805298, -3.776240110397339], + [7.369509220123291, -2.595515251159668], + [6.79125452041626, -4.145050525665283], + [-0.35419750213623047, -1.2159011363983154], + [0.23169642686843872, 10.551412582397461], + [3.4061672687530518, 5.111273765563965], + [0.010912112891674042, 10.35943603515625], + [-5.5576653480529785, -3.1711513996124268], + [-3.430493116378784, 3.653120756149292], + [6.1800336837768555, -1.547269582748413], + [-2.055487632751465, -1.2733399868011475], + [2.908046007156372, 6.895018577575684], + [-3.431847333908081, 0.7561258673667908], + [-2.4803707599639893, 1.4945210218429565], + [-2.288691759109497, 3.0740768909454346], + [4.915913105010986, -1.1078214645385742], + [-2.3250162601470947, 2.5712902545928955], + [2.8703458309173584, -8.353734016418457], + [3.3038408756256104, -6.4384260177612305], + [2.6649224758148193, -5.042634963989258], + [-6.296070575714111, -0.011072520166635513], + [-0.13028079271316528, 14.174684524536133], + [3.0810248851776123, -4.3843488693237305], + [-3.640594959259033, 5.609123229980469], + [2.706547975540161, -6.8661699295043945], + [2.693577527999878, -9.196632385253906], + [-3.518599271774292, 3.0998878479003906], + [4.399064540863037, 6.638937473297119], + [-5.400145530700684, 4.855722427368164], + [-0.1393468976020813, 9.2941312789917], + [7.5500335693359375, 8.928569793701172], + [-6.159398078918457, -0.285297691822052], + [-3.37839937210083, -5.452889442443848], + [8.037395477294922, -1.9722152948379517], + [3.4993064403533936, -2.9737040996551514], + [0.21055549383163452, 10.582515716552734], + [-2.1410107612609863, 2.679105281829834], + [-5.560068607330322, -0.8699551820755005], + [-4.047779560089111, 5.592063903808594], + [3.5563242435455322, 5.042415142059326], + [3.111187219619751, -3.38466477394104], + [-4.220390319824219, -2.2616047859191895], + [-6.294393062591553, 6.893132209777832], + [-4.65383768081665, -7.332868576049805], + [-5.457101345062256, 0.49458634853363037], + [-4.377655982971191, -5.273993015289307], + [2.1576972007751465, 5.3416948318481445], + [9.149260520935059, -2.385512113571167], + [3.634425401687622, -3.246917486190796], + [3.85713267326355, -4.290966987609863], + [-4.282048225402832, -6.162787914276123], + [-2.0750186443328857, 1.9192304611206055], + [5.074946880340576, -2.3024497032165527], + [3.020937442779541, -4.217609405517578], + [7.690283298492432, -2.2500288486480713], + [2.7970120906829834, 1.3068760633468628], + [-1.4652608633041382, -1.8995739221572876], + [7.131868839263916, 8.697808265686035], + [-3.8844244480133057, -6.030470848083496], + [6.884618759155273, 8.489889144897461], + [2.5318987369537354, -8.007740020751953], + [-2.29951548576355, 2.3388006687164307], + [-5.950561046600342, 0.22759699821472168], + [4.049764156341553, -6.343401908874512], + [-0.15622365474700928, -1.3959155082702637], + [3.6129863262176514, -9.14761734008789], + [0.7306361794471741, -2.857337474822998], + [2.290590524673462, 5.1533308029174805], + [-4.2618865966796875, -6.391450881958008], + [-4.642942905426025, -7.223297595977783], + [-4.166586399078369, -2.4990451335906982], + [5.903820514678955, -2.995854139328003], + [6.682313442230225, -1.5931276082992554], + [11.063664436340332, -2.4697186946868896], + [8.157776832580566, -2.3994877338409424], + [2.4793660640716553, 0.49033093452453613], + [-1.3624776601791382, 2.0110795497894287], + [-4.648004531860352, -3.5045478343963623], + [2.895665407180786, -4.09653377532959], + [-0.03324873000383377, 12.717578887939453], + [-3.6315653324127197, -3.219148874282837], + [-5.275712490081787, 0.8486953973770142], + [1.1441935300827026, -6.782886028289795], + [0.5894114971160889, 1.9159482717514038], + [-0.22662243247032166, -2.2163093090057373], + [3.278164863586426, -7.889010429382324], + [6.920593738555908, -1.860988736152649], + [2.2051825523376465, 4.522795677185059], + [0.14746028184890747, 10.03396224975586], + [4.23118782043457, -8.862948417663574], + [-2.6955811977386475, -5.2710089683532715], + [-2.5082767009735107, 1.2722651958465576], + [-4.370758533477783, -3.7200586795806885], + [-5.288635730743408, -3.3870699405670166], + [5.899134159088135, -3.9404795169830322], + [0.03260599821805954, 11.983566284179688], + [8.209066390991211, -2.234927177429199], + [-5.900650501251221, 5.0730299949646], + [9.747851371765137, -2.3305909633636475], + [-4.521358966827393, -2.6373510360717773], + [-0.059205032885074615, -1.4235862493515015], + [-4.809905529022217, -0.5562597513198853], + [-6.558497905731201, 7.6081624031066895], + [2.927704095840454, -7.978610992431641], + [-4.660010814666748, 6.2827043533325195], + [-2.294551372528076, 2.8500030040740967], + [1.3096754550933838, 3.7623398303985596], + [3.1767494678497314, -3.330490827560425], + [0.5741269588470459, -1.0104011297225952], + [0.2837969660758972, 10.987372398376465], + [5.37687349319458, -1.2293258905410767], + [-4.311398983001709, -6.661349296569824], + [6.656130313873291, -2.70671010017395], + [-7.209109783172607, -0.6536670327186584], + [-3.0314388275146484, 0.5003750920295715], + [8.443207740783691, -2.2390284538269043], + [4.557246685028076, 1.9487998485565186], + [2.10030460357666, -0.36204978823661804], + [-4.177799701690674, 4.861836910247803], + [7.350744724273682, -1.8936866521835327], + [2.6515491008758545, 6.80283260345459], + [1.5842088460922241, 5.427011013031006], + [0.18064665794372559, -1.4911452531814575], + [3.146785020828247, 0.45603883266448975], + [0.1316508650779724, 9.968793869018555], + [3.1666452884674072, 1.0461245775222778], + [4.109226703643799, -2.5001866817474365], + [-2.1830828189849854, 2.722632884979248], + [3.5627992153167725, -7.641972064971924], + [2.832620859146118, 0.6066426038742065], + [4.023012161254883, -7.965419769287109], + [9.119364738464355, -2.474998712539673], + [-3.2335169315338135, -3.7133967876434326], + [-6.513635635375977, 6.973023891448975], + [8.080978393554688, -2.2137389183044434], + [0.6357861161231995, -4.729668617248535], + [-3.36156964302063, 5.4339985847473145], + [2.624509572982788, -9.626986503601074], + [-4.9168524742126465, -2.2646844387054443], + [3.353536367416382, -5.772845268249512], + [-5.175058841705322, -0.9016122221946716], + [-4.483443260192871, 5.899303436279297], + [-2.2133233547210693, 1.8699731826782227], + [-0.09620935469865799, -1.4974180459976196], + [6.600294589996338, 8.0077543258667], + [-2.67236328125, -4.573554515838623], + [4.157935619354248, 5.755278587341309], + [5.363816738128662, -1.462675929069519], + [0.16341322660446167, 9.526168823242188], + [-2.501889944076538, -4.126149654388428], + [-4.5927605628967285, -7.137958526611328], + [-4.934430122375488, -1.6302510499954224], + [-0.034878917038440704, 12.60013198852539], + [-2.1867032051086426, 1.058148741722107], + [-1.7983307838439941, 2.348113536834717], + [-4.44852876663208, -6.887046813964844], + [2.465113878250122, -6.602998733520508], + [-1.4541993141174316, 2.180859088897705], + [-5.752383708953857, -1.350314736366272], + [3.3856868743896484, -6.4437971115112305], + [-2.164738655090332, 2.6961190700531006], + [-2.1976749897003174, 2.516845703125], + [4.096776485443115, -3.5476934909820557], + [4.803617000579834, -0.7369926571846008], + [6.443783760070801, -1.4177610874176025], + [-3.603797197341919, -1.5331802368164062], + [-4.699724197387695, 5.227296352386475], + [9.963037490844727, -2.447634696960449], + [-4.761405944824219, -0.06309181451797485], + [-4.782860279083252, 5.148770332336426], + [9.068853378295898, -2.3300981521606445], + [0.1600673794746399, 10.029535293579102], + [3.4861509799957275, 6.6322221755981445], + [4.544032573699951, -0.9194856882095337], + [-0.5035842061042786, -1.0703245401382446], + [-7.939823627471924, 0.5466386079788208], + [-3.8844563961029053, -5.062103271484375], + [8.778986930847168, -2.301008462905884], + [7.798982620239258, -2.065722703933716], + [2.2568862438201904, 2.152880907058716], + [-4.842824459075928, 4.598610877990723], + [0.1993597149848938, 10.73038101196289], + [-0.8435536026954651, 6.775787353515625], + [-4.1293721199035645, -4.751035690307617], + [-4.807773113250732, -7.83455753326416], + [-2.540149211883545, -4.724013805389404], + [8.04671573638916, -2.199152708053589], + [3.031858205795288, -4.20859432220459], + [0.08839558809995651, 12.642800331115723], + [8.893106460571289, -2.258007049560547], + [6.143296718597412, -2.995816707611084], + [-6.955252170562744, 5.721898078918457], + [6.050619602203369, -3.5396740436553955], + [0.025292210280895233, 11.402278900146484], + [8.2772798538208, -2.256195068359375], + [-0.3708290457725525, -1.3447462320327759], + [-4.789398670196533, 3.9582836627960205], + [7.69675874710083, -2.127293109893799], + [-4.141239643096924, -5.136538505554199], + [2.8268771171569824, -4.039348602294922], + [8.0486421585083, -2.246051788330078], + [-2.3066868782043457, 1.9935005903244019], + [1.6604177951812744, -0.22213934361934662], + [-0.8350006937980652, 1.3668522834777832], + [0.7829720377922058, -0.39715489745140076], + [-3.29510235786438, -1.6050711870193481], + [-2.3626132011413574, 2.1890430450439453], + [-4.608696460723877, -3.344607353210449], + [7.113070011138916, -1.9665180444717407], + [2.4852778911590576, 4.182385444641113], + [-4.243470191955566, -3.4840002059936523], + [2.2508177757263184, -8.143523216247559], + [-4.981786727905273, -5.689687728881836], + [2.374796152114868, 5.424749374389648], + [-3.7736523151397705, -6.163876533508301], + [-2.260120153427124, 2.5350193977355957], + [11.487229347229004, -2.536076784133911], + [-4.534413814544678, -5.907959938049316], + [3.027583122253418, -2.417297124862671], + [-2.308298110961914, 2.4222750663757324], + [6.438853740692139, -2.777113914489746], + [3.1025912761688232, -3.5958478450775146], + [3.8337807655334473, 6.765165328979492], + [-2.3588643074035645, -3.9977409839630127], + [2.278674364089966, 2.33792781829834], + [3.502565860748291, -4.891610622406006], + [-5.204997539520264, 4.274012565612793], + [-6.122310638427734, 5.465762138366699], + [-2.086421251296997, -0.6267752647399902], + [2.9664061069488525, -7.1985273361206055], + [3.8029282093048096, -4.435011386871338], + [-4.015065670013428, 5.593782901763916], + [-2.056081533432007, 2.9006834030151367], + [3.7404606342315674, -5.134032726287842], + [2.5640666484832764, -8.026658058166504], + [5.52670955657959, 7.375321388244629], + [4.7072625160217285, -1.9575575590133667], + [3.443753242492676, -3.6156527996063232], + [-4.179006576538086, -5.780737400054932], + [-4.601836681365967, 3.163067102432251], + [2.8432071208953857, -5.453023910522461], + [3.1422908306121826, -7.010686874389648], + [2.9467296600341797, 0.18186432123184204], + [2.7850568294525146, -3.6982805728912354], + [-0.14850673079490662, -1.4192241430282593], + [2.7890732288360596, -3.938735246658325], + [2.696336030960083, -7.707638263702393], + [0.7529546618461609, 11.164201736450195], + [-1.499189019203186, -4.312641143798828], + [2.8552186489105225, -4.0413336753845215], + [0.15360790491104126, 9.622994422912598], + [6.155795574188232, 7.53602409362793], + [1.4654743671417236, -6.3239288330078125], + [3.1653692722320557, 1.4161800146102905], + [-3.141084671020508, 4.750331878662109], + [-4.653892993927002, -2.670778512954712], + [0.615035355091095, -0.9408785700798035], + [0.9283645749092102, -4.655362606048584], + [-4.202371120452881, -5.9622297286987305], + [-5.81201696395874, -0.4671322703361511], + [3.5023348331451416, 5.924549102783203], + [-3.97360897064209, 5.095807075500488], + [-1.7400912046432495, 1.4706711769104004], + [0.6002660989761353, 0.7501365542411804], + [-4.96515417098999, -8.03834056854248], + [3.0787222385406494, -2.863060474395752], + [-3.3038761615753174, -1.3967318534851074], + [-5.806519985198975, 6.988003253936768], + [6.237081050872803, -4.000538349151611], + [-3.3975088596343994, -5.771663665771484], + [-4.428551197052002, 4.450618267059326], + [-2.837216854095459, -5.233339309692383], + [-2.608328342437744, -5.343696594238281], + [-2.706636667251587, 2.238198757171631], + [1.055006742477417, -6.6188178062438965], + [5.774750232696533, -3.1266369819641113], + [-6.036325931549072, 8.456221580505371], + [-4.063568592071533, 6.739187717437744], + [9.741506576538086, -2.4679696559906006], + [7.449579238891602, -2.624626636505127], + [0.4723650813102722, -5.319037437438965], + [3.0701262950897217, -4.521345138549805], + [-3.7462196350097656, -6.189291954040527], + [-6.172243595123291, -0.5520341396331787], + [0.08479862660169601, 12.128326416015625], + [-5.124800205230713, -3.115527391433716], + [8.608362197875977, -2.280298948287964], + [2.2409720420837402, 2.905498743057251], + [-4.814800262451172, -2.3833370208740234], + [-2.205547332763672, 2.3650217056274414], + [2.0424697399139404, -7.745461940765381], + [-3.9773170948028564, -5.0331926345825195], + [-2.0547375679016113, 2.550955057144165], + [-6.4207024574279785, 8.223944664001465], + [-2.1209511756896973, 2.1026711463928223], + [-1.2355440855026245, 1.654289960861206], + [7.901127338409424, -2.2148311138153076], + [-3.1977150440216064, -5.378684997558594], + [3.7774908542633057, -3.4409849643707275], + [-3.412933111190796, -4.386728286743164], + [-5.522707939147949, 6.3477373123168945], + [-3.8416574001312256, -5.802783966064453], + [-5.316098213195801, 7.445799350738525], + [3.3011133670806885, -2.942089796066284], + [-3.8600802421569824, -5.112880229949951], + [5.901397705078125, 7.394411563873291], + [4.708715915679932, 7.246756076812744], + [2.8053014278411865, 6.02203369140625], + [-1.4578818082809448, 1.810903787612915], + [0.29745227098464966, -4.932902812957764], + [2.0843160152435303, -7.683326721191406], + [3.159691333770752, -4.088497161865234], + [4.618880748748779, 6.351656436920166], + [3.483950138092041, -7.990536212921143], + [-5.981895446777344, 6.8420915603637695], + [-2.0730786323547363, 2.2902708053588867], + [4.475160598754883, 7.014699935913086], + [-6.498701095581055, 2.21229887008667], + [-4.034130573272705, 4.440845012664795], + [3.788945436477661, -5.782658576965332], + [-2.1519885063171387, -3.8573269844055176], + [-0.01861930638551712, 12.38304328918457], + [-4.374897480010986, -6.624316692352295], + [5.077152729034424, -4.271113395690918], + [-4.158809661865234, -6.80343770980835], + [-6.80954647064209, 7.833590507507324], + [-4.7180657386779785, -6.863746166229248], + [3.0125088691711426, 0.3720089793205261], + [7.934776782989502, -2.077227830886841], + [-1.0306214094161987, -1.1382328271865845], + [5.483653545379639, -1.2215250730514526], + [-2.078728199005127, 2.310225009918213], + [-0.09119445830583572, 14.007488250732422], + [2.806656837463379, -9.956929206848145], + [3.3865320682525635, -4.609418869018555], + [-3.819201707839966, -5.844113349914551], + [8.75024127960205, -2.4340717792510986], + [4.312683582305908, -1.6576985120773315], + [9.12437915802002, -2.3243162631988525], + [3.388469696044922, -4.682999134063721], + [1.9531099796295166, 3.9131968021392822], + [2.9429450035095215, -6.755935192108154], + [-6.364055156707764, 2.7299258708953857], + [-7.187340259552002, 8.426519393920898], + [7.944153308868408, -2.5693349838256836], + [1.621224045753479, -0.524919867515564], + [-5.1992363929748535, 1.521096110343933], + [-4.067852020263672, -5.15529203414917], + [-2.307955503463745, 2.997328042984009], + [0.21168261766433716, 11.262284278869629], + [1.8837146759033203, 6.210885047912598], + [6.945207118988037, -1.6150379180908203], + [2.422044277191162, 1.7964690923690796], + [-4.756838321685791, -7.0310211181640625], + [7.773005962371826, -2.0156807899475098], + [3.3406617641448975, -5.003542423248291], + [-2.868217706680298, -2.7258667945861816], + [3.629793405532837, -3.3644180297851562], + [8.658148765563965, -2.5238945484161377], + [-3.431981086730957, -1.2531262636184692], + [2.771911144256592, -5.735904693603516], + [3.683894395828247, -3.6695473194122314], + [8.860858917236328, -2.4413812160491943], + [0.11512588709592819, -1.4958269596099854], + [-2.1962125301361084, 2.5044138431549072], + [2.4890635013580322, -7.305734157562256], + [0.9785800576210022, -6.558723449707031], + [2.3742549419403076, -2.250366449356079], + [0.13965827226638794, 10.374238967895508], + [-4.394346714019775, 5.465740203857422], + [-5.218005657196045, -7.923673629760742], + [5.182314395904541, 7.615598201751709], + [-3.1830966472625732, 0.3372833728790283], + [4.587308406829834, -0.5065529346466064], + [8.382012367248535, -2.3067800998687744], + [5.740052700042725, 7.803235054016113], + [9.480313301086426, -2.443932294845581], + [-1.5112605094909668, 2.0609347820281982], + [-4.128081798553467, -5.063861846923828], + [3.458590269088745, -7.922536849975586], + [0.22342050075531006, 10.508813858032227], + [-6.762531757354736, 4.491605758666992], + [4.020301818847656, -7.932758808135986], + [8.422253608703613, -2.2457897663116455], + [2.520909309387207, 2.8253366947174072], + [2.9201958179473877, -4.1125640869140625], + [-2.3416616916656494, -3.8166120052337646], + [5.9661173820495605, -1.3079016208648682], + [3.775601863861084, -7.704110145568848], + [8.775206565856934, -2.394137144088745], + [6.086760520935059, 7.410825729370117], + [3.4302589893341064, -5.056145191192627], + [-6.5462327003479, 7.769797325134277], + [1.3021680116653442, -7.619367599487305], + [-1.6053972244262695, 1.3240348100662231], + [3.386658191680908, -4.72582483291626], + [2.739650011062622, -7.010100364685059], + [0.14677464962005615, 12.22979736328125], + [7.871002674102783, -1.9908860921859741], + [-4.745937824249268, -3.6843760013580322], + [0.538068950176239, 9.737808227539062], + [-4.146153926849365, -5.294926643371582], + [-1.5097564458847046, 0.23925447463989258], + [0.9772375226020813, 7.231012344360352], + [2.3967862129211426, -5.44084358215332], + [1.3142129182815552, -0.2597368061542511], + [-0.03225869685411453, 12.719791412353516], + [-5.862414836883545, 0.07841622829437256], + [-5.051867961883545, 0.959229588508606], + [-2.473139762878418, 2.1575376987457275], + [3.186236619949341, 1.0587571859359741], + [1.6826497316360474, 5.198847770690918], + [3.2218148708343506, -9.747117042541504], + [-5.031778812408447, -2.301950216293335], + [2.9939510822296143, -7.156299114227295], + [6.465091705322266, -4.916085720062256], + [3.0411288738250732, -4.197253227233887], + [6.715282917022705, -1.8873202800750732], + [-1.561792016029358, 0.23725208640098572], + [-4.186831951141357, 4.40311336517334], + [0.48525816202163696, 10.640491485595703], + [2.5227997303009033, 3.287644147872925], + [2.480135679244995, 0.848534882068634], + [-2.4703168869018555, 1.8472915887832642], + [-0.008714564144611359, 9.612916946411133], + [7.6561689376831055, -2.406191110610962], + [-2.7616169452667236, -3.4868381023406982], + [-2.23757004737854, 2.8427634239196777], + [-6.281177997589111, 7.230563163757324], + [-5.744497299194336, 2.178528070449829], + [1.3080401420593262, -0.3088662028312683], + [6.3200554847717285, -4.840331554412842], + [7.40364408493042, -2.084064245223999], + [0.20359021425247192, 10.499883651733398], + [-7.2289042472839355, -1.1373616456985474], + [5.643121719360352, 7.947135925292969], + [2.0715034008026123, 1.615871548652649], + [-7.254283905029297, -0.06175530329346657], + [-0.03679949790239334, 9.443927764892578], + [4.633234977722168, 6.381218910217285], + [-2.8136985301971436, 4.727958679199219], + [-4.468702793121338, -5.664312362670898], + [3.503648042678833, -8.609326362609863], + [0.18013650178909302, 11.531612396240234], + [6.325568675994873, -3.733715295791626], + [3.3289506435394287, -4.647151947021484], + [-3.331754446029663, -2.6859679222106934], + [4.043379306793213, -7.694995403289795], + [-4.307742118835449, -6.3479108810424805], + [-5.049421787261963, -7.530320644378662], + [8.862174034118652, -2.3370015621185303], + [1.0521308183670044, -4.594880104064941], + [-2.079599380493164, 2.682055711746216], + [-2.106523275375366, 2.0990824699401855], + [-5.443230152130127, -2.4625966548919678], + [-4.262424468994141, 3.854593515396118], + [0.27209991216659546, 11.032946586608887], + [-4.722485065460205, -1.986522912979126], + [-4.263687610626221, -6.408082485198975], + [6.070220470428467, -4.164494514465332], + [0.05548625439405441, 12.164634704589844], + [-2.243213415145874, 1.7562001943588257], + [-3.3357551097869873, -1.989876627922058], + [-0.6759728789329529, 0.6943714022636414], + [3.3948495388031006, -5.920138359069824], + [2.8096554279327393, 2.220629930496216], + [-2.127612590789795, 2.4268128871917725], + [4.625856399536133, 7.0533294677734375], + [0.12000899761915207, 9.935284614562988], + [-4.446681976318359, -5.887336730957031], + [-7.422417163848877, 0.037999268621206284], + [1.5506930351257324, -6.44134521484375], + [-2.216512441635132, -4.905179023742676], + [-4.246557235717773, -2.7156989574432373], + [0.3500704765319824, -1.1723757982254028], + [-0.06374866515398026, 12.58633804321289], + [-3.7132551670074463, 4.964358329772949], + [0.21638309955596924, 9.650459289550781], + [-2.36380672454834, -4.194658279418945], + [-6.45651388168335, 6.978764057159424], + [-2.137155771255493, 2.5383224487304688], + [-2.568863868713379, 1.8669675588607788], + [3.477267026901245, -4.960257530212402], + [-2.654359817504883, 2.292050838470459], + [-0.3416258692741394, 9.435111999511719], + [5.516912460327148, -0.6819721460342407], + [2.0478694438934326, 0.08811397850513458], + [0.6320730447769165, -0.5005429983139038], + [-1.4716793298721313, -0.8677012324333191], + [0.046091847121715546, 9.186184883117676], + [-1.93507981300354, 0.9979506731033325], + [0.558132529258728, -3.2065913677215576], + [3.302584648132324, -8.799285888671875], + [2.696971893310547, -0.06675657629966736], + [2.8833186626434326, -3.8509438037872314], + [1.5428006649017334, 2.494319200515747], + [-2.2222177982330322, 2.4633758068084717], + [-2.137251377105713, 2.1621792316436768], + [8.940990447998047, -2.630826234817505], + [9.476713180541992, -2.466667413711548], + [2.252875566482544, -6.304202079772949], + [0.16833823919296265, 10.511509895324707], + [7.795464992523193, -2.0851619243621826], + [2.5943539142608643, 0.06594061851501465], + [2.5259430408477783, -3.106257438659668], + [1.643381118774414, -7.662042617797852], + [0.24192965030670166, 11.074915885925293], + [3.137467622756958, -4.4547200202941895], + [6.992605209350586, -2.8426990509033203], + [-3.2252399921417236, -4.757692813873291], + [-4.706095218658447, -3.3084256649017334], + [-2.3493354320526123, 1.7557690143585205], + [2.266873598098755, -8.588208198547363], + [3.08920955657959, -3.8512537479400635], + [-5.51902437210083, -1.107539176940918], + [5.550804138183594, 7.423619270324707], + [6.168990135192871, -1.0423564910888672], + [2.449794054031372, -9.081167221069336], + [1.5702565908432007, 5.074531078338623], + [3.380638837814331, -6.813196182250977], + [9.203956604003906, -2.4179604053497314], + [-4.619541645050049, -3.4838669300079346], + [6.709869384765625, 8.25079345703125], + [-3.8388803005218506, -5.267011642456055], + [-1.85129714012146, 2.403923273086548], + [-6.568114757537842, 7.867391109466553], + [-4.183511257171631, -5.7669267654418945], + [0.4571172595024109, 11.337064743041992], + [-4.213311672210693, -1.7263120412826538], + [-2.125122308731079, 2.6595687866210938], + [-3.881693124771118, 5.420093536376953], + [-2.1879348754882812, 2.561680316925049], + [2.921312093734741, -4.098145961761475], + [3.767453670501709, -3.2498042583465576], + [-5.303067207336426, -1.209140658378601], + [-0.9415966868400574, 1.678830623626709], + [5.5770368576049805, -4.672545433044434], + [3.692218065261841, 1.7404117584228516], + [8.546773910522461, -2.327422618865967], + [-4.659760475158691, 5.592484474182129], + [4.108523845672607, 1.2916978597640991], + [6.476146221160889, -2.2471675872802734], + [0.2766955494880676, 11.175493240356445], + [3.445237398147583, 1.4811538457870483], + [1.8542835712432861, -0.07442797720432281], + [5.170145511627197, 0.13680130243301392], + [-6.789430141448975, 7.833797454833984], + [-2.2490975856781006, 2.7612011432647705], + [3.703178644180298, 5.065019607543945], + [-4.7041449546813965, 5.813386917114258], + [5.214086055755615, 7.163210868835449], + [-3.06242036819458, -5.284775733947754], + [3.6871917247772217, 1.9383047819137573], + [-5.59315299987793, 6.475713729858398], + [3.6923673152923584, -2.2456281185150146], + [1.6008914709091187, 2.586336851119995], + [1.5391559600830078, 2.99153208732605], + [1.8736369609832764, -7.476705551147461], + [2.6815414428710938, -7.024926662445068], + [3.1924846172332764, -4.328756332397461], + [2.1527047157287598, 4.72613525390625], + [-2.541226387023926, 1.5513900518417358], + [0.5951747298240662, 10.609395980834961], + [-2.1420843601226807, -1.120798945426941], + [-0.31949448585510254, -0.04987658932805061], + [-3.5158517360687256, 5.561222553253174], + [5.812755107879639, -1.2511024475097656], + [7.310750961303711, 8.692623138427734], + [8.709217071533203, -2.3809516429901123], + [0.14446482062339783, -3.545243501663208], + [-4.291955947875977, 5.250988006591797], + [0.0131334587931633, 12.762401580810547], + [-0.06073684245347977, 9.040742874145508], + [4.434301853179932, 7.729683876037598], + [-2.412285089492798, 2.5900990962982178], + [-0.026069827377796173, 13.314696311950684], + [-2.215999126434326, 1.566920518875122], + [-1.2453315258026123, 1.5866150856018066], + [8.785157203674316, -2.299675226211548], + [-5.004119873046875, 5.7787065505981445], + [-1.5947000980377197, 1.3313214778900146], + [-2.489828586578369, 3.3915560245513916], + [6.652408123016357, 8.114901542663574], + [2.991955518722534, -4.223252296447754], + [3.426145315170288, -3.054412841796875], + [-2.46766996383667, 2.097594738006592], + [10.01025104522705, -2.3743889331817627], + [1.458762288093567, -7.423437118530273], + [-6.513951778411865, -0.45154500007629395], + [1.1703054904937744, 10.764692306518555], + [-2.2216806411743164, 2.430992603302002], + [3.7977359294891357, -8.380027770996094], + [-5.8160271644592285, 7.466157913208008], + [-4.727207183837891, -3.5171334743499756], + [9.435904502868652, -2.3171892166137695], + [2.2243268489837646, -6.082950592041016], + [-3.3907501697540283, -3.933030843734741], + [-4.5212321281433105, -3.1283504962921143], + [-5.830769062042236, 6.564868927001953], + [-0.06146777421236038, 13.054068565368652], + [-1.5569086074829102, -3.9573283195495605], + [-2.478496789932251, -4.066742897033691], + [1.3531419038772583, -6.913053512573242], + [2.9182193279266357, 0.8610877394676208], + [2.1726930141448975, 1.8442896604537964], + [-4.678499698638916, 4.468596935272217], + [-0.020717047154903412, -1.5277217626571655], + [-3.0517711639404297, 5.097649574279785], + [11.045133590698242, -2.533440351486206], + [4.028774738311768, -2.8243186473846436], + [3.3021082878112793, -6.342843055725098], + [-2.1963820457458496, -3.3382623195648193], + [8.093073844909668, -2.096061944961548], + [-2.250938892364502, 2.7672829627990723], + [6.769649505615234, -1.3229206800460815], + [7.411268711090088, 8.80860424041748], + [-3.5247552394866943, -1.4201017618179321], + [0.6515058875083923, -0.7336925268173218], + [2.206521511077881, -2.4840774536132812], + [-2.455012083053589, 2.164771795272827], + [-4.642110347747803, -7.564140319824219], + [-5.4099440574646, -1.8537260293960571], + [-2.2666213512420654, 1.433704137802124], + [-0.05044931918382645, 13.249138832092285], + [-0.008213229477405548, 14.404256820678711], + [-5.558523654937744, 7.16015625], + [-5.232865333557129, -7.096792221069336], + [5.323276042938232, -1.8175841569900513], + [-1.0159517526626587, 1.990855097770691], + [-7.039100170135498, 8.239974975585938], + [-4.290712833404541, -6.853072166442871], + [5.39159631729126, 6.756804466247559], + [-5.414712905883789, -1.8207756280899048], + [2.208524465560913, 4.257472991943359], + [-3.97200083732605, 3.777439832687378], + [-1.2895160913467407, 0.7328191995620728], + [-2.0659260749816895, 2.481344699859619], + [3.286234140396118, 6.624117374420166], + [7.330677509307861, -2.423438549041748], + [2.5357561111450195, -5.21480655670166], + [9.426630973815918, -2.3334009647369385], + [-2.2360551357269287, 2.4159765243530273], + [-3.7924087047576904, -3.7237346172332764], + [-2.1888492107391357, 2.455087423324585], + [-0.02435142546892166, 12.932173728942871], + [3.3414247035980225, -4.8055524826049805], + [4.79855489730835, -5.750138759613037], + [0.4302257299423218, 10.734989166259766], + [3.6245524883270264, -2.836095094680786], + [1.8740161657333374, -7.507852554321289], + [-3.4339492321014404, 5.467213153839111], + [3.081099271774292, -6.2989983558654785], + [4.19478702545166, -7.407221794128418], + [6.0586724281311035, -1.2625218629837036], + [5.465773105621338, 7.446933746337891], + [0.0595504567027092, 12.015507698059082], + [2.248049259185791, 4.853736400604248], + [-4.760110378265381, 4.453638076782227], + [3.112321138381958, -4.595938682556152], + [0.11965029686689377, 11.796886444091797], + [1.8322453498840332, -7.614852428436279], + [-3.692915916442871, -5.521260738372803], + [-3.5421125888824463, -4.347134113311768], + [3.9335520267486572, -3.351741075515747], + [7.615393161773682, -2.269468069076538], + [-4.396088123321533, -6.448758125305176], + [2.039677381515503, -2.2631490230560303], + [0.04120772331953049, 10.272207260131836], + [-3.4041240215301514, 4.981441497802734], + [-4.224687099456787, 4.6172051429748535], + [3.381894826889038, 1.4150445461273193], + [0.10074298828840256, 12.217870712280273], + [-1.9878708124160767, 2.620448350906372], + [-7.256798267364502, -0.9863979816436768], + [4.933485507965088, -4.55457878112793], + [-2.6352791786193848, 2.0043251514434814], + [0.21659833192825317, 12.18698501586914], + [-0.04175133258104324, 13.301433563232422], + [-4.773730278015137, -6.466228008270264], + [1.4732029438018799, -6.990425109863281], + [-0.02369912713766098, -1.2961066961288452], + [3.176769256591797, -6.003237247467041], + [6.8723978996276855, 8.338536262512207], + [8.371131896972656, -2.2542221546173096], + [2.9665915966033936, -6.923631191253662], + [-4.6416497230529785, -7.057716369628906], + [-1.6501927375793457, -4.608964443206787], + [2.13808536529541, -4.826424598693848], + [9.096956253051758, -2.294646978378296], + [3.8730475902557373, -4.94179630279541], + [-0.9225244522094727, -4.244289398193359], + [-0.7112234234809875, -0.6562151908874512], + [-2.4777863025665283, 5.961036682128906], + [-0.04596371203660965, 13.695446014404297], + [2.054813861846924, -6.602908611297607], + [-5.1425275802612305, -0.527835488319397], + [-4.438426494598389, 5.097755432128906], + [8.311702728271484, -2.2738664150238037], + [-4.008091926574707, 7.331974983215332], + [1.2514491081237793, -6.564020156860352], + [-4.979444980621338, -6.969450950622559], + [4.659677028656006, 6.165449142456055], + [2.482272148132324, -3.0453426837921143], + [2.5848093032836914, -3.025935649871826], + [5.667891025543213, 7.446119785308838], + [0.04261224716901779, 13.27939224243164], + [1.3469620943069458, -1.2423450946807861], + [-2.8606386184692383, 1.3849447965621948], + [6.862338542938232, -2.363398313522339], + [-5.261765480041504, -0.7401631474494934], + [-3.975879192352295, -3.4518537521362305], + [2.1468234062194824, -3.095510959625244], + [3.4608328342437744, 1.6256157159805298], + [-3.737212657928467, 4.662799835205078], + [0.19356703758239746, 11.241754531860352], + [-4.2966532707214355, -5.693961143493652], + [9.8912353515625, -2.3948123455047607], + [-4.601007461547852, 3.97798752784729], + [-4.718311786651611, -6.492616653442383], + [-1.9857230186462402, -3.362255334854126], + [-4.652062892913818, -5.484346389770508], + [-4.547648906707764, -6.670351982116699], + [1.4527961015701294, 1.9431275129318237], + [0.13190335035324097, 11.181976318359375], + [0.44518035650253296, 0.9467753171920776], + [-4.569485187530518, 4.785177230834961], + [0.585946261882782, 10.630475997924805], + [1.654045820236206, 1.8376795053482056], + [-3.8343684673309326, 3.4922688007354736], + [-3.6998231410980225, -2.686060667037964], + [7.816547870635986, -2.0748934745788574], + [0.21565788984298706, 10.891185760498047], + [8.888752937316895, -2.267929792404175], + [6.080804824829102, -5.289156913757324], + [3.108769655227661, 4.747694492340088], + [-4.311899662017822, -2.3166306018829346], + [-0.026715107262134552, 0.8056473135948181], + [8.521404266357422, -2.3259942531585693], + [7.721584320068359, -2.2484192848205566], + [1.367997646331787, -6.29989767074585], + [-3.3523848056793213, -2.2570722103118896], + [-0.07521636039018631, 13.670700073242188], + [3.406463384628296, -8.425300598144531], + [-2.2739338874816895, 2.137576103210449], + [7.045386791229248, -4.25181245803833], + [0.6745709776878357, -4.273657321929932], + [6.401912212371826, 8.445584297180176], + [-3.9869089126586914, -2.0543417930603027], + [-1.7722080945968628, 1.981040596961975], + [1.8478620052337646, 6.287285327911377], + [8.498957633972168, -2.5148751735687256], + [-5.198707580566406, 6.374650955200195], + [6.33176851272583, -2.1191513538360596], + [4.12493371963501, 6.018263816833496], + [-4.540045738220215, 3.874953031539917], + [9.208701133728027, -2.590683698654175], + [3.2792131900787354, 1.4829350709915161], + [1.7262225151062012, 4.6927642822265625], + [7.45025110244751, -1.8461436033248901], + [1.6576902866363525, -6.845776081085205], + [-0.008664675056934357, 12.363818168640137], + [3.614028215408325, 6.107786178588867], + [0.189480721950531, 10.614707946777344], + [3.038196563720703, -3.6572413444519043], + [-2.2192158699035645, 2.005530595779419], + [-3.7922163009643555, -5.814453601837158], + [-4.08468770980835, 4.8642449378967285], + [-3.9113314151763916, 4.299843788146973], + [-3.5139033794403076, -5.794706344604492], + [10.788487434387207, -2.6103222370147705], + [8.023207664489746, -2.144620418548584], + [-1.6020472049713135, 2.1666619777679443], + [0.19133514165878296, 10.790224075317383], + [0.02428024262189865, 12.024765968322754], + [6.802921772003174, 8.204919815063477], + [2.922985792160034, -3.991619348526001], + [2.2559025287628174, 4.101865768432617], + [-2.1300432682037354, 2.1773412227630615], + [1.8920482397079468, 1.9980815649032593], + [4.16679048538208, -5.488553047180176], + [2.605323553085327, -9.376721382141113], + [3.361692428588867, -7.017370223999023], + [3.7220795154571533, 1.233583927154541], + [-3.131469488143921, -2.5365090370178223], + [8.084498405456543, -2.27329421043396], + [9.772887229919434, -2.403465986251831], + [-6.156393527984619, 6.965633392333984], + [6.088122367858887, -4.688496112823486], + [-3.059194326400757, -3.7347524166107178], + [1.0427038669586182, -0.5849778652191162], + [-4.472933769226074, -2.6210598945617676], + [3.492276430130005, -4.412788391113281], + [8.180732727050781, 9.571112632751465], + [-5.3322272300720215, 6.453476905822754], + [9.658537864685059, -2.4619691371917725], + [1.9295322895050049, 4.2634992599487305], + [0.04016935080289841, 9.716421127319336], + [3.000272274017334, -3.6556286811828613], + [-5.476786136627197, -2.3474645614624023], + [-0.07948655635118484, 14.146154403686523], + [2.602228879928589, 5.045225143432617], + [3.547029972076416, 1.2735610008239746], + [-2.6237475872039795, -2.627035617828369], + [4.006851673126221, -3.5351498126983643], + [-3.5151054859161377, -2.478738784790039], + [3.8035404682159424, 1.6663225889205933], + [-4.41550874710083, -6.822530746459961], + [2.1416923999786377, 0.4529637098312378], + [-2.205970525741577, 2.4057905673980713], + [-3.828788995742798, -5.788938522338867], + [4.937483310699463, -4.359592437744141], + [4.856129169464111, 6.93660831451416], + [-2.532944917678833, 0.5832937955856323], + [0.4902800917625427, 9.883732795715332], + [4.035057067871094, -4.447563171386719], + [3.374105930328369, -2.958197832107544], + [-4.991340160369873, -2.867454767227173], + [-2.1086180210113525, -4.5328264236450195], + [-2.7007339000701904, -4.133606910705566], + [-4.520519733428955, -3.4405853748321533], + [5.281396865844727, -1.4263447523117065], + [-4.573072910308838, -4.826604843139648], + [1.981947422027588, 1.1062906980514526], + [1.1335906982421875, -5.896563529968262], + [5.447262287139893, 7.730125427246094], + [-2.835212469100952, 2.506788730621338], + [-5.195300579071045, -3.0135390758514404], + [7.726137161254883, -2.0713698863983154], + [2.9875547885894775, -10.3004150390625], + [3.7315099239349365, -5.233243465423584], + [7.792416572570801, -2.686924695968628], + [-2.5803544521331787, -1.137862205505371], + [-1.4672759771347046, 1.3292323350906372], + [2.56404185295105, 6.224425792694092], + [-2.291520833969116, 2.5003786087036133], + [0.21468648314476013, -5.175015449523926], + [-5.1081461906433105, -3.0345983505249023], + [0.6528306603431702, -0.9724761247634888], + [9.540413856506348, -2.363703489303589], + [-5.0641350746154785, -5.610404014587402], + [6.359161376953125, -1.7541424036026], + [1.8558168411254883, 6.187116622924805], + [-2.287405490875244, 1.2548009157180786], + [-4.763282775878906, 6.037031173706055], + [-2.032688856124878, 2.1888930797576904], + [-1.8836966753005981, -1.4767539501190186], + [-0.32700207829475403, -4.628305435180664], + [-2.592700719833374, 1.9195972681045532], + [0.9528018832206726, -7.058664321899414], + [-3.543596029281616, 4.967103958129883], + [-2.43094539642334, -3.636183977127075], + [-6.712393760681152, -1.2827401161193848], + [-2.122035026550293, 2.6653597354888916], + [0.10177987068891525, 8.88188362121582], + [-5.190775394439697, -3.587181806564331], + [0.1537495255470276, 11.563400268554688], + [-5.783942699432373, 1.9161431789398193], + [-7.253935813903809, 8.40005111694336], + [2.439685583114624, 0.5888088941574097], + [-2.127347469329834, 2.4201571941375732], + [5.530092716217041, 7.064169883728027], + [6.490975379943848, 8.01102066040039], + [6.373107433319092, -1.291414499282837], + [-4.702696323394775, -5.911736488342285], + [2.2584989070892334, 5.727045059204102], + [-1.6463557481765747, -3.4882051944732666], + [2.6962316036224365, -8.263046264648438], + [-4.222507476806641, -1.5626417398452759], + [-6.018996715545654, 7.522845268249512], + [6.283404350280762, 7.836855411529541], + [3.063230276107788, -4.344630718231201], + [2.3707220554351807, 6.109275817871094], + [3.519794225692749, -5.652522087097168], + [2.1197705268859863, 5.217892646789551], + [7.3938727378845215, -2.572094202041626], + [-2.5421578884124756, 2.10097599029541], + [-0.6924595236778259, 1.116922378540039], + [-1.2890690565109253, 1.529837727546692], + [3.747389078140259, -3.217350482940674], + [-4.447665691375732, 3.86042857170105], + [1.6149533987045288, 4.047723293304443], + [-2.254948139190674, 2.602854013442993], + [2.243978500366211, 5.151473045349121], + [2.767962694168091, 6.983017444610596], + [-3.8786818981170654, -6.281929016113281], + [1.953430414199829, 4.492693901062012], + [4.020373821258545, -3.685612678527832], + [-3.8863437175750732, -5.213314533233643], + [-2.6641159057617188, 7.6488261222839355], + [-2.406959056854248, 1.81244695186615], + [8.197749137878418, -2.291246175765991], + [6.032451152801514, -6.770763397216797], + [-6.2637529373168945, -2.1455867290496826], + [6.30361270904541, -1.2996362447738647], + [2.964076519012451, -7.19142484664917], + [-1.7580475807189941, -3.9652438163757324], + [1.254248857498169, 5.805883407592773], + [-0.21625468134880066, -1.5839470624923706], + [-4.183838367462158, -6.215478897094727], + [-3.034454584121704, 1.0714387893676758], + [-1.0748741626739502, -0.45668643712997437], + [-4.875254154205322, 4.441680431365967], + [-0.43730777502059937, -1.0347497463226318], + [-2.555838108062744, 2.088221788406372], + [2.014113664627075, -6.456873893737793], + [-0.10523546487092972, 8.908498764038086], + [7.757523059844971, -2.6601059436798096], + [-2.0544097423553467, 2.479412317276001], + [-5.43389368057251, 1.5504711866378784], + [-0.014477796852588654, 13.060386657714844], + [-4.445602893829346, -6.489108085632324], + [-0.15963423252105713, 10.044636726379395], + [2.8316140174865723, 6.57321834564209], + [8.457076072692871, -2.345097780227661], + [5.271109104156494, -1.1614006757736206], + [-3.560699224472046, -4.406520843505859], + [4.377636909484863, -1.5869413614273071], + [0.19951051473617554, 11.851231575012207], + [4.147123336791992, 0.3147660493850708], + [4.294417381286621, 6.303313255310059], + [0.044765762984752655, 12.49428939819336], + [1.4200718402862549, 6.1103315353393555], + [8.532637596130371, -2.3336756229400635], + [8.910730361938477, -2.3113062381744385], + [3.7669034004211426, 1.1822906732559204], + [3.6302411556243896, -4.744565963745117], + [9.730226516723633, -2.4386613368988037], + [5.504886150360107, -2.4344608783721924], + [6.403858661651611, -2.999314785003662], + [-3.44095778465271, -3.1432900428771973], + [1.5624253749847412, -0.18967032432556152], + [0.20414960384368896, 10.15644645690918], + [-0.7364546656608582, 1.443851351737976], + [1.4712210893630981, 5.21390438079834], + [-4.065643787384033, 3.5965137481689453], + [-4.4412150382995605, -1.2731772661209106], + [1.306548833847046, -0.3347906172275543], + [1.6489670276641846, -7.878704071044922], + [-0.020531244575977325, 12.6253023147583], + [6.530287742614746, -1.1557776927947998], + [-4.375265598297119, 6.348397254943848], + [3.311856985092163, -4.652590274810791], + [-4.335149765014648, -1.004428505897522], + [1.7112436294555664, -6.661199569702148], + [5.096688747406006, 7.121678829193115], + [-2.1634066104888916, 2.2971444129943848], + [10.966740608215332, -2.4307196140289307], + [2.2761118412017822, 0.7313883304595947], + [-2.417654275894165, 2.1211254596710205], + [2.7089927196502686, -5.328736782073975], + [7.5211501121521, -2.104534387588501], + [8.251282691955566, -2.2018961906433105], + [-2.4672820568084717, 1.7159862518310547], + [-4.127577781677246, -1.563538670539856], + [-2.493157148361206, -4.013918876647949], + [-4.280309677124023, 7.420685768127441], + [0.5808184146881104, 5.870959758758545], + [-2.382258653640747, 1.2465054988861084], + [-0.7660605311393738, 1.4228237867355347], + [0.02248876541852951, 11.685409545898438], + [9.013333320617676, -2.3694355487823486], + [4.385447025299072, -3.0878493785858154], + [-5.5550761222839355, 6.207246780395508], + [-0.6166996359825134, -1.867668867111206], + [7.055593013763428, -1.6446324586868286], + [3.8671884536743164, -3.1606478691101074], + [-1.6882041692733765, 1.3453482389450073], + [-0.22368192672729492, 6.071086883544922], + [-2.1269097328186035, 2.4503233432769775], + [-5.299320697784424, 5.462238311767578], + [5.360612392425537, -1.8741278648376465], + [-3.6073386669158936, -1.4489684104919434], + [2.46335768699646, 3.6553311347961426], + [3.6457698345184326, 1.6532868146896362], + [-1.9119564294815063, -3.7545266151428223], + [-4.269276142120361, 3.464306116104126], + [2.287872314453125, 6.3305535316467285], + [0.010130159556865692, 11.920368194580078], + [3.874093770980835, -3.6795523166656494], + [-6.357654571533203, 7.805152893066406], + [8.129572868347168, -2.201944589614868], + [-3.011194944381714, -3.688417673110962], + [-4.555478096008301, 3.883814573287964], + [6.3096442222595215, -2.8976094722747803], + [0.3971171975135803, 11.012524604797363], + [4.428286075592041, 6.475614070892334], + [5.500936985015869, -1.0645334720611572], + [-3.5518224239349365, 2.424259662628174], + [-5.500051498413086, -1.0547751188278198], + [4.190306186676025, 6.365671634674072], + [0.13139793276786804, -1.4268487691879272], + [-2.6745080947875977, -3.8027822971343994], + [-3.0235650539398193, 3.971918821334839], + [-5.717152118682861, 7.239449977874756], + [0.1346510648727417, 9.984468460083008], + [-5.250863552093506, -3.4545843601226807], + [-0.0449189618229866, 14.050264358520508], + [1.2429348230361938, -6.735335350036621], + [5.997382640838623, -6.473455429077148], + [-6.461021900177002, 8.19083023071289], + [4.0805277824401855, 5.560784816741943], + [0.19806671142578125, 10.555068969726562], + [0.0889628455042839, 9.933194160461426], + [7.939850330352783, -2.216318368911743], + [1.5713459253311157, -7.417829990386963], + [0.038741759955883026, 8.956913948059082], + [4.038336753845215, -5.404393196105957], + [1.4163362979888916, 1.4273875951766968], + [-4.760390758514404, -7.378039836883545], + [6.168656826019287, 7.760215759277344], + [-4.234607219696045, -2.899188280105591], + [-4.596625804901123, -6.647363662719727], + [-5.6070475578308105, -3.4342567920684814], + [0.7960962653160095, 11.162853240966797], + [7.716097354888916, -3.733518362045288], + [1.317571759223938, -7.553979873657227], + [-2.9652013778686523, 2.7532334327697754], + [-1.7324562072753906, 1.1895439624786377], + [-2.5299322605133057, 2.064258098602295], + [0.04786758869886398, 12.481276512145996], + [-0.6077269911766052, -2.5552022457122803], + [2.1866796016693115, -3.0658750534057617], + [-0.017514832317829132, 11.938643455505371], + [-3.3497865200042725, -3.609273672103882], + [-0.24335390329360962, -1.528605580329895], + [4.104175090789795, 1.554998755455017], + [-4.663949489593506, 7.982891082763672], + [3.8064534664154053, 1.4442908763885498], + [-4.7467756271362305, 6.721799850463867], + [2.5665574073791504, -9.283483505249023], + [2.0303614139556885, 5.691031455993652], + [-4.554150104522705, -6.655102729797363], + [3.017976760864258, -8.20974349975586], + [-3.1150553226470947, 3.191044569015503], + [0.21300721168518066, 10.280540466308594], + [7.962204456329346, -2.1857590675354004], + [-5.1226115226745605, -2.3931708335876465], + [-6.197076320648193, 6.063772201538086], + [-4.499989986419678, -4.7428975105285645], + [-3.3780460357666016, -5.308171272277832], + [-3.569568395614624, -5.391040802001953], + [3.4764554500579834, 1.1111516952514648], + [2.5106940269470215, 3.338529586791992], + [1.157331943511963, 0.6993904709815979], + [5.362319469451904, -5.5747857093811035], + [-4.588786602020264, 6.176020622253418], + [2.6723783016204834, 3.571758508682251], + [2.2544491291046143, 4.735495567321777], + [-3.3936522006988525, -2.9885032176971436], + [-2.5267016887664795, 1.929587721824646], + [5.610219478607178, -1.1498903036117554], + [1.6015559434890747, 6.473952293395996], + [3.1290392875671387, 0.5167086124420166], + [7.864428520202637, -2.1357853412628174], + [5.8620285987854, -5.723740577697754], + [-5.780802249908447, 7.7795634269714355], + [-0.8956823348999023, -3.318063974380493], + [6.754758834838867, 8.24423599243164], + [-3.1952664852142334, -4.460489749908447], + [-0.13718566298484802, -1.552404522895813], + [6.045349597930908, -5.086433410644531], + [3.945923089981079, -3.788245439529419], + [3.632701873779297, -3.006389856338501], + [7.6525797843933105, -2.4671289920806885], + [0.070766381919384, 9.749792098999023], + [2.8518402576446533, 1.0544006824493408], + [2.7594339847564697, -4.033697605133057], + [0.559657871723175, 10.870805740356445], + [3.3761632442474365, 1.4836863279342651], + [4.974959850311279, 6.935646057128906], + [-2.5454413890838623, -3.150405168533325], + [4.813070297241211, 6.100711822509766], + [-3.960536241531372, -6.434941291809082], + [-0.022048182785511017, 11.264968872070312], + [-2.1220126152038574, 2.8090412616729736], + [-5.373045444488525, 6.375378131866455], + [-5.519209384918213, -3.043788194656372], + [-5.130940914154053, -1.6984502077102661], + [1.855892539024353, -7.753053665161133], + [-3.347681760787964, -2.2593605518341064], + [7.2148284912109375, -2.9240853786468506], + [12.178831100463867, -2.813917875289917], + [6.319939613342285, -5.537013053894043], + [-4.847421646118164, -2.7105209827423096], + [0.008432649075984955, -0.503302812576294], + [2.909729480743408, -4.161744594573975], + [3.431635618209839, -5.911149024963379], + [1.9632635116577148, 1.9253042936325073], + [8.53197956085205, -2.3381407260894775], + [-1.9680753946304321, 1.8584601879119873], + [-4.882105827331543, 5.351840496063232], + [-2.8570196628570557, -3.77275013923645], + [6.858951091766357, -1.7389750480651855], + [8.572770118713379, -2.3179266452789307], + [-2.606396436691284, 2.145442247390747], + [3.6230881214141846, -7.708015441894531], + [-4.369444370269775, -0.5036358833312988], + [-4.4895405769348145, -6.285105228424072], + [-2.2227866649627686, 2.259424924850464], + [-2.6463077068328857, -3.309126615524292], + [-2.140231132507324, 2.3928565979003906], + [1.6992238759994507, 5.561763286590576], + [-3.480207681655884, -5.318613529205322], + [1.1933369636535645, -7.098580360412598], + [-0.7696635127067566, -1.7976819276809692], + [-2.6334517002105713, -3.5430972576141357], + [-2.3129148483276367, 2.5681841373443604], + [3.0381007194519043, -2.913803815841675], + [-5.536320209503174, 6.141221046447754], + [-2.8465311527252197, -2.408921480178833], + [-4.6682915687561035, -4.92896842956543], + [5.984610557556152, 7.443403244018555], + [1.190173864364624, -6.774626731872559], + [-4.663852214813232, 0.22001129388809204], + [-1.9320355653762817, 2.303941249847412], + [-3.9058375358581543, -6.607410430908203], + [2.405977487564087, 5.7544779777526855], + [-3.4223172664642334, -0.24375879764556885], + [-3.200270652770996, 3.7411229610443115], + [-1.5864628553390503, -2.875598192214966], + [-4.9884538650512695, -7.0607194900512695], + [-0.5421276688575745, -4.478939533233643], + [4.057696342468262, -3.6568000316619873], + [-6.098390102386475, 7.041707515716553], + [4.339303493499756, 7.088354587554932], + [-0.5154261589050293, -2.4775426387786865], + [5.645479202270508, -3.2094578742980957], + [2.1171047687530518, 0.008042853325605392], + [-2.3107168674468994, 6.269732475280762], + [2.8883960247039795, -8.334017753601074], + [-7.27622127532959, 8.026575088500977], + [-4.9464430809021, 6.143983364105225], + [8.43355655670166, -2.4553260803222656], + [-3.309788227081299, -4.513486385345459], + [-2.57586932182312, 1.880179762840271], + [-3.433223009109497, -5.929225444793701], + [-3.0284793376922607, -1.8491710424423218], + [-3.3885133266448975, -5.170363426208496], + [-0.8521521687507629, 1.7077791690826416], + [2.437556028366089, 5.624300956726074], + [0.043042831122875214, 11.851990699768066], + [2.553029775619507, -3.2395598888397217], + [0.033572547137737274, 12.399892807006836], + [-2.058103084564209, 2.3081798553466797], + [4.19234037399292, -7.4662556648254395], + [-6.213065147399902, 7.594322204589844], + [3.6936936378479004, -8.525348663330078], + [3.301497220993042, -4.90687370300293], + [-5.785452365875244, 7.063597679138184], + [-0.02964029461145401, -1.8131808042526245], + [-2.490539789199829, 2.262882947921753], + [-6.1922173500061035, -1.1706801652908325], + [-5.503433704376221, 5.674853801727295], + [6.338869571685791, -1.5064934492111206], + [3.6874077320098877, -2.8940064907073975], + [3.369699716567993, 6.521686553955078], + [-3.8341007232666016, -5.935927391052246], + [7.999594211578369, -2.171297311782837], + [-4.167617321014404, -6.739706039428711], + [0.07574944943189621, 12.02365493774414], + [9.451478004455566, -2.473116636276245], + [3.4022715091705322, -5.136754989624023], + [9.275979042053223, -2.4937973022460938], + [0.16573256254196167, 10.111686706542969], + [-3.1680376529693604, 3.3486902713775635], + [-5.5478596687316895, -0.37567615509033203], + [-3.729867935180664, -2.8013899326324463], + [2.1069483757019043, 3.2785732746124268], + [-4.899019241333008, 6.382612705230713], + [0.232214093208313, 9.820569038391113], + [2.3486130237579346, -6.760740280151367], + [-4.497334957122803, -3.9421870708465576], + [-4.232419967651367, 5.027817249298096], + [2.9140098094940186, -7.569737911224365], + [-6.096469402313232, 8.043563842773438], + [-4.700287342071533, 3.168151617050171], + [-4.301459312438965, 5.730177402496338], + [-0.031196720898151398, 9.305499076843262], + [-0.2658095061779022, 1.0648411512374878], + [2.5144460201263428, -2.98748517036438], + [-2.2160162925720215, 2.867997884750366], + [3.4060604572296143, 2.04186749458313], + [-7.259907245635986, 8.251982688903809], + [0.13260143995285034, 10.393331527709961], + [-0.03806693106889725, 12.125213623046875], + [6.088447093963623, 7.575736045837402], + [3.5442516803741455, -5.415328502655029], + [-6.796108245849609, 2.097245931625366], + [-7.078246593475342, 8.35127067565918], + [0.11212056130170822, 9.892539024353027], + [-5.276782989501953, 0.7575150728225708], + [-2.4386539459228516, 1.5495153665542603], + [-5.359648704528809, -3.5012853145599365], + [1.2225937843322754, -0.2937973737716675], + [-1.6522566080093384, 2.1171088218688965], + [6.11212682723999, 7.6837663650512695], + [6.713386058807373, -5.929454803466797], + [-0.05120045691728592, 14.044036865234375], + [-4.186227321624756, -1.9562921524047852], + [6.797435283660889, 8.331991195678711], + [-0.006311424076557159, 13.422401428222656], + [0.1216387078166008, 10.291932106018066], + [-4.50973653793335, 4.915977954864502], + [-4.005840301513672, -2.000875473022461], + [-3.1257078647613525, -2.4829697608947754], + [2.565324068069458, -8.3844633102417], + [-1.5688172578811646, -2.5353944301605225], + [1.5089762210845947, -6.838482856750488], + [3.5813920497894287, -4.034376621246338], + [-5.785101413726807, 6.113450050354004], + [-4.012502670288086, -6.182939052581787], + [-3.5049822330474854, 2.403186321258545], + [1.81205153465271, -8.437686920166016], + [0.8040712475776672, -0.2730126976966858], + [-5.34672212600708, -5.147739887237549], + [-2.2338852882385254, 2.4355695247650146], + [-3.904602289199829, 3.1819989681243896], + [-1.7817292213439941, -3.3221449851989746], + [-0.8226438164710999, -2.931830644607544], + [-0.10719604045152664, 12.07461929321289], + [3.4742414951324463, -3.4905009269714355], + [5.203314781188965, -3.0162060260772705], + [-3.0487725734710693, -5.048683166503906], + [0.22519999742507935, 11.412332534790039], + [-0.5571184158325195, -3.367755174636841], + [7.481270790100098, -2.1545491218566895], + [0.4068205952644348, 11.133895874023438], + [0.14508384466171265, 11.899022102355957], + [2.254101514816284, -0.1600750982761383], + [9.412039756774902, -2.3623135089874268], + [-2.630711555480957, -3.2244133949279785], + [-4.632694721221924, -7.151193141937256], + [-1.638944387435913, 1.272582769393921], + [-4.214676856994629, -6.283055305480957], + [2.8266890048980713, -3.751702070236206], + [3.6239330768585205, 1.6406649351119995], + [-2.3378195762634277, -3.6163032054901123], + [0.040565066039562225, 11.188993453979492], + [4.941922664642334, 7.312535762786865], + [1.9366405010223389, 5.673160552978516], + [-0.010436303913593292, 13.239643096923828], + [-0.17814800143241882, -1.6673256158828735], + [6.604009628295898, -1.2591887712478638], + [-5.06101655960083, -3.487576723098755], + [2.964334726333618, -10.271577835083008], + [2.6311089992523193, -9.663961410522461], + [0.341841459274292, -4.134069919586182], + [-1.6571789979934692, 1.8137832880020142], + [6.388524532318115, 8.270380973815918], + [-3.8726046085357666, -4.210172653198242], + [8.566943168640137, -2.2539069652557373], + [2.8221423625946045, 0.3772689998149872], + [6.618324279785156, -1.5208098888397217], + [3.5600974559783936, -6.2963151931762695], + [-0.44593462347984314, 1.4210654497146606], + [0.03785937279462814, 8.68940544128418], + [-2.95332407951355, -3.187267541885376], + [0.31325462460517883, -0.03353792801499367], + [8.981474876403809, -2.5297138690948486], + [-4.025974273681641, -2.951105833053589], + [-5.3095173835754395, 5.628095626831055], + [0.08178406208753586, 12.038897514343262], + [7.34958028793335, -4.185366630554199], + [-2.1366519927978516, 2.502542495727539], + [-2.5490033626556396, -4.128522872924805], + [8.766440391540527, -2.8109185695648193], + [2.3816885948181152, -6.282992362976074], + [8.155282020568848, -2.371178150177002], + [-5.045384883880615, -5.568133354187012], + [0.9486399292945862, -0.2833113968372345], + [-6.536431789398193, -1.1717007160186768], + [-6.071562767028809, 5.1877851486206055], + [5.1321187019348145, 2.178485870361328], + [-2.268432855606079, 2.4653594493865967], + [-2.0098397731781006, 2.559931516647339], + [0.12138401716947556, 10.40455436706543], + [2.1424434185028076, -6.714180946350098], + [2.9909303188323975, -4.231294631958008], + [9.268327713012695, -2.377568006515503], + [-4.26539945602417, -6.552403926849365], + [7.305933952331543, -2.1300466060638428], + [-4.353625774383545, -6.730302333831787], + [-4.699988842010498, 5.755670547485352], + [-6.1795268058776855, 5.759247779846191], + [-2.1541812419891357, 2.7067344188690186], + [-0.07159585505723953, 14.406976699829102], + [8.077731132507324, -2.141960382461548], + [10.150546073913574, -2.4944655895233154], + [-4.45166540145874, -6.831679344177246], + [-0.0718265250325203, 13.307395935058594], + [-1.1581552028656006, -0.14777353405952454], + [-0.38472193479537964, -4.408723831176758], + [-6.3710222244262695, 6.956112861633301], + [-2.3818981647491455, 1.7193725109100342], + [8.8645601272583, -2.4811809062957764], + [-2.721078872680664, 1.3489130735397339], + [2.5464606285095215, -6.975561141967773], + [3.6277010440826416, -3.444016695022583], + [1.1957275867462158, -7.575797080993652], + [-2.1719741821289062, 2.1223864555358887], + [3.046945571899414, -7.710353851318359], + [3.198329210281372, -4.266138553619385], + [-1.4308700561523438, -2.633465051651001], + [1.9028624296188354, -8.015389442443848], + [2.2284111976623535, 4.771581172943115], + [0.05180042237043381, 9.240802764892578], + [1.9135810136795044, 2.4937567710876465], + [3.2230074405670166, -4.856710433959961], + [2.226522207260132, -3.1935410499572754], + [6.322537899017334, -4.543881416320801], + [6.951169967651367, -1.7444549798965454], + [7.329010486602783, -1.747135043144226], + [0.0340011790394783, -1.5687843561172485], + [0.9079602360725403, -0.5276809334754944], + [0.3873044550418854, -2.278380870819092], + [-2.335073709487915, 1.254626750946045], + [0.10170023888349533, 11.962095260620117], + [0.24315321445465088, 11.300021171569824], + [-6.5154290199279785, 8.440144538879395], + [3.0094079971313477, -4.091668605804443], + [0.026350192725658417, 8.624464988708496], + [7.588034152984619, -2.0124003887176514], + [-0.16161876916885376, 4.754796028137207], + [4.057981014251709, 1.4775468111038208], + [-1.326869010925293, 1.7816051244735718], + [-4.860612869262695, -6.257244110107422], + [-4.328624248504639, -6.187585353851318], + [-2.215023994445801, -3.1455423831939697], + [9.964139938354492, -2.4146082401275635], + [3.483144998550415, -3.6390671730041504], + [-2.0851895809173584, 2.5563085079193115], + [-4.685129642486572, -6.812584400177002], + [1.816758394241333, 5.098111152648926], + [2.698500394821167, -3.084533452987671], + [3.1639537811279297, -3.2078754901885986], + [2.1487038135528564, 5.186380386352539], + [-0.02771741896867752, 9.44803524017334], + [-0.07946128398180008, 9.299074172973633], + [9.735913276672363, -2.387272357940674], + [8.431203842163086, -2.5046918392181396], + [-4.380496501922607, -6.600094795227051], + [-6.453062534332275, 6.886531829833984], + [0.033800773322582245, 10.82608413696289], + [-5.509911060333252, 1.276936650276184], + [-2.2665469646453857, 2.678736448287964], + [6.592723369598389, -4.874574661254883], + [-2.0071637630462646, -4.252928256988525], + [8.224842071533203, -2.345525026321411], + [-2.3005192279815674, 2.9781835079193115], + [-3.5615949630737305, -0.9093142747879028], + [-5.337975025177002, 7.627269744873047], + [2.896021604537964, -7.9288649559021], + [-2.440558433532715, -3.356253147125244], + [11.208769798278809, -2.5812947750091553], + [-0.0713161900639534, 13.73331069946289], + [-4.374719142913818, -6.274381637573242], + [-3.0911641120910645, 1.9831665754318237], + [3.575197458267212, -8.424030303955078], + [3.6686506271362305, -3.366615056991577], + [4.065718173980713, 5.832805633544922], + [6.1574835777282715, -1.2829183340072632], + [-3.554285764694214, -3.099919557571411], + [-3.871694803237915, -1.5801568031311035], + [-4.329267501831055, -4.265448093414307], + [3.4306986331939697, -2.8626976013183594], + [5.983087062835693, 7.96173095703125], + [-2.484356164932251, 1.4873000383377075], + [8.427179336547852, -2.2648589611053467], + [2.3522870540618896, 1.2851070165634155], + [3.914583921432495, 6.467470169067383], + [-6.342010498046875, -1.1843165159225464], + [5.909700870513916, 7.226902484893799], + [2.9886701107025146, 4.420600891113281], + [2.3697738647460938, 1.1905852556228638], + [-3.2367167472839355, -4.323257923126221], + [-3.395507574081421, -2.862828493118286], + [-4.758924961090088, -5.00279426574707], + [5.11769962310791, 6.741155624389648], + [-4.401669979095459, -5.355023384094238], + [9.496814727783203, -2.340411424636841], + [-6.849228382110596, 1.8389462232589722], + [7.865108013153076, -2.461693048477173], + [0.8121364116668701, -5.788052558898926], + [-5.2322001457214355, -0.7450195550918579], + [-0.02140863984823227, -1.489493489265442], + [-4.202878952026367, -6.284055709838867], + [-0.022494442760944366, 9.597957611083984], + [-4.637225151062012, 4.850076198577881], + [1.5410891771316528, 3.8028295040130615], + [-0.4635851979255676, -1.9683619737625122], + [-5.5993547439575195, -3.096411943435669], + [-7.827682971954346, -0.26285743713378906], + [8.448311805725098, -2.4079818725585938], + [4.170139789581299, -2.424529790878296], + [-5.044273853302002, -0.4455474019050598], + [-2.2768304347991943, 1.792426347732544], + [-1.814605712890625, 2.416661500930786], + [-1.3774280548095703, 2.125098466873169], + [0.12307923287153244, 8.678413391113281], + [-2.891533613204956, -0.855175256729126], + [0.33661478757858276, -4.701767444610596], + [-3.65033221244812, -3.6404106616973877], + [0.12580764293670654, 11.571335792541504], + [-4.508045196533203, 5.941307067871094], + [8.076531410217285, -2.1288411617279053], + [-2.3359713554382324, 2.3702502250671387], + [3.008836030960083, -5.631225109100342], + [-3.916837215423584, -1.5642237663269043], + [3.4566287994384766, -2.1844265460968018], + [3.8482158184051514, -3.5214948654174805], + [-4.312519550323486, -6.453091144561768], + [-3.505781888961792, -5.481934547424316], + [3.7554585933685303, 1.9696458578109741], + [-5.699731826782227, 6.486265659332275], + [-2.5295326709747314, 2.1465229988098145], + [0.3791351020336151, 0.5006197094917297], + [-3.2892510890960693, -5.038010597229004], + [-1.8177809715270996, -4.562405586242676], + [3.466275453567505, -5.594649791717529], + [-3.739283800125122, -3.2441420555114746], + [-6.348252773284912, 7.939861297607422], + [2.1522457599639893, -0.8115726709365845], + [7.504098415374756, -1.7646030187606812], + [0.22053921222686768, 11.04800033569336], + [10.116765975952148, -2.5210516452789307], + [-4.153225421905518, 6.280521869659424], + [-1.4057207107543945, 1.5901445150375366], + [-0.030864350497722626, -1.546755075454712], + [0.4832930564880371, 11.690620422363281], + [-6.628213405609131, 0.42729854583740234], + [3.687926769256592, -4.239143371582031], + [-7.379276752471924, 8.642138481140137], + [2.6233866214752197, -9.049535751342773], + [8.075627326965332, -2.2446091175079346], + [3.0167486667633057, -4.225768089294434], + [3.3194923400878906, -3.768017053604126], + [2.2096240520477295, -8.504961013793945], + [-2.3641302585601807, -1.8274000883102417], + [8.161266326904297, -2.2568347454071045], + [3.3298161029815674, -8.112238883972168], + [-3.088881015777588, -1.3388441801071167], + [-2.084510564804077, -1.4372364282608032], + [1.3199806213378906, 4.507497310638428], + [-4.047353744506836, 0.7829633951187134], + [-4.879775524139404, 4.780938148498535], + [5.792293071746826, -2.587594747543335], + [3.5336833000183105, -3.240732431411743], + [0.010066024959087372, 9.658916473388672], + [-5.666323661804199, 6.292834758758545], + [-4.8891825675964355, 4.886779308319092], + [-5.488542079925537, 5.374999523162842], + [11.402626991271973, -2.608538866043091], + [9.740492820739746, -2.43334698677063], + [-6.488950252532959, -0.4652402400970459], + [4.575632572174072, -3.902005672454834], + [-4.5556640625, -3.029709577560425], + [-2.034827470779419, -4.872986793518066], + [5.025676250457764, -4.646000862121582], + [0.3788391649723053, -1.2031983137130737], + [7.874471187591553, 9.3250732421875], + [-2.4384961128234863, 0.7058541178703308], + [-3.6774866580963135, -0.7770914435386658], + [5.738259792327881, -1.9847999811172485], + [-5.696661949157715, -3.968548536300659], + [9.032880783081055, -2.3300132751464844], + [-6.6197686195373535, 6.919960975646973], + [0.8124570846557617, -0.47456997632980347], + [0.12448620051145554, 11.921257019042969], + [5.736845016479492, 7.1735639572143555], + [0.7807508111000061, -0.7796546220779419], + [9.094786643981934, -2.378580093383789], + [1.366756558418274, -6.8483710289001465], + [3.5418593883514404, 6.471147537231445], + [6.722195148468018, -1.5518981218338013], + [1.975147008895874, 4.51297664642334], + [-6.404438495635986, -0.7115123271942139], + [2.3317294120788574, 4.6358866691589355], + [-6.687414169311523, 4.723812580108643], + [3.015981435775757, -8.202457427978516], + [-4.073019027709961, 6.003516674041748], + [-3.4536523818969727, 7.381333351135254], + [-7.131052494049072, 8.230178833007812], + [5.839959621429443, 8.009860038757324], + [1.5101711750030518, -6.459818363189697], + [7.3978352546691895, -2.0519025325775146], + [6.207440376281738, 7.870110034942627], + [1.2147951126098633, 5.313139915466309], + [6.0115647315979, 7.997984886169434], + [-8.463891983032227, -0.1642613410949707], + [-4.001494884490967, -6.244880676269531], + [-5.374949932098389, 6.04819917678833], + [8.039100646972656, -2.2109572887420654], + [-5.202871322631836, -3.6427438259124756], + [10.594320297241211, -2.373365640640259], + [6.891519546508789, -1.5920332670211792], + [8.243674278259277, -2.730943441390991], + [-0.00013286620378494263, 11.974502563476562], + [1.8501040935516357, -6.938318252563477], + [4.613903522491455, -0.8785905838012695], + [0.22360652685165405, 11.10856819152832], + [0.12051712721586227, 10.660249710083008], + [7.299996852874756, -1.7168115377426147], + [2.112187385559082, 3.7965497970581055], + [-1.652845025062561, 1.9343491792678833], + [-4.337582111358643, 4.44096565246582], + [2.1156928539276123, 0.5468775033950806], + [-3.7067477703094482, -4.244907379150391], + [-4.869920253753662, 5.5478196144104], + [-4.427464008331299, 3.273097276687622], + [9.992857933044434, -2.373474359512329], + [-4.843649387359619, 3.7558798789978027], + [-0.8272216320037842, -2.968515157699585], + [0.27296704053878784, 11.956671714782715], + [3.780651569366455, -2.694117546081543], + [3.3924787044525146, 1.5718533992767334], + [4.1646575927734375, 6.029375076293945], + [1.026785135269165, 1.0649406909942627], + [-6.149686336517334, 6.2036333084106445], + [-7.796782970428467, 0.0448833666741848], + [4.601912021636963, -6.246742248535156], + [7.192661762237549, 8.674216270446777], + [7.6444597244262695, -1.8721445798873901], + [6.822606086730957, -1.5526906251907349], + [-2.563993215560913, -5.217265605926514], + [3.6685783863067627, -4.402161598205566], + [-0.0322418287396431, 9.631389617919922], + [2.3936715126037598, -3.3470797538757324], + [10.616128921508789, -2.4559006690979004], + [0.6589500308036804, 11.289901733398438], + [2.2871010303497314, 0.20988568663597107], + [2.2558400630950928, -7.886758804321289], + [-4.676434516906738, 6.534643173217773], + [6.362368106842041, -4.294817924499512], + [-3.3542165756225586, -0.16806375980377197], + [-2.5404040813446045, 2.82230281829834], + [1.3830785751342773, 0.664137601852417], + [10.339780807495117, -2.3632915019989014], + [-2.5316455364227295, 1.7575045824050903], + [-5.35475492477417, -0.45659512281417847], + [3.032879114151001, -8.988691329956055], + [-3.6787097454071045, 5.910569190979004], + [3.0722320079803467, 0.9056078195571899], + [-6.945615291595459, 8.00786304473877], + [1.6058127880096436, 5.295185089111328], + [-7.549312591552734, 1.2005666494369507], + [-2.04561185836792, 2.0826761722564697], + [7.908815860748291, -2.433612585067749], + [8.734845161437988, -2.533076524734497], + [6.213274955749512, -1.23202383518219], + [2.1287448406219482, -3.549281597137451], + [0.09461896866559982, 12.342241287231445], + [-4.6703715324401855, 4.959539413452148], + [2.962681531906128, -8.242698669433594], + [5.0587992668151855, -4.684328079223633], + [3.3752524852752686, -6.095136642456055], + [0.20982319116592407, 10.451236724853516], + [-4.555717468261719, -3.5324110984802246], + [-1.2028379440307617, 1.5632351636886597], + [8.584437370300293, -2.2814290523529053], + [1.3487869501113892, 0.8178295493125916], + [-2.9356613159179688, 5.51023006439209], + [10.345528602600098, -2.570584297180176], + [-3.5878233909606934, 3.88688588142395], + [-4.504836559295654, 5.534165382385254], + [-2.068732500076294, 2.282785654067993], + [6.177389144897461, -1.1569401025772095], + [-5.649929523468018, -3.4685251712799072], + [0.22028034925460815, 10.958471298217773], + [2.477083444595337, -7.750302314758301], + [1.5564615726470947, -7.8194169998168945], + [2.3150360584259033, 3.770512104034424], + [2.194171667098999, -6.587438106536865], + [9.346404075622559, -2.432945966720581], + [6.276031017303467, 7.863427639007568], + [-2.081829071044922, 2.389381170272827], + [-2.212400436401367, 1.758194088935852], + [8.33770751953125, -2.3345954418182373], + [-1.4261040687561035, -1.3831340074539185], + [2.583832025527954, -3.726463556289673], + [-6.921802997589111, -0.22070670127868652], + [-5.3911333084106445, -1.6701525449752808], + [1.855249047279358, -0.11876873672008514], + [-0.11464894562959671, 9.875297546386719], + [-3.9705312252044678, -5.3926897048950195], + [0.16968989372253418, 10.590590476989746], + [-2.4763166904449463, 2.8201510906219482], + [7.674077033996582, -1.9133511781692505], + [-2.968958616256714, 1.6041206121444702], + [0.04675000160932541, 12.246374130249023], + [6.811522960662842, -1.3805116415023804], + [-0.4976629614830017, 0.9800525903701782], + [0.14855307340621948, 10.597481727600098], + [-5.0828328132629395, -2.6753857135772705], + [3.3528735637664795, 5.4015703201293945], + [-5.097878932952881, -0.19177162647247314], + [4.152851581573486, 7.026886463165283], + [6.372410297393799, 8.096195220947266], + [-6.693436622619629, 7.910723686218262], + [0.7930768728256226, -6.55354118347168], + [3.3703062534332275, 1.2764333486557007], + [5.856201648712158, -1.4012364149093628], + [6.493070602416992, -1.411991000175476], + [6.80734395980835, 8.275790214538574], + [7.733959197998047, -2.3687405586242676], + [3.0196666717529297, -6.999354362487793], + [-0.09152955561876297, 13.558553695678711], + [3.5843698978424072, -5.172290802001953], + [10.517708778381348, -2.5184237957000732], + [1.3313815593719482, 1.5087302923202515], + [6.4245734214782715, -1.402026891708374], + [2.599010944366455, 1.048427700996399], + [5.5639238357543945, -3.07200288772583], + [2.2852532863616943, 6.750942230224609], + [9.533946990966797, -2.425395965576172], + [-6.4190287590026855, -0.4190174341201782], + [-2.417548179626465, 2.24876070022583], + [-6.666417598724365, 7.502404689788818], + [10.245306015014648, -2.580920696258545], + [3.4566800594329834, -6.40754508972168], + [-6.638657093048096, 6.510168075561523], + [3.0367982387542725, 5.393428802490234], + [-1.1425687074661255, -3.5650479793548584], + [2.6968939304351807, 3.0298283100128174], + [1.7683899402618408, -6.452059745788574], + [-2.469290018081665, 2.211590528488159], + [2.8636152744293213, -6.748499870300293], + [-4.297752857208252, -0.4544936418533325], + [8.880853652954102, -2.2870733737945557], + [4.43441915512085, 1.892356514930725], + [-4.188736438751221, 3.9526174068450928], + [-4.511901378631592, -6.733460903167725], + [0.054849736392498016, 9.472423553466797], + [5.0660223960876465, 7.20599365234375], + [-6.696253299713135, 6.699209213256836], + [-4.970038890838623, -1.3069204092025757], + [-4.774345397949219, -6.107392311096191], + [6.926687240600586, -5.121006488800049], + [9.148011207580566, -2.353919267654419], + [5.827406406402588, 7.332176685333252], + [-3.826589822769165, -1.702934980392456], + [0.18233901262283325, 12.619192123413086], + [4.487574577331543, -3.6236844062805176], + [-5.563286781311035, -0.05032635107636452], + [0.2670024633407593, 8.518683433532715], + [-3.685356855392456, 5.018705368041992], + [-4.331424236297607, -7.213259696960449], + [-5.570186614990234, 5.103249549865723], + [-3.631157159805298, -5.873257637023926], + [0.7374438047409058, -1.0491852760314941], + [0.2445489764213562, 11.395259857177734], + [-2.174262285232544, -1.430095911026001], + [-2.233902931213379, 2.390301465988159], + [-3.390333890914917, -4.498818397521973], + [2.4870221614837646, -8.230037689208984], + [-0.04622966796159744, 9.176946640014648], + [-4.334791660308838, -6.9612627029418945], + [4.184394359588623, -2.6331605911254883], + [-3.383598804473877, 3.7054355144500732], + [2.1761362552642822, 4.5330305099487305], + [5.124138832092285, -4.793234825134277], + [-2.4821245670318604, 2.1420650482177734], + [4.350622653961182, 6.651206016540527], + [0.18654686212539673, 10.740522384643555], + [5.9922966957092285, 7.899463653564453], + [5.4669928550720215, -1.2812687158584595], + [2.6356394290924072, -9.27241325378418], + [3.3685131072998047, -4.184422492980957], + [0.24604004621505737, 11.533750534057617], + [2.853421926498413, -9.16247272491455], + [0.10434161871671677, 12.107510566711426], + [-6.077944278717041, 4.474310874938965], + [6.597286224365234, 8.7094087600708], + [1.162648320198059, -6.7514729499816895], + [2.470562696456909, 4.2251482009887695], + [1.2792227268218994, -6.757069110870361], + [2.2464892864227295, 4.879778861999512], + [2.197230339050293, 1.3836431503295898], + [0.8761367201805115, -0.059680525213479996], + [-0.044382400810718536, 9.268651962280273], + [-3.1493985652923584, -2.4421842098236084], + [10.373854637145996, -2.5264079570770264], + [1.0110700130462646, 3.37973690032959], + [3.4587395191192627, 0.8172149658203125], + [-4.014932632446289, -5.8612060546875], + [-2.0070152282714844, 2.2371714115142822], + [6.198019504547119, -1.304988980293274], + [2.2584164142608643, -7.477926254272461], + [0.20040684938430786, 10.539170265197754], + [0.017025046050548553, 11.582887649536133], + [3.4956891536712646, 5.529289245605469], + [4.918363094329834, -2.035895347595215], + [-2.0852162837982178, 2.5010979175567627], + [-7.215713977813721, 0.46153008937835693], + [0.20936965942382812, 10.868494033813477], + [0.13886046409606934, 9.670339584350586], + [3.5900466442108154, -4.025667190551758], + [2.946040630340576, -3.9578003883361816], + [-0.008132047951221466, 9.421489715576172], + [4.2385125160217285, -3.9059667587280273], + [-2.351194143295288, 2.5916006565093994], + [4.6880059242248535, -1.57062566280365], + [-5.058060646057129, -1.5069886445999146], + [-2.3359551429748535, 2.4202687740325928], + [-3.7247812747955322, -2.7216227054595947], + [0.18652576208114624, 10.903732299804688], + [-2.620619535446167, 1.8932018280029297], + [1.6423481702804565, 4.61866569519043], + [3.405526638031006, -4.779231071472168], + [-4.651256084442139, 3.460319995880127], + [0.14509916305541992, 9.755718231201172], + [-2.4666860103607178, 2.206211805343628], + [2.3828701972961426, 6.527789115905762], + [3.8860538005828857, -5.031073570251465], + [7.361528396606445, -2.557990074157715], + [8.57812786102295, -2.2670528888702393], + [4.927064418792725, -4.854504108428955], + [-3.912048101425171, -2.0467352867126465], + [2.8513424396514893, -8.068624496459961], + [3.1776764392852783, 4.838052749633789], + [2.6482059955596924, -4.629424095153809], + [2.6385421752929688, -7.437451362609863], + [-5.039425373077393, -5.079773426055908], + [3.251216411590576, -8.88170051574707], + [3.229372501373291, -5.686282157897949], + [2.554810047149658, 0.42381495237350464], + [0.02716105431318283, 9.616697311401367], + [0.2338770031929016, 11.220855712890625], + [4.60050106048584, -4.586102485656738], + [9.952932357788086, -2.4826791286468506], + [-2.2084243297576904, 2.643918752670288], + [-0.5360800623893738, -1.569151759147644], + [9.78080940246582, -2.4092977046966553], + [-4.060360908508301, 4.802695274353027], + [4.293801784515381, 1.4984833002090454], + [-1.4636045694351196, 1.893534541130066], + [10.384812355041504, -2.4689581394195557], + [2.570267915725708, 5.0867133140563965], + [-4.860257625579834, -7.015625953674316], + [-2.3359389305114746, 1.883192539215088], + [5.047463893890381, 6.420473098754883], + [-3.912437677383423, 3.6244001388549805], + [2.920616626739502, -4.072693824768066], + [3.1759140491485596, 0.6687783002853394], + [5.115528583526611, -4.756251335144043], + [-2.411936044692993, 2.8665497303009033], + [-0.12255672365427017, -0.49705368280410767], + [3.954674005508423, -5.968536376953125], + [-3.7176380157470703, 5.338553428649902], + [-1.4159233570098877, 1.7272393703460693], + [-2.5866966247558594, 2.1186649799346924], + [2.9734513759613037, -4.10167932510376], + [4.299912452697754, 7.108992576599121], + [-3.971827268600464, -4.534992218017578], + [2.3888816833496094, 2.8452541828155518], + [1.930863857269287, 6.549213886260986], + [-1.350908637046814, -2.6030161380767822], + [-3.4722015857696533, 5.177404403686523], + [1.487297534942627, -7.431851863861084], + [2.412307024002075, 0.0426521860063076], + [3.3648321628570557, -8.011358261108398], + [2.769792318344116, 4.096980094909668], + [-4.489230632781982, -3.9788854122161865], + [5.9604010581970215, 7.400921821594238], + [8.703845024108887, -2.3813765048980713], + [3.0781400203704834, 5.696651458740234], + [-1.7363158464431763, -4.258615493774414], + [-2.4961845874786377, 1.7157963514328003], + [4.124423980712891, 5.505710124969482], + [1.1186466217041016, -0.002840910106897354], + [-5.343662738800049, -6.4206647872924805], + [6.65249490737915, 8.054506301879883], + [-3.5500261783599854, -0.555748701095581], + [-4.007065773010254, -5.882543087005615], + [6.378433704376221, -1.530474305152893], + [-4.249109745025635, -0.4616386890411377], + [-4.646105766296387, 5.411009788513184], + [-2.9836342334747314, -2.184375762939453], + [-4.356181621551514, -7.412465572357178], + [2.5922558307647705, -3.736445188522339], + [4.2814555168151855, -7.191310405731201], + [7.71683406829834, -2.033137559890747], + [-5.040297985076904, -6.639121055603027], + [0.3449207842350006, -0.9253977537155151], + [-4.2859697341918945, 4.286530494689941], + [-4.836545944213867, 8.182474136352539], + [-2.3165266513824463, 2.017765760421753], + [3.24944806098938, -4.537996768951416], + [7.147956848144531, 8.55836296081543], + [0.020818762481212616, 12.035740852355957], + [0.20435220003128052, 10.668216705322266], + [-3.7165496349334717, -3.150984525680542], + [3.7089970111846924, -7.344467639923096], + [2.673795461654663, -7.067957401275635], + [2.7581796646118164, -3.8536367416381836], + [3.268843173980713, 1.0228078365325928], + [-2.4946630001068115, 1.6460113525390625], + [0.5646364092826843, -1.0945595502853394], + [7.665448188781738, -2.0338854789733887], + [-4.737756729125977, 8.105229377746582], + [0.2245681881904602, 6.448392868041992], + [3.721449613571167, -3.2064859867095947], + [-3.6110355854034424, -4.059566020965576], + [-5.60944128036499, -2.2305386066436768], + [1.5364450216293335, -0.08767449855804443], + [-4.352186679840088, -5.362545967102051], + [1.628913164138794, 6.2717437744140625], + [3.46277117729187, 5.878073692321777], + [2.9288971424102783, -4.038428783416748], + [0.0169939324259758, 12.709892272949219], + [-0.030532248318195343, 10.050210952758789], + [8.098736763000488, -2.2798655033111572], + [-2.734520196914673, -3.0405240058898926], + [3.6381118297576904, 1.9085198640823364], + [1.005556344985962, 4.125029563903809], + [10.384654998779297, -2.452836513519287], + [1.9067788124084473, 4.606511116027832], + [3.172656297683716, -4.209911823272705], + [8.02379322052002, -2.64528489112854], + [-0.4046858549118042, 3.935713291168213], + [7.343020915985107, -1.865928053855896], + [-2.507910966873169, 1.2687500715255737], + [-5.719197750091553, 0.3306146264076233], + [-1.7437849044799805, 1.0331454277038574], + [2.6934382915496826, -5.894843101501465], + [-3.439190626144409, 3.713303804397583], + [3.4705545902252197, -5.463271141052246], + [0.03809528797864914, 13.466861724853516], + [0.3488994538784027, -1.256520390510559], + [-4.996696949005127, -0.7762304544448853], + [-5.277003765106201, -6.347928524017334], + [-5.003928184509277, -0.49903273582458496], + [-4.661898136138916, -7.372840881347656], + [-2.2816877365112305, 2.3782739639282227], + [-3.9160242080688477, -6.213620185852051], + [2.9817798137664795, -4.230661392211914], + [3.392428159713745, 4.9267120361328125], + [5.500127792358398, 7.035854339599609], + [5.414302825927734, -0.27897390723228455], + [-3.6816108226776123, -5.919732093811035], + [-4.259547233581543, -3.6266164779663086], + [-2.2748146057128906, 2.7879161834716797], + [8.440974235534668, -2.268611192703247], + [-2.175715446472168, -2.03904128074646], + [-5.233832836151123, -2.8662731647491455], + [6.375351905822754, 8.01411247253418], + [-5.02493143081665, 0.278964638710022], + [-4.598084926605225, -1.0060585737228394], + [3.059375524520874, -8.506834030151367], + [0.25662463903427124, 10.214277267456055], + [1.2735633850097656, 2.857754945755005], + [-5.412694454193115, 3.8152079582214355], + [9.093145370483398, -2.388279676437378], + [0.09259908646345139, 10.059967041015625], + [-1.884830355644226, 0.962299108505249], + [3.6386632919311523, -4.358102321624756], + [2.8146941661834717, -4.0960798263549805], + [3.877761125564575, -3.641636371612549], + [-4.536440372467041, -2.2527310848236084], + [4.054790019989014, -3.4444334506988525], + [2.3055648803710938, -8.590500831604004], + [-2.2983014583587646, 2.5710959434509277], + [-2.358341932296753, -3.2898619174957275], + [0.5608757138252258, 0.5681919455528259], + [-5.179719924926758, -1.9828897714614868], + [0.009716682136058807, 9.236703872680664], + [-1.4502285718917847, 1.3660871982574463], + [2.631023645401001, -9.022481918334961], + [-5.517034530639648, -1.9530798196792603], + [-2.901244878768921, 2.4359941482543945], + [3.16051983833313, -3.2253224849700928], + [-4.429018974304199, -5.17880392074585], + [3.6291418075561523, -7.135991096496582], + [2.8955271244049072, -3.9524333477020264], + [0.20260018110275269, 11.499335289001465], + [7.738858222961426, -2.083562135696411], + [-2.239884614944458, 0.9034370183944702], + [5.538454055786133, -6.426000595092773], + [-3.658555269241333, -0.5772171020507812], + [-2.625124454498291, 1.97783625125885], + [4.369900226593018, -3.6649179458618164], + [3.724745750427246, 1.7727348804473877], + [-2.7796287536621094, 0.62287837266922], + [2.469351053237915, 0.8002078533172607], + [9.012772560119629, -2.2631494998931885], + [3.450547218322754, -9.132589340209961], + [7.075843811035156, 8.454051971435547], + [10.045106887817383, -2.363992929458618], + [-2.6899614334106445, -4.6356635093688965], + [-3.286163568496704, -5.676644325256348], + [3.922905206680298, -3.0988352298736572], + [4.034598350524902, 1.5323208570480347], + [0.151961088180542, 10.721723556518555], + [5.604285717010498, -4.815325736999512], + [9.30597972869873, -2.36980938911438], + [0.6749696731567383, -5.955258369445801], + [-1.4127192497253418, 0.8386867046356201], + [1.8712238073349, 1.3036155700683594], + [2.824547052383423, -6.751860618591309], + [9.192232131958008, -2.3579206466674805], + [-5.513173580169678, -2.317979097366333], + [-4.753676891326904, -7.0751953125], + [0.18847697973251343, 10.285724639892578], + [-0.710978627204895, 5.030511856079102], + [3.7775282859802246, -3.725576400756836], + [-6.259435176849365, 6.124020576477051], + [-2.108215808868408, 2.500552177429199], + [-0.23764997720718384, 10.203645706176758], + [-3.889451742172241, 5.726231575012207], + [9.472548484802246, -2.410234212875366], + [4.051351070404053, -2.3006303310394287], + [-0.2772905230522156, -1.5019527673721313], + [-1.5498802661895752, -3.797747850418091], + [-2.7124345302581787, 2.2441134452819824], + [-1.30637526512146, 0.08458799123764038], + [5.332851409912109, -0.887479841709137], + [0.2910160422325134, 11.876137733459473], + [2.2001335620880127, -3.3200795650482178], + [2.301848888397217, 3.702418565750122], + [-3.2222466468811035, 6.609506607055664], + [1.9086320400238037, -8.480945587158203], + [1.9972779750823975, 3.148361921310425], + [-2.218214273452759, -3.4401960372924805], + [5.141870975494385, -1.200663685798645], + [3.1630704402923584, -6.266315937042236], + [0.043899647891521454, 9.566740036010742], + [0.5310285091400146, 11.163246154785156], + [1.8938219547271729, 6.4223127365112305], + [2.3705947399139404, 2.4816701412200928], + [-3.7777748107910156, -5.146669387817383], + [6.389265537261963, 7.755917549133301], + [6.333929538726807, -1.2770415544509888], + [0.3397566080093384, 10.938186645507812], + [2.8995516300201416, -3.984788179397583], + [-4.393015384674072, -6.671619415283203], + [0.2346974015235901, 11.336699485778809], + [3.988849401473999, -2.9882900714874268], + [-2.1036925315856934, 2.4295737743377686], + [-2.615614652633667, 1.0144184827804565], + [3.1046180725097656, -4.399086952209473], + [3.586690902709961, 6.621160507202148], + [-4.687631130218506, -1.8940602540969849], + [-2.1794791221618652, -3.237943410873413], + [1.8764123916625977, 4.308354377746582], + [4.156313419342041, -3.726780652999878], + [9.371581077575684, -2.337127923965454], + [-3.1682472229003906, -4.848392486572266], + [-6.6315202713012695, -1.302887201309204], + [0.6004605889320374, 1.0985051393508911], + [-5.338924884796143, -2.8484127521514893], + [1.4170763492584229, -0.14173415303230286], + [-0.031367845833301544, 12.786888122558594], + [8.064064979553223, 9.449705123901367], + [2.350057363510132, 6.1043782234191895], + [8.887967109680176, -2.3836982250213623], + [-4.134462356567383, -6.24586820602417], + [0.05032198876142502, 9.509922981262207], + [-5.277659893035889, -3.5145013332366943], + [2.6778602600097656, -8.59632682800293], + [-3.9302256107330322, -5.716253757476807], + [6.96117639541626, -3.116168737411499], + [0.4572891592979431, -5.159440994262695], + [-6.3888726234436035, 7.560934066772461], + [-5.961275577545166, 0.12879937887191772], + [3.451594114303589, -3.7091262340545654], + [8.986224174499512, -2.3919386863708496], + [-1.702185034751892, 2.2617039680480957], + [2.367011785507202, -8.013530731201172], + [-2.217432737350464, 2.651061773300171], + [-0.006856746971607208, 12.719736099243164], + [9.428423881530762, -2.4927735328674316], + [-0.009175844490528107, 12.045598030090332], + [-2.5016260147094727, 1.2272459268569946], + [3.163999319076538, -8.282332420349121], + [1.818489670753479, 0.6558860540390015], + [3.0087270736694336, 1.618970274925232], + [5.57643461227417, -5.084817409515381], + [-4.188632965087891, 4.207671165466309], + [3.762225866317749, -3.397359609603882], + [2.780802011489868, -7.129761695861816], + [2.8520426750183105, -2.2259626388549805], + [3.2555716037750244, -4.135222434997559], + [10.577263832092285, -2.511904001235962], + [-4.516749858856201, -6.5992913246154785], + [7.912785053253174, -2.367563486099243], + [-5.548844814300537, 5.684605598449707], + [2.720764398574829, -6.711681365966797], + [-2.2283425331115723, -3.165170431137085], + [-2.9952666759490967, -3.9246294498443604], + [11.293591499328613, -2.553504228591919], + [-3.8603804111480713, 4.270569801330566], + [2.9254539012908936, 0.7434148788452148], + [5.241756439208984, 2.221712827682495], + [-0.6160346269607544, 1.0134319067001343], + [-2.0308938026428223, 2.52714204788208], + [-4.672669887542725, -7.196196556091309], + [-0.012814410030841827, 9.66802978515625], + [2.536973714828491, -2.9812796115875244], + [6.372249126434326, -1.560585618019104], + [-2.531670331954956, 1.992928385734558], + [2.5661354064941406, -7.114984512329102], + [-1.956474781036377, 1.4482139348983765], + [-2.868988513946533, 1.8021061420440674], + [2.5230562686920166, -8.944698333740234], + [-0.3685639798641205, 5.311758995056152], + [-0.324148952960968, -1.5584717988967896], + [-2.09132719039917, -0.3571937084197998], + [3.6119799613952637, 5.013952732086182], + [7.5794997215271, -3.076777696609497], + [-0.3594242334365845, 0.9727393388748169], + [-2.3204915523529053, -4.6858625411987305], + [-3.6003572940826416, -5.5337982177734375], + [3.5022060871124268, -3.2574894428253174], + [-0.07714278250932693, 9.24589729309082], + [2.3084332942962646, -4.936148643493652], + [-3.2319719791412354, 4.859871864318848], + [0.5915104746818542, 0.6416661739349365], + [2.00119948387146, 1.9932938814163208], + [-3.8213398456573486, -2.2945663928985596], + [0.19509929418563843, 10.932171821594238], + [2.5813028812408447, 5.808705806732178], + [2.628805160522461, -9.736172676086426], + [7.062801837921143, -2.2474491596221924], + [-4.4872565269470215, -1.8407163619995117], + [-2.160008668899536, 2.38319730758667], + [-1.0085538625717163, -0.7148252129554749], + [-1.8731564283370972, 2.010850429534912], + [2.5417184829711914, -3.37105131149292], + [-1.3710952997207642, 2.057062864303589], + [-4.717081546783447, -6.783921241760254], + [1.1942474842071533, 0.05880412086844444], + [7.835513114929199, -2.057614803314209], + [-2.3681139945983887, 2.281312942504883], + [-5.057326316833496, 4.292094707489014], + [-5.688477993011475, -2.3981211185455322], + [3.312371015548706, -8.832962036132812], + [-1.5209558010101318, 1.298179268836975], + [-3.483441114425659, 6.119905471801758], + [-2.900012493133545, 6.111825942993164], + [3.6471261978149414, -7.871251106262207], + [-3.1016180515289307, -5.313265323638916], + [3.0781798362731934, -4.345278739929199], + [1.4767875671386719, 5.886763095855713], + [-5.403793811798096, 4.941398620605469], + [-2.554752826690674, 1.5523182153701782], + [1.846726417541504, -7.686596870422363], + [0.9975724816322327, 10.480816841125488], + [-2.9798152446746826, 3.140498638153076], + [8.400262832641602, -2.5453617572784424], + [-1.2309072017669678, -2.8445448875427246], + [-6.637049198150635, 7.134176254272461], + [-2.2015044689178467, 2.3192756175994873], + [8.308372497558594, -2.4618122577667236], + [3.8569962978363037, 1.800658941268921], + [2.9165167808532715, -4.1898417472839355], + [0.24097692966461182, 11.23533821105957], + [1.9603712558746338, -0.33014604449272156], + [1.8708698749542236, 3.740509033203125], + [3.6923158168792725, 1.0868548154830933], + [-3.1593873500823975, 3.0689876079559326], + [2.7595114707946777, 5.582919597625732], + [2.5127336978912354, 5.011836051940918], + [-0.6614406704902649, -1.7183719873428345], + [-3.61871075630188, -3.7480108737945557], + [-4.160667419433594, -4.415440559387207], + [-3.023202657699585, 0.9312718510627747], + [-2.1028120517730713, 2.8632314205169678], + [2.54840087890625, 4.185142993927002], + [-2.666435480117798, 1.9058829545974731], + [4.690877437591553, -5.155404090881348], + [3.2364001274108887, -3.422395944595337], + [3.0180466175079346, 6.901708126068115], + [-2.3024470806121826, -0.31963372230529785], + [0.1303592324256897, 11.730108261108398], + [3.224510431289673, -3.9385669231414795], + [4.6489152908325195, -4.3039140701293945], + [5.187068462371826, 6.393388748168945], + [5.518388748168945, -1.2431440353393555], + [2.1165788173675537, 3.8486833572387695], + [0.006574086844921112, 9.445417404174805], + [6.5985941886901855, -1.4928689002990723], + [-7.690978527069092, -0.022929910570383072], + [2.0785715579986572, -4.524858474731445], + [-0.006052561104297638, 12.759727478027344], + [1.299032211303711, -6.0207743644714355], + [-6.948099613189697, 0.019627805799245834], + [1.0445924997329712, -0.12487217783927917], + [0.42294174432754517, -1.0151665210723877], + [3.546339988708496, -4.469542503356934], + [-0.05007728189229965, -1.6189590692520142], + [0.11400144547224045, 11.457161903381348], + [5.087643146514893, -1.1871718168258667], + [-0.48519182205200195, -1.2555140256881714], + [-1.3726571798324585, -3.8954808712005615], + [3.83345627784729, 1.7682005167007446], + [0.06918270140886307, -1.4973100423812866], + [6.637908458709717, -1.4786382913589478], + [1.5542773008346558, 0.47367966175079346], + [-1.1522961854934692, 0.7117182016372681], + [-2.2453954219818115, 1.963488221168518], + [6.166928768157959, 8.079296112060547], + [7.957780361175537, -2.288262367248535], + [3.8479888439178467, -2.4092063903808594], + [-5.376786231994629, 3.819493532180786], + [8.118409156799316, -2.874795913696289], + [4.282873153686523, -3.8545055389404297], + [3.7508881092071533, -3.5767061710357666], + [-1.5479490756988525, 2.362130880355835], + [-0.8922617435455322, -3.434262275695801], + [3.5274291038513184, -8.177773475646973], + [3.5935776233673096, 1.1351984739303589], + [4.4338531494140625, 7.029263496398926], + [-0.08513808995485306, -3.9859654903411865], + [-1.56532621383667, 1.7239888906478882], + [3.676257848739624, -3.704369306564331], + [2.406515598297119, -9.078974723815918], + [6.4923319816589355, 8.32986068725586], + [-6.8444743156433105, 7.989376068115234], + [-4.4916510581970215, 7.184025764465332], + [7.877257823944092, -2.4729206562042236], + [-1.7265511751174927, 1.8660463094711304], + [-2.2796196937561035, 2.1382381916046143], + [1.4119555950164795, -0.6026074886322021], + [-3.2185423374176025, 5.88744592666626], + [0.770226776599884, 6.873363018035889], + [-2.2568206787109375, 2.1410677433013916], + [3.636000633239746, -3.4485085010528564], + [3.0303947925567627, -2.670626401901245], + [1.9546003341674805, -7.643218994140625], + [4.300960063934326, 6.727581977844238], + [9.363649368286133, -2.3843822479248047], + [4.785396099090576, 7.001877784729004], + [6.7289347648620605, 8.125843048095703], + [9.682860374450684, -2.6787383556365967], + [3.4404213428497314, -8.0286226272583], + [-3.749357223510742, -3.287618398666382], + [-2.2938621044158936, 6.455332279205322], + [-0.9564291834831238, -0.13203608989715576], + [-2.8434054851531982, -3.945873260498047], + [3.5080552101135254, -8.255834579467773], + [-3.744483709335327, 4.222311973571777], + [-0.028042025864124298, 14.075143814086914], + [2.67575740814209, -5.073763370513916], + [0.07688503712415695, 12.055021286010742], + [3.530103921890259, -3.1805105209350586], + [0.11783289164304733, 11.385726928710938], + [2.858013391494751, -4.250823497772217], + [6.1859588623046875, 7.819408416748047], + [-3.517771005630493, -1.3293229341506958], + [-4.367573261260986, -6.735381126403809], + [-2.6363234519958496, 5.817631721496582], + [-6.413280010223389, 7.332990646362305], + [3.0465614795684814, -7.979752540588379], + [2.5168468952178955, -4.042130470275879], + [-3.6737496852874756, -5.976489543914795], + [-4.318700313568115, -6.369481563568115], + [7.667594909667969, -1.9197677373886108], + [0.180092453956604, 10.125764846801758], + [-2.321324110031128, 2.254054546356201], + [1.0740728378295898, -6.006558418273926], + [1.9428596496582031, 4.9469523429870605], + [2.7446529865264893, -3.767535924911499], + [3.3696372509002686, -4.020575046539307], + [-5.343906879425049, -1.32694411277771], + [9.019671440124512, -2.2928757667541504], + [-3.254225969314575, -4.432351112365723], + [3.163257360458374, -3.760331630706787], + [-6.0793914794921875, 8.969064712524414], + [2.386415481567383, -2.7022180557250977], + [-2.820164203643799, 3.7212913036346436], + [6.712230682373047, 8.095216751098633], + [0.1911563277244568, 11.5053129196167], + [0.0545690581202507, 9.785982131958008], + [-2.995856523513794, -0.9193847179412842], + [0.24562054872512817, 11.470121383666992], + [-1.1475882530212402, -3.3442227840423584], + [-2.680837869644165, -2.9792001247406006], + [4.269332408905029, 6.726616859436035], + [6.656090259552002, 8.364660263061523], + [-3.7257325649261475, 5.469681739807129], + [-1.9989997148513794, 1.0921094417572021], + [0.18960541486740112, 10.371746063232422], + [4.783562183380127, 7.332767963409424], + [-0.3941997289657593, -1.3590967655181885], + [-2.3564276695251465, -4.203266143798828], + [9.680705070495605, -2.3800065517425537], + [0.07982682436704636, 10.0394287109375], + [0.2293878197669983, 10.174100875854492], + [0.18529224395751953, 12.100667953491211], + [0.17897003889083862, 11.802617073059082], + [-3.091514825820923, 0.7254111170768738], + [3.0660030841827393, -4.095955848693848], + [2.994110345840454, 1.744078516960144], + [5.594459056854248, -1.2648855447769165], + [1.1020824909210205, 0.9013285636901855], + [4.389824390411377, 6.364803314208984], + [-4.179807186126709, -6.526540756225586], + [-3.5878021717071533, -6.123863697052002], + [1.8113133907318115, -4.4550580978393555], + [6.811472415924072, -5.22463321685791], + [9.055221557617188, -2.3923404216766357], + [-3.1278069019317627, 4.669924736022949], + [0.1691138744354248, 11.438904762268066], + [-2.2100980281829834, 2.1052889823913574], + [-2.5137219429016113, 2.0238285064697266], + [8.257855415344238, -2.238370656967163], + [4.149809837341309, -3.5677201747894287], + [-4.920840740203857, 7.990426063537598], + [-0.009407706558704376, 12.73128890991211], + [5.656123161315918, -1.264699101448059], + [-6.697756290435791, 6.910886764526367], + [2.221411943435669, 5.093326091766357], + [-4.18303918838501, -7.107823371887207], + [1.668881893157959, 3.496995687484741], + [-7.553986549377441, -0.15103542804718018], + [-3.980664014816284, 3.78782057762146], + [-2.9554965496063232, -0.7657161951065063], + [2.856844425201416, -8.650283813476562], + [5.085220813751221, 7.178394317626953], + [-6.88381814956665, -0.6369855403900146], + [-1.5095051527023315, 1.353819727897644], + [-4.326155662536621, 5.600504398345947], + [-2.2237513065338135, -3.83630633354187], + [6.647768020629883, -1.5774697065353394], + [1.3754950761795044, -6.86478328704834], + [0.49522989988327026, -0.9165786504745483], + [7.2041120529174805, 8.579957008361816], + [1.3826615810394287, 5.095251083374023], + [-3.6352336406707764, -0.7177524566650391], + [-7.013849258422852, 8.245372772216797], + [3.578843116760254, -3.4219229221343994], + [9.197117805480957, -2.335371255874634], + [-5.983133792877197, 5.756138324737549], + [1.5041155815124512, 1.7458544969558716], + [5.193635940551758, -6.7701616287231445], + [-7.866772174835205, -0.21293878555297852], + [7.217807769775391, -3.549593448638916], + [-4.898574352264404, -6.554007530212402], + [-4.698461055755615, -6.885489463806152], + [-2.5193986892700195, 1.6153175830841064], + [-4.7524919509887695, -2.518048048019409], + [-4.764289379119873, -2.4451026916503906], + [-5.061595916748047, 6.451389312744141], + [2.979055643081665, -4.217103481292725], + [6.827700138092041, -4.569648742675781], + [-6.747468948364258, -0.4975118041038513], + [-2.9073994159698486, -0.8099846839904785], + [9.633235931396484, -2.392164468765259], + [0.12301116436719894, 9.687524795532227], + [-4.865180492401123, 4.206564426422119], + [0.6824682950973511, -1.7681752443313599], + [-3.721120595932007, -2.2634077072143555], + [-2.4842355251312256, 1.4211177825927734], + [3.577831745147705, -3.267524003982544], + [6.784393787384033, -1.4640339612960815], + [0.02461259812116623, 12.719095230102539], + [0.08005892485380173, 11.570496559143066], + [2.2781386375427246, -3.368849039077759], + [2.058546304702759, 4.635953903198242], + [3.7322869300842285, -8.810663223266602], + [4.135853290557861, -7.458841800689697], + [1.4435008764266968, -6.914338111877441], + [3.121236801147461, -4.621890068054199], + [-4.770915985107422, 3.676811933517456], + [5.9401679039001465, -6.302976608276367], + [4.017971992492676, 1.744003415107727], + [-2.362729787826538, 0.4722173810005188], + [-6.094353199005127, 0.12735694646835327], + [3.660952568054199, -7.4213457107543945], + [7.066833019256592, 8.787354469299316], + [-3.6869657039642334, -5.931824684143066], + [-0.5363063216209412, 0.8433517217636108], + [-1.748214602470398, 2.201537847518921], + [2.3466689586639404, -8.345046997070312], + [-0.02965272217988968, 12.433985710144043], + [3.334221601486206, -4.7191314697265625], + [-4.8837571144104, -5.551707744598389], + [-0.06285350769758224, -1.7213245630264282], + [7.878227710723877, 9.297374725341797], + [-2.387407064437866, 1.9734677076339722], + [-1.9092364311218262, 2.097445249557495], + [-0.04920441657304764, 11.108397483825684], + [2.1218905448913574, 2.2284772396087646], + [4.758979320526123, -3.590496301651001], + [-2.3576176166534424, 1.2155338525772095], + [0.26075291633605957, 11.487418174743652], + [4.0538330078125, 1.626219391822815], + [0.7497365474700928, -0.6756201982498169], + [-0.11160797625780106, 13.620248794555664], + [8.71329116821289, -2.3131625652313232], + [-2.4568686485290527, 1.44890558719635], + [0.06153535097837448, 9.719954490661621], + [0.8266680836677551, -6.573554992675781], + [3.3159682750701904, 4.9301533699035645], + [-2.1295979022979736, 2.263435125350952], + [3.433471918106079, -6.1491498947143555], + [-2.1927058696746826, 2.681948661804199], + [2.651099920272827, -6.610044956207275], + [8.125826835632324, -2.116513967514038], + [2.528181791305542, -3.4500656127929688], + [5.7925333976745605, -0.49408847093582153], + [-1.7123934030532837, -3.6400272846221924], + [-6.907536029815674, 8.061605453491211], + [-1.1454646587371826, -2.840846300125122], + [7.963393688201904, -2.154087781906128], + [2.377270460128784, 1.232185959815979], + [6.7046074867248535, -1.9046725034713745], + [3.962268114089966, -6.145313739776611], + [2.1484122276306152, 5.168191909790039], + [4.434141159057617, -3.756213903427124], + [4.320969581604004, -3.2864387035369873], + [2.150045156478882, 3.6119139194488525], + [0.0056218430399894714, 10.590717315673828], + [2.8839194774627686, -5.0532941818237305], + [3.0809977054595947, -3.9868083000183105], + [6.432040691375732, 7.9921112060546875], + [-5.613428115844727, -2.630302667617798], + [-2.480222463607788, 1.7794814109802246], + [7.782831192016602, -2.5746138095855713], + [-3.6868462562561035, 5.501233100891113], + [1.9843029975891113, -7.930677890777588], + [3.29423451423645, -8.417062759399414], + [2.256960153579712, 1.8922449350357056], + [2.190417528152466, 2.7160942554473877], + [2.190267324447632, -8.484979629516602], + [-2.7995259761810303, -3.3850295543670654], + [-2.5946877002716064, -5.138236045837402], + [-0.9721623063087463, 1.580701470375061], + [1.5657689571380615, -0.2382352203130722], + [3.0392398834228516, -3.322035312652588], + [-4.389859676361084, -1.9624773263931274], + [4.862823009490967, -4.6121368408203125], + [0.04982512444257736, 11.452445030212402], + [-0.04275364428758621, 13.17330265045166], + [3.75443172454834, -3.7992727756500244], + [-4.374530792236328, -6.579680442810059], + [10.293341636657715, -2.4111154079437256], + [-1.2377005815505981, 1.8103090524673462], + [4.039279937744141, 5.618941783905029], + [0.0021608397364616394, 13.1149320602417], + [1.4836890697479248, -6.229681968688965], + [-4.030959606170654, -6.290616989135742], + [-2.0741195678710938, 1.6495314836502075], + [-0.05478174239397049, 13.79814624786377], + [3.0001845359802246, -4.554043769836426], + [1.306672215461731, 9.400472640991211], + [0.13754642009735107, 11.743608474731445], + [-0.0057186558842659, 12.55284309387207], + [3.8080620765686035, -2.0032827854156494], + [-4.638233184814453, -6.977500915527344], + [-2.342036485671997, -3.985621690750122], + [5.753410816192627, 7.841850757598877], + [7.658984661102295, -2.002884864807129], + [4.588607311248779, 6.111480712890625], + [0.2746926546096802, 13.375093460083008], + [-2.29413104057312, 1.9977432489395142], + [1.8790621757507324, 4.455513000488281], + [1.793839693069458, -6.6758856773376465], + [7.77704381942749, -2.5152010917663574], + [-7.083696365356445, -1.9548848867416382], + [2.1631157398223877, -6.948891639709473], + [3.198827028274536, -3.728771448135376], + [-3.9883954524993896, -5.089968681335449], + [-6.4116950035095215, 6.3165998458862305], + [3.5747244358062744, -4.00644063949585], + [9.005332946777344, -2.3380792140960693], + [6.159755706787109, -1.3178867101669312], + [7.0982985496521, -2.4496262073516846], + [3.2929399013519287, 1.2623034715652466], + [0.6769623160362244, -0.7759562134742737], + [6.054011344909668, -1.4805474281311035], + [3.297694206237793, -3.6176493167877197], + [8.803559303283691, -2.4005253314971924], + [-2.2921462059020996, 1.6416020393371582], + [0.22006136178970337, 7.024410724639893], + [0.7358937859535217, -1.0112377405166626], + [-4.146916389465332, -6.733564376831055], + [-6.713926792144775, 0.09648644924163818], + [-3.975672960281372, 4.195329666137695], + [0.13341885805130005, 10.812814712524414], + [3.113556146621704, -5.045879364013672], + [-3.120936155319214, 6.218207359313965], + [6.762699604034424, -4.119945526123047], + [-1.0887901782989502, -1.975314736366272], + [-2.5379045009613037, 1.8998682498931885], + [2.9759066104888916, 1.0001378059387207], + [0.21765047311782837, 10.775671005249023], + [1.8516360521316528, -0.0886019617319107], + [-4.112156867980957, 5.729912757873535], + [-0.08207596093416214, 9.257743835449219], + [-5.391866207122803, -6.58272647857666], + [7.165313243865967, 8.805780410766602], + [5.956532955169678, 7.725430488586426], + [4.3274078369140625, -4.2905683517456055], + [0.19231396913528442, 8.890426635742188], + [-2.55218243598938, -3.3651301860809326], + [-4.739770412445068, -7.307832717895508], + [-2.281231164932251, -2.9453201293945312], + [2.7220282554626465, -3.8928277492523193], + [0.25883394479751587, 11.178421020507812], + [-2.1394550800323486, 3.8064606189727783], + [3.138270616531372, 0.7398729920387268], + [-3.18961763381958, -2.91620135307312], + [-0.4504718780517578, -2.2120554447174072], + [0.12684595584869385, 11.967609405517578], + [-0.014780469238758087, -1.3587079048156738], + [3.0969767570495605, -3.7701940536499023], + [7.6829657554626465, -2.4068968296051025], + [-4.033880710601807, -1.6949447393417358], + [1.2966264486312866, -7.048377990722656], + [-2.2560839653015137, 2.5093817710876465], + [4.788506031036377, 6.593325614929199], + [-2.4955594539642334, 1.7864151000976562], + [6.4144182205200195, 7.984003067016602], + [2.823082447052002, -4.032281398773193], + [3.5619308948516846, -3.4222195148468018], + [-2.1106462478637695, 1.8366583585739136], + [-6.255702495574951, 7.152584552764893], + [7.664173126220703, -2.487645387649536], + [-0.046004243195056915, 13.295478820800781], + [2.8812379837036133, 0.6905916333198547], + [5.8813347816467285, 7.947813034057617], + [-2.8935558795928955, -4.0798659324646], + [8.04003620147705, -2.2678661346435547], + [-3.654489517211914, -3.98330020904541], + [2.436384439468384, 0.9819329977035522], + [-0.9733392596244812, -2.2655797004699707], + [4.176805019378662, -2.975132703781128], + [1.370189905166626, -7.647286415100098], + [0.18892455101013184, 10.421684265136719], + [-0.04379010945558548, 9.304880142211914], + [8.809774398803711, -2.3082473278045654], + [6.467400074005127, -5.798473358154297], + [-1.7549644708633423, 2.324599504470825], + [-4.022677421569824, -3.349682569503784], + [-0.06349921971559525, -1.3686095476150513], + [4.998990058898926, -1.8054730892181396], + [3.050795555114746, 6.2105231285095215], + [-2.8381597995758057, -2.6304056644439697], + [7.061850070953369, -1.8945404291152954], + [-3.0633327960968018, -2.2727205753326416], + [-3.150982141494751, 3.643432855606079], + [0.2585523724555969, 10.921722412109375], + [-3.0944292545318604, -5.200522422790527], + [7.338123321533203, -2.1976442337036133], + [-2.278909921646118, 2.050961494445801], + [-2.5740153789520264, 1.8262604475021362], + [1.9199092388153076, 1.3988122940063477], + [8.420916557312012, -2.2517311573028564], + [0.9602182507514954, -7.151206016540527], + [-0.10607797652482986, -1.8822529315948486], + [3.6760060787200928, -3.2790822982788086], + [-2.6099865436553955, 1.300084114074707], + [8.662519454956055, -2.2188756465911865], + [1.864990472793579, 4.509284496307373], + [-2.7051570415496826, 1.964882254600525], + [3.319103479385376, -4.739438056945801], + [-3.4794652462005615, -3.8604214191436768], + [2.9849958419799805, -6.668686866760254], + [-2.788475275039673, 2.859316825866699], + [8.438467979431152, -2.345376491546631], + [-0.4233326315879822, 0.21611666679382324], + [-2.344536542892456, 2.022876024246216], + [-0.03416068106889725, 12.541000366210938], + [2.226043224334717, -6.595909118652344], + [-4.526087284088135, -6.823099136352539], + [0.07656901329755783, 9.73841667175293], + [2.053881883621216, -2.9290754795074463], + [0.1381133794784546, 9.852779388427734], + [6.636372089385986, 8.134421348571777], + [-4.306860446929932, -6.317170143127441], + [7.572237491607666, -2.6387391090393066], + [-2.223194122314453, 2.430394411087036], + [2.052744150161743, -7.946716785430908], + [-5.259128093719482, 5.10276985168457], + [-1.0532245635986328, -2.68768572807312], + [1.2783164978027344, -0.02359730377793312], + [-8.010573387145996, -0.6415168046951294], + [-4.283519268035889, -6.290294170379639], + [-2.6120071411132812, -4.321972846984863], + [2.3779709339141846, 5.796446800231934], + [6.746582508087158, -5.492246627807617], + [0.20295459032058716, -1.227644681930542], + [-0.03740937262773514, 9.181842803955078], + [-0.007200010120868683, 12.294178009033203], + [-4.8387532234191895, -7.4918060302734375], + [3.0494842529296875, -3.8215432167053223], + [-3.8884546756744385, -4.212055206298828], + [-0.14318180084228516, -1.8282591104507446], + [-4.162686824798584, 6.442014694213867], + [0.607184112071991, -1.150413155555725], + [4.337541103363037, 1.8563568592071533], + [-3.6628429889678955, -1.3553763628005981], + [-5.241566181182861, 4.547025680541992], + [2.1075897216796875, -8.74600887298584], + [-4.158936500549316, -3.7528650760650635], + [1.19480299949646, -5.3428120613098145], + [0.6721436381340027, -0.9787132740020752], + [8.514018058776855, -2.3416974544525146], + [0.008191339671611786, 12.795724868774414], + [4.634059429168701, -1.1465541124343872], + [-2.1412439346313477, 2.6955511569976807], + [1.6320388317108154, 5.637939453125], + [3.1995959281921387, -4.485848426818848], + [-4.468108177185059, -6.782326698303223], + [-4.953464031219482, 5.5396857261657715], + [-2.905256509780884, -5.328640460968018], + [8.142830848693848, -2.4563632011413574], + [2.291832685470581, 5.021845817565918], + [-1.8465747833251953, -3.5312201976776123], + [2.7618463039398193, 3.118518829345703], + [-4.268826007843018, 2.739431619644165], + [-4.063974857330322, 4.142843246459961], + [-4.606503009796143, -6.497754096984863], + [-4.204261779785156, -5.941208362579346], + [0.07921689003705978, 10.525473594665527], + [0.17892801761627197, 10.542049407958984], + [-4.92910623550415, -5.3528337478637695], + [2.6949098110198975, 5.785243988037109], + [2.144934892654419, 1.0462068319320679], + [-4.546555519104004, -5.8209991455078125], + [3.0624263286590576, -9.249711036682129], + [3.727992057800293, -3.414616107940674], + [6.31901216506958, 7.70366907119751], + [0.6442840099334717, -0.5961518287658691], + [-0.29285457730293274, -0.6823290586471558], + [2.032466173171997, 4.452526569366455], + [2.2830991744995117, -3.1824560165405273], + [3.5100972652435303, -3.89694881439209], + [6.954951763153076, 8.389906883239746], + [-1.7054643630981445, 2.393594264984131], + [2.920971632003784, 7.388498306274414], + [2.8873932361602783, -6.063840866088867], + [-5.599475383758545, 6.644034385681152], + [5.712775707244873, -1.1788569688796997], + [-3.2621214389801025, -5.564980983734131], + [-4.222043037414551, 4.67824649810791], + [2.969125509262085, 1.2832763195037842], + [2.8197085857391357, -7.090742588043213], + [-4.442232608795166, -2.3584821224212646], + [3.668499708175659, -6.336783409118652], + [8.064933776855469, -2.385470151901245], + [-4.032641887664795, -5.983031272888184], + [-2.034099817276001, 2.3216445446014404], + [6.144311428070068, -3.5876572132110596], + [0.2545815110206604, 11.401039123535156], + [0.09879576414823532, 9.785493850708008], + [-1.244544267654419, 1.6304699182510376], + [3.645800828933716, -5.329902172088623], + [3.46997332572937, -4.522638320922852], + [-5.240835666656494, -1.2677751779556274], + [5.834457874298096, -4.7509260177612305], + [1.8190381526947021, -7.545219898223877], + [-4.593106269836426, 5.293689250946045], + [-2.2985587120056152, 0.7255959510803223], + [8.09882640838623, -2.487192392349243], + [-2.23787522315979, 5.5103678703308105], + [7.065131664276123, -5.88839054107666], + [7.333496570587158, -1.9145610332489014], + [6.440747261047363, -1.2730931043624878], + [8.011818885803223, -2.1186037063598633], + [-1.5414533615112305, -0.9166952967643738], + [0.399904727935791, 10.55742359161377], + [0.10861270874738693, 12.04951286315918], + [-2.0894336700439453, 2.521636962890625], + [-6.807918548583984, 8.052249908447266], + [-5.251434326171875, -0.8376193642616272], + [-2.2107155323028564, 2.4454352855682373], + [-4.78427267074585, -2.8283071517944336], + [-4.4069085121154785, -6.089442253112793], + [-2.124990224838257, 2.4798665046691895], + [9.18313980102539, -2.561548948287964], + [-3.944350481033325, -2.9963269233703613], + [1.5242958068847656, 5.1902008056640625], + [7.931288242340088, -2.0941073894500732], + [-2.111085891723633, 2.537773370742798], + [-2.775286912918091, -4.193120002746582], + [-2.2253334522247314, 1.9635335206985474], + [0.06032060831785202, 9.395000457763672], + [-2.527745246887207, 2.087221145629883], + [1.3684102296829224, 6.397554397583008], + [-4.425536155700684, -7.118939399719238], + [2.510591506958008, 4.76231575012207], + [-2.600940704345703, 1.9747759103775024], + [-4.329720497131348, -3.6199533939361572], + [2.7064826488494873, -6.7587890625], + [-2.5966780185699463, -0.6761603355407715], + [-4.638705730438232, -6.222029209136963], + [0.24040693044662476, 10.97022819519043], + [-0.024578757584095, 9.674205780029297], + [3.7176077365875244, -3.530097007751465], + [3.1901450157165527, -4.340137481689453], + [4.363218784332275, 7.402342319488525], + [-2.0468008518218994, 4.207627773284912], + [4.056803226470947, -4.961812973022461], + [9.238391876220703, -2.493943929672241], + [-2.394836187362671, 2.626542568206787], + [4.789396286010742, -2.9531443119049072], + [0.0985945388674736, 12.581171035766602], + [5.88301420211792, -1.3672577142715454], + [9.49524974822998, -2.3716580867767334], + [4.035183429718018, -3.563049793243408], + [1.8221540451049805, 5.318520545959473], + [7.40524435043335, -2.058809995651245], + [0.8421444892883301, -0.3126700520515442], + [-5.824501991271973, 5.987838268280029], + [-3.4480159282684326, 4.309255599975586], + [0.09254234284162521, 11.386184692382812], + [-4.53366231918335, 6.519552707672119], + [-0.007681317627429962, -1.1259750127792358], + [-2.688819408416748, 4.264280796051025], + [-4.639975070953369, -6.913997173309326], + [3.6156156063079834, 1.1071127653121948], + [2.7784907817840576, -9.633814811706543], + [-0.028217382729053497, 9.280006408691406], + [-0.5277113318443298, -2.4223291873931885], + [0.24900460243225098, 11.777036666870117], + [0.7118979692459106, -0.8490986824035645], + [0.17217153310775757, 8.615318298339844], + [2.6696197986602783, 0.8106244206428528], + [5.926130771636963, -4.937505722045898], + [4.9857964515686035, -1.7735434770584106], + [-5.2024335861206055, 7.243838787078857], + [-5.5837483406066895, 7.128897666931152], + [0.006556324660778046, 9.884119033813477], + [0.11981146782636642, 10.011292457580566], + [3.6894643306732178, 1.7343378067016602], + [7.780735492706299, -2.753964424133301], + [-4.916134834289551, -7.142522811889648], + [4.061077117919922, 6.468788146972656], + [-5.044188022613525, 3.53136944770813], + [4.146495342254639, 1.877771019935608], + [4.770191669464111, -3.5571186542510986], + [-2.5020194053649902, 1.5831151008605957], + [-0.14115825295448303, -1.4785608053207397], + [-2.2072038650512695, -1.9541324377059937], + [-6.813488483428955, 8.00294017791748], + [3.623955726623535, -2.3929312229156494], + [2.9505200386047363, 0.1659831702709198], + [6.719582557678223, 8.481836318969727], + [-5.448212146759033, -6.159120082855225], + [3.718350887298584, -3.5086491107940674], + [3.1672627925872803, -4.400604248046875], + [8.536376953125, -2.237962007522583], + [-2.0463790893554688, 1.7970753908157349], + [-1.9342671632766724, 0.9235462546348572], + [-3.721465826034546, -1.2095997333526611], + [4.119661331176758, -4.704778671264648], + [-2.9111907482147217, 3.1989662647247314], + [-0.029141433537006378, 11.977231979370117], + [-3.069795846939087, -0.7093658447265625], + [3.547926664352417, -7.0652337074279785], + [1.593198299407959, -5.398028373718262], + [3.3810575008392334, -3.1098554134368896], + [-2.2204477787017822, 2.421548366546631], + [-3.6897923946380615, -5.611384391784668], + [8.372971534729004, -2.204172372817993], + [1.8899726867675781, -4.1285881996154785], + [-0.9391157031059265, 0.023936565965414047], + [-2.219313859939575, -4.688788890838623], + [1.8695144653320312, -7.951064109802246], + [4.485528469085693, 0.04137330874800682], + [0.2572595179080963, -1.0320448875427246], + [-4.589203357696533, -5.783463478088379], + [2.3168821334838867, 4.972366809844971], + [7.336010456085205, -2.1382622718811035], + [4.129702568054199, 1.7422698736190796], + [2.155931234359741, 0.7091923356056213], + [-0.9983274340629578, 0.07268980145454407], + [-5.092841625213623, 5.334174156188965], + [-2.4787049293518066, 1.3191694021224976], + [-5.250350475311279, 4.02719259262085], + [2.396286964416504, 4.897879123687744], + [0.0036958977580070496, 12.631002426147461], + [3.289973020553589, -4.714506149291992], + [3.4205079078674316, -8.488404273986816], + [-2.7013208866119385, 2.1535003185272217], + [2.953855514526367, -6.346615314483643], + [-2.3773651123046875, 2.386723518371582], + [3.0340969562530518, -4.259373664855957], + [-2.9868154525756836, 4.800095558166504], + [-4.693679332733154, -6.594390869140625], + [4.1011481285095215, 6.706943511962891], + [3.044764995574951, -3.9442968368530273], + [1.3754509687423706, -7.17718505859375], + [2.3050360679626465, 5.310019493103027], + [-6.124505519866943, 7.030277252197266], + [-6.187581539154053, 7.008342266082764], + [-4.430025100708008, -3.3893797397613525], + [9.859343528747559, -2.3856866359710693], + [-3.539902448654175, -3.3859379291534424], + [-4.363785743713379, -2.6068196296691895], + [-2.3097915649414062, -0.8558104038238525], + [0.17968446016311646, 10.276777267456055], + [0.35870808362960815, 11.046606063842773], + [3.935049295425415, 1.5496021509170532], + [0.1545025110244751, 9.933366775512695], + [0.3513939380645752, -3.452404260635376], + [-2.5413613319396973, -4.188667297363281], + [-2.1533517837524414, 1.6318024396896362], + [3.867835521697998, -3.4910879135131836], + [1.4964464902877808, 11.201435089111328], + [3.3624765872955322, -4.771101951599121], + [1.2348031997680664, 5.088753700256348], + [3.0048348903656006, -8.546932220458984], + [3.667679786682129, 1.5539480447769165], + [-2.4610273838043213, 2.799431085586548], + [9.455662727355957, -2.4112071990966797], + [2.9953789710998535, -4.242944717407227], + [3.5088307857513428, -4.614287376403809], + [-1.6010401248931885, 1.7055526971817017], + [3.5632517337799072, -8.227209091186523], + [2.1992697715759277, 3.8236448764801025], + [1.076798439025879, -0.6147064566612244], + [2.035285472869873, 3.314521312713623], + [2.6984665393829346, -3.740183115005493], + [-0.8896501660346985, 4.787707328796387], + [-4.274823188781738, -3.959648370742798], + [-5.929141044616699, -1.4047448635101318], + [-4.967629909515381, -0.8507837057113647], + [-2.5812671184539795, 1.7913233041763306], + [-3.3490355014801025, 4.794094562530518], + [-4.089069366455078, -6.316733360290527], + [7.332220554351807, -1.5585767030715942], + [6.946484088897705, -1.706721544265747], + [-4.626559257507324, 5.509381294250488], + [-3.2150888442993164, -2.4027490615844727], + [-4.8955769538879395, -1.2637840509414673], + [-2.283639669418335, 1.6230790615081787], + [-4.731536388397217, -7.005498886108398], + [6.285312175750732, 7.9018235206604], + [7.411274433135986, -1.64482581615448], + [1.3577958345413208, 0.31218671798706055], + [-5.129112243652344, 5.5046796798706055], + [-4.63588285446167, 4.911779880523682], + [2.002690076828003, -6.618107795715332], + [-3.9224088191986084, -3.2152254581451416], + [3.226210832595825, -5.5731706619262695], + [-5.209187984466553, -0.27592551708221436], + [-2.4078330993652344, 0.6511410474777222], + [7.757620334625244, -2.6373918056488037], + [-7.464038372039795, 1.884344220161438], + [0.1658337116241455, 10.208868980407715], + [8.064000129699707, -2.1871626377105713], + [5.811676979064941, -1.307974100112915], + [-0.22495362162590027, -1.3386024236679077], + [3.570199489593506, -3.2837936878204346], + [7.499344348907471, 8.8773193359375], + [-2.173550605773926, 2.5836803913116455], + [8.758973121643066, -2.339323043823242], + [-3.733696222305298, -4.611530303955078], + [-0.41835346817970276, -1.0494681596755981], + [-4.635123252868652, -7.4537811279296875], + [3.898956775665283, -3.5330049991607666], + [0.3037441372871399, 10.920394897460938], + [-5.186135292053223, -3.4392855167388916], + [2.4810938835144043, -5.365240097045898], + [0.6430904269218445, 0.13231204450130463], + [4.117753505706787, -7.5684943199157715], + [9.47880744934082, -2.7243576049804688], + [3.529107093811035, -5.18377685546875], + [-3.9311492443084717, -3.5010249614715576], + [-1.7396897077560425, 1.6669665575027466], + [2.326312780380249, -7.9642133712768555], + [-6.125793933868408, 7.407467842102051], + [-2.8038790225982666, 1.7103646993637085], + [-6.230825901031494, -2.0122921466827393], + [-1.0351060628890991, -3.6616532802581787], + [2.9521853923797607, -4.059031963348389], + [-3.660349130630493, -2.6628222465515137], + [6.054126739501953, 8.277200698852539], + [3.6482961177825928, 1.7224122285842896], + [7.525258541107178, -1.5678662061691284], + [-4.429358005523682, -6.062347412109375], + [7.5481276512146, 8.953685760498047], + [-4.724846363067627, -6.529114246368408], + [-0.668465793132782, 0.21236848831176758], + [-2.216574192047119, 2.1250226497650146], + [3.545128345489502, -3.332155227661133], + [0.09257292002439499, 9.487648010253906], + [4.492855072021484, -4.443612098693848], + [-2.6163785457611084, 2.0406970977783203], + [1.298938512802124, 0.7751168608665466], + [-0.6652596592903137, -2.097909927368164], + [8.19327163696289, -2.248384952545166], + [-3.9654810428619385, 6.205781936645508], + [5.210395812988281, -2.8677220344543457], + [0.05183183401823044, 11.945473670959473], + [3.941692590713501, -7.524608612060547], + [-2.4842190742492676, 1.0366333723068237], + [-2.329556941986084, 2.0718040466308594], + [4.322673320770264, -3.253349542617798], + [6.844916820526123, -1.8225619792938232], + [-4.80790376663208, 5.31203031539917], + [-4.6552228927612305, 5.019901275634766], + [-0.18823862075805664, -0.8162412643432617], + [10.139309883117676, -2.428023099899292], + [6.3155341148376465, -1.368990421295166], + [0.08537303656339645, 10.644195556640625], + [-2.3255691528320312, 3.0988855361938477], + [10.027082443237305, -2.4365618228912354], + [-2.0583231449127197, 1.7935959100723267], + [-1.3183544874191284, 0.24874770641326904], + [2.9777438640594482, -4.224302768707275], + [-6.476647853851318, -0.9389562010765076], + [-6.76437520980835, 7.891488075256348], + [7.46709680557251, -4.701306343078613], + [1.3995904922485352, 4.288849830627441], + [0.8773433566093445, -6.264488697052002], + [2.983294725418091, -10.00604248046875], + [-1.636756181716919, 2.5495758056640625], + [-1.971390724182129, 2.0545783042907715], + [-6.974131107330322, 2.096327543258667], + [3.21156907081604, -4.538139343261719], + [-2.193089246749878, 2.6703386306762695], + [-4.685393333435059, 4.448973655700684], + [1.5338797569274902, -1.6607805490493774], + [2.9156410694122314, 0.784719705581665], + [3.5016815662384033, -3.379370927810669], + [0.12551015615463257, 9.923839569091797], + [5.095818042755127, -7.636457443237305], + [-3.7982518672943115, -5.170497894287109], + [-4.946047782897949, 5.385069370269775], + [3.8852851390838623, -3.5189387798309326], + [3.0274462699890137, -4.2740397453308105], + [0.059128694236278534, 11.926025390625], + [0.148659348487854, 10.95955753326416], + [-0.3037092089653015, 1.203769564628601], + [3.941800832748413, -3.002915620803833], + [-4.086238384246826, 6.125160217285156], + [1.7796568870544434, 1.6107178926467896], + [-1.0909254550933838, -3.8185462951660156], + [-6.898425579071045, -1.2208901643753052], + [3.7606709003448486, 1.3119558095932007], + [1.4662683010101318, 2.37888503074646], + [-2.389387607574463, 2.0710673332214355], + [4.3470940589904785, -1.1218464374542236], + [0.03056972473859787, 12.73172378540039], + [5.031260013580322, -2.0587141513824463], + [-6.3054938316345215, -0.549968957901001], + [3.373884439468384, -3.9192581176757812], + [-3.3963382244110107, 0.8673850297927856], + [8.454981803894043, -2.2436115741729736], + [-0.06943512707948685, 9.678239822387695], + [-4.855199813842773, 3.46518874168396], + [8.410040855407715, -2.36338472366333], + [-1.9654628038406372, 6.650872230529785], + [2.170516014099121, -8.059652328491211], + [-0.2130323052406311, 0.17737814784049988], + [6.400669574737549, 7.846901893615723], + [4.739708423614502, 2.09317684173584], + [0.15899986028671265, 11.54103946685791], + [3.345675230026245, -4.679898262023926], + [-4.134688854217529, -6.5264058113098145], + [-5.539198875427246, 5.662618637084961], + [3.8056247234344482, 1.2766785621643066], + [-6.146748065948486, -0.12359899282455444], + [-2.0385003089904785, -4.087137222290039], + [2.345175266265869, 3.7375895977020264], + [-5.221164226531982, -1.789572834968567], + [1.7714475393295288, 0.34837406873703003], + [1.537424921989441, 5.122939109802246], + [-3.8507683277130127, -2.6785237789154053], + [4.260010242462158, -3.5155975818634033], + [-2.4333579540252686, 1.02316415309906], + [6.1725172996521, 7.746923446655273], + [0.22455370426177979, 10.74616813659668], + [5.792629241943359, -3.8841910362243652], + [3.892052412033081, -2.5156443119049072], + [0.23837143182754517, 10.989944458007812], + [2.150883674621582, -4.962092399597168], + [3.449066162109375, 6.323036193847656], + [-0.006054706871509552, 9.209722518920898], + [1.947632074356079, 0.8553837537765503], + [4.3421478271484375, 5.802986145019531], + [-0.12015718966722488, 13.632301330566406], + [5.64539909362793, 7.504589080810547], + [3.140913486480713, -10.585832595825195], + [-2.2685630321502686, 2.3104441165924072], + [-2.9676296710968018, 6.791377544403076], + [-4.8535637855529785, 3.4245712757110596], + [-0.36024338006973267, 0.018002841621637344], + [-3.4383199214935303, -5.851909637451172], + [10.78072452545166, -2.481755495071411], + [2.5898854732513428, -2.8506267070770264], + [1.643160343170166, -0.7895124554634094], + [-1.0047330856323242, -3.6431143283843994], + [-3.097661256790161, 5.237170219421387], + [3.6118147373199463, -5.860818862915039], + [2.6626601219177246, -3.7963340282440186], + [2.9850895404815674, -4.071349620819092], + [3.7558701038360596, 1.0755763053894043], + [4.321756839752197, 6.821985244750977], + [3.9059042930603027, 1.889731764793396], + [3.0381667613983154, -4.212121963500977], + [3.8380520343780518, -3.9960787296295166], + [0.1022370383143425, 11.917560577392578], + [3.646573305130005, -8.267953872680664], + [6.915210247039795, -1.4937061071395874], + [-4.38323974609375, -6.030472278594971], + [2.3394110202789307, -7.702617645263672], + [3.0492827892303467, -5.9161601066589355], + [-4.607778072357178, 6.1070990562438965], + [-2.261276960372925, 1.5574344396591187], + [2.135028600692749, 5.209773063659668], + [7.795897483825684, -2.7797305583953857], + [3.8397698402404785, 5.662868499755859], + [-5.776622295379639, 6.475376129150391], + [-6.687551975250244, 7.579761505126953], + [2.7141082286834717, -3.2670204639434814], + [0.004740767180919647, 9.354105949401855], + [1.6500269174575806, -0.08140197396278381], + [4.374610424041748, -2.454523801803589], + [4.853686809539795, -3.63118577003479], + [4.664174556732178, -1.0578268766403198], + [4.698815822601318, -6.987720012664795], + [4.649783611297607, 7.028448104858398], + [2.8523595333099365, -8.973600387573242], + [-1.908829927444458, 2.0449540615081787], + [2.9563522338867188, -8.592205047607422], + [-3.4144890308380127, -5.5591583251953125], + [-3.320488929748535, -2.673919439315796], + [3.9834306240081787, 2.0317606925964355], + [-4.4328789710998535, -6.825971603393555], + [3.2177746295928955, -3.8012001514434814], + [0.13417977094650269, 12.222061157226562], + [9.610186576843262, -2.3345866203308105], + [-3.1705143451690674, 5.60500431060791], + [1.1090114116668701, 4.800502777099609], + [-2.0855627059936523, 2.6076815128326416], + [2.9393632411956787, -2.883648157119751], + [-6.499863147735596, 7.353743553161621], + [-1.962597131729126, 2.51234769821167], + [6.2034220695495605, -1.3075045347213745], + [-4.575559139251709, -7.332376480102539], + [8.151382446289062, -2.1648447513580322], + [-1.8237382173538208, 2.265897750854492], + [3.740041494369507, -2.933047294616699], + [7.685929775238037, -2.0344114303588867], + [-3.2250232696533203, -4.092426300048828], + [-0.006552882492542267, 12.094942092895508], + [-0.7937076091766357, -3.1239516735076904], + [-2.0215704441070557, 2.3742611408233643], + [6.267035007476807, 8.54800796508789], + [3.3068015575408936, -7.41831636428833], + [8.37151050567627, -2.2412362098693848], + [7.213016510009766, -1.8468754291534424], + [-3.152209997177124, -4.446928024291992], + [-2.2474782466888428, 2.603671073913574], + [3.3747928142547607, 6.1178388595581055], + [0.1699146032333374, 10.230443954467773], + [-4.753437042236328, -2.126100540161133], + [2.5654361248016357, 1.737026333808899], + [-2.394409656524658, -0.2269754409790039], + [-5.1424055099487305, -1.1304315328598022], + [7.052139759063721, -4.033079624176025], + [1.895392894744873, 3.7851555347442627], + [2.911776542663574, -4.0609636306762695], + [9.17038631439209, -2.406848192214966], + [-3.8268215656280518, -2.348672389984131], + [10.178467750549316, -2.397489547729492], + [-2.096963882446289, 2.429344892501831], + [0.2445726990699768, 10.316232681274414], + [6.655229568481445, 8.349140167236328], + [-0.6548539996147156, -1.6928467750549316], + [-6.847354888916016, 8.122779846191406], + [-4.116615295410156, 4.569098949432373], + [-5.333972930908203, -1.5190588235855103], + [5.4933857917785645, 7.096321105957031], + [-4.725595951080322, 4.978452682495117], + [-3.5683093070983887, -4.961364269256592], + [1.9060918092727661, -7.6146769523620605], + [-2.289032220840454, 0.9866909980773926], + [-3.571308135986328, 2.8906335830688477], + [6.552908897399902, 7.986490249633789], + [3.246753692626953, -8.296013832092285], + [-0.6291550993919373, -2.6350021362304688], + [1.2658872604370117, -7.139553546905518], + [7.8298773765563965, -2.446038007736206], + [-2.540053606033325, 1.6406880617141724], + [-6.68494987487793, 7.403079032897949], + [2.7153003215789795, -3.819316864013672], + [-0.5989551544189453, -2.4738519191741943], + [5.4605937004089355, 6.97923469543457], + [2.378065824508667, -7.934228897094727], + [3.468959331512451, -7.422511577606201], + [-5.0806565284729, -2.7883005142211914], + [3.854278802871704, -3.1043848991394043], + [1.9902637004852295, 3.156285285949707], + [1.8467280864715576, -8.423410415649414], + [2.1472294330596924, 5.831057071685791], + [-3.8931610584259033, -3.434049606323242], + [-0.12040790170431137, -1.4916239976882935], + [-0.022871680557727814, 13.86038589477539], + [-3.3497822284698486, 3.065429449081421], + [4.926445484161377, -1.9296549558639526], + [-6.235805034637451, 6.684344291687012], + [-2.163134813308716, 2.192058563232422], + [-3.63531756401062, -6.360714912414551], + [8.926998138427734, -2.1795899868011475], + [6.149139404296875, -1.0109286308288574], + [1.7194747924804688, 3.306748628616333], + [-1.2157435417175293, -3.8569657802581787], + [5.702314853668213, -1.1141911745071411], + [-7.477536678314209, 2.6989188194274902], + [6.853254318237305, 8.557927131652832], + [2.1442835330963135, 5.115808486938477], + [-4.505126953125, 4.175352573394775], + [3.045868158340454, 1.373745322227478], + [-2.5274171829223633, 1.5531020164489746], + [-5.333699703216553, 6.084074974060059], + [1.0425150394439697, 0.2976621389389038], + [1.9714877605438232, 1.03589928150177], + [3.834411859512329, -3.6357028484344482], + [-6.150925159454346, -0.6225053071975708], + [3.469320297241211, -7.166047096252441], + [1.9031132459640503, 3.0638511180877686], + [9.172041893005371, -2.3369901180267334], + [-4.13619327545166, 4.186306476593018], + [2.985562801361084, -4.217098712921143], + [3.5664193630218506, -4.596117973327637], + [0.03289072960615158, 11.018836975097656], + [-2.579425811767578, 0.6980805993080139], + [4.1140570640563965, -6.717103958129883], + [2.6698386669158936, 4.343970775604248], + [5.28031587600708, -5.348453521728516], + [0.25333505868911743, 11.171163558959961], + [3.1075947284698486, -4.302530288696289], + [7.125128746032715, -2.845240354537964], + [5.942038059234619, -2.546234369277954], + [0.009720973670482635, 9.213984489440918], + [-2.1858971118927, 2.464238405227661], + [5.687449932098389, -5.230327606201172], + [-6.163523197174072, -0.5363267064094543], + [2.65395188331604, 0.547015905380249], + [-5.363855361938477, 6.009049415588379], + [8.860993385314941, -2.362673044204712], + [-2.812675714492798, -5.315308570861816], + [8.304394721984863, -2.3230128288269043], + [4.718638896942139, -2.3330960273742676], + [2.7951176166534424, -1.7713350057601929], + [6.533697605133057, -1.4582146406173706], + [-1.0814263820648193, -3.695279598236084], + [1.8381277322769165, -0.06131312623620033], + [4.301891803741455, -3.479322671890259], + [4.15806770324707, 1.3906583786010742], + [5.403461456298828, 8.018349647521973], + [2.6258022785186768, -9.936013221740723], + [-7.887328147888184, 0.09118354320526123], + [2.2070486545562744, 0.2977706789970398], + [-2.637545585632324, 1.1870763301849365], + [-2.1750354766845703, 2.159411668777466], + [-0.5923921465873718, -1.871803879737854], + [0.004598371684551239, 12.203595161437988], + [-4.667937278747559, 3.9666507244110107], + [7.741947650909424, -2.0802319049835205], + [6.313220500946045, -1.5434225797653198], + [-6.783653736114502, 7.965923309326172], + [9.333928108215332, -2.360015630722046], + [-2.234367609024048, 2.4461936950683594], + [2.0797226428985596, 0.30760425329208374], + [-4.449610233306885, 4.778176784515381], + [1.0220136642456055, 5.749696731567383], + [1.5625486373901367, 5.121128082275391], + [-2.0611748695373535, -1.6597448587417603], + [2.008967161178589, 2.686885118484497], + [2.7778830528259277, -3.647228956222534], + [5.2420783042907715, -3.008046865463257], + [1.3753622770309448, 0.135233536362648], + [-2.3088057041168213, -4.2302165031433105], + [1.6582844257354736, 2.078810930252075], + [3.919792413711548, -3.6498911380767822], + [10.565016746520996, -2.406877279281616], + [0.09328561276197433, 12.396394729614258], + [1.6576220989227295, 2.1562037467956543], + [6.6454291343688965, -2.7348580360412598], + [5.214239597320557, -1.1901394128799438], + [9.427384376525879, -2.1579196453094482], + [-2.2818169593811035, -3.8719751834869385], + [3.5007755756378174, -8.604212760925293], + [4.1389384269714355, 1.6246124505996704], + [-3.6158363819122314, -4.515111923217773], + [-0.6175962090492249, 9.831182479858398], + [-4.361462116241455, -6.7325944900512695], + [-3.747783899307251, -0.153411865234375], + [0.8829547166824341, -0.7279359698295593], + [6.063843250274658, 7.559978008270264], + [-1.5122493505477905, 1.3560945987701416], + [-3.779099702835083, -0.07397347688674927], + [2.2409543991088867, -8.5735502243042], + [4.146202564239502, -7.541046142578125], + [-2.2285122871398926, -3.8087475299835205], + [0.11809246987104416, 10.377971649169922], + [-2.5050556659698486, -4.992837905883789], + [5.646369457244873, -1.7538856267929077], + [-4.187638759613037, 2.8789584636688232], + [3.2530465126037598, -0.5611017942428589], + [6.411406993865967, -3.159648895263672], + [-4.599376201629639, -7.278414249420166], + [-5.026315212249756, 4.941622734069824], + [-0.696828305721283, -0.19298811256885529], + [-4.090648174285889, -1.8563600778579712], + [9.379481315612793, -2.47865891456604], + [-3.2498273849487305, -5.332558631896973], + [5.658008575439453, 7.623744010925293], + [-2.174509286880493, 3.408108711242676], + [-0.7301056385040283, -0.5244472026824951], + [2.6372244358062744, 6.119401454925537], + [7.700575351715088, -2.7437596321105957], + [8.72027587890625, -2.285284996032715], + [3.206723690032959, -8.486577987670898], + [0.9504958987236023, -6.382472038269043], + [-1.2381716966629028, -3.140892744064331], + [9.317947387695312, -2.4137189388275146], + [-6.378782749176025, 8.090143203735352], + [2.0172388553619385, 4.8758392333984375], + [7.433907985687256, -1.742432713508606], + [-5.149909496307373, -2.6117799282073975], + [0.06027811020612717, 11.510528564453125], + [6.048502445220947, 7.6072187423706055], + [2.72737717628479, 1.6480687856674194], + [2.960437059402466, 5.231993675231934], + [-4.394289493560791, -6.212542533874512], + [2.874641180038452, -7.54716682434082], + [1.0763704776763916, -6.758096218109131], + [2.8517062664031982, -4.058684349060059], + [1.2758103609085083, 2.5543198585510254], + [-0.020359106361865997, 12.843693733215332], + [-2.013876438140869, 7.239936828613281], + [1.9612922668457031, -5.691239356994629], + [-0.018396683037281036, 13.242447853088379], + [3.382908344268799, 1.5552455186843872], + [0.04563599079847336, 13.681068420410156], + [-4.079438209533691, -3.1032087802886963], + [-3.2684028148651123, -0.5955948829650879], + [3.1602346897125244, -2.9940345287323], + [-3.9777257442474365, -1.5593231916427612], + [-3.7728755474090576, -2.860194444656372], + [9.7625150680542, -2.407482147216797], + [3.763554811477661, 6.331241130828857], + [-2.202101230621338, 2.8188059329986572], + [-2.748887300491333, 2.9964559078216553], + [4.281146049499512, -3.3579671382904053], + [-1.4483885765075684, -3.8125696182250977], + [7.539504528045654, -2.406189441680908], + [-0.8870996236801147, -3.2615530490875244], + [-4.509003162384033, -6.306934356689453], + [2.9094412326812744, 3.95393967628479], + [-0.021644659340381622, 9.886297225952148], + [3.0178234577178955, -6.658564567565918], + [6.0152082443237305, -2.9032516479492188], + [10.2095308303833, -2.430227518081665], + [-4.203982830047607, -1.0927013158798218], + [7.86442232131958, -2.1013896465301514], + [5.00550651550293, -1.688338041305542], + [8.962790489196777, -2.404592752456665], + [7.8982319831848145, -2.2509191036224365], + [1.9649088382720947, 5.7972187995910645], + [0.7357431650161743, -0.7860569953918457], + [-6.477324962615967, -1.7891584634780884], + [7.065896034240723, -1.5765944719314575], + [-2.1548030376434326, 2.284000873565674], + [0.21846598386764526, 9.763603210449219], + [0.23645734786987305, 11.041450500488281], + [-4.601935386657715, -1.5302587747573853], + [7.878075122833252, -2.4065096378326416], + [3.925813913345337, 1.8142328262329102], + [1.0749011039733887, 0.04187018796801567], + [4.013380527496338, -4.516841888427734], + [-5.861705303192139, -1.0486681461334229], + [-5.02614688873291, 5.577901840209961], + [3.9268295764923096, 0.06194331869482994], + [0.3269798159599304, 10.943523406982422], + [-3.173870325088501, -3.4310076236724854], + [-6.7108073234558105, 7.772408485412598], + [1.6406666040420532, -6.407343864440918], + [7.386949062347412, -2.102276563644409], + [-2.630079507827759, 0.8261098861694336], + [5.07987642288208, 6.953248023986816], + [5.5430827140808105, -3.058523416519165], + [6.255443096160889, 7.623043060302734], + [-5.956902027130127, 4.664628505706787], + [-5.315383434295654, 5.274741172790527], + [-0.2917134165763855, 1.1157571077346802], + [0.02698933333158493, 13.208467483520508], + [-2.243241548538208, 2.4053943157196045], + [-3.386970281600952, 0.5728335976600647], + [3.668132781982422, -4.8336992263793945], + [2.999457597732544, -4.00164270401001], + [-6.3534836769104, 0.24393272399902344], + [0.0830107256770134, 10.514999389648438], + [4.894212245941162, -4.6110382080078125], + [4.195211410522461, 6.2267656326293945], + [2.4682364463806152, 5.649293899536133], + [6.848015308380127, -1.2646743059158325], + [-5.020834445953369, 4.325408935546875], + [7.212761402130127, 8.68692398071289], + [-5.861334800720215, 0.03633957728743553], + [3.760713815689087, 1.1559783220291138], + [-4.6197662353515625, -6.647058486938477], + [0.7543023228645325, -5.499240398406982], + [-0.03488928824663162, 11.73767375946045], + [-5.838099002838135, 7.222305774688721], + [5.912692546844482, -1.234094500541687], + [-2.4361252784729004, -4.132411003112793], + [-1.4363747835159302, 2.2484898567199707], + [2.555142402648926, -3.8049373626708984], + [2.3752858638763428, -7.439068794250488], + [6.199887275695801, 7.851296424865723], + [2.0785129070281982, -7.519557476043701], + [4.106024265289307, -8.632938385009766], + [-4.923005104064941, -6.944117546081543], + [-2.6918747425079346, 4.458802223205566], + [2.1158251762390137, 4.727536678314209], + [4.86226749420166, -1.4319955110549927], + [3.1875858306884766, -4.7173380851745605], + [3.140577554702759, 0.0218510739505291], + [-4.755730628967285, -1.6223872900009155], + [-3.0866477489471436, -4.698177337646484], + [-4.947605609893799, -0.6024593114852905], + [0.03372865170240402, 9.842700004577637], + [-4.23222541809082, 3.9331772327423096], + [5.847579479217529, 7.749508857727051], + [9.05399227142334, -2.3083248138427734], + [3.05177903175354, -4.300986289978027], + [-3.063825845718384, 1.9018769264221191], + [4.16500186920166, -3.4183669090270996], + [-4.682953357696533, -7.0530548095703125], + [-3.4753665924072266, -4.025900840759277], + [0.47995883226394653, -1.129562497138977], + [8.791678428649902, -2.5868842601776123], + [-0.05928761512041092, 12.711645126342773], + [-2.4030635356903076, 1.281938076019287], + [9.395167350769043, -2.412494421005249], + [2.922248601913452, -5.047599792480469], + [0.5199235677719116, 0.6777204275131226], + [0.05951862782239914, 9.409463882446289], + [-4.451298236846924, 7.746792793273926], + [0.09872748702764511, -1.1241602897644043], + [3.8657493591308594, -3.588482141494751], + [3.8114993572235107, -3.6587281227111816], + [8.958447456359863, -2.217116594314575], + [1.9487791061401367, 5.4914140701293945], + [2.621122360229492, -2.9537434577941895], + [2.33915114402771, 4.346433639526367], + [-0.007872648537158966, 9.01302719116211], + [-3.118692398071289, 0.7691431641578674], + [-4.664571762084961, -7.551022529602051], + [-4.576966762542725, -2.8099303245544434], + [-6.4290852546691895, 6.8646769523620605], + [-4.391517162322998, 4.046720027923584], + [-2.8268697261810303, -3.7114386558532715], + [-1.5659984350204468, -0.15485650300979614], + [10.816052436828613, -2.6095783710479736], + [0.0754375085234642, 0.7706916332244873], + [-3.4611756801605225, 5.127476692199707], + [-2.291682243347168, 2.188809871673584], + [2.3235623836517334, 5.351584434509277], + [-1.4746930599212646, -4.331124305725098], + [0.02884715050458908, 12.865036964416504], + [-3.0695366859436035, -3.6001498699188232], + [-6.141136646270752, 6.986972808837891], + [3.3880279064178467, -3.9036905765533447], + [-2.143937349319458, 2.606968879699707], + [-4.148698329925537, 5.184088230133057], + [-6.214732646942139, 6.199065208435059], + [-7.391933917999268, 0.7264910936355591], + [3.156156301498413, 1.3814990520477295], + [3.9480087757110596, -6.17750358581543], + [-4.953009128570557, -3.257741689682007], + [-2.59267258644104, 0.173936128616333], + [0.2070292830467224, 10.098800659179688], + [-4.928830146789551, 5.40606689453125], + [0.5318406820297241, -0.784492552280426], + [1.3294868469238281, -6.887578964233398], + [1.7303025722503662, -7.449296951293945], + [-4.191525459289551, -1.9361947774887085], + [-2.328780174255371, 2.5716781616210938], + [7.2108845710754395, -1.8185043334960938], + [8.043487548828125, -2.5686967372894287], + [-6.785057544708252, 7.931317329406738], + [10.706250190734863, -2.5102803707122803], + [0.27052342891693115, 11.628670692443848], + [6.832434177398682, -1.493216872215271], + [5.5094313621521, -2.0315518379211426], + [0.8292976021766663, -0.41241931915283203], + [4.228966236114502, 6.275168418884277], + [-3.819612979888916, -4.47233772277832], + [-0.9947290420532227, 0.04265877231955528], + [2.7967660427093506, -8.062451362609863], + [2.63293719291687, 5.9101409912109375], + [-6.1545939445495605, 6.884492874145508], + [0.07036399096250534, 12.168031692504883], + [4.137355804443359, -7.769041538238525], + [2.722649335861206, -9.643339157104492], + [-6.9255595207214355, 7.861143112182617], + [2.030118942260742, -2.7877614498138428], + [-3.9277355670928955, 3.0697338581085205], + [4.973418712615967, 7.605199337005615], + [-2.2519304752349854, 2.2487728595733643], + [6.359364032745361, 8.195587158203125], + [-6.796778202056885, 7.882291793823242], + [5.93772554397583, 7.4413743019104], + [-0.0487639382481575, 13.325197219848633], + [1.3967360258102417, -7.039053916931152], + [-2.3243820667266846, 2.5023865699768066], + [3.8106679916381836, -2.7393782138824463], + [-3.137556552886963, -5.415602684020996], + [-2.132251739501953, 2.351590633392334], + [3.243074417114258, -6.733391761779785], + [6.392210960388184, -6.190263748168945], + [-3.0960559844970703, -4.764441967010498], + [8.034796714782715, -2.435741662979126], + [5.836184501647949, -0.6871187090873718], + [8.259831428527832, -2.2789885997772217], + [-1.2718013525009155, 2.170559883117676], + [8.049691200256348, -2.15682053565979], + [4.608397006988525, -3.4837775230407715], + [4.330728530883789, 6.627823829650879], + [-1.6344027519226074, 1.5151560306549072], + [4.5982985496521, 1.9452180862426758], + [2.8130524158477783, -3.76162052154541], + [-5.764387130737305, 6.431345462799072], + [0.3819708228111267, 11.127445220947266], + [7.027272701263428, 8.586151123046875], + [0.04526447504758835, 12.524190902709961], + [8.457188606262207, -2.2528438568115234], + [-5.187759876251221, -3.2542154788970947], + [2.606898546218872, -1.2768906354904175], + [0.21704477071762085, 12.685617446899414], + [-4.8165602684021, 8.407247543334961], + [3.0859296321868896, 2.602729082107544], + [-4.287998676300049, -7.135348320007324], + [6.300937175750732, 7.918999671936035], + [7.940856456756592, -2.480158567428589], + [2.6154372692108154, -3.7674825191497803], + [-2.2917277812957764, 1.0037204027175903], + [3.224905252456665, -2.5012691020965576], + [-4.050083637237549, 4.0806474685668945], + [2.8328697681427, -10.041906356811523], + [2.3155670166015625, 5.316647529602051], + [3.2592737674713135, -4.9522504806518555], + [-6.573751926422119, 7.659797191619873], + [1.543534517288208, -7.75698184967041], + [-4.593059539794922, -3.6536223888397217], + [-4.808903217315674, -7.204973220825195], + [3.3609414100646973, -0.9338168501853943], + [3.548898458480835, -6.712453842163086], + [3.1855952739715576, -8.795271873474121], + [0.5430497527122498, -1.0313959121704102], + [-2.9902398586273193, 1.3727320432662964], + [3.1848673820495605, -8.375021934509277], + [-2.1282925605773926, 2.7523272037506104], + [9.392133712768555, -2.3840394020080566], + [2.663597822189331, 0.8215785622596741], + [-0.19629937410354614, 9.493297576904297], + [2.2419607639312744, 3.929324150085449], + [2.091219425201416, -8.43351936340332], + [-3.942418336868286, -6.334559440612793], + [3.054870367050171, -6.730536460876465], + [-5.102362155914307, 4.9602484703063965], + [-1.8260680437088013, 2.5298879146575928], + [1.8888341188430786, 5.420080661773682], + [-4.441414833068848, -2.2471725940704346], + [-2.2638397216796875, 1.9691375494003296], + [10.19602108001709, -2.3698928356170654], + [-5.848316669464111, -0.12382537126541138], + [-1.9385368824005127, 1.9437977075576782], + [-0.6075299382209778, -2.3192012310028076], + [-5.127871990203857, -4.460999011993408], + [3.081162691116333, -4.207014083862305], + [-1.367415189743042, 1.553891658782959], + [-0.0026990845799446106, 13.525270462036133], + [-1.8742129802703857, 1.206908106803894], + [-4.298647403717041, -6.017208099365234], + [-3.5756914615631104, -2.6543161869049072], + [-3.594403028488159, -1.226925015449524], + [3.2252840995788574, -3.4708573818206787], + [8.657882690429688, -2.453655481338501], + [0.11816626042127609, 10.130229949951172], + [2.8830947875976562, -8.425556182861328], + [3.397583246231079, -4.730866432189941], + [0.6253146529197693, -0.8411545753479004], + [-5.965574741363525, 4.3996686935424805], + [3.6892154216766357, -7.289438724517822], + [0.12758323550224304, -1.3862528800964355], + [-2.4421818256378174, 1.4478120803833008], + [1.9173293113708496, 0.20144981145858765], + [8.286995887756348, -2.3082966804504395], + [8.606310844421387, -2.316455125808716], + [7.951730251312256, -2.225975275039673], + [0.008062057197093964, 11.65983772277832], + [5.887518405914307, -2.2165143489837646], + [-3.33141827583313, -2.8355352878570557], + [6.809607982635498, -2.4491536617279053], + [3.0560896396636963, -5.424927711486816], + [-3.719179391860962, -3.8183987140655518], + [-3.5089919567108154, 2.6184844970703125], + [3.123389959335327, -4.408914089202881], + [0.16728276014328003, 9.586797714233398], + [0.5666018724441528, -1.2662104368209839], + [-4.823781490325928, -7.04438591003418], + [0.09264224022626877, 0.6393744349479675], + [0.9709028601646423, -5.724824905395508], + [-1.8544315099716187, 2.2280333042144775], + [2.3170058727264404, 5.456789016723633], + [3.5157577991485596, 1.2682551145553589], + [-5.566225051879883, 6.598320007324219], + [-3.230409860610962, -2.1070802211761475], + [2.058677911758423, -7.948669910430908], + [-3.7418386936187744, 5.321385383605957], + [-3.3712704181671143, -5.8390631675720215], + [4.8308539390563965, -4.052475452423096], + [-4.879618167877197, 4.869742393493652], + [-1.2926689386367798, 1.0022178888320923], + [3.573448896408081, 0.7694815993309021], + [-1.5667943954467773, 2.1750924587249756], + [4.300863742828369, -3.5622007846832275], + [-4.920177936553955, -7.56234884262085], + [7.800192356109619, -2.3811237812042236], + [-0.12920790910720825, -1.0297894477844238], + [2.9139673709869385, 0.3506203889846802], + [5.515748977661133, 6.782234191894531], + [-3.569655179977417, -5.3642072677612305], + [-4.502782344818115, -6.849484443664551], + [0.5379063487052917, -1.025384783744812], + [0.10487931221723557, 13.00485610961914], + [-3.4705421924591064, -3.4041080474853516], + [3.309666872024536, -6.634951591491699], + [-1.1763869524002075, 1.175586462020874], + [-5.77708101272583, -1.2905640602111816], + [2.2841250896453857, -3.2222578525543213], + [3.407167673110962, -4.0499348640441895], + [-5.190454959869385, 8.238848686218262], + [3.7094309329986572, 1.8662735223770142], + [-2.7929627895355225, -1.3399078845977783], + [8.682548522949219, -2.2934703826904297], + [1.1075801849365234, -0.6644081473350525], + [1.2164959907531738, 0.10147805511951447], + [-5.459251403808594, -3.733853816986084], + [-6.3203654289245605, 5.310607433319092], + [-4.121703624725342, 4.329903602600098], + [-1.0723048448562622, -3.7938387393951416], + [0.6474189162254333, -0.7575361132621765], + [-4.632069110870361, -6.855359077453613], + [-3.6738054752349854, -1.7665119171142578], + [2.906834840774536, -3.8250555992126465], + [10.183176040649414, -2.320664405822754], + [8.3052396774292, -2.410491704940796], + [3.0116043090820312, -4.230878829956055], + [4.477542400360107, -2.9490017890930176], + [6.401038646697998, 7.768326282501221], + [0.25194162130355835, 12.650444030761719], + [-1.3183109760284424, 1.6905173063278198], + [0.226871520280838, 0.909048318862915], + [-3.938248634338379, 4.264492511749268], + [3.956923723220825, -4.791746139526367], + [5.053683757781982, -0.9911038875579834], + [-4.524998188018799, -3.0207858085632324], + [0.03806357830762863, 12.16246223449707], + [1.7573258876800537, 4.8112616539001465], + [-3.6303088665008545, -1.7676920890808105], + [-1.9503352642059326, 2.469224214553833], + [2.81284499168396, -6.962860107421875], + [-1.389030933380127, 1.5212773084640503], + [3.6160385608673096, -3.0425612926483154], + [5.701972484588623, -5.256537437438965], + [3.6462271213531494, -4.824803352355957], + [-0.6517210602760315, 1.3670462369918823], + [6.9936347007751465, -1.5035697221755981], + [3.4985663890838623, 2.0396244525909424], + [-3.9265739917755127, -4.7726593017578125], + [-5.146584987640381, 7.396759033203125], + [-2.870398759841919, 1.865420937538147], + [-4.045696258544922, -0.24813175201416016], + [9.414432525634766, -2.481889486312866], + [10.350892066955566, -2.44088077545166], + [4.225224018096924, -3.670863389968872], + [2.4429943561553955, -9.03373908996582], + [3.174861192703247, 4.921817779541016], + [0.0628805086016655, 12.389363288879395], + [-0.021203406155109406, 13.280303001403809], + [-0.032420165836811066, 9.58558177947998], + [-4.947570323944092, -2.690079927444458], + [3.3441367149353027, -3.2157771587371826], + [1.966646432876587, -7.377124309539795], + [10.349053382873535, -2.5036683082580566], + [-0.055972106754779816, 9.481786727905273], + [2.0697121620178223, 5.833951473236084], + [-5.170539855957031, -6.794233322143555], + [-0.08216626197099686, 13.927898406982422], + [-3.6958889961242676, -5.572246551513672], + [1.3984935283660889, 6.435518264770508], + [1.1488096714019775, 6.619834899902344], + [8.374823570251465, -2.2939512729644775], + [9.779945373535156, -2.410076856613159], + [-2.0353055000305176, -3.7406294345855713], + [-2.6201729774475098, 2.11198353767395], + [1.5943926572799683, 4.525681495666504], + [1.4384570121765137, -6.783046722412109], + [-4.218845844268799, -6.707834243774414], + [2.5439178943634033, -3.9638164043426514], + [-3.762543201446533e-6, 12.9822998046875], + [-2.3726139068603516, 1.607726812362671], + [-4.5948967933654785, -3.122511148452759], + [4.759035110473633, -4.5295939445495605], + [0.027199916541576385, 9.49034595489502], + [0.7631703019142151, -6.187747001647949], + [1.8998923301696777, 5.8948211669921875], + [-2.8732492923736572, -3.9738528728485107], + [1.74162757396698, 1.7246814966201782], + [3.15655255317688, -3.8048949241638184], + [-4.227790355682373, -5.809113502502441], + [6.289845943450928, 8.132711410522461], + [-6.233455657958984, -1.9164704084396362], + [6.26000452041626, 7.929930686950684], + [-6.524442195892334, -0.005654696375131607], + [-2.6318790912628174, -3.661127805709839], + [0.283897340297699, 11.658470153808594], + [1.616050362586975, 4.336682319641113], + [-3.177213191986084, 4.757472991943359], + [-3.6539318561553955, -0.3954012393951416], + [6.508676052093506, 7.97493839263916], + [-5.126917362213135, 5.671520233154297], + [3.790330171585083, -7.591439723968506], + [-3.8559834957122803, -6.084773063659668], + [-4.34541130065918, -0.6035453081130981], + [5.022055149078369, -1.3399022817611694], + [-5.209743022918701, -2.7915091514587402], + [-0.9707556962966919, -3.7606492042541504], + [-5.367088794708252, -1.3974636793136597], + [0.1984211802482605, 10.22512435913086], + [0.17632782459259033, 9.708211898803711], + [-6.987582683563232, 8.203824996948242], + [-1.381055235862732, 1.754019021987915], + [-3.9265666007995605, -7.040368556976318], + [-1.8269107341766357, 1.1805031299591064], + [4.263871669769287, -3.7311387062072754], + [5.8337602615356445, -1.1993801593780518], + [1.6994693279266357, 5.2868757247924805], + [-4.172308921813965, 7.465629577636719], + [-0.8282343745231628, 5.206310272216797], + [10.38113784790039, -2.506171941757202], + [-5.638121128082275, 7.253783226013184], + [6.012019157409668, -4.4519829750061035], + [1.8755857944488525, -8.094679832458496], + [0.06329803913831711, 11.562507629394531], + [-5.252369403839111, 5.761719703674316], + [3.080470323562622, -4.34635066986084], + [-0.9225016236305237, -1.414110779762268], + [5.063903331756592, -4.392143249511719], + [-2.019782304763794, -0.6936270594596863], + [-2.0906238555908203, 2.432981252670288], + [0.41042885184288025, -2.50824236869812], + [8.207990646362305, -2.3982009887695312], + [7.328551769256592, 8.732095718383789], + [6.254688262939453, -1.4709933996200562], + [2.4161410331726074, 2.9017889499664307], + [-6.054360866546631, -0.5445703864097595], + [-4.567643642425537, -2.666416883468628], + [-4.70404577255249, -7.507970809936523], + [6.985217571258545, 8.586715698242188], + [4.593163013458252, -3.413456678390503], + [4.871872425079346, -2.995072364807129], + [2.9309699535369873, -4.163401126861572], + [-4.723299503326416, -3.4738619327545166], + [10.099245071411133, -2.4859466552734375], + [2.7192461490631104, -2.6440584659576416], + [2.8099348545074463, -3.970588445663452], + [4.390966415405273, -3.884262800216675], + [-4.049370288848877, -6.568805694580078], + [-2.7882049083709717, 4.731797218322754], + [-1.7974433898925781, 2.3799610137939453], + [-0.05969012528657913, 12.824739456176758], + [-6.711158275604248, 0.8374000191688538], + [0.24918562173843384, 11.149147033691406], + [3.1908323764801025, -3.1967554092407227], + [2.2961413860321045, 3.444643259048462], + [-3.828557252883911, -1.925711989402771], + [-4.230621337890625, -1.3319956064224243], + [-3.93022084236145, -5.912117958068848], + [1.5514187812805176, -6.110784530639648], + [1.3473052978515625, -4.8970046043396], + [-0.06441790610551834, 13.202978134155273], + [-4.888068199157715, -0.4713987112045288], + [9.772828102111816, -2.371411085128784], + [-2.1116528511047363, 2.5284390449523926], + [1.653398036956787, -7.80771541595459], + [0.18991512060165405, 9.8851318359375], + [-0.1223713830113411, 13.822233200073242], + [8.996018409729004, -2.306915521621704], + [-4.338550090789795, 4.5774736404418945], + [-2.038681745529175, 2.255530595779419], + [5.974100589752197, -2.063861608505249], + [1.8612244129180908, -7.217670440673828], + [-2.61673903465271, -5.0648322105407715], + [9.427504539489746, -2.2139155864715576], + [-1.8806755542755127, 2.327793836593628], + [-4.84705924987793, -6.958893775939941], + [4.011895179748535, -3.4658467769622803], + [3.5987770557403564, -3.325559139251709], + [-4.637593746185303, -3.2106282711029053], + [-3.179393768310547, -5.210287094116211], + [0.20195108652114868, 0.0799226313829422], + [-1.9887840747833252, 2.477186918258667], + [-3.744246482849121, -5.384476661682129], + [-2.4877214431762695, -4.351059913635254], + [-4.6903228759765625, 5.180916786193848], + [3.1122281551361084, 6.082965850830078], + [0.7834029793739319, 0.7872471809387207], + [1.8341577053070068, -1.9146876335144043], + [1.1204521656036377, -0.3373804986476898], + [2.6201188564300537, 5.922722816467285], + [8.624039649963379, -2.363499402999878], + [-4.36974573135376, -6.314383506774902], + [6.6563920974731445, 8.28628921508789], + [-2.0977680683135986, 2.5546109676361084], + [2.1129345893859863, 0.5187615156173706], + [1.742417335510254, 5.619168281555176], + [-6.044036388397217, 5.651462554931641], + [-4.491758823394775, -7.219402313232422], + [-0.03588110953569412, 9.347156524658203], + [-3.21274733543396, -2.8483119010925293], + [-4.396571159362793, -6.458547592163086], + [3.2854223251342773, -5.104437351226807], + [-0.04418892413377762, 12.967642784118652], + [2.058880567550659, -7.7148118019104], + [-2.2420525550842285, 2.793665885925293], + [-3.968122959136963, -5.695272922515869], + [2.6255242824554443, -8.502132415771484], + [3.193058967590332, -4.365866661071777], + [0.07075219601392746, 9.569099426269531], + [8.08238697052002, -2.1847035884857178], + [6.224222660064697, -1.2825665473937988], + [-2.594615936279297, -1.8913253545761108], + [-2.764967918395996, -2.6179568767547607], + [-4.896720886230469, 5.364681243896484], + [1.1706125736236572, 4.538486957550049], + [2.674018144607544, -4.459680557250977], + [2.9650766849517822, -3.8757903575897217], + [-6.815403938293457, -1.837841272354126], + [-7.229872226715088, -0.1551297903060913], + [-1.5495920181274414, 1.7060201168060303], + [-1.5069600343704224, 1.9840084314346313], + [-3.7819650173187256, -6.192464828491211], + [-3.094060182571411, 1.253370761871338], + [3.059983491897583, -4.094799041748047], + [3.1602118015289307, -4.443937301635742], + [0.18500792980194092, 10.384251594543457], + [2.0982234477996826, 0.21089178323745728], + [3.61877703666687, -1.8095029592514038], + [-3.295834541320801, 5.752795219421387], + [0.8637282848358154, -0.8504236936569214], + [-2.376652956008911, -3.435681104660034], + [0.4032396674156189, 10.538183212280273], + [1.09938383102417, -0.41504380106925964], + [-2.293896198272705, 2.486581563949585], + [-4.6048970222473145, 5.488166809082031], + [3.976405382156372, -5.229808807373047], + [6.170389175415039, 7.728557586669922], + [0.6209549307823181, -0.8405624628067017], + [-6.710026264190674, 7.950924873352051], + [-0.05450523644685745, 9.24826431274414], + [6.284894943237305, -1.380319356918335], + [2.386237382888794, -6.349426746368408], + [3.6099679470062256, 0.014184843748807907], + [2.7199995517730713, -8.681026458740234], + [6.1963677406311035, -1.3671373128890991], + [6.330121994018555, -1.3039108514785767], + [-0.1633475422859192, -1.5144402980804443], + [-5.893139839172363, 7.402935981750488], + [6.2978835105896, -1.5615146160125732], + [-1.8295624256134033, -4.3744120597839355], + [1.1986039876937866, -0.03935861960053444], + [3.9112298488616943, 0.9416454434394836], + [-4.039253234863281, -1.424452781677246], + [8.281651496887207, -2.436671257019043], + [5.2688374519348145, -1.801865816116333], + [9.870208740234375, -2.4222147464752197], + [5.1566853523254395, 7.964052200317383], + [-0.05051160603761673, 13.264446258544922], + [7.743222713470459, 9.251354217529297], + [-4.567966461181641, -7.097121715545654], + [-3.60288143157959, -4.748410701751709], + [-2.559385299682617, 1.9479634761810303], + [-5.042674541473389, 5.7074480056762695], + [-3.260058879852295, 5.433505058288574], + [1.5209311246871948, 0.008444633334875107], + [-3.510193347930908, -0.6668717861175537], + [-5.144067287445068, -8.24599838256836], + [-4.8366899490356445, 4.139028072357178], + [-0.07033497840166092, 14.024561882019043], + [1.5366631746292114, 2.6191341876983643], + [3.83678936958313, -3.5039594173431396], + [2.9258227348327637, -4.049015522003174], + [2.3492507934570312, 3.908324956893921], + [-2.1331698894500732, 2.287052869796753], + [3.7527577877044678, -2.4723167419433594], + [0.8222811818122864, 0.013619598001241684], + [0.19392496347427368, 10.56167221069336], + [-2.0520734786987305, 2.505786657333374], + [-2.838499069213867, 1.1921340227127075], + [-0.0346948578953743, 9.770341873168945], + [0.109720878303051, 11.351682662963867], + [7.317113399505615, -2.7325026988983154], + [4.74810266494751, 6.8213300704956055], + [-1.9003736972808838, 1.0001651048660278], + [5.305975437164307, -3.1115992069244385], + [4.357700824737549, -3.670974016189575], + [2.362090826034546, 3.946373224258423], + [-4.87313985824585, -3.944140911102295], + [-2.0508761405944824, 2.4009363651275635], + [3.8055756092071533, -4.891733169555664], + [0.5277007818222046, -5.426907062530518], + [6.373611927032471, 7.735404014587402], + [8.341458320617676, -2.5278444290161133], + [-2.91987681388855, 0.17101812362670898], + [-4.004622936248779, -1.8193411827087402], + [0.21607166528701782, 10.285402297973633], + [3.404538869857788, -6.49894380569458], + [3.2656447887420654, -4.117300033569336], + [-3.217618942260742, 2.0322792530059814], + [7.185994625091553, 8.716299057006836], + [0.39651769399642944, 0.35398873686790466], + [-4.077017307281494, -1.1330872774124146], + [-0.009317226707935333, 9.174298286437988], + [-4.780115604400635, -0.9599660634994507], + [-3.9079689979553223, -4.312201499938965], + [0.07229452580213547, 9.425718307495117], + [-6.4964470863342285, 8.041016578674316], + [-2.3275256156921387, 2.2089035511016846], + [0.0883549377322197, 9.586404800415039], + [-0.05462361127138138, 9.612613677978516], + [2.1875364780426025, 3.7677247524261475], + [4.378881454467773, -3.5332510471343994], + [-0.9725094437599182, -3.6212852001190186], + [2.2418792247772217, 3.6027767658233643], + [-1.927016258239746, 2.536203384399414], + [3.0998482704162598, -7.9553632736206055], + [6.051229000091553, -1.1039878129959106], + [-2.280712366104126, 2.4588348865509033], + [-0.7798553705215454, -3.0842206478118896], + [3.117600202560425, -5.959881782531738], + [0.21046435832977295, 11.14362907409668], + [-2.268608570098877, 2.5131828784942627], + [-5.764925956726074, 4.900456428527832], + [-3.2819387912750244, -5.90998649597168], + [2.7809784412384033, -3.969205379486084], + [-2.4651095867156982, 2.3255717754364014], + [6.260988712310791, -7.023451328277588], + [4.09152364730835, -3.6166889667510986], + [1.0015851259231567, -0.4851292669773102], + [3.8494327068328857, -3.4664366245269775], + [2.4579482078552246, 3.681751012802124], + [0.5225244164466858, -1.004264235496521], + [1.9318642616271973, 0.8457553386688232], + [-4.045973300933838, -6.008026599884033], + [0.722119927406311, -0.8138769865036011], + [8.729330062866211, -2.3856732845306396], + [3.0120623111724854, -3.9875221252441406], + [-5.169389247894287, -2.5189008712768555], + [-3.010791778564453, 0.29557889699935913], + [3.705796957015991, 6.724692344665527], + [-5.607032775878906, -1.4448226690292358], + [0.07061129063367844, 5.035120964050293], + [7.8923797607421875, -2.2242908477783203], + [3.10054349899292, -4.322152137756348], + [7.173964023590088, -1.6227349042892456], + [7.158875942230225, -1.9181658029556274], + [-1.56883704662323, 0.20820161700248718], + [2.8592920303344727, -2.71152925491333], + [0.8048186898231506, -6.97138786315918], + [5.427103519439697, -3.367968797683716], + [5.01011848449707, -1.10732901096344], + [0.566260576248169, -1.1249278783798218], + [7.816620826721191, -1.9322071075439453], + [2.044546365737915, 4.143856048583984], + [5.757931709289551, -4.9886579513549805], + [5.582975387573242, 7.588028907775879], + [9.073099136352539, -2.3455159664154053], + [-3.6510963439941406, -1.9093643426895142], + [3.5338633060455322, 1.542475700378418], + [-4.053806304931641, -3.2992570400238037], + [8.223719596862793, -2.394886016845703], + [-5.339343547821045, -1.041025161743164], + [1.5371017456054688, 4.041155815124512], + [-3.598130941390991, -3.086601495742798], + [0.05707763880491257, 9.484342575073242], + [7.199350833892822, 8.950526237487793], + [-4.2001776695251465, -6.776617050170898], + [1.9109495878219604, 1.6806102991104126], + [1.8389794826507568, -0.14674212038516998], + [2.4737770557403564, -4.7412261962890625], + [3.4409379959106445, 6.63452672958374], + [5.387601852416992, -1.3828504085540771], + [-2.3908650875091553, 0.5071998834609985], + [6.599978923797607, 7.986595153808594], + [2.2310452461242676, -2.976421594619751], + [-2.875666379928589, -3.2156684398651123], + [4.430088520050049, -0.07900777459144592], + [-3.113097667694092, -3.7146494388580322], + [-1.3024218082427979, -3.5257208347320557], + [7.9405436515808105, -2.3138363361358643], + [2.862766981124878, -4.03989839553833], + [4.714637279510498, -2.9450738430023193], + [3.0206804275512695, -4.286639213562012], + [3.3101351261138916, -4.794177055358887], + [5.214330196380615, 7.049920082092285], + [0.1311301589012146, -2.658092498779297], + [-5.30628776550293, 6.209437370300293], + [5.611619472503662, 7.47560977935791], + [-5.2872090339660645, 5.779764652252197], + [-2.220219612121582, 2.418985366821289], + [-4.082159996032715, 7.290091514587402], + [1.4333027601242065, 1.5130833387374878], + [1.4576139450073242, -7.184826374053955], + [-1.5951871871948242, 1.6613434553146362], + [-1.335669994354248, -3.6296956539154053], + [-0.46527355909347534, 0.3965529203414917], + [-5.466579914093018, -5.964944839477539], + [-3.4157583713531494, -3.621306896209717], + [9.061902046203613, -2.2959940433502197], + [-1.9996278285980225, -3.998084783554077], + [3.291463613510132, -4.667006492614746], + [-2.0659844875335693, 2.403432846069336], + [0.1348457932472229, 10.012310028076172], + [-6.68562650680542, 7.962131500244141], + [2.979339838027954, 6.948525905609131], + [1.8028678894042969, 4.628954887390137], + [-0.12204033881425858, 5.4714531898498535], + [4.1291069984436035, -6.304017543792725], + [4.746770858764648, 6.049384593963623], + [-2.391869068145752, 2.3148930072784424], + [9.612013816833496, -2.4340484142303467], + [0.4957110285758972, -0.5384160280227661], + [4.328846454620361, 7.099462032318115], + [4.189006805419922, -5.341390609741211], + [3.1567351818084717, 6.164977550506592], + [7.408383846282959, -2.4145960807800293], + [2.8787529468536377, -9.146921157836914], + [-5.913268566131592, -2.358891487121582], + [-2.0231587886810303, 2.3887059688568115], + [3.9421656131744385, -2.943915605545044], + [-7.094539165496826, -0.34268438816070557], + [-5.193362712860107, 5.840312957763672], + [1.3471344709396362, 3.700718641281128], + [6.923619270324707, 8.306839942932129], + [0.44171303510665894, -0.415859580039978], + [-1.949275016784668, 2.34833025932312], + [-2.568242311477661, -5.180042266845703], + [-3.6879074573516846, 5.362709045410156], + [4.1963372230529785, -6.221682548522949], + [-2.9801995754241943, 1.262021541595459], + [-0.018370695412158966, 10.428653717041016], + [-3.396703004837036, -4.337947845458984], + [0.24936234951019287, 0.5335572361946106], + [4.1770710945129395, -3.7530710697174072], + [-2.6042990684509277, 2.044660806655884], + [2.170037269592285, 1.91789710521698], + [-3.085089683532715, -0.39937078952789307], + [3.2032864093780518, -2.5047905445098877], + [3.9725115299224854, -7.570993900299072], + [-2.2095606327056885, 2.266187906265259], + [7.6439714431762695, -2.3446428775787354], + [0.7845816016197205, 0.408227801322937], + [-3.1305291652679443, -5.470345973968506], + [3.1492576599121094, -0.6425166726112366], + [7.779575824737549, 9.164613723754883], + [2.7140800952911377, -8.417311668395996], + [3.526832342147827, -5.7017364501953125], + [8.43040943145752, -2.204108238220215], + [-2.123425245285034, 2.607647180557251], + [3.1522152423858643, 1.5793023109436035], + [0.38317134976387024, -0.7864820957183838], + [-2.553161144256592, -3.7234013080596924], + [-0.10709685832262039, -1.6797170639038086], + [-1.4949074983596802, -1.3846882581710815], + [3.7582590579986572, -3.2278034687042236], + [3.390136241912842, -6.060192108154297], + [-4.787519931793213, -2.4466640949249268], + [4.672916412353516, 6.873722076416016], + [3.2423441410064697, 1.4368557929992676], + [0.013620547950267792, 13.477912902832031], + [1.2076735496520996, -5.155126571655273], + [-2.6266531944274902, 1.5573617219924927], + [-4.509549617767334, 4.585485458374023], + [1.6448756456375122, -8.157184600830078], + [-3.9928102493286133, 4.132410526275635], + [2.4563281536102295, -6.234372615814209], + [8.278400421142578, -2.2634637355804443], + [-0.052870817482471466, 9.117633819580078], + [5.894960403442383, -2.934727907180786], + [-0.03589338809251785, 13.280467987060547], + [-1.75643789768219, 2.3026435375213623], + [-5.136665344238281, 6.0201826095581055], + [-7.437932968139648, 8.751228332519531], + [-4.188390254974365, -5.947025299072266], + [7.928957462310791, -2.0470449924468994], + [-2.2000346183776855, 2.558171272277832], + [0.14049705862998962, -1.1923855543136597], + [-2.024510622024536, 1.300755500793457], + [1.4349853992462158, -6.743381977081299], + [0.07786589115858078, 11.613381385803223], + [-0.038674719631671906, 12.217885971069336], + [8.011717796325684, -2.1101086139678955], + [-4.844387531280518, -6.912600517272949], + [3.466803789138794, -5.18443489074707], + [-3.498626232147217, -0.9179787635803223], + [-2.2387607097625732, 2.208359479904175], + [-4.614505767822266, -1.5672024488449097], + [3.5167274475097656, -2.9667985439300537], + [-0.3239344358444214, -1.4923807382583618], + [2.264714479446411, 2.6536500453948975], + [7.263343811035156, -3.0509469509124756], + [7.005416393280029, -1.9076164960861206], + [-4.699429035186768, -2.0164270401000977], + [-5.5579752922058105, 5.374611854553223], + [5.140660285949707, -2.1302108764648438], + [9.457345962524414, -2.4226443767547607], + [0.1377078890800476, 9.823297500610352], + [8.797858238220215, -2.37548565864563], + [4.152717113494873, -3.378495454788208], + [-5.019153118133545, -0.7964146137237549], + [-4.765778064727783, -5.5593061447143555], + [-5.840692520141602, -0.014623884111642838], + [8.19959831237793, -2.258019208908081], + [-0.03122933954000473, -1.2801357507705688], + [-4.114885330200195, 4.262840747833252], + [-4.375340938568115, -7.145743370056152], + [-3.3332598209381104, 5.512041091918945], + [2.5207388401031494, -4.803414344787598], + [-3.5162932872772217, -4.823033332824707], + [3.246166706085205, 1.713499665260315], + [3.05595326423645, -4.0230536460876465], + [-1.7375710010528564, 1.0211623907089233], + [-2.924973487854004, -5.0372819900512695], + [3.269287109375, -6.398950576782227], + [-5.3624138832092285, -3.052229881286621], + [6.95173978805542, 8.370988845825195], + [-2.5619819164276123, -4.412901878356934], + [-4.182260036468506, -1.6357113122940063], + [-2.7265403270721436, -4.641921043395996], + [3.2427780628204346, 0.607491672039032], + [3.478893995285034, -5.359419345855713], + [7.811038494110107, 9.269004821777344], + [3.7520878314971924, -3.433464527130127], + [6.261536121368408, -2.496180772781372], + [-4.068851470947266, -3.364927053451538], + [-4.795740604400635, -6.237939834594727], + [-2.069244623184204, 2.4603545665740967], + [2.2940237522125244, 5.255699157714844], + [8.302290916442871, -2.2688255310058594], + [0.33994340896606445, -1.29958176612854], + [-1.2972934246063232, 2.0782573223114014], + [-4.921276569366455, -7.309054374694824], + [3.1782100200653076, 4.569703102111816], + [2.582378625869751, -3.6690523624420166], + [5.469023704528809, 6.869963645935059], + [-4.263315677642822, -5.907917499542236], + [-6.694656848907471, 7.174567222595215], + [1.6982802152633667, 4.729724884033203], + [4.079415798187256, -4.870294094085693], + [-2.903643846511841, -2.198667287826538], + [0.1151391789317131, 10.431672096252441], + [4.284371852874756, -2.801887035369873], + [-3.3227198123931885, 3.7129619121551514], + [3.7827789783477783, -7.5398149490356445], + [5.59780216217041, -1.2546610832214355], + [-6.288097858428955, 7.57000732421875], + [-1.6770668029785156, 2.2514827251434326], + [2.113518714904785, -2.954979658126831], + [2.301006555557251, -8.162819862365723], + [-2.085928201675415, -4.678173065185547], + [2.7102999687194824, -9.727518081665039], + [3.02386212348938, -4.300288200378418], + [-1.8984153270721436, 2.391843318939209], + [2.8555095195770264, -3.8953089714050293], + [-2.1430716514587402, 2.4753153324127197], + [3.1288135051727295, 6.546652317047119], + [0.26950353384017944, 11.18206787109375], + [2.390516519546509, -6.254055976867676], + [4.144904613494873, 6.90093469619751], + [-3.4618380069732666, 1.6651723384857178], + [-4.16752815246582, -2.951848268508911], + [0.09911661595106125, 10.928747177124023], + [8.055312156677246, -2.3044345378875732], + [-6.453036785125732, -1.0320271253585815], + [0.12036197632551193, 11.879682540893555], + [2.694309711456299, -2.8042328357696533], + [-4.3728156089782715, 4.676608085632324], + [-4.089727401733398, -3.1630055904388428], + [-4.239971160888672, -3.3699822425842285], + [-3.7036235332489014, 5.473998069763184], + [8.701468467712402, -2.3916091918945312], + [0.5779984593391418, -1.1435084342956543], + [2.4605624675750732, -4.715843200683594], + [5.741305828094482, 8.0535888671875], + [3.1899030208587646, -3.937544822692871], + [7.916777610778809, -2.1869823932647705], + [-0.05356831103563309, 13.561331748962402], + [-3.629354238510132, -5.856726169586182], + [2.6756045818328857, 1.9423182010650635], + [3.8897907733917236, 6.414549350738525], + [0.04582098871469498, -1.3499902486801147], + [-2.239201068878174, 2.8810911178588867], + [3.5366196632385254, -3.8202102184295654], + [-5.550239086151123, -1.0872455835342407], + [-5.4268598556518555, 4.3239827156066895], + [4.666994571685791, -2.3346121311187744], + [2.384065866470337, 4.654693126678467], + [8.30846881866455, -2.247321367263794], + [-1.718994140625, -4.570352554321289], + [1.5779873132705688, 4.618063449859619], + [-5.438391208648682, -4.011279106140137], + [0.10777287930250168, 8.984350204467773], + [3.3672292232513428, -7.755348205566406], + [3.195239305496216, 0.9126125574111938], + [8.179689407348633, -2.12837815284729], + [5.50695276260376, -2.168529748916626], + [5.458098888397217, 7.223523139953613], + [2.1766982078552246, -3.182913064956665], + [-3.53560471534729, -4.165469169616699], + [-2.0612804889678955, 3.969902753829956], + [7.256606578826904, -2.210566759109497], + [3.0189530849456787, -4.273906707763672], + [0.21616995334625244, 9.257928848266602], + [-2.677617073059082, -3.0443692207336426], + [-4.642238140106201, -6.141017436981201], + [3.2888524532318115, -8.309091567993164], + [-2.7355337142944336, 1.123280644416809], + [-4.310390949249268, -6.15656852722168], + [2.3192944526672363, 5.718263149261475], + [3.5842580795288086, -3.1672143936157227], + [-2.1363279819488525, 1.7572731971740723], + [2.9014124870300293, -9.980806350708008], + [-0.04424697905778885, 13.090042114257812], + [7.508170127868652, 8.92358684539795], + [0.2136005163192749, 9.309893608093262], + [3.505699396133423, -7.575430870056152], + [-2.2060296535491943, 2.2762677669525146], + [3.444774627685547, 6.185063362121582], + [2.5114572048187256, -3.6543281078338623], + [8.859148025512695, -2.42685866355896], + [2.344304323196411, -2.4756078720092773], + [9.33983325958252, -2.3105337619781494], + [5.745851993560791, -1.1848286390304565], + [-4.295216083526611, 4.6724677085876465], + [-2.5832579135894775, -3.1653878688812256], + [-4.1408467292785645, 4.9150567054748535], + [3.66545033454895, -2.6841514110565186], + [2.743570327758789, -3.737194299697876], + [-2.3024606704711914, -2.2918026447296143], + [6.853850841522217, 8.642356872558594], + [-4.0711493492126465, -5.60678768157959], + [2.6901209354400635, -8.090347290039062], + [2.8228695392608643, -3.91745924949646], + [-5.159838676452637, -0.321636438369751], + [4.532094478607178, 1.584036111831665], + [5.5613884925842285, -5.154771327972412], + [-6.881378650665283, 7.901473045349121], + [2.5106852054595947, -3.5441009998321533], + [6.26275634765625, 7.866433143615723], + [5.017784595489502, 7.495285987854004], + [-5.079859256744385, 4.118915557861328], + [1.474158763885498, 0.47082090377807617], + [3.0197174549102783, 4.435169219970703], + [9.5714750289917, -2.361539840698242], + [1.4226831197738647, -5.308241844177246], + [-3.9664762020111084, -6.003666877746582], + [-5.521831035614014, 6.830532073974609], + [12.055794715881348, -2.555018901824951], + [0.8173306584358215, 1.8778163194656372], + [5.14448881149292, -1.9176868200302124], + [3.2858307361602783, -5.7630133628845215], + [0.1775304675102234, 12.007184982299805], + [3.307488203048706, -5.100791931152344], + [-4.62256383895874, -6.295313835144043], + [3.669586658477783, -3.714559316635132], + [-6.942952632904053, 0.5993129014968872], + [-0.6434270739555359, -1.4370278120040894], + [4.3808465003967285, -7.343722343444824], + [-5.2700958251953125, 5.27409029006958], + [-4.988746166229248, 4.005654335021973], + [0.23616379499435425, 10.858742713928223], + [1.894260287284851, 0.8376455307006836], + [-0.34028059244155884, -1.8017754554748535], + [7.371880054473877, 8.744771957397461], + [2.3425896167755127, 1.6381653547286987], + [-1.9233438968658447, -3.9045050144195557], + [-1.5098159313201904, -0.3111005127429962], + [-4.775040149688721, -7.0856733322143555], + [-0.030554719269275665, 12.583791732788086], + [-4.43819522857666, -1.565238356590271], + [7.922339916229248, -2.1667323112487793], + [4.894973278045654, -4.32227897644043], + [2.871361494064331, -7.938932418823242], + [-1.7995686531066895, -3.1927149295806885], + [2.8987796306610107, -2.3488411903381348], + [-2.1622939109802246, 2.7189247608184814], + [-2.6970770359039307, 4.64616060256958], + [0.10878228396177292, 10.009712219238281], + [-0.06154870241880417, -1.620180368423462], + [9.263520240783691, -2.444255828857422], + [-2.222292184829712, 2.2928926944732666], + [0.05559157580137253, 12.792505264282227], + [4.545464992523193, -3.239025354385376], + [6.601058483123779, -4.846713542938232], + [2.006786584854126, 4.444857120513916], + [6.955045223236084, -4.230475425720215], + [-4.207849025726318, -6.345746994018555], + [2.6955904960632324, -3.795372247695923], + [-7.31688928604126, 0.5462744832038879], + [3.3414013385772705, -3.107638120651245], + [-3.4784281253814697, 5.973086357116699], + [2.1493899822235107, 5.281421661376953], + [-5.707718372344971, 6.929529666900635], + [-1.3583877086639404, 1.319644808769226], + [0.020740799605846405, 12.01418685913086], + [-2.3160924911499023, 1.9845868349075317], + [-2.659494400024414, 1.924108624458313], + [5.8235392570495605, -1.952684760093689], + [0.5291563868522644, -1.2176553010940552], + [7.0562968254089355, -1.5974289178848267], + [-2.3021531105041504, -1.4866660833358765], + [7.706354141235352, -1.9961239099502563], + [3.1701600551605225, -4.35124397277832], + [-2.278245210647583, 2.3158159255981445], + [0.04404842108488083, 9.43191146850586], + [6.323330402374268, 7.857090950012207], + [0.1242629811167717, 9.598006248474121], + [-1.7305799722671509, 1.0382128953933716], + [-4.737377643585205, 5.487813949584961], + [2.8556416034698486, 4.090030670166016], + [5.714946746826172, 7.389986038208008], + [-4.0485453605651855, -2.493496894836426], + [-4.04727840423584, 3.8560235500335693], + [2.7190682888031006, -8.613698959350586], + [3.3229923248291016, -7.827650547027588], + [6.816605091094971, -2.5781190395355225], + [2.220323324203491, 2.3949713706970215], + [7.915528297424316, -2.180231809616089], + [-0.006599076092243195, 9.442268371582031], + [3.42808198928833, -5.030792713165283], + [3.7849323749542236, -5.271574974060059], + [-2.277663469314575, 2.8145272731781006], + [0.1267591118812561, 10.134252548217773], + [3.8882811069488525, 1.5294455289840698], + [-4.700568199157715, 3.8501803874969482], + [9.087117195129395, -2.288417100906372], + [2.233746290206909, 5.136654853820801], + [0.4234556555747986, -1.0458675622940063], + [9.341526985168457, -2.302940607070923], + [8.214686393737793, -2.2405753135681152], + [3.917435884475708, 1.9589718580245972], + [9.815043449401855, -2.4617655277252197], + [-5.704514980316162, 7.2319793701171875], + [-0.012165255844593048, 9.656246185302734], + [-1.7058887481689453, 2.032484769821167], + [4.293894290924072, -3.7153189182281494], + [-2.0391860008239746, 2.3798508644104004], + [2.363255023956299, 5.093658447265625], + [-2.4342799186706543, -3.569959878921509], + [-4.664993762969971, -6.616634368896484], + [-0.03768546134233475, 9.527519226074219], + [5.252060413360596, 7.138513565063477], + [0.7652233242988586, -1.1269371509552002], + [0.4083999991416931, 11.202278137207031], + [4.1316237449646, -3.5545992851257324], + [-3.6052863597869873, -0.09659039974212646], + [-1.99582040309906, 2.3817501068115234], + [8.083553314208984, -2.3123281002044678], + [-4.248938083648682, -6.026837348937988], + [4.58980131149292, 6.000320911407471], + [-4.378594875335693, -6.361666202545166], + [7.348535060882568, 8.797399520874023], + [3.0295193195343018, -4.476797103881836], + [-4.725037097930908, 5.029205322265625], + [-3.880185604095459, -2.9879722595214844], + [2.3011250495910645, 6.584261894226074], + [-4.130813121795654, 8.003396987915039], + [-2.0920841693878174, 2.554980516433716], + [-4.051307201385498, -6.582413673400879], + [3.4270670413970947, 0.7312815189361572], + [-0.2711913585662842, -0.6003499031066895], + [-4.032337188720703, 3.8993422985076904], + [7.16693115234375, -1.6278175115585327], + [3.709059476852417, 6.73707389831543], + [-2.0767645835876465, 2.3866236209869385], + [1.4394395351409912, 5.181312084197998], + [2.029567003250122, 2.229159116744995], + [3.8513386249542236, -3.5551791191101074], + [7.71603536605835, -2.178123950958252], + [7.059559345245361, 8.46770191192627], + [-0.8529932498931885, 0.4153260588645935], + [4.178274631500244, -3.0137887001037598], + [9.72727108001709, -2.312950372695923], + [5.056590557098389, -4.045230388641357], + [-2.12138295173645, -3.5234549045562744], + [-2.148430109024048, -2.044290542602539], + [4.231287479400635, -8.77973461151123], + [3.5224952697753906, 7.128361701965332], + [-0.09588997811079025, -1.568731665611267], + [-2.031784772872925, 2.2706336975097656], + [0.42332935333251953, 4.478271007537842], + [8.020209312438965, -2.0912058353424072], + [-5.334906101226807, -2.0360591411590576], + [2.9114034175872803, 5.6475629806518555], + [7.937719821929932, -2.3142430782318115], + [-1.5854326486587524, 1.9626013040542603], + [6.4270339012146, -3.193037271499634], + [-0.004500813782215118, 12.625730514526367], + [-0.029365964233875275, 13.572134017944336], + [2.9636199474334717, -4.192690849304199], + [-4.491339206695557, -7.102105617523193], + [2.0533766746520996, 4.6812238693237305], + [2.4145781993865967, 3.7719149589538574], + [-1.452010989189148, -3.0338022708892822], + [1.8738216161727905, -8.483417510986328], + [8.076847076416016, -2.0470433235168457], + [-2.57342529296875, 1.456664800643921], + [-5.685513496398926, 7.796908855438232], + [3.861224412918091, -3.0389702320098877], + [4.6610894203186035, 6.46820068359375], + [-4.931551933288574, 5.560824871063232], + [-5.34915828704834, -0.7848851084709167], + [10.450665473937988, -2.5091004371643066], + [3.622775077819824, -4.4615559577941895], + [-2.4742681980133057, 1.2276924848556519], + [-6.78922700881958, 8.005011558532715], + [-3.7598540782928467, 4.2242279052734375], + [1.734418272972107, 1.5385879278182983], + [-2.4045376777648926, 2.4214041233062744], + [-1.4814053773880005, -3.5615670680999756], + [4.677764892578125, -2.972532033920288], + [0.4463677406311035, 9.77763843536377], + [3.209441900253296, -7.048227310180664], + [-4.84183931350708, -6.680734157562256], + [3.091717481613159, 6.011800765991211], + [5.90059232711792, 8.493728637695312], + [1.5154061317443848, 4.402885913848877], + [-5.8841986656188965, 7.042159080505371], + [-3.2439961433410645, 0.8042534589767456], + [7.916296005249023, -2.8280837535858154], + [3.354259729385376, -7.7436137199401855], + [-4.635956287384033, -7.095485687255859], + [2.6445205211639404, -8.976937294006348], + [-3.1195766925811768, 5.356040954589844], + [-4.893065929412842, -7.211116313934326], + [-3.072550058364868, 0.49899017810821533], + [8.244925498962402, -2.3790061473846436], + [7.24210786819458, -1.8492796421051025], + [-1.249777913093567, 1.536429762840271], + [4.3736677169799805, -2.9648635387420654], + [-2.0839428901672363, 2.5047037601470947], + [1.0693638324737549, -0.6100684404373169], + [-2.5374133586883545, 1.241620421409607], + [-2.40759539604187, 1.9884010553359985], + [-2.2177367210388184, -4.0211992263793945], + [6.717525959014893, -1.6694551706314087], + [3.085073232650757, -4.273941516876221], + [2.5422890186309814, -7.185333728790283], + [7.703736782073975, -2.300067663192749], + [-3.437593698501587, -3.4557082653045654], + [-3.377031087875366, -4.347746849060059], + [1.7149189710617065, 2.1178956031799316], + [7.660698413848877, -3.2618701457977295], + [0.047630779445171356, 2.174211263656616], + [-0.593601644039154, -1.5575376749038696], + [2.430356979370117, -6.108453750610352], + [4.396595001220703, 7.087318420410156], + [6.170074462890625, -1.2761162519454956], + [5.210461139678955, 7.416682243347168], + [-1.4905188083648682, -4.404943466186523], + [-5.843594074249268, 6.93576717376709], + [4.1523051261901855, 5.4837164878845215], + [3.419769525527954, 6.268924713134766], + [0.9390767216682434, -7.0038862228393555], + [-3.2005791664123535, -3.3867685794830322], + [-5.934958457946777, 7.853074073791504], + [0.5574036240577698, 10.418938636779785], + [-1.7491612434387207, -0.8948721885681152], + [-2.259341239929199, -3.1898205280303955], + [-5.987374782562256, 7.129082202911377], + [5.257162570953369, -1.8821579217910767], + [2.6807525157928467, -8.769975662231445], + [8.780728340148926, -2.328073263168335], + [-3.1491916179656982, -3.359025001525879], + [3.1478073596954346, -6.141697883605957], + [-5.112041473388672, -0.9753752946853638], + [7.745906352996826, -2.0597474575042725], + [-6.329315662384033, -0.10479199886322021], + [3.860741138458252, -1.6354607343673706], + [-4.333166122436523, -1.5152404308319092], + [-3.973665952682495, -1.4883393049240112], + [-1.7344591617584229, 2.4060144424438477], + [2.178607225418091, -1.9389702081680298], + [-5.327946186065674, 5.841097831726074], + [2.453986167907715, -3.671682834625244], + [8.589205741882324, -2.348520040512085], + [2.670755624771118, -4.5287885665893555], + [7.150326728820801, -2.627697229385376], + [-2.141061782836914, 2.1330676078796387], + [-3.540205955505371, -2.844303607940674], + [-5.181994915008545, -3.3831984996795654], + [-1.2100465297698975, 1.202710509300232], + [0.19556045532226562, 9.66816520690918], + [-2.149505615234375, -0.9067941308021545], + [1.3203606605529785, -5.464179992675781], + [4.819936275482178, 7.1128387451171875], + [3.448857545852661, -5.102046012878418], + [3.155559778213501, -4.134705066680908], + [1.9275600910186768, 3.217682123184204], + [-7.1982927322387695, 7.958858489990234], + [2.3581392765045166, 4.109644412994385], + [-4.177735805511475, -1.4487121105194092], + [0.0020212456583976746, 11.880924224853516], + [-4.839787483215332, -2.5106279850006104], + [8.41466999053955, -2.309579610824585], + [3.6449594497680664, -4.983591556549072], + [-4.377814292907715, 4.574225902557373], + [2.6731433868408203, -2.9050920009613037], + [2.709711790084839, -7.438266754150391], + [1.9321324825286865, 5.223415374755859], + [4.118747234344482, 6.697108268737793], + [-1.413557529449463, 1.224711537361145], + [0.040400318801403046, 10.303542137145996], + [2.9662702083587646, -4.209758758544922], + [1.443933367729187, -7.360943794250488], + [4.431161880493164, 5.695920467376709], + [-3.9231159687042236, -5.883249282836914], + [3.9230358600616455, -3.370252847671509], + [0.19760900735855103, 10.513818740844727], + [-2.4874587059020996, 2.365602731704712], + [-6.677506923675537, 8.435680389404297], + [-5.869059085845947, 5.075741767883301], + [2.899040460586548, -9.775277137756348], + [8.423760414123535, -2.703369140625], + [-0.033123679459095, 9.07406234741211], + [-1.9792664051055908, -1.495863914489746], + [-0.031184978783130646, 9.687461853027344], + [-2.7250442504882812, -4.523316860198975], + [2.473644495010376, -9.128355026245117], + [6.158646583557129, -1.360527515411377], + [2.4960930347442627, 4.975330352783203], + [4.266345500946045, 7.629961967468262], + [-2.227933645248413, 2.263273000717163], + [3.2376110553741455, -3.9338526725769043], + [-2.65997314453125, 1.794208288192749], + [3.7435405254364014, -3.613506555557251], + [-0.045589037239551544, 10.225044250488281], + [-1.0111138820648193, 0.7592067122459412], + [7.585290431976318, -2.434232473373413], + [1.9355981349945068, 3.156451463699341], + [-2.354954481124878, -1.7998157739639282], + [-4.479761600494385, -1.3561104536056519], + [-2.444422483444214, 0.4049941599369049], + [5.535961151123047, -5.712332725524902], + [-2.831087350845337, -3.1546523571014404], + [-5.804128170013428, -1.8289339542388916], + [-0.21377527713775635, -1.7995909452438354], + [6.848611354827881, -5.0456085205078125], + [2.94193434715271, -4.09062385559082], + [-2.624703884124756, 2.252044200897217], + [8.236554145812988, -2.1517159938812256], + [5.504974842071533, 6.973501205444336], + [0.17808347940444946, 10.240323066711426], + [7.6681952476501465, -2.006807804107666], + [3.543840169906616, -6.804683208465576], + [0.19723403453826904, 12.435220718383789], + [6.7860188484191895, -2.270981550216675], + [-2.5268497467041016, 2.3883957862854004], + [3.4212498664855957, -7.603116989135742], + [-2.340616226196289, 1.2424206733703613], + [-3.4892776012420654, 5.424006462097168], + [-4.50048303604126, -6.304701805114746], + [-4.558942794799805, -6.9395928382873535], + [2.9706408977508545, -4.193803310394287], + [3.714726209640503, 0.6847698092460632], + [-5.82700777053833, 6.437348365783691], + [-0.7562491297721863, -2.955906391143799], + [-2.487142324447632, 2.4406685829162598], + [-4.577580451965332, -3.3766095638275146], + [2.694770097732544, -8.308650016784668], + [0.13196063041687012, 10.040716171264648], + [-1.3631036281585693, 1.3051986694335938], + [-4.036489963531494, 5.752777576446533], + [-5.126067638397217, -3.1712772846221924], + [-4.321993350982666, 4.511475563049316], + [7.540574550628662, -2.3310835361480713], + [5.647903919219971, -4.766673564910889], + [2.3365628719329834, 4.320956230163574], + [0.20075565576553345, 11.42335319519043], + [-4.310145378112793, -6.915276050567627], + [2.961408853530884, 1.498328685760498], + [3.431147336959839, -3.6003077030181885], + [-2.809452533721924, -5.087806224822998], + [1.7347888946533203, -7.7408599853515625], + [-5.585041522979736, 5.283510684967041], + [-4.829963207244873, 5.810677528381348], + [4.3458333015441895, -4.136374473571777], + [-1.3431626558303833, 0.7341935038566589], + [2.1812820434570312, 2.9437148571014404], + [2.8079750537872314, -9.610983848571777], + [4.291877269744873, -2.674779176712036], + [-2.4166064262390137, 6.770161151885986], + [2.153700828552246, -8.962760925292969], + [-4.5530548095703125, 6.13899564743042], + [5.552588939666748, 6.999167442321777], + [4.35472297668457, 1.6608792543411255], + [-6.9684367179870605, 8.295862197875977], + [2.699398994445801, 2.096964120864868], + [-2.1693856716156006, -3.081463575363159], + [-2.011688470840454, 2.369745969772339], + [5.668432235717773, -4.792715072631836], + [2.82262921333313, -3.6899192333221436], + [7.508434295654297, 9.081295013427734], + [1.5617456436157227, 2.610706090927124], + [2.7902281284332275, -3.593647003173828], + [2.843806028366089, -3.9758870601654053], + [7.847331523895264, -2.8537776470184326], + [8.74160385131836, -2.521700620651245], + [9.665116310119629, -2.4013211727142334], + [0.204633891582489, 10.583821296691895], + [-6.589897155761719, 0.6079868674278259], + [-4.76411771774292, 3.847038984298706], + [-0.1351446807384491, -1.5113669633865356], + [-3.375969171524048, 0.5767427086830139], + [-2.8201119899749756, -5.354715347290039], + [-4.2736496925354, -5.804493427276611], + [2.3321008682250977, 2.601191759109497], + [-5.47020959854126, 4.583733558654785], + [3.021078109741211, -4.243579864501953], + [-7.612702369689941, -0.3861122131347656], + [-2.4217560291290283, 1.4290558099746704], + [-4.1619462966918945, -1.9954458475112915], + [-2.095022201538086, -3.749943494796753], + [3.581061601638794, -6.9933319091796875], + [3.8467984199523926, 1.494691014289856], + [2.899639844894409, -8.451007843017578], + [2.7305498123168945, 1.133256435394287], + [0.9065253138542175, -6.488737106323242], + [-2.012869119644165, 2.3309667110443115], + [4.955955982208252, -4.270688056945801], + [1.7489078044891357, 5.662355422973633], + [10.432544708251953, -2.4312744140625], + [9.027743339538574, -2.3696887493133545], + [-5.424652576446533, 4.851984977722168], + [-2.6458241939544678, -1.6936994791030884], + [-2.074817657470703, 2.36650013923645], + [-4.2057576179504395, 4.682321071624756], + [2.705225706100464, -9.069498062133789], + [-0.10257367044687271, -0.48730266094207764], + [8.418354988098145, -2.2108676433563232], + [-2.630542516708374, 1.8735063076019287], + [5.408614635467529, 7.450592994689941], + [-5.0572357177734375, -2.828418016433716], + [2.1370670795440674, -8.563640594482422], + [6.0612335205078125, -3.230006456375122], + [0.650440514087677, -6.435816287994385], + [-3.093705415725708, -2.5354902744293213], + [4.183385372161865, 6.886514663696289], + [-0.49518734216690063, -2.8512675762176514], + [5.742879867553711, 7.268714427947998], + [0.25658881664276123, 11.654254913330078], + [6.784369945526123, -1.4392865896224976], + [-2.9427006244659424, -4.947917938232422], + [2.908524513244629, -4.126575469970703], + [0.30343538522720337, 10.279699325561523], + [-5.333246231079102, 6.428949356079102], + [6.355649948120117, -2.941429853439331], + [2.106592893600464, -7.020207405090332], + [4.555832862854004, -7.099767684936523], + [3.168840169906616, -3.793274164199829], + [-4.826537609100342, -7.413815021514893], + [-4.748196601867676, 5.140782833099365], + [-5.815292835235596, 6.6070966720581055], + [7.995946407318115, -2.4561564922332764], + [-1.9481889009475708, 2.154728651046753], + [-5.497740268707275, -1.867515206336975], + [0.24879729747772217, 10.959365844726562], + [-4.126081943511963, 3.9833414554595947], + [3.9530322551727295, 1.3418635129928589], + [10.20051097869873, -2.470883846282959], + [3.3997573852539062, 1.8147894144058228], + [8.881979942321777, -2.368656873703003], + [-2.919482946395874, -1.444106936454773], + [2.3046188354492188, 1.6237026453018188], + [3.6113388538360596, -8.393324851989746], + [-5.588211536407471, -2.585808515548706], + [2.504678964614868, -8.602828025817871], + [10.735947608947754, -2.504605293273926], + [3.188974142074585, -4.500316619873047], + [8.463326454162598, -2.2538280487060547], + [2.054701566696167, 5.337846755981445], + [4.185488700866699, -3.6661760807037354], + [9.911202430725098, -2.3163254261016846], + [-2.260456085205078, 2.1270599365234375], + [-6.109402179718018, 5.081907272338867], + [-2.5775415897369385, -3.366764545440674], + [-5.2779011726379395, 3.0293586254119873], + [-3.606172800064087, 4.9950151443481445], + [0.08181457966566086, 12.841482162475586], + [-4.467130184173584, -7.390687942504883], + [7.677047252655029, -2.0511393547058105], + [-4.2387261390686035, -3.650723457336426], + [6.930878639221191, 8.399775505065918], + [4.658535480499268, 7.004683017730713], + [2.1494905948638916, 1.977822184562683], + [-4.385258674621582, -1.9295376539230347], + [7.224376201629639, -1.8729383945465088], + [-4.436799049377441, 3.69938063621521], + [2.527947425842285, -8.774279594421387], + [2.973255157470703, -4.248283386230469], + [7.172926425933838, -2.274045705795288], + [-6.911675930023193, -1.6464215517044067], + [0.23572325706481934, 10.164444923400879], + [0.22422167658805847, 1.1930938959121704], + [-4.888535022735596, -5.95671272277832], + [2.8731067180633545, -3.9830212593078613], + [-4.248388290405273, -0.8899478912353516], + [1.4774878025054932, -6.416363716125488], + [0.5502052903175354, -1.0930203199386597], + [-5.3983378410339355, -1.8859193325042725], + [-4.970178604125977, -1.9219605922698975], + [3.919942617416382, -6.108502388000488], + [-4.723715305328369, -3.176779270172119], + [7.032844543457031, -0.9317308664321899], + [0.307592511177063, 10.444395065307617], + [-1.5934780836105347, -3.1367642879486084], + [7.39216423034668, -4.744531154632568], + [-2.4837839603424072, 1.636006236076355], + [2.821194648742676, 1.0311942100524902], + [-2.491194009780884, 2.190467596054077], + [3.8162147998809814, 1.4664243459701538], + [-2.047351598739624, 2.399289608001709], + [-6.088283061981201, -1.609830617904663], + [8.903098106384277, -2.3280222415924072], + [-2.414332628250122, 2.5716733932495117], + [7.308991432189941, -1.7511570453643799], + [0.24209487438201904, 10.914828300476074], + [-4.954896926879883, -2.0045247077941895], + [-0.0223279669880867, 11.729639053344727], + [-2.099198341369629, 0.8189527988433838], + [7.505727767944336, -2.2378056049346924], + [9.46691608428955, -2.3501226902008057], + [-0.8595618605613708, -3.1774373054504395], + [-1.5894274711608887, -1.6989868879318237], + [-0.805295467376709, -1.8858875036239624], + [0.17984557151794434, 10.388142585754395], + [-5.3653740882873535, 6.102127552032471], + [2.81141996383667, 6.104476451873779], + [3.141850233078003, -2.818601369857788], + [1.412253975868225, 0.703932523727417], + [3.424583911895752, -6.170899391174316], + [2.3045694828033447, 5.448095321655273], + [8.003118515014648, -2.155442237854004], + [8.421947479248047, -2.515451192855835], + [-2.03206729888916, 2.799234628677368], + [4.03740930557251, -3.640294313430786], + [-5.393963813781738, 5.579689025878906], + [-4.985872268676758, -1.9899598360061646], + [3.2554242610931396, 1.1968997716903687], + [3.461980104446411, -4.887707710266113], + [3.5264949798583984, -3.7273285388946533], + [-4.658075332641602, -7.198830604553223], + [-2.453166961669922, 1.7257733345031738], + [-6.017284393310547, 4.330738544464111], + [-2.7431771755218506, 1.7741460800170898], + [3.2283897399902344, -7.997224807739258], + [0.0383332297205925, 11.778324127197266], + [5.976028919219971, -4.8242011070251465], + [1.1101939678192139, 2.4601526260375977], + [7.586480140686035, -1.7631666660308838], + [7.046628475189209, 8.468673706054688], + [3.068714141845703, -8.091700553894043], + [-4.160786151885986, -2.74570369720459], + [-2.7911365032196045, -5.092564105987549], + [5.834536552429199, 7.883574485778809], + [0.8074646592140198, 5.0368804931640625], + [-5.148304462432861, -6.515636444091797], + [3.9359047412872314, -3.4848978519439697], + [-7.479873180389404, 3.606001615524292], + [0.3510933518409729, 11.654172897338867], + [2.34434175491333, -4.942564010620117], + [1.9962694644927979, -1.0367475748062134], + [3.2725565433502197, -2.3667001724243164], + [3.731020212173462, -6.367649078369141], + [5.899420261383057, -2.909803628921509], + [1.4532175064086914, 5.502171516418457], + [9.706439018249512, -2.4949018955230713], + [-0.015564389526844025, 11.903510093688965], + [-2.335101366043091, 1.4087274074554443], + [2.419398307800293, -4.869502067565918], + [2.907768964767456, -3.80287504196167], + [-5.739131450653076, 4.816884994506836], + [-6.0593743324279785, -1.3163646459579468], + [-4.5899505615234375, -3.1214826107025146], + [0.9151864647865295, -6.696625232696533], + [-3.918018102645874, -1.3029922246932983], + [-0.6775325536727905, -1.1893863677978516], + [3.493682622909546, -7.123377323150635], + [7.476556301116943, -1.9774471521377563], + [-3.554490804672241, -2.6456215381622314], + [7.569850444793701, -2.4653453826904297], + [-3.068084955215454, 3.3122546672821045], + [-4.132327556610107, 2.1004319190979004], + [0.3222379684448242, 11.065760612487793], + [-3.722554922103882, -2.8760013580322266], + [5.532295227050781, 7.993389129638672], + [-4.6290106773376465, 4.472264289855957], + [-5.482372283935547, -3.075209140777588], + [-3.6794872283935547, -5.1722517013549805], + [0.13283666968345642, -4.209478855133057], + [5.971512317657471, -5.1421122550964355], + [3.1332077980041504, -4.461433410644531], + [-0.01614660769701004, 12.80128002166748], + [-2.0565648078918457, 2.3801262378692627], + [5.521694183349609, 7.32269287109375], + [-0.6118970513343811, -2.457868814468384], + [1.1972205638885498, -2.3780360221862793], + [2.6441996097564697, 5.355628967285156], + [-2.861358880996704, 0.6991440057754517], + [5.4183220863342285, -1.3529058694839478], + [3.3468358516693115, -3.4273488521575928], + [-4.249272346496582, 4.712800025939941], + [6.357149600982666, -1.3878026008605957], + [2.8476083278656006, -3.2030951976776123], + [3.0273542404174805, -9.222585678100586], + [6.104132175445557, 7.739163875579834], + [10.87842845916748, -2.463761568069458], + [-4.529726505279541, -3.707170248031616], + [1.2129048109054565, -6.587118148803711], + [1.2128455638885498, 11.617401123046875], + [-5.091122627258301, 5.337719917297363], + [8.770392417907715, -2.249678611755371], + [-4.513270378112793, -2.2877607345581055], + [2.589246988296509, -8.199783325195312], + [0.955771267414093, 0.056438568979501724], + [0.23439747095108032, 11.15550422668457], + [3.504920244216919, -3.300767183303833], + [-5.82796573638916, 6.249197483062744], + [2.045665979385376, 2.5649683475494385], + [5.431417942047119, -0.22496813535690308], + [3.177659511566162, -6.967136859893799], + [1.359968900680542, 5.6604461669921875], + [5.8915228843688965, -3.3499090671539307], + [8.806225776672363, -2.521707773208618], + [3.2245395183563232, -10.54060173034668], + [-3.160815477371216, 4.604508399963379], + [-2.0072367191314697, 2.145775556564331], + [-4.123662948608398, 6.551064968109131], + [3.4110164642333984, -3.7546613216400146], + [-4.772593021392822, -6.725503444671631], + [9.337756156921387, -2.2969605922698975], + [-0.279554545879364, -1.2753955125808716], + [2.658827066421509, -4.219033241271973], + [-3.8120930194854736, 6.768908500671387], + [-3.427316427230835, -5.553628921508789], + [2.963186025619507, 1.7306181192398071], + [2.9282824993133545, -3.9718825817108154], + [-6.058387279510498, 7.904181480407715], + [3.5644783973693848, -5.574079513549805], + [-2.3169469833374023, 2.0153281688690186], + [2.069965362548828, -7.8698015213012695], + [-4.663510322570801, 3.798255205154419], + [-4.183385848999023, 6.177309989929199], + [-0.6633045077323914, 1.2464061975479126], + [-2.5089447498321533, 2.2687737941741943], + [-3.326927423477173, 4.640557289123535], + [1.610914945602417, -0.6283637285232544], + [3.6479573249816895, -6.382054328918457], + [1.6824686527252197, 0.39883577823638916], + [8.154586791992188, -2.211151123046875], + [-4.583761692047119, -3.937011957168579], + [0.07204138487577438, 12.198009490966797], + [0.19656038284301758, 10.457138061523438], + [-1.9092837572097778, 2.072885274887085], + [-6.274245738983154, -2.39119029045105], + [-0.9265933036804199, 1.6166568994522095], + [3.8449013233184814, 1.5737160444259644], + [-5.360659599304199, 5.422758102416992], + [10.45828914642334, -2.4601895809173584], + [-7.214668273925781, 8.469867706298828], + [-2.9439821243286133, 3.3538057804107666], + [-3.209207534790039, -3.4979374408721924], + [-0.2741784453392029, 10.933624267578125], + [2.307642698287964, -2.831979274749756], + [-2.280385732650757, 2.3870503902435303], + [2.191119909286499, -0.31633442640304565], + [2.9059064388275146, -8.360424995422363], + [0.22230017185211182, -1.479001760482788], + [0.02280443161725998, 12.631092071533203], + [-2.179227828979492, -0.15900355577468872], + [3.1157026290893555, -4.373711585998535], + [1.573443055152893, 5.1696882247924805], + [-4.579808235168457, 3.58646297454834], + [3.8717892169952393, -7.3515849113464355], + [-1.9055423736572266, 2.4595606327056885], + [3.64066743850708, -7.652317047119141], + [-0.1354547142982483, 12.689817428588867], + [-3.8983657360076904, -2.3710641860961914], + [0.35237279534339905, -0.5155088305473328], + [5.5567851066589355, -2.0786871910095215], + [3.0877692699432373, -2.75049090385437], + [-3.587728977203369, -3.155952215194702], + [-2.1336305141448975, -3.4243619441986084], + [1.9994275569915771, -6.36987829208374], + [2.952645778656006, -4.046411037445068], + [-0.06171209365129471, -1.4260371923446655], + [-2.5325539112091064, 1.8297075033187866], + [3.199016809463501, 0.6702794432640076], + [1.89579439163208, -3.998272657394409], + [4.154635906219482, 1.9830456972122192], + [-3.690955877304077, -5.947599411010742], + [6.653692722320557, 8.035880088806152], + [0.18599992990493774, 9.703792572021484], + [-4.4114203453063965, -6.764189720153809], + [10.240935325622559, -2.395034074783325], + [2.019544839859009, 6.016866683959961], + [6.460300922393799, 7.916544437408447], + [1.8328028917312622, 5.554060459136963], + [1.4085910320281982, -7.032440185546875], + [-1.9042820930480957, -3.5951263904571533], + [-2.5613768100738525, 2.108076333999634], + [1.92018723487854, 3.068990468978882], + [5.775583744049072, 7.674927711486816], + [2.0755622386932373, -8.31805419921875], + [-2.129810094833374, 2.579810380935669], + [0.07670771330595016, 10.061201095581055], + [5.640659809112549, -2.761291265487671], + [-5.185609340667725, 1.6284688711166382], + [3.6835100650787354, -3.3920023441314697], + [-4.678784370422363, -5.702260971069336], + [0.5197296738624573, -0.9850555658340454], + [-2.0857458114624023, 2.4620025157928467], + [8.682476043701172, -2.3730666637420654], + [3.5210516452789307, -3.026775598526001], + [4.769413471221924, -4.211051940917969], + [-4.681344985961914, -1.30997633934021], + [6.112802505493164, 8.021112442016602], + [2.755647659301758, -3.8972768783569336], + [1.711954951286316, -0.23073332011699677], + [4.369112968444824, 7.094729900360107], + [2.995027780532837, -8.057050704956055], + [-4.829575061798096, -6.976104736328125], + [3.9869625568389893, -6.625880718231201], + [0.02674078196287155, 9.609358787536621], + [0.14084118604660034, 10.070358276367188], + [-5.273455619812012, 3.3858511447906494], + [3.000725030899048, -7.813171863555908], + [4.123500347137451, -3.760378122329712], + [-6.402614593505859, -0.9770687818527222], + [-6.120301723480225, -1.367245078086853], + [-5.541371822357178, 5.755405426025391], + [-2.1605336666107178, -0.4330613315105438], + [0.08133793622255325, -1.2223573923110962], + [1.4221386909484863, -7.509529113769531], + [3.2277719974517822, 0.6663771867752075], + [1.9611937999725342, -6.9934821128845215], + [-6.59682035446167, -1.563456416130066], + [8.888720512390137, -2.5791234970092773], + [2.519639730453491, 7.742722511291504], + [-2.515739917755127, 1.8937174081802368], + [-2.460961103439331, 1.5318800210952759], + [-0.9593228697776794, 1.0683279037475586], + [5.390632629394531, -1.0383713245391846], + [-4.189642906188965, -6.705126762390137], + [-0.8194185495376587, -3.170149087905884], + [-6.551427364349365, 7.678606033325195], + [-5.711143970489502, -1.8118962049484253], + [6.177294731140137, 7.830751895904541], + [-3.3862664699554443, 3.33048415184021], + [-2.3864128589630127, -3.556283950805664], + [-3.4506118297576904, -5.935326099395752], + [4.728144645690918, -3.3273861408233643], + [-2.4731292724609375, 2.231855869293213], + [6.808315753936768, 8.183958053588867], + [1.5140981674194336, 4.78618049621582], + [5.507593154907227, -6.994995594024658], + [-1.4146466255187988, 1.7917662858963013], + [-6.891613483428955, 0.0488274060189724], + [0.7526618838310242, -5.950951099395752], + [0.2641989588737488, 11.352792739868164], + [6.902346134185791, -5.597812652587891], + [1.3203463554382324, 6.596994400024414], + [-4.444638729095459, -0.4419076442718506], + [4.527029037475586, 1.6991227865219116], + [8.112401008605957, -2.393120527267456], + [-2.0490481853485107, 2.453113317489624], + [-0.01289195567369461, 8.072799682617188], + [4.133004188537598, -1.372642159461975], + [1.9837243556976318, -6.021778106689453], + [4.548548221588135, 6.954636096954346], + [-3.568377733230591, 5.704655647277832], + [-2.163344144821167, 2.0999560356140137], + [-4.540675163269043, 4.066671371459961], + [-6.622681617736816, -1.0312261581420898], + [-2.1545464992523193, 2.4256343841552734], + [0.16484379768371582, 10.228874206542969], + [4.338413715362549, 1.9104204177856445], + [0.16639924049377441, 9.228120803833008], + [4.23375940322876, -3.448061466217041], + [5.158989429473877, 6.469241142272949], + [-6.086755752563477, -1.1439852714538574], + [3.948314905166626, -3.3177011013031006], + [-4.8756327629089355, -7.419418811798096], + [3.907177209854126, -3.381805896759033], + [-3.1188807487487793, -4.804907321929932], + [-2.5414741039276123, 2.08561635017395], + [3.681981325149536, -3.077366590499878], + [-0.008113197982311249, -1.6986122131347656], + [-2.445178985595703, -3.7514798641204834], + [3.145012617111206, -6.362861633300781], + [-2.091186761856079, 1.8175256252288818], + [5.11262845993042, 7.140751838684082], + [4.714051723480225, 7.172532558441162], + [7.237421989440918, -5.678154945373535], + [-0.33370399475097656, 0.4101858139038086], + [0.21407848596572876, 10.588848114013672], + [8.689094543457031, -2.5786664485931396], + [-2.1535511016845703, 2.689282178878784], + [2.247670888900757, -2.034015655517578], + [11.36922550201416, -2.49739146232605], + [-4.118093967437744, -0.5075154304504395], + [2.9353623390197754, -8.236411094665527], + [-2.8531744480133057, 5.244378089904785], + [-2.2758629322052, -2.9843173027038574], + [3.375856876373291, -3.939199686050415], + [5.749312877655029, -3.3899481296539307], + [-4.649426460266113, -3.380169630050659], + [-4.1410980224609375, 4.53748893737793], + [4.0458149909973145, -2.1638729572296143], + [-2.1213464736938477, -2.592697858810425], + [0.2532561421394348, 11.267426490783691], + [6.336666107177734, 7.727434158325195], + [2.621711492538452, -8.095842361450195], + [0.6489291787147522, -1.1440496444702148], + [1.0865797996520996, -0.4455198645591736], + [3.3232901096343994, -0.25264039635658264], + [-5.401214122772217, 6.137948036193848], + [6.091469764709473, -5.58821964263916], + [3.2987143993377686, -4.713170051574707], + [0.005719117820262909, 12.665763854980469], + [3.4561216831207275, -3.735346794128418], + [3.9685208797454834, -3.977525234222412], + [3.221116304397583, -2.5878469944000244], + [7.8983988761901855, -3.1786038875579834], + [1.0787534713745117, -0.5909237861633301], + [-4.394981861114502, -6.745031356811523], + [-2.3707492351531982, 2.012535810470581], + [4.4424333572387695, 1.8037735223770142], + [3.198789358139038, -6.251075744628906], + [0.23089617490768433, 12.430561065673828], + [6.435335636138916, -2.6911418437957764], + [0.06493430584669113, 11.453909873962402], + [5.204927444458008, -4.165473937988281], + [6.588117599487305, -3.776787519454956], + [0.08266247063875198, -1.4748506546020508], + [-6.659489154815674, 7.445453643798828], + [5.201811790466309, -4.56862735748291], + [1.8644263744354248, -0.13273021578788757], + [-2.4988114833831787, -4.082665920257568], + [2.1738171577453613, 1.5762163400650024], + [1.8955405950546265, -5.339544773101807], + [3.6292123794555664, -7.274402618408203], + [-2.522179126739502, 1.8530155420303345], + [-0.027640052139759064, 13.175962448120117], + [-2.5345194339752197, 2.3111040592193604], + [0.12248002737760544, 9.733765602111816], + [9.203721046447754, -2.35739803314209], + [-1.884554386138916, -0.5609645843505859], + [-5.183586597442627, 6.4454731941223145], + [-0.215448796749115, 9.455652236938477], + [5.652150630950928, 7.001698017120361], + [-6.094801902770996, 7.344451904296875], + [8.285869598388672, -2.4915151596069336], + [-3.133941173553467, 2.7313802242279053], + [7.137284755706787, 8.827582359313965], + [-2.0163803100585938, 2.251420497894287], + [-0.16530877351760864, 0.4002688527107239], + [5.944126129150391, 7.618019104003906], + [3.5495665073394775, -5.482840061187744], + [-0.05751252919435501, 9.72120475769043], + [-2.3482658863067627, 1.9285759925842285], + [-6.396182537078857, -2.3428728580474854], + [6.143315315246582, -6.388956546783447], + [3.675034523010254, -3.530259609222412], + [-2.033005475997925, 2.6144609451293945], + [3.2919235229492188, -6.856160640716553], + [-5.389750003814697, 1.13740074634552], + [-5.433708667755127, -1.80637526512146], + [0.5949816703796387, -2.6444618701934814], + [2.98404860496521, -4.223114967346191], + [1.1749564409255981, 1.62604558467865], + [-2.030689239501953, 2.0138039588928223], + [2.321148157119751, 5.575889587402344], + [-4.095530986785889, -3.2465193271636963], + [-7.945242404937744, -0.4304307699203491], + [-6.447899341583252, 7.3929972648620605], + [-4.898618698120117, 8.142916679382324], + [-5.178225994110107, -3.380845069885254], + [2.8237216472625732, 4.5498552322387695], + [3.188037633895874, -8.48188304901123], + [-6.370992183685303, 7.180258274078369], + [-6.432891845703125, 0.6622337102890015], + [-5.47619104385376, 8.585824966430664], + [0.27511727809906006, 5.364288806915283], + [-2.6332409381866455, -1.0049846172332764], + [-2.1476340293884277, 2.4202730655670166], + [-2.17328143119812, -5.599020004272461], + [-3.8692920207977295, -6.215033531188965], + [-1.1430116891860962, 1.767304539680481], + [3.8151605129241943, -3.3764729499816895], + [-6.779911518096924, 7.94521427154541], + [2.6268560886383057, 5.788038730621338], + [-6.537271022796631, 8.40798568725586], + [5.823535919189453, 7.804161071777344], + [3.4783926010131836, 6.278012275695801], + [3.744131326675415, -6.844260215759277], + [-2.1511600017547607, -2.979487180709839], + [2.9217450618743896, -4.004617691040039], + [1.503614902496338, 4.743896484375], + [-5.67324686050415, 7.079847812652588], + [3.8585023880004883, -3.3943428993225098], + [0.4046494662761688, -0.8812620639801025], + [-0.9321938753128052, 1.1460093259811401], + [-2.2434585094451904, 2.615286350250244], + [3.916046380996704, -2.8645384311676025], + [-4.5458502769470215, -7.517496109008789], + [10.545523643493652, -2.54392409324646], + [10.229084968566895, -2.502703905105591], + [3.2356560230255127, -4.195788383483887], + [6.644695281982422, -1.9370094537734985], + [-5.481639385223389, 8.706878662109375], + [-2.8394150733947754, -4.659390926361084], + [-1.275056004524231, -3.05126690864563], + [-3.09367299079895, -5.055019855499268], + [-3.7286956310272217, 0.29397398233413696], + [-5.20706033706665, -3.2698962688446045], + [-4.5219221115112305, -7.55397891998291], + [3.237271785736084, -2.244929552078247], + [-2.3105783462524414, 1.6014963388442993], + [3.0272483825683594, -3.4614288806915283], + [9.899832725524902, -2.448561906814575], + [0.187483012676239, 10.418174743652344], + [6.045449733734131, 7.530984401702881], + [-1.3292485475540161, 1.6246674060821533], + [3.129403829574585, -4.408698558807373], + [-2.3787753582000732, 1.043784499168396], + [-4.0126752853393555, 5.682204723358154], + [1.3762860298156738, 0.8506634831428528], + [-4.126767635345459, 4.630029201507568], + [3.381782054901123, 6.010348796844482], + [6.921756267547607, -5.866767883300781], + [1.3585113286972046, 2.0358002185821533], + [6.915801525115967, -1.6341184377670288], + [-1.1467468738555908, -0.23684008419513702], + [6.1474528312683105, -2.7408902645111084], + [3.258096694946289, -4.5832719802856445], + [-2.3678550720214844, 1.9475525617599487], + [-0.04838169366121292, 12.08877182006836], + [4.724527359008789, 7.0673017501831055], + [-1.4574425220489502, 5.25261116027832], + [-6.6157989501953125, 1.908337950706482], + [0.06979256123304367, 12.336151123046875], + [-4.174628734588623, 5.678565979003906], + [-2.40826416015625, 1.6022189855575562], + [1.9411296844482422, 0.26444610953330994], + [12.034331321716309, -2.657425880432129], + [7.939037799835205, -2.7729580402374268], + [-5.8740644454956055, 4.554725170135498], + [10.92667293548584, -2.5255539417266846], + [5.9936017990112305, -3.1804163455963135], + [-4.261562824249268, 3.9276421070098877], + [-1.4523011445999146, 1.9040720462799072], + [8.15314769744873, -2.2069904804229736], + [-4.25183629989624, -2.862766742706299], + [-2.065016984939575, 2.5073752403259277], + [-4.2411322593688965, -4.642326831817627], + [2.4164602756500244, 5.747293472290039], + [7.494907855987549, -1.778849720954895], + [0.028860382735729218, 9.899946212768555], + [2.82222056388855, -9.083725929260254], + [0.21422582864761353, 12.707534790039062], + [2.6098906993865967, -4.704173564910889], + [10.026607513427734, -2.498281240463257], + [2.13674259185791, 2.762148141860962], + [-3.972059965133667, -1.465093731880188], + [-6.03300142288208, 7.187045574188232], + [2.7196648120880127, -3.74613881111145], + [-2.100480079650879, 2.323961019515991], + [3.0667290687561035, -4.27612829208374], + [8.607644081115723, -2.576543092727661], + [3.3278775215148926, -6.49862813949585], + [-4.57162618637085, -3.603778600692749], + [-6.417233467102051, 3.3988680839538574], + [4.1786322593688965, 6.72395133972168], + [3.89076566696167, -8.616104125976562], + [4.2987542152404785, -3.177391290664673], + [3.528557538986206, -6.679263114929199], + [-4.841651439666748, 4.4738311767578125], + [-2.4386448860168457, 0.45468711853027344], + [3.3345513343811035, -4.904577255249023], + [1.1080174446105957, 12.42972183227539], + [7.076785087585449, -1.6728824377059937], + [-2.6301820278167725, -3.35123872756958], + [1.932837724685669, -7.037437438964844], + [3.446275234222412, -6.9638895988464355], + [3.7031667232513428, -0.5824048519134521], + [1.3168319463729858, -6.985784530639648], + [-4.494513034820557, -4.933840751647949], + [2.552863121032715, -7.936776161193848], + [-1.984100341796875, -0.8280549049377441], + [-2.288285493850708, 2.226966619491577], + [-5.852243900299072, 7.004072666168213], + [8.250665664672852, -2.3036293983459473], + [-3.5108377933502197, -5.768391132354736], + [4.345632076263428, 7.183601379394531], + [-2.5360429286956787, 1.9449920654296875], + [2.69305682182312, 0.6490637063980103], + [-2.180408239364624, 2.3815925121307373], + [-4.831090450286865, -6.794660568237305], + [0.712673008441925, -0.8690635561943054], + [-4.0264692306518555, 6.750839710235596], + [2.9648711681365967, -2.8456668853759766], + [-7.05259370803833, 8.3004150390625], + [-2.2422783374786377, -1.1216332912445068], + [0.24411886930465698, 11.315155029296875], + [3.7545597553253174, 6.012665748596191], + [-7.389995574951172, 1.4108226299285889], + [-2.9382996559143066, 5.826661109924316], + [6.335761070251465, -3.1076009273529053], + [0.1106443926692009, 11.757211685180664], + [0.12593889236450195, 9.887163162231445], + [-4.823779106140137, 2.292611837387085], + [-4.149256706237793, 4.7599287033081055], + [-2.68597674369812, -5.043237686157227], + [-6.324929237365723, 7.143129348754883], + [-3.3228843212127686, -5.294491767883301], + [-0.3538290560245514, -2.387584924697876], + [-2.6280782222747803, 2.0798842906951904], + [3.130704641342163, -9.412004470825195], + [1.923142671585083, -8.600545883178711], + [3.9357903003692627, -3.3576512336730957], + [8.775556564331055, -2.362264394760132], + [0.13499116897583008, 9.778274536132812], + [6.448135852813721, -2.360459089279175], + [-3.539728879928589, -4.311655044555664], + [-2.5417914390563965, 1.6801995038986206], + [3.4571146965026855, -7.513249397277832], + [2.517822742462158, -8.751214981079102], + [2.5626370906829834, -3.8607583045959473], + [-6.312257289886475, 0.6825964450836182], + [2.589353322982788, 3.6171152591705322], + [6.523104190826416, 8.353408813476562], + [7.238215923309326, 8.60669231414795], + [3.0394179821014404, -4.352755546569824], + [-4.704522609710693, -6.864933967590332], + [2.978020429611206, 1.262042760848999], + [-0.020820684731006622, 13.151233673095703], + [-4.757904529571533, 3.909700393676758], + [0.26844996213912964, 11.170748710632324], + [-7.796702861785889, -0.047895196825265884], + [2.34397292137146, -8.605120658874512], + [1.0628857612609863, 10.951089859008789], + [-5.990615367889404, 0.2748650312423706], + [-5.328304767608643, -0.9940556287765503], + [-0.004055701196193695, -1.3523048162460327], + [-2.2709708213806152, 2.199575901031494], + [7.391129016876221, 8.78222370147705], + [5.856549263000488, 7.953027725219727], + [3.353745698928833, -4.298434734344482], + [-5.026437282562256, 4.468395233154297], + [1.735600233078003, 0.06663663685321808], + [2.855388641357422, 7.047513008117676], + [-2.1921982765197754, 1.19333016872406], + [-2.070587635040283, 2.4523558616638184], + [-4.908179759979248, -0.5777888894081116], + [1.6804444789886475, -2.6775143146514893], + [7.113285064697266, 8.528708457946777], + [-2.224386692047119, 2.2404892444610596], + [9.368427276611328, -2.3371527194976807], + [-4.6348557472229, -0.2823253870010376], + [1.412492036819458, -6.857854843139648], + [-1.9849799871444702, 1.779213786125183], + [1.9277470111846924, 3.4286956787109375], + [-1.1683276891708374, -0.5826138257980347], + [1.6238343715667725, 2.4878337383270264], + [-5.146920680999756, -0.40936028957366943], + [3.3346192836761475, 7.658022880554199], + [0.7686302065849304, 6.3236894607543945], + [2.7843005657196045, 3.1777048110961914], + [9.748510360717773, -2.3975844383239746], + [2.280268907546997, -8.180381774902344], + [3.4744622707366943, -5.293774604797363], + [-3.9206318855285645, -2.83776593208313], + [3.0339748859405518, -4.256355285644531], + [4.819442272186279, -1.3912166357040405], + [1.53550386428833, -7.69760274887085], + [-1.7566194534301758, -3.2464449405670166], + [0.17504268884658813, 10.168922424316406], + [5.731370449066162, -7.498280048370361], + [-4.837109088897705, 5.797734260559082], + [3.028618335723877, 0.45516085624694824], + [6.475407123565674, -1.3768961429595947], + [5.900698661804199, -1.6827706098556519], + [3.055865526199341, -4.29627799987793], + [4.882714748382568, -4.345610618591309], + [5.717676639556885, -3.375129222869873], + [8.792415618896484, -2.210258722305298], + [2.704385280609131, 0.8394991159439087], + [-3.804624557495117, 5.191725254058838], + [1.7814475297927856, 5.371603965759277], + [-1.7686924934387207, 1.1851682662963867], + [2.5499155521392822, -7.612236976623535], + [8.495514869689941, -2.4208810329437256], + [0.01378130167722702, 9.53598690032959], + [0.12950235605239868, 11.285799026489258], + [3.1002278327941895, -3.394185781478882], + [4.683324813842773, 7.799668312072754], + [-1.8779933452606201, 1.6753007173538208], + [4.04855489730835, 1.4647189378738403], + [6.31034517288208, -1.1988630294799805], + [5.3814167976379395, -1.2133877277374268], + [1.813951015472412, -4.533293724060059], + [10.759209632873535, -2.547311544418335], + [3.7090680599212646, 5.661351203918457], + [-4.412571430206299, -5.886523246765137], + [4.042139530181885, -3.4865520000457764], + [-0.04205305129289627, 13.526216506958008], + [-0.8040268421173096, 1.6668366193771362], + [-3.985560655593872, -6.208449363708496], + [1.663155436515808, 4.783775806427002], + [-4.207850933074951, -6.664916038513184], + [-6.104437351226807, 6.764888763427734], + [9.422440528869629, -2.431917905807495], + [-3.6389849185943604, 5.610145092010498], + [-5.241349220275879, 5.28256893157959], + [-5.185267448425293, -6.251484394073486], + [3.8636786937713623, 6.700505256652832], + [3.075075149536133, -4.301954746246338], + [3.6894917488098145, -8.452695846557617], + [3.31571102142334, 8.563759803771973], + [-1.6549906730651855, -3.2962646484375], + [-3.5524330139160156, -4.879297733306885], + [3.4341084957122803, -3.9086670875549316], + [6.998733043670654, -2.3407540321350098], + [3.3943607807159424, -5.532402038574219], + [5.962221622467041, 7.284256458282471], + [-5.340490818023682, -3.631866216659546], + [-5.15101432800293, -6.361255645751953], + [6.689626216888428, -1.7686291933059692], + [5.5894880294799805, 7.8624162673950195], + [-4.1907429695129395, -5.737105369567871], + [-3.1494863033294678, 1.2954543828964233], + [2.8873836994171143, -7.669336318969727], + [-4.111678600311279, 3.656358003616333], + [3.618145227432251, -3.246619462966919], + [8.743674278259277, -2.3055527210235596], + [-1.4079375267028809, -3.860821008682251], + [-3.972450017929077, -6.01580286026001], + [2.017591714859009, -6.496341705322266], + [-4.190913677215576, -5.383476257324219], + [3.265596866607666, -3.57137131690979], + [-5.035775661468506, 5.882696151733398], + [-4.308241367340088, -6.362428665161133], + [2.1035964488983154, 5.533702850341797], + [0.285683810710907, 10.680294036865234], + [-4.431996822357178, -6.55869722366333], + [-5.218907833099365, 5.269496917724609], + [-0.11343152076005936, -1.9891475439071655], + [0.7385910153388977, -6.0791826248168945], + [2.3230550289154053, 0.30374544858932495], + [5.182749271392822, 7.1582159996032715], + [-0.8896597623825073, -2.7843120098114014], + [-4.5110087394714355, -6.411433219909668], + [-3.9576449394226074, -6.339428901672363], + [-3.7577614784240723, 5.519742012023926], + [-4.755153656005859, -6.8904523849487305], + [-3.6934401988983154, 6.655143737792969], + [3.1694817543029785, -2.9794490337371826], + [-4.306965351104736, -6.041977405548096], + [5.634158611297607, 7.4031147956848145], + [-4.614964008331299, 5.190621376037598], + [-2.5718982219696045, -1.4071403741836548], + [-5.476464748382568, -2.824399471282959], + [6.291060924530029, -1.3697047233581543], + [1.474867343902588, 1.9243171215057373], + [-4.764168739318848, -0.46938782930374146], + [1.65883469581604, -0.35231631994247437], + [6.828866481781006, -1.8179677724838257], + [-0.052541203796863556, 13.185344696044922], + [2.8070828914642334, 3.6430280208587646], + [-5.569966793060303, -2.3826799392700195], + [3.049125909805298, -5.517114162445068], + [-2.0297837257385254, 2.2233364582061768], + [1.4399852752685547, 1.928287386894226], + [-4.659761905670166, -5.821678161621094], + [-3.7283408641815186, 5.708862781524658], + [3.5270779132843018, -1.5737725496292114], + [8.507706642150879, -2.2511579990386963], + [-4.633111000061035, -6.85645866394043], + [-6.627288341522217, 7.759762763977051], + [3.053417444229126, -4.364954471588135], + [-4.401687145233154, -2.3665354251861572], + [-2.2301182746887207, 6.363532543182373], + [-3.614065170288086, -3.1390137672424316], + [5.1053786277771, -1.0862919092178345], + [5.322650909423828, 7.334254741668701], + [-1.706275463104248, -1.0691620111465454], + [2.7992732524871826, -4.854831695556641], + [-4.3022141456604, -1.4489541053771973], + [4.24044942855835, -3.9681198596954346], + [-3.0941145420074463, -3.5643248558044434], + [3.3452095985412598, -3.310716390609741], + [-2.8977549076080322, -4.942344665527344], + [2.6621954441070557, -3.674989938735962], + [0.00770985335111618, 9.132572174072266], + [8.321026802062988, -2.213981866836548], + [2.669503927230835, -7.693159103393555], + [4.055948734283447, -3.3692781925201416], + [10.20373249053955, -2.445810079574585], + [-3.6889941692352295, 6.195934295654297], + [1.678936243057251, 3.8552486896514893], + [-4.52797269821167, -4.7836594581604], + [-4.848966121673584, -6.40239953994751], + [-6.437782287597656, 0.6077854633331299], + [0.029354862868785858, 12.61196517944336], + [7.626939296722412, -4.054828643798828], + [-4.765468120574951, -7.12985372543335], + [1.4375197887420654, -4.943053245544434], + [7.934882640838623, -2.5166819095611572], + [3.235945224761963, -4.138853073120117], + [3.798049211502075, 6.041159629821777], + [-6.124147891998291, 8.349946022033691], + [6.182552814483643, 7.633830547332764], + [5.602484703063965, -0.38675037026405334], + [2.6573171615600586, -5.702171325683594], + [3.192537546157837, -0.4176666736602783], + [1.064252495765686, -5.127771377563477], + [0.515041708946228, 11.591705322265625], + [3.481048107147217, -4.377223014831543], + [-4.140200138092041, -2.778808355331421], + [-4.690768241882324, -7.119448661804199], + [-2.6374728679656982, -2.9022395610809326], + [3.9171159267425537, -3.5290029048919678], + [1.6610761880874634, 6.03912353515625], + [-6.2545552253723145, 7.797187805175781], + [1.05794095993042, 4.7334980964660645], + [1.8112854957580566, 4.685727119445801], + [1.9636433124542236, -6.432272434234619], + [3.5788378715515137, 5.346436500549316], + [2.792884588241577, -3.609564781188965], + [2.257258176803589, -5.495135307312012], + [6.062867164611816, -6.775866508483887], + [-2.48024582862854, 1.891961693763733], + [2.984861135482788, -4.2832746505737305], + [-3.1549789905548096, -5.549010276794434], + [5.644803524017334, -1.1990989446640015], + [8.663679122924805, -2.346400737762451], + [5.2254157066345215, 7.459104061126709], + [-2.9657175540924072, -3.528780698776245], + [-5.560776233673096, 5.681453704833984], + [-0.32172203063964844, 9.169189453125], + [2.491460084915161, -9.209614753723145], + [2.4886066913604736, -6.01043701171875], + [5.934300899505615, -2.005906343460083], + [2.8959097862243652, -4.000354766845703], + [-2.0811402797698975, 2.0007495880126953], + [-2.2520744800567627, -3.550837755203247], + [-4.115108966827393, 5.401191234588623], + [-4.339416980743408, -6.774560928344727], + [-2.7345504760742188, 4.431844234466553], + [-3.062361001968384, 6.069618225097656], + [6.035263538360596, 7.415909290313721], + [-4.66104793548584, -6.875215530395508], + [3.1716248989105225, -3.93863582611084], + [3.4944663047790527, -3.107239007949829], + [-1.8778811693191528, 1.9870563745498657], + [2.4105536937713623, 2.273587465286255], + [-4.40920352935791, -6.167244911193848], + [-5.370234489440918, 5.917036533355713], + [8.805493354797363, -2.26642107963562], + [3.886134147644043, -7.8213090896606445], + [1.566371202468872, 6.023037910461426], + [-0.5586251616477966, -2.6431472301483154], + [-3.7787249088287354, -5.757987976074219], + [2.312105655670166, 2.954080820083618], + [4.387360095977783, 1.8810495138168335], + [-0.8942432999610901, 0.029298465698957443], + [-2.4432432651519775, -5.449080467224121], + [-2.360684633255005, 2.2408225536346436], + [-4.5904459953308105, -6.868159294128418], + [0.29626184701919556, 10.617091178894043], + [-6.101170539855957, -2.1907896995544434], + [3.417156219482422, -3.833449363708496], + [-0.12799182534217834, -1.529740571975708], + [-2.613391160964966, 5.292586326599121], + [1.9670507907867432, 5.020105361938477], + [-2.0282418727874756, -4.1549577713012695], + [-2.84645676612854, 2.768953800201416], + [7.219686985015869, -1.907301425933838], + [2.332080125808716, 4.6529974937438965], + [6.01206111907959, -1.3629931211471558], + [-1.6123931407928467, -3.9242262840270996], + [6.157546520233154, -2.792781114578247], + [-2.8313980102539062, -5.260666847229004], + [4.185368061065674, -3.5258467197418213], + [-5.077262878417969, 5.702077865600586], + [-5.555418491363525, 7.79340934753418], + [-5.652439594268799, 6.4775919914245605], + [2.609372854232788, -7.950539588928223], + [-2.211580991744995, 1.7783604860305786], + [3.92751145362854, -3.6509902477264404], + [2.6891748905181885, -7.864436149597168], + [-2.1319353580474854, -3.1765801906585693], + [-6.389604091644287, 2.8391613960266113], + [0.05253463238477707, 13.369125366210938], + [-4.277042865753174, -3.8038668632507324], + [-3.600275754928589, -0.9887531995773315], + [7.53754186630249, -2.135495662689209], + [-0.04170805960893631, 12.162026405334473], + [-4.285809516906738, -6.436289310455322], + [3.2364180088043213, 1.4456979036331177], + [-3.1288769245147705, -3.9586598873138428], + [6.104259967803955, -2.638524293899536], + [-4.615466594696045, -6.8736090660095215], + [-5.4226202964782715, 4.979074478149414], + [-2.144134283065796, 2.3243401050567627], + [1.9232909679412842, 3.205782890319824], + [-3.7068464756011963, -3.274848699569702], + [1.6370933055877686, 2.155898094177246], + [9.42977523803711, -2.343167304992676], + [3.382277727127075, 4.929509162902832], + [2.485213279724121, -9.341976165771484], + [3.127443552017212, -4.235551357269287], + [2.035839319229126, 1.9464707374572754], + [-3.9899637699127197, -5.802400588989258], + [7.2078776359558105, 8.66080379486084], + [-2.1190760135650635, -0.6503332257270813], + [2.1768572330474854, -5.001914978027344], + [-7.3501811027526855, 8.642552375793457], + [7.867874622344971, -2.3693864345550537], + [-3.9411776065826416, -2.804692029953003], + [8.386933326721191, -2.3920328617095947], + [8.336067199707031, -2.220461368560791], + [-2.389679431915283, 6.709167957305908], + [2.8912150859832764, -9.53896713256836], + [3.107149839401245, -8.860906600952148], + [-2.9794180393218994, 5.277034282684326], + [-1.7718961238861084, -2.267893075942993], + [2.594465494155884, -9.412036895751953], + [4.320201396942139, 1.797551155090332], + [-0.5340373516082764, 0.28665706515312195], + [4.182289123535156, -4.7534003257751465], + [1.0195094347000122, 6.182602882385254], + [-3.6426141262054443, -5.513072967529297], + [3.280379056930542, -3.411203145980835], + [-5.096661567687988, -3.5440328121185303], + [0.009610824286937714, 12.18153190612793], + [-3.910573720932007, -2.4951651096343994], + [2.6841647624969482, 0.5271608829498291], + [-3.514225482940674, -1.7652877569198608], + [0.3532279133796692, 10.614620208740234], + [9.820000648498535, -2.4175398349761963], + [1.8537157773971558, 5.1985554695129395], + [-3.902179002761841, -0.7815059423446655], + [5.085705280303955, -3.438310384750366], + [6.114953517913818, -1.3690177202224731], + [-0.48324358463287354, 1.0261510610580444], + [1.6613142490386963, -8.274213790893555], + [2.3436784744262695, 2.6724441051483154], + [-2.329458475112915, -2.5366244316101074], + [0.944299042224884, 2.9453463554382324], + [0.11261361092329025, 9.84375286102295], + [-1.9526233673095703, 1.4175626039505005], + [-0.8923075795173645, -3.3230082988739014], + [-5.348841190338135, 7.892577171325684], + [-3.024935007095337, 1.6881362199783325], + [-0.8419857621192932, -2.8060805797576904], + [3.129131555557251, -6.793919563293457], + [-2.5858471393585205, -4.698266983032227], + [-1.2864630222320557, 5.196545124053955], + [3.5583152770996094, -3.6172454357147217], + [-3.699688196182251, 5.628984451293945], + [4.8265862464904785, -3.669534206390381], + [-3.2072227001190186, -5.970672130584717], + [-3.8028578758239746, -0.13970130681991577], + [5.8277716636657715, -1.523549199104309], + [-2.2222673892974854, 2.434407949447632], + [9.127835273742676, -2.3928139209747314], + [2.412461042404175, -8.773832321166992], + [5.376524448394775, 7.229208946228027], + [-3.6863982677459717, 7.867362022399902], + [2.3065226078033447, -2.931105375289917], + [-3.266361713409424, 3.268498420715332], + [4.767108917236328, -1.0669366121292114], + [-5.039464473724365, -2.9057905673980713], + [6.140063762664795, 7.544394493103027], + [-2.9540085792541504, 1.6202346086502075], + [-5.599303722381592, 6.837265968322754], + [1.1114658117294312, -5.906071186065674], + [4.273256301879883, -3.483656406402588], + [2.218430757522583, 0.8315737247467041], + [9.484468460083008, -2.364131212234497], + [8.189214706420898, -2.2815210819244385], + [-2.0861120223999023, 2.2638611793518066], + [-1.061137318611145, 0.44064879417419434], + [7.141410827636719, -1.8066335916519165], + [4.318127632141113, -3.7293877601623535], + [3.632655382156372, -0.7702067494392395], + [-6.355872631072998, -1.9257512092590332], + [1.679713487625122, 1.8167569637298584], + [-4.087826251983643, -2.747164249420166], + [5.975827693939209, -1.3077155351638794], + [-1.9819555282592773, -4.152054786682129], + [-1.7970616817474365, 5.097378253936768], + [-4.7481770515441895, -2.2646470069885254], + [-6.339969158172607, 7.979612350463867], + [-3.8262393474578857, -3.5653128623962402], + [-1.8493027687072754, 0.6236668825149536], + [-3.975087881088257, -0.6502584218978882], + [-0.34733641147613525, 0.25745224952697754], + [-5.054305553436279, -1.4919580221176147], + [5.926442623138428, 7.780213832855225], + [-1.528265357017517, 1.693207859992981], + [-2.318364381790161, 1.648647427558899], + [0.626700222492218, -0.9483870267868042], + [-2.457880735397339, 1.4616947174072266], + [-6.551975727081299, 1.5493377447128296], + [0.1919209361076355, 11.387490272521973], + [-0.055345870554447174, -0.5949230194091797], + [2.0364229679107666, -6.724733352661133], + [9.828156471252441, -2.4527881145477295], + [1.0613495111465454, 0.9673503637313843], + [3.474820375442505, -2.2727301120758057], + [-3.211317300796509, -2.3449718952178955], + [-3.6679635047912598, -0.2640438675880432], + [2.7361066341400146, -6.267254829406738], + [3.714155435562134, -1.7590848207473755], + [0.9200754761695862, 6.113566875457764], + [3.454836368560791, -3.50490403175354], + [2.8977527618408203, -9.766983985900879], + [0.1948765516281128, 10.406106948852539], + [-4.258912563323975, -2.5939486026763916], + [2.5235435962677, 5.7270121574401855], + [-3.4851739406585693, 3.298321485519409], + [-4.201399326324463, -6.193331718444824], + [1.9648234844207764, -5.688733100891113], + [5.734208583831787, 7.8839521408081055], + [1.4760464429855347, 0.9560763835906982], + [-2.405179262161255, 1.3073171377182007], + [3.49068021774292, -3.803818464279175], + [-6.120579719543457, 5.734786510467529], + [-1.5076600313186646, 1.8333024978637695], + [9.711637496948242, -2.289715528488159], + [3.071697950363159, -8.402748107910156], + [7.903057098388672, -2.1387412548065186], + [3.646209239959717, -3.953514575958252], + [-2.35671067237854, 1.354537844657898], + [-3.1749799251556396, 5.398103713989258], + [1.8403468132019043, -0.9370964765548706], + [-2.5824520587921143, 1.8000723123550415], + [3.510427713394165, 1.3090957403182983], + [-0.10442236810922623, -1.627548098564148], + [0.12633055448532104, 12.121535301208496], + [-2.2289845943450928, -3.0241222381591797], + [2.3135082721710205, -8.197431564331055], + [6.780111789703369, -2.772101640701294], + [9.862518310546875, -2.39975905418396], + [1.118046522140503, 1.0003864765167236], + [6.351489543914795, 8.103912353515625], + [-6.16035795211792, -2.9270973205566406], + [4.028330326080322, -3.6953327655792236], + [-4.973597526550293, 4.535270690917969], + [-6.412240505218506, 7.681648254394531], + [-2.461360454559326, 1.7811262607574463], + [-0.04660434275865555, 13.348287582397461], + [-2.473466157913208, -3.898266315460205], + [4.6527581214904785, -3.9958114624023438], + [-4.094241619110107, -3.363983392715454], + [-4.06565523147583, -1.833579421043396], + [-2.426873207092285, 2.130406379699707], + [1.0173511505126953, 0.8628751039505005], + [2.9984970092773438, -4.22041130065918], + [0.36269211769104004, 12.86927604675293], + [-2.47489857673645, 1.897169828414917], + [2.8940021991729736, 1.6262651681900024], + [0.0959811732172966, 0.6271848678588867], + [3.074153184890747, -3.821380376815796], + [8.821084022521973, -2.2853214740753174], + [3.243911027908325, -4.913968086242676], + [-0.07858294993638992, 13.59341049194336], + [-2.8814358711242676, 0.6991166472434998], + [-0.006927259266376495, 8.87331771850586], + [-4.698974132537842, 3.5173914432525635], + [-2.1140809059143066, -3.584073543548584], + [2.779707193374634, -8.076017379760742], + [0.1706189513206482, 12.170416831970215], + [4.119350910186768, -3.612943172454834], + [-2.0904297828674316, 2.51189923286438], + [2.206691265106201, 2.60225510597229], + [-0.03094453364610672, 12.82193374633789], + [2.7322802543640137, 4.440920829772949], + [4.1903605461120605, -3.604357957839966], + [-2.6588709354400635, -2.81486177444458], + [6.821211814880371, -1.53546941280365], + [5.015413761138916, -6.7484259605407715], + [1.7859660387039185, -6.991185665130615], + [-4.389857292175293, 4.59376335144043], + [3.3980367183685303, -7.924302101135254], + [-4.9352545738220215, -1.9769238233566284], + [-6.0906901359558105, 0.4059429168701172], + [-3.769434690475464, -3.3116681575775146], + [1.1564700603485107, -6.993138790130615], + [1.463810920715332, -0.6771969795227051], + [-4.06522798538208, -6.3035736083984375], + [3.311617136001587, 1.811808705329895], + [-2.764639377593994, -5.480914115905762], + [-1.701460838317871, 2.511091947555542], + [-4.836324691772461, 4.682584285736084], + [5.292665958404541, 6.863170623779297], + [-4.311009407043457, -6.3450775146484375], + [5.757872104644775, -1.451720118522644], + [9.05753231048584, -2.3500239849090576], + [2.9173147678375244, -4.107776641845703], + [3.4962105751037598, -9.253219604492188], + [8.523087501525879, -2.7307097911834717], + [3.026458263397217, -9.191600799560547], + [7.9278788566589355, -2.0530178546905518], + [-2.207728385925293, 2.1762101650238037], + [-2.4813427925109863, 2.06126070022583], + [-0.018930740654468536, -1.57547128200531], + [3.163496732711792, -8.23897647857666], + [-4.894801616668701, -6.349706172943115], + [-2.129004716873169, 2.6181857585906982], + [3.2613956928253174, -3.9194109439849854], + [7.454973220825195, -2.4660794734954834], + [2.5493485927581787, -3.7473320960998535], + [-2.1017277240753174, -2.061785936355591], + [2.203639507293701, -7.318465232849121], + [-4.884365558624268, -6.502257347106934], + [4.365602016448975, -5.336819648742676], + [-4.149735927581787, -5.916633605957031], + [4.027093410491943, -2.014838695526123], + [3.3594250679016113, -3.963789224624634], + [-3.270977258682251, -5.180904388427734], + [1.4421303272247314, 3.1791412830352783], + [-4.381668567657471, -1.4778538942337036], + [-4.421873569488525, 2.91582989692688], + [2.600912570953369, -7.527198314666748], + [-6.283070087432861, 7.185209274291992], + [-2.4141061305999756, -4.667595863342285], + [2.199507713317871, 6.401399612426758], + [-2.0232062339782715, 2.5328104496002197], + [4.159815311431885, 1.9189177751541138], + [-2.4075469970703125, 1.5044478178024292], + [-4.2693352699279785, -1.8446468114852905], + [-1.5924352407455444, -4.194404602050781], + [0.8870842456817627, -6.118541717529297], + [-6.9773640632629395, 8.180360794067383], + [0.13960427045822144, 9.78664493560791], + [8.377424240112305, -2.426239252090454], + [3.108891248703003, 1.4304057359695435], + [3.349503517150879, -3.3534462451934814], + [-3.2997586727142334, 5.379652976989746], + [1.925304651260376, -7.335820198059082], + [-4.886698246002197, 5.451811790466309], + [3.7677676677703857, -1.7988396883010864], + [-2.1990489959716797, 2.0098612308502197], + [3.4600236415863037, -5.270236492156982], + [-1.992281436920166, 2.650847911834717], + [1.8064777851104736, 5.3123779296875], + [-3.953623056411743, -5.661396026611328], + [6.307346820831299, -1.6919749975204468], + [4.267420291900635, -2.964679718017578], + [-0.1122167780995369, 9.413963317871094], + [-6.859670162200928, 7.492218494415283], + [0.0014783069491386414, 13.056832313537598], + [-3.657421350479126, -6.176455974578857], + [6.993205547332764, -2.134617805480957], + [2.2842743396759033, 5.812456130981445], + [2.5506067276000977, -7.237919330596924], + [-1.4835286140441895, 2.0404746532440186], + [3.627159595489502, 0.9204348921775818], + [2.242810010910034, 2.599388360977173], + [0.2202405333518982, 9.659957885742188], + [0.005949549376964569, 9.543230056762695], + [9.952779769897461, -2.4462904930114746], + [-4.09893274307251, 5.126552581787109], + [-6.150290489196777, 2.354234457015991], + [-5.22456169128418, -3.029541015625], + [2.965686321258545, 6.342033386230469], + [7.293595790863037, 8.74693489074707], + [5.679694175720215, -4.084178447723389], + [-4.258981704711914, 4.873989582061768], + [3.8108887672424316, 6.3940019607543945], + [0.3559401035308838, 11.177484512329102], + [3.1199965476989746, 2.056413173675537], + [10.087899208068848, -2.356680154800415], + [-2.3398213386535645, 2.448828935623169], + [-3.2445669174194336, 4.417132377624512], + [-3.479512929916382, 5.40482234954834], + [-6.066674709320068, 2.6014926433563232], + [7.97151517868042, -2.2290806770324707], + [3.0166923999786377, -4.18006706237793], + [-4.346219539642334, -1.0352860689163208], + [2.7799103260040283, -3.962489366531372], + [4.731423377990723, -1.4341169595718384], + [2.9648849964141846, -8.123163223266602], + [6.106834888458252, -1.2495125532150269], + [4.74188756942749, -4.155174255371094], + [-4.941978931427002, 5.277773857116699], + [1.0294456481933594, -0.49665728211402893], + [1.4867498874664307, 1.90912663936615], + [6.841158866882324, -4.968980312347412], + [-2.9398200511932373, -1.0637980699539185], + [0.250118613243103, 9.790311813354492], + [-4.812604904174805, -4.105466842651367], + [-6.4940924644470215, 7.537806034088135], + [2.158367156982422, -3.847876787185669], + [0.1358361840248108, 11.53069019317627], + [1.7575936317443848, -6.823447227478027], + [3.107250452041626, -8.46513557434082], + [-3.5822675228118896, -0.29656779766082764], + [-5.939202785491943, 6.178863525390625], + [-2.3150084018707275, -4.197519302368164], + [3.5649914741516113, 6.376916408538818], + [10.53564167022705, -2.658275842666626], + [2.818068742752075, -7.069341659545898], + [6.392637252807617, -1.3345791101455688], + [1.715381145477295, 5.327231407165527], + [5.403438568115234, -1.793381690979004], + [-6.244176387786865, 7.33056640625], + [-2.462714910507202, 1.680132508277893], + [4.049287796020508, -7.2935991287231445], + [4.231801986694336, 6.970903396606445], + [5.177257537841797, -0.8950256705284119], + [1.1179182529449463, -6.8191633224487305], + [-4.1393327713012695, -6.332386016845703], + [4.518378257751465, 6.2954421043396], + [0.0013520047068595886, 13.66696548461914], + [-6.268957138061523, -0.9188422560691833], + [1.1537408828735352, 0.3113833963871002], + [4.298457622528076, -4.013267993927002], + [-1.2495901584625244, 2.1017544269561768], + [2.0251376628875732, 2.68505597114563], + [-0.46505266427993774, 1.2351748943328857], + [3.0977325439453125, -9.036401748657227], + [-1.1268998384475708, -3.7871062755584717], + [2.8035056591033936, 1.4709810018539429], + [6.267733097076416, -1.448125958442688], + [-4.282229423522949, 7.706499099731445], + [-7.107644557952881, 8.047064781188965], + [6.119573593139648, 7.755743980407715], + [-1.4877212047576904, -2.6681742668151855], + [0.39613592624664307, -0.7997322678565979], + [2.4727976322174072, 0.12450537085533142], + [3.041868209838867, 5.243294715881348], + [-5.398049831390381, 2.650085687637329], + [3.1613502502441406, 1.3556300401687622], + [9.40915584564209, -2.374129056930542], + [0.930716335773468, -3.930751085281372], + [-3.367281675338745, -3.842897653579712], + [10.723403930664062, -2.445495128631592], + [6.57426118850708, -1.501494288444519], + [-3.109314441680908, -1.1353371143341064], + [2.8931334018707275, -4.1229753494262695], + [-0.06620316952466965, -3.0491082668304443], + [-2.879431962966919, -4.91575813293457], + [-4.531990051269531, 4.907224655151367], + [1.386887788772583, 2.890533685684204], + [0.18297255039215088, 9.915356636047363], + [1.4539165496826172, -7.460649490356445], + [-3.96952748298645, -5.960447788238525], + [-4.6839470863342285, -7.211855888366699], + [-5.125767230987549, 6.019595146179199], + [-3.4865171909332275, -4.597606658935547], + [1.9671015739440918, 5.243165016174316], + [-1.695777177810669, 1.5719707012176514], + [-0.7898072600364685, 2.2483294010162354], + [4.57863187789917, -2.257521152496338], + [-4.1228461265563965, 4.201791286468506], + [-1.5348880290985107, 4.866977691650391], + [-1.2520558834075928, -1.2047065496444702], + [4.209521770477295, -1.883489966392517], + [-4.760354518890381, -6.604382514953613], + [0.1126091405749321, 9.74176025390625], + [-1.5770702362060547, 0.8435655832290649], + [5.476095676422119, 6.730645656585693], + [3.8562774658203125, 0.6460384726524353], + [-4.6604814529418945, -7.308431625366211], + [-2.9471213817596436, 6.987461566925049], + [-2.119382619857788, -3.0470263957977295], + [1.1711878776550293, 9.53941535949707], + [2.958799123764038, -7.084422588348389], + [8.28739070892334, -2.7177271842956543], + [3.8582780361175537, -3.2838633060455322], + [-4.597448825836182, -2.776116371154785], + [-4.344125270843506, -6.885751724243164], + [-2.83962082862854, -4.952584266662598], + [-0.22303354740142822, 9.768608093261719], + [3.348827362060547, -3.3703696727752686], + [1.067240834236145, -0.2886379659175873], + [-2.4140658378601074, 1.4163016080856323], + [5.092499256134033, -4.566075325012207], + [7.953821659088135, -2.2358648777008057], + [-0.05697257071733475, 13.636295318603516], + [3.3808324337005615, -6.068576812744141], + [-4.720980167388916, -1.6610088348388672], + [-2.1550495624542236, 2.514183759689331], + [-4.460026264190674, -6.716921806335449], + [2.642158269882202, 6.274885177612305], + [-3.180292844772339, -4.749247074127197], + [-6.349786281585693, 7.482241153717041], + [3.5059714317321777, -3.5404224395751953], + [4.635949611663818, -8.141281127929688], + [-3.0980732440948486, 0.9543194770812988], + [-2.1440672874450684, -3.5878183841705322], + [2.2433249950408936, -8.163419723510742], + [-1.788775086402893, 0.7694704532623291], + [4.252377033233643, -0.5909574031829834], + [-4.303559303283691, 5.4682745933532715], + [-1.4485875368118286, 1.8415635824203491], + [8.18947696685791, -2.3640449047088623], + [1.609595775604248, -6.8983683586120605], + [-5.772477626800537, -2.5232553482055664], + [1.9360065460205078, -6.840522766113281], + [-0.7606812119483948, 1.5244596004486084], + [-2.0488381385803223, 2.3519184589385986], + [0.20659500360488892, -1.476199984550476], + [0.07430463284254074, 9.555251121520996], + [-4.973636150360107, 7.043462753295898], + [-4.929744243621826, -0.04618281498551369], + [-4.71386194229126, -5.85075569152832], + [-4.940099239349365, -1.5429879426956177], + [2.959597587585449, -4.1182098388671875], + [-4.806059837341309, 4.6056928634643555], + [-5.234666347503662, -2.7477734088897705], + [-4.609136581420898, 5.7932891845703125], + [3.5554187297821045, -6.776805877685547], + [0.5310709476470947, 0.8142890930175781], + [8.3469877243042, -2.662567377090454], + [2.618278980255127, -9.221450805664062], + [6.258857727050781, 7.786782264709473], + [-5.771669864654541, 4.5011444091796875], + [6.471203327178955, 7.862216949462891], + [4.060214519500732, 6.789541244506836], + [3.9115400314331055, -8.113218307495117], + [-4.701085567474365, 5.607437610626221], + [2.3649017810821533, -7.096053600311279], + [-5.816762447357178, -0.5008078813552856], + [2.868948221206665, -3.375900983810425], + [-6.064093112945557, 6.847527503967285], + [-1.8194630146026611, 0.7161911129951477], + [-1.3884390592575073, 0.7210739850997925], + [8.258259773254395, -2.3155009746551514], + [4.494720935821533, 1.8440805673599243], + [-6.535959720611572, 7.768901348114014], + [2.971510887145996, 1.9045909643173218], + [2.8024096488952637, -5.480801582336426], + [3.7768421173095703, 6.521570205688477], + [-2.159447431564331, 1.3545104265213013], + [-4.284170627593994, 2.965531826019287], + [2.8246917724609375, -4.065373420715332], + [2.919945478439331, -3.845597267150879], + [1.432964563369751, -6.650562286376953], + [-3.4004456996917725, -0.5686384439468384], + [-2.0750200748443604, 2.5329935550689697], + [-2.5027904510498047, 1.8495564460754395], + [0.28127753734588623, 11.043397903442383], + [7.800605297088623, -2.1998164653778076], + [5.6443867683410645, -1.2601618766784668], + [-2.421100378036499, -0.91657954454422], + [-0.8874090909957886, -1.176829218864441], + [1.7937381267547607, 2.2136709690093994], + [0.07141827791929245, -1.2214632034301758], + [-2.0440421104431152, 2.376086473464966], + [4.457645893096924, -3.9535205364227295], + [-0.036781854927539825, 13.340900421142578], + [2.565718173980713, 4.3284711837768555], + [-6.447598457336426, 7.1313796043396], + [2.527404546737671, 4.269213676452637], + [2.287224054336548, 0.7778874635696411], + [9.543084144592285, -2.324427604675293], + [1.868472933769226, 4.637989044189453], + [3.2685790061950684, -3.906864643096924], + [3.9394752979278564, -4.127939224243164], + [-0.6839457750320435, 1.563594102859497], + [-4.714947700500488, -3.0897347927093506], + [3.1428403854370117, -3.3709635734558105], + [3.7069876194000244, 6.574102401733398], + [3.5822737216949463, 1.7213636636734009], + [10.990012168884277, -2.507939100265503], + [-0.1628192961215973, -1.5962210893630981], + [5.4863409996032715, -1.1728936433792114], + [4.113790512084961, -8.862664222717285], + [8.391963005065918, -2.1343801021575928], + [2.875136613845825, -3.944822072982788], + [2.4052717685699463, -8.913902282714844], + [2.2621755599975586, 5.170907020568848], + [3.5592634677886963, -7.632046699523926], + [-7.0761590003967285, -0.362987756729126], + [-1.8459382057189941, -3.979804039001465], + [-4.2462029457092285, -6.3972320556640625], + [6.1486029624938965, 7.697515487670898], + [0.010090939700603485, 8.722408294677734], + [-3.0728981494903564, -4.011485576629639], + [-3.7239062786102295, -0.6015865206718445], + [-4.595077991485596, -6.518435001373291], + [-4.119656562805176, -6.735872268676758], + [9.113923072814941, -2.4546773433685303], + [9.685696601867676, -2.4246654510498047], + [10.13818359375, -2.478013277053833], + [-6.74296236038208, 4.686009407043457], + [-3.229837656021118, -1.9646178483963013], + [5.462602138519287, 7.062350273132324], + [7.904338359832764, -2.0830843448638916], + [4.640709400177002, -6.92625617980957], + [-1.2432684898376465, 1.6230524778366089], + [0.05372696369886398, 12.771489143371582], + [4.50065279006958, -3.8624727725982666], + [1.1405326128005981, -0.4530481994152069], + [-5.032809734344482, -1.6857963800430298], + [7.513411998748779, -1.9287866353988647], + [2.3496885299682617, 1.6560462713241577], + [4.149597644805908, -3.160712242126465], + [6.418996334075928, -3.1820383071899414], + [0.6424234509468079, -1.1759735345840454], + [1.0933603048324585, 1.3391066789627075], + [-1.888451337814331, -1.003852367401123], + [6.640622138977051, -3.3120195865631104], + [0.21585464477539062, 9.818315505981445], + [2.2944252490997314, -7.505215167999268], + [-0.41995593905448914, -1.7389779090881348], + [-4.0101165771484375, -6.375541687011719], + [3.4973132610321045, -3.0784904956817627], + [2.1622445583343506, 3.5932445526123047], + [-6.156448841094971, 6.8685383796691895], + [3.1634109020233154, -4.624607086181641], + [10.114898681640625, -2.367427110671997], + [1.9876625537872314, -7.35584831237793], + [0.3549121916294098, -0.6774948835372925], + [-4.629240989685059, -3.1796977519989014], + [-4.354740142822266, -6.945837020874023], + [-5.365289211273193, 6.232703685760498], + [6.892981052398682, 8.501309394836426], + [-4.721571445465088, -6.966923236846924], + [3.9637882709503174, 5.360269069671631], + [-2.2213926315307617, 0.840255618095398], + [6.747560024261475, 8.34288215637207], + [2.5880701541900635, -7.763140678405762], + [8.634190559387207, -2.3624448776245117], + [-3.826361656188965, 4.794200420379639], + [0.8286861777305603, 0.11925607919692993], + [-2.5966904163360596, 2.1422007083892822], + [-4.777190208435059, -3.194392442703247], + [-4.3134846687316895, -6.093020439147949], + [6.929025173187256, -6.386887550354004], + [-0.4469488561153412, -0.28111743927001953], + [-5.34503698348999, 7.313478946685791], + [3.547170877456665, 1.3243473768234253], + [-4.907631874084473, 5.684568405151367], + [9.436467170715332, -2.3660409450531006], + [-4.978580951690674, -3.701294422149658], + [-1.8104640245437622, 2.44387149810791], + [8.432538986206055, -2.304351568222046], + [8.773968696594238, -2.2917702198028564], + [5.199313640594482, 6.556141376495361], + [2.6148645877838135, -7.717862606048584], + [2.7259457111358643, 0.7057071924209595], + [5.649081707000732, 7.773293972015381], + [4.125764846801758, 6.760708808898926], + [2.766190528869629, 2.238084077835083], + [-2.9545562267303467, -4.058361053466797], + [-2.222503662109375, -1.8926119804382324], + [-2.2170116901397705, 2.604839324951172], + [-3.132401943206787, -4.036598205566406], + [4.028351783752441, 1.7746220827102661], + [-3.6025545597076416, 6.978759765625], + [2.954259157180786, -4.259145736694336], + [-4.086998462677002, 6.643935203552246], + [2.638071060180664, -6.109361171722412], + [3.7116341590881348, 1.6654438972473145], + [1.8041123151779175, 5.067753791809082], + [0.16749417781829834, 9.967426300048828], + [7.116771221160889, 8.720809936523438], + [6.448394298553467, -1.0519291162490845], + [0.9561479687690735, -0.7146512269973755], + [2.5295639038085938, -8.460519790649414], + [3.48040509223938, -8.871564865112305], + [-6.101848125457764, -1.7587579488754272], + [-0.7785562872886658, 4.96379280090332], + [3.7448477745056152, 1.6093491315841675], + [2.8540546894073486, -7.800351142883301], + [-1.1617472171783447, 0.11990325152873993], + [0.1487739086151123, -5.350368022918701], + [0.3800368905067444, 3.3617002964019775], + [1.1730053424835205, -0.40459784865379333], + [-0.33120036125183105, -0.7655308246612549], + [7.815725803375244, -1.960147500038147], + [2.9019243717193604, -4.081567764282227], + [-2.126124620437622, 2.688615560531616], + [-3.922666311264038, 6.283450126647949], + [-1.6940981149673462, 1.5435857772827148], + [-3.239891529083252, -1.9146274328231812], + [-8.007307052612305, -0.30791163444519043], + [-2.132225513458252, 2.298365592956543], + [-2.7952020168304443, -2.2488043308258057], + [-6.114610195159912, 7.583278656005859], + [3.5375592708587646, -8.72693920135498], + [3.6582581996917725, 1.3049157857894897], + [6.280605792999268, -1.2931503057479858], + [2.566286325454712, -2.198857545852661], + [-4.566244602203369, 3.567009449005127], + [1.1100499629974365, -0.69694584608078], + [3.1606264114379883, 7.201510429382324], + [2.7077484130859375, -4.708635330200195], + [6.25499963760376, -3.2286837100982666], + [0.1358078122138977, 11.303681373596191], + [0.4670596718788147, 12.360833168029785], + [2.5823466777801514, 3.938324451446533], + [-0.029627107083797455, -2.979015827178955], + [5.794914722442627, 7.858278274536133], + [0.780472457408905, -0.7643253803253174], + [0.2626376748085022, 10.600419044494629], + [-2.0797834396362305, 0.4123879373073578], + [8.084355354309082, -2.103132963180542], + [2.316483497619629, 5.532047271728516], + [2.8004653453826904, -3.8577611446380615], + [2.9836387634277344, -4.478349208831787], + [4.657397747039795, 6.196322441101074], + [-1.898397445678711, -3.6858327388763428], + [-2.5436902046203613, -3.4911673069000244], + [4.723783016204834, -3.5330584049224854], + [-3.009416341781616, -3.7637202739715576], + [-2.2746341228485107, 2.4932382106781006], + [4.923746585845947, 7.387193202972412], + [4.907803058624268, -5.548181533813477], + [-0.8863292336463928, 1.6588902473449707], + [-4.387312889099121, -2.216611385345459], + [-0.025509841740131378, 9.664111137390137], + [3.4921717643737793, -3.674206495285034], + [7.686794757843018, -2.6042563915252686], + [4.155432224273682, 1.5322750806808472], + [-2.024618148803711, -1.8874725103378296], + [7.130129814147949, 8.786602973937988], + [-4.993712425231934, -6.803269386291504], + [7.428041934967041, -2.368100643157959], + [0.5524471402168274, 11.731002807617188], + [3.0504045486450195, -3.8708198070526123], + [3.1442482471466064, -3.4929473400115967], + [1.6971291303634644, -6.591347694396973], + [2.4544003009796143, -8.46584415435791], + [-5.590707302093506, 5.032416820526123], + [0.12326180189847946, -1.5195971727371216], + [-0.5867235064506531, -0.8012466430664062], + [3.171353816986084, -3.652463436126709], + [-3.9328033924102783, -5.70017671585083], + [-5.027897357940674, -4.913050651550293], + [1.5312845706939697, -0.6550201773643494], + [-0.5882297158241272, 0.8383200168609619], + [-4.764631271362305, -2.4676480293273926], + [-2.4263830184936523, 2.1583738327026367], + [3.1204192638397217, -8.176369667053223], + [-2.061414957046509, 2.547433853149414], + [-2.0818839073181152, 4.558950424194336], + [-0.17261141538619995, -1.3496496677398682], + [7.787752628326416, -2.1415345668792725], + [2.703176736831665, -6.529600143432617], + [-6.567493915557861, 6.9651031494140625], + [-2.169245958328247, 2.240278720855713], + [6.0449748039245605, -2.0741372108459473], + [8.158442497253418, -2.2434439659118652], + [-0.8110911250114441, -2.5509042739868164], + [6.315911769866943, 8.019169807434082], + [2.5325119495391846, -9.025918006896973], + [-6.5999674797058105, 7.664012908935547], + [0.16755050420761108, 9.331680297851562], + [0.26237213611602783, 11.097394943237305], + [-5.902389049530029, 0.8346855640411377], + [-4.706883430480957, -3.3070266246795654], + [1.6601905822753906, 0.028417643159627914], + [1.9544336795806885, -8.327982902526855], + [2.0729715824127197, 3.087052583694458], + [-2.5737507343292236, 1.973002552986145], + [-4.6811699867248535, -6.810454368591309], + [-3.832828998565674, -2.2838656902313232], + [3.9615843296051025, 6.816402435302734], + [-3.8788816928863525, -3.2425649166107178], + [-2.5464346408843994, -3.501472234725952], + [0.22983813285827637, 10.947519302368164], + [-2.5459563732147217, -3.225308656692505], + [2.673326253890991, -3.7621142864227295], + [-1.296921730041504, 2.928753614425659], + [5.393754482269287, -1.6693061590194702], + [-1.2097337245941162, 0.6021870970726013], + [1.407365083694458, -6.69040060043335], + [-2.3206422328948975, 2.1359386444091797], + [2.2734575271606445, 3.292180299758911], + [8.356261253356934, -2.3805716037750244], + [3.5905816555023193, -2.457105875015259], + [-4.794149875640869, -6.269063949584961], + [2.431361198425293, 5.7647552490234375], + [-0.07231957465410233, 9.763151168823242], + [0.04075842350721359, 12.09630298614502], + [3.798799753189087, -4.302458763122559], + [2.3379456996917725, 5.398111343383789], + [-3.780153751373291, -6.3520002365112305], + [-2.5984580516815186, -3.5368094444274902], + [2.0931460857391357, 3.6680521965026855], + [-4.590221881866455, -6.000288009643555], + [4.031960964202881, -0.436894029378891], + [-1.285431146621704, -2.9809837341308594], + [-4.848369598388672, -7.545254707336426], + [-4.341384410858154, -1.6410322189331055], + [-2.1426963806152344, 2.434215784072876], + [8.167759895324707, -2.219395637512207], + [-3.7446653842926025, -0.9459450244903564], + [8.689214706420898, -2.4452927112579346], + [6.104961395263672, -1.8901673555374146], + [4.965294361114502, -4.6501946449279785], + [-2.092376947402954, -3.816632032394409], + [-0.05987025052309036, 12.906246185302734], + [2.394604444503784, 1.8471583127975464], + [-3.768106698989868, -5.820314407348633], + [5.509706497192383, -1.8333405256271362], + [0.5498849749565125, -5.190134048461914], + [-1.6731886863708496, 0.692651093006134], + [2.6449849605560303, 3.1474449634552], + [0.227519690990448, 10.973671913146973], + [4.567704200744629, -2.935822010040283], + [-2.334296464920044, -0.9359403848648071], + [-3.9494006633758545, -0.4928366541862488], + [5.360928535461426, -2.4503462314605713], + [2.541243314743042, -3.7718617916107178], + [7.879913806915283, -2.128011703491211], + [-5.200451850891113, 5.111743450164795], + [6.231149196624756, -1.3677737712860107], + [-2.5813920497894287, 1.1495416164398193], + [-1.5923058986663818, 0.206795334815979], + [2.910306930541992, -2.683156728744507], + [1.977851152420044, -7.223653793334961], + [6.802898406982422, 8.373865127563477], + [-6.409396648406982, 8.47287368774414], + [7.807092189788818, -1.8225497007369995], + [-3.9182260036468506, 3.192676067352295], + [-6.4517083168029785, 6.9151763916015625], + [7.157267093658447, -2.1227400302886963], + [-5.677872180938721, 6.776978492736816], + [2.3146278858184814, -8.607072830200195], + [7.736705780029297, -2.0872647762298584], + [8.772233009338379, -2.6013400554656982], + [-5.028716564178467, 5.629068374633789], + [4.592396259307861, -0.2017771601676941], + [-6.002960205078125, 6.8991780281066895], + [5.451720714569092, -2.0838847160339355], + [-7.993727922439575e-5, -1.686771273612976], + [-2.5374019145965576, 1.8841872215270996], + [8.67159366607666, -2.204922914505005], + [1.018261194229126, -0.7864113450050354], + [3.542140245437622, -0.22964522242546082], + [-4.065308094024658, -6.135895729064941], + [2.370267152786255, -7.414244174957275], + [-3.6862754821777344, 3.9084041118621826], + [-4.86614465713501, -0.4657699465751648], + [0.16185855865478516, 10.278094291687012], + [0.5285698771476746, -5.442721366882324], + [-6.050636291503906, 6.3575029373168945], + [-2.2503511905670166, 2.4735825061798096], + [1.211768627166748, 4.673098564147949], + [-2.1306307315826416, -3.8517045974731445], + [-4.688990116119385, 5.068304061889648], + [0.19944405555725098, 9.895086288452148], + [3.399648904800415, -5.658190727233887], + [3.1658880710601807, -4.563070774078369], + [3.810154914855957, 5.735568046569824], + [-5.173645973205566, 6.068593502044678], + [-2.231337070465088, 2.329524517059326], + [2.542577028274536, 1.3140150308609009], + [2.5782880783081055, -9.081029891967773], + [6.689764499664307, 8.197450637817383], + [-2.1112864017486572, -3.8608107566833496], + [-3.7671468257904053, -2.574345827102661], + [3.339040994644165, 6.645456314086914], + [-0.29173409938812256, 9.833732604980469], + [-4.230556488037109, -6.358373641967773], + [-3.599909543991089, -0.2265644073486328], + [0.6219349503517151, -0.729030966758728], + [-7.170390605926514, -0.30658745765686035], + [-3.8386032581329346, -5.7881035804748535], + [3.6361894607543945, -7.669358730316162], + [-1.5860075950622559, 2.183361291885376], + [3.982465982437134, -3.1109349727630615], + [-3.813156843185425, -4.074608325958252], + [3.001028060913086, 6.855538368225098], + [2.9948298931121826, -4.190168380737305], + [-6.40244722366333, -1.8938264846801758], + [0.24810326099395752, 11.380267143249512], + [-4.284892559051514, 6.561995029449463], + [-4.674402713775635, -6.419275283813477], + [-1.2497568130493164, -1.4786542654037476], + [-2.068301200866699, 2.451951503753662], + [-2.685791254043579, -3.116114616394043], + [0.05707686394453049, 11.439438819885254], + [-2.818660020828247, -2.893606424331665], + [0.6858605742454529, 6.916641712188721], + [-2.307974100112915, 1.7460222244262695], + [3.6820144653320312, -7.116761207580566], + [8.673580169677734, -2.319110155105591], + [3.6129150390625, 1.0160406827926636], + [2.5877816677093506, 5.852407932281494], + [2.144176959991455, -7.659451484680176], + [2.4957704544067383, 4.7309112548828125], + [-0.0026515796780586243, 12.359930038452148], + [-3.3043012619018555, 3.6359779834747314], + [9.35094165802002, -2.4321110248565674], + [-3.818721294403076, -6.316215515136719], + [2.070612907409668, 4.884228706359863], + [8.65882396697998, -2.3705101013183594], + [0.11546611040830612, 2.0380353927612305], + [0.97346431016922, 1.5565862655639648], + [5.946901321411133, -3.0804083347320557], + [-3.950474500656128, 4.703638076782227], + [-5.266260623931885, 4.420929908752441], + [0.11982893198728561, 9.69668960571289], + [8.22244930267334, -2.23539662361145], + [-5.219403266906738, -4.316991806030273], + [5.599434852600098, -1.1509145498275757], + [-5.550720691680908, 5.822996139526367], + [1.7078536748886108, -7.4649200439453125], + [0.10633974522352219, 12.695930480957031], + [3.4252395629882812, -4.4312968254089355], + [-1.9870859384536743, 0.6746936440467834], + [-0.39310306310653687, 9.228778839111328], + [-2.392641544342041, 2.141688823699951], + [3.702927350997925, -3.2565255165100098], + [-4.148553371429443, -5.826525688171387], + [2.0385630130767822, 4.287172794342041], + [7.123462200164795, 8.545217514038086], + [3.7974183559417725, -3.5754048824310303], + [3.4305217266082764, -3.3391432762145996], + [6.247591972351074, -2.0640738010406494], + [-2.3012354373931885, 1.4676740169525146], + [2.300039052963257, -8.145794868469238], + [-2.4969751834869385, -4.372868061065674], + [7.549506664276123, -1.6321467161178589], + [4.1742262840271, -4.789361000061035], + [-5.145648956298828, -0.9080996513366699], + [2.4832088947296143, 3.339280128479004], + [5.03939151763916, -5.867372512817383], + [-2.1862030029296875, 4.543869972229004], + [-0.03947443515062332, 11.842416763305664], + [-1.3531384468078613, 1.6303009986877441], + [7.712461948394775, -2.6118195056915283], + [-2.1231894493103027, 1.9153763055801392], + [4.676021575927734, -3.844709634780884], + [-0.7852396965026855, -1.4645841121673584], + [8.610763549804688, -2.4227473735809326], + [-5.342729091644287, -2.383769989013672], + [1.7698650360107422, -7.510187149047852], + [-3.5096569061279297, -1.0292820930480957], + [8.352038383483887, -2.2375328540802], + [3.127904176712036, -3.479095935821533], + [8.603462219238281, -2.290578842163086], + [2.0395445823669434, 5.602323532104492], + [8.551798820495605, -2.2664988040924072], + [6.8261237144470215, 8.40650749206543], + [-4.5925421714782715, -2.540753126144409], + [-4.251712322235107, -2.013239622116089], + [6.768700122833252, -2.820169448852539], + [4.416261672973633, 7.254223823547363], + [3.981592893600464, 1.2147059440612793], + [-0.9242687225341797, -1.2268303632736206], + [9.481749534606934, -2.3121840953826904], + [-1.879446268081665, -3.911569356918335], + [-3.9919002056121826, 4.548814296722412], + [2.8128175735473633, -7.865808963775635], + [-2.920958995819092, 2.5845463275909424], + [-2.470003366470337, 6.583092212677002], + [-2.556659460067749, -1.8082222938537598], + [-4.877453327178955, -2.1848948001861572], + [3.035198926925659, -3.858167886734009], + [-1.6986002922058105, 0.38342297077178955], + [-1.9360405206680298, 2.4769515991210938], + [-2.222303867340088, 1.3263930082321167], + [8.27579116821289, -2.402433156967163], + [-7.122384548187256, 9.149085998535156], + [-0.024002499878406525, 11.895772933959961], + [9.855659484863281, -2.4229633808135986], + [-5.686300754547119, -3.0017240047454834], + [3.8528597354888916, 1.2716377973556519], + [2.773606061935425, 5.140264511108398], + [8.698277473449707, -2.328493356704712], + [-2.384580612182617, 0.2894723415374756], + [3.6438891887664795, -3.688693046569824], + [-3.522137403488159, 5.719511032104492], + [3.8099589347839355, -2.9083220958709717], + [-4.765950679779053, -6.819158554077148], + [3.5432465076446533, -7.378931045532227], + [-4.457973480224609, -7.205417156219482], + [1.0538442134857178, -2.973930597305298], + [0.6362334489822388, 0.03445233032107353], + [-6.727970600128174, 7.591869354248047], + [4.726887226104736, 7.351601600646973], + [-1.9661227464675903, 1.8816254138946533], + [-3.5051302909851074, 5.426512718200684], + [-3.8111720085144043, 4.3974223136901855], + [1.953627109527588, -5.092844486236572], + [-0.1977207362651825, -1.0593469142913818], + [7.999925136566162, -2.453782320022583], + [5.448558330535889, -6.766324520111084], + [-0.026524491608142853, 12.41618824005127], + [-4.17255163192749, -0.15565693378448486], + [2.7188217639923096, 1.2358342409133911], + [-4.520665168762207, -6.850805282592773], + [2.9167428016662598, -3.597247838973999], + [-3.5966298580169678, -5.707736015319824], + [-0.046012409031391144, 9.399691581726074], + [8.018412590026855, -2.5711114406585693], + [3.190760374069214, -2.7093474864959717], + [-5.923829078674316, -1.499815821647644], + [0.01599695533514023, -1.6838353872299194], + [-2.112281322479248, 2.6785290241241455], + [-1.7120013236999512, 2.2657594680786133], + [0.16558003425598145, 9.922445297241211], + [-2.177694082260132, -3.094351053237915], + [0.0048103854060173035, 9.610584259033203], + [1.5283105373382568, 4.68377161026001], + [2.1083011627197266, 1.728782057762146], + [-2.7397172451019287, 3.077603816986084], + [0.3190712034702301, -0.6150940656661987], + [2.610537052154541, -3.472748041152954], + [-1.1304490566253662, -3.828808307647705], + [0.6952623128890991, 1.1592077016830444], + [-2.4041943550109863, 0.4869195222854614], + [8.659746170043945, -2.2633872032165527], + [3.3392066955566406, -8.426239967346191], + [8.94687557220459, -2.8048393726348877], + [0.6507583260536194, -2.407658576965332], + [-1.8358134031295776, 2.3935277462005615], + [3.977879762649536, -3.3050172328948975], + [-4.435417652130127, -0.11990797519683838], + [-1.7095811367034912, -0.6634561419487], + [3.4970977306365967, -7.122371196746826], + [8.867386817932129, -2.266066789627075], + [0.09458523243665695, 12.792352676391602], + [4.511841297149658, -8.915142059326172], + [10.138556480407715, -2.444108009338379], + [3.275285482406616, -4.523276329040527], + [7.6021013259887695, -1.9610193967819214], + [2.4751155376434326, 2.252189874649048], + [-5.231688499450684, 5.8323211669921875], + [-3.687314510345459, -6.0161333084106445], + [-2.385925531387329, 0.7505472898483276], + [-3.375900983810425, -5.851818561553955], + [-5.557916164398193, -0.9095147848129272], + [-1.9180723428726196, 2.6159074306488037], + [-4.090797424316406, -5.101883888244629], + [-6.3582377433776855, 0.47095805406570435], + [-7.217986583709717, -0.36770761013031006], + [1.6702114343643188, 1.9655941724777222], + [-4.502591133117676, -2.0650951862335205], + [3.702136516571045, 6.97760009765625], + [-0.9261519312858582, 1.72604238986969], + [5.964531421661377, 8.237993240356445], + [6.764483451843262, -2.995570182800293], + [5.854872226715088, -0.6905890703201294], + [3.4544057846069336, -2.9702963829040527], + [-4.349253177642822, -5.86289119720459], + [0.8694257736206055, 1.0188766717910767], + [-4.65834903717041, -6.488811492919922], + [3.0591204166412354, -4.301224708557129], + [8.57796573638916, -2.3453195095062256], + [-1.6962745189666748, -2.5226733684539795], + [1.4192099571228027, -6.6285247802734375], + [7.520624160766602, -2.0635550022125244], + [0.21434557437896729, 11.63767147064209], + [9.54289722442627, -2.312382459640503], + [2.2251312732696533, 0.21464574337005615], + [8.837037086486816, -2.4908196926116943], + [-0.16862905025482178, -1.5739609003067017], + [-2.3250327110290527, 2.3266801834106445], + [-5.5069756507873535, -1.0078126192092896], + [-2.4450764656066895, 1.8441503047943115], + [5.654071807861328, -4.878805160522461], + [-4.004908084869385, 5.807746410369873], + [0.22651374340057373, 10.537819862365723], + [-2.0809521675109863, 2.392078161239624], + [8.190192222595215, -2.188122034072876], + [0.963934600353241, 7.070126533508301], + [1.3656938076019287, -0.692991316318512], + [-3.3380420207977295, -3.092970132827759], + [7.9140753746032715, -2.341487169265747], + [-4.8450608253479, -3.0814661979675293], + [-5.5657124519348145, -0.11658263206481934], + [-6.090402603149414, -1.848922848701477], + [-2.755608320236206, -0.8905580043792725], + [-4.689376354217529, -6.069360733032227], + [2.917557716369629, 0.09651064872741699], + [-4.37147331237793, 6.229865074157715], + [-0.47386476397514343, -1.1696656942367554], + [3.0114753246307373, -7.469657897949219], + [1.5303404331207275, -6.678105354309082], + [1.6513851881027222, 0.16195574402809143], + [-3.5970942974090576, -3.3629157543182373], + [4.366968631744385, -8.033388137817383], + [-2.5727436542510986, -5.433515548706055], + [5.695856094360352, -2.6514809131622314], + [-3.8536598682403564, 5.747599124908447], + [9.620363235473633, -2.3037712574005127], + [-1.654421091079712, 0.7534127235412598], + [1.4785737991333008, -0.37573936581611633], + [2.6617748737335205, -9.510851860046387], + [2.636543035507202, -7.9061279296875], + [-1.6257320642471313, 2.025296449661255], + [-2.4872138500213623, 2.035336494445801], + [7.646572113037109, -1.9994086027145386], + [3.809927463531494, 5.258057594299316], + [-0.018463142216205597, 9.655227661132812], + [-6.940419673919678, -0.8501925468444824], + [0.1330246925354004, 12.112081527709961], + [3.1835038661956787, -3.8894550800323486], + [3.11348295211792, -8.04104995727539], + [4.783332824707031, -4.679183006286621], + [-1.4258977174758911, 1.5313751697540283], + [2.746802806854248, -3.863738775253296], + [-4.3210015296936035, 5.094806671142578], + [5.409372806549072, 7.5339202880859375], + [-1.6037967205047607, 1.4780746698379517], + [6.57908821105957, -3.7519619464874268], + [0.22130918502807617, 10.742671966552734], + [-7.153923511505127, -0.8565222024917603], + [6.424087047576904, 8.172968864440918], + [3.003612756729126, -4.302907943725586], + [-5.697779178619385, -1.6389755010604858], + [-3.3678529262542725, -2.839945077896118], + [-3.303851366043091, -5.607241630554199], + [6.299230098724365, -2.9430391788482666], + [-5.067984104156494, 3.9566538333892822], + [2.4406259059906006, -6.962954521179199], + [-7.026069164276123, 8.31267261505127], + [-2.6053969860076904, -4.722807884216309], + [0.025429658591747284, 11.906006813049316], + [-4.5536417961120605, 0.3944411873817444], + [-3.5223658084869385, -5.511438846588135], + [10.165696144104004, -2.558223009109497], + [5.652862071990967, 7.697568893432617], + [-3.4820375442504883, 3.760941743850708], + [2.0567779541015625, -3.1232640743255615], + [-0.06868524104356766, 14.269041061401367], + [-2.895622968673706, -3.3971331119537354], + [-4.683815956115723, -2.154620885848999], + [4.069659233093262, 5.988503456115723], + [-2.3825957775115967, 1.7915414571762085], + [-2.3737001419067383, -1.5062733888626099], + [5.424376964569092, -2.3049910068511963], + [0.8084989786148071, -0.5149142146110535], + [5.785292148590088, -4.364602088928223], + [1.3596594333648682, -4.270535469055176], + [5.520483493804932, -0.32362931966781616], + [-1.9826973676681519, 2.4673941135406494], + [9.311209678649902, -2.4130258560180664], + [6.922875881195068, -5.879094123840332], + [1.652915358543396, 2.03556227684021], + [-0.01833290606737137, 12.938387870788574], + [-3.8592946529388428, -5.566943168640137], + [3.6520676612854004, 1.6289976835250854], + [1.78533136844635, 7.147378444671631], + [-3.126220464706421, -5.8301920890808105], + [-2.485487937927246, 6.728634357452393], + [6.942817211151123, -2.437703847885132], + [3.0504703521728516, -3.19519305229187], + [-2.8935065269470215, 3.5294597148895264], + [9.201519966125488, -2.4237616062164307], + [-2.694145441055298, -1.328049898147583], + [3.103663206100464, -7.248748779296875], + [-4.821723937988281, -5.699715614318848], + [-2.187493324279785, -3.298537492752075], + [2.290729284286499, -6.952005386352539], + [2.2620980739593506, -1.0478999614715576], + [4.966897487640381, -0.7705925703048706], + [3.708881139755249, -7.402093410491943], + [-2.8931915760040283, -0.774020791053772], + [2.711043357849121, -2.5032012462615967], + [-5.610522747039795, -1.3280669450759888], + [8.11507511138916, -2.2051193714141846], + [-4.550932884216309, -4.278794288635254], + [-2.3066704273223877, -5.14909029006958], + [2.473848581314087, -6.538617134094238], + [-2.1272804737091064, 2.5678365230560303], + [1.8946207761764526, 5.936578750610352], + [3.6225574016571045, -6.684356689453125], + [6.848771095275879, 8.261184692382812], + [-4.126386642456055, -4.239992141723633], + [-2.032710313796997, 1.1317827701568604], + [-7.532445430755615, -0.13043761253356934], + [-0.4032675325870514, -2.239483594894409], + [2.838601589202881, -8.893195152282715], + [1.495682954788208, -7.2305426597595215], + [5.6413397789001465, 7.525830268859863], + [4.492532253265381, -3.050164222717285], + [1.0490065813064575, -4.1778717041015625], + [1.626823902130127, -2.59845232963562], + [7.495036602020264, -1.9502991437911987], + [-2.161020278930664, 2.426107168197632], + [2.8134937286376953, -6.554438591003418], + [-4.761973857879639, -7.080708980560303], + [6.549354553222656, 8.072608947753906], + [-5.478634834289551, -0.45626264810562134], + [3.260965347290039, -3.816027879714966], + [6.673528671264648, 8.200209617614746], + [4.392503261566162, -5.706181526184082], + [0.6795937418937683, 2.198462724685669], + [6.012034893035889, -0.9236112236976624], + [2.8620970249176025, 5.638681411743164], + [3.463257074356079, -7.730776786804199], + [3.199383497238159, -7.727771759033203], + [-0.10782159119844437, 0.5303375720977783], + [3.2837283611297607, 4.887282371520996], + [2.043336868286133, -5.893426418304443], + [4.941954135894775, -2.95225191116333], + [6.256186008453369, -2.0071346759796143], + [0.32652848958969116, 10.779464721679688], + [-2.116769313812256, 2.4682881832122803], + [5.949905872344971, 7.699975967407227], + [-2.364788293838501, 2.3601789474487305], + [-4.038560390472412, -2.5388519763946533], + [-4.582458019256592, -7.643430709838867], + [8.18964672088623, -2.1315150260925293], + [3.11916184425354, 1.495843529701233], + [-4.393024921417236, 7.7075653076171875], + [-0.11583281308412552, 9.304609298706055], + [0.7832425236701965, -6.175363063812256], + [-4.041131496429443, -6.293617248535156], + [-5.910187244415283, -0.027666214853525162], + [6.508539199829102, 7.948589324951172], + [-4.000949859619141, 4.449943542480469], + [2.210070848464966, 4.7262091636657715], + [-2.7469286918640137, -2.270895481109619], + [-3.4472618103027344, 4.637338638305664], + [-4.815151691436768, -1.7095640897750854], + [-1.034082293510437, -2.1907777786254883], + [0.554882824420929, 11.441758155822754], + [0.164110004901886, 10.620603561401367], + [-0.878243088722229, 10.174346923828125], + [-0.02276480942964554, 13.25128173828125], + [-2.1604514122009277, 2.609110116958618], + [0.13540029525756836, 10.679582595825195], + [0.046044521033763885, 9.820669174194336], + [6.95367956161499, -3.4390757083892822], + [0.5604339241981506, -1.1661871671676636], + [7.876226902008057, -2.3434646129608154], + [9.103240013122559, -2.5351812839508057], + [-4.226142406463623, -2.61041522026062], + [2.6068997383117676, -1.0238165855407715], + [2.4516446590423584, 4.020180702209473], + [9.489806175231934, -2.579617977142334], + [8.96053695678711, -2.3533103466033936], + [-2.457376003265381, 0.6873672008514404], + [0.17204153537750244, 9.874738693237305], + [0.1473354697227478, 11.151714324951172], + [-4.041388034820557, 5.730410575866699], + [5.664787769317627, -4.508105278015137], + [-4.248255729675293, -6.540452003479004], + [8.970871925354004, -2.785999059677124], + [3.468942403793335, 1.605790615081787], + [-6.454394817352295, 5.230687618255615], + [2.1288840770721436, 2.665468692779541], + [5.243727207183838, -4.259368896484375], + [0.8192340731620789, 10.735407829284668], + [1.4459147453308105, 4.328500747680664], + [3.8898141384124756, 6.849481582641602], + [2.913592576980591, -2.9412100315093994], + [3.0190775394439697, -4.387885093688965], + [-1.885474681854248, -4.78146505355835], + [3.605644702911377, -3.426764965057373], + [0.23580032587051392, 11.068785667419434], + [3.4973363876342773, -2.6128697395324707], + [-5.526155948638916, -2.3902206420898438], + [3.355430841445923, -4.113816261291504], + [7.278650760650635, -6.0063700675964355], + [3.9378230571746826, -5.12303352355957], + [-6.970543384552002, 8.192950248718262], + [3.0438807010650635, -3.897153615951538], + [-3.724838972091675, -3.3637330532073975], + [2.5393226146698, -7.45500373840332], + [-1.8734221458435059, 2.3306972980499268], + [0.2493419051170349, 10.487051963806152], + [2.3190248012542725, -9.328035354614258], + [9.18195629119873, -2.5108964443206787], + [-4.39031457901001, -3.1729848384857178], + [-4.621239185333252, -6.313190937042236], + [-2.4745376110076904, 2.4844648838043213], + [-5.683217525482178, 8.288188934326172], + [1.4163017272949219, -0.09399053454399109], + [-6.445250034332275, -0.28184521198272705], + [-4.798678874969482, -6.6824140548706055], + [0.2177777886390686, 10.69497299194336], + [-3.4213039875030518, 3.91591215133667], + [4.07982873916626, -3.447451114654541], + [0.7589355111122131, -6.645626544952393], + [-2.7592618465423584, -3.8159921169281006], + [3.406980037689209, -8.353570938110352], + [2.3333001136779785, -1.0777541399002075], + [4.233345985412598, -8.31939697265625], + [-2.6189095973968506, 1.9777623414993286], + [-3.6863839626312256, 7.500592231750488], + [0.06497537344694138, 11.667057037353516], + [10.895038604736328, -2.5101397037506104], + [4.484707832336426, 1.6593751907348633], + [3.1038787364959717, -8.854459762573242], + [-4.204392910003662, -5.742639541625977], + [-3.823610544204712, -6.322253704071045], + [7.327955722808838, -1.8653799295425415], + [3.020385503768921, -4.177906036376953], + [-6.723974704742432, 0.1273263692855835], + [4.101303577423096, -3.777573823928833], + [0.16723144054412842, 10.173294067382812], + [1.3600611686706543, 5.0034637451171875], + [2.7297565937042236, -3.8066649436950684], + [6.46858549118042, 7.906251907348633], + [5.651914119720459, 7.719453811645508], + [4.63696813583374, 7.0547943115234375], + [-4.025181293487549, 4.290526866912842], + [0.079070083796978, 9.918004989624023], + [-5.24636173248291, -2.807546377182007], + [7.468663215637207, -2.5945746898651123], + [6.609596252441406, 8.077021598815918], + [0.7168161273002625, -0.9511971473693848], + [2.786785125732422, -7.618007183074951], + [-2.1537976264953613, 2.693495273590088], + [2.871076822280884, -4.146683692932129], + [-0.028967387974262238, 9.712420463562012], + [8.825119972229004, -2.3994545936584473], + [-8.305733680725098, -0.2991069555282593], + [5.2481303215026855, 7.982357025146484], + [2.349759340286255, 5.831594467163086], + [7.201176166534424, -4.312744617462158], + [-4.437117099761963, -1.8389767408370972], + [-3.747602701187134, -2.510143518447876], + [-1.8344881534576416, 2.3662798404693604], + [0.04206614941358566, 11.728341102600098], + [0.596931517124176, 10.143506050109863], + [0.1197475716471672, 9.875984191894531], + [-2.3407609462738037, 0.3784993290901184], + [2.4481279850006104, 1.6279486417770386], + [-6.736492156982422, 8.067140579223633], + [2.3274037837982178, -8.440576553344727], + [-7.037951946258545, 8.294540405273438], + [-4.574795246124268, -0.9690553545951843], + [3.4703288078308105, -3.868222951889038], + [-5.61603307723999, -2.1516170501708984], + [2.989025592803955, -10.441166877746582], + [-4.956133842468262, 5.307913303375244], + [8.172987937927246, -2.2666985988616943], + [0.05642252415418625, 8.984931945800781], + [6.813467502593994, -1.3984977006912231], + [2.356750011444092, 0.37331026792526245], + [-0.006694622337818146, 12.50984001159668], + [-4.002184867858887, -1.8860753774642944], + [4.456477642059326, 1.869897723197937], + [-4.87431001663208, 5.346723556518555], + [-4.9720635414123535, -3.4946556091308594], + [-7.527853488922119, 0.36703455448150635], + [-2.6849777698516846, -3.2442924976348877], + [-4.6974921226501465, -4.150215148925781], + [2.295069932937622, 0.9379284977912903], + [-0.8099929690361023, -3.1800291538238525], + [5.115719318389893, -4.829784393310547], + [4.206096172332764, -8.329608917236328], + [-2.2192201614379883, 2.613499164581299], + [-4.42279577255249, -6.622494220733643], + [-4.352530002593994, 7.845978736877441], + [-0.002885766327381134, 12.891168594360352], + [2.2406208515167236, 4.558130264282227], + [2.0215847492218018, 1.67856764793396], + [-3.3803727626800537, -2.0529067516326904], + [5.3401408195495605, -2.4016668796539307], + [-3.5630764961242676, -0.9074925184249878], + [1.5726807117462158, 0.943626880645752], + [3.8096587657928467, -8.360791206359863], + [0.06633185595273972, 9.926093101501465], + [-2.05338716506958, -1.4309417009353638], + [-3.535581350326538, -2.483027219772339], + [10.0778226852417, -2.3364057540893555], + [-0.12617939710617065, 13.516131401062012], + [-2.845548391342163, -3.731945037841797], + [4.0685038566589355, -2.9667885303497314], + [4.943861961364746, 7.202218532562256], + [3.05600905418396, -4.241540908813477], + [2.0769612789154053, 4.304749488830566], + [2.607771158218384, -3.667412042617798], + [-4.8794426918029785, 8.179149627685547], + [10.225557327270508, -2.464479446411133], + [-3.9482014179229736, 5.762074947357178], + [-3.274190902709961, -4.874361038208008], + [-2.679422616958618, -3.46805739402771], + [-0.27409645915031433, -1.8120092153549194], + [0.4800701141357422, 1.0184217691421509], + [-4.794425010681152, -5.4979987144470215], + [-5.007084369659424, -8.546272277832031], + [-0.62617427110672, -2.5126986503601074], + [7.559838771820068, -2.6463820934295654], + [4.051608562469482, -3.36346697807312], + [-5.903167724609375, 1.049599051475525], + [-4.609743118286133, -2.010759115219116], + [-5.119122505187988, 6.1031904220581055], + [-2.065404176712036, 2.543423652648926], + [-7.5255560874938965, 8.88895320892334], + [1.5321273803710938, 4.838794231414795], + [5.010744571685791, -3.86468768119812], + [6.750075817108154, -2.8921701908111572], + [0.039458684623241425, 8.687871932983398], + [2.1212666034698486, -8.7786283493042], + [1.3290679454803467, -6.971911430358887], + [-3.757917642593384, -2.700139284133911], + [-3.0123684406280518, -4.729665756225586], + [0.028135590255260468, 12.526639938354492], + [-2.28782320022583, -0.7677403688430786], + [-2.1476781368255615, 2.3304483890533447], + [-2.7130935192108154, 2.0263009071350098], + [2.716813802719116, 3.8345577716827393], + [-4.909553050994873, -2.646608591079712], + [-5.124243259429932, -1.8373790979385376], + [3.8301730155944824, 5.433156490325928], + [0.2512296438217163, 11.369527816772461], + [-5.258394718170166, 5.4987030029296875], + [3.630206823348999, -5.628232002258301], + [0.19213956594467163, 10.072233200073242], + [3.4246368408203125, -8.308588027954102], + [9.13407039642334, -2.368299722671509], + [-4.6475090980529785, -6.507663726806641], + [-2.5446205139160156, 1.9880799055099487], + [4.1407856941223145, 1.9646590948104858], + [-6.502562999725342, 7.612085342407227], + [0.1743912398815155, 0.2610948085784912], + [-1.7999078035354614, 1.7378730773925781], + [-0.14953893423080444, 10.114391326904297], + [0.4859880805015564, -5.502590179443359], + [-2.2884862422943115, 2.5803589820861816], + [-3.5028092861175537, -0.47131675481796265], + [2.1205313205718994, 2.204542398452759], + [0.2500181794166565, 11.153063774108887], + [6.136051654815674, 8.031335830688477], + [2.1338675022125244, 8.529192924499512], + [2.2820582389831543, 2.120340347290039], + [-3.177992582321167, -2.4824368953704834], + [0.4115753769874573, -1.1938502788543701], + [0.23803168535232544, 11.13212776184082], + [3.116694211959839, -6.050664901733398], + [8.97614860534668, -2.34708571434021], + [6.539143085479736, 7.991619110107422], + [-2.060084104537964, 2.4315643310546875], + [3.7263011932373047, -3.5213286876678467], + [-1.8907928466796875, 1.733094573020935], + [3.121901035308838, -4.282663822174072], + [-2.0967671871185303, -0.6549903750419617], + [-0.03574389964342117, 13.576624870300293], + [5.118089199066162, -6.967538833618164], + [3.115046739578247, -6.110499382019043], + [-4.621461391448975, -4.894217491149902], + [-2.2040340900421143, 2.1937036514282227], + [5.105603218078613, -5.905481338500977], + [2.9582250118255615, -4.1641950607299805], + [8.481425285339355, -2.467543840408325], + [2.625464916229248, 5.984367847442627], + [0.011442355811595917, 12.147933959960938], + [3.7638099193573, 6.847049713134766], + [2.569570302963257, -8.883930206298828], + [8.81439208984375, -2.213359832763672], + [-2.2242496013641357, 2.9032068252563477], + [2.6902694702148438, -3.875261068344116], + [2.3443784713745117, 1.8132997751235962], + [-5.638756275177002, 0.0025674067437648773], + [2.937283992767334, -4.045405864715576], + [4.098101615905762, -3.6046242713928223], + [-3.0819501876831055, -0.9116619825363159], + [-5.550786018371582, 5.96373176574707], + [-2.5119144916534424, 0.3039138913154602], + [0.16809087991714478, 11.46417236328125], + [-0.04195661097764969, 9.742120742797852], + [-4.19018030166626, -6.506553649902344], + [-3.678844451904297, -5.179859161376953], + [5.759964466094971, 7.577437400817871], + [0.6915772557258606, 0.3570651412010193], + [-6.292107582092285, 7.139351844787598], + [1.0926554203033447, 0.7803988456726074], + [2.224130630493164, -0.5428063869476318], + [9.08486270904541, -2.4644360542297363], + [4.73002290725708, -5.205426216125488], + [4.905577182769775, 7.254994869232178], + [-0.21888738870620728, 4.962002754211426], + [3.1960437297821045, -6.8749775886535645], + [6.930767059326172, -1.8429186344146729], + [3.1180038452148438, -3.95998215675354], + [-3.47658634185791, 7.7754411697387695], + [-4.325901031494141, -0.8288972973823547], + [3.1303861141204834, -7.140295028686523], + [4.415778160095215, -3.5463569164276123], + [2.1919281482696533, 0.383081316947937], + [3.2633631229400635, -7.131664276123047], + [2.736287832260132, 4.569495677947998], + [-4.38158655166626, -4.777958869934082], + [1.5513004064559937, 4.202012062072754], + [2.351569414138794, 1.4304581880569458], + [6.121142387390137, 7.4644622802734375], + [0.06179653853178024, 9.674406051635742], + [-5.3269782066345215, 4.970597743988037], + [-2.52868914604187, 2.096249580383301], + [-0.11330265551805496, 5.988225936889648], + [-4.413672924041748, 4.917263031005859], + [-2.291246175765991, 2.0869851112365723], + [5.909680366516113, -3.247246026992798], + [-2.223902940750122, -0.7390835881233215], + [-5.4489641189575195, -0.14503252506256104], + [0.08853106945753098, 9.26711654663086], + [-6.186577320098877, 5.02977180480957], + [6.3675618171691895, 7.965540885925293], + [-2.2688100337982178, 0.7993206977844238], + [3.3324623107910156, 1.7532981634140015], + [3.8085060119628906, -6.9590654373168945], + [3.770167589187622, -4.341588020324707], + [-4.514146327972412, 4.234156131744385], + [-4.188263893127441, 6.044443607330322], + [-3.150325059890747, -3.0909178256988525], + [-0.46152061223983765, -2.230890989303589], + [5.394032001495361, -1.1601793766021729], + [6.41566276550293, -1.557775616645813], + [0.2085077166557312, 10.75522232055664], + [-3.9878218173980713, 5.689446926116943], + [6.233635902404785, -2.866095542907715], + [-2.792213201522827, 4.578622817993164], + [-4.589567184448242, -3.1414647102355957], + [-3.0399057865142822, -1.1363232135772705], + [8.819537162780762, -2.694797992706299], + [-0.9265953302383423, 0.08141206204891205], + [-1.9873014688491821, 2.3083741664886475], + [-0.1137046292424202, 13.294178009033203], + [3.1417603492736816, -4.817654609680176], + [-5.427305698394775, -1.8005075454711914], + [-4.852761745452881, -1.0042906999588013], + [2.140547513961792, 4.47301721572876], + [-4.713265419006348, 4.5268402099609375], + [0.1006203219294548, 10.623384475708008], + [-3.336127996444702, 5.586062908172607], + [8.66739559173584, -2.2390389442443848], + [-2.1064326763153076, 1.7169159650802612], + [1.4552104473114014, 4.293682098388672], + [4.079845905303955, -3.6191296577453613], + [10.894235610961914, -2.5671579837799072], + [2.569594621658325, -3.7321054935455322], + [-2.0869100093841553, 2.2268826961517334], + [2.413917303085327, -0.09953421354293823], + [-2.5033576488494873, -3.907395124435425], + [0.14520889520645142, 10.216373443603516], + [5.715221881866455, -1.289994716644287], + [-0.540665328502655, -2.2529633045196533], + [-2.4641172885894775, 2.1656501293182373], + [-4.670327663421631, -1.5199048519134521], + [2.3658831119537354, 0.49365419149398804], + [2.9160070419311523, -8.151742935180664], + [-2.430361270904541, -3.979520559310913], + [-3.154261827468872, -3.7607476711273193], + [0.22718483209609985, 5.3387651443481445], + [-0.0330590084195137, 13.139519691467285], + [9.956608772277832, -2.3744494915008545], + [4.453831672668457, -4.1211347579956055], + [6.672924518585205, 8.56060791015625], + [-2.8758344650268555, -2.288165330886841], + [8.811406135559082, -2.491037130355835], + [-3.475536584854126, -5.543349266052246], + [-1.3733139038085938, 1.8785991668701172], + [-0.42727231979370117, -1.8901761770248413], + [1.5989065170288086, 3.3768603801727295], + [9.834232330322266, -2.3904826641082764], + [0.6111335754394531, 1.5649495124816895], + [-4.374483108520508, 0.9664914608001709], + [0.38793274760246277, -1.3819562196731567], + [8.785981178283691, -2.6118857860565186], + [0.06437652558088303, 8.737442016601562], + [-1.9607536792755127, 2.398010730743408], + [7.491410732269287, -2.05924916267395], + [-2.9205236434936523, -3.6578266620635986], + [2.3050854206085205, -2.424504041671753], + [3.0087292194366455, -4.296041965484619], + [-5.247870922088623, 5.96134090423584], + [-4.176051139831543, -2.7020084857940674], + [-2.3444912433624268, -2.336747646331787], + [7.967400074005127, -2.124126434326172], + [-4.070283889770508, 4.2472076416015625], + [-4.492393970489502, -6.711419105529785], + [-1.8813344240188599, 2.002284049987793], + [4.56776762008667, 1.8319488763809204], + [0.6053652167320251, -0.12038438022136688], + [2.116097927093506, 5.662422180175781], + [1.6264933347702026, -2.4049270153045654], + [2.443868637084961, -9.05689525604248], + [-4.900577068328857, 5.659213066101074], + [4.736728191375732, -4.197954177856445], + [0.08205144852399826, 12.318161964416504], + [2.7671053409576416, -10.273557662963867], + [3.853790521621704, 6.040830135345459], + [8.531546592712402, -2.3752191066741943], + [-4.392555236816406, -5.8859453201293945], + [-4.856338024139404, 5.814199447631836], + [-0.013282723724842072, 9.441061019897461], + [7.319530010223389, -1.921864628791809], + [-2.8033573627471924, 1.182172417640686], + [3.416088819503784, 1.636162281036377], + [4.945056438446045, 7.3409576416015625], + [-5.392405986785889, 6.165499687194824], + [6.450284481048584, 8.026359558105469], + [1.831740379333496, 0.060663919895887375], + [2.096726655960083, -7.987689971923828], + [6.8541340827941895, -1.7916332483291626], + [-3.0284531116485596, -5.137161731719971], + [-6.098093509674072, -2.394930839538574], + [-2.615516424179077, 2.8702218532562256], + [-0.7799484133720398, -1.3775883913040161], + [-1.7115496397018433, 2.373944044113159], + [2.7656683921813965, -2.8120691776275635], + [0.12429177016019821, 9.433462142944336], + [5.292324542999268, 7.581756591796875], + [-4.44900369644165, -6.775315761566162], + [0.17307966947555542, 11.829259872436523], + [-2.485499858856201, 1.4844961166381836], + [2.940979242324829, 6.70103645324707], + [3.2303779125213623, -7.791642189025879], + [-0.9845884442329407, -0.9576921463012695], + [-5.757445812225342, 4.945468425750732], + [-4.6127448081970215, -6.756250858306885], + [-5.17602014541626, -3.074902296066284], + [0.19014912843704224, 11.700690269470215], + [0.1980661153793335, -4.7672271728515625], + [2.982228994369507, -4.397683143615723], + [8.177384376525879, -2.2335128784179688], + [-0.2651974558830261, -1.496294379234314], + [-4.589437961578369, -6.9172563552856445], + [6.368593215942383, -3.3317816257476807], + [2.3787591457366943, -4.223999500274658], + [-4.656663417816162, -2.8521640300750732], + [5.1587324142456055, -3.70072340965271], + [1.1146804094314575, -0.31772321462631226], + [-4.846924304962158, 5.1884379386901855], + [-3.376499652862549, -2.9125492572784424], + [1.3613139390945435, -6.322737693786621], + [5.867254734039307, 7.8429975509643555], + [4.340795516967773, -3.2882139682769775], + [-2.0395233631134033, 2.402276039123535], + [-1.6304054260253906, 0.062294717878103256], + [3.516193389892578, -5.438075065612793], + [-4.071051597595215, -5.8188605308532715], + [3.9968645572662354, -3.99674129486084], + [7.874621868133545, -2.2838494777679443], + [7.727962017059326, -1.9252147674560547], + [-3.3760921955108643, -6.01822566986084], + [-5.038099765777588, 3.337803840637207], + [-4.4980340003967285, -5.950543403625488], + [-5.51110315322876, -1.0827583074569702], + [8.190322875976562, -2.2249083518981934], + [9.053605079650879, -2.393592596054077], + [1.2641891241073608, -0.3816870450973511], + [9.049189567565918, -2.303816080093384], + [5.7396321296691895, -1.1867611408233643], + [8.900369644165039, -2.3402392864227295], + [-3.6981639862060547, -2.645437479019165], + [-2.1857645511627197, 2.823560953140259], + [0.21529969573020935, -1.3173748254776], + [5.991588115692139, -1.2986699342727661], + [-4.087825298309326, -2.0138373374938965], + [3.1673874855041504, -6.060832500457764], + [-3.693047285079956, -2.556478261947632], + [-0.0363239124417305, 12.2777099609375], + [-3.067767381668091, -5.022675514221191], + [3.533592939376831, 1.0641591548919678], + [-3.836472272872925, -1.8628042936325073], + [3.413050889968872, 1.2925165891647339], + [-3.4637997150421143, -4.126781940460205], + [4.2192230224609375, 1.5359612703323364], + [0.8376700282096863, -6.38707160949707], + [-4.245446681976318, -4.000179767608643], + [8.898136138916016, -2.254868268966675], + [4.032688140869141, 1.9086828231811523], + [-5.039561748504639, 5.851095199584961], + [6.104334354400635, 7.483856201171875], + [-2.234166145324707, 2.4056198596954346], + [9.770535469055176, -2.50040602684021], + [-1.2368690967559814, 1.4743038415908813], + [-2.1876213550567627, 1.9865363836288452], + [-5.246553421020508, -0.675804853439331], + [-2.1639416217803955, 2.451674699783325], + [-3.657813310623169, -5.778979301452637], + [0.7041102051734924, -0.9741584658622742], + [4.888112545013428, -2.3053810596466064], + [6.982099533081055, -2.296882390975952], + [-2.1375136375427246, -0.3518821597099304], + [-4.120068550109863, -2.358642339706421], + [-2.5691821575164795, 1.7195136547088623], + [-0.055095501244068146, 9.600503921508789], + [-1.2010456323623657, 1.801268458366394], + [3.590613603591919, -3.1818182468414307], + [3.068976879119873, -4.314483642578125], + [2.3947951793670654, -3.5205113887786865], + [-3.873861789703369, -5.09124231338501], + [8.290608406066895, -2.5097057819366455], + [8.438803672790527, -2.5681097507476807], + [3.036881923675537, -4.155723571777344], + [-1.0094345808029175, 1.5948288440704346], + [2.434081792831421, -7.871747016906738], + [-0.12344080954790115, 11.512418746948242], + [-4.025733470916748, -6.202866077423096], + [10.679762840270996, -2.5077197551727295], + [0.04072444885969162, 9.481620788574219], + [-2.942249059677124, -4.7892231941223145], + [7.3103251457214355, -2.2182161808013916], + [-4.088916301727295, -2.7409045696258545], + [2.6262171268463135, -7.569965839385986], + [5.525686740875244, -1.0843205451965332], + [6.690064907073975, 8.341940879821777], + [-0.08565980941057205, 14.109588623046875], + [-4.272360324859619, -5.915631294250488], + [1.962029218673706, 5.710850715637207], + [1.1425014734268188, 5.936717510223389], + [-2.037428379058838, 2.874584436416626], + [-4.692624568939209, -0.9778098464012146], + [4.113690376281738, -4.020110130310059], + [-4.829891681671143, 5.686022758483887], + [0.12357281893491745, 12.15618896484375], + [8.069560050964355, -3.0933725833892822], + [1.9015130996704102, 3.243882894515991], + [-3.848050117492676, -4.283914566040039], + [2.927799940109253, 6.382004261016846], + [0.6389968395233154, -0.7448890209197998], + [-0.09876228123903275, 10.962347030639648], + [0.5461819767951965, -1.0273736715316772], + [-4.920093536376953, 3.374887466430664], + [5.649827003479004, -2.63820481300354], + [3.3921468257904053, -8.144445419311523], + [-2.500119686126709, 1.5674864053726196], + [3.320795774459839, -4.916437149047852], + [-5.654300212860107, 6.6464715003967285], + [-4.8284173011779785, 4.754549026489258], + [6.584635257720947, 8.30266284942627], + [2.1901867389678955, 1.3143794536590576], + [-3.2040443420410156, -4.946842193603516], + [-0.24812623858451843, -1.4968985319137573], + [3.4054534435272217, -7.87175989151001], + [2.3029754161834717, -8.434926986694336], + [-2.343501329421997, 0.4368690848350525], + [1.9946019649505615, 0.44647589325904846], + [5.216526508331299, -1.176511287689209], + [7.8014373779296875, -2.379897356033325], + [8.462494850158691, -2.3705408573150635], + [-2.7230753898620605, 4.44722318649292], + [-4.024172306060791, 5.3369879722595215], + [3.488739252090454, -5.628847122192383], + [3.1049978733062744, -4.375845909118652], + [3.2250068187713623, -7.424934387207031], + [-4.375113487243652, -0.1902955174446106], + [4.342591762542725, 1.9410122632980347], + [-3.987922430038452, -0.9572656750679016], + [2.816786050796509, -4.0192975997924805], + [-1.710602045059204, 2.205467700958252], + [-2.147055149078369, 2.7265515327453613], + [-6.216524124145508, 7.089664459228516], + [7.458771228790283, -2.612060785293579], + [6.621888637542725, -2.500230550765991], + [0.2515102028846741, 11.134143829345703], + [0.09633874148130417, -1.0239681005477905], + [-2.3887298107147217, 0.7763944864273071], + [-2.0340850353240967, 2.1899545192718506], + [-1.2400898933410645, 1.6348457336425781], + [-3.8190970420837402, -0.17273902893066406], + [1.9014652967453003, 3.9623467922210693], + [6.359432220458984, -1.5293910503387451], + [-3.2487800121307373, -3.878394365310669], + [0.6478924751281738, -4.52839469909668], + [6.004394054412842, -1.7902096509933472], + [-2.4851276874542236, 1.6792877912521362], + [2.40657901763916, 2.1053249835968018], + [3.7298643589019775, -7.364714622497559], + [2.3888027667999268, 4.245368003845215], + [6.723019123077393, 8.125757217407227], + [-3.3877878189086914, 6.004427909851074], + [-2.8403799533843994, -2.755563497543335], + [-4.694737911224365, -2.952709913253784], + [-2.8857762813568115, 1.6561591625213623], + [1.6002893447875977, -0.3111250698566437], + [0.4849861264228821, -1.0606915950775146], + [3.0759642124176025, -4.210699558258057], + [2.0745322704315186, -7.608709812164307], + [5.854053020477295, 7.565396308898926], + [-2.156799077987671, 1.112157940864563], + [-0.17937049269676208, -1.6852493286132812], + [2.769561767578125, -5.387143135070801], + [-0.028589673340320587, 14.246917724609375], + [-4.400656223297119, 5.628069877624512], + [0.02086877077817917, 12.669281959533691], + [3.4557387828826904, -3.734178304672241], + [3.0443994998931885, 0.8567440509796143], + [3.281980514526367, 5.002353668212891], + [11.219736099243164, -2.4640305042266846], + [-6.701746463775635, 0.1814875602722168], + [1.7409101724624634, 2.799187421798706], + [6.409603595733643, -2.2956464290618896], + [-2.342175006866455, 0.6288154125213623], + [0.46017366647720337, -3.4927818775177], + [9.205078125, -2.376603364944458], + [6.068379878997803, -1.4018261432647705], + [3.8195912837982178, 1.623149037361145], + [-3.684251546859741, -3.193120241165161], + [4.162578105926514, 8.314936637878418], + [7.159310817718506, -1.9615185260772705], + [-3.915029764175415, -5.490090370178223], + [-3.2388381958007812, -3.720461845397949], + [3.1650755405426025, -3.617915391921997], + [-0.02552247792482376, 12.61423110961914], + [-6.8340349197387695, 7.849079132080078], + [2.071355104446411, 0.29948505759239197], + [9.331548690795898, -2.32914137840271], + [3.164911985397339, -4.21619987487793], + [-4.47098970413208, 4.999988555908203], + [2.462886095046997, 5.213217258453369], + [5.638815879821777, 7.773899078369141], + [5.251800537109375, -3.3596863746643066], + [3.1154119968414307, -8.316914558410645], + [-3.9231178760528564, -1.6562950611114502], + [-2.8926584720611572, 1.2878655195236206], + [-2.6114065647125244, 0.11831367015838623], + [-6.770320415496826, -1.081853985786438], + [2.6217148303985596, 0.6506676077842712], + [2.2330100536346436, 5.75363826751709], + [-0.6446471810340881, -1.6972169876098633], + [-1.2303708791732788, -1.9995381832122803], + [3.395212411880493, -7.02967643737793], + [4.019866466522217, -2.910059928894043], + [3.0459887981414795, -4.163308620452881], + [-3.5956404209136963, -1.5843417644500732], + [-5.034319877624512, -5.809864521026611], + [-3.9989542961120605, -1.2624926567077637], + [-5.432526111602783, -0.5002698302268982], + [2.29181170463562, 4.799149513244629], + [4.689530372619629, 2.0646865367889404], + [3.304612874984741, -6.676962375640869], + [9.299302101135254, -2.348283052444458], + [7.507490158081055, -1.9619208574295044], + [7.308199405670166, -2.7934460639953613], + [-2.6531689167022705, -2.2532689571380615], + [1.8408992290496826, 2.0097155570983887], + [-0.34479856491088867, 5.939920425415039], + [-4.073066234588623, 5.05797004699707], + [-2.3574962615966797, 1.7349520921707153], + [0.2107824683189392, 9.787164688110352], + [5.8806843757629395, 7.433413028717041], + [0.02208273857831955, 9.608160018920898], + [2.7837510108947754, -6.153036117553711], + [4.688382625579834, -3.0462429523468018], + [5.881170272827148, 7.786444664001465], + [7.362194538116455, 8.854860305786133], + [-4.380341053009033, 4.843743801116943], + [3.4535715579986572, -3.5601980686187744], + [-3.771792411804199, -3.4325246810913086], + [3.013176441192627, -4.176225662231445], + [1.9981069564819336, 4.991569519042969], + [4.663090229034424, 2.036203622817993], + [4.799008369445801, 7.474323749542236], + [-4.544830799102783, -6.026149749755859], + [-4.112192153930664, -0.8081923127174377], + [-5.717173099517822, -0.45248138904571533], + [0.10535096377134323, 9.512818336486816], + [3.4319984912872314, -4.446630954742432], + [-5.762511730194092, 7.504969596862793], + [2.0624735355377197, -5.944248199462891], + [6.922184467315674, 8.367782592773438], + [3.715439558029175, -3.2675225734710693], + [0.7852350473403931, 4.514132499694824], + [0.1931738257408142, 10.527563095092773], + [-2.8726820945739746, 4.956759452819824], + [-5.392345905303955, 4.802436351776123], + [-0.03192616254091263, 10.157417297363281], + [-0.023173101246356964, 9.489694595336914], + [-2.8877036571502686, -3.8442132472991943], + [-2.8422021865844727, -1.305124044418335], + [-4.2761077880859375, -6.354329586029053], + [3.3188843727111816, -7.694238662719727], + [1.9998457431793213, 6.140649795532227], + [-2.5965542793273926, 1.9348890781402588], + [-1.9513378143310547, 1.5734784603118896], + [-2.4815235137939453, 2.096784830093384], + [-4.113028049468994, -2.415536403656006], + [1.369513988494873, -6.6226043701171875], + [2.977912425994873, -4.195745944976807], + [7.274308204650879, -1.7855173349380493], + [-5.0123724937438965, 0.29397648572921753], + [2.409355640411377, -8.903715133666992], + [6.672703742980957, 8.039316177368164], + [-2.0585875511169434, 2.2387404441833496], + [2.16550350189209, -3.4072630405426025], + [-2.124037742614746, 2.6559197902679443], + [-0.10489935427904129, 13.814618110656738], + [0.0786159560084343, 10.273904800415039], + [0.930009663105011, -6.27687406539917], + [0.04324059933423996, 14.082127571105957], + [1.7474689483642578, -6.064718246459961], + [-3.097738742828369, -3.9725208282470703], + [6.738738059997559, -1.6745131015777588], + [-6.036126613616943, 6.953352451324463], + [-2.737086057662964, -4.089350700378418], + [1.2373182773590088, 0.04270919784903526], + [8.654077529907227, -2.2320058345794678], + [6.940341472625732, -2.4400765895843506], + [-3.8674867153167725, -5.970197677612305], + [-2.065887928009033, 2.4476592540740967], + [4.125357627868652, 1.8335741758346558], + [3.787621021270752, -0.18868616223335266], + [-3.7523441314697266, -3.658472776412964], + [-4.122954845428467, 4.366764545440674], + [-4.497297286987305, -3.2340903282165527], + [-4.73471212387085, -7.222474098205566], + [1.7697495222091675, 4.735775470733643], + [-6.7114739418029785, -0.2492583990097046], + [-5.874703884124756, -2.075831890106201], + [3.0232906341552734, -4.215112209320068], + [-5.970919609069824, 6.437934875488281], + [2.269948959350586, -8.761663436889648], + [2.204791307449341, -7.281237602233887], + [1.8685362339019775, -0.6127038598060608], + [0.6031375527381897, -6.208335876464844], + [3.1853151321411133, -4.5715155601501465], + [4.69054651260376, -8.565650939941406], + [-3.6450002193450928, -1.2892011404037476], + [-0.8908336758613586, 5.6312971115112305], + [9.837525367736816, -2.390127182006836], + [2.538712501525879, 6.722781658172607], + [-4.116250991821289, -5.6693925857543945], + [-4.855943202972412, -2.0261521339416504], + [-3.5089528560638428, -5.633198261260986], + [2.3714683055877686, -9.466980934143066], + [2.1960608959198, -3.0317413806915283], + [-4.716725826263428, 4.793269634246826], + [2.8549768924713135, -10.424906730651855], + [2.2668519020080566, 4.818297386169434], + [-4.846644878387451, -5.930816173553467], + [4.596742153167725, 7.416061878204346], + [4.264832019805908, 5.645852088928223], + [1.4892085790634155, -7.2005414962768555], + [8.371275901794434, -2.2847044467926025], + [0.01630675047636032, -0.869726300239563], + [0.1551627516746521, 5.012716293334961], + [-4.34794282913208, 3.9029366970062256], + [-6.903192043304443, -1.1559278964996338], + [6.94486665725708, -2.232168674468994], + [8.395186424255371, -2.161691904067993], + [6.446080207824707, -2.77398681640625], + [2.5364367961883545, 5.996788024902344], + [2.1253268718719482, 0.8968034982681274], + [-5.525155067443848, 6.373743534088135], + [-2.2663543224334717, -4.146175384521484], + [-6.67167854309082, -1.2558857202529907], + [5.443810939788818, -4.832232475280762], + [3.0916733741760254, -5.777583122253418], + [-2.4179086685180664, 1.8728091716766357], + [2.4730358123779297, -8.231338500976562], + [2.4946603775024414, -3.977335214614868], + [3.934192419052124, -2.941042184829712], + [2.877256155014038, 4.160437107086182], + [4.321894645690918, -6.324160575866699], + [-2.2724218368530273, 3.0004100799560547], + [2.319500207901001, 2.463737964630127], + [-2.5699875354766846, -3.6459085941314697], + [-0.04423213750123978, 12.648815155029297], + [5.630112171173096, -3.171461820602417], + [-1.2786386013031006, 5.58820915222168], + [0.03392785042524338, 11.807573318481445], + [6.592255115509033, 8.014276504516602], + [6.819385051727295, -1.3944778442382812], + [-4.459333419799805, -6.290942192077637], + [6.173570156097412, 7.902508735656738], + [0.5463271737098694, 9.673943519592285], + [9.58580493927002, -2.293515682220459], + [2.004682779312134, 3.6674134731292725], + [-0.01220596581697464, 12.99666976928711], + [-2.526054620742798, -4.441882133483887], + [3.7196245193481445, 5.917444705963135], + [1.524662971496582, 4.8855791091918945], + [-5.9169487953186035, -0.440177321434021], + [-2.5812556743621826, 2.3040218353271484], + [-5.108143329620361, 5.890451908111572], + [-0.003994055092334747, 12.319232940673828], + [-0.06478244811296463, 9.78576374053955], + [8.20986270904541, -2.2618796825408936], + [-3.9641623497009277, -5.155458927154541], + [0.11433606594800949, 9.911273002624512], + [3.4559574127197266, -3.8867063522338867], + [3.9202840328216553, -4.504752159118652], + [-5.312675952911377, 6.955127716064453], + [6.848465442657471, 8.235383987426758], + [-3.9631688594818115, -4.441190719604492], + [-6.93829870223999, 8.119245529174805], + [3.052485466003418, 3.7794790267944336], + [-0.020972199738025665, 9.712457656860352], + [-6.666149616241455, -0.3386303186416626], + [2.259915590286255, 4.216484069824219], + [-4.1206746101379395, 5.766351699829102], + [1.95054030418396, -2.1353299617767334], + [-2.4240779876708984, 1.8444124460220337], + [0.6382437348365784, -5.742898941040039], + [5.414681911468506, -4.821895599365234], + [1.480905294418335, 5.004164695739746], + [0.17962110042572021, 10.668461799621582], + [0.9135814905166626, -5.531649589538574], + [5.591432094573975, -1.2632476091384888], + [-4.3977179527282715, -6.324343681335449], + [2.7178828716278076, -4.192317485809326], + [-6.369408130645752, -0.48340022563934326], + [-0.5416937470436096, -2.084820508956909], + [-4.335202693939209, -6.345536231994629], + [-4.206174373626709, -6.009530067443848], + [-4.9758195877075195, -7.765985488891602], + [-3.8456356525421143, 4.405065536499023], + [-3.772732973098755, -5.5070271492004395], + [8.312323570251465, -2.1883809566497803], + [7.608139514923096, -2.2740728855133057], + [-1.4650847911834717, 2.0644538402557373], + [2.936617136001587, -0.4325648546218872], + [-4.65801477432251, -7.798178672790527], + [-2.088627815246582, 2.5389723777770996], + [-2.292078971862793, 2.2579662799835205], + [2.4493186473846436, 6.251202583312988], + [0.17089742422103882, 10.751241683959961], + [-4.87843132019043, -0.4056391716003418], + [-3.0933868885040283, -2.9755618572235107], + [-7.485305309295654, -1.3287113904953003], + [-3.1797211170196533, -4.7167439460754395], + [7.107738018035889, -6.224696159362793], + [2.8835062980651855, -6.672957420349121], + [7.693063259124756, 9.184247016906738], + [-5.214086055755615, -0.8845334053039551], + [-4.664875507354736, -7.005748748779297], + [8.825701713562012, -2.4561543464660645], + [6.680209159851074, 8.212491989135742], + [-0.06962210685014725, 12.516684532165527], + [7.357437610626221, -2.115018606185913], + [-2.213895320892334, 2.5781874656677246], + [-4.021676540374756, -1.0396074056625366], + [3.8019134998321533, 1.4599732160568237], + [6.961720943450928, -2.3413093090057373], + [-2.2793314456939697, 1.0372283458709717], + [3.3394415378570557, -3.104498863220215], + [4.455124378204346, -3.7428691387176514], + [0.1521715521812439, 10.330561637878418], + [8.105292320251465, -2.3546557426452637], + [0.95706707239151, 1.285502552986145], + [1.7680052518844604, 4.550483703613281], + [6.155863285064697, 7.792026519775391], + [-1.979898452758789, 2.122992753982544], + [-2.4249541759490967, -4.054897308349609], + [8.575020790100098, -2.2974603176116943], + [-4.741933345794678, -4.171449661254883], + [-3.3203420639038086, -5.551329612731934], + [-5.311141014099121, 5.702143669128418], + [1.1894997358322144, 2.842880964279175], + [7.782601833343506, -2.6430470943450928], + [-4.095616817474365, -6.071915149688721], + [-0.2973141670227051, 1.1625267267227173], + [-2.8859200477600098, -2.92946720123291], + [-1.7285460233688354, -3.5534839630126953], + [-3.1299564838409424, -4.419192314147949], + [-5.2503342628479, -1.0881366729736328], + [0.05105345696210861, 10.334281921386719], + [-5.028942108154297, -8.094239234924316], + [3.724764108657837, -3.0171496868133545], + [3.1096932888031006, -4.414735794067383], + [4.723348140716553, -3.4854390621185303], + [-0.04638511687517166, 7.465576171875], + [3.1689109802246094, 1.9394205808639526], + [2.344339609146118, -2.936678409576416], + [2.3798773288726807, 3.6975436210632324], + [-0.8990924954414368, 1.7074090242385864], + [-2.2090184688568115, 2.53790283203125], + [-5.027594089508057, -0.8055538535118103], + [0.1367126703262329, 9.931689262390137], + [10.089001655578613, -2.4677116870880127], + [-1.8288705348968506, 2.3884799480438232], + [6.267637729644775, -1.401638150215149], + [0.1272222399711609, 11.21343994140625], + [0.7366341352462769, -2.3506975173950195], + [9.48620319366455, -2.3307316303253174], + [0.23990792036056519, 11.123136520385742], + [3.3607449531555176, -4.7445573806762695], + [6.054501056671143, -3.136103391647339], + [2.7830350399017334, 6.697808742523193], + [-0.036466486752033234, 9.945967674255371], + [1.8677451610565186, 4.101120948791504], + [-2.5501482486724854, 1.8354721069335938], + [8.152580261230469, -2.2255585193634033], + [2.1871955394744873, -7.127196311950684], + [-2.0976204872131348, 2.602491617202759], + [5.71189546585083, -3.870429754257202], + [5.352145671844482, 7.116779327392578], + [6.307139873504639, 7.940970420837402], + [6.110469341278076, 7.833091735839844], + [0.2807410955429077, 11.620965957641602], + [-4.6632399559021, -5.744694232940674], + [0.037287794053554535, -1.4344838857650757], + [7.5861639976501465, 8.95039176940918], + [0.13192051649093628, 11.32446575164795], + [0.9103080630302429, 0.6276206970214844], + [-1.7199084758758545, 2.5216009616851807], + [2.426579236984253, 0.35265469551086426], + [-3.177502393722534, -5.629598617553711], + [0.7644664645195007, 4.973476409912109], + [-7.361701488494873, -0.2756674289703369], + [-5.833423137664795, -2.2725517749786377], + [-4.142187595367432, -5.522511959075928], + [-5.328512668609619, 5.776477813720703], + [-2.0625057220458984, 2.2683327198028564], + [5.763058662414551, -6.004145622253418], + [-5.043760776519775, 6.287747383117676], + [-0.011385329067707062, 12.8853120803833], + [-4.015893936157227, -6.920724868774414], + [2.059959650039673, 5.394643306732178], + [-1.1236882209777832, 1.6596051454544067], + [-2.128793716430664, -2.914707899093628], + [-4.6608500480651855, -6.285283088684082], + [-2.2339632511138916, -0.5285491943359375], + [-2.0675127506256104, 1.169323205947876], + [6.57157039642334, -5.360167026519775], + [2.3141872882843018, -8.470758438110352], + [-5.396130084991455, 4.829787731170654], + [7.707624912261963, 9.108348846435547], + [-1.1092216968536377, -2.9009878635406494], + [-3.0117833614349365, -3.448336362838745], + [-2.0809524059295654, 0.03185414895415306], + [-2.0888452529907227, 2.3858745098114014], + [-4.5573225021362305, 6.586432456970215], + [7.495766639709473, -2.59363055229187], + [5.721815586090088, -1.8243736028671265], + [2.041698694229126, 0.07361537218093872], + [1.9105310440063477, -1.0666662454605103], + [5.2294182777404785, 6.65510892868042], + [6.392460346221924, -1.2142280340194702], + [3.16589093208313, -3.6078248023986816], + [2.011385440826416, -5.196549415588379], + [2.1980066299438477, 6.1222639083862305], + [7.894278049468994, -1.9691377878189087], + [-4.955845355987549, 0.2573697566986084], + [-1.4315240383148193, -2.244994878768921], + [-4.48174524307251, 5.130906581878662], + [7.4312424659729, -2.075089931488037], + [2.5549042224884033, 1.2743009328842163], + [-1.4949790239334106, -2.2410500049591064], + [8.013472557067871, -2.1667304039001465], + [1.9222524166107178, 1.0782160758972168], + [9.11828899383545, -2.3087332248687744], + [6.350780963897705, 7.926588535308838], + [3.009129524230957, -4.051263809204102], + [-4.28795862197876, -1.0263804197311401], + [3.6292290687561035, -4.831818103790283], + [-0.6068856716156006, -2.427886724472046], + [0.35093507170677185, -0.9255626797676086], + [0.21813184022903442, 10.886924743652344], + [3.3199055194854736, -4.000921249389648], + [-4.056509017944336, -1.5167087316513062], + [-2.788954019546509, 5.197545051574707], + [5.945685863494873, 7.9171061515808105], + [-4.463903903961182, -2.4408695697784424], + [-5.3883562088012695, -6.354887962341309], + [5.295494556427002, -4.411074638366699], + [-3.071338415145874, -1.1759930849075317], + [8.266318321228027, -2.3873589038848877], + [1.8069989681243896, 3.828660249710083], + [0.23424500226974487, 10.964254379272461], + [-4.025684833526611, 5.6375885009765625], + [6.378884315490723, -1.4361647367477417], + [0.322934627532959, -1.3080637454986572], + [-6.286848545074463, -1.5974453687667847], + [3.9935905933380127, -4.485095977783203], + [-3.249742031097412, -3.0969655513763428], + [-4.7707343101501465, -2.7909836769104004], + [4.233803749084473, 5.630467414855957], + [-1.7446894645690918, 2.107818365097046], + [-2.3547301292419434, 0.9216272830963135], + [0.0247073695063591, 12.957459449768066], + [-2.1355783939361572, 2.447747230529785], + [8.049881935119629, -2.193204641342163], + [-4.325735569000244, -0.27666211128234863], + [-2.4651384353637695, 1.7699172496795654], + [-5.640754222869873, -0.4223848581314087], + [2.120032548904419, 1.0797991752624512], + [0.08396964520215988, 9.760276794433594], + [0.23715752363204956, 11.014213562011719], + [3.091717481613159, -4.383747100830078], + [2.936124563217163, -4.160304546356201], + [-1.3438966274261475, -3.7998344898223877], + [-5.5750250816345215, 2.3940846920013428], + [0.7067062854766846, 0.3459310531616211], + [4.527531623840332, -3.3422317504882812], + [6.772640705108643, -2.9782116413116455], + [-1.319555640220642, 0.5710523128509521], + [0.34100252389907837, 13.393935203552246], + [-0.681600034236908, -2.7234156131744385], + [-5.967992305755615, 7.425518989562988], + [-5.33783483505249, -3.001969337463379], + [-2.218719482421875, 2.0588035583496094], + [-5.483577728271484, -1.703883171081543], + [-5.451644420623779, 6.025753021240234], + [2.362177610397339, -6.185008525848389], + [-3.2136893272399902, -4.176782608032227], + [7.85349702835083, -2.167628049850464], + [5.341793537139893, -1.0897353887557983], + [-4.896071434020996, -0.39671772718429565], + [0.11224525421857834, 11.310429573059082], + [-4.444389820098877, -3.787266969680786], + [3.5477395057678223, -3.844179630279541], + [2.6609129905700684, -3.607445478439331], + [5.957775592803955, -1.1668140888214111], + [9.632630348205566, -2.5027267932891846], + [3.0478875637054443, -10.403483390808105], + [-3.717355728149414, -0.390512079000473], + [-0.05357665568590164, 13.24688720703125], + [2.5016424655914307, -9.154823303222656], + [8.490772247314453, -2.351672887802124], + [-5.1635565757751465, -2.6830694675445557], + [-2.353597402572632, -3.0268337726593018], + [-1.3953440189361572, 2.0025949478149414], + [11.136543273925781, -2.515123128890991], + [0.15412253141403198, 11.680631637573242], + [-4.330504894256592, -6.426531791687012], + [-4.732810974121094, 7.183177471160889], + [0.24217242002487183, 10.587007522583008], + [-2.7844607830047607, -3.8013768196105957], + [-0.963017463684082, -3.3320746421813965], + [-5.57431697845459, 5.000933647155762], + [-3.00822377204895, -4.925857067108154], + [-2.573038101196289, 1.9967011213302612], + [7.944333553314209, -2.0715272426605225], + [0.16311544179916382, 11.353219985961914], + [3.8392789363861084, -7.278298377990723], + [4.5078911781311035, 5.86409854888916], + [-3.8772380352020264, -6.25354528427124], + [-2.236933946609497, 2.240036725997925], + [2.045994758605957, -7.4437103271484375], + [6.893667697906494, -2.7122902870178223], + [0.337837815284729, -1.4006242752075195], + [-2.9138429164886475, 2.8351190090179443], + [-2.3134868144989014, 3.037226915359497], + [0.1577659249305725, 10.064587593078613], + [1.789649486541748, 0.16333553194999695], + [0.11038326472043991, 9.822090148925781], + [-4.926090717315674, -2.424682140350342], + [-2.640583038330078, 1.9407265186309814], + [9.51118278503418, -2.343409299850464], + [3.952662706375122, -3.1010215282440186], + [2.331054210662842, 1.9364032745361328], + [-0.11100024729967117, 13.703984260559082], + [-5.745092868804932, 7.235964775085449], + [3.6276373863220215, -3.657928466796875], + [1.9188122749328613, -6.990334987640381], + [9.42806339263916, -2.381002187728882], + [-0.05028403550386429, 10.286276817321777], + [-3.147484302520752, 0.23660898208618164], + [0.7643613219261169, 5.6435418128967285], + [3.1217987537384033, -4.429167747497559], + [9.260785102844238, -2.7298691272735596], + [0.16425806283950806, 8.945079803466797], + [-3.451491594314575, -4.068039417266846], + [3.3168447017669678, -4.286074638366699], + [3.6561198234558105, -8.121329307556152], + [2.988272190093994, 5.666214942932129], + [4.090638637542725, 5.565839767456055], + [-4.456081867218018, -1.7297595739364624], + [-1.586584210395813, 1.8848356008529663], + [2.4965672492980957, 3.329892873764038], + [6.562163829803467, -1.930726408958435], + [-0.011381082236766815, -1.4314371347427368], + [10.1205472946167, -2.3928277492523193], + [2.8387787342071533, 5.133131980895996], + [5.844983100891113, 7.341526508331299], + [3.4909229278564453, -1.3663972616195679], + [-2.77510666847229, -3.754127264022827], + [-5.175907135009766, -0.4566887617111206], + [-0.6600571274757385, 5.582973957061768], + [4.61655330657959, 0.8000289797782898], + [-0.026020832359790802, 12.750706672668457], + [0.2929602265357971, 11.925117492675781], + [2.4527149200439453, 1.2791224718093872], + [-2.186588764190674, 2.830538272857666], + [3.240508794784546, -4.74671745300293], + [-2.361001491546631, 2.660421133041382], + [0.5394903421401978, -5.597858428955078], + [-4.558788776397705, -4.9377360343933105], + [-2.098562479019165, 5.618191719055176], + [4.320743560791016, 7.4951090812683105], + [4.301324367523193, -3.8534038066864014], + [7.9918951988220215, -2.0908029079437256], + [5.2823805809021, 7.19587516784668], + [5.4457244873046875, 6.815550327301025], + [5.375511646270752, 7.058313369750977], + [-0.5578206777572632, -0.33721429109573364], + [2.8729665279388428, -9.617429733276367], + [-2.2697525024414062, 2.2547247409820557], + [1.8132586479187012, 5.353544235229492], + [-4.840358257293701, -1.9700034856796265], + [-2.3930602073669434, -4.152777194976807], + [-3.0406453609466553, -1.757111668586731], + [8.779838562011719, -2.262118101119995], + [-5.802975177764893, -1.043389081954956], + [-0.22593337297439575, 7.497974872589111], + [-3.7175467014312744, -2.4942054748535156], + [4.031327724456787, 6.994261264801025], + [3.0630252361297607, -9.193256378173828], + [-2.612992763519287, 2.037123441696167], + [-0.0023107603192329407, 11.772693634033203], + [-1.2555246353149414, -1.1291404962539673], + [2.138357639312744, -1.0047059059143066], + [-2.2249510288238525, 2.9614005088806152], + [7.127705097198486, -2.5067474842071533], + [4.049145698547363, -3.595459222793579], + [0.9823408722877502, 2.1801791191101074], + [1.4742817878723145, -4.9003753662109375], + [2.9124114513397217, -4.145413398742676], + [-3.889763116836548, 6.4844183921813965], + [-6.94606351852417, 2.784327507019043], + [0.0665242001414299, 11.660597801208496], + [2.34097957611084, 2.036790132522583], + [3.104525089263916, -7.510293006896973], + [3.3559658527374268, 1.2841655015945435], + [2.909038543701172, -8.416440963745117], + [3.4300835132598877, -6.129692077636719], + [-2.4631998538970947, 1.0659633874893188], + [-0.2232310175895691, -1.744634747505188], + [-1.9529236555099487, 1.2410074472427368], + [-7.2578864097595215, -1.408319115638733], + [-2.7316277027130127, -3.3865606784820557], + [-6.967077732086182, 7.945987701416016], + [-0.32934489846229553, -1.710269570350647], + [-2.150073528289795, 2.7411348819732666], + [7.347113132476807, -2.075536012649536], + [4.815421104431152, -3.55770206451416], + [1.520347237586975, -0.07550704479217529], + [3.7733280658721924, -7.3076019287109375], + [-7.54735803604126, -0.5380197763442993], + [-2.5368812084198, 2.1346747875213623], + [-2.376446485519409, -1.0147532224655151], + [-3.5436928272247314, -6.508678436279297], + [7.1280999183654785, -2.6915547847747803], + [1.7165303230285645, -1.2379932403564453], + [3.527285099029541, -3.5321006774902344], + [6.386833190917969, 8.315244674682617], + [3.077648639678955, -3.5360605716705322], + [2.1902337074279785, 1.2138422727584839], + [3.8356897830963135, -3.6999380588531494], + [5.233781814575195, -1.5467530488967896], + [-3.537795066833496, 5.618529319763184], + [-0.9294692277908325, 1.9127613306045532], + [4.010350704193115, -3.5857009887695312], + [6.914206027984619, -2.7655985355377197], + [-1.2024048566818237, -0.5507776737213135], + [-5.357606410980225, 1.8237791061401367], + [2.775909185409546, -3.227004289627075], + [3.547956705093384, -6.789769649505615], + [10.894598960876465, -2.529231071472168], + [1.8093476295471191, 2.418152332305908], + [-5.754496097564697, 3.928893566131592], + [-2.1530568599700928, -2.019299268722534], + [-4.398077964782715, 6.000790596008301], + [5.613075256347656, -2.1949002742767334], + [-4.109542369842529, -4.450445175170898], + [-4.4790940284729, -6.391284942626953], + [1.473762035369873, 2.470665693283081], + [2.2391998767852783, -2.661675214767456], + [-4.204356670379639, -6.8327507972717285], + [-4.985278606414795, -6.3693742752075195], + [3.3313732147216797, -5.698574066162109], + [3.037846803665161, -8.853094100952148], + [8.14859676361084, -2.413792848587036], + [-5.389327526092529, 4.457347393035889], + [4.241494655609131, -3.8674144744873047], + [-2.3105709552764893, -3.3731963634490967], + [6.271291255950928, -5.666181564331055], + [2.6049630641937256, -8.91812801361084], + [8.66606616973877, -2.3217642307281494], + [-3.9486279487609863, -2.454437017440796], + [-2.693176746368408, -1.800723910331726], + [7.281269550323486, -1.8855592012405396], + [-0.7421875, 8.69938850402832], + [5.5069260597229, 7.146156311035156], + [1.2990608215332031, -7.270188331604004], + [3.0209991931915283, -4.243120193481445], + [3.107114791870117, -4.068055629730225], + [-4.097938060760498, 5.560194969177246], + [1.3937816619873047, 4.979756832122803], + [-1.979007363319397, 2.097578763961792], + [1.6304891109466553, 5.411769866943359], + [2.1095430850982666, 0.14690014719963074], + [-2.491807460784912, 2.1438820362091064], + [8.168015480041504, -2.5162298679351807], + [7.042336940765381, 8.700698852539062], + [-2.270176649093628, 2.7875258922576904], + [6.692508697509766, 8.053936958312988], + [-2.848590612411499, -1.391421914100647], + [-6.0168938636779785, 2.1229751110076904], + [3.6435658931732178, -3.5610687732696533], + [5.74218225479126, 7.3108696937561035], + [3.2069284915924072, 0.7901309728622437], + [-3.846151113510132, -5.136206150054932], + [-3.9898250102996826, 5.066441059112549], + [-5.204815864562988, -0.9298792481422424], + [2.7945659160614014, 1.0291160345077515], + [6.073669910430908, -0.7516570091247559], + [-4.671275615692139, -6.42076301574707], + [9.595234870910645, -2.336214780807495], + [-4.303295612335205, -6.045444488525391], + [0.003854326903820038, 9.192992210388184], + [4.401686191558838, -2.001464605331421], + [-4.288265705108643, -5.932780742645264], + [-2.43542218208313, 2.0338962078094482], + [-2.2497127056121826, 2.4810571670532227], + [6.333584308624268, 7.649223804473877], + [-2.119344472885132, 1.8923860788345337], + [-4.936182975769043, 7.785496711730957], + [1.7779995203018188, 0.5223880410194397], + [3.528179407119751, -3.4868452548980713], + [-8.524611473083496, 0.15137958526611328], + [-3.7499115467071533, -3.667282819747925], + [-5.0774760246276855, -5.614920616149902], + [1.736603856086731, -6.508627891540527], + [3.1586263179779053, -4.406806945800781], + [-6.066202640533447, 7.915432929992676], + [10.759817123413086, -2.461120843887329], + [-2.5599546432495117, 1.7957361936569214], + [-2.628324031829834, 2.2950572967529297], + [-5.021334171295166, -4.106374740600586], + [4.018115043640137, 0.9910392761230469], + [4.037209987640381, -7.5085015296936035], + [8.470694541931152, -2.5795352458953857], + [4.206883907318115, -8.51279354095459], + [2.0824625492095947, 0.4336698055267334], + [7.315584659576416, -1.735692024230957], + [5.339706897735596, 6.656083583831787], + [7.391177654266357, -2.1764702796936035], + [2.9228150844573975, -5.704181671142578], + [0.5949673056602478, 11.729167938232422], + [-2.99884295463562, -3.061967611312866], + [1.892634630203247, -4.044820785522461], + [0.41205835342407227, -0.8892892599105835], + [2.7926347255706787, -3.9752886295318604], + [1.4433374404907227, -7.056727409362793], + [6.010448932647705, 7.473454475402832], + [-6.325483798980713, -1.7134112119674683], + [-4.022649765014648, -5.872854232788086], + [-2.578277111053467, -4.961359977722168], + [2.6572914123535156, -1.8955472707748413], + [-1.5774725675582886, 2.2173235416412354], + [-3.1189310550689697, 5.338179588317871], + [-2.514633893966675, -4.006390571594238], + [1.9772567749023438, 3.5727062225341797], + [3.292459726333618, -7.801456451416016], + [8.399374961853027, -2.2771077156066895], + [3.121877431869507, -6.967596054077148], + [6.07476806640625, -5.262372970581055], + [3.6635959148406982, -6.939147472381592], + [-2.356072425842285, 1.5580476522445679], + [2.3480398654937744, -8.623861312866211], + [2.210827112197876, -5.9656596183776855], + [-6.306652545928955, 2.0485360622406006], + [10.307538986206055, -2.5260961055755615], + [-1.0690590143203735, -3.6604349613189697], + [-2.2367191314697266, 2.275782823562622], + [5.565334796905518, -1.2597178220748901], + [-5.350159168243408, -3.2058870792388916], + [-6.3052544593811035, 0.029320355504751205], + [3.728506326675415, 1.3284026384353638], + [3.3186264038085938, -4.045080184936523], + [-4.150239944458008, -0.2728680372238159], + [8.420376777648926, -2.23530912399292], + [-5.81313419342041, -0.8497332334518433], + [-5.482815265655518, -2.2271568775177], + [2.9449970722198486, -4.120593547821045], + [2.2175209522247314, -3.965890407562256], + [3.5957279205322266, -4.9384870529174805], + [-2.138977527618408, 6.257058143615723], + [-5.880817890167236, 7.059638977050781], + [8.430543899536133, -2.3657805919647217], + [0.39332640171051025, -1.1405751705169678], + [-3.9833409786224365, -2.504209280014038], + [-4.347002029418945, 4.0956220626831055], + [0.19361251592636108, -1.04950749874115], + [1.4712722301483154, -0.07345929741859436], + [0.9086920022964478, -5.3694329261779785], + [5.3120198249816895, 7.722576141357422], + [-3.9524357318878174, -2.1466684341430664], + [-3.4321539402008057, -3.951929807662964], + [3.0121989250183105, -4.252829551696777], + [-2.1911702156066895, 2.778575897216797], + [3.4511020183563232, -8.8819580078125], + [-0.8562794327735901, 1.7127858400344849], + [1.853085994720459, 1.7323945760726929], + [1.0352076292037964, 2.1047873497009277], + [2.169346332550049, -2.420442581176758], + [5.960885524749756, -1.3520108461380005], + [-2.843050241470337, 0.883400022983551], + [-2.765669584274292, 4.6418232917785645], + [3.5142555236816406, -6.489529609680176], + [0.7633132934570312, -6.196811676025391], + [2.6553237438201904, 7.216601848602295], + [-4.389925479888916, -6.383536338806152], + [-2.438530206680298, 1.2632057666778564], + [8.302157402038574, -2.585029363632202], + [9.180728912353516, -2.489431142807007], + [1.7178277969360352, 5.639484882354736], + [2.592869520187378, 0.930082380771637], + [-4.533386707305908, -6.577445030212402], + [0.2264367938041687, 10.907882690429688], + [-0.9063583612442017, 0.8634889721870422], + [2.281383514404297, 2.194406270980835], + [0.2771869897842407, 10.826251983642578], + [0.08348750323057175, 12.142316818237305], + [3.664954423904419, -3.949775218963623], + [-1.7153277397155762, 0.894598126411438], + [3.134326219558716, 6.419669151306152], + [3.5070993900299072, -8.278088569641113], + [0.02282612770795822, 10.483417510986328], + [2.9713306427001953, -4.097087383270264], + [7.582850933074951, -2.2678821086883545], + [2.2340686321258545, 0.2092062532901764], + [-0.670012891292572, -2.196821451187134], + [6.816983699798584, 8.396632194519043], + [-0.8022857308387756, -2.308795213699341], + [4.926543712615967, 6.269412040710449], + [2.0764811038970947, -5.315645694732666], + [1.0764422416687012, -0.15455615520477295], + [7.387151718139648, -6.324707984924316], + [0.19669264554977417, 11.393829345703125], + [-0.027106590569019318, 13.459049224853516], + [5.838078498840332, -1.2803987264633179], + [7.855992794036865, -2.221036195755005], + [-2.932502269744873, -1.5297938585281372], + [2.915193796157837, 0.7680298089981079], + [2.983593702316284, -4.015620708465576], + [0.1099579855799675, -2.2937710285186768], + [3.030522584915161, 1.2100144624710083], + [5.692659378051758, -2.111900568008423], + [2.7858521938323975, -4.529990196228027], + [0.1810438632965088, 10.259712219238281], + [3.0881526470184326, -3.6078312397003174], + [-6.550830364227295, -1.0710749626159668], + [3.487635374069214, -8.434383392333984], + [5.100416660308838, 6.700693130493164], + [0.14803487062454224, 12.064350128173828], + [7.439604759216309, -1.9434069395065308], + [6.5299835205078125, -5.62728214263916], + [3.4345643520355225, -3.189685106277466], + [-4.192476272583008, -5.421907424926758], + [-2.452516794204712, 1.624160647392273], + [3.015895128250122, -10.350541114807129], + [-5.4359965324401855, 8.157344818115234], + [8.230217933654785, -2.241522789001465], + [-4.496618270874023, -2.5434484481811523], + [3.9401872158050537, -8.878203392028809], + [9.16688346862793, -2.4973762035369873], + [-2.163677930831909, 2.334805488586426], + [8.105673789978027, -2.1482784748077393], + [-1.454705834388733, 1.8787320852279663], + [-4.017697334289551, -1.7345703840255737], + [-0.06004295498132706, -1.5437368154525757], + [4.257913589477539, -3.6910293102264404], + [-2.794776678085327, -3.426443338394165], + [-1.35220205783844, -4.171077728271484], + [2.500166416168213, -8.306642532348633], + [-3.0033888816833496, 0.9800161123275757], + [7.746786117553711, -2.3654286861419678], + [-4.808049201965332, -3.6161510944366455], + [-4.862346172332764, 4.828861236572266], + [2.4438376426696777, 3.885277509689331], + [-6.689123630523682, 7.9425764083862305], + [-4.794225215911865, -0.29018086194992065], + [0.2041798233985901, 10.920066833496094], + [-2.2683708667755127, 2.335404872894287], + [0.25424879789352417, 10.986998558044434], + [10.731797218322754, -2.488659143447876], + [2.1116535663604736, -8.219625473022461], + [7.145376682281494, -1.5841811895370483], + [1.8637831211090088, 0.9218241572380066], + [0.23179489374160767, 11.039287567138672], + [-2.1736762523651123, 2.382516622543335], + [3.2609641551971436, -2.4821345806121826], + [-3.471360921859741, -5.687416076660156], + [-4.32824182510376, -6.578514575958252], + [2.6327152252197266, -8.356592178344727], + [5.731673717498779, 7.841026782989502], + [-4.765923976898193, 4.167414665222168], + [1.9097251892089844, -7.632073879241943], + [-3.823991537094116, 6.666624069213867], + [3.3113386631011963, -4.654338359832764], + [7.446584224700928, -5.6107683181762695], + [5.56117582321167, -4.9278764724731445], + [3.207336187362671, -3.5626060962677], + [-0.2387390434741974, -1.2224074602127075], + [-1.372397780418396, 0.17847102880477905], + [2.872279405593872, -8.144269943237305], + [7.682976245880127, -2.3721816539764404], + [-3.219597101211548, -2.06037974357605], + [1.9501757621765137, -2.1744401454925537], + [-2.510488271713257, 1.7058985233306885], + [-1.9350273609161377, -1.6910053491592407], + [-5.307149410247803, -2.104217290878296], + [-2.6344833374023438, -0.8977044820785522], + [2.8436458110809326, -8.49920654296875], + [-4.809499740600586, 5.954408645629883], + [-3.697014093399048, -1.2652329206466675], + [8.402907371520996, -2.3013854026794434], + [3.3016366958618164, -7.802738189697266], + [2.3999297618865967, 5.910341739654541], + [2.9138777256011963, -4.207635402679443], + [-5.7775092124938965, -2.901902914047241], + [-1.8597174882888794, -3.839799404144287], + [4.7437310218811035, 7.043041229248047], + [6.309922218322754, -1.7269952297210693], + [2.98754620552063, -4.235357761383057], + [-4.496246814727783, -0.6063816547393799], + [-4.91436767578125, 5.3704729080200195], + [3.7675769329071045, 6.952154636383057], + [-3.0214521884918213, -5.125382900238037], + [3.3885889053344727, -7.410734176635742], + [3.057525396347046, -4.326701641082764], + [3.551923990249634, 1.8573170900344849], + [-3.3855245113372803, -2.2761690616607666], + [-4.40557336807251, 4.952136039733887], + [-0.05026013404130936, -0.4120790660381317], + [-2.598252773284912, 0.2405264973640442], + [0.20569241046905518, 9.811897277832031], + [0.1324191689491272, 9.887271881103516], + [2.4817421436309814, 3.6779532432556152], + [7.170677185058594, -4.8826069831848145], + [-0.7594008445739746, -1.6540697813034058], + [7.489109516143799, 8.87544059753418], + [-7.045764446258545, -0.3825955390930176], + [0.8492999076843262, 0.3627878725528717], + [6.267347812652588, -3.1251585483551025], + [-2.1437957286834717, 2.292531728744507], + [-3.985960006713867, -2.232236862182617], + [-4.596934795379639, -3.030611276626587], + [-0.04470420628786087, 10.015426635742188], + [2.8407938480377197, 0.7752334475517273], + [-3.6650593280792236, 3.1460583209991455], + [4.402175426483154, -3.229738473892212], + [-4.209471225738525, -4.790373802185059], + [3.309016466140747, -8.759471893310547], + [-4.035450458526611, -6.359077453613281], + [-6.051999568939209, -2.2114651203155518], + [-2.72749924659729, 1.7274634838104248], + [-5.691233158111572, 6.3701887130737305], + [4.762291431427002, -6.176267147064209], + [8.532864570617676, -2.3402721881866455], + [2.2496888637542725, 0.6395780444145203], + [-5.726298809051514, -0.29800331592559814], + [-3.920238733291626, -2.265634059906006], + [5.5630202293396, 7.709313869476318], + [-2.715204954147339, 0.852803111076355], + [2.840364933013916, 2.168302536010742], + [-2.009913206100464, 2.315880298614502], + [-3.034148931503296, 3.3229033946990967], + [-2.242002248764038, 2.3967838287353516], + [1.6503021717071533, 2.316258192062378], + [-4.383413791656494, -6.172679424285889], + [3.095782995223999, 1.1493943929672241], + [2.6296608448028564, -2.18751859664917], + [5.719151020050049, -4.953940391540527], + [3.2254998683929443, -4.523613929748535], + [5.036958694458008, 6.541838645935059], + [3.1594226360321045, 1.0980165004730225], + [-4.144151210784912, 4.784480094909668], + [-3.0779922008514404, -4.92498779296875], + [3.068006753921509, -4.265784740447998], + [-4.439256191253662, -6.717066764831543], + [6.69516134262085, -2.8689427375793457], + [2.0477564334869385, 4.978771209716797], + [-2.8165671825408936, -0.5935420393943787], + [-3.0600671768188477, -5.746551513671875], + [-2.5197527408599854, 1.7594877481460571], + [2.5667636394500732, 1.6330384016036987], + [8.241787910461426, -2.2405526638031006], + [4.925762176513672, -4.42586612701416], + [5.753857612609863, 7.681207656860352], + [-3.0023038387298584, -4.10273551940918], + [0.10948275774717331, 11.969629287719727], + [1.308632493019104, -6.908839702606201], + [-4.707415580749512, -6.787103652954102], + [-2.5510246753692627, 2.0230765342712402], + [-2.601076126098633, 1.815708041191101], + [-2.9353244304656982, -3.3822944164276123], + [-3.0644705295562744, 4.3276777267456055], + [-4.801788806915283, 3.354097604751587], + [0.14901453256607056, 10.060667037963867], + [-4.249863147735596, 5.8378520011901855], + [3.5248374938964844, -3.398005962371826], + [2.962434768676758, 1.8655740022659302], + [9.293237686157227, -2.4843575954437256], + [7.798893928527832, -2.1534531116485596], + [-3.795724391937256, 4.421894550323486], + [-2.1763570308685303, 2.505019426345825], + [3.1540462970733643, -8.501808166503906], + [-4.532193660736084, -4.645125389099121], + [-6.458134174346924, 7.372560977935791], + [-1.412009596824646, -0.5101060271263123], + [2.8768727779388428, -9.75442123413086], + [3.0434389114379883, -7.312066078186035], + [-0.03337974101305008, 12.997920989990234], + [-0.053422875702381134, 14.20639419555664], + [-7.295682907104492, 0.3261222839355469], + [10.117176055908203, -2.4316036701202393], + [-4.711822032928467, -7.16392707824707], + [3.502535104751587, 5.752413272857666], + [3.917107343673706, -2.7239973545074463], + [1.7812460660934448, -6.84481143951416], + [-6.6255717277526855, 2.783254861831665], + [3.797701597213745, -4.456590175628662], + [3.5473926067352295, -3.3795583248138428], + [-2.0300872325897217, -3.4393234252929688], + [9.048060417175293, -2.4050686359405518], + [-3.57098650932312, -2.643045663833618], + [1.879107117652893, -7.037202835083008], + [7.87493896484375, -2.212367296218872], + [2.5179409980773926, -6.374500751495361], + [-4.4954752922058105, -6.301805019378662], + [5.246245384216309, -5.063668727874756], + [-4.188307285308838, -3.065068006515503], + [0.17321348190307617, 10.141702651977539], + [3.2767207622528076, -6.5871076583862305], + [-3.9244635105133057, -6.212047576904297], + [6.6442999839782715, -4.860408306121826], + [2.5962131023406982, -6.929161548614502], + [-5.049343109130859, -2.8609325885772705], + [0.04649954289197922, 9.563053131103516], + [-4.7451019287109375, -3.332002878189087], + [8.533706665039062, -2.4701669216156006], + [5.736878871917725, 7.821688652038574], + [-5.106889247894287, 3.651000738143921], + [5.001759052276611, 7.121885299682617], + [2.943952798843384, -3.1381494998931885], + [-4.827145099639893, 4.667694568634033], + [2.0246620178222656, 1.8971147537231445], + [6.191243648529053, 7.967741966247559], + [-5.225858211517334, 4.513632297515869], + [6.781060695648193, -1.460989236831665], + [9.375319480895996, -2.67276930809021], + [1.4442859888076782, -0.9999221563339233], + [3.612762212753296, -7.056715488433838], + [2.218273878097534, 5.762161731719971], + [3.7751729488372803, -3.494575023651123], + [-5.504749774932861, 7.617067337036133], + [7.980715274810791, -1.8877750635147095], + [4.2107253074646, 1.881945013999939], + [3.404107093811035, -2.5371038913726807], + [5.653515338897705, 8.00938892364502], + [3.077723264694214, -3.637706995010376], + [9.007616996765137, -2.3048369884490967], + [-4.165394306182861, -6.079017639160156], + [-3.308433771133423, -2.4917311668395996], + [1.3355722427368164, 4.159858226776123], + [-2.0979926586151123, 0.27663227915763855], + [-1.2233656644821167, 1.4697716236114502], + [-3.139127016067505, -1.4374901056289673], + [4.398285388946533, -4.884601593017578], + [0.18038254976272583, 11.385934829711914], + [5.025622844696045, -2.980358839035034], + [-0.5083467960357666, 0.844498872756958], + [-1.5772627592086792, -3.0787570476531982], + [3.0830888748168945, 6.6103925704956055], + [9.237635612487793, -2.3591420650482178], + [3.2622313499450684, -4.4511871337890625], + [3.6085407733917236, -7.206267356872559], + [-3.1916635036468506, -3.233394145965576], + [3.987377882003784, 1.6617053747177124], + [1.1606745719909668, -0.589061975479126], + [-5.956638813018799, 6.502151012420654], + [3.7551136016845703, -7.412617206573486], + [6.337747573852539, 7.931859493255615], + [-3.5641961097717285, 5.44706916809082], + [-0.9162058234214783, -2.7477080821990967], + [2.9191629886627197, -9.06833267211914], + [-0.8321055769920349, -1.222355842590332], + [0.04692976921796799, 11.998348236083984], + [-2.6821651458740234, -2.891051769256592], + [8.367196083068848, -2.228630542755127], + [3.2559072971343994, -8.21607780456543], + [-3.7193477153778076, -4.403231143951416], + [6.212427616119385, -2.992780923843384], + [-3.8788938522338867, -3.4367189407348633], + [7.75783109664917, -1.9765385389328003], + [0.12950432300567627, 9.586838722229004], + [3.646270275115967, 6.425424098968506], + [2.2570762634277344, 4.7847490310668945], + [1.378068447113037, -0.2000802457332611], + [5.759505271911621, -4.879947662353516], + [9.633858680725098, -2.313053846359253], + [3.153515577316284, -4.078619956970215], + [5.340531826019287, 8.076038360595703], + [2.8720808029174805, -4.001909255981445], + [-4.556295871734619, 3.6421918869018555], + [-2.5997657775878906, 1.3008687496185303], + [-3.964837074279785, 5.122955322265625], + [9.932379722595215, -2.59177565574646], + [6.052023887634277, -4.875913619995117], + [-3.633134603500366, -5.464707374572754], + [3.4865782260894775, -2.672919511795044], + [-3.6149165630340576, -1.3330835103988647], + [-4.975296497344971, 3.8606326580047607], + [-0.2182789444923401, 1.104722023010254], + [-2.680475950241089, 1.2911592721939087], + [1.3914304971694946, -0.84058678150177], + [0.08051600307226181, -3.1676924228668213], + [-0.9339484572410583, 9.528768539428711], + [8.38241958618164, -2.287116765975952], + [3.0753085613250732, 6.646947860717773], + [3.4993927478790283, 1.2054287195205688], + [-4.693856239318848, -7.587630748748779], + [-4.51239013671875, -6.070304870605469], + [-4.9571099281311035, 4.45059061050415], + [7.669963836669922, -2.3099753856658936], + [0.3211650252342224, 0.5138351321220398], + [4.134372234344482, -0.7289963960647583], + [0.23619157075881958, -1.3115652799606323], + [4.138552188873291, -3.4799296855926514], + [-0.943669319152832, 1.3323216438293457], + [-4.436441898345947, 4.928094863891602], + [5.502904415130615, -1.1147981882095337], + [-2.5653669834136963, 2.0954604148864746], + [0.20736199617385864, 11.188122749328613], + [-4.025608539581299, -5.983680725097656], + [0.6116197109222412, -2.395214796066284], + [6.309634685516357, -2.7531983852386475], + [0.49345606565475464, -1.0587238073349], + [1.0006684064865112, 0.20143398642539978], + [5.515321731567383, -0.7762418389320374], + [3.6383066177368164, -8.79516887664795], + [5.820250988006592, 7.275464057922363], + [-3.821035146713257, -6.095022201538086], + [2.789330005645752, -3.8483223915100098], + [1.8735281229019165, -8.216903686523438], + [3.6378793716430664, -2.9837706089019775], + [2.182751417160034, 5.682765960693359], + [3.7413833141326904, -6.379663467407227], + [0.2575252056121826, 10.692888259887695], + [7.450720310211182, -2.0215070247650146], + [0.028500132262706757, 9.63493537902832], + [-4.110886573791504, -1.921284556388855], + [7.401162624359131, -2.514601469039917], + [3.342221975326538, -4.6591596603393555], + [5.532058238983154, 7.606274604797363], + [1.90347158908844, -0.1389167308807373], + [2.4662506580352783, 3.635911464691162], + [-4.400471210479736, 5.7838664054870605], + [9.273009300231934, -2.3787384033203125], + [-0.2926191985607147, -1.050333857536316], + [2.495136022567749, -3.4376943111419678], + [2.1653025150299072, -2.6230967044830322], + [-4.096211910247803, -4.687503814697266], + [3.8592731952667236, 1.491740107536316], + [-2.642653465270996, 1.8210350275039673], + [2.08691143989563, -7.048831462860107], + [-4.092480182647705, -4.3078155517578125], + [3.849950075149536, -6.955117225646973], + [3.8170690536499023, 1.7406017780303955], + [3.3607161045074463, -4.563871383666992], + [0.060328416526317596, 12.26492691040039], + [-1.7283689975738525, 1.7212499380111694], + [-3.2368581295013428, 6.536665916442871], + [5.508937358856201, -1.2631213665008545], + [3.9934709072113037, 0.8069957494735718], + [3.3583786487579346, -4.716878890991211], + [0.23487216234207153, 11.773710250854492], + [-2.6342966556549072, -5.0633039474487305], + [-2.2735555171966553, 2.4558308124542236], + [-2.8522322177886963, -3.4021899700164795], + [-2.6505205631256104, 1.6802412271499634], + [9.330198287963867, -2.2677063941955566], + [4.862548351287842, -0.319845974445343], + [3.443164110183716, -7.147624969482422], + [8.333441734313965, -2.2909367084503174], + [6.895036697387695, 8.284069061279297], + [-4.350772380828857, -2.4157707691192627], + [-0.03331030160188675, 9.931251525878906], + [8.804232597351074, -2.319573163986206], + [4.9467010498046875, -3.7502808570861816], + [2.3263769149780273, 1.1204811334609985], + [-2.3478493690490723, 1.1948686838150024], + [-2.1537015438079834, 2.7243592739105225], + [3.7843220233917236, 1.834884524345398], + [-2.1319379806518555, -3.3253228664398193], + [4.167050361633301, -8.213479995727539], + [-4.147637367248535, 5.425583839416504], + [-4.47918701171875, -1.2285510301589966], + [-1.9927396774291992, 6.454817295074463], + [7.18098783493042, -1.7434877157211304], + [1.0245654582977295, 1.3729254007339478], + [3.027331590652466, -4.218228340148926], + [6.90022611618042, -1.5611937046051025], + [-0.09337247163057327, -1.6529072523117065], + [0.8601168990135193, -0.29770126938819885], + [-0.1349206566810608, -1.6556181907653809], + [-2.451186180114746, 1.39919912815094], + [2.193922996520996, -2.232231616973877], + [3.042147397994995, -4.295645713806152], + [3.588301420211792, -5.84584379196167], + [0.17285752296447754, 11.414600372314453], + [-2.139824390411377, 1.9850653409957886], + [2.6933250427246094, -3.7983105182647705], + [2.6998589038848877, -8.549211502075195], + [7.048515319824219, 8.844428062438965], + [6.369609355926514, -1.0982469320297241], + [1.0940678119659424, -0.4133185148239136], + [-0.33505603671073914, -1.2091145515441895], + [2.9586985111236572, -4.068268775939941], + [8.504814147949219, -2.3296396732330322], + [2.5466082096099854, -6.104522705078125], + [5.784783363342285, 8.192681312561035], + [-0.15107452869415283, -1.3785358667373657], + [7.843153476715088, -2.308317184448242], + [3.0266525745391846, 5.994398593902588], + [-6.690131664276123, 6.1872124671936035], + [2.264613151550293, -9.23697280883789], + [3.324941396713257, 5.206719398498535], + [9.275383949279785, -2.365835189819336], + [2.465322971343994, 5.0682549476623535], + [-2.5757393836975098, -5.273237228393555], + [9.31091022491455, -2.4647586345672607], + [5.7488603591918945, -7.558592319488525], + [-4.380082130432129, -6.504312992095947], + [-4.91449499130249, -7.98997688293457], + [0.4748205542564392, 11.555341720581055], + [-3.0953433513641357, -2.63724946975708], + [-3.050203800201416, 0.5408343076705933], + [0.15278053283691406, 9.923699378967285], + [0.08668314665555954, 12.010351181030273], + [2.991767406463623, -6.303082466125488], + [-3.6390864849090576, -1.8943322896957397], + [-3.9987759590148926, 5.7488250732421875], + [1.4347999095916748, -7.894162178039551], + [-4.657324314117432, -6.79494571685791], + [0.9365101456642151, -6.73080587387085], + [1.4465272426605225, 1.965006709098816], + [3.758214235305786, 1.3285847902297974], + [2.9067559242248535, -4.0904316902160645], + [-2.104721784591675, 2.5853023529052734], + [-2.0569217205047607, 2.5511858463287354], + [-6.208207607269287, -1.5218154191970825], + [-4.914923667907715, -0.8293231129646301], + [2.4915390014648438, 0.6993804574012756], + [-4.475067615509033, -0.5603053569793701], + [8.752129554748535, -2.340210199356079], + [-1.9062118530273438, 5.863686561584473], + [-1.6202651262283325, -1.8336658477783203], + [-2.355588674545288, 0.821449339389801], + [-3.816314935684204, 5.587741851806641], + [2.938995599746704, -4.13324499130249], + [0.19128304719924927, 10.278280258178711], + [2.8992509841918945, 5.698701858520508], + [2.135627031326294, 2.8565571308135986], + [0.6831654906272888, -6.744572639465332], + [5.348785877227783, -1.0904453992843628], + [-2.2197775840759277, 2.782914161682129], + [1.0741103887557983, -0.5926331281661987], + [-4.603755474090576, -6.993024826049805], + [1.5744911432266235, -0.13175871968269348], + [2.636683464050293, -7.050716400146484], + [-0.2717781066894531, 5.28702974319458], + [-6.660214900970459, 0.865811824798584], + [1.7072018384933472, -0.24631619453430176], + [1.1945760250091553, 1.2984944581985474], + [-2.07443904876709, 1.8894760608673096], + [-6.017354488372803, -0.3875444531440735], + [8.290183067321777, -2.15683650970459], + [3.000009775161743, -8.11528205871582], + [-3.803612232208252, 4.799098014831543], + [3.2526464462280273, -8.022539138793945], + [7.413651943206787, -1.9319840669631958], + [1.4142082929611206, -6.74216365814209], + [-3.684203863143921, -6.030468940734863], + [-4.613131999969482, -6.449051380157471], + [0.39604300260543823, 10.056480407714844], + [-6.627251625061035, -1.1003085374832153], + [-0.07838083058595657, 10.531696319580078], + [-4.015570640563965, 4.740626811981201], + [7.218499660491943, -2.5176966190338135], + [3.108640193939209, -4.196181297302246], + [-5.170873165130615, 4.904597282409668], + [0.137281596660614, 11.738529205322266], + [-6.068038463592529, 6.382108688354492], + [-2.1490182876586914, 2.5818541049957275], + [8.243038177490234, -2.2396328449249268], + [-2.519434690475464, 0.7188592553138733], + [-2.147585391998291, 2.649289608001709], + [-2.0838773250579834, 2.542179822921753], + [6.506785869598389, 7.9054036140441895], + [-2.1408731937408447, 2.528430700302124], + [-2.226649761199951, -4.437210559844971], + [3.0172300338745117, -7.291805267333984], + [-3.222111940383911, -4.314436912536621], + [-3.4114277362823486, -5.673643112182617], + [0.5203149914741516, -1.0005712509155273], + [1.8377418518066406, -0.2044813483953476], + [2.884223222732544, -4.089385509490967], + [2.9014174938201904, -4.068758964538574], + [0.4273994565010071, 12.00240707397461], + [4.585489749908447, -1.7157748937606812], + [7.604297161102295, -2.384453058242798], + [1.5606577396392822, 6.259414196014404], + [5.998741626739502, 7.527161598205566], + [5.1187262535095215, -1.6640629768371582], + [0.4558256268501282, -0.980778694152832], + [1.5152583122253418, 1.0397530794143677], + [3.4313066005706787, -7.40110969543457], + [-5.133394718170166, -1.4779678583145142], + [0.5435548424720764, -0.9475420713424683], + [1.9709997177124023, 4.563053131103516], + [-2.360034704208374, 1.7103434801101685], + [0.2110365629196167, 10.806671142578125], + [3.236241579055786, -0.015471044927835464], + [-4.792013645172119, -6.646678924560547], + [-6.748520374298096, 8.064117431640625], + [6.095646858215332, -2.441121816635132], + [5.053466796875, 7.345170021057129], + [1.3814842700958252, -6.915683746337891], + [6.550652503967285, -1.490214228630066], + [4.811173915863037, 6.672336101531982], + [2.206430196762085, 0.9174894094467163], + [0.05954437702894211, 11.614982604980469], + [2.7571442127227783, 6.516698837280273], + [9.689345359802246, -2.410470724105835], + [4.015810489654541, 1.3930344581604004], + [-5.760311126708984, 6.456205368041992], + [3.0382726192474365, -9.437636375427246], + [11.093672752380371, -2.5717523097991943], + [-1.2579002380371094, 3.7260308265686035], + [2.5629465579986572, -8.231775283813477], + [3.029606580734253, -10.55032730102539], + [4.054531097412109, 1.707015872001648], + [-0.051912494003772736, 9.641870498657227], + [1.7018895149230957, 1.7947477102279663], + [0.05444245785474777, 11.957033157348633], + [4.1471452713012695, -3.3043549060821533], + [-2.4328653812408447, 2.462002992630005], + [-0.047205932438373566, 9.514854431152344], + [-3.280080556869507, -3.454655170440674], + [-3.091892957687378, -3.795300006866455], + [-2.545421838760376, 1.4376040697097778], + [0.896030604839325, -0.7452802658081055], + [2.6260764598846436, 1.4457721710205078], + [2.3758485317230225, 5.587096691131592], + [0.5945795774459839, -6.198502540588379], + [-0.7706315517425537, -0.5782307386398315], + [-4.316610336303711, -2.4910478591918945], + [2.3062124252319336, -2.5970852375030518], + [-4.209654808044434, 4.523041248321533], + [-0.014236994087696075, 13.501882553100586], + [-0.9924335479736328, -3.792529821395874], + [2.7718403339385986, 1.6677794456481934], + [3.977994203567505, -3.3787410259246826], + [-0.3294626772403717, -0.9769350290298462], + [1.8610285520553589, -7.270963668823242], + [0.1902126669883728, 10.630559921264648], + [3.1341729164123535, -4.423272132873535], + [10.190142631530762, -2.411949396133423], + [-2.2855072021484375, -1.9615875482559204], + [-2.640130043029785, 1.9856141805648804], + [-4.622361660003662, -3.3681678771972656], + [-1.2967312335968018, 1.3146755695343018], + [5.624337673187256, 7.264216423034668], + [-2.040358543395996, -4.388563632965088], + [8.459837913513184, -2.4536750316619873], + [2.574035406112671, -4.074366569519043], + [5.137360095977783, -3.20124888420105], + [6.724048137664795, -3.68605637550354], + [7.241775035858154, -2.7529518604278564], + [-3.74653959274292, -5.332317352294922], + [-6.463627338409424, -2.15594220161438], + [5.405263423919678, 6.687490463256836], + [0.04760969430208206, -1.521825909614563], + [-2.168052911758423, -3.3397538661956787], + [1.290282130241394, 5.526674747467041], + [2.4374139308929443, 4.8978376388549805], + [-3.383007764816284, -4.475858688354492], + [-3.0151660442352295, -4.776688098907471], + [-6.114211082458496, 5.810153007507324], + [-1.4189106225967407, 0.2649828791618347], + [6.400648593902588, -3.2405714988708496], + [0.3001917004585266, 9.462570190429688], + [3.6433892250061035, -3.435457468032837], + [3.785473585128784, -2.3154969215393066], + [-4.967269420623779, -1.5683561563491821], + [0.1751144528388977, 10.321284294128418], + [-5.788058757781982, 4.823224067687988], + [0.9638686776161194, -6.748687744140625], + [3.0568201541900635, -4.346765518188477], + [-3.568126678466797, -4.533797264099121], + [-5.12066650390625, -2.1755707263946533], + [6.676639080047607, 8.096858978271484], + [0.32950854301452637, 1.2253241539001465], + [-2.258877754211426, 0.8111591935157776], + [-7.78283166885376, 0.11022615432739258], + [-2.367983102798462, 1.2128671407699585], + [-5.237067699432373, 6.379764556884766], + [-0.011856026947498322, 13.291682243347168], + [3.330127716064453, -8.377833366394043], + [1.7642951011657715, 4.334822654724121], + [3.318270683288574, -8.290949821472168], + [5.785158157348633, 7.532614231109619], + [-5.312233924865723, -3.576462507247925], + [-2.159271478652954, -2.648757219314575], + [0.05264353007078171, 12.968059539794922], + [3.534691095352173, -7.172468185424805], + [-4.106457233428955, -1.377547264099121], + [2.781859874725342, 0.550078272819519], + [2.295740842819214, -3.3191375732421875], + [3.2379701137542725, -5.198247909545898], + [5.456505298614502, -1.2244774103164673], + [1.8654099702835083, 1.3694647550582886], + [-4.1474432945251465, -6.517657279968262], + [-5.951664447784424, 6.303728103637695], + [5.73115348815918, -2.6743316650390625], + [-5.01092004776001, -6.466658115386963], + [0.06260799616575241, 12.945718765258789], + [-5.101789474487305, 7.690167427062988], + [0.37061965465545654, -0.3512144982814789], + [-0.04610271006822586, 9.413936614990234], + [-1.2898579835891724, -2.2222912311553955], + [5.449182987213135, 7.1459431648254395], + [2.9795422554016113, 3.98713755607605], + [2.7318358421325684, -8.367151260375977], + [0.075022391974926, 9.264327049255371], + [-6.20880651473999, 7.123919486999512], + [0.06932563334703445, -1.4560236930847168], + [-6.480112552642822, 6.952129364013672], + [4.097601413726807, 1.808786392211914], + [3.4766035079956055, 1.6782885789871216], + [2.232545852661133, -0.3086080551147461], + [-6.064050197601318, 0.2540547847747803], + [8.602973937988281, -2.524437665939331], + [-2.7334492206573486, 1.4421522617340088], + [3.160737991333008, -7.408124923706055], + [-4.9026713371276855, -6.957415580749512], + [6.185434818267822, -1.7371915578842163], + [4.555668354034424, -2.722938060760498], + [2.2543323040008545, 2.4282119274139404], + [-4.444807529449463, 7.258880615234375], + [-2.397707462310791, 2.0976638793945312], + [-7.2604594230651855, 8.596479415893555], + [0.22010570764541626, -5.4526753425598145], + [-2.196390390396118, 1.2651845216751099], + [1.5236139297485352, -7.448065280914307], + [9.961953163146973, -2.422974109649658], + [-1.0378706455230713, 0.8686865568161011], + [5.308776378631592, -1.1581021547317505], + [5.433072566986084, 6.981497287750244], + [-5.244022369384766, 5.777245044708252], + [6.345804214477539, -1.6181002855300903], + [-1.6198666095733643, 2.2327144145965576], + [8.34146499633789, -2.4415647983551025], + [-2.1107096672058105, 2.5918595790863037], + [4.683213233947754, 7.3911333084106445], + [6.054479122161865, -2.3457157611846924], + [3.447686195373535, -3.6599650382995605], + [-1.9729390144348145, 1.0484224557876587], + [-2.4570810794830322, 2.1500394344329834], + [-2.8402297496795654, 1.8234137296676636], + [-4.333916187286377, -6.504551410675049], + [0.00181608647108078, 9.455916404724121], + [-2.807199716567993, -2.021358013153076], + [2.7144858837127686, -4.41612434387207], + [-2.6868722438812256, 0.47786808013916016], + [-5.813636302947998, -0.8355062007904053], + [4.771048069000244, -4.097985744476318], + [4.021363735198975, -7.916722297668457], + [-1.8780230283737183, 4.576498031616211], + [-6.665048122406006, 0.6250573396682739], + [3.0696115493774414, -3.342820644378662], + [-4.33869743347168, -2.7425355911254883], + [3.5609164237976074, -3.4927475452423096], + [-3.267157554626465, -3.9489386081695557], + [-3.1754698753356934, 5.710616111755371], + [3.0879390239715576, -8.242240905761719], + [-0.46918606758117676, 6.782170295715332], + [0.7490388751029968, 0.5564051866531372], + [1.425673484802246, -7.893088340759277], + [-4.60864782333374, 5.604259490966797], + [-0.8057880997657776, -1.6846364736557007], + [11.260480880737305, -2.532895803451538], + [0.9448713660240173, 0.33609098196029663], + [4.260788440704346, 6.512479782104492], + [4.942313194274902, -3.7109715938568115], + [-2.7713520526885986, 0.8310459852218628], + [0.1980692744255066, 10.417564392089844], + [-1.8046174049377441, -5.1882405281066895], + [-2.1669700145721436, 2.5323634147644043], + [5.6087565422058105, -4.515694618225098], + [-5.664937496185303, 6.702089309692383], + [4.398902893066406, 1.7215877771377563], + [5.778249740600586, -2.729973077774048], + [-3.0783395767211914, -5.479628086090088], + [6.986086368560791, 8.391990661621094], + [3.8361566066741943, -3.5064191818237305], + [0.7670677304267883, 0.30016931891441345], + [-2.1822636127471924, -0.0305560864508152], + [-5.638911724090576, -0.3383476138114929], + [0.1394025683403015, 10.35991096496582], + [7.2952961921691895, -1.826828122138977], + [-5.12354040145874, -5.887636184692383], + [8.057215690612793, -2.338388204574585], + [-3.898096799850464, 4.14479398727417], + [0.20101869106292725, 10.914066314697266], + [-2.3404252529144287, 2.0465641021728516], + [-4.487179279327393, -3.814908981323242], + [-5.420468330383301, -0.5860641598701477], + [-2.197741746902466, 2.1525630950927734], + [3.6100800037384033, -8.241573333740234], + [0.0341293141245842, 11.936946868896484], + [0.2016037106513977, 11.621448516845703], + [-4.116924285888672, -5.573864936828613], + [9.050908088684082, -2.285318374633789], + [-7.089414119720459, 2.8354711532592773], + [6.994673728942871, 8.430802345275879], + [9.212735176086426, -2.374138116836548], + [-0.04316426068544388, 11.642779350280762], + [-3.9781384468078613, 5.012578010559082], + [-3.9658849239349365, -6.813784122467041], + [1.3518576622009277, -4.02064847946167], + [7.330391883850098, -2.6073989868164062], + [-3.1099812984466553, -1.7889857292175293], + [2.8975377082824707, -4.229142189025879], + [0.07306139916181564, 12.322431564331055], + [-4.47321081161499, -0.6917502284049988], + [-4.942246437072754, -1.589218258857727], + [-2.3816335201263428, -4.916604995727539], + [-0.9143540859222412, -2.7260520458221436], + [0.3732706308364868, 10.407235145568848], + [7.432767391204834, -2.1075522899627686], + [6.523703098297119, 7.959017753601074], + [4.332909107208252, 5.894512176513672], + [0.7663395404815674, 6.346163272857666], + [-6.711850643157959, -1.7606141567230225], + [9.23536205291748, -2.4084205627441406], + [-1.9236637353897095, 2.238558292388916], + [-6.2016520500183105, 0.09030115604400635], + [0.1567019820213318, 10.355921745300293], + [6.555734634399414, -5.36464262008667], + [2.2213633060455322, 5.42173957824707], + [3.465348958969116, 1.9411336183547974], + [-4.881829738616943, 6.074329853057861], + [3.984239339828491, 1.6825369596481323], + [-1.3471728563308716, -3.4883110523223877], + [1.6645309925079346, 5.378180503845215], + [-4.545094966888428, -7.29265832901001], + [8.221700668334961, -2.4618051052093506], + [-2.4576797485351562, -3.168971061706543], + [-2.270963430404663, 2.6618430614471436], + [4.205275058746338, 5.581069469451904], + [-4.612476348876953, -0.7664707899093628], + [0.04873519390821457, 12.51688289642334], + [-3.6543567180633545, -5.918700695037842], + [-3.1113336086273193, -2.1301815509796143], + [-6.353955268859863, 6.952740669250488], + [0.16510134935379028, 10.163750648498535], + [2.50032377243042, -1.7856284379959106], + [-3.2498667240142822, -2.936584234237671], + [7.747734546661377, -1.8475643396377563], + [5.77501916885376, 7.399557113647461], + [-3.817128896713257, 3.581319570541382], + [4.862199306488037, -3.03912615776062], + [-0.18322908878326416, -1.6287983655929565], + [-4.276597499847412, -6.393185615539551], + [-0.6808860898017883, -1.4385349750518799], + [0.311257541179657, -1.452684760093689], + [-5.3137383460998535, 6.475817680358887], + [2.890178918838501, -3.928391456604004], + [-2.3995168209075928, 2.3245019912719727], + [8.593676567077637, -2.3699121475219727], + [3.7934353351593018, -8.511823654174805], + [0.02673845738172531, 12.807469367980957], + [5.733468532562256, -1.1824877262115479], + [-3.6017754077911377, -5.182877540588379], + [-3.0654678344726562, -3.704169750213623], + [-2.684000253677368, 1.7884104251861572], + [-0.9474162459373474, -2.727428674697876], + [0.041016630828380585, 9.4692964553833], + [2.5310566425323486, -3.794872999191284], + [8.67490291595459, -2.472440481185913], + [4.742957592010498, 7.039398193359375], + [7.457755088806152, 8.868024826049805], + [-2.441836357116699, 6.238465785980225], + [-4.191166400909424, -1.4565255641937256], + [0.13688799738883972, 0.7670673131942749], + [9.620617866516113, -2.329193353652954], + [4.219147682189941, 1.5058122873306274], + [7.15510368347168, -1.4576690196990967], + [8.077333450317383, -2.4832117557525635], + [2.550508737564087, -7.301595687866211], + [-2.8028838634490967, -4.669807434082031], + [-1.5953259468078613, -3.3810770511627197], + [-0.7667965292930603, 1.0747371912002563], + [-2.7746427059173584, -5.058928966522217], + [-5.608859539031982, -1.8160969018936157], + [-0.22395482659339905, -1.5957707166671753], + [-4.10354471206665, -4.601302146911621], + [-2.6375858783721924, -4.41556453704834], + [0.15137439966201782, 11.279180526733398], + [0.5316696763038635, 10.551752090454102], + [0.07977206259965897, -1.5259606838226318], + [3.8693289756774902, -6.064000129699707], + [-5.169083118438721, -6.161928176879883], + [-2.5358145236968994, 1.4566553831100464], + [-0.6805787682533264, -1.7694288492202759], + [-2.5089402198791504, 0.9239686131477356], + [-2.560903787612915, 1.7446377277374268], + [3.6055774688720703, 1.1016075611114502], + [-0.06121606379747391, 5.047385215759277], + [-4.459708213806152, -7.622016906738281], + [-6.065558910369873, 0.4027949571609497], + [2.3628885746002197, 1.4459030628204346], + [-6.334705352783203, 5.654896259307861], + [9.653804779052734, -2.4448704719543457], + [-2.0949044227600098, 2.483205795288086], + [7.337636947631836, -4.159081935882568], + [3.0834031105041504, -4.210526466369629], + [4.7191162109375, 5.9724626541137695], + [5.502877235412598, -4.6074090003967285], + [2.197946786880493, -6.676968574523926], + [-3.7869389057159424, 3.2219769954681396], + [3.5470075607299805, -5.514513969421387], + [3.4917948246002197, 1.2835313081741333], + [0.00519280880689621, 11.991510391235352], + [3.2862846851348877, 0.8947693109512329], + [1.5755338668823242, -7.592411994934082], + [-4.331063747406006, 4.550848007202148], + [-4.653555393218994, -1.1107145547866821], + [0.17911088466644287, 9.65479564666748], + [-6.833637714385986, -0.9226456880569458], + [-5.62856388092041, 2.6636526584625244], + [-2.346428394317627, -1.3146774768829346], + [0.8185214996337891, -5.895600318908691], + [2.335958480834961, -7.70087194442749], + [2.4795374870300293, 3.979072332382202], + [8.6414794921875, -2.6048877239227295], + [-1.6264703273773193, -3.7994959354400635], + [-6.283033847808838, 7.2112932205200195], + [-6.665626049041748, 7.979001998901367], + [0.28886276483535767, -1.796127200126648], + [2.0572805404663086, 2.0069711208343506], + [-2.921637773513794, -5.475063323974609], + [-2.3646240234375, 2.3345420360565186], + [2.288654088973999, 1.14061439037323], + [-0.5350585579872131, 0.8301035761833191], + [2.9231374263763428, -8.639238357543945], + [7.243819713592529, 8.691354751586914], + [-1.6006920337677002, 6.438053131103516], + [-4.873733997344971, 5.21723747253418], + [6.637630939483643, -1.0526515245437622], + [1.1085479259490967, -7.381958961486816], + [0.010384730994701385, 12.528220176696777], + [-6.034943580627441, 6.99722957611084], + [3.500157117843628, -7.399871826171875], + [0.3075781464576721, 0.9080524444580078], + [0.12554696202278137, 0.612655520439148], + [0.9787703156471252, -0.3882780969142914], + [4.920841217041016, -2.2583072185516357], + [2.3215787410736084, 4.1911420822143555], + [-3.029188394546509, 1.0339021682739258], + [-2.198620557785034, 2.8311638832092285], + [-3.259544610977173, -5.217417240142822], + [5.316604137420654, 7.604334354400635], + [0.8128954768180847, -0.712149441242218], + [0.2466908097267151, 10.65786361694336], + [1.8962918519973755, -5.666601657867432], + [-4.825747489929199, -7.203735828399658], + [0.19174283742904663, -2.037156581878662], + [9.358866691589355, -2.34263014793396], + [-4.7356672286987305, 3.6900460720062256], + [1.2424640655517578, -4.138856887817383], + [2.615767240524292, -8.99399185180664], + [-4.901589870452881, -8.232422828674316], + [-2.313230037689209, 2.0924370288848877], + [-4.163475513458252, 5.965001106262207], + [-2.228395938873291, 2.231384515762329], + [-4.10129976272583, -5.922285079956055], + [-4.810237407684326, -7.634882926940918], + [-0.012407548725605011, 12.252156257629395], + [3.4213502407073975, -4.781876087188721], + [9.692806243896484, -2.3870913982391357], + [-5.828518390655518, -2.963700532913208], + [-4.001041412353516, -2.792654037475586], + [-0.037661053240299225, 0.027912508696317673], + [2.849491596221924, -3.983051061630249], + [0.4231625199317932, 10.929473876953125], + [-4.062005043029785, -1.266008734703064], + [-4.284083366394043, -4.226885795593262], + [2.8589937686920166, -2.634442090988159], + [-6.771326541900635, -0.25609874725341797], + [2.9769256114959717, -4.432379722595215], + [2.6552507877349854, -2.540419340133667], + [-3.4008948802948, -4.542187690734863], + [9.3136568069458, -2.473923921585083], + [-2.644221544265747, -4.405251502990723], + [-6.23686408996582, 8.423916816711426], + [-4.548953056335449, -1.8032182455062866], + [-2.412824869155884, -4.185484886169434], + [1.6172659397125244, -8.378047943115234], + [2.923064708709717, -4.161345481872559], + [-6.430172443389893, -1.605854868888855], + [7.176046371459961, -5.710247993469238], + [5.399142742156982, 7.493299961090088], + [-1.6881732940673828, -4.258252143859863], + [-5.0398688316345215, 4.077343940734863], + [-4.460062503814697, -7.515439033508301], + [0.5005277991294861, 10.312660217285156], + [-0.08743400126695633, 10.274311065673828], + [0.01949816197156906, 11.875938415527344], + [-1.4896156787872314, 1.2733362913131714], + [0.035124801099300385, 1.7962864637374878], + [6.4252190589904785, 7.998953819274902], + [-0.17958492040634155, -1.7000139951705933], + [6.18657112121582, 7.912383079528809], + [-3.860694169998169, -1.236053705215454], + [2.0825233459472656, 0.3084445297718048], + [-4.516831874847412, -7.2752580642700195], + [2.232353448867798, 2.7764408588409424], + [-2.061901569366455, 2.470787525177002], + [1.662963628768921, -1.1053112745285034], + [7.960200786590576, -1.9779508113861084], + [-0.00415617972612381, 9.842191696166992], + [2.4533047676086426, -7.755545139312744], + [2.6492035388946533, -3.8391940593719482], + [4.805452823638916, -5.4585347175598145], + [4.360634803771973, -3.303431272506714], + [-2.301116943359375, 1.02800714969635], + [2.114004611968994, 4.9515838623046875], + [0.02973669022321701, 12.733765602111816], + [-4.234714984893799, -6.296874046325684], + [-0.3484276533126831, 1.300048828125], + [2.89414381980896, 1.6138454675674438], + [3.259244680404663, -4.546561241149902], + [2.5537872314453125, 5.591400623321533], + [-4.161763668060303, -1.809476375579834], + [-2.349785566329956, 2.0638396739959717], + [6.882432460784912, -1.9321653842926025], + [3.0171773433685303, -4.292117595672607], + [0.49618905782699585, -1.1646891832351685], + [2.346050262451172, 5.823482990264893], + [-2.2289934158325195, 2.900726795196533], + [8.590581893920898, -2.289327383041382], + [-4.673715591430664, 5.780999183654785], + [-5.025883674621582, -2.5544097423553467], + [1.4019577503204346, 3.3598196506500244], + [-4.538332462310791, -2.042593002319336], + [-4.550377368927002, 3.5021800994873047], + [10.714658737182617, -2.523272752761841], + [-1.744589924812317, 1.8625528812408447], + [3.6058268547058105, -7.513240337371826], + [8.444772720336914, -2.3107292652130127], + [-2.398592710494995, 2.2426183223724365], + [5.767937660217285, 7.175395965576172], + [9.850386619567871, -2.3524930477142334], + [2.627767324447632, 6.045890808105469], + [2.1098573207855225, 5.099956512451172], + [5.399649143218994, -3.624640464782715], + [0.5822604298591614, -4.99894380569458], + [-0.34467995166778564, 0.6431622505187988], + [2.7491700649261475, -7.233119487762451], + [2.117638111114502, 3.3804495334625244], + [9.141093254089355, -2.465690851211548], + [-0.11024577170610428, 0.3261016011238098], + [2.4149696826934814, -0.9488052129745483], + [-4.172608852386475, 6.73944616317749], + [2.6158626079559326, -2.4613492488861084], + [6.631937503814697, 8.625322341918945], + [3.130587100982666, -3.2883667945861816], + [0.27861475944519043, 10.536893844604492], + [3.517094612121582, -5.497803211212158], + [4.010623455047607, 1.8147735595703125], + [-4.3778977394104, -6.831745624542236], + [-4.018308162689209, 5.817826271057129], + [-2.175908088684082, 0.6012591123580933], + [1.0291087627410889, 5.214766502380371], + [3.1786649227142334, 1.4764224290847778], + [-1.6868529319763184, 2.5014452934265137], + [1.9726505279541016, 1.8099292516708374], + [-3.768073320388794, -5.639932155609131], + [6.264395236968994, -2.8377273082733154], + [2.7049241065979004, 5.970343589782715], + [3.748220443725586, -8.385112762451172], + [1.5357693433761597, -7.821646690368652], + [5.575082302093506, 7.544948101043701], + [3.954724073410034, -7.181304931640625], + [9.535634994506836, -2.4094297885894775], + [2.0549874305725098, 2.232152223587036], + [-6.190527439117432, 6.7412261962890625], + [4.660733699798584, 7.271518230438232], + [-0.7060372233390808, 1.01896333694458], + [2.2902960777282715, 1.8015578985214233], + [7.9424967765808105, -2.1907927989959717], + [2.44001841545105, -8.362333297729492], + [3.7692172527313232, -8.143132209777832], + [3.6417245864868164, -5.11974573135376], + [7.563168048858643, -5.312643051147461], + [-4.346250057220459, 5.13338041305542], + [-2.545612335205078, 4.035605430603027], + [-2.9160027503967285, 1.8422517776489258], + [8.670146942138672, -2.1504247188568115], + [4.128992557525635, 1.8863593339920044], + [0.15153402090072632, 10.082637786865234], + [-4.119360446929932, -5.871644973754883], + [0.057630471885204315, 9.522605895996094], + [0.1567525863647461, 8.565045356750488], + [-4.665737152099609, -7.055430889129639], + [-1.2509121894836426, 0.9838285446166992], + [5.5479044914245605, -7.567540168762207], + [-0.8724583983421326, -0.456332802772522], + [4.2397236824035645, 1.8495995998382568], + [3.7269442081451416, 1.1399303674697876], + [3.2350635528564453, -4.033363342285156], + [-2.265669107437134, 0.18793433904647827], + [-0.03621835261583328, 9.82182502746582], + [3.9054806232452393, 2.059316873550415], + [-4.189124584197998, 5.054046154022217], + [-2.111940622329712, 2.4582056999206543], + [-3.1716408729553223, -4.176133155822754], + [5.360620975494385, 6.743404865264893], + [1.2818348407745361, -0.5830736756324768], + [-3.1418378353118896, -5.2610578536987305], + [-4.3398518562316895, -3.2399191856384277], + [-2.04971981048584, 2.499128818511963], + [2.1016664505004883, -7.794095039367676], + [-4.892846584320068, -7.466152667999268], + [2.5694143772125244, 0.9023803472518921], + [2.896399736404419, -7.313347339630127], + [2.077866792678833, -7.5898356437683105], + [1.137357473373413, -7.465786933898926], + [0.2443118691444397, 11.318918228149414], + [4.652581214904785, 6.518825531005859], + [-5.9538254737854, 6.023574352264404], + [-4.57620096206665, -6.584432125091553], + [3.307184934616089, -9.194978713989258], + [-2.3898355960845947, 2.5515735149383545], + [6.002096176147461, 8.26466178894043], + [-5.228901386260986, -0.895901620388031], + [-0.0441080704331398, -0.5355503559112549], + [6.768249988555908, 8.159686088562012], + [-2.4082484245300293, 1.6712340116500854], + [6.274652004241943, -5.350796222686768], + [4.047887325286865, -3.4580729007720947], + [-4.893284320831299, 5.0713419914245605], + [3.8267691135406494, 6.019606113433838], + [7.27524471282959, -6.499704837799072], + [5.006065368652344, -3.1390087604522705], + [5.166724681854248, -1.0857150554656982], + [1.9063031673431396, 0.1338212937116623], + [-5.0185627937316895, -5.2637038230896], + [0.2659831643104553, 12.009644508361816], + [2.2063710689544678, 5.49247932434082], + [7.934056758880615, -2.3765299320220947], + [2.1534440517425537, -0.0083954818546772], + [-5.791844367980957, 6.453736782073975], + [8.869620323181152, -2.209712028503418], + [2.9208827018737793, 0.28927725553512573], + [2.6558523178100586, -9.828625679016113], + [-4.4804182052612305, -6.2828521728515625], + [0.17923301458358765, 11.40181827545166], + [3.214568853378296, -9.015188217163086], + [3.1815226078033447, -3.1309115886688232], + [0.5218653082847595, -2.98755145072937], + [-2.825544595718384, -4.00027322769165], + [5.945089817047119, -2.765512704849243], + [-2.07338547706604, 2.431537628173828], + [2.5061533451080322, -8.597118377685547], + [2.323702812194824, 5.270051956176758], + [10.70847225189209, -2.535419225692749], + [2.150907516479492, 1.9448548555374146], + [-2.384617328643799, 2.146937131881714], + [0.16352003812789917, 9.920843124389648], + [7.496101379394531, -2.3150811195373535], + [1.8095555305480957, -0.13277629017829895], + [4.9234619140625, -3.6250545978546143], + [2.2680537700653076, -8.129749298095703], + [3.1659209728240967, -5.539346218109131], + [-0.6160736083984375, 0.6126381158828735], + [-2.08560848236084, 2.2350001335144043], + [-0.6181344389915466, -2.4925200939178467], + [-2.20497465133667, 2.855142593383789], + [-0.5776464939117432, -2.0955452919006348], + [-2.188847303390503, -4.953603267669678], + [-2.297375202178955, 2.8012664318084717], + [8.394612312316895, -2.216649293899536], + [-3.255586862564087, -3.5706613063812256], + [-0.9357929825782776, -2.8304834365844727], + [-0.5089361667633057, -2.0156188011169434], + [-2.595773935317993, 1.93546724319458], + [-7.210843086242676, -0.6103321313858032], + [5.35100793838501, 6.96816349029541], + [-4.791409015655518, 4.8639092445373535], + [-4.137186527252197, -5.756932258605957], + [-4.949358940124512, -1.619307518005371], + [-3.8394787311553955, -1.365352988243103], + [3.1361844539642334, -4.478640556335449], + [1.445343255996704, 4.185783386230469], + [0.6656963229179382, -0.4765297770500183], + [2.8994152545928955, -8.388886451721191], + [-1.4782322645187378, -0.19344961643218994], + [-2.142653703689575, 2.598541498184204], + [1.9332010746002197, 4.713837623596191], + [-1.5081713199615479, -3.7153878211975098], + [8.78567123413086, -2.406578779220581], + [-2.095980167388916, 2.1503520011901855], + [6.216297626495361, -1.614691138267517], + [-4.979133129119873, -3.7004072666168213], + [0.9912518858909607, -0.36341822147369385], + [-6.4627509117126465, 7.763593673706055], + [3.07328200340271, -3.0151255130767822], + [-4.145864009857178, -6.004280090332031], + [-1.4671690464019775, 0.5890634059906006], + [1.8309988975524902, -1.031769037246704], + [-7.2006683349609375, 8.69478702545166], + [3.09253191947937, -2.7007710933685303], + [2.599353551864624, -3.227729558944702], + [0.09335427731275558, 12.381494522094727], + [3.369948148727417, -7.395989894866943], + [1.7512952089309692, -6.9182305335998535], + [-3.783113956451416, -1.4065550565719604], + [1.0619547367095947, -6.82891321182251], + [2.7279627323150635, 0.3961668014526367], + [3.4301934242248535, -4.022659778594971], + [-1.7787357568740845, 1.9905775785446167], + [-3.675553321838379, -5.73183536529541], + [-2.891796827316284, 0.2642691731452942], + [0.1569732427597046, 11.437063217163086], + [5.874141216278076, -0.9426309466362], + [-4.986605167388916, 5.689370155334473], + [9.75727367401123, -2.3971540927886963], + [7.920211315155029, -2.3632614612579346], + [2.8465774059295654, 4.1647162437438965], + [8.590856552124023, -2.4150331020355225], + [5.70242166519165, 7.348183631896973], + [1.1553370952606201, 3.384211301803589], + [7.045356273651123, -6.31801176071167], + [3.142293691635132, 0.5690656304359436], + [-5.214321136474609, 6.265035629272461], + [-4.790536403656006, 4.791438102722168], + [3.955456018447876, 1.599753975868225], + [4.399327278137207, 1.8654390573501587], + [2.742131233215332, -9.104974746704102], + [-3.698530435562134, -5.841822624206543], + [6.489140033721924, 7.985050201416016], + [0.17447811365127563, 12.44956111907959], + [3.2926998138427734, -0.211909681558609], + [9.211895942687988, -2.562030076980591], + [-5.330021381378174, -0.09273040294647217], + [-3.923116445541382, -0.554969310760498], + [5.3952555656433105, 7.825295925140381], + [9.042119979858398, -2.7003233432769775], + [-5.168250560760498, 6.072340965270996], + [4.142509937286377, 1.7256413698196411], + [3.6493356227874756, -7.073048114776611], + [-0.00036973506212234497, 13.79903507232666], + [2.9484169483184814, -4.189103603363037], + [0.052964918315410614, 9.589006423950195], + [2.9564902782440186, 4.447700500488281], + [-1.557959794998169, -4.417723178863525], + [-3.1607134342193604, 4.645346641540527], + [-2.803338050842285, 0.49288761615753174], + [-0.026739545166492462, 12.15092658996582], + [4.263177871704102, -8.520442962646484], + [2.1660830974578857, 0.47687387466430664], + [4.520471096038818, 7.114469051361084], + [2.4622538089752197, 0.25121739506721497], + [-1.2638812065124512, 1.7128156423568726], + [1.9432144165039062, 1.374362826347351], + [2.789203643798828, -8.150993347167969], + [3.133107900619507, -4.458216667175293], + [-2.476454257965088, 0.5776309967041016], + [0.1047702357172966, 11.749626159667969], + [1.4947148561477661, -7.531045913696289], + [3.856839895248413, -5.068281650543213], + [-6.841275215148926, 0.5332203507423401], + [8.070096969604492, -2.1575264930725098], + [3.128328800201416, -4.416192054748535], + [-1.0094587802886963, -3.3017499446868896], + [6.0250325202941895, -2.9177119731903076], + [9.504318237304688, -2.3839375972747803], + [0.005489878356456757, 12.12989330291748], + [3.6482677459716797, 1.3069337606430054], + [-1.3968377113342285, -0.19493365287780762], + [9.282438278198242, -2.3308897018432617], + [-1.7786178588867188, 2.287107229232788], + [-4.83243989944458, 3.669628381729126], + [6.450223445892334, 8.455689430236816], + [-1.4258239269256592, -1.6456929445266724], + [-2.8221704959869385, 5.118762969970703], + [3.096869707107544, -0.6587149500846863], + [10.259832382202148, -2.4554355144500732], + [0.20133954286575317, 10.403934478759766], + [7.335954189300537, -2.165374517440796], + [-2.6175575256347656, -4.239818572998047], + [-3.5696229934692383, 5.7456793785095215], + [3.385789632797241, 1.800071120262146], + [2.667332649230957, 5.787042617797852], + [2.6371350288391113, -3.6090824604034424], + [-3.9984118938446045, -3.305737257003784], + [-4.14013147354126, -5.47560977935791], + [8.32864761352539, -2.3367373943328857], + [1.5007472038269043, -7.989706039428711], + [1.8732231855392456, -7.840414047241211], + [-4.153260707855225, -4.8553667068481445], + [-4.131897449493408, 3.9653003215789795], + [3.819870710372925, -6.9900407791137695], + [-2.505064010620117, 2.003386974334717], + [-3.013068437576294, 4.847915172576904], + [5.93642520904541, -1.2249420881271362], + [-2.543402910232544, 1.6856575012207031], + [0.48575156927108765, -1.0310262441635132], + [-4.613490581512451, -7.208615303039551], + [7.4894280433654785, -2.0753204822540283], + [-0.05338973551988602, 9.52930736541748], + [-3.7918050289154053, -3.050203561782837], + [-0.8538253307342529, -2.9064183235168457], + [3.451350450515747, -6.872751712799072], + [0.38758474588394165, 11.081188201904297], + [3.7579619884490967, -3.057722568511963], + [-7.515092372894287, -1.3999119997024536], + [8.61860179901123, -2.3281619548797607], + [0.025321535766124725, 13.080338478088379], + [3.0163776874542236, -4.28904914855957], + [-4.701326847076416, 3.7380306720733643], + [3.3346779346466064, -6.111067771911621], + [-2.490929365158081, -0.6488281488418579], + [3.755474328994751, -3.790201187133789], + [-2.349186658859253, -3.884014129638672], + [8.54495620727539, -2.288151502609253], + [0.9613751769065857, -6.804596900939941], + [8.06294059753418, -2.212484121322632], + [3.3350143432617188, -4.100567817687988], + [2.489888906478882, 5.86111307144165], + [-2.1783604621887207, 2.4846646785736084], + [4.188457012176514, 6.126985549926758], + [1.3677303791046143, 3.4652397632598877], + [-0.907697319984436, 1.831380009651184], + [-3.011113405227661, -3.3769314289093018], + [-6.565916538238525, -1.3134000301361084], + [0.10735910385847092, 9.835880279541016], + [6.647330284118652, -2.505899429321289], + [0.3276084363460541, -1.3491743803024292], + [2.8552463054656982, -4.028112888336182], + [-4.602571487426758, 7.233170032501221], + [3.1108267307281494, -8.860881805419922], + [7.30073881149292, -6.21115255355835], + [-3.193199872970581, 2.916989803314209], + [4.272066593170166, 5.905217170715332], + [6.143167972564697, -1.2388919591903687], + [0.10067927092313766, 9.635149002075195], + [3.244198799133301, -4.635895729064941], + [-1.8485697507858276, 2.3478970527648926], + [0.3727152943611145, 0.29907459020614624], + [1.4139734506607056, 4.570640563964844], + [-2.4290847778320312, 5.319983005523682], + [3.88080096244812, -3.5893149375915527], + [3.5241737365722656, 1.5932047367095947], + [2.010596513748169, 5.427687644958496], + [-3.6603047847747803, -6.2428998947143555], + [-6.1377787590026855, 1.6072529554367065], + [-2.1557846069335938, 2.455026626586914], + [7.648910045623779, -1.794992208480835], + [0.2595840096473694, 10.537616729736328], + [-1.721848487854004, 2.159205675125122], + [-0.08432788401842117, 13.110525131225586], + [5.888063907623291, -1.2128549814224243], + [0.28915923833847046, 9.671869277954102], + [5.841034889221191, 7.822904586791992], + [-2.1650445461273193, 2.6414167881011963], + [-3.373735189437866, -1.1484767198562622], + [-2.60538387298584, 5.550444602966309], + [-4.250772953033447, 3.9012973308563232], + [-4.783858299255371, -2.9046437740325928], + [4.44720983505249, 6.790752410888672], + [-4.876730442047119, -6.675676345825195], + [-5.168370246887207, -3.5647997856140137], + [-4.582921981811523, -0.970814049243927], + [2.5895872116088867, -7.700650215148926], + [5.97824239730835, 7.87202262878418], + [-2.49601149559021, 1.6253284215927124], + [-4.00123405456543, 0.1875087320804596], + [3.1421377658843994, -5.723814964294434], + [0.29298830032348633, 10.74478530883789], + [-1.9614102840423584, 2.3838741779327393], + [2.733327627182007, 4.163137435913086], + [0.028418593108654022, 12.464815139770508], + [0.6195650100708008, -4.075521469116211], + [0.5865150094032288, -0.9207966327667236], + [-4.773909091949463, -6.591004371643066], + [0.18903285264968872, 12.264598846435547], + [-2.1015706062316895, 2.570479393005371], + [2.3772132396698, 4.36351203918457], + [2.519277572631836, -7.386465072631836], + [-0.24696668982505798, -1.7297836542129517], + [3.6696648597717285, -9.935087203979492], + [-2.2964909076690674, -3.1635115146636963], + [-2.8788387775421143, 6.435540199279785], + [0.5268083214759827, -0.4926118552684784], + [3.2471237182617188, -6.635024070739746], + [4.930789947509766, -1.195378303527832], + [-4.574038028717041, -4.005346775054932], + [-3.624800205230713, 6.821521282196045], + [-3.617576837539673, 4.858931064605713], + [3.3007681369781494, -7.7413716316223145], + [-5.666677951812744, 0.6595122814178467], + [5.3850321769714355, -3.6567575931549072], + [-1.0136386156082153, -3.113039255142212], + [3.009552001953125, -3.112687349319458], + [-2.1920337677001953, 2.3001325130462646], + [6.937597751617432, 8.30224609375], + [3.0172078609466553, 0.9064053297042847], + [9.824682235717773, -2.4665396213531494], + [0.3071308135986328, 8.748830795288086], + [5.700481414794922, 7.257806777954102], + [-6.226796627044678, -1.935540795326233], + [4.305284023284912, -3.7019312381744385], + [1.2478041648864746, 5.210123062133789], + [-3.527932643890381, 5.291681289672852], + [0.466311514377594, -1.0476655960083008], + [5.153316020965576, -0.7901197671890259], + [7.257130146026611, -2.179591417312622], + [3.2864832878112793, -4.272019863128662], + [2.5775346755981445, 0.9022441506385803], + [-6.091137409210205, 7.8380045890808105], + [-4.873669147491455, -5.788702964782715], + [-0.786055862903595, 1.6322519779205322], + [-5.511385440826416, 6.115687370300293], + [2.7322051525115967, 6.726622104644775], + [4.43279504776001, 1.6010228395462036], + [-0.2698940634727478, -1.4866927862167358], + [8.686649322509766, -2.6028993129730225], + [-5.034102916717529, -6.952663421630859], + [2.135709047317505, -3.5101709365844727], + [-1.9783852100372314, -1.9448639154434204], + [0.09695213288068771, 10.944908142089844], + [-6.859879970550537, -0.6060658097267151], + [-3.7079503536224365, 4.862329483032227], + [5.22316837310791, 7.590443134307861], + [-6.0343337059021, 7.375608444213867], + [8.862874984741211, -2.429197072982788], + [-3.9899399280548096, -6.918206691741943], + [3.22749924659729, -4.460949897766113], + [-4.794507026672363, 5.40817928314209], + [0.27869683504104614, 11.211997985839844], + [-5.101038932800293, -3.6520354747772217], + [8.800450325012207, -2.600830316543579], + [2.9056336879730225, 0.9186747670173645], + [-6.720956802368164, -1.87370765209198], + [-0.9460265636444092, 1.558821678161621], + [3.620222568511963, -3.3358089923858643], + [0.16129034757614136, 10.426031112670898], + [-2.675271511077881, 1.9552613496780396], + [3.56740665435791, 1.1250754594802856], + [-0.9126830697059631, 3.2013237476348877], + [7.893084526062012, -2.2956998348236084], + [11.043280601501465, -2.5988850593566895], + [-4.832053184509277, -0.7909900546073914], + [-0.029522307217121124, 12.543191909790039], + [5.086678981781006, 6.330901622772217], + [6.160430431365967, 7.785170555114746], + [-0.02598349004983902, 0.9477025866508484], + [-3.766916513442993, 3.9319262504577637], + [-2.2676775455474854, 1.7182786464691162], + [-2.4490418434143066, -2.433774948120117], + [3.361135721206665, -6.40518856048584], + [-3.992628335952759, 1.89751398563385], + [7.794373989105225, -2.162177324295044], + [3.490659475326538, 5.979328155517578], + [6.853377819061279, -2.4821627140045166], + [2.2471959590911865, -8.664934158325195], + [2.2694146633148193, 2.8574538230895996], + [3.649064302444458, 1.161317229270935], + [-3.269963502883911, 6.346762657165527], + [1.0497703552246094, 4.307011604309082], + [0.37991130352020264, 11.871992111206055], + [4.269020080566406, 6.88570499420166], + [8.545321464538574, -2.339617967605591], + [6.391726493835449, -2.8628358840942383], + [-5.214652061462402, -1.8380781412124634], + [4.335638523101807, -3.6528446674346924], + [-3.425222158432007, -1.9570940732955933], + [-2.4796340465545654, -3.797250747680664], + [-4.477053642272949, 6.520380973815918], + [5.856801986694336, 7.348048686981201], + [7.861424922943115, -2.179367780685425], + [-4.461103916168213, -1.419864296913147], + [0.02194642275571823, 12.421037673950195], + [6.295642852783203, 8.013162612915039], + [8.22057819366455, -2.2188007831573486], + [-2.424558401107788, 1.4036945104599], + [7.791665554046631, -2.35575270652771], + [4.1835713386535645, 6.572033882141113], + [0.12376122921705246, 10.121533393859863], + [2.8928868770599365, -3.5736281871795654], + [4.027631759643555, -7.112752437591553], + [7.216115951538086, 8.773677825927734], + [-3.4580318927764893, -3.7617294788360596], + [3.307011842727661, 1.5779880285263062], + [1.9610464572906494, 2.002418279647827], + [-0.7165801525115967, -0.10232487320899963], + [-2.3984367847442627, 2.0169315338134766], + [-2.154703378677368, 2.594465494155884], + [-2.928054094314575, 6.408760070800781], + [0.25242096185684204, 11.423269271850586], + [3.6913340091705322, -3.4851818084716797], + [9.882950782775879, -2.5250155925750732], + [3.447232961654663, -3.786505937576294], + [0.03756444901227951, 12.789748191833496], + [1.75504732131958, -7.545229911804199], + [-1.9118638038635254, -3.1865594387054443], + [2.568742036819458, -3.3619115352630615], + [-6.79703950881958, 7.720495700836182], + [10.315470695495605, -2.4725821018218994], + [-3.716564416885376, 4.838068962097168], + [-3.0119740962982178, -1.840811014175415], + [3.299292802810669, -4.666070938110352], + [-5.099026203155518, -0.8308359980583191], + [3.1281988620758057, -4.481639862060547], + [2.7735750675201416, -2.9820759296417236], + [10.283990859985352, -2.3367202281951904], + [2.807899236679077, -1.0962114334106445], + [6.283071041107178, -5.532327651977539], + [0.042425088584423065, 9.579761505126953], + [2.2348694801330566, 2.502636671066284], + [8.589447975158691, -2.46307635307312], + [6.307034015655518, -0.9861925840377808], + [-3.5787718296051025, 2.5903420448303223], + [3.627225637435913, 1.1463114023208618], + [-4.227540016174316, -5.055116653442383], + [2.8366641998291016, -3.823319911956787], + [-1.245140552520752, -2.96136212348938], + [3.0002963542938232, -4.234981536865234], + [2.0075042247772217, 3.667616605758667], + [-4.260669708251953, -3.409172773361206], + [-1.3535557985305786, -0.19706490635871887], + [-5.297545433044434, 5.908046245574951], + [2.9249231815338135, -3.9948623180389404], + [2.709623336791992, -3.865368127822876], + [5.094064235687256, -1.7396641969680786], + [6.12476110458374, 7.97513484954834], + [-4.664677143096924, -7.455562114715576], + [3.1877124309539795, -4.1684746742248535], + [3.5865020751953125, -7.22854471206665], + [-3.930640697479248, -3.648801326751709], + [-2.368631601333618, 2.167788028717041], + [-0.07585162669420242, 12.72004508972168], + [-2.2278475761413574, 2.346266031265259], + [-2.1298062801361084, 2.345698118209839], + [-5.44077730178833, 7.996538162231445], + [3.7201755046844482, 1.183878779411316], + [-3.771693229675293, -4.473549842834473], + [3.1114485263824463, -5.575435638427734], + [-7.074950695037842, 0.15449082851409912], + [1.1648201942443848, 0.6139559745788574], + [3.59208345413208, -3.5893304347991943], + [-2.5208678245544434, 1.7582433223724365], + [1.5205416679382324, -0.14938700199127197], + [2.200251340866089, -7.9385175704956055], + [9.030356407165527, -2.5504801273345947], + [2.5285351276397705, 2.732285261154175], + [6.0626749992370605, -2.8957912921905518], + [1.953265905380249, 5.770856857299805], + [0.08608543127775192, 11.675790786743164], + [6.009510040283203, -3.0426175594329834], + [-4.712644100189209, 3.9997599124908447], + [8.145272254943848, -2.5079638957977295], + [-6.055331707000732, 0.40309327840805054], + [-5.022223949432373, -5.5167365074157715], + [8.336352348327637, -2.2641708850860596], + [3.4454004764556885, -5.060152053833008], + [3.4973690509796143, -4.461658477783203], + [-2.898015260696411, -2.6014368534088135], + [4.795454978942871, -1.5814181566238403], + [3.5543320178985596, -3.337735652923584], + [2.9149832725524902, -4.037787914276123], + [3.434084892272949, -3.5400121212005615], + [-1.8928321599960327, 1.011827826499939], + [-1.686862826347351, 2.070816993713379], + [8.060425758361816, -2.23221492767334], + [3.412165880203247, 5.991605758666992], + [2.0545899868011475, 5.730783939361572], + [-4.429123401641846, -4.7959160804748535], + [-1.7550371885299683, 2.0993359088897705], + [-7.5203680992126465, 0.10992765426635742], + [0.051340632140636444, 12.44311809539795], + [-5.202576160430908, -4.940495491027832], + [-1.014072060585022, 1.1741119623184204], + [1.7233167886734009, 3.4628002643585205], + [-6.35137414932251, 7.38169527053833], + [8.568570137023926, -2.3299243450164795], + [3.900235652923584, -6.779651641845703], + [-3.1396024227142334, 3.1909983158111572], + [4.80866003036499, 6.554422855377197], + [-5.572573184967041, -2.9499616622924805], + [5.4541802406311035, 6.715160369873047], + [-2.4038760662078857, 2.0099573135375977], + [-0.31012147665023804, -2.0564839839935303], + [2.5480384826660156, 6.692607879638672], + [9.023360252380371, -2.654888868331909], + [-6.3374786376953125, -0.5431803464889526], + [-2.440938711166382, 1.4013640880584717], + [5.007883548736572, -0.9442968368530273], + [-2.202223539352417, 2.5069539546966553], + [2.8882644176483154, 1.943364143371582], + [-2.135650157928467, 2.113276720046997], + [8.295669555664062, -2.297762155532837], + [1.614727258682251, -1.1259807348251343], + [3.281867742538452, -8.584620475769043], + [6.878511428833008, -2.0489957332611084], + [5.8310136795043945, -1.2884427309036255], + [-2.0891265869140625, 2.5702834129333496], + [-2.226623058319092, -4.784441947937012], + [7.233645915985107, 8.598236083984375], + [6.562293529510498, 7.991930961608887], + [-5.483102321624756, 5.789711952209473], + [0.24832314252853394, 11.466832160949707], + [-3.3847591876983643, -1.2057524919509888], + [9.562633514404297, -2.3545138835906982], + [0.8602503538131714, 5.896947383880615], + [0.15788060426712036, 10.1574068069458], + [-0.1993742287158966, -1.7188178300857544], + [-0.1658608317375183, 9.962421417236328], + [-4.631382465362549, -6.8449835777282715], + [-5.9638142585754395, -0.7388575077056885], + [-0.05048341304063797, 12.661911010742188], + [-4.068992614746094, -2.278202772140503], + [-5.223258018493652, 5.747520446777344], + [2.225071430206299, -2.922769784927368], + [-0.7011166214942932, -1.2976832389831543], + [2.0159640312194824, -8.64920425415039], + [8.246857643127441, -2.1331512928009033], + [2.765076160430908, 1.7965941429138184], + [2.0434699058532715, 5.885148525238037], + [3.704702854156494, -8.88239860534668], + [2.849916696548462, 0.3636190593242645], + [3.4121198654174805, -2.9246976375579834], + [7.381983757019043, -2.7305257320404053], + [6.075253486633301, -1.1520925760269165], + [-3.1195197105407715, 6.127594470977783], + [5.418083190917969, -3.751113176345825], + [-5.045067310333252, -6.7913055419921875], + [-5.1675286293029785, -3.367466688156128], + [-3.7138240337371826, -3.26414155960083], + [6.958401203155518, -1.7573456764221191], + [-3.3943164348602295, 5.859087944030762], + [3.4807045459747314, -2.4113457202911377], + [6.923445224761963, -2.114701986312866], + [3.6229472160339355, -5.49833345413208], + [3.301206350326538, 5.24377965927124], + [6.408636093139648, -1.3402526378631592], + [0.16700857877731323, 12.160114288330078], + [1.9595110416412354, 5.392827987670898], + [2.571964979171753, 3.3930585384368896], + [3.0408616065979004, -4.256524085998535], + [0.06313588470220566, -1.455556035041809], + [-3.6923654079437256, 3.951925039291382], + [3.525991201400757, 1.2988252639770508], + [1.7725396156311035, -7.051924705505371], + [5.859707832336426, -0.2799718379974365], + [5.4210734367370605, -1.203879475593567], + [1.7155756950378418, -7.2491912841796875], + [-6.037307262420654, -1.4127269983291626], + [0.008328728377819061, 11.596052169799805], + [3.1041924953460693, -4.434190273284912], + [2.4276041984558105, -2.8290107250213623], + [-1.0306251049041748, -1.9246152639389038], + [-3.750596284866333, -3.6614720821380615], + [-6.783850193023682, 7.8430938720703125], + [-1.5531871318817139, 1.8139933347702026], + [4.62856388092041, -0.5384176969528198], + [-4.598392009735107, -7.1535797119140625], + [-5.028574466705322, -1.2771486043930054], + [3.6374881267547607, -8.36962890625], + [2.607973098754883, -3.12419056892395], + [2.2463390827178955, 3.4634387493133545], + [-1.8807300329208374, 2.367481231689453], + [0.14377939701080322, 9.340872764587402], + [5.429935455322266, 7.71174430847168], + [0.9820079207420349, 10.165140151977539], + [-2.970174789428711, 6.754558086395264], + [3.997682809829712, -5.915118217468262], + [8.694250106811523, -2.3605735301971436], + [3.815103054046631, -5.740220069885254], + [-2.9647912979125977, -2.104418992996216], + [6.24428129196167, 7.728004455566406], + [-7.040530204772949, 7.725995063781738], + [-2.645822525024414, 1.8858654499053955], + [-5.010342121124268, 6.356876850128174], + [-6.851931095123291, -0.14207041263580322], + [6.658470630645752, -1.459955096244812], + [0.46982771158218384, -0.9734959602355957], + [1.1600407361984253, 2.4035584926605225], + [-0.4705025255680084, -2.029284954071045], + [2.0341796875, 4.635461330413818], + [-7.343555927276611, 3.311638832092285], + [7.409559726715088, -2.9522063732147217], + [3.849156618118286, -6.608460426330566], + [-3.9891297817230225, -2.1647284030914307], + [3.4121556282043457, -9.189542770385742], + [1.4369397163391113, 0.2655740976333618], + [0.04240637272596359, 12.337422370910645], + [-5.9054179191589355, -0.8014577031135559], + [3.8777225017547607, -3.333940267562866], + [-2.8599023818969727, 1.6350867748260498], + [4.97609806060791, -4.051371097564697], + [-6.693766117095947, 7.728645324707031], + [5.449769973754883, -1.1351702213287354], + [-1.5086590051651, 2.2718098163604736], + [-3.8513097763061523, 4.550191879272461], + [0.05156504362821579, 12.167977333068848], + [3.594647169113159, -3.7650811672210693], + [6.103273868560791, -3.919222354888916], + [0.1660231351852417, 11.049015045166016], + [3.3949060440063477, -4.862539291381836], + [3.5143990516662598, 6.465961456298828], + [-3.1372132301330566, -2.2299108505249023], + [-4.96921443939209, 5.142627716064453], + [-4.031272888183594, -0.8820289969444275], + [5.840643405914307, 7.299970626831055], + [-2.3741543292999268, -2.698984146118164], + [2.941152811050415, -0.8707746267318726], + [-0.027928240597248077, 13.434126853942871], + [-7.174515247344971, -0.5871648788452148], + [-1.1288408041000366, -2.9644582271575928], + [3.3949697017669678, -4.7833404541015625], + [-3.9118869304656982, -5.858766078948975], + [-3.3717503547668457, -2.118774175643921], + [-3.305887222290039, -4.900906562805176], + [-2.264726400375366, 1.8413883447647095], + [-2.8422739505767822, -4.4024858474731445], + [-1.669762372970581, 2.0854640007019043], + [-4.285715579986572, 6.25804328918457], + [-5.086824893951416, -1.2708054780960083], + [-4.185113906860352, -6.524340629577637], + [-1.1817811727523804, 1.5436164140701294], + [-4.719930648803711, -4.8959479331970215], + [-2.98174786567688, 3.307819366455078], + [2.8468470573425293, -3.7143025398254395], + [8.46438980102539, -2.3834803104400635], + [-5.322276592254639, 4.175137996673584], + [-4.884791374206543, -2.313889741897583], + [-1.6757078170776367, 0.28628915548324585], + [-2.0182528495788574, 0.3165929317474365], + [-0.09254998713731766, -1.6241563558578491], + [-3.8481509685516357, -1.644332766532898], + [3.2058494091033936, -4.716588020324707], + [0.2422531247138977, 11.190239906311035], + [-3.5721850395202637, 3.7680022716522217], + [-1.510654330253601, 2.079904556274414], + [9.68703842163086, -2.5128977298736572], + [-3.884612798690796, -2.5694921016693115], + [-7.289093494415283, 0.4468379020690918], + [3.16101336479187, -7.652631759643555], + [-5.120802402496338, 6.124543190002441], + [7.127773761749268, -1.4626915454864502], + [6.24150276184082, 7.74884033203125], + [3.0770955085754395, -3.9467597007751465], + [1.7027076482772827, 5.782313823699951], + [-2.4601011276245117, 1.9566701650619507], + [-4.554514408111572, -6.82432222366333], + [-2.438429355621338, 3.7040648460388184], + [-3.8545939922332764, -3.6771457195281982], + [0.2067173719406128, 10.817255020141602], + [-6.221832752227783, 7.885716438293457], + [3.530503749847412, -8.959029197692871], + [-0.26817587018013, -1.7024835348129272], + [6.26153039932251, 8.310659408569336], + [-3.977224588394165, 4.421209812164307], + [-4.019852161407471, -4.842360496520996], + [6.752604007720947, 8.224346160888672], + [-2.1455416679382324, 2.7261526584625244], + [-2.7551050186157227, 2.2219746112823486], + [-1.1876635551452637, 1.7571876049041748], + [3.016889810562134, -2.837308168411255], + [-2.602600336074829, -3.288269281387329], + [-5.611441135406494, 6.09636926651001], + [-5.431562900543213, -1.5462900400161743], + [-1.008395791053772, -3.1111552715301514], + [0.24916821718215942, 11.089162826538086], + [1.01698637008667, -0.5591391324996948], + [0.2428857684135437, -1.3304625749588013], + [-2.5129778385162354, 1.6337934732437134], + [-4.546871662139893, -6.693027973175049], + [0.09320741146802902, 9.646513938903809], + [5.090978622436523, 6.504056930541992], + [9.142470359802246, -2.3231961727142334], + [0.3847825527191162, 0.723150372505188], + [-2.305830955505371, 2.355628490447998], + [9.663396835327148, -2.3628594875335693], + [0.5979503393173218, -0.10006381571292877], + [-2.0855166912078857, 2.5638504028320312], + [10.009819984436035, -2.6688334941864014], + [2.9630773067474365, 4.6393938064575195], + [3.238309621810913, -4.679491996765137], + [2.815850257873535, -3.970425605773926], + [0.23284751176834106, 11.731718063354492], + [-5.2111077308654785, 5.699331283569336], + [-2.0094001293182373, 0.24705040454864502], + [0.556280255317688, 6.54541015625], + [-4.135429859161377, 6.93967342376709], + [4.532701015472412, -3.5417728424072266], + [4.470929145812988, -0.3001221716403961], + [6.273076057434082, -1.2793341875076294], + [2.541989326477051, -8.828852653503418], + [4.525146007537842, 7.077512741088867], + [2.7493174076080322, -9.899883270263672], + [6.431864261627197, -5.012533187866211], + [4.155835151672363, -3.9413139820098877], + [-2.6698241233825684, 2.132272481918335], + [-5.1783576011657715, -0.8039839267730713], + [3.7115280628204346, -7.517727375030518], + [9.23531436920166, -2.50136399269104], + [2.075368642807007, -8.149284362792969], + [3.3260507583618164, -4.665569305419922], + [5.403833866119385, -1.3206205368041992], + [2.9594879150390625, -4.254580020904541], + [2.598825693130493, 6.210296630859375], + [-2.386563777923584, -4.60290002822876], + [-0.07359696179628372, 10.114764213562012], + [2.5004305839538574, 5.9081268310546875], + [3.4696156978607178, -6.240610599517822], + [7.695288181304932, -2.3695266246795654], + [2.358438014984131, -3.3323614597320557], + [3.555701494216919, -7.301946640014648], + [-4.227531909942627, 4.485823631286621], + [1.1812487840652466, -0.5393681526184082], + [-2.4509174823760986, 2.03688383102417], + [-4.74383020401001, -6.418360710144043], + [-4.100120544433594, -3.4007577896118164], + [8.203543663024902, -2.311110734939575], + [-3.6633965969085693, -5.97267484664917], + [3.6645543575286865, -4.2352190017700195], + [2.665175199508667, -6.368973731994629], + [4.3802995681762695, -7.43280029296875], + [4.770756244659424, -6.526216983795166], + [2.8060457706451416, -3.8578624725341797], + [4.215690612792969, -9.103522300720215], + [6.131152153015137, -4.901294708251953], + [9.583527565002441, -2.3003156185150146], + [6.605612277984619, -5.409073829650879], + [-2.128031015396118, 0.886854350566864], + [8.49394416809082, -2.4733262062072754], + [7.267466068267822, -1.7690421342849731], + [3.3761751651763916, -3.9509029388427734], + [-4.429870128631592, 4.900631904602051], + [7.823143005371094, -2.118558406829834], + [-3.9565584659576416, 5.112455368041992], + [1.573889136314392, 0.6457159519195557], + [2.605280637741089, 4.666013240814209], + [3.1552176475524902, -8.493045806884766], + [1.6661025285720825, -7.303809642791748], + [1.1141436100006104, -6.630887031555176], + [-0.006664462387561798, 12.299867630004883], + [-2.4684855937957764, 2.0998058319091797], + [1.9504239559173584, 4.9970173835754395], + [5.350404262542725, 7.22844934463501], + [-3.1735923290252686, -5.501823902130127], + [-4.474299907684326, -6.8076043128967285], + [5.05864953994751, -6.334029197692871], + [10.417243957519531, -2.4684998989105225], + [1.8432517051696777, 5.7191853523254395], + [9.657426834106445, -2.360626220703125], + [-2.4470982551574707, -1.256118655204773], + [5.789083003997803, -2.1406376361846924], + [-3.520876884460449, 6.494938850402832], + [7.369251728057861, -2.479029417037964], + [-4.084428310394287, -0.7911385297775269], + [-2.463501453399658, -5.112818717956543], + [7.053969860076904, 8.51941204071045], + [0.14359790086746216, 11.63486099243164], + [-4.55527925491333, -7.116476058959961], + [-1.3830355405807495, 0.8088921308517456], + [-1.5319842100143433, -3.876085042953491], + [5.208225727081299, -2.3592169284820557], + [2.758000135421753, -8.469660758972168], + [3.84732985496521, -3.6734304428100586], + [-7.747472286224365, 1.894965410232544], + [4.447722911834717, 6.899715423583984], + [1.7063374519348145, 3.3137166500091553], + [-4.921490669250488, -6.692050933837891], + [-5.033976078033447, -2.632030487060547], + [-5.417413234710693, -2.8264577388763428], + [4.654393196105957, 2.016106367111206], + [6.685004711151123, -1.820024847984314], + [1.7099008560180664, 4.656848430633545], + [-4.336217403411865, 3.1371657848358154], + [8.255431175231934, -2.3032777309417725], + [-3.424755811691284, 3.2990500926971436], + [-4.7175116539001465, -1.829174518585205], + [-0.8983203768730164, 1.6725280284881592], + [6.027576923370361, 7.49404239654541], + [-3.236844778060913, 0.7497045993804932], + [0.4524579644203186, -1.1852613687515259], + [-1.2284307479858398, 1.0160051584243774], + [-4.347229480743408, 5.362573146820068], + [-6.681392192840576, 7.865243911743164], + [-5.030977249145508, -5.828947067260742], + [8.13953685760498, -2.4111456871032715], + [-0.37767869234085083, -1.5643519163131714], + [-0.5791906714439392, -2.4062037467956543], + [-1.5877556800842285, 3.9764888286590576], + [6.061599254608154, -4.714621067047119], + [-2.3379733562469482, 2.9787981510162354], + [8.929038047790527, -2.8051395416259766], + [-6.639141082763672, -1.7954802513122559], + [2.0274574756622314, 5.335787773132324], + [0.6483505964279175, 0.1059579849243164], + [0.23714232444763184, 10.505821228027344], + [3.9047181606292725, 1.1147710084915161], + [7.91143798828125, -2.2154242992401123], + [7.553565979003906, -2.0085713863372803], + [2.375203847885132, 4.365993976593018], + [7.113682746887207, -1.6570231914520264], + [-2.5776827335357666, 1.5203286409378052], + [0.8903487920761108, -0.6471133828163147], + [2.907233715057373, -4.142868518829346], + [-0.04616684466600418, 13.456358909606934], + [2.4334356784820557, -6.421394348144531], + [4.829812526702881, -3.250371217727661], + [3.980210542678833, -3.369811773300171], + [1.560232162475586, 2.0491552352905273], + [-2.254251718521118, 0.826600193977356], + [-5.049023151397705, -4.243187427520752], + [-4.497255325317383, -3.421198606491089], + [-0.10015220195055008, 13.132920265197754], + [-5.279791355133057, 4.852299690246582], + [7.78154993057251, -2.5812184810638428], + [-5.138976573944092, -0.2510744333267212], + [7.9300665855407715, -2.162907838821411], + [-2.1647119522094727, 2.1024816036224365], + [-2.3411812782287598, 1.621261715888977], + [2.0306828022003174, -5.421137809753418], + [-2.7282965183258057, -1.1254088878631592], + [-3.943866491317749, -1.6391955614089966], + [-1.4796063899993896, -0.5138868093490601], + [0.7814483046531677, -0.38831180334091187], + [3.6337602138519287, -8.441263198852539], + [2.7337124347686768, -0.9437674283981323], + [-5.484663486480713, -1.0562266111373901], + [-7.046952247619629, 7.286338806152344], + [-3.4135611057281494, -5.9478325843811035], + [8.914812088012695, -2.4671475887298584], + [6.475724697113037, -1.2135103940963745], + [2.386024236679077, -0.24953186511993408], + [-7.645890712738037, 0.428622841835022], + [-4.299663543701172, -6.272590637207031], + [-7.047521114349365, -0.30301737785339355], + [-3.0583698749542236, -1.8206373453140259], + [3.296992540359497, -6.911129951477051], + [1.524702548980713, -6.204656600952148], + [-0.0289120152592659, 8.965692520141602], + [-2.5965933799743652, 0.3023530840873718], + [1.2832276821136475, -6.992881774902344], + [2.2691524028778076, 3.548999547958374], + [0.18293124437332153, 11.962940216064453], + [-4.905819892883301, -7.623552322387695], + [2.4180729389190674, 0.7184639573097229], + [-2.15960431098938, 2.069859743118286], + [-6.42987585067749, -1.760922908782959], + [2.9883744716644287, 3.5678765773773193], + [1.860959768295288, -7.493823528289795], + [-2.191225290298462, 0.1326889991760254], + [1.6533584594726562, -7.9869866371154785], + [-4.226718425750732, 4.859701156616211], + [-1.5525107383728027, -0.6263129115104675], + [-2.8200204372406006, -1.3453102111816406], + [8.872350692749023, -2.358577013015747], + [-3.123837947845459, -5.873079776763916], + [8.324891090393066, -2.263190984725952], + [4.297450542449951, 1.867258906364441], + [3.7201030254364014, -8.834012985229492], + [-2.3441970348358154, 2.1059656143188477], + [8.6351957321167, -2.269794225692749], + [-2.3972620964050293, 1.2846280336380005], + [5.87608528137207, -1.9953330755233765], + [-7.538989543914795, -1.1820924282073975], + [-2.0357589721679688, 2.2919557094573975], + [2.506632089614868, 5.584801197052002], + [3.9954874515533447, -3.0180394649505615], + [0.11493819206953049, -1.598547339439392], + [-3.5185563564300537, -2.588031053543091], + [-0.9840551614761353, -3.605215549468994], + [-1.499084711074829, 2.0174643993377686], + [3.49066162109375, 1.567074179649353], + [0.21900182962417603, 10.640142440795898], + [-4.641223907470703, 3.4517078399658203], + [-1.4236305952072144, -3.2956631183624268], + [-1.825151801109314, -4.168855667114258], + [-4.801025390625, -3.7332117557525635], + [-2.631026029586792, -4.482739448547363], + [6.794922351837158, 8.216499328613281], + [7.915555000305176, -2.5731258392333984], + [2.589468240737915, 3.4227192401885986], + [-2.110515832901001, 2.541806697845459], + [-4.156787872314453, -0.9290486574172974], + [-1.9377378225326538, -4.166536808013916], + [8.009832382202148, -2.2746896743774414], + [6.260875225067139, -2.585365056991577], + [5.772796154022217, 7.479349613189697], + [-3.1213290691375732, 1.2658568620681763], + [-5.070005893707275, -6.05617094039917], + [-2.778348684310913, 1.8732497692108154], + [-1.9178558588027954, -3.925762176513672], + [2.1870007514953613, 2.4419713020324707], + [2.7490663528442383, -6.327454566955566], + [-0.5648654699325562, 1.0514711141586304], + [-0.09014976769685745, 9.41720199584961], + [-3.3142313957214355, -3.4728941917419434], + [-4.360576629638672, 4.854590892791748], + [6.9692230224609375, 8.38171672821045], + [-0.034905798733234406, 9.452293395996094], + [3.9608418941497803, -6.6940836906433105], + [-2.7458889484405518, 1.8596376180648804], + [8.233718872070312, -2.1723015308380127], + [0.16306766867637634, -1.3659464120864868], + [-2.1244423389434814, 2.4835264682769775], + [7.896580219268799, -2.1995632648468018], + [4.911890506744385, -6.512401580810547], + [0.6345338225364685, -5.737852096557617], + [0.05954771488904953, 11.558525085449219], + [6.465620994567871, -2.906545400619507], + [6.96953821182251, -4.783895492553711], + [-3.810011386871338, -2.136422634124756], + [-4.375189304351807, -5.589069843292236], + [-0.04492957144975662, 12.611185073852539], + [-2.1609857082366943, 1.8844436407089233], + [-0.34143683314323425, -1.8273530006408691], + [-0.2268424928188324, 6.1474714279174805], + [0.26250916719436646, 11.524393081665039], + [3.94274640083313, -2.7955517768859863], + [0.03714316338300705, 9.184732437133789], + [0.4731554388999939, 10.688224792480469], + [2.227224588394165, 3.4516513347625732], + [-2.5653672218322754, 1.7331417798995972], + [-3.6293962001800537, -1.8906739950180054], + [0.06228476017713547, 9.961512565612793], + [3.3052008152008057, -6.21885871887207], + [-2.3640034198760986, 2.1532981395721436], + [-2.510037660598755, 2.0672667026519775], + [4.534663677215576, 1.9288465976715088], + [0.03875838965177536, 13.591506958007812], + [6.6997971534729, 8.25320053100586], + [-5.424084186553955, -2.3320493698120117], + [-4.617680072784424, 0.26485610008239746], + [-2.4508864879608154, 1.5188225507736206], + [-2.7685375213623047, 4.75130558013916], + [2.117017984390259, 4.934272766113281], + [2.8483223915100098, -8.734145164489746], + [2.34203839302063, 0.8833351135253906], + [-0.6177907586097717, -0.5166453123092651], + [5.363281726837158, -5.106245040893555], + [1.9948985576629639, 0.9608621597290039], + [-6.52251672744751, 7.196687698364258], + [-2.29024600982666, -3.715092658996582], + [0.5856292843818665, -5.674776077270508], + [5.005028247833252, 7.572403907775879], + [7.851016998291016, -2.247649669647217], + [-1.6496262550354004, 1.7313839197158813], + [2.413264036178589, 2.8530595302581787], + [-4.866884708404541, 5.34208869934082], + [6.7556538581848145, 8.399656295776367], + [-4.904880046844482, 6.544157028198242], + [-4.206360340118408, -6.412003517150879], + [-2.4759228229522705, 0.9701741933822632], + [-1.191222071647644, 1.8470872640609741], + [-5.420626640319824, 6.934724807739258], + [7.652101993560791, -2.1532537937164307], + [-0.003440387547016144, 9.546920776367188], + [-4.342990398406982, -1.340828776359558], + [1.7811808586120605, 5.070659637451172], + [4.138409614562988, -3.9265244007110596], + [-2.971071481704712, -0.6544528603553772], + [0.07099597901105881, 10.149206161499023], + [-2.5301244258880615, 1.796963095664978], + [0.11208706349134445, 10.057595252990723], + [-7.352879524230957, -0.8169001340866089], + [-0.695954442024231, -2.760300874710083], + [-2.1427078247070312, 2.5045950412750244], + [4.701735973358154, -4.26961088180542], + [3.0997538566589355, -4.39137077331543], + [0.057065777480602264, 11.430818557739258], + [-3.454204797744751, -5.004350662231445], + [-7.512801647186279, 1.2046055793762207], + [-4.68870210647583, -3.286989688873291], + [-2.007855176925659, 3.4563944339752197], + [8.87584400177002, -2.535175085067749], + [0.6966250538825989, 3.012486219406128], + [-2.6869924068450928, -3.5962233543395996], + [-4.032227039337158, -5.360251426696777], + [2.997951030731201, -4.094759941101074], + [-1.1732901334762573, 1.5190523862838745], + [0.07786213606595993, 10.051496505737305], + [1.532657504081726, 5.279778480529785], + [2.4222981929779053, -8.263360023498535], + [3.174706220626831, -2.9965670108795166], + [2.526165008544922, -8.856707572937012], + [0.9218829274177551, -6.5005693435668945], + [5.6714911460876465, -2.6327178478240967], + [-0.031716831028461456, 12.300533294677734], + [1.1852025985717773, -6.883540153503418], + [4.100086688995361, -3.77854323387146], + [2.9336750507354736, -9.754383087158203], + [-4.310671329498291, -7.076733589172363], + [4.668245315551758, 5.940601348876953], + [3.598747968673706, 1.0587061643600464], + [1.5585105419158936, -6.870458602905273], + [3.0569581985473633, -4.315055847167969], + [-0.10313919931650162, -1.574845314025879], + [1.9592182636260986, -0.1299348920583725], + [-3.654874563217163, -5.264647006988525], + [4.877244472503662, -1.8580378293991089], + [-2.850670576095581, 3.2221362590789795], + [-5.195600509643555, -3.872861623764038], + [-3.6173789501190186, -0.7499246001243591], + [3.6377124786376953, 1.549607515335083], + [3.912444829940796, 6.22402286529541], + [-4.866987705230713, 5.914245128631592], + [-2.203774929046631, 2.654452323913574], + [7.276721954345703, -1.8007380962371826], + [2.3454012870788574, -0.8927422165870667], + [7.008688449859619, -1.1602424383163452], + [-1.529538869857788, -2.625464677810669], + [3.155161142349243, -2.1549224853515625], + [1.8950895071029663, 0.20490813255310059], + [3.471262216567993, 0.377694308757782], + [0.048453740775585175, 9.73118782043457], + [3.1846306324005127, -6.624017715454102], + [3.078016519546509, 4.571407318115234], + [-5.860609531402588, 0.5590826272964478], + [3.3575873374938965, -8.013827323913574], + [-5.00276517868042, -6.888082504272461], + [-4.270876407623291, -2.578636884689331], + [4.252640247344971, 1.9078940153121948], + [2.936455488204956, -4.171558380126953], + [7.825138092041016, -2.4038994312286377], + [-3.616692543029785, -5.753551483154297], + [0.0625947043299675, 9.616852760314941], + [-2.8891594409942627, -4.099140167236328], + [-3.3139798641204834, -1.7776798009872437], + [1.7579227685928345, 0.9599515199661255], + [-3.2823264598846436, -3.8324391841888428], + [1.689145803451538, 5.121951580047607], + [1.652881383895874, -7.286004066467285], + [6.032062530517578, 7.58384895324707], + [2.062037229537964, 0.19122770428657532], + [1.9764649868011475, -1.6898415088653564], + [-5.4293389320373535, -1.5268486738204956], + [9.356867790222168, -2.406571626663208], + [3.4080116748809814, -7.737137794494629], + [-1.938071608543396, -3.8143248558044434], + [-2.469426393508911, 2.2240610122680664], + [2.4307737350463867, 3.5758047103881836], + [-3.144338846206665, -4.377634048461914], + [5.497701168060303, -1.1331390142440796], + [8.713837623596191, -2.28718638420105], + [2.9337778091430664, -3.8699448108673096], + [0.20707136392593384, 10.46483039855957], + [-4.240785598754883, 4.346408367156982], + [7.710187911987305, -2.437908172607422], + [-4.184750080108643, 5.638921737670898], + [-0.9995447397232056, -2.4297547340393066], + [0.08397864550352097, 8.904914855957031], + [-2.0138189792633057, -3.5179357528686523], + [7.42530632019043, -2.660309076309204], + [3.634138584136963, -5.218799591064453], + [3.293741464614868, -4.774165153503418], + [-4.652005672454834, -7.365082740783691], + [-1.998138189315796, -3.476250171661377], + [3.7592239379882812, 1.4424957036972046], + [2.2296230792999268, -3.203397035598755], + [-5.723257541656494, -0.743705153465271], + [9.879049301147461, -2.341944932937622], + [2.14762806892395, 3.8980913162231445], + [-4.2270894050598145, -5.492467880249023], + [-0.6887780427932739, -0.5610241293907166], + [3.9554359912872314, 5.471841335296631], + [0.8075341582298279, -0.5054928660392761], + [2.8121349811553955, -3.96936297416687], + [8.000771522521973, -2.0739991664886475], + [-5.735846042633057, -0.5851482152938843], + [4.6734209060668945, 1.9931637048721313], + [-4.906233310699463, -0.3781622648239136], + [3.045017719268799, -3.2529423236846924], + [-0.019845493137836456, 9.783750534057617], + [9.307948112487793, -2.3834006786346436], + [-6.9253973960876465, -1.2466847896575928], + [-0.09675554186105728, -2.595158338546753], + [3.010470151901245, -3.6214921474456787], + [-5.792264461517334, -0.2194218635559082], + [-0.3184482455253601, 9.925127029418945], + [-4.272284030914307, -6.884360313415527], + [3.4749948978424072, -5.493955612182617], + [-5.238712787628174, -0.7578882575035095], + [-0.020444698631763458, 9.69114875793457], + [-2.480048656463623, 1.7088841199874878], + [2.826326608657837, 1.7472718954086304], + [-4.022289276123047, -1.5258554220199585], + [4.151956081390381, 0.8501079082489014], + [6.550534725189209, -1.8667588233947754], + [0.17321467399597168, 10.248584747314453], + [-6.520035266876221, -0.5872828960418701], + [-1.7317826747894287, 2.324699878692627], + [-3.8741612434387207, 4.123063087463379], + [4.237295150756836, -8.398786544799805], + [7.512400150299072, -2.203134059906006], + [-4.58357048034668, -6.661494255065918], + [2.0273525714874268, 1.2204577922821045], + [-4.290611743927002, -6.487561225891113], + [2.7643730640411377, -3.7053654193878174], + [-6.681258201599121, 7.981266975402832], + [1.345975399017334, -6.293410301208496], + [5.784246444702148, -1.3164191246032715], + [-4.04910135269165, -3.4580671787261963], + [2.2419989109039307, 6.534000396728516], + [11.0504732131958, -2.454152822494507], + [9.421492576599121, -2.402576208114624], + [-4.455700397491455, -2.3496735095977783], + [3.6080148220062256, 1.4227162599563599], + [7.590958595275879, -1.9748564958572388], + [-2.2765517234802246, 2.404489755630493], + [-2.4924097061157227, 1.486732006072998], + [-3.941946268081665, 5.025139331817627], + [-4.7106099128723145, -6.978281021118164], + [6.283902168273926, -2.8446943759918213], + [-2.455826997756958, 0.49832117557525635], + [10.115762710571289, -2.392293691635132], + [0.06947921961545944, 11.294485092163086], + [3.4494788646698, -7.220992088317871], + [7.154925346374512, 8.946154594421387], + [-2.0572707653045654, 2.4240529537200928], + [-2.1915531158447266, 2.3906784057617188], + [0.06663977354764938, 9.100394248962402], + [5.071065902709961, -1.8279407024383545], + [-2.354069948196411, -3.2836720943450928], + [-7.4298577308654785, 8.863288879394531], + [0.3071784973144531, -4.278940200805664], + [-6.264641284942627, 7.121489524841309], + [-2.3080408573150635, -2.875986099243164], + [-0.6700280904769897, -1.4695535898208618], + [-0.08310104161500931, 10.311710357666016], + [-3.509352922439575, 5.291463375091553], + [1.7718008756637573, 3.096014976501465], + [-2.227689027786255, -4.893080711364746], + [-2.3260657787323, 1.1995853185653687], + [7.24492883682251, 8.852510452270508], + [-1.8122098445892334, 1.9397138357162476], + [-7.8573994636535645, 0.661663830280304], + [0.21994686126708984, 10.679177284240723], + [3.149259090423584, -4.5752787590026855], + [8.422152519226074, -2.16471791267395], + [0.06880723685026169, 7.114613056182861], + [0.015097670257091522, 11.764045715332031], + [1.7531721591949463, 4.565606594085693], + [-1.9016227722167969, 1.9280657768249512], + [3.2617688179016113, -3.2849533557891846], + [-4.417953014373779, -6.1475677490234375], + [-0.35991477966308594, -0.08988478779792786], + [-3.2492010593414307, -4.148845195770264], + [2.2101807594299316, 4.425167560577393], + [3.7371151447296143, 1.6114827394485474], + [-2.3044769763946533, 1.7704378366470337], + [10.79748249053955, -2.4846723079681396], + [0.06773119419813156, 9.867796897888184], + [3.0553171634674072, -4.305493354797363], + [3.8000712394714355, -8.49312686920166], + [0.2390979528427124, 11.381604194641113], + [3.366999864578247, -6.48286771774292], + [-2.893723249435425, 2.390455484390259], + [-2.205244541168213, 2.485419511795044], + [-3.399475336074829, -4.290607452392578], + [8.003401756286621, -2.0521328449249268], + [1.890010952949524, 4.923415184020996], + [-1.537628412246704, -4.093639373779297], + [-0.3961157500743866, -1.4149612188339233], + [0.6248495578765869, -0.3115781545639038], + [3.5950725078582764, -7.935585021972656], + [-0.013880319893360138, 12.820513725280762], + [0.071410171687603, 9.962420463562012], + [-4.579888343811035, 4.178403854370117], + [-4.420881748199463, -6.218894958496094], + [7.933824062347412, -2.4846341609954834], + [-6.7685770988464355, 0.9576429128646851], + [3.6354830265045166, 1.3747018575668335], + [-0.0405774787068367, 9.593767166137695], + [-4.01250696182251, -2.162891149520874], + [-3.3977150917053223, -2.4521238803863525], + [1.5778218507766724, 2.000457525253296], + [3.505108118057251, -3.4006705284118652], + [3.6428983211517334, -8.031471252441406], + [3.3127262592315674, 5.442880153656006], + [1.4325408935546875, -5.854092597961426], + [-2.355468511581421, 1.2926950454711914], + [-1.8103264570236206, -3.8163962364196777], + [1.7812429666519165, -7.65301513671875], + [-2.2186224460601807, 0.9622807502746582], + [3.127352237701416, -4.483798027038574], + [-1.0227922201156616, 1.4434895515441895], + [4.6973748207092285, -3.5024189949035645], + [-4.158501148223877, -6.541375160217285], + [-5.2617058753967285, 4.413239479064941], + [-2.1454172134399414, 2.2639248371124268], + [-2.211949586868286, -1.066426157951355], + [-4.777966499328613, -7.737435340881348], + [1.7187485694885254, -6.757706642150879], + [1.9113759994506836, 2.0688555240631104], + [3.0747601985931396, -4.391947269439697], + [9.189522743225098, -2.2909162044525146], + [8.755295753479004, -2.3545725345611572], + [-4.159140586853027, -5.784058570861816], + [5.638923168182373, -1.6073259115219116], + [7.914666652679443, -2.5157980918884277], + [7.637546062469482, -2.1769585609436035], + [-2.476581573486328, -4.200304985046387], + [3.004683256149292, 1.7718878984451294], + [2.177449941635132, 5.858531475067139], + [6.470637321472168, -2.2089498043060303], + [3.7394707202911377, 1.4044169187545776], + [-9.183609008789062, 0.13113605976104736], + [6.274941921234131, -2.6917874813079834], + [-1.3131358623504639, -0.3656774163246155], + [2.588346004486084, 0.4931755065917969], + [3.16054630279541, -4.333619117736816], + [0.05419730395078659, 13.109797477722168], + [8.137782096862793, -2.144714117050171], + [-4.939459323883057, 4.971085548400879], + [-2.1751863956451416, 0.8193718194961548], + [5.143177509307861, -4.684140682220459], + [-1.8933712244033813, 2.4703190326690674], + [3.1767547130584717, -3.6190226078033447], + [3.110262870788574, -5.926828384399414], + [-4.2515177726745605, -6.16303825378418], + [-2.0909178256988525, -1.7097233533859253], + [3.29131817817688, -8.856928825378418], + [-4.390716075897217, -3.08235239982605], + [-4.554323673248291, 3.8912041187286377], + [6.9226555824279785, 8.344067573547363], + [3.207855463027954, -3.354318380355835], + [2.0010199546813965, -8.355369567871094], + [4.144868850708008, -3.5326783657073975], + [-4.621860027313232, -6.893594741821289], + [-4.123043537139893, 8.637849807739258], + [0.1997140645980835, 9.482359886169434], + [10.14053726196289, -2.391954183578491], + [0.3802919387817383, -1.2459453344345093], + [-2.4745917320251465, 1.7485390901565552], + [4.7243475914001465, 5.932311058044434], + [6.572469711303711, -2.3291776180267334], + [-0.3487148880958557, 5.037136077880859], + [-3.690993070602417, 5.709822654724121], + [0.021078579127788544, -1.4478940963745117], + [6.207308769226074, 7.675189971923828], + [8.679699897766113, -2.2970144748687744], + [-0.41837140917778015, -2.0742480754852295], + [7.303615093231201, -2.1739675998687744], + [3.2331619262695312, -3.8494231700897217], + [2.8025341033935547, -2.0444347858428955], + [-4.010731220245361, 5.507102966308594], + [1.8257482051849365, 1.7153254747390747], + [4.306990146636963, -3.099848985671997], + [-0.024533875286579132, 12.226483345031738], + [-2.1150126457214355, -3.7684671878814697], + [0.1976589560508728, 9.831722259521484], + [-3.6336991786956787, -0.15103155374526978], + [0.23444801568984985, 11.115504264831543], + [3.943976640701294, 5.9236860275268555], + [1.3526816368103027, -0.5365064144134521], + [-2.1278820037841797, 1.2596571445465088], + [0.10921024531126022, 9.395526885986328], + [9.48582935333252, -2.448695421218872], + [-3.6702582836151123, -5.744438171386719], + [-0.3759462833404541, 0.6981634497642517], + [10.881768226623535, -2.55950665473938], + [-2.4514658451080322, 1.9488188028335571], + [-6.51242208480835, 7.845671653747559], + [6.18379545211792, 7.857639789581299], + [7.704655170440674, -2.2015020847320557], + [3.0448615550994873, -10.86943244934082], + [7.517496109008789, -2.225095748901367], + [8.155682563781738, -2.146453619003296], + [-2.6725528240203857, 1.7493817806243896], + [0.8686618208885193, 5.624912261962891], + [-3.548957109451294, -5.864222526550293], + [0.2404600977897644, 11.03139877319336], + [-1.3318761587142944, -3.8465206623077393], + [-0.7938624024391174, 1.525444507598877], + [-3.0077080726623535, 4.519989967346191], + [-3.0753400325775146, 6.766486167907715], + [0.17859262228012085, 9.415559768676758], + [4.793884754180908, 7.0846171379089355], + [-0.10563290864229202, 9.663040161132812], + [6.9268975257873535, -3.76291561126709], + [-0.03696168214082718, 11.736788749694824], + [-2.897315263748169, -0.8846557140350342], + [-4.224063396453857, -2.819141149520874], + [-4.292147159576416, -6.056368827819824], + [-2.0642709732055664, 2.145024061203003], + [5.254906177520752, 7.341939926147461], + [0.4654991626739502, -1.0315505266189575], + [6.956808090209961, -0.6676025390625], + [2.226310968399048, -6.133188724517822], + [8.587366104125977, -2.57027006149292], + [0.1499159336090088, 11.924568176269531], + [-7.080390453338623, 3.911553144454956], + [-4.388102054595947, -7.126966953277588], + [3.7497129440307617, -3.1543691158294678], + [8.399200439453125, -2.319871187210083], + [-1.9461432695388794, 1.388860821723938], + [-2.0337491035461426, 2.4852986335754395], + [-4.928257942199707, 0.15661358833312988], + [7.12423038482666, 8.953514099121094], + [-5.767644882202148, 6.402371406555176], + [1.8908836841583252, -5.680868148803711], + [-2.0915377140045166, -3.1784071922302246], + [2.992643117904663, -3.071150064468384], + [5.039803981781006, -3.3967173099517822], + [-6.188099384307861, -1.243956446647644], + [0.3693784773349762, 1.3338292837142944], + [3.2023298740386963, -9.735572814941406], + [0.059370167553424835, -1.4532474279403687], + [3.4349093437194824, -4.282889366149902], + [-4.625021457672119, 4.6712212562561035], + [-0.010940738022327423, 12.641366958618164], + [-1.2182320356369019, 1.480504035949707], + [0.07909225672483444, 12.4225492477417], + [3.652439594268799, -2.9031155109405518], + [5.268784999847412, 7.185579776763916], + [-2.3086206912994385, 2.266120672225952], + [-5.194760799407959, 5.799274444580078], + [-4.755814552307129, -1.7718172073364258], + [-1.4853885173797607, -1.3470855951309204], + [2.8276541233062744, -3.9165117740631104], + [-1.7918050289154053, 2.2238235473632812], + [-1.2000120878219604, 1.722163438796997], + [-4.364326477050781, -1.938941240310669], + [2.190732955932617, -1.3996000289916992], + [2.878664970397949, -9.750865936279297], + [-3.316612958908081, 6.604074001312256], + [-0.09070426970720291, 9.516632080078125], + [8.719314575195312, -2.4811880588531494], + [-3.9006335735321045, -1.5054728984832764], + [-3.0492055416107178, -2.299906015396118], + [-2.2906811237335205, 2.108466625213623], + [-1.4449543952941895, 1.5867209434509277], + [3.0546891689300537, -8.389602661132812], + [7.723803520202637, -2.5808398723602295], + [3.256247043609619, -6.331488609313965], + [-4.135508060455322, 0.2535509467124939], + [-2.2882893085479736, -3.69985294342041], + [-4.769985198974609, 5.967132568359375], + [7.331364631652832, -2.540515661239624], + [-2.175156831741333, 2.2273037433624268], + [-4.881539821624756, -7.846827030181885], + [2.8359756469726562, -4.096277236938477], + [5.7151970863342285, 7.28478479385376], + [-2.924968957901001, 2.4254024028778076], + [1.280832290649414, 0.8691833019256592], + [-2.2571961879730225, -3.6448123455047607], + [0.5540162324905396, -1.11082923412323], + [1.0989247560501099, 10.69715404510498], + [-5.293567180633545, 4.326096534729004], + [0.1711072325706482, 11.958415031433105], + [2.9216716289520264, -6.222962379455566], + [-4.64472770690918, 6.549676895141602], + [4.5560994148254395, -2.668365478515625], + [2.6312544345855713, -7.741095542907715], + [-3.986461639404297, 3.612611770629883], + [-2.15555477142334, 2.7237579822540283], + [-1.5142120122909546, 5.528339385986328], + [-4.466875076293945, -3.131681442260742], + [0.14531934261322021, 10.820107460021973], + [2.2929961681365967, 4.810617446899414], + [-7.344344615936279, -0.4883474111557007], + [6.447787761688232, 8.070110321044922], + [0.18079733848571777, 11.913938522338867], + [4.234640598297119, -3.411325693130493], + [1.2759486436843872, -6.72635555267334], + [5.828113079071045, 7.733527660369873], + [-4.460122585296631, -6.685690879821777], + [-4.214567184448242, 5.062029838562012], + [-3.929699182510376, -6.372129440307617], + [8.39392375946045, -2.5536563396453857], + [3.3906495571136475, -5.568714141845703], + [3.210505247116089, -4.013950347900391], + [3.14459490776062, -5.6207275390625], + [-1.2087953090667725, -1.1758079528808594], + [1.9474804401397705, 4.324914932250977], + [7.044199466705322, 8.970285415649414], + [-2.3737552165985107, 2.525627374649048], + [4.58137845993042, 7.276666641235352], + [3.4455924034118652, -6.340333938598633], + [3.6682698726654053, -1.3432434797286987], + [-1.5093605518341064, -0.7482684254646301], + [-4.117272853851318, 3.117002248764038], + [4.097876071929932, -2.379253625869751], + [6.072085857391357, -1.7415963411331177], + [-0.9622241258621216, 0.8707079887390137], + [1.2447152137756348, 4.454380035400391], + [3.5947601795196533, -3.620584487915039], + [0.13180524110794067, 9.68063735961914], + [3.762498378753662, -5.7692437171936035], + [2.9574832916259766, -8.476373672485352], + [8.147997856140137, -2.5117156505584717], + [-5.185351848602295, 5.76312255859375], + [-3.5165536403656006, -5.949355602264404], + [-4.58965539932251, -1.904506802558899], + [2.0007131099700928, 5.762542724609375], + [-1.736136794090271, -3.7016355991363525], + [-2.7896535396575928, -4.104497909545898], + [9.932140350341797, -2.4190821647644043], + [1.14467453956604, -6.5895843505859375], + [9.398361206054688, -2.4110262393951416], + [-4.348206996917725, -6.424300193786621], + [-2.787318706512451, 1.5623607635498047], + [3.514737367630005, 1.6188236474990845], + [0.05345004051923752, 9.560125350952148], + [-2.136735439300537, 2.726893186569214], + [4.835587024688721, 2.156827449798584], + [-3.6302859783172607, -5.55208683013916], + [2.2767226696014404, -6.868936538696289], + [6.149573802947998, 8.288121223449707], + [-2.3216440677642822, -3.4514434337615967], + [-2.960426092147827, -3.836082696914673], + [8.923184394836426, -2.456639051437378], + [-5.244144916534424, -2.5355849266052246], + [-4.536764144897461, -0.9658447504043579], + [1.9472534656524658, 0.6648200154304504], + [0.12193893641233444, 11.860517501831055], + [-5.3008623123168945, -1.1353918313980103], + [-2.8249847888946533, 5.245903968811035], + [3.2828962802886963, -6.674403667449951], + [2.7299444675445557, 6.586423873901367], + [-2.619885206222534, 2.122690439224243], + [-5.048175811767578, -1.5203192234039307], + [8.020359992980957, -2.24188494682312], + [-1.3989704847335815, 0.9102543592453003], + [3.5155930519104004, 5.078662872314453], + [1.968116044998169, 4.840311050415039], + [0.6059553027153015, -1.0821086168289185], + [-1.651737093925476, 2.0752151012420654], + [-4.273684024810791, -4.943915367126465], + [-4.241669654846191, -1.9395164251327515], + [-7.119417667388916, 1.6513917446136475], + [2.873836040496826, -4.1088385581970215], + [3.3332154750823975, -8.485886573791504], + [-3.8758819103240967, -3.498220920562744], + [3.919572114944458, 6.129197120666504], + [-6.269810199737549, 5.100808143615723], + [-1.2191760540008545, -0.4543285369873047], + [6.332936763763428, -1.401328444480896], + [-3.4138481616973877, 6.35482931137085], + [0.00432538241147995, 13.478132247924805], + [8.043366432189941, -2.0407474040985107], + [4.069469928741455, 1.7631083726882935], + [8.648545265197754, -2.4202067852020264], + [2.672818660736084, -5.202334403991699], + [-2.9745707511901855, -5.118273735046387], + [-2.2054011821746826, -1.9934011697769165], + [3.2839138507843018, -4.489191055297852], + [-1.897807240486145, 1.7736616134643555], + [3.4648630619049072, -6.489978313446045], + [2.8540256023406982, 6.443702697753906], + [2.7407939434051514, -5.736050128936768], + [-2.547889471054077, 1.7368412017822266], + [0.20188844203948975, 9.278149604797363], + [8.521767616271973, -2.281423568725586], + [2.1007299423217773, 5.208554267883301], + [-2.8983957767486572, -3.7465240955352783], + [1.763110876083374, 5.721560478210449], + [0.07424243539571762, 0.7297421097755432], + [4.022830486297607, -3.8257224559783936], + [-0.03837335854768753, 8.976914405822754], + [-2.186635732650757, 2.4348607063293457], + [0.05451255291700363, 12.665660858154297], + [-2.560648202896118, 2.024163246154785], + [3.0063087940216064, -4.122163772583008], + [-3.1935465335845947, -2.3902204036712646], + [-5.041635990142822, 7.179635524749756], + [1.8667165040969849, -6.186335563659668], + [-2.0910658836364746, 2.043196201324463], + [2.9501144886016846, -4.136178970336914], + [0.8376266360282898, 5.905776500701904], + [-2.5250067710876465, 1.8585803508758545], + [-1.291131615638733, -0.45503944158554077], + [-4.605915069580078, 0.009767290204763412], + [-5.053365707397461, -8.107906341552734], + [5.025492191314697, -3.927227735519409], + [2.0021238327026367, 5.590747833251953], + [1.5148327350616455, 1.2965542078018188], + [-4.987549304962158, -3.1232197284698486], + [2.1655282974243164, 4.1868815422058105], + [8.013443946838379, -2.121840715408325], + [-0.2985464930534363, -1.8138409852981567], + [1.340714454650879, -0.023619133979082108], + [6.9475789070129395, 8.47779655456543], + [3.0575428009033203, -4.31607723236084], + [8.78289794921875, -2.2813875675201416], + [1.7204190492630005, 3.464606523513794], + [0.12400149554014206, 9.58089828491211], + [-4.209270000457764, 6.1864542961120605], + [4.701249122619629, -0.49136635661125183], + [-0.9516451954841614, 5.593092918395996], + [-0.04132253676652908, 9.54547119140625], + [3.7609541416168213, 5.406509876251221], + [3.601675033569336, -6.233572006225586], + [8.320518493652344, -2.2601542472839355], + [-4.642282962799072, -6.398418426513672], + [1.666414737701416, 5.784124851226807], + [-2.144165277481079, 1.614721417427063], + [-2.8089582920074463, 1.1689202785491943], + [4.666362285614014, 1.281184434890747], + [-6.713298320770264, 8.121116638183594], + [2.9000675678253174, 1.6194666624069214], + [2.4884259700775146, -8.497081756591797], + [-2.3173983097076416, 1.1055831909179688], + [-3.391631603240967, -1.125393033027649], + [0.022574834525585175, 12.838028907775879], + [3.191063165664673, -3.46173095703125], + [1.8089321851730347, 3.2790989875793457], + [0.20487362146377563, 11.859296798706055], + [0.8348672986030579, 0.5035235285758972], + [0.14791518449783325, 9.90273380279541], + [-1.2857496738433838, 0.37608301639556885], + [4.384552955627441, 7.044918537139893], + [-4.4982991218566895, -6.3940229415893555], + [-2.907238721847534, -3.6727068424224854], + [-1.310461163520813, 2.482182025909424], + [-0.47253304719924927, -1.8109610080718994], + [4.2017340660095215, 0.4054991900920868], + [9.81262493133545, -2.3550808429718018], + [3.0167312622070312, -4.254649639129639], + [4.37301778793335, -7.430408477783203], + [-3.192732572555542, -3.8924009799957275], + [5.09035062789917, -1.9999301433563232], + [-1.10024094581604, 0.9465937614440918], + [-4.989387035369873, -4.77018928527832], + [8.21915054321289, -2.334939479827881], + [6.097554683685303, 7.686924934387207], + [-0.0303618386387825, 12.407392501831055], + [3.541156530380249, -8.003747940063477], + [-3.965015172958374, -6.5082106590271], + [2.993513345718384, -9.73043441772461], + [2.642759323120117, -8.377782821655273], + [-5.232881546020508, 5.949051856994629], + [0.9542481303215027, -5.8943281173706055], + [3.4285056591033936, -5.876232624053955], + [-4.50647497177124, -1.3437144756317139], + [-6.980814456939697, 6.913125991821289], + [-4.274023532867432, -5.929696559906006], + [3.0508296489715576, -10.548709869384766], + [2.0462443828582764, 2.280071496963501], + [3.193040609359741, -7.994149208068848], + [-4.795942783355713, -5.60828971862793], + [4.7135329246521, -7.771336078643799], + [-1.3558300733566284, 2.1900782585144043], + [2.051506280899048, -6.35926628112793], + [-2.5096452236175537, 1.6395126581192017], + [-3.146190881729126, -5.408587455749512], + [-2.0011894702911377, -2.422769784927368], + [2.1728575229644775, 4.779505729675293], + [3.2882258892059326, -4.637959003448486], + [6.117903232574463, -0.9067374467849731], + [5.901497840881348, 8.229856491088867], + [-5.1768107414245605, 3.9159767627716064], + [-1.2370356321334839, 1.6456061601638794], + [-1.9792420864105225, 2.4379608631134033], + [-4.200345039367676, -6.498629570007324], + [3.0130465030670166, 0.9776039123535156], + [-2.254398822784424, 1.0952028036117554], + [-2.6125245094299316, 2.087294340133667], + [1.8412353992462158, -2.9877140522003174], + [-4.54957914352417, -3.047130823135376], + [-3.2000577449798584, -3.5736172199249268], + [-3.455263376235962, 3.2728185653686523], + [-2.644355058670044, -0.5003951191902161], + [-3.148310899734497, 4.865078926086426], + [-5.20304536819458, -2.9699246883392334], + [1.1785483360290527, -5.761672019958496], + [-3.529956579208374, 0.47317367792129517], + [5.221566677093506, 6.430844783782959], + [-1.5923967361450195, 1.5467956066131592], + [3.5030665397644043, -7.036591529846191], + [-3.9578981399536133, -1.4366310834884644], + [-5.497140407562256, -3.7949798107147217], + [-2.5304863452911377, -1.9333416223526], + [-0.059720881283283234, 9.108863830566406], + [-3.3310415744781494, -4.837786674499512], + [-4.425971508026123, -5.3161516189575195], + [2.887769937515259, 3.296689748764038], + [1.5382741689682007, 5.244503974914551], + [5.317323207855225, 7.552007675170898], + [-1.8446757793426514, 2.112772226333618], + [0.15771883726119995, 11.669502258300781], + [2.129976511001587, 4.576369285583496], + [4.185309410095215, 7.2270307540893555], + [-4.231367111206055, 3.7602427005767822], + [-1.3797063827514648, -2.876495599746704], + [3.078892469406128, 1.330116629600525], + [6.189256191253662, 7.700463771820068], + [6.453368663787842, -2.681189775466919], + [-4.187242031097412, 4.876513481140137], + [3.1036627292633057, -0.9982492923736572], + [-2.1890809535980225, 2.494699716567993], + [2.1752443313598633, -8.054076194763184], + [0.5131154656410217, -0.9556322693824768], + [5.159693241119385, 6.980324745178223], + [0.09359299391508102, -1.3473538160324097], + [-2.079699754714966, 2.5305755138397217], + [-2.4828274250030518, -3.611816883087158], + [0.029627017676830292, 12.067473411560059], + [-0.028285570442676544, 12.88066577911377], + [-3.9779415130615234, -2.139566421508789], + [2.20082688331604, 5.170411109924316], + [3.4688894748687744, 0.26013755798339844], + [-5.033222198486328, 6.2377448081970215], + [-0.18875795602798462, -0.6411880254745483], + [2.5553343296051025, -8.087146759033203], + [2.4931185245513916, -8.319747924804688], + [-4.227940082550049, -5.128148078918457], + [-0.28318965435028076, -2.102368116378784], + [-2.5879414081573486, 0.260620653629303], + [6.505032062530518, -5.469297885894775], + [4.668603420257568, -3.9595043659210205], + [-2.3424770832061768, -3.873386859893799], + [-0.34609323740005493, 0.5269070863723755], + [3.295966625213623, -4.576752662658691], + [-4.208795547485352, 5.120533466339111], + [6.495993137359619, -4.299675941467285], + [4.920377731323242, 7.149769306182861], + [-2.0810277462005615, 2.2669527530670166], + [-3.2712528705596924, -4.37064790725708], + [3.4445955753326416, -4.073741912841797], + [-3.2939858436584473, -0.779260516166687], + [7.288554668426514, -2.0130724906921387], + [5.211347579956055, -4.514434337615967], + [-5.13778829574585, 5.763901710510254], + [-7.4261298179626465, -1.5720685720443726], + [-6.291528224945068, 1.8295179605484009], + [-5.105623245239258, -3.451345682144165], + [-3.615330457687378, -1.8262330293655396], + [8.708678245544434, -2.513188362121582], + [-0.0813458040356636, -1.4311243295669556], + [3.5231518745422363, 5.381274223327637], + [-1.8667612075805664, 2.1690289974212646], + [3.728710412979126, -0.6715513467788696], + [-4.244848251342773, -2.1299662590026855], + [4.368014812469482, 6.542255401611328], + [9.524943351745605, -2.31166672706604], + [2.7957022190093994, -8.412527084350586], + [-3.777630090713501, 5.474283218383789], + [3.2331762313842773, -8.05087947845459], + [0.16808319091796875, 10.261919021606445], + [-1.6298511028289795, 1.698793888092041], + [0.3125687837600708, 9.527145385742188], + [-4.869411945343018, -3.252636671066284], + [-4.126499652862549, -0.4158700704574585], + [3.7858500480651855, -8.682263374328613], + [-2.0496151447296143, 2.4883768558502197], + [-4.089028835296631, -5.916211128234863], + [-7.117130756378174, 8.357272148132324], + [3.016893148422241, -3.5618813037872314], + [-0.02258283644914627, 9.495837211608887], + [3.248051404953003, 0.7448700070381165], + [2.6948564052581787, -4.213911056518555], + [2.584740400314331, 3.8180038928985596], + [8.391183853149414, -2.2882049083709717], + [3.376420021057129, -4.0401930809021], + [-0.04599864035844803, 12.97816276550293], + [-4.582360744476318, 5.579521179199219], + [1.6086771488189697, 4.9610114097595215], + [-4.20123815536499, -1.213356852531433], + [1.6016497611999512, -7.239307403564453], + [2.5201399326324463, -7.591987609863281], + [0.9803498387336731, 0.6549593210220337], + [5.0263752937316895, -3.1482059955596924], + [2.766645908355713, -8.802644729614258], + [-4.175292015075684, -3.30014705657959], + [-0.6530259251594543, 1.5332283973693848], + [-5.078359127044678, -3.175031900405884], + [-0.9356646537780762, -3.45424222946167], + [3.2600438594818115, -3.658466100692749], + [4.599398136138916, -4.167441368103027], + [3.592745304107666, -6.510869979858398], + [2.158764123916626, -5.841468811035156], + [-5.3578715324401855, -2.4250004291534424], + [-3.4482977390289307, -4.209717750549316], + [-7.026938438415527, 8.177298545837402], + [-4.0571160316467285, 4.177371978759766], + [-0.13937333226203918, -1.7283374071121216], + [8.726832389831543, -2.282153367996216], + [6.12400484085083, -1.565256118774414], + [-6.378233432769775, 7.564326286315918], + [6.037999629974365, 8.164457321166992], + [-3.698465347290039, -4.308281898498535], + [-2.0235350131988525, -0.7353497743606567], + [2.9687843322753906, -7.345197677612305], + [8.84647274017334, -2.4326655864715576], + [-2.7520854473114014, 0.6146820783615112], + [5.012511730194092, 6.458755016326904], + [9.69957447052002, -2.4313976764678955], + [0.19964146614074707, 10.756208419799805], + [1.352777123451233, -7.619537830352783], + [1.9512145519256592, 4.336048126220703], + [-0.15605813264846802, 9.138745307922363], + [-0.4038582146167755, -1.2489506006240845], + [-4.602582931518555, 6.364490509033203], + [3.085944890975952, -2.843479871749878], + [8.113507270812988, -2.3021600246429443], + [2.1937506198883057, -6.648504257202148], + [0.10468786209821701, 9.589088439941406], + [-0.14735502004623413, -1.5580403804779053], + [2.0612897872924805, -7.153923988342285], + [-5.146968364715576, -0.206534743309021], + [1.0724021196365356, -6.830050945281982], + [-2.458082914352417, 2.3718748092651367], + [1.9872620105743408, -7.9427080154418945], + [1.3540387153625488, -6.942712783813477], + [5.044033050537109, -4.4532151222229], + [4.062544345855713, 1.7116607427597046], + [0.18211448192596436, 11.709909439086914], + [5.173625946044922, -1.0710471868515015], + [3.6334307193756104, 1.0249013900756836], + [2.260044813156128, 5.686344146728516], + [2.0757739543914795, -9.246798515319824], + [5.662143230438232, -6.084219932556152], + [3.0706231594085693, -7.111650466918945], + [0.5139114260673523, -3.5981431007385254], + [3.524153470993042, 1.034950613975525], + [8.700610160827637, -2.358386754989624], + [-2.224334955215454, 2.9330992698669434], + [1.4881367683410645, 2.6585819721221924], + [-1.076755404472351, -3.558586835861206], + [0.24162527918815613, -0.10604289174079895], + [4.957746982574463, 7.546271324157715], + [-2.160552501678467, 2.5412464141845703], + [2.0230419635772705, 0.2547023296356201], + [0.05184321850538254, 11.121992111206055], + [4.321555137634277, -4.0032477378845215], + [7.211507797241211, -1.3980518579483032], + [-0.9998820424079895, 1.3947064876556396], + [-5.229244709014893, -0.7110100388526917], + [6.174928188323975, 8.206123352050781], + [-3.8063952922821045, 5.185102462768555], + [8.57278823852539, -2.396826982498169], + [1.1846444606781006, -4.478664398193359], + [-2.5902740955352783, 1.7741527557373047], + [-2.9823968410491943, -3.818441152572632], + [0.14055860042572021, 10.279050827026367], + [-3.8168623447418213, 5.259375095367432], + [-4.665304660797119, 3.7808587551116943], + [2.8929083347320557, -6.532556533813477], + [-3.2111785411834717, -4.779864311218262], + [1.8108947277069092, 2.612628221511841], + [4.219400405883789, -3.603203535079956], + [9.360472679138184, -2.477454900741577], + [2.4893887042999268, -9.000020980834961], + [0.20587879419326782, 9.245009422302246], + [-4.179454803466797, -2.7323453426361084], + [0.03722762316465378, 12.3335599899292], + [-1.230805516242981, -1.6040897369384766], + [6.41160249710083, 8.949352264404297], + [3.092754602432251, -4.363969802856445], + [-5.245136737823486, 8.545356750488281], + [1.3360998630523682, -6.617605209350586], + [-4.346134185791016, 4.789954662322998], + [-5.6017279624938965, -1.0931395292282104], + [-2.0606930255889893, 2.4511382579803467], + [-4.624074935913086, -3.0392963886260986], + [-1.7489726543426514, -1.1059290170669556], + [-6.262949466705322, -1.762080430984497], + [2.03603196144104, -7.993729591369629], + [-2.2177343368530273, -4.9488654136657715], + [6.287670612335205, -2.308302640914917], + [-5.30984354019165, 2.791560411453247], + [-1.9091267585754395, 3.01285982131958], + [-4.358242034912109, 5.934443950653076], + [-2.3710639476776123, 1.356887698173523], + [3.361086368560791, -4.8002190589904785], + [-3.9379489421844482, -5.428853988647461], + [2.592721939086914, -3.2148678302764893], + [-2.437119722366333, -3.1950252056121826], + [-2.133737564086914, 2.2180123329162598], + [2.4047422409057617, -2.2234504222869873], + [3.1534597873687744, -4.421807289123535], + [5.436967372894287, -5.105779647827148], + [-2.2690300941467285, 2.363553524017334], + [-2.8188164234161377, -4.90986967086792], + [-5.034560203552246, 2.6565542221069336], + [7.9729743003845215, -2.120063543319702], + [6.997265815734863, -1.658922553062439], + [-2.09769606590271, -5.057032585144043], + [-3.885699510574341, 3.8440492153167725], + [2.9338936805725098, -4.06121826171875], + [-2.5034749507904053, 2.081714153289795], + [3.247870445251465, 6.543642044067383], + [-4.786013126373291, 4.815056800842285], + [-5.342414379119873, 6.417283535003662], + [2.350245714187622, 5.177158355712891], + [-4.096948623657227, -2.5281238555908203], + [-4.935520648956299, -1.0356743335723877], + [-2.5742597579956055, 1.8360188007354736], + [1.2424699068069458, -7.1038103103637695], + [2.206294059753418, -8.633153915405273], + [-1.4114078283309937, 2.0725324153900146], + [7.523784637451172, -2.0969998836517334], + [3.7553811073303223, -6.315033912658691], + [-3.159320592880249, 3.4746193885803223], + [-4.5581769943237305, 3.808300733566284], + [3.014655351638794, -4.322831153869629], + [2.01015567779541, 5.524421691894531], + [4.312824249267578, -3.8442163467407227], + [8.334330558776855, -2.3608572483062744], + [-2.656278371810913, -4.09437370300293], + [3.8383841514587402, 5.223985195159912], + [-0.8772321939468384, 1.5822187662124634], + [-2.167433023452759, 2.469005584716797], + [-4.755431652069092, -6.755476951599121], + [-2.893427610397339, 2.945357084274292], + [-6.598148345947266, 6.518630504608154], + [-7.137025833129883, -0.5694544911384583], + [2.3585240840911865, 4.546151161193848], + [-7.247716903686523, -0.3778998851776123], + [-0.14574971795082092, -1.5195997953414917], + [2.3420448303222656, 5.285229206085205], + [0.20956474542617798, 11.210304260253906], + [10.21963882446289, -2.4603869915008545], + [2.499376058578491, -8.936922073364258], + [-2.35957670211792, 1.9942501783370972], + [4.9874982833862305, 7.853761196136475], + [0.14734989404678345, 9.774005889892578], + [3.210859537124634, -3.8950634002685547], + [7.041226863861084, -1.6474084854125977], + [-4.678752899169922, -5.859893321990967], + [-4.987121105194092, 4.923334121704102], + [4.383467674255371, -3.3522751331329346], + [-0.8165642619132996, 1.561985731124878], + [5.090907573699951, -4.238708972930908], + [-4.76693868637085, -6.584985733032227], + [5.090546131134033, 6.491334915161133], + [0.19864511489868164, 10.450916290283203], + [8.346942901611328, -2.180853843688965], + [5.553646564483643, 7.6755499839782715], + [-1.2020907402038574, -3.1627235412597656], + [-6.0442280769348145, -0.30035048723220825], + [-4.348657131195068, -6.217872619628906], + [2.1350324153900146, 5.443490028381348], + [-0.0619170144200325, 12.920815467834473], + [5.791082382202148, -1.3094266653060913], + [-2.038094997406006, -0.7640529274940491], + [0.23436325788497925, 10.992940902709961], + [-2.05364990234375, 2.508002996444702], + [3.3598439693450928, -5.68093204498291], + [-0.9465320706367493, 0.8741143345832825], + [-2.4107308387756348, 1.1037623882293701], + [2.9888973236083984, 0.15840454399585724], + [0.09465520828962326, 12.639385223388672], + [3.269519805908203, -3.6909260749816895], + [2.721001386642456, -7.9035210609436035], + [2.853543519973755, -1.498022437095642], + [2.2000339031219482, -9.048063278198242], + [-6.4042887687683105, 7.933419227600098], + [6.8439812660217285, 8.287891387939453], + [3.6172688007354736, -5.521617412567139], + [9.568533897399902, -2.475454092025757], + [0.12024705857038498, 10.225343704223633], + [-2.0746796131134033, -0.06720525026321411], + [-1.1637961864471436, 1.565413236618042], + [-2.2142536640167236, 2.1852614879608154], + [-2.1751298904418945, 2.6185052394866943], + [2.397840738296509, 4.003015995025635], + [2.950005292892456, -9.882414817810059], + [-4.186767578125, -6.154071807861328], + [6.164647579193115, -4.36952018737793], + [-2.485840320587158, 1.6972213983535767], + [-5.243591785430908, -3.589775323867798], + [-2.531198501586914, 1.884358525276184], + [-0.02154798060655594, 13.662071228027344], + [3.1436851024627686, -9.154370307922363], + [0.48980867862701416, -3.4310922622680664], + [0.11591433733701706, 9.752461433410645], + [1.3651163578033447, -6.446451187133789], + [-0.6778057813644409, -1.3896430730819702], + [-1.8577741384506226, -3.6420798301696777], + [-0.041076548397541046, 9.858400344848633], + [0.41632360219955444, -0.09872888028621674], + [-7.089969635009766, 8.355542182922363], + [3.059960126876831, -4.204352855682373], + [-4.190374851226807, -0.23354345560073853], + [0.013693057000637054, -1.6375011205673218], + [2.517595052719116, -8.587898254394531], + [3.005361795425415, -4.1561174392700195], + [0.9901499152183533, -0.47541341185569763], + [-2.266282320022583, -1.4855611324310303], + [3.363016366958618, -3.6144165992736816], + [2.6068575382232666, -9.614463806152344], + [0.13731330633163452, 11.823640823364258], + [0.7963442802429199, -6.1428656578063965], + [-1.1775084733963013, 1.7075337171554565], + [11.33571720123291, -2.547213315963745], + [0.8212286829948425, 1.1319648027420044], + [-5.705202579498291, 6.529956817626953], + [-6.13691520690918, -1.7847849130630493], + [2.5881552696228027, 4.916227340698242], + [0.25932615995407104, 11.126635551452637], + [-2.1041157245635986, 2.311007022857666], + [1.6965066194534302, -5.600367546081543], + [3.9957854747772217, 1.7212547063827515], + [2.6298727989196777, -5.8505144119262695], + [-2.311887741088867, 2.410918951034546], + [2.9606387615203857, -4.194738388061523], + [6.320405960083008, -4.634908676147461], + [4.1604905128479, -4.380003929138184], + [-0.2674676179885864, -1.7735081911087036], + [-4.061851978302002, -6.2892866134643555], + [-5.151721477508545, 4.774129867553711], + [-2.4702646732330322, 0.3401910662651062], + [-0.41222450137138367, -1.734108328819275], + [-2.638709306716919, -5.150424003601074], + [-2.695735454559326, 0.7537869215011597], + [-0.9320802688598633, -1.8178598880767822], + [-5.366435527801514, 5.105141639709473], + [-1.8569263219833374, 2.2117221355438232], + [7.274386882781982, 8.668001174926758], + [6.664028167724609, 8.107809066772461], + [-0.922806978225708, 0.3011420965194702], + [-3.4194023609161377, -4.83494758605957], + [3.2274582386016846, -5.692950248718262], + [2.873002529144287, -4.090748310089111], + [-2.287778615951538, 1.6834734678268433], + [0.07198052853345871, 11.3866548538208], + [-4.209713459014893, -6.223252773284912], + [-5.0236968994140625, 5.202413558959961], + [5.057380676269531, -0.9411966800689697], + [5.151296138763428, -0.5439203381538391], + [0.18160408735275269, 12.101959228515625], + [-3.8889973163604736, 3.363178014755249], + [3.084354877471924, -3.889052152633667], + [-2.1047067642211914, 1.5847111940383911], + [0.202379047870636, 10.661561965942383], + [7.667844772338867, -2.0673296451568604], + [3.312307834625244, 6.091428756713867], + [-6.071095943450928, 5.725584983825684], + [0.13055133819580078, 11.766087532043457], + [0.13165324926376343, 9.503623962402344], + [-5.334998607635498, -7.7280707359313965], + [9.855839729309082, -2.4261534214019775], + [2.9731500148773193, -2.4664597511291504], + [-5.345670223236084, -1.5756120681762695], + [4.812103748321533, -3.4796290397644043], + [9.069320678710938, -2.2596518993377686], + [0.19336992502212524, 10.314180374145508], + [-1.8205243349075317, 0.625436544418335], + [9.574732780456543, -2.402801990509033], + [-4.832295894622803, 3.469744920730591], + [0.12541866302490234, 10.036895751953125], + [-3.573411226272583, 5.1839470863342285], + [-1.9550888538360596, 2.543633222579956], + [2.529731035232544, -8.451711654663086], + [-0.835067629814148, 5.535094261169434], + [2.180103302001953, 3.9915883541107178], + [2.2840628623962402, -2.384108781814575], + [2.0564656257629395, -7.7721638679504395], + [1.3045417070388794, 5.315412998199463], + [5.123559474945068, 1.3488359451293945], + [-6.547512531280518, -0.49336832761764526], + [-6.921609401702881, 8.035959243774414], + [-4.815680503845215, 5.708071708679199], + [-1.817431092262268, 1.1221225261688232], + [-5.8946213722229, 1.9485769271850586], + [-2.683950662612915, 6.976773262023926], + [2.8672213554382324, 6.076929092407227], + [-5.041416168212891, -1.75906240940094], + [8.307372093200684, -2.249305009841919], + [3.1911609172821045, -4.238123893737793], + [-2.740201234817505, -5.54408597946167], + [-4.426158428192139, -2.874847650527954], + [-6.2081732749938965, 0.1659454107284546], + [-2.1270182132720947, -4.447566032409668], + [-4.47027587890625, -7.286660194396973], + [3.6449856758117676, -6.607372283935547], + [-2.3667192459106445, -3.0975189208984375], + [3.661590337753296, 6.479990005493164], + [7.800782680511475, 9.370753288269043], + [2.072855234146118, -1.5140122175216675], + [3.1840736865997314, -7.631591796875], + [-4.657959461212158, -4.625362396240234], + [8.07218074798584, -2.084486722946167], + [3.8467161655426025, -3.521804094314575], + [-4.406710147857666, 4.276615142822266], + [-5.328138828277588, -2.737157106399536], + [1.5725806951522827, 5.525557518005371], + [-5.142320156097412, -3.1320133209228516], + [2.504287004470825, -7.367739200592041], + [3.1061313152313232, -6.787210464477539], + [3.190420389175415, -4.6489105224609375], + [2.645314931869507, -3.6291582584381104], + [9.862038612365723, -2.5433671474456787], + [-2.137969732284546, 2.5223300457000732], + [1.9322144985198975, -7.338151454925537], + [-0.06268728524446487, 13.244588851928711], + [9.973881721496582, -2.480093002319336], + [2.2595605850219727, 0.33927854895591736], + [7.01508903503418, -1.6302807331085205], + [7.143595218658447, -1.7800345420837402], + [5.752409934997559, -3.111211061477661], + [-0.050462789833545685, 14.011391639709473], + [1.8786016702651978, -6.887904167175293], + [2.6059458255767822, -9.736536026000977], + [6.4201884269714355, 8.138174057006836], + [6.950728893280029, 8.380062103271484], + [-3.4970314502716064, -1.5518662929534912], + [2.799201250076294, -3.962592840194702], + [0.9434297680854797, 7.126744747161865], + [4.457671642303467, -7.43236780166626], + [1.7658684253692627, -7.416366100311279], + [-0.1735188066959381, -1.5765565633773804], + [2.286790132522583, -7.062150955200195], + [3.1949150562286377, -7.710715293884277], + [-4.604289531707764, -7.272114276885986], + [0.0403549000620842, 10.695594787597656], + [3.3208742141723633, -5.754205703735352], + [0.03508424013853073, -1.3406413793563843], + [-6.934019565582275, 8.066703796386719], + [-3.845384120941162, 5.75438117980957], + [2.511803388595581, -5.378570556640625], + [-3.729574203491211, 4.1249470710754395], + [-5.180215358734131, 5.805452346801758], + [6.070318698883057, 7.465573310852051], + [-1.5496487617492676, 0.29820480942726135], + [6.248939037322998, -1.2570065259933472], + [-2.04219651222229, 2.304525852203369], + [-5.463071346282959, 3.759394407272339], + [-6.129898548126221, 0.1586143970489502], + [-3.6268579959869385, -5.951274871826172], + [3.8149664402008057, -3.548739194869995], + [6.940457820892334, -1.7808552980422974], + [-2.7212908267974854, 1.2512049674987793], + [-0.6247284412384033, 3.805232286453247], + [-2.757051944732666, -2.9421417713165283], + [-2.400455951690674, 1.7347214221954346], + [2.6907081604003906, -8.447087287902832], + [4.210860729217529, -1.1409509181976318], + [6.624687194824219, -1.6366381645202637], + [4.9508185386657715, -3.3443591594696045], + [4.551454544067383, 6.665948867797852], + [-4.49971342086792, -6.195952415466309], + [4.457882404327393, -3.986284017562866], + [-2.363203525543213, 5.833637237548828], + [-2.155585527420044, 1.9874755144119263], + [-4.513850688934326, -1.8256062269210815], + [5.45668888092041, -2.0715582370758057], + [8.778864860534668, -2.292088031768799], + [6.547891139984131, -1.533697247505188], + [4.084874629974365, -4.61088752746582], + [3.9860856533050537, -3.6544039249420166], + [-7.025431156158447, 1.8838226795196533], + [2.8608455657958984, -3.38303542137146], + [-4.767472743988037, -4.583364009857178], + [3.082623243331909, -6.755210876464844], + [4.496987819671631, -8.331217765808105], + [-2.2853450775146484, 2.3929178714752197], + [4.232043743133545, 1.7191756963729858], + [-5.386987209320068, -3.191981077194214], + [-3.1173558235168457, 7.3108811378479], + [-3.8744828701019287, -5.899090766906738], + [10.059029579162598, -2.4997289180755615], + [-1.992663860321045, 2.465362071990967], + [-3.54917311668396, 2.762296676635742], + [2.154167890548706, 5.703464031219482], + [6.502859592437744, 7.911371231079102], + [0.745488166809082, -0.8914542198181152], + [1.055086374282837, -0.2058410942554474], + [-7.6662068367004395, -1.2047643661499023], + [5.942845821380615, 7.345613956451416], + [7.589554309844971, -1.7898415327072144], + [-4.493924617767334, -6.353698253631592], + [-5.583767414093018, 6.2642974853515625], + [8.533793449401855, -2.2056355476379395], + [6.744526386260986, -1.7868618965148926], + [1.7779556512832642, 0.8600237965583801], + [2.6400983333587646, -3.495497703552246], + [3.35597825050354, 5.059854030609131], + [2.4795000553131104, -7.003286838531494], + [-2.5570437908172607, -3.62018084526062], + [4.387140274047852, -3.5927202701568604], + [3.644238233566284, -3.4630367755889893], + [8.832671165466309, -2.341271162033081], + [-1.8584967851638794, 2.3195128440856934], + [3.193718671798706, -4.055912494659424], + [-4.563282489776611, -7.176109790802002], + [0.9755343794822693, -0.6813689470291138], + [1.2468996047973633, -6.929304122924805], + [6.949026584625244, -1.470556378364563], + [3.037485122680664, -4.058860778808594], + [-0.8763079643249512, -1.1756832599639893], + [-4.043728351593018, -1.8875833749771118], + [-3.389251947402954, -2.363720417022705], + [-1.5788620710372925, 1.6207401752471924], + [9.251503944396973, -2.295161485671997], + [-4.552847385406494, -6.890281677246094], + [2.2726781368255615, 4.525976657867432], + [-3.568000316619873, -2.1058225631713867], + [8.532750129699707, -2.323673963546753], + [3.175689697265625, -6.439087867736816], + [-5.254156589508057, -0.9133050441741943], + [3.477224588394165, -6.8315229415893555], + [2.0925562381744385, 4.7771501541137695], + [-2.5307705402374268, 1.914771556854248], + [2.930788278579712, -3.9918787479400635], + [-4.687569618225098, -2.683180809020996], + [2.682145118713379, 5.679278373718262], + [0.44282686710357666, -0.9774456024169922], + [3.7282769680023193, -0.4314138889312744], + [2.1607158184051514, -3.434924364089966], + [-5.77544641494751, -2.3937015533447266], + [3.1894853115081787, -5.021724700927734], + [-6.996764659881592, -1.2689239978790283], + [-4.170525074005127, -1.3414653539657593], + [0.15240901708602905, 10.421801567077637], + [-4.598297595977783, -7.6008100509643555], + [5.475002288818359, -2.2702414989471436], + [-4.897801876068115, -1.1833497285842896], + [3.1891043186187744, 7.152481555938721], + [0.7041932940483093, -0.6574291586875916], + [0.27141720056533813, 10.600871086120605], + [4.69824743270874, -4.1069159507751465], + [-2.530393123626709, 1.913878321647644], + [-3.5687737464904785, -2.337923049926758], + [0.5582708716392517, 0.4108220338821411], + [1.9766442775726318, -6.960807800292969], + [2.9723613262176514, -4.1475934982299805], + [-3.1793935298919678, -3.0363478660583496], + [3.4311513900756836, -5.2055463790893555], + [4.490692615509033, 6.730629920959473], + [7.353503704071045, 8.812479019165039], + [0.14989858865737915, 10.051835060119629], + [0.02770727127790451, 13.062689781188965], + [-1.783538579940796, -2.177870035171509], + [2.9379236698150635, -8.713373184204102], + [3.090632200241089, -4.638233184814453], + [-2.4305264949798584, 1.4404553174972534], + [3.6469831466674805, -3.1857707500457764], + [4.798164367675781, 6.420506477355957], + [-3.9838449954986572, -5.969593048095703], + [-3.272897481918335, -3.008986234664917], + [10.946703910827637, -2.4560816287994385], + [-2.181786298751831, 2.4630112648010254], + [2.469940185546875, 5.222815036773682], + [2.4028947353363037, 0.237360417842865], + [3.913408041000366, -3.7009787559509277], + [3.317171812057495, -7.988692283630371], + [2.480893850326538, -6.520049095153809], + [0.3096758723258972, -0.7831621766090393], + [9.801053047180176, -2.4683361053466797], + [-0.0957072451710701, 13.650354385375977], + [9.958216667175293, -2.4061663150787354], + [0.24782782793045044, 11.199605941772461], + [-6.4554362297058105, -0.4597253203392029], + [-2.633803606033325, 1.9871612787246704], + [7.585000991821289, -1.9957607984542847], + [0.8280166983604431, -0.780817985534668], + [-4.71803617477417, -8.119772911071777], + [2.6578238010406494, 4.168286323547363], + [0.07546835392713547, 9.698806762695312], + [-4.483993053436279, 4.971662521362305], + [0.06228046864271164, 12.873501777648926], + [9.092668533325195, -2.4777207374572754], + [3.7815372943878174, -3.6438567638397217], + [-0.4559611976146698, 0.435498982667923], + [-2.1304988861083984, -3.4022083282470703], + [-4.342562198638916, -4.500012397766113], + [2.8765993118286133, -8.475793838500977], + [-2.217616319656372, 2.7272472381591797], + [7.555832386016846, -2.0022192001342773], + [4.050549030303955, 1.6277339458465576], + [-2.6151769161224365, -4.1360626220703125], + [-4.537473201751709, -3.042997121810913], + [-2.151933193206787, 2.4657888412475586], + [4.396433353424072, -3.9982635974884033], + [-3.4189960956573486, -5.845822334289551], + [4.6092963218688965, 5.899084568023682], + [4.377940654754639, 1.802648663520813], + [-2.0567588806152344, 2.323697328567505], + [-4.948514461517334, 3.429664134979248], + [-2.222033739089966, 2.696643114089966], + [-4.578638553619385, -6.584378242492676], + [0.034355275332927704, 11.953388214111328], + [-0.27228742837905884, 8.917932510375977], + [7.76615571975708, -2.404663324356079], + [0.540469229221344, 2.469193935394287], + [1.2667194604873657, -6.448953628540039], + [6.4298810958862305, -5.150155067443848], + [1.1507906913757324, 0.6212761998176575], + [-3.2898807525634766, -3.3196146488189697], + [6.882894992828369, -1.661555528640747], + [3.4102373123168945, -5.1272783279418945], + [4.579036235809326, -3.0728299617767334], + [3.0213563442230225, -2.774033784866333], + [-7.249917984008789, 8.497942924499512], + [6.220988750457764, 7.936190605163574], + [-2.5479681491851807, -2.6394526958465576], + [-1.0697485208511353, -3.831770181655884], + [8.58310604095459, -2.493846893310547], + [1.6377567052841187, -0.12346287071704865], + [11.120808601379395, -2.428971529006958], + [5.310177803039551, -5.649755477905273], + [-3.0679807662963867, 5.6992340087890625], + [1.1169551610946655, 0.4455719292163849], + [1.8116133213043213, -8.033347129821777], + [5.910877704620361, 7.893280982971191], + [-1.921700358390808, 1.2636741399765015], + [-2.408825159072876, -2.8060927391052246], + [3.3335139751434326, -4.69943904876709], + [8.214914321899414, -2.244908094406128], + [0.15246987342834473, 10.471240997314453], + [-0.8139819502830505, 1.0064778327941895], + [2.9211108684539795, -3.8899476528167725], + [2.608865976333618, -7.906188011169434], + [2.6969597339630127, 1.076817274093628], + [2.712096929550171, -9.356622695922852], + [2.3788740634918213, 6.326891899108887], + [-0.019601650536060333, 12.387666702270508], + [-2.431717872619629, 2.145195484161377], + [4.4936747550964355, -9.27444076538086], + [-4.045449733734131, -1.5917624235153198], + [-1.9946602582931519, 2.474226713180542], + [3.2618038654327393, -4.424476146697998], + [-3.9150614738464355, -6.264930248260498], + [1.8648731708526611, 3.069782018661499], + [-5.916762828826904, -0.5210738182067871], + [4.426604270935059, 1.57857346534729], + [6.044216156005859, 7.5738935470581055], + [0.6090869903564453, -0.8513122797012329], + [8.494200706481934, -2.380587339401245], + [-0.25443410873413086, 9.907715797424316], + [0.8480392098426819, -0.5307198166847229], + [-5.106092929840088, -5.385769844055176], + [3.146125078201294, 0.9812675714492798], + [2.6228926181793213, -8.851991653442383], + [3.954280138015747, -3.5744006633758545], + [4.550438404083252, 6.603969573974609], + [9.987456321716309, -2.3908777236938477], + [-4.159174919128418, -6.3843841552734375], + [0.0843319222331047, 12.242620468139648], + [6.917912483215332, 8.54071044921875], + [0.5460993051528931, -0.9998070001602173], + [2.617993116378784, -7.279341697692871], + [-2.105541706085205, 2.1379737854003906], + [2.529179334640503, -8.785091400146484], + [-0.059272535145282745, 10.153146743774414], + [-5.870523929595947, 6.59608268737793], + [-0.019334085285663605, 12.337640762329102], + [5.147202968597412, -5.478115081787109], + [-2.413203716278076, -2.940303325653076], + [-4.4507060050964355, -5.9890289306640625], + [2.067854642868042, 3.8745386600494385], + [-5.275173664093018, 4.18082332611084], + [8.155768394470215, -2.646799325942993], + [3.053877353668213, -8.740291595458984], + [2.8398475646972656, -3.738799810409546], + [6.7201008796691895, 8.129469871520996], + [3.450448989868164, -2.6015772819519043], + [0.1824517846107483, 10.41305923461914], + [5.79413366317749, -5.169044494628906], + [-3.36155366897583, -3.7141788005828857], + [-5.163911819458008, 5.837380409240723], + [4.089707374572754, 1.6505701541900635], + [-3.140367269515991, 1.603516936302185], + [0.05212026089429855, 9.722147941589355], + [-3.4036002159118652, 3.448774576187134], + [-3.7898476123809814, 5.178921699523926], + [2.6581900119781494, -3.5440845489501953], + [-3.7673394680023193, -5.637912750244141], + [8.691523551940918, -2.531602621078491], + [7.504969120025635, -2.0512750148773193], + [-4.097016334533691, 3.537099838256836], + [-0.7240709662437439, 1.3349249362945557], + [2.8105595111846924, 1.4569402933120728], + [2.6682469844818115, 5.832653999328613], + [4.219343662261963, -2.7339985370635986], + [3.710070848464966, -5.5599212646484375], + [-2.8006491661071777, -0.5148811340332031], + [0.2125583291053772, 11.79946517944336], + [-2.116677761077881, 2.379363536834717], + [1.945464849472046, 4.715911865234375], + [3.195701837539673, -7.150308132171631], + [-4.671604633331299, -2.4523227214813232], + [-2.5767786502838135, 2.130133867263794], + [-2.622602939605713, 1.8783749341964722], + [6.815622329711914, -2.556481122970581], + [1.493281602859497, -7.431004524230957], + [3.3874237537384033, -2.9479334354400635], + [-4.392489910125732, -2.668442964553833], + [7.95916223526001, -2.0384836196899414], + [3.9968369007110596, 1.6644707918167114], + [-0.085849829018116, -1.7020119428634644], + [-4.621914386749268, -3.44167160987854], + [3.049243450164795, -3.6418352127075195], + [-4.857377052307129, -2.0726521015167236], + [-3.2619268894195557, -5.011916637420654], + [2.0966625213623047, 5.6095967292785645], + [-3.7018654346466064, -2.3760454654693604], + [0.05900537222623825, 9.77490520477295], + [3.2927846908569336, -5.552489757537842], + [-3.1164467334747314, -3.470311403274536], + [3.7345879077911377, -8.701295852661133], + [-8.06779956817627, -0.37495148181915283], + [4.4506001472473145, -7.214649200439453], + [-2.951978921890259, -4.068180084228516], + [-0.1204189732670784, 15.421854019165039], + [0.16495221853256226, 0.3355150818824768], + [2.0558888912200928, -8.269447326660156], + [-5.4676947593688965, 7.579319000244141], + [3.702080488204956, 6.449137210845947], + [7.383755683898926, -1.7475435733795166], + [7.4013237953186035, -1.9772611856460571], + [8.652999877929688, -2.4040539264678955], + [2.8241374492645264, -3.666020393371582], + [0.2550439238548279, 11.141658782958984], + [2.058046817779541, 5.875840187072754], + [-7.086272716522217, -1.6947424411773682], + [-4.489695072174072, -1.8026875257492065], + [0.08705710619688034, 9.913013458251953], + [8.220017433166504, -2.339653730392456], + [-2.5976171493530273, 0.36779409646987915], + [-2.167935848236084, 0.5048165917396545], + [-7.05449914932251, -1.0475064516067505], + [0.31942957639694214, -0.9955043792724609], + [3.8223612308502197, -6.037295341491699], + [-4.105780124664307, -5.5381059646606445], + [0.6236764788627625, 11.647979736328125], + [5.240431308746338, 7.236899375915527], + [-5.603424549102783, 4.964326858520508], + [-4.3949360847473145, 4.1278886795043945], + [4.696969509124756, 6.2792649269104], + [8.721636772155762, -2.321789503097534], + [1.2557146549224854, -6.055215835571289], + [2.377454996109009, 3.5844881534576416], + [2.6469178199768066, -3.7844033241271973], + [-1.5617685317993164, 1.4389642477035522], + [-1.2927168607711792, 0.9223052263259888], + [8.31485652923584, -2.280454158782959], + [2.704125165939331, -6.988589286804199], + [6.48174524307251, 7.946240425109863], + [-4.138527870178223, -6.339867115020752], + [-5.682337284088135, -3.663078546524048], + [7.286060810089111, 8.862584114074707], + [3.391597032546997, -9.410840034484863], + [3.7200398445129395, 1.547553300857544], + [2.8600947856903076, 5.231889247894287], + [-1.6303691864013672, 0.6925204992294312], + [-2.677145004272461, -0.8943376541137695], + [-1.5274567604064941, -1.863365650177002], + [2.3907387256622314, -8.228235244750977], + [0.19587647914886475, 10.193828582763672], + [2.500737190246582, -7.938718318939209], + [-4.053687572479248, -5.424471855163574], + [-1.3781845569610596, 1.9441523551940918], + [3.0887701511383057, -4.604912757873535], + [9.1948881149292, -2.407560110092163], + [-2.5223195552825928, 2.222327709197998], + [3.8178963661193848, -5.495039939880371], + [4.6609015464782715, 5.953548431396484], + [0.02794497460126877, 12.232418060302734], + [-4.388430118560791, -6.901511192321777], + [-0.7888049483299255, -0.40103644132614136], + [2.900087594985962, -4.084221363067627], + [-3.134366035461426, -2.679422616958618], + [-2.595278024673462, -2.7855257987976074], + [-1.4090780019760132, -3.1524875164031982], + [8.312142372131348, 9.701988220214844], + [-5.144845962524414, -0.6517695784568787], + [2.9573259353637695, -4.130795001983643], + [-4.0096755027771, 6.187649726867676], + [4.620236873626709, -4.0319342613220215], + [-2.3155250549316406, 1.6841222047805786], + [3.3954782485961914, 0.033329661935567856], + [0.6626504063606262, -2.998915910720825], + [3.917717218399048, -2.357128858566284], + [-1.0422154664993286, -1.9054263830184937], + [-6.849424839019775, 8.57706356048584], + [-3.946340799331665, -6.043253421783447], + [-0.04701180011034012, 13.18185806274414], + [-0.115168996155262, -1.081633448600769], + [-2.55460524559021, 4.206401824951172], + [-2.0464975833892822, 2.405120611190796], + [-5.300186634063721, 5.920777320861816], + [2.7222750186920166, -3.895136833190918], + [1.5786212682724, -7.025720596313477], + [-2.475004196166992, -4.126898288726807], + [1.1936808824539185, -6.506760597229004], + [0.4319022297859192, 11.717352867126465], + [-6.202874660491943, 7.1258344650268555], + [6.294205188751221, 7.99072265625], + [0.1381136178970337, -1.4245036840438843], + [-4.087336540222168, 8.007286071777344], + [2.9014017581939697, -3.9603140354156494], + [0.13436859846115112, 10.789814949035645], + [4.277175426483154, -3.8539884090423584], + [3.1091208457946777, -3.4287819862365723], + [-5.7172369956970215, 4.317460536956787], + [-2.476332664489746, 1.4157084226608276], + [-4.101232051849365, 4.2886786460876465], + [1.5349977016448975, -0.9459836483001709], + [2.6943485736846924, -1.1195849180221558], + [3.170729637145996, -4.510732173919678], + [2.9979517459869385, -4.23008918762207], + [0.1842668652534485, 11.759008407592773], + [5.944833278656006, 7.583286285400391], + [-2.4499056339263916, 1.99001944065094], + [3.932478189468384, 6.30143928527832], + [-5.036334991455078, -7.970266819000244], + [8.196651458740234, -2.1780431270599365], + [-1.0609116554260254, -2.7179043292999268], + [7.960851192474365, -2.1325056552886963], + [3.401827096939087, -4.750417709350586], + [0.26678407192230225, 10.354555130004883], + [3.665158271789551, 1.7880182266235352], + [3.868471384048462, 1.5302702188491821], + [-0.7137526869773865, 0.6202961802482605], + [6.024688243865967, -4.870495796203613], + [-2.131927490234375, 2.435096025466919], + [0.8369068503379822, -0.8463399410247803], + [1.7653276920318604, 2.943225145339966], + [6.963521480560303, -1.551283836364746], + [-1.3472824096679688, -0.14663195610046387], + [3.016470193862915, -4.2384796142578125], + [-6.271367073059082, 7.849536418914795], + [0.15748387575149536, 11.741252899169922], + [2.156669855117798, 4.4603447914123535], + [-4.788636207580566, -3.2705323696136475], + [8.317888259887695, -2.286452531814575], + [-2.437272071838379, 1.8061587810516357], + [-7.714188575744629, -0.6654924154281616], + [1.7488973140716553, 5.158026695251465], + [6.957491397857666, 8.577816009521484], + [1.1688587665557861, -4.904027938842773], + [0.40367141366004944, -1.3642693758010864], + [-0.5004838109016418, -1.9468474388122559], + [-1.9695111513137817, 1.912575125694275], + [9.011686325073242, -2.2499520778656006], + [2.5321462154388428, 6.078306198120117], + [2.2717862129211426, -6.421274185180664], + [6.529730796813965, 8.31330680847168], + [3.44329833984375, -6.379805564880371], + [-1.9240580797195435, 6.268253326416016], + [-2.724355459213257, 2.180172920227051], + [-5.54910135269165, -3.5027687549591064], + [-6.66515588760376, 7.699550628662109], + [8.6572265625, -2.390442132949829], + [11.029549598693848, -2.5010571479797363], + [3.691288948059082, -4.370538711547852], + [-2.25848126411438, 2.4886422157287598], + [-7.766421794891357, 0.01604568585753441], + [3.220520257949829, -5.791220188140869], + [1.3778103590011597, -6.832536697387695], + [-4.3072381019592285, -5.716846466064453], + [-0.03523380309343338, 9.682186126708984], + [2.210312604904175, 5.323670864105225], + [-0.9668017029762268, -0.8245622515678406], + [-2.4787328243255615, -3.93557071685791], + [9.663800239562988, -2.4350390434265137], + [-4.204830169677734, -6.625101089477539], + [3.1085498332977295, -8.288957595825195], + [-4.699923038482666, -6.225493431091309], + [7.4068474769592285, -2.678544759750366], + [-7.143517971038818, 7.875255107879639], + [-0.0004355385899543762, 9.362222671508789], + [2.8374457359313965, -6.473409652709961], + [3.2203571796417236, -4.760443210601807], + [-1.8788400888442993, 2.453338623046875], + [0.17212456464767456, 10.119199752807617], + [3.512526750564575, -3.056723117828369], + [0.053221963346004486, -1.6022143363952637], + [-5.373928070068359, 7.406642913818359], + [-2.059800386428833, 2.6883368492126465], + [0.4426620602607727, 10.278833389282227], + [-0.4906582832336426, 0.9578934907913208], + [-0.3329741954803467, -1.6910297870635986], + [-1.7072259187698364, -3.0555946826934814], + [5.063955307006836, -4.000191688537598], + [3.610877752304077, -3.353398323059082], + [-5.827925205230713, 6.639604568481445], + [6.903022766113281, -1.9211647510528564], + [0.18547111749649048, 10.343323707580566], + [0.22263306379318237, 0.16370978951454163], + [-2.320509672164917, 0.9502809047698975], + [3.148765802383423, -4.003375053405762], + [0.08629416674375534, 12.248466491699219], + [2.9063541889190674, -4.131040573120117], + [0.18540704250335693, 9.88003921508789], + [-4.5927510261535645, -6.455898284912109], + [8.437686920166016, -2.30442214012146], + [-5.23992395401001, 6.101667404174805], + [0.1335565447807312, 10.52165412902832], + [3.3980441093444824, -6.719208717346191], + [-6.952661991119385, 8.152643203735352], + [-2.9979453086853027, -2.3459808826446533], + [-2.33854603767395, 2.2517497539520264], + [9.207289695739746, -2.3159143924713135], + [3.544661283493042, -6.998127460479736], + [-4.235479831695557, -2.9097673892974854], + [-1.3270039558410645, 3.392137050628662], + [6.537586212158203, -1.1048438549041748], + [3.8532023429870605, -4.934107303619385], + [-2.126866340637207, -3.1430201530456543], + [5.7516679763793945, 7.227168083190918], + [4.652920722961426, -4.833465576171875], + [9.676091194152832, -2.487963914871216], + [-2.233905076980591, 2.578610897064209], + [0.0445173904299736, 12.1677885055542], + [-2.6890766620635986, -3.5346484184265137], + [-2.888036012649536, 1.8977397680282593], + [-0.03770823031663895, 13.011281967163086], + [0.08942609280347824, 12.90306282043457], + [1.937880277633667, 5.597318649291992], + [4.356123447418213, 7.384779453277588], + [4.7403411865234375, 5.996336936950684], + [-4.899637222290039, -7.99822998046875], + [1.7869468927383423, -7.618477821350098], + [6.358364105224609, -5.199461936950684], + [3.173250913619995, -8.388370513916016], + [3.2160582542419434, -4.53399133682251], + [-4.288150787353516, -6.679778099060059], + [-6.7268571853637695, 8.098048210144043], + [3.1148548126220703, 4.646849632263184], + [-4.236040115356445, -5.938199996948242], + [3.946821451187134, -7.58513069152832], + [4.130838871002197, 6.004106521606445], + [5.495779037475586, -4.121227264404297], + [-0.01939684897661209, 12.49785041809082], + [-3.5396711826324463, -5.8466339111328125], + [-4.120943069458008, -6.461610794067383], + [2.304857015609741, 2.5889251232147217], + [4.256229877471924, -3.3567886352539062], + [5.741841793060303, -1.3905255794525146], + [6.138600826263428, 7.915865898132324], + [2.6394169330596924, 5.238025665283203], + [2.221681833267212, 5.307097434997559], + [2.9357986450195312, -4.041978359222412], + [9.19670581817627, -2.2583913803100586], + [-7.054922580718994, 8.211006164550781], + [3.462808132171631, -3.6315793991088867], + [10.424895286560059, -2.471813917160034], + [-0.04675573855638504, 9.514669418334961], + [9.869231224060059, -2.3880066871643066], + [-3.9825212955474854, -5.4015092849731445], + [-2.606145143508911, 1.8969985246658325], + [-5.493818759918213, 7.003145217895508], + [-4.360169410705566, 3.9578869342803955], + [0.9957939982414246, 11.969666481018066], + [-6.478161811828613, -1.5640056133270264], + [-4.845983028411865, -1.8336046934127808], + [5.453561305999756, -2.2912886142730713], + [3.0229461193084717, -1.744245171546936], + [4.1379594802856445, 1.6657212972640991], + [-1.5465103387832642, 0.803834855556488], + [0.9763621687889099, -6.892963409423828], + [-3.6857285499572754, -5.8377251625061035], + [-6.063713550567627, -1.8392513990402222], + [-2.870896577835083, -5.3463287353515625], + [0.7863978147506714, -5.983692169189453], + [-2.164290189743042, 1.9482752084732056], + [-4.362112522125244, 1.8865798711776733], + [0.6691028475761414, 11.116802215576172], + [6.033207893371582, 7.496203899383545], + [-4.442105770111084, -2.2025773525238037], + [-5.8579912185668945, 8.684135437011719], + [-4.1667866706848145, -5.538008689880371], + [-3.0918426513671875, 0.2948378920555115], + [2.244447946548462, -9.277006149291992], + [3.951024293899536, -3.677180767059326], + [3.414386510848999, -7.899626731872559], + [2.9061920642852783, -4.00877046585083], + [0.1160617396235466, 11.890727996826172], + [-3.9537487030029297, -3.2561123371124268], + [4.106293201446533, -3.6763360500335693], + [0.1757594347000122, -1.2982391119003296], + [-3.1428396701812744, 1.3132694959640503], + [2.865995168685913, 1.4405320882797241], + [0.17857307195663452, 10.305120468139648], + [-4.1887993812561035, 4.09861946105957], + [-6.119920253753662, 6.869518756866455], + [4.849658489227295, -1.0555015802383423], + [2.3707077503204346, 5.694371223449707], + [1.381592869758606, -8.100301742553711], + [3.611842632293701, -3.485323429107666], + [-2.8348348140716553, 1.5482065677642822], + [7.429951190948486, -2.750901222229004], + [2.344874143600464, 3.6051981449127197], + [-2.576448917388916, 1.9800783395767212], + [-0.09486038237810135, 13.796646118164062], + [-2.0868141651153564, 2.467097759246826], + [1.5050451755523682, -6.747226715087891], + [6.151822566986084, 8.377813339233398], + [-4.35618782043457, 5.881877422332764], + [-3.1768531799316406, -2.2021355628967285], + [6.020040035247803, -3.3293418884277344], + [9.051918983459473, -2.304349660873413], + [2.904970169067383, -4.084283828735352], + [8.11071491241455, -2.814532995223999], + [0.12313651293516159, 10.00422191619873], + [-5.453557014465332, 6.860430717468262], + [-4.086235046386719, -2.4518496990203857], + [1.0242632627487183, 5.304859638214111], + [8.40331745147705, -2.3452463150024414], + [-2.7825262546539307, 1.6608200073242188], + [0.02884571999311447, 11.548559188842773], + [2.569660186767578, 4.369426250457764], + [1.6696157455444336, -7.161661148071289], + [-1.5440073013305664, -3.903435230255127], + [2.3967435359954834, 1.9290412664413452], + [-3.150027275085449, 4.805451393127441], + [2.816230297088623, -6.830083847045898], + [-5.792373180389404, -1.8355480432510376], + [2.1802265644073486, -8.993450164794922], + [-3.428507089614868, -5.619143486022949], + [-5.817302227020264, -2.2993180751800537], + [0.02235531061887741, 12.568984985351562], + [-2.2346842288970947, 2.8462414741516113], + [2.2970387935638428, -6.896795272827148], + [3.097080945968628, -4.438443183898926], + [3.4249870777130127, 1.7263776063919067], + [-3.990548610687256, -1.044668436050415], + [2.974252223968506, -4.117595672607422], + [-3.9600536823272705, 7.4254469871521], + [-2.7160685062408447, -4.906394958496094], + [-2.111774444580078, 2.29531192779541], + [-4.361051082611084, -2.907600164413452], + [4.501613616943359, 6.360309600830078], + [0.0003253743052482605, 13.939653396606445], + [4.67168664932251, 5.993508338928223], + [-5.224207401275635, -1.4179631471633911], + [7.688233852386475, -2.2053279876708984], + [-2.076944589614868, 2.59995174407959], + [5.321423053741455, -7.711874485015869], + [-6.722529411315918, 7.868236541748047], + [-2.3842670917510986, 2.0708060264587402], + [-4.571016788482666, -5.148469924926758], + [-3.8877742290496826, 5.391755104064941], + [6.576065540313721, 7.998666763305664], + [3.306645631790161, -4.336974143981934], + [3.95412278175354, -8.264951705932617], + [-0.1780240535736084, -1.6423344612121582], + [-5.522565841674805, 3.0683372020721436], + [6.308870315551758, 8.288726806640625], + [0.38334983587265015, 10.033117294311523], + [-2.511728525161743, -5.239075183868408], + [-7.229800701141357, -0.2665276527404785], + [3.721853256225586, -6.937755584716797], + [3.209886312484741, -4.282464027404785], + [-6.08804178237915, 7.333118438720703], + [2.224506139755249, -8.424290657043457], + [1.5471038818359375, -0.49159732460975647], + [-3.1257283687591553, -2.5442731380462646], + [-3.92824387550354, 4.54674768447876], + [1.1307603120803833, 3.1302406787872314], + [9.736538887023926, -2.3766872882843018], + [6.69700288772583, -1.8006526231765747], + [3.6439590454101562, -4.692387580871582], + [-2.9164483547210693, -3.6229093074798584], + [3.1693332195281982, 0.836418628692627], + [-1.9297165870666504, -4.671185493469238], + [0.279607355594635, -1.2718256711959839], + [-5.839768409729004, -3.6773650646209717], + [1.5169508457183838, 4.973424911499023], + [-6.512767314910889, 1.7770750522613525], + [-3.8079426288604736, 7.266576290130615], + [4.46696138381958, 2.0118558406829834], + [-4.456928730010986, -7.518153190612793], + [7.3311591148376465, -1.8925774097442627], + [-5.263528347015381, -1.445393681526184], + [3.6168549060821533, 5.85977840423584], + [0.7992652058601379, 0.578637421131134], + [-4.740861892700195, -5.945918560028076], + [-5.540416717529297, 8.277364730834961], + [-4.6922078132629395, -6.787284851074219], + [-4.793463230133057, 7.295189380645752], + [0.7376957535743713, -5.288995265960693], + [6.134336471557617, 8.146047592163086], + [4.444690227508545, 1.1144498586654663], + [-5.310483455657959, 6.047001838684082], + [6.613651752471924, 8.125804901123047], + [2.7718427181243896, -3.965026378631592], + [2.234299898147583, -8.098638534545898], + [-4.374166011810303, -0.8575576543807983], + [8.161849021911621, -2.1075987815856934], + [4.207069396972656, -3.712871551513672], + [8.424886703491211, -2.397881269454956], + [-2.1495678424835205, 2.699296236038208], + [-4.098869323730469, -1.2877848148345947], + [0.3938087224960327, -2.150456666946411], + [-0.597546398639679, 5.278477668762207], + [3.3043487071990967, 0.8586561679840088], + [3.0597546100616455, -2.7904715538024902], + [0.0654548928141594, 11.948429107666016], + [-4.445926666259766, -3.8566625118255615], + [7.5504231452941895, -2.019002676010132], + [5.392054080963135, -7.908802032470703], + [2.608393430709839, -7.334536552429199], + [5.545520305633545, 7.093254089355469], + [-3.6677052974700928, -5.28253173828125], + [-1.389716625213623, 0.869369387626648], + [1.3148671388626099, -4.606863975524902], + [4.158725261688232, -3.670480251312256], + [-6.6155686378479, -0.7188104391098022], + [-0.06462208181619644, 1.815859317779541], + [3.6125235557556152, -3.3099682331085205], + [5.622521877288818, -0.8144648671150208], + [-1.9792485237121582, -2.8265461921691895], + [4.260796546936035, -3.7288479804992676], + [0.23661810159683228, 11.401527404785156], + [-0.06104201823472977, 13.13517951965332], + [8.04108715057373, -2.4085452556610107], + [-4.30398416519165, -5.746764183044434], + [8.048474311828613, -2.8105835914611816], + [1.4873871803283691, -7.0511627197265625], + [1.760878324508667, 3.6408536434173584], + [4.2050347328186035, 6.971419334411621], + [3.1614017486572266, 0.8256183862686157], + [8.555315971374512, -2.4840400218963623], + [6.850234508514404, -4.558261871337891], + [9.03921127319336, -2.5078928470611572], + [1.831108808517456, 0.7745644450187683], + [1.716807246208191, 5.664234638214111], + [-2.0404016971588135, 2.185302495956421], + [3.027944803237915, 5.4232611656188965], + [1.9363844394683838, 0.08858826756477356], + [3.252737283706665, -7.796741008758545], + [1.9135897159576416, 2.7858188152313232], + [-0.04680878669023514, 13.452380180358887], + [2.376861810684204, -8.885183334350586], + [3.6389896869659424, -1.8248203992843628], + [-3.5125467777252197, 4.208269119262695], + [1.751557469367981, 0.018515940755605698], + [8.515679359436035, -2.296931505203247], + [-0.7483912706375122, 1.1836854219436646], + [9.481423377990723, -2.4957287311553955], + [-4.384763240814209, -4.786808013916016], + [-3.7187516689300537, 2.7054059505462646], + [5.07036828994751, 6.367465972900391], + [2.7376883029937744, -3.6476922035217285], + [-4.758915901184082, -7.378703594207764], + [-5.503308296203613, -0.3383690118789673], + [2.7672526836395264, -2.355618715286255], + [-1.6646244525909424, -0.9741760492324829], + [-7.082156658172607, -1.7503210306167603], + [3.7150557041168213, -4.380297660827637], + [-4.730071544647217, 5.246034145355225], + [-2.4345014095306396, 3.2886922359466553], + [-2.638097047805786, 2.2121188640594482], + [4.616366386413574, -1.2711970806121826], + [4.586484909057617, -6.595271587371826], + [-1.946761131286621, 2.4247450828552246], + [1.8450002670288086, 0.9446304440498352], + [4.432238578796387, -8.200377464294434], + [7.983290195465088, -2.074202299118042], + [-2.5905914306640625, 1.9741073846817017], + [2.1514241695404053, 3.5656516551971436], + [4.065587997436523, 6.498478889465332], + [-1.8046560287475586, 1.269234538078308], + [4.5553154945373535, -4.018422603607178], + [-0.7813516855239868, -3.0404140949249268], + [6.535127639770508, 8.108274459838867], + [-4.120464324951172, -6.056586265563965], + [8.340811729431152, -2.2945683002471924], + [2.9994850158691406, -3.069199562072754], + [-3.7962405681610107, -0.6886902451515198], + [-0.3760770559310913, -1.740415096282959], + [-0.06922990828752518, 9.310260772705078], + [2.0658891201019287, -3.2014081478118896], + [7.909080982208252, -2.5519843101501465], + [-2.6615023612976074, -3.9820852279663086], + [-4.304811477661133, -2.688966989517212], + [5.130910396575928, -1.1963430643081665], + [-4.353188514709473, -6.216382026672363], + [0.8759405016899109, -4.779773712158203], + [-5.703137397766113, 6.683322429656982], + [2.832310914993286, -3.9482505321502686], + [-2.9442548751831055, 1.2069674730300903], + [-8.162778854370117, -0.06960809230804443], + [5.657705783843994, -1.434400200843811], + [0.5022243857383728, -1.1571643352508545], + [-2.511075258255005, 1.8752375841140747], + [1.6149487495422363, -6.800510406494141], + [3.2552950382232666, -7.389822006225586], + [3.3590846061706543, -2.976935386657715], + [8.847245216369629, -2.255500316619873], + [-3.550569534301758, -5.6453447341918945], + [8.075380325317383, -2.1591434478759766], + [-0.06401539593935013, 12.808525085449219], + [3.107386827468872, -4.461840629577637], + [5.191279411315918, 7.653737545013428], + [3.213056802749634, -7.24712610244751], + [1.101468801498413, 4.641311168670654], + [-4.073354721069336, -4.554340839385986], + [-6.587256908416748, -0.792190432548523], + [-3.788919687271118, 5.142277240753174], + [-4.992791175842285, 6.027490615844727], + [-2.9013826847076416, 5.978038311004639], + [1.480825424194336, -0.30693215131759644], + [-3.612807512283325, -4.980000972747803], + [-4.540103912353516, -2.3351104259490967], + [-3.5934019088745117, -6.038800239562988], + [0.22712236642837524, 9.876830101013184], + [6.600034236907959, 8.10075569152832], + [3.733944892883301, 6.005536079406738], + [-3.7409017086029053, -2.106733798980713], + [-2.25738263130188, 2.1682348251342773], + [7.484179496765137, -2.8773066997528076], + [3.0832736492156982, -8.675766944885254], + [0.5096617341041565, 10.177154541015625], + [-2.4825191497802734, 0.9798473119735718], + [-0.13896232843399048, 14.287961959838867], + [3.3104264736175537, -4.7929277420043945], + [-5.44045877456665, 6.039091110229492], + [-2.4660632610321045, 1.7837214469909668], + [0.2121637463569641, 0.3277205526828766], + [-4.195149898529053, 4.611008644104004], + [-4.190190315246582, -6.671419620513916], + [2.8599281311035156, 6.287503242492676], + [1.7360444068908691, -6.806232929229736], + [-7.303210735321045, -0.4957479238510132], + [-5.683298587799072, -1.1874639987945557], + [-4.42809534072876, -1.0284395217895508], + [3.917560577392578, -9.585550308227539], + [2.8445394039154053, -3.407733201980591], + [-2.3257815837860107, 1.4819062948226929], + [11.037251472473145, -2.603384017944336], + [-4.956976413726807, -7.56247091293335], + [-6.08906888961792, -1.5447016954421997], + [1.6651065349578857, 2.9596028327941895], + [-3.577368974685669, -4.9167680740356445], + [2.0223782062530518, 5.468090534210205], + [1.9313695430755615, -5.323944091796875], + [-5.11758279800415, -2.187429666519165], + [-2.1349000930786133, 2.687833070755005], + [-5.09168815612793, -1.2167458534240723], + [-3.719801664352417, 0.009200569242238998], + [-2.147977590560913, -3.249638795852661], + [-2.647785186767578, 2.268159866333008], + [-2.936368703842163, 6.872065544128418], + [1.9560918807983398, -6.942132472991943], + [-6.427107810974121, 2.557471752166748], + [-2.300971508026123, 2.3790335655212402], + [-2.998713731765747, 7.3875203132629395], + [8.029034614562988, -2.0709950923919678], + [-5.35028600692749, -1.3953381776809692], + [-2.97265887260437, -3.933847427368164], + [-6.542876720428467, 7.640493392944336], + [2.2025184631347656, 1.6950515508651733], + [3.10886549949646, -8.770326614379883], + [-0.10927445441484451, 1.3281261920928955], + [-2.0939114093780518, 2.5802502632141113], + [-4.307850360870361, 3.9409372806549072], + [6.685567378997803, -1.9455796480178833], + [2.899169683456421, -3.500486135482788], + [1.6250001192092896, -0.1599879115819931], + [-2.973904609680176, 4.904090881347656], + [-4.717133045196533, 4.264630317687988], + [-2.540649890899658, 0.23368334770202637], + [4.13517427444458, 6.218724727630615], + [4.864267826080322, 7.2438554763793945], + [2.4985313415527344, -4.74912691116333], + [-0.05037004500627518, 9.061014175415039], + [3.3345119953155518, -4.100696563720703], + [-3.4464423656463623, 0.8355899453163147], + [0.23168355226516724, 11.074188232421875], + [3.763991594314575, -8.249080657958984], + [4.072400093078613, 6.052225112915039], + [2.715214252471924, -3.826390504837036], + [8.934179306030273, -2.3554646968841553], + [5.488175868988037, 7.39036750793457], + [2.2064406871795654, -7.437471389770508], + [-6.169787883758545, 5.885339736938477], + [4.607359409332275, 6.503353118896484], + [0.16869693994522095, 11.585660934448242], + [2.4029433727264404, 5.4736833572387695], + [6.3479323387146, 7.780798435211182], + [3.3450443744659424, -4.614768981933594], + [0.03907947987318039, 11.487578392028809], + [-3.292276382446289, 3.6092238426208496], + [4.227266788482666, -3.9520680904388428], + [5.421044826507568, -1.1797127723693848], + [8.888590812683105, -2.545849323272705], + [3.9511501789093018, -7.3266282081604], + [-2.395275115966797, -4.8447465896606445], + [-2.0005548000335693, 2.4047133922576904], + [-4.301325798034668, -5.70112419128418], + [-5.797454833984375, 4.52994441986084], + [0.1996455192565918, 11.135343551635742], + [-1.6231125593185425, 1.658499836921692], + [-6.208955764770508, 0.08476901054382324], + [-4.7071003913879395, 4.506470203399658], + [0.6317218542098999, -0.6208410263061523], + [4.405627250671387, -6.171492099761963], + [1.60365891456604, 6.377518177032471], + [-3.9341790676116943, 3.2150816917419434], + [6.320056438446045, 7.80826473236084], + [2.0344507694244385, 4.724326133728027], + [4.095193862915039, -1.842620849609375], + [-3.3872475624084473, -5.802621841430664], + [7.064412593841553, -5.496430397033691], + [-2.1015708446502686, 2.250642776489258], + [3.272447109222412, -4.021321773529053], + [2.2253048419952393, 2.1325485706329346], + [0.2425099015235901, 11.266477584838867], + [-5.662022113800049, -2.462419271469116], + [3.468585968017578, -6.692432880401611], + [-1.4907077550888062, 3.9468822479248047], + [6.321386814117432, -1.6382676362991333], + [2.9939486980438232, -3.6728532314300537], + [0.11533325165510178, 10.461871147155762], + [2.891953945159912, -8.161340713500977], + [-0.347978413105011, -1.7675822973251343], + [3.7893550395965576, -3.3019158840179443], + [-0.2507851719856262, 5.519914627075195], + [3.382450580596924, -7.361037731170654], + [-2.2686269283294678, 2.274972915649414], + [-2.164513349533081, 2.1033401489257812], + [4.188246250152588, 1.9556289911270142], + [-3.958920478820801, 5.396804332733154], + [6.737854480743408, -1.4058308601379395], + [-1.5305864810943604, 0.2414165735244751], + [1.875687599182129, 4.997464179992676], + [3.2889721393585205, -4.724092483520508], + [3.1313235759735107, -3.9906954765319824], + [-2.323876142501831, 1.1562275886535645], + [0.04087083786725998, 9.525715827941895], + [-2.07847261428833, 2.5362789630889893], + [2.268096685409546, 5.457790374755859], + [1.861112117767334, 0.8976262807846069], + [2.7467339038848877, -7.8783278465271], + [-1.315401554107666, 1.7247405052185059], + [-2.252924919128418, 2.242307186126709], + [3.3487894535064697, -4.170005798339844], + [8.12781810760498, -2.208775043487549], + [-6.53314733505249, 7.480928421020508], + [-2.532461404800415, 1.8319010734558105], + [3.7047932147979736, -3.8131747245788574], + [0.23242568969726562, 10.708117485046387], + [0.950735867023468, -6.441867351531982], + [-2.1061179637908936, 2.5210483074188232], + [7.56291389465332, -3.9596447944641113], + [-1.6118265390396118, -1.7463723421096802], + [2.622810125350952, 0.5438327193260193], + [10.107733726501465, -2.4388515949249268], + [5.194196701049805, -2.1334354877471924], + [-0.19616568088531494, 0.4998898506164551], + [0.09444635361433029, 11.85854721069336], + [2.646332025527954, -3.8216164112091064], + [5.505141735076904, -1.241053581237793], + [7.450061321258545, -1.9442558288574219], + [3.2151591777801514, -6.865737438201904], + [-3.6366989612579346, -4.017092227935791], + [-2.6684823036193848, -0.02327132597565651], + [-4.6235761642456055, 4.250457286834717], + [-3.7502338886260986, -6.160782814025879], + [2.8657162189483643, -10.067033767700195], + [-3.3702876567840576, -1.9400091171264648], + [1.4272444248199463, -4.843667984008789], + [-6.112262725830078, 0.16827142238616943], + [-4.703568935394287, 5.601478576660156], + [0.03570883721113205, 12.312642097473145], + [-6.559036731719971, 7.491633892059326], + [-6.177651882171631, 6.8847551345825195], + [-1.4113476276397705, 0.008024271577596664], + [2.42815899848938, 6.238195896148682], + [-6.280257701873779, 5.626437187194824], + [-1.8758540153503418, 2.3398239612579346], + [3.698207139968872, -3.4996793270111084], + [3.3041939735412598, -3.317279100418091], + [-1.247742772102356, -3.4298555850982666], + [3.4132909774780273, -6.675585746765137], + [-6.85111665725708, 7.953010559082031], + [-2.1544559001922607, 2.112359046936035], + [-2.0446507930755615, 2.6108109951019287], + [5.939419746398926, 7.748960494995117], + [-2.4043784141540527, 1.4995698928833008], + [-2.1892547607421875, 2.425485134124756], + [-0.08023376017808914, -1.750606656074524], + [1.7427010536193848, -0.7974661588668823], + [-0.09436389058828354, -0.9186931848526001], + [2.126910924911499, -7.1680145263671875], + [2.0522258281707764, 0.4885019063949585], + [-6.673965930938721, -0.7400662302970886], + [-2.066469669342041, 2.6698505878448486], + [-3.1938881874084473, 7.399237632751465], + [-1.8209538459777832, -4.428743362426758], + [3.3589742183685303, -2.901242971420288], + [-2.4403421878814697, -4.017297744750977], + [9.392602920532227, -2.3902297019958496], + [8.97780704498291, -2.4085476398468018], + [-6.122860431671143, -0.4000248312950134], + [0.099200539290905, 10.970178604125977], + [7.768710613250732, 9.271376609802246], + [1.7625453472137451, 2.0619215965270996], + [-3.6488888263702393, -1.8708525896072388], + [4.192014694213867, 6.382481575012207], + [7.816540718078613, -2.619462728500366], + [-2.5195729732513428, 1.8178359270095825], + [1.087426781654358, -4.969598770141602], + [8.44698429107666, -2.614398241043091], + [9.40025806427002, -2.427724599838257], + [-0.8604341745376587, -2.456904172897339], + [0.14799898862838745, 9.950275421142578], + [4.457586765289307, -4.126703262329102], + [3.8661303520202637, -1.7745448350906372], + [4.687156677246094, -3.628493309020996], + [7.112499237060547, 8.642375946044922], + [0.2576395869255066, 11.218955993652344], + [-1.206026554107666, -3.250244617462158], + [0.12309610098600388, 11.864419937133789], + [-7.537535190582275, -0.287941575050354], + [3.1647913455963135, -4.323244571685791], + [7.327828884124756, 8.701410293579102], + [-6.064436435699463, 6.91862678527832], + [-2.466423749923706, 1.5286881923675537], + [-4.645243167877197, -6.746789932250977], + [-5.314046382904053, -6.526510238647461], + [-4.525928020477295, 4.8179826736450195], + [3.3292417526245117, -2.4326179027557373], + [4.046374797821045, -3.788672924041748], + [-2.075991153717041, 2.563944101333618], + [4.881898880004883, -1.0336172580718994], + [0.14954650402069092, 10.257019996643066], + [-2.5669169425964355, 1.882766604423523], + [-5.295578956604004, 0.08172380924224854], + [-3.512347459793091, 3.040301561355591], + [2.320650815963745, 4.961169242858887], + [4.1428985595703125, -4.415687561035156], + [8.106627464294434, -2.0726053714752197], + [2.9791100025177, 0.10347205400466919], + [10.457629203796387, -2.5009546279907227], + [3.969609498977661, -0.9012981653213501], + [-0.03514028340578079, 13.521184921264648], + [2.9798996448516846, -4.238283157348633], + [3.2148630619049072, -4.510723114013672], + [-3.963554620742798, -3.2702763080596924], + [3.29726243019104, -4.6825761795043945], + [-0.35689520835876465, -1.8714712858200073], + [-5.8703532218933105, 6.660801410675049], + [2.2261626720428467, 7.050637245178223], + [6.532924652099609, -2.0099213123321533], + [3.3638317584991455, -6.665359020233154], + [0.4000956416130066, 10.784547805786133], + [-5.261011600494385, -3.764305591583252], + [1.7083477973937988, 4.1290154457092285], + [8.805622100830078, -2.4982476234436035], + [-2.086242437362671, 6.20103645324707], + [-0.682465136051178, 1.4016464948654175], + [2.0337777137756348, -8.539283752441406], + [3.2143142223358154, -7.983636856079102], + [-4.300954341888428, -6.176996231079102], + [2.7613723278045654, 3.4588305950164795], + [2.856221914291382, -3.3500149250030518], + [-5.819286823272705, 1.5894566774368286], + [3.0926730632781982, -4.395239353179932], + [3.995999574661255, -7.307464122772217], + [-0.059984512627124786, 13.376533508300781], + [-6.630115985870361, 7.902510166168213], + [3.258669137954712, 0.9685717821121216], + [3.5709891319274902, 1.5043078660964966], + [0.15607506036758423, 10.140814781188965], + [7.766892910003662, -4.783405780792236], + [-2.114211320877075, 0.39650431275367737], + [-4.966901779174805, -2.4870316982269287], + [-1.4237034320831299, 1.939362645149231], + [2.1045117378234863, -5.197327136993408], + [1.4270832538604736, -6.231117248535156], + [1.2985501289367676, -4.331423282623291], + [-2.8766543865203857, -0.9647757411003113], + [-0.554142415523529, 1.0694835186004639], + [1.0613948106765747, -5.4398627281188965], + [0.09819798916578293, 10.788614273071289], + [-1.4377167224884033, -4.493042469024658], + [-0.007963962852954865, 14.484764099121094], + [5.849887371063232, -1.2129913568496704], + [-1.6836682558059692, 2.354243278503418], + [2.134052038192749, 0.1283644735813141], + [-2.4760959148406982, 2.303586006164551], + [4.030117511749268, -7.661799430847168], + [-2.9404375553131104, -2.5276777744293213], + [-4.1308207511901855, -6.099437713623047], + [1.419966459274292, -0.24322018027305603], + [-4.519326210021973, 6.755964756011963], + [-5.196200847625732, -5.5186848640441895], + [2.42798113822937, 4.736379623413086], + [-4.096511363983154, 5.482144355773926], + [1.910701036453247, 4.749677658081055], + [9.30634593963623, -2.3912413120269775], + [3.6127371788024902, -3.2796742916107178], + [-4.535378456115723, 0.5979816317558289], + [-2.392698287963867, -3.275129556655884], + [0.23635053634643555, 11.199821472167969], + [-5.883988380432129, -2.673149347305298], + [2.189368963241577, -4.538780212402344], + [-2.554619550704956, 1.7944954633712769], + [4.12849760055542, 1.9958702325820923], + [10.23146915435791, -2.5080888271331787], + [-3.619293689727783, -3.143925905227661], + [-0.8337216973304749, 1.7058618068695068], + [-5.253726959228516, 5.9120259284973145], + [6.407155513763428, -1.5041685104370117], + [-2.0250535011291504, 2.6858010292053223], + [4.211572170257568, -3.4533755779266357], + [9.249163627624512, -2.446135997772217], + [1.6463850736618042, -7.018486499786377], + [2.875577211380005, 0.2511827051639557], + [-0.04250485450029373, 12.021389961242676], + [-4.011250972747803, -0.5673607587814331], + [-2.6046292781829834, -1.9761828184127808], + [5.62475061416626, -2.4832847118377686], + [-2.770765542984009, 2.588470220565796], + [4.563642978668213, -3.221966028213501], + [-2.266411304473877, 0.6897035837173462], + [3.3928616046905518, -3.878704309463501], + [-4.709839820861816, -7.76285982131958], + [-4.071537017822266, -5.746822357177734], + [3.359304904937744, -7.611952304840088], + [3.7640788555145264, -3.31522798538208], + [8.2016019821167, -2.186171770095825], + [7.573462963104248, -2.0901544094085693], + [-5.499640464782715, 7.037135124206543], + [2.8832714557647705, 7.684082984924316], + [8.131915092468262, -2.3086867332458496], + [4.748829364776611, -3.9826505184173584], + [0.053310565650463104, 14.274490356445312], + [-3.9807794094085693, -6.572679042816162], + [2.657897472381592, 6.645524978637695], + [-4.40510892868042, -6.513348579406738], + [-6.605357646942139, 8.440865516662598], + [3.2265279293060303, -4.331188201904297], + [-4.590152263641357, 0.0730401873588562], + [4.20469331741333, -3.548811197280884], + [-4.7650980949401855, -3.990166425704956], + [6.643627643585205, 8.235800743103027], + [-1.840996265411377, 2.1932127475738525], + [3.716327428817749, 1.0470622777938843], + [-6.720662593841553, 7.121466636657715], + [3.3969955444335938, -4.419816017150879], + [3.854278802871704, 5.431969165802002], + [-4.270278453826904, 6.1007513999938965], + [6.291200637817383, -5.178301811218262], + [-2.843682050704956, 1.8213833570480347], + [-5.986484050750732, 6.631505489349365], + [0.566221296787262, 7.234480381011963], + [-2.3544161319732666, -2.297914743423462], + [-0.054902978241443634, 13.805025100708008], + [-0.6586206555366516, -0.637364387512207], + [0.5722801685333252, -0.9951488971710205], + [-4.675048351287842, -6.2058868408203125], + [3.3541758060455322, -8.751792907714844], + [-2.969714879989624, 4.581390857696533], + [7.256079196929932, -1.867242693901062], + [2.9084999561309814, 4.883464813232422], + [0.2919601798057556, 11.650289535522461], + [-2.4284963607788086, 3.1119515895843506], + [-0.6502212882041931, -0.9280824661254883], + [-4.336190700531006, -5.976876735687256], + [-7.313587665557861, 8.918460845947266], + [0.09403716772794724, 9.971196174621582], + [0.12171822041273117, 9.607476234436035], + [-4.71685266494751, 4.223111152648926], + [4.322266101837158, 1.4631884098052979], + [7.7196455001831055, -2.047258138656616], + [-2.530430316925049, 1.988737940788269], + [-3.4319541454315186, -4.037186145782471], + [-5.680481433868408, -1.7749574184417725], + [-3.6016595363616943, -3.2961947917938232], + [-3.042095422744751, -0.2736971974372864], + [1.6331746578216553, -0.14515230059623718], + [-5.361221790313721, -2.5268938541412354], + [-5.0374860763549805, 5.4421586990356445], + [2.703077554702759, -3.840210199356079], + [-1.9899251461029053, 1.6089951992034912], + [2.3748786449432373, -7.03135871887207], + [-6.432659149169922, 4.593051910400391], + [-3.7955939769744873, -1.7984740734100342], + [4.688772201538086, -3.10148549079895], + [3.18717885017395, 1.4373927116394043], + [-1.8970751762390137, 0.8558555245399475], + [9.057247161865234, -2.411977767944336], + [5.143635272979736, 7.469736576080322], + [2.8827178478240967, 5.074113845825195], + [-2.1866025924682617, 2.764190196990967], + [0.6644933819770813, -0.8988866806030273], + [0.21519729495048523, -1.3341305255889893], + [1.482409119606018, 6.082561492919922], + [8.259917259216309, -2.2149674892425537], + [-2.4200937747955322, 2.1617772579193115], + [2.084754705429077, -8.244447708129883], + [0.6655412316322327, -1.1171618700027466], + [2.7872304916381836, -9.330835342407227], + [9.909680366516113, -2.5170557498931885], + [4.408476829528809, -1.118686318397522], + [-0.08280015736818314, 10.016956329345703], + [-3.913433313369751, -5.301335334777832], + [-5.924590110778809, -0.42319613695144653], + [7.414587497711182, 8.873970985412598], + [1.0971095561981201, -0.745354413986206], + [-0.14070570468902588, 1.013492226600647], + [2.2407658100128174, -8.15266227722168], + [-1.9693934917449951, 0.9515002965927124], + [-0.06723148375749588, 13.606342315673828], + [-4.621267318725586, -1.6163936853408813], + [3.453035593032837, -3.241075277328491], + [3.407038450241089, 1.478880524635315], + [-2.527202606201172, 1.9012380838394165], + [2.837693452835083, 4.568347930908203], + [-4.8012566566467285, -7.360082626342773], + [-3.983769178390503, -3.29975962638855], + [-0.2956887185573578, -0.9887611865997314], + [-6.624644756317139, 7.494387149810791], + [5.886263370513916, 7.786633491516113], + [-5.570820331573486, -3.5674333572387695], + [1.037606954574585, 4.453744888305664], + [3.3729939460754395, -3.820296287536621], + [9.505257606506348, -2.3614275455474854], + [-2.4161453247070312, 1.8279138803482056], + [7.927201747894287, -2.3767621517181396], + [0.1688634753227234, 9.437705039978027], + [1.1810495853424072, -0.11498194932937622], + [-3.4653713703155518, -3.858888626098633], + [-6.481626033782959, -0.6085091233253479], + [5.589186191558838, -6.5713396072387695], + [-1.0671567916870117, -0.1943715214729309], + [3.068342447280884, 6.939990520477295], + [6.09691858291626, -1.8224087953567505], + [8.285284042358398, -2.225090265274048], + [-4.247869968414307, -6.129638195037842], + [0.03055625408887863, 6.6170878410339355], + [-0.0019434764981269836, 12.388906478881836], + [-6.011017799377441, 8.405550003051758], + [2.011838674545288, 3.9365010261535645], + [3.4342095851898193, -5.415363788604736], + [8.537734031677246, -2.3231871128082275], + [-4.498900890350342, 8.353453636169434], + [0.7108990550041199, 10.674971580505371], + [8.470023155212402, -2.3134970664978027], + [4.878616809844971, 6.936856269836426], + [-4.529172897338867, -5.906894683837891], + [11.028762817382812, -2.509052276611328], + [2.2931220531463623, -3.1936521530151367], + [9.347349166870117, -2.3714725971221924], + [-5.4071502685546875, 6.193269729614258], + [5.569129943847656, -3.2225797176361084], + [-7.510319709777832, 0.6580915451049805], + [-2.681426763534546, 6.146134853363037], + [3.483165979385376, -3.6848297119140625], + [4.170446395874023, -2.9802331924438477], + [2.1628339290618896, -1.217652440071106], + [-0.4150161147117615, -1.2937911748886108], + [8.228760719299316, -2.23537540435791], + [-2.064338207244873, 2.3254005908966064], + [8.07737922668457, -2.2126283645629883], + [1.9493002891540527, -6.185757160186768], + [9.599422454833984, -2.4538917541503906], + [8.139389038085938, -2.5141241550445557], + [5.968891143798828, -1.171984314918518], + [-1.4515506029129028, -0.10542050004005432], + [1.9329710006713867, -8.194805145263672], + [3.0432968139648438, -4.282756328582764], + [-2.9984347820281982, 5.280620574951172], + [2.809725284576416, -3.8860061168670654], + [4.468040466308594, -3.360234498977661], + [0.42198795080184937, -0.7486398816108704], + [-2.348736524581909, 2.446080207824707], + [-3.117673635482788, 5.428359031677246], + [9.15638542175293, -2.3226304054260254], + [5.726430416107178, -3.034383773803711], + [-5.406181812286377, -1.7427774667739868], + [7.233462810516357, -1.698781967163086], + [1.185555338859558, -6.488116264343262], + [-4.832450866699219, 2.8314952850341797], + [-4.535821437835693, -6.844820499420166], + [-3.9242780208587646, -1.2274221181869507], + [3.8386693000793457, -3.4840738773345947], + [1.3369529247283936, -6.722633361816406], + [-5.2283148765563965, 5.023228168487549], + [-4.37214994430542, -1.1103922128677368], + [-3.59734845161438, -3.620950222015381], + [3.968764066696167, -1.4473488330841064], + [8.156706809997559, -2.2376937866210938], + [3.1372056007385254, -4.61863899230957], + [2.3530237674713135, -3.142479181289673], + [-7.754105091094971, -0.38780248165130615], + [-3.928849458694458, 4.3408379554748535], + [-5.44324254989624, 0.9702720642089844], + [2.7730653285980225, 6.112741470336914], + [-0.8212432265281677, -2.4912025928497314], + [3.7608678340911865, -6.926248550415039], + [8.77453327178955, -2.382526159286499], + [2.8058207035064697, -3.7199699878692627], + [0.009034030139446259, 12.517223358154297], + [6.358872890472412, -2.1014511585235596], + [-4.420289993286133, -6.104476451873779], + [8.371016502380371, -2.281799077987671], + [-3.785430669784546, 6.735080718994141], + [4.409842014312744, -3.800503969192505], + [3.3625247478485107, -8.474958419799805], + [-2.1975367069244385, 1.694224238395691], + [-1.3837875127792358, 0.948140561580658], + [3.2127058506011963, -8.243099212646484], + [2.60182523727417, -0.2654694616794586], + [-2.364027738571167, 1.537809133529663], + [-1.139119267463684, -3.7057559490203857], + [7.856071472167969, -2.915369987487793], + [2.349534273147583, 5.201339244842529], + [1.3838109970092773, 4.612858295440674], + [0.15074026584625244, 9.768182754516602], + [6.274829387664795, 7.775887489318848], + [-3.365403413772583, -2.619551420211792], + [-6.1426825523376465, 0.2858501672744751], + [-2.1115424633026123, -4.918815612792969], + [5.804204940795898, 7.718000411987305], + [-5.455905437469482, -1.0134884119033813], + [-1.6752185821533203, 1.978878378868103], + [3.617633819580078, 1.1127644777297974], + [-5.641780376434326, -6.265872478485107], + [2.536804437637329, 1.553278923034668], + [-2.030390739440918, -4.125702857971191], + [5.789547920227051, -6.087258338928223], + [-4.360891342163086, -2.922025442123413], + [0.15196609497070312, 10.276445388793945], + [5.345609188079834, -3.6232340335845947], + [0.18529993295669556, 11.918352127075195], + [4.05418062210083, 1.4614328145980835], + [-5.604790210723877, 5.064497947692871], + [5.014550685882568, 8.00560474395752], + [4.029831409454346, -3.7941296100616455], + [-5.934444427490234, -1.5347108840942383], + [-4.06668758392334, -6.118497371673584], + [2.661104679107666, 0.7762664556503296], + [-2.4731638431549072, -4.002312183380127], + [-1.0567584037780762, -3.4006617069244385], + [2.173121213912964, -8.08781909942627], + [-4.533508777618408, -2.8410162925720215], + [3.2605748176574707, -6.1753950119018555], + [-2.1615235805511475, 2.599823236465454], + [0.023464970290660858, 11.896499633789062], + [-3.666332483291626, -5.800808429718018], + [1.9345149993896484, -7.766633033752441], + [1.0632061958312988, -0.5019643902778625], + [8.28629207611084, -2.312363624572754], + [8.0900239944458, -2.4564368724823], + [-0.05446428805589676, 9.498064041137695], + [2.6859967708587646, 0.5833388566970825], + [2.6928999423980713, -6.310518741607666], + [-4.364093780517578, -7.133039474487305], + [2.527230739593506, 5.218542575836182], + [0.11540132015943527, 12.198978424072266], + [6.704513072967529, 8.202032089233398], + [-4.725879669189453, 1.7300796508789062], + [3.025402784347534, -0.5958960056304932], + [2.8070733547210693, -0.21066074073314667], + [4.595912456512451, -3.8852379322052], + [8.7171630859375, -2.3983356952667236], + [3.6536614894866943, 1.1829825639724731], + [2.3038761615753174, 1.6790820360183716], + [8.088418006896973, -2.2122771739959717], + [-4.0917181968688965, 0.024110671132802963], + [-4.639274597167969, 4.835290908813477], + [2.411128282546997, -6.657729148864746], + [0.48911386728286743, 10.115737915039062], + [3.7452476024627686, 0.5400681495666504], + [-2.851736307144165, -4.1557722091674805], + [-4.937370300292969, -6.507778167724609], + [0.7168012261390686, 7.441510200500488], + [5.737098217010498, 7.8010711669921875], + [2.6841094493865967, -6.270478248596191], + [6.636779308319092, -1.468748688697815], + [-2.422625780105591, 2.9145960807800293], + [-3.684002637863159, -1.2200863361358643], + [3.5502283573150635, -3.4172027111053467], + [-2.879363775253296, 5.267627716064453], + [3.7391369342803955, -3.254628896713257], + [-6.1715192794799805, 6.941432476043701], + [-1.3412971496582031, -3.636570930480957], + [3.473249673843384, -5.145874977111816], + [-4.024421691894531, 3.9229788780212402], + [4.333781719207764, -6.900864124298096], + [5.773203372955322, 7.715506553649902], + [-2.121739149093628, 0.3621397316455841], + [-4.540875434875488, -6.663722038269043], + [10.530383110046387, -2.4138219356536865], + [-4.567010402679443, -6.624523639678955], + [3.113114595413208, -3.6484568119049072], + [1.5862219333648682, -7.107161045074463], + [-1.208632469177246, 1.613174557685852], + [-4.282925605773926, -0.7167882919311523], + [3.2104008197784424, -9.122772216796875], + [-2.095592737197876, 2.5234999656677246], + [9.610142707824707, -2.3755545616149902], + [-3.228471517562866, -5.0407915115356445], + [3.413792610168457, -6.441084861755371], + [0.2332422137260437, 10.99034309387207], + [7.2472052574157715, -4.856911659240723], + [-2.0200486183166504, 2.258617401123047], + [-2.8680784702301025, 2.223083019256592], + [2.7004849910736084, -0.36854541301727295], + [1.6808555126190186, 2.3179450035095215], + [-3.913438558578491, -6.338079929351807], + [3.6257784366607666, -2.8042714595794678], + [0.05525922030210495, -0.4158928096294403], + [-3.3338351249694824, -3.0125136375427246], + [1.7894253730773926, 0.6520748138427734], + [-0.020404405891895294, 9.984769821166992], + [6.365795135498047, -2.223524570465088], + [-0.03149647265672684, 13.167469024658203], + [3.187009334564209, -4.5497894287109375], + [-4.386652946472168, -1.5689467191696167], + [-5.688658714294434, 6.33182430267334], + [7.38566255569458, -2.8578884601593018], + [-0.9721387028694153, -3.0963475704193115], + [10.31568431854248, -2.5152013301849365], + [-0.20322918891906738, -1.1404070854187012], + [0.5554949641227722, 8.11884880065918], + [5.433813095092773, -2.2130351066589355], + [5.72778844833374, -0.4498549699783325], + [-4.1299333572387695, -6.860631465911865], + [4.092379093170166, -1.888241171836853], + [-1.4547820091247559, 0.8310645818710327], + [-3.241774320602417, -2.799699544906616], + [-4.1576433181762695, 5.65514612197876], + [1.408011555671692, -0.27280688285827637], + [8.435921669006348, -2.2668635845184326], + [-2.47027325630188, 2.8611488342285156], + [7.134085655212402, 8.501270294189453], + [-2.8879716396331787, -3.190211057662964], + [-2.217710018157959, 1.999569058418274], + [5.602309703826904, 7.528295040130615], + [7.507762432098389, -5.023934841156006], + [-4.06337833404541, -3.61914324760437], + [-1.1667720079421997, 1.3208931684494019], + [3.29958438873291, -8.392436981201172], + [8.555825233459473, -2.392350673675537], + [3.6391043663024902, 1.0966176986694336], + [4.919668674468994, -2.813534736633301], + [-2.1007652282714844, 2.061967134475708], + [-2.5041615962982178, 0.29571086168289185], + [0.00010161846876144409, 8.8777437210083], + [2.73677134513855, -4.537968635559082], + [-0.2476205825805664, 9.607797622680664], + [-3.6316776275634766, 5.469481945037842], + [-4.500644683837891, -2.906940221786499], + [2.8896427154541016, -6.423915863037109], + [-1.8626124858856201, -2.107346296310425], + [5.651019096374512, -2.714514970779419], + [-1.4223566055297852, -0.7457494139671326], + [2.0286800861358643, 5.629330635070801], + [-2.1520726680755615, -4.660666465759277], + [2.416646718978882, -8.750991821289062], + [8.841731071472168, -2.439244508743286], + [-2.092066526412964, 2.596496105194092], + [-2.8600804805755615, -3.0867435932159424], + [7.14077615737915, -2.4185502529144287], + [-2.9689247608184814, 7.267746448516846], + [4.216053485870361, 1.3967021703720093], + [2.834038019180298, -3.9148621559143066], + [-2.969905138015747, -4.2376909255981445], + [-4.83355188369751, 4.510096549987793], + [-4.2670817375183105, -6.489347457885742], + [5.561424255371094, 7.3292646408081055], + [1.7622699737548828, 2.7131235599517822], + [3.2243781089782715, -7.719005584716797], + [3.691293954849243, -2.6850216388702393], + [3.6519691944122314, -4.227688312530518], + [-2.58306622505188, 2.0355231761932373], + [-1.2839913368225098, 0.23627448081970215], + [-2.1884634494781494, 0.3687596321105957], + [-2.4097917079925537, 1.3467551469802856], + [0.02764635533094406, 8.947362899780273], + [8.457551002502441, -2.3626534938812256], + [2.638833999633789, -3.0474884510040283], + [-2.6152970790863037, 2.1025278568267822], + [7.963784694671631, -2.1618850231170654], + [0.18365544080734253, 10.358620643615723], + [8.510748863220215, -2.33087420463562], + [-0.8944373726844788, 1.7635754346847534], + [1.5910966396331787, 4.675887107849121], + [2.4827077388763428, 0.4748256802558899], + [-2.5249502658843994, 1.6973422765731812], + [0.06445860117673874, 9.872259140014648], + [-2.3776211738586426, 1.9827286005020142], + [6.207931995391846, -2.48423171043396], + [6.870565891265869, 8.29492473602295], + [3.4043052196502686, -6.587794303894043], + [9.254039764404297, -2.4282212257385254], + [-5.343212604522705, -3.8876984119415283], + [0.09315108507871628, 9.79112720489502], + [3.6585352420806885, -7.90449333190918], + [0.09005653113126755, 10.225528717041016], + [2.7059388160705566, 3.1656737327575684], + [-3.992528200149536, -2.4483795166015625], + [2.253570795059204, 4.824161529541016], + [7.109214782714844, -1.6580473184585571], + [0.9558258652687073, 11.483098030090332], + [2.049238443374634, -8.1578950881958], + [6.080776691436768, -3.1727278232574463], + [0.2877994179725647, 11.53313159942627], + [-4.083261966705322, 5.4118428230285645], + [8.892804145812988, -2.4065821170806885], + [8.172528266906738, -2.26279616355896], + [7.923923015594482, -2.1998860836029053], + [-3.3788959980010986, 5.766635894775391], + [0.7559913992881775, -0.6633783578872681], + [-2.5277984142303467, 1.990315556526184], + [4.053029537200928, 1.8363760709762573], + [9.085856437683105, -2.5721609592437744], + [4.5188517570495605, -3.620903491973877], + [9.4096097946167, -2.323133707046509], + [3.448791027069092, -5.460546493530273], + [8.11440372467041, -2.259087324142456], + [7.828995227813721, 9.332307815551758], + [-0.05280382186174393, 13.901557922363281], + [9.7809419631958, -2.560033082962036], + [-4.416600227355957, -6.727214813232422], + [-3.090207815170288, -3.983149528503418], + [1.8339476585388184, 0.6087636947631836], + [0.09588342159986496, 11.925472259521484], + [-5.259119510650635, 5.926539421081543], + [-6.816716194152832, -1.1414300203323364], + [-4.1531147956848145, -6.96088171005249], + [5.711153030395508, -3.1614596843719482], + [2.166400194168091, 6.233373165130615], + [0.6025177240371704, 0.027462270110845566], + [7.374246597290039, -1.756338119506836], + [6.917535781860352, -1.5940666198730469], + [1.3761696815490723, 0.17961817979812622], + [4.016638278961182, 6.39800500869751], + [8.323067665100098, -2.268934488296509], + [5.7055559158325195, -3.2523138523101807], + [2.235351324081421, -1.3993180990219116], + [-6.466724872589111, -2.1850979328155518], + [3.1657471656799316, -7.462433815002441], + [4.633862018585205, -2.686516523361206], + [-5.677064895629883, -2.290288209915161], + [-4.243734836578369, 5.251504898071289], + [3.016126871109009, 5.1254801750183105], + [-3.394101142883301, -1.6765282154083252], + [-5.0729451179504395, -6.9189229011535645], + [8.509064674377441, -2.3270375728607178], + [-2.869971990585327, -1.6133283376693726], + [6.614573955535889, -2.65543794631958], + [5.976046085357666, 7.561506748199463], + [7.777998924255371, 9.2265625], + [5.405231952667236, -4.325201988220215], + [11.005356788635254, -2.5051329135894775], + [5.389750957489014, -5.273369789123535], + [-7.317006587982178, 8.6155424118042], + [8.096273422241211, -2.0659427642822266], + [-2.259916305541992, 0.24214869737625122], + [2.4982433319091797, 1.721373438835144], + [0.5194036364555359, -1.0416772365570068], + [-4.909531116485596, -1.5003677606582642], + [5.88580846786499, -1.2273072004318237], + [-4.315622806549072, -1.947879672050476], + [4.455264568328857, -7.986353874206543], + [3.913060426712036, 1.8666468858718872], + [-2.1279680728912354, 2.433448553085327], + [2.46732497215271, 6.134275436401367], + [6.334620475769043, -1.22834312915802], + [2.4440605640411377, 5.651267051696777], + [5.991448879241943, -1.5876256227493286], + [-4.526091575622559, -6.403299331665039], + [7.370265960693359, -2.6355485916137695], + [1.6350886821746826, -4.145498275756836], + [4.7946882247924805, -3.7416388988494873], + [-5.991881847381592, 0.6335312128067017], + [-3.6226136684417725, -0.47530412673950195], + [1.2890355587005615, -6.89293909072876], + [5.9543070793151855, 7.424614906311035], + [2.6210033893585205, 3.12229323387146], + [0.27711862325668335, 11.017553329467773], + [-4.402634143829346, -1.0279743671417236], + [2.9123306274414062, -9.962371826171875], + [0.9745634198188782, -5.568095684051514], + [6.0867438316345215, -1.5155335664749146], + [2.2181556224823, -8.855462074279785], + [3.1298062801361084, -3.0672764778137207], + [7.3285746574401855, 8.920228958129883], + [-7.865070819854736, -0.9808206558227539], + [-0.0354122593998909, 9.230359077453613], + [0.16397243738174438, 9.991485595703125], + [3.6946403980255127, 6.276131629943848], + [3.4495062828063965, -7.229108810424805], + [3.0043718814849854, -4.2795000076293945], + [3.7657153606414795, -3.3303475379943848], + [8.0515775680542, -2.5582330226898193], + [3.411980152130127, -4.105833053588867], + [-3.692657709121704, -0.42750120162963867], + [-3.4503374099731445, -5.6979570388793945], + [-3.907654047012329, -1.5988670587539673], + [1.9465587139129639, 5.707474708557129], + [-3.6341726779937744, -6.376641750335693], + [-3.5765597820281982, 0.49227839708328247], + [0.4289526343345642, -1.0528095960617065], + [2.1885054111480713, -6.881832122802734], + [3.2970285415649414, -9.336823463439941], + [-0.13106045126914978, -1.30858314037323], + [-4.821156978607178, -6.397045135498047], + [8.334859848022461, -2.285066604614258], + [2.5497376918792725, 1.7472082376480103], + [-3.507690191268921, 4.5659050941467285], + [-0.024903960525989532, 12.647037506103516], + [8.082167625427246, -2.129415273666382], + [0.4639069437980652, -0.9101549983024597], + [0.07294493168592453, 10.163374900817871], + [2.5575783252716064, -3.620818853378296], + [2.2559702396392822, 2.8029301166534424], + [5.2307658195495605, 7.594647407531738], + [0.28116315603256226, 11.63865852355957], + [-5.812872409820557, 1.6641108989715576], + [1.4782941341400146, 1.7675166130065918], + [-0.10646476596593857, -1.5842849016189575], + [5.448638916015625, -4.23353385925293], + [-4.989270210266113, 6.471996307373047], + [-5.632511615753174, 6.1205010414123535], + [-5.106530666351318, 6.0005340576171875], + [-0.05224228650331497, 12.125112533569336], + [-2.334552526473999, 1.058639645576477], + [-4.90227746963501, -0.32403868436813354], + [3.2501142024993896, 1.5052670240402222], + [2.4812982082366943, 1.0595805644989014], + [5.204322338104248, -2.7127974033355713], + [-3.4747986793518066, -2.7720706462860107], + [10.383782386779785, -2.4024269580841064], + [3.0554215908050537, -4.352865219116211], + [0.4957638382911682, -5.405459403991699], + [-5.129615306854248, 8.097833633422852], + [3.0521814823150635, -7.123053550720215], + [0.2573523223400116, -0.20463018119335175], + [-2.8016958236694336, 2.2472262382507324], + [-2.3232157230377197, 2.2826902866363525], + [2.8335092067718506, 6.335080146789551], + [3.1005241870880127, 2.3835880756378174], + [0.17064732313156128, 11.228904724121094], + [2.9200496673583984, -7.808610439300537], + [-4.994964122772217, -3.8992161750793457], + [6.313919544219971, 7.783355712890625], + [1.5835328102111816, 4.1769185066223145], + [2.9967658519744873, -4.237736225128174], + [3.679374933242798, -2.5431535243988037], + [-4.865035533905029, -0.7171196341514587], + [-5.293907642364502, -5.4760589599609375], + [-0.0021935179829597473, 9.230268478393555], + [-1.6001019477844238, -3.956186056137085], + [0.007302515208721161, -1.303675889968872], + [-4.610097408294678, 4.550658226013184], + [4.448381423950195, 7.004718780517578], + [-2.4022629261016846, 6.302796363830566], + [-7.700549602508545, -0.6798291206359863], + [2.810551404953003, -3.4084558486938477], + [2.55818247795105, 4.527413368225098], + [0.07317321747541428, -1.4017999172210693], + [5.885221481323242, -0.8986815214157104], + [-2.2433345317840576, 2.37347149848938], + [1.845323920249939, 5.470046043395996], + [0.25557011365890503, 11.24867057800293], + [-2.605382204055786, 2.1207966804504395], + [6.8018927574157715, -1.3520094156265259], + [-0.04291988164186478, 12.041032791137695], + [2.4395968914031982, 2.318403720855713], + [3.8038580417633057, -3.543182134628296], + [8.88190746307373, -2.421612024307251], + [5.182011604309082, 6.80265998840332], + [3.4240562915802, -7.052702903747559], + [0.07575284689664841, 11.317112922668457], + [6.2859272956848145, 8.296987533569336], + [1.0280311107635498, -0.8970239162445068], + [4.214270114898682, -2.8148279190063477], + [0.06178437918424606, 10.26203727722168], + [2.93080735206604, -4.161729335784912], + [-2.611936330795288, -3.2667975425720215], + [0.07787292450666428, 11.843090057373047], + [-2.1180508136749268, 0.38622137904167175], + [-1.8775941133499146, 2.4117074012756348], + [-0.49099770188331604, 0.5812937021255493], + [-4.618685245513916, -1.1270134449005127], + [2.8697669506073, -3.294682502746582], + [-0.1867603063583374, -1.515725016593933], + [-3.4033963680267334, 3.644407033920288], + [2.16851544380188, 0.42914655804634094], + [4.68013334274292, -8.710991859436035], + [-0.14106374979019165, 10.281577110290527], + [-1.883277416229248, -4.508274078369141], + [6.120380401611328, -2.8369925022125244], + [4.463646411895752, 5.922632217407227], + [1.1150819063186646, -0.5342029929161072], + [1.9167609214782715, -6.940586090087891], + [3.6487503051757812, -3.6281986236572266], + [4.628741264343262, 1.8707534074783325], + [-1.9658855199813843, 2.445416212081909], + [-0.7596685290336609, 1.269147515296936], + [-4.440896511077881, 5.30265998840332], + [0.19810277223587036, 10.62177848815918], + [-2.2704622745513916, 2.3878071308135986], + [-2.1297333240509033, 2.524014472961426], + [-4.4340715408325195, 7.704412937164307], + [-5.109093189239502, 4.928908824920654], + [8.153620719909668, -2.1772406101226807], + [8.265721321105957, -2.285686731338501], + [7.045197486877441, 8.514874458312988], + [1.7971950769424438, 1.5556435585021973], + [-4.534077167510986, 5.788177490234375], + [0.037348680198192596, 9.790794372558594], + [1.9954471588134766, 5.980649948120117], + [-2.564180850982666, 5.788309574127197], + [8.432662963867188, -2.19830060005188], + [0.48098140954971313, 4.9251508712768555], + [3.975151300430298, 5.332459449768066], + [10.956062316894531, -2.5546209812164307], + [1.7038251161575317, 5.481708526611328], + [6.7130818367004395, -1.6742931604385376], + [9.758316993713379, -2.454149007797241], + [-3.8510544300079346, -4.812171936035156], + [-2.470782995223999, 1.8026686906814575], + [0.1344112753868103, 11.986671447753906], + [6.00933313369751, 7.488711833953857], + [3.3056585788726807, -5.121523857116699], + [2.735846519470215, 1.9715832471847534], + [9.957587242126465, -2.4588356018066406], + [-4.514956474304199, -5.550639629364014], + [10.348729133605957, -2.498624086380005], + [-2.4576222896575928, -5.049248695373535], + [-4.705063819885254, -6.670979022979736], + [-2.489046335220337, 1.4759037494659424], + [-0.1327764391899109, 13.540206909179688], + [-4.2547430992126465, -0.47600221633911133], + [-5.239503383636475, -3.5359299182891846], + [7.245539665222168, -1.8367646932601929], + [-0.0029956772923469543, 11.950634002685547], + [-2.4707579612731934, 1.5343855619430542], + [2.7540993690490723, -4.048657417297363], + [7.042230606079102, -2.7697062492370605], + [-2.5416033267974854, 1.5375648736953735], + [-3.637915849685669, 3.800100564956665], + [-4.174590587615967, -3.9284021854400635], + [-7.180531978607178, 8.262279510498047], + [8.91886043548584, -2.414199113845825], + [-4.155562400817871, -6.427065372467041], + [2.7393195629119873, -3.649726152420044], + [-5.217957019805908, 4.1884307861328125], + [8.251138687133789, -2.210414171218872], + [-4.801796913146973, -1.6053730249404907], + [2.1418368816375732, 3.994342565536499], + [0.10774271935224533, 9.630805969238281], + [0.04585539549589157, 9.29298210144043], + [-2.8157291412353516, 4.835519790649414], + [-5.151557445526123, -5.163418769836426], + [8.390761375427246, -2.4141600131988525], + [8.323958396911621, -2.279311418533325], + [6.064115047454834, -1.213919997215271], + [8.27532958984375, -2.640080213546753], + [6.991585731506348, -1.7067383527755737], + [0.7149004340171814, -1.0213525295257568], + [-6.189334869384766, 5.583780288696289], + [2.414215564727783, -1.378068447113037], + [-0.3516726493835449, -2.572934865951538], + [-3.7811472415924072, 5.504841327667236], + [-2.638852596282959, 2.6713240146636963], + [0.10743903368711472, 9.718229293823242], + [-4.394120693206787, -6.2172770500183105], + [0.1704534888267517, 10.746257781982422], + [3.1930315494537354, -4.494853973388672], + [6.045644283294678, 7.67490291595459], + [-3.5563266277313232, -3.128448724746704], + [5.203079700469971, 7.504457950592041], + [-7.734941005706787, -0.9100205302238464], + [-3.347235918045044, -2.3558695316314697], + [-5.204321384429932, 5.434391021728516], + [8.889105796813965, -2.416318655014038], + [10.02391529083252, -2.3379147052764893], + [7.197298526763916, -1.6949206590652466], + [-2.151569128036499, 2.560290575027466], + [0.557811439037323, -7.050899982452393], + [-5.403730869293213, -2.962251663208008], + [-2.6025145053863525, 2.137752056121826], + [-2.1707141399383545, 2.503403663635254], + [-2.7145144939422607, 7.0365400314331055], + [3.1714179515838623, -3.988281011581421], + [2.7156970500946045, -2.2759101390838623], + [-2.5635101795196533, -3.1362850666046143], + [2.6445016860961914, 1.2916699647903442], + [3.4723756313323975, -7.460608005523682], + [-3.01406192779541, -3.8405210971832275], + [0.48391324281692505, -1.058046579360962], + [-5.620415687561035, 8.181534767150879], + [6.748638153076172, -2.521289587020874], + [0.08214979618787766, 9.565423965454102], + [-1.369213581085205, 1.4256502389907837], + [-1.3525665998458862, 1.0024255514144897], + [-4.245173454284668, 6.143970489501953], + [3.8639719486236572, -3.6056244373321533], + [4.286509990692139, -5.206743240356445], + [6.286506175994873, -3.024070978164673], + [3.61008620262146, -7.222803115844727], + [3.1146509647369385, 1.0733586549758911], + [-4.337237358093262, -2.0515167713165283], + [2.027372360229492, 6.367417335510254], + [-5.279252529144287, -2.143246650695801], + [6.243673324584961, -3.094431161880493], + [5.5204386711120605, -4.435589790344238], + [3.4411895275115967, -4.8452043533325195], + [5.795454502105713, -0.7736478447914124], + [3.7985546588897705, 1.2606416940689087], + [-4.701977729797363, 3.589046001434326], + [3.2085554599761963, -4.409122943878174], + [3.490673780441284, -4.727867126464844], + [-0.008451171219348907, 10.295899391174316], + [2.7485644817352295, -3.8173654079437256], + [-2.952871799468994, -2.340324640274048], + [-2.384229898452759, 3.209364414215088], + [7.848028659820557, 9.324273109436035], + [5.363318920135498, -5.888854026794434], + [7.72870397567749, -2.02327299118042], + [-0.07138306647539139, 14.388167381286621], + [1.4271589517593384, 0.8602816462516785], + [3.51576828956604, -4.888117790222168], + [3.4106528759002686, 0.6961830854415894], + [0.01998632401227951, 9.575087547302246], + [7.360660076141357, -5.365156173706055], + [-4.516214370727539, -6.923081398010254], + [-0.019941039383411407, 12.59805965423584], + [6.77932071685791, 8.323229789733887], + [-0.7251474261283875, -2.492108106613159], + [-0.973850429058075, -0.59722900390625], + [2.0524470806121826, -4.316824436187744], + [9.495159149169922, -2.3682568073272705], + [8.745341300964355, -2.2618417739868164], + [-4.3686203956604, -2.113260269165039], + [-5.279089450836182, -3.8717615604400635], + [-5.172745227813721, -3.815458059310913], + [-2.84668231010437, 2.743377685546875], + [-0.5344123840332031, -0.7511162757873535], + [2.2182600498199463, 5.808562278747559], + [-5.211185932159424, -3.079421043395996], + [9.619099617004395, -2.3241662979125977], + [-6.468147277832031, 3.5752570629119873], + [6.839780330657959, -1.9379886388778687], + [2.419772148132324, -3.149862051010132], + [1.6715481281280518, 4.331026077270508], + [-2.7375361919403076, 4.792707920074463], + [0.19216471910476685, 11.185258865356445], + [-0.04382462054491043, 12.62472915649414], + [7.000927448272705, -1.668826937675476], + [3.567380666732788, -2.9874565601348877], + [3.9702932834625244, 1.6288901567459106], + [0.0627155676484108, -1.9555429220199585], + [3.078091859817505, -1.0400878190994263], + [3.492147922515869, -3.199490547180176], + [-4.281561374664307, -3.4549572467803955], + [9.736693382263184, -2.315359354019165], + [-2.035588026046753, 2.3768253326416016], + [2.892565965652466, -4.115480899810791], + [0.012656264007091522, 12.026718139648438], + [0.03760372847318649, 8.963332176208496], + [-5.421431064605713, 4.33319091796875], + [2.4666967391967773, 2.253729820251465], + [-4.594648838043213, 5.153678894042969], + [1.5002410411834717, 0.21861469745635986], + [3.6456212997436523, -7.100403308868408], + [2.6526248455047607, -3.7819831371307373], + [3.4689037799835205, -3.322718381881714], + [2.290205717086792, -7.9323930740356445], + [2.417686939239502, -6.360948085784912], + [-2.626058340072632, 4.229434013366699], + [-0.15059208869934082, -1.7392147779464722], + [3.7127199172973633, -5.473735809326172], + [-1.8300095796585083, 2.068443775177002], + [-2.3507273197174072, 1.894073486328125], + [-1.5128443241119385, -2.6129097938537598], + [0.17421668767929077, 11.225300788879395], + [2.436250925064087, 5.5007452964782715], + [-2.3058784008026123, 1.9987012147903442], + [-0.07817233353853226, 9.939749717712402], + [-3.8893516063690186, -3.6432361602783203], + [2.7693848609924316, 4.594078063964844], + [0.04875236004590988, 13.02756404876709], + [-1.890468716621399, 2.367872476577759], + [2.2796742916107178, -0.12043902277946472], + [-6.2633376121521, 7.124883651733398], + [0.9993322491645813, -6.492456912994385], + [1.371847152709961, -0.5280421376228333], + [2.8908097743988037, -0.5963419675827026], + [-0.8165948390960693, -2.9431023597717285], + [8.67719841003418, -2.365832567214966], + [-4.359890937805176, -0.28757280111312866], + [-0.788802444934845, -0.6328885555267334], + [0.09934090822935104, 8.780783653259277], + [-3.5848662853240967, 4.861248970031738], + [0.14971423149108887, 11.409236907958984], + [2.3700308799743652, 1.0504335165023804], + [6.520173072814941, -1.943865418434143], + [4.241647243499756, -3.33901309967041], + [-0.5484924912452698, -2.4322011470794678], + [2.2818520069122314, 2.644017219543457], + [-4.8101959228515625, -1.0359888076782227], + [-6.9710516929626465, 0.34657537937164307], + [-6.9181647300720215, 7.916457176208496], + [9.761003494262695, -2.4649455547332764], + [-2.1073520183563232, 2.987252712249756], + [4.0018486976623535, 1.5259790420532227], + [-4.742903232574463, -0.7046579122543335], + [7.657840251922607, -2.8550312519073486], + [-2.3116705417633057, 2.0830154418945312], + [2.4090349674224854, 5.539342403411865], + [-0.9121996760368347, -1.7117130756378174], + [7.874434947967529, -2.38139271736145], + [-2.0705862045288086, 2.2117912769317627], + [-4.33915376663208, -6.712779521942139], + [-4.1845011711120605, 4.041792869567871], + [2.6084682941436768, -6.16493034362793], + [3.741896867752075, -3.831242799758911], + [-1.9216117858886719, 2.190948247909546], + [1.5272459983825684, 2.3196566104888916], + [1.9341037273406982, -8.1569185256958], + [-4.587609767913818, -2.1717300415039062], + [-2.872601270675659, -5.810134410858154], + [0.1514931321144104, 10.082868576049805], + [-4.832511901855469, 1.021621823310852], + [4.29211950302124, -1.198816180229187], + [-2.152493476867676, 2.473698854446411], + [3.153583288192749, -3.8422489166259766], + [-0.594040036201477, 0.9650377035140991], + [8.162507057189941, -2.206955909729004], + [4.529027938842773, -4.173391342163086], + [0.9783119559288025, -0.509631872177124], + [7.286789894104004, -2.1714179515838623], + [0.16171413660049438, 9.997268676757812], + [-1.6178131103515625, 0.8049111366271973], + [2.863450050354004, -3.9789726734161377], + [2.405973434448242, 3.9756319522857666], + [-2.4020228385925293, 1.4318714141845703], + [-4.886594295501709, -2.7242631912231445], + [2.3038337230682373, 2.6748909950256348], + [8.147775650024414, -2.2641184329986572], + [-2.734480619430542, 2.2154037952423096], + [10.402433395385742, -2.498100519180298], + [-4.56147575378418, 5.646642684936523], + [-4.787927627563477, -5.670139789581299], + [3.00813889503479, -4.279064655303955], + [3.1583492755889893, -6.8055419921875], + [-2.3834831714630127, -3.6931233406066895], + [5.047876358032227, 7.6527934074401855], + [2.4641504287719727, 4.409275054931641], + [3.5252277851104736, -8.921083450317383], + [3.8739612102508545, -3.5607497692108154], + [-2.9629955291748047, 0.7546380758285522], + [6.286866664886475, 7.870430946350098], + [0.13489800691604614, 11.772340774536133], + [-6.069944381713867, 6.05573844909668], + [2.1425626277923584, -0.4298418164253235], + [-0.9641225934028625, -0.9403910636901855], + [0.05829661339521408, 12.563470840454102], + [2.7996909618377686, -3.7889537811279297], + [-4.591686725616455, 4.491819381713867], + [-6.075366020202637, 7.219122886657715], + [3.728970527648926, -6.226626396179199], + [2.2508013248443604, 0.34367066621780396], + [-5.686367511749268, 6.2750091552734375], + [0.10592096298933029, 10.170158386230469], + [8.59190845489502, -2.310394525527954], + [5.220338344573975, -3.5116658210754395], + [7.095582008361816, -1.6997908353805542], + [5.882701873779297, -3.4986109733581543], + [-2.4263877868652344, 2.3347666263580322], + [5.944191932678223, -1.216655969619751], + [-0.027921326458454132, 9.161176681518555], + [2.1363844871520996, 4.663276672363281], + [-4.014142990112305, 4.604135990142822], + [-2.046872138977051, 2.4806954860687256], + [-5.505608081817627, -0.4776572585105896], + [3.35317063331604, 4.897279262542725], + [8.101344108581543, -2.185847043991089], + [-3.579775810241699, -3.4727978706359863], + [0.6074125170707703, 0.5842053294181824], + [-1.4099563360214233, 2.1244239807128906], + [-4.354820728302002, -1.4530837535858154], + [-2.0194337368011475, 2.310957431793213], + [-4.75429630279541, 8.04802417755127], + [-4.486959934234619, -5.695750713348389], + [0.002111010253429413, 9.569828033447266], + [9.527962684631348, -2.39835524559021], + [1.5903003215789795, 4.491641998291016], + [-7.032070159912109, -1.2092331647872925], + [6.608441352844238, -2.3050715923309326], + [4.523265361785889, 6.055830955505371], + [1.7765681743621826, -8.26153564453125], + [-1.587001919746399, 2.127774953842163], + [6.292714595794678, -4.967190265655518], + [3.153487205505371, -7.860202789306641], + [1.9905500411987305, -8.027874946594238], + [3.030318260192871, 5.788704872131348], + [4.678122043609619, 6.112309455871582], + [9.20935344696045, -2.372432231903076], + [-2.182631254196167, 2.644989013671875], + [-5.963691234588623, -1.9916044473648071], + [4.385746479034424, 1.9416433572769165], + [3.5054330825805664, -6.072179794311523], + [-2.282681941986084, -1.3730210065841675], + [-1.9013190269470215, 2.177596092224121], + [-4.825479984283447, -6.418264389038086], + [3.524289846420288, -8.964709281921387], + [2.4959821701049805, 0.8466088771820068], + [3.8875248432159424, -8.198843002319336], + [-0.7290498614311218, -1.5226850509643555], + [2.9528636932373047, -5.001473903656006], + [2.612546682357788, 4.491851806640625], + [8.389815330505371, -2.247265100479126], + [10.149558067321777, -2.440020799636841], + [-2.1488826274871826, 2.6594839096069336], + [0.02433186024427414, 11.680173873901367], + [-0.1258602738380432, -1.5745117664337158], + [2.9965150356292725, -9.004837036132812], + [2.707798719406128, -3.756309747695923], + [2.9036362171173096, -3.709909677505493], + [1.4242242574691772, -6.352783203125], + [4.0560832023620605, -3.520219326019287], + [4.300465106964111, 1.9271160364151], + [3.0463953018188477, -8.667442321777344], + [0.8869619965553284, 2.195814847946167], + [-2.0722298622131348, -3.953645944595337], + [-0.18202096223831177, 9.495834350585938], + [-6.7056355476379395, 0.026816602796316147], + [-1.9206249713897705, -0.8315924406051636], + [3.1909258365631104, -8.074027061462402], + [-2.583381175994873, 2.155430316925049], + [6.670907497406006, 8.063450813293457], + [6.389800548553467, -1.3554023504257202], + [2.605541944503784, -7.351725101470947], + [-0.004152186214923859, 1.2261935472488403], + [8.125983238220215, -2.216350793838501], + [-2.939159870147705, -2.5751192569732666], + [4.9794697761535645, -1.1641100645065308], + [4.2652411460876465, 5.4835286140441895], + [-4.332579135894775, -1.9955461025238037], + [-3.96515154838562, -3.2047407627105713], + [-0.04572875052690506, 9.499465942382812], + [4.83498477935791, -1.9773656129837036], + [-3.6048314571380615, -0.760271430015564], + [-5.05018949508667, -1.44698965549469], + [2.2821359634399414, 0.48100024461746216], + [4.671054363250732, 0.21288034319877625], + [-3.8238353729248047, -5.95526647567749], + [-2.693959951400757, 2.188807964324951], + [2.594132423400879, -5.178031921386719], + [3.3971195220947266, -3.448798179626465], + [-3.1029655933380127, 7.670265197753906], + [-3.447253465652466, -3.0645291805267334], + [1.865379810333252, -7.02182149887085], + [-2.9126980304718018, -4.224588394165039], + [9.467906951904297, -2.4350335597991943], + [-4.704161167144775, -5.541612148284912], + [-3.297362804412842, 4.69736385345459], + [-4.707536220550537, -2.6660327911376953], + [0.03523429483175278, 0.3869072198867798], + [2.707242965698242, -0.10943630337715149], + [6.4246063232421875, -2.5180156230926514], + [-1.499981164932251, -2.7118449211120605], + [6.201149940490723, -3.666799783706665], + [-0.733038067817688, 1.4938253164291382], + [3.6554925441741943, -3.4985575675964355], + [3.728470802307129, -0.7231109142303467], + [8.030982971191406, -1.9219104051589966], + [-0.029585666954517365, 12.610845565795898], + [3.113206148147583, -4.148184776306152], + [4.987295150756836, 6.250426769256592], + [-5.590452194213867, 7.75269079208374], + [1.536246418952942, 3.25046968460083], + [-0.6149170994758606, 4.385712623596191], + [-6.308755874633789, 0.13490569591522217], + [6.48024845123291, -1.6202706098556519], + [4.440890789031982, -3.6379997730255127], + [2.4435017108917236, 0.6669825315475464], + [-5.020730018615723, 0.3293147683143616], + [-3.365281105041504, -5.931155204772949], + [-2.161724090576172, 2.39186692237854], + [-0.12436813861131668, 8.139090538024902], + [2.8064017295837402, -3.9415977001190186], + [3.9974939823150635, -3.29160737991333], + [0.4962013363838196, 9.724611282348633], + [1.7531845569610596, -7.883031845092773], + [9.866228103637695, -2.4266724586486816], + [7.025447845458984, -2.0372815132141113], + [8.6848783493042, -2.3376448154449463], + [2.2940073013305664, -2.974095582962036], + [-2.750171661376953, 1.1772940158843994], + [-3.7119076251983643, -5.385119915008545], + [3.9254567623138428, -7.461740970611572], + [-4.747008800506592, -7.0284423828125], + [2.7016327381134033, -9.074703216552734], + [-3.7925989627838135, -5.898365020751953], + [0.15883761644363403, 10.497276306152344], + [0.11960785835981369, 11.544004440307617], + [-4.043265342712402, 5.01887845993042], + [-0.5370774269104004, 3.9450857639312744], + [-2.3266184329986572, 0.7999143004417419], + [0.07204454392194748, 11.967612266540527], + [1.0098426342010498, -0.4327099919319153], + [-4.282260894775391, -0.3972419500350952], + [-4.284593105316162, -5.98274040222168], + [0.22849798202514648, 10.860715866088867], + [3.081165075302124, -7.061325550079346], + [-4.9416584968566895, -0.49405431747436523], + [-2.3005735874176025, -4.165981292724609], + [3.841707706451416, -3.3097164630889893], + [5.092476844787598, -2.0815088748931885], + [-3.7534308433532715, 0.8904719352722168], + [7.013736248016357, 8.386268615722656], + [-2.563978433609009, 2.1208267211914062], + [-2.4415128231048584, 1.469016671180725], + [-5.064802169799805, 8.372869491577148], + [2.105808973312378, -8.664647102355957], + [-1.2956082820892334, -3.1023221015930176], + [1.714495062828064, 1.6923303604125977], + [4.413384437561035, -2.5104305744171143], + [-3.279658794403076, -3.333231210708618], + [-2.3869340419769287, 1.269787311553955], + [1.8100852966308594, -4.597774028778076], + [0.07384919375181198, 9.823537826538086], + [9.685563087463379, -2.310349225997925], + [8.276700019836426, -2.5015556812286377], + [-0.02421688288450241, -1.6701302528381348], + [0.20158463716506958, 11.023185729980469], + [-2.1246542930603027, 2.319718599319458], + [4.9546637535095215, 6.894017696380615], + [-4.070939064025879, -5.867104530334473], + [-2.140225648880005, -0.6435086131095886], + [2.8985722064971924, -4.0372724533081055], + [-1.6609872579574585, -0.8234053254127502], + [5.428105354309082, -1.117674708366394], + [-2.2779667377471924, 2.450404405593872], + [0.8654030561447144, 4.203852653503418], + [-0.547432005405426, -2.4649388790130615], + [-2.1478116512298584, 2.633615255355835], + [-2.5134806632995605, 1.6958695650100708], + [4.067561626434326, 6.3457441329956055], + [-2.981825590133667, -2.719571352005005], + [2.00700044631958, 4.067019939422607], + [-4.581773281097412, 4.791100025177002], + [6.282837390899658, -2.9241440296173096], + [-2.6422817707061768, -3.483903408050537], + [0.04923330992460251, 9.797967910766602], + [-6.653289318084717, 8.361900329589844], + [5.070338726043701, -3.2615082263946533], + [0.4966638684272766, 11.150800704956055], + [1.3171916007995605, -6.961908340454102], + [-4.7994489669799805, -6.669796943664551], + [-2.320786476135254, 2.459012508392334], + [6.9250922203063965, -2.4949657917022705], + [2.29133939743042, 0.6449042558670044], + [-3.9917705059051514, -6.43112850189209], + [5.358134746551514, -5.6688127517700195], + [3.4006359577178955, -5.143649101257324], + [0.059855394065380096, 13.01517105102539], + [2.686133861541748, -9.653800964355469], + [-6.319224834442139, 7.64009428024292], + [2.9174211025238037, 1.2797051668167114], + [1.4558148384094238, 1.8103762865066528], + [-4.5085577964782715, -6.914764404296875], + [-3.937849283218384, 2.6132564544677734], + [3.7091472148895264, -3.568547010421753], + [5.815995216369629, -4.763045310974121], + [2.880174398422241, -4.329859733581543], + [9.170291900634766, -2.636702060699463], + [2.6345162391662598, -3.7213518619537354], + [-5.809428691864014, 6.585028648376465], + [-1.317189335823059, 0.8584268093109131], + [4.976135730743408, 7.026505947113037], + [-4.60068941116333, 5.286840915679932], + [2.683218240737915, -3.8541579246520996], + [5.19547176361084, 7.045620918273926], + [-2.243119478225708, 2.6530206203460693], + [-4.999014854431152, -3.1008472442626953], + [6.5187764167785645, -4.976554870605469], + [-0.07294542342424393, 13.702913284301758], + [-5.054832935333252, -1.8235920667648315], + [8.33022403717041, -2.449140787124634], + [9.402016639709473, -2.351679563522339], + [0.46707552671432495, 12.095340728759766], + [-4.462527275085449, 4.565927505493164], + [-7.471002578735352, -0.6198298931121826], + [3.3218605518341064, -3.516832113265991], + [7.441775798797607, 8.856929779052734], + [3.390878915786743, 6.22957181930542], + [2.730844736099243, -6.880145072937012], + [3.09293532371521, -5.715059280395508], + [-1.629038691520691, 1.139702320098877], + [0.07242440432310104, 11.965980529785156], + [2.3260111808776855, 5.140216827392578], + [-0.03379679471254349, 9.388632774353027], + [6.242462635040283, 7.89907693862915], + [-6.318573474884033, 6.760223388671875], + [-6.1260085105896, 6.652431488037109], + [3.5473852157592773, -5.2474284172058105], + [3.183192729949951, -7.97585916519165], + [5.186807632446289, -2.826780080795288], + [0.03956881910562515, -1.4026156663894653], + [-4.422138214111328, -7.383559226989746], + [-3.6356985569000244, 7.988930702209473], + [-7.817538738250732, 9.184492111206055], + [-4.9617133140563965, 4.927375793457031], + [-4.515410900115967, -2.0608460903167725], + [-2.116097927093506, 2.130875825881958], + [3.468587636947632, 1.3816629648208618], + [1.3201972246170044, -7.249948024749756], + [-4.443258285522461, -2.7080650329589844], + [0.2784196734428406, 10.931044578552246], + [-2.6432478427886963, -3.379925489425659], + [-2.2052905559539795, 2.872293472290039], + [7.5243330001831055, -2.2530839443206787], + [-1.2717210054397583, 1.7982747554779053], + [0.9055861830711365, -6.309564113616943], + [-4.162924766540527, -5.5673065185546875], + [5.411983966827393, 7.344335079193115], + [5.228635311126709, -0.819800615310669], + [-6.128276348114014, 0.23617100715637207], + [3.5508370399475098, -4.124353885650635], + [3.1943485736846924, -8.351015090942383], + [6.247183322906494, 7.627533435821533], + [-6.423852443695068, 7.186944007873535], + [5.850799083709717, 7.666736602783203], + [3.9060723781585693, -3.391632318496704], + [-6.412895679473877, 7.327889442443848], + [-0.35489439964294434, 9.495277404785156], + [-2.98117995262146, -2.964334011077881], + [2.3609774112701416, -7.788012504577637], + [7.673561096191406, 9.141794204711914], + [-7.419871807098389, 0.3208286762237549], + [8.24480152130127, -2.31461501121521], + [1.820544958114624, -5.973159313201904], + [-3.7479679584503174, -5.654267311096191], + [-4.707874774932861, 4.365312099456787], + [-2.112185478210449, 1.609910011291504], + [10.7020845413208, -2.4112346172332764], + [7.52561616897583, 9.117073059082031], + [3.750786781311035, 1.4674450159072876], + [-1.6786962747573853, 2.2290995121002197], + [3.6588401794433594, 5.325534343719482], + [0.24800485372543335, 11.142561912536621], + [-2.4091145992279053, 2.0590639114379883], + [3.057502031326294, -4.329318046569824], + [-4.4487080574035645, -5.86182975769043], + [0.42317527532577515, 10.770893096923828], + [6.865122318267822, -1.9890151023864746], + [4.588809490203857, -3.126894235610962], + [0.19806361198425293, 10.521215438842773], + [-5.853231430053711, -0.4400637745857239], + [3.472587823867798, -5.582256317138672], + [-2.110741376876831, 2.2134482860565186], + [-3.84710431098938, 6.858475208282471], + [4.50679349899292, -4.514634132385254], + [5.893345355987549, -1.3845241069793701], + [-0.9919040203094482, -3.4571173191070557], + [-4.148276329040527, -1.2356854677200317], + [-2.202383518218994, 2.721383810043335], + [5.183474063873291, -3.2546379566192627], + [-3.2700655460357666, -3.368859052658081], + [-5.119518280029297, 3.9171037673950195], + [2.997243642807007, -8.614232063293457], + [3.53936767578125, -7.242925643920898], + [-0.9801941514015198, -3.661057710647583], + [2.9426066875457764, -4.176188945770264], + [-3.56510853767395, 5.303933620452881], + [0.3773335814476013, 11.161676406860352], + [-0.12319601327180862, 8.848191261291504], + [7.983189105987549, -2.1974258422851562], + [-5.480784893035889, 5.740171432495117], + [4.256249904632568, -3.2074661254882812], + [9.197771072387695, -2.3488707542419434], + [-4.107222080230713, -6.961216449737549], + [3.9431211948394775, -4.0800652503967285], + [0.21046596765518188, 11.372184753417969], + [-5.596805572509766, -2.4318230152130127], + [-2.246124029159546, 2.3531088829040527], + [10.501599311828613, -2.43192982673645], + [4.20527982711792, -2.2729361057281494], + [1.964322566986084, -4.92478609085083], + [-4.198513507843018, -5.622903347015381], + [3.525965690612793, -5.294910430908203], + [-5.4025750160217285, 6.247696876525879], + [-2.81172776222229, -3.3904311656951904], + [3.6927125453948975, -8.570040702819824], + [3.0892817974090576, 4.496207237243652], + [3.8304922580718994, -5.292067050933838], + [0.243599534034729, 11.111909866333008], + [-4.73298454284668, -6.91136360168457], + [5.751702308654785, 7.583049774169922], + [3.253664016723633, -9.243236541748047], + [5.495675563812256, -4.190418720245361], + [-4.5911736488342285, -5.492519378662109], + [3.104901075363159, -7.958218574523926], + [5.799330711364746, -2.5266339778900146], + [2.043897867202759, 1.70908784866333], + [-4.381651401519775, -2.677175283432007], + [0.7691002488136292, -0.16264112293720245], + [-0.896361768245697, 1.478577733039856], + [2.0071051120758057, 4.801468372344971], + [2.0547094345092773, 5.79665994644165], + [-5.384809494018555, 6.273196220397949], + [-2.0044615268707275, 2.3578226566314697], + [-2.0715391635894775, -3.5193979740142822], + [-2.6991827487945557, -3.541692018508911], + [-0.20334047079086304, 10.349081993103027], + [-5.685754776000977, -1.1953212022781372], + [2.363597869873047, -7.9690117835998535], + [5.08458948135376, -2.6276698112487793], + [-1.5561455488204956, 0.04957210645079613], + [6.9955830574035645, -2.5396568775177], + [3.7178421020507812, -7.146965980529785], + [3.021491289138794, 4.609651565551758], + [4.083143711090088, -2.8299849033355713], + [-4.178178310394287, 5.395868301391602], + [-4.7087836265563965, -3.165313482284546], + [3.499183177947998, -6.317909240722656], + [3.059133529663086, -4.330587387084961], + [-1.102512001991272, -1.6447278261184692], + [-6.870331287384033, 8.86300277709961], + [1.2115403413772583, -7.165009021759033], + [5.994503974914551, -4.849389553070068], + [5.5322160720825195, -4.568352699279785], + [-7.595310688018799, -1.759931206703186], + [1.3735008239746094, -7.166431427001953], + [7.58555269241333, 8.990395545959473], + [1.0437098741531372, -6.477365016937256], + [0.1201246902346611, 13.2445068359375], + [-0.03455502539873123, 13.322816848754883], + [-4.383805751800537, -6.639585018157959], + [-5.504852771759033, 6.99920654296875], + [6.741637706756592, -2.5946996212005615], + [-5.0396599769592285, 1.8741129636764526], + [2.638359308242798, 0.8199911713600159], + [-4.0396833419799805, -6.092984676361084], + [-3.8621304035186768, 3.4345386028289795], + [2.201663017272949, 5.665065765380859], + [-6.375606536865234, 7.077550888061523], + [3.398401975631714, 5.079444885253906], + [3.104149580001831, -4.389438629150391], + [-4.140888690948486, -1.0450435876846313], + [4.9773125648498535, -3.5937411785125732], + [-7.290863990783691, -0.04020989313721657], + [3.3150742053985596, -3.998255729675293], + [-2.6405093669891357, 1.674018144607544], + [5.2424516677856445, 6.989319324493408], + [-4.2611403465271, 6.877496242523193], + [4.336264610290527, 6.784661769866943], + [7.903988838195801, -2.366760492324829], + [4.541537761688232, 6.5587873458862305], + [-0.05938131362199783, 9.553019523620605], + [1.1933999061584473, -6.985720634460449], + [1.3889074325561523, -7.405699253082275], + [-4.27960729598999, -4.845931053161621], + [-3.7889347076416016, -4.161003589630127], + [3.0405638217926025, -4.1500349044799805], + [-1.6130461692810059, 1.5955114364624023], + [7.0477213859558105, 8.45942497253418], + [-4.1254119873046875, -2.874352216720581], + [2.6302549839019775, -0.012068156152963638], + [-1.120766520500183, -3.7119052410125732], + [-1.8218786716461182, 2.3122880458831787], + [-0.5583792924880981, -1.3467810153961182], + [3.7026398181915283, -3.5400707721710205], + [-2.6116912364959717, 2.0201575756073], + [8.054267883300781, -2.2392990589141846], + [-2.385788679122925, 2.289433717727661], + [3.1423592567443848, -4.288553714752197], + [7.590077877044678, 9.134217262268066], + [-4.628359794616699, -6.904290676116943], + [8.35307788848877, -2.2502028942108154], + [8.717512130737305, -2.3446524143218994], + [2.8929994106292725, -4.029036998748779], + [1.6119260787963867, 0.07957059144973755], + [2.724236011505127, -3.9233336448669434], + [2.7033228874206543, -8.960782051086426], + [0.4349019527435303, 0.31993189454078674], + [-5.250293731689453, 6.272537708282471], + [2.4265005588531494, 2.02238392829895], + [-3.7792909145355225, 4.899847030639648], + [4.671117782592773, -5.853386878967285], + [-2.611778736114502, 2.156407356262207], + [3.931915521621704, 6.525423526763916], + [7.01923131942749, -1.9395359754562378], + [-4.491363048553467, -2.060244083404541], + [0.18677526712417603, 8.978449821472168], + [1.7594006061553955, 3.8702895641326904], + [2.489112615585327, 4.596095085144043], + [3.310539960861206, 0.5455545783042908], + [-3.4084866046905518, -5.358119010925293], + [-3.647968053817749, 6.807437419891357], + [4.785097599029541, -2.4232869148254395], + [-0.7176277041435242, -0.5077927708625793], + [-2.49065899848938, -3.3662807941436768], + [9.599729537963867, -2.3901236057281494], + [-2.658769130706787, 1.5667678117752075], + [10.381998062133789, -2.5195653438568115], + [2.486144542694092, 3.8797409534454346], + [-1.747878074645996, -1.0749155282974243], + [2.447826623916626, 0.682226836681366], + [3.017754316329956, -4.272010803222656], + [8.23551082611084, -2.2953081130981445], + [-2.0290756225585938, 1.747965931892395], + [-2.1042187213897705, 2.5202925205230713], + [-3.7829394340515137, -2.3957436084747314], + [3.516111135482788, -7.1636552810668945], + [9.866351127624512, -2.314584970474243], + [8.319758415222168, -2.291208267211914], + [2.2537453174591064, 0.4385969936847687], + [-5.847280979156494, -1.3948016166687012], + [4.219962120056152, -3.6937265396118164], + [2.0385563373565674, -3.659510374069214], + [3.641491174697876, -6.738723278045654], + [1.2548667192459106, 3.2380406856536865], + [10.092849731445312, -2.5437045097351074], + [-2.25207781791687, 2.8423259258270264], + [-2.4530413150787354, 2.069335699081421], + [-4.160342693328857, 4.749477386474609], + [7.348944187164307, -4.078629493713379], + [1.2844882011413574, -7.347212791442871], + [7.357326507568359, 8.943462371826172], + [-0.06450778990983963, 12.82725715637207], + [8.80385684967041, -2.324892044067383], + [0.27216047048568726, 10.999357223510742], + [2.7760026454925537, -7.6525983810424805], + [8.542173385620117, -2.617183208465576], + [-5.065060615539551, -6.778374671936035], + [4.95092248916626, 7.1986236572265625], + [-4.394970417022705, -2.693756580352783], + [-3.7823469638824463, 5.218251705169678], + [0.1679399013519287, 10.094537734985352], + [0.13269764184951782, 11.776084899902344], + [6.447271347045898, 8.085457801818848], + [3.045325756072998, -8.588197708129883], + [6.178542137145996, -1.2572215795516968], + [-4.750648498535156, -7.280781269073486], + [-4.639210224151611, -2.852905035018921], + [-4.087886333465576, -5.315810203552246], + [6.871328353881836, -1.820816159248352], + [5.622061729431152, 7.40761661529541], + [2.70163893699646, -9.222393035888672], + [-6.287301540374756, 7.289496898651123], + [-3.6852195262908936, 3.766838788986206], + [-3.536911725997925, -4.348322868347168], + [-4.866421699523926, 3.5819790363311768], + [-4.590601444244385, -7.364307403564453], + [8.30338191986084, -2.3426759243011475], + [2.2272884845733643, 6.180782794952393], + [-4.802842140197754, -6.51369571685791], + [8.55004596710205, -2.5539629459381104], + [4.0111083984375, -3.3877933025360107], + [-4.021506309509277, -6.123418807983398], + [3.2633628845214844, -4.5459065437316895], + [7.844781875610352, -2.1629226207733154], + [5.758055686950684, 7.848087310791016], + [-4.85747766494751, -4.206371307373047], + [4.77390718460083, -2.8539156913757324], + [4.208160877227783, -3.354607343673706], + [3.8239340782165527, 1.4661744832992554], + [-1.121359944343567, -3.727789878845215], + [-5.017358303070068, -1.1071645021438599], + [4.598583698272705, -4.519534111022949], + [5.71280574798584, -1.5827728509902954], + [0.49368005990982056, -0.9702649712562561], + [-4.690452575683594, -3.145034074783325], + [-5.078453063964844, 4.995092391967773], + [-6.626317501068115, 7.768075942993164], + [9.368066787719727, -2.3880741596221924], + [3.273137331008911, -7.492985248565674], + [6.83090877532959, 8.533275604248047], + [-5.688891887664795, 6.20966911315918], + [-4.794209957122803, -6.754882335662842], + [-2.0194509029388428, 0.35722923278808594], + [7.340428352355957, -2.0126988887786865], + [-5.09564733505249, -1.8478981256484985], + [-3.886430501937866, 5.602742671966553], + [2.7595973014831543, 6.178266525268555], + [3.69433856010437, -3.5579512119293213], + [3.5182762145996094, -6.593972206115723], + [1.734405279159546, -7.837611675262451], + [0.0928904339671135, 9.964696884155273], + [-5.744154930114746, 1.7191866636276245], + [9.829157829284668, -2.413421630859375], + [4.656342506408691, 6.600516319274902], + [6.8370585441589355, -2.013333320617676], + [-3.523690700531006, -5.997758388519287], + [0.23049521446228027, 10.402326583862305], + [0.2077123522758484, 10.624187469482422], + [-2.229102849960327, 2.1391029357910156], + [-2.1821582317352295, 1.5278881788253784], + [6.161312103271484, -3.190293550491333], + [8.796972274780273, -2.2710914611816406], + [-2.154052495956421, 2.565725088119507], + [-2.164846897125244, 2.496713399887085], + [4.4247965812683105, -0.8216741681098938], + [6.184972286224365, 8.230085372924805], + [4.189157009124756, 7.135010719299316], + [7.472141742706299, -2.422712564468384], + [-5.675134181976318, -0.8248584270477295], + [-2.710653066635132, 1.5598633289337158], + [3.9185662269592285, 1.8687801361083984], + [-1.3415852785110474, 1.7209903001785278], + [2.232184886932373, -6.393824100494385], + [-5.265266418457031, -6.1260528564453125], + [4.009944438934326, 1.4061945676803589], + [7.783711910247803, -2.4263737201690674], + [-1.7074462175369263, 2.333277940750122], + [-4.673661708831787, 4.5713090896606445], + [2.312493085861206, 5.3426361083984375], + [-2.934584856033325, 3.0118601322174072], + [-0.027239926159381866, 9.738410949707031], + [-4.7457380294799805, -3.1761465072631836], + [-4.937133312225342, 6.215888023376465], + [1.695979356765747, 1.8548765182495117], + [-4.403894901275635, 4.6653242111206055], + [2.78525710105896, -8.697897911071777], + [-6.225786209106445, 6.631701469421387], + [7.085260391235352, -2.027120590209961], + [3.0235836505889893, -5.729528427124023], + [-5.285367965698242, -1.9060139656066895], + [-4.1065754890441895, 4.657613754272461], + [3.6220130920410156, 1.3210495710372925], + [5.335820198059082, 7.349834442138672], + [2.68060040473938, -6.2921462059021], + [-5.046136856079102, -1.3987194299697876], + [-2.175119161605835, 2.556304454803467], + [-4.237831115722656, 3.5688958168029785], + [7.45523738861084, -2.0089187622070312], + [8.237113952636719, 9.600746154785156], + [-4.313636779785156, -4.532940864562988], + [7.888106822967529, -2.17000412940979], + [-2.6709275245666504, 1.8031775951385498], + [4.402395248413086, 1.8880764245986938], + [3.6712539196014404, -6.783009052276611], + [-3.079373359680176, 5.121140480041504], + [-5.234799861907959, -2.6040844917297363], + [3.594996213912964, -5.8497114181518555], + [5.462854385375977, -0.7013007402420044], + [-2.1774532794952393, 2.709352731704712], + [6.710412502288818, -4.429471969604492], + [-4.199000835418701, -5.896498680114746], + [5.734405517578125, -1.172122597694397], + [-4.798166751861572, -2.3121252059936523], + [-3.6163032054901123, -5.959089279174805], + [2.5729544162750244, -8.338813781738281], + [3.418410539627075, -6.673297882080078], + [3.538400173187256, 7.138669013977051], + [9.1986722946167, -2.401859998703003], + [-5.156022071838379, 5.8901567459106445], + [-4.011131286621094, -1.9883286952972412], + [-1.9839143753051758, -3.285771608352661], + [4.8410820960998535, 6.861759662628174], + [0.20718544721603394, 10.312105178833008], + [1.6629891395568848, -3.4755260944366455], + [2.8037426471710205, 6.358569145202637], + [3.6766855716705322, -4.207388877868652], + [3.899521589279175, 6.708780288696289], + [8.302020072937012, -2.296887159347534], + [3.669762134552002, -4.1889543533325195], + [-3.4898571968078613, -5.897584915161133], + [-5.895717144012451, -2.172776222229004], + [-5.076844215393066, -6.5762481689453125], + [-0.8290124535560608, -0.42509084939956665], + [2.807183265686035, -4.617494583129883], + [-2.3111400604248047, 2.118828773498535], + [-1.421183705329895, 1.1615968942642212], + [5.177177906036377, 6.889510154724121], + [8.944830894470215, -2.2501633167266846], + [3.827533006668091, -7.212102890014648], + [-2.078951597213745, 2.590724229812622], + [8.141813278198242, -2.2379262447357178], + [3.112993001937866, -3.1952474117279053], + [0.5678691864013672, -0.9040890336036682], + [-2.3029730319976807, 2.1081535816192627], + [8.827913284301758, -2.3463058471679688], + [9.124079704284668, -2.421515703201294], + [-1.6707433462142944, 0.8460808992385864], + [-5.652863025665283, -0.028561953455209732], + [3.200556755065918, -7.110219478607178], + [-1.096232295036316, -2.244633674621582], + [1.3300954103469849, 1.9090077877044678], + [5.770269870758057, 7.142451286315918], + [4.761691093444824, -8.231332778930664], + [1.100816249847412, 3.638840913772583], + [-3.508669853210449, -5.84348201751709], + [2.246661901473999, 5.984305381774902], + [-5.773269176483154, 1.300898790359497], + [8.425421714782715, -2.3428852558135986], + [-2.501908540725708, 1.8907217979431152], + [0.21425622701644897, -0.4559292197227478], + [3.4366507530212402, 0.36736565828323364], + [0.5231226086616516, 9.890308380126953], + [6.899049282073975, 8.3360595703125], + [-1.5076957941055298, 1.7578290700912476], + [-5.470635890960693, -3.3835577964782715], + [6.395849704742432, -1.3906925916671753], + [2.5677499771118164, 0.29690131545066833], + [3.327026128768921, -5.18746280670166], + [4.316570281982422, -4.00303840637207], + [1.4618397951126099, 5.388144493103027], + [3.6173646450042725, -6.839337348937988], + [3.9178824424743652, 6.195695400238037], + [-2.295687675476074, 2.0388221740722656], + [6.7033843994140625, -1.5097311735153198], + [-2.921172857284546, -5.412025451660156], + [4.50770902633667, -0.9585819840431213], + [-4.468445301055908, -6.421855449676514], + [0.09494703263044357, 12.838401794433594], + [0.061384789645671844, 13.328712463378906], + [-2.630180597305298, 0.5282252430915833], + [-4.2058258056640625, -3.1620352268218994], + [4.122269630432129, -5.062771320343018], + [-2.504225015640259, -2.5422189235687256], + [3.594923973083496, 1.3450058698654175], + [-2.0411996841430664, 2.6931779384613037], + [-4.7883501052856445, 6.2144365310668945], + [-4.581045150756836, -6.624258041381836], + [1.312432050704956, -6.768784999847412], + [6.228557109832764, 7.709303379058838], + [3.3608477115631104, -6.705984115600586], + [8.756941795349121, -2.256458044052124], + [-4.089282989501953, 4.1023664474487305], + [-5.617356777191162, -2.8267323970794678], + [-2.9382166862487793, -4.68046760559082], + [4.3712334632873535, 5.794284820556641], + [4.932275772094727, -0.9864153861999512], + [-4.217161178588867, -1.6249037981033325], + [-2.189222574234009, 2.2071895599365234], + [2.8838298320770264, -10.17337703704834], + [-4.169175624847412, -6.915362358093262], + [0.2544490694999695, 11.165319442749023], + [4.801535129547119, 6.5392303466796875], + [2.114607095718384, 2.4850361347198486], + [1.6691350936889648, 3.452887535095215], + [-5.546810150146484, 6.27585506439209], + [3.196749210357666, -4.541939735412598], + [0.2187477946281433, 10.804044723510742], + [3.9313881397247314, 1.3430390357971191], + [4.034519195556641, 1.63280189037323], + [4.917425632476807, -2.8511784076690674], + [1.5590243339538574, -0.26584306359291077], + [-4.235228061676025, -2.509338140487671], + [9.138933181762695, -2.2923948764801025], + [0.12603598833084106, 9.961532592773438], + [6.066299915313721, -1.130350947380066], + [0.14062196016311646, 7.300112724304199], + [6.119049549102783, -1.0592281818389893], + [0.552191436290741, -4.9016947746276855], + [5.494802474975586, -2.0174593925476074], + [-2.083514451980591, 2.4852449893951416], + [2.0376667976379395, -8.104004859924316], + [3.4170732498168945, -3.216885566711426], + [0.30990806221961975, 0.431950181722641], + [-5.642360210418701, 6.389591217041016], + [3.0573434829711914, 4.532278060913086], + [3.255774736404419, -4.248317718505859], + [6.508810043334961, -5.161943435668945], + [-6.463141441345215, -1.5356175899505615], + [-2.386505603790283, -3.474562644958496], + [0.03775476664304733, 11.901448249816895], + [3.458732843399048, -4.858116149902344], + [1.0831692218780518, -1.7299691438674927], + [3.050455331802368, -4.279983997344971], + [6.950289249420166, 8.309276580810547], + [-2.7405800819396973, -3.4132840633392334], + [4.970566749572754, 6.962114334106445], + [-2.3463337421417236, 5.58154821395874], + [0.5154654383659363, -1.0322407484054565], + [-4.190673351287842, -2.625114679336548], + [-3.90323805809021, -6.540480136871338], + [-2.1087069511413574, 2.5550954341888428], + [6.373510837554932, -1.1140576601028442], + [-2.5101025104522705, 2.35866641998291], + [-2.224351167678833, 2.470632314682007], + [3.498997926712036, -3.9583942890167236], + [-4.529290676116943, 3.703186273574829], + [0.9085240960121155, 6.048126697540283], + [-3.903475046157837, 5.630298137664795], + [0.04805421084165573, 9.8419189453125], + [3.003810405731201, 0.5029937624931335], + [3.0517690181732178, -3.486699104309082], + [6.0174078941345215, 7.311642646789551], + [-0.023413963615894318, 13.929360389709473], + [9.992722511291504, -2.513814687728882], + [-5.539368629455566, -1.8451826572418213], + [-3.299619436264038, -2.56059193611145], + [4.238851547241211, 1.6979706287384033], + [0.041726283729076385, 12.615867614746094], + [-5.5954766273498535, -2.338897466659546], + [0.03625183552503586, 9.239784240722656], + [1.422853946685791, -0.6533005237579346], + [2.2889764308929443, -7.900334358215332], + [-7.439274311065674, -0.08854496479034424], + [-4.960409164428711, -0.6845429539680481], + [-4.337707996368408, -6.7005462646484375], + [-2.50594425201416, 1.4170277118682861], + [-1.2521214485168457, -2.2122910022735596], + [-4.232015609741211, -6.695400238037109], + [0.19867193698883057, 10.594962120056152], + [-3.522768259048462, -1.6823399066925049], + [2.809393882751465, -3.9539899826049805], + [-1.9481639862060547, 1.757492184638977], + [1.6181728839874268, -6.479133605957031], + [-4.507584095001221, 5.3063883781433105], + [0.45896369218826294, 9.956462860107422], + [-5.498310565948486, 5.975188732147217], + [-3.015111207962036, -4.592535018920898], + [-5.239619731903076, -2.8263680934906006], + [5.673025608062744, -4.650815963745117], + [-2.2653591632843018, -3.9209845066070557], + [2.998472213745117, -8.4069185256958], + [-2.23711895942688, 2.279764175415039], + [2.3888189792633057, -6.606931686401367], + [3.0841522216796875, -4.649986743927002], + [2.1186110973358154, -2.5106723308563232], + [6.233011245727539, -2.1193172931671143], + [5.31270694732666, -1.0484684705734253], + [2.2589046955108643, 4.459975719451904], + [-4.499974250793457, -3.9269425868988037], + [2.4447648525238037, -4.118594169616699], + [4.7063398361206055, -3.50766921043396], + [2.2909677028656006, 4.388974189758301], + [-2.217838764190674, 2.502190351486206], + [-0.01169634610414505, 12.442403793334961], + [-0.6338366866111755, 0.6215254664421082], + [-4.591466903686523, -0.9356887340545654], + [8.795945167541504, -2.6261684894561768], + [2.9024765491485596, -6.2806243896484375], + [0.058997683227062225, 5.582404613494873], + [-4.313328266143799, -1.1841338872909546], + [-5.079545021057129, 5.507633209228516], + [3.873314380645752, -3.5889241695404053], + [1.8589866161346436, 5.056698322296143], + [5.9563822746276855, -1.3569672107696533], + [-0.5250216722488403, -0.6789920926094055], + [0.09404557198286057, 12.169473648071289], + [4.262335300445557, 5.7748517990112305], + [-0.7528921961784363, 1.670192837715149], + [-4.495572566986084, -1.593723177909851], + [0.15613645315170288, 9.937162399291992], + [3.8830766677856445, -8.694073677062988], + [-4.559382915496826, -7.2420501708984375], + [3.0204579830169678, -4.1339640617370605], + [3.6766607761383057, 1.4069868326187134], + [5.201714038848877, -1.1956241130828857], + [1.3768885135650635, -7.428676128387451], + [6.413621425628662, 8.128805160522461], + [0.12528884410858154, 11.14239501953125], + [-1.103021502494812, 1.4455907344818115], + [-6.371388912200928, 6.500520706176758], + [2.924358606338501, -2.9348504543304443], + [8.17702579498291, -2.2909352779388428], + [4.164321422576904, 1.7530056238174438], + [-3.8050599098205566, -3.847160577774048], + [-3.230053424835205, -5.549628257751465], + [3.0535635948181152, -3.7060816287994385], + [1.6761987209320068, -0.15953698754310608], + [2.3321831226348877, 0.33333519101142883], + [-4.825340270996094, 5.238224029541016], + [0.1695287823677063, 10.578771591186523], + [6.80873441696167, 8.40857982635498], + [8.718611717224121, -2.498840093612671], + [0.93635493516922, 4.94282341003418], + [-0.06358308345079422, 13.412500381469727], + [5.820083141326904, -2.902703046798706], + [-2.9283363819122314, 5.85255241394043], + [-4.820855617523193, -6.702295303344727], + [-2.058424949645996, 0.999932050704956], + [-4.370753288269043, -5.84440803527832], + [-5.662996768951416, 6.566110610961914], + [-4.69977331161499, -5.6603193283081055], + [-4.005589008331299, -5.559306621551514], + [-4.215994358062744, 4.9639410972595215], + [-4.1237874031066895, 5.7053704261779785], + [-3.808546304702759, -4.2998528480529785], + [-3.967545747756958, 4.755158424377441], + [0.5575323700904846, -0.9726473093032837], + [0.14540523290634155, 10.083779335021973], + [2.3168063163757324, 6.175132751464844], + [-3.7127022743225098, 5.312000274658203], + [-1.3946712017059326, -1.8959866762161255], + [3.3196756839752197, -5.146918296813965], + [-0.056532926857471466, 12.837862968444824], + [-0.9166719913482666, 1.7350746393203735], + [4.49203634262085, -3.0153989791870117], + [-4.638727188110352, -6.884661674499512], + [-0.11078894883394241, 12.024320602416992], + [-4.0892720222473145, -6.304119110107422], + [-5.459931373596191, -1.8400558233261108], + [6.941407680511475, -1.1827081441879272], + [3.8305726051330566, -7.438435077667236], + [-4.56673002243042, -6.615581512451172], + [-1.9673992395401, -2.1212527751922607], + [0.6507534980773926, -5.926794052124023], + [4.762054443359375, -3.3144679069519043], + [-1.1597284078598022, 1.5000866651535034], + [2.787951707839966, -6.54754638671875], + [0.6275990605354309, -2.9158756732940674], + [7.369729518890381, -2.1482279300689697], + [-4.320716857910156, 6.0152974128723145], + [8.308618545532227, -2.463142156600952], + [-2.1144790649414062, 2.7239115238189697], + [-2.5657877922058105, -3.9254393577575684], + [2.4921247959136963, -8.617825508117676], + [5.20237398147583, -2.2779910564422607], + [0.13244765996932983, 9.925394058227539], + [-1.75873601436615, 0.022073086351156235], + [9.159394264221191, -2.3789641857147217], + [-3.5889556407928467, 1.9086543321609497], + [-3.9677982330322266, -0.697071373462677], + [0.19285249710083008, 11.737528800964355], + [-4.579392910003662, -7.068843841552734], + [0.21791619062423706, 0.149773508310318], + [-4.626347064971924, -6.145991325378418], + [4.752492427825928, 7.53965425491333], + [2.603736639022827, -0.6180334687232971], + [-3.3622190952301025, 5.903372764587402], + [1.062508463859558, -0.5789433717727661], + [-4.407683849334717, 4.519476890563965], + [0.03421007841825485, 9.272500991821289], + [-3.878481149673462, 2.069143056869507], + [5.721171855926514, -2.6464626789093018], + [-2.4118311405181885, 2.252647876739502], + [2.851790189743042, -6.058317184448242], + [3.2845702171325684, -5.40358829498291], + [0.15286153554916382, 10.93173599243164], + [-4.615352630615234, -2.461364269256592], + [0.21159428358078003, 10.67638111114502], + [6.767005443572998, -1.6539336442947388], + [0.125835120677948, -3.045151472091675], + [-4.633211612701416, -0.7984946966171265], + [5.997926235198975, -2.4662234783172607], + [5.230533123016357, 7.06842041015625], + [7.547923564910889, -1.7216435670852661], + [-5.5961833000183105, 6.324069023132324], + [3.6009278297424316, -5.419497966766357], + [2.675079107284546, -7.810245037078857], + [4.3084588050842285, -3.540395498275757], + [6.787566661834717, -2.62131667137146], + [1.7902183532714844, -7.177228927612305], + [-3.717686891555786, -1.3215473890304565], + [9.425164222717285, -2.385835647583008], + [0.7028911709785461, 11.344318389892578], + [-6.6613545417785645, 8.12435531616211], + [3.261892080307007, -4.724205493927002], + [9.766454696655273, -2.414461374282837], + [2.208244562149048, 1.4986118078231812], + [-3.4878525733947754, -0.9768681526184082], + [-3.218858480453491, -5.299324989318848], + [-2.6463828086853027, 0.1778509020805359], + [-3.6580517292022705, 5.488945007324219], + [1.9331297874450684, -6.008555889129639], + [-2.3832147121429443, 2.348097085952759], + [10.024434089660645, -2.4274346828460693], + [-4.740433216094971, -3.4754974842071533], + [10.92001724243164, -2.5334713459014893], + [4.574769496917725, 6.597308158874512], + [-2.1660900115966797, 2.372512102127075], + [-5.798121929168701, 8.71773624420166], + [3.8210651874542236, -3.3385117053985596], + [6.268717288970947, 7.973947525024414], + [5.894629955291748, -1.272952675819397], + [-3.8219635486602783, -5.710061073303223], + [-5.120761394500732, 4.206172943115234], + [0.005467943847179413, 9.41455078125], + [-5.171475887298584, 5.226734161376953], + [2.534346103668213, 1.013994812965393], + [-0.652962863445282, 0.951275110244751], + [6.639767169952393, 8.29776382446289], + [-2.2441649436950684, -1.5024385452270508], + [-0.7441078424453735, -2.80683970451355], + [3.834678888320923, -0.3618517518043518], + [2.3511064052581787, -8.543514251708984], + [4.567114353179932, -3.5164897441864014], + [-5.471746921539307, 5.707759857177734], + [7.067837238311768, 8.574487686157227], + [6.646675109863281, -3.2767081260681152], + [-2.1296119689941406, 2.4595794677734375], + [-3.1033694744110107, -5.067231178283691], + [2.930718183517456, -4.162701606750488], + [3.4159820079803467, 1.9871906042099], + [-0.05147809535264969, 13.073028564453125], + [-5.058926105499268, -5.9751691818237305], + [4.080185890197754, 1.421654462814331], + [3.8382151126861572, -7.39182710647583], + [-4.744566440582275, -3.324306011199951], + [2.9864561557769775, 1.5810636281967163], + [0.2175561785697937, 10.296180725097656], + [-4.732985496520996, 3.865330934524536], + [0.1768069863319397, 10.371223449707031], + [3.347496509552002, -4.42836856842041], + [-3.6202311515808105, 6.656716346740723], + [1.1302011013031006, -5.847274303436279], + [-3.29795503616333, -4.867711544036865], + [5.267014980316162, -7.035569667816162], + [-0.16264942288398743, -1.7678401470184326], + [2.9509828090667725, -4.151729583740234], + [3.4984421730041504, -3.86441969871521], + [9.007723808288574, -2.337385416030884], + [-2.030118465423584, 1.332016110420227], + [9.75306224822998, -2.40574049949646], + [0.5904106497764587, -3.628793954849243], + [0.006422452628612518, 12.251264572143555], + [2.1409847736358643, 0.35947757959365845], + [-3.78647780418396, -2.8563196659088135], + [2.663883686065674, -7.082231044769287], + [3.1997392177581787, -6.362139701843262], + [2.743993043899536, -10.245259284973145], + [0.7232772707939148, -0.9212685823440552], + [2.0673108100891113, -5.147597789764404], + [2.0986108779907227, -7.195991516113281], + [-2.6155812740325928, 1.921972632408142], + [3.5637333393096924, -4.60069465637207], + [0.03228967636823654, 9.724149703979492], + [2.3411223888397217, -8.864378929138184], + [4.0715861320495605, -8.532308578491211], + [10.504740715026855, -2.4739930629730225], + [10.155539512634277, -2.5053489208221436], + [-4.525017261505127, 4.772040843963623], + [3.6085941791534424, -3.33267879486084], + [0.10041319578886032, 12.09568977355957], + [-5.369494915008545, 6.187646389007568], + [3.271017074584961, -3.8250434398651123], + [4.334265232086182, -5.237975120544434], + [-4.472043991088867, 3.629300355911255], + [4.892177581787109, -3.3988406658172607], + [0.20150607824325562, 12.735461235046387], + [2.3597824573516846, 2.698132276535034], + [3.006065607070923, -4.077530384063721], + [0.03493934124708176, 11.276449203491211], + [3.519127368927002, -8.992568969726562], + [0.05965345352888107, 12.109723091125488], + [3.177894353866577, 6.60537052154541], + [8.850629806518555, -2.4188082218170166], + [-0.07183939963579178, 9.647493362426758], + [-5.552714824676514, 5.991123676300049], + [3.3224165439605713, -4.004935264587402], + [-3.9295175075531006, 3.8965036869049072], + [3.7976272106170654, -6.806756496429443], + [8.69372272491455, -2.5458991527557373], + [-5.540812015533447, 4.9350361824035645], + [2.06579327583313, 3.3885600566864014], + [-6.804153919219971, 7.15317440032959], + [-5.68118143081665, -2.026977300643921], + [6.494194984436035, 8.807157516479492], + [1.9354815483093262, 0.23579201102256775], + [-3.9453556537628174, -0.8556327819824219], + [5.660772800445557, 8.024084091186523], + [7.893429756164551, -2.5666463375091553], + [6.048725605010986, -4.804143905639648], + [10.006213188171387, -2.450934648513794], + [4.183134078979492, -0.19506174325942993], + [8.518688201904297, -2.4709064960479736], + [4.14792537689209, -3.6091301441192627], + [10.633905410766602, -2.4140145778656006], + [-6.728109836578369, 7.86445426940918], + [9.268721580505371, -2.357048511505127], + [0.18963325023651123, 5.725210189819336], + [-0.5867093801498413, 6.417756080627441], + [7.077442169189453, 8.559394836425781], + [3.2281596660614014, -4.542369842529297], + [0.04531096667051315, 10.663698196411133], + [1.8297770023345947, 4.321013450622559], + [0.26928770542144775, 8.750524520874023], + [3.9814093112945557, -2.6661007404327393], + [-1.2290256023406982, 2.118558883666992], + [-6.529821395874023, 7.338131904602051], + [-0.6269491910934448, 0.9429230690002441], + [0.2233157753944397, 10.879955291748047], + [6.391137599945068, 7.851470947265625], + [2.9203145503997803, -2.8074417114257812], + [2.863429307937622, 1.8189390897750854], + [4.6409759521484375, -4.393960475921631], + [-4.909013271331787, 5.5685834884643555], + [-5.235665798187256, 6.128632545471191], + [7.172733783721924, 8.759723663330078], + [-2.314021587371826, 2.3015451431274414], + [-5.813830852508545, 6.472570419311523], + [-7.275641918182373, 0.27066099643707275], + [0.21164685487747192, 10.678394317626953], + [-2.675236463546753, 5.894062519073486], + [2.1292548179626465, 4.682767868041992], + [9.171985626220703, -2.3558924198150635], + [6.242992877960205, 7.974781036376953], + [-0.3656986355781555, 1.0878071784973145], + [8.777602195739746, -2.27115797996521], + [2.7067925930023193, -3.6459457874298096], + [4.354403972625732, -4.902591705322266], + [7.9574503898620605, -2.2071375846862793], + [-2.7855236530303955, 1.2295416593551636], + [-2.8352901935577393, -3.8092329502105713], + [-2.622178316116333, 1.9327938556671143], + [6.317678928375244, 8.131125450134277], + [3.145265579223633, 1.182196021080017], + [0.1275256872177124, 9.834014892578125], + [-4.084323406219482, -2.572054147720337], + [3.6858272552490234, -6.890650749206543], + [-3.860475778579712, 5.300394058227539], + [5.016648292541504, 6.3545756340026855], + [6.670110702514648, 8.035637855529785], + [2.3168461322784424, 5.906632900238037], + [5.810334205627441, -3.086681604385376], + [-6.1921563148498535, -1.2376292943954468], + [4.054162502288818, 6.501140117645264], + [-2.717102527618408, 3.0033979415893555], + [-0.6430001258850098, -0.9476443529129028], + [-5.120577335357666, -1.8717139959335327], + [3.350907325744629, -3.3527464866638184], + [5.0838847160339355, -1.0753529071807861], + [-4.214777946472168, 7.101358413696289], + [-0.048157401382923126, 14.81428337097168], + [-2.451033353805542, -4.277482986450195], + [-5.308537006378174, -8.143268585205078], + [2.2521910667419434, 5.4936418533325195], + [4.368081569671631, 1.9688907861709595], + [-6.068390369415283, -0.07482993602752686], + [-2.318422317504883, 1.7328157424926758], + [2.2894251346588135, -8.356452941894531], + [-0.30295708775520325, -1.7006338834762573], + [-2.2127621173858643, 2.0010135173797607], + [8.23099422454834, -2.2531683444976807], + [-5.124928951263428, -1.8290529251098633], + [1.1414872407913208, 8.589212417602539], + [-3.968475103378296, -3.8220174312591553], + [2.441164255142212, -7.258893013000488], + [-5.326039791107178, -2.9977524280548096], + [6.205460071563721, -1.5056291818618774], + [3.4529354572296143, -6.487522125244141], + [0.21825534105300903, 10.9879732131958], + [10.426725387573242, -2.4012176990509033], + [-4.781254291534424, -6.120505332946777], + [7.082390308380127, -1.789453148841858], + [-4.086556911468506, -5.895167350769043], + [7.193600177764893, -1.6412012577056885], + [-0.25441479682922363, -1.6099376678466797], + [8.257002830505371, -2.4287378787994385], + [-5.800084590911865, -0.6490606665611267], + [-4.574293613433838, -7.3328938484191895], + [2.875944137573242, -4.0945539474487305], + [-4.918711185455322, -6.755890846252441], + [6.50653076171875, -1.3987332582473755], + [-3.6369550228118896, -2.05049729347229], + [-2.115039110183716, 2.458587169647217], + [-2.4853122234344482, -4.181072235107422], + [-3.7236225605010986, -1.0821529626846313], + [4.5275750160217285, -3.1469695568084717], + [5.97558069229126, 7.455496311187744], + [2.983893394470215, -4.254543304443359], + [-2.489485025405884, -1.6306118965148926], + [-1.1877093315124512, -1.8724093437194824], + [0.14365345239639282, 9.941564559936523], + [2.473562002182007, 3.6588521003723145], + [-5.8773512840271, 6.862299919128418], + [-2.2676517963409424, 2.2549893856048584], + [-6.939476490020752, 8.006814956665039], + [9.052271842956543, -2.4167563915252686], + [-4.412989139556885, -1.7163193225860596], + [4.583048343658447, 2.039497137069702], + [8.881338119506836, -2.326981782913208], + [6.442349910736084, 8.44412612915039], + [-4.690542697906494, 4.223610877990723], + [-0.5521241426467896, 0.14741268754005432], + [-1.6964918375015259, 2.0759716033935547], + [7.688164710998535, -1.992422342300415], + [0.13728970289230347, 11.917411804199219], + [-2.157788038253784, 2.916577100753784], + [-4.305853366851807, -1.7618517875671387], + [7.571431636810303, -1.9040818214416504], + [10.62795639038086, -2.491506814956665], + [-3.5808167457580566, 2.319385051727295], + [0.06359647959470749, 11.94064712524414], + [4.7748847007751465, 6.984976291656494], + [-4.1813883781433105, -5.952956199645996], + [0.5823155641555786, -0.9761126041412354], + [-5.347001552581787, 5.494454860687256], + [3.0866596698760986, -4.35239839553833], + [0.18109333515167236, 10.43365478515625], + [1.3050947189331055, -6.281342506408691], + [-3.8407602310180664, -5.4875030517578125], + [3.6735241413116455, 1.1634970903396606], + [7.717381000518799, -2.3309285640716553], + [7.629720687866211, -2.316629648208618], + [3.4607832431793213, -6.628537178039551], + [0.7233486771583557, -0.8953189849853516], + [-6.127282619476318, 2.448417901992798], + [4.239951133728027, -3.573704481124878], + [2.2843310832977295, -6.517577171325684], + [7.1436028480529785, -1.6618117094039917], + [-2.390329599380493, 2.114309072494507], + [-4.348941802978516, 5.515805721282959], + [-2.0013427734375, 2.5462522506713867], + [8.498791694641113, -2.404670476913452], + [-5.195680141448975, -3.5051677227020264], + [-3.8827571868896484, -1.0710872411727905], + [4.895908355712891, 2.1115305423736572], + [3.2310545444488525, 0.8425114154815674], + [3.048523187637329, -4.203726768493652], + [-1.977502465248108, -4.153896808624268], + [-2.206493377685547, 2.0486295223236084], + [7.3289947509765625, -2.016965627670288], + [-3.7694923877716064, -1.0741626024246216], + [3.1435649394989014, -3.8473007678985596], + [-2.7953972816467285, 1.0132859945297241], + [-5.538234233856201, -0.03152156248688698], + [3.900559186935425, -7.806739807128906], + [5.226467132568359, -1.3169289827346802], + [3.3549134731292725, -4.341125965118408], + [5.613624095916748, -4.9514265060424805], + [8.3384428024292, -2.2099058628082275], + [-2.686260461807251, 1.8801459074020386], + [-2.1021411418914795, 2.4717977046966553], + [0.12749344110488892, 11.714174270629883], + [3.181020736694336, -2.7596917152404785], + [-3.900588274002075, -1.2756085395812988], + [-0.3734513819217682, -0.787468671798706], + [-5.098874568939209, -3.4226062297821045], + [2.4401044845581055, 5.621037006378174], + [0.02043323963880539, 9.323951721191406], + [-6.630625247955322, 0.04768907651305199], + [3.6811535358428955, -3.4131484031677246], + [1.1516318321228027, 6.507317543029785], + [-2.451998233795166, 2.104630947113037], + [3.7977561950683594, -3.155770778656006], + [-4.8130717277526855, 4.520087242126465], + [1.6353716850280762, -7.098723411560059], + [-5.879304885864258, 5.184910297393799], + [1.0332462787628174, -6.468380928039551], + [0.26077330112457275, 10.601512908935547], + [2.6988730430603027, -9.087169647216797], + [2.7643425464630127, -7.349179744720459], + [-0.1187473013997078, -1.7914847135543823], + [-2.1864542961120605, -3.6954598426818848], + [1.6690468788146973, -4.006416320800781], + [-5.90113639831543, -0.04428279772400856], + [-2.4521312713623047, 1.6645795106887817], + [0.19363254308700562, 10.279230117797852], + [7.037752628326416, 8.47195053100586], + [4.9169020652771, -3.3675756454467773], + [5.396625995635986, 7.194623947143555], + [2.291884183883667, -8.69546890258789], + [7.706687927246094, -2.017054557800293], + [2.1214640140533447, 2.1987335681915283], + [2.1497812271118164, -0.44002726674079895], + [5.838868141174316, -1.3160935640335083], + [0.03299849480390549, 11.480778694152832], + [-2.319852590560913, -0.7750633955001831], + [1.229215145111084, 1.2538981437683105], + [-4.640120029449463, -7.339098930358887], + [5.602447032928467, 7.449498653411865], + [7.7563157081604, -2.225879669189453], + [-4.3802947998046875, -1.774450659751892], + [-2.081406831741333, 2.5571858882904053], + [-3.0726373195648193, -5.430752754211426], + [3.615797281265259, 1.8335914611816406], + [-4.873418807983398, 4.8149824142456055], + [0.18379366397857666, 0.9393014311790466], + [2.59287428855896, -7.487607479095459], + [4.1612162590026855, -3.913343667984009], + [-0.5034886598587036, -0.8056271076202393], + [0.28445810079574585, 1.2450758218765259], + [-1.3727846145629883, -3.5984089374542236], + [0.10534220188856125, 9.961368560791016], + [3.3595075607299805, -7.282695770263672], + [5.295740604400635, 7.61310338973999], + [-2.2263784408569336, 2.8708345890045166], + [-4.513144493103027, 3.3241629600524902], + [9.618422508239746, -2.354515314102173], + [7.400431156158447, -1.7732948064804077], + [-2.288600444793701, 2.081463575363159], + [-2.9910264015197754, -2.9645373821258545], + [3.6302151679992676, 1.4215130805969238], + [-1.6863420009613037, -3.488528251647949], + [-6.720736980438232, 7.406973838806152], + [-4.7404303550720215, -6.687853813171387], + [-0.04701865464448929, 13.253230094909668], + [8.27906608581543, -2.2520482540130615], + [8.605386734008789, -2.301549196243286], + [5.803348064422607, -1.7334660291671753], + [-2.0354931354522705, 2.426732063293457], + [2.958331346511841, -4.160343647003174], + [8.591873168945312, -2.3339684009552], + [2.8009326457977295, -3.624471426010132], + [3.2040674686431885, -6.147490501403809], + [-7.9689154624938965, 0.22859394550323486], + [0.38854193687438965, -0.9209127426147461], + [-5.701956272125244, 0.24106991291046143], + [-2.519874334335327, 0.4076858460903168], + [6.314980983734131, 7.970630645751953], + [3.221829891204834, 4.667117595672607], + [-2.157945394515991, 2.6671621799468994], + [-4.760187149047852, 4.040004730224609], + [-0.04238266497850418, 11.494037628173828], + [5.787877559661865, -1.3338654041290283], + [1.441136121749878, 5.343221664428711], + [-4.585643291473389, 5.215341567993164], + [-6.402595043182373, 6.461637496948242], + [7.110302925109863, -4.2455315589904785], + [0.26145297288894653, 11.361881256103516], + [-0.4606885612010956, -1.3258484601974487], + [-4.070829391479492, -2.542902946472168], + [-2.775822639465332, -4.028085708618164], + [-0.03086114674806595, 9.188203811645508], + [-4.6650309562683105, 6.093908309936523], + [-4.635862350463867, -1.7567940950393677], + [5.597065448760986, -1.7633421421051025], + [2.434170722961426, 3.959057569503784], + [-3.9381940364837646, 0.8661544919013977], + [9.124741554260254, -2.541567802429199], + [-5.628131866455078, -2.321263313293457], + [1.9774887561798096, 5.3773698806762695], + [-1.063796043395996, -0.5235964059829712], + [8.108458518981934, -2.4701552391052246], + [4.394360065460205, -1.2407928705215454], + [10.67209529876709, -2.46911883354187], + [4.098857879638672, 1.3432260751724243], + [5.3143439292907715, -2.836810350418091], + [7.886260986328125, -2.0674850940704346], + [-5.203300952911377, -0.8884684443473816], + [2.959866762161255, -5.858695030212402], + [-3.274169683456421, 5.018219947814941], + [2.46713924407959, 2.9075324535369873], + [5.403500556945801, 7.373687744140625], + [1.3073731660842896, -4.546741008758545], + [3.0130507946014404, 1.2800384759902954], + [6.9033637046813965, 8.386772155761719], + [2.3295910358428955, 4.55571985244751], + [-2.3710618019104004, 0.6060903072357178], + [2.7373390197753906, -3.778423547744751], + [2.752995014190674, 0.4600626230239868], + [-4.337669372558594, -1.3373594284057617], + [4.857032775878906, 6.585229396820068], + [-4.42351770401001, -6.810174942016602], + [9.814337730407715, -2.4412009716033936], + [1.8912928104400635, 5.514246940612793], + [3.5174548625946045, 1.478406310081482], + [0.13595277070999146, 9.84251594543457], + [-3.3476922512054443, -5.298079013824463], + [-4.6975274085998535, -6.557165622711182], + [-4.954990863800049, -6.310525894165039], + [4.543010711669922, -2.646592378616333], + [0.1384071707725525, 9.97892951965332], + [-5.744015216827393, -1.7837857007980347], + [3.375687599182129, -4.888101100921631], + [8.669598579406738, -2.372570276260376], + [3.277437925338745, -2.9160001277923584], + [-5.30261754989624, 5.671548843383789], + [1.8479558229446411, -6.444072246551514], + [-2.3814947605133057, 1.6495810747146606], + [7.973759174346924, -2.152050256729126], + [-1.0670899152755737, -0.24496504664421082], + [-2.2265286445617676, -1.5682810544967651], + [0.18250572681427002, 11.778024673461914], + [8.968457221984863, -2.29333233833313], + [-4.994021415710449, -1.958255410194397], + [-3.336057186126709, 4.384994983673096], + [-1.5937637090682983, -0.9173083901405334], + [-2.4413650035858154, 2.1947450637817383], + [3.0527029037475586, -4.301595211029053], + [0.19393515586853027, 10.80375862121582], + [-2.3479738235473633, -3.3744161128997803], + [1.5595117807388306, -7.524444103240967], + [4.979127407073975, -2.8405532836914062], + [-6.634235382080078, 7.7112836837768555], + [-0.7197006344795227, -1.4112048149108887], + [8.811883926391602, -2.864307165145874], + [5.978560924530029, 7.714324951171875], + [-6.606390476226807, 0.6425825357437134], + [-4.821509838104248, 4.793905258178711], + [6.669369220733643, -2.505688428878784], + [-3.6910316944122314, -1.463478684425354], + [3.9824020862579346, -4.541020393371582], + [3.5187082290649414, 1.6020493507385254], + [1.2778072357177734, -7.169946670532227], + [-5.02640962600708, -3.7009360790252686], + [0.9690051674842834, 7.281957149505615], + [2.3661506175994873, 6.029167175292969], + [0.3401491641998291, 0.36867254972457886], + [9.570526123046875, -2.342721700668335], + [3.43626070022583, -5.863204002380371], + [0.058381788432598114, 12.005369186401367], + [-4.809327602386475, 7.6424479484558105], + [5.64031982421875, -6.875309467315674], + [-3.6986238956451416, -2.2932262420654297], + [6.602993011474609, -0.9608252048492432], + [2.892277717590332, -4.087590217590332], + [5.079508304595947, -6.895572185516357], + [8.269150733947754, -2.4586312770843506], + [3.2929444313049316, -3.8456881046295166], + [5.449519634246826, -2.3245043754577637], + [0.008188657462596893, 12.377847671508789], + [-4.9621901512146, 5.49638557434082], + [3.2833428382873535, 1.4523969888687134], + [-1.5564783811569214, 1.6993017196655273], + [-2.951094627380371, -3.363941192626953], + [2.0874722003936768, 5.188352108001709], + [-0.24137327075004578, 0.1396474987268448], + [-2.28462553024292, 1.8550055027008057], + [-6.1532063484191895, 7.571523189544678], + [-1.844807505607605, 0.8291571140289307], + [-0.34753280878067017, 9.808767318725586], + [2.8192038536071777, -5.246209144592285], + [5.538430690765381, -3.351224422454834], + [7.538772106170654, -1.943436622619629], + [8.17575454711914, -2.287569284439087], + [7.478394985198975, 8.876184463500977], + [10.414881706237793, -2.4377846717834473], + [9.526226997375488, -2.3368866443634033], + [2.4002275466918945, -4.173219203948975], + [2.5369656085968018, -8.657959938049316], + [1.1734482049942017, 11.105879783630371], + [-3.568410634994507, -4.215968132019043], + [5.244021892547607, -1.0609761476516724], + [9.114648818969727, -2.3525679111480713], + [4.783792972564697, 6.502514839172363], + [-4.395622730255127, 3.746633768081665], + [0.2082616090774536, 11.922988891601562], + [2.964677095413208, 0.8357734084129333], + [4.371271133422852, 6.136349678039551], + [-2.877617120742798, -4.5279541015625], + [6.774351596832275, -2.8773796558380127], + [-0.39167189598083496, 0.9569841623306274], + [-0.7783039808273315, -0.1341327428817749], + [4.521437168121338, 6.848119258880615], + [3.2961976528167725, -7.382595539093018], + [6.494513988494873, 8.038274765014648], + [6.064382076263428, -3.19374418258667], + [-0.0056576207280159, 9.676371574401855], + [-2.278468370437622, 2.552558660507202], + [3.177935838699341, 4.840143203735352], + [-4.947928428649902, 6.040449142456055], + [-4.050790786743164, -2.9566404819488525], + [-2.3979368209838867, 1.813502550125122], + [-2.203826665878296, 2.5013978481292725], + [-0.2774601876735687, -1.6497167348861694], + [-0.5761560797691345, -2.361865282058716], + [0.09142368286848068, 11.625242233276367], + [3.1031172275543213, -6.5838165283203125], + [-7.047852039337158, 8.298938751220703], + [-0.0039138272404670715, 9.801841735839844], + [-0.44623881578445435, -1.477615237236023], + [6.31324577331543, 7.788214683532715], + [-5.65786600112915, 5.685747146606445], + [-1.523829460144043, 1.8146334886550903], + [1.948105812072754, 5.222302436828613], + [3.31969952583313, 4.810019493103027], + [-3.453303575515747, -2.5898406505584717], + [3.0389645099639893, -4.3281965255737305], + [-3.4594645500183105, 6.7823486328125], + [2.7541329860687256, -2.58644700050354], + [1.8520548343658447, -8.378609657287598], + [2.550522565841675, -5.610159873962402], + [-2.0453550815582275, 2.37768292427063], + [-4.653019428253174, -6.602583885192871], + [1.456871509552002, 3.5974156856536865], + [2.8036484718322754, -8.802032470703125], + [8.120850563049316, -2.222459554672241], + [7.57033634185791, 9.001541137695312], + [3.07270884513855, -4.209525108337402], + [6.675910949707031, -3.2200076580047607], + [-3.23093581199646, -5.2615861892700195], + [-6.685367107391357, 7.446047782897949], + [4.031754970550537, -3.7783114910125732], + [0.18167191743850708, 10.224943161010742], + [-3.13373064994812, 5.998988151550293], + [-0.9097667336463928, -3.2643649578094482], + [-2.379082202911377, 2.5078375339508057], + [-3.70809006690979, 0.1482512354850769], + [-0.018688030540943146, 13.872788429260254], + [2.572948694229126, -9.087353706359863], + [-2.223569631576538, -2.9583005905151367], + [10.15111255645752, -2.362241506576538], + [-0.7121109366416931, 4.168267250061035], + [-2.5637269020080566, 2.0657589435577393], + [0.2286176085472107, 11.516379356384277], + [3.206756830215454, -7.694900035858154], + [-0.9671518206596375, -2.7699291706085205], + [-2.004659414291382, 2.4904744625091553], + [-5.618793964385986, -2.2500064373016357], + [5.7229533195495605, -1.7558863162994385], + [1.8337657451629639, 3.8520655632019043], + [-4.093884468078613, -6.601831912994385], + [4.27062463760376, 6.4610724449157715], + [0.19171738624572754, 10.377677917480469], + [-3.109266996383667, -4.217809677124023], + [2.8019416332244873, -5.175478935241699], + [-4.896795749664307, 0.4524425268173218], + [3.0439612865448, -4.434897422790527], + [-6.983377933502197, -0.23687291145324707], + [2.6696927547454834, 1.0902842283248901], + [-2.840704917907715, -0.8624519109725952], + [-2.5001063346862793, -3.1982173919677734], + [-5.403932094573975, 0.26055604219436646], + [-4.8365302085876465, -7.8311767578125], + [1.9370877742767334, -7.568289756774902], + [-1.9090642929077148, 5.9798712730407715], + [-0.03372836858034134, 13.326530456542969], + [-2.216332197189331, 2.005136013031006], + [-4.302781581878662, -3.075334310531616], + [-3.475558042526245, 0.9476219415664673], + [3.560795307159424, -3.9021663665771484], + [-4.340732097625732, -6.910078048706055], + [-2.167949914932251, 2.4220995903015137], + [3.054426431655884, -4.052781581878662], + [2.764868974685669, -8.022385597229004], + [3.1481359004974365, -3.861140489578247], + [0.20927530527114868, 11.393770217895508], + [-5.431215286254883, -0.31849849224090576], + [-2.6710519790649414, 2.3666069507598877], + [6.01305627822876, -1.2850291728973389], + [1.099989652633667, 3.981086015701294], + [-2.769195318222046, -1.7696348428726196], + [0.16303688287734985, 10.061189651489258], + [2.375502824783325, -6.155058860778809], + [6.17160701751709, -5.387923717498779], + [0.15823513269424438, 10.295587539672852], + [-4.294982433319092, -6.847805023193359], + [-1.1266049146652222, -3.9324982166290283], + [1.7997914552688599, -7.873939514160156], + [8.195930480957031, -2.3051302433013916], + [1.6217451095581055, -2.0494959354400635], + [4.834593772888184, -1.0430009365081787], + [3.6146321296691895, 6.643795967102051], + [-1.6324701309204102, 0.8637466430664062], + [2.367434024810791, -7.879494667053223], + [-4.359045505523682, -6.501465797424316], + [2.562706708908081, -3.8155248165130615], + [-2.3645684719085693, 2.521653890609741], + [-2.2075552940368652, 2.2546048164367676], + [2.813495397567749, -6.527224063873291], + [3.334108352661133, -4.9509053230285645], + [-1.9366272687911987, 1.2208583354949951], + [-4.698448181152344, -7.29589319229126], + [8.360461235046387, -2.238858699798584], + [3.291093349456787, -3.3242969512939453], + [7.0049214363098145, -4.6679582595825195], + [2.8469018936157227, 1.190067172050476], + [1.4053605794906616, 1.0630123615264893], + [7.680187225341797, -2.0939781665802], + [-4.295695781707764, 7.2060933113098145], + [3.048312187194824, 0.6812978982925415], + [-0.057681865990161896, 14.220333099365234], + [3.8612916469573975, -3.6086795330047607], + [-3.8939433097839355, 3.819709300994873], + [10.437504768371582, -2.459066152572632], + [2.4058401584625244, -7.971292495727539], + [4.5872626304626465, -2.820887804031372], + [2.9348256587982178, -8.174403190612793], + [-0.32985398173332214, -1.6935166120529175], + [6.716525554656982, -1.8183727264404297], + [-3.9335591793060303, 3.7099385261535645], + [6.105977535247803, 8.295907974243164], + [2.6847100257873535, -3.706000804901123], + [-2.28613543510437, 2.2683184146881104], + [-2.063967227935791, 2.452099561691284], + [-3.669140100479126, -3.1881020069122314], + [0.043154917657375336, 1.139452338218689], + [-2.475202798843384, 2.1135997772216797], + [6.6221184730529785, 8.046037673950195], + [8.330962181091309, -2.4465644359588623], + [8.017321586608887, -2.0058987140655518], + [-6.639268398284912, 7.756547927856445], + [-1.5434573888778687, -1.881463646888733], + [0.41191327571868896, 0.6088183522224426], + [-2.200882911682129, 1.922149896621704], + [1.9345834255218506, -8.101497650146484], + [-0.718610942363739, -3.3520278930664062], + [-0.029169447720050812, 13.297483444213867], + [-2.2982242107391357, 2.1867568492889404], + [2.2039010524749756, 5.840204238891602], + [2.5517122745513916, -8.073356628417969], + [-2.7468643188476562, -5.6144561767578125], + [6.368941783905029, 7.849693775177002], + [3.2795891761779785, -9.068692207336426], + [6.132933139801025, 8.096979141235352], + [-0.5304081439971924, -1.7387126684188843], + [-2.192436456680298, 2.3349461555480957], + [-4.270902156829834, 5.995845794677734], + [6.104942798614502, -2.1965620517730713], + [2.8579623699188232, -7.123283386230469], + [-0.019894547760486603, 12.210792541503906], + [5.472296714782715, -4.188915729522705], + [2.5380361080169678, 4.808533191680908], + [-6.683703899383545, 4.782149314880371], + [7.933441638946533, -2.118602991104126], + [-4.336169719696045, -6.004981994628906], + [7.513120174407959, -2.0655791759490967], + [-5.406623363494873, 5.152064800262451], + [4.444120407104492, -1.5812982320785522], + [-2.0682644844055176, 2.373173713684082], + [-3.6994078159332275, -5.911130428314209], + [3.2989721298217773, -5.7640461921691895], + [-4.230465412139893, 4.595320224761963], + [-6.540165424346924, 4.833230495452881], + [2.6293911933898926, -9.987689971923828], + [-5.004647254943848, 4.006318092346191], + [5.199857711791992, -0.8439329862594604], + [-3.3968355655670166, 4.927848815917969], + [-6.55603551864624, 6.364267349243164], + [-7.323192119598389, -0.7185128927230835], + [-5.952951431274414, 0.28903037309646606], + [-4.63425350189209, -5.409185409545898], + [2.1128218173980713, -3.80419659614563], + [1.834852695465088, 5.405101776123047], + [-6.645874500274658, -1.6129984855651855], + [-4.279229164123535, -5.441103935241699], + [2.7375266551971436, -3.7230026721954346], + [3.5777060985565186, 1.221638560295105], + [3.058063507080078, -3.5861668586730957], + [-5.85080099105835, 7.1845269203186035], + [5.5491461753845215, -1.5843347311019897], + [-2.0132174491882324, 2.317246437072754], + [-4.894405364990234, 3.7344460487365723], + [7.927425861358643, -2.4250643253326416], + [-1.4120150804519653, 0.48188960552215576], + [2.519129753112793, -7.391958236694336], + [-1.4922921657562256, 2.277888536453247], + [0.003158263862133026, 13.234682083129883], + [-5.882877826690674, -1.4829076528549194], + [-2.4963974952697754, 1.8384764194488525], + [-0.4293651580810547, 10.44174575805664], + [3.9461023807525635, -7.398265838623047], + [0.10827367752790451, 10.255087852478027], + [-2.5467638969421387, 2.4359090328216553], + [1.4621703624725342, -7.674188613891602], + [-6.637388229370117, 2.506096839904785], + [-4.508792400360107, -2.9070165157318115], + [-2.369718313217163, 2.126354217529297], + [1.3731913566589355, -6.758094787597656], + [0.033174388110637665, -1.4757953882217407], + [6.262420654296875, -1.3705781698226929], + [3.0281693935394287, -7.620893478393555], + [0.036965303122997284, 12.880447387695312], + [3.7464640140533447, 1.6383790969848633], + [0.17415982484817505, 11.077503204345703], + [0.05240302532911301, 9.494100570678711], + [4.081543922424316, -5.658359527587891], + [3.0696260929107666, -4.346552848815918], + [-0.3404650092124939, 0.1695733368396759], + [-1.7884007692337036, -0.7174704074859619], + [3.0383453369140625, -4.235273838043213], + [1.9395043849945068, -8.166396141052246], + [-0.17242586612701416, 7.754940986633301], + [-2.7265288829803467, -3.3861491680145264], + [-1.0289615392684937, -2.052189588546753], + [-4.999851226806641, -3.3157598972320557], + [5.522538661956787, 6.881496906280518], + [-2.3553178310394287, -2.0671403408050537], + [-4.623312473297119, -5.303865432739258], + [7.950214862823486, -2.1451594829559326], + [-2.5180532932281494, 2.0111634731292725], + [-7.047637462615967, 8.237749099731445], + [3.988283395767212, -5.0004987716674805], + [2.563074827194214, -8.363834381103516], + [-2.2871525287628174, 1.2459090948104858], + [3.0923333168029785, -7.931558132171631], + [0.31134501099586487, 0.25576508045196533], + [2.6172378063201904, 0.3749721348285675], + [8.012164115905762, -2.635540723800659], + [-4.717523574829102, -7.373996734619141], + [1.0488553047180176, 4.48783540725708], + [0.016387395560741425, 13.000944137573242], + [3.1863629817962646, -4.1190290451049805], + [0.806679904460907, -0.44242268800735474], + [1.896211862564087, 2.100740909576416], + [-3.754995107650757, -1.4373241662979126], + [2.915985107421875, -4.125303268432617], + [4.032748699188232, 1.4772180318832397], + [10.287779808044434, -2.405001640319824], + [0.0473242923617363, 12.124656677246094], + [-4.204501152038574, 6.280317306518555], + [-2.3342926502227783, 1.282409429550171], + [8.3438720703125, -2.3375613689422607], + [1.7159745693206787, -7.403974533081055], + [7.475301742553711, -1.5815163850784302], + [3.463643789291382, -5.358889102935791], + [-5.5836968421936035, -1.5533956289291382], + [8.102835655212402, -2.5777697563171387], + [9.110142707824707, -2.3497121334075928], + [6.589779376983643, -1.7430301904678345], + [3.1510729789733887, -5.655076503753662], + [0.1497073769569397, 10.06128215789795], + [1.3654274940490723, 4.344724178314209], + [-5.232503414154053, -0.6998366117477417], + [0.16629058122634888, 8.72511100769043], + [0.6698607206344604, -0.8552666902542114], + [3.0993847846984863, -4.253907203674316], + [2.358950138092041, -6.617846488952637], + [-4.899688243865967, -3.7442190647125244], + [7.454094409942627, 9.06472396850586], + [-3.675894021987915, -5.147570610046387], + [-4.207043647766113, -1.4029461145401], + [5.793172836303711, -3.0549418926239014], + [8.647135734558105, -3.047922372817993], + [1.9452781677246094, 2.958099603652954], + [-0.028744466602802277, 12.655012130737305], + [4.633274555206299, 5.85050106048584], + [-3.471364736557007, -4.747411251068115], + [4.282187461853027, 1.9027115106582642], + [8.245257377624512, -2.560741424560547], + [0.1512877345085144, 0.8543185591697693], + [-4.829600811004639, -2.8320584297180176], + [2.1047096252441406, -4.980771064758301], + [3.1018404960632324, 0.3862423896789551], + [-6.190139293670654, 7.657587051391602], + [2.127335786819458, -8.548822402954102], + [2.442676067352295, 2.5440380573272705], + [-5.795125484466553, 6.8577494621276855], + [3.3074865341186523, -4.610570430755615], + [7.286769390106201, 8.735450744628906], + [-4.539987087249756, -0.9748397469520569], + [-0.679694414138794, -2.762866497039795], + [-0.12439464777708054, -3.8098344802856445], + [1.9038679599761963, 4.684598922729492], + [3.9689366817474365, -3.4084067344665527], + [-3.850116491317749, -6.118601322174072], + [2.919818639755249, -4.097469329833984], + [-0.8760570883750916, -2.6065614223480225], + [-3.745281219482422, -1.8241790533065796], + [0.1463596224784851, 8.530559539794922], + [2.922356128692627, 0.747708797454834], + [0.251010537147522, 11.076105117797852], + [-2.578667163848877, 2.418088912963867], + [2.3997604846954346, -3.3350963592529297], + [-3.886277437210083, -2.527719259262085], + [-3.761108875274658, -1.574185848236084], + [-4.997075080871582, 5.677043437957764], + [4.338656902313232, -2.89424729347229], + [-3.2940096855163574, 5.228049278259277], + [-2.376873016357422, 1.214969515800476], + [2.3373467922210693, -3.435256242752075], + [-6.101309776306152, 7.192068099975586], + [-2.215182304382324, -0.08160287141799927], + [3.527442455291748, -8.582707405090332], + [-6.000726699829102, 6.589412689208984], + [3.936596155166626, -4.151456356048584], + [-0.016062386333942413, 12.605701446533203], + [0.040658168494701385, 11.77648639678955], + [2.140390157699585, 7.082489967346191], + [0.2789759039878845, 12.542215347290039], + [7.390981197357178, -2.362060070037842], + [-2.1427969932556152, 2.738837480545044], + [4.823561668395996, 7.443929195404053], + [-0.6219555735588074, -2.5267302989959717], + [6.003345012664795, -5.289994716644287], + [2.365462303161621, 2.971780776977539], + [-2.254699230194092, 1.1967509984970093], + [-2.2966229915618896, 2.388808488845825], + [0.9413089156150818, -6.756438255310059], + [7.352447986602783, -2.797081232070923], + [8.196816444396973, -2.3082926273345947], + [-0.031034834682941437, 11.29519271850586], + [-0.10342366248369217, 13.76420783996582], + [3.7744054794311523, -5.959231376647949], + [6.022454738616943, 7.98480224609375], + [-5.3299241065979, 8.255364418029785], + [3.614847183227539, 6.349069118499756], + [0.09958749264478683, 10.075986862182617], + [-2.166442632675171, 2.7447292804718018], + [0.2439289093017578, 11.27774429321289], + [-3.3180859088897705, 6.8809685707092285], + [4.083199977874756, -3.686944007873535], + [-5.322641849517822, -1.7002824544906616], + [-0.09841949492692947, -1.63931405544281], + [4.346637725830078, 1.8189904689788818], + [-6.732184886932373, -0.3633143901824951], + [-5.024654865264893, 0.40087705850601196], + [8.484105110168457, -2.279472827911377], + [1.2800549268722534, 0.3143238425254822], + [8.69472599029541, -2.3645732402801514], + [-3.311567783355713, -5.744811534881592], + [-3.867980718612671, -1.610992193222046], + [3.638181447982788, 1.0831366777420044], + [11.774579048156738, -2.5335094928741455], + [-3.6535935401916504, -3.2391390800476074], + [3.7838826179504395, -3.5968668460845947], + [-1.4032188653945923, 1.9187462329864502], + [4.9770684242248535, -3.1412246227264404], + [-2.698751449584961, -4.128256797790527], + [2.9445924758911133, -4.085677146911621], + [0.2379494309425354, 10.614477157592773], + [-5.504489421844482, -0.9151699542999268], + [0.8749199509620667, 5.190774440765381], + [4.174071788787842, -7.885565757751465], + [-2.511357545852661, 0.8661848902702332], + [-8.042296409606934, 0.0608365498483181], + [1.2206494808197021, 6.216960906982422], + [-2.008211612701416, -0.8893867135047913], + [2.6005635261535645, 4.501287460327148], + [-3.3945372104644775, -3.471223831176758], + [3.038999080657959, -3.9925780296325684], + [-2.3154995441436768, 0.8946051597595215], + [0.9430190920829773, -6.827527046203613], + [-0.1120925024151802, -1.687970519065857], + [-3.3788158893585205, 5.126119613647461], + [-6.190828800201416, 7.027582168579102], + [-5.747957706451416, -0.4409526586532593], + [3.303757905960083, -3.762011766433716], + [7.328096389770508, -4.661174297332764], + [3.657607078552246, -7.555527687072754], + [7.108880043029785, 8.541102409362793], + [1.8953022956848145, 1.5249565839767456], + [-1.1377081871032715, -2.750535488128662], + [-4.160849571228027, 5.122234344482422], + [0.43802696466445923, 10.368596076965332], + [4.38386869430542, -3.450727701187134], + [-2.000898599624634, -3.794135332107544], + [-2.3107287883758545, -1.6573342084884644], + [-3.502742052078247, 5.337859630584717], + [-6.068385601043701, 6.8790411949157715], + [-5.9704413414001465, -0.9631526470184326], + [-2.7888503074645996, -5.168814659118652], + [5.285630226135254, -6.758291244506836], + [-2.8629653453826904, -3.1501920223236084], + [-1.006483554840088, -3.2669150829315186], + [8.725638389587402, -2.42215895652771], + [2.208113193511963, 0.6689413189888], + [1.2238736152648926, -7.529563903808594], + [3.5157530307769775, 0.31894078850746155], + [5.1125311851501465, 7.2030134201049805], + [7.414832592010498, -2.7943499088287354], + [4.614090442657471, -3.4626424312591553], + [5.674379825592041, 7.320438385009766], + [4.2902703285217285, -3.6342737674713135], + [-2.1148414611816406, 2.5749025344848633], + [-2.102182388305664, 1.0779566764831543], + [5.705241680145264, -1.1346935033798218], + [4.985957622528076, -2.406325578689575], + [11.066634178161621, -2.579630136489868], + [-6.46237325668335, -2.721212863922119], + [1.6125476360321045, -7.692992210388184], + [8.241127967834473, -2.238874912261963], + [-7.613377094268799, 8.820358276367188], + [0.15707504749298096, 11.19101619720459], + [-3.1502175331115723, -1.9140369892120361], + [1.438344955444336, -0.10292893648147583], + [-2.388002395629883, 2.1729209423065186], + [-3.670341730117798, -5.696187973022461], + [0.3278009295463562, 10.838699340820312], + [3.3797409534454346, -5.046245098114014], + [5.955111026763916, 7.834285736083984], + [3.6109910011291504, -5.777196407318115], + [3.4497711658477783, -5.7561821937561035], + [-3.7472009658813477, 5.553056716918945], + [-3.8203094005584717, 3.177091360092163], + [-4.285421848297119, 5.8228678703308105], + [5.828918933868408, -4.84505558013916], + [-5.650794506072998, 1.1187256574630737], + [-1.5926434993743896, 1.9058208465576172], + [-4.853122234344482, -7.433623790740967], + [3.489015817642212, 6.371943473815918], + [-2.1779046058654785, 2.1626267433166504], + [5.239065170288086, 7.464406967163086], + [-2.5015456676483154, 3.9979093074798584], + [0.013279549777507782, 10.307726860046387], + [-2.3330681324005127, 3.009488344192505], + [3.5609261989593506, -8.252298355102539], + [-6.004763603210449, 0.054839011281728745], + [-0.030743785202503204, 13.09451961517334], + [-6.362760066986084, -0.28747034072875977], + [-5.328657627105713, 4.780795574188232], + [-4.658205509185791, -5.35450553894043], + [-3.917982339859009, -5.534964561462402], + [0.14552351832389832, -1.4397464990615845], + [3.7443621158599854, 1.1962717771530151], + [-3.040344476699829, -5.26344108581543], + [0.9723595976829529, 5.690969467163086], + [0.5253298878669739, -1.1893452405929565], + [-2.205807685852051, 2.340407609939575], + [-6.210485935211182, 5.589568138122559], + [-2.3069286346435547, 2.0947763919830322], + [1.0508545637130737, -0.602733850479126], + [2.853132963180542, 4.583653926849365], + [-4.076785564422607, -2.762930154800415], + [8.127402305603027, -2.10648512840271], + [9.019915580749512, -2.4317028522491455], + [4.335703372955322, -8.039664268493652], + [-4.81845760345459, 5.868309020996094], + [0.9556689858436584, -4.816005706787109], + [9.407360076904297, -2.3396079540252686], + [1.5823791027069092, -0.1388634443283081], + [7.512259006500244, 8.93199634552002], + [-5.696091175079346, 7.751032829284668], + [2.6149141788482666, -9.383169174194336], + [-2.748598337173462, -2.625885009765625], + [1.4346688985824585, -6.358353614807129], + [5.624929904937744, -2.715092182159424], + [-2.0218913555145264, 2.3043906688690186], + [-5.166401386260986, -7.216407775878906], + [0.20432615280151367, 10.614738464355469], + [-2.4702255725860596, 2.5391600131988525], + [-2.18825101852417, 1.8643203973770142], + [-0.017535872757434845, 9.65540599822998], + [5.30609655380249, 0.40562349557876587], + [0.050623588263988495, 12.39577579498291], + [-3.093945264816284, -2.906587839126587], + [7.174707412719727, -1.869510293006897], + [1.7820045948028564, 5.1331963539123535], + [-2.2793750762939453, 1.2010911703109741], + [-2.455345392227173, -5.06970739364624], + [9.61184024810791, -2.474271059036255], + [8.772034645080566, -2.2629215717315674], + [-6.360705852508545, -0.6982854008674622], + [0.07197075337171555, 9.910470962524414], + [-6.6952948570251465, 1.9849191904067993], + [1.375555157661438, -0.5490866303443909], + [-5.53546667098999, -2.1053898334503174], + [-4.0151495933532715, -2.256788969039917], + [3.10561203956604, -4.256325721740723], + [1.921797275543213, 3.417543649673462], + [-2.4889776706695557, 2.1890716552734375], + [-3.7674787044525146, 4.993946075439453], + [7.873643398284912, -1.7001184225082397], + [8.254441261291504, -2.2193496227264404], + [-5.412292003631592, -0.913307785987854], + [-6.012441158294678, 4.711335182189941], + [0.06311815232038498, 9.871088027954102], + [1.2449829578399658, -0.6559810638427734], + [5.760943412780762, 7.676557540893555], + [-5.3395867347717285, 7.130375385284424], + [1.29010808467865, -0.45134231448173523], + [2.148855447769165, -7.0586256980896], + [8.101351737976074, -1.9958618879318237], + [0.18332308530807495, 10.328483581542969], + [1.9236581325531006, -8.621201515197754], + [-3.6490488052368164, -2.7785887718200684], + [-2.045754909515381, -0.8631365895271301], + [6.3157124519348145, -2.5382020473480225], + [-0.9793525338172913, -3.660121202468872], + [6.111749649047852, 7.599356651306152], + [7.802765369415283, -2.0877816677093506], + [2.0354583263397217, 3.5465505123138428], + [7.675520896911621, -2.213153839111328], + [-5.727060794830322, 8.325157165527344], + [3.3339765071868896, -4.641530990600586], + [3.9825994968414307, -4.497103691101074], + [0.18633651733398438, 10.326530456542969], + [-4.776444435119629, 3.5646092891693115], + [4.284776210784912, -7.040477752685547], + [0.6572932004928589, -4.520864009857178], + [2.652174711227417, 3.1158740520477295], + [1.6001629829406738, -0.10767640173435211], + [1.702519178390503, 3.8533689975738525], + [-3.6239969730377197, -6.063824653625488], + [3.9832961559295654, 0.22096768021583557], + [1.641216516494751, 0.631213903427124], + [9.493433952331543, -2.4305102825164795], + [-4.904333591461182, -6.661572456359863], + [3.1577796936035156, -6.801847457885742], + [-5.777153491973877, -0.9908690452575684], + [-3.7573916912078857, -5.756190299987793], + [-2.4931533336639404, -5.431239128112793], + [6.989885330200195, -6.264698028564453], + [2.475316286087036, 2.028236150741577], + [-0.6709467768669128, -0.8690494894981384], + [3.3571674823760986, -4.2103271484375], + [4.507723331451416, -6.645845413208008], + [-2.119765281677246, 2.593641519546509], + [0.6262122988700867, -1.3799852132797241], + [0.8819888830184937, 4.646656036376953], + [-7.643095970153809, -1.1565145254135132], + [0.21871834993362427, 11.0795316696167], + [-6.897273540496826, -1.6742253303527832], + [1.4668474197387695, -7.473657608032227], + [5.903324127197266, -2.1728289127349854], + [-6.309598445892334, -1.0883196592330933], + [0.22258704900741577, -1.3001924753189087], + [-2.3990955352783203, -4.480103015899658], + [-2.6612415313720703, 0.9448943138122559], + [6.65541410446167, 8.32552433013916], + [0.44538289308547974, -0.4486546516418457], + [-4.274552822113037, -3.174412965774536], + [3.8841214179992676, -7.16177225112915], + [0.9848454594612122, -0.7328303456306458], + [1.2010173797607422, -7.047328948974609], + [4.603325366973877, -3.478872299194336], + [3.244480848312378, -5.644533157348633], + [2.532266139984131, -6.558370590209961], + [3.3738503456115723, -6.555608749389648], + [-6.190124988555908, -1.4420098066329956], + [2.9273719787597656, -4.106345176696777], + [7.009072303771973, -1.49783194065094], + [0.8213350176811218, 4.976081848144531], + [0.17263954877853394, 12.763111114501953], + [-0.046085186302661896, 10.167637825012207], + [-2.8804218769073486, 0.3352058529853821], + [6.5336761474609375, -2.6676270961761475], + [9.471349716186523, -2.3906185626983643], + [3.2601306438446045, -4.084115982055664], + [-3.6081128120422363, 3.5737040042877197], + [2.52998948097229, 0.4696812629699707], + [-3.3044283390045166, -5.206238746643066], + [-3.3329355716705322, 5.496481895446777], + [2.929379940032959, -4.206964492797852], + [1.840688943862915, 5.358661651611328], + [-1.5033996105194092, -3.617600917816162], + [-4.125937461853027, -2.698096513748169], + [8.71682071685791, -2.3635313510894775], + [-4.78438663482666, 5.045341491699219], + [3.5878422260284424, -8.049068450927734], + [4.005638599395752, 1.5711625814437866], + [0.20950251817703247, 10.646827697753906], + [-2.534292459487915, 7.0700483322143555], + [0.7445938587188721, -5.67026948928833], + [6.877581596374512, -4.932404518127441], + [2.487628221511841, 4.480293273925781], + [-5.491078853607178, -1.855887770652771], + [1.389840841293335, 1.451492428779602], + [3.4044227600097656, -7.467282295227051], + [3.8489019870758057, -3.696479082107544], + [6.058254241943359, -1.3018139600753784], + [-1.576596736907959, -1.5824981927871704], + [0.18104946613311768, 10.46928596496582], + [-3.649217367172241, -5.624205589294434], + [3.4626994132995605, -6.290079593658447], + [-3.9652671813964844, -5.159690856933594], + [-2.47857666015625, -3.3123185634613037], + [9.242842674255371, -2.277719259262085], + [3.329580545425415, -4.777971267700195], + [7.757057189941406, -2.240170955657959], + [3.462087869644165, -4.138185501098633], + [4.281838893890381, -7.077237129211426], + [4.01810884475708, -3.280529260635376], + [3.8317949771881104, 7.119264602661133], + [-2.3036749362945557, 1.3736857175827026], + [-4.313486099243164, -0.18004143238067627], + [8.32825756072998, -2.458646535873413], + [4.20720911026001, -3.2716763019561768], + [-2.365898847579956, 2.609038829803467], + [-5.320180416107178, -3.410802125930786], + [3.8805770874023438, 6.465416431427002], + [-6.326460361480713, -0.27751362323760986], + [-1.3824204206466675, 1.0909500122070312], + [0.4829147458076477, 11.982185363769531], + [4.7783002853393555, 6.419711112976074], + [7.226744174957275, -2.370610475540161], + [7.21962308883667, -1.7659833431243896], + [7.779829502105713, -1.678432822227478], + [3.8829267024993896, -3.510608196258545], + [2.81136417388916, -3.9800500869750977], + [3.88218092918396, 1.3828437328338623], + [-2.1324453353881836, 2.408463478088379], + [-0.09985143691301346, -1.6294838190078735], + [3.140059471130371, -4.380569934844971], + [0.5801078677177429, -1.132376790046692], + [0.6800418496131897, -5.894253253936768], + [-1.8520021438598633, -3.818584680557251], + [-2.1018271446228027, -4.226850509643555], + [2.741931915283203, -5.265811443328857], + [0.06977926939725876, 9.712133407592773], + [-6.62702751159668, 7.648521423339844], + [6.562904357910156, -1.310680866241455], + [7.55076265335083, -2.1544768810272217], + [3.1345505714416504, -2.9589109420776367], + [4.563057899475098, -1.871914267539978], + [0.09329705685377121, 9.493886947631836], + [1.5433963537216187, -8.094618797302246], + [-2.088124990463257, 2.45931077003479], + [-4.9196271896362305, 5.003182411193848], + [-4.135672092437744, -6.6171956062316895], + [0.6185702681541443, 11.750373840332031], + [1.5328341722488403, -7.936521053314209], + [8.01368522644043, -1.9550461769104004], + [-2.5904040336608887, 2.01359224319458], + [1.313730001449585, 4.046372890472412], + [-0.11112052947282791, 9.448580741882324], + [-4.027756214141846, -5.730234146118164], + [0.1901509165763855, 9.990209579467773], + [10.272762298583984, -2.384981393814087], + [-4.907809257507324, 5.746618270874023], + [5.324905872344971, 6.619979381561279], + [1.8826980590820312, -6.731423377990723], + [-2.0946900844573975, 1.869149923324585], + [4.674337863922119, -3.3415398597717285], + [3.365414619445801, -10.580514907836914], + [-0.7180043458938599, -2.422045946121216], + [-5.564070224761963, 7.384930610656738], + [-2.126556158065796, 2.6883959770202637], + [0.1612074375152588, 12.159636497497559], + [9.62879753112793, -2.3737313747406006], + [4.176297187805176, -1.9912351369857788], + [1.9497313499450684, 5.687252044677734], + [0.9945899844169617, -6.91128396987915], + [-5.629916191101074, 6.24765682220459], + [4.781729221343994, 7.370532512664795], + [-3.46248197555542, 7.5476484298706055], + [-5.979741096496582, 6.799163818359375], + [-5.817915916442871, 6.813650131225586], + [-6.820004940032959, 7.864728927612305], + [2.9825549125671387, -3.896843671798706], + [-4.647716522216797, -6.630970478057861], + [0.3283693194389343, 8.520331382751465], + [-4.466118812561035, 5.461911678314209], + [3.1345882415771484, -5.774346351623535], + [-4.184693813323975, -3.2626302242279053], + [-1.997947096824646, 2.3212802410125732], + [-3.363166570663452, -5.199600696563721], + [4.0888800621032715, -3.8158562183380127], + [3.0144219398498535, -4.141924858093262], + [6.600552082061768, -1.5962210893630981], + [5.654332637786865, 7.83221435546875], + [-0.512305498123169, -1.923351764678955], + [1.5613133907318115, 1.5287389755249023], + [-2.4565746784210205, 1.389087200164795], + [3.5702240467071533, -4.217095851898193], + [1.170675277709961, -5.488329887390137], + [3.5225143432617188, -3.706984519958496], + [5.991001605987549, 7.776871681213379], + [0.03803163021802902, 11.810708999633789], + [-1.7655473947525024, -0.5282321572303772], + [-3.6124298572540283, -4.2568769454956055], + [-2.1106557846069336, 2.717757225036621], + [-1.8462415933609009, 1.657780408859253], + [3.38373064994812, 6.365321159362793], + [-0.0451243594288826, 14.26347541809082], + [-6.531620502471924, 7.696657657623291], + [8.034125328063965, -2.2864596843719482], + [-4.361164093017578, -3.885122537612915], + [-2.9596803188323975, -3.5765621662139893], + [8.893860816955566, -2.584807872772217], + [1.0331978797912598, 11.262356758117676], + [-0.701512336730957, -4.3232011795043945], + [10.369723320007324, -2.4690611362457275], + [0.9148863554000854, 5.293441295623779], + [-6.8248419761657715, -0.07507097721099854], + [0.02901964634656906, 10.433740615844727], + [-2.2301533222198486, 2.5138535499572754], + [-8.664297103881836, -0.5538755655288696], + [-2.5768301486968994, 1.4452344179153442], + [-1.2664501667022705, -3.749452829360962], + [-5.195130825042725, -2.2033164501190186], + [3.7915525436401367, 5.773796081542969], + [3.1397979259490967, -4.507676124572754], + [5.280187129974365, -1.1136410236358643], + [1.6480967998504639, -8.194267272949219], + [7.272294998168945, -1.8503295183181763], + [-4.628818035125732, -7.274943828582764], + [5.5370001792907715, -3.8195388317108154], + [-3.1516330242156982, -2.1146810054779053], + [-2.0843582153320312, 2.4446828365325928], + [2.843221664428711, -3.903188467025757], + [-2.3411483764648438, 3.121145725250244], + [5.4637131690979, -1.1868964433670044], + [1.513630747795105, 5.830306053161621], + [2.8817970752716064, -3.492398738861084], + [1.3088295459747314, -6.885870933532715], + [-1.0451093912124634, 1.3684848546981812], + [2.190274477005005, 4.991809844970703], + [-6.336564540863037, 6.929388999938965], + [2.37427020072937, -7.513812065124512], + [-2.6509225368499756, -5.250422477722168], + [-2.298247814178467, 2.1799824237823486], + [6.190897464752197, -5.50646448135376], + [6.6652913093566895, 8.162166595458984], + [-0.7868090271949768, 1.811575174331665], + [2.0165531635284424, 4.720251083374023], + [-2.710723400115967, 6.343343734741211], + [-3.1737186908721924, -3.975097417831421], + [9.051074028015137, -2.4097883701324463], + [-2.1930630207061768, 2.514873743057251], + [9.018242835998535, -2.408276081085205], + [3.3631205558776855, -5.344103813171387], + [3.1173741817474365, -4.287009239196777], + [-2.385692834854126, 3.170637845993042], + [4.277143478393555, 6.786096572875977], + [0.004257731139659882, 12.108044624328613], + [-4.9276862144470215, -3.252626895904541], + [2.6442198753356934, 1.3680084943771362], + [8.75334644317627, -2.573132276535034], + [-3.5861093997955322, -5.044873237609863], + [-5.303760051727295, -7.6819539070129395], + [-5.895202159881592, 6.894658088684082], + [3.542800188064575, -7.639412879943848], + [3.328956365585327, -5.900364875793457], + [-1.5385793447494507, -0.6358526945114136], + [0.16123205423355103, 12.264729499816895], + [-5.910794734954834, 5.0689520835876465], + [4.726538181304932, 6.4486002922058105], + [-4.9003119468688965, -7.890235900878906], + [8.636168479919434, -2.447575330734253], + [8.01567554473877, -2.082085371017456], + [-6.064999103546143, 1.059248924255371], + [-4.705016613006592, -7.407504081726074], + [7.023474216461182, -1.7704867124557495], + [-5.050617694854736, -2.3872110843658447], + [1.8257672786712646, 0.13674378395080566], + [-0.15292829275131226, 10.618553161621094], + [9.185072898864746, -2.4441640377044678], + [4.9923481941223145, 6.305859088897705], + [2.40317440032959, 5.314369201660156], + [-5.0065016746521, -3.897313117980957], + [-4.532841205596924, 6.607849597930908], + [-3.9585120677948, 3.4869143962860107], + [6.591373443603516, -1.8713322877883911], + [-1.4173228740692139, 2.0934576988220215], + [8.665136337280273, -2.3375089168548584], + [-2.0214459896087646, 2.752612829208374], + [-0.0064506009221076965, 13.707289695739746], + [0.13822370767593384, 9.55256462097168], + [-2.2705235481262207, 2.9878933429718018], + [3.838423013687134, 1.9442639350891113], + [2.450075149536133, 1.5238604545593262], + [2.5226199626922607, -3.154287815093994], + [3.2881698608398438, 1.3688558340072632], + [-5.490006923675537, 5.497714996337891], + [-4.842965602874756, -6.408808708190918], + [-2.8806726932525635, 0.9718447923660278], + [-5.117809295654297, 6.867725849151611], + [1.3578556776046753, -7.174721717834473], + [5.91782808303833, 7.244508743286133], + [0.06313269585371017, 12.557990074157715], + [-0.10883397608995438, 14.272575378417969], + [1.8026554584503174, -8.116866111755371], + [-2.6518373489379883, 1.6095318794250488], + [12.387731552124023, -2.639003276824951], + [-4.378725051879883, 6.466507434844971], + [0.12244348973035812, 9.7074613571167], + [5.627748012542725, 7.875593185424805], + [-3.9527571201324463, -0.11423987150192261], + [3.3503611087799072, -8.41071605682373], + [7.144848346710205, 8.700557708740234], + [-0.003497190773487091, 13.862058639526367], + [3.981220006942749, -3.5968825817108154], + [1.114487886428833, -6.932553291320801], + [-3.342658758163452, 0.8915002942085266], + [8.793536186218262, -2.4007174968719482], + [-2.2427546977996826, 2.2626261711120605], + [6.233428955078125, -1.098610281944275], + [-1.929814100265503, -3.136626958847046], + [2.6735427379608154, -6.371923446655273], + [-0.8658218383789062, 1.877639889717102], + [7.993649959564209, -2.2834184169769287], + [3.145556926727295, 5.945570468902588], + [4.813758373260498, 6.542198181152344], + [-4.9210333824157715, -3.8389875888824463], + [9.33406925201416, -2.471395969390869], + [-2.584700345993042, 1.8076889514923096], + [0.6561505198478699, 12.047425270080566], + [3.732863187789917, -8.165515899658203], + [0.7092201709747314, 0.7363050580024719], + [3.6495473384857178, -3.4956581592559814], + [-1.0627330541610718, -1.7999299764633179], + [3.5991196632385254, -3.6552209854125977], + [-2.117184638977051, 2.476210594177246], + [6.9784770011901855, -2.9742543697357178], + [-2.699908971786499, 5.3632049560546875], + [7.64923620223999, -1.9657082557678223], + [-4.23743200302124, -2.4776337146759033], + [0.0073607489466667175, 12.703369140625], + [3.668488025665283, -7.531688213348389], + [2.097846746444702, -3.7677597999572754], + [-2.068629503250122, 2.735124111175537], + [-7.908680438995361, 0.09328353404998779], + [2.666794538497925, 1.4622390270233154], + [-6.275304317474365, -2.4085049629211426], + [-5.354794025421143, 1.6518595218658447], + [2.3572890758514404, 0.2329677939414978], + [4.58041524887085, 6.699179649353027], + [-2.305001974105835, 2.316673994064331], + [-4.874606609344482, 3.054440498352051], + [-4.026584148406982, 4.385117053985596], + [4.808303356170654, -3.729290246963501], + [-0.6703599691390991, 0.6467331051826477], + [0.20071059465408325, 12.156051635742188], + [-4.339502334594727, -1.3323594331741333], + [-5.156120300292969, -0.8384895324707031], + [3.4003231525421143, -6.478028297424316], + [-1.6739187240600586, -4.717953205108643], + [10.92923641204834, -2.529022216796875], + [-4.924560070037842, -2.934098958969116], + [2.0004830360412598, -4.327638626098633], + [0.07423650473356247, 9.659374237060547], + [3.669344186782837, -3.2441821098327637], + [-1.9578148126602173, 1.9834810495376587], + [-8.021308898925781, -0.18038761615753174], + [2.4935998916625977, -4.35387659072876], + [-4.208333492279053, -7.069249153137207], + [-2.963502883911133, -4.2371392250061035], + [-3.6367218494415283, -1.594931721687317], + [3.69583797454834, -4.928997993469238], + [6.797438621520996, -1.5877118110656738], + [-5.190823078155518, -4.008871555328369], + [5.223631381988525, -0.9517923593521118], + [5.1793718338012695, 7.095452308654785], + [-4.3827080726623535, -3.0182816982269287], + [-4.788785457611084, 5.207279682159424], + [-4.294445991516113, -5.847237586975098], + [-1.5213935375213623, 2.090869665145874], + [3.2612154483795166, -3.6117265224456787], + [-3.21459698677063, 5.900714874267578], + [3.6532061100006104, -6.753578186035156], + [-3.123533010482788, -3.6597952842712402], + [0.7231839299201965, -5.1708526611328125], + [-5.0461106300354, -3.7977941036224365], + [3.667828321456909, -4.372213840484619], + [-5.7825140953063965, 2.0805559158325195], + [4.230204105377197, 1.9005743265151978], + [-3.690119981765747, -5.527429580688477], + [6.059879302978516, 7.35743522644043], + [-3.146576404571533, 6.178349494934082], + [2.500720500946045, 4.558690071105957], + [-5.255589008331299, -5.843379974365234], + [5.161631107330322, 6.479045391082764], + [-2.751333475112915, -4.867366790771484], + [0.9322412610054016, 11.735003471374512], + [3.6076385974884033, 1.967889428138733], + [-4.171772480010986, -3.243452787399292], + [2.8568227291107178, -3.783205032348633], + [-4.279928684234619, 4.613956451416016], + [2.540649175643921, 1.7344192266464233], + [-4.964710235595703, -3.7960269451141357], + [-3.7539632320404053, -5.2471418380737305], + [0.02803390473127365, 11.328352928161621], + [2.5030324459075928, 5.76442813873291], + [-3.797316312789917, -3.8233587741851807], + [0.9973524212837219, 0.36454787850379944], + [6.356461048126221, -5.106734752655029], + [-3.3783154487609863, 5.5489935874938965], + [1.6158878803253174, 5.455533027648926], + [-1.289581298828125, 0.9967269897460938], + [-1.9818365573883057, -0.11960989236831665], + [-2.882134437561035, -3.2098371982574463], + [-3.6365411281585693, -2.771880865097046], + [-2.59057879447937, 1.1179625988006592], + [-5.543280124664307, -2.3451826572418213], + [4.407921314239502, 6.931153774261475], + [-4.680788516998291, 3.859179735183716], + [7.870240211486816, -3.0371644496917725], + [-2.222951650619507, 2.2224173545837402], + [9.419495582580566, -2.3475940227508545], + [3.482059955596924, -5.202876091003418], + [-4.571074962615967, -3.440743923187256], + [1.4851089715957642, -6.771573543548584], + [7.9224534034729, -2.030395746231079], + [9.507527351379395, -2.40942645072937], + [1.389291763305664, 5.342498779296875], + [1.2334010601043701, -6.882898330688477], + [4.109462738037109, 0.8843045234680176], + [4.241297245025635, 5.481637954711914], + [3.4592463970184326, -6.903437614440918], + [5.89420223236084, 7.734889984130859], + [1.4486631155014038, 1.1751643419265747], + [-0.6104379296302795, -3.379204511642456], + [-2.3857979774475098, 1.546830654144287], + [4.753824710845947, -3.651546001434326], + [3.0179238319396973, -7.4976420402526855], + [2.7338104248046875, -7.653658866882324], + [5.929609298706055, -2.714376211166382], + [-2.8941845893859863, 3.1560428142547607], + [3.8164710998535156, -5.778536796569824], + [2.1788032054901123, 5.225918769836426], + [-3.5834596157073975, -6.032757759094238], + [3.271408796310425, -4.701552391052246], + [-5.388797283172607, -3.997528314590454], + [4.240033149719238, 1.6657897233963013], + [-4.217418193817139, -6.211156368255615], + [2.96761155128479, -4.20943546295166], + [6.52251672744751, 8.684236526489258], + [-6.996442794799805, -1.7496461868286133], + [6.898391246795654, -2.7329862117767334], + [1.426132082939148, -6.744363784790039], + [4.821628093719482, -1.0649547576904297], + [3.93977952003479, -6.29841423034668], + [-3.421686887741089, -3.1118271350860596], + [7.931773662567139, -2.4094085693359375], + [-1.1409357786178589, 6.295146465301514], + [-1.4013193845748901, 1.9766863584518433], + [-0.10256332904100418, -0.3666311502456665], + [-2.039961576461792, 2.584782600402832], + [-2.2947793006896973, 2.427110195159912], + [5.598316192626953, -4.5337066650390625], + [-2.0749738216400146, 2.4833686351776123], + [9.542937278747559, -2.468968629837036], + [1.91615891456604, 0.01096176728606224], + [-2.4277679920196533, -1.631234884262085], + [2.4624621868133545, 2.967580795288086], + [-6.569169044494629, 6.984537124633789], + [-3.3539278507232666, -0.5658529996871948], + [4.043407440185547, 1.815293312072754], + [0.1920592188835144, 10.320302963256836], + [2.8003432750701904, -4.015129089355469], + [-2.14044451713562, 2.2160604000091553], + [2.8899953365325928, -3.6984028816223145], + [6.1447978019714355, 7.955427169799805], + [2.9038498401641846, -2.793062448501587], + [-1.7220596075057983, 1.9371280670166016], + [-3.447321653366089, -5.407839775085449], + [2.00895619392395, 4.695412635803223], + [2.601038694381714, -0.001061607152223587], + [4.645509243011475, 7.119194507598877], + [2.3198790550231934, -3.1949541568756104], + [3.2231500148773193, -6.940208911895752], + [5.885307788848877, 7.721404075622559], + [-4.235300540924072, -5.671694755554199], + [3.560004949569702, -7.8687849044799805], + [3.481872320175171, -6.588542938232422], + [-3.818117380142212, -6.191283226013184], + [8.301534652709961, -2.3972654342651367], + [0.16509664058685303, 10.444633483886719], + [-1.4524359703063965, 1.8623197078704834], + [7.71145486831665, -1.680899739265442], + [3.614973306655884, -8.419185638427734], + [-5.758270740509033, 5.913033962249756], + [2.7869479656219482, -8.89039421081543], + [-4.9141764640808105, 5.704350471496582], + [8.455252647399902, -2.2580134868621826], + [-4.843641757965088, -6.429598808288574], + [-2.1354849338531494, 2.127319574356079], + [-3.2890377044677734, -3.231208324432373], + [-3.97900128364563, 5.940530776977539], + [0.21628588438034058, 11.528447151184082], + [8.548209190368652, -2.5131051540374756], + [1.3929359912872314, -4.0815887451171875], + [1.7193033695220947, 0.6446234583854675], + [6.49385404586792, 8.093789100646973], + [-3.536817789077759, -3.767483949661255], + [-5.633742809295654, 6.5273919105529785], + [3.519435167312622, -6.808699607849121], + [-3.6572225093841553, -5.320810317993164], + [-2.404278039932251, -3.8410723209381104], + [-6.7045207023620605, -1.1399656534194946], + [0.6466671824455261, -1.1725941896438599], + [2.8275442123413086, -9.624452590942383], + [-6.992177486419678, 1.6163413524627686], + [-2.2782585620880127, 1.9914897680282593], + [4.894976615905762, -1.463932752609253], + [-4.089963436126709, 3.7567920684814453], + [-3.8120810985565186, -0.6175665259361267], + [0.21395224332809448, 10.723003387451172], + [-7.5477681159973145, 9.144737243652344], + [-4.824345111846924, -1.9266654253005981], + [0.4524061679840088, 10.508228302001953], + [-2.378310441970825, 2.0726096630096436], + [1.9879610538482666, 4.46428108215332], + [4.100204944610596, 1.5502785444259644], + [-4.92761754989624, 7.2691874504089355], + [0.14602500200271606, 9.890691757202148], + [-6.189181804656982, 6.955965995788574], + [-4.762895107269287, 6.258910655975342], + [0.35391658544540405, 10.848247528076172], + [7.016933441162109, -1.8117002248764038], + [-1.712338924407959, 1.971411108970642], + [-0.060899265110492706, 12.652643203735352], + [-3.452314853668213, -2.6788957118988037], + [-0.6974670886993408, -2.0032665729522705], + [8.034392356872559, -2.2208666801452637], + [0.31653767824172974, 12.33786678314209], + [6.551076889038086, -5.986035346984863], + [-5.470773220062256, 4.736674785614014], + [3.095578908920288, -4.432660102844238], + [3.1863858699798584, -4.093792915344238], + [7.086036682128906, -5.321501731872559], + [1.8712034225463867, 6.158513069152832], + [-2.0796985626220703, 2.6078670024871826], + [6.909801006317139, -1.5489219427108765], + [-3.7548511028289795, -3.0635430812835693], + [2.984158515930176, -4.0455322265625], + [-0.036327965557575226, 12.920888900756836], + [-2.2687296867370605, 2.119595766067505], + [-4.627970218658447, -6.698248863220215], + [1.6472041606903076, 0.1859818398952484], + [2.40183424949646, -7.613003730773926], + [7.70418119430542, -1.967732548713684], + [2.996891736984253, 4.851100921630859], + [-1.4435629844665527, -4.229313850402832], + [3.7201225757598877, -3.407567024230957], + [3.8386542797088623, -4.765673637390137], + [1.5168702602386475, 2.635535955429077], + [-5.809622287750244, 5.739602565765381], + [1.9393260478973389, 1.3891191482543945], + [0.14391297101974487, 9.914542198181152], + [6.357095241546631, -4.067253112792969], + [3.178239345550537, -3.4671781063079834], + [0.3983089327812195, 0.94324791431427], + [3.096301317214966, -2.8029730319976807], + [-5.7878828048706055, 8.666749000549316], + [8.033167839050293, -2.2345380783081055], + [10.415021896362305, -2.5254483222961426], + [4.373270034790039, -3.156205892562866], + [3.4978201389312744, 0.9338334798812866], + [-0.08797115832567215, 13.757750511169434], + [-7.2137675285339355, -0.12184929847717285], + [0.12965792417526245, 12.130073547363281], + [0.13741785287857056, 12.675285339355469], + [1.913902997970581, -7.507979393005371], + [5.4639668464660645, 6.785488605499268], + [3.114088296890259, -5.188973426818848], + [7.4979376792907715, -2.0556704998016357], + [0.0077564045786857605, 11.680892944335938], + [-2.496558904647827, 2.779606342315674], + [0.35783305764198303, -0.9159846901893616], + [-6.653093338012695, 7.8689422607421875], + [-2.3679919242858887, 1.2425185441970825], + [2.901768445968628, -4.103466510772705], + [-3.319617509841919, -4.4112114906311035], + [2.3767917156219482, -6.485994338989258], + [2.26920223236084, 5.739190578460693], + [2.2063090801239014, 5.871364593505859], + [-4.275590419769287, 7.491048812866211], + [-0.024338610470294952, 12.306413650512695], + [10.628595352172852, -2.502840042114258], + [-4.447272777557373, -2.63385272026062], + [-5.8064446449279785, 6.665698051452637], + [1.2313694953918457, -2.424974203109741], + [-2.0742459297180176, -1.488099455833435], + [2.3691134452819824, 5.366527557373047], + [8.876578330993652, -2.32000470161438], + [-0.003572888672351837, 9.337104797363281], + [0.11912458389997482, 9.69732666015625], + [4.140052318572998, -0.5729508399963379], + [-7.233356475830078, -1.3192673921585083], + [-4.204933166503906, -1.4142569303512573], + [8.845901489257812, -2.385640859603882], + [-2.395711898803711, -3.7420990467071533], + [6.452683925628662, -1.6144219636917114], + [8.040382385253906, 9.557174682617188], + [0.7099327445030212, -0.8130669593811035], + [-1.8874285221099854, -2.505990982055664], + [-2.957918882369995, -3.584473133087158], + [-0.6348046660423279, -2.5672459602355957], + [-2.386979341506958, 2.1769416332244873], + [2.4926657676696777, 5.233622074127197], + [4.756000995635986, -2.7760603427886963], + [-4.863270282745361, 1.8630777597427368], + [5.8357625007629395, -1.0486018657684326], + [-7.305279731750488, 0.3411496877670288], + [0.11096148937940598, 11.886913299560547], + [3.2023041248321533, -8.378467559814453], + [3.2287538051605225, -7.903751850128174], + [4.665716171264648, 7.2673444747924805], + [-3.9322731494903564, -2.5012502670288086], + [0.19326084852218628, 10.900299072265625], + [1.4703764915466309, -6.584590435028076], + [-6.275635242462158, 8.752419471740723], + [-2.585101842880249, -1.2671678066253662], + [2.0633888244628906, 5.495492935180664], + [3.409268617630005, -3.6250646114349365], + [7.770040988922119, -2.490049123764038], + [3.9319231510162354, 1.857332706451416], + [-2.712812662124634, 0.5940081477165222], + [7.233401775360107, -2.065467119216919], + [2.8007376194000244, -3.9606552124023438], + [-4.037977695465088, 4.905852317810059], + [6.302128314971924, -2.633758783340454], + [-1.3735227584838867, 1.899566888809204], + [-0.5927130579948425, -2.304250955581665], + [-2.035973310470581, -3.4489474296569824], + [0.018890999257564545, -1.5351687669754028], + [2.6829946041107178, 0.4644237756729126], + [-4.277394771575928, -6.566734313964844], + [2.5428550243377686, 6.4149675369262695], + [4.7471818923950195, 7.24273681640625], + [-5.6798577308654785, -2.9332854747772217], + [5.41146993637085, 7.611635208129883], + [3.5972158908843994, -3.5044145584106445], + [-3.8089683055877686, -5.674679756164551], + [-1.5676380395889282, -3.800285816192627], + [2.9683544635772705, -8.618932723999023], + [0.7388725876808167, 11.342851638793945], + [3.084320306777954, -7.540618896484375], + [-5.797901630401611, 2.3298256397247314], + [-1.5120353698730469, 1.4919019937515259], + [-2.176624059677124, -1.2736669778823853], + [4.303553104400635, 5.985240936279297], + [4.07733154296875, 5.5558319091796875], + [3.999084711074829, 1.4793646335601807], + [6.0557074546813965, -1.3874521255493164], + [3.443467378616333, -3.7502522468566895], + [3.900479555130005, 6.769949913024902], + [3.3698387145996094, -6.5373029708862305], + [2.425443649291992, -9.710531234741211], + [-5.045383930206299, -5.7372660636901855], + [4.512019634246826, -3.410634756088257], + [-7.51400899887085, -0.21830010414123535], + [-5.23297119140625, -3.281629800796509], + [0.8716008067131042, 10.894180297851562], + [1.2140803337097168, 0.005234319716691971], + [0.5611001253128052, -5.664115905761719], + [0.15609890222549438, 10.362549781799316], + [-5.189595699310303, -3.0708909034729004], + [3.739959478378296, -5.1979660987854], + [3.0234458446502686, -7.577514171600342], + [-3.2067739963531494, -3.258943796157837], + [2.324976682662964, -2.489032030105591], + [-4.881906986236572, 5.288494110107422], + [-2.1504275798797607, 2.1579341888427734], + [-3.5708091259002686, -5.638612270355225], + [-1.6432828903198242, 2.167334794998169], + [-0.14624843001365662, -1.8106398582458496], + [-2.2447824478149414, 2.3397393226623535], + [-3.2244772911071777, -5.803253173828125], + [-3.410755157470703, -5.331087112426758], + [2.113661527633667, 6.215001583099365], + [-4.775683879852295, -0.7486086487770081], + [4.3411383628845215, 1.665677547454834], + [3.719259262084961, -3.7683537006378174], + [0.574259340763092, 11.077014923095703], + [5.158956050872803, -1.1416391134262085], + [-4.778257846832275, -4.274046421051025], + [2.283529043197632, -2.3345131874084473], + [-4.020496845245361, -2.8286240100860596], + [-3.344526529312134, -3.4173977375030518], + [4.111812114715576, -6.364521503448486], + [-3.382830858230591, 4.748150825500488], + [-2.0954320430755615, 2.583125114440918], + [0.6987472772598267, 0.6453818082809448], + [0.252379834651947, 11.211370468139648], + [-0.1039975956082344, 9.171241760253906], + [2.917388677597046, -4.103766441345215], + [5.564361095428467, 7.559810161590576], + [-7.521751880645752, -0.6289710998535156], + [-4.590987682342529, -7.509657859802246], + [-0.10065671056509018, -1.3825193643569946], + [3.2961583137512207, -5.024446487426758], + [8.551203727722168, -2.310372829437256], + [2.8594491481781006, -4.0679121017456055], + [9.663529396057129, -2.3553683757781982], + [2.2279646396636963, -5.841654300689697], + [-5.123299598693848, -0.9164753556251526], + [-1.4574217796325684, -4.280585289001465], + [2.9436423778533936, -3.9263179302215576], + [0.4963952302932739, -0.64029461145401], + [-0.37929046154022217, -0.22833430767059326], + [2.292335033416748, 3.6738603115081787], + [8.092116355895996, -2.4047536849975586], + [3.226501226425171, -6.4986677169799805], + [-1.450655460357666, -0.12332364916801453], + [-0.12310818582773209, -1.6806833744049072], + [8.227090835571289, -2.2713987827301025], + [2.6661760807037354, 0.021783914417028427], + [8.552179336547852, -2.3497464656829834], + [-3.165060043334961, -4.133449554443359], + [5.992427349090576, 7.592345237731934], + [0.20615822076797485, 11.479130744934082], + [-0.08627615123987198, -1.6910357475280762], + [-2.298497200012207, -3.674954414367676], + [-5.549602031707764, 6.119718551635742], + [3.700059175491333, -3.425989866256714], + [-3.9169623851776123, -1.3709558248519897], + [-4.01443338394165, -6.107826232910156], + [2.4931509494781494, -7.89786958694458], + [-2.0147311687469482, 2.2432851791381836], + [1.4074268341064453, -7.505230903625488], + [2.707874059677124, -3.435852289199829], + [-3.8132684230804443, 5.271743297576904], + [3.066180467605591, 6.08647346496582], + [5.5427680015563965, 7.843739986419678], + [-2.139608144760132, 2.7053146362304688], + [9.466968536376953, -2.4265143871307373], + [4.392026901245117, 7.291326522827148], + [0.31174904108047485, 10.989392280578613], + [7.204304218292236, -5.735578536987305], + [0.018029265105724335, 9.624128341674805], + [-4.766875743865967, -1.5760728120803833], + [1.7871277332305908, 4.793109893798828], + [-3.5557291507720947, -2.812716245651245], + [6.870124340057373, -4.373546123504639], + [3.0644655227661133, -4.000958442687988], + [8.060019493103027, -2.1873793601989746], + [-2.3422820568084717, 1.2435886859893799], + [-2.1344010829925537, 2.201716661453247], + [5.029748439788818, -1.058936595916748], + [2.4152023792266846, 4.280494213104248], + [7.879934787750244, -2.0890414714813232], + [1.257946252822876, 0.6288997530937195], + [1.5341291427612305, -5.924807071685791], + [5.224042892456055, 7.764621734619141], + [3.385247230529785, -0.1741381138563156], + [-1.4630622863769531, 0.5491949319839478], + [6.681823253631592, 8.483970642089844], + [3.9236233234405518, -3.56986403465271], + [5.582632064819336, -2.9926812648773193], + [0.16462606191635132, 8.823346138000488], + [7.041370868682861, -2.5455880165100098], + [6.43586540222168, 8.228935241699219], + [-2.437105894088745, -4.139858722686768], + [-3.7815606594085693, 4.781713962554932], + [-6.817701816558838, 7.939229965209961], + [8.00667667388916, -2.3973991870880127], + [6.979447841644287, 8.482666969299316], + [-3.9067208766937256, 5.807202339172363], + [2.1270735263824463, -6.780789852142334], + [-2.416588068008423, 1.6969484090805054], + [-5.541737079620361, 6.987181663513184], + [7.986514568328857, -2.0568981170654297], + [0.1496133804321289, 9.760335922241211], + [0.0710708424448967, 12.123793601989746], + [-6.353860378265381, -0.3111015558242798], + [-6.72513484954834, 7.650442123413086], + [0.23628109693527222, 11.115882873535156], + [4.109401226043701, -4.579282760620117], + [0.23818975687026978, 10.98561954498291], + [-3.589674472808838, -1.7107652425765991], + [-3.936253309249878, -1.1395049095153809], + [0.001574091613292694, 13.779791831970215], + [3.8920934200286865, -3.3137083053588867], + [2.850633144378662, 5.424806594848633], + [-3.6329734325408936, -3.4409167766571045], + [0.066474549472332, 11.819695472717285], + [2.3057053089141846, -3.6733977794647217], + [0.015136413276195526, 12.625486373901367], + [4.02147912979126, 1.7185965776443481], + [2.910982370376587, -7.86016321182251], + [-2.821162700653076, -0.7609133124351501], + [3.5284550189971924, -7.820576190948486], + [-3.0136377811431885, -4.211910724639893], + [3.4750633239746094, -2.4271457195281982], + [3.6050150394439697, -8.389345169067383], + [4.030007362365723, -2.180433988571167], + [-2.1441946029663086, 2.796747922897339], + [-2.346113920211792, -4.517679691314697], + [-4.622416019439697, 5.55183219909668], + [-2.034435749053955, 2.6890127658843994], + [-5.441208362579346, -3.6933717727661133], + [8.222739219665527, -2.602410078048706], + [1.937171220779419, -0.19276754558086395], + [-4.726925849914551, -6.607698917388916], + [3.2482187747955322, -4.636848449707031], + [4.456539154052734, -8.844783782958984], + [-2.7563118934631348, 6.975826263427734], + [0.4826641082763672, -1.8109112977981567], + [3.0996811389923096, 4.687184810638428], + [1.7400928735733032, 5.746106147766113], + [-2.748093366622925, -4.331697463989258], + [-2.136904001235962, 2.709421396255493], + [3.5817813873291016, -6.230354309082031], + [-3.2322113513946533, -2.732489824295044], + [0.0730704590678215, 11.360422134399414], + [-2.1709043979644775, 2.465787887573242], + [1.8639605045318604, 5.2844672203063965], + [4.047365665435791, -3.3605234622955322], + [0.04746120423078537, 9.118532180786133], + [-2.1971189975738525, -0.9183355569839478], + [1.8135825395584106, 5.001418590545654], + [0.1893162727355957, -3.558790922164917], + [-1.3251771926879883, 1.9367653131484985], + [5.477311134338379, -2.9910502433776855], + [-2.604231119155884, 1.5093446969985962], + [3.221503973007202, -4.3855743408203125], + [-5.395841121673584, -3.5540945529937744], + [-4.711232662200928, 6.978979587554932], + [5.685131549835205, 7.811257362365723], + [2.0083916187286377, -4.444258689880371], + [-4.414641380310059, -2.6442019939422607], + [10.430635452270508, -2.525560140609741], + [2.971510171890259, -7.163043022155762], + [6.8480916023254395, -3.557621955871582], + [-3.9268133640289307, 6.782353401184082], + [4.76798152923584, 6.763339996337891], + [0.1618632674217224, 10.471599578857422], + [-4.140373706817627, 5.456574440002441], + [0.26870447397232056, 11.573274612426758], + [-5.212347030639648, 6.5559539794921875], + [2.646469831466675, 3.43131947517395], + [6.272260665893555, -4.453094005584717], + [-6.558027267456055, 7.915093421936035], + [-5.556063652038574, 5.275784015655518], + [2.105480670928955, -8.454511642456055], + [5.924577713012695, -2.343592405319214], + [3.1362197399139404, 1.1328120231628418], + [-0.22872477769851685, -1.5840952396392822], + [0.7690265774726868, -0.73487389087677], + [-4.674747943878174, -7.559032440185547], + [2.6281092166900635, 1.4901753664016724], + [-0.013445921242237091, 12.098603248596191], + [2.229686975479126, -8.335219383239746], + [4.721964359283447, 1.849494218826294], + [6.98535680770874, -1.6737465858459473], + [2.1230359077453613, 0.5671078562736511], + [-1.2417961359024048, 1.7619001865386963], + [-6.33005952835083, -1.35440194606781], + [2.031432867050171, -8.087503433227539], + [1.0085644721984863, 3.8102214336395264], + [-5.2006001472473145, -5.783750057220459], + [5.449188709259033, -4.339804649353027], + [1.9046881198883057, -6.579402446746826], + [3.065309524536133, -4.358371257781982], + [2.4182140827178955, 6.261466979980469], + [-4.121163845062256, -6.318178653717041], + [-0.7012659907341003, 10.377531051635742], + [3.0443408489227295, -4.32908296585083], + [6.316889762878418, -1.7773596048355103], + [-4.395946502685547, -3.512054681777954], + [2.0785462856292725, 0.7885147333145142], + [-4.945645809173584, -3.700714349746704], + [3.3879520893096924, -8.103739738464355], + [-4.783090591430664, 1.3126232624053955], + [3.3483102321624756, -3.94545578956604], + [5.9745965003967285, -1.222846269607544], + [7.022412300109863, -1.848288655281067], + [5.790298938751221, -1.703081488609314], + [-5.145266532897949, -0.30158770084381104], + [-0.24678102135658264, -1.6808902025222778], + [6.802521228790283, -1.8526643514633179], + [5.641276836395264, 7.50584602355957], + [1.8973519802093506, 4.468394756317139], + [2.861647367477417, 4.308199882507324], + [-3.847609281539917, 5.428570747375488], + [-2.7478153705596924, -5.2611541748046875], + [3.9664084911346436, 5.802858352661133], + [5.357511043548584, 7.616672515869141], + [6.609833240509033, 7.989246368408203], + [3.1734280586242676, -3.4432055950164795], + [-4.911471366882324, 5.398094177246094], + [-4.440828323364258, 4.222601413726807], + [-5.1811442375183105, 3.8242132663726807], + [-3.6111786365509033, 5.014799118041992], + [-3.947558641433716, -1.8828938007354736], + [4.685354709625244, -2.9580910205841064], + [-2.1537528038024902, 2.2858223915100098], + [1.9943950176239014, -8.098033905029297], + [-4.396161079406738, -7.417122840881348], + [9.306977272033691, -2.221463203430176], + [-4.749642372131348, -0.9604531526565552], + [0.5782250761985779, -1.2946217060089111], + [5.576327800750732, -0.9465436935424805], + [-5.175540924072266, -2.807934522628784], + [-5.027524471282959, 5.4159770011901855], + [5.118553638458252, -4.50205135345459], + [3.1642467975616455, -4.534031867980957], + [3.21844482421875, -4.778067111968994], + [3.2765092849731445, -2.985875129699707], + [-6.204347610473633, 7.057437896728516], + [5.710682392120361, -1.2643020153045654], + [-2.4358668327331543, 1.4417157173156738], + [-4.323118686676025, -4.935635566711426], + [-3.630495071411133, -4.573145866394043], + [3.5468175411224365, -7.280332565307617], + [-3.9631447792053223, 6.289253234863281], + [-3.2785403728485107, -5.5413408279418945], + [1.405685305595398, -0.15662312507629395], + [-2.027104616165161, -3.7012789249420166], + [2.3180642127990723, 1.140556812286377], + [-2.180617094039917, 2.5096776485443115], + [0.09261595457792282, 9.091814994812012], + [10.76772403717041, -2.4483678340911865], + [-4.708210468292236, -6.881397247314453], + [5.819431781768799, -1.2495146989822388], + [-5.073661804199219, -3.887727737426758], + [-1.8323588371276855, 2.2813913822174072], + [5.9139933586120605, -2.3113200664520264], + [0.9007028937339783, 7.347747802734375], + [7.5356574058532715, 8.943646430969238], + [6.50931978225708, 8.066381454467773], + [-5.491293430328369, 5.211642265319824], + [-5.556178569793701, 4.1216020584106445], + [2.261589765548706, -6.531206130981445], + [2.1754162311553955, 5.975399017333984], + [-3.4069478511810303, -4.2377471923828125], + [2.3802621364593506, -8.375373840332031], + [1.8601208925247192, -7.249722003936768], + [0.8514904379844666, -0.09060685336589813], + [-2.454977512359619, 0.9792205095291138], + [-0.3687058985233307, -1.7761863470077515], + [7.883223056793213, -2.3000481128692627], + [1.538637638092041, -0.47329601645469666], + [-0.6845905184745789, 1.0132076740264893], + [-6.593492031097412, 0.845163106918335], + [4.951234817504883, -1.3061482906341553], + [3.9396369457244873, -3.585958242416382], + [-3.1584932804107666, -4.570670127868652], + [-3.5999996662139893, -5.681362152099609], + [-0.005709834396839142, 9.743090629577637], + [-7.835357189178467, 9.288347244262695], + [-0.9438032507896423, 1.8788784742355347], + [4.010678291320801, -6.963855266571045], + [-4.370326519012451, -6.447661399841309], + [5.706883907318115, -1.0961885452270508], + [0.3531423509120941, -1.2206774950027466], + [4.717161655426025, -4.614181995391846], + [-3.775630474090576, 5.693292617797852], + [0.21549570560455322, 10.805633544921875], + [4.268795013427734, 0.8795238733291626], + [3.86782169342041, -5.232743263244629], + [3.5735204219818115, -3.4590635299682617], + [5.934265613555908, -1.2745637893676758], + [-4.630974292755127, -6.859399318695068], + [7.003746032714844, -2.474856376647949], + [-4.49851131439209, -1.8206593990325928], + [2.215662717819214, -0.7454167604446411], + [-4.138991832733154, -5.331083297729492], + [8.923047065734863, -2.3697009086608887], + [3.386385679244995, -3.99353289604187], + [-3.4670612812042236, -1.7573591470718384], + [4.395968914031982, 7.637913703918457], + [11.853854179382324, -2.550355911254883], + [2.8321776390075684, -4.075228691101074], + [6.757786750793457, 8.246789932250977], + [-5.045796871185303, -6.010192394256592], + [4.319047451019287, 1.7387462854385376], + [5.63784122467041, 7.332300186157227], + [2.5924460887908936, 2.1186881065368652], + [3.4181554317474365, -4.3809380531311035], + [-4.983180522918701, -6.7680864334106445], + [8.072537422180176, -2.2225265502929688], + [3.6580123901367188, 1.5532687902450562], + [-2.967711925506592, -1.327060580253601], + [-2.1359803676605225, 2.3812997341156006], + [2.807340383529663, -8.621429443359375], + [-7.36962366104126, -0.7825430631637573], + [0.5156963467597961, -0.8607880473136902], + [-1.8799960613250732, 2.1069328784942627], + [-3.549975633621216, -5.167054176330566], + [-2.182631492614746, 2.8166723251342773], + [10.58193588256836, -2.3866946697235107], + [0.06119369715452194, 12.081422805786133], + [-2.942549467086792, -5.621325492858887], + [3.636213541030884, 1.4380887746810913], + [2.8389878273010254, 1.8681288957595825], + [2.851679563522339, -3.8702948093414307], + [9.264177322387695, -2.315192937850952], + [4.157750129699707, -8.309147834777832], + [-3.55922794342041, 7.647069931030273], + [-1.6267602443695068, 0.41949164867401123], + [8.277626991271973, -2.3414406776428223], + [-2.1744632720947266, -3.9684741497039795], + [5.7056965827941895, 7.751575469970703], + [-1.2804675102233887, 1.0054658651351929], + [0.04209785908460617, 12.517047882080078], + [-6.238827228546143, 7.105998516082764], + [-4.777337551116943, 6.035135269165039], + [2.368227958679199, 3.2583279609680176], + [3.2840356826782227, -4.113943099975586], + [-0.7641606330871582, -1.349112868309021], + [-4.454751968383789, 4.761689186096191], + [-2.517029285430908, 1.8789892196655273], + [-4.3961944580078125, -6.72365665435791], + [3.9555866718292236, 1.410204529762268], + [5.110536098480225, -1.1583799123764038], + [-1.547075629234314, -2.7794148921966553], + [1.9553744792938232, 3.068438768386841], + [-0.37536758184432983, 0.8211614489555359], + [3.7976415157318115, -5.262233257293701], + [2.913646936416626, -7.703110694885254], + [3.9809038639068604, -4.352075576782227], + [2.361384868621826, 0.2831990420818329], + [-2.219529867172241, 2.379347324371338], + [0.17886042594909668, 12.38825511932373], + [8.530265808105469, -2.540832996368408], + [6.397006511688232, 8.279288291931152], + [0.03053169697523117, 10.164397239685059], + [-2.483342409133911, 1.5935250520706177], + [8.661453247070312, -2.2859809398651123], + [-6.153810024261475, 7.819204807281494], + [8.783488273620605, -2.3284285068511963], + [-4.722380638122559, 5.830893039703369], + [1.5895334482192993, 0.0017240010201931], + [5.89245080947876, 7.725698947906494], + [3.515294075012207, -3.3957858085632324], + [7.840430736541748, -2.044321298599243], + [1.8402974605560303, 3.1603434085845947], + [0.07833557575941086, 9.45378303527832], + [2.2048041820526123, 2.182847261428833], + [-4.956491470336914, 6.246199131011963], + [-4.060004234313965, -4.060320854187012], + [5.272064685821533, 6.5948686599731445], + [3.0008938312530518, -4.213749885559082], + [1.780655860900879, -7.9362592697143555], + [-2.066845178604126, 2.31493878364563], + [0.05616479367017746, 10.214670181274414], + [1.9373457431793213, 5.997639179229736], + [-3.9370710849761963, 4.018370151519775], + [-3.8420701026916504, -6.646129608154297], + [-0.6826509237289429, -0.657770574092865], + [4.83151912689209, -3.5899229049682617], + [1.497424602508545, 0.3287169933319092], + [-2.843369483947754, 2.473304033279419], + [2.9316680431365967, -8.612556457519531], + [0.13631492853164673, 11.210451126098633], + [0.8190997242927551, 5.213974952697754], + [8.265915870666504, -2.2634172439575195], + [3.730921506881714, -3.4789376258850098], + [9.842113494873047, -2.473482370376587], + [6.684874534606934, -2.6388070583343506], + [2.462540626525879, 5.31494140625], + [-2.4044835567474365, 2.8702385425567627], + [-6.518869876861572, 7.494575023651123], + [-4.707254886627197, -2.4739701747894287], + [0.17212224006652832, 10.195527076721191], + [0.3170596957206726, 11.211183547973633], + [0.25721853971481323, 9.305309295654297], + [-3.0149357318878174, -4.994640827178955], + [-1.4520916938781738, 0.6478873491287231], + [5.095816135406494, 6.48401403427124], + [6.831128120422363, -4.538325309753418], + [2.70461106300354, -3.5387895107269287], + [-4.36384916305542, -7.348932266235352], + [0.07626026123762131, 12.549844741821289], + [-2.1440787315368652, 2.2736542224884033], + [0.8994938731193542, -3.7372519969940186], + [0.0134463831782341, 13.021126747131348], + [9.419877052307129, -2.429229259490967], + [-4.460267066955566, -1.8198899030685425], + [4.635051727294922, -8.500003814697266], + [-2.330124855041504, -2.434180498123169], + [-2.3580219745635986, 6.144049644470215], + [-1.7133944034576416, 1.7071410417556763], + [-6.0863356590271, 6.105777263641357], + [-4.1048054695129395, -6.267087936401367], + [9.705367088317871, -2.595820188522339], + [-2.214362621307373, 2.186711311340332], + [-4.843746662139893, 5.352874755859375], + [-0.5331511497497559, -2.319568395614624], + [-2.1502511501312256, 2.679400682449341], + [-5.1133222579956055, 3.1633362770080566], + [1.2911492586135864, 6.381351470947266], + [-2.9175150394439697, -2.3583903312683105], + [-6.137597560882568, 6.155546188354492], + [0.11810772866010666, 9.480053901672363], + [6.5367817878723145, 8.090167045593262], + [-3.5563650131225586, -1.8980227708816528], + [-5.212294578552246, 6.0413665771484375], + [-5.270988941192627, 4.213930130004883], + [-0.1276143193244934, 14.464897155761719], + [-5.129932880401611, 6.062944412231445], + [-2.035508394241333, 2.3758294582366943], + [-4.721519947052002, -0.6018004417419434], + [0.7926473021507263, -0.9648191332817078], + [3.353287696838379, -8.600564956665039], + [-2.0581045150756836, 2.1228060722351074], + [-1.8372327089309692, 2.3574459552764893], + [-5.149633407592773, -6.239018440246582], + [-4.138779640197754, -5.815979957580566], + [2.8134403228759766, 6.405254364013672], + [6.045881748199463, -1.2013760805130005], + [3.147486448287964, -6.039893627166748], + [4.36411714553833, -7.215643882751465], + [-4.372403621673584, -2.1269302368164062], + [-2.2590792179107666, 2.414212703704834], + [-2.329946279525757, 1.2700003385543823], + [-3.6093549728393555, -0.2513417601585388], + [2.1561553478240967, 4.876010894775391], + [-4.800858020782471, -4.7720746994018555], + [-2.2194669246673584, 2.1998019218444824], + [3.117995262145996, 0.7536340951919556], + [-3.5428011417388916, -2.616081476211548], + [-0.7569025158882141, -2.042003631591797], + [2.5279700756073, 3.935865640640259], + [8.045483589172363, -2.774879217147827], + [4.436621189117432, -8.9761323928833], + [5.960737705230713, -1.4361425638198853], + [2.773658275604248, 5.003583908081055], + [2.343085765838623, 3.8568809032440186], + [-2.008350372314453, 1.2694171667099], + [7.480650424957275, -2.664415121078491], + [-2.4989609718322754, 1.4004193544387817], + [-4.338808536529541, -6.677553176879883], + [0.1372736096382141, 11.978147506713867], + [-4.292860507965088, -4.779170036315918], + [-4.025123119354248, 5.9475932121276855], + [2.358238697052002, -6.507233619689941], + [3.4595630168914795, -5.334410190582275], + [3.534756898880005, -7.545473098754883], + [0.08989005535840988, 12.596122741699219], + [8.122075080871582, -2.7080423831939697], + [9.464271545410156, -2.3205647468566895], + [-4.576076984405518, 1.0205289125442505], + [2.6147115230560303, 6.176575660705566], + [3.991105794906616, 1.7104896306991577], + [2.0188534259796143, 0.6357358694076538], + [-2.9101598262786865, 5.704751014709473], + [6.520594120025635, -4.924500942230225], + [0.7209946513175964, -5.731419563293457], + [-1.6754416227340698, -1.9625072479248047], + [3.1491191387176514, -4.553611755371094], + [1.0219664573669434, 11.908838272094727], + [-1.9973084926605225, 1.9586373567581177], + [-6.99735689163208, 8.479822158813477], + [-6.058084964752197, -1.775028944015503], + [-4.028242588043213, 4.86894416809082], + [0.04982220381498337, 12.492670059204102], + [3.5141091346740723, 6.513429164886475], + [-6.467398166656494, 7.653712749481201], + [0.6304852366447449, -1.010003924369812], + [3.0156610012054443, -8.283967971801758], + [5.871414661407471, 7.4871087074279785], + [3.1955318450927734, -7.009149551391602], + [-7.206103801727295, 8.176107406616211], + [-1.8217227458953857, 2.208770513534546], + [-4.460597991943359, 5.970930099487305], + [-2.2636334896087646, 0.6289476752281189], + [2.318958282470703, 3.408555507659912], + [-0.882011353969574, 5.311821937561035], + [9.865872383117676, -2.435256242752075], + [8.771920204162598, -2.336505651473999], + [0.14434784650802612, -0.9658889174461365], + [-7.647576808929443, -0.15283071994781494], + [2.6189258098602295, 0.6022365093231201], + [-4.670834541320801, -5.188588619232178], + [-2.424807548522949, 2.0081772804260254], + [0.11841016262769699, 11.937141418457031], + [-4.507152557373047, -1.8314846754074097], + [2.519317865371704, 4.63193941116333], + [-1.7542442083358765, 2.227912187576294], + [-4.417497158050537, -7.111669063568115], + [-2.0519192218780518, 2.128913402557373], + [-3.785365343093872, -5.601630687713623], + [2.7076942920684814, -8.730588912963867], + [7.1989006996154785, -2.115058183670044], + [9.747903823852539, -2.4847986698150635], + [-3.7937474250793457, 3.933723211288452], + [-2.962294816970825, 0.4934597611427307], + [10.823963165283203, -2.5893714427948], + [-5.624195575714111, 3.5790133476257324], + [0.20950505137443542, -0.1918933093547821], + [9.410003662109375, -2.305290460586548], + [8.493329048156738, -2.520047903060913], + [2.894162893295288, -4.011179447174072], + [-4.322225093841553, 6.568103313446045], + [-6.250376224517822, -0.3344743847846985], + [-6.189927577972412, 6.373011589050293], + [-0.46929875016212463, -1.8529222011566162], + [-4.53995943069458, -1.4921737909317017], + [-3.8666317462921143, -5.693751811981201], + [8.668412208557129, -2.566459894180298], + [3.6775476932525635, -6.916953086853027], + [-1.9412410259246826, 2.4116199016571045], + [3.1900758743286133, -4.447676181793213], + [-3.7429721355438232, -5.301873683929443], + [9.43063735961914, -2.3413543701171875], + [-3.967094659805298, -4.590341567993164], + [2.3328874111175537, -2.0182723999023438], + [-4.4808526039123535, -3.1511847972869873], + [2.696821689605713, -3.305088758468628], + [-3.0668275356292725, 6.655413627624512], + [-4.972797870635986, -5.475338935852051], + [4.917302131652832, 7.2315897941589355], + [8.284136772155762, -2.1789090633392334], + [-0.7294139266014099, 1.0349279642105103], + [-0.10105068236589432, 14.34683609008789], + [3.792527675628662, -2.784398317337036], + [-2.01458477973938, 2.134377956390381], + [0.253998339176178, 10.749482154846191], + [-2.5633981227874756, 1.4608327150344849], + [3.855217933654785, 0.7794740200042725], + [2.8436644077301025, -6.134237289428711], + [1.3690108060836792, -7.498072624206543], + [-4.494177341461182, 5.387264251708984], + [-0.21443688869476318, -1.6958580017089844], + [-2.806379556655884, -3.510812520980835], + [1.6392749547958374, 0.8891292810440063], + [2.4191925525665283, -9.534655570983887], + [5.925924777984619, -1.2409313917160034], + [-1.880307912826538, 2.1715447902679443], + [-0.05611581355333328, 13.197310447692871], + [0.11651920527219772, 9.334771156311035], + [3.9723875522613525, 5.320091247558594], + [-7.10284948348999, 8.297208786010742], + [0.8011136651039124, -5.502193450927734], + [9.475598335266113, -2.318204879760742], + [8.439831733703613, -2.397962808609009], + [3.1265313625335693, -7.950161933898926], + [4.3436970710754395, 6.495994567871094], + [-2.9852073192596436, -3.850799322128296], + [2.8841516971588135, -4.104354381561279], + [-5.871466159820557, -2.643293857574463], + [2.980046033859253, -4.206389427185059], + [9.572843551635742, -2.5849521160125732], + [-3.5492308139801025, -0.09398704767227173], + [-4.8209309577941895, 4.739060401916504], + [-4.523086071014404, -6.347490310668945], + [2.9270517826080322, 3.6739892959594727], + [2.92379093170166, 5.2524800300598145], + [5.357227802276611, 7.129822731018066], + [-1.3243056535720825, 1.3541408777236938], + [1.7656090259552002, 3.577664613723755], + [-2.093809127807617, 2.542846918106079], + [0.18350523710250854, 10.587902069091797], + [-2.0500025749206543, -3.3409059047698975], + [-2.508396863937378, 1.8910863399505615], + [-1.6903369426727295, -3.4138357639312744], + [0.11443077772855759, 8.861374855041504], + [-4.136221408843994, -5.830569744110107], + [3.937537431716919, -3.4845902919769287], + [9.780959129333496, -2.4540598392486572], + [-4.288264751434326, -2.479478597640991], + [1.6453609466552734, -7.5412797927856445], + [-4.3391828536987305, -3.135755777359009], + [6.927852630615234, -1.938218116760254], + [8.276952743530273, -2.1795339584350586], + [6.747410297393799, 8.207209587097168], + [3.9021432399749756, -5.427277565002441], + [0.9861889481544495, -5.393134593963623], + [-5.0175909996032715, 5.409001350402832], + [-4.471747875213623, -2.822364568710327], + [-1.952568531036377, -4.771429538726807], + [0.09342437237501144, 11.535140037536621], + [4.430985927581787, 6.579288482666016], + [5.004425525665283, 6.423427104949951], + [0.26869380474090576, 11.49616813659668], + [0.43170368671417236, 11.898846626281738], + [-2.621032238006592, -4.238989353179932], + [8.265677452087402, -2.1501855850219727], + [-6.283398151397705, 7.831855297088623], + [2.577099561691284, 1.0610800981521606], + [2.184403419494629, 2.1058943271636963], + [3.922161340713501, -3.74843430519104], + [4.553326606750488, 6.046604633331299], + [-4.812913417816162, -6.741908550262451], + [-0.830573558807373, -0.7954906225204468], + [1.6818486452102661, -7.581971645355225], + [-5.326536655426025, -2.7528412342071533], + [3.497514247894287, -3.8675615787506104], + [-5.284440994262695, -2.3659656047821045], + [1.144347906112671, 4.184200286865234], + [2.887582540512085, -4.01308536529541], + [-5.217144966125488, -5.873539447784424], + [7.422726154327393, 9.099241256713867], + [-2.2817916870117188, 2.7127444744110107], + [-2.1204941272735596, 2.567962408065796], + [6.440820693969727, -0.3595983386039734], + [-4.752082347869873, -0.9245293736457825], + [4.875072479248047, 7.247082710266113], + [-5.1279144287109375, -4.015254497528076], + [2.0050268173217773, 2.0615925788879395], + [1.756700038909912, -7.697054862976074], + [0.5544252991676331, -1.1022272109985352], + [2.8254940509796143, -3.815171003341675], + [-2.2047297954559326, -1.5489436388015747], + [-4.673952579498291, -5.89517068862915], + [0.04989843815565109, 9.550043106079102], + [-7.084391117095947, 8.241474151611328], + [-2.145996332168579, 2.077103853225708], + [-0.09388870745897293, -1.5231122970581055], + [3.3683440685272217, -8.04239273071289], + [5.59096622467041, 7.445505142211914], + [0.03845994919538498, 11.78521728515625], + [3.511305332183838, -8.08668327331543], + [-3.5188701152801514, -4.85695743560791], + [-4.1947855949401855, -2.6561930179595947], + [0.031494252383708954, 9.488584518432617], + [2.770019292831421, -9.365382194519043], + [3.7439002990722656, 6.308952808380127], + [-5.093448162078857, 5.193267822265625], + [2.2058489322662354, 5.5785746574401855], + [-5.431861400604248, 0.6120703220367432], + [-1.7999968528747559, 2.2070698738098145], + [-2.4125425815582275, -1.4992341995239258], + [2.6979429721832275, 1.32645583152771], + [-3.3699867725372314, -5.7310686111450195], + [-4.167960166931152, -6.077207088470459], + [-3.999603509902954, -5.797118186950684], + [0.6459059119224548, -0.8729293942451477], + [-5.183028221130371, 5.582161903381348], + [3.55015230178833, -2.819049119949341], + [-6.4201130867004395, -0.8294669985771179], + [-5.163705348968506, 8.120731353759766], + [7.164639472961426, -2.4992780685424805], + [1.4395437240600586, -7.907129764556885], + [3.367567777633667, 1.4497268199920654], + [5.469812393188477, 7.012850284576416], + [3.3759212493896484, 1.665887475013733], + [2.6572325229644775, -5.686647415161133], + [0.2558612823486328, 11.62385368347168], + [1.889991044998169, 4.50852108001709], + [2.6137490272521973, 4.24464750289917], + [2.587150812149048, -6.532954216003418], + [3.179971218109131, 1.311479091644287], + [3.4765758514404297, -5.668567657470703], + [-4.420155048370361, 5.524374961853027], + [-2.631450891494751, -3.059133768081665], + [4.598958492279053, 6.908411979675293], + [5.724463939666748, -2.7227602005004883], + [-0.9158604741096497, -2.760685443878174], + [-2.1310575008392334, 2.629972219467163], + [4.341110706329346, -4.325847625732422], + [-4.57798957824707, 3.401909828186035], + [-3.534893035888672, 6.530604839324951], + [-3.748242139816284, -2.052290201187134], + [6.166357517242432, -1.2665917873382568], + [-7.09179162979126, -0.17344129085540771], + [-2.8809144496917725, 1.3086434602737427], + [-2.044649362564087, 0.7572370171546936], + [-4.3764567375183105, -3.1975085735321045], + [4.2364726066589355, 7.109560966491699], + [-2.304349422454834, 2.4407780170440674], + [1.2434887886047363, -0.4927297830581665], + [1.803938865661621, -5.9733428955078125], + [2.9111390113830566, -4.101052284240723], + [-6.278849124908447, 7.657465934753418], + [-1.3433514833450317, -1.2935043573379517], + [3.5851492881774902, -8.880617141723633], + [-4.48622989654541, 6.543108940124512], + [-2.158139705657959, 2.607618570327759], + [6.274202823638916, -2.2847795486450195], + [-1.7111055850982666, 2.1226491928100586], + [1.8008768558502197, 1.9614313840866089], + [0.015443496406078339, 12.427831649780273], + [-2.461256504058838, 1.9723118543624878], + [-5.8680100440979, 6.545623302459717], + [-3.7503347396850586, 5.585305690765381], + [-0.01311928778886795, 9.00415325164795], + [0.19431716203689575, 10.621320724487305], + [0.5323863625526428, 12.122482299804688], + [2.843238115310669, 5.074442386627197], + [7.740123271942139, -2.652078866958618], + [0.09964296966791153, -1.4480756521224976], + [0.9395002722740173, 1.3855817317962646], + [3.612292528152466, -8.688409805297852], + [-4.368232250213623, -6.234308242797852], + [-0.20765751600265503, -1.849367380142212], + [-2.2712574005126953, 2.3497822284698486], + [-6.376753330230713, 8.01288890838623], + [-1.8740124702453613, -2.5849413871765137], + [-2.558649778366089, 1.5888681411743164], + [-1.8702651262283325, 2.354377508163452], + [-6.15048360824585, -1.7555915117263794], + [2.8287007808685303, -3.959538221359253], + [-3.921013355255127, -1.0602840185165405], + [-1.5526570081710815, 2.2205617427825928], + [-2.266833782196045, 1.8668937683105469], + [7.059021472930908, 8.44734001159668], + [7.250287055969238, -3.3917734622955322], + [4.143045902252197, -3.7689313888549805], + [3.2004194259643555, 1.0620193481445312], + [2.773879289627075, -9.228743553161621], + [-4.761155605316162, -7.112795829772949], + [-1.1566362380981445, 1.247923731803894], + [2.0517704486846924, -0.3227904438972473], + [1.3543444871902466, -6.256619453430176], + [-0.03218526393175125, 9.867738723754883], + [2.826880693435669, -7.002192497253418], + [-4.798144817352295, 6.61978816986084], + [-4.206089973449707, 4.6002655029296875], + [-7.3787007331848145, -0.5087028741836548], + [10.498419761657715, -2.5968971252441406], + [-4.048645973205566, 3.873670816421509], + [-6.620855808258057, -1.713154673576355], + [-0.023335285484790802, 12.553977966308594], + [-2.9271976947784424, 2.2066335678100586], + [-3.2519946098327637, 6.208987712860107], + [8.571187973022461, -2.5252068042755127], + [9.077756881713867, -2.4261863231658936], + [8.815464973449707, -2.3704569339752197], + [7.2723870277404785, 8.699722290039062], + [-4.2900471687316895, 0.5289084911346436], + [-4.607638835906982, 6.792932987213135], + [3.3242433071136475, -6.790774345397949], + [-6.136765956878662, 0.6844426393508911], + [8.104391098022461, -2.1528337001800537], + [-5.74420166015625, 6.453373908996582], + [-2.4662041664123535, 2.1892833709716797], + [3.456071138381958, 0.7299355864524841], + [-0.619425892829895, -2.4294047355651855], + [3.9857547283172607, 1.3768854141235352], + [2.198624610900879, -0.12977316975593567], + [-6.156572341918945, 0.7927420139312744], + [2.0375945568084717, -5.189148902893066], + [-4.435036659240723, 4.816814422607422], + [-4.694465637207031, -0.784347653388977], + [2.5687873363494873, 3.8730533123016357], + [8.647058486938477, -2.2525341510772705], + [-2.0599193572998047, 2.5445775985717773], + [-2.500383138656616, 2.1655421257019043], + [4.910759925842285, 7.375036239624023], + [-5.191163539886475, 4.144468307495117], + [0.14808589220046997, 10.773750305175781], + [-5.8183722496032715, 5.111760139465332], + [-0.18817627429962158, 9.851177215576172], + [-6.709157466888428, 6.8564581871032715], + [-2.336010694503784, 2.508185386657715], + [7.019549369812012, 8.501709938049316], + [1.7918763160705566, 0.5272762775421143], + [-3.801262140274048, -6.902754783630371], + [9.183943748474121, -2.4124417304992676], + [2.4020278453826904, -8.996109008789062], + [3.8240208625793457, 1.8318382501602173], + [4.1174139976501465, 6.095497131347656], + [-5.0309295654296875, 4.791418075561523], + [8.437128067016602, -2.3058812618255615], + [6.660462856292725, 8.416888236999512], + [-6.536584377288818, 0.23209762573242188], + [-4.793461799621582, -6.413527488708496], + [6.084465503692627, -1.5293900966644287], + [1.535431146621704, 2.2980363368988037], + [0.1706954836845398, 11.727232933044434], + [3.6431639194488525, 5.943640232086182], + [8.041695594787598, -2.2745981216430664], + [4.607039451599121, -2.447131872177124], + [-2.670863628387451, 0.4843892455101013], + [2.418360471725464, 2.672213554382324], + [0.04382091015577316, 11.561542510986328], + [0.13697713613510132, 12.325910568237305], + [3.397120237350464, -6.50653076171875], + [2.0046403408050537, 5.109097480773926], + [3.3851664066314697, -4.976064682006836], + [-3.0235188007354736, -5.441097736358643], + [10.240705490112305, -2.3576138019561768], + [-3.895559549331665, -5.124346733093262], + [7.74254035949707, -2.102848768234253], + [-2.1030240058898926, 0.8227458596229553], + [0.1257714033126831, 8.948567390441895], + [8.1351957321167, -2.636732816696167], + [-3.4642157554626465, 5.325366020202637], + [-6.286884307861328, 8.009387016296387], + [3.199599027633667, -4.8121256828308105], + [4.349709987640381, -3.745300531387329], + [4.703403949737549, 6.84372615814209], + [-2.1812174320220947, 2.1529781818389893], + [-5.52803897857666, -2.2802369594573975], + [-2.927915334701538, 0.4613228440284729], + [2.8941733837127686, -10.473057746887207], + [-2.05973744392395, 2.280742883682251], + [-6.9394612312316895, 1.4154924154281616], + [-0.3336583375930786, -0.13137461245059967], + [-5.146839618682861, 4.126156330108643], + [-5.480564594268799, -2.9183294773101807], + [9.754402160644531, -2.5159029960632324], + [6.950297832489014, -2.147176504135132], + [0.17309170961380005, 10.290472030639648], + [-5.158596515655518, 2.6897761821746826], + [0.390116810798645, 11.123330116271973], + [3.1629292964935303, -8.564064025878906], + [-4.7446370124816895, 5.341444969177246], + [0.0016627833247184753, 12.926041603088379], + [7.988433361053467, -2.2229201793670654], + [-2.7029993534088135, 2.3182742595672607], + [3.3008925914764404, -4.83558464050293], + [5.826922416687012, 7.308886528015137], + [0.05020015686750412, 11.11159896850586], + [-1.7853494882583618, 2.385531187057495], + [11.363314628601074, -2.4538724422454834], + [3.463444232940674, -8.115520477294922], + [1.5317869186401367, 2.77466082572937], + [-1.4258705377578735, -3.8919200897216797], + [8.131434440612793, -2.356757879257202], + [-4.506746768951416, -6.628232479095459], + [-3.456564426422119, -2.0538461208343506], + [0.5304214358329773, 11.39590835571289], + [-2.224515914916992, 2.1945087909698486], + [3.0786590576171875, -6.300045490264893], + [1.4932891130447388, -0.9360638856887817], + [2.7448971271514893, -7.503251075744629], + [3.381591558456421, -9.142827987670898], + [7.253299236297607, 8.645523071289062], + [2.465147018432617, -3.31571888923645], + [2.282658815383911, 7.048443794250488], + [2.4687907695770264, -6.625124931335449], + [1.452284336090088, -0.47531822323799133], + [6.634164333343506, 8.21479606628418], + [2.509186267852783, -6.992541313171387], + [0.21541935205459595, 8.899462699890137], + [0.1918150782585144, 10.595361709594727], + [6.657726764678955, -6.07635498046875], + [-2.606651544570923, 2.080949306488037], + [1.477698564529419, 2.0843262672424316], + [9.300347328186035, -2.251673936843872], + [3.8401598930358887, -2.334867477416992], + [2.864177703857422, -6.673530101776123], + [3.072695016860962, 4.776749610900879], + [-1.5437265634536743, 1.981505036354065], + [4.340451240539551, -3.3442533016204834], + [7.418919086456299, -2.2656543254852295], + [2.0284032821655273, 2.2223644256591797], + [-6.99083948135376, 8.280923843383789], + [-0.6693382859230042, -0.8442981839179993], + [-3.6752121448516846, 1.018621563911438], + [-0.04355413466691971, 9.301901817321777], + [-2.308372974395752, -3.5878705978393555], + [-0.9727030396461487, -3.4679887294769287], + [0.09190379828214645, 11.631179809570312], + [2.4368488788604736, 5.480896949768066], + [7.407856464385986, -1.905095100402832], + [-1.1789387464523315, 0.19124417006969452], + [2.0513908863067627, 5.1966776847839355], + [3.540743827819824, 1.288791298866272], + [-3.745715618133545, -6.001163482666016], + [-2.22522234916687, 0.8614241480827332], + [8.40908432006836, -2.4960110187530518], + [8.72034740447998, -2.334341287612915], + [2.910959243774414, 4.276211738586426], + [2.1121885776519775, -8.468990325927734], + [3.2149245738983154, -4.458567142486572], + [3.9053261280059814, -7.729530334472656], + [-4.527191638946533, -2.4308700561523438], + [3.4843547344207764, 0.6495854258537292], + [-4.389652252197266, -6.316366195678711], + [-6.445715427398682, 2.2478744983673096], + [3.8822481632232666, -5.458432197570801], + [-2.1226823329925537, 2.386443614959717], + [-7.354255676269531, -0.3560514450073242], + [2.216074228286743, -7.5268120765686035], + [3.1765964031219482, -6.769073009490967], + [-0.05064470320940018, 9.89887809753418], + [0.02721720188856125, 11.220840454101562], + [3.4996557235717773, 6.748485565185547], + [4.972393035888672, -2.8936026096343994], + [-4.892280101776123, 5.390091419219971], + [3.1160144805908203, 1.4412422180175781], + [-6.706076145172119, -0.6465362310409546], + [-2.1059887409210205, 2.5769684314727783], + [-3.164445161819458, 5.016555309295654], + [9.213808059692383, -2.435608148574829], + [0.5311872363090515, -0.08076730370521545], + [8.309914588928223, -2.232391119003296], + [0.10414376109838486, -2.881772041320801], + [-2.180800437927246, 2.7822799682617188], + [-2.59670352935791, 1.8548222780227661], + [3.498185873031616, -5.596277236938477], + [-5.406606197357178, -0.5170939564704895], + [-0.016892321407794952, -2.7145421504974365], + [-0.032544977962970734, 12.894624710083008], + [7.839174747467041, -2.124603033065796], + [-2.3918981552124023, -3.104249954223633], + [3.0600123405456543, -4.878399848937988], + [-5.2329421043396, 5.947066307067871], + [-3.370340585708618, -2.2317698001861572], + [2.569185733795166, 6.258871078491211], + [-6.992075443267822, -0.3093283176422119], + [2.320765733718872, 4.85904598236084], + [-6.545224189758301, -1.4415652751922607], + [2.0572731494903564, 1.737925410270691], + [9.889369010925293, -2.5672948360443115], + [2.385887384414673, -7.108741760253906], + [-6.347143173217773, 7.605513095855713], + [-2.3435747623443604, -2.4539120197296143], + [-2.8590478897094727, 5.379857540130615], + [-5.902760982513428, -2.393023729324341], + [1.1744868755340576, -0.2779700756072998], + [-7.081554412841797, 8.30932903289795], + [1.4022631645202637, -0.11145380139350891], + [-1.766974925994873, 2.3124072551727295], + [2.5601675510406494, -1.8114213943481445], + [2.8596620559692383, -5.32807731628418], + [-6.483907222747803, -0.007616404443979263], + [-0.3189791440963745, -0.4327077269554138], + [-4.77531099319458, -6.8861799240112305], + [3.020169496536255, -7.611386299133301], + [1.9474027156829834, 5.132216453552246], + [-4.27101469039917, 6.2568559646606445], + [1.2424404621124268, -7.311953544616699], + [-4.319157123565674, 4.302712440490723], + [-5.154707431793213, -6.434110641479492], + [5.503439903259277, -0.9953733682632446], + [1.76859712600708, 4.598567008972168], + [-6.740172386169434, -0.9152523279190063], + [3.7428901195526123, 1.3933603763580322], + [4.296727657318115, 6.611575603485107], + [-5.442992210388184, 6.948028564453125], + [3.666940927505493, 1.3357560634613037], + [-6.934265613555908, -0.2202540636062622], + [-2.545545816421509, 2.37847900390625], + [5.495119094848633, 7.600922107696533], + [-5.118708610534668, -6.063778877258301], + [3.1200244426727295, -9.539681434631348], + [3.331235647201538, -5.299054145812988], + [-4.314051628112793, -1.6896320581436157], + [-2.0742835998535156, 2.582590103149414], + [3.436516523361206, -6.10291862487793], + [-4.612448215484619, 0.530153751373291], + [1.459374189376831, -7.453577995300293], + [-2.2764909267425537, 0.2579411566257477], + [-6.463298320770264, 2.9603958129882812], + [7.015084743499756, -1.6799899339675903], + [-0.23248207569122314, -1.1190639734268188], + [-2.1044673919677734, 2.428532838821411], + [2.9252359867095947, -9.675885200500488], + [-5.591084957122803, -0.1775161623954773], + [5.1136298179626465, -1.1662501096725464], + [0.11959009617567062, 11.077339172363281], + [8.850557327270508, -2.2604775428771973], + [9.585023880004883, -2.3152036666870117], + [5.109279632568359, -1.0154833793640137], + [-4.382547855377197, -4.002094745635986], + [-2.1071956157684326, 2.148456335067749], + [-2.48990535736084, 1.665524959564209], + [5.781683444976807, -0.9491972923278809], + [3.5627167224884033, -2.6397385597229004], + [0.3077714443206787, -0.19171246886253357], + [-3.9813082218170166, -6.2756195068359375], + [0.03806453198194504, 12.129395484924316], + [-3.9843761920928955, -6.094644546508789], + [-6.497079849243164, 0.6616345643997192], + [-5.607611656188965, -1.4163748025894165], + [-5.2003607749938965, -5.497713088989258], + [8.694586753845215, -2.374798059463501], + [9.039366722106934, -2.5927634239196777], + [0.534028947353363, 11.348220825195312], + [5.579282283782959, -1.8705974817276], + [0.07237278670072556, 9.772327423095703], + [3.0082602500915527, -3.8925397396087646], + [-6.842361927032471, 8.009770393371582], + [-3.104422092437744, -5.728045463562012], + [-5.951070308685303, 5.504636764526367], + [6.474699974060059, -6.820491790771484], + [-5.095714569091797, -2.4239342212677], + [-5.064640522003174, -1.7930749654769897], + [3.4252002239227295, -9.202666282653809], + [8.109603881835938, -2.197528839111328], + [-3.077329635620117, 1.4357948303222656], + [3.174638271331787, -4.560973167419434], + [0.09761052578687668, 11.81837272644043], + [-4.912105083465576, -6.133493900299072], + [2.69736647605896, 4.255401134490967], + [9.53712272644043, -2.4134247303009033], + [1.0879175662994385, -6.435495853424072], + [1.643225908279419, 0.943510890007019], + [8.731926918029785, -2.2039244174957275], + [-0.1703357696533203, 9.247678756713867], + [2.935142993927002, 1.99461829662323], + [-4.703346252441406, -1.7600702047348022], + [1.8006625175476074, -5.916499137878418], + [2.354440450668335, -8.522065162658691], + [-1.772456407546997, 2.3994545936584473], + [3.6521475315093994, -7.923618793487549], + [-5.195810794830322, -3.5462567806243896], + [-2.1692724227905273, 2.178166389465332], + [-4.4363179206848145, 5.110356330871582], + [-3.316398859024048, 5.4555816650390625], + [-3.9393630027770996, -0.5563919544219971], + [3.346581220626831, 7.585845470428467], + [6.739256381988525, -3.0997140407562256], + [4.854288101196289, -1.4142264127731323], + [-2.114790439605713, -4.221034526824951], + [-5.999093532562256, -0.06316238641738892], + [-4.162877559661865, -6.526524066925049], + [-0.3803342878818512, -0.43675461411476135], + [-1.0064464807510376, 1.2982784509658813], + [-1.9930384159088135, -3.381873369216919], + [3.753793716430664, -5.340646266937256], + [5.996664524078369, -1.4971169233322144], + [-2.4874911308288574, 2.0381124019622803], + [4.403775215148926, -2.1617233753204346], + [-7.6137309074401855, -0.3640662431716919], + [-4.932060718536377, -5.641511917114258], + [-3.4239883422851562, -4.3230743408203125], + [0.17716628313064575, 10.316153526306152], + [6.100704669952393, -2.136565923690796], + [2.956362009048462, -4.134171009063721], + [-0.20434901118278503, -0.7609786987304688], + [-4.693428993225098, 4.786681652069092], + [3.1921424865722656, -3.46671462059021], + [7.56065034866333, -1.8771295547485352], + [-4.861109733581543, 3.6106455326080322], + [5.6046013832092285, -1.2722054719924927], + [2.6589808464050293, 3.8724663257598877], + [8.217650413513184, -1.860572099685669], + [4.337421894073486, 6.733925819396973], + [-0.032473452389240265, 9.837871551513672], + [-4.706888675689697, -6.545267581939697], + [3.3309743404388428, -7.0738372802734375], + [-4.635224342346191, -6.840044975280762], + [6.288717746734619, 7.675009727478027], + [-4.711802959442139, -0.26506364345550537], + [1.9232571125030518, 4.906129837036133], + [3.961573839187622, -3.296376943588257], + [3.570385456085205, -0.15622340142726898], + [-6.522834777832031, 7.62579345703125], + [2.581310987472534, -8.78962516784668], + [-2.0134592056274414, -4.220798492431641], + [-5.3116135597229, -2.9291326999664307], + [-4.598901271820068, -7.163205623626709], + [-1.3262921571731567, -3.2251882553100586], + [2.4075849056243896, 5.514679431915283], + [-3.964207649230957, -6.819465637207031], + [9.567566871643066, -2.3762128353118896], + [2.7613675594329834, -3.8062124252319336], + [-2.4974591732025146, 1.5385349988937378], + [-1.8322501182556152, -2.1914408206939697], + [-2.8777596950531006, -5.269891262054443], + [2.225846529006958, 5.11961555480957], + [6.49169921875, 7.908213138580322], + [3.8284411430358887, -5.279469013214111], + [-4.12897253036499, -6.733479022979736], + [0.15507394075393677, 11.43387222290039], + [-2.440493106842041, 2.1807680130004883], + [-0.037969715893268585, 9.530986785888672], + [-0.09545633941888809, -1.5684186220169067], + [4.256743907928467, -3.0180585384368896], + [-2.2677907943725586, 2.6343328952789307], + [-6.622759819030762, 7.658675193786621], + [1.6561479568481445, 0.1588124930858612], + [3.12237286567688, -2.2548491954803467], + [8.777771949768066, -2.4121694564819336], + [9.331454277038574, -2.6611337661743164], + [-0.9522830843925476, 0.8112740516662598], + [7.20428991317749, -2.902186632156372], + [3.917692184448242, 1.6658509969711304], + [1.4178240299224854, 3.6303346157073975], + [-2.490250587463379, 2.208000659942627], + [2.2354373931884766, -7.630924701690674], + [0.19049102067947388, 9.918149948120117], + [1.6719813346862793, -7.8014116287231445], + [9.961543083190918, -2.390403985977173], + [0.4097021818161011, 10.841833114624023], + [3.8835177421569824, 6.426900863647461], + [2.719438314437866, -2.0503482818603516], + [-4.772559642791748, 4.744898319244385], + [-2.4330437183380127, 0.921088695526123], + [3.468095541000366, -5.4855241775512695], + [2.7204678058624268, 4.413393497467041], + [0.0934017226099968, 12.405306816101074], + [-1.9708377122879028, 0.6969702243804932], + [-4.938248157501221, -4.441566467285156], + [7.5310869216918945, -1.860224962234497], + [-4.445498943328857, -0.7085342407226562], + [-3.76011061668396, 5.71684455871582], + [2.977585554122925, -7.709830284118652], + [-2.729323625564575, 1.7980769872665405], + [-5.549957752227783, 6.30674934387207], + [-5.237938404083252, 2.7632532119750977], + [-6.473473072052002, 6.825505256652832], + [-2.195141077041626, 1.8274455070495605], + [4.488437652587891, 1.939913272857666], + [-1.5564818382263184, 2.1714842319488525], + [0.03950762003660202, 8.734636306762695], + [6.190107822418213, 7.878239631652832], + [-3.596714973449707, 6.188143730163574], + [0.8627509474754333, 7.333303451538086], + [-2.7115156650543213, 2.134997606277466], + [5.137712001800537, 7.081424713134766], + [8.08108139038086, -1.9773541688919067], + [5.181763648986816, -2.9157333374023438], + [-2.3845295906066895, 2.207437753677368], + [-2.657606363296509, 1.8082293272018433], + [8.839908599853516, -2.3978793621063232], + [7.003177165985107, -2.5250489711761475], + [3.644757032394409, -7.142385482788086], + [3.3837337493896484, -7.397204875946045], + [7.6939239501953125, -2.096062421798706], + [0.8827493190765381, -6.813141822814941], + [6.339161396026611, -1.3691505193710327], + [2.2098255157470703, -6.876086711883545], + [-4.7192583084106445, 4.371247291564941], + [4.230592250823975, -7.665952682495117], + [-2.241910219192505, 2.6853413581848145], + [-6.27586030960083, -1.3257381916046143], + [0.5346485376358032, 10.283206939697266], + [-4.385453701019287, -2.8698055744171143], + [-2.399561643600464, -3.053334951400757], + [-5.805132865905762, 6.656233310699463], + [6.437657356262207, 8.095868110656738], + [3.0967254638671875, 0.9359585642814636], + [9.842765808105469, -2.4533417224884033], + [0.6832926869392395, -0.7531164288520813], + [-3.7594707012176514, -1.6048144102096558], + [1.71944260597229, -7.749801158905029], + [-1.2118079662322998, 1.685822606086731], + [2.660055637359619, -9.50677490234375], + [4.202260494232178, 0.269070565700531], + [6.828226089477539, -5.592669486999512], + [-4.041403293609619, -1.5569077730178833], + [-0.0018578842282295227, 9.189007759094238], + [1.2997242212295532, -0.4002402424812317], + [1.1226532459259033, -0.6459280252456665], + [0.190374493598938, 10.462591171264648], + [6.525881767272949, 8.032193183898926], + [-5.359032154083252, 8.004173278808594], + [-7.056525230407715, 8.192930221557617], + [0.6547853350639343, 8.420516967773438], + [1.8718887567520142, 6.31381893157959], + [-5.843588829040527, -2.2207581996917725], + [-2.8365461826324463, -3.4018001556396484], + [3.541783571243286, -7.606893062591553], + [-6.3820414543151855, -1.6625739336013794], + [2.8403007984161377, -3.875330924987793], + [-3.923618793487549, 5.538944244384766], + [0.09945874661207199, 9.413665771484375], + [4.162229537963867, -3.3875088691711426], + [3.632373571395874, 6.406118869781494], + [3.536860704421997, 1.1499695777893066], + [0.24405986070632935, 10.87666130065918], + [3.4418370723724365, -7.971438407897949], + [2.8136589527130127, 1.8915177583694458], + [-4.654806613922119, 5.279475212097168], + [2.9884164333343506, -4.6977458000183105], + [6.851787090301514, -5.0947980880737305], + [-5.360978603363037, -6.960406303405762], + [6.073830604553223, 7.6575703620910645], + [2.9001615047454834, -9.511608123779297], + [8.958550453186035, -2.6678194999694824], + [3.188328981399536, -7.251893043518066], + [-4.927484035491943, -6.71962833404541], + [-1.917249321937561, 2.013030529022217], + [2.4035770893096924, -7.2358808517456055], + [-5.613857746124268, 6.334273815155029], + [-3.2754430770874023, 4.49399471282959], + [0.0003305599093437195, 9.547648429870605], + [3.66150164604187, 1.1584197282791138], + [-2.4830329418182373, 2.0365707874298096], + [-4.313171863555908, 4.264196395874023], + [1.6091158390045166, -0.29128167033195496], + [10.20400333404541, -2.509371519088745], + [10.323495864868164, -2.3810770511627197], + [3.15244460105896, 6.232727527618408], + [6.9452691078186035, 8.350926399230957], + [8.983855247497559, -2.305494546890259], + [5.168354511260986, 6.4063639640808105], + [4.75553560256958, 6.656867027282715], + [-2.5173404216766357, 2.675987482070923], + [3.357165575027466, -7.039263725280762], + [2.7052619457244873, 6.231818199157715], + [0.38972049951553345, 11.613243103027344], + [-2.9021594524383545, -1.5590565204620361], + [-4.378849506378174, -5.461067199707031], + [3.2967162132263184, -3.687401056289673], + [2.4775538444519043, 5.302781105041504], + [-3.7765586376190186, -5.957963943481445], + [-2.405146837234497, 1.400686264038086], + [-0.16138052940368652, 9.385820388793945], + [4.70444393157959, -7.04188346862793], + [2.3567636013031006, 3.4526546001434326], + [3.7410242557525635, -1.950918436050415], + [0.05274104326963425, 9.63871955871582], + [5.407889366149902, -3.500077962875366], + [-6.707046985626221, 7.802696228027344], + [-3.3858039379119873, -4.24064826965332], + [0.16870921850204468, 8.332615852355957], + [2.517225980758667, -9.04082202911377], + [7.897006034851074, -2.086599826812744], + [2.20898175239563, -7.953660011291504], + [2.208400249481201, 2.5322530269622803], + [-6.0562663078308105, -0.15709280967712402], + [-6.016473293304443, 6.936212062835693], + [4.880259990692139, 7.288973331451416], + [-2.6728007793426514, 1.9676159620285034], + [3.5264246463775635, -4.291813850402832], + [-6.785807132720947, 8.04096508026123], + [2.258126735687256, -7.342140197753906], + [-2.369483470916748, -3.4437057971954346], + [-5.571742057800293, -2.1421797275543213], + [1.3753228187561035, -0.1725170612335205], + [-2.5372462272644043, 2.1674864292144775], + [8.437995910644531, -2.3161659240722656], + [-0.09275621920824051, 14.53327751159668], + [8.24878215789795, -2.246774911880493], + [4.229442119598389, 1.7955559492111206], + [2.865473985671997, -4.3487653732299805], + [2.5109686851501465, 5.990015983581543], + [9.422472953796387, -2.3338747024536133], + [3.2612881660461426, -3.556852102279663], + [8.566939353942871, -2.2495548725128174], + [2.9857382774353027, -4.244488716125488], + [3.452512264251709, -4.680534362792969], + [-6.519345760345459, 7.645712852478027], + [2.191389322280884, 4.756582736968994], + [-2.5366432666778564, 1.613432765007019], + [-1.10118567943573, 1.9269111156463623], + [9.287507057189941, -2.3785088062286377], + [6.687655925750732, -2.9290573596954346], + [2.3556067943573, -7.467032432556152], + [5.484192371368408, 7.238321781158447], + [2.3010690212249756, 4.126708030700684], + [0.12932121753692627, 0.7803863286972046], + [-3.3765981197357178, 5.970998764038086], + [6.759410381317139, -1.1408230066299438], + [0.6386877298355103, 5.832949161529541], + [6.185658931732178, -6.133280277252197], + [3.201292037963867, 1.427704930305481], + [-1.9538015127182007, 2.2271950244903564], + [5.702653408050537, 7.495591163635254], + [4.84581184387207, 7.377192974090576], + [1.305600643157959, 0.8263038396835327], + [0.1373726725578308, 10.43471908569336], + [-1.8173376321792603, 2.3418924808502197], + [3.4267771244049072, -8.517680168151855], + [3.1750903129577637, -4.418421745300293], + [5.470740795135498, -1.2126940488815308], + [-2.6657629013061523, -2.0352330207824707], + [-2.235795736312866, 1.7947285175323486], + [-4.878185749053955, -6.5511956214904785], + [8.002556800842285, -2.2468667030334473], + [-2.537196159362793, 0.2768212556838989], + [1.6164053678512573, -0.05076274648308754], + [-2.677828550338745, 2.2550525665283203], + [2.898170232772827, -4.081341743469238], + [-3.4764931201934814, -3.2117059230804443], + [-4.338699817657471, -3.4554569721221924], + [-6.371815204620361, 6.4373931884765625], + [-2.3498003482818604, 6.815303802490234], + [0.1439111828804016, 9.803462982177734], + [-2.0842390060424805, 2.1177501678466797], + [2.349242687225342, 6.203130722045898], + [1.6524744033813477, -3.1734073162078857], + [-2.3072476387023926, 2.229951858520508], + [0.051191918551921844, 11.283735275268555], + [0.6227068305015564, -2.2320523262023926], + [-0.5474439859390259, -2.345985174179077], + [-2.1173763275146484, 2.5809295177459717], + [-3.614389419555664, -5.108977317810059], + [0.2096976637840271, 10.205107688903809], + [-4.805694580078125, -2.5218896865844727], + [6.038791179656982, -1.317867398262024], + [-1.8521878719329834, -3.1146748065948486], + [-2.1712992191314697, 2.5591235160827637], + [-1.2943017482757568, -3.827885150909424], + [0.5614175796508789, -0.8472809195518494], + [3.3298532962799072, -4.72829008102417], + [-2.1370699405670166, 0.5240526795387268], + [2.7886507511138916, -7.3139238357543945], + [0.5094526410102844, 10.965814590454102], + [-4.628147125244141, -7.013454437255859], + [-0.978290319442749, -3.496936559677124], + [-4.352070331573486, -0.3243676424026489], + [2.319277048110962, 1.6524217128753662], + [6.64815092086792, -5.700654983520508], + [-2.9694764614105225, 0.0037130676209926605], + [-1.637656807899475, -3.0812175273895264], + [-4.383447647094727, 4.83541202545166], + [2.3261187076568604, -7.434025764465332], + [-6.713486671447754, -0.3030608892440796], + [1.377718210220337, 2.1405227184295654], + [4.714992046356201, -3.951768159866333], + [-1.7281180620193481, 2.588197708129883], + [5.869938373565674, 7.415704727172852], + [7.037878513336182, -2.0627970695495605], + [-2.524446725845337, 1.8342097997665405], + [6.260354518890381, -1.3870829343795776], + [-1.9856215715408325, 1.6604880094528198], + [2.3191564083099365, -8.68339729309082], + [3.751037359237671, -3.6783928871154785], + [0.07303737848997116, 9.769002914428711], + [-5.207931041717529, -3.93058705329895], + [-5.232085704803467, -2.093153238296509], + [2.5521199703216553, -9.57631778717041], + [-3.138869524002075, -2.2512714862823486], + [0.1433679461479187, -4.03963041305542], + [-7.474827289581299, 0.4290210008621216], + [4.7987518310546875, -5.642722129821777], + [5.513071537017822, -1.7373926639556885], + [-5.763115406036377, 6.406351566314697], + [6.932369709014893, -6.032829284667969], + [1.2344017028808594, -7.030200958251953], + [-4.48395299911499, -6.759677886962891], + [-1.7050071954727173, 2.0005431175231934], + [-4.395735263824463, -2.478417158126831], + [-3.2636468410491943, -5.099307060241699], + [-4.966915607452393, -7.297487258911133], + [-1.6686863899230957, -3.5958821773529053], + [3.456477403640747, -3.4533231258392334], + [9.908658027648926, -2.524932622909546], + [4.890748500823975, -0.7965493202209473], + [0.5038903951644897, -4.176234245300293], + [-4.557947635650635, -7.07645320892334], + [0.5829064846038818, -1.2169535160064697], + [-7.018685817718506, 7.774084091186523], + [2.2145559787750244, 5.7916483879089355], + [-4.273200988769531, -6.5482378005981445], + [3.357272148132324, -6.339645862579346], + [-1.5750693082809448, 2.2487547397613525], + [2.8569955825805664, -7.63458776473999], + [0.09180521219968796, 12.045783042907715], + [-2.4539413452148438, 2.393561363220215], + [0.5530178546905518, -5.469064712524414], + [-6.1179518699646, 6.880644798278809], + [-6.662086486816406, 7.869113922119141], + [1.9430568218231201, 4.546557903289795], + [2.923231840133667, 1.2173141241073608], + [-0.8007166385650635, -1.9544123411178589], + [1.4364445209503174, -7.333332061767578], + [-0.5738641619682312, 0.25253826379776], + [2.7970826625823975, -7.407440185546875], + [-3.5891494750976562, -5.977134704589844], + [2.6583096981048584, -3.866255283355713], + [-1.0059010982513428, -0.5803967714309692], + [7.378347873687744, -1.8751354217529297], + [-0.11946827918291092, 13.563705444335938], + [2.7028794288635254, 3.8183023929595947], + [0.21954774856567383, 11.670354843139648], + [3.2847917079925537, 1.7332313060760498], + [3.4048802852630615, 5.835539817810059], + [6.5197224617004395, -2.883100748062134], + [-1.3099794387817383, -1.5409270524978638], + [7.722899913787842, -2.1127541065216064], + [-4.5491766929626465, -1.1713014841079712], + [-6.23738431930542, -1.5167168378829956], + [4.7744622230529785, 2.284640073776245], + [3.5456128120422363, 5.963882923126221], + [1.2682477235794067, -1.0288549661636353], + [-4.355890274047852, -6.802316665649414], + [-4.680103778839111, -3.1104228496551514], + [-0.029248245060443878, 13.096392631530762], + [3.860283136367798, -3.575446367263794], + [-6.37443733215332, 6.811222553253174], + [8.019282341003418, -2.1230618953704834], + [-4.637129306793213, 4.106853485107422], + [3.3128912448883057, 1.1440775394439697], + [0.20174968242645264, 12.044170379638672], + [3.5281174182891846, -3.125844955444336], + [8.236313819885254, -2.2571732997894287], + [1.955165147781372, 1.0475941896438599], + [0.9262843728065491, -0.8588244318962097], + [6.124329566955566, 8.071975708007812], + [0.05028396099805832, 11.365059852600098], + [-4.265549659729004, -6.256793022155762], + [9.438117980957031, -2.4260685443878174], + [5.222062587738037, -3.7274539470672607], + [-4.131388187408447, -6.210967063903809], + [-4.641770839691162, 4.696382522583008], + [-1.1968344449996948, -1.628772258758545], + [-0.19093173742294312, 9.904293060302734], + [2.286841869354248, 2.1301941871643066], + [-5.954278469085693, 2.5170464515686035], + [0.25455325841903687, 10.741434097290039], + [-1.4804171323776245, 1.165528416633606], + [-2.3737127780914307, 2.1454920768737793], + [-4.196077823638916, -3.4071438312530518], + [2.1001033782958984, 6.448240280151367], + [-0.23913919925689697, 8.441519737243652], + [-4.94181489944458, -0.527833104133606], + [-1.7911648750305176, -4.3600873947143555], + [-1.7891671657562256, 2.2329928874969482], + [-1.4142415523529053, -4.296454429626465], + [0.41247594356536865, -0.837226152420044], + [0.2063543200492859, 11.85737419128418], + [-6.946168899536133, 0.5642167925834656], + [-4.058334827423096, -0.8431812524795532], + [-8.011543273925781, -0.4504876136779785], + [0.012238256633281708, 10.21321964263916], + [2.324213743209839, -2.8547253608703613], + [-4.018731117248535, -5.865662574768066], + [0.4041597843170166, -0.27592459321022034], + [2.3254613876342773, 5.1478142738342285], + [10.140924453735352, -2.3194220066070557], + [-0.5768455266952515, -1.7987309694290161], + [7.545945167541504, -1.831186294555664], + [4.1485419273376465, -1.6452909708023071], + [2.224801778793335, 4.960708141326904], + [5.75536584854126, -2.590614080429077], + [0.059201352298259735, 12.163084030151367], + [8.159924507141113, -2.4180490970611572], + [2.912527322769165, 4.929064750671387], + [-2.134979248046875, 2.2577414512634277], + [5.189566135406494, 7.176183700561523], + [7.359416484832764, 9.037927627563477], + [-1.3965321779251099, -0.9956550598144531], + [2.658320188522339, 1.5638670921325684], + [-5.337432861328125, 7.514333248138428], + [2.4091460704803467, 5.945082664489746], + [0.7633568644523621, -1.0810903310775757], + [3.3224215507507324, -7.088535785675049], + [4.501420021057129, 7.190281867980957], + [1.8282028436660767, 5.406505584716797], + [-3.2356553077697754, -3.933393955230713], + [-1.2357721328735352, 1.7148534059524536], + [-1.7374173402786255, 2.1925227642059326], + [-1.410132884979248, -0.5156998634338379], + [9.744536399841309, -2.459294557571411], + [-4.492034435272217, -3.8256466388702393], + [0.0630296990275383, 11.680914878845215], + [-6.820777893066406, -1.8051892518997192], + [-3.0083229541778564, -5.249530792236328], + [-0.03180713206529617, 11.562932968139648], + [-4.338237285614014, 4.673285484313965], + [4.450307846069336, -3.7737576961517334], + [0.03736346215009689, 12.727031707763672], + [0.010084204375743866, 12.729497909545898], + [3.7383482456207275, 6.732746124267578], + [1.4992477893829346, -5.010193824768066], + [-4.549463272094727, -0.845307469367981], + [-0.1334742307662964, -0.03762171044945717], + [-2.2279374599456787, 1.5796042680740356], + [4.88254976272583, 1.8398144245147705], + [9.331332206726074, -2.4409523010253906], + [-0.002383299171924591, 12.241398811340332], + [-0.01544094830751419, 12.577296257019043], + [-7.337853908538818, 7.683071136474609], + [-4.305945873260498, -6.4733567237854], + [3.4392788410186768, -4.7847113609313965], + [-2.449902057647705, 1.8396438360214233], + [7.667514324188232, -2.1623737812042236], + [0.1998143196105957, -1.3574199676513672], + [9.25705623626709, -2.3219776153564453], + [-4.319350242614746, -6.464263916015625], + [-3.698382616043091, 4.96953821182251], + [-2.1850149631500244, 2.261413335800171], + [-4.436092853546143, -7.307819843292236], + [3.008504867553711, -8.129881858825684], + [-0.2548169791698456, -1.1779391765594482], + [2.0658366680145264, -8.79271125793457], + [-2.2919974327087402, 2.2463626861572266], + [4.266672611236572, -9.334731101989746], + [2.902883291244507, -7.185544013977051], + [-4.4211297035217285, -5.852478981018066], + [-3.697443723678589, -5.827489852905273], + [2.443937301635742, 2.0144989490509033], + [5.823515892028809, -5.066096305847168], + [3.0125234127044678, -4.002410411834717], + [1.2992937564849854, 0.7693878412246704], + [-5.2959980964660645, -6.439092636108398], + [2.3082449436187744, -6.407299041748047], + [0.5287615656852722, 11.828784942626953], + [0.07314669340848923, 10.07779312133789], + [3.5468099117279053, -5.213923454284668], + [0.2765217423439026, 11.742949485778809], + [-4.243217945098877, -6.274814605712891], + [-1.913874864578247, -3.5856070518493652], + [0.12739557027816772, 6.085616111755371], + [9.221842765808105, -2.503242254257202], + [-5.5168681144714355, 6.870945453643799], + [3.676966667175293, -5.654479026794434], + [-6.591972351074219, -1.52215576171875], + [2.0964317321777344, -8.158134460449219], + [2.1065144538879395, -7.019787311553955], + [7.393465995788574, -2.4526565074920654], + [-1.977116346359253, -0.37082386016845703], + [-4.867466449737549, -3.831800699234009], + [-2.680318593978882, 4.412020206451416], + [-0.15534639358520508, -1.5707117319107056], + [-2.5676236152648926, 1.9798718690872192], + [0.6755207180976868, -0.7880363464355469], + [2.2192747592926025, 2.7890684604644775], + [5.693612575531006, 7.381792068481445], + [-3.392092704772949, -4.433730125427246], + [3.6969821453094482, -4.970666408538818], + [9.109185218811035, -2.3377816677093506], + [2.6564860343933105, -3.8120930194854736], + [2.27873158454895, 2.1562793254852295], + [3.0448150634765625, -0.13401703536510468], + [-3.653010606765747, 5.681135177612305], + [-3.124779462814331, -3.7615933418273926], + [-1.39020574092865, 1.0382025241851807], + [6.737321853637695, -2.2634360790252686], + [2.0151286125183105, -0.06243083253502846], + [0.1662936806678772, 10.09197998046875], + [0.9557884335517883, 7.292120933532715], + [-4.075727939605713, -6.771828651428223], + [-0.35724613070487976, -1.7057386636734009], + [-4.125899314880371, -6.654644012451172], + [2.6687872409820557, 6.397605895996094], + [-2.1516642570495605, 2.4267735481262207], + [-2.0954396724700928, 2.5595667362213135], + [-2.5067484378814697, -4.416759014129639], + [2.678659200668335, -8.007012367248535], + [1.6498241424560547, -0.12876586616039276], + [7.703427314758301, -2.2453670501708984], + [-1.6775329113006592, 1.304987907409668], + [-4.655596733093262, -2.778352975845337], + [-6.521956920623779, -1.178207278251648], + [-1.2893255949020386, 1.8772743940353394], + [3.121411085128784, -4.439840793609619], + [-3.748793363571167, -6.072996139526367], + [0.19054371118545532, 11.648548126220703], + [-3.8240578174591064, 3.502105951309204], + [-4.180609226226807, -2.9873015880584717], + [3.859957456588745, -3.4847240447998047], + [-2.5197625160217285, 1.7309068441390991], + [4.4055047035217285, -4.02930212020874], + [5.827826023101807, 7.410985469818115], + [-1.6180086135864258, 2.1939690113067627], + [0.014741353690624237, 12.277088165283203], + [-4.262590408325195, 5.607876300811768], + [2.8518998622894287, -8.237226486206055], + [-4.85705041885376, 4.550591468811035], + [-4.906644344329834, -6.328314781188965], + [8.766264915466309, -2.225821018218994], + [4.5837907791137695, -2.625835657119751], + [-1.4115118980407715, 1.7407469749450684], + [2.448732376098633, -3.0011632442474365], + [1.9748318195343018, -2.7143919467926025], + [-5.0909247398376465, -7.054184436798096], + [-2.413139820098877, 1.134828805923462], + [1.3061859607696533, 5.095319747924805], + [7.531518459320068, -1.8192297220230103], + [-7.1028218269348145, -0.09030711650848389], + [3.3517749309539795, -4.092730522155762], + [-4.96861457824707, -1.1937605142593384], + [4.6805291175842285, -3.0166616439819336], + [0.18114560842514038, 10.437030792236328], + [-2.115417242050171, 2.657663345336914], + [2.9390676021575928, 5.933096408843994], + [-4.773692607879639, -7.297721862792969], + [-6.871438503265381, 7.997522354125977], + [-4.110351085662842, -2.728931188583374], + [10.463682174682617, -2.4328088760375977], + [2.4227969646453857, 0.9266824722290039], + [6.445118427276611, 8.03497314453125], + [10.958537101745605, -2.440866231918335], + [0.017557434737682343, 12.485523223876953], + [-2.5943410396575928, -2.8329598903656006], + [-4.429411888122559, 8.374246597290039], + [-0.6980021595954895, 1.4853416681289673], + [-5.894618988037109, -2.6190221309661865], + [-5.307560443878174, 5.593205451965332], + [9.843749046325684, -2.3987646102905273], + [5.386419296264648, 6.923532485961914], + [-4.372996807098389, -6.512993812561035], + [6.582278251647949, -1.2183085680007935], + [3.2106130123138428, 6.293550491333008], + [-1.534337043762207, 2.358916759490967], + [-4.683257579803467, -6.329872131347656], + [-2.767036199569702, -2.8996458053588867], + [-2.7582883834838867, -2.6054553985595703], + [8.445252418518066, -1.9105989933013916], + [-2.6365432739257812, 0.33102282881736755], + [0.1454639434814453, 11.165144920349121], + [-2.393767833709717, 2.247544527053833], + [4.711034297943115, -4.1300740242004395], + [-0.014144308865070343, 12.721960067749023], + [-3.537095308303833, 0.15621936321258545], + [6.883090019226074, 8.366867065429688], + [0.20775145292282104, 10.760655403137207], + [-3.432544708251953, 0.9970743656158447], + [2.8804409503936768, -4.065523147583008], + [-4.102627754211426, -5.438684463500977], + [1.58419930934906, 4.003510475158691], + [0.15537041425704956, 12.099459648132324], + [-2.3384311199188232, 2.2140324115753174], + [2.4895966053009033, 3.4604744911193848], + [7.1379218101501465, -5.443212509155273], + [1.9640390872955322, 2.2036192417144775], + [3.86495041847229, 6.6044158935546875], + [-5.501671314239502, -2.5168025493621826], + [1.7162595987319946, -8.51473331451416], + [4.853521347045898, -0.968454897403717], + [-1.1162906885147095, -2.8657007217407227], + [-0.03100956231355667, 9.838245391845703], + [-4.8918585777282715, -4.02972412109375], + [-4.246123790740967, -6.649008750915527], + [0.09150146692991257, 12.198381423950195], + [-4.421131610870361, -5.995182991027832], + [3.419430732727051, -3.518319606781006], + [-4.825425624847412, -6.139059066772461], + [-2.0752980709075928, 2.3493282794952393], + [-3.6253345012664795, -5.291477203369141], + [2.647071599960327, -3.079331636428833], + [2.296985387802124, -5.461015701293945], + [2.9782936573028564, -2.481598138809204], + [-1.0713452100753784, -3.4847965240478516], + [-2.995842218399048, 4.788206100463867], + [-2.321561336517334, 2.2889585494995117], + [-0.04281926900148392, 12.648711204528809], + [8.248184204101562, -2.2398293018341064], + [-4.107170104980469, 6.336572647094727], + [-3.759650468826294, -0.2570143938064575], + [-4.4646453857421875, -4.699681282043457], + [-2.2110342979431152, 2.2301769256591797], + [3.499533176422119, -7.019269943237305], + [-4.810177326202393, -3.2948238849639893], + [-5.485838413238525, 0.7344238758087158], + [-2.4517579078674316, 1.5195561647415161], + [2.7507030963897705, -3.4467520713806152], + [-4.855921268463135, -7.517071723937988], + [6.111862659454346, -1.5594336986541748], + [2.4904284477233887, -8.04689884185791], + [7.726017951965332, -2.4612748622894287], + [1.497410535812378, -6.815133571624756], + [0.46102213859558105, -5.656394004821777], + [-4.8675618171691895, 5.433145999908447], + [0.2612531781196594, 10.971967697143555], + [1.8095934391021729, 0.25936359167099], + [1.7135546207427979, -7.664222240447998], + [7.473756790161133, -2.362224817276001], + [5.6683735847473145, -2.4592201709747314], + [-2.7345948219299316, 2.069862127304077], + [0.8124225735664368, 10.072212219238281], + [6.933969020843506, -1.6127597093582153], + [0.2490781545639038, 11.165380477905273], + [0.7708342671394348, 11.076725006103516], + [4.029791831970215, -8.47553825378418], + [3.9013540744781494, -3.682497262954712], + [4.386000633239746, 5.976100444793701], + [9.31204891204834, -2.3746578693389893], + [-0.7804310917854309, 0.8857141137123108], + [-0.7691072821617126, 0.2328106164932251], + [0.436302125453949, 0.09928590059280396], + [0.2446308732032776, 10.986737251281738], + [2.738525629043579, -8.065694808959961], + [-2.384700059890747, -3.441180467605591], + [2.2633650302886963, 5.188164710998535], + [0.17907148599624634, 10.97548770904541], + [0.19836699962615967, 10.70383358001709], + [2.0515189170837402, 4.448896408081055], + [3.786912202835083, -2.4984240531921387], + [3.3280413150787354, 1.2972749471664429], + [5.847442626953125, -1.0792018175125122], + [-1.9410207271575928, 2.581073522567749], + [2.936669111251831, -8.43336296081543], + [-0.28393301367759705, -0.04355371743440628], + [1.088991403579712, -6.298370361328125], + [-4.423216342926025, -5.5363264083862305], + [6.237993240356445, -5.058765411376953], + [0.09313683956861496, 10.636442184448242], + [1.552203893661499, -7.470363616943359], + [3.289642095565796, -4.235291957855225], + [7.170245170593262, -2.1716649532318115], + [-4.263794422149658, 6.149497032165527], + [4.39462947845459, -3.3906052112579346], + [-1.6014115810394287, 0.9110637903213501], + [-4.384841442108154, -6.332878112792969], + [-4.9412102699279785, -1.1174349784851074], + [6.450994968414307, -2.529106378555298], + [-1.877689003944397, 0.9244558215141296], + [3.205167531967163, 1.4055384397506714], + [9.185158729553223, -2.3466556072235107], + [-0.6779417395591736, -1.0303009748458862], + [-4.417069911956787, -3.137888193130493], + [-2.312040328979492, 0.022953983396291733], + [4.978300094604492, -2.5360844135284424], + [-2.819913148880005, 7.076220989227295], + [-5.373082160949707, 6.031469345092773], + [2.0648891925811768, 5.305023193359375], + [-6.807182788848877, 7.9755144119262695], + [0.06555753201246262, 10.144076347351074], + [10.592238426208496, -2.466977834701538], + [1.6597505807876587, 4.841644287109375], + [2.4330976009368896, 0.8095241785049438], + [5.78295373916626, -1.9878507852554321], + [-4.735407829284668, 4.841468811035156], + [0.15737074613571167, 9.829893112182617], + [2.968820810317993, -4.162693500518799], + [3.0766963958740234, -4.350205898284912], + [0.020263485610485077, 11.642439842224121], + [-5.144039630889893, -2.8037116527557373], + [-2.509894609451294, 1.9246584177017212], + [-0.13461896777153015, -1.603547215461731], + [-4.590330123901367, -0.21875280141830444], + [4.042891025543213, -4.822856903076172], + [4.155605792999268, 1.7909138202667236], + [2.7452261447906494, 5.875741004943848], + [0.06216483563184738, 12.277132034301758], + [-4.56917142868042, -6.785750389099121], + [2.8428056240081787, 2.164034366607666], + [-0.719916045665741, -1.865209937095642], + [0.12383490055799484, 10.120035171508789], + [-2.7835588455200195, -3.7459628582000732], + [-5.918399333953857, -1.1713550090789795], + [-0.8308093547821045, -2.433727502822876], + [2.5045320987701416, -8.2440185546875], + [4.8602118492126465, -4.900115013122559], + [8.202670097351074, -2.281029462814331], + [9.87906265258789, -2.4456136226654053], + [0.18833619356155396, 10.956564903259277], + [-7.637208938598633, 0.02396082505583763], + [-5.336472988128662, -3.820607900619507], + [2.7458579540252686, -5.909557819366455], + [-4.603222370147705, 4.959284782409668], + [7.959584712982178, -2.354551076889038], + [-4.5590996742248535, -7.096776485443115], + [3.6580684185028076, -3.348006010055542], + [6.5088911056518555, -1.4536664485931396], + [-6.615405559539795, 6.548247814178467], + [-2.3088722229003906, 2.1282291412353516], + [-1.21865713596344, 1.7827544212341309], + [-4.096813678741455, -5.948655128479004], + [-2.2931630611419678, -2.3888742923736572], + [-5.573538303375244, 4.69478178024292], + [9.984047889709473, -2.600005865097046], + [-5.75214147567749, 6.865105152130127], + [6.782101154327393, 8.3299560546875], + [-1.7461700439453125, 2.2707390785217285], + [7.493213176727295, -2.2278616428375244], + [2.8993544578552246, -4.11161994934082], + [3.0313477516174316, -3.5742526054382324], + [-0.24875038862228394, 8.81053638458252], + [-0.7888800501823425, 0.9311259388923645], + [2.210338830947876, 5.295100688934326], + [1.870599627494812, 1.8224302530288696], + [0.017629794776439667, 9.670201301574707], + [-2.5316035747528076, -1.273205041885376], + [3.101090669631958, -4.395651340484619], + [-1.784548044204712, 2.3886215686798096], + [2.4940860271453857, 5.929869174957275], + [1.2802543640136719, -6.561093807220459], + [-2.6203091144561768, 1.821874976158142], + [1.3557372093200684, -6.982044219970703], + [-2.745065450668335, -4.215852737426758], + [4.123356819152832, 1.5501209497451782], + [-4.590064525604248, -2.3832030296325684], + [-4.4172258377075195, 5.193437576293945], + [-4.457912445068359, 4.18446683883667], + [8.554478645324707, -2.2615630626678467], + [-0.05426282435655594, 13.844829559326172], + [1.7661288976669312, 4.618154525756836], + [0.2150464653968811, 11.496315002441406], + [6.008153438568115, -5.40394401550293], + [-3.525921583175659, -5.401020526885986], + [3.6668522357940674, -4.859667778015137], + [-0.2353564202785492, -0.7282639741897583], + [-4.3404693603515625, -6.368474960327148], + [2.1154325008392334, 2.915609359741211], + [6.226640224456787, -1.4392492771148682], + [3.714540481567383, -8.36314582824707], + [5.076669216156006, 7.5780863761901855], + [0.05707471817731857, 10.009562492370605], + [1.980311632156372, 2.656207323074341], + [-4.769338607788086, -5.617679595947266], + [-2.2461204528808594, 2.0895023345947266], + [7.726672649383545, -1.9484254121780396], + [9.042724609375, -2.3789467811584473], + [-2.1345620155334473, 2.525709629058838], + [0.3914356827735901, -0.6539429426193237], + [2.8606951236724854, -8.908872604370117], + [-2.2724974155426025, 2.5490529537200928], + [1.6169860363006592, 2.1343302726745605], + [5.949519634246826, 7.450495719909668], + [0.22796112298965454, 11.21863842010498], + [-6.428316116333008, 7.984253883361816], + [3.0107948780059814, -2.646476984024048], + [3.864103078842163, -7.822602272033691], + [-2.586735248565674, 1.9981662034988403], + [2.5902364253997803, -7.861406326293945], + [5.72594690322876, -2.22641921043396], + [0.10930018872022629, 10.884496688842773], + [2.2071516513824463, -2.887333393096924], + [1.467050552368164, -0.36651304364204407], + [-2.5529725551605225, -3.0935890674591064], + [2.4529988765716553, 2.81368350982666], + [-0.07404953986406326, 12.20370101928711], + [3.637437343597412, 5.981790542602539], + [0.5455970168113708, -1.1970527172088623], + [-4.458083629608154, -0.9188534617424011], + [-5.11531400680542, 5.6485209465026855], + [4.596165180206299, -3.8622961044311523], + [-3.4696881771087646, -2.6716442108154297], + [-3.030164957046509, -4.042275428771973], + [2.220421075820923, -2.745041608810425], + [0.6295151114463806, -0.9710242748260498], + [-4.0161542892456055, -1.4083764553070068], + [-4.660356044769287, -2.3580265045166016], + [2.051730155944824, -7.241684436798096], + [8.352747917175293, -2.4652881622314453], + [4.9618964195251465, 7.288293838500977], + [7.5500359535217285, -1.969002366065979], + [-3.909419536590576, -3.384012222290039], + [-2.5398643016815186, 2.2857937812805176], + [0.0708649680018425, 11.662042617797852], + [1.9352355003356934, -1.2065943479537964], + [3.1908109188079834, -6.849894046783447], + [7.405307292938232, -2.3456804752349854], + [-0.09343165904283524, 14.700590133666992], + [-0.24842652678489685, -1.676052212715149], + [3.0009639263153076, -3.748460531234741], + [4.198038101196289, 6.811029434204102], + [7.744962215423584, -2.1057443618774414], + [3.776697874069214, 1.0262223482131958], + [5.730927467346191, -5.098661422729492], + [2.447871446609497, 5.483211517333984], + [-2.661177635192871, 3.0366644859313965], + [-5.861828327178955, 6.070272922515869], + [6.423053741455078, -2.756803512573242], + [3.0019073486328125, 0.9155337810516357], + [5.353301525115967, -2.4680612087249756], + [0.04076879471540451, -1.5568913221359253], + [-2.3084311485290527, 1.1289983987808228], + [3.6311261653900146, -7.172664642333984], + [-1.5759357213974, -3.518761396408081], + [-2.1286022663116455, 2.7409775257110596], + [-3.3989484310150146, -4.579705238342285], + [-0.9989537596702576, -4.361120700836182], + [-4.227055549621582, -5.1126508712768555], + [1.4927761554718018, -6.521667957305908], + [8.063239097595215, -2.51066517829895], + [0.5225196480751038, -1.0462377071380615], + [0.10141139477491379, 11.666618347167969], + [3.0263829231262207, -4.1409149169921875], + [-3.666792869567871, -2.4529716968536377], + [0.1409279704093933, 10.297127723693848], + [4.744983196258545, 6.608470439910889], + [-4.490234851837158, -6.241625785827637], + [-3.553203582763672, -2.6151187419891357], + [8.967696189880371, -2.310940980911255], + [-0.04257041960954666, 9.564760208129883], + [0.8472476005554199, -7.322115421295166], + [5.417036533355713, -3.569841146469116], + [8.83578872680664, -2.292271375656128], + [7.513774394989014, -2.4281041622161865], + [5.343945026397705, 7.389527320861816], + [3.7044031620025635, -4.814515590667725], + [0.29481613636016846, 10.342062950134277], + [-4.3163161277771, -7.041649341583252], + [0.6197316646575928, -1.902033805847168], + [-2.037014961242676, -1.2574516534805298], + [3.2260708808898926, -3.252457857131958], + [3.2037270069122314, -3.629288911819458], + [8.225775718688965, -2.3430960178375244], + [-6.355825901031494, -0.22306954860687256], + [-2.089529275894165, 2.644282341003418], + [2.7867395877838135, 4.138246059417725], + [4.068623065948486, 5.506890296936035], + [-2.521846055984497, 0.9171942472457886], + [7.994171619415283, -2.1937828063964844], + [8.532455444335938, -2.2972662448883057], + [-3.887692928314209, -5.029128074645996], + [3.3131179809570312, -4.1232523918151855], + [-2.396801233291626, 2.283494234085083], + [-5.373818874359131, 3.392331838607788], + [-6.54925012588501, -2.6446640491485596], + [-3.367380380630493, 5.126853942871094], + [-3.1741440296173096, -4.627894401550293], + [-5.226086139678955, 0.029947932809591293], + [7.367544651031494, 8.776144027709961], + [3.8094987869262695, -8.164432525634766], + [10.837419509887695, -2.5469067096710205], + [2.9614365100860596, -4.102677822113037], + [5.893371105194092, 7.615574359893799], + [10.412505149841309, -2.5746493339538574], + [8.533089637756348, -2.2350523471832275], + [2.158200740814209, -8.732075691223145], + [9.136826515197754, -2.2780325412750244], + [-5.446109771728516, 3.8596715927124023], + [-1.2951713800430298, 0.9813829660415649], + [3.4804909229278564, -8.422405242919922], + [3.7397773265838623, -3.147287130355835], + [-0.6786279678344727, 1.3274699449539185], + [9.59407901763916, -2.3507866859436035], + [7.522324085235596, -1.8004263639450073], + [2.8737847805023193, -4.036652088165283], + [0.034690193831920624, 12.644001007080078], + [0.17730677127838135, 10.274589538574219], + [2.9876744747161865, -3.794029712677002], + [4.156893253326416, -3.5355417728424072], + [-5.593400478363037, 6.333096504211426], + [0.3841925859451294, 0.34758710861206055], + [4.075918674468994, -7.101553440093994], + [2.829456090927124, 0.17211666703224182], + [3.995755434036255, 6.164671897888184], + [-1.4941768646240234, -3.414797067642212], + [3.0994789600372314, 5.481286525726318], + [-0.3349485993385315, -1.677122950553894], + [-3.942988872528076, 5.262524127960205], + [-3.8527824878692627, -5.566632270812988], + [-0.2570662796497345, -1.759982705116272], + [-5.06309175491333, -7.589848041534424], + [2.0086708068847656, -7.894873142242432], + [3.0101146697998047, -7.900486469268799], + [2.6579675674438477, -9.626367568969727], + [8.394155502319336, -2.2340850830078125], + [-4.9782538414001465, -2.58284068107605], + [2.1561830043792725, -8.279947280883789], + [-4.11845064163208, 3.5467777252197266], + [-3.2442023754119873, -2.401594877243042], + [4.271291732788086, -3.582157611846924], + [-6.183365345001221, 7.517187118530273], + [0.20375865697860718, 12.110379219055176], + [-4.747643947601318, 5.014614105224609], + [-2.05999755859375, 2.307298421859741], + [0.15863054990768433, 11.360042572021484], + [8.09113597869873, -2.2475855350494385], + [-2.051574230194092, -2.721292734146118], + [6.118743419647217, -1.355028748512268], + [5.3848443031311035, 0.030074890702962875], + [5.383467197418213, -2.7993979454040527], + [-5.486518383026123, 7.874917507171631], + [-6.530306339263916, 8.107284545898438], + [-1.947854995727539, 2.233971118927002], + [3.7505910396575928, -4.7707061767578125], + [6.796662330627441, -5.828877925872803], + [0.8834431767463684, -1.2968206405639648], + [0.35706642270088196, -1.1670340299606323], + [0.1352744698524475, 9.933863639831543], + [-5.945047855377197, -2.1299498081207275], + [-2.024890661239624, 1.8301962614059448], + [-3.3379251956939697, -1.4941134452819824], + [1.7466102838516235, -3.236611843109131], + [2.5824711322784424, 4.323209285736084], + [7.102910041809082, -5.826491355895996], + [4.191783428192139, 1.687557578086853], + [9.255297660827637, -2.3758087158203125], + [4.038012981414795, 1.6604492664337158], + [0.14870399236679077, 11.429939270019531], + [2.940647840499878, -6.277678489685059], + [1.710573434829712, 4.963024139404297], + [-2.717383861541748, 6.580935478210449], + [-3.997433662414551, -5.936694145202637], + [3.0893969535827637, -4.720364093780518], + [0.06764822453260422, 0.24039825797080994], + [-1.9976496696472168, 2.505664825439453], + [1.350667953491211, -7.161802291870117], + [9.639683723449707, -2.4565727710723877], + [2.886584520339966, -4.092513084411621], + [-4.519223690032959, -4.57515811920166], + [-4.212357521057129, 3.606367349624634], + [-0.17159181833267212, 0.9327481985092163], + [1.9859559535980225, -4.605871200561523], + [-5.1287922859191895, -2.4810991287231445], + [7.865940093994141, -1.763518214225769], + [3.1802523136138916, -6.109287738800049], + [3.9118828773498535, 6.287846565246582], + [-1.9177700281143188, 2.3573904037475586], + [3.899709463119507, 1.7751801013946533], + [-2.1110565662384033, 2.575525999069214], + [4.090034484863281, -7.406796455383301], + [-6.300632953643799, 0.06177079305052757], + [-1.162636160850525, -1.0711042881011963], + [-3.203544855117798, 2.837933301925659], + [-5.768338680267334, 6.4589924812316895], + [-4.619387149810791, 4.349569797515869], + [1.1452363729476929, -7.174893379211426], + [2.0953667163848877, -8.187148094177246], + [4.0859503746032715, -3.6529438495635986], + [2.0563480854034424, -6.4905290603637695], + [4.227192401885986, -1.1436876058578491], + [8.48962688446045, -2.265875816345215], + [3.6985628604888916, -3.074023723602295], + [7.787525653839111, -2.0588748455047607], + [-3.8450629711151123, -6.086996078491211], + [2.5471460819244385, 5.006792068481445], + [-0.9878832697868347, 1.913669466972351], + [-4.941702842712402, 5.907170295715332], + [1.4673402309417725, 2.9499988555908203], + [5.191858768463135, -1.031075119972229], + [-4.742124557495117, -0.952885091304779], + [2.4559531211853027, -4.180193901062012], + [-2.4348366260528564, -4.095335006713867], + [4.3347859382629395, -3.5784595012664795], + [-2.62075138092041, -3.0006911754608154], + [0.12317978590726852, 10.016101837158203], + [5.3069682121276855, 6.986118316650391], + [-2.4426991939544678, 2.1812548637390137], + [5.362649917602539, -1.9380323886871338], + [0.23299026489257812, 10.832548141479492], + [8.320513725280762, -2.2910618782043457], + [2.1264421939849854, -9.019763946533203], + [0.5561030507087708, -0.9148621559143066], + [-5.436438083648682, -5.690494537353516], + [5.51674747467041, -3.941803216934204], + [-3.6721789836883545, 4.676198959350586], + [0.21968179941177368, 10.687470436096191], + [7.921365261077881, -2.467874765396118], + [-0.6439052820205688, -0.4529237151145935], + [-4.3532891273498535, -6.115398406982422], + [-2.482377290725708, 1.7350242137908936], + [-4.359365940093994, 5.478139400482178], + [-0.0375366285443306, 9.373774528503418], + [0.8686283230781555, -0.8395560383796692], + [-2.441922426223755, 3.307429075241089], + [-4.945852756500244, 4.258930683135986], + [-2.5314269065856934, 1.8556777238845825], + [1.3273684978485107, 1.0478341579437256], + [-3.175567388534546, -3.6222574710845947], + [-2.504359006881714, -4.65880012512207], + [3.9179728031158447, -6.887871742248535], + [-3.501891613006592, 3.923943042755127], + [-6.416224002838135, 7.5952630043029785], + [-3.9029202461242676, -1.6561418771743774], + [-4.4576334953308105, -6.190892219543457], + [0.2149372696876526, 10.599136352539062], + [-5.79610538482666, 0.6164882183074951], + [-4.053066253662109, -2.962078809738159], + [-4.04146146774292, 3.300851583480835], + [-2.2439794540405273, 2.9826571941375732], + [-4.6808624267578125, -2.3443171977996826], + [6.9340338706970215, -1.63772714138031], + [2.8372561931610107, 0.832869291305542], + [7.35549259185791, 8.72706413269043], + [-7.270142555236816, 8.231060028076172], + [5.652297496795654, -1.4780770540237427], + [-5.057037830352783, -0.6284312009811401], + [2.8477072715759277, -9.908273696899414], + [0.5564510226249695, -5.752501487731934], + [-5.826538562774658, 0.3312946557998657], + [5.984311580657959, -2.9490108489990234], + [-0.014179296791553497, 9.6110258102417], + [8.686333656311035, -2.4387776851654053], + [5.785427570343018, 7.610160827636719], + [7.683544635772705, -1.7908672094345093], + [-2.3777127265930176, 1.9363858699798584], + [6.711945533752441, -3.737912893295288], + [0.1035572811961174, 9.33358383178711], + [2.82857084274292, -4.033786296844482], + [-2.159278631210327, 2.440542459487915], + [-0.030465997755527496, 0.7334644794464111], + [3.266599416732788, -5.1528215408325195], + [9.562749862670898, -2.2933671474456787], + [2.9459495544433594, -4.123173236846924], + [2.4666595458984375, 5.84442663192749], + [3.607781171798706, -7.921213626861572], + [0.45655709505081177, -1.4535776376724243], + [0.08747350424528122, 9.525932312011719], + [2.693911075592041, -6.827663421630859], + [3.4655678272247314, -4.851222038269043], + [0.2068873643875122, 10.197188377380371], + [3.0022921562194824, -4.1357316970825195], + [-4.808981418609619, 3.9970667362213135], + [0.45729392766952515, 1.2120230197906494], + [-4.262829780578613, -2.5153470039367676], + [-4.678572177886963, 6.872878074645996], + [10.34304141998291, -2.4818994998931885], + [-3.2227280139923096, -2.427353858947754], + [-4.655835151672363, -2.7655065059661865], + [-5.27000617980957, -0.2425011396408081], + [-4.271641731262207, -6.365139007568359], + [-5.0080389976501465, 6.073336601257324], + [8.671001434326172, -2.43118953704834], + [7.770346641540527, -2.0622076988220215], + [-3.393422842025757, -6.028400421142578], + [-3.5053837299346924, -5.53020715713501], + [-0.6201378107070923, -1.5506953001022339], + [2.44993257522583, -7.828909873962402], + [3.1797375679016113, -4.879962921142578], + [8.376012802124023, -2.267754554748535], + [2.1764883995056152, 2.732898473739624], + [2.49971604347229, 2.9769678115844727], + [-1.2576594352722168, 0.5037710070610046], + [7.942922115325928, -1.8747822046279907], + [-4.113678932189941, -3.1159698963165283], + [-4.856700420379639, -4.349888801574707], + [5.675455570220947, 7.586662292480469], + [-4.511928081512451, 5.410751819610596], + [2.6216938495635986, 5.808035850524902], + [1.9194025993347168, 0.9218276143074036], + [10.361270904541016, -2.463282823562622], + [8.923309326171875, -2.3590428829193115], + [-1.773858904838562, 1.5773377418518066], + [-2.6034274101257324, 1.8015100955963135], + [-2.3124959468841553, 2.4920310974121094], + [6.982819080352783, -3.751251220703125], + [1.5810654163360596, -6.840254783630371], + [-7.6866679191589355, 0.09808337688446045], + [3.096550941467285, -4.47290563583374], + [8.865704536437988, -2.2888097763061523], + [-4.533927917480469, -6.536220550537109], + [2.603973388671875, -6.660478591918945], + [-6.046743869781494, 2.934926986694336], + [1.022029995918274, -6.491252899169922], + [-2.6599080562591553, -5.618020534515381], + [-4.27931547164917, -6.260653495788574], + [-2.203906536102295, 1.9046788215637207], + [0.20455795526504517, 10.691009521484375], + [3.1146414279937744, -3.6345901489257812], + [-0.9297623038291931, -3.640759229660034], + [-0.20407161116600037, -0.18051563203334808], + [3.5834925174713135, -6.553542613983154], + [-6.655229091644287, 6.227736949920654], + [-0.427459716796875, -1.3534866571426392], + [-5.382056713104248, -3.5731184482574463], + [-3.0897414684295654, -3.5693938732147217], + [9.787437438964844, -2.4899158477783203], + [6.471400260925293, -5.443595886230469], + [8.566008567810059, -2.3327763080596924], + [4.167332172393799, 1.8722503185272217], + [8.424139976501465, -2.2847952842712402], + [-3.3664004802703857, -1.2731209993362427], + [3.0007574558258057, -4.232450008392334], + [6.274233341217041, -2.509441375732422], + [-4.458710193634033, -2.831033945083618], + [0.21981531381607056, 10.734514236450195], + [-5.461415767669678, -4.175145149230957], + [4.6552839279174805, -4.189172744750977], + [-7.160460948944092, -0.1298837661743164], + [-2.20587420463562, 2.2138760089874268], + [2.999868154525757, 5.141200065612793], + [-0.18670350313186646, 9.503880500793457], + [2.994575262069702, -10.358389854431152], + [-4.0440473556518555, 5.173494815826416], + [-4.343811511993408, 8.380538940429688], + [7.5216569900512695, -2.3900606632232666], + [6.3064284324646, -1.400291085243225], + [-0.032795436680316925, 9.3887357711792], + [4.925780773162842, -4.448024272918701], + [3.863135576248169, -5.309134483337402], + [9.867097854614258, -2.337806463241577], + [3.6828486919403076, -8.203417778015137], + [5.747945308685303, -1.6599582433700562], + [5.664219379425049, 7.346889495849609], + [-0.9254859089851379, 6.087335109710693], + [-5.412292003631592, 6.478328227996826], + [5.605605125427246, -5.2387375831604], + [-4.4547600746154785, 0.4878225326538086], + [-4.378560543060303, 7.099489688873291], + [-2.6038858890533447, 4.509394645690918], + [-2.324591875076294, -3.0788190364837646], + [-5.856029033660889, 0.6024513244628906], + [3.7278459072113037, -3.544945001602173], + [-2.2377309799194336, 2.5055949687957764], + [8.89854621887207, -2.338007688522339], + [3.0277483463287354, -3.206141710281372], + [6.168481349945068, 7.852303504943848], + [-1.3017175197601318, 1.035232663154602], + [-2.916826009750366, -2.690938711166382], + [-3.535870313644409, -5.9850311279296875], + [3.462008476257324, 5.874235153198242], + [-1.0445586442947388, -2.958357095718384], + [5.926013469696045, -1.3001593351364136], + [5.886402606964111, -1.3922244310379028], + [0.06022798269987106, 9.375782012939453], + [-5.2366108894348145, 4.192205429077148], + [0.7733068466186523, 0.011163245886564255], + [11.007984161376953, -2.4866724014282227], + [0.08000033348798752, 10.140155792236328], + [-4.778818607330322, -2.95536470413208], + [5.6443352699279785, 7.459112167358398], + [-2.465353488922119, 1.9409788846969604], + [0.10937707871198654, 10.425735473632812], + [-4.583571910858154, 4.64470100402832], + [0.05859368294477463, 10.095548629760742], + [6.036524295806885, -4.313347339630127], + [0.6918571591377258, -0.7060434818267822], + [3.984454393386841, 1.8742523193359375], + [-2.551285982131958, -4.325188636779785], + [10.995190620422363, -2.624755859375], + [4.936171054840088, 7.238345146179199], + [2.4529311656951904, -7.614049911499023], + [0.14086902141571045, 11.266508102416992], + [-5.194558620452881, -2.0478403568267822], + [0.20369917154312134, 10.715288162231445], + [5.359983921051025, -1.7352569103240967], + [0.2872239351272583, 0.32461434602737427], + [3.5995595455169678, -2.3048629760742188], + [2.998180627822876, -4.016380310058594], + [-4.2103142738342285, -6.4738922119140625], + [5.288140773773193, 6.836328983306885], + [8.269153594970703, -2.2385311126708984], + [1.4121562242507935, -0.22377893328666687], + [-3.296938180923462, 5.074078559875488], + [2.7008168697357178, 1.9006156921386719], + [3.700225353240967, -4.048461437225342], + [4.428334712982178, -3.9198601245880127], + [-4.161315441131592, -1.9211753606796265], + [-2.2792153358459473, 2.071378469467163], + [-0.009471781551837921, 13.022357940673828], + [-2.6142375469207764, 1.7248092889785767], + [0.11242716759443283, 11.768781661987305], + [-2.0095064640045166, 2.5885744094848633], + [-4.289529800415039, -3.781219244003296], + [7.857493877410889, -2.328279733657837], + [-2.4591224193573, 1.710686206817627], + [2.761639356613159, -7.441428184509277], + [-2.3716936111450195, -3.572240114212036], + [3.463447093963623, -3.2390286922454834], + [-0.5124677419662476, -1.6396604776382446], + [5.64113712310791, 8.0955228805542], + [4.018442153930664, 0.758320689201355], + [-0.31380337476730347, -1.8327254056930542], + [-0.1841520369052887, -1.384341835975647], + [-3.264843702316284, -5.858231067657471], + [6.920186519622803, -3.3218843936920166], + [4.1209397315979, -2.6492934226989746], + [-5.326987266540527, 1.1868195533752441], + [3.544694185256958, -5.5232133865356445], + [7.924283504486084, -2.0693106651306152], + [-4.613301753997803, 3.804396867752075], + [1.7047498226165771, 1.3819400072097778], + [-4.743642330169678, -3.739921808242798], + [8.678924560546875, -2.312835454940796], + [-5.36268424987793, -1.0605908632278442], + [-2.2243268489837646, 2.3225746154785156], + [9.312612533569336, -2.348670244216919], + [9.340249061584473, -2.31223464012146], + [5.969831943511963, -1.2441840171813965], + [-4.00086784362793, -0.7819209694862366], + [9.015609741210938, -2.3469784259796143], + [2.751647710800171, 0.9428451061248779], + [-1.4783843755722046, 1.52860689163208], + [3.9901316165924072, -3.726722002029419], + [8.22951602935791, -2.2430531978607178], + [3.2167365550994873, -7.231106758117676], + [-2.075489044189453, 2.552056312561035], + [-3.0967140197753906, 1.4149363040924072], + [6.1643147468566895, -2.1717336177825928], + [0.16325634717941284, 10.257216453552246], + [-2.563380479812622, 1.9222960472106934], + [0.2705293297767639, 10.848732948303223], + [-5.851922512054443, 5.686506271362305], + [2.4733705520629883, 5.3958234786987305], + [4.543249130249023, -3.1641056537628174], + [1.8097392320632935, -1.237748384475708], + [-7.305521488189697, -1.0074827671051025], + [-4.575838565826416, -0.38750994205474854], + [0.16652607917785645, 10.27502727508545], + [5.628866672515869, 7.198805809020996], + [3.274127960205078, -0.8539948463439941], + [2.1532504558563232, 4.975318431854248], + [1.5319299697875977, -7.36781644821167], + [-5.602328300476074, -1.9029747247695923], + [-4.139082431793213, -6.82362699508667], + [-0.05106038600206375, 13.44993782043457], + [7.43170690536499, -4.074582576751709], + [7.287853240966797, -2.2749295234680176], + [-2.578913450241089, 1.5708860158920288], + [2.7725749015808105, -9.265362739562988], + [4.586995601654053, -7.218199253082275], + [8.227932929992676, -2.5052711963653564], + [3.269608736038208, -1.8726272583007812], + [-3.1877951622009277, 1.5961817502975464], + [9.817605972290039, -2.4594783782958984], + [4.142282485961914, -3.4676308631896973], + [3.024003267288208, -4.328951835632324], + [2.54040789604187, -5.382660388946533], + [7.069974899291992, -1.6720385551452637], + [-2.6033060550689697, 0.2957541048526764], + [-0.015627093613147736, 12.800540924072266], + [-5.18484354019165, 5.047827243804932], + [7.369900226593018, -1.737007737159729], + [-5.724863529205322, 2.5775368213653564], + [-2.150158166885376, 2.7133712768554688], + [3.3890464305877686, -3.1403064727783203], + [0.14447009563446045, 9.99149227142334], + [1.5322761535644531, -7.565549373626709], + [8.335016250610352, -2.2448208332061768], + [-2.785768747329712, -4.265164375305176], + [0.5406951308250427, -0.9806661009788513], + [-5.332381725311279, -1.155535101890564], + [-2.470425844192505, -1.8887468576431274], + [-2.5131053924560547, 1.7492716312408447], + [1.486509084701538, -6.609360694885254], + [-7.416320323944092, 8.5115385055542], + [3.038207769393921, -4.30695915222168], + [8.041555404663086, -2.498673439025879], + [-3.918529748916626, -1.473220944404602], + [5.667362213134766, -1.5172877311706543], + [-1.0177397727966309, -3.4043965339660645], + [0.5127044320106506, -0.9800353646278381], + [-6.020199298858643, 6.812249660491943], + [-4.87241268157959, 5.122350692749023], + [2.988266706466675, -6.494734287261963], + [-5.387159824371338, 4.06501579284668], + [-4.675189971923828, -7.603180408477783], + [5.4336371421813965, -1.1166571378707886], + [-2.208723545074463, 0.9595328569412231], + [-6.76578950881958, -1.8441442251205444], + [-4.537065029144287, -6.384517669677734], + [-2.179399251937866, 2.5683987140655518], + [0.6601554155349731, -2.990839719772339], + [5.94448709487915, -2.367522954940796], + [-3.689448595046997, 5.820683479309082], + [-4.765130043029785, -6.914028167724609], + [3.9192662239074707, 7.0134687423706055], + [-3.019521474838257, 4.913825035095215], + [-6.93400764465332, -0.04712832346558571], + [3.8680202960968018, -5.180465221405029], + [-4.74468994140625, 6.93250846862793], + [-1.9532910585403442, 6.32534122467041], + [5.387786865234375, 6.79479455947876], + [-3.7381532192230225, -5.270496368408203], + [2.612616777420044, -8.058250427246094], + [-3.416358470916748, -0.865164041519165], + [6.510694980621338, -2.9915759563446045], + [7.000131130218506, -1.8560725450515747], + [-2.354430675506592, 2.0988917350769043], + [3.490758180618286, -4.8774309158325195], + [1.6510831117630005, 9.702764511108398], + [-2.9825048446655273, 1.1711336374282837], + [3.9825327396392822, -2.951371908187866], + [-2.7338778972625732, -2.1760740280151367], + [-3.1140072345733643, -5.105002403259277], + [7.511775970458984, -1.9274206161499023], + [6.87497091293335, 8.368639945983887], + [2.760814905166626, -9.149236679077148], + [4.75188684463501, -1.8819419145584106], + [-5.478410243988037, 2.449887990951538], + [6.266417980194092, -2.7570502758026123], + [7.542821407318115, -2.0410943031311035], + [3.861936092376709, -3.7434470653533936], + [3.3663225173950195, -4.63640022277832], + [0.28413963317871094, -2.2974603176116943], + [6.1622748374938965, 7.826645374298096], + [6.899441242218018, 8.688743591308594], + [3.170912742614746, -7.889344692230225], + [8.754860877990723, -2.265380620956421], + [3.4455718994140625, -5.360528945922852], + [3.531785726547241, 5.1251068115234375], + [-1.1793373823165894, 0.06068095192313194], + [-2.1926372051239014, 2.500364303588867], + [-2.362776279449463, 2.385359048843384], + [9.362857818603516, -2.786912679672241], + [9.061524391174316, -2.3040544986724854], + [-5.67413854598999, -0.8932741284370422], + [2.2479240894317627, -6.951069355010986], + [6.76758337020874, -2.4715168476104736], + [-4.968944072723389, -7.299623489379883], + [-1.3959846496582031, -3.747907876968384], + [-3.919217348098755, -3.697573184967041], + [-3.9665729999542236, -6.414958953857422], + [1.5873383283615112, -6.841374397277832], + [6.652275562286377, -2.452232599258423], + [-4.806912899017334, -4.518113136291504], + [2.884504556655884, -4.046407699584961], + [3.1108126640319824, -8.060111999511719], + [5.826839923858643, -1.1960276365280151], + [3.7960917949676514, -7.586584091186523], + [-6.043150901794434, 6.950679779052734], + [2.320491075515747, -8.209478378295898], + [-4.624561786651611, -2.4002156257629395], + [-4.5560221672058105, 0.2722025513648987], + [1.564635157585144, 1.12199866771698], + [0.22851359844207764, 10.761956214904785], + [0.23022490739822388, 10.908953666687012], + [-6.621474742889404, 7.798872470855713], + [7.06679630279541, -1.701660394668579], + [8.53699016571045, -2.070476770401001], + [-1.3543769121170044, 1.2487155199050903], + [3.793336868286133, 1.1084953546524048], + [0.18602043390274048, 10.259832382202148], + [0.22827845811843872, 12.097349166870117], + [2.4770331382751465, 1.5096906423568726], + [-2.2682180404663086, 1.001282811164856], + [-4.906209468841553, 6.793811798095703], + [-4.813721179962158, -3.714080810546875], + [-4.457177639007568, -6.897148609161377], + [2.4437530040740967, 5.340936660766602], + [-3.722179889678955, -3.7989001274108887], + [0.04245930165052414, 12.211678504943848], + [-6.2974934577941895, -0.12246215343475342], + [-0.18952518701553345, 10.837072372436523], + [3.1666693687438965, 1.8961039781570435], + [0.14702129364013672, 10.14111328125], + [-4.540733814239502, -6.19405460357666], + [-2.478001594543457, -0.9760133028030396], + [-2.266444683074951, 2.0935921669006348], + [4.089282512664795, 1.8612134456634521], + [-4.698446750640869, -7.205135345458984], + [2.4060471057891846, 4.333623886108398], + [-7.5995259284973145, 9.083723068237305], + [-2.207784414291382, -4.534364700317383], + [2.5994527339935303, 3.5269620418548584], + [-3.098686456680298, -2.4258334636688232], + [3.6360843181610107, 6.394031047821045], + [-3.4124748706817627, 2.0071029663085938], + [4.9585161209106445, 7.787784576416016], + [0.12555772066116333, 9.64798641204834], + [2.4413998126983643, 0.8846760988235474], + [-1.614043116569519, 1.5091383457183838], + [9.610801696777344, -2.4417407512664795], + [5.043939113616943, -2.85479474067688], + [4.486551761627197, -2.3014378547668457], + [2.538769483566284, -5.492773056030273], + [9.752863883972168, -2.491225242614746], + [-6.5071797370910645, -0.4780217409133911], + [-3.2320139408111572, -4.454304218292236], + [3.4995274543762207, 1.339996337890625], + [-5.90303897857666, 5.614825248718262], + [2.472870349884033, -3.51009202003479], + [8.4899320602417, -2.2936339378356934], + [2.052253007888794, -8.60557746887207], + [3.7825963497161865, -3.1570045948028564], + [3.7475290298461914, 1.7551664113998413], + [-3.762673854827881, -6.083163261413574], + [0.08623658865690231, 10.360177040100098], + [3.1758687496185303, 6.7759246826171875], + [0.9454805254936218, 5.315051555633545], + [-6.170853137969971, -0.26378464698791504], + [-4.303638458251953, 0.9548757076263428], + [-1.6895427703857422, -1.3660480976104736], + [4.88838005065918, 2.077674627304077], + [4.067930698394775, 6.65905237197876], + [2.3259105682373047, 4.685809135437012], + [-5.841882228851318, 6.240475654602051], + [-2.129019260406494, 2.5787456035614014], + [-4.542902946472168, -5.789862632751465], + [0.24050986766815186, 10.080061912536621], + [-2.011216640472412, -2.602668046951294], + [-3.707017183303833, -2.559516429901123], + [8.956884384155273, -2.448793888092041], + [3.4345741271972656, -6.108429908752441], + [-3.6172292232513428, 6.677894115447998], + [2.694378137588501, -8.78111457824707], + [2.2838470935821533, -8.6130952835083], + [7.278719425201416, 8.783255577087402], + [6.059445858001709, 7.788569450378418], + [0.05068223923444748, 11.633071899414062], + [-4.38184118270874, -6.4798054695129395], + [3.9652793407440186, -8.705633163452148], + [-4.499490261077881, -6.86374568939209], + [0.4871003031730652, -0.24085596203804016], + [-4.7973952293396, -5.169435501098633], + [-0.7069264054298401, -1.6542490720748901], + [-6.148834705352783, -1.6672338247299194], + [-1.7605538368225098, 0.5547121167182922], + [3.4079904556274414, 2.0255093574523926], + [-2.5501208305358887, -2.778661012649536], + [-5.656852722167969, 6.206720352172852], + [2.361130475997925, 5.605892181396484], + [-2.1341450214385986, 2.4432079792022705], + [-5.067061901092529, -0.6450787782669067], + [0.24707460403442383, 11.906606674194336], + [8.169319152832031, -2.4199955463409424], + [-1.2637336254119873, 1.4453929662704468], + [-5.880143642425537, 7.696619987487793], + [9.731103897094727, -2.44165301322937], + [2.979454278945923, -0.1380881816148758], + [0.24374443292617798, 12.133129119873047], + [-4.298270225524902, -4.822868347167969], + [0.21874386072158813, 11.074384689331055], + [-2.3854000568389893, 2.163397789001465], + [2.796105146408081, 3.8821399211883545], + [-2.0872645378112793, 2.497016668319702], + [2.2840170860290527, 5.035292625427246], + [0.18961018323898315, 11.01816463470459], + [2.9130022525787354, -6.822459697723389], + [6.76059103012085, 8.50024127960205], + [-5.970658302307129, 7.106602668762207], + [7.604289531707764, 9.087043762207031], + [0.45122724771499634, -5.681114196777344], + [8.136303901672363, -2.128526449203491], + [-0.6286261677742004, -1.481125831604004], + [3.4640719890594482, -6.373255252838135], + [-0.12327242642641068, 0.5935236215591431], + [-0.014815635979175568, -1.5953106880187988], + [8.755876541137695, -2.364288091659546], + [0.0387604758143425, 12.338642120361328], + [3.6223037242889404, -6.596880912780762], + [-4.690255165100098, -1.2795543670654297], + [-2.9006245136260986, 1.6663702726364136], + [-1.8352655172348022, -3.9506704807281494], + [2.3726747035980225, -7.141164779663086], + [2.8333237171173096, -7.457830429077148], + [-4.924052715301514, 6.667585849761963], + [6.592607021331787, -1.4725464582443237], + [-0.014382906258106232, 12.704630851745605], + [4.030139446258545, -2.3562748432159424], + [-6.255356311798096, 2.4165196418762207], + [4.1075005531311035, 1.6998792886734009], + [-3.225931167602539, -4.207679271697998], + [5.650208950042725, -2.4855587482452393], + [2.1850733757019043, 1.6567426919937134], + [-0.01705295592546463, 12.199134826660156], + [2.749410390853882, -3.9186534881591797], + [-2.110304832458496, -4.549496650695801], + [3.582073926925659, -2.8176605701446533], + [4.2538251876831055, 0.5612083673477173], + [-0.09258169680833817, 14.39256477355957], + [-5.636620044708252, -3.6338512897491455], + [-4.26690149307251, -6.643353462219238], + [-0.008147306740283966, 12.436225891113281], + [-5.612735271453857, 6.364693641662598], + [1.8489348888397217, 2.079246759414673], + [2.6789817810058594, 1.9739350080490112], + [-2.152517795562744, 2.6905834674835205], + [-2.632063388824463, 1.8553149700164795], + [2.5151472091674805, -2.8680646419525146], + [1.5036394596099854, -7.07727575302124], + [-4.984300136566162, 3.717048406600952], + [3.9342234134674072, 1.4548743963241577], + [-1.337153673171997, -0.8286856412887573], + [-1.3452129364013672, 2.0609991550445557], + [2.6092305183410645, -8.870952606201172], + [-3.929255962371826, -6.087596893310547], + [2.4132416248321533, 0.4083135724067688], + [2.3837130069732666, -8.02355670928955], + [6.210710048675537, -5.422030448913574], + [2.795574426651001, -10.048822402954102], + [2.9661593437194824, 4.78573751449585], + [2.8639230728149414, -2.2217562198638916], + [-2.8338592052459717, 1.435472846031189], + [-2.0365216732025146, 1.1505119800567627], + [2.930259943008423, -4.043778896331787], + [1.9134995937347412, 4.979213714599609], + [8.326180458068848, -2.2736382484436035], + [3.3135836124420166, -6.384525299072266], + [3.087134838104248, -9.471665382385254], + [-0.07895300537347794, -1.4913793802261353], + [0.5507639050483704, -0.8857536315917969], + [3.142637252807617, 4.021313667297363], + [-6.570945739746094, -0.7229105234146118], + [-4.6754069328308105, 5.535591125488281], + [0.7522819638252258, 8.67977523803711], + [-2.110388994216919, 2.5793635845184326], + [6.099938869476318, 7.483306884765625], + [3.101949453353882, 1.2902103662490845], + [-4.447386264801025, -6.050647735595703], + [4.2907586097717285, 5.741333484649658], + [-0.0018957331776618958, 13.499351501464844], + [5.162254333496094, -2.288071393966675], + [2.882654905319214, -4.157780170440674], + [3.533571481704712, -8.470752716064453], + [-4.557785511016846, -7.447269439697266], + [3.2118632793426514, -5.363571643829346], + [-2.041836738586426, 2.1988792419433594], + [6.381634712219238, -1.341198444366455], + [6.9624505043029785, -2.1693928241729736], + [-3.2460734844207764, -1.068232536315918], + [-3.2979936599731445, -1.8749480247497559], + [-6.288499355316162, 7.320836067199707], + [-4.7039875984191895, -2.028667688369751], + [3.456920862197876, 6.882180213928223], + [3.3451955318450928, -8.54416275024414], + [2.381946563720703, 5.975878715515137], + [2.936998128890991, -4.182697296142578], + [3.6766841411590576, -7.428483963012695], + [9.386881828308105, -2.3452975749969482], + [-5.31606912612915, -0.7438713312149048], + [3.263965606689453, -8.496223449707031], + [3.532682180404663, -8.426801681518555], + [3.1206979751586914, 6.197332859039307], + [3.1538946628570557, -8.309856414794922], + [-2.5869925022125244, 1.6085213422775269], + [-2.646075487136841, -3.878591299057007], + [-6.176798343658447, 7.618659019470215], + [-4.606469631195068, 5.837065696716309], + [3.724479913711548, -4.672214984893799], + [-0.0506785586476326, 13.133800506591797], + [-4.134119510650635, 3.1885874271392822], + [8.810770988464355, -2.317692518234253], + [-4.311678409576416, -2.6919562816619873], + [6.081836223602295, -1.8657950162887573], + [0.4997839331626892, -0.7225379943847656], + [9.669830322265625, -2.4995672702789307], + [-0.03864104300737381, 14.16301155090332], + [-2.3119544982910156, 3.007593870162964], + [-4.999249458312988, 3.738966703414917], + [-2.2502663135528564, 2.0189709663391113], + [-3.8947012424468994, 6.451807975769043], + [3.0295913219451904, 0.9260108470916748], + [1.640584111213684, -7.99348783493042], + [2.1968257427215576, -8.660913467407227], + [-0.09174623340368271, -1.5363465547561646], + [-0.4767727553844452, -1.9009004831314087], + [-2.327279806137085, 2.2534356117248535], + [-3.9432084560394287, -5.014964580535889], + [8.116435050964355, -2.417752265930176], + [2.8829281330108643, -7.397129535675049], + [2.7856667041778564, 3.836937665939331], + [-3.359882116317749, -5.358116626739502], + [-4.794915199279785, -5.144835472106934], + [4.153796195983887, -8.48839282989502], + [3.4299542903900146, 1.4592915773391724], + [0.31111758947372437, 10.424591064453125], + [10.364567756652832, -2.4322636127471924], + [0.21668285131454468, 11.843964576721191], + [4.9556965827941895, 2.001053810119629], + [6.3099284172058105, 7.809214115142822], + [4.513164043426514, 7.364737033843994], + [7.104261875152588, -1.8633979558944702], + [-2.6086368560791016, 1.6955071687698364], + [-3.8055789470672607, -2.1929080486297607], + [0.19773000478744507, 10.399680137634277], + [8.794167518615723, -2.1807305812835693], + [-4.4622626304626465, -6.728060245513916], + [0.9353490471839905, -0.5203967094421387], + [2.638867139816284, -7.736122131347656], + [-5.4704813957214355, -1.877027153968811], + [-4.478715419769287, -6.6962175369262695], + [-4.250314712524414, 4.603411674499512], + [4.47774076461792, -6.0999250411987305], + [6.9578423500061035, 8.63879680633545], + [-0.057958729565143585, 9.701995849609375], + [2.513277053833008, -9.252553939819336], + [3.7429893016815186, -3.477041244506836], + [3.7381932735443115, -3.7358129024505615], + [-3.746687173843384, -4.220376491546631], + [-2.369016647338867, 2.0224955081939697], + [-5.260176181793213, -3.256887674331665], + [4.401256561279297, 2.0914249420166016], + [7.46625280380249, 9.109094619750977], + [1.7943439483642578, 4.954664707183838], + [-2.769275188446045, -2.0781829357147217], + [0.38598722219467163, 9.650543212890625], + [-3.8845207691192627, -2.0322070121765137], + [2.315769910812378, -8.213387489318848], + [-5.231464862823486, -1.305648684501648], + [-2.393601179122925, -3.100085973739624], + [2.7259411811828613, 2.3847877979278564], + [3.210151433944702, -4.328488349914551], + [1.977114200592041, -3.9499711990356445], + [8.237258911132812, -2.256086826324463], + [4.285416126251221, 0.2754611372947693], + [8.396944999694824, -2.3077962398529053], + [7.448657035827637, -1.8856210708618164], + [-3.0322868824005127, 6.645007133483887], + [-2.7214300632476807, -2.385575532913208], + [-1.4442133903503418, -2.787994146347046], + [1.4106954336166382, 11.069796562194824], + [-5.956915855407715, -2.0320775508880615], + [8.774256706237793, -2.6613686084747314], + [-4.674574375152588, -6.694445610046387], + [6.3125715255737305, 7.710332870483398], + [-0.051166124641895294, 9.187150955200195], + [-2.2209572792053223, 2.808359146118164], + [-2.249164342880249, 0.7627855539321899], + [2.7605085372924805, -5.1040120124816895], + [-6.753254413604736, -1.2929508686065674], + [-2.166872024536133, 2.19648814201355], + [-5.226738452911377, -2.1598830223083496], + [-4.431387424468994, -5.8624091148376465], + [0.22887545824050903, 10.296079635620117], + [1.1032516956329346, -5.3964338302612305], + [0.24320179224014282, 11.13001537322998], + [3.4742953777313232, -3.0926806926727295], + [0.16575080156326294, 11.64769172668457], + [-0.13061052560806274, 14.683927536010742], + [1.757707953453064, 0.7125153541564941], + [-2.3518362045288086, 2.362931966781616], + [-3.3173563480377197, 5.510015964508057], + [-2.973579168319702, -1.6203244924545288], + [-2.582616090774536, 2.0007195472717285], + [3.8006415367126465, 1.7703123092651367], + [8.051104545593262, -2.1895458698272705], + [-5.474039077758789, 4.065145492553711], + [6.380866527557373, -1.278032898902893], + [8.722037315368652, -2.45687198638916], + [-4.6539177894592285, -6.20452356338501], + [0.16737794876098633, 9.454766273498535], + [-4.6114821434021, -7.3186798095703125], + [-4.762847423553467, -6.204042911529541], + [-5.209969997406006, -3.881431818008423], + [-3.0688774585723877, -4.031940937042236], + [-2.4362616539001465, 2.0866177082061768], + [-1.8800336122512817, 1.8517836332321167], + [6.143568515777588, -3.614938497543335], + [-5.849592685699463, -2.457951545715332], + [3.0315418243408203, -8.585783004760742], + [4.972723960876465, -1.9848427772521973], + [-4.736621379852295, -3.958765745162964], + [2.6455018520355225, -6.68867301940918], + [1.3321727514266968, -7.131547927856445], + [5.981884002685547, -0.9090074300765991], + [-6.717991352081299, 6.823946952819824], + [2.6146929264068604, -8.084915161132812], + [-7.397063732147217, 8.781848907470703], + [2.2959964275360107, 4.240339279174805], + [-4.500665187835693, -5.835636138916016], + [7.8318305015563965, -2.060182571411133], + [1.3157453536987305, -0.49709007143974304], + [0.4754897952079773, -1.052621603012085], + [-1.4631799459457397, 1.308106780052185], + [2.074655294418335, 3.6603267192840576], + [3.075294017791748, -7.8706207275390625], + [1.928344964981079, 3.390052556991577], + [-2.5242321491241455, 1.850962519645691], + [8.701424598693848, -2.2927615642547607], + [1.7542071342468262, -0.2258620262145996], + [-2.3319504261016846, 1.7928571701049805], + [-2.5039806365966797, -3.465116500854492], + [3.7121875286102295, 1.3375087976455688], + [1.345630168914795, 4.903910160064697], + [-1.7632033824920654, -1.079908013343811], + [0.1780216097831726, 10.225608825683594], + [2.6742069721221924, -3.8493635654449463], + [3.374176502227783, -3.533801794052124], + [7.800825119018555, -2.2694151401519775], + [8.082012176513672, -2.511150598526001], + [-2.3045096397399902, 2.297279119491577], + [-4.266746997833252, 6.3553032875061035], + [-4.660405158996582, -2.6699788570404053], + [6.491866588592529, 8.084521293640137], + [-4.496829986572266, -3.365523099899292], + [-4.538127422332764, -7.540591239929199], + [2.767038106918335, -7.8387556076049805], + [9.507325172424316, -2.3358776569366455], + [0.19631558656692505, 10.557416915893555], + [-2.4095704555511475, 1.9932140111923218], + [3.252445936203003, 1.108815312385559], + [3.529650926589966, -4.640857696533203], + [-2.8590643405914307, -5.092296600341797], + [-2.4749701023101807, -1.7371370792388916], + [-5.755699634552002, -3.506614923477173], + [-4.210853576660156, 3.9917733669281006], + [3.1596882343292236, -10.917348861694336], + [-3.0223748683929443, -4.631906032562256], + [1.0947365760803223, 0.8607155084609985], + [2.81754994392395, -7.386231422424316], + [7.887085437774658, -2.2896783351898193], + [-2.1358084678649902, 2.6487905979156494], + [7.6927642822265625, -2.1635727882385254], + [-2.140164613723755, 2.5721166133880615], + [2.3958423137664795, -8.59412670135498], + [0.05113869160413742, 9.617713928222656], + [-4.828297138214111, 5.402935981750488], + [0.13778328895568848, 9.963347434997559], + [-6.325583457946777, -1.2608217000961304], + [6.303497791290283, -1.3826160430908203], + [2.024064064025879, 0.43875497579574585], + [-6.077119827270508, 5.816463470458984], + [-2.109678030014038, 2.553706407546997], + [7.786013126373291, -2.0680270195007324], + [0.11012225598096848, 12.165014266967773], + [2.504509210586548, 5.9249067306518555], + [-1.3466020822525024, 2.3449487686157227], + [7.466309070587158, -2.1353139877319336], + [2.374135971069336, -3.68707537651062], + [-3.582524538040161, -5.642989158630371], + [6.002501010894775, -1.2565189599990845], + [-4.924046993255615, -5.883966445922852], + [6.454229831695557, 7.880468845367432], + [-4.516303539276123, -6.463102340698242], + [0.3861038088798523, 10.718589782714844], + [2.9543354511260986, 7.159076690673828], + [3.866786241531372, -0.3067467212677002], + [-4.578568935394287, -2.4511849880218506], + [1.5162315368652344, -0.15232157707214355], + [-2.6372740268707275, 2.066342353820801], + [-7.168970108032227, 0.7045574188232422], + [1.9721367359161377, 0.8876142501831055], + [5.665332794189453, 8.141023635864258], + [6.669971942901611, -1.7440054416656494], + [0.4952741265296936, -5.945212364196777], + [-6.651097774505615, 7.20012092590332], + [-2.7007195949554443, 2.1410486698150635], + [2.257067918777466, 5.247617721557617], + [-3.745638370513916, 5.544512748718262], + [-0.028124280273914337, 13.117671012878418], + [0.06588112562894821, 9.080268859863281], + [3.0731513500213623, -7.367640972137451], + [0.18195056915283203, 11.571794509887695], + [-6.890107154846191, 8.073192596435547], + [3.278979539871216, -5.433558464050293], + [-4.934620380401611, 4.691637992858887], + [4.695260524749756, -2.2792677879333496], + [5.983981609344482, 7.70429801940918], + [3.042764902114868, -4.326920986175537], + [-4.691702842712402, 5.148314952850342], + [-5.368278980255127, 2.0650715827941895], + [1.8516995906829834, 0.9760229587554932], + [10.405840873718262, -2.5448620319366455], + [0.1837744116783142, 10.3037109375], + [9.285888671875, -2.359405755996704], + [3.49277663230896, -7.170587539672852], + [-7.313621997833252, 7.749390125274658], + [7.036293983459473, -2.983715772628784], + [-6.453588485717773, 6.247466564178467], + [3.5867810249328613, -6.01405143737793], + [2.859234571456909, -3.9917848110198975], + [4.213785171508789, -6.084344863891602], + [2.232680559158325, 5.461941719055176], + [-7.1990861892700195, 8.316944122314453], + [-6.492453098297119, 6.305994987487793], + [-2.3650286197662354, -0.5372543334960938], + [3.0114011764526367, -4.16928768157959], + [-3.613084316253662, -3.1412088871002197], + [0.012344412505626678, 11.510944366455078], + [-1.8438987731933594, -4.538121223449707], + [-2.1198642253875732, 2.6422886848449707], + [-6.446518421173096, -1.6375901699066162], + [-6.723449230194092, 0.07657337188720703], + [-4.343291282653809, -6.8890533447265625], + [-6.157552242279053, -0.24974572658538818], + [2.9665780067443848, -3.1514227390289307], + [-4.718808650970459, -7.100397109985352], + [3.933727979660034, 5.283269882202148], + [1.5376629829406738, 4.905672550201416], + [3.4973995685577393, 1.329372525215149], + [8.147841453552246, -2.8073723316192627], + [-2.924433708190918, -0.6455906629562378], + [0.20215994119644165, 10.341873168945312], + [-2.0492899417877197, 2.502991199493408], + [-3.419330358505249, 2.4125330448150635], + [-2.5063395500183105, 5.331334114074707], + [-3.925010919570923, -2.4502503871917725], + [1.3499854803085327, -0.45800021290779114], + [2.7101471424102783, -3.657808542251587], + [6.054555416107178, -2.9759714603424072], + [2.960664987564087, -4.081459045410156], + [2.803212881088257, -4.818132400512695], + [1.240454912185669, -6.672544002532959], + [-4.412213325500488, -5.968985557556152], + [-0.18065878748893738, -1.5321221351623535], + [0.08846395462751389, 11.67250919342041], + [1.7118653059005737, -5.189480781555176], + [-1.2587864398956299, 1.310770869255066], + [9.586979866027832, -2.319704055786133], + [3.163822650909424, -4.710043907165527], + [0.8235766291618347, -0.29765284061431885], + [-4.156779766082764, -3.9101452827453613], + [-0.2634657919406891, -1.7503759860992432], + [2.145097017288208, 2.561239004135132], + [-5.137681484222412, 1.1933313608169556], + [-2.464792013168335, 1.508325219154358], + [4.613135814666748, -8.385164260864258], + [-2.3996310234069824, 6.304142951965332], + [-2.7524445056915283, 5.673680305480957], + [-2.386507034301758, 2.0479907989501953], + [0.5374088883399963, 6.2196044921875], + [7.138744831085205, -2.9927620887756348], + [-0.017592795193195343, 9.667585372924805], + [10.320606231689453, -2.338465929031372], + [-1.6521615982055664, -3.6206648349761963], + [0.03435801714658737, 9.509565353393555], + [2.314540147781372, 5.370536804199219], + [4.583765029907227, -1.385392189025879], + [-4.623684406280518, -6.214380264282227], + [3.1615304946899414, -10.161066055297852], + [3.3030617237091064, -4.280677795410156], + [1.4856376647949219, 2.976278781890869], + [-2.571207284927368, 0.946523129940033], + [-4.893399715423584, 4.840871810913086], + [8.2302827835083, -2.377271890640259], + [0.25531667470932007, 11.233314514160156], + [6.6301188468933105, 8.411577224731445], + [-0.02180839329957962, 9.83785343170166], + [-3.368032693862915, -2.5074241161346436], + [-4.272047519683838, 5.240180969238281], + [-4.742347717285156, 7.902536392211914], + [-4.468627452850342, 0.3488198518753052], + [0.06102099269628525, -1.364336371421814], + [6.027212619781494, 7.606914043426514], + [-5.89780855178833, 6.929287910461426], + [2.995849370956421, -4.281132698059082], + [6.308081150054932, -1.5986151695251465], + [5.321334362030029, -2.942561626434326], + [-4.744678020477295, -7.031542778015137], + [-2.5295560359954834, 1.8544477224349976], + [-5.614960670471191, -3.2239978313446045], + [-5.018579959869385, 1.3227771520614624], + [-3.5618579387664795, 7.289342880249023], + [-0.32464855909347534, -0.19622057676315308], + [0.05490785092115402, 9.778487205505371], + [-4.749899864196777, -7.39084529876709], + [2.226677179336548, -3.0679523944854736], + [8.948638916015625, -2.3226940631866455], + [-2.5405848026275635, 1.6680394411087036], + [-1.963779091835022, 3.362612724304199], + [0.559205174446106, -1.1128480434417725], + [-5.643797397613525, 0.5041602849960327], + [-5.282177448272705, 6.652767658233643], + [2.077065944671631, 1.7655121088027954], + [-0.031998880207538605, 13.279936790466309], + [5.316483497619629, -0.9054023027420044], + [3.60896372795105, -6.477728843688965], + [3.1807825565338135, -2.3287124633789062], + [3.4539523124694824, -5.596606254577637], + [1.7597525119781494, 3.9916512966156006], + [4.611960411071777, 6.691555023193359], + [-3.881736993789673, 5.873199462890625], + [-2.431408405303955, 2.383012056350708], + [-3.1357829570770264, 3.320143699645996], + [-2.846301317214966, 2.9295766353607178], + [-2.533266544342041, 2.249267816543579], + [2.442415475845337, -2.131490707397461], + [2.963282823562622, -3.7307422161102295], + [-4.004279136657715, -5.809101104736328], + [-4.4758830070495605, 3.556518793106079], + [4.420943737030029, 6.298248767852783], + [-3.8040647506713867, -5.928590774536133], + [-2.455502510070801, -4.31346321105957], + [2.7503106594085693, -3.829211711883545], + [8.787071228027344, -2.350273609161377], + [9.722942352294922, -2.527109384536743], + [-0.009153194725513458, 12.52509880065918], + [0.9865668416023254, -7.057077407836914], + [0.5346167087554932, -1.0378060340881348], + [6.625531196594238, 7.9893035888671875], + [8.990234375, -2.352790117263794], + [2.2897956371307373, 6.112093448638916], + [-4.468264102935791, -5.2309112548828125], + [2.961453437805176, -3.39530873298645], + [-0.42713239789009094, -1.5338330268859863], + [1.4211409091949463, -4.827105522155762], + [-2.9119176864624023, -2.0053675174713135], + [-1.0131511688232422, 1.981146216392517], + [1.6156392097473145, 1.7600980997085571], + [-3.6174404621124268, 7.061685562133789], + [3.7603323459625244, 5.320153713226318], + [4.344860076904297, 6.270379543304443], + [-4.852606296539307, -2.9436347484588623], + [1.9955737590789795, 5.3307719230651855], + [-2.496272325515747, -3.552718162536621], + [7.856635093688965, -2.12520432472229], + [-6.957233905792236, 8.169265747070312], + [-4.205627918243408, -1.5851197242736816], + [-2.1276681423187256, 2.4481000900268555], + [5.386707305908203, 7.880192756652832], + [3.721036672592163, -2.7832515239715576], + [-0.3177613317966461, -1.9015936851501465], + [-4.4388041496276855, -7.108591079711914], + [7.494722843170166, -4.798854351043701], + [-6.382654666900635, 7.376221656799316], + [1.663159966468811, 4.808382987976074], + [8.681599617004395, -2.343430757522583], + [-6.431065082550049, 6.0318756103515625], + [0.15456414222717285, 10.86602783203125], + [0.20216524600982666, 11.5120210647583], + [7.277657985687256, 8.805753707885742], + [3.13400936126709, -4.465150356292725], + [-4.4794721603393555, -6.105470657348633], + [-5.636931419372559, 6.448893070220947], + [4.786662578582764, 7.22570276260376], + [-4.470308303833008, 5.372962951660156], + [4.36238431930542, -3.138820171356201], + [3.615405321121216, -4.380897521972656], + [-3.819492816925049, -0.38103288412094116], + [5.110507011413574, -3.0340893268585205], + [-0.008926339447498322, 11.97989273071289], + [10.834382057189941, -2.554962396621704], + [-6.812915325164795, 8.025833129882812], + [-3.7743709087371826, -3.0334951877593994], + [3.216306447982788, -4.6288371086120605], + [-2.116114854812622, 0.2453172504901886], + [-6.447157382965088, 7.141611576080322], + [-0.011897630989551544, 14.013335227966309], + [2.307342767715454, -3.226271390914917], + [-0.7380391955375671, -3.268207311630249], + [-2.4682958126068115, 1.6083948612213135], + [7.688643455505371, -2.3226563930511475], + [7.625477313995361, -2.2097175121307373], + [7.596177101135254, 9.102935791015625], + [2.253385305404663, 4.917752265930176], + [0.3770911395549774, -3.8049657344818115], + [6.776298522949219, 8.504199981689453], + [8.131536483764648, -2.19707989692688], + [8.621359825134277, -2.268989086151123], + [1.8628818988800049, 4.0877838134765625], + [1.8601878881454468, -7.2567644119262695], + [-2.8466148376464844, 5.058597564697266], + [9.529387474060059, -2.4473249912261963], + [1.1090857982635498, -6.661370277404785], + [-4.194116115570068, 5.907291412353516], + [0.07045184820890427, -1.304224967956543], + [2.248490810394287, 5.47566032409668], + [3.473609447479248, -2.5724825859069824], + [-2.692138910293579, 2.094653844833374], + [3.2282092571258545, -3.4462666511535645], + [0.1328255534172058, 10.055656433105469], + [-3.2683913707733154, 5.331405162811279], + [-4.527613162994385, 5.75931978225708], + [9.50599193572998, -2.421156644821167], + [-4.493401050567627, -6.917801856994629], + [2.7698895931243896, -3.9266066551208496], + [1.5701044797897339, 5.6974287033081055], + [-2.688852071762085, 1.2807295322418213], + [0.9880293011665344, -0.6846251487731934], + [1.2400927543640137, -4.519618511199951], + [-6.823509693145752, 7.43172025680542], + [5.584268569946289, -1.2217742204666138], + [3.309413194656372, 1.1812613010406494], + [2.2557098865509033, 4.171501159667969], + [-1.704830288887024, 0.9665476083755493], + [10.109889030456543, -2.4706079959869385], + [2.231991767883301, 5.20734977722168], + [3.6573779582977295, -7.326898097991943], + [-3.7062175273895264, -4.039927005767822], + [8.966147422790527, -2.550119400024414], + [2.6430327892303467, -4.615039825439453], + [-4.771790981292725, -7.546613693237305], + [8.034341812133789, -2.2031607627868652], + [-2.5860090255737305, 1.8682202100753784], + [0.29999738931655884, 11.215225219726562], + [2.388155221939087, 4.235371112823486], + [3.8046677112579346, 6.699618339538574], + [3.491649627685547, 0.8192828893661499], + [4.135183811187744, 1.8602943420410156], + [2.7091143131256104, -3.9166910648345947], + [9.148030281066895, -2.4377834796905518], + [7.837317943572998, -2.3620240688323975], + [9.26007080078125, -2.312889337539673], + [-2.0521657466888428, 1.8208365440368652], + [9.170670509338379, -2.371361255645752], + [1.9225871562957764, -8.287810325622559], + [-2.548766851425171, 1.773345708847046], + [0.23820897936820984, 0.5186789035797119], + [8.03082275390625, -2.253045082092285], + [2.5447797775268555, 0.33437812328338623], + [-6.42659330368042, -0.38887232542037964], + [-2.1668174266815186, 2.678969383239746], + [3.1195499897003174, 0.6074967980384827], + [5.38956880569458, -3.2463009357452393], + [-0.01149577647447586, 9.74848461151123], + [2.70093035697937, 1.2394038438796997], + [0.018628470599651337, 9.277610778808594], + [-1.8966655731201172, -3.6920952796936035], + [-2.3182644844055176, 1.0255004167556763], + [0.1652260422706604, 10.508602142333984], + [7.433801174163818, -2.142662763595581], + [-1.0722312927246094, 1.5216429233551025], + [6.722896099090576, 8.145502090454102], + [3.5361783504486084, 4.81949520111084], + [2.0156402587890625, 1.5082848072052002], + [7.8098225593566895, -2.144810438156128], + [6.00089693069458, -1.2448252439498901], + [-5.57622766494751, -0.6795803308486938], + [3.3700129985809326, -4.721070289611816], + [-4.079372882843018, 5.330831527709961], + [-3.128267765045166, -4.134891510009766], + [5.890903949737549, -3.386492967605591], + [2.939270257949829, -4.151793479919434], + [-2.2020018100738525, 3.726862668991089], + [-2.1895549297332764, 2.1315135955810547], + [1.3717684745788574, 0.13669869303703308], + [7.153703212738037, -1.8652737140655518], + [0.17061728239059448, 10.176189422607422], + [7.924600124359131, 9.306255340576172], + [3.5517725944519043, -4.070466041564941], + [8.073121070861816, -2.3127329349517822], + [-6.557591915130615, 7.581032752990723], + [-3.7766311168670654, -1.817343831062317], + [-1.795626163482666, 0.9519596099853516], + [-2.2378125190734863, -3.957672119140625], + [-6.529902935028076, -1.1014944314956665], + [0.6158384084701538, -5.597023963928223], + [-1.534156322479248, -4.189293384552002], + [-1.6142221689224243, 2.2454285621643066], + [1.7517963647842407, 4.806273937225342], + [4.014083385467529, -3.0624074935913086], + [-4.441678524017334, -5.765811920166016], + [2.654043436050415, -3.3286852836608887], + [1.1557950973510742, -6.513265132904053], + [-3.042797565460205, 4.8249921798706055], + [4.422333240509033, 6.084961414337158], + [-5.380068302154541, -3.3774421215057373], + [-3.035313367843628, 1.618695855140686], + [3.3262503147125244, -3.4336912631988525], + [0.015239112079143524, 9.50950813293457], + [3.1857411861419678, 5.384829044342041], + [-1.7660716772079468, 0.3410785496234894], + [0.33802685141563416, -0.28087541460990906], + [-4.248936653137207, -6.066302299499512], + [2.816089630126953, -9.589041709899902], + [8.37560749053955, -2.2771077156066895], + [6.804670810699463, -2.3060786724090576], + [3.487079381942749, -5.456972122192383], + [-6.306393146514893, -2.5669116973876953], + [1.9980640411376953, 3.626298666000366], + [0.2948181629180908, 11.514705657958984], + [-3.228276491165161, -2.4384963512420654], + [3.760716676712036, -3.647141695022583], + [-4.730578422546387, 4.0910444259643555], + [-3.1399457454681396, -2.1788690090179443], + [-5.408101558685303, -3.3764991760253906], + [-0.5355281829833984, 0.23579686880111694], + [2.0316174030303955, -3.000002861022949], + [3.3484370708465576, 4.983500957489014], + [3.4849231243133545, -8.166471481323242], + [8.999869346618652, -2.2774388790130615], + [-1.569704532623291, -3.3969929218292236], + [8.276289939880371, -2.66485333442688], + [0.015300445258617401, 12.786386489868164], + [3.540134906768799, -4.368978023529053], + [3.294391393661499, 5.150819778442383], + [0.29785290360450745, -0.9740124344825745], + [2.108985185623169, -8.87147331237793], + [-4.402431488037109, -1.45319664478302], + [-2.5132758617401123, 1.8579849004745483], + [-3.3400490283966064, 3.6765859127044678], + [-4.360228538513184, -0.8907917737960815], + [-2.425386667251587, 2.171537399291992], + [-3.2687180042266846, -1.2509554624557495], + [-2.139505386352539, 2.3163344860076904], + [5.446953296661377, -3.0597755908966064], + [2.695143461227417, -6.732126235961914], + [3.4015796184539795, -3.629674196243286], + [-4.922733306884766, 7.826722145080566], + [-2.6388516426086426, 1.9129773378372192], + [1.8775863647460938, 2.44901967048645], + [-1.1413462162017822, -3.4600582122802734], + [-3.205758810043335, -5.4114298820495605], + [7.669499397277832, -2.329829216003418], + [-2.678314447402954, 6.888708591461182], + [-1.6746424436569214, 2.3721935749053955], + [0.23078638315200806, 11.058483123779297], + [-7.066242218017578, -0.3288079500198364], + [-3.1545798778533936, -1.8156930208206177], + [-4.454728126525879, -1.8335211277008057], + [-1.3731582164764404, 1.3409793376922607], + [-0.6883016228675842, -2.7275798320770264], + [0.02449633926153183, 0.45383894443511963], + [0.07571912556886673, -1.4634469747543335], + [2.7006309032440186, -3.7477715015411377], + [6.478680610656738, -1.2385177612304688], + [1.6553030014038086, -6.640190124511719], + [-6.70211935043335, 7.905391693115234], + [6.799790859222412, 8.284154891967773], + [9.568449020385742, -2.4402010440826416], + [-4.660938739776611, -6.571288585662842], + [8.866259574890137, -2.3811683654785156], + [-3.4728939533233643, 3.6802797317504883], + [-4.315810680389404, -6.891051292419434], + [6.592362403869629, 8.317195892333984], + [-5.860274791717529, 6.572854995727539], + [2.774127960205078, -3.9418649673461914], + [0.5346876978874207, -0.9291784167289734], + [-0.0055852606892585754, 12.222024917602539], + [1.439535140991211, -0.3194419741630554], + [5.0516486167907715, 7.406303405761719], + [2.5825541019439697, 6.17521858215332], + [0.4225400686264038, 11.453990936279297], + [-5.112576484680176, -5.936083793640137], + [2.803722858428955, -3.879563808441162], + [7.876756191253662, -2.227268934249878], + [-3.6955161094665527, -2.5899133682250977], + [0.1705346703529358, 11.836938858032227], + [2.253502130508423, 5.699551582336426], + [0.20869380235671997, 11.258262634277344], + [0.6408579349517822, -0.9355625510215759], + [-2.6450634002685547, 1.47946035861969], + [3.1719284057617188, -7.876448631286621], + [-4.9142231941223145, -6.263060569763184], + [7.793944835662842, -2.322633981704712], + [2.8699777126312256, -4.085042953491211], + [-4.919322490692139, -7.156548976898193], + [-4.016363143920898, 3.202230215072632], + [5.43088436126709, -0.9794965982437134], + [0.35938310623168945, 0.4393358528614044], + [3.9461987018585205, 1.4244645833969116], + [-3.3312203884124756, -2.5507965087890625], + [-4.0250139236450195, -3.270998477935791], + [7.526245594024658, -2.226773977279663], + [3.165977716445923, -3.2251951694488525], + [-2.211428165435791, 1.9817792177200317], + [8.49878978729248, -2.2851977348327637], + [0.5344768762588501, -1.1932551860809326], + [0.1846805214881897, -1.1899293661117554], + [-2.6691765785217285, 1.4886598587036133], + [4.005638599395752, 1.4468878507614136], + [3.101508855819702, -3.997967004776001], + [-4.139946937561035, -1.5403838157653809], + [0.2283182144165039, 11.431309700012207], + [8.176399230957031, -2.466808557510376], + [2.164127826690674, 0.23512673377990723], + [-2.6439239978790283, -4.924890041351318], + [2.3438479900360107, 6.198912620544434], + [4.27384614944458, -3.872546434402466], + [7.149634838104248, 8.713438034057617], + [-4.884257793426514, -5.688778877258301], + [-2.468169927597046, 1.8693610429763794], + [2.876770496368408, -4.040709495544434], + [-7.830040454864502, -1.183165192604065], + [3.7150943279266357, 1.063059687614441], + [3.258328914642334, -5.799855709075928], + [1.8484798669815063, -7.129376411437988], + [-4.2712626457214355, -5.236197471618652], + [-2.0472400188446045, 2.481764554977417], + [5.333673000335693, -4.491268157958984], + [4.218753337860107, -3.3441526889801025], + [-6.223827838897705, 7.577590465545654], + [-3.4511687755584717, -5.8263702392578125], + [-4.851051330566406, -0.937759280204773], + [8.108389854431152, -2.4142684936523438], + [-2.4297196865081787, 1.333849549293518], + [0.003424815833568573, 11.689831733703613], + [-1.627871036529541, -0.958100438117981], + [4.4268598556518555, -3.6990532875061035], + [4.182942867279053, -3.5913479328155518], + [-5.010012149810791, -5.534226417541504], + [3.266552686691284, -4.599255561828613], + [-1.6603859663009644, 2.094148635864258], + [2.7601711750030518, -3.4131503105163574], + [-2.4206202030181885, 1.9968293905258179], + [-4.8118462562561035, -3.2716593742370605], + [-4.742801189422607, 5.080612659454346], + [-6.754031658172607, -1.2349510192871094], + [3.264524221420288, -4.450922966003418], + [6.742008209228516, -1.4492031335830688], + [-2.237703800201416, 0.5262261033058167], + [2.119715452194214, -8.237565040588379], + [2.7719576358795166, 4.186452388763428], + [2.4965178966522217, 5.515642166137695], + [2.804821252822876, -3.898442029953003], + [0.3638991415500641, -1.0360583066940308], + [2.470383882522583, -7.6703715324401855], + [-5.718921661376953, 4.977153301239014], + [3.648221254348755, -3.6110446453094482], + [-4.955094337463379, 4.5149946212768555], + [7.132758617401123, 8.681211471557617], + [0.06167697161436081, 9.972467422485352], + [6.618507385253906, 8.186553001403809], + [4.314565181732178, 1.772255301475525], + [1.908380389213562, -7.7891082763671875], + [-2.3556389808654785, 2.2886338233947754], + [-6.1237473487854, -2.4768455028533936], + [-2.957859754562378, 2.2678639888763428], + [-4.631261348724365, -0.6529441475868225], + [7.7266974449157715, -2.0017168521881104], + [0.36944663524627686, 10.71965503692627], + [-4.537090301513672, 5.815462112426758], + [-4.581887245178223, -1.0055177211761475], + [-1.1272668838500977, -3.5903308391571045], + [-2.1866743564605713, 2.047515869140625], + [-3.7094342708587646, -5.359530448913574], + [-2.8469557762145996, 1.8733118772506714], + [-2.3944242000579834, 1.4566149711608887], + [2.435642957687378, -3.3299381732940674], + [-2.797574281692505, 0.5471563935279846], + [4.975439548492432, -1.5417038202285767], + [-2.232869863510132, -3.6654093265533447], + [6.738972187042236, -2.700465679168701], + [1.6220248937606812, 1.1309776306152344], + [-4.260595798492432, -5.667237281799316], + [4.72560453414917, 6.686075687408447], + [-3.7497217655181885, 4.97453498840332], + [5.36493444442749, -1.3664946556091309], + [0.2546544671058655, 11.105030059814453], + [7.819431781768799, -2.2039966583251953], + [-5.484317302703857, -3.0268428325653076], + [-5.252211093902588, -0.10675066709518433], + [0.4773062467575073, -1.2985562086105347], + [-2.8227851390838623, 0.8773719668388367], + [-4.188406467437744, -5.416805267333984], + [-1.0756349563598633, -3.057821273803711], + [2.716261625289917, -7.672893524169922], + [-2.420660972595215, -1.213626742362976], + [3.9279377460479736, 1.7133917808532715], + [-2.4347188472747803, -3.5636911392211914], + [10.922207832336426, -2.500680685043335], + [4.727935791015625, -3.6166110038757324], + [4.192596435546875, 6.150774955749512], + [-6.010919094085693, 5.568728446960449], + [-5.349184513092041, 0.4393610954284668], + [-4.052587509155273, -5.235939025878906], + [-4.859867572784424, -5.319113731384277], + [-2.145170211791992, 2.6325910091400146], + [-2.1853034496307373, 2.4564802646636963], + [0.20494836568832397, 10.358203887939453], + [3.76287841796875, -3.400864839553833], + [3.4100563526153564, -3.7526707649230957], + [3.1492772102355957, -3.2440903186798096], + [-2.5197665691375732, 1.8713257312774658], + [8.250954627990723, -2.2084310054779053], + [2.9536499977111816, 6.410947322845459], + [-1.6488823890686035, 5.591196060180664], + [6.466305732727051, -1.2266734838485718], + [2.1605799198150635, -8.163594245910645], + [-4.75496768951416, -0.8767966628074646], + [-4.947507381439209, -2.1693811416625977], + [3.278006076812744, -4.617803573608398], + [-2.4304192066192627, -3.356039524078369], + [2.9271581172943115, -9.895073890686035], + [2.8164660930633545, -7.602125644683838], + [2.8281409740448, 1.285748839378357], + [1.6738730669021606, -7.285273551940918], + [-1.4082614183425903, 2.0399434566497803], + [1.7249290943145752, 2.0463407039642334], + [-6.765886306762695, 7.959693908691406], + [3.772080183029175, -3.488861560821533], + [-5.403708457946777, -2.0275213718414307], + [3.253154993057251, 6.025742530822754], + [2.7237026691436768, 4.280581474304199], + [7.335497856140137, 8.7747802734375], + [2.9370570182800293, 0.6830857992172241], + [3.999549150466919, 6.988986968994141], + [0.13066750764846802, 10.548137664794922], + [4.487707138061523, -2.5747931003570557], + [-1.2233428955078125, 1.445749044418335], + [-2.2275021076202393, -2.9305198192596436], + [11.199246406555176, -2.5249369144439697], + [-6.527007102966309, 7.75675106048584], + [-6.941423416137695, 8.23302936553955], + [3.45837664604187, 6.430844306945801], + [0.15321922302246094, 9.766271591186523], + [-5.426506519317627, 1.7816331386566162], + [2.9650185108184814, -6.792658805847168], + [2.982916831970215, -3.886327028274536], + [3.0108320713043213, -4.213415622711182], + [0.2456015944480896, 10.773213386535645], + [4.150533676147461, -0.470908522605896], + [3.353192090988159, -4.579690456390381], + [-4.916316986083984, -7.009129524230957], + [3.9778449535369873, 6.296629905700684], + [-5.412791728973389, 6.397363662719727], + [-2.2529296875, 0.8060929775238037], + [-0.14996254444122314, 9.738999366760254], + [0.7601656317710876, -5.325705051422119], + [-6.842198371887207, -0.5640194416046143], + [-3.276019811630249, 4.704596519470215], + [3.2528088092803955, -4.714378356933594], + [3.9541141986846924, -3.562556266784668], + [-1.6983182430267334, 1.6150686740875244], + [-1.5204157829284668, 2.4114084243774414], + [-7.5191144943237305, 0.17096233367919922], + [3.5535190105438232, 6.41999626159668], + [5.424360752105713, -1.119063377380371], + [-2.125403642654419, 2.6249918937683105], + [6.197619438171387, -4.637382507324219], + [-3.2298059463500977, -3.6416707038879395], + [-2.4400858879089355, 2.0500264167785645], + [0.19324499368667603, 12.271965026855469], + [8.405234336853027, -2.7944915294647217], + [-6.374720096588135, 7.976526260375977], + [-4.384209156036377, -6.671193599700928], + [8.688000679016113, -2.2210958003997803], + [-2.1318323612213135, 1.73907470703125], + [-1.9620959758758545, 2.12111496925354], + [-2.0735673904418945, -2.086686849594116], + [-1.9975816011428833, 4.561575889587402], + [7.476219654083252, -1.9506006240844727], + [-1.984316110610962, 2.401766061782837], + [-0.08140761405229568, 9.195199966430664], + [-5.806822299957275, 6.5384202003479], + [2.9780633449554443, -3.985602378845215], + [3.2221755981445312, -6.186182022094727], + [2.6075098514556885, 3.2920382022857666], + [10.096280097961426, -2.4460642337799072], + [1.6570936441421509, 0.18382057547569275], + [6.058712482452393, 7.6379923820495605], + [8.247870445251465, -2.3817875385284424], + [-6.125158786773682, 0.0053498707711696625], + [2.7624709606170654, -1.7222379446029663], + [-2.263420820236206, 2.1655588150024414], + [-6.749558925628662, 8.225317001342773], + [10.651093482971191, -2.4887871742248535], + [-2.9137706756591797, -4.713474273681641], + [2.0824146270751953, 6.33063268661499], + [9.02590560913086, -2.3411266803741455], + [10.724950790405273, -2.5549886226654053], + [7.272133827209473, 8.746301651000977], + [2.3517096042633057, -8.673181533813477], + [2.5612518787384033, 4.431548118591309], + [0.02455531805753708, 10.475412368774414], + [10.27414608001709, -2.4655134677886963], + [5.003624439239502, -1.7521878480911255], + [3.2221622467041016, -4.639161109924316], + [-5.330383777618408, -3.257082223892212], + [5.054973125457764, -3.891218423843384], + [4.612273216247559, -1.3693808317184448], + [-4.344017505645752, -6.382887840270996], + [2.5507428646087646, 3.2010622024536133], + [-3.785352945327759, -5.790247917175293], + [-7.777098655700684, 0.6675138473510742], + [-7.171988010406494, 0.09257113933563232], + [0.29517853260040283, 11.766780853271484], + [0.05498068779706955, 9.173961639404297], + [6.159773826599121, 8.273204803466797], + [-4.018793106079102, -6.096556663513184], + [4.783854007720947, -3.486682653427124], + [-1.806710958480835, 2.244410753250122], + [2.8270103931427, -5.285776615142822], + [1.681993007659912, -2.0831637382507324], + [1.628514051437378, 0.3706418573856354], + [-7.387610912322998, -0.7731123566627502], + [2.401273488998413, 2.0901331901550293], + [-2.991382360458374, -5.097269058227539], + [-6.3842902183532715, 6.494443893432617], + [0.04372899979352951, 9.456561088562012], + [-6.887750148773193, 7.278573513031006], + [8.387374877929688, -2.3547561168670654], + [-0.8972511291503906, -2.433671236038208], + [2.729050397872925, -2.7411673069000244], + [3.622554302215576, -6.479528427124023], + [8.203145980834961, -2.4572463035583496], + [-4.269698619842529, -3.1106808185577393], + [9.277850151062012, -2.511929750442505], + [-1.6752309799194336, 2.507504463195801], + [-4.814743518829346, -0.26132625341415405], + [-5.037731647491455, -2.236555576324463], + [-5.178644180297852, -3.0685999393463135], + [-3.767085075378418, -2.6419055461883545], + [6.350496292114258, -1.380293369293213], + [-0.4277181625366211, -0.2733207046985626], + [2.845334768295288, 0.6595186591148376], + [5.58643102645874, -0.09427586197853088], + [0.22600001096725464, 10.003910064697266], + [-0.03247053176164627, 9.86286735534668], + [-4.318366050720215, -6.843055248260498], + [0.1890568733215332, 11.642715454101562], + [-5.348740100860596, 6.49862003326416], + [3.860445261001587, 1.2725684642791748], + [7.927722454071045, -2.240201473236084], + [2.2530434131622314, 0.40871718525886536], + [-4.3762593269348145, 5.002810478210449], + [-5.0417046546936035, -6.432754039764404], + [-2.6737396717071533, -3.402017831802368], + [3.443782091140747, -3.23974871635437], + [4.744232177734375, -4.825992107391357], + [-5.072329044342041, 4.7480340003967285], + [-0.3788908123970032, 0.30403614044189453], + [5.2969279289245605, 7.468823432922363], + [-0.6278426051139832, 1.565168857574463], + [0.38026559352874756, -1.1304901838302612], + [-6.507456302642822, 7.594650745391846], + [6.5413031578063965, 7.92706823348999], + [4.766967296600342, 7.171015739440918], + [-0.17802992463111877, -1.2385720014572144], + [6.139648914337158, -1.2782360315322876], + [3.9350759983062744, -3.658449172973633], + [2.728300094604492, 1.9303061962127686], + [-5.034555912017822, -3.0344297885894775], + [3.695042133331299, 5.122786521911621], + [-3.626234769821167, 1.2863774299621582], + [-4.745910167694092, -4.207927703857422], + [-2.5326836109161377, 1.5234020948410034], + [-2.302304267883301, -5.211875915527344], + [0.48046642541885376, 10.52145767211914], + [10.687029838562012, -2.6129891872406006], + [-2.1269845962524414, 2.3286209106445312], + [6.616959095001221, 8.28135871887207], + [3.6161015033721924, -4.272199630737305], + [3.9857380390167236, 6.545616149902344], + [-2.411247730255127, -3.2467901706695557], + [-4.57993745803833, -7.335402488708496], + [5.11181640625, -0.5836630463600159], + [4.570071697235107, -6.578582286834717], + [10.494017601013184, -2.440016031265259], + [6.370421409606934, -1.317952036857605], + [8.938236236572266, -2.3604207038879395], + [0.12103801220655441, 10.802591323852539], + [-2.2376887798309326, 2.428191661834717], + [-2.5159645080566406, 1.1738406419754028], + [2.2134525775909424, 0.06614720821380615], + [-5.265994548797607, 4.232744216918945], + [-4.002580642700195, -4.978257179260254], + [3.6297852993011475, -8.031676292419434], + [-4.928951740264893, -6.451851844787598], + [-3.7708334922790527, -4.41889762878418], + [-0.30362528562545776, -1.5914655923843384], + [-0.7599226832389832, -3.047290563583374], + [2.690016508102417, -3.424536943435669], + [2.059408187866211, -6.680080413818359], + [1.7875773906707764, -8.203768730163574], + [-5.617456912994385, -2.4591779708862305], + [5.5601019859313965, -0.8261236548423767], + [2.8840878009796143, -5.187980651855469], + [9.183367729187012, -2.316873550415039], + [-0.8247851133346558, -1.7610725164413452], + [-3.2860147953033447, 2.334192991256714], + [-2.088474988937378, 2.5926406383514404], + [7.830694198608398, -2.36409854888916], + [1.9628937244415283, -8.056197166442871], + [0.15762221813201904, 9.921632766723633], + [8.746403694152832, -2.3985378742218018], + [6.05810546875, 8.172246932983398], + [6.64684534072876, 8.29334831237793], + [-1.005269169807434, 1.0531460046768188], + [2.853306531906128, -3.0960075855255127], + [-2.569807767868042, 0.2619386911392212], + [4.800965785980225, 6.7438554763793945], + [2.824430465698242, 4.614414215087891], + [2.7621960639953613, -3.907043218612671], + [2.6134819984436035, -3.7276852130889893], + [1.9618148803710938, 0.15793034434318542], + [-4.55676794052124, -6.307669639587402], + [2.9220948219299316, 4.482761383056641], + [-2.606320381164551, -3.4285151958465576], + [-6.808554172515869, 8.016494750976562], + [3.866145372390747, 6.954312801361084], + [-3.4514575004577637, 5.300169467926025], + [2.5489096641540527, 5.620501518249512], + [5.182005882263184, -0.9088505506515503], + [1.024665355682373, -6.378131866455078], + [-4.56064510345459, -1.576070785522461], + [3.4269211292266846, 1.4534657001495361], + [8.622834205627441, -2.564485788345337], + [0.9336495995521545, 7.404430389404297], + [-3.5893476009368896, -4.888424873352051], + [-0.12519067525863647, 14.161989212036133], + [-4.875793933868408, 5.358564853668213], + [0.23190826177597046, 10.5730562210083], + [-4.761254787445068, 6.517887115478516], + [2.0920116901397705, 3.9713404178619385], + [6.608536720275879, -3.568578004837036], + [3.8676865100860596, 5.980498313903809], + [-7.51221227645874, -0.9230636358261108], + [3.2841837406158447, -6.935174465179443], + [-4.319678783416748, 5.093680381774902], + [3.9235541820526123, 5.71602725982666], + [-5.403855323791504, 1.9463149309158325], + [6.081310749053955, 7.7740278244018555], + [2.9302480220794678, -7.420255661010742], + [0.6380055546760559, -4.724511623382568], + [8.283965110778809, -2.2589831352233887], + [8.716212272644043, -2.3308088779449463], + [-4.5781331062316895, -3.497997760772705], + [-2.1435983180999756, 2.4487531185150146], + [-1.3107221126556396, -0.8130443692207336], + [-3.1163783073425293, -5.264707565307617], + [7.656027317047119, -2.106430768966675], + [-5.6718220710754395, -2.6629955768585205], + [-2.3643929958343506, 1.7060606479644775], + [-7.326127052307129, -0.21244657039642334], + [8.604792594909668, -2.3645880222320557], + [8.27111530303955, -2.117187976837158], + [-0.028651125729084015, 9.762907028198242], + [6.345921039581299, -1.3997970819473267], + [-0.07855886965990067, 14.329347610473633], + [-2.5825138092041016, 0.1607438325881958], + [-4.440344333648682, -7.436284065246582], + [3.222388982772827, -6.870819568634033], + [3.462895154953003, -5.91448974609375], + [-2.3014309406280518, 1.9289581775665283], + [3.5114736557006836, 1.489794135093689], + [3.3796792030334473, -6.6719512939453125], + [3.397608757019043, -7.2634172439575195], + [-1.208126425743103, 1.723695158958435], + [2.808354139328003, 4.431899070739746], + [-2.360915184020996, 2.4467358589172363], + [-0.5825665593147278, -1.4048768281936646], + [-4.182000637054443, 2.7055060863494873], + [6.385889530181885, -1.423141598701477], + [-2.287008047103882, 0.17960816621780396], + [9.9136962890625, -2.402958631515503], + [4.330801963806152, -2.9631454944610596], + [4.278615474700928, 6.730181694030762], + [-4.669549465179443, -7.3233489990234375], + [4.073486804962158, 7.854406356811523], + [4.172487735748291, -5.9999799728393555], + [-3.3632700443267822, -6.185222625732422], + [-6.683019161224365, 8.126155853271484], + [-2.2234742641448975, 2.0423383712768555], + [-6.477466106414795, 6.736266136169434], + [0.285504013299942, 3.5979652404785156], + [2.7941501140594482, -5.180388927459717], + [3.2634456157684326, -4.7450737953186035], + [3.766918659210205, 6.685667037963867], + [1.6935241222381592, -0.25532135367393494], + [8.089402198791504, -2.345693349838257], + [-2.0555193424224854, 2.5137436389923096], + [3.2226760387420654, -3.7696449756622314], + [-4.612769603729248, -7.056609153747559], + [3.1016292572021484, -6.902812957763672], + [3.338228225708008, -4.776616096496582], + [6.121037483215332, -1.8202210664749146], + [-2.1336162090301514, 2.613992691040039], + [-4.007995128631592, 6.522202491760254], + [4.91903018951416, -1.7165387868881226], + [-2.64536452293396, -0.12467372417449951], + [8.704402923583984, -2.4229483604431152], + [-3.7016162872314453, -0.10351473093032837], + [-1.549872636795044, -2.2031304836273193], + [3.408325433731079, 5.897299766540527], + [2.1053669452667236, 0.1691015362739563], + [5.560368299484253e-5, 11.85018539428711], + [1.6771953105926514, 4.991121292114258], + [0.2561892867088318, 10.772871971130371], + [2.8805763721466064, -5.992327690124512], + [2.7808709144592285, 0.9194426536560059], + [-5.649850845336914, -3.69946551322937], + [-2.027101755142212, 2.642249345779419], + [3.2335453033447266, -5.3705244064331055], + [-4.099412441253662, -3.0427863597869873], + [-7.308262348175049, 8.532401084899902], + [-2.0214874744415283, 0.049943264573812485], + [-4.977902412414551, -3.5215163230895996], + [4.855531215667725, 6.740778923034668], + [3.714874505996704, -7.4052042961120605], + [3.109323740005493, -8.290996551513672], + [0.02753346413373947, 12.316852569580078], + [-4.722716331481934, -6.93437385559082], + [-5.744288921356201, -2.1077747344970703], + [-5.6671223640441895, 1.330724835395813], + [-7.355040073394775, 0.04092716798186302], + [9.018548965454102, -2.461371898651123], + [-0.08691389113664627, 12.911850929260254], + [-1.5107073783874512, -4.296413421630859], + [6.023105144500732, 7.856694221496582], + [6.463677883148193, -4.232122421264648], + [3.155790090560913, -4.564207553863525], + [-1.021904468536377, -2.466247797012329], + [-8.128571510314941, -0.7179896831512451], + [2.827669382095337, -5.108627796173096], + [3.128812551498413, -4.236758232116699], + [-4.729751110076904, -6.416119575500488], + [-6.995398044586182, 0.41756629943847656], + [8.273065567016602, -2.198580503463745], + [2.9362075328826904, -8.445039749145508], + [-4.687816143035889, -7.4146833419799805], + [-4.337042331695557, -3.8849148750305176], + [2.949780225753784, -4.191063404083252], + [-4.691295623779297, -5.517199993133545], + [3.619051694869995, -2.889125347137451], + [3.4017045497894287, -3.9534494876861572], + [-1.3249365091323853, 1.3873966932296753], + [7.845658779144287, 9.271446228027344], + [0.047742001712322235, 12.587480545043945], + [6.1860270500183105, -2.86026930809021], + [3.562772512435913, 1.8727068901062012], + [2.6515228748321533, 2.1325409412384033], + [-4.040334701538086, 4.219439506530762], + [3.347743272781372, -4.779984951019287], + [-1.184489130973816, 1.6298400163650513], + [-2.1169371604919434, 2.3565242290496826], + [-2.340308666229248, 1.9416542053222656], + [2.0866308212280273, 4.091548442840576], + [3.426971197128296, -8.147974967956543], + [-5.590301990509033, 2.8211236000061035], + [-3.921600103378296, -4.355618476867676], + [-0.004480607807636261, 12.447050094604492], + [3.3086259365081787, -4.675597190856934], + [0.2181050181388855, 10.824302673339844], + [2.9070003032684326, -4.138054847717285], + [-3.456958293914795, -0.9968182444572449], + [-5.193079471588135, -0.9006381034851074], + [1.6165761947631836, 4.522778034210205], + [-4.849218845367432, -2.828234910964966], + [5.43572998046875, 6.972555637359619], + [-3.937474489212036, 5.57310676574707], + [-3.787105083465576, -5.429595947265625], + [-4.756525993347168, -3.3082268238067627], + [2.3641746044158936, 4.594821929931641], + [4.399428844451904, -4.121364116668701], + [5.42209005355835, -0.15402865409851074], + [-6.316083908081055, 7.343000411987305], + [2.5641446113586426, -3.723546266555786], + [1.452867031097412, -0.8653048872947693], + [5.707483291625977, -3.3134403228759766], + [3.2448174953460693, -9.668414115905762], + [2.8900766372680664, 0.9196115732192993], + [-3.2657196521759033, -4.476108551025391], + [-4.089330196380615, -3.370816230773926], + [-2.039679765701294, 1.510545015335083], + [8.154504776000977, -2.223749876022339], + [3.2209560871124268, -7.879458904266357], + [-3.240264415740967, -5.5446367263793945], + [3.0149855613708496, -4.232706069946289], + [-5.215755939483643, -3.286536931991577], + [-2.836313009262085, 6.092047691345215], + [0.9938889145851135, -0.6437379121780396], + [5.843262195587158, 7.604491233825684], + [-3.5655834674835205, -3.016831159591675], + [-3.078644275665283, -1.8263276815414429], + [8.18310546875, 9.635242462158203], + [-4.443526268005371, -0.211248517036438], + [0.7400323748588562, 4.59739875793457], + [4.408626556396484, -2.998414993286133], + [3.624802827835083, -3.1964104175567627], + [-5.2767252922058105, -1.1428757905960083], + [2.224308729171753, -1.3897091150283813], + [-5.486839771270752, 6.22200345993042], + [-5.104831218719482, -0.07341212034225464], + [3.7331013679504395, -5.8481645584106445], + [2.2708334922790527, -3.0200860500335693], + [-5.230788707733154, 6.792350769042969], + [-0.07278091460466385, 13.386764526367188], + [-2.529592275619507, 1.4754806756973267], + [-0.3888116776943207, -0.6392939686775208], + [-3.7249746322631836, -3.4447264671325684], + [-4.954787731170654, 5.570346832275391], + [-4.522318363189697, -2.8120625019073486], + [-3.555518388748169, -2.188915967941284], + [0.20192617177963257, 13.055920600891113], + [-7.854533672332764, -0.45988357067108154], + [2.090996742248535, 1.899511456489563], + [-4.02152156829834, -2.301992177963257], + [-2.146623373031616, 2.4148144721984863], + [0.3454522490501404, 11.346785545349121], + [5.49739933013916, -1.1961619853973389], + [0.5187061429023743, -0.9708690643310547], + [4.296704292297363, 1.4114433526992798], + [2.7456209659576416, -8.514549255371094], + [-2.2091712951660156, 2.8881514072418213], + [-1.6291972398757935, -3.9301047325134277], + [-5.053915023803711, 4.21272087097168], + [0.6018471121788025, -1.251710057258606], + [-2.959442377090454, 4.924600601196289], + [-7.625464916229248, -1.2999930381774902], + [4.30946683883667, 1.8896862268447876], + [-4.54381799697876, 6.038939476013184], + [-3.2991979122161865, -5.620213508605957], + [2.3175759315490723, 4.1088080406188965], + [-3.2251384258270264, -3.946948766708374], + [2.080724000930786, 5.849776268005371], + [-3.263767719268799, -5.110111236572266], + [6.950661659240723, -1.5446068048477173], + [2.8799660205841064, -3.9895031452178955], + [5.3457865715026855, 6.7264862060546875], + [3.7551379203796387, -3.4155142307281494], + [-0.8694867491722107, -0.9206876158714294], + [2.3292784690856934, -7.795559883117676], + [3.8247642517089844, -5.263317108154297], + [1.7972915172576904, -4.897653102874756], + [6.178079605102539, 7.58571720123291], + [-4.293384075164795, -4.677177906036377], + [-0.7997806072235107, 9.823275566101074], + [6.571622848510742, -5.79520320892334], + [-2.001542568206787, 2.1396310329437256], + [1.7647954225540161, 4.947879791259766], + [3.796051263809204, -2.518390417098999], + [3.3716042041778564, -2.5740458965301514], + [1.5786603689193726, 8.747053146362305], + [1.5668814182281494, -7.551046371459961], + [-4.739067554473877, -3.683220624923706], + [-2.330204486846924, 2.2576406002044678], + [-1.9877128601074219, 2.3034281730651855], + [-3.7184040546417236, -3.120650291442871], + [8.195792198181152, -2.2459304332733154], + [0.5964340567588806, -1.098300814628601], + [-4.690414905548096, -2.9312665462493896], + [-1.1908533573150635, -2.1283695697784424], + [1.215453863143921, -0.12102550268173218], + [2.6344268321990967, 3.22936749458313], + [-3.054287910461426, -4.728999614715576], + [-5.141286373138428, 5.62058162689209], + [6.360274791717529, -1.2757881879806519], + [-4.623868942260742, 2.6354901790618896], + [3.086097240447998, -3.4304544925689697], + [-1.0907963514328003, 6.144122123718262], + [-4.616012096405029, -3.4177653789520264], + [-0.9279682040214539, 0.8631960153579712], + [-6.919139385223389, 7.769353866577148], + [8.107749938964844, -2.3104565143585205], + [1.4463253021240234, -0.24508118629455566], + [5.899798393249512, -5.2688751220703125], + [4.364582538604736, 7.360169410705566], + [-3.0341649055480957, 4.587833404541016], + [8.949618339538574, -2.4331324100494385], + [4.609062671661377, -2.8226895332336426], + [-2.683358907699585, 2.0483148097991943], + [4.557615756988525, -3.336660623550415], + [-2.2028968334198, 2.670653820037842], + [2.060932159423828, 1.1787835359573364], + [1.1882236003875732, -7.426596641540527], + [2.105954885482788, -6.536774635314941], + [4.801631450653076, 6.574014663696289], + [0.11102264374494553, 11.696985244750977], + [0.30099397897720337, -1.2347677946090698], + [-3.572124719619751, -2.49843430519104], + [-5.014918804168701, 5.231792449951172], + [-0.030289776623249054, 12.292816162109375], + [2.817248582839966, -8.02707290649414], + [-3.378697156906128, -2.8886423110961914], + [-7.597630500793457, -0.0010587014257907867], + [-3.3068292140960693, -5.443027496337891], + [-4.25485372543335, -5.736289978027344], + [0.0007212087512016296, 12.26313591003418], + [8.501935005187988, -2.231376886367798], + [2.172503709793091, 3.23046612739563], + [-2.5093576908111572, 1.6936936378479004], + [6.002701282501221, 7.9104132652282715], + [0.8463696241378784, -6.440790176391602], + [-6.7164530754089355, -0.30053508281707764], + [-6.193421363830566, -2.5239205360412598], + [-4.222301006317139, -6.318421363830566], + [2.9467787742614746, 0.9704393148422241], + [-2.553879976272583, -2.6502091884613037], + [5.184700965881348, 7.487149238586426], + [0.07063852995634079, 12.111473083496094], + [8.677724838256836, -2.6653542518615723], + [5.246920108795166, 7.099115371704102], + [3.30973219871521, -7.808882236480713], + [2.60276198387146, -7.434456825256348], + [2.208111524581909, -2.0392966270446777], + [-2.9719550609588623, 4.447362422943115], + [3.051760196685791, -4.319815158843994], + [-3.5303196907043457, 3.837841272354126], + [2.541440725326538, -8.218416213989258], + [-2.6035938262939453, 2.0117530822753906], + [-4.261213779449463, -6.60191535949707], + [2.3900558948516846, 3.5057952404022217], + [7.564655303955078, -2.1181800365448], + [2.2476789951324463, -3.028362512588501], + [1.3028661012649536, -7.069746494293213], + [2.7877209186553955, -4.702175617218018], + [1.8219668865203857, 6.128744125366211], + [-3.830169439315796, -6.163431167602539], + [8.604107856750488, -2.3057117462158203], + [-1.4050054550170898, -2.8243215084075928], + [1.9293715953826904, -6.159156799316406], + [1.3010270595550537, -6.936142921447754], + [4.357445240020752, 1.9522138833999634], + [0.23537087440490723, 10.965887069702148], + [-4.426087856292725, -3.1158831119537354], + [4.197286605834961, -3.8628087043762207], + [3.3778247833251953, -8.050335884094238], + [-2.385810613632202, -3.2325093746185303], + [6.531978130340576, -1.422970175743103], + [-2.2680869102478027, 2.5159969329833984], + [-1.802753210067749, 2.2058427333831787], + [1.495225191116333, 2.2027788162231445], + [0.156449556350708, 9.969468116760254], + [-6.273110866546631, 8.030333518981934], + [8.288738250732422, -1.9662903547286987], + [5.804079532623291, -1.098220944404602], + [9.235623359680176, -2.360862970352173], + [-5.499160289764404, 6.926670074462891], + [-0.08006460219621658, 12.99200439453125], + [-4.496915340423584, -3.6221632957458496], + [10.276679992675781, -2.401183605194092], + [0.8371871709823608, 1.079938530921936], + [-7.4160566329956055, -0.35974669456481934], + [9.152949333190918, -2.382683753967285], + [3.2797582149505615, -6.751958847045898], + [11.221647262573242, -2.5096890926361084], + [-3.832129716873169, -0.6028848886489868], + [0.19057101011276245, 10.328208923339844], + [-7.459484100341797, -0.3994053602218628], + [-4.670602321624756, 3.944711923599243], + [-1.031614899635315, -3.3575797080993652], + [8.276618957519531, -2.314573049545288], + [0.2440941333770752, -1.160499095916748], + [7.894260406494141, -2.086029052734375], + [3.5348105430603027, 0.8712763786315918], + [-2.6192626953125, 0.9092034101486206], + [-3.7156717777252197, -5.923892974853516], + [3.6927199363708496, -3.405881643295288], + [-4.498929023742676, -4.086841583251953], + [3.645286798477173, -3.8275110721588135], + [-2.6396493911743164, 2.4349825382232666], + [-2.6269707679748535, 2.0782861709594727], + [1.268202543258667, -6.928315162658691], + [0.09610676020383835, 12.49145793914795], + [3.9815914630889893, -3.909315347671509], + [-4.68112850189209, -5.9572601318359375], + [3.5716540813446045, 6.392053604125977], + [1.5560493469238281, -6.272488594055176], + [0.21839720010757446, 11.914974212646484], + [2.0267281532287598, -6.510150909423828], + [1.7473666667938232, 2.006408214569092], + [-3.2347359657287598, -0.9777531623840332], + [2.5296812057495117, 2.775827407836914], + [-3.755915403366089, -5.942716121673584], + [10.213099479675293, -2.5238358974456787], + [2.5590009689331055, 0.4687448740005493], + [7.453941345214844, -2.608565092086792], + [-4.7950663566589355, -1.7512139081954956], + [3.480835437774658, -7.890222549438477], + [-0.8720094561576843, -3.3586926460266113], + [-1.9976978302001953, 2.1511473655700684], + [3.4145655632019043, -7.844796180725098], + [0.07750814408063889, 13.019510269165039], + [-2.170842409133911, -1.5816081762313843], + [-4.631351947784424, 4.797585487365723], + [8.983328819274902, -2.2894575595855713], + [-2.3014848232269287, -4.352566719055176], + [9.252260208129883, -2.2267134189605713], + [3.851623773574829, -3.5320322513580322], + [-4.527679920196533, -6.8155412673950195], + [7.2064208984375, -4.867605209350586], + [3.698958158493042, 1.8003637790679932], + [-3.976167917251587, 5.996749401092529], + [3.1847140789031982, -4.675823211669922], + [7.140042304992676, -1.5485862493515015], + [6.699617862701416, -1.6252992153167725], + [1.6852930784225464, -5.048675537109375], + [-3.1943118572235107, -5.0523810386657715], + [-2.8293001651763916, 2.152958393096924], + [3.6619343757629395, -4.440747261047363], + [-1.9927531480789185, 2.2678472995758057], + [-3.8763136863708496, -3.4552652835845947], + [8.382784843444824, -2.2821590900421143], + [3.515690803527832, -4.310955047607422], + [-2.46000599861145, -0.6811991930007935], + [-3.654942750930786, -5.466880798339844], + [0.7716426253318787, 11.318403244018555], + [0.1932108998298645, 10.936301231384277], + [-1.5869641304016113, 0.9961773157119751], + [-4.820950031280518, -7.270390510559082], + [2.331037759780884, 4.20018196105957], + [1.2615511417388916, 0.48774588108062744], + [7.7274017333984375, -2.029466152191162], + [2.823756456375122, 1.9998093843460083], + [1.3944361209869385, -7.40517520904541], + [-2.0198347568511963, 2.4490063190460205], + [-5.675631046295166, -2.2404377460479736], + [-0.009690262377262115, -1.4898000955581665], + [-5.086380958557129, -2.67773699760437], + [0.1724974513053894, 10.502882957458496], + [-0.3870733976364136, 10.015326499938965], + [0.11584287136793137, 9.270627975463867], + [1.6771962642669678, 1.7924399375915527], + [-4.565598011016846, -7.03862190246582], + [5.323261737823486, -3.6022210121154785], + [5.212547302246094, -2.1705050468444824], + [2.753845453262329, -2.8420188426971436], + [1.675950288772583, -7.3523688316345215], + [3.051833152770996, -4.066612243652344], + [3.862152338027954, -5.210729598999023], + [-0.09325701743364334, 13.747602462768555], + [-6.992352485656738, 0.003537174314260483], + [4.62641716003418, 7.023678302764893], + [6.29498291015625, -3.355440378189087], + [-6.371910572052002, -1.8762863874435425], + [-6.394898891448975, 5.922321796417236], + [-2.2834582328796387, 2.0248687267303467], + [0.18156933784484863, 10.262578010559082], + [5.783664226531982, -3.7254557609558105], + [4.977268695831299, -5.4316511154174805], + [2.828422784805298, -4.0573506355285645], + [8.776001930236816, -2.2776896953582764], + [-4.3503499031066895, 5.159360885620117], + [-2.49511981010437, 2.072361946105957], + [9.375950813293457, -2.6176187992095947], + [2.93699049949646, -5.505010604858398], + [-3.377581834793091, -2.772404909133911], + [3.2648160457611084, -4.282536029815674], + [4.162695407867432, 1.9601715803146362], + [4.750295162200928, 7.138072967529297], + [-1.7204302549362183, -0.010214749723672867], + [-2.605123281478882, -3.141601324081421], + [2.3740341663360596, -9.016833305358887], + [3.021304130554199, -4.255454063415527], + [2.4650614261627197, 5.670080661773682], + [0.02602570503950119, -1.100784420967102], + [-3.391927480697632, -5.474040985107422], + [0.9463456273078918, -2.239800214767456], + [-1.9567283391952515, 6.096663475036621], + [2.9687187671661377, -8.11117935180664], + [3.126868963241577, 1.1460449695587158], + [5.010397434234619, 6.8789215087890625], + [-6.2857985496521, 7.987817764282227], + [8.956969261169434, -2.426617383956909], + [9.541816711425781, -2.703209638595581], + [-4.7958984375, 5.646940231323242], + [9.843321800231934, -2.4578630924224854], + [-4.084386348724365, -1.5015496015548706], + [-5.5414886474609375, 5.331319332122803], + [-4.104929447174072, -6.26115608215332], + [7.848858833312988, -2.1992287635803223], + [6.403091907501221, -4.893763065338135], + [-1.3808341026306152, 1.4574296474456787], + [4.0879693031311035, 1.605002760887146], + [-3.714125394821167, -5.904078483581543], + [0.021046094596385956, 12.234356880187988], + [3.3642632961273193, -4.187902450561523], + [7.506414890289307, -2.1912572383880615], + [-5.640120506286621, 5.932185173034668], + [-6.376803874969482, 7.598672866821289], + [4.159953594207764, 6.054680824279785], + [-2.433565616607666, 1.6824251413345337], + [-4.594565391540527, -3.140700101852417], + [0.1128067895770073, 9.34210205078125], + [2.1650874614715576, 0.07449296116828918], + [-0.1631731390953064, 14.940298080444336], + [-2.1076571941375732, 1.2520076036453247], + [-0.2333325445652008, -1.5040885210037231], + [-4.568339824676514, -0.2966763973236084], + [2.525916337966919, 2.047647714614868], + [-0.5244137048721313, -1.9890669584274292], + [4.2434892654418945, -7.507358551025391], + [-5.7454681396484375, 5.2189040184021], + [7.167960166931152, 8.541815757751465], + [-6.751206874847412, 0.015399213880300522], + [-2.519122838973999, 1.7535717487335205], + [2.1206142902374268, -6.609401226043701], + [8.816275596618652, -2.388098955154419], + [-3.3658759593963623, -5.093451023101807], + [0.5365449786186218, -0.6287027597427368], + [-3.899841547012329, -3.7262320518493652], + [-3.22758150100708, 6.554811477661133], + [3.07150936126709, 0.29630765318870544], + [-3.11525559425354, 4.989004135131836], + [-3.088921070098877, -0.7405844926834106], + [-2.298468589782715, 2.3033454418182373], + [-5.132344722747803, -3.1806252002716064], + [-2.0974714756011963, 2.5117111206054688], + [-3.8527655601501465, -3.142958402633667], + [-4.506624698638916, -6.196077823638916], + [3.183730125427246, -4.554434299468994], + [3.228132486343384, -7.088508129119873], + [-3.6843183040618896, 3.665400266647339], + [-4.028487682342529, 4.028480529785156], + [-4.655834674835205, -4.868908405303955], + [-0.7620757818222046, -0.5479828119277954], + [0.6051532626152039, 10.884773254394531], + [-0.011401958763599396, 12.331559181213379], + [3.7119827270507812, -3.9429397583007812], + [9.053832054138184, -2.4240150451660156], + [2.176071882247925, -6.800593852996826], + [-0.6590023636817932, -1.9999020099639893], + [7.853658199310303, -2.1231303215026855], + [-1.2300372123718262, 1.6321558952331543], + [2.7337002754211426, 6.413905143737793], + [-5.0572333335876465, -8.2468843460083], + [1.40852952003479, 0.704888105392456], + [-7.283471584320068, 0.4445129632949829], + [2.820958137512207, -7.168585300445557], + [0.002823762595653534, 9.55009651184082], + [-7.078027248382568, -0.39255034923553467], + [-2.457379102706909, -4.131905555725098], + [1.549466848373413, -7.814560413360596], + [7.517363548278809, -1.8854020833969116], + [-4.650246620178223, 4.642319202423096], + [4.976999282836914, 6.158382892608643], + [-1.082086205482483, -4.800505638122559], + [7.5700554847717285, -2.7697362899780273], + [-2.699113130569458, 2.4886484146118164], + [2.0694849491119385, 2.506725549697876], + [-4.537725925445557, 4.8214826583862305], + [7.893168926239014, -2.1597535610198975], + [-4.076812744140625, -4.308051586151123], + [3.924731492996216, -3.7314646244049072], + [-4.263757228851318, -3.0061569213867188], + [1.8865067958831787, 3.945492744445801], + [-1.9418272972106934, -0.6910407543182373], + [-0.10288424044847488, 9.920085906982422], + [-0.020439930260181427, 9.15522289276123], + [-1.9032530784606934, 2.4235079288482666], + [9.52345085144043, -2.4678704738616943], + [-3.396501302719116, 0.87114018201828], + [5.711874008178711, -4.452640533447266], + [3.1334497928619385, -7.19698429107666], + [0.16068679094314575, 10.173971176147461], + [0.14145052433013916, 9.94322395324707], + [-2.47503924369812, -2.7891597747802734], + [2.0241141319274902, 5.074277877807617], + [-4.40197229385376, -0.11792385578155518], + [2.834075689315796, 0.6131495237350464], + [-0.0008016303181648254, 12.454113006591797], + [1.853057622909546, -7.7675299644470215], + [1.8305004835128784, -7.9458770751953125], + [0.30059725046157837, -1.3669424057006836], + [-2.396162509918213, 2.0653719902038574], + [1.478839635848999, -8.04273509979248], + [-0.9978228211402893, -1.8342726230621338], + [6.417731285095215, -2.873246669769287], + [0.8776768445968628, -0.7628439664840698], + [-0.6485298871994019, -2.8115334510803223], + [3.347979784011841, -8.898173332214355], + [-3.2063143253326416, -0.26009851694107056], + [-5.936048984527588, 6.108613014221191], + [-6.727494716644287, 8.174227714538574], + [4.6212286949157715, 7.505768775939941], + [-4.029818058013916, 5.01158332824707], + [1.624047040939331, 2.186932325363159], + [3.0964784622192383, -4.3734612464904785], + [-0.018013425171375275, 8.787374496459961], + [-3.2609996795654297, -5.037489414215088], + [-6.161856174468994, 6.971556663513184], + [4.25886869430542, -3.403280019760132], + [0.058504216372966766, 11.32554817199707], + [-1.1861063241958618, -1.7038445472717285], + [1.273860216140747, -0.06107509508728981], + [-2.550384283065796, 2.054731845855713], + [3.4685187339782715, -6.882464408874512], + [2.809922695159912, -8.849300384521484], + [-3.1109611988067627, -3.539531946182251], + [5.793965816497803, -1.2940841913223267], + [-1.7766907215118408, -4.1519880294799805], + [1.648390293121338, -6.610314846038818], + [-4.336695671081543, -6.474352836608887], + [0.35390573740005493, 8.52985954284668], + [1.7693653106689453, 4.907605171203613], + [0.016043178737163544, 12.818821907043457], + [2.878826856613159, -4.4800872802734375], + [5.284989833831787, -1.11663019657135], + [0.4705216884613037, -0.9672777056694031], + [2.9690046310424805, -9.825225830078125], + [-3.7055728435516357, -6.125945568084717], + [1.252655267715454, 2.3320000171661377], + [5.995871067047119, 7.7406415939331055], + [0.05858378857374191, 11.751675605773926], + [6.47385311126709, 7.847790718078613], + [-4.492692470550537, -7.125484466552734], + [3.623669385910034, -3.365509271621704], + [-3.4026803970336914, -5.6659088134765625], + [-4.166540622711182, -2.335376501083374], + [5.886188983917236, -1.2926392555236816], + [7.76955509185791, 9.300151824951172], + [2.2135400772094727, -7.670108795166016], + [1.8593677282333374, 0.12608245015144348], + [-3.2560298442840576, -4.1719818115234375], + [-2.548549175262451, -4.32470703125], + [4.3783040046691895, -3.496091842651367], + [-5.465321063995361, -4.7106475830078125], + [0.20329147577285767, 10.605741500854492], + [-1.5476100444793701, 0.5336204171180725], + [-2.069093942642212, -4.166821002960205], + [-0.019619114696979523, -1.5475871562957764], + [-1.9309415817260742, 6.442217826843262], + [-1.154059886932373, -3.478665828704834], + [2.375317335128784, -7.077393531799316], + [1.0577011108398438, -7.206794738769531], + [2.544286012649536, -8.061100959777832], + [3.0647099018096924, -3.7133140563964844], + [2.560910940170288, -3.6604256629943848], + [-2.891810894012451, -2.013181209564209], + [-3.256883144378662, 5.1067047119140625], + [-2.045414686203003, 2.4731266498565674], + [-3.5497443675994873, 3.829430341720581], + [1.7217113971710205, -0.477672278881073], + [2.951019525527954, -4.175655364990234], + [-3.221613645553589, 3.0452988147735596], + [-2.1097958087921143, 2.595792531967163], + [-6.0945000648498535, 5.946896553039551], + [0.9148450493812561, 6.5124287605285645], + [5.992239475250244, -5.613396167755127], + [0.10298644751310349, -3.469067096710205], + [6.259194850921631, 8.078396797180176], + [5.3468523025512695, 7.20829963684082], + [0.07359688729047775, 12.157489776611328], + [-2.1482276916503906, 2.729790687561035], + [9.504908561706543, -2.249018430709839], + [0.21278679370880127, 10.643277168273926], + [0.3549700379371643, -1.2308223247528076], + [-6.036950588226318, -2.146596908569336], + [8.035449028015137, -2.0651891231536865], + [2.716334581375122, 3.5493743419647217], + [-4.346568584442139, -6.384737968444824], + [-1.1363400220870972, 3.611132860183716], + [4.741992473602295, -2.837137460708618], + [3.0386528968811035, -5.566091537475586], + [6.5968451499938965, -1.4087108373641968], + [0.035807423293590546, 9.628610610961914], + [2.7070815563201904, 0.8818225860595703], + [-4.402218818664551, 4.296238899230957], + [3.770148515701294, -7.168999671936035], + [4.840843677520752, 7.536416053771973], + [3.342115879058838, 5.829174995422363], + [2.345539093017578, 2.573150157928467], + [-2.709272623062134, -2.8302595615386963], + [5.399899005889893, 7.712576866149902], + [6.145137310028076, -3.39434814453125], + [-2.0577313899993896, -2.177447557449341], + [-6.128769397735596, -1.5427372455596924], + [7.937675952911377, -2.2708065509796143], + [5.509069919586182, 7.5063676834106445], + [-2.8981120586395264, -5.461267471313477], + [3.4992594718933105, -8.643871307373047], + [-2.374988079071045, 2.060089349746704], + [1.2664328813552856, -5.207225799560547], + [-5.5240397453308105, -3.6664655208587646], + [2.8082239627838135, -3.68829345703125], + [7.380044460296631, -2.1549580097198486], + [3.0295827388763428, -6.524570465087891], + [-2.0749921798706055, 2.2116949558258057], + [-3.924513578414917, -2.486041307449341], + [3.246047019958496, -6.737644195556641], + [0.9374155402183533, 5.8398942947387695], + [2.4633212089538574, -8.809524536132812], + [0.053192250430583954, 9.437902450561523], + [-6.620337009429932, 6.701851844787598], + [1.8057265281677246, 4.268903732299805], + [-1.0249526500701904, 1.9129588603973389], + [-4.7738037109375, -6.071389675140381], + [-6.053094387054443, 6.696446418762207], + [8.891729354858398, -2.4155499935150146], + [3.4575865268707275, -3.9451870918273926], + [0.13273966312408447, 9.790937423706055], + [10.295592308044434, -2.363088369369507], + [-2.221642017364502, 1.0451107025146484], + [-6.06151819229126, 6.18330192565918], + [7.024051189422607, -2.720532178878784], + [6.841774940490723, 8.317745208740234], + [8.91638469696045, -2.3908207416534424], + [-6.465643882751465, -1.8589593172073364], + [4.060565948486328, -0.7560179233551025], + [3.5344412326812744, -0.0783064067363739], + [-2.899240732192993, -3.84480357170105], + [-3.3875062465667725, -5.759716510772705], + [9.291215896606445, -2.2793941497802734], + [-5.413240909576416, 0.16825813055038452], + [-5.711988925933838, 4.814088821411133], + [-0.5774725675582886, -2.3460614681243896], + [3.086726427078247, -5.9348320960998535], + [-5.340029716491699, -3.559852123260498], + [5.003668308258057, -3.375483751296997], + [8.537043571472168, -2.3262264728546143], + [3.091007947921753, -4.2012786865234375], + [0.8351588845252991, -5.6603779792785645], + [4.2819600105285645, -4.9364824295043945], + [-4.620573997497559, -6.530001640319824], + [7.853350639343262, -2.2033050060272217], + [0.255729079246521, 11.1622314453125], + [-2.5418598651885986, 2.056145191192627], + [5.922767639160156, -0.517067015171051], + [-4.418522357940674, -6.508272171020508], + [0.6581055521965027, 11.221542358398438], + [8.351524353027344, -3.2126080989837646], + [2.7890496253967285, -3.6552958488464355], + [0.09407513588666916, 10.23167610168457], + [-4.327982425689697, -1.5192548036575317], + [0.026428155601024628, 9.099902153015137], + [7.263624668121338, -1.7913618087768555], + [-4.57389497756958, -5.796252250671387], + [-1.4319862127304077, 0.1745114028453827], + [-2.5441014766693115, 2.0967514514923096], + [0.09222602099180222, 12.415010452270508], + [-2.4139187335968018, 2.0262911319732666], + [2.327444553375244, -9.280040740966797], + [-4.50785493850708, -3.397329568862915], + [-6.430019855499268, -0.4005378484725952], + [-7.360798358917236, 8.618385314941406], + [-2.0290517807006836, 2.422171115875244], + [5.6564435958862305, 7.717529296875], + [5.036032676696777, -4.623713493347168], + [-3.174689531326294, 0.6485897898674011], + [1.596428394317627, -6.779977798461914], + [-2.0138442516326904, 2.3529655933380127], + [4.1787238121032715, -3.4515540599823], + [-3.8440563678741455, 4.143673896789551], + [-4.256533145904541, -6.479427814483643], + [-1.9071024656295776, 1.188004493713379], + [-1.7382662296295166, 2.5788493156433105], + [-4.673830986022949, -7.029118537902832], + [-1.5794891119003296, 1.0796438455581665], + [-3.6301167011260986, -4.730387210845947], + [0.21932637691497803, 11.460357666015625], + [1.9299039840698242, -5.1278886795043945], + [-4.467763423919678, 0.29633116722106934], + [3.377171277999878, -3.2930796146392822], + [-6.857221603393555, 6.381915092468262], + [-4.430931568145752, -6.364612579345703], + [9.093281745910645, -2.4687082767486572], + [-4.942518711090088, -0.9490811824798584], + [3.4714229106903076, -6.9716572761535645], + [9.274182319641113, -2.294543504714966], + [-3.1590683460235596, -4.321802139282227], + [2.841717004776001, 4.360950946807861], + [-4.598270893096924, 5.4755096435546875], + [5.340335369110107, -2.370690107345581], + [1.7408559322357178, -0.09677347540855408], + [-0.17213308811187744, -3.4974045753479004], + [7.402390003204346, -1.8877114057540894], + [3.069481134414673, -4.349462032318115], + [6.846039295196533, -1.7245625257492065], + [-4.239991188049316, 5.797016620635986], + [-3.909334659576416, -6.3106231689453125], + [8.091315269470215, -2.100051164627075], + [-2.4315314292907715, 3.4115817546844482], + [5.024441719055176, -3.9113292694091797], + [5.154262065887451, -1.0466805696487427], + [6.930840969085693, -2.9551026821136475], + [9.489191055297852, -2.359440565109253], + [-1.8052794933319092, 2.096383810043335], + [4.619701385498047, -1.6048476696014404], + [2.144549608230591, -6.964587688446045], + [-5.1583075523376465, -6.632862567901611], + [-4.1095733642578125, 6.0696635246276855], + [-0.9717710614204407, 1.7121323347091675], + [3.118833541870117, -8.366044044494629], + [3.275266647338867, -2.4073903560638428], + [-4.831470966339111, -7.521050930023193], + [1.775498867034912, 4.767463207244873], + [3.9708335399627686, -3.4296414852142334], + [-5.573549747467041, -2.552111864089966], + [-1.562136173248291, 1.300554871559143], + [-2.84375262260437, -1.4387445449829102], + [7.66259241104126, -2.0302951335906982], + [3.3627164363861084, -8.031111717224121], + [-4.720534801483154, -4.886032581329346], + [2.5669543743133545, -6.9956865310668945], + [3.123668670654297, -8.904888153076172], + [3.5142812728881836, -7.423863410949707], + [-4.344425201416016, -6.987354278564453], + [5.982812404632568, -1.290555715560913], + [0.21003007888793945, 11.516508102416992], + [-1.3980430364608765, 0.36165350675582886], + [-4.549428939819336, -4.589768886566162], + [4.790086269378662, -1.804115653038025], + [0.04277675598859787, 11.95265007019043], + [2.8965585231781006, -4.142998695373535], + [4.611405849456787, 6.874728202819824], + [2.924333333969116, 5.94661808013916], + [-2.08440899848938, 2.5641279220581055], + [4.2708659172058105, -3.1034674644470215], + [2.6701650619506836, -3.799539804458618], + [-4.4049391746521, 5.5998125076293945], + [10.028945922851562, -2.5143258571624756], + [0.40455853939056396, 1.253605604171753], + [2.0717737674713135, 2.294229507446289], + [8.349922180175781, -2.260099411010742], + [-2.396911144256592, 1.5856356620788574], + [-4.268876075744629, 5.033450126647949], + [0.6569737792015076, -0.5833693146705627], + [7.420140266418457, -1.9657210111618042], + [-1.467181921005249, 1.86813223361969], + [3.2248642444610596, -4.671960830688477], + [-3.5274012088775635, -1.513748288154602], + [-6.140747547149658, -1.4240103960037231], + [5.381584167480469, 0.5759216547012329], + [-2.9819118976593018, -5.60064697265625], + [7.768072605133057, 9.219480514526367], + [-0.007043309509754181, 9.457530975341797], + [-2.598957061767578, 2.0615289211273193], + [-5.674905300140381, 0.4410310983657837], + [-2.8036446571350098, 0.3042142987251282], + [3.3938212394714355, -7.2406721115112305], + [-3.499748468399048, 5.168889045715332], + [0.17780983448028564, -1.2958935499191284], + [2.8948700428009033, -9.638310432434082], + [-6.950465679168701, 8.60614013671875], + [4.392521858215332, 7.231101036071777], + [-7.272018909454346, -0.13026416301727295], + [-4.106959819793701, 3.42583966255188], + [8.181791305541992, -2.281263589859009], + [-3.7994930744171143, 5.259031772613525], + [3.8664896488189697, 6.421716213226318], + [5.555243968963623, -2.209059715270996], + [3.168278932571411, 1.6077967882156372], + [-1.4091242551803589, 1.7092070579528809], + [9.154449462890625, -2.3769519329071045], + [-5.9303412437438965, 7.305225372314453], + [6.041154384613037, -1.1861652135849], + [-4.4474406242370605, -6.279183387756348], + [-4.718410015106201, -6.751375198364258], + [7.939486026763916, -2.214867353439331], + [-4.531912326812744, -5.635613441467285], + [8.363076210021973, 9.818513870239258], + [0.08315496891736984, 12.448002815246582], + [2.4597175121307373, -7.257768630981445], + [3.07670521736145, -4.536165714263916], + [4.092774391174316, 6.608180999755859], + [-4.859420299530029, 5.387929916381836], + [-4.341470241546631, -5.733061790466309], + [-0.08852393180131912, 13.972321510314941], + [-3.006787061691284, -1.3455067873001099], + [-1.9961411952972412, 2.5300004482269287], + [0.559058427810669, -0.5976320505142212], + [-2.5922720432281494, -0.9209725856781006], + [-2.4834234714508057, -5.25299596786499], + [7.647240161895752, -2.1952340602874756], + [8.736918449401855, -2.2494843006134033], + [3.5150187015533447, -7.006434440612793], + [8.682242393493652, -2.4107463359832764], + [0.13518327474594116, 9.673202514648438], + [3.645392417907715, -5.321301460266113], + [1.4699522256851196, 0.9248452186584473], + [3.436237335205078, -5.02415132522583], + [0.02715330570936203, 11.984416961669922], + [-4.8790082931518555, -7.005475044250488], + [-2.2738711833953857, 2.8178465366363525], + [-2.2511708736419678, 1.4423828125], + [3.285810708999634, -3.9577343463897705], + [9.58905029296875, -2.4323036670684814], + [-4.355696678161621, 5.968368053436279], + [-0.896544873714447, 1.573912501335144], + [0.27190113067626953, 11.108335494995117], + [6.300229072570801, 8.123818397521973], + [-4.276098251342773, -6.104193687438965], + [4.332779884338379, -3.6769423484802246], + [2.1462013721466064, 1.7343097925186157], + [2.8267996311187744, 0.9144705533981323], + [4.008991718292236, -1.3883286714553833], + [-2.4635374546051025, 0.7438009977340698], + [-5.272205829620361, -3.110884666442871], + [1.2436796426773071, 0.07753978669643402], + [4.278378963470459, 0.18083690106868744], + [2.843958616256714, -8.136164665222168], + [3.6673967838287354, -2.656784772872925], + [-4.127248764038086, -6.582476615905762], + [5.952594757080078, -1.3420084714889526], + [-4.716838359832764, 5.525850296020508], + [4.430530071258545, -3.7158043384552], + [2.0350329875946045, -7.842596530914307], + [0.06930737942457199, 12.380463600158691], + [-3.7596349716186523, -6.029055118560791], + [-5.96648645401001, -2.253450632095337], + [-4.165761470794678, -6.407562255859375], + [2.8406012058258057, -4.06060791015625], + [0.037670306861400604, 11.93433952331543], + [2.7253811359405518, -4.021149635314941], + [3.4854202270507812, -6.520632266998291], + [1.9670932292938232, -6.636761665344238], + [-4.460290908813477, -0.2698989510536194], + [-3.8622515201568604, -3.0063438415527344], + [-6.9109673500061035, 0.14493918418884277], + [1.082608938217163, -7.03779411315918], + [-4.414013385772705, -6.418727397918701], + [5.322767734527588, 7.67734956741333], + [-0.9444794058799744, -3.4683830738067627], + [-4.185441970825195, 5.964933395385742], + [-4.479983806610107, -3.209871530532837], + [6.674116611480713, -1.3830169439315796], + [2.591369867324829, -9.098219871520996], + [0.5551162362098694, -0.8082025051116943], + [-4.5020060539245605, -2.48968243598938], + [-2.247659921646118, -3.766883134841919], + [-4.925981521606445, 4.50876522064209], + [-2.4987199306488037, 6.129478454589844], + [-2.3810698986053467, 2.03255558013916], + [-3.209453821182251, -1.74061119556427], + [-4.245927333831787, -4.369387149810791], + [2.344510793685913, -3.4631454944610596], + [6.562503814697266, -1.511468529701233], + [7.396862030029297, -1.952711582183838], + [-7.051914691925049, 8.23012638092041], + [3.8534393310546875, 7.3065385818481445], + [-2.3917739391326904, 2.1649184226989746], + [1.3045485019683838, -6.43482780456543], + [3.839252233505249, -8.0264892578125], + [-6.534714221954346, 7.69283390045166], + [3.5095949172973633, -5.290460586547852], + [-1.790676474571228, 2.243990182876587], + [8.200216293334961, -2.23443865776062], + [-1.0700105428695679, -1.7691177129745483], + [6.671105861663818, -1.617071270942688], + [-7.779351234436035, 0.11067402362823486], + [3.226703405380249, -3.7190372943878174], + [-0.34410637617111206, -1.586069941520691], + [6.280140399932861, -6.279581069946289], + [0.13656574487686157, 11.341375350952148], + [0.4594305157661438, -0.5000647306442261], + [0.1135048195719719, 9.583972930908203], + [-6.451009750366211, 8.436662673950195], + [-5.294426441192627, -4.492247104644775], + [5.127821445465088, -5.145436763763428], + [3.6531460285186768, 1.4590437412261963], + [4.843658447265625, -1.4136018753051758], + [10.933612823486328, -2.564225912094116], + [-2.085475206375122, 2.4473047256469727], + [1.274324655532837, 6.019386291503906], + [5.197310924530029, -4.7947540283203125], + [0.00506698340177536, 10.446097373962402], + [7.4468817710876465, -3.5720770359039307], + [-3.0683772563934326, -3.6528303623199463], + [8.13159465789795, -2.1891324520111084], + [-2.567777633666992, 1.9931944608688354], + [3.2393486499786377, -7.042632579803467], + [-0.8063485622406006, 1.052229881286621], + [2.9994709491729736, 1.1994500160217285], + [2.332489013671875, -8.264813423156738], + [-2.8823108673095703, -3.0283524990081787], + [2.413590669631958, 4.504456520080566], + [0.27299660444259644, 9.80472183227539], + [1.6132981777191162, -2.711106061935425], + [0.1539393663406372, 10.103649139404297], + [0.12437128275632858, 9.83576774597168], + [0.21783313155174255, 0.35065513849258423], + [0.9186384081840515, -0.11868929862976074], + [4.6781392097473145, 7.225585460662842], + [-4.225545406341553, -3.526845932006836], + [-2.2938361167907715, 1.8945353031158447], + [-1.5481947660446167, 1.986962914466858], + [-6.304460048675537, 7.221740245819092], + [0.0016502663493156433, 10.501413345336914], + [-3.8048970699310303, -6.3822479248046875], + [-0.07556319981813431, 9.342212677001953], + [3.0558180809020996, -3.9683334827423096], + [-4.773378849029541, -2.0862293243408203], + [-3.936678171157837, 4.647348403930664], + [3.800415515899658, 1.4588757753372192], + [-5.6912150382995605, 4.472700119018555], + [6.087245464324951, -1.19646155834198], + [6.724214553833008, 8.109942436218262], + [1.9892795085906982, -7.862069129943848], + [6.186420440673828, -2.945641279220581], + [-4.483160495758057, 3.7690012454986572], + [-2.033268928527832, 2.4370639324188232], + [5.05876350402832, 6.629515647888184], + [7.719798564910889, -2.2434046268463135], + [1.2320024967193604, -0.4057648181915283], + [-4.531100273132324, 4.986987113952637], + [-1.9876072406768799, -2.4305787086486816], + [9.328837394714355, -2.3160593509674072], + [-1.8999552726745605, 2.4659945964813232], + [1.9247636795043945, -3.8759138584136963], + [-0.008599944412708282, 12.644121170043945], + [-2.253608465194702, 2.6675662994384766], + [-5.302332401275635, 4.347172260284424], + [-5.6124444007873535, -0.2449023723602295], + [-0.1004381850361824, 14.793266296386719], + [0.03832905739545822, 9.17978286743164], + [0.2472260594367981, 1.3245643377304077], + [2.791546106338501, -8.448354721069336], + [-2.785693883895874, -1.7376141548156738], + [-2.0204434394836426, 2.248436689376831], + [3.647376298904419, -7.832103729248047], + [-2.114776372909546, 1.5911191701889038], + [-3.6751041412353516, -2.537277936935425], + [-2.316028118133545, 2.2092721462249756], + [3.786344051361084, -8.489423751831055], + [-2.140625238418579, 2.814469575881958], + [3.6255156993865967, -8.283605575561523], + [-4.635377883911133, -0.34799718856811523], + [2.6071231365203857, -7.873231887817383], + [2.3312227725982666, -8.615957260131836], + [-5.682802677154541, -0.44421881437301636], + [5.223474502563477, 7.5780487060546875], + [6.579920291900635, -5.489182949066162], + [-3.2800042629241943, -3.8611786365509033], + [-4.586476802825928, -6.815925598144531], + [0.5650923252105713, -0.9158025979995728], + [2.07641863822937, -8.065271377563477], + [1.7354016304016113, -6.2692975997924805], + [7.071663856506348, -2.418682336807251], + [3.3685615062713623, -7.19034481048584], + [6.3351945877075195, -1.241949439048767], + [3.2388975620269775, -4.925674915313721], + [4.08499002456665, -3.7213568687438965], + [8.396286010742188, -2.4838407039642334], + [-6.709251880645752, 7.779220104217529], + [-4.80624532699585, 5.66090202331543], + [-5.371452331542969, -0.42146003246307373], + [5.628942966461182, 7.646396636962891], + [-4.713724613189697, 5.825568675994873], + [3.9282891750335693, -2.557645797729492], + [3.353025197982788, -3.9276678562164307], + [-4.476569175720215, -6.426164627075195], + [7.5419135093688965, 9.057968139648438], + [0.6571066379547119, -5.37886905670166], + [2.7041914463043213, 4.24570369720459], + [3.156451940536499, -7.928216457366943], + [-2.375227212905884, 2.4910693168640137], + [-4.630212306976318, -7.11383056640625], + [-4.736622333526611, -7.257986068725586], + [-4.654662609100342, -6.216716766357422], + [-0.08558810502290726, -1.7106183767318726], + [1.8738200664520264, 5.026915073394775], + [5.766506671905518, -1.2594212293624878], + [9.119364738464355, -2.3642237186431885], + [0.6985422968864441, 10.402135848999023], + [-0.09983379393815994, 13.170980453491211], + [-2.931316614151001, 2.7747011184692383], + [9.8010835647583, -2.41182541847229], + [1.6787772178649902, -0.011922243982553482], + [-3.8995447158813477, 0.3546738028526306], + [0.27573949098587036, 11.667170524597168], + [3.5883395671844482, 1.44074547290802], + [-2.1361770629882812, 2.571864128112793], + [3.1264092922210693, -3.998708486557007], + [-4.687005996704102, 4.305275917053223], + [1.2390377521514893, -7.151844024658203], + [3.8448328971862793, -2.319202184677124], + [0.13094890117645264, 9.725200653076172], + [2.261173963546753, -4.001387596130371], + [2.0651323795318604, -7.3299713134765625], + [2.4671504497528076, -4.327012062072754], + [2.6267759799957275, -8.104635238647461], + [-2.451465129852295, 1.073512315750122], + [-1.7466776371002197, 1.730603814125061], + [-5.544313907623291, 7.427338600158691], + [-3.0256035327911377, 4.987346649169922], + [-3.604979991912842, -5.25438928604126], + [-1.8357723951339722, 1.9913793802261353], + [-5.225697040557861, -7.1762800216674805], + [3.014127492904663, -4.215305328369141], + [-0.005988724529743195, 13.003301620483398], + [3.892831563949585, -3.265599012374878], + [0.2100222408771515, -1.2851016521453857], + [3.6288833618164062, -3.471306800842285], + [-3.820622682571411, -0.7280092835426331], + [3.4472897052764893, -3.8208184242248535], + [6.141211032867432, 8.317811012268066], + [2.044616937637329, -0.015925098210573196], + [2.856034994125366, -9.2645263671875], + [-7.091593265533447, 8.544249534606934], + [3.8253371715545654, -3.62678599357605], + [4.467785358428955, -8.646037101745605], + [2.4419806003570557, -8.766901016235352], + [-3.110666036605835, 5.322516441345215], + [3.664400577545166, -7.020742893218994], + [7.287165641784668, -1.9610555171966553], + [-3.1112372875213623, 2.3494396209716797], + [4.165475845336914, 6.263492584228516], + [2.1739704608917236, 0.584180474281311], + [3.473585367202759, -3.780149459838867], + [-7.4272990226745605, -0.813194751739502], + [1.0969178676605225, -0.44915512204170227], + [9.05213451385498, -2.585920572280884], + [-0.6090275645256042, -1.8153797388076782], + [3.0934269428253174, -4.344489097595215], + [-4.449280261993408, 5.493220329284668], + [-3.5669472217559814, -4.86907434463501], + [-3.3736908435821533, -2.8132221698760986], + [7.224761962890625, -3.6872081756591797], + [9.287277221679688, -2.3777759075164795], + [7.9719767570495605, -2.0948827266693115], + [3.0124528408050537, -7.496501445770264], + [-2.0953619480133057, 2.6601498126983643], + [-0.1512545943260193, 14.4688081741333], + [-4.511104106903076, -6.83644962310791], + [-6.531891345977783, 7.5019989013671875], + [8.799050331115723, -2.361660957336426], + [10.018698692321777, -2.4826719760894775], + [2.180251121520996, -8.254878997802734], + [7.1903252601623535, -3.8389151096343994], + [3.7418293952941895, -3.2016243934631348], + [2.36802077293396, -8.67220687866211], + [0.08926563709974289, -1.4599746465682983], + [1.639402985572815, -6.259025573730469], + [2.456674575805664, 5.715114593505859], + [9.486408233642578, -2.2437639236450195], + [-3.752717971801758, 4.723050117492676], + [6.923952579498291, -2.9212613105773926], + [-3.1786696910858154, 3.2444117069244385], + [-2.929203510284424, -4.71992301940918], + [-4.260027885437012, -6.628905296325684], + [-1.3585467338562012, -0.3647439181804657], + [-4.908610820770264, 5.141964912414551], + [3.6641693115234375, 6.740208148956299], + [2.6408498287200928, -8.246326446533203], + [3.6596076488494873, -3.0127933025360107], + [3.681727647781372, -7.468343257904053], + [-4.566298007965088, -1.2034772634506226], + [6.985330104827881, -2.952014446258545], + [3.6283161640167236, 1.0110961198806763], + [3.1096537113189697, 1.039873480796814], + [4.991720199584961, 7.377453804016113], + [3.7464916706085205, 1.2022184133529663], + [-0.03556687384843826, 13.782049179077148], + [2.906688928604126, 5.126709461212158], + [-2.7201473712921143, 0.7427956461906433], + [2.2300479412078857, -6.775607109069824], + [-0.07810086756944656, 12.368751525878906], + [5.459772109985352, -3.2279162406921387], + [-2.5943429470062256, 2.2686076164245605], + [-2.617478847503662, 3.3344366550445557], + [9.44035530090332, -2.3202288150787354], + [-2.6392180919647217, -2.7398974895477295], + [-2.465022563934326, -3.3155672550201416], + [2.132028341293335, 4.607131481170654], + [0.4829303026199341, 3.6950206756591797], + [-2.268242835998535, 2.176217555999756], + [-5.9237260818481445, -1.8301435708999634], + [3.449383497238159, -8.25455379486084], + [7.647661209106445, -1.9868015050888062], + [0.02925383299589157, 10.057608604431152], + [3.580787420272827, 5.252252578735352], + [2.584994077682495, 4.965641021728516], + [6.208890438079834, -4.843575954437256], + [1.7329449653625488, 5.045536041259766], + [-2.1060783863067627, -3.125793695449829], + [2.9108073711395264, -4.142804145812988], + [-3.7232279777526855, -5.001683235168457], + [2.524090528488159, -6.636617660522461], + [7.163482189178467, 8.693719863891602], + [-3.4532532691955566, -5.939090251922607], + [1.8259310722351074, 2.2273972034454346], + [-0.8496586084365845, -0.14465448260307312], + [2.6962268352508545, -6.637477874755859], + [4.787768363952637, 7.900017261505127], + [-4.781713962554932, -6.289886474609375], + [5.926941394805908, -4.049386024475098], + [-6.090250492095947, 7.092825889587402], + [0.9211274981498718, 0.7564373016357422], + [-2.689802408218384, -5.026350021362305], + [-5.643444538116455, -2.138223886489868], + [0.6103988289833069, -1.289277195930481], + [5.256652355194092, -0.6682001352310181], + [-4.038210391998291, -6.015071868896484], + [-6.820930004119873, -0.37648630142211914], + [0.1078750416636467, 9.613468170166016], + [-0.9898019433021545, -3.250194787979126], + [2.273179769515991, 4.457324028015137], + [0.6470533013343811, -1.0655531883239746], + [2.9769911766052246, 5.8812947273254395], + [-2.92997670173645, 5.09630823135376], + [8.639359474182129, -2.3160808086395264], + [-5.615056037902832, -1.54855477809906], + [-6.497226238250732, 7.80354118347168], + [8.48750114440918, -2.2746148109436035], + [-3.476139783859253, -5.297900199890137], + [3.688361644744873, -3.346421003341675], + [-3.743863344192505, -2.8787102699279785], + [-0.20088058710098267, -1.5294169187545776], + [-3.9964230060577393, -3.937290668487549], + [-2.3575735092163086, -1.4503220319747925], + [9.453731536865234, -2.461138963699341], + [11.303608894348145, -2.6209628582000732], + [1.7606327533721924, 3.439908266067505], + [-2.9763882160186768, 2.9184677600860596], + [9.595789909362793, -2.4324569702148438], + [-1.8997570276260376, 2.0331006050109863], + [-5.3842453956604, 3.38330340385437], + [6.019285202026367, -2.684295415878296], + [-0.05391008406877518, 13.362565040588379], + [3.4118733406066895, -7.302331447601318], + [7.797699451446533, -2.0959930419921875], + [-1.727217197418213, 2.112926721572876], + [-4.093170166015625, -5.806171894073486], + [-4.393580913543701, -7.515483379364014], + [1.3465297222137451, -7.274123668670654], + [-3.935865879058838, -2.7605998516082764], + [3.0832626819610596, -4.5501604080200195], + [-4.23982572555542, -5.705204963684082], + [0.13839024305343628, 9.654960632324219], + [-6.11821985244751, 7.649531364440918], + [2.913278579711914, -4.169224262237549], + [-0.07299620658159256, 14.10029125213623], + [2.5539681911468506, 3.300685167312622], + [-4.869187355041504, 2.7263083457946777], + [0.06428616493940353, 12.11868667602539], + [5.564768314361572, 6.95465612411499], + [7.544552326202393, -2.4787213802337646], + [-7.006472110748291, 8.266250610351562], + [-7.655913829803467, 0.06042921170592308], + [0.3366357684135437, 9.675235748291016], + [-6.004179000854492, -0.7869506478309631], + [0.12725532054901123, 10.206764221191406], + [3.4152486324310303, -4.143831729888916], + [-3.4782960414886475, -5.540369987487793], + [2.3983967304229736, 5.609591484069824], + [6.20161771774292, 7.7665815353393555], + [-4.274099826812744, -3.6086599826812744], + [0.8052741885185242, -0.5211819410324097], + [-0.02624792605638504, 12.212183952331543], + [6.415475368499756, -5.2730512619018555], + [-2.755892038345337, 1.6160274744033813], + [5.011921405792236, 6.945046901702881], + [-5.231851100921631, -0.950992226600647], + [-4.310248851776123, 3.303333044052124], + [-3.6910603046417236, -4.86888313293457], + [-2.355503559112549, -2.5113751888275146], + [0.7923222184181213, -6.260159969329834], + [-2.0977489948272705, 2.484523057937622], + [-1.0157822370529175, 0.8649802803993225], + [2.5856592655181885, -7.839714527130127], + [3.0093419551849365, -4.151589870452881], + [4.398772716522217, -3.5758795738220215], + [-0.1060459092259407, -1.5306384563446045], + [0.020637385547161102, 8.977633476257324], + [1.1995556354522705, -0.055455151945352554], + [0.1401585340499878, 12.11729907989502], + [6.631514072418213, 8.835567474365234], + [-0.036574192345142365, 9.351051330566406], + [11.491806030273438, -2.5854299068450928], + [-5.098520755767822, 2.658757448196411], + [-5.267856121063232, 5.884530544281006], + [-0.26470503211021423, -1.2950332164764404], + [-2.82315731048584, 4.398525238037109], + [8.417128562927246, -2.3967506885528564], + [-2.6421895027160645, 1.8330167531967163], + [-6.368741512298584, 7.228202819824219], + [9.274516105651855, -2.362259864807129], + [6.904812335968018, 8.533224105834961], + [2.2445993423461914, -8.847675323486328], + [5.865238189697266, 7.730756759643555], + [2.592819929122925, -9.037758827209473], + [-0.008432097733020782, 13.977409362792969], + [8.882271766662598, -2.241738796234131], + [2.423133134841919, 1.5935089588165283], + [3.522658586502075, -8.775814056396484], + [-4.825881481170654, -0.7609133720397949], + [4.853897571563721, 2.03548264503479], + [-0.07258433848619461, 12.934637069702148], + [2.495121717453003, 2.8966667652130127], + [-2.3993465900421143, 1.3051412105560303], + [-3.5132362842559814, -1.9239706993103027], + [8.575264930725098, -2.2570149898529053], + [-0.21291938424110413, -1.4647022485733032], + [0.8884375095367432, 1.6571711301803589], + [6.150754928588867, 7.916216850280762], + [2.5929601192474365, -3.06665301322937], + [2.53340482711792, -3.618415594100952], + [-1.2957786321640015, 1.5000865459442139], + [5.825168132781982, -6.348397731781006], + [4.978574275970459, 6.631888389587402], + [3.890928268432617, 1.805888295173645], + [-4.530897617340088, -6.779346466064453], + [-3.592543363571167, -3.134470224380493], + [-2.5628137588500977, 0.3686707019805908], + [-4.23335599899292, 3.498093366622925], + [0.25262290239334106, 11.273346900939941], + [-2.3258755207061768, 2.089818000793457], + [3.228344678878784, -4.399207592010498], + [2.9925718307495117, -3.867868423461914], + [3.9940693378448486, -3.215151786804199], + [-6.7943434715271, 7.981477737426758], + [3.3124067783355713, -4.725678443908691], + [-3.405552625656128, 4.847040176391602], + [7.756217956542969, -2.0400285720825195], + [2.877474069595337, -3.7489476203918457], + [5.8412184715271, -1.2652305364608765], + [1.2310097217559814, -6.522212505340576], + [-0.07156241685152054, 9.348810195922852], + [7.183505058288574, -2.6637275218963623], + [-3.819002151489258, -6.615382194519043], + [-4.294177532196045, -6.619755744934082], + [-4.567737579345703, 8.198721885681152], + [-6.41448974609375, 5.901605129241943], + [2.015070676803589, 3.9261393547058105], + [-3.866251230239868, -3.815978765487671], + [-4.04655647277832, 6.132468223571777], + [7.26086950302124, 8.711758613586426], + [3.060321569442749, -6.057880401611328], + [-1.964128851890564, -4.238990306854248], + [-3.511964797973633, 5.534607410430908], + [-2.448582887649536, 5.46914005279541], + [-0.3874222934246063, -2.243046998977661], + [-0.023900456726551056, 12.621334075927734], + [6.471094608306885, 8.064990997314453], + [3.358304023742676, -4.202106475830078], + [8.554941177368164, -2.326374053955078], + [7.037164211273193, -1.9392062425613403], + [-2.15873646736145, 2.501246213912964], + [0.013364486396312714, 9.631528854370117], + [3.815896987915039, 6.228944778442383], + [8.154349327087402, -2.1902236938476562], + [0.13253462314605713, 9.740156173706055], + [-4.927671909332275, -1.4927505254745483], + [-0.579376757144928, -2.2358970642089844], + [0.6797099113464355, -5.201711177825928], + [4.762253284454346, -2.9952166080474854], + [-4.26897668838501, -6.795675277709961], + [8.95577335357666, -2.278944969177246], + [2.0297157764434814, 5.9259748458862305], + [4.431542873382568, 5.993565559387207], + [3.1508328914642334, -9.119047164916992], + [4.299152851104736, -3.441736936569214], + [6.7042927742004395, 8.51368522644043], + [-5.472027778625488, -1.253202199935913], + [3.955024003982544, -3.144235849380493], + [8.53139591217041, -2.2846717834472656], + [-2.217378616333008, 2.8439300060272217], + [3.4674184322357178, -4.985813617706299], + [-1.6672167778015137, -2.573798894882202], + [10.167280197143555, -2.4907162189483643], + [-3.4398157596588135, -4.577786445617676], + [-3.6357839107513428, -6.526678085327148], + [6.931649684906006, -2.600494623184204], + [-4.9514384269714355, 4.286632537841797], + [-1.265263319015503, 1.7068363428115845], + [-5.25261926651001, -2.5003883838653564], + [-0.7830842733383179, -1.571042537689209], + [-0.4238350987434387, 0.0943530946969986], + [5.350898742675781, -4.8459062576293945], + [0.05000477284193039, 9.889378547668457], + [1.9146318435668945, 4.992278099060059], + [-4.547496318817139, -7.162763595581055], + [-0.8690555691719055, -3.292340040206909], + [-1.5284031629562378, -1.273235559463501], + [3.5093023777008057, 1.1631404161453247], + [3.2590296268463135, -9.19947624206543], + [5.653069019317627, -4.691898345947266], + [3.308490753173828, -6.634552955627441], + [3.543076992034912, -5.006019592285156], + [0.09627579897642136, 11.684677124023438], + [-2.872001886367798, -1.793308138847351], + [-1.9826164245605469, 1.892258644104004], + [-5.17909049987793, -0.4818587303161621], + [-4.308716773986816, -1.7531179189682007], + [6.486513137817383, -5.6375732421875], + [6.659616947174072, -2.4950315952301025], + [8.72716236114502, -2.3340647220611572], + [-2.3714747428894043, -2.841295003890991], + [2.243398904800415, -8.049116134643555], + [9.9627046585083, -2.56229567527771], + [1.792872667312622, -7.492554187774658], + [6.621760845184326, -1.4794977903366089], + [3.2756478786468506, -7.072218894958496], + [3.1048357486724854, -4.832588195800781], + [2.154151678085327, 1.5547497272491455], + [-2.868394613265991, -4.987579822540283], + [7.663371562957764, -2.5489261150360107], + [1.2566581964492798, 1.7203773260116577], + [4.840909957885742, -2.5268988609313965], + [8.33216381072998, -2.229259729385376], + [-0.017367787659168243, 12.72999382019043], + [-5.250288963317871, -2.6739699840545654], + [0.10254745930433273, 11.829107284545898], + [0.17863816022872925, 10.660091400146484], + [-0.3733017146587372, -2.1866493225097656], + [0.09196256846189499, 9.34982681274414], + [-1.5954210758209229, -2.366945743560791], + [4.949796199798584, -4.657567024230957], + [8.519658088684082, -2.285170793533325], + [1.0139938592910767, -4.89095401763916], + [2.989788293838501, -7.506994247436523], + [4.287092685699463, 6.2537970542907715], + [5.7883148193359375, -2.6517446041107178], + [-2.881338596343994, -4.847718238830566], + [8.115409851074219, -2.112689256668091], + [-4.053802013397217, 4.412792682647705], + [-4.586613655090332, -2.6069769859313965], + [0.8946701884269714, -0.1390899419784546], + [4.066587924957275, 1.7581329345703125], + [-4.095742702484131, -6.214853286743164], + [-6.199127674102783, 1.1004217863082886], + [-5.744447231292725, -1.2818588018417358], + [5.25070333480835, -1.292173981666565], + [-2.2101516723632812, -3.8551762104034424], + [-0.6297101378440857, 5.515135765075684], + [4.188494682312012, -7.601329326629639], + [-0.2339479625225067, -1.7379292249679565], + [1.5702426433563232, 5.116162300109863], + [-2.1158220767974854, 0.050541575998067856], + [4.007208347320557, 2.007495880126953], + [-2.266030788421631, 3.031355857849121], + [-4.1848015785217285, -5.441947937011719], + [4.2977423667907715, -5.695748329162598], + [7.26125955581665, 8.884546279907227], + [-4.596519947052002, 3.461995840072632], + [-3.2941088676452637, -4.594281196594238], + [-7.592751979827881, -1.098817229270935], + [-5.418868541717529, 4.297700881958008], + [-4.478216648101807, -7.408571243286133], + [1.1229169368743896, -7.097598075866699], + [-3.886697769165039, -1.7423056364059448], + [2.2732198238372803, 0.3846791684627533], + [9.622527122497559, -2.3452818393707275], + [3.7072954177856445, -3.5607378482818604], + [5.626404285430908, -1.2233415842056274], + [3.9383304119110107, -3.639566659927368], + [-2.344991445541382, 2.312006711959839], + [-2.469226598739624, 2.2980942726135254], + [-0.03811139613389969, 13.016745567321777], + [0.6132099032402039, -1.0693845748901367], + [5.929004669189453, -2.589599847793579], + [7.35209321975708, 8.752019882202148], + [-2.255568504333496, -3.507922410964966], + [3.890634298324585, -7.980129241943359], + [10.358824729919434, -2.431720733642578], + [-4.390583515167236, -1.1748474836349487], + [-3.099039316177368, -5.053979873657227], + [3.868507146835327, -2.8618884086608887], + [-0.13758909702301025, -2.643611431121826], + [2.8389651775360107, 4.242167949676514], + [-0.004004426300525665, 12.401871681213379], + [2.254258155822754, -2.309807538986206], + [1.242993712425232, -7.413015365600586], + [5.796477794647217, 7.403064250946045], + [10.317811965942383, -2.4040396213531494], + [2.3277812004089355, -8.763904571533203], + [8.204666137695312, -2.3462252616882324], + [-2.3094465732574463, -4.119723796844482], + [-5.2219462394714355, -3.1446430683135986], + [3.26035475730896, -4.045990943908691], + [4.046761512756348, -8.897428512573242], + [0.12250011414289474, 9.928779602050781], + [-5.0390143394470215, -7.287387847900391], + [-0.012331672012805939, 13.10505485534668], + [-4.651762962341309, -1.1545552015304565], + [3.299759864807129, -4.520331382751465], + [-2.5189642906188965, 1.7484980821609497], + [-3.4747512340545654, -2.8914425373077393], + [0.06162922829389572, 12.180307388305664], + [4.596803665161133, -4.32009220123291], + [-4.985776901245117, -4.431098461151123], + [4.810925483703613, -3.6083121299743652], + [-2.4399173259735107, -4.267634868621826], + [3.211275339126587, -3.3769257068634033], + [9.447535514831543, -2.3351964950561523], + [-2.5457160472869873, -2.8364007472991943], + [9.246461868286133, -2.3634676933288574], + [-4.260448932647705, -0.45000720024108887], + [6.591735363006592, -2.8525888919830322], + [4.128285884857178, 6.343253135681152], + [2.9955732822418213, -4.26055908203125], + [2.1369264125823975, 3.7134830951690674], + [2.676258087158203, -3.073647975921631], + [-2.0637850761413574, 2.3479480743408203], + [-4.66982364654541, 4.506885528564453], + [-3.1965885162353516, 6.5046234130859375], + [-4.690286636352539, -1.3078960180282593], + [-6.925108432769775, 8.14462947845459], + [7.5968918800354, -3.7569656372070312], + [2.4862453937530518, 1.8676358461380005], + [-3.778475046157837, -2.5471532344818115], + [3.4044792652130127, -5.247669219970703], + [3.979849100112915, 1.7806884050369263], + [-5.785811901092529, -1.2095940113067627], + [1.0319511890411377, -6.106971740722656], + [5.70491361618042, -2.9739201068878174], + [5.012522220611572, -3.30285382270813], + [0.5409060120582581, -0.9284430742263794], + [4.310902118682861, 6.645320415496826], + [-2.140170097351074, -3.859164237976074], + [5.430565357208252, 6.972713947296143], + [1.9972126483917236, 6.001296043395996], + [-6.494602680206299, 7.175419807434082], + [3.5539631843566895, -5.028585433959961], + [-4.522499084472656, -7.0943803787231445], + [1.607439637184143, 1.5457061529159546], + [-3.0745162963867188, 2.1350135803222656], + [3.0822722911834717, -4.2713799476623535], + [-2.3775625228881836, 0.5427743792533875], + [-3.3120157718658447, -3.2931551933288574], + [4.0630202293396, 6.45786714553833], + [3.8250038623809814, -3.4279191493988037], + [-4.342483997344971, -3.247563123703003], + [0.00806313008069992, 12.405633926391602], + [3.0434226989746094, -3.358118772506714], + [2.2889864444732666, 1.4775534868240356], + [3.4584038257598877, -3.1971349716186523], + [-2.136209726333618, 2.3892624378204346], + [2.6868534088134766, -3.7398693561553955], + [-4.3338823318481445, -2.02358341217041], + [8.661433219909668, -2.232028007507324], + [4.207021713256836, -3.9210195541381836], + [2.2057907581329346, 4.335319519042969], + [1.7785062789916992, -7.875064849853516], + [-1.8117328882217407, 0.26496461033821106], + [0.17155468463897705, 11.143817901611328], + [-5.752633571624756, 7.709293842315674], + [-4.388682842254639, -1.6791380643844604], + [-0.013159461319446564, 12.39311408996582], + [-5.377506732940674, -1.5309840440750122], + [8.479901313781738, -2.3339266777038574], + [6.246171951293945, -3.1191208362579346], + [2.7751424312591553, -4.002141952514648], + [-2.3391571044921875, 2.904982805252075], + [0.046511225402355194, 9.37588882446289], + [3.4105920791625977, 1.6002939939498901], + [-2.8762404918670654, -4.541214466094971], + [1.9328646659851074, 6.253934860229492], + [0.7395147085189819, -6.292967796325684], + [4.4721455574035645, 1.8579717874526978], + [1.6784878969192505, 5.684385299682617], + [2.8814849853515625, -6.436684608459473], + [0.5349836945533752, -0.9911532402038574], + [3.2287509441375732, -4.753830909729004], + [-2.365030527114868, 6.507474899291992], + [-2.5913188457489014, 2.088712215423584], + [-5.574473857879639, 5.0851149559021], + [1.9320411682128906, 4.340751647949219], + [-4.1967082023620605, 4.533926963806152], + [4.537603855133057, -2.8959786891937256], + [-4.4327263832092285, 5.496184349060059], + [1.0920484066009521, -7.106961250305176], + [5.47064733505249, -0.9867895245552063], + [-2.246609926223755, 2.5206713676452637], + [3.227870225906372, -6.505491256713867], + [-5.13031530380249, -3.3227856159210205], + [-6.949073314666748, 7.770249366760254], + [-0.9322246313095093, -4.317570686340332], + [-2.923719644546509, 4.333924770355225], + [6.306148052215576, 7.819782257080078], + [3.598320245742798, -3.8494679927825928], + [0.6821289658546448, -0.8750689625740051], + [-2.040219306945801, 6.2703680992126465], + [4.2631025314331055, -1.2518025636672974], + [7.660867691040039, -1.935636043548584], + [8.84009075164795, -2.281641721725464], + [2.9857094287872314, -4.088055610656738], + [2.9737775325775146, 6.684778690338135], + [3.0620203018188477, -2.1801369190216064], + [-1.441738486289978, 0.45740216970443726], + [3.2889773845672607, -3.3884434700012207], + [2.1653690338134766, -6.625055313110352], + [-6.582211494445801, 7.090957164764404], + [-4.441143035888672, -6.216819763183594], + [3.949119806289673, 1.286352276802063], + [2.9924328327178955, -4.286349773406982], + [-2.594841718673706, 1.4072797298431396], + [-1.4872106313705444, -3.1706063747406006], + [4.553250789642334, -3.452014923095703], + [-2.1395764350891113, 2.3807177543640137], + [-5.353414535522461, 6.171648025512695], + [-4.7849907875061035, 4.5428853034973145], + [-2.304150342941284, -4.158445358276367], + [4.120881080627441, -3.83288311958313], + [7.401519298553467, -1.6633130311965942], + [7.2937331199646, -2.614873170852661], + [3.738389730453491, -0.9187315702438354], + [-1.7055981159210205, 0.49073857069015503], + [-2.449303150177002, -4.951826095581055], + [0.24936974048614502, 11.773406028747559], + [-4.593842506408691, -2.4822773933410645], + [-3.9060380458831787, -2.844597339630127], + [1.3630530834197998, -0.7662113308906555], + [3.3527016639709473, 0.9133639335632324], + [-3.045752763748169, -5.26047420501709], + [2.7798125743865967, -8.512434959411621], + [-3.3034040927886963, 3.5443809032440186], + [-5.477410316467285, 6.30921745300293], + [-2.3129260540008545, -0.08163058757781982], + [-0.16864103078842163, 0.660814642906189], + [-3.5724589824676514, -3.004410982131958], + [1.8794190883636475, -7.477998733520508], + [-4.365763187408447, -6.879462242126465], + [0.8726159334182739, 0.7847290635108948], + [-3.361175775527954, -1.4494537115097046], + [5.083261966705322, -2.13976788520813], + [-6.370034694671631, 8.189926147460938], + [-5.9892144203186035, -1.0677130222320557], + [-4.76646089553833, -7.462166786193848], + [-3.4218833446502686, -6.028203964233398], + [1.6529529094696045, 0.7093390226364136], + [-6.938438892364502, 8.231719970703125], + [-2.7391910552978516, 1.426539421081543], + [-2.403773069381714, 2.0133228302001953], + [2.4124245643615723, -7.226929664611816], + [0.3737197518348694, 11.322244644165039], + [8.602553367614746, -2.590527296066284], + [-4.861785411834717, 4.325590133666992], + [-4.452298164367676, -7.385957717895508], + [0.3368942141532898, 10.50611686706543], + [3.5446369647979736, -8.317092895507812], + [0.668219268321991, -0.7726507186889648], + [1.1974098682403564, -3.998429536819458], + [2.0049281120300293, 4.122149467468262], + [4.36483907699585, 1.8952667713165283], + [-2.0787465572357178, -3.9239084720611572], + [2.455519914627075, 5.636344909667969], + [-3.2535560131073, -5.045116424560547], + [0.20595628023147583, 10.623926162719727], + [3.0854177474975586, 1.4611046314239502], + [-2.2646777629852295, 2.706590414047241], + [-4.7713189125061035, -3.700498104095459], + [3.7130002975463867, -8.11707592010498], + [8.498723030090332, -2.341468334197998], + [4.388240337371826, -3.1966254711151123], + [2.24928879737854, -8.80445384979248], + [3.05410099029541, -3.3634841442108154], + [0.03442063182592392, -1.3201175928115845], + [-4.160440921783447, -5.321274757385254], + [-3.843238592147827, -1.6081169843673706], + [-6.368152141571045, 7.406204700469971], + [-4.5184550285339355, -6.883625030517578], + [3.493039131164551, 5.355730056762695], + [-3.6291048526763916, -4.666501045227051], + [0.07590990513563156, 9.938931465148926], + [2.612419366836548, 0.10710300505161285], + [1.2494375705718994, 0.0038630925118923187], + [-1.1213088035583496, -3.0377438068389893], + [8.504903793334961, -2.336099863052368], + [2.2592856884002686, -2.7551839351654053], + [6.433279514312744, 7.795973777770996], + [2.047283411026001, 4.011894226074219], + [-6.905294418334961, -0.8227618336677551], + [-3.75329852104187, -5.607991695404053], + [3.165562391281128, 4.726851940155029], + [4.242807865142822, -6.121852874755859], + [8.922640800476074, -2.4915592670440674], + [0.409659206867218, 11.366232872009277], + [1.7812626361846924, -8.105905532836914], + [-5.271292209625244, 3.7205820083618164], + [3.4163575172424316, -3.583045244216919], + [-3.525161027908325, 3.640861988067627], + [-3.4038026332855225, -2.1357812881469727], + [2.9372942447662354, -2.9635775089263916], + [-3.3933537006378174, 6.231881141662598], + [4.41215181350708, 5.704890251159668], + [-2.4482197761535645, -4.338249206542969], + [3.098600149154663, -4.3770904541015625], + [6.7459492683410645, 8.683914184570312], + [4.018385887145996, -3.671818971633911], + [3.151906728744507, -5.757956027984619], + [-7.011228084564209, 2.1613447666168213], + [-2.0447745323181152, 2.397455930709839], + [4.037673473358154, 5.329043388366699], + [6.549768924713135, -1.512595772743225], + [5.544897556304932, -3.2295429706573486], + [0.4054112434387207, 10.932347297668457], + [-3.546830654144287, -5.778107643127441], + [0.18995338678359985, 11.379485130310059], + [3.6459734439849854, -3.433138608932495], + [3.5977702140808105, -4.201103210449219], + [3.0593068599700928, -4.59725284576416], + [2.97672176361084, -4.247493743896484], + [2.249405860900879, -4.906140327453613], + [-3.594935894012451, -0.30856889486312866], + [-2.1709630489349365, 2.318312644958496], + [-2.9377646446228027, -3.2739267349243164], + [-2.721416711807251, -2.4092838764190674], + [3.3488576412200928, -3.588534116744995], + [5.442440986633301, -0.9928625822067261], + [3.2876780033111572, -5.9883809089660645], + [-2.6834990978240967, 1.1503463983535767], + [0.056087426841259, 11.792431831359863], + [-4.412787914276123, -7.205099582672119], + [-7.614441394805908, 0.2402031421661377], + [-1.7658239603042603, -3.3164303302764893], + [-6.367746829986572, -0.4263375997543335], + [-5.70432186126709, 8.34239387512207], + [2.520681619644165, -6.299136161804199], + [-3.0431129932403564, -4.417226314544678], + [-5.094223976135254, -7.534647464752197], + [-1.064867377281189, 0.26197800040245056], + [3.350048303604126, -8.174064636230469], + [3.4769318103790283, 1.086769700050354], + [-1.5887808799743652, 4.070657730102539], + [-5.517725944519043, 5.944293975830078], + [6.124850273132324, -1.251020073890686], + [-5.205790996551514, 6.053081512451172], + [2.06583309173584, 4.575380802154541], + [-2.163700819015503, 2.3521511554718018], + [0.05223887413740158, 13.030035018920898], + [1.4260036945343018, 5.097687721252441], + [-6.796023845672607, 8.046594619750977], + [0.4049640893936157, 1.4566248655319214], + [1.5707803964614868, -0.2140420377254486], + [3.460336208343506, -7.600462436676025], + [2.0799036026000977, 2.085737466812134], + [-3.4428231716156006, -0.46278953552246094], + [-1.915977120399475, 2.406111240386963], + [0.13702571392059326, 9.492725372314453], + [8.487408638000488, -2.3095314502716064], + [6.431161403656006, -5.407825946807861], + [9.167411804199219, -2.3574678897857666], + [5.790926933288574, -3.138052225112915], + [-1.8280729055404663, 1.8199095726013184], + [-1.080532193183899, 10.373150825500488], + [-4.850132465362549, -6.117930889129639], + [-4.253849029541016, 5.27557373046875], + [-2.27435302734375, -3.2175776958465576], + [6.7863850593566895, -1.750555396080017], + [-3.918149948120117, 2.952218770980835], + [2.7712552547454834, -3.7796878814697266], + [2.2231578826904297, 5.548853874206543], + [3.0334386825561523, -4.428854942321777], + [-5.403527736663818, -1.229026436805725], + [-3.8630259037017822, 4.245046615600586], + [2.283641815185547, 4.843548774719238], + [-4.216610431671143, -7.110817909240723], + [6.09730863571167, 7.404235363006592], + [-1.9951260089874268, -4.232924461364746], + [8.352269172668457, -2.28019380569458], + [-3.3631398677825928, -0.31767815351486206], + [0.2652081251144409, 11.280174255371094], + [2.1588938236236572, -8.300472259521484], + [-1.2930618524551392, 1.4470323324203491], + [-1.0435234308242798, -3.687361001968384], + [1.9834706783294678, 5.567792892456055], + [-5.0257744789123535, -0.8001455068588257], + [1.1618833541870117, -7.003166675567627], + [-1.925646185874939, 1.9768718481063843], + [8.931739807128906, -2.4903767108917236], + [-0.6784016489982605, -2.787616014480591], + [-6.8809051513671875, 0.04012071713805199], + [1.552384376525879, -2.9147984981536865], + [5.896381378173828, 7.968780517578125], + [-2.4182236194610596, 2.005582332611084], + [5.001104831695557, 7.024789333343506], + [-4.84108304977417, 5.442293167114258], + [4.6311259269714355, -3.540940761566162], + [2.6112842559814453, -6.37357234954834], + [4.548479080200195, -4.050437927246094], + [4.719608783721924, 6.955731391906738], + [-3.581263542175293, -2.5730767250061035], + [1.139163851737976, -7.2811431884765625], + [0.22657960653305054, 11.13492202758789], + [2.7971301078796387, -2.6743252277374268], + [-4.294375896453857, -7.043657302856445], + [-0.04445696622133255, 9.567319869995117], + [5.230687618255615, -4.773610591888428], + [4.328526973724365, 0.31059589982032776], + [2.8240790367126465, -3.951199769973755], + [0.6345834732055664, -0.8054205179214478], + [-3.21333909034729, -5.352472305297852], + [7.710183620452881, -2.1031432151794434], + [-6.219533443450928, 0.5095316767692566], + [0.37193310260772705, 10.804032325744629], + [-4.369993686676025, 5.403912544250488], + [-2.838885545730591, -1.8721272945404053], + [1.5004931688308716, -0.12644919753074646], + [3.064722776412964, 1.5142632722854614], + [-4.177433013916016, 4.360276222229004], + [1.6636110544204712, -0.02318938449025154], + [0.3159615099430084, -0.8333920836448669], + [5.441257476806641, -4.530524730682373], + [-0.0377846285700798, -1.5266085863113403], + [4.23444128036499, -6.5523905754089355], + [-5.542056560516357, -0.3748263120651245], + [9.852341651916504, -2.4883854389190674], + [-1.7846565246582031, 2.6620590686798096], + [2.2247509956359863, -7.705801010131836], + [3.835780382156372, 0.9378836750984192], + [3.1295323371887207, 1.2504552602767944], + [3.157994270324707, 6.007989883422852], + [-1.044701099395752, 1.8911477327346802], + [7.394602298736572, -3.641801357269287], + [9.935542106628418, -2.3750579357147217], + [4.097998142242432, -3.7219183444976807], + [3.6582391262054443, -6.172712802886963], + [4.30891227722168, -5.772224426269531], + [-2.0774333477020264, -3.3223724365234375], + [-2.555756092071533, 1.6107193231582642], + [-7.767127513885498, -0.2254241704940796], + [6.068786144256592, -1.3737794160842896], + [-2.414874315261841, -4.473362922668457], + [0.07072567194700241, 11.72221851348877], + [4.918834686279297, -1.5913729667663574], + [4.293396472930908, 1.9021855592727661], + [1.62320876121521, 5.258836269378662], + [2.12032151222229, -7.060070514678955], + [2.765831232070923, -3.857814311981201], + [9.932000160217285, -2.4758803844451904], + [-0.13142305612564087, 9.621843338012695], + [8.3558931350708, -2.285578966140747], + [3.1463420391082764, -3.16448712348938], + [3.6452558040618896, -3.716063976287842], + [8.865930557250977, -2.3532917499542236], + [3.42964768409729, -4.553979396820068], + [0.06446843594312668, 11.857477188110352], + [8.184090614318848, -2.374180555343628], + [2.532327651977539, -7.450465202331543], + [-5.3734259605407715, -0.8453001976013184], + [-4.825643062591553, -2.9146664142608643], + [4.088379383087158, -3.499053478240967], + [-2.631047487258911, 0.10033094882965088], + [-4.236940383911133, -6.688920974731445], + [5.717716693878174, -4.771723747253418], + [-0.22604027390480042, -1.6652942895889282], + [-0.029555507004261017, 14.070343017578125], + [-4.07866907119751, 2.644617795944214], + [7.907962322235107, -2.483039379119873], + [3.1277129650115967, 2.6970040798187256], + [4.046169281005859, 5.524724006652832], + [-4.278695583343506, 4.6739349365234375], + [-5.294199466705322, -3.9429399967193604], + [2.7527077198028564, -9.046218872070312], + [0.9356631636619568, -0.511589527130127], + [2.318688154220581, -8.752401351928711], + [2.217381238937378, -8.98790168762207], + [-2.31289005279541, 2.3404598236083984], + [8.610989570617676, -2.3558387756347656], + [6.5489420890808105, -1.2206889390945435], + [9.243136405944824, -2.4143874645233154], + [-2.851738452911377, 2.091069221496582], + [-2.806654930114746, -3.625394582748413], + [-4.044029235839844, -3.5907397270202637], + [2.556741952896118, -3.7630112171173096], + [3.1156651973724365, -0.05185939744114876], + [4.123365879058838, -2.884758710861206], + [-6.443527698516846, 3.8712515830993652], + [3.9523050785064697, 6.398837089538574], + [-5.516351222991943, -3.6959142684936523], + [-4.698480129241943, -0.4247701168060303], + [-6.464199066162109, 7.143714427947998], + [4.222517013549805, -3.383358955383301], + [8.097146987915039, -2.3057188987731934], + [-1.1024565696716309, 1.8245131969451904], + [6.144615650177002, 7.703482151031494], + [3.7020626068115234, -5.4847822189331055], + [0.11130080372095108, -1.353354573249817], + [-4.435568332672119, -3.218128204345703], + [8.437917709350586, -2.298444986343384], + [-4.976101398468018, 3.964625597000122], + [-0.02534056454896927, 9.256275177001953], + [4.621140003204346, -6.0524163246154785], + [2.866579294204712, -4.02012300491333], + [0.9931369423866272, 4.638097763061523], + [6.347250461578369, -1.9157899618148804], + [9.095932006835938, -2.4394454956054688], + [2.716949701309204, -6.689895153045654], + [-2.2231040000915527, 2.4970784187316895], + [-4.791522026062012, -7.164430618286133], + [0.4096234440803528, 10.368884086608887], + [-6.150854587554932, 0.7162383794784546], + [2.840083599090576, 4.232059478759766], + [0.09818797558546066, 10.85360336303711], + [-5.049437522888184, -0.14810717105865479], + [5.63562536239624, -5.273296356201172], + [2.3609297275543213, 3.6378581523895264], + [-4.44612455368042, -5.782801628112793], + [2.5620908737182617, 5.709155082702637], + [-7.1030731201171875, 8.328892707824707], + [10.218035697937012, -2.4703896045684814], + [-4.122272491455078, -6.326834678649902], + [3.773646593093872, 1.5559433698654175], + [-5.073437690734863, 4.987624168395996], + [8.293486595153809, -2.3416740894317627], + [3.475497007369995, -6.819638729095459], + [-2.064140558242798, 2.3821310997009277], + [-3.3496816158294678, -5.376087665557861], + [-5.300836563110352, -3.55712890625], + [2.2718098163604736, 5.663129806518555], + [-3.4011728763580322, 5.190151214599609], + [3.731886148452759, 6.513705253601074], + [-2.179297685623169, 2.0388693809509277], + [4.117289066314697, 1.487152099609375], + [4.387288570404053, 5.816657066345215], + [-4.1037917137146, -5.825106620788574], + [-4.543335914611816, -5.2373552322387695], + [2.3182690143585205, -7.100037097930908], + [8.139861106872559, -2.227541446685791], + [-5.732157230377197, 5.8284173011779785], + [3.632864236831665, -7.7380475997924805], + [3.4977712631225586, -2.66678786277771], + [4.6150078773498535, 6.4954328536987305], + [0.09643816202878952, 9.833845138549805], + [-4.62667989730835, 7.488940238952637], + [0.9997373223304749, -7.053377151489258], + [2.3825390338897705, 5.894369602203369], + [-1.6370348930358887, -3.505580186843872], + [3.8002984523773193, -6.599002361297607], + [-5.25120210647583, 4.469601154327393], + [2.9777474403381348, 0.5077450275421143], + [-6.73970890045166, 8.321779251098633], + [0.2666606307029724, 9.690044403076172], + [2.495424509048462, -3.8231117725372314], + [8.402351379394531, -2.3477256298065186], + [3.489651679992676, -4.012408256530762], + [-6.640267372131348, 6.567339897155762], + [6.168961524963379, 7.923406600952148], + [5.768657207489014, 7.657029151916504], + [8.106839179992676, -3.1682329177856445], + [1.849406123161316, -5.627465724945068], + [-7.09232759475708, -0.10457539558410645], + [-1.0286917686462402, 9.614227294921875], + [-2.2258965969085693, -1.9087966680526733], + [-2.2359087467193604, 2.4517693519592285], + [-2.1342477798461914, 2.626873016357422], + [8.364718437194824, -2.599877119064331], + [4.1919708251953125, -8.465566635131836], + [-2.1668763160705566, -3.486328363418579], + [6.531053066253662, 8.34479808807373], + [3.316176176071167, -0.08287237584590912], + [-3.7404074668884277, -1.1294772624969482], + [3.646479845046997, 1.7695420980453491], + [-2.465120315551758, -3.756275177001953], + [2.04925537109375, -6.886825084686279], + [2.5369603633880615, -3.542651891708374], + [2.1985161304473877, 5.572741508483887], + [4.991374492645264, -5.101975917816162], + [-0.29971635341644287, 0.8972456455230713], + [1.9712836742401123, 1.5724400281906128], + [3.03887939453125, -8.355083465576172], + [3.733361005783081, -5.4407196044921875], + [3.113373279571533, -4.521384239196777], + [-0.8174321055412292, -1.070255160331726], + [-2.289569616317749, 1.9751347303390503], + [4.053287982940674, -7.51504373550415], + [-2.2317187786102295, 2.371669292449951], + [1.1275559663772583, -0.4916672706604004], + [6.894798755645752, -1.4322673082351685], + [5.08037805557251, -1.561550259590149], + [-4.288182735443115, -3.0982658863067627], + [0.7043225169181824, 10.16170883178711], + [5.18380880355835, -1.148767352104187], + [-2.5690267086029053, 1.5540106296539307], + [3.101264238357544, -8.209429740905762], + [2.8090789318084717, 5.079104900360107], + [7.472527503967285, -2.236140012741089], + [0.234388530254364, 10.775772094726562], + [3.250521421432495, 1.470132827758789], + [3.0559372901916504, -4.332780838012695], + [-2.108039140701294, 2.591989040374756], + [5.911968231201172, -3.402988910675049], + [-4.627527713775635, -5.7868452072143555], + [0.07222991436719894, 13.072427749633789], + [8.70760440826416, -2.384730339050293], + [8.108111381530762, 9.64091968536377], + [8.06308364868164, -2.1134254932403564], + [0.1886412501335144, 10.36827278137207], + [1.9392383098602295, -7.677032470703125], + [3.664029598236084, -5.9627180099487305], + [3.6578471660614014, 1.4749622344970703], + [-1.5998990535736084, 1.8521534204483032], + [8.436266899108887, -2.399338960647583], + [-5.38212251663208, -0.7498363256454468], + [5.812719821929932, -3.1592085361480713], + [0.9955351948738098, -0.5199021100997925], + [0.6153186559677124, -0.8925924301147461], + [5.132598400115967, -5.1475911140441895], + [-0.9697645902633667, -3.4006614685058594], + [3.33833384513855, -7.935647964477539], + [6.829215049743652, -1.5735938549041748], + [0.25125962495803833, 10.823060989379883], + [0.16585993766784668, 10.414913177490234], + [2.902869462966919, -9.899775505065918], + [-5.1084980964660645, -2.2796361446380615], + [3.3336021900177, -3.275784492492676], + [-3.5596344470977783, -3.117218255996704], + [3.6347739696502686, -2.8810508251190186], + [3.6236045360565186, 1.5163934230804443], + [-3.0177018642425537, -5.456920623779297], + [-4.991143226623535, -3.3773014545440674], + [-2.4756860733032227, -3.0460808277130127], + [-2.241844892501831, 2.1909074783325195], + [0.44200384616851807, 1.9783281087875366], + [-4.528722286224365, -3.515974998474121], + [-0.7964423298835754, 0.8908424973487854], + [9.343403816223145, -2.3783342838287354], + [-6.206991672515869, 7.198624134063721], + [0.08611869066953659, 12.099830627441406], + [3.45607328414917, -5.871563911437988], + [6.203249931335449, -1.3595553636550903], + [7.765867710113525, -2.1873390674591064], + [4.056148052215576, 1.8167824745178223], + [-4.533360481262207, -0.470287561416626], + [4.58479642868042, -3.5644843578338623], + [3.7595441341400146, -8.454524040222168], + [-0.5434129238128662, -1.1806159019470215], + [-3.6179192066192627, -5.244000434875488], + [3.3067007064819336, -6.265140533447266], + [2.421290874481201, 2.454615831375122], + [0.0006760284304618835, 12.753663063049316], + [0.4945240616798401, -1.221508502960205], + [2.734907388687134, -6.188898086547852], + [3.149005651473999, 4.713287830352783], + [-7.639099597930908, -0.9856333136558533], + [2.8526737689971924, -6.953286170959473], + [-3.2731168270111084, -4.218741416931152], + [5.174755573272705, -1.1841644048690796], + [-4.42492151260376, -6.074878215789795], + [-7.0418267250061035, -1.0992026329040527], + [8.511500358581543, -2.3287980556488037], + [3.1224262714385986, -4.55516242980957], + [-4.7308759689331055, 5.06914758682251], + [3.207422971725464, -3.9927823543548584], + [2.8193166255950928, -3.9503672122955322], + [5.821456432342529, 7.1384687423706055], + [-3.3224523067474365, 3.9600894451141357], + [8.1238431930542, -2.222907304763794], + [9.443547248840332, -2.326021432876587], + [-4.882198333740234, -3.848099708557129], + [3.279953956604004, -3.474085807800293], + [-2.078691005706787, 2.4474565982818604], + [2.9258580207824707, -2.142472267150879], + [6.359686851501465, -1.4055486917495728], + [-2.790689706802368, -0.5899931788444519], + [1.0751725435256958, -7.273303031921387], + [4.0348334312438965, 1.5792632102966309], + [-2.0731592178344727, 2.5744388103485107], + [-3.6472113132476807, -2.5717432498931885], + [0.26968270540237427, 5.543936729431152], + [2.0881612300872803, 5.839542865753174], + [8.672354698181152, -2.350093126296997], + [3.313187837600708, 1.9505678415298462], + [6.407201766967773, -5.357490539550781], + [-4.192046642303467, -5.820318222045898], + [-2.3388330936431885, 2.179006576538086], + [-0.034353382885456085, 13.384714126586914], + [3.8164682388305664, -7.6746416091918945], + [-4.400452136993408, 5.175805568695068], + [5.598865032196045, 7.504207611083984], + [-4.633880138397217, -7.431297302246094], + [5.431537628173828, -2.9813144207000732], + [2.688941240310669, 1.3874104022979736], + [-0.6243453621864319, -0.005724545568227768], + [4.357779026031494, 1.38375985622406], + [-2.807177782058716, 2.9450180530548096], + [-5.943779468536377, 0.516815185546875], + [1.6919589042663574, 5.276316165924072], + [1.533563494682312, -0.6420556902885437], + [5.714008808135986, -1.2930048704147339], + [2.976858139038086, -4.2155351638793945], + [1.0764278173446655, 5.783323287963867], + [2.885864496231079, -5.097151756286621], + [0.16080421209335327, 11.810323715209961], + [-4.598089694976807, -3.3087735176086426], + [-4.272510528564453, -4.587935447692871], + [3.559884548187256, -7.973451614379883], + [3.0213518142700195, -4.074254989624023], + [3.037978410720825, -3.7279460430145264], + [-4.363119602203369, -6.656954288482666], + [-2.184696674346924, 2.438930034637451], + [-2.3402516841888428, -4.039407730102539], + [2.0730836391448975, 1.5179363489151], + [8.645832061767578, -2.392653703689575], + [-1.2695205211639404, 1.3105442523956299], + [7.465806007385254, -2.618089437484741], + [-0.17639395594596863, -1.5027425289154053], + [2.660057783126831, -8.335275650024414], + [-4.682478904724121, -2.944977283477783], + [0.4331875443458557, -1.2844300270080566], + [0.05800100415945053, -1.720635175704956], + [2.7222530841827393, -2.7378251552581787], + [-4.96856689453125, 5.7864603996276855], + [-4.172762393951416, -5.200369834899902], + [2.3921313285827637, 5.970810413360596], + [-3.531207799911499, -3.5926501750946045], + [-4.308339595794678, -6.832226753234863], + [-2.5994701385498047, -0.9285678863525391], + [3.1336047649383545, 6.516071319580078], + [3.3752825260162354, 4.940667629241943], + [-4.767827987670898, -2.392616033554077], + [-1.066258192062378, -1.8032578229904175], + [4.279051303863525, 1.8789286613464355], + [10.073765754699707, -2.3675456047058105], + [2.5384936332702637, 5.490413665771484], + [-5.568681716918945, 6.163246154785156], + [7.614020824432373, -2.276562452316284], + [-4.3596930503845215, 0.6214219927787781], + [-1.1213977336883545, -2.655402898788452], + [-3.6002871990203857, -3.5390584468841553], + [-4.102697849273682, -6.172281265258789], + [-4.320728302001953, 4.825546741485596], + [0.04176317900419235, -1.338678002357483], + [6.718566417694092, -5.673528671264648], + [2.074977159500122, -8.222248077392578], + [-4.568334579467773, 7.596538066864014], + [-3.938591241836548, -6.369046211242676], + [2.452664613723755, -5.912461280822754], + [-2.3481624126434326, 1.393546223640442], + [-5.089028358459473, -6.585514068603516], + [-3.419420003890991, -3.807894468307495], + [-2.08506441116333, 2.0384159088134766], + [3.5793793201446533, -8.22198486328125], + [-2.9780008792877197, 4.77579402923584], + [-2.0727529525756836, -3.9150593280792236], + [3.210456132888794, 1.2076950073242188], + [2.959653615951538, -9.369552612304688], + [-3.7785842418670654, 4.784055709838867], + [6.489542484283447, -3.820035696029663], + [6.483291149139404, -2.844498634338379], + [3.9442522525787354, -3.4556210041046143], + [-4.498117446899414, 5.7795867919921875], + [6.123127460479736, -1.4110954999923706], + [6.129200458526611, -1.7276928424835205], + [-2.0628504753112793, 2.640056848526001], + [-2.546193838119507, -3.8564679622650146], + [-0.3146793842315674, 1.1559621095657349], + [7.967874050140381, -2.1708972454071045], + [4.303991794586182, -4.56829833984375], + [0.07721012085676193, 11.800159454345703], + [9.820076942443848, -2.3564488887786865], + [-0.20224913954734802, 0.3433822989463806], + [-4.552457332611084, -6.201804161071777], + [3.0215132236480713, -4.330422401428223], + [4.233088970184326, 7.130900859832764], + [-6.744876384735107, 8.353277206420898], + [5.142209529876709, 7.11664342880249], + [10.287577629089355, -2.4454715251922607], + [8.12605094909668, -2.208153247833252], + [8.446226119995117, -2.3290674686431885], + [-8.255075454711914, -0.0009068287909030914], + [-2.356025218963623, 2.309708833694458], + [-3.558443784713745, -5.294185638427734], + [9.18376636505127, -2.303380250930786], + [-2.260239601135254, 2.083249807357788], + [3.432318687438965, -4.41687536239624], + [1.2446832656860352, -6.218334674835205], + [3.898419141769409, -3.734544038772583], + [5.993489742279053, 7.467257022857666], + [7.627231121063232, -2.554805278778076], + [3.7077279090881348, -4.6097869873046875], + [5.787582874298096, 8.00335693359375], + [-1.870812177658081, 2.3012242317199707], + [0.30078017711639404, 8.734971046447754], + [-1.9471960067749023, 2.316045045852661], + [-2.1728451251983643, 2.391847848892212], + [6.335955619812012, -1.2664486169815063], + [5.44028902053833, -5.137719631195068], + [6.564871311187744, -4.46406364440918], + [8.211190223693848, -2.267664909362793], + [2.155275821685791, 2.1309397220611572], + [3.9337594509124756, 7.311127185821533], + [-3.395515203475952, -6.022775650024414], + [3.13619327545166, -4.43479061126709], + [2.8420679569244385, -8.137527465820312], + [-3.144531011581421, -5.174922943115234], + [-2.7740859985351562, 4.102069854736328], + [-4.991624355316162, -1.930424451828003], + [2.0651943683624268, 2.3587276935577393], + [2.995494842529297, -4.1987152099609375], + [0.06539257615804672, -1.7250019311904907], + [2.213070869445801, 5.586199760437012], + [-3.8711960315704346, 3.463181972503662], + [2.328577756881714, -8.180047035217285], + [-2.249145746231079, 2.4012184143066406], + [-2.3514552116394043, 2.0982508659362793], + [-4.527454853057861, 2.619361639022827], + [2.5378193855285645, -8.800601959228516], + [-1.1547390222549438, 1.9423810243606567], + [4.849963188171387, -4.685609817504883], + [6.854384899139404, -3.5343573093414307], + [1.1420857906341553, -0.1552232950925827], + [-6.527848243713379, -0.892261266708374], + [-3.830393075942993, -5.1518707275390625], + [0.1994532346725464, 10.553207397460938], + [2.1943681240081787, 5.179750442504883], + [-2.968959331512451, -1.1274805068969727], + [-0.20023608207702637, -1.7511494159698486], + [4.235415458679199, -3.8663723468780518], + [2.293902635574341, 1.1241763830184937], + [-3.1076128482818604, 5.5326619148254395], + [8.515795707702637, -2.2702035903930664], + [1.6943163871765137, 1.064720869064331], + [-3.6767594814300537, 0.2532959580421448], + [-3.1337687969207764, -1.9273360967636108], + [-6.327260494232178, -0.8078770041465759], + [2.8296945095062256, -9.114450454711914], + [10.683802604675293, -2.4913947582244873], + [-4.780140399932861, -7.4568281173706055], + [4.625542640686035, 6.712603569030762], + [-0.5957447290420532, -1.9901410341262817], + [0.3445779085159302, 3.321136474609375], + [3.558917760848999, -7.929559230804443], + [0.6146801114082336, 11.313343048095703], + [2.062380075454712, -7.6388702392578125], + [-6.5313334465026855, 0.3039737939834595], + [-0.3542367219924927, -1.6726433038711548], + [2.1012203693389893, 4.681753158569336], + [2.3941242694854736, -8.237387657165527], + [-2.4309849739074707, 7.103508472442627], + [4.259115695953369, 0.9129701256752014], + [-1.930588960647583, 2.4149014949798584], + [0.8304049372673035, 6.047303199768066], + [7.125868797302246, 8.554378509521484], + [1.1541314125061035, 5.024753570556641], + [-2.547009229660034, 1.7171980142593384], + [-3.2530059814453125, -4.466228008270264], + [-5.5648274421691895, 4.192805290222168], + [3.932616949081421, 1.6784437894821167], + [-1.0346131324768066, -3.609980821609497], + [6.275322437286377, 8.003223419189453], + [-0.21432876586914062, 3.9679949283599854], + [2.8574655055999756, -3.793043613433838], + [-4.637037754058838, -5.750117301940918], + [-4.12162446975708, -2.562981367111206], + [0.3504565954208374, 5.874848365783691], + [-3.831115961074829, 6.793943405151367], + [0.16678833961486816, 11.149843215942383], + [-5.640735149383545, -2.6698834896087646], + [2.946668863296509, -3.4137930870056152], + [5.826800346374512, 7.417514801025391], + [-5.2961649894714355, -2.9443135261535645], + [8.461214065551758, -2.360119581222534], + [-0.3138831555843353, 0.7455024719238281], + [2.7302167415618896, -5.525656700134277], + [2.7941901683807373, 0.5654696226119995], + [-2.2621238231658936, 2.522893190383911], + [-1.9128957986831665, -0.7093729972839355], + [3.1707093715667725, -3.5772864818573], + [-1.7701581716537476, 1.8205339908599854], + [4.51018762588501, -3.682302713394165], + [2.19562029838562, -0.2862437665462494], + [5.95558500289917, -4.956470489501953], + [-3.947789430618286, -6.599752902984619], + [3.2539780139923096, -7.9861626625061035], + [1.9098118543624878, -7.862700462341309], + [3.4844796657562256, -3.5786070823669434], + [8.725652694702148, -2.6317076683044434], + [-1.2981557846069336, -1.367661714553833], + [1.062428593635559, -6.732705116271973], + [3.122978687286377, -3.466069459915161], + [-5.491899490356445, 6.852909088134766], + [0.03217720240354538, 12.343452453613281], + [1.1921159029006958, 4.65400505065918], + [-4.865259647369385, -6.340404033660889], + [-1.8669929504394531, 2.165226936340332], + [7.4549078941345215, -2.27557635307312], + [3.0657055377960205, -3.35882830619812], + [-0.02919287234544754, 12.93437385559082], + [-0.9231030344963074, -3.40814208984375], + [1.4884791374206543, 4.329995155334473], + [-5.02209997177124, -4.281589508056641], + [0.156413733959198, 10.471412658691406], + [5.483582973480225, 7.722202777862549], + [-2.239565849304199, 2.303586483001709], + [8.335659980773926, -2.339144468307495], + [-1.6385959386825562, 2.3266913890838623], + [-1.9761160612106323, 1.1437623500823975], + [3.6235830783843994, -8.536340713500977], + [-1.5477354526519775, 1.0702972412109375], + [4.042722225189209, 6.730121612548828], + [3.6589744091033936, -3.8661773204803467], + [6.527821063995361, -1.4676812887191772], + [-6.197915077209473, -1.286490797996521], + [-3.091944456100464, 1.7138762474060059], + [2.7826287746429443, -8.647565841674805], + [-3.282684564590454, 4.614117622375488], + [0.5115870237350464, -0.7214838862419128], + [9.647330284118652, -2.4651448726654053], + [-6.3992533683776855, 7.477977752685547], + [-3.4828639030456543, -1.1502758264541626], + [7.3848652839660645, 8.773804664611816], + [1.7397255897521973, 1.6727720499038696], + [0.16730600595474243, 10.433862686157227], + [-1.9886953830718994, 2.5491271018981934], + [2.9833080768585205, -4.262645721435547], + [2.563460350036621, 1.204937219619751], + [-3.6529839038848877, -1.6291393041610718], + [5.682205677032471, 7.354992389678955], + [-5.424264430999756, -0.6371968984603882], + [3.5205142498016357, -3.339346170425415], + [0.14573025703430176, 9.47312068939209], + [3.0089669227600098, -4.222174644470215], + [-5.733489513397217, 7.935378074645996], + [6.701601505279541, -4.395263195037842], + [4.801325798034668, 7.269776344299316], + [2.4637200832366943, 1.2131954431533813], + [1.6877461671829224, -6.643049240112305], + [0.08385591953992844, 11.815261840820312], + [4.618650913238525, -3.772317886352539], + [0.20094192028045654, 10.566020011901855], + [-4.965304851531982, 5.546139717102051], + [-5.318652629852295, -3.245723009109497], + [7.734508037567139, -2.1198747158050537], + [-6.242283344268799, 7.488503932952881], + [0.16616028547286987, 10.417928695678711], + [5.770717144012451, -4.191390514373779], + [4.492434501647949, 6.973384857177734], + [-1.2535467147827148, 1.8989787101745605], + [-6.65090274810791, 7.818070411682129], + [8.050089836120605, -2.1864185333251953], + [7.979246616363525, -2.2624800205230713], + [-3.603586435317993, -6.063888072967529], + [-3.6419389247894287, -3.21883487701416], + [8.831137657165527, -2.384389638900757], + [1.9963397979736328, 5.879219055175781], + [-0.42460641264915466, -1.8149011135101318], + [-3.0093533992767334, -2.7569074630737305], + [-2.660468816757202, -0.40822672843933105], + [0.13831943273544312, 11.760167121887207], + [-4.10435152053833, -6.773252487182617], + [8.62763500213623, -2.3028695583343506], + [-1.7792414426803589, 1.1392450332641602], + [3.1995086669921875, -7.541140079498291], + [-0.08008647710084915, 9.578227996826172], + [-6.965460777282715, 8.31025505065918], + [1.194351077079773, -6.668007850646973], + [0.286010205745697, 10.795907020568848], + [0.1372218132019043, 11.478434562683105], + [4.225785732269287, -3.535470724105835], + [-2.189511775970459, 2.5638773441314697], + [3.4864866733551025, -7.869098663330078], + [0.16982954740524292, 11.97446060180664], + [-4.540485858917236, -6.396457672119141], + [10.34761905670166, -2.48629093170166], + [2.9903454780578613, -2.8499131202697754], + [6.927085876464844, -2.2376902103424072], + [-2.204871654510498, 2.6032803058624268], + [3.602522134780884, 6.200948238372803], + [3.3703548908233643, 0.8576555848121643], + [8.806336402893066, -2.345827102661133], + [2.607027292251587, -9.412771224975586], + [4.7836012840271, -0.9164146184921265], + [5.932279109954834, -2.4292185306549072], + [0.2737131714820862, 11.46831226348877], + [-8.791850090026855, 0.0909649133682251], + [8.062867164611816, 9.489936828613281], + [1.411984920501709, 5.053483963012695], + [-3.0680010318756104, -5.128342151641846], + [-2.6535160541534424, 1.9610222578048706], + [8.418621063232422, -2.2423665523529053], + [2.091130018234253, -7.517277717590332], + [2.0077242851257324, 4.872278213500977], + [4.121726989746094, 7.176506996154785], + [-4.4992265701293945, -6.660578727722168], + [0.021346859633922577, 11.885992050170898], + [3.0580875873565674, -4.244110107421875], + [-0.025258846580982208, 13.185126304626465], + [5.809255123138428, -2.621382474899292], + [4.781260013580322, -2.8946590423583984], + [7.094655990600586, -2.4413888454437256], + [-1.0489617586135864, -3.1242294311523438], + [-2.155324697494507, -4.824018955230713], + [0.24717193841934204, 11.163677215576172], + [-0.744596540927887, -2.4696414470672607], + [3.125976800918579, -7.200816631317139], + [3.7455310821533203, -3.181222915649414], + [-1.9692960977554321, 2.4030535221099854], + [9.767848014831543, -2.3545525074005127], + [0.00862770527601242, 12.785696029663086], + [6.219081878662109, -1.9345663785934448], + [-4.380843162536621, -6.1938934326171875], + [-3.022730588912964, 2.1409783363342285], + [-4.99815034866333, -3.5276038646698], + [-6.394379615783691, -1.1341841220855713], + [3.4500362873077393, -8.246662139892578], + [-1.7296998500823975, 0.716224193572998], + [-3.685702085494995, 6.888293266296387], + [3.0384414196014404, -4.34747314453125], + [2.8520424365997314, -8.762502670288086], + [4.106740474700928, 1.835148811340332], + [-2.5656795501708984, 0.01950502023100853], + [2.7970330715179443, 2.6640567779541016], + [-2.115957260131836, 2.547455072402954], + [8.163524627685547, -2.1856911182403564], + [-2.5713446140289307, 1.8130310773849487], + [5.6654276847839355, -2.9994444847106934], + [-1.5671050548553467, 2.641064405441284], + [4.171610355377197, -3.757267475128174], + [-4.189603328704834, -5.153769493103027], + [1.907928228378296, 4.646069526672363], + [3.8896658420562744, 1.618165135383606], + [-5.089532852172852, -6.200089454650879], + [7.896988391876221, -2.3002283573150635], + [-0.040311820805072784, 9.624835014343262], + [-2.8252129554748535, 5.274912357330322], + [-2.0419201850891113, -4.761428356170654], + [0.8129326701164246, 9.805416107177734], + [1.4157527685165405, 4.1309428215026855], + [-4.482331275939941, -5.529057502746582], + [2.3944742679595947, 0.21757620573043823], + [6.872758865356445, -2.419476270675659], + [-1.1551039218902588, 1.8142067193984985], + [-1.6430859565734863, -2.2177112102508545], + [-4.884711265563965, 5.488065242767334], + [-1.8607525825500488, 2.015268087387085], + [5.857276916503906, -0.895907461643219], + [-4.315217971801758, -2.1932408809661865], + [-2.4307749271392822, 2.732362985610962], + [2.083285331726074, 2.3618414402008057], + [-5.400476932525635, -0.888607382774353], + [2.2339813709259033, 4.151187896728516], + [-3.2109696865081787, -4.184258937835693], + [2.9340813159942627, -4.166810989379883], + [3.3216142654418945, -4.7574872970581055], + [-3.824880838394165, -5.4801926612854], + [0.08226113766431808, 13.187475204467773], + [1.5708496570587158, -7.593198299407959], + [0.2681507170200348, -0.7893811464309692], + [-6.253528118133545, 7.7903642654418945], + [-2.3592121601104736, 2.0078060626983643], + [-0.5507467985153198, -0.8279528617858887], + [9.366570472717285, -2.437565326690674], + [0.5955197215080261, -0.9315866231918335], + [-4.1244611740112305, 3.6700358390808105], + [2.987492561340332, -4.287317276000977], + [-4.511850357055664, 6.0273661613464355], + [0.010406725108623505, -3.443702220916748], + [0.27440953254699707, 11.327351570129395], + [-1.0269427299499512, 0.8737301230430603], + [-5.6052422523498535, -2.617102861404419], + [6.436702251434326, -2.2799041271209717], + [4.348489284515381, -5.3739423751831055], + [-4.026554107666016, 5.513333320617676], + [0.12227766960859299, 10.694263458251953], + [5.917141437530518, 7.904263019561768], + [2.2390363216400146, -7.410184860229492], + [0.07477914541959763, 12.102052688598633], + [-4.460682392120361, -3.6155498027801514], + [8.35314655303955, -2.264169692993164], + [3.2224833965301514, -4.600490570068359], + [4.352499961853027, 6.992511749267578], + [-4.358875751495361, -6.233162879943848], + [2.958928108215332, -3.9866673946380615], + [3.784738302230835, -4.509734153747559], + [3.2505667209625244, -4.827646255493164], + [-6.1864800453186035, -2.171370506286621], + [0.41135311126708984, -2.027177333831787], + [-3.6340219974517822, 3.5475313663482666], + [-5.886898994445801, -2.7525885105133057], + [-4.669842720031738, -1.0690377950668335], + [-5.837823390960693, -2.5415594577789307], + [-0.6035723090171814, 0.951643705368042], + [5.378387451171875, 6.801265716552734], + [10.06063461303711, -2.422959089279175], + [-2.1551513671875, 2.3677918910980225], + [-2.3082220554351807, -2.837800979614258], + [-0.08111638575792313, 9.275405883789062], + [1.4976506233215332, 2.4485039710998535], + [6.28268575668335, 7.781691551208496], + [-5.037015438079834, -0.4310169219970703], + [-2.6125071048736572, 1.8994998931884766], + [3.1952707767486572, -3.7489287853240967], + [-3.814354181289673, -5.719926834106445], + [-5.305087566375732, -2.5262959003448486], + [4.493725299835205, -8.140867233276367], + [2.8146917819976807, -8.362472534179688], + [1.0399093627929688, 0.24380815029144287], + [-3.6473915576934814, 5.744467258453369], + [-2.7674410343170166, 2.818528413772583], + [2.198234796524048, -8.481435775756836], + [1.4545862674713135, -0.09459720551967621], + [-0.07414720207452774, -0.43891817331314087], + [-2.8730905055999756, -3.4500367641448975], + [-1.5439815521240234, -2.8049728870391846], + [-4.046754837036133, 4.158298492431641], + [2.713639974594116, -7.649211883544922], + [6.089816570281982, 7.897931098937988], + [1.982602596282959, 3.0267560482025146], + [0.05437987297773361, 12.890684127807617], + [3.7921149730682373, -5.307733535766602], + [2.7086217403411865, -3.8269312381744385], + [2.617424964904785, -3.8293304443359375], + [5.65878438949585, 7.525094509124756], + [-0.8496422171592712, 6.185634613037109], + [-3.754755973815918, -4.31852912902832], + [-2.534475326538086, -4.3269758224487305], + [-0.0277906134724617, 13.572854995727539], + [1.7583004236221313, -6.5630598068237305], + [-5.7366557121276855, 6.389425277709961], + [5.803175449371338, 7.4996232986450195], + [-2.4608702659606934, 2.1354143619537354], + [5.7542877197265625, 8.042659759521484], + [3.222482442855835, -3.371213674545288], + [0.09024285525083542, 9.623941421508789], + [-3.448322296142578, 5.528514862060547], + [-6.916693210601807, -0.6047108173370361], + [8.920784950256348, -2.3053030967712402], + [8.88713550567627, -2.4335219860076904], + [-2.0160727500915527, 2.466550350189209], + [-5.833481311798096, 5.616581916809082], + [-2.492682695388794, 1.4594346284866333], + [-2.239124059677124, -0.7598402500152588], + [-2.2819771766662598, 2.177785634994507], + [8.474827766418457, -2.2806246280670166], + [-3.7857048511505127, -4.40485954284668], + [0.28171348571777344, 10.8583984375], + [6.383691310882568, 8.126439094543457], + [0.08694326132535934, 12.390511512756348], + [4.196395397186279, -2.9527862071990967], + [-2.0543131828308105, -3.864910364151001], + [-1.918739676475525, 2.3785388469696045], + [-1.2069069147109985, 1.7136906385421753], + [-6.679288864135742, 7.278519630432129], + [-2.184558153152466, 2.696458101272583], + [8.780919075012207, -2.5443127155303955], + [-4.574656009674072, -7.1486711502075195], + [-2.2553956508636475, 1.4139814376831055], + [-3.2894656658172607, -2.6596286296844482], + [2.1017491817474365, 2.0877583026885986], + [-4.275655269622803, -5.429239749908447], + [-0.02667342871427536, -1.2638696432113647], + [-6.322239398956299, -0.9175682067871094], + [3.2457072734832764, 1.8468520641326904], + [3.552675247192383, -3.513469934463501], + [-2.374528408050537, 1.4097294807434082], + [3.500382423400879, -3.530247926712036], + [7.548366546630859, -2.040661573410034], + [0.2036706805229187, 9.205671310424805], + [2.3833253383636475, 5.471284866333008], + [0.7606393098831177, -6.371378421783447], + [-5.088220596313477, -5.510549068450928], + [2.788623809814453, -8.683399200439453], + [0.16802656650543213, 10.49671745300293], + [-4.968413352966309, -1.5851002931594849], + [3.3043935298919678, -7.494171142578125], + [-2.686657667160034, 2.0772454738616943], + [-5.597499370574951, -3.6131293773651123], + [3.043766498565674, -9.13513469696045], + [3.458197832107544, -8.232226371765137], + [2.5032927989959717, -7.659926414489746], + [-2.148392677307129, 2.3034889698028564], + [1.0604465007781982, 5.169360160827637], + [6.092528343200684, 7.909731864929199], + [5.717402458190918, -4.753521919250488], + [0.28186944127082825, -0.7648710012435913], + [-2.1419386863708496, 2.308645725250244], + [6.115549564361572, -3.9476358890533447], + [-4.169951915740967, 4.83696174621582], + [2.4125447273254395, -8.686067581176758], + [-6.964087009429932, 7.6043596267700195], + [8.158005714416504, -2.4718105792999268], + [2.7720608711242676, -4.588634490966797], + [-1.6043015718460083, 2.0012898445129395], + [2.0530405044555664, 3.7061707973480225], + [6.09914493560791, -1.2503604888916016], + [8.133606910705566, -2.4362032413482666], + [3.242058515548706, -6.335189342498779], + [5.0640997886657715, -1.3111666440963745], + [5.867184162139893, -1.6258410215377808], + [3.266289710998535, -3.311708450317383], + [1.7890005111694336, 1.686834692955017], + [3.479395627975464, -4.945104598999023], + [-0.6165879964828491, -0.4663825035095215], + [-4.553194999694824, 5.671978950500488], + [2.958390951156616, -4.127964019775391], + [-3.169189214706421, 7.22668981552124], + [-5.202928066253662, 6.084094047546387], + [-4.80078649520874, -1.8533213138580322], + [-5.212637901306152, 5.191033840179443], + [-2.0748424530029297, -3.31915545463562], + [-3.088308572769165, -3.8918020725250244], + [-3.1909308433532715, 5.5836052894592285], + [4.011886119842529, 1.7423192262649536], + [5.680161952972412, 6.930006980895996], + [8.830526351928711, -2.3320043087005615], + [-2.4207382202148438, 6.3919453620910645], + [-4.0488386154174805, 3.6755340099334717], + [-5.088917255401611, -4.997317314147949], + [1.5337398052215576, -6.526525497436523], + [-5.109910488128662, 5.585578441619873], + [3.118952989578247, 1.4745811223983765], + [-0.08898041397333145, -1.59673011302948], + [5.769011974334717, 8.023158073425293], + [-1.3468880653381348, 1.9603151082992554], + [2.138782024383545, 5.770376205444336], + [0.13336926698684692, 10.231710433959961], + [0.010722450911998749, 13.393917083740234], + [-3.725757360458374, -5.609082221984863], + [0.06893836706876755, 11.425275802612305], + [-4.403690338134766, 4.626181602478027], + [-2.424727201461792, 1.9961141347885132], + [5.524179935455322, 7.260440826416016], + [2.889125108718872, -4.067996501922607], + [2.2259609699249268, 0.9163856506347656], + [-5.094701290130615, -1.2886148691177368], + [2.1719706058502197, -7.621707916259766], + [2.289013147354126, 6.130847454071045], + [-0.48918581008911133, -2.1248648166656494], + [4.229750633239746, -3.309612989425659], + [-6.658685207366943, -2.1217472553253174], + [4.928032398223877, 7.301545143127441], + [-4.536550045013428, -0.43069255352020264], + [0.22791296243667603, 10.978296279907227], + [9.952643394470215, -2.485847234725952], + [0.15015923976898193, 11.12801456451416], + [-0.9211403727531433, 1.5073579549789429], + [11.072091102600098, -2.554591417312622], + [-0.5530933141708374, -2.708662986755371], + [8.559439659118652, -2.280111074447632], + [0.5677385330200195, -5.653763294219971], + [-1.7939844131469727, 1.9046705961227417], + [2.8360965251922607, -5.839319705963135], + [2.6487226486206055, 6.094906806945801], + [5.854034423828125, -4.971478462219238], + [-0.7918887734413147, 1.597599983215332], + [-6.637542247772217, -0.02973330393433571], + [6.625305652618408, 8.0205078125], + [2.1502575874328613, -7.890580177307129], + [-2.5917625427246094, -3.217369794845581], + [2.426588535308838, 4.611893653869629], + [-5.427168369293213, -1.01906418800354], + [-1.9230895042419434, -4.221795082092285], + [-3.820525884628296, -5.783405303955078], + [3.156646490097046, -3.6253504753112793], + [-3.208418846130371, 4.986771106719971], + [-2.4792299270629883, 1.6226813793182373], + [2.6876580715179443, -8.625041961669922], + [3.0096726417541504, 5.285035133361816], + [6.115682125091553, 7.5856733322143555], + [2.0785372257232666, 5.078946113586426], + [6.673001289367676, -4.243406295776367], + [0.06805696338415146, -1.1754655838012695], + [-6.637378215789795, 7.813868045806885], + [-4.639420509338379, -3.631678342819214], + [2.480029821395874, 5.59289026260376], + [-1.411903738975525, 1.4826666116714478], + [8.193873405456543, -2.1873300075531006], + [-4.52573299407959, 6.449408531188965], + [1.4655776023864746, 1.3911106586456299], + [-6.454443454742432, 0.33075618743896484], + [3.183915615081787, -2.189046621322632], + [0.1659950613975525, 10.857521057128906], + [-6.586240291595459, 7.208553314208984], + [6.91668176651001, 8.404650688171387], + [-6.670217990875244, -0.6661028265953064], + [3.8751871585845947, -7.64043664932251], + [3.1091151237487793, -4.444062232971191], + [-2.2494587898254395, 2.7962069511413574], + [-5.87850284576416, 6.233353614807129], + [0.10317342728376389, 11.445816993713379], + [8.69829273223877, -2.3820478916168213], + [4.178534984588623, -3.6408801078796387], + [3.791238784790039, -3.018188714981079], + [-7.066843032836914, -0.16513526439666748], + [-3.5832340717315674, -4.7988996505737305], + [5.276196479797363, -3.0110514163970947], + [1.2239465713500977, -3.7681124210357666], + [0.03981512039899826, 9.355705261230469], + [2.559844493865967, -6.139899253845215], + [-0.32078152894973755, 9.452709197998047], + [2.0393340587615967, -0.49979379773139954], + [1.8990309238433838, 4.052140235900879], + [-0.04281950742006302, 12.783580780029297], + [-4.842341423034668, -1.7663992643356323], + [3.723508834838867, 5.281373977661133], + [2.9803466796875, -6.369554042816162], + [2.4958362579345703, -9.585591316223145], + [-2.3622865676879883, 1.082673192024231], + [5.40546178817749, 7.101554870605469], + [9.57235336303711, -2.403170585632324], + [7.016155242919922, 8.489837646484375], + [3.505770206451416, -2.9046411514282227], + [-6.0267014503479, 7.658091068267822], + [2.4120686054229736, -5.97321891784668], + [8.837728500366211, -2.4082462787628174], + [-2.640123128890991, 4.473203659057617], + [-3.684494733810425, -3.096958875656128], + [4.138941287994385, -3.544726610183716], + [-4.145469665527344, -5.835829734802246], + [-3.681896448135376, -4.031501293182373], + [-3.665078639984131, -2.2767457962036133], + [2.0298285484313965, 2.19791579246521], + [0.10326152294874191, 9.68235969543457], + [7.937587261199951, -2.13142991065979], + [-4.722471714019775, 5.564373970031738], + [8.71976089477539, -2.274440288543701], + [5.090150833129883, -2.2525434494018555], + [3.794759750366211, -3.5320851802825928], + [5.436445713043213, -2.0291717052459717], + [-4.8749098777771, 4.78325891494751], + [6.183605670928955, -1.1130551099777222], + [4.584966659545898, -4.549615383148193], + [-4.522884368896484, -4.569025993347168], + [2.230949640274048, -8.432025909423828], + [3.624295949935913, -4.030476093292236], + [0.27204006910324097, 0.30436646938323975], + [-5.634479999542236, 0.11439836025238037], + [-2.6781747341156006, 2.228830099105835], + [5.908029556274414, -3.2036919593811035], + [8.470973014831543, -2.4163968563079834], + [-6.150986194610596, 6.924799919128418], + [-2.2827885150909424, 0.8948795795440674], + [-7.6836934089660645, 0.05157017335295677], + [0.7140933275222778, -0.7161961197853088], + [-4.135181427001953, -6.071929931640625], + [1.486562967300415, -7.778071403503418], + [-2.586806535720825, 1.5511999130249023], + [1.662081241607666, -0.956478476524353], + [0.05640672892332077, 12.393472671508789], + [4.5573649406433105, -1.4981355667114258], + [-4.654645919799805, 4.589725494384766], + [-5.455724716186523, 6.169491767883301], + [3.431535243988037, -4.337392807006836], + [8.785507202148438, -2.4788527488708496], + [-3.0489108562469482, 7.4390459060668945], + [5.54949426651001, 7.359223365783691], + [9.435469627380371, -2.5301144123077393], + [-6.403469085693359, 7.468445777893066], + [8.562755584716797, -2.339233160018921], + [-5.929225444793701, -0.2964780330657959], + [-4.94971227645874, -7.094820022583008], + [2.6360838413238525, 6.169144630432129], + [10.948541641235352, -2.532417058944702], + [6.893675327301025, -2.100698709487915], + [-1.9219101667404175, 2.4408226013183594], + [-2.4651949405670166, 1.4414641857147217], + [2.233250141143799, 5.565865993499756], + [0.23232132196426392, 10.249425888061523], + [3.5341479778289795, 6.672766208648682], + [2.41044545173645, -3.4820797443389893], + [3.4973833560943604, -2.5600860118865967], + [-6.218197345733643, 0.24433958530426025], + [-0.004600651562213898, 13.171624183654785], + [6.243956565856934, 8.185829162597656], + [-2.222473382949829, 0.647737979888916], + [-1.868586778640747, 1.8956695795059204], + [1.877573013305664, 2.3910071849823], + [1.0913915634155273, -6.252752304077148], + [-1.606245517730713, 1.2529933452606201], + [-3.586829423904419, -5.713224411010742], + [1.4120032787322998, -0.5601762533187866], + [-1.9685661792755127, -1.557460069656372], + [-4.207886219024658, 5.36175012588501], + [2.944418430328369, 3.9751393795013428], + [8.808037757873535, -2.4067046642303467], + [-2.1412179470062256, 2.642103910446167], + [6.814935684204102, 8.168779373168945], + [0.06108187884092331, 10.032636642456055], + [5.638364315032959, 7.385063171386719], + [2.722895383834839, 6.172082901000977], + [-2.182201385498047, 2.8207285404205322], + [9.06183910369873, -2.5175509452819824], + [8.411355018615723, -2.555875062942505], + [-0.04297656565904617, 9.352706909179688], + [1.861021876335144, -7.271493911743164], + [0.3661420941352844, 0.10401275753974915], + [1.924367904663086, 1.7043575048446655], + [-1.55137038230896, -4.370395660400391], + [-1.9036738872528076, 2.5929737091064453], + [8.087428092956543, -2.2797467708587646], + [9.42866039276123, -2.2740869522094727], + [8.578486442565918, -2.2705461978912354], + [0.022496871650218964, 13.162576675415039], + [5.459686756134033, 7.373471260070801], + [-2.7976248264312744, 7.279020309448242], + [-4.051187038421631, -1.34013831615448], + [-1.657233476638794, -2.3602559566497803], + [0.07919483631849289, 12.140457153320312], + [-5.7333598136901855, -0.21340340375900269], + [-1.511886715888977, 0.012269463390111923], + [-3.0642449855804443, -1.2749168872833252], + [4.328821659088135, -1.0408868789672852], + [-0.054193682968616486, 12.45197582244873], + [7.9980549812316895, -2.786693572998047], + [5.917538166046143, -2.427774667739868], + [5.800220012664795, -1.2117600440979004], + [-4.259946346282959, -3.075939416885376], + [2.963376760482788, -4.147443771362305], + [1.1692453622817993, -6.873967170715332], + [2.5156939029693604, -7.289463520050049], + [1.8404583930969238, -4.857966423034668], + [-0.24728304147720337, 4.79144811630249], + [7.169100284576416, 8.880195617675781], + [-0.03199154883623123, 12.326630592346191], + [-6.472808837890625, 7.014593124389648], + [-1.472428798675537, 5.305347442626953], + [0.6242831349372864, -0.9124177098274231], + [6.463884353637695, -5.323640823364258], + [-5.034295558929443, -5.555069923400879], + [4.062429428100586, -3.359905481338501], + [-1.9640347957611084, 1.7192554473876953], + [3.737980842590332, 1.7604036331176758], + [-2.576871633529663, -4.158679008483887], + [4.664251804351807, 1.9921163320541382], + [3.1003048419952393, -8.668060302734375], + [2.915700674057007, -4.085003852844238], + [-2.1123900413513184, 2.4860541820526123], + [6.4195122718811035, 7.908289909362793], + [-2.8194210529327393, -3.9399349689483643], + [8.743279457092285, -2.4176013469696045], + [-2.5745530128479004, -3.325040340423584], + [-3.976930618286133, -3.29899525642395], + [2.7384755611419678, -3.823932409286499], + [-2.3186252117156982, 2.2876315116882324], + [-5.120746612548828, -1.014822244644165], + [-2.842751979827881, -3.3572640419006348], + [6.269028186798096, 8.053611755371094], + [-2.6592061519622803, -3.712475538253784], + [6.973461627960205, -1.526149868965149], + [0.23356211185455322, 11.020342826843262], + [7.16262149810791, -2.180475950241089], + [8.43835163116455, -2.2580692768096924], + [9.15247631072998, -2.6003024578094482], + [-1.5401777029037476, 1.7183552980422974], + [5.86714506149292, -3.22902774810791], + [6.768043518066406, -5.3028998374938965], + [5.725541114807129, 7.649116516113281], + [3.384814977645874, -8.262222290039062], + [-4.639255046844482, -2.6267049312591553], + [-1.710270643234253, 0.8979027271270752], + [-2.0965020656585693, 2.4036664962768555], + [3.1688973903656006, -4.374174118041992], + [3.5368120670318604, 5.124392986297607], + [0.10739576071500778, 10.014432907104492], + [5.672534465789795, -1.5922921895980835], + [-3.9656221866607666, 7.5475029945373535], + [-1.9149259328842163, 2.4325320720672607], + [-2.457805633544922, -2.0746495723724365], + [-2.81836199760437, 2.411708354949951], + [-2.681156873703003, 1.319830298423767], + [-0.5160938501358032, -2.622584819793701], + [3.0715816020965576, -4.301508903503418], + [1.0544006824493408, 5.057716369628906], + [-2.6467554569244385, -3.7301995754241943], + [10.337421417236328, -2.3543150424957275], + [0.062060050666332245, 9.489856719970703], + [3.875258684158325, -0.5107029676437378], + [0.07349317520856857, 12.195456504821777], + [6.173127174377441, -1.81621253490448], + [3.2457973957061768, -3.8825955390930176], + [-0.7033940553665161, -2.530669927597046], + [-4.704069137573242, 5.711414813995361], + [-3.783322811126709, -5.4699554443359375], + [4.169713497161865, 1.9551111459732056], + [-3.4943482875823975, -0.4647980332374573], + [8.588448524475098, -2.459965467453003], + [4.338305950164795, 1.8566054105758667], + [2.393401622772217, -3.5352895259857178], + [3.170903444290161, -3.7042508125305176], + [-2.4391391277313232, 1.6312005519866943], + [0.14312273263931274, 9.805133819580078], + [2.730987548828125, -8.900917053222656], + [0.4477875828742981, 10.372678756713867], + [3.520517110824585, -3.709057092666626], + [5.494926929473877, -2.275846242904663], + [3.5796830654144287, -7.629921913146973], + [3.3027865886688232, -9.168622970581055], + [-4.867424488067627, -1.0029281377792358], + [2.2133822441101074, 4.5311198234558105], + [-0.7471033930778503, -1.3213411569595337], + [0.11717408150434494, 9.768974304199219], + [3.143869161605835, -6.275464057922363], + [-2.4503109455108643, 1.8828003406524658], + [3.564331293106079, -7.75935697555542], + [2.910720109939575, -4.061676025390625], + [-5.242249965667725, -3.184394598007202], + [2.950845956802368, 1.4562077522277832], + [4.2082343101501465, -4.211251735687256], + [5.434173107147217, -2.2728657722473145], + [3.085561990737915, -3.5988686084747314], + [-2.3430893421173096, -2.5900280475616455], + [3.1764354705810547, -4.486975193023682], + [-2.8606536388397217, -0.20812565088272095], + [0.05263548344373703, 9.40302848815918], + [-4.788325786590576, 4.6664323806762695], + [-2.7191321849823, -4.267387390136719], + [2.4702913761138916, -9.007940292358398], + [-4.441699981689453, -2.6052401065826416], + [3.0055387020111084, -3.9754037857055664], + [2.2698521614074707, 5.700148105621338], + [5.041880130767822, -1.9849847555160522], + [7.309879779815674, -2.1838016510009766], + [3.288311243057251, -4.794715404510498], + [0.25989317893981934, 11.048328399658203], + [-4.95010232925415, -0.795228123664856], + [-2.1563167572021484, 2.065838098526001], + [-1.9477486610412598, -2.9258172512054443], + [2.4767467975616455, 6.065892219543457], + [3.625880002975464, -5.29470157623291], + [-2.1296188831329346, 0.1685250997543335], + [-2.2711007595062256, 2.0333666801452637], + [0.04448511451482773, -2.51493239402771], + [5.553308010101318, -4.998160362243652], + [8.47553825378418, -2.27054762840271], + [-5.804900646209717, 5.469289779663086], + [8.941994667053223, -2.391083240509033], + [1.441632866859436, 4.780002593994141], + [6.387551784515381, 8.080879211425781], + [10.947359085083008, -2.5507113933563232], + [2.0041561126708984, 4.07177734375], + [-3.988323926925659, 5.062129497528076], + [2.8199126720428467, 4.717000961303711], + [-1.0200209617614746, -2.9434897899627686], + [4.052531719207764, -2.508249521255493], + [7.91338586807251, -2.196027994155884], + [2.560093641281128, 1.3595820665359497], + [3.704352617263794, -8.60474681854248], + [2.7072153091430664, -2.142167806625366], + [5.833118915557861, -1.1756441593170166], + [-4.265533447265625, -1.2879223823547363], + [-4.642277240753174, -6.376046657562256], + [0.9771950840950012, 1.0993874073028564], + [-0.03594917804002762, 13.073322296142578], + [-1.2953075170516968, 1.6767317056655884], + [-4.486715793609619, -2.61811900138855], + [8.422318458557129, -2.278369188308716], + [-2.847808599472046, 2.0907695293426514], + [0.1187247559428215, 11.595788955688477], + [-2.2370247840881348, 0.5303415060043335], + [2.801788091659546, 2.904182195663452], + [-4.217406749725342, -2.556413412094116], + [0.04666280001401901, 9.595623970031738], + [2.97326922416687, -4.098051071166992], + [6.916954517364502, -6.130660057067871], + [-3.503096342086792, 5.817995071411133], + [8.248383522033691, -2.3568506240844727], + [0.37300819158554077, 11.437470436096191], + [-3.019500255584717, -2.035261869430542], + [-2.1488280296325684, 2.2166473865509033], + [-3.618194818496704, -4.632261276245117], + [-7.203505039215088, 8.4559907913208], + [8.698678970336914, -2.441838026046753], + [3.2283270359039307, -7.474084854125977], + [-2.0030462741851807, 2.4126946926116943], + [3.417804479598999, -5.145410537719727], + [3.4100894927978516, 1.1436458826065063], + [7.847907543182373, -2.0846481323242188], + [2.840221643447876, -3.756030797958374], + [-4.69826602935791, 6.392110347747803], + [-3.6422338485717773, -1.3110077381134033], + [3.218874216079712, -4.500349521636963], + [-1.0472877025604248, -2.39491868019104], + [2.560448169708252, -9.358428001403809], + [1.3135719299316406, -0.2888110876083374], + [3.500556707382202, -4.797584056854248], + [4.595348834991455, -3.332127809524536], + [-4.287255764007568, -7.115619659423828], + [10.656031608581543, -2.455772638320923], + [4.407101154327393, 7.276212215423584], + [-2.3424601554870605, 2.640838623046875], + [1.5199851989746094, -7.538807392120361], + [-2.1115496158599854, 2.58424973487854], + [6.805494785308838, 8.23575210571289], + [6.508009910583496, -2.934288740158081], + [-2.439467668533325, -3.765415668487549], + [0.6795532703399658, -1.0966765880584717], + [-0.042899079620838165, 9.527502059936523], + [-1.4993537664413452, 2.0420944690704346], + [-2.9362289905548096, -3.1026065349578857], + [-2.35691237449646, 2.255737066268921], + [7.360088348388672, -4.90401029586792], + [1.6097438335418701, 1.7450472116470337], + [2.6400744915008545, 3.7659006118774414], + [1.9371235370635986, -6.428752899169922], + [-1.2267673015594482, 0.15953794121742249], + [7.423660755157471, -2.066544771194458], + [2.244565725326538, 5.244162082672119], + [0.811118483543396, 4.1179728507995605], + [-2.5176830291748047, 1.7451363801956177], + [1.3688256740570068, -0.12969651818275452], + [0.20925813913345337, 10.512144088745117], + [7.935088634490967, -2.6752212047576904], + [5.896178722381592, 7.631372451782227], + [0.177035391330719, 12.624170303344727], + [7.639316558837891, -2.298997640609741], + [-3.721390962600708, -3.0949325561523438], + [1.569167137145996, 4.65125036239624], + [3.0082051753997803, 0.7842986583709717], + [4.113646030426025, -3.7148399353027344], + [-4.832467555999756, 2.0065033435821533], + [-2.138679027557373, 0.9195287823677063], + [-3.8665850162506104, -4.464507102966309], + [8.144372940063477, -2.4661104679107666], + [2.7959237098693848, 3.5411484241485596], + [-0.3333633244037628, -1.7657221555709839], + [-3.2766754627227783, -0.30921119451522827], + [-6.753167629241943, -0.3472498655319214], + [6.483869552612305, -2.0608935356140137], + [-3.8257625102996826, -3.115772008895874], + [3.4881703853607178, 6.040265083312988], + [2.476149797439575, -8.955121040344238], + [-4.938671588897705, -7.079136371612549], + [6.4761481285095215, 8.191280364990234], + [-4.298729419708252, -0.7272672653198242], + [2.2607223987579346, 4.880701065063477], + [3.4058845043182373, -8.343161582946777], + [-2.493675708770752, 2.529360055923462], + [-2.3522536754608154, 1.4879661798477173], + [4.386970520019531, 5.7900567054748535], + [3.229045867919922, 4.650076866149902], + [2.0350286960601807, 0.45455288887023926], + [5.84760046005249, -1.1864886283874512], + [-0.9019922614097595, 0.7739304900169373], + [-4.309401035308838, 3.14741849899292], + [-5.1163649559021, 5.790298938751221], + [-6.2808074951171875, 7.849828720092773], + [-5.310572147369385, 0.9284659624099731], + [5.172183990478516, 8.002344131469727], + [3.5426201820373535, -2.3793599605560303], + [-3.312490701675415, -1.114567518234253], + [-2.3487818241119385, 2.1155686378479004], + [-4.86394739151001, -6.121523380279541], + [-6.490772724151611, -1.8573077917099], + [-0.11161375790834427, 12.600417137145996], + [-3.5795295238494873, -5.092295169830322], + [0.47188687324523926, -1.9159077405929565], + [-4.936245918273926, -2.3265135288238525], + [3.46298885345459, -2.5232508182525635], + [-0.2736232280731201, -1.7268743515014648], + [-2.454339027404785, 1.932895302772522], + [-4.621799945831299, -6.438728332519531], + [-2.3213720321655273, -2.7444658279418945], + [-2.5876946449279785, 0.7787512540817261], + [-2.6215760707855225, -4.3341264724731445], + [0.2275497317314148, 11.256206512451172], + [7.952579021453857, -2.1989898681640625], + [4.089685440063477, -7.416786193847656], + [3.2319724559783936, -7.740823745727539], + [-2.6081392765045166, 0.9778140783309937], + [-3.3722801208496094, -3.016713857650757], + [4.51310920715332, 6.753840446472168], + [3.853229284286499, -6.676809787750244], + [6.300949573516846, -2.845659017562866], + [3.4955599308013916, -7.376080513000488], + [5.376716136932373, -3.4808523654937744], + [0.045618705451488495, 12.439592361450195], + [1.0147435665130615, -5.784713268280029], + [-1.9883475303649902, 2.0330545902252197], + [5.799813747406006, 7.641400337219238], + [-1.5113550424575806, 4.523158073425293], + [4.062686443328857, 6.711734771728516], + [-0.0401424840092659, 9.96125602722168], + [-4.915199279785156, 7.773412704467773], + [0.22026443481445312, 10.52764892578125], + [-0.010493703186511993, -1.6731271743774414], + [2.9601047039031982, -4.281418800354004], + [-3.289022922515869, 3.0599982738494873], + [10.479157447814941, -2.509124517440796], + [4.693684101104736, 6.6708197593688965], + [0.48224860429763794, 11.87846851348877], + [-2.1583707332611084, 2.5022950172424316], + [4.385451793670654, 6.319553375244141], + [-3.26460337638855, -2.1250720024108887], + [-5.73842191696167, -0.6001272797584534], + [-3.2483489513397217, -3.24472975730896], + [-4.418515682220459, -3.237563133239746], + [10.097895622253418, -2.425621747970581], + [5.936529159545898, -1.880189299583435], + [3.8559730052948, -6.630147933959961], + [3.3797447681427, -5.590350151062012], + [3.8462820053100586, -6.82966423034668], + [4.483040809631348, -4.000070095062256], + [-4.46955680847168, -2.1202712059020996], + [0.020203106105327606, 10.275428771972656], + [-2.579782485961914, 0.11551368236541748], + [4.815823078155518, -3.7713730335235596], + [2.7046773433685303, -3.8466501235961914], + [-4.890434741973877, -7.0016984939575195], + [-0.018251486122608185, 12.85853099822998], + [5.211217403411865, 7.362062454223633], + [0.029688887298107147, 12.001803398132324], + [-6.042988300323486, -0.20603293180465698], + [7.937135219573975, -2.5901308059692383], + [-4.889241695404053, -0.40616071224212646], + [2.691896677017212, -6.466628551483154], + [3.990168809890747, -3.6180522441864014], + [4.873065948486328, -2.848836898803711], + [-4.158881664276123, 4.877003192901611], + [6.410274028778076, -2.7663216590881348], + [6.385984420776367, -1.3482252359390259], + [3.392791509628296, -5.174151420593262], + [-3.8812763690948486, -0.3015209436416626], + [1.4279670715332031, -0.6618715524673462], + [-2.4088377952575684, 2.1977880001068115], + [3.9208643436431885, 0.9501606225967407], + [6.689842700958252, -1.3454991579055786], + [-3.82346510887146, -3.8055784702301025], + [2.987539529800415, -3.827321767807007], + [-0.009254880249500275, 11.69875717163086], + [-5.825042247772217, 7.1643548011779785], + [5.280439853668213, -0.7252942323684692], + [-1.2419312000274658, -2.2731454372406006], + [11.086874008178711, -2.522643804550171], + [5.944756984710693, 7.580230236053467], + [-2.3632314205169678, -3.06355881690979], + [-6.639475345611572, -0.37942540645599365], + [0.252802312374115, 11.173970222473145], + [0.8706884980201721, -5.339986801147461], + [3.8476815223693848, 1.0892643928527832], + [5.650014400482178, 7.635784149169922], + [-2.0152170658111572, 2.6485812664031982], + [-4.559895992279053, 4.651918411254883], + [3.7118818759918213, -5.492455959320068], + [-0.08417785912752151, 13.262205123901367], + [7.62324857711792, -2.06190824508667], + [5.298811435699463, 7.074121475219727], + [-3.0856010913848877, 0.6817593574523926], + [1.9810943603515625, -7.825681209564209], + [-4.4005045890808105, 8.478947639465332], + [-4.299063205718994, -6.523240566253662], + [2.5742151737213135, -8.53406810760498], + [1.056036353111267, -0.8602845668792725], + [4.920648097991943, 0.17895051836967468], + [0.1252923607826233, 9.67271614074707], + [6.034576892852783, -4.2329816818237305], + [-3.3257479667663574, -4.9820356369018555], + [3.4557583332061768, -4.6776533126831055], + [-6.469366550445557, 2.5164241790771484], + [-4.5903143882751465, 3.3213071823120117], + [-0.09354884177446365, -1.5387446880340576], + [5.081506252288818, 6.85168981552124], + [3.2753195762634277, -4.606240749359131], + [0.05138080567121506, 9.814432144165039], + [0.007700614631175995, 9.565814971923828], + [-5.37753438949585, -6.471141815185547], + [0.1593218445777893, 12.20372200012207], + [3.2103192806243896, -7.531686305999756], + [2.589627265930176, 3.9247748851776123], + [1.3788005113601685, -6.989780426025391], + [6.261686325073242, -2.694654941558838], + [-2.7370386123657227, -0.8171740770339966], + [-5.863487720489502, -0.5957129001617432], + [3.8747591972351074, -3.6827406883239746], + [4.0403289794921875, -3.8884437084198], + [-2.889004945755005, -3.628610134124756], + [-4.542983531951904, 0.019650157541036606], + [0.724128782749176, -0.8549262881278992], + [-2.6765267848968506, 4.69175910949707], + [-2.2611007690429688, 2.0283076763153076], + [-2.8328959941864014, -3.8381545543670654], + [7.568445682525635, -1.993112564086914], + [-2.074451446533203, 2.553985834121704], + [-1.0842951536178589, -3.8352882862091064], + [-0.5834205746650696, 1.1567373275756836], + [3.9023022651672363, 1.2378171682357788], + [-0.37986433506011963, 0.5235440731048584], + [4.817850589752197, 7.011822700500488], + [8.513283729553223, -2.316227436065674], + [7.854069709777832, -2.0535316467285156], + [5.605518817901611, 7.5218963623046875], + [-6.928718566894531, -1.3566961288452148], + [1.9369697570800781, 6.566428184509277], + [3.0939037799835205, -3.3795368671417236], + [1.5269867181777954, 5.599907875061035], + [-3.326427698135376, -2.8518807888031006], + [-5.456570148468018, -0.7931432723999023], + [-0.12660765647888184, 9.979436874389648], + [-2.664532423019409, -3.103766441345215], + [2.3910679817199707, 0.3895720839500427], + [2.7482893466949463, -2.741626501083374], + [2.844698905944824, -3.636056661605835], + [-4.008489608764648, -5.774928569793701], + [-4.941905498504639, 6.276758670806885], + [-2.4820313453674316, 2.1133005619049072], + [8.5648193359375, -2.295879602432251], + [-4.979218006134033, -2.5393593311309814], + [3.311889410018921, -4.212981224060059], + [-4.882925510406494, -0.20664668083190918], + [-6.3155388832092285, -1.8366681337356567], + [-3.8759686946868896, -3.228801965713501], + [-0.06275922805070877, 14.18759536743164], + [-4.811192989349365, -2.2828876972198486], + [-3.1600701808929443, 1.5049554109573364], + [0.008521907031536102, 9.407811164855957], + [0.03254526108503342, 12.253190040588379], + [-5.231723785400391, 5.597231388092041], + [0.2558467388153076, 11.317035675048828], + [2.560091257095337, -7.203023910522461], + [-0.09309381991624832, 13.522921562194824], + [-4.098226070404053, 1.3636544942855835], + [-4.7577080726623535, -7.834000587463379], + [0.053869061172008514, 9.936283111572266], + [-3.9184415340423584, -6.242947578430176], + [3.6019513607025146, 6.950317859649658], + [3.2027320861816406, -6.852759838104248], + [4.017816066741943, -5.82734489440918], + [-5.591073513031006, -0.7076326608657837], + [-4.65726900100708, 0.19493335485458374], + [3.12732195854187, -4.438505172729492], + [8.186495780944824, -2.2649571895599365], + [-0.07448900490999222, 12.778692245483398], + [-2.003851890563965, 3.8543639183044434], + [0.08159010857343674, 12.206336975097656], + [-4.6308064460754395, 5.76800537109375], + [5.860808372497559, -6.659213066101074], + [-4.622772693634033, -6.88765287399292], + [0.12064354866743088, 11.729963302612305], + [2.470428228378296, -6.323105335235596], + [1.4201650619506836, -6.0171589851379395], + [2.3970749378204346, 6.301928520202637], + [3.2240476608276367, -7.548726558685303], + [-4.652883052825928, 2.7975053787231445], + [-4.403458118438721, 4.481988906860352], + [6.8400139808654785, 8.276800155639648], + [5.894166469573975, -5.503580093383789], + [-5.617825031280518, 6.633913040161133], + [-4.305570125579834, -6.3511176109313965], + [7.451846599578857, -2.4121298789978027], + [2.693782091140747, -2.066755771636963], + [-2.6047329902648926, -3.4676809310913086], + [-3.322705030441284, -4.050162315368652], + [-2.2414708137512207, 2.8925116062164307], + [2.570946455001831, -8.353445053100586], + [5.4105544090271, -1.117785930633545], + [3.5728890895843506, 1.617296814918518], + [3.7035765647888184, -4.152778625488281], + [-1.2013790607452393, 1.5207068920135498], + [5.878768444061279, -6.0680389404296875], + [-1.892981767654419, -4.7406415939331055], + [2.937875509262085, -4.133292198181152], + [5.154353141784668, 7.207086086273193], + [8.87375545501709, -2.524850845336914], + [3.0292303562164307, -7.837575435638428], + [2.544661521911621, 0.47077834606170654], + [4.330874919891357, 6.023180961608887], + [0.3936555087566376, -1.1459028720855713], + [0.04160618036985397, 13.248679161071777], + [9.308368682861328, -2.469911813735962], + [-4.5992560386657715, -5.990068435668945], + [3.0531728267669678, -4.310828685760498], + [3.5178167819976807, -3.5980732440948486], + [-4.919086933135986, -3.3456687927246094], + [-6.476547718048096, -1.8629226684570312], + [9.767571449279785, -2.425898790359497], + [-2.7717344760894775, -3.4435083866119385], + [-4.543661117553711, -5.787871837615967], + [1.0517709255218506, -1.0109496116638184], + [-3.4354970455169678, -0.5760054588317871], + [2.6224894523620605, -3.7038052082061768], + [-2.82487154006958, -5.236852645874023], + [2.658080816268921, -3.4361300468444824], + [0.12202327698469162, 9.778352737426758], + [7.21505880355835, -2.0019447803497314], + [2.857538938522339, -9.572834014892578], + [2.316650867462158, -5.951773643493652], + [3.286742925643921, 1.230873942375183], + [3.9077703952789307, -7.784095764160156], + [2.7171967029571533, 1.3292747735977173], + [2.7717955112457275, -3.9160454273223877], + [0.27676647901535034, 11.224014282226562], + [-2.108121156692505, -3.971944808959961], + [-4.223676681518555, 5.860700607299805], + [-2.6607730388641357, -4.555072784423828], + [0.22913283109664917, 11.584510803222656], + [3.388132333755493, -3.246852397918701], + [2.8603484630584717, -4.061330318450928], + [-0.016260690987110138, 12.324331283569336], + [3.035407066345215, -4.229944705963135], + [3.1275665760040283, -2.112415075302124], + [4.623406410217285, -1.1618846654891968], + [1.0007721185684204, 1.5429528951644897], + [-4.920208930969238, -0.22292649745941162], + [-7.7839674949646, 9.097979545593262], + [-7.010589122772217, -2.184580087661743], + [-1.7529706954956055, -3.5673975944519043], + [-2.107703447341919, 2.7160606384277344], + [-4.7182793617248535, -6.955025672912598], + [10.605003356933594, -2.5766987800598145], + [2.7478296756744385, 4.3605570793151855], + [-7.165417194366455, -0.41772276163101196], + [8.52803897857666, -2.291677474975586], + [4.153830051422119, 6.8214640617370605], + [0.027603141963481903, 12.809492111206055], + [-4.366373538970947, 6.287914276123047], + [0.21171921491622925, 10.38247013092041], + [0.15062808990478516, 9.659337997436523], + [0.12755721807479858, 11.97136402130127], + [0.2610500454902649, 10.29666519165039], + [4.866750240325928, -4.093506813049316], + [-2.081367254257202, 2.557976484298706], + [0.15548914670944214, 10.2742919921875], + [-0.2161455750465393, 8.776420593261719], + [-2.674849033355713, 3.172039747238159], + [8.123912811279297, -2.149074077606201], + [-1.2520792484283447, 0.2875717580318451], + [-1.4630008935928345, 5.083330154418945], + [-5.1274800300598145, -3.0690667629241943], + [-4.505373477935791, -1.9780274629592896], + [8.999015808105469, -2.286910057067871], + [-8.492762565612793, 0.155420184135437], + [1.7125952243804932, 4.46602725982666], + [0.02494066208600998, 9.09015941619873], + [-5.489756107330322, 8.278757095336914], + [-1.9730271100997925, 2.390177011489868], + [2.6511025428771973, 5.619685649871826], + [-1.153065800666809, -2.7209460735321045], + [-4.927314281463623, -2.6471450328826904], + [-2.6963045597076416, 2.1998064517974854], + [8.281034469604492, -2.292626142501831], + [-1.983776569366455, -3.7034075260162354], + [0.08396153897047043, 11.77495002746582], + [1.4620351791381836, 3.960989236831665], + [2.900202751159668, -5.97789192199707], + [0.19549089670181274, 11.256013870239258], + [2.212733030319214, 1.6643917560577393], + [-6.149313926696777, -2.4594829082489014], + [-4.079906463623047, -1.1052550077438354], + [-2.425964117050171, 1.112625002861023], + [5.6098313331604, 7.154784202575684], + [-7.008116245269775, 7.942170143127441], + [1.42268705368042, 4.824983596801758], + [-1.3084478378295898, 5.8609299659729], + [3.2078185081481934, -3.339231491088867], + [-2.8166568279266357, 0.33259978890419006], + [-2.73482346534729, 2.5618338584899902], + [4.472898006439209, -6.305418014526367], + [-0.04653037339448929, 9.559345245361328], + [-2.303457260131836, 2.7615320682525635], + [3.3562839031219482, -3.9233713150024414], + [-5.791934967041016, -1.341412901878357], + [1.6926368474960327, -7.998015880584717], + [9.420138359069824, -2.406139612197876], + [2.667992353439331, -5.882076263427734], + [2.4561259746551514, 4.294826030731201], + [9.852204322814941, -2.3725249767303467], + [-1.1123571395874023, -3.791182279586792], + [7.731616497039795, 9.120097160339355], + [-2.6405866146087646, 2.086958646774292], + [2.85565447807312, -8.210237503051758], + [11.574624061584473, -2.6091392040252686], + [-0.036567993462085724, 13.588777542114258], + [-3.1473209857940674, -5.128363609313965], + [-3.483074426651001, 5.010270595550537], + [-4.6581549644470215, -3.4140682220458984], + [-4.477778434753418, -3.2538063526153564], + [-2.6713340282440186, 2.1562929153442383], + [-0.9652429819107056, -1.6424548625946045], + [1.4182233810424805, -4.871010780334473], + [6.408189296722412, -2.7693920135498047], + [-0.011068768799304962, 9.315568923950195], + [4.09543514251709, 6.953244209289551], + [5.339405536651611, -2.6021225452423096], + [3.7771425247192383, 6.142450332641602], + [1.5809880495071411, -7.63990592956543], + [4.982950687408447, -3.9560153484344482], + [0.16555708646774292, 10.479524612426758], + [-2.131680965423584, 2.3701000213623047], + [2.4812734127044678, -9.021702766418457], + [0.15429729223251343, -3.4060661792755127], + [9.560294151306152, -2.4061686992645264], + [0.19271200895309448, 10.55359935760498], + [8.895316123962402, -2.3644702434539795], + [-3.4079949855804443, -2.472855567932129], + [2.7851943969726562, -0.25448328256607056], + [4.520683765411377, 6.622129440307617], + [-4.852342128753662, -2.5089590549468994], + [-4.7235565185546875, 6.496370315551758], + [9.012991905212402, -2.338818073272705], + [1.7748229503631592, -7.130359172821045], + [6.362284183502197, -5.437276363372803], + [-1.9822853803634644, 2.466520071029663], + [0.10390233248472214, 12.051065444946289], + [-4.74490213394165, -7.249051094055176], + [0.0035782381892204285, 12.967405319213867], + [3.2137389183044434, -4.553894996643066], + [3.564246892929077, 1.768357276916504], + [2.89555287361145, -3.7973134517669678], + [-1.951255440711975, -3.9596831798553467], + [2.013003349304199, -1.8640772104263306], + [-3.8035993576049805, -5.700214385986328], + [4.083459377288818, 1.9225043058395386], + [1.5357327461242676, -0.3084169030189514], + [-4.210316181182861, 3.738511323928833], + [3.702319860458374, 1.524575114250183], + [-4.33897066116333, 8.23202896118164], + [9.728296279907227, -2.405036211013794], + [-2.437641143798828, 1.8933011293411255], + [-6.213710308074951, 7.140331745147705], + [-4.452053546905518, -4.636199951171875], + [-5.094797134399414, -1.6978048086166382], + [2.321967363357544, 1.2373746633529663], + [8.62345027923584, -2.5911526679992676], + [4.166572570800781, -3.056565284729004], + [4.2837443351745605, -2.9710898399353027], + [2.9878647327423096, -3.742647886276245], + [1.973881483078003, 4.339237689971924], + [0.8700791001319885, 0.6182053089141846], + [2.244032621383667, 2.0564866065979004], + [-1.3341474533081055, -3.047734022140503], + [0.061787717044353485, 12.639557838439941], + [-4.380004405975342, -3.22147536277771], + [4.811883449554443, 7.524633407592773], + [0.21274036169052124, 10.258438110351562], + [-2.5170435905456543, 2.140282154083252], + [-2.9226269721984863, -2.8530080318450928], + [3.0362870693206787, 5.478994369506836], + [-3.4013359546661377, -5.184716701507568], + [2.4538216590881348, 3.587974786758423], + [2.043239116668701, -7.926619052886963], + [5.656065940856934, -4.3043107986450195], + [-2.52299165725708, -1.303848385810852], + [-2.646057367324829, -4.209562301635742], + [-3.876768112182617, -6.594142436981201], + [0.5574438571929932, 10.671031951904297], + [2.662370443344116, -8.128398895263672], + [-4.160584926605225, 5.643275260925293], + [-7.164212703704834, 8.326091766357422], + [-2.6412737369537354, -3.540266752243042], + [3.8953449726104736, 0.4869502782821655], + [-4.1407012939453125, -5.862948894500732], + [1.8055229187011719, 3.431290864944458], + [4.436429977416992, -0.1612754464149475], + [2.049957752227783, 1.5122255086898804], + [-7.302022457122803, -0.17693734169006348], + [-3.457881212234497, 4.837650775909424], + [-1.7786608934402466, 2.0939478874206543], + [-4.253360748291016, -5.772705554962158], + [2.8169586658477783, 0.7518333792686462], + [-2.7234723567962646, 1.0948058366775513], + [7.730752468109131, -2.120906114578247], + [0.18089550733566284, 10.377971649169922], + [2.111583709716797, -4.950563430786133], + [5.043169021606445, -4.31258487701416], + [0.6835029125213623, -5.390069484710693], + [-0.7677697539329529, 1.8031941652297974], + [-1.717152714729309, 1.814217448234558], + [4.00497579574585, -7.288954734802246], + [-6.2794365882873535, 7.415474891662598], + [-2.5255439281463623, 0.42984259128570557], + [1.429883599281311, 5.70192813873291], + [-3.978785276412964, -3.4695966243743896], + [3.06656813621521, -4.3126373291015625], + [-2.7010481357574463, 2.068866491317749], + [3.508873462677002, -5.512974739074707], + [4.363955974578857, 6.2234601974487305], + [0.035265855491161346, 11.8447847366333], + [-3.051818370819092, 3.6470859050750732], + [8.314663887023926, -2.226346731185913], + [-3.881251096725464, 3.0643680095672607], + [3.1694037914276123, -3.7522237300872803], + [-2.4521219730377197, -4.807939529418945], + [6.262678623199463, 7.74268102645874], + [-0.8264548182487488, 0.7717558145523071], + [1.446427583694458, 0.052097808569669724], + [3.523636817932129, -5.8675537109375], + [-1.2968333959579468, 1.2260633707046509], + [0.14409083127975464, 10.09832763671875], + [-2.5903799533843994, 1.6591826677322388], + [2.790414571762085, -8.756893157958984], + [-4.6311259269714355, -1.0175000429153442], + [-2.602574348449707, 2.1333463191986084], + [2.595611810684204, -4.662988662719727], + [-1.960127830505371, 1.9276846647262573], + [9.760384559631348, -2.3168158531188965], + [3.251061201095581, -3.647752523422241], + [7.451082229614258, -1.88819420337677], + [-0.07041282206773758, 9.6918306350708], + [-2.496556043624878, -1.2837438583374023], + [5.632586479187012, 7.7857255935668945], + [-2.142814874649048, 2.26820969581604], + [-4.233442783355713, -1.2392606735229492], + [-2.5014071464538574, 2.106412172317505], + [-7.432466983795166, -0.665638267993927], + [3.0194034576416016, 5.88427734375], + [0.05527185648679733, 11.017149925231934], + [3.1577951908111572, -4.494344234466553], + [8.63832950592041, -2.3090786933898926], + [6.890605449676514, -2.031130790710449], + [2.783050060272217, -0.29692333936691284], + [2.987983465194702, -4.188968181610107], + [9.577668190002441, -2.341844320297241], + [2.4423673152923584, 1.1601098775863647], + [5.520497798919678, -1.25151789188385], + [5.094465732574463, -0.23526233434677124], + [0.13952487707138062, 9.838447570800781], + [4.139558792114258, -3.7715842723846436], + [3.402381181716919, -4.261209487915039], + [-5.199820041656494, -1.374665379524231], + [-5.945062160491943, -1.2285730838775635], + [-4.701197147369385, -0.18562936782836914], + [10.06132984161377, -2.4771173000335693], + [-2.029099702835083, 1.120582103729248], + [0.056236736476421356, 12.617432594299316], + [6.478183746337891, -1.5695043802261353], + [-4.165200233459473, -6.442810535430908], + [3.408421277999878, 6.529904365539551], + [3.239623785018921, -8.421881675720215], + [4.021158695220947, 1.7294363975524902], + [-1.9407538175582886, 2.315805435180664], + [2.0539393424987793, 4.262246131896973], + [-2.2193949222564697, -4.667154312133789], + [4.0138654708862305, 6.545638084411621], + [-5.75856351852417, 6.667222499847412], + [-4.620189189910889, 4.812847137451172], + [6.126081943511963, -2.8302202224731445], + [6.254729747772217, 7.748314380645752], + [-2.221849203109741, 2.659868001937866], + [-4.249204635620117, -6.578287601470947], + [5.3167643547058105, -1.1404657363891602], + [-3.608868360519409, -0.893897533416748], + [6.403353691101074, 7.949346542358398], + [-2.3815956115722656, 2.7239794731140137], + [-1.2882366180419922, 0.5341631174087524], + [8.513912200927734, -2.3198063373565674], + [0.2098294496536255, -1.5372768640518188], + [6.54749059677124, 8.159692764282227], + [0.46547824144363403, 5.174443244934082], + [0.24987733364105225, 11.042399406433105], + [3.2485766410827637, -4.692370414733887], + [-5.777881145477295, -2.800389051437378], + [8.644058227539062, -2.3249359130859375], + [-5.112640857696533, 4.564481735229492], + [-4.374241352081299, -1.8006023168563843], + [-4.5783586502075195, -2.876575231552124], + [3.039172649383545, -3.299636125564575], + [4.2118000984191895, -3.438189744949341], + [-1.5388984680175781, 0.688861608505249], + [3.9112212657928467, -3.7582104206085205], + [7.479005813598633, -2.0886261463165283], + [-4.053640842437744, -2.874605417251587], + [5.3161234855651855, -0.5179633498191833], + [4.211230278015137, 6.378135681152344], + [-4.025693893432617, 5.605068206787109], + [4.4876556396484375, 6.61099910736084], + [3.6620123386383057, -8.368486404418945], + [4.232422351837158, -3.501896619796753], + [-2.2255797386169434, -3.220977544784546], + [-6.3364691734313965, -2.19256854057312], + [-2.916037082672119, 3.1607589721679688], + [7.605327606201172, -2.1066973209381104], + [-2.392123222351074, 1.3265560865402222], + [8.72994327545166, -2.4320733547210693], + [-3.9686691761016846, -6.331218719482422], + [-2.0130252838134766, 2.408966541290283], + [0.1643560528755188, 10.153501510620117], + [-1.4154644012451172, -3.9405784606933594], + [0.01995324343442917, 9.864689826965332], + [-1.9473185539245605, 1.8235859870910645], + [3.815882921218872, -3.368971109390259], + [3.02716326713562, -4.192979335784912], + [6.835343837738037, 8.532676696777344], + [2.210177183151245, 5.9289703369140625], + [-7.19243860244751, -0.20081472396850586], + [2.0767323970794678, -8.812670707702637], + [3.738180637359619, -3.3915913105010986], + [0.7984557151794434, -0.624111533164978], + [-4.363980293273926, -6.868963241577148], + [9.466315269470215, -2.2495617866516113], + [3.7462453842163086, -3.6121227741241455], + [4.388944149017334, 6.166505813598633], + [2.0771236419677734, -8.168649673461914], + [10.824987411499023, -2.4235708713531494], + [2.5022711753845215, -3.5683658123016357], + [-3.927997350692749, -5.77207088470459], + [-4.28510046005249, -3.9936978816986084], + [3.2206997871398926, -7.346472263336182], + [5.661594390869141, -3.572711229324341], + [2.7784814834594727, 1.150621771812439], + [0.9530932307243347, 9.807008743286133], + [-8.058460235595703, -0.3810626268386841], + [-0.009850926697254181, 13.088269233703613], + [2.4043643474578857, 5.814036846160889], + [-0.00905723124742508, 12.500860214233398], + [4.2633748054504395, -3.8520123958587646], + [0.9060466885566711, -0.4499526619911194], + [8.463568687438965, -2.4787368774414062], + [12.509847640991211, -2.800612688064575], + [7.781711101531982, -2.1577842235565186], + [0.7718281149864197, -4.563843727111816], + [-4.024956226348877, -4.162699222564697], + [-4.269423961639404, -5.191404819488525], + [-4.5750651359558105, -4.190056324005127], + [-1.8813092708587646, 1.2587801218032837], + [-0.07339770346879959, 9.04842472076416], + [3.182624578475952, -4.510480880737305], + [-1.1786599159240723, 4.248115539550781], + [8.136404991149902, -2.1733546257019043], + [-2.3792364597320557, -4.457008361816406], + [1.5793986320495605, -7.325224876403809], + [5.752878665924072, 7.709159851074219], + [-2.0837862491607666, -0.7276673316955566], + [0.14343339204788208, 10.651456832885742], + [-3.0038836002349854, -3.268026113510132], + [-2.9966554641723633, -3.446869134902954], + [2.8249356746673584, -3.987870454788208], + [-4.723161220550537, 4.88786506652832], + [3.055103063583374, -4.660985946655273], + [-5.275631427764893, 2.5127949714660645], + [-3.597797155380249, -1.2334558963775635], + [-5.362416744232178, 6.371227264404297], + [-2.1673696041107178, 2.5672287940979004], + [7.077814102172852, -1.6068567037582397], + [4.205438613891602, -4.667104721069336], + [-1.5023077726364136, -3.9731805324554443], + [-2.127755880355835, 2.5984396934509277], + [10.821471214294434, -2.500297784805298], + [7.450352191925049, 8.979747772216797], + [4.377852916717529, -2.7133219242095947], + [4.9934773445129395, -1.8538254499435425], + [-4.435791492462158, -6.516443729400635], + [0.10110431164503098, 12.425360679626465], + [0.7496781945228577, -0.8400025367736816], + [4.245416164398193, -3.1759440898895264], + [2.5058350563049316, -3.7618401050567627], + [9.246720314025879, -2.712327480316162], + [-6.941488742828369, -0.7071096897125244], + [0.04881703108549118, 11.805599212646484], + [-3.8990285396575928, -5.02509880065918], + [1.8277077674865723, -7.343964576721191], + [-3.3086495399475098, -4.183391571044922], + [7.430649280548096, 8.853300094604492], + [2.9162161350250244, -4.1197099685668945], + [-3.086700201034546, -2.6766979694366455], + [8.9642972946167, -2.4729626178741455], + [-4.89794397354126, -2.7572197914123535], + [0.7122353911399841, 6.897315502166748], + [6.584587574005127, 7.9614410400390625], + [7.159265995025635, -4.8938212394714355], + [8.32625675201416, -2.306328535079956], + [0.030970625579357147, 9.408507347106934], + [0.15388691425323486, 10.853511810302734], + [1.1091070175170898, 4.804015159606934], + [-1.399842619895935, 1.8730491399765015], + [3.295314073562622, -3.217223882675171], + [0.1964392066001892, 10.877494812011719], + [-2.568981409072876, -3.262451648712158], + [-1.9379432201385498, 1.0864129066467285], + [-4.822412490844727, -3.3598973751068115], + [0.842569887638092, 5.475405693054199], + [-0.9544910788536072, 1.791706919670105], + [-1.8611118793487549, 2.3363184928894043], + [-3.2241647243499756, -4.229032039642334], + [8.0493745803833, -2.4308159351348877], + [-2.565509557723999, 1.8985049724578857], + [2.812495470046997, -5.274562835693359], + [6.047308444976807, 7.601673126220703], + [6.415446758270264, 7.830864906311035], + [-7.617037296295166, 9.027229309082031], + [-4.733883380889893, 4.771072864532471], + [5.83353853225708, 7.238306045532227], + [3.4787185192108154, -4.418776035308838], + [-4.628658294677734, 4.7957963943481445], + [5.57260274887085, -3.4472131729125977], + [-1.1540296077728271, -0.7040643692016602], + [-3.9323408603668213, -5.7299723625183105], + [-2.887476921081543, -0.6653578281402588], + [-0.7763522863388062, 9.394750595092773], + [4.349948406219482, -3.748549222946167], + [-2.084981918334961, 2.122663974761963], + [4.584826946258545, 6.915401935577393], + [5.782992839813232, -1.23610258102417], + [-3.4538509845733643, -5.739142417907715], + [-2.2201950550079346, 1.8369488716125488], + [3.9805619716644287, 1.4028922319412231], + [5.001153469085693, -2.674598455429077], + [3.8673410415649414, -3.790602922439575], + [0.6561363935470581, -0.556725800037384], + [-3.0378096103668213, -2.9175755977630615], + [9.963932991027832, -2.4419281482696533], + [1.478190541267395, 0.9776750802993774], + [0.16673964262008667, 12.032814025878906], + [-5.59215784072876, 6.45361328125], + [-4.512552738189697, -1.1883338689804077], + [3.438878059387207, -3.134455919265747], + [-0.05553288012742996, 9.082504272460938], + [-2.6269326210021973, 1.9786614179611206], + [-6.517307758331299, 0.46630167961120605], + [-3.759554386138916, -5.830885887145996], + [-5.815120220184326, 6.472152233123779], + [-7.870265483856201, -0.5836061239242554], + [-3.7435741424560547, -2.6431519985198975], + [-5.659535884857178, 4.68312406539917], + [3.7070820331573486, -4.284784317016602], + [-1.7555328607559204, 2.1579909324645996], + [1.7228131294250488, 4.257359981536865], + [-3.2250497341156006, -4.825519561767578], + [0.15620100498199463, 9.740477561950684], + [-0.7876978516578674, 0.3542475700378418], + [0.8585516214370728, -0.5142459273338318], + [2.3333780765533447, -7.782875061035156], + [0.056156449019908905, 12.354877471923828], + [2.560678720474243, -5.671226501464844], + [3.4038710594177246, -6.31447172164917], + [0.6787221431732178, 7.5517683029174805], + [6.8308424949646, -2.443760633468628], + [0.17504984140396118, 11.037296295166016], + [0.43477368354797363, 10.715668678283691], + [-4.1590962409973145, -3.3533823490142822], + [2.8238062858581543, -3.927778959274292], + [3.178450345993042, -2.33723521232605], + [4.20736837387085, -6.336071014404297], + [5.563413143157959, 6.876643180847168], + [5.8942108154296875, 8.002314567565918], + [5.350070953369141, -1.2469298839569092], + [3.550706624984741, 4.969994068145752], + [-7.70779275894165, 1.3960168361663818], + [6.441011428833008, -1.4709382057189941], + [1.9693970680236816, -7.075572490692139], + [11.020576477050781, -2.5624876022338867], + [-4.02200174331665, -3.148563861846924], + [-2.3738720417022705, 2.4242680072784424], + [8.518845558166504, -2.557253837585449], + [2.921454668045044, -3.4153473377227783], + [-2.6936748027801514, -4.618803977966309], + [-1.4503173828125, 1.939175009727478], + [3.247140645980835, -2.6553237438201904], + [7.075456619262695, 8.528825759887695], + [-2.0397210121154785, 1.7519056797027588], + [1.4116976261138916, -7.375460147857666], + [-4.791398525238037, 6.024428844451904], + [10.694740295410156, -2.4213473796844482], + [-3.5954959392547607, -4.576421737670898], + [0.46575915813446045, -1.1419193744659424], + [-3.416745662689209, -0.18060517311096191], + [1.3507882356643677, -7.104843616485596], + [8.298056602478027, -2.217104196548462], + [2.9606919288635254, 5.809299468994141], + [2.2439382076263428, 5.756792068481445], + [-4.600466251373291, -7.059087753295898], + [-3.262709379196167, 5.115987777709961], + [-3.3646962642669678, -5.2269110679626465], + [9.194972038269043, -2.5211269855499268], + [-0.9504273533821106, -2.767829656600952], + [-5.009267330169678, 4.866096019744873], + [7.698336124420166, -2.236536741256714], + [11.293073654174805, -2.598583936691284], + [-4.601694583892822, -7.217202186584473], + [-5.118710041046143, 6.641891002655029], + [4.1945576667785645, 5.972084045410156], + [-3.0466372966766357, -3.0089304447174072], + [3.458674192428589, 6.662788391113281], + [3.8623759746551514, -8.053611755371094], + [11.043149948120117, -2.577371597290039], + [-4.232560634613037, -1.7825336456298828], + [5.246113300323486, -3.094191312789917], + [-2.527959108352661, 1.9545398950576782], + [4.847949028015137, 6.0591511726379395], + [8.36283016204834, -2.6909286975860596], + [2.5524415969848633, -3.761998414993286], + [4.020000457763672, -0.4174845218658447], + [-4.453519344329834, -1.84534752368927], + [3.087754726409912, -4.458607196807861], + [3.2382261753082275, -3.7996745109558105], + [-2.5281431674957275, 2.2321014404296875], + [-2.942694902420044, -2.1442458629608154], + [-3.313753366470337, -0.4480435848236084], + [-4.203834056854248, -2.8906610012054443], + [-2.508138418197632, 2.0777950286865234], + [-4.406569957733154, -3.1945488452911377], + [2.2735230922698975, 5.536120414733887], + [5.1688737869262695, -2.2577719688415527], + [4.467676639556885, 6.974621772766113], + [3.5304787158966064, 2.031991720199585], + [0.26627105474472046, 10.006826400756836], + [2.4913389682769775, 1.1229485273361206], + [1.9220025539398193, 4.242714881896973], + [-1.7761586904525757, 2.3515117168426514], + [-0.020969875156879425, -1.3399410247802734], + [2.5403754711151123, 5.811703681945801], + [3.045269250869751, -4.259322643280029], + [3.095001220703125, -4.420354843139648], + [5.20266580581665, -6.755466461181641], + [3.3009212017059326, 0.8948832750320435], + [8.407326698303223, -2.2973599433898926], + [-6.591939449310303, -0.37356865406036377], + [-4.282347679138184, -3.06655216217041], + [3.0654873847961426, -4.290163040161133], + [3.097820520401001, -4.021831512451172], + [-0.19351297616958618, 9.549736976623535], + [-0.024243421852588654, 13.042221069335938], + [-2.5675578117370605, 1.7026442289352417], + [-0.1347564160823822, -1.5973094701766968], + [2.9633138179779053, -1.2189210653305054], + [1.7859703302383423, -0.8125629425048828], + [-2.034910202026367, 0.5464853048324585], + [3.571038007736206, -3.1255171298980713], + [9.323429107666016, -2.4008920192718506], + [2.983919382095337, -6.596405506134033], + [-1.4441125392913818, 1.0335283279418945], + [4.472712993621826, -3.126014471054077], + [4.7406535148620605, 6.089175701141357], + [-3.962876558303833, 4.139147758483887], + [-2.3526535034179688, -3.796048879623413], + [5.934021472930908, 7.5935516357421875], + [2.708127737045288, -5.87350606918335], + [1.5412845611572266, -7.926737308502197], + [-2.3084657192230225, 2.8592090606689453], + [-3.8871209621429443, 4.131046772003174], + [-1.7469737529754639, -4.428511142730713], + [6.231260776519775, 7.579780101776123], + [2.051192283630371, 6.275111198425293], + [0.011585049331188202, 12.341975212097168], + [0.02071046084165573, 12.481719017028809], + [2.0823230743408203, 5.4149885177612305], + [7.605739116668701, 9.073814392089844], + [3.870706796646118, -3.4159624576568604], + [-2.67086124420166, 2.0229740142822266], + [-3.721806287765503, 4.873044490814209], + [3.5923404693603516, -8.328022003173828], + [3.2774994373321533, 5.917337417602539], + [3.6894009113311768, 1.238061785697937], + [0.1415310502052307, 9.901727676391602], + [-3.9686062335968018, -2.0412840843200684], + [2.4466378688812256, -7.662288665771484], + [-2.6442954540252686, -3.4099552631378174], + [-1.5382472276687622, 0.17935776710510254], + [-2.596946954727173, 1.690660834312439], + [2.8725507259368896, -3.539658308029175], + [-4.408470630645752, -0.08184748888015747], + [0.12253337353467941, 10.264250755310059], + [3.7306721210479736, 1.0662368535995483], + [4.282821178436279, -3.503779172897339], + [1.574146032333374, 5.354124546051025], + [3.8920552730560303, -3.367997884750366], + [-4.760251522064209, 0.8144587278366089], + [-3.034001588821411, -2.925809860229492], + [1.4892340898513794, 0.12984828650951385], + [-5.024868011474609, 7.695318222045898], + [0.23575425148010254, 10.408923149108887], + [4.118061542510986, -3.380247116088867], + [8.90452766418457, -2.3907923698425293], + [-0.11767507344484329, 9.407629013061523], + [2.297632932662964, 0.37899208068847656], + [9.341657638549805, -2.439882755279541], + [-1.7047805786132812, 2.0620594024658203], + [2.692617177963257, 1.651349663734436], + [5.3930559158325195, -3.095140218734741], + [4.274170875549316, 7.312445640563965], + [-3.971256971359253, -6.560088157653809], + [3.4479496479034424, 6.860598564147949], + [-2.6341354846954346, -3.374265432357788], + [2.5316529273986816, -2.956651449203491], + [-0.836732804775238, -1.9592046737670898], + [5.891754627227783, 7.810142993927002], + [-2.4347598552703857, -3.9852616786956787], + [-0.7469401955604553, -2.9168646335601807], + [-0.10624081641435623, -1.8183714151382446], + [3.2994260787963867, -4.7135725021362305], + [7.369932651519775, -1.9659479856491089], + [1.909732699394226, 5.072165489196777], + [7.634302616119385, -4.559572219848633], + [1.6032402515411377, -7.24191951751709], + [-4.541628360748291, -6.480420112609863], + [2.790264844894409, 1.646671175956726], + [8.9766206741333, -2.3295745849609375], + [-3.545776128768921, -1.3419660329818726], + [-6.754920482635498, 7.623529434204102], + [0.6617020964622498, -4.540523529052734], + [0.034414224326610565, 11.278901100158691], + [0.04479192942380905, 2.743168592453003], + [3.873394250869751, 5.2679877281188965], + [3.039029359817505, -4.20427942276001], + [-1.021401286125183, 1.8375765085220337], + [4.410638332366943, -3.9250264167785645], + [-2.653029441833496, 7.087257385253906], + [-3.9236323833465576, -6.812441349029541], + [2.900784969329834, -5.945717811584473], + [9.324002265930176, -2.4133899211883545], + [7.917198181152344, -2.432149887084961], + [9.340142250061035, -2.2596633434295654], + [2.653085708618164, -2.876400947570801], + [6.792119026184082, -1.6711963415145874], + [10.264616966247559, -2.39504075050354], + [-5.922335147857666, 1.00601327419281], + [-1.670027494430542, 2.0528430938720703], + [-5.211672782897949, -4.252424240112305], + [4.380133152008057, -8.072283744812012], + [1.673307180404663, -6.890500545501709], + [-4.128814220428467, -6.4896135330200195], + [4.253864765167236, 1.6191166639328003], + [0.8569350838661194, 2.36191725730896], + [-4.520495891571045, -3.3036630153656006], + [3.340176820755005, -4.658379077911377], + [2.7820780277252197, 3.5488646030426025], + [-5.305878639221191, -2.8269529342651367], + [-1.0256165266036987, 0.15186253190040588], + [4.974071979522705, -5.182433605194092], + [-2.7920167446136475, -4.306216239929199], + [3.34659743309021, -3.1595308780670166], + [2.544635057449341, -7.564977169036865], + [0.06760775297880173, 9.155069351196289], + [-2.405622720718384, 2.1584537029266357], + [-0.05221102386713028, 0.8265271186828613], + [4.39457893371582, -3.7079391479492188], + [3.663707971572876, -3.239316701889038], + [-2.3277971744537354, 2.7439634799957275], + [2.8362553119659424, -3.3980371952056885], + [-3.4194397926330566, -3.5780839920043945], + [0.9012930989265442, 11.107172966003418], + [2.9499571323394775, -4.1660027503967285], + [-1.667394757270813, 1.390762448310852], + [-0.030889160931110382, 12.664923667907715], + [-6.461981296539307, 0.18416929244995117], + [3.008678674697876, -6.503314971923828], + [-4.486446857452393, -6.730220794677734], + [-2.2807767391204834, 2.18810772895813], + [8.47114086151123, -2.4817311763763428], + [-2.465200424194336, -2.17718243598938], + [-0.89756840467453, -0.42398324608802795], + [-4.195927143096924, -6.228919982910156], + [6.1361308097839355, -1.7677987813949585], + [2.5687849521636963, -2.344453811645508], + [1.4959487915039062, -7.218203067779541], + [-1.9484773874282837, 2.320906639099121], + [10.174699783325195, -2.407578945159912], + [3.078552007675171, -4.220044136047363], + [1.879887580871582, 1.4819244146347046], + [-2.476130962371826, 1.5503846406936646], + [-0.3755028247833252, 2.283078908920288], + [8.747339248657227, -2.309232711791992], + [-3.5635907649993896, -3.245793581008911], + [-4.390714645385742, -3.4487335681915283], + [9.389275550842285, -2.380383253097534], + [-4.665330410003662, 5.3788838386535645], + [-6.914086818695068, 8.019633293151855], + [-1.3050405979156494, 1.6215107440948486], + [-1.4368563890457153, -3.848451852798462], + [-4.792500019073486, -6.130732536315918], + [0.1177028939127922, 9.784622192382812], + [-4.481362819671631, -3.697270393371582], + [2.726921796798706, -3.4402313232421875], + [2.662144422531128, -3.6828811168670654], + [2.662627935409546, -9.547951698303223], + [-5.573672771453857, 7.1117048263549805], + [6.4211344718933105, -4.145870685577393], + [-2.166395425796509, 0.6328475475311279], + [-3.8299105167388916, -5.299532413482666], + [-0.11471623927354813, 13.372655868530273], + [0.074656181037426, 9.342782974243164], + [4.012519359588623, -3.332475423812866], + [8.476840019226074, -2.26283860206604], + [2.275967836380005, -9.058725357055664], + [1.8601446151733398, 2.9284684658050537], + [0.20743101835250854, 11.095206260681152], + [4.488955974578857, -3.3527913093566895], + [0.3296761214733124, -1.2684284448623657], + [1.3241809606552124, 0.3802269399166107], + [-4.508965969085693, -6.241781234741211], + [-5.608245372772217, 0.10774755477905273], + [9.262076377868652, -2.204833745956421], + [7.852752208709717, -2.1570520401000977], + [-2.1876189708709717, 1.1160964965820312], + [3.1240599155426025, -5.484835624694824], + [0.7622435688972473, 5.939548492431641], + [3.3109917640686035, -9.196075439453125], + [3.194655656814575, -5.541832447052002], + [7.9430251121521, -1.9781782627105713], + [3.726844072341919, -3.2570760250091553], + [7.215944766998291, -1.6946742534637451], + [-4.651889324188232, -5.487005233764648], + [-2.88456130027771, 2.6185948848724365], + [2.9292993545532227, -4.892141342163086], + [3.463686943054199, -5.667636871337891], + [3.0494768619537354, 0.5696156024932861], + [-3.986585855484009, 6.699099540710449], + [-2.572476863861084, 1.9345284700393677], + [0.7245941758155823, -6.2207536697387695], + [0.7902693152427673, -0.5687631368637085], + [-4.529461860656738, -2.81327748298645], + [2.454005479812622, 5.041927814483643], + [-4.189428806304932, -1.4390918016433716], + [3.575953483581543, -3.2878334522247314], + [-3.197376251220703, -3.4931204319000244], + [2.9686386585235596, -7.665857791900635], + [-3.4029972553253174, -1.7922300100326538], + [-5.1896514892578125, 4.633413314819336], + [-4.131158351898193, -1.4803825616836548], + [8.153519630432129, -2.229163408279419], + [5.224453449249268, -3.6828529834747314], + [7.09285306930542, 8.943582534790039], + [0.09062617272138596, 11.473621368408203], + [7.216080188751221, -2.81683611869812], + [9.987154006958008, -2.4629948139190674], + [0.6621549725532532, 11.450271606445312], + [3.2543065547943115, -6.371889114379883], + [-2.3657820224761963, 1.8910627365112305], + [8.104456901550293, -2.5117738246917725], + [0.04708682745695114, 12.201436996459961], + [4.054947853088379, 1.6457911729812622], + [4.67903470993042, 5.950473785400391], + [0.034901611506938934, 9.421758651733398], + [-6.8833394050598145, -0.8069259524345398], + [-3.637348175048828, 5.432500839233398], + [7.146482467651367, 8.859561920166016], + [2.8010127544403076, -8.864347457885742], + [1.4518465995788574, -8.228221893310547], + [6.41493558883667, 7.9447736740112305], + [6.5625739097595215, 7.997979164123535], + [6.1057610511779785, 7.59234094619751], + [-3.746093511581421, -2.7538843154907227], + [0.5671587586402893, -0.9042003154754639], + [5.104697227478027, 7.546233654022217], + [0.09253524988889694, 9.879461288452148], + [6.62804651260376, -2.8401873111724854], + [3.9078779220581055, 0.8837980031967163], + [6.339365482330322, -1.3749576807022095], + [-3.876521348953247, 7.205447196960449], + [3.344796657562256, -2.645522356033325], + [6.860928058624268, 8.220978736877441], + [3.6274917125701904, -5.536045551300049], + [1.323951244354248, -4.66007137298584], + [-2.712599039077759, -2.9990832805633545], + [1.8939754962921143, -8.091569900512695], + [-1.876882791519165, 0.6291712522506714], + [-2.8375561237335205, 2.4175400733947754], + [-4.4703497886657715, -6.477169513702393], + [-5.287033557891846, -6.6056718826293945], + [-7.896960258483887, 0.7958148717880249], + [-5.38387393951416, -5.826087474822998], + [3.019270420074463, 1.914142370223999], + [-5.500678539276123, 1.4194352626800537], + [-3.7381856441497803, 3.490175247192383], + [-0.439350426197052, 9.440391540527344], + [-2.249094009399414, 2.283090353012085], + [-4.271651744842529, -5.898577690124512], + [-4.202579975128174, 5.751917362213135], + [6.782541751861572, 8.260578155517578], + [0.22634869813919067, 10.937932014465332], + [9.23015308380127, -2.3312795162200928], + [-1.8864799737930298, -0.9552115797996521], + [5.367000579833984, 7.207508087158203], + [6.346786975860596, 8.669590950012207], + [7.864822864532471, -1.9316444396972656], + [-6.907087802886963, 0.15707653760910034], + [3.9990546703338623, -3.522765636444092], + [2.584934949874878, -6.922361373901367], + [-1.7851049900054932, 0.9016780257225037], + [3.067854166030884, 1.6074436902999878], + [3.285829544067383, 5.6564741134643555], + [0.8315915465354919, -6.189919471740723], + [-4.70332145690918, -6.33469295501709], + [3.466022253036499, -5.55712890625], + [-5.307363033294678, -5.609110355377197], + [-4.375810623168945, 4.320736885070801], + [3.9903299808502197, 6.921976566314697], + [3.117500066757202, -4.4117608070373535], + [8.21047592163086, -2.249906301498413], + [8.578330993652344, -2.3260064125061035], + [0.1582576036453247, 11.858213424682617], + [3.084721565246582, -5.168501853942871], + [2.1151955127716064, 0.6419129371643066], + [2.130369186401367, 1.70556640625], + [-3.1842308044433594, 5.581559181213379], + [1.9935367107391357, 5.351313591003418], + [-0.08789866417646408, -1.5663379430770874], + [2.6406285762786865, -2.7779791355133057], + [2.686627149581909, -7.031737327575684], + [8.72696590423584, -2.318984031677246], + [-4.375992298126221, -6.520613670349121], + [3.027134656906128, -4.299960136413574], + [0.0667724534869194, 9.257128715515137], + [10.412810325622559, -2.377487897872925], + [-4.3267645835876465, 4.893089294433594], + [0.12494855374097824, 10.207321166992188], + [-4.542935371398926, -3.5694406032562256], + [2.9735281467437744, -5.82485294342041], + [0.08306150883436203, 9.49996566772461], + [-3.104055881500244, 5.767219543457031], + [-1.3250082731246948, 1.6688376665115356], + [10.248358726501465, -2.544954776763916], + [-5.430660724639893, 4.723095417022705], + [2.7703566551208496, 1.7255779504776], + [-2.4710822105407715, 1.4532837867736816], + [7.444547176361084, -3.8716928958892822], + [-1.9944932460784912, 1.5910985469818115], + [3.002913236618042, -4.2585344314575195], + [5.552698135375977, 7.581607818603516], + [5.955963134765625, 8.025371551513672], + [8.926290512084961, -2.4189023971557617], + [2.617719888687134, -9.455586433410645], + [7.467897415161133, -2.4394705295562744], + [-1.3231942653656006, -4.080328464508057], + [3.5574138164520264, -5.3882317543029785], + [-2.1601321697235107, 2.825263023376465], + [0.46042245626449585, -0.8216739296913147], + [-0.1466149389743805, -1.678444504737854], + [-3.5233564376831055, -5.455901145935059], + [-0.03848815709352493, 12.683399200439453], + [3.1204183101654053, 0.98988938331604], + [2.6775901317596436, 4.379412651062012], + [-0.20105323195457458, -1.6875691413879395], + [7.088520050048828, -1.7915536165237427], + [5.513365268707275, 7.722357749938965], + [1.9103708267211914, 0.10890898108482361], + [-4.5822978019714355, -0.8326867818832397], + [7.112172603607178, -4.821882724761963], + [7.054464817047119, -1.903177261352539], + [8.757065773010254, -2.225560426712036], + [3.4830191135406494, -1.0952868461608887], + [-2.3497447967529297, 2.518916130065918], + [3.270392656326294, -4.289328098297119], + [2.9308300018310547, -2.406797170639038], + [-3.928161144256592, -1.1589230298995972], + [2.2515816688537598, -8.240355491638184], + [5.649530410766602, -1.1931676864624023], + [2.8533647060394287, -3.9732506275177], + [2.552968740463257, 1.136845588684082], + [-2.4408862590789795, 1.7836694717407227], + [6.05215311050415, -3.026254415512085], + [-4.340394973754883, -4.281520366668701], + [6.5930914878845215, 8.179292678833008], + [0.3751184940338135, 10.97597885131836], + [9.266626358032227, -2.6333534717559814], + [1.8137032985687256, -6.599647521972656], + [-1.2739319801330566, -0.4113864302635193], + [-0.7619790434837341, -2.662184953689575], + [-1.9430623054504395, 2.4091310501098633], + [-0.36298322677612305, -0.1104600578546524], + [-4.68670129776001, -5.964221954345703], + [3.6122100353240967, -6.706427574157715], + [1.1898488998413086, -6.843911170959473], + [3.190929651260376, 1.448270320892334], + [9.051034927368164, -2.5140416622161865], + [1.8070769309997559, 5.314164161682129], + [1.6098649501800537, -0.9857031106948853], + [5.594781398773193, -1.3463157415390015], + [3.8774330615997314, 6.497746467590332], + [0.8561798930168152, -0.26087912917137146], + [-4.798496723175049, -6.556253910064697], + [-4.8528923988342285, -3.2868454456329346], + [-1.8469085693359375, 1.4398711919784546], + [-3.7467353343963623, -1.908119797706604], + [-2.1614010334014893, 2.4692559242248535], + [1.6527462005615234, 2.1595020294189453], + [-2.296574592590332, -4.398046493530273], + [-6.323919773101807, -0.1640995740890503], + [6.488232135772705, -1.4132850170135498], + [-0.05464721471071243, 12.492097854614258], + [-4.630090236663818, 6.412421226501465], + [10.950119018554688, -2.4176242351531982], + [8.01435375213623, -2.5526111125946045], + [-4.277498245239258, -6.066112518310547], + [-0.8835194110870361, -2.686340093612671], + [-3.306813955307007, -6.336259841918945], + [1.4893208742141724, -7.619760513305664], + [2.6677405834198, 0.9576045274734497], + [0.451015830039978, -5.097640514373779], + [2.43245005607605, 0.3202456831932068], + [9.064062118530273, -2.3777215480804443], + [-2.2267494201660156, 2.728177785873413], + [-5.8346686363220215, 2.7751686573028564], + [8.686493873596191, -2.3729279041290283], + [-5.307602405548096, 5.620013236999512], + [-6.9665632247924805, 2.812706708908081], + [-3.172872304916382, -4.971469879150391], + [-5.6087751388549805, 4.473320960998535], + [1.4850575923919678, 6.135400772094727], + [-4.555078983306885, -6.803142070770264], + [2.6658506393432617, 5.964859962463379], + [0.027566902339458466, 9.326822280883789], + [-3.498573064804077, -4.010362148284912], + [-1.5891799926757812, 1.8070435523986816], + [-5.890804767608643, 7.213601589202881], + [-5.321805477142334, 5.906606674194336], + [-7.356537342071533, 0.03849136456847191], + [-0.9333239197731018, 1.6567420959472656], + [3.7902634143829346, -3.3216018676757812], + [-5.380884647369385, 1.1918294429779053], + [-1.9077444076538086, 2.1436617374420166], + [3.488429307937622, -5.2208123207092285], + [5.467526912689209, -5.34067440032959], + [-4.17217493057251, -5.418184280395508], + [-2.1420490741729736, 2.4001657962799072], + [-3.147726058959961, -4.056270122528076], + [6.57218599319458, -5.205556869506836], + [-3.2791748046875, -5.916600227355957], + [-5.9649529457092285, 6.496169090270996], + [4.90176248550415, -2.384605884552002], + [7.692093372344971, 9.093493461608887], + [3.219207763671875, -3.742583751678467], + [-2.346836805343628, -4.041165828704834], + [-2.782620429992676, -4.306282043457031], + [5.826685428619385, -2.939161777496338], + [10.123255729675293, -2.3715708255767822], + [10.118775367736816, -2.46158504486084], + [-4.438754558563232, 4.403140068054199], + [1.6663694381713867, -7.3130998611450195], + [-0.0503663495182991, 13.67847728729248], + [2.76615309715271, -7.652790069580078], + [3.0748350620269775, -4.404874324798584], + [0.01908927410840988, 11.99770736694336], + [-0.016095884144306183, 12.357606887817383], + [3.647951602935791, -5.526813507080078], + [1.9924705028533936, -6.299611568450928], + [2.1510322093963623, 0.17187774181365967], + [5.011824131011963, 2.153935194015503], + [1.8645076751708984, -8.007464408874512], + [-2.909494638442993, 6.219666957855225], + [5.749632358551025, 7.845520496368408], + [-2.5528628826141357, -4.723174095153809], + [-5.129214286804199, 3.471879482269287], + [10.487914085388184, -2.5116703510284424], + [-6.811698913574219, 7.960479736328125], + [-2.2165963649749756, 2.721572160720825], + [8.064949989318848, -2.2560417652130127], + [6.853506565093994, -1.6850625276565552], + [-5.366464614868164, 6.539111137390137], + [-4.7339959144592285, -7.491857528686523], + [7.016485691070557, 8.58526611328125], + [7.267272472381592, 9.116981506347656], + [-0.14298158884048462, 9.418608665466309], + [-4.340436935424805, -4.075570106506348], + [-3.4531829357147217, -3.1506869792938232], + [3.6592957973480225, -4.130594253540039], + [10.7623929977417, -2.4163076877593994], + [-3.1580588817596436, -3.092240571975708], + [2.9046237468719482, -2.7018163204193115], + [-4.174491882324219, -6.174205303192139], + [-2.181856870651245, 2.8986051082611084], + [5.937073230743408, -5.090550422668457], + [-1.9315459728240967, 2.2657790184020996], + [3.569068431854248, -6.080131530761719], + [-3.2932212352752686, -4.320206642150879], + [4.615593433380127, -4.0698018074035645], + [3.389409065246582, -6.9841628074646], + [-6.055904865264893, 6.639939785003662], + [4.989945888519287, 6.380766868591309], + [8.596617698669434, -2.5500853061676025], + [1.4906916618347168, -6.268139839172363], + [7.702783584594727, -1.982899785041809], + [-4.324836730957031, -7.254131317138672], + [5.168239116668701, 7.7633867263793945], + [4.26060152053833, 5.95980167388916], + [7.09974479675293, 8.498427391052246], + [2.3842742443084717, 5.262656211853027], + [5.742224216461182, -2.787475824356079], + [6.9637885093688965, -5.339471340179443], + [0.2813972234725952, 11.731006622314453], + [-1.2973525524139404, 1.7032630443572998], + [2.192293882369995, 3.958204984664917], + [-2.294532060623169, 2.492849111557007], + [-4.393678665161133, -6.7995100021362305], + [9.309704780578613, -2.3057992458343506], + [0.1631219983100891, 11.633291244506836], + [1.3205463886260986, 4.69063138961792], + [0.5409083962440491, -1.032454013824463], + [-1.206916332244873, -3.6987595558166504], + [-2.8041536808013916, 1.278896450996399], + [-3.1594884395599365, 0.6758589744567871], + [3.536079168319702, -3.2061469554901123], + [-4.877391338348389, -3.9342143535614014], + [11.552713394165039, -2.6725728511810303], + [-4.030302047729492, 5.296231746673584], + [4.5333075523376465, 6.832638740539551], + [-5.0384321212768555, 5.514463424682617], + [-4.658796310424805, -0.6474243402481079], + [2.35868239402771, 0.3728974461555481], + [2.360140085220337, -8.184925079345703], + [-2.0606095790863037, 2.345838785171509], + [1.9245233535766602, 6.008749961853027], + [-1.7958632707595825, -2.0716466903686523], + [3.82676100730896, 1.5003621578216553], + [-6.822179317474365, -0.6209665536880493], + [7.796015739440918, -2.4378726482391357], + [-2.849686861038208, 1.2150251865386963], + [8.057741165161133, -2.3735554218292236], + [1.8569915294647217, 0.8696855306625366], + [-1.066565752029419, -2.2944822311401367], + [-2.2200889587402344, 1.8029491901397705], + [4.971081256866455, -1.1001582145690918], + [-6.019637584686279, 0.16998982429504395], + [-2.1670968532562256, -3.224233865737915], + [6.0704450607299805, 7.847257137298584], + [3.540580987930298, -4.069858074188232], + [5.860212802886963, -2.986010789871216], + [-2.4413392543792725, 2.031393051147461], + [-4.1787614822387695, -6.813323497772217], + [-2.6194705963134766, 6.901864051818848], + [2.9117536544799805, -8.429576873779297], + [3.5924501419067383, -3.4764626026153564], + [-3.0804343223571777, 4.790360450744629], + [2.333451986312866, -7.6058244705200195], + [7.931969165802002, -2.0747625827789307], + [-3.6822359561920166, -2.9650232791900635], + [-4.294253826141357, 3.3688061237335205], + [3.0513455867767334, -4.331712245941162], + [8.702296257019043, -2.398866891860962], + [5.754404544830322, 7.772997856140137], + [8.525858879089355, -2.468161106109619], + [3.2967774868011475, 0.8321956396102905], + [6.672510623931885, 8.332157135009766], + [-0.06304467469453812, 9.614531517028809], + [-5.476992130279541, 6.386486053466797], + [-1.993777871131897, 2.548449754714966], + [-3.8034300804138184, -1.0931187868118286], + [-2.5084805488586426, -0.7227673530578613], + [-4.666083335876465, -2.687734365463257], + [4.7186455726623535, -3.4497032165527344], + [-4.44611930847168, -6.335968017578125], + [3.6737911701202393, -7.911595821380615], + [4.04656457901001, 1.5313324928283691], + [0.023289792239665985, 13.075023651123047], + [6.123762607574463, 7.621826171875], + [-1.3923444747924805, -2.6800732612609863], + [-4.315950870513916, -2.417729616165161], + [-5.199880123138428, -1.1101082563400269], + [11.095656394958496, -2.481830358505249], + [2.453864097595215, 5.922504425048828], + [7.3437299728393555, -2.011014461517334], + [3.1459102630615234, -3.130420446395874], + [2.9482619762420654, -4.147582054138184], + [-4.721867084503174, -7.1172919273376465], + [6.385408401489258, -2.8832199573516846], + [4.129019737243652, 6.446598052978516], + [4.514184474945068, -1.708385944366455], + [1.5314053297042847, 0.08821986615657806], + [1.345337152481079, 5.671378135681152], + [-2.394207239151001, 3.1274991035461426], + [-2.500420093536377, -0.6268991827964783], + [0.21765542030334473, 11.683972358703613], + [1.5690627098083496, -1.5431087017059326], + [-2.4613475799560547, 1.348061203956604], + [8.996138572692871, -2.408404588699341], + [8.937383651733398, -2.423757791519165], + [-4.398639678955078, 5.879678726196289], + [-6.613495349884033, 7.4328484535217285], + [-0.009045429527759552, 9.757853507995605], + [2.541661262512207, -1.648027777671814], + [-3.467478036880493, -3.2891292572021484], + [5.073575019836426, 7.586897850036621], + [2.842313051223755, -4.103480339050293], + [-2.5452210903167725, 1.6247491836547852], + [3.282003164291382, 5.9999589920043945], + [3.57240891456604, -2.7057061195373535], + [-0.9455901980400085, 1.318490982055664], + [5.560399532318115, -4.90084171295166], + [-3.26062273979187, -3.2246017456054688], + [-4.693413257598877, -2.1601102352142334], + [1.5809674263000488, 4.502974510192871], + [3.5737340450286865, -7.183068752288818], + [-2.1006126403808594, 2.466585159301758], + [7.23363733291626, -2.550664186477661], + [6.9472126960754395, -4.382863998413086], + [1.5906803607940674, 5.820623874664307], + [-4.302742004394531, 3.6687726974487305], + [-3.484919309616089, 4.658324241638184], + [-2.184161424636841, -4.379455089569092], + [-8.513870239257812, 0.572273850440979], + [8.32627010345459, -2.22119140625], + [-4.969779014587402, -4.797770023345947], + [3.361510992050171, 5.721142292022705], + [7.736762046813965, -1.800618052482605], + [-3.224762201309204, 4.522697448730469], + [0.033786527812480927, 12.38685417175293], + [-1.5893104076385498, -3.0795671939849854], + [-4.499701023101807, 4.229156494140625], + [0.23925179243087769, 11.439424514770508], + [8.261374473571777, -2.2137227058410645], + [-4.073830604553223, 3.8457748889923096], + [-2.475428342819214, 2.25252103805542], + [5.6398186683654785, 7.775681495666504], + [-5.18242073059082, -0.8755096793174744], + [3.638856887817383, -6.466372013092041], + [9.190587997436523, -2.3900463581085205], + [3.8966615200042725, -8.474802017211914], + [-0.007752902805805206, 9.146339416503906], + [-4.268532752990723, -1.0068670511245728], + [7.670926570892334, 9.066347122192383], + [-2.557816743850708, -1.6118862628936768], + [-2.0488572120666504, -3.424957752227783], + [-6.196189880371094, -0.3209860324859619], + [0.5146523714065552, -5.067821502685547], + [4.057741165161133, -5.880715847015381], + [-6.422799587249756, 0.5967389345169067], + [7.482140064239502, -1.9557801485061646], + [2.641833543777466, -7.527164936065674], + [-2.9841387271881104, -5.430436134338379], + [6.105974197387695, -1.516465425491333], + [7.083837985992432, 8.800482749938965], + [-2.5969746112823486, -2.500382900238037], + [5.971584796905518, -5.489049911499023], + [7.42349100112915, -2.1457924842834473], + [2.432563066482544, 4.878846645355225], + [7.759917736053467, -1.792618989944458], + [-3.2297346591949463, -1.369881272315979], + [2.0629680156707764, 5.221269130706787], + [0.017260365188121796, 2.3835246562957764], + [-6.730663776397705, 1.715598702430725], + [0.42154353857040405, -0.37436386942863464], + [2.4100840091705322, -7.165661811828613], + [-2.30473256111145, 2.5743472576141357], + [3.476552724838257, -3.8967483043670654], + [-7.546877384185791, -0.3063678741455078], + [3.4150938987731934, -3.6156070232391357], + [0.006333120167255402, -1.0063972473144531], + [-2.1612396240234375, 2.3614985942840576], + [-3.6401658058166504, -5.764481544494629], + [-1.9394861459732056, 2.232133150100708], + [1.6369986534118652, -6.788308143615723], + [-5.431588649749756, 5.476497650146484], + [3.556579113006592, -3.3476710319519043], + [-1.656712293624878, 2.5082597732543945], + [-6.406863212585449, 6.707575798034668], + [0.856943666934967, -0.4539024829864502], + [8.228358268737793, -2.3507678508758545], + [4.4690070152282715, -3.559969186782837], + [2.9954781532287598, -4.243721961975098], + [1.9988329410552979, 2.2256863117218018], + [4.807823657989502, -4.247720241546631], + [3.032355546951294, -4.180751800537109], + [-1.332517147064209, 2.055265426635742], + [-6.819457530975342, 7.464833736419678], + [-3.3254520893096924, -2.164079189300537], + [-6.978010654449463, -0.06036234274506569], + [2.892967462539673, -3.4904816150665283], + [-3.8743436336517334, 6.161594390869141], + [6.893087863922119, -2.7835466861724854], + [-4.253465175628662, 4.8160810470581055], + [3.454906463623047, -4.054126739501953], + [3.484663963317871, -3.871206045150757], + [0.018154434859752655, 12.091875076293945], + [3.9481613636016846, -3.775221347808838], + [4.1982340812683105, -4.823387145996094], + [0.2599887251853943, 11.321741104125977], + [4.2939229011535645, -1.0845412015914917], + [3.2855379581451416, 5.42772102355957], + [-4.529962539672852, -6.547554969787598], + [-1.8225336074829102, -0.5040742754936218], + [1.5352997779846191, -7.019837856292725], + [-2.281156301498413, 2.32812762260437], + [8.36146068572998, -2.4079082012176514], + [6.518728256225586, -1.4297528266906738], + [1.807413935661316, 1.9876941442489624], + [0.2713245749473572, 9.757615089416504], + [-5.243137836456299, 6.134195327758789], + [0.2322794795036316, 10.81818675994873], + [-2.3947670459747314, 0.6132365465164185], + [-0.41423800587654114, 0.07301902770996094], + [-2.7168798446655273, 1.9796730279922485], + [3.8988897800445557, -8.663223266601562], + [-2.0707292556762695, 2.4128165245056152], + [-2.992379665374756, -2.3362953662872314], + [-2.135970115661621, 2.416579484939575], + [1.9160966873168945, 5.143700122833252], + [6.585078239440918, 8.041730880737305], + [1.9426560401916504, 0.06597486138343811], + [-6.001078128814697, -0.713715136051178], + [8.648144721984863, -2.5504138469696045], + [0.6685656309127808, -6.281731605529785], + [8.675024032592773, -2.3465940952301025], + [-0.04872751981019974, 9.234842300415039], + [3.4944961071014404, 1.49803626537323], + [1.0642133951187134, -0.28355613350868225], + [4.473469257354736, 6.271982192993164], + [3.236710786819458, -4.559817314147949], + [3.2630398273468018, 0.8378905653953552], + [0.05714934319257736, 13.054947853088379], + [-3.8901004791259766, -1.9401015043258667], + [4.5554938316345215, 6.721517086029053], + [3.114035129547119, 5.757838249206543], + [3.1211435794830322, -9.064579963684082], + [0.40701669454574585, 11.054313659667969], + [3.92340350151062, 1.808057427406311], + [-1.721541404724121, 1.805944800376892], + [4.695672512054443, -3.586656093597412], + [-4.4642839431762695, -4.009079933166504], + [-5.8622002601623535, 6.624765872955322], + [-3.51725697517395, -0.6936347484588623], + [5.81613302230835, -1.1734776496887207], + [5.8454413414001465, 7.245373725891113], + [-0.6084572672843933, 5.675670623779297], + [0.4950416088104248, -5.016118049621582], + [1.705019474029541, 1.7769230604171753], + [-1.883817195892334, -2.609117269515991], + [5.060305118560791, 7.589733123779297], + [2.3969027996063232, -8.162651062011719], + [1.9920713901519775, 5.072380065917969], + [11.396221160888672, -2.5469563007354736], + [0.06990890949964523, 12.61113166809082], + [-2.6102137565612793, 1.9575666189193726], + [5.4803690910339355, 7.644064426422119], + [-2.0532736778259277, 2.1896233558654785], + [5.953400135040283, -5.216730117797852], + [-5.114004135131836, -2.0480079650878906], + [7.292195796966553, -2.8316590785980225], + [1.8195031881332397, 3.005642890930176], + [2.5609846115112305, -3.6608493328094482], + [2.1840248107910156, -6.554457664489746], + [2.710103988647461, -8.255942344665527], + [-2.2339258193969727, -1.6648715734481812], + [-2.425598382949829, -2.701672315597534], + [-1.4955523014068604, 1.9492254257202148], + [-2.5906331539154053, 1.8718286752700806], + [5.407706260681152, -0.6685537099838257], + [-4.713824272155762, 1.5643415451049805], + [-1.5813857316970825, 2.134752035140991], + [2.4826371669769287, 3.8311541080474854], + [-2.355933904647827, 2.062617301940918], + [-0.02905190736055374, 12.20599365234375], + [0.17403098940849304, -2.7272353172302246], + [-2.3609673976898193, 1.8761589527130127], + [-6.114248752593994, 6.956262588500977], + [-3.4259822368621826, 3.9174411296844482], + [3.707209348678589, -5.573993682861328], + [-2.8165810108184814, 6.864850997924805], + [-2.134537935256958, 0.8788721561431885], + [-2.189472198486328, 2.7847349643707275], + [0.6036030650138855, -0.6867871284484863], + [-2.7415175437927246, -2.171077013015747], + [-2.4183943271636963, 1.528822422027588], + [2.779069662094116, 0.7853044867515564], + [3.1293623447418213, -7.34006404876709], + [2.783759832382202, -3.809133291244507], + [9.213424682617188, -2.4282588958740234], + [-3.5689351558685303, -3.682246446609497], + [3.940133810043335, -2.6980040073394775], + [4.432142734527588, -0.8177226185798645], + [2.15108323097229, 3.6243739128112793], + [0.5921101570129395, 0.4656462073326111], + [2.9237961769104004, -6.674948215484619], + [2.8976657390594482, -3.644366502761841], + [-2.0998194217681885, 2.4511425495147705], + [-5.998822212219238, -1.9050291776657104], + [-1.289642572402954, 1.6469122171401978], + [6.571056842803955, 8.079265594482422], + [-3.5865886211395264, -4.423547744750977], + [-4.821532726287842, -1.709477186203003], + [0.20548254251480103, 10.739940643310547], + [-0.7276866436004639, 4.767559051513672], + [2.2204339504241943, 0.37526872754096985], + [-2.418578863143921, -1.5231786966323853], + [-4.024268627166748, -5.101414680480957], + [-2.9611499309539795, -2.2814276218414307], + [6.223729610443115, -1.4389543533325195], + [2.422747850418091, 0.24273619055747986], + [8.78874683380127, -2.17035174369812], + [4.42787504196167, 1.9116815328598022], + [-2.5442988872528076, 2.156871795654297], + [3.643667459487915, -7.89931583404541], + [-2.216092586517334, 2.4626002311706543], + [1.9935529232025146, 1.7667183876037598], + [0.197024405002594, 10.984140396118164], + [1.0560412406921387, -4.082804203033447], + [2.652202844619751, 0.5313844680786133], + [2.48478627204895, -8.617691040039062], + [2.056729555130005, 1.3032561540603638], + [-6.454046726226807, 6.901312828063965], + [-3.2565524578094482, 1.7234970331192017], + [9.143610000610352, -2.4679043292999268], + [3.611581563949585, -3.0951945781707764], + [5.7658162117004395, -1.211064100265503], + [1.697098970413208, -7.443646430969238], + [-2.0035383701324463, 2.772916555404663], + [-1.8547738790512085, 2.133286237716675], + [3.3593685626983643, -5.852293014526367], + [-2.1887104511260986, 2.7127556800842285], + [-1.6659977436065674, 1.0056246519088745], + [0.7142229676246643, 1.005149006843567], + [6.3498101234436035, 8.167476654052734], + [-5.796768665313721, -1.8243693113327026], + [-4.6427812576293945, -2.095797061920166], + [3.6379077434539795, -8.689778327941895], + [0.09954755753278732, 10.161491394042969], + [1.0000845193862915, -2.0125720500946045], + [-2.3370041847229004, 2.3676135540008545], + [3.009275197982788, -7.588132858276367], + [0.1362931728363037, 9.601995468139648], + [-1.3014087677001953, -4.056331634521484], + [-0.12154979258775711, 14.2810697555542], + [-4.964110851287842, 3.5145022869110107], + [0.6442580223083496, -0.934701144695282], + [-5.975741863250732, -0.6342117786407471], + [3.8506009578704834, -3.595524787902832], + [-6.314239978790283, 7.751385688781738], + [-0.2791689336299896, -1.772905945777893], + [-3.2626445293426514, -1.0872622728347778], + [-2.106024980545044, 2.333200693130493], + [3.1396291255950928, -3.5841732025146484], + [-3.5868618488311768, 6.051900863647461], + [1.7091171741485596, -5.869018077850342], + [3.4510586261749268, -5.82512092590332], + [8.943671226501465, -2.486341953277588], + [5.8484601974487305, -5.748894691467285], + [6.807481288909912, -5.404385089874268], + [1.3375418186187744, 5.488495826721191], + [4.2448554039001465, -1.6012989282608032], + [-3.689732074737549, 7.962958335876465], + [-2.962805986404419, -2.93415904045105], + [5.484828472137451, 6.855480670928955], + [-2.181377649307251, 1.2496284246444702], + [-3.03338360786438, 0.9658187627792358], + [0.17907780408859253, 10.360006332397461], + [5.620677471160889, -1.3244636058807373], + [-6.757423400878906, -0.30985987186431885], + [-2.6954891681671143, 2.3877294063568115], + [-2.0801498889923096, 1.1043763160705566], + [-4.575013160705566, -6.64469051361084], + [-0.43956810235977173, -1.971519112586975], + [2.3868408203125, 5.537280559539795], + [6.432827949523926, 7.852747440338135], + [-4.459951877593994, -6.98279333114624], + [4.477576732635498, -3.853928804397583], + [-1.7238742113113403, 1.9308282136917114], + [0.12908720970153809, 11.594949722290039], + [3.322387933731079, 6.272754669189453], + [3.923091173171997, -3.6627070903778076], + [3.6573495864868164, -3.2689661979675293], + [-2.1724350452423096, -3.159851312637329], + [1.764046549797058, 5.920149803161621], + [-3.7331607341766357, -1.950179934501648], + [-5.792304039001465, 4.644602298736572], + [2.431718587875366, -6.300087928771973], + [0.11043482273817062, 12.102014541625977], + [-6.400770664215088, 2.443134069442749], + [3.342134714126587, -4.720654487609863], + [4.404460906982422, -3.494018077850342], + [1.4401206970214844, -6.600366592407227], + [4.910980701446533, 6.963070869445801], + [9.501786231994629, -2.2793633937835693], + [6.1721601486206055, -1.534489393234253], + [6.137487888336182, -1.7319295406341553], + [-1.0447973012924194, -3.051907539367676], + [-5.048940658569336, -2.9590511322021484], + [2.7201263904571533, -1.9219269752502441], + [2.2920491695404053, 5.4791083335876465], + [1.740821123123169, -6.526187896728516], + [3.5812721252441406, -7.300478935241699], + [-6.354210376739502, 7.707708358764648], + [-0.7585403323173523, -0.9345226883888245], + [-3.4975123405456543, -1.6102681159973145], + [-0.787807047367096, -1.238138198852539], + [-2.4820327758789062, 2.1152219772338867], + [0.3694609999656677, -0.9672265648841858], + [1.303353190422058, -0.45092788338661194], + [-1.159552812576294, -3.678370237350464], + [8.171717643737793, -2.2332866191864014], + [3.375916004180908, -4.162908554077148], + [10.552021980285645, -2.534266233444214], + [5.264106273651123, -1.0218638181686401], + [-1.9924981594085693, 2.5250399112701416], + [-3.249744176864624, 5.06976318359375], + [3.6838481426239014, -7.751533031463623], + [-3.100226640701294, -3.2622427940368652], + [2.1698501110076904, -8.992796897888184], + [0.05482953041791916, 11.591421127319336], + [-3.22729754447937, -2.4113428592681885], + [2.9511070251464844, -2.9899981021881104], + [-4.969501495361328, -1.2944830656051636], + [10.319400787353516, -2.384913444519043], + [2.7361230850219727, 4.0258283615112305], + [0.11149048060178757, 10.026224136352539], + [-5.193053722381592, 7.283192157745361], + [-2.1466495990753174, 2.7091877460479736], + [4.53071928024292, -2.606887102127075], + [-2.3914148807525635, -2.4805843830108643], + [-1.970521092414856, 2.2551047801971436], + [3.1878488063812256, -3.688505172729492], + [6.965879917144775, -1.8717252016067505], + [4.517965793609619, -0.6273159384727478], + [7.042381286621094, -1.6028003692626953], + [6.562547206878662, 8.176136016845703], + [2.9313933849334717, 6.426239967346191], + [2.5758278369903564, 6.049874305725098], + [5.978404521942139, -1.0340453386306763], + [7.187911033630371, -3.3465590476989746], + [0.21568363904953003, 8.887600898742676], + [8.55584716796875, -2.4178550243377686], + [9.158663749694824, -2.3540148735046387], + [-5.363602638244629, 6.5587477684021], + [-1.5632786750793457, 0.3494526743888855], + [0.22282642126083374, 10.783700942993164], + [-2.592193603515625, -0.16048011183738708], + [3.253180742263794, -7.750964641571045], + [5.55877161026001, 7.751703262329102], + [3.441822052001953, -5.791152000427246], + [-0.040302880108356476, 9.232954978942871], + [9.932602882385254, -2.515004873275757], + [2.1815707683563232, 2.0082852840423584], + [8.214151382446289, -2.341611623764038], + [-3.3063199520111084, -1.9261525869369507], + [-6.52212381362915, 7.993321418762207], + [-2.6732871532440186, 2.172086238861084], + [2.814967155456543, -4.598739147186279], + [-5.5707292556762695, -0.844585657119751], + [0.14331179857254028, 10.228231430053711], + [1.5829241275787354, -0.3721975088119507], + [3.326190233230591, -5.251394748687744], + [-0.01332516223192215, 12.615852355957031], + [-1.243384599685669, -2.6349613666534424], + [4.128753185272217, -3.4745821952819824], + [-2.9623162746429443, 2.2129318714141846], + [1.333495855331421, 2.533731460571289], + [-4.816527843475342, -2.9956448078155518], + [3.2953941822052, -4.411189556121826], + [6.159480571746826, -1.3127344846725464], + [-6.96657133102417, -0.16300678253173828], + [2.8838894367218018, -4.032116889953613], + [-4.277055740356445, -6.491510391235352], + [2.4261314868927, -4.958757400512695], + [3.4647514820098877, -2.315669298171997], + [-6.750964641571045, 7.842154502868652], + [3.2036423683166504, -3.655001401901245], + [5.582174777984619, -1.1857638359069824], + [0.27856481075286865, 11.838061332702637], + [3.3876562118530273, -4.699311256408691], + [5.754432678222656, -2.508213758468628], + [0.6700477004051208, 5.215063571929932], + [2.3991611003875732, -9.589385032653809], + [3.2589504718780518, -4.703828811645508], + [0.760104238986969, 5.258232116699219], + [0.47146135568618774, 11.713067054748535], + [-6.343800067901611, 0.9251148700714111], + [-7.466843128204346, 8.857612609863281], + [6.1869797706604, -1.2852263450622559], + [6.615112781524658, 8.295909881591797], + [1.1960456371307373, -7.386091709136963], + [0.5799546241760254, -5.051929473876953], + [-0.0435032919049263, 9.543746948242188], + [0.25223809480667114, 10.949398040771484], + [3.7547688484191895, -5.768878936767578], + [0.7304354310035706, -4.808542251586914], + [-4.657683849334717, -4.159040927886963], + [-2.683091163635254, -4.716466426849365], + [2.6678409576416016, 4.540289402008057], + [4.646095275878906, -7.644473552703857], + [2.8058605194091797, 4.349852561950684], + [7.416037082672119, 8.920433044433594], + [-4.410125255584717, -2.1115548610687256], + [-4.802204608917236, -1.682254672050476], + [0.473612904548645, 1.2075450420379639], + [-6.197412967681885, 1.5495132207870483], + [-3.198805093765259, -1.3480545282363892], + [2.11989426612854, 4.672158241271973], + [6.008952617645264, -3.763216972351074], + [-1.461488127708435, 1.897663950920105], + [3.1947181224823, 1.0700559616088867], + [0.6275996565818787, -0.5674457550048828], + [-0.8373657464981079, -0.2044980227947235], + [-4.387202739715576, -6.899819374084473], + [-0.28527235984802246, -1.687790036201477], + [-1.5235893726348877, 0.05996071919798851], + [3.392578601837158, -3.5082767009735107], + [-4.018834590911865, -6.0235443115234375], + [3.2903854846954346, 1.800756573677063], + [0.3103802800178528, 10.909732818603516], + [0.029344014823436737, 12.84979248046875], + [-0.579951822757721, 9.38056468963623], + [0.7380991578102112, -5.023471832275391], + [1.8568757772445679, 1.8285472393035889], + [2.430035352706909, -8.203125953674316], + [-5.292051792144775, -2.269864082336426], + [0.1596100926399231, 10.001656532287598], + [-1.8588306903839111, -5.285862922668457], + [-2.9920425415039062, -1.0632394552230835], + [-2.125392198562622, -0.734849214553833], + [1.5855028629302979, 3.899268627166748], + [3.0326664447784424, -4.234753608703613], + [9.429404258728027, -2.3208248615264893], + [5.653379917144775, -1.2122169733047485], + [2.2862908840179443, 5.549068927764893], + [-7.070563793182373, 6.75050687789917], + [-2.3395111560821533, -3.8014023303985596], + [5.345820426940918, -2.6538941860198975], + [6.160951137542725, -1.359133243560791], + [2.520798921585083, -8.4520263671875], + [8.967598915100098, -2.494246482849121], + [6.427802562713623, 8.172194480895996], + [-5.452892303466797, -0.2942391633987427], + [7.02586030960083, 8.597524642944336], + [3.3916046619415283, -4.973121643066406], + [-1.1876964569091797, 1.9614070653915405], + [1.2541067600250244, 5.182854175567627], + [4.33536958694458, -3.4295217990875244], + [6.940037250518799, -5.9937334060668945], + [2.7886412143707275, -9.25436019897461], + [3.583350896835327, -8.549860954284668], + [3.931068181991577, 6.477596282958984], + [2.1164627075195312, 3.2097856998443604], + [3.123163938522339, 6.43189001083374], + [8.009796142578125, -2.3683347702026367], + [3.4693706035614014, 1.5655730962753296], + [-3.3584399223327637, -5.3852643966674805], + [-6.6617326736450195, 6.973730087280273], + [-6.212344169616699, 7.506512641906738], + [4.3786702156066895, 7.068960189819336], + [-5.345447063446045, -2.6193277835845947], + [6.9253973960876465, 8.346622467041016], + [3.672281503677368, -5.998402118682861], + [4.391415596008301, -3.8288347721099854], + [1.3525336980819702, 5.034833908081055], + [2.3349483013153076, -6.668806076049805], + [2.0203850269317627, 4.822717666625977], + [1.7995262145996094, 4.917302131652832], + [-2.647442102432251, 1.93361234664917], + [-4.037550449371338, -6.247171878814697], + [0.12911850214004517, 11.545048713684082], + [4.17494535446167, 1.5711867809295654], + [4.297608852386475, -2.5241029262542725], + [3.389069080352783, -3.0345535278320312], + [3.6267266273498535, -3.515521764755249], + [3.205599546432495, -5.770679473876953], + [7.842536926269531, -2.2567734718322754], + [-3.39872145652771, 6.770349979400635], + [9.993706703186035, -2.4555928707122803], + [-2.5440680980682373, 1.8654714822769165], + [0.4483718276023865, -0.9096196293830872], + [5.153135299682617, -5.436392784118652], + [2.209470510482788, 0.11078321933746338], + [3.039719343185425, -4.28156042098999], + [-1.2688814401626587, -0.3606816232204437], + [4.3240742683410645, -3.770174264907837], + [8.265851020812988, -2.4656827449798584], + [0.12279962748289108, 9.718694686889648], + [-4.134294509887695, -5.908709526062012], + [-4.4584856033325195, -6.087608814239502], + [-1.9309921264648438, 0.7173681259155273], + [-2.1233720779418945, 2.5458059310913086], + [-1.1884759664535522, -3.4985649585723877], + [-2.9979419708251953, 6.090514183044434], + [3.0196945667266846, -4.485154151916504], + [-5.488158702850342, 4.8012189865112305], + [-6.623959064483643, -0.251448392868042], + [6.140209674835205, 8.355978012084961], + [2.0348026752471924, -7.260939598083496], + [3.0140271186828613, -4.2646355628967285], + [-2.421814203262329, 1.3183183670043945], + [-3.3701846599578857, -3.5344107151031494], + [6.679330825805664, -2.258814573287964], + [7.372190475463867, -1.833571195602417], + [-2.0187718868255615, -0.917177140712738], + [-5.93417501449585, 1.8984166383743286], + [0.04658900946378708, 9.407394409179688], + [2.538421154022217, 5.689060688018799], + [9.559732437133789, -2.5333516597747803], + [5.583257675170898, -0.5710642337799072], + [-2.9260237216949463, -1.7237708568572998], + [2.8315348625183105, -3.3322322368621826], + [5.765764236450195, 7.942587375640869], + [0.15656667947769165, 10.127918243408203], + [3.264408826828003, -4.089996814727783], + [4.321415424346924, 6.257119178771973], + [0.010778956115245819, 12.591796875], + [-4.7820305824279785, 8.287811279296875], + [0.7491753101348877, -0.11933742463588715], + [5.719599723815918, -1.0624730587005615], + [4.345591068267822, 1.9544986486434937], + [-1.8722363710403442, 1.4933538436889648], + [5.653586387634277, -2.4327971935272217], + [3.2328386306762695, 1.6235690116882324], + [4.220317363739014, -6.613798141479492], + [4.576402187347412, -3.0198981761932373], + [3.5234506130218506, 4.929922580718994], + [7.738337516784668, -2.448503255844116], + [1.0550636053085327, 11.442302703857422], + [-2.9567553997039795, 1.1718881130218506], + [-0.003406532108783722, 9.926286697387695], + [4.059081554412842, -3.553074598312378], + [3.244642734527588, -4.670472145080566], + [1.881952166557312, -5.709306716918945], + [-2.0448853969573975, 2.3920819759368896], + [-2.95062518119812, -3.84919810295105], + [3.9236090183258057, -3.1459853649139404], + [3.0205438137054443, -6.246074676513672], + [-5.359177112579346, -3.4826552867889404], + [-5.320363998413086, 3.43294620513916], + [-5.159228801727295, -2.0760974884033203], + [-2.4804718494415283, 2.495317220687866], + [-2.0683536529541016, 2.190093517303467], + [10.870490074157715, -2.504121780395508], + [0.011171989142894745, -0.7591809630393982], + [-5.826350212097168, -0.7949627041816711], + [0.11472778767347336, 9.340839385986328], + [8.188960075378418, -2.227264881134033], + [0.18523401021957397, 10.980318069458008], + [6.324652194976807, -1.3471602201461792], + [2.3096983432769775, 3.3840034008026123], + [-4.676519393920898, -0.11854052543640137], + [-3.815315008163452, -2.5952093601226807], + [1.97501540184021, 4.947737693786621], + [-0.06756920367479324, 13.330421447753906], + [2.5177009105682373, -8.744979858398438], + [2.6924431324005127, 6.3412251472473145], + [0.18115907907485962, 10.124086380004883], + [-3.9609944820404053, 5.571558475494385], + [0.009733311831951141, 13.164737701416016], + [2.409031391143799, -8.189619064331055], + [1.062706708908081, -5.5641398429870605], + [0.007606856524944305, 12.874641418457031], + [0.24482542276382446, 10.881840705871582], + [1.5362128019332886, 4.819242477416992], + [-1.051304817199707, -2.593153715133667], + [-6.148925304412842, 7.013958930969238], + [2.0826985836029053, 3.7272555828094482], + [4.533888339996338, 1.8505645990371704], + [3.0563650131225586, -9.0115966796875], + [-2.0001533031463623, 2.341888189315796], + [8.367461204528809, -2.177814483642578], + [3.3048102855682373, -3.91056752204895], + [-2.394639015197754, 1.7243201732635498], + [-0.10752718895673752, -1.6747727394104004], + [3.0627400875091553, -6.928814888000488], + [6.709112644195557, 8.15916919708252], + [2.8706109523773193, -4.317942142486572], + [0.0666378065943718, 12.900552749633789], + [2.145606756210327, -4.5509033203125], + [-4.781156063079834, -1.1368470191955566], + [-2.491765022277832, 2.1215803623199463], + [1.3407362699508667, -6.1106414794921875], + [5.921118259429932, 7.513097763061523], + [0.1859949827194214, 10.625590324401855], + [3.4145758152008057, -5.177657127380371], + [-4.252771854400635, -6.990447998046875], + [-2.293454647064209, 2.534287691116333], + [3.929511308670044, -3.5760276317596436], + [-3.699770927429199, -4.247150897979736], + [3.621577262878418, -3.7750608921051025], + [-6.560181140899658, -0.4470564126968384], + [8.294910430908203, -2.4859731197357178], + [6.373721599578857, -2.60613751411438], + [7.878696441650391, -2.096235990524292], + [3.365605115890503, -4.814852714538574], + [-3.44458270072937, 3.0192291736602783], + [4.5296950340271, 6.9004364013671875], + [2.4746553897857666, 4.788473129272461], + [-4.157038688659668, -3.5584049224853516], + [-1.7225618362426758, -3.5291125774383545], + [0.22541505098342896, 10.907745361328125], + [-3.371742010116577, -3.072390556335449], + [6.332423210144043, -1.810789704322815], + [0.12910717725753784, 11.72937297821045], + [-5.0024542808532715, 5.3804931640625], + [0.028114311397075653, 12.321710586547852], + [-4.538180828094482, -6.860827445983887], + [-2.072714328765869, -2.343851327896118], + [3.3954553604125977, -6.119969844818115], + [-0.0011087730526924133, 10.120183944702148], + [-4.168142795562744, -3.7980759143829346], + [3.642770528793335, 1.647973656654358], + [3.7323648929595947, -7.139453411102295], + [4.483638763427734, -2.254256010055542], + [2.761692523956299, -3.882249355316162], + [-3.1436331272125244, -3.194847345352173], + [2.2357256412506104, 3.557223081588745], + [-2.596006155014038, 1.822083592414856], + [-4.351241588592529, -3.313091278076172], + [1.5025174617767334, 0.1279078871011734], + [-5.360778331756592, 5.318829536437988], + [-2.7957794666290283, 2.284259557723999], + [1.2996437549591064, -0.45594680309295654], + [-4.242523670196533, -6.385097503662109], + [3.679344415664673, -2.9823148250579834], + [1.1209688186645508, -0.4494922161102295], + [-6.7550950050354, 7.870879173278809], + [7.301392078399658, -2.795883893966675], + [3.3338534832000732, 1.2352904081344604], + [0.15046221017837524, 9.581235885620117], + [3.243680238723755, -3.989809989929199], + [0.050177328288555145, 9.512417793273926], + [7.075501441955566, -2.2191784381866455], + [3.326507091522217, -4.609224319458008], + [3.3339498043060303, -6.0760393142700195], + [4.101132869720459, -3.855820417404175], + [-0.014648623764514923, 9.786949157714844], + [3.202194929122925, -6.542758464813232], + [-6.167771816253662, 7.091093063354492], + [-5.397998332977295, -1.4010204076766968], + [-5.22471284866333, -1.278335690498352], + [0.026219777762889862, 10.015920639038086], + [3.0673744678497314, -3.8731350898742676], + [-2.5628697872161865, -3.6590301990509033], + [4.558378219604492, 6.748673439025879], + [-7.231058120727539, -0.009240273386240005], + [-4.1650776863098145, -2.098705530166626], + [-2.1599199771881104, -4.167186737060547], + [1.4193036556243896, 4.6617913246154785], + [1.166440725326538, -0.42038026452064514], + [4.959223747253418, -3.3592116832733154], + [-1.9591059684753418, -4.129427433013916], + [4.793924808502197, -4.0388593673706055], + [8.228367805480957, -2.213432788848877], + [-4.1210150718688965, -6.104328632354736], + [4.118913650512695, -2.6208207607269287], + [7.015187740325928, -2.8233044147491455], + [2.826854944229126, -4.014759063720703], + [8.314764976501465, -2.4069197177886963], + [0.0683516189455986, 11.712541580200195], + [0.823329746723175, 5.8911895751953125], + [-4.108084678649902, -6.681564807891846], + [8.315030097961426, -2.820868730545044], + [-1.2281101942062378, 6.16243314743042], + [5.598494052886963, -1.9588161706924438], + [3.6215126514434814, -5.280132293701172], + [2.618281364440918, -8.014761924743652], + [-2.08025860786438, -2.2356064319610596], + [0.28484949469566345, -4.035447120666504], + [9.05240535736084, -2.3124818801879883], + [-0.9879917502403259, 1.8198686838150024], + [-4.240978240966797, -0.14833486080169678], + [-0.03194696456193924, 13.776811599731445], + [2.474034547805786, 5.119402885437012], + [-3.372616767883301, 5.210958480834961], + [4.333741188049316, -3.5681021213531494], + [8.757525444030762, -2.430626153945923], + [6.329413890838623, -1.2303252220153809], + [0.15296733379364014, -2.496392011642456], + [-3.785187244415283, -3.580515146255493], + [2.3445420265197754, 4.2091827392578125], + [3.1426217555999756, -7.762490272521973], + [3.4655203819274902, -4.9582624435424805], + [2.4108879566192627, 5.443391799926758], + [0.06583886593580246, 12.251632690429688], + [10.275527000427246, -2.5607337951660156], + [-4.409639835357666, 5.556966781616211], + [-4.500761985778809, -6.681519508361816], + [10.027234077453613, -2.294612169265747], + [-2.088292360305786, -3.5395569801330566], + [3.052788496017456, -8.493210792541504], + [-2.07316517829895, 2.271803379058838], + [0.3166329860687256, -1.0713592767715454], + [5.703258991241455, -4.798282146453857], + [5.039812088012695, -3.5844075679779053], + [-5.925430774688721, 5.315803050994873], + [-3.83586049079895, 6.975375175476074], + [2.439612627029419, 3.916264772415161], + [7.459984302520752, 8.862960815429688], + [-4.963767051696777, -6.346982955932617], + [-5.239959716796875, -6.905739784240723], + [0.3886275887489319, -0.08207699656486511], + [2.593287229537964, -4.87562370300293], + [5.706900119781494, -1.2289355993270874], + [-2.3087637424468994, 1.95598566532135], + [-0.33145591616630554, -1.067297101020813], + [0.3052154779434204, 10.96455192565918], + [-7.107776165008545, 8.404523849487305], + [-2.9973862171173096, -3.9870171546936035], + [6.183110237121582, 8.391778945922852], + [-3.104218006134033, 1.632505178451538], + [0.0039319321513175964, 9.189794540405273], + [-6.2848286628723145, 7.310964584350586], + [-2.5916049480438232, 2.7851722240448], + [2.8971164226531982, -8.615179061889648], + [7.690838813781738, -2.123702049255371], + [-5.458298683166504, 7.800889015197754], + [5.2008819580078125, -1.549556851387024], + [2.838561773300171, -4.02063512802124], + [1.2730177640914917, -0.5707592368125916], + [3.5868301391601562, -3.4212276935577393], + [-5.600925922393799, 7.061217784881592], + [-2.078265428543091, 2.5159146785736084], + [1.757602334022522, 0.133268803358078], + [5.305521488189697, -2.1658899784088135], + [-0.022436924278736115, 9.646598815917969], + [-3.0012383460998535, -3.538882255554199], + [4.1146087646484375, 1.4676622152328491], + [8.330714225769043, -2.4072182178497314], + [3.8158023357391357, -3.314903974533081], + [9.519610404968262, -2.3959343433380127], + [-2.159052610397339, 2.705754041671753], + [10.685165405273438, -2.422435998916626], + [-4.548315525054932, -7.425004005432129], + [-0.041222281754016876, 13.754079818725586], + [-2.3099238872528076, 1.6998178958892822], + [2.1793289184570312, -8.4076509475708], + [3.005760908126831, -4.3459649085998535], + [3.701747179031372, 1.2140554189682007], + [-1.833136796951294, -0.18865865468978882], + [5.01098108291626, -4.186476707458496], + [6.351516246795654, -1.438110113143921], + [0.4643499255180359, 10.948225021362305], + [6.278914928436279, -1.4019925594329834], + [-3.9495151042938232, -3.3989622592926025], + [0.3078031539916992, -2.9123287200927734], + [-4.71052885055542, 5.229729175567627], + [9.429692268371582, -2.485257625579834], + [-5.35300874710083, -1.9796961545944214], + [-0.07156450301408768, 13.113210678100586], + [-2.2111785411834717, 0.7055895328521729], + [-3.9594204425811768, 4.75508975982666], + [2.436570405960083, 4.000926971435547], + [1.1673060655593872, -0.25490519404411316], + [2.489447593688965, -3.643167734146118], + [7.949491024017334, -2.168433904647827], + [-5.141453266143799, -6.505801200866699], + [-6.80200719833374, -0.6889218091964722], + [8.328994750976562, -2.426544189453125], + [-4.5550537109375, -4.777263641357422], + [-3.285276174545288, -4.529360771179199], + [5.959408283233643, 7.361426830291748], + [-1.467086911201477, 0.07337221503257751], + [0.38567355275154114, -1.4680598974227905], + [-2.9282894134521484, -0.8104828000068665], + [1.7290515899658203, 3.3255231380462646], + [-5.881011486053467, -0.25533878803253174], + [0.16638809442520142, 10.17664909362793], + [2.313260793685913, -8.88951301574707], + [-1.5585647821426392, 2.124389171600342], + [1.349289894104004, -7.0824995040893555], + [-4.471982002258301, -5.760737895965576], + [-5.5751752853393555, 6.198446273803711], + [-2.5126094818115234, 1.9033290147781372], + [2.966730833053589, 6.097930908203125], + [0.05972587317228317, 12.224231719970703], + [0.1326482892036438, 9.935661315917969], + [9.041712760925293, -2.6948883533477783], + [3.8831076622009277, -3.8242228031158447], + [4.60314416885376, -0.1551695168018341], + [2.627256155014038, -6.994212627410889], + [0.07154654711484909, 11.854683876037598], + [-4.281876564025879, -1.2331206798553467], + [0.26544469594955444, 12.018350601196289], + [0.20806056261062622, 10.659944534301758], + [0.07778310030698776, 10.73310661315918], + [-2.659832239151001, 1.9646574258804321], + [-5.592285633087158, -2.1042304039001465], + [6.061525344848633, -2.7656235694885254], + [2.6233479976654053, 4.018802642822266], + [3.6848058700561523, -3.9790642261505127], + [-5.872971057891846, 6.565249443054199], + [2.6464684009552, 5.81832218170166], + [4.491262912750244, -2.9911484718322754], + [-3.8607680797576904, 4.553500175476074], + [9.679245948791504, -2.734618902206421], + [-5.633162021636963, 3.5255563259124756], + [-2.4796762466430664, 2.2836694717407227], + [7.796055793762207, -2.199371576309204], + [-2.012742280960083, 2.1019108295440674], + [1.0870239734649658, 3.363736391067505], + [2.636467695236206, -2.539781093597412], + [-4.0292582511901855, 5.232252597808838], + [12.206929206848145, -2.5767853260040283], + [-2.552459478378296, 0.9941569566726685], + [2.8500914573669434, -7.389588356018066], + [-0.07592297345399857, 8.4944429397583], + [0.7301411628723145, 4.908633232116699], + [0.34909361600875854, 11.198116302490234], + [-2.9965972900390625, -5.796998023986816], + [6.727679252624512, -1.5184260606765747], + [2.6678466796875, -6.592411994934082], + [-3.6777260303497314, 5.671761989593506], + [-4.191908836364746, -0.5218220949172974], + [1.0138554573059082, 3.869791269302368], + [0.3257734179496765, 11.087943077087402], + [-2.9540812969207764, 1.0052348375320435], + [2.852234125137329, -7.310817241668701], + [3.0299265384674072, -3.36562180519104], + [-4.8919358253479, 5.313924312591553], + [6.332452297210693, 7.839495658874512], + [2.5065248012542725, 1.957180380821228], + [1.5698028802871704, 2.479456663131714], + [1.1797584295272827, 5.345125675201416], + [-1.993434190750122, -3.8999645709991455], + [-4.516824245452881, -2.119051694869995], + [5.316669940948486, 7.189510345458984], + [1.5199828147888184, 1.4863487482070923], + [-0.050834961235523224, 13.002291679382324], + [0.14561527967453003, 12.023164749145508], + [4.532486438751221, -3.601484775543213], + [6.8057637214660645, 8.237638473510742], + [5.93850564956665, -6.5877685546875], + [-4.07734489440918, 5.87448787689209], + [3.3825619220733643, -7.007846832275391], + [-0.058118827641010284, 9.130855560302734], + [7.2238030433654785, -1.9440723657608032], + [-2.4681901931762695, 2.3253660202026367], + [0.17609721422195435, 11.82900333404541], + [-7.394567966461182, -1.0916537046432495], + [-2.1990673542022705, 1.2149713039398193], + [-1.2673282623291016, 0.33422237634658813], + [3.548659086227417, -3.434924364089966], + [-2.0919647216796875, 2.377174139022827], + [-2.09598708152771, 2.453181505203247], + [-1.7509948015213013, 1.5977896451950073], + [8.87794303894043, -2.3963022232055664], + [-2.07942795753479, 2.3657891750335693], + [-2.659583568572998, 2.0783588886260986], + [4.2479329109191895, -0.6024454832077026], + [3.8555984497070312, 0.25099217891693115], + [4.690170764923096, -1.8543965816497803], + [0.5543811917304993, -1.0516964197158813], + [3.9918911457061768, -3.5141634941101074], + [7.745890140533447, 9.240744590759277], + [-5.162139415740967, 7.521021842956543], + [2.046190023422241, -7.189830780029297], + [-2.2612087726593018, 2.3701682090759277], + [8.134581565856934, -2.2633655071258545], + [3.589560031890869, -3.525519847869873], + [2.3442811965942383, 4.718631267547607], + [2.946847677230835, -4.0474019050598145], + [-4.8102264404296875, 6.040408134460449], + [4.643733978271484, -1.9671097993850708], + [0.4603886008262634, 10.40076732635498], + [-3.648338556289673, -2.3044302463531494], + [3.411985158920288, -8.375062942504883], + [2.3859429359436035, 1.7688690423965454], + [3.405306339263916, -4.3398895263671875], + [-4.59697961807251, -2.350856304168701], + [4.856417655944824, -3.5313737392425537], + [0.12189405411481857, 9.735916137695312], + [-2.7655460834503174, -1.7742373943328857], + [3.417506217956543, 1.7007299661636353], + [-4.3329176902771, -1.7067135572433472], + [0.5265325903892517, 11.324331283569336], + [2.4203059673309326, 2.894108533859253], + [-2.366334915161133, 1.2311564683914185], + [4.319614410400391, 0.2632662057876587], + [3.5787055492401123, -3.548140287399292], + [0.06181930750608444, 9.715824127197266], + [2.9582626819610596, -4.456549644470215], + [0.06462954729795456, 11.908398628234863], + [4.120238780975342, -3.682316303253174], + [-3.6564676761627197, -1.3985933065414429], + [6.277656078338623, -3.6811838150024414], + [0.5698257088661194, -1.0232999324798584], + [-4.835704326629639, 6.154811382293701], + [0.03415220230817795, 13.088390350341797], + [-5.698395252227783, -2.1422786712646484], + [3.9061899185180664, 7.164393901824951], + [-1.6714140176773071, 1.9194260835647583], + [-2.4327309131622314, 1.7517333030700684], + [-4.053919792175293, 5.956962585449219], + [-6.279782772064209, 5.861591339111328], + [-5.6302056312561035, 0.1095191240310669], + [-2.7294373512268066, -0.3102142810821533], + [-5.294403553009033, 4.317687511444092], + [-1.2370765209197998, -3.370398759841919], + [2.917651891708374, 0.6992307901382446], + [-1.9250001907348633, 1.0270659923553467], + [-0.8184613585472107, 7.277718544006348], + [-2.2110204696655273, 2.3500685691833496], + [3.1749958992004395, -4.549247741699219], + [-6.402724742889404, 7.2215423583984375], + [-5.86572265625, 7.8573994636535645], + [-3.6518054008483887, 5.4709930419921875], + [-1.6463817358016968, 0.4792490005493164], + [-7.01531457901001, 8.21013069152832], + [-2.225449323654175, -2.9986684322357178], + [3.4414684772491455, 1.7917827367782593], + [2.930436849594116, -4.08829402923584], + [-6.831343650817871, 8.034477233886719], + [-3.586763381958008, -5.007822036743164], + [-4.698333263397217, -7.274379253387451], + [-6.2927021980285645, 7.193572998046875], + [0.07505141943693161, 9.786504745483398], + [-4.561251640319824, 7.45212459564209], + [1.6344187259674072, -7.2992353439331055], + [-1.178292155265808, -3.5090954303741455], + [5.970673561096191, -1.3025487661361694], + [3.9547226428985596, 6.198663234710693], + [-6.566842555999756, 9.029630661010742], + [-3.7634174823760986, -2.4195666313171387], + [-3.8670480251312256, 7.175839900970459], + [-4.57681131362915, 3.710225820541382], + [0.4611855745315552, -5.242725372314453], + [3.6731932163238525, -2.8822789192199707], + [3.3845622539520264, -5.09276008605957], + [-5.3390960693359375, 7.787020683288574], + [-4.514001369476318, -6.03942346572876], + [-2.2912771701812744, 2.340590238571167], + [-4.479257106781006, -3.245896100997925], + [5.688834190368652, 7.353127479553223], + [9.344666481018066, -2.675649404525757], + [0.14938044548034668, 11.576236724853516], + [2.2645716667175293, 3.8223538398742676], + [-2.624377965927124, 2.090395212173462], + [1.6110494136810303, 2.1684606075286865], + [6.972209453582764, -4.491833686828613], + [0.12060671299695969, 9.837416648864746], + [6.1099138259887695, -0.8491147756576538], + [-2.342949151992798, -1.0774434804916382], + [1.6913560628890991, 5.131969451904297], + [4.141578197479248, -6.7771172523498535], + [6.479212760925293, -2.802314043045044], + [4.306946277618408, 1.8747587203979492], + [-2.8001468181610107, 1.003121018409729], + [-5.890405178070068, 3.829526662826538], + [5.8123698234558105, 8.009634017944336], + [3.1827452182769775, -6.897112846374512], + [-2.582867383956909, -3.3570339679718018], + [-1.13860023021698, -2.715651750564575], + [6.3465986251831055, -1.6555293798446655], + [0.1537267565727234, 10.037480354309082], + [-1.6216607093811035, 1.7888463735580444], + [-2.3270773887634277, 3.060406446456909], + [-4.833072185516357, -6.717641830444336], + [0.8373729586601257, -5.5887603759765625], + [-5.3157267570495605, -6.99014949798584], + [5.389492034912109, 7.401406288146973], + [1.8343578577041626, 1.4106478691101074], + [0.29053157567977905, 11.306718826293945], + [-5.356473445892334, 4.000813007354736], + [-6.919504642486572, 0.5852559804916382], + [-2.807166814804077, -4.135116100311279], + [-2.422899007797241, -4.140027046203613], + [0.9119226932525635, -7.035591125488281], + [-7.5220112800598145, -1.4529920816421509], + [-4.619385719299316, -7.1747236251831055], + [-4.289506435394287, -7.0157976150512695], + [4.0717363357543945, -2.506385326385498], + [8.809670448303223, -2.2613272666931152], + [-2.303044557571411, 2.8893930912017822], + [-4.4070868492126465, -1.2616180181503296], + [-0.05733341723680496, 8.794868469238281], + [-3.8608860969543457, -0.9400692582130432], + [1.4365079402923584, 5.057241916656494], + [-3.9664199352264404, -1.4414721727371216], + [-4.98936128616333, 5.346798896789551], + [-4.4247026443481445, 5.0702362060546875], + [-0.36768603324890137, -0.3611748218536377], + [-7.74826192855835, 0.040080662816762924], + [-5.094644546508789, -3.373218536376953], + [4.841413974761963, -2.5077450275421143], + [0.21028131246566772, 10.78786849975586], + [-2.2268874645233154, 2.8261232376098633], + [-2.5274932384490967, 1.8364882469177246], + [2.4347965717315674, -8.32564640045166], + [-2.6388304233551025, -2.6767585277557373], + [-6.49485445022583, 7.5561628341674805], + [-3.8621809482574463, -3.6075570583343506], + [0.03898017853498459, 13.686182022094727], + [-4.353512287139893, 4.558321952819824], + [2.057612895965576, -0.2762949466705322], + [-6.731001853942871, 5.753279685974121], + [-2.6003146171569824, 0.22721683979034424], + [8.014960289001465, -2.1787025928497314], + [8.21318244934082, -2.518378496170044], + [-0.30759137868881226, 0.17471574246883392], + [8.394878387451172, -2.2239224910736084], + [7.484589576721191, -1.9771103858947754], + [6.064207553863525, -1.3470860719680786], + [4.280859470367432, -5.5066022872924805], + [5.287961483001709, -1.9859744310379028], + [3.9488613605499268, 5.980247497558594], + [-2.539411783218384, 2.046649694442749], + [-4.26791524887085, -3.792708158493042], + [-3.6929733753204346, -5.576375961303711], + [0.9826573729515076, 0.9642270803451538], + [6.533318996429443, -2.3797295093536377], + [-1.341506004333496, 2.0078771114349365], + [2.9237921237945557, 4.415167808532715], + [-4.0879340171813965, -3.7962260246276855], + [8.447949409484863, -2.390949010848999], + [1.5822646617889404, 5.687796115875244], + [-5.299476623535156, 5.485662460327148], + [4.16701078414917, -8.211859703063965], + [-2.575138807296753, 1.8555092811584473], + [4.470063209533691, -2.3084566593170166], + [-1.4023886919021606, -3.2562997341156006], + [-4.4987359046936035, -7.166934013366699], + [2.209160566329956, -7.75950813293457], + [2.0129411220550537, -8.058825492858887], + [7.912095069885254, -2.4364776611328125], + [7.292303562164307, -2.508316993713379], + [3.1525702476501465, -3.524015426635742], + [0.9423521161079407, -5.765232086181641], + [-4.54287052154541, -7.614045143127441], + [-4.8360490798950195, 5.950028896331787], + [2.7248599529266357, -3.8277618885040283], + [-5.708343029022217, -0.5962960720062256], + [5.0992350578308105, 7.675240516662598], + [-3.1555967330932617, -0.5488193035125732], + [5.870018482208252, 7.674107074737549], + [2.5353050231933594, -7.375413417816162], + [7.470765113830566, 8.851667404174805], + [2.2056472301483154, 4.679132461547852], + [6.323288440704346, 7.751974105834961], + [7.372500896453857, -2.2234933376312256], + [6.67188024520874, 8.385948181152344], + [2.452562093734741, 2.8663949966430664], + [3.0691545009613037, -3.5639564990997314], + [4.8663811683654785, 6.722283363342285], + [4.280864238739014, 0.3898465037345886], + [-3.4281909465789795, 5.566845893859863], + [-0.6168089509010315, -2.3993680477142334], + [3.2387540340423584, -4.62391471862793], + [-0.02261943370103836, 12.669775009155273], + [3.830261707305908, 1.67323637008667], + [-2.1388866901397705, 2.72316312789917], + [4.122436046600342, 7.30900764465332], + [-2.445966958999634, -3.3773534297943115], + [-1.7025142908096313, 2.27936053276062], + [3.530167579650879, -5.585899353027344], + [4.650344371795654, -2.859344244003296], + [1.3137269020080566, 4.989877700805664], + [2.99249529838562, -5.5766825675964355], + [3.9021689891815186, -3.411830425262451], + [7.0518059730529785, 8.589103698730469], + [7.139530181884766, -1.9777848720550537], + [1.0360691547393799, 1.3398733139038086], + [3.3804383277893066, -4.958797931671143], + [6.927612781524658, -1.5127594470977783], + [5.086689472198486, -1.6123675107955933], + [1.789191484451294, -7.975053787231445], + [10.251757621765137, -2.513700485229492], + [0.531352162361145, -0.05618779733777046], + [11.102860450744629, -2.6375861167907715], + [-2.8166446685791016, -3.4456584453582764], + [-2.360534429550171, 1.9623855352401733], + [-4.858214855194092, -6.480639457702637], + [-3.977874755859375, -6.462206840515137], + [7.908601760864258, -2.7357375621795654], + [-4.551266193389893, -6.8964128494262695], + [-3.80199933052063, -3.3961076736450195], + [1.119316577911377, -7.356431484222412], + [-0.10664737969636917, 9.119993209838867], + [10.679430961608887, -2.519566297531128], + [-0.22661983966827393, 0.6195578575134277], + [2.0720322132110596, 1.8579480648040771], + [-4.110877990722656, 7.143627166748047], + [0.21141910552978516, 10.534318923950195], + [2.441452741622925, -8.03093433380127], + [5.837411880493164, -2.5329833030700684], + [1.2184066772460938, -4.723266124725342], + [-4.322901725769043, 3.260084390640259], + [0.05623149126768112, 12.284416198730469], + [-2.1808533668518066, 2.402775287628174], + [5.326197147369385, -3.8629701137542725], + [3.498696804046631, -7.818905353546143], + [-5.233348369598389, 3.611487627029419], + [6.959545135498047, -3.0149199962615967], + [1.8197509050369263, 3.1678905487060547], + [-0.16072234511375427, -1.6958434581756592], + [-5.133939743041992, 7.0473432540893555], + [3.4494097232818604, -7.953078746795654], + [2.704432725906372, -8.461172103881836], + [7.944180011749268, -2.159421920776367], + [1.9518272876739502, -6.138168811798096], + [3.3067502975463867, -4.546290874481201], + [1.9858462810516357, -1.220676064491272], + [-5.624347686767578, -0.7244869470596313], + [0.021460942924022675, 9.79557991027832], + [-7.358941555023193, 0.3444478511810303], + [6.4356818199157715, -1.6322745084762573], + [1.3288506269454956, -8.020296096801758], + [-2.628981828689575, -4.700730323791504], + [-2.922449827194214, -3.743774652481079], + [-4.328192234039307, -5.6367998123168945], + [5.325765609741211, -1.6224032640457153], + [0.16163527965545654, 11.344581604003906], + [-3.4744558334350586, -3.8545081615448], + [2.924041509628296, -4.075678825378418], + [0.10031407326459885, 9.848915100097656], + [3.1201670169830322, -9.45258903503418], + [-3.5415098667144775, -5.196695804595947], + [-4.6489434242248535, 6.210312366485596], + [0.1484280824661255, 11.665853500366211], + [2.0643811225891113, -8.08114242553711], + [0.14586958289146423, -0.9047502279281616], + [3.395219087600708, -5.338103771209717], + [0.19929343461990356, 10.499120712280273], + [-4.644575119018555, -6.342541217803955], + [6.523465633392334, 8.096253395080566], + [-1.3132679462432861, 1.502794623374939], + [-2.2326953411102295, 1.8426469564437866], + [-0.7986182570457458, -3.0746402740478516], + [1.7691757678985596, 5.7308502197265625], + [4.262307167053223, 1.808791995048523], + [-4.114349842071533, -2.87770676612854], + [3.036243200302124, -8.664983749389648], + [0.2018061876296997, 10.686798095703125], + [-4.242330074310303, 5.447843551635742], + [2.9954915046691895, 0.09141615033149719], + [-2.0260353088378906, -4.377876281738281], + [1.5371202230453491, 1.883239507675171], + [1.5904438495635986, 5.421845436096191], + [2.33329176902771, 3.2587878704071045], + [1.735905647277832, -4.765422821044922], + [0.7557066082954407, 11.824272155761719], + [-2.567192792892456, 1.5582894086837769], + [3.04289174079895, 1.3373442888259888], + [6.519029140472412, -3.8426058292388916], + [-3.60528826713562, -2.9326608180999756], + [-4.954152584075928, -7.267876625061035], + [-7.357173919677734, -1.2293140888214111], + [2.172136068344116, -7.507612705230713], + [-5.271294593811035, 5.502281188964844], + [2.9863288402557373, -4.114902496337891], + [-1.3908077478408813, -3.301940441131592], + [-1.1508344411849976, 1.9670850038528442], + [6.498714923858643, 7.9148712158203125], + [-4.278871536254883, -1.721259593963623], + [3.2423207759857178, -4.04153299331665], + [0.21547526121139526, 12.182758331298828], + [1.0590510368347168, -6.68804931640625], + [0.09078817814588547, 9.881153106689453], + [-3.3080947399139404, -0.6241673827171326], + [4.999735355377197, -1.5102651119232178], + [1.7372604608535767, -8.167574882507324], + [-2.0739147663116455, -0.8692764639854431], + [0.7545650005340576, 5.357752799987793], + [9.321755409240723, -2.353008508682251], + [-2.2412002086639404, 1.017700433731079], + [-4.792535305023193, -3.123934745788574], + [3.12296986579895, 6.022930145263672], + [4.974947452545166, -4.132442951202393], + [-0.002015538513660431, 11.486202239990234], + [-6.507348537445068, 7.627344608306885], + [-4.48555326461792, 5.26992130279541], + [-6.466828346252441, 7.568592071533203], + [-6.6085429191589355, 7.817354202270508], + [0.2802039384841919, -0.5461754202842712], + [-0.7183518409729004, -2.341376304626465], + [-2.7641055583953857, -2.1794583797454834], + [2.9170682430267334, -4.1275153160095215], + [0.1015576645731926, 11.46520709991455], + [-3.743145704269409, -5.510949611663818], + [9.511645317077637, -2.3898754119873047], + [2.9060447216033936, -4.130842208862305], + [-0.14869457483291626, 14.686777114868164], + [5.032715320587158, -2.632500410079956], + [-2.5857951641082764, -0.6155698299407959], + [-1.3299508094787598, -0.6089794635772705], + [7.008500576019287, -1.6447688341140747], + [10.310290336608887, -2.378413200378418], + [-2.3004488945007324, 2.2092325687408447], + [1.9833600521087646, 3.922546625137329], + [-4.379968166351318, -6.425114154815674], + [2.3035027980804443, -8.828983306884766], + [2.481966733932495, -2.2360470294952393], + [-5.8025946617126465, 4.780418395996094], + [-0.6416520476341248, 0.9160082340240479], + [6.357694149017334, -3.630014181137085], + [10.657001495361328, -2.3761894702911377], + [0.6385872960090637, -0.9452471733093262], + [4.016882419586182, -3.5452747344970703], + [-4.466292381286621, 4.584163665771484], + [-1.0542792081832886, 1.6708228588104248], + [0.3458133339881897, 11.032398223876953], + [-3.8000519275665283, -2.920926094055176], + [9.492365837097168, -2.353749990463257], + [4.555846691131592, 6.747832775115967], + [2.9721477031707764, -4.208276748657227], + [8.773791313171387, -2.32710862159729], + [1.027686595916748, -5.564117431640625], + [-4.974921703338623, 4.064239025115967], + [5.514965534210205, -1.5946993827819824], + [2.0346672534942627, 5.119443893432617], + [-2.136669635772705, 2.2165400981903076], + [4.026056289672852, -2.6418824195861816], + [6.434249401092529, -2.7082912921905518], + [-4.700856685638428, 5.2365007400512695], + [4.477370738983154, -5.254086494445801], + [7.306309223175049, -2.1713857650756836], + [-1.825372338294983, 0.9106107950210571], + [2.559490442276001, 2.0836193561553955], + [-4.212794780731201, -6.002858638763428], + [-5.241000652313232, -1.5585988759994507], + [-1.9646596908569336, 2.4124755859375], + [5.387970447540283, -3.083556890487671], + [1.7995195388793945, -7.233051300048828], + [5.184101581573486, -1.687211275100708], + [11.313502311706543, -2.5974323749542236], + [-2.6563851833343506, -5.060728073120117], + [-4.100114822387695, -6.358675003051758], + [3.464940071105957, -4.0577239990234375], + [-4.80132532119751, -7.8099870681762695], + [-0.587387204170227, 1.2053347826004028], + [0.3317663073539734, -1.3287771940231323], + [2.9740426540374756, -2.969280481338501], + [-7.027197360992432, -0.5866441130638123], + [-7.167252540588379, 0.4890148639678955], + [-2.975844383239746, -5.061695098876953], + [-2.305842399597168, 1.9464519023895264], + [-2.013213634490967, 2.168348789215088], + [3.193528890609741, -4.477381706237793], + [-3.0099589824676514, 5.767688274383545], + [-1.0779985189437866, 0.9017587900161743], + [3.5706868171691895, -5.332579612731934], + [0.2776271104812622, -4.583294868469238], + [-2.4419045448303223, -2.5764195919036865], + [-4.456920146942139, -6.853191375732422], + [5.182510852813721, 7.629645824432373], + [3.1544101238250732, -4.1152544021606445], + [1.750640630722046, -7.541897773742676], + [2.70287823677063, 1.0214463472366333], + [-7.777324199676514, 0.022599097341299057], + [-1.9622681140899658, 1.5072566270828247], + [3.2001798152923584, -8.403129577636719], + [0.014687232673168182, 14.378131866455078], + [10.26388931274414, -2.537766695022583], + [-0.022915609180927277, 12.593993186950684], + [0.13287794589996338, 5.993680953979492], + [-2.7485039234161377, -3.9966912269592285], + [-0.8529208302497864, -3.2513415813446045], + [4.180053234100342, -3.442575693130493], + [-5.476848125457764, 2.2571661472320557], + [3.5251576900482178, 0.9987094402313232], + [8.40058708190918, -2.3057363033294678], + [4.721526622772217, 7.1031341552734375], + [2.8919320106506348, -3.5862441062927246], + [2.495234727859497, 4.120553970336914], + [8.682446479797363, -2.3108479976654053], + [-6.554867267608643, 0.25020766258239746], + [4.874411106109619, -3.6802303791046143], + [6.122206687927246, -2.8494160175323486], + [3.8910093307495117, -4.276360988616943], + [2.9138221740722656, -1.0874642133712769], + [-2.371259927749634, 2.1945486068725586], + [3.068718671798706, -4.077127456665039], + [-5.353111743927002, -7.513608455657959], + [0.9004851579666138, -6.872332572937012], + [3.323457717895508, -8.25109577178955], + [0.19813472032546997, 10.402351379394531], + [1.6574848890304565, -3.280884027481079], + [6.920677185058594, -1.9886430501937866], + [-0.028553076088428497, 9.884851455688477], + [-3.7987377643585205, -3.4838812351226807], + [-3.4927761554718018, -0.8182100057601929], + [-3.3575756549835205, 4.095003128051758], + [-2.8826797008514404, 7.31882905960083], + [1.579545497894287, -7.134034156799316], + [7.9611897468566895, -2.4341490268707275], + [8.347790718078613, -2.094578266143799], + [10.247353553771973, -2.4290549755096436], + [8.211579322814941, -2.215479612350464], + [2.7221758365631104, -3.6643762588500977], + [2.3708455562591553, 0.3700171113014221], + [-4.723891735076904, 6.823932647705078], + [4.215585231781006, 1.885074257850647], + [-0.5119794011116028, -1.0251408815383911], + [-4.108673572540283, -6.869071006774902], + [0.010871224105358124, 12.913461685180664], + [6.204650402069092, -1.5020177364349365], + [3.7252910137176514, 0.9122444987297058], + [5.976898193359375, -5.576259613037109], + [8.806779861450195, -2.2579469680786133], + [-2.223987340927124, 4.583339691162109], + [2.295057535171509, 0.4606074094772339], + [-0.0538138821721077, 12.203163146972656], + [2.7498514652252197, 5.844332695007324], + [2.5321340560913086, -5.387789726257324], + [-5.144527912139893, -3.1802687644958496], + [-2.0022056102752686, 2.0195229053497314], + [-2.894296407699585, -1.9778562784194946], + [-3.2797858715057373, -1.5220160484313965], + [6.332050323486328, -1.5739573240280151], + [3.4202969074249268, -6.836472511291504], + [-1.0342679023742676, -2.543597459793091], + [-0.8913338780403137, -3.2168128490448], + [-1.8499855995178223, 1.96646249294281], + [3.559353828430176, 1.422817349433899], + [4.636964797973633, -3.469813108444214], + [-3.60197377204895, 4.296001434326172], + [-4.63743782043457, 4.705142021179199], + [2.9781477451324463, -4.218268871307373], + [-3.197842836380005, -1.4793802499771118], + [-4.088877201080322, -6.671016693115234], + [1.4740073680877686, -7.188495635986328], + [-3.0915110111236572, -2.5229101181030273], + [-1.984562873840332, 1.7955386638641357], + [-6.4273858070373535, 7.832340240478516], + [-2.795452356338501, 4.380697250366211], + [2.2672667503356934, -0.07117784023284912], + [-0.09640488773584366, -0.8140965700149536], + [-1.8374857902526855, 2.373924732208252], + [-2.235430955886841, -0.6281710267066956], + [2.286893606185913, 7.204817771911621], + [1.541433334350586, -5.709253787994385], + [0.1452380120754242, -1.4989103078842163], + [-2.018720865249634, 1.1080962419509888], + [5.786769390106201, 7.877213478088379], + [3.427217483520508, 0.4827222228050232], + [-8.382744789123535, -0.427284836769104], + [7.0607805252075195, -5.429625511169434], + [-2.317927122116089, 2.343393325805664], + [-2.068650245666504, 2.4715042114257812], + [3.0185906887054443, -4.170463562011719], + [9.749892234802246, -2.4525492191314697], + [-0.009668655693531036, 9.597034454345703], + [-5.758673191070557, 2.592416286468506], + [2.7379720211029053, 4.153885841369629], + [2.112399101257324, -7.511381149291992], + [5.21785831451416, 6.850680351257324], + [1.2153151035308838, 5.560060501098633], + [-4.187169551849365, -5.707685470581055], + [-3.0182101726531982, -4.992666244506836], + [3.444274663925171, 5.5529093742370605], + [-4.459391117095947, -1.1539136171340942], + [11.235246658325195, -2.6312458515167236], + [-4.000076770782471, -0.16557848453521729], + [5.302037239074707, 7.733522415161133], + [-0.30086177587509155, -2.1750118732452393], + [-2.4291160106658936, 1.246660590171814], + [2.06176495552063, 3.769892930984497], + [-4.240329265594482, 5.002841472625732], + [9.93205738067627, -2.6143171787261963], + [-4.968338489532471, -5.6949615478515625], + [2.3398468494415283, 5.819316864013672], + [-4.301742076873779, 4.515061378479004], + [0.2045961618423462, 10.477017402648926], + [2.9694859981536865, 5.67611026763916], + [-4.307103633880615, -0.8218446373939514], + [5.596086025238037, -2.69415020942688], + [2.515883207321167, 1.0532317161560059], + [-1.6180875301361084, 0.10729038715362549], + [9.526713371276855, -2.4956793785095215], + [3.813873291015625, -1.8370112180709839], + [-4.578640937805176, -7.24220085144043], + [0.007542066276073456, 10.048368453979492], + [-0.49449339509010315, -1.5310906171798706], + [-4.451701641082764, 5.211643695831299], + [-4.214953899383545, -3.3837249279022217], + [-1.9036978483200073, 1.2066715955734253], + [-2.041069746017456, -4.866990089416504], + [-2.080469846725464, 2.415534734725952], + [5.049712181091309, -4.9229631423950195], + [8.310532569885254, -3.034202814102173], + [0.04974978417158127, 11.420656204223633], + [-0.47215506434440613, 0.38460373878479004], + [2.5952816009521484, 0.5789912939071655], + [-4.958286762237549, -7.683528900146484], + [2.284498453140259, 3.8314387798309326], + [2.993182420730591, -4.028937816619873], + [-4.39731502532959, 7.08485746383667], + [2.827082395553589, 7.077349662780762], + [-4.371878623962402, -6.273085594177246], + [1.9134503602981567, 4.065070152282715], + [7.158233642578125, -1.731243371963501], + [8.804341316223145, -2.626120090484619], + [3.617266893386841, -5.634866714477539], + [-3.075188398361206, -5.5770978927612305], + [-3.0333340167999268, -1.4763174057006836], + [2.151524066925049, 3.2355899810791016], + [-6.865253925323486, 8.090839385986328], + [-5.215193271636963, -5.019121170043945], + [8.705082893371582, -2.3504014015197754], + [-2.0044071674346924, 2.6084530353546143], + [-5.1089396476745605, -4.3231353759765625], + [-5.439127445220947, 6.0342559814453125], + [0.21296590566635132, 11.14517593383789], + [-1.983248233795166, -2.5349650382995605], + [-3.608289957046509, 6.442877292633057], + [-3.4295718669891357, 6.798895835876465], + [2.7215640544891357, 3.4028632640838623], + [-5.138278484344482, -3.049447536468506], + [-2.823873519897461, -4.471706867218018], + [0.05836581438779831, -1.6109141111373901], + [3.553588628768921, -3.4826066493988037], + [2.6365840435028076, -7.36135196685791], + [1.7387737035751343, -7.567548751831055], + [-0.008301086723804474, 12.376089096069336], + [3.0384395122528076, -3.9131081104278564], + [-5.410373210906982, -3.2451817989349365], + [0.21122509241104126, 11.51077651977539], + [-2.400660991668701, -2.4475858211517334], + [-4.8247504234313965, -5.498249530792236], + [3.175990581512451, -4.487300872802734], + [-6.8733391761779785, 1.2088403701782227], + [3.4914426803588867, -4.285159587860107], + [-4.792388439178467, -5.996601104736328], + [3.155596971511841, -4.352373123168945], + [2.4493696689605713, 4.362432479858398], + [-5.3653764724731445, -3.1177093982696533], + [-4.959127426147461, -7.667177677154541], + [-4.206838607788086, -6.493358612060547], + [-5.002655029296875, -7.529719829559326], + [3.861264228820801, -5.061637878417969], + [4.518179416656494, -3.126685857772827], + [-3.138585329055786, -4.340371608734131], + [-5.327518939971924, -0.5022960305213928], + [-2.1839487552642822, 2.445019245147705], + [0.2757996916770935, 11.398719787597656], + [2.943047285079956, -3.426604986190796], + [1.6323065757751465, 3.5454418659210205], + [0.023147456347942352, 0.8785253763198853], + [-3.1956756114959717, 3.5502593517303467], + [1.3140254020690918, 5.974240303039551], + [-0.7290250658988953, 1.512340784072876], + [3.3813726902008057, 1.9217884540557861], + [9.875813484191895, -2.3997998237609863], + [5.4893012046813965, 7.110889911651611], + [2.1307830810546875, 0.012587007135152817], + [4.156225681304932, 1.537551999092102], + [-1.6147489547729492, 3.323335886001587], + [-6.570882320404053, -1.8307081460952759], + [3.2389943599700928, -7.3008222579956055], + [-1.3454782962799072, 2.416936159133911], + [1.0944600105285645, -7.250304222106934], + [6.16942834854126, -1.2714850902557373], + [-5.382169246673584, 0.3304334878921509], + [2.1466948986053467, 0.22882768511772156], + [1.0713648796081543, 1.7984381914138794], + [-1.955281376838684, 2.439458131790161], + [2.282853841781616, -6.039050102233887], + [0.0010105296969413757, 9.159168243408203], + [0.9765744805335999, -6.653942584991455], + [-2.8211328983306885, 2.5137405395507812], + [-1.9418418407440186, 2.1232409477233887], + [0.300749808549881, -0.34893015027046204], + [-2.252617120742798, -1.1157740354537964], + [0.22246116399765015, 12.01237678527832], + [6.937383651733398, 8.390884399414062], + [-4.495316505432129, -6.725340843200684], + [1.9648888111114502, -7.868137359619141], + [5.480205059051514, -0.6908524036407471], + [3.535592794418335, 1.1386771202087402], + [1.3648929595947266, -6.3471856117248535], + [-0.028213150799274445, 12.543115615844727], + [2.5544960498809814, 1.5026023387908936], + [4.141445159912109, 7.1301727294921875], + [5.358307361602783, -6.259593963623047], + [6.6956024169921875, -1.4559282064437866], + [5.494821071624756, 6.771175384521484], + [2.5205397605895996, 5.652350425720215], + [-4.420271396636963, -6.020568370819092], + [-5.513386249542236, -1.031203269958496], + [-3.8216803073883057, -4.4868669509887695], + [2.1542351245880127, -6.813617706298828], + [1.6200748682022095, -7.470655918121338], + [6.744377613067627, -1.554052710533142], + [-0.0026743486523628235, 9.512663841247559], + [2.5685508251190186, -8.763046264648438], + [-0.8437146544456482, -1.2240707874298096], + [-5.57609748840332, -7.705663681030273], + [9.839850425720215, -2.4787240028381348], + [-1.9699115753173828, 2.4182827472686768], + [3.3589026927948, -4.709536075592041], + [3.5909764766693115, 5.739006042480469], + [-4.806152820587158, 5.6906328201293945], + [4.484812259674072, 6.410431861877441], + [3.198824167251587, -7.490524768829346], + [2.649937391281128, 1.6520658731460571], + [1.9505770206451416, -8.16702651977539], + [-0.17045998573303223, 9.786449432373047], + [7.702245235443115, -2.0944807529449463], + [-5.448364734649658, 3.99202561378479], + [-2.3474974632263184, 6.682833194732666], + [5.727717399597168, -0.7903965711593628], + [5.2785773277282715, -5.948299407958984], + [-1.3491979837417603, 1.8109163045883179], + [1.5313565731048584, 2.1154797077178955], + [-5.261258602142334, -1.026183009147644], + [-5.026744365692139, 4.2811150550842285], + [3.4716107845306396, -3.873836040496826], + [6.613628387451172, -4.602497100830078], + [1.8150320053100586, 2.039005994796753], + [5.984409809112549, 7.9477009773254395], + [2.9504482746124268, -4.608988285064697], + [9.938915252685547, -2.466264009475708], + [-2.951582193374634, -3.1027517318725586], + [0.34314578771591187, 10.382884979248047], + [9.52004337310791, -2.3967936038970947], + [-7.163891315460205, -0.9405798316001892], + [-2.9132280349731445, 2.621692657470703], + [2.965906858444214, 0.6314051151275635], + [-0.8907090425491333, 1.4351903200149536], + [8.37010383605957, -2.2268989086151123], + [5.845855236053467, 7.437036514282227], + [11.201607704162598, -2.472846746444702], + [-2.8308699131011963, -4.068274021148682], + [-1.9108179807662964, 2.5209078788757324], + [3.312670946121216, -5.037321090698242], + [-1.8584179878234863, -4.855628967285156], + [6.120292663574219, -2.7989790439605713], + [3.846803903579712, -3.6046688556671143], + [-5.127658843994141, -1.993180513381958], + [8.516938209533691, -2.388749122619629], + [6.134957790374756, -3.0644521713256836], + [3.597562074661255, -7.705018043518066], + [-4.85292911529541, 0.423772931098938], + [-2.3179142475128174, -4.532753944396973], + [-2.2098238468170166, 2.174618721008301], + [0.13527947664260864, 12.166902542114258], + [1.8001887798309326, -5.562331199645996], + [1.241162657737732, -6.199921131134033], + [-3.8917882442474365, -5.580155372619629], + [-3.396629810333252, -4.754144191741943], + [3.4840610027313232, -3.7002174854278564], + [3.934847593307495, 1.7481998205184937], + [-0.5041103363037109, -2.385305881500244], + [-2.10029673576355, -3.213330030441284], + [-4.714579105377197, -2.1701743602752686], + [6.376194477081299, -2.7541754245758057], + [-2.5670557022094727, 0.4706242084503174], + [3.4264414310455322, -2.0324578285217285], + [8.923476219177246, -2.3830230236053467], + [-1.7379488945007324, -3.2517590522766113], + [-0.13423067331314087, 13.69955062866211], + [1.7564351558685303, 0.7639185190200806], + [-4.385271072387695, -1.8288389444351196], + [-7.60784387588501, 8.95935344696045], + [-6.369232654571533, 7.5087432861328125], + [11.615817070007324, -2.64280366897583], + [4.5643510818481445, -7.0417938232421875], + [5.471982955932617, -1.527580738067627], + [-3.7613513469696045, -1.8023821115493774], + [10.318602561950684, -2.4059009552001953], + [3.049055814743042, 0.885948657989502], + [7.59665060043335, -1.7693662643432617], + [-3.486956834793091, 2.958141326904297], + [1.8483099937438965, -6.077676296234131], + [0.7566973567008972, -0.5320473313331604], + [3.1826601028442383, -3.7742843627929688], + [-3.0230653285980225, 4.830202102661133], + [3.472400665283203, -3.573050022125244], + [7.270063877105713, 8.756772994995117], + [4.313424110412598, -3.9973576068878174], + [0.1202472671866417, -1.431212306022644], + [0.9161586165428162, -7.143094539642334], + [-4.275999069213867, -6.70974063873291], + [10.043408393859863, -2.4437220096588135], + [4.653509616851807, -3.7792813777923584], + [9.971388816833496, -2.3061318397521973], + [-2.8995935916900635, -2.8650882244110107], + [0.1475508213043213, 10.200074195861816], + [-4.545042037963867, -3.399369478225708], + [-7.244737148284912, 8.526914596557617], + [-4.713287830352783, 4.153623104095459], + [1.2668306827545166, 0.020459499210119247], + [-2.4510996341705322, 1.6244480609893799], + [2.489515542984009, 5.474658012390137], + [-3.124946355819702, 7.3557939529418945], + [-3.8729488849639893, 5.486292839050293], + [3.4832942485809326, -8.425338745117188], + [-2.3674705028533936, -3.75411319732666], + [3.009915590286255, -4.253495693206787], + [-6.932816028594971, 8.160429000854492], + [-2.6781704425811768, -3.4446520805358887], + [0.022951535880565643, 12.582438468933105], + [2.9741575717926025, 0.9561110734939575], + [1.906122088432312, 4.806456565856934], + [3.685903310775757, -3.607884407043457], + [0.15511053800582886, 10.08045768737793], + [-1.8149311542510986, 2.5333168506622314], + [5.416916370391846, 7.2017436027526855], + [3.3258612155914307, -4.2971510887146], + [-2.568288803100586, 2.0181546211242676], + [-4.833600044250488, 4.838204383850098], + [-6.588404655456543, 0.16166400909423828], + [-2.641798257827759, -3.3354578018188477], + [-3.6254498958587646, -2.082794189453125], + [-2.458789110183716, -3.071364641189575], + [-1.923707127571106, 2.464855909347534], + [3.8537087440490723, 1.3845481872558594], + [-2.8746178150177, -5.256548881530762], + [2.6087045669555664, 6.052403926849365], + [0.012166433036327362, 12.307924270629883], + [-2.2956292629241943, 2.315664529800415], + [7.3456807136535645, -2.1162121295928955], + [1.6131303310394287, -7.95644998550415], + [-4.432527542114258, -0.4017578959465027], + [-4.557518482208252, -1.3941888809204102], + [8.8851900100708, -2.396162986755371], + [3.3403966426849365, -5.352287292480469], + [5.569475173950195, -1.739344835281372], + [-2.5605506896972656, -5.702869415283203], + [2.6118195056915283, -4.776249885559082], + [3.210829734802246, -8.80548095703125], + [5.323756217956543, -1.0814932584762573], + [1.7597558498382568, 3.7715678215026855], + [-5.107768535614014, -3.375486373901367], + [-1.613219141960144, -0.7959499359130859], + [2.8870294094085693, -4.150903701782227], + [4.504021644592285, -2.2667648792266846], + [-3.5135133266448975, 4.995030403137207], + [2.2015085220336914, -8.07444953918457], + [0.160863995552063, 12.199539184570312], + [-4.819778919219971, -7.079516410827637], + [-5.584855079650879, 6.30953311920166], + [-6.114633083343506, 0.7580691576004028], + [1.2483867406845093, -4.127893447875977], + [6.942080974578857, 8.518119812011719], + [3.8057405948638916, -0.1568705290555954], + [2.9718804359436035, -4.233011245727539], + [3.098259687423706, -4.426874160766602], + [2.3560678958892822, 5.642502784729004], + [-7.578781604766846, -0.4047701358795166], + [-6.465051651000977, 0.6735679507255554], + [-3.0870258808135986, 1.9360153675079346], + [6.030829906463623, -3.0827956199645996], + [-2.615402936935425, 2.087676763534546], + [-3.5187325477600098, -3.585442304611206], + [0.21917074918746948, 10.742929458618164], + [2.965651273727417, 5.392110824584961], + [5.589974880218506, -4.724913597106934], + [-4.66146993637085, -6.216750144958496], + [8.661580085754395, -2.3779051303863525], + [7.911965847015381, -2.273333787918091], + [-5.200479507446289, 4.972429275512695], + [-3.681121349334717, -5.685981750488281], + [6.563910007476807, -1.4913806915283203], + [-1.5396595001220703, 0.19731655716896057], + [3.2984042167663574, -5.220548629760742], + [-2.4967172145843506, -4.598489761352539], + [0.7085690498352051, 5.491451263427734], + [-0.0632234588265419, -1.5024309158325195], + [-3.7783215045928955, -5.577825546264648], + [0.22038835287094116, 10.690777778625488], + [10.559934616088867, -2.420260190963745], + [-4.067978858947754, -5.940252304077148], + [-4.746129512786865, -2.8003969192504883], + [4.665018081665039, -0.9213196635246277], + [3.9541800022125244, -0.8127803206443787], + [3.1518642902374268, -4.317392826080322], + [9.541340827941895, -2.368108034133911], + [-2.1205804347991943, 2.715601682662964], + [2.9396822452545166, -6.11033296585083], + [-5.442743301391602, -0.41141194105148315], + [1.1610898971557617, -4.71188497543335], + [1.1098780632019043, 3.5168142318725586], + [2.5981738567352295, -9.204272270202637], + [2.0174660682678223, 0.07927462458610535], + [7.022606372833252, 8.535967826843262], + [5.6844000816345215, -1.0117422342300415], + [-3.936729669570923, 0.29849565029144287], + [7.784970760345459, -1.8537248373031616], + [0.11623721569776535, 11.511852264404297], + [1.578902244567871, 3.7697806358337402], + [2.046060800552368, 5.415147304534912], + [-2.3930914402008057, 2.2056944370269775], + [4.0721564292907715, 1.6902720928192139], + [1.3051841259002686, 3.9805715084075928], + [-3.804356336593628, -2.5894320011138916], + [0.14087483286857605, -1.3828767538070679], + [-1.396350383758545, -4.165082931518555], + [-4.3550190925598145, -6.013416290283203], + [2.56634259223938, 0.4928255081176758], + [-2.1110706329345703, 2.0887796878814697], + [-3.973083019256592, -4.192136764526367], + [-0.09626703709363937, -1.5898011922836304], + [0.7502478957176208, -6.271640777587891], + [3.055753469467163, -5.220651626586914], + [1.4377553462982178, -7.250894546508789], + [-4.695724964141846, -0.613653838634491], + [-2.0956897735595703, 2.4007809162139893], + [0.5573005080223083, 11.504935264587402], + [-2.187208890914917, 2.736668586730957], + [-5.061920642852783, 4.847123622894287], + [3.2138988971710205, -9.247069358825684], + [-2.626887559890747, -2.683685064315796], + [1.154738187789917, -0.06544166803359985], + [2.0383241176605225, 5.116902828216553], + [0.1208411380648613, 12.487771034240723], + [-0.6595077514648438, -1.134708285331726], + [8.679604530334473, -2.215247869491577], + [-2.305285930633545, 2.3468070030212402], + [4.755136489868164, 7.219299793243408], + [0.8524301052093506, -0.6442016959190369], + [-2.0385148525238037, 2.5072083473205566], + [2.10127592086792, -7.390895843505859], + [-3.756088972091675, -5.461366653442383], + [1.7750740051269531, 4.803984642028809], + [1.0773437023162842, -6.722517967224121], + [-0.0004879310727119446, 13.43519401550293], + [0.039102546870708466, 9.27513313293457], + [4.457156181335449, -3.181687593460083], + [-4.727126598358154, 4.2195892333984375], + [-4.628303050994873, -6.836392402648926], + [-1.0056849718093872, -3.2678873538970947], + [6.085491180419922, -1.3775529861450195], + [-0.10210952907800674, -0.8316836357116699], + [-6.096156120300293, 8.815323829650879], + [2.6759865283966064, -3.738049030303955], + [5.600374221801758, -1.4167953729629517], + [2.7880303859710693, -3.9708735942840576], + [0.2598997950553894, 10.070939064025879], + [-2.5734145641326904, 2.8023667335510254], + [2.207840919494629, 1.2656346559524536], + [-2.3323357105255127, 2.8139712810516357], + [0.4890701174736023, -4.602278709411621], + [1.8085527420043945, 3.7066454887390137], + [2.4047768115997314, 1.8107035160064697], + [4.184346675872803, 7.0034098625183105], + [-2.4880292415618896, 3.3301000595092773], + [8.674725532531738, -2.8783538341522217], + [-3.5822741985321045, 5.753819465637207], + [1.8192647695541382, -7.973189353942871], + [0.3506363034248352, 10.828627586364746], + [2.480032205581665, -7.134182453155518], + [-6.475623607635498, 7.529083251953125], + [-3.6465866565704346, -5.4865617752075195], + [3.043806791305542, -9.805388450622559], + [2.8480117321014404, -3.745366334915161], + [3.22983717918396, -6.437185764312744], + [-1.6318060159683228, 1.1643345355987549], + [4.368110179901123, 6.963133811950684], + [0.18350964784622192, 10.374945640563965], + [3.3622937202453613, -4.719149589538574], + [3.050910234451294, -3.864773988723755], + [-0.8932274580001831, -3.4848029613494873], + [9.430811882019043, -2.368011236190796], + [1.429112195968628, -0.9748331904411316], + [-2.362110137939453, 0.38530445098876953], + [-1.8368512392044067, 0.7201811075210571], + [-3.209136724472046, -1.3796762228012085], + [5.284283638000488, -1.774856448173523], + [3.5497944355010986, -6.702783107757568], + [6.974095344543457, 9.052858352661133], + [6.321423530578613, -1.3018094301223755], + [-0.11377228051424026, -1.6350618600845337], + [-1.6809132099151611, -4.641002178192139], + [5.872122287750244, -2.4681928157806396], + [-5.229780673980713, 4.683075904846191], + [-1.95601487159729, -0.2921915054321289], + [-0.1087082102894783, 10.126077651977539], + [-4.123371124267578, -4.480749130249023], + [3.0161798000335693, -3.5312979221343994], + [2.9044785499572754, -4.1248250007629395], + [2.5689427852630615, -8.302712440490723], + [-4.744015693664551, -2.822553873062134], + [11.055288314819336, -2.4411022663116455], + [-5.132883071899414, 5.406006813049316], + [2.349501848220825, -7.316228866577148], + [5.801156520843506, 7.403517723083496], + [-4.903805255889893, 6.767468452453613], + [8.182448387145996, -2.4151668548583984], + [1.666900396347046, 2.181861639022827], + [1.4159469604492188, 1.5872288942337036], + [-7.09508752822876, -1.082545280456543], + [3.4233922958374023, -8.052277565002441], + [5.368730068206787, 7.536700248718262], + [-2.6940996646881104, 6.975650310516357], + [-3.5940167903900146, -3.9240128993988037], + [2.5674614906311035, 5.541894912719727], + [1.8384621143341064, 3.5568361282348633], + [-2.2386362552642822, 2.28666353225708], + [3.137728452682495, -3.969233989715576], + [-5.361112117767334, 3.7800769805908203], + [3.4260857105255127, -2.1603000164031982], + [2.411756992340088, -1.6162724494934082], + [-2.051907539367676, 0.2729683220386505], + [-1.3347539901733398, 0.03794911131262779], + [2.5970757007598877, -3.8520078659057617], + [6.403763294219971, -5.078719139099121], + [2.4568393230438232, 2.2288482189178467], + [-4.995851039886475, -5.872608184814453], + [5.570070743560791, 7.53755521774292], + [2.9266879558563232, -5.371075630187988], + [-2.122211217880249, 2.2491533756256104], + [2.463035821914673, -3.5634706020355225], + [7.992793560028076, -2.2002570629119873], + [9.03213882446289, -2.4168765544891357], + [6.3968048095703125, -4.853646755218506], + [2.072718381881714, 5.0602874755859375], + [2.559727430343628, 5.716629505157471], + [5.668591499328613, -3.2648093700408936], + [4.823267936706543, -1.4690282344818115], + [0.15360337495803833, 11.875617980957031], + [-1.6251661777496338, 0.8473355174064636], + [-0.6496449112892151, 3.4540398120880127], + [-3.6515817642211914, 6.632892608642578], + [3.0753231048583984, -0.7744700312614441], + [-3.4801414012908936, -3.2499008178710938], + [6.711516857147217, 8.10712718963623], + [6.5718607902526855, -2.2433931827545166], + [2.418673515319824, 3.670968770980835], + [1.9514801502227783, 0.8693801164627075], + [-3.0953643321990967, 3.261521100997925], + [0.07748328894376755, 12.376550674438477], + [3.485095262527466, -3.7700910568237305], + [0.7696408629417419, -0.4808903634548187], + [-5.4501142501831055, 1.6961311101913452], + [1.7922632694244385, -0.9404906630516052], + [0.8433707356452942, 4.608107566833496], + [4.392040252685547, -5.003833770751953], + [7.069767475128174, 8.596805572509766], + [3.24660325050354, -4.697531700134277], + [-4.962035179138184, -6.228435039520264], + [8.514988899230957, -2.301422595977783], + [1.5513654947280884, -7.439321517944336], + [-0.04314429312944412, 12.674581527709961], + [2.9606263637542725, -6.945351600646973], + [1.262658715248108, 0.9894886016845703], + [8.97416877746582, -2.601335287094116], + [3.625751256942749, -2.6660280227661133], + [8.071492195129395, -2.705274820327759], + [1.1953271627426147, -6.622421741485596], + [9.468499183654785, -2.593435525894165], + [-2.204890012741089, 2.7392425537109375], + [3.2489402294158936, -3.525641679763794], + [-3.7095112800598145, -6.164585113525391], + [4.212398052215576, -4.040002346038818], + [5.69291353225708, 7.778082370758057], + [5.050522327423096, 7.049735069274902], + [3.673564910888672, -3.4596340656280518], + [0.038630180060863495, 9.680936813354492], + [6.946617603302002, 8.42880630493164], + [-2.337646007537842, -4.281591415405273], + [3.0837442874908447, -4.357108116149902], + [-2.37427020072937, 1.289306879043579], + [5.955576419830322, -2.0249276161193848], + [2.459362268447876, 0.5257327556610107], + [0.18791133165359497, 11.251729965209961], + [6.874903678894043, 8.273019790649414], + [-1.3289294242858887, 1.8958359956741333], + [-4.356753826141357, -6.156101226806641], + [6.317602634429932, 7.769618511199951], + [-4.854910373687744, 2.4447429180145264], + [5.854394435882568, -7.210263729095459], + [7.115302085876465, -2.805083751678467], + [3.7206335067749023, -5.2705912590026855], + [9.627982139587402, -2.4953744411468506], + [-4.069980144500732, 3.820770502090454], + [3.806344509124756, -3.3057901859283447], + [8.173727989196777, -2.240384101867676], + [6.5846266746521, -3.2175166606903076], + [-6.2940802574157715, -1.1493333578109741], + [2.980879545211792, 3.7245535850524902], + [-4.937812328338623, 7.886355400085449], + [-3.0115668773651123, 5.7538909912109375], + [3.014160394668579, -3.897326707839966], + [3.332728862762451, -3.1673519611358643], + [0.07615815848112106, 9.788347244262695], + [1.7935683727264404, -6.59619665145874], + [5.670546054840088, -1.252689003944397], + [2.442420244216919, -6.615563869476318], + [6.104557037353516, 7.701582908630371], + [3.065270185470581, -1.5929796695709229], + [-5.4439311027526855, 5.078536033630371], + [5.538838863372803, -3.3691723346710205], + [-0.05751895159482956, -1.5846525430679321], + [0.6754441261291504, -0.9249838590621948], + [6.911449909210205, -2.9494469165802], + [3.3296725749969482, 1.3046187162399292], + [-0.14174988865852356, -1.6675529479980469], + [9.425349235534668, -2.4428956508636475], + [-2.2659449577331543, 2.313654899597168], + [-3.9480974674224854, -3.1766855716705322], + [-0.00602317601442337, 9.989832878112793], + [6.2771501541137695, -1.2613530158996582], + [1.0660066604614258, 11.457051277160645], + [-4.4887800216674805, 5.399943828582764], + [-3.894822835922241, -0.2597782611846924], + [1.6760530471801758, 2.5245866775512695], + [-1.6755062341690063, -1.7986257076263428], + [2.6403732299804688, -3.803057909011841], + [9.027624130249023, -2.3030858039855957], + [1.8296059370040894, 2.7661101818084717], + [1.6132783889770508, 2.5251305103302], + [-0.062145479023456573, -1.6088091135025024], + [5.365889072418213, -3.350778818130493], + [-1.577101469039917, 2.157949686050415], + [8.010851860046387, -2.3732433319091797], + [1.7380924224853516, -5.840067386627197], + [-3.9747982025146484, -5.947175979614258], + [5.580216884613037, -1.5388273000717163], + [-3.0718777179718018, -3.957392692565918], + [5.252078533172607, -1.6952344179153442], + [-0.40196502208709717, -1.7587460279464722], + [0.020701102912425995, 13.791062355041504], + [3.13213849067688, -5.887126922607422], + [-5.35376501083374, -2.2252142429351807], + [0.6366843581199646, -1.212758183479309], + [-4.286704063415527, 6.099015712738037], + [3.271151065826416, -3.846522808074951], + [-6.36109733581543, 8.264092445373535], + [2.9112000465393066, -5.814032554626465], + [5.136239528656006, 7.3651933670043945], + [-3.197519540786743, 5.616866111755371], + [1.7773517370224, 2.1988112926483154], + [8.34920883178711, -2.374624729156494], + [3.0307483673095703, -4.08683967590332], + [-1.4497839212417603, 0.8092148900032043], + [-0.9694761633872986, 1.7473163604736328], + [6.044856071472168, 7.724119186401367], + [0.5712267160415649, -1.131137728691101], + [-5.1034440994262695, 6.146174430847168], + [-2.744055986404419, 2.0951356887817383], + [-2.5363271236419678, 1.7514511346817017], + [5.619980335235596, 7.330524444580078], + [-4.81353235244751, 7.821179389953613], + [3.5153934955596924, 1.3145934343338013], + [2.369689464569092, 0.9921888113021851], + [-6.972045421600342, -0.6810420751571655], + [3.8151302337646484, 1.4433003664016724], + [-1.0986671447753906, -2.5174238681793213], + [5.450973987579346, -1.2785382270812988], + [2.4297547340393066, -9.291763305664062], + [1.0077731609344482, -5.923175811767578], + [7.280684471130371, -1.7806965112686157], + [3.0125811100006104, 4.557072162628174], + [-4.160379886627197, -3.207899570465088], + [2.7671561241149902, -3.964231014251709], + [-3.679309129714966, -4.534527778625488], + [3.302147388458252, 0.5143048763275146], + [-4.433413982391357, 4.841291904449463], + [3.8893353939056396, -3.497905969619751], + [2.769458770751953, -3.4076218605041504], + [0.8357093334197998, 4.829062461853027], + [0.010784201323986053, 1.741533875465393], + [-3.47794508934021, -6.238712310791016], + [-1.9651927947998047, 2.3992254734039307], + [6.590503215789795, 7.937122344970703], + [-5.1021409034729, -3.2367937564849854], + [-0.7107171416282654, 0.6724648475646973], + [4.855087757110596, -4.97874641418457], + [-4.998002052307129, 5.3218607902526855], + [0.8252863883972168, -6.782087326049805], + [6.035394668579102, -0.8571823835372925], + [3.400458574295044, -3.8166630268096924], + [-1.734666109085083, -3.4798531532287598], + [3.5051093101501465, -3.142707347869873], + [5.4406538009643555, -4.465479850769043], + [-5.337062358856201, 6.167338848114014], + [5.924737930297852, -1.7136040925979614], + [-0.8122667074203491, -0.49525153636932373], + [-4.197088241577148, 1.0887415409088135], + [0.5633552074432373, 4.884330749511719], + [2.775745153427124, -3.869966745376587], + [0.003124706447124481, 13.082846641540527], + [7.380218505859375, 8.728899002075195], + [7.0485758781433105, -3.241208791732788], + [3.498447895050049, -3.490342855453491], + [-4.236877918243408, 3.321582078933716], + [-4.2839579582214355, -1.8518775701522827], + [0.027525179088115692, 11.848734855651855], + [-5.330418586730957, 6.705751895904541], + [-3.6036393642425537, -2.539475917816162], + [3.5603439807891846, 1.4844015836715698], + [-3.541712999343872, 4.580945014953613], + [-4.453773021697998, -1.6188029050827026], + [6.7612996101379395, 8.290369033813477], + [2.3133597373962402, -8.12385368347168], + [-2.118886709213257, 2.609337568283081], + [0.5417003035545349, 11.350177764892578], + [-5.371953964233398, -0.14228171110153198], + [-3.897029161453247, -5.387933254241943], + [-2.4089980125427246, 2.6931190490722656], + [0.22950726747512817, 10.758637428283691], + [3.379620313644409, -4.837038993835449], + [0.6338226795196533, -5.607418060302734], + [-3.0702245235443115, 2.6661593914031982], + [-0.04177463799715042, -1.3501595258712769], + [-2.988340377807617, 4.702171802520752], + [-2.5627217292785645, 1.8656702041625977], + [-2.535837173461914, 1.8231369256973267], + [3.472454309463501, -7.639747619628906], + [4.707590579986572, 7.337175369262695], + [-0.9430617094039917, -1.6672996282577515], + [-3.7387354373931885, 5.513673782348633], + [-6.122231483459473, -1.084654450416565], + [-5.715607166290283, 0.049126382917165756], + [5.83742094039917, -1.1013903617858887], + [-2.762380599975586, 7.099440097808838], + [0.1829628348350525, 12.012166976928711], + [2.019258499145508, 4.537938594818115], + [-5.709935665130615, 7.036614418029785], + [5.666702747344971, 7.4669294357299805], + [-2.07708477973938, 2.5338122844696045], + [-6.862568378448486, 7.808154582977295], + [-1.773080587387085, 4.258017539978027], + [-4.680454254150391, -0.9195258617401123], + [1.5216338634490967, 2.4534881114959717], + [0.216846764087677, 10.57391357421875], + [-4.395283222198486, -2.1578502655029297], + [0.21387994289398193, 10.514137268066406], + [-1.1548775434494019, 0.5037717223167419], + [5.701967239379883, 7.012094020843506], + [-0.6322926878929138, -2.447481632232666], + [0.8435060977935791, -4.160902976989746], + [-2.514436960220337, 2.1241507530212402], + [-6.028409481048584, 6.889328479766846], + [-5.110558986663818, -5.9566731452941895], + [-4.450896739959717, 6.273674964904785], + [9.17396068572998, -2.3351941108703613], + [-1.5383514165878296, 2.104388475418091], + [-1.780310034751892, 2.3473575115203857], + [3.5388588905334473, 1.1017787456512451], + [-1.1720540523529053, 5.5434746742248535], + [-6.978913307189941, 1.164947509765625], + [4.7224249839782715, 6.550771713256836], + [-1.7492185831069946, 2.2257120609283447], + [0.01915901154279709, 3.8008477687835693], + [0.02043812721967697, 12.840449333190918], + [5.055513858795166, 7.393703460693359], + [0.22299283742904663, 11.620219230651855], + [3.2121973037719727, -6.630668640136719], + [1.6162152290344238, 5.021594047546387], + [8.224196434020996, -2.2179067134857178], + [3.9321720600128174, 7.126708030700684], + [6.0772199630737305, -4.788924694061279], + [1.2949409484863281, 2.1657040119171143], + [1.284926414489746, -7.32923698425293], + [2.6878347396850586, 4.090390205383301], + [-2.942326784133911, 5.5064496994018555], + [-1.4069081544876099, 1.7317348718643188], + [1.72407865524292, -8.161514282226562], + [1.6796106100082397, -4.8432488441467285], + [3.0429935455322266, -8.461956024169922], + [2.8305485248565674, -9.34685230255127], + [-1.8704051971435547, 2.114790678024292], + [-5.247904300689697, -8.583057403564453], + [-4.448812961578369, -2.2106618881225586], + [-0.8649237155914307, -0.6253358125686646], + [-2.0979723930358887, 2.288039445877075], + [4.237627029418945, -2.986531972885132], + [-3.0232744216918945, -5.265839099884033], + [-4.190769195556641, -4.195657253265381], + [-1.287680745124817, -0.9479963779449463], + [2.944037675857544, 1.182018756866455], + [3.2982254028320312, -3.1572587490081787], + [8.599692344665527, -2.3551924228668213], + [0.14100748300552368, 11.7449312210083], + [-1.0854566097259521, 4.787003993988037], + [-0.16346007585525513, -1.5908504724502563], + [2.476343870162964, -6.050880432128906], + [-6.482446193695068, -2.2009644508361816], + [-4.806678771972656, 5.794900894165039], + [8.385109901428223, -2.288208484649658], + [5.8161940574646, -2.543391466140747], + [2.3974273204803467, 3.8662519454956055], + [6.436774730682373, -5.517457008361816], + [2.5645906925201416, -6.523087978363037], + [4.192235946655273, -5.902767181396484], + [-5.208813667297363, -2.6331255435943604], + [6.326172828674316, 7.7736406326293945], + [-5.404877185821533, 2.9862422943115234], + [2.484452486038208, 4.047983169555664], + [-2.3212947845458984, 2.03586483001709], + [-4.675313472747803, -6.758155822753906], + [0.06706839054822922, 9.813528060913086], + [3.120958089828491, -4.249325275421143], + [7.6721510887146, -2.809875726699829], + [2.8304905891418457, -8.020052909851074], + [-3.8079168796539307, -5.520235061645508], + [1.99454665184021, -7.331908226013184], + [-3.995535373687744, -6.098837852478027], + [-0.8629928231239319, -2.894422769546509], + [-6.149593830108643, -0.870101809501648], + [2.464332103729248, -2.9094526767730713], + [-0.8877018094062805, -3.1464178562164307], + [-4.281294822692871, 5.974196434020996], + [2.4176206588745117, -8.209295272827148], + [4.063482284545898, -3.8462347984313965], + [-4.720658779144287, -6.361299514770508], + [8.948525428771973, -2.5730130672454834], + [3.789846181869507, 1.0051144361495972], + [-4.6150803565979, -2.2427947521209717], + [5.602868556976318, 7.731545448303223], + [-4.628200054168701, -6.708425521850586], + [-2.2931668758392334, 2.364720582962036], + [-6.654839992523193, 0.03099202737212181], + [-2.467972755432129, 2.077533721923828], + [2.261781930923462, 2.4001851081848145], + [6.201517105102539, -3.1664154529571533], + [6.59181547164917, -3.7287075519561768], + [-5.678573131561279, 6.400335311889648], + [3.346632957458496, 1.2107666730880737], + [0.3891204595565796, 11.20058536529541], + [4.899559497833252, 6.225729465484619], + [3.7560312747955322, 1.5676435232162476], + [9.088582038879395, -2.2084555625915527], + [9.899392127990723, -2.4578237533569336], + [4.443928241729736, -3.73085355758667], + [2.1229970455169678, 2.3580689430236816], + [-4.56437873840332, -0.22726762294769287], + [0.06843852251768112, 12.137160301208496], + [3.0813815593719482, -7.894650936126709], + [-3.944453239440918, -6.024379730224609], + [3.3124797344207764, 1.2000484466552734], + [-4.856876373291016, -1.4802366495132446], + [-2.602985382080078, 1.240376591682434], + [4.8625569343566895, -1.048155665397644], + [-2.835498571395874, -3.6415979862213135], + [7.220839023590088, -3.0543415546417236], + [0.028388075530529022, 9.337943077087402], + [0.20101124048233032, 10.481599807739258], + [-7.117456912994385, -0.7570677399635315], + [0.008153684437274933, -1.5372340679168701], + [-1.2294855117797852, 1.5325740575790405], + [-3.355668783187866, 0.8470515012741089], + [-3.7867908477783203, 5.498270034790039], + [-0.030204124748706818, 12.252546310424805], + [8.128511428833008, -2.4170868396759033], + [-4.511356353759766, 5.05778694152832], + [-4.065025806427002, -2.473395347595215], + [-4.600494861602783, -7.460824966430664], + [3.31830096244812, 0.11300656199455261], + [0.9963454604148865, 1.056660532951355], + [-1.9755799770355225, 2.275546073913574], + [2.732767105102539, 4.527533054351807], + [0.2798616290092468, 9.949690818786621], + [-1.3114335536956787, -1.6146942377090454], + [-4.51220703125, -2.8015878200531006], + [-2.1276049613952637, 2.414518356323242], + [-4.213137149810791, -5.8046417236328125], + [-3.7542526721954346, 3.891993761062622], + [-4.5358991622924805, -2.812438726425171], + [-1.9089363813400269, 2.3856401443481445], + [-1.9413907527923584, 2.5042881965637207], + [5.05302095413208, -2.1854090690612793], + [0.08642863482236862, -2.783116579055786], + [0.23489439487457275, 10.645929336547852], + [-3.19478178024292, -1.9267481565475464], + [-5.246522426605225, 5.628298759460449], + [5.638477802276611, -1.1175308227539062], + [-2.0936334133148193, 1.253366231918335], + [9.550442695617676, -2.42403244972229], + [3.548030376434326, -4.001497745513916], + [-2.074706792831421, 2.184429168701172], + [3.469677209854126, -8.701027870178223], + [7.906883239746094, -2.212679624557495], + [3.6308038234710693, -7.425362586975098], + [-5.224919319152832, -1.9469077587127686], + [-2.562793254852295, 2.010413885116577], + [3.3719887733459473, 5.591911315917969], + [-3.8746697902679443, -3.8817238807678223], + [3.4785940647125244, -5.062149524688721], + [-6.747605800628662, 8.222654342651367], + [-4.060904502868652, -6.330732822418213], + [7.266737461090088, 8.683127403259277], + [-5.148730754852295, -8.099170684814453], + [-2.1869542598724365, -3.723348379135132], + [-6.529114723205566, 7.533858776092529], + [-0.17315301299095154, -1.7469526529312134], + [7.025651454925537, -1.52443265914917], + [1.8289499282836914, 1.6853729486465454], + [-6.2020792961120605, 6.807371139526367], + [7.650146961212158, -3.782762289047241], + [-0.1899239420890808, -1.5002602338790894], + [3.896777391433716, -6.010133743286133], + [0.06966441124677658, 11.529324531555176], + [6.246798038482666, -1.3783868551254272], + [-3.4499802589416504, -1.3402904272079468], + [-2.736750841140747, 2.0223939418792725], + [9.041015625, -2.3961198329925537], + [-3.332867383956909, -3.2916295528411865], + [0.2573603391647339, 11.335015296936035], + [6.414292812347412, 7.918478488922119], + [1.5477172136306763, -7.640130519866943], + [-3.448162794113159, -1.3742954730987549], + [-4.115149974822998, -2.843308210372925], + [-2.4276480674743652, 2.1581733226776123], + [2.9470295906066895, 4.361428260803223], + [-3.8545773029327393, 5.475691795349121], + [-4.546298503875732, -6.636204719543457], + [2.323976993560791, 0.9175016283988953], + [-2.7224128246307373, -2.280883550643921], + [7.5314836502075195, 8.906242370605469], + [-4.158075332641602, -1.1850481033325195], + [-4.437680721282959, -1.9539809226989746], + [2.7733042240142822, -9.379692077636719], + [-5.406689167022705, 6.694117546081543], + [-3.3210248947143555, 4.901435852050781], + [2.8907227516174316, -3.1710164546966553], + [2.9892475605010986, -4.087564468383789], + [-0.0139395073056221, 12.648436546325684], + [4.141256332397461, 1.5806937217712402], + [-4.576360702514648, -0.3534073829650879], + [1.8199710845947266, 1.2481497526168823], + [-2.3181943893432617, 2.2819430828094482], + [5.707712650299072, -3.040693998336792], + [-3.6896350383758545, -1.0557142496109009], + [-2.7663371562957764, -3.6600592136383057], + [6.091598987579346, 7.747622013092041], + [3.527555465698242, -3.9234628677368164], + [4.117161750793457, 6.546750068664551], + [5.7240824699401855, 7.985840797424316], + [-3.9803810119628906, -5.90878963470459], + [-7.202346324920654, 8.448517799377441], + [0.4973384737968445, -0.618432343006134], + [9.362859725952148, -2.3563969135284424], + [7.163059711456299, -2.0204811096191406], + [-0.14848735928535461, -0.9422059655189514], + [2.0521183013916016, 0.5581663846969604], + [2.9735047817230225, -7.754214286804199], + [-4.0653767585754395, 4.155930519104004], + [-0.08532620221376419, 9.074419021606445], + [-3.28416109085083, -4.492524147033691], + [-3.2754900455474854, -5.8926777839660645], + [2.9763095378875732, 6.15390682220459], + [4.4324049949646, 6.358890056610107], + [-4.6283278465271, -6.585054397583008], + [5.33391809463501, 7.393196105957031], + [10.659480094909668, -2.4829771518707275], + [-2.5057289600372314, 2.2204701900482178], + [7.068739414215088, -1.7209596633911133], + [-5.384179592132568, 6.130383014678955], + [2.5599374771118164, -3.570800542831421], + [-5.3387041091918945, -0.02447480335831642], + [4.9103240966796875, -1.1024354696273804], + [8.512137413024902, -2.354416847229004], + [5.6190900802612305, -4.625800609588623], + [5.020127773284912, -2.6197383403778076], + [6.490361213684082, -3.846626043319702], + [3.824261426925659, -6.714184284210205], + [-2.933911085128784, -2.6759867668151855], + [3.4701168537139893, -7.620729446411133], + [-7.498678684234619, 8.865806579589844], + [-2.0444271564483643, 2.343590021133423], + [-2.4973909854888916, 2.0701565742492676], + [3.3932323455810547, 1.2403781414031982], + [-4.377788066864014, 6.013047218322754], + [-4.233519077301025, -6.9500579833984375], + [1.6669886112213135, 4.615242958068848], + [10.37191104888916, -2.440356969833374], + [-2.544980525970459, 2.184000253677368], + [-2.4058377742767334, 2.838557004928589], + [-3.712486505508423, -3.330787420272827], + [-2.368537425994873, 2.7020976543426514], + [2.521318197250366, -8.915145874023438], + [2.777770757675171, -3.983879804611206], + [4.123741149902344, 6.77322244644165], + [-4.299117088317871, -5.680393218994141], + [2.8233654499053955, -3.9451775550842285], + [-5.149685382843018, -3.3727951049804688], + [4.020576000213623, -3.313478469848633], + [8.458271026611328, -2.29807448387146], + [-0.8286380171775818, 0.5244486331939697], + [1.1334648132324219, -4.035512924194336], + [8.790133476257324, -2.2434680461883545], + [1.3010941743850708, -0.8833053112030029], + [-2.4074010848999023, 2.156482458114624], + [5.026379585266113, -1.3247148990631104], + [5.305693626403809, -1.1512242555618286], + [8.49549388885498, -2.324503183364868], + [-2.5880351066589355, 1.8722199201583862], + [3.2619285583496094, -6.520930290222168], + [3.0281167030334473, -5.867374420166016], + [0.20244967937469482, 11.328069686889648], + [1.7962961196899414, 2.9185526371002197], + [3.1593587398529053, -8.191534042358398], + [2.181175470352173, 4.417954444885254], + [-3.4608757495880127, -5.776139259338379], + [0.006192021071910858, 12.005926132202148], + [-6.355144500732422, 7.82810115814209], + [0.8431364893913269, -0.2917385697364807], + [3.101720094680786, -4.123654842376709], + [0.005306161940097809, -0.7255741357803345], + [3.2959249019622803, -3.8888485431671143], + [-5.896579265594482, -1.331314206123352], + [-4.440218448638916, -3.0835769176483154], + [0.022719554603099823, 12.408930778503418], + [-4.700564384460449, 3.908287286758423], + [10.443522453308105, -2.4693968296051025], + [3.6705524921417236, -5.953036785125732], + [0.15717703104019165, 10.016701698303223], + [0.24182170629501343, 10.537416458129883], + [-1.2104092836380005, 1.436631441116333], + [8.097182273864746, -2.3686325550079346], + [7.678369045257568, -2.0509119033813477], + [-6.6966633796691895, 6.872383117675781], + [4.026012420654297, 6.040738105773926], + [2.928668737411499, -3.3785240650177], + [-4.53925085067749, -7.132800579071045], + [-5.111880302429199, -3.228984832763672], + [0.8807055354118347, -0.7183725237846375], + [3.320011615753174, 1.3084620237350464], + [1.805732250213623, -6.6902642250061035], + [4.294885158538818, -3.6913063526153564], + [-3.676224946975708, -6.258780002593994], + [0.08539622277021408, 11.71042537689209], + [8.78451919555664, -2.4085569381713867], + [-2.3500304222106934, 2.192387342453003], + [7.518936634063721, -2.6085610389709473], + [-0.058974213898181915, 12.652183532714844], + [6.077258586883545, -3.699991464614868], + [-5.592785358428955, -3.4619028568267822], + [0.11854260414838791, 10.012296676635742], + [5.4195990562438965, -5.523599147796631], + [-4.889405727386475, -2.8370354175567627], + [2.9491724967956543, -4.194173336029053], + [9.138533592224121, -2.395521879196167], + [-0.039813391864299774, -0.2792437970638275], + [3.4841127395629883, -7.5435590744018555], + [6.097585201263428, -3.0721466541290283], + [5.511759281158447, -4.267919540405273], + [2.1093828678131104, -3.161846876144409], + [7.053280353546143, -4.138734817504883], + [-3.8198180198669434, 3.9621407985687256], + [2.542545795440674, -4.251422882080078], + [-2.6485397815704346, -2.8926727771759033], + [2.4592583179473877, -9.02637767791748], + [-2.8562841415405273, 1.814012050628662], + [-0.28280267119407654, -4.390177249908447], + [-2.401183843612671, 1.7053941488265991], + [0.7473244071006775, -6.067707538604736], + [-4.078832626342773, -6.447929382324219], + [-2.6024563312530518, -0.3361130356788635], + [-6.755173683166504, 7.665646076202393], + [-4.86059045791626, -0.9488615989685059], + [6.904377460479736, -4.090148448944092], + [7.598062515258789, -2.0641071796417236], + [4.799771308898926, -0.6894626617431641], + [7.012419700622559, -3.935224771499634], + [2.5578620433807373, 3.9567201137542725], + [-0.44573771953582764, -1.2006946802139282], + [2.704501152038574, -9.223451614379883], + [2.7525405883789062, -3.2845983505249023], + [-1.2527140378952026, -1.1876258850097656], + [-7.247251033782959, 8.609978675842285], + [-3.9091289043426514, -5.737066745758057], + [3.3591415882110596, 0.8354043960571289], + [1.5655953884124756, -4.099034309387207], + [-0.27786868810653687, 8.987035751342773], + [-3.356613874435425, -1.6726492643356323], + [-3.826120615005493, -2.2193515300750732], + [1.7183890342712402, 3.0491652488708496], + [-6.261136531829834, 7.060271263122559], + [-6.440274715423584, -0.2669903635978699], + [-5.203170299530029, 5.887500286102295], + [4.307744026184082, -9.179344177246094], + [4.269195556640625, -3.458972692489624], + [-2.8180720806121826, 3.0282957553863525], + [4.256389141082764, -4.088718891143799], + [-0.8684305548667908, -2.174936532974243], + [-3.229433298110962, -5.195490837097168], + [1.4681103229522705, 4.439046859741211], + [-3.978502035140991, -6.73328971862793], + [0.006144516170024872, 13.189746856689453], + [-2.2504727840423584, 1.4396611452102661], + [4.818453311920166, -1.1085937023162842], + [-5.9335408210754395, 6.030834197998047], + [3.1243703365325928, -8.059757232666016], + [-3.684321165084839, -4.879458427429199], + [6.640116214752197, 8.177688598632812], + [5.345162868499756, -3.2005810737609863], + [-2.0804803371429443, 2.3287038803100586], + [3.558039426803589, 5.886780738830566], + [-3.217651605606079, -0.5187050700187683], + [-0.05646539479494095, 9.081598281860352], + [-2.3860888481140137, -2.4327762126922607], + [-0.6167308688163757, -1.5616344213485718], + [6.171172142028809, 8.14059829711914], + [-5.218606472015381, 6.708254814147949], + [-4.366092205047607, -6.664483070373535], + [-4.1627655029296875, -5.823890686035156], + [-2.806698799133301, -3.581786632537842], + [-0.031059034168720245, 9.146235466003418], + [4.350132942199707, -3.480605363845825], + [-2.024076461791992, 2.7107319831848145], + [-6.228409290313721, 0.05757534131407738], + [2.0549089908599854, -9.092826843261719], + [0.8257718086242676, 0.07256068289279938], + [-2.327209711074829, 0.9297133088111877], + [-0.04886794835329056, 12.548301696777344], + [0.17580264806747437, 10.783489227294922], + [5.771602153778076, -1.2734160423278809], + [3.5109589099884033, 5.810626029968262], + [-2.982367753982544, 1.441460132598877], + [-3.3893845081329346, 4.743464469909668], + [0.1527460217475891, 10.98164176940918], + [0.26589319109916687, -1.2013306617736816], + [-4.569760322570801, -2.941669464111328], + [7.663791656494141, -2.2594735622406006], + [3.365604877471924, -4.414863586425781], + [-5.471805095672607, 0.300062894821167], + [-0.012472458183765411, 12.821276664733887], + [-2.1703317165374756, 2.6133430004119873], + [-4.310168743133545, 5.12551736831665], + [3.155141592025757, -3.443218469619751], + [-5.952723026275635, 6.600434303283691], + [-3.4848334789276123, -3.2209901809692383], + [-4.655941486358643, -5.718772888183594], + [3.1584312915802, -5.2320661544799805], + [-0.26639339327812195, -0.24670295417308807], + [2.304807424545288, -7.966509819030762], + [-4.206975936889648, -4.15815544128418], + [1.6832983493804932, -6.67624044418335], + [3.254803419113159, -2.85322642326355], + [-0.9567280411720276, -3.2348215579986572], + [-6.922142505645752, 3.006033420562744], + [-5.989304065704346, 6.834668159484863], + [7.800652980804443, -2.0902178287506104], + [-3.6742308139801025, 6.199802398681641], + [3.369863271713257, 4.870291709899902], + [0.05811076611280441, 11.766515731811523], + [-2.1968319416046143, 0.5358021855354309], + [-2.1771421432495117, 2.228179931640625], + [-1.4173781871795654, 1.7858797311782837], + [8.59559440612793, -2.305450916290283], + [1.171057939529419, -6.755712509155273], + [0.007002286612987518, 12.312491416931152], + [-4.4641032218933105, -1.050968050956726], + [0.012239925563335419, 11.491314888000488], + [-5.475061893463135, -2.6522057056427], + [0.9520971179008484, -6.264662742614746], + [-5.652706146240234, 4.990921497344971], + [2.4470765590667725, -6.884639739990234], + [-2.638017416000366, 1.9318556785583496], + [0.6886922717094421, 10.926351547241211], + [5.200779914855957, -1.3719403743743896], + [0.20059943199157715, 9.936956405639648], + [-4.024744033813477, -0.009304169565439224], + [3.245758533477783, 1.6932488679885864], + [0.009284727275371552, 13.401272773742676], + [3.2005302906036377, -4.160303115844727], + [5.683617115020752, -3.5283119678497314], + [-0.13973277807235718, 10.204018592834473], + [9.47984504699707, -2.413060426712036], + [-1.3678069114685059, 0.43977123498916626], + [5.532149791717529, -1.5988351106643677], + [-5.42453670501709, -2.2956390380859375], + [2.2376933097839355, 2.7206082344055176], + [8.660412788391113, -2.377204656600952], + [3.1137001514434814, -7.969343662261963], + [3.476734161376953, 7.28284215927124], + [3.695101737976074, -5.851070404052734], + [-6.193028926849365, 6.7187957763671875], + [0.28507721424102783, 9.939817428588867], + [-4.486594200134277, -6.141635894775391], + [-1.9908024072647095, 1.9255719184875488], + [1.8564913272857666, -6.2426557540893555], + [-2.921534776687622, 6.0501203536987305], + [-1.8939341306686401, 2.541691541671753], + [-1.0934031009674072, 1.4592748880386353], + [-7.095315933227539, 8.311365127563477], + [10.838038444519043, -2.5130505561828613], + [3.186504364013672, -6.638928413391113], + [-1.9811242818832397, 2.4217491149902344], + [2.4595353603363037, -6.775956153869629], + [2.6469695568084717, -7.144682884216309], + [-2.126255512237549, 2.733259439468384], + [-0.04694003611803055, 9.432961463928223], + [3.9480416774749756, -4.388800621032715], + [-1.7100610733032227, -3.132014036178589], + [3.3656961917877197, -2.8592560291290283], + [4.764062404632568, -2.817293882369995], + [-2.4762134552001953, -1.0000176429748535], + [3.4525272846221924, -7.6721510887146], + [4.9178643226623535, -6.288443088531494], + [2.0579140186309814, 4.605605125427246], + [2.0546343326568604, -1.7831939458847046], + [-4.864712238311768, -5.6301350593566895], + [-1.2076033353805542, 1.7220302820205688], + [3.1069962978363037, -8.052291870117188], + [7.131872653961182, 8.587418556213379], + [-0.35409408807754517, -0.7790105938911438], + [-4.6276936531066895, 4.6689019203186035], + [8.352190971374512, -2.287207841873169], + [0.1979350447654724, 11.699124336242676], + [2.8222815990448, -4.054102897644043], + [2.122551441192627, 6.711510181427002], + [-4.091484546661377, -0.38885632157325745], + [10.389495849609375, -2.5022804737091064], + [-6.36214017868042, 8.39406967163086], + [9.843212127685547, -2.4201152324676514], + [-7.204588413238525, -1.190276026725769], + [-4.381197929382324, -3.3208935260772705], + [-2.403531312942505, 1.1460938453674316], + [-3.8225080966949463, -6.338824272155762], + [8.03978443145752, -2.1980464458465576], + [-2.206296682357788, 2.425520658493042], + [-4.6352667808532715, -0.2724062204360962], + [-4.564873695373535, 3.734689950942993], + [-2.1727283000946045, -4.34136962890625], + [3.5000991821289062, -3.7462050914764404], + [3.6661250591278076, -0.619451105594635], + [3.8964340686798096, -3.6241581439971924], + [9.078425407409668, -2.4940953254699707], + [-2.3885772228240967, -4.40883731842041], + [-6.574670314788818, 1.8103010654449463], + [1.977863073348999, 4.477970123291016], + [9.233922004699707, -2.275848627090454], + [1.2849828004837036, 1.586046814918518], + [3.782275676727295, 1.9023040533065796], + [3.2617762088775635, -8.476542472839355], + [4.50460958480835, -0.17919903993606567], + [5.2732253074646, -2.0602786540985107], + [3.7307422161102295, -2.9657680988311768], + [0.015254668891429901, 13.566230773925781], + [0.08202832192182541, 12.878984451293945], + [7.728390216827393, -2.4524166584014893], + [2.9150524139404297, -4.131948471069336], + [9.60170841217041, -2.4696834087371826], + [10.24558162689209, -2.440777063369751], + [4.267348766326904, -4.562817573547363], + [-0.5456245541572571, -2.2787768840789795], + [2.0756022930145264, 5.000767707824707], + [8.960810661315918, -3.236035108566284], + [0.2196294665336609, 10.95615005493164], + [8.053023338317871, -2.1591386795043945], + [1.8837041854858398, -6.587392330169678], + [0.23698610067367554, 11.241022109985352], + [8.118142127990723, -2.1712424755096436], + [2.1068456172943115, 0.9394518733024597], + [6.040951251983643, -2.453604221343994], + [6.621650218963623, -2.0208370685577393], + [8.030904769897461, -2.2011821269989014], + [-0.0987899973988533, 9.501189231872559], + [8.105644226074219, -2.4592125415802], + [9.045510292053223, -2.4512217044830322], + [1.3128721714019775, -0.3636653423309326], + [-0.015164323151111603, 12.93862533569336], + [-2.13154935836792, 2.5391783714294434], + [2.036031484603882, -7.891329765319824], + [-3.051168918609619, -5.6177473068237305], + [5.034149646759033, 7.000302314758301], + [1.5122195482254028, 4.470843315124512], + [7.867341041564941, -2.1692099571228027], + [2.982139825820923, -3.4194414615631104], + [-4.526136875152588, -2.89534068107605], + [2.460891008377075, -8.211798667907715], + [1.998793363571167, 4.483832359313965], + [-1.4540677070617676, 1.754076361656189], + [-2.2346954345703125, 2.3590621948242188], + [-2.5968475341796875, -0.46038803458213806], + [3.3792386054992676, -3.602098226547241], + [-4.483720302581787, -2.6049411296844482], + [3.8740038871765137, -7.333184719085693], + [-5.037208080291748, 5.076189041137695], + [1.243288278579712, 0.4742720127105713], + [-1.0970121622085571, -2.645131826400757], + [-4.468160152435303, -6.491949558258057], + [-2.308420181274414, 3.1011812686920166], + [2.972762107849121, 6.122272491455078], + [1.7943211793899536, 5.327760696411133], + [5.938176155090332, 7.966660499572754], + [-2.635279893875122, -4.166762351989746], + [3.527907133102417, 5.971723556518555], + [-2.987253427505493, -3.3156025409698486], + [-7.764022350311279, 9.155563354492188], + [-4.112926959991455, -4.521490573883057], + [2.4747562408447266, -3.436288595199585], + [2.9724740982055664, -4.11130428314209], + [1.5924516916275024, -6.8242950439453125], + [7.934571743011475, -2.17327618598938], + [2.081854820251465, 2.7795519828796387], + [8.757777214050293, -2.3101677894592285], + [6.350252628326416, -3.2737390995025635], + [3.5518276691436768, 5.787252426147461], + [9.52880573272705, -2.404573678970337], + [-0.7845041751861572, -2.567586898803711], + [-0.007662124931812286, 12.247223854064941], + [-1.5171575546264648, 0.9902287721633911], + [-1.9251577854156494, 2.364189624786377], + [5.546275615692139, -2.0470049381256104], + [0.6749398708343506, -5.601297378540039], + [5.598995685577393, -1.1521435976028442], + [-4.70364236831665, -7.100902557373047], + [-4.546327114105225, 3.9481048583984375], + [-2.133096933364868, 2.6330010890960693], + [5.758729457855225, 8.261333465576172], + [11.071985244750977, -2.629046678543091], + [3.6282565593719482, -4.721554756164551], + [1.292128086090088, 2.4270811080932617], + [-3.4439384937286377, -1.990005612373352], + [5.890523433685303, -2.962207078933716], + [-7.6946120262146, -0.48031699657440186], + [-2.1920371055603027, 1.251796841621399], + [-1.5501552820205688, 2.1994423866271973], + [2.9378674030303955, -3.852863311767578], + [-5.9319915771484375, -1.409657597541809], + [-4.131861209869385, -6.349251747131348], + [-4.599311828613281, -3.6345598697662354], + [8.619911193847656, -2.3203463554382324], + [3.1543755531311035, 4.5688934326171875], + [0.1911182999610901, 11.067540168762207], + [5.2703776359558105, -1.4554919004440308], + [-2.2609639167785645, 2.2745566368103027], + [-2.6636998653411865, 4.620133399963379], + [3.537205457687378, -5.257014274597168], + [-1.725608229637146, 1.3327795267105103], + [-2.0736405849456787, 2.0894224643707275], + [0.2969709038734436, 10.288459777832031], + [-7.429958343505859, 0.5367524027824402], + [1.6591073274612427, -8.188246726989746], + [-5.982462406158447, -0.3111783266067505], + [2.2893760204315186, 0.2294277548789978], + [-2.6684651374816895, -3.979255199432373], + [-4.29979133605957, 4.98541259765625], + [7.618076801300049, -2.1323626041412354], + [-3.6663358211517334, -2.4842984676361084], + [-4.299856662750244, -6.262253761291504], + [-5.794681549072266, 6.48626708984375], + [-2.2364470958709717, 2.219923496246338], + [1.8294600248336792, -7.746567726135254], + [-4.94335412979126, -2.005769968032837], + [-2.1062145233154297, 2.258018732070923], + [2.9416732788085938, -8.497005462646484], + [-4.491476058959961, -0.3993908166885376], + [0.17411428689956665, 10.130395889282227], + [2.8337509632110596, -3.9668219089508057], + [3.054893732070923, -4.290879249572754], + [-2.0941879749298096, 2.298107862472534], + [-5.339019775390625, -3.0370423793792725], + [-3.769751787185669, -6.284707069396973], + [-2.1479878425598145, 2.018282651901245], + [3.4485929012298584, -5.231670379638672], + [-4.015706539154053, -6.109642028808594], + [-2.016068458557129, 2.447296142578125], + [2.346231698989868, -3.28592848777771], + [0.029456667602062225, 12.116205215454102], + [-2.1748361587524414, -1.0144952535629272], + [-4.567681789398193, 4.781368732452393], + [-2.4491653442382812, 2.208930253982544], + [1.0143470764160156, -6.215212821960449], + [3.273841142654419, -4.5903472900390625], + [-6.084150791168213, -0.12750244140625], + [2.595458984375, 0.8131784200668335], + [7.92634916305542, -2.1662442684173584], + [-2.2432024478912354, 2.2196848392486572], + [-4.303832530975342, 2.579679250717163], + [-0.046094007790088654, 9.789684295654297], + [6.594272613525391, 7.996631622314453], + [-2.5788915157318115, -4.53252649307251], + [8.118148803710938, -2.407047986984253], + [2.950091600418091, -4.18664026260376], + [-4.4339776039123535, -6.84088134765625], + [-4.276179313659668, -4.656315326690674], + [-6.085464000701904, 5.366579055786133], + [0.10507672280073166, 11.83934497833252], + [2.5669262409210205, -9.241239547729492], + [9.04952621459961, -2.3222405910491943], + [-5.230169296264648, 5.648608684539795], + [-4.772813320159912, 3.1939022541046143], + [1.4365724325180054, -0.9845125675201416], + [2.2671492099761963, 3.4029159545898438], + [-6.110107898712158, 7.372746467590332], + [4.437081813812256, -3.8853654861450195], + [4.0087409019470215, -7.208696365356445], + [3.5560543537139893, -5.218907356262207], + [2.113896131515503, 0.17751464247703552], + [8.8530855178833, -2.5378007888793945], + [-2.7561123371124268, -1.6115986108779907], + [8.962089538574219, -2.3804566860198975], + [-2.4067466259002686, 1.3880447149276733], + [-1.9560389518737793, 1.1685935258865356], + [3.25961971282959, 4.728494167327881], + [-2.5081467628479004, -3.2874672412872314], + [4.717175006866455, -1.513670802116394], + [3.7460379600524902, 0.986737847328186], + [7.614155292510986, -1.9643992185592651], + [-4.383266448974609, -2.881929636001587], + [-2.274658679962158, 2.413358449935913], + [-2.3318445682525635, 2.389779806137085], + [4.922189235687256, -3.479710340499878], + [1.1829794645309448, 0.7595372200012207], + [5.552377700805664, -0.512187123298645], + [-0.07788021117448807, -4.239498138427734], + [-0.008042402565479279, -1.537164330482483], + [-4.568246364593506, -6.83987283706665], + [-6.207204341888428, 2.0295937061309814], + [4.5202956199646, 6.872366428375244], + [-6.783046245574951, 8.07455825805664], + [-2.7660393714904785, 2.538344383239746], + [2.0206944942474365, 0.8821834325790405], + [-3.283590078353882, -2.768170118331909], + [-2.3747665882110596, 2.3768935203552246], + [3.1191751956939697, -4.610259056091309], + [-2.745432138442993, 1.7969887256622314], + [3.3293402194976807, 1.347067952156067], + [-3.5164034366607666, -4.6486101150512695], + [3.3798351287841797, -6.2050628662109375], + [6.687535762786865, -3.442148447036743], + [-2.320575714111328, 3.141932487487793], + [4.98803186416626, -2.5979766845703125], + [7.525810718536377, -1.4937779903411865], + [6.7108025550842285, 8.045251846313477], + [0.020121745765209198, 12.706422805786133], + [4.00164270401001, -3.4411985874176025], + [-3.0052521228790283, -2.6285622119903564], + [7.367529392242432, -2.0924277305603027], + [-2.202497720718384, 2.5153491497039795], + [-0.2837103605270386, -1.774457335472107], + [8.07799243927002, -2.238616704940796], + [0.10529910773038864, 11.698808670043945], + [2.8632044792175293, 3.929363250732422], + [3.3870365619659424, -3.654362440109253], + [-0.016476459801197052, 9.505861282348633], + [-2.970844030380249, -2.0345754623413086], + [-6.1450090408325195, -0.512785792350769], + [2.1746528148651123, -2.6259024143218994], + [-2.923741102218628, -4.062641143798828], + [-1.170518398284912, 0.4681459069252014], + [1.1671606302261353, -2.363570213317871], + [9.017542839050293, -2.399684429168701], + [-3.2535507678985596, 0.8472505807876587], + [-6.1520233154296875, 7.012096405029297], + [-2.673715591430664, 1.7188196182250977], + [0.1275809407234192, 11.630520820617676], + [1.3826231956481934, 1.4770833253860474], + [-4.155632972717285, 5.368093967437744], + [9.251412391662598, -2.27734375], + [3.4195163249969482, -5.171669960021973], + [6.161494731903076, -1.477681279182434], + [8.919417381286621, -2.340118169784546], + [-5.2691874504089355, -3.59405779838562], + [-0.02870083600282669, 12.053852081298828], + [0.2736545205116272, -1.2883445024490356], + [0.13073891401290894, 9.615070343017578], + [2.083662986755371, 5.504817962646484], + [6.460290431976318, 7.8756103515625], + [-2.4847304821014404, 6.955182075500488], + [-4.123152732849121, -5.504783630371094], + [-2.584399938583374, 2.042226552963257], + [-4.920006275177002, 5.352280139923096], + [-4.358813762664795, -5.2445268630981445], + [3.3374898433685303, -3.5627388954162598], + [-5.456564426422119, -6.279792785644531], + [-0.6317819952964783, -1.4030961990356445], + [3.0947823524475098, -4.690199851989746], + [-2.6407480239868164, 1.8161096572875977], + [2.9430525302886963, -4.076322555541992], + [2.448277711868286, 0.3147646188735962], + [-4.701930522918701, -0.9736151695251465], + [5.721982479095459, 8.054351806640625], + [0.06275063008069992, 11.991904258728027], + [-4.556506156921387, -2.965900421142578], + [5.413556098937988, -1.2177969217300415], + [1.9366343021392822, 4.81358528137207], + [-2.6229350566864014, -4.754140377044678], + [-0.0460895374417305, 13.097180366516113], + [9.365946769714355, -2.646214485168457], + [1.4795501232147217, -6.965579032897949], + [8.01667594909668, -2.106795072555542], + [0.4365147352218628, -5.076007843017578], + [4.0279340744018555, -7.681156635284424], + [2.019995927810669, -5.519723415374756], + [1.1191763877868652, -0.20846489071846008], + [-2.936079978942871, 7.098609924316406], + [2.9571001529693604, -4.16323184967041], + [-3.6985690593719482, -6.7094926834106445], + [-2.261970043182373, 2.3440842628479004], + [7.2543158531188965, 8.653674125671387], + [-0.013578899204730988, 10.083375930786133], + [2.5007355213165283, 2.430016040802002], + [9.896875381469727, -2.4203085899353027], + [-4.336988925933838, 5.182476043701172], + [-4.227168560028076, -4.147665500640869], + [-2.2356669902801514, -1.9229074716567993], + [0.9684234261512756, -2.4906506538391113], + [-2.4094040393829346, 0.8776147961616516], + [-2.5333447456359863, 1.8202821016311646], + [0.0024478957056999207, 1.3165658712387085], + [-1.5272358655929565, 1.7131482362747192], + [-0.029575474560260773, 9.267135620117188], + [-6.189573764801025, 8.004941940307617], + [-4.863624095916748, -4.182821273803711], + [2.562870502471924, -7.4013671875], + [-2.3682363033294678, -2.68778395652771], + [3.113687038421631, -4.441786289215088], + [-4.501287937164307, -6.713772773742676], + [2.1953752040863037, -7.6623148918151855], + [2.682905435562134, -7.701586723327637], + [3.1712987422943115, 6.434823036193848], + [-0.11852029711008072, -1.6783761978149414], + [1.4120755195617676, -6.340338706970215], + [3.651442050933838, -4.7670159339904785], + [-6.2335991859436035, 7.0870513916015625], + [-3.3447883129119873, -4.950061798095703], + [-4.277659893035889, 3.8617610931396484], + [-2.337930917739868, 1.0930169820785522], + [4.5801777839660645, 7.463070869445801], + [-4.473028659820557, 5.2986907958984375], + [-2.1338162422180176, 2.54984974861145], + [9.082291603088379, -2.4218361377716064], + [2.094621181488037, 3.8456881046295166], + [-0.22101646661758423, -1.0669206380844116], + [6.2145209312438965, -5.5958051681518555], + [5.053612232208252, -0.9590740203857422], + [-4.432329177856445, 4.488956928253174], + [-0.13417986035346985, -1.8989505767822266], + [1.92936372756958, -8.609346389770508], + [5.777332305908203, -1.0266567468643188], + [-5.114264011383057, 8.479509353637695], + [2.7619762420654297, 5.82006311416626], + [0.04427921026945114, 9.557543754577637], + [0.049104683101177216, 9.769960403442383], + [-1.3138792514801025, -3.8680319786071777], + [-5.113633632659912, -2.559547185897827], + [4.123955249786377, 1.5482158660888672], + [1.52903151512146, 0.39221829175949097], + [-3.2257442474365234, -2.2525033950805664], + [-5.976607799530029, 0.4898369312286377], + [-2.357875347137451, 3.0908143520355225], + [-5.038902759552002, -3.527174711227417], + [5.909442901611328, -2.5414414405822754], + [0.19300717115402222, 11.809772491455078], + [-2.4646852016448975, 0.23391729593276978], + [3.6677653789520264, -0.7791885733604431], + [-2.8034913539886475, -2.201763153076172], + [9.492588996887207, -2.5035884380340576], + [4.756941318511963, 6.563781261444092], + [-4.351358890533447, -7.0678510665893555], + [7.223638534545898, -5.855672836303711], + [3.102339506149292, 0.9358247518539429], + [8.455031394958496, -2.342618703842163], + [-2.310943841934204, 2.3657360076904297], + [0.0955122634768486, 9.397067070007324], + [-1.1285650730133057, 1.5714887380599976], + [4.025982856750488, 1.6051256656646729], + [4.358193874359131, 0.07921740412712097], + [0.647883951663971, -5.752992153167725], + [1.7189152240753174, -1.1191760301589966], + [2.7626142501831055, 5.6115899085998535], + [-7.403669834136963, 8.75495719909668], + [-7.450927257537842, -0.23780810832977295], + [3.73116135597229, 1.4434489011764526], + [-2.314307451248169, 1.275423526763916], + [-1.6432801485061646, 2.1561803817749023], + [2.585231065750122, -8.814099311828613], + [-6.147291660308838, 7.348013401031494], + [0.8969129920005798, 11.624221801757812], + [6.686416149139404, 8.099846839904785], + [-4.1085381507873535, -6.481624603271484], + [0.1434946060180664, 9.875615119934082], + [5.5937042236328125, -1.155768632888794], + [3.141979932785034, -6.66603946685791], + [-5.221612930297852, -4.161591529846191], + [7.73069429397583, -2.1883480548858643], + [2.2766952514648438, -6.992011547088623], + [5.899256229400635, -2.621889114379883], + [-2.0684502124786377, -2.0010740756988525], + [-4.0987372398376465, 5.251466751098633], + [-2.5773608684539795, -2.3131775856018066], + [-5.728513717651367, 5.464667320251465], + [2.7981019020080566, -8.861331939697266], + [-0.04055649787187576, 9.680022239685059], + [0.059462957084178925, 9.099318504333496], + [1.907820224761963, -3.141961097717285], + [-4.499772548675537, 4.068519115447998], + [10.559975624084473, -2.4649970531463623], + [-5.950867176055908, 6.646701812744141], + [1.2028393745422363, 3.5236804485321045], + [-6.719143390655518, 7.682270050048828], + [-5.233522415161133, -2.7404592037200928], + [-5.764537334442139, -1.6149965524673462], + [-5.8981404304504395, 8.124990463256836], + [5.987092971801758, -3.4354100227355957], + [-3.786118268966675, 6.241700172424316], + [-3.5430920124053955, 6.800075054168701], + [-3.084242105484009, -3.491457939147949], + [3.9957664012908936, -3.463515043258667], + [10.316205024719238, -2.4859182834625244], + [6.798757076263428, -3.765570878982544], + [-4.383699893951416, -6.268052101135254], + [2.6007144451141357, -3.5459749698638916], + [0.1244533583521843, 9.581762313842773], + [3.5008888244628906, -4.8815813064575195], + [-0.22560173273086548, -1.2720965147018433], + [-3.0072672367095947, 6.4609599113464355], + [-5.574756145477295, 6.17014217376709], + [2.7502167224884033, 0.6866323351860046], + [-4.7585978507995605, 6.488363742828369], + [-0.5550328493118286, 10.149578094482422], + [0.1668594479560852, 9.850371360778809], + [3.2210886478424072, 6.74728536605835], + [5.453073978424072, 7.55049467086792], + [3.869844675064087, -3.1854021549224854], + [-4.435169696807861, -6.718385696411133], + [2.265146493911743, 1.9933937788009644], + [0.7354282736778259, -0.8529306054115295], + [-4.673360347747803, -7.776185989379883], + [2.909996509552002, -8.394742012023926], + [3.6010701656341553, -5.709179401397705], + [0.6046381592750549, -0.875891387462616], + [-2.790771007537842, 0.8293845653533936], + [2.8678743839263916, 4.670588493347168], + [2.065523862838745, 1.850480556488037], + [10.250901222229004, -2.382673501968384], + [6.193546295166016, 8.063824653625488], + [0.08463596552610397, 10.176767349243164], + [-5.683241367340088, 6.885720252990723], + [-4.397388935089111, -6.599046230316162], + [10.231770515441895, -2.3670599460601807], + [3.9652082920074463, -8.090509414672852], + [0.22233933210372925, 10.673912048339844], + [-2.337461233139038, 0.3479824364185333], + [1.2260769605636597, -6.423297882080078], + [3.153900384902954, -3.227081060409546], + [6.969804763793945, -1.5815623998641968], + [0.1612052321434021, 10.788220405578613], + [3.7924442291259766, 7.352822303771973], + [5.041861534118652, 7.50020170211792], + [5.7979512214660645, -1.9148505926132202], + [-4.562676906585693, -6.636911392211914], + [-3.8903982639312744, 5.68391752243042], + [9.045634269714355, -2.432953119277954], + [-2.5897390842437744, -2.0659236907958984], + [4.0055060386657715, -4.837247371673584], + [8.009659767150879, 9.403582572937012], + [8.09148120880127, -2.700126886367798], + [0.23690438270568848, 10.766782760620117], + [-2.6227450370788574, 2.1526601314544678], + [7.848717212677002, 9.308637619018555], + [2.9470198154449463, -8.85287094116211], + [6.405692100524902, -0.9226434230804443], + [-7.648448467254639, -0.36363983154296875], + [-4.2144575119018555, -3.789379119873047], + [-2.0797955989837646, 3.854595422744751], + [3.5006561279296875, 1.43177330493927], + [-3.296079397201538, -2.1062910556793213], + [-7.383323669433594, -1.2127916812896729], + [-2.7848637104034424, 4.532946586608887], + [6.418160915374756, -2.9274165630340576], + [-1.968579649925232, 1.1367974281311035], + [0.12055664509534836, 11.975848197937012], + [-2.7514150142669678, 4.613039493560791], + [-4.742958068847656, 7.277978897094727], + [5.743119716644287, 7.145130157470703], + [-0.029569335281848907, 12.508399963378906], + [-5.789966106414795, -2.8873848915100098], + [3.8203394412994385, -3.479492425918579], + [3.5400991439819336, -4.45466947555542], + [6.676281452178955, -3.7379310131073], + [8.758488655090332, 10.140158653259277], + [-1.573520541191101, 2.255863904953003], + [-2.1263880729675293, 2.3489418029785156], + [2.6206448078155518, 4.049400329589844], + [-2.110419988632202, 2.6055283546447754], + [2.9473068714141846, 1.2526298761367798], + [-3.098839044570923, -2.6258325576782227], + [-0.3639519512653351, -1.6568351984024048], + [-0.386552095413208, 3.2421672344207764], + [5.357317924499512, 7.19293212890625], + [2.178436040878296, 0.09028542041778564], + [-2.357297420501709, 2.184077262878418], + [-5.751865863800049, 1.6458104848861694], + [-3.713780403137207, -2.352217435836792], + [-4.2777485847473145, -2.734239339828491], + [2.781261682510376, 6.213947296142578], + [3.423431158065796, 1.0202101469039917], + [4.638617992401123, 7.494592189788818], + [-5.406182289123535, -0.8669859766960144], + [-0.7341709136962891, -2.485518455505371], + [6.983824729919434, -5.947994709014893], + [8.872846603393555, -2.396404981613159], + [-4.596043586730957, -6.877806663513184], + [5.8117828369140625, -1.2348880767822266], + [0.17195934057235718, 11.715102195739746], + [-4.3126606941223145, -6.17635440826416], + [-4.917550563812256, -2.560014009475708], + [-1.9394288063049316, -4.077768325805664], + [-4.792130470275879, 4.254031181335449], + [-7.593586444854736, -0.21123063564300537], + [-1.1061670780181885, 2.0379233360290527], + [0.24179309606552124, 10.973947525024414], + [2.2410354614257812, -8.896668434143066], + [-5.646915912628174, 4.630163669586182], + [-4.582612991333008, -3.101104736328125], + [-4.8888163566589355, -6.7694549560546875], + [0.13246235251426697, -1.2743622064590454], + [2.8412954807281494, -4.592778205871582], + [9.660184860229492, -2.540884017944336], + [-2.452489137649536, -1.5376942157745361], + [-5.52338981628418, -1.7675875425338745], + [3.5577714443206787, -6.091290473937988], + [2.7393596172332764, -3.834550380706787], + [5.61383056640625, -1.16230046749115], + [6.096460342407227, -1.4115445613861084], + [-6.818069934844971, -1.4902087450027466], + [-6.351795196533203, -1.1074358224868774], + [-3.448312997817993, 3.1990320682525635], + [-3.791395664215088, 6.354963302612305], + [2.011741876602173, 4.119647026062012], + [8.179332733154297, -2.249971866607666], + [-2.1560544967651367, 2.7109618186950684], + [2.9943084716796875, 5.324081897735596], + [3.0391740798950195, -4.58347749710083], + [0.02368514984846115, 11.962702751159668], + [-1.214705228805542, 0.6167627573013306], + [8.638909339904785, -2.35954213142395], + [7.574873447418213, -2.516896963119507], + [-1.2663273811340332, -1.266286015510559], + [0.046056561172008514, 9.238816261291504], + [-2.121987819671631, 2.3602073192596436], + [-8.360657691955566, 0.0893702507019043], + [2.4281346797943115, -8.454648971557617], + [6.676939487457275, -5.85093879699707], + [1.0835497379302979, -0.23830528557300568], + [5.902649402618408, -3.4931094646453857], + [-4.09572172164917, -2.3122918605804443], + [7.608302593231201, -2.0032598972320557], + [3.617262363433838, 1.0156354904174805], + [-2.5530426502227783, 2.05769419670105], + [1.559420108795166, 0.6105474233627319], + [7.270994186401367, 8.63815689086914], + [3.345475435256958, -9.065485954284668], + [-0.0017936304211616516, 12.859748840332031], + [4.089900493621826, 7.183291912078857], + [0.04303353279829025, 12.42963981628418], + [7.3529839515686035, 8.944282531738281], + [-2.499053478240967, 1.846099853515625], + [-4.240983486175537, -6.19279670715332], + [-4.572647571563721, -7.544351577758789], + [2.032606601715088, 2.2208101749420166], + [-5.020599365234375, -2.9143192768096924], + [9.451909065246582, -2.4157555103302], + [-4.669304370880127, 5.455513000488281], + [2.778507947921753, -9.825485229492188], + [3.5600173473358154, -1.481143593788147], + [1.284028172492981, 4.989765167236328], + [-5.813338756561279, 6.621706008911133], + [7.624302387237549, -2.0887057781219482], + [-5.030689716339111, 5.776859760284424], + [0.15844446420669556, 10.204419136047363], + [3.0396440029144287, -8.645339965820312], + [2.7053983211517334, -6.87528133392334], + [0.23034298419952393, 1.939019799232483], + [-2.649782180786133, -4.2307448387146], + [-3.1578004360198975, -2.9868838787078857], + [9.754732131958008, -2.4454305171966553], + [3.5986368656158447, 1.4594535827636719], + [3.953174352645874, -3.6245224475860596], + [8.864508628845215, -2.4113237857818604], + [-2.4713196754455566, -2.7900052070617676], + [-1.4592987298965454, 1.7380363941192627], + [7.866917610168457, -2.26347279548645], + [0.22628504037857056, 11.367100715637207], + [-7.450053691864014, 8.74209976196289], + [2.297193765640259, 6.175527572631836], + [0.8179503083229065, -1.025335669517517], + [3.210468292236328, -3.8597261905670166], + [-4.772634983062744, 3.870697259902954], + [-4.808899402618408, 3.582991600036621], + [3.87260365486145, -3.483206033706665], + [9.2962007522583, -2.4414725303649902], + [-6.413008213043213, -2.8576717376708984], + [0.12323402613401413, 10.816286087036133], + [-0.45927494764328003, 10.312261581420898], + [4.417795658111572, 6.505619049072266], + [4.498525619506836, -1.5150872468948364], + [4.041378021240234, -3.5317327976226807], + [-3.6210854053497314, 5.396749496459961], + [0.07128792256116867, 5.445381164550781], + [-4.277006149291992, 3.028226613998413], + [-2.8401386737823486, -3.9063758850097656], + [3.6532347202301025, 1.7282644510269165], + [1.7335389852523804, 5.508637428283691], + [-5.13553524017334, 4.5954437255859375], + [2.9131319522857666, 2.0488288402557373], + [-6.052619934082031, -1.1974149942398071], + [5.839531421661377, -1.1208611726760864], + [0.8385477662086487, 5.0889129638671875], + [6.741721153259277, 8.259845733642578], + [3.038499116897583, -4.325353145599365], + [-4.367367744445801, -6.283695697784424], + [3.6779379844665527, 1.4116733074188232], + [2.4405462741851807, 3.162625789642334], + [-2.061899185180664, 2.6088662147521973], + [-0.026242263615131378, 12.45536994934082], + [-3.4936397075653076, -0.7178514003753662], + [1.2459666728973389, 0.5907301306724548], + [-4.348425388336182, -4.7296013832092285], + [8.598468780517578, -2.360889196395874], + [-1.3391262292861938, -2.393233299255371], + [3.2420060634613037, -3.731182336807251], + [0.14324355125427246, 10.00975513458252], + [2.0494258403778076, 5.167880058288574], + [9.079717636108398, -2.5582213401794434], + [0.04787684231996536, -1.4460419416427612], + [-1.781076192855835, 0.5592383742332458], + [-3.7929270267486572, -5.147793769836426], + [-6.569412708282471, -1.3753036260604858], + [4.1329874992370605, 1.4566822052001953], + [8.619006156921387, -2.3317172527313232], + [-2.4933996200561523, 3.590188503265381], + [1.9534919261932373, -7.924209117889404], + [-0.8581196069717407, -0.6084674596786499], + [8.692602157592773, -2.3483102321624756], + [-3.5385220050811768, -1.6708232164382935], + [-3.909876585006714, 3.842435121536255], + [0.23163193464279175, 10.441282272338867], + [-3.0548081398010254, 1.188491702079773], + [9.32712173461914, -2.382211446762085], + [-4.427119731903076, -6.933222770690918], + [3.414191961288452, -3.2300198078155518], + [6.5319695472717285, -1.4854158163070679], + [-1.5991226434707642, 1.9375733137130737], + [1.6609373092651367, -2.090116262435913], + [1.6193726062774658, 2.4711015224456787], + [5.077757358551025, -3.5861237049102783], + [6.031098365783691, -1.7889117002487183], + [-1.9584226608276367, 2.612558603286743], + [-5.26928186416626, 5.19743013381958], + [1.4995503425598145, 1.279489517211914], + [-4.020489692687988, 6.860408782958984], + [-2.226304531097412, 2.2397475242614746], + [4.330433368682861, -4.132082939147949], + [6.153129577636719, -1.4210957288742065], + [3.6098575592041016, -4.04229736328125], + [-0.004559345543384552, 11.584794998168945], + [3.7356009483337402, -6.845092296600342], + [-5.046143054962158, 5.894647121429443], + [4.59518575668335, 7.4275360107421875], + [2.1423277854919434, 2.486333131790161], + [9.289732933044434, -2.401726007461548], + [8.4456205368042, -2.301128387451172], + [0.6464470028877258, -5.720976829528809], + [5.996837139129639, -1.6323044300079346], + [-0.08876211196184158, -1.6084717512130737], + [-4.1107988357543945, -4.219920635223389], + [4.652178764343262, 6.856396675109863], + [6.664366245269775, -1.6437788009643555], + [-2.0589821338653564, 2.4356296062469482], + [-3.5114171504974365, 2.751023530960083], + [-5.096275806427002, 2.8896713256835938], + [-5.338624477386475, 8.004231452941895], + [0.04348532110452652, -1.4864376783370972], + [2.2339208126068115, -6.924322605133057], + [-0.6632251143455505, -0.7642443776130676], + [-4.9855780601501465, -7.723066329956055], + [0.191184401512146, 0.16288302838802338], + [-2.1860506534576416, 2.2982091903686523], + [-2.6593825817108154, 0.19927969574928284], + [-2.1137378215789795, 2.55598783493042], + [0.9799070954322815, 6.999495506286621], + [-4.5280327796936035, 7.197076797485352], + [0.35461392998695374, -0.7242835760116577], + [7.273746490478516, -4.264179229736328], + [-1.5591497421264648, -2.362957239151001], + [0.016054444015026093, 12.117454528808594], + [-2.5616872310638428, 2.2264492511749268], + [-4.060025691986084, -6.4269232749938965], + [0.6482197046279907, 5.592206001281738], + [-4.58624267578125, -7.327876567840576], + [-2.3579494953155518, -4.330226421356201], + [8.867218017578125, -2.4671666622161865], + [1.3542852401733398, -7.453860282897949], + [-2.127080202102661, 2.6409878730773926], + [3.06097149848938, -4.278085708618164], + [-4.656535625457764, -7.221390724182129], + [9.2345609664917, -2.307793617248535], + [-2.896881580352783, -5.136623859405518], + [3.087768316268921, -3.1482341289520264], + [-4.302343845367432, -4.404392242431641], + [-5.965614318847656, 4.04136323928833], + [-6.355641841888428, -0.047468069940805435], + [-2.4652392864227295, 1.943088412284851], + [8.924484252929688, -2.428067207336426], + [3.4397330284118652, -3.604170083999634], + [0.06056051701307297, 11.861515998840332], + [0.6079782247543335, 0.46629810333251953], + [2.555983543395996, 1.0654510259628296], + [2.9215214252471924, -4.370577812194824], + [10.293566703796387, -2.528312921524048], + [-4.3794426918029785, -2.1468870639801025], + [2.1654510498046875, -2.4994194507598877], + [1.691856026649475, 0.4825981855392456], + [-4.212638854980469, 4.030834674835205], + [4.1206159591674805, -8.23121452331543], + [3.8608052730560303, 1.3796916007995605], + [2.8277194499969482, -7.789552688598633], + [0.09748946875333786, 11.836711883544922], + [-4.893411159515381, 5.329686164855957], + [3.257357358932495, -7.301690578460693], + [3.209040403366089, -4.73151969909668], + [-5.116786479949951, -5.816847801208496], + [-3.54870867729187, -5.569914817810059], + [-2.0149290561676025, 2.3288748264312744], + [8.98180866241455, -2.312626361846924], + [2.604461193084717, -3.533371686935425], + [-2.9385650157928467, 1.847827434539795], + [-2.0526487827301025, 2.4297308921813965], + [11.050558090209961, -2.449406385421753], + [-0.13815736770629883, 9.86098575592041], + [-2.959486722946167, -6.217678546905518], + [2.150923013687134, 5.325404167175293], + [9.92874813079834, -2.459240198135376], + [3.2800452709198, -3.6254446506500244], + [-0.7916181683540344, 1.765785574913025], + [-0.018622271716594696, -1.4596861600875854], + [3.0602409839630127, -7.824305057525635], + [8.977279663085938, -2.438829183578491], + [4.451568603515625, -7.186052322387695], + [3.2078182697296143, -5.329272270202637], + [-3.1461496353149414, 5.593340873718262], + [8.255635261535645, -2.2891881465911865], + [-1.1359795331954956, 0.5463511943817139], + [-0.4240046739578247, -1.3318519592285156], + [5.7091288566589355, -1.4119967222213745], + [2.597881555557251, -3.3314273357391357], + [0.016838006675243378, 12.231399536132812], + [7.901841163635254, -2.1486575603485107], + [0.26099061965942383, 10.218358993530273], + [4.094865322113037, -3.457731008529663], + [1.456106424331665, 4.94891357421875], + [-2.550063133239746, 1.9395352602005005], + [2.3648810386657715, 3.5760085582733154], + [-0.1479291021823883, 0.377098023891449], + [1.34220290184021, 0.24423760175704956], + [-2.982046365737915, -1.2992905378341675], + [-2.1507151126861572, 2.3719890117645264], + [1.3998409509658813, -7.466716289520264], + [-3.3989477157592773, -4.4740309715271], + [-3.656862497329712, -3.721545457839966], + [3.087437391281128, -4.3937458992004395], + [2.722156286239624, -3.7883028984069824], + [2.9505045413970947, -4.190267562866211], + [-2.686647653579712, 1.8431508541107178], + [8.22514533996582, -2.4483425617218018], + [6.859920978546143, 8.242801666259766], + [1.0848984718322754, -0.7890757322311401], + [-2.5746400356292725, 1.92575204372406], + [-5.622141361236572, 6.303428649902344], + [-3.5498597621917725, -5.691219329833984], + [-1.1544296741485596, 1.7818557024002075], + [6.056397438049316, 7.979599952697754], + [-2.5297951698303223, 1.761775016784668], + [0.23525959253311157, 11.03805160522461], + [-2.6967856884002686, -3.5430853366851807], + [-5.27621603012085, 4.2364325523376465], + [2.224353551864624, 5.57878303527832], + [3.2060515880584717, -3.8079984188079834], + [-3.9172332286834717, 5.226330757141113], + [6.431075572967529, 8.015804290771484], + [6.599644184112549, 8.433126449584961], + [-2.5352163314819336, 1.5264610052108765], + [2.033107042312622, 3.5471513271331787], + [-3.701408624649048, -3.824392080307007], + [9.095900535583496, -2.33541202545166], + [-2.373581886291504, 2.376528739929199], + [3.255401849746704, -2.0760598182678223], + [-2.0838143825531006, 1.5551029443740845], + [3.438798189163208, -5.735074996948242], + [0.1416136622428894, 9.881463050842285], + [2.3257336616516113, 3.613583564758301], + [6.775043964385986, -3.6913743019104004], + [-0.9560081958770752, -3.0622241497039795], + [9.095852851867676, -2.425302028656006], + [4.269280910491943, -8.936223983764648], + [0.11927592009305954, 8.797896385192871], + [0.32622092962265015, -0.8818162083625793], + [-3.0592739582061768, -1.2916089296340942], + [1.4489120244979858, 0.29979169368743896], + [3.641223192214966, 1.3911287784576416], + [-0.20557886362075806, -1.7985527515411377], + [-3.9835288524627686, 4.112929821014404], + [9.816079139709473, -2.3614704608917236], + [3.0287740230560303, -4.2700982093811035], + [-2.949172258377075, 3.0810916423797607], + [-4.8087029457092285, 8.363773345947266], + [-5.820863246917725, 5.000790596008301], + [9.874561309814453, -2.4921557903289795], + [-2.152783155441284, -2.424311399459839], + [5.555217266082764, 7.536707878112793], + [-2.390657901763916, 2.0346219539642334], + [-2.5752227306365967, -1.6666418313980103], + [0.3011021018028259, 11.922924041748047], + [5.73549222946167, -0.11261734366416931], + [-3.5228729248046875, -2.5501949787139893], + [-3.18223237991333, -4.198679447174072], + [0.06760226935148239, 12.032075881958008], + [9.912359237670898, -2.3593361377716064], + [1.0060145854949951, -7.241866111755371], + [-1.0777130126953125, -2.4548423290252686], + [-4.1235032081604, -2.3657960891723633], + [0.2232314944267273, 11.550324440002441], + [-4.430330753326416, -6.8630876541137695], + [4.859437465667725, 7.22559928894043], + [1.7015324831008911, 3.3769798278808594], + [2.2808353900909424, 2.4691903591156006], + [-4.4234395027160645, 4.9205827713012695], + [5.524011611938477, 7.717652320861816], + [3.862841844558716, -3.577415704727173], + [3.9176695346832275, -3.7571823596954346], + [8.786566734313965, -2.534116268157959], + [2.78360915184021, 6.624930381774902], + [2.2939131259918213, 3.108271837234497], + [-0.09351427108049393, 9.526544570922852], + [3.447504997253418, -7.616899490356445], + [-2.0022318363189697, 2.0835084915161133], + [-3.109758138656616, -3.944615364074707], + [3.1393182277679443, -4.43009090423584], + [0.45451414585113525, -0.7419466972351074], + [1.2793471813201904, 6.579098701477051], + [-4.273504257202148, -3.3400213718414307], + [2.9736149311065674, -4.222368240356445], + [0.17680054903030396, 10.190178871154785], + [-3.47225022315979, 6.457038879394531], + [-1.559507966041565, -0.03082377091050148], + [-2.647085428237915, -3.7896311283111572], + [4.230170726776123, -7.8271026611328125], + [1.147216558456421, 3.0215985774993896], + [6.468041896820068, -4.689091682434082], + [8.169014930725098, -2.6435821056365967], + [-4.007894515991211, -5.794964790344238], + [3.840202569961548, 1.2338374853134155], + [2.4511778354644775, -2.616474151611328], + [-1.8795604705810547, 1.5757871866226196], + [2.8858609199523926, -1.7063645124435425], + [8.924107551574707, -2.3593809604644775], + [4.585940837860107, -7.8994927406311035], + [-6.059960842132568, 7.1353349685668945], + [-4.140953540802002, 0.6666232347488403], + [3.3436906337738037, -3.6288464069366455], + [3.4559526443481445, 1.0095230340957642], + [7.5729570388793945, -1.8058308362960815], + [3.3785173892974854, -6.691178321838379], + [-3.0254552364349365, 2.5796775817871094], + [7.658226490020752, -1.994463562965393], + [4.220109462738037, -3.9424712657928467], + [-2.164672613143921, 2.6795763969421387], + [-0.02498907595872879, 9.250001907348633], + [2.5287322998046875, 4.431931495666504], + [0.5648272633552551, 0.05842345580458641], + [7.305421352386475, -1.7471140623092651], + [6.438661098480225, -2.4257729053497314], + [-1.582550048828125, -3.4549901485443115], + [12.37678050994873, -2.6181490421295166], + [-2.405388116836548, 0.7061030268669128], + [6.995172023773193, 8.543230056762695], + [-2.461658239364624, 1.6428142786026], + [-1.5670137405395508, 0.8928982615470886], + [0.15985190868377686, 11.339523315429688], + [0.055629901587963104, 11.860860824584961], + [4.444351673126221, 1.9962512254714966], + [-4.618740558624268, 5.8573713302612305], + [3.825141191482544, 1.692041039466858], + [3.44063401222229, -8.332509994506836], + [8.005876541137695, 9.538202285766602], + [3.0823004245758057, -4.313652992248535], + [5.249998569488525, -1.5318857431411743], + [-4.395293712615967, 2.371220588684082], + [0.14663466811180115, 0.33964985609054565], + [0.08923808485269547, -1.4318503141403198], + [6.469380855560303, -2.6186251640319824], + [2.114692449569702, -4.072193145751953], + [-0.0870923176407814, -0.6410953998565674], + [4.170433044433594, -2.690457582473755], + [0.6397048830986023, -5.6584062576293945], + [1.7086331844329834, -6.679145812988281], + [-3.430154323577881, -5.771530628204346], + [3.205138921737671, -4.0928497314453125], + [1.2689192295074463, 5.187198638916016], + [3.309377908706665, -4.136556148529053], + [3.7349653244018555, 1.6197015047073364], + [-2.0341296195983887, 2.4243295192718506], + [-2.21791934967041, 0.9816640615463257], + [-3.0787384510040283, -1.1781474351882935], + [0.10553877800703049, 9.6939697265625], + [3.0260183811187744, -4.304288864135742], + [0.1030678078532219, 10.264719009399414], + [2.3995392322540283, 5.710239410400391], + [-4.204948902130127, -4.793400764465332], + [8.53884220123291, -2.3690006732940674], + [-2.2946126461029053, 2.5120012760162354], + [4.9677839279174805, -3.518782138824463], + [8.859332084655762, -2.3460400104522705], + [1.6637738943099976, 5.681737422943115], + [-3.555375814437866, -3.955486536026001], + [2.9313042163848877, -4.137041091918945], + [0.38392239809036255, 11.347280502319336], + [8.576261520385742, -2.3181755542755127], + [-4.953490257263184, 5.722629070281982], + [2.9900248050689697, -9.895315170288086], + [-5.744439601898193, 5.243568420410156], + [0.14049464464187622, 9.715776443481445], + [-3.391124963760376, 5.435792446136475], + [-5.469407558441162, -2.3482673168182373], + [2.466024398803711, 5.009992599487305], + [3.329246759414673, 1.0435287952423096], + [4.22973108291626, 1.7326089143753052], + [6.199185848236084, -3.489993095397949], + [2.4818084239959717, -8.808958053588867], + [4.575737476348877, -2.898235559463501], + [-2.124981164932251, 2.7086915969848633], + [3.6929752826690674, -9.035001754760742], + [-2.585155963897705, 2.3048081398010254], + [-4.530391693115234, 5.470191955566406], + [-5.8724565505981445, -2.2227020263671875], + [2.388617515563965, 5.602439880371094], + [-2.134056568145752, 2.4735093116760254], + [-2.592583417892456, 1.8071036338806152], + [-5.165674686431885, 5.260741233825684], + [-3.840918779373169, -5.648346424102783], + [-5.120769023895264, 7.398049354553223], + [-7.175011157989502, -0.9864511489868164], + [-2.120393991470337, -3.7194607257843018], + [-3.5080838203430176, -5.3578267097473145], + [-4.950526714324951, 5.683332443237305], + [-0.9475374221801758, 1.5526366233825684], + [2.23734450340271, -6.843657493591309], + [2.5257084369659424, -7.79763126373291], + [-2.4393813610076904, 2.226604700088501], + [-1.5719057321548462, -2.014503240585327], + [0.23304718732833862, 10.717561721801758], + [5.525735378265381, 7.782276153564453], + [-4.050299167633057, -6.234643459320068], + [3.393436908721924, -7.465421676635742], + [-1.9110642671585083, 2.3832833766937256], + [-2.1466128826141357, 2.2630069255828857], + [-0.8128503561019897, 0.5424029231071472], + [-0.49632492661476135, 4.199556827545166], + [-0.045934684574604034, 13.25993824005127], + [2.9320380687713623, -4.084669589996338], + [-4.290708065032959, -6.826539039611816], + [10.058680534362793, -2.3148913383483887], + [1.6818180084228516, -4.782205581665039], + [-4.157833099365234, -6.221257209777832], + [4.808877468109131, 6.348020076751709], + [-0.7435374855995178, -2.9227561950683594], + [3.387603998184204, 0.9112440347671509], + [-2.262167453765869, 2.322988986968994], + [-2.765244722366333, -2.2471072673797607], + [-2.5140275955200195, -3.2021172046661377], + [2.967542886734009, -3.156346559524536], + [0.01321064680814743, 13.509580612182617], + [6.101358413696289, -6.0033674240112305], + [5.790375232696533, 7.444169998168945], + [3.687753677368164, -3.63323712348938], + [-2.074738025665283, 2.5012569427490234], + [5.728304386138916, -2.675135850906372], + [3.1536214351654053, -4.549286365509033], + [-4.1718220710754395, -6.6856184005737305], + [-2.1570847034454346, 3.1053555011749268], + [-2.317431688308716, -4.486455917358398], + [-6.2750678062438965, 8.020074844360352], + [8.400236129760742, -2.435532808303833], + [-0.9314720034599304, 1.9105224609375], + [-6.363005638122559, 2.735517978668213], + [-3.8530046939849854, -3.0101969242095947], + [4.093851089477539, -3.791501522064209], + [4.4025397300720215, -3.9715006351470947], + [-4.181748390197754, 3.7015137672424316], + [8.407797813415527, -2.2882773876190186], + [-3.7310855388641357, 6.08896541595459], + [-2.1771111488342285, 2.373309850692749], + [1.8493082523345947, 1.8157018423080444], + [2.530104875564575, -8.239931106567383], + [2.293469190597534, -3.732855796813965], + [3.189692258834839, -7.8506059646606445], + [-1.9426072835922241, 2.331529378890991], + [2.450042247772217, -6.572705268859863], + [-4.605855464935303, -0.7733783721923828], + [2.4412479400634766, 2.4472410678863525], + [-4.700562953948975, -5.599118709564209], + [4.069376468658447, 1.759145736694336], + [-3.1360061168670654, -1.1047471761703491], + [-3.4045684337615967, -3.6798532009124756], + [1.7409462928771973, -7.126767158508301], + [-3.412224054336548, 7.275727272033691], + [5.201020240783691, -3.958378314971924], + [2.350898027420044, 2.482041597366333], + [-5.926095962524414, 6.61200475692749], + [0.964225709438324, -6.821070194244385], + [2.3506782054901123, 6.313786506652832], + [-5.394104480743408, 5.860202789306641], + [-2.2179675102233887, -0.9875173568725586], + [3.135575771331787, 5.570060729980469], + [1.786914348602295, -7.947883605957031], + [4.153440475463867, -3.5512194633483887], + [3.863436698913574, -4.9163103103637695], + [0.9133895635604858, -6.100360870361328], + [4.994410991668701, 7.381490230560303], + [0.40308111906051636, 11.992134094238281], + [-0.04269415885210037, 9.242633819580078], + [2.143399477005005, 5.486699104309082], + [-0.04982305318117142, 12.897924423217773], + [-4.303244590759277, 6.0253682136535645], + [0.2387111783027649, -1.2612900733947754], + [-0.0685272291302681, 9.509777069091797], + [3.43864369392395, -2.1007041931152344], + [3.063208818435669, 1.1800626516342163], + [-2.7446186542510986, 4.057875156402588], + [-3.5521316528320312, 4.981651782989502], + [-2.540210485458374, -2.1354310512542725], + [-2.98551344871521, 1.1184147596359253], + [3.038400411605835, -4.273870468139648], + [2.379316568374634, -3.573885440826416], + [-1.5305726528167725, -4.350491523742676], + [0.21194911003112793, 10.496797561645508], + [3.053274393081665, -4.2515974044799805], + [4.05269718170166, 1.7713158130645752], + [-0.5808216333389282, -0.6296370029449463], + [-5.824382781982422, -1.2384004592895508], + [9.460794448852539, -2.4484951496124268], + [4.135646343231201, 6.885241508483887], + [2.3877832889556885, 5.275540351867676], + [-3.5058045387268066, -3.3880913257598877], + [2.5899415016174316, -8.544816970825195], + [-1.888060212135315, 2.158594846725464], + [-4.908143043518066, 0.6062108874320984], + [-7.501408100128174, -0.32169198989868164], + [4.3453826904296875, 0.9973253011703491], + [-1.992957353591919, 2.338456869125366], + [-6.036403179168701, 6.876378059387207], + [-4.431056499481201, -6.121006965637207], + [5.775930881500244, 7.996631622314453], + [3.03031849861145, -5.760948181152344], + [1.7233003377914429, 2.317277669906616], + [-0.7305485606193542, 10.324252128601074], + [5.317700386047363, -3.176849126815796], + [-0.2932018041610718, 10.126181602478027], + [2.572211980819702, -7.393832206726074], + [9.730777740478516, -2.4245097637176514], + [-4.723090171813965, -3.1677188873291016], + [0.04498087614774704, 9.680532455444336], + [3.470113515853882, -7.81975793838501], + [-3.7045629024505615, -5.024794578552246], + [-5.212127208709717, 6.033782005310059], + [1.8171730041503906, 1.180752158164978], + [-1.8406585454940796, 0.17662596702575684], + [-7.1266889572143555, -0.5434731245040894], + [4.37645149230957, 6.790048599243164], + [-2.0558948516845703, 2.4130728244781494], + [2.573110818862915, 4.8109130859375], + [3.7892158031463623, -8.526257514953613], + [3.013782024383545, -7.91441535949707], + [-0.9934760332107544, -3.585254430770874], + [-2.1964986324310303, 2.79376220703125], + [-4.6551384925842285, 6.5255126953125], + [-2.5776848793029785, 1.829573631286621], + [-1.9495213031768799, 2.3896501064300537], + [1.6158089637756348, -6.858364105224609], + [6.762691497802734, 8.138175964355469], + [0.17574435472488403, 11.684699058532715], + [-0.6476349234580994, -0.45936140418052673], + [9.844813346862793, -2.4501988887786865], + [6.537290096282959, -3.725006103515625], + [6.56141471862793, -3.463096857070923], + [2.06697154045105, -8.986761093139648], + [-5.214376926422119, -3.30613112449646], + [3.2134783267974854, -4.715553283691406], + [-4.350072383880615, 7.248220443725586], + [3.3617360591888428, -6.398386478424072], + [4.360213756561279, -4.9607038497924805], + [-6.708250522613525, 7.953145980834961], + [0.010219208896160126, 12.035880088806152], + [1.8988776206970215, -7.483153343200684], + [2.1832692623138428, 2.0924723148345947], + [2.8594748973846436, 1.1970595121383667], + [-6.058384895324707, 7.159003734588623], + [0.06465565413236618, 10.996747970581055], + [0.1700229048728943, 11.358060836791992], + [-1.9633479118347168, -0.7720472812652588], + [-4.5096354484558105, 4.814526557922363], + [-5.1314239501953125, -1.1994158029556274], + [-4.899275302886963, 6.126646995544434], + [-0.015130765736103058, 11.990996360778809], + [-6.517432689666748, 7.518969535827637], + [-1.9328535795211792, 2.3957760334014893], + [4.449370384216309, -2.662992238998413], + [3.1953976154327393, -8.330984115600586], + [0.21468910574913025, -3.459444999694824], + [11.01356315612793, -2.435878038406372], + [2.8990113735198975, -7.644078731536865], + [2.479055643081665, -6.190953254699707], + [1.815591812133789, -6.132311820983887], + [2.8242735862731934, -3.829059600830078], + [3.5304713249206543, -4.369264602661133], + [-3.1040122509002686, -3.8200936317443848], + [-4.7371697425842285, -6.582919597625732], + [3.2083497047424316, -7.612367630004883], + [-6.089523792266846, 6.005457878112793], + [3.6483404636383057, -7.382824897766113], + [3.413069248199463, -3.710259199142456], + [2.1916685104370117, 5.364779472351074], + [3.762803316116333, 0.9544641971588135], + [-4.7132954597473145, -7.214821815490723], + [9.235810279846191, -2.454299211502075], + [3.520176649093628, 1.379992127418518], + [7.874181747436523, -1.7151405811309814], + [0.16142284870147705, 11.766754150390625], + [0.3909626603126526, 10.890328407287598], + [-3.2852303981781006, -4.0754523277282715], + [-3.8914639949798584, 5.198315143585205], + [-1.5283883810043335, 1.8572114706039429], + [-4.775760173797607, -6.640570640563965], + [3.6499857902526855, -4.880545139312744], + [2.597184896469116, 6.053771018981934], + [-1.3182040452957153, -0.6246606707572937], + [0.1964769959449768, 10.49845027923584], + [-4.463596343994141, -7.149413108825684], + [-1.1171438694000244, -3.216029167175293], + [-4.988081455230713, -3.2366552352905273], + [-4.5170087814331055, 7.80911922454834], + [5.913151264190674, -1.226925253868103], + [3.112860918045044, -5.899118900299072], + [9.309721946716309, -2.3399035930633545], + [8.14061164855957, -2.1641881465911865], + [4.155667304992676, -3.678997755050659], + [8.029589653015137, -2.345670700073242], + [2.915907621383667, -4.071159362792969], + [6.196156978607178, 7.654491424560547], + [2.9055726528167725, -4.655181407928467], + [-4.7086920738220215, -6.355904579162598], + [3.0615532398223877, -3.61727237701416], + [8.676594734191895, -2.4068400859832764], + [-5.005963325500488, 6.890408039093018], + [4.195683002471924, 6.958425045013428], + [-0.25856196880340576, -0.5944324731826782], + [2.0571911334991455, 6.7410383224487305], + [-5.62475061416626, -0.20741504430770874], + [-1.7710981369018555, 1.8006386756896973], + [-5.180506229400635, 4.733240604400635], + [2.258852243423462, -7.552116870880127], + [1.2266954183578491, -6.66059684753418], + [0.4046326279640198, 10.210103988647461], + [-2.2373297214508057, 1.9713941812515259], + [-3.0987226963043213, -4.879323959350586], + [-0.004381604492664337, 10.559012413024902], + [-3.9899349212646484, -5.630283355712891], + [-0.03284139186143875, 10.145275115966797], + [-4.311407566070557, -2.940990924835205], + [-0.10233695060014725, 14.196426391601562], + [4.9322686195373535, 6.673872470855713], + [4.265649318695068, -4.193246841430664], + [-2.262117385864258, 2.4661669731140137], + [-3.3536174297332764, -2.089721918106079], + [4.649114608764648, 7.279881477355957], + [10.682235717773438, -2.509824752807617], + [0.17572200298309326, 8.982649803161621], + [-1.4892665147781372, -0.6961383819580078], + [-0.6156467199325562, -3.4205315113067627], + [0.019913606345653534, 9.529297828674316], + [-1.2703945636749268, 1.4527009725570679], + [-1.5507266521453857, -4.0298848152160645], + [2.2488200664520264, 4.287449836730957], + [-0.02607841044664383, 13.19804859161377], + [6.3257527351379395, -1.2962727546691895], + [0.11115073412656784, -4.371970176696777], + [3.6572329998016357, -7.719427108764648], + [3.385680913925171, -2.495309591293335], + [9.578570365905762, -2.4463021755218506], + [8.605631828308105, -2.263392686843872], + [2.265841245651245, -4.778475761413574], + [4.7016472816467285, -3.5430500507354736], + [1.374678134918213, 4.968118667602539], + [-3.942847490310669, -6.719545364379883], + [-4.176252841949463, -6.355500221252441], + [-0.4043313264846802, -2.4585108757019043], + [2.526388645172119, -8.893291473388672], + [-4.3025007247924805, -2.1698713302612305], + [-4.515300273895264, -1.1610151529312134], + [2.368616819381714, -7.560057640075684], + [-1.546101689338684, -2.6348066329956055], + [-4.105280876159668, 4.150492191314697], + [-2.1944291591644287, 2.8195908069610596], + [-3.295576810836792, -5.437828540802002], + [-4.899754524230957, 1.83101224899292], + [-0.07706183940172195, 13.449575424194336], + [1.6667506694793701, 4.773644924163818], + [3.187723159790039, -3.8898158073425293], + [3.079976797103882, -4.415678024291992], + [-0.04269725829362869, 12.805978775024414], + [2.8299529552459717, 3.2492902278900146], + [5.917844772338867, -1.9777532815933228], + [-5.1936516761779785, -5.979040145874023], + [-3.8308870792388916, 3.761096715927124], + [-4.831388473510742, -8.124539375305176], + [9.333921432495117, -2.4308457374572754], + [3.706228256225586, 5.507399559020996], + [-2.173546552658081, 2.698526620864868], + [0.03731303662061691, 11.82443904876709], + [2.9538886547088623, -8.102340698242188], + [2.3610284328460693, 5.565244674682617], + [7.878843307495117, -2.236109495162964], + [1.8352065086364746, 1.258813500404358], + [-1.9664950370788574, 1.8118396997451782], + [-1.4609415531158447, 1.8115835189819336], + [-1.833609700202942, -0.42171812057495117], + [6.817596912384033, -3.3043203353881836], + [9.95718002319336, -2.3637630939483643], + [-0.025780506432056427, 9.407886505126953], + [9.342665672302246, -2.6495139598846436], + [-2.0991015434265137, 2.592872142791748], + [3.2321810722351074, -8.3305082321167], + [0.16437870264053345, 10.252479553222656], + [-7.222489833831787, -0.8602325320243835], + [-4.057687759399414, -4.839534759521484], + [-6.149710655212402, 7.092745780944824], + [4.295068740844727, 6.081999778747559], + [-4.518913745880127, -1.833158016204834], + [3.5278878211975098, -5.643657684326172], + [4.300804615020752, -2.6786351203918457], + [2.4520485401153564, -7.5215559005737305], + [-6.1399359703063965, 7.127448081970215], + [2.843444585800171, -3.9398226737976074], + [-4.380247592926025, -0.3941580057144165], + [4.277032375335693, 6.649320602416992], + [-0.8850401043891907, 1.501976728439331], + [-3.671193838119507, -0.9733404517173767], + [2.8373823165893555, -9.711526870727539], + [-4.05534553527832, 5.36797571182251], + [-3.800642728805542, -6.103899955749512], + [2.9884703159332275, 0.6680384874343872], + [0.9941932559013367, 7.623989105224609], + [4.42011022567749, -3.4937007427215576], + [-6.862874507904053, 6.987150192260742], + [9.518538475036621, -2.3427371978759766], + [7.222907066345215, -2.45192551612854], + [8.118081092834473, -2.5581445693969727], + [2.0495262145996094, 2.9317984580993652], + [2.959367036819458, -6.577439785003662], + [-6.078332901000977, 3.2562153339385986], + [-1.0274317264556885, -0.057980362325906754], + [4.116372108459473, -3.832080602645874], + [5.756348609924316, -1.2368190288543701], + [0.20425021648406982, 11.304414749145508], + [2.7283384799957275, -7.617982864379883], + [4.608468055725098, -8.23771858215332], + [-6.15579080581665, 1.400755763053894], + [-1.859690546989441, 1.464694857597351], + [-5.5584564208984375, 8.299095153808594], + [0.20290106534957886, 10.471542358398438], + [0.12086176127195358, 12.775798797607422], + [8.239224433898926, -2.3290045261383057], + [-2.5464375019073486, 1.5823276042938232], + [-2.2616045475006104, 2.2079474925994873], + [-3.285087823867798, 5.874014854431152], + [2.9114906787872314, 4.393213272094727], + [3.482253313064575, -4.001279830932617], + [6.1021223068237305, 7.5897979736328125], + [1.2874003648757935, -7.033227920532227], + [2.004743814468384, 0.21036368608474731], + [3.995166063308716, -3.2845356464385986], + [-4.459832668304443, -7.290026664733887], + [5.38360071182251, -3.632493734359741], + [-3.77826189994812, -3.8985254764556885], + [-2.532809019088745, -1.3848650455474854], + [-4.698750972747803, -7.1975226402282715], + [-1.7733595371246338, 2.4899704456329346], + [8.149880409240723, -2.2423717975616455], + [2.904928684234619, -4.050236701965332], + [-3.0955965518951416, 2.6014249324798584], + [-5.333244323730469, 5.122539043426514], + [-4.494508743286133, -3.635568380355835], + [0.002894394099712372, 6.630923748016357], + [-5.45435094833374, 8.050806999206543], + [3.777923345565796, -3.293419361114502], + [-3.326143264770508, 5.814482688903809], + [2.6355559825897217, 4.3536376953125], + [-3.4819555282592773, -6.378082752227783], + [-7.738470554351807, -0.13285350799560547], + [1.4367164373397827, -6.462112903594971], + [4.610286235809326, -3.529151678085327], + [7.5752129554748535, -2.6831886768341064], + [-3.2188122272491455, -1.393150806427002], + [-2.3117177486419678, 0.9089871644973755], + [6.358788013458252, 8.163981437683105], + [1.3496246337890625, 1.508804202079773], + [2.609938859939575, -8.538240432739258], + [-7.1043477058410645, 9.078313827514648], + [8.51088809967041, -2.284437894821167], + [8.31225872039795, -2.2247557640075684], + [2.0978684425354004, -7.850129127502441], + [-4.801222801208496, -6.475442886352539], + [0.4666043519973755, -0.7546184659004211], + [-6.91139554977417, -0.024001840502023697], + [2.1750216484069824, 2.7370660305023193], + [-0.053757138550281525, 12.964581489562988], + [0.09379344433546066, 9.563824653625488], + [2.711909055709839, -8.328036308288574], + [3.385615825653076, 1.4606255292892456], + [3.7764580249786377, -5.495871543884277], + [0.015558980405330658, -1.4659048318862915], + [0.330036461353302, 10.623990058898926], + [4.889288902282715, -1.3806381225585938], + [-2.003821611404419, 1.231471061706543], + [-4.448360919952393, -7.19081974029541], + [4.165646076202393, 1.7088361978530884], + [-5.540379047393799, -2.5393126010894775], + [-3.252781391143799, 6.491279125213623], + [0.2285420298576355, 11.174972534179688], + [-0.22127526998519897, -0.7736278772354126], + [9.254647254943848, -2.1927528381347656], + [2.5950491428375244, 0.6599377393722534], + [6.099778175354004, -1.4050345420837402], + [6.176476001739502, -2.5206708908081055], + [-6.6088714599609375, 6.381172180175781], + [3.391165018081665, -5.153789520263672], + [8.447924613952637, -2.2974650859832764], + [5.856752872467041, -3.3678805828094482], + [4.780123233795166, -4.550971984863281], + [-5.826645374298096, 6.8260297775268555], + [6.618494510650635, -1.8058446645736694], + [2.6109180450439453, -5.944328308105469], + [0.0007820948958396912, -2.8911635875701904], + [0.6440797448158264, -0.951025664806366], + [0.43942582607269287, -4.429023742675781], + [6.930184841156006, 8.308350563049316], + [2.864039182662964, -4.061017990112305], + [-2.1155142784118652, 2.6952314376831055], + [-6.037987232208252, -2.250725269317627], + [-4.712966442108154, -1.229820728302002], + [3.086408853530884, -4.30595588684082], + [8.777573585510254, -2.2414181232452393], + [3.3468520641326904, -9.641075134277344], + [-0.31271088123321533, -1.9561833143234253], + [-0.9528462290763855, -2.7869503498077393], + [1.443920373916626, 6.031375885009766], + [5.327075958251953, 6.571443557739258], + [-0.034323759377002716, 9.621807098388672], + [-5.255666255950928, -2.375109910964966], + [7.443650722503662, -2.0837066173553467], + [-4.975188255310059, -6.828916549682617], + [6.423342227935791, -3.7391180992126465], + [-5.032151222229004, -4.847311019897461], + [-6.194247722625732, 7.1764373779296875], + [-6.963337421417236, 8.186004638671875], + [4.780591011047363, -3.5005838871002197], + [0.4137999415397644, 10.286149024963379], + [-4.114308834075928, -4.721328258514404], + [-2.5551602840423584, -1.309998631477356], + [0.26441627740859985, 10.791910171508789], + [-2.484508991241455, 1.8810124397277832], + [8.865490913391113, -2.3485281467437744], + [7.453423023223877, -2.4247167110443115], + [1.3457037210464478, 3.6019725799560547], + [3.8201138973236084, 0.7018349766731262], + [-7.249178409576416, 8.665404319763184], + [-1.907044529914856, 1.373896598815918], + [2.730923891067505, -2.3039486408233643], + [-3.8643414974212646, -1.394100308418274], + [-4.953780174255371, 5.70659875869751], + [-2.1598737239837646, 2.458862781524658], + [-3.475039482116699, 5.2379865646362305], + [-3.2987401485443115, -3.705256938934326], + [5.884358882904053, -3.1823298931121826], + [1.3442096710205078, 0.7967589497566223], + [4.234889507293701, -3.2643468379974365], + [-5.237534999847412, -3.38493275642395], + [3.8388612270355225, -5.486576080322266], + [2.938359498977661, -4.156555652618408], + [3.094357967376709, -4.855831146240234], + [-2.8042640686035156, -2.566284656524658], + [-5.856779098510742, -1.4434094429016113], + [-3.192227840423584, -3.456749200820923], + [-2.4098641872406006, 2.0486936569213867], + [-1.1449940204620361, -0.35522711277008057], + [3.7566943168640137, -5.593209266662598], + [-3.3579294681549072, 6.003080368041992], + [-0.016293592751026154, 13.313214302062988], + [-1.87308669090271, -4.035606861114502], + [6.567850589752197, -2.5838382244110107], + [-2.188283920288086, -0.24690163135528564], + [3.9929792881011963, -7.652844429016113], + [8.13395881652832, 9.604220390319824], + [3.530128240585327, -5.573822975158691], + [-2.010326623916626, -0.04501986876130104], + [9.3773193359375, -2.3748080730438232], + [2.0200355052948, -8.25355339050293], + [6.231116771697998, -1.3152283430099487], + [4.672610759735107, -4.3888115882873535], + [8.71452808380127, -2.2968242168426514], + [3.603623628616333, 6.005027770996094], + [-3.241553544998169, 0.8270606398582458], + [7.003149032592773, -2.108900308609009], + [3.703796148300171, 1.5269724130630493], + [-2.963589906692505, 4.491089820861816], + [-4.491445064544678, 7.131468296051025], + [0.9655928015708923, -3.8514955043792725], + [-4.7665581703186035, -3.4844071865081787], + [-3.5592215061187744, -4.016416549682617], + [-4.202441692352295, -3.739189624786377], + [2.2549073696136475, 3.55472731590271], + [-1.6995725631713867, -3.5926105976104736], + [-0.048090167343616486, 12.955831527709961], + [1.2142380475997925, 7.364706039428711], + [4.180960655212402, -3.4050018787384033], + [3.890756368637085, 1.91606867313385], + [3.577561140060425, 1.8779813051223755], + [-0.0026224926114082336, 9.250052452087402], + [-5.496227264404297, -2.589869737625122], + [-1.861034870147705, 2.3112447261810303], + [4.454845905303955, -3.1606085300445557], + [8.27980899810791, -2.281292676925659], + [3.3491370677948, 1.4877530336380005], + [-3.284795045852661, -0.866430938243866], + [-0.00868571549654007, 12.212998390197754], + [-2.3811352252960205, 2.1728971004486084], + [-6.937437534332275, 2.224564552307129], + [2.7823519706726074, -6.194100379943848], + [-4.60412073135376, -0.11844080686569214], + [1.8017834424972534, -6.1102094650268555], + [0.1486946940422058, 9.816394805908203], + [2.878434419631958, 0.01473173126578331], + [-4.224732875823975, -5.942872524261475], + [-4.699324131011963, -3.0388686656951904], + [-4.487326145172119, 0.9469590187072754], + [-3.172351360321045, 3.540376901626587], + [1.7324284315109253, -2.1647825241088867], + [2.7808854579925537, -3.596893072128296], + [3.143658399581909, -8.30030345916748], + [2.764192581176758, -9.989069938659668], + [-2.357261896133423, 3.955383062362671], + [-0.015511102974414825, 13.53152084350586], + [-5.332830905914307, -3.6494977474212646], + [-1.2077994346618652, 0.6789236664772034], + [-1.7943938970565796, -0.291373610496521], + [-3.2751054763793945, 5.690243721008301], + [0.25093963742256165, -0.39587685465812683], + [3.927629232406616, -3.6844213008880615], + [-2.880305051803589, 5.3286824226379395], + [2.969710111618042, -4.219541072845459], + [8.481701850891113, -2.4868075847625732], + [7.7760844230651855, -2.18546986579895], + [-4.126674175262451, 5.675800800323486], + [4.107784271240234, 1.0664517879486084], + [-5.413619518280029, 5.05865478515625], + [-5.001563549041748, 2.9997997283935547], + [6.56751823425293, 7.952664375305176], + [-4.386966705322266, 4.349905967712402], + [-0.4931226670742035, 4.3491411209106445], + [-6.679050922393799, 7.523897171020508], + [1.638881802558899, 5.224807262420654], + [3.176767110824585, 4.64759635925293], + [-0.3782268762588501, -0.7134873867034912], + [4.463927268981934, -3.952897548675537], + [-2.1481401920318604, 2.25069522857666], + [-5.0201849937438965, 6.108678817749023], + [3.344428777694702, -2.7433104515075684], + [1.410109281539917, -5.98185920715332], + [-3.0439412593841553, -4.64046573638916], + [7.7642340660095215, -2.1571662425994873], + [-6.351375102996826, 0.8144209384918213], + [1.5245126485824585, 1.72559654712677], + [3.233502149581909, -11.033302307128906], + [-2.457554817199707, 1.8591206073760986], + [-2.961674928665161, -5.421482086181641], + [0.18938559293746948, 11.675067901611328], + [7.328251838684082, -1.470730185508728], + [-2.3716399669647217, 1.293012261390686], + [9.121062278747559, -2.3974921703338623], + [0.03920309990644455, 9.905601501464844], + [4.901825428009033, -3.1001346111297607], + [-4.004912853240967, 4.802692413330078], + [3.231005907058716, 1.7352452278137207], + [-0.08223480731248856, 14.482851028442383], + [-3.567690134048462, 7.452717304229736], + [-4.753550052642822, 4.974515914916992], + [-1.4212684631347656, 5.133698463439941], + [-2.041795015335083, -1.5953954458236694], + [0.19631141424179077, 10.473527908325195], + [-4.773358345031738, 3.621988296508789], + [5.891054630279541, -2.7215211391448975], + [1.8262722492218018, 5.460263252258301], + [0.058869414031505585, 12.201482772827148], + [-1.192698359489441, 1.8526219129562378], + [5.894322872161865, -1.2255219221115112], + [-4.175703048706055, -3.7208003997802734], + [-1.0127813816070557, 4.801680564880371], + [-4.848795413970947, 3.56593656539917], + [-5.073750019073486, 0.733540415763855], + [2.143526315689087, 4.890355110168457], + [8.492908477783203, -2.252922773361206], + [-2.1761302947998047, 1.2413660287857056], + [2.887951135635376, -4.083005905151367], + [2.4859440326690674, 0.7858210206031799], + [-3.9214298725128174, -5.983807563781738], + [-5.1771931648254395, -0.9770300984382629], + [-4.371043682098389, 4.851452827453613], + [-3.024423837661743, -5.375168800354004], + [-4.772776126861572, 4.660451412200928], + [-0.5457916259765625, -2.288297414779663], + [-2.5089759826660156, 2.0552122592926025], + [1.9320056438446045, 4.064891338348389], + [-4.59377908706665, -6.062711715698242], + [-2.2859747409820557, -1.6835020780563354], + [0.23629945516586304, 11.298579216003418], + [-0.7214468121528625, -0.9525355696678162], + [-2.5781030654907227, 1.7920550107955933], + [3.767930030822754, -3.4798026084899902], + [-5.443978786468506, 0.8104884624481201], + [4.185279369354248, 6.657584190368652], + [6.289404392242432, -2.6449458599090576], + [4.070700645446777, 1.635033369064331], + [-3.788813829421997, -6.096920013427734], + [2.525777578353882, 0.4278560280799866], + [-3.1274709701538086, -2.262484312057495], + [-2.132045269012451, 1.530635952949524], + [-6.118374824523926, 6.099739074707031], + [-2.621828317642212, -2.4465556144714355], + [0.19343942403793335, 10.19933795928955], + [5.169397354125977, 6.507068634033203], + [3.4377098083496094, -5.880228519439697], + [2.473552942276001, 6.035964012145996], + [3.61006760597229, -5.059816360473633], + [-5.086441993713379, -2.454782009124756], + [3.8278677463531494, 1.8964101076126099], + [-2.399130344390869, 1.6806049346923828], + [-1.8644628524780273, -3.0484232902526855], + [8.639214515686035, -2.3384528160095215], + [-2.2050583362579346, 2.879380226135254], + [0.5246450901031494, 11.56480598449707], + [-4.245500087738037, 5.0753631591796875], + [-2.2369070053100586, 2.3940813541412354], + [-4.797457218170166, 0.9012985825538635], + [5.287642955780029, 6.626534461975098], + [0.024560384452342987, 13.640372276306152], + [-2.6035919189453125, 2.126687526702881], + [-4.582315444946289, -1.2957226037979126], + [2.8656065464019775, -6.795839309692383], + [3.9578049182891846, -7.465816974639893], + [5.127445697784424, 6.867243766784668], + [2.3547074794769287, 2.5496599674224854], + [3.59371280670166, -3.2764763832092285], + [6.267448902130127, 7.709580421447754], + [3.601557493209839, 5.053185939788818], + [2.6750402450561523, -8.538820266723633], + [-5.943559169769287, -0.2994336485862732], + [-5.230905055999756, 5.826489448547363], + [-1.0197784900665283, 1.7828861474990845], + [-4.388977527618408, 4.624297618865967], + [6.026038646697998, -2.7017083168029785], + [0.33873456716537476, 5.094458103179932], + [9.646258354187012, -2.3933417797088623], + [7.7382683753967285, -2.090555429458618], + [-3.7505781650543213, -3.5401384830474854], + [-6.3694071769714355, 7.521807670593262], + [-0.03508365899324417, 9.285263061523438], + [-7.3150506019592285, 7.78135871887207], + [3.1335325241088867, -5.552696228027344], + [-4.68240213394165, -1.1211003065109253], + [-1.7159241437911987, 1.952051043510437], + [-0.06625265628099442, 13.05605697631836], + [2.990410089492798, 1.2213668823242188], + [2.548642873764038, 2.289026975631714], + [2.8177053928375244, -4.111139297485352], + [-6.703732013702393, 7.927367687225342], + [-2.399320125579834, 2.1789190769195557], + [3.2841908931732178, -4.9335618019104], + [-3.7431929111480713, -5.264698505401611], + [-2.9534263610839844, -3.985987901687622], + [6.92128324508667, 8.467637062072754], + [-2.1431705951690674, -3.0361111164093018], + [4.511582851409912, 6.636414051055908], + [4.418992519378662, -7.997602939605713], + [4.7830657958984375, 6.0013532638549805], + [-0.1862809956073761, 0.7979337573051453], + [9.203606605529785, -2.5074832439422607], + [-3.181046962738037, 1.4901665449142456], + [3.3864586353302, 1.1325432062149048], + [-1.7103567123413086, 2.3149912357330322], + [-6.777723789215088, -1.6054767370224], + [5.371773719787598, -3.0548648834228516], + [-2.5754170417785645, 0.44419461488723755], + [9.028631210327148, -2.501786947250366], + [0.8837664723396301, 4.869579315185547], + [-0.0749412253499031, 13.94314193725586], + [6.823513507843018, 8.402530670166016], + [8.739537239074707, -2.392465353012085], + [8.711562156677246, -2.468766927719116], + [-4.226001739501953, 2.8423123359680176], + [-4.324225902557373, -3.874814033508301], + [10.462907791137695, -2.508965253829956], + [3.531073808670044, -6.36851167678833], + [5.508010387420654, -1.2338032722473145], + [2.141740083694458, 3.350306987762451], + [10.693985939025879, -2.4981114864349365], + [-1.7031943798065186, -4.604086399078369], + [8.734792709350586, -2.3967161178588867], + [2.438559055328369, -8.07427978515625], + [9.033427238464355, -2.3567912578582764], + [-2.06880784034729, 2.497997760772705], + [-0.7399413585662842, -2.883573293685913], + [-0.7433627247810364, -0.7745887041091919], + [-5.734218120574951, 5.59022331237793], + [0.48327523469924927, 4.097786903381348], + [1.6070151329040527, 4.999637603759766], + [-6.5619425773620605, 7.630605697631836], + [4.54913854598999, -3.1682121753692627], + [0.07320141047239304, 11.489709854125977], + [8.84025764465332, -2.2579102516174316], + [-4.4027838706970215, -6.6943511962890625], + [3.0736606121063232, 5.925233840942383], + [-2.895092248916626, -0.3193347454071045], + [0.016479603946208954, 9.995611190795898], + [3.196239709854126, -3.7244927883148193], + [5.6539130210876465, 7.970513343811035], + [-2.583043336868286, -0.09080255031585693], + [-1.0561013221740723, 1.9554418325424194], + [4.675058841705322, 6.64078426361084], + [-2.697678804397583, -3.348126173019409], + [6.388937950134277, -2.043268918991089], + [-3.666059732437134, -0.10908514261245728], + [5.899050235748291, -2.2498133182525635], + [5.2755255699157715, 6.820661544799805], + [-0.042264409363269806, 9.409156799316406], + [4.865206241607666, -1.8839293718338013], + [2.85831618309021, -4.584354400634766], + [0.010756544768810272, 12.935192108154297], + [2.469728708267212, 3.6212048530578613], + [-6.131889820098877, 7.427767753601074], + [7.9887518882751465, -2.244351625442505], + [2.33923602104187, -8.883681297302246], + [-1.144446849822998, -2.5223851203918457], + [9.487638473510742, -2.3740594387054443], + [-0.06736255437135696, 10.23208236694336], + [2.992187261581421, -9.478513717651367], + [-2.645991563796997, -5.516825199127197], + [-5.374685764312744, 3.9340925216674805], + [-0.02012074738740921, 12.20945930480957], + [3.5246551036834717, 5.820443630218506], + [8.726387977600098, -2.2822368144989014], + [3.5776257514953613, -3.6286542415618896], + [5.719208717346191, -1.1240675449371338], + [3.777919054031372, -8.14643669128418], + [4.836933612823486, 6.9904093742370605], + [-0.008232422173023224, 13.519044876098633], + [2.855285882949829, 4.201223373413086], + [-2.755460500717163, -2.0574986934661865], + [-4.801048278808594, 1.7400761842727661], + [-4.501261234283447, -6.564444541931152], + [6.621226787567139, 8.405718803405762], + [6.510314464569092, -1.8092399835586548], + [2.7785351276397705, -5.856588363647461], + [-2.0819153785705566, 2.5474953651428223], + [0.8592403531074524, -0.6790367364883423], + [-3.617394208908081, 5.153533935546875], + [3.618755578994751, -3.8380401134490967], + [-6.556670665740967, -0.7725183963775635], + [-3.4938406944274902, -1.8461230993270874], + [3.073857069015503, -4.325845718383789], + [3.275503158569336, 5.678957939147949], + [7.57964563369751, -2.698756456375122], + [0.2556653618812561, 11.623826026916504], + [7.327260494232178, -2.0923407077789307], + [2.8062498569488525, -4.5479278564453125], + [4.63666296005249, 6.802616119384766], + [-2.8193094730377197, 6.427826881408691], + [-4.619840621948242, -2.3183629512786865], + [7.917410850524902, -2.8324666023254395], + [-4.428848743438721, -6.143819808959961], + [-4.027490139007568, 4.9675517082214355], + [0.1373765468597412, 9.887022018432617], + [9.4999361038208, -2.3455731868743896], + [3.0730509757995605, 1.7052483558654785], + [2.413990020751953, -8.931126594543457], + [-2.410991668701172, 2.1092939376831055], + [-3.913787841796875, -0.898219108581543], + [-4.260469913482666, -5.630710601806641], + [0.020398013293743134, 9.520641326904297], + [4.5389204025268555, -3.1190850734710693], + [-4.084203243255615, -4.63633918762207], + [3.0847976207733154, -8.560544967651367], + [-3.832176685333252, -5.638251304626465], + [0.5708685517311096, -3.233039379119873], + [5.928792476654053, -4.771445274353027], + [3.068810224533081, -4.386137008666992], + [-5.643115520477295, -0.6351537108421326], + [7.250452041625977, -2.8502004146575928], + [3.9191768169403076, 6.364487648010254], + [2.8523051738739014, -9.581127166748047], + [4.915661334991455, -1.0866059064865112], + [-4.54650354385376, -5.888103485107422], + [-4.965456008911133, -3.2238786220550537], + [-1.248475432395935, -3.3366081714630127], + [-0.015509672462940216, 12.391298294067383], + [-2.4029767513275146, -3.8630177974700928], + [3.0385849475860596, -8.022449493408203], + [-0.9007996916770935, -0.33394408226013184], + [-4.584554195404053, -2.67620849609375], + [10.228060722351074, -2.3332693576812744], + [-3.7740654945373535, 7.117822170257568], + [-3.620387554168701, -5.046808242797852], + [-5.208316802978516, -4.118044376373291], + [-0.029196210205554962, 11.907861709594727], + [-0.4475315511226654, 5.404927730560303], + [-0.26694390177726746, -0.19668029248714447], + [-4.842761039733887, 5.283276081085205], + [8.645566940307617, -2.2000653743743896], + [6.795364856719971, -2.460947036743164], + [-2.182429552078247, 1.7486666440963745], + [5.2102370262146, -1.0104835033416748], + [-2.4837067127227783, 1.922231912612915], + [1.9458339214324951, -8.373128890991211], + [-0.10414440184831619, 13.804569244384766], + [2.4201319217681885, 0.6415679454803467], + [-1.8694908618927002, -2.475851535797119], + [-4.507932186126709, -6.69097375869751], + [-4.779292106628418, -1.8010133504867554], + [3.1345412731170654, -3.0434012413024902], + [-5.019176006317139, 3.5644633769989014], + [-0.041118212044239044, 13.155630111694336], + [-1.1389763355255127, 1.8092365264892578], + [0.08283858746290207, 9.66103744506836], + [9.166808128356934, -2.478928804397583], + [7.978638172149658, -2.2935402393341064], + [-1.887467861175537, 2.1914355754852295], + [1.9861748218536377, -7.779637336730957], + [0.2403554916381836, 11.274944305419922], + [-2.1690380573272705, 2.682737350463867], + [7.332545757293701, 8.858052253723145], + [3.942457914352417, 1.5459026098251343], + [3.2564151287078857, 4.89390230178833], + [-4.159005641937256, -6.337971210479736], + [5.066479682922363, -4.110385417938232], + [-4.006521701812744, -1.8279842138290405], + [0.006197623908519745, 9.52330207824707], + [-5.027772903442383, -2.4093868732452393], + [4.660019397735596, -3.3078315258026123], + [8.16822338104248, -2.1823673248291016], + [5.8057732582092285, -1.8983625173568726], + [2.4925904273986816, -4.366468906402588], + [2.9129269123077393, -4.142500400543213], + [5.387248992919922, -3.2647058963775635], + [-2.6369504928588867, 1.3465930223464966], + [9.766243934631348, -2.358027219772339], + [1.2606737613677979, -0.10334551334381104], + [8.921625137329102, -2.4451448917388916], + [0.3028353452682495, 12.124722480773926], + [-4.323544025421143, 1.0379810333251953], + [6.811155796051025, 8.3638277053833], + [-2.2867074012756348, 2.39062237739563], + [4.161462306976318, 6.651349067687988], + [5.9071431159973145, -2.443284034729004], + [3.1976771354675293, -3.7674601078033447], + [5.178511142730713, 6.442898750305176], + [3.1744425296783447, 1.0241442918777466], + [-5.061115264892578, 5.349992752075195], + [-0.07047621160745621, -1.5480488538742065], + [-7.274550914764404, -0.012000087648630142], + [-2.5798468589782715, -3.8297770023345947], + [-5.292762279510498, -5.340017318725586], + [-4.087276935577393, 4.391141891479492], + [-0.04179055243730545, 12.94918155670166], + [3.992975950241089, 6.664697170257568], + [-3.697674036026001, -1.1822866201400757], + [5.309077739715576, -1.2218648195266724], + [2.4270098209381104, 2.9020438194274902], + [0.37714409828186035, 10.974650382995605], + [-2.2142794132232666, 2.461369752883911], + [7.152964115142822, -1.7034469842910767], + [2.168273687362671, 5.873197078704834], + [0.5795027613639832, -0.9586343765258789], + [-6.663580894470215, -1.2220031023025513], + [3.883380651473999, -7.048402786254883], + [-5.340034008026123, 5.553261756896973], + [-0.2642841935157776, -3.194707155227661], + [6.5943121910095215, -1.5781886577606201], + [-2.075761556625366, 2.514223337173462], + [-2.9559996128082275, -3.1810739040374756], + [-4.638688087463379, -6.712136268615723], + [1.750780463218689, 5.66876220703125], + [2.407658815383911, -7.2469072341918945], + [6.03569221496582, -2.807276487350464], + [3.477177143096924, -3.5845348834991455], + [-0.07512814551591873, 15.116060256958008], + [-0.015061803162097931, 11.229570388793945], + [-6.2022857666015625, -1.8692184686660767], + [-4.094878196716309, -6.370253086090088], + [2.2998979091644287, 4.538656711578369], + [-1.0268033742904663, -3.047757863998413], + [-6.508110523223877, -0.4604203701019287], + [4.397615909576416, -3.8242404460906982], + [-2.0106217861175537, 1.312630534172058], + [-1.5457932949066162, -3.5838677883148193], + [6.638349533081055, -5.030060768127441], + [-2.3827686309814453, 2.263263463973999], + [-2.247614622116089, 2.406200885772705], + [-4.353524684906006, -6.526914596557617], + [-1.689949631690979, 0.7529497742652893], + [0.07446747273206711, 12.229307174682617], + [8.583789825439453, -2.318754196166992], + [7.534809589385986, -1.8620765209197998], + [0.136427104473114, 9.3138427734375], + [4.267584323883057, -2.884274959564209], + [8.755915641784668, -2.362532377243042], + [-6.926967144012451, 0.1285083293914795], + [-4.203431129455566, -6.110614776611328], + [-4.026174545288086, -3.0747435092926025], + [-4.838626384735107, -0.4446990489959717], + [3.0544040203094482, -6.4875617027282715], + [-1.4430804252624512, -2.8957364559173584], + [1.9487364292144775, -8.032814025878906], + [4.0155863761901855, 7.718860626220703], + [4.9729790687561035, 7.660062789916992], + [1.321941614151001, -5.7747602462768555], + [5.014685153961182, 7.267016887664795], + [3.0626184940338135, -3.6356022357940674], + [8.165311813354492, -2.2185513973236084], + [0.6909286379814148, 3.7684571743011475], + [-3.0919361114501953, -4.820723533630371], + [0.04726552218198776, 11.93892765045166], + [-0.06172526627779007, 12.668645858764648], + [1.896013855934143, 1.8157323598861694], + [-1.870926856994629, 1.030119776725769], + [8.080443382263184, -2.155628204345703], + [3.0107173919677734, -8.330534934997559], + [5.617339134216309, -2.3281590938568115], + [1.366682529449463, -4.3844380378723145], + [-3.3609607219696045, -4.450733184814453], + [-5.803864002227783, 6.784490585327148], + [-5.650501728057861, 5.516294479370117], + [-2.074409246444702, 2.351616144180298], + [-4.316734313964844, 5.440533638000488], + [4.026728630065918, -3.5809834003448486], + [-5.969048023223877, -0.09213542938232422], + [-1.5989282131195068, -1.2301684617996216], + [-6.5551323890686035, 2.8401758670806885], + [-2.3857247829437256, 5.125425338745117], + [-3.5359103679656982, -5.734259605407715], + [-1.2093828916549683, 1.2228394746780396], + [3.587092161178589, -7.886560916900635], + [-0.12841320037841797, 10.103788375854492], + [1.933396339416504, 3.8306663036346436], + [11.084643363952637, -2.545707941055298], + [1.9695358276367188, -0.18725624680519104], + [6.345834255218506, -2.167245388031006], + [-2.2249269485473633, 1.371752142906189], + [-5.401176929473877, -3.627246856689453], + [-4.617579936981201, -6.916274547576904], + [9.269844055175781, -2.349252939224243], + [0.0130266472697258, 12.579983711242676], + [8.863245964050293, -2.3859541416168213], + [-0.04357779771089554, 9.615639686584473], + [0.16484147310256958, 10.553033828735352], + [-2.9931719303131104, 0.48520493507385254], + [1.8411314487457275, 3.9766857624053955], + [-2.2197539806365967, 2.6777265071868896], + [-0.6404045224189758, 0.7481386065483093], + [5.420221328735352, -2.592848062515259], + [-3.7007625102996826, -0.3411998152732849], + [-3.594689130783081, -3.7326912879943848], + [6.250359535217285, 7.509815692901611], + [-2.2405059337615967, 1.1005690097808838], + [2.9107601642608643, -8.565206527709961], + [0.034051232039928436, 11.804773330688477], + [-1.3368580341339111, 1.1256468296051025], + [-1.9470700025558472, 2.4781553745269775], + [-3.9419302940368652, -2.9968199729919434], + [-4.987284183502197, -4.03309440612793], + [-2.4079501628875732, -3.0283734798431396], + [-3.260904312133789, -4.91357421875], + [0.06275611370801926, 12.626333236694336], + [-2.028488874435425, 2.420724630355835], + [6.75074577331543, 8.5811128616333], + [4.160099029541016, -2.8832409381866455], + [-3.601759910583496, 4.654071807861328], + [-4.6057257652282715, 5.96016263961792], + [-4.689388751983643, -6.611655235290527], + [4.554432392120361, -1.6444904804229736], + [-6.503448963165283, -0.5186391472816467], + [-3.8066184520721436, 4.070985794067383], + [-1.2357763051986694, -2.8776156902313232], + [-2.4077560901641846, 1.9795550107955933], + [-3.7120370864868164, -1.1037702560424805], + [6.240052700042725, 8.177916526794434], + [0.3927854299545288, -5.562424182891846], + [-2.09269118309021, 2.5248777866363525], + [3.757458209991455, 1.7385412454605103], + [4.612521171569824, 6.786390781402588], + [-1.7508437633514404, 2.5214967727661133], + [-4.212324142456055, 4.920374393463135], + [-0.007589884102344513, 13.479194641113281], + [2.960538148880005, -4.0129547119140625], + [2.657125234603882, -7.905129432678223], + [3.1386845111846924, 1.1738975048065186], + [0.41105854511260986, -1.0164265632629395], + [0.1187281534075737, 11.174742698669434], + [-3.152345657348633, -5.435476303100586], + [-5.803515911102295, 7.309067726135254], + [2.308709144592285, -8.44603157043457], + [8.364917755126953, -2.2722585201263428], + [-5.444737911224365, -4.472156047821045], + [0.947320282459259, -3.460745096206665], + [-5.0182108879089355, 5.921149253845215], + [0.448311984539032, -2.308112859725952], + [-7.076721668243408, -0.45958060026168823], + [5.045995235443115, -5.494380950927734], + [-4.776875019073486, -4.256771087646484], + [3.004087448120117, -10.168022155761719], + [6.186715126037598, -4.862492561340332], + [-5.141872406005859, 6.101507186889648], + [6.06279993057251, 7.779012680053711], + [-3.6176822185516357, -1.2044957876205444], + [7.4545087814331055, -1.747355580329895], + [2.6347944736480713, 0.43354374170303345], + [7.371590614318848, -2.841442346572876], + [-4.3693718910217285, -6.273146152496338], + [-1.9565311670303345, 2.410047769546509], + [-3.317931890487671, -4.4635748863220215], + [-4.412269115447998, -6.7111358642578125], + [0.1321713924407959, 9.640542984008789], + [-2.227119207382202, 2.237586498260498], + [-6.6313557624816895, 2.1346333026885986], + [-0.04283232241868973, 9.483631134033203], + [-2.9253571033477783, -4.367156982421875], + [-4.153299331665039, -1.553120493888855], + [10.483586311340332, -2.4866135120391846], + [2.7530784606933594, -9.089757919311523], + [-0.850902259349823, 0.5820053815841675], + [1.8033790588378906, 1.9832552671432495], + [0.07361715286970139, 12.068827629089355], + [-0.5220778584480286, -0.8486586213111877], + [2.1490204334259033, 3.4810879230499268], + [-0.03497851639986038, 9.833966255187988], + [-4.334351062774658, -6.1084160804748535], + [9.343859672546387, -2.3498165607452393], + [-4.9723334312438965, -7.9365105628967285], + [2.672659158706665, -8.096639633178711], + [-4.653339385986328, 8.42544937133789], + [9.614411354064941, -2.4575254917144775], + [-4.545948505401611, 3.920091152191162], + [7.6655659675598145, -2.6036624908447266], + [-2.053330898284912, 2.178830623626709], + [5.595829486846924, -1.2186776399612427], + [2.810058116912842, 3.632979154586792], + [3.332911252975464, -3.032846689224243], + [2.1596548557281494, -5.402487277984619], + [2.362351894378662, 4.948030471801758], + [-4.630963325500488, -7.233691692352295], + [0.23260101675987244, -1.6693991422653198], + [2.9882144927978516, -4.235113620758057], + [-0.02801961451768875, 9.8406982421875], + [-2.6210274696350098, 1.8562872409820557], + [-2.9751787185668945, -5.12848424911499], + [2.3574788570404053, 5.2065887451171875], + [10.223580360412598, -2.543773889541626], + [-2.273564100265503, -1.8694838285446167], + [2.1456093788146973, 3.0385541915893555], + [-4.760657787322998, -0.16430377960205078], + [9.339754104614258, -2.4251625537872314], + [-3.364203691482544, -0.49156683683395386], + [4.42731237411499, 6.820636749267578], + [0.2882922291755676, 8.727161407470703], + [1.8583346605300903, -7.771379470825195], + [7.816524982452393, -2.2350080013275146], + [3.285294532775879, -6.234301567077637], + [9.614697456359863, -2.524158239364624], + [3.2425055503845215, -4.535272598266602], + [-1.609758973121643, 2.11336350440979], + [-1.9433454275131226, 2.2612383365631104], + [-0.5289230346679688, -2.2814078330993652], + [0.35444122552871704, -0.8616843223571777], + [-6.102941036224365, -1.6587860584259033], + [-4.6190009117126465, -6.886784076690674], + [-4.684571743011475, -3.3403327465057373], + [6.212889671325684, -1.0253136157989502], + [3.6237924098968506, -4.546407222747803], + [-2.152287721633911, 2.0904805660247803], + [2.3605587482452393, 4.8104634284973145], + [6.755646228790283, -2.1004884243011475], + [0.18751966953277588, 10.560121536254883], + [8.425384521484375, -2.737405300140381], + [3.1233761310577393, -4.5058441162109375], + [5.721086025238037, 8.350203514099121], + [-1.3254379034042358, -3.742096185684204], + [3.8266539573669434, 5.370522975921631], + [-1.9831452369689941, 2.585021734237671], + [-1.1635069847106934, -2.1683714389801025], + [-2.836050271987915, 4.426947593688965], + [-3.232290029525757, -2.9636666774749756], + [-0.023803554475307465, -1.4668725728988647], + [-4.723974704742432, -2.1922454833984375], + [9.392428398132324, -2.6907904148101807], + [6.47913122177124, 8.016485214233398], + [2.2282018661499023, 5.047122478485107], + [-1.888020634651184, 2.083131790161133], + [3.2212469577789307, -6.779597759246826], + [0.08254628628492355, 10.971903800964355], + [3.370859384536743, -7.316186428070068], + [0.05867134779691696, 9.97707462310791], + [-5.238954544067383, -1.998930811882019], + [0.6703642010688782, 2.7649261951446533], + [0.7545550465583801, -2.489978075027466], + [7.265117168426514, 8.68790340423584], + [-0.010542698204517365, 12.126283645629883], + [4.260261058807373, 1.6451866626739502], + [-2.974808931350708, -3.242506504058838], + [-0.0015731528401374817, 12.798049926757812], + [9.625423431396484, -2.3838417530059814], + [11.722366333007812, -2.535778760910034], + [2.874603509902954, -4.179312229156494], + [1.9349486827850342, 5.304282188415527], + [2.86055850982666, -4.051613807678223], + [1.6265389919281006, 5.494228363037109], + [2.9834136962890625, -4.306271553039551], + [9.354422569274902, -2.30495285987854], + [5.1122331619262695, -3.953167200088501], + [-5.20856237411499, 7.477426528930664], + [3.20861554145813, -6.1498308181762695], + [-4.804351329803467, -2.210000514984131], + [-5.26450777053833, -2.886381149291992], + [6.1659979820251465, 7.548186302185059], + [-5.0304484367370605, 7.041302680969238], + [-3.0032846927642822, -1.6785756349563599], + [7.760087013244629, -1.9638477563858032], + [-1.0947343111038208, 1.488244652748108], + [-0.6405602097511292, 0.3874603807926178], + [-4.469082355499268, -4.128170013427734], + [-2.2250678539276123, -5.620907783508301], + [4.809737205505371, 6.084896087646484], + [-4.022888660430908, 3.094200372695923], + [6.6839070320129395, 8.090100288391113], + [3.350487470626831, -8.796907424926758], + [-7.648195743560791, -0.4672497510910034], + [-0.8932402729988098, -3.1083273887634277], + [-4.7935099601745605, -3.670078754425049], + [2.184006452560425, -8.268280982971191], + [-1.418468713760376, -1.101786732673645], + [6.288479328155518, -2.9092133045196533], + [-0.0786367729306221, -1.780868411064148], + [-2.650847911834717, 2.0911293029785156], + [3.186138391494751, 0.7008273005485535], + [9.02510929107666, -2.313278913497925], + [4.372915267944336, 1.8403096199035645], + [-3.3827311992645264, -1.4516359567642212], + [3.3221423625946045, -8.248315811157227], + [5.213991641998291, 6.877320766448975], + [6.164127826690674, 7.724682807922363], + [8.16226863861084, -2.2198450565338135], + [-5.149204254150391, 7.8351240158081055], + [-4.562070369720459, -6.6425886154174805], + [-4.847026824951172, -4.705423355102539], + [7.661085605621338, -2.060929536819458], + [0.45205217599868774, 10.895658493041992], + [6.630887031555176, -1.480995774269104], + [0.9903669953346252, 2.8115079402923584], + [-4.529627323150635, 5.991635322570801], + [-0.32012954354286194, -1.3720966577529907], + [-4.585608959197998, -6.896287441253662], + [-5.888661861419678, 3.98380970954895], + [4.186249256134033, -3.901200532913208], + [2.8336000442504883, -7.6957597732543945], + [2.4194486141204834, -9.063994407653809], + [-2.810265302658081, -2.4255573749542236], + [6.5400543212890625, -1.5229172706604004], + [0.5374801754951477, 7.503416538238525], + [-1.4504942893981934, 0.5253231525421143], + [-3.2041428089141846, 3.2425665855407715], + [2.8377039432525635, 1.1639556884765625], + [3.028353452682495, -2.5934579372406006], + [5.3377909660339355, -3.8835904598236084], + [4.684019565582275, 7.058749675750732], + [-4.35465669631958, -2.998728036880493], + [0.14876383543014526, 10.028768539428711], + [9.019556999206543, -2.4032325744628906], + [2.2021231651306152, 5.97254753112793], + [-5.913754940032959, -1.160406470298767], + [3.8723576068878174, -3.2798759937286377], + [-2.5928122997283936, -3.519580125808716], + [5.961492538452148, -3.207185983657837], + [-3.3933119773864746, 5.16743278503418], + [-2.0599894523620605, 2.5131497383117676], + [-3.274219274520874, -3.867453098297119], + [3.655116558074951, -6.602663516998291], + [-4.077367305755615, -5.558670997619629], + [5.135434627532959, -0.6413414478302002], + [0.18979346752166748, 10.908931732177734], + [0.4539773464202881, -1.0835093259811401], + [6.257535934448242, 7.758523941040039], + [0.06596129387617111, 12.589944839477539], + [-0.7896670699119568, -2.6944587230682373], + [4.629673004150391, 1.989132046699524], + [2.667788505554199, -7.213381767272949], + [-1.7788079977035522, 2.072561502456665], + [-3.9160878658294678, -5.98843240737915], + [1.1760852336883545, -7.050724506378174], + [2.1653146743774414, -6.526673316955566], + [3.1966712474823, -8.039167404174805], + [0.039345256984233856, 12.443538665771484], + [-2.8330013751983643, 6.605198860168457], + [-4.760643005371094, -2.871990442276001], + [-4.698334217071533, -2.7705156803131104], + [3.7221295833587646, -2.6317481994628906], + [-6.36647367477417, 7.340714454650879], + [-3.918470621109009, -2.204230308532715], + [6.891012668609619, -1.575975775718689], + [4.918970584869385, -1.6188099384307861], + [-1.1014481782913208, 10.753164291381836], + [2.7306430339813232, -5.37603759765625], + [-0.6671047806739807, 0.10506941378116608], + [1.0501017570495605, -6.991706848144531], + [-2.6943178176879883, -3.1211321353912354], + [6.908050060272217, -1.5625474452972412], + [-1.0530964136123657, 6.195464134216309], + [1.4891462326049805, -7.0688910484313965], + [-0.03149760514497757, 12.921147346496582], + [0.6709081530570984, 1.6836198568344116], + [0.05847757309675217, 11.521233558654785], + [-2.5649192333221436, -3.3253562450408936], + [-1.9764128923416138, 2.30723237991333], + [9.098624229431152, -2.386540651321411], + [4.46276330947876, -3.820324659347534], + [-2.6707630157470703, 2.3303987979888916], + [-4.147295951843262, -5.636210918426514], + [-4.211766242980957, 3.5710177421569824], + [2.5933620929718018, -9.024505615234375], + [8.050436973571777, -2.226672887802124], + [2.7410318851470947, -10.067031860351562], + [3.543313980102539, -8.395818710327148], + [2.9411370754241943, -4.0988569259643555], + [2.3523848056793213, 1.9658457040786743], + [3.6175525188446045, -7.967264652252197], + [2.218201160430908, -8.799421310424805], + [-0.8098928928375244, 1.4756603240966797], + [-4.946676254272461, 5.1684346199035645], + [2.6762239933013916, -3.311431407928467], + [6.015194416046143, 7.413782596588135], + [1.0153083801269531, -0.4004948139190674], + [-1.0588648319244385, 0.35186946392059326], + [3.7012996673583984, 5.260639190673828], + [-4.889138698577881, -0.8680890798568726], + [-1.819231629371643, -2.7518699169158936], + [0.051541440188884735, 10.170610427856445], + [-4.465587139129639, -3.8856379985809326], + [-2.7811176776885986, -1.7580660581588745], + [-2.002218008041382, -3.1596789360046387], + [1.4736672639846802, 1.7748855352401733], + [2.82741117477417, -0.07576154172420502], + [8.430943489074707, -2.3154914379119873], + [4.966892719268799, -4.479031562805176], + [1.2023389339447021, -6.597127437591553], + [6.561023235321045, -3.231982469558716], + [5.599476337432861, -5.346234321594238], + [0.8661617040634155, 5.072857856750488], + [-6.6077446937561035, 7.698092460632324], + [-2.5531084537506104, 3.6598918437957764], + [6.41023588180542, 8.420820236206055], + [0.5808262228965759, 11.497182846069336], + [6.005155086517334, 7.413305759429932], + [-2.4335591793060303, 0.8233681917190552], + [-6.748759746551514, 7.518848419189453], + [-0.17635375261306763, 0.860804557800293], + [-1.313354253768921, -0.5413987636566162], + [5.865292072296143, -0.8345258235931396], + [-2.4047622680664062, 1.2580145597457886], + [4.050431728363037, -7.554056644439697], + [3.061553478240967, -4.374045372009277], + [3.7115871906280518, -7.200106620788574], + [-7.004027843475342, 8.203388214111328], + [2.184889793395996, 5.202723503112793], + [-1.0355112552642822, -3.474858045578003], + [-2.529574155807495, 1.71333646774292], + [11.220793724060059, -2.580439329147339], + [-2.501264810562134, 2.208817720413208], + [2.8730738162994385, -7.646369457244873], + [-5.0771403312683105, -6.915314197540283], + [-1.489606499671936, 1.5747897624969482], + [-2.6393988132476807, 2.110421657562256], + [0.44043827056884766, 4.7037353515625], + [0.13721388578414917, 9.610589027404785], + [9.210463523864746, -2.287285327911377], + [-1.8833611011505127, -2.39505672454834], + [1.6674020290374756, -7.572226047515869], + [5.705130100250244, -1.7692221403121948], + [-4.939631462097168, -8.048772811889648], + [-6.34684944152832, -1.1879802942276], + [-1.2344239950180054, 1.5275664329528809], + [8.827653884887695, -2.3746559619903564], + [-7.466650485992432, 8.7193603515625], + [-3.3014118671417236, 3.2749929428100586], + [4.844732284545898, -0.7287567853927612], + [-1.8052968978881836, 2.278850555419922], + [-2.1641347408294678, 2.7957510948181152], + [-0.00695163756608963, 9.695062637329102], + [-5.776152610778809, 6.972156524658203], + [-0.05841142684221268, 13.746719360351562], + [4.901306629180908, -0.6646018028259277], + [2.98789381980896, -3.8533403873443604], + [-2.3184990882873535, 2.602348804473877], + [6.262784481048584, -3.6862566471099854], + [2.267169237136841, -6.369466304779053], + [-5.3523969650268555, 6.183782577514648], + [-4.433178901672363, 0.6658640503883362], + [0.5706928372383118, -0.8837370872497559], + [9.98316478729248, -2.4198648929595947], + [-1.6636202335357666, 2.2908589839935303], + [4.807473659515381, 7.513123512268066], + [7.377287864685059, -1.8009380102157593], + [-6.978062152862549, -0.5314192771911621], + [-4.456005573272705, -6.196218490600586], + [5.87837028503418, -2.202284097671509], + [3.2434284687042236, -8.237024307250977], + [-4.818371772766113, 4.779298782348633], + [2.195854902267456, 3.1563048362731934], + [3.0075247287750244, -3.2039220333099365], + [-5.4944539070129395, 0.14255326986312866], + [1.930603265762329, 1.6640428304672241], + [-5.703864574432373, 3.0410327911376953], + [-1.6911330223083496, 2.2074272632598877], + [-0.03306329995393753, 9.697000503540039], + [0.08058928698301315, 9.09073543548584], + [-4.903359413146973, -1.311555027961731], + [7.33030891418457, -2.1436288356781006], + [-2.7881689071655273, 2.6214585304260254], + [-1.8551578521728516, -3.3001410961151123], + [-0.02677268534898758, 12.815610885620117], + [1.8868441581726074, -5.060879230499268], + [2.9688708782196045, -4.236125469207764], + [-1.9617663621902466, 2.324767827987671], + [2.3308565616607666, -8.10598373413086], + [0.07341956347227097, 12.2869234085083], + [2.5188140869140625, 4.885358810424805], + [8.131664276123047, -2.2275545597076416], + [-4.738148212432861, -1.3639286756515503], + [3.0497095584869385, 0.848417341709137], + [-2.3574929237365723, 1.9806283712387085], + [-1.3702884912490845, 1.9595245122909546], + [4.591806411743164, -3.0451819896698], + [6.272573947906494, -1.934014916419983], + [-3.9422109127044678, 4.624105453491211], + [-4.899786472320557, -2.135779619216919], + [0.8035176396369934, 1.2620166540145874], + [-2.79215407371521, 1.2033251523971558], + [-2.146969795227051, -1.5652538537979126], + [-2.097262144088745, -4.853438377380371], + [3.6774818897247314, 1.7046146392822266], + [3.080134630203247, -5.565790176391602], + [0.028963975608348846, 10.66377067565918], + [-3.9868099689483643, -6.3696088790893555], + [-5.413517475128174, -5.73922872543335], + [0.049271516501903534, 10.562324523925781], + [-3.8212316036224365, 5.721994400024414], + [0.09001313894987106, 11.093456268310547], + [-6.839452743530273, -2.3440983295440674], + [2.3448731899261475, -9.032949447631836], + [3.6151938438415527, -3.5362510681152344], + [6.079217433929443, 7.657851219177246], + [-0.1964716911315918, -1.6057056188583374], + [-0.01534009724855423, 9.958305358886719], + [-2.1006219387054443, 6.489823818206787], + [-0.7779632806777954, -1.9149388074874878], + [-0.5450223088264465, 6.744711875915527], + [0.2839210033416748, 11.690958023071289], + [8.476834297180176, -2.3433995246887207], + [6.202888011932373, -4.811482906341553], + [-4.180252552032471, 5.920441627502441], + [0.23049157857894897, 10.797297477722168], + [3.909696340560913, -7.812972068786621], + [5.8201375007629395, -3.0068740844726562], + [8.128767013549805, -2.873314619064331], + [2.8515899181365967, -4.1534810066223145], + [1.3821544647216797, 4.848992347717285], + [9.738419532775879, -2.3311800956726074], + [2.7254576683044434, -0.9019384384155273], + [-5.653683185577393, 6.122142314910889], + [-2.1215250492095947, 2.5869548320770264], + [2.6590683460235596, 3.578866720199585], + [2.374739646911621, 2.2599523067474365], + [-2.4656081199645996, 2.1755144596099854], + [-2.681654691696167, 2.9514524936676025], + [10.295342445373535, -2.383054494857788], + [0.3590748906135559, 11.817972183227539], + [-2.3385443687438965, -4.564187049865723], + [2.6469829082489014, 3.1087918281555176], + [7.361156940460205, 8.769195556640625], + [-4.888842582702637, -2.2806100845336914], + [-3.1223881244659424, 5.655404090881348], + [-6.796802043914795, 7.925095558166504], + [6.664785861968994, -1.5683656930923462], + [-4.334688186645508, 2.354928493499756], + [4.108116626739502, -2.9712235927581787], + [1.7300643920898438, 1.649013638496399], + [5.715747356414795, 7.421850204467773], + [5.489795207977295, 7.240019798278809], + [-0.017038889229297638, 12.314760208129883], + [7.308923244476318, 8.882540702819824], + [-5.079015254974365, -3.3711154460906982], + [5.044837474822998, 7.156811237335205], + [-5.1350836753845215, -2.9959123134613037], + [2.456552267074585, -3.2865970134735107], + [0.35304123163223267, 0.7062110900878906], + [6.215880870819092, 7.6348419189453125], + [-2.476398229598999, 1.6887377500534058], + [0.07958000153303146, 11.905843734741211], + [8.171172142028809, -2.448298931121826], + [-4.4554314613342285, -3.6612253189086914], + [2.4750235080718994, 5.335659980773926], + [-1.6105334758758545, 1.7723835706710815], + [3.0432090759277344, 6.674067497253418], + [2.1854031085968018, -7.575958251953125], + [-2.6956043243408203, 2.2186779975891113], + [-0.036282725632190704, 9.974242210388184], + [10.113165855407715, -2.3346354961395264], + [-5.06130313873291, -5.482412815093994], + [4.5162177085876465, 1.1346336603164673], + [3.593731641769409, 6.6163434982299805], + [-0.5690011978149414, 0.8580039143562317], + [-2.5224759578704834, 1.7903668880462646], + [5.203607082366943, -2.2178943157196045], + [-4.237146854400635, -6.077767848968506], + [8.721274375915527, -2.3031787872314453], + [0.2417336106300354, 12.062729835510254], + [-5.285974025726318, -3.4730093479156494], + [7.312624454498291, 8.76003646850586], + [3.2194583415985107, -5.396533012390137], + [2.874713897705078, -0.4250202775001526], + [1.1349751949310303, -5.902504920959473], + [6.817542552947998, -2.098403215408325], + [5.780601978302002, -1.2818571329116821], + [2.994985818862915, -3.998037099838257], + [1.4291152954101562, 4.799440860748291], + [-1.3696982860565186, -4.339658737182617], + [-1.2377444505691528, -0.5418755412101746], + [0.8117827773094177, -6.940876007080078], + [1.5471177101135254, -8.210298538208008], + [-1.18892240524292, -4.138028144836426], + [-0.7269672751426697, 1.4408687353134155], + [-2.208277940750122, 2.3847854137420654], + [2.7630488872528076, -2.453554391860962], + [-1.9913188219070435, -3.6965577602386475], + [-4.35625696182251, -4.166688442230225], + [-4.936440944671631, -2.8592357635498047], + [0.029894225299358368, 12.675678253173828], + [2.3178532123565674, 3.1201605796813965], + [0.2062637209892273, 11.031867027282715], + [-4.97456693649292, -7.163208961486816], + [0.12350177019834518, 9.684890747070312], + [2.452399492263794, -9.125507354736328], + [5.282703876495361, 7.180295467376709], + [0.9900966286659241, -2.5561468601226807], + [-6.8413004875183105, -0.6652113199234009], + [0.49183887243270874, -0.9550662636756897], + [0.015572242438793182, 13.130769729614258], + [-2.265660524368286, 2.3107707500457764], + [-2.239335298538208, -3.3559892177581787], + [0.6659687757492065, 8.104312896728516], + [10.58936595916748, -2.440791368484497], + [3.953718423843384, -5.304264545440674], + [-5.252355098724365, -2.5296056270599365], + [-2.0338053703308105, 4.650932312011719], + [6.403675556182861, -4.332705974578857], + [-1.3890289068222046, 0.10172954201698303], + [-5.719127655029297, -2.923983573913574], + [6.543378829956055, -5.272500038146973], + [1.7660548686981201, -0.2874898612499237], + [-2.380704641342163, 1.3976393938064575], + [8.710270881652832, -2.457216501235962], + [-4.216610908508301, 4.962114334106445], + [-0.554766833782196, 0.28669455647468567], + [-5.3896050453186035, -1.6820651292800903], + [8.086082458496094, -2.1863291263580322], + [3.1457974910736084, 6.880190849304199], + [4.120236873626709, -3.6058690547943115], + [4.068105220794678, 7.029813766479492], + [6.270259380340576, 7.986377716064453], + [2.7416274547576904, -3.9459900856018066], + [-3.517414093017578, -4.4353837966918945], + [-5.2686543464660645, 7.300105094909668], + [-5.261266231536865, 0.30013811588287354], + [1.9853525161743164, 4.937546253204346], + [-2.460062026977539, 1.7523152828216553], + [-2.850100517272949, 2.3871400356292725], + [-3.944526195526123, 5.45242977142334], + [6.133982181549072, 7.678182601928711], + [7.822227478027344, -2.3431360721588135], + [6.052608966827393, 7.666337013244629], + [2.47890043258667, 0.9415459632873535], + [-5.418459892272949, 6.282962322235107], + [3.564004898071289, -7.476901054382324], + [-0.6603870987892151, 8.89700698852539], + [-2.9522080421447754, -2.0843284130096436], + [6.762299537658691, 8.275120735168457], + [-4.1645731925964355, 4.669504642486572], + [7.959460735321045, -2.243922710418701], + [-0.22155138850212097, -1.3149105310440063], + [6.704980373382568, 8.069807052612305], + [3.390061378479004, -7.778409481048584], + [-5.899420261383057, -1.5368646383285522], + [3.3963077068328857, -2.9132587909698486], + [-2.11122727394104, 2.6080782413482666], + [-4.177048206329346, -6.211179733276367], + [5.70777702331543, -3.2353169918060303], + [-3.6166059970855713, -2.532930612564087], + [3.187091112136841, -4.574681282043457], + [-5.739086627960205, -0.994355320930481], + [2.6320788860321045, -0.051712919026613235], + [-3.0968849658966064, 6.2340826988220215], + [-3.8883726596832275, -2.7870731353759766], + [5.403148174285889, 7.446651458740234], + [-1.8834266662597656, -3.596947431564331], + [-0.787270188331604, 1.5560939311981201], + [-6.56590461730957, 3.562971353530884], + [-4.361673831939697, -6.476841449737549], + [-1.954471230506897, 2.235165596008301], + [10.040740966796875, -2.3512327671051025], + [2.134542942047119, -8.828839302062988], + [1.025583028793335, -6.331788063049316], + [3.2599399089813232, 6.016134262084961], + [-2.156919002532959, 2.4200360774993896], + [1.7492951154708862, -0.5330234169960022], + [2.7635276317596436, -6.616111755371094], + [-4.755178928375244, -5.670396327972412], + [-4.65416955947876, -5.870076656341553], + [-2.115173816680908, 1.6092151403427124], + [-4.32611608505249, -6.3203229904174805], + [-4.569998264312744, -6.287111282348633], + [7.418426990509033, -2.1810052394866943], + [-6.030496120452881, 7.931488037109375], + [5.308936595916748, 7.155844211578369], + [-4.549612998962402, 4.844870090484619], + [-2.4719574451446533, -0.05778330937027931], + [0.5110689997673035, 0.7202552556991577], + [-4.684286117553711, -3.0218586921691895], + [4.933033466339111, 7.4371795654296875], + [-0.7473874688148499, 0.04649623855948448], + [6.340321063995361, -1.4183151721954346], + [2.3241162300109863, 5.735865116119385], + [-3.416926860809326, 0.6976355910301208], + [-0.016806073486804962, 12.729698181152344], + [6.855407238006592, 8.518266677856445], + [-2.2138168811798096, 2.7143771648406982], + [2.421015977859497, -5.958621501922607], + [-3.085526943206787, -4.754465103149414], + [3.2682716846466064, -7.169571876525879], + [-0.08612561970949173, 9.245811462402344], + [5.407212257385254, -0.7421774864196777], + [-1.5138283967971802, 2.009199380874634], + [-5.319065093994141, -2.973186731338501], + [-4.901175022125244, -7.312562942504883], + [0.1908828616142273, 1.2476433515548706], + [-5.315010070800781, -2.5399844646453857], + [6.9152045249938965, -2.551487684249878], + [-1.0768458843231201, -3.5715413093566895], + [-3.3694443702697754, -0.39659011363983154], + [-3.332425594329834, 4.571913242340088], + [3.207796335220337, -8.161059379577637], + [2.5441012382507324, -8.291784286499023], + [0.5367966890335083, -6.732357978820801], + [2.8825228214263916, -4.9637932777404785], + [3.2827229499816895, -6.744280815124512], + [-5.243283748626709, 0.21949559450149536], + [2.8931005001068115, 1.0541404485702515], + [-4.777245998382568, 8.710938453674316], + [-3.560490846633911, -5.036316871643066], + [-6.061455726623535, -0.9353888034820557], + [-2.1187098026275635, 2.561983108520508], + [8.47420597076416, -2.9267947673797607], + [2.51131534576416, 4.694450855255127], + [8.565155982971191, -2.368438482284546], + [2.547166347503662, -3.5803470611572266], + [4.550208568572998, -1.0952612161636353], + [1.9631288051605225, 1.8622267246246338], + [-1.0102458000183105, 5.544619560241699], + [-2.243532657623291, 2.651398181915283], + [-5.400190830230713, 7.65252685546875], + [-3.889704942703247, -4.5221076011657715], + [0.004070691764354706, 13.073493003845215], + [-4.990182399749756, -2.237588882446289], + [-2.1987197399139404, 2.837338924407959], + [2.966493844985962, -5.983124256134033], + [9.368416786193848, -2.2742574214935303], + [5.403794765472412, -1.350234866142273], + [5.5752668380737305, -4.586503505706787], + [-0.8032952547073364, -1.1646945476531982], + [3.5482232570648193, -3.590437412261963], + [-4.198902606964111, -6.443114280700684], + [2.961355447769165, -4.127017974853516], + [-3.3338229656219482, -4.840068340301514], + [4.715726375579834, 7.231176376342773], + [-4.422939777374268, -6.036229133605957], + [7.464357376098633, -4.760465621948242], + [3.6020731925964355, -3.2978107929229736], + [-3.7656798362731934, -3.5671892166137695], + [5.400132656097412, -2.8435375690460205], + [0.23315054178237915, 11.554710388183594], + [3.9199864864349365, -3.5096371173858643], + [0.21345192193984985, 10.77286148071289], + [-2.504502534866333, -4.186731338500977], + [2.3657491207122803, -7.361749649047852], + [8.7467622756958, -2.3296358585357666], + [5.594655990600586, -2.355060338973999], + [0.8075666427612305, 4.886504173278809], + [-4.565973281860352, -2.478955030441284], + [2.298445224761963, 6.218847751617432], + [-4.367959022521973, -2.921485185623169], + [-3.8249759674072266, 5.485236167907715], + [-4.281307697296143, 4.743350028991699], + [-2.323085308074951, 2.2930564880371094], + [-2.6070148944854736, 4.272311687469482], + [-2.3973913192749023, 1.3373569250106812], + [-3.664259910583496, 7.745035648345947], + [-4.143153667449951, -3.0642709732055664], + [-0.40222156047821045, -1.1138945817947388], + [-4.47048282623291, 3.702158212661743], + [-4.206424236297607, 4.134681701660156], + [-3.84590220451355, -5.891027450561523], + [-2.319150447845459, 2.39213228225708], + [-4.594687461853027, -3.32568359375], + [1.7248178720474243, -3.2343690395355225], + [-3.926966905593872, -4.829198837280273], + [3.3632404804229736, -4.687660217285156], + [5.276578426361084, -5.4988861083984375], + [-3.4400386810302734, -3.438102960586548], + [-4.715061187744141, 5.949595928192139], + [3.522783041000366, -6.971085548400879], + [-4.774989604949951, -4.9523234367370605], + [2.654820680618286, 1.0034648180007935], + [-4.419027805328369, -2.2423250675201416], + [-2.8647959232330322, -1.7681976556777954], + [1.9641807079315186, -0.09137867391109467], + [-4.533478736877441, 3.6590042114257812], + [-3.0911099910736084, -2.563448905944824], + [8.365553855895996, -2.5449349880218506], + [-4.385615825653076, 4.65899658203125], + [2.2265307903289795, -3.606610059738159], + [2.6551687717437744, -3.7333152294158936], + [7.61466646194458, 9.169248580932617], + [1.3709907531738281, -6.644071578979492], + [2.6892998218536377, 5.990993499755859], + [0.2537458539009094, 10.480886459350586], + [-2.3849055767059326, 2.6468615531921387], + [6.493095874786377, -4.679080963134766], + [-4.196263313293457, 3.9010884761810303], + [-3.19140362739563, -0.9157984852790833], + [2.8320887088775635, -4.0267438888549805], + [-4.473799705505371, -6.752621650695801], + [6.549990653991699, -2.361726999282837], + [-2.2278788089752197, 2.5813064575195312], + [3.58370041847229, 6.531310081481934], + [-2.440446376800537, 1.3306949138641357], + [0.4580081105232239, 10.697114944458008], + [1.9137107133865356, -4.5880351066589355], + [-0.2098313570022583, -1.1658847332000732], + [-4.8796257972717285, -0.2979227900505066], + [-0.16613948345184326, -1.4810092449188232], + [2.715827703475952, 4.2335920333862305], + [-2.440727472305298, 1.9244229793548584], + [0.15892332792282104, 11.305513381958008], + [1.624160885810852, 5.068623065948486], + [0.4923449158668518, -1.8703036308288574], + [2.8893492221832275, -4.071120262145996], + [-6.073815822601318, -1.5307735204696655], + [-3.396043539047241, 2.772416830062866], + [3.9508869647979736, 1.7044142484664917], + [-4.547337055206299, -7.257861614227295], + [-2.117622137069702, 2.2432186603546143], + [-3.310535192489624, -5.619300842285156], + [-2.0723867416381836, 2.2650718688964844], + [-2.110757827758789, 2.123728036880493], + [0.15396207571029663, 10.809820175170898], + [-2.359541177749634, 2.6459548473358154], + [-6.725174427032471, 7.732272148132324], + [-4.376670837402344, -2.2773003578186035], + [-5.894018173217773, -2.4378113746643066], + [-4.406625747680664, 7.25153112411499], + [2.108891725540161, -8.845252990722656], + [-5.5056586265563965, 5.582517623901367], + [0.02875179797410965, -1.5259395837783813], + [-2.1243975162506104, 2.2918922901153564], + [3.6876232624053955, -8.361608505249023], + [1.3302829265594482, 2.013190984725952], + [-0.5630638599395752, -0.9637402892112732], + [3.241894006729126, 6.0811896324157715], + [5.842581272125244, 7.965692520141602], + [2.765432596206665, 0.6398870944976807], + [-2.3580195903778076, -3.775887966156006], + [-4.159536838531494, 5.667109489440918], + [6.284301280975342, 8.154361724853516], + [2.5434091091156006, -8.01334285736084], + [0.7920950651168823, 6.498068332672119], + [0.3128125071525574, 10.545276641845703], + [-0.7574671506881714, -2.78216290473938], + [10.788376808166504, -2.394543409347534], + [2.7684524059295654, -7.701710224151611], + [1.4463598728179932, -7.669034004211426], + [0.3176531195640564, 11.730506896972656], + [-4.106324672698975, -4.44501256942749], + [-4.801549434661865, -6.456247329711914], + [-0.18443113565444946, 9.625109672546387], + [2.385390520095825, 3.7199063301086426], + [-2.188753128051758, 2.758786916732788], + [5.125345706939697, -3.688145399093628], + [1.6003988981246948, 0.36241355538368225], + [5.449522972106934, 7.202387809753418], + [-3.7322356700897217, -2.2461371421813965], + [-4.367426872253418, -1.3364006280899048], + [2.0668976306915283, 4.507181644439697], + [0.9477668404579163, -6.055978775024414], + [4.835498809814453, -1.7430294752120972], + [8.975763320922852, -2.322368860244751], + [1.691587209701538, 2.2653415203094482], + [3.3323614597320557, 1.987596869468689], + [4.21058464050293, 5.911960124969482], + [0.2842733860015869, 10.83336353302002], + [-3.2004008293151855, 6.792464256286621], + [2.604132890701294, 7.016627311706543], + [1.9993040561676025, 0.17394345998764038], + [-3.1763947010040283, -4.714540958404541], + [-2.622851848602295, 1.9391244649887085], + [3.538839101791382, -7.007223129272461], + [4.263055324554443, -3.906695604324341], + [-3.71500563621521, -2.911699056625366], + [6.249835968017578, 7.794466972351074], + [-4.82900333404541, 5.8085036277771], + [-4.191932201385498, -2.200681209564209], + [1.3731684684753418, 2.0438008308410645], + [-4.931158542633057, -0.010974172502756119], + [-1.664466142654419, -0.9752167463302612], + [-6.059978008270264, 7.225302219390869], + [-6.0657453536987305, 6.923102378845215], + [2.637815237045288, -3.7949657440185547], + [8.942802429199219, -2.3813107013702393], + [1.6771143674850464, 2.702256917953491], + [6.326741695404053, 7.777031898498535], + [3.169018507003784, -6.918015003204346], + [7.9771904945373535, -3.32182240486145], + [-2.2169692516326904, 2.286419153213501], + [9.23657512664795, -2.4195735454559326], + [6.597675323486328, -3.4598467350006104], + [-1.9754295349121094, 2.76226806640625], + [-2.2213146686553955, 2.8817267417907715], + [-7.14940881729126, -0.18617463111877441], + [3.8245222568511963, -3.2655630111694336], + [1.8674862384796143, 1.7613297700881958], + [9.909697532653809, -2.3963191509246826], + [-6.01299524307251, 1.4768329858779907], + [-4.90796422958374, -3.463805913925171], + [-2.3540117740631104, 2.175006151199341], + [-4.535459995269775, -7.102294921875], + [2.5874733924865723, -3.5735623836517334], + [-2.160111904144287, 2.3819499015808105], + [-3.656120538711548, -1.0510340929031372], + [-2.0892717838287354, 2.636866807937622], + [3.2029120922088623, -7.507018089294434], + [-1.7094883918762207, 2.3567090034484863], + [1.6408662796020508, 5.2451491355896], + [5.792755603790283, 7.377115249633789], + [2.873748302459717, 0.5424913763999939], + [-4.287826061248779, 4.632207870483398], + [4.773164749145508, -5.541141510009766], + [2.850290060043335, -8.106698989868164], + [2.5157811641693115, 0.2673848271369934], + [7.46855354309082, -2.748863697052002], + [3.3469645977020264, -2.697632074356079], + [2.4396162033081055, 2.271430730819702], + [3.810953378677368, -3.3605239391326904], + [-1.5026451349258423, 1.5916974544525146], + [-4.468002796173096, 4.591595649719238], + [-1.6932361125946045, -3.7764313220977783], + [-2.249664783477783, -5.170356273651123], + [3.093163013458252, -6.7698073387146], + [4.631197452545166, -1.1747004985809326], + [1.779064416885376, 1.249409794807434], + [8.005221366882324, -2.214855670928955], + [-2.353555679321289, 6.1284894943237305], + [0.008494846522808075, 9.631315231323242], + [6.364186763763428, -3.514624834060669], + [6.178210258483887, -1.3000602722167969], + [3.401552200317383, -5.560280799865723], + [6.038843631744385, 7.736720085144043], + [-3.7864174842834473, -4.951780319213867], + [-2.6549313068389893, -3.6965832710266113], + [-4.299345016479492, -6.609164714813232], + [-2.4772443771362305, 2.7339165210723877], + [-5.678739070892334, 4.256370544433594], + [0.7056407332420349, -0.45294398069381714], + [3.60079288482666, -5.318592071533203], + [-1.7419636249542236, 0.5065345764160156], + [-4.884792804718018, -3.499865770339966], + [-4.6316447257995605, 0.9632126092910767], + [-2.111910820007324, 2.5924932956695557], + [-0.5338965058326721, -2.1996665000915527], + [-4.2318596839904785, -6.147716999053955], + [4.765437602996826, -3.2014224529266357], + [-6.580824851989746, -1.765478253364563], + [-4.354330539703369, -7.312360763549805], + [-1.0641348361968994, 1.8666898012161255], + [-3.481266736984253, -2.029649257659912], + [-2.801771402359009, 1.8777740001678467], + [1.9606420993804932, -8.377820014953613], + [-4.72471809387207, -7.634453296661377], + [-6.863107204437256, 8.233112335205078], + [-0.8204312324523926, -1.6162015199661255], + [2.325470209121704, 5.271125316619873], + [7.429962635040283, -1.8258975744247437], + [0.9629557728767395, -4.832913398742676], + [-2.774547576904297, -5.400219440460205], + [-1.9424238204956055, 0.8243386149406433], + [3.7918965816497803, -2.5878050327301025], + [0.6407684087753296, 0.027623113244771957], + [-1.7937519550323486, -1.0662821531295776], + [2.2309837341308594, 4.247892379760742], + [-1.1648228168487549, -1.873522162437439], + [2.9687414169311523, 4.692220687866211], + [-2.7573347091674805, 1.0395845174789429], + [2.317500591278076, 3.7144641876220703], + [3.214064598083496, -6.025163173675537], + [-4.730031967163086, -7.934427261352539], + [-4.675148010253906, -7.568393230438232], + [3.234693765640259, -3.3456082344055176], + [-2.2963662147521973, -1.0792499780654907], + [-4.3311543464660645, -2.330731153488159], + [5.239457607269287, 7.1978254318237305], + [0.18459951877593994, 10.479475021362305], + [-5.6931610107421875, -0.1930387020111084], + [-4.006679534912109, -6.096823215484619], + [-5.236484527587891, 5.965156555175781], + [-1.1867278814315796, 1.9187229871749878], + [-2.983487367630005, -3.1807968616485596], + [2.3743836879730225, -7.546744346618652], + [-2.125931739807129, 2.585855484008789], + [1.9120097160339355, 2.3346917629241943], + [2.7128870487213135, -5.852941989898682], + [0.15113061666488647, 10.365190505981445], + [-1.6350973844528198, -4.182774543762207], + [-7.115303993225098, 8.143601417541504], + [6.47247838973999, -1.3301316499710083], + [5.90360689163208, 7.6391496658325195], + [-6.441573619842529, 7.935611724853516], + [-3.195815086364746, -5.097452163696289], + [6.068151473999023, -2.8364474773406982], + [-2.9436159133911133, 1.7293689250946045], + [-1.1394569873809814, 1.4022375345230103], + [-0.6192312240600586, -2.3841068744659424], + [-3.244067907333374, 2.997480869293213], + [-4.996823787689209, 4.982256889343262], + [-6.119103908538818, -1.3354078531265259], + [0.26870816946029663, 11.302907943725586], + [2.39416766166687, 6.1532158851623535], + [11.192351341247559, -2.500760316848755], + [-3.777003526687622, -3.9220752716064453], + [2.8219916820526123, -3.2946856021881104], + [1.8987150192260742, -6.822749137878418], + [-3.9422686100006104, -4.429903030395508], + [8.64842414855957, -2.347700357437134], + [4.476086139678955, 7.507627964019775], + [-7.147953510284424, 8.32127571105957], + [-7.2005228996276855, 7.964733123779297], + [2.426863431930542, 0.938454270362854], + [0.10821633785963058, 9.985712051391602], + [-6.245536804199219, 5.07053279876709], + [2.1005585193634033, 4.213858604431152], + [-3.555917978286743, -2.0815932750701904], + [2.3726041316986084, -8.360212326049805], + [3.0380613803863525, -4.474332809448242], + [7.876846790313721, -2.1653854846954346], + [-2.4156181812286377, 2.3307688236236572], + [6.1544623374938965, 7.932062149047852], + [7.145699501037598, -2.6122143268585205], + [-3.525540828704834, 5.542179107666016], + [2.7861454486846924, -3.1605727672576904], + [0.12339084595441818, 11.70340347290039], + [-3.7569973468780518, 4.605222702026367], + [-4.711877346038818, -3.3268091678619385], + [9.037510871887207, -2.4966928958892822], + [1.3032596111297607, -5.673215866088867], + [-2.0553014278411865, 2.444554090499878], + [0.023998551070690155, 12.849872589111328], + [-6.1793670654296875, 7.789131164550781], + [-4.58029842376709, -5.943871974945068], + [0.3392886221408844, 0.21878063678741455], + [2.8063724040985107, 0.9788497686386108], + [-0.49128490686416626, -2.3379390239715576], + [2.309128522872925, 5.578604698181152], + [-5.396232604980469, 4.934571743011475], + [-2.0060806274414062, 2.466381788253784], + [0.2650919556617737, 10.483348846435547], + [-3.5014541149139404, -5.100225448608398], + [8.55915641784668, -2.3547492027282715], + [-0.8914758563041687, 0.24815645813941956], + [-0.09117073565721512, 13.504077911376953], + [-5.212584495544434, 6.195319175720215], + [3.357126474380493, -4.398250579833984], + [-2.554013967514038, 1.9929231405258179], + [-2.2871105670928955, 1.1686575412750244], + [2.199594736099243, 3.0075507164001465], + [-1.0955129861831665, 1.066953182220459], + [-3.6665842533111572, -2.5993309020996094], + [-4.913530349731445, 6.450034141540527], + [2.4332330226898193, 3.0979697704315186], + [-2.0039918422698975, 1.914406418800354], + [-2.415663242340088, 1.3304884433746338], + [0.5020639300346375, -1.0311965942382812], + [-4.4558281898498535, 5.842456340789795], + [-4.830471992492676, 4.629380702972412], + [-5.885823726654053, 5.256679534912109], + [-2.105515241622925, -2.8795645236968994], + [6.981004238128662, 8.44715690612793], + [5.8576579093933105, 7.490387916564941], + [0.0954701229929924, 11.196178436279297], + [7.818734645843506, -2.411339521408081], + [8.605168342590332, -2.483538866043091], + [-2.84084153175354, 1.856478214263916], + [8.92029094696045, -2.5393717288970947], + [-5.143641948699951, 5.983057498931885], + [-5.119377136230469, -0.17432093620300293], + [2.22489857673645, 0.2619406282901764], + [8.205798149108887, -2.605397939682007], + [1.663123607635498, 4.826602458953857], + [-4.421026706695557, -6.898813724517822], + [3.5011844635009766, -8.479867935180664], + [3.8851733207702637, 7.179694652557373], + [8.70751667022705, -2.4420173168182373], + [2.3134286403656006, -9.133169174194336], + [8.540916442871094, -2.256904363632202], + [-2.354447603225708, 2.9993972778320312], + [4.5741286277771, -2.9285826683044434], + [-2.1135237216949463, -4.058910369873047], + [-2.843384265899658, 2.851543664932251], + [-4.281766414642334, 6.62440824508667], + [8.123518943786621, -2.118921995162964], + [-5.443409442901611, 6.9121880531311035], + [-4.873363018035889, 0.3963496685028076], + [2.6749250888824463, 3.879088878631592], + [2.6374499797821045, 5.6414971351623535], + [8.166518211364746, -2.053847074508667], + [8.566624641418457, -2.338452100753784], + [-2.0520124435424805, 2.5397627353668213], + [9.744135856628418, -2.5008628368377686], + [11.047211647033691, -2.5517117977142334], + [3.5532491207122803, -8.164434432983398], + [-2.394258737564087, -4.0887017250061035], + [0.0710478350520134, 12.408482551574707], + [0.04915290325880051, 12.488567352294922], + [3.4897260665893555, -5.121636390686035], + [2.705810070037842, 5.699815273284912], + [8.671950340270996, -2.3121418952941895], + [8.907373428344727, -2.566093683242798], + [-4.106709957122803, -6.2832536697387695], + [1.5396761894226074, 3.8908748626708984], + [-2.29986834526062, -3.8976187705993652], + [-0.2883089780807495, -2.665545701980591], + [11.832839012145996, -2.599567174911499], + [-2.4767251014709473, 0.5311842560768127], + [8.17044734954834, -2.4450600147247314], + [-4.539780616760254, 4.4295477867126465], + [-2.4064550399780273, -3.216778516769409], + [-2.1037845611572266, 3.7055091857910156], + [-3.4302875995635986, -2.7987802028656006], + [-1.0267226696014404, 0.0976090133190155], + [8.739200592041016, -2.4306371212005615], + [3.3803839683532715, -4.093630790710449], + [3.1301329135894775, -5.193617343902588], + [-3.898019552230835, -3.400182008743286], + [-4.121284484863281, 4.299428939819336], + [2.8766162395477295, -4.005356311798096], + [-0.3767518401145935, 0.8539393544197083], + [3.5863254070281982, -6.101902008056641], + [-4.90561056137085, 6.043838024139404], + [3.019423484802246, -7.840782642364502], + [-2.4829397201538086, 2.0561513900756836], + [2.810823678970337, 1.288794755935669], + [5.846542835235596, -3.9763686656951904], + [5.716709136962891, -5.427062034606934], + [4.524885654449463, 0.9592584371566772], + [3.031994104385376, -7.346905708312988], + [-1.4902822971343994, 1.9208028316497803], + [-5.525197505950928, 6.351290702819824], + [2.4593420028686523, -8.153938293457031], + [6.985969066619873, 8.670967102050781], + [0.0712650939822197, -3.934030294418335], + [-5.005307674407959, 2.2830076217651367], + [1.713806390762329, 3.232337474822998], + [-2.707977771759033, 2.0509579181671143], + [-2.744929552078247, 6.032884120941162], + [4.883068561553955, 7.376331329345703], + [-2.761079788208008, 5.666788101196289], + [3.4157817363739014, -6.457035064697266], + [-3.3214104175567627, -0.8901196122169495], + [6.190220355987549, -1.2309025526046753], + [-4.783116817474365, -7.591818809509277], + [6.44478178024292, 7.877370357513428], + [4.684288024902344, 7.089576244354248], + [-4.825712203979492, -1.982642412185669], + [3.3118326663970947, -7.703133583068848], + [-4.3738112449646, -3.9193999767303467], + [-0.02613399177789688, -1.0051294565200806], + [0.5866627097129822, 4.369729042053223], + [-5.388974666595459, -3.1854116916656494], + [-5.940985202789307, -0.15374475717544556], + [4.864387512207031, -2.8192551136016846], + [1.602502465248108, -6.586440086364746], + [4.015928745269775, -3.63004469871521], + [-4.401627063751221, -4.30802059173584], + [-3.78623366355896, 6.9474358558654785], + [3.643479585647583, 1.5036693811416626], + [8.483506202697754, -2.2473599910736084], + [-4.54093599319458, -5.35020637512207], + [2.654677629470825, -6.753711700439453], + [-5.080159664154053, -5.686613082885742], + [-5.027285575866699, 5.158533096313477], + [3.590458631515503, -2.352614164352417], + [-0.8812382817268372, -0.2537599205970764], + [-2.235395669937134, 1.342264175415039], + [2.544525146484375, 4.1554789543151855], + [-1.3109632730484009, -3.737016439437866], + [-2.0524213314056396, 0.3294820785522461], + [3.3879892826080322, -3.840850830078125], + [3.363435983657837, 0.8906586766242981], + [3.2163429260253906, -8.801923751831055], + [-0.05779869109392166, 13.73249626159668], + [2.8773348331451416, -4.012927532196045], + [-0.04754257947206497, -1.448125958442688], + [-3.8987417221069336, 3.6501882076263428], + [2.982572078704834, -4.220468997955322], + [-3.2272536754608154, 7.6673455238342285], + [-4.731494426727295, -1.5071057081222534], + [5.200819492340088, -4.919492244720459], + [-1.4235584735870361, 0.1331600546836853], + [2.122973680496216, -8.301708221435547], + [0.2243761420249939, 11.59742259979248], + [11.309246063232422, -2.63393235206604], + [-1.3091492652893066, -0.9308961629867554], + [7.275466442108154, -4.494256019592285], + [-5.459696292877197, 3.505675792694092], + [-5.604018688201904, 5.860002517700195], + [-4.528106212615967, -6.21234130859375], + [-2.2528293132781982, -3.034043550491333], + [3.885685443878174, 0.8661800622940063], + [3.0475127696990967, -4.347239971160889], + [-4.993227481842041, -2.5439612865448], + [2.9740512371063232, -9.119636535644531], + [7.845032215118408, -2.7622170448303223], + [-2.5742247104644775, 1.939832329750061], + [-3.172940492630005, -4.989996910095215], + [2.020744800567627, 0.1917629837989807], + [-4.804090976715088, 5.216410160064697], + [-4.7737250328063965, -1.2184885740280151], + [-1.3287757635116577, 1.4150711297988892], + [1.9059988260269165, -3.9796082973480225], + [2.200432062149048, -0.009461436420679092], + [-5.068178653717041, -2.5376038551330566], + [0.1361161470413208, 9.825469017028809], + [2.450416326522827, -9.46146011352539], + [3.3993029594421387, -6.229678630828857], + [0.3519493341445923, 2.011957883834839], + [0.23040831089019775, 10.886388778686523], + [-0.4402770698070526, -1.5143415927886963], + [0.18526417016983032, 10.974935531616211], + [-6.933837413787842, 9.101221084594727], + [3.350341558456421, 7.028624534606934], + [-2.573716402053833, 1.7810713052749634], + [0.11132847517728806, 9.842297554016113], + [3.2155425548553467, -7.084036827087402], + [-3.8515689373016357, -5.597394943237305], + [2.3368427753448486, 3.681344747543335], + [-3.292234182357788, -4.911383152008057], + [8.37492561340332, -2.5632450580596924], + [1.9811978340148926, -0.17037230730056763], + [-3.4195969104766846, -5.702710151672363], + [2.5862743854522705, 5.423914909362793], + [-1.5443271398544312, 1.6218655109405518], + [0.1514868140220642, 10.223240852355957], + [7.296174049377441, -1.9946000576019287], + [4.984503269195557, -0.9348537921905518], + [4.3997321128845215, 6.368434906005859], + [-0.07530290633440018, 14.379481315612793], + [2.4405643939971924, -8.881362915039062], + [3.964179277420044, 1.6038426160812378], + [8.617491722106934, -2.638056993484497], + [-5.022485256195068, 5.374046325683594], + [2.936246395111084, 1.9508709907531738], + [9.540969848632812, -2.491831064224243], + [-4.813784122467041, -1.7902904748916626], + [2.618708372116089, -5.194997787475586], + [0.6372109055519104, -0.9588920474052429], + [9.838759422302246, -2.3800759315490723], + [3.057596445083618, -4.267793655395508], + [-2.3080012798309326, 6.250229358673096], + [0.13948827981948853, 10.375804901123047], + [2.6133668422698975, -5.436321258544922], + [0.3417885899543762, 12.098323822021484], + [-3.8193933963775635, -6.113631248474121], + [0.6751653552055359, -0.9060841798782349], + [-5.103516101837158, -4.605419158935547], + [4.666903018951416, 6.085744857788086], + [3.6802563667297363, -3.4232239723205566], + [4.119945526123047, -7.479739189147949], + [-4.865721702575684, -2.431051731109619], + [-1.6604317426681519, -1.5690830945968628], + [2.4925410747528076, -8.589056968688965], + [-4.267521381378174, 5.446303844451904], + [0.2096213698387146, 11.745782852172852], + [-3.800645112991333, -2.831392765045166], + [-2.390010356903076, 2.7730276584625244], + [5.339888572692871, -5.63199520111084], + [4.655057430267334, -1.0331398248672485], + [-4.500132083892822, -2.9529945850372314], + [7.494729518890381, -2.522124767303467], + [1.0237668752670288, 0.622808575630188], + [-4.247805595397949, -1.6471704244613647], + [8.804801940917969, -2.3087925910949707], + [10.495926856994629, -2.4603335857391357], + [2.687753200531006, -3.5512197017669678], + [-3.313044309616089, -2.681236505508423], + [8.342366218566895, -2.27948260307312], + [-1.5047190189361572, 0.5989606380462646], + [-2.597801923751831, -1.715293526649475], + [7.40287971496582, -2.3444769382476807], + [10.409810066223145, -2.503309488296509], + [-4.069331169128418, 6.345231056213379], + [-2.137756824493408, 2.6941802501678467], + [0.044319503009319305, 11.96980094909668], + [-3.9774458408355713, 3.2052600383758545], + [5.868171691894531, 7.522183895111084], + [-0.843565046787262, 1.3664296865463257], + [-4.50062370300293, 5.012014389038086], + [3.072556734085083, -3.74722957611084], + [8.876869201660156, -2.2766504287719727], + [2.6518805027008057, -7.371743202209473], + [-2.4176108837127686, 3.0459532737731934], + [-0.013325817883014679, 13.136958122253418], + [1.5248034000396729, 1.2250744104385376], + [-3.3525471687316895, 5.275230407714844], + [6.207791328430176, -2.1902883052825928], + [-3.803823947906494, 1.960616946220398], + [-2.06331729888916, 1.1515110731124878], + [-3.37973952293396, -5.057161808013916], + [-0.012623496353626251, 12.846914291381836], + [8.281277656555176, -2.257946729660034], + [-3.227104663848877, -1.2953872680664062], + [-2.4571340084075928, 0.6672093868255615], + [1.4837167263031006, 1.4921635389328003], + [-5.289088249206543, 8.367570877075195], + [5.605807781219482, -1.162216305732727], + [0.24139434099197388, 11.064326286315918], + [-3.4505348205566406, -5.434093952178955], + [-5.605912685394287, 0.5870096683502197], + [10.682971954345703, -2.4013211727142334], + [1.9957382678985596, 1.6926798820495605], + [-3.963261365890503, 3.2534241676330566], + [3.426941394805908, -3.7645108699798584], + [4.369776248931885, -3.851928234100342], + [3.0142674446105957, -3.6999995708465576], + [-0.02171165496110916, 12.646944046020508], + [-4.3330206871032715, -3.402054786682129], + [0.08361642807722092, 9.89571475982666], + [-4.5290937423706055, -3.4306397438049316], + [6.747176170349121, -1.4745047092437744], + [4.1304144859313965, -8.714424133300781], + [8.613238334655762, -2.588176965713501], + [0.6415072083473206, -2.32731032371521], + [-3.490457057952881, -0.47735631465911865], + [1.1933567523956299, -6.117012977600098], + [7.141345500946045, 8.582527160644531], + [8.515716552734375, -2.2644832134246826], + [0.23781561851501465, 11.137287139892578], + [-0.03961420804262161, 9.49818229675293], + [-4.623635768890381, -2.660836696624756], + [-2.7491261959075928, -0.41338038444519043], + [11.648076057434082, -2.483062505722046], + [-4.660099983215332, -6.761934757232666], + [-1.9767974615097046, -0.584133505821228], + [2.051649570465088, 5.405904293060303], + [2.180925130844116, 4.255789756774902], + [-7.701077461242676, -0.3742014169692993], + [-3.5896215438842773, 2.058847665786743], + [-0.12427312880754471, 14.785367965698242], + [-0.9933615326881409, -2.567545175552368], + [11.796326637268066, -2.5785484313964844], + [2.8471930027008057, -4.044164180755615], + [-0.6259169578552246, 0.7508437037467957], + [-0.725222110748291, 0.36455318331718445], + [3.4838507175445557, -4.970605373382568], + [-1.713665246963501, 2.536259889602661], + [2.3636012077331543, 6.122198581695557], + [-4.241692543029785, -6.8499860763549805], + [1.5411772727966309, 0.09118439257144928], + [-3.8482255935668945, -5.72326135635376], + [2.9408254623413086, -4.170183181762695], + [5.023646831512451, -0.5853452682495117], + [-2.062673568725586, 1.8401035070419312], + [0.6211223006248474, -0.9066225290298462], + [2.1412088871002197, -8.130549430847168], + [2.609774589538574, -9.580777168273926], + [-2.333682060241699, 2.5771942138671875], + [-4.464026927947998, -6.889056205749512], + [-5.54002571105957, -0.7342267632484436], + [-4.703710556030273, -7.0094475746154785], + [-2.9571712017059326, -3.1111207008361816], + [-2.036680221557617, 0.47649240493774414], + [3.8230884075164795, 6.673666954040527], + [1.4271800518035889, -0.47002771496772766], + [5.123713970184326, -3.287078619003296], + [2.196932554244995, 0.7683460712432861], + [-2.2040865421295166, 2.1423091888427734], + [-1.8712878227233887, 2.0434513092041016], + [2.084333896636963, 5.663993835449219], + [0.23142600059509277, 10.859962463378906], + [-3.922109603881836, -1.5870829820632935], + [3.0482583045959473, -4.043812274932861], + [2.375939130783081, 6.446372032165527], + [3.9763376712799072, 0.8788774609565735], + [2.2251291275024414, -8.2683744430542], + [-4.272755146026611, 5.632918834686279], + [1.2175757884979248, 1.358043909072876], + [3.0112879276275635, -3.7766149044036865], + [2.1966054439544678, 4.157660484313965], + [-6.396393775939941, 7.34738302230835], + [2.7169525623321533, -8.618572235107422], + [3.045382499694824, 0.07138289511203766], + [-3.6232850551605225, -5.623043537139893], + [-5.810586452484131, 5.061161041259766], + [5.880967617034912, -1.3702472448349], + [0.06885606795549393, -1.2872828245162964], + [-2.0311131477355957, -2.580151319503784], + [-4.478907585144043, 8.063774108886719], + [4.052766799926758, 5.884778022766113], + [8.270875930786133, -2.254263401031494], + [0.24446076154708862, -0.3644305467605591], + [2.1499698162078857, -8.176548957824707], + [-2.4431238174438477, -5.249879360198975], + [1.390507698059082, -0.4272232949733734], + [1.6684292554855347, -7.177925109863281], + [3.86517596244812, -4.725744724273682], + [-0.12449473887681961, -1.6303454637527466], + [2.4325149059295654, 4.489376068115234], + [-4.036009311676025, 5.077629089355469], + [-2.2534914016723633, 2.637507438659668], + [9.965928077697754, -2.456731081008911], + [-4.7119011878967285, -6.469271659851074], + [-2.8010411262512207, 1.8471018075942993], + [2.1222360134124756, 5.690939903259277], + [-3.398447275161743, 6.281753063201904], + [-1.700994849205017, -4.004001617431641], + [5.665506362915039, -1.8840605020523071], + [9.92601490020752, -2.36256742477417], + [9.467284202575684, -2.399115800857544], + [-2.142583131790161, 2.0594899654388428], + [2.8484599590301514, 0.7500861287117004], + [-3.474001169204712, -4.977548122406006], + [0.014832668006420135, 12.61121654510498], + [2.7951791286468506, -2.455249309539795], + [0.05621003359556198, 11.874900817871094], + [4.870816707611084, 6.492276191711426], + [-4.863513469696045, -3.2627570629119873], + [0.7918452620506287, -5.496661186218262], + [3.4861481189727783, -4.999198913574219], + [4.020119667053223, -2.7300949096679688], + [-3.8626983165740967, -3.3827931880950928], + [4.4234747886657715, 6.931269645690918], + [8.575032234191895, -2.3255832195281982], + [8.407613754272461, -2.18989634513855], + [9.253079414367676, -2.3133742809295654], + [6.172348976135254, 7.6609344482421875], + [-3.679487943649292, 1.4496997594833374], + [3.457233190536499, -6.664734840393066], + [3.0266153812408447, -4.231184959411621], + [4.094003200531006, -3.8124465942382812], + [-4.549274444580078, -6.227241516113281], + [-2.271751880645752, -2.0565285682678223], + [-4.280180931091309, -2.3137340545654297], + [6.136847019195557, -1.3055449724197388], + [0.1319907307624817, 10.047078132629395], + [2.5619843006134033, -7.437263488769531], + [-2.185368299484253, 2.7688772678375244], + [2.7438700199127197, -9.994356155395508], + [-4.858534336090088, -3.544572591781616], + [3.7118866443634033, -8.380696296691895], + [-4.9350266456604, 5.530690670013428], + [-0.40747779607772827, -0.05970451235771179], + [3.516098737716675, 5.913789749145508], + [-4.94346284866333, -7.629735946655273], + [-5.932867527008057, -1.629666805267334], + [3.986119508743286, 1.835647702217102], + [9.519272804260254, -2.3428189754486084], + [6.576529502868652, 7.935172080993652], + [2.573770761489868, 4.110980033874512], + [-2.205791711807251, 2.830047845840454], + [7.641035079956055, -2.1296398639678955], + [-2.111640214920044, 2.7269973754882812], + [-1.8003318309783936, 2.2277300357818604], + [1.636762022972107, -7.529269218444824], + [3.4849750995635986, -3.829528570175171], + [-3.2320921421051025, 3.4909188747406006], + [0.7909737229347229, -0.6008745431900024], + [-1.7108031511306763, 2.2341063022613525], + [-2.3506922721862793, 2.0097756385803223], + [0.4709591865539551, -1.9782284498214722], + [-5.004611492156982, 8.897529602050781], + [2.429210901260376, -8.069655418395996], + [4.160254001617432, -2.45550274848938], + [5.0324273109436035, 6.925998687744141], + [2.587395429611206, -8.78403091430664], + [-3.5041635036468506, -5.48067569732666], + [-8.08281135559082, -0.6204732656478882], + [0.7032275795936584, -4.762590408325195], + [2.754767894744873, 1.4483729600906372], + [-4.208547115325928, 4.626377582550049], + [10.87956714630127, -2.4132940769195557], + [-2.3735687732696533, 1.6004732847213745], + [-4.2691850662231445, -4.783090591430664], + [-2.36234450340271, -0.7265627384185791], + [3.124314546585083, 0.6327042579650879], + [3.155806303024292, -4.3678297996521], + [3.720536708831787, -3.4070959091186523], + [-1.6887997388839722, -3.9544951915740967], + [-4.924118518829346, -3.655367851257324], + [2.942744255065918, -3.524578809738159], + [3.145604372024536, -7.619202613830566], + [3.454188823699951, -3.3357064723968506], + [2.2407920360565186, -7.475618839263916], + [2.392193555831909, -8.972396850585938], + [2.997192859649658, -7.706597328186035], + [3.5948326587677, 1.0602123737335205], + [-0.3805960714817047, -1.8039414882659912], + [6.8448357582092285, -1.9683655500411987], + [2.726736307144165, -7.377241134643555], + [-2.2294163703918457, 2.061814308166504], + [-2.4781441688537598, 1.7555698156356812], + [-2.522352933883667, 2.393239974975586], + [2.399980306625366, 2.8340728282928467], + [4.058238506317139, 1.7243480682373047], + [2.982856035232544, -5.363921165466309], + [-6.030892372131348, 6.861634254455566], + [2.8559017181396484, -10.001633644104004], + [-1.2117265462875366, -2.9844324588775635], + [-2.3707499504089355, 1.769164800643921], + [2.9927446842193604, -4.358455657958984], + [-5.755383014678955, 5.828649997711182], + [-1.6543800830841064, 1.9970937967300415], + [6.806967735290527, -0.9598772525787354], + [5.259188175201416, 7.6025166511535645], + [6.607367992401123, -1.5662834644317627], + [0.2431052327156067, 10.954755783081055], + [2.226546049118042, 4.267266273498535], + [8.430418968200684, -2.594424247741699], + [-4.828458786010742, -3.0432846546173096], + [3.6044833660125732, -5.143648147583008], + [8.532776832580566, -2.4185760021209717], + [-4.473659515380859, -6.3056535720825195], + [5.526665210723877, -4.046977519989014], + [-3.4448297023773193, -1.6866642236709595], + [8.277128219604492, -2.20902156829834], + [-2.908785104751587, -0.08377277851104736], + [-0.16920453310012817, 0.8033158183097839], + [-1.9443631172180176, 1.980941653251648], + [-3.116548776626587, -3.180199384689331], + [-3.339350700378418, -3.9351274967193604], + [0.4798275828361511, -1.12075674533844], + [-2.1087074279785156, 0.9838593006134033], + [-0.8214208483695984, -3.0767059326171875], + [-2.1172022819519043, 2.708378553390503], + [8.546194076538086, -2.2905044555664062], + [2.7456750869750977, 4.977234363555908], + [-4.432370662689209, -2.835062265396118], + [4.758497714996338, -4.456555366516113], + [3.4259259700775146, -3.7881956100463867], + [-3.92106294631958, 5.457253932952881], + [-3.3411948680877686, -4.1706438064575195], + [3.640775442123413, 6.545112609863281], + [2.476799249649048, 3.3104946613311768], + [2.8991215229034424, -6.133780479431152], + [-1.1284091472625732, -0.847006618976593], + [3.826524496078491, -3.0999467372894287], + [-6.951797962188721, 8.144351959228516], + [-2.4670069217681885, 1.910630226135254], + [5.346451759338379, -0.9794068336486816], + [6.688640594482422, -1.111458420753479], + [0.08342386037111282, -1.4193533658981323], + [3.113525152206421, -8.2023344039917], + [7.8541646003723145, -2.097947597503662], + [0.07693129032850266, 11.656940460205078], + [4.2715067863464355, -3.714932680130005], + [6.433411121368408, -3.174870252609253], + [2.2854225635528564, 3.9101157188415527], + [4.343508243560791, -4.043724536895752], + [0.10953181236982346, 9.88901138305664], + [-2.0977797508239746, 2.475672960281372], + [0.048367612063884735, 9.53917407989502], + [1.7419898509979248, -7.827728271484375], + [5.9190545082092285, -3.555325984954834], + [-1.6251304149627686, 2.1632139682769775], + [5.996117115020752, 7.987907409667969], + [-3.8089840412139893, 5.482608795166016], + [-4.765181064605713, 3.5188944339752197], + [3.7428667545318604, -5.8248443603515625], + [0.8040111064910889, -0.48498570919036865], + [0.19022780656814575, 10.227108001708984], + [3.896588087081909, 1.334929347038269], + [-1.9223761558532715, -3.826598644256592], + [5.2566914558410645, -2.957319974899292], + [0.10826509445905685, 9.336849212646484], + [0.06433486193418503, 11.85380744934082], + [3.112159013748169, -4.037917613983154], + [1.9763476848602295, -2.4854605197906494], + [3.2896034717559814, -5.541623592376709], + [9.466559410095215, -2.582008123397827], + [3.851483106613159, -6.253176689147949], + [2.2449328899383545, -7.324110507965088], + [0.2626568675041199, -1.131118893623352], + [-4.660502910614014, 5.387151718139648], + [1.7992863655090332, -2.732038736343384], + [-3.7641494274139404, -5.798605918884277], + [4.202483654022217, 6.479937553405762], + [0.4501933455467224, 3.2718522548675537], + [5.618036270141602, -1.8533622026443481], + [0.18900960683822632, 10.963998794555664], + [1.1652235984802246, 1.6115084886550903], + [-4.076601982116699, 5.720911979675293], + [-2.588869571685791, 1.8412731885910034], + [4.439218044281006, -3.9994380474090576], + [2.029871702194214, -7.715897083282471], + [0.013541512191295624, 9.157718658447266], + [-3.5791008472442627, -4.007394313812256], + [4.187916278839111, -2.762356996536255], + [-3.1880762577056885, 5.841464042663574], + [4.0408148765563965, 6.939541816711426], + [2.1116392612457275, 2.0587399005889893], + [3.198939085006714, 0.2347869873046875], + [2.26271390914917, 1.6827696561813354], + [5.168967247009277, 7.290596008300781], + [-5.854023456573486, 0.49543553590774536], + [-2.2507293224334717, 6.077376365661621], + [2.7804102897644043, -6.519956588745117], + [3.308988094329834, -5.284667015075684], + [-0.1027522161602974, 9.274250030517578], + [-5.88423490524292, -1.7315150499343872], + [-4.780600070953369, 3.0505895614624023], + [1.9201328754425049, 6.051639556884766], + [2.838275194168091, -4.033024311065674], + [5.253714084625244, -2.254303216934204], + [0.21809357404708862, 11.039825439453125], + [1.7962143421173096, 3.99595046043396], + [0.07541530579328537, 11.579290390014648], + [5.463114261627197, -1.0533350706100464], + [4.56759786605835, -3.264317274093628], + [2.041095495223999, 0.22605597972869873], + [3.924039602279663, -9.133081436157227], + [-5.163990497589111, 4.514565944671631], + [-2.2481765747070312, 0.872757077217102], + [-4.303932189941406, 4.578935623168945], + [2.0043623447418213, -5.734566688537598], + [1.302863359451294, 2.6254353523254395], + [-1.5235695838928223, 1.1556270122528076], + [7.306416988372803, 8.8817138671875], + [3.531313180923462, -3.7804059982299805], + [9.727080345153809, -2.2831435203552246], + [3.1276345252990723, -2.2901761531829834], + [4.360668659210205, 6.377194404602051], + [-0.23610016703605652, 0.797819197177887], + [2.906048059463501, -3.9891889095306396], + [4.374436855316162, -3.3100621700286865], + [2.7830374240875244, -5.759550094604492], + [6.17316198348999, -1.280287265777588], + [0.24601250886917114, 11.276569366455078], + [1.571692705154419, -8.20970344543457], + [-2.087911605834961, 2.6609952449798584], + [-1.6693342924118042, 1.636637806892395], + [0.6873489022254944, 0.5808252096176147], + [-3.3296778202056885, 5.381533622741699], + [-2.3441309928894043, 1.6820075511932373], + [-1.5457055568695068, 0.8355482816696167], + [0.6574941873550415, -0.7880806922912598], + [2.461137533187866, 5.649072170257568], + [2.634460210800171, 3.7904956340789795], + [-2.476202964782715, 1.6802040338516235], + [-4.792166233062744, 3.6163971424102783], + [-4.755001544952393, -6.718928337097168], + [-4.649373531341553, 2.7201662063598633], + [2.3897931575775146, -9.201642990112305], + [10.381808280944824, -2.4159939289093018], + [-2.4205195903778076, 2.612133502960205], + [-2.000070810317993, 2.4097118377685547], + [4.331420421600342, 1.9443439245224], + [-2.7367615699768066, -3.5534491539001465], + [-0.8126210570335388, -1.9755984544754028], + [0.4818732738494873, -0.8938892483711243], + [0.48474621772766113, -0.7525421380996704], + [-1.82423996925354, -3.2623252868652344], + [6.609987735748291, 8.15492057800293], + [3.1526970863342285, 1.888421654701233], + [5.048061847686768, 6.435985088348389], + [-4.0334086418151855, 5.5243635177612305], + [0.023556284606456757, 9.716955184936523], + [1.6546716690063477, 4.118850231170654], + [3.5149331092834473, -5.650796413421631], + [-3.7965147495269775, -2.506256580352783], + [3.042532205581665, -3.1934285163879395], + [-3.4941203594207764, -5.323145866394043], + [-2.2881147861480713, -4.241580963134766], + [2.8819215297698975, 1.853027105331421], + [-3.0977895259857178, -1.3740047216415405], + [-4.4400954246521, 4.878725051879883], + [-1.725221872329712, -2.567063093185425], + [-0.10762608796358109, -1.8644272089004517], + [-2.001110553741455, 2.369724750518799], + [-1.439844012260437, -1.2782002687454224], + [0.0708199068903923, 9.261417388916016], + [-4.529954433441162, -5.957644462585449], + [-4.637649059295654, -2.890540361404419], + [-2.5951104164123535, 2.069700002670288], + [2.465209484100342, -3.4491400718688965], + [2.7483344078063965, -5.293046474456787], + [6.436436176300049, -3.0285701751708984], + [-1.2127504348754883, 0.741908609867096], + [2.758253574371338, -6.727415084838867], + [6.136645317077637, -4.444840431213379], + [2.2114806175231934, 0.7823613286018372], + [5.989319324493408, 7.478672981262207], + [3.7932446002960205, -7.09271240234375], + [3.254340887069702, -5.186443328857422], + [0.020892851054668427, 13.152229309082031], + [-4.038984298706055, 3.798286199569702], + [0.1487995982170105, 9.884037017822266], + [-4.778453350067139, -0.9379944205284119], + [-4.311075687408447, -5.725903511047363], + [-0.09815985709428787, 13.548416137695312], + [1.6559808254241943, 3.5971274375915527], + [9.535099029541016, -2.4174649715423584], + [2.292340040206909, 5.034111022949219], + [-2.713353395462036, 3.6428751945495605], + [-1.3068561553955078, 5.750218868255615], + [7.833690166473389, -2.2937092781066895], + [-2.10136342048645, -4.580313682556152], + [1.0613245964050293, 6.008701324462891], + [-3.367631196975708, -4.649425506591797], + [8.252045631408691, -2.3408212661743164], + [0.21547448635101318, 8.421106338500977], + [-5.221337795257568, 6.374266624450684], + [1.6563562154769897, -0.0064966268837451935], + [3.5446078777313232, -2.8635027408599854], + [8.14610481262207, -2.3721277713775635], + [-4.587154388427734, -7.1740217208862305], + [-6.831243991851807, 8.086723327636719], + [-2.7794084548950195, 1.8128873109817505], + [2.735675811767578, -6.469007968902588], + [-6.222275733947754, -0.5895407199859619], + [-2.6640353202819824, 2.083388328552246], + [0.11783086508512497, 9.908689498901367], + [6.702892780303955, 8.141338348388672], + [10.619303703308105, -2.487910270690918], + [0.48049890995025635, 2.441654920578003], + [-7.398426532745361e-6, 10.044632911682129], + [-6.044266223907471, 7.017167568206787], + [4.0401411056518555, -8.736797332763672], + [-2.7706868648529053, -3.8257040977478027], + [0.23394542932510376, 11.142194747924805], + [5.987734317779541, 7.750875949859619], + [-4.024994850158691, -1.7057480812072754], + [1.9575519561767578, -5.671147346496582], + [2.646709442138672, 1.8844588994979858], + [-0.8175216317176819, 1.0092518329620361], + [-3.924556255340576, -4.18025016784668], + [-4.793855667114258, -8.152523040771484], + [0.5809717774391174, -0.43169811367988586], + [5.955033779144287, -3.945709466934204], + [3.0898702144622803, -1.196351170539856], + [-0.13027286529541016, -0.715309739112854], + [0.03993474692106247, 9.177410125732422], + [1.9323031902313232, 4.584323883056641], + [2.3374955654144287, 3.6081466674804688], + [-2.4837887287139893, 2.4304873943328857], + [1.5315346717834473, -7.248411655426025], + [3.876723051071167, -3.0256900787353516], + [8.863212585449219, -2.3139734268188477], + [0.6965239644050598, -1.1455615758895874], + [1.1354222297668457, 3.5385076999664307], + [-6.270327091217041, 5.3844475746154785], + [-1.2566590309143066, -2.102383613586426], + [-3.159468412399292, -5.527557373046875], + [-3.5138041973114014, -5.155703544616699], + [2.6821742057800293, -3.79494047164917], + [3.4856951236724854, -4.186613082885742], + [-2.4142003059387207, -3.066903829574585], + [3.1861207485198975, -4.385339736938477], + [-4.159101963043213, -5.510201454162598], + [-2.5857326984405518, 2.1703896522521973], + [-5.2798542976379395, 6.3823628425598145], + [-5.022746562957764, 5.6053314208984375], + [2.8139569759368896, -9.109878540039062], + [7.06659460067749, -6.81401252746582], + [-0.9180157780647278, 0.8335309028625488], + [2.806471347808838, -8.97642707824707], + [-5.0167107582092285, 5.105861663818359], + [3.868847131729126, -7.52631139755249], + [-6.570925235748291, 8.149208068847656], + [-1.464409589767456, 0.3140137791633606], + [3.426638603210449, 1.9074201583862305], + [-4.161068916320801, -3.2954227924346924], + [-5.228816509246826, 7.165585517883301], + [3.665579319000244, -6.2844109535217285], + [-2.3733606338500977, 1.9238518476486206], + [-4.106363296508789, -1.8682727813720703], + [-2.5634326934814453, 1.8510686159133911], + [1.831798791885376, -6.841278553009033], + [-5.177306652069092, 3.219102144241333], + [4.642330646514893, -2.2936995029449463], + [3.046415090560913, 1.3184847831726074], + [5.032248497009277, -0.6819263696670532], + [0.22377634048461914, 11.652411460876465], + [0.11487846821546555, 9.638788223266602], + [-3.845247983932495, -2.2514712810516357], + [-0.5604146122932434, -3.215927839279175], + [8.104866027832031, -2.24570369720459], + [0.21841901540756226, 10.622668266296387], + [3.0523064136505127, -9.066381454467773], + [2.712285280227661, 4.570297718048096], + [-1.604746699333191, -1.678273320198059], + [-4.119594097137451, -2.2486772537231445], + [3.450364828109741, -9.148205757141113], + [9.485384941101074, -2.3836171627044678], + [3.429767608642578, -7.097755432128906], + [5.5739874839782715, 7.303171157836914], + [0.49372339248657227, -1.1717175245285034], + [-0.24718669056892395, -0.5894299745559692], + [-4.131510257720947, 7.346125602722168], + [6.293938636779785, -1.3806428909301758], + [1.6694647073745728, 2.6383073329925537], + [-2.347407579421997, 2.4813344478607178], + [2.0509848594665527, 6.1490278244018555], + [0.010895125567913055, 9.503076553344727], + [3.269685745239258, -8.396102905273438], + [-5.3706440925598145, 3.635080575942993], + [2.1318628787994385, 4.148743629455566], + [7.076284885406494, -6.064081192016602], + [-2.5547940731048584, 2.739818811416626], + [-3.9599812030792236, 4.125108242034912], + [-3.7488620281219482, 6.100454330444336], + [-1.6129127740859985, 1.334904670715332], + [4.39356803894043, 5.878650665283203], + [-2.0364573001861572, -1.9924448728561401], + [-4.003972053527832, -1.9376463890075684], + [-3.382676839828491, -4.631313800811768], + [10.484107971191406, -2.6315314769744873], + [-1.8793253898620605, 3.6850929260253906], + [-4.916846752166748, -7.8582258224487305], + [1.4837294816970825, -0.18442945182323456], + [1.5388643741607666, -7.89193868637085], + [-3.625584125518799, -5.963301658630371], + [-0.562278687953949, 1.0175594091415405], + [0.4033507704734802, -1.097853422164917], + [-4.845757007598877, -2.9944007396698], + [7.808122158050537, -2.186683416366577], + [-4.43953800201416, 4.971073627471924], + [-4.475301265716553, -5.9032697677612305], + [5.784887313842773, -4.211802005767822], + [-0.054958052933216095, 9.09019660949707], + [8.242588996887207, -2.6054484844207764], + [-6.166092395782471, 0.24394452571868896], + [0.19974321126937866, 10.817092895507812], + [3.1115031242370605, -3.6955959796905518], + [-3.1122074127197266, -5.844357490539551], + [3.5026464462280273, -3.892986536026001], + [3.0009262561798096, 7.783979415893555], + [3.074777841567993, 6.081182479858398], + [-4.593404293060303, -0.04748201742768288], + [-5.887244701385498, 5.206463813781738], + [2.345235824584961, -8.880196571350098], + [-1.159375786781311, 0.5148219466209412], + [-4.5959906578063965, -0.5399476885795593], + [2.2224373817443848, 2.2380311489105225], + [2.167694330215454, 3.930752992630005], + [-0.06515640765428543, 13.651191711425781], + [3.5253803730010986, -3.263045072555542], + [-2.6588294506073, 4.860527992248535], + [0.022863857448101044, 9.433238983154297], + [-1.1304893493652344, -0.2882893979549408], + [1.1308085918426514, 4.938097953796387], + [-0.5892651081085205, -0.942513108253479], + [4.278589725494385, 1.8658229112625122], + [-5.14419412612915, -4.250552177429199], + [-4.666959762573242, -0.8428119421005249], + [-4.560530662536621, -6.230781555175781], + [1.9786593914031982, -7.333578109741211], + [0.7462157011032104, -0.8955228924751282], + [0.0282854363322258, 12.208786010742188], + [1.9755284786224365, 2.9392120838165283], + [3.32677960395813, -5.314002513885498], + [7.675313949584961, -5.509090423583984], + [4.7548956871032715, -3.275651216506958], + [0.22526219487190247, -0.6811850666999817], + [2.5063865184783936, 1.6637438535690308], + [-0.08355862647294998, 0.7745280861854553], + [-4.589475631713867, -2.712818145751953], + [-2.5703442096710205, -4.078022003173828], + [8.240534782409668, -2.3103623390197754], + [3.051255941390991, -3.221029043197632], + [-3.6071345806121826, 6.9539337158203125], + [3.013720750808716, 5.606666564941406], + [-0.000538654625415802, 10.28837776184082], + [3.801614284515381, -0.6849710941314697], + [5.566064834594727, -2.987914800643921], + [6.580715656280518, 8.035221099853516], + [-0.49778369069099426, 1.2802587747573853], + [-4.273304462432861, -7.176131248474121], + [3.048081159591675, -4.304477691650391], + [9.707390785217285, -2.3853983879089355], + [-7.033846378326416, 8.239133834838867], + [4.366325855255127, -3.5596671104431152], + [2.08595871925354, -8.182927131652832], + [1.0698621273040771, -6.430047988891602], + [2.47367000579834, 0.42452940344810486], + [7.379993915557861, -2.9186623096466064], + [0.25913554430007935, 12.267926216125488], + [3.6235897541046143, -3.6359939575195312], + [-5.834377765655518, -0.9942237734794617], + [-3.2373507022857666, 3.2535712718963623], + [-0.5779826641082764, -1.8649159669876099], + [3.653442621231079, -5.440988063812256], + [2.0502679347991943, 1.1737571954727173], + [9.136831283569336, -2.3296430110931396], + [2.1745645999908447, 5.965509414672852], + [3.417497396469116, -5.402554512023926], + [7.673929691314697, -2.5635786056518555], + [-2.0538456439971924, 5.401355743408203], + [2.502058744430542, -3.739046335220337], + [7.361886978149414, -2.3135054111480713], + [-2.3545613288879395, -3.7177975177764893], + [-5.071742534637451, 5.953319549560547], + [3.438495397567749, -4.25393009185791], + [5.760021209716797, -1.386958122253418], + [-4.632095813751221, -7.581632614135742], + [-4.40104866027832, -6.543464183807373], + [-2.6672303676605225, 2.631058931350708], + [3.232215166091919, 1.00312340259552], + [-2.6748569011688232, -5.221006393432617], + [5.466914653778076, -3.1022865772247314], + [3.520200490951538, -4.992954254150391], + [0.15625613927841187, 11.823752403259277], + [1.6123530864715576, 0.4328610897064209], + [-5.739842891693115, -0.6633754968643188], + [0.007265739142894745, 12.07536506652832], + [-4.956534385681152, -5.155488014221191], + [7.41740083694458, -4.914010524749756], + [1.8268946409225464, -0.1992778480052948], + [1.7130084037780762, 2.9298760890960693], + [1.0946722030639648, -7.321624279022217], + [2.9693410396575928, -2.960749864578247], + [1.9329969882965088, 1.9414712190628052], + [2.127929925918579, 2.4579529762268066], + [5.774689674377441, -2.839561939239502], + [-2.5092790126800537, 2.432518720626831], + [3.048945903778076, 6.8938398361206055], + [-3.7775042057037354, -5.929759979248047], + [1.4541239738464355, 2.939891815185547], + [8.97474479675293, -2.3635125160217285], + [2.348259449005127, 5.889215469360352], + [-2.4004054069519043, -0.18524599075317383], + [-4.436824321746826, -6.4667253494262695], + [0.1214243695139885, 9.844324111938477], + [0.3790329098701477, 11.667610168457031], + [-2.761280059814453, 2.5956501960754395], + [-2.2744557857513428, 1.6075811386108398], + [4.783432483673096, -1.311335802078247], + [-5.106393337249756, -3.2166266441345215], + [3.14379620552063, -4.482945442199707], + [4.507656574249268, -1.651513934135437], + [2.1730730533599854, 5.016583442687988], + [3.1085383892059326, -8.002498626708984], + [3.053945779800415, -2.8342535495758057], + [5.209300994873047, -1.761064052581787], + [2.2215921878814697, 3.8954060077667236], + [6.712333679199219, 8.457261085510254], + [-4.634801387786865, 3.6997406482696533], + [5.153554439544678, 7.326351642608643], + [7.649351596832275, -2.045168161392212], + [-0.06733054667711258, 13.233078002929688], + [0.1693190336227417, 11.051852226257324], + [-2.1800177097320557, 2.960153818130493], + [3.6497514247894287, -5.433593273162842], + [1.829329252243042, 4.681170463562012], + [2.835310935974121, -4.033490180969238], + [8.028304100036621, -1.9423059225082397], + [6.3667826652526855, -4.739973068237305], + [6.021658420562744, 7.631633758544922], + [7.436354160308838, -2.3564560413360596], + [3.349344253540039, -7.202397346496582], + [0.3414444327354431, 11.453845977783203], + [-0.03442896157503128, 12.889854431152344], + [-2.2205593585968018, 2.8888890743255615], + [3.497509241104126, 0.6574144959449768], + [0.09862958639860153, 11.408405303955078], + [1.4056960344314575, -7.176843643188477], + [1.3897895812988281, 0.48704731464385986], + [-4.1046319007873535, -6.695603370666504], + [2.613863229751587, -7.711967468261719], + [-5.674476146697998, -0.9334592819213867], + [2.5146548748016357, 5.730036735534668], + [-6.113258361816406, -1.1208157539367676], + [-5.596334934234619, -1.657496690750122], + [2.6943249702453613, -3.7367613315582275], + [0.060076646506786346, 9.68187141418457], + [3.8758366107940674, -3.346492290496826], + [5.534297943115234, -1.16683030128479], + [1.0166785717010498, 4.885342121124268], + [0.20069020986557007, 11.291833877563477], + [-2.604466199874878, -4.906485557556152], + [-3.918510675430298, 3.988774061203003], + [-3.375969171524048, -3.3114278316497803], + [6.083583831787109, -1.4202817678451538], + [2.3245649337768555, -1.4170875549316406], + [8.342972755432129, -2.2244865894317627], + [7.108373165130615, -1.6777704954147339], + [-3.491295099258423, 0.25682204961776733], + [0.2143273949623108, 9.870662689208984], + [-2.229247808456421, 2.5060296058654785], + [1.3184542655944824, 0.44787144660949707], + [10.962098121643066, -2.5378758907318115], + [3.0526435375213623, -4.356080532073975], + [6.890499591827393, -2.566614866256714], + [-3.0778439044952393, 4.543042182922363], + [6.099402904510498, 8.022916793823242], + [4.961777210235596, -4.3175883293151855], + [6.486470699310303, -2.78035831451416], + [-4.763842582702637, 3.542503833770752], + [2.29909348487854, -7.516153335571289], + [-4.779088497161865, 6.322423934936523], + [4.158702373504639, 6.933680534362793], + [-0.019858263432979584, -1.3849340677261353], + [-0.011583156883716583, 13.680559158325195], + [-1.4259673357009888, -3.4192068576812744], + [0.981472909450531, -6.221386909484863], + [5.2125654220581055, -4.646747589111328], + [-2.885270833969116, -4.97526216506958], + [4.773364543914795, 7.221612930297852], + [6.897267818450928, -5.277552604675293], + [-2.8654963970184326, -2.787602186203003], + [-4.079798698425293, 4.188401699066162], + [6.107805252075195, 7.752394676208496], + [8.49388313293457, -2.360248565673828], + [-4.57921838760376, 2.093585252761841], + [-2.2717387676239014, 2.4434168338775635], + [7.078794956207275, -1.4535315036773682], + [2.435542345046997, 3.796494483947754], + [-7.3670220375061035, 2.478802442550659], + [3.128509998321533, 6.925446033477783], + [-4.052660942077637, -6.508413314819336], + [-1.0048555135726929, 1.3184456825256348], + [3.7815744876861572, -4.394455909729004], + [-4.2112603187561035, -6.431674480438232], + [6.335059642791748, -1.4477425813674927], + [2.6455605030059814, 0.6669281125068665], + [1.3877849578857422, -6.74704647064209], + [8.657711029052734, -2.3033716678619385], + [-1.7122979164123535, 2.369035005569458], + [5.048019886016846, -5.26668643951416], + [0.6378281712532043, -4.654658317565918], + [-0.07120222598314285, 13.868600845336914], + [-2.209500551223755, -3.240469455718994], + [-6.069298267364502, 6.633376121520996], + [-4.420268535614014, -6.93887996673584], + [-3.962644338607788, -6.293912887573242], + [9.727984428405762, -2.3597729206085205], + [3.0449624061584473, 6.011791229248047], + [-7.329587459564209, 0.09300816059112549], + [2.6854166984558105, 3.5739614963531494], + [3.139293670654297, 1.4488056898117065], + [1.2066926956176758, 6.622352600097656], + [5.0660719871521, -2.2214467525482178], + [-5.284727096557617, -3.1781747341156006], + [-0.6496818661689758, 0.22400805354118347], + [-2.3661468029022217, -3.4604690074920654], + [-1.2430431842803955, 1.6948083639144897], + [-4.341131210327148, 5.553000450134277], + [7.84092903137207, -1.552371621131897], + [-1.7336219549179077, -1.2876427173614502], + [3.5349528789520264, 1.9432984590530396], + [3.267547369003296, 2.164102077484131], + [5.685990333557129, 7.829916477203369], + [3.634343385696411, 6.259311199188232], + [-4.9375786781311035, 5.0891313552856445], + [-2.0201785564422607, 2.3182666301727295], + [3.8112282752990723, 6.208508491516113], + [5.876801490783691, -1.2840763330459595], + [1.7922394275665283, 5.404750823974609], + [2.6787636280059814, -3.900379180908203], + [-0.011546559631824493, 13.170103073120117], + [-5.443833827972412, 5.515655517578125], + [1.2697566747665405, 4.66472864151001], + [-4.857168197631836, 5.804553508758545], + [-5.7654128074646, 7.659334182739258], + [-2.7722365856170654, -3.79435658454895], + [4.6400299072265625, 7.096656322479248], + [1.4184633493423462, 1.7141882181167603], + [2.841071844100952, -8.1890287399292], + [-3.1594483852386475, -2.6937644481658936], + [3.7707808017730713, 1.6114743947982788], + [-2.8468282222747803, 2.0414559841156006], + [-3.5477406978607178, -6.145148277282715], + [3.645869016647339, 1.5186325311660767], + [-3.4490292072296143, -6.099496841430664], + [0.8893594741821289, -5.540433406829834], + [-3.356072425842285, -4.319263458251953], + [8.840636253356934, -2.2912425994873047], + [1.566321611404419, -6.915392875671387], + [2.981013059616089, 6.516134738922119], + [-2.106107234954834, 2.3275086879730225], + [7.064725875854492, -1.7981477975845337], + [3.663745880126953, -4.366556167602539], + [-4.848268508911133, -2.3954012393951416], + [1.975844383239746, 0.32499960064888], + [0.01195865124464035, 12.144379615783691], + [-4.883951663970947, -0.6363037824630737], + [-3.7934606075286865, -2.797368049621582], + [-6.549990177154541, 7.687945365905762], + [-1.8311131000518799, -4.890201091766357], + [-1.2158246040344238, -3.9214510917663574], + [2.9611568450927734, 6.447474002838135], + [3.6307804584503174, -3.5817501544952393], + [2.21684193611145, 4.8629889488220215], + [3.586257219314575, -7.7025604248046875], + [3.253810167312622, -4.65427303314209], + [7.256725311279297, -1.6283015012741089], + [2.3510701656341553, -1.9227969646453857], + [4.0080885887146, -7.545126438140869], + [-1.2765759229660034, 1.873613715171814], + [-2.449103832244873, 2.2535438537597656], + [6.211058139801025, 7.879436492919922], + [0.5603432059288025, 6.057990074157715], + [-1.3983498811721802, 1.8900487422943115], + [-2.2125508785247803, -3.783517837524414], + [9.136445045471191, -2.529127836227417], + [3.2789063453674316, -3.8255698680877686], + [-1.574371576309204, 0.6732193827629089], + [8.14574909210205, -2.1562747955322266], + [-3.7792437076568604, -5.848237037658691], + [2.015169382095337, 4.374631881713867], + [2.181663751602173, -4.499422073364258], + [-6.094429969787598, 6.900031089782715], + [4.929811477661133, -4.633111476898193], + [1.9555597305297852, 3.0256154537200928], + [0.448722779750824, -3.4205973148345947], + [9.745831489562988, -2.349701166152954], + [0.2090476155281067, 10.940853118896484], + [-1.9080140590667725, -0.19338500499725342], + [9.117862701416016, -2.456104278564453], + [3.3773930072784424, -2.3789725303649902], + [1.051009178161621, 5.8271050453186035], + [-2.6084282398223877, 1.9127840995788574], + [-6.053778648376465, 5.940566539764404], + [-5.399443626403809, 5.453176498413086], + [3.608189821243286, -3.1698100566864014], + [2.132780075073242, 1.4536207914352417], + [0.20581132173538208, 11.070758819580078], + [8.680471420288086, -2.346539258956909], + [0.22726881504058838, 11.083841323852539], + [4.698008060455322, -1.8050190210342407], + [-4.4995036125183105, -6.555710792541504], + [3.8519787788391113, -4.022428035736084], + [-4.316225528717041, 4.4876179695129395], + [-2.0861401557922363, 2.324030637741089], + [-7.684016704559326, -0.4764591455459595], + [0.30695903301239014, 11.447336196899414], + [-4.819620609283447, 5.682615756988525], + [-5.287606716156006, -4.156710147857666], + [-5.812493324279785, 6.2158660888671875], + [0.2374400496482849, 9.272098541259766], + [6.212831497192383, -5.281002998352051], + [-1.8169254064559937, 1.295727252960205], + [3.16471004486084, -4.9481048583984375], + [2.4028992652893066, -3.1228816509246826], + [3.663965940475464, -2.86609148979187], + [0.22640424966812134, 11.18368148803711], + [0.259982168674469, 5.475949764251709], + [-2.3295857906341553, 2.889826774597168], + [-2.9637112617492676, -3.0365326404571533], + [5.400395393371582, -1.8962377309799194], + [6.429910659790039, 7.8242998123168945], + [6.439934253692627, -1.4276500940322876], + [-0.003441639244556427, 11.859004974365234], + [2.1326682567596436, 5.032198429107666], + [3.178894281387329, -8.444351196289062], + [-2.583618402481079, 0.32829487323760986], + [-2.47943377494812, 2.03605318069458], + [0.024909906089305878, 12.897071838378906], + [-5.2653679847717285, -0.24980688095092773], + [-3.082298517227173, 1.4052422046661377], + [-5.101571559906006, -0.44272780418395996], + [-0.02961570769548416, 9.780698776245117], + [3.750415802001953, -8.377748489379883], + [2.6037893295288086, 1.318278193473816], + [-1.9848839044570923, 2.3950791358947754], + [5.526103973388672, -2.4969003200531006], + [0.054012082517147064, -1.2620055675506592], + [1.4507334232330322, -0.18775618076324463], + [7.307270050048828, -2.706207513809204], + [7.245375156402588, 8.74630355834961], + [-3.6782333850860596, -2.638084650039673], + [-2.754112958908081, -5.248310089111328], + [9.835740089416504, -2.406092643737793], + [-5.548980236053467, 6.138808727264404], + [5.443122386932373, -2.9558746814727783], + [3.207350492477417, -6.669233322143555], + [-7.017502307891846, 2.7518210411071777], + [3.4058852195739746, -4.852932929992676], + [3.4849159717559814, -7.088617324829102], + [7.28397274017334, -1.7313746213912964], + [-2.4648778438568115, -1.3081268072128296], + [-3.521749258041382, -2.8590550422668457], + [1.1441224813461304, -6.353146553039551], + [-5.8215765953063965, 6.548341274261475], + [-3.862226724624634, -0.9277884364128113], + [7.0364789962768555, -3.575247287750244], + [3.768585205078125, -3.7383949756622314], + [3.796376943588257, 6.528365135192871], + [-3.961996555328369, -0.4558127522468567], + [-7.3665595054626465, -0.8200381398200989], + [7.674429416656494, -2.1985208988189697], + [3.1410396099090576, -4.42857027053833], + [2.2605481147766113, 2.5848543643951416], + [3.4036481380462646, 1.0940368175506592], + [4.213397979736328, -3.1844022274017334], + [-6.357235431671143, 0.29897719621658325], + [-0.007639236748218536, 12.416254043579102], + [0.14508450031280518, 11.776941299438477], + [0.32879117131233215, -0.5605299472808838], + [3.3597726821899414, -5.524928092956543], + [2.70892596244812, -0.1428939402103424], + [3.2598767280578613, 5.637067794799805], + [10.246261596679688, -2.512493848800659], + [4.221415996551514, 6.226863384246826], + [3.686690092086792, -5.498529434204102], + [-4.535000324249268, 1.7162771224975586], + [-0.9026657342910767, 3.8356611728668213], + [0.9815056920051575, 12.19471549987793], + [-4.635418891906738, -7.240334510803223], + [-1.036025047302246, -1.41728675365448], + [6.388843059539795, 7.9774322509765625], + [9.85486125946045, -2.4259331226348877], + [2.071272611618042, -7.659549713134766], + [3.119807004928589, -8.639209747314453], + [-2.1457321643829346, 2.53039813041687], + [0.3319658637046814, 10.885025978088379], + [4.112547397613525, -3.626826047897339], + [9.085257530212402, -2.352627992630005], + [-3.5169761180877686, -2.4833781719207764], + [7.77406120300293, -1.8868311643600464], + [8.479011535644531, -2.23258376121521], + [2.983750820159912, -7.87005615234375], + [-2.508986473083496, 1.9369480609893799], + [-2.1507668495178223, 2.795597553253174], + [-0.31642696261405945, -1.8999558687210083], + [-0.6601487398147583, -1.8781565427780151], + [3.10184907913208, -2.720409870147705], + [3.4933407306671143, 6.851239204406738], + [-5.3225274085998535, 4.900803089141846], + [-4.447081089019775, -5.32889986038208], + [-2.297642230987549, 2.2246105670928955], + [-2.3684651851654053, 1.1722651720046997], + [3.0618371963500977, -4.248769760131836], + [-2.4394891262054443, 2.362410545349121], + [-2.8455512523651123, -2.712045431137085], + [5.253502368927002, 6.581127166748047], + [2.74267840385437, 3.1102592945098877], + [3.2794315814971924, 1.4083300828933716], + [-6.492507457733154, 7.453176498413086], + [-4.0133538246154785, 5.1533308029174805], + [2.528717517852783, -7.989147186279297], + [-3.006136894226074, 1.6989723443984985], + [0.08138947933912277, 11.246593475341797], + [-1.866113305091858, -3.9712111949920654], + [5.673913478851318, -1.4108669757843018], + [5.9822773933410645, 7.344270706176758], + [1.3170866966247559, -7.562951564788818], + [3.562250852584839, -7.3525004386901855], + [-0.4362351894378662, -1.205531120300293], + [-3.1343793869018555, -0.43622416257858276], + [2.979999303817749, -4.185057640075684], + [2.1288092136383057, 3.3898074626922607], + [0.6569293141365051, -0.9522684812545776], + [-4.879030704498291, 2.2705154418945312], + [-5.657926082611084, -2.157052516937256], + [-3.6922895908355713, -5.721188068389893], + [2.07523775100708, -7.513073444366455], + [8.0357084274292, -2.163892984390259], + [0.17517775297164917, 10.802164077758789], + [1.992516040802002, -7.9084882736206055], + [2.7306439876556396, -8.008214950561523], + [5.645103454589844, -1.0548958778381348], + [-4.854695796966553, -7.565000534057617], + [3.385772466659546, -3.5610601902008057], + [-2.514516830444336, 1.4387779235839844], + [9.80115795135498, -2.478591203689575], + [10.359231948852539, -2.392728567123413], + [6.76578950881958, 8.505003929138184], + [-1.798384666442871, -3.9039306640625], + [-4.59038782119751, -6.701501369476318], + [2.3680992126464844, -6.6878461837768555], + [-2.799548625946045, -5.080791473388672], + [-1.7988160848617554, -0.6948838233947754], + [2.3789052963256836, 4.185084819793701], + [5.82844877243042, 8.00193977355957], + [7.395349979400635, 9.107100486755371], + [-4.779111862182617, 4.118391513824463], + [0.03734510391950607, 8.749589920043945], + [-1.9502332210540771, 0.24400654435157776], + [-4.619091510772705, 5.5178022384643555], + [0.056140415370464325, 12.759157180786133], + [-4.219340801239014, -6.658036231994629], + [6.181675434112549, -5.20176887512207], + [3.4658210277557373, -6.8480095863342285], + [0.9265236258506775, 0.5991413593292236], + [-5.2838616371154785, -5.72738790512085], + [4.404062747955322, -3.6952781677246094], + [2.2061731815338135, 3.418266773223877], + [3.1916770935058594, -4.493824005126953], + [-4.5904974937438965, -2.89066481590271], + [6.600975036621094, -2.835430860519409], + [-3.0112788677215576, -5.270892143249512], + [4.5328145027160645, -8.821197509765625], + [-2.7701375484466553, -4.2322998046875], + [-3.1082026958465576, -0.6234191656112671], + [0.04621713608503342, 12.309677124023438], + [3.6079587936401367, 6.283889293670654], + [-2.0672433376312256, 2.4742372035980225], + [3.623664617538452, -6.667978286743164], + [8.585375785827637, -2.442960500717163], + [0.05354063957929611, 12.720047950744629], + [-4.469193458557129, -6.755792617797852], + [-2.1965625286102295, 2.4065539836883545], + [2.249032497406006, 5.528040885925293], + [-3.7033512592315674, -5.026053428649902], + [-5.162148952484131, -3.8044168949127197], + [-4.272064208984375, -2.9898903369903564], + [5.304036617279053, 7.816323280334473], + [3.783348560333252, -7.537644386291504], + [1.4416017532348633, -7.602614879608154], + [0.1856784224510193, 10.407411575317383], + [-2.2969250679016113, 2.235116720199585], + [-4.100127696990967, -0.9740355014801025], + [0.19325941801071167, 10.608840942382812], + [7.335255146026611, -1.9694730043411255], + [1.1390929222106934, -0.3613629937171936], + [-4.4085774421691895, 7.227602005004883], + [0.34163349866867065, 10.294363021850586], + [1.638944149017334, 6.243895053863525], + [-2.7207248210906982, 2.1296565532684326], + [3.1138298511505127, -2.0666282176971436], + [-2.0002732276916504, -1.309708833694458], + [3.18111252784729, -7.274360656738281], + [8.284947395324707, -2.1884357929229736], + [6.641598701477051, 8.433135986328125], + [4.728209018707275, 6.429821014404297], + [2.8056640625, -5.3682050704956055], + [1.9692535400390625, 4.3655195236206055], + [-2.767151117324829, -5.5997700691223145], + [3.118053436279297, -4.449713230133057], + [-0.9550960659980774, -0.4711467921733856], + [-1.9990208148956299, 2.7558023929595947], + [-2.079585075378418, -0.09348154067993164], + [3.7173333168029785, -7.71638298034668], + [4.291043281555176, 1.883568525314331], + [-1.6727290153503418, 1.7035528421401978], + [-1.7962703704833984, -3.3615882396698], + [2.922806978225708, -4.099359035491943], + [3.1973936557769775, -4.533430576324463], + [-2.046677350997925, 2.6506175994873047], + [2.279869318008423, -8.944663047790527], + [-5.5490899085998535, 3.6060049533843994], + [7.896121501922607, -2.683192491531372], + [0.020589880645275116, 12.892654418945312], + [-6.785286903381348, 7.687492847442627], + [-5.120739459991455, 4.792677402496338], + [-3.074195623397827, -2.726384162902832], + [-2.78173565864563, 2.242201805114746], + [-4.737025737762451, 5.041402339935303], + [3.534764289855957, 6.240394592285156], + [0.9652743935585022, -0.8219782114028931], + [-5.054124355316162, -3.177994966506958], + [0.0268435999751091, 12.59665298461914], + [1.8385288715362549, -7.930047988891602], + [-5.345122814178467, 0.9855194091796875], + [-3.293832540512085, -2.5253026485443115], + [-5.558827877044678, -0.962654709815979], + [3.858788251876831, 5.5847015380859375], + [-4.509966850280762, -6.231662750244141], + [0.016341499984264374, 12.340617179870605], + [3.96610426902771, 1.5859272480010986], + [-3.197087049484253, 3.381068229675293], + [7.312283992767334, -3.9876482486724854], + [-2.2711918354034424, 1.1540405750274658], + [7.435739994049072, -1.780866026878357], + [-3.005990505218506, 0.9160501956939697], + [3.2304635047912598, -3.6891722679138184], + [-0.5640575289726257, 0.979778528213501], + [-5.615360736846924, -0.07517266273498535], + [0.042405419051647186, 12.029850006103516], + [-1.9302843809127808, 2.4592177867889404], + [-2.2980358600616455, 2.389716863632202], + [3.1196935176849365, -1.8697820901870728], + [-0.25536930561065674, -1.4796364307403564], + [1.498772382736206, 2.0559685230255127], + [3.99526047706604, -4.762051582336426], + [8.47375202178955, -2.2877132892608643], + [-3.948580503463745, -5.416989326477051], + [11.588958740234375, -2.569979190826416], + [-0.6599472165107727, -2.391913652420044], + [5.990725040435791, -1.6092420816421509], + [-2.2910969257354736, 1.9819079637527466], + [-6.157347202301025, 7.137284278869629], + [-7.530616283416748, 8.63797664642334], + [2.9687116146087646, -5.537515640258789], + [-3.860921621322632, -3.24059796333313], + [-3.0395357608795166, -2.8140275478363037], + [5.497154712677002, -1.2239874601364136], + [-4.676058292388916, -6.899347305297852], + [-5.723108768463135, 7.396218299865723], + [0.6090404391288757, -5.837111473083496], + [3.953540086746216, -3.6646409034729004], + [-3.0330312252044678, 5.226865768432617], + [8.3936185836792, -2.2229115962982178], + [5.003706455230713, -3.374843120574951], + [-1.9857385158538818, 2.3718347549438477], + [4.075776100158691, -3.709944486618042], + [-5.989409923553467, 4.936403751373291], + [3.734682559967041, 0.7903623580932617], + [-6.431374549865723, -1.586772084236145], + [-5.035410404205322, 8.170841217041016], + [2.7071354389190674, -6.063270568847656], + [-4.346825122833252, -4.1591715812683105], + [-4.3026323318481445, 6.7190704345703125], + [-0.033901043236255646, 12.803207397460938], + [3.0784244537353516, -5.562320709228516], + [2.600458860397339, -0.5404320359230042], + [-4.44025993347168, -6.474654674530029], + [-6.742974758148193, 8.573663711547852], + [-2.1612420082092285, -4.186662673950195], + [3.792903184890747, 1.2951689958572388], + [-0.3497673571109772, -1.6187571287155151], + [-7.1282548904418945, -1.8811341524124146], + [-2.1422228813171387, 2.448862314224243], + [8.026551246643066, -2.235443353652954], + [-2.3228328227996826, 0.9667630195617676], + [0.14885270595550537, 11.817142486572266], + [-7.711340427398682, 9.053656578063965], + [6.969974994659424, -1.7573683261871338], + [-3.5437042713165283, -1.7007805109024048], + [0.018935315310955048, 12.182092666625977], + [-4.5669965744018555, 8.014839172363281], + [-4.629603862762451, -6.34403133392334], + [-4.573017597198486, -6.986695766448975], + [6.990870952606201, -1.5087388753890991], + [-2.4215991497039795, 1.6017862558364868], + [0.2976546287536621, 12.290654182434082], + [-5.568701267242432, 2.5891783237457275], + [5.897765636444092, -6.103764057159424], + [3.6412737369537354, 1.341539740562439], + [4.62055778503418, 0.42804357409477234], + [-3.1826350688934326, -4.849799156188965], + [-2.357077121734619, 2.187054395675659], + [2.3345248699188232, -7.819840431213379], + [1.4033207893371582, 5.35244607925415], + [-7.659927845001221, -0.25568878650665283], + [-4.163913726806641, -5.964747428894043], + [-2.184220314025879, 2.184786796569824], + [-3.1348624229431152, -4.884923458099365], + [-4.877013683319092, -7.677090644836426], + [2.9969072341918945, -4.271785736083984], + [9.7249174118042, -2.4197800159454346], + [-4.498880863189697, 4.320548057556152], + [7.035722732543945, 8.476526260375977], + [-3.384897470474243, -2.3850834369659424], + [5.188755512237549, 7.0478105545043945], + [4.968263149261475, 6.675556182861328], + [2.940237045288086, -4.075137138366699], + [1.1636197566986084, 0.8557042479515076], + [6.650099754333496, 8.343233108520508], + [-4.071697235107422, 4.334239482879639], + [4.263798713684082, -3.6888628005981445], + [-6.103281497955322, 7.390909671783447], + [-0.031311340630054474, 13.10112190246582], + [-4.08615255355835, -1.7369251251220703], + [6.671244144439697, -2.7145235538482666], + [-0.3430768549442291, -2.0093069076538086], + [-4.9658637046813965, -2.4244964122772217], + [-4.8864359855651855, -3.484872579574585], + [2.5131070613861084, -6.937920570373535], + [0.5191691517829895, 11.120742797851562], + [3.2253828048706055, 6.914270401000977], + [-6.060847282409668, 7.518333435058594], + [3.7925918102264404, 1.5285011529922485], + [3.3487765789031982, -5.856827735900879], + [2.8050215244293213, 2.1386873722076416], + [-5.835824489593506, 6.179321765899658], + [-5.605990886688232, -1.1279070377349854], + [0.23360228538513184, 10.978307723999023], + [-4.245143413543701, 6.216515064239502], + [-6.936500072479248, 8.603833198547363], + [-6.263441562652588, 6.458942413330078], + [-4.775094509124756, 5.113129138946533], + [6.097225666046143, -1.3619670867919922], + [-1.827767252922058, -4.668902397155762], + [-3.569793224334717, -5.923754692077637], + [-2.1696062088012695, 1.9003673791885376], + [2.394625663757324, 5.326394081115723], + [-5.167975902557373, -6.959511756896973], + [-6.409087657928467, 7.3883209228515625], + [-4.48021936416626, -5.262967586517334], + [4.938303470611572, 6.250419616699219], + [-4.175050258636475, -6.796393871307373], + [2.2474782466888428, 5.635549068450928], + [0.6810842156410217, 1.0609911680221558], + [-3.14206862449646, 6.470948219299316], + [-2.0785417556762695, 1.1203776597976685], + [-0.6737741827964783, -0.9455828666687012], + [2.012366533279419, 5.102161407470703], + [1.0515758991241455, 4.675290107727051], + [-4.062982082366943, -6.46733283996582], + [2.7217652797698975, -7.551863670349121], + [0.29054856300354004, -0.3594271242618561], + [-5.16189432144165, 0.6250115633010864], + [8.787911415100098, -2.311589241027832], + [1.4675168991088867, -0.036918316036462784], + [-5.165236949920654, 0.06020664796233177], + [2.6509413719177246, -3.6149144172668457], + [2.481139898300171, -8.191375732421875], + [-2.194059133529663, 2.64921498298645], + [1.4502252340316772, -6.949374198913574], + [4.530473232269287, 6.765091896057129], + [3.1154403686523438, -4.435786247253418], + [0.1570715308189392, 13.580215454101562], + [0.2264082133769989, -1.2946635484695435], + [3.113842487335205, -3.9433610439300537], + [8.010848045349121, -2.0979692935943604], + [0.22013622522354126, 10.703760147094727], + [-4.5001678466796875, -6.225091934204102], + [-5.378493309020996, 6.332996368408203], + [-0.18472179770469666, -1.7455376386642456], + [-5.164304256439209, -2.584282159805298], + [-4.384677410125732, -6.523453235626221], + [-1.9084422588348389, -4.495253562927246], + [-0.430985689163208, -2.003368854522705], + [5.789013862609863, 7.865105152130127], + [-3.995238780975342, -6.410118103027344], + [2.82057785987854, -7.786344528198242], + [-6.900501728057861, -0.7138872146606445], + [-1.2801148891448975, -0.3725626766681671], + [5.742117881774902, -1.1912606954574585], + [0.05395471304655075, 5.41668701171875], + [-4.120761394500732, -2.3662688732147217], + [-1.892196536064148, 1.192570686340332], + [-2.054617166519165, 2.2541701793670654], + [-6.7466721534729, 7.72485876083374], + [6.190506458282471, -3.4255192279815674], + [-4.6472649574279785, 4.63311767578125], + [-2.7952120304107666, -4.101120948791504], + [11.25259017944336, -2.615250825881958], + [-2.1917226314544678, -3.995849847793579], + [0.39717912673950195, 11.186298370361328], + [-2.019237756729126, 2.274686336517334], + [5.031930446624756, 6.983821868896484], + [4.762937068939209, 6.679917335510254], + [1.7923825979232788, 1.379376769065857], + [2.406780481338501, -3.160297155380249], + [-4.666904926300049, -5.663511276245117], + [-0.04604662209749222, 9.237354278564453], + [-2.0302734375, -3.0517959594726562], + [4.042126178741455, -4.389443397521973], + [-3.5229461193084717, 6.742645263671875], + [-1.4399478435516357, -1.721847653388977], + [-2.357198476791382, -3.552741289138794], + [-4.578395843505859, -3.991530418395996], + [-2.997253656387329, -1.077069640159607], + [5.307864665985107, -4.328463554382324], + [-4.342822551727295, 6.645750999450684], + [3.843261241912842, -3.714878797531128], + [-2.1864523887634277, 2.4886903762817383], + [-1.816926121711731, 0.34378179907798767], + [8.18300724029541, -2.2365245819091797], + [-4.923802852630615, 1.919816255569458], + [3.1277706623077393, -4.414609432220459], + [-4.418310165405273, 5.799128532409668], + [-4.189624309539795, -3.591292381286621], + [7.414649486541748, -4.133119106292725], + [0.2895200848579407, 11.442094802856445], + [4.395029544830322, -4.057770729064941], + [-6.0771870613098145, -1.478705883026123], + [4.7115912437438965, -1.8938833475112915], + [-6.483076572418213, 0.34591710567474365], + [2.4376139640808105, -3.4614851474761963], + [2.9410665035247803, -7.148979187011719], + [-0.2825571596622467, -1.6051081418991089], + [-4.263523578643799, -6.579425811767578], + [-5.174269199371338, 4.931003093719482], + [2.4706170558929443, 5.248468399047852], + [9.607024192810059, -2.3938467502593994], + [2.7075693607330322, 2.3062384128570557], + [-2.5157129764556885, 1.9736508131027222], + [1.867802619934082, 2.2495384216308594], + [3.314025640487671, -8.352354049682617], + [-1.8865708112716675, 2.260516405105591], + [-0.809998631477356, 1.0000003576278687], + [7.151866436004639, -2.476050615310669], + [-1.9233882427215576, 2.588634490966797], + [-4.4784393310546875, -5.894861698150635], + [3.32218861579895, -9.369063377380371], + [-2.4841392040252686, 2.234675168991089], + [4.180326461791992, -5.604598522186279], + [-4.191654682159424, -3.3790085315704346], + [-2.9000349044799805, -4.633716583251953], + [-4.7255539894104, -1.9671419858932495], + [-3.076852560043335, -2.4977974891662598], + [3.8150928020477295, -3.483290433883667], + [-2.848363161087036, 1.8671456575393677], + [-3.600553035736084, 3.4721009731292725], + [6.644388675689697, -1.4366028308868408], + [2.7917983531951904, 6.488677501678467], + [-2.35451078414917, -1.4685879945755005], + [3.6135919094085693, -5.712038993835449], + [9.714985847473145, -2.4575507640838623], + [2.2267637252807617, 4.883196830749512], + [0.21775442361831665, 11.892229080200195], + [7.612298488616943, -2.1718814373016357], + [-4.060542106628418, 4.717404842376709], + [6.62468957901001, -1.8881875276565552], + [2.633103132247925, -8.961328506469727], + [8.035335540771484, -2.027935028076172], + [-1.1642920970916748, 1.698431372642517], + [1.4374620914459229, 1.3381699323654175], + [-0.4057842195034027, -1.8401135206222534], + [3.470404624938965, -3.307997465133667], + [-4.664474010467529, -6.841095447540283], + [7.004881858825684, -1.47819983959198], + [3.4233577251434326, -3.011859655380249], + [2.827758550643921, 0.9012527465820312], + [2.6407816410064697, -3.798553228378296], + [4.636992931365967, -6.443297386169434], + [7.168085098266602, 8.552480697631836], + [2.1023786067962646, 5.151520729064941], + [3.0249183177948, -4.294292449951172], + [1.6354172229766846, 3.9795219898223877], + [8.193297386169434, -2.248753786087036], + [-2.68300461769104, -3.872906446456909], + [0.18479400873184204, 10.507099151611328], + [0.2114230990409851, 11.960198402404785], + [-4.391843318939209, -6.687009811401367], + [-4.722549915313721, -3.455815315246582], + [-4.605359077453613, -6.441796779632568], + [2.849360227584839, -6.062574863433838], + [-2.68605637550354, 0.5160619616508484], + [2.7805304527282715, 6.657527923583984], + [0.01076238602399826, 9.153019905090332], + [-4.523876190185547, 5.5926513671875], + [-0.4677634835243225, 3.9065563678741455], + [-0.01961643248796463, 11.804342269897461], + [-0.058171696960926056, 13.11112117767334], + [3.276460647583008, -4.696088790893555], + [0.24356645345687866, 11.349189758300781], + [0.21487915515899658, 10.945652961730957], + [4.076927661895752, 1.6148567199707031], + [-4.181776523590088, -3.3378212451934814], + [1.7521616220474243, 2.5600426197052], + [4.049452304840088, -1.6516019105911255], + [8.402466773986816, -2.29390287399292], + [-5.104493618011475, -3.722234010696411], + [4.567968845367432, 1.964826226234436], + [-2.143841028213501, 2.5109758377075195], + [-1.5903980731964111, -1.839854121208191], + [-1.5731498003005981, -4.6675615310668945], + [2.3074722290039062, 5.020078182220459], + [6.602721691131592, -1.5039160251617432], + [2.8337819576263428, 5.789167881011963], + [9.20528793334961, -2.3760018348693848], + [4.250303745269775, -2.7417149543762207], + [2.9486734867095947, -4.465013027191162], + [6.71763277053833, 8.41595458984375], + [-2.474350690841675, 2.3645455837249756], + [-6.036957740783691, 6.779886722564697], + [-2.52811336517334, 1.511603832244873], + [0.9469245076179504, -0.5215449333190918], + [-3.1170287132263184, -3.4668405055999756], + [2.3175547122955322, -4.935541152954102], + [1.030295968055725, -6.456415176391602], + [10.419344902038574, -2.4848010540008545], + [6.145169258117676, -4.463979721069336], + [-2.5459866523742676, 2.009761333465576], + [2.388435125350952, -2.6640689373016357], + [0.037662796676158905, 12.444120407104492], + [-0.14704367518424988, -1.7566715478897095], + [-1.0630831718444824, -0.31640487909317017], + [3.021705389022827, -2.0498745441436768], + [-0.14690738916397095, -1.5335865020751953], + [3.42232084274292, 1.066146969795227], + [8.18091106414795, -2.3281843662261963], + [3.2115747928619385, -8.027026176452637], + [4.912474155426025, -3.0834851264953613], + [2.98553729057312, -4.0932464599609375], + [7.7735981941223145, -2.1283836364746094], + [2.1568684577941895, 5.1061015129089355], + [-4.8180832862854, -7.750459671020508], + [-3.6436567306518555, -5.064204692840576], + [0.5172629356384277, -1.1283563375473022], + [-3.9550554752349854, 5.487392425537109], + [1.1579620838165283, 7.0269012451171875], + [7.3980207443237305, -4.50374698638916], + [6.33489465713501, 7.983199119567871], + [0.18805795907974243, 11.664918899536133], + [5.961343765258789, -2.899080514907837], + [-4.868859767913818, 5.980096817016602], + [-4.709265232086182, -5.920360088348389], + [1.231361985206604, 4.5818376541137695], + [-4.571538925170898, -7.242617130279541], + [2.892575979232788, -8.427364349365234], + [5.480164051055908, -2.992501735687256], + [7.910094738006592, -2.396469831466675], + [2.1425135135650635, -7.826994895935059], + [-2.368232488632202, 1.1619287729263306], + [-1.6491448879241943, 2.552417516708374], + [9.668963432312012, -2.2859866619110107], + [3.5691988468170166, 6.572774887084961], + [-5.948753833770752, -3.5384087562561035], + [-2.7761011123657227, 2.7236714363098145], + [6.194187164306641, 7.84708309173584], + [-4.417296886444092, 5.016994476318359], + [7.8347086906433105, -2.4385054111480713], + [-2.6946630477905273, 1.792266845703125], + [0.1492931842803955, 11.723191261291504], + [1.7143642902374268, -6.724466800689697], + [-1.0999431610107422, -3.7389304637908936], + [2.128819227218628, 0.807778000831604], + [0.6165731549263, 11.40957260131836], + [2.4661073684692383, -6.461251258850098], + [1.7842063903808594, 3.8219988346099854], + [-2.32755970954895, -3.017840623855591], + [9.805453300476074, -2.493741750717163], + [3.9566471576690674, -3.669593095779419], + [0.022077493369579315, 12.026939392089844], + [8.13084602355957, -2.078718662261963], + [-2.2137222290039062, 2.1088151931762695], + [-2.2843856811523438, 2.6628103256225586], + [-4.590834140777588, -0.237010657787323], + [0.019939355552196503, 12.424123764038086], + [-3.0532102584838867, 6.7689208984375], + [5.627607822418213, -1.2135926485061646], + [5.112560749053955, -1.1698553562164307], + [-5.833070755004883, -0.6598669290542603], + [3.055438756942749, -4.230915069580078], + [3.4830377101898193, -3.6875970363616943], + [0.13760513067245483, 12.284358978271484], + [6.818425178527832, -1.6031408309936523], + [-5.111083507537842, -3.179168939590454], + [3.8590376377105713, -4.555202484130859], + [9.75540828704834, -2.452984571456909], + [-4.761453151702881, -3.6607465744018555], + [-0.019004590809345245, 9.695483207702637], + [0.0294528529047966, 12.251701354980469], + [7.301612377166748, 9.36289119720459], + [3.439584493637085, -0.501349925994873], + [-1.5856918096542358, 1.8255112171173096], + [0.11561458557844162, -1.451431393623352], + [2.4917819499969482, 5.4139628410339355], + [2.5145604610443115, 0.5521068572998047], + [5.287624835968018, 7.635424613952637], + [8.539088249206543, -2.3828327655792236], + [4.966923236846924, 7.4703216552734375], + [2.856447458267212, -9.130584716796875], + [0.22948843240737915, 10.874651908874512], + [-5.162148952484131, -3.6276285648345947], + [10.868657112121582, -2.488664150238037], + [-3.4799022674560547, -3.3613665103912354], + [4.340118885040283, -3.8024232387542725], + [6.092196464538574, -1.7792086601257324], + [3.9711363315582275, -2.8128228187561035], + [3.3325133323669434, 1.5259462594985962], + [9.478890419006348, -2.348546266555786], + [0.1405741572380066, 10.107255935668945], + [2.15789532661438, 5.923931121826172], + [2.0398972034454346, 4.193461894989014], + [3.1985552310943604, -7.719082355499268], + [-4.572990894317627, -5.99209451675415], + [6.265030384063721, -2.7257556915283203], + [-2.3604772090911865, 2.275857448577881], + [-2.7946178913116455, 2.01389217376709], + [-2.3925435543060303, 1.803832769393921], + [10.332762718200684, -2.4998204708099365], + [-6.138508319854736, 6.110520362854004], + [-2.9908242225646973, -4.407513618469238], + [1.8809837102890015, -7.999789714813232], + [1.6802095174789429, -5.935727119445801], + [-7.399433135986328, -1.4538573026657104], + [-4.132832050323486, -2.7806038856506348], + [-3.9556100368499756, -1.7239477634429932], + [3.3207848072052, -3.4826014041900635], + [8.050416946411133, -2.821382761001587], + [0.1618174910545349, 10.320616722106934], + [3.582430124282837, 1.8672733306884766], + [-1.3265751600265503, 1.7706533670425415], + [0.0969725176692009, 11.8779296875], + [-5.316157817840576, -2.335122585296631], + [-1.8689446449279785, 0.8613090515136719], + [1.805092453956604, 5.700930595397949], + [7.732870578765869, -1.9328744411468506], + [-0.03862781077623367, 12.810929298400879], + [2.446528673171997, -6.369426727294922], + [-1.4175450801849365, 1.3906737565994263], + [-0.07272417098283768, 9.563566207885742], + [7.822530746459961, -2.7597763538360596], + [-2.2417595386505127, -4.5494184494018555], + [4.032866954803467, -2.373508930206299], + [-0.30960482358932495, 8.712418556213379], + [6.466535568237305, -1.1178163290023804], + [7.123711585998535, -2.1558492183685303], + [-3.68607497215271, -2.7381033897399902], + [10.081755638122559, -2.405318260192871], + [4.620725154876709, -3.097646474838257], + [-2.4396092891693115, -2.5590734481811523], + [1.316499948501587, -6.124032020568848], + [3.198568820953369, 0.9073021411895752], + [7.1625542640686035, 8.761125564575195], + [5.592017650604248, -5.971016883850098], + [3.5785868167877197, 1.1903678178787231], + [1.785826325416565, 1.8953543901443481], + [-3.8869264125823975, 7.743807792663574], + [2.538370370864868, -8.005583763122559], + [2.9842031002044678, -4.246384620666504], + [-4.450775623321533, 3.063282012939453], + [3.486480474472046, -5.670926570892334], + [0.25275057554244995, 11.544909477233887], + [-1.6562583446502686, -2.5881619453430176], + [-2.072547435760498, 2.4105870723724365], + [3.3384768962860107, 0.8323202729225159], + [-2.021440267562866, 2.654625654220581], + [8.109911918640137, -2.3527424335479736], + [-3.350292444229126, -5.486166000366211], + [2.555351972579956, 1.308170199394226], + [3.494713544845581, 1.0971330404281616], + [7.005033493041992, -1.5598044395446777], + [-0.5120168924331665, -1.6656309366226196], + [3.338014602661133, 6.501119613647461], + [-4.491664409637451, -6.2281646728515625], + [-2.2137973308563232, 0.10249531269073486], + [2.0367190837860107, -0.2364172339439392], + [-4.737732410430908, -6.869503974914551], + [4.5188069343566895, 7.168792247772217], + [-3.581871747970581, -5.529255390167236], + [6.081472873687744, -1.7543002367019653], + [-1.6762703657150269, -2.052428722381592], + [-0.16133227944374084, -1.560832142829895], + [3.2176566123962402, 6.031974792480469], + [3.2579922676086426, -4.157059669494629], + [6.793807506561279, 8.485595703125], + [-3.2338500022888184, -2.6262521743774414], + [4.011936664581299, -8.060033798217773], + [4.873590469360352, -4.627492904663086], + [2.3749959468841553, -7.466827392578125], + [1.1748480796813965, -7.210822105407715], + [0.06558429449796677, 9.296590805053711], + [5.657627582550049, -2.086779832839966], + [-2.935912847518921, -3.617175340652466], + [3.007498025894165, -4.058996677398682], + [3.285682439804077, -7.638521194458008], + [6.780534267425537, 8.465648651123047], + [6.971635341644287, 8.420642852783203], + [2.747483968734741, -9.026285171508789], + [-2.441917896270752, 1.5212697982788086], + [8.574654579162598, -2.3115928173065186], + [3.475881814956665, -3.648876905441284], + [2.164358139038086, -7.994462490081787], + [-2.1032726764678955, -3.416029214859009], + [2.376607656478882, -7.903876781463623], + [8.453193664550781, -2.6926043033599854], + [6.777930736541748, 8.219229698181152], + [3.208777666091919, -8.400152206420898], + [-5.500851631164551, 6.265976428985596], + [-2.071894407272339, 2.4460291862487793], + [0.19514888525009155, 10.275772094726562], + [-2.3921706676483154, 1.4688917398452759], + [5.351731300354004, -2.6501517295837402], + [2.6694185733795166, -3.200211763381958], + [1.6787574291229248, 1.4086531400680542], + [-3.84112811088562, -2.606424331665039], + [9.083565711975098, -2.371243476867676], + [-1.2378480434417725, -2.3473880290985107], + [-3.696518659591675, -5.079934120178223], + [-3.9543280601501465, -6.0539655685424805], + [-4.257594585418701, 0.4630739688873291], + [0.05465679615736008, 12.789180755615234], + [-3.2276878356933594, -6.018782615661621], + [4.878532886505127, -0.8226378560066223], + [3.5819313526153564, -6.910000324249268], + [-0.7635108828544617, 1.2946377992630005], + [-1.2234781980514526, -3.879345655441284], + [3.1744542121887207, 1.5896849632263184], + [-1.809890627861023, 0.5223476886749268], + [-2.80957293510437, 4.681852340698242], + [2.8147454261779785, -4.046543121337891], + [-6.120144367218018, 7.4788923263549805], + [-6.274924278259277, 7.111773490905762], + [7.337024688720703, 8.806396484375], + [0.1201353594660759, 12.045806884765625], + [9.384293556213379, -2.3494579792022705], + [-4.061447620391846, -4.8268914222717285], + [0.02167516201734543, 12.702954292297363], + [-2.2039260864257812, 1.8164618015289307], + [2.87319278717041, -10.104890823364258], + [5.875967502593994, -1.2336269617080688], + [1.9924545288085938, -4.542972564697266], + [-5.36754035949707, -1.5720611810684204], + [2.3310601711273193, -7.189948558807373], + [2.594357490539551, 0.3315093219280243], + [9.196639060974121, -2.4749085903167725], + [-5.17270040512085, 6.9228105545043945], + [-4.116233825683594, -5.925844192504883], + [2.5718185901641846, -8.457386016845703], + [-7.617124557495117, -0.5529745817184448], + [-2.045642375946045, 0.567611575126648], + [-2.174241542816162, 1.2825205326080322], + [0.2997770607471466, -4.29810905456543], + [-7.492312908172607, 2.283660888671875], + [3.349015712738037, -10.456244468688965], + [-0.01791197806596756, 12.657712936401367], + [-5.344370365142822, 4.8985137939453125], + [-2.092646837234497, 2.558716297149658], + [8.244447708129883, -2.5820090770721436], + [9.826003074645996, -2.418126344680786], + [1.8952124118804932, -6.597243309020996], + [-2.187410354614258, 2.433006525039673], + [-3.0100533962249756, -4.76711368560791], + [2.3335328102111816, 3.528327226638794], + [-2.441187620162964, 1.6280910968780518], + [0.007012896239757538, 12.373624801635742], + [0.08675418049097061, -2.024118661880493], + [2.2475922107696533, 5.413351058959961], + [-2.289374828338623, 3.0740931034088135], + [-0.11804402619600296, -0.5573628544807434], + [5.344882965087891, 7.901111602783203], + [2.809882402420044, -4.412552833557129], + [-3.231340169906616, 7.5269365310668945], + [9.037116050720215, -2.2834930419921875], + [2.929837465286255, -4.055207252502441], + [-4.030845642089844, 4.208381652832031], + [8.739777565002441, -2.334204912185669], + [2.5357911586761475, 0.4522510766983032], + [-6.4578471183776855, -0.5201038122177124], + [5.113724231719971, -0.9253388047218323], + [2.56634259223938, -9.341203689575195], + [3.730006456375122, 1.9319149255752563], + [-4.570250034332275, -4.0102643966674805], + [5.790968418121338, 7.426578521728516], + [-0.40113985538482666, 0.1866927146911621], + [-3.1651885509490967, -2.4439682960510254], + [2.5992679595947266, -3.3536641597747803], + [-4.854653835296631, -5.939385414123535], + [2.677034854888916, -3.5449657440185547], + [-5.085347652435303, -2.849341630935669], + [5.364506244659424, -0.13854354619979858], + [1.933654546737671, 3.186769485473633], + [8.056487083435059, -2.2235312461853027], + [-3.5582244396209717, -3.113164186477661], + [3.584132432937622, 6.317018032073975], + [-3.2967348098754883, -0.42689794301986694], + [3.449833631515503, -5.572927474975586], + [2.425999879837036, 5.123348236083984], + [2.802624225616455, 2.764000654220581], + [3.2226083278656006, -4.6045403480529785], + [-4.674729824066162, -3.4881784915924072], + [-2.6914308071136475, -4.180794715881348], + [2.771688222885132, -3.9370791912078857], + [2.18371844291687, 6.308588027954102], + [-3.033228874206543, -3.4773242473602295], + [9.517729759216309, -2.4164106845855713], + [2.256955623626709, -7.648013591766357], + [-4.985909938812256, 7.069995880126953], + [-0.4545084834098816, -1.9134306907653809], + [3.5917725563049316, -8.357856750488281], + [-4.600916385650635, -7.346356391906738], + [7.9261860847473145, -1.8101040124893188], + [-0.04557747393846512, 9.476396560668945], + [-4.215334892272949, -1.3399088382720947], + [3.68489933013916, -3.816755533218384], + [2.2277069091796875, -7.306275367736816], + [5.799042224884033, 7.513091087341309], + [2.280322313308716, -8.252519607543945], + [1.8957453966140747, 0.18015599250793457], + [-1.0962774753570557, -3.532024621963501], + [-1.7783445119857788, 2.03991436958313], + [0.36802464723587036, 10.131684303283691], + [-2.543835163116455, -0.7850198745727539], + [3.62419056892395, 7.0947184562683105], + [9.011397361755371, -2.3319814205169678], + [0.24531173706054688, 11.404191970825195], + [-4.374850749969482, -6.206457138061523], + [0.43487322330474854, 0.10847622156143188], + [1.2163019180297852, 5.946002960205078], + [-2.110170602798462, 2.512190103530884], + [8.336553573608398, -2.2875425815582275], + [-7.2837910652160645, 0.020007606595754623], + [9.568020820617676, -2.4783213138580322], + [-4.674821853637695, -5.41914701461792], + [-4.0551347732543945, -5.661637783050537], + [0.6826010942459106, -5.43280029296875], + [1.0115883350372314, -0.44931459426879883], + [2.0153615474700928, 1.1027588844299316], + [3.344454288482666, -4.671459197998047], + [2.9699394702911377, -4.45728063583374], + [-4.738892078399658, -6.218141555786133], + [1.7359368801116943, -7.67628288269043], + [2.6524109840393066, -8.913016319274902], + [-1.8107218742370605, 2.3686885833740234], + [2.7270195484161377, -9.406473159790039], + [-5.938511371612549, 5.212119102478027], + [0.21029263734817505, 10.802213668823242], + [1.8523917198181152, 4.052190780639648], + [-1.7693148851394653, -3.501673460006714], + [5.107378005981445, -5.533336639404297], + [9.454141616821289, -2.431079626083374], + [2.727179765701294, 0.5010868310928345], + [-5.110097408294678, -3.4115328788757324], + [-2.9634296894073486, 2.6346724033355713], + [-3.8473193645477295, 6.79703950881958], + [0.592756450176239, -5.598052024841309], + [3.319282054901123, -6.854580879211426], + [2.617072343826294, -8.00805377960205], + [-2.49237060546875, 1.4984241724014282], + [-1.074752926826477, -0.3256056010723114], + [-6.217536449432373, -0.8577520847320557], + [-0.2132144570350647, -1.5601855516433716], + [3.0709455013275146, 4.628627300262451], + [-3.971742868423462, 3.2944676876068115], + [-0.08331450074911118, -1.610906958580017], + [-2.204618215560913, 2.523064613342285], + [2.7432219982147217, -3.1431829929351807], + [5.673167705535889, -1.7677139043807983], + [0.2249494194984436, 10.541805267333984], + [1.9430620670318604, -7.8154706954956055], + [0.10084521025419235, 9.809736251831055], + [-5.664119720458984, -0.7732486128807068], + [4.318331718444824, 7.525032997131348], + [-5.23838472366333, 5.85335636138916], + [3.608289957046509, -3.862497329711914], + [1.7991993427276611, -6.5624775886535645], + [2.3674771785736084, 5.958763122558594], + [1.6802091598510742, -7.910247325897217], + [9.945393562316895, -2.5080487728118896], + [0.4914253354072571, 10.34528923034668], + [7.705742359161377, 9.118877410888672], + [-3.0431039333343506, -3.5491976737976074], + [-0.09631580859422684, 14.913559913635254], + [2.2071800231933594, -5.839896202087402], + [0.25056642293930054, 10.597892761230469], + [-6.851058006286621, -0.44095051288604736], + [2.4564778804779053, -8.080554962158203], + [-6.8628692626953125, 3.015005588531494], + [-2.5101473331451416, 2.031993865966797], + [8.974583625793457, -2.4234588146209717], + [5.451530933380127, -2.1839540004730225], + [-6.051633834838867, -1.2171663045883179], + [-2.1214346885681152, 2.6626460552215576], + [-2.464284658432007, -3.624163866043091], + [-2.059398651123047, 2.434258222579956], + [0.21330630779266357, 10.968878746032715], + [6.926767349243164, 8.436915397644043], + [7.019649505615234, 8.395752906799316], + [8.578072547912598, -2.3164193630218506], + [4.092443466186523, -2.0168817043304443], + [0.09425001591444016, 9.587745666503906], + [-6.772548198699951, 8.374756813049316], + [-6.363351345062256, 7.0390191078186035], + [1.3188050985336304, 0.06569471955299377], + [0.1577126383781433, 12.014068603515625], + [-2.3048417568206787, 2.792330503463745], + [3.7531754970550537, -5.60688591003418], + [-0.046898312866687775, 9.551948547363281], + [1.997635841369629, 0.8056890964508057], + [-0.3119664788246155, 9.69809341430664], + [3.7477023601531982, -2.2182796001434326], + [-5.401705265045166, -1.346105933189392], + [-0.30651605129241943, -1.597752571105957], + [5.904283046722412, 7.5569000244140625], + [7.097654819488525, -1.4351191520690918], + [7.122620105743408, -2.003588914871216], + [-5.720760822296143, -2.9692838191986084], + [3.925081968307495, 1.5473319292068481], + [0.49064916372299194, -5.016522407531738], + [5.161823749542236, -3.84275484085083], + [-2.488377809524536, 1.1502219438552856], + [-5.872732639312744, -2.1907737255096436], + [-3.614457845687866, 5.431765079498291], + [4.414639472961426, 5.736921310424805], + [-0.945946455001831, -0.961595356464386], + [1.6494637727737427, 5.310465335845947], + [9.048530578613281, -2.3269429206848145], + [-0.39065781235694885, 0.8411841988563538], + [2.9163501262664795, -4.071717739105225], + [7.933135509490967, -2.213958501815796], + [-2.585780382156372, -4.708076000213623], + [3.516394853591919, -8.481220245361328], + [-4.4176106452941895, -6.877057075500488], + [-2.251889705657959, 1.9442521333694458], + [1.1986725330352783, -0.4521183967590332], + [0.6646464467048645, -5.760432243347168], + [1.5380696058273315, -7.834323406219482], + [4.7840352058410645, -1.5928105115890503], + [8.189818382263184, -2.4602317810058594], + [-1.8156230449676514, -0.8410977125167847], + [2.9051058292388916, -3.790766477584839], + [-1.0437465906143188, 1.0204548835754395], + [-0.005577094852924347, 13.096105575561523], + [-0.023368246853351593, 12.836009979248047], + [2.8280370235443115, 0.4302093982696533], + [1.469228982925415, -0.2814285159111023], + [2.8384439945220947, 3.0412957668304443], + [1.9040532112121582, 4.171365737915039], + [7.933038234710693, -2.061393976211548], + [-0.11411101371049881, 9.203512191772461], + [4.139664173126221, 1.8326863050460815], + [4.2034478187561035, 6.451241493225098], + [0.056812457740306854, 11.456765174865723], + [-1.4026482105255127, -0.4782971143722534], + [0.1960410475730896, 11.476044654846191], + [3.5546209812164307, -2.984614372253418], + [9.541342735290527, -2.4049179553985596], + [2.6335175037384033, 1.8848356008529663], + [1.71328604221344, -3.477607011795044], + [0.11947821825742722, 11.790462493896484], + [8.130877494812012, -2.226710557937622], + [8.84723949432373, -2.3304550647735596], + [-3.4466984272003174, -1.6340373754501343], + [-4.837568283081055, 5.314065456390381], + [-4.713924884796143, -2.8296897411346436], + [1.8475050926208496, -3.3069911003112793], + [3.105822801589966, -7.993130207061768], + [-6.74077033996582, 1.2496505975723267], + [-2.857570171356201, 1.7965534925460815], + [-2.573333978652954, 2.1426501274108887], + [0.4057186245918274, 11.793859481811523], + [-2.0824358463287354, 2.692497491836548], + [-2.1083340644836426, 2.4488751888275146], + [5.272153377532959, -1.110074758529663], + [2.993257999420166, -3.5834500789642334], + [2.50565505027771, 9.770893096923828], + [-3.9558072090148926, -1.218064308166504], + [-4.6329731941223145, -7.363913536071777], + [-2.6340653896331787, -4.124783515930176], + [-0.0519837811589241, 13.32861328125], + [1.8282934427261353, 4.888455390930176], + [3.2488019466400146, 1.31235671043396], + [-2.150498867034912, 0.5663919448852539], + [3.008800506591797, -3.8344180583953857], + [-6.035886764526367, 4.248021125793457], + [-5.0278754234313965, 1.5360232591629028], + [-4.43117618560791, -2.912353515625], + [-2.399524450302124, -5.597897529602051], + [8.736364364624023, -2.246299982070923], + [2.7301275730133057, 6.647590637207031], + [2.2787795066833496, -2.516929864883423], + [-1.2337080240249634, -4.006383895874023], + [0.18694502115249634, 11.364365577697754], + [2.593568801879883, -7.19244909286499], + [2.8202931880950928, 6.45151424407959], + [-3.757585048675537, 2.912843704223633], + [2.7228591442108154, -6.445014953613281], + [8.69929027557373, -2.3232290744781494], + [7.088990688323975, 8.738601684570312], + [0.9375284314155579, -6.3148393630981445], + [2.0956456661224365, -8.2545166015625], + [3.3741295337677, -3.743943452835083], + [-2.5487682819366455, 1.6484814882278442], + [-0.038675494492053986, 12.880123138427734], + [2.923581123352051, -6.0592451095581055], + [1.979100227355957, 5.766329765319824], + [7.4799089431762695, -1.9530301094055176], + [0.09218447655439377, 9.620333671569824], + [4.351354122161865, 6.04496955871582], + [-1.6373417377471924, -2.6481268405914307], + [-2.3673202991485596, 2.424304723739624], + [0.20090484619140625, 10.32581901550293], + [6.604488849639893, -1.558308720588684], + [-3.9545652866363525, -1.8570483922958374], + [3.742753028869629, -6.697011470794678], + [1.804276704788208, 3.906965970993042], + [0.5489298701286316, -1.0631818771362305], + [1.8429594039916992, -3.038740873336792], + [1.5344427824020386, 5.712863922119141], + [3.362233877182007, -4.911600112915039], + [1.8841303586959839, 0.5007504224777222], + [4.306279182434082, -4.0466084480285645], + [-5.0049967765808105, 3.759650945663452], + [3.344162702560425, -8.714794158935547], + [3.121133804321289, -4.44321346282959], + [-6.811891078948975, -0.2533007860183716], + [-2.8106582164764404, 0.7098592519760132], + [0.10225390642881393, 12.342854499816895], + [-0.8771079778671265, -3.3036015033721924], + [-7.180655002593994, -0.6973199248313904], + [2.352736711502075, -8.396976470947266], + [-4.7932448387146, -5.826929092407227], + [6.2205491065979, -5.471343040466309], + [-4.987524032592773, 5.483930587768555], + [-0.009609408676624298, 12.860370635986328], + [-2.538666248321533, 1.5970169305801392], + [0.5419033169746399, -3.8030662536621094], + [3.8977158069610596, -7.858325004577637], + [-0.012382395565509796, 12.268959045410156], + [-4.558614253997803, -3.035881519317627], + [6.971031665802002, -2.6901862621307373], + [0.08863019198179245, 9.918058395385742], + [5.6887526512146, 8.226677894592285], + [0.06922917813062668, 12.113079071044922], + [5.5176897048950195, 6.774722099304199], + [-0.03848624974489212, 11.173996925354004], + [2.2450127601623535, 2.2738354206085205], + [3.790879011154175, -3.044694185256958], + [-2.4582300186157227, 2.252927541732788], + [0.456412672996521, -5.463443756103516], + [7.092977523803711, -2.305680990219116], + [-4.002696514129639, -6.374401569366455], + [6.391441345214844, -3.714329957962036], + [4.577276706695557, -3.9357948303222656], + [4.884006023406982, -3.8176498413085938], + [0.19321602582931519, 10.15534496307373], + [-2.144102096557617, 2.853533983230591], + [7.870513439178467, -2.058703899383545], + [-1.8163915872573853, 1.2928670644760132], + [0.3115777373313904, 8.763045310974121], + [8.643525123596191, -2.331052541732788], + [2.9867746829986572, 1.4626377820968628], + [-0.14577394723892212, 9.438796997070312], + [7.9308762550354, -2.1670429706573486], + [-1.242903709411621, 0.9313893914222717], + [-6.037586212158203, -0.1854463815689087], + [6.054445266723633, 7.818312644958496], + [1.9375007152557373, -7.746949672698975], + [1.169935941696167, -0.6659954190254211], + [5.023029804229736, -6.862828731536865], + [1.966367483139038, -8.290727615356445], + [8.62105655670166, -2.2716805934906006], + [6.27992582321167, -2.059138536453247], + [3.0036444664001465, -4.257352828979492], + [8.517682075500488, -2.262084722518921], + [-2.5691351890563965, 3.8705785274505615], + [-2.436908721923828, -4.884526252746582], + [-4.79795503616333, 3.81376051902771], + [-4.370265960693359, -1.723256230354309], + [3.2488555908203125, -6.778933525085449], + [-2.501208543777466, 2.1979482173919678], + [3.185739755630493, -4.501861095428467], + [-2.060596466064453, 2.3892130851745605], + [-5.448483467102051, 1.3117144107818604], + [-2.268489122390747, 2.3392224311828613], + [-3.8497226238250732, -2.7167742252349854], + [-3.779388666152954, 6.169039726257324], + [6.944715976715088, 8.435955047607422], + [-3.957521677017212, -6.1480512619018555], + [8.383625984191895, -2.220616579055786], + [-3.094665765762329, -3.4947311878204346], + [1.9303762912750244, 0.34054145216941833], + [-5.470996379852295, 5.593832969665527], + [-0.7817544937133789, -2.706670045852661], + [-2.293799877166748, 2.80790638923645], + [9.267182350158691, -2.313913583755493], + [1.5183472633361816, 5.180032730102539], + [-2.0922255516052246, 2.6451292037963867], + [-4.770695209503174, 5.87042760848999], + [-1.4097031354904175, 1.8231455087661743], + [-0.060120053589344025, 9.598764419555664], + [2.2419071197509766, -1.8683359622955322], + [-7.9880900382995605, 0.2509903907775879], + [0.19164365530014038, 11.52759075164795], + [5.547124862670898, -1.1049093008041382], + [-7.052357196807861, -0.012920264154672623], + [-1.6434320211410522, -3.539541482925415], + [3.6123547554016113, -3.20817232131958], + [-3.660045623779297, 0.6174035668373108], + [-2.6154017448425293, 1.8576586246490479], + [-1.473691701889038, 0.14487013220787048], + [2.8923428058624268, -8.004319190979004], + [2.854663610458374, -3.5805933475494385], + [-0.01087094098329544, 11.66291618347168], + [-4.2388505935668945, -6.167801856994629], + [2.4696946144104004, 2.738981246948242], + [-4.403809547424316, 5.096379280090332], + [-3.4138529300689697, -5.480258941650391], + [1.9970335960388184, 4.921240329742432], + [5.715020656585693, 7.679938316345215], + [-4.278282642364502, -2.7404630184173584], + [-3.8177859783172607, -3.2114202976226807], + [9.73585033416748, -2.3251802921295166], + [2.9553074836730957, -4.168759346008301], + [-6.42484712600708, 7.362675666809082], + [1.8316441774368286, 4.185070514678955], + [4.897326946258545, -3.6021711826324463], + [2.4814255237579346, -6.897741317749023], + [-4.0973334312438965, 5.625633716583252], + [2.056988000869751, 4.18060302734375], + [-2.0506348609924316, 2.328935146331787], + [3.752239942550659, -2.7738358974456787], + [-5.267173767089844, 5.835600852966309], + [8.173239707946777, -2.2360336780548096], + [-2.3871536254882812, -0.8811131715774536], + [3.7086424827575684, 1.4776488542556763], + [6.106978893280029, 7.813395977020264], + [2.092294692993164, 4.698486328125], + [2.8394134044647217, -4.03251314163208], + [2.9003608226776123, -3.486713409423828], + [2.5034101009368896, 5.8746490478515625], + [0.6954228281974792, -0.989413321018219], + [5.059673309326172, -1.8742632865905762], + [3.0368285179138184, -6.111067295074463], + [7.9518866539001465, -2.3746540546417236], + [0.14854055643081665, 9.933965682983398], + [-4.539064884185791, -5.866067886352539], + [-5.4586334228515625, -0.6622380614280701], + [-2.1966235637664795, 0.3043000102043152], + [10.742400169372559, -2.413573980331421], + [8.8394193649292, -2.31821608543396], + [7.419744968414307, -2.3529441356658936], + [2.889254331588745, -4.556286811828613], + [-3.271825075149536, -4.441770553588867], + [8.390912055969238, -2.3432705402374268], + [9.557936668395996, -2.3632404804229736], + [7.340670108795166, 8.815643310546875], + [4.191840648651123, -3.519136905670166], + [2.9751501083374023, -3.9915244579315186], + [-6.314803600311279, 6.312224388122559], + [2.541079521179199, -2.5321719646453857], + [0.02220945805311203, 12.714006423950195], + [2.3637399673461914, -6.449638366699219], + [-0.022969789803028107, 12.534408569335938], + [3.345184803009033, -4.69466495513916], + [3.404796600341797, -3.08815336227417], + [2.592423677444458, 5.719366073608398], + [-3.630924940109253, -5.747675895690918], + [8.494818687438965, -2.2708475589752197], + [2.466979742050171, -8.951370239257812], + [6.5380730628967285, 7.9885101318359375], + [5.401453495025635, -1.1203984022140503], + [0.41422683000564575, 2.6438310146331787], + [7.4388957023620605, 8.846238136291504], + [2.1675899028778076, 5.135805130004883], + [-3.3241617679595947, -0.7235069870948792], + [-4.5246195793151855, -6.4520263671875], + [1.882542610168457, 4.359440326690674], + [-5.069443225860596, -3.2143115997314453], + [-2.309138298034668, -0.33898621797561646], + [-4.205026149749756, -3.198136329650879], + [-6.9067463874816895, -1.3427854776382446], + [2.2058093547821045, 3.427574634552002], + [6.01229190826416, -3.022023916244507], + [8.186793327331543, -2.221179246902466], + [-6.3585286140441895, 7.664043426513672], + [-3.043780565261841, 6.7117438316345215], + [-5.393720626831055, -1.7918620109558105], + [3.915872812271118, -2.7819979190826416], + [-4.999777793884277, -3.7369589805603027], + [2.2943544387817383, 4.112104415893555], + [2.7842509746551514, -8.411504745483398], + [2.893981695175171, -3.782602310180664], + [-4.166895389556885, -6.799565315246582], + [-2.353261709213257, 1.9874438047409058], + [3.8573415279388428, -3.4004483222961426], + [-4.806882381439209, 3.5066773891448975], + [5.020720481872559, 6.800296306610107], + [-3.749302625656128, -5.860657691955566], + [-3.828484296798706, -3.0221152305603027], + [0.05550747364759445, 11.989204406738281], + [2.6637189388275146, -3.757972478866577], + [7.144272327423096, -2.343263626098633], + [3.4005584716796875, -5.621151924133301], + [-4.366183757781982, 6.2198896408081055], + [-1.5516806840896606, -0.05646762624382973], + [-4.36756706237793, -1.6022056341171265], + [-4.098568916320801, -1.8892399072647095], + [-3.5304551124572754, -5.149960041046143], + [-6.4628167152404785, -0.061899784952402115], + [-8.112264633178711, -0.4125382900238037], + [3.9737164974212646, 1.3665827512741089], + [-1.8963429927825928, -2.7494938373565674], + [-2.0645766258239746, 2.6199944019317627], + [6.104891777038574, -2.962165117263794], + [-0.8271183371543884, 2.8305160999298096], + [2.5277349948883057, -8.484996795654297], + [-4.544577598571777, -7.321425437927246], + [-1.8484110832214355, -3.5555777549743652], + [4.894961833953857, 7.238428592681885], + [0.09588687866926193, 12.31402587890625], + [0.028107576072216034, 11.802765846252441], + [-4.021677017211914, -2.5454471111297607], + [7.919941425323486, -2.0976274013519287], + [5.727226734161377, -0.8636610507965088], + [-1.1782567501068115, -3.075850248336792], + [1.0260815620422363, 4.455203056335449], + [-2.4143025875091553, 1.9569405317306519], + [5.47838020324707, -2.0897281169891357], + [3.8565213680267334, -4.840867042541504], + [-3.0569088459014893, -2.561265707015991], + [7.976277828216553, -2.5285873413085938], + [4.787580490112305, -2.154723644256592], + [-1.4652056694030762, 1.7935733795166016], + [3.497556447982788, -4.919826984405518], + [1.9274520874023438, -1.7044473886489868], + [2.2319681644439697, -7.825206756591797], + [4.771285533905029, -1.2556802034378052], + [1.1915874481201172, -0.5104736089706421], + [-4.630151748657227, 5.033333778381348], + [4.014011383056641, -3.441333293914795], + [-2.1703107357025146, 2.1020212173461914], + [-0.6723556518554688, -0.4858989715576172], + [-2.58831524848938, 1.7822105884552002], + [5.828108787536621, -1.24144446849823], + [4.358044147491455, -3.544113874435425], + [-2.2188093662261963, 2.1194047927856445], + [-5.317221164703369, -1.422837257385254], + [-4.206700801849365, -3.1080079078674316], + [-6.36261510848999, 7.642969131469727], + [-1.5277254581451416, -0.17708668112754822], + [-4.959339618682861, -4.581778526306152], + [3.4916892051696777, -5.36870813369751], + [7.388779163360596, 8.776541709899902], + [0.009319238364696503, 9.358012199401855], + [0.0015543028712272644, 12.670024871826172], + [4.408706188201904, 6.646178722381592], + [-5.954087257385254, -1.428648591041565], + [0.9895523190498352, 3.08204984664917], + [2.8667409420013428, 1.1523598432540894], + [3.697936534881592, -3.2539923191070557], + [10.305902481079102, -2.4120724201202393], + [3.0789990425109863, -3.858987808227539], + [-5.287634372711182, -1.7637571096420288], + [-3.795823812484741, -1.4422091245651245], + [3.9766876697540283, -3.4607856273651123], + [0.2266642451286316, 11.080230712890625], + [0.1860014796257019, 10.584781646728516], + [2.0740206241607666, -8.127423286437988], + [-4.478710651397705, -6.704124927520752], + [3.744455099105835, 1.0571497678756714], + [3.658430814743042, -7.885903835296631], + [-3.1509649753570557, -5.438021659851074], + [5.314810276031494, -4.989132404327393], + [-1.4571430683135986, -2.909358263015747], + [1.0044188499450684, -6.528711795806885], + [4.7454657554626465, 6.905566215515137], + [-4.532999515533447, -0.16044080257415771], + [7.996890544891357, -2.049278736114502], + [6.487987518310547, 7.842740535736084], + [2.255361318588257, 4.70658016204834], + [-2.8773610591888428, -0.929611325263977], + [6.208831787109375, -3.757551670074463], + [-5.99783182144165, 7.079538345336914], + [4.12572717666626, -3.8222434520721436], + [-5.146763324737549, -1.7673296928405762], + [-4.154975414276123, 1.6081101894378662], + [-4.204527854919434, -3.4285552501678467], + [0.013497762382030487, 12.430204391479492], + [0.27286165952682495, 10.508641242980957], + [2.5470187664031982, 2.1354379653930664], + [9.01740550994873, -2.5124385356903076], + [-2.939612627029419, 1.7510868310928345], + [3.004232168197632, -3.9573562145233154], + [-5.060903072357178, -7.751447677612305], + [-2.0161099433898926, -3.5131309032440186], + [3.3592464923858643, -3.896332263946533], + [2.6300363540649414, 5.889225006103516], + [7.900041103363037, -1.8813278675079346], + [2.9751698970794678, -8.213543891906738], + [3.73258900642395, -3.356586217880249], + [0.1816176176071167, -5.882354736328125], + [-0.489136278629303, -1.3850444555282593], + [0.1658199429512024, 10.75682258605957], + [-3.516789436340332, -2.937645435333252], + [-5.201524257659912, -0.3008270263671875], + [-2.704312562942505, -3.1832072734832764], + [-3.3239595890045166, -4.331157207489014], + [-7.357753276824951, 0.14779603481292725], + [3.058804988861084, -3.0904381275177], + [6.271296977996826, -0.7337971925735474], + [-5.636026859283447, 6.1539506912231445], + [-1.8779957294464111, -3.515284299850464], + [-6.287204265594482, 7.124591827392578], + [-0.03805900365114212, -1.5332928895950317], + [-4.00469446182251, 7.14599084854126], + [-4.911678791046143, -0.905310869216919], + [2.88671612739563, -3.7613210678100586], + [7.486738681793213, -1.989304542541504], + [5.768548488616943, 7.133983135223389], + [1.734777808189392, 4.702892303466797], + [1.5829722881317139, 5.377482891082764], + [-4.335615158081055, -3.2670795917510986], + [-2.53151535987854, -4.07366943359375], + [0.29836779832839966, -0.6378886699676514], + [-2.508932590484619, 1.9963680505752563], + [-1.7920799255371094, 0.9683873653411865], + [-5.930574893951416, 6.908614158630371], + [-5.181219577789307, 6.523573875427246], + [6.690683841705322, -2.2817306518554688], + [-4.213371753692627, -3.5749049186706543], + [3.8699891567230225, -5.534452438354492], + [-3.8334429264068604, -4.325618743896484], + [1.3620517253875732, -2.831894636154175], + [-2.0390586853027344, 2.363858222961426], + [3.232135772705078, -3.247204542160034], + [-4.501430988311768, -7.249274253845215], + [0.8201878070831299, 4.690927028656006], + [8.44835376739502, -2.3040826320648193], + [0.09237509220838547, 10.192909240722656], + [5.454587459564209, 7.006074905395508], + [-1.5954089164733887, 1.9496371746063232], + [-5.143076419830322, -2.2836649417877197], + [-4.936000347137451, -2.7567074298858643], + [4.69722318649292, -0.49591174721717834], + [2.9206902980804443, -3.477566957473755], + [-3.312263250350952, -3.449798822402954], + [2.150700330734253, 5.1223368644714355], + [0.7555144429206848, 10.777207374572754], + [-5.106321811676025, -2.0342304706573486], + [-1.641809344291687, 1.4641858339309692], + [6.375347137451172, -1.3049025535583496], + [-2.969726800918579, -3.0769546031951904], + [5.152559280395508, -1.5326324701309204], + [1.8577910661697388, 5.333859920501709], + [-3.741955280303955, 5.364528656005859], + [7.424784183502197, -2.1376140117645264], + [-1.0700658559799194, -3.7715511322021484], + [-3.990335702896118, -6.197999000549316], + [-1.9859299659729004, 2.4544143676757812], + [-4.399302005767822, 4.744919300079346], + [11.035931587219238, -2.449113130569458], + [0.2140672206878662, 10.483607292175293], + [-0.41458070278167725, -4.674230575561523], + [2.862304210662842, -7.632550239562988], + [2.1354832649230957, 1.9671083688735962], + [-2.508152723312378, 2.2027738094329834], + [5.586833477020264, -2.4153902530670166], + [-1.4611306190490723, 1.087562918663025], + [-0.3514637053012848, -1.823686957359314], + [5.386723041534424, -0.026178155094385147], + [5.127490997314453, 7.0067033767700195], + [1.5652728080749512, 5.449658393859863], + [6.3663763999938965, 8.035791397094727], + [5.930912494659424, 7.275664329528809], + [-6.035654544830322, 7.77908992767334], + [-2.6080801486968994, 6.389469623565674], + [3.4286892414093018, 1.004698634147644], + [3.943727731704712, -1.153477430343628], + [3.514070510864258, -3.902268171310425], + [-6.7855000495910645, 8.036069869995117], + [-3.2568347454071045, -3.4581334590911865], + [-2.7377712726593018, 2.0914013385772705], + [3.7679290771484375, -4.042137622833252], + [-4.370938777923584, -2.7109737396240234], + [3.038043260574341, -4.077630519866943], + [7.507768630981445, -2.802393674850464], + [-4.93701696395874, -0.692189633846283], + [-7.813287258148193, -1.0482826232910156], + [3.2171053886413574, 1.896844506263733], + [0.03792709857225418, -2.6257145404815674], + [6.280836582183838, -2.337453842163086], + [-3.9145944118499756, -1.7152341604232788], + [3.4082939624786377, -5.64055061340332], + [0.1318058967590332, 8.672048568725586], + [-0.6529439091682434, 10.282180786132812], + [0.19962650537490845, 8.772144317626953], + [0.15461385250091553, 10.252846717834473], + [3.830080270767212, 6.04396915435791], + [2.9251503944396973, -4.106371879577637], + [-2.1945793628692627, -0.7362306118011475], + [0.2703811526298523, 11.039905548095703], + [-0.5605117082595825, -4.803585529327393], + [2.581846237182617, -5.724654197692871], + [-3.3675599098205566, 5.516552925109863], + [-0.7698724865913391, -2.941918134689331], + [6.6769585609436035, -5.359646797180176], + [-4.468923568725586, -1.475389838218689], + [3.1270792484283447, -6.6222639083862305], + [4.538079738616943, 6.294211387634277], + [1.0480341911315918, 0.9430860280990601], + [1.191388726234436, -6.71840763092041], + [8.280566215515137, -2.4610726833343506], + [2.6965677738189697, -3.755535840988159], + [1.8999043703079224, 2.0291993618011475], + [2.602936029434204, -4.432319641113281], + [-3.901556968688965, -3.209646463394165], + [3.073533773422241, -4.170019149780273], + [1.9096572399139404, 0.8742038011550903], + [6.070215225219727, -2.4262888431549072], + [6.543538570404053, 7.939902305603027], + [4.1336236000061035, -6.776171684265137], + [2.3280534744262695, 4.762098789215088], + [0.11856555193662643, 11.541875839233398], + [3.2228517532348633, -4.481512546539307], + [-1.717790961265564, 2.4473743438720703], + [3.7818405628204346, 6.833602428436279], + [3.5278003215789795, 1.409587025642395], + [3.668440103530884, 1.0045802593231201], + [6.581272602081299, 8.407598495483398], + [-3.746267557144165, -5.192600250244141], + [1.558064341545105, 1.7875922918319702], + [11.859256744384766, -2.5826823711395264], + [0.24805310368537903, -1.2835947275161743], + [-3.8316633701324463, -4.059199333190918], + [-3.9614994525909424, 5.611601829528809], + [8.112447738647461, -2.3054006099700928], + [3.8330090045928955, -5.391758441925049], + [-5.1447014808654785, -3.4014527797698975], + [-4.358689308166504, -2.2484142780303955], + [10.370223045349121, -2.436042070388794], + [5.994572162628174, -1.337372899055481], + [-4.3962721824646, -6.422652721405029], + [-2.584212303161621, 1.8362596035003662], + [-0.03455603867769241, 12.321569442749023], + [3.806704521179199, -3.3140344619750977], + [-3.557563304901123, -4.82628059387207], + [2.8786163330078125, -4.076170921325684], + [3.8453192710876465, 6.114051818847656], + [2.19405460357666, 1.1760468482971191], + [-4.045058727264404, -3.1629557609558105], + [-0.05774933844804764, 12.509419441223145], + [-3.4029524326324463, -1.6119122505187988], + [2.641814947128296, -8.155604362487793], + [-5.633635997772217, 0.684669554233551], + [-0.33962923288345337, 9.896966934204102], + [6.143005847930908, -2.1633646488189697], + [-2.231382369995117, -0.1991477608680725], + [-5.40485143661499, 7.974506378173828], + [7.609971523284912, -2.7661688327789307], + [-0.4580982029438019, -1.1042907238006592], + [0.03792160004377365, 11.747110366821289], + [-2.071587324142456, 1.65848970413208], + [-4.263472080230713, 5.0196709632873535], + [-4.672271728515625, -7.51418399810791], + [9.79769229888916, -2.4188802242279053], + [3.096243381500244, -3.2141027450561523], + [-1.4078634977340698, 0.3242807984352112], + [4.544429779052734, 0.7895216941833496], + [3.0983049869537354, -1.3480366468429565], + [2.1014130115509033, 4.594718933105469], + [7.798643589019775, -1.9889336824417114], + [-1.9844523668289185, 2.5486605167388916], + [-5.154185771942139, -1.292181134223938], + [6.10784387588501, 7.934120178222656], + [5.91222620010376, -1.0052014589309692], + [3.9967167377471924, -3.3317532539367676], + [5.392893314361572, -3.616676092147827], + [0.596640944480896, -0.9799347519874573], + [0.1955050826072693, -4.530414581298828], + [-6.989160060882568, 8.27119255065918], + [8.187023162841797, -2.217456102371216], + [-0.5790057182312012, 9.019041061401367], + [-4.379968166351318, -7.179105758666992], + [-3.7501070499420166, -3.8950722217559814], + [-3.681810140609741, 3.1216466426849365], + [4.146651744842529, -1.8230786323547363], + [-0.3384438157081604, -1.1085619926452637], + [0.22615903615951538, 10.742762565612793], + [2.162158727645874, -7.496058464050293], + [1.0543937683105469, 2.5977418422698975], + [2.975172758102417, -8.85195541381836], + [-2.330383777618408, 2.822237968444824], + [-3.8574068546295166, 6.008487701416016], + [6.519979000091553, -1.8642786741256714], + [0.17389923334121704, 10.413480758666992], + [-2.984283685684204, -2.8107826709747314], + [-4.6446852684021, -0.8411306142807007], + [6.335384845733643, -3.069017171859741], + [-0.09074745327234268, -1.6055288314819336], + [0.06321769207715988, 10.036731719970703], + [0.11748521775007248, 12.452187538146973], + [3.0158584117889404, -8.03065299987793], + [-2.9540674686431885, 4.354433536529541], + [0.08888279646635056, 10.644186019897461], + [9.538804054260254, -2.281888246536255], + [-6.289788722991943, 7.190433502197266], + [2.6539580821990967, -3.7870891094207764], + [-0.03413880616426468, 13.226054191589355], + [0.5360599160194397, 11.478221893310547], + [0.2966163158416748, 10.623221397399902], + [-4.6489386558532715, -7.085807800292969], + [7.774254322052002, -2.304670810699463], + [3.7251486778259277, -7.444983005523682], + [-0.05326337367296219, 9.714679718017578], + [5.225269317626953, 8.101115226745605], + [-2.1228623390197754, 2.618584394454956], + [0.09373166412115097, -1.1686450242996216], + [8.490970611572266, -2.2535433769226074], + [10.791611671447754, -2.505702257156372], + [-2.8068559169769287, 2.0278711318969727], + [3.361903667449951, -4.0618977546691895], + [2.679703950881958, -2.93046498298645], + [0.2930998206138611, 11.331920623779297], + [7.159576892852783, -2.154297113418579], + [-2.5946152210235596, 1.9113144874572754], + [2.1543564796447754, -3.080756902694702], + [6.3668036460876465, -3.896233558654785], + [-0.11073393374681473, 14.283838272094727], + [6.2176899909973145, 8.344858169555664], + [3.2752280235290527, 4.730811595916748], + [-4.56149435043335, -2.0428619384765625], + [-3.086125373840332, 0.7537561058998108], + [5.967002868652344, -1.3524304628372192], + [-5.155420303344727, -1.1678063869476318], + [7.03709077835083, -4.07045841217041], + [2.823631525039673, -3.7742080688476562], + [3.082683801651001, -2.8997738361358643], + [-3.3606910705566406, -2.122518301010132], + [3.0987870693206787, 4.976190090179443], + [6.075144290924072, 7.641108512878418], + [-2.5943644046783447, 1.7422930002212524], + [6.798671245574951, -4.000651836395264], + [1.2984352111816406, -7.531414985656738], + [-1.9986417293548584, 1.0231008529663086], + [4.7242751121521, 6.765427589416504], + [-5.322216033935547, 7.816091537475586], + [4.976624011993408, -2.901156187057495], + [-2.154430389404297, -1.119437336921692], + [2.0525104999542236, -8.722784042358398], + [5.7244439125061035, 7.942478179931641], + [-3.6981751918792725, -3.856250047683716], + [3.141509771347046, -3.1837661266326904], + [6.26101541519165, 7.92158317565918], + [-1.2542674541473389, -0.15735992789268494], + [6.390612602233887, -1.4056413173675537], + [0.7306119799613953, 10.598382949829102], + [3.113008737564087, -3.4291865825653076], + [-2.2635080814361572, -3.6944940090179443], + [-2.114211320877075, 2.1883163452148438], + [3.1687703132629395, -7.743542194366455], + [-4.501990795135498, -7.1641845703125], + [-5.078612804412842, 5.680210113525391], + [-6.742516040802002, 1.6143144369125366], + [-0.23335176706314087, -0.3016502559185028], + [5.031002521514893, -1.9288873672485352], + [-1.2225923538208008, 0.31955084204673767], + [2.886791467666626, -3.904987335205078], + [2.3049674034118652, 2.9505503177642822], + [-1.835538625717163, 1.1706711053848267], + [-0.06912750750780106, 13.449186325073242], + [-1.9422619342803955, 2.294569730758667], + [1.5207173824310303, -4.450753688812256], + [2.9202253818511963, -4.160683631896973], + [-1.9307806491851807, 1.593607783317566], + [0.1545090675354004, 5.1059489250183105], + [3.466233015060425, 6.943214416503906], + [-2.0953853130340576, 2.3163604736328125], + [3.4035654067993164, -7.399435520172119], + [1.5087954998016357, -7.7950439453125], + [-3.8934996128082275, 3.746500015258789], + [8.591050148010254, -2.3481595516204834], + [-0.04031924158334732, -3.7646074295043945], + [1.9161964654922485, 5.393032073974609], + [-4.437949180603027, -5.8731231689453125], + [0.06149118393659592, 12.561685562133789], + [-0.954917848110199, -2.4651663303375244], + [3.727102279663086, -3.318204164505005], + [4.470173358917236, 7.225772380828857], + [4.273501873016357, -3.1275665760040283], + [0.3018200993537903, 10.207362174987793], + [9.204318046569824, -2.4240798950195312], + [-1.566735029220581, 5.795021057128906], + [-2.214608669281006, 2.864614725112915], + [5.09364652633667, 6.363853931427002], + [-3.1427767276763916, -3.8135926723480225], + [1.8733999729156494, -7.2161102294921875], + [1.549299955368042, 2.250563144683838], + [3.9212372303009033, -8.579294204711914], + [0.08543085306882858, 10.239829063415527], + [-7.052637577056885, -0.09108197689056396], + [0.27874332666397095, 11.673673629760742], + [0.10049831122159958, 11.51752758026123], + [-2.5035955905914307, -3.153196334838867], + [-2.0250208377838135, -1.975599765777588], + [-5.49701452255249, 5.423464775085449], + [-5.526486873626709, -1.3160030841827393], + [-4.736898422241211, -1.399526596069336], + [3.1878864765167236, -4.672445297241211], + [0.19580340385437012, 10.750856399536133], + [-1.801781415939331, -3.749103307723999], + [4.3480987548828125, 7.181432723999023], + [-0.03291083127260208, 7.830805778503418], + [3.577913284301758, -3.090895891189575], + [4.4071455001831055, -3.723647356033325], + [6.522084712982178, 8.201181411743164], + [2.652355909347534, 1.9883288145065308], + [-1.5664485692977905, 2.0583159923553467], + [-6.558941841125488, 7.721655368804932], + [2.4799869060516357, 6.94282341003418], + [2.47762131690979, -4.813019275665283], + [8.422689437866211, -2.200591802597046], + [-2.980372428894043, -1.3131346702575684], + [-3.8536150455474854, -3.118760585784912], + [-3.0010085105895996, -4.332164764404297], + [-3.4471805095672607, -5.044443130493164], + [-0.8314291834831238, -3.034306287765503], + [0.14090174436569214, 9.642937660217285], + [-4.74261999130249, 4.4473114013671875], + [0.28573280572891235, 11.754106521606445], + [8.028552055358887, -2.243342638015747], + [-2.506519079208374, -4.931626319885254], + [-0.24005472660064697, 9.856581687927246], + [-2.1531763076782227, 2.7074217796325684], + [-2.1822597980499268, 2.6163599491119385], + [-1.5341427326202393, 1.8701542615890503], + [-2.451680898666382, -5.409743309020996], + [1.1470082998275757, -0.2483796626329422], + [0.8484948873519897, -4.048574447631836], + [-1.5983892679214478, -0.7440191507339478], + [2.3325164318084717, 5.040444374084473], + [2.3072752952575684, 5.075594902038574], + [2.2497403621673584, 4.266381740570068], + [-3.2844045162200928, 4.363283634185791], + [3.152381181716919, -7.237392902374268], + [-1.9309481382369995, 2.2852487564086914], + [-0.04461187869310379, 9.406777381896973], + [-2.5093696117401123, 1.6507692337036133], + [2.0935423374176025, 5.269037246704102], + [3.634910821914673, -8.521215438842773], + [5.634153842926025, -2.2422749996185303], + [6.333278179168701, -1.4195737838745117], + [-0.26450812816619873, 0.2766674757003784], + [-4.43154764175415, 3.872833490371704], + [-0.14037638902664185, 13.17525577545166], + [2.495695114135742, 1.3755284547805786], + [-0.06426655501127243, -1.555503010749817], + [-2.977468252182007, 4.610033988952637], + [8.175575256347656, -2.5159153938293457], + [2.7538998126983643, -2.3531322479248047], + [-1.5534557104110718, -0.7299023270606995], + [4.0559983253479, -3.665245532989502], + [-1.6030144691467285, 1.9218556880950928], + [1.4460527896881104, 3.7041919231414795], + [-3.6150803565979004, -1.1413298845291138], + [-4.2113261222839355, 5.7422285079956055], + [-2.3085708618164062, 2.5159895420074463], + [3.0693702697753906, -5.723075866699219], + [-6.832857608795166, -0.5711784958839417], + [0.25024813413619995, 9.060627937316895], + [-3.512519121170044, -4.254645347595215], + [1.0851709842681885, -2.102142572402954], + [6.166374683380127, -5.672046661376953], + [-4.0342535972595215, 2.2422237396240234], + [-6.112729072570801, 0.6849709749221802], + [-4.75059175491333, 4.4744672775268555], + [8.243837356567383, -2.259518623352051], + [-4.345587730407715, -0.07493799924850464], + [-2.2704546451568604, 2.502596378326416], + [8.81710147857666, -2.3525478839874268], + [0.181471049785614, 10.260992050170898], + [-2.3400349617004395, 2.022374391555786], + [2.866175889968872, -3.867781400680542], + [-4.115784645080566, -3.568845272064209], + [0.10481875389814377, 11.029565811157227], + [3.4156265258789062, -2.802622079849243], + [-5.776881694793701, 0.09740126132965088], + [2.1021816730499268, 1.0576834678649902], + [-3.8576443195343018, -6.186468124389648], + [-2.1820971965789795, 2.55441951751709], + [0.3032221794128418, -0.4065066874027252], + [-1.7071661949157715, 2.322878122329712], + [8.928357124328613, -2.323989152908325], + [6.4172492027282715, 8.03564453125], + [4.046680927276611, -3.5176992416381836], + [4.111179351806641, 5.38310432434082], + [3.1312198638916016, -4.093508243560791], + [2.0340805053710938, -5.863510608673096], + [-3.4887073040008545, -5.406760215759277], + [11.1738862991333, -2.577479124069214], + [3.2993996143341064, -6.568785190582275], + [-6.506898403167725, 7.537481784820557], + [4.255077838897705, -3.6397860050201416], + [-4.739138126373291, -7.551530361175537], + [2.6470863819122314, 4.764079570770264], + [-1.638450264930725, -3.1037096977233887], + [-5.206536769866943, -2.98053240776062], + [3.8999671936035156, -3.632519483566284], + [3.4538090229034424, -6.2834577560424805], + [-4.276208877563477, 5.938937664031982], + [3.059274673461914, -4.046450138092041], + [3.0836246013641357, 5.510457992553711], + [-2.457949638366699, 1.4678852558135986], + [1.4150928258895874, -0.02488883212208748], + [-2.241654872894287, 1.1808850765228271], + [0.2855733036994934, 11.41697883605957], + [-2.315656900405884, 2.109456777572632], + [-6.9755120277404785, 7.608089447021484], + [0.03343193978071213, 12.649036407470703], + [3.144378900527954, 1.1862714290618896], + [-6.219899654388428, 6.441965579986572], + [-0.37371519207954407, -1.836572527885437], + [0.6027117371559143, 0.3192022442817688], + [3.2730984687805176, -3.4713082313537598], + [-2.2549614906311035, 2.3245513439178467], + [-0.2432267963886261, -1.7481436729431152], + [1.0395289659500122, -6.755527496337891], + [2.320204019546509, 4.8409318923950195], + [-2.984517812728882, 0.7582476139068604], + [-2.2761480808258057, -3.1970713138580322], + [2.0276880264282227, 5.1327667236328125], + [4.730099201202393, -3.6424734592437744], + [7.944234371185303, -2.0862045288085938], + [6.356516361236572, -3.348262071609497], + [-3.890244722366333, -1.269869089126587], + [-4.753589153289795, -7.4173383712768555], + [2.4850471019744873, 1.0687196254730225], + [10.900716781616211, -2.5750162601470947], + [3.3213553428649902, -2.3518433570861816], + [-2.4566147327423096, 1.8694733381271362], + [1.6442183256149292, 0.8080425262451172], + [-3.461637258529663, -0.8603002429008484], + [-5.608377456665039, -2.296236515045166], + [-2.846234083175659, 1.3983367681503296], + [-3.668154001235962, 4.992028713226318], + [-4.60761022567749, -0.8788219690322876], + [0.01688956469297409, -1.5983436107635498], + [0.14328891038894653, 8.716226577758789], + [7.1586995124816895, -1.954816460609436], + [2.7244908809661865, -1.7678278684616089], + [-0.11425525695085526, 9.409143447875977], + [-4.379481792449951, -6.529412269592285], + [-3.3962042331695557, -2.5910844802856445], + [4.162149906158447, 1.700008511543274], + [2.696796178817749, 4.381264686584473], + [-2.36517333984375, 0.6302534341812134], + [8.444266319274902, -2.2169246673583984], + [1.0430413484573364, -4.37391996383667], + [-4.244350433349609, -3.8655309677124023], + [-3.152434825897217, 3.268509864807129], + [-7.8231096267700195, 0.19553661346435547], + [3.324414014816284, 6.887146472930908], + [4.62432336807251, 1.26425039768219], + [1.719146728515625, -5.9605255126953125], + [5.939274787902832, -1.250095009803772], + [-2.3168587684631348, 2.3099489212036133], + [3.866610288619995, -3.3350627422332764], + [3.87104868888855, -8.516340255737305], + [4.297831058502197, -3.7002997398376465], + [9.953046798706055, -2.394529342651367], + [0.02454947680234909, 9.207475662231445], + [0.7142210006713867, -0.9085004329681396], + [-4.439322471618652, -6.714818000793457], + [-2.0713465213775635, 2.401282787322998], + [1.8874216079711914, 0.7555379867553711], + [3.0605709552764893, -9.748950004577637], + [2.7980923652648926, 4.5254669189453125], + [3.18713641166687, 4.790316104888916], + [0.014500431716442108, 13.758054733276367], + [2.8386905193328857, 3.7777204513549805], + [-4.3203606605529785, -0.947243332862854], + [-1.9086730480194092, -2.506392240524292], + [-4.287589073181152, -6.262179374694824], + [3.287438154220581, -7.2311930656433105], + [1.1205087900161743, -6.398189544677734], + [-4.893130779266357, 4.202184677124023], + [-4.77184534072876, 4.954883575439453], + [2.3296432495117188, 4.400052070617676], + [-2.502269983291626, -2.8604376316070557], + [2.463033437728882, 4.1898932456970215], + [-6.43657922744751, 6.728966236114502], + [4.743716716766357, -4.113255977630615], + [-6.316806316375732, 2.5766103267669678], + [-4.02354097366333, 5.4940948486328125], + [-3.7972543239593506, -3.933865785598755], + [-3.82742977142334, -6.666325092315674], + [-1.4230040311813354, -1.7275151014328003], + [5.6294355392456055, 7.9381022453308105], + [4.508264064788818, 6.563830852508545], + [-2.615330934524536, 1.9790767431259155], + [-3.8925373554229736, -2.6203136444091797], + [1.672011137008667, -7.879409313201904], + [7.707241535186768, -2.5856258869171143], + [7.979679584503174, -2.05196475982666], + [2.356086492538452, 6.17515754699707], + [0.20961207151412964, 10.753317832946777], + [2.72807240486145, -8.365039825439453], + [-5.136622428894043, 4.758636474609375], + [3.679551362991333, 6.795338153839111], + [-1.263854742050171, 0.08444961905479431], + [1.13405179977417, -6.725143909454346], + [8.96638011932373, -2.2528204917907715], + [-4.451097011566162, -0.6048705577850342], + [7.529116630554199, 9.073667526245117], + [5.25813627243042, 7.771826267242432], + [1.8809924125671387, -2.2030861377716064], + [1.4374094009399414, 1.4788761138916016], + [1.4130196571350098, 5.4501471519470215], + [3.3650033473968506, -9.474626541137695], + [0.6473404765129089, 10.58671760559082], + [10.312212944030762, -2.523672103881836], + [-1.1669198274612427, -1.0114493370056152], + [-2.484164237976074, 1.6316988468170166], + [-4.494723320007324, 3.079336166381836], + [-3.8384053707122803, -2.2003047466278076], + [3.540522813796997, -8.49089241027832], + [1.344343900680542, -0.5614341497421265], + [-2.413189172744751, 1.310854196548462], + [3.9476020336151123, 6.341666221618652], + [-3.9684267044067383, 4.16309928894043], + [-4.288975715637207, -2.6735336780548096], + [6.9136576652526855, -5.1620097160339355], + [3.1012372970581055, -4.357831001281738], + [-3.077343225479126, 0.05713927373290062], + [1.1672167778015137, 5.988999366760254], + [3.3857457637786865, -7.9584550857543945], + [9.063674926757812, -2.6117911338806152], + [6.3630146980285645, 7.86658239364624], + [3.0824811458587646, 6.310918807983398], + [6.004931449890137, 7.750691890716553], + [3.0177619457244873, -4.232211112976074], + [-1.0407580137252808, 0.8338260650634766], + [-0.9136670231819153, 6.202489852905273], + [0.428697407245636, 11.569158554077148], + [2.722254991531372, -3.881944179534912], + [0.20790010690689087, 11.772971153259277], + [-0.7347710728645325, -2.8215558528900146], + [1.4577903747558594, 0.01933404430747032], + [-3.91941237449646, 7.883781909942627], + [3.4025728702545166, -2.907238483428955], + [-3.3642799854278564, -5.744328498840332], + [3.9239327907562256, 1.6442238092422485], + [7.2585129737854, 8.888984680175781], + [-3.5784382820129395, -3.8057138919830322], + [-4.344106197357178, -3.7952845096588135], + [10.886624336242676, -2.466090440750122], + [6.6486711502075195, -1.7189823389053345], + [3.279667615890503, -8.632226943969727], + [-2.1429715156555176, 2.6449639797210693], + [1.1238449811935425, 1.3055312633514404], + [1.6802575588226318, -4.982889175415039], + [-4.097683906555176, 6.700823783874512], + [2.4523961544036865, -8.079378128051758], + [7.181224346160889, -4.363901138305664], + [3.329049825668335, 5.969127655029297], + [4.639573097229004, 1.9959126710891724], + [0.0926881656050682, -0.717721700668335], + [-5.477785587310791, 5.024379730224609], + [2.8075733184814453, -7.545362949371338], + [-4.668616771697998, -5.791836738586426], + [10.304999351501465, -2.440993070602417], + [-2.06986927986145, 2.309356927871704], + [0.25922441482543945, 9.666016578674316], + [2.9679853916168213, -4.22426176071167], + [-4.321176052093506, 4.588986873626709], + [-3.12380051612854, -4.135280609130859], + [-4.469974040985107, -6.631903171539307], + [9.869893074035645, -2.3674285411834717], + [4.757335662841797, -3.8907835483551025], + [-4.755284786224365, -6.5805463790893555], + [-1.9507439136505127, 3.181253433227539], + [4.246978759765625, -3.666292667388916], + [7.608068943023682, -4.183218479156494], + [7.268879413604736, -1.7340186834335327], + [3.3802549839019775, -3.210068941116333], + [8.454024314880371, -2.3172030448913574], + [0.13205796480178833, 13.297576904296875], + [3.5832760334014893, 6.330813407897949], + [-3.224478006362915, -2.8524389266967773], + [3.531268358230591, -3.2843146324157715], + [2.2055110931396484, -7.944240093231201], + [-5.482579708099365, -1.8295027017593384], + [-3.301239490509033, -1.0259826183319092], + [-3.3498170375823975, 5.899930477142334], + [2.8440606594085693, -4.019694805145264], + [-3.263937473297119, 5.110411643981934], + [3.699101209640503, -4.125736236572266], + [8.679059028625488, -2.2752559185028076], + [3.104823589324951, -5.869712829589844], + [6.259800910949707, 7.850346088409424], + [4.917732238769531, -6.145323753356934], + [0.2919532060623169, -5.487041473388672], + [3.1198837757110596, -2.3607797622680664], + [4.146406650543213, 1.4320391416549683], + [-2.0162227153778076, 0.22980362176895142], + [-7.106765270233154, 8.538756370544434], + [3.151245594024658, 0.871229350566864], + [-2.142054319381714, -0.8296626806259155], + [4.989268779754639, 6.291325569152832], + [3.9128713607788086, -6.038118362426758], + [-4.517379283905029, -7.509400367736816], + [3.323047399520874, -2.8729493618011475], + [-4.4369378089904785, 4.889076232910156], + [-0.04476393014192581, 9.983951568603516], + [7.703427791595459, -2.5427634716033936], + [2.8741390705108643, -9.460406303405762], + [0.019796662032604218, 10.083849906921387], + [-5.151137351989746, 6.733063697814941], + [-3.2764389514923096, -0.9489642381668091], + [3.5546762943267822, -4.192756652832031], + [-6.985586166381836, 7.774235248565674], + [8.780499458312988, -2.460139513015747], + [2.265383720397949, 5.041548252105713], + [6.727305889129639, -5.837392330169678], + [1.413989782333374, -5.438730716705322], + [-3.5059897899627686, 3.897850751876831], + [5.435347080230713, 7.25775146484375], + [3.399871349334717, -5.305974960327148], + [7.766154766082764, -2.0737431049346924], + [1.8760569095611572, 2.786979913711548], + [2.6861867904663086, 0.8610362410545349], + [3.4636569023132324, -7.6317219734191895], + [-5.875537395477295, 7.800777435302734], + [9.075339317321777, -2.3429811000823975], + [1.7521017789840698, 0.2153203785419464], + [11.389070510864258, -2.5610222816467285], + [1.2260472774505615, -0.0389951653778553], + [9.098301887512207, -2.6096465587615967], + [-2.318455934524536, -2.3132855892181396], + [4.481748104095459, 6.881242752075195], + [-3.5529086589813232, -5.248350143432617], + [3.2926013469696045, -7.40023946762085], + [5.732263565063477, -1.3929212093353271], + [-2.159773826599121, 2.793684244155884], + [0.5228220820426941, 10.89777946472168], + [0.5670493245124817, -1.246854305267334], + [5.898574352264404, -1.7093151807785034], + [-3.814694881439209, -1.9660930633544922], + [5.671529293060303, 7.792604923248291], + [-3.404968500137329, -2.307408332824707], + [5.562621116638184, -5.299814701080322], + [0.15038055181503296, 9.92502498626709], + [6.527933120727539, -2.924307107925415], + [-3.1734278202056885, 4.965038299560547], + [1.303760051727295, 2.935133218765259], + [-2.1094210147857666, 1.8147269487380981], + [8.947709083557129, -2.7521467208862305], + [3.9670135974884033, -3.612002372741699], + [1.818129301071167, 4.157855987548828], + [8.070877075195312, -2.487966775894165], + [4.099967956542969, 1.817810297012329], + [0.13185620307922363, 10.041754722595215], + [2.182964563369751, -0.30427706241607666], + [-2.109297275543213, 2.7650868892669678], + [2.7380950450897217, 3.239388942718506], + [0.08943425863981247, 9.80859375], + [1.7520418167114258, -5.182395935058594], + [2.887141466140747, -9.256040573120117], + [-2.7261593341827393, -4.990395545959473], + [5.877774715423584, 7.490476131439209], + [6.238338947296143, -4.410394668579102], + [-5.038913726806641, 4.660840034484863], + [-3.108902931213379, -3.0977818965911865], + [-1.4804553985595703, -0.6575194597244263], + [2.9522340297698975, -2.5973868370056152], + [3.140343427658081, -4.435382843017578], + [7.112161159515381, -6.227957725524902], + [6.817702293395996, 8.326797485351562], + [7.028342247009277, -2.1139674186706543], + [-4.274173259735107, -3.5622947216033936], + [3.3313403129577637, 1.5616098642349243], + [3.539757013320923, -4.286772727966309], + [-1.2769707441329956, 1.2631127834320068], + [1.863451361656189, -5.670875072479248], + [3.8842427730560303, 7.382935523986816], + [-4.435845851898193, -7.27932071685791], + [8.413049697875977, -2.569425344467163], + [-4.0996270179748535, 3.5298941135406494], + [-0.19597390294075012, -1.1974751949310303], + [-3.512969732284546, -3.314617156982422], + [5.642555236816406, 7.7627434730529785], + [7.373277187347412, -3.2501401901245117], + [6.177687168121338, 8.094825744628906], + [1.2553179264068604, -0.2842799127101898], + [2.533693552017212, 0.2992941439151764], + [-7.242934703826904, 8.468059539794922], + [0.009718768298625946, 12.125078201293945], + [6.235235214233398, -4.4556097984313965], + [-4.405306816101074, -6.671370029449463], + [7.737390995025635, -2.2774951457977295], + [4.1822733879089355, -3.7633607387542725], + [8.263992309570312, -2.2459914684295654], + [-3.183494806289673, -0.10851669311523438], + [-2.3873708248138428, -4.751535415649414], + [10.832510948181152, -2.483431816101074], + [-6.306934356689453, -0.982646107673645], + [3.509869337081909, -4.617451190948486], + [6.072071075439453, -1.213852047920227], + [4.052468776702881, 7.485610008239746], + [-5.463983058929443, 1.0708979368209839], + [-2.1624879837036133, 2.642298698425293], + [-3.199418067932129, -4.6187744140625], + [3.1475603580474854, 5.753910064697266], + [0.8416106104850769, -0.7293093204498291], + [4.124876022338867, -7.877077102661133], + [0.8090659976005554, -0.33836305141448975], + [1.984675407409668, -3.0012195110321045], + [2.0802793502807617, 2.526409387588501], + [2.040245294570923, 3.113600969314575], + [-1.0383541584014893, 0.9845751523971558], + [-2.339790105819702, 2.1218769550323486], + [3.062795877456665, -4.359503746032715], + [0.03915267437696457, 12.25112533569336], + [2.5853610038757324, -8.549756050109863], + [2.602043390274048, -2.725191831588745], + [8.649479866027832, -2.5420639514923096], + [-2.2245466709136963, 2.6477158069610596], + [2.4434611797332764, -8.136994361877441], + [-6.475327968597412, -1.9256561994552612], + [4.863606929779053, -4.297959804534912], + [3.2787024974823, -8.042082786560059], + [-4.3507914543151855, -5.760339736938477], + [6.712610244750977, -2.9419777393341064], + [-2.410712480545044, -4.7088189125061035], + [2.947596788406372, -4.188600540161133], + [-5.0001397132873535, 5.794957160949707], + [3.292780637741089, 1.5786799192428589], + [3.1456849575042725, -5.245744705200195], + [8.930891036987305, -2.394036054611206], + [-0.22392329573631287, -1.6816127300262451], + [-1.8340203762054443, 3.6259024143218994], + [-4.183863162994385, 3.7100350856781006], + [-2.3194825649261475, 1.1952370405197144], + [9.212342262268066, -2.4209959506988525], + [-2.2082595825195312, 5.757594585418701], + [2.0404911041259766, 5.053532600402832], + [-0.7511518597602844, -3.12557053565979], + [-3.6725549697875977, -2.959510326385498], + [-0.10641569644212723, 10.175276756286621], + [-6.1815290451049805, -1.5863655805587769], + [2.956571102142334, 1.7424663305282593], + [2.310699701309204, -8.853776931762695], + [3.7744252681732178, -8.189300537109375], + [-4.531442165374756, 4.577594757080078], + [3.0341336727142334, -6.01496696472168], + [3.785003662109375, 6.661151885986328], + [-4.290140628814697, -2.145237684249878], + [2.934190511703491, -4.139397621154785], + [4.342060565948486, -6.048659324645996], + [-4.473430156707764, -6.682456970214844], + [3.0054123401641846, -4.166895866394043], + [5.672693252563477, 6.905074596405029], + [-5.995815753936768, 5.484469890594482], + [3.5654640197753906, -3.2202413082122803], + [-3.5212864875793457, -2.9071507453918457], + [-0.8309284448623657, -3.3166544437408447], + [7.885801792144775, -2.2609691619873047], + [-2.275291681289673, 2.146665096282959], + [8.82152271270752, -2.394000768661499], + [-2.114048957824707, 2.5501606464385986], + [-0.06802768260240555, 10.13997745513916], + [1.3668603897094727, -6.8233323097229], + [0.4552883505821228, 10.743865966796875], + [6.483578205108643, -1.7208150625228882], + [3.2159719467163086, 7.587869167327881], + [9.287059783935547, -2.281351327896118], + [2.149434804916382, 2.474268913269043], + [-1.813518762588501, 1.0707355737686157], + [8.658402442932129, -2.258857011795044], + [2.2278647422790527, 5.691620826721191], + [-4.905160903930664, 3.356114149093628], + [1.0973997116088867, -7.155508995056152], + [5.904358386993408, 8.281831741333008], + [3.8820769786834717, 1.703658938407898], + [-5.308507442474365, 4.796889781951904], + [0.06279342621564865, 12.18093204498291], + [-1.2820379734039307, -3.782848596572876], + [-2.3224899768829346, 2.513911247253418], + [1.5591912269592285, 3.49599289894104], + [4.743954658508301, -4.04617166519165], + [-4.4544758796691895, -3.4188764095306396], + [7.549962520599365, -2.4560511112213135], + [2.1944162845611572, -7.334352493286133], + [-6.6337504386901855, -1.9774636030197144], + [2.03743314743042, 0.4183245897293091], + [-6.558837890625, -0.8569594621658325], + [1.983426809310913, 1.8183377981185913], + [-2.0868797302246094, 2.3547661304473877], + [5.451493740081787, 7.552692413330078], + [-3.596548318862915, -1.2661257982254028], + [2.0345141887664795, 1.582788348197937], + [-3.662255048751831, -5.297811508178711], + [8.474329948425293, -2.437918186187744], + [3.1927478313446045, -6.734221458435059], + [-4.609602928161621, -6.948769569396973], + [6.9347758293151855, -1.5458673238754272], + [8.550816535949707, -2.3033788204193115], + [3.147907018661499, -4.439889907836914], + [-2.556170701980591, 1.7961349487304688], + [-2.979271173477173, -0.673952579498291], + [-4.577019691467285, 5.151578903198242], + [4.949581146240234, -3.6792662143707275], + [3.8787267208099365, 5.251362323760986], + [-0.3282480537891388, 0.029169436544179916], + [3.550431966781616, 2.0359082221984863], + [-8.018367767333984, -0.645458459854126], + [0.186687171459198, 10.48634147644043], + [2.9199399948120117, -10.365345001220703], + [-7.49325704574585, 8.79399299621582], + [-0.12403399497270584, 11.413646697998047], + [5.080953121185303, -3.0355067253112793], + [4.015459060668945, -4.337993621826172], + [-5.901858806610107, 8.341306686401367], + [8.367069244384766, -2.190796375274658], + [-5.5738959312438965, 4.9484543800354], + [-4.415476322174072, 4.315676689147949], + [-2.0406014919281006, -4.267437934875488], + [-5.748992443084717, -3.186943769454956], + [8.025559425354004, -2.1692616939544678], + [0.5444533228874207, -1.2369836568832397], + [3.2977497577667236, -8.369623184204102], + [-0.006039448082447052, 12.752678871154785], + [-0.046195633709430695, 9.217533111572266], + [5.829033374786377, -2.767132520675659], + [-5.060679912567139, -0.5133301019668579], + [-3.465165376663208, 4.948061943054199], + [3.5890824794769287, -3.4516072273254395], + [-5.0621562004089355, -1.3639510869979858], + [-2.64164137840271, -3.7643518447875977], + [8.632026672363281, -2.2855188846588135], + [-5.019312858581543, -6.8473896980285645], + [-2.335946559906006, 1.203381896018982], + [6.9999003410339355, 8.608856201171875], + [2.0707948207855225, 2.4157941341400146], + [-4.0594635009765625, -6.158820629119873], + [-6.321601390838623, 4.498754501342773], + [-2.1313087940216064, 0.4350219666957855], + [-5.365437984466553, -0.6414281129837036], + [-4.021486759185791, -2.7060508728027344], + [7.431126594543457, -2.3323776721954346], + [7.083175182342529, -4.846351146697998], + [6.295690059661865, -1.3915189504623413], + [-4.948741436004639, -7.801663875579834], + [7.766443729400635, -2.11222243309021], + [-3.906085968017578, -4.291280269622803], + [-0.8770720362663269, -3.1980648040771484], + [5.640639781951904, 7.287914276123047], + [2.6522021293640137, -8.392541885375977], + [-7.397122859954834, 7.566732406616211], + [3.4490225315093994, 1.6352168321609497], + [0.1393134593963623, -1.4677281379699707], + [-5.11525297164917, -7.771344184875488], + [7.225801944732666, 8.682381629943848], + [-6.695379734039307, -2.2653048038482666], + [3.963282823562622, -2.839688777923584], + [8.058228492736816, -2.024402618408203], + [-4.6985955238342285, -4.906806945800781], + [4.871250152587891, 7.345508575439453], + [0.21566081047058105, 10.312397956848145], + [-7.610475063323975, 8.933320999145508], + [-4.500932216644287, -6.825680732727051], + [-5.2983078956604, 6.707059383392334], + [1.177774429321289, 6.197910308837891], + [-2.275561571121216, 3.0642130374908447], + [1.4281126260757446, 0.10856133699417114], + [4.901134490966797, -2.1886990070343018], + [7.152685642242432, -5.9260663986206055], + [2.89155912399292, 0.6159547567367554], + [2.4136135578155518, -8.219156265258789], + [-5.540091037750244, 6.5562872886657715], + [6.636584281921387, -2.0608527660369873], + [2.914118528366089, -4.182347774505615], + [2.163506269454956, -3.734160900115967], + [8.200155258178711, -2.461402416229248], + [7.276152610778809, -2.009565830230713], + [0.034141235053539276, 11.96013069152832], + [-5.057384014129639, -7.907098293304443], + [2.805842638015747, -9.956440925598145], + [2.58394193649292, -9.510387420654297], + [4.247285842895508, -3.644744634628296], + [-2.844933271408081, 2.415975570678711], + [4.623311519622803, -1.0188541412353516], + [-0.8702138662338257, 1.5248725414276123], + [-1.5383756160736084, 2.8760836124420166], + [-3.5309112071990967, -6.271251678466797], + [-3.530670642852783, -2.869828224182129], + [-3.8411548137664795, -3.569585084915161], + [-4.216981887817383, -1.5643179416656494], + [1.7582848072052002, 0.3384512662887573], + [1.5125128030776978, -7.174053192138672], + [7.730560302734375, 9.19512939453125], + [5.2976813316345215, 6.528040885925293], + [2.348404884338379, -7.906556129455566], + [0.023113660514354706, 13.158645629882812], + [-5.296114444732666, -2.246065378189087], + [9.275663375854492, -2.393047571182251], + [3.143899440765381, -4.416526794433594], + [-6.756608963012695, -0.15701603889465332], + [-2.0738532543182373, 2.577144145965576], + [3.8834826946258545, -3.4918365478515625], + [6.704993724822998, -2.9933321475982666], + [-4.1329755783081055, 3.8872971534729004], + [2.6644933223724365, -3.919877052307129], + [9.515347480773926, -2.3829081058502197], + [3.007406711578369, -6.446434497833252], + [7.491604804992676, -2.0055201053619385], + [-2.144059419631958, 2.8922581672668457], + [0.2411002516746521, 11.045147895812988], + [5.808234691619873, 7.851794242858887], + [-0.342195987701416, -1.7508498430252075], + [5.934977054595947, -1.1897327899932861], + [-3.164219617843628, -4.087806701660156], + [-2.0061769485473633, -3.9774863719940186], + [7.552156925201416, -2.3552210330963135], + [-4.392996311187744, -3.236813545227051], + [7.406216144561768, -2.0086634159088135], + [3.765615940093994, -5.270303249359131], + [-0.7815045714378357, 1.6347813606262207], + [-1.2356208562850952, 1.779754400253296], + [6.950915813446045, -1.6059337854385376], + [5.559071063995361, 7.130687236785889], + [4.502016544342041, -2.8055408000946045], + [-3.3724234104156494, -2.5821268558502197], + [7.791265487670898, -2.03147292137146], + [-5.256168842315674, -2.8161487579345703], + [5.46250057220459, -1.2073851823806763], + [-0.6059387922286987, 0.6910748481750488], + [-0.7249494194984436, 0.9228110909461975], + [0.09115683287382126, 12.108199119567871], + [3.1514317989349365, -3.5353426933288574], + [2.7489941120147705, 2.2346079349517822], + [1.986011028289795, -8.036982536315918], + [9.357933044433594, -2.5206263065338135], + [-2.851917266845703, -1.4369343519210815], + [7.35145902633667, -2.3227622509002686], + [3.0116770267486572, -4.186337471008301], + [3.374976873397827, -4.603665351867676], + [5.131752967834473, 7.10159158706665], + [-2.0414462089538574, 2.3757870197296143], + [-5.872479438781738, -2.5937869548797607], + [-2.454899549484253, 2.09124493598938], + [-0.0246131494641304, 11.947610855102539], + [-2.7921671867370605, -0.35035741329193115], + [11.177947998046875, -2.503737688064575], + [3.8286209106445312, -5.362060546875], + [11.139276504516602, -2.6290366649627686], + [-2.0934152603149414, -0.727989137172699], + [2.0855519771575928, 5.071563243865967], + [-1.9783352613449097, 2.407649278640747], + [2.203540086746216, 0.0954948365688324], + [-1.5762914419174194, 0.3025381863117218], + [-4.463015556335449, -2.286811113357544], + [2.6679904460906982, -9.613922119140625], + [-4.01531457901001, -3.7261040210723877], + [8.989011764526367, -2.3630783557891846], + [-2.1191089153289795, 2.4688994884490967], + [-5.271951198577881, -1.9538854360580444], + [-4.7085347175598145, -6.582550048828125], + [1.8216662406921387, -4.787955284118652], + [5.397355079650879, 7.608696937561035], + [-5.180276393890381, -3.9278922080993652], + [-0.039877958595752716, 12.490321159362793], + [3.7800447940826416, -4.031907081604004], + [1.7492976188659668, 1.6934545040130615], + [-2.3576953411102295, 2.196272373199463], + [-2.277566909790039, -2.837350845336914], + [9.22574520111084, -2.34309458732605], + [2.5587589740753174, -7.422018051147461], + [2.374746561050415, -8.63752555847168], + [2.115802049636841, 2.791059970855713], + [3.4249660968780518, -6.522104740142822], + [4.099717617034912, -3.70737624168396], + [-2.4910225868225098, 1.9315719604492188], + [-2.0342774391174316, 0.33445364236831665], + [-2.4505515098571777, 1.3983761072158813], + [2.7015445232391357, -3.476045608520508], + [8.574090957641602, -2.330265522003174], + [-4.10212516784668, -1.0508123636245728], + [-2.440281867980957, 2.4751386642456055], + [10.299391746520996, -2.5458695888519287], + [-1.8767075538635254, 2.4339773654937744], + [2.9558730125427246, -4.151640892028809], + [-2.4068007469177246, 2.2638962268829346], + [9.730381965637207, -2.3621623516082764], + [4.011241912841797, -2.168893337249756], + [-4.102296829223633, -6.393941879272461], + [-6.606439590454102, 7.776496887207031], + [4.696671009063721, -4.4526262283325195], + [-2.670844554901123, 0.7069176435470581], + [-2.414475679397583, 1.9568229913711548], + [3.940016984939575, -0.40940922498703003], + [-6.072507381439209, -2.028435707092285], + [3.077924966812134, -2.3938376903533936], + [1.9116547107696533, 0.9578738212585449], + [0.21738022565841675, 8.390838623046875], + [9.433195114135742, -2.4801247119903564], + [-2.974275588989258, 2.0327370166778564], + [-3.403555393218994, -3.388643980026245], + [5.606391429901123, -0.7376677989959717], + [8.559950828552246, -2.310051679611206], + [-2.334355354309082, -4.389582633972168], + [-2.6495511531829834, -3.00797963142395], + [2.5192999839782715, -3.6309022903442383], + [-2.2056052684783936, 2.6946053504943848], + [-5.541912078857422, -0.5312812924385071], + [-4.293312072753906, -6.227327346801758], + [-7.149697303771973, 2.3267998695373535], + [-4.289611339569092, -6.7699384689331055], + [10.385136604309082, -2.399549722671509], + [-1.110652208328247, 1.5868961811065674], + [3.548234701156616, 5.110140323638916], + [-1.0761218070983887, 0.8180172443389893], + [-6.050070285797119, 2.823108434677124], + [2.34027099609375, 5.451070785522461], + [-5.070716381072998, 7.370336532592773], + [-3.372589111328125, -2.6617796421051025], + [9.738150596618652, -2.4963715076446533], + [-4.244844913482666, 6.131993293762207], + [-0.04365494102239609, -1.6180567741394043], + [-0.02234012633562088, 12.246540069580078], + [8.500494003295898, -2.293752670288086], + [2.3851735591888428, 4.969022750854492], + [3.3382437229156494, -7.047849655151367], + [0.8169651627540588, -0.6292470693588257], + [4.141539096832275, 7.169244766235352], + [-2.474506139755249, 1.6272999048233032], + [-4.684440612792969, 4.9667744636535645], + [-2.170891284942627, 2.86574125289917], + [9.911723136901855, -2.3807318210601807], + [3.5009942054748535, -7.107473850250244], + [-0.9399964213371277, 1.4332818984985352], + [-5.611191272735596, 6.53373384475708], + [-4.492493629455566, -6.285300254821777], + [-5.023921012878418, -4.128665924072266], + [-4.92473840713501, -1.1474571228027344], + [0.32289743423461914, 10.244373321533203], + [0.1305662989616394, 11.565082550048828], + [2.4788248538970947, 3.195754289627075], + [4.3444695472717285, 6.055567264556885], + [3.410545587539673, -2.925636053085327], + [-0.0022252872586250305, -0.13544656336307526], + [6.10052490234375, -1.2975019216537476], + [-3.520906686782837, -0.6818470358848572], + [3.67980694770813, -3.779432535171509], + [-1.1749520301818848, -4.164247035980225], + [6.49245023727417, -2.7979321479797363], + [2.2140610218048096, 5.7778544425964355], + [7.312000751495361, -1.7514299154281616], + [5.276288986206055, -2.100058078765869], + [-1.83768630027771, -3.282846212387085], + [2.8505544662475586, -8.405353546142578], + [2.8796534538269043, 5.242866516113281], + [3.4279115200042725, -8.583044052124023], + [8.400569915771484, -2.298957586288452], + [2.991936445236206, 0.5237655639648438], + [1.1070442199707031, -6.756627559661865], + [-3.6646039485931396, -3.420175790786743], + [2.951552152633667, -2.606502056121826], + [7.417921543121338, -2.8783023357391357], + [-4.618680953979492, -3.1782748699188232], + [-3.6196930408477783, -4.013332366943359], + [2.4102394580841064, 5.380500793457031], + [1.4368529319763184, -1.548988938331604], + [8.636834144592285, -2.2999022006988525], + [-0.029863782227039337, 9.659282684326172], + [-2.277147054672241, -3.1723673343658447], + [4.821468830108643, -2.208535671234131], + [3.1407363414764404, -4.814249515533447], + [-2.3621771335601807, 2.3554935455322266], + [0.18767231702804565, 10.628610610961914], + [-2.29136061668396, 2.387272596359253], + [-3.527230978012085, -4.30499792098999], + [-1.0761178731918335, -3.481114625930786], + [-2.70813250541687, 3.745987892150879], + [9.50918197631836, -2.3848865032196045], + [-2.303548812866211, 1.9785619974136353], + [-3.9936165809631348, -4.590951442718506], + [3.853299379348755, 1.2180572748184204], + [7.339681625366211, -2.0102152824401855], + [9.158553123474121, -2.4585368633270264], + [-4.3148932456970215, 4.519761085510254], + [-1.4385833740234375, -0.766802191734314], + [2.182609796524048, 2.3551273345947266], + [-0.11719066649675369, 9.474729537963867], + [-8.279088020324707, -0.48381733894348145], + [3.472456932067871, -4.675835132598877], + [-2.633375883102417, 1.5847489833831787], + [11.22465705871582, -2.685141086578369], + [1.6520529985427856, -7.967759609222412], + [-4.148655891418457, 5.717804908752441], + [-3.973850965499878, -6.278500556945801], + [-1.927931785583496, 2.5433361530303955], + [-4.006493091583252, -6.707716464996338], + [1.973024606704712, 2.4735772609710693], + [4.739627361297607, -3.044330596923828], + [-2.1303327083587646, 2.7176990509033203], + [6.944055080413818, 8.511589050292969], + [9.40767765045166, -2.4381563663482666], + [1.7352471351623535, 2.4889633655548096], + [7.034646034240723, -1.8794686794281006], + [-1.1669358015060425, -3.0229365825653076], + [4.189276218414307, -4.147551536560059], + [-4.50953483581543, -6.641294002532959], + [0.7438459396362305, 5.482192039489746], + [5.5862135887146, 8.007201194763184], + [9.241497993469238, -2.382556915283203], + [-4.87570333480835, -7.775453567504883], + [-2.5567078590393066, 2.0677590370178223], + [3.367603063583374, -4.220348834991455], + [2.3166401386260986, -8.324951171875], + [-4.601349830627441, -2.4974076747894287], + [-1.0274300575256348, -3.628242015838623], + [-2.4722397327423096, 2.2438442707061768], + [-5.900818347930908, 5.967466354370117], + [2.6468007564544678, -2.43931245803833], + [-0.7560979723930359, -2.7066197395324707], + [-2.8299922943115234, -3.4430601596832275], + [6.192483425140381, -1.4241886138916016], + [-3.494290590286255, 0.9807208776473999], + [0.6342656016349792, -0.4937422275543213], + [3.981078863143921, 1.9202065467834473], + [3.463207960128784, 6.586982727050781], + [2.181126832962036, 0.6118254661560059], + [0.004802875220775604, 12.406057357788086], + [-0.6112210154533386, 1.2678884267807007], + [-3.37363600730896, 5.454596042633057], + [-3.1084201335906982, -4.199823379516602], + [-3.4812216758728027, -1.5125967264175415], + [-0.04694826155900955, 9.324580192565918], + [-1.5827913284301758, -1.6273380517959595], + [-1.1943246126174927, 0.7667187452316284], + [-2.1830506324768066, 0.6660311222076416], + [-2.833096742630005, -3.4974472522735596], + [-1.6809098720550537, 0.11982113122940063], + [-2.2313241958618164, 1.9081734418869019], + [6.37141752243042, -5.661708831787109], + [4.2264084815979, -3.534893751144409], + [-4.163973331451416, 6.9007110595703125], + [-5.538324356079102, 4.931855201721191], + [-1.0957701206207275, -3.8759355545043945], + [-2.043148994445801, 2.558002233505249], + [7.2862868309021, -2.199794292449951], + [-2.0982179641723633, -3.6141393184661865], + [-6.24463415145874, 7.442816257476807], + [-3.2870419025421143, -2.551156520843506], + [7.01746129989624, -1.9509456157684326], + [1.459050178527832, 6.22035026550293], + [3.0391414165496826, -4.319192409515381], + [1.97812819480896, -0.163863867521286], + [-5.391355037689209, -3.2445268630981445], + [2.3906350135803223, 6.2571234703063965], + [-0.028764910995960236, 9.935785293579102], + [7.054973602294922, 8.588455200195312], + [6.26655912399292, -1.337527871131897], + [-2.1008152961730957, 2.3292505741119385], + [1.5112792253494263, -6.714376926422119], + [-6.747203350067139, 0.09466862678527832], + [-5.840593338012695, 5.298887252807617], + [0.7631881237030029, -4.88588809967041], + [8.199655532836914, -2.300801992416382], + [-4.686842441558838, 5.374900817871094], + [-2.453317880630493, 0.3578855097293854], + [3.187608480453491, -3.8530113697052], + [0.5249258875846863, 0.47430920600891113], + [-2.2104594707489014, -0.05252594128251076], + [3.178687810897827, -7.632212162017822], + [10.209836959838867, -2.4297878742218018], + [2.151716947555542, 5.296374320983887], + [4.090827941894531, -3.5428595542907715], + [1.873583436012268, -7.440854072570801], + [3.303919792175293, -2.986257314682007], + [2.450428009033203, 1.9983681440353394], + [2.4989876747131348, -3.453657627105713], + [-4.315873622894287, -6.676425933837891], + [-1.9864534139633179, 2.477989912033081], + [-2.0476510524749756, 2.4835472106933594], + [1.7348040342330933, 1.7887803316116333], + [0.0808861181139946, -1.4162027835845947], + [1.5480300188064575, -7.761445999145508], + [3.4465935230255127, -6.6827263832092285], + [7.8638129234313965, -4.882195472717285], + [-2.237868309020996, 0.4078567624092102], + [-4.819167613983154, 5.445093154907227], + [-0.038118667900562286, 13.596036911010742], + [6.53759241104126, 8.31749153137207], + [5.970147609710693, 7.4298930168151855], + [4.139251232147217, -1.7678462266921997], + [2.680715560913086, -3.8906099796295166], + [7.746248245239258, -2.0306906700134277], + [3.4897778034210205, -6.956632614135742], + [8.396324157714844, -2.695965528488159], + [1.42818284034729, -7.466202735900879], + [0.24152261018753052, 11.028434753417969], + [2.373189687728882, 4.1007819175720215], + [-6.691834926605225, 1.1296199560165405], + [3.043243169784546, -8.971216201782227], + [8.574499130249023, -2.2927095890045166], + [1.1839364767074585, -0.3837664723396301], + [4.261826515197754, 7.056513786315918], + [-2.861854076385498, 4.928508758544922], + [4.322631359100342, 6.302513122558594], + [-3.8496294021606445, -2.659322500228882], + [-3.8708391189575195, 3.1935784816741943], + [3.5673675537109375, -5.899783611297607], + [4.5572123527526855, -2.9529781341552734], + [-2.9749913215637207, 4.987372398376465], + [0.08849137276411057, 9.523496627807617], + [-2.591566324234009, 3.6407439708709717], + [3.9402778148651123, -8.038824081420898], + [-2.987715244293213, 0.47949159145355225], + [-3.0770645141601562, -3.521531820297241], + [7.488637924194336, -3.7882637977600098], + [9.418320655822754, -2.6598238945007324], + [7.749121189117432, -2.2627556324005127], + [3.9096693992614746, 0.3594362735748291], + [10.6300687789917, -2.5493829250335693], + [-0.048799462616443634, 9.208301544189453], + [0.11202686280012131, 2.7785208225250244], + [-1.8736937046051025, -1.6100224256515503], + [-3.157500743865967, -5.275155067443848], + [-5.863631248474121, 7.236218452453613], + [-5.001598358154297, 2.2289228439331055], + [9.353102684020996, -2.436391830444336], + [1.6827647686004639, 5.197981834411621], + [0.1330013871192932, -4.459113121032715], + [8.709517478942871, -2.4426348209381104], + [6.330836296081543, 7.822900772094727], + [5.3169331550598145, 7.200775146484375], + [3.7412047386169434, -3.7010562419891357], + [2.2075915336608887, -8.52456283569336], + [4.147116184234619, 5.390917778015137], + [0.09261376410722733, -1.845481038093567], + [-5.519407272338867, 4.069069862365723], + [6.958104133605957, 8.472907066345215], + [4.14700984954834, -2.1046154499053955], + [3.30185866355896, -6.953863143920898], + [-4.670738697052002, -6.943545341491699], + [-4.864559173583984, 4.2868499755859375], + [5.834070205688477, -1.2498626708984375], + [0.35247743129730225, -1.1660915613174438], + [2.0347583293914795, -7.652915000915527], + [10.53145980834961, -2.4740352630615234], + [5.2814812660217285, 7.188314914703369], + [-6.931501388549805, 7.978053092956543], + [2.494969367980957, 1.2041901350021362], + [-4.905581951141357, 3.4081459045410156], + [7.144413471221924, 8.66123104095459], + [-3.8578240871429443, -1.1770325899124146], + [9.070915222167969, -2.26308012008667], + [-2.5979671478271484, 1.8044854402542114], + [-2.3506412506103516, 2.363875389099121], + [-1.8030390739440918, -0.8531700372695923], + [2.0354959964752197, 2.947084426879883], + [-0.6959545612335205, -2.7479329109191895], + [2.0961105823516846, -7.805741310119629], + [0.4958140254020691, 10.577436447143555], + [6.640744686126709, -2.136702060699463], + [5.785433292388916, -5.0898895263671875], + [-6.078530788421631, -1.4785308837890625], + [1.9241983890533447, -1.893524169921875], + [8.342665672302246, -2.2747983932495117], + [2.364769220352173, -9.060491561889648], + [8.948108673095703, -2.3672292232513428], + [-2.3041160106658936, 1.7328773736953735], + [3.033261299133301, -4.327247619628906], + [-0.4401005506515503, 4.457624435424805], + [-2.5134785175323486, 1.4643253087997437], + [5.807272434234619, 7.747693061828613], + [4.501794338226318, -4.090514183044434], + [-1.1134260892868042, -2.8213040828704834], + [-6.029839038848877, 7.146589756011963], + [-4.034256935119629, -6.290775299072266], + [-3.955432176589966, -0.9602911472320557], + [2.138024091720581, -7.590756893157959], + [-4.832304000854492, -2.4634616374969482], + [2.241140127182007, 4.380229473114014], + [0.04590588063001633, 13.535560607910156], + [-2.1410892009735107, 2.663755178451538], + [-2.857854127883911, -3.2208173274993896], + [6.997073650360107, -2.755239486694336], + [-5.4569878578186035, -2.306549549102783], + [-6.516226291656494, 7.809796333312988], + [-3.637199878692627, -3.014399290084839], + [-2.1359283924102783, -3.9895272254943848], + [-0.004916258156299591, 13.126287460327148], + [-4.136671543121338, -6.675678253173828], + [2.9723427295684814, -6.696643352508545], + [0.04881732910871506, 11.9597806930542], + [0.045933179557323456, 12.354571342468262], + [7.050806045532227, -1.6568888425827026], + [7.559447288513184, -2.630182981491089], + [-2.2019309997558594, 1.1763856410980225], + [-4.942269802093506, -5.720322608947754], + [-6.790191173553467, 7.910284042358398], + [9.363702774047852, -2.4403116703033447], + [-2.572732925415039, 2.1223747730255127], + [3.1169633865356445, -4.317048072814941], + [4.671926975250244, -0.9257775545120239], + [2.734295129776001, -6.492090702056885], + [2.1226131916046143, 0.9922305345535278], + [3.885024070739746, -3.030151128768921], + [-4.19956111907959, -6.457615852355957], + [2.062875986099243, 5.181803226470947], + [-2.0496644973754883, 2.086172103881836], + [1.2233011722564697, -7.08292293548584], + [0.19118916988372803, 9.23682975769043], + [-6.68226957321167, 6.687019348144531], + [3.2617058753967285, -4.62421989440918], + [-5.595748424530029, 5.93184232711792], + [-4.223704814910889, 6.293320178985596], + [7.682463645935059, 9.101388931274414], + [6.719648838043213, 8.310588836669922], + [-4.4937424659729, 3.7923476696014404], + [3.4294543266296387, -4.798707008361816], + [-0.022390790283679962, 12.628820419311523], + [4.360163688659668, -3.9618980884552], + [-3.817415952682495, 4.257168769836426], + [7.555131912231445, 9.082318305969238], + [-2.3932292461395264, -2.4654083251953125], + [10.606761932373047, -2.427682638168335], + [-0.23174798488616943, 5.588921070098877], + [0.7221898436546326, -3.3646676540374756], + [3.662351369857788, 1.0674968957901], + [-4.502326488494873, 3.7605161666870117], + [10.97563648223877, -2.511613607406616], + [-0.0541810467839241, 9.01832103729248], + [2.6722252368927, 6.3331756591796875], + [-2.196648597717285, 1.8108055591583252], + [3.7703590393066406, 1.8480156660079956], + [2.075434923171997, -5.997919082641602], + [0.045196644961833954, 9.61323356628418], + [-2.6044392585754395, 1.6160013675689697], + [6.790492534637451, 8.321199417114258], + [-4.453531742095947, -4.311829566955566], + [0.5577610731124878, -1.1080000400543213], + [2.2232131958007812, 0.46252381801605225], + [-2.1210315227508545, -3.3630945682525635], + [2.3552377223968506, -1.8538426160812378], + [2.267993688583374, -7.305950164794922], + [5.095485210418701, -4.1817193031311035], + [4.766303539276123, -3.9937551021575928], + [0.21730172634124756, 10.46988582611084], + [-2.4897353649139404, -1.2231732606887817], + [-7.206916332244873, -1.8270570039749146], + [-5.408685207366943, -0.40630584955215454], + [-4.8122639656066895, -6.457996368408203], + [2.4424798488616943, -3.448521375656128], + [-2.1601173877716064, 2.708066701889038], + [-0.7094982266426086, -1.535650372505188], + [2.002162218093872, 5.084682941436768], + [-5.096999645233154, -5.896819114685059], + [3.3610808849334717, -5.023632049560547], + [3.6095497608184814, -6.192596912384033], + [-4.765493392944336, -1.5549424886703491], + [8.059282302856445, -2.2391674518585205], + [-3.841730833053589, 5.769412994384766], + [1.2782102823257446, 5.8624467849731445], + [-2.060753583908081, -4.6219801902771], + [0.04472105950117111, 13.0665864944458], + [-0.017670221626758575, 12.71184253692627], + [3.5556838512420654, -8.717129707336426], + [-4.73998498916626, -3.4696903228759766], + [-4.587241172790527, -1.3070310354232788], + [9.243935585021973, -2.3270928859710693], + [-5.891921520233154, 7.423910140991211], + [3.685635805130005, -3.0674915313720703], + [0.23431402444839478, 10.9070463180542], + [-1.9111639261245728, 2.185603618621826], + [-2.500715732574463, 2.2011868953704834], + [7.5602617263793945, -1.9710661172866821], + [10.942743301391602, -2.485597848892212], + [-4.406448841094971, 6.1669416427612305], + [1.7462146282196045, -2.5424816608428955], + [6.952990531921387, 8.485052108764648], + [-4.839242458343506, -0.9293645620346069], + [0.4742036461830139, 1.056249976158142], + [3.924774408340454, -3.531954050064087], + [0.6370915770530701, -0.6424245238304138], + [-2.4008729457855225, 1.682261347770691], + [-0.38782116770744324, -1.6322520971298218], + [-1.746482253074646, 1.7766250371932983], + [1.6696605682373047, -6.782438278198242], + [1.9503376483917236, 0.2896827757358551], + [5.623010158538818, -1.2005378007888794], + [-0.4345388412475586, -1.1957257986068726], + [7.181619167327881, -1.6031073331832886], + [-5.440393924713135, 6.374921798706055], + [1.6240036487579346, 4.093471527099609], + [8.374166488647461, -2.3739078044891357], + [2.0122835636138916, 5.363248825073242], + [-0.06430894881486893, 9.442398071289062], + [1.5507876873016357, -7.673224925994873], + [0.21562474966049194, 10.889883995056152], + [4.6156697273254395, -4.323067665100098], + [-2.1445977687835693, 2.3329625129699707], + [6.366425037384033, -2.22710919380188], + [2.595864772796631, -9.105413436889648], + [-4.41979455947876, 3.3788392543792725], + [-2.0840656757354736, 2.494978427886963], + [-6.159472465515137, 7.211716175079346], + [-5.621070384979248, 1.079262137413025], + [2.2791779041290283, 3.199225902557373], + [8.609089851379395, -2.0172576904296875], + [-3.1273090839385986, -5.002837181091309], + [7.995133876800537, -2.1826512813568115], + [1.9913017749786377, -5.676335334777832], + [-2.5648562908172607, 1.741804599761963], + [-5.748968124389648, 7.562203407287598], + [-4.2801947593688965, -6.838256359100342], + [4.05902099609375, -4.292072772979736], + [0.08366065472364426, 11.771186828613281], + [-4.659348964691162, 4.307854175567627], + [-2.1868669986724854, 2.098133087158203], + [8.3186616897583, -2.4108316898345947], + [6.5918869972229, -1.5193837881088257], + [3.2437613010406494, -4.3071370124816895], + [2.3196513652801514, -3.505983829498291], + [4.694424629211426, 6.854513168334961], + [-3.194236993789673, -1.176282286643982], + [-1.001188039779663, 1.480002999305725], + [2.4596548080444336, -8.109034538269043], + [3.614610195159912, -3.3765225410461426], + [9.83931827545166, -2.4362995624542236], + [2.3738343715667725, -5.534472465515137], + [0.3018704056739807, 0.09471970796585083], + [-3.639596939086914, 6.921257972717285], + [-3.7170121669769287, -1.6450177431106567], + [0.6345460414886475, 1.1013737916946411], + [8.117799758911133, -2.1907224655151367], + [6.545292377471924, -5.0413923263549805], + [-2.3051843643188477, 2.2468581199645996], + [1.5969576835632324, 2.7943356037139893], + [3.5370044708251953, -4.460758209228516], + [-5.045445442199707, -5.609355926513672], + [2.3369390964508057, 3.5660998821258545], + [0.2833735942840576, 8.807388305664062], + [2.4207677841186523, 6.1789231300354], + [-4.4562907218933105, -4.960824489593506], + [7.203366756439209, -1.6878275871276855], + [7.400721073150635, -1.9983011484146118], + [5.5072855949401855, -1.0446984767913818], + [-5.926367282867432, -1.1301631927490234], + [1.0078365802764893, -5.1254072189331055], + [2.380533218383789, -8.277904510498047], + [-4.655949115753174, -2.199176788330078], + [3.956339120864868, -7.645917892456055], + [3.3021743297576904, 1.5186711549758911], + [2.0645079612731934, -6.49207878112793], + [-2.011239528656006, 2.360260248184204], + [-1.5446093082427979, -3.9202475547790527], + [8.300986289978027, -2.255565881729126], + [-4.49517297744751, 1.6745073795318604], + [-2.495006799697876, -4.158351898193359], + [-2.4055938720703125, 1.0085285902023315], + [1.670517086982727, 4.192661762237549], + [-3.6351125240325928, -5.971733570098877], + [6.754000663757324, -1.4738167524337769], + [-3.2236459255218506, -5.528064727783203], + [7.101424694061279, 8.5328369140625], + [-0.03188342601060867, 13.559541702270508], + [2.651057243347168, 0.35571718215942383], + [-3.1432297229766846, -0.3017469048500061], + [1.9527504444122314, -7.101009845733643], + [2.557145833969116, 1.4402974843978882], + [-2.2090253829956055, 2.39945912361145], + [4.358666896820068, -4.135012149810791], + [-6.572994709014893, 5.385056972503662], + [-5.29871129989624, 5.977121353149414], + [3.162285566329956, -7.7075090408325195], + [7.834210395812988, -2.2393476963043213], + [-4.220719337463379, -5.026590347290039], + [9.761348724365234, -2.453139543533325], + [-1.5671976804733276, -0.16238951683044434], + [7.190086364746094, -1.9303133487701416], + [-3.1864964962005615, -1.891149878501892], + [1.6898529529571533, 2.2451186180114746], + [-1.431363582611084, -0.3189191222190857], + [-7.374952793121338, -1.0614323616027832], + [2.633824110031128, -0.2670590877532959], + [0.8913210034370422, 1.4049690961837769], + [3.066685438156128, -4.328864097595215], + [3.377051830291748, -5.196664810180664], + [0.19858932495117188, 10.41294002532959], + [3.7220773696899414, -6.530435085296631], + [0.17391043901443481, 10.085681915283203], + [2.831881284713745, 6.116214752197266], + [4.69268274307251, -4.1834611892700195], + [6.044193744659424, -1.0200945138931274], + [3.0705058574676514, -1.9619958400726318], + [-1.2565621137619019, -3.3396003246307373], + [2.711850166320801, -6.203835487365723], + [-6.246448993682861, 7.2261152267456055], + [9.405571937561035, -2.5876123905181885], + [0.06230037659406662, 10.206995010375977], + [-4.920708179473877, -8.212197303771973], + [-2.653613805770874, 1.6344915628433228], + [0.09062331169843674, 9.343183517456055], + [1.6391421556472778, 3.160675287246704], + [2.4808766841888428, -8.612242698669434], + [0.05655764788389206, 11.67420768737793], + [-1.6495897769927979, -4.081078052520752], + [0.5100705027580261, -6.1027021408081055], + [3.188585042953491, -4.559682846069336], + [0.11637204140424728, 9.925146102905273], + [5.993017673492432, -1.4334748983383179], + [-4.824639797210693, 0.1677006483078003], + [1.7606642246246338, -2.919740915298462], + [5.5333733558654785, -1.2403630018234253], + [2.969752550125122, -2.024493455886841], + [-0.004120297729969025, 12.424988746643066], + [3.2462289333343506, -3.726189136505127], + [-3.6608850955963135, -5.5323710441589355], + [-0.017820782959461212, 12.661402702331543], + [6.950989246368408, -1.5593096017837524], + [4.150425434112549, -6.906490802764893], + [-4.491264820098877, -5.058919906616211], + [4.592706203460693, -6.601161956787109], + [-7.237666606903076, 8.480879783630371], + [2.4894723892211914, -8.951894760131836], + [-3.9426887035369873, -6.25405216217041], + [-0.10273028165102005, 8.775776863098145], + [-4.953457832336426, 5.385152816772461], + [2.0286285877227783, -8.324372291564941], + [-5.1428351402282715, 5.141766548156738], + [9.8939790725708, -2.4739959239959717], + [-4.340842247009277, -6.491386413574219], + [4.99099588394165, -0.9625389575958252], + [4.100762844085693, 1.3605924844741821], + [2.1566948890686035, 1.6081318855285645], + [-2.2271459102630615, 2.0024831295013428], + [3.1479246616363525, -4.490541458129883], + [-2.4044997692108154, 3.065700054168701], + [3.6083829402923584, 0.38558509945869446], + [-4.211597442626953, 5.389969825744629], + [-3.754035234451294, -5.793365955352783], + [-2.7414047718048096, -3.984168291091919], + [-0.6956753730773926, 1.2071136236190796], + [3.056394338607788, -8.659488677978516], + [-3.1190850734710693, 3.273470401763916], + [0.23216098546981812, 12.373818397521973], + [-3.625859022140503, -6.057918071746826], + [7.578558921813965, -2.181722402572632], + [3.015272378921509, -4.166280746459961], + [3.309882164001465, -8.957242965698242], + [1.726938009262085, 0.5193148851394653], + [1.0782904624938965, -6.87368106842041], + [-1.6351221799850464, 1.306511402130127], + [6.395082950592041, 8.254051208496094], + [3.6062376499176025, -8.727614402770996], + [2.0086276531219482, 4.823629379272461], + [9.217679023742676, -2.346575975418091], + [-2.230024576187134, 2.2455005645751953], + [-4.513030529022217, -7.241856575012207], + [1.2309694290161133, 11.000965118408203], + [-5.380199909210205, 6.057157516479492], + [0.9184140563011169, 4.748411178588867], + [-1.228178858757019, -3.2952029705047607], + [5.33449125289917, 6.65987491607666], + [-1.9387791156768799, -4.063014984130859], + [5.587851524353027, 7.26645040512085], + [4.20010232925415, -3.387988805770874], + [0.2335919737815857, 11.354223251342773], + [6.360423564910889, -1.6497249603271484], + [4.323686122894287, -4.449549674987793], + [8.767727851867676, -2.3780624866485596], + [-2.439199209213257, 1.5740174055099487], + [3.9137651920318604, 1.5926965475082397], + [9.125733375549316, -2.2690536975860596], + [5.586198329925537, -3.734029531478882], + [1.7542592287063599, -0.7235299348831177], + [-0.9956995844841003, -1.257083535194397], + [9.595362663269043, -2.411471128463745], + [3.3096842765808105, -8.898146629333496], + [2.317450761795044, 3.971351385116577], + [-2.8317642211914062, -3.7605488300323486], + [-2.730527877807617, -2.2662041187286377], + [5.455506801605225, -2.574035406112671], + [6.2275896072387695, -1.3478587865829468], + [0.007138006389141083, 9.173076629638672], + [-2.2057511806488037, 2.3294029235839844], + [7.043055057525635, -1.8905422687530518], + [3.3552043437957764, -5.151706695556641], + [-7.074767112731934, 7.446599960327148], + [-1.4447548389434814, -3.699993848800659], + [0.4775617718696594, -5.762564659118652], + [4.016961574554443, -3.4839284420013428], + [2.5548670291900635, -8.332624435424805], + [-1.5691733360290527, -1.9129222631454468], + [-1.26003098487854, -4.066357612609863], + [1.3469656705856323, 1.6230305433273315], + [6.276071071624756, -3.1243886947631836], + [-6.329834461212158, 7.315555095672607], + [-7.058786392211914, 8.36105728149414], + [3.019136428833008, -4.285625457763672], + [8.497845649719238, -2.4637749195098877], + [-1.9605534076690674, 2.580084800720215], + [3.148651599884033, -4.421957492828369], + [0.2672244906425476, -2.223135471343994], + [1.7858002185821533, 5.764276027679443], + [4.891671657562256, 6.178708076477051], + [3.1681480407714844, -8.721826553344727], + [0.049407653510570526, 10.005321502685547], + [0.1834961175918579, 13.496967315673828], + [0.22092586755752563, 10.542352676391602], + [4.107149124145508, -3.613610029220581], + [0.0422055646777153, 12.466949462890625], + [-3.2820866107940674, 3.2248456478118896], + [-4.570469379425049, 3.4816043376922607], + [4.940589904785156, -7.42240047454834], + [-2.52862548828125, 1.921860694885254], + [3.7209229469299316, -3.771982431411743], + [4.094807147979736, 1.7349473237991333], + [0.6066550612449646, 12.06147575378418], + [4.11169958114624, 1.5898464918136597], + [-1.015032410621643, -2.5527400970458984], + [-0.09050542861223221, -0.14322413504123688], + [5.9690632820129395, 7.387894630432129], + [5.577211856842041, -4.97707462310791], + [-3.448356866836548, -5.612530708312988], + [1.8433302640914917, 0.48108744621276855], + [-5.3018388748168945, 5.614934921264648], + [-6.443380832672119, 6.669658184051514], + [-5.281601428985596, 0.5161372423171997], + [8.685522079467773, -2.734804630279541], + [-2.7800166606903076, -3.659146547317505], + [2.99537992477417, -3.9753425121307373], + [4.449117660522461, -1.9486771821975708], + [3.1093995571136475, -8.388432502746582], + [4.058457374572754, -3.688810348510742], + [-2.8069307804107666, 0.5977388620376587], + [-4.482381820678711, 4.930103302001953], + [0.08529733866453171, 12.988072395324707], + [2.646925926208496, -3.723952054977417], + [-6.295628070831299, 7.219122409820557], + [9.620357513427734, -2.385817289352417], + [-4.541928768157959, -6.446780204772949], + [-2.5645806789398193, 0.2635388970375061], + [0.4704012870788574, 11.157524108886719], + [-1.1346750259399414, 1.6463030576705933], + [-1.3590158224105835, 0.8292272090911865], + [-2.2272067070007324, 0.9455199241638184], + [-2.1874186992645264, 2.3935062885284424], + [0.8884599804878235, -6.60627555847168], + [1.5875775814056396, 5.756370544433594], + [4.116683006286621, -3.6976685523986816], + [-4.240870952606201, -2.211348056793213], + [-3.569786548614502, -0.6616337895393372], + [3.7530062198638916, -9.569130897521973], + [-4.956719398498535, -8.182172775268555], + [-1.889556884765625, 0.885421872138977], + [2.5507700443267822, -8.307971000671387], + [2.7012550830841064, -3.7440013885498047], + [1.3376610279083252, -7.098104000091553], + [3.8569929599761963, -7.119218349456787], + [11.032526969909668, -2.616405725479126], + [-5.8058085441589355, -1.3094303607940674], + [1.862540602684021, -8.109643936157227], + [5.381649971008301, -1.397550106048584], + [-2.4449615478515625, 1.4217716455459595], + [4.220783710479736, -3.710327625274658], + [-0.3898536264896393, -1.7859236001968384], + [-0.32492297887802124, -0.49792081117630005], + [4.706218242645264, 6.983567714691162], + [-5.7586236000061035, 4.4166107177734375], + [-1.5137172937393188, -4.120474815368652], + [4.416226863861084, -2.0007784366607666], + [0.04133491963148117, -1.458058476448059], + [8.89656925201416, -2.3074653148651123], + [-4.33172082901001, 5.861775875091553], + [3.8242976665496826, -7.309804439544678], + [-0.010172076523303986, 9.655712127685547], + [-2.1691339015960693, 2.7342660427093506], + [-4.556140899658203, -7.643324851989746], + [-4.160342693328857, -6.018805503845215], + [-1.3044978380203247, 1.8294682502746582], + [-6.442312717437744, 0.09046816825866699], + [2.9369213581085205, -8.413351058959961], + [-3.9272425174713135, 4.131945610046387], + [1.9844281673431396, 3.8502726554870605], + [1.0074950456619263, 11.494902610778809], + [-2.272684097290039, 1.0078608989715576], + [-4.142202854156494, -3.8338615894317627], + [3.2440145015716553, -4.594973564147949], + [3.1735498905181885, -8.450020790100098], + [3.3574581146240234, -4.41870641708374], + [-4.120662212371826, 4.913447380065918], + [-1.062535047531128, 1.4510555267333984], + [3.4459152221679688, -8.383537292480469], + [-5.493372440338135, -1.7414919137954712], + [-5.084566593170166, -4.0085129737854], + [-5.834756851196289, -0.9218306541442871], + [-0.4706427752971649, -3.2457387447357178], + [1.8534765243530273, 5.611400604248047], + [-4.816279888153076, -7.223209381103516], + [0.20655536651611328, 9.953661918640137], + [-2.1491141319274902, 2.365044593811035] + ] +} \ No newline at end of file diff --git a/saved_models/server/server.py b/saved_models/server/server.py new file mode 100644 index 0000000000000000000000000000000000000000..aad57fd931c3bf7749e331b91b5cfed5eb4f74d9 --- /dev/null +++ b/saved_models/server/server.py @@ -0,0 +1,388 @@ +from flask import request, Flask, jsonify, make_response +from flask_cors import CORS, cross_origin +import base64 +import os +import sys +import json +import numpy as np +import gc +import shutil + +from timevis_backend.utils import * +from timevis_backend.res_logging import add_line + +# flask for API server +app = Flask(__name__) +cors = CORS(app, supports_credentials=True) +app.config['CORS_HEADERS'] = 'Content-Type' + +session = 5 +API_result_path = "./API_result.csv" + +@app.route('/updateProjection', methods=["POST", "GET"]) +@cross_origin() +def update_projection(): + res = request.get_json() + CONTENT_PATH = os.path.normpath(res['path']) + iteration = int(res['iteration']) + predicates = res["predicates"] + # username = res['username'] + + sys.path.append(CONTENT_PATH) + timevis = initialize_backend(CONTENT_PATH) + EPOCH = (iteration-1)*timevis.data_provider.p + timevis.data_provider.s + + embedding_2d, grid, decision_view, label_name_dict, label_color_list, label_list, max_iter, training_data_index, \ + testing_data_index, eval_new, prediction_list, selected_points, properties = update_epoch_projection(timevis, EPOCH, predicates) + + sys.path.remove(CONTENT_PATH) + # add_line(API_result_path,['TT',username]) + return make_response(jsonify({'result': embedding_2d, 'grid_index': grid, 'grid_color': 'data:image/png;base64,' + decision_view, + 'label_name_dict':label_name_dict, + 'label_color_list': label_color_list, 'label_list': label_list, + 'maximum_iteration': max_iter, + 'training_data': training_data_index, + 'testing_data': testing_data_index, 'evaluation': eval_new, + 'prediction_list': prediction_list, + "selectedPoints":selected_points.tolist(), + "properties":properties.tolist()}), 200) + +@app.route('/query', methods=["POST"]) +@cross_origin() +def filter(): + res = request.get_json() + CONTENT_PATH = os.path.normpath(res['content_path']) + iteration = int(res['iteration']) + predicates = res["predicates"] + username = res['username'] + + sys.path.append(CONTENT_PATH) + timevis = initialize_backend(CONTENT_PATH) + EPOCH = (iteration-1)*timevis.data_provider.p + timevis.data_provider.s + + training_data_number = timevis.hyperparameters["TRAINING"]["train_num"] + testing_data_number = timevis.hyperparameters["TRAINING"]["test_num"] + + current_index = timevis.get_epoch_index(EPOCH) + selected_points = np.arange(training_data_number)[current_index] + selected_points = np.concatenate((selected_points, np.arange(training_data_number, training_data_number + testing_data_number, 1)), axis=0) + # selected_points = np.arange(training_data_number + testing_data_number) + for key in predicates.keys(): + if key == "label": + tmp = np.array(timevis.filter_label(predicates[key], int(EPOCH))) + elif key == "type": + tmp = np.array(timevis.filter_type(predicates[key], int(EPOCH))) + elif key == "confidence": + tmp = np.array(timevis.filter_conf(predicates[key][0],predicates[key][1],int(EPOCH))) + else: + tmp = np.arange(training_data_number + testing_data_number) + selected_points = np.intersect1d(selected_points, tmp) + sys.path.remove(CONTENT_PATH) + add_line(API_result_path,['SQ',username]) + return make_response(jsonify({"selectedPoints": selected_points.tolist()}), 200) + + +# base64 +@app.route('/sprite', methods=["POST","GET"]) +@cross_origin() +def sprite_image(): + path = request.args.get("path") + index = request.args.get("index") + username = request.args.get("username") + + CONTENT_PATH = os.path.normpath(path) + print('index', index) + idx = int(index) + pic_save_dir_path = os.path.join(CONTENT_PATH, "sprites", "{}.png".format(idx)) + img_stream = '' + with open(pic_save_dir_path, 'rb') as img_f: + img_stream = img_f.read() + img_stream = base64.b64encode(img_stream).decode() + add_line(API_result_path,['SI',username]) + return make_response(jsonify({"imgUrl":'data:image/png;base64,' + img_stream}), 200) + + +@app.route('/spriteList', methods=["POST"]) +@cross_origin() +def sprite_list_image(): + data = request.get_json() + indices = data["index"] + path = data["path"] + + + CONTENT_PATH = os.path.normpath(path) + length = len(indices) + urlList = {} + + for i in range(length): + idx = indices[i] + pic_save_dir_path = os.path.join(CONTENT_PATH, "sprites", "{}.png".format(idx)) + img_stream = '' + with open(pic_save_dir_path, 'rb') as img_f: + img_stream = img_f.read() + img_stream = base64.b64encode(img_stream).decode() + urlList[idx] = 'data:image/png;base64,' + img_stream + # urlList.append('data:image/png;base64,' + img_stream) + return make_response(jsonify({"urlList":urlList}), 200) + + +@app.route('/al_query', methods=["POST"]) +@cross_origin() +def al_query(): + data = request.get_json() + CONTENT_PATH = os.path.normpath(data['content_path']) + iteration = data["iteration"] + strategy = data["strategy"] + budget = int(data["budget"]) + acc_idxs = data["accIndices"] + rej_idxs = data["rejIndices"] + user_name = data["username"] + isRecommend = data["isRecommend"] + # TODO dense_al parameter from frontend + + sys.path.append(CONTENT_PATH) + timevis = initialize_backend(CONTENT_PATH, dense_al=True) + # TODO add new sampling rule + indices, labels, scores = timevis.al_query(iteration, budget, strategy, np.array(acc_idxs).astype(np.int64), np.array(rej_idxs).astype(np.int64)) + + sort_i = np.argsort(-scores) + indices = indices[sort_i] + labels = labels[sort_i] + scores = scores[sort_i] + + sys.path.remove(CONTENT_PATH) + if not isRecommend: + add_line(API_result_path,['Feedback', user_name]) + else: + add_line(API_result_path,['Recommend', user_name]) + return make_response(jsonify({"selectedPoints": indices.tolist(), "scores": scores.tolist(), "suggestLabels":labels.tolist()}), 200) + +@app.route('/anomaly_query', methods=["POST"]) +@cross_origin() +def anomaly_query(): + data = request.get_json() + CONTENT_PATH = os.path.normpath(data['content_path']) + budget = int(data["budget"]) + strategy = data["strategy"] + acc_idxs = data["accIndices"] + rej_idxs = data["rejIndices"] + user_name = data["username"] + isRecommend = data["isRecommend"] + + sys.path.append(CONTENT_PATH) + + timevis = initialize_backend(CONTENT_PATH) + timevis.save_acc_and_rej(acc_idxs, rej_idxs, user_name) + indices, scores, labels = timevis.suggest_abnormal(strategy, np.array(acc_idxs).astype(np.int64), np.array(rej_idxs).astype(np.int64), budget) + clean_list,_ = timevis.suggest_normal(strategy, np.array(acc_idxs).astype(np.int64), np.array(rej_idxs).astype(np.int64), 1) + + sort_i = np.argsort(-scores) + indices = indices[sort_i] + labels = labels[sort_i] + scores = scores[sort_i] + + sys.path.remove(CONTENT_PATH) + if not isRecommend: + add_line(API_result_path,['Feedback', user_name]) + else: + add_line(API_result_path,['Recommend', user_name]) + return make_response(jsonify({"selectedPoints": indices.tolist(), "scores": scores.tolist(), "suggestLabels":labels.tolist(),"cleanList":clean_list.tolist()}), 200) + +@app.route('/al_train', methods=["POST"]) +@cross_origin() +def al_train(): + data = request.get_json() + CONTENT_PATH = os.path.normpath(data['content_path']) + acc_idxs = data["accIndices"] + rej_idxs = data["rejIndices"] + iteration = data["iteration"] + user_name = data["username"] + sys.path.append(CONTENT_PATH) + + # default setting al_train is light version, we only save the last epoch + + timevis = initialize_backend(CONTENT_PATH, dense_al=False) + timevis.save_acc_and_rej(iteration, acc_idxs, rej_idxs, user_name) + timevis.al_train(iteration, acc_idxs) + + from config import config + NEW_ITERATION = timevis.get_max_iter() + timevis.vis_train(NEW_ITERATION, **config) + + # update iteration projection + embedding_2d, grid, decision_view, label_name_dict, label_color_list, label_list, _, training_data_index, \ + testing_data_index, eval_new, prediction_list, selected_points, properties = update_epoch_projection(timevis, NEW_ITERATION, dict()) + + # rewirte json ========= + res_json_path = os.path.join(CONTENT_PATH, "iteration_structure.json") + with open(res_json_path,encoding='utf8')as fp: + json_data = json.load(fp) + + json_data.append({'value': NEW_ITERATION, 'name': 'iteration', 'pid': iteration}) + print('json_data',json_data) + with open(res_json_path,'w')as r: + json.dump(json_data, r) + r.close() + # rewirte json ========= + + del config + gc.collect() + + sys.path.remove(CONTENT_PATH) + + add_line(API_result_path,['al_train', user_name]) + return make_response(jsonify({'result': embedding_2d, 'grid_index': grid, 'grid_color': 'data:image/png;base64,' + decision_view, + 'label_name_dict': label_name_dict, + 'label_color_list': label_color_list, 'label_list': label_list, + 'maximum_iteration': NEW_ITERATION, 'training_data': training_data_index, + 'testing_data': testing_data_index, 'evaluation': eval_new, + 'prediction_list': prediction_list, + "selectedPoints":selected_points.tolist(), + "properties":properties.tolist()}), 200) + +def clear_cache(con_paths): + for CONTENT_PATH in con_paths.values(): + ac_flag = False + target_path = os.path.join(CONTENT_PATH, "Model") + dir_list = os.listdir(target_path) + for dir in dir_list: + if "Iteration_" in dir: + ac_flag=True + i = int(dir.replace("Iteration_", "")) + if i > 2: + shutil.rmtree(os.path.join(target_path, dir)) + if ac_flag: + iter_structure_path = os.path.join(CONTENT_PATH, "iteration_structure.json") + with open(iter_structure_path, "r") as f: + i_s = json.load(f) + new_is = list() + for item in i_s: + value = item["value"] + if value < 3: + new_is.append(item) + with open(iter_structure_path, "w") as f: + json.dump(new_is, f) + print("Successfully remove cache data!") + + +#mock +@app.route('/login', methods=["POST"]) +@cross_origin() +def login(): + data = request.get_json() + username = data["username"] + password = data["password"] + content_path = data["content_path"] + + # Verify username and password + # if pass return normal_content_path and anormaly_content_path + if username == 'admin-e' and password == '123qwe': + # con_paths = {"normal_content_path": content_path,"unormaly_content_path":content_path} + # clear_cache(con_paths) + return make_response(jsonify({"normal_content_path": content_path, "unormaly_content_path": content_path}), 200) + else: + return make_response(jsonify({"message":"username or password is wrong"}), 200) + +@app.route('/boundingbox_record', methods=["POST"]) +@cross_origin() +def record_bb(): + data = request.get_json() + username = data['username'] + add_line(API_result_path,['boundingbox', username]) + return make_response(jsonify({}), 200) + +@app.route('/all_result_list', methods=["POST"]) +@cross_origin() +def get_res(): + data = request.get_json() + CONTENT_PATH = os.path.normpath(data['content_path']) + # iteration_s = data["iteration_start"] + # iteration_e = data["iteration_end"] + predicates = dict() # placeholder + + results = dict() + imglist = dict() + gridlist = dict() + + sys.path.append(CONTENT_PATH) + + username = data["username"] + + from config import config + EPOCH_START = config["EPOCH_START"] + EPOCH_PERIOD = config["EPOCH_PERIOD"] + EPOCH_END = config["EPOCH_END"] + + # TODO Interval to be decided + epoch_num = (EPOCH_END - EPOCH_START)// EPOCH_PERIOD + 1 + + for i in range(1, epoch_num+1, 1): + EPOCH = (i-1)*EPOCH_PERIOD + EPOCH_START + + timevis = initialize_backend(CONTENT_PATH) + + # detect whether we have query before + fname = "Epoch" if timevis.data_provider.mode == "normal" or timevis.data_provider.mode == "abnormal" else "Iteration" + bgimg_path = os.path.join(timevis.data_provider.model_path, "{}_{}".format(fname, EPOCH), "bgimg.png") + embedding_path = os.path.join(timevis.data_provider.model_path, "{}_{}".format(fname, EPOCH), "embedding.npy") + grid_path = os.path.join(timevis.data_provider.model_path, "{}_{}".format(fname, EPOCH), "grid.pkl") + if os.path.exists(bgimg_path) and os.path.exists(embedding_path) and os.path.exists(grid_path): + path = os.path.join(timevis.data_provider.model_path, "{}_{}".format(fname, EPOCH)) + result_path = os.path.join(path,"embedding.npy") + results[str(i)] = np.load(result_path).tolist() + with open(os.path.join(path, "grid.pkl"), "rb") as f: + grid = pickle.load(f) + gridlist[str(i)] = grid + else: + embedding_2d, grid, _, _, _, _, _, _, _, _, _, _, _ = update_epoch_projection(timevis, EPOCH, predicates) + results[str(i)] = embedding_2d + gridlist[str(i)] = grid + # read background img + with open(bgimg_path, 'rb') as img_f: + img_stream = img_f.read() + img_stream = base64.b64encode(img_stream).decode() + imglist[str(i)] = 'data:image/png;base64,' + img_stream + # imglist[str(i)] = "http://{}{}".format(ip_adress, bgimg_path) + sys.path.remove(CONTENT_PATH) + + del config + gc.collect() + + add_line(API_result_path,['animation', username]) + return make_response(jsonify({"results":results,"bgimgList":imglist, "grid": gridlist}), 200) + +@app.route('/get_itertaion_structure', methods=["POST", "GET"]) +@cross_origin() +def get_tree(): + CONTENT_PATH = request.args.get("path") + res_json_path = os.path.join(CONTENT_PATH, "iteration_structure.json") + #mock + # res_json_path = os.path.join("./iteration_structure.json") + with open(res_json_path,encoding='utf8')as fp: + json_data = json.load(fp) + return make_response(jsonify({"structure":json_data}), 200) + +def check_port_inuse(port, host): + try: + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.settimeout(1) + s.connect((host, port)) + return True + except socket.error: + return False + finally: + if s: + s.close() + +if __name__ == "__main__": + import socket + hostname = socket.gethostname() + ip_address = socket.gethostbyname(hostname) + # with open('config.json', 'r') as f: + # config = json.load(f) + # ip_address = config["ServerIP"] + # port = config["ServerPort"] + port = 5000 + while check_port_inuse(port, ip_address): + port = port + 1 + app.run(host=ip_address, port=int(port)) diff --git a/saved_models/server/timevis_backend/__init__.py b/saved_models/server/timevis_backend/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/saved_models/server/timevis_backend/__pycache__/__init__.cpython-37.pyc b/saved_models/server/timevis_backend/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb409dfcd1951242078c5a7d00a843d08a6d2603 Binary files /dev/null and b/saved_models/server/timevis_backend/__pycache__/__init__.cpython-37.pyc differ diff --git a/saved_models/server/timevis_backend/__pycache__/backend_adapter.cpython-37.pyc b/saved_models/server/timevis_backend/__pycache__/backend_adapter.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..98686106c58e835724ed017238799f561d43b8c6 Binary files /dev/null and b/saved_models/server/timevis_backend/__pycache__/backend_adapter.cpython-37.pyc differ diff --git a/saved_models/server/timevis_backend/__pycache__/res_logging.cpython-37.pyc b/saved_models/server/timevis_backend/__pycache__/res_logging.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..04a7cbf1072358da5d69aa5dd662e106eafd7fa3 Binary files /dev/null and b/saved_models/server/timevis_backend/__pycache__/res_logging.cpython-37.pyc differ diff --git a/saved_models/server/timevis_backend/__pycache__/utils.cpython-37.pyc b/saved_models/server/timevis_backend/__pycache__/utils.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5ca4d060fb2de6752261269ffa7bbe86f9a473d5 Binary files /dev/null and b/saved_models/server/timevis_backend/__pycache__/utils.cpython-37.pyc differ diff --git a/saved_models/server/timevis_backend/backend_adapter.py b/saved_models/server/timevis_backend/backend_adapter.py new file mode 100644 index 0000000000000000000000000000000000000000..09d447795ddabb19d7dadf203425f2f9a030b450 --- /dev/null +++ b/saved_models/server/timevis_backend/backend_adapter.py @@ -0,0 +1,765 @@ +'''This class serves as a intermediate layer for tensorboard frontend and timeVis backend''' +import os +import sys +import json +import time +import torch +import numpy as np +import pickle +import shutil + +import torch.nn +from torch.utils.data import DataLoader +from torch.utils.data import WeightedRandomSampler +import torchvision + +from scipy.special import softmax + +# timevis_path = "D:\\code-space\\DLVisDebugger" #limy +timevis_path = "../../DLVisDebugger" #xianglin#yvonne +sys.path.append(timevis_path) +from singleVis.utils import * +from singleVis.custom_weighted_random_sampler import CustomWeightedRandomSampler +from singleVis.edge_dataset import DataHandler, HybridDataHandler +from singleVis.spatial_edge_constructor import SingleEpochSpatialEdgeConstructor +# kcHybridDenseALSpatialEdgeConstructor,GlobalTemporalEdgeConstructor +from singleVis.trajectory_manager import Recommender +from singleVis.eval.evaluator import ALEvaluator +from singleVis.segmenter import DenseALSegmenter + + +# active_learning_path = "D:\\code-space\\ActiveLearning" # limy +active_learning_path = "../../ActiveLearning" +sys.path.append(active_learning_path) + +class TimeVisBackend: + def __init__(self, data_provider, projector, vis, evaluator, **hyperparameters) -> None: + self.data_provider = data_provider + self.projector = projector + self.vis = vis + self.evaluator = evaluator + self.hyperparameters = hyperparameters + ################################################################################################################# + # # + # data Panel # + # # + ################################################################################################################# + + def batch_inv_preserve(self, epoch, data): + """ + get inverse confidence for a single point + :param epoch: int + :param data: numpy.ndarray + :return l: boolean, whether reconstruction data have the same prediction + :return conf_diff: float, (0, 1), confidence difference + """ + embedding = self.projector.batch_project(epoch, data) + recon = self.projector.batch_inverse(epoch, embedding) + + ori_pred = self.data_provider.get_pred(epoch, data) + new_pred = self.data_provider.get_pred(epoch, recon) + ori_pred = softmax(ori_pred, axis=1) + new_pred = softmax(new_pred, axis=1) + + old_label = ori_pred.argmax(-1) + new_label = new_pred.argmax(-1) + l = old_label == new_label + + old_conf = [ori_pred[i, old_label[i]] for i in range(len(old_label))] + new_conf = [new_pred[i, old_label[i]] for i in range(len(old_label))] + old_conf = np.array(old_conf) + new_conf = np.array(new_conf) + + conf_diff = old_conf - new_conf + return l, conf_diff + + ################################################################################################################# + # # + # Search Panel # + # # + ################################################################################################################# + + # TODO: fix bugs accroding to new api + # customized features + def filter_label(self, label, epoch_id): + try: + index = self.data_provider.classes.index(label) + except: + index = -1 + train_labels = self.data_provider.train_labels(epoch_id) + test_labels = self.data_provider.test_labels(epoch_id) + labels = np.concatenate((train_labels, test_labels), 0) + idxs = np.argwhere(labels == index) + idxs = np.squeeze(idxs) + return idxs + + def filter_type(self, type, epoch_id): + if type == "train": + res = self.get_epoch_index(epoch_id) + elif type == "test": + train_num = self.data_provider.train_num + test_num = self.data_provider.test_num + res = list(range(train_num, train_num+ test_num, 1)) + elif type == "unlabel": + labeled = np.array(self.get_epoch_index(epoch_id)) + train_num = self.data_provider.train_num + all_data = np.arange(train_num) + unlabeled = np.setdiff1d(all_data, labeled) + res = unlabeled.tolist() + else: + # all data + train_num = self.data_provider.train_num + test_num = self.data_provider.test_num + res = list(range(0, train_num + test_num, 1)) + return res + + def filter_conf(self, conf_min, conf_max, epoch_id): + train_data = self.data_provider.train_representation(epoch_id) + test_data =self.data_provider.test_representation(epoch_id) + data = np.concatenate((train_data, test_data), axis=0) + pred = self.data_provider.get_pred(epoch_id, data) + scores = np.amax(softmax(pred, axis=1), axis=1) + res = np.argwhere(np.logical_and(scores<=conf_max, scores>=conf_min)).squeeze().tolist() + return res + + + ################################################################################################################# + # # + # Helper Functions # + # # + ################################################################################################################# + + def save_acc_and_rej(self, acc_idxs, rej_idxs, file_name): + d = { + "acc_idxs": acc_idxs, + "rej_idxs": rej_idxs + } + path = os.path.join(self.data_provider.content_path, "{}_acc_rej.json".format(file_name)) + with open(path, "w") as f: + json.dump(d, f) + print("Successfully save the acc and rej idxs selected by user...") + + def get_epoch_index(self, epoch_id): + """get the training data index for an epoch""" + index_file = os.path.join(self.data_provider.model_path, "Epoch_{:d}".format(epoch_id), "index.json") + index = load_labelled_data_index(index_file) + return index + + def reset(self): + return + + +class ActiveLearningTimeVisBackend(TimeVisBackend): + def __init__(self, data_provider, projector, trainer, vis, evaluator, dense, **hyperparameters) -> None: + super().__init__(data_provider, projector, vis, evaluator, **hyperparameters) + self.trainer = trainer + self.dense = dense + + def save_acc_and_rej(self, iteration, acc_idxs, rej_idxs, file_name): + d = { + "acc_idxs": acc_idxs, + "rej_idxs": rej_idxs + } + path = os.path.join(self.data_provider.content_path, "Model", "Iteration_{}".format(iteration), "{}_acc_rej.json".format(file_name)) + with open(path, "w") as f: + json.dump(d, f) + print("Successfully save the acc and rej idxs selected by user at Iteration {}...".format(iteration)) + + def reset(self, iteration): + # delete [iteration,...) + max_i = self.get_max_iter() + for i in range(iteration, max_i+1, 1): + path = os.path.join(self.data_provider.content_path, "Model", "Iteration_{}".format(i)) + shutil.rmtree(path) + iter_structure_path = os.path.join(self.data_provider.content_path, "iteration_structure.json") + with open(iter_structure_path, "r") as f: + i_s = json.load(f) + new_is = list() + for item in i_s: + value = item["value"] + if value < iteration: + new_is.append(item) + with open(iter_structure_path, "w") as f: + json.dump(new_is, f) + print("Successfully remove cache data!") + + def get_epoch_index(self, iteration): + """get the training data index for an epoch""" + index_file = os.path.join(self.data_provider.model_path, "Iteration_{:d}".format(iteration), "index.json") + index = load_labelled_data_index(index_file) + return index + + def al_query(self, iteration, budget, strategy, acc_idxs, rej_idxs): + """get the index of new selection from different strategies""" + CONTENT_PATH = self.data_provider.content_path + NUM_QUERY = budget + GPU = self.hyperparameters["GPU"] + NET = self.hyperparameters["TRAINING"]["NET"] + DATA_NAME = self.hyperparameters["DATASET"] + sys.path.append(CONTENT_PATH) + + # record output information + now = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time())) + sys.stdout = open(os.path.join(CONTENT_PATH, now+".txt"), "w") + + # loading neural network + import Model.model as subject_model + task_model = eval("subject_model.{}()".format(NET)) + task_model_type = "pytorch" + # start experiment + n_pool = self.hyperparameters["TRAINING"]["train_num"] # 50000 + n_test = self.hyperparameters["TRAINING"]['test_num'] # 10000 + + resume_path = os.path.join(CONTENT_PATH, "Model", "Iteration_{}".format(iteration)) + + idxs_lb = np.array(json.load(open(os.path.join(resume_path, "index.json"), "r"))) + + state_dict = torch.load(os.path.join(resume_path, "subject_model.pth"), map_location=torch.device('cpu')) + task_model.load_state_dict(state_dict) + NUM_INIT_LB = len(idxs_lb) + + print('resume from iteration {}'.format(iteration)) + print('number of labeled pool: {}'.format(NUM_INIT_LB)) + print('number of unlabeled pool: {}'.format(n_pool - NUM_INIT_LB)) + print('number of testing pool: {}'.format(n_test)) + + # here the training handlers and testing handlers are different + complete_dataset = torchvision.datasets.CIFAR10(root="..//data//CIFAR10", download=True, train=True, transform=self.hyperparameters["TRAINING"]['transform_te']) + + if strategy == "Random": + from query_strategies.random import RandomSampling + idxs_selected = np.concatenate((acc_idxs.astype(np.int64), rej_idxs.astype(np.int64)), axis=0) + curr_lb = np.concatenate((idxs_lb, idxs_selected), axis=0) + q_strategy = RandomSampling(task_model, task_model_type, n_pool, curr_lb, 10, DATA_NAME, NET, gpu=GPU, **self.hyperparameters["TRAINING"]) + # print information + print(DATA_NAME) + print(type(q_strategy).__name__) + print('================Round {:d}==============='.format(iteration+1)) + # query new samples + t0 = time.time() + new_indices, scores = q_strategy.query(NUM_QUERY) + t1 = time.time() + print("Query time is {:.2f}".format(t1-t0)) + elif strategy == "Uncertainty": + from query_strategies.LeastConfidence import LeastConfidenceSampling + idxs_selected = np.concatenate((acc_idxs.astype(np.int64), rej_idxs.astype(np.int64)), axis=0) + curr_lb = np.concatenate((idxs_lb, idxs_selected), axis=0) + q_strategy = LeastConfidenceSampling(task_model, task_model_type, n_pool, curr_lb, 10, DATA_NAME, NET, gpu=GPU, **self.hyperparameters["TRAINING"]) + # print information + print(DATA_NAME) + print(type(q_strategy).__name__) + print('================Round {:d}==============='.format(iteration+1)) + # query new samples + t0 = time.time() + new_indices, scores = q_strategy.query(complete_dataset, NUM_QUERY, idxs_selected) + t1 = time.time() + print("Query time is {:.2f}".format(t1-t0)) + # elif strategy == "Diversity": + # from query_strategies.coreset import CoreSetSampling + # q_strategy = CoreSetSampling(task_model, task_model_type, n_pool, 512, idxs_lb, DATA_NAME, NET, gpu=GPU, **self.hyperparameters["TRAINING"]) + # # print information + # print(DATA_NAME) + # print(type(q_strategy).__name__) + # print('================Round {:d}==============='.format(iteration+1)) + # embedding = q_strategy.get_embedding(complete_dataset) + # # query new samples + # t0 = time.time() + # new_indices, scores = q_strategy.query(embedding, NUM_QUERY) + # t1 = time.time() + # print("Query time is {:.2f}".format(t1-t0)) + + # elif strategy == "Hybrid": + # from query_strategies.badge import BadgeSampling + # q_strategy = BadgeSampling(task_model, task_model_type, n_pool, 512, idxs_lb, 10, DATA_NAME, NET, gpu=GPU, **self.hyperparameters["TRAINING"]) + # # print information + # print(DATA_NAME) + # print(type(q_strategy).__name__) + # print('================Round {:d}==============='.format(iteration+1)) + # # query new samples + # t0 = time.time() + # new_indices, scores = q_strategy.query(complete_dataset, NUM_QUERY) + # t1 = time.time() + # print("Query time is {:.2f}".format(t1-t0)) + elif strategy == "TBSampling": + # TODO hard coded parameters... + period = 80 + print(DATA_NAME) + print("TBSampling") + print('================Round {:d}==============='.format(iteration+1)) + t0 = time.time() + new_indices, scores = self._suggest_abnormal(strategy, iteration, idxs_lb, acc_idxs, rej_idxs, budget, period) + t1 = time.time() + print("Query time is {:.2f}".format(t1-t0)) + + elif strategy == "Feedback": + # TODO hard coded parameters...suggest_abnormal + period = 80 + print(DATA_NAME) + print("Feedback") + print('================Round {:d}==============='.format(iteration+1)) + t0 = time.time() + new_indices, scores = self._suggest_abnormal(strategy, iteration, idxs_lb, acc_idxs, rej_idxs, budget, period) + t1 = time.time() + print("Query time is {:.2f}".format(t1-t0)) + else: + raise NotImplementedError + + # TODO return the suggest labels, need to develop pesudo label generation technique in the future + true_labels = self.data_provider.train_labels(iteration) + + return new_indices, true_labels[new_indices], scores + + def al_train(self, iteration, indices): + CONTENT_PATH = self.data_provider.content_path + # record output information + now = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time())) + sys.stdout = open(os.path.join(CONTENT_PATH, now+".txt"), "w") + + # for reproduce purpose + print("New indices:\t{}".format(len(indices))) + self.save_human_selection(iteration, indices) + lb_idx = self.get_epoch_index(iteration) + train_idx = np.hstack((lb_idx, indices)) + print("Training indices:\t{}".format(len(train_idx))) + print("Valid indices:\t{}".format(len(set(train_idx)))) + + TOTAL_EPOCH = self.hyperparameters["TRAINING"]["total_epoch"] + NET = self.hyperparameters["TRAINING"]["NET"] + DEVICE = self.data_provider.DEVICE + NEW_ITERATION = self.get_max_iter() + 1 + GPU = self.hyperparameters["GPU"] + DATA_NAME = self.hyperparameters["DATASET"] + sys.path.append(CONTENT_PATH) + + # loading neural network + from Model.model import resnet18 + task_model = resnet18() + resume_path = os.path.join(CONTENT_PATH, "Model", "Iteration_{}".format(iteration)) + state_dict = torch.load(os.path.join(resume_path, "subject_model.pth"), map_location=torch.device("cpu")) + task_model.load_state_dict(state_dict) + + self.save_iteration_index(NEW_ITERATION, train_idx) + task_model_type = "pytorch" + # start experiment + n_pool = self.hyperparameters["TRAINING"]["train_num"] # 50000 + save_path = os.path.join(CONTENT_PATH, "Model", "Iteration_{}".format(NEW_ITERATION)) + os.makedirs(save_path, exist_ok=True) + + from query_strategies.random import RandomSampling + q_strategy = RandomSampling(task_model, task_model_type, n_pool, lb_idx, 10, DATA_NAME, NET, gpu=GPU, **self.hyperparameters["TRAINING"]) + # print information + print('================Round {:d}==============='.format(NEW_ITERATION)) + # update + q_strategy.update_lb_idxs(train_idx) + resnet_model = resnet18() + train_dataset = torchvision.datasets.CIFAR10(root="..//data//CIFAR10", download=True, train=True, transform=self.hyperparameters["TRAINING"]['transform_tr']) + test_dataset = torchvision.datasets.CIFAR10(root="..//data//CIFAR10", download=True, train=False, transform=self.hyperparameters["TRAINING"]['transform_te']) + t1 = time.time() + q_strategy.train(total_epoch=TOTAL_EPOCH, task_model=resnet_model, complete_dataset=train_dataset,save_path=None) + t2 = time.time() + print("Training time is {:.2f}".format(t2-t1)) + self.save_subject_model(NEW_ITERATION, q_strategy.task_model.state_dict()) + + # compute accuracy at each round + accu = q_strategy.test_accu(test_dataset) + print('Accuracy {:.3f}'.format(100*accu)) + + + def get_max_iter(self): + path = os.path.join(self.data_provider.content_path, "Model") + dir_list = os.listdir(path) + max_iter = -1 + for dir in dir_list: + if "Iteration_" in dir: + i = int(dir.replace("Iteration_","")) + max_iter = max(max_iter, i) + return max_iter + + def save_human_selection(self, iteration, indices): + """ + save the selected index message from DVI frontend + :param epoch_id: + :param indices: list, selected indices + :return: + """ + save_location = os.path.join(self.data_provider.model_path, "Iteration_{}".format(iteration), "human_select.json") + with open(save_location, "w") as f: + json.dump(indices, f) + + def save_iteration_index(self, iteration, idxs): + new_iteration_dir = os.path.join(self.data_provider.content_path, "Model", "Iteration_{}".format(iteration)) + os.makedirs(new_iteration_dir, exist_ok=True) + save_location = os.path.join(new_iteration_dir, "index.json") + with open(save_location, "w") as f: + json.dump(idxs.tolist(), f) + + def save_subject_model(self, iteration, state_dict): + new_iteration_dir = os.path.join(self.data_provider.content_path, "Model", "Iteration_{}".format(iteration)) + model_path = os.path.join(new_iteration_dir, "subject_model.pth") + torch.save(state_dict, model_path) + + + def vis_train(self, iteration, **config): + # preprocess + PREPROCESS = config["VISUALIZATION"]["PREPROCESS"] + B_N_EPOCHS = config["VISUALIZATION"]["BOUNDARY"]["B_N_EPOCHS"] + L_BOUND = config["VISUALIZATION"]["BOUNDARY"]["L_BOUND"] + if PREPROCESS: + self.data_provider._meta_data(iteration) + if B_N_EPOCHS != 0: + LEN = len(self.data_provider.train_labels(iteration)) + self.data_provider._estimate_boundary(iteration, LEN//10, l_bound=L_BOUND) + + # train visualization model + CLASSES = config["CLASSES"] + DATASET = config["DATASET"] + # DEVICE = torch.device("cuda:{:}".format(GPU_ID) if torch.cuda.is_available() else "cpu") + ################################################# VISUALIZATION PARAMETERS ######################################## + PREPROCESS = config["VISUALIZATION"]["PREPROCESS"] + B_N_EPOCHS = config["VISUALIZATION"]["BOUNDARY"]["B_N_EPOCHS"] + L_BOUND = config["VISUALIZATION"]["BOUNDARY"]["L_BOUND"] + LAMBDA = config["VISUALIZATION"]["LAMBDA"] + HIDDEN_LAYER = config["VISUALIZATION"]["HIDDEN_LAYER"] + N_NEIGHBORS = config["VISUALIZATION"]["N_NEIGHBORS"] + MAX_EPOCH = config["VISUALIZATION"]["MAX_EPOCH"] + S_N_EPOCHS = config["VISUALIZATION"]["S_N_EPOCHS"] + PATIENT = config["VISUALIZATION"]["PATIENT"] + VIS_MODEL_NAME = config["VISUALIZATION"]["VIS_MODEL_NAME"] + RESOLUTION = config["VISUALIZATION"]["RESOLUTION"] + EVALUATION_NAME = config["VISUALIZATION"]["EVALUATION_NAME"] + NET = config["TRAINING"]["NET"] + + if self.dense: + # TODO test this part + raise NotImplementedError + epoch_num = config["TRAINING"]["total_epoch"] + INIT_NUM = config["VISUALIZATION"]["INIT_NUM"] + MAX_HAUSDORFF = config["VISUALIZATION"]["MAX_HAUSDORFF"] + ALPHA = config["VISUALIZATION"]["ALPHA"] + BETA = config["VISUALIZATION"]["BETA"] + T_N_EPOCHS = config["VISUALIZATION"]["T_N_EPOCHS"] + + segmenter = DenseALSegmenter(data_provider=self.data_provider, threshold=78.5, epoch_num=epoch_num) + # segment epoch + t0 = time.time() + SEGMENTS = segmenter.segment(iteration) + t1 = time.time() + print(SEGMENTS) + + segment_path = os.path.join(self.data_provider.content_path, "Model", "Iteration_{}".format(iteration),"segments.json") + with open(segment_path, "w") as f: + json.dump(SEGMENTS, f) + + LEN = self.data_provider.label_num(iteration) + prev_selected = np.random.choice(np.arange(LEN), size=INIT_NUM, replace=False) + prev_embedding = None + start_point = len(SEGMENTS)-1 + c0=None + d0=None + + for seg in range(start_point,-1,-1): + epoch_start, epoch_end = SEGMENTS[seg] + self.data_provider.update_interval(epoch_s=epoch_start, epoch_e=epoch_end) + + optimizer = torch.optim.Adam(model.parameters(), lr=.01, weight_decay=1e-5) + lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=4, gamma=.1) + + t2 = time.time() + spatial_cons = kcHybridDenseALSpatialEdgeConstructor(data_provider=self.data_provider, init_num=INIT_NUM, s_n_epochs=S_N_EPOCHS, b_n_epochs=B_N_EPOCHS, n_neighbors=N_NEIGHBORS, MAX_HAUSDORFF=MAX_HAUSDORFF, ALPHA=ALPHA, BETA=BETA, iteration=iteration, init_idxs=prev_selected, init_embeddings=prev_embedding, c0=c0, d0=d0) + s_edge_to, s_edge_from, s_probs, feature_vectors, embedded, coefficient, time_step_nums, time_step_idxs_list, knn_indices, sigmas, rhos, attention, (c0,d0) = spatial_cons.construct() + + temporal_cons = GlobalTemporalEdgeConstructor(X=feature_vectors, time_step_nums=time_step_nums, sigmas=sigmas, rhos=rhos, n_neighbors=N_NEIGHBORS, n_epochs=T_N_EPOCHS) + t_edge_to, t_edge_from, t_probs = temporal_cons.construct() + t3 = time.time() + + edge_to = np.concatenate((s_edge_to, t_edge_to),axis=0) + edge_from = np.concatenate((s_edge_from, t_edge_from), axis=0) + probs = np.concatenate((s_probs, t_probs), axis=0) + probs = probs / (probs.max()+1e-3) + eliminate_zeros = probs>1e-3 + edge_to = edge_to[eliminate_zeros] + edge_from = edge_from[eliminate_zeros] + probs = probs[eliminate_zeros] + + # save result + save_dir = os.path.join(self.data_provider.model_path, "Iteration_{}".format(iteration), "SV_time_al_hybrid.json") + if not os.path.exists(save_dir): + evaluation = dict() + else: + f = open(save_dir, "r") + evaluation = json.load(f) + f.close() + if "complex_construction" not in evaluation.keys(): + evaluation["complex_construction"] = dict() + evaluation["complex_construction"][str(seg)] = round(t3-t2, 3) + with open(save_dir, 'w') as f: + json.dump(evaluation, f) + print("constructing timeVis complex for {}-th segment in {:.1f} seconds.".format(seg, t3-t2)) + + dataset = HybridDataHandler(edge_to, edge_from, feature_vectors, attention, embedded, coefficient) + n_samples = int(np.sum(S_N_EPOCHS * probs) // 1) + # chosse sampler based on the number of dataset + if len(edge_to) > 2^24: + sampler = CustomWeightedRandomSampler(probs, n_samples, replacement=True) + else: + sampler = WeightedRandomSampler(probs, n_samples, replacement=True) + + edge_loader = DataLoader(dataset, batch_size=1000, sampler=sampler) + + self.trainer.update_vis_model(model) + self.trainer.update_optimizer(optimizer) + self.trainer.update_lr_scheduler(lr_scheduler) + self.trainer.update_edge_loader(edge_loader) + + t2=time.time() + self.trainer.train(PATIENT, MAX_EPOCH) + t3 = time.time() + # save result + save_dir = os.path.join(self.data_provider.model_path, "Iteration_{}".format(iteration), "SV_time_al_hybrid.json") + if not os.path.exists(save_dir): + evaluation = dict() + else: + f = open(save_dir, "r") + evaluation = json.load(f) + f.close() + + if "training" not in evaluation.keys(): + evaluation["training"] = dict() + evaluation["training"][str(seg)] = round(t3-t2, 3) + with open(save_dir, 'w') as f: + json.dump(evaluation, f) + self.trainer.save(save_dir=os.path.join(self.data_provider.model_path, "Iteration_{}".format(iteration)), file_name="{}_{}".format(VIS_MODEL_NAME, seg)) + model = self.trainer.model + + # update prev_idxs and prev_embedding + prev_selected = time_step_idxs_list[0] + prev_data = torch.from_numpy(feature_vectors[:len(prev_selected)]).to(dtype=torch.float32, device=self.data_provider.DEVICE) + model.to(device=self.data_provider.DEVICE) + prev_embedding = model.encoder(prev_data).cpu().detach().numpy() + # raise NotImplementedError + print("Successful train all visualization models!") + else: + t0 = time.time() + spatial_cons = SingleEpochSpatialEdgeConstructor(self.data_provider, iteration, S_N_EPOCHS, B_N_EPOCHS, 15) + edge_to, edge_from, probs, feature_vectors, attention = spatial_cons.construct() + t1 = time.time() + + probs = probs / (probs.max()+1e-3) + eliminate_zeros = probs>1e-3 + edge_to = edge_to[eliminate_zeros] + edge_from = edge_from[eliminate_zeros] + probs = probs[eliminate_zeros] + + # save result + save_dir = os.path.join(self.data_provider.model_path, "SV_time_al.json") + if not os.path.exists(save_dir): + evaluation = dict() + else: + f = open(save_dir, "r") + evaluation = json.load(f) + f.close() + if "complex_construction" not in evaluation.keys(): + evaluation["complex_construction"] = dict() + evaluation["complex_construction"][str(iteration)] = round(t1-t0, 3) + with open(save_dir, 'w') as f: + json.dump(evaluation, f) + print("constructing timeVis complex in {:.1f} seconds.".format(t1-t0)) + + dataset = DataHandler(edge_to, edge_from, feature_vectors, attention) + n_samples = int(np.sum(S_N_EPOCHS * probs) // 1) + # chosse sampler based on the number of dataset + if len(edge_to) > 2^24: + sampler = CustomWeightedRandomSampler(probs, n_samples, replacement=True) + else: + sampler = WeightedRandomSampler(probs, n_samples, replacement=True) + edge_loader = DataLoader(dataset, batch_size=512, sampler=sampler) + self.trainer.update_edge_loader(edge_loader) + + t2=time.time() + self.trainer.train(PATIENT, MAX_EPOCH) + t3 = time.time() + # save result + save_dir = os.path.join(self.data_provider.model_path, "SV_time_al.json") + if not os.path.exists(save_dir): + evaluation = dict() + else: + f = open(save_dir, "r") + evaluation = json.load(f) + f.close() + if "training" not in evaluation.keys(): + evaluation["training"] = dict() + evaluation["training"][str(iteration)] = round(t3-t2, 3) + with open(save_dir, 'w') as f: + json.dump(evaluation, f) + save_dir = os.path.join(self.data_provider.model_path, "Iteration_{}".format(iteration)) + os.makedirs(save_dir, exist_ok=True) + self.trainer.save(save_dir=save_dir, file_name=VIS_MODEL_NAME) + # TODO evaluate visualization model, train and test + evaluator = ALEvaluator(self.data_provider, self.projector) + evaluator.save_epoch_eval(iteration, file_name=EVALUATION_NAME) + + ################################################################################################################# + # # + # Sample Selection # + # # + ################################################################################################################# + def _save(self, iteration, ftm): + with open(os.path.join(self.data_provider.content_path, "Model","Iteration_{}".format(iteration), 'sample_recommender.pkl'), 'wb') as f: + pickle.dump(ftm, f, pickle.HIGHEST_PROTOCOL) + + def _init_detection(self, iteration, lb_idxs, period=80): + # prepare trajectory + embedding_path = os.path.join(self.data_provider.content_path,"Model", "Iteration_{}".format(iteration),'trajectory_embeddings.npy') + if os.path.exists(embedding_path): + trajectories = np.load(embedding_path) + print("Load trajectories from cache!") + else: + # extract samples + train_num = self.data_provider.train_num + # change epoch_NUM + epoch_num = (self.data_provider.e - self.data_provider.s)//self.data_provider.p + 1 + embeddings_2d = np.zeros((epoch_num, train_num, 2)) + for i in range(self.data_provider.s, self.data_provider.e+1, self.data_provider.p): + # for i in range(self.data_provider.e - self.data_provider.p*(self.period-1), self.data_provider.e+1, self.data_provider.p): + # id = (i-(self.data_provider.e - (self.data_provider.p-1)*self.period))//self.data_provider.p + id = (i - self.data_provider.s)//self.data_provider.p + embeddings_2d[id] = self.projector.batch_project(iteration, i, self.data_provider.train_representation(iteration, i)) + trajectories = np.transpose(embeddings_2d, [1,0,2]) + np.save(embedding_path, trajectories) + # prepare uncertainty + uncertainty_path = os.path.join(self.data_provider.content_path, "Model","Iteration_{}".format(iteration), 'uncertainties.npy') + if os.path.exists(uncertainty_path): + uncertainty = np.load(uncertainty_path) + else: + samples = self.data_provider.train_representation(iteration, epoch_num) + pred = self.data_provider.get_pred(iteration, epoch_num, samples) + uncertainty = 1 - np.amax(softmax(pred, axis=1), axis=1) + np.save(uncertainty_path, uncertainty) + ulb_idxs = self.data_provider.get_unlabeled_idx(len(uncertainty), lb_idxs) + # prepare sampling manager + ntd_path = os.path.join(self.data_provider.content_path, "Model","Iteration_{}".format(iteration), 'sample_recommender.pkl') + if os.path.exists(ntd_path): + with open(ntd_path, 'rb') as f: + ntd = pickle.load(f) + else: + ntd = Recommender(uncertainty[ulb_idxs], trajectories[ulb_idxs], 30, period=period,metric="a") + print("Detecting abnormal....") + ntd.clustered() + print("Finish detection!") + self._save(iteration, ntd) + return ntd, ulb_idxs + + def _suggest_abnormal(self, strategy, iteration, lb_idxs, acc_idxs, rej_idxs, budget, period): + ntd,ulb_idxs = self._init_detection(iteration, lb_idxs, period) + map_ulb = ulb_idxs.tolist() + map_acc_idxs = np.array([map_ulb.index(i) for i in acc_idxs]).astype(np.int32) + map_rej_idxs = np.array([map_ulb.index(i) for i in rej_idxs]).astype(np.int32) + if strategy == "TBSampling": + suggest_idxs, scores = ntd.sample_batch_init(map_acc_idxs, map_rej_idxs, budget) + elif strategy == "Feedback": + suggest_idxs, scores = ntd.sample_batch(map_acc_idxs, map_rej_idxs, budget) + else: + raise NotImplementedError + return ulb_idxs[suggest_idxs], scores + + def _suggest_normal(self, strategy, iteration, lb_idxs, acc_idxs, rej_idxs, budget, period): + ntd, ulb_idxs = self._init_detection(iteration, lb_idxs, period) + map_ulb = ulb_idxs.tolist() + map_acc_idxs = np.array([map_ulb.index(i) for i in acc_idxs]).astype(np.int32) + map_rej_idxs = np.array([map_ulb.index(i) for i in rej_idxs]).astype(np.int32) + if strategy == "TBSampling": + suggest_idxs, _ = ntd.sample_batch_normal_init(map_acc_idxs, map_rej_idxs, budget) + elif strategy == "Feedback": + suggest_idxs, _ = ntd.sample_batch_normal(map_acc_idxs, map_rej_idxs, budget) + else: + raise NotImplementedError + return ulb_idxs[suggest_idxs] + + +class AnormalyTimeVisBackend(TimeVisBackend): + + def __init__(self, data_provider, projector, vis, evaluator, period, **hyperparameters) -> None: + super().__init__(data_provider, projector, vis, evaluator, **hyperparameters) + self.period = period + file_path = os.path.join(self.data_provider.content_path, 'clean_label.json') + with open(file_path, "r") as f: + self.clean_labels = np.array(json.load(f)) + + def reset(self): + return + + ################################################################################################################# + # # + # Anormaly Detection # + # # + ################################################################################################################# + + def _save(self, ntd): + with open(os.path.join(self.data_provider.content_path, 'sample_recommender.pkl'), 'wb') as f: + pickle.dump(ntd, f, pickle.HIGHEST_PROTOCOL) + + def _init_detection(self): + # prepare trajectories + embedding_path = os.path.join(self.data_provider.content_path, 'trajectory_embeddings.npy') + if os.path.exists(embedding_path): + trajectories = np.load(embedding_path) + else: + # extract samples + train_num = self.data_provider.train_num + # change epoch_NUM + epoch_num = (self.data_provider.e - self.data_provider.s)//self.data_provider.p + 1 + embeddings_2d = np.zeros((epoch_num, train_num, 2)) + for i in range(self.data_provider.s, self.data_provider.e+1, self.data_provider.p): + # for i in range(self.data_provider.e - self.data_provider.p*(self.period-1), self.data_provider.e+1, self.data_provider.p): + # id = (i-(self.data_provider.e - (self.data_provider.p-1)*self.period))//self.data_provider.p + id = (i - self.data_provider.s)//self.data_provider.p + embeddings_2d[id] = self.projector.batch_project(i, self.data_provider.train_representation(i)) + trajectories = np.transpose(embeddings_2d, [1,0,2]) + np.save(embedding_path, trajectories) + # prepare uncertainty scores + uncertainty_path = os.path.join(self.data_provider.content_path, 'uncertainties.npy') + if os.path.exists(uncertainty_path): + uncertainty = np.load(uncertainty_path) + else: + epoch_num = (self.data_provider.e - self.data_provider.s)//self.data_provider.p + 1 + samples = self.data_provider.train_representation(epoch_num) + pred = self.data_provider.get_pred(epoch_num, samples) + uncertainty = 1 - np.amax(softmax(pred, axis=1), axis=1) + np.save(uncertainty_path, uncertainty) + + # prepare sampling manager + ntd_path = os.path.join(self.data_provider.content_path, 'sample_recommender.pkl') + if os.path.exists(ntd_path): + with open(ntd_path, 'rb') as f: + ntd = pickle.load(f) + else: + ntd = Recommender(uncertainty, trajectories, 30,period=self.period,metric="a") + print("Detecting abnormal....") + ntd.clustered() + print("Finish detection!") + self._save(ntd) + return ntd + + def suggest_abnormal(self, strategy, acc_idxs, rej_idxs, budget): + ntd = self._init_detection() + if strategy == "TBSampling": + suggest_idxs, scores = ntd.sample_batch_init(acc_idxs, rej_idxs, budget) + elif strategy == "Feedback": + suggest_idxs, scores = ntd.sample_batch(acc_idxs, rej_idxs, budget) + else: + raise NotImplementedError + suggest_labels = self.clean_labels[suggest_idxs] + return suggest_idxs, scores, suggest_labels + + def suggest_normal(self, strategy, acc_idxs, rej_idxs, budget): + ntd = self._init_detection() + if strategy == "TBSampling": + suggest_idxs, _ = ntd.sample_batch_normal_init(acc_idxs, rej_idxs, budget) + elif strategy == "Feedback": + suggest_idxs, _ = ntd.sample_batch_normal(acc_idxs, rej_idxs, budget) + else: + raise NotImplementedError + suggest_labels = self.clean_labels[suggest_idxs] + return suggest_idxs, suggest_labels + + diff --git a/saved_models/server/timevis_backend/res_logging.py b/saved_models/server/timevis_backend/res_logging.py new file mode 100644 index 0000000000000000000000000000000000000000..5e7b4551c776068860b1f5a482d86a042439bc55 --- /dev/null +++ b/saved_models/server/timevis_backend/res_logging.py @@ -0,0 +1,12 @@ +import time +import csv + +def add_line(path, data_row): + """ + data_row: list, [API_name, username, time] + """ + now_time = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime()) + data_row.append(now_time) + with open(path, "a+") as f: + csv_write = csv.writer(f) + csv_write.writerow(data_row) \ No newline at end of file diff --git a/saved_models/server/timevis_backend/utils.py b/saved_models/server/timevis_backend/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..6aed452e1bce5f0b2e1f3e38865e7d24793166a9 --- /dev/null +++ b/saved_models/server/timevis_backend/utils.py @@ -0,0 +1,250 @@ +import os, sys +# sys.path.append("..") + +import torch +import numpy as np +from umap.umap_ import find_ab_params +import pickle +import gc +import base64 +from .backend_adapter import TimeVisBackend, ActiveLearningTimeVisBackend, AnormalyTimeVisBackend + +timevis_path = "../../DLVisDebugger" +sys.path.append(timevis_path) +from singleVis.SingleVisualizationModel import VisModel +from singleVis.losses import SingleVisLoss, UmapLoss, ReconstructionLoss, SmoothnessLoss, HybridLoss +from singleVis.trainer import SingleVisTrainer, HybridVisTrainer +from singleVis.data import NormalDataProvider, ActiveLearningDataProvider, DenseActiveLearningDataProvider +from singleVis.eval.evaluator import Evaluator +from singleVis.visualizer import visualizer, DenseALvisualizer +from singleVis.projector import Projector, ALProjector, DenseALProjector +from singleVis.segmenter import Segmenter + + + +def initialize_backend(CONTENT_PATH, dense_al=False): + + import config + + # load hyperparameters + CLASSES = config["CLASSES"] + DATASET = config["DATASET"] + GPU_ID = config["GPU"] + DEVICE = torch.device("cuda:{}".format(GPU_ID) if torch.cuda.is_available() else "cpu") + ################################################# VISUALIZATION PARAMETERS ######################################## + PREPROCESS = config["VISUALIZATION"]["PREPROCESS"] + B_N_EPOCHS = config["VISUALIZATION"]["BOUNDARY"]["B_N_EPOCHS"] + L_BOUND = config["VISUALIZATION"]["BOUNDARY"]["L_BOUND"] + LAMBDA = config["VISUALIZATION"]["LAMBDA"] + # HIDDEN_LAYER = config["VISUALIZATION"]["HIDDEN_LAYER"] + ENCODER_DIMS = config["VISUALIZATION"]["ENCODER_DIMS"] + DECODER_DIMS = config["VISUALIZATION"]["DECODER_DIMS"] + N_NEIGHBORS = config["VISUALIZATION"]["N_NEIGHBORS"] + MAX_EPOCH = config["VISUALIZATION"]["MAX_EPOCH"] + S_N_EPOCHS = config["VISUALIZATION"]["S_N_EPOCHS"] + PATIENT = config["VISUALIZATION"]["PATIENT"] + VIS_MODEL_NAME = config["VISUALIZATION"]["VIS_MODEL_NAME"] + RESOLUTION = config["VISUALIZATION"]["RESOLUTION"] + EVALUATION_NAME = config["VISUALIZATION"]["EVALUATION_NAME"] + NET = config["TRAINING"]["NET"] + + + SETTING = config["SETTING"] # active learning + if SETTING == "normal" or SETTING == "abnormal": + EPOCH_START = config["EPOCH_START"] + EPOCH_END = config["EPOCH_END"] + EPOCH_PERIOD = config["EPOCH_PERIOD"] + + INIT_NUM = config["VISUALIZATION"]["INIT_NUM"] + ALPHA = config["VISUALIZATION"]["ALPHA"] + BETA = config["VISUALIZATION"]["BETA"] + MAX_HAUSDORFF = config["VISUALIZATION"]["MAX_HAUSDORFF"] + T_N_EPOCHS = config["VISUALIZATION"]["T_N_EPOCHS"] + elif SETTING == "active learning": + BASE_ITERATION = config["BASE_ITERATION"] + TOTAL_EPOCH = config["TRAINING"]["total_epoch"] + else: + raise NotImplementedError + + import Model.model as subject_model + net = eval("subject_model.{}()".format(NET)) + + + # ######################################################################################################################## + # TRAINING SETTING # + # ######################################################################################################################## + + # model = SingleVisualizationModel(input_dims=512, output_dims=2, units=256, hidden_layer=HIDDEN_LAYER) + model = VisModel(ENCODER_DIMS, DECODER_DIMS) + + if SETTING == "normal" or SETTING == "abnormal": + data_provider = NormalDataProvider(CONTENT_PATH, net, EPOCH_START, EPOCH_END, EPOCH_PERIOD, device=DEVICE, classes=CLASSES,epoch_name="Epoch", verbose=1) + segmenter = Segmenter(data_provider=data_provider, threshold=78.5, range_s=EPOCH_START, range_e=EPOCH_END, range_p=EPOCH_PERIOD) + SEGMENTS = segmenter.segment() + # SEGMENTS = config["VISUALIZATION"]["SEGMENTS"] + projector = Projector(vis_model=model, content_path=CONTENT_PATH, segments=SEGMENTS, device=DEVICE) + elif SETTING == "active learning": + DENSE_VIS_MODEL_NAME = config["VISUALIZATION"]["DENSE_VIS_MODEL_NAME"] + if dense_al: + data_provider = DenseActiveLearningDataProvider(CONTENT_PATH, net, BASE_ITERATION, epoch_num=TOTAL_EPOCH, split=-1, device=DEVICE, classes=CLASSES,verbose=1) + projector = DenseALProjector(vis_model=model, content_path=CONTENT_PATH, vis_model_name=DENSE_VIS_MODEL_NAME, device=DEVICE) + else: + data_provider = ActiveLearningDataProvider(CONTENT_PATH, net, BASE_ITERATION, split=-1, device=DEVICE, classes=CLASSES, verbose=1) + projector = ALProjector(vis_model=model, content_path=CONTENT_PATH, vis_model_name=VIS_MODEL_NAME, device=DEVICE) + + # ######################################################################################################################## + # # TRAIN # + # ######################################################################################################################## + + if SETTING == "active learning": + negative_sample_rate = 5 + min_dist = .1 + _a, _b = find_ab_params(1.0, min_dist) + umap_loss_fn = UmapLoss(negative_sample_rate, DEVICE, _a, _b, repulsion_strength=1.0) + recon_loss_fn = ReconstructionLoss(beta=1.0) + if dense_al: + smooth_loss_fn = SmoothnessLoss(margin=1.) + S_LAMBDA = config["VISUALIZATION"]["S_LAMBDA"] + criterion = HybridLoss(umap_loss_fn, recon_loss_fn, smooth_loss_fn, lambd1=LAMBDA, lambd2=S_LAMBDA) + optimizer = torch.optim.Adam(model.parameters(), lr=.01, weight_decay=1e-5) + lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=4, gamma=.1) + trainer = HybridVisTrainer(model, criterion, optimizer, lr_scheduler,edge_loader=None, DEVICE=DEVICE) + else: + criterion = SingleVisLoss(umap_loss_fn, recon_loss_fn, lambd=LAMBDA) + optimizer = torch.optim.Adam(model.parameters(), lr=.01, weight_decay=1e-5) + lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=4, gamma=.1) + trainer = SingleVisTrainer(model, criterion, optimizer, lr_scheduler,edge_loader=None, DEVICE=DEVICE) + + # ######################################################################################################################## + # # EVALUATION # + # ######################################################################################################################## + + if dense_al: + vis = DenseALvisualizer(data_provider, projector, RESOLUTION) + else: + vis = visualizer(data_provider, projector, RESOLUTION) + evaluator = Evaluator(data_provider, projector) + + if SETTING == "normal": + timevis = TimeVisBackend(data_provider, projector, vis, evaluator, **config) + elif SETTING == "abnormal": + timevis = AnormalyTimeVisBackend(data_provider, projector, vis, evaluator, period=100, **config) + elif SETTING == "active learning": + timevis = ActiveLearningTimeVisBackend(data_provider, projector, trainer, vis, evaluator, dense_al, **config) + + del config + gc.collect() + return timevis + + +def update_epoch_projection(timevis, EPOCH, predicates): + train_data = timevis.data_provider.train_representation(EPOCH) + test_data = timevis.data_provider.test_representation(EPOCH) + all_data = np.concatenate((train_data, test_data), axis=0) + + fname = "Epoch" if timevis.data_provider.mode == "normal" or timevis.data_provider.mode == "abnormal" else "Iteration" + embedding_path = os.path.join(timevis.data_provider.model_path, "{}_{}".format(fname, EPOCH), "embedding.npy") + if os.path.exists(embedding_path): + embedding_2d = np.load(embedding_path) + else: + embedding_2d = timevis.projector.batch_project(EPOCH, all_data) + np.save(embedding_path, embedding_2d) + + train_labels = timevis.data_provider.train_labels(EPOCH) + test_labels = timevis.data_provider.test_labels(EPOCH) + labels = np.concatenate((train_labels, test_labels), axis=0).tolist() + + training_data_number = timevis.hyperparameters["TRAINING"]["train_num"] + testing_data_number = timevis.hyperparameters["TRAINING"]["test_num"] + training_data_index = list(range(training_data_number)) + testing_data_index = list(range(training_data_number, training_data_number + testing_data_number)) + + # return the image of background + # read cache if exists + fname = "Epoch" if timevis.data_provider.mode == "normal" or timevis.data_provider.mode == "abnormal" else "Iteration" + bgimg_path = os.path.join(timevis.data_provider.model_path, "{}_{}".format(fname, EPOCH), "bgimg.png") + grid_path = os.path.join(timevis.data_provider.model_path, "{}_{}".format(fname, EPOCH), "grid.pkl") + if os.path.exists(bgimg_path) and os.path.exists(grid_path): + with open(os.path.join(grid_path), "rb") as f: + grid = pickle.load(f) + with open(bgimg_path, 'rb') as img_f: + img_stream = img_f.read() + b_fig = base64.b64encode(img_stream).decode() + else: + x_min, y_min, x_max, y_max, b_fig = timevis.vis.get_background(EPOCH, timevis.hyperparameters["VISUALIZATION"]["RESOLUTION"]) + grid = [x_min, y_min, x_max, y_max] + # formating + grid = [float(i) for i in grid] + b_fig = str(b_fig, encoding='utf-8') + + # save results, grid and decision_view + save_path = timevis.data_provider.model_path + iteration_name = "Epoch" if timevis.data_provider.mode == "normal" or timevis.data_provider.mode == "abnormal" else "Iteration" + save_path = os.path.join(save_path, "{}_{}".format(iteration_name, EPOCH)) + with open(os.path.join(save_path, "grid.pkl"), "wb") as f: + pickle.dump(grid, f) + np.save(os.path.join(save_path, "embedding.npy"), embedding_2d) + + color = timevis.vis.get_standard_classes_color() * 255 + color = color.astype(int).tolist() + + # TODO fix its structure + file_name = timevis.hyperparameters["VISUALIZATION"]["EVALUATION_NAME"] + evaluation = timevis.evaluator.get_eval(file_name=file_name) + eval_new = dict() + # eval_new["nn_train_15"] = evaluation["15"]['nn_train'][str(EPOCH)] + # eval_new['nn_test_15'] = evaluation["15"]['nn_test'][str(EPOCH)] + # eval_new['bound_train_15'] = evaluation["15"]['b_train'][str(EPOCH)] + # eval_new['bound_test_15'] = evaluation["15"]['b_test'][str(EPOCH)] + # eval_new['ppr_train'] = evaluation["ppr_train"][str(EPOCH)] + # eval_new['ppr_test'] = evaluation["ppr_test"][str(EPOCH)] + # eval_new["nn_train_15"] = 1 + # eval_new['nn_test_15'] = 1 + # eval_new['bound_train_15'] = 1 + # eval_new['bound_test_15'] = 1 + # eval_new['ppr_train'] = 1 + # eval_new['ppr_test'] = 1 + eval_new["train_acc"] = evaluation["train_acc"][str(EPOCH)] + eval_new["test_acc"] = evaluation["test_acc"][str(EPOCH)] + + label_color_list = [] + label_list = [] + label_name_dict = dict() + for i, label in enumerate(timevis.hyperparameters["CLASSES"]): + label_name_dict[i] = label + + for label in labels: + label_color_list.append(color[int(label)]) + label_list.append(timevis.hyperparameters["CLASSES"][int(label)]) + + prediction_list = [] + prediction = timevis.data_provider.get_pred(EPOCH, all_data).argmax(1) + + for i in range(len(prediction)): + prediction_list.append(timevis.hyperparameters["CLASSES"][prediction[i]]) + + if timevis.hyperparameters["SETTING"] == "normal" or timevis.hyperparameters["SETTING"] == "abnormal": + max_iter = (timevis.hyperparameters["EPOCH_END"] - timevis.hyperparameters["EPOCH_START"]) // timevis.hyperparameters["EPOCH_PERIOD"] + 1 + elif timevis.hyperparameters["SETTING"] == "active learning": + # TODO fix this, could be larger than EPOCH + max_iter = timevis.get_max_iter() + # max_iter = max(timevis.hyperparameters["BASE_ITERATION"], EPOCH) + + # current_index = timevis.get_epoch_index(EPOCH) + # selected_points = np.arange(training_data_number + testing_data_number)[current_index] + selected_points = np.arange(training_data_number + testing_data_number) + for key in predicates.keys(): + if key == "label": + tmp = np.array(timevis.filter_label(predicates[key])) + elif key == "type": + tmp = np.array(timevis.filter_type(predicates[key], int(EPOCH))) + else: + tmp = np.arange(training_data_number + testing_data_number) + selected_points = np.intersect1d(selected_points, tmp) + + properties = np.concatenate((np.zeros(training_data_number, dtype=np.int16), 2*np.ones(testing_data_number, dtype=np.int16)), axis=0) + lb = timevis.get_epoch_index(EPOCH) + ulb = np.setdiff1d(training_data_index, lb) + properties[ulb] = 1 + + return embedding_2d.tolist(), grid, b_fig, label_name_dict, label_color_list, label_list, max_iter, training_data_index, testing_data_index, eval_new, prediction_list, selected_points, properties diff --git a/saved_models/tensorboard/.bazelrc b/saved_models/tensorboard/.bazelrc new file mode 100644 index 0000000000000000000000000000000000000000..543085470024f009a9c26f41ef551ef4cf85a68b --- /dev/null +++ b/saved_models/tensorboard/.bazelrc @@ -0,0 +1,9 @@ +# Use the Angular Ivy compiler +# See https://github.com/angular/angular/blob/master/docs/BAZEL.md#various-flags-used-for-tests +build --define=angular_ivy_enabled=True + +common --experimental_repo_remote_exec # from TensorFlow + +# Use C++ backing implementations for Python proto parsing and deserialization, +# which is much faster (~10x). +build --define=use_fast_cpp_protos=true diff --git a/saved_models/tensorboard/.clang-format b/saved_models/tensorboard/.clang-format new file mode 100644 index 0000000000000000000000000000000000000000..ea91c9ecfe066ddf3809cf85fa6b231a4eba3fe5 --- /dev/null +++ b/saved_models/tensorboard/.clang-format @@ -0,0 +1 @@ +BasedOnStyle: google diff --git a/saved_models/tensorboard/.git-blame-ignore-revs b/saved_models/tensorboard/.git-blame-ignore-revs new file mode 100644 index 0000000000000000000000000000000000000000..4bfdd94fa799f961cca1cf4bedb9185696024008 --- /dev/null +++ b/saved_models/tensorboard/.git-blame-ignore-revs @@ -0,0 +1,92 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== + +# List of commits to ignore by default in `git-blame`. Add to this list +# ONLY commits that are certain to have been functional no-ops, like +# automated reformattings. +# +# To make use of this, you must set the `blame.ignoreRevsFile` Git config +# option to point to this file. See `git help blame` and `git help config` for +# more details. + +# Giant JavaScript reformat () +# git log --author='TensorBoard Gardener' --grep 'prettier: reformat' --format='%H # %s' +fce0c3fbb63b8a3aaab175f5274cf15adac89273 # prettier: reformat directory tensorboard/components +bbe629969692b1fd8b5876d57e0a8d756a499c61 # prettier: reformat directory tensorboard/plugins/text +90eb2073fa8ebc1ecbe5acc0f96d34488434206f # prettier: reformat directory tensorboard/plugins/mesh +9ef4eee6ed1d704994e26bdd53d01c4d063f997a # prettier: reformat directory tensorboard/plugins/image +749332040e8f92cb0858a99d72f6e98a0a5f2854 # prettier: reformat directory tensorboard/plugins/graph +010511580c98df3c5e7680b8b1ea81838671ba51 # prettier: reformat directory tensorboard/plugins/audio +7cbe2bafba4d09a1d9670b849b67d1af2769d58c # prettier: reformat directory tensorboard/plugins/scalar +4a7be4447d4d00f92271982ec41a76663778feb1 # prettier: reformat directory tensorboard/plugins/profile +40266070914ad915fb4f3e57a890ad9ae7db6b3c # prettier: reformat directory tensorboard/plugins/hparams +b3a9aa3b732df93580bb359f6640e0520ce5638a # prettier: reformat directory tensorboard/plugins/pr_curve +a14f6779b79493dae4ed0649996bd8b15956ec5c # prettier: reformat directory tensorboard/plugins/debugger +e6c61797f8cdaa3607fe7bebbee296077ed6a360 # prettier: reformat directory tensorboard/plugins/beholder +103aa46362269198a0f997fc1fdcd89d87f0e70a # prettier: reformat directory tensorboard/plugins/projector +9086d6c9ef8db370ad5d2b3619ba2f077e11cccd # prettier: reformat directory tensorboard/plugins/histogram +1420ad645db2fa4eca5bb93292f692603e0c1d4b # prettier: reformat directory tensorboard/plugins/distribution +5aaf86506448c05154c8164c924ab633b1eb8c5e # prettier: reformat directory tensorboard/plugins/custom_scalar +c88af8dac986e6cfe938167d33899ea9e193d750 # prettier: reformat directory tensorboard/plugins/profile/pod_viewer +d539b827b8a7e2c12018dde9f4405b611291ef1a # prettier: reformat directory tensorboard/plugins/profile/memory_viewer +65c31bde8c20820ece126b0f806e488bcb2497b8 # prettier: reformat directory tensorboard/plugins/interactive_inference +8bc5430e2911822ffab02a598342cda542c5fa2c # prettier: reformat directory tensorboard/plugins/example/tensorboard_plugin_example +b3a5c14645da6980ac329b7850aa70be9914ad80 # prettier: reformat directory tensorboard/plugins/interactive_inference/witwidget/notebook/jupyter/js + +# Giant Python reformat () +# git log --author='TensorBoard Gardener' --grep 'black: reformat' --format='%H # %s' +a20f53e11f5d48f5eee66d178427eacd7469bb11 # black: reformat directory tensorboard +c2fbc3e1f75b39d147a551dd8b937afdb9bf42ea # black: reformat directory tensorboard/util +3de1082df62ad697eae99cbd2cd63aa240f21e15 # black: reformat directory tensorboard/defs +91b0c32e8312a75efa944e50d4be0504c8ce5585 # black: reformat directory tensorboard/data +dfc32ae277c76b64893f96ae35b94b49df68408f # black: reformat directory tensorboard/tools +cc77a6320ab5901ad277bac6d98444fe7237098f # black: reformat directory tensorboard/compat +6f10a3d2c4a9e286db6b30886171ce0b938c0aeb # black: reformat directory tensorboard/summary +388e97cd6e20dd2882e3c9cef44244d63f85bcd1 # black: reformat directory tensorboard/scripts +ee55f91226a736579b5e2b396190ccc50959f40c # black: reformat directory tensorboard/plugins +ba4e12754d4be543d5b6aa16568081a7155f1e5f # black: reformat directory tensorboard/backend +5a3ab3c9282b72cd66b63dd40ebf9e5e50118b6d # black: reformat directory tensorboard/uploader +9146ae0e87a3403d48ff299041c974bf9d123c39 # black: reformat directory tensorboard/pip_package +2726634abc010f8a17c21aa6e30877f7bcbe028b # black: reformat directory tensorboard/plugins/text +159a9911f3ca2bc9cbf0b1dca1ef54f166cf0fb2 # black: reformat directory tensorboard/plugins/mesh +89cd022a958b15454e977e28e04900b21e63bdf4 # black: reformat directory tensorboard/plugins/core +c71e21b695ec58f5585f009dc098d513c97fc6a6 # black: reformat directory tensorboard/plugins/image +5e8da1bad672050082754624dd9cec50b6bc3238 # black: reformat directory tensorboard/plugins/graph +c2d220396a66114231e95d8ca55d7386a771c96d # black: reformat directory tensorboard/plugins/audio +47f246bfd7786a31c2cf2bb06e1b3cf35993f706 # black: reformat directory tensorboard/plugins/scalar +666b75e91fe505ab28900230cd43970482fd045f # black: reformat directory tensorboard/plugins/profile +3aa9cdf4c979fa4ce1c212debd1504442c93dd82 # black: reformat directory tensorboard/plugins/hparams +7664c071a00d3b3021d56e04838ceed547fac79c # black: reformat directory tensorboard/functionaltests +6248d54089524ccff5fe4aedeb2c5089b62c9a12 # black: reformat directory tensorboard/plugins/pr_curve +f53e34d839f1deff8bfd9199413733863e42f1e8 # black: reformat directory tensorboard/plugins/debugger +c92eaa91bacd0fcf8454f56b8ca112073a339828 # black: reformat directory tensorboard/plugins/beholder +92a6e98ab07255ed642dd074017558be44b16f7e # black: reformat directory tensorboard/plugins/projector +73d977ea7eda89102eca03a943580a7fddc6f829 # black: reformat directory tensorboard/plugins/histogram +c6020666b2d93541a9324547d7a7b6677e0fc6e4 # black: reformat directory tensorboard/plugins/debugger_v2 +242e5cce72971d14dba3505f3d66534a8e8e6c26 # black: reformat directory tensorboard/plugins/distribution +51b9e27fb096c9df055de4461cbdfb344b344700 # black: reformat directory tensorboard/plugins/custom_scalar +1332da76f09664d31ed13afbaa9824ffd6e7bc77 # black: reformat directory tensorboard/backend/event_processing +8a8025e8e99b03bf6b7ee0aafc7e20d37600f0c7 # black: reformat directory tensorboard/plugins/interactive_inference +ae32a4adcab8c3349c3bff21240078334fef1371 # black: reformat directory tensorboard/examples/plugins/example_basic +1ccf3fe1c122cd89cde577ffc53b31b9b4e5ee20 # black: reformat directory tensorboard/examples/plugins/example_basic/tensorboard_plugin_example + +# Small BUILD reformat () +ea4e9bbc885784a283b8b79974132df7c6cdcc50 # Reformat all `*BUILD` files with `buildifier` + +# third_party/js.bzl reformat () +3e17c44d5bc3c7af72f14059e39d4b872e95d573 # Buildifier format js.bzl for future edits (#3332) + +# Prettier 1.18.2 to 2.1.1 upgrade () +e42a7f18b33c7a85b51db28d465ec01915a8e725 # prettier: reformat code for 2.1.1 diff --git a/saved_models/tensorboard/.github/ISSUE_TEMPLATE/bug_report.md b/saved_models/tensorboard/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000000000000000000000000000000000..6f4ac7a1b86418750f761629bec0a2b1bef302c1 --- /dev/null +++ b/saved_models/tensorboard/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,40 @@ +--- +name: Bug report +about: Report a problem in TensorBoard +title: '' +labels: '' +assignees: '' + +--- + +Consider Stack Overflow for getting support using TensorBoard—they have +a larger community with better searchability: + +https://stackoverflow.com/questions/tagged/tensorboard + +Do not use this template for for setup, installation, or configuration +issues. Instead, use the “installation problem” issue template: + +https://github.com/tensorflow/tensorboard/issues/new?template=installation_problem.md + +To report a problem with TensorBoard itself, please fill out the +remainder of this template. + +## Environment information (required) + +Please run `diagnose_tensorboard.py` (link below) in the same +environment from which you normally run TensorFlow/TensorBoard, and +paste the output here: + +https://raw.githubusercontent.com/tensorflow/tensorboard/master/tensorboard/tools/diagnose_tensorboard.py + +For browser-related issues, please additionally specify: + + - Browser type and version (e.g., Chrome 64.0.3282.140): + - Screenshot, if it’s a visual issue: + +## Issue description + +Please describe the bug as clearly as possible. How can we reproduce the +problem without additional resources (including external data files and +proprietary Python modules)? diff --git a/saved_models/tensorboard/.github/ISSUE_TEMPLATE/feature_request.md b/saved_models/tensorboard/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000000000000000000000000000000000..d8fff6771b2e45b60480154357304b188514e11b --- /dev/null +++ b/saved_models/tensorboard/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,11 @@ +--- +name: Feature request +about: Suggest an enhancement to TensorBoard +title: '' +labels: '' +assignees: '' + +--- + +Please describe the problem that you’re facing and the enhancements that +you’d like to see. Feel free to include screenshots or code samples. diff --git a/saved_models/tensorboard/.github/ISSUE_TEMPLATE/installation_problem.md b/saved_models/tensorboard/.github/ISSUE_TEMPLATE/installation_problem.md new file mode 100644 index 0000000000000000000000000000000000000000..c55ef4e146de03f6957403c1ed0e3467b770be25 --- /dev/null +++ b/saved_models/tensorboard/.github/ISSUE_TEMPLATE/installation_problem.md @@ -0,0 +1,31 @@ +--- +name: Installation problem +about: Report a problem installing or starting TensorBoard +title: '' +labels: '' +assignees: '' + +--- + +Use this template if you have a problem building, installing, +configuring, or starting TensorBoard and you suspect that there is a +problem with TensorBoard itself. + +Consider first reaching out to Stack Overflow for support—they have a +larger community with better searchability: + +https://stackoverflow.com/questions/tagged/tensorboard + +## Environment information (required) + +Please run `diagnose_tensorboard.py` (link below) in the same +environment from which you normally run TensorFlow/TensorBoard, and +paste the output here: + +https://raw.githubusercontent.com/tensorflow/tensorboard/master/tensorboard/tools/diagnose_tensorboard.py + +## Steps to reproduce (required) + +Please provide explicit commands to reproduce the problem in a fresh +environment (virtualenv, Conda environment, …). Include any necessary +configuration, such as Conda `environment.yml` files. diff --git a/saved_models/tensorboard/.github/PULL_REQUEST_TEMPLATE.md b/saved_models/tensorboard/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000000000000000000000000000000000..86a5cce4be3365e9da0c2f24aaa0ff4c36f21ce0 --- /dev/null +++ b/saved_models/tensorboard/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,9 @@ +* Motivation for features / changes + +* Technical description of changes + +* Screenshots of UI changes + +* Detailed steps to verify changes work correctly (as executed by you) + +* Alternate designs / implementations considered diff --git a/saved_models/tensorboard/.github/workflows/ci.yml b/saved_models/tensorboard/.github/workflows/ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..09b1dced3c702729a0d27765dbd407b5c3127d4e --- /dev/null +++ b/saved_models/tensorboard/.github/workflows/ci.yml @@ -0,0 +1,160 @@ +# GitHub Actions CI definition for TensorBoard. +# +# YAML schema for GitHub Actions: +# https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions +# +# Helpful YAML parser to clarify YAML syntax: +# https://yaml-online-parser.appspot.com/ + +# For now, we only use GitHub Actions for lint checks, pending better +# support for hermetic-style caching. See: +# https://github.com/actions/cache/issues/109 +name: CI + +on: + push: + branches: + - master + - '[0-9]+.*' + - 'ci-*' + pull_request: {} + +env: + BUILDTOOLS_VERSION: '3.0.0' + BUILDIFIER_SHA256SUM: 'e92a6793c7134c5431c58fbc34700664f101e5c9b1c1fcd93b97978e8b7f88db' + BUILDOZER_SHA256SUM: '3d58a0b6972e4535718cdd6c12778170ea7382de7c75bc3728f5719437ffb84d' + +jobs: + lint-python-flake8: + runs-on: ubuntu-16.04 + strategy: + fail-fast: false + matrix: + # flake8 should run on each Python version that we target, + # because the errors and warnings can differ due to language + # changes, and we want to catch them all. + python_version: ['3.5', '3.7'] + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-python@v1 + with: + python-version: ${{ matrix.python_version }} + architecture: 'x64' + - name: 'Install flake8' + run: | + python -m pip install -U pip + pip install flake8 -c ./tensorboard/pip_package/requirements_dev.txt + - run: pip freeze --all + - name: 'Lint Python code for errors with flake8' + # See: http://flake8.pycqa.org/en/3.7.8/user/error-codes.html + # Use the comment '# noqa: ' to suppress. + run: flake8 . --count --select=E9,F63,F7,F82,F401 --show-source --statistics + + lint-python: + runs-on: ubuntu-16.04 + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-python@v1 + with: + python-version: '3.6' + architecture: 'x64' + - name: 'Install black' + run: | + python -m pip install -U pip + pip install black -c ./tensorboard/pip_package/requirements_dev.txt + - run: pip freeze --all + - name: 'Lint Python code for style with Black' + # You can run `black .` to fix all Black complaints. + run: black --check --diff . + + lint-docs: + runs-on: ubuntu-16.04 + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-python@v1 + with: + python-version: '3.6' + architecture: 'x64' + - name: 'Install yamllint' + run: | + python -m pip install -U pip + pip install yamllint -c ./tensorboard/pip_package/requirements_dev.txt + - run: pip freeze --all + - name: 'Lint YAML for gotchas with yamllint' + # Use '# yamllint disable-line rule:foo' to suppress. + run: yamllint -c docs/.yamllint docs docs/.yamllint + - name: 'Install the TensorFlow docs notebook tools' + run: | + nbfmt_version="174c9a5c1cc51a3af1de98d84824c811ecd49029" + python3 -m pip install -U git+https://github.com/tensorflow/docs@${nbfmt_version} + - name: 'Use nbfmt to check Colab notebooks for formatting' + run: git ls-files -z '*.ipynb' | xargs -0 python3 -m tensorflow_docs.tools.nbfmt --test + + lint-frontend: + runs-on: ubuntu-16.04 + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-node@v1 + - run: yarn install --ignore-engines + # You can run `yarn fix-lint` to fix all Prettier complaints. + - run: yarn lint + # Make sure no tests are skipped with "focused" tests. + - run: | + ! git grep -E 'f(it|describe)\(' 'tensorboard/*_test.ts' + # Make sure no one depends on Angular material and CDK directly. Please + # import the indirection in //tensorboard/webapp/angular. + - run: | + ! git grep -E '"@npm//@angular/material"|"@npm//@angular/cdk"' 'tensorboard/*/BUILD' ':!tensorboard/webapp/BUILD' ':!tensorboard/webapp/angular/BUILD' + # Cannot directly depend on d3 in webapp. Must depend on + # `//tensorboard/webapp/third_party:d3` instead. + - run: | + ! git grep -E '@npm//d3' 'tensorboard/webapp/**/*BUILD' ':!tensorboard/webapp/third_party/**' + + lint-build: + runs-on: ubuntu-16.04 + steps: + - uses: actions/checkout@v1 + - name: 'Set up Buildifier' + run: | + ci/download_buildifier.sh "${BUILDTOOLS_VERSION}" "${BUILDIFIER_SHA256SUM}" ~/buildifier + sudo mv ~/buildifier /usr/local/bin/buildifier + - name: 'Set up Buildozer' + run: | + ci/download_buildozer.sh "${BUILDTOOLS_VERSION}" "${BUILDOZER_SHA256SUM}" ~/buildozer + sudo mv ~/buildozer /usr/local/bin/buildozer + - name: 'Lint BUILD files' + # TODO(tensorboard-team): address all lint warnings and remove the exemption. + run: + git ls-files -z '*BUILD' third_party/js.bzl third_party/workspace.bzl | xargs -0 buildifier --mode=check --lint=warn + --warnings=-native-py,-native-java + - run: ./tensorboard/tools/mirror_urls_test.sh + - name: 'Lint for no py2 BUILD targets' + # Use | to start a literal so YAML doesn't complain about the '!' character. + run: | + ! git grep 'python_version = "PY2"' '*BUILD' + - name: 'No comments on licenses rule' + # Assert buildozer error code for 'success, when no changes were made'. + # https://github.com/bazelbuild/buildtools/blob/master/buildozer/README.md#error-code + run: | + buildozer '//tensorboard/...:%licenses' remove_comment && false || test $? = 3 + + lint-proto: + runs-on: ubuntu-16.04 + steps: + - uses: actions/checkout@v1 + - name: clang-format lint + uses: DoozyX/clang-format-lint-action@v0.5 + with: + source: ./tensorboard + # Exclude tensorboard/compat because the source of truth is TensorFlow. + exclude: ./tensorboard/compat/proto + extensions: 'proto' + clangFormatVersion: 9 + + check-misc: + runs-on: ubuntu-16.04 + steps: + - uses: actions/checkout@v1 + - run: ./tensorboard/tools/do_not_submit_test.sh + - run: ./tensorboard/tools/license_test.sh + - run: ./tensorboard/tools/whitespace_hygiene_test.py diff --git a/saved_models/tensorboard/.gitignore b/saved_models/tensorboard/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..07d8fa2d72e2cf5173c69300068f8aec68706b34 --- /dev/null +++ b/saved_models/tensorboard/.gitignore @@ -0,0 +1,7 @@ +/bazel-* +/.idea +.DS_Store +*.pyc +*.egg-info/ +*.swp +node_modules diff --git a/saved_models/tensorboard/.prettierrc.json b/saved_models/tensorboard/.prettierrc.json new file mode 100644 index 0000000000000000000000000000000000000000..77ed90c0a16a13244e18ffeabc36b7901509331b --- /dev/null +++ b/saved_models/tensorboard/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "singleQuote": true, + "trailingComma": "es5", + "bracketSpacing": false, + "arrowParens": "always" +} diff --git a/saved_models/tensorboard/.travis.yml b/saved_models/tensorboard/.travis.yml new file mode 100644 index 0000000000000000000000000000000000000000..fcf35af9a3ad096c2d2cdcec7bbfca87ecebaded --- /dev/null +++ b/saved_models/tensorboard/.travis.yml @@ -0,0 +1,110 @@ +dist: xenial +language: python +python: + - "3.6" + +branches: + only: + - master + - /^\d+\.\d+(\.\d+)?(-\S*)?$/ + +# Update the `nvm use` stanza below when updating this. +node_js: + - "11" + +env: + # Keep this Bazel version in sync with the `versions.check` directive + # near the top of our WORKSPACE file. + # + # Grab the BAZEL_SHA256SUM from the Bazel releases page; e.g.: + # bazel-0.20.0-linux-x86_64.sha256 + global: + - BAZEL=2.1.0 + - BAZEL_SHA256SUM=e13581d44faad6ac807dd917e682fef20359d26728166ac35dadd8ee653a580d + matrix: + - TF_VERSION_ID=tf-nightly + - TF_VERSION_ID= # Do not install TensorFlow in this case + +cache: + # Don't cache the Pip directory. We pull in a new `tf-nightly` wheel + # every day, and Pip caches are never evicted, so this quickly bloats + # to many gigabytes and adds minutes to the CI time. + pip: false + # Cache directories for Bazel. See ci/bazelrc for details. + directories: + - $HOME/.cache/tb-bazel-repo + - $HOME/.cache/tb-bazel-disk + +# Each bullet point is displayed in the Travis log as one collapsed line, which +# indicates how long it took. Travis will check the return code at the end. We +# can't use `set -e` in the YAML file since it might impact Travis internals. +# If inline scripts get too long, Travis surprisingly prints them twice. + +before_install: + - elapsed() { TZ=UTC printf "Time %(%T)T %s\n" "$SECONDS" "$1"; } + - elapsed "before_install" + - ci/download_bazel.sh "${BAZEL}" "${BAZEL_SHA256SUM}" ~/bazel + - sudo mv ~/bazel /usr/local/bin/bazel + - cp ci/bazelrc ~/.bazelrc + - elapsed "before_install (done)" + +install: + - elapsed "install" + - "PY3=\"$(python -c 'if __import__(\"sys\").version_info[0] > 2: print(1)')\"" + # Older versions of Pip sometimes resolve specifiers like `tf-nightly` + # to versions other than the most recent(!). + - pip install -U pip + # Uninstall older Travis numpy to avoid upgrade-in-place issues. + - pip uninstall -y numpy + - | + pip install \ + -r tensorboard/pip_package/requirements.txt \ + -r tensorboard/pip_package/requirements_dev.txt \ + ; + # Keep the node version in sync with node_js key above. + - nvm use v11 + - | + # Install TensorFlow if requested + if [ -n "${TF_VERSION_ID}" ]; then + pip install -I "${TF_VERSION_ID}" + fi + # Workaround for https://github.com/travis-ci/travis-ci/issues/7940 + - sudo rm -f /etc/boto.cfg + - pip freeze # print installed distributions, for debugging purposes + - elapsed "install (done)" + +before_script: + # Note: Lint checks happen on GitHub Actions; see .github/workflows/ci.yml. + - elapsed "before_script" + - | + # Specify subset of tests to run depending on TF installation config. + # We condition the value of --test_tag_filters so that we can run the + # bazel test command unconditionally which produces nicer log output. + if [ -z "${TF_VERSION_ID}" ]; then + test_tag_filters=support_notf + else + test_tag_filters= + fi + - elapsed "before_script (done)" + +# Commands in this section should only fail if it's our fault. Travis will +# categorize them as 'failed', rather than 'error' for other sections. +script: + - elapsed "script" + # Note: bazel test implies fetch+build, but this gives us timing. + - elapsed && bazel fetch //tensorboard/... + - elapsed && bazel build //tensorboard/... + - elapsed && bazel test //tensorboard/... --test_tag_filters="${test_tag_filters}" + - elapsed && bazel run //tensorboard/pip_package:test_pip_package -- --tf-version "${TF_VERSION_ID}" + # Run manual S3 test + - elapsed && bazel test //tensorboard/compat/tensorflow_stub:gfile_s3_test + - elapsed && bazel test //tensorboard/summary/writer:event_file_writer_s3_test + - elapsed "script (done)" + +after_script: + # Bazel launches daemons unless --batch is used. + - elapsed "after_script" + - bazel shutdown + +notifications: + email: false diff --git a/saved_models/tensorboard/.vscode/settings.json b/saved_models/tensorboard/.vscode/settings.json new file mode 100644 index 0000000000000000000000000000000000000000..d50a553493fba8f3bc996844260753f68c5e24c8 --- /dev/null +++ b/saved_models/tensorboard/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.pythonPath": "/usr/bin/python" +} \ No newline at end of file diff --git a/saved_models/tensorboard/ADDING_A_PLUGIN.md b/saved_models/tensorboard/ADDING_A_PLUGIN.md new file mode 100644 index 0000000000000000000000000000000000000000..95ec4e65a345230271d976ef90383751664a4a4c --- /dev/null +++ b/saved_models/tensorboard/ADDING_A_PLUGIN.md @@ -0,0 +1,194 @@ +# Developing a TensorBoard plugin + +## Overview + +This document will explain high level concepts using the [basic summary example][example-basic] and provide guidelines on plugin authorship. + +To get started right away, you can clone one of these examples: + - [Basic summary 'Greeter'](./tensorboard/examples/plugins/example_basic) + - [Raw scalars](./tensorboard/examples/plugins/example_raw_scalars) + +![Example screenshot](./docs/images/example_basic.png "Basic example plugin") + +[example-basic]: https://github.com/tensorflow/tensorboard/blob/master/tensorboard/examples/plugins/example_basic + +### Architecture + +You know (and, we hope, love!) TensorBoard’s core features! However, in every TensorBoard user’s life, there comes a time when you want some cool new visualization that just doesn’t exist yet. That’s what the plugin system is for. + +A plugin is comprised of three components: + + - The **Backend** is where you write Python code that does post-processing of your data and serves the data to your plugin frontend in the browser. + - The **Frontend** is where your custom visualization lives. + - The optional **Summary** component is how users of your plugins will write data that your plugin can read from their TensorFlow programs. See [docs](https://www.tensorflow.org/api_docs/python/tf/summary) for details. + +The backend and frontend operate within a plugin lifecycle: + + - **1) Plugin initializes**: When a user starts `tensorboard --logdir ...`, TensorBoard discovers available plugins, allows them to parse command line flags if needed, and configures URL routes to be served. + + - **2) User loads TensorBoard**: When a user opens the frontend in a web browser, TensorBoard reads plugin frontend metadata and collects all active plugins. + + - **3) User opens the dashboard**: When a user selects the plugin's dashboard in the UI, TensorBoard loads an IFrame with the plugin's ES module and tells it to render. + + - **4) Plugin handles routes**: When a plugin's frontend makes URL requests to its backend, route handlers can respond with collected data. + + +### Backend: How the plugin processes data, and sends it to the browser + +#### Terminology + +First, let's define some terminology used in TensorBoard. Definitions can be found in [`base_plugin.py`]. + + - `TBPlugin`: The base class for all plugins. Can be used as an entry point. Defining a TBPlugin is required. + - `TBLoader`: The base class for plugins requiring flag parsing or custom loading. Defining a TBLoader is optional. + - `TBContext`: The container of information passed from TensorBoard core to plugins when they are constructed. Includes 'logdir', 'flags', 'multiplexer', etc. + - `EventMultiplexer`: The mechanism for reading event data across runs and tags. Other multiplexers exist for database providers, etc. Do not read events directly. + +A plugin backend is responsible for providing information about its frontend counterpart, serving frontend resources, and surfacing necessary data to the frontend by implementing routes (endpoints). TensorBoard begins by detecting plugins using the [Python `entry_points` mechanism][entrypoints-spec]; see the example plugin's [`setup.py`][entrypoints-declaration] for a full example of how to declare a plugin. The entry point must define either a `TBPlugin` or `TBLoader` class. + +[entrypoints-spec]: https://packaging.python.org/specifications/entry-points/ +[entrypoints-declaration]: https://github.com/tensorflow/tensorboard/blob/373eb09e4c5d2b3cc2493f0949dc4be6b6a45e81/tensorboard/plugins/example/setup.py#L31-L35 +[`base_plugin.py`]: https://github.com/tensorflow/tensorboard/blob/master/tensorboard/plugins/base_plugin.py + +You can start building the backend by subclassing `TBPlugin` in [`base_plugin.py`] with this structure: + +```python +class MyPlugin(base_plugin.TBPlugin): + plugin_name = "my_awesome_plugin" + + def __init__(self, context): # ... + + def get_plugin_apps(self): + return { "/tags": self._serve_tags } + + ### Upon loading TensorBoard in browser + def is_active(self): # ... + + def frontend_metadata(self): + return base_plugin.FrontendMetadata(es_module_path = "/index.js", tab_name = "Awesome ML") + + ### Route handling + def _serve_tags(self): # Returns a WSGI application that responds to the request. +``` + +#### TBPlugin + - `plugin_name`: Required field used as a unique ID for the plugin. This must only contain alphanumeric characters, hyphens, and underscores. + - `get_plugin_apps()`: This should return a `dict` mapping route paths to WSGI applications: e.g., `"/tags"` might map to `self._serve_tags`. + - `is_active()`: This should return whether the plugin is active (whether there exists relevant data for the plugin to process). TensorBoard will hide inactive plugins from the main navigation bar. We strongly recommend this to be a cheap operation. + - `frontend_metadata()`: Defines how the plugin will be displayed on the frontend. See [`base_plugin.FrontendMetadata()`](https://github.com/tensorflow/tensorboard/blob/18dec9279e18a8222c9d83f90219ecddad591c46/tensorboard/plugins/base_plugin.py#L101). + - `disable_reload`: Whether to disable the reload button and auto-reload timer. A `bool`; defaults to `False`. + - `es_module_path`: ES module to use as an entry point to this plugin. A `str` that is a key in the result of `get_plugin_apps()`. + - `remove_dom`: Whether to remove the plugin DOM when switching to a different plugin. A `bool`; defaults to `False`. + - `tab_name`: Name to show in the menu item for this dashboard within the navigation bar. May differ from the plugin name. An optional `str`, that defaults to the plugin name. + +If your plugin requires parsing flags or custom loading, consider defining a `TBLoader` as the entry point. Doing so is optional. + +For example: + +```python +class MyLoader(base_plugin.TBLoader): + def define_flags(self, parser): + parser.add_argument_group('custom').add_argument('--enable_my_extras') + + def fix_flags(self, flags): + if flags.enable_my_extras: + raise ValueError('Extras not ready') + + def load(self, context): + return MyPlugin(context) +``` + +#### TBLoader + - `define_flags(parser)`: Optional method that takes an argparse.Namespace and exposes command-line flags. Please prefix flags with the name of the plugin to avoid collision. + - `fix_flags(flags)`: Optional method needed to fix or sanitize command-line flags. + - `load(context)`: Required method that takes a TBContext and returns a TBPlugin instance. + +It's recommended that plugins using flags call the `parser.add_argument_group(plugin_name)`. To learn more about the flag definition, see [docs](https://docs.python.org/library/argparse.html#adding-arguments) + + + +## Reading data from event files + +On instantiation, a plugin is provided a [`PluginEventMultiplexer`] object as a field on the TBContext, from which to read data. The `PluginRunToTagToContent` method on the multiplexer returns a dictionary containing all run–tag pairs and associated summary metadata for your plugin. + +Plugins are not technically restricted from arbitrary file system and network access, but we strongly recommend using the multiplexer exclusively. This abstracts over the filesystem (local or remote), provides a consistent user experience for runs and tags across plugins, and is optimized for TensorBoard read patterns. + +[`PluginEventMultiplexer`]: https://github.com/tensorflow/tensorboard/blob/master/tensorboard/backend/event_processing/plugin_event_multiplexer.py + +Example use of the multiplexer: +```python +class MyPlugin(base_plugin.TBPlugin): + def __init__(self, context): + self.multiplexer = context.multiplexer + + def preprocess_data(self): + """ + {runName: { images: [tag1, tag2, tag3], + scalarValues: [tagA, tagB, tagC], + histograms: [tagX, tagY, tagZ], + compressedHistograms: [tagX, tagY, tagZ], + graph: true, meta_graph: true}} + """ + runs = self.multiplexer.Runs() + + """ + [ + {wall_time: 100..., step: 1, tensor_proto: ...}, + {wall_time: 100..., step: 2, tensor_proto: ...}, + ... + ] + """ + events = self.multiplexer.Tensors(run, tag) + + """{run: {tag: content}, ...}""" + content = PluginRunToTagToContent(plugin_name) +``` + +For the complete EventMultiplexer API, see [`PluginEventMultiplexer`][`PluginEventMultiplexer`]. + +### Frontend: How the plugin visualizes your new data + +Now that we have an API, it’s time for the cool part: adding a visualization! + +TensorBoard does not impose any framework/tool requirements for building a frontend—you can use React, Vue.js, jQuery, DOM API, or any new famous frameworks and use, for example, Webpack to create a JavaScript bundle. TensorBoard only requires an [ES Module] that is an entry point to your frontend ([example ES module][example-es-module]). Do note that all frontend resources have to be served by the plugin backend ([example backend][example-backend]). + +When the dashboard opens, TensorBoard will create an IFrame and load the ES module defined by the backend's metadata. It will call the `render()` method in the module. + +[ES Module]: https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/ +[example-es-module]: https://github.com/tensorflow/tensorboard/blob/373eb09e4c5d2b3cc2493f0949dc4be6b6a45e81/tensorboard/plugins/example/tensorboard_plugin_example/static/index.js#L16 +[example-backend]: https://github.com/tensorflow/tensorboard/blob/373eb09e4c5d2b3cc2493f0949dc4be6b6a45e81/tensorboard/plugins/example/tensorboard_plugin_example/plugin.py#L45 + +Consistency in user interface and experience, we believe, is important for happy users; for example, a run selection should be consistent for all plugins in TensorBoard. TensorBoard will provide a library that helps you build a dashboard like Scalars dashboard by providing UI components. We _will_ provide a library that can be bundled into your frontend binary (please follow [issue #2357][dynamic-plugin-tracking-bug] for progress): + +[dynamic-plugin-tracking-bug]: https://github.com/tensorflow/tensorboard/issues/2357 + +We recommend that you vendor all resources required to use your plugin, including scripts, stylesheets, fonts, and images. All built-in TensorBoard plugins follow this policy. + + +### Summaries: How the plugin gets data + +Your plugin will need to provide a way for users to log **summaries**, which are the mechanism for getting data from a TensorFlow model to disk and eventually into your TensorBoard plugin for visualization. For example, the example plugin provides a novel [“greeting” TensorFlow op][greeting-op] that writes greeting summaries. A summary is a protocol buffer with the following information: + + - tag: A string that uniquely identifies a data series, often supplied by the user (e.g., “loss”). + - step: A temporal index (an integer), often batch number of epoch number. + - tensor: The actual value for a tag–step combination, as a tensor of arbitrary shape and dtype (e.g., `0.123`, or `["one", "two"]`). + - metadata: Specifies [which plugin owns the summary][owner-identifier], and provides an arbitrary plugin-specific payload. + +[greeting-op]: https://github.com/tensorflow/tensorboard/blob/373eb09e4c5d2b3cc2493f0949dc4be6b6a45e81/tensorboard/plugins/example/tensorboard_plugin_example/summary_v2.py#L28-L48 +[owner-identifier]: https://github.com/tensorflow/tensorboard/blob/373eb09e4c5d2b3cc2493f0949dc4be6b6a45e81/tensorboard/plugins/example/tensorboard_plugin_example/summary_v2.py#L64 + +## Distribution + +A plugin should be distributed as a Pip package, and may be uploaded to PyPI. Please follow the [PyPI distribution archive upload guide][pypi-upload] for more information. + +[pypi-upload]: https://packaging.python.org/tutorials/packaging-projects/#uploading-the-distribution-archives + +## Guideline on naming and branding + +We recommend that your plugin have an intuitive name that reflects the functionality—users, seeing the name, should be able to identify that it is a TensorBoard plugin and its function. Also, we recommend that you include the name of the plugin as part of the Pip package. For instance, a plugin `foo` should be distributed in a Pip package named `tensorboard_plugin_foo`. + +A predictable package naming scheme not only helps users find your plugin, but also helps you find a unique plugin name by surveying PyPI. TensorBoard requires that all loaded plugins have unique names. However, the plugin name can differ from the [user-facing display name][display-name]; display names are not strictly required to be unique. + +[display-name]: https://github.com/tensorflow/tensorboard/blob/373eb09e4c5d2b3cc2493f0949dc4be6b6a45e81/tensorboard/plugins/base_plugin.py#L35-L39 + +Lastly, when distributing a custom plugin of TensorBoard, we recommend that it be branded as “Foo for TensorBoard” (rather than “TensorBoard Foo”). TensorBoard is distributed under the Apache 2.0 license, but the name itself is a trademark of Google LLC. diff --git a/saved_models/tensorboard/AUTHORS b/saved_models/tensorboard/AUTHORS new file mode 100644 index 0000000000000000000000000000000000000000..a46ae7e616ab3a420d9fb2691ee8d8650032a39f --- /dev/null +++ b/saved_models/tensorboard/AUTHORS @@ -0,0 +1,10 @@ +# This is the official list of TensorFlow authors for copyright purposes. +# This file is distinct from the CONTRIBUTORS files. +# See the latter for an explanation. + +# Names should be added to this file as: +# Name or Organization +# The email address is not required for organizations. + +Google Inc. +Yuan Tang terrytangyuan@gmail.com diff --git a/saved_models/tensorboard/BUILD b/saved_models/tensorboard/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..3f5e740543304a7cfa362c2033c470dcc414fc0f --- /dev/null +++ b/saved_models/tensorboard/BUILD @@ -0,0 +1,24 @@ +load("@npm_bazel_typescript//:index.bzl", "ts_config") + +licenses(["notice"]) + +exports_files(["tsconfig.json"]) + +ts_config( + name = "tsconfig-test", + src = "tsconfig-test.json", + visibility = [ + "//tensorboard:internal", + ], + deps = [":tsconfig.json"], +) + +# Inspired from internal tsconfig generation for project like TensorBoard. +ts_config( + name = "tsconfig-lax", + src = "tsconfig-lax.json", + visibility = [ + "//tensorboard:internal", + ], + deps = [], +) diff --git a/saved_models/tensorboard/BUILD-local_execution_config_python.txt b/saved_models/tensorboard/BUILD-local_execution_config_python.txt new file mode 100644 index 0000000000000000000000000000000000000000..07a9dd8a21af288f23200ac75125a51e0c78e8c0 --- /dev/null +++ b/saved_models/tensorboard/BUILD-local_execution_config_python.txt @@ -0,0 +1,290 @@ +licenses(["restricted"]) + +package(default_visibility = ["//visibility:public"]) + +# Point both runtimes to the same python binary to ensure we always +# use the python binary specified by ./configure.py script. +load("@bazel_tools//tools/python:toolchain.bzl", "py_runtime_pair") + +py_runtime( + name = "py2_runtime", + interpreter_path = "C:\\Users\\llmhy\\AppData\\Local\\Programs\\Python\\Python310\\python.exe", + python_version = "PY2", +) + +py_runtime( + name = "py3_runtime", + interpreter_path = "C:\\Users\\llmhy\\AppData\\Local\\Programs\\Python\\Python310\\python.exe", + python_version = "PY3", +) + +py_runtime_pair( + name = "py_runtime_pair", + py2_runtime = ":py2_runtime", + py3_runtime = ":py3_runtime", +) + +toolchain( + name = "py_toolchain", + toolchain = ":py_runtime_pair", + toolchain_type = "@bazel_tools//tools/python:toolchain_type", + target_compatible_with = ["@local_execution_config_platform//:platform_constraint"], + exec_compatible_with = ["@local_execution_config_platform//:platform_constraint"], +) + +# To build Python C/C++ extension on Windows, we need to link to python import library pythonXY.lib +# See https://docs.python.org/3/extending/windows.html +cc_import( + name = "python_lib", + interface_library = select({ + ":windows": ":python_import_lib", + # A placeholder for Unix platforms which makes --no_build happy. + "//conditions:default": "not-existing.lib", + }), + system_provided = 1, +) + +cc_library( + name = "python_headers", + hdrs = [":python_include"], + deps = select({ + ":windows": [":python_lib"], + "//conditions:default": [], + }), + includes = ["python_include"], +) + +cc_library( + name = "numpy_headers", + hdrs = [":numpy_include"], + includes = ["numpy_include"], +) + +config_setting( + name = "windows", + values = {"cpu": "x64_windows"}, + visibility = ["//visibility:public"], +) + +genrule( + name = "python_include", + outs = [ + "python_include/Python.h", + "python_include/abstract.h", + "python_include/bltinmodule.h", + "python_include/boolobject.h", + "python_include/bytearrayobject.h", + "python_include/bytesobject.h", + "python_include/cellobject.h", + "python_include/ceval.h", + "python_include/classobject.h", + "python_include/code.h", + "python_include/codecs.h", + "python_include/compile.h", + "python_include/complexobject.h", + "python_include/context.h", + "python_include/cpython/abstract.h", + "python_include/cpython/bytearrayobject.h", + "python_include/cpython/bytesobject.h", + "python_include/cpython/ceval.h", + "python_include/cpython/code.h", + "python_include/cpython/compile.h", + "python_include/cpython/dictobject.h", + "python_include/cpython/fileobject.h", + "python_include/cpython/fileutils.h", + "python_include/cpython/frameobject.h", + "python_include/cpython/import.h", + "python_include/cpython/initconfig.h", + "python_include/cpython/interpreteridobject.h", + "python_include/cpython/listobject.h", + "python_include/cpython/methodobject.h", + "python_include/cpython/object.h", + "python_include/cpython/objimpl.h", + "python_include/cpython/odictobject.h", + "python_include/cpython/picklebufobject.h", + "python_include/cpython/pyctype.h", + "python_include/cpython/pydebug.h", + "python_include/cpython/pyerrors.h", + "python_include/cpython/pyfpe.h", + "python_include/cpython/pylifecycle.h", + "python_include/cpython/pymem.h", + "python_include/cpython/pystate.h", + "python_include/cpython/pythonrun.h", + "python_include/cpython/pytime.h", + "python_include/cpython/sysmodule.h", + "python_include/cpython/traceback.h", + "python_include/cpython/tupleobject.h", + "python_include/cpython/unicodeobject.h", + "python_include/datetime.h", + "python_include/descrobject.h", + "python_include/dictobject.h", + "python_include/dynamic_annotations.h", + "python_include/enumobject.h", + "python_include/errcode.h", + "python_include/eval.h", + "python_include/exports.h", + "python_include/fileobject.h", + "python_include/fileutils.h", + "python_include/floatobject.h", + "python_include/frameobject.h", + "python_include/funcobject.h", + "python_include/genericaliasobject.h", + "python_include/genobject.h", + "python_include/import.h", + "python_include/internal/pycore_abstract.h", + "python_include/internal/pycore_accu.h", + "python_include/internal/pycore_asdl.h", + "python_include/internal/pycore_ast.h", + "python_include/internal/pycore_ast_state.h", + "python_include/internal/pycore_atomic.h", + "python_include/internal/pycore_atomic_funcs.h", + "python_include/internal/pycore_bitutils.h", + "python_include/internal/pycore_blocks_output_buffer.h", + "python_include/internal/pycore_bytes_methods.h", + "python_include/internal/pycore_call.h", + "python_include/internal/pycore_ceval.h", + "python_include/internal/pycore_code.h", + "python_include/internal/pycore_compile.h", + "python_include/internal/pycore_condvar.h", + "python_include/internal/pycore_context.h", + "python_include/internal/pycore_dtoa.h", + "python_include/internal/pycore_fileutils.h", + "python_include/internal/pycore_format.h", + "python_include/internal/pycore_gc.h", + "python_include/internal/pycore_getopt.h", + "python_include/internal/pycore_gil.h", + "python_include/internal/pycore_hamt.h", + "python_include/internal/pycore_hashtable.h", + "python_include/internal/pycore_import.h", + "python_include/internal/pycore_initconfig.h", + "python_include/internal/pycore_interp.h", + "python_include/internal/pycore_list.h", + "python_include/internal/pycore_long.h", + "python_include/internal/pycore_moduleobject.h", + "python_include/internal/pycore_object.h", + "python_include/internal/pycore_parser.h", + "python_include/internal/pycore_pathconfig.h", + "python_include/internal/pycore_pyarena.h", + "python_include/internal/pycore_pyerrors.h", + "python_include/internal/pycore_pyhash.h", + "python_include/internal/pycore_pylifecycle.h", + "python_include/internal/pycore_pymem.h", + "python_include/internal/pycore_pystate.h", + "python_include/internal/pycore_runtime.h", + "python_include/internal/pycore_structseq.h", + "python_include/internal/pycore_symtable.h", + "python_include/internal/pycore_sysmodule.h", + "python_include/internal/pycore_traceback.h", + "python_include/internal/pycore_tuple.h", + "python_include/internal/pycore_ucnhash.h", + "python_include/internal/pycore_unionobject.h", + "python_include/internal/pycore_warnings.h", + "python_include/interpreteridobject.h", + "python_include/intrcheck.h", + "python_include/iterobject.h", + "python_include/listobject.h", + "python_include/longintrepr.h", + "python_include/longobject.h", + "python_include/marshal.h", + "python_include/memoryobject.h", + "python_include/methodobject.h", + "python_include/modsupport.h", + "python_include/moduleobject.h", + "python_include/namespaceobject.h", + "python_include/object.h", + "python_include/objimpl.h", + "python_include/opcode.h", + "python_include/osdefs.h", + "python_include/osmodule.h", + "python_include/patchlevel.h", + "python_include/py_curses.h", + "python_include/pycapsule.h", + "python_include/pyconfig.h", + "python_include/pydtrace.h", + "python_include/pyerrors.h", + "python_include/pyexpat.h", + "python_include/pyframe.h", + "python_include/pyhash.h", + "python_include/pylifecycle.h", + "python_include/pymacconfig.h", + "python_include/pymacro.h", + "python_include/pymath.h", + "python_include/pymem.h", + "python_include/pyport.h", + "python_include/pystate.h", + "python_include/pystrcmp.h", + "python_include/pystrhex.h", + "python_include/pystrtod.h", + "python_include/pythonrun.h", + "python_include/pythread.h", + "python_include/rangeobject.h", + "python_include/setobject.h", + "python_include/sliceobject.h", + "python_include/structmember.h", + "python_include/structseq.h", + "python_include/sysmodule.h", + "python_include/token.h", + "python_include/traceback.h", + "python_include/tracemalloc.h", + "python_include/tupleobject.h", + "python_include/typeslots.h", + "python_include/unicodeobject.h", + "python_include/warnings.h", + "python_include/weakrefobject.h", + ], + cmd = """ +cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/Python.h" "$(@D)/python_include/Python.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/abstract.h" "$(@D)/python_include/abstract.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/bltinmodule.h" "$(@D)/python_include/bltinmodule.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/boolobject.h" "$(@D)/python_include/boolobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/bytearrayobject.h" "$(@D)/python_include/bytearrayobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/bytesobject.h" "$(@D)/python_include/bytesobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cellobject.h" "$(@D)/python_include/cellobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/ceval.h" "$(@D)/python_include/ceval.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/classobject.h" "$(@D)/python_include/classobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/code.h" "$(@D)/python_include/code.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/codecs.h" "$(@D)/python_include/codecs.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/compile.h" "$(@D)/python_include/compile.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/complexobject.h" "$(@D)/python_include/complexobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/context.h" "$(@D)/python_include/context.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/abstract.h" "$(@D)/python_include/cpython/abstract.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/bytearrayobject.h" "$(@D)/python_include/cpython/bytearrayobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/bytesobject.h" "$(@D)/python_include/cpython/bytesobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/ceval.h" "$(@D)/python_include/cpython/ceval.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/code.h" "$(@D)/python_include/cpython/code.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/compile.h" "$(@D)/python_include/cpython/compile.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/dictobject.h" "$(@D)/python_include/cpython/dictobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/fileobject.h" "$(@D)/python_include/cpython/fileobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/fileutils.h" "$(@D)/python_include/cpython/fileutils.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/frameobject.h" "$(@D)/python_include/cpython/frameobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/import.h" "$(@D)/python_include/cpython/import.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/initconfig.h" "$(@D)/python_include/cpython/initconfig.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/interpreteridobject.h" "$(@D)/python_include/cpython/interpreteridobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/listobject.h" "$(@D)/python_include/cpython/listobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/methodobject.h" "$(@D)/python_include/cpython/methodobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/object.h" "$(@D)/python_include/cpython/object.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/objimpl.h" "$(@D)/python_include/cpython/objimpl.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/odictobject.h" "$(@D)/python_include/cpython/odictobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/picklebufobject.h" "$(@D)/python_include/cpython/picklebufobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/pyctype.h" "$(@D)/python_include/cpython/pyctype.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/pydebug.h" "$(@D)/python_include/cpython/pydebug.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/pyerrors.h" "$(@D)/python_include/cpython/pyerrors.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/pyfpe.h" "$(@D)/python_include/cpython/pyfpe.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/pylifecycle.h" "$(@D)/python_include/cpython/pylifecycle.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/pymem.h" "$(@D)/python_include/cpython/pymem.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/pystate.h" "$(@D)/python_include/cpython/pystate.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/pythonrun.h" "$(@D)/python_include/cpython/pythonrun.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/pytime.h" "$(@D)/python_include/cpython/pytime.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/sysmodule.h" "$(@D)/python_include/cpython/sysmodule.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/traceback.h" "$(@D)/python_include/cpython/traceback.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/tupleobject.h" "$(@D)/python_include/cpython/tupleobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/cpython/unicodeobject.h" "$(@D)/python_include/cpython/unicodeobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/datetime.h" "$(@D)/python_include/datetime.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/descrobject.h" "$(@D)/python_include/descrobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/dictobject.h" "$(@D)/python_include/dictobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/dynamic_annotations.h" "$(@D)/python_include/dynamic_annotations.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/enumobject.h" "$(@D)/python_include/enumobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/errcode.h" "$(@D)/python_include/errcode.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/eval.h" "$(@D)/python_include/eval.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/exports.h" "$(@D)/python_include/exports.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/fileobject.h" "$(@D)/python_include/fileobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/fileutils.h" "$(@D)/python_include/fileutils.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/floatobject.h" "$(@D)/python_include/floatobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/frameobject.h" "$(@D)/python_include/frameobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/funcobject.h" "$(@D)/python_include/funcobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/genericaliasobject.h" "$(@D)/python_include/genericaliasobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/genobject.h" "$(@D)/python_include/genobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/import.h" "$(@D)/python_include/import.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_abstract.h" "$(@D)/python_include/internal/pycore_abstract.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_accu.h" "$(@D)/python_include/internal/pycore_accu.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_asdl.h" "$(@D)/python_include/internal/pycore_asdl.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_ast.h" "$(@D)/python_include/internal/pycore_ast.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_ast_state.h" "$(@D)/python_include/internal/pycore_ast_state.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_atomic.h" "$(@D)/python_include/internal/pycore_atomic.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_atomic_funcs.h" "$(@D)/python_include/internal/pycore_atomic_funcs.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_bitutils.h" "$(@D)/python_include/internal/pycore_bitutils.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_blocks_output_buffer.h" "$(@D)/python_include/internal/pycore_blocks_output_buffer.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_bytes_methods.h" "$(@D)/python_include/internal/pycore_bytes_methods.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_call.h" "$(@D)/python_include/internal/pycore_call.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_ceval.h" "$(@D)/python_include/internal/pycore_ceval.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_code.h" "$(@D)/python_include/internal/pycore_code.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_compile.h" "$(@D)/python_include/internal/pycore_compile.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_condvar.h" "$(@D)/python_include/internal/pycore_condvar.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_context.h" "$(@D)/python_include/internal/pycore_context.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_dtoa.h" "$(@D)/python_include/internal/pycore_dtoa.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_fileutils.h" "$(@D)/python_include/internal/pycore_fileutils.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_format.h" "$(@D)/python_include/internal/pycore_format.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_gc.h" "$(@D)/python_include/internal/pycore_gc.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_getopt.h" "$(@D)/python_include/internal/pycore_getopt.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_gil.h" "$(@D)/python_include/internal/pycore_gil.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_hamt.h" "$(@D)/python_include/internal/pycore_hamt.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_hashtable.h" "$(@D)/python_include/internal/pycore_hashtable.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_import.h" "$(@D)/python_include/internal/pycore_import.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_initconfig.h" "$(@D)/python_include/internal/pycore_initconfig.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_interp.h" "$(@D)/python_include/internal/pycore_interp.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_list.h" "$(@D)/python_include/internal/pycore_list.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_long.h" "$(@D)/python_include/internal/pycore_long.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_moduleobject.h" "$(@D)/python_include/internal/pycore_moduleobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_object.h" "$(@D)/python_include/internal/pycore_object.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_parser.h" "$(@D)/python_include/internal/pycore_parser.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_pathconfig.h" "$(@D)/python_include/internal/pycore_pathconfig.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_pyarena.h" "$(@D)/python_include/internal/pycore_pyarena.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_pyerrors.h" "$(@D)/python_include/internal/pycore_pyerrors.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_pyhash.h" "$(@D)/python_include/internal/pycore_pyhash.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_pylifecycle.h" "$(@D)/python_include/internal/pycore_pylifecycle.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_pymem.h" "$(@D)/python_include/internal/pycore_pymem.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_pystate.h" "$(@D)/python_include/internal/pycore_pystate.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_runtime.h" "$(@D)/python_include/internal/pycore_runtime.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_structseq.h" "$(@D)/python_include/internal/pycore_structseq.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_symtable.h" "$(@D)/python_include/internal/pycore_symtable.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_sysmodule.h" "$(@D)/python_include/internal/pycore_sysmodule.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_traceback.h" "$(@D)/python_include/internal/pycore_traceback.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_tuple.h" "$(@D)/python_include/internal/pycore_tuple.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_ucnhash.h" "$(@D)/python_include/internal/pycore_ucnhash.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_unionobject.h" "$(@D)/python_include/internal/pycore_unionobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/internal/pycore_warnings.h" "$(@D)/python_include/internal/pycore_warnings.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/interpreteridobject.h" "$(@D)/python_include/interpreteridobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/intrcheck.h" "$(@D)/python_include/intrcheck.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/iterobject.h" "$(@D)/python_include/iterobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/listobject.h" "$(@D)/python_include/listobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/longintrepr.h" "$(@D)/python_include/longintrepr.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/longobject.h" "$(@D)/python_include/longobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/marshal.h" "$(@D)/python_include/marshal.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/memoryobject.h" "$(@D)/python_include/memoryobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/methodobject.h" "$(@D)/python_include/methodobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/modsupport.h" "$(@D)/python_include/modsupport.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/moduleobject.h" "$(@D)/python_include/moduleobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/namespaceobject.h" "$(@D)/python_include/namespaceobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/object.h" "$(@D)/python_include/object.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/objimpl.h" "$(@D)/python_include/objimpl.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/opcode.h" "$(@D)/python_include/opcode.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/osdefs.h" "$(@D)/python_include/osdefs.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/osmodule.h" "$(@D)/python_include/osmodule.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/patchlevel.h" "$(@D)/python_include/patchlevel.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/py_curses.h" "$(@D)/python_include/py_curses.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pycapsule.h" "$(@D)/python_include/pycapsule.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pyconfig.h" "$(@D)/python_include/pyconfig.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pydtrace.h" "$(@D)/python_include/pydtrace.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pyerrors.h" "$(@D)/python_include/pyerrors.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pyexpat.h" "$(@D)/python_include/pyexpat.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pyframe.h" "$(@D)/python_include/pyframe.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pyhash.h" "$(@D)/python_include/pyhash.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pylifecycle.h" "$(@D)/python_include/pylifecycle.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pymacconfig.h" "$(@D)/python_include/pymacconfig.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pymacro.h" "$(@D)/python_include/pymacro.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pymath.h" "$(@D)/python_include/pymath.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pymem.h" "$(@D)/python_include/pymem.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pyport.h" "$(@D)/python_include/pyport.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pystate.h" "$(@D)/python_include/pystate.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pystrcmp.h" "$(@D)/python_include/pystrcmp.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pystrhex.h" "$(@D)/python_include/pystrhex.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pystrtod.h" "$(@D)/python_include/pystrtod.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pythonrun.h" "$(@D)/python_include/pythonrun.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/pythread.h" "$(@D)/python_include/pythread.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/rangeobject.h" "$(@D)/python_include/rangeobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/setobject.h" "$(@D)/python_include/setobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/sliceobject.h" "$(@D)/python_include/sliceobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/structmember.h" "$(@D)/python_include/structmember.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/structseq.h" "$(@D)/python_include/structseq.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/sysmodule.h" "$(@D)/python_include/sysmodule.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/token.h" "$(@D)/python_include/token.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/traceback.h" "$(@D)/python_include/traceback.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/tracemalloc.h" "$(@D)/python_include/tracemalloc.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/tupleobject.h" "$(@D)/python_include/tupleobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/typeslots.h" "$(@D)/python_include/typeslots.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/unicodeobject.h" "$(@D)/python_include/unicodeobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/warnings.h" "$(@D)/python_include/warnings.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/include/weakrefobject.h" "$(@D)/python_include/weakrefobject.h" + """, +) + +genrule( + name = "numpy_include", + outs = [ + "numpy_include/numpy/.doxyfile", + "numpy_include/numpy/__multiarray_api.h", + "numpy_include/numpy/__ufunc_api.h", + "numpy_include/numpy/_neighborhood_iterator_imp.h", + "numpy_include/numpy/_numpyconfig.h", + "numpy_include/numpy/arrayobject.h", + "numpy_include/numpy/arrayscalars.h", + "numpy_include/numpy/experimental_dtype_api.h", + "numpy_include/numpy/halffloat.h", + "numpy_include/numpy/libdivide/LICENSE.txt", + "numpy_include/numpy/libdivide/libdivide.h", + "numpy_include/numpy/multiarray_api.txt", + "numpy_include/numpy/ndarrayobject.h", + "numpy_include/numpy/ndarraytypes.h", + "numpy_include/numpy/noprefix.h", + "numpy_include/numpy/npy_1_7_deprecated_api.h", + "numpy_include/numpy/npy_3kcompat.h", + "numpy_include/numpy/npy_common.h", + "numpy_include/numpy/npy_cpu.h", + "numpy_include/numpy/npy_endian.h", + "numpy_include/numpy/npy_interrupt.h", + "numpy_include/numpy/npy_math.h", + "numpy_include/numpy/npy_no_deprecated_api.h", + "numpy_include/numpy/npy_os.h", + "numpy_include/numpy/numpyconfig.h", + "numpy_include/numpy/old_defines.h", + "numpy_include/numpy/oldnumeric.h", + "numpy_include/numpy/random/bitgen.h", + "numpy_include/numpy/random/distributions.h", + "numpy_include/numpy/ufunc_api.txt", + "numpy_include/numpy/ufuncobject.h", + "numpy_include/numpy/utils.h", + ], + cmd = """ +cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/.doxyfile" "$(@D)/numpy_include/numpy/.doxyfile" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/__multiarray_api.h" "$(@D)/numpy_include/numpy/__multiarray_api.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/__ufunc_api.h" "$(@D)/numpy_include/numpy/__ufunc_api.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/_neighborhood_iterator_imp.h" "$(@D)/numpy_include/numpy/_neighborhood_iterator_imp.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/_numpyconfig.h" "$(@D)/numpy_include/numpy/_numpyconfig.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/arrayobject.h" "$(@D)/numpy_include/numpy/arrayobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/arrayscalars.h" "$(@D)/numpy_include/numpy/arrayscalars.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/experimental_dtype_api.h" "$(@D)/numpy_include/numpy/experimental_dtype_api.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/halffloat.h" "$(@D)/numpy_include/numpy/halffloat.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/libdivide/LICENSE.txt" "$(@D)/numpy_include/numpy/libdivide/LICENSE.txt" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/libdivide/libdivide.h" "$(@D)/numpy_include/numpy/libdivide/libdivide.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/multiarray_api.txt" "$(@D)/numpy_include/numpy/multiarray_api.txt" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/ndarrayobject.h" "$(@D)/numpy_include/numpy/ndarrayobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/ndarraytypes.h" "$(@D)/numpy_include/numpy/ndarraytypes.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/noprefix.h" "$(@D)/numpy_include/numpy/noprefix.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h" "$(@D)/numpy_include/numpy/npy_1_7_deprecated_api.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/npy_3kcompat.h" "$(@D)/numpy_include/numpy/npy_3kcompat.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/npy_common.h" "$(@D)/numpy_include/numpy/npy_common.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/npy_cpu.h" "$(@D)/numpy_include/numpy/npy_cpu.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/npy_endian.h" "$(@D)/numpy_include/numpy/npy_endian.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/npy_interrupt.h" "$(@D)/numpy_include/numpy/npy_interrupt.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/npy_math.h" "$(@D)/numpy_include/numpy/npy_math.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/npy_no_deprecated_api.h" "$(@D)/numpy_include/numpy/npy_no_deprecated_api.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/npy_os.h" "$(@D)/numpy_include/numpy/npy_os.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/numpyconfig.h" "$(@D)/numpy_include/numpy/numpyconfig.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/old_defines.h" "$(@D)/numpy_include/numpy/old_defines.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/oldnumeric.h" "$(@D)/numpy_include/numpy/oldnumeric.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/random/bitgen.h" "$(@D)/numpy_include/numpy/random/bitgen.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/random/distributions.h" "$(@D)/numpy_include/numpy/random/distributions.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/ufunc_api.txt" "$(@D)/numpy_include/numpy/ufunc_api.txt" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/ufuncobject.h" "$(@D)/numpy_include/numpy/ufuncobject.h" && cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/lib/site-packages/numpy/core/include/numpy/utils.h" "$(@D)/numpy_include/numpy/utils.h" + """, +) + +genrule( + name = "python_import_lib", + outs = [ + "python310.lib", + ], + cmd = """ +cp -f "C:/Users/llmhy/AppData/Local/Programs/Python/Python310/libs/python310.lib" "$(@D)/python310.lib" + """, +) + diff --git a/saved_models/tensorboard/CONTRIBUTING.md b/saved_models/tensorboard/CONTRIBUTING.md new file mode 100644 index 0000000000000000000000000000000000000000..64194dc29a98577e3e2eb3d6cd3e6d9556d76aea --- /dev/null +++ b/saved_models/tensorboard/CONTRIBUTING.md @@ -0,0 +1,22 @@ +### Contributor License Agreements + +We'd love to accept your patches! Before we can take them, we have to jump a couple of legal hurdles. + +Please fill out either the individual or corporate Contributor License Agreement (CLA). + + * If you are an individual writing original source code and you're sure you own the intellectual property, then you'll need to sign an [individual CLA](http://code.google.com/legal/individual-cla-v1.0.html). + * If you work for a company that wants to allow you to contribute your work, then you'll need to sign a [corporate CLA](http://code.google.com/legal/corporate-cla-v1.0.html). + +Follow either of the two links above to access the appropriate CLA and instructions for how to sign and return it. Once we receive it, we'll be able to accept your pull requests. + +***NOTE***: Only original source code from you and other people that have signed the CLA can be accepted into the main repository. + + +### Working with the team +If you're planning a larger contribution, please get in touch with the team through a GitHub issue before starting work - we can help guide you, and coordinating up front will make the process smoother. + +If you want to add a major feature, it may be a good candidate for adding a plugin. Let us know via a GitHub issue, and we can guide you in the process. + +### Code reviews +All submissions, including submissions by project members, require review. We +use GitHub pull requests for this purpose. diff --git a/saved_models/tensorboard/DEVELOPMENT.md b/saved_models/tensorboard/DEVELOPMENT.md new file mode 100644 index 0000000000000000000000000000000000000000..93218ee3363e4f59134eaa1dd6650a62f665546e --- /dev/null +++ b/saved_models/tensorboard/DEVELOPMENT.md @@ -0,0 +1,117 @@ +# How to write your own plugin + +You can extend TensorBoard to show custom visualizations and connect to custom +backends by writing a custom plugin. Clone and tinker with one of the +[examples][plugin-examples], or learn about the plugin system by following the +[ADDING_A_PLUGIN](./ADDING_A_PLUGIN.md) guide. Custom plugins can be +[published][plugin-distribution] on PyPI to be shared with the community. + +Developing a custom plugin does not require Bazel or building TensorBoard. + +[plugin-examples]: ./tensorboard/examples/plugins +[plugin-distribution]: ./ADDING_A_PLUGIN.md#distribution + +# How to Develop TensorBoard + +TensorBoard at HEAD relies on the nightly installation of TensorFlow: this allows plugin authors to use the latest features of TensorFlow, but it means release versions of TensorFlow may not suffice for development. We recommend installing TensorFlow nightly in a [Python virtualenv](https://virtualenv.pypa.io), and then running your modified development copy of TensorBoard within that virtualenv. To install TensorFlow nightly within the virtualenv, as well as TensorBoard's runtime and tooling dependencies, you can run: + +```sh +$ virtualenv -p python3 tf +$ source tf/bin/activate +(tf)$ pip install --upgrade pip +(tf)$ pip install tf-nightly -r tensorboard/pip_package/requirements.txt -r tensorboard/pip_package/requirements_dev.txt +``` + +TensorBoard builds are done with [Bazel](https://bazel.build), so you may need to [install Bazel](https://docs.bazel.build/versions/master/install.html). The Bazel build will automatically "vulcanize" all the HTML files and generate a "binary" launcher script. When HTML is vulcanized, it means all the script tags and HTML imports are inlined into one big HTML file. Then the Bazel build puts that index.html file inside a static assets zip. The python HTTP server then reads static assets from that zip while serving. + +You can build and run TensorBoard via Bazel (from within the TensorFlow nightly virtualenv) as follows: + +```sh +(tf)$ bazel run //tensorboard -- --logdir /path/to/logs +``` + +For any changes to the frontend, you’ll need to install [Yarn][yarn] to lint your code (`yarn lint`, `yarn fix-lint`). You’ll also need Yarn to add or remove any NPM dependencies. + +For any changes to the backend, you’ll need to install [Black][black] to lint your code (run `black .`). Our `black` version is specified in `requirements_dev.txt` in this repository. Black only runs on Python 3.6 or higher, so you may want to install it into a separate virtual environment and use a [wrapper script to invoke it from any environment][black-wrapper]. + +You may wish to configure your editor to automatically run Prettier and Black on save. + +To generate fake log data for a plugin, run its demo script. For instance, this command generates fake scalar data in `/tmp/scalars_demo`: + +```sh +(tf)$ bazel run //tensorboard/plugins/scalar:scalars_demo +``` + +If you have Bazel≥0.16 and want to build any commit of TensorBoard prior to 2018-08-07, then you must first cherry-pick [pull request #1334][pr-1334] onto your working tree: + +``` +$ git cherry-pick bc4e7a6e5517daf918433a8f5983fc6bd239358f +``` + +[black]: https://github.com/psf/black +[black-wrapper]: https://gist.github.com/wchargin/d65820919f363d33545159138c86ce31 +[pr-1334]: https://github.com/tensorflow/tensorboard/pull/1334 +[yarn]: https://yarnpkg.com/ + +## Pro tips + +You may find the following optional tips useful for development. + +### Ignoring large cleanup commits in `git blame` + +```shell +git config blame.ignoreRevsFile .git-blame-ignore-revs # requires Git >= 2.23 +``` + +We maintain a list of commits with large diffs that are known to not have any +semantic effect, like mass code reformattings. As of Git 2.23, you can configure +Git to ignore these commits in the output of `git blame`, so that lines are +blamed to the most recent “real” change. Set the `blame.ignoreRevsFile` Git +config option to `.git-blame-ignore-revs` to enable this by default, or pass +`--ignore-revs-file .git-blame-ignore-revs` to enable it for a single command. +When enabled by default, this also works with editor plugins like +[vim-fugitive]. See `git help blame` and `git help config` for more details. + +[vim-fugitive]: https://github.com/tpope/vim-fugitive + +### iBazel: A file watcher for Bazel. + +Bazel is capable of performing incremental builds where it builds only the +subset of files that are impacted by file changes. However, it does not come +with a file watcher. For an improved developer experience, start TensorBoard +with `ibazel` instead of `bazel` which will automatically re-build and start the +server when files change. + +If you do not have the ibazel binary on your system, you can use the command +below. + +```sh +# Optionally run `yarn` to keep `node_modules` up-to-date. +yarn run ibazel run tensorboard -- -- --logdir [LOG_DIR] +``` + +### Debugging UI Tests Locally + +Our UI tests (e.g., //tensorboard/components/vz_sorting/test) use HTML import +which is now deprecated from all browsers (Chrome 79- had the native support) +and is run without any polyfills. In order to debug tests, you may want to run a +a Chromium used by our CI that supports HTML import. It can be found in +`./bazel-bin/third_party/chromium/chromium.out` (exact path to binary will +differ by OS you are on; for Linux, the full path is +`./bazel-bin/third_party/chromium/chromium.out/chrome-linux/chrome`). + +For example of the vz_sorting test, + +```sh +# Run the debug instance of the test. It should run a web server at a dynamic +# port. +bazel run tensorboard/components/vz_sorting/test:test_web_library + +# In another tab: + +# Fetch, if missing, the Chromium +bazel build third_party/chromium +./bazel-bin/third_party/chromium/chromium.out/chrome-linux/chrome + +# Lastly, put the address returnd by the web server into the Chromium. +``` diff --git a/saved_models/tensorboard/LICENSE b/saved_models/tensorboard/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..15ae42140452d32ccf929f59f7eca01a3c7b555f --- /dev/null +++ b/saved_models/tensorboard/LICENSE @@ -0,0 +1,203 @@ +Copyright 2017 The TensorFlow Authors. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2017, The TensorFlow Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/saved_models/tensorboard/README.md b/saved_models/tensorboard/README.md new file mode 100644 index 0000000000000000000000000000000000000000..9fa4a79f8c5b48e145ec4056883c036ec2e208c7 --- /dev/null +++ b/saved_models/tensorboard/README.md @@ -0,0 +1,427 @@ +# TensorBoard [![Travis build status](https://travis-ci.org/tensorflow/tensorboard.svg?branch=master)](https://travis-ci.org/tensorflow/tensorboard/) [![GitHub Actions CI](https://github.com/tensorflow/tensorboard/workflows/CI/badge.svg)](https://github.com/tensorflow/tensorboard/actions?query=workflow%3ACI+branch%3Amaster+event%3Apush) [![Compat check PyPI](https://python-compatibility-tools.appspot.com/one_badge_image?package=tensorboard)](https://python-compatibility-tools.appspot.com/one_badge_target?package=tensorboard) + +TensorBoard is a suite of web applications for inspecting and understanding your +TensorFlow runs and graphs. + +This README gives an overview of key concepts in TensorBoard, as well as how to +interpret the visualizations TensorBoard provides. For an in-depth example of +using TensorBoard, see the tutorial: [TensorBoard: Getting Started][]. +Documentation on how to use TensorBoard to work with images, graphs, hyper +parameters, and more are linked from there, along with tutorial walk-throughs in +Colab. + +You may also be interested in the hosted TensorBoard solution at +[TensorBoard.dev][]. You can use TensorBoard.dev to easily host, track, and +share your ML experiments for free. For example, [this experiment][] shows a +working example featuring the scalars, graphs, histograms, distributions, and +hparams dashboards. + +TensorBoard is designed to run entirely offline, without requiring any access +to the Internet. For instance, this may be on your local machine, behind a +corporate firewall, or in a datacenter. + +[TensorBoard: Getting Started]: https://www.tensorflow.org/tensorboard/get_started +[TensorBoard.dev]: https://tensorboard.dev +[This experiment]: https://tensorboard.dev/experiment/EDZb7XgKSBKo6Gznh3i8hg/#scalars + +# Usage + +Before running TensorBoard, make sure you have generated summary data in a log +directory by creating a summary writer: + +``` python +# sess.graph contains the graph definition; that enables the Graph Visualizer. + +file_writer = tf.summary.FileWriter('/path/to/logs', sess.graph) +``` + +For more details, see +[the TensorBoard tutorial](https://www.tensorflow.org/get_started/summaries_and_tensorboard). +Once you have event files, run TensorBoard and provide the log directory. If +you're using a precompiled TensorFlow package (e.g. you installed via pip), run: + +``` +tensorboard --logdir path/to/logs +``` + +Or, if you are building from source: + +```bash +bazel build tensorboard:tensorboard +./bazel-bin/tensorboard/tensorboard --logdir path/to/logs + +# or even more succinctly +bazel run tensorboard -- --logdir path/to/logs +``` + +This should print that TensorBoard has started. Next, connect to +http://localhost:6006. + +TensorBoard requires a `logdir` to read logs from. For info on configuring +TensorBoard, run `tensorboard --help`. + +TensorBoard can be used in Google Chrome or Firefox. Other browsers might +work, but there may be bugs or performance issues. + +# Key Concepts + +### Summary Ops: How TensorBoard gets data from TensorFlow + +The first step in using TensorBoard is acquiring data from your TensorFlow run. +For this, you need +[summary ops](https://www.tensorflow.org/api_docs/python/tf/summary). +Summary ops are ops, just like +[`tf.matmul`](https://www.tensorflow.org/api_docs/python/tf/linalg/matmul) +and +[`tf.nn.relu`](https://www.tensorflow.org/api_docs/python/tf/nn/relu), +which means they take in tensors, produce tensors, and are evaluated from within +a TensorFlow graph. However, summary ops have a twist: the Tensors they produce +contain serialized protobufs, which are written to disk and sent to TensorBoard. +To visualize the summary data in TensorBoard, you should evaluate the summary +op, retrieve the result, and then write that result to disk using a +summary.FileWriter. A full explanation, with examples, is in [the +tutorial](https://www.tensorflow.org/get_started/summaries_and_tensorboard). + +The supported summary ops include: +* [`tf.summary.scalar`](https://www.tensorflow.org/api_docs/python/tf/summary/scalar) +* [`tf.summary.image`](https://www.tensorflow.org/api_docs/python/tf/summary/image) +* [`tf.summary.audio`](https://www.tensorflow.org/api_docs/python/tf/summary/audio) +* [`tf.summary.text`](https://www.tensorflow.org/api_docs/python/tf/summary/text) +* [`tf.summary.histogram`](https://www.tensorflow.org/api_docs/python/tf/summary/histogram) + +### Tags: Giving names to data + +When you make a summary op, you will also give it a `tag`. The tag is basically +a name for the data recorded by that op, and will be used to organize the data +in the frontend. The scalar and histogram dashboards organize data by tag, and +group the tags into folders according to a directory/like/hierarchy. If you have +a lot of tags, we recommend grouping them with slashes. + +### Event Files & LogDirs: How TensorBoard loads the data + +`summary.FileWriters` take summary data from TensorFlow, and then write them to a +specified directory, known as the `logdir`. Specifically, the data is written to +an append-only record dump that will have "tfevents" in the filename. +TensorBoard reads data from a full directory, and organizes it into the history +of a single TensorFlow execution. + +Why does it read the whole directory, rather than an individual file? You might +have been using +[supervisor.py](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/training/supervisor.py) +to run your model, in which case if TensorFlow crashes, the supervisor will +restart it from a checkpoint. When it restarts, it will start writing to a new +events file, and TensorBoard will stitch the various event files together to +produce a consistent history of what happened. + +### Runs: Comparing different executions of your model + +You may want to visually compare multiple executions of your model; for example, +suppose you've changed the hyperparameters and want to see if it's converging +faster. TensorBoard enables this through different "runs". When TensorBoard is +passed a `logdir` at startup, it recursively walks the directory tree rooted at +`logdir` looking for subdirectories that contain tfevents data. Every time it +encounters such a subdirectory, it loads it as a new `run`, and the frontend +will organize the data accordingly. + +For example, here is a well-organized TensorBoard log directory, with two runs, +"run1" and "run2". + +``` +/some/path/mnist_experiments/ +/some/path/mnist_experiments/run1/ +/some/path/mnist_experiments/run1/events.out.tfevents.1456525581.name +/some/path/mnist_experiments/run1/events.out.tfevents.1456525585.name +/some/path/mnist_experiments/run2/ +/some/path/mnist_experiments/run2/events.out.tfevents.1456525385.name +/tensorboard --logdir /some/path/mnist_experiments +``` + +#### Logdir & Logdir_spec (Legacy Mode) + +You may also pass a comma separated list of log directories, and TensorBoard +will watch each directory. You can also assign names to individual log +directories by putting a colon between the name and the path, as in + +``` +tensorboard --logdir_spec name1:/path/to/logs/1,name2:/path/to/logs/2 +``` + +_This flag (`--logdir_spec`) is discouraged and can usually be avoided_. TensorBoard walks log directories recursively; for finer-grained control, prefer using a symlink tree. _Some features may not work when using `--logdir_spec` instead of `--logdir`._ + +# The Visualizations + +### Scalar Dashboard + +TensorBoard's Scalar Dashboard visualizes scalar statistics that vary over time; +for example, you might want to track the model's loss or learning rate. As +described in *Key Concepts*, you can compare multiple runs, and the data is +organized by tag. The line charts have the following interactions: + +* Clicking on the small blue icon in the lower-left corner of each chart will +expand the chart + +* Dragging a rectangular region on the chart will zoom in + +* Double clicking on the chart will zoom out + +* Mousing over the chart will produce crosshairs, with data values recorded in +the run-selector on the left. + +Additionally, you can create new folders to organize tags by writing regular +expressions in the box in the top-left of the dashboard. + +### Histogram Dashboard + +The HistogramDashboard displays how the statistical distribution of a Tensor +has varied over time. It visualizes data recorded via `tf.summary.histogram`. +Each chart shows temporal "slices" of data, where each slice is a histogram of +the tensor at a given step. It's organized with the oldest timestep in the back, +and the most recent timestep in front. By changing the Histogram Mode from +"offset" to "overlay", the perspective will rotate so that every histogram slice +is rendered as a line and overlaid with one another. + +### Distribution Dashboard + +The Distribution Dashboard is another way of visualizing histogram data from +`tf.summary.histogram`. It shows some high-level statistics on a distribution. +Each line on the chart represents a percentile in the distribution over the +data: for example, the bottom line shows how the minimum value has changed over +time, and the line in the middle shows how the median has changed. Reading from +top to bottom, the lines have the following meaning: `[maximum, 93%, 84%, 69%, +50%, 31%, 16%, 7%, minimum]` + +These percentiles can also be viewed as standard deviation boundaries on a +normal distribution: `[maximum, μ+1.5σ, μ+σ, μ+0.5σ, μ, μ-0.5σ, μ-σ, μ-1.5σ, +minimum]` so that the colored regions, read from inside to outside, have widths +`[σ, 2σ, 3σ]` respectively. + + +### Image Dashboard + +The Image Dashboard can display pngs that were saved via a `tf.summary.image`. +The dashboard is set up so that each row corresponds to a different tag, and +each column corresponds to a run. Since the image dashboard supports arbitrary +pngs, you can use this to embed custom visualizations (e.g. matplotlib +scatterplots) into TensorBoard. This dashboard always shows you the latest image +for each tag. + +### Audio Dashboard + +The Audio Dashboard can embed playable audio widgets for audio saved via a +`tf.summary.audio`. The dashboard is set up so that each row corresponds to a +different tag, and each column corresponds to a run. This dashboard always +embeds the latest audio for each tag. + +### Graph Explorer + +The Graph Explorer can visualize a TensorBoard graph, enabling inspection of the +TensorFlow model. To get best use of the graph visualizer, you should use name +scopes to hierarchically group the ops in your graph - otherwise, the graph may +be difficult to decipher. For more information, including examples, see [the +graph visualizer tutorial](https://www.tensorflow.org/get_started/graph_viz). + +### Embedding Projector + +The Embedding Projector allows you to visualize high-dimensional data; for +example, you may view your input data after it has been embedded in a high- +dimensional space by your model. The embedding projector reads data from your +model checkpoint file, and may be configured with additional metadata, like +a vocabulary file or sprite images. For more details, see [the embedding +projector tutorial](https://www.tensorflow.org/tutorials/text/word_embeddings). + +### Text Dashboard + +The Text Dashboard displays text snippets saved via `tf.summary.text`. Markdown +features including hyperlinks, lists, and tables are all supported. + +# Frequently Asked Questions + +### My TensorBoard isn't showing any data! What's wrong? + +First, check that the directory passed to `--logdir` is correct. You can also +verify this by navigating to the Scalars dashboard (under the "Inactive" menu) +and looking for the log directory path at the bottom of the left sidebar. + +If you're loading from the proper path, make sure that event files are present. +TensorBoard will recursively walk its logdir, it's fine if the data is nested +under a subdirectory. Ensure the following shows at least one result: + +`find DIRECTORY_PATH | grep tfevents` + +You can also check that the event files actually have data by running +tensorboard in inspect mode to inspect the contents of your event files. + +`tensorboard --inspect --logdir DIRECTORY_PATH` + +### TensorBoard is showing only some of my data, or isn't properly updating! + +> **Update:** After [2.3.0 release][2-3-0], TensorBoard no longer auto reloads +> every 30 seconds. To re-enable the behavior, please open the settings by +> clicking the gear icon in the top-right of the TensorBoard web interface, and +> enable "Reload data". + +> **Update:** the [experimental `--reload_multifile=true` option][pr-1867] can +> now be used to poll all "active" files in a directory for new data, rather +> than the most recent one as described below. A file is "active" as long as it +> received new data within `--reload_multifile_inactive_secs` seconds ago, +> defaulting to 4000. + +This issue usually comes about because of how TensorBoard iterates through the +`tfevents` files: it progresses through the events file in timestamp order, and +only reads one file at a time. Let's suppose we have files with timestamps `a` +and `b`, where `a **Update:** the [experimental `--reload_multifile=true` option][pr-1867] can +> now be used to poll all "active" files in a directory for new data, defined as +> any file that received new data within `--reload_multifile_inactive_secs` +> seconds ago, defaulting to 4000. + +No. TensorBoard expects that only one events file will be written to at a time, +and multiple summary writers means multiple events files. If you are running a +distributed TensorFlow instance, we encourage you to designate a single worker +as the "chief" that is responsible for all summary processing. See +[supervisor.py](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/training/supervisor.py) +for an example. + +### I'm seeing data overlapped on itself! What gives? + +If you are seeing data that seems to travel backwards through time and overlap +with itself, there are a few possible explanations. + +* You may have multiple execution of TensorFlow that all wrote to the same log +directory. Please have each TensorFlow run write to its own logdir. + + > **Update:** the [experimental `--reload_multifile=true` option][pr-1867] can + > now be used to poll all "active" files in a directory for new data, defined + > as any file that received new data within `--reload_multifile_inactive_secs` + > seconds ago, defaulting to 4000. + +* You may have a bug in your code where the global_step variable (passed +to `FileWriter.add_summary`) is being maintained incorrectly. + +* It may be that your TensorFlow job crashed, and was restarted from an earlier +checkpoint. See *How to handle TensorFlow restarts*, below. + +As a workaround, try changing the x-axis display in TensorBoard from `steps` to +`wall_time`. This will frequently clear up the issue. + +### How should I handle TensorFlow restarts? + +TensorFlow is designed with a mechanism for graceful recovery if a job crashes +or is killed: TensorFlow can periodically write model checkpoint files, which +enable you to restart TensorFlow without losing all your training progress. + +However, this can complicate things for TensorBoard; imagine that TensorFlow +wrote a checkpoint at step `a`, and then continued running until step `b`, and +then crashed and restarted at timestamp `a`. All of the events written between +`a` and `b` were "orphaned" by the restart event and should be removed. + +To facilitate this, we have a `SessionLog` message in +`tensorflow/core/util/event.proto` which can record `SessionStatus.START` as an +event; like all events, it may have a `step` associated with it. If TensorBoard +detects a `SessionStatus.START` event with step `a`, it will assume that every +event with a step greater than `a` was orphaned, and it will discard those +events. This behavior may be disabled with the flag +`--purge_orphaned_data false` (in versions after 0.7). + +### How can I export data from TensorBoard? + +The Scalar Dashboard supports exporting data; you can click the "enable +download links" option in the left-hand bar. Then, each plot will provide +download links for the data it contains. + +If you need access to the full dataset, you can read the event files that +TensorBoard consumes by using the [`summary_iterator`]( +https://www.tensorflow.org/api_docs/python/tf/train/summary_iterator) +method. + +### Can I make my own plugin? + +Yes! You can clone and tinker with one of the [examples][plugin-examples] and +make your own, amazing visualizations. More documentation on the plugin system +is described in the [ADDING_A_PLUGIN](./ADDING_A_PLUGIN.md) guide. Feel free to +file feature requests or questions about plugin functionality. + +Once satisfied with your own groundbreaking new plugin, see the +[distribution section][plugin-distribution] on how to publish to PyPI and share +it with the community. + +[plugin-examples]: ./tensorboard/examples/plugins +[plugin-distribution]: ./ADDING_A_PLUGIN.md#distribution + +### Can I customize which lines appear in a plot? + +Using the [custom scalars plugin](tensorboard/plugins/custom_scalar), you can +create scalar plots with lines for custom run-tag pairs. However, within the +original scalars dashboard, each scalar plot corresponds to data for a specific +tag and contains lines for each run that includes that tag. + +### Can I visualize margins above and below lines? + +Margin plots (that visualize lower and upper bounds) may be created with the +[custom scalars plugin](tensorboard/plugins/custom_scalar). The original +scalars plugin does not support visualizing margins. + +### Can I create scatterplots (or other custom plots)? + +This isn't yet possible. As a workaround, you could create your custom plot in +your own code (e.g. matplotlib) and then write it into an `SummaryProto` +(`core/framework/summary.proto`) and add it to your `FileWriter`. Then, your +custom plot will appear in the TensorBoard image tab. + +### Is my data being downsampled? Am I really seeing all the data? + +TensorBoard uses [reservoir +sampling](https://en.wikipedia.org/wiki/Reservoir_sampling) to downsample your +data so that it can be loaded into RAM. You can modify the number of elements it +will keep per tag by using the `--samples_per_plugin` command line argument (ex: +`--samples_per_plugin=scalars=500,images=20`). +See this [Stack Overflow question](http://stackoverflow.com/questions/43702546/tensorboard-doesnt-show-all-data-points/) +for some more information. + +### I get a network security popup every time I run TensorBoard on a mac! + +Versions of TensorBoard prior to TensorBoard 2.0 would by default serve on host +`0.0.0.0`, which is publicly accessible. For those versions of TensorBoard, you +can stop the popups by specifying `--host localhost` at startup. + +In TensorBoard 2.0 and up, `--host localhost` is the default. Use `--bind_all` +to restore the old behavior of serving to the public network on both IPv4 and +IPv6. + +### Can I run `tensorboard` without a TensorFlow installation? + +TensorBoard 1.14+ can be run with a reduced feature set if you do not have +TensorFlow installed. The primary limitation is that as of 1.14, only the +following plugins are supported: scalars, custom scalars, image, audio, +graph, projector (partial), distributions, histograms, text, PR curves, mesh. +In addition, there is no support for log directories on Google Cloud Storage. + +### How can I contribute to TensorBoard development? + +See [DEVELOPMENT.md](DEVELOPMENT.md). + +### I have a different issue that wasn't addressed here! + +First, try searching our [GitHub +issues](https://github.com/tensorflow/tensorboard/issues) and +[Stack Overflow][stack-overflow]. It may be +that someone else has already had the same issue or question. + +General usage questions (or problems that may be specific to your local setup) +should go to [Stack Overflow][stack-overflow]. + +If you have found a bug in TensorBoard, please [file a GitHub issue]( +https://github.com/tensorflow/tensorboard/issues/new) with as much supporting +information as you can provide (e.g. attaching events files, including the output +of `tensorboard --inspect`, etc.). + +[stack-overflow]: https://stackoverflow.com/questions/tagged/tensorboard +[pr-1867]: https://github.com/tensorflow/tensorboard/pull/1867 +[2-3-0]: https://github.com/tensorflow/tensorboard/releases/tag/2.3.0 diff --git a/saved_models/tensorboard/RELEASE.md b/saved_models/tensorboard/RELEASE.md new file mode 100644 index 0000000000000000000000000000000000000000..d409ceb091b7fe414a5a650d6441b894f06e3588 --- /dev/null +++ b/saved_models/tensorboard/RELEASE.md @@ -0,0 +1,716 @@ +# Release 2.3.0 + +The 2.3 minor series tracks TensorFlow 2.3. + +## Features + +- The 30 sec default reload period is now customizable in the Settings UI + (#2794) +- 🧪 **Experimental** Debugger V2 is now available; see the + [tutorial][debugger-v2-tutorial] on how to use the experimental TensorFlow + APIs to spot NaN's in tensors, view graphs generated from executions, and the + related lines in the Python source code (#3821) + +## TensorBoard.dev updates +- Added support for showing the Distributions tab (#3762) +- Uploader now displays data statistics in the console while uploading data + (#3678) +- Added new uploader command line flags (#3707) + - `--dry_run`: causes the uploader to only read the logdir and display + statistics (if `--verbose` is the default 1) without uploading any data to + the server + - `--one_shot`: causes the uploader to exit immediately after all existing + data in the logdir are uploaded; this mode prints a warning message if the + logdir doesn't contain any uploadable data +- Upload button in the header offers a convenient, copyable command +- 🧪 **Experimental** DataFrame API: You can now read Scalars data from + TensorBoard.dev as a Pandas DataFrame (learn more [here][dataframe-tutorial]) + +[debugger-v2-tutorial]: https://www.tensorflow.org/tensorboard/debugger_v2 +[dataframe-tutorial]: https://www.tensorflow.org/tensorboard/dataframe_api + +## Bug fixes +- Projector plugin + - Shows data when logs exist in both logdir root and subdirectory (#3694) + - Fixed incorrect embeddings from TF2 checkpoints (#3679) + - Added support for binary format, with 2x speedup loading large tensors in + some cases (#3685) - thanks [@RustingSword](https://github.com/RustingSword) + - Added [Colab tutorial][projector-colab] for Projector plugin (#3423) +- Notebooks + - Increased port scanning from 10 to 100 to better support multi-tenant + Notebooks (#3780) - thanks [@jerrylian-db](https://github.com/jerrylian-db) + - Add proxy (e.g. jupyter-server-proxy) support for %tensorboard magics + (#3674) - thanks [@zac-hopkinson](https://github.com/zac-hopkinson) + - Set the TENSORBOARD_PROXY_URL environment variable + `export TENSORBOARD_PROXY_URL="/proxy/%PORT%/"` +- Dynamic plugins (Projector, Fairness Indicators, Profiler, What-If Tool) + appear when TensorBoard is launched programmatically via Python (#3695) +- Fixed download links in Custom Scalars (#3794) +- Updated broken docs (#3440, #3459, #3561, #3681) - thanks + [@LexusH](https://github.com/LexusH), + [@ManishAradwad](https://github.com/ManishAradwad), + [@ricmatsui](https://github.com/ricmatsui), + [@robertlugg](https://github.com/robertlugg) +- Better handling of S3-related InvalidRange errors (#3609) - thanks + [@ahirner](https://github.com/ahirner) +- Fixed deprecated numpy usage (#3768) - thanks + [@lgeiger](https://github.com/lgeiger) + +[projector-colab]: https://www.tensorflow.org/tensorboard/tensorboard_projector_plugin + +## Deprecations + +- Beholder will be removed in a future release (#3843) +- Debugger (V1) will be removed in a future release, in favor of the + aforementioned V2 version + +## Misc + +The frontend now uses Angular (replaces the Polymer entry point, which will be +removed in a future release; still visible at the `/legacy.html` endpoint) +(#3779). If you observe any bugs that do not reproduce under `/legacy.html`, +please file an issue. + +For dynamic plugins, please see their respective pages +([Fairness Indicators][fairness-docs], [Profiler][profiler-docs], +[What-If Tool][wit-docs]). + +[fairness-docs]: https://github.com/tensorflow/fairness-indicators/commits/master +[profiler-docs]: https://github.com/tensorflow/profiler/commits/master +[wit-docs]: https://github.com/PAIR-code/what-if-tool/blob/master/RELEASE.md + +# Release 2.2.2 + +## Features + +- Some performance improvements to line charts (#3524) +- Performance improvements in the Text plugin due to batch HTML + sanitization (#3529) +- Performance improvements in backend markdown cleaning for tag + rendering (#3599) +- CSS/layout performance optimization by applying layout/layer bound where + possible (#3642) +- The `tensorboard dev list` subcommand now reports the total size of stored + tensors (used as the backing storage type for Histograms) (#3652) + +## TensorBoard.dev updates + +- TensorBoard.dev now supports the Histograms plugin, for experiments + uploaded starting from this release + - The `tensorboard dev upload` subcommand now sends the histograms, when + available, so that it can be rendered via the Histograms plugin on + TensorBoard.dev +- This release may support additional plugins in the future, once those plugins + are enabled in the TensorBoard.dev service + +## Breaking changes + +- The experimental and legacy SQLite support (via the `--db_import` and `--db` + flags) is removed to ease maintenance (#3539) + +# Release 2.2.1 + +## TensorBoard.dev updates + +- TensorBoard.dev now renders model graphs, for experiments uploaded starting + from this release. + - The `tensorboard dev upload` subcommand now sends the model graph, when + available, so that it can be rendered via the Graphs plugin on + TensorBoard.dev. + - Large node attribute values (which would not be rendered anyway) are + filtered out before upload. + - Graphs that remain larger than 10MB after filtering are not uploaded. +- The `tensorboard dev upload` command supports a `--plugins` option to + explicitly indicate the desired plugins for which summary data should be + uploaded (#3402, #3492) +- The `tensorboard dev list` subcommand now reports the total size of stored + binary objects (e.g., graphs) for each experiment (#3464) +- The `tensorboard dev list` subcommand now accepts a `--json` flag to allow + parsing the output more easily (#3480) + +## Features + +- Auto-reload is now disabled when the browser tab is not visible, saving + network bandwidth (#3483) +- New logo used in the favicon (#3406) + +## Bug fixes + +- Plugin loading: When a plugin fails to load, TensorBoard logs an error and + continues, instead of crashing (#3484, #3486) +- Eliminated sporadic HTTP 500 errors for XHRs that do markdown rendering (#3491) + +# Release 2.2.0 + +The 2.2 minor series tracks TensorFlow 2.2. + +## Features + +- Profile plugin now should be pip installed from `tensorboard-plugin-profile`. + The new version works in Chrome 80 and Firefox, has better model insights and + will be more actively maintained. +- Add S3_ENDPOINT variable (#3368) - thanks @thealphacod3r +- Confirm that the connection to tensorboard works or change to localhost + (#2371) - thanks @miguelmorin +- Update --reload_multifile_inactive_secs default to 24 hours (#3243) +- New `tensorboard dev update-metadata` command allows for updating the name and + description of experiments (#3277) +- Improved organization of artifacts downloaded during export from + TensorBoard.dev (#3307) + +## Bug fixes + +- Fix for #3282 where the tooltip would remain even after the mouse leaves the +plot (#3347) +- Internal fix: HParams summary protos now properly include tensor values (#3386) +- Fixes to profiling tutorial (#3372 & #3381) + +## Breaking Changes +- Note: As of TensorBoard 2.1.1+, only Python 3 is supported. There will be no +further releases for Python 2 as per +https://groups.google.com/a/tensorflow.org/forum/#!topic/developers/ifEAGK3aPls + + +# Release 2.1.1 + +## Features + +- Uploader: Added ability to upload and modify experiment name and description (#3277) + +## Breaking changes + +- As per + https://groups.google.com/a/tensorflow.org/forum/#!topic/developers/ifEAGK3aPls + this patch does not support Python 2. Only Python 3 is supported + + +# Release 2.1.0 + +The 2.1 minor series tracks TensorFlow 2.1. + +## Features + +- Debugger: added ability to display Tensors as images, with selectable color map and zooming (#2729, #2764) +- What-If Tool improvements: + - Added ability to set custom distance function for counterfactuals (#2607) + - Added ability to explore counterfactual examples for regression models (#2647) + - Added ability to consume arbitrary prediction-time information (#2660) + - Added ability to slice performance statistics by numeric features (in addition to categorical features) (#2678, #2704). + - Added PR/ROC curves by class for multi-class classification models (#2755) +- Improvements for plugin developers: + - Added support for communication between TensorBoard and plugins in iframes (#2309, #2703) + - (Experimental) Added library for improved plugin integration (#2708) + - Enabled dynamic plugins in TensorBoard within Colab (#2798) +- Security improvements, e.g. Content Security Policy configurations +- Reduced overhead of image, audio, and histogram summary writing API methods (#2899) - thanks @hongjunChoi + +## Bug fixes + +- What-If Tool: + - Fixed sometimes-stuck threshold sliders (#2682) + - Fixed PD plots in notebook mode with py3 kernels (#2669) + - Fixed info dialogs re. Fairness optimization (#2694) +- Scalars dashboard: fixed unreliable data loading over slow network connections (#2825) +- Fixed potential corruption when reading files from disk, when TensorFlow is not installed (#2791) +- Fixed writing of histogram summaries when using TPUs (#2883) - thanks @hongjunChoi + +## TensorBoard.dev updates + +- The `tensorboard dev list` subcommand now provides detailed metadata about + each experiment. + +# Release 2.0.2 + +## Features + +- Improvements to [TensorBoard.dev] support: + - New `tensorboard dev list` subcommand lists all experiments uploaded to + TensorBoard.dev (#2903) + - In the event of a transient backend issue or permanent breaking change, the + uploader can now gracefully degrade and print a diagnostic (#2879) + +[TensorBoard.dev]: https://tensorboard.dev/ + +# Release 2.0.1 + +## Features +- Preview of TensorBoard.dev uploader! Check out for + information and usage instructions. + +# Release 2.0.0 + +The 2.0 minor series tracks TensorFlow 2.0. + +## Breaking changes + +- TensorBoard now serves on localhost only by default to avoid unintentional + overexposure. To expose TensorBoard to the network, either use a proxy, bind + to a specific hostname or IP address by using the `--host` flag, or explicitly + enable the previous behavior of binding on all network interfaces by passing + the flag `--bind_all`. See PR #2589. + +- The `--logdir` flag no longer supports passing multiple comma-delimited paths, + which means that it now *supports* paths containing literal comma and colon + characters, like `./logs/m=10,n=20,lr=0.001` or `./logs/run_12:30:15`. To + mimic the old behavior, prefer using a tree of symlinks as it works with more + plugins, but as a fallback the flag `--logdir_spec` exposes the old behavior. + See PR #2664. + +- Projector plugin `visualize_embeddings()` API now takes `logdir` as its first + parameter rather than `writer` (which only supported TF 1.x summary writers). + For backwards compatibility TF 1.x writers will still be accepted, but passing + the logdir explicitly is preferred since it works without any dependency on + TF 1.x or 2.x summary writing. See PR #2665. + +- The namespace `tensorboard.summary.*` now aliases the summary API symbols in + `tensorboard.summary.v2.*` rather than those in `tensorboard.summary.v1.*`. + The old symbols can still be accessed under the `.v1` names. Note that the + new v2 API symbols are exposed in TF 2.0 as the new `tf.summary.*` API and + this is normally how they should be used. See PR #2670. + +## Features + +- Smarter log directory polling can be used by passing `--reload_multifile=true` + to poll all "active" event files in a directory rather than only the last one. + This avoids problems where data written to the non-last file never appears. + See PR #1867 for details, including how to adjust the "active" threshold. + +- What-If Tool now can sort PD plots by interestingness (#2461) + + +# Release 1.15.0 + +The 1.15 minor series tracks TensorFlow 1.15. + +## Features +- Embeddings projector now shows sprite images in the nearest neighbors list + (#2543) - thanks @beasteers +- When recording hyperparameters, the trial ID can now be customized, for easier + integration with existing tuner systems (#2442) +- Improvements to Colab and Jupyter notebook integration: + - The `TENSORBOARD_BINARY` environment variable can now be set to invoke a + non-default `tensorboard` binary (#2386) + - Error messages are now clearer when the TensorBoard binary fails to launch + (#2395) + - The `%tensorboard` magic no longer spams log messages when a different + version of TensorBoard is already running on the same machine (#2470) + - The `%tensorboard` magic can now be used in Jupyter notebooks running on + hosts other than `localhost` (#2407) +- What-If Tool improvements: + - Errors running inference are now surfaced in the What-If Tool UI (#2414) + - Median error stats are now displayed in addition to mean error stats (#2434) +- Mesh plugin improvements: + - Now compatible with TensorFlow 2.0 via a new `summary_v2` module (#2443) + - The number of vertices in the mesh can now be dynamic (#2373) +- Profile dashboard improvements: + - Wasted time now appears in the node table, and can be used as a sort key + (#2525) + - Memory bandwidth utilization now appears in the dashboard header (#2525) +- Improvements for plugin developers: + - Plugins can now be rendered in an iframe whose source is served from the + plugin backend, eliminating the need to bundle a frontend with the + TensorBoard binary + - Plugins can now be discovered dynamically and loaded at runtime, by defining + a `tensorboard_plugins` entry point + - See our [example dynamically loaded plugin][example-plugin] for a plugin to + use as a starting point, plus documentation + - TensorBoard now uses Polymer 2.7 (#2392, et al.) + +[example-plugin]: https://github.com/tensorflow/tensorboard/tree/1.15/tensorboard/examples/plugins/example_basic#readme + +## Bug fixes +- #2614 - “Toggle All Runs” button now behaves correctly on the first click when + many runs are loaded (PR #2633) +- Scalar charts should no longer “become tiny” on certain kinds of rendering + failures (PR #2605) +- #2028 - TensorBoard now logs less verbosely with Werkzeug 0.15.0 and up; it + now behaves the same across Werkzeug versions (PR #2383) +- The What-If Tool can now properly compare two regression models in the initial + Facets Dive view (PR #2414) +- Embedding projector metadata view now wraps long strings correctly (PR #2198) + + +# Release 1.14.0 + +## Features +- New hyperparameters dashboard: see [tutorial and demo][hparams-docs] and + [summary APIs][hparams-apis] +- New dashboard for visualizing meshes and point clouds: see + [README][mesh-readme] +- Graph dashboard now shows Keras conceptual graph: see [tutorial and + demo][conceptual-graph-docs] +- Embedding projector now supports the [UMAP dimensionality reduction + algorithm][umap] ([learn more about UMAP here][umap-tutorial]) (#1901) - + thanks @cannoneyed +- [TensorBoard notebook support][notebook-docs] is stabilized: in a Colab or + Jupyter notebook, run `%load_ext tensorboard` followed by `%tensorboard + --logdir ./path/to/logs` +- Profile dashboard improvements: + - New pod viewer tool to analyze TPU performance (#2111) + - Now allows capturing profiles from TensorBoard (#1894) +- What-If Tool improvements: + - Now available as a notebook widget for Jupyter and Colab: see + [demo][witwidget-demo] + - Now shows PR curves and F1 score (#2264) + - Now supports Cloud AI Platform, including XGBoost models (#2194) + - Now shows feature-level attributions for individual predictions, as + applicable (#2252) +- Image dashboard now allows scrolling for large images (#2164) - thanks @lr1d +- Scalar chart smoothing now caps at 0.999 for convenience (#1974) - thanks + @flostim +- Scalar chart scroll-to-zoom behavior now requires holding `Alt` (#2221) +- `tensorboard` now supports a `--version` command line argument (#2097) - + thanks @shashvatshahi1998 +- Python API now defines `tensorboard.__version__` in addition to + `tensorboard.version.VERSION` (#2026) + +## Bug fixes +- Projector metadata card now formats long words properly (PR #2016) - thanks + @makseq +- #2010 - `.tensorboard-info` is now world-writable for multi-user \*nix systems + (PR #2131) +- #1989 - `importlib.reload(tensorboard)` now works properly (PR #2005) + +[conceptual-graph-docs]: https://www.tensorflow.org/tensorboard/r2/graphs +[hparams-apis]: https://github.com/tensorflow/tensorboard/blob/1.14/tensorboard/plugins/hparams/api.py#L15 +[hparams-docs]: https://www.tensorflow.org/tensorboard/r2/hyperparameter_tuning_with_hparams +[mesh-readme]: https://github.com/tensorflow/tensorboard/blob/1.14/tensorboard/plugins/mesh/README.md#mesh-plugin +[notebook-docs]: https://www.tensorflow.org/tensorboard/r2/tensorboard_in_notebooks +[umap-tutorial]: https://umap-learn.readthedocs.io/en/latest/how_umap_works.html +[umap]: https://github.com/lmcinnes/umap#umap +[witwidget-demo]: https://colab.research.google.com/github/tensorflow/tensorboard/blob/1.14/tensorboard/plugins/interactive_inference/What_If_Tool_Notebook_Usage.ipynb + + +# Release 1.13.1 + +## Bug fixes +- #1895 - Fix `strftime`-related launch error on Windows (PR #1900) +- #1794 - Fix What-If Tool loading examples without inference (PR #1898) +- #1914 - Disable the profile dashboard inside Colab, where it doesn’t work +- #1945 - Fix profile dashboard loading behavior + + +# Release 1.13.0 + +The 1.13 minor series tracks TensorFlow 1.13. + +Compatibility note: As of 1.13, TensorBoard has begun transitioning its own use +of some TensorFlow APIs to align with their naming in TF 2.0, and as a result +TensorBoard 1.13+ strictly requires TensorFlow 1.13+. + +## Features +- What-If tool notebook mode and general improvements + - Now usable directly inside Jupyter and Colab notebooks (#1662, #1745, #1788) + - Added comparison of multiple models (#1589, #1672) + - Added CSV loading model (#1597) + - Added global partial dependence plots (#1604) + - Added custom prediction function support (#1842) +- (Alpha) TensorBoard can be embedded inside Juptyer and Colab notebooks via a + `%tensorboard` magic, after loading the `tb.notebook` extension (#1813, #1822) +- Profile dashboard overview page now shows step time breakdown (PR #1683) +- Line chart "log" scale is now a true log scale (#1507) +- When no --port flag is specified, TensorBoard will now search for open ports + near the default port (6006) if that port is already in use (#1851) + +## Performance improvements +- Faster event file loading by caching runtime check (PR #1686) - thanks @abiro + +## Bug fixes +- #786 (partial) - Avoid trying to smooth plots of constant y-value (PR #1698) +- #1515 - Fix image right-click accessiblity in non-Chromium browsers (PR #1561) +- #1541 - Fix --event_file flag when using --inspect +- #1566 - Fix error on trying to import "google.protobuf.pyext" (PR #1887) +- #1567 - Fix display bug on line chart after toggling series selection +- #1598 - Fix clipping in graph dashboard PNG download (PR #1600) +- #1601 - Fix chart SVG download option in Firefox +- #1623 - Fix --path_prefix interpretation +- #1838 - Fix run selector synchronization across already-loaded dashboards + + +# Release 1.12.2 + +## Bug fixes +- #1620 - Fix path_prefix flag regression (PR #1623) +- #1704 - Fix debugger sidebar resizer + + +# Release 1.12.1 + +## Bug fixes +- #1549 - Run names wrap at all character (PR #1602) - thanks @dgrahn +- #1610 - Fix Download as PNG for large graph +- #1684 - Fix bug rendering debugger plugin (PR #1550) - thanks @longouyang + + +# Release 1.12.0 + +The 1.12 minor series tracks TensorFlow 1.12. + +## Features +- New download-as-SVG option for scalar dashboard charts (#1446) +- Image dashboard should now detect and render SVG images (#1440) +- What-If Tool example viewer/loader improvements: + - Support for sampling examples to load (#1504) + - Support for viewing SequenceExamples (#1513) + - Improvements to saliency viewing/sorting (#1472) +- Profile tool shows per-program breakdown, idle time, and ops left out (#1470) + +## Bug fixes +- #1463 - What-If tool now handles classes with blank labels (PR #1471) +- #1468 - Reduce clipping in graph plugin sidebar +- #1475 - Restore tag filter persistence to URL param and across dashboards +- #1477 - Fix bug rendering TPU profile dashboard overview page +- #1480 - Fix projector hanging due to infinite loop (PR #1481) +- #1491 - Restore spinner on line charts when loading data +- #1499 - Fix stale/incorrect line charts when filtering by tag (PR #1500) +- #1505 - Fix 404 console errors in Firefox - thanks @wdirons +- #1506 - Fix --purge_orphaned_data to allow passing false (PR #1511) +- #1508 - Make custom scalars chart ignore outliers functionality work +- #1524 - Preserve line chart zoom level when data refreshes + + +# Release 1.11.0 + +The 1.11 minor series tracks TensorFlow 1.11. + +## Highlights +- New What-If Tool dashboard, which provides a simple, intuitive, and powerful + visual interface to play with a trained ML model on a set of data with + absolutely no code required. See for details: + https://github.com/tensorflow/tensorboard/tree/1.11/tensorboard/plugins/interactive_inference + +## Features +- Graph dashboard now supports coloring nodes by XLA cluster (PR #1336) +- Last updated time appears in tooltip for refresh button (PR #1362) +- Line charts support pan w/ shift key, zoom w/ scroll wheel (PR #1429, #1456) + +## Performance improvements +- Better UI animation/scrolling performance (#1311, #1357) +- Reduced Plottable MouseInteraction overhead on hover (#1333/#1329) +- Optimized line chart tooltip redraw behavior (#1355) + +## Bug fixes +- #982 - Fix spurious 404s for /[[_dataImageSrc]] or /[[_imageURL]] (PR #1315) +- #1320 - Fix port binding to disallow confusing IPv4/IPv6 port reuse (PR #1449) +- #1397 - Fix multi-part logdirs to correct expand ~ for user homedir +- #1396 - Fix "step" chart axis to show only integer ticks +- #1389 - Fix scalar card titles to omit common prefix (PR #1399) +- #1403 - Fix scalar chart shrinking problem on fast page changes +- #1406 - Fix scalar chart tooltip display to better avoid clipping + + +# Release 1.10.0 + +The 1.10 minor series tracks TensorFlow 1.10. + +## Changes +- New logic for loading/launching TensorBoard (PR #1240) + - Plugin loading now uses new TBLoader API + - Argument parsing now uses argparse + - New `tb.program.launch()` API to launch TB from within Python +- Sidebars adjusted to be consistent across plugins (PR #1296) +- tb.summary.image() param order fixed to h, w (PR #1262) - thanks @ppwwyyxx +- New TPU profile dashboard progress bar for loading tools (PR #1286) + +## Bug fixes +- #1260 - Fix missing pie chart in TPU profile input pipeline analyzer +- #1280 - Fix TPU profile memory viewer issue with XLA compatibility +- #1287 - Fix dangling UI interaction layer issue in vz-line-chart +- #1294 - Fix custom scalar dashboard to de-duplicate charts - thanks @lgeiger + + +# Release 1.9.0 + +The 1.9 minor series tracks TensorFlow 1.9. + +## Highlights + +- Improved performance with log directories on GCS (Google Cloud Storage) with + faster traversal time and reduced bandwidth consumption (PRs #1087, #1226) +- Profile dashboard improvements, including: + - New memory viewer tool that visualizes peak memory usage (#1223) + - Trace viewer tool now supports streaming mode, that dynamically renders a + much longer trace (#1128) + - Op profile tool now shows memory utilization in op details card (#1238) + - Profile dashboard now supports visualizing data from multiple hosts (#1117) + +## Features +- Graph dashboard now allows searching nodes by regex (#1130) +- New --samples_per_plugin flag to control how many samples are kept (#1138) +- Better error when --logdir/--db flag is omitted (#1189) - thanks @oxinabox +- Debugger plugin can now show single elements of string tensors (#1131) + +## Bug fixes +- #1107 - Beholder plugin should no longer reserve GPU (PR #1114) +- #1190 - Beholder plugin summary placeholder no longer interferes with normal + summary use and/or Estimator - thanks @TanUkkii007 (PR #1148) +- #427 and #588 - removed pip package deps on bleach and html5lib (PR #1142) +- #1191 - fixed debugger plugin UnboundLocalError - thanks @cfroehli +- #1200 - fixed debugger plugin binary-valued string tensor issues +- #1201 - fixed "dictionary changed size" race condition in reloader (PR #1235) + + +# Release 1.8.0 + +The 1.8 minor series tracks TensorFlow 1.8. + +## Bug fixes + +- #1082 - fixes rendering for certain graphs with metaedges/function nodes +- #1097 - correction to debugger plugin keras code snippet (PR #1100) +- #1111 - event reader logic now supports TF 1.8 GetNext() API (PR #1086) + + +# Release 1.7.0 + +The 1.7 minor series tracks TensorFlow 1.7. + +## Highlights + +- (Beta) New Beholder plugin that shows a live video feed of tensor data during + model training, by @chrisranderson. Caveat: only currently recommended for use + where TensorBoard and TensorFlow share a local disk. See for details: + https://github.com/tensorflow/tensorboard/tree/1.7/tensorboard/plugins/beholder + +## Features + +- Debugger tensor value card improvements: + - Entering new slice/time indices will automatically refresh view (#1017) + - Clicking title will highlight node in other parts of the UI (#1023) +- Debugger health pills now show number of NaN/Inf values if any (#1026) + +## Changes + +- Audio summary playback elements no longer loop by default (PR #1061), but + looping can be enabled for individual elements through a right-click option. + +## Bug fixes + +- #965 - pr_curve_streaming_op no longer results in duplicate plots (PR #1053) +- #967 - custom scalar margin plots with missing tags now indicate the run +- #970 - browser back button now works across home page (/) - thanks @brianwa84 +- #990 - apple-touch-icon.png requests no longer trigger 404s - thanks @lanpa +- #1010 - content no longer intrudes into sidebar on narrow viewports +- #1016 - CTRL+C now exits TensorBoard even with debugger enabled (PR #975) +- #1021 - text plugin no longer always shows as inactive on first page load + + +# Release 1.6.0 + +NOTICE: TensorBoard 1.6.0+ has moved to the `tensorboard` package name on PyPI: +https://pypi.python.org/pypi/tensorboard. Only bugfix updates on 1.5.x will be +applied to the old package name (`tensorflow-tensorboard`). To upgrade to +TensorBoard 1.6.0+ we suggest you *first* `pip uninstall tensorflow-tensorboard` +before doing `pip install tensorboard`. See "Known Issues" below if you run into +problems using TensorBoard after upgrading. + +The 1.6 minor series tracks TensorFlow 1.6. + +## Highlights + +- (Beta) New Profile dashboard, which provides a suite of tools for inspecting + TPU performance. See for details: + https://github.com/tensorflow/tensorboard/tree/1.6/tensorboard/plugins/profile +- (Alpha) New Debugger dashboard, which provides a visual interface to `tfdbg`, + the TensorFlow debugger. See for details: + https://github.com/tensorflow/tensorboard/tree/1.6/tensorboard/plugins/debugger + +## Known issues + +- Package `tensorboard` is installed but command and/or module are missing or + have the wrong version - this may be due to conflicts with other packages that + provide `tensorboard` scripts or modules. Please uninstall *all* such packages + including `tensorboard`, `tensorflow-tensorboard` and `tb-nightly` and then + reinstall `tensorboard`. +- Bazel 0.9.0+ required to build from source - this change was necessary in order + to add support for building at Bazel 0.10.0 and above. Please update Bazel. + + +# Release 1.5.1 + +NOTICE: TensorBoard 1.6.0+ will move to the `tensorboard` package name on PyPI, +instead of using `tensorflow-tensorboard`. Only bugfix updates on 1.5.x will be +applied to the old package name. To upgrade to TensorBoard 1.6.0+ please *first* +`pip uninstall tensorflow-tensorboard` before doing `pip install tensorboard`. + +The 1.5 minor series tracks TensorFlow 1.5. + +## Bug fixes + +- #554 - line charts no longer "shrink" after run changes on other tabs +- #889 - fixed xComponentsCreationMethod default in vz-line-chart +- #898 - fixed offset of checkbox label in projector dashboard - thanks @marcj +- #903 - disabled margin plot smoothing to avoid line going out of bounds +- #916 - made `futures` dependency py2-only to avoid install failures +- #924 - fixed graph dashboard bug causing blank PNG download and minimap +- #926 - made projector plugin API available in pip package + +## Documentation updates + +- Custom scalars documentation now documents margin plots feature (#878) +- FAQ updated to describe custom scalars plugin use cases + + +# Release 1.5.0 + +The 1.5 minor series tracks TensorFlow 1.5. + +## Highlights + +- New Custom Scalars dashboard, which can display configurable custom line and + margin charts based on the same data as the regular Scalars dashboard. See + for details: https://github.com/tensorflow/tensorboard/tree/1.5/tensorboard/plugins/custom_scalar +- Many projector plugin enhancements thanks to @francoisluus, which enable + cognitive-assisted labeling via semi-supervised t-SNE + - t-SNE specific features: semi-supervision (#811) plus perturb (#705) and + pause/resume (#691) buttons + - general features: metadata editor (#753), selection edit mode (#697), edit + box for neighbors slider (#733), 2D sprite element zooming (#696) + +## Features + +- Image dashboard brightness and constrast sliders (#771) - thanks @edmundtong +- Top-level dashboard tabs now scroll when there are too many to fit (#730) +- Settable browser window title with --window_title flag (#804) - thanks @tkunic +- Tag filters are now reflected in the URL, making them saveable (#787) +- Pane-based dashboards now only load charts from first two panes by default, + which should improve responsiveness (#643 defaults tag filter search string + to empty, and #871 makes first two panes open by default) +- Lower latency to serve TensorBoard HTML thanks to preloading in memory (#708) +- Lazy imports ("import tensorboard as tb") now work for summary APIs (#778) +- PR curve summaries now have pb (#633) and raw_data_pb (#646) versions + +## Bug fixes + +- #265 - fixed `--logdir` to handle Windows drive letters - thanks @shakedel +- #784 - fixed bug in find similar subgraph algo - thanks @trisolaran +- Graph plugin fixed to + - correctly render function nodes (#817) + - pan to nodes more reliably (#824, #837) + - rebuild hierarchy if callbacks change to avoid race in rendering (#879) + + +# Release 0.4.0 + +The 0.4 minor series tracks TensorFlow 1.4. + +## Features + +- PR Curve plugin has a full-featured new dashboard (#387, #426, many others) +- PR Curve plugin has new streaming and raw summary-writing ops (#520, #587) +- Graph plugin has a new "Functions" scene group to show function libraries and + links to function calls (#394, #395, #497, #551, others) +- Graph plugin metanodes are now colored more helpfully (#467) +- Graph plugin selected run is now persisted to URL (#505) +- Standard dashboard card header UI is more compact and readable (#430) +- Pagination limit can now be configured in settings (#535) +- Text plugin now has op and pb summary writing methods (#510) +- Reduced boilerplate and cleaner API hooks for custom plugins (#611, #620) +- Faster initial loads due to improved active plugin detection (#621, #663) +- Reuse of TCP connections with switch to using HTTP/1.1 (#617) + +## Bug fixes + +- #477 - fixed URLs to properly URI-encode run and tag names +- #610 - fixed smoothing algorithm initial value bias - thanks @alexirpan +- #647 - fixed text plugin decoding error that led to bad markdown processing diff --git a/saved_models/tensorboard/SECURITY.md b/saved_models/tensorboard/SECURITY.md new file mode 100644 index 0000000000000000000000000000000000000000..140e7b6a5458f58405670f7a92ed4d5be6e3ebdc --- /dev/null +++ b/saved_models/tensorboard/SECURITY.md @@ -0,0 +1,10 @@ +# TensorBoard Security + +Please refer to [TensorFlow’s security model and guidelines][tf-security]. + +To report any security related issues, please email `security@tensorflow.org` +[as described in TensorFlow’s `SECURITY.md`][email]. Consult that document for +details, including an encryption key for especially sensitive disclosures. + +[email]: https://github.com/tensorflow/tensorflow/blob/master/SECURITY.md#reporting-vulnerabilities +[tf-security]: https://github.com/tensorflow/tensorflow/blob/master/SECURITY.md diff --git a/saved_models/tensorboard/WORKSPACE b/saved_models/tensorboard/WORKSPACE new file mode 100644 index 0000000000000000000000000000000000000000..117f19142ae12861e83787e7f206de99358ada8b --- /dev/null +++ b/saved_models/tensorboard/WORKSPACE @@ -0,0 +1,67 @@ +workspace(name = "org_tensorflow_tensorboard") + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "io_bazel_rules_webtesting", + sha256 = "f89ca8e91ac53b3c61da356c685bf03e927f23b97b086cc593db8edc088c143f", + urls = [ + # tag 0.3.1 resolves to commit afa8c4435ed8fd832046dab807ef998a26779ecb (2019-04-03 14:10:32 -0700) + "https://github.com/bazelbuild/rules_webtesting/releases/download/0.3.1/rules_webtesting.tar.gz", + ], +) + + + +http_archive( + name = "io_bazel_rules_closure", + sha256 = "6a900831c1eb8dbfc9d6879b5820fd614d4ea1db180eb5ff8aedcb75ee747c1f", + strip_prefix = "rules_closure-db4683a2a1836ac8e265804ca5fa31852395185b", + urls = [ + "https://github.com/bazelbuild/rules_closure/archive/db4683a2a1836ac8e265804ca5fa31852395185b.tar.gz", # 2020-01-15 + ], +) + +load("@io_bazel_rules_closure//closure:repositories.bzl", "rules_closure_dependencies") +rules_closure_dependencies( +) + +http_archive( + name = "build_bazel_rules_nodejs", + sha256 = "f9e7b9f42ae202cc2d2ce6d698ccb49a9f7f7ea572a78fd451696d03ef2ee116", + urls = [ + "https://github.com/bazelbuild/rules_nodejs/releases/download/1.6.0/rules_nodejs-1.6.0.tar.gz", + ], +) + +load("@build_bazel_rules_nodejs//:index.bzl", "yarn_install") + +yarn_install( + name = "npm", + package_json = "//:package.json", + yarn_lock = "//:yarn.lock", + # Opt out of symlinking local node_modules folder into bazel internal + # directory. Symlinking is incompatible with our toolchain which often + # removes source directory without `bazel clean` which creates broken + # symlink into node_modules folder. + symlink_node_modules = False, +) + +load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies") + +install_bazel_dependencies() + + + + +load("@bazel_skylib//lib:versions.bzl", "versions") +# Keep this version in sync with the BAZEL environment variable defined +# in our .travis.yml config. +versions.check(minimum_bazel_version = "2.1.0") + + + + +# Please add all new dependencies in workspace.bzl. +load("//third_party:workspace.bzl", "tensorboard_workspace") +tensorboard_workspace() diff --git a/saved_models/tensorboard/WORKSPACE.bak b/saved_models/tensorboard/WORKSPACE.bak new file mode 100644 index 0000000000000000000000000000000000000000..789c6a321f25948f010aeafa1d27471f087c8fa3 --- /dev/null +++ b/saved_models/tensorboard/WORKSPACE.bak @@ -0,0 +1,112 @@ +workspace(name = "org_tensorflow_tensorboard") + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "io_bazel_rules_webtesting", + sha256 = "f89ca8e91ac53b3c61da356c685bf03e927f23b97b086cc593db8edc088c143f", + urls = [ + # tag 0.3.1 resolves to commit afa8c4435ed8fd832046dab807ef998a26779ecb (2019-04-03 14:10:32 -0700) + "http://mirror.tensorflow.org/github.com/bazelbuild/rules_webtesting/releases/download/0.3.1/rules_webtesting.tar.gz", + "https://github.com/bazelbuild/rules_webtesting/releases/download/0.3.1/rules_webtesting.tar.gz", + ], +) + +load("@io_bazel_rules_webtesting//web:repositories.bzl", "web_test_repositories") +web_test_repositories(omit_bazel_skylib = True) + +load("@io_bazel_rules_webtesting//web:py_repositories.bzl", "py_repositories") +py_repositories() + +http_archive( + name = "io_bazel_rules_closure", + sha256 = "6a900831c1eb8dbfc9d6879b5820fd614d4ea1db180eb5ff8aedcb75ee747c1f", + strip_prefix = "rules_closure-db4683a2a1836ac8e265804ca5fa31852395185b", + urls = [ + "http://mirror.tensorflow.org/github.com/bazelbuild/rules_closure/archive/db4683a2a1836ac8e265804ca5fa31852395185b.tar.gz", + "https://github.com/bazelbuild/rules_closure/archive/db4683a2a1836ac8e265804ca5fa31852395185b.tar.gz", # 2020-01-15 + ], +) + +load("@io_bazel_rules_closure//closure:repositories.bzl", "rules_closure_dependencies") +rules_closure_dependencies( + omit_bazel_skylib = True, + omit_com_google_protobuf = True, + omit_com_google_protobuf_js = True, +) + +http_archive( + name = "build_bazel_rules_nodejs", + sha256 = "f9e7b9f42ae202cc2d2ce6d698ccb49a9f7f7ea572a78fd451696d03ef2ee116", + urls = [ + "http://mirror.tensorflow.org/github.com/bazelbuild/rules_nodejs/releases/download/1.6.0/rules_nodejs-1.6.0.tar.gz", + "https://github.com/bazelbuild/rules_nodejs/releases/download/1.6.0/rules_nodejs-1.6.0.tar.gz", + ], +) + +load("@build_bazel_rules_nodejs//:index.bzl", "yarn_install") + +yarn_install( + name = "npm", + package_json = "//:package.json", + yarn_lock = "//:yarn.lock", + # Opt out of symlinking local node_modules folder into bazel internal + # directory. Symlinking is incompatible with our toolchain which often + # removes source directory without `bazel clean` which creates broken + # symlink into node_modules folder. + symlink_node_modules = False, +) + +load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies") + +install_bazel_dependencies() + +http_archive( + name = "io_bazel_rules_sass", + sha256 = "9dcfba04e4af896626f4760d866f895ea4291bc30bf7287887cefcf4707b6a62", + strip_prefix = "rules_sass-1.26.3", + urls = [ + "http://mirror.tensorflow.org/github.com/bazelbuild/rules_sass/archive/1.26.3.zip", + "https://github.com/bazelbuild/rules_sass/archive/1.26.3.zip", + ], +) + +http_archive( + name = "org_tensorflow", + # NOTE: when updating this, MAKE SURE to also update the protobuf_js runtime version + # in third_party/workspace.bzl to >= the protobuf/protoc version provided by TF. + sha256 = "2595a5c401521f20a2734c4e5d54120996f8391f00bb62a57267d930bce95350", + strip_prefix = "tensorflow-2.3.0", + urls = [ + "http://mirror.tensorflow.org/github.com/tensorflow/tensorflow/archive/v2.3.0.tar.gz", # 2020-07-23 + "https://github.com/tensorflow/tensorflow/archive/v2.3.0.tar.gz", + ], +) + +load("@org_tensorflow//tensorflow:workspace.bzl", "tf_workspace") +# tf_workspace() + +load("@bazel_skylib//lib:versions.bzl", "versions") +# Keep this version in sync with the BAZEL environment variable defined +# in our .travis.yml config. +versions.check(minimum_bazel_version = "2.1.0") + +load("@io_bazel_rules_sass//:package.bzl", "rules_sass_dependencies") + +rules_sass_dependencies() + +load("@io_bazel_rules_sass//:defs.bzl", "sass_repositories") + +sass_repositories() + +load("@com_github_grpc_grpc//bazel:grpc_deps.bzl", "grpc_deps") + +grpc_deps() + +load("@upb//bazel:repository_defs.bzl", "bazel_version_repository") + +bazel_version_repository(name = "bazel_version") + +# Please add all new dependencies in workspace.bzl. +load("//third_party:workspace.bzl", "tensorboard_workspace") +tensorboard_workspace() diff --git a/saved_models/tensorboard/ci/bazelrc b/saved_models/tensorboard/ci/bazelrc new file mode 100644 index 0000000000000000000000000000000000000000..10435bae8a2cc58a1a280723bd847b69ca94bb8f --- /dev/null +++ b/saved_models/tensorboard/ci/bazelrc @@ -0,0 +1,34 @@ +# Limit resources since Travis Trusty GCE VMs have 2 cores and 7.5 GB RAM. +build --local_resources=4000,2,1.0 +build --worker_max_instances=2 + +# Ensure sandboxing is on to increase hermeticity. +build --spawn_strategy=sandboxed +build --worker_sandboxing + +# Ensure the PATH env var from our virtualenv propagates into tests, which is +# no longer on by default in Bazel 0.21.0 and possibly again in the future. +# We set this flag for "build" since "test" inherits it, but if we don't set +# it for build too, this causes a rebuild at test time, and if we set it for +# both we hit https://github.com/bazelbuild/bazel/issues/8237. +# +# See also: +# https://github.com/bazelbuild/bazel/issues/7095 (protobuf PATH sensitivity) +# https://github.com/bazelbuild/bazel/issues/7026 (future of action_env) +build --action_env=PATH + +# Set up caching on local disk so incremental builds are faster. +# See https://bazel.build/designs/2016/09/30/repository-cache.html +build --repository_cache=~/.cache/tb-bazel-repo +fetch --repository_cache=~/.cache/tb-bazel-repo +query --repository_cache=~/.cache/tb-bazel-repo +# See https://docs.bazel.build/versions/master/remote-caching.html#disk-cache +build --disk_cache=~/.cache/tb-bazel-disk + +# Log more information to help with debugging, and disable curses output which +# just adds more clutter to the log. (Travis spoofs an interactive terminal.) +common --curses=no +build --verbose_failures +build --worker_verbose +test --test_output=errors +test --test_verbose_timeout_warnings diff --git a/saved_models/tensorboard/ci/download_bazel.sh b/saved_models/tensorboard/ci/download_bazel.sh new file mode 100644 index 0000000000000000000000000000000000000000..962484feaadb047e6e810308c7f95328a6d6f90e --- /dev/null +++ b/saved_models/tensorboard/ci/download_bazel.sh @@ -0,0 +1,38 @@ +#!/bin/sh +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== + +# Script to download Bazel binary directly onto a build machine. + +set -e + +die() { + printf >&2 "%s\n" "$1" + exit 1 +} + +if [ "$#" -ne 3 ]; then + die "Usage: $0 " +fi + +version="$1" +checksum="$2" +dest="$3" + +mirror_url="http://mirror.tensorflow.org/github.com/bazelbuild/bazel/releases/download/${version}/bazel-${version}-linux-x86_64" +github_url="https://github.com/bazelbuild/bazel/releases/download/${version}/bazel-${version}-linux-x86_64" + +exec "$(dirname "$0")/download_executable.sh" "${checksum}" "${dest}" \ + "${mirror_url}" "${github_url}" diff --git a/saved_models/tensorboard/ci/download_buildifier.sh b/saved_models/tensorboard/ci/download_buildifier.sh new file mode 100644 index 0000000000000000000000000000000000000000..28ce64b73bc276872adebc367a28b288b7a6b86c --- /dev/null +++ b/saved_models/tensorboard/ci/download_buildifier.sh @@ -0,0 +1,38 @@ +#!/bin/sh +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== + +# Script to download Buildifier binary directly onto a build machine. + +set -e + +die() { + printf >&2 "%s\n" "$1" + exit 1 +} + +if [ "$#" -ne 3 ]; then + die "Usage: $0 " +fi + +version="$1" +checksum="$2" +dest="$3" + +mirror_url="http://mirror.tensorflow.org/github.com/bazelbuild/buildtools/releases/download/${version}/buildifier" +github_url="https://github.com/bazelbuild/buildtools/releases/download/${version}/buildifier" + +exec "$(dirname "$0")/download_executable.sh" "${checksum}" "${dest}" \ + "${mirror_url}" "${github_url}" diff --git a/saved_models/tensorboard/ci/download_buildozer.sh b/saved_models/tensorboard/ci/download_buildozer.sh new file mode 100644 index 0000000000000000000000000000000000000000..64f1be11146bbee7e554b992831111ffacfd1e71 --- /dev/null +++ b/saved_models/tensorboard/ci/download_buildozer.sh @@ -0,0 +1,38 @@ +#!/bin/sh +# Copyright 2020 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== + +# Script to download Buildozer binary directly onto a build machine. + +set -e + +die() { + printf >&2 "%s\n" "$1" + exit 1 +} + +if [ "$#" -ne 3 ]; then + die "Usage: $0 " +fi + +version="$1" +checksum="$2" +dest="$3" + +mirror_url="http://mirror.tensorflow.org/github.com/bazelbuild/buildtools/releases/download/${version}/buildozer" +github_url="https://github.com/bazelbuild/buildtools/releases/download/${version}/buildozer" + +exec "$(dirname "$0")/download_executable.sh" "${checksum}" "${dest}" \ + "${mirror_url}" "${github_url}" diff --git a/saved_models/tensorboard/ci/download_executable.sh b/saved_models/tensorboard/ci/download_executable.sh new file mode 100644 index 0000000000000000000000000000000000000000..d0ffdaf4ff28c9b550d8abb588df43c65cdbf127 --- /dev/null +++ b/saved_models/tensorboard/ci/download_executable.sh @@ -0,0 +1,48 @@ +#!/bin/sh +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== + +# Script to download a binary directly onto a build machine, with +# checksum verification. + +set -e + +die() { + printf >&2 "%s\n" "$1" + exit 1 +} + +if [ "$#" -lt 3 ]; then + die "Usage: $0 [...]" +fi + +checksum="$1" +dest="$2" +shift 2 + +temp_dest="$(mktemp)" + +for url; do + wget -t 3 -O "${temp_dest}" "${url}" \ + && printf "%s %s\n" "${checksum}" "${temp_dest}" | shasum -a 256 --check \ + || { rm -f "${temp_dest}"; continue; } + mv "${temp_dest}" "${dest}" + break +done + + +[ -f "${dest}" ] +chmod +x "${dest}" +ls -l "${dest}" diff --git a/saved_models/tensorboard/package.json b/saved_models/tensorboard/package.json new file mode 100644 index 0000000000000000000000000000000000000000..ef162d764ef3cd1d8d6d57177a72589f591d202d --- /dev/null +++ b/saved_models/tensorboard/package.json @@ -0,0 +1,136 @@ +{ + "name": "tensorboard", + "version": "0.0.0-unused", + "description": "TensorFlow's visualization toolkit", + "private": true, + "directories": { + "doc": "docs" + }, + "scripts": { + "postinstall": "ngcc -p main es2015", + "build": "bazel build //...", + "test": "ibazel test //...", + "lint": "prettier --check 'tensorboard/**/*.'{css,html,js,ts,scss} .github/**/*.yml", + "fix-lint": "prettier --write 'tensorboard/**/*.'{css,html,js,ts,scss} .github/**/*.yml" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tensorflow/tensorboard.git" + }, + "keywords": [ + "ml", + "visualization" + ], + "author": "TensorFlow authors", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/tensorflow/tensorboard/issues" + }, + "homepage": "https://github.com/tensorflow/tensorboard#readme", + "devDependencies": { + "@angular/bazel": "^9.0.0", + "@angular/cli": "^9.1.2", + "@angular/compiler": "^9.0.0", + "@angular/compiler-cli": "^9.0.0", + "@bazel/bazel": "2.1", + "@bazel/ibazel": "^0.12.4", + "@bazel/jasmine": "^1.6.0", + "@bazel/karma": "1.6.0", + "@bazel/protractor": "^1.6.0", + "@bazel/rollup": "^1.6.0", + "@bazel/terser": "^1.6.0", + "@bazel/typescript": "^1.6.0", + "@rollup/plugin-commonjs": "^14.0.0", + "@rollup/plugin-node-resolve": "^8.4.0", + "@types/chai": "^4.2.7", + "@types/d3": "5.7.2", + "@types/jasmine": "^3.5.10", + "@types/lodash": "^4.14.158", + "@types/node": "^13.13.1", + "@types/requirejs": "^2.1.31", + "@types/resize-observer-browser": "^0.1.3", + "@types/sinon": "^7.5.2", + "chai": "^4.2.0", + "jasmine-core": "^3.5.0", + "karma": "5.0.2", + "karma-chrome-launcher": "^3.1.0", + "karma-firefox-launcher": "^1.3.0", + "karma-jasmine": "^3.1.0", + "karma-requirejs": "^1.1.0", + "karma-sourcemap-loader": "^0.3.7", + "prettier": "2.1.1", + "requirejs": "^2.3.6", + "rollup": "^2.26.4", + "sinon": "^7.4.1", + "terser": "^4.6.3", + "tslib": "^1.10.0", + "typescript": "3.8.3" + }, + "dependencies": { + "@angular/animations": "^9.0.0", + "@angular/cdk": "^9.0.0", + "@angular/common": "^9.0.0", + "@angular/core": "^9.0.0", + "@angular/forms": "^9.0.0", + "@angular/http": "^7.2.16", + "@angular/localize": "^9.1.7", + "@angular/material": "^9.0.0", + "@angular/platform-browser": "^9.0.0", + "@angular/platform-browser-dynamic": "^9.0.0", + "@angular/router": "^9.0.0", + "@ngrx/effects": "^9.0.0", + "@ngrx/store": "^9.0.0", + "@polymer/decorators": "^3.0.0", + "@polymer/iron-behaviors": "^3.0.1", + "@polymer/iron-collapse": "^3.0.1", + "@polymer/iron-flex-layout": "^3.0.1", + "@polymer/iron-icon": "^3.0.1", + "@polymer/iron-icons": "^3.0.1", + "@polymer/iron-iconset-svg": "^3.0.1", + "@polymer/iron-list": "^3.1.0", + "@polymer/iron-pages": "^3.0.1", + "@polymer/paper-button": "^3.0.1", + "@polymer/paper-checkbox": "^3.1.0", + "@polymer/paper-dialog": "^3.0.1", + "@polymer/paper-dialog-scrollable": "^3.0.1", + "@polymer/paper-dropdown-menu": "^3.1.0", + "@polymer/paper-header-panel": "^3.0.1", + "@polymer/paper-icon-button": "^3.0.2", + "@polymer/paper-input": "^3.2.1", + "@polymer/paper-item": "^3.0.1", + "@polymer/paper-listbox": "^3.0.1", + "@polymer/paper-material": "^3.0.1", + "@polymer/paper-menu-button": "^3.0.1", + "@polymer/paper-progress": "^3.0.1", + "@polymer/paper-radio-button": "^3.0.1", + "@polymer/paper-radio-group": "^3.0.1", + "@polymer/paper-slider": "^3.0.1", + "@polymer/paper-spinner": "^3.0.2", + "@polymer/paper-styles": "^3.0.1", + "@polymer/paper-tabs": "^3.1.0", + "@polymer/paper-toast": "^3.0.1", + "@polymer/paper-toggle-button": "^3.0.1", + "@polymer/paper-toolbar": "^3.0.1", + "@polymer/paper-tooltip": "^3.0.1", + "@polymer/polymer": "^3.4.1", + "@tensorflow/tfjs": "^2.3.0", + "@vaadin/vaadin-grid": "^5.6.6", + "d3": "5.7.0", + "dagre": "^0.8.5", + "lodash": "^4.17.19", + "monaco-editor-core": "^0.20.0", + "monaco-languages": "^1.10.0", + "ngx-color-picker": "^9.0.0", + "numeric": "^1.2.6", + "plottable": "^3.9.0", + "requirejs": "^2.3.6", + "rxjs": "7.0.0-beta.0", + "search-query-parser": "^1.5.5", + "three": "~0.108.0", + "umap-js": "^1.3.2", + "web-animations-js": "^2.3.2", + "zone.js": "^0.10.2", + "terser-webpack-plugin": "^5.3.10", + "webpack": "^5.90.1" + } +} diff --git a/saved_models/tensorboard/pyproject.toml b/saved_models/tensorboard/pyproject.toml new file mode 100644 index 0000000000000000000000000000000000000000..cc5891c6fbac9d58c78c03b9c2dbeaacdeef964c --- /dev/null +++ b/saved_models/tensorboard/pyproject.toml @@ -0,0 +1,5 @@ +[tool.black] +line-length = 80 +# TODO(@wchargin): Drop `py35` here once we drop support for Python 3.5 +# and aren't affected by . +target-version = ["py27", "py35", "py36", "py37", "py38"] diff --git a/saved_models/tensorboard/python_configure.bzl.txt b/saved_models/tensorboard/python_configure.bzl.txt new file mode 100644 index 0000000000000000000000000000000000000000..5f91cd2ebb95bb3df1d997c1776014e00cccd570 --- /dev/null +++ b/saved_models/tensorboard/python_configure.bzl.txt @@ -0,0 +1,313 @@ +"""Repository rule for Python autoconfiguration. + +`python_configure` depends on the following environment variables: + + * `PYTHON_BIN_PATH`: location of python binary. + * `PYTHON_LIB_PATH`: Location of python libraries. +""" + +load( + "//third_party/remote_config:common.bzl", + "BAZEL_SH", + "PYTHON_BIN_PATH", + "PYTHON_LIB_PATH", + "TF_PYTHON_CONFIG_REPO", + "auto_config_fail", + "config_repo_label", + "execute", + "get_bash_bin", + "get_host_environ", + "get_python_bin", + "is_windows", + "raw_exec", + "read_dir", +) + +def _genrule(src_dir, genrule_name, command, outs): + """Returns a string with a genrule. + + Genrule executes the given command and produces the given outputs. + """ + return ( + "genrule(\n" + + ' name = "' + + genrule_name + '",\n' + + " outs = [\n" + + outs + + "\n ],\n" + + ' cmd = """\n' + + command + + '\n """,\n' + + ")\n" + ) + +def _norm_path(path): + """Returns a path with '/' and remove the trailing slash.""" + path = path.replace("\\", "/") + if path[-1] == "/": + path = path[:-1] + return path + +def _symlink_genrule_for_dir( + repository_ctx, + src_dir, + dest_dir, + genrule_name, + src_files = [], + dest_files = []): + """Returns a genrule to symlink(or copy if on Windows) a set of files. + + If src_dir is passed, files will be read from the given directory; otherwise + we assume files are in src_files and dest_files + """ + if src_dir != None: + src_dir = _norm_path(src_dir) + dest_dir = _norm_path(dest_dir) + files = "\n".join(read_dir(repository_ctx, src_dir)) + + # Create a list with the src_dir stripped to use for outputs. + dest_files = files.replace(src_dir, "").splitlines() + src_files = files.splitlines() + command = [] + outs = [] + for i in range(len(dest_files)): + if dest_files[i] != "": + # If we have only one file to link we do not want to use the dest_dir, as + # $(@D) will include the full path to the file. + dest = "$(@D)/" + dest_dir + dest_files[i] if len(dest_files) != 1 else "$(@D)/" + dest_files[i] + + # Copy the headers to create a sandboxable setup. + cmd = "cp -f" + command.append(cmd + ' "%s" "%s"' % (src_files[i], dest)) + outs.append(' "' + dest_dir + dest_files[i] + '",') + genrule = _genrule( + src_dir, + genrule_name, + " && ".join(command), + "\n".join(outs), + ) + return genrule + +def _get_python_lib(repository_ctx, python_bin): + """Gets the python lib path.""" + python_lib = get_host_environ(repository_ctx, PYTHON_LIB_PATH) + if python_lib != None: + return python_lib + + # The interesting program to execute. + print_lib = [ + "from __future__ import print_function", + "import site", + "import os", + "python_paths = []", + "if os.getenv('PYTHONPATH') is not None:", + " python_paths = os.getenv('PYTHONPATH').split(':')", + "try:", + " library_paths = site.getsitepackages()", + "except AttributeError:", + " from distutils.sysconfig import get_python_lib", + " library_paths = [get_python_lib()]", + "all_paths = set(python_paths + library_paths)", + "paths = []", + "for path in all_paths:", + " if os.path.isdir(path):", + " paths.append(path)", + "if len(paths) >=1:", + " print(paths[0])", + ] + + # The below script writes the above program to a file + # and executes it. This is to work around the limitation + # of not being able to upload files as part of execute. + cmd = "from os import linesep;" + cmd += "f = open('script.py', 'w');" + for line in print_lib: + cmd += "f.write(\"%s\" + linesep);" % line + cmd += "f.close();" + cmd += "from os import system;" + cmd += "system(r\"%s script.py\");" % python_bin + + result = execute(repository_ctx, [python_bin, "-c", cmd]) + return result.stdout.strip() + +def _check_python_lib(repository_ctx, python_lib): + """Checks the python lib path.""" + cmd = 'test -d "%s" -a -x "%s"' % (python_lib, python_lib) + result = raw_exec(repository_ctx, [get_bash_bin(repository_ctx), "-c", cmd]) + if result.return_code == 1: + auto_config_fail("Invalid python library path: %s" % python_lib) + +def _check_python_bin(repository_ctx, python_bin): + """Checks the python bin path.""" + cmd = '[[ -x "%s" ]] && [[ ! -d "%s" ]]' % (python_bin, python_bin) + result = raw_exec(repository_ctx, [get_bash_bin(repository_ctx), "-c", cmd]) + if result.return_code == 1: + auto_config_fail("--define %s='%s' is not executable. Is it the python binary?" % ( + PYTHON_BIN_PATH, + python_bin, + )) + +def _get_python_include(repository_ctx, python_bin): + """Gets the python include path.""" + result = execute( + repository_ctx, + [ + python_bin, + "-W ignore", + "-c", + "from __future__ import print_function;" + + "from distutils import sysconfig;" + + "print(sysconfig.get_python_inc())", + ], + error_msg = "Problem getting python include path.", + error_details = ("Is the Python binary path set up right? " + + "(See ./configure or " + PYTHON_BIN_PATH + ".) " + + "Is distutils installed?"), + ) + return result.stdout.splitlines()[0] + +def _get_python_import_lib_name(repository_ctx, python_bin): + """Get Python import library name (pythonXY.lib) on Windows.""" + result = execute( + repository_ctx, + [ + python_bin, + "-c", + "import sys;" + + 'print("python" + str(sys.version_info[0]) + ' + + ' str(sys.version_info[1]) + ".lib")', + ], + error_msg = "Problem getting python import library.", + error_details = ("Is the Python binary path set up right? " + + "(See ./configure or " + PYTHON_BIN_PATH + ".) "), + ) + return result.stdout.splitlines()[0] + +def _get_numpy_include(repository_ctx, python_bin): + """Gets the numpy include path.""" + return execute( + repository_ctx, + [ + python_bin, + "-W ignore", + "-c", + "from __future__ import print_function;" + + "import numpy;" + + " print(numpy.get_include());", + ], + error_msg = "Problem getting numpy include path.", + error_details = "Is numpy installed?", + ).stdout.splitlines()[0] + +def _create_local_python_repository(repository_ctx): + """Creates the repository containing files set up to build with Python.""" + + # Resolve all labels before doing any real work. Resolving causes the + # function to be restarted with all previous state being lost. This + # can easily lead to a O(n^2) runtime in the number of labels. + build_tpl = repository_ctx.path(Label("//third_party/py:BUILD.tpl")) + + python_bin = get_python_bin(repository_ctx) + _check_python_bin(repository_ctx, python_bin) + python_lib = _get_python_lib(repository_ctx, python_bin) + _check_python_lib(repository_ctx, python_lib) + python_include = _get_python_include(repository_ctx, python_bin) + numpy_include = _get_numpy_include(repository_ctx, python_bin) + "/numpy" + python_include_rule = _symlink_genrule_for_dir( + repository_ctx, + python_include, + "python_include", + "python_include", + ) + python_import_lib_genrule = "" + + # To build Python C/C++ extension on Windows, we need to link to python import library pythonXY.lib + # See https://docs.python.org/3/extending/windows.html + if is_windows(repository_ctx): + python_include = _norm_path(python_include) + python_import_lib_name = _get_python_import_lib_name(repository_ctx, python_bin) + python_import_lib_src = python_include.rsplit("/", 1)[0] + "/libs/" + python_import_lib_name + python_import_lib_genrule = _symlink_genrule_for_dir( + repository_ctx, + None, + "", + "python_import_lib", + [python_import_lib_src], + [python_import_lib_name], + ) + numpy_include_rule = _symlink_genrule_for_dir( + repository_ctx, + numpy_include, + "numpy_include/numpy", + "numpy_include", + ) + + platform_constraint = "" + if repository_ctx.attr.platform_constraint: + platform_constraint = "\"%s\"" % repository_ctx.attr.platform_constraint + repository_ctx.template("BUILD", build_tpl, { + "%{PYTHON_BIN_PATH}": python_bin, + "%{PYTHON_INCLUDE_GENRULE}": python_include_rule, + "%{PYTHON_IMPORT_LIB_GENRULE}": python_import_lib_genrule, + "%{NUMPY_INCLUDE_GENRULE}": numpy_include_rule, + "%{PLATFORM_CONSTRAINT}": platform_constraint, + }) + +def _create_remote_python_repository(repository_ctx, remote_config_repo): + """Creates pointers to a remotely configured repo set up to build with Python. + """ + repository_ctx.template("BUILD", config_repo_label(remote_config_repo, ":BUILD"), {}) + +def _python_autoconf_impl(repository_ctx): + """Implementation of the python_autoconf repository rule.""" + if get_host_environ(repository_ctx, TF_PYTHON_CONFIG_REPO) != None: + _create_remote_python_repository( + repository_ctx, + get_host_environ(repository_ctx, TF_PYTHON_CONFIG_REPO), + ) + else: + _create_local_python_repository(repository_ctx) + +_ENVIRONS = [ + BAZEL_SH, + PYTHON_BIN_PATH, + PYTHON_LIB_PATH, +] + +local_python_configure = repository_rule( + implementation = _create_local_python_repository, + environ = _ENVIRONS, + attrs = { + "environ": attr.string_dict(), + "platform_constraint": attr.string(), + }, +) + +remote_python_configure = repository_rule( + implementation = _create_local_python_repository, + environ = _ENVIRONS, + remotable = True, + attrs = { + "environ": attr.string_dict(), + "platform_constraint": attr.string(), + }, +) + +python_configure = repository_rule( + implementation = _python_autoconf_impl, + environ = _ENVIRONS + [TF_PYTHON_CONFIG_REPO], + attrs = { + "platform_constraint": attr.string(), + }, +) +"""Detects and configures the local Python. + +Add the following to your WORKSPACE FILE: + +```python +python_configure(name = "local_config_python") +``` + +Args: + name: A unique name for this workspace rule. +""" diff --git a/saved_models/tensorboard/tensorboard/BUILD b/saved_models/tensorboard/tensorboard/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..633030289f33dad0f77ebdeb0ea75a142a3fd972 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/BUILD @@ -0,0 +1,39 @@ +# Description: +# TensorBoard, a dashboard for investigating TensorFlow + +load("//tensorboard/defs:web.bzl", "tf_web_library") + +package(default_visibility = [":internal"]) + +licenses(["notice"]) + +exports_files(["LICENSE"]) # Needed for internal repo. + +package_group( + name = "internal", + packages = ["//tensorboard/..."], +) + + +# The dependencies needed to initialize the `tensorboard` module itself, +# which are not sufficient to resolve all of its lazy imports. Use only +# if you're intending to link in a proper subset of TensorBoard's public +# API, you're linking in that subset explicitly in your downstream +# target, and you know what you're doing. + + + +tf_web_library( + name = "assets", + srcs = [ + "//tensorboard/webapp:index.html", + "//tensorboard/webapp:index.js", + "//tensorboard/webapp:svg_bundle", + ], + path = "/", + deps = [ + "//tensorboard/plugins/debugger_v2/tf_debugger_v2_plugin/views/source_code/monaco:monaco_editor", + "//tensorboard/plugins/debugger_v2/tf_debugger_v2_plugin/views/source_code/monaco:monaco_languages", + "@com_google_fonts_roboto", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/BUILD b/saved_models/tensorboard/tensorboard/components/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..ee6c4bcec750022266f857b532932578bf66ab91 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/BUILD @@ -0,0 +1,75 @@ +load("//tensorboard/defs:defs.bzl", "tf_js_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "polymer3_ts_lib", + srcs = ["polymer3_lib.ts"], + deps = [ + ":polymer3_interop_helper", + "//tensorboard/plugins/audio/tf_audio_dashboard", + "//tensorboard/plugins/custom_scalar/tf_custom_scalar_dashboard", + "//tensorboard/plugins/distribution/tf_distribution_dashboard", + "//tensorboard/plugins/graph/tf_graph_dashboard", + "//tensorboard/plugins/histogram/tf_histogram_dashboard", + "//tensorboard/plugins/hparams/tf_hparams_dashboard", + "//tensorboard/plugins/image/tf_image_dashboard", + "//tensorboard/plugins/mesh/tf_mesh_dashboard", + "//tensorboard/plugins/pr_curve/tf_pr_curve_dashboard", + "//tensorboard/plugins/profile_redirect/tf_profile_redirect_dashboard", + "//tensorboard/plugins/scalar/tf_scalar_dashboard", + "//tensorboard/plugins/text/tf_text_dashboard", + ], +) + +tf_ts_library( + name = "polymer3_interop_helper", + srcs = ["polymer3_interop_helper.ts"], + deps = [ + "//tensorboard/components/experimental/plugin_util:plugin_host", + "//tensorboard/components/tf_backend", + "//tensorboard/components/tf_color_scale", + "//tensorboard/components/tf_globals", + "//tensorboard/components/tf_markdown_view", + "//tensorboard/components/tf_paginated_view", + "//tensorboard/components/tf_storage", + ], +) + +tf_js_binary( + name = "polymer3_lib_binary_no_shim", + compile = True, + entry_point = ":polymer3_lib.ts", + deps = [":polymer3_ts_lib"], +) + +genrule( + name = "polymer3_lib_binary", + srcs = [ + # Do not sort. order is important. + "@npm//:node_modules/web-animations-js/web-animations-next-lite.min.js", + ":polymer3_lib_binary_no_shim.js", + ], + outs = ["polymer3_lib_binary.js"], + cmd = "for f in $(SRCS); do cat \"$$f\"; echo; done > $@", +) + +tf_ts_library( + name = "analytics", + srcs = [ + "analytics.ts", + ], +) + +tf_ts_library( + name = "security", + srcs = [ + "security.ts", + ], + strict_checks = False, + deps = [ + "@npm//@polymer/polymer", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/analytics.ts b/saved_models/tensorboard/tensorboard/components/analytics.ts new file mode 100644 index 0000000000000000000000000000000000000000..fa2a0a47de22a0c6c24a79ff60d2c292d1e4ea5e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/analytics.ts @@ -0,0 +1,20 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +// TODO(@jart): Give users the ability to opt-in to analytics. +// We fake the global 'ga' object, so the object is a noop. The +// google.analytics typing gives the object a type of UniversalAnalytics.ga. +// We do not track open source users. +(window as any)['ga'] = function () {}; diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/BUILD b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..5281d50319f992d239881e353705b84e11970c68 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/BUILD @@ -0,0 +1,30 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +# TODO(psybuzz): create a NPM package when a better requirement comes up using +# tf_js_binary. +tf_ts_library( + name = "plugin_lib", + srcs = [ + "core.ts", + "index.ts", + "plugin-guest.ts", + "runs.ts", + ], + deps = [ + "//tensorboard/components/experimental/plugin_util:message", + ], +) + +tf_ts_library( + name = "plugin_lib_polymer_interop_internal", + srcs = [ + "polymer-interop.ts", + ], + deps = [ + ":plugin_lib", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/core.ts b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/core.ts new file mode 100644 index 0000000000000000000000000000000000000000..caa50a0118d2a1b8bb76a02d2898652c3598d869 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/core.ts @@ -0,0 +1,25 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {sendMessage} from './plugin-guest'; + +/** + * When called from a plugin with plugin_name `N`, it returns a promise which + * resolves to an object containing values from the URL hash that begin with + * `p.N.` + * @return {!Promise<{Object}>} + */ +export async function getURLPluginData() { + return sendMessage('experimental.GetURLPluginData'); +} diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/index.ts b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..7a7ae1f6dde2ed42b2de37c0f24ccbca1c29c631 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/index.ts @@ -0,0 +1,19 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as _runs from './runs'; +import * as _core from './core'; + +export const core = _core; +export const runs = _runs; diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/plugin-guest.ts b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/plugin-guest.ts new file mode 100644 index 0000000000000000000000000000000000000000..0f5503f28ef710a291f7f0d3396e3af357a98533 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/plugin-guest.ts @@ -0,0 +1,58 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {IPC} from '../plugin_util/message'; + +/** + * This code is part of a public bundle provided to plugin authors, + * and runs within an IFrame to setup communication with TensorBoard's frame. + */ +if (!window.parent) { + // JSComp hates it when the module throws at the body. + setTimeout(() => { + throw Error( + 'The library must run within a TensorBoard iframe-based plugin.' + ); + }); +} + +const channel = new MessageChannel(); +const ipc = new IPC(channel.port1); +channel.port1.start(); + +const VERSION = 'experimental'; +window.parent.postMessage(`${VERSION}.bootstrap`, '*', [channel.port2]); + +// Only export for testability. +export const _guestIPC = ipc; + +/** + * Sends a message to the parent frame. + * @return Promise that resolves with a payload from parent in response to this message. + * + * @example + * const someList = await sendMessage('v1.some.type.parent.understands'); + * // do fun things with someList. + */ +export const sendMessage = _guestIPC.sendMessage.bind(_guestIPC); + +/** + * Subscribes a callback to a message with particular type. + */ +export const listen = _guestIPC.listen.bind(_guestIPC); + +/** + * Unsubscribes a callback to a message. + */ +export const unlisten = _guestIPC.unlisten.bind(_guestIPC); diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/polymer-interop.html b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/polymer-interop.html new file mode 100644 index 0000000000000000000000000000000000000000..ba449e242caa3436b0cfd59a622ea071a9667d7a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/polymer-interop.html @@ -0,0 +1,17 @@ + + diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/polymer-interop.ts b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/polymer-interop.ts new file mode 100644 index 0000000000000000000000000000000000000000..cc650697d414895967905196b8a745a3e649594f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/polymer-interop.ts @@ -0,0 +1,28 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as publicApi from './index'; + +namespace tb_plugin_lib { + export const experimental = publicApi; +} + +declare global { + interface Window { + // Typing is lost after rollup anyways. + tb_plugin_lib: any; + } +} + +window.tb_plugin_lib = tb_plugin_lib; diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/runs.ts b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/runs.ts new file mode 100644 index 0000000000000000000000000000000000000000..3cd4ce7d001c51900dd235518ff05e9b2f062d3d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/runs.ts @@ -0,0 +1,23 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {sendMessage, listen} from './plugin-guest'; + +export async function getRuns() { + return sendMessage('experimental.GetRuns'); +} + +export function setOnRunsChanged(callback: (runs: string[]) => void | void) { + return listen('experimental.RunsChanged', callback); +} diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/test/test.html b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/test/test.html new file mode 100644 index 0000000000000000000000000000000000000000..e52fa435011c8e8b4e4ccd10ead3d18457ceb15f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/test/test.html @@ -0,0 +1,24 @@ + + + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/test/test.ts b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/test/test.ts new file mode 100644 index 0000000000000000000000000000000000000000..da14bd47ab8f457b7434cee7c487a01174813f01 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/test/test.ts @@ -0,0 +1,174 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +async function createIframe(): Promise { + return new Promise((resolve) => { + const iframe = document.createElement('iframe') as HTMLIFrameElement; + document.body.appendChild(iframe); + tb_plugin.host.registerPluginIframe(iframe, 'sample_plugin'); + + iframe.src = './testable-iframe.html?name=sample_plugin'; + iframe.onload = () => resolve(iframe); + }); +} + +describe('plugin lib integration', () => { + const {expect} = chai; + + beforeEach(async function () { + this.sandbox = sinon.sandbox.create({useFakeServer: true}); + this.sandbox.server.respondImmediately = true; + this.iframe = await createIframe(); + this.lib = (this.iframe.contentWindow as any).tb_plugin_lib.experimental; + }); + + afterEach(function () { + document.body.removeChild(this.iframe); + this.sandbox.restore(); + }); + + describe('lib.run', () => { + describe('#getRuns', () => { + it('returns list of runs', async function () { + this.sandbox + .stub(tf_backend.runsStore, 'getRuns') + .returns(['foo', 'bar', 'baz']); + + const runs = await this.lib.runs.getRuns(); + expect(runs).to.deep.equal(['foo', 'bar', 'baz']); + }); + }); + describe('#setOnRunsChanged', () => { + it('lets plugins subscribe to runs change', async function () { + const runsChanged = this.sandbox.stub(); + const promise = new Promise((resolve) => { + this.lib.runs.setOnRunsChanged(resolve); + }).then(runsChanged); + this.sandbox.server.respondWith([ + 200, + {'Content-Type': 'application/json'}, + '["foo", "bar"]', + ]); + + await tf_backend.runsStore.refresh(); + await promise; + + expect(runsChanged).to.have.been.calledOnce; + expect(runsChanged).to.have.been.calledWith(['foo', 'bar']); + }); + it('lets plugins unsubscribe to runs change', async function () { + const runsChanged = this.sandbox.stub(); + const promise = new Promise((resolve) => { + this.lib.runs.setOnRunsChanged(resolve); + }).then(runsChanged); + this.lib.runs.setOnRunsChanged(); + this.sandbox.server.respondWith([ + 200, + {'Content-Type': 'application/json'}, + '["foo", "bar"]', + ]); + + await tf_backend.runsStore.refresh(); + + // Await another message to ensure the iframe processed the next message + // (if any). + await this.lib.runs.getRuns(); + + expect(runsChanged).to.not.have.been.called; + }); + }); + }); + + describe('lib.core', () => { + describe('#getURLPluginData', () => { + /** + * These tests use tf_globals' fake hash to make tf_storage think that the + * host's URL has been updated. + */ + it('returns URL data', async function () { + const hash = [ + 'sample_plugin', + 'p.sample_plugin.foo=bar', + 'p.sample_plugin.foo2=bar2', + ].join('&'); + tf_globals.setFakeHash(hash); + window.dispatchEvent(new Event('hashchange')); + + const data = await this.lib.core.getURLPluginData(); + expect(data).to.deep.equal({ + foo: 'bar', + foo2: 'bar2', + }); + }); + + it('ignores unrelated URL data', async function () { + const hash = [ + 'sample_plugin', + 'tagFilter=loss', + 'p.sample_plugin.foo=bar', + 'p.sample_plugin.foo=bar_from_duplicate', + 'smoothing=0.5', + 'p.sample_plugin.foo2=bar2', + 'p.sample_plugin2.foo=bar', + ].join('&'); + tf_globals.setFakeHash(hash); + window.dispatchEvent(new Event('hashchange')); + + const data = await this.lib.core.getURLPluginData(); + expect(data).to.deep.equal({ + foo: 'bar_from_duplicate', + foo2: 'bar2', + }); + }); + + it('handles incomplete URL data', async function () { + const hash = [ + 'sample_plugin', + 'tagFilter=loss', + 'p.sample_plugin', + 'p.sample_plugin.', + ].join('&'); + tf_globals.setFakeHash(hash); + window.dispatchEvent(new Event('hashchange')); + + const data = await this.lib.core.getURLPluginData(); + expect(data).to.deep.equal({}); + }); + + it('handles non alphanumeric data', async function () { + const hash = [ + 'sample_plugin', + 'p.sample_plugin.foo=bar%20baz', + 'p.sample_plugin.foo2=0.123', + 'p.sample_plugin.foo3=false', + 'p.sample_plugin.foo4=', + 'p.sample_plugin.foo5', + 'p.sample_plugin.foo.with.dots=bar.dotted', + ].join('&'); + tf_globals.setFakeHash(hash); + window.dispatchEvent(new Event('hashchange')); + + const data = await this.lib.core.getURLPluginData(); + expect(data).to.deep.equal({ + foo: 'bar baz', + foo2: '0.123', + foo3: 'false', + foo4: '', + 'foo.with.dots': 'bar.dotted', + }); + }); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/test/testable-iframe.html b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/test/testable-iframe.html new file mode 100644 index 0000000000000000000000000000000000000000..3ff51a435954d69a9e40ca096d9854b14f6759cd --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/test/testable-iframe.html @@ -0,0 +1,23 @@ + + + + diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/test/testable-plugin-lib.ts b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/test/testable-plugin-lib.ts new file mode 100644 index 0000000000000000000000000000000000000000..4d6f292ca1109c08b1455d2cf6f5922decd09748 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_lib/test/testable-plugin-lib.ts @@ -0,0 +1,17 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as plugin_internal from '../plugin-guest'; + +(window as any).plugin_internal = plugin_internal; diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/BUILD b/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..666e3b142e444e5ef5c66bd17dbe12387dabb450 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/BUILD @@ -0,0 +1,38 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "message", + srcs = [ + "message.ts", + ], +) + +tf_ts_library( + name = "host_internals", + srcs = [ + "plugin-host-ipc.ts", + ], + deps = [ + ":message", + ], +) + +tf_ts_library( + name = "plugin_host", + srcs = [ + "core-host-impl.ts", + "plugin-host.ts", + "runs-host-impl.ts", + ], + deps = [ + ":host_internals", + "//tensorboard/components/tf_backend", + "//tensorboard/components/tf_storage", + "@npm//@polymer/decorators", + "@npm//@polymer/polymer", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/core-host-impl.ts b/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/core-host-impl.ts new file mode 100644 index 0000000000000000000000000000000000000000..99fe39692321682b664c235d7f48fb3896d76e17 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/core-host-impl.ts @@ -0,0 +1,37 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * Implements core plugin APIs. + */ +import {listen} from './plugin-host-ipc'; +import {getUrlDict} from '../../tf_storage'; + +listen('experimental.GetURLPluginData', (context) => { + if (!context) { + return; + } + const prefix = `p.${context.pluginName}.`; + const result: { + [key: string]: string; + } = {}; + const urlDict = getUrlDict(); + for (let key in urlDict) { + if (key.startsWith(prefix)) { + const pluginKey = key.substring(prefix.length); + result[pluginKey] = urlDict[key]; + } + } + return result; +}); diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/message.ts b/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/message.ts new file mode 100644 index 0000000000000000000000000000000000000000..e7bf9f551b5bd709fb889fde3cd0d814c68a43ea --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/message.ts @@ -0,0 +1,124 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * This file defines utilities shared by TensorBoard (plugin host) and the + * dynamic plugin library, used by plugin authors. + */ +/** + * [1]: Using string to access property prevents JSCompiler mangling and make the + * property stable across different versions of a bundle. + */ +export type PayloadType = + | null + | undefined + | string + | string[] + | boolean + | boolean[] + | number + | number[] + | object + | object[]; + +export interface Message { + type: string; + id: number; + payload: PayloadType; + error: string | null; + isReply: boolean; +} + +export type MessageType = string; +export type MessageCallback = (payload: any) => any; + +interface PromiseResolver { + resolve: (data: any) => void; + reject: (error: Error) => void; +} + +export class IPC { + private id = 0; + private readonly responseWaits = new Map(); + private readonly listeners = new Map(); + + constructor(private port: MessagePort) { + this.port.addEventListener('message', (event) => this.onMessage(event)); + } + + listen(type: MessageType, callback: MessageCallback) { + this.listeners.set(type, callback); + } + + unlisten(type: MessageType) { + this.listeners.delete(type); + } + + private async onMessage(event: MessageEvent) { + const message = JSON.parse(event.data) as Message; + // Please see [1] for reason why we use string to access the property. + const type = message['type']; + const id = message['id']; + const payload = message['payload']; + const error = message['error']; + const isReply = message['isReply']; + + if (isReply) { + if (!this.responseWaits.has(id)) return; + const {resolve, reject} = this.responseWaits.get(id) as PromiseResolver; + this.responseWaits.delete(id); + if (error) { + reject(new Error(error)); + } else { + resolve(payload); + } + return; + } + + let replyPayload = null; + let replyError = null; + if (this.listeners.has(type)) { + const callback = this.listeners.get(type) as MessageCallback; + try { + const result = await callback(payload); + replyPayload = result; + } catch (e) { + replyError = e; + } + } + + // Please see [1] for reason why we use string to access the property. + const replyMessage: Message = { + ['type']: type, + ['id']: id, + ['payload']: replyPayload, + ['error']: replyError, + ['isReply']: true, + }; + this.postMessage(replyMessage); + } + + private postMessage(message: Message) { + this.port.postMessage(JSON.stringify(message)); + } + + sendMessage(type: MessageType, payload?: PayloadType): Promise { + const id = this.id++; + const message: Message = {type, id, payload, error: null, isReply: false}; + this.postMessage(message); + return new Promise((resolve, reject) => { + this.responseWaits.set(id, {resolve, reject}); + }); + } +} diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/plugin-host-ipc.ts b/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/plugin-host-ipc.ts new file mode 100644 index 0000000000000000000000000000000000000000..cdf784c31ae0816a5b0b61da1bed01185cd8cb22 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/plugin-host-ipc.ts @@ -0,0 +1,129 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {IPC, MessageCallback, MessageType, PayloadType} from './message'; + +/** + * Registers metadata associated with a plugin iframe upon creation. Plugins + * registered with this do not necessarily use IPC. + */ +export function registerPluginIframe( + frame: HTMLIFrameElement, + pluginName: string +) { + pluginMetadata.set(frame, {pluginName}); +} + +const pluginMetadata = new WeakMap(); +export type PluginMetadata = { + pluginName: string; +}; + +/** + * The `context` is only null in the case of a 'removeDom' plugin that gets + * removed after it posts a message, and before the host has responded. + */ +export type PluginHostCallback = ( + context: PluginMetadata | null, + data: any +) => any; + +const portIPCs = new Set(); +const VERSION = 'experimental'; +const listeners = new Map(); + +// TODO(@psybuzz): replace this and the port cleanup logic in broadcast() with +// a MutationObserver to notify us when iframes disconnect. +const ipcToFrame = new Map(); + +// The initial Window-level listener is needed to bootstrap only. +// All further communication is done over MessagePorts. +window.addEventListener('message', (event) => { + if (event.data !== `${VERSION}.bootstrap`) return; + const port = event.ports[0]; + if (!port) return; + const frame = event.source ? (event.source as any).frameElement : null; + if (!frame) return; + onBootstrap(port, frame as HTMLIFrameElement); +}); + +function onBootstrap(port: MessagePort, frame: HTMLIFrameElement) { + const portIPC = new IPC(port); + portIPCs.add(portIPC); + ipcToFrame.set(portIPC, frame); + port.start(); + for (const [type, callback] of listeners) { + const callbackWithContext = wrapCallbackWithContext(callback, portIPC); + portIPC.listen(type, callbackWithContext); + } +} + +/** + * Provides context data from the IPC to the callback. + */ +function wrapCallbackWithContext( + callback: PluginHostCallback, + ipc: IPC +): MessageCallback { + return (payload: PayloadType) => { + const frame = ipcToFrame.get(ipc)!; + const context = pluginMetadata.get(frame) || null; + return callback(context, payload); + }; +} + +/** + * Sends a message to all frames. Individual frames decide whether or not to + * listen. + * @return Promise that resolves with a list of payloads from each plugin's + * response (or null) to the message. + * + * @example + * const someList = await broadcast('v1.some.type.guest.understands'); + * // do fun things with someList. + */ +export function broadcast( + type: MessageType, + payload: PayloadType +): Promise { + for (const ipc of portIPCs) { + if (!ipcToFrame.get(ipc)!.isConnected) { + portIPCs.delete(ipc); + ipcToFrame.delete(ipc); + } + } + const promises = [...portIPCs].map((ipc) => ipc.sendMessage(type, payload)); + return Promise.all(promises); +} + +/** + * Subscribes to messages of a type specified for all frames. + */ +export function listen(type: MessageType, callback: PluginHostCallback) { + listeners.set(type, callback); + for (const ipc of portIPCs) { + const callbackWithContext = wrapCallbackWithContext(callback, ipc); + ipc.listen(type, callbackWithContext); + } +} + +/** + * Unsubscribes to messages of a type specified for all frames. + */ +export function unlisten(type: MessageType) { + listeners.delete(type); + for (const ipc of portIPCs) { + ipc.unlisten(type); + } +} diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/plugin-host.ts b/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/plugin-host.ts new file mode 100644 index 0000000000000000000000000000000000000000..d97a5942b1306e3dd1fe42fdff78f8aaadd4a9e1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/plugin-host.ts @@ -0,0 +1,30 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {PolymerElement, html} from '@polymer/polymer'; +import {customElement} from '@polymer/decorators'; +import {registerPluginIframe} from './plugin-host-ipc'; + +// TODO(psybuzz): we should not rely on side-effects to run when importing +// modules. +import './core-host-impl'; +import './runs-host-impl'; + +// HACK: this Polymer component allows the experimental plugin host APIs +// to be accessible across bundle binary. +@customElement('tf-experimental-plugin-host-lib') +class TfExperimentalPluginHostLib extends PolymerElement { + _template = null; + registerPluginIframe = registerPluginIframe; +} diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/runs-host-impl.ts b/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/runs-host-impl.ts new file mode 100644 index 0000000000000000000000000000000000000000..dee84de3ce122ee9a2472f5df7274fc6e28d5a0a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/runs-host-impl.ts @@ -0,0 +1,27 @@ +/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * Implements run related plugin APIs. + */ +import {broadcast, listen} from './plugin-host-ipc'; +import {runsStore} from '../../tf_backend/tf-backend'; + +listen('experimental.GetRuns', () => { + return runsStore.getRuns(); +}); + +runsStore.addListener(() => { + return broadcast('experimental.RunsChanged', runsStore.getRuns()); +}); diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/test/plugin-test.ts b/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/test/plugin-test.ts new file mode 100644 index 0000000000000000000000000000000000000000..06bebbae21940f3d8c5387cad733a1803eff439c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/test/plugin-test.ts @@ -0,0 +1,231 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +namespace tb_plugin.lib.DO_NOT_USE_INTERNAL { + const {expect} = chai; + const template = document.getElementById( + 'iframe-template' + ) as HTMLTemplateElement; + + describe('plugin-util', () => { + beforeEach(function (done) { + const iframeFrag = document.importNode(template.content, true); + const iframe = iframeFrag.firstElementChild as HTMLIFrameElement; + document.body.appendChild(iframe); + this.guestFrame = iframe; + this.guestWindow = iframe.contentWindow; + // Must wait for the JavaScript to be loaded on the child frame. + this.guestWindow.addEventListener('load', () => done()); + + this.sandbox = sinon.sandbox.create(); + }); + + afterEach(function () { + document.body.removeChild(this.guestFrame); + this.sandbox.restore(); + }); + + it('setUp sanity check', function () { + expect(this.guestWindow.plugin_internal) + .to.have.property('sendMessage') + .that.is.a('function'); + expect(this.guestWindow.plugin_internal) + .to.have.property('listen') + .that.is.a('function'); + expect(this.guestWindow.plugin_internal) + .to.have.property('unlisten') + .that.is.a('function'); + }); + + [ + { + spec: 'host (src) to guest (dest)', + beforeEachFunc: function () { + this.destWindow = this.guestWindow; + this.destListen = this.guestWindow.plugin_internal.listen; + this.destUnlisten = this.guestWindow.plugin_internal.unlisten; + this.destSendMessage = this.guestWindow.plugin_internal.sendMessage; + this.srcSendMessage = (type, payload) => { + return tb_plugin.host + .broadcast(type, payload) + .then(([result]) => result); + }; + }, + }, + { + spec: 'guest (src) to host (dest)', + beforeEachFunc: function () { + this.destWindow = window; + this.destListen = ( + type: lib.DO_NOT_USE_INTERNAL.MessageType, + callback: Function + ) => { + tb_plugin.host.listen(type, (context, data) => { + return callback(data); + }); + }; + this.destUnlisten = tb_plugin.host.unlisten; + this.destSendMessage = ( + type: lib.DO_NOT_USE_INTERNAL.MessageType, + payload: lib.DO_NOT_USE_INTERNAL.PayloadType + ) => { + return tb_plugin.host + .broadcast(type, payload) + .then(([result]) => result); + }; + this.srcSendMessage = this.guestWindow.plugin_internal.sendMessage; + }, + }, + ].forEach(({spec, beforeEachFunc}) => { + describe(spec, () => { + beforeEach(beforeEachFunc); + + beforeEach(function () { + this.onMessage = this.sandbox.stub(); + this.destListen('messageType', this.onMessage); + }); + + it('sends a message to dest', async function () { + await this.srcSendMessage('messageType', 'hello'); + expect(this.onMessage.callCount).to.equal(1); + expect(this.onMessage.firstCall.args).to.deep.equal(['hello']); + }); + + it('sends a message a random payload not by ref', async function () { + const payload = { + foo: 'foo', + bar: { + baz: 'baz', + }, + }; + await this.srcSendMessage('messageType', payload); + expect(this.onMessage.callCount).to.equal(1); + + expect(this.onMessage.firstCall.args[0]).to.not.equal(payload); + expect(this.onMessage.firstCall.args[0]).to.deep.equal(payload); + }); + + it('resolves when dest replies with ack', async function () { + const sendMessageP = this.srcSendMessage('messageType', 'hello'); + + expect(this.onMessage.callCount).to.equal(0); + + await sendMessageP; + expect(this.onMessage.callCount).to.equal(1); + expect(this.onMessage.firstCall.args).to.deep.equal(['hello']); + }); + + it('triggers, on dest, a cb for the matching type', async function () { + const barCb = this.sandbox.stub(); + this.destListen('bar', barCb); + + await this.srcSendMessage('bar', 'soap'); + + expect(this.onMessage.callCount).to.equal(0); + expect(barCb.callCount).to.equal(1); + expect(barCb.firstCall.args).to.deep.equal(['soap']); + }); + + it('supports single listener for a type', async function () { + const barCb1 = this.sandbox.stub(); + const barCb2 = this.sandbox.stub(); + this.destListen('bar', barCb1); + this.destListen('bar', barCb2); + + await this.srcSendMessage('bar', 'soap'); + + expect(barCb1.callCount).to.equal(0); + expect(barCb2.callCount).to.equal(1); + expect(barCb2.firstCall.args).to.deep.equal(['soap']); + }); + + describe('dest message handling', () => { + [ + {specName: 'undefined', payload: null, expectDeep: false}, + {specName: 'null', payload: undefined, expectDeep: false}, + {specName: 'string', payload: 'something', expectDeep: false}, + {specName: 'number', payload: 3.14, expectDeep: false}, + {specName: 'object', payload: {some: 'object'}, expectDeep: true}, + {specName: 'array', payload: ['a', 'b', 'c'], expectDeep: true}, + ].forEach(({specName, payload, expectDeep}) => { + it(specName, async function () { + this.destListen('bar', () => payload); + + const response = await this.srcSendMessage('bar', 'soap'); + + if (expectDeep) { + expect(response).to.deep.equal(payload); + } else { + expect(response).to.equal(payload); + } + }); + }); + }); + + it('unregister a callback with unlisten', async function () { + const barCb = this.sandbox.stub(); + this.destListen('bar', barCb); + await this.srcSendMessage('bar', 'soap'); + expect(barCb.callCount).to.equal(1); + this.destUnlisten('bar'); + + await this.srcSendMessage('bar', 'soap'); + + expect(barCb.callCount).to.equal(1); + }); + + it('ignores foreign postMessages', async function () { + const barCb = this.sandbox.stub(); + this.destListen('bar', barCb); + const fakeMessage: Message = { + type: 'bar', + id: 0, + payload: '', + error: null, + isReply: false, + }; + this.destWindow.postMessage(JSON.stringify(fakeMessage), '*'); + + // Await another message to ensure fake message was handled in dest. + await this.srcSendMessage('not-bar'); + expect(barCb).to.not.have.been.called; + }); + + it('processes messages while waiting for a reponse', async function () { + let resolveLongTask = null; + this.destListen('longTask', () => { + return new Promise((resolve) => { + resolveLongTask = resolve; + }); + }); + + const longTaskStub = this.sandbox.stub(); + const longTaskPromise = this.srcSendMessage('longTask', 'hello').then( + longTaskStub + ); + + await this.srcSendMessage('foo'); + await this.destSendMessage('bar'); + expect(longTaskStub).to.not.have.been.called; + + resolveLongTask('payload'); + const longTaskResult = await longTaskPromise; + expect(longTaskStub).to.have.been.calledOnce; + expect(longTaskStub).to.have.been.calledWith('payload'); + }); + }); + }); + }); +} // namespace tf_plugin.lib.DO_NOT_USE_INTERNAL diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/test/testable-iframe.html b/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/test/testable-iframe.html new file mode 100644 index 0000000000000000000000000000000000000000..55e0bc068ff76fe24a67c075aa97ade31c6142ae --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/test/testable-iframe.html @@ -0,0 +1,17 @@ + + diff --git a/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/test/tests.html b/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/test/tests.html new file mode 100644 index 0000000000000000000000000000000000000000..0b17ac4cbea38e9f0b819c7d7ca573a7b4ee108e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/experimental/plugin_util/test/tests.html @@ -0,0 +1,23 @@ + + + + + + diff --git a/saved_models/tensorboard/tensorboard/components/polymer/BUILD b/saved_models/tensorboard/tensorboard/components/polymer/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..32b1ab96a03434a8fad79c23f67cd74068321360 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/polymer/BUILD @@ -0,0 +1,131 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "dom", + srcs = [ + "dom.ts", + ], + deps = [ + "@npm//@polymer/polymer", + ], +) + +tf_ts_library( + name = "dom-repeat", + srcs = [ + "dom-repeat.ts", + ], + deps = [ + "@npm//@polymer/polymer", + ], +) + +tf_ts_library( + name = "legacy_element_mixin", + srcs = [ + "legacy_element_mixin.ts", + ], + deps = [ + "@npm//@polymer/polymer", + ], +) + +tf_ts_library( + name = "paper_inky_focus_behavior", + srcs = [ + "paper_inky_focus_behavior.ts", + ], + deps = [ + "@npm//@polymer/paper-behaviors", + ], +) + +tf_ts_library( + name = "plottable_style", + srcs = ["plottable-style.ts"], + deps = [":register_style_dom_module"], +) + +genrule( + name = "gen_plottable_style", + srcs = [ + "plottable-style.uninlined.ts", + "@npm//:node_modules/plottable/plottable.css", + ], + outs = ["plottable-style.ts"], + cmd = "$(execpath //tensorboard/tools:inline_file_content) $(SRCS) >'$@'", + exec_tools = ["//tensorboard/tools:inline_file_content"], +) + +tf_ts_library( + name = "register_style_dom_module", + srcs = [ + "register_style_dom_module.ts", + ], + deps = [ + "@npm//@polymer/polymer", + ], +) + +tf_ts_library( + name = "utils_mixin", + srcs = [ + "utils_mixin.ts", + ], + deps = [ + "@npm//@polymer/polymer", + ], +) + +tf_ts_library( + name = "irons_and_papers", + srcs = [ + "irons_and_papers.ts", + ], + deps = [ + "@npm//@polymer/iron-collapse", + "@npm//@polymer/iron-flex-layout", + "@npm//@polymer/iron-icon", + "@npm//@polymer/iron-icons", + "@npm//@polymer/iron-iconset-svg", + "@npm//@polymer/iron-list", + "@npm//@polymer/iron-pages", + "@npm//@polymer/paper-button", + "@npm//@polymer/paper-checkbox", + "@npm//@polymer/paper-dialog", + "@npm//@polymer/paper-dialog-scrollable", + "@npm//@polymer/paper-dropdown-menu", + "@npm//@polymer/paper-header-panel", + "@npm//@polymer/paper-icon-button", + "@npm//@polymer/paper-input", + "@npm//@polymer/paper-item", + "@npm//@polymer/paper-listbox", + "@npm//@polymer/paper-material", + "@npm//@polymer/paper-menu-button", + "@npm//@polymer/paper-progress", + "@npm//@polymer/paper-radio-button", + "@npm//@polymer/paper-radio-group", + "@npm//@polymer/paper-slider", + "@npm//@polymer/paper-spinner", + "@npm//@polymer/paper-styles", + "@npm//@polymer/paper-tabs", + "@npm//@polymer/paper-toast", + "@npm//@polymer/paper-toggle-button", + "@npm//@polymer/paper-toolbar", + "@npm//@polymer/paper-tooltip", + ], +) + +tf_ts_library( + name = "legacy_class", + srcs = [ + "legacy_class.ts", + ], + deps = [ + "@npm//@polymer/polymer", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/polymer/dom-repeat.ts b/saved_models/tensorboard/tensorboard/components/polymer/dom-repeat.ts new file mode 100644 index 0000000000000000000000000000000000000000..53f21caa684fba44ef4bc35c9094340fd06cf18e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/polymer/dom-repeat.ts @@ -0,0 +1,16 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export * from '@polymer/polymer/lib/elements/dom-repeat'; diff --git a/saved_models/tensorboard/tensorboard/components/polymer/dom.ts b/saved_models/tensorboard/tensorboard/components/polymer/dom.ts new file mode 100644 index 0000000000000000000000000000000000000000..7b1ace8b926fd768f63b9aa03c4163c05bacdb8a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/polymer/dom.ts @@ -0,0 +1,16 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export * from '@polymer/polymer/lib/legacy/polymer.dom'; diff --git a/saved_models/tensorboard/tensorboard/components/polymer/irons_and_papers.ts b/saved_models/tensorboard/tensorboard/components/polymer/irons_and_papers.ts new file mode 100644 index 0000000000000000000000000000000000000000..9d2b621d371d49f95b367ca65e64d4cbf717cc12 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/polymer/irons_and_papers.ts @@ -0,0 +1,52 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview Imports all TensorBoard dependencies to paper and iron components. Please + * import this module for dependency on iron and paper components. + */ + +import '@polymer/iron-collapse/iron-collapse'; +import '@polymer/iron-flex-layout/iron-flex-layout-classes'; +import '@polymer/iron-icon'; +import '@polymer/iron-icons/image-icons'; +import '@polymer/iron-icons/iron-icons'; +import '@polymer/iron-iconset-svg'; +import '@polymer/iron-list/iron-list'; +import '@polymer/iron-pages'; +import '@polymer/paper-button'; +import '@polymer/paper-checkbox'; +import '@polymer/paper-dialog-scrollable'; +import '@polymer/paper-dialog'; +import '@polymer/paper-dropdown-menu/paper-dropdown-menu'; +import '@polymer/paper-header-panel'; +import '@polymer/paper-icon-button/paper-icon-button'; +import '@polymer/paper-input/paper-input'; +import '@polymer/paper-input/paper-textarea'; +import '@polymer/paper-item'; +import '@polymer/paper-listbox'; +import '@polymer/paper-material'; +import '@polymer/paper-menu-button'; +import '@polymer/paper-progress'; +import '@polymer/paper-radio-button'; +import '@polymer/paper-radio-group'; +import '@polymer/paper-slider'; +import '@polymer/paper-spinner/paper-spinner-lite'; +import '@polymer/paper-spinner/paper-spinner'; +import '@polymer/paper-styles/paper-styles'; +import '@polymer/paper-tabs'; +import '@polymer/paper-toast'; +import '@polymer/paper-toggle-button'; +import '@polymer/paper-toolbar'; +import '@polymer/paper-tooltip/paper-tooltip'; diff --git a/saved_models/tensorboard/tensorboard/components/polymer/legacy_class.ts b/saved_models/tensorboard/tensorboard/components/polymer/legacy_class.ts new file mode 100644 index 0000000000000000000000000000000000000000..d6739d34d893fe32244a59e83905d3b1a49ce8d0 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/polymer/legacy_class.ts @@ -0,0 +1,16 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the 'License'); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an 'AS IS' BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export * from '@polymer/polymer/lib/legacy/class'; diff --git a/saved_models/tensorboard/tensorboard/components/polymer/legacy_element_mixin.ts b/saved_models/tensorboard/tensorboard/components/polymer/legacy_element_mixin.ts new file mode 100644 index 0000000000000000000000000000000000000000..e0768eac40066592e566d145cb6f9d1ed9054f31 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/polymer/legacy_element_mixin.ts @@ -0,0 +1,16 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export * from '@polymer/polymer/lib/legacy/legacy-element-mixin'; diff --git a/saved_models/tensorboard/tensorboard/components/polymer/paper_inky_focus_behavior.ts b/saved_models/tensorboard/tensorboard/components/polymer/paper_inky_focus_behavior.ts new file mode 100644 index 0000000000000000000000000000000000000000..58c4e9fe07490986183ba5c53c1afe2d2bc74881 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/polymer/paper_inky_focus_behavior.ts @@ -0,0 +1,16 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export * from '@polymer/paper-behaviors/paper-inky-focus-behavior'; diff --git a/saved_models/tensorboard/tensorboard/components/polymer/plottable-style.uninlined.ts b/saved_models/tensorboard/tensorboard/components/polymer/plottable-style.uninlined.ts new file mode 100644 index 0000000000000000000000000000000000000000..996f6b6842645bf5cd6ec8acc62e6b0ad4d901a4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/polymer/plottable-style.uninlined.ts @@ -0,0 +1,23 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {registerStyleDomModule} from './register_style_dom_module'; + +registerStyleDomModule({ + moduleName: 'plottable-style', + styleContent: ` + %plottable.css% +`, +}); diff --git a/saved_models/tensorboard/tensorboard/components/polymer/register_style_dom_module.ts b/saved_models/tensorboard/tensorboard/components/polymer/register_style_dom_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..6f3ee280ec8502bf58ee2977d1d3f253efd39972 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/polymer/register_style_dom_module.ts @@ -0,0 +1,53 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import '@polymer/polymer/lib/elements/dom-module'; + +export interface DomModuleOptions { + moduleName: string; + styleDependencies?: string[]; + styleContent: string; +} + +/** + * Interop for Polymer 3 styling + * + * From https://polymer-library.polymer-project.org/3.0/docs/devguide/style-shadow-dom: + * The following process is a workaround. While Polymer 3.0 does not use + * elements for templating, style modules do. The following process + * is a workaround for this fact. This process may be updated as required. + */ +export function registerStyleDomModule(args: DomModuleOptions): void { + const {moduleName, styleContent} = args; + const domModule = document.createElement('dom-module'); + const template = document.createElement('template'); + + const styleIncludes: HTMLStyleElement[] = []; + if (args.styleDependencies) { + args.styleDependencies.forEach((dep) => { + const style = document.createElement('style'); + style.setAttribute('include', dep); + styleIncludes.push(style); + }); + } + const style = document.createElement('style'); + Object.assign(style, {textContent: styleContent}); + + styleIncludes.forEach((styleElement) => { + template.content.appendChild(styleElement); + }); + template.content.appendChild(style); + domModule.appendChild(template); + (domModule as any).register(moduleName); +} diff --git a/saved_models/tensorboard/tensorboard/components/polymer/utils_mixin.ts b/saved_models/tensorboard/tensorboard/components/polymer/utils_mixin.ts new file mode 100644 index 0000000000000000000000000000000000000000..0206b3f6f3d804f7c7c3ff8925ad8f174b40f45a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/polymer/utils_mixin.ts @@ -0,0 +1,16 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export * from '@polymer/polymer/lib/utils/mixin'; diff --git a/saved_models/tensorboard/tensorboard/components/polymer3_interop_helper.ts b/saved_models/tensorboard/tensorboard/components/polymer3_interop_helper.ts new file mode 100644 index 0000000000000000000000000000000000000000..b57dea45d257bc8e9db631fe80a315be0e15f942 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/polymer3_interop_helper.ts @@ -0,0 +1,24 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +/** + * Exports components necessary for Polymer <-> Angular interop. + */ +import './experimental/plugin_util/plugin-host'; +import './tf_backend/tf-backend-polymer'; +import './tf_globals/globals-polymer'; +import './tf_storage/tf-storage-polymer'; +import './tf_paginated_view/tf-paginated-view-store'; +import './tf_color_scale/tf-color-scale-polymer'; diff --git a/saved_models/tensorboard/tensorboard/components/polymer3_lib.ts b/saved_models/tensorboard/tensorboard/components/polymer3_lib.ts new file mode 100644 index 0000000000000000000000000000000000000000..1c5e04dc559e74400d2059b69970261afce3ab0d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/polymer3_lib.ts @@ -0,0 +1,30 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +// Add dashboards here. +import '../plugins/audio/tf_audio_dashboard/tf-audio-dashboard'; +import '../plugins/custom_scalar/tf_custom_scalar_dashboard/tf-custom-scalar-dashboard'; +import '../plugins/distribution/tf_distribution_dashboard/tf-distribution-dashboard'; +import '../plugins/graph/tf_graph_dashboard/tf-graph-dashboard'; +import '../plugins/histogram/tf_histogram_dashboard/tf-histogram-dashboard'; +import '../plugins/hparams/tf_hparams_dashboard/tf-hparams-dashboard'; +import '../plugins/image/tf_image_dashboard/tf-image-dashboard'; +import '../plugins/mesh/tf_mesh_dashboard/tf-mesh-dashboard'; +import '../plugins/pr_curve/tf_pr_curve_dashboard/tf-pr-curve-dashboard'; +import '../plugins/profile_redirect/tf_profile_redirect_dashboard/tf-profile-redirect-dashboard'; +import '../plugins/scalar/tf_scalar_dashboard/tf-scalar-dashboard'; +import '../plugins/text/tf_text_dashboard/tf-text-dashboard'; + +import './polymer3_interop_helper'; diff --git a/saved_models/tensorboard/tensorboard/components/security.ts b/saved_models/tensorboard/tensorboard/components/security.ts new file mode 100644 index 0000000000000000000000000000000000000000..f37946107343f1c3adf6bd317a2720ac0c39cd2c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/security.ts @@ -0,0 +1,21 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview Security configration for Polymer. Note that this module has + * to be imported the first in a bundle. + */ +import {setStrictTemplatePolicy} from '@polymer/polymer/lib/utils/settings'; + +setStrictTemplatePolicy(true); diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/BUILD b/saved_models/tensorboard/tensorboard/components/tensor_widget/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..baa74f8770fff797793c80d60c0c0df26bf5e51f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/BUILD @@ -0,0 +1,99 @@ +load("@npm_bazel_jasmine//:index.bzl", "jasmine_node_test") +load("//tensorboard/defs:defs.bzl", "tf_js_binary", "tf_ts_library") +load("//tensorboard/defs:web.bzl", "tf_web_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +genrule( + name = "gen_tensor_widget_style", + srcs = [ + "tensor-widget-style.uninlined.ts", + "tensor-widget.css", + ], + outs = ["tensor-widget-style.ts"], + cmd = "$(execpath //tensorboard/tools:inline_file_content) $(SRCS) >'$@'", + exec_tools = ["//tensorboard/tools:inline_file_content"], +) + +tf_web_library( + name = "tensor_widget", + srcs = [ + "tensor-widget.css", + "tensor-widget.html", + ":tensor_widget_binary.js", + ], + path = "/tensor-widget", + deps = [ + ":tensor_widget_binary", + ], +) + +tf_js_binary( + name = "tensor_widget_binary", + srcs = [ + "externs.js", + ], + compile = 1, + entry_point = ":tensor-widget-interop.ts", + deps = [ + ":tensor_widget_binary_lib", + ], +) + +tf_ts_library( + name = "tensor_widget_binary_lib", + srcs = [ + "tensor-widget-interop.ts", + ], + deps = [ + ":tensor_widget_lib", + ], +) + +tf_ts_library( + name = "tensor_widget_lib", + srcs = [ + "colormap.ts", + "dtype-utils.ts", + "health-pill-types.ts", + "menu.ts", + "selection.ts", + "shape-utils.ts", + "slicing-control.ts", + "string-utils.ts", + "tensor-widget.ts", + "tensor-widget-impl.ts", + "tensor-widget-style.ts", + "types.ts", + "version.ts", + ], + deps = ["//tensorboard/components/polymer:register_style_dom_module"], +) + +tf_ts_library( + name = "test_lib", + testonly = True, + srcs = [ + "colormap-test.ts", + "dtype-utils-test.ts", + "selection-test.ts", + "shape-utils-test.ts", + "string-utils-test.ts", + ], + deps = [ + ":tensor_widget_lib", + "@npm//@types/chai", + "@npm//@types/jasmine", + "@npm//chai", + ], +) + +jasmine_node_test( + name = "test", + srcs = [":test_lib"], + deps = [ + "@npm//chai", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/README.md b/saved_models/tensorboard/tensorboard/components/tensor_widget/README.md new file mode 100644 index 0000000000000000000000000000000000000000..0ad4eabd2bfa92e014d2ced6495c81d60377870b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/README.md @@ -0,0 +1,42 @@ +# Tensor Widget + +Tensor Widget is a DOM library for flexible, interactive, and efficient +display of values of tensors, i.e., typed n-dimensional arrays. + +Features + +- The header region displays the dtype, shape and optionally the name of + the tensor. +- The **health pill** section of the header displays succinct summary of the + tensor's element values, e.g., minimum, maxmimum, arithmetic mean, + standard deviation, as well as distribution of the elements among value + types such as zero, finite, infinite and NaN. +- In the main section of the basic UI, the widget displays element values as + a 2D table. Tensors with dimensionality (rank) greater than 2 are sliced in + ways that reduce them to 2D. The detailed slicing is configurable in the UI. +- The API allows for programmatic interaction with the UI, as well as listening + to events in the UI. + +_This component is in early stage of active development._ +_Many of its features are still incomplete._ + +## Developer workflow + +### Running the development server + +1. Make sure you have installed bazel and optionally also + [ibazel](https://github.com/bazelbuild/bazel-watcher#installation) +2. Run in the root folder of tensorboard: + + ```sh + bazel run //tensorboard/components/tensor_widget:dev_server + ``` + + or using ibazel: + + ```sh + ibazel run //tensorboard/components/tensor_widget:dev_server + ``` + + With ibazel, the dev server will track changes to the source files + automatically. diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/colormap-test.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/colormap-test.ts new file mode 100644 index 0000000000000000000000000000000000000000..2b63152c04229058e15687c9419220d11c950b6d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/colormap-test.ts @@ -0,0 +1,141 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +/** Unit tests for colormaps. */ + +import {expect} from 'chai'; + +import {GrayscaleColorMap, JetColorMap} from './colormap'; + +describe('GrayscaleColorMap', () => { + it('max < min causes constructor error', () => { + const min = 3; + const max = 2; + expect(() => new GrayscaleColorMap({min, max})).to.throw(/max.*<.*min/); + }); + + it('NaN or Infinity min or max causes constructor error', () => { + expect(() => new GrayscaleColorMap({min: 0, max: Infinity})).to.throw( + /max.*not finite/ + ); + expect(() => new GrayscaleColorMap({min: 0, max: -Infinity})).to.throw( + /max.*not finite/ + ); + expect(() => new GrayscaleColorMap({min: 0, max: NaN})).to.throw( + /max.*not finite/ + ); + expect(() => new GrayscaleColorMap({min: Infinity, max: 0})).to.throw( + /min.*not finite/ + ); + expect(() => new GrayscaleColorMap({min: -Infinity, max: 0})).to.throw( + /min.*not finite/ + ); + expect(() => new GrayscaleColorMap({min: NaN, max: 0})).to.throw( + /min.*not finite/ + ); + }); + + it('max > min, finite values', () => { + const min = 0; + const max = 10; + const colormap = new GrayscaleColorMap({min, max}); + expect(colormap.getRGB(0)).to.eql([0, 0, 0]); + expect(colormap.getRGB(5)).to.eql([127.5, 127.5, 127.5]); + expect(colormap.getRGB(10)).to.eql([255, 255, 255]); + // Over-limits. + expect(colormap.getRGB(-100)).to.eql([0, 0, 0]); + expect(colormap.getRGB(500)).to.eql([255, 255, 255]); + }); + + it('max > min, non-finite values', () => { + const min = 0; + const max = 10; + const colormap = new GrayscaleColorMap({min, max}); + expect(colormap.getRGB(NaN)).to.eql([255, 0, 0]); + expect(colormap.getRGB(-Infinity)).to.eql([255, 255 / 2, 0]); + expect(colormap.getRGB(Infinity)).to.eql([0, 0, 255]); + }); + + it('max === min, non-finite values', () => { + const min = -3.2; + const max = -3.2; + const colormap = new GrayscaleColorMap({min, max}); + expect(colormap.getRGB(-32)).to.eql([127.5, 127.5, 127.5]); + expect(colormap.getRGB(-3.2)).to.eql([127.5, 127.5, 127.5]); + expect(colormap.getRGB(0)).to.eql([127.5, 127.5, 127.5]); + expect(colormap.getRGB(32)).to.eql([127.5, 127.5, 127.5]); + expect(colormap.getRGB(NaN)).to.eql([255, 0, 0]); + expect(colormap.getRGB(-Infinity)).to.eql([255, 255 / 2, 0]); + expect(colormap.getRGB(Infinity)).to.eql([0, 0, 255]); + }); +}); + +describe('JetColormap', () => { + it('max < min causes constructor error', () => { + const min = 3; + const max = 2; + expect(() => new JetColorMap({min, max})).to.throw(/max.*<.*min/); + }); + + it('NaN or Infinity min or max causes constructor error', () => { + expect(() => new JetColorMap({min: 0, max: Infinity})).to.throw( + /max.*not finite/ + ); + expect(() => new JetColorMap({min: 0, max: -Infinity})).to.throw( + /max.*not finite/ + ); + expect(() => new JetColorMap({min: 0, max: NaN})).to.throw( + /max.*not finite/ + ); + expect(() => new JetColorMap({min: Infinity, max: 0})).to.throw( + /min.*not finite/ + ); + expect(() => new JetColorMap({min: -Infinity, max: 0})).to.throw( + /min.*not finite/ + ); + expect(() => new JetColorMap({min: NaN, max: 0})).to.throw( + /min.*not finite/ + ); + }); + + it('max > min, finite values', () => { + const min = 0; + const max = 10; + const colormap = new JetColorMap({min, max}); + expect(colormap.getRGB(0)).to.eql([0, 0, 255]); + expect(colormap.getRGB(5)).to.eql([127.5, 255, 127.5]); + expect(colormap.getRGB(10)).to.eql([255, 0, 0]); + // Over-limits. + expect(colormap.getRGB(-100)).to.eql([0, 0, 255]); + expect(colormap.getRGB(500)).to.eql([255, 0, 0]); + }); + + it('max > min, non-finite values', () => { + const min = 0; + const max = 10; + const colormap = new JetColorMap({min, max}); + expect(colormap.getRGB(NaN)).to.eql([255 * 0.25, 255 * 0.25, 255 * 0.25]); + expect(colormap.getRGB(-Infinity)).to.eql([ + 255 * 0.5, + 255 * 0.5, + 255 * 0.5, + ]); + expect(colormap.getRGB(Infinity)).to.eql([ + 255 * 0.75, + 255 * 0.75, + 255 * 0.75, + ]); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/colormap.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/colormap.ts new file mode 100644 index 0000000000000000000000000000000000000000..c48705ab6f4cd230419516b0d5054a0ad767f7b2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/colormap.ts @@ -0,0 +1,198 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +/** Colormap used to display numeric values */ + +const MAX_RGB = 255; + +/** Configuration for a colormap. */ +export interface ColorMapConfig { + /** + * Minimum value that the color map can map to without clipping. + * Must be a finite value. + */ + min: number; + + /** + * Minimum value that the color map can map to without clipping. + * Must be a finite value and be `>= min`. + * + * In the case of `max === min`, all finite values mapped to the + * midpoint of the color scale. + */ + max: number; +} + +/** + * Abstract base class for colormap. + * + * A colormap maps a numeric value to an RGB color. + */ +export abstract class ColorMap { + /** + * Constructor of ColorMap. + * @param min Minimum. Must be a finite value. + * @param max Maximum. Must be finite and >= `min`. + */ + constructor(protected config: ColorMapConfig) { + if (!isFinite(config.min)) { + throw new Error(`min value (${config.min}) is not finite`); + } + if (!isFinite(config.max)) { + throw new Error(`max value (${config.max}) is not finite`); + } + if (config.max < config.min) { + throw new Error(`max (${config.max}) is < min (${config.min})`); + } + } + + /** + * Get the RGB value based on element value. + * @param value The element value to be mapped to RGB color value. + * @returns RGB color value represented as a length-3 number array. + * The range of RGB values is [0, 255]. + */ + abstract getRGB(value: number): [number, number, number]; + + /** + * Render the colormap as a horizontal scale, while highlighting a specifc + * value. + * + * The value is highlighted if and only if it is `>= this.config.min` and + * `<= this.config.max`. + * + * @param canvas The canvas on which + * @param value The number to highlight (optional). + */ + render(canvas: HTMLCanvasElement, value?: number) { + if (this.config.min === this.config.max) { + return; + } + const context = canvas.getContext('2d'); + if (context == null) { + return; + } + const steps = 100; + const cellWidth = canvas.width / steps; + const height = canvas.height; + const verticalMargin = 0.2; + const barHeight = height * (1 - 2 * verticalMargin); + for (let i = 0; i < steps; ++i) { + const value = + (this.config.max - this.config.min) * (i / steps) + this.config.min; + const x = cellWidth * i; + const y = height * verticalMargin; + const [r, g, b] = this.getRGB(value); + context.beginPath(); + context.fillStyle = `rgba(${r}, ${g}, ${b}, 1)`; + context.fillRect(x, y, cellWidth, barHeight); + context.stroke(); + } + + if (value != null) { + const tickWidth = 8; + if (value >= this.config.min && value <= this.config.max) { + // Highlight the relative position of `value` along the color scale. + const tickX = + ((value - this.config.min) / (this.config.max - this.config.min)) * + canvas.width; + + // Draw the triangle on the top. + context.beginPath(); + context.fillStyle = 'rgba(0, 0, 0, 1)'; + context.moveTo(tickX, verticalMargin * height); + context.lineTo(tickX - tickWidth / 2, 0); + context.lineTo(tickX + tickWidth / 2, 0); + context.fill(); + + // Draw the triangle on the bottom. + context.beginPath(); + context.moveTo(tickX, (1 - verticalMargin) * height); + context.lineTo(tickX - tickWidth / 2, height); + context.lineTo(tickX + tickWidth / 2, height); + context.fill(); + } + } + } +} + +/** + * A grayscale color map implementation. + */ +export class GrayscaleColorMap extends ColorMap { + getRGB(value: number): [number, number, number] { + // This color scheme for pathological values matches tfdbg v1's Health Pills + // feature. + if (isNaN(value)) { + // NaN. + return [MAX_RGB, 0, 0]; + } else if (!isFinite(value)) { + if (value > 0) { + // +Infinity. + return [0, 0, MAX_RGB]; + } else { + // -Infinity. + return [MAX_RGB, MAX_RGB / 2, 0]; + } + } + let relValue = + this.config.min === this.config.max + ? 0.5 + : (value - this.config.min) / (this.config.max - this.config.min); + relValue = Math.max(Math.min(relValue, 1), 0); + return [MAX_RGB * relValue, MAX_RGB * relValue, MAX_RGB * relValue]; + } +} + +export class JetColorMap extends ColorMap { + getRGB(value: number): [number, number, number] { + if (isNaN(value)) { + // NaN. + return [MAX_RGB * 0.25, MAX_RGB * 0.25, MAX_RGB * 0.25]; + } else if (!isFinite(value)) { + if (value < 0) { + // -Infinity. + return [MAX_RGB * 0.5, MAX_RGB * 0.5, MAX_RGB * 0.5]; + } else { + // +Infinity. + return [MAX_RGB * 0.75, MAX_RGB * 0.75, MAX_RGB * 0.75]; + } + } + + let relR = 0; + let relG = 0; + let relB = 0; + const lim0 = 0.35; + const lim1 = 0.65; + + let relValue = + this.config.min === this.config.max + ? 0.5 + : (value - this.config.min) / (this.config.max - this.config.min); + relValue = Math.max(Math.min(relValue, 1), 0); + if (relValue <= lim0) { + relG = relValue / lim0; + relB = 1; + } else if (relValue > lim0 && relValue <= lim1) { + relR = (relValue - lim0) / (lim1 - lim0); + relG = 1; + relB = (lim1 - relValue) / (lim1 - lim0); + } else if (relValue > lim1) { + relR = 1; + relG = (1 - relValue) / (1 - lim1); + } + return [relR * MAX_RGB, relG * MAX_RGB, relB * MAX_RGB]; + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/dtype-utils-test.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/dtype-utils-test.ts new file mode 100644 index 0000000000000000000000000000000000000000..f77108b48b394520879c8e2e8b81b38a802b6e67 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/dtype-utils-test.ts @@ -0,0 +1,114 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {expect} from 'chai'; + +import { + isBooleanDType, + isFloatDType, + isIntegerDType, + isStringDType, +} from './dtype-utils'; + +describe('isIntegerDType', () => { + it('returns true for unsigned ints', () => { + expect(isIntegerDType('uint02')).to.be.true; + expect(isIntegerDType('uint2')).to.be.true; + expect(isIntegerDType('uint04')).to.be.true; + expect(isIntegerDType('uint4')).to.be.true; + expect(isIntegerDType('uint8')).to.be.true; + expect(isIntegerDType('uint16')).to.be.true; + expect(isIntegerDType('uint64')).to.be.true; + expect(isIntegerDType('uint128')).to.be.true; + }); + + it('returns true for signed ints', () => { + expect(isIntegerDType('int4')).to.be.true; + expect(isIntegerDType('int8')).to.be.true; + expect(isIntegerDType('int16')).to.be.true; + expect(isIntegerDType('int32')).to.be.true; + expect(isIntegerDType('int64')).to.be.true; + expect(isIntegerDType('int128')).to.be.true; + }); + + it('returns false for negative cases', () => { + expect(isIntegerDType('bool')).to.be.false; + expect(isIntegerDType('string')).to.be.false; + expect(isIntegerDType('float32')).to.be.false; + expect(isIntegerDType('complex64')).to.be.false; + expect(isIntegerDType('complex128')).to.be.false; + expect(isIntegerDType('resource')).to.be.false; + expect(isIntegerDType('interrupt')).to.be.false; + }); +}); + +describe('isFloatDType', () => { + it('returns true for floats', () => { + expect(isFloatDType('float32')).to.be.true; + expect(isFloatDType('float64')).to.be.true; + }); + + it('returns true for bfloat types', () => { + expect(isFloatDType('bfloat16')).to.be.true; + }); + + it('returns false for negative cases', () => { + expect(isFloatDType('bool')).to.be.false; + expect(isFloatDType('string')).to.be.false; + expect(isFloatDType('int32')).to.be.false; + expect(isFloatDType('uint32')).to.be.false; + expect(isFloatDType('complex64')).to.be.false; + expect(isFloatDType('complex128')).to.be.false; + expect(isFloatDType('resource')).to.be.false; + }); +}); + +describe('isBooleanDType', () => { + it('returns true for booleans', () => { + expect(isBooleanDType('bool')).to.be.true; + expect(isBooleanDType('boolean')).to.be.true; + expect(isBooleanDType('Boolean')).to.be.true; + }); + + it('returns false for negative cases', () => { + expect(isBooleanDType('string')).to.be.false; + expect(isBooleanDType('int32')).to.be.false; + expect(isBooleanDType('uint32')).to.be.false; + expect(isBooleanDType('float32')).to.be.false; + expect(isBooleanDType('float64')).to.be.false; + expect(isBooleanDType('complex64')).to.be.false; + expect(isBooleanDType('complex128')).to.be.false; + expect(isBooleanDType('resource')).to.be.false; + }); +}); + +describe('isStringDType', () => { + it('returns true for strings', () => { + expect(isStringDType('str')).to.be.true; + expect(isStringDType('string')).to.be.true; + expect(isStringDType('String')).to.be.true; + }); + + it('returns false for negative cases', () => { + expect(isStringDType('bool')).to.be.false; + expect(isStringDType('int32')).to.be.false; + expect(isStringDType('uint32')).to.be.false; + expect(isStringDType('float32')).to.be.false; + expect(isStringDType('float64')).to.be.false; + expect(isStringDType('complex64')).to.be.false; + expect(isStringDType('complex128')).to.be.false; + expect(isStringDType('resource')).to.be.false; + }); +}); diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/dtype-utils.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/dtype-utils.ts new file mode 100644 index 0000000000000000000000000000000000000000..2275e20ef250963de38240d4ad67c4dfdd970db4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/dtype-utils.ts @@ -0,0 +1,47 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +/** + * Determine if a data type is an integer type. + * @param dtype + * @return Whether the dtype is an integer type. + */ +export function isIntegerDType(dtype: string): boolean { + return ( + dtype.match(/^int[0-9]+$/) !== null || dtype.match(/^uint[0-9]+$/) !== null + ); +} + +/** + * Determine if a data type is a float type. + * @param dtype + * @return Whether the dtype is a float type. + */ +export function isFloatDType(dtype: string): boolean { + return ( + dtype.match(/^float[0-9]+$/) !== null || + dtype.match(/^bfloat[0-9]+$/) !== null + ); +} + +/** Determine if a data type is a boolean type. */ +export function isBooleanDType(dtype: string): boolean { + return dtype.toLowerCase() === 'bool' || dtype.toLowerCase() === 'boolean'; +} + +/** Determine if a data type is a string type. */ +export function isStringDType(dtype: string): boolean { + return dtype.toLowerCase() === 'str' || dtype.toLowerCase() === 'string'; +} diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/externs.js b/saved_models/tensorboard/tensorboard/components/tensor_widget/externs.js new file mode 100644 index 0000000000000000000000000000000000000000..f853b165d16a44ffab9e364cab5ea56aa18399f5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/externs.js @@ -0,0 +1,26 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @externs Externs for TensorWidget for interoperability. + */ + +/** @type {!Object} */ +var tensor_widget = {}; + +/** @type {!Function} */ +tensor_widget.tensorWidget; + +/** @type {!string} */ +tensor_widget.VERSION; diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/health-pill-types.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/health-pill-types.ts new file mode 100644 index 0000000000000000000000000000000000000000..390865fa850623af5f352c64bd43543c4fed1712 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/health-pill-types.ts @@ -0,0 +1,43 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +/** + * A summary of a tensor's element values. + * + * It contains information such as + * - the distribution of the tensor's values among different value categories + * such as zero, negative, positive, infinity and NaN. + * - basic summary statistics of the values like arithmetic mean, standard + * deviation, minimum and maximum. + * + * This base health-pill interface is general enough for all tensor + * data types, including boolean, integer, float and string. + */ +export interface BaseTensorNumericSummary { + /** Number of elements in the tensor. */ + elementCount: number; +} + +export interface BooleanOrNumericTensorNumericSummary + extends BaseTensorNumericSummary { + /** Minimum of all finite values. */ + minimum: number | boolean; + + /** Maximum of all finite values. */ + maximum: number | boolean; +} + +// TODO(cais): Add sub-interfaces of `BaseTensorNumericSummary` for other tensor +// dtypes. diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/menu.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/menu.ts new file mode 100644 index 0000000000000000000000000000000000000000..1ed8a19ca436d8e51829bf22c88f5dc8615d7d28 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/menu.ts @@ -0,0 +1,288 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +type EventCallback = (event: Event) => void | Promise; + +/** + * The base interface for a menu item. + */ +export interface MenuItemConfig { + /** Caption displayed on the menu item. */ + caption: string; + + /** + * A function that determines whether menu item is currently enabled. + * + * If not provided, the menu item will always be enabled. + */ + isEnabled?: () => boolean; +} + +/** + * A menu item which when clicked, triggers a single action. + */ +export interface SingleActionMenuItemConfig extends MenuItemConfig { + /** The callback that gets called when the menu item is clicked. */ + callback: EventCallback; +} + +export interface ChoiceMenuItemConfig extends MenuItemConfig { + /** All possible options. */ + options: string[]; + + /** The default selection from `options`, a 0-based index. */ + defaultSelection: number; + + /** + * The callback that gets called when the selection has changed. + * + * The `currentSelection` argument is the 0-based index for the currently + * selected option. + */ + callback: (currentSelection: number) => void | Promise; +} + +export interface MenuConfig { + /** An ordered list of items that comprise the menu. */ + items: MenuItemConfig[]; +} + +/** + * The configuration of an item of a FlatMenu. + */ +interface FlatMenuItemConfig { + /** Caption of the FlatMenu item. */ + caption: string; + + /** The click callback for the item. */ + onClick: EventCallback | null; + + /** The hover callback for the item. */ + onHover: EventCallback | null; + + /** + * Whether the item is disabled. + * + * If not specified, treated as `false` (not disabled). + */ + disabled?: boolean; +} + +/** + * Helper class: A menu item without hierarchy. + * + * A FlatMenu doesn't support hierarchy. The `Menu` class below, which supports + * menus with hierarchy, is built by composing this helper class. + */ +class FlatMenu { + private isShown: boolean = false; + private dropdown: HTMLDivElement; + + // Callback function for clicking outside the menu item. + private blurHideFunction: (() => void) | null = null; + + /** + * Constructor of FlatMenu. + * @param parentElement The parent element that the root UI element of this + * FlatMenu will be appended to as a child. + */ + constructor(parentElement: HTMLDivElement) { + this.dropdown = document.createElement('div'); + this.dropdown.classList.add('tensor-widget-dim-dropdown'); + this.dropdown.style.position = 'fixed'; + this.dropdown.style.display = 'none'; + parentElement.appendChild(this.dropdown); + } + + /** + * Show the FlatMenu item. + * @param top The top coordinate for the FlatMenu. + * @param left The left coordinate for the FlatMenu. + * @param itemConfigs Configuration of the menu items. + */ + show(top: number, left: number, itemConfigs: FlatMenuItemConfig[]) { + itemConfigs.forEach((itemConfig, i) => { + const menuItem = document.createElement('div'); + menuItem.classList.add('tensor-widget-dim-dropdown-menu-item'); + menuItem.textContent = itemConfig.caption; + this.dropdown.appendChild(menuItem); + if (itemConfig.disabled) { + menuItem.classList.add('tensor-widget-dim-dropdown-menu-item-disabled'); + return; + } + menuItem.addEventListener('click', (event) => { + event.stopPropagation(); + this.dropdown.click(); + if (itemConfig.onClick !== null) { + itemConfig.onClick(event); + } + this.hide(); + }); + menuItem.addEventListener('mouseenter', (event) => { + if (itemConfig.onHover !== null) { + itemConfig.onHover(event); + } + menuItem.classList.add('tensor-widget-dim-dropdown-menu-item-active'); + }); + menuItem.addEventListener('mouseleave', () => { + menuItem.classList.remove( + 'tensor-widget-dim-dropdown-menu-item-active' + ); + if (itemConfig.onHover === null) { + return; + } + const childrenToRemove: Element[] = []; + for (let i = 0; i < menuItem.children.length; ++i) { + const child = menuItem.children[i]; + if (child.classList.contains('tensor-widget-dim-dropdown')) { + childrenToRemove.push(child); + } + } + childrenToRemove.forEach((child) => menuItem.removeChild(child)); + }); + }); + this.dropdown.style.display = 'block'; + this.dropdown.style.top = top + 'px'; + this.dropdown.style.left = left + 'px'; + const actualRect = this.dropdown.getBoundingClientRect(); + const topOffset = actualRect.top - top; + const leftOffset = actualRect.left - left; + this.dropdown.style.top = (top - topOffset).toFixed(1) + 'px'; + this.dropdown.style.left = (left - leftOffset).toFixed(1) + 'px'; + this.isShown = true; + + this.blurHideFunction = () => { + this.hide(); + }; + setTimeout( + () => + window.addEventListener('click', this.blurHideFunction as () => void), + 50 + ); + } + + /** Hide this FlatMenu: Remove it from screen display. */ + hide() { + this.dropdown.style.display = 'none'; + while (this.dropdown.firstChild) { + this.dropdown.removeChild(this.dropdown.firstChild); + } + this.isShown = false; + if (this.blurHideFunction != null) { + window.removeEventListener('click', this.blurHideFunction); + } + } + + /** Whether this FlatMenu is being shown currently. */ + shown() { + return this.isShown; + } +} + +/** + * A class for menu that supports configurable items and callbacks. + * + * Hierarchy is supported. + */ +export class Menu { + private baseFlatMenu: FlatMenu; + + // The currently selected indices for all multiple-choice menu items. + private currentChoiceSelections: {[itemIndex: number]: number}; + + /** + * Constructor for the Menu class. + * + * @param config Configuration for the menu. + */ + constructor( + private readonly config: MenuConfig, + private readonly parentElement: HTMLDivElement + ) { + this.baseFlatMenu = new FlatMenu(this.parentElement); + + this.currentChoiceSelections = {}; + this.config.items.forEach((item, i) => { + if ((item as ChoiceMenuItemConfig).options != null) { + this.currentChoiceSelections[ + i + ] = (item as ChoiceMenuItemConfig).defaultSelection; + } + }); + } + + /** + * Show the menu. + * + * @param top The top coordinate for the top-left corner of the menu. + * @param left The left coordinate for the top-left corner of the menu. + */ + show(top: number, left: number) { + const outerItemConfigs: FlatMenuItemConfig[] = []; + + this.config.items.forEach((item, i) => { + const outerItemConfig: FlatMenuItemConfig = { + caption: item.caption, + onClick: null, + onHover: null, + }; + if ((item as ChoiceMenuItemConfig).options != null) { + // This is a multiple choice item. + const currentSelectionIndex = this.currentChoiceSelections[i]; + outerItemConfig.onHover = (event) => { + const parent = event.target as HTMLDivElement; + const choiceConfig = item as ChoiceMenuItemConfig; + const itemConfigs: FlatMenuItemConfig[] = []; + choiceConfig.options.forEach((option, k) => { + itemConfigs.push({ + caption: k === currentSelectionIndex ? option + ' (✓)' : option, + onClick: () => { + if (currentSelectionIndex !== k) { + this.currentChoiceSelections[i] = k; + choiceConfig.callback(k); + } + }, + onHover: null, + }); + }); + const optionsFlatMenu = new FlatMenu(parent); + const box = parent.getBoundingClientRect(); + const top = box.top; + const left = box.right; + optionsFlatMenu.show(top, left, itemConfigs); + }; + } else { + // This is a single-command item. + const singleActionConfig = item as SingleActionMenuItemConfig; + outerItemConfig.onClick = singleActionConfig.callback; + } + if (item.isEnabled != null && !item.isEnabled()) { + outerItemConfig.disabled = true; + } + outerItemConfigs.push(outerItemConfig); + }); + this.baseFlatMenu.show(top, left, outerItemConfigs); + } + + /** Hide the menu: Remove it from display. */ + hide() { + this.baseFlatMenu.hide(); + } + + /** Whether this Menu is being shown currently. */ + shown(): boolean { + return this.baseFlatMenu.shown(); + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/selection-test.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/selection-test.ts new file mode 100644 index 0000000000000000000000000000000000000000..2c8c3413c2f776c76ece048fe4bba6ef38f6e94d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/selection-test.ts @@ -0,0 +1,551 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +/** Unit tests for selection. */ + +import {expect} from 'chai'; + +import {MoveDirection, Shape, TensorViewSlicingSpec, TensorView} from './types'; +import {TensorElementSelection} from './selection'; + +describe('TensorElementSelection', () => { + it('Scalar shape', () => { + const shape: Shape = []; + const slicingSpec: TensorViewSlicingSpec = { + slicingDimsAndIndices: [], + viewingDims: [], + verticalRange: null, + horizontalRange: null, + }; + const selection = new TensorElementSelection( + shape, + slicingSpec, + 0, + 0, + 1, + 1 + ); + expect(selection.getElementStatus([])).to.eql({ + topEdge: true, + bottomEdge: true, + leftEdge: true, + rightEdge: true, + }); + }); + + it('1D shape', () => { + const shape: Shape = [10]; + const slicingSpec: TensorViewSlicingSpec = { + slicingDimsAndIndices: [], + viewingDims: [0], + verticalRange: [0, 5], + horizontalRange: null, + }; + // Vertical viewing ranges is unimportant for selection + // calculation, but are included for completeness. + const selection = new TensorElementSelection( + shape, + slicingSpec, + 0, + 0, + 5, + 1 + ); + expect(selection.getElementStatus([0])).to.eql({ + topEdge: true, + bottomEdge: false, + leftEdge: true, + rightEdge: true, + }); + expect(selection.getElementStatus([1])).to.eql({ + topEdge: false, + bottomEdge: false, + leftEdge: true, + rightEdge: true, + }); + expect(selection.getElementStatus([4])).to.eql({ + topEdge: false, + bottomEdge: true, + leftEdge: true, + rightEdge: true, + }); + expect(selection.getElementStatus([5])).to.eql(null); + expect(selection.getElementStatus([9])).to.eql(null); + }); + + it('2D shape: multiple rows and multiple columns', () => { + const shape = [10, 10]; + const slicingSpec: TensorViewSlicingSpec = { + slicingDimsAndIndices: [], + viewingDims: [0, 1], + verticalRange: [0, 5], + horizontalRange: [0, 5], + }; + // Vertical and horizontal viewing ranges are unimportant for selection + // calculation, but are included for completeness. + const selection = new TensorElementSelection( + shape, + slicingSpec, + 0, + 0, + 3, + 4 + ); + expect(selection.getElementStatus([0, 0])).to.eql({ + topEdge: true, + bottomEdge: false, + leftEdge: true, + rightEdge: false, + }); + expect(selection.getElementStatus([0, 1])).to.eql({ + topEdge: true, + bottomEdge: false, + leftEdge: false, + rightEdge: false, + }); + expect(selection.getElementStatus([1, 0])).to.eql({ + topEdge: false, + bottomEdge: false, + leftEdge: true, + rightEdge: false, + }); + expect(selection.getElementStatus([1, 1])).to.eql({ + topEdge: false, + bottomEdge: false, + leftEdge: false, + rightEdge: false, + }); + expect(selection.getElementStatus([2, 3])).to.eql({ + topEdge: false, + bottomEdge: true, + leftEdge: false, + rightEdge: true, + }); + expect(selection.getElementStatus([1, 3])).to.eql({ + topEdge: false, + bottomEdge: false, + leftEdge: false, + rightEdge: true, + }); + expect(selection.getElementStatus([2, 2])).to.eql({ + topEdge: false, + bottomEdge: true, + leftEdge: false, + rightEdge: false, + }); + expect(selection.getElementStatus([3, 4])).to.eql(null); + expect(selection.getElementStatus([9, 9])).to.eql(null); + }); + + it('2D shape: single row, multiple columns', () => { + const shape: Shape = [10, 10]; + const slicingSpec: TensorViewSlicingSpec = { + slicingDimsAndIndices: [], + viewingDims: [0, 1], + verticalRange: [0, 5], + horizontalRange: [0, 5], + }; + // Vertical and horizontal viewing ranges are unimportant for selection + // calculation, but are included for completeness. + const selection = new TensorElementSelection( + shape, + slicingSpec, + 1, + 0, + 1, + 4 + ); + expect(selection.getElementStatus([0, 0])).to.eql(null); + expect(selection.getElementStatus([1, 0])).to.eql({ + topEdge: true, + bottomEdge: true, + leftEdge: true, + rightEdge: false, + }); + expect(selection.getElementStatus([1, 1])).to.eql({ + topEdge: true, + bottomEdge: true, + leftEdge: false, + rightEdge: false, + }); + expect(selection.getElementStatus([1, 3])).to.eql({ + topEdge: true, + bottomEdge: true, + leftEdge: false, + rightEdge: true, + }); + expect(selection.getElementStatus([2, 0])).to.eql(null); + expect(selection.getElementStatus([2, 1])).to.eql(null); + }); + + it('2D shape: multiple rows, single column', () => { + const shape: Shape = [10, 10]; + const slicingSpec: TensorViewSlicingSpec = { + slicingDimsAndIndices: [], + viewingDims: [0, 1], + verticalRange: [0, 5], + horizontalRange: [0, 5], + }; + // Vertical and horizontal viewing ranges are unimportant for selection + // calculation, but are included for completeness. + const selection = new TensorElementSelection( + shape, + slicingSpec, + 5, + 7, + 3, + 1 + ); + expect(selection.getElementStatus([0, 0])).to.eql(null); + expect(selection.getElementStatus([5, 7])).to.eql({ + topEdge: true, + bottomEdge: false, + leftEdge: true, + rightEdge: true, + }); + expect(selection.getElementStatus([7, 7])).to.eql({ + topEdge: false, + bottomEdge: true, + leftEdge: true, + rightEdge: true, + }); + expect(selection.getElementStatus([8, 7])).to.eql(null); + }); + + it('2D shape: single row, single column', () => { + const shape = [10, 10]; + const slicingSpec: TensorViewSlicingSpec = { + slicingDimsAndIndices: [], + viewingDims: [0, 1], + verticalRange: [0, 5], + horizontalRange: [0, 5], + }; + // Vertical and horizontal viewing ranges are unimportant for selection + // calculation, but are included for completeness. + const selection = new TensorElementSelection( + shape, + slicingSpec, + 5, + 7, + 1, + 1 + ); + expect(selection.getElementStatus([0, 0])).to.eql(null); + expect(selection.getElementStatus([4, 7])).to.eql(null); + expect(selection.getElementStatus([6, 7])).to.eql(null); + expect(selection.getElementStatus([5, 6])).to.eql(null); + expect(selection.getElementStatus([5, 8])).to.eql(null); + expect(selection.getElementStatus([5, 7])).to.eql({ + topEdge: true, + bottomEdge: true, + leftEdge: true, + rightEdge: true, + }); + }); + + it('3D shape: multiple rows, multiple columns', () => { + const shape = [4, 10, 10]; + const slicingSpec: TensorViewSlicingSpec = { + slicingDimsAndIndices: [ + { + dim: 0, + index: 2, + }, + ], + viewingDims: [0, 1], + verticalRange: [0, 5], + horizontalRange: [0, 5], + }; + // Vertical and horizontal viewing ranges are unimportant for selection + // calculation, but are included for completeness. + const selection = new TensorElementSelection( + shape, + slicingSpec, + 5, + 7, + 3, + 2 + ); + expect(selection.getElementStatus([0, 0, 0])).to.eql(null); + expect(selection.getElementStatus([2, 0, 0])).to.eql(null); + expect(selection.getElementStatus([3, 5, 7])).to.eql(null); + expect(selection.getElementStatus([3, 5, 8])).to.eql(null); + expect(selection.getElementStatus([2, 5, 7])).to.eql({ + topEdge: true, + bottomEdge: false, + leftEdge: true, + rightEdge: false, + }); + expect(selection.getElementStatus([2, 5, 8])).to.eql({ + topEdge: true, + bottomEdge: false, + leftEdge: false, + rightEdge: true, + }); + expect(selection.getElementStatus([2, 7, 7])).to.eql({ + topEdge: false, + bottomEdge: true, + leftEdge: true, + rightEdge: false, + }); + expect(selection.getElementStatus([2, 7, 8])).to.eql({ + topEdge: false, + bottomEdge: true, + leftEdge: false, + rightEdge: true, + }); + }); + + it('Zero-sized shape leads to error', () => { + const shape: Shape = [0, 10]; + const slicingSpec: TensorViewSlicingSpec = { + slicingDimsAndIndices: [], + viewingDims: [0, 1], + verticalRange: [0, 0], + horizontalRange: [0, 5], + }; + expect( + () => new TensorElementSelection(shape, slicingSpec, 0, 0, 0, 0) + ).to.throw(/doesn\'t support tensor with zero elements./); + }); +}); + +describe('Moving selection', () => { + it('Scalar moving leads to no-op', () => { + const shape: Shape = []; + const slicingSpec: TensorViewSlicingSpec = { + slicingDimsAndIndices: [], + viewingDims: [], + verticalRange: null, + horizontalRange: null, + }; + const selection = new TensorElementSelection( + shape, + slicingSpec, + 0, + 0, + 1, + 1 + ); + // All movements on a scalar selection leads to no change. + expect(selection.move(MoveDirection.UP, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(0); + expect(selection.getRowCount()).to.equal(1); + expect(selection.getColStart()).to.equal(0); + expect(selection.getColCount()).to.equal(1); + expect(selection.move(MoveDirection.DOWN, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(0); + expect(selection.getRowCount()).to.equal(1); + expect(selection.getColStart()).to.equal(0); + expect(selection.getColCount()).to.equal(1); + expect(selection.move(MoveDirection.LEFT, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(0); + expect(selection.getRowCount()).to.equal(1); + expect(selection.getColStart()).to.equal(0); + expect(selection.getColCount()).to.equal(1); + expect(selection.move(MoveDirection.RIGHT, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(0); + expect(selection.getRowCount()).to.equal(1); + expect(selection.getColStart()).to.equal(0); + expect(selection.getColCount()).to.equal(1); + }); + + it('1D moving', () => { + const shape: Shape = [6]; + const slicingSpec: TensorViewSlicingSpec = { + slicingDimsAndIndices: [], + viewingDims: [0], + verticalRange: [0, 5], + horizontalRange: null, + }; + // Vertical viewing ranges is unimportant for selection + // calculation, but are included for completeness. + const selection = new TensorElementSelection( + shape, + slicingSpec, + 0, + 0, + 5, + 1 + ); + // Null effects from left-right movements. + expect(selection.move(MoveDirection.UP, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(0); + expect(selection.getColStart()).to.equal(0); + expect(selection.move(MoveDirection.LEFT, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(0); + expect(selection.getColStart()).to.equal(0); + expect(selection.move(MoveDirection.RIGHT, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(0); + expect(selection.getColStart()).to.equal(0); + // Effective movements without changing slicing spec. + expect(selection.move(MoveDirection.DOWN, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(1); + expect(selection.move(MoveDirection.DOWN, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(2); + expect(selection.move(MoveDirection.DOWN, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(3); + expect(selection.move(MoveDirection.DOWN, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(4); + // Movement causes updates to slicing spec. + expect(selection.move(MoveDirection.DOWN, slicingSpec)).to.equal( + MoveDirection.DOWN + ); + expect(selection.getRowStart()).to.equal(5); + + // Cannnot move anymore. + expect(selection.move(MoveDirection.DOWN, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(5); + }); + + it('2D moving', () => { + const shape: Shape = [3, 3]; + const slicingSpec: TensorViewSlicingSpec = { + slicingDimsAndIndices: [], + viewingDims: [0, 1], + verticalRange: [0, 2], + horizontalRange: [0, 2], + }; + // Vertical viewing ranges is unimportant for selection + // calculation, but are included for completeness. + const selection = new TensorElementSelection( + shape, + slicingSpec, + 0, + 0, + 1, + 1 + ); + // Null effects from up and left movements. + expect(selection.move(MoveDirection.UP, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(0); + expect(selection.getColStart()).to.equal(0); + expect(selection.move(MoveDirection.LEFT, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(0); + expect(selection.getColStart()).to.equal(0); + // Non-null effect from down movement. + expect(selection.move(MoveDirection.DOWN, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(1); + expect(selection.getColStart()).to.equal(0); + // Non-null effect from right movement. + expect(selection.move(MoveDirection.RIGHT, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(1); + expect(selection.getColStart()).to.equal(1); + // Next down movement should cause a slicinng spec change. + expect(selection.move(MoveDirection.DOWN, slicingSpec)).to.equal( + MoveDirection.DOWN + ); + expect(selection.getRowStart()).to.equal(2); + expect(selection.getColStart()).to.equal(1); + // Next right movement should cause a slicing spec change. + expect(selection.move(MoveDirection.RIGHT, slicingSpec)).to.equal( + MoveDirection.RIGHT + ); + expect(selection.getRowStart()).to.equal(2); + expect(selection.getColStart()).to.equal(2); + // Moving back up. + expect(selection.move(MoveDirection.UP, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(1); + expect(selection.getColStart()).to.equal(2); + }); + + it('2D moving with setSlicingSpec reflects new spec', () => { + const shape: Shape = [3, 3]; + const slicingSpec: TensorViewSlicingSpec = { + slicingDimsAndIndices: [], + viewingDims: [0, 1], + verticalRange: [0, 2], + horizontalRange: [0, 2], + }; + // Vertical viewing ranges is unimportant for selection + // calculation, but are included for completeness. + const selection = new TensorElementSelection( + shape, + slicingSpec, + 1, + 1, + 1, + 1 + ); + + const newSlicingSpec: TensorViewSlicingSpec = { + slicingDimsAndIndices: [], + viewingDims: [0, 1], + verticalRange: [1, 3], + horizontalRange: [1, 3], + }; + // With the new slicing spec set, the downward move should lead to no update + // in the slicing spec, and neither should the rightward move. + expect(selection.move(MoveDirection.DOWN, newSlicingSpec)).to.be.null; + expect(selection.move(MoveDirection.RIGHT, newSlicingSpec)).to.be.null; + }); + + it('3D moving', () => { + const shape: Shape = [2, 3, 3]; + const slicingSpec: TensorViewSlicingSpec = { + slicingDimsAndIndices: [ + { + dim: 0, + index: 1, + }, + ], + viewingDims: [1, 2], + verticalRange: [0, 2], + horizontalRange: [0, 2], + }; + // Vertical viewing ranges is unimportant for selection + // calculation, but are included for completeness. + const selection = new TensorElementSelection( + shape, + slicingSpec, + 0, + 0, + 1, + 1 + ); + // Null effects from up and left movements. + expect(selection.move(MoveDirection.UP, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(0); + expect(selection.getColStart()).to.equal(0); + expect(selection.move(MoveDirection.LEFT, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(0); + expect(selection.getColStart()).to.equal(0); + // Non-null effect from down movement. + expect(selection.move(MoveDirection.DOWN, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(1); + expect(selection.getColStart()).to.equal(0); + // Non-null effect from right movement. + expect(selection.move(MoveDirection.RIGHT, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(1); + expect(selection.getColStart()).to.equal(1); + // Next down movement should cause a slicinng spec change. + expect(selection.move(MoveDirection.DOWN, slicingSpec)).to.equal( + MoveDirection.DOWN + ); + expect(selection.getRowStart()).to.equal(2); + expect(selection.getColStart()).to.equal(1); + // Next right movement should cause a slicing spec change. + expect(selection.move(MoveDirection.RIGHT, slicingSpec)).to.equal( + MoveDirection.RIGHT + ); + expect(selection.getRowStart()).to.equal(2); + expect(selection.getColStart()).to.equal(2); + + // Moving back up. + expect(selection.move(MoveDirection.UP, slicingSpec)).to.be.null; + expect(selection.getRowStart()).to.equal(1); + expect(selection.getColStart()).to.equal(2); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/selection.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/selection.ts new file mode 100644 index 0000000000000000000000000000000000000000..fd1ed013dc75f515a67d0abf6aa5c2a5a078cddc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/selection.ts @@ -0,0 +1,301 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {numElements} from './shape-utils'; +import {MoveDirection, Shape, TensorViewSlicingSpec} from './types'; + +/** + * The possible status of a selected cell. + */ +export interface CellSelectionStatus { + topEdge?: boolean; + bottomEdge?: boolean; + leftEdge?: boolean; + rightEdge?: boolean; +} + +/** + * The selection state within a n-dimensional tensor. + * + * This class keeps track of what element(s) are selected in the + * current viewing dimensions of the tensor. It provides capabilities to: + * - Query whether a given set of indices falls into the selection, and + * - if so, whether it belongs to any of the four edges of selection. + * - When a selection is moved, what the new selection is and + * - if the new selection falls out of the current slicing spec, how the + * slicing spec ought to be updated to accommodate it. + */ +export class TensorElementSelection { + private sliceDims: number[] = []; + private sliceIndices: number[] = []; + private viewDims: number[]; + private rowStart: number; + private colStart: number; + private rowCount: number; + private colCount: number; + private readonly rank: number; + + /** + * Constructor of TensorElementSelection + * @param shape Shape of the tensor in which the viewing and selection is + * taking place. + * @param slicingSpec The current slicing spec for the tensor. + * @param rowStart The starting row of selection, within the indices + * framework of the original tensor (i.e., *not* with respect to the + * slicing spec.) + * @param colStart The starting column of selection, within the indices + * framework of the original tensor (i.e., *not* with respect to the + * slicing spec.) + * @param rowCount How many rows are selected. + * @param colCount How many columns are selected. + */ + constructor( + private readonly shape: Shape, + slicingSpec: TensorViewSlicingSpec, + rowStart?: number, + colStart?: number, + rowCount?: number, + colCount?: number + ) { + if (numElements(this.shape) === 0) { + throw new Error( + `TensorElementSelection doesn't support tensor with zero elements.` + ); + } + + for (let i = 0; i < slicingSpec.slicingDimsAndIndices.length; ++i) { + this.sliceDims.push(slicingSpec.slicingDimsAndIndices[i].dim); + const index = slicingSpec.slicingDimsAndIndices[i].index; + if (index === null) { + throw new Error( + `Failed to create TensorElementSelection due to ` + + `undetermined slicing index at dimension ${i}` + ); + } + this.sliceIndices.push(index); + } + + this.rank = this.shape.length; + + // Sanity check the size of the the slicing dimensions. + if (this.rank > 0 && this.sliceDims.length >= this.rank) { + throw new Error( + `Expected sliceDims to have a length less than rank ${this.rank}, ` + + `but got length ${this.sliceDims.length}` + ); + } + + // Determine the viewing dimensions. + this.viewDims = []; + for (let i = 0; i < this.rank; ++i) { + if (this.sliceDims.indexOf(i) === -1) { + this.viewDims.push(i); + } + } + + if (this.viewDims.length > 2) { + throw new Error(`Only selections in 1D and 2D are supported.`); + } + + this.rowStart = rowStart == null ? 0 : rowStart; + this.colStart = colStart == null ? 0 : colStart; + this.rowCount = rowCount == null ? 1 : rowCount; + this.colCount = colCount == null ? 1 : colCount; + } + + /** + * Compute whether a given set of indices falls into the selection. + * + * ... and if so, whether the set of indices belongs to any of the four + * edges of the selected region. + * + * @param indices + * @return Cell selection status, if the set of indices falls into the + * selection. `null` otherwise. + */ + public getElementStatus(indices: number[]): CellSelectionStatus | null { + if (indices.length !== this.rank) { + throw new Error( + `Expected indices to have a rank of ${this.rank}, ` + + `but got ${indices.length} ([${indices}])` + ); + } + + // First, make sure that the indices belongs to a selected slice. + for (let i = 0; i < indices.length; ++i) { + if (this.sliceDims.indexOf(i) !== -1) { + if (indices[i] !== this.sliceIndices[this.sliceDims.indexOf(i)]) { + return null; + } + } + } + + let status: CellSelectionStatus | null = null; + + const rowEnd = this.rowStart + this.rowCount; + const colEnd = this.colStart + this.colCount; + + // Second, check the viewing dims. + if (this.viewDims.length === 0) { + if (indices.length === 0) { + status = { + topEdge: true, + bottomEdge: true, + leftEdge: true, + rightEdge: true, + }; + } + } else if (this.viewDims.length === 1) { + const rowDim = this.viewDims[0]; + if (indices[rowDim] >= this.rowStart && indices[rowDim] < rowEnd) { + status = { + topEdge: indices[rowDim] === this.rowStart, + bottomEdge: indices[rowDim] === rowEnd - 1, + leftEdge: true, + rightEdge: true, + }; + } + } else if (this.viewDims.length === 2) { + const rowDim = this.viewDims[0]; + const colDim = this.viewDims[1]; + if ( + indices[rowDim] >= this.rowStart && + indices[rowDim] < rowEnd && + indices[colDim] >= this.colStart && + indices[colDim] < colEnd + ) { + status = { + topEdge: indices[rowDim] === this.rowStart, + bottomEdge: indices[rowDim] === rowEnd - 1, + leftEdge: indices[colDim] === this.colStart, + rightEdge: indices[colDim] === colEnd - 1, + }; + } + } else { + throw new Error(`Unexpected length of viewDims: ${this.viewDims}`); + } + return status; + } + + /** + * Move the selection. + * + * Updates the state of the object accordingly. It disallows going off the + * edges. + * + * Moving a multi-element selection always causes the selection to + * collapse to a single element. + * + * @param direction Direction in which this movement is being made. + * @param current slicing spec. + * @return The direction in which the vertical or horizontal viewing range + * of the slicing spec should change. This is just an advisory. + * It is up to the caller to actually update the slicing spec. + */ + public move( + direction: MoveDirection, + slicingSpec: TensorViewSlicingSpec + ): MoveDirection | null { + let slicingMoveDirection: MoveDirection | null = null; + if (this.rank === 0) { + // No-op for a scalar. + return null; + } + if ( + this.rank === 1 && + (direction === MoveDirection.LEFT || direction === MoveDirection.RIGHT) + ) { + // No-op for moving left or right in a 1D tensor. + return null; + } + + if ( + slicingSpec.verticalRange === null || + slicingSpec.verticalRange[1] === null + ) { + throw new Error(`Failed to move due to undetermined vertical range.`); + } + + if (direction === MoveDirection.UP) { + if (this.rowStart > 0) { + this.rowStart--; + if ( + slicingSpec.verticalRange != null && + this.rowStart < slicingSpec.verticalRange[0] + ) { + slicingMoveDirection = MoveDirection.UP; + } + } + } else if (direction === MoveDirection.DOWN) { + if ( + slicingSpec.viewingDims != null && + slicingSpec.viewingDims[0] != null && + this.rowStart < this.shape[slicingSpec.viewingDims[0]] - 1 + ) { + this.rowStart++; + if ( + slicingSpec.verticalRange != null && + this.rowStart >= slicingSpec.verticalRange[1] + ) { + slicingMoveDirection = MoveDirection.DOWN; + } + } + } else if (direction === MoveDirection.LEFT) { + if (this.colStart > 0) { + this.colStart--; + if ( + slicingSpec.horizontalRange != null && + this.colStart < slicingSpec.horizontalRange[0] + ) { + slicingMoveDirection = MoveDirection.LEFT; + } + } + } else if (direction === MoveDirection.RIGHT) { + if ( + slicingSpec.viewingDims != null && + slicingSpec.viewingDims[1] != null && + this.colStart < this.shape[slicingSpec.viewingDims[1]] - 1 + ) { + this.colStart++; + if ( + slicingSpec.horizontalRange != null && + this.colStart >= (slicingSpec.horizontalRange[1] as number) + ) { + slicingMoveDirection = MoveDirection.RIGHT; + } + } + } + // Moving the selection causes the selection size to collapse to 1x1. + this.rowCount = 1; + this.colCount = 1; + return slicingMoveDirection; + } + + public getRowStart(): number { + return this.rowStart; + } + + public getRowCount(): number { + return this.rowCount; + } + + public getColStart(): number { + return this.colStart; + } + + public getColCount(): number { + return this.colCount; + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/shape-utils-test.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/shape-utils-test.ts new file mode 100644 index 0000000000000000000000000000000000000000..5821286be4e9a73fea007c23f6d33a71da1b71c5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/shape-utils-test.ts @@ -0,0 +1,256 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {expect} from 'chai'; + +import { + formatShapeForDisplay, + getDefaultSlicingSpec, + areSlicingSpecsCompatible, + numElements, +} from './shape-utils'; +import {TensorViewSlicingSpec} from './types'; + +describe('size', () => { + it('scalar', () => { + expect(numElements([])).to.equal(1); + }); + + it('1D', () => { + expect(numElements([3])).to.equal(3); + expect(numElements([0])).to.equal(0); + }); + + it('2D', () => { + expect(numElements([3, 4])).to.equal(12); + expect(numElements([3, 0])).to.equal(0); + expect(numElements([0, 3])).to.equal(0); + }); + + it('3D', () => { + expect(numElements([3, 4, 5])).to.equal(60); + expect(numElements([3, 0, 5])).to.equal(0); + expect(numElements([0, 4, 5])).to.equal(0); + }); + + it('4D', () => { + expect(numElements([2, 3, 4, 5])).to.equal(120); + expect(numElements([2, 3, 0, 5])).to.equal(0); + }); +}); + +describe('formatShapeForDisplay', () => { + it('returns string scalar for []', () => { + expect(formatShapeForDisplay([])).to.equal('scalar'); + }); + + it('returns array strings for non-scalar shapes', () => { + expect(formatShapeForDisplay([0])).to.equal('[0]'); + expect(formatShapeForDisplay([12])).to.equal('[12]'); + expect(formatShapeForDisplay([4, 8])).to.equal('[4,8]'); + expect(formatShapeForDisplay([1, 32, 8])).to.equal('[1,32,8]'); + expect(formatShapeForDisplay([8, 32, 32, 128])).to.equal('[8,32,32,128]'); + expect(formatShapeForDisplay([0, 8, 32, 32, 128])).to.equal( + '[0,8,32,32,128]' + ); + }); +}); + +describe('getDefaultSlicingSpec', () => { + it('returns correct result for scalar shape', () => { + expect(getDefaultSlicingSpec([])).to.eql({ + slicingDimsAndIndices: [], + viewingDims: [], + verticalRange: null, + horizontalRange: null, + }); + }); + + it('returns correct result for 1D shape', () => { + expect(getDefaultSlicingSpec([10])).to.eql({ + slicingDimsAndIndices: [], + viewingDims: [0], + verticalRange: null, + horizontalRange: null, + }); + }); + + it('returns correct result for 2D shape', () => { + expect(getDefaultSlicingSpec([4, 5])).to.eql({ + slicingDimsAndIndices: [], + viewingDims: [0, 1], + verticalRange: null, + horizontalRange: null, + }); + }); + + it('returns correct result for 3D shape', () => { + expect(getDefaultSlicingSpec([4, 5, 6])).to.eql({ + slicingDimsAndIndices: [ + { + dim: 0, + index: 0, + }, + ], + viewingDims: [1, 2], + verticalRange: null, + horizontalRange: null, + }); + }); + + it('returns correct result for 4D shape', () => { + expect(getDefaultSlicingSpec([4, 5, 6, 7])).to.eql({ + slicingDimsAndIndices: [ + { + dim: 0, + index: 0, + }, + { + dim: 1, + index: 0, + }, + ], + viewingDims: [2, 3], + verticalRange: null, + horizontalRange: null, + }); + }); + + it('returns correct result for 5D shape', () => { + expect(getDefaultSlicingSpec([4, 5, 6, 7, 8])).to.eql({ + slicingDimsAndIndices: [ + { + dim: 0, + index: 0, + }, + { + dim: 1, + index: 0, + }, + { + dim: 2, + index: 0, + }, + ], + viewingDims: [3, 4], + verticalRange: null, + horizontalRange: null, + }); + }); +}); + +describe('dimensionsDiffer', () => { + it('Different orders in slicing dimensions are ignored', () => { + const spec0: TensorViewSlicingSpec = { + slicingDimsAndIndices: [ + { + dim: 0, + index: 0, + }, + { + dim: 1, + index: 0, + }, + ], + viewingDims: [2, 3], + verticalRange: null, + horizontalRange: null, + }; + const spec1: TensorViewSlicingSpec = { + slicingDimsAndIndices: [ + { + dim: 1, + index: 0, + }, + { + dim: 0, + index: 0, + }, + ], + viewingDims: [2, 3], + verticalRange: null, + horizontalRange: null, + }; + expect(areSlicingSpecsCompatible(spec0, spec1)).to.be.true; + }); + + it('Different slicing indices are ignored', () => { + const spec0: TensorViewSlicingSpec = { + slicingDimsAndIndices: [ + { + dim: 0, + index: 8, + }, + { + dim: 1, + index: 0, + }, + ], + viewingDims: [2, 3], + verticalRange: null, + horizontalRange: null, + }; + const spec1: TensorViewSlicingSpec = { + slicingDimsAndIndices: [ + { + dim: 0, + index: 0, + }, + { + dim: 1, + index: 9, + }, + ], + viewingDims: [2, 3], + verticalRange: null, + horizontalRange: null, + }; + expect(areSlicingSpecsCompatible(spec0, spec1)).to.be.true; + }); + + it('Different slicing and viewing dimensions are captured', () => { + const spec0: TensorViewSlicingSpec = { + slicingDimsAndIndices: [ + { + dim: 0, + index: 0, + }, + { + dim: 3, + index: 0, + }, + ], + viewingDims: [1, 2], + verticalRange: null, + horizontalRange: null, + }; + const spec1: TensorViewSlicingSpec = { + slicingDimsAndIndices: [ + { + dim: 0, + index: 0, + }, + { + dim: 1, + index: 0, + }, + ], + viewingDims: [2, 3], + verticalRange: null, + horizontalRange: null, + }; + expect(areSlicingSpecsCompatible(spec0, spec1)).to.be.false; + }); +}); diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/shape-utils.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/shape-utils.ts new file mode 100644 index 0000000000000000000000000000000000000000..c8fbdf743a5d8a410c79e01d96a9caa5251067e8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/shape-utils.ts @@ -0,0 +1,127 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {Shape, TensorViewSlicingSpec} from './types'; + +/** + * Tensor shape utilities for tensor widget. + */ + +/** Compute total element count based on shape. */ +export function numElements(shape: Shape): number { + let output = 1; + shape.forEach((dimSize) => { + output *= dimSize; + }); + return output; +} + +/** + * Format tensor shape as a string for display. + * + * The special case of empty shape ([]) is formatted as the more human-readable + * name "scalar". + * + * @param shape + * @returns A human-understandable string that describes tensor shape. + */ +export function formatShapeForDisplay(shape: Shape): string { + if (shape.length === 0) { + return 'scalar'; + } else { + return `[${shape}]`; + } +} + +/** + * Get the default slicing spec given a tensor shape. + * + * For an N-dimensional tensor, where N > 2, the first N - 2 dimensions + * are each sliced down to a size of one, while the remaining 2 dimensions + * are used for viewing. + * + * @param shape Shape of the tensor in question. + * @return The default slicing spec. + */ +export function getDefaultSlicingSpec(shape: Shape): TensorViewSlicingSpec { + const slicingSpec: TensorViewSlicingSpec = { + slicingDimsAndIndices: [], + viewingDims: [], + // The vertical and horizontal ranges are left undetermined. They will + // be determined by the widget during rendering. + verticalRange: null, + horizontalRange: null, + }; + + const rank = shape.length; + if (rank === 1) { + // A 1D tensor: no slicing is applied. + slicingSpec.viewingDims = [0]; + } else if (rank > 1) { + // Slicing dimensions. + if (rank > 2) { + // A tensor >2D: slice along the first (rank - 2) dimensions and view + // along the last 2 dimensions. + for (let i = 0; i < rank - 2; ++i) { + slicingSpec.slicingDimsAndIndices.push({ + dim: i, + index: shape[i] === 0 ? null : 0, + }); + } + } + + // Viewing dimensions for tensors 2D or up. + for (let i = shape.length - 2; i < shape.length; ++i) { + slicingSpec.viewingDims.push(i); + } + } + return slicingSpec; +} + +/** + * Check if two slicing specs involve the compatible dimension arrangements. + * + * "Compatible dimension arrangement" means the same dimensions are used + * for viewing and the same dimensions are used for slicing. + * + * Note that the slicing indicies in the slicing dimensions are ignored. + * So are the ordering of the slicing dimensions. + * + * @param spec0 + * @param spec1 + * @return `true` if and only if the slicing dimensions and the viewing + * dimensions are compatible between `spec0` and `spec1`. + */ +export function areSlicingSpecsCompatible( + spec0: TensorViewSlicingSpec, + spec1: TensorViewSlicingSpec +): boolean { + if (spec0.viewingDims[0] !== spec1.viewingDims[0]) { + return false; + } else if (spec0.viewingDims[1] !== spec1.viewingDims[1]) { + return false; + } else { + // Check the slicing dimension. + const slicingDims0 = spec0.slicingDimsAndIndices.map( + (dimAndIndex) => dimAndIndex.dim + ); + slicingDims0.sort(); + const slicingDims1 = spec0.slicingDimsAndIndices.map( + (dimAndIndex) => dimAndIndex.dim + ); + slicingDims1.sort(); + return JSON.stringify(slicingDims0) === JSON.stringify(slicingDims1); + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/slicing-control.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/slicing-control.ts new file mode 100644 index 0000000000000000000000000000000000000000..065eb8a36f68922528372db066815d48cc040f9a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/slicing-control.ts @@ -0,0 +1,406 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {getDefaultSlicingSpec} from './shape-utils'; +import {Shape, TensorViewSlicingSpec} from './types'; + +export type OnSlicingSpecChangeCallback = ( + slicingSpec: TensorViewSlicingSpec +) => void; + +/** + * UI control for + * - selecting which dimensions to slicing down to 1 and which to view + * as a 2D data table. + * - which index to select within each sliced dimension. + * + * Used for tensors with rank (dimensionality) 3 or higher. + */ +export class SlicingControl { + private readonly rank: number; + + // The current slicing spec. + private slicingSpec: TensorViewSlicingSpec; + + // Constituent UI components. + private dimControls: HTMLDivElement[] = []; + // Input elements for selecting the slices in sliced dimensions. + private dimInputs: HTMLInputElement[] = []; + // Displayed commas. + private commas: HTMLDivElement[] = []; + // Dropdown mini-menus to allow swapping a viewed dimension with another + // dimension. + private dropdowns: HTMLDivElement[] = []; + // Static divs that display brackets ("[" and "]") on the two sides. + private readonly bracketDivs: [ + HTMLDivElement | null, + HTMLDivElement | null + ] = [null, null]; + + private dimControlsListenerAttached: boolean[] = []; + + /** + * Constructor of SlicingControl. + * + * @param rootDiv The div element in which all the UI components will be + * rendered. + * @param shape Shape of the tensor. + * @param onSlicingSpecChange User specified callback for slicing spec changes + * triggered by user interactions with this SlicingControl. The callback + * will be invoked for changes in: + * - which dimensions are used for slicing and which for viewing + * - the selected index within a slicing dimension. + */ + constructor( + private readonly rootDiv: HTMLDivElement, + private readonly shape: Shape, + private readonly onSlicingSpecChange: OnSlicingSpecChangeCallback = () => {} + ) { + this.rank = this.shape.length; + if (this.rank < 3) { + throw new Error( + `Dimension control is not applicable to tensor shapes less than ` + + `3D: received ${this.rank}D tensor shape: ` + + `${JSON.stringify(this.shape)}.` + ); + } + this.createComponents(); + this.slicingSpec = getDefaultSlicingSpec(shape); + } + + /** + * Create all UI components of this SlicingControl. + * + * The detailed contents of the components are not filled in. Those are filled + * in when the `render()` method is called. + */ + private createComponents() { + // Clear the dim group. + while (this.rootDiv.firstChild) { + this.rootDiv.removeChild(this.rootDiv.firstChild); + } + this.dimControls = []; + this.dimInputs = []; + this.commas = []; + this.dropdowns = []; + this.dimControlsListenerAttached = []; + + // Create the div elements for the brackets and the dim controls. + this.bracketDivs[0] = document.createElement('div'); + this.bracketDivs[0].textContent = 'Slicing: ['; + this.bracketDivs[0].classList.add('tensor-widget-dim-brackets'); + this.rootDiv.appendChild(this.bracketDivs[0]); + + for (let i = 0; i < this.rank; ++i) { + const dimControl = document.createElement('div'); + dimControl.classList.add('tensor-widget-dim'); + dimControl.title = `Dimension ${i}: size=${this.shape[i]}`; + this.rootDiv.appendChild(dimControl); + this.dimControls.push(dimControl); + + this.dimControlsListenerAttached.push(false); + + const dimInput = document.createElement('input'); + dimInput.classList.add('tensor-widget-dim'); + // The dim input is initially hidden, and will be shown when the + // corresponding dim control is clicked. + dimInput.style.display = 'none'; + this.rootDiv.appendChild(dimInput); + this.dimInputs.push(dimInput); + + if (i < this.rank - 1) { + // Render a comma + const comma = document.createElement('div'); + comma.classList.add('tensor-widget-dim-comma'); + comma.textContent = ','; + this.rootDiv.appendChild(comma); + this.commas.push(comma); + } + + const dropdown = document.createElement('div'); + dropdown.classList.add('tensor-widget-dim-dropdown'); + // The dropdown is initially hidden, and will be shown when the + // corresponding dim control is clicked. + dropdown.style.display = 'none'; + this.rootDiv.appendChild(dropdown); + this.dropdowns.push(dropdown); + } + + this.bracketDivs[1] = document.createElement('div'); + this.bracketDivs[1].textContent = ']'; + this.bracketDivs[1].classList.add('tensor-widget-dim-brackets'); + this.rootDiv.appendChild(this.bracketDivs[1]); + + this.rootDiv.addEventListener('mouseleave', () => { + this.clearAllDropdowns(); + }); + } + + /** + * Re-render the slicing control according to the current slicing spec. + */ + render(slicingSpec?: TensorViewSlicingSpec) { + if (slicingSpec != null) { + this.slicingSpec = JSON.parse(JSON.stringify(slicingSpec)); + } + if (this.slicingSpec === null) { + throw new Error( + 'Slicing control rendering failed due to missing slicing spec.' + ); + } + + const slicingDims = this.slicingSpec.slicingDimsAndIndices.map( + (dimAndIndex) => dimAndIndex.dim + ); + const slicingIndices = this.slicingSpec.slicingDimsAndIndices.map( + (dimAndIndex) => dimAndIndex.index + ); + for (let i = 0; i < this.rank; ++i) { + const dimControl = this.dimControls[i]; + const dimInput = this.dimInputs[i]; + const dropdown = this.dropdowns[i]; + if (dimInput.style.display !== 'none') { + // This dimension is currently being adjusted for slicing index. Skip + // rendering. + continue; + } + + const dimSize = this.shape[i]; + if (slicingDims.indexOf(i) !== -1) { + // This is a dimension being sliced down to a size of 1. + const currentIndex = slicingIndices[slicingDims.indexOf(i)]; + dimControl.textContent = String(currentIndex); + + dimInput.classList.add('tensor-widget-dim'); + dimInput.type = 'number'; + dimInput.min = '0'; + dimInput.max = String(dimSize - 1); + dimInput.value = String(currentIndex); + + // When the dim control is clicked, it becomes a number input. + if (!this.dimControlsListenerAttached[i]) { + dimControl.addEventListener('click', () => { + this.clearAllDropdowns(); + dimControl.style.display = 'none'; + dimInput.style.display = 'inline-block'; + }); + + // Set change callback for the dim input. + dimInput.addEventListener('change', () => { + if (this.slicingSpec === null) { + throw new Error( + 'Slicing control change callback failed due to missing spec.' + ); + } + const newIndex = parseInt(dimInput.value, 10); + if ( + !isFinite(newIndex) || + newIndex < 0 || + newIndex >= dimSize || + Math.floor(dimSize) != dimSize + ) { + // Reject invalid value. + dimInput.value = String( + this.slicingSpec.slicingDimsAndIndices[slicingDims.indexOf(i)] + .index + ); + return; + } + this.slicingSpec.slicingDimsAndIndices[ + slicingDims.indexOf(i) + ].index = newIndex; + dimControl.textContent = String(newIndex); + this.onSlicingSpecChange(this.slicingSpec); + }); + + // When defocusing (blurring) from the dim input, it changes back into + // a static div. + dimInput.addEventListener('blur', () => { + dimInput.style.display = 'none'; + dimControl.style.display = 'inline-block'; + }); + + this.dimControlsListenerAttached[i] = true; + } + } else { + if (this.slicingSpec.viewingDims[0] === i) { + // This is a dimension being viewed as the vertical (rows) dimension. + if (this.slicingSpec.verticalRange === null) { + throw new Error('Missing vertical range.'); + } + dimControl.textContent = + `↕ ${this.slicingSpec.verticalRange[0]}:` + + `${this.slicingSpec.verticalRange[1]}`; + } else { + // This is a dimension being viewed as the horizontal (columns) + // dimension. + if (this.slicingSpec.horizontalRange === null) { + throw new Error('Missing horizontal range.'); + } + dimControl.textContent = + `↔ ${this.slicingSpec.horizontalRange[0]}:` + + `${this.slicingSpec.horizontalRange[1]}`; + } + dimControl.classList.add('tensor-widget-dim'); + if (!this.dimControlsListenerAttached[i]) { + dimControl.addEventListener('click', () => { + const rect = dimControl.getBoundingClientRect(); + const top = rect.bottom; + const left = rect.left; + this.renderDropdownMenuItems(dropdown, top, left, i); + }); + this.dimControlsListenerAttached[i] = true; + } + } + } + } + + /** + * Render items in a viewing dimension's dropdown menu. + * + * The rendering is based on what dimension swappings are possible. + * The dropdown menu will be shown if it is non-empty after the menu items are + * populated. + * + * @param dropdown + * @param top The top coordinate of the menu. + * @param left The left coordinate of the menu. + * @param dim The dimension that the viewing dimension belongs to. E.g., `0` + * for the first dimension. + */ + private renderDropdownMenuItems( + dropdown: HTMLDivElement, + top: number, + left: number, + dim: number + ) { + if (this.slicingSpec === null) { + throw new Error( + 'Slicing control cannot render dropdown menu items due to missing ' + + 'slicing spec.' + ); + } + + // Clear all dropdown menus. Make sure that at any moment, only one dropdown + // menu is open. + this.clearAllDropdowns(); + + const slicingDims = this.slicingSpec.slicingDimsAndIndices.map( + (dimAndIndex) => dimAndIndex.dim + ); + for (let i = 0; i < this.rank; ++i) { + // Create "Swap with" menu items only with slicing dimensions, i.e., not + // with viewing dimensions. + if (slicingDims.indexOf(i) === -1) { + continue; + } + // Also, do not allow the second (columns) viewing dimension to be before + // the first one. + if ( + (dim === this.slicingSpec.viewingDims[1] && + i <= this.slicingSpec.viewingDims[0]) || + (dim == this.slicingSpec.viewingDims[0] && + i >= this.slicingSpec.viewingDims[1]) + ) { + continue; + } + + const menuItem = document.createElement('div'); + menuItem.classList.add('tensor-widget-dim-dropdown-menu-item'); + menuItem.textContent = `Swap with dimension ${i}`; + dropdown.appendChild(menuItem); + menuItem.addEventListener('mouseenter', () => { + menuItem.classList.add('tensor-widget-dim-dropdown-menu-item-active'); + this.dimControls[i].classList.add('tensor-widget-dim-highlighted'); + }); + menuItem.addEventListener('mouseleave', () => { + menuItem.classList.remove( + 'tensor-widget-dim-dropdown-menu-item-active' + ); + this.dimControls[i].classList.remove('tensor-widget-dim-highlighted'); + }); + + const isFirstViewingDim = this.slicingSpec.viewingDims[0] === dim; + menuItem.addEventListener('click', () => { + if (this.slicingSpec === null) { + throw new Error( + 'Dimension swapping failed due to missing slicing spec' + ); + } + const k = slicingDims.indexOf(i); + this.slicingSpec.viewingDims[isFirstViewingDim ? 0 : 1] = i; + this.slicingSpec.slicingDimsAndIndices[k] = { + dim, + index: 0, + }; + this.slicingSpec.verticalRange = null; + this.slicingSpec.horizontalRange = null; + if (this.onSlicingSpecChange) { + this.onSlicingSpecChange(this.slicingSpec); + } + }); + } + + dropdown.addEventListener('mouseleave', () => { + dropdown.style.display = 'none'; + }); + + // Show the dropdown menu if and only if it is non-empty. + if (dropdown.firstChild) { + dropdown.style.position = 'fixed'; + dropdown.style.top = `${top}px`; + dropdown.style.left = `${left}px`; + dropdown.style.display = 'block'; + + // Check the actual position of the dropdown menu and make sure + // that it's actually aligned with the dim control. + // TODO(cais): Investigate for the offset in the Debugger Plugin + // and whether there is a way to avoid the hacky repositioning below. + const actualRect = dropdown.getBoundingClientRect(); + const topOffset = actualRect.top - top; + const leftOffset = actualRect.left - left; + dropdown.style.top = (top - topOffset).toFixed(1) + 'px'; + dropdown.style.left = (left - leftOffset).toFixed(1) + 'px'; + } + } + + /** + * Set the slicing spec externally. + * + * This will trigger a re-rendering of the SlicingControl's UI components, + * which will reflect the input slicing spec's value. + * + * @param slicingSpec The externally-set slicing spec. It will not be mutated + * by SlicingControl. + */ + setSlicingSpec(slicingSpec: TensorViewSlicingSpec) { + this.slicingSpec = JSON.parse(JSON.stringify(slicingSpec)); + if (this.slicingSpec === null) { + throw new Error('Cannot set slicing spec to null.'); + } + this.render(this.slicingSpec); + } + + private clearAllDropdowns() { + this.dropdowns.forEach((dropdown) => { + if (dropdown != null) { + while (dropdown.firstChild) { + dropdown.removeChild(dropdown.firstChild); + } + dropdown.style.display = 'none'; + } + }); + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/string-utils-test.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/string-utils-test.ts new file mode 100644 index 0000000000000000000000000000000000000000..5962cf5e5d11579b52347bb418949483b0868ce8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/string-utils-test.ts @@ -0,0 +1,320 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {expect} from 'chai'; + +import { + booleanValueToDisplayString, + ELLIPSES, + formatTensorName, + numericValueToString, + TENSOR_NAME_LENGTH_CUTOFF, + stringValueToDisplayString, +} from './string-utils'; + +function stringRepeat(str: string, times: number) { + let output = ''; + for (let i = 0; i < times; ++i) { + output += str; + } + return output; +} + +describe('formatTensorName', () => { + it('returns original string for under-limit lengths', () => { + expect(formatTensorName('')).to.equal(''); + expect(formatTensorName('a')).to.equal('a'); + const onLimitName = stringRepeat('A', TENSOR_NAME_LENGTH_CUTOFF); + expect(formatTensorName(onLimitName)).to.equal(onLimitName); + }); + + it('returns string with ellipses for over-limit lengths', () => { + const longName = stringRepeat('A', TENSOR_NAME_LENGTH_CUTOFF + 10); + expect(formatTensorName(longName).length).to.equal( + TENSOR_NAME_LENGTH_CUTOFF + ); + }); + + it('includes ellipses, prefix and suffix', () => { + const longName = stringRepeat('A', TENSOR_NAME_LENGTH_CUTOFF + 10); + const output = formatTensorName(longName); + expect(output.indexOf(ELLIPSES)).to.equal( + Math.floor(TENSOR_NAME_LENGTH_CUTOFF / 2) + ); + expect(output.slice(0, 1)).to.equal('A'); + expect(output.slice(output.length - 1, output.length)).to.equal('A'); + }); +}); + +describe('Constants for formatTensorName', () => { + it('TENSOR_NAME_LENGTH_CUTOFF is long-enough positive integer', () => { + expect(TENSOR_NAME_LENGTH_CUTOFF).to.be.greaterThan(ELLIPSES.length); + expect(Math.floor(TENSOR_NAME_LENGTH_CUTOFF)).to.equal( + Math.floor(TENSOR_NAME_LENGTH_CUTOFF) + ); + }); +}); + +describe('numericValueToString', () => { + it('returns NaN string for NaN', () => { + const isInteger = false; + expect(numericValueToString(NaN, isInteger)).to.equal('NaN'); + const decimalPlaces = 4; + expect(numericValueToString(NaN, isInteger, decimalPlaces)).to.equal('NaN'); + expect( + numericValueToString(NaN, isInteger, decimalPlaces, 'exponential') + ).to.equal('NaN'); + }); + + it('returns unicode infinity for +/- Infinity', () => { + const isInteger = false; + expect(numericValueToString(-Infinity, isInteger)).to.equal('-∞'); + expect(numericValueToString(Infinity, isInteger)).to.equal('+∞'); + const decimalPlaces = 4; + expect(numericValueToString(-Infinity, isInteger, decimalPlaces)).to.equal( + '-∞' + ); + expect(numericValueToString(Infinity, isInteger, decimalPlaces)).to.equal( + '+∞' + ); + expect( + numericValueToString(-Infinity, isInteger, decimalPlaces, 'exponential') + ).to.equal('-∞'); + expect( + numericValueToString(Infinity, isInteger, decimalPlaces, 'exponential') + ).to.equal('+∞'); + }); + + it('float zeros are formatted correctly', () => { + const isInteger = false; + const x = 0; + expect(numericValueToString(x, isInteger)).to.equal('0.00'); + + let decimalPlaces = 0; + expect(numericValueToString(x, isInteger, decimalPlaces)).to.equal('0'); + + decimalPlaces = 1; + expect(numericValueToString(x, isInteger, decimalPlaces)).to.equal('0.0'); + + decimalPlaces = 0; + expect( + numericValueToString(x, isInteger, decimalPlaces, 'exponential') + ).to.equal('0e+0'); + decimalPlaces = 2; + expect( + numericValueToString(x, isInteger, decimalPlaces, 'exponential') + ).to.equal('0.00e+0'); + }); + + it('Large positive float values are formatted correctly', () => { + const isInteger = false; + const x = 12345; + expect(numericValueToString(x, isInteger)).to.equal('1.23e+4'); + + let decimalPlaces = 0; + expect(numericValueToString(x, isInteger, decimalPlaces)).to.equal('1e+4'); + + decimalPlaces = 1; + expect(numericValueToString(x, isInteger, decimalPlaces)).to.equal( + '1.2e+4' + ); + + decimalPlaces = 0; + expect(numericValueToString(x, isInteger, decimalPlaces, 'fixed')).to.equal( + '12345' + ); + decimalPlaces = 2; + expect(numericValueToString(x, isInteger, decimalPlaces, 'fixed')).to.equal( + '12345.00' + ); + }); + + it('Large negative float values are formatted correctly', () => { + const isInteger = false; + const x = -12345; + expect(numericValueToString(x, isInteger)).to.equal('-1.23e+4'); + + let decimalPlaces = 0; + expect(numericValueToString(x, isInteger, decimalPlaces)).to.equal('-1e+4'); + + decimalPlaces = 1; + expect(numericValueToString(x, isInteger, decimalPlaces)).to.equal( + '-1.2e+4' + ); + + decimalPlaces = 0; + expect(numericValueToString(x, isInteger, decimalPlaces, 'fixed')).to.equal( + '-12345' + ); + decimalPlaces = 2; + expect(numericValueToString(x, isInteger, decimalPlaces, 'fixed')).to.equal( + '-12345.00' + ); + }); + + it('Medium magnitude positive float values are formatted correctly', () => { + const isInteger = false; + const x = 42.6; + expect(numericValueToString(x, isInteger)).to.equal('42.60'); + + let decimalPlaces = 0; + expect(numericValueToString(x, isInteger, decimalPlaces)).to.equal('43'); + + decimalPlaces = 1; + expect(numericValueToString(x, isInteger, decimalPlaces)).to.equal('42.6'); + + decimalPlaces = 0; + expect( + numericValueToString(x, isInteger, decimalPlaces, 'exponential') + ).to.equal('4e+1'); + decimalPlaces = 2; + expect( + numericValueToString(x, isInteger, decimalPlaces, 'exponential') + ).to.equal('4.26e+1'); + }); + + it('Medium magnitude negative float values are formatted correctly', () => { + const isInteger = false; + const x = -42.6; + expect(numericValueToString(x, isInteger)).to.equal('-42.60'); + + let decimalPlaces = 0; + expect(numericValueToString(x, isInteger, decimalPlaces)).to.equal('-43'); + + decimalPlaces = 1; + expect(numericValueToString(x, isInteger, decimalPlaces)).to.equal('-42.6'); + + decimalPlaces = 0; + expect( + numericValueToString(x, isInteger, decimalPlaces, 'exponential') + ).to.equal('-4e+1'); + decimalPlaces = 2; + expect( + numericValueToString(x, isInteger, decimalPlaces, 'exponential') + ).to.equal('-4.26e+1'); + }); + + it('Small magnitude positive float values are formatted correctly', () => { + const isInteger = false; + const x = 1.337e-8; + expect(numericValueToString(x, isInteger)).to.equal('1.34e-8'); + + let decimalPlaces = 0; + expect(numericValueToString(x, isInteger, decimalPlaces)).to.equal('1e-8'); + + decimalPlaces = 1; + expect(numericValueToString(x, isInteger, decimalPlaces)).to.equal( + '1.3e-8' + ); + + decimalPlaces = 0; + expect(numericValueToString(x, isInteger, decimalPlaces, 'fixed')).to.equal( + '0' + ); + decimalPlaces = 2; + expect(numericValueToString(x, isInteger, decimalPlaces, 'fixed')).to.equal( + '0.00' + ); + }); + + it('Small magnitude negative float values are formatted correctly', () => { + const isInteger = false; + const x = -1.337e-8; + expect(numericValueToString(x, isInteger)).to.equal('-1.34e-8'); + + let decimalPlaces = 0; + expect(numericValueToString(x, isInteger, decimalPlaces)).to.equal('-1e-8'); + + decimalPlaces = 1; + expect(numericValueToString(x, isInteger, decimalPlaces)).to.equal( + '-1.3e-8' + ); + + decimalPlaces = 0; + expect(numericValueToString(x, isInteger, decimalPlaces, 'fixed')).to.equal( + '-0' + ); + decimalPlaces = 2; + expect(numericValueToString(x, isInteger, decimalPlaces, 'fixed')).to.equal( + '-0.00' + ); + }); + + it('Zero integer is formatted correctly', () => { + const isInteger = true; + expect(numericValueToString(0, isInteger)).to.equal('0'); + }); + + it('Small magnitude positive integers are formatted correctly', () => { + const isInteger = true; + expect(numericValueToString(42, isInteger)).to.equal('42'); + }); + + it('Small magnitude negative integers are formatted correctly', () => { + const isInteger = true; + expect(numericValueToString(-42, isInteger)).to.equal('-42'); + }); + + it('Large magnitude positive integers are formatted correctly', () => { + const isInteger = true; + expect(numericValueToString(12345678, isInteger)).to.equal('1.23e+7'); + }); + + it('Large magnitude negative integers are formatted correctly', () => { + const isInteger = true; + expect(numericValueToString(-12345678, isInteger)).to.equal('-1.23e+7'); + }); +}); + +describe('booleanValueToString', () => { + it('correct return values for boolean arguments', () => { + expect(booleanValueToDisplayString(true)).to.eql('T'); + expect(booleanValueToDisplayString(false)).to.eql('F'); + const shortForm = false; + expect(booleanValueToDisplayString(true, shortForm)).to.eql('True'); + expect(booleanValueToDisplayString(false, shortForm)).to.eql('False'); + }); + + it('correct return values for number arguments', () => { + expect(booleanValueToDisplayString(1)).to.eql('T'); + expect(booleanValueToDisplayString(0)).to.eql('F'); + const shortForm = false; + expect(booleanValueToDisplayString(1, shortForm)).to.eql('True'); + expect(booleanValueToDisplayString(0, shortForm)).to.eql('False'); + }); +}); + +describe('stringValueToString', () => { + it('cutoff with default length limit', () => { + expect(stringValueToDisplayString('')).to.eql(''); + expect(stringValueToDisplayString('ABC')).to.eql('ABC'); + expect(stringValueToDisplayString('ABCDE')).to.eql('ABC…'); + }); + + it('cutoff with custom length limit', () => { + const lengthLimit = 2; + expect(stringValueToDisplayString('', lengthLimit)).to.eql(''); + expect(stringValueToDisplayString('ABC', lengthLimit)).to.eql('A…'); + }); + + it('cutoff with explicitly disabled limit', () => { + expect(stringValueToDisplayString('', null)).to.eql(''); + expect(stringValueToDisplayString('ABC', null)).to.eql('ABC'); + expect(stringValueToDisplayString('ABCDE', null)).to.eql('ABCDE'); + expect(stringValueToDisplayString(stringRepeat('V', 1000), null)).to.eql( + stringRepeat('V', 1000) + ); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/string-utils.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/string-utils.ts new file mode 100644 index 0000000000000000000000000000000000000000..b40d60808b57179f7f4283bba2dcb0482ea72c57 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/string-utils.ts @@ -0,0 +1,120 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +/** + * String utilities for TensorWidget. + */ + +export const TENSOR_NAME_LENGTH_CUTOFF = 20; +export const ELLIPSES = '...'; + +/** + * Format the name of a tensor for display. + * + * If the name is longer than `TENSOR_NAME_LENGTH_CUTOFF`, the middle part + * of it will be replaced with ellipses. + * + * @param tensorName + * @returns Formated tensor name. + */ +export function formatTensorName(tensorName: string): string { + if (tensorName.length <= TENSOR_NAME_LENGTH_CUTOFF) { + return tensorName; + } else { + const leadLength = Math.floor(TENSOR_NAME_LENGTH_CUTOFF / 2); + const tailLength = TENSOR_NAME_LENGTH_CUTOFF - ELLIPSES.length - leadLength; + return ( + tensorName.slice(0, leadLength) + + ELLIPSES + + tensorName.slice(tensorName.length - tailLength, tensorName.length) + ); + } +} + +/** + * Format a numeric value as a human-readable string. + * @param num Numeric value to be formatted. + * @param isInteger Whether the value is of an integer dtype. + * @param decimalPoints How many decimal points to use. + * @returns Formatted string representing the number. + */ +export function numericValueToString( + num: number, + isInteger: boolean, + decimalPoints = 2, + format?: 'fixed' | 'exponential' +): string { + if (isNaN(num)) { + return 'NaN'; + } else if (num === -Infinity) { + return '-∞'; + } else if (num === Infinity) { + return '+∞'; + } else { + if (format == null) { + const absValue = Math.abs(num); + if ((absValue < 1e3 && absValue >= 1e-2) || absValue === 0) { + format = 'fixed'; + } else { + format = 'exponential'; + } + } + if (format == null || format === 'fixed') { + if (isInteger) { + return `${num}`; + } else { + return num.toFixed(decimalPoints); + } + } else { + return num.toExponential(decimalPoints); + } + } +} + +/** + * Format a boolean value as a display-friendly string. + * @param value + * @param shortForm Returns full-length string (i.e., 'true' or 'false') if and + * only if this is `true`. + * @returns Formatted string. + */ +export function booleanValueToDisplayString( + value: boolean | number, + shortForm = true +): string { + // TODO(cais): Color coding display for boolean values (e.g., black/white). + const trueStr = shortForm ? 'T' : 'True'; + const falseStr = shortForm ? 'F' : 'False'; + return value ? trueStr : falseStr; +} + +/** + * Format a string value as a display-friendly string. + * @param value + * @param lengthLimit If and only if not `null`, the length of the returned + * string will be limited to this value, with truncation and ellipses + * appended. + * @return Formatted string. + */ +export function stringValueToDisplayString( + value: string, + lengthLimit: number | null = 4 +) { + if (lengthLimit === null || value.length <= lengthLimit) { + return value; + } else { + return value.slice(0, lengthLimit - 1) + '…'; + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/tensor-widget-impl.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/tensor-widget-impl.ts new file mode 100644 index 0000000000000000000000000000000000000000..34f274e4c7f937e7cf393d72ee227a62f0d906cb --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/tensor-widget-impl.ts @@ -0,0 +1,1282 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import { + isBooleanDType, + isFloatDType, + isIntegerDType, + isStringDType, +} from './dtype-utils'; +import { + ChoiceMenuItemConfig, + Menu, + MenuConfig, + SingleActionMenuItemConfig, +} from './menu'; +import {TensorElementSelection} from './selection'; +import { + formatShapeForDisplay, + getDefaultSlicingSpec, + areSlicingSpecsCompatible, +} from './shape-utils'; +import {SlicingControl} from './slicing-control'; +import { + booleanValueToDisplayString, + formatTensorName, + numericValueToString, + stringValueToDisplayString, +} from './string-utils'; +import { + MoveDirection, + TensorView, + TensorWidget, + TensorWidgetOptions, + TensorViewSlicingSpec, +} from './types'; +import { + BaseTensorNumericSummary, + BooleanOrNumericTensorNumericSummary, +} from './health-pill-types'; +import { + ColorMap, + ColorMapConfig, + GrayscaleColorMap, + JetColorMap, +} from './colormap'; + +const DETAILED_VALUE_ATTR_KEY = 'detailed-value'; + +type ValueClass = 'numeric' | 'boolean' | 'string'; + +enum ValueRenderMode { + TEXT = 1, + IMAGE = 2, +} + +/** + * Implementation of TensorWidget. + */ + +/** Color-map look-up table. */ +const colorMaps: { + [colorMapName: string]: new (config: ColorMapConfig) => ColorMap; +} = { + Grayscale: GrayscaleColorMap, + Jet: JetColorMap, +}; + +/** An implementation of TensorWidget single-tensor view. */ +export class TensorWidgetImpl implements TensorWidget { + private readonly options: TensorWidgetOptions; + protected rank: number; + + // Constituent UI elements. + protected headerSection: HTMLDivElement | null = null; + protected infoSubsection: HTMLDivElement | null = null; + protected menuThumb: HTMLDivElement | null = null; + + protected slicingSpecRoot: HTMLDivElement | null = null; + protected valueSection: HTMLDivElement | null = null; + protected topRuler: HTMLDivElement | null = null; + protected baseRulerTick: HTMLDivElement | null = null; + protected topRulerTicks: HTMLDivElement[] = []; + protected leftRulerTicks: HTMLDivElement[] = []; + protected valueRows: HTMLDivElement[] = []; + protected valueDivs: HTMLDivElement[][] = []; + + protected valueTooltip: HTMLDivElement | null = null; + + // The UI slicing control used by 3D+ tensors. + protected slicingControl: SlicingControl | null = null; + + // Whether the height of the root element is insufficient to display + // all the rows (vertical dimension under currrent slicing) at once. + protected rowsCutoff: boolean = false; + // Whether the height of the root element is insufficient to display + // all the columns rows (horizontal dimension under currrent slicing) at once. + protected colsCutoff: boolean = false; + + // Current slicing specification for the underlying tensor. + protected slicingSpec: TensorViewSlicingSpec; + + // Element selection. + protected selection: TensorElementSelection | null = null; + + // Menu configuration. + protected menuConfig: MenuConfig | null = null; + // Menu object. + private menu: Menu | null = null; + + // Value render mode. + protected valueRenderMode: ValueRenderMode; + + // Name of color map (takes effect on IMAGE value render mode only). + protected colorMapName: string = 'Grayscale'; + protected colorMap: ColorMap | null = null; + + // Whether indices should be rendered on ruler ticks on the top and left. + // Determined dynamically based on the current size of the ticks. + protected showIndicesOnTicks: boolean = false; + + // Size of each cell used to display the tensor value under the 'image' mode. + protected imageCellSize = 16; + protected readonly minImageCellSize = 4; + protected readonly maxImageCellSize = 40; + protected readonly zoomStepRatio = 1.2; + + protected numericSummary: BaseTensorNumericSummary | null = null; + + constructor( + private readonly rootElement: HTMLDivElement, + private readonly tensorView: TensorView, + options?: TensorWidgetOptions + ) { + this.options = options || {}; + this.slicingSpec = getDefaultSlicingSpec(this.tensorView.spec.shape); + this.rank = this.tensorView.spec.shape.length; + this.valueRenderMode = ValueRenderMode.TEXT; + } + + /** + * Render the tensor widget. + * + * This method should be called only once after the instantiation of the + * `TensorWidget` object, unless the value of the underlying tensor, + * as seen through `tensorView` has changed after the last `render()` + * call, in which case it can be called again to update the display by + * the tensor widget. + */ + async render() { + this.rootElement.classList.add('tensor-widget'); + + this.renderHeader(); + if ( + !isIntegerDType(this.tensorView.spec.dtype) && + !isFloatDType(this.tensorView.spec.dtype) && + !isBooleanDType(this.tensorView.spec.dtype) && + !isStringDType(this.tensorView.spec.dtype) + ) { + throw new Error( + `Rendering dtype ${this.tensorView.spec.dtype} is not supported yet.` + ); + } + await this.renderValues(); + } + + /** + * Render the header section of the TensorWidget. + * + * A TensorWidget has two sections, namely the header and the value sections. + * This method is responsible for rendering the former. The latter is rendered + * by `renderValues()`. + * + * The header section itself consists of the following regions: + * - The info subsection, which displays basic information about the tensor, + * including name, dtype and shape. See `renderInfo()`. + * - The health-pill subsection, which displays numeric summary of the tensor's + * elements. See `renderHealthPill()`. + * - The menu. See `createMenu()`. + */ + private renderHeader() { + if (this.headerSection == null) { + this.headerSection = document.createElement('div'); + this.headerSection.classList.add('tensor-widget-header'); + this.rootElement.appendChild(this.headerSection); + this.createMenu(); + } + this.renderInfo(); + // TODO(cais): Implement and call renderHealthPill(). + } + + /** + * Render the info subsection of the header section. + */ + private renderInfo() { + if (this.headerSection === null) { + throw new Error( + 'Rendering tensor info failed due to mising header section' + ); + } + if (this.infoSubsection == null) { + this.infoSubsection = document.createElement('div'); + this.infoSubsection.classList.add('tensor-widget-info'); + this.headerSection.appendChild(this.infoSubsection); + } + + // Clear the info control. + while (this.infoSubsection.firstChild) { + this.infoSubsection.removeChild(this.infoSubsection.firstChild); + } + + this.renderName(); + this.renderDType(); + this.renderShape(); + } + + /** Render the optional name in the info subsection. */ + private renderName() { + if (this.infoSubsection == null) { + throw new Error( + 'Rendering tensor name failed due to missing info subsection.' + ); + } + if (this.options.name == null || this.options.name.length === 0) { + return; + } + const nameDiv = document.createElement('div'); + nameDiv.classList.add('tensor-widget-tensor-name'); + nameDiv.textContent = formatTensorName(this.options.name); + // Add a hover text that shows the full name. + nameDiv.title = this.options.name; + this.infoSubsection.appendChild(nameDiv); + } + + /** Render the dtype in the info subsection. */ + private renderDType() { + if (this.infoSubsection == null) { + throw new Error( + 'Rendering tensor dtype failed due to missing info subsection.' + ); + } + const dTypeControl = document.createElement('div'); + dTypeControl.classList.add('tensor-widget-dtype'); + + const dTypeLabel = document.createElement('span'); + dTypeLabel.classList.add('tensor-widget-dtype-label'); + dTypeLabel.textContent = 'dtype:'; + dTypeControl.appendChild(dTypeLabel); + + const dTypeValue = document.createElement('span'); + dTypeValue.textContent = this.tensorView.spec.dtype; + dTypeControl.appendChild(dTypeValue); + + this.infoSubsection.appendChild(dTypeControl); + } + + /** Render the shape in the info subsection. */ + private renderShape() { + if (this.infoSubsection == null) { + throw new Error( + 'Rendering tensor shape failed due to missing info subsection.' + ); + } + const shapeTagDiv = document.createElement('div'); + shapeTagDiv.classList.add('tensor-widget-shape'); + const shapeTagLabel = document.createElement('div'); + shapeTagLabel.classList.add('tensor-widget-shape-label'); + shapeTagLabel.textContent = `shape:`; + shapeTagDiv.appendChild(shapeTagLabel); + const shapeTagValue = document.createElement('div'); + shapeTagValue.classList.add('tensor-widget-shape-value'); + shapeTagValue.textContent = formatShapeForDisplay( + this.tensorView.spec.shape + ); + shapeTagDiv.appendChild(shapeTagValue); + this.infoSubsection.appendChild(shapeTagDiv); + } + + private createMenu() { + this.menuConfig = {items: []}; + if ( + isFloatDType(this.tensorView.spec.dtype) || + isIntegerDType(this.tensorView.spec.dtype) || + isBooleanDType(this.tensorView.spec.dtype) + ) { + this.menuConfig.items.push({ + caption: 'Select display mode...', + options: ['Text', 'Image'], + defaultSelection: 0, + callback: (currentMode: number) => { + if (currentMode === 0) { + this.valueRenderMode = ValueRenderMode.TEXT; + this.renderValues(); + } else { + this.valueRenderMode = ValueRenderMode.IMAGE; + this.tensorView.getNumericSummary().then((numericSummary) => { + this.numericSummary = numericSummary; + this.renderValues(); + }); + } + }, + } as ChoiceMenuItemConfig); + + this.menuConfig.items.push({ + caption: 'Select color map...', + options: Object.keys(colorMaps), + defaultSelection: 0, + callback: (currentMode: number) => { + this.colorMapName = Object.keys(colorMaps)[currentMode]; + this.renderValues(); + }, + isEnabled: () => this.valueRenderMode === ValueRenderMode.IMAGE, + } as ChoiceMenuItemConfig); + + this.menuConfig.items.push({ + caption: 'Zoom in (Image mode)', + callback: () => { + this.zoomInOneStepAndRenderValues(); + }, + isEnabled: () => this.valueRenderMode === ValueRenderMode.IMAGE, + } as SingleActionMenuItemConfig); + this.menuConfig.items.push({ + caption: 'Zoom out (Image mode)', + callback: () => { + this.zoomOutOneStepAndRenderValues(); + }, + isEnabled: () => this.valueRenderMode === ValueRenderMode.IMAGE, + } as SingleActionMenuItemConfig); + } + if (this.menuConfig !== null && this.menuConfig.items.length > 0) { + this.menu = new Menu( + this.menuConfig, + this.headerSection as HTMLDivElement + ); + this.renderMenuThumb(); + } + } + + private zoomInOneStepAndRenderValues() { + if (this.imageCellSize * this.zoomStepRatio <= this.maxImageCellSize) { + this.imageCellSize *= this.zoomStepRatio; + this.renderValues(); + } + } + + private zoomOutOneStepAndRenderValues() { + if (this.imageCellSize / this.zoomStepRatio >= this.minImageCellSize) { + this.imageCellSize /= this.zoomStepRatio; + this.renderValues(); + } + } + + /** Render the thumb that when clicked, toggles the menu display state. */ + private renderMenuThumb() { + if (this.headerSection == null) { + throw new Error( + 'Rendering menu thumb failed due to missing header section.' + ); + } + this.menuThumb = document.createElement('div'); + this.menuThumb.textContent = '⋮'; + this.menuThumb.classList.add('tensor-widget-menu-thumb'); + this.headerSection.appendChild(this.menuThumb); + + // let menuShown = false; // TODO(cais): Make a class member? + this.menuThumb.addEventListener('click', () => { + if (this.menu === null) { + return; + } + if (this.menu.shown()) { + this.menu.hide(); + } else { + const rect = (this.menuThumb as HTMLDivElement).getBoundingClientRect(); + const top = rect.bottom; + const left = rect.left; + this.menu.show(top, left); + } + }); + } + + /** + * Fill in the content of the value divs given the current slicing spec. + */ + private async renderValues() { + if (this.rank > 2 && this.slicingSpecRoot === null) { + this.slicingSpecRoot = document.createElement('div'); + this.slicingSpecRoot.classList.add('tensor-widget-slicing-group'); + this.rootElement.appendChild(this.slicingSpecRoot); + } + + if (this.valueSection == null) { + this.valueSection = document.createElement('div'); + this.valueSection.classList.add('tensor-widget-value-section'); + this.rootElement.appendChild(this.valueSection); + + this.valueSection.addEventListener('wheel', async (event) => { + let zoomKeyPressed = false; + if ( + this.options.wheelZoomKey == null || + this.options.wheelZoomKey === 'ctrl' + ) { + zoomKeyPressed = event.ctrlKey; + } else if (this.options.wheelZoomKey === 'alt') { + zoomKeyPressed = event.altKey; + } else if (this.options.wheelZoomKey === 'shift') { + zoomKeyPressed = event.shiftKey; + } + if (zoomKeyPressed && this.valueRenderMode === ValueRenderMode.IMAGE) { + event.stopPropagation(); + event.preventDefault(); + if (event.deltaY > 0) { + this.zoomOutOneStepAndRenderValues(); + } else { + this.zoomInOneStepAndRenderValues(); + } + return; + } + + if (this.selection == null) { + return; + } + event.stopPropagation(); + event.preventDefault(); + this.hideValueTooltip(); + await this.scrollUpOrDown( + event.deltaY > 0 ? MoveDirection.DOWN : MoveDirection.UP + ); + }); + + // Add event listener for the value section. + this.valueSection.tabIndex = 1024; + this.valueSection.addEventListener('keydown', (event) => { + const UP_KEYCODE = 38; + const DOWN_KEYCODE = 40; + const LEFT_KEYCODE = 37; + const RIGHT_KEYCODE = 39; + const VALID_KEYCODES = [ + UP_KEYCODE, + DOWN_KEYCODE, + LEFT_KEYCODE, + RIGHT_KEYCODE, + ]; + if ( + this.selection != null && + VALID_KEYCODES.indexOf(event.keyCode) !== -1 + ) { + event.stopPropagation(); + event.preventDefault(); + this.hideValueTooltip(); + let slicingMoveDirection: MoveDirection | null = null; + let moveDirection: MoveDirection | null = null; + if (event.keyCode === UP_KEYCODE) { + moveDirection = MoveDirection.UP; + } else if (event.keyCode === DOWN_KEYCODE) { + moveDirection = MoveDirection.DOWN; + } else if (event.keyCode === LEFT_KEYCODE) { + moveDirection = MoveDirection.LEFT; + } else if (event.keyCode === RIGHT_KEYCODE) { + moveDirection = MoveDirection.RIGHT; + } + + if (moveDirection !== null) { + slicingMoveDirection = this.selection.move( + moveDirection, + this.slicingSpec + ); + } + + // The selection movement may necessitate a change in the vertical or + // horizontal view. + if (slicingMoveDirection === null) { + this.renderSelection(); + } else if ( + slicingMoveDirection === MoveDirection.UP || + slicingMoveDirection === MoveDirection.DOWN + ) { + this.scrollUpOrDown(slicingMoveDirection); + } else if ( + slicingMoveDirection === MoveDirection.LEFT || + slicingMoveDirection === MoveDirection.RIGHT + ) { + this.scrollLeftOrRight(slicingMoveDirection); + } + } + }); + } + + this.clearValueSection(); + this.createTopRuler(); + this.createLeftRuler(); + this.createValueDivs(); + await this.renderRulersAndValueDivs(); + + if (this.rank > 2) { + this.slicingControl = new SlicingControl( + this.slicingSpecRoot as HTMLDivElement, + this.tensorView.spec.shape, + async (slicingSpec: TensorViewSlicingSpec) => { + if (!areSlicingSpecsCompatible(this.slicingSpec, slicingSpec)) { + this.slicingSpec = JSON.parse(JSON.stringify(slicingSpec)); + // The dimension arrangement has changed in the slicing spec. + // The rulers and value divs must be re-created. This is why + // `render()` is called instead of `renderRulersAndValueDivs()`. + await this.render(); + } else { + this.slicingSpec = JSON.parse(JSON.stringify(slicingSpec)); + await this.renderRulersAndValueDivs(); + } + } + ); + this.slicingControl.render(this.slicingSpec); + } + } + + private clearValueSection() { + if (this.valueSection === null) { + return; + } + while (this.valueSection.firstChild) { + this.valueSection.removeChild(this.valueSection.firstChild); + } + this.topRuler = null; + this.valueRows = []; + } + + /** + * Creates the top ruler. + * + * The top ruler includes the topleft-most ruler block, in addition to the + * column-wise ruler blocks. + */ + private createTopRuler() { + if (this.valueSection === null) { + throw new Error( + 'Failed to create top ruler due to missing value section.' + ); + } + if (this.topRuler == null) { + this.topRuler = document.createElement('div'); + this.topRuler.classList.add('tenesor-widget-top-ruler'); + // Force nowrap as this is important to ensure the correct number + // of columns. + this.topRuler.style.whiteSpace = 'nowrap'; + this.valueSection.appendChild(this.topRuler); + this.topRulerTicks = []; + + this.topRuler.addEventListener('wheel', async (event) => { + if (this.selection == null) { + return; + } + event.stopPropagation(); + event.preventDefault(); + this.hideValueTooltip(); + await this.scrollLeftOrRight( + event.deltaY > 0 ? MoveDirection.RIGHT : MoveDirection.LEFT + ); + }); + } + + while (this.topRuler.firstChild) { + this.topRuler.removeChild(this.topRuler.firstChild); + } + + this.baseRulerTick = document.createElement('div'); + this.baseRulerTick.classList.add('tensor-widget-top-ruler-tick'); + this.topRuler.appendChild(this.baseRulerTick); + + // Whether the number of columns to render on the screen is to be + // determined, e.g., when the `render` method is called for the first time. + if (this.rank >= 2) { + this.slicingSpec.horizontalRange = [0, null]; + } + + let maxNumCols: number; + if (this.rank <= 1) { + maxNumCols = 1; + } else { + const horizontalDim = this.slicingSpec.viewingDims[1]; + maxNumCols = this.tensorView.spec.shape[horizontalDim]; + } + + const rootElementRight = this.rootElement.getBoundingClientRect().right; + this.colsCutoff = false; + for (let i = 0; i < maxNumCols; ++i) { + const tick = document.createElement('div'); + tick.classList.add('tensor-widget-top-ruler-tick'); + if (this.valueRenderMode === ValueRenderMode.IMAGE) { + tick.style.width = `${this.imageCellSize}px`; + } + this.topRuler.appendChild(tick); + this.topRulerTicks.push(tick); + if (tick.getBoundingClientRect().right >= rootElementRight) { + // The tick has gone out of the right bound of the tensor widget. + if (this.rank >= 2) { + if (this.slicingSpec.horizontalRange === null) { + throw new Error( + `Missing horizontal range for ${this.rank}D tensor.` + ); + } + this.slicingSpec.horizontalRange[1] = i + 1; + this.colsCutoff = true; + } + break; + } + } + if (!this.colsCutoff && this.rank >= 2) { + if (this.slicingSpec.horizontalRange === null) { + throw new Error(`Missing horizontal range for ${this.rank}D tensor.`); + } + this.slicingSpec.horizontalRange[1] = maxNumCols; + } + } + + private createLeftRuler() { + if (this.valueSection === null) { + throw new Error( + 'Failed to create left ruler due to missing value section.' + ); + } + this.valueRows = []; + this.leftRulerTicks = []; + + if (this.rank >= 1) { + this.slicingSpec.verticalRange = [0, null]; + } + + let maxNumRows: number; + if (this.rank === 0) { + maxNumRows = 1; + } else { + const verticalDim = this.slicingSpec.viewingDims[0]; + maxNumRows = this.tensorView.spec.shape[verticalDim]; + } + + // TODO(cais): Make sure that root element bottom is set to begin with. + this.rowsCutoff = false; + const rootElementBottom = this.rootElement.getBoundingClientRect().bottom; + for (let i = 0; i < maxNumRows; ++i) { + const row = document.createElement('div'); + row.classList.add('tensor-widget-value-row'); + if (this.valueRenderMode === ValueRenderMode.IMAGE) { + row.style.height = `${this.imageCellSize}px`; + row.style.lineHeight = `${this.imageCellSize}px`; + } + this.valueSection.appendChild(row); + this.valueRows.push(row); + + const tick = document.createElement('div'); + tick.classList.add('tensor-widget-top-ruler-tick'); + if (this.valueRenderMode === ValueRenderMode.IMAGE) { + tick.style.height = `${this.imageCellSize}px`; + tick.style.lineHeight = `${this.imageCellSize}px`; + } + row.appendChild(tick); + this.leftRulerTicks.push(tick); + if (tick.getBoundingClientRect().bottom >= rootElementBottom) { + // The tick has gone out of the right bound of the tensor widget. + if (this.rank >= 1) { + if (this.slicingSpec.verticalRange === null) { + throw new Error(`Missing vertical range for ${this.rank}D tensor.`); + } + this.slicingSpec.verticalRange[1] = i + 1; + this.rowsCutoff = true; + } + break; + } + } + if (!this.rowsCutoff && this.rank >= 1) { + if (this.slicingSpec.verticalRange === null) { + throw new Error(`Missing vertical range for ${this.rank}D tensor.`); + } + this.slicingSpec.verticalRange[1] = maxNumRows; + } + } + + /** + * Creates the value divs, according to the presence and counts of the top + * and left rulers. + * + * Value divs are the div elements that hold the currently visible elements + * of the tensors. + * + * This method doesn't render the contents of the value divs, but merely + * creats them. The `renderValueDivs()` method is what renders their contents + * (based on the current slicing spec). + */ + private createValueDivs() { + if (this.valueRows === null) { + throw new Error('Value rows are unexpectedly uninitialized.'); + } + + this.valueDivs = []; + const numCols = this.topRulerTicks.length; + const numRows = this.valueRows.length; + for (let i = 0; i < numRows; ++i) { + this.valueDivs[i] = []; + for (let j = 0; j < numCols; ++j) { + const valueDiv = document.createElement('div'); + valueDiv.classList.add('tensor-widget-value-div'); + if (this.valueRenderMode === ValueRenderMode.IMAGE) { + valueDiv.style.width = `${this.imageCellSize}px`; + valueDiv.style.height = `${this.imageCellSize}px`; + valueDiv.style.lineHeight = `${this.imageCellSize}px`; + } + this.valueRows[i].appendChild(valueDiv); + this.valueDivs[i].push(valueDiv); + valueDiv.addEventListener('click', () => { + const rowStart = + this.slicingSpec.verticalRange == null || + this.slicingSpec.verticalRange[0] == null + ? 0 + : this.slicingSpec.verticalRange[0] + i; + const colStart = + this.slicingSpec.horizontalRange == null || + this.slicingSpec.horizontalRange[0] == null + ? 0 + : this.slicingSpec.horizontalRange[0] + j; + // TODO(cais): Support multi-row, multi-column selection. + const rowCount = 1; + const colCount = 1; + this.selection = new TensorElementSelection( + this.tensorView.spec.shape, + this.slicingSpec, + rowStart, + colStart, + rowCount, + colCount + ); + this.renderSelection(); + }); + valueDiv.addEventListener('mouseenter', () => { + // On mouse hover, show a tooltip that displays the element's + // value in a more detailed fashion. + const detailedValueTooltipString = valueDiv.getAttribute( + DETAILED_VALUE_ATTR_KEY + ); + if (detailedValueTooltipString === null) { + return; + } + const rootRect = this.rootElement.getBoundingClientRect(); + const valueRect = valueDiv.getBoundingClientRect(); + const valueHeight = valueRect.bottom - valueRect.top; + const valueWidth = valueRect.right - valueRect.left; + const indices = this.calculateIndices(i, j); + this.drawValueTooltip( + indices, + detailedValueTooltipString, + valueRect.top - rootRect.top + valueHeight * 0.8, + valueRect.left - rootRect.left + valueWidth * 0.75 + ); + }); + valueDiv.addEventListener('mouseleave', () => { + this.hideValueTooltip(); + }); + } + } + } + + /** + * Render the content of the top ruler ticks based on current slicing spec. + * + * The top ruler ticks show the currently displayed column indices. + */ + private renderTopRuler() { + if (this.rank >= 2) { + const numCols = this.tensorView.spec.shape[ + this.slicingSpec.viewingDims[1] + ]; + + for (let i = 0; i < this.topRulerTicks.length; ++i) { + if (this.slicingSpec.horizontalRange === null) { + throw new Error(`Missing horizontal range for ${this.rank}D tensor.`); + } + const colIndex = this.slicingSpec.horizontalRange[0] + i; + if (this.showIndicesOnTicks) { + if (colIndex < numCols) { + this.topRulerTicks[i].textContent = `${colIndex}`; + } else { + this.topRulerTicks[i].textContent = ``; + } + } // No text label under the image mode. + } + } + } + + /** + * Render the content of the left ruler ticks based on current slicing spec. + * + * The left ruler ticks show the currently displayed row indices. + */ + private renderLeftRuler() { + if (this.rank >= 1) { + const numRows = this.tensorView.spec.shape[ + this.slicingSpec.viewingDims[0] + ]; + for (let i = 0; i < this.leftRulerTicks.length; ++i) { + if (this.slicingSpec.verticalRange === null) { + throw new Error(`Missing vertcial range for ${this.rank}D tensor.`); + } + const rowIndex = this.slicingSpec.verticalRange[0] + i; + if (this.showIndicesOnTicks) { + if (rowIndex < numRows) { + this.leftRulerTicks[i].textContent = `${rowIndex}`; + } else { + this.leftRulerTicks[i].textContent = ''; + } + } + } + } + } + + /** + * Render contents of the value divs. + * + * This method doesn't re-create the value divs, but merely updates + * the text content of them based on the current slicing spec. + */ + private async renderValueDivs() { + const numRows = this.valueDivs.length; + const numCols = this.valueDivs[0].length; + let values = await this.tensorView.view(this.slicingSpec); + if (this.rank === 0) { + values = [[values as number]]; + } else if (this.rank === 1) { + values = (values as number[]).map((v) => [v]); + } + + const valueClass = this.getValueClass(); + + let colorMap: ColorMap | null = null; + const valueRenderMode = this.valueRenderMode; + if (valueRenderMode === ValueRenderMode.IMAGE) { + if (this.numericSummary == null) { + throw new Error( + 'Failed to render image representation of tensor due to ' + + 'missing numeric summary' + ); + } + const {minimum, maximum} = this + .numericSummary as BooleanOrNumericTensorNumericSummary; + if (minimum == null || maximum == null) { + throw new Error( + 'Failed to render image representation of tensor due to ' + + 'missing minimum or maximum values in numeric summary' + ); + } + const colorMapConfig: ColorMapConfig = { + min: minimum as number, + max: maximum as number, + }; + if (this.colorMapName in colorMaps) { + this.colorMap = new colorMaps[this.colorMapName](colorMapConfig); + } else { + // Color-map name is not found. Use the default: Grayscale colormap. + this.colorMap = new GrayscaleColorMap(colorMapConfig); + } + } + + for (let i = 0; i < numRows; ++i) { + for (let j = 0; j < numCols; ++j) { + const valueDiv = this.valueDivs[i][j]; + if ( + i < (values as number[][]).length && + j < (values as number[][])[i].length + ) { + const value = (values as number[][] | boolean[][] | string[][])[i][j]; + if (valueRenderMode === ValueRenderMode.IMAGE) { + const [red, green, blue] = (this.colorMap as ColorMap).getRGB( + value as number + ); + valueDiv.style.backgroundColor = `rgb(${red}, ${green}, ${blue})`; + } else { + // Here, valueRenderMode is 'text'. + if (valueClass === 'numeric') { + // TODO(cais): Once health pills are available, use the min/max + // values to determine the number of decimal places. + valueDiv.textContent = numericValueToString( + value as number, + isIntegerDType(this.tensorView.spec.dtype) + ); + } else if (valueClass === 'boolean') { + valueDiv.textContent = booleanValueToDisplayString( + value as boolean + ); + } else if (valueClass === 'string') { + valueDiv.textContent = stringValueToDisplayString( + value as string + ); + } + } + // The attribute set below will be rendered in a tooltip that appears + // on mouse hovering. + valueDiv.setAttribute( + DETAILED_VALUE_ATTR_KEY, + this.getDetailedValueTooltipString(value) + ); + } else { + valueDiv.textContent = ''; + valueDiv.setAttribute(DETAILED_VALUE_ATTR_KEY, ''); + } + } + } + + this.renderSelection(); + } + + /** + * Get a "detailed" string representation of the value of the corresponding + * tensor element. It is detailed in the sense that it has as many + * decimal points as supported by JavaScript's string representation + * of numbers, in the case of float dtypes. The only exceptions + * are very long string elements, which we still truncate in order + * to avoid overtaxing the DOM. + */ + private getDetailedValueTooltipString( + value: boolean | number | string + ): string { + if (this.getValueClass() === 'boolean') { + const shortForm = false; + return booleanValueToDisplayString(value as boolean, shortForm); + } else if (this.getValueClass() === 'string') { + const lengthLimit = 500; + return `Length-${ + (value as string).length + } string: "${stringValueToDisplayString(value as string, lengthLimit)}"`; + } else { + return String(value); + } + } + + /** + * Update the rendering of the selected value cells (if any). + */ + private renderSelection() { + if (this.selection == null) { + return; + } + const numRows = this.valueDivs.length; + const numCols = this.valueDivs[0].length; + for (let i = 0; i < numRows; ++i) { + for (let j = 0; j < numCols; ++j) { + const valueDiv = this.valueDivs[i][j]; + valueDiv.classList.remove('tensor-widget-value-div-selection'); + valueDiv.classList.remove('tensor-widget-value-div-selection-top'); + valueDiv.classList.remove('tensor-widget-value-div-selection-bottom'); + valueDiv.classList.remove('tensor-widget-value-div-selection-left'); + valueDiv.classList.remove('tensor-widget-value-div-selection-right'); + const indices = this.calculateIndices(i, j); + const status = this.selection.getElementStatus(indices); + if (status !== null) { + valueDiv.classList.add('tensor-widget-value-div-selection'); + if (status.topEdge) { + valueDiv.classList.add('tensor-widget-value-div-selection-top'); + } + if (status.bottomEdge) { + valueDiv.classList.add('tensor-widget-value-div-selection-bottom'); + } + if (status.leftEdge) { + valueDiv.classList.add('tensor-widget-value-div-selection-left'); + } + if (status.rightEdge) { + valueDiv.classList.add('tensor-widget-value-div-selection-right'); + } + } + } + } + } + + /** + * Calculate the set of indices that a value div currently maps to. + * @param viewRow Row index of the value div, 0-based. This is with respect + * to the 2D array of value divs that the widget currently possess, not + * with respect to the indices of the underlying tensor. Same below. + * @param viewCol Column indices of the value div, 0-based. + * @return The set of indices of the underlying tensor. + */ + private calculateIndices(viewRow: number, viewCol: number): number[] { + const indices: number[] = []; + const slicingDims = this.slicingSpec.slicingDimsAndIndices.map( + (dimAndIndex) => dimAndIndex.dim + ); + const slicingIndices = this.slicingSpec.slicingDimsAndIndices.map( + (dimAndIndex) => dimAndIndex.index + ); + for (let i = 0; i < this.rank; ++i) { + if (slicingDims.indexOf(i) !== -1) { + const index = slicingIndices[slicingDims.indexOf(i)]; + if (index === null) { + throw new Error( + `Failed to calculate indices: ` + + `Undetermined index at dimension ${i}` + ); + } + indices.push(index); + } else if (i === this.slicingSpec.viewingDims[0]) { + if ( + this.slicingSpec.verticalRange === null || + this.slicingSpec.verticalRange[0] === null + ) { + throw new Error( + 'Failed to calculate indices due to undertermined vertical range.' + ); + } + indices.push(this.slicingSpec.verticalRange[0] + viewRow); + } else if (i === this.slicingSpec.viewingDims[1]) { + if ( + this.slicingSpec.horizontalRange === null || + this.slicingSpec.horizontalRange[0] === null + ) { + throw new Error( + 'Failed to calculate indices due to undertermined vertical range.' + ); + } + indices.push(this.slicingSpec.horizontalRange[0] + viewCol); + } + } + return indices; + } + + /** + * Draw tooltip for detailed indices and value. + * @param indices Indices of the element for which the tooltip is to be drawn. + * @param detailedValueString A string describing the value in a detailed way, + * e.g., with sufficient number of decimal points for a float number value. + * @param top Top coordinate (in pixels) of the tooltip. + * @param left Left coordinate (in pixels) of the tooltip. + */ + private drawValueTooltip( + indices: number[], + detailedValueString: string, + top: number, + left: number + ) { + if (this.valueTooltip === null) { + this.valueTooltip = document.createElement('div'); + this.valueTooltip.classList.add('tensor-widget-value-tooltip'); + this.rootElement.appendChild(this.valueTooltip); + } + + while (this.valueTooltip.firstChild) { + this.valueTooltip.removeChild(this.valueTooltip.firstChild); + } + const indicesDiv = document.createElement('div'); + indicesDiv.classList.add('tensor-widget-value-tooltip-indices'); + indicesDiv.textContent = `Indices: ${JSON.stringify(indices)}`; + this.valueTooltip.appendChild(indicesDiv); + + const valueDiv = document.createElement('div'); + valueDiv.classList.add('tensor-widget-value-tooltip-value'); + valueDiv.textContent = detailedValueString; + + this.valueTooltip.appendChild(valueDiv); + this.valueTooltip.style.top = `${top}px`; + this.valueTooltip.style.left = `${left}px`; + this.valueTooltip.style.display = 'block'; + + // If the current render mode is IMAGE, show the color bar and + // indicate the position of the current element along the color-bar scale. + if ( + this.valueRenderMode == ValueRenderMode.IMAGE && + this.colorMap != null + ) { + const colorBarCanvas = document.createElement('canvas'); + colorBarCanvas.classList.add('tensor-widget-value-tooltip-colorbar'); + this.valueTooltip.appendChild(colorBarCanvas); + this.colorMap.render(colorBarCanvas, parseFloat(detailedValueString)); + } + } + + private hideValueTooltip() { + if (this.valueTooltip != null) { + this.valueTooltip.style.display = 'none'; + } + } + + /** + * Fill in the content of the top/left rulers and main value divs + * based on the current slicing spec. + */ + private async renderRulersAndValueDivs() { + if (this.slicingControl != null) { + this.slicingControl.setSlicingSpec(this.slicingSpec); + } + // Determine if indices should be rendered on ruler ticks. + this.calculateShowIndicesOnRulerTicks(); + this.renderTopRuler(); + this.renderLeftRuler(); + await this.renderValueDivs(); + } + + /** + * Determine if indices should be displayed on ruler ticks given + * the current tick sizes. + */ + private calculateShowIndicesOnRulerTicks() { + if (this.rank >= 2) { + const tickBox = this.topRulerTicks[0].getBoundingClientRect(); + const tickWidth = tickBox.right - tickBox.left; + const dimSize = this.tensorView.spec.shape[ + this.slicingSpec.viewingDims[0] + ]; + this.showIndicesOnTicks = + tickWidth > 9 * Math.ceil(Math.log(dimSize) / Math.LN10); + } else if (this.rank === 1) { + const tickBox = this.leftRulerTicks[0].getBoundingClientRect(); + const tickHeight = tickBox.bottom - tickBox.top; + this.showIndicesOnTicks = tickHeight > 16; + } else { + // rank is 0. + this.showIndicesOnTicks = false; + } + } + + /** + * Scroll horizontally to a specified column index. + * + * This is a no-op for scalar (0D) and 1D tensors. + * If the column index is out of bound under the current slicing spec, + * an error will be thrown. + * + * @param index + */ + async scrollHorizontally(index: number) { + if (this.rank <= 1) { + // Cannot scroll the display of a scalar or 1D tensor. + return; + } + if (this.slicingSpec.horizontalRange === null) { + throw new Error(`Missing horizontal range for ${this.rank}D tensor.`); + } + const indexUpperBound = this.tensorView.spec.shape[ + this.slicingSpec.viewingDims[1] + ]; + if (index < 0 || index >= indexUpperBound) { + throw new Error( + `Index out of bound: ${index} is outside [0, ${indexUpperBound}])` + ); + } + + this.slicingSpec.horizontalRange[0] = index; + this.slicingSpec.horizontalRange[1] = index + this.topRulerTicks.length; + const maxCol = this.tensorView.spec.shape[this.slicingSpec.viewingDims[1]]; + if (this.slicingSpec.horizontalRange[1] > maxCol) { + this.slicingSpec.horizontalRange[1] = maxCol; + } + + await this.renderRulersAndValueDivs(); + } + + /** + * Scroll vertically to a specified row index. + * + * This is a no-op for scalar (0D) tensors. + * If the row index is out of bound under the current slicing spec, + * an error will be thrown. + * + * @param index + */ + async scrollVertically(index: number) { + if (this.rank === 0) { + // Cannot scroll the display of a scalar. + return; + } + if (this.slicingSpec.verticalRange === null) { + throw new Error(`Missing vertical range for ${this.rank}D tensor.`); + } + if (this.valueRows === null) { + throw new Error('Vertical scrolling failed due to missing value rows.'); + } + + const indexUpperBound = this.tensorView.spec.shape[ + this.slicingSpec.viewingDims[0] + ]; + if (index < 0 || index >= indexUpperBound) { + throw new Error( + `Index out of bound: ${index} is outside [0, ${indexUpperBound}])` + ); + } + + this.slicingSpec.verticalRange[0] = index; + this.slicingSpec.verticalRange[1] = index + this.valueRows.length; + const maxRow = this.tensorView.spec.shape[this.slicingSpec.viewingDims[0]]; + if (this.slicingSpec.verticalRange[1] > maxRow) { + this.slicingSpec.verticalRange[1] = maxRow; + } + + await this.renderRulersAndValueDivs(); + } + + protected async scrollUpOrDown( + direction: MoveDirection.UP | MoveDirection.DOWN + ) { + if (this.rank === 0) { + // Cannot scroll the display of a scalar. + return; + } + if (!this.rowsCutoff) { + // Cannot scroll vertically when all rows are shown. + return; + } + if (this.slicingSpec.verticalRange === null) { + throw new Error(`Missing vertical range for ${this.rank}D tensor.`); + } + if (this.valueRows === null) { + throw new Error('Vertical scrolling failed due to missing value rows.'); + } + const currRowIndex = this.slicingSpec.verticalRange[0]; + if (direction === MoveDirection.DOWN) { + const numRowsShown = this.valueRows.length - 1; + const maxRow = + this.tensorView.spec.shape[this.slicingSpec.viewingDims[0]] - + numRowsShown; + if (currRowIndex < maxRow) { + await this.scrollVertically(currRowIndex + 1); + } + } else { + // direction is up. + if (currRowIndex - 1 >= 0) { + await this.scrollVertically(currRowIndex - 1); + } + } + } + + protected async scrollLeftOrRight( + direction: MoveDirection.LEFT | MoveDirection.RIGHT + ) { + if (this.rank <= 1) { + // Cannot horizontally scroll the display a scalar or 1D tensor. + return; + } + if (!this.colsCutoff) { + // Cannot scroll horizontally when all rows are shown. + return; + } + if (this.slicingSpec.horizontalRange === null) { + throw new Error( + `Horizontal scrolling failed due to missing horizontal range.` + ); + } + const currColIndex = this.slicingSpec.horizontalRange[0]; + if (direction === MoveDirection.RIGHT) { + const numColsShown = this.topRulerTicks.length - 1; + const maxCol = + this.tensorView.spec.shape[this.slicingSpec.viewingDims[1]] - + numColsShown; + if (currColIndex < maxCol) { + await this.scrollHorizontally(currColIndex + 1); + } + } else { + // direction is left. + if (currColIndex - 1 >= 0) { + await this.scrollHorizontally(currColIndex - 1); + } + } + } + + async navigateToIndices(indices: number[]) { + throw new Error('navigateToIndices() is not implemented yet.'); + } + + private getValueClass(): ValueClass { + const dtype = this.tensorView.spec.dtype; + if (isIntegerDType(dtype) || isFloatDType(dtype)) { + return 'numeric'; + } else if (isBooleanDType(dtype)) { + return 'boolean'; + } else { + return 'string'; + } + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/tensor-widget-interop.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/tensor-widget-interop.ts new file mode 100644 index 0000000000000000000000000000000000000000..047000ecc2d2e3b08ba850647a20058d764114c2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/tensor-widget-interop.ts @@ -0,0 +1,18 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as tensorWidget from './tensor-widget'; + +// Prevent JSComp to mangle the exported name. +(window as any)['tensor_widget'] = tensorWidget; diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/tensor-widget-style.uninlined.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/tensor-widget-style.uninlined.ts new file mode 100644 index 0000000000000000000000000000000000000000..f7b092a8cb0a9f7f302c6ace110595dec78768c5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/tensor-widget-style.uninlined.ts @@ -0,0 +1,23 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {registerStyleDomModule} from '../../components/polymer/register_style_dom_module'; + +registerStyleDomModule({ + moduleName: 'tensor-widget-style', + styleContent: ` + %tensor-widget.css% + `, +}); diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/tensor-widget.css b/saved_models/tensorboard/tensorboard/components/tensor_widget/tensor-widget.css new file mode 100644 index 0000000000000000000000000000000000000000..dfc6dd7b25a586433ad28d7df8ecf019ea4e0068 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/tensor-widget.css @@ -0,0 +1,280 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +.tensor-widget { + font-family: monospace; + font-size: 14px; + overflow-x: hidden; + overflow-y: hidden; + position: relative; +} + +.tensor-widget-dim { + border: 1px solid rgb(160, 160, 160); + display: inline-block; + font-size: 12px; + height: 14px; + line-height: 14px; + margin-left: 15px; + margin-right: 15px; + padding: 2px; +} + +.tensor-widget-dim-comma { + color: rgb(128, 128, 128); + display: inline-block; + font-size: 12px; + height: 14px; + line-height: 14px; +} + +.tensor-widget-dim-highlighted { + border: 1px solid rgb(100, 180, 255); + font-weight: bold; +} + +.tensor-widget-dim-brackets { + color: rgb(128, 128, 128); + display: inline-block; + font-size: 8pt; +} + +.tensor-widget-dim-dropdown { + background-color: rgb(255, 255, 255); + border: 1px solid rgb(128, 128, 128); + box-shadow: 2px 2px 2px #b0b0b0; + cursor: pointer; + width: 180px; + z-index: 1000; +} + +.tensor-widget-dim-dropdown-menu-item { + border-bottom: 1px solid rgb(180, 180, 180); + font-size: 12px; + padding: 3px; + user-select: none; +} + +.tensor-widget-dim-dropdown-menu-item-active { + background-color: rgb(100, 180, 255); +} + +.tensor-widget-dim-dropdown-menu-item-disabled { + color: rgb(128, 128, 128); +} + +.tensor-widget-dtype { + align-content: center; + color: rgb(60, 60, 60); + display: inline-block; + font-size: 8pt; + height: 48px; + line-height: 22px; + max-height: 22px; + padding-left: 14px; + padding-right: 10px; + position: relative; + vertical-align: middle; +} + +.tensor-widget-dtype-label { + color: rgb(128, 128, 128); +} + +.tensor-widget-header { + background-color: rgb(252, 252, 252); + box-shadow: 2px 2px 2px #b0b0b0; + height: 40px; + line-height: 40px; + max-height: 40px; + position: relative; + vertical-align: middle; + width: 100%; +} + +.tensor-widget-info { + align-content: center; + color: rgb(0, 0, 255); + display: inline-block; + font-size: 8pt; + height: 22px; + line-height: 22px; + margin-left: 8px; + max-height: 22px; + position: relative; + vertical-align: middle; +} + +.tensor-widget-menu-thumb { + color: rgb(32, 33, 36); + cursor: pointer; + display: inline-block; + font-weight: bold; + font-size: 16px; + margin-left: 10px; + margin-right: 5px; + position: relative; + user-select: none; +} + +.tensor-widget-menu-thumb:hover { + color: rgb(227, 116, 0); +} + +.tensor-widget-shape { + color: rgb(60, 60, 60); + display: inline-block; + margin-left: 12px; +} + +.tensor-widget-shape-label { + color: rgb(128, 128, 128); + display: inline-block; +} + +.tensor-widget-shape-value { + display: inline-block; +} + +.tensor-widget-slicing-group { + background-color: rgb(250, 250, 250); + border-bottom: 1px solid rgb(190, 190, 190); + display: block; + height: 18px; + text-align: center; + padding-bottom: 5px; + padding-top: 5px; +} + +.tensor-widget-tensor-name { + color: black; + display: inline-block; + font-weight: bold; +} + +.tensor-widget-left-ruler-tick { + background-color: var(--ruler-background-color); + border-bottom: var(--border-style); + border-top: var(--border-style); + box-shadow: var(--border-style); + color: rgb(110, 110, 110); + cursor: pointer; + display: inline-block; + font-size: 12px; + height: 29px; + line-height: 29px; + margin-left: 0px; + max-width: 45px; + text-align: center; + user-select: none; + vertical-align: middle; + width: 45px; +} + +.tensor-widget-top-ruler { + height: 24px; + white-space: nowrap; +} + +.tensor-widget-value-tooltip { + background-color: rgb(240, 240, 240); + border: 1px solid rgb(160, 160, 160); + box-shadow: 1px 1px 1px #b0b0b0; + display: none; + font-size: 13px; + padding: 5px; + position: absolute; + user-select: none; + width: 240px; +} + +.tensor-widget-value-tooltip-colorbar { + height: 24px; + width: 95%; +} + +.tensor-widget-value-tooltip-indices { + font-weight: bold; +} + +.tensor-widget-value-tooltip-value { + margin-top: 20px; +} + +.tensor-widget-top-ruler-tick { + background-color: var(--ruler-background-color); + border-bottom: var(--border-style); + border-right: var(--border-style); + color: rgb(110, 110, 110); + cursor: pointer; + display: inline-block; + font-size: 12px; + height: 24px; + line-height: 24px; + padding-right: 2px; + text-align: center; + user-select: none; + vertical-align: middle; + width: 45px; +} + +.tensor-widget-value-div { + border-bottom: var(--border-style); + border-right: var(--border-style); + cursor: pointer; + display: inline-block; + font-size: 80%; + height: 24px; + line-height: 24px; + max-width: 45px; + padding-right: 2px; + text-align: right; + user-select: none; + vertical-align: middle; + width: 45px; +} + +.tensor-widget-value-div-selection { + font-weight: bold; +} + +.tensor-widget-value-div-selection-bottom { + border-bottom: 0.5px solid blue; +} + +.tensor-widget-value-div-selection-left { + border-left: 0.5px solid blue; +} + +.tensor-widget-value-div-selection-right { + border-right: 0.5px solid blue; +} + +.tensor-widget-value-div-selection-top { + border-top: 0.5px solid blue; +} + +.tensor-widget-value-section { + --border-style: 1px solid rgb(140, 140, 140); + --ruler-background-color: rgb(210, 210, 210); + -moz-user-select: none; + -ms-user-select: none; + -khtml-user-select: none; + -webkit-touch-callout: none; + -webkit-user-select: none; +} + +.tensor-widget-value-row { + height: 25px; + line-height: 25px; + white-space: nowrap; +} diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/tensor-widget.html b/saved_models/tensorboard/tensorboard/components/tensor_widget/tensor-widget.html new file mode 100644 index 0000000000000000000000000000000000000000..8461dd9a5e30fc04044bb5e9cd3835fdb3b579ef --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/tensor-widget.html @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/tensor-widget.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/tensor-widget.ts new file mode 100644 index 0000000000000000000000000000000000000000..f7e523d4fc9232c4c0ffd3cf146dffbe22a2f7b0 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/tensor-widget.ts @@ -0,0 +1,36 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {TensorWidgetImpl} from './tensor-widget-impl'; +import {TensorWidget, TensorWidgetOptions, TensorView} from './types'; + +export {Shape, TensorView} from './types'; +export {VERSION} from './version'; + +/** + * Create an instance of tensor widget. + * @param rootElement The element in which the tensor widget will be endered. + * @param tensor The tensor view of which the content is to be rendered + * in the tensor widget. + * @param options Optional configurations. + * @returns An instance of a single-tensor tensor widget. + */ +export function tensorWidget( + rootElement: HTMLDivElement, + tensor: TensorView, + options?: TensorWidgetOptions +): TensorWidget { + return new TensorWidgetImpl(rootElement, tensor, options); +} diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/types.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..7a53d4d09fb40c7256c22c5be2c98a39355e6929 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/types.ts @@ -0,0 +1,268 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {BaseTensorNumericSummary} from './health-pill-types'; + +export type Shape = ReadonlyArray; + +/** The basic specifications of a tensor. */ +export interface TensorSpec { + /** Data type of the underlying tensor. */ + dtype: string; + + /** Shape of the underlying tensor. */ + shape: Shape; +} + +/** + * The specs for deferred view into a tensor. + * + * A tensor is a typed, multi-dimensional array. + * This interface abstracts away the backing storage of the tensor value. + * + * It allows *on-demand* retrieval of any element or sub-array of the tensor, + * which is important for the cases in which the underlying tensor is held + * at a backend process (e.g., a TensorFlow GPU training job) and is too + * large to fit into JavaScript memory as a whole. + */ +export interface TensorView { + /** The basic immutable aspects of the tensor: dtype and shape. */ + spec: TensorSpec; + + /** + * Get a specific element. + * @param indices Coordinates of the element. n indices (length-n array of + * number) is required to specify an element in an n-dimensional tensor, n + * being a non-negative integer. + * @return The value of the element at the specified indices. + */ + get: (...indices: number[]) => Promise; + + /** + * Get a view of the underlying tensor with the specified + * slicing and viewing dimensions, as well as the ranges + * within the viewing dimensions. + */ + view: (slicingSpec: TensorViewSlicingSpec) => Promise; + + /** Get the numeric summary of the underlying tensor. */ + getNumericSummary: () => Promise; +} + +/** + * Represents the primitive values from slicing a multi-dimensional + * tensor. + */ +export type SlicedValues = + | boolean + | boolean[] + | boolean[][] + | boolean[][][] + | number + | number[] + | number[][] + | number[][][] + | string + | string[] + | string[][] + | string[][][]; + +/** + * A data structure that keeps track of how an n-dimensional array (tensor) + * is sliced down to a smaller number of dimensions for visualization + * in the tensor widget. + * + * For example, suppose there is a 4D tensor of shape [16, 128, 128, 3] + * representing a NHWC image batch. If you'd like to get the 4-by-3 top-left + * corner of the first image of the last color channel displayed in the tensor + * widget, this interface should have the following concrete value: + * + * ``` + * { + * slicingDimsAndIndices: [{ + * dim: 0, + * index: 0 + * }, { + * dim: 3, + * index: 2 + * }], + * viewingDims: [1, 2], + * verticalRange: [0, 4], + * horizontalRange: [0, 3] + * } + * ``` + */ +export interface TensorViewSlicingSpec { + /** + * Which dimensions of the tensor are sliced down to a slice of 1. + * + * - The `dim` field is the 0-based dimension index. + * - The `index` is the 0-based index for the selected slice. + * The `null` option in `index` is for the case of 0 dimension size. + */ + slicingDimsAndIndices: Array<{dim: number; index: number | null}>; + + /** + * Which dimensions are used for viewing (i.e., rendered in the + * tensor widget, as a table, by default.) + * + * Possible lengths of this array field: + * - 0 for scalar tensors. + * - 1 for 1D tensors. + * - 2 for 2D+ tensors. + */ + viewingDims: number[]; + + /** + * The indices from the first viewing dimension, which are shown as rows. + * + * The two numbers are beginning index (inclusive) and ending index + * (exclusive). + * + * The `null` option at the value level is for rank < 1 (i.e., scalar), + * where no row range selection is necessary. + * The `null` in the 2nd element is for case in which the upper limit is not + * determined. + */ + verticalRange: [number, number | null] | null; + + /** + * The indices from the second viewing dimension, which are shown as columns. + * + * The two numbers are beginning index (inclusive) and ending index + * (exclusive). + * + * The `null` option at the value level is for rank < 2 (i.e., scalar or 1D + * tensor), where no row range selection is necessary. + * The `null` in the 2nd element is for case in which the upper limit is not + * determined. + */ + horizontalRange: [number, number | null] | null; + + /** + * Optional dimension for depth. + * + * This supports visualization that requires a depth dimension, e.g., + * color channels. + */ + depthDim?: number; +} + +/** Options used during the creation of a single-tensor tensor widget. */ +export interface TensorWidgetOptions { + /** Name of the tensor (optional). */ + name?: string; + + /** + * Whether the health-pill portion of the tensor widget is to be + * included + * + * Defaults to `true`. + */ + includeHealthPill?: boolean; + + /** Defaults to `true`. */ + includeMenu?: boolean; + + /** + * How many decimal places to display the values in. + * + * The values of the tensor may be displaced in the decimal notation, or + * the engineering notation, depending automatically by the tensor-widget + * library based on the maximum absolute value of the elements of the tensor. + */ + decimalPlaces?: number; + + /** + * Whether to use the Alt, Ctrl or Shift key with the mouse for zooming under + * the image value-rendering mode. + * + * Defaults to Ctrl key ('ctrl'). + */ + wheelZoomKey?: 'alt' | 'ctrl' | 'shift'; + + /** TODO(cais): Add support for custom tensor renderers. */ +} + +/** + * A TensorWidget that interactively visualizes a single tensor. + */ +export interface TensorWidget { + /** + * Renders the GUI of the tensor widget. + * + * This method should be called only once after the tensor widget is + * instantiated, or when the content of the underlying tensor has + * changed. + */ + render: () => Promise; + + /** + * Scroll along the horizontal dimension. + * + * I.e., whichever dimension that's selected as the horizontal viewing + * dimension at the current time. + * + * The element at specified `index` will become the first element in the + * horizontal dimension of the view, regardless of whether the element + * is already in the view. + * + * @param index The index of the tensor view along the first + * dimensionas specified by the `viewingDims` of the tensor widget's + * current slicing spec. + */ + scrollHorizontally: (index: number) => Promise; + + /** + * Scroll along the vertical dimension. + * + * I.e., whichever dimension that's selected as the vertical viewing + * dimension at the current time. + * + * The element at specified `index` will become the first element in the + * vertical dimension of the view, regardless of whether the element + * is already in the view. + * + * @param index The index of the tensor view along the second + * dimensionas specified by the `viewingDims` of the tensor widget's + * current slicing spec. + */ + scrollVertically: (index: number) => Promise; + + /** + * Navigate to specified indices. + * + * This is for the case in which the user wants to bring a specific + * element of given indices into the view, without the potentially tedious + * process of selecting the slices and scrolling. Yes, this automatically + * changes the scroll position and `slicingDimsAndIndices`. + * + * Throws Error if indices is out of bounds. + */ + navigateToIndices: (indices: number[]) => Promise; + + // TODO(cais): Add API for programmatically changing slicingSpec status. + // TODO(cais): Add event listeners for slicingSpec change. +} + +/** + * Possible directions of movement. + */ +export enum MoveDirection { + UP = 1, + DOWN, + LEFT, + RIGHT, +} diff --git a/saved_models/tensorboard/tensorboard/components/tensor_widget/version.ts b/saved_models/tensorboard/tensorboard/components/tensor_widget/version.ts new file mode 100644 index 0000000000000000000000000000000000000000..858f6579aa5ae6440187989a1d6c977eefb639f2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tensor_widget/version.ts @@ -0,0 +1,16 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export const VERSION = '0.0.0'; diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/BUILD b/saved_models/tensorboard/tensorboard/components/tf_backend/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..6c292890fc0f6350082221487eab635c5c2d2959 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/BUILD @@ -0,0 +1,39 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "tf_backend", + srcs = [ + "backend.ts", + "baseStore.ts", + "canceller.ts", + "environmentStore.ts", + "experimentsStore.ts", + "requestManager.ts", + "router.ts", + "runsStore.ts", + "tf-backend.ts", + "tf-backend-polymer.ts", + "urlPathHelpers.ts", + ], + strict_checks = False, + deps = [ + ":type", + "//tensorboard/components/vz_sorting", + "@npm//@polymer/decorators", + "@npm//@polymer/polymer", + "@npm//@types/lodash", + "@npm//lodash", + "@npm//plottable", + ], +) + +tf_ts_library( + name = "type", + srcs = [ + "type.ts", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/backend.ts b/saved_models/tensorboard/tensorboard/components/tf_backend/backend.ts new file mode 100644 index 0000000000000000000000000000000000000000..3f093af71071b8b2b86a2cf33b6f5e427b143534 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/backend.ts @@ -0,0 +1,87 @@ +/* Copyright 2015 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as _ from 'lodash'; + +import * as vz_sorting from '../vz_sorting/sorting'; + +export type RunToTag = { + [run: string]: string[]; +}; +export interface Datum { + wall_time: Date; + step: number; +} +// An object that encapsulates an alert issued by the debugger. This alert is +// sent by debugging libraries after bad values (NaN, +/- Inf) are encountered. +export interface DebuggerNumericsAlertReport { + device_name: string; + tensor_name: string; + first_timestamp: number; + nan_event_count: number; + neg_inf_event_count: number; + pos_inf_event_count: number; +} +// A DebuggerNumericsAlertReportResponse contains alerts issued by the debugger +// in ascending order of timestamp. This helps the user identify for instance +// when bad values first appeared in the model. +export type DebuggerNumericsAlertReportResponse = DebuggerNumericsAlertReport[]; +export const TYPES = []; +/** Given a RunToTag, return sorted array of all runs */ +export function getRunsNamed(r: RunToTag): string[] { + return _.keys(r).sort(vz_sorting.compareTagNames); +} +/** Given a RunToTag, return array of all tags (sorted + dedup'd) */ +export function getTags(r: RunToTag): string[] { + return _.union.apply(null, _.values(r)).sort(vz_sorting.compareTagNames); +} +/** + * Given a RunToTag and an array of runs, return every tag that appears for + * at least one run. + * Sorted, deduplicated. + */ +export function filterTags(r: RunToTag, runs: string[]): string[] { + let result = []; + runs.forEach((x) => (result = result.concat(r[x]))); + return _.uniq(result).sort(vz_sorting.compareTagNames); +} +function timeToDate(x: number): Date { + return new Date(x * 1000); +} +/** Just a curryable map to make things cute and tidy. */ +function map(f: (x: T) => U): (arr: T[]) => U[] { + return function (arr: T[]): U[] { + return arr.map(f); + }; +} +/** + * This is a higher order function that takes a function that transforms a + * T into a G, and returns a function that takes TupleDatas and converts + * them into the intersection of a G and a Datum. + */ +function detupler(xform: (x: T) => G): (t: TupleData) => Datum & G { + return function (x: TupleData): Datum & G { + // Create a G, assert it has type + let obj = xform(x[2]); + // ... patch in the properties of datum + obj.wall_time = timeToDate(x[0]); + obj.step = x[1]; + return obj; + }; +} +/** + * The following interface (TupleData) describes how the data is sent + * over from the backend. + */ +type TupleData = [number, number, T]; // wall_time, step diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/baseStore.ts b/saved_models/tensorboard/tensorboard/components/tf_backend/baseStore.ts new file mode 100644 index 0000000000000000000000000000000000000000..3e6443006f4c22747d2f743f1062f33d994b7fcc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/baseStore.ts @@ -0,0 +1,68 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. ++ ++Licensed under the Apache License, Version 2.0 (the "License"); ++you may not use this file except in compliance with the License. ++You may obtain a copy of the License at ++ ++ http://www.apache.org/licenses/LICENSE-2.0 ++ ++Unless required by applicable law or agreed to in writing, software ++distributed under the License is distributed on an "AS IS" BASIS, ++WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++See the License for the specific language governing permissions and ++limitations under the License. ++==============================================================================*/ +import {RequestManager} from './requestManager'; + +export type Listener = () => void; +// A unique reference to a listener for an easier dereferencing. +export class ListenKey { + public readonly listener: Listener; + constructor(listener: Listener) { + this.listener = listener; + } +} +export abstract class BaseStore { + protected requestManager: RequestManager = new RequestManager( + 1 /* simultaneous request */ + ); + private _listeners: Set = new Set(); + public initialized: boolean = false; + /** + * Asynchronously load or reload the runs data. Listeners will be + * invoked if this causes the runs data to change. + * + * @see addListener + * @return {Promise} a promise that resolves when new data have loaded. + */ + protected abstract load(): Promise; + refresh(): Promise { + return this.load().then(() => { + this.initialized = true; + }); + } + /** + * Register a listener (nullary function) to be called when new runs are + * available. + */ + addListener(listener: Listener): ListenKey { + const key = new ListenKey(listener); + this._listeners.add(key); + return key; + } + /** + * Remove a listener registered with `addListener`. + */ + removeListenerByKey(listenKey: ListenKey): void { + this._listeners.delete(listenKey); + } + protected emitChange(): void { + this._listeners.forEach((listenKey) => { + try { + listenKey.listener(); + } catch (e) { + // ignore exceptions on the listener side. + } + }); + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/canceller.ts b/saved_models/tensorboard/tensorboard/components/tf_backend/canceller.ts new file mode 100644 index 0000000000000000000000000000000000000000..dc78a9b13b27805a60507ed3e3f58f19178dba31 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/canceller.ts @@ -0,0 +1,67 @@ +/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the 'License'); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an 'AS IS' BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export interface CancelResult { + value: T; + cancelled: boolean; +} + +/** + * A class that allows marking promises as cancelled. + * + * This can be useful to, e.g., prevent old network requests from + * stomping new ones and writing bad data. + * + * Usage: + * + * const canceller = new Canceller(); + * let myPromise: Promise = getPromise(); + * myPromise.then(canceller.cancellable(({value, cancelled} => { + * if (cancelled) { + * console.warn("Don't make promises you can't keep >:-{"); + * } + * console.log("Enjoy your value:", value); + * })); + * + * // If `myPromise` is resolved now, then `cancelled` will be `false`. + * canceller.cancelAll(); + * // If `myPromise` is resolved now, then `cancelled` will be `true`. + */ +export class Canceller { + /** + * How many times has `cancelAll` been called? + */ + private cancellationCount = 0; + /** + * Create a cancellable task. This returns a new function that, when + * invoked, will pass its argument to the provided function as well as + * a `cancelled` argument. This argument will be `false` unless and + * until `cancelAll` is invoked after the creation of this task. + */ + public cancellable(f: (result: CancelResult) => U): (T) => U { + const originalCancellationCount = this.cancellationCount; + return (value) => { + const cancelled = this.cancellationCount !== originalCancellationCount; + return f({value, cancelled}); + }; + } + /** + * Mark all outstanding tasks as cancelled. Tasks not yet created will + * not be affected. + */ + public cancelAll(): void { + this.cancellationCount++; + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/environmentStore.ts b/saved_models/tensorboard/tensorboard/components/tf_backend/environmentStore.ts new file mode 100644 index 0000000000000000000000000000000000000000..fdcd1b04205581fd5a2b08123413ac3953cf310e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/environmentStore.ts @@ -0,0 +1,71 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as _ from 'lodash'; + +import {getRouter} from './router'; +import {BaseStore} from './baseStore'; + +interface Environment { + dataLocation: string; + windowTitle: string; + /** Name of the experiment (if available). */ + experimentName?: string; + /** A description of the experiment (if available). */ + experimentDescription?: string; + /** Creation timestamp for the experiment (if available). */ + creationTime?: number; +} + +export class EnvironmentStore extends BaseStore { + private environment: Environment; + load() { + const url = getRouter().environment(); + return this.requestManager.request(url).then((result) => { + const environment: Environment = { + dataLocation: result.data_location, + windowTitle: result.window_title, + }; + if (result.experiment_name !== undefined) { + environment.experimentName = result.experiment_name; + } + if (result.experiment_description !== undefined) { + environment.experimentDescription = result.experiment_description; + } + if (result.creation_time !== undefined) { + environment.creationTime = result.creation_time; + } + if (_.isEqual(this.environment, environment)) return; + this.environment = environment; + this.emitChange(); + }); + } + public getDataLocation(): string { + return this.environment ? this.environment.dataLocation : ''; + } + public getWindowTitle(): string { + return this.environment ? this.environment.windowTitle : ''; + } + public getExperimentName(): string { + return this.environment ? this.environment.experimentName : ''; + } + public getExperimentDescription(): string { + return this.environment ? this.environment.experimentDescription : ''; + } + public getCreationTime(): number | null { + return this.environment ? this.environment.creationTime : null; + } +} + +export const environmentStore = new EnvironmentStore(); diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/experimentsStore.ts b/saved_models/tensorboard/tensorboard/components/tf_backend/experimentsStore.ts new file mode 100644 index 0000000000000000000000000000000000000000..ea8b0697b09a4a0d7244e85d756d00d321ad0bc4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/experimentsStore.ts @@ -0,0 +1,41 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as _ from 'lodash'; + +import {getRouter} from './router'; +import {BaseStore} from './baseStore'; +import {Experiment} from './type'; + +export class ExperimentsStore extends BaseStore { + private _experiments: Experiment[] = []; + load() { + const url = getRouter().experiments(); + return this.requestManager.request(url).then((newExperiments) => { + if (!_.isEqual(this._experiments, newExperiments)) { + this._experiments = newExperiments; + this.emitChange(); + } + }); + } + /** + * Get the current list of experiments. If no data is available, this will be + * an empty array (i.e., there is no distinction between "no experiment" and + * "no experiment yet"). + */ + getExperiments(): Experiment[] { + return this._experiments.slice(); + } +} +export const experimentsStore = new ExperimentsStore(); diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/requestManager.ts b/saved_models/tensorboard/tensorboard/components/tf_backend/requestManager.ts new file mode 100644 index 0000000000000000000000000000000000000000..c83e5cd6407ff1f71d0df38b0c31d07aecf045ce --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/requestManager.ts @@ -0,0 +1,299 @@ +/* Copyright 2015 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the 'License'); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an 'AS IS' BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +interface ResolveReject { + resolve: Function; + reject: Function; +} + +/** + * Manages many fetch requests. Launches up to nSimultaneousRequests + * simultaneously, and maintains a LIFO queue of requests to process when + * more urls are requested than can be handled at once. The queue can be + * cleared. + * + * When a request is made, a Promise is returned which resolves with the + * parsed JSON result from the request. + */ +export class RequestCancellationError extends Error { + public name = 'RequestCancellationError'; +} + +export class InvalidRequestOptionsError extends Error { + public name = 'InvalidRequestOptionsError'; + constructor(msg: string) { + super(msg); + // The following is needed due to a limitation of TypeScript when + // extending 'Error'. See: https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work + Object.setPrototypeOf(this, InvalidRequestOptionsError.prototype); + } +} + +export class RequestNetworkError extends Error { + public name: string; + public req: XMLHttpRequest; + public url: string; + constructor(req: XMLHttpRequest, url) { + super(); + this.message = `RequestNetworkError: ${req.status} at ${url}`; + this.name = 'RequestNetworkError'; + this.req = req; + this.url = url; + } +} + +/** The HTTP method-type to use. Currently only 'GET' and 'POST' are + * supported. + */ +export enum HttpMethodType { + GET = 'GET', + POST = 'POST', +} + +/** + * Holds options that can be used to configure the HTTP request. + */ +export class RequestOptions { + public methodType: HttpMethodType; + /** The content-type request header to use. Cannot be set for a GET request.*/ + public contentType?: string; + /** The request body to use. This is the object that is passed to the + * XMLHttpRequest.send() method. If not given the 'send' method is called + * without an argument. + */ + public body?: any; + /** If specified, this will be the value set in the + * XMLHttpRequest.withCredentials property. + */ + public withCredentials?: boolean; + // Validates this object. Throws InvalidRequestOptionsError on error. + public validate() { + if (this.methodType === HttpMethodType.GET) { + // We don't allow a body for a GET. + if (this.body) { + throw new InvalidRequestOptionsError( + 'body must be missing for a GET request.' + ); + } + } + // We allow body-less or contentType-less POSTs even if they don't + // make much sense. + } +} + +// Form data for a POST request as a convenient multidict interface, +// since the built-in `FormData` type doesn't have a value constructor. +// +// A raw string value is equivalent to a singleton array, and thus an +// empty array value is equivalent to omitting the key entirely. +export interface PostData { + [key: string]: string | string[]; +} + +export class RequestManager { + private _queue: ResolveReject[]; + private _maxRetries: number; + private _nActiveRequests: number; + private _nSimultaneousRequests: number; + constructor(nSimultaneousRequests = 1000, maxRetries = 3) { + this._queue = []; + this._nActiveRequests = 0; + this._nSimultaneousRequests = nSimultaneousRequests; + this._maxRetries = maxRetries; + } + /** + * Gives a promise that loads assets from given url (respects queuing). If + * postData is provided, this request will use POST, not GET. This is an + * object mapping POST keys to string values. + */ + public request(url: string, postData?: PostData): Promise { + const requestOptions = requestOptionsFromPostData(postData); + return this.requestWithOptions(url, requestOptions); + } + public requestWithOptions( + url: string, + requestOptions: RequestOptions + ): Promise { + requestOptions.validate(); + const promise = new Promise((resolve, reject) => { + const resolver = {resolve: resolve, reject: reject}; + this._queue.push(resolver); + this.launchRequests(); + }) + .then(() => { + return this.promiseWithRetries(url, this._maxRetries, requestOptions); + }) + .then( + (response) => { + // Success - Let's free space for another active + // request, and launch it + this._nActiveRequests--; + this.launchRequests(); + return response; + }, + (rejection) => { + if (rejection.name === 'RequestNetworkError') { + // If we failed due to network error, we should + // decrement + // _nActiveRequests because this request was + // active + this._nActiveRequests--; + this.launchRequests(); + } + return Promise.reject(rejection); + } + ); + return promise; + } + public fetch(url: string, fetchOptions?: RequestInit): Promise { + return new Promise((resolve, reject) => { + const resolver = {resolve: resolve, reject: reject}; + this._queue.push(resolver); + this.launchRequests(); + }).then(() => { + let numTries = 1; + return new Promise((resolve) => { + const retryFetch = () => { + fetch(url, fetchOptions).then((response) => { + if (!response.ok && this._maxRetries > numTries) { + numTries++; + retryFetch(); + return; + } + resolve(response); + this._nActiveRequests--; + this.launchRequests(); + }); + }; + retryFetch(); + }); + }); + } + public clearQueue() { + while (this._queue.length > 0) { + this._queue + .pop() + .reject( + new RequestCancellationError('Request cancelled by clearQueue') + ); + } + } + /* Return number of currently pending requests */ + public activeRequests(): number { + return this._nActiveRequests; + } + /* Return total number of outstanding requests (includes queue) */ + public outstandingRequests(): number { + return this._nActiveRequests + this._queue.length; + } + private launchRequests() { + while ( + this._nActiveRequests < this._nSimultaneousRequests && + this._queue.length > 0 + ) { + this._nActiveRequests++; + this._queue.pop().resolve(); + } + } + /** + * Try to request a given URL using overwritable _promiseFromUrl method. + * If the request fails for any reason, we will retry up to maxRetries + * times. In practice, this will help us paper over transient network issues + * like '502 Bad Gateway'. + * By default, Chrome displays network errors in console, so + * the user will be able to tell when the requests are failing. I think this + * is a feature, if the request failures and retries are causing any + * pain to users, they can see it and file issues. + */ + private promiseWithRetries( + url: string, + maxRetries: number, + requestOptions: RequestOptions + ) { + var success = (x) => x; + var failure = (x) => { + if (maxRetries > 0) { + return this.promiseWithRetries(url, maxRetries - 1, requestOptions); + } else { + return Promise.reject(x); + } + }; + return this._promiseFromUrl(url, requestOptions).then(success, failure); + } + /* Actually get promise from url using XMLHttpRequest */ + protected _promiseFromUrl(url: string, requestOptions: RequestOptions) { + return new Promise((resolve, reject) => { + const req = buildXMLHttpRequest( + requestOptions.methodType, + url, + requestOptions.withCredentials, + requestOptions.contentType + ); + req.onload = function () { + if (req.status === 200) { + resolve(JSON.parse(req.responseText)); + } else { + reject(new RequestNetworkError(req, url)); + } + }; + req.onerror = function () { + reject(new RequestNetworkError(req, url)); + }; + if (requestOptions.body) { + req.send(requestOptions.body); + } else { + req.send(); + } + }); + } +} + +function buildXMLHttpRequest( + methodType: HttpMethodType, + url: string, + withCredentials?: boolean, + contentType?: string +): XMLHttpRequest { + const req = new XMLHttpRequest(); + req.open(methodType, url); + if (withCredentials) { + req.withCredentials = withCredentials; + } + if (contentType) { + req.setRequestHeader('Content-Type', contentType); + } + return req; +} + +function requestOptionsFromPostData(postData?: PostData): RequestOptions { + const result = new RequestOptions(); + if (!postData) { + result.methodType = HttpMethodType.GET; + return result; + } + result.methodType = HttpMethodType.POST; + result.body = formDataFromDictionary(postData); + return result; +} + +function formDataFromDictionary(postData: PostData) { + const formData = new FormData(); + for (const [key, maybeValues] of Object.entries(postData)) { + const values = Array.isArray(maybeValues) ? maybeValues : [maybeValues]; + for (const value of values) { + formData.append(key, value); + } + } + return formData; +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/router.ts b/saved_models/tensorboard/tensorboard/components/tf_backend/router.ts new file mode 100644 index 0000000000000000000000000000000000000000..5cb11a3e9c17b27b52a2ff9000b892dec21e10e8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/router.ts @@ -0,0 +1,134 @@ +/* Copyright 2015 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the 'License'); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an 'AS IS' BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ExperimentId} from './type'; +import {QueryParams} from './urlPathHelpers'; + +const EXPERIMENTAL_PLUGINS_QUERY_PARAM = 'experimentalPlugin'; + +export interface Router { + environment: () => string; + experiments: () => string; + pluginRoute: ( + pluginName: string, + route: string, + params?: URLSearchParams + ) => string; + pluginsListing: () => string; + runs: () => string; + runsForExperiment: (id: ExperimentId) => string; +} + +/** + * Save the initial URL query params, before the AppRoutingEffects initialize, + * and before creating the router. + */ +const initialURLSearchParams = new URLSearchParams(window.location.search); +let _router: Router = createRouter(); + +/** + * Create a router for communicating with the TensorBoard backend. You + * can pass this to `setRouter` to make it the global router. + * + * @param dataDir {string=} The base prefix for data endpoints. + */ +export function createRouter( + dataDir = 'data', + urlSearchParams = initialURLSearchParams +): Router { + if (dataDir[dataDir.length - 1] === '/') { + dataDir = dataDir.slice(0, dataDir.length - 1); + } + return { + environment: () => createDataPath(dataDir, '/environment'), + experiments: () => createDataPath(dataDir, '/experiments'), + pluginRoute: ( + pluginName: string, + route: string, + params?: URLSearchParams + ): string => { + return createDataPath( + dataDir + '/plugin', + `/${pluginName}${route}`, + params + ); + }, + pluginsListing: () => + createDataPath( + dataDir, + '/plugins_listing', + createSearchParam({ + [EXPERIMENTAL_PLUGINS_QUERY_PARAM]: urlSearchParams.getAll( + EXPERIMENTAL_PLUGINS_QUERY_PARAM + ), + }) + ), + runs: () => createDataPath(dataDir, '/runs'), + runsForExperiment: (id) => { + return createDataPath( + dataDir, + '/experiment_runs', + createSearchParam({experiment: String(id)}) + ); + }, + }; +} + +/** + * @return {Router} the global router + */ +export function getRouter(): Router { + return _router; +} + +/** + * Set the global router, to be returned by future calls to `getRouter`. + * You may wish to invoke this if you are running a demo server with a + * custom path prefix, or if you have customized the TensorBoard backend + * to use a different path. + * + * @param {Router} router the new global router + */ +export function setRouter(router: Router): void { + if (router == null) { + throw new Error('Router required, but got: ' + router); + } + _router = router; +} + +function createDataPath( + dataDir: string, + route: string, + params: URLSearchParams = new URLSearchParams() +): string { + let relativePath = dataDir + route; + if (String(params)) { + const delimiter = route.includes('?') ? '&' : '?'; + relativePath += delimiter + String(params); + } + return relativePath; +} + +export function createSearchParam(params: QueryParams = {}): URLSearchParams { + const keys = Object.keys(params) + .sort() + .filter((k) => params[k]); + const searchParams = new URLSearchParams(); + keys.forEach((key) => { + const values = params[key]; + const array = Array.isArray(values) ? values : [values]; + array.forEach((val) => searchParams.append(key, val)); + }); + return searchParams; +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/runsStore.ts b/saved_models/tensorboard/tensorboard/components/tf_backend/runsStore.ts new file mode 100644 index 0000000000000000000000000000000000000000..d20a5a32652ee7ab5f4f755e693f9fa991987d7f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/runsStore.ts @@ -0,0 +1,40 @@ +/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as _ from 'lodash'; + +import {getRouter} from './router'; +import {BaseStore} from './baseStore'; + +export class RunsStore extends BaseStore { + private _runs: string[] = []; + load() { + const url = getRouter().runs(); + return this.requestManager.request(url).then((newRuns) => { + if (!_.isEqual(this._runs, newRuns)) { + this._runs = newRuns; + this.emitChange(); + } + }); + } + /** + * Get the current list of runs. If no data is available, this will be + * an empty array (i.e., there is no distinction between "no runs" and + * "no runs yet"). + */ + getRuns(): string[] { + return this._runs.slice(); + } +} +export const runsStore = new RunsStore(); diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/test/backendTests.ts b/saved_models/tensorboard/tensorboard/components/tf_backend/test/backendTests.ts new file mode 100644 index 0000000000000000000000000000000000000000..d0e64e500cfa660db4f7e8d5064a919b76da12a9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/test/backendTests.ts @@ -0,0 +1,212 @@ +/* Copyright 2015 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the 'License'); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an 'AS IS' BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +namespace tf_backend { + const {assert} = chai; + + describe('urlPathHelpers', () => { + it('addParams leaves input untouched when there are no parameters', () => { + const actual = addParams('http://foo', {a: undefined, b: undefined}); + const expected = 'http://foo'; + chai.assert.equal(actual, expected); + }); + it('addParams adds parameters to a URL without parameters', () => { + const actual = addParams('http://foo', { + a: '1', + b: ['2', '3+4'], + c: '5', + d: undefined, + }); + const expected = 'http://foo?a=1&b=2&b=3%2B4&c=5'; + chai.assert.equal(actual, expected); + }); + it('addParams adds parameters to a URL with parameters', () => { + const actual = addParams('http://foo?a=1', { + b: ['2', '3+4'], + c: '5', + d: undefined, + }); + const expected = 'http://foo?a=1&b=2&b=3%2B4&c=5'; + chai.assert.equal(actual, expected); + }); + }); + + function assertIsDatum(x) { + chai.assert.isNumber(x.step); + chai.assert.instanceOf(x.wall_time, Date); + } + + describe('backend tests', () => { + it('runToTag helpers work', () => { + const r2t: RunToTag = { + run1: ['foo', 'bar', 'zod'], + run2: ['zod', 'zoink'], + a: ['foo', 'zod'], + }; + const empty1: RunToTag = {}; + const empty2: RunToTag = {run1: [], run2: []}; + chai.assert.deepEqual(getRunsNamed(r2t), ['a', 'run1', 'run2']); + chai.assert.deepEqual(getTags(r2t), ['bar', 'foo', 'zod', 'zoink']); + chai.assert.deepEqual(filterTags(r2t, ['run1', 'run2']), getTags(r2t)); + chai.assert.deepEqual(filterTags(r2t, ['run1']), ['bar', 'foo', 'zod']); + chai.assert.deepEqual(filterTags(r2t, ['run2', 'a']), [ + 'foo', + 'zod', + 'zoink', + ]); + + chai.assert.deepEqual(getRunsNamed(empty1), []); + chai.assert.deepEqual(getTags(empty1), []); + + chai.assert.deepEqual(getRunsNamed(empty2), ['run1', 'run2']); + chai.assert.deepEqual(getTags(empty2), []); + }); + + describe('router', () => { + describe('prod mode', () => { + let router: Router; + beforeEach(() => { + router = createRouter('data'); + }); + + it('leading slash in pathPrefix is an absolute path', () => { + const router = createRouter('/data/'); + assert.equal(router.runs(), '/data/runs'); + }); + + it('returns complete pathname when pathPrefix omits slash', () => { + const router = createRouter('data/'); + assert.equal(router.runs(), 'data/runs'); + }); + + it('does not prune many leading slashes that forms full url', () => { + const router = createRouter('///data/hello'); + // This becomes 'http://data/hello/runs' + assert.equal(router.runs(), '///data/hello/runs'); + }); + + it('returns correct value for #environment', () => { + assert.equal(router.environment(), 'data/environment'); + }); + + it('returns correct value for #experiments', () => { + assert.equal(router.experiments(), 'data/experiments'); + }); + + describe('#pluginRoute', () => { + it('encodes slash correctly', () => { + assert.equal( + router.pluginRoute('scalars', '/scalar'), + 'data/plugin/scalars/scalar' + ); + }); + + it('encodes query param correctly', () => { + assert.equal( + router.pluginRoute( + 'scalars', + '/a', + createSearchParam({b: 'c', d: ['1', '2']}) + ), + 'data/plugin/scalars/a?b=c&d=1&d=2' + ); + }); + + it('does not put ? when passed an empty URLSearchParams', () => { + assert.equal( + router.pluginRoute('scalars', '/a', new URLSearchParams()), + 'data/plugin/scalars/a' + ); + }); + + it('encodes parenthesis correctly', () => { + assert.equal( + router.pluginRoute( + 'scalars', + '/a', + createSearchParam({foo: '()'}) + ), + 'data/plugin/scalars/a?foo=%28%29' + ); + }); + + it('deals with existing query param correctly', () => { + assert.equal( + router.pluginRoute( + 'scalars', + '/a?foo=bar', + createSearchParam({hello: 'world'}) + ), + 'data/plugin/scalars/a?foo=bar&hello=world' + ); + }); + + it('encodes query param the same as #addParams', () => { + assert.equal( + router.pluginRoute( + 'scalars', + '/a', + createSearchParam({b: 'c', d: ['1']}) + ), + addParams('data/plugin/scalars/a', {b: 'c', d: ['1']}) + ); + assert.equal( + router.pluginRoute( + 'scalars', + '/a', + createSearchParam({foo: '()'}) + ), + addParams('data/plugin/scalars/a', {foo: '()'}) + ); + }); + }); + + it('returns correct value for #runs', () => { + assert.equal(router.runs(), 'data/runs'); + }); + + it('returns correct value for #runsForExperiment', () => { + assert.equal( + router.runsForExperiment(1), + 'data/experiment_runs?experiment=1' + ); + }); + }); + + describe('#pluginsListing', () => { + it('returns /plugins_listing with no query params', () => { + const router = createRouter('data', new URLSearchParams('')); + assert.equal(router.pluginsListing(), 'data/plugins_listing'); + }); + + it('returns /plugins_listing with experimentalPlugin query params', () => { + const router = createRouter( + 'data', + new URLSearchParams( + 'experimentalPlugin=plugin1&' + + 'to_ignore=ignoreme&' + + 'experimentalPlugin=plugin2' + ) + ); + assert.equal( + router.pluginsListing(), + 'data/plugins_listing?' + + 'experimentalPlugin=plugin1&' + + 'experimentalPlugin=plugin2' + ); + }); + }); + }); + }); +} // namespace tf_backend diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/audio_run_run1_tag_audio1.json b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/audio_run_run1_tag_audio1.json new file mode 100644 index 0000000000000000000000000000000000000000..21a00f198d65cbc06e5db0c2bd3d1f6eb5149149 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/audio_run_run1_tag_audio1.json @@ -0,0 +1 @@ +[{"wall_time": 0, "step": 0, "query": "index=0&tag=audio1&run=run1", "content_type": "audio/wav"}] diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/compressedHistograms_run_run1_tag_histo1.json b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/compressedHistograms_run_run1_tag_histo1.json new file mode 100644 index 0000000000000000000000000000000000000000..8b4c088392db36c3172df15f50f21587640faf0f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/compressedHistograms_run_run1_tag_histo1.json @@ -0,0 +1 @@ +[[0, 0, [[0, -2.3150592308536755], [668, -2.0967547155036605], [1587, -1.4326244423655616], [3085, -0.8871306575801902], [5000, -0.09312398815580714], [6915, 0.2584093405812282], [8413, 0.8895470642005087], [9332, 1.3198979614453679], [10000, 1.6793308878855118]]], [100.0, 10, [[0, -1.3417572789138936], [668, -1.183563374619141], [1587, -0.48920418783271574], [3085, 0.29326906896076954], [5000, 0.56953784145381], [6915, 0.8684655583499333], [8413, 1.4133127368907181], [9332, 1.906140650457873], [10000, 2.135771998171255]]], [200.0, 20, [[0, -1.5066917525035333], [668, -1.3910909571770793], [1587, -0.902737218885874], [3085, -0.3807791904765027], [5000, 0.38900200905253046], [6915, 0.8209734209339482], [8413, 1.302385856695965], [9332, 1.9324626053521639], [10000, 2.957505317875451]]], [300.0, 30, [[0, -0.5430457051469562], [668, -0.4626161834245273], [1587, 0.21573949543027715], [3085, 0.37353741100174215], [5000, 0.6891407881591103], [6915, 1.0927156232630852], [8413, 1.2745337159550916], [9332, 1.4321116832891605], [10000, 2.1913774993059034]]], [400.0, 40, [[0, -0.3584790755077172], [668, -0.33301611509753215], [1587, -0.1089466072951948], [3085, 0.5792199847585249], [5000, 1.220854943811942], [6915, 1.759829438421432], [8413, 2.3072559906741614], [9332, 2.753036118353921], [10000, 3.0267252195784047]]]] \ No newline at end of file diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/example.json b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/example.json new file mode 100644 index 0000000000000000000000000000000000000000..8adc6fb896a873d0ade470cedf9363f77834c2f6 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/example.json @@ -0,0 +1,4 @@ +{ + "foo": 3, + "bar": "zoidberg" +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/histograms_run_run1_tag_histo1.json b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/histograms_run_run1_tag_histo1.json new file mode 100644 index 0000000000000000000000000000000000000000..a5600a356e8277e58be3b2891c3e328d058b5d08 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/histograms_run_run1_tag_histo1.json @@ -0,0 +1 @@ +[[400.0, 40, [-0.3584790755077172, 3.0267252195784047, 20.0, 24.012225532303315, 48.29045006426564, [-0.35363819004775493, -0.29226296698161564, -0.19961953895336082, 0.3214892636797772, 0.5177616740489182, 0.56953784145381, 0.6264916255991911, 0.7580548669750213, 0.8338603536725235, 1.220854943811942, 1.3429404381931362, 1.47723448201245, 1.624957930213695, 1.7874537232350647, 1.9661990955585713, 2.379100905625872, 2.6170109961884593, 3.1665833053880363], [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 2.0]]]] \ No newline at end of file diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/images_run_run1_tag_im1.json b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/images_run_run1_tag_im1.json new file mode 100644 index 0000000000000000000000000000000000000000..fd2a96b62fee897c4f16e13071bfe6a76d813b72 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/images_run_run1_tag_im1.json @@ -0,0 +1 @@ +[{"wall_time": 0, "step": 0, "query": "index=0&tag=im1&run=run1", "width": 1, "height": 1}] diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/individualImage_index_0_tag_im1_run_run1.png b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/individualImage_index_0_tag_im1_run_run1.png new file mode 100644 index 0000000000000000000000000000000000000000..f191b280ce91e6cb8c387735c10ef9bc5da6c83b Binary files /dev/null and b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/individualImage_index_0_tag_im1_run_run1.png differ diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/run_metadata_run_step99_tag_train.pbtxt b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/run_metadata_run_step99_tag_train.pbtxt new file mode 100644 index 0000000000000000000000000000000000000000..07ce4fad5392db0ee24f2cc132393b8c3c36d3d9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/run_metadata_run_step99_tag_train.pbtxt @@ -0,0 +1,17 @@ +step_stats { + dev_stats { + device: "/job:localhost/replica:0/task:0/cpu:0" + node_stats { + node_name: "_SOURCE" + all_start_micros: 1459365298611334 + op_start_rel_micros: 29 + op_end_rel_micros: 30 + all_end_rel_micros: 52 + memory { + allocator_name: "cpu" + } + timeline_label: "_SOURCE = NoOp()" + scheduled_micros: 1459365298611291 + } + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/runs.json b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/runs.json new file mode 100644 index 0000000000000000000000000000000000000000..413ddb9ab34d8599bf59b2451d914b49073aa3e7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/runs.json @@ -0,0 +1,32 @@ +{ + "run1": { + "images": [ + "im1" + ], + "audio": [ + "audio1" + ], + "scalars": [ + "cross_entropy (1)" + ], + "histograms": [ + "histo1" + ], + "compressedHistograms": [ + "histo1" + ], + "run_metadata": [ + "step99" + ], + "graph": false + }, + "fake_run_no_data": { + "images": ["im1", "im2"], + "audio": ["audio1", "audio2"], + "scalars": ["scalar2"], + "histograms": ["histo1"], + "compressedHistograms": ["histo1"], + "run_metadata": ["step99"], + "graph": true + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/scalars.json b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/scalars.json new file mode 100644 index 0000000000000000000000000000000000000000..bc9d3353d5fcaec6144b95e4f475a1b51d5a250c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/scalars.json @@ -0,0 +1 @@ +{"run1": {"cross_entropy (1)": [[0, 0, 0.0], [10.0, 1, 1.0], [20.0, 2, 4.0], [30.0, 3, 9.0], [40.0, 4, 16.0]]}} \ No newline at end of file diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/scalars_run_run1_tag_cross_entropy__281_29.json b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/scalars_run_run1_tag_cross_entropy__281_29.json new file mode 100644 index 0000000000000000000000000000000000000000..97b0062f0f0c39a0eb393d8599eb00eecfe866fa --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/test/data/scalars_run_run1_tag_cross_entropy__281_29.json @@ -0,0 +1 @@ +[[0, 0, 0.0], [10.0, 1, 1.0], [20.0, 2, 4.0], [30.0, 3, 9.0], [40.0, 4, 16.0]] \ No newline at end of file diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/test/requestManagerTests.ts b/saved_models/tensorboard/tensorboard/components/tf_backend/test/requestManagerTests.ts new file mode 100644 index 0000000000000000000000000000000000000000..4304fa188e93c35263e8a0e5e698d409ec793dc3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/test/requestManagerTests.ts @@ -0,0 +1,534 @@ +/* Copyright 2015 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the 'License'); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an 'AS IS' BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +namespace tf_backend { + const {expect} = chai; + + interface MockRequest { + resolve: Function; + reject: Function; + id: number; + url: string; + } + + class MockedRequestManager extends RequestManager { + private resolvers: Function[]; + private rejectors: Function[]; + public requestsDispatched: number; + constructor(maxRequests = 10, maxRetries = 3) { + super(maxRequests, maxRetries); + this.resolvers = []; + this.rejectors = []; + this.requestsDispatched = 0; + } + protected _promiseFromUrl(url) { + return new Promise((resolve, reject) => { + const mockJSON = { + ok: true, + json() { + return url; + }, + url, + status: 200, + }; + const mockFailedRequest: any = { + ok: false, + url, + status: 502, + }; + const mockFailure = new RequestNetworkError(mockFailedRequest, url); + this.resolvers.push(() => { + resolve(mockJSON); + }); + this.rejectors.push(() => { + reject(mockFailure); + }); + this.requestsDispatched++; + }); + } + public resolveFakeRequest() { + this.resolvers.pop()(); + } + public rejectFakeRequest() { + this.rejectors.pop()(); + } + public dispatchAndResolve() { + // Wait for at least one request to be dispatched, then resolve it. + this.waitForDispatch(1).then(() => this.resolveFakeRequest()); + } + public waitForDispatch(num) { + return waitForCondition(() => { + return this.requestsDispatched >= num; + }); + } + } + + /** Create a promise that returns when *check* returns true. + * May cause a test timeout if check never becomes true. + */ + + function waitForCondition(check: () => boolean): Promise { + return new Promise((resolve, reject) => { + const go = () => { + if (check()) { + resolve(); + } + setTimeout(go, 2); + }; + go(); + }); + } + + describe('backend', () => { + let sandbox; + beforeEach(() => { + sandbox = sinon.sandbox.create(); + }); + + afterEach(() => { + sandbox.restore(); + }); + + describe('request manager', () => { + it('request loads JSON properly', (done) => { + const rm = new RequestManager(); + const promise = rm.request('data/example.json'); + promise.then( + (response) => { + chai.assert.deepEqual(response, {foo: 3, bar: 'zoidberg'}); + done(); + }, + (reject) => { + throw new Error(reject); + } + ); + }); + + it('rejects on bad url', (done) => { + const rm = new RequestManager(5, 0); + const badUrl = '_bad_url_which_doesnt_exist.json'; + const promise = rm.request(badUrl); + promise.then( + (success) => { + done(new Error('the promise should have rejected')); + }, + (reject: RequestNetworkError) => { + chai.assert.include(reject.message, '404'); + chai.assert.include(reject.message, badUrl); + chai.assert.equal(reject.req.status, 404); + done(); + } + ); + }); + + it('can retry if requests fail', (done) => { + const rm = new MockedRequestManager(3, 5); + const r = rm.request('foo'); + rm.waitForDispatch(1) + .then(() => { + rm.rejectFakeRequest(); + return rm.waitForDispatch(2); + }) + .then(() => rm.resolveFakeRequest()); + r.then((success) => done()); + }); + + it('retries at most maxRetries times', (done) => { + const MAX_RETRIES = 2; + const rm = new MockedRequestManager(3, MAX_RETRIES); + const r = rm.request('foo'); + rm.waitForDispatch(1) + .then(() => { + rm.rejectFakeRequest(); + return rm.waitForDispatch(2); + }) + .then(() => { + rm.rejectFakeRequest(); + return rm.waitForDispatch(3); + }) + .then(() => { + rm.rejectFakeRequest(); + }); + + r.then( + (success) => done(new Error('The request should have failed')), + (failure) => done() + ); + }); + + it('requestManager only sends maxRequests requests at a time', (done) => { + const rm = new MockedRequestManager(3); + const r0 = rm.request('1'); + const r1 = rm.request('2'); + const r2 = rm.request('3'); + const r3 = rm.request('4'); + chai.assert.equal(rm.activeRequests(), 3, 'three requests are active'); + chai.assert.equal( + rm.outstandingRequests(), + 4, + 'four requests are pending' + ); + rm.waitForDispatch(3) + .then(() => { + chai.assert.equal( + rm.activeRequests(), + 3, + 'three requests are still active (1)' + ); + chai.assert.equal( + rm.requestsDispatched, + 3, + 'three requests were dispatched' + ); + rm.resolveFakeRequest(); + return rm.waitForDispatch(4); + }) + .then(() => { + chai.assert.equal( + rm.activeRequests(), + 3, + 'three requests are still active (2)' + ); + chai.assert.equal( + rm.requestsDispatched, + 4, + 'four requests were dispatched' + ); + chai.assert.equal( + rm.outstandingRequests(), + 3, + 'three requests are pending' + ); + rm.resolveFakeRequest(); + rm.resolveFakeRequest(); + rm.resolveFakeRequest(); + return r3; + }) + .then(() => { + chai.assert.equal(rm.activeRequests(), 0, 'all requests finished'); + chai.assert.equal( + rm.outstandingRequests(), + 0, + 'no requests pending' + ); + done(); + }); + }); + + it('queue continues after failures', (done) => { + const rm = new MockedRequestManager(1, 0); + const r0 = rm.request('1'); + const r1 = rm.request('2'); + rm.waitForDispatch(1).then(() => { + rm.rejectFakeRequest(); + }); + + r0.then( + (success) => done(new Error('r0 should have failed')), + (failure) => 'unused_argument' + ).then(() => rm.resolveFakeRequest()); + + // When the first request rejects, it should decrement nActiveRequests + // and then launch remaining requests in queue (i.e. this one) + r1.then( + (success) => done(), + (failure) => done(new Error(failure)) + ); + }); + + it('queue is LIFO', (done) => { + /* This test is a bit tricky. + * We want to verify that the RequestManager queue has LIFO semantics. + * So we construct three requests off the bat: A, B, C. + * So LIFO semantics ensure these will resolve in order A, C, B. + * (Because the A request launches immediately when we create it, it's + * not in queue) + * Then after resolving A, C moves out of queue, and we create X. + * So expected final order is A, C, X, B. + * We verify this with an external var that counts how many requests were + * resolved. + */ + const rm = new MockedRequestManager(1); + let nResolved = 0; + function assertResolutionOrder(expectedSpotInSequence) { + return () => { + nResolved++; + chai.assert.equal(expectedSpotInSequence, nResolved); + }; + } + + function launchThirdRequest() { + rm.request('started late but goes third') + .then(assertResolutionOrder(3)) + .then(() => rm.dispatchAndResolve()); + } + + rm.request('first') + .then(assertResolutionOrder(1)) // Assert that this one resolved first + .then(launchThirdRequest) + .then(() => rm.dispatchAndResolve()); // then trigger the next one + + rm.request('this one goes fourth') // created second, will go last + .then(assertResolutionOrder(4)) // assert it was the fourth to get resolved + .then(done); // finish the test + + rm.request('second') + .then(assertResolutionOrder(2)) + .then(() => rm.dispatchAndResolve()); + + rm.dispatchAndResolve(); + }); + + it('requestManager can clear queue', (done) => { + const rm = new MockedRequestManager(1); + let requestsResolved = 0; + let requestsRejected = 0; + const success = () => requestsResolved++; + const failure = (err) => { + chai.assert.equal(err.name, 'RequestCancellationError'); + requestsRejected++; + }; + const finishTheTest = () => { + chai.assert.equal(rm.activeRequests(), 0, 'no requests still active'); + chai.assert.equal( + rm.requestsDispatched, + 1, + 'only one req was ever dispatched' + ); + chai.assert.equal(rm.outstandingRequests(), 0, 'no pending requests'); + chai.assert.equal(requestsResolved, 1, 'one request got resolved'); + chai.assert.equal( + requestsRejected, + 4, + 'four were cancelled and threw errors' + ); + done(); + }; + rm.request('0').then(success, failure).then(finishTheTest); + rm.request('1').then(success, failure); + rm.request('2').then(success, failure); + rm.request('3').then(success, failure); + rm.request('4').then(success, failure); + chai.assert.equal(rm.activeRequests(), 1, 'one req is active'); + rm.waitForDispatch(1).then(() => { + chai.assert.equal(rm.activeRequests(), 1, 'one req is active'); + chai.assert.equal(rm.requestsDispatched, 1, 'one req was dispatched'); + chai.assert.equal( + rm.outstandingRequests(), + 5, + 'five reqs outstanding' + ); + rm.clearQueue(); + rm.resolveFakeRequest(); + // resolving the first request triggers finishTheTest + }); + }); + + it('throws an error when a GET request has a body', function () { + const rm = new RequestManager(); + const badOptions = new RequestOptions(); + badOptions.methodType = HttpMethodType.GET; + badOptions.body = 'a body'; + chai.assert.throws( + () => rm.requestWithOptions('http://www.google.com', badOptions), + InvalidRequestOptionsError + ); + }); + + describe('tests using sinon.fakeServer', function () { + let server; + + beforeEach(function () { + server = sinon.fakeServer.create(); + server.respondImmediately = true; + server.respondWith('{}'); + }); + + afterEach(function () { + server.restore(); + }); + + it('builds correct XMLHttpRequest when request(url) is called', function () { + const rm = new RequestManager(); + return rm.request('my_url').then(() => { + chai.assert.lengthOf(server.requests, 1); + chai.assert.equal(server.requests[0].url, 'my_url'); + chai.assert.equal(server.requests[0].requestBody, null); + chai.assert.equal(server.requests[0].method, HttpMethodType.GET); + chai.assert.notProperty( + server.requests[0].requestHeaders, + 'Content-Type' + ); + }); + }); + + it('builds correct XMLHttpRequest when request(url, postData) is called', function () { + const rm = new RequestManager(); + return rm + .request('my_url', {key1: 'value1', key2: 'value2'}) + .then(() => { + chai.assert.lengthOf(server.requests, 1); + chai.assert.equal(server.requests[0].url, 'my_url'); + chai.assert.equal(server.requests[0].method, HttpMethodType.POST); + chai.assert.instanceOf(server.requests[0].requestBody, FormData); + chai.assert.sameDeepMembers( + Array.from(server.requests[0].requestBody.entries()), + [ + ['key1', 'value1'], + ['key2', 'value2'], + ] + ); + }); + }); + + it('builds correct XMLHttpRequest when requestWithOptions is called', function () { + const rm = new RequestManager(); + const requestOptions = new RequestOptions(); + requestOptions.methodType = HttpMethodType.POST; + requestOptions.contentType = 'text/plain;charset=utf-8'; + requestOptions.body = 'the body'; + return rm.requestWithOptions('my_url', requestOptions).then(() => { + chai.assert.lengthOf(server.requests, 1); + chai.assert.equal(server.requests[0].url, 'my_url'); + chai.assert.equal(server.requests[0].method, HttpMethodType.POST); + chai.assert.equal(server.requests[0].requestBody, 'the body'); + chai.assert.equal( + server.requests[0].requestHeaders['Content-Type'], + 'text/plain;charset=utf-8' + ); + }); + }); + }); + + describe('fetch', () => { + beforeEach(function () { + this.stubbedFetch = sandbox.stub(window, 'fetch'); + this.clock = sandbox.useFakeTimers(); + + this.resolvesAfter = function ( + value: any, + timeInMs: number + ): Promise { + return new Promise((resolve) => { + setTimeout(() => resolve(value), timeInMs); + }); + }; + }); + + it('resolves', async function () { + this.stubbedFetch.returns( + Promise.resolve(new Response('Success', {status: 200})) + ); + const rm = new RequestManager(); + + const response = await rm.fetch('foo'); + + expect(response).to.have.property('ok', true); + expect(response).to.have.property('status', 200); + const body = await response.text(); + expect(body).to.equal('Success'); + }); + + it('retries', async function () { + this.stubbedFetch + .onCall(0) + .returns(Promise.resolve(new Response('Error 1', {status: 500}))); + this.stubbedFetch + .onCall(1) + .returns(Promise.resolve(new Response('Error 2', {status: 500}))); + this.stubbedFetch + .onCall(2) + .returns(Promise.resolve(new Response('Success', {status: 200}))); + const rm = new RequestManager(); + + const response = await rm.fetch('foo'); + + expect(response).to.have.property('ok', true); + expect(response).to.have.property('status', 200); + const body = await response.text(); + expect(body).to.equal('Success'); + }); + + it('gives up after max retries', async function () { + const failure = new Response('Error', {status: 500}); + this.stubbedFetch.returns(Promise.resolve(failure)); + const rm = new RequestManager(); + + const response = await rm.fetch('foo'); + + expect(this.stubbedFetch).to.have.been.calledThrice; + expect(response).to.have.property('ok', false); + expect(response).to.have.property('status', 500); + const body = await response.text(); + expect(body).to.equal('Error'); + }); + + it('sends requests concurrently', async function () { + this.stubbedFetch + .onCall(0) + .returns( + this.resolvesAfter(new Response('nay', {status: 200}), 3000) + ); + this.stubbedFetch + .onCall(1) + .returns(Promise.resolve(new Response('yay', {status: 200}))); + + const rm = new RequestManager(/** nSimultaneousRequests */ 2); + + const promise1 = rm.fetch('foo'); + const promise2 = rm.fetch('bar'); + + const secondResponse = await Promise.race([promise1, promise2]); + const secondBody = await secondResponse.text(); + expect(secondBody).to.equal('yay'); + + this.clock.tick(3000); + + const firstResponse = await promise1; + const firstBody = await firstResponse.text(); + expect(firstBody).to.equal('nay'); + }); + + it('queues requests', async function () { + this.stubbedFetch + .onCall(0) + .returns( + this.resolvesAfter(new Response('nay', {status: 200}), 3000) + ); + this.stubbedFetch + .onCall(1) + .returns(Promise.resolve(new Response('yay', {status: 200}))); + + const rm = new RequestManager(/** nSimultaneousRequests */ 1); + + const promise1 = rm.fetch('foo'); + const promise2 = rm.fetch('bar'); + + expect(rm.activeRequests()).to.equal(1); + expect(rm.outstandingRequests()).to.equal(2); + + this.clock.tick(3000); + + const firstResponse = await Promise.race([promise1, promise2]); + const firstBody = await firstResponse.text(); + expect(firstBody).to.equal('nay'); + + const secondResponse = await promise2; + const secondBody = await secondResponse.text(); + expect(secondBody).to.equal('yay'); + }); + }); + }); + }); +} // namespace tf_backend diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/test/tests.html b/saved_models/tensorboard/tensorboard/components/tf_backend/test/tests.html new file mode 100644 index 0000000000000000000000000000000000000000..899c9818cba0abfb8b9af65e49c15feeaf060741 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/test/tests.html @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/tf-backend-polymer.ts b/saved_models/tensorboard/tensorboard/components/tf_backend/tf-backend-polymer.ts new file mode 100644 index 0000000000000000000000000000000000000000..4d887a2e8d635596ddb251aec4d9d07549546587 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/tf-backend-polymer.ts @@ -0,0 +1,27 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {PolymerElement} from '@polymer/polymer'; +import {customElement} from '@polymer/decorators'; + +import * as tf_backend from './tf-backend'; + +// HACK: this Polymer component allows stores to be accessible from +// tf-ng-tensorboard by exposing otherwise mangled smybols. + +@customElement('tf-backend') +class TfBackend extends PolymerElement { + _template = null; + tf_backend = tf_backend; +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/tf-backend.ts b/saved_models/tensorboard/tensorboard/components/tf_backend/tf-backend.ts new file mode 100644 index 0000000000000000000000000000000000000000..f86822ea59a6438416d3a80296557a0b272e26b0 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/tf-backend.ts @@ -0,0 +1,24 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export * from './backend'; +export * from './baseStore'; +export * from './canceller'; +export * from './environmentStore'; +export * from './experimentsStore'; +export * from './requestManager'; +export * from './router'; +export * from './runsStore'; +export * from './type'; +export * from './urlPathHelpers'; diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/type.ts b/saved_models/tensorboard/tensorboard/components/tf_backend/type.ts new file mode 100644 index 0000000000000000000000000000000000000000..eeb8af8751acfddb0f774870a0b8cf78079a00fc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/type.ts @@ -0,0 +1,34 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export type ExperimentId = number; +export type RunId = number | null; +export type TagId = number; +export type Experiment = { + id: ExperimentId; + name: string; + startTime: number; +}; +export type Run = { + id: RunId; + name: string; + startTime: number; + tags: Tag[]; +}; +export type Tag = { + id: TagId; + name: string; + displayName: string; + pluginName: string; +}; diff --git a/saved_models/tensorboard/tensorboard/components/tf_backend/urlPathHelpers.ts b/saved_models/tensorboard/tensorboard/components/tf_backend/urlPathHelpers.ts new file mode 100644 index 0000000000000000000000000000000000000000..4079c6b7185ef2ef614919216cf8abe31cba5928 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_backend/urlPathHelpers.ts @@ -0,0 +1,62 @@ +/* Copyright 2015 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the 'License'); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an 'AS IS' BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +/** + * A query parameter value can either be a string or a list of strings. + * A string `"foo"` is encoded as `key=foo`; a list `["foo", "bar"]` is + * encoded as `key=foo&key=bar`. + */ +export type QueryValue = string | string[]; +export type QueryParams = { + [key: string]: QueryValue; +}; + +/** + * Add query parameters to a URL. Values will be URL-encoded. The URL + * may or may not already have query parameters. For convenience, + * parameters whose value is `undefined` will be dropped. + * + * For example, the following expressions are equivalent: + * + * addParams("http://foo", {a: "1", b: ["2", "3+4"], c: "5"}) + * addParams("http://foo?a=1", {b: ["2", "3+4"], c: "5", d: undefined}) + * "http://foo?a=1&b=2&b=3%2B4&c=5" + * + * @deprecated If used with `router.pluginRoute`, please use the queryParams + * argument. + */ +export function addParams(baseURL: string, params: QueryParams): string { + const keys = Object.keys(params) + .sort() + .filter((k) => params[k] !== undefined); + if (!keys.length) { + return baseURL; // no need to change '/foo' to '/foo?' + } + const delimiter = baseURL.indexOf('?') !== -1 ? '&' : '?'; + const parts = [].concat( + ...keys.map((key) => { + const rawValue = params[key]; + const values = Array.isArray(rawValue) ? rawValue : [rawValue]; + return values.map((value) => `${key}=${_encodeURIComponent(value)}`); + }) + ); + const query = parts.join('&'); + return baseURL + delimiter + query; +} + +function _encodeURIComponent(x: string): string { + // Replace parentheses for consistency with Python's urllib.urlencode. + return encodeURIComponent(x).replace(/\(/g, '%28').replace(/\)/g, '%29'); +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_card_heading/BUILD b/saved_models/tensorboard/tensorboard/components/tf_card_heading/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..d2826f114c528672b41da82c9fa7b749ff04c4c7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_card_heading/BUILD @@ -0,0 +1,22 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "tf_card_heading", + srcs = [ + "tf-card-heading.ts", + "tf-card-heading-style.ts", + "util.ts", + ], + strict_checks = False, + deps = [ + "//tensorboard/components/polymer:irons_and_papers", + "//tensorboard/components/polymer:register_style_dom_module", + "//tensorboard/components/tf_markdown_view", + "@npm//@polymer/decorators", + "@npm//@polymer/polymer", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/tf_card_heading/tf-card-heading-style.ts b/saved_models/tensorboard/tensorboard/components/tf_card_heading/tf-card-heading-style.ts new file mode 100644 index 0000000000000000000000000000000000000000..fcc09d2f5144b75d8f9fc585fec426fa93991a89 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_card_heading/tf-card-heading-style.ts @@ -0,0 +1,45 @@ +/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {registerStyleDomModule} from '../polymer/register_style_dom_module'; + +registerStyleDomModule({ + moduleName: 'tf-card-heading-style', + styleContent: ` + figcaption { + width: 100%; + } + + /** Horizontal line of labels. */ + .heading-row { + margin-top: -4px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + } + + /** Piece of text in the figure caption. */ + .heading-label { + flex-grow: 1; + margin-top: 4px; + max-width: 100%; + word-wrap: break-word; + } + + /** Makes label show on the right. */ + .heading-right { + flex-grow: 0; + } + `, +}); diff --git a/saved_models/tensorboard/tensorboard/components/tf_card_heading/tf-card-heading.ts b/saved_models/tensorboard/tensorboard/components/tf_card_heading/tf-card-heading.ts new file mode 100644 index 0000000000000000000000000000000000000000..e4f7b178ef482b00a19187b9bb98c2ee0bd7a1fc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_card_heading/tf-card-heading.ts @@ -0,0 +1,182 @@ +/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {PolymerElement, html} from '@polymer/polymer'; +import {computed, customElement, property} from '@polymer/decorators'; + +import '../tf_markdown_view/tf-markdown-view'; +import '../polymer/irons_and_papers'; + +import {pickTextColor} from './util'; +import './tf-card-heading-style'; + +/** + * A compact heading to appear above a single visualization, summarizing + * the metadata about a tag or run-tag combination. + * + * Properties (all optional): + * - `displayName`, `tag`, and `description` are properties from the + * relevant Summary protobuf. + * - `run` is the name of the TensorFlow run, if applicable. + * - `color` can be set to display a colored border at the left of the + * card; if left unset, no border will be displayed. + * - Any children of this component will be rendered below the above + * information, and can be used to display (for example) some small + * control widgets. + */ +@customElement('tf-card-heading') +class TfCardHeading extends PolymerElement { + static readonly template = html` +
+
+
+ + +
+ + +
+ + + + + + +
+ + `; + + @property({type: String}) + displayName: string = null; + + @property({type: String}) + tag: string = null; + + @property({type: String}) + run: string = null; + + @property({type: String}) + description: string = null; + + @property({type: String}) + color: string = null; + + @property({ + type: String, + computed: '_computeRunBackground(color)', + readOnly: true, + observer: '_updateHeadingStyle', + }) + _runBackground: string; + + @property({ + type: String, + computed: '_computeRunColor(color)', + readOnly: true, + observer: '_updateHeadingStyle', + }) + _runColor: string; + + _updateHeadingStyle() { + this.updateStyles({ + '--tf-card-heading-background-color': this._runBackground, + '--tf-card-heading-color': this._runColor, + }); + } + _computeRunBackground(color) { + return color || 'none'; + } + _computeRunColor(color) { + return pickTextColor(color); + } + + @computed('displayName', 'tag') + get _nameLabel(): string { + var displayName = this.displayName; + var tag = this.tag; + return displayName || tag || ''; + } + + @computed('displayName', 'tag') + get _tagLabel(): string { + var displayName = this.displayName; + var tag = this.tag; + return tag && tag !== displayName ? tag : ''; + } + + _toggleDescriptionDialog(e) { + const dialog = this.$.descriptionDialog as any; + dialog.positionTarget = e.target; + dialog.toggle(); + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_card_heading/util.ts b/saved_models/tensorboard/tensorboard/components/tf_card_heading/util.ts new file mode 100644 index 0000000000000000000000000000000000000000..cda5045a66a132562d574cf3a8c3df7950458c0f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_card_heading/util.ts @@ -0,0 +1,60 @@ +/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export function formatDate(date) { + if (!date) { + return ''; + } + // Turn things like "GMT-0700 (PDT)" into just "PDT". + return date.toString().replace(/GMT-\d+ \(([^)]+)\)/, '$1'); +} + +/** + * Returns CSS color that will contrast against background. + * @param {?string} background RGB hex color code, e.g. #eee, #eeeeee. + * @return {string} + */ +export function pickTextColor(background) { + const rgb = convertHexToRgb(background); + if (!rgb) { + return 'inherit'; + } + // See: http://www.w3.org/TR/AERT#color-contrast + const brightness = Math.round( + (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000 + ); + return brightness > 125 ? 'inherit' : '#eee'; +} + +/** + * Turns a hex string into an RGB array. + * @param {?string} color RGB hex color code, e.g. #eee, #eeeeee. + * @return {Array} + */ +function convertHexToRgb(color) { + if (!color) { + return null; + } + let m = color.match(/^#([0-9a-f]{1,2})([0-9a-f]{1,2})([0-9a-f]{1,2})$/); + if (!m) { + return null; + } + if (color.length == 4) { + for (var i = 1; i <= 3; i++) { + m[i] = m[i] + m[i]; + } + } + return [parseInt(m[1], 16), parseInt(m[2], 16), parseInt(m[3], 16)]; +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_categorization_utils/BUILD b/saved_models/tensorboard/tensorboard/components/tf_categorization_utils/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..ce8a5147bae87053d83f16334107374f63c11b88 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_categorization_utils/BUILD @@ -0,0 +1,25 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "tf_categorization_utils", + srcs = [ + "categorizationUtils.ts", + "tf-tag-filterer.ts", + ], + strict_checks = False, + deps = [ + "//tensorboard/components/polymer:irons_and_papers", + "//tensorboard/components/tf_backend", + "//tensorboard/components/tf_backend:type", + "//tensorboard/components/tf_storage", + "//tensorboard/components/vz_sorting", + "@npm//@polymer/decorators", + "@npm//@polymer/polymer", + "@npm//@types/lodash", + "@npm//lodash", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/tf_categorization_utils/categorizationUtils.ts b/saved_models/tensorboard/tensorboard/components/tf_categorization_utils/categorizationUtils.ts new file mode 100644 index 0000000000000000000000000000000000000000..3f438b83f94ed774e64a6c2fe411f92f631f7ad8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_categorization_utils/categorizationUtils.ts @@ -0,0 +1,207 @@ +/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +/** + * Functions to extract categories of tags and/or run-tag combinations + * from a run-to-tag mapping. The resulting categories can be fed to a + * `tf-category-paginated-view`. + */ +import * as _ from 'lodash'; +import {Experiment, Run} from '../tf_backend/type'; +import {getTags} from '../tf_backend/backend'; +import {compareTagNames} from '../vz_sorting/sorting'; + +export type RunToTag = { + [run: string]: string[]; +}; +export enum CategoryType { + SEARCH_RESULTS, + PREFIX_GROUP, +} +export interface PrefixGroupMetadata { + type: CategoryType; +} +export interface SearchResultsMetadata { + type: CategoryType; + compositeSearch?: boolean; + validRegex: boolean; + universalRegex: boolean; // is the search query ".*"? ("(?:)" doesn't count) +} + +export type CategoryMetadata = PrefixGroupMetadata | SearchResultsMetadata; +export interface Category { + name: string; + metadata: CategoryMetadata; + items: T[]; +} +export type TagCategory = Category<{ + tag: string; + runs: string[]; +}>; +export type RunTagCategory = Category<{ + tag: string; + run: string; +}>; +export type Series = { + experiment: Experiment; + run: string; + tag: string; +}; + +/** + * Organize data by tagPrefix, tag, then list of series which is comprised of + * an experiment and a run. + */ +export type SeriesCategory = Category<{ + tag: string; + series: Series[]; +}>; + +export type RawCategory = Category; // Intermediate structure. + +/** + * Compute a category containing the search results for the given query. + */ +export function categorizeBySearchQuery( + xs: string[], + query: string +): RawCategory { + const re = (() => { + try { + return new RegExp(query); + } catch (e) { + return null; + } + })(); + return { + name: query, + metadata: { + type: CategoryType.SEARCH_RESULTS, + validRegex: !!re, + universalRegex: query === '.*', + }, + items: re ? xs.filter((x) => x.match(re)) : [], + }; +} +/** + * Compute the quotient set $X/{\sim}$, where $a \sim b$ if $a$ and $b$ + * share a common `separator`-prefix. Order is preserved. + */ +export function categorizeByPrefix( + xs: string[], + separator = '/' +): RawCategory[] { + const categories = []; + const categoriesByName = {}; + xs.forEach((x) => { + const index = x.indexOf(separator); + const name = index >= 0 ? x.slice(0, index) : x; + if (!categoriesByName[name]) { + const category = { + name, + metadata: {type: CategoryType.PREFIX_GROUP}, + items: [], + }; + categoriesByName[name] = category; + categories.push(category); + } + categoriesByName[name].items.push(x); + }); + return categories; +} + +/* + * Compute the standard categorization of the given input, including + * both search categories and prefix categories. + */ +export function categorize(xs: string[], query = ''): RawCategory[] { + const byFilter = [categorizeBySearchQuery(xs, query)]; + const byPrefix = categorizeByPrefix(xs); + return [].concat(byFilter, byPrefix); +} + +export function categorizeTags( + runToTag: RunToTag, + selectedRuns: string[], + query?: string +): TagCategory[] { + const tags = getTags(runToTag); + const categories = categorize(tags, query); + const tagToRuns = createTagToRuns(_.pick(runToTag, selectedRuns)); + return categories.map(({name, metadata, items}) => ({ + name, + metadata, + items: items.map((tag) => ({ + tag, + runs: (tagToRuns.get(tag) || []).slice(), + })), + })); +} + +function createTagToRuns(runToTag: RunToTag): Map { + const tagToRun = new Map(); + Object.keys(runToTag).forEach((run) => { + runToTag[run].forEach((tag) => { + const runs = tagToRun.get(tag) || []; + runs.push(run); + tagToRun.set(tag, runs); + }); + }); + return tagToRun; +} + +function createRunToTagForPlugin(runs: Run[], pluginName: string): RunToTag { + const runToTag = {}; + runs.forEach((run) => { + runToTag[run.name] = run.tags + .filter((tag) => tag.pluginName == pluginName) + .map(({name}) => name); + }); + return runToTag; +} + +function compareTagRun( + a, + b: { + tag: string; + run: string; + } +): number { + const c = compareTagNames(a.tag, b.tag); + if (c != 0) { + return c; + } + return compareTagNames(a.run, b.run); +} + +export function categorizeRunTagCombinations( + runToTag: RunToTag, + selectedRuns: string[], + query?: string +): RunTagCategory[] { + const tagCategories = categorizeTags(runToTag, selectedRuns, query); + function explodeCategory(tagCategory: TagCategory): RunTagCategory { + const items = _.flatten( + tagCategory.items.map(({tag, runs}) => runs.map((run) => ({tag, run}))) + ); + items.sort(compareTagRun); + return { + name: tagCategory.name, + metadata: tagCategory.metadata, + items, + }; + } + return tagCategories.map(explodeCategory); +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_categorization_utils/test/categorizationUtilsTests.ts b/saved_models/tensorboard/tensorboard/components/tf_categorization_utils/test/categorizationUtilsTests.ts new file mode 100644 index 0000000000000000000000000000000000000000..5c8f6c754a9bed39224fa6ea8f9833ce45853a4b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_categorization_utils/test/categorizationUtilsTests.ts @@ -0,0 +1,213 @@ +/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the 'License'); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an 'AS IS' BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +namespace tf_categorization_utils { + const {assert, expect} = chai; + + describe('categorizationUtils', () => { + const {CategoryType} = tf_categorization_utils; + + describe('categorizeByPrefix', () => { + const {categorizeByPrefix} = tf_categorization_utils; + const metadata = {type: CategoryType.PREFIX_GROUP}; + + it('returns empty array on empty tags', () => { + assert.lengthOf(categorizeByPrefix([]), 0); + }); + + it('handles the singleton case', () => { + const input = ['a']; + const actual = categorizeByPrefix(input); + const expected = [ + { + name: 'a', + metadata, + items: ['a'], + }, + ]; + assert.deepEqual(categorizeByPrefix(input), expected); + }); + + it('handles a simple case', () => { + const input = [ + 'foo1/bar', + 'foo1/zod', + 'foo2/bar', + 'foo2/zod', + 'gosh/lod/mar', + 'gosh/lod/ned', + ]; + const actual = categorizeByPrefix(input); + const expected = [ + {name: 'foo1', metadata, items: ['foo1/bar', 'foo1/zod']}, + {name: 'foo2', metadata, items: ['foo2/bar', 'foo2/zod']}, + {name: 'gosh', metadata, items: ['gosh/lod/mar', 'gosh/lod/ned']}, + ]; + assert.deepEqual(actual, expected); + }); + + it('presents categories in first-occurrence order', () => { + const input = ['e', 'f/1', 'g', 'a', 'f/2', 'b', 'c']; + const actual = categorizeByPrefix(input); + const expected = [ + {name: 'e', metadata, items: ['e']}, + {name: 'f', metadata, items: ['f/1', 'f/2']}, + {name: 'g', metadata, items: ['g']}, + {name: 'a', metadata, items: ['a']}, + {name: 'b', metadata, items: ['b']}, + {name: 'c', metadata, items: ['c']}, + ]; + assert.deepEqual(actual, expected); + }); + + it('handles cases where category names overlap item names', () => { + const input = ['a', 'a/a', 'a/b', 'a/c', 'b', 'b/a']; + const actual = categorizeByPrefix(input); + const expected = [ + {name: 'a', metadata, items: ['a', 'a/a', 'a/b', 'a/c']}, + {name: 'b', metadata, items: ['b', 'b/a']}, + ]; + assert.deepEqual(actual, expected); + }); + }); + + describe('categorizeBySearchQuery', () => { + const {categorizeBySearchQuery} = tf_categorization_utils; + const baseMetadata = { + type: CategoryType.SEARCH_RESULTS, + validRegex: true, + universalRegex: false, + }; + + it('properly selects just the items matching the query', () => { + const query = 'cd'; + const items = ['def', 'cde', 'bcd', 'abc']; + const actual = categorizeBySearchQuery(items, query); + const expected = { + name: query, + metadata: baseMetadata, + items: ['cde', 'bcd'], + }; + assert.deepEqual(actual, expected); + }); + + it('treats the query as a regular expression', () => { + const query = 'ba(?:na){2,}s'; + const items = [ + 'apples', + 'bananas', + 'pears', + 'more bananananas more fun', + ]; + const actual = categorizeBySearchQuery(items, query); + const expected = { + name: query, + metadata: baseMetadata, + items: ['bananas', 'more bananananas more fun'], + }; + assert.deepEqual(actual, expected); + }); + + it('yields an empty category when there are no items', () => { + const query = 'ba(?:na){2,}s'; + const items = []; + const actual = categorizeBySearchQuery(items, query); + const expected = {name: query, metadata: baseMetadata, items: []}; + assert.deepEqual(actual, expected); + }); + + it('yields a universal category when the query is empty', () => { + const query = ''; + const items = ['apples', 'bananas', 'pears', 'bananananas']; + const actual = categorizeBySearchQuery(items, query); + const expected = {name: query, metadata: baseMetadata, items}; + assert.deepEqual(actual, expected); + }); + + it('notes when the query is invalid', () => { + const query = ')))'; + const items = ['abc', 'bar', 'zod']; + const actual = categorizeBySearchQuery(items, query); + const expected = { + name: query, + metadata: {...baseMetadata, validRegex: false}, + items: [], + }; + assert.deepEqual(actual, expected); + }); + + it('notes when the query is ".*"', () => { + const query = '.*'; + const items = ['abc', 'bar', 'zod']; + const actual = categorizeBySearchQuery(items, query); + const expected = { + name: query, + metadata: {...baseMetadata, universalRegex: true}, + items, + }; + assert.deepEqual(actual, expected); + }); + }); + + describe('categorize', () => { + const {categorize} = tf_categorization_utils; + + it('merges the results of the query and the prefix groups', () => { + const query = 'ba(?:na){2,}s'; + const items = [ + 'vegetable/asparagus', + 'vegetable/broccoli', + 'fruit/apples', + 'fruit/bananas', + 'fruit/bananananas', + 'fruit/pears', + 'singleton', + ]; + const actual = categorize(items, query); + const expected = [ + { + name: query, + metadata: { + type: CategoryType.SEARCH_RESULTS, + validRegex: true, + universalRegex: false, + }, + items: ['fruit/bananas', 'fruit/bananananas'], + }, + { + name: 'vegetable', + metadata: {type: CategoryType.PREFIX_GROUP}, + items: ['vegetable/asparagus', 'vegetable/broccoli'], + }, + { + name: 'fruit', + metadata: {type: CategoryType.PREFIX_GROUP}, + items: [ + 'fruit/apples', + 'fruit/bananas', + 'fruit/bananananas', + 'fruit/pears', + ], + }, + { + name: 'singleton', + metadata: {type: CategoryType.PREFIX_GROUP}, + items: ['singleton'], + }, + ]; + assert.deepEqual(actual, expected); + }); + }); + }); +} // namespace tf_categorization_utils diff --git a/saved_models/tensorboard/tensorboard/components/tf_categorization_utils/test/tests.html b/saved_models/tensorboard/tensorboard/components/tf_categorization_utils/test/tests.html new file mode 100644 index 0000000000000000000000000000000000000000..c1b20a4330436645d62130e1c42619db270908e9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_categorization_utils/test/tests.html @@ -0,0 +1,25 @@ + + + + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_categorization_utils/tf-tag-filterer.ts b/saved_models/tensorboard/tensorboard/components/tf_categorization_utils/tf-tag-filterer.ts new file mode 100644 index 0000000000000000000000000000000000000000..ebeaf61a5d253ce7594714ecc5db2b1d2b564ada --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_categorization_utils/tf-tag-filterer.ts @@ -0,0 +1,67 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {PolymerElement, html} from '@polymer/polymer'; +import {customElement, property} from '@polymer/decorators'; + +import '../polymer/irons_and_papers'; +import {getStringInitializer, getStringObserver} from '../tf_storage/storage'; + +@customElement('tf-tag-filterer') +class TfTagFilterer extends PolymerElement { + static readonly template = html` + + + + + `; + + @property({ + type: String, + notify: true, + computed: '_computeTagFilter(_tagFilter)', + }) + tagFilter: string; + + @property({ + type: String, + observer: '_tagFilterObserver', + }) + _tagFilter: string = getStringInitializer('tagFilter', { + defaultValue: '', + useLocalStorage: false, + polymerProperty: '_tagFilter', + }).call(this); + + _tagFilterObserver = getStringObserver('tagFilter', { + defaultValue: '', + useLocalStorage: false, + polymerProperty: '_tagFilter', + }); + + _computeTagFilter() { + return this._tagFilter; + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_color_scale/BUILD b/saved_models/tensorboard/tensorboard/components/tf_color_scale/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..f8008d419a0b5640a4e886b20124b41877e189b8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_color_scale/BUILD @@ -0,0 +1,22 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "tf_color_scale", + srcs = [ + "colorScale.ts", + "palettes.ts", + "tf-color-scale-polymer.ts", + ], + strict_checks = False, + deps = [ + "//tensorboard/components/tf_backend", + "@npm//@polymer/decorators", + "@npm//@polymer/polymer", + "@npm//@types/d3", + "@npm//d3", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/tf_color_scale/colorScale.ts b/saved_models/tensorboard/tensorboard/components/tf_color_scale/colorScale.ts new file mode 100644 index 0000000000000000000000000000000000000000..60c7dd242cb4d109133460ec5cea9b8380908b7c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_color_scale/colorScale.ts @@ -0,0 +1,89 @@ +/* Copyright 2015 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as d3 from 'd3'; + +import {standard} from './palettes'; + +import {BaseStore} from '../tf_backend/baseStore'; +import {runsStore} from '../tf_backend/runsStore'; +import {experimentsStore} from '../tf_backend/experimentsStore'; + +// Example usage: +// runs = ["train", "test", "test1", "test2"] +// ccs = new ColorScale(); +// ccs.domain(runs); +// ccs.getColor("train"); +// ccs.getColor("test1"); +export class ColorScale { + private identifiers = d3.map(); + /** + * Creates a color scale with optional custom palette. + * @param {Array} palette The color palette to use, as an + * Array of hex strings. Defaults to the standard palette. + */ + constructor(private readonly palette: string[] = standard) {} + /** + * Set the domain of strings. + * @param {Array} strings - An array of possible strings to use as the + * domain for your scale. + */ + public setDomain(strings: string[]): this { + this.identifiers = d3.map(); + strings.forEach((s, i) => { + this.identifiers.set(s, this.palette[i % this.palette.length]); + }); + return this; + } + /** + * Use the color scale to transform an element in the domain into a color. + * @param {string} The input string to map to a color. + * @return {string} The color corresponding to that input string. + * @throws Will error if input string is not in the scale's domain. + */ + public getColor(s: string): string { + if (!this.identifiers.has(s)) { + throw new Error(`String ${s} was not in the domain.`); + } + return this.identifiers.get(s) as string; + } +} + +/** + * A color scale of a domain from a store. Automatically updated when the store + * emits a change. + */ +function createAutoUpdateColorScale( + store: BaseStore, + getDomain: () => string[] +): (runName: string) => string { + const colorScale = new ColorScale(); + function updateRunsColorScale(): void { + colorScale.setDomain(getDomain()); + } + store.addListener(updateRunsColorScale); + updateRunsColorScale(); + return (domain) => colorScale.getColor(domain); +} + +export const runsColorScale = createAutoUpdateColorScale(runsStore, () => + runsStore.getRuns() +); + +export const experimentsColorScale = createAutoUpdateColorScale( + experimentsStore, + () => { + return experimentsStore.getExperiments().map(({name}) => name); + } +); diff --git a/saved_models/tensorboard/tensorboard/components/tf_color_scale/palettes.ts b/saved_models/tensorboard/tensorboard/components/tf_color_scale/palettes.ts new file mode 100644 index 0000000000000000000000000000000000000000..8f61b10eaefe6b9d29cd17b4e7d68ebb3da997c2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_color_scale/palettes.ts @@ -0,0 +1,134 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export const palettes = { + googleStandard: [ + '#db4437', // google red 500 + '#ff7043', // deep orange 400 + '#f4b400', // google yellow 500 + '#0f9d58', // google green 500 + '#00796b', // teal 700 + '#00acc1', // cyan 600 + '#4285f4', // google blue 500 + '#5c6bc0', // indigo 400 + '#ab47bc', // purple 400 + ], + googleCool: [ + '#9e9d24', // lime 800 + '#0f9d58', // google green 500 + '#00796b', // teal 700 + '#00acc1', // cyan 600 + '#4285f4', // google blue 500 + '#5c6bc0', // indigo 400 + '#607d8b', // blue gray 500 + ], + googleWarm: [ + '#795548', // brown 500 + '#ab47bc', // purple 400 + '#f06292', // pink 300 + '#c2185b', // pink 700 + '#db4437', // google red 500 + '#ff7043', // deep orange 400 + '#f4b400', // google yellow 700 + ], + googleColorBlindAssist: [ + '#ff7043', // orange + '#00ACC1', // dark cyan + '#AB47BC', // bright purple + '#2A56C6', // dark blue + '#0b8043', // green + '#F7CB4D', // yellow + '#c0ca33', // lime + '#5e35b1', // purple + '#A52714', // red + ], + // A colorblind-friendly palette designed for TensorBoard by Paul Tol + // (https://personal.sron.nl/~pault/). + tensorboardColorBlindAssist: [ + '#ff7043', // orange + '#0077bb', // blue + '#cc3311', // red + '#33bbee', // cyan + '#ee3377', // magenta + '#009988', // teal + '#bbbbbb', // grey + ], + // These palettes try to be better for color differentiation. + // https://personal.sron.nl/~pault/ + colorBlindAssist1: [ + '#4477aa', + '#44aaaa', + '#aaaa44', + '#aa7744', + '#aa4455', + '#aa4488', + ], + colorBlindAssist2: [ + '#88ccee', + '#44aa99', + '#117733', + '#999933', + '#ddcc77', + '#cc6677', + '#882255', + '#aa4499', + ], + colorBlindAssist3: [ + '#332288', + '#6699cc', + '#88ccee', + '#44aa99', + '#117733', + '#999933', + '#ddcc77', + '#cc6677', + '#aa4466', + '#882255', + '#661100', + '#aa4499', + ], + colorBlindAssist4: [ + // Paul Tol's "Alternative Scheme for Qualitative Data". Preferred + // if `tensorboardColorBlindAssist` cannot be used for any reason. + '#4477aa', + '#66ccee', + '#228833', + '#ccbb44', + '#ee6677', + '#aa3377', + '#bbbbbb', + ], + // based on this palette: http://mkweb.bcgsc.ca/biovis2012/ + colorBlindAssist5: [ + '#FF6DB6', + '#920000', + '#924900', + '#DBD100', + '#24FF24', + '#006DDB', + '#490092', + ], + mldash: [ + '#E47EAD', + '#F4640D', + '#FAA300', + '#F5E636', + '#00A077', + '#0077B8', + '#00B7ED', + ], +}; + +export const standard = palettes.tensorboardColorBlindAssist; diff --git a/saved_models/tensorboard/tensorboard/components/tf_color_scale/test/colorScaleTests.ts b/saved_models/tensorboard/tensorboard/components/tf_color_scale/test/colorScaleTests.ts new file mode 100644 index 0000000000000000000000000000000000000000..0405075fe56a24ded0c424f735ad626e7ca36c27 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_color_scale/test/colorScaleTests.ts @@ -0,0 +1,47 @@ +/* Copyright 2015 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the 'License'); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an 'AS IS' BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +namespace tf_color_scale { + const {assert} = chai; + + describe('ColorScale', function () { + let ccs: ColorScale; + + beforeEach(function () { + ccs = new ColorScale(); + }); + + it('Returns consistent colors', function () { + ccs.setDomain(['train', 'eval', 'test']); + let trainColor = ccs.getColor('train'); + let trainColor2 = ccs.getColor('train'); + assert.equal(trainColor, trainColor2); + }); + + it('Returns consistent colors after new domain', function () { + ccs.setDomain(['train', 'eval']); + let trainColor = ccs.getColor('train'); + ccs.setDomain(['train', 'eval', 'test']); + let trainColor2 = ccs.getColor('train'); + assert.equal(trainColor, trainColor2); + }); + + it('Throws an error if string is not in the domain', function () { + ccs.setDomain(['red', 'yellow', 'green']); + assert.throws(() => { + ccs.getColor('WAT'); + }, 'String WAT was not in the domain.'); + }); + }); +} // namespace tf_color_scale diff --git a/saved_models/tensorboard/tensorboard/components/tf_color_scale/test/tests.html b/saved_models/tensorboard/tensorboard/components/tf_color_scale/test/tests.html new file mode 100644 index 0000000000000000000000000000000000000000..f3c7edfc61dc14dd610e182089150bfa3f9be943 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_color_scale/test/tests.html @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_color_scale/tf-color-scale-polymer.ts b/saved_models/tensorboard/tensorboard/components/tf_color_scale/tf-color-scale-polymer.ts new file mode 100644 index 0000000000000000000000000000000000000000..d55a5f96415dd59f7a9b2c1a302d51a84089e5c2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_color_scale/tf-color-scale-polymer.ts @@ -0,0 +1,27 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {PolymerElement} from '@polymer/polymer'; +import {customElement} from '@polymer/decorators'; + +import {runsColorScale} from './colorScale'; + +// HACK: this Polymer component allows stores to be accessible from +// tf-ng-tensorboard by exposing otherwise mangled smybols. + +@customElement('tf-color-scale') +class TfColorScale extends PolymerElement { + _template = null; + runsColorScale = runsColorScale; +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/BUILD b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..584673cf8e45190b4dd96f2d2687211b518fec3a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/BUILD @@ -0,0 +1,43 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "tf_dashboard_common", + srcs = [ + "array-update-helper.ts", + "dashboard-style.ts", + "data-loader-behavior.ts", + "run-color-style.ts", + "scrollbar-style.ts", + "tensorboard-color.ts", + "tf-dashboard-layout.ts", + "tf-downloader.ts", + "tf-dropdown-trigger.ts", + "tf-filterable-checkbox-dropdown.ts", + "tf-filterable-checkbox-list.ts", + "tf-multi-checkbox.ts", + "tf-no-data-warning.ts", + "tf-option-selector.ts", + ], + strict_checks = False, + deps = [ + "//tensorboard/components/polymer:irons_and_papers", + "//tensorboard/components/polymer:legacy_element_mixin", + "//tensorboard/components/polymer:paper_inky_focus_behavior", + "//tensorboard/components/polymer:register_style_dom_module", + "//tensorboard/components/polymer:utils_mixin", + "//tensorboard/components/tf_backend", + "//tensorboard/components/tf_color_scale", + "//tensorboard/components/tf_storage", + "//tensorboard/components/vz_sorting", + "@npm//@polymer/decorators", + "@npm//@polymer/polymer", + "@npm//@types/d3", + "@npm//@types/lodash", + "@npm//d3", + "@npm//lodash", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/array-update-helper.ts b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/array-update-helper.ts new file mode 100644 index 0000000000000000000000000000000000000000..fae0f75bc69edda897decfaf76f23ced7e56938c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/array-update-helper.ts @@ -0,0 +1,61 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {PolymerElement} from '@polymer/polymer'; + +export class ArrayUpdateHelper extends PolymerElement { + updateArrayProp( + prop: string, + value: Array, + getKey: (item: any, ind: number) => string + ) { + let orig = this.get(prop); + const newVal = value; + if (!Array.isArray(newVal)) { + throw RangeError(`Expected new value to '${prop}' to be an array.`); + } + // In case using ComplexObserver, the method can be invoked before the prop + // had a chance to initialize properly. + if (!Array.isArray(orig)) { + orig = []; + this.set(prop, orig); + } + const lookup = new Set(newVal.map((item, i) => getKey(item, i))); + let origInd = 0; + let newValInd = 0; + while (origInd < orig.length && newValInd < newVal.length) { + if (!lookup.has(getKey(orig[origInd], origInd))) { + this.splice(prop, origInd, 1); + continue; + } else if ( + getKey(orig[origInd], origInd) == getKey(newVal[newValInd], newValInd) + ) { + // update the element. + // TODO(stephanwlee): We may be able to update the original reference of + // the `value` by deep-copying the new value over. + this.set(`${prop}.${origInd}`, newVal[newValInd]); + } else { + this.splice(prop, origInd, 0, newVal[newValInd]); + } + newValInd++; + origInd++; + } + if (origInd < orig.length) { + this.splice(prop, origInd); + } + if (newValInd < newVal.length) { + this.push(prop, ...newVal.slice(newValInd)); + } + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/dashboard-style.ts b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/dashboard-style.ts new file mode 100644 index 0000000000000000000000000000000000000000..178cfe7b231f18cda6254b790244f25ee8dd73c7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/dashboard-style.ts @@ -0,0 +1,117 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {registerStyleDomModule} from '../polymer/register_style_dom_module'; +import '../polymer/irons_and_papers'; + +registerStyleDomModule({ + moduleName: 'dashboard-style', + styleDependencies: ['iron-flex'], + styleContent: ` + :host { + --sidebar-vertical-padding: 15px; + --sidebar-left-padding: 30px; + } + + [slot='sidebar'] { + box-sizing: border-box; + display: flex; + flex-direction: column; + height: 100%; + margin-right: 10px; + overflow-x: hidden; + padding: 5px 0; + text-overflow: ellipsis; + } + + .settings { + min-height: 50px; + overflow-x: hidden; + overflow-y: auto; + will-change: transform; + } + + .runs-selector { + display: flex; + flex-grow: 1; + min-height: 200px; + } + + tf-runs-selector { + flex-grow: 1; + flex-shrink: 1; + left: var(--sidebar-left-padding); + max-height: calc(100% - var(--sidebar-vertical-padding) * 2); + overflow: hidden; + position: absolute; + right: 0; + } + + .search-input { + margin: 10px 5px 0 10px; + } + + .sidebar-section { + border-top: solid 1px rgba(0, 0, 0, 0.12); + margin-right: 10px; + padding: var(--sidebar-vertical-padding) 0 + var(--sidebar-vertical-padding) var(--sidebar-left-padding); + position: relative; + overflow: hidden; + } + + .sidebar-section:first-of-type { + border: none; + } + + .sidebar-section paper-button { + margin: 5px; + } + + .sidebar-section paper-button:first-of-type { + margin-left: 0 !important; + } + + .sidebar-section paper-button:last-of-type { + margin-right: 0 !important; + } + + .sidebar-section > :first-child { + margin-top: 0; + padding-top: 0; + } + + .sidebar-section > :last-child { + margin-bottom: 0; + padding-bottom: 0; + } + + .sidebar-section h3 { + color: var(--paper-grey-800); + display: block; + font-size: 14px; + font-weight: normal; + margin: 10px 0 5px; + pointer-events: none; + } + + paper-checkbox { + --paper-checkbox-checked-color: var(--tb-ui-dark-accent); + --paper-checkbox-unchecked-color: var(--tb-ui-dark-accent); + font-size: 15px; + margin-top: 5px; + } + `, +}); diff --git a/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/data-loader-behavior.ts b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/data-loader-behavior.ts new file mode 100644 index 0000000000000000000000000000000000000000..dc7b2c23ab17fa923612b11ba6057cd218ad71fa --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/data-loader-behavior.ts @@ -0,0 +1,245 @@ +/* Copyright 2015 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {PolymerElement} from '@polymer/polymer'; +import * as _ from 'lodash'; + +import {CancelResult, Canceller} from '../tf_backend/canceller'; +import {RequestManager} from '../tf_backend/requestManager'; + +type CacheKey = string; + +// NOT_LOADED is implicit +export enum LoadState { + LOADING, + LOADED, +} + +export interface DataLoaderBehaviorInterface + extends PolymerElement { + active: boolean; + reset(): void; + reload(): void; + dataToLoad: Item[]; +} + +// A function that takes a list of items and asynchronously fetches the +// data for those items. As each item loads, it should invoke the +// `onLoad` callback with an `{item, data}` pair to update the cache. +// After all items have finished loading, it should invoke the +// `onFinish` callback. Conceptually, that this function accepts +// `onLoad` and `onFinish` as arguments is as if it returned an +// Observable-style stream of `{item, data}`-pairs, CPS-transformed. +// +// Used in `DataLoaderBehavior.requestData`. +export interface RequestDataCallback { + ( + items: Item[], + onLoad: (kv: {item: Item; data: Data}) => void, + onFinish: () => void + ): void; +} + +export function DataLoaderBehavior( + superClass: new () => PolymerElement +): new () => DataLoaderBehaviorInterface { + return class DataLoaderBehaviorImpl + extends superClass + implements DataLoaderBehaviorInterface { + active!: boolean; + + /** + * A unique identifiable string. When changes, it expunges the data + * cache. + */ + loadKey = ''; + + // List of items to be loaded. By default, items are passed to + // `requestData` to fetch data. When the request resolves, invokes + // `loadDataCallback` with the datum and its response. + dataToLoad: Item[] = []; + + /** + * A function that takes an item as an input and returns a unique + * identifiable string. Used for caching purposes. + */ + getDataLoadName = (item: Item): CacheKey => String(item); + + /** + * A function that takes as inputs: + * 1. Implementing component of data-loader-behavior. + * 2. datum of the request. + * 3. The response received from the data URL. + * This function will be called when a response from a request to that + * data URL is successfully received. + */ + loadDataCallback!: (component: this, item: Item, data: Data) => void; + + // Function that actually loads data from the network. See docs on + // `RequestDataCallback` for details. + requestData: RequestDataCallback; + + dataLoading = false; + + // The standard Node.isConnected doesn't seem to be set reliably, so we + // wire up our own property manually. + _isConnected = false; + + connectedCallback() { + super.connectedCallback(); + this._isConnected = true; + } + + disconnectedCallback() { + super.disconnectedCallback(); + this._isConnected = false; + } + + static get properties() { + return { + active: { + type: Boolean, + observer: '_loadDataIfActive', + }, + _isConnected: {type: Boolean}, + loadKey: {type: String}, + dataToLoad: {type: Array}, + getDataLoadName: {type: Object}, + loadDataCallback: {type: Object}, + requestData: {type: Object}, + }; + } + + static get observers() { + return ['_dataToLoadChanged(_isConnected, dataToLoad.*)']; + } + + /* + * A map of a cache key to LoadState. If a cacheKey does not exist in the + * map, it is considered NOT_LOADED. + * Invoking `reload` or a change in `loadKey` clears the cache. + */ + + _dataLoadState = new Map(); + + _canceller = new Canceller(); + + _loadDataAsync: null | number = null; + + _loadData = _.throttle(this._loadDataImpl, 100, { + leading: true, + trailing: true, + }); + + onLoadFinish() { + // Override to do something useful. + } + + reload() { + this._dataLoadState.clear(); + this._loadData(); + } + + reset() { + // https://github.com/tensorflow/tensorboard/issues/1499 + // Cannot use the observer to observe `loadKey` changes directly. + if (this._loadDataAsync != null) { + clearTimeout(this._loadDataAsync); + this._loadDataAsync = null; + } + if (this._canceller) this._canceller.cancelAll(); + if (this._dataLoadState) this._dataLoadState.clear(); + if (this._isConnected) this._loadData(); + } + + _dataToLoadChanged() { + if (this._isConnected) this._loadData(); + } + + detached() { + // Note: Cannot call canceller.cancelAll since it will poison the cache. + // detached gets called when a component gets unmounted from the document + // but it can be re-mounted. When remounted, poisoned cache will manifest. + // t=0: dataLoadState: 'a' = loading + // t=10: unmount + // t=20: request for 'a' resolves but we do not change the loadState + // because we do not want to set one if, instead, it was resetted at t=10. + if (this._loadDataAsync != null) { + clearTimeout(this._loadDataAsync); + this._loadDataAsync = null; + } + } + _loadDataIfActive() { + if (this.active) { + this._loadData(); + } + } + _loadDataImpl() { + if (!this.active) return; + if (this._loadDataAsync !== null) clearTimeout(this._loadDataAsync); + this._loadDataAsync = setTimeout( + this._canceller.cancellable((result) => { + if (result.cancelled) { + return; + } + this.dataLoading = true; + const dirtyItems = this.dataToLoad.filter((datum) => { + const cacheKey = this.getDataLoadName(datum); + return !this._dataLoadState.has(cacheKey); + }); + for (const item of dirtyItems) { + const cacheKey = this.getDataLoadName(item); + this._dataLoadState.set(cacheKey, LoadState.LOADING); + } + const onLoad = this._canceller.cancellable( + (result: CancelResult<{item: Item; data: Data}>) => { + if (result.cancelled) { + return; + } + const {item, data} = result.value; + const cacheKey = this.getDataLoadName(item); + this._dataLoadState.set(cacheKey, LoadState.LOADED); + this.loadDataCallback(this, item, data); + } + ); + const onFinish = this._canceller.cancellable( + (result: CancelResult) => { + // Only notify of data load if the load was not cancelled. + if (!result.cancelled) { + const keysFetched = result.value as any; + const fetched = new Set( + dirtyItems.map((item) => this.getDataLoadName(item)) + ); + const shouldNotify = this.dataToLoad.some((datum) => + fetched.has(this.getDataLoadName(datum)) + ); + if (shouldNotify) { + this.onLoadFinish(); + } + this._loadDataAsync = null; + } + const isDataFetchPending = Array.from( + this._dataLoadState.values() + ).includes(LoadState.LOADING); + if (!isDataFetchPending) { + this.dataLoading = false; + } + } + ); + this.requestData(dirtyItems, onLoad, () => onFinish(undefined)); + }) + ); + } + }; +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/run-color-style.ts b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/run-color-style.ts new file mode 100644 index 0000000000000000000000000000000000000000..4b00f65546bd6280d9a5c51f9664444347021907 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/run-color-style.ts @@ -0,0 +1,76 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {registerStyleDomModule} from '../polymer/register_style_dom_module'; + +registerStyleDomModule({ + moduleName: 'run-color-style', + styleContent: ` + [color-class='light-blue'] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-light-blue-500); + --paper-checkbox-checked-ink-color: var(--paper-light-blue-500); + --paper-checkbox-unchecked-color: var(--paper-light-blue-900); + --paper-checkbox-unchecked-ink-color: var(--paper-light-blue-900); + } + [color-class='red'] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-red-500); + --paper-checkbox-checked-ink-color: var(--paper-red-500); + --paper-checkbox-unchecked-color: var(--paper-red-900); + --paper-checkbox-unchecked-ink-color: var(--paper-red-900); + } + [color-class='green'] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-green-500); + --paper-checkbox-checked-ink-color: var(--paper-green-500); + --paper-checkbox-unchecked-color: var(--paper-green-900); + --paper-checkbox-unchecked-ink-color: var(--paper-green-900); + } + [color-class='purple'] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-purple-500); + --paper-checkbox-checked-ink-color: var(--paper-purple-500); + --paper-checkbox-unchecked-color: var(--paper-purple-900); + --paper-checkbox-unchecked-ink-color: var(--paper-purple-900); + } + [color-class='teal'] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-teal-500); + --paper-checkbox-checked-ink-color: var(--paper-teal-500); + --paper-checkbox-unchecked-color: var(--paper-teal-900); + --paper-checkbox-unchecked-ink-color: var(--paper-teal-900); + } + [color-class='pink'] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-pink-500); + --paper-checkbox-checked-ink-color: var(--paper-pink-500); + --paper-checkbox-unchecked-color: var(--paper-pink-900); + --paper-checkbox-unchecked-ink-color: var(--paper-pink-900); + } + [color-class='orange'] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-orange-500); + --paper-checkbox-checked-ink-color: var(--paper-orange-500); + --paper-checkbox-unchecked-color: var(--paper-orange-900); + --paper-checkbox-unchecked-ink-color: var(--paper-orange-900); + } + [color-class='brown'] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-brown-500); + --paper-checkbox-checked-ink-color: var(--paper-brown-500); + --paper-checkbox-unchecked-color: var(--paper-brown-900); + --paper-checkbox-unchecked-ink-color: var(--paper-brown-900); + } + [color-class='indigo'] paper-checkbox { + --paper-checkbox-checked-color: var(--paper-indigo-500); + --paper-checkbox-checked-ink-color: var(--paper-indigo-500); + --paper-checkbox-unchecked-color: var(--paper-indigo-900); + --paper-checkbox-unchecked-ink-color: var(--paper-indigo-900); + } + `, +}); diff --git a/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/scrollbar-style.ts b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/scrollbar-style.ts new file mode 100644 index 0000000000000000000000000000000000000000..1793c1285793c5123e2c043c6150661b625bf21f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/scrollbar-style.ts @@ -0,0 +1,39 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {registerStyleDomModule} from '../polymer/register_style_dom_module'; + +registerStyleDomModule({ + moduleName: 'scrollbar-style', + styleContent: ` + .scrollbar::-webkit-scrollbar-track { + visibility: hidden; + } + + .scrollbar::-webkit-scrollbar { + width: 10px; + } + + .scrollbar::-webkit-scrollbar-thumb { + border-radius: 10px; + -webkit-box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.3); + background-color: var(--paper-grey-500); + color: var(--paper-grey-900); + } + .scrollbar { + box-sizing: border-box; + } + `, +}); diff --git a/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tensorboard-color.ts b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tensorboard-color.ts new file mode 100644 index 0000000000000000000000000000000000000000..95e8bc71e7f9fa6d35520b8fda2e4019a88b7345 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tensorboard-color.ts @@ -0,0 +1,30 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +const style = document.createElement('style'); +style.setAttribute('is', 'custom-style'); +style.textContent = ` + :root { + --tb-orange-weak: #ffa726; + --tb-orange-strong: #f57c00; + --tb-orange-dark: #dc7320; + --tb-grey-darker: #e2e2e2; + --tb-grey-lighter: #f3f3f3; + --tb-ui-dark-accent: #757575; + --tb-ui-light-accent: #e0e0e0; + --tb-graph-faded: #e0d4b3; + } +`; +document.head.appendChild(style); diff --git a/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-dashboard-layout.ts b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-dashboard-layout.ts new file mode 100644 index 0000000000000000000000000000000000000000..58ca6efe5d9d90c1dc38d611295195b6f490a51a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-dashboard-layout.ts @@ -0,0 +1,70 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {PolymerElement, html} from '@polymer/polymer'; +import {customElement} from '@polymer/decorators'; + +import './tensorboard-color'; +import './scrollbar-style'; + +@customElement('tf-dashboard-layout') +class TfDashboardLayout extends PolymerElement { + static readonly template = html` + + +
+ +
+ + + `; +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-downloader.ts b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-downloader.ts new file mode 100644 index 0000000000000000000000000000000000000000..1732999e10eb93c9bdf99c2de766bcf06e28498c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-downloader.ts @@ -0,0 +1,107 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {PolymerElement, html} from '@polymer/polymer'; +import {customElement, property} from '@polymer/decorators'; + +import '../polymer/irons_and_papers'; +import {addParams} from '../tf_backend/urlPathHelpers'; + +@customElement('tf-downloader') +export class TfDownloader extends PolymerElement { + static readonly template = html` + + + + + + + + `; + + @property({type: String}) + _run: string = ''; + + @property({type: Array}) + runs: string[]; + + @property({type: String}) + tag: string; + + // Clients pass `urlFn: (tag: string, run: string) => string`, + // which should generate a URL to download data for a given + // run/tag combination. The data at the URL should be in JSON + // form, and the URL should be such that adding a query + // parameter `format=csv` instead yields CSV data. + @property({type: Object}) + urlFn: object; + + _csvUrl(tag, run, urlFn) { + if (!run) return ''; + return addParams(urlFn(tag, run), {format: 'csv'}); + } + + _jsonUrl(tag, run, urlFn) { + if (!run) return ''; + return urlFn(tag, run); + } + + _csvName(tag, run) { + if (!run) return ''; + return `run-${run}-tag-${tag}.csv`; + } + + _jsonName(tag, run) { + if (!run) return ''; + return `run-${run}-tag-${tag}.json`; + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-dropdown-trigger.ts b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-dropdown-trigger.ts new file mode 100644 index 0000000000000000000000000000000000000000..f04db2b8376371185969ae0b42ec83784a82e959 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-dropdown-trigger.ts @@ -0,0 +1,187 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {PolymerElement, html} from '@polymer/polymer'; +import {LegacyElementMixin} from '../polymer/legacy_element_mixin'; +import {customElement, property, observe} from '@polymer/decorators'; + +import {PaperInkyFocusBehavior} from '../polymer/paper_inky_focus_behavior'; +import '../polymer/irons_and_papers'; + +/** + * tf-dropdown-trigger is a paper-menu-button trigger that has similar asthetics + * as paper-input: it has (optional) floating label and name on the button. + * + * Example usage: + * + * + * + *
+ * conten goes here + *
+ *
+ */ +@customElement('tf-dropdown-trigger') +class TfDropdownTrigger extends LegacyElementMixin(PolymerElement) { + static readonly template = html` +
[[label]]
+
+
[[label]]
+ [[name]] + +
+
+
+
+
+ + + `; + + @property({type: String}) + label: string; + + @property({ + type: Boolean, + }) + labelFloat: boolean = false; + + @property({type: String}) + name: string; + + hostAttributes = { + role: 'button', + tabindex: '0', + }; + + mixinBehaviors = [PaperInkyFocusBehavior]; + + @observe('label', 'name', 'labelFloat') + _setHostClass() { + this.toggleClass('label-floats', this.labelFloat); + this.toggleClass('label-floating', Boolean(this.name)); + this.toggleClass( + 'label-shown', + Boolean(this.label) && (!this.name || this.labelFloat) + ); + } + + /** + * Overrides PaperRippleBehavior because it was dis-satisfying. + * Specifically, it was forcing a circular ripple that does not fill the + * entire container. + * @override + */ + _createRipple() { + return this.$.ripple; + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-filterable-checkbox-dropdown.ts b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-filterable-checkbox-dropdown.ts new file mode 100644 index 0000000000000000000000000000000000000000..e3f799b9660a3f83db58554b94d2050e402d8681 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-filterable-checkbox-dropdown.ts @@ -0,0 +1,151 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {computed, customElement, property} from '@polymer/decorators'; +import {PolymerElement, html} from '@polymer/polymer'; + +import {LegacyElementMixin} from '../polymer/legacy_element_mixin'; +import '../polymer/irons_and_papers'; + +import './tf-dropdown-trigger'; +import {FilterableCheckboxListItem} from './tf-filterable-checkbox-list'; + +/* +tf-filterable-checkbox-dropdown creates a dropdown whose content is a list of +checkboxes with a filter input at the top. The list is primarily used for +multiple selection of items. + +Properties in: + - label: label for the dropdown trigger button. + - placeholder: placeholder in the dropdown trigger button. + - colorsCheckbox: whether to color the check boxes. + - coloring: an object that contains method, getColor. Used only when + colorsCheckbox is true, + - items: items of {id: string, title: string, subtitle: ?string}. + - maxItemsToEnableByDefault: maximum number of items to automatically enable. + - selectionState: object of checkbox selections. + +Properties out: + - selectedItems: Array of items that are selected and not filterd out. +*/ + +@customElement('tf-filterable-checkbox-dropdown') +class TfFilterableCheckboxDropdown extends LegacyElementMixin(PolymerElement) { + static readonly template = html` + + +
+ + +
+
+ + `; + + @property({type: String}) + label: string; + + @property({type: String}) + placeholder: string; + + @property({type: Boolean}) + labelFloat: boolean = false; + + @property({type: Boolean}) + useCheckboxColors: boolean = true; + + @property({type: Object}) + coloring: object; + + @property({ + type: Array, + }) + items: FilterableCheckboxListItem[] = []; + + @property({type: Number}) + maxItemsToEnableByDefault: number; + + @property({type: Object}) + selectionState: Record = {}; + + @property({ + type: Array, + notify: true, + }) + selectedItems: FilterableCheckboxListItem[] = []; + + @property({ + type: Boolean, + }) + _opened: boolean = false; + + // ====================== COMPUTED ====================== + _getValueLabel(_) { + if (this.selectedItems.length == this.items.length) { + return `All ${this.label}s`; + } else if (!this.selectedItems.length) { + return ''; + } else if (this.selectedItems.length <= 3) { + const titles = this.selectedItems.map(({title}) => title); + const uniqueNames = new Set(titles); + return Array.from(uniqueNames).join(', '); + } + return `${this.selectedItems.length} Selected`; + } + + @computed('_opened', 'coloring') + get _coloring(): object { + return Object.assign({}, this.coloring); + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-filterable-checkbox-list.ts b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-filterable-checkbox-list.ts new file mode 100644 index 0000000000000000000000000000000000000000..dc9a02e95590b01eee77fb1a4615435b1005b815 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-filterable-checkbox-list.ts @@ -0,0 +1,361 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {computed, customElement, observe, property} from '@polymer/decorators'; +import {PolymerElement, html} from '@polymer/polymer'; + +import {LegacyElementMixin} from '../polymer/legacy_element_mixin'; +import '../polymer/irons_and_papers'; + +import './run-color-style'; +import './scrollbar-style'; + +export type FilterableCheckboxListItem = { + id: string | number; + title: string; + subtitle?: string; +}; + +/* +tf-filterable-checkbox-list creates a list of checkboxes with a filter input at +the top. The list is primarily used for multiple selection of items. + +Properties in: + - colorsCheckbox: whether to color the check boxes. + - coloring: an object that contains method, getColor. Used only when + colorsCheckbox is true, + - items: items of {id: string, title: string, subtitle: ?string}. + - maxItemsToEnableByDefault: maximum number of items to automatically enable. + - selectionState: object denoting selection state of the checkboxes. + +Properties out: + - selectedItems: Array of items that are selected and not filtered out. +*/ + +@customElement('tf-filterable-checkbox-list') +class TfFilterableCheckboxList extends LegacyElementMixin(PolymerElement) { + static readonly template = html` + + +
+ + +
+
+ + +
+ + + `; + + @property({type: String}) + label: string; + + @property({ + type: Boolean, + }) + useCheckboxColors: boolean = true; + + @property({ + type: Object, + }) + coloring: {getColor: (FilterableCheckboxListItem) => string} = { + getColor: (item: FilterableCheckboxListItem): string => '', + }; + + @property({ + type: Array, + observer: '_pruneSelectionState', + }) + items: FilterableCheckboxListItem[] = []; + + @property({ + type: String, + }) + _regexString: string = ''; + + @property({ + type: Array, + computed: 'computeItemsMatchingRegex(items.*, _regex)', + }) + _itemsMatchingRegex: FilterableCheckboxListItem[]; + + @property({ + // if an item is explicitly enabled, True, if explicitly disabled, False. + // if undefined, default value (enable for first k items, disable after). + type: Object, + }) + selectionState: object = () => ({}); + + @property({ + type: Array, + notify: true, + computed: '_computeSelectedItems(_itemsMatchingRegex.*, selectionState.*)', + }) + selectedItems: unknown[]; + + @property({ + // When TB first loads, if it has k or fewer items, they are all enabled + // by default. If there are more, then all items are disabled. + type: Number, + }) + maxItemsToEnableByDefault: number = 40; + + @property({ + type: Boolean, + }) + allToggleDisabled: boolean = false; + + detached() { + this.cancelDebouncer('_setRegex'); + } + + @computed('_regexString') + get _regex(): RegExp | null { + var regexString = this._regexString; + try { + return new RegExp(regexString); + } catch (e) { + return null; + } + } + + computeItemsMatchingRegex(__, ___) { + const regex = this._regex; + return regex ? this.items.filter((n) => regex.test(n.title)) : this.items; + } + + _computeSelectedItems(__, ___) { + const selectionState = this.selectionState; + const num = this.maxItemsToEnableByDefault; + const allEnabled = this._itemsMatchingRegex.length <= num; + return this._itemsMatchingRegex.filter((n) => { + return selectionState[n.id] == null ? allEnabled : selectionState[n.id]; + }); + } + _isChecked(item, _) { + return this.selectedItems.indexOf(item) != -1; + } + // ================== EVENT LISTENERS =================== + _debouncedRegexChange() { + const val = (this.$.input as any).value; + if (val == '') { + // If the user cleared the field, they may be done typing, so + // update more quickly. + window.requestAnimationFrame(() => { + this._regexString = val; + }); + } else { + this.debounce( + '_setRegex', + () => { + this._regexString = val; + }, + 150 + ); + } + } + + @observe('coloring') + _synchronizeColors() { + var e = this.coloring; + const checkboxes = this.root.querySelectorAll('paper-checkbox'); + checkboxes.forEach((cb) => { + // Setting the null value will clear previously set color. + const color = this.useCheckboxColors + ? this.coloring.getColor((cb as any).name) + : null; + const customStyle = (cb as any).customStyle; + customStyle['--paper-checkbox-checked-color'] = color; + customStyle['--paper-checkbox-checked-ink-color'] = color; + customStyle['--paper-checkbox-unchecked-color'] = color; + customStyle['--paper-checkbox-unchecked-ink-color'] = color; + }); + // The updateStyles call fails silently if the browser does not have focus, + // e.g., if TensorBoard was opened into a new tab that is not visible. + // So we wait for requestAnimationFrame. + window.requestAnimationFrame(() => this.updateStyles()); + } + + _checkboxTapped(e) { + const checkbox = e.currentTarget; + const newSelectedNames = Object.assign({}, this.selectionState, { + [checkbox.name.id]: checkbox.checked, + }); + // If user presses alt while toggling checkbox, it deselects all items but + // the clicked one. + if ( + e.detail.sourceEvent instanceof MouseEvent && + e.detail.sourceEvent.altKey + ) { + Object.keys(newSelectedNames).forEach((key) => { + newSelectedNames[key] = key == checkbox.name.id; + }); + } + // n.b. notifyPath won't work because names may have periods. + this.selectionState = newSelectedNames; + } + + _toggleAll() { + let anyToggledOn = this._itemsMatchingRegex.some( + (n) => this.selectionState[n.id] + ); + const selectionStateIsDefault = + Object.keys(this.selectionState).length == 0; + const defaultOff = + this._itemsMatchingRegex.length > this.maxItemsToEnableByDefault; + // We have names toggled either if some were explicitly toggled on, or if + // we are in the default state, and there are few enough that we default + // to toggling on. + anyToggledOn = anyToggledOn || (selectionStateIsDefault && !defaultOff); + // If any are toggled on, we turn everything off. Or, if none are toggled + // on, we turn everything on. + const newSelection = {}; + this.items.forEach((n) => { + newSelection[n.id] = !anyToggledOn; + }); + this.selectionState = newSelection; + } + + /** + * Remove selection state of an item that no longer exists in the `items`. + */ + _pruneSelectionState() { + // Object key turns numbered keys into string. + const itemIds = new Set(this.items.map(({id}) => String(id))); + const newSelection = Object.assign({}, this.selectionState); + Object.keys(newSelection).forEach((key) => { + if (!itemIds.has(key)) delete newSelection[key]; + }); + this.selectionState = newSelection; + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-multi-checkbox.ts b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-multi-checkbox.ts new file mode 100644 index 0000000000000000000000000000000000000000..8d550748184b12cc43977e4eea8f1cff0308ec07 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-multi-checkbox.ts @@ -0,0 +1,346 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {PolymerElement, html} from '@polymer/polymer'; +import {computed, observe, customElement, property} from '@polymer/decorators'; +import {LegacyElementMixin} from '../polymer/legacy_element_mixin'; +import '../polymer/irons_and_papers'; + +import * as _ from 'lodash'; + +import './run-color-style'; +import './scrollbar-style'; + +/* +tf-multi-checkbox creates a list of checkboxes that can be used to toggle on or off +a large number of values. Each checkbox displays a name, and may also have an +associated tooltip value. Checkboxes can be highlighted, hidden, and re-ordered. + +tf-multi-checkbox assumes that the names may be very long compared to the width +of the checkbox, and the number of names may also be very large, and works to +handle these situations gracefully. +*/ +@customElement('tf-multi-checkbox') +class TfMultiCheckbox extends LegacyElementMixin(PolymerElement) { + static readonly template = html` + + + + +
+ +
+ + `; + + @property({ + type: Array, + }) + // All the values of the checkbox. + names: string[] = []; + + @property({ + type: Object, + }) + coloring: {getColor: (name: string) => string} = { + getColor: () => '', + }; + + @property({ + type: String, + notify: true, + }) + // Regex for filtering the names. + regex: string = ''; + + @property({ + type: Array, + computed: 'computeNamesMatchingRegex(names.*, _regex)', + }) + // Runs that match the regex. + namesMatchingRegex: string[]; + + @property({ + // If a name is explicitly enabled by user gesture, True, if explicitly + // disabled, False. If undefined, default value (enable for first k + // names, disable after). + type: Object, + notify: true, + }) + selectionState: Record = {}; + + @property({ + type: Array, + notify: true, + computed: 'computeOutSelected(namesMatchingRegex.*, selectionState.*)', + }) + // Allows state to persist across regex filtering. + outSelected: string[]; + + @property({ + // When TB first loads, if it has k or fewer names, they are all enabled + // by default. If there are more, then they are all disabled. + type: Number, + }) + maxNamesToEnableByDefault: number = 40; + + _debouncedRegexChangeImpl() { + var debounced = _.debounce( + (r) => { + this.regex = r; + }, + 150, + {leading: false} + ); + return function () { + var r = this.$$('#names-regex').value; + if (r == '') { + // If the user cleared the field, they may be done typing, so + // update more quickly. + this.async(() => { + this.regex = r; + }, 30); + } else { + debounced(r); + } + }; + } + + // Updating the regex can be slow, because it involves updating styles + // on a large number of Polymer paper-checkboxes. We don't want to do + // this while the user is typing, as it may make a bad, laggy UI. + // So we debounce the updates that come from user typing. + @property({type: Object}) + _debouncedRegexChange = this._debouncedRegexChangeImpl(); + + @computed('regex') + get _regex(): RegExp | null { + var regexString = this.regex; + try { + return new RegExp(regexString); + } catch (e) { + return null; + } + } + + @observe('selectionState', 'names') + _setIsolatorIcon() { + var selectionMap = this.selectionState; + var numChecked = _.filter(_.values(selectionMap)).length; + var buttons = Array.prototype.slice.call( + this.root.querySelectorAll('.isolator') + ); + buttons.forEach(function (b) { + if (numChecked === 1 && selectionMap[b.name]) { + b.icon = 'radio-button-checked'; + } else { + b.icon = 'radio-button-unchecked'; + } + }); + } + + computeNamesMatchingRegex(__, ___) { + const regex = this._regex; + return regex ? this.names.filter((n) => regex.test(n)) : this.names; + } + + computeOutSelected(__, ___) { + var selectionState = this.selectionState; + var num = this.maxNamesToEnableByDefault; + var allEnabled = this.namesMatchingRegex.length <= num; + return this.namesMatchingRegex.filter((n) => { + return selectionState[n] == null ? allEnabled : selectionState[n]; + }); + } + + synchronizeColors(e) { + this._setIsolatorIcon(); + const checkboxes = this.root.querySelectorAll('paper-checkbox'); + checkboxes.forEach((p: any) => { + const color = this.coloring.getColor(p.name); + p.updateStyles({ + '--paper-checkbox-checked-color': color, + '--paper-checkbox-checked-ink-color': color, + '--paper-checkbox-unchecked-color': color, + '--paper-checkbox-unchecked-ink-color': color, + }); + }); + const buttons = this.root.querySelectorAll('.isolator'); + buttons.forEach((p: any) => { + const color = this.coloring.getColor(p.name); + p.style['color'] = color; + }); + // The updateStyles call fails silently if the browser doesn't have focus, + // e.g. if TensorBoard was opened into a new tab that isn't visible. + // So we wait for requestAnimationFrame. + window.requestAnimationFrame(() => { + this.updateStyles(); + }); + } + + _isolateName(e) { + // If user clicks on the label for one name, enable it and disable all other + // names. + var name = (e.target as any).name; + var selectionState = {}; + this.names.forEach(function (n) { + selectionState[n] = n == name; + }); + this.selectionState = selectionState; + } + + _checkboxChange(e) { + var target = e.target as any; + const newSelectionState = _.clone(this.selectionState); + newSelectionState[(target as any).name] = (target as any).checked; + // n.b. notifyPath won't work because names may have periods. + this.selectionState = newSelectionState; + } + + _isChecked(item: string, outSelectedChange): boolean { + return this.outSelected.indexOf(item) != -1; + } + + toggleAll() { + // If any are toggled on, we turn everything off. Or, if none are toggled + // on, we turn everything on. + const anyToggledOn = this.namesMatchingRegex.some((name) => + this.outSelected.includes(name) + ); + const newSelectionState = {}; + this.names.forEach((n) => { + newSelectionState[n] = !anyToggledOn; + }); + this.selectionState = newSelectionState; + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-no-data-warning.ts b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-no-data-warning.ts new file mode 100644 index 0000000000000000000000000000000000000000..09b3cdcba80b15bd298bf8bd5073acb16a63b0e4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-no-data-warning.ts @@ -0,0 +1,73 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {PolymerElement, html} from '@polymer/polymer'; +import {customElement, property} from '@polymer/decorators'; + +@customElement('tf-no-data-warning') +class TfNoDataWarning extends PolymerElement { + static readonly template = html` + + + `; + + @property({type: String}) + dataType: string; + + @property({type: Boolean}) + showWarning: boolean; +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-option-selector.ts b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-option-selector.ts new file mode 100644 index 0000000000000000000000000000000000000000..5664b60f37777ca0dc891b5e523b7f5ef0716487 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_dashboard_common/tf-option-selector.ts @@ -0,0 +1,93 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {PolymerElement, html} from '@polymer/polymer'; +import {LegacyElementMixin} from '../polymer/legacy_element_mixin'; +import {customElement, property} from '@polymer/decorators'; +import './tensorboard-color'; + +@customElement('tf-option-selector') +class TfOptionSelector extends LegacyElementMixin(PolymerElement) { + static readonly template = html` +
+

[[name]]

+
+
+ + `; + + @property({type: String}) + name: string; + + @property({ + type: String, + notify: true, + observer: '_selectedIdChanged', + }) + selectedId: string; + + attached() { + this.async(function () { + this.getEffectiveChildren().forEach( + function (node) { + this.listen(node, 'tap', '_selectTarget'); + }.bind(this) + ); + }); + } + + _selectTarget(e) { + this.selectedId = e.currentTarget.id; + } + + _selectedIdChanged() { + var selected = this.queryEffectiveChildren('#' + this.selectedId); + if (!selected) { + return; + } + this.getEffectiveChildren().forEach(function (node) { + (node as HTMLElement).classList.remove('selected'); + }); + (selected as HTMLElement).classList.add('selected'); + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_globals/BUILD b/saved_models/tensorboard/tensorboard/components/tf_globals/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..d1ef0bf20b3513d99ceaf8932551ad237c024959 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_globals/BUILD @@ -0,0 +1,17 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "tf_globals", + srcs = [ + "globals.ts", + "globals-polymer.ts", + ], + deps = [ + "@npm//@polymer/decorators", + "@npm//@polymer/polymer", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/tf_globals/globals-polymer.ts b/saved_models/tensorboard/tensorboard/components/tf_globals/globals-polymer.ts new file mode 100644 index 0000000000000000000000000000000000000000..0247a8cd49c35155bd9918fe013749881424832e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_globals/globals-polymer.ts @@ -0,0 +1,24 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {PolymerElement} from '@polymer/polymer'; +import {customElement} from '@polymer/decorators'; + +import * as tf_globals from './globals'; + +@customElement('tf-globals') +class TfGlobals extends PolymerElement { + _template = null; + tf_globals = tf_globals; +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_globals/globals.ts b/saved_models/tensorboard/tensorboard/components/tf_globals/globals.ts new file mode 100644 index 0000000000000000000000000000000000000000..baee926c653d484e311facdbb84ce2bc78e0e6d1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_globals/globals.ts @@ -0,0 +1,37 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +// If true, TensorBoard stores its hash in the URI state. +// If false, tab switching in TensorBoard will not update location hash, +// because hash updates interfere with wct_tests. +let _useHash = false; + +export function setUseHash(shouldUseHash: boolean): void { + _useHash = shouldUseHash; +} + +export function useHash(): boolean { + return _useHash; +} + +let _fakeHash = ''; + +export function setFakeHash(h: string) { + _fakeHash = h; +} + +export function getFakeHash() { + return _fakeHash; +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_imports/BUILD b/saved_models/tensorboard/tensorboard/components/tf_imports/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..0af0240e3b79ee384d7a7a1a181537cc77c546b5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_imports/BUILD @@ -0,0 +1,587 @@ +load("//tensorboard/defs:defs.bzl", "tensorboard_webcomponent_library") +load("//tensorboard/defs:hacks.bzl", "tensorboard_typescript_bundle") +load("//tensorboard/defs:web.bzl", "tf_web_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_web_library( + name = "webcomponentsjs", + srcs = ["@org_definitelytyped//:webcomponents.js.d.ts"], + path = "/webcomponentsjs", + exports = ["@org_polymer_webcomponentsjs"], +) + +tf_web_library( + name = "polymer", + srcs = [ + "polymer.html", + "@org_definitelytyped//:polymer.d.ts", + ], + path = "/tf-imports", + exports = ["@org_polymer"], + deps = [ + ":polymer_externs", + ":webcomponentsjs", + "@org_polymer", + "@org_polymer_web_animations_js", + "@org_polymer_webcomponentsjs", + ], +) + +tensorboard_webcomponent_library( + name = "polymer_lib", + srcs = [":polymer"], + destdir = "tf-imports", + deps = [ + ":polymer_externs_lib", + "//third_party/javascript/polymer/v1/web-animations-js:other-js", + "//third_party/javascript/polymer/v2/polymer:lib", + "//third_party/javascript/polymer/v2/webcomponentsjs:lib", + ], +) + +tf_web_library( + name = "polymer_externs", + srcs = [ + "polymer-externs.html", + ], + path = "/tf-imports", + deps = [ + "@org_polymer_externs", + ], +) + +tensorboard_webcomponent_library( + name = "polymer_externs_lib", + srcs = [":polymer_externs"], + destdir = "tf-imports", + deps = ["//third_party/javascript/polymer/v2/polymer:other-js"], +) + +tf_web_library( + name = "lodash", + srcs = [ + "lodash.html", + "@org_definitelytyped//:lodash.d.ts", + ], + path = "/tf-imports", + deps = ["@com_lodash"], +) + +tf_web_library( + name = "threejs", + srcs = [ + "threejs.html", + "@org_definitelytyped//:three.d.ts", + "@org_threejs//:OrbitControls.js", + "@org_threejs//:three.js", + ], + path = "/tf-imports", +) + +tf_web_library( + name = "umap-js", + srcs = [ + "umap-js.html", + "@ai_google_pair_umap_js//:umap-js.min.js", + ], + path = "/tf-imports", +) + +tf_web_library( + name = "numericjs", + srcs = [ + "numericjs.html", + "@com_numericjs//:numeric.js", + ], + path = "/tf-imports", +) + +tf_web_library( + name = "graphlib", + srcs = [ + "graphlib.html", + "@io_github_cpettitt_graphlib//:graphlib.core.js", + ], + path = "/tf-imports", + deps = [":lodash"], +) + +tf_web_library( + name = "dagre", + srcs = [ + "dagre.html", + "@io_github_cpettitt_dagre//:dagre.core.js", + ], + path = "/tf-imports", + deps = [ + ":graphlib", + ":lodash", + ], +) + +# Separated out from ":d3" because of strip_prefix. +tf_web_library( + name = "d3_lib", + srcs = [ + "@npm//:node_modules/d3/dist/d3.min.js", + ], + path = "/tf-imports", + strip_prefix = "node_modules/d3/dist", +) + +tf_web_library( + name = "d3", + srcs = [ + "d3.d.ts", + "d3.html", + ], + path = "/tf-imports", + deps = [ + ":d3_lib", + ], +) + +tf_web_library( + name = "plottable", + srcs = [ + "plottable.d.ts", + "plottable.html", + ], + path = "/tf-imports", + deps = [ + ":d3", + ":plottable_js_css", + ], +) + +tf_web_library( + name = "plottable_js_css", + srcs = [ + "@com_palantir_plottable//:package/plottable.css", + "@com_palantir_plottable//:package/plottable.js", + ], + path = "/tf-imports", + strip_prefix = "package", + visibility = [ + "//visibility:private", + ], +) + +tf_web_library( + name = "web_component_tester", + testonly = 1, + srcs = ["web-component-tester.d.ts"], + path = "/web_component_tester", + exports = [ + ":chai_typings", + ":mocha_typings", + ":sinon_chai_typings", + ":sinon_typings", + "@org_npmjs_registry_web_component_tester", + ], +) + +tf_web_library( + name = "chai_typings", + testonly = 1, + srcs = ["@org_definitelytyped//:chai.d.ts"], + path = "/chai", + visibility = ["//visibility:private"], +) + +tf_web_library( + name = "mocha_typings", + testonly = 1, + srcs = ["@org_definitelytyped//:mocha.d.ts"], + path = "/mocha", + visibility = ["//visibility:private"], +) + +tf_web_library( + name = "sinon_typings", + testonly = 1, + srcs = ["@org_definitelytyped//:sinon.d.ts"], + path = "/sinonjs", + visibility = ["//visibility:private"], +) + +tf_web_library( + name = "sinon_chai_typings", + testonly = 1, + srcs = ["@org_definitelytyped_types_sinon_chai//:index.d.ts"], + path = "/sinon_chai", + visibility = ["//visibility:private"], +) + +tf_web_library( + name = "vaadin_grid", + srcs = [ + "vaadin-grid.html", + ], + path = "/tf-imports", + deps = ["@vaadin_vaadin_grid"], +) + +tf_web_library( + name = "vaadin_split_layout", + srcs = [ + "vaadin-split-layout.html", + ], + path = "/tf-imports", + deps = ["@vaadin_vaadin_split_layout"], +) + +tf_web_library( + name = "tf_graphics_lib", + srcs = [ + "tf_graphics_lib.html", + "@org_tensorflow_graphics_lib//:array-buffer-data-provider.js", + "@org_tensorflow_graphics_lib//:mesh-viewer.js", + ], + path = "/tf-imports", + deps = [ + ":threejs", + ], +) + +# Generate single TypeScript typings file for d3.js with no ES6 imports. +# +# The DefinitelyTyped definition of d3 v4 was written under the assumption that +# we want to use d3 in a modularized way. We don't want to do that because its +# import statements use NodeJS namespaces, and the Web Compiler only supports +# W3C, ECMA, and IETF standards. +tensorboard_typescript_bundle( + name = "d3_typings", + out = "d3.d.ts", + namespace_srcs = {"d3": [ + "d3-transition.d.ts", + "@org_definitelytyped_types_d3_path//:index.d.ts", + "@org_definitelytyped_types_d3_time//:index.d.ts", + "@org_definitelytyped_types_d3_dsv//:index.d.ts", + "@org_definitelytyped_types_d3_color//:index.d.ts", + "@org_definitelytyped_types_d3_selection//:index.d.ts", + "@org_definitelytyped_types_d3_shape//:index.d.ts", + "@org_definitelytyped_types_d3_scale//:index.d.ts", + "@org_definitelytyped_types_d3_interpolate//:index.d.ts", + "@org_definitelytyped_types_d3_drag//:index.d.ts", + "@org_definitelytyped_types_d3_brush//:index.d.ts", + "@org_definitelytyped_types_d3_axis//:index.d.ts", + "@org_definitelytyped_types_d3_zoom//:index.d.ts", + "@org_definitelytyped_types_d3_array//:index.d.ts", + "@org_definitelytyped_types_d3_chord//:index.d.ts", + "@org_definitelytyped_types_d3_collection//:index.d.ts", + "@org_definitelytyped_types_d3_dispatch//:index.d.ts", + "@org_definitelytyped_types_d3_ease//:index.d.ts", + "@org_definitelytyped_types_d3_force//:index.d.ts", + "@org_definitelytyped_types_d3_format//:index.d.ts", + "@org_definitelytyped_types_d3_hierarchy//:index.d.ts", + "@org_definitelytyped_types_d3_polygon//:index.d.ts", + "@org_definitelytyped_types_d3_quadtree//:index.d.ts", + "@org_definitelytyped_types_d3_random//:index.d.ts", + "@org_definitelytyped_types_d3_timer//:index.d.ts", + "@org_definitelytyped_types_d3_voronoi//:index.d.ts", + ]}, +) + +# It would be nice if Plottable released a .d.ts file for plottable.js like +# they did for previous versions. +tensorboard_typescript_bundle( + name = "plottable_typings", + out = "plottable.d.ts", + namespace_srcs = { + "Plottable": [ + "@com_palantir_plottable//:package/build/src/core/dataset.d.ts", + "@com_palantir_plottable//:package/build/src/core/interfaces.d.ts", + "@com_palantir_plottable//:package/build/src/core/version.d.ts", + ], + "Plottable.Animators": [ + "@com_palantir_plottable//:package/build/src/animators/animator.d.ts", + "@com_palantir_plottable//:package/build/src/animators/easingAnimator.d.ts", + "@com_palantir_plottable//:package/build/src/animators/nullAnimator.d.ts", + ], + "Plottable.Axes": [ + "@com_palantir_plottable//:package/build/src/axes/axis.d.ts", + "@com_palantir_plottable//:package/build/src/axes/categoryAxis.d.ts", + "@com_palantir_plottable//:package/build/src/axes/numericAxis.d.ts", + "@com_palantir_plottable//:package/build/src/axes/timeAxis.d.ts", + ], + "Plottable.Components": [ + "@com_palantir_plottable//:package/build/src/components/component.d.ts", + "@com_palantir_plottable//:package/build/src/components/componentContainer.d.ts", + "@com_palantir_plottable//:package/build/src/components/dragBoxLayer.d.ts", + "@com_palantir_plottable//:package/build/src/components/dragLineLayer.d.ts", + "@com_palantir_plottable//:package/build/src/components/gridlines.d.ts", + "@com_palantir_plottable//:package/build/src/components/group.d.ts", + "@com_palantir_plottable//:package/build/src/components/guideLineLayer.d.ts", + "@com_palantir_plottable//:package/build/src/components/interpolatedColorLegend.d.ts", + "@com_palantir_plottable//:package/build/src/components/label.d.ts", + "@com_palantir_plottable//:package/build/src/components/legend.d.ts", + "@com_palantir_plottable//:package/build/src/components/plotGroup.d.ts", + "@com_palantir_plottable//:package/build/src/components/selectionBoxLayer.d.ts", + "@com_palantir_plottable//:package/build/src/components/table.d.ts", + "@com_palantir_plottable//:package/build/src/components/xDragBoxLayer.d.ts", + "@com_palantir_plottable//:package/build/src/components/yDragBoxLayer.d.ts", + ], + "Plottable.Configs": [ + "@com_palantir_plottable//:package/build/src/core/config.d.ts", + ], + "Plottable.Formatters": [ + "@com_palantir_plottable//:package/build/src/core/formatters.d.ts", + ], + "Plottable.RenderController": [ + "@com_palantir_plottable//:package/build/src/core/renderController.d.ts", + ], + "Plottable.RenderPolicies": [ + "@com_palantir_plottable//:package/build/src/core/renderPolicy.d.ts", + ], + "Plottable.SymbolFactories": [ + "@com_palantir_plottable//:package/build/src/core/symbolFactories.d.ts", + ], + "Plottable.Dispatchers": [ + "@com_palantir_plottable//:package/build/src/dispatchers/dispatcher.d.ts", + "@com_palantir_plottable//:package/build/src/dispatchers/keyDispatcher.d.ts", + "@com_palantir_plottable//:package/build/src/dispatchers/mouseDispatcher.d.ts", + "@com_palantir_plottable//:package/build/src/dispatchers/touchDispatcher.d.ts", + ], + "Plottable.Drawers": [ + "@com_palantir_plottable//:package/build/src/drawers/arcDrawer.d.ts", + "@com_palantir_plottable//:package/build/src/drawers/arcOutlineDrawer.d.ts", + "@com_palantir_plottable//:package/build/src/drawers/areaDrawer.d.ts", + "@com_palantir_plottable//:package/build/src/drawers/canvasBuffer.d.ts", + "@com_palantir_plottable//:package/build/src/drawers/canvasDrawer.d.ts", + "@com_palantir_plottable//:package/build/src/drawers/drawStep.d.ts", + "@com_palantir_plottable//:package/build/src/drawers/drawer.d.ts", + "@com_palantir_plottable//:package/build/src/drawers/lineDrawer.d.ts", + "@com_palantir_plottable//:package/build/src/drawers/rectangleDrawer.d.ts", + "@com_palantir_plottable//:package/build/src/drawers/segmentDrawer.d.ts", + "@com_palantir_plottable//:package/build/src/drawers/svgDrawer.d.ts", + "@com_palantir_plottable//:package/build/src/drawers/symbolDrawer.d.ts", + ], + "Plottable.Interactions": [ + "@com_palantir_plottable//:package/build/src/interactions/clickInteraction.d.ts", + "@com_palantir_plottable//:package/build/src/interactions/dragInteraction.d.ts", + "@com_palantir_plottable//:package/build/src/interactions/interaction.d.ts", + "@com_palantir_plottable//:package/build/src/interactions/keyInteraction.d.ts", + "@com_palantir_plottable//:package/build/src/interactions/panZoomInteraction.d.ts", + "@com_palantir_plottable//:package/build/src/interactions/pointerInteraction.d.ts", + ], + "Plottable.Plots": [ + "@com_palantir_plottable//:package/build/src/plots/areaPlot.d.ts", + "@com_palantir_plottable//:package/build/src/plots/barPlot.d.ts", + "@com_palantir_plottable//:package/build/src/plots/clusteredBarPlot.d.ts", + "@com_palantir_plottable//:package/build/src/plots/commons.d.ts", + "@com_palantir_plottable//:package/build/src/plots/linePlot.d.ts", + "@com_palantir_plottable//:package/build/src/plots/piePlot.d.ts", + "@com_palantir_plottable//:package/build/src/plots/plot.d.ts", + "@com_palantir_plottable//:package/build/src/plots/rectanglePlot.d.ts", + "@com_palantir_plottable//:package/build/src/plots/scatterPlot.d.ts", + "@com_palantir_plottable//:package/build/src/plots/segmentPlot.d.ts", + "@com_palantir_plottable//:package/build/src/plots/stackedAreaPlot.d.ts", + "@com_palantir_plottable//:package/build/src/plots/stackedBarPlot.d.ts", + "@com_palantir_plottable//:package/build/src/plots/waterfallPlot.d.ts", + "@com_palantir_plottable//:package/build/src/plots/xyPlot.d.ts", + ], + "Plottable.Scales": [ + "@com_palantir_plottable//:package/build/src/scales/index.d.ts", + "@com_palantir_plottable//:package/build/src/scales/categoryScale.d.ts", + "@com_palantir_plottable//:package/build/src/scales/colorScale.d.ts", + "@com_palantir_plottable//:package/build/src/scales/interpolatedColorScale.d.ts", + "@com_palantir_plottable//:package/build/src/scales/linearScale.d.ts", + "@com_palantir_plottable//:package/build/src/scales/modifiedLogScale.d.ts", + "@com_palantir_plottable//:package/build/src/scales/quantitativeScale.d.ts", + "@com_palantir_plottable//:package/build/src/scales/scale.d.ts", + "@com_palantir_plottable//:package/build/src/scales/timeScale.d.ts", + ], + "Plottable.Scales.TickGenerators": [ + "@com_palantir_plottable//:package/build/src/scales/tickGenerators.d.ts", + ], + "Plottable.Utils": [ + "@com_palantir_plottable//:package/build/src/utils/addD3SelectionMulti.d.ts", + "@com_palantir_plottable//:package/build/src/utils/bucket.d.ts", + "@com_palantir_plottable//:package/build/src/utils/callbackSet.d.ts", + "@com_palantir_plottable//:package/build/src/utils/coerceD3.d.ts", + "@com_palantir_plottable//:package/build/src/utils/entityStore.d.ts", + "@com_palantir_plottable//:package/build/src/utils/makeEnum.d.ts", + "@com_palantir_plottable//:package/build/src/utils/map.d.ts", + "@com_palantir_plottable//:package/build/src/utils/set.d.ts", + "@com_palantir_plottable//:package/build/src/utils/transformAwareTranslator.d.ts", + ], + "Plottable.Utils.Array": [ + "@com_palantir_plottable//:package/build/src/utils/arrayUtils.d.ts", + ], + "Plottable.Utils.Color": [ + "@com_palantir_plottable//:package/build/src/utils/colorUtils.d.ts", + ], + "Plottable.Utils.DOM": [ + "@com_palantir_plottable//:package/build/src/utils/domUtils.d.ts", + ], + "Plottable.Utils.Math": [ + "@com_palantir_plottable//:package/build/src/utils/mathUtils.d.ts", + ], + "Plottable.Utils.Stacking": [ + "@com_palantir_plottable//:package/build/src/utils/stackingUtils.d.ts", + ], + "Plottable.Utils.Window": [ + "@com_palantir_plottable//:package/build/src/utils/windowUtils.d.ts", + ], + }, + namespace_symbol_aliases = { + "Plottable.Animators": { + "AttributeToAppliedProjector": "Plottable.AttributeToAppliedProjector", + "SimpleSelection": "Plottable.SimpleSelection", + }, + "Plottable.Axes": { + "Component": "Plottable.Components.Component", + "Formatter": "Plottable.Formatters.Formatter", + "Point": "Plottable.Point", + "QuantitativeScale": "Plottable.Scales.QuantitativeScale", + "Scale": "Plottable.Scales.Scale", + "Scales": "Plottable.Scales", + "SimpleSelection": "Plottable.SimpleSelection", + "SpaceRequest": "Plottable.SpaceRequest", + }, + "Plottable.Components": { + "Bounds": "Plottable.Bounds", + "Formatter": "Plottable.Formatters.Formatter", + "IEntity": "Plottable.IEntity", + "Interactions": "Plottable.Interactions", + "Plots": "Plottable.Plots", + "Point": "Plottable.Point", + "QuantitativeScale": "Plottable.Scales.QuantitativeScale", + "Scales": "Plottable.Scales", + "SimpleSelection": "Plottable.SimpleSelection", + "SpaceRequest": "Plottable.SpaceRequest", + "SymbolFactory": "Plottable.SymbolFactories.SymbolFactory", + }, + "Plottable.RenderController": { + "Component": "Plottable.Components.Component", + "RenderPolicies": "Plottable.RenderPolicies", + }, + "Plottable.SymbolFactories": { + "d3Shape": "d3", + }, + "Plottable.Dispatchers": { + "Component": "Plottable.Components.Component", + "Dispatchers": "Plottable.Dispatchers", + "Point": "Plottable.Point", + }, + "Plottable.Drawers": { + "AttributeToAppliedProjector": "Plottable.AttributeToAppliedProjector", + "AttributeToProjector": "Plottable.AttributeToProjector", + "Dataset": "Plottable.Dataset", + "IAccessor": "Plottable.IAccessor", + "IAnimator": "Plottable.Animators.IAnimator", + "SimpleSelection": "Plottable.SimpleSelection", + "SymbolFactory": "Plottable.SymbolFactories.SymbolFactory", + }, + "Plottable.Interactions": { + "Component": "Plottable.Components.Component", + "Point": "Plottable.Point", + "TransformableScale": "Plottable.Scales.TransformableScale", + }, + "Plottable.Plots": { + "AppliedDrawStep": "Plottable.Drawers.AppliedDrawStep", + "AttributeToProjector": "Plottable.AttributeToProjector", + "Bounds": "Plottable.Bounds", + "Component": "Plottable.Components.Component", + "Dataset": "Plottable.Dataset", + "DrawStep": "Plottable.Drawers.DrawStep", + "Drawers": "Plottable.Drawers", + "Formatter": "Plottable.Formatters.Formatter", + "IAccessor": "Plottable.IAccessor", + "IAnimator": "Plottable.Animators.IAnimator", + "IDrawer": "Plottable.Drawers.IDrawer", + "IEntity": "Plottable.IEntity", + "IScaleCallback": "Plottable.Scales.IScaleCallback", + "Plots": "Plottable.Plots", + "Point": "Plottable.Point", + "Projector": "Plottable.Projector", + "ProxyDrawer": "Plottable.Drawers.ProxyDrawer", + "QuantitativeScale": "Plottable.Scales.QuantitativeScale", + "Range": "Plottable.Range", + "Scale": "Plottable.Scales.Scale", + "SimpleSelection": "Plottable.SimpleSelection", + "SymbolFactory": "Plottable.SymbolFactories.SymbolFactory", + "TransformableScale": "Plottable.Scales.TransformableScale", + "Utils": "Plottable.Utils", + "d3Shape": "d3", + }, + "Plottable.Scales": { + "Dataset": "Plottable.Dataset", + "Scales": "Plottable.Scales", + }, + "Plottable.Scales.TickGenerators": { + "QuantitativeScale": "Plottable.Scales.QuantitativeScale", + }, + "Plottable.Utils": { + "Bounds": "Plottable.Bounds", + "Component": "Plottable.Components.Component", + "Dataset": "Plottable.Dataset", + "IAccessor": "Plottable.IAccessor", + "Point": "Plottable.Point", + "Range": "Plottable.Range", + "SimpleSelection": "Plottable.SimpleSelection", + "Utils": "Plottable.Utils", + }, + }, + namespace_symbol_aliases_public = { + "Plottable": { + "Axis": "Plottable.Axes.Axis", + "AxisOrientation": "Plottable.Axes.AxisOrientation", + "ClickCallback": "Plottable.Interactions.ClickCallback", + "Component": "Plottable.Components.Component", + "ComponentCallback": "Plottable.Components.ComponentCallback", + "ComponentContainer": "Plottable.Components.ComponentContainer", + "Dispatcher": "Plottable.Dispatchers.Dispatcher", + "DragBoxCallback": "Plottable.Components.DragBoxCallback", + "DragCallback": "Plottable.Interactions.DragCallback", + "EaseFn": "Plottable.Animators.EaseFn", + "EaseName": "Plottable.Animators.EaseName", + "Easing": "Plottable.Animators.Easing", + "Formatter": "Plottable.Formatters.Formatter", + "IAnimator": "Plottable.Animators.IAnimator", + "IDragLineCallback": "Plottable.Components.IDragLineCallback", + "IDrawer": "Plottable.Drawers.IDrawer", + "IResizeHandler": "Plottable.Components.IResizeHandler", + "IScaleCallback": "Plottable.Scales.IScaleCallback", + "Interaction": "Plottable.Interactions.Interaction", + "Key": "Plottable.Interactions.Key", + "KeyCallback": "Plottable.Interactions.KeyCallback", + "Null": "Plottable.Animators.Null", + "Plot": "Plottable.Plots.Plot", + "PointerCallback": "Plottable.Interactions.PointerCallback", + "ProxyDrawer": "Plottable.Drawers.ProxyDrawer", + "QuantitativeScale": "Plottable.Scales.QuantitativeScale", + "Renderer": "Plottable.Plots.Renderer", + "Scale": "Plottable.Scales.Scale", + "SymbolFactory": "Plottable.SymbolFactories.SymbolFactory", + "TimeInterval": "Plottable.Axes.TimeInterval", + "TransformableScale": "Plottable.Scales.TransformableScale", + "XAlignment": "Plottable.Components.XAlignment", + "XYPlot": "Plottable.Plots.XYPlot", + "YAlignment": "Plottable.Components.YAlignment", + }, + }, +) + +# Removes the 'declare module' block inside this file, but keeps its content. +genrule( + name = "kludge_d3_transition", + srcs = ["@org_definitelytyped_types_d3_transition//:index.d.ts"], + outs = ["d3-transition.d.ts"], + cmd = "sed '/^declare module/d' $< | awk '/^}$$/ && !p {p++;next}1' >$@", +) + +tf_web_library( + name = "roboto", + srcs = [ + "roboto.html", + ], + path = "/tf-imports", + deps = [ + "@com_google_fonts_roboto", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/tf_imports/README.md b/saved_models/tensorboard/tensorboard/components/tf_imports/README.md new file mode 100644 index 0000000000000000000000000000000000000000..b1cabc61b9be000350c165690652ab906f5c1b53 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_imports/README.md @@ -0,0 +1,2 @@ +This file acts as import routers for third party javascript libraries, +e.g. Plottable and D3. diff --git a/saved_models/tensorboard/tensorboard/components/tf_imports/d3.html b/saved_models/tensorboard/tensorboard/components/tf_imports/d3.html new file mode 100644 index 0000000000000000000000000000000000000000..02be0c20bb968442cfd44e872ce2026bafefd7c9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_imports/d3.html @@ -0,0 +1,33 @@ + + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_imports/dagre.html b/saved_models/tensorboard/tensorboard/components/tf_imports/dagre.html new file mode 100644 index 0000000000000000000000000000000000000000..030b605ac72b21809df2457fa0181531809ad712 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_imports/dagre.html @@ -0,0 +1,28 @@ + + + + + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_imports/graphlib.html b/saved_models/tensorboard/tensorboard/components/tf_imports/graphlib.html new file mode 100644 index 0000000000000000000000000000000000000000..32d2c09404c8c0219b704a6dc16710c7a53c83fd --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_imports/graphlib.html @@ -0,0 +1,27 @@ + + + + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_imports/lodash.html b/saved_models/tensorboard/tensorboard/components/tf_imports/lodash.html new file mode 100644 index 0000000000000000000000000000000000000000..33ab668a63bf5a7836dc07caed6ed1084cfb4f52 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_imports/lodash.html @@ -0,0 +1 @@ + diff --git a/saved_models/tensorboard/tensorboard/components/tf_imports/numericjs.html b/saved_models/tensorboard/tensorboard/components/tf_imports/numericjs.html new file mode 100644 index 0000000000000000000000000000000000000000..b7656dd2a3d5d1f3167ebf9ee729178f9bfda13e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_imports/numericjs.html @@ -0,0 +1,26 @@ + + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_imports/plottable.html b/saved_models/tensorboard/tensorboard/components/tf_imports/plottable.html new file mode 100644 index 0000000000000000000000000000000000000000..f7bc18e5c5b885de9ffaf11f1d5b62104ce7f734 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_imports/plottable.html @@ -0,0 +1,33 @@ + + + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_imports/polymer-externs.html b/saved_models/tensorboard/tensorboard/components/tf_imports/polymer-externs.html new file mode 100644 index 0000000000000000000000000000000000000000..f79a95298d4b33b7e8543c8582732bd2f5d62401 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_imports/polymer-externs.html @@ -0,0 +1,10 @@ + + + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_imports/polymer.html b/saved_models/tensorboard/tensorboard/components/tf_imports/polymer.html new file mode 100644 index 0000000000000000000000000000000000000000..b15a47d4905a26df5131d38735e57232a1a7ccb9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_imports/polymer.html @@ -0,0 +1,36 @@ + + + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_imports/roboto.html b/saved_models/tensorboard/tensorboard/components/tf_imports/roboto.html new file mode 100644 index 0000000000000000000000000000000000000000..d640136617ae8e9c1c202aae0a51c6979e987ca8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_imports/roboto.html @@ -0,0 +1,18 @@ + + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_imports/tf_graphics_lib.html b/saved_models/tensorboard/tensorboard/components/tf_imports/tf_graphics_lib.html new file mode 100644 index 0000000000000000000000000000000000000000..d1465110e112eb9c46792b4bcbff4283289eb151 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_imports/tf_graphics_lib.html @@ -0,0 +1,25 @@ + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_imports/threejs.html b/saved_models/tensorboard/tensorboard/components/tf_imports/threejs.html new file mode 100644 index 0000000000000000000000000000000000000000..8a1ef9ba08dde78d8bc37aba92a6e5e72d156114 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_imports/threejs.html @@ -0,0 +1,26 @@ + + + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_imports/umap-js.html b/saved_models/tensorboard/tensorboard/components/tf_imports/umap-js.html new file mode 100644 index 0000000000000000000000000000000000000000..579a45d7736aba1bb0c6fba799051c2dc4a78860 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_imports/umap-js.html @@ -0,0 +1,16 @@ + + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_imports/vaadin-grid.html b/saved_models/tensorboard/tensorboard/components/tf_imports/vaadin-grid.html new file mode 100644 index 0000000000000000000000000000000000000000..1b3fd1c318460bdfeed879e9ca75be3b98affa6b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_imports/vaadin-grid.html @@ -0,0 +1,16 @@ + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_imports/vaadin-split-layout.html b/saved_models/tensorboard/tensorboard/components/tf_imports/vaadin-split-layout.html new file mode 100644 index 0000000000000000000000000000000000000000..3ade36b76dc92186fd07fda5209bdc802b0a798a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_imports/vaadin-split-layout.html @@ -0,0 +1,20 @@ + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_imports/web-component-tester.d.ts b/saved_models/tensorboard/tensorboard/components/tf_imports/web-component-tester.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e67eecc5d207a1f995aa06af2e4707cf3a12b4c0 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_imports/web-component-tester.d.ts @@ -0,0 +1,30 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +/** + * web-component-tester adds useful utilities like `flush` which is missing + * DefinitelyTyped definition. + */ + +// From: https://github.com/Polymer/web-component-tester/blob/3bef18fd439a8384e496a4e2139fc6bd9a289676/browser/environment/helpers.ts#L216 +export function flush(callback: () => void) {} +export function animationFrameFlush(callback: () => void) {} + +declare global { + interface Window { + flush: typeof flush; + animationFrameFlush: typeof animationFrameFlush; + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_line_chart_data_loader/BUILD b/saved_models/tensorboard/tensorboard/components/tf_line_chart_data_loader/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..9930275c613771e8f2501ab8e6572acadb9acf63 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_line_chart_data_loader/BUILD @@ -0,0 +1,27 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "tf_line_chart_data_loader", + srcs = [ + "tf-line-chart-data-loader.ts", + ], + strict_checks = False, + deps = [ + "//tensorboard/components/polymer:irons_and_papers", + "//tensorboard/components/polymer:legacy_element_mixin", + "//tensorboard/components/tf_backend", + "//tensorboard/components/tf_color_scale", + "//tensorboard/components/tf_dashboard_common", + "//tensorboard/components/vz_chart_helpers", + "//tensorboard/components/vz_line_chart2", + "@npm//@polymer/decorators", + "@npm//@polymer/polymer", + "@npm//@types/lodash", + "@npm//lodash", + "@npm//plottable", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/tf_line_chart_data_loader/tf-line-chart-data-loader.ts b/saved_models/tensorboard/tensorboard/components/tf_line_chart_data_loader/tf-line-chart-data-loader.ts new file mode 100644 index 0000000000000000000000000000000000000000..9941e53bd63893abc60851017e04c8e07fda4f47 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_line_chart_data_loader/tf-line-chart-data-loader.ts @@ -0,0 +1,300 @@ +/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {PolymerElement, html} from '@polymer/polymer'; +import * as Plottable from 'plottable'; +import {customElement, property, observe} from '@polymer/decorators'; +import * as _ from 'lodash'; + +import '../polymer/irons_and_papers'; +import {LegacyElementMixin} from '../polymer/legacy_element_mixin'; +import {runsColorScale} from '../tf_color_scale/colorScale'; +import {RequestManager} from '../tf_backend/requestManager'; +import { + XType, + TooltipColumn, + SymbolFn, + ScalarDatum, +} from '../vz_chart_helpers/vz-chart-helpers'; +import {DataLoaderBehavior} from '../tf_dashboard_common/data-loader-behavior'; +import '../vz_line_chart2/vz-line-chart2'; +import {YScaleType, FillArea} from '../vz_line_chart2/line-chart'; + +export interface TfLineChartDataLoader extends HTMLElement { + commitChanges(): void; + redraw(): void; + reload(): void; + resetDomain(): void; + setSeriesData(name: string, data: ScalarDatum[]): void; +} + +// The chart can sometimes get in a bad state, when it redraws while +// it is display: none due to the user having switched to a different +// page. This code implements a cascading queue to redraw the bad charts +// one-by-one once they are active again. +// We use a cascading queue becuase we don't want to block the UI / make the +// ripples very slow while everything synchronously redraws. +const redrawQueue: _TfLineChartDataLoader[] = []; +let redrawRaf = 0; +const cascadingRedraw = _.throttle(function internalRedraw() { + if (redrawQueue.length == 0) return; + const x = redrawQueue.shift(); + if (x && x.active) { + x.redraw(); + x._maybeRenderedInBadState = false; + } + window.cancelAnimationFrame(redrawRaf); + window.requestAnimationFrame(internalRedraw); +}, 100); + +// A component that fetches data from the TensorBoard server and renders it into +// a vz-line-chart. +@customElement('tf-line-chart-data-loader') +class _TfLineChartDataLoader + extends DataLoaderBehavior( + LegacyElementMixin(PolymerElement) + ) + implements TfLineChartDataLoader { + static readonly template = html` +
+ + +
+ + `; + + private _redrawRaf: number | null = null; + + @property({ + type: Boolean, + observer: '_fixBadStateWhenActive', + }) + active: boolean = false; + + @property({type: Array}) + dataSeries!: string[]; + + @property({type: Object}) + requestManager!: RequestManager; + + @property({ + type: Boolean, + observer: '_logScaleChanged', + }) + logScaleActive: boolean = false; + + @property({type: Object}) + xComponentsCreationMethod?: any; + + @property({type: String}) + xType?: XType; + + @property({type: Object}) + yValueAccessor?: Plottable.IAccessor; + + @property({type: Object}) + fillArea?: FillArea; + + @property({type: Boolean}) + smoothingEnabled?: boolean; + + @property({type: Number}) + smoothingWeight?: number; + + @property({type: Array}) + tooltipColumns?: TooltipColumn[]; + + @property({type: String}) + tooltipSortingMethod?: any; + + @property({type: String}) + tooltipPosition?: string; + + @property({type: Boolean}) + ignoreYOutliers?: boolean; + + @property({type: Array}) + defaultXRange?: number[]; + + @property({type: Array}) + defaultYRange?: number[]; + + @property({type: Object}) + symbolFunction?: SymbolFn; + + @property({type: Object}) + colorScale = {scale: runsColorScale}; + + @property({type: Boolean}) + _resetDomainOnNextLoad: boolean = true; + + @property({ + type: Boolean, + reflectToAttribute: true, + }) + _maybeRenderedInBadState: boolean = false; + + onLoadFinish() { + this.commitChanges(); + if (this.dataToLoad.length > 0 && this._resetDomainOnNextLoad) { + // (Don't unset _resetDomainOnNextLoad when we didn't + // load any runs: this has the effect that if all our + // runs are deselected, then we toggle them all on, we + // properly size the domain once all the data is loaded + // instead of just when we're first rendered.) + this._resetDomainOnNextLoad = false; + this.getChart().resetDomain(); + } + this.redraw(); + } + + disconnectedCallback() { + super.disconnectedCallback(); + if (this._redrawRaf !== null) cancelAnimationFrame(this._redrawRaf); + } + + exportAsSvgString() { + const exporter = this.getChart().getExporter(); + return exporter.exportAsString(); + } + + private getChart(): any { + return (this.$.chart as unknown) as any; + } + + resetDomain() { + this.getChart().resetDomain(); + } + + setSeriesData(name: string, data: ScalarDatum[]) { + this.getChart().setSeriesData(name, data); + } + + setSeriesMetadata(name: string, metadata: ScalarMetadata) { + this.getChart().setSeriesMetadata(name, metadata); + } + + commitChanges() { + this.getChart().commitChanges(); + } + + redraw() { + if (this._redrawRaf !== null) cancelAnimationFrame(this._redrawRaf); + this._redrawRaf = window.requestAnimationFrame(() => { + if (this.active) { + this.getChart().redraw(); + } else { + // If we reached a point where we should render while the page + // is not active, we've gotten into a bad state. + this._maybeRenderedInBadState = true; + } + }); + } + + @observe('loadKey') + _loadKeyChanged() { + this.reset(); + this._resetDomainOnNextLoad = true; + } + + @observe('dataSeries.*') + _dataSeriesChanged() { + // Setting visible series redraws the chart. + this.getChart().setVisibleSeries(this.dataSeries); + } + + private _logScaleChanged(logScaleActive: boolean) { + const chart = this.getChart(); + chart.yScaleType = logScaleActive ? YScaleType.LOG : YScaleType.LINEAR; + this.redraw(); + } + + private _fixBadStateWhenActive() { + // When the chart enters a potentially bad state (because it should + // redraw, but the page is not currently active), we set the + // _maybeRenderedInBadState flag. Whenever the chart becomes active, + // we test this and schedule a redraw of the bad charts. + if (this.active && this._maybeRenderedInBadState) { + redrawQueue.push(this); + cascadingRedraw(); + } + } + + private _onChartAttached() { + if (!this.active) { + this._maybeRenderedInBadState = true; + } + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_markdown_view/BUILD b/saved_models/tensorboard/tensorboard/components/tf_markdown_view/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..2ed7de9f6c0358348b95e4bdd416fb8c0c46ef88 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_markdown_view/BUILD @@ -0,0 +1,22 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "tf_markdown_view", + srcs = ["tf-markdown-view.ts"], + strict_checks = False, + deps = [ + ":sanitize", + "//tensorboard/components/polymer:legacy_element_mixin", + "@npm//@polymer/decorators", + "@npm//@polymer/polymer", + ], +) + +tf_ts_library( + name = "sanitize", + srcs = ["sanitize.ts"], +) diff --git a/saved_models/tensorboard/tensorboard/components/tf_markdown_view/sanitize.ts b/saved_models/tensorboard/tensorboard/components/tf_markdown_view/sanitize.ts new file mode 100644 index 0000000000000000000000000000000000000000..55ef6253730d9defb0a32bc3fb0d39578e80e21e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_markdown_view/sanitize.ts @@ -0,0 +1,24 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +/** + * Does not actually sanitize html. + * + * This exported function is overriden in the internal Google repository for + * compatibility with security libraries used internally at Google. + */ +export function sanitize(html: string) { + return html; +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_markdown_view/tf-markdown-view.ts b/saved_models/tensorboard/tensorboard/components/tf_markdown_view/tf-markdown-view.ts new file mode 100644 index 0000000000000000000000000000000000000000..4feac6ba712d12d61abecb70a4b6a07dc7ede852 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_markdown_view/tf-markdown-view.ts @@ -0,0 +1,83 @@ +/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {PolymerElement, html} from '@polymer/polymer'; +import {LegacyElementMixin} from '../polymer/legacy_element_mixin'; +import {computed, customElement, property} from '@polymer/decorators'; +import {sanitize} from './sanitize'; + +// tf-markdown-view renders raw HTML that has been converted from +// Markdown by some other agent. The HTML must be sanitized, and must be +// safe to inject directly into the DOM. + +// TensorBoard plugins can use the `markdown_to_safe_html` function from +// the `tensorboard.plugin_util` module on the backend to generate HTML +// suitable for use with this component. +@customElement('tf-markdown-view') +class TfMarkdownView extends LegacyElementMixin(PolymerElement) { + static readonly template = html` +
+ + `; + @property({ + type: String, + }) + html: string = ''; + + @computed('html') + get sanitizedHtml() { + return sanitize(this.html); + } + + attached() { + window.requestAnimationFrame(() => { + this.scopeSubtree(this.$.markdown, /*shouldObserve=*/ true); + }); + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_paginated_view/BUILD b/saved_models/tensorboard/tensorboard/components/tf_paginated_view/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..b0feb6759d2397b22d49f1444f33c56219a5e4a7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_paginated_view/BUILD @@ -0,0 +1,27 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "tf_paginated_view", + srcs = [ + "index.ts", + "paginatedViewStore.ts", + "tf-category-paginated-view.ts", + "tf-dom-repeat.ts", + "tf-paginated-view-store.ts", + ], + strict_checks = False, + deps = [ + "//tensorboard/components/polymer:irons_and_papers", + "//tensorboard/components/polymer:legacy_element_mixin", + "//tensorboard/components/polymer:register_style_dom_module", + "//tensorboard/components/tf_categorization_utils", + "//tensorboard/components/tf_dashboard_common", + "//tensorboard/components/tf_storage", + "@npm//@polymer/decorators", + "@npm//@polymer/polymer", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/tf_paginated_view/index.ts b/saved_models/tensorboard/tensorboard/components/tf_paginated_view/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..477518c228cedce82f1c1dffc110ada69efbd53a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_paginated_view/index.ts @@ -0,0 +1,17 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export * from './paginatedViewStore'; +export * from './tf-category-paginated-view'; +export * from './tf-dom-repeat'; diff --git a/saved_models/tensorboard/tensorboard/components/tf_paginated_view/paginatedViewStore.ts b/saved_models/tensorboard/tensorboard/components/tf_paginated_view/paginatedViewStore.ts new file mode 100644 index 0000000000000000000000000000000000000000..4d279b041a7795fa501b9090240463e3e43b1ac7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_paginated_view/paginatedViewStore.ts @@ -0,0 +1,69 @@ +/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {getNumber, setNumber} from '../tf_storage/storage'; + +const LIMIT_LOCAL_STORAGE_KEY = 'TF.TensorBoard.PaginatedView.limit'; +const DEFAULT_LIMIT = 12; // reasonably small and has lots of factors +let _limit: number = null; // cached localStorage value + +export type Listener = () => void; + +const listeners = new Set(); + +/** + * Register a listener (nullary function) to be called when the page + * limit changes. + */ +export function addLimitListener(listener: Listener): void { + listeners.add(listener); +} + +/** + * Remove a listener registered with `addLimitListener`. + */ +export function removeLimitListener(listener: Listener): void { + listeners.delete(listener); +} + +export function getLimit() { + if (_limit == null) { + _limit = getNumber(LIMIT_LOCAL_STORAGE_KEY, { + useLocalStorage: true, + }); + if (_limit == null || !isFinite(_limit) || _limit <= 0) { + _limit = DEFAULT_LIMIT; + } + } + return _limit; +} + +export function setLimit(limit: number) { + if (limit !== Math.floor(limit)) { + throw new Error(`limit must be an integer, but got: ${limit}`); + } + if (limit <= 0) { + throw new Error(`limit must be positive, but got: ${limit}`); + } + if (limit === _limit) { + return; + } + _limit = limit; + setNumber(LIMIT_LOCAL_STORAGE_KEY, _limit, { + useLocalStorage: true, + }); + listeners.forEach((listener) => { + listener(); + }); +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_paginated_view/test/categoryPaginatedViewTests.ts b/saved_models/tensorboard/tensorboard/components/tf_paginated_view/test/categoryPaginatedViewTests.ts new file mode 100644 index 0000000000000000000000000000000000000000..9e0f0d7dd81c3b19ca4fd7728f7bc217ff0d9f7a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_paginated_view/test/categoryPaginatedViewTests.ts @@ -0,0 +1,190 @@ +/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the 'License'); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an 'AS IS' BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +namespace tf_paginated_view { + const {expect} = chai; + + declare function fixture(id: string): void; + type Item = { + id: String; + content: String; + }; + type ItemCategory = tf_categorization_utils.Category; + + function createCategory(numItems: Number): ItemCategory { + const items = Array.from(Array(numItems)).map((_, i) => ({ + id: `id${i}`, + content: `content_${i}`, + })); + + return { + name: 'Category1', + metadata: { + type: tf_categorization_utils.CategoryType.PREFIX_GROUP, + }, + items, + }; + } + function flushP(): Promise { + return new Promise((resolve) => window.flush(resolve)); + } + function flushAnimationFrameP(): Promise { + return new Promise((resolve) => window.animationFrameFlush(resolve)); + } + function flushAllP(): Promise<[void, void]> { + return Promise.all([flushP(), flushAnimationFrameP()]); + } + describe('tf-paginated-view tests', () => { + let view: any; + + /** + * Returns stamped template item. + */ + function getItem(id: string): HTMLElement { + return view.$.view.querySelector(`#${id}`); + } + /** + * Returns element inside shadowRoot of tf-category-paginated-view. + */ + function querySelector(cssSelector: string): HTMLElement { + return view.$.view.root.querySelector(cssSelector); + } + async function goNext() { + querySelector('.big-page-buttons paper-button:last-of-type').click(); + await flushAllP(); + } + + beforeEach(async () => { + view = fixture('paginatedViewFixture'); + view._limit = 2; + view.category = createCategory(5); + view.randomNumber = 42; + + // allow dom-if to be flushed. + await flushAllP(); + }); + + it('renders a page', () => { + expect(getItem('id0')).to.be.not.null; + expect(getItem('id1')).to.be.not.null; + + // 2-4 should be in another page. + expect(getItem('id2')).to.be.null; + }); + + it('responds to ancestor prop change that is bound on template', () => { + expect(getItem('id0').getAttribute('number')).to.equal('42'); + + view.randomNumber = 7; + expect(getItem('id0').getAttribute('number')).to.equal('7'); + }); + + it('navigates to next page when clicked on a button', async () => { + // Sanity check + expect(getItem('id2')).to.be.null; + expect(getItem('id4')).to.be.null; + expect(querySelector('paper-input')).to.have.property('value', '1'); + + await goNext(); + + expect(getItem('id1')).to.be.null; + expect(getItem('id2')).to.be.not.null; + expect(getItem('id3')).to.be.not.null; + expect(getItem('id4')).to.be.null; + expect(querySelector('paper-input')).to.have.property('value', '2'); + + await goNext(); + + expect(getItem('id3')).to.be.null; + expect(getItem('id4')).to.be.not.null; + expect(querySelector('paper-input')).to.have.property('value', '3'); + }); + + it('reacts to limit change', () => { + // 2-4 should be in another page, initially. + expect(getItem('id2')).to.be.null; + + view._limit = 4; + expect(getItem('id2')).to.be.not.null; + expect(getItem('id3')).to.be.not.null; + expect(getItem('id4')).to.be.null; + }); + + it('reacts to category update', async () => { + view.category = Object.assign({}, view.category, { + items: view.category.items.slice().reverse(), + }); + await flushAllP(); + expect(getItem('id4')).to.be.not.null; + expect(getItem('id3')).to.be.not.null; + }); + + it('reacts to items update', async () => { + // Mutate the property of category in Polymeric way. + view.set('category.items', view.category.items.slice().reverse()); + await flushAllP(); + expect(getItem('id4')).to.be.not.null; + expect(getItem('id3')).to.be.not.null; + }); + + it('handles shrinking the number of pages', async () => { + view.category = createCategory(1); + await flushAllP(); + + expect(getItem('id0')).to.be.not.null; + expect(getItem('id1')).to.be.null; + expect(_getPageCount()).to.equal(1); + }); + + it('handles growing the number of pages', async () => { + expect(_getPageCount()).to.equal(3); + + view.category = createCategory(10); + + await flushAllP(); + expect(_getPageCount()).to.equal(5); + }); + + it('sets all items to active=true when opened is true', () => { + expect(getItem('id0').hasAttribute('active')).to.be.true; + expect(getItem('id1').hasAttribute('active')).to.be.true; + }); + + it('sets all items to active=false when opened is false', async () => { + querySelector('button').click(); + await flushAllP(); + + expect(getItem('id0').hasAttribute('active')).to.be.false; + expect(getItem('id1').hasAttribute('active')).to.be.false; + }); + + it('sets item to inactive when it is out of view', async () => { + // The DOM will be removed from document but it will be updated. Hold + // references to them here. + const item0 = getItem('id0'); + const item1 = getItem('id1'); + + await goNext(); + + expect(item0.hasAttribute('active')).to.be.false; + expect(item1.hasAttribute('active')).to.be.false; + expect(getItem('id2').hasAttribute('active')).to.be.true; + expect(getItem('id3').hasAttribute('active')).to.be.true; + }); + + function _getPageCount(): number { + return view.$.view._pageCount; + } + }); +} // namespace tf_paginated_view diff --git a/saved_models/tensorboard/tensorboard/components/tf_paginated_view/test/tests.html b/saved_models/tensorboard/tensorboard/components/tf_paginated_view/test/tests.html new file mode 100644 index 0000000000000000000000000000000000000000..ef11987392e290ed9ef1d09349d01632c3b0ae6a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_paginated_view/test/tests.html @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_paginated_view/tf-category-paginated-view.ts b/saved_models/tensorboard/tensorboard/components/tf_paginated_view/tf-category-paginated-view.ts new file mode 100644 index 0000000000000000000000000000000000000000..033205141f04867786be49ae7dca993f05f94d54 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_paginated_view/tf-category-paginated-view.ts @@ -0,0 +1,553 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {html} from '@polymer/polymer'; +import {customElement, property, observe, computed} from '@polymer/decorators'; + +import '../polymer/irons_and_papers'; +import { + Category, + CategoryType, +} from '../tf_categorization_utils/categorizationUtils'; +import { + addLimitListener, + removeLimitListener, + getLimit, +} from './paginatedViewStore'; +import {TfDomRepeat} from './tf-dom-repeat'; + +@customElement('tf-category-paginated-view') +class TfCategoryPaginatedView extends TfDomRepeat { + static readonly template = html` + + + `; + + @property({type: Object}) + category: Category; + + @property({type: Boolean}) + initialOpened: boolean; + + @property({ + type: Boolean, + notify: true, + }) + opened: boolean; + + @property({ + type: Boolean, + }) + disablePagination: boolean = false; + + @property({ + type: Number, + computed: '_computeCount(category.items.*)', + }) + _count: number; + + @property({ + type: Boolean, + computed: '_computePaneRendered(category)', + observer: '_onPaneRenderedChanged', + }) + _paneRendered: boolean; + + @property({ + type: Boolean, + computed: '_computeIsSearchResults(category.metadata.type)', + }) + _isSearchResults: boolean; + + @property({ + type: Boolean, + computed: '_computeIsInvalidSearchResults(category.metadata)', + }) + _isInvalidSearchResults: boolean; + + @property({ + type: Boolean, + computed: '_computeIsUniversalSearchQuery(category.metadata)', + }) + _isUniversalSearchQuery: boolean; + + @property({ + type: Object, + observer: '_getCategoryItemKeyChanged', + }) + getCategoryItemKey = (item) => JSON.stringify(item); + + @property({ + type: Number, + observer: '_limitChanged', + }) + _limit: number = 12; + + @property({ + type: Number, + }) + _activeIndex: number = 0; + + @property({ + type: Number, + computed: '_computePageCount(category.items.*, _limit)', + }) + _pageCount: number; + + @property({ + type: String, + computed: '_computeInputWidth(_pageCount)', + observer: '_updateInputWidth', + }) + _inputWidth: string; + + @property({ + type: String, + computed: + '_computePageInputValue(_pageInputFocused, _pageInputRawValue, _currentPage)', + observer: '_updatePageInputValue', + }) + _pageInputValue: string; + + @property({ + type: String, + }) + _pageInputRawValue: string = ''; + + @property({ + type: Boolean, + }) + _pageInputFocused: boolean = false; + + private _limitListener: any; + + _computeCount() { + return this.category.items.length; + } + + @computed('_count') + get _hasMultiple(): boolean { + return this._count > 1; + } + _togglePane() { + this.opened = !this.opened; + } + + @observe('opened') + _changeContentActive(opened: boolean): void { + this._contentActive = opened; + } + + _onPaneRenderedChanged(newRendered, oldRendered) { + if (newRendered && newRendered !== oldRendered) { + // Force dom-if render without waiting for one rAF. + (this.$.ifRendered as any).render(); + } + } + _computePaneRendered(category) { + // Show a category unless it's a search results category where + // there wasn't actually a search query. + return !( + category.metadata.type === CategoryType.SEARCH_RESULTS && + category.name === '' + ); + } + + @computed('opened', '_paneRendered') + get _itemsRendered(): boolean { + return this._paneRendered && this.opened; + } + _computeIsSearchResults(type) { + return type === CategoryType.SEARCH_RESULTS; + } + _computeIsInvalidSearchResults(metadata) { + return ( + metadata.type === CategoryType.SEARCH_RESULTS && !metadata.validRegex + ); + } + _computeIsUniversalSearchQuery(metadata) { + return ( + metadata.type === CategoryType.SEARCH_RESULTS && metadata.universalRegex + ); + } + _isCompositeSearch() { + const {type, compositeSearch} = this.category.metadata as any; + return compositeSearch && type === CategoryType.SEARCH_RESULTS; + } + ready() { + super.ready(); + this.opened = this.initialOpened == null ? true : this.initialOpened; + this._limitListener = () => { + this.set('_limit', getLimit()); + }; + addLimitListener(this._limitListener); + this._limitListener(); + } + detached() { + removeLimitListener(this._limitListener); + } + + @observe( + '_itemsRendered', + 'category.items.*', + '_limit', + '_activeIndex', + '_pageCount', + 'disablePagination' + ) + _updateRenderedItems() { + var itemsRendered = this._itemsRendered; + var limit = this._limit; + var activeIndex = this._activeIndex; + var disablePagination = this.disablePagination; + if (!itemsRendered) return; + const activePageIndex = Math.floor(activeIndex / limit); + const items = this.category.items || []; + const domItems = disablePagination + ? items + : items.slice(activePageIndex * limit, (activePageIndex + 1) * limit); + this.updateDom(domItems); + } + + _limitChanged(limit) { + this.setCacheSize(limit * 2); + } + + _getCategoryItemKeyChanged() { + this.setGetItemKey(this.getCategoryItemKey); + } + + @computed('_limit', '_activeIndex') + get _currentPage(): number { + var limit = this._limit; + var activeIndex = this._activeIndex; + return Math.floor(activeIndex / limit) + 1; + } + _computePageCount(_, limit) { + return this.category ? Math.ceil(this.category.items.length / limit) : 0; + } + + @computed('_pageCount', 'disablePagination') + get _multiplePagesExist(): boolean { + var pageCount = this._pageCount; + var disablePagination = this.disablePagination; + return !disablePagination && pageCount > 1; + } + + @computed('_currentPage') + get _hasPreviousPage(): boolean { + var currentPage = this._currentPage; + return currentPage > 1; + } + + @computed('_currentPage', '_pageCount') + get _hasNextPage(): boolean { + var currentPage = this._currentPage; + var pageCount = this._pageCount; + return currentPage < pageCount; + } + _computeInputWidth(pageCount) { + // Add 20px for the +/- arrows added by browsers. + return `calc(${pageCount.toString().length}em + 20px)`; + } + /** + * Update _activeIndex, maintaining its range invariant. + */ + _setActiveIndex(index) { + const maxIndex = (this.category.items || []).length - 1; + if (index > maxIndex) { + index = maxIndex; + } + if (index < 0) { + index = 0; + } + this.set('_activeIndex', index); + } + + @observe('category.items.*') + _clampActiveIndex() { + this._setActiveIndex(this._activeIndex); + } + _performPreviousPage() { + this._setActiveIndex(this._activeIndex - this._limit); + } + _performNextPage() { + this._setActiveIndex(this._activeIndex + this._limit); + } + _computePageInputValue(focused, rawValue, currentPage) { + return focused ? rawValue : currentPage.toString(); + } + _handlePageInputEvent(e) { + this.set('_pageInputRawValue', e.target.value); + const oneIndexedPage = Number(e.target.value || NaN); + if (isNaN(oneIndexedPage)) return; + const page = Math.max(1, Math.min(oneIndexedPage, this._pageCount)) - 1; + this._setActiveIndex(this._limit * page); + } + _handlePageChangeEvent() { + // Occurs on Enter, etc. Commit the true state. + this.set('_pageInputRawValue', this._currentPage.toString()); + } + _handlePageFocusEvent() { + // Discard any old (or uninitialized) state before we grant focus. + this.set('_pageInputRawValue', this._pageInputValue); + this.set('_pageInputFocused', true); + } + _handlePageBlurEvent() { + this.set('_pageInputFocused', false); + } + _updatePageInputValue(newValue) { + // Force two-way binding. + const pageInput = this.shadowRoot.querySelector('#page-input input') as any; + if (pageInput) { + pageInput.value = newValue; + } + } + _updateInputWidth() { + this.updateStyles({ + '--tf-category-paginated-view-page-input-width': this._inputWidth, + }); + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_paginated_view/tf-dom-repeat.ts b/saved_models/tensorboard/tensorboard/components/tf_paginated_view/tf-dom-repeat.ts new file mode 100644 index 0000000000000000000000000000000000000000..021a91bdc304c1bd839a4f4f52ad1cf3d54d1ff3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_paginated_view/tf-dom-repeat.ts @@ -0,0 +1,258 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + templatize, + TemplateInstanceBase, +} from '@polymer/polymer/lib/utils/templatize'; +import {property, observe} from '@polymer/decorators'; + +import {ArrayUpdateHelper} from '../tf_dashboard_common/array-update-helper'; + +/** + * The TfDomRepeatBehavior re-implements part of the dom-repeat template. + * It can be applied to any Polymer components to make it dom-repeat-like. + * The major discrepency is in syntax when using: + * + * + * // versus + * + * + * + * + * When implementing the behavior, the Polymer component has to invoke + * `this.updateDom(newItems)`. Other protected APIs are `setGetItemKey` and + * `setCacheSize` (please see respective doc for details). + */ +export class TfDomRepeat extends ArrayUpdateHelper { + @property({type: String}) + as = 'item'; + + @property({type: Array}) + items!: T[]; + + /** + * Whether all stamped items are active or not. + * @protected + */ + @property({type: Boolean}) + protected _contentActive: boolean = true; + + @property({type: Boolean}) + _domBootstrapped = false; + + @property({type: Object}) + _ctor: any = null; + + /** + * A list of rendered and mounted items. + */ + @property({type: Array}) + _renderedItems: T[] = []; + + /** + * A map of stamped child components. + */ + @property({type: Object}) + _renderedTemplateInst = new Map(); + + /** + * When item is removed, it is placed in a cache and the oldest item gets + * removed when LRU grows more than size of the 2x_limit. + */ + @property({type: Object}) + _lruCachedItems = new Map(); + + @property({type: Number}) + _cacheSize = 10; + + @property({type: Object}) + _getItemKey = (item: T) => JSON.stringify(item); + + @property({type: Boolean}) + _isConnected = false; + + connectedCallback() { + super.connectedCallback(); + this._isConnected = true; + } + + /** + * Sets the size of the DOM cache used for optimizing performance. The + * default cache size is 10. + */ + setCacheSize(size: number) { + this._cacheSize = size; + } + + /** + * Sets getItemKey, a function that requires a unique identifier for an + * item. It is used to optimize performance of redraws. The default is + * JSON.stringify(item). + */ + setGetItemKey(getItemKey: (item: T) => string) { + this._getItemKey = getItemKey; + } + + /** + * Updates DOM to reflect changes in `items`. + */ + updateDom(items: T[]) { + this.updateArrayProp('_renderedItems', items, this._getItemKey); + } + + _ensureTemplatized() { + // Polymer is not ready (and props/DOM for the components are not + // populated) + if (!this.isConnected) return false; + if (!this._ctor) { + const templateNode = this.querySelector('template'); + this._ctor = templatize(templateNode!, this, { + parentModel: true, + instanceProps: { + [this.as]: true, + active: this._contentActive, + }, + forwardHostProp: function (prop: string, value: any) { + this._renderedTemplateInst.forEach((inst: TemplateInstanceBase) => { + inst.forwardHostProp(prop, value); + }); + }, + }); + } + return true; + } + + @observe('_isConnected') + _bootstrapDom() { + if (!this._ensureTemplatized() || this._domBootstrapped) { + return; + } + + const observer = new MutationObserver((mutationsList) => { + for (const mutation of mutationsList) { + if (mutation.type === 'childList') { + for (const node of Array.from(mutation.addedNodes)) { + if (node instanceof Element) { + node.setAttribute('slot', 'items'); + } + } + } + } + }); + observer.observe(this, {childList: true}); + + Array.from(this.children).forEach((child) => { + this.removeChild(child); + }); + this._lruCachedItems.clear(); + this._renderedItems.forEach((item, index) => this._insertItem(item, index)); + this._domBootstrapped = true; + } + + @observe('_contentActive') + _updateActive() { + if (!this._domBootstrapped) return; + Array.from(this._renderedTemplateInst.values()).forEach((inst) => { + inst.notifyPath('active', this._contentActive); + }); + } + + @observe('_renderedItems.*', '_domBootstrapped') + _updateDom( + event: any // PolymerDeepPropertyChange> + ) { + if (!this._domBootstrapped) return; + // These are uninteresting. + if ( + event.path == '_renderedItems' || + event.path == '_renderedItems.length' + ) { + return; + } + if (event.path === '_renderedItems.splices') { + const value = event.value as any; // PolymerSpliceChange; + value.indexSplices.forEach((splice) => { + const {index, addedCount, object, removed} = splice; + removed.forEach((item) => { + this._removeItem(item, this.children[index]); + }); + object + .slice(index, index + addedCount) + .forEach((item, ind) => this._insertItem(item, index + ind)); + this._trimCache(); + }); + } else { + // Update the stamped and mounted DOM model by notifying. + const key = this._getItemKey(event.value as T); + if (this._renderedTemplateInst.has(key)) { + this._renderedTemplateInst.get(key)!.notifyPath(this.as, event.value); + } else { + console.warn( + `Expected '${key}' to exist in the DOM but ` + `could not find one.` + ); + } + } + } + + _insertItem(item: T, atIndex: number) { + if (!this._ensureTemplatized()) { + throw new Error('Expected templatized before inserting an item'); + } + let fragOrEl; + const key = this._getItemKey(item); + if (this._lruCachedItems.has(key)) { + fragOrEl = this._lruCachedItems.get(key); + this._lruCachedItems.delete(key); + this._renderedTemplateInst + .get(key)! + .notifyPath('active', this._contentActive); + } else { + const prop = {[this.as]: item, active: this._contentActive}; + const inst = new this._ctor!(prop); + fragOrEl = inst.root; + this._renderedTemplateInst.set(key, inst); + } + if (this.children[atIndex]) { + this.insertBefore(fragOrEl, this.children[atIndex]); + } else { + const els = + fragOrEl.nodeType == Node.DOCUMENT_FRAGMENT_NODE + ? Array.from(fragOrEl.children) + : [fragOrEl]; + els.forEach((el: Element) => el.setAttribute('slot', 'items')); + this.appendChild(fragOrEl); + } + } + + _removeItem(item: T, node: Node) { + if (node.parentNode) node.parentNode.removeChild(node); + const key = this._getItemKey(item); + this._lruCachedItems.set(key, node); + this._renderedTemplateInst.get(key)!.notifyPath('active', false); + } + + @observe('_cacheSize') + _trimCache() { + while (this._lruCachedItems.size > this._cacheSize) { + const [firstKey] = this._lruCachedItems.keys(); + this._lruCachedItems.delete(firstKey); + this._renderedTemplateInst.delete(firstKey); + } + } +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_paginated_view/tf-paginated-view-store.ts b/saved_models/tensorboard/tensorboard/components/tf_paginated_view/tf-paginated-view-store.ts new file mode 100644 index 0000000000000000000000000000000000000000..9a006ee5a6eef49f2ddd41ba0709e18e2046c201 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_paginated_view/tf-paginated-view-store.ts @@ -0,0 +1,25 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {PolymerElement} from '@polymer/polymer'; +import {customElement} from '@polymer/decorators'; + +import * as tf_paginated_view from './index'; + +@customElement('tf-paginated-view-store') +export class TfPaginatedViewStore extends PolymerElement { + _template = null; + tf_paginated_view = tf_paginated_view; +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_runs_selector/BUILD b/saved_models/tensorboard/tensorboard/components/tf_runs_selector/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..b9fad1e080c3708ee6ca5b45078fca0223ead261 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_runs_selector/BUILD @@ -0,0 +1,22 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "tf_runs_selector", + srcs = ["tf-runs-selector.ts"], + strict_checks = False, + deps = [ + "//tensorboard/components/polymer:irons_and_papers", + "//tensorboard/components/polymer:legacy_element_mixin", + "//tensorboard/components/tf_backend", + "//tensorboard/components/tf_color_scale", + "//tensorboard/components/tf_dashboard_common", + "//tensorboard/components/tf_storage", + "//tensorboard/components/tf_wbr_string", + "@npm//@polymer/decorators", + "@npm//@polymer/polymer", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/tf_runs_selector/tf-runs-selector.ts b/saved_models/tensorboard/tensorboard/components/tf_runs_selector/tf-runs-selector.ts new file mode 100644 index 0000000000000000000000000000000000000000..1e5a9b27a284f65555d995dfcea0bb7d700f09b3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_runs_selector/tf-runs-selector.ts @@ -0,0 +1,225 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {PolymerElement, html} from '@polymer/polymer'; +import {computed, customElement, property} from '@polymer/decorators'; + +import {LegacyElementMixin} from '../polymer/legacy_element_mixin'; +import '../polymer/irons_and_papers'; +import * as baseStore from '../tf_backend/baseStore'; +import {environmentStore} from '../tf_backend/environmentStore'; +import {runsStore} from '../tf_backend/runsStore'; +import {runsColorScale} from '../tf_color_scale/colorScale'; +import * as storage from '../tf_storage/storage'; + +import '../tf_dashboard_common/tf-multi-checkbox'; +import '../tf_wbr_string/tf-wbr-string'; + +@customElement('tf-runs-selector') +class TfRunsSelector extends LegacyElementMixin(PolymerElement) { + static readonly template = html` + +

Data Location

+ +
+
+

Runs

+
+ + + Toggle All Runs + + + + `; + + @property({ + type: Object, + observer: '_storeRunSelectionState', + }) + runSelectionState: object = storage + .getObjectInitializer('runSelectionState', { + defaultValue: {}, + }) + .call(this); + + @property({ + type: String, + observer: '_regexObserver', + }) + regexInput: string = storage + .getStringInitializer('regexInput', { + defaultValue: '', + }) + .call(this); + + @property({ + type: Array, + notify: true, + }) + selectedRuns: unknown[]; + + @property({type: Array}) + runs: unknown[]; + + @property({ + type: String, + notify: true, + }) + dataLocation: string; + + @property({ + type: Number, + }) + _dataLocationClipLength: number = 250; + + @property({ + type: String, + }) + readonly _dataLocationDelimiterPattern: string = '[/=_,-]'; + + @property({ + type: Object, + }) + coloring: object = { + getColor: runsColorScale, + }; + + _runStoreListener: baseStore.ListenKey; + + _envStoreListener: baseStore.ListenKey; + + attached() { + this._runStoreListener = runsStore.addListener(() => { + this.set('runs', runsStore.getRuns()); + }); + this.set('runs', runsStore.getRuns()); + this._envStoreListener = environmentStore.addListener(() => { + this.set('dataLocation', environmentStore.getDataLocation()); + }); + this.set('dataLocation', environmentStore.getDataLocation()); + } + + detached() { + runsStore.removeListenerByKey(this._runStoreListener); + environmentStore.removeListenerByKey(this._envStoreListener); + } + + _toggleAll() { + (this.$.multiCheckbox as any).toggleAll(); + } + + @computed('dataLocation', '_dataLocationClipLength') + get _clippedDataLocation(): string { + var dataLocation = this.dataLocation; + var dataLocationClipLength = this._dataLocationClipLength; + if (dataLocation === undefined) { + // The dataLocation has not been set yet. + return undefined; + } + if (dataLocation.length > dataLocationClipLength) { + // Clip the dataLocation to avoid blocking the runs selector. Let the + // user view a more full version of the dataLocation. + return dataLocation.substring(0, dataLocationClipLength); + } else { + return dataLocation; + } + } + + _openDataLocationDialog(event) { + event.preventDefault(); + (this.$$('#data-location-dialog') as any).open(); + } + + _shouldShowExpandDataLocationButton(dataLocation, _dataLocationClipLength) { + return dataLocation && dataLocation.length > _dataLocationClipLength; + } + + _storeRunSelectionState = storage.getObjectObserver('runSelectionState', { + defaultValue: {}, + }); + + _regexObserver = storage.getStringObserver('regexInput', { + defaultValue: '', + }); +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_storage/BUILD b/saved_models/tensorboard/tensorboard/components/tf_storage/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..1d312ec45c447d8059a22a23714f22b3a3efb8f9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_storage/BUILD @@ -0,0 +1,23 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "tf_storage", + srcs = [ + "index.ts", + "listeners.ts", + "storage.ts", + "tf-storage-polymer.ts", + ], + strict_checks = False, + deps = [ + "//tensorboard/components/tf_globals", + "@npm//@polymer/decorators", + "@npm//@polymer/polymer", + "@npm//@types/lodash", + "@npm//lodash", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/tf_storage/index.ts b/saved_models/tensorboard/tensorboard/components/tf_storage/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..e0d7e905a2b45bb959b35cea9d1e6d32d8da240c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_storage/index.ts @@ -0,0 +1,16 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export * from './listeners'; +export * from './storage'; diff --git a/saved_models/tensorboard/tensorboard/components/tf_storage/listeners.ts b/saved_models/tensorboard/tensorboard/components/tf_storage/listeners.ts new file mode 100644 index 0000000000000000000000000000000000000000..ec410a8f2f8f4c52b6098898443322f9d578bd7c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_storage/listeners.ts @@ -0,0 +1,49 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export class ListenKey { + public readonly listener: Function; + constructor(listener: Function) { + this.listener = listener; + } +} +const hashListeners = new Set(); +const storageListeners = new Set(); +window.addEventListener('hashchange', () => { + hashListeners.forEach((listenKey) => listenKey.listener()); +}); +// [1]: The event only triggers when another tab edits the storage. Changing a +// value in current browser tab will NOT trigger below event. +window.addEventListener('storage', () => { + storageListeners.forEach((listenKey) => listenKey.listener()); +}); +export function addHashListener(fn: Function): ListenKey { + const key = new ListenKey(fn); + hashListeners.add(key); + return key; +} +export function addStorageListener(fn: Function): ListenKey { + const key = new ListenKey(fn); + storageListeners.add(key); + return key; +} +export function fireStorageChanged() { + storageListeners.forEach((listenKey) => listenKey.listener()); +} +export function removeHashListenerByKey(key: ListenKey) { + hashListeners.delete(key); +} +export function removeStorageListenerByKey(key: ListenKey) { + storageListeners.delete(key); +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_storage/storage.ts b/saved_models/tensorboard/tensorboard/components/tf_storage/storage.ts new file mode 100644 index 0000000000000000000000000000000000000000..106fdee530a5cf46aa8d7b1a8a685c8956c41429 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_storage/storage.ts @@ -0,0 +1,349 @@ +/* Copyright 2015 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as _ from 'lodash'; + +import { + addHashListener, + removeHashListenerByKey, + addStorageListener, + fireStorageChanged, + removeStorageListenerByKey, +} from './listeners'; + +import {useHash, getFakeHash, setFakeHash} from '../tf_globals/globals'; + +type StringDict = { + [key: string]: string; +}; +/** + * A keyword that users cannot use, since TensorBoard uses this to store info + * about the active tab. + */ +export const TAB = '__tab__'; +/** + * The name of the property for users to set on a Polymer component + * in order for its stored properties to be stored in the URI unambiguously. + * (No need to set this if you want multiple instances of the component to + * share URI state) + * + * Example: + * + * + * The disambiguator should be set to any unique value so that multiple + * instances of the component can store properties in URI storage. + * + * Because it's hard to dereference this variable in HTML property bindings, + * it is NOT safe to change the disambiguator string without find+replace + * across the codebase. + */ +export const DISAMBIGUATOR = 'disambiguator'; + +// Keep an up-to-date store of URL params, which iframed plugins can request. +let urlDict: StringDict = {}; + +export function getUrlDict(): StringDict { + return urlDict; +} + +addHashListener(() => { + urlDict = componentToDict(readComponent()); +}); + +export const { + get: getString, + set: setString, + getInitializer: getStringInitializer, + getObserver: getStringObserver, + disposeBinding: disposeStringBinding, +} = makeBindings( + (x) => x, + (x) => x +); +export const { + get: getBoolean, + set: setBoolean, + getInitializer: getBooleanInitializer, + getObserver: getBooleanObserver, + disposeBinding: disposeBooleanBinding, +} = makeBindings( + (s) => (s === 'true' ? true : s === 'false' ? false : undefined), + (b) => b.toString() +); +export const { + get: getNumber, + set: setNumber, + getInitializer: getNumberInitializer, + getObserver: getNumberObserver, + disposeBinding: disposeNumberBinding, +} = makeBindings( + (s) => +s, + (n) => n.toString() +); +export const { + get: getObject, + set: setObject, + getInitializer: getObjectInitializer, + getObserver: getObjectObserver, + disposeBinding: disposeObjectBinding, +} = makeBindings( + (s) => JSON.parse(atob(s)), + (o) => btoa(JSON.stringify(o)) +); +export interface StorageOptions { + defaultValue?: T; + useLocalStorage?: boolean; +} +export interface AutoStorageOptions extends StorageOptions { + polymerProperty?: string; +} +export interface SetterOptions extends StorageOptions { + defaultValue?: T; + useLocalStorage?: boolean; + useLocationReplace?: boolean; +} +export function makeBindings( + fromString: (string) => T, + toString: (T) => string +): { + get: (key: string, option?: StorageOptions) => T; + set: (key: string, value: T, option?: SetterOptions) => void; + getInitializer: (key: string, options: AutoStorageOptions) => Function; + getObserver: (key: string, options: AutoStorageOptions) => Function; + disposeBinding: () => void; +} { + const hashListeners = []; + const storageListeners = []; + function get(key: string, options: StorageOptions = {}): T { + const {defaultValue, useLocalStorage = false} = options; + const value = useLocalStorage + ? window.localStorage.getItem(key) + : componentToDict(readComponent())[key]; + return value == undefined ? _.cloneDeep(defaultValue) : fromString(value); + } + function set(key: string, value: T, options: SetterOptions = {}): void { + const { + defaultValue, + useLocalStorage = false, + useLocationReplace = false, + } = options; + const stringValue = toString(value); + if (useLocalStorage) { + window.localStorage.setItem(key, stringValue); + // Because of listeners.ts:[1], we need to manually notify all UI elements + // listening to storage within the tab of a change. + fireStorageChanged(); + } else if (!_.isEqual(value, get(key, {useLocalStorage}))) { + if (_.isEqual(value, defaultValue)) { + unsetFromURI(key); + } else { + const items = componentToDict(readComponent()); + items[key] = stringValue; + writeComponent(dictToComponent(items), useLocationReplace); + } + } + } + /** + * Returns a function that can be used on a `value` declaration to a Polymer + * property. It updates the `polymerProperty` when storage changes -- i.e., + * when `useLocalStorage`, it listens to storage change from another tab and + * when `useLocalStorage=false`, it listens to hashchange. + */ + function getInitializer(key: string, options: StorageOptions): Function { + const fullOptions = { + defaultValue: options.defaultValue, + polymerProperty: key, + useLocalStorage: false, + ...options, + }; + return function () { + const uriStorageName = getURIStorageName(this, key); + // setComponentValue will be called every time the underlying storage + // changes and is responsible for ensuring that new state will propagate + // to the component with specified property. It is important that this + // function does not re-assign needlessly, to avoid Polymer observer + // churn. + const setComponentValue = () => { + const storedValue = get(uriStorageName, fullOptions); + const currentValue = this[fullOptions.polymerProperty]; + if (!_.isEqual(storedValue, currentValue)) { + this[fullOptions.polymerProperty] = storedValue; + } + }; + const addListener = fullOptions.useLocalStorage + ? addStorageListener + : addHashListener; + // TODO(stephanwlee): When using fakeHash, it _should not_ listen to the + // window.hashchange. + const listenKey = addListener(() => setComponentValue()); + if (fullOptions.useLocalStorage) { + storageListeners.push(listenKey); + } else { + hashListeners.push(listenKey); + } + // Set the value on the property. + setComponentValue(); + return this[fullOptions.polymerProperty]; + }; + } + function disposeBinding() { + hashListeners.forEach((key) => removeHashListenerByKey(key)); + storageListeners.forEach((key) => removeStorageListenerByKey(key)); + } + function getObserver(key: string, options: StorageOptions): Function { + const fullOptions = { + defaultValue: options.defaultValue, + polymerProperty: key, + useLocalStorage: false, + ...options, + }; + return function () { + const uriStorageName = getURIStorageName(this, key); + const newVal = this[fullOptions.polymerProperty]; + set(uriStorageName, newVal, fullOptions); + }; + } + return {get, set, getInitializer, getObserver, disposeBinding}; +} +export function migrateLegacyURLScheme() { + /** + * TODO(psybuzz): move to some compatibility file. + * For each WIT URL param in the legacy scheme, create another URL param + * in the new scheme. Once WIT migrates to using the new plugin API + * `getURLPluginData()`, we can update this method to delete the legacy + * scheme params. + * + * This list of params was taken on 1/16/2020. Luckily, WIT only stored + * strings, booleans. + */ + const witUrlCompatibilitySet = new Set([ + 'examplesPath', + 'hideModelPane2', + 'modelName1', + 'modelName2', + 'inferenceAddress1', + 'inferenceAddress2', + 'modelType', + 'modelVersion1', + 'modelVersion2', + 'modelSignature1', + 'modelSignature2', + 'maxExamples', + 'labelVocabPath', + 'multiClass', + 'sequenceExamples', + 'maxClassesToDisplay', + 'samplingOdds', + 'usePredictApi', + 'predictInputTensor', + 'predictOutputTensor', + ]); + const items = componentToDict(readComponent()); + if (items[TAB] === 'whatif') { + for (let oldName of witUrlCompatibilitySet) { + if (oldName in items) { + const oldValue = items[oldName]; + items[`p.whatif.${oldName}`] = oldValue; + } + } + } + writeComponent(dictToComponent(items)); + urlDict = items; +} +/** + * Get a unique storage name for a (Polymer component, propertyName) tuple. + * + * DISAMBIGUATOR must be set on the component, if other components use the + * same propertyName. + */ +function getURIStorageName(component: {}, propertyName: string): string { + const d = component[DISAMBIGUATOR]; + const components = d == null ? [propertyName] : [d, propertyName]; + return components.join('.'); +} +/** + * Read component from URI (e.g. returns "events&runPrefix=train*"). + */ +function readComponent(): string { + return useHash() ? window.location.hash.slice(1) : getFakeHash(); +} +/** + * Write component to URI. + */ +function writeComponent(component: string, useLocationReplace = false) { + if (useHash()) { + if (useLocationReplace) { + const url = new URL(window.location.href); + url.hash = component; + window.history.replaceState(null, '', url.toString()); + } else { + window.location.hash = component; + } + } else { + setFakeHash(component); + } +} +/** + * Convert dictionary of strings into a URI Component. + * All key value entries get added as key value pairs in the component, + * with the exception of a key with the TAB value, which if present + * gets prepended to the URI Component string for backwards compatibility + * reasons. + */ +function dictToComponent(items: StringDict): string { + let component = ''; + // Add the tab name e.g. 'events', 'images', 'histograms' as a prefix + // for backwards compatbility. + if (items[TAB] !== undefined) { + component += items[TAB]; + } + // Join other strings with &key=value notation + const nonTab = Object.keys(items) + .map((key) => [key, items[key]]) + .filter((pair) => pair[0] !== TAB) + .map((pair) => { + return encodeURIComponent(pair[0]) + '=' + encodeURIComponent(pair[1]); + }) + .join('&'); + return nonTab.length > 0 ? component + '&' + nonTab : component; +} +/** + * Convert a URI Component into a dictionary of strings. + * Component should consist of key-value pairs joined by a delimiter + * with the exception of the tabName. + * Returns dict consisting of all key-value pairs and + * dict[TAB] = tabName + */ +function componentToDict(component: string): StringDict { + const items = {} as StringDict; + const tokens = component.split('&'); + tokens.forEach((token) => { + const kv = token.split('='); + // Special backwards compatibility for URI components like #scalars. + if (kv.length === 1) { + items[TAB] = kv[0]; + } else if (kv.length === 2) { + items[decodeURIComponent(kv[0])] = decodeURIComponent(kv[1]); + } + }); + return items; +} +/** + * Delete a key from the URI. + */ +function unsetFromURI(key) { + const items = componentToDict(readComponent()); + delete items[key]; + writeComponent(dictToComponent(items)); +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_storage/test/storageTests.ts b/saved_models/tensorboard/tensorboard/components/tf_storage/test/storageTests.ts new file mode 100644 index 0000000000000000000000000000000000000000..ca8ae0b85c4c7108cf097d60229d0c0424641427 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_storage/test/storageTests.ts @@ -0,0 +1,177 @@ +/* Copyright 2015 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the 'License'); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an 'AS IS' BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +namespace tf_storage { + const {assert} = chai; + + function setHash(hash) { + tf_globals.setFakeHash(hash); + } + + function getHash(): string { + return tf_globals.getFakeHash(); + } + + /* tslint:disable:no-namespace */ + describe('Storage', () => { + const option = {useLocalStorage: false}; + + afterEach(() => { + setHash(''); + window.localStorage.clear(); + disposeStringBinding(); + disposeNumberBinding(); + disposeBooleanBinding(); + disposeObjectBinding(); + }); + + it('get/setString', () => { + setString('key_a', 'hello', option); + setString('key_b', 'there', option); + assert.equal('hello', getString('key_a', option)); + assert.equal('there', getString('key_b', option)); + assert.equal(null, getString('key_c', option)); + }); + + it('get/setNumber', () => { + setNumber('key_a', 12, option); + setNumber('key_b', 3.4, option); + assert.equal(12, getNumber('key_a', option)); + assert.equal(3.4, getNumber('key_b', option)); + assert.equal(null, getNumber('key_c', option)); + }); + + it('get/setObject', () => { + const obj = {foo: 2.3, bar: 'barstr'}; + setObject('key_a', obj, option); + assert.deepEqual(obj, getObject('key_a', option)); + }); + + it('get/setWeirdValues', () => { + setNumber('key_a', NaN, option); + assert.deepEqual(NaN, getNumber('key_a', option)); + + setNumber('key_a', +Infinity, option); + assert.equal(+Infinity, getNumber('key_a', option)); + + setNumber('key_a', -Infinity, option); + assert.equal(-Infinity, getNumber('key_a', option)); + + setNumber('key_a', 1 / 3, option); + assert.equal(1 / 3, getNumber('key_a', option)); + + setNumber('key_a', -0, option); + assert.equal(-0, getNumber('key_a', option)); + }); + + it('set/getTab', () => { + setString(TAB, 'scalars', option); + assert.equal('scalars', getString(TAB, option)); + }); + + describe('getInitializer', () => { + [ + {useLocalStorage: true, name: 'local storage', eventName: 'storage'}, + {useLocalStorage: false, name: 'hash storage', eventName: 'hashchange'}, + ].forEach(({useLocalStorage, name, eventName}) => { + describe(name, () => { + const options = { + useLocalStorage, + defaultValue: 'baz', + polymerProperty: 'prop', + }; + + function setValue(key: string, value: string): void { + if (useLocalStorage) window.localStorage.setItem(key, value); + else setHash(`${key}=${value}`); + } + + it('sets the polymerProperty with the value', () => { + setValue('foo', 'bar'); + const initializer = getStringInitializer('foo', options); + const fakeScope = {prop: null}; + initializer.call(fakeScope); + assert.equal(fakeScope.prop, 'bar'); + }); + + it('sets the prop with defaultValue when value is missing', () => { + const initializer = getStringInitializer('foo', options); + const fakeScope = {prop: null}; + initializer.call(fakeScope); + assert.equal(fakeScope.prop, 'baz'); + }); + + it(`reacts to '${eventName}' and sets the new value (simulated)`, () => { + setValue('foo', ''); + + const initializer = getStringInitializer('foo', options); + const fakeScope = {prop: null}; + initializer.call(fakeScope); + + // Simulate the hashchange. + setValue('foo', 'changed'); + window.dispatchEvent(new Event(eventName)); + + assert.equal(fakeScope.prop, 'changed'); + }); + + // It is hard to test against real URL hash and we use fakeHash for + // testing and fakeHash does not emit any event for a change. + if (useLocalStorage) { + it(`reacts to change and sets the new value (real)`, () => { + setString('foo', '', options); + + const initializer = getStringInitializer('foo', options); + const fakeScope1 = {prop: null}; + initializer.call(fakeScope1); + const fakeScope2 = {prop: 'bar'}; + initializer.call(fakeScope2); + + setString('foo', 'changed', options); + + assert.equal(fakeScope1.prop, 'changed'); + assert.equal(fakeScope2.prop, 'changed'); + }); + } + }); + }); + }); + + describe('advanced setter', () => { + const keyName = 'key'; + + beforeEach(() => { + assert.isFalse(getHash().includes(keyName)); + }); + + it('sets url hash', () => { + setNumber(keyName, 1, option); + assert.isTrue(getHash().includes(keyName)); + }); + + it('unsets url hash when value equals defaultValue', () => { + setNumber(keyName, 1, Object.assign({}, option, {defaultValue: 0})); + assert.isTrue(getHash().includes(keyName)); + + // If previous value on hash (which is 1 from above) matches the new value + // it does not unset the url value. + setNumber(keyName, 1, Object.assign({}, option, {defaultValue: 2})); + assert.isTrue(getHash().includes(keyName)); + + setNumber(keyName, 2, Object.assign({}, option, {defaultValue: 2})); + assert.isFalse(getHash().includes(keyName)); + }); + }); + }); +} // namespace tf_storage diff --git a/saved_models/tensorboard/tensorboard/components/tf_storage/test/tests.html b/saved_models/tensorboard/tensorboard/components/tf_storage/test/tests.html new file mode 100644 index 0000000000000000000000000000000000000000..4a1d5f06acb45a9925c55b2e2ebf24c99ee1c3b3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_storage/test/tests.html @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_storage/tf-storage-polymer.ts b/saved_models/tensorboard/tensorboard/components/tf_storage/tf-storage-polymer.ts new file mode 100644 index 0000000000000000000000000000000000000000..9f9fe0f6d565ac03d0e7f727b7a9c4a0ce96b2bb --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_storage/tf-storage-polymer.ts @@ -0,0 +1,24 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {PolymerElement} from '@polymer/polymer'; +import {customElement} from '@polymer/decorators'; + +import * as tf_storage from './index'; + +@customElement('tf-storage') +class TfStorage extends PolymerElement { + _template = null; + tf_storage = tf_storage; +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_utils/BUILD b/saved_models/tensorboard/tensorboard/components/tf_utils/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..0768209c293ef9c18afb355e3eeb3f78295737fd --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_utils/BUILD @@ -0,0 +1,13 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "tf_utils", + srcs = [ + "utils.ts", + ], + strict_checks = False, +) diff --git a/saved_models/tensorboard/tensorboard/components/tf_utils/utils.ts b/saved_models/tensorboard/tensorboard/components/tf_utils/utils.ts new file mode 100644 index 0000000000000000000000000000000000000000..81757fca8d28e201ed400722b3549eb4112eed9b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_utils/utils.ts @@ -0,0 +1,103 @@ +/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export interface TagInfo { + displayName: string; + description: string; +} + +/** + * Given many occurrences of tag info for a particular tag across + * multiple runs, create a representative info object. This is useful + * for plugins that display just one visualization per tag, instead of + * one per run--tag combination: each run--tag combination can have its + * own display name or description, so there is a dimension mismatch. We + * reconcile this as follows: + * + * - We only show a display name if all runs agree. Otherwise, or if + * there are no runs, we use the provided `defaultDisplayName`. + * + * - If all runs agree on a description, we use it. Otherwise, + * we concatenate all descriptions, annotating which ones + * came from which run, and display them in a list. + * + * NOTE: Per TensorBoard convention, we assume that the provided + * `description`s have sanitized HTML and are safe to render into the + * DOM, while the `displayName` may be an arbitrary string. The output + * of this function respects this convention as well. + */ +export function aggregateTagInfo( + runToTagInfo: { + [run: string]: TagInfo; + }, + defaultDisplayName: string +): TagInfo { + let unanimousDisplayName: string | null | undefined = undefined; + const descriptionToRuns: { + [description: string]: string[]; + } = {}; + Object.keys(runToTagInfo).forEach((run) => { + const info = runToTagInfo[run]; + if (unanimousDisplayName === undefined) { + unanimousDisplayName = info.displayName; + } + if (unanimousDisplayName !== info.displayName) { + unanimousDisplayName = null; + } + if (descriptionToRuns[info.description] === undefined) { + descriptionToRuns[info.description] = []; + } + descriptionToRuns[info.description].push(run); + }); + const displayName = + unanimousDisplayName != null ? unanimousDisplayName : defaultDisplayName; + const description = (() => { + const descriptions = Object.keys(descriptionToRuns); + if (descriptions.length === 0) { + return ''; + } else if (descriptions.length === 1) { + return descriptions[0]; + } else { + const items = descriptions.map((description) => { + const runs = descriptionToRuns[description].map((run) => { + // We're splicing potentially unsafe display names into + // sanitized descriptions, so we need to sanitize them. + const safeRun = run + .replace(//g, '>') // for symmetry :-) + .replace(/&/g, '&'); + return `${safeRun}`; + }); + const joined = + runs.length > 2 + ? runs.slice(0, runs.length - 1).join(', ') + + ', and ' + + runs[runs.length - 1] + : runs.join(' and '); + const runNoun = ngettext(runs.length, 'run', 'runs'); + return `
  • For ${runNoun} ${joined}:

    ${description}
  • `; + }); + const prefix = '

    Multiple descriptions:

    '; + return `${prefix}
      ${items.join('')}
    `; + } + })(); + return {displayName, description}; +} + +function ngettext(k: number, enSingular: string, enPlural: string): string { + // Potential extension point for proper i18n infrastructure, if we + // ever implement it. + return k === 1 ? enSingular : enPlural; +} diff --git a/saved_models/tensorboard/tensorboard/components/tf_wbr_string/BUILD b/saved_models/tensorboard/tensorboard/components/tf_wbr_string/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..dfe95e6ed26f3b3aeb6c35822350d7dc27001dce --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_wbr_string/BUILD @@ -0,0 +1,17 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "tf_wbr_string", + srcs = [ + "tf-wbr-string.ts", + ], + strict_checks = False, + deps = [ + "@npm//@polymer/decorators", + "@npm//@polymer/polymer", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/tf_wbr_string/test/tests.html b/saved_models/tensorboard/tensorboard/components/tf_wbr_string/test/tests.html new file mode 100644 index 0000000000000000000000000000000000000000..62f4ae2545f98dec1ba1418f1e7b7053b6a6d4fa --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_wbr_string/test/tests.html @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/components/tf_wbr_string/test/tfWbrStringTests.ts b/saved_models/tensorboard/tensorboard/components/tf_wbr_string/test/tfWbrStringTests.ts new file mode 100644 index 0000000000000000000000000000000000000000..fb5455728de5da6844e1fecf21603a098f6cae64 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_wbr_string/test/tfWbrStringTests.ts @@ -0,0 +1,135 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +namespace tf_wbr_string { + const {expect} = chai; + declare function fixture(id: string): void; + declare function flush(callback: Function): void; + + window.HTMLImports.whenReady(() => { + describe('tf-wbr-string', () => { + it('adds wbrs for patterns with a single character', (done) => { + let testElement: any = fixture('tf-wbr-string'); + testElement.value = 'I/have/a/delimiter'; + testElement.delimiterPattern = '/'; + flush(() => { + expect(testElement.shadowRoot.innerHTML).to.have.string( + 'I/have/a/delimiter' + ); + expect(testElement.shadowRoot.textContent.trim()).to.equal( + 'I/have/a/delimiter' + ); + done(); + }); + }); + + it('adds wbrs for patterns with multiple single characters', (done) => { + let testElement: any = fixture('tf-wbr-string'); + testElement.value = 'I_have-multiple_delimiter.s'; + testElement.delimiterPattern = '[_.\\-]'; + flush(() => { + expect(testElement.shadowRoot.innerHTML).to.have.string( + 'I_have-multiple_delimiter.s' + ); + done(); + }); + }); + + it('adds wbrs for more complex patterns', (done) => { + let testElement: any = fixture('tf-wbr-string'); + testElement.value = 'thea_heats_tea'; + testElement.delimiterPattern = 'the|eat'; + flush(() => { + expect(testElement.shadowRoot.innerHTML).to.have.string( + 'thea_heats_tea' + ); + done(); + }); + }); + + it('ignores overlapped matches', (done) => { + let testElement: any = fixture('tf-wbr-string'); + testElement.value = 'the_theatre_heats_tea'; + testElement.delimiterPattern = 'the|eat'; + flush(() => { + // The "eat" in "theatre" is ignored. + expect(testElement.shadowRoot.innerHTML).to.have.string( + 'the_theatre_heats_tea' + ); + done(); + }); + }); + + it('allows empty matches to consume remainder of the string', (done) => { + // The current handling of empty matches may not desirable but we warn + // against this in the documentation. We could consider improving this + // in the future. + let testElement: any = fixture('tf-wbr-string'); + testElement.value = 'the_theatre_heats_tea'; + testElement.delimiterPattern = '(the|eat)?'; + flush(() => { + expect(testElement.shadowRoot.innerHTML).to.have.string( + 'the_theatre_heats_tea' + ); + done(); + }); + }); + + it('adds single wbr for empty value', (done) => { + let testElement: any = fixture('tf-wbr-string'); + testElement.value = ''; + testElement.delimiterPattern = '/'; + flush(() => { + expect(testElement.shadowRoot.innerHTML).to.have.string(''); + expect(testElement.shadowRoot.textContent.trim()).to.equal(''); + done(); + }); + }); + + it('adds single wbr for undefined value', (done) => { + let testElement: any = fixture('tf-wbr-string'); + testElement.value = null; + testElement.delimiterPattern = '/'; + flush(() => { + expect(testElement.shadowRoot.innerHTML).to.have.string(''); + expect(testElement.shadowRoot.textContent.trim()).to.equal(''); + done(); + }); + }); + + it('adds single wbr for empty pattern', (done) => { + let testElement: any = fixture('tf-wbr-string'); + testElement.value = 'Empty delimiter pattern'; + testElement.delimiterPattern = ''; + flush(() => { + expect(testElement.shadowRoot.innerHTML).to.have.string( + 'Empty delimiter pattern' + ); + done(); + }); + }); + + it('adds single wbr for undefined pattern', (done) => { + let testElement: any = fixture('tf-wbr-string'); + testElement.value = 'undefined pattern'; + flush(() => { + expect(testElement.shadowRoot.innerHTML).to.have.string( + 'undefined pattern' + ); + done(); + }); + }); + }); + }); +} // namespace tf_wbr_string diff --git a/saved_models/tensorboard/tensorboard/components/tf_wbr_string/tf-wbr-string.ts b/saved_models/tensorboard/tensorboard/components/tf_wbr_string/tf-wbr-string.ts new file mode 100644 index 0000000000000000000000000000000000000000..80b5b519535b6dbbd920754a78f345da91e00b03 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/tf_wbr_string/tf-wbr-string.ts @@ -0,0 +1,63 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {PolymerElement, html} from '@polymer/polymer'; +import {customElement, property, computed} from '@polymer/decorators'; + +// tf-wbr-string safely renders a string, with word break elements inserted +// after substrings that match a regular expression pattern. +@customElement('tf-wbr-string') +class TfWbrString extends PolymerElement { + static readonly template = html` + + + `; + @property({type: String}) + value: string; + + /** + * Regular expression pattern for specifying delimiters. elements + * are inserted after all nonoverlapping matches. A match that is + * overlapped by another match further to the left is ignored. Empty + * matches will consume the remainder of the string so it is advised + * to not allow empty matches in your pattern. + */ + @property({type: String}) + delimiterPattern: string; + + @computed('value', 'delimiterPattern') + get _parts(): unknown[] { + var value = this.value; + var delimiterPattern = this.delimiterPattern; + const result = []; + while (true) { + const delimiterRegExp = new RegExp(delimiterPattern, 'g'); + delimiterRegExp.test(value); + if (delimiterRegExp.lastIndex === 0) { + result.push(value); + break; + } else { + result.push(value.slice(0, delimiterRegExp.lastIndex)); + value = value.slice(delimiterRegExp.lastIndex); + } + } + return result; + } +} diff --git a/saved_models/tensorboard/tensorboard/components/vz_chart_helpers/BUILD b/saved_models/tensorboard/tensorboard/components/vz_chart_helpers/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..ac1052992f804e5e9956d9944c7d4f971cb503c3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_chart_helpers/BUILD @@ -0,0 +1,25 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "vz_chart_helpers", + srcs = [ + "plottable-interactions.ts", + "vz-chart-helpers.ts", + "vz-chart-tooltip.ts", + ], + strict_checks = False, + deps = [ + "//tensorboard/components/polymer:legacy_element_mixin", + "@npm//@polymer/decorators", + "@npm//@polymer/polymer", + "@npm//@types/d3", + "@npm//@types/lodash", + "@npm//d3", + "@npm//lodash", + "@npm//plottable", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/vz_chart_helpers/plottable-interactions.ts b/saved_models/tensorboard/tensorboard/components/vz_chart_helpers/plottable-interactions.ts new file mode 100644 index 0000000000000000000000000000000000000000..1f2adb1f81c1d2cc685f24519f4f02b4c77b8444 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_chart_helpers/plottable-interactions.ts @@ -0,0 +1,210 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +// License of the forked code is covered by one in +// tensorboard/components/tf_imports/plottable.html. +/** + * Reason for the fork: Plottable interactions are not compatible with the Web + * Componenets due to the changes in: + * 1. how events work: i.e., parent components cannot introspect into DOM + * where an event originates from. Instead, they see originating + * WebComponents. + * 2. DOM traversal: parentElement on shadowRoot is null. + * Please refer to https://github.com/palantir/plottable/issues/3350 for more + * detail. + * + * To override few quick private/protected methods, we had to use JavaScript to + * bypass TypeScript typechecks. + */ +import * as Plottable from 'plottable'; + +function getHtmlElementAncestors(elem: Node) { + const elems = []; + while (elem && elem instanceof HTMLElement) { + elems.push(elem); + if (elem.assignedSlot) { + elem = elem.assignedSlot; + } else if (!elem.parentElement) { + const parentNode = elem.parentNode; + if (parentNode instanceof DocumentFragment) { + elem = (parentNode as ShadowRoot).host; + } else { + // .parentNode == + elem = parentNode !== elem ? parentNode : null; + } + } else { + elem = elem.parentElement; + } + } + return elems; +} + +const _IDENTITY_TRANSFORM = [1, 0, 0, 1, 0, 0]; + +// Forked from https://github.com/palantir/plottable/blob/b6e36fbd4d8d7cba579d853b9f35cc260d1243bf/src/utils/mathUtils.ts#L173-L202 +// The only difference is the implementation of the getHtmlElementAncestors. +function getCumulativeTransform(element) { + const elems = getHtmlElementAncestors(element); + let transform: number[] = _IDENTITY_TRANSFORM; + let offsetParent = null; + for (const elem of elems) { + // apply css transform from any ancestor element + const elementTransform = Plottable.Utils.DOM.getElementTransform(elem); + if (elementTransform != null) { + const midX = elem.clientWidth / 2; + const midY = elem.clientHeight / 2; + transform = Plottable.Utils.Math.multiplyTranslate(transform as any, [ + midX, + midY, + ]); + transform = Plottable.Utils.Math.multiplyMatrix( + transform as any, + Plottable.Utils.Math.invertMatrix(elementTransform) + ); + transform = Plottable.Utils.Math.multiplyTranslate(transform as any, [ + -midX, + -midY, + ]); + } + // apply scroll offsets from any ancestor element + let offsetX = elem.scrollLeft; + let offsetY = elem.scrollTop; + // apply client+offset from only acenstor "offsetParent" + if (offsetParent === null || elem === offsetParent) { + offsetX -= elem.offsetLeft + elem.clientLeft; + offsetY -= elem.offsetTop + elem.clientTop; + offsetParent = elem.offsetParent; + } + transform = Plottable.Utils.Math.multiplyTranslate(transform as any, [ + offsetX, + offsetY, + ]); + } + return transform; +} + +class CustomTranslator extends Plottable.Utils.Translator { + computePosition(clientX, clientY) { + const clientPosition = { + x: clientX, + y: clientY, + }; + const transform = getCumulativeTransform((this as any)._rootElement); + if (transform == null) { + return clientPosition; + } + const transformed = Plottable.Utils.Math.applyTransform( + transform as any, + clientPosition + ); + return transformed; + } +} + +class MouseDispatcher extends (Plottable.Dispatchers as any).Mouse { + constructor(component) { + super(component); + // eventTarget is `document` by default. Change it to the root of chart. + this._eventTarget = component.root().rootElement().node(); + // Requires custom translator that uses correct DOM traversal (with + // WebComponents) to change pointer position to relative to the root node. + (this as any)._translator = new CustomTranslator( + component.root().rootElement().node() + ); + } + static getDispatcher(component) { + const element = component.root().rootElement(); + let dispatcher = element[(MouseDispatcher as any)._DISPATCHER_KEY]; + if (!dispatcher) { + dispatcher = new MouseDispatcher(component); + element[(MouseDispatcher as any)._DISPATCHER_KEY] = dispatcher; + } + return dispatcher; + } +} + +class TouchDispatcher extends Plottable.Dispatchers.Touch { + constructor(component) { + super(component); + // eventTarget is `document` by default. Change it to the root of chart. + this._eventTarget = component.root().rootElement().node(); + // Requires custom translator that uses correct DOM traversal (with + // WebComponents) to change pointer position to relative to the root node. + (this as any)._translator = new CustomTranslator( + component.root().rootElement().node() + ); + } + static getDispatcher(component) { + const element = component.root().rootElement(); + let dispatcher = element[(TouchDispatcher as any)._DISPATCHER_KEY]; + if (!dispatcher) { + dispatcher = new TouchDispatcher(component); + element[(TouchDispatcher as any)._DISPATCHER_KEY] = dispatcher; + } + return dispatcher; + } +} + +/** + * Fixes #3282. + * + * Repro: when tooltip is shown, slowly move the mouse to an edge of a chart. + * We expect the tooltip the disappear when the cursor is on the edge of the + * chart. + * + * Cause: + * 1. For Polymer 2 and its Shadow DOM compatibility, TensorBoard opted out of + * the event delegation of Plottable. Plottable, by default, attaches a set of + * event listeners on document.body and invokes appropriate callbacks + * depending on the circumstances. However, with the Shadow DOM, the event + * re-targetting broke (harder to identify `event.target`), so TensorBoard, + * instead, attaches the event listeners on every Plottable container, SVGs. + * + * 2. When mouse leaves (mouseout) the container, Plottable remaps the event + * as mouse move and calculate whether the cursor is inside a component + * (Interaction.prototype._isInsideComponent, specifically) to trigger + * appropriate callback. The method, however is flawed since it returns, for a + * component that is, for instance, at <0, 0> with size of <100, 100>, true + * when pointer is at <100, 100>. It should only return true for [0, 100) for + * a given dimension, instead. As a result, the mouseout event occurred at + * <100, 100> was treated as an event inside the component but all the + * subsequent mouse movements are not captured since they are events that + * occurred outside of the event target. In vanilla Plottable, this bug do not + * manifest since event delegation on the entire document will eventually + * trigger mouse out when cursor is at, for instance, <101, 100>. + */ +(Plottable.Interaction.prototype as any)._isInsideComponent = function (p) { + return ( + 0 <= p.x && + 0 <= p.y && + // Delta: `<` instead of `<=` here and below. + p.x < this._componentAttachedTo.width() && + p.y < this._componentAttachedTo.height() + ); +}; + +export class PointerInteraction extends Plottable.Interactions.Pointer { + _anchor(component) { + const anyThis = this as any; + anyThis._isAnchored = true; + anyThis._mouseDispatcher = MouseDispatcher.getDispatcher( + anyThis._componentAttachedTo + ); + anyThis._mouseDispatcher.onMouseMove(anyThis._mouseMoveCallback); + anyThis._touchDispatcher = TouchDispatcher.getDispatcher( + anyThis._componentAttachedTo + ); + anyThis._touchDispatcher.onTouchStart(anyThis._touchStartCallback); + } +} diff --git a/saved_models/tensorboard/tensorboard/components/vz_chart_helpers/vz-chart-helpers.ts b/saved_models/tensorboard/tensorboard/components/vz_chart_helpers/vz-chart-helpers.ts new file mode 100644 index 0000000000000000000000000000000000000000..49e16ba9a7d72353f24e04653d96c34cf21acff3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_chart_helpers/vz-chart-helpers.ts @@ -0,0 +1,279 @@ +/* Copyright 2015 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as Plottable from 'plottable'; +import * as _ from 'lodash'; +import * as d3 from 'd3'; + +export interface Datum { + wall_time: Date; + step: number; +} + +export interface Scalar { + scalar: number; + smoothed: number; +} + +export type ScalarDatum = Datum & Scalar; + +export type DataFn = (run: string, tag: string) => Promise>; + +export interface LineChartSymbol { + // A single unicode character string representing the symbol. Maybe a diamond + // unicode character for instance. + character: string; + // A special method used by Plottable to draw the symbol in the line chart. + method: () => Plottable.SymbolFactories.SymbolFactory; +} + +/** + * A list of symbols that line charts can cycle through per data series. + */ +export const SYMBOLS_LIST: LineChartSymbol[] = [ + { + character: '\u25FC', + method: Plottable.SymbolFactories.square, + }, + { + character: '\u25C6', + method: Plottable.SymbolFactories.diamond, + }, + { + character: '\u25B2', + method: Plottable.SymbolFactories.triangle, + }, + { + character: '\u2605', + method: Plottable.SymbolFactories.star, + }, + { + character: '\u271A', + method: Plottable.SymbolFactories.cross, + }, +]; +/** X axis choices for TensorBoard charts. */ + +export enum XType { + /** Linear scale using the "step" property of the datum. */ + STEP = 'step', + /** Temporal scale using the "wall_time" property of the datum. */ + RELATIVE = 'relative', + /** + * Temporal scale using the "relative" property of the datum if it is present + * or calculating from "wall_time" if it isn't. + */ + WALL_TIME = 'wall_time', +} + +export type SymbolFn = (series: string) => Plottable.SymbolFactory; + +export let Y_TOOLTIP_FORMATTER_PRECISION = 4; + +export let STEP_FORMATTER_PRECISION = 4; + +export let Y_AXIS_FORMATTER_PRECISION = 3; + +export let TOOLTIP_Y_PIXEL_OFFSET = 20; + +export let TOOLTIP_CIRCLE_SIZE = 4; + +export let NAN_SYMBOL_SIZE = 6; + +export interface Point { + x: number; // pixel space + y: number; // pixel space + datum: ScalarDatum; + dataset: Plottable.Dataset; +} + +export interface TooltipColumnState { + smoothingEnabled: boolean; +} + +export interface TooltipColumn { + title: string; + static?: boolean; + evaluate: (p: Point, status?: TooltipColumnState) => string; +} + +/* Create a formatter function that will switch between exponential and + * regular display depending on the scale of the number being formatted, + * and show `digits` significant digits. + */ +export function multiscaleFormatter(digits: number): (v: number) => string { + return (v: number) => { + let absv = Math.abs(v); + if (absv < 1e-15) { + // Sometimes zero-like values get an annoying representation + absv = 0; + } + let f: (x: number) => string; + if (absv >= 10000) { + f = d3.format('.' + digits + '~e'); + } else if (absv > 0 && absv < 0.01) { + f = d3.format('.' + digits + '~e'); + } else { + f = d3.format('.' + digits + '~g'); + } + return f(v); + }; +} + +/* Compute an appropriate domain given an array of all the values that are + * going to be displayed. If ignoreOutliers is true, it will ignore the + * lowest 10% and highest 10% of the data when computing a domain. + * It has n log n performance when ignoreOutliers is true, as it needs to + * sort the data. + */ +export function computeDomain(values: number[], ignoreOutliers: boolean) { + // Don't include infinities and NaNs in the domain computation. + values = values.filter((z) => isFinite(z)); + if (values.length === 0) { + return [-0.1, 1.1]; + } + let a: number; + let b: number; + if (ignoreOutliers) { + let sorted = _.sortBy(values); + a = d3.quantile(sorted, 0.05); + b = d3.quantile(sorted, 0.95); + } else { + a = d3.min(values); + b = d3.max(values); + } + let padding: number; + let span = b - a; + if (span === 0) { + // If b===a, we would create an empty range. We instead select the range + // [0, 2*a] if a > 0, or [-2*a, 0] if a < 0, plus a little bit of + // extra padding on the top and bottom of the plot. + padding = Math.abs(a) * 1.1 + 1.1; + } else { + padding = span * 0.2; + } + let lower: number; + if (a >= 0 && a < span) { + // We include the intercept (y = 0) if doing so less than doubles the span + // of the y-axis. (We actually select a lower bound that's slightly less + // than 0 so that 0.00 will clearly be written on the lower edge of the + // chart. The label on the lowest tick is often filtered out.) + lower = -0.1 * b; + } else { + lower = a - padding; + } + let domain = [lower, b + padding]; + domain = d3.scaleLinear().domain(domain).nice().domain(); + return domain; +} + +export function accessorize(key: string): Plottable.IAccessor { + // tslint:disable-next-line:no-any be quiet tsc + return (d: any, index: number, dataset: Plottable.Dataset) => d[key]; +} + +export interface XComponents { + /* tslint:disable */ + scale: Plottable.Scales.Linear | Plottable.Scales.Time; + axis: Plottable.Axes.Numeric | Plottable.Axes.Time; + accessor: Plottable.IAccessor; +} + +export const stepFormatter = d3.format(`.${STEP_FORMATTER_PRECISION}~s`); + +export function stepX(): XComponents { + let scale = new Plottable.Scales.Linear(); + scale.tickGenerator(Plottable.Scales.TickGenerators.integerTickGenerator()); + let axis = new Plottable.Axes.Numeric(scale, 'bottom'); + axis.formatter(stepFormatter); + return { + scale: scale, + axis: axis, + accessor: (d: Datum) => d.step, + }; +} + +export let timeFormatter = Plottable.Formatters.time('%a %b %e, %H:%M:%S'); + +export function wallX(): XComponents { + let scale = new Plottable.Scales.Time(); + return { + scale: scale, + axis: new Plottable.Axes.Time(scale, 'bottom'), + accessor: (d: Datum) => d.wall_time, + }; +} + +export let relativeAccessor = + // tslint:disable-next-line:no-any be quiet tsc + (d: any, index: number, dataset: Plottable.Dataset) => { + // We may be rendering the final-point datum for scatterplot. + // If so, we will have already provided the 'relative' property + if (d.relative != null) { + return d.relative; + } + let data = dataset.data(); + // I can't imagine how this function would be called when the data is + // empty (after all, it iterates over the data), but lets guard just + // to be safe. + let first = data.length > 0 ? +data[0].wall_time : 0; + return (+d.wall_time - first) / (60 * 60 * 1000); // ms to hours + }; + +export let relativeFormatter = (n: number) => { + // we will always show 2 units of precision, e.g days and hours, or + // minutes and seconds, but not hours and minutes and seconds + let ret = ''; + let days = Math.floor(n / 24); + n -= days * 24; + if (days) { + ret += days + 'd '; + } + let hours = Math.floor(n); + n -= hours; + n *= 60; + if (hours || days) { + ret += hours + 'h '; + } + let minutes = Math.floor(n); + n -= minutes; + n *= 60; + if (minutes || hours || days) { + ret += minutes + 'm '; + } + let seconds = Math.floor(n); + return ret + seconds + 's'; +}; + +export function relativeX(): XComponents { + let scale = new Plottable.Scales.Linear(); + return { + scale: scale, + axis: new Plottable.Axes.Numeric(scale, 'bottom'), + accessor: relativeAccessor, + }; +} + +export function getXComponents(xType: string): XComponents { + switch (xType) { + case XType.STEP: + return stepX(); + case XType.WALL_TIME: + return wallX(); + case XType.RELATIVE: + return relativeX(); + default: + throw new Error('invalid xType: ' + xType); + } +} diff --git a/saved_models/tensorboard/tensorboard/components/vz_chart_helpers/vz-chart-tooltip.ts b/saved_models/tensorboard/tensorboard/components/vz_chart_helpers/vz-chart-tooltip.ts new file mode 100644 index 0000000000000000000000000000000000000000..710d36c29eca269ac63f37eeb2f272eb8dfb0e4a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_chart_helpers/vz-chart-tooltip.ts @@ -0,0 +1,176 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {PolymerElement} from '@polymer/polymer'; +import {LegacyElementMixin} from '../polymer/legacy_element_mixin'; +import {customElement, property} from '@polymer/decorators'; +import * as _ from 'lodash'; + +import {TOOLTIP_Y_PIXEL_OFFSET} from './vz-chart-helpers'; + +export enum TooltipPosition { + /** + * Positions the tooltip to the bottom of the chart in most case. Positions + * the tooltip above the chart if there isn't sufficient space below. + */ + AUTO = 'auto', + /** + * Position the tooltip on the bottom of the chart. + */ + BOTTOM = 'bottom', + /** + * Positions the tooltip to the right of the chart. + */ + RIGHT = 'right', +} + +const DEFAULT_TOOLTIP_STYLE = { + boxShadow: '0 1px 4px rgba(0, 0, 0, .3)', + opacity: 0, + position: 'fixed', + willChange: 'transform', + zIndex: 5, +}; + +@customElement('vz-chart-tooltip') +class VzChartTooltip extends LegacyElementMixin(PolymerElement) { + @property({type: String}) + contentComponentName: string; + + @property({ + type: String, + }) + position: string = TooltipPosition.AUTO; + + @property({ + type: Number, + }) + minDistFromEdge: number = 15; + + _template: null; + _styleCache: null | {} = null; + _raf: null | number = null; + _tunnel: any = null; + _hideOnBlur: any; + + ready() { + this._styleCache = null; + this._raf = null; + this._tunnel = null; + } + + attached() { + this._tunnel = this._createTunnel(); + this._hideOnBlur = () => { + if (document.hidden) this.hide(); + }; + window.addEventListener('visibilitychange', this._hideOnBlur); + } + + detached() { + this.hide(); + this._removeTunnel(this._tunnel); + this._tunnel = null; + window.removeEventListener('visibilitychange', this._hideOnBlur); + } + + content(): Element { + return this._tunnel.shadowRoot; + } + + hide() { + window.cancelAnimationFrame(this._raf); + this._styleCache = null; + this._tunnel.style.opacity = 0; + } + + /** + * CSS Scopes the newly added DOM (in most tooltip where columns are + * invariable, only newly added rows are necessary to be scoped) and positions + * the tooltip with respect to the anchorNode. + */ + updateAndPosition(anchorNode: Element) { + window.cancelAnimationFrame(this._raf); + this._raf = window.requestAnimationFrame(() => { + if (!this.isAttached) return; + this._repositionImpl(anchorNode); + }); + } + + private _repositionImpl(anchorNode: Element) { + const tooltipContent = this._tunnel; + const nodeRect = anchorNode.getBoundingClientRect(); + const tooltipRect = tooltipContent.getBoundingClientRect(); + const viewportHeight = window.innerHeight; + const documentWidth = document.body.clientWidth; + const anchorTop = nodeRect.top; + const anchorBottom = anchorTop + nodeRect.height; + const effectiveTooltipHeight = tooltipRect.height + TOOLTIP_Y_PIXEL_OFFSET; + let bottom = null; + let left = Math.max(this.minDistFromEdge, nodeRect.left); + let right = null; + let top = anchorTop; + if (this.position == TooltipPosition.RIGHT) { + left = nodeRect.right; + } else { + top = anchorBottom + TOOLTIP_Y_PIXEL_OFFSET; + // prevent it from falling off the right side of the screen. + if (documentWidth < left + tooltipRect.width + this.minDistFromEdge) { + left = null; + right = this.minDistFromEdge; + } + } + // If there is not enough space to render tooltip below the anchorNode in + // the viewport and there is enough space above, place it above the + // anchorNode. + if ( + this.position == TooltipPosition.AUTO && + nodeRect.top - effectiveTooltipHeight > 0 && + viewportHeight < nodeRect.top + nodeRect.height + effectiveTooltipHeight + ) { + top = null; + bottom = viewportHeight - anchorTop + TOOLTIP_Y_PIXEL_OFFSET; + } + const newStyle = { + contain: 'content', + opacity: 1, + left: left ? `${left}px` : null, + right: right ? `${right}px` : null, + top: top ? `${top}px` : null, + bottom: bottom ? `${bottom}px` : null, + }; + // Do not update the style (which can cause re-layout) if it has not + // changed. + if (!_.isEqual(this._styleCache, newStyle)) { + Object.assign(tooltipContent.style, newStyle); + this._styleCache = newStyle; + } + } + + private _createTunnel(): Element { + if (!this.contentComponentName) { + throw new RangeError( + 'Require `contentComponentName` to be a name of a Polymer component' + ); + } + const tunnel = document.createElement(this.contentComponentName); + Object.assign(tunnel.style, DEFAULT_TOOLTIP_STYLE); + document.body.appendChild(tunnel); + return tunnel; + } + + private _removeTunnel(tunnel: Element) { + document.body.removeChild(tunnel); + } +} diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/BUILD b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..1e1cfb447ccae2811e0dba696a31208a49cc7291 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/BUILD @@ -0,0 +1,47 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "dragZoomInteraction", + srcs = [ + "dragZoomInteraction.ts", + ], + strict_checks = False, + deps = [ + "@npm//@types/d3", + "@npm//d3", + "@npm//plottable", + ], +) + +tf_ts_library( + name = "vz_line_chart2", + srcs = [ + "line-chart.ts", + "line-chart-exporter.ts", + "linear-scale.ts", + "log-scale.ts", + "panZoomDragLayer.html.ts", + "panZoomDragLayer.ts", + "tf-scale.ts", + "vz-line-chart2.ts", + ], + strict_checks = False, + deps = [ + ":dragZoomInteraction", + "//tensorboard/components/polymer:legacy_element_mixin", + "//tensorboard/components/polymer:plottable_style", + "//tensorboard/components/polymer:register_style_dom_module", + "//tensorboard/components/vz_chart_helpers", + "@npm//@polymer/decorators", + "@npm//@polymer/polymer", + "@npm//@types/d3", + "@npm//@types/lodash", + "@npm//d3", + "@npm//lodash", + "@npm//plottable", + ], +) diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/dragZoomInteraction.ts b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/dragZoomInteraction.ts new file mode 100644 index 0000000000000000000000000000000000000000..acda193da6e4ac73b600719868a3565184c6e5ad --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/dragZoomInteraction.ts @@ -0,0 +1,208 @@ +/* Copyright 2015 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the 'License'); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an 'AS IS' BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as d3 from 'd3'; +import * as Plottable from 'plottable'; + +export class DragZoomLayer extends Plottable.Components.SelectionBoxLayer { + private _dragInteraction: Plottable.Interactions.Drag; + private _doubleClickInteraction: Plottable.Interactions.Click; + private easeFn: (t: number) => number = d3.easeCubicInOut; + private _animationTime = 750; + private onStart: Function; + private onEnd: Function; + private unzoomMethod: Function; + /** + * Constructs a SelectionBoxLayer with an attached DragInteraction and + * ClickInteraction. On drag, it triggers an animated zoom into the box + * that was dragged. On double click, it zooms back out to the original + * view, before any zooming. + * The zoom animation uses an easing function (default + * d3.ease('cubic-in-out')) and is customizable. + * Usage: Construct the selection box layer and attach x and y scales, + * and then add the layer over the plot you are zooming on using a + * Component Group. + * TODO(@decentralion) - merge this into Plottable + */ + constructor( + xScale: Plottable.QuantitativeScale< + | number + | { + valueOf(): number; + } + >, + yScale: Plottable.QuantitativeScale< + | number + | { + valueOf(): number; + } + >, + unzoomMethod: Function + ) { + super(); + this.xScale(xScale); + this.yScale(yScale); + this._dragInteraction = new Plottable.Interactions.Drag(); + this._doubleClickInteraction = new Plottable.Interactions.Click(); + this.setupCallbacks(); + this.unzoomMethod = unzoomMethod; + // Activate interaction only when the component is mounted onto DOM. + this.onDetach(() => { + this._doubleClickInteraction.detachFrom(this); + this._dragInteraction.detachFrom(this); + }); + this.onAnchor(() => { + this._doubleClickInteraction.attachTo(this); + this._dragInteraction.attachTo(this); + }); + } + /** + * Register a method that calls when the DragZoom interaction starts. + */ + public interactionStart(cb: Function) { + this.onStart = cb; + } + /** + * Register a method that calls when the DragZoom interaction ends. + */ + public interactionEnd(cb: Function) { + this.onEnd = cb; + } + /** + * Returns backing drag interaction. Useful for customization to the + * interaction. + */ + public dragInteraction(): Plottable.Interactions.Drag { + return this._dragInteraction; + } + private setupCallbacks() { + let dragging = false; + this._dragInteraction.onDragStart((startPoint: Plottable.Point) => { + this.bounds({ + topLeft: startPoint, + bottomRight: startPoint, + }); + this.onStart(); + }); + this._dragInteraction.onDrag((startPoint, endPoint) => { + this.bounds({topLeft: startPoint, bottomRight: endPoint}); + this.boxVisible(true); + dragging = true; + }); + this._dragInteraction.onDragEnd((startPoint, endPoint) => { + this.boxVisible(false); + this.bounds({topLeft: startPoint, bottomRight: endPoint}); + if (dragging) { + this.zoom(); + } else { + this.onEnd(); + } + dragging = false; + }); + this._doubleClickInteraction.onDoubleClick(this.unzoom.bind(this)); + } + /* Set the time (in ms) over which the zoom will interpolate. + * 0 implies no interpolation. (ie zoom is instant) + */ + public animationTime(): number; + public animationTime(animationTime: number): DragZoomLayer; + public animationTime(animationTime?: number): any { + if (animationTime == null) { + return this._animationTime; + } + if (animationTime < 0) { + throw new Error('animationTime cannot be negative'); + } + this._animationTime = animationTime; + return this; + } + /** + * Set the easing function, which determines how the zoom interpolates + * over time. + */ + public ease(fn: (t: number) => number): DragZoomLayer { + if (typeof fn !== 'function') { + throw new Error('ease function must be a function'); + } + if (fn(0) !== 0 || fn(1) !== 1) { + Plottable.Utils.Window.warn( + 'Easing function does not maintain invariant ' + + 'f(0)==0 && f(1)==1. Bad behavior may result.' + ); + } + this.easeFn = fn; + return this; + } + // Zoom into extent of the selection box bounds + private zoom() { + let x0: number = this.xExtent()[0].valueOf(); + let x1: number = this.xExtent()[1].valueOf(); + let y0: number = this.yExtent()[1].valueOf(); + let y1: number = this.yExtent()[0].valueOf(); + if (x0 === x1 || y0 === y1) { + return; + } + this.interpolateZoom(x0, x1, y0, y1); + } + // Restore the scales to their state before any zoom + private unzoom() { + // We need to reset the zoom domain unconditionally, as the data or the + // smoothing may have updated, such that we are not longer fully zoomed out. + let xScale = this.xScale() as any; + xScale._domainMin = null; + xScale._domainMax = null; + let xDomain = xScale._getExtent(); + this.xScale().domain(xDomain); + this.unzoomMethod(); + } + // If we are zooming, disable interactions, to avoid contention + private isZooming(isZooming: boolean) { + this._dragInteraction.enabled(!isZooming); + this._doubleClickInteraction.enabled(!isZooming); + } + private interpolateZoom(x0f: number, x1f: number, y0f: number, y1f: number) { + let x0s: number = this.xScale().domain()[0].valueOf(); + let x1s: number = this.xScale().domain()[1].valueOf(); + let y0s: number = this.yScale().domain()[0].valueOf(); + let y1s: number = this.yScale().domain()[1].valueOf(); + // Copy a ref to the ease fn, so that changing ease wont affect zooms in + // progress. + let ease = this.easeFn; + let interpolator = (a: number, b: number, p: number) => + d3.interpolateNumber(a, b)(ease(p)); + this.isZooming(true); + let start = Date.now(); + let draw = () => { + let now = Date.now(); + let passed = now - start; + let p = + this._animationTime === 0 + ? 1 + : Math.min(1, passed / this._animationTime); + let x0 = interpolator(x0s, x0f, p); + let x1 = interpolator(x1s, x1f, p); + let y0 = interpolator(y0s, y0f, p); + let y1 = interpolator(y1s, y1f, p); + this.xScale().domain([x0, x1]); + this.yScale().domain([y0, y1]); + if (p < 1) { + Plottable.Utils.DOM.requestAnimationFramePolyfill(draw); + } else { + this.onEnd(); + this.isZooming(false); + } + }; + draw(); + } +} diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/line-chart-exporter.ts b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/line-chart-exporter.ts new file mode 100644 index 0000000000000000000000000000000000000000..5d5d3c2ddf318b86efdb13de1c036cce5e2311cc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/line-chart-exporter.ts @@ -0,0 +1,129 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +enum NodeName { + GROUP = 'G', + DIV = 'DIV', + SVG = 'SVG', + TEXT = 'TEXT', +} + +export class PlottableExporter { + private root: Element; + private uniqueId: number = 0; + constructor(rootEl: Element) { + this.root = rootEl; + } + public exportAsString(): string { + const convertedNodes = this.convert(this.root); + if (!convertedNodes) return ''; + const svg = this.createRootSvg(); + svg.appendChild(convertedNodes); + return svg.outerHTML; + } + private createUniqueId(prefix: string): string { + return `${prefix}_${this.uniqueId++}`; + } + private getSize(): DOMRect | ClientRect { + return this.root.getBoundingClientRect(); + } + private createRootSvg(): Element { + const svg = document.createElement('svg'); + const rect = this.getSize(); + // case on `viewBox` is sensitive. + svg.setAttributeNS('svg', 'viewBox', `0 0 ${rect.width} ${rect.height}`); + svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg'); + return svg; + } + private convert(node: Node): Node | null { + let newNode = null; + const nodeName = node.nodeName.toUpperCase(); + if ( + node.nodeType == Node.ELEMENT_NODE && + (nodeName == NodeName.DIV || nodeName == NodeName.SVG) + ) { + newNode = document.createElement(NodeName.GROUP); + const style = window.getComputedStyle(node as Element); + const left = parseInt(style.left, 10); + const top = parseInt(style.top, 10); + if (left || top) { + const clipId = this.createUniqueId('clip'); + newNode.setAttribute('transform', `translate(${left}, ${top})`); + newNode.setAttribute('clip-path', `url(#${clipId})`); + const width = parseInt(style.width, 10); + const height = parseInt(style.height, 10); + const rect = document.createElement('rect'); + rect.setAttribute('width', String(width)); + rect.setAttribute('height', String(height)); + const clipPath = document.createElementNS('svg', 'clipPath'); + clipPath.id = clipId; + clipPath.appendChild(rect); + newNode.appendChild(clipPath); + } + } else { + newNode = node.cloneNode(); + } + Array.from(node.childNodes) + .map((node) => this.convert(node)) + .filter(Boolean) + .forEach((el) => newNode.appendChild(el)); + // Remove empty grouping. They add too much noise. + const shouldOmit = + (newNode.nodeName.toUpperCase() == NodeName.GROUP && + !newNode.hasChildNodes()) || + this.shouldOmitNode(node); + if (shouldOmit) return null; + return this.stripClass(this.transferStyle(node, newNode)); + } + private stripClass(node: Node): Node { + if (node.nodeType == Node.ELEMENT_NODE) { + (node as Element).removeAttribute('class'); + } + return node; + } + private transferStyle(origNode: Node, node: Node): Node { + if (node.nodeType != Node.ELEMENT_NODE) return node; + const el = node as HTMLElement; + const nodeName = node.nodeName.toUpperCase(); + const style = window.getComputedStyle(origNode as HTMLElement); + if (nodeName == NodeName.TEXT) { + Object.assign(el.style, { + fontFamily: style.fontFamily, + fontSize: style.fontSize, + fontWeight: style.fontWeight, + }); + } + if (nodeName != NodeName.GROUP) { + el.setAttribute('fill', style.fill); + el.setAttribute('stroke', style.stroke); + el.setAttribute('stroke-width', style.strokeWidth); + } + if (style.opacity != '1') el.setAttribute('opacity', style.opacity); + return node; + } + protected shouldOmitNode(node: Node): boolean { + return false; + } +} + +export class LineChartExporter extends PlottableExporter { + shouldOmitNode(node: Node): boolean { + // Scatter plot is useful for tooltip. Tooltip is meaningless in the + // exported svg. + if (node.nodeType == Node.ELEMENT_NODE) { + return (node as Element).classList.contains('scatter-plot'); + } + return false; + } +} diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/line-chart.ts b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/line-chart.ts new file mode 100644 index 0000000000000000000000000000000000000000..7d8ba87a45f3d4f8aa4da2625911bde8fd1dc9f9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/line-chart.ts @@ -0,0 +1,952 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as d3 from 'd3'; +import * as Plottable from 'plottable'; +import * as _ from 'lodash'; + +import {PointerInteraction} from '../vz_chart_helpers/plottable-interactions'; +import * as vz_chart_helpers from '../vz_chart_helpers/vz-chart-helpers'; +import { + SymbolFn, + XComponents, + TooltipColumn, +} from '../vz_chart_helpers/vz-chart-helpers'; +import '../vz_chart_helpers/vz-chart-tooltip'; + +import {LinearScale} from './linear-scale'; +import {LogScale} from './log-scale'; +import {ITfScale} from './tf-scale'; +import {PanZoomDragLayer} from './panZoomDragLayer'; + +/** + * An interface that describes a fill area to visualize. The fill area is + * visualized with a less intense version of the color for a given series. + */ +export interface FillArea { + // The lower end of the fill area. + lowerAccessor: Plottable.IAccessor; + // The higher end of the fill area. + higherAccessor: Plottable.IAccessor; +} +enum TooltipColumnEvalType { + TEXT, + DOM, +} + +export enum YScaleType { + LOG = 'log', + LINEAR = 'linear', +} + +export type LineChartStatus = { + smoothingEnabled: boolean; +}; + +/** + * Adds private APIs for default swatch column on the first column. + */ +interface LineChartTooltipColumn extends TooltipColumn { + evalType: TooltipColumnEvalType; + enter: () => void; +} + +export type Metadata = { + name: string; + meta: any; +}; +/** + * The maximum number of marker symbols within any line for a data series. Too + * many markers clutter the chart. + */ +const _MAX_MARKERS = 20; +export class LineChart { + private name2datasets: { + [name: string]: Plottable.Dataset; + }; + private seriesNames: string[]; + private xAccessor: Plottable.IAccessor; + private xScale: Plottable.QuantitativeScale; + private yScale: ITfScale; + private gridlines: Plottable.Components.Gridlines; + private center: Plottable.Components.Group; + private xAxis: Plottable.Axes.Numeric | Plottable.Axes.Time; + private yAxis: Plottable.Axes.Numeric; + private outer: Plottable.Components.Table; + private colorScale: Plottable.Scales.Color; + private symbolFunction: SymbolFn; + private tooltipColumns: Array< + LineChartTooltipColumn | LineChartTooltipColumn + >; + // VzChartTooltip; strong type removed to work around legacy element mixin export issue + private tooltip: any; + private tooltipInteraction: Plottable.Interactions.Pointer; + private tooltipPointsComponent: Plottable.Component; + private linePlot: Plottable.Plots.Line; + private smoothLinePlot: Plottable.Plots.Line; + private marginAreaPlot?: Plottable.Plots.Area; + private scatterPlot: Plottable.Plots.Scatter; + private nanDisplay: Plottable.Plots.Scatter; + private markersScatterPlot: Plottable.Plots.Scatter; + private yValueAccessor: Plottable.IAccessor; + private smoothedAccessor: Plottable.IAccessor; + private lastPointsDataset: Plottable.Dataset; + private fillArea?: FillArea; + private datasets: Plottable.Dataset[]; + private nanDataset: Plottable.Dataset; + private smoothingWeight: number; + private smoothingEnabled: boolean; + private tooltipSortingMethod: string; + private _ignoreYOutliers: boolean; + private _lastMousePosition: Plottable.Point; + private _lastDrawBBox: DOMRect; + private _redrawRaf: number; + private _invalidateLayoutRaf: number; + // An optional list of 2 numbers. + private _defaultXRange: number[]; + // An optional list of 2 numbers. + private _defaultYRange: number[]; + private _tooltipUpdateAnimationFrame: number; + private targetSVG: d3.Selection; + constructor( + xComponentsCreationMethod: () => XComponents, + yValueAccessor: Plottable.IAccessor, + yScaleType: YScaleType, + colorScale: Plottable.Scales.Color, + tooltip: any, // VzChartTooltip + tooltipColumns: TooltipColumn[], + fillArea: FillArea, + defaultXRange?: number[], + defaultYRange?: number[], + symbolFunction?: SymbolFn, + xAxisFormatter?: (number) => string + ) { + this.seriesNames = []; + this.name2datasets = {}; + this.colorScale = colorScale; + this.tooltip = tooltip; + this.datasets = []; + this._ignoreYOutliers = false; + // lastPointDataset is a dataset that contains just the last point of + // every dataset we're currently drawing. + this.lastPointsDataset = new Plottable.Dataset(); + this.nanDataset = new Plottable.Dataset(); + this.yValueAccessor = yValueAccessor; + // The symbol function maps series to marker. It uses a special dataset that + // varies based on whether smoothing is enabled. + this.symbolFunction = symbolFunction; + this._defaultXRange = defaultXRange; + this._defaultYRange = defaultYRange; + this.tooltipColumns = tooltipColumns as any; + this.buildChart( + xComponentsCreationMethod, + yValueAccessor, + yScaleType, + fillArea, + xAxisFormatter + ); + } + private buildChart( + xComponentsCreationMethod: () => XComponents, + yValueAccessor: Plottable.IAccessor, + yScaleType: YScaleType, + fillArea: FillArea, + xAxisFormatter: (number) => string + ) { + this.destroy(); + const xComponents = xComponentsCreationMethod(); + this.xAccessor = xComponents.accessor; + this.xScale = xComponents.scale; + this.xAxis = xComponents.axis; + (this.xAxis.margin(0) as Plottable.Axes.Numeric).tickLabelPadding(3); + if (xAxisFormatter) { + this.xAxis.formatter(xAxisFormatter); + } + this.yScale = LineChart.getYScaleFromType(yScaleType); + this.yScale.setValueProviderForDomain(() => + this.getValuesForYAxisDomainCompute() + ); + this.yAxis = new Plottable.Axes.Numeric(this.yScale, 'left'); + let yFormatter = vz_chart_helpers.multiscaleFormatter( + vz_chart_helpers.Y_AXIS_FORMATTER_PRECISION + ); + (this.yAxis.margin(0) as Plottable.Axes.Numeric) + .tickLabelPadding(5) + .formatter(yFormatter); + this.yAxis.usesTextWidthApproximation(true); + this.fillArea = fillArea; + const panZoomLayer = new PanZoomDragLayer(this.xScale, this.yScale, () => + this.resetDomain() + ); + this.tooltipInteraction = this.createTooltipInteraction(panZoomLayer); + this.tooltipPointsComponent = new Plottable.Component(); + const plot = this.buildPlot(this.xScale, this.yScale, fillArea); + this.gridlines = new Plottable.Components.Gridlines( + this.xScale, + this.yScale + ); + let xZeroLine = null; + if (yScaleType !== YScaleType.LOG) { + xZeroLine = new Plottable.Components.GuideLineLayer('horizontal'); + xZeroLine.scale(this.yScale).value(0); + } + let yZeroLine = new Plottable.Components.GuideLineLayer('vertical'); + yZeroLine.scale(this.xScale).value(0); + this.center = new Plottable.Components.Group([ + this.gridlines, + xZeroLine, + yZeroLine, + plot, + this.tooltipPointsComponent, + panZoomLayer, + ]); + this.center.addClass('main'); + this.outer = new Plottable.Components.Table([ + [this.yAxis, this.center], + [null, this.xAxis], + ]); + } + private buildPlot(xScale, yScale, fillArea): Plottable.Component { + if (fillArea) { + this.marginAreaPlot = new Plottable.Plots.Area(); + this.marginAreaPlot.x(this.xAccessor, xScale); + this.marginAreaPlot.y(fillArea.higherAccessor, yScale); + this.marginAreaPlot.y0(fillArea.lowerAccessor); + this.marginAreaPlot.attr( + 'fill', + (d: vz_chart_helpers.Datum, i: number, dataset: Plottable.Dataset) => + this.colorScale.scale(dataset.metadata().name) + ); + this.marginAreaPlot.attr('fill-opacity', 0.3); + this.marginAreaPlot.attr('stroke-width', 0); + } + this.smoothedAccessor = (d: vz_chart_helpers.ScalarDatum) => d.smoothed; + let linePlot = new Plottable.Plots.Line(); + linePlot.x(this.xAccessor, xScale); + linePlot.y(this.yValueAccessor, yScale); + linePlot.attr( + 'stroke', + (d: vz_chart_helpers.Datum, i: number, dataset: Plottable.Dataset) => + this.colorScale.scale(dataset.metadata().name) + ); + this.linePlot = linePlot; + this.setupTooltips(linePlot); + let smoothLinePlot = new Plottable.Plots.Line(); + smoothLinePlot.x(this.xAccessor, xScale); + smoothLinePlot.y(this.smoothedAccessor, yScale); + smoothLinePlot.attr( + 'stroke', + (d: vz_chart_helpers.Datum, i: number, dataset: Plottable.Dataset) => + this.colorScale.scale(dataset.metadata().name) + ); + this.smoothLinePlot = smoothLinePlot; + if (this.symbolFunction) { + const markersScatterPlot = new Plottable.Plots.Scatter< + number | Date, + number + >(); + markersScatterPlot.x(this.xAccessor, xScale); + markersScatterPlot.y(this.yValueAccessor, yScale); + markersScatterPlot.attr( + 'fill', + (d: vz_chart_helpers.Datum, i: number, dataset: Plottable.Dataset) => + this.colorScale.scale(dataset.metadata().name) + ); + markersScatterPlot.attr('opacity', 1); + markersScatterPlot.size(vz_chart_helpers.TOOLTIP_CIRCLE_SIZE * 2); + markersScatterPlot.symbol( + (d: vz_chart_helpers.Datum, i: number, dataset: Plottable.Dataset) => { + return this.symbolFunction(dataset.metadata().name); + } + ); + // Use a special dataset because this scatter plot should use the accesor + // that depends on whether smoothing is enabled. + this.markersScatterPlot = markersScatterPlot; + } + // The scatterPlot will display the last point for each dataset. + // This way, if there is only one datum for the series, it is still + // visible. We hide it when tooltips are active to keep things clean. + let scatterPlot = new Plottable.Plots.Scatter(); + scatterPlot.x(this.xAccessor, xScale); + scatterPlot.y(this.yValueAccessor, yScale); + scatterPlot.attr('fill', (d: any) => this.colorScale.scale(d.name)); + scatterPlot.attr('opacity', 1); + scatterPlot.size(vz_chart_helpers.TOOLTIP_CIRCLE_SIZE * 2); + scatterPlot.datasets([this.lastPointsDataset]); + this.scatterPlot = scatterPlot; + let nanDisplay = new Plottable.Plots.Scatter(); + nanDisplay.x(this.xAccessor, xScale); + nanDisplay.y((x) => x.displayY, yScale); + nanDisplay.attr('fill', (d: any) => this.colorScale.scale(d.name)); + nanDisplay.attr('opacity', 1); + nanDisplay.size(vz_chart_helpers.NAN_SYMBOL_SIZE * 2); + nanDisplay.datasets([this.nanDataset]); + nanDisplay.symbol(Plottable.SymbolFactories.triangle); + this.nanDisplay = nanDisplay; + const groups = [nanDisplay, scatterPlot, smoothLinePlot, linePlot]; + if (this.marginAreaPlot) { + groups.push(this.marginAreaPlot); + } + if (this.markersScatterPlot) { + groups.push(this.markersScatterPlot); + } + return new Plottable.Components.Group(groups); + } + public ignoreYOutliers(ignoreYOutliers: boolean) { + if (ignoreYOutliers !== this._ignoreYOutliers) { + this._ignoreYOutliers = ignoreYOutliers; + this.updateSpecialDatasets(); + this.yScale.ignoreOutlier(ignoreYOutliers); + this.resetYDomain(); + } + } + private getValuesForYAxisDomainCompute(): number[] { + const accessors = this.getAccessorsForComputingYRange(); + let datasetToValues: (d: Plottable.Dataset) => number[][] = (d) => { + return accessors.map((accessor) => + d.data().map((x) => accessor(x, -1, d)) + ); + }; + return _.flattenDeep(this.datasets.map(datasetToValues)).filter(isFinite); + } + /** Constructs special datasets. Each special dataset contains exceptional + * values from all of the regular datasets, e.g. last points in series, or + * NaN values. Those points will have a `name` and `relative` property added + * (since usually those are context in the surrounding dataset). + */ + private updateSpecialDatasets() { + const accessor = this.getYAxisAccessor(); + let lastPointsData = this.datasets + .map((d) => { + let datum = null; + // filter out NaNs to ensure last point is a clean one + let nonNanData = d.data().filter((x) => !isNaN(accessor(x, -1, d))); + if (nonNanData.length > 0) { + let idx = nonNanData.length - 1; + datum = nonNanData[idx]; + datum.name = d.metadata().name; + datum.relative = vz_chart_helpers.relativeAccessor(datum, -1, d); + } + return datum; + }) + .filter((x) => x != null); + this.lastPointsDataset.data(lastPointsData); + if (this.markersScatterPlot) { + this.markersScatterPlot.datasets( + this.datasets.map(this.createSampledDatasetForMarkers) + ); + } + // Take a dataset, return an array of NaN data points + // the NaN points will have a "displayY" property which is the + // y-value of a nearby point that was not NaN (0 if all points are NaN) + let datasetToNaNData = (d: Plottable.Dataset) => { + let displayY = null; + let data = d.data(); + let i = 0; + while (i < data.length && displayY == null) { + if (!isNaN(accessor(data[i], -1, d))) { + displayY = accessor(data[i], -1, d); + } + i++; + } + if (displayY == null) { + displayY = 0; + } + let nanData = []; + for (i = 0; i < data.length; i++) { + if (!isNaN(accessor(data[i], -1, d))) { + displayY = accessor(data[i], -1, d); + } else { + data[i].name = d.metadata().name; + data[i].displayY = displayY; + data[i].relative = vz_chart_helpers.relativeAccessor(data[i], -1, d); + nanData.push(data[i]); + } + } + return nanData; + }; + let nanData = _.flatten(this.datasets.map(datasetToNaNData)); + this.nanDataset.data(nanData); + } + public resetDomain() { + this.resetXDomain(); + this.resetYDomain(); + } + private resetXDomain() { + let xDomain; + if (this._defaultXRange != null) { + // Use the range specified by the caller. + xDomain = this._defaultXRange; + } else { + // (Copied from vz_line_chart.DragZoomLayer.unzoom.) + const xScale = this.xScale as any; + xScale._domainMin = null; + xScale._domainMax = null; + xDomain = xScale._getExtent(); + } + this.xScale.domain(xDomain); + } + private resetYDomain() { + if (this._defaultYRange != null) { + // Use the range specified by the caller. + this.yScale.domain(this._defaultYRange); + } else { + // TfScale has all the logics for scaling and we manually trigger it with + // `autoDomain`. However, this enables the autoDomain mode which updates + // the domain on any dataset change and this is not desirably especially + // when a run is not finished yet; we don't want the graph to change in + // scale while user is inspecting the graph. By setting the `domain` + // explicitly, we can turn the feature off. + this.yScale.autoDomain(); + this.yScale.domain(this.yScale.domain()); + } + } + private getAccessorsForComputingYRange(): Plottable.IAccessor[] { + const accessors = [this.getYAxisAccessor()]; + if (this.fillArea) { + // Make the Y domain take margins into account. + accessors.push(this.fillArea.lowerAccessor, this.fillArea.higherAccessor); + } + return accessors; + } + private getYAxisAccessor() { + return this.smoothingEnabled ? this.smoothedAccessor : this.yValueAccessor; + } + private createTooltipInteraction( + pzdl: PanZoomDragLayer + ): Plottable.Interactions.Pointer { + const pi = new PointerInteraction(); + // Disable interaction while drag zooming. + const disableTooltipUpdate = () => { + pi.enabled(false); + this.hideTooltips(); + }; + const enableTooltipUpdate = () => pi.enabled(true); + pzdl.onPanStart(disableTooltipUpdate); + pzdl.onDragZoomStart(disableTooltipUpdate); + pzdl.onPanEnd(enableTooltipUpdate); + pzdl.onDragZoomEnd(enableTooltipUpdate); + // When using wheel, cursor position does not change. Redraw the tooltip + // using the last known mouse position. + pzdl.onScrollZoom(() => this.updateTooltipContent(this._lastMousePosition)); + pi.onPointerMove((p: Plottable.Point) => { + this._lastMousePosition = p; + this.updateTooltipContent(p); + }); + pi.onPointerExit(() => this.hideTooltips()); + return pi; + } + private updateTooltipContent(p: Plottable.Point): void { + // Line plot must be initialized to draw. + if (!this.linePlot) return; + window.cancelAnimationFrame(this._tooltipUpdateAnimationFrame); + this._tooltipUpdateAnimationFrame = window.requestAnimationFrame(() => { + let target: vz_chart_helpers.Point = { + x: p.x, + y: p.y, + datum: null, + dataset: null, + }; + let bbox: SVGRect = (this.gridlines.content().node()).getBBox(); + // pts is the closets point to the tooltip for each dataset + let pts = this.linePlot + .datasets() + .map((dataset) => this.findClosestPoint(target, dataset)) + .filter(Boolean); + let intersectsBBox = Plottable.Utils.DOM.intersectsBBox; + // We draw tooltips for points that are NaN, or are currently visible + let ptsForTooltips = pts.filter( + (p) => + intersectsBBox(p.x, p.y, bbox) || + isNaN(this.yValueAccessor(p.datum, 0, p.dataset)) + ); + // Only draw little indicator circles for the non-NaN points + let ptsToCircle = ptsForTooltips.filter( + (p) => !isNaN(this.yValueAccessor(p.datum, 0, p.dataset)) + ); + if (pts.length !== 0) { + this.scatterPlot.attr('display', 'none'); + const ptsSelection: any = this.tooltipPointsComponent + .content() + .selectAll('.point') + .data( + ptsToCircle, + (p: vz_chart_helpers.Point) => p.dataset.metadata().name + ); + ptsSelection.enter().append('circle').classed('point', true); + ptsSelection + .attr('r', vz_chart_helpers.TOOLTIP_CIRCLE_SIZE) + .attr('cx', (p) => p.x) + .attr('cy', (p) => p.y) + .style('stroke', 'none') + .attr('fill', (p) => + this.colorScale.scale(p.dataset.metadata().name) + ); + ptsSelection.exit().remove(); + this.drawTooltips(ptsForTooltips, target, this.tooltipColumns); + } else { + this.hideTooltips(); + } + }); + } + private hideTooltips(): void { + window.cancelAnimationFrame(this._tooltipUpdateAnimationFrame); + this.tooltip.hide(); + this.scatterPlot.attr('display', 'block'); + this.tooltipPointsComponent.content().selectAll('.point').remove(); + } + private setupTooltips(plot: Plottable.XYPlot): void { + plot.onDetach(() => { + this.tooltipInteraction.detachFrom(plot); + this.tooltipInteraction.enabled(false); + }); + plot.onAnchor(() => { + this.tooltipInteraction.attachTo(plot); + this.tooltipInteraction.enabled(true); + }); + } + private drawTooltips( + points: vz_chart_helpers.Point[], + target: vz_chart_helpers.Point, + tooltipColumns: TooltipColumn[] + ) { + if (!points.length) { + this.tooltip.hide(); + return; + } + const {colorScale} = this; + const swatchCol = { + title: '', + static: false, + evalType: TooltipColumnEvalType.DOM, + evaluate(d: vz_chart_helpers.Point) { + d3.select(this) + .select('span') + .style('background-color', () => + colorScale.scale(d.dataset.metadata().name) + ); + return ''; + }, + enter(d: vz_chart_helpers.Point) { + d3.select(this) + .append('span') + .classed('swatch', true) + .style('background-color', () => + colorScale.scale(d.dataset.metadata().name) + ); + }, + }; + tooltipColumns = [swatchCol, ...tooltipColumns]; + // Formatters for value, step, and wall_time + let valueFormatter = vz_chart_helpers.multiscaleFormatter( + vz_chart_helpers.Y_TOOLTIP_FORMATTER_PRECISION + ); + const dist = (p: vz_chart_helpers.Point) => + Math.pow(p.x - target.x, 2) + Math.pow(p.y - target.y, 2); + const closestDist = _.min(points.map(dist)); + const valueSortMethod = this.smoothingEnabled + ? this.smoothedAccessor + : this.yValueAccessor; + if (this.tooltipSortingMethod === 'ascending') { + points = _.sortBy(points, (d) => valueSortMethod(d.datum, -1, d.dataset)); + } else if (this.tooltipSortingMethod === 'descending') { + points = _.sortBy(points, (d) => + valueSortMethod(d.datum, -1, d.dataset) + ).reverse(); + } else if (this.tooltipSortingMethod === 'nearest') { + points = _.sortBy(points, dist); + } else { + // The 'default' sorting method maintains the order of names passed to + // setVisibleSeries(). However we reverse that order when defining the + // datasets. So we must call reverse again to restore the order. + points = points.slice(0).reverse(); + } + const self = this; + const table = d3.select(this.tooltip.content()).select('table'); + const header = table + .select('thead') + .selectAll('th') + .data(tooltipColumns, (column: TooltipColumn, _, __) => { + return column.title; + }); + header + .enter() + .append('th') + .text((col) => col.title) + .nodes(); + header.exit().remove(); + const rows = table + .select('tbody') + .selectAll('tr') + .data(points, (pt: vz_chart_helpers.Point, _, __) => { + return pt.dataset.metadata().name; + }); + rows + .classed('distant', (d) => { + // Grey out the point if any of the following are true: + // - The cursor is outside of the x-extent of the dataset + // - The point's y value is NaN + let firstPoint = d.dataset.data()[0]; + let lastPoint = _.last(d.dataset.data()); + let firstX = this.xScale.scale( + this.xAccessor(firstPoint, 0, d.dataset) + ); + let lastX = this.xScale.scale(this.xAccessor(lastPoint, 0, d.dataset)); + let s = this.smoothingEnabled + ? d.datum.smoothed + : this.yValueAccessor(d.datum, 0, d.dataset); + return target.x < firstX || target.x > lastX || isNaN(s); + }) + .classed('closest', (p) => dist(p) === closestDist) + .each(function (point) { + self.drawTooltipRow(this, tooltipColumns, point); + }) + // reorders DOM to match the ordering of the `data`. + .order(); + rows.exit().remove(); + rows + .enter() + .append('tr') + .each(function (point) { + self.drawTooltipRow(this, tooltipColumns, point); + }) + .nodes(); + this.tooltip.updateAndPosition(this.targetSVG.node()); + } + private drawTooltipRow( + row: d3.BaseType, + tooltipColumns: TooltipColumn[], + point: vz_chart_helpers.Point + ) { + const self = this; + const columns = d3.select(row).selectAll('td').data(tooltipColumns); + columns.each(function (col: TooltipColumn) { + // Skip column value update when the column is static. + if (col.static) return; + self.drawTooltipColumn.call(self, this, col, point); + }); + columns.exit().remove(); + columns + .enter() + .append('td') + .each(function (col: TooltipColumn | LineChartTooltipColumn) { + if ('enter' in col && col.enter) { + const customTooltip = col as LineChartTooltipColumn; + customTooltip.enter.call(this, point); + } + self.drawTooltipColumn.call(self, this, col, point); + }); + } + private drawTooltipColumn( + column: d3.BaseType, + tooltipCol: TooltipColumn | LineChartTooltipColumn, + point: vz_chart_helpers.Point + ) { + const {smoothingEnabled} = this; + if ( + 'evalType' in tooltipCol && + tooltipCol.evalType == TooltipColumnEvalType.DOM + ) { + tooltipCol.evaluate.call(column, point, {smoothingEnabled}); + } else { + d3.select(column).text( + tooltipCol.evaluate.call(column, point, {smoothingEnabled}) + ); + } + } + private findClosestPoint( + target: vz_chart_helpers.Point, + dataset: Plottable.Dataset + ): vz_chart_helpers.Point | null { + const xPoints: number[] = dataset + .data() + .map((d, i) => this.xScale.scale(this.xAccessor(d, i, dataset))); + let idx: number = _.sortedIndex(xPoints, target.x); + if (xPoints.length == 0) return null; + if (idx === xPoints.length) { + idx = idx - 1; + } else if (idx !== 0) { + const prevDist = Math.abs(xPoints[idx - 1] - target.x); + const nextDist = Math.abs(xPoints[idx] - target.x); + idx = prevDist < nextDist ? idx - 1 : idx; + } + const datum = dataset.data()[idx]; + const y = this.smoothingEnabled + ? this.smoothedAccessor(datum, idx, dataset) + : this.yValueAccessor(datum, idx, dataset); + return { + x: xPoints[idx], + y: this.yScale.scale(y), + datum, + dataset, + }; + } + private resmoothDataset(dataset: Plottable.Dataset) { + let data = dataset.data(); + const smoothingWeight = this.smoothingWeight; + // 1st-order IIR low-pass filter to attenuate the higher- + // frequency components of the time-series. + let last = data.length > 0 ? 0 : NaN; + let numAccum = 0; + const yValues = data.map((d, i) => this.yValueAccessor(d, i, dataset)); + // See #786. + const isConstant = yValues.every((v) => v == yValues[0]); + data.forEach((d, i) => { + const nextVal = yValues[i]; + if (isConstant || !Number.isFinite(nextVal)) { + d.smoothed = nextVal; + } else { + last = last * smoothingWeight + (1 - smoothingWeight) * nextVal; + numAccum++; + // The uncorrected moving average is biased towards the initial value. + // For example, if initialized with `0`, with smoothingWeight `s`, where + // every data point is `c`, after `t` steps the moving average is + // ``` + // EMA = 0*s^(t) + c*(1 - s)*s^(t-1) + c*(1 - s)*s^(t-2) + ... + // = c*(1 - s^t) + // ``` + // If initialized with `0`, dividing by (1 - s^t) is enough to debias + // the moving average. We count the number of finite data points and + // divide appropriately before storing the data. + let debiasWeight = 1; + if (smoothingWeight !== 1) { + debiasWeight = 1 - Math.pow(smoothingWeight, numAccum); + } + d.smoothed = last / debiasWeight; + } + }); + } + private getDataset(name: string) { + if (this.name2datasets[name] === undefined) { + this.name2datasets[name] = new Plottable.Dataset([], { + name, + meta: null, + }); + } + return this.name2datasets[name]; + } + static getYScaleFromType(yScaleType: string): ITfScale { + if (yScaleType === YScaleType.LOG) { + return new LogScale(); + } else if (yScaleType === YScaleType.LINEAR) { + return new LinearScale(); + } else { + throw new Error('Unrecognized yScale type ' + yScaleType); + } + } + /** + * Stages update of visible series on the chart. + * + * Please call `commitChanges` for the changes to be reflected on the chart + * after making all the changes. + */ + public setVisibleSeries(names: string[]) { + this.disableChanges(); + names = names.sort(); + names.reverse(); // draw first series on top + this.seriesNames = names; + } + private dirtyDatasets = new Set(); + private disableChanges() { + if (!this.dirtyDatasets.size) { + // Prevent plots from reacting to the dataset changes. + this.linePlot.datasets([]); + if (this.smoothLinePlot) { + this.smoothLinePlot.datasets([]); + } + if (this.marginAreaPlot) { + this.marginAreaPlot.datasets([]); + } + } + } + public commitChanges() { + this.datasets = this.seriesNames.map((r) => this.getDataset(r)); + [...this.dirtyDatasets].forEach((d) => { + if (this.smoothingEnabled) { + this.resmoothDataset(this.getDataset(d)); + } + }); + this.updateSpecialDatasets(); + this.linePlot.datasets(this.datasets); + if (this.smoothingEnabled) { + this.smoothLinePlot.datasets(this.datasets); + } + if (this.marginAreaPlot) { + this.marginAreaPlot.datasets(this.datasets); + } + this.measureBBoxAndMaybeInvalidateLayoutInRaf(); + this.dirtyDatasets.clear(); + } + /** + * Samples a dataset so that it contains no more than _MAX_MARKERS number of + * data points. This function returns the original dataset if it does not + * exceed that many points. + */ + public createSampledDatasetForMarkers( + original: Plottable.Dataset + ): Plottable.Dataset { + const originalData = original.data(); + if (originalData.length <= _MAX_MARKERS) { + // This dataset is small enough. Do not sample. + return original; + } + // Downsample the data. Otherwise, too many markers clutter the chart. + const skipLength = Math.ceil(originalData.length / _MAX_MARKERS); + const data = new Array(Math.floor(originalData.length / skipLength)); + for (let i = 0, j = 0; i < data.length; i++, j += skipLength) { + data[i] = originalData[j]; + } + return new Plottable.Dataset(data, original.metadata()); + } + /** + * Stages a data change of a series on the chart. + * + * Please call `commitChanges` for the changes to be reflected on the chart + * after making all the changes. + */ + public setSeriesData(name: string, data: vz_chart_helpers.ScalarDatum[]) { + this.disableChanges(); + this.getDataset(name).data(data); + this.dirtyDatasets.add(name); + } + /** + * Sets a metadata change of a series on the chart. + * + * Please call `commitChanges` for the changes to be reflected on the chart + * after making all the changes. + */ + public setSeriesMetadata(name: string, meta: any) { + this.disableChanges(); + this.getDataset(name).metadata({ + ...this.getDataset(name).metadata(), + meta, + }); + this.dirtyDatasets.add(name); + } + public smoothingUpdate(weight: number) { + this.smoothingWeight = weight; + this.datasets.forEach((d) => this.resmoothDataset(d)); + if (!this.smoothingEnabled) { + this.linePlot.addClass('ghost'); + this.scatterPlot.y(this.smoothedAccessor, this.yScale); + this.smoothingEnabled = true; + this.smoothLinePlot.datasets(this.datasets); + } + if (this.markersScatterPlot) { + // Use the correct accessor for marker positioning. + this.markersScatterPlot.y(this.getYAxisAccessor(), this.yScale); + } + this.updateSpecialDatasets(); + } + public smoothingDisable() { + if (this.smoothingEnabled) { + this.linePlot.removeClass('ghost'); + this.scatterPlot.y(this.yValueAccessor, this.yScale); + this.smoothLinePlot.datasets([]); + this.smoothingEnabled = false; + this.updateSpecialDatasets(); + } + if (this.markersScatterPlot) { + // Use the correct accessor (which depends on whether smoothing is + // enabled) for marker positioning. + this.markersScatterPlot.y(this.getYAxisAccessor(), this.yScale); + } + } + public setColorScale(colorScale: Plottable.Scales.Color) { + this.colorScale = colorScale; + } + public setTooltipColumns(tooltipColumns: TooltipColumn[]) { + this.tooltipColumns = tooltipColumns as any; + } + public setTooltipSortingMethod(method: string) { + this.tooltipSortingMethod = method; + } + public renderTo(targetSVG: d3.Selection) { + this.targetSVG = targetSVG; + this.outer.renderTo(targetSVG); + if (this._defaultXRange != null) { + // A higher-level component provided a default range for the X axis. + // Start with that range. + this.resetXDomain(); + } + if (this._defaultYRange != null) { + // A higher-level component provided a default range for the Y axis. + // Start with that range. + this.resetYDomain(); + } + this.measureBBoxAndMaybeInvalidateLayoutInRaf(); + } + public redraw() { + window.cancelAnimationFrame(this._redrawRaf); + this._redrawRaf = window.requestAnimationFrame(() => { + this.measureBBoxAndMaybeInvalidateLayout(); + this.outer.redraw(); + }); + } + private measureBBoxAndMaybeInvalidateLayoutInRaf() { + window.cancelAnimationFrame(this._invalidateLayoutRaf); + this._invalidateLayoutRaf = window.requestAnimationFrame(() => { + this.measureBBoxAndMaybeInvalidateLayout(); + }); + } + /** + * Measures bounding box of the anchor node and determines whether the layout + * needs to be re-done with measurement cache invalidated. Plottable improved + * performance of rendering by caching expensive DOM measurement but this + * cache can be poisoned in case the anchor node is in a wrong state -- namely + * `display: none` where all dimensions are 0. + */ + private measureBBoxAndMaybeInvalidateLayout() { + if (this._lastDrawBBox) { + const {width: prevWidth} = this._lastDrawBBox; + const {width} = this.targetSVG.node().getBoundingClientRect(); + if (prevWidth == 0 && prevWidth < width) this.outer.invalidateCache(); + } + this._lastDrawBBox = this.targetSVG.node().getBoundingClientRect(); + } + public destroy() { + // Destroying outer destroys all subcomponents recursively. + window.cancelAnimationFrame(this._redrawRaf); + window.cancelAnimationFrame(this._invalidateLayoutRaf); + if (this.outer) this.outer.destroy(); + } + public onAnchor(fn: () => void) { + if (this.outer) this.outer.onAnchor(fn); + } + /** + * Returns whether the extent of rendered data values fits the current + * chart viewport domain (includes smoothing and outlier detection). + * + * This is true when there is no data, and false when the domain has been + * transformed from the extent via transformations (pan, zoom). + */ + public isDataFitToDomain(): boolean { + return ( + isDataFitToDomain(this.xAxis.getScale()) && + isDataFitToDomain(this.yAxis.getScale()) + ); + function isDataFitToDomain(scale) { + /** + * Domain represents the currently displayed region, possibly a zoomed + * in or zoomed out view of the data. + * + * Extent represents the extent of the data, the range of all provided + * datum values. + */ + const domain = scale.getTransformationDomain(); + const extent = scale.getTransformationExtent(); + return extent[0] === domain[0] && extent[1] === domain[1]; + } + } +} diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/linear-scale.ts b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/linear-scale.ts new file mode 100644 index 0000000000000000000000000000000000000000..1b4e883ac24f9e00e3660903b1a7190a4b92cf4f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/linear-scale.ts @@ -0,0 +1,116 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as d3 from 'd3'; +import * as Plottable from 'plottable'; + +import {ValueProviderForDomain, ITfScale} from './tf-scale'; + +export class LinearScale extends Plottable.Scales.Linear implements ITfScale { + private _ignoreOutlier: boolean = false; + protected _valueProviderForDomain: ValueProviderForDomain; + constructor() { + super(); + this.padProportion(0.2); + } + public setValueProviderForDomain(provider: ValueProviderForDomain): this { + this._valueProviderForDomain = provider; + return this; + } + /** + * TODO(nickfelt): Examine whether we truly require `c`. + * Adds some padding to a given domain. Specifically, it: + * - returns about [-0.1a - c, 2.1a + c] when a = b and a >= 0. + * - returns about [-2.1|a| - c, -0.1|a| + c] when a = b and a < 0. + * - returns [-0.1b, b + padProportion * (b-a)] if b > 2a and a > 0 + * - else, pads by `padProportion` + * Note that `c` is a constant offset which specifically is 1.1. Please refer + * to [1] for its rationale. + * @override + */ + protected _niceDomain(domain: number[], count?: number): number[] { + const [a, b] = domain; + let padding: number; + const span = b - a; + if (span === 0) { + // If b===a, we would create an empty range. We instead select the range + // [0, 2*a] if a > 0, or [-2*a, 0] if a < 0, plus a little bit of + // extra padding on the top and bottom of the plot. + padding = Math.abs(a) * 1.1 + 1.1; + } else { + padding = span * this.padProportion(); + } + let lower: number; + if (a >= 0 && a < span) { + // [1]: We include the intercept (y = 0) if doing so less than doubles the + // span of the y-axis. (We actually select a lower bound that's slightly + // less than 0 so that 0.00 will clearly be written on the lower edge of + // the chart. The label on the lowest tick is often filtered out.) + lower = -0.1 * b; + } else { + lower = a - padding; + } + return super._niceDomain([lower, b + padding], count); + } + /** + * @override to remove default padding logic. + */ + protected _getUnboundedExtent(ignoreAttachState): number[] { + const includedValues = this._getAllIncludedValues(ignoreAttachState); + let extent = this._defaultExtent(); + if (includedValues.length !== 0) { + const combinedExtent = [ + Plottable.Utils.Math.min(includedValues, extent[0]), + Plottable.Utils.Math.max(includedValues, extent[1]), + ]; + extent = this._niceDomain(combinedExtent); + } + return extent; + } + /** + * @override + */ + protected _getAllIncludedValues(ignoreAttachState = false): number[] { + const values = this._valueProviderForDomain + ? this._valueProviderForDomain() + : []; + return this.extentOfValues(values); + } + /** + * @override to apply the outlier logic. + */ + public extentOfValues(values: number[]): number[] { + const legalValues = values.filter((x) => + Plottable.Utils.Math.isValidNumber(x) + ); + let filteredValues = legalValues; + if (this.ignoreOutlier()) { + const sortedValues = legalValues.sort((a, b) => a - b); + const a = d3.quantile(sortedValues, 0.05); + const b = d3.quantile(sortedValues, 0.95); + filteredValues = legalValues.filter((x) => x >= a && x <= b); + } + const extent = d3.extent(filteredValues); + return extent[0] == null || extent[1] == null ? [] : extent; + } + public ignoreOutlier(): boolean; + public ignoreOutlier(ignore: boolean): this; + public ignoreOutlier(ignore?: boolean): any { + if (typeof ignore == 'boolean') { + this._ignoreOutlier = ignore; + return this; + } + return this._ignoreOutlier; + } +} diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/log-scale.ts b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/log-scale.ts new file mode 100644 index 0000000000000000000000000000000000000000..738318774f5f1c69a868e997b070b4c078193869 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/log-scale.ts @@ -0,0 +1,161 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as Plottable from 'plottable'; +import * as d3 from 'd3'; + +import {TfScale} from './tf-scale'; + +// Smallest positive non-zero value represented by IEEE 754 binary (64 bit) import * as d3 from 'd3'; +// floating-point number. +// https://www.ecma-international.org/ecma-262/5.1/#sec-8.5 +export const MIN_POSITIVE_VALUE = Math.pow(2, -1074); + +function log(x: number): number { + return Math.log10(x); +} + +function pow(x: number): number { + return Math.pow(10, x); +} +/** + * A logarithmic scale that returns NaN for all non-positive values as it + * mathematically is supposed to be -Infinity. Also, due to the floating point + * precision issue, it treats all values smaller than MIN_POSITIVE_VALUE as + * non-positive. Lastly, if using autoDomain feature and if all values are the + * same value, it pads 10% of the value. + */ +export class LogScale extends TfScale { + private _d3LogScale = d3.scaleLog(); + private _untransformedDomain: number[]; + constructor() { + super(); + this.padProportion(0.2); + } + public scale(x: number): number { + // Returning NaN makes sure line plot does not plot illegal values. + if (x <= 0) return NaN; + return this._d3LogScale(x); + } + public invert(x: number): number { + return this._d3LogScale.invert(x); + } + public scaleTransformation(value: number) { + return this.scale(value); + } + public invertedTransformation(value: number) { + return this.invert(value); + } + public getTransformationDomain(): [number, number] { + return this.domain() as [number, number]; + } + public setTransformationDomain(domain: [number, number]) { + this.domain(domain); + } + public getTransformationExtent(): [number, number] { + return this._getUnboundedExtent(true) as [number, number]; + } + protected _getDomain() { + return this._untransformedDomain; + } + protected _setDomain(values: number[]) { + this._untransformedDomain = values; + const [min, max] = values; + super._setDomain([Math.max(MIN_POSITIVE_VALUE, min), max]); + } + /** + * Given a domain, pad it and clip the lower bound to MIN_POSITIVE_VALUE. + */ + protected _niceDomain(domain: number[], count?: number): number[] { + const [low, high] = domain; + const adjustedLogLow = Math.max(log(MIN_POSITIVE_VALUE), log(low)); + const logHigh = log(high); + const spread = logHigh - adjustedLogLow; + const pad = spread ? spread * this.padProportion() : 1; + return [ + pow(Math.max(log(MIN_POSITIVE_VALUE), adjustedLogLow - pad)), + pow(logHigh + pad), + ]; + } + /** + * Generates a possible extent based on data from all plots the scale is + * connected to by taking the minimum and maximum values of all extents for + * lower and upper bound, respectively. + * @override to remove default padding logic. + */ + protected _getUnboundedExtent(ignoreAttachState): number[] { + const includedValues = this._getAllIncludedValues(ignoreAttachState); + let extent = this._defaultExtent(); + if (includedValues.length !== 0) { + const combinedExtent = [ + Plottable.Utils.Math.min(includedValues, extent[0]), + Plottable.Utils.Math.max(includedValues, extent[1]), + ]; + extent = this._niceDomain(combinedExtent); + } + return extent; + } + protected _getAllIncludedValues(ignoreAttachState = false): number[] { + const values = super._getAllIncludedValues(); + // For log scale, the value cannot be smaller or equal to 0. They are + // negative infinity. + return values.map((x) => (x > 0 ? x : MIN_POSITIVE_VALUE)); + } + protected _defaultExtent(): number[] { + return [1, 10]; + } + protected _backingScaleDomain(): number[]; + protected _backingScaleDomain(values: number[]): this; + protected _backingScaleDomain(values?: number[]): any { + if (values == null) { + return this._d3LogScale.domain(); + } else { + this._d3LogScale.domain(values); + return this; + } + } + protected _getRange() { + return this._d3LogScale.range(); + } + protected _setRange(values: number[]) { + this._d3LogScale.range(values); + } + public defaultTicks(): number[] { + return this._d3LogScale.ticks(1); + } + public ticks(): number[] { + return this._d3LogScale.ticks(); + } + /** + * Returns an `extent` for a data series. In log-scale, we must omit all + * non-positive values when computing a `domain`. + * @override + */ + public extentOfValues(values: number[]): number[] { + // Log can only take positive values. + const legalValues = values.filter( + (x) => Plottable.Utils.Math.isValidNumber(x) && x > 0 + ); + let filteredValues = legalValues; + if (this.ignoreOutlier()) { + const logValues = legalValues.map(log); + const sortedLogValues = logValues.sort((a, b) => a - b); + const a = d3.quantile(sortedLogValues, 0.05); + const b = d3.quantile(sortedLogValues, 0.95); + filteredValues = sortedLogValues.filter((x) => x >= a && x <= b).map(pow); + } + const extent = d3.extent(filteredValues); + return extent[0] == null || extent[1] == null ? [] : extent; + } +} diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/README.md b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/README.md new file mode 100644 index 0000000000000000000000000000000000000000..3b5d4dcef639a86f7b6f3d1d96a4fe94d4d88306 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/README.md @@ -0,0 +1,35 @@ +# Benchmark for vz_line_chart2 + +To run the benchmark, do: + +- run `bazel run tensorboard/components/vz_line_chart2/microbenchmark:binary` +- open browser and go to localhost:6006/benchmark.html +- make sure the browser is in foreground as requestAnimationFrame can behave differently when tab is in background. +- do not interact with browser that can inject noises (resize will cause layout and compositing) + +To add a new benchmark, do: + +- create a file with suffix "\_spec.ts" for consistency +- call a `benchmark` method on './spec.js'. + +An example the benchmark run is (using consoleReporter): + +Hardware: +- MacBookPro13,2, i7 @ 3.3GHz +- macOS 10.15.4 +- Google Chrome 80.0.3987.149 + +| name | numIterations | avgTime | +| ------------------------------------------------------- | ------------- | -------------------------- | +| charts init | 10 | 65.9879999991972ms / run | +| charts init + 1k point draw | 10 | 66.03100000065751ms / run | +| redraw: one line of 1k draws | 100 | 96.12760000105482ms / run | +| redraw: one line of 100k draws | 10 | 854.3104999960633ms / run | +| redraw: alternative two 1k lines | 25 | 63.42060000053607ms / run | +| redraw: 500 lines of 1k points | 10 | 2203.0529999989085ms / run | +| make new chart: 10 lines of 1k points | 25 | 30.425399995874614ms / run | +| redraw 100 charts (1k points) | 10 | 1153.0329999979585ms / run | +| toggle run on 100 charts (1k points) | 25 | 6214.246399998665ms / run | +| smoothing change: 1k points | 25 | 62.69300000043586ms / run | +| smoothing change: 100k points | 25 | 3320.5062000011094ms / run | +| smoothing change: 100k points: large screen (1200x1000) | 10 | 4624.3224999983795ms / run | diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/async.ts b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/async.ts new file mode 100644 index 0000000000000000000000000000000000000000..3d324ea57aead978f6adf68dc28068a81dd48ad4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/async.ts @@ -0,0 +1,140 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview Overrides global async functions to support "wait" (or flush). + * + * It allows, when invoked `patchAsync`, user to wait for all `setTimeout` and + * `requestAnimationFrame` for an appropriate amount of time with the + * `flushAsync` method. + */ + +const realRaf = window.requestAnimationFrame; +const realCaf = window.cancelAnimationFrame; +const realSetTimeout = window.setTimeout; +const realClearTimeout = window.clearTimeout; +const realSetInterval = window.setInterval; + +interface Async { + promises: Map>; + reset: () => void; +} + +export function patchAsync(): Async { + const async = { + promises: new Map>(), + reset: () => { + window.setTimeout = realSetTimeout; + window.requestAnimationFrame = realRaf; + window.setInterval = realSetInterval; + window.cancelAnimationFrame = realCaf; + window.clearTimeout = realClearTimeout; + }, + }; + + const idToResolve = new Map void}>(); + + const anyWindow = window as any; + anyWindow.setInterval = () => { + throw new Error('Benchmark cannot run when there is an interval'); + }; + + anyWindow.setTimeout = (cb: any, time: number = 0, ...args: any[]) => { + const id = realSetTimeout( + () => { + cb(); + if (idToResolve.get(stringId)) { + idToResolve.get(stringId)!.resolve(); + } + async.promises.delete(stringId); + idToResolve.delete(stringId); + }, + time, + ...args + ); + const stringId = `to_${id}`; + if (!(time > 0)) { + async.promises.set( + stringId, + new Promise((resolve) => { + idToResolve.set(stringId, {resolve}); + }) + ); + } + return id; + }; + + anyWindow.clearTimeout = (id: number) => { + realClearTimeout(id); + const stringId = `to_${id}`; + if (idToResolve.get(stringId)) { + idToResolve.get(stringId)!.resolve(); + } + async.promises.delete(stringId); + idToResolve.delete(stringId); + }; + + anyWindow.requestAnimationFrame = (cb: any) => { + const id = realRaf(() => { + cb(); + if (idToResolve.get(stringId)) { + idToResolve.get(stringId)!.resolve(); + } + async.promises.delete(stringId); + idToResolve.delete(stringId); + }); + const stringId = `raf_${id}`; + async.promises.set( + stringId, + new Promise((resolve) => { + idToResolve.set(stringId, {resolve}); + }) + ); + return id; + }; + + anyWindow.cancelAnimationFrame = (id: number) => { + realCaf(id); + const stringId = `raf_${id}`; + if (idToResolve.get(stringId)) { + idToResolve.get(stringId)!.resolve(); + } + async.promises.delete(stringId); + idToResolve.delete(stringId); + }; + + return async; +} + +async function rafP() { + return new Promise((resolve) => { + realRaf(resolve); + }); +} + +export async function setTimeoutP(time: number) { + return new Promise((resolve) => { + realSetTimeout(resolve, time); + }); +} + +export async function flushAsync(async: Async) { + while (async.promises.size) { + await Promise.all([...async.promises.values()]); + } + + // Make sure layout, paint, and composite to happen by waiting an animation + // frame. + await rafP(); +} diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/main.html b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/main.html new file mode 100644 index 0000000000000000000000000000000000000000..2fd0eeca88c00662c5f1879f12dcbe7ab88db00a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/main.html @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/main.ts b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/main.ts new file mode 100644 index 0000000000000000000000000000000000000000..f8394804b4e1cb22081c63b6048015e3aceb0503 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/main.ts @@ -0,0 +1,23 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {getBenchmarks} from './spec.js'; +import {runner} from './runner.js'; +import {htmlTableReporter, consoleReporter} from './reporter.js'; + +(window as any).requestIdleCallback(async () => { + const results = await runner(getBenchmarks()); + consoleReporter(results); +}); diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/polymer_util.ts b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/polymer_util.ts new file mode 100644 index 0000000000000000000000000000000000000000..2be2dfdbac6d141ff1b03be6f2f4d1369fe603c5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/polymer_util.ts @@ -0,0 +1,23 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export async function polymerFlush() { + return new Promise((resolve) => { + (Polymer as any).flush(); + (Polymer as any).RenderStatus.afterNextRender(null, () => { + resolve(); + }); + }); +} diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/renders_spec.ts b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/renders_spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..f3359876b23806781c55da06b82e3f5f045e476b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/renders_spec.ts @@ -0,0 +1,389 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {benchmark, Size} from './spec.js'; +import {polymerFlush} from './polymer_util.js'; + +function createScalarPoint(index: number, scalarValue: number) { + return { + step: index, + wall_time: index * 1000, + scalar: scalarValue, + }; +} + +const DATA_POINTS = { + sine1k: [...new Array(1000)].map((_, index) => + createScalarPoint(index, Math.sin(index / (2 * Math.PI))) + ), + cosine1k: [...new Array(1000)].map((_, index) => + createScalarPoint(index, Math.cos(index / (2 * Math.PI))) + ), + cosine100k: [...new Array(100000)].map((_, index) => + createScalarPoint(index, Math.cos(index / (2 * Math.PI))) + ), +}; + +const FIVE_HUNDRED_1K_DATA_POINTS = [...new Array(500)].map((_, index) => { + const paddedIndex = (String(index) as any).padStart(5, '0'); + const name = `p${paddedIndex};`; + return { + name, + data: [...new Array(1000)].map((_, index) => + createScalarPoint( + index, + Math.sin(index / (2 * Math.PI)) + Math.random() - 0.5 + ) + ), + }; +}); + +benchmark({ + name: 'charts init', + + size: Size.LARGE, + + async run(context) { + context.chart = document.createElement('vz-line-chart2') as any; + context.chart.style.height = '100%'; + context.container.appendChild(context.chart); + + context.chart.setVisibleSeries([]); + context.chart.commitChanges(); + + await polymerFlush(); + }, + + afterEach(context) { + context.container.removeChild(context.chart); + }, +}); + +benchmark({ + name: 'charts init + 1k point draw', + + size: Size.LARGE, + + async run(context) { + context.chart = document.createElement('vz-line-chart2') as any; + context.chart.style.height = '100%'; + context.container.appendChild(context.chart); + + context.chart.setSeriesData('sine', DATA_POINTS.sine1k); + context.chart.setVisibleSeries(['sine']); + context.chart.commitChanges(); + + await polymerFlush(); + }, + + afterEach(context) { + context.container.removeChild(context.chart); + }, +}); + +benchmark({ + name: 'redraw: one line of 1k draws', + + size: Size.SMALL, + + async before(context) { + context.chart = document.createElement('vz-line-chart2') as any; + context.chart.style.height = '100%'; + context.container.appendChild(context.chart); + + context.chart.setSeriesData('sine', DATA_POINTS.sine1k); + context.chart.setVisibleSeries(['sine']); + context.chart.commitChanges(); + + await polymerFlush(); + }, + + run(context) { + context.chart.redraw(); + }, +}); + +benchmark({ + name: 'redraw: one line of 100k draws', + + size: Size.LARGE, + + async before(context) { + context.chart = document.createElement('vz-line-chart2') as any; + context.chart.style.height = '100%'; + context.container.appendChild(context.chart); + + context.chart.setSeriesData('cosine', DATA_POINTS.cosine100k); + context.chart.setVisibleSeries(['cosine']); + context.chart.commitChanges(); + + await polymerFlush(); + }, + + run(context) { + context.chart.redraw(); + }, +}); + +benchmark({ + name: 'redraw: alternative two 1k lines', + + size: Size.MEDIUM, + + async before(context) { + context.chart = document.createElement('vz-line-chart2') as any; + context.chart.style.height = '100%'; + context.container.appendChild(context.chart); + + context.chart.setSeriesData('sine', DATA_POINTS.sine1k); + context.chart.setSeriesData('cosine', DATA_POINTS.cosine1k); + context.chart.setVisibleSeries(['cosine']); + context.chart.commitChanges(); + context.even = true; + + await polymerFlush(); + }, + + run(context) { + if (context.even) { + context.chart.setVisibleSeries(['sine']); + } else { + context.chart.setVisibleSeries(['cosine']); + } + context.even = !context.even; + }, +}); + +benchmark({ + name: 'redraw: 500 lines of 1k points', + + size: Size.LARGE, + + async before(context) { + context.chart = document.createElement('vz-line-chart2') as any; + context.chart.style.height = '100%'; + context.container.appendChild(context.chart); + + FIVE_HUNDRED_1K_DATA_POINTS.forEach(({data, name}) => { + context.chart.setSeriesData(name, data); + }); + context.chart.setVisibleSeries( + FIVE_HUNDRED_1K_DATA_POINTS.map(({name}) => name) + ); + context.chart.commitChanges(); + + await polymerFlush(); + }, + + run(context) { + context.chart.redraw(); + }, +}); + +benchmark({ + name: 'make new chart: 10 lines of 1k points', + + size: Size.MEDIUM, + + async before(context) { + context.chart = document.createElement('vz-line-chart2') as any; + context.chart.style.height = '100%'; + context.container.appendChild(context.chart); + + const datapoints = FIVE_HUNDRED_1K_DATA_POINTS.slice(0, 10); + datapoints.forEach(({data, name}) => { + context.chart.setSeriesData(name, data); + }); + context.chart.setVisibleSeries(datapoints.map(({name}) => name)); + context.chart.commitChanges(); + + await polymerFlush(); + context.index = 0; + }, + + run(context) { + if (context.index % 4 === 0) { + context.chart.xType = 'step'; + } else if (context.index % 4 === 1) { + context.chart.xType = 'relative'; + } else if (context.index % 4 === 2) { + context.chart.xType = 'wall_time'; + } else { + context.chart.xType = ''; + } + + context.index++; + }, +}); + +benchmark({ + name: 'redraw 100 charts (1k points)', + + size: Size.LARGE, + + async before(context) { + context.charts = FIVE_HUNDRED_1K_DATA_POINTS.slice(0, 100).map( + ({data, name}) => { + const chart = document.createElement('vz-line-chart2') as any; + chart.style.height = '50px'; + context.container.appendChild(chart); + chart.setSeriesData(name, data); + chart.setVisibleSeries([name]); + chart.commitChanges(); + return chart; + } + ); + + await polymerFlush(); + }, + + run(context) { + context.charts.forEach((chart: any) => { + chart.redraw(); + }); + }, +}); + +benchmark({ + name: 'toggle run on 100 charts (1k points)', + + size: Size.MEDIUM, + + async before(context) { + context.names = context.charts = FIVE_HUNDRED_1K_DATA_POINTS.slice( + 0, + 100 + ).map(({name}) => name); + context.charts = FIVE_HUNDRED_1K_DATA_POINTS.slice(0, 100).map( + ({data, name}) => { + const chart = document.createElement('vz-line-chart2') as any; + chart.style.height = '50px'; + context.container.appendChild(chart); + chart.setSeriesData(name, data); + chart.commitChanges(); + return chart; + } + ); + + await polymerFlush(); + }, + + async run(context) { + await context.flushAsync(); + + context.charts.forEach((chart: any) => { + chart.setVisibleSeries([]); + }); + context.chart.commitChanges(); + + await context.flushAsync(); + + context.charts.forEach((chart: any, index: number) => { + chart.setVisibleSeries([context.names[index]]); + }); + context.chart.commitChanges(); + + await context.flushAsync(); + }, +}); + +benchmark({ + name: 'smoothing change: 1k points', + + size: Size.MEDIUM, + + async before(context) { + context.chart = document.createElement('vz-line-chart2') as any; + context.chart.style.height = '100%'; + context.container.appendChild(context.chart); + + context.chart.setSeriesData('cosine', DATA_POINTS.cosine1k); + context.chart.setVisibleSeries(['cosine']); + context.chart.commitChanges(); + context.chart.smoothingEnabled = true; + context.even = true; + + await polymerFlush(); + }, + + async run(context) { + if (context.even) { + context.chart.smoothingWeight = 0.8; + } else { + context.chart.smoothingWeight = 0.2; + } + context.even = !context.even; + }, +}); + +benchmark({ + name: 'smoothing change: 100k points', + + size: Size.MEDIUM, + + async before(context) { + context.chart = document.createElement('vz-line-chart2') as any; + context.chart.style.height = '100%'; + context.container.appendChild(context.chart); + + context.chart.setSeriesData('cosine', DATA_POINTS.cosine100k); + context.chart.setVisibleSeries(['cosine']); + context.chart.commitChanges(); + context.chart.smoothingEnabled = true; + context.even = true; + + await polymerFlush(); + }, + + async run(context) { + if (context.even) { + context.chart.smoothingWeight = 0.8; + } else { + context.chart.smoothingWeight = 0.2; + } + context.even = !context.even; + }, +}); + +benchmark({ + name: 'smoothing change: 100k points: large screen (1200x1000)', + + size: Size.LARGE, + + async before(context) { + context.chart = document.createElement('vz-line-chart2') as any; + context.chart.style.height = '100%'; + context.container.style.width = '1200px'; + context.container.style.height = '1000px'; + context.container.appendChild(context.chart); + + context.chart.setSeriesData('cosine', DATA_POINTS.cosine100k); + context.chart.setVisibleSeries(['cosine']); + context.chart.commitChanges(); + context.chart.smoothingEnabled = true; + context.even = true; + + await polymerFlush(); + }, + + async run(context) { + if (context.even) { + context.chart.smoothingWeight = 0.8; + } else { + context.chart.smoothingWeight = 0.2; + } + context.even = !context.even; + }, +}); diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/reporter.ts b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/reporter.ts new file mode 100644 index 0000000000000000000000000000000000000000..e1b23bdb234c4f6c940cc07576f518e792b043f8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/reporter.ts @@ -0,0 +1,174 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {Result} from './types'; + +export function htmlTableReporter(results: Result[]) { + const displayResults = results + .map( + ({ + totalTimeInMs, + numIterations, + timePerIterationInMs, + timeInGcInMs, + benchmark, + }) => { + if (numIterations <= 0) { + throw new RangeError( + `numIterations has to be positive value. Got ${numIterations}` + ); + } + const avgTimeInMs = totalTimeInMs / numIterations; + const timeVariance = + timePerIterationInMs + .map((time) => { + const diff = time - avgTimeInMs; + return diff * diff; + }) + .reduce((sigma, diff) => { + return sigma + diff; + }, 0) / numIterations; + const avgTimeInGcInMs = timeInGcInMs + ? timeInGcInMs.reduce((a, b) => a + b, 0) / numIterations + : null; + + return { + name: benchmark.name, + min: Math.min(...timePerIterationInMs), + max: Math.max(...timePerIterationInMs), + numIterations, + timeVariance, + avgTimeInMs, + avgTimeInGcInMs, + }; + } + ) + .map( + ({ + name, + min, + max, + numIterations, + timeVariance, + avgTimeInMs, + avgTimeInGcInMs, + }) => { + return { + name, + numIterations, + avgTimeInMs: `${avgTimeInMs.toFixed(3)}ms / run`, + minTimeInMs: `${min.toFixed(3)}ms`, + maxTimeInMs: `${max.toFixed(3)}ms`, + stdDeviationTimeInMs: Math.sqrt(timeVariance).toFixed(6), + avgTimeInGcInMs: avgTimeInGcInMs + ? `${avgTimeInGcInMs.toFixed(3)}ms` + : 'N/A', + }; + } + ); + + const reporter = document.createElement('table'); + Object.assign(reporter.style, { + borderSpacing: '10px', + borderCollapse: 'separate', + }); + + function createTHead() { + const header = document.createElement('thead'); + const headerRow = document.createElement('tr'); + const name = document.createElement('td'); + name.innerText = 'Name'; + const iterations = document.createElement('td'); + iterations.innerText = 'Iterations'; + const avgTime = document.createElement('td'); + avgTime.innerText = 'Avg Time'; + const min = document.createElement('td'); + min.innerText = 'Min'; + const max = document.createElement('td'); + max.innerText = 'Max'; + const stdDeviation = document.createElement('td'); + stdDeviation.innerText = 'Std Deviation'; + const gc = document.createElement('td'); + gc.innerText = 'Avg GC Time'; + + (headerRow as any).append( + name, + iterations, + avgTime, + min, + max, + stdDeviation, + gc + ); + header.appendChild(headerRow); + return header; + } + + // CREATE BODY + const reporterContent = displayResults.map( + ({ + avgTimeInMs, + name, + numIterations, + minTimeInMs, + maxTimeInMs, + stdDeviationTimeInMs, + avgTimeInGcInMs, + }) => { + const row = document.createElement('tr'); + const nameEl = document.createElement('td'); + nameEl.innerText = name; + const iterationsEl = document.createElement('td'); + iterationsEl.innerText = String(numIterations); + const avgTimeEl = document.createElement('td'); + avgTimeEl.innerText = avgTimeInMs; + const minEl = document.createElement('td'); + minEl.innerText = minTimeInMs; + const maxEl = document.createElement('td'); + maxEl.innerText = maxTimeInMs; + const stdDeviationEl = document.createElement('td'); + stdDeviationEl.innerText = String(stdDeviationTimeInMs); + const gc = document.createElement('td'); + gc.innerText = avgTimeInGcInMs; + (row as any).append( + nameEl, + iterationsEl, + avgTimeEl, + minEl, + maxEl, + stdDeviationEl, + gc + ); + return row; + } + ); + + (reporter as any).append(createTHead(), ...reporterContent); + (document.body as any).prepend(reporter); +} + +export function consoleReporter(results: Result[]) { + const displayResults = results.map( + ({benchmark, totalTimeInMs, numIterations}) => { + return { + name: benchmark.name, + numIterations, + avgTime: `${totalTimeInMs / numIterations}ms / run`, + }; + } + ); + + console.table(displayResults); +} diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/runner.ts b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/runner.ts new file mode 100644 index 0000000000000000000000000000000000000000..873d582efa93eed3080ff8d9165c5c3829dc92ad --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/runner.ts @@ -0,0 +1,123 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {patchAsync, flushAsync, setTimeoutP} from './async.js'; +import {Benchmark, Size, Result} from './types.js'; + +export async function runner(benchmarks: Benchmark[]): Promise { + const results: Result[] = []; + + for (const benchmark of benchmarks) { + const status = document.createElement('div'); + Object.assign(status.style, { + background: '#000a', + color: '#fff', + contain: 'content', + left: 0, + padding: '5px', + position: 'fixed', + top: 0, + }); + status.innerText = `${benchmark.name}: Bootstraping...`; + + const container = document.createElement('div'); + Object.assign(container.style, { + width: '600px', + height: '400px', + willChange: 'transform', + contain: 'content', + }); + + (document.body as any).append(container, status); + + const async = patchAsync(); + + const context = {container, flushAsync: flushAsync.bind(null, async)}; + status.innerText = `${benchmark.name}: before`; + if (benchmark.before) await benchmark.before(context); + await flushAsync(async); + + const numIterations = getNumIterations(benchmark.size); + + let totalTimeInMs = 0; + const timePerIterationInMs: number[] = []; + const timeInGcInMs: number[] | null = (window as any).gc ? [] : null; + + for (let iter = 0; iter < numIterations + 1; iter++) { + status.innerText = `${benchmark.name}: ${iter} of ${numIterations}`; + + const timeStart = performance.now(); + console.time(`iter: ${iter}`); + + await benchmark.run(context); + await flushAsync(async); + + const timeEnd = performance.now(); + console.timeEnd(`iter: ${iter}`); + + status.innerText = + `${benchmark.name}: ${iter} of ${numIterations}. ` + + 'Waiting between iterations.'; + + // Launch Chrome with --js-flags='--expose_gc' to enable gc. + if ((window as any).gc && timeInGcInMs) { + const gcTimeStart = performance.now(); + (window as any).gc(); + timeInGcInMs.push(performance.now() - gcTimeStart); + await setTimeoutP(50); + } else { + await setTimeoutP(500); + } + + // Ignore the first call since it tends to be noisy. + if (iter !== 0) { + totalTimeInMs += timeEnd - timeStart; + timePerIterationInMs.push(timeEnd - timeStart); + } + + if (benchmark.afterEach) await benchmark.afterEach(context); + await flushAsync(async); + } + + results.push({ + totalTimeInMs, + timePerIterationInMs, + timeInGcInMs, + numIterations, + benchmark, + }); + + status.innerText = `${benchmark.name}: after`; + if (benchmark.after) await benchmark.after(context); + await flushAsync(async); + + async.reset(); + document.body.removeChild(container); + document.body.removeChild(status); + } + + return results; +} + +function getNumIterations(size: Size) { + switch (size) { + case Size.SMALL: + return 100; + case Size.MEDIUM: + return 25; + case Size.LARGE: + return 10; + } +} diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/spec.ts b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..3e3d8147b45cd638d0f3ba7c30734a48d66b4211 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/spec.ts @@ -0,0 +1,28 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {Benchmark} from './types.js'; + +export {Size} from './types.js'; + +const benchmarks: Benchmark[] = []; + +export function benchmark(spec: Benchmark) { + benchmarks.push(spec); +} + +export function getBenchmarks() { + return benchmarks; +} diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/types.ts b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..fd14591db2ffcf2eb585e7fcbb55b02752f8e638 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/microbenchmark/types.ts @@ -0,0 +1,58 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export interface BenchmarkContext { + container: HTMLElement; + flushAsync: () => Promise; + [key: string]: any; +} + +export interface Result { + totalTimeInMs: number; + timePerIterationInMs: number[]; + timeInGcInMs: number[] | null; + numIterations: number; + benchmark: Benchmark; +} + +export interface Benchmark { + name: string; + + // Pre-configure number of execution of the runs. + size: Size; + + // Has the same semantic meaning as jasmine's `before`. + before?: (context: BenchmarkContext) => void | Promise; + + // The part that runs the test. May be executed more than once. + run: (context: BenchmarkContext) => void | Promise; + + // Has the same semantic meaning as jasmine's `after`. + after?: (context: BenchmarkContext) => void | Promise; + + // Has the same semantic meaning as jasmine's `afterEach`. + afterEach?: (context: BenchmarkContext) => void | Promise; +} + +/** + * Size of a test. Size determines the iteration of the test. + */ +export enum Size { + SMALL, + MEDIUM, + LARGE, +} + +export type Reporter = (results: Result[]) => void; diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/panZoomDragLayer.html.ts b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/panZoomDragLayer.html.ts new file mode 100644 index 0000000000000000000000000000000000000000..3269b2c467f989c2c48d121c3f93ac101553783b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/panZoomDragLayer.html.ts @@ -0,0 +1,53 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {registerStyleDomModule} from '../polymer/register_style_dom_module'; + +registerStyleDomModule({ + moduleName: 'vz-pan-zoom-style', + styleContent: ` + .help { + align-items: center; + animation-delay: 1s; + animation-duration: 1s; + animation-name: fade-out; + background: rgba(30, 30, 30, 0.6); + bottom: 0; + color: #fff; + display: flex; + justify-content: center; + left: 0; + opacity: 1; + padding: 20px; + pointer-events: none; + position: absolute; + right: 0; + top: 0; + } + + .help > span { + white-space: normal; + } + + @keyframes fade-out { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + } + } + `, +}); diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/panZoomDragLayer.ts b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/panZoomDragLayer.ts new file mode 100644 index 0000000000000000000000000000000000000000..051777691324728cd2de0b626b855ff92fc4c79b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/panZoomDragLayer.ts @@ -0,0 +1,147 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as Plottable from 'plottable'; + +import {DragZoomLayer} from './dragZoomInteraction'; + +enum State { + NONE, + DRAG_ZOOMING, + PANNING, +} +export type PanCallback = () => void; +export class PanZoomDragLayer extends Plottable.Components.Group { + private panZoom: Plottable.Interactions.PanZoom; + private dragZoomLayer: DragZoomLayer; + private state: State = State.NONE; + private panStartCallback = new Plottable.Utils.CallbackSet(); + private panEndCallback = new Plottable.Utils.CallbackSet(); + private _mouseDispatcher: Plottable.Dispatchers.Mouse; + /** + * A Plottable component/layer with a complex interaction for the line chart. + * When not pressing alt-key, it behaves like DragZoomLayer -- dragging a + * region zooms the area under the gray box and double clicking resets the + * zoom. When pressing alt-key, it lets user pan around while having mousedown + * on the chart and let user zoom-in/out of cursor when scroll with alt key + * pressed. + */ + constructor( + xScale: Plottable.QuantitativeScale< + | number + | { + valueOf(): number; + } + >, + yScale: Plottable.QuantitativeScale< + | number + | { + valueOf(): number; + } + >, + unzoomMethod: Function + ) { + super(); + this.panZoom = new Plottable.Interactions.PanZoom(xScale, yScale); + this.panZoom.dragInteraction().mouseFilter((event: MouseEvent) => { + return PanZoomDragLayer.isPanKey(event) && event.button === 0; + }); + this.panZoom.wheelFilter(this.canScrollZoom); + this.dragZoomLayer = new DragZoomLayer(xScale, yScale, unzoomMethod); + this.dragZoomLayer.dragInteraction().mouseFilter((event: MouseEvent) => { + return !PanZoomDragLayer.isPanKey(event) && event.button === 0; + }); + this.append(this.dragZoomLayer); + const onWheel = this.onWheel.bind(this); + this.onAnchor(() => { + this._mouseDispatcher = Plottable.Dispatchers.Mouse.getDispatcher(this); + this._mouseDispatcher.onWheel(onWheel); + this.panZoom.attachTo(this); + }); + this.onDetach(() => { + this.panZoom.detachFrom(this); + // onDetach can be invoked before onAnchor + if (this._mouseDispatcher) { + this._mouseDispatcher.offWheel(onWheel); + this._mouseDispatcher = null; + } + }); + this.panZoom.dragInteraction().onDragStart(() => { + if (this.state == State.NONE) this.setState(State.PANNING); + }); + this.panZoom.dragInteraction().onDragEnd(() => { + if (this.state == State.PANNING) this.setState(State.NONE); + }); + this.dragZoomLayer.dragInteraction().onDragStart(() => { + if (this.state == State.NONE) this.setState(State.DRAG_ZOOMING); + }); + this.dragZoomLayer.dragInteraction().onDragEnd(() => { + if (this.state == State.DRAG_ZOOMING) this.setState(State.NONE); + }); + } + private onWheel(_, event: WheelEvent) { + if (this.canScrollZoom(event)) return; + const helpContainer = this.element(); + if (!helpContainer.select('.help').empty()) return; + const help = helpContainer.append('div').classed('help', true); + help.append('span').text('Alt + Scroll to Zoom'); + // Please see vz-pan-zoom-style for the definition of the animation. + help.on('animationend', () => void help.remove()); + } + static isPanKey(event: MouseEvent): boolean { + return Boolean(event.altKey) || Boolean(event.shiftKey); + } + private canScrollZoom(event: WheelEvent) { + return event.altKey; + } + setState(nextState: State): void { + if (this.state == nextState) return; + const prevState = this.state; + this.state = nextState; + this.root().removeClass(this.stateClassName(prevState)); + this.root().addClass(this.stateClassName(nextState)); + if (prevState == State.PANNING) { + this.panEndCallback.callCallbacks(); + } + if (nextState == State.PANNING) { + this.panStartCallback.callCallbacks(); + } + } + stateClassName(state: State): string { + switch (state) { + case State.PANNING: + return 'panning'; + case State.DRAG_ZOOMING: + return 'drag-zooming'; + case State.NONE: + default: + return ''; + } + } + onPanStart(cb: PanCallback) { + this.panStartCallback.add(cb); + } + onPanEnd(cb: PanCallback) { + this.panEndCallback.add(cb); + } + onScrollZoom(cb) { + this.panZoom.onZoomEnd(cb); + } + onDragZoomStart(cb) { + this.dragZoomLayer.interactionStart(cb); + } + onDragZoomEnd(cb) { + this.dragZoomLayer.interactionEnd(cb); + } +} diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/test/log-scale-test.ts b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/test/log-scale-test.ts new file mode 100644 index 0000000000000000000000000000000000000000..88ae4513f22e5f6cbe87b36a4b67c07a0b2cc5b3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/test/log-scale-test.ts @@ -0,0 +1,152 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the 'License'); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an 'AS IS' BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +namespace vz_line_chart2 { + const {expect} = chai; + + describe('LogScale', () => { + beforeEach(function () { + this.scale = new LogScale(); + this.scale.range([0, 1]); + this.scale.setValueProviderForDomain(() => [1, 1000]); + }); + + describe('manual domain', () => { + beforeEach(function () { + this.scale.domain([1, 1000]); + }); + + it('returns scales input correctly to an output between 0-1', function () { + expect(this.scale.scale(1)).to.equal(0); + expect(this.scale.scale(1000)).to.equal(1); + }); + + it( + 'returns value outside of range when given input smaller/larger ' + + 'than the domain', + function () { + expect(this.scale.scale(1e-3)).to.equal(-1); + expect(this.scale.scale(1e6)).to.equal(2); + expect(this.scale.scale(1e9)).to.equal(3); + } + ); + + it('returns NaN for non-positive values', function () { + expect(this.scale.scale(0)).to.be.NaN; + expect(this.scale.scale(-1)).to.be.NaN; + expect(this.scale.scale(-0.00001)).to.be.NaN; + expect(this.scale.scale(-Infinity)).to.be.NaN; + expect(this.scale.scale(NaN)).to.be.NaN; + }); + + it('ignores padProportion', function () { + this.scale.padProportion(0.3); + expect(this.scale.scale(1)).to.equal(0); + expect(this.scale.scale(1000)).to.equal(1); + + this.scale.padProportion(1); + expect(this.scale.scale(1)).to.equal(0); + expect(this.scale.scale(1000)).to.equal(1); + }); + }); + + describe('auto domain', () => { + beforeEach(function () { + this.scale.autoDomain(); + }); + + describe('padding-less', () => { + beforeEach(function () { + this.scale.padProportion(0); + }); + + it('returns scales input correctly to an output between 0-1', function () { + expect(this.scale.scale(1)).to.equal(0); + expect(this.scale.scale(1000)).to.equal(1); + }); + + it( + 'returns value outside of range when given input smaller/larger ' + + 'than the domain', + function () { + expect(this.scale.scale(1e-3)).to.equal(-1); + expect(this.scale.scale(1e6)).to.equal(2); + expect(this.scale.scale(1e9)).to.equal(3); + } + ); + + it('returns NaN for non-positive values', function () { + expect(this.scale.scale(0)).to.be.NaN; + expect(this.scale.scale(-1)).to.be.NaN; + expect(this.scale.scale(-0.00001)).to.be.NaN; + expect(this.scale.scale(-Infinity)).to.be.NaN; + expect(this.scale.scale(NaN)).to.be.NaN; + }); + }); + + describe('padding-full', () => { + beforeEach(function () { + // Spread is 3 = log_10(1000) - log_10(1) and since we want 33% of the + // spread to be the padding, pad = 3 * .33333 ~ 1, the domain should be + // from ~0.1 to ~1e4 + this.scale.padProportion(0.33333); + }); + + it('pads domain', function () { + expect(this.scale.invert(0)).to.be.closeTo(0.1, 0.01); + expect(this.scale.invert(1)).to.be.closeTo(1e4, 10); + }); + + it('puts some padding even if there is no spread', function () { + this.scale.setValueProviderForDomain(() => [1, 1]); + this.scale.autoDomain(); + expect(this.scale.invert(0)).to.equal(0.1); + expect(this.scale.invert(1)).to.equal(10); + + this.scale.setValueProviderForDomain(() => [1000, 1000]); + this.scale.autoDomain(); + expect(this.scale.invert(0)).to.equal(100); + expect(this.scale.invert(1)).to.equal(10000); + + this.scale.setValueProviderForDomain(() => [0.01, 0.01]); + this.scale.autoDomain(); + expect(this.scale.invert(0)).to.equal(0.001); + expect(this.scale.invert(1)).to.equal(0.1); + + this.scale.setValueProviderForDomain(() => [ + MIN_POSITIVE_VALUE, + MIN_POSITIVE_VALUE, + ]); + this.scale.autoDomain(); + expect(this.scale.invert(0)).to.be.equal(5e-324); + expect(this.scale.invert(1)).to.be.equal(5e-323); + }); + + it('puts padding even if values are very even number', function () { + // domain of [1, 1000] result in very clean mapping between domain and + // the range -- i.e., 1 -> 0 and 1000 to 1. If naively use ceil or floor + // to compute a "nice domain" for [1, 1000], it can lead to no padding + // causing some visual issue. Make sure there are padding present even + // with these very even number. + expect(this.scale.invert(0)) + .to.be.closeTo(0.1, 0.01) + .and.not.equal(1); + expect(this.scale.invert(1)) + .to.be.closeTo(1e4, 10) + .and.not.equal(1000); + }); + }); + }); + }); +} // namespace vz_line_chart2 diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/test/tests.html b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/test/tests.html new file mode 100644 index 0000000000000000000000000000000000000000..cb07a5804cbb5730183f08d293e0d1f83a8a83d7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/test/tests.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/tf-scale.ts b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/tf-scale.ts new file mode 100644 index 0000000000000000000000000000000000000000..0c6456414a8e508b6c03186182ea20c3856f4f20 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/tf-scale.ts @@ -0,0 +1,77 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as Plottable from 'plottable'; + +export type ValueProviderForDomain = () => number[]; +/** + * Plottable.Scale is a class that wraps the d3.scale that adds many utility + * methods that work with the Plottable's `dataset` concept. + * + * Plottable.Scale provides some cool feature where a scale is bound to set of + * plots (i.e., line, scatter, smooth line chart, etc...) and, when a dataset + * of a plot changes, updates the domain based on minimum and maximum values of + * each charts. In some Plottable functions, a word `extent` is used to refer to + * a possible value for a domain and it often is the minimum and maximum value + * of a dataset of a plot. + * + * Above binding is quite useful in most cases but is rather harmful for the + * line-chart. The line-chart draws multiple plots -- a line plot for raw data, + * another line plot for smoothed data, a scatter plot for tooltip, and etc... + * These plots all derive data from the raw data series, so it is rather odd to + * compute `extent` for each plot separately. Moreover, we want to set the + * domain with respect to a solid colored line (when using smoothing, it is the + * smoothed line plot) regardless of the extent of the raw data. Hence, we need + * an ability to disregard dataset of certain plots when computed domain but + * such capability is not opened from the Plottable. + * + * To mitigate the issue, TfScale overrides few methods and receives data from + * the LineChart instead of a respective plots the chart draws. + */ +export interface ITfScale extends Plottable.QuantitativeScale { + setValueProviderForDomain(provider: ValueProviderForDomain): this; + ignoreOutlier(): boolean; + ignoreOutlier(ignore: boolean): this; +} +export abstract class TfScale + extends Plottable.QuantitativeScale + implements ITfScale { + protected _ignoreOutlier: boolean = false; + protected _valueProviderForDomain: ValueProviderForDomain; + public setValueProviderForDomain(provider: ValueProviderForDomain): this { + this._valueProviderForDomain = provider; + return this; + } + public ignoreOutlier(): boolean; + public ignoreOutlier(ignore: boolean): this; + public ignoreOutlier(ignore?: boolean): any { + if (typeof ignore == 'boolean') { + this._ignoreOutlier = ignore; + return this; + } + return this._ignoreOutlier; + } + /** + * Returns possible `extent`s for a dataset. Note that a dataset can contain + * multiple series. Unlike the method name suggests, it uses values from each + * series to return `extent`s. + * @override + */ + protected _getAllIncludedValues(ignoreAttachState = false): number[] { + const values = this._valueProviderForDomain + ? this._valueProviderForDomain() + : []; + return this.extentOfValues(values); + } +} diff --git a/saved_models/tensorboard/tensorboard/components/vz_line_chart2/vz-line-chart2.ts b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/vz-line-chart2.ts new file mode 100644 index 0000000000000000000000000000000000000000..de72c5de6b5f8b17b8add28b34b117334cecd197 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_line_chart2/vz-line-chart2.ts @@ -0,0 +1,617 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {PolymerElement, html} from '@polymer/polymer'; +import {LegacyElementMixin} from '../polymer/legacy_element_mixin'; +import {customElement, observe, property} from '@polymer/decorators'; +import * as _ from 'lodash'; +import * as d3 from 'd3'; +import * as Plottable from 'plottable'; +import '../polymer/plottable-style'; + +import {LineChart, LineChartStatus} from './line-chart'; +import {LineChartExporter} from './line-chart-exporter'; +import {PanZoomDragLayer} from './panZoomDragLayer'; +// imports the style definition. +import './panZoomDragLayer.html'; + +import { + getXComponents, + multiscaleFormatter, + Point, + relativeAccessor, + relativeFormatter, + stepFormatter, + stepX, + SymbolFn, + timeFormatter, + TooltipColumn, + XComponents, + XType, + Y_TOOLTIP_FORMATTER_PRECISION, +} from '../vz_chart_helpers/vz-chart-helpers'; +import {TooltipPosition} from '../vz_chart_helpers/vz-chart-tooltip'; +import {YScaleType, FillArea} from './line-chart'; + +const valueFormatter = multiscaleFormatter(Y_TOOLTIP_FORMATTER_PRECISION); + +const formatValueOrNaN = (x) => (isNaN(x) ? 'NaN' : valueFormatter(x)); + +export const DEFAULT_TOOLTIP_COLUMNS = [ + { + title: 'Name', + evaluate: (d: Point) => d.dataset.metadata().name, + }, + { + title: 'Smoothed', + evaluate(d: Point, statusObject: LineChartStatus) { + const {smoothingEnabled} = statusObject; + return formatValueOrNaN( + smoothingEnabled ? d.datum.smoothed : d.datum.scalar + ); + }, + }, + { + title: 'Value', + evaluate: (d: Point) => formatValueOrNaN(d.datum.scalar), + }, + { + title: 'Step', + evaluate: (d: Point) => stepFormatter(d.datum.step), + }, + { + title: 'Time', + evaluate: (d: Point) => timeFormatter(d.datum.wall_time), + }, + { + title: 'Relative', + evaluate: (d: Point) => + relativeFormatter(relativeAccessor(d.datum, -1, d.dataset)), + }, +]; + +@customElement('vz-line-chart2') +class VzLineChart2 extends LegacyElementMixin( + PolymerElement +) { + static readonly template = html` +
    + + + + + `; + + /** + * Scale that maps series names to colors. The default colors are from + * d3.schemeCategory10. Use this property to replace the default line + * colors with colors of your own choice. + */ + @property({type: Object}) + colorScale: Plottable.Scales.Color = new Plottable.Scales.Color().range( + d3.schemeCategory10.slice(0) + ); + + /** + * A function that takes a data series string and returns a + * Plottable.SymbolFactory to use for rendering that series. This property + * implements the vz_chart_helpers.SymbolFn interface. + */ + @property({type: Object}) + symbolFunction: SymbolFn; + + /** + * Whether smoothing is enabled or not. If true, smoothed lines will be + * plotted in the chart while the unsmoothed lines will be ghosted in + * the background. + */ + @property({ + type: Boolean, + notify: true, + }) + smoothingEnabled: boolean = false; + + /** + * Weight (between 0.0 and 1.0) of the smoothing. A value of 0.0 + * means very little smoothing, possibly no smoothing at all. A + * value of 1.0 means a whole lot of smoothing, possibly so much as + * to make the whole plot appear as a constant function. + * + * Has no effect when `smoothingEnabled` is `false`. + */ + @property({type: Number}) + smoothingWeight: number = 0.6; + + /** + * This is a helper field for automatically generating commonly used + * functions for xComponentsCreationMethod. Valid values are what can + * be processed by vz_chart_helpers.getXComponents() and include + * "step", "wall_time", and "relative". + */ + @property({type: String}) + xType: XType | null = null; + + /** + * We accept a function for creating an XComponents object instead of such + * an object itself because the Axis must be made right when we make the + * LineChart object, lest we use a previously destroyed Axis. See the async + * logic below that uses this property. + * + * Note that this function returns a function because polymer calls the + * outer function to compute the value. We actually want the value of this + * property to be the inner function. + */ + @property({type: Object}) + xComponentsCreationMethod: (() => XComponents) | null = null; + + /** + * A formatter for values along the X-axis. Optional. Defaults to a + * reasonable formatter. + */ + @property({type: Object}) + xAxisFormatter: (d: number) => string; + + /** + * A method that implements the Plottable.IAccessor interface. Used + * for accessing the y value from a data point. + * + * Note that this function returns a function because polymer calls the + * outer function to compute the value. We actually want the value of this + * property to be the inner function. + */ + @property({type: Object}) + yValueAccessor: (d: any) => string = (d) => d.scalar; + + /** + * An array of ChartHelper.TooltipColumn objects. Used to populate the table + * within the tooltip. The table contains 1 row per run. + * + * Note that this function returns a function because polymer calls the + * outer function to compute the value. We actually want the value of this + * property to be the inner function. + */ + @property({type: Array}) + tooltipColumns: TooltipColumn[] = DEFAULT_TOOLTIP_COLUMNS; + + /** + * An optional FillArea object. If provided, the chart will + * visualize fill area alongside the primary line for each series. If set, + * consider setting ignoreYOutliers to false. Otherwise, outlier + * calculations may deem some margins to be outliers, and some portions of + * the fill area may not display. + */ + @property({type: Object}) + fillArea: FillArea; + + /** + * An optional array of 2 numbers for the min and max of the default range + * of the Y axis. If not provided, a reasonable range will be generated. + * This property is a list instead of 2 individual properties to emphasize + * that both the min and the max must be specified (or neither at all). + */ + @property({type: Array}) + defaultXRange: unknown[]; + + /** + * An optional array of 2 numbers for the min and max of the default range + * of the Y axis. If not provided, a reasonable range will be generated. + * This property is a list instead of 2 individual properties to emphasize + * that both the min and the max must be specified (or neither at all). + */ + @property({type: Array}) + defaultYRange: unknown[]; + + /** + * The scale for the y-axis. Allows: + * - "linear" - linear scale (Plottable.Scales.Linear) + * - "log" - modified-log scale (Plottable.Scales.ModifiedLog) + */ + @property({type: String}) + yScaleType: YScaleType = YScaleType.LINEAR; + + /** + * Whether to ignore outlier data when computing the yScale domain. + */ + @property({type: Boolean}) + ignoreYOutliers: boolean = false; + + /** + * Change how the tooltip is sorted. Allows: + * - "default" - Sort the tooltip by input order. + * - "ascending" - Sort the tooltip by ascending value. + * - "descending" - Sort the tooltip by descending value. + * - "nearest" - Sort the tooltip by closest to cursor. + */ + @property({type: String}) + tooltipSortingMethod: string = 'default'; + + /** + * Changes how the tooltip is positioned. Allows: + * - "bottom" - Position the tooltip on the bottom of the chart. + * - "right" - Position the tooltip to the right of the chart. + * - "auto" - Position the tooltip to the bottom of the chart in most case. + * Position the tooltip above the chart if there isn't sufficient + * space below. + */ + @property({type: String}) + tooltipPosition: TooltipPosition = TooltipPosition.BOTTOM; + + @property({type: Object}) + private _chart: any; + + @property({type: Array}) + private _visibleSeriesCache: string[] = []; + + @property({type: Object}) + private _seriesDataCache: object = {}; + + @property({type: Object}) + private _seriesMetadataCache: Record = {}; + + @property({type: Number}) + private _makeChartAsyncCallbackId: number = null; + + ready() { + super.ready(); + this.scopeSubtree(this.$.chartdiv, true); + } + + private _listeners?: Set; + + attached() { + // `capture` ensures that no handler can stop propagation and break the + // handler. `passive` ensures that browser does not wait renderer thread + // on JS handler (which can prevent default and impact rendering). + const option = {capture: true, passive: true}; + this._listen(this, 'mousedown', this._onMouseDown.bind(this), option); + this._listen(this, 'mouseup', this._onMouseUp.bind(this), option); + this._listen(window, 'keydown', this._onKeyDown.bind(this), option); + this._listen(window, 'keyup', this._onKeyUp.bind(this), option); + } + detached() { + this.cancelAsync(this._makeChartAsyncCallbackId); + if (this._chart) { + this._chart.destroy(); + this._chart = undefined; + } + if (this._listeners) { + this._listeners.forEach(({node, eventName, func, option}) => { + node.removeEventListener(eventName, func, option); + }); + this._listeners.clear(); + } + } + _listen( + node: Node | Window, + eventName: string, + func: (event) => void, + option = {} + ) { + if (!this._listeners) this._listeners = new Set(); + this._listeners.add({node, eventName, func, option}); + node.addEventListener(eventName, func, option); + } + _onKeyDown(event) { + this.toggleClass('pankey', PanZoomDragLayer.isPanKey(event)); + } + _onKeyUp(event) { + this.toggleClass('pankey', PanZoomDragLayer.isPanKey(event)); + } + _onMouseDown(event) { + this.toggleClass('mousedown', true); + } + _onMouseUp(event) { + this.toggleClass('mousedown', false); + } + /** + * Returns whether the extent of rendered data values fits the current + * chart viewport domain (includes smoothing and outlier detection). + * + * This is true when there is no data, and false when the domain has been + * transformed from the extent via transformations (pan, zoom). + */ + isDataFitToDomain() { + return this._chart ? this._chart.isDataFitToDomain() : true; + } + /** + * Sets the series that the chart displays. Series with other names will + * not be displayed. + * + * @param {Array} names Array with the names of the series to + * display. + */ + setVisibleSeries(names) { + if (_.isEqual(this._visibleSeriesCache, names)) return; + this._visibleSeriesCache = names; + } + /** + * Sets the data of one of the series. Note that to display this series + * its name must be in the setVisibleSeries() array. + * + * @param {string} name Name of the series. + * @param {Array} data Data of the series. + * This is an array of objects with at least the following properties: + * - step: (Number) - index of the datum. + * - wall_time: (Date) - Date object with the datum's time. + * - scalar: (Number) - Value of the datum. + */ + setSeriesData(name, data) { + this._seriesDataCache[name] = data; + if (this._chart) { + this._chart.setSeriesData(name, data); + } + } + /** + * Sets the metadata of one of the series. + * + * @param {string} name Name of the series. + * @param {*} meta Metadata of the dataset used for later + */ + setSeriesMetadata(name: string, meta: SeriesMetadata) { + this._seriesMetadataCache[name] = meta; + if (this._chart) { + this._chart.setSeriesMetadata(name, meta); + } + } + commitChanges() { + if (!this._chart) return; + this._chart.commitChanges(); + } + /** + * Reset the chart domain. If the chart has not rendered yet, a call to this + * method no-ops. + */ + resetDomain() { + if (this._chart) { + this._chart.resetDomain(); + } + } + /** + * Re-renders the chart. Useful if e.g. the container size changed. + */ + redraw() { + if (this._chart) { + this._chart.redraw(); + } + } + @observe( + 'xComponentsCreationMethod', + 'xType', + 'yValueAccessor', + 'yScaleType', + 'isAttached' + ) + /** + * Creates a chart, and asynchronously renders it. Fires a chart-rendered + * event after the chart is rendered. + */ + _makeChart() { + if (this._makeChartAsyncCallbackId !== null) { + this.cancelAsync(this._makeChartAsyncCallbackId); + this._makeChartAsyncCallbackId = null; + } + this._makeChartAsyncCallbackId = this.async(function () { + this._makeChartAsyncCallbackId = null; + // Find the actual xComponentsCreationMethod. + let normalXComponentsCreationMethod = this.xComponentsCreationMethod; + if (!this.xType && !normalXComponentsCreationMethod) { + normalXComponentsCreationMethod = stepX; + } else if (this.xType) { + normalXComponentsCreationMethod = () => getXComponents(this.xType); + } + if ( + !normalXComponentsCreationMethod || + !this.yValueAccessor || + !this.tooltipColumns + ) { + return; + } + // We directly reference properties of `this` because this call is + // asynchronous, and values may have changed in between the call being + // initiated and actually being run. + var chart = new LineChart( + normalXComponentsCreationMethod, + this.yValueAccessor, + this.yScaleType, + this.colorScale, + this.$.tooltip, + this.tooltipColumns, + this.fillArea, + this.defaultXRange, + this.defaultYRange, + this.symbolFunction, + this.xAxisFormatter + ); + var div = d3.select(this.$.chartdiv); + chart.renderTo(div); + if (this._chart) { + this._chart.destroy(); + } + this._chart = chart; + this._chart.onAnchor(() => this.fire('chart-attached')); + }, 350); + } + @observe('_chart', '_visibleSeriesCache') + _reloadFromCache() { + if (!this._chart) return; + this._visibleSeriesCache.forEach((name) => { + this._chart.setSeriesData(name, this._seriesDataCache[name] || []); + }); + this._visibleSeriesCache + .filter((name) => this._seriesMetadataCache[name]) + .forEach((name: string) => { + this._chart.setSeriesMetadata(name, this._seriesMetadataCache[name]); + }); + this._chart.setVisibleSeries(this._visibleSeriesCache); + this._chart.commitChanges(); + } + @observe('smoothingEnabled', 'smoothingWeight', '_chart') + _smoothingChanged() { + if (!this._chart) return; + if (this.smoothingEnabled) { + this._chart.smoothingUpdate(this.smoothingWeight); + } else { + this._chart.smoothingDisable(); + } + } + @observe('ignoreYOutliers', '_chart') + _outliersChanged() { + if (!this._chart) return; + this._chart.ignoreYOutliers(this.ignoreYOutliers); + } + @observe('colorScale') + _colorScaleChanged() { + if (!this._chart) return; + this._chart.setColorScale(this.colorScale); + this._chart.redraw(); + } + @observe('tooltipColumns') + _tooltipColumnsChanged() { + if (!this._chart) return; + this._chart.setTooltipColumns(this.tooltipColumns); + } + @observe('tooltipSortingMethod', '_chart') + _tooltipSortingMethodChanged() { + if (!this._chart) return; + this._chart.setTooltipSortingMethod(this.tooltipSortingMethod); + } + getExporter() { + return new LineChartExporter(this.$.chartdiv); + } +} + +@customElement('vz-line-chart-tooltip') +class VzLineChartTooltip extends PolymerElement { + static readonly template = html` +
    + + + +
    +
    + + `; +} diff --git a/saved_models/tensorboard/tensorboard/components/vz_sorting/BUILD b/saved_models/tensorboard/tensorboard/components/vz_sorting/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..17cc953647d917a50b08782aab45e5e32284ce0b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_sorting/BUILD @@ -0,0 +1,13 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "vz_sorting", + srcs = [ + "sorting.ts", + ], + strict_checks = False, +) diff --git a/saved_models/tensorboard/tensorboard/components/vz_sorting/sorting.ts b/saved_models/tensorboard/tensorboard/components/vz_sorting/sorting.ts new file mode 100644 index 0000000000000000000000000000000000000000..eb1eb1cfd1f1f2efe0a6b3c12f160de304c5f3e1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_sorting/sorting.ts @@ -0,0 +1,111 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * Compares tag names asciinumerically broken into components. + * + *

    This is the comparison function used for sorting most string values in + * TensorBoard. Unlike the standard asciibetical comparator, this function + * knows that 'a10b' > 'a2b'. Fixed point and engineering notation are + * supported. This function also splits the input by slash and underscore to + * perform array comparison. Therefore it knows that 'a/a' < 'a+/a' even + * though '+' < '/' in the ASCII table. + */ +export function compareTagNames(a, b: string): number { + let ai = 0; + let bi = 0; + while (true) { + if (ai === a.length) { + return bi === b.length ? 0 : -1; + } + if (bi === b.length) { + return 1; + } + if (isDigit(a[ai]) && isDigit(b[bi])) { + const ais = ai; + const bis = bi; + ai = consumeNumber(a, ai + 1); + bi = consumeNumber(b, bi + 1); + const an = parseFloat(a.slice(ais, ai)); + const bn = parseFloat(b.slice(bis, bi)); + if (an < bn) { + return -1; + } + if (an > bn) { + return 1; + } + continue; + } + if (isBreak(a[ai])) { + if (!isBreak(b[bi])) { + return -1; + } + } else if (isBreak(b[bi])) { + return 1; + } else if (a[ai] < b[bi]) { + return -1; + } else if (a[ai] > b[bi]) { + return 1; + } + ai++; + bi++; + } +} + +function consumeNumber(s: string, i: number): number { + enum State { + NATURAL, + REAL, + EXPONENT_SIGN, + EXPONENT, + } + let state = State.NATURAL; + for (; i < s.length; i++) { + if (state === State.NATURAL) { + if (s[i] === '.') { + state = State.REAL; + } else if (s[i] === 'e' || s[i] === 'E') { + state = State.EXPONENT_SIGN; + } else if (!isDigit(s[i])) { + break; + } + } else if (state === State.REAL) { + if (s[i] === 'e' || s[i] === 'E') { + state = State.EXPONENT_SIGN; + } else if (!isDigit(s[i])) { + break; + } + } else if (state === State.EXPONENT_SIGN) { + if (isDigit(s[i]) || s[i] === '+' || s[i] === '-') { + state = State.EXPONENT; + } else { + break; + } + } else if (state === State.EXPONENT) { + if (!isDigit(s[i])) { + break; + } + } + } + return i; +} + +function isDigit(c: string): boolean { + return '0' <= c && c <= '9'; +} + +function isBreak(c: string): boolean { + // TODO(@jart): Remove underscore when people stop using it like a slash. + return c === '/' || c === '_' || isDigit(c); +} diff --git a/saved_models/tensorboard/tensorboard/components/vz_sorting/test/sortingTests.ts b/saved_models/tensorboard/tensorboard/components/vz_sorting/test/sortingTests.ts new file mode 100644 index 0000000000000000000000000000000000000000..355664f4d46bf9b9a05df69b5f5b78d889cb7a37 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_sorting/test/sortingTests.ts @@ -0,0 +1,97 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +namespace vz_sorting { + describe('compareTagNames', () => { + const assert = chai.assert; + const sortTagNames = (a) => a.sort(compareTagNames); + + it('is asciibetical', () => { + assert.deepEqual(sortTagNames(['a', 'b']), ['a', 'b']); + assert.deepEqual(sortTagNames(['a', 'B']), ['B', 'a']); + }); + + it('sorts integer portions', () => { + assert.deepEqual(['03', '1'].sort(), ['03', '1']); + assert.deepEqual(sortTagNames(['03', '1']), ['1', '03']); + assert.deepEqual(sortTagNames(['a03', 'a1']), ['a1', 'a03']); + assert.deepEqual(sortTagNames(['a03', 'b1']), ['a03', 'b1']); + assert.deepEqual(sortTagNames(['x0a03', 'x0a1']), ['x0a1', 'x0a03']); + assert.deepEqual(sortTagNames(['a/b/03', 'a/b/1']), ['a/b/1', 'a/b/03']); + }); + + it('sorts fixed point numbers', () => { + assert.deepEqual(sortTagNames(['a0.1', 'a0.01']), ['a0.01', 'a0.1']); + }); + + it('sorts engineering notation', () => { + assert.deepEqual(sortTagNames(['a1e9', 'a9e8']), ['a9e8', 'a1e9']); + assert.deepEqual(sortTagNames(['a1e+9', 'a9e+8']), ['a9e+8', 'a1e+9']); + assert.deepEqual(sortTagNames(['a1e+5', 'a9e-6']), ['a9e-6', 'a1e+5']); + assert.deepEqual(sortTagNames(['a1.0e9', 'a9.0e8']), [ + 'a9.0e8', + 'a1.0e9', + ]); + assert.deepEqual(sortTagNames(['a1.0e+9', 'a9.0e+8']), [ + 'a9.0e+8', + 'a1.0e+9', + ]); + }); + + it('is componentized by slash', () => { + assert.deepEqual(['a+/a', 'a/a', 'ab/a'].sort(), ['a+/a', 'a/a', 'ab/a']); + assert.deepEqual(sortTagNames(['a+/a', 'a/a', 'ab/a']), [ + 'a/a', + 'a+/a', + 'ab/a', + ]); + }); + + it('is componentized by underscore', () => { + assert.deepEqual(sortTagNames(['a+_a', 'a_a', 'ab_a']), [ + 'a_a', + 'a+_a', + 'ab_a', + ]); + assert.deepEqual(sortTagNames(['a+/a', 'a_a', 'ab_a']), [ + 'a_a', + 'a+/a', + 'ab_a', + ]); + }); + + it('is componentized by number boundaries', () => { + assert.deepEqual(sortTagNames(['a+0a', 'a0a', 'ab0a']), [ + 'a0a', + 'a+0a', + 'ab0a', + ]); + }); + + it('empty comes first', () => { + assert.deepEqual(sortTagNames(['a', '//', '/', '']), [ + '', + '/', + '//', + 'a', + ]); + }); + + it('decimal parsed correctly', () => { + assert.deepEqual(sortTagNames(['0.2', '0.03']), ['0.03', '0.2']); + assert.deepEqual(sortTagNames(['0..2', '0..03']), ['0..2', '0..03']); + assert.deepEqual(sortTagNames(['.2', '.03']), ['.2', '.03']); + }); + }); +} // namespace vz_sorting diff --git a/saved_models/tensorboard/tensorboard/components/vz_sorting/test/tests.html b/saved_models/tensorboard/tensorboard/components/vz_sorting/test/tests.html new file mode 100644 index 0000000000000000000000000000000000000000..6f0adf42034599b545b33afc488439a0f309569e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/components/vz_sorting/test/tests.html @@ -0,0 +1,24 @@ + + + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/defs/BUILD b/saved_models/tensorboard/tensorboard/defs/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..fc3e6b669631e80398dff1448cd2a5d4c06658ae --- /dev/null +++ b/saved_models/tensorboard/tensorboard/defs/BUILD @@ -0,0 +1,41 @@ +load("//tensorboard/defs:protos.bzl", "tb_proto_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +filegroup( + name = "tf_web_library_default_typings", + srcs = [ + # Ordering probably matters. + "@com_microsoft_typescript//:lib.es6.d.ts", + "@io_angular_clutz//:src/resources/closure.lib.d.ts", + "clutz.d.ts", + ], +) + + +tb_proto_library( + name = "test_base", + testonly = True, + srcs = ["test_base.proto"], + has_services = True, +) + +tb_proto_library( + name = "test_downstream", + testonly = True, + srcs = ["test_downstream.proto"], + has_services = True, + deps = [ + ":test_base", + ], +) + + +exports_files( + ["clutz.d.ts"], + visibility = ["//tensorboard:internal"], +) + +exports_files(["rollup_config.js"]) \ No newline at end of file diff --git a/saved_models/tensorboard/tensorboard/defs/BUILD.bak b/saved_models/tensorboard/tensorboard/defs/BUILD.bak new file mode 100644 index 0000000000000000000000000000000000000000..cf39f9fc805e95bac7c1104a30770688032286a5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/defs/BUILD.bak @@ -0,0 +1,53 @@ +load("//tensorboard/defs:protos.bzl", "tb_proto_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +filegroup( + name = "tf_web_library_default_typings", + srcs = [ + # Ordering probably matters. + "@com_microsoft_typescript//:lib.es6.d.ts", + "@io_angular_clutz//:src/resources/closure.lib.d.ts", + "clutz.d.ts", + ], +) + +py_test( + name = "tb_proto_library_test", + srcs = ["tb_proto_library_test.py"], + deps = [ + ":test_base_py_pb2", + ":test_base_py_pb2_grpc", + ":test_downstream_py_pb2", + ":test_downstream_py_pb2_grpc", + "//tensorboard:test", + ], +) + +tb_proto_library( + name = "test_base", + testonly = True, + srcs = ["test_base.proto"], + has_services = True, +) + +tb_proto_library( + name = "test_downstream", + testonly = True, + srcs = ["test_downstream.proto"], + has_services = True, + deps = [ + ":test_base", + ], +) + +exports_files(["web_test_python_stub.template.py"]) + +exports_files( + ["clutz.d.ts"], + visibility = ["//tensorboard:internal"], +) + +exports_files(["rollup_config.js"]) diff --git a/saved_models/tensorboard/tensorboard/defs/__init__.py b/saved_models/tensorboard/tensorboard/defs/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..931c2ef11db4a949e6c2e95bca44e36bac1241e9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/defs/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== diff --git a/saved_models/tensorboard/tensorboard/defs/clutz.d.ts b/saved_models/tensorboard/tensorboard/defs/clutz.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..47cf307d2619a4a84f631dceb03b393cd04aa0d6 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/defs/clutz.d.ts @@ -0,0 +1,19 @@ +// Copyright 2017 The TensorFlow Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// tslint:disable +declare namespace ಠ_ಠ.clutz { + interface IteratorIterable extends Iterator, Iterable {} + interface IIterableResult extends IteratorResult {} +} diff --git a/saved_models/tensorboard/tensorboard/defs/defs.bzl b/saved_models/tensorboard/tensorboard/defs/defs.bzl new file mode 100644 index 0000000000000000000000000000000000000000..ebb54de197a50abfd1aca16e3fbe5e871f76503b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/defs/defs.bzl @@ -0,0 +1,117 @@ +# Copyright 2016 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""External-only delegates for various BUILD rules.""" + +load("@npm_bazel_rollup//:index.bzl", "rollup_bundle") +load("@npm_bazel_karma//:index.bzl", "karma_web_test_suite") +load("@npm_bazel_typescript//:index.bzl", "ts_config", "ts_devserver", "ts_library") + + +def tensorboard_webcomponent_library(**kwargs): + """Rules referencing this will be deleted from the codebase soon.""" + pass + +def tf_js_binary(compile, deps, **kwargs): + """Rules for creating a JavaScript bundle. + + Please refer to https://bazelbuild.github.io/rules_nodejs/Built-ins.html#rollup_bundle + for more details. + """ + + # `compile` option is used internally but is not used by rollup_bundle. + # Discard it. + rollup_bundle( + config_file = "//tensorboard/defs:rollup_config.js", + # Must pass `true` here specifically, else the input file argument to + # Rollup (appended by `rollup_binary`) is interpreted as a value for + # the preceding option. + # args = ["--failAfterWarnings", "true", "--silent", "true"], + args = ["--silent", "false"], + deps = deps + [ + "@npm//@rollup/plugin-commonjs", + "@npm//@rollup/plugin-node-resolve", + ], + format = "iife", + **kwargs + ) + +def tf_ts_config(**kwargs): + """TensorBoard wrapper for the rule for a TypeScript configuration.""" + + ts_config(**kwargs) + +def tf_ts_library(strict_checks = True, **kwargs): + """TensorBoard wrapper for the rule for a TypeScript library. + + Args: + strict_checks: whether to enable stricter type checking. Default is True. + Please use `strict_checks = False` for only Polymer based targets. + **kwargs: keyword arguments to ts_library build rule. + """ + tsconfig = "//:tsconfig.json" + + if strict_checks == False: + tsconfig = "//:tsconfig-lax" + elif "test_only" in kwargs and kwargs.get("test_only"): + tsconfig = "//:tsconfig-test" + kwargs.setdefault("deps", []).append("@npm//tslib") + + ts_library(tsconfig = tsconfig, **kwargs) + +def tf_ts_devserver(**kwargs): + """TensorBoard wrapper for the rule for a TypeScript dev server.""" + + ts_devserver(**kwargs) + +def tf_ng_web_test_suite(runtime_deps = [], bootstrap = [], deps = [], **kwargs): + """TensorBoard wrapper for the rule for a Karma web test suite. + + It has Angular specific configurations that we want as defaults. + """ + + kwargs.setdefault("tags", []).append("webtest") + karma_web_test_suite( + srcs = [ + "//tensorboard/webapp/testing:require_js_karma_config.js", + ], + bootstrap = bootstrap + [ + "@npm//:node_modules/zone.js/dist/zone-testing-bundle.js", + "@npm//:node_modules/reflect-metadata/Reflect.js", + "@npm//:node_modules/@angular/localize/bundles/localize-init.umd.js", + ], + runtime_deps = runtime_deps + [ + "//tensorboard/webapp/testing:initialize_testbed", + ], + deps = deps + [ + "//tensorboard/webapp/testing:test_support_lib", + ], + # Lodash runtime dependency that is compatible with requirejs for karma. + static_files = [ + "@npm//:node_modules/lodash/lodash.js", + "@npm//:node_modules/d3/dist/d3.js", + "@npm//:node_modules/three/build/three.js", + ], + **kwargs + ) + +def tf_svg_bundle(name, srcs, out): + native.genrule( + name = name, + srcs = srcs, + outs = [out], + cmd = "$(execpath //tensorboard/tools:mat_bundle_icon_svg) $@ $(SRCS)", + tools = [ + "//tensorboard/tools:mat_bundle_icon_svg", + ], + ) \ No newline at end of file diff --git a/saved_models/tensorboard/tensorboard/defs/defs.bzl.bak b/saved_models/tensorboard/tensorboard/defs/defs.bzl.bak new file mode 100644 index 0000000000000000000000000000000000000000..39d3bb9e9cb808db4b6de402a2584a475593b2fe --- /dev/null +++ b/saved_models/tensorboard/tensorboard/defs/defs.bzl.bak @@ -0,0 +1,142 @@ +# Copyright 2016 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""External-only delegates for various BUILD rules.""" + +load("@npm_bazel_rollup//:index.bzl", "rollup_bundle") +load("@npm_bazel_karma//:index.bzl", "karma_web_test_suite") +load("@npm_bazel_typescript//:index.bzl", "ts_config", "ts_devserver", "ts_library") +load("@io_bazel_rules_sass//:defs.bzl", "sass_binary", "sass_library") + +def tensorboard_webcomponent_library(**kwargs): + """Rules referencing this will be deleted from the codebase soon.""" + pass + +def tf_js_binary(compile, deps, **kwargs): + """Rules for creating a JavaScript bundle. + + Please refer to https://bazelbuild.github.io/rules_nodejs/Built-ins.html#rollup_bundle + for more details. + """ + + # `compile` option is used internally but is not used by rollup_bundle. + # Discard it. + rollup_bundle( + config_file = "//tensorboard/defs:rollup_config.js", + # Must pass `true` here specifically, else the input file argument to + # Rollup (appended by `rollup_binary`) is interpreted as a value for + # the preceding option. + # args = ["--failAfterWarnings", "true", "--silent", "true"], + # args = ["--silent", "false"], + deps = deps + [ + "@npm//@rollup/plugin-commonjs", + "@npm//@rollup/plugin-node-resolve", + ], + format = "iife", + **kwargs + ) + +def tf_ts_config(**kwargs): + """TensorBoard wrapper for the rule for a TypeScript configuration.""" + + ts_config(**kwargs) + +def tf_ts_library(strict_checks = True, **kwargs): + """TensorBoard wrapper for the rule for a TypeScript library. + + Args: + strict_checks: whether to enable stricter type checking. Default is True. + Please use `strict_checks = False` for only Polymer based targets. + **kwargs: keyword arguments to ts_library build rule. + """ + tsconfig = "//:tsconfig.json" + + if strict_checks == False: + tsconfig = "//:tsconfig-lax" + elif "test_only" in kwargs and kwargs.get("test_only"): + tsconfig = "//:tsconfig-test" + kwargs.setdefault("deps", []).append("@npm//tslib") + + ts_library(tsconfig = tsconfig, **kwargs) + +def tf_ts_devserver(**kwargs): + """TensorBoard wrapper for the rule for a TypeScript dev server.""" + + ts_devserver(**kwargs) + +def tf_ng_web_test_suite(runtime_deps = [], bootstrap = [], deps = [], **kwargs): + """TensorBoard wrapper for the rule for a Karma web test suite. + + It has Angular specific configurations that we want as defaults. + """ + + kwargs.setdefault("tags", []).append("webtest") + karma_web_test_suite( + srcs = [ + "//tensorboard/webapp/testing:require_js_karma_config.js", + ], + bootstrap = bootstrap + [ + "@npm//:node_modules/zone.js/dist/zone-testing-bundle.js", + "@npm//:node_modules/reflect-metadata/Reflect.js", + "@npm//:node_modules/@angular/localize/bundles/localize-init.umd.js", + ], + runtime_deps = runtime_deps + [ + "//tensorboard/webapp/testing:initialize_testbed", + ], + deps = deps + [ + "//tensorboard/webapp/testing:test_support_lib", + ], + # Lodash runtime dependency that is compatible with requirejs for karma. + static_files = [ + "@npm//:node_modules/lodash/lodash.js", + "@npm//:node_modules/d3/dist/d3.js", + "@npm//:node_modules/three/build/three.js", + ], + **kwargs + ) + +def tf_svg_bundle(name, srcs, out): + native.genrule( + name = name, + srcs = srcs, + outs = [out], + cmd = "$(execpath //tensorboard/tools:mat_bundle_icon_svg) $@ $(SRCS)", + tools = [ + "//tensorboard/tools:mat_bundle_icon_svg", + ], + ) + +def tf_sass_binary(deps = [], include_paths = [], **kwargs): + """TensorBoard wrap for declaring SASS binary. + + It adds dependency on theme by default then add include Angular material + theme library paths for better node_modules library resolution. + """ + sass_binary( + deps = deps + ["//tensorboard/webapp/theme"], + include_paths = include_paths + [ + "external/npm/node_modules", + ], + sourcemap = False, + **kwargs + ) + +def tf_sass_library(**kwargs): + """TensorBoard wrap for declaring SASS library. + + It re-exports the sass_libray symbol so users do not have to depend on + "@io_bazel_rules_sass//:defs.bzl". + """ + sass_library( + **kwargs + ) diff --git a/saved_models/tensorboard/tensorboard/defs/hacks.bzl b/saved_models/tensorboard/tensorboard/defs/hacks.bzl new file mode 100644 index 0000000000000000000000000000000000000000..22ecbb2a8796249c4dcb68aaacc6aa875da42fc7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/defs/hacks.bzl @@ -0,0 +1,80 @@ +# Copyright 2017 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Compatibility hacks.""" + +# TODO(@jart): Merge this file into defs.bzl once that file is sync unified. + +def tensorboard_typescript_bundle( + name, + out, + namespace_srcs, + namespace_symbol_aliases={}, + namespace_symbol_aliases_public={}, +): + """Rolls TypeScript ES6 modules into one vanilla source file without imports. + + This is a genrule wrapper that concatenates TypeScripts sources inside + namespace blocks while removing ^import lines. Because the sources themselves + are not parsed, the structure of the modules must be passed to this macro as + a Skylark data structure. + + Args: + name: Name of this build rule target. + out: Path of outputted TypeScript source file. + namespace_srcs: Multimap of namespace strings to build file targets. The + ordering of the dictionary and nested lists does not matter when + generating a typings file, but *does* matter when generating a source + file. + namespace_symbol_aliases: Map of namespace strings where each value is a + map of symbol names to fully qualified symbol names. + namespace_symbol_aliases_public: Same as namespace_symbol_aliases but the + symbol will be visible to other namespaces. + """ + cmd = ["(", "echo // GENERATED BY TENSORBOARD_TYPESCRIPT_BUNDLE"] + inputs_depsets = [] + for namespace, srcs in namespace_srcs.items(): + cmd.append("echo") + if out[-5:] == ".d.ts": + cmd.append("echo 'declare namespace %s {'" % namespace) + elif out[-3:] == ".ts": + cmd.append("echo 'module %s {'" % namespace) + else: + fail("'out' must end with .ts or .d.ts: " + out) + for symbol, canon in namespace_symbol_aliases.get(namespace, {}).items(): + cmd.append("echo 'import %s = %s;'" % (symbol, canon)) + for symbol, canon in namespace_symbol_aliases_public.get(namespace, + {}).items(): + cmd.append("echo 'export import %s = %s;'" % (symbol, canon)) + inputs_depsets.append(depset(srcs)) + for src in srcs: + cmd.append("for f in $(locations %s); do" % src) + cmd.append(" echo") + cmd.append(" echo /////////////////////////////////////////////////////") + cmd.append(" echo // " + namespace) + cmd.append(" echo // $$f") + cmd.append(" echo /////////////////////////////////////////////////////") + cmd.append(" echo") + cmd.append(" sed 's!^import !// import !' $$f \\") + cmd.append(" | sed 's!^export declare !export !' \\") + cmd.append(" | sed '/^export .* from /d' \\") + cmd.append(" | sed '/^export {.*};$$/d'") + cmd.append("done") + cmd.append("echo '}'") + cmd.append(") >$@") + native.genrule( + name = name, + srcs = depset(transitive=inputs_depsets).to_list(), + outs = [out], + cmd = "\n".join(cmd), + ) diff --git a/saved_models/tensorboard/tensorboard/defs/protos.bzl b/saved_models/tensorboard/tensorboard/defs/protos.bzl new file mode 100644 index 0000000000000000000000000000000000000000..3c18bc100024cc9886b17cc51c82003892c8e335 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/defs/protos.bzl @@ -0,0 +1,67 @@ +# Copyright 2017 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the 'License'); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an 'AS IS' BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("@com_google_protobuf//:protobuf.bzl", "proto_gen") + +def tb_proto_library( + name, + srcs = None, + deps = [], + visibility = None, + testonly = None, + has_services = False): + outs_proto = _PyOuts(srcs, grpc = False) + outs_grpc = _PyOuts(srcs, grpc = True) if has_services else [] + outs_all = outs_proto + outs_grpc + + runtime = "@com_google_protobuf//:protobuf_python" + + proto_gen( + name = name + "_genproto", + srcs = srcs, + deps = [s + "_genproto" for s in deps] + [runtime + "_genproto"], + includes = [], + protoc = "@com_google_protobuf//:protoc", + gen_py = True, + outs = outs_all, + visibility = ["//visibility:public"], + plugin = "//external:grpc_python_plugin" if has_services else None, + plugin_language = "grpc", + ) + + py_deps = [s + "_py_pb2" for s in deps] + [runtime] + native.py_library( + name = name + "_py_pb2", + srcs = outs_proto, + imports = [], + srcs_version = "PY2AND3", + deps = py_deps, + testonly = testonly, + visibility = visibility, + ) + if has_services: + native.py_library( + name = name + "_py_pb2_grpc", + srcs = outs_grpc, + imports = [], + srcs_version = "PY2AND3", + deps = [name + "_py_pb2"] + py_deps, + testonly = testonly, + visibility = visibility, + ) + +def _PyOuts(srcs, grpc): + # Adapted from @com_google_protobuf//:protobuf.bzl. + ext = "_pb2.py" if not grpc else "_pb2_grpc.py" + return [s[:-len(".proto")] + ext for s in srcs] diff --git a/saved_models/tensorboard/tensorboard/defs/rollup_config.js b/saved_models/tensorboard/tensorboard/defs/rollup_config.js new file mode 100644 index 0000000000000000000000000000000000000000..6d730b9318a548c53cd4685db07d7c79195463fa --- /dev/null +++ b/saved_models/tensorboard/tensorboard/defs/rollup_config.js @@ -0,0 +1,56 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +const {nodeResolve} = require('@rollup/plugin-node-resolve'); +const commonjs = require('@rollup/plugin-commonjs'); + +module.exports = { + plugins: [ + nodeResolve({ + mainFields: ['browser', 'es2015', 'module', 'jsnext:main', 'main'], + }), + commonjs(), + ], + output: { + strict: false, + }, + onwarn: (warning, warn) => { + // Suppress known warnings in third-party dependencies that we can't + // mitigate. + if (warning.code === 'CIRCULAR_DEPENDENCY') { + const ignoredPrefixes = [ + // d3 circular deps are wontfix: + // https://github.com/d3/d3-selection/issues/168#issuecomment-401059437 + 'node_modules/d3-interpolate', + 'node_modules/d3-selection', + 'node_modules/d3-transition', + 'node_modules/d3-voronoi', + 'node_modules/plottable', + 'node_modules/ml-matrix', + ]; + for (const prefix of ignoredPrefixes) { + if (warning.cycle.some((x) => x.startsWith(prefix))) { + return; + } + } + } + if (warning.code === 'EVAL') { + if (warning.loc.file.includes('/node_modules/numeric/')) { + return; + } + } + warn(warning); + }, +}; diff --git a/saved_models/tensorboard/tensorboard/defs/tb_proto_library_test.py b/saved_models/tensorboard/tensorboard/defs/tb_proto_library_test.py new file mode 100644 index 0000000000000000000000000000000000000000..3fc3bb576350ff161e6af50caac859e7785cdeaf --- /dev/null +++ b/saved_models/tensorboard/tensorboard/defs/tb_proto_library_test.py @@ -0,0 +1,44 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +"""Tests for the `tb_proto_library` build macro.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from tensorboard import test as tb_test +from tensorboard.defs import test_base_pb2 +from tensorboard.defs import test_base_pb2_grpc +from tensorboard.defs import test_downstream_pb2 +from tensorboard.defs import test_downstream_pb2_grpc + + +class TbProtoLibraryTest(tb_test.TestCase): + """Tests for `tb_proto_library`.""" + + def tests_with_deps(self): + foo = test_base_pb2.Foo() + foo.foo = 1 + bar = test_downstream_pb2.Bar() + bar.foo.foo = 1 + self.assertEqual(foo, bar.foo) + + def test_service_deps(self): + self.assertIsInstance(test_base_pb2_grpc.FooServiceServicer, type) + self.assertIsInstance(test_downstream_pb2_grpc.BarServiceServicer, type) + + +if __name__ == "__main__": + tb_test.main() diff --git a/saved_models/tensorboard/tensorboard/defs/test_base.proto b/saved_models/tensorboard/tensorboard/defs/test_base.proto new file mode 100644 index 0000000000000000000000000000000000000000..67956679166cb9fbfb4b42f45dffe40421409622 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/defs/test_base.proto @@ -0,0 +1,33 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +syntax = "proto3"; + +message Foo { + int32 foo = 1; +} + +service FooService { + // Loads some objects. + rpc GetFoo(GetFooRequest) returns (GetFooResponse); +} + +message GetFooRequest { + int32 count = 1; +} + +message GetFooResponse { + repeated Foo foo = 1; +} diff --git a/saved_models/tensorboard/tensorboard/defs/test_downstream.proto b/saved_models/tensorboard/tensorboard/defs/test_downstream.proto new file mode 100644 index 0000000000000000000000000000000000000000..0ff23a0b82b2d608e81caff345c4f0921d97c706 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/defs/test_downstream.proto @@ -0,0 +1,36 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +syntax = "proto3"; + +import "tensorboard/defs/test_base.proto"; + +message Bar { + Foo foo = 1; + int32 bar = 2; +} + +service BarService { + // Loads some objects. + rpc GetBar(GetBarRequest) returns (GetBarResponse); +} + +message GetBarRequest { + int32 count = 1; +} + +message GetBarResponse { + repeated Bar bar = 1; +} diff --git a/saved_models/tensorboard/tensorboard/defs/vulcanize.bzl b/saved_models/tensorboard/tensorboard/defs/vulcanize.bzl new file mode 100644 index 0000000000000000000000000000000000000000..39071b60f321da77eae6e478d4a49a76f131ab24 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/defs/vulcanize.bzl @@ -0,0 +1,164 @@ +# Copyright 2017 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Rule for building the HTML binary using Closure Compiler.""" + +load("@io_bazel_rules_closure//closure:defs.bzl", "closure_js_aspect") +load("@io_bazel_rules_closure//closure/private:defs.bzl", "collect_js", "unfurl", "long_path") + +def _tensorboard_html_binary(ctx): + """Compiles HTMLs into one HTML. + + The rule outputs a HTML that resolves all HTML import statements into one + document. When compile option is on, it compiles all script sources with + JSCompiler (unless DOM is annotated to opt-out of compilation). When js_path + is specified, the rule combines content of all script elements to a JavaScript + file. + """ + + deps = unfurl(ctx.attr.deps, provider="webfiles") + manifests = depset(order="postorder") + files = depset() + webpaths = depset() + for dep in deps: + manifests = depset(transitive=[manifests, dep.webfiles.manifests]) + webpaths = depset(transitive=[webpaths, dep.webfiles.webpaths]) + files = depset(transitive=[files, dep.data_runfiles.files]) + webpaths = depset([ctx.attr.output_path], transitive=[webpaths]) + closure_js_library=collect_js( + unfurl(ctx.attr.deps, provider="closure_js_library")) + + # vulcanize + jslibs = depset(ctx.files._jslibs, transitive=[closure_js_library.srcs]) + if ctx.file.path_regexs_for_noinline == None: + ignore_regexs_file_set = depset() + ignore_regexs_file_path = "NO_REGEXS" + else: + ignore_regexs_file_set = depset([ctx.file.path_regexs_for_noinline]) + ignore_regexs_file_path = ctx.file.path_regexs_for_noinline.path + ctx.actions.run( + inputs=depset(transitive=[ + manifests, + files, + ignore_regexs_file_set, + ]).to_list(), + tools=jslibs, + outputs=[ctx.outputs.html, ctx.outputs.js], + executable=ctx.executable._Vulcanize, + arguments=([ctx.attr.compilation_level, + "true" if ctx.attr.compile else "false", + "true" if ctx.attr.testonly else "false", + ctx.attr.input_path, + ctx.attr.output_path, + ctx.attr.js_path, + ctx.outputs.html.path, + ctx.outputs.js.path, + ignore_regexs_file_path] + + [f.path for f in jslibs.to_list()] + + [f.path for f in manifests.to_list()]), + mnemonic="Vulcanize", + progress_message="Vulcanizing %s" % ctx.attr.input_path) + + # webfiles manifest + manifest_srcs = [struct(path=ctx.outputs.html.path, + longpath=long_path(ctx, ctx.outputs.html), + webpath=ctx.attr.output_path)] + + if ctx.attr.js_path: + manifest_srcs.append( + struct(path=ctx.outputs.js.path, + longpath=long_path(ctx, ctx.outputs.js), + webpath=ctx.attr.js_path)) + + manifest = ctx.actions.declare_file("%s.pbtxt" % ctx.label.name) + ctx.actions.write( + output=manifest, + content=struct( + label=str(ctx.label), + src=manifest_srcs).to_proto()) + manifests = depset([manifest], transitive=[manifests]) + + # webfiles server + params = struct( + label=str(ctx.label), + bind="[::]:6006", + manifest=[long_path(ctx, man) for man in manifests.to_list()], + external_asset=[struct(webpath=k, path=v) + for k, v in ctx.attr.external_assets.items()]) + params_file = ctx.actions.declare_file( + "%s_server_params.pbtxt" % ctx.label.name) + ctx.actions.write(output=params_file, content=params.to_proto()) + ctx.actions.write( + is_executable=True, + output=ctx.outputs.executable, + content="#!/bin/sh\nexec %s %s" % ( + ctx.executable._WebfilesServer.short_path, + long_path(ctx, params_file))) + + transitive_runfiles = depset() + transitive_runfiles = depset(transitive=[ + transitive_runfiles, + ctx.attr._WebfilesServer.data_runfiles.files, + ]) + for dep in deps: + transitive_runfiles = depset(transitive=[ + transitive_runfiles, + dep.data_runfiles.files, + ]) + return struct( + files=depset([ctx.outputs.html]), + webfiles=struct( + manifest=manifest, + manifests=manifests, + webpaths=webpaths, + dummy=ctx.outputs.html), + runfiles=ctx.runfiles( + files=ctx.files.data + [manifest, + params_file, + ctx.outputs.html, + ctx.outputs.js, + ctx.outputs.executable], + transitive_files=transitive_runfiles)) + +tensorboard_html_binary = rule( + implementation=_tensorboard_html_binary, + executable=True, + attrs={ + "compilation_level": attr.string(default="ADVANCED"), + "input_path": attr.string(mandatory=True), + "output_path": attr.string(mandatory=True), + # If specified, it extracts scripts into {name}.js and inserts ", ""); + code = INLINE_SOURCE_MAP_PATTERN.matcher(code).replaceAll(""); + result = replaceNode( + node, + new Element(Tag.valueOf("script"), node.baseUri(), node.attributes()) + .appendChild(new DataNode(code, node.baseUri())) + .removeAttr("src")); + } + if (firstScript == null) { + firstScript = result; + } + return result; + } + + private static Optional getAttrTransitive(Node node, String attr) { + while (node != null) { + if (node.hasAttr(attr)) { + return Optional.of(node.attr(attr)); + } + node = node.parent(); + } + return Optional.absent(); + } + + private static Node replaceNode(Node oldNode, Node newNode) { + oldNode.replaceWith(newNode); + return newNode; + } + + private static Node removeNode(Node node) { + return replaceNode(node, new TextNode("", node.baseUri())); + } + + private static Path getWebfile(Webpath path) { + return verifyNotNull(webfiles.get(path), "Bad ref: %s -> %s", me(), path); + } + + private static void compile() { + if (sourcesFromScriptTags.isEmpty()) { + return; + } + + CompilerOptions options = new CompilerOptions(); + compilationLevel.setOptionsForCompilationLevel(options); + options.setModuleResolutionMode(ModuleLoader.ResolutionMode.NODE); + + // Nice options. + options.setColorizeErrorOutput(true); + options.setContinueAfterErrors(true); + options.setLanguageIn(CompilerOptions.LanguageMode.ECMASCRIPT_2018); + options.setLanguageOut(CompilerOptions.LanguageMode.ECMASCRIPT_2015); + options.setGenerateExports(true); + options.setStrictModeInput(false); + options.setExtraAnnotationNames(EXTRA_JSDOC_TAGS); + + // Strict mode gets in the way of concatenating all script tags as script + // tags assume different modes. Disable global strict imposed by JSComp. + // A function can still have a "use strict" inside. + options.setEmitUseStrict(false); + + // So we can chop JS binary back up into the original script tags. + options.setPrintInputDelimiter(true); + options.setInputDelimiter(SCRIPT_DELIMITER); + + // Optimizations that are too advanced for us right now. + options.setPropertyRenaming(PropertyRenamingPolicy.OFF); + options.setCheckGlobalThisLevel(CheckLevel.OFF); + options.setRemoveUnusedPrototypeProperties(false); + options.setRemoveUnusedClassProperties(false); + // Prevent Polymer bound method (invisible to JSComp) to be over-optimized. + options.setInlineFunctions(CompilerOptions.Reach.NONE); + options.setDevirtualizeMethods(false); + + // Dependency management. + options.setClosurePass(true); + // TODO turn dependency pruning back on. ES6 modules are currently (incorrectly) considered + // moochers. Once the compiler no longer considers them moochers the dependencies will be in an + // incorrect order. The compiler will put moochers first, then other explicit entry points + // (if something is both an entry point and a moocher it goes first). vz-example-viewer.ts + // generates an ES6 module JS, and it will soon no longer be considered a moocher and be moved + // after its use in some moochers. To reenable dependency pruning, either the TS generation + // should not generate an ES6 module (a file with just goog.requires is a moocher!), + // or vz-example-viewer should be explicitly imported by the code that uses it. Alternatively, + // we could ensure that the input order to the compiler is correct and all inputs are used, and + // turn off both sorting and pruning. + options.setDependencyOptions(DependencyOptions.sortOnly()); + + // Polymer pass. + options.setPolymerVersion(2); + + // Debug flags. + if (testOnly) { + options.setPrettyPrint(true); + options.setGeneratePseudoNames(true); + options.setExportTestFunctions(true); + } + + // Don't print warnings from + * <#root>welcome + * + * foo + * + * bar + * + * + * // Output + * <#root> + * + * + * + * welcome foobar + * + * + **/ + private static Document getFlattenedHTML5Document(Document document) { + Document flatDoc = new Document("/"); + + flatDoc.appendChild(new DocumentType("html", "", "", "")); + + // Transfer comment nodes from the `document` level. They are important + // license comments + for (Node node : document.childNodes()) { + if (node instanceof Comment) { + flatDoc.appendChild(node.clone()); + } + } + + // Create ``, `` and ``. + flatDoc.normalise(); + + document.traverse(new FlatDocumentCopier(flatDoc)); + + for (Element subdoc : flatDoc.getElementsByTag("#root")) { + if (!subdoc.equals(flatDoc)) { + final int maxElementStrLen = 200; + String parentStr = subdoc.parent().outerHtml(); + if (parentStr.length() > maxElementStrLen) { + parentStr = parentStr.substring(0, maxElementStrLen) + "..."; + } + throw new RuntimeException( + "Nested doc (e.g., importing outside the head of a document) " + + "is not supported.\nParent of offending element: " + parentStr); + } + } + + return flatDoc; + } + + private static class FlatDocumentCopier implements NodeVisitor { + private final Element destHead; + private final Element destBody; + + public FlatDocumentCopier(Document dest) { + destHead = dest.head(); + destBody = dest.body(); + } + + @Override + public void head(Node node, int depth) { + // Copy childNodes from `head` into the dest doc's head without + // modification if the node is not a `document` (or a `<#root>` element) + // in which case we want to traverse further and only copy the childNodes + // in its `body` and `head` elements. + if (node.parentNode() != null && node.parentNode().nodeName().equals("head") + && !(node instanceof Document)) { + destHead.appendChild(node.clone()); + } + + if (node.nodeName().equals("body")) { + cloneChildrenWithoutWhitespace((Element) node, destBody); + // No need to further traverse the `body`. Skip by removing the nodes. + ((Element) node).empty(); + } + } + + @Override + public void tail(Node node, int depth) { + // Copying is done during the `head`. No need to do any work. + } + } + + private static final class JsPrintlessErrorManager extends BasicErrorManager { + + @Override + public void println(CheckLevel level, JSError error) {} + + @Override + public void printSummary() {} + } + + private Vulcanize() {} +} diff --git a/saved_models/tensorboard/tensorboard/java/org/tensorflow/tensorboard/vulcanize/Zipper.java b/saved_models/tensorboard/tensorboard/java/org/tensorflow/tensorboard/vulcanize/Zipper.java new file mode 100644 index 0000000000000000000000000000000000000000..31b3aa195e1ebfb46d9556833d20964c63df1dbe --- /dev/null +++ b/saved_models/tensorboard/tensorboard/java/org/tensorflow/tensorboard/vulcanize/Zipper.java @@ -0,0 +1,73 @@ +// Copyright 2017 The TensorFlow Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package org.tensorflow.tensorboard.vulcanize; + +import static java.nio.charset.StandardCharsets.UTF_8; + +import com.google.protobuf.TextFormat; +import io.bazel.rules.closure.webfiles.BuildInfo.WebfileInfo; +import io.bazel.rules.closure.webfiles.BuildInfo.Webfiles; +import io.bazel.rules.closure.webfiles.BuildInfo.WebfilesSource; +import io.bazel.rules.closure.webfiles.WebfilesWriter; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.util.HashSet; +import java.util.Set; +import java.util.zip.Deflater; + +/** + * Simple one-off solution for TensorBoard zipping of web_library rules. + * + *

    This is intended to collect static assets for production web server deployment. The paths of + * files inside the zip will be web paths, with the prefix slash removed. These files will be + * topologically ordered, i.e. web files higher up in the build tree come first. + */ +public final class Zipper { + + public static void main(String[] args) throws IOException { + Set alreadyZipped = new HashSet<>(); + try (WebfilesWriter writer = + new WebfilesWriter( + Files.newByteChannel( + Paths.get(args[0]), + StandardOpenOption.WRITE, + StandardOpenOption.CREATE, + StandardOpenOption.TRUNCATE_EXISTING), + Deflater.BEST_SPEED)) { + for (int i = 1; i < args.length; i++) { + Webfiles manifest = loadWebfilesPbtxt(Paths.get(args[i])); + for (WebfilesSource src : manifest.getSrcList()) { + if (!alreadyZipped.add(src.getWebpath())) { + continue; + } + try (InputStream input = Files.newInputStream(Paths.get(src.getPath()))) { + writer.writeWebfile( + WebfileInfo.newBuilder().setWebpath(src.getWebpath()).build(), input); + } + } + } + } + } + + private static Webfiles loadWebfilesPbtxt(Path path) throws IOException { + Webfiles.Builder build = Webfiles.newBuilder(); + TextFormat.getParser().merge(new String(Files.readAllBytes(path), UTF_8), build); + return build.build(); + } +} diff --git a/saved_models/tensorboard/tensorboard/java/org/tensorflow/tensorboard/vulcanize/externs.js b/saved_models/tensorboard/tensorboard/java/org/tensorflow/tensorboard/vulcanize/externs.js new file mode 100644 index 0000000000000000000000000000000000000000..f1bbf1e708c5b5567d02cf97e4708f15428cddbb --- /dev/null +++ b/saved_models/tensorboard/tensorboard/java/org/tensorflow/tensorboard/vulcanize/externs.js @@ -0,0 +1,65 @@ +// Copyright 2017 The TensorFlow Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Miscellaneous JSCompiler externs needed for TensorBoard. + * @externs + */ + +/** @type {!Object} */ var _; +/** @type {!Object} */ var d3; +/** @type {!Object} */ var dagre; +/** @type {!Object} */ var numeric; +/** @type {!Object} */ var UMAP; +/** @type {!Object} */ var graphlib; +/** @type {!Object} */ var Plottable; +/** + * @suppress {duplicate} Already in the Closure Compiler builtin externs. + * @type {!Object} + */ +var GroupEffect; +/** @type {!Object} */ var module; +/** @type {!Object} */ var exports; +/** @type {!Object} */ var define; +/** @type {!Object} */ var global; +/** @type {!Object} */ var tf; +/** @type {!Object} */ var mobilenet; +/** @type {!Function|undefined} */ var ga; +/** + * @suppress {duplicate} Already in the Closure Compiler builtin externs. + * @type {!Function|undefined} + */ +var KeyframeEffect; +/** @type {!Object} */ var tensor_widget; +/** @type {!Object} */ var tb_plugin_lib; + +/** + * Some weird webcomponents-lite.js thing. + * @type {!Function|undefined} + */ +var wrap; + +/** + * Some weird webcomponents-lite.js thing. + * @type {!Function|undefined} + */ +window.wrap; + +var HTMLImports; + +/** + * @param {function()} callback + * @param {!HTMLDocument=} opt_doc + */ +HTMLImports.whenReady = function (callback, opt_doc) {}; diff --git a/saved_models/tensorboard/tensorboard/pip_package/BUILD b/saved_models/tensorboard/tensorboard/pip_package/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..168232da46268c659e79e2e9076b0775bef110a3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/pip_package/BUILD @@ -0,0 +1,124 @@ +# Description: +# Tools for building the TensorBoard pip package. + +package(default_visibility = ["//visibility:private"]) + +licenses(["notice"]) + +genrule( + name = "pip_package", + # Pip packages are provided in a tarball because we can't statically + # know the file names: they must contain the TensorBoard version, + # which is only defined in a Python module. Dependents of this + # target can extract the tarball and glob its contents. + outs = ["pip_packages.tar.gz"], + cmd = "$(execpath :build_pip_package) $@", + tools = [ + ":build_pip_package", + ], + visibility = ["//tensorboard:internal"], +) + +sh_binary( + name = "extract_pip_package", + srcs = ["extract_pip_package.sh"], + data = [":pip_package"], +) + +sh_binary( + name = "build_pip_package", + srcs = ["build_pip_package.sh"], + data = [ + "LICENSE", + "MANIFEST.in", + "README.rst", + "requirements.txt", + "setup.cfg", + "setup.py", + ":deterministic_tar_gz", + "//tensorboard", # Main tensorboard binary and everything it uses + "//tensorboard:lib", # User-facing overall TensorBoard API + "//tensorboard:version", # Version module (read by setup.py) + "//tensorboard/data/experimental:experiment_from_dev", + "//tensorboard/plugins/hparams", # User-facing hparams API + "//tensorboard/plugins/mesh", # User-facing mesh API + "//tensorboard/plugins/projector", # User-facing projector API + "//tensorboard/summary:tf_summary", # tf.summary API for TF 2.0 + ], +) + +# Not an `sh_test`: accepts command-line flags to select Python and +# TensorFlow versions against which to test. Pass `--help` for details. +sh_binary( + name = "test_pip_package", + srcs = ["test_pip_package.sh"], + data = [ + ":pip_package", + ], +) + +py_binary( + name = "deterministic_tar_gz", + srcs = ["deterministic_tar_gz.py"], + srcs_version = "PY2AND3", +) + +py_test( + name = "deterministic_tar_gz_test", + size = "medium", + timeout = "short", + srcs = ["deterministic_tar_gz_test.py"], + data = [ + ":deterministic_tar_gz", # invoked as subprocess + ], + srcs_version = "PY2AND3", + deps = [ + "//tensorboard:test", + ], +) + +genrule( + name = "license", + srcs = [ + "LICENSE.tensorflow", + "@org_polymer//:LICENSE.txt", + "@com_palantir_plottable//:package/LICENSE", + "@npm//:node_modules/d3/LICENSE", + "@io_github_cpettitt_dagre//:LICENSE", + "@io_github_cpettitt_graphlib//:LICENSE", + "@com_numericjs//:license.txt", + "@org_threejs//:LICENSE", + "@com_lodash//:LICENSE", + "@com_google_fonts_roboto//:LICENSE", + "@org_mozilla_bleach//:LICENSE", + "@org_html5lib//:LICENSE", + "@org_pythonhosted_webencodings//:LICENSE", + "//third_party:bh_tsne.LICENSE", + ], + outs = ["LICENSE"], + cmd = "\n".join([ + "(", + " echo '#' TensorBoard License", + " echo", + " echo TensorBoard is licensed Apache 2.0 and distributed with", + " echo vendored content licensed Apache 2.0, MIT, and BSD-3.", + " echo", + " echo '##' Table of Contents", + " echo", + " for src in $(SRCS); do", + " echo '-' $$src", + " done", + " echo", + " echo '##' Licenses", + " for src in $(SRCS); do", + " echo", + " echo", + " echo", + " echo '###' $$src", + " echo", + " cat $$src", + " done", + "", + ") >$@", + ]), +) diff --git a/saved_models/tensorboard/tensorboard/pip_package/LICENSE.tensorflow b/saved_models/tensorboard/tensorboard/pip_package/LICENSE.tensorflow new file mode 100644 index 0000000000000000000000000000000000000000..15ae42140452d32ccf929f59f7eca01a3c7b555f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/pip_package/LICENSE.tensorflow @@ -0,0 +1,203 @@ +Copyright 2017 The TensorFlow Authors. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2017, The TensorFlow Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/saved_models/tensorboard/tensorboard/pip_package/MANIFEST.in b/saved_models/tensorboard/tensorboard/pip_package/MANIFEST.in new file mode 100644 index 0000000000000000000000000000000000000000..d3041d753e54ae47b726884812c7f342ed0c36e8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/pip_package/MANIFEST.in @@ -0,0 +1,3 @@ +include LICENSE +include README.rst +graft tensorboard diff --git a/saved_models/tensorboard/tensorboard/pip_package/README.rst b/saved_models/tensorboard/tensorboard/pip_package/README.rst new file mode 100644 index 0000000000000000000000000000000000000000..9db2b45b6bd242c67e03e719f2c35615021cf117 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/pip_package/README.rst @@ -0,0 +1,5 @@ +TensorBoard is a suite of web applications for inspecting and understanding +your TensorFlow runs and graphs. + +Releases prior to 1.6.0 were published under the ``tensorflow-tensorboard`` name +and may be found at https://pypi.python.org/pypi/tensorflow-tensorboard. diff --git a/saved_models/tensorboard/tensorboard/pip_package/__init__.py b/saved_models/tensorboard/tensorboard/pip_package/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..85c94f4b6bd7567796755895505a320405a40777 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/pip_package/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2017 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== diff --git a/saved_models/tensorboard/tensorboard/pip_package/build_pip_package.sh b/saved_models/tensorboard/tensorboard/pip_package/build_pip_package.sh new file mode 100644 index 0000000000000000000000000000000000000000..ef8df0104dcd7350bd61262a2d66ab52dde68d88 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/pip_package/build_pip_package.sh @@ -0,0 +1,138 @@ +#!/bin/sh +# Copyright 2015 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +usage() { + cat <&1 + return 1 + fi + output="$1" + + if [ -z "${RUNFILES+set}" ]; then + RUNFILES="$(CDPATH="" cd -- "$0.runfiles" && pwd)" + fi + + if [ "$(uname)" = "Darwin" ]; then + workdir="$(mktemp -d -t tensorboard-pip)" + else + workdir="$(mktemp -d -p /tmp -t tensorboard-pip.XXXXXXXXXX)" + fi + original_wd="${PWD}" + cd "${workdir}" || return 2 + + cleanup() { + rm -r "${workdir}" + } + trap cleanup EXIT + + log_file="${workdir}/log" + build >"${log_file}" 2>&1 + exit_code=$? + if [ "${exit_code}" -ne 0 ]; then + cat "${log_file}" >&2 + fi + return "${exit_code}" +} + +build() ( + set -eux + if [ "$(uname)" = "Darwin" ]; then + sedi="sed -i ''" + else + sedi="sed -i" + fi + + command -v virtualenv >/dev/null + [ -d "${RUNFILES}" ] + + cp -LR "${RUNFILES}/org_tensorflow_tensorboard/tensorboard" . + mv -f "tensorboard/pip_package/LICENSE" . + mv -f "tensorboard/pip_package/MANIFEST.in" . + mv -f "tensorboard/pip_package/README.rst" . + mv -f "tensorboard/pip_package/requirements.txt" . + mv -f "tensorboard/pip_package/setup.cfg" . + mv -f "tensorboard/pip_package/setup.py" . + rm -rf "tensorboard/pip_package" + + rm -f tensorboard/tensorboard # bazel py_binary sh wrapper + chmod -x LICENSE # bazel symlinks confuse cp + find . -name __init__.py -exec chmod -x {} + # which goes for all genfiles + + mkdir -p tensorboard/_vendor + >tensorboard/_vendor/__init__.py + cp -LR "${RUNFILES}/org_html5lib/html5lib" tensorboard/_vendor + cp -LR "${RUNFILES}/org_mozilla_bleach/bleach" tensorboard/_vendor + cp -LR "${RUNFILES}/org_pythonhosted_webencodings/webencodings" tensorboard/_vendor + + chmod -R u+w,go+r . + + find tensorboard -name \*.py -exec $sedi -e ' + s/^import html5lib$/from tensorboard._vendor import html5lib/ + s/^from html5lib/from tensorboard._vendor.html5lib/ + s/^import bleach$/from tensorboard._vendor import bleach/ + s/^from bleach/from tensorboard._vendor.bleach/ + s/^import webencodings$/from tensorboard._vendor import webencodings/ + s/^from webencodings/from tensorboard._vendor.webencodings/ + ' {} + + + virtualenv -q -p python3 venv + export VIRTUAL_ENV=venv + export PATH="${PWD}/venv/bin:${PATH}" + unset PYTHON_HOME + + # Require wheel for bdist_wheel command, and setuptools 36.2.0+ so that + # env markers are handled (https://github.com/pypa/setuptools/pull/1081) + export PYTHONWARNINGS=ignore:DEPRECATION # suppress Python 2.7 deprecation spam + pip install -qU wheel 'setuptools>=36.2.0' + + # Overrides file timestamps in the zip archive to make the build + # reproducible. (Date is mostly arbitrary, but must be past 1980 to be + # representable in a zip archive.) + export SOURCE_DATE_EPOCH=1577836800 # 2020-01-01T00:00:00Z + + python setup.py bdist_wheel --python-tag py3 >/dev/null + + cd "${original_wd}" # Bazel gives "${output}" as a relative path >_> + case "${output}" in + *.tar.gz) + mkdir -p "$(dirname "${output}")" + "${RUNFILES}/org_tensorflow_tensorboard/tensorboard/pip_package/deterministic_tar_gz" \ + "${output}" "${workdir}"/dist/*.whl + ;; + *) + if ! [ -d "${output}" ]; then + printf >&2 'fatal: no such output directory: %s\n' "${output}" + return 1 + fi + mv "${workdir}"/dist/*.whl "${output}" + ;; + esac +) + +main "$@" diff --git a/saved_models/tensorboard/tensorboard/pip_package/deterministic_tar_gz.py b/saved_models/tensorboard/tensorboard/pip_package/deterministic_tar_gz.py new file mode 100644 index 0000000000000000000000000000000000000000..7ab5cbe959d101ce4e0c096e4cbe02e2807f1aed --- /dev/null +++ b/saved_models/tensorboard/tensorboard/pip_package/deterministic_tar_gz.py @@ -0,0 +1,98 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# +# Much of this module is forked from Servo's `command_base.py`, +# originally written by Anton Ovchinnikov and also provided under the +# Apache-2.0 License: +# +# https://github.com/servo/servo/blob/d9fdf42bfe53dab08ba38fcdb349e84355f4cb3e/python/servo/command_base.py +# https://github.com/servo/servo/pull/12244 +# +"""Generate `.tar.gz` archives deterministically. + +Some differences from `tar czf ARCHIVE [FILES]...`: + + - Timestamps (modification time, access time) are omitted. + - Owners and groups are omitted. + - Archive entries are not prefixed with the directory name or path. + - Dirnames are stripped. + +See . +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import argparse +import gzip +import os +import sys +import tarfile + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + "archive", + metavar="ARCHIVE", + help="name for the output `.tar.gz` archive", + ) + parser.add_argument( + "files", + metavar="files", + nargs="*", + help="files to include in the archive; basenames must be distinct", + ) + args = parser.parse_args() + archive = args.archive + files = args.files + del args + + if len(frozenset(os.path.basename(f) for f in files)) != len(files): + sys.stderr.write("Input basenames must be distinct; got: %r\n" % files) + sys.exit(1) + + # (`fd` will be closed by `fdopen` context manager below) + fd = os.open(archive, os.O_WRONLY | os.O_CREAT, 0o644) + with os.fdopen(fd, "wb") as out_file, gzip.GzipFile( + "wb", fileobj=out_file, mtime=0 + ) as gzip_file, tarfile.open(fileobj=gzip_file, mode="w:") as tar_file: + for f in files: + arcname = os.path.basename(f) + tar_file.add(f, filter=cleanse, recursive=False, arcname=arcname) + + +def cleanse(tarinfo): + """Cleanse sources of nondeterminism from tar entries. + + To be passed as the `filter` kwarg to `tarfile.TarFile.add`. + + Args: + tarinfo: A `tarfile.TarInfo` object to be mutated. + + Returns: + The same `tarinfo` object, but mutated. + """ + tarinfo.uid = 0 + tarinfo.gid = 0 + tarinfo.uname = "root" + tarinfo.gname = "root" + tarinfo.mtime = 0 + return tarinfo + + +if __name__ == "__main__": + main() diff --git a/saved_models/tensorboard/tensorboard/pip_package/deterministic_tar_gz_test.py b/saved_models/tensorboard/tensorboard/pip_package/deterministic_tar_gz_test.py new file mode 100644 index 0000000000000000000000000000000000000000..d62ddab8234778221e17a935979780fdf9236754 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/pip_package/deterministic_tar_gz_test.py @@ -0,0 +1,118 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +"""End-to-end tests for the `deterministic_tar_gz` tool.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import gzip +import os +import subprocess +import tarfile + +from tensorboard import test as tb_test + + +class DeterministicTarGzTest(tb_test.TestCase): + def setUp(self): + self._tool_path = os.path.join( + os.path.dirname(os.environ["TEST_BINARY"]), "deterministic_tar_gz", + ) + + def _run_tool(self, args): + return subprocess.check_output([self._tool_path] + args) + + def _write_file(self, directory, filename, contents, utime=None): + """Write a file and set its access and modification times. + + Args: + directory: Path to parent directory for the file, as a `str`. + filename: Name of file inside directory, as a `str`. + contents: File contents, as a `str`. + utime: If not `None`, a 2-tuple of numbers (`int`s or `float`s) + representing seconds since epoch for `atime` and `mtime`, + respectively, as in the second argument to `os.utime`. Defaults + to a fixed value; the file's timestamps will always be set. + + Returns: + The new file path. + """ + filepath = os.path.join(directory, filename) + with open(filepath, "w") as outfile: + outfile.write(contents) + if utime is None: + utime = (123, 456) + os.utime(filepath, utime) + return filepath + + def test_correct_contents(self): + tempdir = self.get_temp_dir() + archive = os.path.join(tempdir, "out.tar.gz") + directory = os.path.join(tempdir, "src") + os.mkdir(directory) + self._run_tool( + [ + archive, + self._write_file(directory, "1.txt", "one"), + self._write_file(directory, "2.txt", "two"), + ] + ) + with gzip.open(archive) as gzip_file: + with tarfile.open(fileobj=gzip_file, mode="r:") as tar_file: + self.assertEqual( + tar_file.getnames(), ["1.txt", "2.txt"] + ) # in order + self.assertEqual(tar_file.extractfile("1.txt").read(), b"one") + self.assertEqual(tar_file.extractfile("2.txt").read(), b"two") + + def test_invariant_under_mtime(self): + tempdir = self.get_temp_dir() + + archive_1 = os.path.join(tempdir, "out_1.tar.gz") + directory_1 = os.path.join(tempdir, "src_1") + os.mkdir(directory_1) + self._run_tool( + [ + archive_1, + self._write_file(directory_1, "1.txt", "one", utime=(1, 2)), + self._write_file(directory_1, "2.txt", "two", utime=(3, 4)), + ] + ) + + archive_2 = os.path.join(tempdir, "out_2.tar.gz") + directory_2 = os.path.join(tempdir, "src_2") + os.mkdir(directory_2) + self._run_tool( + [ + archive_2, + self._write_file(directory_2, "1.txt", "one", utime=(7, 8)), + self._write_file(directory_2, "2.txt", "two", utime=(5, 6)), + ] + ) + + with open(archive_1, "rb") as infile: + archive_1_contents = infile.read() + with open(archive_2, "rb") as infile: + archive_2_contents = infile.read() + + self.assertEqual(archive_1_contents, archive_2_contents) + + def test_invariant_under_owner_and_group_names(self): + self.skipTest("Can't really test this; no way to chown.") + + +if __name__ == "__main__": + tb_test.main() diff --git a/saved_models/tensorboard/tensorboard/pip_package/extract_pip_package.sh b/saved_models/tensorboard/tensorboard/pip_package/extract_pip_package.sh new file mode 100644 index 0000000000000000000000000000000000000000..7db58df354ecdc3c18274b769ec9a1bb26e006ac --- /dev/null +++ b/saved_models/tensorboard/tensorboard/pip_package/extract_pip_package.sh @@ -0,0 +1,44 @@ +#!/bin/sh +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -eu + +usage() { + cat <<'EOF' +usage: extract_pip_package [OUTPUT_DIR] + +Extract TensorBoard wheel files into a given directory. + +If OUTPUT_DIR is omitted, a temporary directory will be created, and its +path and contents printed to stdout. +EOF +} + +tarball="$0.runfiles/org_tensorflow_tensorboard/tensorboard/pip_package/pip_packages.tar.gz" + +case $# in + 0) + tmpdir="$(mktemp -d)" + tar xzf "${tarball}" -C "${tmpdir}" + find "${tmpdir}" + ;; + 1) + tar xzf "${tarball}" -C "$1" + ;; + *) + usage >&2 + exit 1 + ;; +esac diff --git a/saved_models/tensorboard/tensorboard/pip_package/requirements.txt b/saved_models/tensorboard/tensorboard/pip_package/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..de7f1340e0c3b6d1061c62bcbc8e9b8548afe160 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/pip_package/requirements.txt @@ -0,0 +1,34 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== + +# Non-vendored runtime dependencies of TensorBoard. + +absl-py >= 0.4 +# futures is a backport of the python 3.2+ concurrent.futures module +futures >= 3.1.1; python_version < "3" +grpcio >= 1.24.3 +google-auth >= 1.6.3, < 2 +google-auth-oauthlib >= 0.4.1, < 0.5 +markdown >= 2.6.8 +numpy >= 1.12.0 +protobuf >= 3.6.0 +requests >= 2.21.0, < 3 +setuptools >= 41.0.0 +six >= 1.10.0 +tensorboard-plugin-wit >= 1.6.0 +werkzeug >= 0.11.15 +# python3 specifically requires wheel 0.26 +wheel; python_version < "3" +wheel >= 0.26; python_version >= "3" diff --git a/saved_models/tensorboard/tensorboard/pip_package/requirements_dev.txt b/saved_models/tensorboard/tensorboard/pip_package/requirements_dev.txt new file mode 100644 index 0000000000000000000000000000000000000000..cd4679cde89f3ce11e19060819907a0796ed201f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/pip_package/requirements_dev.txt @@ -0,0 +1,31 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== + +# Dependencies of TensorBoard used only for testing or development. + +# For tests +grpcio-testing==1.24.3 +pandas==1.0.3 +# For gfile S3 test +boto3==1.9.86 +moto==1.3.7 + +# For linting +black==19.10b0; python_version >= "3.6" +flake8==3.7.8 +yamllint==1.17.0 + +# For building Pip package +virtualenv==20.0.31 diff --git a/saved_models/tensorboard/tensorboard/pip_package/setup.cfg b/saved_models/tensorboard/tensorboard/pip_package/setup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d47f3a41f36fe085156989d039bada2a7b76739f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/pip_package/setup.cfg @@ -0,0 +1,3 @@ +[metadata] +description-file = README.rst +license_file = LICENSE diff --git a/saved_models/tensorboard/tensorboard/pip_package/setup.py b/saved_models/tensorboard/tensorboard/pip_package/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..f4db0fa22fef40d387ac08db9c7fb7f5235ea9e5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/pip_package/setup.py @@ -0,0 +1,89 @@ +# Copyright 2017 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from setuptools import find_packages, setup + +import tensorboard.version + + +def get_required_packages(): + with open("requirements.txt") as f: + return f.read().splitlines() + + +def get_readme(): + with open("README.rst") as f: + return f.read() + + +REQUIRED_PACKAGES = get_required_packages() + +CONSOLE_SCRIPTS = [ + "tensorboard = tensorboard.main:run_main", +] + +setup( + name="tensorboard", + version=tensorboard.version.VERSION.replace("-", ""), + description="TensorBoard lets you watch Tensors Flow", + long_description=get_readme(), + url="https://github.com/tensorflow/tensorboard", + author="Google Inc.", + author_email="packages@tensorflow.org", + # Contained modules and scripts. + packages=find_packages(), + entry_points={ + "console_scripts": CONSOLE_SCRIPTS, + "tensorboard_plugins": [ + "projector = tensorboard.plugins.projector.projector_plugin:ProjectorPlugin", + ], + }, + package_data={ + "tensorboard": ["webfiles.zip",], + # Must keep this in sync with tf_projector_plugin:projector_assets + "tensorboard.plugins.projector": [ + "tf_projector_plugin/index.js", + "tf_projector_plugin/projector_binary.html", + "tf_projector_plugin/projector_binary.js", + ], + }, + # Disallow python 3.0 and 3.1 which lack a 'futures' module (see above). + python_requires=">= 2.7, != 3.0.*, != 3.1.*", + install_requires=REQUIRED_PACKAGES, + tests_require=REQUIRED_PACKAGES, + # PyPI package information. + classifiers=[ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + ], + license="Apache 2.0", + keywords="tensorflow tensorboard tensor machine learning visualizer", +) diff --git a/saved_models/tensorboard/tensorboard/pip_package/test_pip_package.sh b/saved_models/tensorboard/tensorboard/pip_package/test_pip_package.sh new file mode 100644 index 0000000000000000000000000000000000000000..738d5cd4dd4a95c4cdd147cedb6290bfc67aa401 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/pip_package/test_pip_package.sh @@ -0,0 +1,194 @@ +#!/bin/sh +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -eu + +usage() { + cat </dev/null + command -v perl >/dev/null + command -v virtualenv >/dev/null + initialize_workdir + extract_wheels + smoke python3 +} + +cleanup() { + if [ -n "${workdir+set}" ]; then + rm -rf "${workdir}" + fi +} + +parse_args() { + tf_version=tf-nightly + pythons=all + while [ "$#" -gt 0 ]; do + case "$1" in + --help) + usage + exit 2 + ;; + --tf-version) + if [ $# -lt 2 ]; then + printf >&2 'fatal: --tf-version given without argument\n' + usage >&2 + exit 1 + fi + tf_version="$2" + shift + shift + ;; + *) + printf >&2 'fatal: unknown argument "%s"' "$1" + usage >&2 + exit 1 + ;; + esac + done + if [ -z "${RUNFILES+set}" ]; then + RUNFILES="$(CDPATH="" cd -- "$0.runfiles" && pwd)" + fi +} + +initialize_workdir() { + workdir="$(mktemp -d)" + wheels="${workdir}/wheels" + virtualenvs_root="${workdir}/virtualenvs" + mkdir -p "${wheels}" "${virtualenvs_root}" +} + +# Extract '*.whl' files from runfiles and put them into "${wheels}". +extract_wheels() { + tar xzvf \ + "${RUNFILES}/org_tensorflow_tensorboard/tensorboard/pip_package/pip_packages.tar.gz" \ + -C "${wheels}" +} + +# smoke PYTHON_BINARY: Run smoke tests against the provided Python. +smoke() ( + [ $# -eq 1 ] + smoke_python="$1" + py_major_version="$( + "${smoke_python}" -c 'import sys; print(sys.version_info[0])' + )" + + smoke_venv="${virtualenvs_root}/venv-${smoke_python}/" + set +x + printf '\n\n%70s\n' '' | tr ' ' '=' + if [ -z "${tf_version}" ]; then + echo "Smoke testing with ${smoke_python} and no tensorflow..." + else + echo "Smoke testing with ${smoke_python} and ${tf_version}..." + fi + printf '\n' + set -x + + command -v "${smoke_python}" >/dev/null + virtualenv -q -p "${smoke_python}" "${smoke_venv}" + cd "${smoke_venv}" + + export VIRTUAL_ENV=venv + export PATH="${smoke_venv}/bin:${PATH}" + unset PYTHON_HOME + pip install -qU pip + + if [ -n "${tf_version}" ]; then + pip install -qU "${tf_version}" + pip uninstall -qy tensorboard tb-nightly # Drop any conflicting packages + fi + pip install -qU "${wheels}"/*py"${py_major_version}"*.whl + pip freeze # Log the results of pip installation + + # Test TensorBoard application + [ -x ./bin/tensorboard ] # Ensure pip package included binary + mkfifo pipe + tensorboard --port=0 --logdir=smokedir 2>pipe & + perl -ne 'print STDERR;/http:.*:(\d+)/ and print $1.v10 and exit 0' port + curl -fs "http://localhost:$(cat port)" >index.html + grep 'logdir.json + grep 'smokedir' logdir.json + curl -fs "http://localhost:$(cat port)/data/plugin/projector/runs" >projector_runs.json + # logdir does not contain any checkpoints and thus an empty runs. + grep '\[\]' projector_runs.json + curl -fs "http://localhost:$(cat port)/data/plugin/projector/projector_binary.html" >projector_binary.html + grep '/dev/null 2>&1 + } + if is_tf_2; then + test_tf_summary '' + fi + fi +) + +# Exhaustively test various sequences of importing tf.summary. +test_tf_summary() { + # First argument is subpath to test, e.g. '' or '.compat.v2'. + import_attr="import tensorflow as tf; a = tf${1}.summary; a.write; a.scalar" + import_as="import tensorflow${1}.summary as b; b.write; b.scalar" + import_from="from tensorflow${1} import summary as c; c.write; c.scalar" + printf '%s\n' "${import_attr}" "${import_as}" "${import_from}" | python - + printf '%s\n' "${import_attr}" "${import_from}" "${import_as}" | python - + printf '%s\n' "${import_as}" "${import_attr}" "${import_from}" | python - + printf '%s\n' "${import_as}" "${import_from}" "${import_attr}" | python - + printf '%s\n' "${import_from}" "${import_attr}" "${import_as}" | python - + printf '%s\n' "${import_from}" "${import_as}" "${import_attr}" | python - +} + +main "$@" diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/BUILD b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..0f8f211d1e9fc2ffc0cf580d0c9cefbd048e0a69 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/BUILD @@ -0,0 +1,176 @@ +load("//tensorboard/defs:defs.bzl", "tf_js_binary", "tf_ts_library") +load("//tensorboard/defs:web.bzl", "tf_web_library") +load("//tensorboard/defs:vulcanize.bzl", "tensorboard_html_binary") +load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary") +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "vz_projector", + srcs = [ + "analyticsLogger.ts", + "bundle.ts", + "data.ts", + "data-provider.ts", + "data-provider-demo.ts", + "data-provider-proto.ts", + "data-provider-server.ts", + "external.d.ts", + "knn.ts", + "label.ts", + "logging.ts", + "projectorEventContext.ts", + "projectorScatterPlotAdapter.ts", + "renderContext.ts", + "scatterPlot.ts", + "scatterPlotRectangleSelector.ts", + "scatterPlotVisualizer.ts", + "scatterPlotVisualizer3DLabels.ts", + "scatterPlotVisualizerCanvasLabels.ts", + "scatterPlotVisualizerPolylines.ts", + "scatterPlotVisualizerSprites.ts", + "scatterPlotVisualizerTriangles.ts", + "scatterPlotVisualizerTraceLine.ts", + "styles.ts", + "util.ts", + "vector.ts", + "vz-projector.html.ts", + "vz-projector.ts", + "vz-projector-app.ts", + "vz-projector-bookmark-panel.html.ts", + "vz-projector-bookmark-panel.ts", + "vz-projector-dashboard.ts", + "vz-projector-data-panel.html.ts", + "vz-projector-data-panel.ts", + "vz-projector-input.ts", + "vz-projector-inspector-panel.html.ts", + "vz-projector-inspector-panel.ts", + "vz-projector-legend.ts", + "vz-projector-metadata-card.ts", + "vz-projector-projections-panel.html.ts", + "vz-projector-projections-panel.ts", + "vz-login-app.ts", + "vz-comparator.ts", + "vz-comparator.html.ts", + "vz-comparator-container.ts", + "vz-projector-container.ts", + "globalState.ts" + ], + strict_checks = False, + deps = [ + ":bh_tsne", + ":heap", + ":sptree", + "//tensorboard/components:analytics", + "//tensorboard/components:security", + "//tensorboard/components/polymer:irons_and_papers", + "//tensorboard/components/polymer:legacy_element_mixin", + "//tensorboard/components/polymer:register_style_dom_module", + "//tensorboard/components/tf_wbr_string", + "//tensorboard/webapp/third_party:tfjs", + "@npm//@polymer/decorators", + "@npm//@polymer/polymer", + "@npm//d3", + "@npm//three", + "@npm//umap-js", + "@npm//search-query-parser", + + ], +) + +tf_ts_library( + name = "heap", + srcs = ["heap.ts"], + strict_checks = False, +) + +tf_ts_library( + name = "sptree", + srcs = ["sptree.ts"], + strict_checks = False, +) + +tf_ts_library( + name = "bh_tsne", + srcs = ["bh_tsne.ts"], + strict_checks = False, + deps = [":sptree"], +) + +tf_js_binary( + name = "standalone_bundle", + compile = 1, + entry_point = "bundle.ts", + deps = [ + ":vz_projector", + + ], +) + +################# Standalone development ################# + +tf_web_library( + name = "standalone_lib", + srcs = [ + "standalone_lib.html", + "standalone_projector_config.json", + ":standalone_bundle.js", + ], + path = "/", + deps = [ + "//tensorboard/components/tf_imports:roboto", + + ], +) + +tensorboard_html_binary( + name = "standalone", + compile = True, + input_path = "/standalone_lib.html", + js_path = "/standalone.js", + output_path = "/standalone.html", + deps = [ + ":standalone_lib", + + ], +) + +# genrule( +# name = "webpack_build", +# srcs = [":vz_projector"], +# outs = ["bundle_min.js"], +# cmd = "cd $(@D) && node_modules/.bin/webpack --config $(location :webpack_config)", +# tools = [":webpack_config", ":node_modules"] +# ) + +genrule( + name = "minify_js", + srcs = [":webpack_bundle"], + outs = ["shrink-bin/bundle.min.js"], # This should match the output file specified in webpack.config.js + cmd = "$(location :webpack_bundle) && cp shrink-bin/bundle.min.js $@", # Use the minified file +) + +nodejs_binary( + name = "webpack_bundle", + entry_point = "//webpack.config.js", + data = [ + ":tensorboard_html_binary", # If tf_js_binary encapsulates all the JS/TS sources + "@npm//webpack", + "@npm//webpack-cli", + "@npm//terser-webpack-plugin", + # ... other dependencies ... + ], + +) + +# filegroup( +# name = "webpack_config", +# srcs = ["webpack_"], +# ) + +# filegroup( +# name = "node_modules", +# srcs = [ "tf_wbr_string"] +# ) + diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/analyticsLogger.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/analyticsLogger.ts new file mode 100644 index 0000000000000000000000000000000000000000..a6a533db2331cceae087c2c05c8e5935d9547c37 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/analyticsLogger.ts @@ -0,0 +1,63 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ProjectionType} from './data'; + +export class AnalyticsLogger { + private eventLogging: boolean; + private pageViewLogging: boolean; + /** + * Constructs an event logger using Google Analytics. It assumes there is a + * Google Analytics script added to the page elsewhere. If there is no such + * script, the logger acts as a no-op. + * + * @param pageViewLogging Whether to log page views. + * @param eventLogging Whether to log user interaction. + */ + constructor(pageViewLogging: boolean, eventLogging: boolean) { + if (typeof ga === 'undefined' || ga == null) { + this.eventLogging = false; + this.pageViewLogging = false; + return; + } + this.eventLogging = eventLogging; + this.pageViewLogging = pageViewLogging; + } + logPageView(pageTitle: string) { + if (this.pageViewLogging) { + // Always send a page view. + ga('send', {hitType: 'pageview', page: `/v/${pageTitle}`}); + } + } + logProjectionChanged(projection: ProjectionType) { + if (this.eventLogging) { + ga('send', { + hitType: 'event', + eventCategory: 'Projection', + eventAction: 'click', + eventLabel: projection, + }); + } + } + logWebGLDisabled() { + if (this.eventLogging) { + ga('send', { + hitType: 'event', + eventCategory: 'Error', + eventAction: 'PageLoad', + eventLabel: 'WebGL_disabled', + }); + } + } +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/bh_tsne.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/bh_tsne.ts new file mode 100644 index 0000000000000000000000000000000000000000..e55a17f2ad958ae8c62677ad5f4f5872854bca5c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/bh_tsne.ts @@ -0,0 +1,549 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * This is a fork of the Karpathy's TSNE.js (original license below). + * This fork implements Barnes-Hut approximation and runs in O(NlogN) + * time, as opposed to the Karpathy's O(N^2) version. + * + * Please refer to third_party/bh_tsne.LICENSE for the original license. + * + * @author smilkov@google.com (Daniel Smilkov) + */ + +import {SPNode, SPTree} from './sptree'; + +type AugmSPNode = SPNode & { + numCells: number; + yCell: number[]; + rCell: number; +}; +/** + * Barnes-hut approximation level. Higher means more approximation and faster + * results. Recommended value mentioned in the paper is 0.8. + */ +const THETA = 0.8; +const MIN_POSSIBLE_PROB = 1e-9; +// Variables used for memorizing the second random number since running +// gaussRandom() generates two random numbers at the cost of 1 atomic +// computation. This optimization results in 2X speed-up of the generator. +let return_v = false; +let v_val = 0; +/** Returns the square euclidean distance between two vectors. */ +export function dist2(a: number[], b: number[]): number { + if (a.length !== b.length) { + throw new Error('Vectors a and b must be of same length'); + } + let result = 0; + for (let i = 0; i < a.length; ++i) { + let diff = a[i] - b[i]; + result += diff * diff; + } + return result; +} +/** Returns the square euclidean distance between two 2D points. */ +export function dist2_2D(a: number[], b: number[]): number { + let dX = a[0] - b[0]; + let dY = a[1] - b[1]; + return dX * dX + dY * dY; +} +/** Returns the square euclidean distance between two 3D points. */ +export function dist2_3D(a: number[], b: number[]): number { + let dX = a[0] - b[0]; + let dY = a[1] - b[1]; + let dZ = a[2] - b[2]; + return dX * dX + dY * dY + dZ * dZ; +} +function gaussRandom(rng: () => number): number { + if (return_v) { + return_v = false; + return v_val; + } + let u = 2 * rng() - 1; + let v = 2 * rng() - 1; + let r = u * u + v * v; + if (r === 0 || r > 1) { + return gaussRandom(rng); + } + let c = Math.sqrt((-2 * Math.log(r)) / r); + v_val = v * c; // cache this for next function call for efficiency + return_v = true; + return u * c; +} +// return random normal number +function randn(rng: () => number, mu: number, std: number) { + return mu + gaussRandom(rng) * std; +} +// utilitity that creates contiguous vector of zeros of size n +function zeros(n: number): Float64Array { + return new Float64Array(n); +} +// utility that returns a matrix filled with random numbers +// generated by the provided generator. +function randnMatrix(n: number, d: number, rng: () => number) { + let nd = n * d; + let x = zeros(nd); + for (let i = 0; i < nd; ++i) { + x[i] = randn(rng, 0, 0.0001); + } + return x; +} +// utility that returns a matrix filled with the provided value. +function arrayofs(n: number, d: number, val: number) { + let x: number[][] = []; + for (let i = 0; i < n; ++i) { + x.push(d === 3 ? [val, val, val] : [val, val]); + } + return x; +} +// compute (p_{i|j} + p_{j|i})/(2n) +function nearest2P( + nearest: { + index: number; + dist: number; + }[][], + perplexity: number, + tol: number +) { + let N = nearest.length; + let Htarget = Math.log(perplexity); // target entropy of distribution + let P = zeros(N * N); // temporary probability matrix + let K = nearest[0].length; + let pRow: number[] = new Array(K); // pij[]. + for (let i = 0; i < N; ++i) { + let neighbors = nearest[i]; + let betaMin = -Infinity; + let betaMax = Infinity; + let beta = 1; // initial value of precision + let maxTries = 50; + // perform binary search to find a suitable precision beta + // so that the entropy of the distribution is appropriate + let numTries = 0; + while (true) { + // compute entropy and kernel row with beta precision + let psum = 0; + for (let k = 0; k < neighbors.length; ++k) { + let neighbor = neighbors[k]; + let pij = i === neighbor.index ? 0 : Math.exp(-neighbor.dist * beta); + pij = Math.max(pij, MIN_POSSIBLE_PROB); + pRow[k] = pij; + psum += pij; + } + // normalize p and compute entropy + let Hhere = 0; + for (let k = 0; k < pRow.length; ++k) { + pRow[k] /= psum; + let pij = pRow[k]; + if (pij > 1e-7) { + Hhere -= pij * Math.log(pij); + } + } + // adjust beta based on result + if (Hhere > Htarget) { + // entropy was too high (distribution too diffuse) + // so we need to increase the precision for more peaky distribution + betaMin = beta; // move up the bounds + if (betaMax === Infinity) { + beta = beta * 2; + } else { + beta = (beta + betaMax) / 2; + } + } else { + // converse case. make distrubtion less peaky + betaMax = beta; + if (betaMin === -Infinity) { + beta = beta / 2; + } else { + beta = (beta + betaMin) / 2; + } + } + numTries++; + // stopping conditions: too many tries or got a good precision + if (numTries >= maxTries || Math.abs(Hhere - Htarget) < tol) { + break; + } + } + // copy over the final prow to P at row i + for (let k = 0; k < pRow.length; ++k) { + let pij = pRow[k]; + let j = neighbors[k].index; + P[i * N + j] = pij; + } + } // end loop over examples i + // symmetrize P and normalize it to sum to 1 over all ij + let N2 = N * 2; + for (let i = 0; i < N; ++i) { + for (let j = i + 1; j < N; ++j) { + let i_j = i * N + j; + let j_i = j * N + i; + let value = (P[i_j] + P[j_i]) / N2; + P[i_j] = value; + P[j_i] = value; + } + } + return P; +} +// helper function +function sign(x: number) { + return x > 0 ? 1 : x < 0 ? -1 : 0; +} +function computeForce_2d( + force: number[], + mult: number, + pointA: number[], + pointB: number[] +) { + force[0] += mult * (pointA[0] - pointB[0]); + force[1] += mult * (pointA[1] - pointB[1]); +} +function computeForce_3d( + force: number[], + mult: number, + pointA: number[], + pointB: number[] +) { + force[0] += mult * (pointA[0] - pointB[0]); + force[1] += mult * (pointA[1] - pointB[1]); + force[2] += mult * (pointA[2] - pointB[2]); +} +export interface TSNEOptions { + /** How many dimensions. */ + dim: number; + /** Roughly how many neighbors each point influences. */ + perplexity?: number; + /** Learning rate. */ + epsilon?: number; + /** A random number generator. */ + rng?: () => number; +} +export class TSNE { + private perplexity: number; + private epsilon: number; + private superviseFactor: number; + private unlabeledClass: string; + private labels: string[]; + private labelCounts: { + [key: string]: number; + }; + /** Random generator */ + private rng: () => number; + private iter = 0; + private Y: Float64Array; + private N: number; + private P: Float64Array; + private gains: number[][]; + private ystep: number[][]; + private nearest: { + index: number; + dist: number; + }[][]; + private dim: number; + private dist2: (a: number[], b: number[]) => number; + private computeForce: ( + force: number[], + mult: number, + pointA: number[], + pointB: number[] + ) => void; + constructor(opt: TSNEOptions) { + opt = opt || {dim: 2}; + this.perplexity = opt.perplexity || 30; + this.epsilon = opt.epsilon || 10; + this.rng = opt.rng || Math.random; + this.dim = opt.dim; + if (opt.dim === 2) { + this.dist2 = dist2_2D; + this.computeForce = computeForce_2d; + } else if (opt.dim === 3) { + this.dist2 = dist2_3D; + this.computeForce = computeForce_3d; + } else { + throw new Error('Only 2D and 3D is supported'); + } + } + // this function takes a fattened distance matrix and creates + // matrix P from them. + // D is assumed to be provided as an array of size N^2. + initDataDist( + nearest: { + index: number; + dist: number; + }[][] + ) { + let N = nearest.length; + this.nearest = nearest; + this.P = nearest2P(nearest, this.perplexity, 0.0001); + this.N = N; + this.initSolution(); // refresh this + } + // (re)initializes the solution to random + initSolution() { + // generate random solution to t-SNE + this.Y = randnMatrix(this.N, this.dim, this.rng); // the solution + this.gains = arrayofs(this.N, this.dim, 1); // step gains + // to accelerate progress in unchanging directions + this.ystep = arrayofs(this.N, this.dim, 0); // momentum accumulator + this.iter = 0; + } + getDim() { + return this.dim; + } + // return pointer to current solution + getSolution() { + return this.Y; + } + // For each point, randomly offset point within a 5% hypersphere centered + // around it, whilst remaining in the assumed t-SNE plot hypersphere + perturb() { + let N = this.N; + let maxArea = 0; + let ymean = this.dim === 3 ? [0, 0, 0] : [0, 0]; + // Determine radius of t-SNE hypersphere, assumed zero mean and normalized + // dimensions. Here area is proportional to pi*radius^2, to skip root calc. + for (let i = 0; i < N; ++i) { + let area = 0; + for (let d = 0; d < this.dim; ++d) { + area += Math.pow(this.Y[i * this.dim + d], 2); + } + if (area > maxArea) { + maxArea = area; + } + } + let maxRadius = Math.pow(maxArea, 0.5); + for (let i = 0; i < N; ++i) { + let diff = new Array(this.dim); + // Find a perturbation of point that fits inside t-SNE hypersphere + while (true) { + let area = 0; + for (let d = 0; d < this.dim; ++d) { + diff[d] = 0.1 * maxRadius * (Math.random() - 0.5); + area += Math.pow(this.Y[i * this.dim + d] + diff[d], 2); + } + if (area < maxArea) { + break; + } + } + // Apply offset to point + for (let d = 0; d < this.dim; ++d) { + this.Y[i * this.dim + d] += diff[d]; + ymean[d] += this.Y[i * this.dim + d]; + } + } + // reproject Y to be zero mean + for (let i = 0; i < N; ++i) { + for (let d = 0; d < this.dim; ++d) { + this.Y[i * this.dim + d] -= ymean[d] / N; + } + } + } + // perform a single step of optimization to improve the embedding + step() { + this.iter += 1; + let N = this.N; + let grad = this.costGrad(this.Y); // evaluate gradient + // perform gradient step + let ymean = this.dim === 3 ? [0, 0, 0] : [0, 0]; + for (let i = 0; i < N; ++i) { + for (let d = 0; d < this.dim; ++d) { + let gid = grad[i][d]; + let sid = this.ystep[i][d]; + let gainid = this.gains[i][d]; + // compute gain update + let newgain = sign(gid) === sign(sid) ? gainid * 0.8 : gainid + 0.2; + if (newgain < 0.01) { + newgain = 0.01; // clamp + } + this.gains[i][d] = newgain; // store for next turn + // compute momentum step direction + let momval = this.iter < 250 ? 0.5 : 0.8; + let newsid = momval * sid - this.epsilon * newgain * grad[i][d]; + this.ystep[i][d] = newsid; // remember the step we took + // step! + let i_d = i * this.dim + d; + this.Y[i_d] += newsid; + ymean[d] += this.Y[i_d]; // accumulate mean so that we + // can center later + } + } + // reproject Y to be zero mean + for (let i = 0; i < N; ++i) { + for (let d = 0; d < this.dim; ++d) { + this.Y[i * this.dim + d] -= ymean[d] / N; + } + } + } + setSupervision(superviseLabels: string[], superviseInput?: string) { + if (superviseLabels != null) { + this.labels = superviseLabels; + this.labelCounts = {}; + let uniqueEntries = Array.from(new Set(superviseLabels)); + uniqueEntries.forEach((l) => (this.labelCounts[l] = 0)); + superviseLabels.forEach((l) => (this.labelCounts[l] += 1)); + } + if (superviseInput != null) { + this.unlabeledClass = superviseInput; + } + } + setSuperviseFactor(superviseFactor: number) { + if (superviseFactor != null) { + this.superviseFactor = superviseFactor; + } + } + // return cost and gradient, given an arrangement + costGrad(Y: Float64Array): number[][] { + let N = this.N; + let P = this.P; + // Trick that helps with local optima. + let alpha = this.iter < 100 ? 4 : 1; + let superviseFactor = this.superviseFactor / 100; // set in range [0, 1] + let unlabeledClass = this.unlabeledClass; + let labels = this.labels; + let labelCounts = this.labelCounts; + let supervised = + superviseFactor != null && + superviseFactor > 0 && + labels != null && + labelCounts != null; + let unlabeledCount = + supervised && unlabeledClass != null && unlabeledClass !== '' + ? labelCounts[unlabeledClass] + : 0; + // Make data for the SP tree. + let points: number[][] = new Array(N); // (x, y)[] + for (let i = 0; i < N; ++i) { + let iTimesD = i * this.dim; + let row = new Array(this.dim); + for (let d = 0; d < this.dim; ++d) { + row[d] = Y[iTimesD + d]; + } + points[i] = row; + } + // Make a tree. + let tree = new SPTree(points); + let root = tree.root as AugmSPNode; + // Annotate the tree. + let annotateTree = ( + node: AugmSPNode + ): { + numCells: number; + yCell: number[]; + } => { + let numCells = 1; + if (node.children == null) { + // Update the current node and tell the parent. + node.numCells = numCells; + node.yCell = node.point; + return {numCells, yCell: node.yCell}; + } + // node.point is a 2 or 3-dim number[], so slice() makes a copy. + let yCell = node.point.slice(); + for (let i = 0; i < node.children.length; ++i) { + let child = node.children[i]; + if (child == null) { + continue; + } + let result = annotateTree(child as AugmSPNode); + numCells += result.numCells; + for (let d = 0; d < this.dim; ++d) { + yCell[d] += result.yCell[d]; + } + } + // Update the node and tell the parent. + node.numCells = numCells; + node.yCell = yCell.map((v) => v / numCells); + return {numCells, yCell}; + }; + // Augment the tree with more info. + annotateTree(root); + tree.visit((node: AugmSPNode, low: number[], high: number[]) => { + node.rCell = high[0] - low[0]; + return false; + }); + // compute current Q distribution, unnormalized first + let grad: number[][] = []; + let Z = 0; + let sum_pij = 0; + let forces: [number[], number[]][] = new Array(N); + for (let i = 0; i < N; ++i) { + let pointI = points[i]; + if (supervised) { + var sameCount = labelCounts[labels[i]]; + var otherCount = N - sameCount - unlabeledCount; + } + // Compute the positive forces for the i-th node. + let Fpos = this.dim === 3 ? [0, 0, 0] : [0, 0]; + let neighbors = this.nearest[i]; + for (let k = 0; k < neighbors.length; ++k) { + let j = neighbors[k].index; + let pij = P[i * N + j]; + // apply semi-supervised prior probabilities + if (supervised) { + if (labels[i] === unlabeledClass || labels[j] === unlabeledClass) { + pij *= 1 / N; + } else if (labels[i] !== labels[j]) { + pij *= Math.max(1 / N - superviseFactor / otherCount, 1e-7); + } else if (labels[i] === labels[j]) { + pij *= Math.min(1 / N + superviseFactor / sameCount, 1 - 1e-7); + } + sum_pij += pij; + } + let pointJ = points[j]; + let squaredDistItoJ = this.dist2(pointI, pointJ); + let premult = pij / (1 + squaredDistItoJ); + this.computeForce(Fpos, premult, pointI, pointJ); + } + // Compute the negative forces for the i-th node. + let FnegZ = this.dim === 3 ? [0, 0, 0] : [0, 0]; + tree.visit((node: AugmSPNode) => { + let squaredDistToCell = this.dist2(pointI, node.yCell); + // Squared distance from point i to cell. + if ( + node.children == null || + (squaredDistToCell > 0 && + node.rCell / Math.sqrt(squaredDistToCell) < THETA) + ) { + let qijZ = 1 / (1 + squaredDistToCell); + let dZ = node.numCells * qijZ; + Z += dZ; + dZ *= qijZ; + this.computeForce(FnegZ, dZ, pointI, node.yCell); + return true; + } + // Cell is too close to approximate. + let squaredDistToPoint = this.dist2(pointI, node.point); + let qijZ = 1 / (1 + squaredDistToPoint); + Z += qijZ; + qijZ *= qijZ; + this.computeForce(FnegZ, qijZ, pointI, node.point); + return false; + }, true); + forces[i] = [Fpos, FnegZ]; + } + // Normalize the negative forces and compute the gradient. + let A = 4 * alpha; + if (supervised) { + A /= sum_pij; + } + const B = 4 / Z; + for (let i = 0; i < N; ++i) { + let [FPos, FNegZ] = forces[i]; + let gsum = new Array(this.dim); + for (let d = 0; d < this.dim; ++d) { + gsum[d] = A * FPos[d] - B * FNegZ[d]; + } + grad.push(gsum); + } + return grad; + } +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/bundle.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/bundle.ts new file mode 100644 index 0000000000000000000000000000000000000000..3e967a976d58732ac07eb4a495e6805c2272f522 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/bundle.ts @@ -0,0 +1,34 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import '../../../components/analytics'; +import '../../../components/security'; + +import './styles'; +import './vz-projector-app'; +import './vz-login-app'; +import './vz-projector-bookmark-panel'; +import './vz-projector-dashboard'; +import './vz-projector-data-panel'; +import './vz-projector-inspector-panel'; +import './vz-projector-input'; +import './vz-projector-legend'; +import './vz-projector-projections-panel'; +import './vz-projector-metadata-card'; +import './vz-projector'; +import './globalState'; +import './vz-projector-container'; +import './vz-comparator-container'; +import './vz-comparator'; + diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/comparatorEventContext.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/comparatorEventContext.ts new file mode 100644 index 0000000000000000000000000000000000000000..5cd24cda3f51186784e160d8adc8d9fe47ef1890 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/comparatorEventContext.ts @@ -0,0 +1,62 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {DistanceFunction, Projection} from './data'; +import * as knn from './knn'; + +export type HoverListener = (index: number, highlightedPointIndices?: number[], predChangeIndices?: number[], confChangeIndices?: number[]) => void; + +export type SelectionChangedListener = ( + selectedPointIndices: number[], + neighborsOfFirstPoint: knn.NearestEntry[] +) => void; + +export type ProjectionChangedListener = (projection: Projection) => void; + +export type DistanceMetricChangedListener = ( + distanceMetric: DistanceFunction +) => void; + +export interface ComparatorEventContext { + /** Register a callback to be invoked when the mouse hovers over a point. */ + registerHoverListener(listener: HoverListener); + /** Notify the hover system that a point is under the mouse. */ + notifyHoverOverPoint(pointIndex: number); + /** Registers a callback to be invoked when the selection changes. */ + registerSelectionChangedListener(listener: SelectionChangedListener); + /** + * Notify the selection system that a client has changed the selected point + * set. + */ + // notifySelectionChanged(newSelectedPointIndices: number[], selectMode?:boolean, selectionType?:string); + + setDynamicStop(); + refresh(); + updateMetaDataByIndices(indicate:number,src:string); + updateMetaByIndices(indicate:number); + renderInTraceLine(inTrace: boolean); + setMouseMode(mode:any); + hiddenOrShowScatter(type:string) + removecustomInMetaCard(); + + /** Registers a callback to be invoked when the projection changes. */ + registerProjectionChangedListener(listener: ProjectionChangedListener); + /** Notify listeners that a reprojection occurred. */ + notifyProjectionChanged(projection: Projection); + registerDistanceMetricChangedListener( + listener: DistanceMetricChangedListener + ); + notifyDistanceMetricChanged(distMetric: DistanceFunction); + +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/data-provider-demo.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/data-provider-demo.ts new file mode 100644 index 0000000000000000000000000000000000000000..7d453590607280b6f7dad5e7cf340ce0f3f5ea3a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/data-provider-demo.ts @@ -0,0 +1,173 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {SpriteAndMetadataInfo, State, DataSet} from './data'; +import { + DataProvider, + EmbeddingInfo, + parseTensors, + ProjectorConfig, + retrieveSpriteAndMetadataInfo, + retrieveTensorAsBytes, + TENSORS_MSG_ID, +} from './data-provider'; +import * as logging from './logging'; + +const BYTES_EXTENSION = '.bytes'; + +/** Data provider that loads data from a demo folder. */ +export class DemoDataProvider implements DataProvider { + private projectorConfigPath: string; + private projectorConfig: ProjectorConfig; + private instanceId: number; + constructor(projectorConfigPath: string, instanceId:number){ + this.instanceId = instanceId; + this.projectorConfigPath = projectorConfigPath; + + } + private getEmbeddingInfo(tensorName: string): EmbeddingInfo { + let embeddings = this.projectorConfig.embeddings; + for (let i = 0; i < embeddings.length; i++) { + let embedding = embeddings[i]; + if (embedding.tensorName === tensorName) { + return embedding; + } + } + return null; + } + retrieveRuns(callback: (runs: string[]) => void): void { + callback(['Demo']); + } + retrieveProjectorConfig( + run: string, + callback: (d: ProjectorConfig) => void + ): void { + + this.projectorConfig = { + "embeddings": [ + { + "tensorName": "CIFAR10 with images", + "tensorShape": [ + 10000, + 784 + ], + "tensorPath": "https://storage.googleapis.com/embedding-projector/data/mnist_10k_784d_tensors.bytes", + "metadataPath": "https://gist.githubusercontent.com/hzf1174/3a7e85af7d09ebdfafac3d4d3ba5e71f/raw/502ad8aedc40fab7e56db917c57b48eaf0bd28fa/metadata.csv", + "sprite": { + "imagePath": "cifar10.png", + "singleImageDim": [ + 32, + 32 + ] + } + } + ], + "modelCheckpointPath": "Demo datasets", + "DVIServerIP": "localhost", + "DVIServerPort": "5001" + } as ProjectorConfig + callback(this.projectorConfig) + } + retrieveTensor( + run: string, + tensorName: string, + callback: (ds: DataSet) => void + ) { + let embedding = this.getEmbeddingInfo(tensorName); + let url = `${embedding.tensorPath}`; + if ( + embedding.tensorPath.substr(-1 * BYTES_EXTENSION.length) === + BYTES_EXTENSION + ) { + + retrieveTensorAsBytes( + this, + this.instanceId, + this.getEmbeddingInfo(tensorName), + run, + tensorName, + url, + callback + ); + } else { + logging.setModalMessage('Fetching tensors...', TENSORS_MSG_ID); + const request = new XMLHttpRequest(); + request.open('GET', url); + request.responseType = 'arraybuffer'; + request.onerror = () => { + logging.setErrorMessage(request.responseText, 'fetching tensors'); + }; + request.onload = () => { + parseTensors(request.response).then((points) => { + console.log("callbackdemo", this.instanceId) + console.log("Points", points) + callback(new DataSet(points, this.instanceId)); + }); + }; + request.send(); + } + } + retrieveSpriteAndMetadata( + run: string, + tensorName: string, + callback: (r: SpriteAndMetadataInfo) => void + ) { + let embedding = { + "tensorName": "CIFAR10 with images", + "tensorShape": [ + 10000, + 784 + ], + "tensorPath": "https://storage.googleapis.com/embedding-projector/data/mnist_10k_784d_tensors.bytes", + "metadataPath": "https://gist.githubusercontent.com/hzf1174/3a7e85af7d09ebdfafac3d4d3ba5e71f/raw/502ad8aedc40fab7e56db917c57b48eaf0bd28fa/metadata.csv", + }; + let spriteImagePath = null; + // if (embedding.sprite && embedding.sprite.imagePath) { + // spriteImagePath = embedding.sprite.imagePath; + // spriteImagePath = `${spriteImagePath}` + // } + //@ts-ignore + retrieveSpriteAndMetadataInfo( + embedding.metadataPath, + spriteImagePath, + { + "imagePath": "cifar10.png", + "singleImageDim": [ + 32, + 32 + ] + }, + callback + ); + } + getBookmarks( + run: string, + tensorName: string, + callback: (r: State[]) => void + ) { + let embedding = this.getEmbeddingInfo(tensorName); + let msgId = logging.setModalMessage('Fetching bookmarks...'); + const xhr = new XMLHttpRequest(); + xhr.open('GET', embedding.bookmarksPath); + xhr.onerror = (err) => { + logging.setErrorMessage(xhr.responseText); + }; + xhr.onload = () => { + const bookmarks = JSON.parse(xhr.responseText) as State[]; + logging.setModalMessage(null, msgId); + callback(bookmarks); + }; + xhr.send(); + } +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/data-provider-proto.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/data-provider-proto.ts new file mode 100644 index 0000000000000000000000000000000000000000..633a7ed99a1c08264d5cdfb4de3dea32578e9fef --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/data-provider-proto.ts @@ -0,0 +1,119 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + DataSet, + DataProto, + State, + DataPoint, + SpriteAndMetadataInfo, + PointMetadata, +} from './data'; +import {analyzeMetadata, DataProvider, ProjectorConfig} from './data-provider'; + +export class ProtoDataProvider implements DataProvider { + private dataProto: DataProto; + private instanceId: number; + constructor(dataProto: DataProto, instanceId: number) { + this.instanceId = instanceId; + this.dataProto = dataProto; + } + retrieveRuns(callback: (runs: string[]) => void): void { + callback(['proto']); + } + retrieveProjectorConfig(run: string, callback: (d: ProjectorConfig) => void) { + callback({ + modelCheckpointPath: 'proto', + embeddings: [ + { + tensorName: 'proto', + tensorShape: this.dataProto.shape, + metadataPath: 'proto', + }, + ], + }); + } + retrieveTensor( + run: string, + tensorName: string, + callback: (ds: DataSet) => void + ) { + callback(this.flatArrayToDataset(this.dataProto.tensor)); + } + retrieveSpriteAndMetadata( + run: string, + tensorName: string, + callback: (r: SpriteAndMetadataInfo) => void + ): void { + let columnNames = this.dataProto.metadata.columns.map((c) => c.name); + let n = this.dataProto.shape[0]; + let pointsMetadata: PointMetadata[] = new Array(n); + this.dataProto.metadata.columns.forEach((c) => { + let values = c.numericValues || c.stringValues; + for (let i = 0; i < n; i++) { + pointsMetadata[i] = pointsMetadata[i] || {}; + pointsMetadata[i][c.name] = values[i]; + } + }); + let spritesPromise: Promise = Promise.resolve(null); + if (this.dataProto.metadata.sprite != null) { + spritesPromise = new Promise((resolve, reject) => { + const image = new Image(); + image.onload = () => resolve(image); + image.onerror = () => reject('Failed converting base64 to an image'); + image.src = this.dataProto.metadata.sprite.imageBase64; + }); + } + spritesPromise.then((image) => { + const result: SpriteAndMetadataInfo = { + stats: analyzeMetadata(columnNames, pointsMetadata), + pointsInfo: pointsMetadata, + }; + if (image != null) { + result.spriteImage = image; + result.spriteMetadata = { + singleImageDim: this.dataProto.metadata.sprite.singleImageDim, + imagePath: 'proto', + }; + } + callback(result); + }); + } + getBookmarks( + run: string, + tensorName: string, + callback: (r: State[]) => void + ): void { + return callback([]); + } + private flatArrayToDataset(tensor: number[]): DataSet { + let points: DataPoint[] = []; + let n = this.dataProto.shape[0]; + let d = this.dataProto.shape[1]; + if (n * d !== tensor.length) { + throw "The shape doesn't match the length of the flattened array"; + } + for (let i = 0; i < n; i++) { + let offset = i * d; + points.push({ + vector: new Float32Array(tensor.slice(offset, offset + d)), + metadata: {}, + projections: null, + index: i, + }); + } + console.log("callbackproto", this.instanceId) + return new DataSet(points, this.instanceId); + } +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/data-provider-server.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/data-provider-server.ts new file mode 100644 index 0000000000000000000000000000000000000000..d0d4c3685f3b61704c4568f1f2c20899d98e0f95 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/data-provider-server.ts @@ -0,0 +1,158 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {DataSet, State, SpriteAndMetadataInfo} from './data'; +import { + retrieveSpriteAndMetadataInfo, + retrieveTensorAsBytes, + EmbeddingInfo, + DataProvider, + ProjectorConfig, +} from './data-provider'; +import * as logging from './logging'; + +// Limit for the number of data points we receive from the server. +export const LIMIT_NUM_POINTS = 100000; + +/** + * Data provider that loads data provided by a python server (usually backed + * by a checkpoint file). + */ +export class ServerDataProvider implements DataProvider { + private routePrefix: string; + private instanceId: number; + private runProjectorConfigCache: { + [run: string]: ProjectorConfig; + } = {}; + constructor(routePrefix: string, instanceId: number) { + this.routePrefix = routePrefix; + this.instanceId = instanceId + } + private getEmbeddingInfo( + run: string, + tensorName: string, + callback: (e: EmbeddingInfo) => void + ): void { + this.retrieveProjectorConfig(run, (config) => { + const embeddings = config.embeddings; + for (let i = 0; i < embeddings.length; i++) { + const embedding = embeddings[i]; + if (embedding.tensorName === tensorName) { + callback(embedding); + return; + } + } + callback(null); + }); + } + retrieveRuns(callback: (runs: string[]) => void): void { + const msgId = logging.setModalMessage('Fetching runs...'); + const xhr = new XMLHttpRequest(); + xhr.open('GET', `${this.routePrefix}/runs`); + xhr.onerror = (err) => { + logging.setErrorMessage(xhr.responseText, 'fetching runs'); + }; + xhr.onload = () => { + const runs = JSON.parse(xhr.responseText); + logging.setModalMessage(null, msgId); + callback(runs); + }; + xhr.send(); + } + retrieveProjectorConfig( + run: string, + callback: (d: ProjectorConfig) => void + ): void { + if (run in this.runProjectorConfigCache) { + callback(this.runProjectorConfigCache[run]); + return; + } + const msgId = logging.setModalMessage('Fetching projector config...'); + const xhr = new XMLHttpRequest(); + xhr.open('GET', `${this.routePrefix}/info?run=${run}`); + xhr.onerror = (err) => { + logging.setErrorMessage(xhr.responseText, 'fetching projector config'); + }; + xhr.onload = () => { + const config = JSON.parse(xhr.responseText) as ProjectorConfig; + logging.setModalMessage(null, msgId); + this.runProjectorConfigCache[run] = config; + callback(config); + }; + xhr.send(); + } + retrieveTensor( + run: string, + tensorName: string, + callback: (ds: DataSet) => void + ) { + this.getEmbeddingInfo(run, tensorName, (embedding) => { + retrieveTensorAsBytes( + this, + this.instanceId, + embedding, + run, + tensorName, + `${this.routePrefix}/tensor?run=${run}&name=${tensorName}` + + `&num_rows=${LIMIT_NUM_POINTS}`, + callback + ); + }); + } + retrieveSpriteAndMetadata( + run: string, + tensorName: string, + callback: (r: SpriteAndMetadataInfo) => void + ) { + this.getEmbeddingInfo(run, tensorName, (embedding) => { + let metadataPath = null; + if (embedding.metadataPath) { + metadataPath = + `${this.routePrefix}/metadata?` + + `run=${run}&name=${tensorName}&num_rows=${LIMIT_NUM_POINTS}`; + } + let spriteImagePath = null; + if (embedding.sprite && embedding.sprite.imagePath) { + spriteImagePath = `${this.routePrefix}/sprite_image?run=${run}&name=${tensorName}`; + } + retrieveSpriteAndMetadataInfo( + metadataPath, + spriteImagePath, + embedding.sprite, + callback + ); + }); + } + getBookmarks( + run: string, + tensorName: string, + callback: (r: State[]) => void + ) { + const msgId = logging.setModalMessage('Fetching bookmarks...'); + const xhr = new XMLHttpRequest(); + xhr.open( + 'GET', + `${this.routePrefix}/bookmarks?run=${run}&name=${tensorName}` + ); + xhr.onerror = (err) => { + logging.setErrorMessage(xhr.responseText, 'fetching bookmarks'); + }; + xhr.onload = () => { + logging.setModalMessage(null, msgId); + const bookmarks = JSON.parse(xhr.responseText); + callback(bookmarks); + }; + xhr.send(); + } +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/data-provider.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/data-provider.ts new file mode 100644 index 0000000000000000000000000000000000000000..c4b5dc6add6d4ff242e4ff3db07292bade334d87 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/data-provider.ts @@ -0,0 +1,473 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ColumnStats, + DataPoint, + DataSet, + PointMetadata, + SpriteAndMetadataInfo, + State, +} from './data'; +import * as logging from './logging'; +import * as util from './util'; + +const NUM_COLORS_COLOR_MAP = 50; +const MAX_SPRITE_IMAGE_SIZE_PX = 8192; +export const METADATA_MSG_ID = 'metadata'; +export const TENSORS_MSG_ID = 'tensors'; +/** Matches the json format of `projector_config.proto` */ +export interface SpriteMetadata { + imagePath: string; + singleImageDim: [number, number]; +} +/** Matches the json format of `projector_config.proto` */ +export interface EmbeddingInfo { + /** Name of the tensor. */ + tensorName: string; + /** The shape of the tensor. */ + tensorShape: [number, number]; + /** + * The path to the tensors TSV file. If empty, it is assumed that the tensor + * is stored in the checkpoint file. + */ + tensorPath?: string; + /** The path to the metadata file associated with the tensor. */ + metadataPath?: string; + /** The path to the bookmarks file associated with the tensor. */ + bookmarksPath?: string; + sprite?: SpriteMetadata; +} +/** + * Matches the json format of `projector_config.proto` + * This should be kept in sync with the code in vz-projector-data-panel which + * holds a template for users to build a projector config JSON object from the + * projector UI. + */ +export interface ProjectorConfig { + embeddings: EmbeddingInfo[]; + modelCheckpointPath?: string; +} +export type ServingMode = 'demo' | 'server' | 'proto' | 'DVI'; // Add DVI as servingmode +/** Interface between the data storage and the UI. */ +export interface DataProvider { + /** Returns a list of run names that have embedding config files. */ + retrieveRuns(callback: (runs: string[]) => void): void; + /** + * Returns the projector configuration: number of tensors, their shapes, + * and their associated metadata files. + */ + retrieveProjectorConfig( + run: string, + callback: (d: ProjectorConfig) => void + ): void; + /** Fetches and returns the tensor with the specified name. */ + retrieveTensor( + run: string, + tensorName: string, + callback: (ds: DataSet) => void + ); + /** + * Fetches the metadata for the specified tensor. + */ + retrieveSpriteAndMetadata( + run: string, + tensorName: string, + callback: (r: SpriteAndMetadataInfo) => void + ): void; + getBookmarks( + run: string, + tensorName: string, + callback: (r: State[]) => void + ): void; +} +export function retrieveTensorAsBytes( + dp: DataProvider, + instanceId: number, + embedding: EmbeddingInfo, + run: string, + tensorName: string, + tensorsPath: string, + callback: (ds: DataSet) => void +) { + if(!window.sessionStorage.taskType){ + return + } + // Get the tensor. + logging.setModalMessage('Fetching tensor values...', TENSORS_MSG_ID); + let xhr = new XMLHttpRequest(); + xhr.open('GET', tensorsPath); + xhr.responseType = 'arraybuffer'; + xhr.onprogress = (ev) => { + if (ev.lengthComputable) { + let percent = ((ev.loaded * 100) / ev.total).toFixed(1); + logging.setModalMessage( + 'Fetching tensor values: ' + percent + '%', + TENSORS_MSG_ID + ); + } + }; + xhr.onload = () => { + if (xhr.status !== 200) { + let msg = String.fromCharCode.apply(null, new Uint8Array(xhr.response)); + logging.setErrorMessage(msg, 'fetching tensors'); + return; + } + let data: Float32Array; + try { + data = new Float32Array(xhr.response); + } catch (e) { + logging.setErrorMessage(e, 'parsing tensor bytes'); + return; + } + let dim = embedding.tensorShape[1]; + let N = data.length / dim; + if (embedding.tensorShape[0] > N) { + logging.setWarningMessage( + `Showing the first ${N.toLocaleString()}` + + ` of ${embedding.tensorShape[0].toLocaleString()} data points` + ); + } + parseTensorsFromFloat32Array(data, dim).then((dataPoints) => { + console.log("dataprovider", instanceId) + console.log("dataPoints", dataPoints) + console.log("datapOINTSTYPE", typeof dataPoints) + callback(new DataSet(dataPoints, instanceId)); + }); + }; + xhr.send(); +} +export function parseRawTensors( + content: ArrayBuffer, + instanceId: number, + callback: (ds: DataSet) => void +) { + parseTensors(content).then((data) => { + console.log("dataproviderparse", instanceId) + callback(new DataSet(data, instanceId)); + }); +} +export function parseRawMetadata( + contents: ArrayBuffer, + callback: (r: SpriteAndMetadataInfo) => void +) { + parseMetadata(contents).then((result) => callback(result)); +} +/** + * Parse an ArrayBuffer in a streaming fashion line by line (or custom delim). + * Can handle very large files. + * + * @param content The array buffer. + * @param callback The callback called on each line. + * @param chunkSize The size of each read chunk, defaults to ~1MB. (optional) + * @param delim The delimiter used to split a line, defaults to '\n'. (optional) + * @returns A promise for when it is finished. + */ +function streamParse( + content: ArrayBuffer, + callback: (line: string) => void, + chunkSize = 1000000, + delim = '\n' +): Promise { + return new Promise((resolve, reject) => { + let offset = 0; + let bufferSize = content.byteLength - 1; + let data = ''; + function readHandler(str) { + offset += chunkSize; + let parts = str.split(delim); + let first = data + parts[0]; + if (parts.length === 1) { + data = first; + readChunk(offset, chunkSize); + return; + } + data = parts[parts.length - 1]; + callback(first); + for (let i = 1; i < parts.length - 1; i++) { + callback(parts[i]); + } + if (offset >= bufferSize) { + if (data) { + callback(data); + } + resolve(); + return; + } + readChunk(offset, chunkSize); + } + function readChunk(offset: number, size: number) { + const contentChunk = content.slice(offset, offset + size); + const blob = new Blob([contentChunk]); + const file = new FileReader(); + file.onload = (e: any) => readHandler(e.target.result); + file.readAsText(blob); + } + readChunk(offset, chunkSize); + }); +} +/** Parses a tsv text file. */ +export function parseTensors( + content: ArrayBuffer, + valueDelim = '\t' +): Promise { + logging.setModalMessage('Parsing tensors...', TENSORS_MSG_ID); + return new Promise((resolve, reject) => { + const data: DataPoint[] = []; + let numDim: number; + streamParse(content, (line: string) => { + line = line.trim(); + if (line === '') { + return; + } + const row = line.split(valueDelim); + const dataPoint: DataPoint = { + metadata: {}, + vector: null, + index: data.length, + projections: null, + }; + // If the first label is not a number, take it as the label. + if (isNaN(row[0] as any) || numDim === row.length - 1) { + dataPoint.metadata['label'] = row[0]; + dataPoint.vector = new Float32Array(row.slice(1).map(Number)); + } else { + dataPoint.vector = new Float32Array(row.map(Number)); + } + data.push(dataPoint); + if (numDim == null) { + numDim = dataPoint.vector.length; + } + if (numDim !== dataPoint.vector.length) { + logging.setModalMessage( + 'Parsing failed. Vector dimensions do not match' + ); + throw Error('Parsing failed'); + } + if (numDim <= 1) { + logging.setModalMessage( + 'Parsing failed. Found a vector with only one dimension?' + ); + throw Error('Parsing failed'); + } + }).then(() => { + logging.setModalMessage(null, TENSORS_MSG_ID); + resolve(data); + }); + }); +} +/** Parses a tsv text file. */ +export function parseTensorsFromFloat32Array( + data: Float32Array, + dim: number +): Promise { + return util + .runAsyncTask( + 'Parsing tensors...', + () => { + const N = data.length / dim; + const dataPoints: DataPoint[] = []; + let offset = 0; + for (let i = 0; i < N; ++i) { + dataPoints.push({ + metadata: {}, + vector: data.subarray(offset, offset + dim), + index: i, + projections: null, + }); + offset += dim; + } + return dataPoints; + }, + TENSORS_MSG_ID + ) + .then((dataPoints) => { + logging.setModalMessage(null, TENSORS_MSG_ID); + return dataPoints; + }); +} +export function analyzeMetadata( + columnNames, + pointsMetadata: PointMetadata[] +): ColumnStats[] { + const columnStats: ColumnStats[] = columnNames.map((name) => { + return { + name: name, + isNumeric: true, + tooManyUniqueValues: false, + min: Number.POSITIVE_INFINITY, + max: Number.NEGATIVE_INFINITY, + }; + }); + const mapOfValues: [ + { + [value: string]: number; + } + ] = columnNames.map(() => new Object()); + pointsMetadata.forEach((metadata) => { + columnNames.forEach((name: string, colIndex: number) => { + const stats = columnStats[colIndex]; + const map = mapOfValues[colIndex]; + const value = metadata[name]; + // Skip missing values. + if (value == null) { + return; + } + if (!stats.tooManyUniqueValues) { + if (value in map) { + map[value]++; + } else { + map[value] = 1; + } + if (Object.keys(map).length > NUM_COLORS_COLOR_MAP) { + stats.tooManyUniqueValues = true; + } + } + if (isNaN(value as any)) { + stats.isNumeric = false; + } else { + metadata[name] = +value; + stats.min = Math.min(stats.min, +value); + stats.max = Math.max(stats.max, +value); + } + }); + }); + columnStats.forEach((stats, colIndex) => { + stats.uniqueEntries = Object.keys(mapOfValues[colIndex]).map((label) => { + return {label, count: mapOfValues[colIndex][label]}; + }); + }); + return columnStats; +} +export function parseMetadata( + content: ArrayBuffer +): Promise { + logging.setModalMessage('Parsing metadata...', METADATA_MSG_ID); + return new Promise((resolve, reject) => { + let pointsMetadata: PointMetadata[] = []; + let hasHeader = false; + let lineNumber = 0; + let columnNames = ['label']; + streamParse(content, (line: string) => { + if (line.trim().length === 0) { + return; + } + if (lineNumber === 0) { + hasHeader = line.indexOf('\t') >= 0; + // If the first row doesn't contain metadata keys, we assume that the + // values are labels. + if (hasHeader) { + columnNames = line.split('\t'); + lineNumber++; + return; + } + } + lineNumber++; + let rowValues = line.split('\t'); + let metadata: PointMetadata = {}; + pointsMetadata.push(metadata); + columnNames.forEach((name: string, colIndex: number) => { + let value = rowValues[colIndex]; + // Normalize missing values. + value = value === '' ? null : value; + metadata[name] = value; + }); + }).then(() => { + logging.setModalMessage(null, METADATA_MSG_ID); + resolve({ + stats: analyzeMetadata(columnNames, pointsMetadata), + pointsInfo: pointsMetadata, + }); + }); + }); +} +export function fetchImage(url: string): Promise { + return new Promise((resolve, reject) => { + let image = new Image(); + image.onload = () => resolve(image); + image.onerror = (err) => reject(err); + image.crossOrigin = ''; + image.src = url; + }); +} +export function retrieveSpriteAndMetadataInfo( + metadataPath: string, + spriteImagePath: string, + spriteMetadata: SpriteMetadata, + callback: (r: SpriteAndMetadataInfo) => void +) { + let metadataPromise: Promise = Promise.resolve({}); + if (metadataPath) { + metadataPromise = new Promise((resolve, reject) => { + logging.setModalMessage('Fetching metadata...', METADATA_MSG_ID); + const request = new XMLHttpRequest(); + request.open('GET', metadataPath); + request.responseType = 'arraybuffer'; + request.onreadystatechange = () => { + if (request.readyState === 4) { + if (request.status === 200) { + // The metadata was successfully retrieved. Parse it. + // console.log('request after parse',parseMetadata(request.response)) + resolve(parseMetadata(request.response)); + } else { + // The response contains the error message, but we must convert it + // to a string. + const errorReader = new FileReader(); + errorReader.onload = () => { + logging.setErrorMessage( + errorReader.result as string, + 'fetching metadata' + ); + reject(); + }; + errorReader.readAsText(new Blob([request.response])); + } + } + }; + request.send(null); + }); + } + let spriteMsgId = null; + let spritesPromise: Promise = null; + // if (spriteImagePath) { + // spriteMsgId = logging.setModalMessage('Fetching sprite image...'); + // spritesPromise = fetchImage(spriteImagePath); + // } + // Fetch the metadata and the image in parallel. + Promise.all([metadataPromise]).then((values) => { + if (spriteMsgId) { + logging.setModalMessage(null, spriteMsgId); + } + const [metadata] = values; + // if ( + // spriteImage && + // (spriteImage.height > MAX_SPRITE_IMAGE_SIZE_PX || + // spriteImage.width > MAX_SPRITE_IMAGE_SIZE_PX) + // ) { + // logging.setModalMessage( + // `Error: Sprite image of dimensions ${spriteImage.width}px x ` + + // `${spriteImage.height}px exceeds maximum dimensions ` + + // `${MAX_SPRITE_IMAGE_SIZE_PX}px x ${MAX_SPRITE_IMAGE_SIZE_PX}px` + // ); + // } else { + // metadata.spriteImage = spriteImage; + metadata.spriteMetadata = spriteMetadata; + try { + callback(metadata); + } catch (e) { + logging.setModalMessage(String(e)); + } + // } + }); +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/data.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/data.ts new file mode 100644 index 0000000000000000000000000000000000000000..71b13794da47f98bc99bec578235951e00bb17b0 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/data.ts @@ -0,0 +1,1601 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { UMAP } from 'umap-js'; + +import { TSNE } from './bh_tsne'; + +import { + + SpriteMetadata + +} from './data-provider'; +import { CameraDef } from './scatterPlot'; +import * as knn from './knn'; +import * as vector from './vector'; +import * as logging from './logging'; +import * as util from './util'; +import { getAcceptIndicates, getHighlightedPointIndices, getIteration, getLabeledData, getModelMath, getNowShowIndicates, getProperties, getRejectIndicates, getSceneBackgroundImg, getTestingData, getUnLabelData, updateSessionStateForInstance, updateStateForInstance } from './globalState'; + + +export type DistanceFunction = (a: vector.Vector, b: vector.Vector) => number; +export type ProjectionComponents3D = [string, string, string]; + +export interface PointMetadata { + [key: string]: number | string; +} + +export interface DataProto { + shape: [number, number]; + tensor: number[]; + metadata: { + columns: Array<{ + name: string; + stringValues: string[]; + numericValues: number[]; + }>; + sprite: { + imageBase64: string; + singleImageDim: [number, number]; + }; + }; +} + +/** Statistics for a metadata column. */ +export interface ColumnStats { + name: string; + isNumeric: boolean; + tooManyUniqueValues: boolean; + uniqueEntries?: Array<{ + label: string; + count: number; + }>; + min: number; + max: number; +} +export interface SpriteAndMetadataInfo { + stats?: ColumnStats[]; + pointsInfo?: PointMetadata[]; + spriteImage?: HTMLImageElement; + spriteMetadata?: SpriteMetadata; +} + +/** A single collection of points which make up a sequence through space. */ +export interface Sequence { + /** Indices into the DataPoints array in the Data object. */ + pointIndices: number[]; +} +export interface DataPoint { + /** The point in the original space. */ + vector?: Float32Array; + /* + * Metadata for each point. Each metadata is a set of key/value pairs + * where the value can be a string or a number. + */ + original_vector?: Float32Array; + mislabel_vector?: boolean; + color?: string; + metadata: PointMetadata; + /** index of the sequence, used for highlighting on click */ + sequenceIndex?: number; + /** index in the original data source */ + index: number; + /** This is where the calculated projections space are cached */ + projections: { + [key: string]: number; + }; + DVI_projections?: { + [iteration: number]: [any, any]; + }; + DVI_color?: { + [iteration: number]: string; + } + training_data?: { + [iteration: number]: boolean | undefined; + } + testing_data?: { + [iteration: number]: boolean | undefined; + } + new_selection?: { + [iteration: number]: boolean | undefined; + } + current_training?: boolean; + current_testing?: boolean; + prediction?: { + [iteration: number]: string; + }; + current_prediction?: string; + current_wrong_prediction?: boolean; + current_new_selection?: boolean; + original_label?: string; + noisy?: boolean; + inv_acc?: { + [iteration: number]: number; + }; + current_inv_acc?: number; + uncertainty?: { + [iteration: number]: number | string; + }; + diversity?: { + [iteration: number]: number | string; + }; + tot?: { + [iteration: number]: number | string; + }; + uncertainty_ranking?: { + [iteration: number]: number; + }; + current_uncertainty_ranking?: number; + diversity_ranking?: { + [iteration: number]: number; + }; + current_diversity_ranking?: number; + tot_ranking?: { + [iteration: number]: number; + }; + current_tot_ranking?: number; +} +const IS_FIREFOX = navigator.userAgent.toLowerCase().indexOf('firefox') >= 0; +/** Controls whether nearest neighbors computation is done on the GPU or CPU. */ +export const TSNE_SAMPLE_SIZE = 500; +export const UMAP_SAMPLE_SIZE = 500; +export const PCA_SAMPLE_SIZE = 50000; +/** Number of dimensions to sample when doing approximate PCA. */ +export const PCA_SAMPLE_DIM = 200; +/** Number of pca components to compute. */ +const NUM_PCA_COMPONENTS = 10; +/** Id of message box used for umap optimization progress bar. */ +const UMAP_MSG_ID = 'umap-optimization'; +/** + * Reserved metadata attributes used for sequence information + * NOTE: Use "__seq_next__" as "__next__" is deprecated. + */ +const SEQUENCE_METADATA_ATTRS = ['__next__', '__seq_next__']; +function getSequenceNextPointIndex( + pointMetadata: PointMetadata +): number | null { + let sequenceAttr = null; + for (let metadataAttr of SEQUENCE_METADATA_ATTRS) { + if (metadataAttr in pointMetadata && pointMetadata[metadataAttr] !== '') { + sequenceAttr = pointMetadata[metadataAttr]; + break; + } + } + if (sequenceAttr == null) { + return null; + } + return +sequenceAttr; +} + +/** + * Test http request + */ +/** + * Dataset contains a DataPoints array that should be treated as immutable. This + * acts as a working subset of the original data, with cached properties + * from computationally expensive operations. Because creating a subset + * requires normalizing and shifting the vector space, we make a copy of the + * data so we can still always create new subsets based on the original data. + */ +export class DataSet { + points: DataPoint[]; + sequences: Sequence[]; + shuffledDataIndices: number[] = []; + /** + * This keeps a list of all current projections so you can easily test to see + * if it's been calculated already. + */ + projections: { + [projection: string]: boolean; + } = {}; + nearest: knn.NearestEntry[][]; + spriteAndMetadataInfo: SpriteAndMetadataInfo; + fracVariancesExplained: number[]; + tSNEIteration: number = 0; + tSNEShouldPauseAndCheck = false; + tSNEShouldPause = false; + tSNEShouldStop = true; + tSNEShouldKill = false; + tSNEJustPause = false; + tSNETotalIter: number = 0; + /** + * This part contains information for DVI visualization + */ + DVIsubjectModelPath = ""; + DVIResolution = 400; + DVIServer = window.sessionStorage.ipAddress || 'localhost:5001'; + DVIValidPointNumber: { + [iteration: number]: number; + } = []; + DVICurrentRealDataNumber = 0; + DVIRealDataNumber: { + [iteration: number]: number; + } = []; + DVIEvaluation: { + [iteration: number]: any; + } = []; + DVIDataList: any = []; + DVIAvailableIteration: Array = []; + DVIPredicates: any[] = []; + is_uncertainty_diversity_tot_exist: { + [iteration: number]: boolean; + } = []; + DVIfilterIndices: number[]; + selectIndices: number[]; + + + superviseFactor: number; + superviseLabels: string[]; + superviseInput: string = ''; + dim: [number, number] = [0, 0]; + hasTSNERun: boolean = false; + private tsne: TSNE; + hasUmapRun = false; + private umap: UMAP; + private instanceId: number; + private state: any; + /** Creates a new Dataset */ + constructor( + points: DataPoint[], + instanceId: number, + spriteAndMetadataInfo?: SpriteAndMetadataInfo, + + ) { + + this.instanceId = instanceId; + + this.points = points; + this.shuffledDataIndices = util.shuffle(util.range(this.points.length)); + this.sequences = this.computeSequences(points); + this.dim = [this.points.length, this.points[0].vector.length]; + this.spriteAndMetadataInfo = spriteAndMetadataInfo; + this.DVIfilterIndices = []; + } + private computeSequences(points: DataPoint[]) { + // Keep a list of indices seen so we don't compute sequences for a given + // point twice. + let indicesSeen = new Int8Array(points.length); + // Compute sequences. + let indexToSequence: { + [index: number]: Sequence; + } = {}; + let sequences: Sequence[] = []; + for (let i = 0; i < points.length; i++) { + if (indicesSeen[i]) { + continue; + } + indicesSeen[i] = 1; + // Ignore points without a sequence attribute. + let next = getSequenceNextPointIndex(points[i].metadata); + if (next == null) { + continue; + } + if (next in indexToSequence) { + let existingSequence = indexToSequence[next]; + // Pushing at the beginning of the array. + existingSequence.pointIndices.unshift(i); + indexToSequence[i] = existingSequence; + continue; + } + // The current point is pointing to a new/unseen sequence. + let newSequence: Sequence = { pointIndices: [] }; + indexToSequence[i] = newSequence; + sequences.push(newSequence); + let currentIndex = i; + while (points[currentIndex]) { + newSequence.pointIndices.push(currentIndex); + let next = getSequenceNextPointIndex(points[currentIndex].metadata); + if (next != null) { + indicesSeen[next] = 1; + currentIndex = next; + } else { + currentIndex = -1; + } + } + } + return sequences; + } + projectionCanBeRendered(projection: ProjectionType): boolean { + if (projection !== 'tsne') { + return true; + } + return this.tSNEIteration > 0; + } + /** + * Returns a new subset dataset by copying out data. We make a copy because + * we have to modify the vectors by normalizing them. + * + * @param subset Array of indices of points that we want in the subset. + * + * @return A subset of the original dataset. + */ + getSubset(subset?: number[]): DataSet { + const pointsSubset = + subset != null && subset.length > 0 + ? subset.map((i) => this.points[i]) + : this.points; + let points = pointsSubset.map((dp) => { + return { + metadata: dp.metadata, + index: dp.index, + vector: dp.vector.slice(), + projections: {} as { + [key: string]: number; + }, + }; + }); + const dp_list: DataPoint[] = []; + for (let i = 0; i < points.length; i++) { + const dp: DataPoint = { + metadata: pointsSubset[i].metadata, + index: pointsSubset[i].index, + vector: points[i].vector, + original_vector: pointsSubset[i].vector, + projections: points[i].projections, + }; + dp_list.push(dp); + } + return new DataSet(dp_list,this.instanceId, this.spriteAndMetadataInfo); + } + /** + * Computes the centroid, shifts all points to that centroid, + * then makes them all unit norm. + */ + normalize() { + // Compute the centroid of all data points. + let centroid = vector.centroid(this.points, (a) => a.vector); + if (centroid == null) { + throw Error('centroid should not be null'); + } + // Shift all points by the centroid and make them unit norm. + for (let id = 0; id < this.points.length; ++id) { + let dataPoint = this.points[id]; + dataPoint.vector = vector.sub(dataPoint.vector, centroid); + if (vector.norm2(dataPoint.vector) > 0) { + // If we take the unit norm of a vector of all 0s, we get a vector of + // all NaNs. We prevent that with a guard. + vector.unit(dataPoint.vector); + } + } + } + /** Projects the dataset onto a given vector and caches the result. */ + projectLinear(dir: vector.Vector, label: string) { + this.projections[label] = true; + this.points.forEach((dataPoint) => { + dataPoint.projections[label] = vector.dot(dataPoint.vector, dir); + }); + } + setDVIFilteredData(pointIndices: number[]) { + // reset first + for (let i = 0; i < this.points.length; i++) { + let dataPoint = this.points[i]; + dataPoint.projections['tsne-0'] = dataPoint.DVI_projections[this.tSNEIteration][0]; + dataPoint.projections['tsne-1'] = dataPoint.DVI_projections[this.tSNEIteration][1]; + dataPoint.projections['tsne-2'] = 0; + } + for (let i = 0; i < this.points.length; i++) { + if (pointIndices?.indexOf(i) == -1 && i < this.DVICurrentRealDataNumber) { + let dataPoint = this.points[i]; + dataPoint.projections = {}; + } + } + this.DVIfilterIndices = pointIndices; + } + + + + + /** Runs DVI on the data. */ + async projectDVI( + iteration: number, predicates: { [key: string]: any }, + stepCallback: (iter: number | null, evaluation: any, newSelection: any[], filterIndices: number[], totalIter?: number) => void + ) { + // min-x, max-x, min-y, max-y + + // Assuming instanceId is a string that uniquely identifies your Comparator instance + +// Update the isAdjustingSel property for this specific instance + updateStateForInstance(this.instanceId, { currentFocus: [-1, 1, -1, 1] }); + + // window.currentFocus = [-1, 1, -1, 1] + this.projections['tsne'] = true; + function componentToHex(c: number) { + const hex = c.toString(16); + return hex.length == 1 ? "0" + hex : hex; + } + + function rgbToHex(r: number, g: number, b: number) { + return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b); + } + + + this.iterationChangeReset() + // window.sessionStorage.setItem('acceptIndicates',"") + // window.sessionStorage.setItem('rejectIndicates',"") + // updateSessionStateForInstance(this.instanceId, {acceptIndicates:""}) + // updateSessionStateForInstance(this.instanceId, {rejectIndicates:""}) + updateStateForInstance(this.instanceId, {acceptIndicates:[]}) + updateStateForInstance(this.instanceId, {rejectIndicates:[]}) + + + if (this.DVIAvailableIteration.indexOf(iteration) == -1) { + + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + // await fetch("standalone_projector_config.json", { method: 'GET' }) + // .then(response => response.json()) + // .then(data => { + // const ip_address = data.DVIServerIP + ":" + data.DVIServerPort; + // this.DVIServer = ip_address; + + if (getModelMath(this.instanceId)) { + this.DVIsubjectModelPath = getModelMath(this.instanceId) + } + if (getIteration(this.instanceId)) { + updateStateForInstance(this.instanceId, {last_iteration: getIteration(this.instanceId)}) + //state.last_iteration = state.iteration + } else { + updateStateForInstance(this.instanceId, {last_iteration: 1}) + //state.last_iteration = 1 + } + updateStateForInstance(this.instanceId, {iteration: iteration}) + //getIteration(this.instanceId) = iteration + console.log("startfetching Bro") + performance.mark('startTasklabel') + + + await fetch("http://" + this.DVIServer + "/updateProjection", { + method: 'POST', + body: JSON.stringify({ + "path": window.sessionStorage.content_path || this.DVIsubjectModelPath, "iteration": iteration, + "resolution": this.DVIResolution, "predicates": predicates, + "username": window.sessionStorage.username, + "vis_method": window.sessionStorage.vis_method, + 'setting':window.sessionStorage.selectedSetting, + "content_path": window.sessionStorage.content_path || this.DVIsubjectModelPath, + "isContraVis": window.sessionStorage.isContraVis, + }), + headers: headers, + mode: 'cors' + }).then(response => response.json()).then(data => { + + + performance.mark('endTasklabel'); + // Measure the time between the start and end marks + performance.measure('measureTasklabel', 'startTasklabel', 'endTasklabel'); + + // Access and log the measurement result + const measure = performance.getEntriesByName('measureTasklabel')[0]; + console.log(`The ProjectDVIservertask took ${measure.duration} milliseconds.`); + + const result = data.result; + + const grid_index = [[data.grid_index[0], data.grid_index[1]], [data.grid_index[2], data.grid_index[3]]]; + const grid_color = [[137, 120, 117], [136, 119, 116], [136, 118, 115], [135, 117, 114]]; + + if (!getSceneBackgroundImg(this.instanceId)) { + updateStateForInstance(this.instanceId, {sceneBackgroundImg:[]}) + // getSceneBackgroundImg(this.instanceId) = [] + } + + + const newCustomSelection = getSceneBackgroundImg(this.instanceId); + + // Perform the splice operation on the new array + newCustomSelection[getIteration(this.instanceId)] = data.grid_color + + // Update the state with the modified array + updateStateForInstance(this.instanceId, { sceneBackgroundImg: newCustomSelection }); + // getSceneBackgroundImg(this.instanceId)[getIteration(this.instanceId)] = data.grid_color + let temp_label_color_list:any = [] + let temp_label_list:any = [] + let k=0 + for(let i = 0 ;i < result.length-1;i++){ + + if (data.properties[i] === 0 || (window.sessionStorage.selectedSetting !== 'active learning' && window.sessionStorage.selectedSetting !== 'dense al')) { + + let color:any = data.label_color_list[k] || [204,204,204] + let label:any = data.label_list[k] || 'unlabeled' + temp_label_color_list.push(color) + temp_label_list.push(label) + k = k+1 + } else{ + temp_label_color_list.push([204,204,204]) + temp_label_list.push('unlabeled') + } + + } + + const label_color_list = temp_label_color_list + const label_list = temp_label_list; + + const prediction_list = data.prediction_list; + + const background_point_number = grid_index.length; + + const real_data_number = label_color_list.length; + this.tSNETotalIter = data.maximum_iteration; + updateStateForInstance(this.instanceId, {tSNETotalIter:data.maximum_iteration}) + // this.state.tSNETotalIter = data.maximum_iteration + + this.tSNEIteration = iteration; + this.DVIValidPointNumber[iteration] = real_data_number + background_point_number; + this.DVIAvailableIteration.push(iteration); + const current_length = this.points.length; + + const training_data = data.training_data; + const testing_data = data.testing_data; + const new_selection = data.new_selection; + const noisy_data = data.noisy_data; + const original_label_list = data.original_label_list; + + const evaluation = data.evaluation; + this.DVIEvaluation[iteration] = evaluation; + const inv_acc = data.inv_acc_list || []; + if (!getProperties(this.instanceId)) { + console.log("update") + updateStateForInstance(this.instanceId, {properties:[]}) + // getProperties(this.instanceId) = [] + } + const newProperties = getProperties(this.instanceId); + + // Perform the splice operation on the new array + newProperties[iteration] = data.properties + + // Update the state with the modified array + updateStateForInstance(this.instanceId, { properties: newProperties }); + + // getProperties(this.instanceId)[iteration] = data.properties; + + if (!getHighlightedPointIndices(this.instanceId)) { + updateStateForInstance(this.instanceId, {highlightedPointIndices:[]}) + // getHighlightedPointIndices(this.instanceId) = [] + } + const newHighlight = getHighlightedPointIndices(this.instanceId); + + // Perform the splice operation on the new array + newHighlight[iteration] = data.highlightedPointIndices + + // Update the state with the modified array + updateStateForInstance(this.instanceId, { highlightedPointIndices: newHighlight }); + + // getHighlightedPointIndices(this.instanceId)[iteration] = data.highlightedPointIndices + + + updateStateForInstance(this.instanceId, {unLabelData:[]}) + updateStateForInstance(this.instanceId, {testingData:[]}) + updateStateForInstance(this.instanceId, {labeledData:[]}) + + + if (!getNowShowIndicates(this.instanceId)) { + updateStateForInstance(this.instanceId, {nowShowIndicates:[]}) + // getNowShowIndicates(this.instanceId) = [] + for (let i = 0; i < data.properties.length; i++) { + if (data.properties[i] === 1) { + const newUn = getUnLabelData(this.instanceId); + + // Perform the splice operation on the new array + newUn.push(i) + + // Update the state with the modified array + updateStateForInstance(this.instanceId, { unLabelData: newUn }); + + // getUnLabelData(this.instanceId).push(i) + } else if (data.properties[i] === 2) { + const newUn = getTestingData(this.instanceId); + + // Perform the splice operation on the new array + newUn.push(i) + + // Update the state with the modified array + updateStateForInstance(this.instanceId, { testingData: newUn }); + // getTestingData(this.instanceId).push(i) + } else { + const newUn = getLabeledData(this.instanceId); + + // Perform the splice operation on the new array + newUn.push(i) + + // Update the state with the modified array + updateStateForInstance(this.instanceId, { labeledData: newUn }); + // this.state.labeledData.push(i) + } + const newNow = getNowShowIndicates(this.instanceId); + + // Perform the splice operation on the new array + newNow.push(i) + + // Update the state with the modified array + updateStateForInstance(this.instanceId, { nowShowIndicates: newNow }); + + // getNowShowIndicates(this.instanceId).push(i) + } + } + + + const filterIndices = data.selectedPoints; + console.log("realdataNum", real_data_number) + console.log("backgroundpoint", background_point_number) + console.log('real_data_number + background_point_number - current_length',real_data_number + background_point_number - current_length) + + for (let i = 0; i < real_data_number + background_point_number - current_length; i++) { + const newDataPoint: DataPoint = { + metadata: { label: "background" }, + index: current_length + i, + projections: { + 'tsne-0': 0, + 'tsne-1': 0, + 'tsne-2': 0 + }, + }; + this.points.push(newDataPoint); + } + for (let i = 0; i < this.points.length; i++) { + let dataPoint = this.points[i]; + if (dataPoint.DVI_projections == undefined || dataPoint.DVI_color == undefined) { + dataPoint.DVI_projections = {}; + dataPoint.DVI_color = {}; + } + if (dataPoint.training_data == undefined || dataPoint.testing_data == undefined) { + dataPoint.training_data = {}; + dataPoint.testing_data = {}; + } + if (dataPoint.prediction == undefined) { + dataPoint.prediction = {}; + } + if (dataPoint.new_selection == undefined) { + dataPoint.new_selection = {}; + } + if (dataPoint.inv_acc == undefined) { + dataPoint.inv_acc = {}; + } + if (dataPoint.uncertainty == undefined) { + dataPoint.uncertainty = {}; + } + if (dataPoint.uncertainty_ranking == undefined) { + dataPoint.uncertainty_ranking = {}; + } + if (dataPoint.diversity == undefined) { + dataPoint.diversity = {}; + } + if (dataPoint.diversity_ranking == undefined) { + dataPoint.diversity_ranking = {}; + } + if (dataPoint.tot == undefined) { + dataPoint.tot = {}; + } + if (dataPoint.tot_ranking == undefined) { + dataPoint.tot_ranking = {}; + } + } + + for (let i = 0; i < real_data_number; i++) { + let dataPoint = this.points[i]; + dataPoint.projections['tsne-0'] = result[i][0]; + dataPoint.projections['tsne-1'] = result[i][1]; + dataPoint.projections['tsne-2'] = 0; + if (getUnLabelData(this.instanceId)?.length && getUnLabelData(this.instanceId).indexOf(i) !== -1) { + // label_color_list[i] = [204, 204, 204] + dataPoint.color = rgbToHex(204, 204, 204); + } else { + dataPoint.color = rgbToHex(label_color_list[i][0], label_color_list[i][1], label_color_list[i][2]); + } + + + dataPoint.DVI_projections[iteration] = [result[i][0], result[i][1]]; + dataPoint.DVI_color[iteration] = dataPoint.color; + dataPoint.training_data[iteration] = false; + dataPoint.testing_data[iteration] = false; + dataPoint.current_training = false; + dataPoint.current_testing = false; + dataPoint.metadata['label'] = label_list[i]; + dataPoint.prediction[iteration] = prediction_list[i]; + dataPoint.current_prediction = prediction_list[i]; + dataPoint.inv_acc[iteration] = inv_acc[i]; + dataPoint.current_inv_acc = inv_acc[i]; + if (prediction_list[i] == label_list[i]) { + dataPoint.current_wrong_prediction = false; + } else { + dataPoint.current_wrong_prediction = true; + } + // dataPoint.new_selection[iteration] = false; + dataPoint.current_new_selection = false; + if (original_label_list) { + dataPoint.original_label = original_label_list[i]; + } + + dataPoint.noisy = false; + } + + for (let i = 0; i < background_point_number; i++) { + let dataPoint = this.points[i + real_data_number]; + dataPoint.projections['tsne-0'] = grid_index[i][0]; + dataPoint.projections['tsne-1'] = grid_index[i][1]; + dataPoint.projections['tsne-2'] = 0; + dataPoint.color = rgbToHex(grid_color[i][0], grid_color[i][1], grid_color[i][2]); + dataPoint.DVI_projections[iteration] = [grid_index[i][0], grid_index[i][1]]; + //todo refactor it out + dataPoint.DVI_color[iteration] = dataPoint.color; + dataPoint.training_data[iteration] = undefined; + dataPoint.testing_data[iteration] = undefined; + dataPoint.current_training = undefined; + dataPoint.current_testing = undefined; + dataPoint.prediction[iteration] = "background"; + dataPoint.current_prediction = "background"; + dataPoint.inv_acc[iteration] = 0; + dataPoint.current_inv_acc = 0; + dataPoint.current_new_selection = undefined; + // dataPoint.new_selection[iteration] = undefined; + dataPoint.current_wrong_prediction = undefined; + dataPoint.original_label = "background"; + dataPoint.noisy = undefined; + } + + for (let i = real_data_number + background_point_number; i < this.points.length; i++) { + let dataPoint = this.points[i]; + dataPoint.projections = {}; + } + + for (let i = 0; i < training_data.length; i++) { + const dataIndex = training_data[i]; + let dataPoint = this.points[dataIndex]; + dataPoint.training_data[iteration] = true; + dataPoint.current_training = true; + } + + for (let i = 0; i < testing_data.length; i++) { + const dataIndex = testing_data[i]; + let dataPoint = this.points[dataIndex]; + dataPoint.testing_data[iteration] = true; + dataPoint.current_testing = true; + } + + this.DVICurrentRealDataNumber = real_data_number; + this.DVIRealDataNumber[iteration] = real_data_number; + this.DVIfilterIndices = []; + //todo combine these filters + for (let i = 0; i < real_data_number + background_point_number; i++) { + this.DVIfilterIndices.push(i); + } + this.DVIDataList[iteration] = this.points + updateStateForInstance(this.instanceId, {DVIDataList:this.DVIDataList}) + // this.state.DVIDataList = this.DVIDataList + + stepCallback(this.tSNEIteration, evaluation, new_selection, filterIndices, this.tSNETotalIter); + }).catch(error => { + console.log(error); + logging.setErrorMessage('error'); + stepCallback(null, null, null, null, null); + }); + + // }); + } else { + const validDataNumber = this.DVIValidPointNumber[iteration]; + const evaluation = this.DVIEvaluation[iteration]; + this.tSNEIteration = iteration; + + updateStateForInstance(this.instanceId, {last_iteration:getIteration(this.instanceId)}) + updateStateForInstance(this.instanceId, {iteration:iteration}) + // this.state.last_iteration = getIteration(this.instanceId) + // getIteration(this.instanceId) = iteration + + const newSelection = []; + for (let i = 0; i < validDataNumber; i++) { + let dataPoint = this.points[i]; + dataPoint.projections['tsne-0'] = dataPoint.DVI_projections[iteration][0]; + dataPoint.projections['tsne-1'] = dataPoint.DVI_projections[iteration][1]; + dataPoint.projections['tsne-2'] = 0; + dataPoint.color = dataPoint.DVI_color[iteration]; + dataPoint.current_training = dataPoint.training_data[iteration]; + dataPoint.current_testing = dataPoint.testing_data[iteration]; + dataPoint.current_prediction = dataPoint.prediction[iteration]; + dataPoint.current_inv_acc = dataPoint.inv_acc[iteration]; + if (dataPoint.current_prediction == dataPoint.metadata['label'] && dataPoint.metadata['label'] != "background") { + dataPoint.current_wrong_prediction = false; + } else { + if (dataPoint.metadata['label'] != "background") { + dataPoint.current_wrong_prediction = true; + } else { + dataPoint.current_wrong_prediction = undefined; + } + } + // dataPoint.current_new_selection = dataPoint.new_selection[iteration]; + // if (dataPoint.current_new_selection) { + // newSelection.push(i); + // } + // if (this.is_uncertainty_diversity_tot_exist[iteration]) { + // dataPoint.metadata['uncertainty'] = dataPoint.uncertainty[iteration]; + // dataPoint.metadata['diversity'] = dataPoint.diversity[iteration]; + // dataPoint.metadata['tot'] = dataPoint.tot[iteration]; + // dataPoint.current_uncertainty_ranking = dataPoint.uncertainty_ranking[iteration]; + // dataPoint.current_diversity_ranking = dataPoint.diversity_ranking[iteration]; + // dataPoint.current_tot_ranking = dataPoint.tot_ranking[iteration]; + // } + } + for (let i = validDataNumber; i < this.points.length; i++) { + let dataPoint = this.points[i]; + dataPoint.projections = {}; + dataPoint.current_testing = false; + dataPoint.current_training = false; + } + // const matches = this.get_match(); + // for (let i = 0; i < validDataNumber; i++) { + // let dataPoint = this.points[i]; + // if (matches.indexOf(i) == -1 && i < this.DVICurrentRealDataNumber) { + // dataPoint.projections = {} + // } + // } + + this.DVICurrentRealDataNumber = this.DVIRealDataNumber[iteration]; + this.DVIfilterIndices = []; + for (let i = 0; i < this.DVICurrentRealDataNumber + Math.pow(this.DVIResolution, 2); i++) { + this.DVIfilterIndices.push(i); + } +performance.mark("startTasklabel1") + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + await fetch(`http://${this.DVIServer}/query`, { + method: 'POST', + body: JSON.stringify({ + "predicates": predicates, "content_path": window.sessionStorage.content_path || this.DVIsubjectModelPath, + "iteration": iteration,"username": window.sessionStorage.username, "vis_method": window.sessionStorage.vis_method,'setting':window.sessionStorage.selectedSetting + }), + headers: headers, + mode: 'cors' + }).then(response => response.json()).then(data => { + performance.mark('endTasklabel1'); + // Measure the time between the start and end marks + performance.measure('measureTasklabel1', 'startTasklabel1', 'endTasklabel1'); + + // Access and log the measurement result + const measure = performance.getEntriesByName('measureTasklabel1')[0]; + console.log(`The querytask took ${measure.duration} milliseconds.`); + const indices = data.selectedPoints; + stepCallback(this.tSNEIteration, evaluation, newSelection, indices, this.tSNETotalIter); + }).catch(error => { + logging.setErrorMessage('querying for indices'); + stepCallback(null, null, null, null, null); + }); + } + + } + + + /** Runs DVI on the data. */ + async reTrainByDVI( + iteration: number, newIndices: number[], rejection: number[], + stepCallback: (iter: number | null, evaluation: any, newSelection: any[], filterIndices: number[], totalIter?: number) => void + ) { + this.projections['tsne'] = true; + function componentToHex(c: number) { + const hex = c.toString(16); + return hex.length == 1 ? "0" + hex : hex; + } + + + this.iterationChangeReset() + + function rgbToHex(r: number, g: number, b: number) { + return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b); + } + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + // await fetch("standalone_projector_config.json", { method: 'GET' }) + // .then(response => response.json()) + // .then(data => { + // const ip_address = data.DVIServerIP + ":" + data.DVIServerPort; + // this.DVIServer = ip_address; + if (getModelMath(this.instanceId)) { + this.DVIsubjectModelPath = getModelMath(this.instanceId) + } + let indices = [] + if(getAcceptIndicates(this.instanceId)){ + indices = getAcceptIndicates(this.instanceId).filter((item, i, arr) => { + //函数自身返回的是一个布尔值,只当返回值为true时,当前元素才会存入新的数组中。 + return getProperties(this.instanceId)[getIteration(this.instanceId)][item] === 1 + }) + } + let rejIndices = [] + if(getRejectIndicates(this.instanceId)){ + rejIndices = getRejectIndicates(this.instanceId).filter((item, i, arr) => { + //函数自身返回的是一个布尔值,只当返回值为true时,当前元素才会存入新的数组中。 + return getProperties(this.instanceId)[getIteration(this.instanceId)][item] === 1 + }) + } + + let that = this + + await fetch("http://" + this.DVIServer + "/al_train", { + method: 'POST', + body: JSON.stringify({ + "iteration": this.tSNEIteration, + "accIndices": indices, + "rejIndices": rejIndices, + "content_path": this.DVIsubjectModelPath, + "username": window.sessionStorage.username + }), + headers: headers, + mode: 'cors' + }).then(response => response.json()).then(data => { + iteration = data.maximum_iteration + updateStateForInstance(this.instanceId, {acceptIndicates:[]}) + updateStateForInstance(this.instanceId, {rejectIndicates:[]}) + updateSessionStateForInstance(this.instanceId, {acceptIndicates:""}) + + updateSessionStateForInstance(this.instanceId, {rejectIndicates:""}) + + // this.state.acceptIndicates = [] + // this.state.rejectIndicates = [] + // window.sessionStorage.setItem('acceptIndicates', "") + // window.sessionStorage.setItem('rejectIndicates', "") + + updateStateForInstance(this.instanceId, {last_iteration:iteration}) + updateStateForInstance(this.instanceId, {iteration:iteration}) + // this.state.last_iteration = getIteration(this.instanceId) + // getIteration(this.instanceId) = iteration + const result = data.result; + const grid_index = [[data.grid_index[0], data.grid_index[1]], [data.grid_index[2], data.grid_index[3]]]; + const grid_color = [[137, 120, 117], [136, 119, 116], [136, 118, 115], [135, 117, 114]]; + const newUn = getSceneBackgroundImg(this.instanceId); + + // Perform the splice operation on the new array + newUn[getIteration(this.instanceId)] = data.grid_color + + // Update the state with the modified array + updateStateForInstance(this.instanceId, { sceneBackgroundImg: newUn }); + // getSceneBackgroundImg(this.instanceId)[getIteration(this.instanceId)] = data.grid_color + let k = 0; + let temp_label_color_list:any = [] + let temp_label_list:any = [] + for(let i = 0 ;i < result.length-1;i++){ + + if (data.properties[i] === 0) { + let color:any = data.label_color_list[k] || [204,204,204] + let label:any = data.label_list[k] || 'unlabeled' + temp_label_color_list.push(color) + temp_label_list.push(label) + k + k+1 + } else{ + temp_label_color_list.push([204,204,204]) + temp_label_list.push('unlabeled') + } + + } + + const label_color_list = temp_label_color_list + const label_list = temp_label_list; + console.log('label_color_list.length',label_color_list.length) + const prediction_list = data.prediction_list; + + const background_point_number = grid_index.length; + + const real_data_number = label_color_list.length; + this.tSNETotalIter = data.maximum_iteration; + updateStateForInstance(this.instanceId, {tSNETotalIter:data.maximum_iteration}) + // this.state.tSNETotalIter = data.maximum_iteration; + + this.tSNEIteration = iteration; + this.DVIValidPointNumber[iteration] = real_data_number + background_point_number; + this.DVIAvailableIteration.push(iteration); + const current_length = this.points.length; + + const training_data = data.training_data; + const testing_data = data.testing_data; + const new_selection = data.new_selection; + const noisy_data = data.noisy_data; + const original_label_list = data.original_label_list; + + const evaluation = data.evaluation; + this.DVIEvaluation[iteration] = evaluation; + const inv_acc = data.inv_acc_list || []; + + if (!getProperties(this.instanceId)) { + updateStateForInstance(this.instanceId, {properties:[]}) + // getProperties(this.instanceId) = [] + } + const newPro = getProperties(this.instanceId); + + // Perform the splice operation on the new array + newPro[iteration] = data.properties + + // Update the state with the modified array + updateStateForInstance(this.instanceId, { properties: newPro }); + + // getProperties(this.instanceId)[iteration] = data.properties; + updateStateForInstance(this.instanceId, {unLabelData:[]}) + updateStateForInstance(this.instanceId, {testingData:[]}) + updateStateForInstance(this.instanceId, {labeledData:[]}) + // getUnLabelData(this.instanceId) = [] + // getTestingData(this.instanceId) = [] + // this.state.labeledData = [] + if (!getNowShowIndicates(this.instanceId)) { + updateStateForInstance(this.instanceId, {nowShowIndicates:[]}) + // getNowShowIndicates(this.instanceId) = [] + + for (let i = 0; i < data.properties.length; i++) { + if (data.properties[i] === 1) { + const newUn = getUnLabelData(this.instanceId); + + // Perform the splice operation on the new array + newUn.push(i) + + // Update the state with the modified array + updateStateForInstance(this.instanceId, { unLabelData: newUn }); + // getUnLabelData(this.instanceId).push(i) + } else if (data.properties[i] === 2) { + const newUn = getTestingData(this.instanceId); + + // Perform the splice operation on the new array + newUn.push(i) + + // Update the state with the modified array + updateStateForInstance(this.instanceId, { testingData: newUn }); + // getTestingData(this.instanceId).push(i) + } else { + const newUn = getLabeledData(this.instanceId); + + // Perform the splice operation on the new array + newUn.push(i) + + // Update the state with the modified array + updateStateForInstance(this.instanceId, { labeledData: newUn }); + // this.state.labeledData.push(i) + } + const newNow = getNowShowIndicates(this.instanceId); + + // Perform the splice operation on the new array + newNow.push(i) + + // Update the state with the modified array + updateStateForInstance(this.instanceId, { nowShowIndicates: newNow }); + // getNowShowIndicates(this.instanceId).push(i) + } + } + + // const is_uncertainty_diversity_tot_exist = data.uncertainty_diversity_tot?.is_exist; + // this.is_uncertainty_diversity_tot_exist[iteration] = is_uncertainty_diversity_tot_exist; + + const filterIndices = data.selectedPoints; + + + for (let i = 0; i < real_data_number + background_point_number - current_length; i++) { + const newDataPoint: DataPoint = { + metadata: { label: "background" }, + index: current_length + i, + projections: { + 'tsne-0': 0, + 'tsne-1': 0, + 'tsne-2': 0 + }, + }; + this.points.push(newDataPoint); + } + for (let i = 0; i < this.points.length; i++) { + let dataPoint = this.points[i]; + if (dataPoint.DVI_projections == undefined || dataPoint.DVI_color == undefined) { + dataPoint.DVI_projections = {}; + dataPoint.DVI_color = {}; + } + if (dataPoint.training_data == undefined || dataPoint.testing_data == undefined) { + dataPoint.training_data = {}; + dataPoint.testing_data = {}; + } + if (dataPoint.prediction == undefined) { + dataPoint.prediction = {}; + } + if (dataPoint.new_selection == undefined) { + dataPoint.new_selection = {}; + } + if (dataPoint.inv_acc == undefined) { + dataPoint.inv_acc = {}; + } + if (dataPoint.uncertainty == undefined) { + dataPoint.uncertainty = {}; + } + if (dataPoint.uncertainty_ranking == undefined) { + dataPoint.uncertainty_ranking = {}; + } + if (dataPoint.diversity == undefined) { + dataPoint.diversity = {}; + } + if (dataPoint.diversity_ranking == undefined) { + dataPoint.diversity_ranking = {}; + } + if (dataPoint.tot == undefined) { + dataPoint.tot = {}; + } + if (dataPoint.tot_ranking == undefined) { + dataPoint.tot_ranking = {}; + } + } + + for (let i = 0; i < real_data_number; i++) { + let dataPoint = this.points[i]; + dataPoint.projections['tsne-0'] = result[i][0]; + dataPoint.projections['tsne-1'] = result[i][1]; + dataPoint.projections['tsne-2'] = 0; + dataPoint.color = rgbToHex(label_color_list[i][0], label_color_list[i][1], label_color_list[i][2]); + dataPoint.DVI_projections[iteration] = [result[i][0], result[i][1]]; + dataPoint.DVI_color[iteration] = dataPoint.color; + dataPoint.training_data[iteration] = false; + dataPoint.testing_data[iteration] = false; + dataPoint.current_training = false; + dataPoint.current_testing = false; + dataPoint.metadata['label'] = label_list[i]; + dataPoint.prediction[iteration] = prediction_list[i]; + dataPoint.current_prediction = prediction_list[i]; + dataPoint.inv_acc[iteration] = inv_acc[i]; + dataPoint.current_inv_acc = inv_acc[i]; + if (prediction_list[i] == label_list[i]) { + dataPoint.current_wrong_prediction = false; + } else { + dataPoint.current_wrong_prediction = true; + } + // dataPoint.new_selection[iteration] = false; + dataPoint.current_new_selection = false; + if (original_label_list) { + dataPoint.original_label = original_label_list[i]; + } + dataPoint.noisy = false; + // if (is_uncertainty_diversity_tot_exist) { + // dataPoint.metadata['uncertainty'] = data.uncertainty_diversity_tot.uncertainty[i]; + // dataPoint.uncertainty[iteration] = dataPoint.metadata['uncertainty']; + // dataPoint.metadata['diversity'] = data.uncertainty_diversity_tot.diversity[i]; + // dataPoint.diversity[iteration] = dataPoint.metadata['diversity']; + // dataPoint.metadata['tot'] = data.uncertainty_diversity_tot.tot[i]; + // dataPoint.tot[iteration] = dataPoint.metadata['tot']; + // dataPoint.uncertainty_ranking[iteration] = data.uncertainty_diversity_tot.uncertainty_ranking[i]; + // dataPoint.current_uncertainty_ranking = data.uncertainty_diversity_tot.uncertainty_ranking[i]; + // dataPoint.diversity_ranking[iteration] = data.uncertainty_diversity_tot.diversity_ranking[i]; + // dataPoint.current_diversity_ranking = data.uncertainty_diversity_tot.diversity_ranking[i]; + // dataPoint.tot_ranking[iteration] = data.uncertainty_diversity_tot.tot_ranking[i]; + // dataPoint.current_tot_ranking = data.uncertainty_diversity_tot.tot_ranking[i]; + // } + } + + for (let i = 0; i < background_point_number; i++) { + let dataPoint = this.points[i + real_data_number]; + dataPoint.projections['tsne-0'] = grid_index[i][0]; + dataPoint.projections['tsne-1'] = grid_index[i][1]; + dataPoint.projections['tsne-2'] = 0; + dataPoint.color = rgbToHex(grid_color[i][0], grid_color[i][1], grid_color[i][2]); + dataPoint.DVI_projections[iteration] = [grid_index[i][0], grid_index[i][1]]; + dataPoint.DVI_color[iteration] = dataPoint.color; + dataPoint.training_data[iteration] = undefined; + dataPoint.testing_data[iteration] = undefined; + dataPoint.current_training = undefined; + dataPoint.current_testing = undefined; + dataPoint.prediction[iteration] = "background"; + dataPoint.current_prediction = "background"; + dataPoint.inv_acc[iteration] = 0; + dataPoint.current_inv_acc = 0; + dataPoint.current_new_selection = undefined; + // dataPoint.new_selection[iteration] = undefined; + dataPoint.current_wrong_prediction = undefined; + dataPoint.original_label = "background"; + dataPoint.noisy = undefined; + // if (is_uncertainty_diversity_tot_exist) { + // dataPoint.metadata['uncertainty'] = -1; + // dataPoint.uncertainty[iteration] = -1; + // dataPoint.metadata['diversity'] = -1; + // dataPoint.diversity[iteration] = -1; + // dataPoint.metadata['tot'] = -1; + // dataPoint.tot[iteration] = -1; + // dataPoint.uncertainty_ranking[iteration] = -1; + // dataPoint.current_uncertainty_ranking = -1; + // dataPoint.diversity_ranking[iteration] = -1; + // dataPoint.current_diversity_ranking = -1; + // dataPoint.tot_ranking[iteration] = -1; + // dataPoint.current_tot_ranking = -1; + // } + } + + for (let i = real_data_number + background_point_number; i < this.points.length; i++) { + let dataPoint = this.points[i]; + dataPoint.projections = {}; + } + + for (let i = 0; i < training_data.length; i++) { + const dataIndex = training_data[i]; + let dataPoint = this.points[dataIndex]; + dataPoint.training_data[iteration] = true; + dataPoint.current_training = true; + } + + for (let i = 0; i < testing_data.length; i++) { + const dataIndex = testing_data[i]; + let dataPoint = this.points[dataIndex]; + dataPoint.testing_data[iteration] = true; + dataPoint.current_testing = true; + } + + // for (let i = 0; i < new_selection.length; i++) { + // const dataIndex = new_selection[i]; + // let dataPoint = this.points[dataIndex]; + // dataPoint.new_selection[iteration] = true; + // dataPoint.current_new_selection = true; + // } + + // for (let i = 0; i < noisy_data?.length; i++) { + // const dataIndex = noisy_data[i]; + // let dataPoint = this.points[dataIndex]; + // dataPoint.noisy = true; + // } + + // const matches = this.get_match(); + // + // for (let i = 0; i < real_data_number; i++) { + // let dataPoint = this.points[i]; + // if (indices.indexOf(i) == -1 && i < this.DVICurrentRealDataNumber) { + // dataPoint.projections = {} + // } + // } + + this.DVICurrentRealDataNumber = real_data_number; + this.DVIRealDataNumber[iteration] = real_data_number; + this.DVIfilterIndices = []; + for (let i = 0; i < real_data_number + background_point_number; i++) { + this.DVIfilterIndices.push(i); + } + this.DVIDataList[iteration] = this.points + if (this.DVIDataList[iteration] && this.DVIDataList[iteration].length && this.DVIDataList.lenght > iteration) { + for (let i = this.DVIDataList.length + 1; i > iteration; i--) { + this.DVIDataList[i] = this.DVIDataList[i - 1] + } + } + updateStateForInstance(this.instanceId, {DVIDataList:this.DVIDataList}) + // this.state.DVIDataList = this.DVIDataList + stepCallback(this.tSNEIteration, evaluation, new_selection, filterIndices, this.tSNETotalIter); + }).catch(error => { + logging.setErrorMessage('Error'); + console.log(error); + stepCallback(null, null, null, null, null); + }); + + // }); + + } + + async getSpriteImage(id: any, stepCallback: (imgData: any) => void) { + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + if (getModelMath(this.instanceId)) { + this.DVIsubjectModelPath = getModelMath(this.instanceId) + } + // const msgId = logging.setModalMessage('Fetching sprite image...'); + // await fetch("standalone_projector_config.json", { method: 'GET' }) + // .then(response => response.json()) + // .then(data => { this.DVIsubjectModelPath = data.DVIsubjectModelPath }) + + await fetch(`http://${this.DVIServer}/spriteImage?index=${id}&path=${this.DVIsubjectModelPath}&username=${window.sessionStorage.username}`, { + method: 'GET', + mode: 'cors', + }).then(response => response.json()).then(data => { + // logging.setModalMessage(null, msgId); + stepCallback(data); + }).catch(error => { + // logging.setModalMessage(null, msgId); + console.log("error", error); + }); + } + async getSpriteText(id: any, stepCallback: (textData: any) => void) { + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + if (getModelMath(this.instanceId)) { + this.DVIsubjectModelPath = getModelMath(this.instanceId) + } + // const msgId = logging.setModalMessage('Fetching sprite image...'); + // await fetch("standalone_projector_config.json", { method: 'GET' }) + // .then(response => response.json()) + // .then(data => { this.DVIsubjectModelPath = data.DVIsubjectModelPath }) + + await fetch(`http://${this.DVIServer}/spriteText?iteration=${getIteration(this.instanceId)}&index=${id}&path=${this.DVIsubjectModelPath}&username=${window.sessionStorage.username}`, { + method: 'GET', + mode: 'cors', + }).then(response => response.json()).then(data => { + // logging.setModalMessage(null, msgId); + + stepCallback(data); + }).catch(error => { + // logging.setModalMessage(null, msgId); + console.log("error", error); + }); + } + + + iterationChangeReset() { + updateStateForInstance(this.instanceId,{alQueryResPointIndices:[]}) + updateStateForInstance(this.instanceId,{queryResPointIndices:[]}) + + updateStateForInstance(this.instanceId,{previousIndecates:[]}) + updateStateForInstance(this.instanceId,{alSuggestionIndicates:[]}) + updateStateForInstance(this.instanceId,{alSuggestLabelList:[]}) + updateStateForInstance(this.instanceId,{alSuggestScoreList:[]}) + updateStateForInstance(this.instanceId,{customSelection:[]}) + updateStateForInstance(this.instanceId,{flagindecatesList:[]}) + // this.state.alQueryResPointIndices = [] + // this.state.queryResPointIndices = [] + // this.state.previousIndecates = [] + + // this.state.alSuggestionIndicates = [] + // this.state.alSuggestLabelList = [] + // this.state.alSuggestScoreList = [] + // this.state.customSelection = [] + // this.state.flagindecatesList = [] + } + + + + setSupervision(superviseColumn: string, superviseInput?: string) { + if (superviseColumn != null) { + this.superviseLabels = this.shuffledDataIndices + .slice(0, TSNE_SAMPLE_SIZE) + .map((index) => + this.points[index].metadata[superviseColumn] !== undefined + ? String(this.points[index].metadata[superviseColumn]) + : `Unknown #${index}` + ); + } + if (superviseInput != null) { + this.superviseInput = superviseInput; + } + if (this.tsne) { + this.tsne.setSupervision(this.superviseLabels, this.superviseInput); + } + } + setSuperviseFactor(superviseFactor: number) { + if (superviseFactor != null) { + this.superviseFactor = superviseFactor; + if (this.tsne) { + this.tsne.setSuperviseFactor(superviseFactor); + } + } + } + /** + * Merges metadata to the dataset and returns whether it succeeded. + */ + mergeMetadata(metadata: SpriteAndMetadataInfo): boolean { + if (metadata.pointsInfo.length !== this.points.length) { + let errorMessage = + `Number of tensors (${this.points.length}) do not` + + ` match the number of lines in metadata` + + ` (${metadata.pointsInfo.length}).`; + if ( + metadata.stats.length === 1 && + this.points.length + 1 === metadata.pointsInfo.length + ) { + // If there is only one column of metadata and the number of points is + // exactly one less than the number of metadata lines, this is due to an + // unnecessary header line in the metadata and we can show a meaningful + // error. + logging.setErrorMessage( + errorMessage + + ' Single column metadata should not have a header ' + + 'row.', + 'merging metadata' + ); + return false; + } else if ( + metadata.stats.length > 1 && + this.points.length - 1 === metadata.pointsInfo.length + ) { + // If there are multiple columns of metadata and the number of points is + // exactly one greater than the number of lines in the metadata, this + // means there is a missing metadata header. + logging.setErrorMessage( + errorMessage + + ' Multi-column metadata should have a header ' + + 'row with column labels.', + 'merging metadata' + ); + return false; + } + logging.setWarningMessage(errorMessage); + } + this.spriteAndMetadataInfo = metadata; + metadata.pointsInfo + .slice(0, this.points.length) + .forEach((m, i) => (this.points[i].metadata = m)); + return true; + } + stopTSNE() { + this.tSNEShouldStop = true; + } + /** + * Finds the nearest neighbors of the query point using a + * user-specified distance metric. + */ + findNeighbors( + pointIndex: number, + distFunc: DistanceFunction, + numNN: number + ): knn.NearestEntry[] { + // Find the nearest neighbors of a particular point. + let neighbors = knn.findKNNofPoint( + this.points, + pointIndex, + numNN, + (d) => d.vector, + distFunc + ); + // TODO(@dsmilkov): Figure out why we slice. + let result = neighbors.slice(0, numNN); + return result; + } + /** + * Search the dataset based on a metadata field and save all the predicates. + */ + query(query: string, inRegexMode: boolean, fieldName: string): [any, number[]] { + let predicate = util.getSearchPredicate(query, inRegexMode, fieldName); + let matches: number[] = []; + this.points.forEach((point, id) => { + let result = true; + for (let i = 0; i < this.DVIPredicates.length; i++) { + const current_predicate = this.DVIPredicates[i]; + if (!current_predicate(point)) { + result = false; + break; + } + } + if (result && predicate(point)) { + matches.push(id); + } + }); + return [predicate, matches]; + } + get_match() { + let matches: number[] = []; + this.points.forEach((point, id) => { + let result = true; + for (let i = 0; i < this.DVIPredicates.length; i++) { + const current_predicate = this.DVIPredicates[i]; + if (!current_predicate(point)) { + result = false; + break; + } + } + if (result) { + matches.push(id); + } + }); + return matches; + } +} +export type ProjectionType = 'tsne' | 'umap' | 'pca' | 'custom'; +export class Projection { + constructor( + public projectionType: ProjectionType, + public projectionComponents: ProjectionComponents3D, + public dimensionality: number, + public dataSet: DataSet + ) { } +} +export interface ColorOption { + name: string; + desc?: string; + map?: (value: string | number) => string; + /** List of items for the color map. Defined only for categorical map. */ + items?: { + label: string; + count: number; + }[]; + /** Threshold values and their colors. Defined for gradient color map. */ + thresholds?: { + value: number; + color: string; + }[]; + isSeparator?: boolean; + tooManyUniqueValues?: boolean; +} +/** + * An interface that holds all the data for serializing the current state of + * the world. + */ +export class State { + /** A label identifying this state. */ + label: string = ''; + /** Whether this State is selected in the bookmarks pane. */ + isSelected: boolean = false; + /** The selected projection tab. */ + selectedProjection: ProjectionType; + /** Dimensions of the DataSet. */ + dataSetDimensions: [number, number]; + /** t-SNE parameters */ + tSNEIteration: number = 0; + tSNEPerplexity: number = 0; + tSNELearningRate: number = 0; + tSNEis3d: boolean = true; + /** UMAP parameters */ + umapIs3d: boolean = true; + umapNeighbors: number = 15; + /** PCA projection component dimensions */ + pcaComponentDimensions: number[] = []; + /** Custom projection parameters */ + customSelectedSearchByMetadataOption: string; + customXLeftText: string; + customXLeftRegex: boolean; + customXRightText: string; + customXRightRegex: boolean; + customYUpText: string; + customYUpRegex: boolean; + customYDownText: string; + customYDownRegex: boolean; + /** The computed projections of the tensors. */ + projections: Array<{ + [key: string]: number; + }> = []; + /** Filtered dataset indices. */ + filteredPoints: number[]; + /** The indices of selected points. */ + selectedPoints: number[] = []; + /** Camera state (2d/3d, position, target, zoom, etc). */ + cameraDef: CameraDef; + /** Color by option. */ + selectedColorOptionName: string; + forceCategoricalColoring: boolean; + /** Label by option. */ + selectedLabelOption: string; +} +export function getProjectionComponents( + projection: ProjectionType, + components: (number | string)[] +): ProjectionComponents3D { + if (components.length > 3) { + throw new RangeError('components length must be <= 3'); + } + const projectionComponents: [string, string, string] = [null, null, null]; + const prefix = projection === 'custom' ? 'linear' : projection; + for (let i = 0; i < components.length; ++i) { + if (components[i] == null) { + continue; + } + projectionComponents[i] = prefix + '-' + components[i]; + } + return projectionComponents; +} +export function stateGetAccessorDimensions( + state: State +): Array { + let dimensions: Array; + switch (state.selectedProjection) { + case 'pca': + dimensions = state.pcaComponentDimensions.slice(); + break; + case 'tsne': + dimensions = [0, 1]; + if (state.tSNEis3d) { + dimensions.push(2); + } + break; + case 'umap': + dimensions = [0, 1]; + if (state.umapIs3d) { + dimensions.push(2); + } + break; + case 'custom': + dimensions = ['x', 'y']; + break; + default: + throw new Error('Unexpected fallthrough'); + } + return dimensions; +} + + diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/external.d.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/external.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f7d5d7989a91016b346ab16d17ac04605a6fdfaf --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/external.d.ts @@ -0,0 +1,24 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +interface AnalyticsEventType { + hitType: string; + page?: string; + eventCategory?: string; + eventAction?: string; + eventLabel?: string; + eventValue?: number; +} + +declare let ga: (command: string, eventObj: AnalyticsEventType) => void; diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/globalState.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/globalState.ts new file mode 100644 index 0000000000000000000000000000000000000000..37ce7a0365df47bbc8b743b4a7b57e73ec05ddba --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/globalState.ts @@ -0,0 +1,818 @@ + + +interface ComparatorState { + currentFocus: any, + hiddenBackground: boolean | false, + DVIDataList: any, + lineGeomertryList: any, + iteration: number, + last_iteration: number, + properties: any, + highlightedPointIndices: any, + contraVisHighlightIndices: any, + contraVisHighlightIndicesYellow: any, + contraVisHighlightIndicesBlue: any, + contraVisHighlightIndicesGreen: any, + contraVisBoldIndices: any, + predChangeIndices: any, + confChangeIndices: any, + isFilter: boolean | false, + customSelection: any, + checkboxDom: any, + isAdjustingSel: boolean | false, + scene: any, + renderer: any, + suggestionIndicates: any, + + unLabelData: any, + testingData: any, + labeledData: any, + + nowShowIndicates: any, + sceneBackgroundImg: any, + customMetadata: any, + + queryResPointIndices: any, + alQueryResPointIndices: any, + previousIndecates: any, + previousAnormalIndecates: any, + queryResAnormalIndecates: any, + queryResAnormalCleanIndecates: any, + alSuggestionIndicates: any, + alSuggestLabelList: any, + alSuggestScoreList: any, + previousHover: number, + + allResPositions: any, + modelMath: string, + tSNETotalIter: number, + taskType: string, + selectedStack: any, + ipAddress: string, + + treejson: any, + + rejectIndicates: any, + acceptIndicates: any, + + acceptInputList: any, + rejectInputList: any, + flagindecatesList: any, + selectedTotalEpoch: number, + backgroundMesh: any, + selectedList: any, + + worldSpacePointPositions: any, + isAnimatating: boolean | false + +} + + +// Extend the Window interface to include the comparator state +declare global { + interface Window { + comparatorState: { [instanceId: number]: ComparatorState }; + d3:any + } +} + +// Initialize the global state object if it doesn't exist +if (!window.comparatorState) { + window.comparatorState = {}; +} + +export function getDVIDataList(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].DVIDataList; +} + +export function getAcceptIndicates(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].acceptIndicates; +} + +export function getAcceptInputList(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].acceptInputList; +} + +export function getAlQueryResPointIndices(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].alQueryResPointIndices; +} + +export function getAlSuggestLabelList(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].alSuggestLabelList; +} + +export function getAlSuggestScoreList(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].alSuggestScoreList; +} + +export function getAlSuggestionIndicates(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].alSuggestionIndicates; +} + +export function getAllResPositions(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].allResPositions; +} + +export function getBackGroundMesh(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].backgroundMesh; +} + +export function getCheckBoxDom(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].checkboxDom; +} + +export function getConfChangeIndices(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].confChangeIndices; +} + +export function getCurrentFocus(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].currentFocus; +} + +export function getCustomMetaData(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].customMetadata; +} + +export function getCustomSelection(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].customSelection; +} + +// export function getD3(instanceId: number): any { +// if (!window.comparatorState[instanceId]) { +// // Initialize with default state if not present +// window.comparatorState[instanceId] = {} as ComparatorState; +// console.log("fff") + + +// } +// // console.log("258258") +// // console.log(instanceId, window.comparatorState[instanceId]) +// return window.comparatorState[instanceId].d3; +// } + + +export function getFlagindecatesList(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].flagindecatesList; +} + +export function getHiddenBackground(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].hiddenBackground; +} + +export function getHighlightedPointIndices(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].highlightedPointIndices; +} + +export function getIsAdjustingSel(instanceId: number): boolean { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].isAdjustingSel; +} + +export function getIsAnimating(instanceId: number): boolean { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].isAnimatating; +} + +export function getIsFilter(instanceId: number): boolean { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].isFilter; +} + +export function getIteration(instanceId: number): number { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].iteration; +} + +export function getLabeledData(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].labeledData; +} + +export function getLastIteration(instanceId: number): number { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].last_iteration; +} + +export function getLineGeomertryList(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].lineGeomertryList; +} + +export function getModelMath(instanceId: number): string { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].modelMath; +} + +export function getNowShowIndicates(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].nowShowIndicates; +} + +export function getPredChangeIndices(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].predChangeIndices; +} + +export function getPreviousAnormalIndecates(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].previousAnormalIndecates; +} + +export function getPreviousHover(instanceId: number): number { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].previousHover; +} + +export function getProperties(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].properties; +} + +export function getPreviousIndecates(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].previousIndecates; +} + + +export function getQueryResAnormalCleanIndecates(instanceId: number):any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].queryResAnormalCleanIndecates; +} + + +export function getQueryResAnormalIndecates(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].queryResAnormalIndecates; +} + + +export function getQueryResPointIndices(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].queryResPointIndices; +} + + +export function getRejectIndicates(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].rejectIndicates; +} + +export function getRejectInputList(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].rejectInputList; +} + + +export function getRenderer(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].renderer; +} + +export function getScene(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].scene; +} + +export function getSceneBackgroundImg(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].sceneBackgroundImg; +} + +export function getSelectedList(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].selectedList; +} + +export function getSelectedStack(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].selectedStack; +} + +export function getSelectedTotalEpoch(instanceId: number): number { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].selectedTotalEpoch; +} + +export function getSuggestionIndicates(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].suggestionIndicates; +} + +export function getTSNETotalIter(instanceId: number): number { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].tSNETotalIter; +} + +export function getTaskType(instanceId: number): string { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].taskType; +} + +export function getTestingData(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].testingData; +} + +export function getTreeJson(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + // console.log("258258") + // console.log(instanceId, window.comparatorState[instanceId]) + return window.comparatorState[instanceId].treejson; +} + +export function getUnLabelData(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + return window.comparatorState[instanceId].unLabelData; +} + +export function getWorldSpacePointPositions(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + return window.comparatorState[instanceId].worldSpacePointPositions; +} + +export function getIpAddress(instanceId: number): string { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + console.log("fff") + + + } + return window.comparatorState[instanceId].ipAddress; +} + +export function getcontraVisHighlightIndices(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + } + return window.comparatorState[instanceId].contraVisHighlightIndices; +} + +export function getcontraVisHighlightIndicesYellow(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + } + return window.comparatorState[instanceId].contraVisHighlightIndicesYellow; +} + +export function getcontraVisHighlightIndicesBlue(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + } + return window.comparatorState[instanceId].contraVisHighlightIndicesBlue; +} +export function getcontraVisHighlightIndicesGreen(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + // Initialize with default state if not present + window.comparatorState[instanceId] = {} as ComparatorState; + } + return window.comparatorState[instanceId].contraVisHighlightIndicesGreen; +} +export function getcontraVisBoldIndices(instanceId: number): any { + if (!window.comparatorState[instanceId]) { + window.comparatorState[instanceId] = {} as ComparatorState; + } + return window.comparatorState[instanceId].contraVisBoldIndices; +} + + +// // Define a custom event name +// export const STATE_UPDATED_EVENT = 'stateUpdated'; + +export function updateStateForInstance(instanceId: number, newState: Partial): void { + if (!window.comparatorState[instanceId]) { + window.comparatorState[instanceId] = {} as ComparatorState; + } + // Merge new state with existing state + window.comparatorState[instanceId] = { ...window.comparatorState[instanceId], ...newState }; +} + +// Function to get the complete session states from sessionStorage +export function getCompleteSessionStates() { + const storedData = window.sessionStorage.getItem('sessionStates'); + return storedData ? JSON.parse(storedData) : {}; +} + +// Function to get the current state for a specific instance from sessionStorage +export function getCurrentSessionState(instanceId:number) { + const sessionStates = getCompleteSessionStates(); + return sessionStates[instanceId] || {}; +} + +// Function to update the state for a specific instance +export function updateSessionStateForInstance(instanceId:number, newState:any) { + // Get the complete session states or initialize it if it doesn't exist + const sessionStates = getCompleteSessionStates(); + + // Update the state for the specific instance + sessionStates[instanceId] = { ...sessionStates[instanceId], ...newState }; + + // Serialize and store the updated states back in sessionStorage + window.sessionStorage.setItem('sessionStates', JSON.stringify(sessionStates)); +} \ No newline at end of file diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/heap.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/heap.ts new file mode 100644 index 0000000000000000000000000000000000000000..9347331e36d238117aa89bbfa7835e8b5e1216e4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/heap.ts @@ -0,0 +1,141 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export type HeapItem = { + key: number; + value: T; +}; +/** + * Min-heap data structure. Provides O(1) for peek, returning the smallest key. + */ +// TODO(@jart): Rename to Heap and use Comparator. +export class MinHeap { + private arr: HeapItem[] = []; + /** Push an element with the provided key. */ + push(key: number, value: T): void { + this.arr.push({key, value}); + this.bubbleUp(this.arr.length - 1); + } + /** Pop the element with the smallest key. */ + pop(): HeapItem { + if (this.arr.length === 0) { + throw new Error('pop() called on empty binary heap'); + } + let item = this.arr[0]; + let last = this.arr.length - 1; + this.arr[0] = this.arr[last]; + this.arr.pop(); + if (last > 0) { + this.bubbleDown(0); + } + return item; + } + /** Returns, but doesn't remove the element with the smallest key */ + peek(): HeapItem { + return this.arr[0]; + } + /** + * Pops the element with the smallest key and at the same time + * adds the newly provided element. This is faster than calling + * pop() and push() separately. + */ + popPush(key: number, value: T): HeapItem { + if (this.arr.length === 0) { + throw new Error('pop() called on empty binary heap'); + } + let item = this.arr[0]; + this.arr[0] = {key, value}; + if (this.arr.length > 0) { + this.bubbleDown(0); + } + return item; + } + /** Returns the number of elements in the heap. */ + size(): number { + return this.arr.length; + } + /** Returns all the items in the heap. */ + items(): HeapItem[] { + return this.arr; + } + private swap(a: number, b: number) { + let temp = this.arr[a]; + this.arr[a] = this.arr[b]; + this.arr[b] = temp; + } + private bubbleDown(pos: number) { + let left = (pos << 1) + 1; + let right = left + 1; + let largest = pos; + if (left < this.arr.length && this.arr[left].key < this.arr[largest].key) { + largest = left; + } + if ( + right < this.arr.length && + this.arr[right].key < this.arr[largest].key + ) { + largest = right; + } + if (largest !== pos) { + this.swap(largest, pos); + this.bubbleDown(largest); + } + } + private bubbleUp(pos: number) { + if (pos <= 0) { + return; + } + let parent = (pos - 1) >> 1; + if (this.arr[pos].key < this.arr[parent].key) { + this.swap(pos, parent); + this.bubbleUp(parent); + } + } +} +/** List that keeps the K elements with the smallest keys. */ +export class KMin { + private k: number; + private maxHeap = new MinHeap(); + /** Constructs a new k-min data structure with the provided k. */ + constructor(k: number) { + this.k = k; + } + /** Adds an element to the list. */ + add(key: number, value: T) { + if (this.maxHeap.size() < this.k) { + this.maxHeap.push(-key, value); + return; + } + let largest = this.maxHeap.peek(); + // If the new element is smaller, replace the largest with the new element. + if (key < -largest.key) { + this.maxHeap.popPush(-key, value); + } + } + /** Returns the k items with the smallest keys. */ + getMinKItems(): T[] { + let items = this.maxHeap.items(); + items.sort((a, b) => b.key - a.key); + return items.map((a) => a.value); + } + /** Returns the size of the list. */ + getSize(): number { + return this.maxHeap.size(); + } + /** Returns the largest key in the list. */ + getLargestKey(): number | null { + return this.maxHeap.size() === 0 ? null : -this.maxHeap.peek().key; + } +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/knn.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/knn.ts new file mode 100644 index 0000000000000000000000000000000000000000..65d950bcd2db5097f450a2882780c377cdf2a64e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/knn.ts @@ -0,0 +1,255 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as tf from '../../../webapp/third_party/tfjs'; + +import {KMin} from './heap'; +import * as vector from './vector'; +import * as logging from './logging'; +import * as util from './util'; + +export type NearestEntry = { + index: number; + dist: number; +}; +/** + * Optimal size for the height of the matrix when doing computation on the GPU + * using WebGL. This was found experimentally. + * + * This also guarantees that for computing pair-wise distance for up to 10K + * vectors, no more than 40MB will be allocated in the GPU. Without the + * allocation limit, we can freeze the graphics of the whole OS. + */ +const OPTIMAL_GPU_BLOCK_SIZE = 256; +/** Id of message box used for knn gpu progress bar. */ +const KNN_GPU_MSG_ID = 'knn-gpu'; +/** + * Returns the K nearest neighbors for each vector where the distance + * computation is done on the GPU (WebGL) using cosine distance. + * + * @param dataPoints List of data points, where each data point holds an + * n-dimensional vector. + * @param k Number of nearest neighbors to find. + * @param accessor A method that returns the vector, given the data point. + */ +export function findKNNGPUCosine( + dataPoints: T[], + k: number, + accessor: (dataPoint: T) => Float32Array +): Promise { + let N = dataPoints.length; + let dim = accessor(dataPoints[0]).length; + // The goal is to compute a large matrix multiplication A*A.T where A is of + // size NxD and A.T is its transpose. This results in a NxN matrix which + // could be too big to store on the GPU memory. To avoid memory overflow, we + // compute multiple A*partial_A.T where partial_A is of size BxD (B is much + // smaller than N). This results in storing only NxB size matrices on the GPU + // at a given time. + // A*A.T will give us NxN matrix holding the cosine distance between every + // pair of points, which we sort using KMin data structure to obtain the + // K nearest neighbors for each point. + let typedArray = vector.toTypedArray(dataPoints, accessor); + const bigMatrix = tf.tensor(typedArray, [N, dim]); + let nearest: NearestEntry[][] = new Array(N); + let numPieces = Math.ceil(N / OPTIMAL_GPU_BLOCK_SIZE); + let M = Math.floor(N / numPieces); + let modulo = N % numPieces; + let offset = 0; + let progress = 0; + let progressDiff = 1 / (2 * numPieces); + let piece = 0; + function step(resolve: (result: NearestEntry[][]) => void) { + let progressMsg = + 'Finding nearest neighbors: ' + (progress * 100).toFixed() + '%'; + util + .runAsyncTask( + progressMsg, + async () => { + let B = piece < modulo ? M + 1 : M; + let typedB = new Float32Array(B * dim); + for (let i = 0; i < B; ++i) { + let vector = accessor(dataPoints[offset + i]); + for (let d = 0; d < dim; ++d) { + typedB[i * dim + d] = vector[d]; + } + } + const partialMatrix = tf.tensor(typedB, [dim, B]); + + const result = tf.matMul(bigMatrix, partialMatrix); + const partial = await result.array(); + partialMatrix.dispose(); + result.dispose(); + + progress += progressDiff; + for (let i = 0; i < B; i++) { + let kMin = new KMin(k); + let iReal = offset + i; + for (let j = 0; j < N; j++) { + if (j === iReal) { + continue; + } + let cosDist = 1 - partial[j][i]; + kMin.add(cosDist, {index: j, dist: cosDist}); + } + nearest[iReal] = kMin.getMinKItems(); + } + progress += progressDiff; + offset += B; + piece++; + }, + KNN_GPU_MSG_ID + ) + .then( + () => { + if (piece < numPieces) { + step(resolve); + } else { + logging.setModalMessage(null, KNN_GPU_MSG_ID); + bigMatrix.dispose(); + resolve(nearest); + } + }, + (error) => { + // GPU failed. Reverting back to CPU. + logging.setModalMessage(null, KNN_GPU_MSG_ID); + let distFunc = (a, b, limit) => vector.cosDistNorm(a, b); + findKNN(dataPoints, k, accessor, distFunc).then((nearest) => { + resolve(nearest); + }); + } + ); + } + return new Promise((resolve) => step(resolve)); +} +/** + * Returns the K nearest neighbors for each vector where the distance + * computation is done on the CPU using a user-specified distance method. + * + * @param dataPoints List of data points, where each data point holds an + * n-dimensional vector. + * @param k Number of nearest neighbors to find. + * @param accessor A method that returns the vector, given the data point. + * @param dist Method that takes two vectors and a limit, and computes the + * distance between two vectors, with the ability to stop early if the + * distance is above the limit. + */ +export function findKNN( + dataPoints: T[], + k: number, + accessor: (dataPoint: T) => Float32Array, + dist: (a: vector.Vector, b: vector.Vector, limit: number) => number +): Promise { + return util.runAsyncTask( + 'Finding nearest neighbors...', + () => { + let N = dataPoints.length; + let nearest: NearestEntry[][] = new Array(N); + // Find the distances from node i. + let kMin: KMin[] = new Array(N); + for (let i = 0; i < N; i++) { + kMin[i] = new KMin(k); + } + for (let i = 0; i < N; i++) { + let a = accessor(dataPoints[i]); + let kMinA = kMin[i]; + for (let j = i + 1; j < N; j++) { + let kMinB = kMin[j]; + let limitI = + kMinA.getSize() === k + ? kMinA.getLargestKey() || Number.MAX_VALUE + : Number.MAX_VALUE; + let limitJ = + kMinB.getSize() === k + ? kMinB.getLargestKey() || Number.MAX_VALUE + : Number.MAX_VALUE; + let limit = Math.max(limitI, limitJ); + let dist2ItoJ = dist(a, accessor(dataPoints[j]), limit); + if (dist2ItoJ >= 0) { + kMinA.add(dist2ItoJ, {index: j, dist: dist2ItoJ}); + kMinB.add(dist2ItoJ, {index: i, dist: dist2ItoJ}); + } + } + } + for (let i = 0; i < N; i++) { + nearest[i] = kMin[i].getMinKItems(); + } + return nearest; + } + ); +} +/** Calculates the minimum distance between a search point and a rectangle. */ +function minDist( + point: [number, number], + x1: number, + y1: number, + x2: number, + y2: number +) { + let x = point[0]; + let y = point[1]; + let dx1 = x - x1; + let dx2 = x - x2; + let dy1 = y - y1; + let dy2 = y - y2; + if (dx1 * dx2 <= 0) { + // x is between x1 and x2 + if (dy1 * dy2 <= 0) { + // (x,y) is inside the rectangle + return 0; // return 0 as point is in rect + } + return Math.min(Math.abs(dy1), Math.abs(dy2)); + } + if (dy1 * dy2 <= 0) { + // y is between y1 and y2 + // We know it is already inside the rectangle + return Math.min(Math.abs(dx1), Math.abs(dx2)); + } + let corner: [number, number]; + if (x > x2) { + // Upper-right vs lower-right. + corner = y > y2 ? [x2, y2] : [x2, y1]; + } else { + // Upper-left vs lower-left. + corner = y > y2 ? [x1, y2] : [x1, y1]; + } + return Math.sqrt(vector.dist22D([x, y], corner)); +} +/** + * Returns the nearest neighbors of a particular point. + * + * @param dataPoints List of data points. + * @param pointIndex The index of the point we need the nearest neighbors of. + * @param k Number of nearest neighbors to search for. + * @param accessor Method that maps a data point => vector (array of numbers). + * @param distance Method that takes two vectors and returns their distance. + */ +export function findKNNofPoint( + dataPoints: T[], + pointIndex: number, + k: number, + accessor: (dataPoint: T) => Float32Array, + distance: (a: vector.Vector, b: vector.Vector) => number +) { + let kMin = new KMin(k); + let a = accessor(dataPoints[pointIndex]); + for (let i = 0; i < dataPoints.length; ++i) { + if (i === pointIndex) { + continue; + } + let b = accessor(dataPoints[i]); + let dist = distance(a, b); + kMin.add(dist, {index: i, dist: dist}); + } + return kMin.getMinKItems(); +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/label.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/label.ts new file mode 100644 index 0000000000000000000000000000000000000000..9598cec2e18b4f42e47f7fb1313248156a8cbd6c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/label.ts @@ -0,0 +1,142 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export interface BoundingBox { + loX: number; + loY: number; + hiX: number; + hiY: number; +} +/** + * Accelerates label placement by dividing the view into a uniform grid. + * Labels only need to be tested for collision with other labels that overlap + * the same grid cells. This is a fork of {@code amoeba.CollisionGrid}. + */ +export class CollisionGrid { + private numHorizCells: number; + private numVertCells: number; + private grid: BoundingBox[][]; + private bound: BoundingBox; + private cellWidth: number; + private cellHeight: number; + /** + * Constructs a new Collision grid. + * + * @param bound The bound of the grid. Labels out of bounds will be rejected. + * @param cellWidth Width of a cell in the grid. + * @param cellHeight Height of a cell in the grid. + */ + constructor(bound: BoundingBox, cellWidth: number, cellHeight: number) { + /** The bound of the grid. Labels out of bounds will be rejected. */ + this.bound = bound; + /** Width of a cell in the grid. */ + this.cellWidth = cellWidth; + /** Height of a cell in the grid. */ + this.cellHeight = cellHeight; + /** Number of grid cells along the x axis. */ + this.numHorizCells = Math.ceil(this.boundWidth(bound) / cellWidth); + /** Number of grid cells along the y axis. */ + this.numVertCells = Math.ceil(this.boundHeight(bound) / cellHeight); + /** + * The 2d grid (stored as a 1d array.) Each cell consists of an array of + * BoundingBoxes for objects that are in the cell. + */ + this.grid = new Array(this.numHorizCells * this.numVertCells); + } + private boundWidth(bound: BoundingBox) { + return bound.hiX - bound.loX; + } + private boundHeight(bound: BoundingBox) { + return bound.hiY - bound.loY; + } + private boundsIntersect(a: BoundingBox, b: BoundingBox) { + return !(a.loX > b.hiX || a.loY > b.hiY || a.hiX < b.loX || a.hiY < b.loY); + } + /** + * Checks if a given bounding box has any conflicts in the grid and inserts it + * if none are found. + * + * @param bound The bound to insert. + * @param justTest If true, just test if it conflicts, without inserting. + * @return True if the bound was successfully inserted; false if it + * could not be inserted due to a conflict. + */ + insert(bound: BoundingBox, justTest = false): boolean { + // Reject if the label is out of bounds. + if ( + bound.hiX < this.bound.loX || + bound.loX > this.bound.hiX || + bound.hiY < this.bound.loY || + bound.loY > this.bound.hiY + ) { + return false; + } + let minCellX = this.getCellX(bound.loX); + let maxCellX = this.getCellX(bound.hiX); + let minCellY = this.getCellY(bound.loY); + let maxCellY = this.getCellY(bound.hiY); + // Check all overlapped cells to verify that we can insert. + let baseIdx = minCellY * this.numHorizCells + minCellX; + let idx = baseIdx; + for (let j = minCellY; j <= maxCellY; j++) { + for (let i = minCellX; i <= maxCellX; i++) { + let cell = this.grid[idx++]; + if (cell) { + for (let k = 0; k < cell.length; k++) { + if (this.boundsIntersect(bound, cell[k])) { + return false; + } + } + } + } + idx += this.numHorizCells - (maxCellX - minCellX + 1); + } + if (justTest) { + return true; + } + // Insert into the overlapped cells. + idx = baseIdx; + for (let j = minCellY; j <= maxCellY; j++) { + for (let i = minCellX; i <= maxCellX; i++) { + if (!this.grid[idx]) { + this.grid[idx] = [bound]; + } else { + this.grid[idx].push(bound); + } + idx++; + } + idx += this.numHorizCells - (maxCellX - minCellX + 1); + } + return true; + } + /** + * Returns the x index of the grid cell where the given x coordinate falls. + * + * @param x the coordinate, in world space. + * @return the x index of the cell. + */ + private getCellX(x: number) { + return Math.floor((x - this.bound.loX) / this.cellWidth); + } + /** + * Returns the y index of the grid cell where the given y coordinate falls. + * + * @param y the coordinate, in world space. + * @return the y index of the cell. + */ + private getCellY(y: number) { + return Math.floor((y - this.bound.loY) / this.cellHeight); + } +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/logging.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/logging.ts new file mode 100644 index 0000000000000000000000000000000000000000..cf1d9a71cf46fea8b6d6fe64b2eeb46ca16af7a1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/logging.ts @@ -0,0 +1,103 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +const WARNING_DURATION_MS = 10000; +let dom: HTMLElement = null; +let msgId = 0; +let numActiveMessages = 0; +export function setDomContainer(domElement: HTMLElement) { + dom = domElement; +} +/** + * Updates the user message with the provided id. + * + * @param msg The message shown to the user. If null, the message is removed. + * @param id The id of an existing message. If no id is provided, a unique id + * is assigned. + * @param title The title of the notification. + * @param isErrorMsg If true, the message is error and the dialog will have a + * close button. + * @return The id of the message. + */ +export function setModalMessage( + msg: string, + id: string = null, + title = null, + isErrorMsg = false +): string { + if (dom == null) { + console.warn("Can't show modal message before the dom is initialized"); + return; + } + if (id == null) { + id = (msgId++).toString(); + } + let dialog = dom.shadowRoot.querySelector('#notification-dialog') as any; + dialog.querySelector('.close-button').style.display = isErrorMsg + ? null + : 'none'; + let spinner = dialog.querySelector('.progress'); + spinner.style.display = isErrorMsg ? 'none' : null; + spinner.active = isErrorMsg ? null : true; + dialog.querySelector('#notification-title').textContent = title; + let msgsContainer = dialog.querySelector('#notify-msgs') as HTMLElement; + if (isErrorMsg) { + msgsContainer.textContent = ''; + } else { + const errors = msgsContainer.querySelectorAll('.error'); + for (let i = 0; i < errors.length; i++) { + msgsContainer.removeChild(errors[i]); + } + } + let divId = `notify-msg-${id}`; + let msgDiv = dialog.querySelector('#' + divId) as HTMLDivElement; + if (msgDiv == null) { + msgDiv = document.createElement('div'); + msgDiv.className = 'notify-msg ' + (isErrorMsg ? 'error' : ''); + msgDiv.id = divId; + msgsContainer.insertBefore(msgDiv, msgsContainer.firstChild); + if (!isErrorMsg) { + numActiveMessages++; + } else { + numActiveMessages = 0; + } + } + if (msg == null) { + numActiveMessages--; + if (numActiveMessages === 0) { + dialog.close(); + } + msgDiv.remove(); + } else { + msgDiv.innerText = msg; + dialog.open(); + } + return id; +} +export function setErrorMessage(errMsg: string, task?: string) { + setModalMessage(errMsg, null, 'Error ' + (task != null ? task : ''), true); +} + +export function setWarnMessage(Msg: string, task?: string) { + setModalMessage(Msg, null, (task != null ? task : ''), true); +} +/** + * Shows a warning message to the user for a certain amount of time. + */ +export function setWarningMessage(msg: string): void { + let toast = dom.shadowRoot.querySelector('#toast') as any; + toast.text = msg; + toast.duration = WARNING_DURATION_MS; + toast.open(); +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/projectorEventContext.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/projectorEventContext.ts new file mode 100644 index 0000000000000000000000000000000000000000..2eda12138df63516bcbf3bb5ce39483621dc54e2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/projectorEventContext.ts @@ -0,0 +1,63 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {DistanceFunction, Projection} from './data'; +import * as knn from './knn'; + +export type HoverListener = (index: number, highlightedPointIndices?: number[], predChangeIndices?: number[], confChangeIndices?: number[], contraVisHighlightIndices?:number[]) => void; + +export type SelectionChangedListener = ( + selectedPointIndices: number[], + neighborsOfFirstPoint: knn.NearestEntry[] +) => void; + +export type ProjectionChangedListener = (projection: Projection) => void; + +export type DistanceMetricChangedListener = ( + distanceMetric: DistanceFunction +) => void; + +export interface ProjectorEventContext { + /** Register a callback to be invoked when the mouse hovers over a point. */ + registerHoverListener(listener: HoverListener); + /** Notify the hover system that a point is under the mouse. */ + notifyHoverOverPoint(pointIndex: number); + /** Registers a callback to be invoked when the selection changes. */ + registerSelectionChangedListener(listener: SelectionChangedListener); + /** + * Notify the selection system that a client has changed the selected point + * set. + */ + notifySelectionChanged(newSelectedPointIndices: number[], selectMode?:boolean, selectionType?:string); + + setDynamicNoisy(); + setDynamicStop(); + refresh(); + updateMetaDataByIndices(indicate:number,src:string); + updateMetaByIndices(indicate:number); + renderInTraceLine(inTrace: boolean); + setMouseMode(mode:any); + hiddenOrShowScatter(type:string) + removecustomInMetaCard(); + refreshnoisyBtn(); + /** Registers a callback to be invoked when the projection changes. */ + registerProjectionChangedListener(listener: ProjectionChangedListener); + /** Notify listeners that a reprojection occurred. */ + notifyProjectionChanged(projection: Projection); + registerDistanceMetricChangedListener( + listener: DistanceMetricChangedListener + ); + notifyDistanceMetricChanged(distMetric: DistanceFunction); + +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/projectorScatterPlotAdapter.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/projectorScatterPlotAdapter.ts new file mode 100644 index 0000000000000000000000000000000000000000..c5a160ff7eded26ef06c7ab7ebd0ff67c6bc4f77 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/projectorScatterPlotAdapter.ts @@ -0,0 +1,1292 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Color} from 'three'; +import {hsl, extent, scaleLinear,} from 'd3'; +import {getcontraVisHighlightIndicesBlue, getcontraVisHighlightIndicesGreen, getcontraVisHighlightIndicesYellow, getAcceptIndicates, getAlQueryResPointIndices, getAllResPositions, getCustomSelection, getIsAdjustingSel, getIsAnimating, getIteration, getProperties, getQueryResAnormalCleanIndecates, getQueryResAnormalIndecates, getQueryResPointIndices, getRejectIndicates, getSceneBackgroundImg,getUnLabelData, getWorldSpacePointPositions, updateStateForInstance, getcontraVisHighlightIndices } from './globalState'; + +import { + DataSet, + DistanceFunction, + Projection, + State, + ProjectionComponents3D, +} from './data'; +import { ProjectorEventContext } from './projectorEventContext'; +import { LabelRenderParams } from './renderContext'; +import { ScatterPlot } from './scatterPlot'; +import { ScatterPlotVisualizerSprites } from './scatterPlotVisualizerSprites'; +import { ScatterPlotVisualizer3DLabels } from './scatterPlotVisualizer3DLabels'; +import { scatterPlotVisualizerTriangles } from './scatterPlotVisualizerTriangles' +import { ScatterPlotVisualizerCanvasLabels } from './scatterPlotVisualizerCanvasLabels'; +import { ScatterPlotVisualizerPolylines } from './scatterPlotVisualizerPolylines'; +import { scatterPlotVisualizerTraceLine } from './scatterPlotVisualizerTraceLine'; +import * as knn from './knn'; +import * as vector from './vector'; + +const LABEL_FONT_SIZE = 10; +const LABEL_SCALE_DEFAULT = 1.0; +const LABEL_SCALE_LARGE = 2; +const LABEL_FILL_COLOR_CHECKED = 65280; +const LABEL_STROKE_COLOR_CHECKED = 65280; + +const LABEL_FILL_COLOR_SELECTED = 0xFF560731; +const LABEL_STROKE_COLOR_SELECTED = 0xffffff; + + +// const LABEL_FILL_COLOR_HOVER = 0xFF560731; +// const LABEL_STROKE_COLOR_HOVER = 0xffffff; + +const LABEL_FILL_COLOR_HOVER = 16744192; +const LABEL_STROKE_COLOR_HOVER = 16744192; + +const LABEL_FILL_COLOR_NEIGHBOR = 0x000000; + +const LABEL_STROKE_COLOR_NEIGHBOR = 0xffffff; + +const POINT_COLOR_UNSELECTED = 0xe3e3e3; +const POINT_COLOR_NO_SELECTION = 0x7575d9; +const POINT_COLOR_SELECTED = 0xfa6666; +const POINT_COLOR_UNLABELED = 16776960; +const POINT_COLOR_HOVER = 7396243; + +const POINT_SCALE_DEFAULT = 1.2; +const POINT_SCALE_SELECTED = 2.0; +const POINT_SCALE_NEIGHBOR = 1.2; +const POINT_SCALE_HOVER = 2.5; +const POINT_SCALE_NEW_SELECTION = 2; +const POINT_SCALE_SELECTED_NEW_SELECTION = 2.4; +const POINT_SCALE_HOVER_NEW_SELECTION = 2.4; + +const LABELS_3D_COLOR_UNSELECTED = 0xffffff; +const LABELS_3D_COLOR_NO_SELECTION = 0xffffff; + +const TIR_COLOR_UNSELECTED = 0xe3e3e3; +const TIR_COLOR_SELECTED = 0xfa6666; + +const SPRITE_IMAGE_COLOR_UNSELECTED = 0xffffff; +const SPRITE_IMAGE_COLOR_NO_SELECTION = 0xffffff; +const POINT_CUSTOM_SELECTED = 3329330 + +const HIDDEN_BACKGROUND_COLOR = 0xffffff + +const POLYLINE_START_HUE = 60; +const POLYLINE_END_HUE = 360; +const POLYLINE_SATURATION = 1; +const POLYLINE_LIGHTNESS = 0.3; + +const POLYLINE_DEFAULT_OPACITY = 0.2; +const POLYLINE_DEFAULT_LINEWIDTH = 2; +const POLYLINE_SELECTED_OPACITY = 0.9; +const POLYLINE_SELECTED_LINEWIDTH = 3; +const POLYLINE_DESELECTED_OPACITY = 0.05; + +const SCATTER_PLOT_CUBE_LENGTH = 2; + +/** Color scale for nearest neighbors. */ +const NN_COLOR_SCALE = + scaleLinear() + .domain([1, 0.7, 0.4]) + .range(['hsl(285, 80%, 40%)', 'hsl(0, 80%, 65%)', 'hsl(40, 70%, 60%)']) + .clamp(true); +/** + * Interprets projector events and assembes the arrays and commands necessary + * to use the ScatterPlot to render the current projected data set. + */ +export class ProjectorScatterPlotAdapter { + + public scatterPlot: ScatterPlot; + private projection: Projection; + private hoverPointIndex: number; + private selectedPointIndices: number[]; + // private newSelectionIndices: any[]; + private neighborsOfFirstSelectedPoint: knn.NearestEntry[]; + private renderLabelsIn3D: boolean = false; + private labelPointAccessor: string; + private legendPointColorer: (ds: DataSet, index: number) => string; + private distanceMetric: DistanceFunction; + private spriteVisualizer: ScatterPlotVisualizerSprites; + private labels3DVisualizer: ScatterPlotVisualizer3DLabels; + private triangles: scatterPlotVisualizerTriangles; + private renderInTriangle: boolean = false; + private traceLineEpoch: any + + private traceLine: scatterPlotVisualizerTraceLine; + private renderInTraceLine: boolean = false + + private canvasLabelsVisualizer: ScatterPlotVisualizerCanvasLabels; + private polylineVisualizer: ScatterPlotVisualizerPolylines; + private instanceId: number; + private state: any; + + constructor( + private scatterPlotContainer: HTMLElement, + projectorEventContext: ProjectorEventContext, + instanceId: number + ) { + this.instanceId = instanceId + + this.scatterPlot = new ScatterPlot( + scatterPlotContainer, + projectorEventContext, + instanceId + ); + projectorEventContext.registerProjectionChangedListener((projection) => { + this.projection = projection; + this.updateScatterPlotWithNewProjection(projection); + }); + projectorEventContext.registerSelectionChangedListener( + (selectedPointIndices, neighbors) => { + this.selectedPointIndices = selectedPointIndices; + this.neighborsOfFirstSelectedPoint = neighbors; + if (this.renderInTriangle) { + if (this.triangles) { + this.triangles.setSelectedPoint(this.selectedPointIndices); + this.triangles.setUnLabeledIndex(getUnLabelData(this.instanceId)); + } + } + if (this.renderInTraceLine) { + if (this.traceLine) { + this.traceLine.setEpoches(this.traceLineEpoch) + this.traceLine.setSelectedPoint(this.selectedPointIndices) + } + } + this.updateScatterPlotPositions(); + this.updateScatterPlotAttributes(); + this.scatterPlot.render(); + } + ); + projectorEventContext.registerHoverListener((hoverPointIndex, highlightedPointIndices, predChangeIndices, confChangeIndices, contraVisHighlightIndices) => { + this.hoverPointIndex = hoverPointIndex; + + + + if (highlightedPointIndices) { + this.updateScatterPlotAttributes(undefined, highlightedPointIndices = highlightedPointIndices, undefined, undefined, undefined); + } else if (predChangeIndices) { + this.updateScatterPlotAttributes(undefined, undefined, predChangeIndices = predChangeIndices, undefined, undefined); + } else if (confChangeIndices){ + this.updateScatterPlotAttributes(undefined, undefined, undefined, confChangeIndices = confChangeIndices, undefined); + } else if (contraVisHighlightIndices){ + this.updateScatterPlotAttributes(undefined, undefined, undefined, undefined, contraVisHighlightIndices = contraVisHighlightIndices); + } else { + this.updateScatterPlotAttributes(); + } + + this.scatterPlot.render(); + + + }); + projectorEventContext.registerDistanceMetricChangedListener( + (distanceMetric) => { + this.distanceMetric = distanceMetric; + this.updateScatterPlotAttributes(); + this.scatterPlot.render(); + } + ); + this.createVisualizers(false); + } + // notifyProjectionPositionsUpdated(newSelection?: any[]) { + notifyProjectionPositionsUpdated() { + // if(newSelection != undefined) { + // this.newSelectionIndices = newSelection; + // } + this.updateScatterPlotPositions(); + this.updateScatterPlotAttributes(); + this.scatterPlot.render(); + } + updateTriangle() { + this.triangles.createTriangles() + } + setDataSet(dataSet: DataSet) { + if (this.projection != null) { + // TODO(@charlesnicholson): setDataSet needs to go away, the projection is the + // atomic unit of update. + this.projection.dataSet = dataSet; + } + if (this.polylineVisualizer != null) { + this.polylineVisualizer.setDataSet(dataSet); + } + if (this.labels3DVisualizer != null) { + this.labels3DVisualizer.setLabelStrings( + this.generate3DLabelsArray(dataSet, this.labelPointAccessor) + ); + } + if (this.spriteVisualizer == null) { + return; + } + this.spriteVisualizer.clearSpriteAtlas(); + if (dataSet == null || dataSet.spriteAndMetadataInfo == null) { + return; + } + const metadata = dataSet.spriteAndMetadataInfo; + if (metadata.spriteImage == null || metadata.spriteMetadata == null) { + return; + } + // return; + const n = dataSet.points.length; + const spriteIndices = new Float32Array(n); + for (let i = 0; i < n; ++i) { + spriteIndices[i] = dataSet.points[i].index; + } + this.spriteVisualizer.setSpriteAtlas( + metadata.spriteImage, + metadata.spriteMetadata.singleImageDim, + spriteIndices + ); + } + set3DLabelMode(renderLabelsIn3D: boolean) { + this.renderLabelsIn3D = renderLabelsIn3D; + this.createVisualizers(renderLabelsIn3D); + this.updateScatterPlotAttributes(); + this.scatterPlot.render(); + } + + setTriangleMode(renderTriangle: boolean) { + this.renderInTriangle = renderTriangle + this.createVisualizers(false, renderTriangle); + this.updateScatterPlotAttributes(); + this.scatterPlot.render(); + } + + setRenderInTraceLine(renderTraceLine: boolean) { + if (!renderTraceLine) { + console.log('none') + } + this.renderInTraceLine = renderTraceLine; + + this.traceLineEpoch = [getAllResPositions(this.instanceId)[0], getAllResPositions(this.instanceId)[getAllResPositions(this.instanceId).length - 1]] + this.createVisualizers(false, false); + this.updateScatterPlotAttributes(); + this.scatterPlot.render(); + } + setLegendPointColorer( + legendPointColorer: (ds: DataSet, index: number) => string + ) { + this.legendPointColorer = legendPointColorer; + } + setLabelPointAccessor(labelPointAccessor: string) { + this.labelPointAccessor = labelPointAccessor; + if (this.labels3DVisualizer != null) { + const ds = this.projection == null ? null : this.projection.dataSet; + this.labels3DVisualizer.setLabelStrings( + this.generate3DLabelsArray(ds, labelPointAccessor) + ); + } + } + resize() { + this.scatterPlot.resize(); + } + populateBookmarkFromUI(state: State) { + state.cameraDef = this.scatterPlot.getCameraDef(); + } + restoreUIFromBookmark(state: State) { + this.scatterPlot.setCameraParametersForNextCameraCreation( + state.cameraDef, + false + ); + } + updateScatterPlotPositions(dataset?: any) { + // let ds + // if(dataset){ + // ds = dataset + // console.log('ds',ds) + // }else{ + const ds = this.projection == null ? null : this.projection.dataSet; + // } + + const projectionComponents = + this.projection == null ? null : this.projection.projectionComponents; + const newPositions = this.generatePointPositionArray( + ds, + projectionComponents + ); + this.scatterPlot.setPointPositions(newPositions, this.projection == null ? 0 : this.projection.dataSet.DVICurrentRealDataNumber); + if (!getWorldSpacePointPositions(this.instanceId)) { + updateStateForInstance(this.instanceId, {worldSpacePointPositions:[]}) + //this.state.worldSpacePointPositions = [] + } + + let updatedPositions = getWorldSpacePointPositions(this.instanceId); + +// Modify the copied array at the specific index + updatedPositions[getIteration(this.instanceId)] = newPositions; + +// Update the state with the modified array + updateStateForInstance(this.instanceId, { worldSpacePointPositions: updatedPositions }); + // this.state.worldSpacePointPositions[getIteration(this.instanceId)] = newPositions + + + } + updateBackground() { + if (getSceneBackgroundImg(this.instanceId) && getSceneBackgroundImg(this.instanceId)[getIteration(this.instanceId)]) { + this.scatterPlot.addbackgroundImg(getSceneBackgroundImg(this.instanceId)[getIteration(this.instanceId)]) + } + } + updateScatterPlotAttributes(isFilter?: boolean, highlightedPointIndices?: number[], predChangeIndices?: number[], confChangeIndices?: number[], contraVisHighlightIndices?:number[]) { + if (this.projection == null) { + return; + } + const dataSet = this.projection.dataSet; + const selectedSet = this.selectedPointIndices; + // const newSelectionSet = this.newSelectionIndices; + const hoverIndex = this.hoverPointIndex; + const neighbors = this.neighborsOfFirstSelectedPoint; + const pointColorer = this.legendPointColorer; + const pointColors = this.generatePointColorArray( + dataSet, + pointColorer, + this.distanceMetric, + selectedSet, + neighbors, + hoverIndex, + this.renderLabelsIn3D, + this.getSpriteImageMode(), + this.renderInTriangle, + this.renderInTraceLine, + highlightedPointIndices, + predChangeIndices, + confChangeIndices, + contraVisHighlightIndices + ); + const pointScaleFactors = this.generatePointScaleFactorArray( + dataSet, + selectedSet, + // newSelectionSet, + neighbors, + hoverIndex, + highlightedPointIndices, + predChangeIndices, + confChangeIndices, + contraVisHighlightIndices + ); + const labels = this.generateVisibleLabelRenderParams( + dataSet, + selectedSet, + neighbors, + hoverIndex + ); + const polylineColors = this.generateLineSegmentColorMap( + dataSet, + pointColorer + ); + const polylineOpacities = this.generateLineSegmentOpacityArray( + dataSet, + selectedSet + ); + const polylineWidths = this.generateLineSegmentWidthArray( + dataSet, + selectedSet + ); + this.scatterPlot.setPointColors(pointColors); + this.scatterPlot.setPointScaleFactors(pointScaleFactors); + this.scatterPlot.setLabels(labels); + this.scatterPlot.setPolylineColors(polylineColors); + this.scatterPlot.setPolylineOpacities(polylineOpacities); + this.scatterPlot.setPolylineWidths(polylineWidths); + } + render() { + this.scatterPlot.render(); + } + + generatePointPositionArray( + ds: DataSet, + projectionComponents: ProjectionComponents3D + ): Float32Array { + if (ds == null) { + return null; + } + const xScaler = scaleLinear(); + const yScaler = scaleLinear(); + let zScaler = null; + { + // Determine max and min of each axis of our data. + const xExtent = extent( + ds.points, + (p, i) => ds.points[i].projections[projectionComponents[0]] + ); + const yExtent = extent( + ds.points, + (p, i) => ds.points[i].projections[projectionComponents[1]] + ); + const range = [ + -SCATTER_PLOT_CUBE_LENGTH / 2, + SCATTER_PLOT_CUBE_LENGTH / 2, + ]; + xScaler.domain(xExtent).range(range); + yScaler.domain(yExtent).range(range); + if (projectionComponents[2] != null) { + const zExtent = extent( + ds.points, + (p, i) => ds.points[i].projections[projectionComponents[2]] + ); + zScaler = scaleLinear(); + zScaler.domain(zExtent).range(range); + } + } + const positions = new Float32Array(ds.points.length * 3); + let dst = 0; + ds.points.forEach((d, i) => { + positions[dst++] = xScaler( + ds.points[i].projections[projectionComponents[0]] + ); + positions[dst++] = yScaler( + ds.points[i].projections[projectionComponents[1]] + ); + positions[dst++] = 0; + }); + if (zScaler) { + dst = 2; + ds.points.forEach((d, i) => { + positions[dst] = zScaler( + ds.points[i].projections[projectionComponents[2]] + ); + dst += 3; + }); + } + return positions; + } + generateVisibleLabelRenderParams( + ds: DataSet, + selectedPointIndices: number[], + neighborsOfFirstPoint: knn.NearestEntry[], + hoverPointIndex: number + ): LabelRenderParams { + if (ds == null) { + return null; + } + if (!getCustomSelection(this.instanceId)) { + updateStateForInstance(this.instanceId, {customSelection:[]}) + // this.state.customSelection = [] + } + let tempArr = [] + const selectedPointCount = + selectedPointIndices == null ? 0 : getQueryResPointIndices(this.instanceId)?.length; + for (let i = 0; i < selectedPointCount; i++) { + let indicate = getQueryResPointIndices(this.instanceId)[i] + if (getCustomSelection(this.instanceId).indexOf(indicate) === -1) { + tempArr.push(indicate) + } + } + const tempLength = tempArr.length + const customSelectionCount = getCustomSelection(this.instanceId).length; + // const customSeletedCount = null ? 0 : window.customSelection?.length + const neighborCount = + neighborsOfFirstPoint == null ? 0 : neighborsOfFirstPoint.length; + const n = + tempLength + customSelectionCount + neighborCount + (hoverPointIndex != null ? 1 : 0); + const visibleLabels = new Uint32Array(n); + const scale = new Float32Array(n); + const opacityFlags = new Int8Array(n); + const fillColors = new Uint8Array(n * 3); + const strokeColors = new Uint8Array(n * 3); + const labelStrings: string[] = []; + scale.fill(LABEL_SCALE_DEFAULT); + opacityFlags.fill(1); + let dst = 0; + if (hoverPointIndex != null) { + labelStrings.push( + this.getLabelText(ds, hoverPointIndex, this.labelPointAccessor) + ); + visibleLabels[dst] = hoverPointIndex; + scale[dst] = LABEL_SCALE_LARGE; + opacityFlags[dst] = 0; + const fillRgb = styleRgbFromHexColor(LABEL_FILL_COLOR_HOVER); + packRgbIntoUint8Array( + fillColors, + dst, + fillRgb[0], + fillRgb[1], + fillRgb[2] + ); + const strokeRgb = styleRgbFromHexColor(LABEL_STROKE_COLOR_HOVER); + packRgbIntoUint8Array( + strokeColors, + dst, + strokeRgb[0], + strokeRgb[1], + strokeRgb[1] + ); + ++dst; + } + // Selected points + { + const n = customSelectionCount; + const fillRgb = styleRgbFromHexColor(LABEL_FILL_COLOR_CHECKED); + const strokeRgb = styleRgbFromHexColor(LABEL_STROKE_COLOR_CHECKED); + for (let i = 0; i < n; ++i) { + const labelIndex = getCustomSelection(this.instanceId)[i]; + labelStrings.push( + this.getLabelText(ds, labelIndex, this.labelPointAccessor) + ); + visibleLabels[dst] = labelIndex; + scale[dst] = LABEL_SCALE_LARGE; + opacityFlags[dst] = n === 1 ? 0 : 1; + packRgbIntoUint8Array( + fillColors, + dst, + fillRgb[0], + fillRgb[1], + fillRgb[2] + ); + packRgbIntoUint8Array( + strokeColors, + dst, + strokeRgb[0], + strokeRgb[1], + strokeRgb[2] + ); + ++dst; + } + } + { + const n = tempLength; + const fillRgb = styleRgbFromHexColor(LABEL_FILL_COLOR_SELECTED); + const strokeRgb = styleRgbFromHexColor(LABEL_STROKE_COLOR_SELECTED); + for (let i = 0; i < n; ++i) { + const labelIndex = tempArr[i]; + labelStrings.push( + this.getLabelText(ds, labelIndex, this.labelPointAccessor) + ); + visibleLabels[dst] = labelIndex; + scale[dst] = LABEL_SCALE_LARGE; + opacityFlags[dst] = n === 1 ? 0 : 1; + packRgbIntoUint8Array( + fillColors, + dst, + fillRgb[0], + fillRgb[1], + fillRgb[2] + ); + packRgbIntoUint8Array( + strokeColors, + dst, + strokeRgb[0], + strokeRgb[1], + strokeRgb[2] + ); + ++dst; + } + } + + // Neighbors + { + const n = neighborCount; + const fillRgb = styleRgbFromHexColor(LABEL_FILL_COLOR_NEIGHBOR); + const strokeRgb = styleRgbFromHexColor(LABEL_STROKE_COLOR_NEIGHBOR); + for (let i = 0; i < n; ++i) { + const labelIndex = neighborsOfFirstPoint[i].index; + labelStrings.push( + this.getLabelText(ds, labelIndex, this.labelPointAccessor) + ); + visibleLabels[dst] = labelIndex; + scale[dst] = LABEL_SCALE_LARGE; + packRgbIntoUint8Array( + fillColors, + dst, + fillRgb[0], + fillRgb[1], + fillRgb[2] + ); + packRgbIntoUint8Array( + strokeColors, + dst, + strokeRgb[0], + strokeRgb[1], + strokeRgb[2] + ); + ++dst; + } + } + return new LabelRenderParams( + new Float32Array(visibleLabels), + labelStrings, + scale, + opacityFlags, + LABEL_FONT_SIZE, + fillColors, + strokeColors + ); + } + generatePointScaleFactorArray( + ds: DataSet, + selectedPointIndices: number[], + // newSelectionIndices: any[], + neighborsOfFirstPoint: knn.NearestEntry[], + hoverPointIndex: number, + highlightedPointIndices, + predChangeIndices, + confChangeIndices, + contraVisHighlightIndices + ): Float32Array { + if (ds == null) { + return new Float32Array(0); + } + const scale = new Float32Array(ds.points.length); + scale.fill(POINT_SCALE_DEFAULT); + if (!getCustomSelection(this.instanceId)) { + updateStateForInstance(this.instanceId, {customSelection:[]}) + // this.state.customSelection = [] + } + const selectedPointCount = + selectedPointIndices == null ? 0 : selectedPointIndices.length; + const neighborCount = + neighborsOfFirstPoint == null ? 0 : neighborsOfFirstPoint.length; + // Scale for highlighted points + if ((highlightedPointIndices)) { + const scaleFactor = 1.5; // Adjust this value based on your desired boundary thickness + for (let i of highlightedPointIndices) { + scale[i] *= scaleFactor; + } + } + if ((predChangeIndices)) { + const scaleFactor = 1.5; // Adjust this value based on your desired boundary thickness + for (let i of predChangeIndices) { + scale[i] *= scaleFactor; + } + } + if ((confChangeIndices)) { + const scaleFactor = 1.5; // Adjust this value based on your desired boundary thickness + for (let i of confChangeIndices) { + scale[i] *= scaleFactor; + } + } + + if ((contraVisHighlightIndices)) { + const scaleFactor = 1.5; // Adjust this value based on your desired boundary thickness + for (let i of contraVisHighlightIndices) { + scale[i] *= scaleFactor; + } + } + // const newSelectionCount = + // newSelectionIndices == null ? 0 : newSelectionIndices.length; + // const selectedNewSelectionIndices = + // (selectedPointIndices == null || newSelectionIndices == null) ? null : + // selectedPointIndices.filter(value => {newSelectionIndices.includes(value)}); + // const selectedNewSelectionCount = + // selectedNewSelectionIndices == null ? 0 : selectedPointIndices.length; + // const hoverNewSelectionPointIndex = + // (hoverPointIndex == null || newSelectionIndices == null || newSelectionIndices.indexOf(hoverPointIndex) == -1) ? + // null : hoverPointIndex; + // Scale up all selected points. + { + const n = selectedPointCount; + for (let i = 0; i < n; ++i) { + const p = selectedPointIndices[i]; + if(getIsAnimating(this.instanceId)){ + scale[p] = 4.0; + } else{ + scale[p] = POINT_SCALE_SELECTED; + } + + } + } + { + const n = getCustomSelection(this.instanceId).length; + for (let i = 0; i < n; ++i) { + const p = getCustomSelection(this.instanceId)[i]; + if(getIsAnimating(this.instanceId)){ + scale[p] = 4.0; + } + } + } + // Scale up the neighbor points. + { + const n = neighborCount; + for (let i = 0; i < n; ++i) { + const p = neighborsOfFirstPoint[i].index; + scale[p] = POINT_SCALE_NEIGHBOR; + } + } + // { + // const n = newSelectionCount; + // for (let i = 0; i < n; ++i) { + // const p = newSelectionIndices[i]; + // scale[p] = POINT_SCALE_NEW_SELECTION; + // } + // } + // { + // const n = selectedNewSelectionCount; + // for (let i = 0; i < n; ++i) { + // const p = selectedNewSelectionIndices[i]; + // scale[p] = POINT_SCALE_SELECTED_NEW_SELECTION; + // } + // } + // Scale up the hover point. + if (hoverPointIndex != null) { + scale[hoverPointIndex] = POINT_SCALE_HOVER; + } + // if (hoverNewSelectionPointIndex != null) { + // scale[hoverNewSelectionPointIndex] = POINT_SCALE_HOVER_NEW_SELECTION; + // } + return scale; + } + generateLineSegmentColorMap( + ds: DataSet, + legendPointColorer: (ds: DataSet, index: number) => string + ): { + [polylineIndex: number]: Float32Array; + } { + let polylineColorArrayMap: { + [polylineIndex: number]: Float32Array; + } = {}; + if (ds == null) { + return polylineColorArrayMap; + } + for (let i = 0; i < ds.sequences.length; i++) { + let sequence = ds.sequences[i]; + let colors = new Float32Array(2 * (sequence.pointIndices.length - 1) * 3); + let colorIndex = 0; + if (legendPointColorer) { + for (let j = 0; j < sequence.pointIndices.length - 1; j++) { + const c1 = new Color( + legendPointColorer(ds, sequence.pointIndices[j]) + ); + const c2 = new Color( + legendPointColorer(ds, sequence.pointIndices[j + 1]) + ); + colors[colorIndex++] = c1.r; + colors[colorIndex++] = c1.g; + colors[colorIndex++] = c1.b; + colors[colorIndex++] = c2.r; + colors[colorIndex++] = c2.g; + colors[colorIndex++] = c2.b; + } + } else { + for (let j = 0; j < sequence.pointIndices.length - 1; j++) { + const c1 = getDefaultPointInPolylineColor( + j, + sequence.pointIndices.length + ); + const c2 = getDefaultPointInPolylineColor( + j + 1, + sequence.pointIndices.length + ); + colors[colorIndex++] = c1.r; + colors[colorIndex++] = c1.g; + colors[colorIndex++] = c1.b; + colors[colorIndex++] = c2.r; + colors[colorIndex++] = c2.g; + colors[colorIndex++] = c2.b; + } + } + polylineColorArrayMap[i] = colors; + } + return polylineColorArrayMap; + } + generateLineSegmentOpacityArray( + ds: DataSet, + selectedPoints: number[] + ): Float32Array { + if (ds == null) { + return new Float32Array(0); + } + const opacities = new Float32Array(ds.sequences.length); + const selectedPointCount = + selectedPoints == null ? 0 : selectedPoints.length; + if (selectedPointCount > 0) { + opacities.fill(POLYLINE_DESELECTED_OPACITY); + if(ds.points[selectedPoints[0]] !== undefined){ + const i = ds.points[selectedPoints[0]].sequenceIndex; + opacities[i] = POLYLINE_SELECTED_OPACITY; + } + + } else { + opacities.fill(POLYLINE_DEFAULT_OPACITY); + } + return opacities; + } + generateLineSegmentWidthArray( + ds: DataSet, + selectedPoints: number[] + ): Float32Array { + if (ds == null) { + return new Float32Array(0); + } + const widths = new Float32Array(ds.sequences.length); + widths.fill(POLYLINE_DEFAULT_LINEWIDTH); + const selectedPointCount = + selectedPoints == null ? 0 : selectedPoints.length; + if (selectedPointCount > 0) { + if(ds.points[selectedPoints[0]]){ + const i = ds.points[selectedPoints[0]].sequenceIndex; + widths[i] = POLYLINE_SELECTED_LINEWIDTH; + + } + + } + return widths; + } + generatePointColorArray( + ds: DataSet, + legendPointColorer: (ds: DataSet, index: number) => string, + distFunc: DistanceFunction, + selectedPointIndices: number[], + neighborsOfFirstPoint: knn.NearestEntry[], + hoverPointIndex: number, + label3dMode: boolean, + spriteImageMode: boolean, + renderInTriangle: boolean, + renderInTraceLine: boolean, + highlightedPointIndices?: number[], + predChangeIndices?: number[], + confChangeIndices?: number[], + contraVisHighlightIndices?:number[] + ): Float32Array { + if (ds == null) { + return new Float32Array(0); + } + const selectedPointCount = + selectedPointIndices == null ? 0 : selectedPointIndices.length; + const neighborCount = + neighborsOfFirstPoint == null ? 0 : neighborsOfFirstPoint.length; + const colors = new Float32Array(ds.points.length * 3); + let unselectedColor = POINT_COLOR_UNSELECTED; + let noSelectionColor = POINT_COLOR_NO_SELECTION; + if (label3dMode) { + unselectedColor = LABELS_3D_COLOR_UNSELECTED; + noSelectionColor = LABELS_3D_COLOR_NO_SELECTION; + } + if (spriteImageMode) { + unselectedColor = SPRITE_IMAGE_COLOR_UNSELECTED; + noSelectionColor = SPRITE_IMAGE_COLOR_NO_SELECTION; + } + + // Give all points the unselected color. + { + const n = ds.points.length; + let dst = 0; + if (selectedPointCount >= 0) { + for (let i = 0; i < n; ++i) { + let point = ds.points[i] + let c = new Color(point.color) + //filter之后 只有unlabel无颜色 + if (getProperties(this.instanceId) && getProperties(this.instanceId)[getIteration(this.instanceId)] && getProperties(this.instanceId)[getIteration(this.instanceId)][i] === 1) { + c = new Color(unselectedColor); + } + colors[dst++] = c.r; + colors[dst++] = c.g; + colors[dst++] = c.b; + } + } + else { + if (legendPointColorer != null) { + for (let i = 0; i < n; ++i) { + let c = new Color(legendPointColorer(ds, i)); + // if (getUnLabelData(this.instanceId)?.length) { + // if (getUnLabelData(this.instanceId).indexOf(i) !== -1) { + // c = new Color(POINT_COLOR_UNSELECTED); + // } + // } + colors[dst++] = c.r; + colors[dst++] = c.g; + colors[dst++] = c.b; + } + + } else { + const c = new Color(noSelectionColor); + for (let i = 0; i < n; ++i) { + colors[dst++] = c.r; + colors[dst++] = c.g; + colors[dst++] = c.b; + } + } + } + } + // Highlighted points + if (highlightedPointIndices) { + const c = new Color('yellow'); + for (let i of highlightedPointIndices) { + let dst = i * 3; + colors[dst++] = c.r; + colors[dst++] = c.g; + colors[dst++] = c.b; + } + } + + if (predChangeIndices) { + const c = new Color('green'); + for (let i of predChangeIndices) { + let dst = i * 3; + colors[dst++] = c.r; + colors[dst++] = c.g; + colors[dst++] = c.b; + } + } + if (confChangeIndices) { + const c = new Color('red'); + for (let i of confChangeIndices) { + let dst = i * 3; + colors[dst++] = c.r; + colors[dst++] = c.g; + colors[dst++] = c.b; + } + } + + if (contraVisHighlightIndices) { + // if highlight indices in left projection + + const blueIndices = getcontraVisHighlightIndicesBlue(this.instanceId) + const yellowIndices = getcontraVisHighlightIndicesYellow(this.instanceId) + const greenIndices = getcontraVisHighlightIndicesGreen(this.instanceId) + let b = new Color('blue'); + // if in right projection + + + let r = new Color('yellow'); + let g = new Color('green') + + if (yellowIndices.length >0) { + for (let i of yellowIndices) { + let dst = i * 3; + colors[dst++] = r.r; + colors[dst++] = r.g; + colors[dst++] = r.b; + } + } + if (blueIndices.length>0){ + for (let i of blueIndices) { + let dst = i * 3; + colors[dst++] = b.r; + colors[dst++] = b.g; + colors[dst++] = b.b; + } + } + if (greenIndices.length>0){ + for (let i of greenIndices) { + let dst = i * 3; + colors[dst++] = g.r; + colors[dst++] = g.g; + colors[dst++] = g.b; + } + } + + + } + + // if (getUnLabelData(this.instanceId)?.length) { + // const n = ds.points.length; + // let c = new Color(POINT_COLOR_UNSELECTED); + // for (let i = 0; i < n; i++) { + // if (getUnLabelData(this.instanceId).indexOf(i) >= 0) { + // let dst = i * 3 + // colors[dst++] = c.r; + // colors[dst++] = c.g; + // colors[dst++] = c.b; + // } + // } + // } + // Color the selected points. + { + const n = selectedPointCount; + const c = new Color(POINT_COLOR_SELECTED); + if (getIsAnimating(this.instanceId)) { + for (let i = 0; i < n; ++i) { + const c = new Color(ds.points[i].color); + let dst = selectedPointIndices[i] * 3; + colors[dst++] = c.r; + colors[dst++] = c.g; + colors[dst++] = c.b; + } + } else { + for (let i = 0; i < n; ++i) { + let dst = selectedPointIndices[i] * 3; + colors[dst++] = c.r; + colors[dst++] = c.g; + colors[dst++] = c.b; + } + } + } + // Color the neighbors. + { + const n = neighborCount; + let minDist = n > 0 ? neighborsOfFirstPoint[0].dist : 0; + for (let i = 0; i < n; ++i) { + const c = new Color( + dist2color(distFunc, neighborsOfFirstPoint[i].dist, minDist) + ); + let dst = neighborsOfFirstPoint[i].index * 3; + colors[dst++] = c.r; + colors[dst++] = c.g; + colors[dst++] = c.b; + } + } + // Color the unlabeled points. + +// if (this.state.isFilter) { +// let dst = 0; +// const c = new Color(POINT_COLOR_SELECTED); +// const c_n = new Color(unselectedColor); +// const c_w = new Color(0xffffff); +// for (let i = 0; i < ds.points.length; ++i) { +// const point = ds.points[i]; +// colors[dst++] = c.r; +// colors[dst++] = c.g; +// colors[dst++] = c.b; +// if (point.metadata[this.labelPointAccessor]) { +// let hoverText = point.metadata[this.labelPointAccessor].toString(); +// if (hoverText == 'background') { +// if (this.state.hiddenBackground) { +// let dst = i * 3 +// colors[dst++] = c_w.r; +// colors[dst++] = c_w.g; +// colors[dst++] = c_w.b; +// } else { +// let dst = i * 3 +// colors[dst++] = c_n.r; +// colors[dst++] = c_n.g; +// colors[dst++] = c_n.b; +// } +// } +// } +// } +// // return colors +// } + // + // if (this.state.isAnimatating) { + // const n = ds.points.length; + // const c = new Color(POINT_COLOR_UNSELECTED); + // for (let i = 0; i < n; ++i) { + // if (selectedPointIndices.indexOf(i) === -1) { + // let dst = i * 3; + // colors[dst++] = c.r; + // colors[dst++] = c.g; + // colors[dst++] = c.b; + // } else { + // const c = new Color(ds.points[i].color); + // let dst = i * 3; + // colors[dst++] = c.r; + // colors[dst++] = c.g; + // colors[dst++] = c.b; + // } + // } + // } + + if (!getIsAnimating(this.instanceId) && getCustomSelection(this.instanceId)?.length && getIsAdjustingSel(this.instanceId)) { + const n = ds.points.length; + let c = new Color(POINT_CUSTOM_SELECTED); + for (let i = 0; i < n; i++) { + if (getCustomSelection(this.instanceId).indexOf(i) >= 0) { + let dst = i * 3 + colors[dst++] = c.r; + colors[dst++] = c.g; + colors[dst++] = c.b; + } + } + } + + // Color the hover point. + if (hoverPointIndex != null) { + let c = new Color(POINT_COLOR_HOVER); + let dst = hoverPointIndex * 3; + colors[dst++] = c.r; + colors[dst++] = c.g; + colors[dst++] = c.b; + } + return colors; + } + generate3DLabelsArray(ds: DataSet, accessor: string) { + if (ds == null || accessor == null) { + return null; + } + let labels: string[] = []; + const n = ds.points.length; + for (let i = 0; i < n; ++i) { + labels.push(this.getLabelText(ds, i, accessor)); + } + return labels; + } + private getLabelText(ds: DataSet, i: number, accessor: string): string { + if (getCustomSelection(this.instanceId)?.length) { + if (getRejectIndicates(this.instanceId) && getRejectIndicates(this.instanceId).indexOf(i) >= 0) { + return `❌ ${i}` + } + if (getAcceptIndicates(this.instanceId) && getAcceptIndicates(this.instanceId).indexOf(i) >= 0) { + return `✅ ${i}` + } + } + if (getQueryResAnormalIndecates(this.instanceId)?.length && getQueryResAnormalCleanIndecates(this.instanceId).indexOf(i) >= 0) { + if (getIsAnimating(this.instanceId) && getCustomSelection(this.instanceId).indexOf(i) == -1) { + return `` + }else{ + return `👍${i}` + } + } + if (getQueryResAnormalCleanIndecates(this.instanceId)?.length) { + if (getQueryResAnormalCleanIndecates(this.instanceId).indexOf(i) >= 0) { + return `🟢clean` + } + } + + + if (getAlQueryResPointIndices(this.instanceId)?.length) { + if (getAlQueryResPointIndices(this.instanceId)?.indexOf(i) !== -1) { + return `👍 ${i}` + } + } + if (getQueryResPointIndices(this.instanceId)?.length) { + if (getQueryResPointIndices(this.instanceId)?.indexOf(i) !== -1) { + // return ds.points[i]?.metadata[accessor] !== undefined + // ? (ds.points[i]?.metadata[accessor] !== "background" ? String(ds.points[i]?.metadata[accessor]) : "") + // : `Unknown #${i}`; + return `${i}` + } + } + if (getIsAdjustingSel(this.instanceId) && window.sessionStorage.isControlGroup !=='true') { + if (ds.points[i]?.metadata[accessor] !== undefined && ds.points[i]?.current_prediction !== ds.points[i]?.metadata[accessor]) { + return ` ${i}` + } + } + if (getProperties(this.instanceId) && getProperties(this.instanceId)[getIteration(this.instanceId)]?.length) { + if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] === 1) { + return `#${i}` + } + } + return `${i}` + // return ds.points[i]?.metadata[accessor] !== undefined + // ? (ds.points[i]?.metadata[accessor] !== "background" ? String(ds.points[i]?.metadata[accessor]) : "") + // : `Unknown #${i}`; + } + private updateScatterPlotWithNewProjection(projection: Projection) { + if (projection == null) { + this.createVisualizers(this.renderLabelsIn3D); + this.scatterPlot.render(); + return; + } + this.setDataSet(projection.dataSet); + this.scatterPlot.setDimensions(projection.dimensionality); + if (projection.dataSet.projectionCanBeRendered(projection.projectionType)) { + this.updateScatterPlotAttributes(); + this.notifyProjectionPositionsUpdated(); + } + this.scatterPlot.setCameraParametersForNextCameraCreation(null, false); + } + private createVisualizers(inLabels3DMode: boolean, renderInTriangle?: boolean) { + const ds = this.projection == null ? null : this.projection.dataSet; + const scatterPlot = this.scatterPlot; + scatterPlot.removeAllVisualizers(); + this.labels3DVisualizer = null; + this.canvasLabelsVisualizer = null; + this.spriteVisualizer = null; + this.polylineVisualizer = null; + // this.triangles = new scatterPlotVisualizerTriangles(); + // this.triangles.setSelectedPoint(this.selectedPointIndices); + this.spriteVisualizer = new ScatterPlotVisualizerSprites(); + if (inLabels3DMode) { + this.labels3DVisualizer = new ScatterPlotVisualizer3DLabels(); + this.labels3DVisualizer.setLabelStrings( + this.generate3DLabelsArray(ds, this.labelPointAccessor) + ); + } else if (renderInTriangle) { + + scatterPlot.addVisualizer(this.spriteVisualizer); + this.triangles = new scatterPlotVisualizerTriangles(); + this.triangles.setSelectedPoint(this.selectedPointIndices); + this.canvasLabelsVisualizer = new ScatterPlotVisualizerCanvasLabels( + this.scatterPlotContainer + ); + // this.triangles.setLabelStrings( + // this.generate3DLabelsArray(ds, this.labelPointAccessor) + // ); + } else if (this.renderInTraceLine) { + this.traceLine = new scatterPlotVisualizerTraceLine() + this.traceLine.setEpoches(this.traceLineEpoch) + this.traceLine.setSelectedPoint(this.selectedPointIndices); + this.canvasLabelsVisualizer = new ScatterPlotVisualizerCanvasLabels( + this.scatterPlotContainer + ); + } + else { + scatterPlot.addVisualizer(this.spriteVisualizer); + this.triangles = new scatterPlotVisualizerTriangles(); + this.triangles.setSelectedPoint(this.selectedPointIndices); + this.canvasLabelsVisualizer = new ScatterPlotVisualizerCanvasLabels( + this.scatterPlotContainer + ); + } + this.polylineVisualizer = new ScatterPlotVisualizerPolylines(); + this.setDataSet(ds); + if (this.spriteVisualizer) { + scatterPlot.addVisualizer(this.spriteVisualizer); + } + if (this.labels3DVisualizer) { + scatterPlot.addVisualizer(this.labels3DVisualizer); + } + if (this.renderInTriangle) { + scatterPlot.addVisualizer(this.triangles) + } + if (this.renderInTraceLine) { + scatterPlot.addVisualizer(this.traceLine) + } + if (this.canvasLabelsVisualizer) { + scatterPlot.addVisualizer(this.canvasLabelsVisualizer); + } + scatterPlot.addVisualizer(this.polylineVisualizer); + } + private getSpriteImageMode(): boolean { + return false; + if (this.projection == null) { + return false; + } + const ds = this.projection.dataSet; + if (ds == null || ds.spriteAndMetadataInfo == null) { + return false; + } + return ds.spriteAndMetadataInfo.spriteImage != null; + } +} +function packRgbIntoUint8Array( + rgbArray: Uint8Array, + labelIndex: number, + r: number, + g: number, + b: number +) { + rgbArray[labelIndex * 3] = r; + rgbArray[labelIndex * 3 + 1] = g; + rgbArray[labelIndex * 3 + 2] = b; +} +function styleRgbFromHexColor(hex: number): [number, number, number] { + const c = new Color(hex); + return [(c.r * 255) | 0, (c.g * 255) | 0, (c.b * 255) | 0]; +} +function getDefaultPointInPolylineColor( + index: number, + totalPoints: number +): Color { + let hue = + POLYLINE_START_HUE + + ((POLYLINE_END_HUE - POLYLINE_START_HUE) * index) / totalPoints; + let rgb = hsl(hue, POLYLINE_SATURATION, POLYLINE_LIGHTNESS).rgb(); + return new Color(rgb.r / 255, rgb.g / 255, rgb.b / 255); +} +/** + * Normalizes the distance so it can be visually encoded with color. + * The normalization depends on the distance metric (cosine vs euclidean). + */ +export function normalizeDist( + distFunc: DistanceFunction, + d: number, + minDist: number +): number { + return distFunc === vector.dist ? minDist / d : 1 - d; +} +/** Normalizes and encodes the provided distance with color. */ +export function dist2color( + distFunc: DistanceFunction, + d: number, + minDist: number +): string { + return NN_COLOR_SCALE(normalizeDist(distFunc, d, minDist)); +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/renderContext.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/renderContext.ts new file mode 100644 index 0000000000000000000000000000000000000000..dc14155da3512866a81bceea9a1164be0407c8b9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/renderContext.ts @@ -0,0 +1,60 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Camera,Vector3}from 'three'; + +export class LabelRenderParams { + constructor( + public pointIndices: Float32Array, + public labelStrings: string[], + public scaleFactors: Float32Array, + public useSceneOpacityFlags: Int8Array, + public defaultFontSize: number, + public fillColors: Uint8Array, + public strokeColors: Uint8Array + ) {} +} +/** Details about the camera projection being used to render the scene. */ +export enum CameraType { + Perspective, + Orthographic, +} +/** + * RenderContext contains all of the state required to color and render the data + * set. ScatterPlot passes this to every attached visualizer as part of the + * render callback. + * TODO(@charlesnicholson): This should only contain the data that's changed between + * each frame. Data like colors / scale factors / labels should be reapplied + * only when they change. + */ +export class RenderContext { + constructor( + public camera: Camera, + public cameraType: CameraType, + public cameraTarget: Vector3, + public screenWidth: number, + public screenHeight: number, + public nearestCameraSpacePointZ: number, + public farthestCameraSpacePointZ: number, + public backgroundColor: number, + public pointColors: Float32Array, + public pointScaleFactors: Float32Array, + public labels: LabelRenderParams, + public polylineColors: { + [polylineIndex: number]: Float32Array; + }, + public polylineOpacities: Float32Array, + public polylineWidths: Float32Array + ) {} +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlot.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlot.ts new file mode 100644 index 0000000000000000000000000000000000000000..55cb4387fc3044464acdfb209fb58549907fe6e7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlot.ts @@ -0,0 +1,965 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {WebGLRenderTarget,OrthographicCamera,Camera, CanvasTexture,Object3D,LinearFilter, Vector2,PerspectiveCamera,AxesHelper,MOUSE, Vector3,Mesh, MeshPhongMaterial, PlaneGeometry,DoubleSide, PointLight, Scene, WebGLRenderer} from 'three'; +import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'; + +import * as vector from './vector'; +import * as util from './util'; +import { ProjectorEventContext } from './projectorEventContext'; +import { CameraType, RenderContext, LabelRenderParams } from './renderContext'; +import { ScatterPlotVisualizer } from './scatterPlotVisualizer'; +import { + ScatterBoundingBox, + ScatterPlotRectangleSelector, +} from './scatterPlotRectangleSelector'; +import {updateStateForInstance, getCustomSelection, getSceneBackgroundImg, getSelectedStack, getIteration, getBackGroundMesh } from './globalState'; +const BACKGROUND_COLOR = 0xffffff; + +// declare global { +// interface Window { +// backgroundMesh: any +// } +// } + +/** + * The length of the cube (diameter of the circumscribing sphere) where all the + * points live. + */ +const CUBE_LENGTH = 2; +const MAX_ZOOM = 5 * CUBE_LENGTH; +const MIN_ZOOM = 0.025 * CUBE_LENGTH; +// Constants relating to the camera parameters. +const PERSP_CAMERA_FOV_VERTICAL = 70; +const PERSP_CAMERA_NEAR_CLIP_PLANE = 0.01; +const PERSP_CAMERA_FAR_CLIP_PLANE = 100; +const ORTHO_CAMERA_FRUSTUM_HALF_EXTENT = 1.2; +// Key presses. +const SHIFT_KEY = 16; +const CTRL_KEY = 17; +const ORBIT_MOUSE_ROTATION_SPEED = 1; +const ORBIT_ANIMATION_ROTATION_CYCLE_IN_SECONDS = 7; +export type OnCameraMoveListener = ( + cameraPosition: Vector3, + cameraTarget: Vector3 +) => void; +/** Supported modes of interaction. */ +export enum MouseMode { + AREA_SELECT, + CAMERA_AND_CLICK_SELECT, +} +/** Defines a camera, suitable for serialization. */ +export class CameraDef { + orthographic: boolean = false; + position: vector.Point3D; + target: vector.Point3D; + zoom: number; +} +/** + * Maintains a js instantiation and context, + * animation state, and all other logic that's + * independent of how a 3D scatter plot is actually rendered. Also holds an + * array of visualizers and dispatches application events to them. + */ +export class ScatterPlot { + + private readonly START_CAMERA_POS_3D = new Vector3(0.45, 0.9, 1.6); + private readonly START_CAMERA_TARGET_3D = new Vector3(0, 0, 0); + private readonly START_CAMERA_POS_2D = new Vector3(0, 0, 4); + private readonly START_CAMERA_TARGET_2D = new Vector3(0, 0, 0); + + private visualizers: ScatterPlotVisualizer[] = []; + private onCameraMoveListeners: OnCameraMoveListener[] = []; + private height: number; + private width: number; + private mouseMode: MouseMode; + private backgroundColor: number = BACKGROUND_COLOR; + private dimensionality: number = 3; + private renderer: WebGLRenderer; + private scene: Scene; + private pickingTexture: WebGLRenderTarget; + private light: PointLight; + private cameraDef: CameraDef = null; + private camera: Camera; + private orbitAnimationOnNextCameraCreation: boolean = false; + private orbitCameraControls: any; + private orbitAnimationId: number; + private worldSpacePointPositions: Float32Array; + private pointColors: Float32Array; + private pointScaleFactors: Float32Array; + private labels: LabelRenderParams; + private isctrling: boolean; + private isShifting: boolean; + private polylineColors: { + [polylineIndex: number]: Float32Array; + }; + private polylineOpacities: Float32Array; + private polylineWidths: Float32Array; + private selecting = false; + private nearestPoint: number; + private mouseIsDown = false; + private isDragSequence = false; + private rectangleSelector: ScatterPlotRectangleSelector; + private realDataNumber = 0; + private instanceId: number; + + constructor( + private container: HTMLElement, + private projectorEventContext: ProjectorEventContext, + instanceId: number + ) { + this.instanceId = instanceId + + // 1,创建场景对象 + this.scene = new Scene(); + if (!getSceneBackgroundImg(this.instanceId)) { + updateStateForInstance(this.instanceId, {sceneBackgroundImg:[]}) + // getSceneBackgroundImg(this.instanceId) = [] + } + if (getSceneBackgroundImg(this.instanceId)[getIteration(this.instanceId)]) { + this.addbackgroundImg(getSceneBackgroundImg(this.instanceId)[getIteration(this.instanceId)]) + } + this.getLayoutValues(); + // this.scene = new Scene(); + this.renderer = new WebGLRenderer({ + alpha: true, + premultipliedAlpha: false, + antialias: false, + }); + this.renderer.setClearColor(BACKGROUND_COLOR, 1); + this.container.appendChild(this.renderer.domElement); + + this.light = new PointLight(0xffffff); + this.scene.add(this.light); + this.setDimensions(3); + this.recreateCamera(this.makeDefaultCameraDef(this.dimensionality)); + this.renderer.render(this.scene, this.camera); + this.rectangleSelector = new ScatterPlotRectangleSelector( + this.container, + (boundingBox: ScatterBoundingBox) => this.selectBoundingBox(boundingBox) + ); + this.addInteractionListeners(); + updateStateForInstance(this.instanceId, {scene:this.scene}) + updateStateForInstance(this.instanceId, {renderer:this.renderer}) + // this.state.scene = this.scene; + // this.state.renderer = this.renderer + } + + addbackgroundImg(imgUrl: string) { + //移除上一个画布 + // if (this.state.backgroundMesh) { + // this.scene.remove(this.state.backgroundMesh) + // } + let temp = getBackGroundMesh(this.instanceId) + if (!imgUrl) { + return + } + // 2,使用canvas画图作为纹理贴图 + // 先使用canvas画图 + let canvas = document.createElement('canvas'); + canvas.width = 128; + canvas.height = 128; + var ctx = canvas.getContext("2d"); + var img = new Image(); + img.src = imgUrl; + img.crossOrigin = "anonymous"; + img.onload = () => { + ctx.drawImage(img, 0, 0, 128, 128); + let texture = new CanvasTexture(canvas); + // texture.needsUpdate = true; // 不设置needsUpdate为true的话,可能纹理贴图不刷新 + var plane_geometry = new PlaneGeometry(2, 2); + var material = new MeshPhongMaterial({ + // color:0x11ff22, + map: texture, + side: DoubleSide + }); + const newMesh = new Mesh(plane_geometry, material); + this.scene.add(newMesh); + if (temp) { + this.scene.remove(temp) + } + updateStateForInstance(this.instanceId, {backgroundMesh:newMesh}) + updateStateForInstance(this.instanceId, {scene:this.scene}) + // this.state.backgroundMesh = newMesh + // this.state.scene = this.scene + this.render(); + } + } + private addInteractionListeners() { + + this.container.addEventListener('mousemove', this.onMouseMove.bind(this)); + + this.container.addEventListener('mousedown', this.onMouseDown.bind(this)); + this.container.addEventListener('mouseup', this.onMouseUp.bind(this)); + // this.container.addEventListener('mouseup', this.onMousewheel.bind(this)); + this.container.addEventListener('dblclick', this.onClick.bind(this)); + window.addEventListener('keydown', this.onKeyDown.bind(this), false); + window.addEventListener('keyup', this.onKeyUp.bind(this), false); + } + private addCameraControlsEventListeners(cameraControls: any) { + // Start is called when the user stars interacting with + // controls. + cameraControls.addEventListener('start', () => { + this.stopOrbitAnimation(); + this.onCameraMoveListeners.forEach((l) => + l(this.camera.position, cameraControls.target) + ); + }); + // Change is called everytime the user interacts with the controls. + cameraControls.addEventListener('change', () => { + this.render(); + }); + // End is called when the user stops interacting with the + // controls (e.g. on mouse up, after dragging). + cameraControls.addEventListener('end', () => { }); + + // Change is called every time the user interacts with the controls. + cameraControls.addEventListener('change', () => { + this.logCurrentPositionAndViewSize(); + this.render(); + }); + } + + private logCurrentPositionAndViewSize() { + const x = this.camera.position.x; + const y = this.camera.position.y; + const orthoCamera = this.camera as OrthographicCamera; + // Adjust for zoom + const left = orthoCamera.left / orthoCamera.zoom; + const right = orthoCamera.right / orthoCamera.zoom; + const top = orthoCamera.top / orthoCamera.zoom; + const bottom = orthoCamera.bottom / orthoCamera.zoom; + updateStateForInstance(this.instanceId, {currentFocus:[left, right, bottom, top]}) + // this.state.currentFocus = [left, right, bottom, top] + // Getting the corner coordinates + const topLeft = new Vector3(left, top, 0); + const topRight = new Vector3(right, top, 0); + const bottomLeft = new Vector3(left, bottom, 0); + const bottomRight = new Vector3(right, bottom, 0); + + // img center never change + // const oriBackgroundTopLeft = new Vector3(x - 1, y + 1, 0); + // const oriBackgroundTopRight = new Vector3(x + 1, y + 1, 0); + // const oriBackgroundBottomLeft = new Vector3(x - 1, y - 1, 0); + // const oriBackgroundBottomRight = new Vector3(x + 1, y - 1, 0); + + console.log(`Position: (${x}, ${y})`); + // Logging them to console in a readable format + console.log(`Top Left: (${topLeft.x+x}, ${topLeft.y+y})`); + console.log(`Top Right: (${topRight.x+x}, ${topRight.y+y})`); + console.log(`Bottom Left: (${bottomLeft.x+x}, ${bottomLeft.y+y})`); + console.log(`Bottom Right: (${bottomRight.x+x}, ${bottomRight.y+y})`); + } + + + private makeOrbitControls( + camera: Camera, + cameraDef: CameraDef, + cameraIs3D: boolean + ) { + if (this.orbitCameraControls != null) { + this.orbitCameraControls.dispose(); + } + const occ = new OrbitControls(camera, this.renderer.domElement) as any; + occ.target0 = new Vector3( + cameraDef.target[0], + cameraDef.target[1], + cameraDef.target[2] + ); + occ.position0 = new Vector3().copy(camera.position); + occ.zoom0 = cameraDef.zoom; + occ.enableRotate = cameraIs3D; + occ.autoRotate = false; + occ.rotateSpeed = ORBIT_MOUSE_ROTATION_SPEED; + if (cameraIs3D) { + occ.mouseButtons.ORBIT = MOUSE.LEFT; + occ.mouseButtons.PAN = MOUSE.RIGHT; + } else { + occ.mouseButtons.ORBIT = null; + occ.mouseButtons.PAN = MOUSE.LEFT; + } + occ.mouseButtons.LEFT = MOUSE.PAN + occ.mouseButtons.RIGHT = null + occ.reset(); + this.camera = camera; + this.orbitCameraControls = occ; + this.addCameraControlsEventListeners(this.orbitCameraControls); + } + private makeCamera3D(cameraDef: CameraDef, w: number, h: number) { + let camera: PerspectiveCamera; + { + const aspectRatio = w / h; + camera = new PerspectiveCamera( + PERSP_CAMERA_FOV_VERTICAL, + aspectRatio, + PERSP_CAMERA_NEAR_CLIP_PLANE, + PERSP_CAMERA_FAR_CLIP_PLANE + ); + camera.position.set( + cameraDef.position[0], + cameraDef.position[1], + cameraDef.position[2] + ); + const at = new Vector3( + cameraDef.target[0], + cameraDef.target[1], + cameraDef.target[2] + ); + camera.lookAt(at); + camera.zoom = cameraDef.zoom; + camera.updateProjectionMatrix(); + } + this.camera = camera; + this.makeOrbitControls(camera, cameraDef, true); + } + private makeCamera2D(cameraDef: CameraDef, w: number, h: number) { + let camera: OrthographicCamera; + const target = new Vector3( + cameraDef.target[0], + cameraDef.target[1], + cameraDef.target[2] + ); + { + const aspectRatio = w / h; + let left = -ORTHO_CAMERA_FRUSTUM_HALF_EXTENT; + let right = ORTHO_CAMERA_FRUSTUM_HALF_EXTENT; + let bottom = -ORTHO_CAMERA_FRUSTUM_HALF_EXTENT; + let top = ORTHO_CAMERA_FRUSTUM_HALF_EXTENT; + // Scale up the larger of (w, h) to match the aspect ratio. + if (aspectRatio > 1) { + left *= aspectRatio; + right *= aspectRatio; + } else { + top /= aspectRatio; + bottom /= aspectRatio; + } + camera = new OrthographicCamera( + left, + right, + top, + bottom, + -1000, + 1000 + ); + camera.position.set( + cameraDef.position[0], + cameraDef.position[1], + cameraDef.position[2] + ); + camera.up = new Vector3(0, 1, 0); + camera.lookAt(target); + camera.zoom = cameraDef.zoom; + camera.updateProjectionMatrix(); + } + this.camera = camera; + this.makeOrbitControls(camera, cameraDef, false); + } + private makeDefaultCameraDef(dimensionality: number): CameraDef { + const def = new CameraDef(); + def.orthographic = dimensionality === 2; + def.zoom = 1; + if (def.orthographic) { + def.position = [ + this.START_CAMERA_POS_2D.x, + this.START_CAMERA_POS_2D.y, + this.START_CAMERA_POS_2D.z, + ]; + def.target = [ + this.START_CAMERA_TARGET_2D.x, + this.START_CAMERA_TARGET_2D.y, + this.START_CAMERA_TARGET_2D.z, + ]; + } else { + def.position = [ + this.START_CAMERA_POS_3D.x, + this.START_CAMERA_POS_3D.y, + this.START_CAMERA_POS_3D.z, + ]; + def.target = [ + this.START_CAMERA_TARGET_3D.x, + this.START_CAMERA_TARGET_3D.y, + this.START_CAMERA_TARGET_3D.z, + ]; + } + return def; + } + /** Recreate the scatter plot camera from a definition structure. */ + recreateCamera(cameraDef: CameraDef) { + if (cameraDef.orthographic) { + this.makeCamera2D(cameraDef, this.width, this.height); + } else { + this.makeCamera3D(cameraDef, this.width, this.height); + } + this.orbitCameraControls.minDistance = MIN_ZOOM; + this.orbitCameraControls.maxDistance = MAX_ZOOM; + this.orbitCameraControls.screenSpacePanning = true + // console.log('orbitCameraControls',this.orbitCameraControls) + this.orbitCameraControls + this.orbitCameraControls.update(); + if (this.orbitAnimationOnNextCameraCreation) { + this.startOrbitAnimation(); + } + } + private onClick(e?: MouseEvent, notify = true) { + if (e && this.selecting) { + return; + } + // Only call event handlers if the click originated from the scatter plot. + if (!this.isDragSequence && notify) { + let selection = this.nearestPoint != null ? [this.nearestPoint] : []; + // console.log("prevSelection", selection) + // console.log("realdata",this.realDataNumber) + // if (this.nearestPoint >= this.realDataNumber) { + // console.log("ifffff") + // selection = []; + // } + updateStateForInstance(this.instanceId, {selectedStack:selection}) + // getSelectedStack(this.instanceId) = selection + // console.log("click") + // console.log("selection",selection) + // Introduce a delay of, for example, 2000 milliseconds (2 seconds) + + this.projectorEventContext.notifySelectionChanged(selection); + + + + } + this.isDragSequence = false; + this.render(); + } + + private onMouseDown(e: MouseEvent) { + this.isDragSequence = false; + this.mouseIsDown = true; + // if (this.isctrling === true) { + // this.container.style.cursor = 'move'; + // return + // } + if (this.selecting && this.isShifting) { + this.orbitCameraControls.enabled = false; + this.rectangleSelector.onMouseDown(e.offsetX, e.offsetY); + this.setNearestPointToMouse(e); + } else if ( + !e.ctrlKey && + this.sceneIs3D() && + this.orbitCameraControls.mouseButtons.ORBIT === MOUSE.RIGHT + ) { + // The user happened to press the ctrl key when the tab was active, + // unpressed the ctrl when the tab was inactive, and now he/she + // is back to the projector tab. + this.orbitCameraControls.mouseButtons.ORBIT = MOUSE.LEFT; + this.orbitCameraControls.mouseButtons.PAN = MOUSE.RIGHT; + } else if ( + e.ctrlKey && + this.sceneIs3D() && + this.orbitCameraControls.mouseButtons.ORBIT === MOUSE.LEFT + ) { + // Similarly to the situation above. + this.orbitCameraControls.mouseButtons.ORBIT = MOUSE.RIGHT; + this.orbitCameraControls.mouseButtons.PAN = MOUSE.LEFT; + }else{ + this.container.style.cursor = 'move'; + // this.onKeyDown({keyCode:CTRL_KEY}) + } + } + private resetCamera() { + const def = this.cameraDef || this.makeDefaultCameraDef(3); + this.recreateCamera(def) + } + reset2dCamera() { + this.resetZoom() + } + /** When we stop dragging/zooming, return to normal behavior. */ + private onMouseUp(e: any) { + // if (this.isctrling === true) { + if (this.selecting) { + this.container.style.cursor = 'crosshair'; + } else { + this.container.style.cursor = 'default'; + } + this.mouseIsDown = false; + // return + // } + if (this.selecting && this.isShifting) { + this.orbitCameraControls.enabled = true; + this.rectangleSelector.onMouseUp(); + this.render(); + } + this.mouseIsDown = false; + } + /** + * When the mouse moves, find the nearest point (if any) and send it to the + * hoverlisteners (usually called from embedding.ts) + */ + private onMouseMove(e: MouseEvent) { + + + this.isDragSequence = this.mouseIsDown; + // Depending if we're selecting or just navigating, handle accordingly. + if (this.selecting && this.mouseIsDown) { + this.rectangleSelector.onMouseMove(e.offsetX, e.offsetY); + + this.render(); + } else if (!this.mouseIsDown) { + this.setNearestPointToMouse(e); + + this.projectorEventContext.notifyHoverOverPoint(this.nearestPoint) + } + + } + debounce(func: any, wait: any) { + let timeout; + return function () { + // 清空定时器 + if (timeout) clearTimeout(timeout); + timeout = setTimeout(func, wait) + } + } + + /** For using ctrl + left click as right click, and for circle select */ + private onKeyDown(e: any) { + // If ctrl is pressed, use left click to orbit + if (e.keyCode === CTRL_KEY && this.sceneIs3D) { + this.isctrling = true + // this.container.style.cursor = 'move'; + this.orbitCameraControls.mouseButtons.ORBIT = MOUSE.RIGHT; + this.orbitCameraControls.mouseButtons.PAN = MOUSE.LEFT; + } + var keyCode = e.keyCode || e.which || e.charCode; + let ctrlKey = e.ctrlKey || e.metaKey; + + if (ctrlKey && keyCode == 90) { + if (!this.selecting) { + this.container.style.cursor = 'default'; + } else { + this.container.style.cursor = 'crosshair'; + } + if (getSelectedStack(this.instanceId) && getSelectedStack(this.instanceId).length) { + if (getCustomSelection(this.instanceId)) { + this.projectorEventContext.notifySelectionChanged(getSelectedStack(this.instanceId), true, 'boundingbox'); + this.isctrling = false + updateStateForInstance(this.instanceId, {selectedStack:[]}) + // getSelectedStack(this.instanceId) = [] + } + }else{ + alert('You can only go back one step'); + this.isctrling = false + } + } + // If shift is pressed, start selecting + if (e.keyCode === SHIFT_KEY && this.selecting) { + this.isShifting = true + // this.selecting = true; + this.container.style.cursor = 'crosshair'; + } + + } + /** For using ctrl + left click as right click, and for circle select */ + private onKeyUp(e: any) { + this.isctrling = false + if(!(this.isShifting === true && this.mouseIsDown === true)){ + this.isShifting = false + }else{ + setTimeout(()=>{ + this.isShifting = false + }, 600) + } + if (this.selecting) { + this.container.style.cursor = 'crosshair'; + } else { + this.container.style.cursor = 'default'; + } + if (e.keyCode === CTRL_KEY && this.sceneIs3D()) { + this.orbitCameraControls.mouseButtons.ORBIT = MOUSE.LEFT; + this.orbitCameraControls.mouseButtons.PAN = MOUSE.RIGHT; + } + // If shift is released, stop selecting + if (e.keyCode === SHIFT_KEY) { + this.selecting = this.getMouseMode() === MouseMode.AREA_SELECT; + if (!this.selecting) { + this.container.style.cursor = 'default'; + } + this.render(); + } + } + /** + * Returns a list of indices of points in a bounding box from the picking + * texture. + * @param boundingBox The bounding box to select from. + */ + private getPointIndicesFromPickingTexture( + boundingBox: ScatterBoundingBox + ): number[] { + if (this.worldSpacePointPositions == null || this.worldSpacePointPositions == undefined) { + return null; + } + const pointCount = this.worldSpacePointPositions?.length / 3; + const dpr = window.devicePixelRatio || 1; + const x = Math.floor(boundingBox.x * dpr); + const y = Math.floor(boundingBox.y * dpr); + const width = Math.floor(boundingBox.width * dpr); + const height = Math.floor(boundingBox.height * dpr); + // Create buffer for reading all of the pixels from the texture. + let pixelBuffer = new Uint8Array(width * height * 4); + // Read the pixels from the bounding box. + this.renderer.readRenderTargetPixels( + this.pickingTexture, + x, + this.pickingTexture.height - y, + width, + height, + pixelBuffer + ); + // Keep a flat list of each point and whether they are selected or not. This + // approach is more efficient than using an object keyed by the index. + let pointIndicesSelection = new Uint8Array( + this.worldSpacePointPositions.length + ); + for (let i = 0; i < width * height; i++) { + const id = + (pixelBuffer[i * 4] << 16) | + (pixelBuffer[i * 4 + 1] << 8) | + pixelBuffer[i * 4 + 2]; + if (id !== 16777215 && id < pointCount) { + pointIndicesSelection[id] = 1; + } + } + let pointIndices: number[] = []; + for (let i = 0; i < pointIndicesSelection.length; i++) { + if (pointIndicesSelection[i] === 1) { + pointIndices.push(i); + } + } + return pointIndices; + } + private selectBoundingBox(boundingBox: ScatterBoundingBox) { + let pointIndices = this.getPointIndicesFromPickingTexture(boundingBox); + // remove backgound + let validIndices = []; + let length = pointIndices.length + if (pointIndices.length >= 100) { + length = 100 + alert('You can select up to 100 points at a time, and the first 100 points are selected by default') + this.isShifting = false + return + } + // for (let i = 0; i < length; i++) { + // if (pointIndices[i] < this.realDataNumber) { + // validIndices.push(pointIndices[i]); + // } + // } + // console.log('validIndices',validIndices,pointIndices) + updateStateForInstance(this.instanceId, {selectedStack:pointIndices}) + // getSelectedStack(this.instanceId) = pointIndices + this.projectorEventContext.notifySelectionChanged(pointIndices, true, 'boundingbox'); + } + private setNearestPointToMouse(e: MouseEvent) { + if (this.pickingTexture == null) { + this.nearestPoint = null; + return; + } + const boundingBox: ScatterBoundingBox = { + x: e.offsetX, + y: e.offsetY, + width: 4, + height: 4, + }; + const pointIndices = this.getPointIndicesFromPickingTexture(boundingBox); + + const realPointIndices = pointIndices?.filter(point => point < this.realDataNumber); + if (!realPointIndices || realPointIndices?.length == 0) { + this.nearestPoint = pointIndices != null ? pointIndices[0] : null; + } else { + this.nearestPoint = realPointIndices[0]; + } + + } + private getLayoutValues(): vector.Point2D { + this.width = this.container.offsetWidth; + this.height = Math.max(1, this.container.offsetHeight); + return [this.width, this.height]; + } + private sceneIs3D(): boolean { + return this.dimensionality === 3; + } + private remove3dAxisFromScene(): Object3D { + const axes = this.scene.getObjectByName('axes'); + if (axes != null) { + this.scene.remove(axes); + } + return axes; + } + private add3dAxis() { + const axes = new AxesHelper(); + axes.name = 'axes'; + this.scene.add(axes); + } + /** Set 2d vs 3d mode. */ + setDimensions(dimensionality: number) { + if (dimensionality !== 2 && dimensionality !== 3) { + throw new RangeError('dimensionality must be 2 or 3'); + } + this.dimensionality = dimensionality; + const def = this.cameraDef || this.makeDefaultCameraDef(dimensionality); + this.recreateCamera(def); + this.remove3dAxisFromScene(); + if (dimensionality === 3) { + this.add3dAxis(); + } + } + /** Gets the current camera information, suitable for serialization. */ + getCameraDef(): CameraDef { + const def = new CameraDef(); + const pos = this.camera.position; + const tgt = this.orbitCameraControls.target; + def.orthographic = !this.sceneIs3D(); + def.position = [pos.x, pos.y, pos.z]; + def.target = [tgt.x, tgt.y, tgt.z]; + def.zoom = (this.camera as any).zoom; + return def; + } + /** Sets parameters for the next camera recreation. */ + setCameraParametersForNextCameraCreation( + def: CameraDef, + orbitAnimation: boolean + ) { + this.cameraDef = def; + this.orbitAnimationOnNextCameraCreation = orbitAnimation; + } + /** Gets the current camera position. */ + getCameraPosition(): vector.Point3D { + const currPos = this.camera.position; + return [currPos.x, currPos.y, currPos.z]; + } + /** Gets the current camera target. */ + getCameraTarget(): vector.Point3D { + let currTarget = this.orbitCameraControls.target; + return [currTarget.x, currTarget.y, currTarget.z]; + } + /** Sets up the camera from given position and target coordinates. */ + setCameraPositionAndTarget(position: vector.Point3D, target: vector.Point3D) { + this.stopOrbitAnimation(); + this.camera.position.set(position[0], position[1], position[2]); + this.orbitCameraControls.target.set(target[0], target[1], target[2]); + this.orbitCameraControls.update(); + this.render(); + } + /** Starts orbiting the camera around its current lookat target. */ + startOrbitAnimation() { + if (!this.sceneIs3D()) { + return; + } + if (this.orbitAnimationId != null) { + this.stopOrbitAnimation(); + } + this.orbitCameraControls.autoRotate = true; + this.orbitCameraControls.rotateSpeed = ORBIT_ANIMATION_ROTATION_CYCLE_IN_SECONDS; + this.updateOrbitAnimation(); + } + private updateOrbitAnimation() { + this.orbitCameraControls.update(); + this.orbitAnimationId = requestAnimationFrame(() => + this.updateOrbitAnimation() + ); + } + /** Stops the orbiting animation on the camera. */ + stopOrbitAnimation() { + this.orbitCameraControls.autoRotate = false; + this.orbitCameraControls.rotateSpeed = ORBIT_MOUSE_ROTATION_SPEED; + if (this.orbitAnimationId != null) { + cancelAnimationFrame(this.orbitAnimationId); + this.orbitAnimationId = null; + } + } + /** Adds a visualizer to the set, will start dispatching events to it */ + addVisualizer(visualizer: ScatterPlotVisualizer) { + if (this.scene) { + visualizer?.setScene(this.scene); + } + visualizer.onResize(this.width, this.height); + visualizer.onPointPositionsChanged(this.worldSpacePointPositions); + this.visualizers.push(visualizer); + } + /** Removes all visualizers attached to this scatter plot. */ + removeAllVisualizers() { + this.visualizers.forEach((v) => v.dispose()); + this.visualizers = []; + } + /** Update scatter plot with a new array of packed xyz point positions. */ + setPointPositions(worldSpacePointPositions: Float32Array, realDataNumber: number) { + this.worldSpacePointPositions = worldSpacePointPositions; + this.visualizers.forEach((v) => + v.onPointPositionsChanged(worldSpacePointPositions) + ); + this.realDataNumber = realDataNumber; + } + render() { + + + { + const lightPos = this.camera.position.clone(); + lightPos.x += 1; + lightPos.y += 1; + this.light.position.set(lightPos.x, lightPos.y, lightPos.z); + } + const cameraType = + this.camera instanceof PerspectiveCamera + ? CameraType.Perspective + : CameraType.Orthographic; + let cameraSpacePointExtents: [number, number] = [0, 0]; + if (this.worldSpacePointPositions != null) { + cameraSpacePointExtents = util.getNearFarPoints( + this.worldSpacePointPositions, + this.camera.position, + this.orbitCameraControls.target + ); + } + const rc = new RenderContext( + this.camera, + cameraType, + this.orbitCameraControls.target, + this.width, + this.height, + cameraSpacePointExtents[0], + cameraSpacePointExtents[1], + this.backgroundColor, + this.pointColors, + this.pointScaleFactors, + this.labels, + this.polylineColors, + this.polylineOpacities, + this.polylineWidths + ); + // Render first pass to picking target. This render fills pickingTexture + // with colors that are actually point ids, so that sampling the texture at + // the mouse's current x,y coordinates will reveal the data point that the + // mouse is over. + this.visualizers.forEach((v) => v.onPickingRender(rc)); + { + const axes = this.remove3dAxisFromScene(); + // Render to the pickingTexture when existing. + if (this.pickingTexture) { + this.renderer.setRenderTarget(this.pickingTexture); + } else { + this.renderer.setRenderTarget(null); + } + this.renderer.render(this.scene, this.camera); + // Set the renderTarget back to the default. + this.renderer.setRenderTarget(null); + if (axes != null) { + this.scene.add(axes); + } + } + // Render second pass to color buffer, to be displayed on the canvas. + this.visualizers.forEach((v) => v.onRender(rc, this.instanceId)); + this.renderer.render(this.scene, this.camera); + + } + setMouseMode(mouseMode: MouseMode) { + this.mouseMode = mouseMode; + if (mouseMode === MouseMode.AREA_SELECT) { + this.selecting = true; + this.container.style.cursor = 'crosshair'; + } else { + this.selecting = false; + this.container.style.cursor = 'default'; + } + } + /** Set the colors for every data point. (RGB triplets) */ + setPointColors(colors: Float32Array) { + this.pointColors = colors; + } + /** Set the scale factors for every data point. (scalars) */ + setPointScaleFactors(scaleFactors: Float32Array) { + this.pointScaleFactors = scaleFactors; + } + /** Set the labels to rendered */ + setLabels(labels: LabelRenderParams) { + this.labels = labels; + } + /** Set the colors for every data polyline. (RGB triplets) */ + setPolylineColors(colors: { [polylineIndex: number]: Float32Array }) { + this.polylineColors = colors; + } + setPolylineOpacities(opacities: Float32Array) { + this.polylineOpacities = opacities; + } + setPolylineWidths(widths: Float32Array) { + this.polylineWidths = widths; + } + getMouseMode(): MouseMode { + return this.mouseMode; + } + resetZoom() { + this.recreateCamera(this.makeDefaultCameraDef(this.dimensionality)); + this.render(); + } + setDayNightMode(isNight: boolean) { + const canvases = this.container.querySelectorAll('canvas'); + const filterValue = isNight ? 'invert(100%)' : null; + for (let i = 0; i < canvases.length; i++) { + canvases[i].style.filter = filterValue; + } + } + resize(render = true) { + const [oldW, oldH] = [this.width, this.height]; + const [newW, newH] = this.getLayoutValues(); + if (this.dimensionality === 3) { + const camera = this.camera as PerspectiveCamera; + camera.aspect = newW / newH; + camera.updateProjectionMatrix(); + } else { + const camera = this.camera as OrthographicCamera; + // Scale the ortho frustum by however much the window changed. + const scaleW = newW / oldW; + const scaleH = newH / oldH; + const newCamHalfWidth = ((camera.right - camera.left) * scaleW) / 2; + const newCamHalfHeight = ((camera.top - camera.bottom) * scaleH) / 2; + camera.top = newCamHalfHeight; + camera.bottom = -newCamHalfHeight; + camera.left = -newCamHalfWidth; + camera.right = newCamHalfWidth; + camera.updateProjectionMatrix(); + } + // Accouting for retina displays. + const dpr = window.devicePixelRatio || 1; + this.renderer.setPixelRatio(dpr); + this.renderer.setSize(newW, newH); + // the picking texture needs to be exactly the same as the render texture. + { + const renderCanvasSize = new Vector2(); + // TODO(stephanwlee): Remove casting to any after js typing is + // proper. + (this.renderer as any).getSize(renderCanvasSize); + const pixelRatio = this.renderer.getPixelRatio(); + this.pickingTexture = new WebGLRenderTarget( + renderCanvasSize.width * pixelRatio, + renderCanvasSize.height * pixelRatio + ); + this.pickingTexture.texture.minFilter = LinearFilter; + } + this.visualizers.forEach((v) => v.onResize(newW, newH)); + if (render) { + this.render(); + } + } + onCameraMove(listener: OnCameraMoveListener) { + this.onCameraMoveListeners.push(listener); + } + clickOnPoint(pointIndex: number) { + this.nearestPoint = pointIndex; + this.onClick(null, false); + } +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotRectangleSelector.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotRectangleSelector.ts new file mode 100644 index 0000000000000000000000000000000000000000..1fcced5eaf874d6177d5dda18ca17c6087d33585 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotRectangleSelector.ts @@ -0,0 +1,100 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +const FILL = '#dddddd'; +const FILL_OPACITY = 0.2; +const STROKE = '#aaaaaa'; +const STROKE_WIDTH = 2; +const STROKE_DASHARRAY = '10 5'; +export interface ScatterBoundingBox { + // The bounding box (x, y) position refers to the bottom left corner of the + // rect. + x: number; + y: number; + width: number; + height: number; +} +/** + * A class that manages and renders a data selection rectangle. + */ +export class ScatterPlotRectangleSelector { + private svgElement: SVGElement; + private rectElement: SVGRectElement; + private isMouseDown: boolean; + private startCoordinates: [number, number]; + private lastBoundingBox: ScatterBoundingBox; + private selectionCallback: (boundingBox: ScatterBoundingBox) => void; + /** + * @param container The container HTML element that the selection SVG rect + * will be a child of. + * @param selectionCallback The callback that accepts a bounding box to be + * called when selection changes. Currently, we only call the callback on + * mouseUp. + */ + constructor( + container: HTMLElement, + selectionCallback: (boundingBox: ScatterBoundingBox) => void + ) { + this.svgElement = container.querySelector('#selector1') as SVGElement; + this.rectElement = document.createElementNS( + 'http://www.w3.org/2000/svg', + 'rect' + ); + this.rectElement.style.stroke = STROKE; + this.rectElement.style.strokeDasharray = STROKE_DASHARRAY; + this.rectElement.style.strokeWidth = '' + STROKE_WIDTH; + this.rectElement.style.fill = FILL; + this.rectElement.style.fillOpacity = '' + FILL_OPACITY; + this.svgElement.appendChild(this.rectElement); + this.selectionCallback = selectionCallback; + this.isMouseDown = false; + } + onMouseDown(offsetX: number, offsetY: number) { + this.isMouseDown = true; + this.svgElement.style.display = 'block'; + this.startCoordinates = [offsetX, offsetY]; + this.lastBoundingBox = { + x: this.startCoordinates[0], + y: this.startCoordinates[1], + width: 1, + height: 1, + }; + } + onMouseMove(offsetX: number, offsetY: number) { + if (!this.isMouseDown) { + return; + } + this.lastBoundingBox.x = Math.min(offsetX, this.startCoordinates[0]); + this.lastBoundingBox.y = Math.max(offsetY, this.startCoordinates[1]); + this.lastBoundingBox.width = + Math.max(offsetX, this.startCoordinates[0]) - this.lastBoundingBox.x; + this.lastBoundingBox.height = + this.lastBoundingBox.y - Math.min(offsetY, this.startCoordinates[1]); + this.rectElement.setAttribute('x', '' + this.lastBoundingBox.x); + this.rectElement.setAttribute( + 'y', + '' + (this.lastBoundingBox.y - this.lastBoundingBox.height) + ); + this.rectElement.setAttribute('width', '' + this.lastBoundingBox.width); + this.rectElement.setAttribute('height', '' + this.lastBoundingBox.height); + } + onMouseUp() { + this.isMouseDown = false; + this.svgElement.style.display = 'none'; + this.rectElement.setAttribute('width', '0'); + this.rectElement.setAttribute('height', '0'); + this.selectionCallback(this.lastBoundingBox); + } +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizer.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizer.ts new file mode 100644 index 0000000000000000000000000000000000000000..10d79a2c0afc07fcc62f42e8c0015f1be6aec55b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizer.ts @@ -0,0 +1,52 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Scene} from 'three'; + +import {RenderContext} from './renderContext'; + +/** + * ScatterPlotVisualizer is an interface used by ScatterPlotContainer + * to manage and aggregate any number of concurrent visualization behaviors. + * To add a new visualization to the 3D scatter plot, create a new class that + * implements this interface and attach it to the ScatterPlotContainer. + */ +export interface ScatterPlotVisualizer { + /** Called to initialize the visualizer with the primary scene. */ + setScene(scene: Scene); + /** + * Called when the main scatter plot tears down the visualizer. Remove all + * objects from the scene, and dispose any heavy resources. + */ + dispose(); + /** + * Called when the positions of the scatter plot points have changed. + */ + onPointPositionsChanged(newWorldSpacePointPositions: Float32Array); + /** + * Called immediately before the main scatter plot performs a picking + * (selection) render. Set up render state for any geometry to use picking IDs + * instead of visual colors. + */ + onPickingRender(renderContext: RenderContext); + /** + * Called immediately before the main scatter plot performs a color (visual) + * render. Set up render state, lights, etc here. + */ + onRender(renderContext: RenderContext, instanceId: number); + /** + * Called when the canvas size changes. + */ + onResize(newWidth: number, newHeight: number); +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizer3DLabels.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizer3DLabels.ts new file mode 100644 index 0000000000000000000000000000000000000000..5acd70db59881da6307a658444358b56cff595dd --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizer3DLabels.ts @@ -0,0 +1,358 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {BufferAttribute, Scene,Color,Mesh,BufferGeometry,ShaderMaterial, Texture} from 'three'; + +import {RenderContext} from './renderContext'; +import {ScatterPlotVisualizer} from './scatterPlotVisualizer'; +import * as util from './util'; +import { getUnLabelData} from './globalState'; +const FONT_SIZE = 80; +const ONE_OVER_FONT_SIZE = 1 / FONT_SIZE; +const LABEL_SCALE = 2.2; // at 1:1 texel/pixel ratio +const LABEL_COLOR = 'black'; +const CUSTOM_COLOR = 'green'; +const LABEL_BACKGROUND = 'white'; +const MAX_CANVAS_DIMENSION = 8192; +const NUM_GLYPHS = 256; +const RGB_ELEMENTS_PER_ENTRY = 3; +const XYZ_ELEMENTS_PER_ENTRY = 3; +const UV_ELEMENTS_PER_ENTRY = 2; +const VERTICES_PER_GLYPH = 2 * 3; // 2 triangles, 3 verts per triangle +/** + * Each label is made up of triangles (two per letter.) Each vertex, then, is + * the corner of one of these triangles (and thus the corner of a letter + * rectangle.) + * Each has the following attributes: + * posObj: The (x, y) position of the vertex within the label, where the + * bottom center of the word is positioned at (0, 0); + * position: The position of the label in worldspace. + * vUv: The (u, v) coordinates that index into the glyphs sheet (range 0, 1.) + * color: The color of the label (matches the corresponding point's color.) + * wordShown: Boolean. Whether or not the label is visible. + */ +const VERTEX_SHADER = ` + attribute vec2 posObj; + attribute vec3 color; + varying vec2 vUv; + varying vec3 vColor; + + void main() { + vUv = uv; + vColor = color; + + // Rotate label to face camera. + + vec4 vRight = vec4( + modelViewMatrix[0][0], modelViewMatrix[1][0], modelViewMatrix[2][0], 0); + + vec4 vUp = vec4( + modelViewMatrix[0][1], modelViewMatrix[1][1], modelViewMatrix[2][1], 0); + + vec4 vAt = -vec4( + modelViewMatrix[0][2], modelViewMatrix[1][2], modelViewMatrix[2][2], 0); + + mat4 pointToCamera = mat4(vRight, vUp, vAt, vec4(0, 0, 0, 1)); + + vec2 scaledPos = posObj * ${ONE_OVER_FONT_SIZE} * ${LABEL_SCALE}; + + vec4 posRotated = pointToCamera * vec4(scaledPos, 0, 1); + vec4 mvPosition = modelViewMatrix * (vec4(position, 0) + posRotated); + gl_Position = projectionMatrix * mvPosition; + }`; +const FRAGMENT_SHADER = ` + uniform sampler2D texture; + uniform bool picking; + varying vec2 vUv; + varying vec3 vColor; + + void main() { + if (picking) { + gl_FragColor = vec4(vColor, 1.0); + } else { + vec4 fromTexture = texture2D(texture, vUv); + gl_FragColor = vec4(vColor, 1.0) * fromTexture; + } + }`; +type GlyphTexture = { + texture: Texture; + lengths: Float32Array; + offsets: Float32Array; +}; +/** + * Renders the text labels as 3d geometry in the world. + */ +export class ScatterPlotVisualizer3DLabels implements ScatterPlotVisualizer { + private scene: Scene; + private labelStrings: string[]; + private geometry: BufferGeometry; + private worldSpacePointPositions: Float32Array; + private pickingColors: Float32Array; + private renderColors: Float32Array; + private material: ShaderMaterial; + private uniforms: any; + private labelsMesh: Mesh; + private positions: BufferAttribute; + private totalVertexCount: number; + private labelVertexMap: number[][]; + private glyphTexture: GlyphTexture; + private instanceId: number; + private createGlyphTexture(): GlyphTexture { + let canvas = document.createElement('canvas'); + canvas.width = MAX_CANVAS_DIMENSION; + canvas.height = FONT_SIZE; + let ctx = canvas.getContext('2d'); + ctx.font = 'bold ' + FONT_SIZE * 0.75 + 'px roboto'; + ctx.textBaseline = 'top'; + ctx.fillStyle = LABEL_BACKGROUND; + ctx.rect(0, 0, canvas.width, canvas.height); + ctx.fill(); + ctx.fillStyle = LABEL_COLOR; + let spaceOffset = ctx.measureText(' ').width; + // For each letter, store length, position at the encoded index. + let glyphLengths = new Float32Array(NUM_GLYPHS); + let glyphOffset = new Float32Array(NUM_GLYPHS); + let leftCoord = 0; + for (let i = 0; i < NUM_GLYPHS; i++) { + let text = ' ' + String.fromCharCode(i); + let textLength = ctx.measureText(text).width; + glyphLengths[i] = textLength - spaceOffset; + glyphOffset[i] = leftCoord; + ctx.fillText(text, leftCoord - spaceOffset, 0); + leftCoord += textLength; + } + const tex = util.createTexture(canvas); + return {texture: tex, lengths: glyphLengths, offsets: glyphOffset}; + } + private processLabelVerts(pointCount: number) { + let numTotalLetters = 0; + this.labelVertexMap = []; + for (let i = 0; i < pointCount; i++) { + const label = this.labelStrings[i]; + let vertsArray: number[] = []; + for (let j = 0; j < label.length; j++) { + for (let k = 0; k < VERTICES_PER_GLYPH; k++) { + vertsArray.push(numTotalLetters * VERTICES_PER_GLYPH + k); + } + numTotalLetters++; + } + this.labelVertexMap.push(vertsArray); + } + this.totalVertexCount = numTotalLetters * VERTICES_PER_GLYPH; + } + private createColorBuffers(pointCount: number) { + this.pickingColors = new Float32Array( + this.totalVertexCount * RGB_ELEMENTS_PER_ENTRY + ); + this.renderColors = new Float32Array( + this.totalVertexCount * RGB_ELEMENTS_PER_ENTRY + ); + for (let i = 0; i < pointCount; i++) { + let color = new Color(i); + this.labelVertexMap[i].forEach((j) => { + this.pickingColors[RGB_ELEMENTS_PER_ENTRY * j] = color.r; + this.pickingColors[RGB_ELEMENTS_PER_ENTRY * j + 1] = color.g; + this.pickingColors[RGB_ELEMENTS_PER_ENTRY * j + 2] = color.b; + this.renderColors[RGB_ELEMENTS_PER_ENTRY * j] = 1; + this.renderColors[RGB_ELEMENTS_PER_ENTRY * j + 1] = 1; + this.renderColors[RGB_ELEMENTS_PER_ENTRY * j + 2] = 1; + }); + } + } + private createLabels() { + + if (this.labelStrings == null || this.worldSpacePointPositions == null) { + return; + } + const pointCount = + this.worldSpacePointPositions.length / XYZ_ELEMENTS_PER_ENTRY; + if (pointCount !== this.labelStrings.length) { + return; + } + this.glyphTexture = this.createGlyphTexture(); + this.uniforms = { + texture: {type: 't'}, + picking: {type: 'bool'}, + }; + this.material = new ShaderMaterial({ + uniforms: this.uniforms, + transparent: true, + vertexShader: VERTEX_SHADER, + fragmentShader: FRAGMENT_SHADER, + }); + this.processLabelVerts(pointCount); + this.createColorBuffers(pointCount); + let positionArray = new Float32Array( + this.totalVertexCount * XYZ_ELEMENTS_PER_ENTRY + ); + this.positions = new BufferAttribute( + positionArray, + XYZ_ELEMENTS_PER_ENTRY + ); + let posArray = new Float32Array( + this.totalVertexCount * XYZ_ELEMENTS_PER_ENTRY + ); + let uvArray = new Float32Array( + this.totalVertexCount * UV_ELEMENTS_PER_ENTRY + ); + let colorsArray = new Float32Array( + this.totalVertexCount * RGB_ELEMENTS_PER_ENTRY + ); + let positionObject = new BufferAttribute(posArray, 2); + let uv = new BufferAttribute(uvArray, UV_ELEMENTS_PER_ENTRY); + let colors = new BufferAttribute(colorsArray, RGB_ELEMENTS_PER_ENTRY); + this.geometry = new BufferGeometry(); + this.geometry.addAttribute('posObj', positionObject); + this.geometry.addAttribute('position', this.positions); + this.geometry.addAttribute('uv', uv); + this.geometry.addAttribute('color', colors); + let lettersSoFar = 0; + for (let i = 0; i < pointCount; i++) { + const label = this.labelStrings[i]; + let leftOffset = 0; + // Determine length of word in pixels. + for (let j = 0; j < label.length; j++) { + let letterCode = label.charCodeAt(j); + leftOffset += this.glyphTexture.lengths[letterCode]; + } + leftOffset /= -2; // centers text horizontally around the origin + for (let j = 0; j < label.length; j++) { + let letterCode = label.charCodeAt(j); + let letterWidth = this.glyphTexture.lengths[letterCode]; + let scale = FONT_SIZE; + let right = (leftOffset + letterWidth) / scale; + let left = leftOffset / scale; + let top = FONT_SIZE / scale; + // First triangle + if(getUnLabelData(this.instanceId).indexOf(i) !== -1){ + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 0, left, 0); + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 1, right, 0); + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 2, left, top); + // Second triangle + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 3, left, top); + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 4, right, 0); + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 5, right, top); + } + + // Set UVs based on letter. + let uLeft = this.glyphTexture.offsets[letterCode]; + let uRight = this.glyphTexture.offsets[letterCode] + letterWidth; + // Scale so that uvs lie between 0 and 1 on the texture. + uLeft /= MAX_CANVAS_DIMENSION; + uRight /= MAX_CANVAS_DIMENSION; + let vTop = 1; + let vBottom = 0; + uv.setXY(lettersSoFar * VERTICES_PER_GLYPH + 0, uLeft, vTop); + uv.setXY(lettersSoFar * VERTICES_PER_GLYPH + 1, uRight, vTop); + uv.setXY(lettersSoFar * VERTICES_PER_GLYPH + 2, uLeft, vBottom); + uv.setXY(lettersSoFar * VERTICES_PER_GLYPH + 3, uLeft, vBottom); + uv.setXY(lettersSoFar * VERTICES_PER_GLYPH + 4, uRight, vTop); + uv.setXY(lettersSoFar * VERTICES_PER_GLYPH + 5, uRight, vBottom); + lettersSoFar++; + leftOffset += letterWidth; + } + } + for (let i = 0; i < pointCount; i++) { + const p = util.vector3FromPackedArray(this.worldSpacePointPositions, i); + this.labelVertexMap[i].forEach((j) => { + this.positions.setXYZ(j, p.x, p.y, p.z); + }); + } + this.labelsMesh = new Mesh(this.geometry, this.material); + this.labelsMesh.frustumCulled = false; + this.scene.add(this.labelsMesh); + } + private colorLabels(pointColors: Float32Array) { + if ( + this.labelStrings == null || + this.geometry == null || + pointColors == null + ) { + return; + } + const colors = this.geometry.getAttribute('color') as BufferAttribute; + (colors as any).setArray(this.renderColors); + const n = pointColors.length / XYZ_ELEMENTS_PER_ENTRY; + let src = 0; + for (let i = 0; i < n; ++i) { + const c = new Color( + pointColors[src], + pointColors[src + 1], + pointColors[src + 2] + ); + const m = this.labelVertexMap[i].length; + for (let j = 0; j < m; ++j) { + colors.setXYZ(this.labelVertexMap[i][j], c.r, c.g, c.b); + } + src += RGB_ELEMENTS_PER_ENTRY; + } + colors.needsUpdate = true; + } + setScene(scene: Scene) { + this.scene = scene; + } + dispose() { + if (this.labelsMesh) { + if (this.scene) { + this.scene.remove(this.labelsMesh); + } + this.labelsMesh = null; + } + if (this.geometry) { + this.geometry.dispose(); + this.geometry = null; + } + if (this.glyphTexture != null && this.glyphTexture.texture != null) { + this.glyphTexture.texture.dispose(); + this.glyphTexture.texture = null; + } + } + onPickingRender(rc: RenderContext) { + if (this.geometry == null) { + this.createLabels(); + } + if (this.geometry == null) { + return; + } + this.material.uniforms.texture.value = this.glyphTexture.texture; + this.material.uniforms.picking.value = true; + const colors = this.geometry.getAttribute('color') as BufferAttribute; + (colors as any).setArray(this.pickingColors); + colors.needsUpdate = true; + } + onRender(rc: RenderContext, instanceId: number) { + this.instanceId = instanceId + if (this.geometry == null) { + this.createLabels(); + } + if (this.geometry == null) { + return; + } + this.colorLabels(rc.pointColors); + this.material.uniforms.texture.value = this.glyphTexture.texture; + this.material.uniforms.picking.value = false; + const colors = this.geometry.getAttribute('color') as BufferAttribute; + (colors as any).setArray(this.renderColors); + colors.needsUpdate = true; + } + onPointPositionsChanged(newPositions: Float32Array) { + this.worldSpacePointPositions = newPositions; + this.dispose(); + } + setLabelStrings(labelStrings: string[]) { + this.labelStrings = labelStrings; + this.dispose(); + } + onResize(newWidth: number, newHeight: number) {} +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizerCanvasLabels.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizerCanvasLabels.ts new file mode 100644 index 0000000000000000000000000000000000000000..ab0efbbfba6ed234314c737ee0953a60ebe6d74a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizerCanvasLabels.ts @@ -0,0 +1,179 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import{scalePow} from 'd3'; +import {Vector3, Scene} from 'three'; +import {} from './globalState'; +import {CameraType, RenderContext} from './renderContext'; +import {BoundingBox, CollisionGrid} from './label'; +import {ScatterPlotVisualizer} from './scatterPlotVisualizer'; +import * as util from './util'; + + +const MAX_LABELS_ON_SCREEN = 10000; +const LABEL_STROKE_WIDTH = 3; +const LABEL_FILL_WIDTH = 6; +/** + * Creates and maintains a 2d canvas on top of the GL canvas. All labels, when + * active, are rendered to the 2d canvas as part of the visible render pass. + */ +export class ScatterPlotVisualizerCanvasLabels + implements ScatterPlotVisualizer { + private worldSpacePointPositions: Float32Array; + private gc: CanvasRenderingContext2D; + private canvas: HTMLCanvasElement; + private labelsActive: boolean = true; + private instanceId: number; + constructor(container: HTMLElement) { + this.canvas = document.createElement('canvas'); + container.appendChild(this.canvas); + this.gc = this.canvas.getContext('2d'); + this.canvas.style.position = 'absolute'; + this.canvas.style.left = '0'; + this.canvas.style.top = '0'; + this.canvas.style.pointerEvents = 'none'; + } + private removeAllLabels() { + const pixelWidth = this.canvas.width * window.devicePixelRatio; + const pixelHeight = this.canvas.height * window.devicePixelRatio; + this.gc.clearRect(0, 0, pixelWidth, pixelHeight); + } + /** Render all of the non-overlapping visible labels to the canvas. */ + private makeLabels(rc: RenderContext) { + if (rc.labels == null || rc.labels.pointIndices.length === 0) { + return; + } + if (this.worldSpacePointPositions == null) { + return; + } + const lrc = rc.labels; + const sceneIs3D: boolean = rc.cameraType === CameraType.Perspective; + const labelHeight = parseInt(this.gc.font, 10); + const dpr = window.devicePixelRatio; + let grid: CollisionGrid; + { + const pixw = this.canvas.width * dpr; + const pixh = this.canvas.height * dpr; + const bb: BoundingBox = {loX: 0, hiX: pixw, loY: 0, hiY: pixh}; + grid = new CollisionGrid(bb, pixw / 25, pixh / 50); + } + let opacityMap = + scalePow() + .exponent(Math.E) + .domain([rc.farthestCameraSpacePointZ, rc.nearestCameraSpacePointZ]) + .range([0.1, 1]); + const camPos = rc.camera.position; + const camToTarget = camPos.clone().sub(rc.cameraTarget); + let camToPoint = new Vector3(); + this.gc.textBaseline = 'middle'; + this.gc.miterLimit = 2; + // Have extra space between neighboring labels. Don't pack too tightly. + const labelMargin = 0; + // Shift the label to the right of the point circle. + const xShift = 4; + const n = Math.min(MAX_LABELS_ON_SCREEN, lrc.pointIndices.length); + for (let i = 0; i < n; ++i) { + let point: Vector3; + { + const pi = lrc.pointIndices[i]; + point = util.vector3FromPackedArray(this.worldSpacePointPositions, pi); + } + // discard points that are behind the camera + camToPoint.copy(camPos).sub(point); + if (camToTarget.dot(camToPoint) < 0) { + continue; + } + let [x, y] = util.vector3DToScreenCoords( + rc.camera, + rc.screenWidth, + rc.screenHeight, + point + ); + x += xShift; + // Computing the width of the font is expensive, + // so we assume width of 1 at first. Then, if the label doesn't + // conflict with other labels, we measure the actual width. + const textBoundingBox: BoundingBox = { + loX: x - labelMargin, + hiX: x + 1 + labelMargin, + loY: y - labelHeight / 2 - labelMargin, + hiY: y + labelHeight / 2 + labelMargin, + }; + if (grid.insert(textBoundingBox, true)) { + const text = lrc.labelStrings[i]; + const fontSize = lrc.defaultFontSize * lrc.scaleFactors[i] * dpr; + this.gc.font = fontSize + 'px roboto'; + // Now, check with properly computed width. + textBoundingBox.hiX += this.gc.measureText(text).width - 1; + if (grid.insert(textBoundingBox)) { + let opacity = 1; + if (sceneIs3D && lrc.useSceneOpacityFlags[i] === 1) { + opacity = opacityMap(camToPoint.length()); + } + this.gc.fillStyle = this.styleStringFromPackedRgba( + lrc.fillColors, + i, + opacity + ); + this.gc.strokeStyle = this.styleStringFromPackedRgba( + lrc.strokeColors, + i, + opacity + ); + this.gc.lineWidth = LABEL_STROKE_WIDTH; + this.gc.strokeText(text, x, y); + this.gc.lineWidth = LABEL_FILL_WIDTH; + this.gc.fillText(text, x, y); + } + } + } + } + private styleStringFromPackedRgba( + packedRgbaArray: Uint8Array, + colorIndex: number, + opacity: number + ): string { + const offset = colorIndex * 3; + const r = packedRgbaArray[offset]; + const g = packedRgbaArray[offset + 1]; + const b = packedRgbaArray[offset + 2]; + return 'rgba(' + r + ',' + g + ',' + b + ',' + opacity + ')'; + } + onResize(newWidth: number, newHeight: number) { + let dpr = window.devicePixelRatio; + this.canvas.width = newWidth * dpr; + this.canvas.height = newHeight * dpr; + this.canvas.style.width = newWidth + 'px'; + this.canvas.style.height = newHeight + 'px'; + } + dispose() { + this.removeAllLabels(); + this.canvas = null; + this.gc = null; + } + onPointPositionsChanged(newPositions: Float32Array) { + this.worldSpacePointPositions = newPositions; + this.removeAllLabels(); + } + onRender(rc: RenderContext, instanceId:number) { + this.instanceId = instanceId + if (!this.labelsActive) { + return; + } + this.removeAllLabels(); + this.makeLabels(rc); + } + setScene(scene: Scene) {} + onPickingRender(renderContext: RenderContext) {} +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizerPolylines.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizerPolylines.ts new file mode 100644 index 0000000000000000000000000000000000000000..3829c4f6bf6c4ff8a87bd79e9ed8293b4d34725b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizerPolylines.ts @@ -0,0 +1,144 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {BufferAttribute, Scene,BufferGeometry, LineBasicMaterial, Line, VertexColors,LineSegments} from 'three'; + +import {DataSet} from './data'; +import {RenderContext} from './renderContext'; +import {ScatterPlotVisualizer} from './scatterPlotVisualizer'; +import * as util from './util'; + +const RGB_NUM_ELEMENTS = 3; +const XYZ_NUM_ELEMENTS = 3; +/** + * Renders polylines that connect multiple points in the dataset. + */ +export class ScatterPlotVisualizerPolylines implements ScatterPlotVisualizer { + private dataSet: DataSet; + private scene: Scene; + private instanceId: number; + private polylines: Line[]; + private polylinePositionBuffer: { + [polylineIndex: number]: BufferAttribute; + } = {}; + private polylineColorBuffer: { + [polylineIndex: number]: BufferAttribute; + } = {}; + private updateSequenceIndicesInDataSet(ds: DataSet) { + for (let i = 0; i < ds.sequences.length; i++) { + const sequence = ds.sequences[i]; + for (let j = 0; j < sequence.pointIndices.length - 1; j++) { + ds.points[sequence.pointIndices[j]].sequenceIndex = i; + ds.points[sequence.pointIndices[j + 1]].sequenceIndex = i; + } + } + } + private createPolylines(scene: Scene) { + if (!this.dataSet || !this.dataSet.sequences) { + return; + } + this.updateSequenceIndicesInDataSet(this.dataSet); + this.polylines = []; + for (let i = 0; i < this.dataSet.sequences.length; i++) { + const geometry = new BufferGeometry(); + geometry.addAttribute('position', this.polylinePositionBuffer[i]); + geometry.addAttribute('color', this.polylineColorBuffer[i]); + const material = new LineBasicMaterial({ + linewidth: 1, // unused default, overwritten by width array. + opacity: 1.0, // unused default, overwritten by opacity array. + transparent: true, + vertexColors: VertexColors as any, + }); + const polyline = new LineSegments(geometry, material); + polyline.frustumCulled = false; + this.polylines.push(polyline); + scene.add(polyline); + } + } + dispose() { + if (this.polylines == null) { + return; + } + for (let i = 0; i < this.polylines.length; i++) { + this.scene.remove(this.polylines[i]); + this.polylines[i].geometry.dispose(); + } + this.polylines = null; + this.polylinePositionBuffer = {}; + this.polylineColorBuffer = {}; + } + setScene(scene: Scene) { + this.scene = scene; + } + setDataSet(dataSet: DataSet) { + this.dataSet = dataSet; + } + onPointPositionsChanged(newPositions: Float32Array) { + if (newPositions == null || this.polylines != null) { + this.dispose(); + } + if (newPositions == null || this.dataSet == null) { + return; + } + // Set up the position buffer arrays for each polyline. + for (let i = 0; i < this.dataSet.sequences.length; i++) { + let sequence = this.dataSet.sequences[i]; + const vertexCount = 2 * (sequence.pointIndices.length - 1); + let polylines = new Float32Array(vertexCount * XYZ_NUM_ELEMENTS); + this.polylinePositionBuffer[i] = new BufferAttribute( + polylines, + XYZ_NUM_ELEMENTS + ); + let colors = new Float32Array(vertexCount * RGB_NUM_ELEMENTS); + this.polylineColorBuffer[i] = new BufferAttribute( + colors, + RGB_NUM_ELEMENTS + ); + } + for (let i = 0; i < this.dataSet.sequences.length; i++) { + const sequence = this.dataSet.sequences[i]; + let src = 0; + for (let j = 0; j < sequence.pointIndices.length - 1; j++) { + const p1Index = sequence.pointIndices[j]; + const p2Index = sequence.pointIndices[j + 1]; + const p1 = util.vector3FromPackedArray(newPositions, p1Index); + const p2 = util.vector3FromPackedArray(newPositions, p2Index); + this.polylinePositionBuffer[i].setXYZ(src, p1.x, p1.y, p1.z); + this.polylinePositionBuffer[i].setXYZ(src + 1, p2.x, p2.y, p2.z); + src += 2; + } + this.polylinePositionBuffer[i].needsUpdate = true; + } + if (this.polylines == null) { + this.createPolylines(this.scene); + } + } + onRender(renderContext: RenderContext, instanceId: number) { + this.instanceId = instanceId + if (this.polylines == null) { + return; + } + for (let i = 0; i < this.polylines.length; i++) { + const mat = this.polylines[i].material as LineBasicMaterial; + mat.opacity = renderContext.polylineOpacities[i]; + mat.linewidth = renderContext.polylineWidths[i]; + (this.polylineColorBuffer[i] as any).setArray( + renderContext.polylineColors[i] + ); + this.polylineColorBuffer[i].needsUpdate = true; + } + } + onPickingRender(renderContext: RenderContext) {} + onResize(newWidth: number, newHeight: number) {} +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizerSprites.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizerSprites.ts new file mode 100644 index 0000000000000000000000000000000000000000..30a13344b05305d3101324662d5c6653ce74185d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizerSprites.ts @@ -0,0 +1,456 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { BufferAttribute, Scene,Color,BufferGeometry,ShaderMaterial, Texture, ShaderChunk, Fog,Points,MultiplyBlending,NormalBlending,PerspectiveCamera} from 'three'; + +import {CameraType, RenderContext} from './renderContext'; +import {ScatterPlotVisualizer} from './scatterPlotVisualizer'; +import * as util from './util'; + + +const NUM_POINTS_FOG_THRESHOLD = 5000; +const MIN_POINT_SIZE = 5; +const IMAGE_SIZE = 30; +// Constants relating to the indices of buffer arrays. +const RGB_NUM_ELEMENTS = 3; +const INDEX_NUM_ELEMENTS = 1; +const XYZ_NUM_ELEMENTS = 3; + +function createVertexShader() { + return ` + // Index of the specific vertex (passed in as bufferAttribute), and the + // variable that will be used to pass it to the fragment shader. + attribute float spriteIndex; + attribute vec3 color; + attribute float scaleFactor; + + varying vec2 xyIndex; + varying vec3 vColor; + + uniform bool sizeAttenuation; + uniform float pointSize; + uniform float spritesPerRow; + uniform float spritesPerColumn; + + ${ ShaderChunk['fog_pars_vertex']} + + void main() { + // Pass index and color values to fragment shader. + vColor = color; + xyIndex = vec2(mod(spriteIndex, spritesPerRow), + floor(spriteIndex / spritesPerColumn)); + + // Transform current vertex by modelViewMatrix (model world position and + // camera world position matrix). + vec4 cameraSpacePos = modelViewMatrix * vec4(position, 1.0); + + // Project vertex in camera-space to screen coordinates using the camera's + // projection matrix. + gl_Position = projectionMatrix * cameraSpacePos; + + // Create size attenuation (if we're in 3D mode) by making the size of + // each point inversly proportional to its distance to the camera. + float outputPointSize = pointSize; + if (sizeAttenuation) { + outputPointSize = -pointSize / cameraSpacePos.z; + } else { // Create size attenuation (if we're in 2D mode) + const float PI = 3.1415926535897932384626433832795; + const float minScale = 0.1; // minimum scaling factor + const float outSpeed = 2.0; // shrink speed when zooming out + const float outNorm = (1. - minScale) / atan(outSpeed); + const float maxScale = 15.0; // maximum scaling factor + const float inSpeed = 0.02; // enlarge speed when zooming in + const float zoomOffset = 0.3; // offset zoom pivot + float zoom = projectionMatrix[0][0] + zoomOffset; // zoom pivot + float scale = zoom < 1. ? 1. + outNorm * atan(outSpeed * (zoom - 1.)) : + 1. + 2. / PI * (maxScale - 1.) * atan(inSpeed * (zoom - 1.)); + outputPointSize = pointSize * scale; + } + + gl_PointSize = + max(outputPointSize * scaleFactor, ${MIN_POINT_SIZE.toFixed(1)}); + }`; +} + +const FRAGMENT_SHADER_POINT_TEST_CHUNK = ` + bool point_in_unit_circle(vec2 spriteCoord) { + vec2 centerToP = spriteCoord - vec2(0.5, 0.5); + return dot(centerToP, centerToP) < (0.5 * 0.5); + } + + bool point_in_unit_equilateral_triangle(vec2 spriteCoord) { + vec3 v0 = vec3(0, 1, 0); + vec3 v1 = vec3(0.5, 0, 0); + vec3 v2 = vec3(1, 1, 0); + vec3 p = vec3(spriteCoord, 0); + float p_in_v0_v1 = cross(v1 - v0, p - v0).z; + float p_in_v1_v2 = cross(v2 - v1, p - v1).z; + return (p_in_v0_v1 > 0.0) && (p_in_v1_v2 > 0.0); + } + + bool point_in_unit_square(vec2 spriteCoord) { + return true; + } +`; + +function createFragmentShader() { + return ` + varying vec2 xyIndex; + varying vec3 vColor; + + uniform sampler2D texture; + uniform float spritesPerRow; + uniform float spritesPerColumn; + uniform bool isImage; + + ${ ShaderChunk['common']} + ${ ShaderChunk['fog_pars_fragment']} + ${FRAGMENT_SHADER_POINT_TEST_CHUNK} + + void main() { + if (isImage) { + // Coordinates of the vertex within the entire sprite image. + vec2 coords = + (gl_PointCoord + xyIndex) / vec2(spritesPerRow, spritesPerColumn); + gl_FragColor = vec4(vColor, 1.0) * texture2D(texture, coords); + } else { + bool inside = point_in_unit_circle(gl_PointCoord); + if (!inside) { + discard; + } + gl_FragColor = vec4(vColor, 1); + } + ${ ShaderChunk['fog_fragment']} + }`; +} + +const FRAGMENT_SHADER_PICKING = ` + varying vec2 xyIndex; + varying vec3 vColor; + uniform bool isImage; + + ${FRAGMENT_SHADER_POINT_TEST_CHUNK} + + void main() { + xyIndex; // Silence 'unused variable' warning. + if (isImage) { + gl_FragColor = vec4(vColor, 1); + } else { + bool inside = point_in_unit_circle(gl_PointCoord); + if (!inside) { + discard; + } + gl_FragColor = vec4(vColor, 1); + } + }`; + +/** + * Uses GL point sprites to render the dataset. + */ +export class ScatterPlotVisualizerSprites implements ScatterPlotVisualizer { + private readonly VERTEX_SHADER = createVertexShader(); + private readonly FRAGMENT_SHADER = createFragmentShader(); + private scene: Scene; + private fog: Fog; + private texture: Texture = null; + private standinTextureForPoints: Texture; + private spritesPerRow: number; + private spritesPerColumn: number; + private spriteDimensions: [number, number]; + private spriteIndexBufferAttribute: BufferAttribute; + private renderMaterial: ShaderMaterial; + private pickingMaterial: ShaderMaterial; + private points: Points; + private worldSpacePointPositions: Float32Array; + private pickingColors: Float32Array; + private renderColors: Float32Array; + private instanceId: number; + constructor() { + this.standinTextureForPoints = util.createTexture( + document.createElement('canvas') + ); + this.renderMaterial = this.createRenderMaterial(false); + this.pickingMaterial = this.createPickingMaterial(false); + } + private createTextureFromSpriteAtlas( + spriteAtlas: HTMLImageElement, + spriteDimensions: [number, number], + spriteIndices: Float32Array + ) { + this.texture = util.createTexture(spriteAtlas); + this.spritesPerRow = spriteAtlas.width / spriteDimensions[0]; + this.spritesPerColumn = spriteAtlas.height / spriteDimensions[1]; + this.spriteDimensions = spriteDimensions; + this.spriteIndexBufferAttribute = new BufferAttribute( + spriteIndices, + INDEX_NUM_ELEMENTS + ); + if (this.points != null) { + (this.points.geometry as BufferGeometry).addAttribute( + 'spriteIndex', + this.spriteIndexBufferAttribute + ); + } + } + private createUniforms(): any { + return { + texture: {type: 't'}, + spritesPerRow: {type: 'f'}, + spritesPerColumn: {type: 'f'}, + fogColor: {type: 'c'}, + fogNear: {type: 'f'}, + fogFar: {type: 'f'}, + isImage: {type: 'bool'}, + sizeAttenuation: {type: 'bool'}, + pointSize: {type: 'f'}, + }; + } + private createRenderMaterial(haveImage: boolean): ShaderMaterial { + const uniforms = this.createUniforms(); + return new ShaderMaterial({ + uniforms: uniforms, + vertexShader: this.VERTEX_SHADER, + fragmentShader: this.FRAGMENT_SHADER, + transparent: !haveImage, + depthTest: haveImage, + depthWrite: haveImage, + fog: true, + blending: MultiplyBlending, + }); + } + private createPickingMaterial(haveImage: boolean): ShaderMaterial { + const uniforms = this.createUniforms(); + return new ShaderMaterial({ + uniforms: uniforms, + vertexShader: this.VERTEX_SHADER, + fragmentShader: FRAGMENT_SHADER_PICKING, + transparent: true, + depthTest: true, + depthWrite: true, + fog: false, + blending: NormalBlending, + }); + } + /** + * Create points, set their locations and actually instantiate the + * geometry. + */ + private createPointSprites(scene: Scene, positions: Float32Array) { + const pointCount = + positions != null ? positions.length / XYZ_NUM_ELEMENTS : 0; + const geometry = this.createGeometry(pointCount); + this.fog = new Fog(16777215); // unused value, gets overwritten. + this.points = new Points(geometry, this.renderMaterial); + this.points.frustumCulled = false; + if (this.spriteIndexBufferAttribute != null) { + (this.points.geometry as BufferGeometry).addAttribute( + 'spriteIndex', + this.spriteIndexBufferAttribute + ); + } + scene.add(this.points); + } + private calculatePointSize(sceneIs3D: boolean): number { + if (this.texture != null) { + return sceneIs3D ? IMAGE_SIZE : this.spriteDimensions[0]; + } + const n = + this.worldSpacePointPositions != null + ? this.worldSpacePointPositions.length / XYZ_NUM_ELEMENTS + : 1; + const SCALE = 200; + const LOG_BASE = 8; + const DIVISOR = 1.5; + // Scale point size inverse-logarithmically to the number of points. + const pointSize = SCALE / Math.log(n) / Math.log(LOG_BASE); + return sceneIs3D ? pointSize : pointSize / DIVISOR; + } + /** + * Set up buffer attributes to be used for the points/images. + */ + private createGeometry(pointCount: number): BufferGeometry { + const n = pointCount; + // Fill pickingColors with each point's unique id as its color. + this.pickingColors = new Float32Array(n * RGB_NUM_ELEMENTS); + { + let dst = 0; + for (let i = 0; i < n; i++) { + const c = new Color(i); + this.pickingColors[dst++] = c.r; + this.pickingColors[dst++] = c.g; + this.pickingColors[dst++] = c.b; + } + } + const geometry = new BufferGeometry(); + geometry.addAttribute( + 'position', + new BufferAttribute(undefined, XYZ_NUM_ELEMENTS) + ); + geometry.addAttribute( + 'color', + new BufferAttribute(undefined, RGB_NUM_ELEMENTS) + ); + geometry.addAttribute( + 'scaleFactor', + new BufferAttribute(undefined, INDEX_NUM_ELEMENTS) + ); + return geometry; + } + private setFogDistances( + sceneIs3D: boolean, + nearestPointZ: number, + farthestPointZ: number + ) { + if (sceneIs3D) { + const n = this.worldSpacePointPositions.length / XYZ_NUM_ELEMENTS; + this.fog.near = nearestPointZ; + // If there are fewer points we want less fog. We do this + // by making the "far" value (that is, the distance from the camera to the + // far edge of the fog) proportional to the number of points. + let multiplier = + 2 - Math.min(n, NUM_POINTS_FOG_THRESHOLD) / NUM_POINTS_FOG_THRESHOLD; + this.fog.far = farthestPointZ * multiplier; + } else { + this.fog.near = Infinity; + this.fog.far = Infinity; + } + } + dispose() { + this.disposeGeometry(); + this.disposeTextureAtlas(); + } + private disposeGeometry() { + if (this.points != null) { + this.scene.remove(this.points); + this.points.geometry.dispose(); + this.points = null; + this.worldSpacePointPositions = null; + } + } + private disposeTextureAtlas() { + if (this.texture != null) { + this.texture.dispose(); + } + this.texture = null; + this.renderMaterial = null; + this.pickingMaterial = null; + } + setScene(scene: Scene) { + this.scene = scene; + } + setSpriteAtlas( + spriteImage: HTMLImageElement, + spriteDimensions: [number, number], + spriteIndices: Float32Array + ) { + this.disposeTextureAtlas(); + this.createTextureFromSpriteAtlas( + spriteImage, + spriteDimensions, + spriteIndices + ); + this.renderMaterial = this.createRenderMaterial(true); + this.pickingMaterial = this.createPickingMaterial(true); + } + clearSpriteAtlas() { + this.disposeTextureAtlas(); + this.renderMaterial = this.createRenderMaterial(false); + this.pickingMaterial = this.createPickingMaterial(false); + } + onPointPositionsChanged(newPositions: Float32Array) { + if (newPositions == null || newPositions.length === 0) { + this.dispose(); + return; + } + if (this.points != null) { + if (this.worldSpacePointPositions.length !== newPositions.length) { + this.disposeGeometry(); + } + } + this.worldSpacePointPositions = newPositions; + if (this.points == null) { + this.createPointSprites(this.scene, newPositions); + } + const positions = (this.points + .geometry as BufferGeometry).getAttribute( + 'position' + ) as BufferAttribute; + (positions as any).setArray(newPositions); + positions.needsUpdate = true; + } + onPickingRender(rc: RenderContext) { + if (this.points == null) { + return; + } + const sceneIs3D: boolean = rc.cameraType === CameraType.Perspective; + this.pickingMaterial.uniforms.spritesPerRow.value = this.spritesPerRow; + this.pickingMaterial.uniforms.spritesPerRow.value = this.spritesPerColumn; + this.pickingMaterial.uniforms.sizeAttenuation.value = sceneIs3D; + this.pickingMaterial.uniforms.pointSize.value = this.calculatePointSize( + sceneIs3D + ); + this.points.material = this.pickingMaterial; + let colors = (this.points.geometry as BufferGeometry).getAttribute( + 'color' + ) as BufferAttribute; + (colors as any).setArray(this.pickingColors); + colors.needsUpdate = true; + let scaleFactors = (this.points + .geometry as BufferGeometry).getAttribute( + 'scaleFactor' + ) as BufferAttribute; + (scaleFactors as any).setArray(rc.pointScaleFactors); + scaleFactors.needsUpdate = true; + } + onRender(rc: RenderContext, instanceId: number) { + this.instanceId = instanceId + if (!this.points) { + return; + } + const sceneIs3D: boolean = rc.camera instanceof PerspectiveCamera; + this.setFogDistances( + sceneIs3D, + rc.nearestCameraSpacePointZ, + rc.farthestCameraSpacePointZ + ); + this.scene.fog = this.fog; + this.scene.fog.color = new Color(rc.backgroundColor); + this.renderMaterial.uniforms.fogColor.value = this.scene.fog.color; + this.renderMaterial.uniforms.fogNear.value = this.fog.near; + this.renderMaterial.uniforms.fogFar.value = this.fog.far; + this.renderMaterial.uniforms.spritesPerRow.value = this.spritesPerRow; + this.renderMaterial.uniforms.spritesPerColumn.value = this.spritesPerColumn; + this.renderMaterial.uniforms.isImage.value = this.texture != null; + this.renderMaterial.uniforms.texture.value = + this.texture != null ? this.texture : this.standinTextureForPoints; + this.renderMaterial.uniforms.sizeAttenuation.value = sceneIs3D; + this.renderMaterial.uniforms.pointSize.value = this.calculatePointSize( + sceneIs3D + ); + this.points.material = this.renderMaterial; + let colors = (this.points.geometry as BufferGeometry).getAttribute( + 'color' + ) as BufferAttribute; + this.renderColors = rc.pointColors; + (colors as any).setArray(this.renderColors); + colors.needsUpdate = true; + let scaleFactors = (this.points + .geometry as BufferGeometry).getAttribute( + 'scaleFactor' + ) as BufferAttribute; + (scaleFactors as any).setArray(rc.pointScaleFactors); + scaleFactors.needsUpdate = true; + } + onResize(newWidth: number, newHeight: number) {} +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizerTraceLine.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizerTraceLine.ts new file mode 100644 index 0000000000000000000000000000000000000000..47ef838fecc8dbf941ab3b0be2d2eb5545f2908d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizerTraceLine.ts @@ -0,0 +1,552 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CatmullRomCurve3, BufferAttribute, Scene,Color,Mesh,BufferGeometry,ShaderMaterial, Texture,Geometry,Vector3, Line, LineBasicMaterial, SplineCurve} from 'three'; +import {scaleLinear, extent} from 'd3'; + +import { RenderContext } from './renderContext'; +import { ScatterPlotVisualizer } from './scatterPlotVisualizer'; +import { updateStateForInstance, getLineGeomertryList, getWorldSpacePointPositions, getIteration, getDVIDataList, getIsAnimating } from './globalState'; +import * as util from './util'; +const RGB_NUM_ELEMENTS = 3; +const XYZ_NUM_ELEMENTS = 3; +import { + DataSet, + +} from './data'; + + +const FONT_SIZE = 80; +const ONE_OVER_FONT_SIZE = 1 / FONT_SIZE; +const LABEL_SCALE = 2.2; // at 1:1 texel/pixel ratio +const LABEL_COLOR = 'black'; +const LABEL_BACKGROUND = 'white'; +const MAX_CANVAS_DIMENSION = 8192; +const NUM_GLYPHS = 256; +const RGB_ELEMENTS_PER_ENTRY = 3; +const XYZ_ELEMENTS_PER_ENTRY = 3; +const UV_ELEMENTS_PER_ENTRY = 2; +const VERTICES_PER_GLYPH = 2 * 3; // 2 triangles, 3 verts per triangle +const SCATTER_PLOT_CUBE_LENGTH = 2; +/** + * Each label is made up of triangles (two per letter.) Each vertex, then, is + * the corner of one of these triangles (and thus the corner of a letter + * rectangle.) + * Each has the following attributes: + * posObj: The (x, y) position of the vertex within the label, where the + * bottom center of the word is positioned at (0, 0); + * position: The position of the label in worldspace. + * vUv: The (u, v) coordinates that index into the glyphs sheet (range 0, 1.) + * color: The color of the label (matches the corresponding point's color.) + * wordShown: Boolean. Whether or not the label is visible. + */ +const VERTEX_SHADER = ` + attribute vec2 posObj; + attribute vec3 color; + varying vec2 vUv; + varying vec3 vColor; + + void main() { + vUv = uv; + vColor = color; + + // Rotate label to face camera. + + vec4 vRight = vec4( + modelViewMatrix[0][0], modelViewMatrix[1][0], modelViewMatrix[2][0], 0); + + vec4 vUp = vec4( + modelViewMatrix[0][1], modelViewMatrix[1][1], modelViewMatrix[2][1], 0); + + vec4 vAt = -vec4( + modelViewMatrix[0][2], modelViewMatrix[1][2], modelViewMatrix[2][2], 0); + + mat4 pointToCamera = mat4(vRight, vUp, vAt, vec4(0, 0, 0, 1)); + + vec2 scaledPos = posObj * ${ONE_OVER_FONT_SIZE} * ${LABEL_SCALE}; + + vec4 posRotated = pointToCamera * vec4(scaledPos, 0, 1); + vec4 mvPosition = modelViewMatrix * (vec4(position, 0) + posRotated); + gl_Position = projectionMatrix * mvPosition; + }`; +const FRAGMENT_SHADER = ` + uniform sampler2D texture; + uniform bool picking; + varying vec2 vUv; + varying vec3 vColor; + + void main() { + if (picking) { + gl_FragColor = vec4(vColor, 1.0); + } else { + vec4 fromTexture = texture2D(texture, vUv); + gl_FragColor = vec4(vColor, 1.0) * fromTexture; + } + }`; +type GlyphTexture = { + texture: Texture; + lengths: Float32Array; + offsets: Float32Array; +}; +/** + * Renders the text labels as 3d geometry in the world. + */ +export class scatterPlotVisualizerTraceLine implements ScatterPlotVisualizer { + private scene: Scene; + // private labelStrings: string[]; + private geometry: BufferGeometry; + private linegeometry: BufferGeometry; + private linesContainer: any; + private worldSpacePointPositions: Float32Array; + private pickingColors: Float32Array; + private renderColors: Float32Array; + private material: ShaderMaterial; + private uniforms: any; + private pointsMesh: Mesh; + private positions: BufferAttribute; + private totalVertexCount: number; + private labelVertexMap: number[][]; + private glyphTexture: GlyphTexture; + private selectedIndexList: number[] + private epoches: number[] + + + private polylines: Line[]; + private instanceId: number; + private state: any; + + private polylinePositionBuffer: { + [polylineIndex: number]: BufferAttribute; + } = {}; + private polylineColorBuffer: { + [polylineIndex: number]: BufferAttribute; + } = {}; + + private polylinegemo: { + [polylineIndex: number]: Geometry; + } = {}; + + + private createGlyphTexture(): GlyphTexture { + let canvas = document.createElement('canvas'); + canvas.width = MAX_CANVAS_DIMENSION; + canvas.height = FONT_SIZE; + let ctx = canvas.getContext('2d'); + ctx.font = 'bold ' + FONT_SIZE * 0.75 + 'px roboto'; + ctx.textBaseline = 'top'; + ctx.fillStyle = LABEL_BACKGROUND; + ctx.rect(0, 0, canvas.width, canvas.height); + ctx.fill(); + ctx.fillStyle = LABEL_COLOR; + let spaceOffset = ctx.measureText(' ').width; + // For each letter, store length, position at the encoded index. + let glyphLengths = new Float32Array(NUM_GLYPHS); + let glyphOffset = new Float32Array(NUM_GLYPHS); + let leftCoord = 0; + for (let i = 0; i < NUM_GLYPHS; i++) { + let text = ' ' + String.fromCharCode(i); + let textLength = ctx.measureText(text).width; + glyphLengths[i] = textLength - spaceOffset; + glyphOffset[i] = leftCoord; + ctx.fillText(text, leftCoord - spaceOffset, 0); + leftCoord += textLength; + } + const tex = util.createTexture(canvas); + return { texture: tex, lengths: glyphLengths, offsets: glyphOffset }; + } + private processLabelVerts(pointCount: number) { + let numTotalLetters = 0; + this.labelVertexMap = []; + for (let i = 0; i < pointCount; i++) { + const label = '13'; + let vertsArray: number[] = []; + for (let j = 0; j < label.length; j++) { + for (let k = 0; k < VERTICES_PER_GLYPH; k++) { + vertsArray.push(numTotalLetters * VERTICES_PER_GLYPH + k); + } + numTotalLetters++; + } + this.labelVertexMap.push(vertsArray); + } + this.totalVertexCount = numTotalLetters * VERTICES_PER_GLYPH; + } + private createColorBuffers(pointCount: number) { + this.pickingColors = new Float32Array( + this.totalVertexCount * RGB_ELEMENTS_PER_ENTRY + ); + this.renderColors = new Float32Array( + this.totalVertexCount * RGB_ELEMENTS_PER_ENTRY + ); + for (let i = 0; i < pointCount; i++) { + let color = new Color(i); + this.labelVertexMap[i].forEach((j) => { + this.pickingColors[RGB_ELEMENTS_PER_ENTRY * j] = color.r; + this.pickingColors[RGB_ELEMENTS_PER_ENTRY * j + 1] = color.g; + this.pickingColors[RGB_ELEMENTS_PER_ENTRY * j + 2] = color.b; + this.renderColors[RGB_ELEMENTS_PER_ENTRY * j] = 1; + this.renderColors[RGB_ELEMENTS_PER_ENTRY * j + 1] = 1; + this.renderColors[RGB_ELEMENTS_PER_ENTRY * j + 2] = 1; + }); + } + } + getPosition(points, epoch) { + console.log("traceline", this.instanceId) + const ds = new DataSet(points, this.instanceId) + // projection == null ? null : this.projection.projectionComponents; + const newPositions = this.generatePointPositionArray( + ds, epoch + ); + return newPositions + } + generatePointPositionArray( + ds: DataSet, + epoch: number + ): Float32Array { + if (ds == null) { + return null; + } + const xScaler = scaleLinear(); + const yScaler = scaleLinear(); + let zScaler = null; + { + // Determine max and min of each axis of our data. + const xExtent = extent( + ds.points, + (p, i) => ds.points[i].DVI_projections[epoch][0] + ); + const yExtent = extent( + ds.points, + (p, i) => ds.points[i].DVI_projections[epoch][1] + ); + const range = [ + -SCATTER_PLOT_CUBE_LENGTH / 2, + SCATTER_PLOT_CUBE_LENGTH / 2, + ]; + xScaler.domain(xExtent).range(range); + yScaler.domain(yExtent).range(range); + // if (projectionComponents[2] != null) { + const zExtent = extent( + ds.points, + (p, i) => ds.points[i].projections['tsne-2'] + ); + zScaler = scaleLinear(); + zScaler.domain(zExtent).range(range); + // } + // } + const positions = new Float32Array(ds.points.length * 3); + let dst = 0; + ds.points.forEach((d, i) => { + positions[dst++] = xScaler( + ds.points[i].DVI_projections[epoch][0] + ); + positions[dst++] = yScaler( + ds.points[i].DVI_projections[epoch][1] + ); + positions[dst++] = 0; + }); + if (zScaler) { + dst = 2; + ds.points.forEach((d, i) => { + positions[dst] = zScaler( + 0 + ); + dst += 3; + }); + } + return positions; + } + } + private createTriangles() { + + this.polylinegemo = [] + updateStateForInstance(this.instanceId, {selectedList:this.selectedIndexList}) + updateStateForInstance(this.instanceId, {scene:this.scene}) + // this.state.selectedList = this.selectedIndexList + // this.state.scene = this.scene + + if (this.worldSpacePointPositions == null) { + return; + } + let len = this.epoches[1] - this.epoches[0] + if (!getWorldSpacePointPositions(this.instanceId)) { + updateStateForInstance(this.instanceId, {worldSpacePointPositions:[]}) + // getWorldSpacePointPositions(this.instanceId) = [] + } + // let flag = true + + // for (let i = 1; i < window.worldSpacePointPositions.length; i++) { + // if (!window.worldSpacePointPositions[i]) { + // flag = false + // break + // }else{ + // flag = true + // } + // } + // if (!flag) { + // Make a copy of the worldSpacePointPositions array + let updatedPositions = getWorldSpacePointPositions(this.instanceId) + +// Modify the copied array at the specific index + updatedPositions[getIteration(this.instanceId)] = this.worldSpacePointPositions; + +// Update the state with the modified array + updateStateForInstance(this.instanceId, { worldSpacePointPositions: updatedPositions }); + + // getWorldSpacePointPositions(this.instanceId)[this.state.iteration] = this.worldSpacePointPositions + // } + const pointCount = + this.worldSpacePointPositions?.length / XYZ_ELEMENTS_PER_ENTRY; + this.glyphTexture = this.createGlyphTexture(); + this.uniforms = { + texture: { type: 't' }, + picking: { type: 'bool' }, + }; + this.material = new ShaderMaterial({ + uniforms: this.uniforms, + transparent: true, + vertexShader: VERTEX_SHADER, + fragmentShader: FRAGMENT_SHADER, + }); + this.processLabelVerts(pointCount); + this.createColorBuffers(pointCount); + let positionArray = new Float32Array( + this.totalVertexCount * XYZ_ELEMENTS_PER_ENTRY + ); + this.positions = new BufferAttribute( + positionArray, + XYZ_ELEMENTS_PER_ENTRY + ); + let posArray = new Float32Array( + this.totalVertexCount * XYZ_ELEMENTS_PER_ENTRY + ); + let colorsArray = new Float32Array( + this.totalVertexCount * RGB_ELEMENTS_PER_ENTRY + ); + let positionObject = new BufferAttribute(posArray, 2); + let colors = new BufferAttribute(colorsArray, RGB_ELEMENTS_PER_ENTRY); + this.geometry = new BufferGeometry(); + this.geometry.addAttribute('posObj', positionObject); + this.geometry.addAttribute('position', this.positions); + this.geometry.addAttribute('color', colors); + let lettersSoFar = 0; + + this.linegeometry = new BufferGeometry() + this.polylines = []; + + //加2000个顶点,范围为-1到1 + let start = this.epoches[0] + let end = this.epoches[1] + + let getPos = this.getPosition(getDVIDataList(this.instanceId)[end], start) + let getPos2 = this.getPosition(getDVIDataList(this.instanceId)[end], end) + let posArr = [] + for (let i = start; i <= end; i++) { + let getPos = this.getPosition(getDVIDataList(this.instanceId)[end], i) + posArr.push(getPos) + } + let drawed = [] + let selectedLen + // if (selectedLen !== this.selectedIndexList?.length ) { + // let count = 0,des = 0 + selectedLen = this.selectedIndexList?.length + + for (let i = 0; i < pointCount; i++) { + + if (this.selectedIndexList?.length && this.selectedIndexList.indexOf(i) !== -1) { + let color = getDVIDataList(this.instanceId)[2][i].color + var material = new LineBasicMaterial({ color: color, linewidth: 3 }); + // material.resolution.set(window.innerWidth, window.innerHeight); + const linegeometry = new Geometry() + let pointll = [] + + if (getWorldSpacePointPositions(this.instanceId) && getWorldSpacePointPositions(this.instanceId).length > 1 && getWorldSpacePointPositions(this.instanceId)[this.epoches[1]] && getIsAnimating(this.instanceId)) { + for (let wlen = this.epoches[0]; wlen <= posArr.length; wlen++) { + const x = getWorldSpacePointPositions(this.instanceId)[wlen][i * 3] + const y = getWorldSpacePointPositions(this.instanceId)[wlen][i * 3 + 1] + pointll.push(new Vector3(x, y, 0)) + drawed.push(i) + } + const curve = new SplineCurve(pointll); + let points = curve.getPoints(100) + var line = new CatmullRomCurve3(pointll); + // this.linesContainer.push(line + // let points = line.getPoints(100) + linegeometry.setFromPoints(points) + var linen = new Line(linegeometry, material); + if (!getLineGeomertryList(this.instanceId)) { + updateStateForInstance(this.instanceId, {lineGeomertryList:[]}) + } + this.polylines.push(linen); + + updateStateForInstance(this.instanceId, {lineGeomertryList:getLineGeomertryList(this.instanceId).push(linen)}) + // getLineGeomertryList(this.instanceId).push(linen) + this.scene.add(linen); + } + + } + } + + for (let i = 0; i < pointCount; i++) { + let leftOffset = 0; + leftOffset += this.glyphTexture.lengths[105]; + // Determine length of word in pixels. + leftOffset /= -2; // centers text horizontally around the origin + let letterWidth = this.glyphTexture.lengths[105]; + let scale = FONT_SIZE; + let right = (leftOffset + letterWidth) / scale; + let triRight = (leftOffset + this.glyphTexture.lengths[115]) / scale; + let left = leftOffset / scale; + let top = 40 / scale; + + if (this.selectedIndexList.indexOf(Math.floor(i / 2)) === -1) { + //矩形 + // positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 0, left, 0); + // positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 1, right / 20, 0); + // positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 2, left, 10 / scale); + // positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 3, left, 10 / scale); + // positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 4, right / 20, 0); + // positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 5, right / 20, 10 / scale); + } else { + //三角形 + i === this.selectedIndexList[0] + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 0, left, 0); + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 1, triRight, 20 / scale); + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 2, left, top); + } + if (this.selectedIndexList.length == 1 && this.selectedIndexList.indexOf(Math.floor(i / 2)) !== -1) { + console.log('reset') + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 0, left, 0); + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 1, triRight * 2, 0); + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 2, left, top); + } + + lettersSoFar++; + leftOffset += letterWidth; + } + + for (let i = 0; i < pointCount; i++) { + const p = util.vector3FromPackedArray(this.worldSpacePointPositions, i); + this.labelVertexMap[i].forEach((j) => { + this.positions.setXYZ(j, p.x, p.y, p.z); + }); + } + this.pointsMesh = new Mesh(this.geometry, this.material); + this.pointsMesh.frustumCulled = false; + console.log(this.geometry, this.pointsMesh) + this.scene.add(this.pointsMesh); + } + private colorLabels(pointColors: Float32Array) { + if ( + this.geometry == null || + pointColors == null + ) { + return; + } + const colors = this.geometry.getAttribute('color') as BufferAttribute; + (colors as any).setArray(this.renderColors); + const n = pointColors.length / XYZ_ELEMENTS_PER_ENTRY; + let src = 0; + for (let i = 0; i < n; ++i) { + const c = new Color( + pointColors[src], + pointColors[src + 1], + pointColors[src + 2] + ); + const m = this.labelVertexMap[i].length; + for (let j = 0; j < m; ++j) { + colors.setXYZ(this.labelVertexMap[i][j], c.r, c.g, c.b); + } + src += RGB_ELEMENTS_PER_ENTRY; + } + colors.needsUpdate = true; + } + setScene(scene: Scene) { + this.scene = scene; + } + dispose() { + console.log('this.polylinegemo',this.polylines) + for (let i = 0; i < this.polylines?.length; i++) { + this.scene.remove(this.polylines[i]); + this.polylines[i].geometry.dispose(); + } + if (this.pointsMesh) { + if (this.scene) { + this.scene.remove(this.pointsMesh); + } + this.pointsMesh = null; + } + if (this.geometry) { + this.geometry.dispose(); + this.geometry = null; + } + if (this.linesContainer) { + // this.linesContainer.forEach((item:any) => { + // // item?.dispose() + // }); + } + if (this.linegeometry) { + this.linegeometry.dispose(); + this.linegeometry = null; + } + if (this.glyphTexture != null && this.glyphTexture.texture != null) { + this.glyphTexture.texture.dispose(); + this.glyphTexture.texture = null; + } + } + onPickingRender(rc: RenderContext) { + if (this.geometry == null) { + this.createTriangles() + } + if (this.geometry == null) { + return; + } + this.material.uniforms.texture.value = this.glyphTexture.texture; + this.material.uniforms.picking.value = true; + const colors = this.geometry.getAttribute('color') as BufferAttribute; + (colors as any).setArray(this.pickingColors); + colors.needsUpdate = true; + } + onRender(rc: RenderContext, instanceId: number) { + this.instanceId = instanceId + + + if (this.geometry == null) { + this.createTriangles() + } + if (this.geometry == null) { + return; + } + this.colorLabels(rc.pointColors); + this.material.uniforms.texture.value = this.glyphTexture.texture; + this.material.uniforms.picking.value = false; + const colors = this.geometry.getAttribute('color') as BufferAttribute; + (colors as any).setArray(this.renderColors); + colors.needsUpdate = true; + } + onPointPositionsChanged(newPositions: Float32Array) { + this.worldSpacePointPositions = newPositions; + this.dispose(); + } + // setLabelStrings(labelStrings: string[]) { + // this.labelStrings = labelStrings; + // this.dispose(); + // } + setSelectedPoint(selectedIndexList: number[]) { + this.selectedIndexList = selectedIndexList + } + setEpoches(epoches: number[]) { + this.epoches = epoches + } + onResize(newWidth: number, newHeight: number) { } +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizerTriangles.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizerTriangles.ts new file mode 100644 index 0000000000000000000000000000000000000000..cd67ba04577e9da874ee057abb83dc7473fbbb1e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/scatterPlotVisualizerTriangles.ts @@ -0,0 +1,417 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import{DoubleSide, BufferAttribute, Scene,Color,Mesh,BufferGeometry,ShaderMaterial, Texture, CanvasTexture, PlaneGeometry, MeshPhongMaterial} from 'three'; + +import { RenderContext,LabelRenderParams } from './renderContext'; + +import { ScatterPlotVisualizer } from './scatterPlotVisualizer'; +import * as util from './util'; +import { getBackGroundMesh, updateStateForInstance , getTestingData, getCustomSelection, getUnLabelData} from './globalState'; +declare global { + interface Window { + selectedList: any, + } +} +const FONT_SIZE = 80; +const ONE_OVER_FONT_SIZE = 1 / FONT_SIZE; +const LABEL_SCALE = 2.2; // at 1:1 texel/pixel ratio +const LABEL_COLOR = 'black'; +const LABEL_BACKGROUND = 'white'; +const MAX_CANVAS_DIMENSION = 8192; +const NUM_GLYPHS = 256; +const RGB_ELEMENTS_PER_ENTRY = 3; +const XYZ_ELEMENTS_PER_ENTRY = 3; +const UV_ELEMENTS_PER_ENTRY = 2; +const VERTICES_PER_GLYPH = 2 * 3; // 2 triangles, 3 verts per triangle +/** + * Each label is made up of triangles (two per letter.) Each vertex, then, is + * the corner of one of these triangles (and thus the corner of a letter + * rectangle.) + * Each has the following attributes: + * posObj: The (x, y) position of the vertex within the label, where the + * bottom center of the word is positioned at (0, 0); + * position: The position of the label in worldspace. + * vUv: The (u, v) coordinates that index into the glyphs sheet (range 0, 1.) + * color: The color of the label (matches the corresponding point's color.) + * wordShown: Boolean. Whether or not the label is visible. + */ +const VERTEX_SHADER = ` + attribute vec2 posObj; + attribute vec3 color; + varying vec2 vUv; + varying vec3 vColor; + + void main() { + vUv = uv; + vColor = color; + + // Rotate label to face camera. + + vec4 vRight = vec4( + modelViewMatrix[0][0], modelViewMatrix[1][0], modelViewMatrix[2][0], 0); + + vec4 vUp = vec4( + modelViewMatrix[0][1], modelViewMatrix[1][1], modelViewMatrix[2][1], 0); + + vec4 vAt = -vec4( + modelViewMatrix[0][2], modelViewMatrix[1][2], modelViewMatrix[2][2], 0); + + mat4 pointToCamera = mat4(vRight, vUp, vAt, vec4(0, 0, 0, 1)); + + vec2 scaledPos = posObj * ${ONE_OVER_FONT_SIZE} * ${LABEL_SCALE}; + + vec4 posRotated = pointToCamera * vec4(scaledPos, 0, 1); + vec4 mvPosition = modelViewMatrix * (vec4(position, 0) + posRotated); + gl_Position = projectionMatrix * mvPosition; + }`; +const FRAGMENT_SHADER = ` + uniform sampler2D texture; + uniform bool picking; + varying vec2 vUv; + varying vec3 vColor; + + void main() { + if (picking) { + gl_FragColor = vec4(vColor, 1.0); + } else { + vec4 fromTexture = texture2D(texture, vUv); + gl_FragColor = vec4(vColor, 1.0) * fromTexture; + } + }`; +type GlyphTexture = { + texture: Texture; + lengths: Float32Array; + offsets: Float32Array; +}; +/** + * Renders the text labels as 3d geometry in the world. + */ +export class scatterPlotVisualizerTriangles implements ScatterPlotVisualizer { + private scene: Scene; + // private labelStrings: string[]; + private geometry: BufferGeometry; + private worldSpacePointPositions: Float32Array; + private pickingColors: Float32Array; + private renderColors: Float32Array; + private material: ShaderMaterial; + private uniforms: any; + private pointsMesh: Mesh; + private positions: BufferAttribute; + private totalVertexCount: number; + private labelVertexMap: number[][]; + private glyphTexture: GlyphTexture; + private selectedIndexList: number[] + private unLabelDataIndexList: number[] + private labels: LabelRenderParams; + private instanceId: number; + private state: any; + private createGlyphTexture(): GlyphTexture { + let canvas = document.createElement('canvas'); + canvas.width = MAX_CANVAS_DIMENSION; + canvas.height = FONT_SIZE; + let ctx = canvas.getContext('2d'); + ctx.font = 'bold ' + FONT_SIZE * 0.75 + 'px roboto'; + ctx.textBaseline = 'top'; + ctx.fillStyle = LABEL_BACKGROUND; + ctx.rect(0, 0, canvas.width, canvas.height); + ctx.fill(); + ctx.fillStyle = LABEL_COLOR; + let spaceOffset = ctx.measureText(' ').width; + // For each letter, store length, position at the encoded index. + let glyphLengths = new Float32Array(NUM_GLYPHS); + let glyphOffset = new Float32Array(NUM_GLYPHS); + let leftCoord = 0; + for (let i = 0; i < NUM_GLYPHS; i++) { + let text = ' ' + String.fromCharCode(i); + let textLength = ctx.measureText(text).width; + glyphLengths[i] = textLength - spaceOffset; + glyphOffset[i] = leftCoord; + ctx.fillText(text, leftCoord - spaceOffset, 0); + leftCoord += textLength; + } + const tex = util.createTexture(canvas); + return { texture: tex, lengths: glyphLengths, offsets: glyphOffset }; + } + private processLabelVerts(pointCount: number) { + let numTotalLetters = 0; + this.labelVertexMap = []; + for (let i = 0; i < pointCount; i++) { + const label = '13'; + let vertsArray: number[] = []; + for (let j = 0; j < label.length; j++) { + for (let k = 0; k < VERTICES_PER_GLYPH; k++) { + vertsArray.push(numTotalLetters * VERTICES_PER_GLYPH + k); + } + numTotalLetters++; + } + this.labelVertexMap.push(vertsArray); + } + this.totalVertexCount = numTotalLetters * VERTICES_PER_GLYPH; + } + private createColorBuffers(pointCount: number) { + this.pickingColors = new Float32Array( + this.totalVertexCount * RGB_ELEMENTS_PER_ENTRY + ); + this.renderColors = new Float32Array( + this.totalVertexCount * RGB_ELEMENTS_PER_ENTRY + ); + for (let i = 0; i < pointCount; i++) { + let color = new Color(i); + this.labelVertexMap[i].forEach((j) => { + this.pickingColors[RGB_ELEMENTS_PER_ENTRY * j] = color.r; + this.pickingColors[RGB_ELEMENTS_PER_ENTRY * j + 1] = color.g; + this.pickingColors[RGB_ELEMENTS_PER_ENTRY * j + 2] = color.b; + this.renderColors[RGB_ELEMENTS_PER_ENTRY * j] = 1; + this.renderColors[RGB_ELEMENTS_PER_ENTRY * j + 1] = 1; + this.renderColors[RGB_ELEMENTS_PER_ENTRY * j + 2] = 1; + }); + } + } + addbackgroundImg(imgUrl: string) { + //移除上一个画布 + if (getBackGroundMesh(this.instanceId)) { + this.scene.remove(getBackGroundMesh(this.instanceId)) + } + if (!imgUrl) { + return + } + // 2,使用canvas画图作为纹理贴图 + // 先使用canvas画图 + let canvas = document.createElement('canvas'); + canvas.width = 200; + canvas.height = 200; + var ctx = canvas.getContext("2d"); + var img = new Image(); + img.src = imgUrl; + img.crossOrigin = "anonymous"; + img.onload = () => { + ctx.drawImage(img, 0, 0, 200, 200); + let texture = new CanvasTexture(canvas); + // texture.needsUpdate = true; // 不设置needsUpdate为true的话,可能纹理贴图不刷新 + var plane_geometry = new PlaneGeometry(2, 2); + var material = new MeshPhongMaterial({ + // color:0x11ff22, + map: texture, + side: DoubleSide + }); + updateStateForInstance(this.instanceId, {backgroundMesh:new Mesh(plane_geometry, material)}) + // getBackgroundMesh(this.instanceId) = new Mesh(plane_geometry, material); + this.scene.add(getBackGroundMesh(this.instanceId)); + } + } + createTriangles() { + // if (window.sceneBackgroundImg[window.iteration]) { + // this.addbackgroundImg('data:image/png;base64,' + window.sceneBackgroundImg[window.iteration]) + // } + // this.addbackgroundImg('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD4AAAAwCAYAAABJy8k0AAAAAXNSR0IArs4c6QAAD4dJREFUaEOtWmlzI8l1zEaf6MYNksO5Q5IjFKH/bCl8/Az50A/wrqVPki1rY7XrmZ0ZDgni6rvhyFdV3dUAyOGuzA0uQHAIMivz5bvK+fVvvzocwA/9f3k4QL+Ig/nuQV7Vr6vHBgc4R4/qn6vv82f52cij+lqeN+a1A+pDg4Zfy2sNanneoK4bVPJYq5+1/kYHDhwHGAwGcAcDBL6HwPPka98dwPc9DACUVYW0qFDWNYqqlvfl3+AAcH79L19pbF8ATjj6LzAHYIALIL7Z0eMxcHUAfeACkj/XqAMQ4DyAukbFr+sajT5Mwc7fYwH3XRdh4At4b+DCdQcI5bkjgNO8RFaWKKsaRVnJwT8CXINU3Mlxq9+tmdOMEricoLDeAe9U0jErCjnwxPk2GiRfExYU01RCzYNoDqjqWj2v5bd0fwN/D9l2HMWw72EY+ALedz14riOvha4rP5/mhYBPywpFUcr7EssDjD8CXDNvpP504ErO3QFQ5lrimmXFOA+lQVXzADRwHrihWwN3HEdkHvk+ojAQ8GTd9QYIXA9h4AkpWV5in2nwRY7csH5e6l8GToaNlA3jNtP8O21p809XwKkCSGzziS1z/ntKWxhvamFblGAMR8NXUnfgea4AH0YEHghYsh24LqIgEGVkRYk0y7FNc+yyXL5mCAjjSkl2jP/twPlu5mBsMzMGR8A2cCV1zfKJ1DvDlPh0OuBkOolCAR8GASIxOhdhGMB1HJRlhW2WY5NmAn6fKdYt4A+4uYlt61EB6ru3UYD6Z+oYzwE3KhBZa1Pjv1MS76Reku1ayZ4/Y38o4IDveYjDAPEwRBKGGGrJ09zC0BcPoIJ2WYH7XSrg92mGLC9+KnCjCCtNGdc/A9xI/Did9WWugTON0fwquvqx1LWra+BMYWQ7GYaII/VJyQ9DSp5mN5CD22cl7rY7rHd7Ac+DcH7DdKYMu5+/j928x7zJ6V0+N3n6HONdbKt4NTLvUplmmoB1XDMODeNGPZLKNOiBo/I3wY7I+DBqJW9cPvQGKOsD0qzA3XaPu80Wm32KXSrAv1bC7BUoZ9LY/yNwA/g4xuV1OrrO33R2U3QYqR+YyuBIvlbGFmI8JPhIJM9HSj7yXQS+L+mLsb3a7nGzWmO9p9zzHwvcPhCbbZXLTSHzUIwrECqfn6YyS+qSzoyr0z1UncAPVmTi6AQeqPhWwIci+bEcQICIed33UFeNgF1td/h8t8H9bi8HIYy3JaYdp2elbrv/TwNuytfTik2ZmF2xGcZVceTg4Bws4C6Goa+BRxjHQyRxhIlm3uR1HuD9VgG/ud/gfrPDZp/B+c2/fn2w63GpznRdbNfrxlftXN3W37pmfwrjAu4oldluTqkrR1eMV1IZdq5+YMUG7ehRILFNlpNkKKDHcYTRMEAchsJ4WVfYbPa422b4tN5gdb8V1k+BHzUitlmZ5+1rVoPS1uWPpDNK3KQxxrd6ruKYedxUanRzI/VGNN60UqfMBbjvYUQn1/IeJzEmAjrCKA6RRBGiwENeVVgT+CbF580Gn1cbiffO3JSpn3RgXwJ+0ok9Clx3XrpUBQHqXH7clVWVqtUlj1tJfEBrcw7SiJBtOvooHgrTEy33cRyK9Ie+j6KqBKgAX29wc7eW1PY04GfbVFPp2bncakftAsbU5AakDbztxvrNSWtuInXWayaHH6QwYSoTdoehAB5R6nGkDC4ZYhrHiKNADm+1YXxv5fPTao3b9fbpwE2HdlyP23FuKroTV/8S8LZUVc2JFC5VjZI613Qb3lmGEji7MQKno0+SobBO4LE8hpgmiUieFd56u8f723vcrrb4sFpLWmsLGO1nvRawBWk5/OPArTK17d9Va6oGDar1lMqMnYrO2dKNaVmbwsVm3C5XGd+e50m6Mi4uhkbAcgBK5rMkxjSO4HsDrNMU7z7d4+PdBh/v+GgDt6cc+rld2DyN8UeAa/CPARcXlwFEx3jXmXUpjaUqmxIy3jq5SJ2xTuAxpqMhFkmIyB9gm1Z4d3uP97cb/HC7wg+fV7pWb43ty2XrOcbNJIZpyri7eLGKg7Y9NcOGhxhvgesDqGtOdhqJcWNwrbFJja7SF9MZ41qAJyqnE/gy8THyB9gVDd6vU7z/tML3N3d49+knADd53s79NnDmXMnTZ4AbuStZn0qdwCl1YV03KYfW2BR0ujr7bppYC5zgCTaJBfiUsifwoYfEc5A3wO2+xF8/3eG7j3f4/tPn0+5Ml+RHDYseO1n1er+p6Q8X+8DNyKmLcwJXeVzV5SbGW+AErSWvgHcJjXlc9eCRxLikMUqejI8U05M4xmwcYx4OEA7U2GxX1Pj24xrffLjFtx9vngr8aO520s31U5qAskdUetZmems1VdUjpi8CN2lTpTRvABk4jCR1MXcr8Exfk3GE2SiWzwWNLnTga2fM6gZ/vdnhLx9u8d0P54BbJteWrGfqdsO4GTI+mNasIeOPBc6WUo7QyuOu60j3ZRoTHsBE5E2Wh5hPx1iOYixjH6HLiaz6qBrg3TrH/3y4wbf/+wnO+bn6kcnZw752uqId0WK2V6u3RtfN3jrgZpb+uNQZ712MKwA+gUsPrk0tDjFKYswJdjbC5WyMxSjCJBjA4w8QuZ4C32U1/vz+M/78/ceHgZtU9lDJ2p/TnQ4k2rGTMK6HjHqM9FSpK+DdKoFVeuANMAxZpqoWVGQ+SjToKa6nCRaabTkpAS4DZaRVg//6cIf//q5lXHc/Z2VuGVtvvHTKuJqzW7lcz+Za4LpwMfPzL5lbUanNR1euOgh9VzPOUjUSJ19MR1jOxnixmOJyGmPiq0ZGmWKt0XtipN98WuOP39/A+fvfftXBbX+HtUKynNywbz8a5u1xcx98tzoy3Vm7OJCNycOuTuD2oJFLBAI3HRmdfDkh6Amu52M8v5jgIg4QtKV9iqbJVRIcxGgOLt7fZ/gTY7wF3sLvpiw9oA8egGLeAOckxi5k7J2ZbFJMOyqro4eBl1UjnVWP8QFkmEjgLFaWY0p8jMv5BC+XMzybDTENXG1o3JVtUddbYdx1x3AGMdaZgz++E8b/w2yHtKJO2W5FbZlcb3hhrZR+HHBOXExaU+NkKWC456prlCX3Zp3UyTinLuzIZqNEjOxyPsXz5RQvyXYSSt6WdeYhRV1vUJZ7KZZ8fwjPW6JBiD+9u9XAH2K7l8a005vjMaZjTWePl4gyXeV/7QZF9+PtAOIx4BXKUg0fzQe7siT0pTxdThI8m89wfTHHy4spns9jTEO1JT0cSjTNPcqSwDPUdYXBgJ3bM7hegm8+bhVwe15vu6jZ1LULQ/MXnGxe+mtjk9b+FuBc8TLGe8AdB8kwkJbzaj7Gi+UMLy4XeHUxw7NxiMhTVd7hsENRrFCUW1RlgarK4TgeRqNL+P4lfrivj4HbMu9vKNtZnAVah31b3p4wbq2Fze6M0jUtqIyeHpA6gecEXot7yJFzScg0thiPcLWY4NXlAq+fLfDmYoZp5MJ3yDYlfo88J+O5fFZVIXIfxhMk8Rtsy+SJwM8wbINW1Vt3UaBl3OrW5DXdkz8FOGdljHEyLgbJlRGBj4a4mo7wfDkT4G8JfDFCLKbGAeUWef4ZZblTwKsClZZ7ECSYTn8BJ7joXF3evF2E20vDx/J45+hngZsYbwsYM5RQlZu68cCUpdfClrkZ4DJihhorcwAxHw/xTAxthtdXC7y9XuDFZIjIG+CADFW5QpreSmwrtvVjXWLg+FguXyMZv+0D71VpxsFtaT/K/BnGbXPTa2I1jTnak0n/reJZuTplzhsMZFBdBWFXFgQ+LiYxrhdTiW2R+eUcV6MA4cBB1WxQFjdI07UGbsAr5imbyeQSy+XfHQM3Nx5O21Bb2udlfnoVpLcf1wOJh4ErWZt0ZoAztZFxj5cAwhBXswTXWuZvrpd4dTXDMnDhOgdU1QpZ9hF5tkMhjKcW8zmapsJwOMPV5a8UcNvWewsDu2g5w7aJbZ052ysh5j3slXA7d29vP5gdmbn5oIaLMoCoDjIPl/iUspUyd6UjY7FCN395tcSb6wXeLKcY+yxRSpTlHdL0BpkNvCB4fuaomwq+F+Hq6pfsx78+UHrqo3/byU5jx9tU4+DHoI/fwwwa1YpYV26tsytXV4sEG3itgJeqkKF/cJzMEvV6McGLyzleXl3g51czvJ4n8F3+FXtJYfv0Dlm2RVFkKAu+Rub3Ot5LOM4Ay+UrOP/wb/95YHzxAs7j/ff5W1EPHUCPde3m52t1c62rX7kROGNcdWiQnfd8nOD5YoaXl3O8ur7Azy9nuJ6EcCWNEewd9uk9snSDvNijLFIUBE/G5QByKa4n4yWcf/rd7w9qyKc6oZNbTl+o1Pjt41tP3XZFb2aOgJu2VC3+9WfVKKmbklUD5/00Ojp78Msp43subs74fnsxwzL2MHCo1DXynFK/R0rg+Q45ZV7s9WOGqmKOrxCGCZx//t0fDmpLyZOvVXn5xNjuLvh1xnbcwclS/wi4GTYeX+STZYIAZ4wXKFiy1jXvdmEcRbiaj/DiYo5XV0u8fX6B18sJpgGvAjElrpFnhvF7ZPkeeU7g3QGo8rXAYBCQ8T+IbUle1RtKswnpg+jqVRMSpv/mz5/efOo8Q8W3inGTv9tFoYlxvTkxjFPqeVnjUDdwXReTJMQ18/flHG8J/MUSr2YjRDJeYiemGN/vyfgaWb5FnjHGWb6mWvoETrmjAy6bW51OGpl1ddes+vM1+yqnOgxzo/F8HdBd6TwPXK+DaW4t47WA5o1E/m7eZOI8jYXLS1Zr10v84tkC19OhxDdQSVOSZSvs9zQ4Pt8hF5NjnHess3wlERLj7ZZEr2pFivpG4UNurvJAx3RPHSZU2u1rd7GvV5+be20asAAn88J2I8D5O5IokIHDs4UBrhz9chTo3tsAv8VuR8b5ydKVJpei0PFOo2PTQiN3/vHff69Dutt+mlgzAwXK2BjWY4DPFTlGOXat3jUm5gaEBqyNjUOItCqkLeWSkFc7rjhlWU7xWvL3BX62nGA2lDzG67rSmGSZAr7fr5GR9VwxTqNTzO9RVjkOTaWAHxcw0kHpWwniwD1m+7leHUk7aNc6aF9sv6cWJ2qUZJuaKVVZphIw05eROQ+IV7Y4W7timXoxE2P72fMLvJyOMAqM7xD4Cml2i/1uhZ2Jc5H6DkWu05ouZuqmVnn8hCl2teY+KUtGuZV85rLukft3N2T0JYN2wqkGneZqtvKS/p1VmbpomWdFdRTfuj') + + if (!getCustomSelection(this.instanceId)) { + updateStateForInstance(this.instanceId, {customSelection:[]}) + // this.state.customSelection = [] + } else { + + function func(a, b) { + return a - b; + } + // this.state.customSelection.sort(func) + // Create a new sorted array + const sortedSelection = getCustomSelection(this.instanceId).sort(func); + +// Update the state with the new sorted array + updateStateForInstance(this.instanceId, { customSelection: sortedSelection }); + + console.log('cuscus', getCustomSelection(this.instanceId)); + } + if (!this.unLabelDataIndexList) { + this.unLabelDataIndexList = [] + } + updateStateForInstance(this.instanceId, {selectedList:this.selectedIndexList}) + // this.state.selectedList = this.selectedIndexList + if (this.worldSpacePointPositions == null) { + return; + } + const pointCount = + this.worldSpacePointPositions?.length / XYZ_ELEMENTS_PER_ENTRY; + this.glyphTexture = this.createGlyphTexture(); + this.uniforms = { + texture: { type: 't' }, + picking: { type: 'bool' }, + }; + this.material = new ShaderMaterial({ + uniforms: this.uniforms, + transparent: true, + vertexShader: VERTEX_SHADER, + fragmentShader: FRAGMENT_SHADER, + }); + this.processLabelVerts(pointCount); + this.createColorBuffers(pointCount); + let positionArray = new Float32Array( + this.totalVertexCount * XYZ_ELEMENTS_PER_ENTRY + ); + this.positions = new BufferAttribute( + positionArray, + XYZ_ELEMENTS_PER_ENTRY + ); + let posArray = new Float32Array( + this.totalVertexCount * XYZ_ELEMENTS_PER_ENTRY + ); + let colorsArray = new Float32Array( + this.totalVertexCount * RGB_ELEMENTS_PER_ENTRY + ); + let positionObject = new BufferAttribute(posArray, 2); + let colors = new BufferAttribute(colorsArray, RGB_ELEMENTS_PER_ENTRY); + this.geometry = new BufferGeometry(); + this.geometry.addAttribute('posObj', positionObject); + this.geometry.addAttribute('position', this.positions); + this.geometry.addAttribute('color', colors); + let lettersSoFar = 0; + console.log('selectedIndexList', this.selectedIndexList, this.glyphTexture) + for (let i = 0; i < pointCount * 2; i++) { + let leftOffset = 0; + leftOffset += this.glyphTexture.lengths[105]; + // Determine length of word in pixels. + leftOffset /= -2; // centers text horizontally around the origin + let letterWidth = this.glyphTexture.lengths[105]; + let scale = FONT_SIZE; + let right = (leftOffset + letterWidth) / scale; + let triRight = (leftOffset + this.glyphTexture.lengths[115]) / scale; + let left = leftOffset / scale; + let top = 40 / scale; + if (getUnLabelData(this.instanceId).indexOf(Math.floor(i / 2)) !== -1) { + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 0, left, left); + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 1, -left, left); + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 2, 0, top / 4); + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 0, left, left); + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 1, -left, left); + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 2, 0, top / 4); + } else if (getTestingData(this.instanceId).indexOf(Math.floor(i / 2)) !== -1) { + //juxing + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 0, left / 2, left / 2); + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 1, -left / 2, left / 2); + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 2, left / 2, -left / 2); + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 3, left / 2, -left / 2); + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 4, -left / 2, left / 2); + positionObject.setXY(lettersSoFar * VERTICES_PER_GLYPH + 5, -left / 2, -left / 2); + } + + lettersSoFar++; + leftOffset += letterWidth; + } + + for (let i = 0; i < pointCount; i++) { + const p = util.vector3FromPackedArray(this.worldSpacePointPositions, i); + this.labelVertexMap[i].forEach((j) => { + this.positions.setXYZ(j, p.x, p.y, p.z); + }); + } + this.pointsMesh = new Mesh(this.geometry, this.material); + this.pointsMesh.frustumCulled = false; + + this.scene.add(this.pointsMesh); + } + private colorLabels(pointColors: Float32Array) { + if ( + this.geometry == null || + pointColors == null + ) { + return; + } + const colors = this.geometry.getAttribute('color') as BufferAttribute; + (colors as any).setArray(this.renderColors); + const n = pointColors.length / XYZ_ELEMENTS_PER_ENTRY; + let src = 0; + for (let i = 0; i < n; ++i) { + const c = new Color( + pointColors[src], + pointColors[src + 1], + pointColors[src + 2] + ); + const m = this.labelVertexMap[i].length; + for (let j = 0; j < m; ++j) { + colors.setXYZ(this.labelVertexMap[i][j], c.r, c.g, c.b); + } + src += RGB_ELEMENTS_PER_ENTRY; + } + colors.needsUpdate = true; + } + setScene(scene: Scene) { + this.scene = scene; + } + /** Set the labels to rendered */ + setLabels(labels: LabelRenderParams) { + this.labels = labels; + } + dispose() { + if (this.pointsMesh) { + if (this.scene) { + this.scene.remove(this.pointsMesh); + } + this.pointsMesh = null; + } + if (this.geometry) { + this.geometry.dispose(); + this.geometry = null; + } + if (this.glyphTexture != null && this.glyphTexture.texture != null) { + this.glyphTexture.texture.dispose(); + this.glyphTexture.texture = null; + } + } + onPickingRender(rc: RenderContext) { + if (this.geometry == null) { + this.createTriangles() + } + if (this.geometry == null) { + return; + } + this.material.uniforms.texture.value = this.glyphTexture.texture; + this.material.uniforms.picking.value = true; + const colors = this.geometry.getAttribute('color') as BufferAttribute; + (colors as any).setArray(this.pickingColors); + colors.needsUpdate = true; + } + onRender(rc: RenderContext, instanceId:number) { + this.instanceId = instanceId + + + if (this.geometry == null) { + this.createTriangles() + } + if (this.geometry == null) { + return; + } + this.colorLabels(rc.pointColors); + this.material.uniforms.texture.value = this.glyphTexture.texture; + this.material.uniforms.picking.value = false; + const colors = this.geometry.getAttribute('color') as BufferAttribute; + (colors as any).setArray(this.renderColors); + colors.needsUpdate = true; + } + onPointPositionsChanged(newPositions: Float32Array) { + this.worldSpacePointPositions = newPositions; + this.dispose(); + } + // setLabelStrings(labelStrings: string[]) { + // this.labelStrings = labelStrings; + // this.dispose(); + // } + setSelectedPoint(selectedIndexList: number[]) { + this.selectedIndexList = selectedIndexList + } + setUnLabeledIndex(list: number[]) { + this.unLabelDataIndexList = list + } + onResize(newWidth: number, newHeight: number) { } +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/sptree.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/sptree.ts new file mode 100644 index 0000000000000000000000000000000000000000..57b015d0b2f8e01feb1799284d2451e8410bc6bb --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/sptree.ts @@ -0,0 +1,164 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export type Point = number[]; +export interface BBox { + center: Point; + halfDim: number; +} +/** A node in a space-partitioning tree. */ +export interface SPNode { + /** The children of this node. */ + children?: SPNode[]; + /** The bounding box of the region this node occupies. */ + box: BBox; + /** One or more points this node has. */ + point: Point; +} +/** + * A Space-partitioning tree (https://en.wikipedia.org/wiki/Space_partitioning) + * that recursively divides the space into regions of equal sizes. This data + * structure can act both as a Quad tree and an Octree when the data is 2 or + * 3 dimensional respectively. One usage is in t-SNE in order to do Barnes-Hut + * approximation. + */ +export class SPTree { + root: SPNode; + private masks: number[]; + private dim: number; + /** + * Constructs a new tree with the provided data. + * + * @param data List of n-dimensional data points. + * @param capacity Number of data points to store in a single node. + */ + constructor(data: Point[]) { + if (data.length < 1) { + throw new Error('There should be at least 1 data point'); + } + // Make a bounding box based on the extent of the data. + this.dim = data[0].length; + // Each node has 2^d children, where d is the dimension of the space. + // Binary masks (e.g. 000, 001, ... 111 in 3D) are used to determine in + // which child (e.g. quadron in 2D) the new point is going to be assigned. + // For more details, see the insert() method and its comments. + this.masks = new Array(Math.pow(2, this.dim)); + for (let d = 0; d < this.masks.length; ++d) { + this.masks[d] = 1 << d; + } + let min: Point = new Array(this.dim); + fillArray(min, Number.POSITIVE_INFINITY); + let max: Point = new Array(this.dim); + fillArray(max, Number.NEGATIVE_INFINITY); + for (let i = 0; i < data.length; ++i) { + // For each dim get the min and max. + // E.g. For 2-D, get the x_min, x_max, y_min, y_max. + for (let d = 0; d < this.dim; ++d) { + min[d] = Math.min(min[d], data[i][d]); + max[d] = Math.max(max[d], data[i][d]); + } + } + // Create a bounding box with the center of the largest span. + let center: Point = new Array(this.dim); + let halfDim = 0; + for (let d = 0; d < this.dim; ++d) { + let span = max[d] - min[d]; + center[d] = min[d] + span / 2; + halfDim = Math.max(halfDim, span / 2); + } + this.root = {box: {center: center, halfDim: halfDim}, point: data[0]}; + for (let i = 1; i < data.length; ++i) { + this.insert(this.root, data[i]); + } + } + /** + * Visits every node in the tree. Each node can store 1 or more points, + * depending on the node capacity provided in the constructor. + * + * @param accessor Method that takes the currently visited node, and the + * low and high point of the region that this node occupies. E.g. in 2D, + * the low and high points will be the lower-left corner and the upper-right + * corner. + */ + visit( + accessor: (node: SPNode, lowPoint: Point, highPoint: Point) => boolean, + noBox = false + ) { + this.visitNode(this.root, accessor, noBox); + } + private visitNode( + node: SPNode, + accessor: (node: SPNode, lowPoint?: Point, highPoint?: Point) => boolean, + noBox: boolean + ) { + let skipChildren: boolean; + if (noBox) { + skipChildren = accessor(node); + } else { + let lowPoint = new Array(this.dim); + let highPoint = new Array(this.dim); + for (let d = 0; d < this.dim; ++d) { + lowPoint[d] = node.box.center[d] - node.box.halfDim; + highPoint[d] = node.box.center[d] + node.box.halfDim; + } + skipChildren = accessor(node, lowPoint, highPoint); + } + if (!node.children || skipChildren) { + return; + } + for (let i = 0; i < node.children.length; ++i) { + let child = node.children[i]; + if (child) { + this.visitNode(child, accessor, noBox); + } + } + } + private insert(node: SPNode, p: Point) { + // Subdivide and then add the point to whichever node will accept it. + if (node.children == null) { + node.children = new Array(this.masks.length); + } + // Decide which child will get the new point by constructing a D-bits binary + // signature (D=3 for 3D) where the k-th bit is 1 if the point's k-th + // coordinate is greater than the node's k-th coordinate, 0 otherwise. + // Then the binary signature in decimal system gives us the index of the + // child where the new point should be. + let index = 0; + for (let d = 0; d < this.dim; ++d) { + if (p[d] > node.box.center[d]) { + index |= this.masks[d]; + } + } + if (node.children[index] == null) { + this.makeChild(node, index, p); + } else { + this.insert(node.children[index], p); + } + } + private makeChild(node: SPNode, index: number, p: Point): void { + let oldC = node.box.center; + let h = node.box.halfDim / 2; + let newC: Point = new Array(this.dim); + for (let d = 0; d < this.dim; ++d) { + newC[d] = index & (1 << d) ? oldC[d] + h : oldC[d] - h; + } + node.children[index] = {box: {center: newC, halfDim: h}, point: p}; + } +} +function fillArray(arr: T[], value: T): void { + for (let i = 0; i < arr.length; ++i) { + arr[i] = value; + } +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/standalone_lib.html b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/standalone_lib.html new file mode 100644 index 0000000000000000000000000000000000000000..9942723d338b0a732d8457b3dceddae78f2a8395 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/standalone_lib.html @@ -0,0 +1,305 @@ + + + + + + + + + + + + + + + + Embedding projector - visualization of high-dimensional data + + + +

    +

    Embedding Projector

    + +
    + +
    +

    Register An Account

    +
    +
    + + + + +
    +
    + + --> + + + + \ No newline at end of file diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/standalone_projector_config.json b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/standalone_projector_config.json new file mode 100644 index 0000000000000000000000000000000000000000..3c381de3e0c0e8994b4954e7ebefa56084b8a6df --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/standalone_projector_config.json @@ -0,0 +1,23 @@ +{ + "embeddings": [ + { + "tensorName": "CIFAR10 with images", + "tensorShape": [ + 10000, + 784 + ], + "tensorPath": "https://storage.googleapis.com/embedding-projector/data/mnist_10k_784d_tensors.bytes", + "metadataPath": "https://gist.githubusercontent.com/hzf1174/3a7e85af7d09ebdfafac3d4d3ba5e71f/raw/502ad8aedc40fab7e56db917c57b48eaf0bd28fa/metadata.csv", + "sprite": { + "imagePath": "cifar10.png", + "singleImageDim": [ + 32, + 32 + ] + } + } + ], + "modelCheckpointPath": "Demo datasets", + "DVIServerIP": "localhost", + "DVIServerPort": "5001" +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/styles.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/styles.ts new file mode 100644 index 0000000000000000000000000000000000000000..ba5c734dac5a05b322100211006adbe135fea46f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/styles.ts @@ -0,0 +1,182 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {registerStyleDomModule} from '../../../components/polymer/register_style_dom_module'; + +registerStyleDomModule({ + moduleName: 'vz-projector-styles', + styleContent: ` + :host { + --paper-input-container-label: { + font-size: 14px; + } + --paper-input-container-input: { + font-size: 14px; + } + /* TODO: Figure out why this doesn't work */ + --paper-dropdown-menu-input: { + font-size: 14px; + } + } + + paper-button { + background: #e3e3e3; + margin-left: 0; + text-transform: none; + } + + paper-dropdown-menu paper-item { + font-size: 13px; + } + + paper-tooltip { + max-width: 200px; + --paper-tooltip: { + font-size: 12px; + } + } + + paper-checkbox { + --paper-checkbox-checked-color: #880e4f; + } + + paper-toggle-button { + --paper-toggle-button-checked-bar-color: #880e4f; + --paper-toggle-button-checked-button-color: #880e4f; + --paper-toggle-button-checked-ink-color: #880e4f; + } + + paper-icon-button { + border-radius: 50%; + } + + paper-icon-button[active] { + color: white; + background-color: #880e4f; + } + + .slider { + display: flex; + align-items: center; + margin-bottom: 10px; + justify-content: space-between; + } + + .slider span { + width: 35px; + text-align: right; + } + + .slider label { + align-items: center; + display: flex; + } + + .help-icon { + height: 15px; + left: 2px; + min-width: 15px; + min-height: 15px; + margin: 0; + padding: 0; + top: -2px; + width: 15px; + } + + .ink-panel { + display: flex; + flex-direction: column; + font-size: 14px; + } + + .ink-panel h4 { + border-bottom: 1px solid #ddd; + font-size: 14px; + font-weight: 500; + margin: 0; + margin-bottom: 10px; + padding-bottom: 5px; + } + + .ink-panel-header { + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + border-top: 1px solid rgba(0, 0, 0, 0.1); + height: 50px; + } + + .ink-panel-content { + display: none; + height: 100%; + } + + .ink-panel-content.active { + display: block; + } + + .ink-panel-content h3 { + font-weight: 500; + font-size: 14px; + margin-top: 20px; + margin-bottom: 5px; + // text-transform: uppercase; + } + + .ink-panel-header h3 { + font-weight: 500; + font-size: 14px; + margin: 0; + padding: 0 24px; + // text-transform: uppercase; + } + + /* - Tabs */ + .ink-tab-group { + align-items: center; + box-sizing: border-box; + display: flex; + height: 100%; + justify-content: space-around; + } + + .ink-tab-group .projection-tab { + color: rgba(0, 0, 0, 0.5); + cursor: pointer; + font-weight: 300; + line-height: 20px; + padding: 0 12px; + text-align: center; + text-transform: none; + } + + .ink-tab-group .projection-tab:hover { + color: black; + } + + .ink-tab-group .projection-tab.active { + border-bottom: 2px solid black; + color: black; + font-weight: 500; + } + + h4 { + margin: 30px 0 10px 0; + } + + .dismiss-dialog-note { + margin-top: 25px; + font-size: 11px; + text-align: right; + } + `, +}); diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/assert.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/assert.ts new file mode 100644 index 0000000000000000000000000000000000000000..d32327ffaafb8606631214e24cdaa7c9dd3c1ad9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/assert.ts @@ -0,0 +1,17 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +namespace vz_projector.test { + export const assert = chai.assert; +} // namespace vz_projector.test diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/data-provider_test.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/data-provider_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..d7a3d2832f525230d853f2ad9784e848c3ab23e4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/data-provider_test.ts @@ -0,0 +1,111 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +namespace vz_projector.test { + /** + * Converts a string to an ArrayBuffer. + */ + function stringToArrayBuffer(str: string): Promise { + return new Promise((resolve, reject) => { + let blob = new Blob([str]); + let file = new FileReader(); + file.onload = (e: any) => { + resolve(e.target.result); + }; + file.readAsArrayBuffer(blob); + }); + } + + /** + * Converts an data array to TSV format. + */ + function dataToTsv(data: string[][] | number[][]) { + let lines = []; + for (let i = 0; i < data.length; i++) { + lines.push(data[i].join('\t')); + } + return lines.join('\n'); + } + + describe('parse tensors', () => { + it('parseTensors', (doneFn) => { + let tensors = [ + [1.0, 2.0], + [2.0, 3.0], + ]; + stringToArrayBuffer(dataToTsv(tensors)).then( + (tensorsArrayBuffer: ArrayBuffer) => { + parseTensors(tensorsArrayBuffer).then((data: DataPoint[]) => { + assert.equal(2, data.length); + + assert.deepEqual(new Float32Array(tensors[0]), data[0].vector); + assert.equal(0, data[0].index); + assert.isNull(data[0].projections); + + assert.deepEqual(new Float32Array(tensors[1]), data[1].vector); + assert.equal(1, data[1].index); + assert.isNull(data[1].projections); + doneFn(); + }); + } + ); + }); + it('parseMetadata', (doneFn) => { + let metadata = [ + ['label', 'fakecol'], + ['Г', '0'], + ['label1', '1'], + ]; + + stringToArrayBuffer(dataToTsv(metadata)).then( + (metadataArrayBuffer: ArrayBuffer) => { + parseMetadata(metadataArrayBuffer).then( + (spriteAndMetadataInfo: SpriteAndMetadataInfo) => { + assert.equal(2, spriteAndMetadataInfo.stats.length); + assert.equal(metadata[0][0], spriteAndMetadataInfo.stats[0].name); + assert.isFalse(spriteAndMetadataInfo.stats[0].isNumeric); + assert.isFalse( + spriteAndMetadataInfo.stats[0].tooManyUniqueValues + ); + assert.equal(metadata[0][1], spriteAndMetadataInfo.stats[1].name); + assert.isTrue(spriteAndMetadataInfo.stats[1].isNumeric); + assert.isFalse( + spriteAndMetadataInfo.stats[1].tooManyUniqueValues + ); + + assert.equal(2, spriteAndMetadataInfo.pointsInfo.length); + assert.equal( + metadata[1][0], + spriteAndMetadataInfo.pointsInfo[0]['label'] + ); + assert.equal( + +metadata[1][1], + spriteAndMetadataInfo.pointsInfo[0]['fakecol'] + ); + assert.equal( + metadata[2][0], + spriteAndMetadataInfo.pointsInfo[1]['label'] + ); + assert.equal( + +metadata[2][1], + spriteAndMetadataInfo.pointsInfo[1]['fakecol'] + ); + doneFn(); + } + ); + } + ); + }); + }); +} // namespace vz_projector.test diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/data_test.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/data_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..aed060baacb735d2182d55bbe69ac16ef5534832 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/data_test.ts @@ -0,0 +1,121 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +namespace vz_projector.test { + /** + * Helper method that makes a list of points given an array of + * sequence indexes. + * + * @param sequences The i-th entry holds the 'next' attribute for the i-th + * point. + */ + function makePointsWithSequences( + sequences: number[], + nextAttr = '__seq_next__' + ) { + let points: DataPoint[] = []; + sequences.forEach((t, i) => { + let metadata: {[key: string]: any} = {}; + metadata[nextAttr] = t >= 0 ? t : null; + points.push({ + vector: new Float32Array(0), + metadata: metadata, + projections: {}, + index: i, + }); + }); + return points; + } + + describe('constructor_with_sequences', () => { + it('Simple forward pointing sequences, __seq_next__ metadata format', () => { + // The input is: 0->2, 1->None, 2->3, 3->None. This should return + // one sequence 0->2->3. + const points = makePointsWithSequences([2, -1, 3, -1]); + let dataset = new DataSet(points); + assert.equal(1, dataset.sequences.length); + assert.deepEqual([0, 2, 3], dataset.sequences[0].pointIndices); + }); + + it('Simple forward pointing sequences, __next__ metadata format', () => { + // The input is: 0->2, 1->None, 2->3, 3->None. This should return + // one sequence 0->2->3. + const points = makePointsWithSequences([2, -1, 3, -1], '__next__'); + let dataset = new DataSet(points); + assert.equal(1, dataset.sequences.length); + assert.deepEqual([0, 2, 3], dataset.sequences[0].pointIndices); + }); + + it('No sequences', () => { + let points = makePointsWithSequences([-1, -1, -1, -1]); + let dataset = new DataSet(points); + assert.equal(0, dataset.sequences.length); + }); + + it('A sequence that goes backwards and forward in the array', () => { + // The input is: 0->2, 1->0, 2->nothing, 3->1. This should return + // one sequence 3->1->0->2. + let points = makePointsWithSequences([2, 0, -1, 1]); + let dataset = new DataSet(points); + assert.equal(1, dataset.sequences.length); + assert.deepEqual([3, 1, 0, 2], dataset.sequences[0].pointIndices); + }); + }); + + describe('stateGetAccessorDimensions', () => { + it('returns [0, 1] for 2d t-SNE', () => { + const state = new State(); + state.selectedProjection = 'tsne'; + state.tSNEis3d = false; + assert.deepEqual([0, 1], stateGetAccessorDimensions(state)); + }); + + it('returns [0, 1, 2] for 3d t-SNE', () => { + const state = new State(); + state.selectedProjection = 'tsne'; + state.tSNEis3d = true; + assert.deepEqual([0, 1, 2], stateGetAccessorDimensions(state)); + }); + + it('returns [0, 1] for 2d umap', () => { + const state = new State(); + state.selectedProjection = 'umap'; + state.umapIs3d = false; + assert.deepEqual([0, 1], stateGetAccessorDimensions(state)); + }); + + it('returns [0, 1, 2] for 3d umap', () => { + const state = new State(); + state.selectedProjection = 'umap'; + state.umapIs3d = true; + assert.deepEqual([0, 1, 2], stateGetAccessorDimensions(state)); + }); + + it('returns pca component dimensions array for pca', () => { + const state = new State(); + state.selectedProjection = 'pca'; + state.pcaComponentDimensions = [13, 12, 11, 10]; + assert.deepEqual( + state.pcaComponentDimensions, + stateGetAccessorDimensions(state) + ); + }); + + it('returns ["x", "y"] for custom projections', () => { + const state = new State(); + state.selectedProjection = 'custom'; + assert.deepEqual(['x', 'y'], stateGetAccessorDimensions(state)); + }); + }); +} // namespace vz_projector.test diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/scatterPlotRectangleSelector_test.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/scatterPlotRectangleSelector_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..296d3816f1ce9f9039eab09ff69d70cb76a253f6 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/scatterPlotRectangleSelector_test.ts @@ -0,0 +1,86 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +namespace vz_projector.test { + describe('selector callbacks make bounding box start bottom left', () => { + let containerElement: HTMLElement; + let selectionCallback: (boundingBox: ScatterBoundingBox) => void; + let selection: ScatterPlotRectangleSelector; + + beforeEach(() => { + containerElement = document.createElement('div'); + const selector = document.createElement('svg'); + selector.id = 'selector'; + containerElement.appendChild(selector); + + selectionCallback = jasmine.createSpy('selectionCallback'); + selection = new ScatterPlotRectangleSelector( + containerElement, + selectionCallback + ); + }); + + it('Simple mouse event starting top left', () => { + selection.onMouseDown(0, 0); + selection.onMouseMove(10, 10); + selection.onMouseUp(); + + expect(selectionCallback).toHaveBeenCalledWith({ + x: 0, + y: 10, + width: 10, + height: 10, + }); + }); + + it('Simple mouse event starting bottom left', () => { + selection.onMouseDown(0, 10); + selection.onMouseMove(10, 0); + selection.onMouseUp(); + + expect(selectionCallback).toHaveBeenCalledWith({ + x: 0, + y: 10, + width: 10, + height: 10, + }); + }); + + it('Simple mouse event starting top right', () => { + selection.onMouseDown(10, 0); + selection.onMouseMove(0, 10); + selection.onMouseUp(); + + expect(selectionCallback).toHaveBeenCalledWith({ + x: 0, + y: 10, + width: 10, + height: 10, + }); + }); + + it('Simple mouse event starting bottom right', () => { + selection.onMouseDown(10, 10); + selection.onMouseMove(0, 0); + selection.onMouseUp(); + + expect(selectionCallback).toHaveBeenCalledWith({ + x: 0, + y: 10, + width: 10, + height: 10, + }); + }); + }); +} // namespace vz_projector.test diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/sptree_test.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/sptree_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..c144d0137be57f6b388f701306ddd8eb7ac13d8b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/sptree_test.ts @@ -0,0 +1,112 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +namespace vz_projector.test { + it('simple 2D data', () => { + let data = [ + [0, 1], + [1, 0], + [1, 1], + [0, 0], + ]; + let tree = new SPTree(data); + // Check that each point is within the bound. + tree.visit((node, low, high) => { + assert.equal(low.length, 2); + assert.equal(high.length, 2); + let point = node.point; + assert.equal(point.length, 2); + // Each point should be in the node's bounding box. + assert.equal( + point[0] >= low[0] && + point[0] <= high[0] && + point[1] >= low[1] && + point[1] <= high[1], + true + ); + return false; + }); + }); + + it('simple 3D data', () => { + let data = [ + [0, 1, 0], + [1, 0.4, 2], + [1, 1, 3], + [0, 0, 5], + ]; + let tree = new SPTree(data); + // Check that each point is within the bound. + tree.visit((node, low, high) => { + assert.equal(low.length, 3); + assert.equal(high.length, 3); + let point = node.point; + assert.equal(point.length, 3); + // Each point should be in the node's bounding box. + assert.equal( + point[0] >= low[0] && + point[0] <= high[0] && + point[1] >= low[1] && + point[1] <= high[1] && + point[2] >= low[2] && + point[2] <= high[2], + true + ); + return false; + }); + }); + + it('Only visit root', () => { + let data = [ + [0, 1, 0], + [1, 0.4, 2], + [1, 1, 3], + [0, 0, 5], + ]; + let tree = new SPTree(data); + let numVisits = 0; + tree.visit((node, low, high) => { + numVisits++; + return true; + }); + assert.equal(numVisits, 1); + }); + + it('Search in random data', () => { + let N = 10000; + let data = new Array(N); + for (let i = 0; i < N; i++) { + data[i] = [Math.random(), Math.random()]; + } + let tree = new SPTree(data); + let numVisits = 0; + let query = data[Math.floor(Math.random() * N)]; + let found = false; + tree.visit((node, low, high) => { + numVisits++; + if (node.point === query) { + found = true; + return true; + } + let outOfBounds = + query[0] < low[0] || + query[0] > high[0] || + query[1] < low[1] || + query[1] > high[1]; + return outOfBounds; + }); + assert.equal(found, true); + assert.isBelow(numVisits, N / 4); + }); +} // namespace vz_projector.test diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/tests.html b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/tests.html new file mode 100644 index 0000000000000000000000000000000000000000..ca601dceca3120a441009225bda0f1489916f837 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/tests.html @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/util_test.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/util_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..890e19f323e922be1d48ad14bd2caf4601f3b0a7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/util_test.ts @@ -0,0 +1,42 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +namespace vz_projector.test { + describe('getURLParams', () => { + it('search query with valid param returns correct object', () => { + let urlParams = util.getURLParams('?config=http://google.com/'); + assert.deepEqual({config: 'http://google.com/'}, urlParams); + }); + + it('search query with multiple valid params returns correct object', () => { + let urlParams = util.getURLParams('?config=http://google.com/&foo=bar'); + assert.deepEqual({config: 'http://google.com/', foo: 'bar'}, urlParams); + }); + + it('search query with valid param with URL encoded characters', () => { + let urlParams = util.getURLParams('?config=http://google.com/%20search'); + assert.deepEqual({config: 'http://google.com/ search'}, urlParams); + }); + + it('search query with pound sign', () => { + let urlParams = util.getURLParams('?config=http://google.com/#foo'); + assert.deepEqual({config: 'http://google.com/'}, urlParams); + }); + + it('no search query returns empty object', () => { + let urlParams = util.getURLParams(''); + assert.deepEqual({}, urlParams); + }); + }); +} // namespace vz_projector.test diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/vz-projector-projections-panel_test.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/vz-projector-projections-panel_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..16f9e609df2c69dcdc15bbb6fe7442c4b82d71ad --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/test/vz-projector-projections-panel_test.ts @@ -0,0 +1,108 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +namespace vz_projector.test { + describe('restoreUIFromBookmark', () => { + let projectionsPanel: ProjectionsPanel; + beforeEach(() => { + projectionsPanel = document.createElement( + ProjectionsPanel.prototype.is + ) as ProjectionsPanel; + + // Set up some of the UI so the elements are found in the production code. + const tsnePerplexityContainer = document.createElement('div'); + tsnePerplexityContainer.className = 'tsne-perplexity'; + const tsnePerplexity = document.createElement('span'); + tsnePerplexityContainer.appendChild(tsnePerplexity); + projectionsPanel.appendChild(tsnePerplexityContainer); + + const tsneLearningRateContainer = document.createElement('div'); + tsneLearningRateContainer.className = 'tsne-learning-rate'; + const tsneLearningRate = document.createElement('span'); + tsneLearningRateContainer.appendChild(tsneLearningRate); + projectionsPanel.appendChild(tsneLearningRateContainer); + }); + + it('sets the pcaX/Y properties when setting 2D component values', () => { + spyOn(projectionsPanel, 'setZDropdownEnabled'); + + const s = new State(); + s.pcaComponentDimensions = [0, 1]; + projectionsPanel.restoreUIFromBookmark(s); + + assert.equal(0, projectionsPanel.pcaX); + assert.equal(1, projectionsPanel.pcaY); + + expect(projectionsPanel.setZDropdownEnabled).toHaveBeenCalledWith(false); + }); + + it('sets the pcaX/Y properties when setting 3D component values', () => { + spyOn(projectionsPanel, 'setZDropdownEnabled'); + + const s = new State(); + s.pcaComponentDimensions = [0, 1, 2]; + projectionsPanel.restoreUIFromBookmark(s); + + assert.equal(0, projectionsPanel.pcaX); + assert.equal(1, projectionsPanel.pcaY); + assert.equal(2, projectionsPanel.pcaZ); + + expect(projectionsPanel.setZDropdownEnabled).toHaveBeenCalledWith(true); + }); + }); + + describe('populateBookmarkFromUI', () => { + let projectionsPanel: ProjectionsPanel; + + beforeEach(() => { + projectionsPanel = document.createElement( + ProjectionsPanel.prototype.is + ) as ProjectionsPanel; + + // Set up some of the UI so the elements are found in the production code. + const tsnePerplexityContainer = document.createElement('div'); + tsnePerplexityContainer.className = 'tsne-perplexity'; + const tsnePerplexity = document.createElement('span'); + tsnePerplexityContainer.appendChild(tsnePerplexity); + projectionsPanel.appendChild(tsnePerplexityContainer); + + const tsneLearningRateContainer = document.createElement('div'); + tsneLearningRateContainer.className = 'tsne-learning-rate'; + const tsneLearningRate = document.createElement('span'); + tsneLearningRateContainer.appendChild(tsneLearningRate); + projectionsPanel.appendChild(tsneLearningRateContainer); + }); + + it('gets the PCA component UI values from a 2D PCA projection', () => { + projectionsPanel.pcaX = 0; + projectionsPanel.pcaY = 1; + projectionsPanel.pcaIs3d = false; + + const s = new State(); + projectionsPanel.populateBookmarkFromUI(s); + assert.deepEqual([0, 1], s.pcaComponentDimensions); + }); + + it('gets the PCA component UI values from a 3D PCA projection', () => { + projectionsPanel.pcaX = 0; + projectionsPanel.pcaY = 1; + projectionsPanel.pcaZ = 2; + projectionsPanel.pcaIs3d = true; + + const s = new State(); + projectionsPanel.populateBookmarkFromUI(s); + assert.deepEqual([0, 1, 2], s.pcaComponentDimensions); + }); + }); +} // namespace vz_projector.test diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/util.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/util.ts new file mode 100644 index 0000000000000000000000000000000000000000..58204b3fcefc15f776266dc7042dde2ac52c29b3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/util.ts @@ -0,0 +1,489 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Camera, Vector3, Texture, LinearFilter} from 'three'; +import * as tf from '../../../webapp/third_party/tfjs'; +import * as searchQuery from 'search-query-parser'; + +import {DataPoint} from './data'; +import * as vector from './vector'; +import * as logging from './logging'; + +const TASK_DELAY_MS = 200; +/** Shuffles the array in-place in O(n) time using Fisher-Yates algorithm. */ +export function shuffle(array: T[]): T[] { + let m = array.length; + let t: T; + let i: number; + // While there remain elements to shuffle. + while (m) { + // Pick a remaining element + i = Math.floor(Math.random() * m--); + // And swap it with the current element. + t = array[m]; + array[m] = array[i]; + array[i] = t; + } + return array; +} +export function range(count: number): number[] { + const rangeOutput: number[] = []; + for (let i = 0; i < count; i++) { + rangeOutput.push(i); + } + return rangeOutput; +} +export function classed( + element: HTMLElement, + className: string, + enabled: boolean +) { + const classNames = element.className.split(' '); + if (enabled) { + if (className in classNames) { + return; + } else { + classNames.push(className); + } + } else { + const index = classNames.indexOf(className); + if (index === -1) { + return; + } + classNames.splice(index, 1); + } + element.className = classNames.join(' '); +} +/** Projects a 3d point into screen space */ +export function vector3DToScreenCoords( + cam: Camera, + w: number, + h: number, + v: Vector3 +): vector.Point2D { + let dpr = window.devicePixelRatio; + let pv = new Vector3().copy(v).project(cam); + // The screen-space origin is at the middle of the screen, with +y up. + let coords: vector.Point2D = [ + ((pv.x + 1) / 2) * w * dpr, + -(((pv.y - 1) / 2) * h) * dpr, + ]; + return coords; +} +/** Loads 3 contiguous elements from a packed xyz array into a Vector3. */ +export function vector3FromPackedArray( + a: Float32Array, + pointIndex: number +): Vector3 { + const offset = pointIndex * 3; + return new Vector3(a[offset], a[offset + 1], a[offset + 2]); +} +/** + * Gets the camera-space z coordinates of the nearest and farthest points. + * Ignores points that are behind the camera. + */ +export function getNearFarPoints( + worldSpacePoints: Float32Array, + cameraPos: Vector3, + cameraTarget: Vector3 +): [number, number] { + let shortestDist: number = Infinity; + let furthestDist: number = 0; + const camToTarget = new Vector3().copy(cameraTarget).sub(cameraPos); + const camPlaneNormal = new Vector3().copy(camToTarget).normalize(); + const n = worldSpacePoints.length / 3; + let src = 0; + let p = new Vector3(); + let camToPoint = new Vector3(); + for (let i = 0; i < n; i++) { + p.x = worldSpacePoints[src]; + p.y = worldSpacePoints[src + 1]; + p.z = worldSpacePoints[src + 2]; + src += 3; + camToPoint.copy(p).sub(cameraPos); + const dist = camPlaneNormal.dot(camToPoint); + if (dist < 0) { + continue; + } + furthestDist = dist > furthestDist ? dist : furthestDist; + shortestDist = dist < shortestDist ? dist : shortestDist; + } + return [shortestDist, furthestDist]; +} +/** + * Generate a texture for the points/images and sets some initial params + */ +export function createTexture( + image: HTMLImageElement | HTMLCanvasElement +): Texture { + let tex = new Texture(image); + tex.needsUpdate = true; + // Used if the texture isn't a power of 2. + tex.minFilter = LinearFilter; + tex.generateMipmaps = false; + tex.flipY = false; + return tex; +} +/** + * Assert that the condition is satisfied; if not, log user-specified message + * to the console. + */ +export function assert(condition: boolean, message?: string) { + if (!condition) { + message = message || 'Assertion failed'; + throw new Error(message); + } +} +export type SearchPredicate = (p: DataPoint) => boolean; +export function getSearchPredicate( + query: string, + inRegexMode: boolean, + fieldName: string +): SearchPredicate { + let predicate: SearchPredicate; + if (inRegexMode) { + let regExp = new RegExp(query, 'i'); + predicate = (p) => regExp.test(p.metadata[fieldName].toString()); + } else { + // Doing a case insensitive substring match. + query = query.toLowerCase(); + const active_learning_query = 'active_learning'; + const options = {keywords: ['label', 'prediction', 'is_training', 'is_correct_prediction', 'new_selection', + active_learning_query, 'is_noisy', 'noisy_type', 'original_or_flipped']}; + const searchQueryObj = searchQuery.parse(query, options); + const valid_new_selection = (searchQueryObj["new_selection"]!=null && !Array.isArray(searchQueryObj["new_selection"]) && + (searchQueryObj["new_selection"] == "true" || searchQueryObj["new_selection"] == "false")); + const valid_active_learning = (searchQueryObj[active_learning_query]!=null && !Array.isArray(searchQueryObj[active_learning_query]) && + (searchQueryObj[active_learning_query] == "true")); + const valid_noisy = (searchQueryObj["is_noisy"]!=null && !Array.isArray(searchQueryObj["is_noisy"]) && + (searchQueryObj["is_noisy"] == "true" || searchQueryObj["is_noisy"] == "false")); + const valid_original = (searchQueryObj["noisy_type"]!=null && !Array.isArray(searchQueryObj["noisy_type"]) && + (searchQueryObj["noisy_type"] == "original" || searchQueryObj["noisy_type"] == "flipped" || + searchQueryObj["noisy_type"] == "others")); + const valid_original_or_flipped = (searchQueryObj["original_or_flipped"]!=null && !Array.isArray(searchQueryObj["original_or_flipped"]) && + (searchQueryObj["original_or_flipped"] == "true")); + const valid_uncertainty_ranking = (searchQueryObj["uncertainty_ranking"]!=null && !Array.isArray(searchQueryObj["uncertainty_ranking"]) && + !isNaN(+searchQueryObj["uncertainty_ranking"])); + const valid_uncertainty_exceed = (searchQueryObj["uncertainty_exceed"]!=null && !Array.isArray(searchQueryObj["uncertainty_exceed"]) && + !isNaN(+searchQueryObj["uncertainty_exceed"])); + const valid_diversity_ranking = (searchQueryObj["diversity_ranking"]!=null && !Array.isArray(searchQueryObj["diversity_ranking"]) && + !isNaN(+searchQueryObj["diversity_ranking"])); + const valid_diversity_exceed = (searchQueryObj["diversity_exceed"]!=null && !Array.isArray(searchQueryObj["diversity_exceed"]) && + !isNaN(+searchQueryObj["diversity_exceed"])); + const valid_tot_ranking = (searchQueryObj["tot_ranking"]!=null && !Array.isArray(searchQueryObj["tot_ranking"]) && + !isNaN(+searchQueryObj["tot_ranking"])); + const valid_tot_exceed = (searchQueryObj["tot_exceed"]!=null && !Array.isArray(searchQueryObj["tot_exceed"]) && + !isNaN(+searchQueryObj["tot_exceed"])); + predicate = (p) => { + if(searchQueryObj["label"]==null && searchQueryObj["prediction"]==null && + !valid_new_selection && !valid_active_learning && !valid_noisy && !valid_original && !valid_original_or_flipped && + !valid_uncertainty_ranking && !valid_diversity_ranking && !valid_tot_ranking && !valid_uncertainty_exceed + && !valid_diversity_exceed && !valid_tot_exceed && + (searchQueryObj["is_training"]==null || Array.isArray(searchQueryObj["is_training"]) || + ((searchQueryObj["is_training"] != "true" && searchQueryObj["is_training"] != "false"))) + && (searchQueryObj["is_correct_prediction"]==null || Array.isArray(searchQueryObj["is_correct_prediction"]) || + ((searchQueryObj["is_correct_prediction"] != "true" && searchQueryObj["is_correct_prediction"] != "false"))) ) { + return false; + } + + if(searchQueryObj["label"]!=null) { + let queryLabels = searchQueryObj["label"]; + let labelResult = false; + const label = p.metadata["label"].toString().toLowerCase(); + if(!Array.isArray(queryLabels)) { + queryLabels = [queryLabels]; + } + for (let i = 0; i < queryLabels.length; i++) { + const queryLabel = queryLabels[i]; + labelResult = labelResult || label == queryLabel; + if(labelResult) { + break; + } + } + if(!labelResult) { + return false; + } + } + if(searchQueryObj["prediction"]!=null) { + let queryPredictions = searchQueryObj["prediction"]; + let predictionResult = false; + const prediction = p.current_prediction; + if(!Array.isArray(queryPredictions)) { + queryPredictions = [queryPredictions]; + } + for (let i = 0; i < queryPredictions.length; i++) { + const queryPrediction = queryPredictions[i]; + predictionResult = predictionResult || prediction == queryPrediction; + if(predictionResult) { + break; + } + } + if(!predictionResult) { + return false; + } + } + if(valid_new_selection) { + let queryNewSelection = searchQueryObj["new_selection"]; + let newSelectionResult = false; + if(queryNewSelection == "true" && p.current_new_selection) { + newSelectionResult = true; + } + if(queryNewSelection == "false" && p.current_new_selection == false) { + newSelectionResult = true; + } + if(!newSelectionResult) { + return false; + } + } + if(valid_noisy) { + let queryNoisy = searchQueryObj["is_noisy"]; + let noisyResult = false; + if(queryNoisy == "true" && p.noisy) { + noisyResult = true; + } + if(queryNoisy == "false" && p.noisy == false) { + noisyResult = true; + } + if(!noisyResult) { + return false; + } + } + if(valid_active_learning) { + let newActiveLearningResult = false; + if(p.current_new_selection || p.current_training) { + newActiveLearningResult = true; + } + if(!newActiveLearningResult) { + return false; + } + } + if(valid_original) { + let queryOriginal = searchQueryObj["noisy_type"]; + let originalResult = false; + if(queryOriginal == "original" && p.noisy && p.original_label == p.current_prediction) { + originalResult = true; + } + if(queryOriginal == "flipped" && p.noisy && p.current_prediction == p.metadata["label"].toString().toLowerCase()) { + originalResult = true; + } + if(queryOriginal == "others" && p.noisy && p.current_prediction != p.metadata["label"].toString().toLowerCase() && + p.original_label != p.current_prediction) { + originalResult = true; + } + if(!originalResult) { + return false; + } + } + if(valid_original_or_flipped) { + let queryOriginalOrFlipped = searchQueryObj["original_or_flipped"]; + let originalOrFlipped = false; + if(queryOriginalOrFlipped == "true" && p.noisy && (p.original_label == p.current_prediction || + p.current_prediction == p.metadata["label"].toString().toLowerCase())) { + originalOrFlipped = true; + } + if(!originalOrFlipped) { + return false; + } + } + if(valid_uncertainty_ranking) { + let queryRanking = +searchQuery["uncertainty_ranking"]; + if(p.current_uncertainty_ranking == undefined || p.current_uncertainty_ranking == -1 || + p.current_uncertainty_ranking > queryRanking) { + return false; + } + } + if(valid_diversity_ranking) { + let queryRanking = +searchQuery["diversity_ranking"]; + if(p.current_diversity_ranking == undefined || p.current_diversity_ranking == -1 || + p.current_diversity_ranking > queryRanking) { + return false; + } + } + if(valid_tot_ranking) { + let queryRanking = +searchQuery["tot_ranking"]; + if(p.current_tot_ranking == undefined || p.current_tot_ranking == -1 || + p.current_tot_ranking > queryRanking) { + return false; + } + } + if(valid_uncertainty_exceed) { + let queryExceed = +searchQuery["uncertainty_exceed"]; + if(p.metadata["uncertainty"] == undefined || p.metadata["uncertainty"] == -1 || + p.metadata["uncertainty"] < queryExceed) { + return false; + } + } + if(valid_diversity_exceed) { + let queryExceed = +searchQuery["diversity_exceed"]; + if(p.metadata["diversity"] == undefined || p.metadata["diversity"] == -1 || + p.metadata["diversity"] < queryExceed) { + return false; + } + } + if(valid_tot_exceed) { + let queryExceed = +searchQuery["tot_exceed"]; + if(p.metadata["tot"] == undefined || p.metadata["tot"] == -1 || + p.metadata["tot"] < queryExceed) { + return false; + } + } + if(searchQueryObj["is_training"]!=null && !Array.isArray(searchQueryObj["is_training"]) && + (searchQueryObj["is_training"] == "true" || searchQueryObj["is_training"] == "false")) { + let queryTraining = searchQueryObj["is_training"]; + let trainingResult = false; + if(queryTraining == "true" && p.current_training) { + trainingResult = true; + } + if(queryTraining == "false" && p.current_testing) { + trainingResult = true; + } + if(!trainingResult) { + return false; + } + } + if(searchQueryObj["is_correct_prediction"]!=null && !Array.isArray(searchQueryObj["is_correct_prediction"]) && + (searchQueryObj["is_correct_prediction"] == "true" || searchQueryObj["is_correct_prediction"] == "false")) { + let queryCorrectPrediction = searchQueryObj["is_correct_prediction"]; + let correctPredictionResult = false; + if(p.current_wrong_prediction == undefined) { + return false; + } + if(queryCorrectPrediction == "true" && !p.current_wrong_prediction) { + correctPredictionResult = true; + } + if(queryCorrectPrediction == "false" && p.current_wrong_prediction) { + correctPredictionResult = true; + } + if(!correctPredictionResult) { + return false; + } + } + return true; + }; + + } + return predicate; +} +/** + * Runs an expensive task asynchronously with some delay + * so that it doesn't block the UI thread immediately. + * + * @param message The message to display to the user. + * @param task The expensive task to run. + * @param msgId Optional. ID of an existing message. If provided, will overwrite + * an existing message and won't automatically clear the message when the + * task is done. + * @return The value returned by the task. + */ +export function runAsyncTask( + message: string, + task: () => T, + msgId: string = null, + taskDelay = TASK_DELAY_MS +): Promise { + let autoClear = msgId == null; + msgId = logging.setModalMessage(message, msgId); + return new Promise((resolve, reject) => { + setTimeout(() => { + try { + let result = task(); + // Clearing the old message. + if (autoClear) { + logging.setModalMessage(null, msgId); + } + resolve(result); + } catch (ex) { + reject(ex); + } + return true; + }, taskDelay); + }); +} +/** + * Parses the URL for query parameters, e.g. ?foo=1&bar=2 will return + * {'foo': '1', 'bar': '2'}. + * @param url The URL to parse. + * @return A map of queryParam key to its value. + */ +export function getURLParams( + url: string +): { + [key: string]: string; +} { + if (!url) { + return {}; + } + let queryString = url.indexOf('?') !== -1 ? url.split('?')[1] : url; + if (queryString.indexOf('#')) { + queryString = queryString.split('#')[0]; + } + const queryEntries = queryString.split('&'); + let queryParams: { + [key: string]: string; + } = {}; + for (let i = 0; i < queryEntries.length; i++) { + let queryEntryComponents = queryEntries[i].split('='); + queryParams[queryEntryComponents[0].toLowerCase()] = decodeURIComponent( + queryEntryComponents[1] + ); + } + return queryParams; +} +/** List of substrings that auto generated tensors have in their name. */ +const SUBSTR_GEN_TENSORS = ['/Adagrad']; +/** Returns true if the tensor was automatically generated by TF API calls. */ +export function tensorIsGenerated(tensorName: string): boolean { + for (let i = 0; i < SUBSTR_GEN_TENSORS.length; i++) { + if (tensorName.indexOf(SUBSTR_GEN_TENSORS[i]) >= 0) { + return true; + } + } + return false; +} +export function xor(cond1: boolean, cond2: boolean): boolean { + return (cond1 || cond2) && !(cond1 && cond2); +} +/** Checks to see if the browser supports webgl. */ +export async function hasWebGLSupport(): Promise { + try { + let c = document.createElement('canvas'); + let gl = c.getContext('webgl') || c.getContext('experimental-webgl'); + await tf.ready(); + return gl != null && tf.getBackend() === 'webgl'; + } catch (e) { + return false; + } +} + + +export function setIntersection(sets : any) { + if (sets.length === 0) { + return new Set(); + } + + // Create a copy of the first set to modify + const intersection = new Set(sets[0]); + + // Iterate over each set and keep only elements that exist in all sets + for (let i = 1; i < sets.length; i++) { + const currentSet = sets[i]; + for (const element of intersection) { + if (!currentSet.has(element)) { + intersection.delete(element); + } + } + } + + return intersection; +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vector.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vector.ts new file mode 100644 index 0000000000000000000000000000000000000000..b447e9e9f0b13c5727ad9b3adcfce4a02fa6aa1a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vector.ts @@ -0,0 +1,249 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {randomNormal} from 'd3'; + +import * as util from './util'; + +export type Vector = Float32Array | number[]; +export type Point2D = [number, number]; +export type Point3D = [number, number, number]; +/** Returns the dot product of two vectors. */ +export function dot(a: Vector, b: Vector): number { + util.assert(a.length === b.length, 'Vectors a and b must be of same length'); + let result = 0; + for (let i = 0; i < a.length; ++i) { + result += a[i] * b[i]; + } + return result; +} +/** Sums all the elements in the vector */ +export function sum(a: Vector): number { + let result = 0; + for (let i = 0; i < a.length; ++i) { + result += a[i]; + } + return result; +} +/** Returns the sum of two vectors, i.e. a + b */ +export function add(a: Vector, b: Vector): Float32Array { + util.assert(a.length === b.length, 'Vectors a and b must be of same length'); + let result = new Float32Array(a.length); + for (let i = 0; i < a.length; ++i) { + result[i] = a[i] + b[i]; + } + return result; +} +/** Subtracts vector b from vector a, i.e. returns a - b */ +export function sub(a: Vector, b: Vector): Float32Array { + util.assert(a.length === b.length, 'Vectors a and b must be of same length'); + let result = new Float32Array(a.length); + for (let i = 0; i < a.length; ++i) { + result[i] = a[i] - b[i]; + } + return result; +} +/** Returns the square norm of the vector */ +export function norm2(a: Vector): number { + let result = 0; + for (let i = 0; i < a.length; ++i) { + result += a[i] * a[i]; + } + return result; +} +/** Returns the euclidean distance between two vectors. */ +export function dist(a: Vector, b: Vector): number { + return Math.sqrt(dist2(a, b)); +} +/** Returns the square euclidean distance between two vectors. */ +export function dist2(a: Vector, b: Vector): number { + util.assert(a.length === b.length, 'Vectors a and b must be of same length'); + let result = 0; + for (let i = 0; i < a.length; ++i) { + let diff = a[i] - b[i]; + result += diff * diff; + } + return result; +} +/** Returns the square euclidean distance between two 2D points. */ +export function dist2_2D(a: Vector, b: Vector): number { + let dX = a[0] - b[0]; + let dY = a[1] - b[1]; + return dX * dX + dY * dY; +} +/** Returns the square euclidean distance between two 3D points. */ +export function dist2_3D(a: Vector, b: Vector): number { + let dX = a[0] - b[0]; + let dY = a[1] - b[1]; + let dZ = a[2] - b[2]; + return dX * dX + dY * dY + dZ * dZ; +} +/** Returns the euclidean distance between 2 3D points. */ +export function dist_3D(a: Vector, b: Vector): number { + return Math.sqrt(dist2_3D(a, b)); +} +/** + * Returns the square euclidean distance between two vectors, with an early + * exit (returns -1) if the distance is >= to the provided limit. + */ +export function dist2WithLimit(a: Vector, b: Vector, limit: number): number { + util.assert(a.length === b.length, 'Vectors a and b must be of same length'); + let result = 0; + for (let i = 0; i < a.length; ++i) { + let diff = a[i] - b[i]; + result += diff * diff; + if (result >= limit) { + return -1; + } + } + return result; +} +/** Returns the square euclidean distance between two 2D points. */ +export function dist22D(a: Point2D, b: Point2D): number { + let dX = a[0] - b[0]; + let dY = a[1] - b[1]; + return dX * dX + dY * dY; +} +/** Modifies the vector in-place to have unit norm. */ +export function unit(a: Vector): void { + let norm = Math.sqrt(norm2(a)); + util.assert(norm >= 0, 'Norm of the vector must be > 0'); + for (let i = 0; i < a.length; ++i) { + a[i] /= norm; + } +} +/** + * Projects the vectors to a lower dimension + * + * @param vectors Array of vectors to be projected. + * @param newDim The resulting dimension of the vectors. + */ +export function projectRandom( + vectors: Float32Array[], + newDim: number +): Float32Array[] { + let dim = vectors[0].length; + let N = vectors.length; + let newVectors: Float32Array[] = new Array(N); + for (let i = 0; i < N; ++i) { + newVectors[i] = new Float32Array(newDim); + } + // Make nDim projections. + for (let k = 0; k < newDim; ++k) { + let randomVector = rn(dim); + for (let i = 0; i < N; ++i) { + newVectors[i][k] = dot(vectors[i], randomVector); + } + } + return newVectors; +} +/** + * Projects a vector onto a 2D plane specified by the two direction vectors. + */ +export function project2d(a: Vector, dir1: Vector, dir2: Vector): Point2D { + return [dot(a, dir1), dot(a, dir2)]; +} +/** + * Computes the centroid of the data points. If the provided data points are not + * vectors, an accessor function needs to be provided. + */ +export function centroid( + dataPoints: T[], + accessor?: (a: T) => Vector +): Vector { + if (dataPoints.length === 0) { + return null; + } + if (accessor == null) { + accessor = (a: T) => a; + } + util.assert(dataPoints.length >= 0, '`vectors` must be of length >= 1'); + let centroid = new Float32Array(accessor(dataPoints[0]).length); + for (let i = 0; i < dataPoints.length; ++i) { + let dataPoint = dataPoints[i]; + let vector = accessor(dataPoint); + for (let j = 0; j < centroid.length; ++j) { + centroid[j] += vector[j]; + } + } + for (let j = 0; j < centroid.length; ++j) { + centroid[j] /= dataPoints.length; + } + return centroid; +} +/** + * Generates a vector of the specified size where each component is drawn from + * a random (0, 1) gaussian distribution. + */ +export function rn(size: number): Float32Array { + const normal = randomNormal(); + let result = new Float32Array(size); + for (let i = 0; i < size; ++i) { + result[i] = normal(); + } + return result; +} +/** + * Returns the cosine distance ([0, 2]) between two vectors + * that have been normalized to unit norm. + */ +export function cosDistNorm(a: Vector, b: Vector): number { + return 1 - dot(a, b); +} +/** + * Returns the cosine distance ([0, 2]) between two vectors. + */ +export function cosDist(a: Vector, b: Vector): number { + return 1 - cosSim(a, b); +} +/** Returns the cosine similarity ([-1, 1]) between two vectors. */ +export function cosSim(a: Vector, b: Vector): number { + return dot(a, b) / Math.sqrt(norm2(a) * norm2(b)); +} +/** + * Converts list of vectors (matrix) into a 1-dimensional + * typed array with row-first order. + */ +export function toTypedArray( + dataPoints: T[], + accessor: (dataPoint: T) => Float32Array +): Float32Array { + let N = dataPoints.length; + let dim = accessor(dataPoints[0]).length; + let result = new Float32Array(N * dim); + for (let i = 0; i < N; ++i) { + let vector = accessor(dataPoints[i]); + for (let d = 0; d < dim; ++d) { + result[i * dim + d] = vector[d]; + } + } + return result; +} +/** + * Transposes an RxC matrix represented as a flat typed array + * into a CxR matrix, again represented as a flat typed array. + */ +export function transposeTypedArray( + r: number, + c: number, + typedArray: Float32Array +) { + let result = new Float32Array(r * c); + for (let i = 0; i < r; ++i) { + for (let j = 0; j < c; ++j) { + result[j * r + i] = typedArray[i * c + j]; + } + } + return result; +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-comparator-container.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-comparator-container.ts new file mode 100644 index 0000000000000000000000000000000000000000..85e9581457abe99324a399ea8869353d82c8111e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-comparator-container.ts @@ -0,0 +1,447 @@ + +import {PolymerElement, html} from '@polymer/polymer'; +import {customElement, property} from '@polymer/decorators'; +import { setIntersection } from './util'; +import '../../../components/polymer/irons_and_papers'; +import './styles'; +import './vz-comparator'; +import{getIteration ,updateStateForInstance, getSelectedStack} from './globalState'; +@customElement('vz-comparator-container') +class VzComparatorContainer extends PolymerElement { + static get template() { + return html` + + + +
    + + + + + + + + + + +
    + + + + `; + } + + @property({ type: String }) + routePrefix: string; + + @property({ type: String }) + servingMode: string; + + @property({ type: String }) + projectorConfigJsonPath: string; + + @property({ type: Boolean }) + pageViewLogging: boolean; + + @property({ type: Boolean }) + eventLogging: boolean; + + @property({ type: Number }) + instanceIdLeft: number = 2; + + @property({ type: Number }) + instanceIdRight: number = 3; + + @property({ type: Boolean }) + isContraVis: boolean = false; + + @property({type: Array}) + contraVisHighlightIndicesLeft:Array=[]; + + @property({type: Array}) + contraVisHighlightIndicesRight:Array=[]; + + @property({type: Array}) + contraVisBoldIndicesLeft:Array=[]; + + @property({type: Array}) + contraVisBoldIndicesRight:Array=[]; + + @property({ type: Number }) + currentHoverIndexLeft: number; + + @property({ type: Number }) + currentHoverIndexRight: number; + + @property({ type: String }) + hoverMode: string; + // And you would set up an event listener for the 'hover-index-changed' event, possibly in the ready or attached lifecycle callbacks: +ready() { + super.ready(); + (this as any).addEventListener('hover-index-changed', this.handleHoverIndexChange); +} + + _highlightData() { + // Get the selected value from the select box + var selectBox = this.shadowRoot.querySelector('#highlightMethodInput'); + var selectedValue = (selectBox as HTMLSelectElement).value; + + + const requestOptions = { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + "path": window.sessionStorage.content_path, + "iterationLeft": getIteration(this.instanceIdLeft), + "iterationRight": getIteration(this.instanceIdRight), + "method": selectedValue, + "username": window.sessionStorage.username, + "vis_method": window.sessionStorage.vis_method, + 'setting': window.sessionStorage.selectedSetting, + "content_path": window.sessionStorage.content_path + }), + }; + + fetch(`http://${ window.sessionStorage.getItem('ipAddress')}/contraVisHighlight`, requestOptions) + .then(response => { + if (!response.ok) { + throw new Error(`Server responded with status: ${response.status}`); + } + return response.json(); + }) + .then(data => { + updateStateForInstance(this.instanceIdLeft, {contraVisHighlightIndices:data.contraVisChangeIndices}) + updateStateForInstance(this.instanceIdRight, {contraVisHighlightIndices:data.contraVisChangeIndices}) + updateStateForInstance(this.instanceIdLeft, {contraVisHighlightIndicesBlue:data.contraVisChangeIndices}) + updateStateForInstance(this.instanceIdRight, {contraVisHighlightIndicesBlue:data.contraVisChangeIndices}) + updateStateForInstance(this.instanceIdLeft, {contraVisHighlightIndicesYellow:{}}) + updateStateForInstance(this.instanceIdRight, {contraVisHighlightIndicesYellow:{}}) + updateStateForInstance(this.instanceIdLeft, {contraVisHighlightIndicesGreen:{}}) + updateStateForInstance(this.instanceIdRight, {contraVisHighlightIndicesGreen:{}}) + this.contraVisHighlightIndicesLeft = data.contraVisChangeIndices + this.contraVisHighlightIndicesRight = data.contraVisChangeIndices + + + }) + .catch(error => { + console.error('Error during highlightCriticalChange fetch:', error); + + }); + } + + + _highlightDataSingle() { + // Get the selected value from the select box + var selectBox = this.shadowRoot.querySelector('#highlightMethodInputSingle'); + var selectedValue = (selectBox as HTMLSelectElement).value; + var selected_left = getSelectedStack(this.instanceIdLeft) == undefined? -1 : getSelectedStack(this.instanceIdLeft)[0] + var selected_right = getSelectedStack(this.instanceIdRight) == undefined? -1 : getSelectedStack(this.instanceIdRight)[0] + + const requestOptions = { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + "path": window.sessionStorage.content_path, + "iterationLeft": getIteration(this.instanceIdLeft), + "iterationRight": getIteration(this.instanceIdRight), + "method": selectedValue, + "username": window.sessionStorage.username, + "vis_method": window.sessionStorage.vis_method, + 'setting': window.sessionStorage.selectedSetting, + "content_path": window.sessionStorage.content_path, + "selectedPointLeft":selected_left, + "selectedPointRight":selected_right + }), + }; + performance.mark('startRequest'); + fetch(`http://${ window.sessionStorage.getItem('ipAddress')}/contraVisHighlightSingle`, requestOptions) + .then(response => { + performance.mark('endRequest'); + + // Measure the duration of the request + performance.measure('requestDuration', 'startRequest', 'endRequest'); + + const measure = performance.getEntriesByName('requestDuration')[0]; + console.log(`The transmission time was ${measure.duration} milliseconds.`); + if (!response.ok) { + throw new Error(`Server responded with status: ${response.status}`); + } + return response.json(); + }) + .then(data => { + performance.mark('startProcessing'); + console.log("startProcessing") + if (selectedValue == "align") { + + // Start the first update task + +// Promise.resolve().then(() => { +// this.contraVisHighlightIndicesLeft = data.contraVisChangeIndicesLeft; +// }); + +// Promise.resolve().then(() => { +// this.contraVisHighlightIndicesRight = data.contraVisChangeIndicesRight; +// }); + + +updateStateForInstance(this.instanceIdLeft, {contraVisHighlightIndicesYellow:data.contraVisChangeIndicesLeft}) +updateStateForInstance(this.instanceIdLeft, {contraVisHighlightIndicesBlue:{}}) +updateStateForInstance(this.instanceIdLeft, {contraVisHighlightIndicesGreen:{}}) +updateStateForInstance(this.instanceIdRight, {contraVisHighlightIndicesBlue: data.contraVisChangeIndicesRight}) +updateStateForInstance(this.instanceIdRight, {contraVisHighlightIndicesYellow:{}}) +updateStateForInstance(this.instanceIdRight, {contraVisHighlightIndicesGreen:{}}) + // performance.mark('startProcessing1'); +this.contraVisHighlightIndicesLeft = data.contraVisChangeIndicesLeft; +this.contraVisHighlightIndicesRight = data.contraVisChangeIndicesRight; +console.log("alginleft", this.contraVisHighlightIndicesLeft) +console.log("alignright", this.contraVisHighlightIndicesRight) + + // performance.mark('startProcessing1'); + // console.log("startProcessing1") + // // this.contraVisHighlightIndicesRight = data.contraVisChangeIndicesRight + + // performance.mark('endProcessing1'); + + // // Measure the duration of the request + // performance.measure('ProcessingDuration1', 'startProcessing1', 'endProcessing1'); + + // const measure2 = performance.getEntriesByName('ProcessingDuration1')[0]; + // console.log(`The Processing1 time was ${measure2.duration} milliseconds.`); + + if (selected_left != -1 && selected_right != -1) { + this.contraVisBoldIndicesLeft = getSelectedStack(this.instanceIdLeft).concat(getSelectedStack(this.instanceIdRight)) + this.contraVisBoldIndicesRight = getSelectedStack(this.instanceIdRight).concat(getSelectedStack(this.instanceIdLeft)) + } else if (selected_left != -1 && selected_right == -1) { + + this.contraVisBoldIndicesLeft = getSelectedStack(this.instanceIdLeft) + this.contraVisBoldIndicesRight = getSelectedStack(this.instanceIdLeft) + + + } else if (selected_right != -1 && selected_left == -1) { + this.contraVisBoldIndicesLeft = getSelectedStack(this.instanceIdRight) + this.contraVisBoldIndicesRight = getSelectedStack(this.instanceIdRight) + } else { + this.contraVisBoldIndicesRight = [] + this.contraVisBoldIndicesLeft = [] + } + + + // this.contraVisHighlightIndicesLeft = data.contraVisChangeIndicesLeft + + + } else if (selectedValue == "nearest neighbour") { + + var leftLeft = data.contraVisChangeIndicesLeftLeft; + var leftRight = data.contraVisChangeIndicesLeftRight; + var rightLeft = data.contraVisChangeIndicesRightLeft; + var rightRight = data.contraVisChangeIndicesRightRight; + + if (!leftLeft) { + leftLeft = [] + } + if (!leftRight) { + leftRight = [] + } + if (!rightLeft) { + rightLeft = [] + } + if (!rightRight) { + rightRight = [] + } + const greenLeft = setIntersection([ + new Set(leftRight), + new Set(leftLeft), + ]); + const greenRight = setIntersection([ + new Set(rightRight), + new Set(rightLeft), + ]); + updateStateForInstance(this.instanceIdLeft, {contraVisHighlightIndicesYellow:leftRight}) + updateStateForInstance(this.instanceIdLeft, {contraVisHighlightIndicesBlue:leftLeft}) + updateStateForInstance(this.instanceIdLeft, {contraVisHighlightIndicesGreen:greenLeft}) + + updateStateForInstance(this.instanceIdRight, {contraVisHighlightIndicesYellow:rightRight}) + updateStateForInstance(this.instanceIdRight, {contraVisHighlightIndicesBlue:rightLeft}) + updateStateForInstance(this.instanceIdRight, {contraVisHighlightIndicesGreen:greenRight}) + + this.contraVisHighlightIndicesLeft = leftLeft.concat(leftRight); + + this.contraVisHighlightIndicesRight = rightLeft.concat(rightRight); + + + var boldRight = [] + var boldLeft = [] + if (selected_left != -1) { + boldLeft = getSelectedStack(this.instanceIdLeft) + } + if (selected_right != -1) { + boldRight = getSelectedStack(this.instanceIdRight) + } + // this.contraVisBoldIndicesLeft = boldLeft.concat(this.contraVisHighlightIndicesLeft) + // this.contraVisBoldIndicesRight = boldRight.concat(this.contraVisHighlightIndicesRight) + this.contraVisBoldIndicesLeft = boldLeft.concat(boldRight) + this.contraVisBoldIndicesRight = this.contraVisBoldIndicesLeft + console.log("boldleft", this.contraVisBoldIndicesLeft) + console.log("boldright", this.contraVisBoldIndicesRight) + + } else { + updateStateForInstance(this.instanceIdLeft, {contraVisHighlightIndicesYellow:{}}) + updateStateForInstance(this.instanceIdLeft, {contraVisHighlightIndicesBlue:{}}) + updateStateForInstance(this.instanceIdLeft, {contraVisHighlightIndicesGreen:{}}) + updateStateForInstance(this.instanceIdRight, {contraVisHighlightIndicesYellow:{}}) + updateStateForInstance(this.instanceIdRight, {contraVisHighlightIndicesBlue:{}}) + updateStateForInstance(this.instanceIdRight, {contraVisHighlightIndicesGreen:{}}) + this.contraVisHighlightIndicesLeft = [] + this.contraVisHighlightIndicesRight = [] + this.contraVisBoldIndicesLeft = [] + this.contraVisBoldIndicesRight = [] + } + + updateStateForInstance(this.instanceIdLeft, {contraVisHighlightIndices:this.contraVisHighlightIndicesLeft}) + updateStateForInstance(this.instanceIdRight, {contraVisHighlightIndices:this.contraVisHighlightIndicesRight}) + updateStateForInstance(this.instanceIdLeft, {contraVisBoldIndices:this.contraVisBoldIndicesLeft}) + updateStateForInstance(this.instanceIdRight, {contraVisBoldIndices:this.contraVisBoldIndicesRight}) + console.log("vleft", this.contraVisHighlightIndicesLeft) + console.log("vright", this.contraVisHighlightIndicesRight) + performance.mark('endProcessing'); + performance.measure('ProcessingDuration', 'startProcessing', 'endProcessing'); + + const measure = performance.getEntriesByName('ProcessingDuration')[0]; + console.log(`The Processing time was ${measure.duration} milliseconds.`); + }) + .catch(error => { + console.error('Error during highlightCriticalChange fetch:', error); + + }); + } + + handleHoverIndexChange(event: Event): void { + // Use type assertion to tell TypeScript that 'event' is a 'CustomEvent' + const customEvent = event as CustomEvent; + const hoverIndex = customEvent.detail.hoverIndex; + const instanceId = customEvent.detail.instanceId; + if (this.hoverMode == "pair") { + if (instanceId == this.instanceIdLeft) { + if (this.currentHoverIndexLeft != hoverIndex) { + this.currentHoverIndexLeft = hoverIndex + if (this.currentHoverIndexLeft != this.currentHoverIndexRight) { + this.currentHoverIndexRight = this.currentHoverIndexLeft + } + } + + } else if (instanceId == this.instanceIdRight) { + if (this.currentHoverIndexRight != hoverIndex) { + this.currentHoverIndexRight = hoverIndex + if (this.currentHoverIndexRight != this.currentHoverIndexLeft) { + this.currentHoverIndexLeft = this.currentHoverIndexRight + } + } + } + } + + } + + + + _changeHoverMode() { + var selectBox = this.shadowRoot.querySelector('#changeHoverMode'); + var selectedValue = (selectBox as HTMLSelectElement).value; + this.hoverMode = selectedValue; + } + + _checkSessionStorage() { + const isContraVis = window.sessionStorage.getItem('isContraVis'); + this.isContraVis = isContraVis === 'true'; + } + + connectedCallback() { + super.connectedCallback(); + this._checkSessionStorage(); + window.addEventListener('storage', (event) => { + if (event.key === 'isContraVis') { + this._checkSessionStorage(); + } + }); + } + + +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-comparator.html.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-comparator.html.ts new file mode 100644 index 0000000000000000000000000000000000000000..9ffae072ebfd976151b3ffa45f493bcc23b15876 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-comparator.html.ts @@ -0,0 +1,685 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import { html } from '@polymer/polymer'; + +import './styles'; + +export const template = html` + + + + +

    + +
    +
    +
    + +
    +
    + Close +
    +
    +
    + +
    +
    + + + +
    +
    +
    + < + +
    +
    + +
    + + Bounding box selection + + + + + + + + + Hidden/Show background + + + + + + +
    +
    + Points: Loading... +
    + +
    + Dimension: Loading... +
    + + +
    + +
    + + Reset zoom to fit all points +
    + + +
    + +
    + + + + + testing + + + +
    + + + +
    + +
    + + + +
    + + + + +
    + +
    + + + + + + + Help with interaction controls. + +
    + Classes + Number 10
    +

    3D Label Intro

    + recommned: 👍
    + custom interest: ✅
    + custom not interest: ❌
    + + majority: 🟢
    + +
    Click anywhere to dismiss.
    +
    +
    + + +

    Warning

    +

    You need to check data related box first before selecting "show visualization error".

    +
    + OK +
    +
    + + +

    Warning

    +

    You need to check data related box first before selecting "fix visualization error".

    +
    + OK +
    +
    + + +

    Warning

    +

    You need to check data related box first before selecting "highlight critical change".

    +
    + OK +
    +
    + + +

    Warning

    +

    You need to check data related box first before highlighting points with defined confidence change.

    +
    + OK +
    +
    + + + +

    Warning

    +

    Current number of points in focus is greater than 2000, please focus on less number of points!

    +
    + OK +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + +
    +
    + + +
    + + +`; diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-comparator.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-comparator.ts new file mode 100644 index 0000000000000000000000000000000000000000..91a93c74d519ca9e617cb0dbe2c5fd1aeea1b108 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-comparator.ts @@ -0,0 +1,2774 @@ + +import { PolymerElement } from '@polymer/polymer'; +import { customElement, observe, property } from '@polymer/decorators'; +import {Vector3} from 'three'; +import { setIntersection } from './util'; +import{ getcontraVisBoldIndices, getcontraVisHighlightIndices, updateSessionStateForInstance, getIsAnimating, getLastIteration, getScene, getHiddenBackground, getHighlightedPointIndices, getConfChangeIndices, getNowShowIndicates, getProperties, getPreviousHover, getAllResPositions,getPredChangeIndices, getSelectedTotalEpoch, getIteration, getIsAdjustingSel, updateStateForInstance,getQueryResAnormalCleanIndecates, getAcceptIndicates, getCustomSelection, getCheckBoxDom, getRejectIndicates, getPreviousIndecates, getCurrentSessionState } from './globalState'; +import { LegacyElementMixin } from '../../../components/polymer/legacy_element_mixin'; +import '../../../components/polymer/irons_and_papers'; + +import { AnalyticsLogger } from './analyticsLogger'; +import { template } from './vz-comparator.html'; +import { + ColorOption, + ColumnStats, + DistanceFunction, + DataPoint, + DataProto, + DataSet, + getProjectionComponents, + PointMetadata, + Projection, + SpriteAndMetadataInfo, + State, + stateGetAccessorDimensions, +} from './data'; +import './vz-projector-metadata-card'; +import { + ServingMode, + DataProvider, + analyzeMetadata, + EmbeddingInfo, +} from './data-provider'; +import { DemoDataProvider } from './data-provider-demo'; +import { ProtoDataProvider } from './data-provider-proto'; +import { ServerDataProvider } from './data-provider-server'; +import './vz-projector-projections-panel'; +import './vz-projector-bookmark-panel'; +import './vz-projector-data-panel'; +import './vz-projector-inspector-panel'; +import { ProjectorScatterPlotAdapter } from './projectorScatterPlotAdapter'; +import { + DistanceMetricChangedListener, + HoverListener, + ProjectionChangedListener, + ProjectorEventContext, + SelectionChangedListener, +} from './projectorEventContext'; +import * as knn from './knn'; +import * as logging from './logging'; +import * as util from './util'; +import { MouseMode } from './scatterPlot'; + +/** + * The minimum number of dimensions the data should have to automatically + * decide to normalize the data. + */ +const THRESHOLD_DIM_NORMALIZE = 50; +const POINT_COLOR_MISSING = 'black'; +const INDEX_METADATA_FIELD = '__index__'; + +/** + * Save the initial URL query params, before the AppRoutingEffects initialize. + */ +const initialURLQueryString = window.location.search; + +@customElement('vz-comparator') +class Comparator + extends LegacyElementMixin(PolymerElement) + implements ProjectorEventContext { + static readonly template = template; + + + @property({ type: String }) + routePrefix: string; + + @property({ type: String }) + dataProto: string; + + @property({ type: String }) + servingMode: ServingMode; + + // The path to the projector config JSON file for demo mode. + @property({ type: String }) + projectorConfigJsonPath: string; + + @property({ type: Boolean }) + pageViewLogging: boolean; + + @property({ type: Boolean }) + eventLogging: boolean; + + @property({ type: Object }) + metadataStyle: any + + /** + * DVI properties + */ + @property({ type: String }) + DVIServer: string + + @property({ type: Boolean }) + showlabeled: boolean = true; + + @property({ type: Boolean }) + showUnlabeled: boolean = false; + + @property({ type: Boolean }) + showTesting: boolean = false; + + @property({ type: Boolean }) + showVisError: boolean = false; + + @property({ type: Boolean }) + fixVisError: boolean = false; + + @property({ type: Boolean }) + highlightChange: boolean = false; + + @property({ type: Boolean }) + highlightConfChange: boolean = false; + + @property({ type: Boolean }) + _showNotAvaliable: boolean = false + + @property({ type: Boolean }) + showUnlabeledCheckbox: boolean = false + + @property({ type: Number }) + confEditorInput: number; + + @property({ type: Number }) + instanceId: number; + + @property({type: Array}) + contraVisHighlightIndices: Array = []; + + @property({type: Boolean}) + isContraVis: boolean; + + @property({type: Array}) + contraVisBoldIndices: Array = []; + + @property({ type: Number }) + currentHoverIndex: number; + + // The working subset of the data source's original data set. + dataSet: DataSet; + iteration: number; + last_iteration: number; + private selectionChangedListeners: SelectionChangedListener[]; + private hoverListeners: HoverListener[]; + private projectionChangedListeners: ProjectionChangedListener[]; + private distanceMetricChangedListeners: DistanceMetricChangedListener[]; + private originalDataSet: DataSet; + private dataSetBeforeFilter: DataSet; + private projectorScatterPlotAdapter: ProjectorScatterPlotAdapter; + private dim: number; + private dataSetFilterIndices: number[]; + private selectedPointIndices: number[]; + private neighborsOfFirstPoint: knn.NearestEntry[]; + private hoverPointIndex: number; + private editMode: boolean; + private dataProvider: DataProvider; + private selectedColorOption: ColorOption; + private selectedLabelOption: string; + private normalizeData: boolean; + private projection: Projection; + private metadataFile: string; + /** Polymer component panels */ + private inspectorPanel: any; + private dataPanel: any; + private bookmarkPanel: any; + private projectionsPanel: any; + private metadataCard: any; + private statusBar: HTMLDivElement; + private analyticsLogger: AnalyticsLogger; + private backgroundPoints: any; + private currentIteration: number + + private goDownBtn: any; + private goUpBtn: any; + private goLeftBtn: any; + private goRightBtn: any; + + private helpBtn: any; + + private timer: any; + + private intervalFlag: boolean + + private registered: boolean + private showConfChangeButton: HTMLButtonElement; + private confChangeInput: number; + + + + + async ready() { + super.ready(); + + logging.setDomContainer(this as HTMLElement); + this.analyticsLogger = new AnalyticsLogger( + this.pageViewLogging, + this.eventLogging + ); + this.analyticsLogger.logPageView('embeddings'); + const hasWebGLSupport = await util.hasWebGLSupport(); + if (!hasWebGLSupport) { + this.analyticsLogger.logWebGLDisabled(); + logging.setErrorMessage( + 'Your browser or device does not have WebGL enabled. Please enable ' + + 'hardware acceleration, or use a browser that supports WebGL.' + ); + return; + } + this.selectionChangedListeners = []; + this.hoverListeners = []; + this.projectionChangedListeners = []; + this.distanceMetricChangedListeners = []; + this.selectedPointIndices = []; + this.neighborsOfFirstPoint = []; + this.timer = null + this.editMode = false; + this.dataPanel = this.$['data-panel'] as any; // DataPanel + this.inspectorPanel = this.$['inspector-panel'] as any; // InspectorPanel + this.projectionsPanel = this.$['projections-panel'] as any; // ProjectionsPanel + this.bookmarkPanel = this.$['bookmark-panel'] as any; // BookmarkPanel + this.metadataCard = this.$['metadata-card'] as any; // MetadataCard + this.statusBar = this.$$('#status-bar') as HTMLDivElement; + this.helpBtn = this.$$('#help-3d-icon') as HTMLElement; + this.inspectorPanel.initialize(this, this as ProjectorEventContext); + this.projectionsPanel.initialize(this); + this.bookmarkPanel.initialize(this, this as ProjectorEventContext); + if (!this.isContraVis) { + this.showConfChangeButton = this.$$('.show-button') as HTMLButtonElement; + this.showConfChangeButton.disabled = false; + } + + this.setupUIControls(); + + this.initializeDataProvider(); + this.d3loader() + this.iteration = 0; + this.last_iteration = 1; + this.currentIteration = 0 + + this.showlabeled = true + this.showUnlabeled = false + this.showTesting = false + this.showVisError = false + this.fixVisError = false + this.highlightChange = false + this.highlightConfChange = false; + this.contraVisHighlightIndices = [] + this.contraVisBoldIndices = [] + this.registered = false + + this.showUnlabeledCheckbox = window.sessionStorage.taskType === 'active learning' + + + this.intervalFlag = true + this._showNotAvaliable = false + + this.metadataStyle = { + left: '320px', + top: '120px' + } + + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + // await fetch("standalone_projector_config.json", { method: 'GET' }) + // .then(response => response.json()) + // .then(data => { this.DVIServer = data.DVIServerIP + ":" + data.DVIServerPort; }) + this.DVIServer = window.sessionStorage.ipAddress + }; + //todo make it smaller d3vs reference + d3loader() { + let that = this + new Promise((resolve) => { + let url = "https://d3js.org/d3.v5.min.js" + + let script = document.createElement('script') + script.setAttribute('src', url) + + script.onload = () => { + resolve(true) + + that.initialTree() + } + document.body.append(script) + }) + } + + async initialTree(only?: number, needRemove?: boolean) { + const d3 = window.d3 + + let curr_id = this.instanceId + + let svgDom: any = this.$$("#mysvg-"+curr_id); + + while (svgDom?.firstChild) { + svgDom.removeChild(svgDom.lastChild); + } + if (needRemove) { + return + } + + + let headers = new Headers(); + await fetch(`http://${window.sessionStorage.ipAddress}/get_itertaion_structure?path=${window.sessionStorage.content_path}`, { + method: 'POST', + headers: headers, + mode: 'cors' + }) + .then(response => response.json()) + .then(res => { + if (only) { + res.structure = [{ value: only, name: only, pid: "" }] + } + let total = res.structure?.length + + res.structure.length = getSelectedTotalEpoch(this.instanceId) + updateStateForInstance(this.instanceId, { treejson: res.structure }) + + let data = res.structure + + + function tranListToTreeData(arr) { + const newArr = [] + const map = {} + + arr.forEach(item => { + // 为了计算方便,统一添加children + item.children = [] + // 构建一个字典 + const key = item.value + map[key] = item + }) + + // 2. 对于arr中的每一项 + arr.forEach(item => { + const parent = map[item.pid] + if (parent) { + // 如果它有父级,把当前对象添加父级元素的children中 + parent.children.push(item) + } else { + // 如果它没有父级(pid:''),直接添加到newArr + newArr.push(item) + } + }) + + return newArr + } + data = tranListToTreeData(data)[0] + var margin = 50; + var svg = d3.select(svgDom); + var width = svg.attr("width"); + var height = svg.attr("height"); + + //create group + var g = svg.append("g") + .attr("transform", "translate(" + margin + "," + 20 + ")"); + + + //create layer layout + var hierarchyData = d3.hierarchy(data) + .sum(function (d, i) { + return d.value; + }); + + + //create tree + let len = total + + let svgWidth = len * 40 + if (window.sessionStorage.taskType === 'active learning') { + svgWidth = 1000 + } + + svgDom.style.width = svgWidth + 200 + if (window.sessionStorage.selectedSetting !== 'active learning' && window.sessionStorage.selectedSetting !== 'dense al') { + svgDom.style.height = 90 + } + + + var tree = d3.tree() + .size([100, svgWidth]) + .separation(function (a, b) { + return (a.parent == b.parent ? 1 : 2) / a.depth; + }); + + //init + var treeData = tree(hierarchyData) + + //line node + var nodes = treeData.descendants(); + var links = treeData.links(); + + //line + var link = d3.linkHorizontal() + .x(function (d) { + return d.y; + }) //linkHorizontal + .y(function (d) { + return d.x; + }); + + + //path + g.append('g') + .selectAll('path') + .data(links) + .enter() + .append('path') + .attr('d', function (d, i) { + var start = { + x: d.source.x, + y: d.source.y + }; + var end = { + x: d.target.x, + y: d.target.y + }; + return link({ + source: start, + target: end + }); + }) + .attr('stroke', '#452d8a') + .attr('stroke-width', 1) + .attr('fill', 'none'); + + + //创建节点与文字分组 + var gs = g.append('g') + .selectAll('.g') + .data(nodes) + .enter() + .append('g') + .attr('transform', function (d, i) { + return 'translate(' + d.y + ',' + d.x + ')'; + }); + + //绘制文字和节点 + if(getIteration(this.instanceId) == undefined){ + updateStateForInstance(this.instanceId, {iteration:1}) + } + gs.append('circle') + .attr('r', 8) + .attr('fill', function (d, i) { + return d.data.value == getIteration(this.instanceId) ? 'orange' : '#452d8a' + }) + .attr('stroke-width', 1) + .attr('stroke', function (d, i) { + return d.data.value == getIteration(this.instanceId) ? 'orange' : '#452d8a' + }) + + gs.append('text') + .attr('x', function (d, i) { + return d.children ? 5 : 10; + }) + .attr('y', function (d, i) { + return d.children ? -20 : -5; + }) + .attr('dy', 10) + .text(function (d, i) { + if (window.sessionStorage.taskType === 'active learning') { + return `${d.data.value}|${d.data.name}`; + } else { + return `${d.data.value}`; + } + + }) + }) + let that = this + setTimeout(() => { + let list = svgDom.querySelectorAll("circle"); + for (let i = 0; i <= list.length; i++) { + let c = list[i] + if (c) { + c.style.cursor = "pointer" + if (!only) { + c.addEventListener('click', (e: any) => { + if (e.target.nextSibling.innerHTML != getIteration(this.instanceId)) { + let value = e.target.nextSibling.innerHTML.split("|")[0] + that.projectionsPanel.jumpTo(Number(value)) + console.log("finish GETiTERATION JUMPTO") + updateSessionStateForInstance(this.instanceId, {acceptIndicates:""}) + updateSessionStateForInstance(this.instanceId, {rejectIndicates:""}) + // updateStateForInstance(this.instanceId, { acceptIndicates: "" }) + // updateStateForInstance(this.instanceId, { rejectIndicates: "" }) + // getAcceptIndicates(this.instanceId) = "" + // getRejectIndicates(this.instanceId) = "" + // window.sessionStorage.setItem('acceptIndicates', "") + // window.sessionStorage.setItem('rejectIndicates', "") + this.initialTree() + } + }) + } + } + } + }, 2000) + } + + readyregis() { + let el: any = this.$$('#metadata-card') + if (!el) { + return + } + let that = this + this.registered = true + el.onmousedown = function (e: any) { + e = e || window.event; + document.body.style.cursor = 'move' + + // 初始位置 + let offleft = Number(that.metadataStyle.left.replace('px', '')) || 0; + let offTop = Number(that.metadataStyle.top.replace('px', '')) || 0; + // 鼠标点击位置 + let startX = e.clientX; + let startY = e.clientY; + + el.setCapture && el.setCapture(); + + + const handler = function (event: any) { + event = event || window.event; + + // mouse stop position + let endX = event.clientX; + let endY = event.clientY; + + // distance + let moveX = endX - startX; + let moveY = endY - startY; + + // final position + let lastX = offleft + moveX; + let lastY = offTop + moveY; + + //boundry + if ( + lastX > + document.documentElement.clientWidth - el.clientWidth - 20 + ) { + lastX = document.documentElement.clientWidth - el.clientWidth - 20; + } else if (lastX < 20) { + lastX = 0; + } + + if ( + lastY > + document.documentElement.clientWidth - el.clientWidth - 20 + ) { + lastY = + document.documentElement.clientHeight - el.clientHeight - 20; + } else if (lastY < 20) { + lastY = 0; + } + + el.style.left = lastX + "px"; + el.style.top = lastY + "px"; + that.metadataStyle = { + left: lastX + "px", + top: lastY + "px" + } + }; + document.addEventListener('mousemove', handler, false); + document.addEventListener( + 'mouseup', + () => { + document.body.style.cursor = 'default' + document.removeEventListener('mousemove', handler); + }, + false, + ); + // + document.onmouseup = function () { + document.ontouchmove = null; + //@ts-ignore + document.releaseCapture && document.releaseCapture(); + }; + return false; + } + } + //Observe changes for all relevant properties. + @observe('showUnlabeled', 'showlabeled', 'showTesting', 'showVisError') + _combinedShowCheckboxChanged() { + // Check if 'showVisError' is checked without any other box checked + if (this.showVisError && !(this.showUnlabeled || this.showTesting || this.showlabeled)) { + this.showVisError = false; // Uncheck 'showVisError' + // Display your dialog warning + this.highlightConfChange = false; + (this.$.showVisWarning as any).open(); + return; + } + + } + + @observe('showUnlabeled', 'showlabeled', 'showTesting', 'fixVisError') + _combinedFixCheckboxChanged() { + // Check if 'showVisError' is checked without any other box checked + if (this.fixVisError && !(this.showUnlabeled || this.showTesting || this.showlabeled)) { + this.fixVisError = false; // Uncheck 'showVisError' + // Display your dialog warning + (this.$.showFixVisWarning as any).open(); + return; + } + + } + + @observe('showUnlabeled', 'showlabeled', 'showTesting', 'highlightChange') + _combinedHighlightChangeCheckboxChanged() { + // Check if 'showVisError' is checked without any other box checked + if (this.highlightChange && !(this.showUnlabeled || this.showTesting || this.showlabeled)) { + this.highlightChange = false; // Uncheck 'showVisError' + // Display your dialog warning + this.highlightConfChange = false; + (this.$.showHighlightChangeWarning as any).open(); + return; + } + + } + + + @observe('highlightChange') + _combinedshowVisHighlightChangeCheckboxChanged() { + // Check if 'showVisError' is checked without any other box checked + if (this.showVisError) { + this.highlightChange = false; // Uncheck 'showVisError' + // Display your dialog warning + this.highlightConfChange = false; + (this.$.showHighlightChangeWarning as any).open(); + return; + } + + } + @observe('showVisError') + _combinedHighlightChangeShowVisCheckboxChanged() { + // Check if 'showVisError' is checked without any other box checked + if (this.highlightChange) { + this.showVisError = false; // Uncheck 'showVisError' + // Display your dialog warning + this.highlightConfChange = false; + (this.$.showVisWarning as any).open(); + return; + } + } + // @observe('highlightVisError') + // _combinedHighlightConfChangeShowVisCheckboxChanged() { + // // Check if 'showVisError' is checked without any other box checked + // if (this.highlightConfChange) { + // this.showVisError = false; // Uncheck 'showVisError' + // // Display your dialog warning + // (this.$.showVisWarning as any).open(); + // return; + // } + // }_ + // @observe('fixVisError') + // _fixVisChanged() { + // var left = this.state.currentFocus[0] + // var right = this.state.currentFocus[1] + // var bottom = this.state.currentFocus[2] + // var top = this.state.currentFocus[3] + // var allPointsPositions = this.state.worldSpacePointPositions[getIteration(this.instanceId)] + // let currVisErrorIndices = getHighlightedPointIndices(this.instanceId) + // let lens = currVisErrorIndices.length + // let focusPointsIndices = Array.from({ length: 2000 }); + // let currIndex = 0 + // // only count the number of vis error points, if exceeds 2000, throws a warning + // for (let j = 0; j < lens; j++) { + // if (currIndex >= 2000) { + // this.fixVisError = false; + // (this.$.showExceedMaxWarning as any).open(); + // return; + // } + // let start = currVisErrorIndices[j] * 3 + // let posX = allPointsPositions[start] + // let posY = allPointsPositions[start + 1] + + // if (posX >= left && posX <= right && posY >= bottom && posY <= top) { + // focusPointsIndices[currIndex] = currVisErrorIndices[j] + // currIndex += 1 + // } + // } + + // this.projectionsPanel.projectDVI() + // // this allows data points positions to be updated on canvas + // queryCurrentFocus(focusPointsIndices) + // } + + @observe('showlabeled', 'showVisError') + _labeledChanged() { + this.highlightConfChange = false; + let indicates = [] + if (getNowShowIndicates(this.instanceId)) { + if (this.showlabeled) { + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] + if (indicate === 0 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + // this.projector.filterDataset(getNowShowIndicates(this.instanceId)) + } else { + ///隐藏labeled + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 0 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + } + let highlightedPointIndices; + + if (this.showVisError) { + highlightedPointIndices = getHighlightedPointIndices(this.instanceId)[this.iteration] + highlightedPointIndices = highlightedPointIndices.filter(value => getNowShowIndicates(this.instanceId).includes(value)) + this.filterDataset(getNowShowIndicates(this.instanceId), false, highlightedPointIndices = highlightedPointIndices, undefined, undefined,undefined) + } else { + this.filterDataset(getNowShowIndicates(this.instanceId)) + } + } + } + + + @observe('showUnlabeled', 'showVisError') + _unLabelChanged() { + this.highlightConfChange = false; + let indicates = [] + if (getNowShowIndicates(this.instanceId)) { + if (this.showUnlabeled) { + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] + if (indicate === 1 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + // this.projector.filterDataset(getNowShowIndicates(this.instanceId)) + } else { + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 1 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + } + let highlightedPointIndices; + if (this.showVisError) { + highlightedPointIndices = getHighlightedPointIndices(this.instanceId)[this.iteration] + highlightedPointIndices = highlightedPointIndices.filter(value => getNowShowIndicates(this.instanceId).includes(value)) + this.filterDataset(getNowShowIndicates(this.instanceId), false, highlightedPointIndices = highlightedPointIndices, undefined, undefined, undefined) + } else { + this.filterDataset(getNowShowIndicates(this.instanceId)) + } + } + } + + @observe('showTesting', 'showVisError') + _testingChanged() { + this.highlightConfChange = false; + let indicates = [] + if (getNowShowIndicates(this.instanceId)) { + if (this.showTesting) { + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] + if (indicate === 2 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + // this.projector.filterDataset(getNowShowIndicates(this.instanceId)) + } else { + + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 2 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + } + let highlightedPointIndices; + if (this.showVisError) { + highlightedPointIndices = getHighlightedPointIndices(this.instanceId)[this.iteration] + + highlightedPointIndices = highlightedPointIndices.filter(value => getNowShowIndicates(this.instanceId).includes(value)) + + this.filterDataset(getNowShowIndicates(this.instanceId), false, highlightedPointIndices = highlightedPointIndices, undefined, undefined, undefined) + } else { + this.filterDataset(getNowShowIndicates(this.instanceId)) + } + } + } + + + // @observe('showVisError') + // _visErrorChanged() { + // let indicates = [] + // if (getNowShowIndicates(this.instanceId)) { + // if (this.showVisError) { + // for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + // let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] + // if (indicate === 3 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + // indicates.push(i) + // } + // } + // getNowShowIndicates(this.instanceId) = indicates + // //this.projector.filterDataset(getNowShowIndicates(this.instanceId)) + // } else { + + // for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + // if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 3 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + // indicates.push(i) + // } + // } + // getNowShowIndicates(this.instanceId) = indicates + // } + // this.filterDataset(getNowShowIndicates(this.instanceId)) + // } + // } + + + @observe('showlabeled', 'highlightChange') + _predLabeledChanged() { + this.highlightConfChange = false; + let indicates = [] + if (getNowShowIndicates(this.instanceId)) { + if (this.showlabeled) { + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] + if (indicate === 0 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + // this.projector.filterDataset(getNowShowIndicates(this.instanceId)) + } else { + ///隐藏labeled + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 0 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + } + let predChangeIndices; + + if (this.highlightChange) { + this.highlightCriticalChange() + predChangeIndices = getPredChangeIndices(this.instanceId) + predChangeIndices = predChangeIndices.filter(value => getNowShowIndicates(this.instanceId).includes(value)) + this.filterDataset(getNowShowIndicates(this.instanceId), false, undefined, predChangeIndices = predChangeIndices, undefined, undefined) + } else { + this.filterDataset(getNowShowIndicates(this.instanceId)) + } + } + } + + @observe('showUnlabeled', 'highlightChange') + _predUnLabelChanged() { + this.highlightConfChange = false; + let indicates = [] + if (getNowShowIndicates(this.instanceId)) { + if (this.showUnlabeled) { + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] + if (indicate === 1 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + // this.projector.filterDataset(getNowShowIndicates(this.instanceId)) + } else { + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 1 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + } + let predChangeIndices; + if (this.highlightChange) { + this.highlightCriticalChange() + predChangeIndices = getPredChangeIndices(this.instanceId) + predChangeIndices = predChangeIndices.filter(value => getNowShowIndicates(this.instanceId).includes(value)) + this.filterDataset(getNowShowIndicates(this.instanceId), false, undefined, predChangeIndices = predChangeIndices, undefined, undefined) + } else { + this.filterDataset(getNowShowIndicates(this.instanceId)) + } + } + } + + + + + @observe('showTesting', 'highlightChange') + _predTestingChanged() { + this.highlightConfChange = false; + let indicates = [] + if (getNowShowIndicates(this.instanceId)) { + if (this.showTesting) { + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] + if (indicate === 2 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + // this.projector.filterDataset(getNowShowIndicates(this.instanceId)) + } else { + + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 2 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + } + let predChangeIndices; + if (this.highlightChange) { + this.highlightCriticalChange() + predChangeIndices = getPredChangeIndices(this.instanceId) + + predChangeIndices = predChangeIndices.filter(value => getNowShowIndicates(this.instanceId).includes(value)) + + this.filterDataset(getNowShowIndicates(this.instanceId), false, undefined, predChangeIndices = predChangeIndices, undefined, undefined) + } else { + this.filterDataset(getNowShowIndicates(this.instanceId)) + } + } + } + + +// @observe( 'contraVisHighlightIndices') +// _contraVisLabeledChanged() { +// // this.highlightConfChange = false; +// performance.mark('startTasklabel') +// let indicates = [] +// if (getNowShowIndicates(this.instanceId)) { +// if (this.showlabeled) { +// for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { +// let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] +// if (indicate === 0 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { +// indicates.push(i) +// } +// } +// updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) +// // getNowShowIndicates(this.instanceId) = indicates +// // this.projector.filterDataset(getNowShowIndicates(this.instanceId)) +// } else { +// ///隐藏labeled +// for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { +// if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 0 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { +// indicates.push(i) +// } +// } +// updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) +// // getNowShowIndicates(this.instanceId) = indicates +// } +// let predChangeIndices; + +// if (this.contraVisHighlightIndices && this.contraVisHighlightIndices.length !== 0) { + +// updateStateForInstance(this.instanceId, {contraVisHighlightIndices:this.contraVisHighlightIndices}) +// predChangeIndices = getcontraVisHighlightIndices(this.instanceId) + +// predChangeIndices = predChangeIndices.filter(value => getNowShowIndicates(this.instanceId).includes(value)) + +// this.filterDataset(getNowShowIndicates(this.instanceId), false, undefined, undefined, undefined, this.contraVisHighlightIndices) +// } else { +// this.filterDataset(getNowShowIndicates(this.instanceId)) +// } +// } +//performance.mark('startTasklabel') +// performance.mark('endTasklabel'); +// // Measure the time between the start and end marks +// performance.measure('measureTasklabel', 'startTasklabel', 'endTasklabel'); + +// // Access and log the measurement result +// const measure = performance.getEntriesByName('measureTasklabel')[0]; +// console.log(`The task took ${measure.duration} milliseconds.`); +// } + + @observe( 'contraVisHighlightIndices') + + _contraVisUnLabelChanged() { + // this.highlightConfChange = false; + + performance.mark('startTask') + let indicates = [] + if (getNowShowIndicates(this.instanceId)) { + // if (this.showUnlabeled) { + // for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + // let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] + // if (indicate === 1 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + // indicates.push(i) + // } + // } + // updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // // getNowShowIndicates(this.instanceId) = indicates + // // this.projector.filterDataset(getNowShowIndicates(this.instanceId)) + // } else { + // for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + // if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 1 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + // indicates.push(i) + // } + // } + // updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // // getNowShowIndicates(this.instanceId) = indicates + // } + let predChangeIndices; + + + if (this.contraVisHighlightIndices && this.contraVisHighlightIndices.length !== 0) { + updateStateForInstance(this.instanceId, {contraVisHighlightIndices:this.contraVisHighlightIndices}) + predChangeIndices = getcontraVisHighlightIndices(this.instanceId) + predChangeIndices = predChangeIndices.filter(value => getNowShowIndicates(this.instanceId).includes(value)) + + this.filterDataset(getNowShowIndicates(this.instanceId), false, undefined, undefined,undefined, this.contraVisHighlightIndices) + } else { + + this.filterDataset(getNowShowIndicates(this.instanceId)) + } + } + performance.mark('endTask'); + // Measure the time between the start and end marks + performance.measure('measureTask', 'startTask', 'endTask'); + + // Access and log the measurement result + const measure = performance.getEntriesByName('measureTask')[0]; + console.log(`The task took ${measure.duration} milliseconds.`); + } + // // Mark the end of the task + + + + + + +// @observe('contraVisHighlightIndices') +// _contraVisTestingChanged() { +// performance.mark('startTask1') +// // this.highlightConfChange = false; +// let indicates = [] +// if (getNowShowIndicates(this.instanceId)) { +// if (this.showTesting) { +// for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { +// let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] +// if (indicate === 2 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { +// indicates.push(i) +// } +// } +// updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) +// // getNowShowIndicates(this.instanceId) = indicates +// // this.projector.filterDataset(getNowShowIndicates(this.instanceId)) +// } else { + +// for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { +// if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 2 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { +// indicates.push(i) +// } +// } +// updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) +// // getNowShowIndicates(this.instanceId) = indicates +// } + +// let predChangeIndices; +// if (this.contraVisHighlightIndices && this.contraVisHighlightIndices.length !== 0) { +// updateStateForInstance(this.instanceId, {contraVisHighlightIndices:this.contraVisHighlightIndices}) +// predChangeIndices = getcontraVisHighlightIndices(this.instanceId) + +// predChangeIndices = predChangeIndices.filter(value => getNowShowIndicates(this.instanceId).includes(value)) + +// this.filterDataset(getNowShowIndicates(this.instanceId), false, undefined, undefined, undefined, this.contraVisHighlightIndices) +// } else { +// this.filterDataset(getNowShowIndicates(this.instanceId)) +// } +// } +// performance.mark('endTask1'); +// // Measure the time between the start and end marks +// performance.measure('measureTask1', 'startTask1', 'endTask1'); + +// // Access and log the measurement result +// const measure = performance.getEntriesByName('measureTask1')[0]; +// console.log(`The task took ${measure.duration} milliseconds.`); +// } + @observe('contraVisBoldIndices') + _ContraVisBoldChanged() { + if (this.contraVisBoldIndices) { + updateStateForInstance(this.instanceId, {contraVisBoldIndices:this.contraVisBoldIndices}) + console.log("bold",this.contraVisBoldIndices) + // let predChangeIndices; + // predChangeIndices = getcontraVisBoldIndices(this.instanceId) + // predChangeIndices = predChangeIndices.filter(value => getNowShowIndicates(this.instanceId).includes(value)) + + // this.filterDataset(getNowShowIndicates(this.instanceId), false, undefined, undefined,undefined, this.contraVisHighlightIndices) + // } else { + + // this.filterDataset(getNowShowIndicates(this.instanceId)) + // } + console.log("get", getcontraVisBoldIndices(this.instanceId)) + this.notifySelectionChanged(getcontraVisBoldIndices(this.instanceId)) + + } + // this.projectorScatterPlotAdapter.render(); + } + + @observe('currentHoverIndex') + _notifyContainerCurrentHover() { + this.notifyHoverOverPoint(this.currentHoverIndex); + (this as any).dispatchEvent(new CustomEvent('hover-index-changed', {detail: {hoverIndex:this.currentHoverIndex, instanceId:this.instanceId}, bubbles: true, composed: true})) + } + + // @observe('highlightChange') + // _predChanged() { + // let indicates = [] + // if (getNowShowIndicates(this.instanceId)) { + // if (this.showVisError) { + // for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + // let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] + // if (indicate === 3 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + // indicates.push(i) + // } + // } + // getNowShowIndicates(this.instanceId) = indicates + // //this.projector.filterDataset(getNowShowIndicates(this.instanceId)) + // } else { + + // for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + // if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 3 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + // indicates.push(i) + // } + // } + // getNowShowIndicates(this.instanceId) = indicates + // } + // this.filterDataset(getNowShowIndicates(this.instanceId)) + // } + // } + + onIterationChange(num: number) { + updateSessionStateForInstance(this.instanceId, {iteration:String(num)}) + // updateStateForInstance(this.instanceId, {iteration:num}) + // getIteration(this.instanceId) = String(num) + + // window.sessionStorage.setItem('iteration', String(num)) + // window.iteration = num; + let indicates = [] + this.iteration = num; + if (!getIsAnimating(this.instanceId)) { + if (this.showTesting === false) { + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 2 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + } + this.filterDataset(getNowShowIndicates(this.instanceId)) + + } + if (this.inspectorPanel) { + if (window.sessionStorage.taskType === 'active learning' && getIteration(this.instanceId) !== 1) { + this.inspectorPanel.updateDisabledStatues(true) + } else { + this.inspectorPanel.updateDisabledStatues(false) + } + + } + this.initialTree() + } + + + + setSelectedLabelOption(labelOption: string) { + this.selectedLabelOption = labelOption; + this.metadataCard.setLabelOption(this.selectedLabelOption); + this.projectorScatterPlotAdapter.setLabelPointAccessor(labelOption); + this.projectorScatterPlotAdapter.updateScatterPlotAttributes(); + this.projectorScatterPlotAdapter.render(); + } + setSelectedColorOption(colorOption: ColorOption) { + this.selectedColorOption = colorOption; + this.projectorScatterPlotAdapter.setLegendPointColorer( + this.getLegendPointColorer(colorOption) + ); + this.projectorScatterPlotAdapter.updateScatterPlotAttributes(); + this.projectorScatterPlotAdapter.render(); + } + setNormalizeData(normalizeData: boolean) { + this.normalizeData = normalizeData; + this.setCurrentDataSet(this.originalDataSet.getSubset()); + } + + //link to datapanel + updateDataSet( + ds: DataSet, + spriteAndMetadata?: SpriteAndMetadataInfo, + metadataFile?: string + ) { + // this.dataSetFilterIndices = null; + // this.originalDataSet = ds; + // if (ds != null) { + // this.normalizeData = + // this.originalDataSet.dim[1] >= THRESHOLD_DIM_NORMALIZE; + // spriteAndMetadata = spriteAndMetadata || {}; + // console.log("spriteAndMetadata", spriteAndMetadata) + // if (spriteAndMetadata.pointsInfo == null) { + // let [pointsInfo, stats] = this.makeDefaultPointsInfoAndStats(ds.points); + // spriteAndMetadata.pointsInfo = pointsInfo; + // spriteAndMetadata.stats = stats; + // console.log("checkNULL") + // } + // let metadataMergeSucceeded = ds.mergeMetadata(spriteAndMetadata); + // if (!metadataMergeSucceeded) { + // return; + // } + // } + if (this.projectorScatterPlotAdapter != null) { + if (ds == null) { + console.log("dsnyullll", this.instanceId) + this.projectorScatterPlotAdapter.setLabelPointAccessor(null); + this.setProjection(null); + } else { + console.log("DSSS", ds) + console.log("NOTNULL", this.instanceId) + this.projectorScatterPlotAdapter.updateScatterPlotPositions(); + this.projectorScatterPlotAdapter.updateScatterPlotAttributes(); + this.projectorScatterPlotAdapter.resize(); + this.projectorScatterPlotAdapter.render(); + + } + } + if (ds != null) { + console.log("dsnyullll22222", this.instanceId) + // this.dataPanel.setNormalizeData(this.normalizeData); + this.setCurrentDataSet(ds.getSubset()); + this.projectorScatterPlotAdapter.setLabelPointAccessor( + this.selectedLabelOption + ); + // this.inspectorPanel.datasetChanged(); + // this.inspectorPanel.metadataChanged(spriteAndMetadata); + // this.projectionsPanel.metadataChanged(spriteAndMetadata); + // this.dataPanel.metadataChanged(spriteAndMetadata, metadataFile); + // //reset + if (getIteration(this.instanceId)) { + this.projectionsPanel.jumpTo(Number(getIteration(this.instanceId))) + } else { + this.projectionsPanel.jumpTo(Number(1)) + } + console.log("FInish updatedatset jumpTo") + //RECALL + //reset + //reset + // if (getCurrentSessionState(this.instanceId).acceptIndicates) { + // + // // console.log("yourmom",getAcceptIndicates(this.instanceId)) + // updateStateForInstance(this.instanceId, { acceptIndicates: getCurrentSessionState(this.instanceId).acceptIndicates.split(",").map(parseFloat) }) + + // // getAcceptIndicates(this.instanceId) = getAcceptIndicates(this.instanceId).split(",").map(parseFloat) + // } + // if (getCurrentSessionState(this.instanceId).rejectIndicates) { + // updateStateForInstance(this.instanceId, { rejectIndicates: getCurrentSessionState(this.instanceId).rejectIndicates.split(",").map(parseFloat) }) + // // getRejectIndicates(this.instanceId) = getRejectIndicates(this.instanceId).split(",").map(parseFloat) + // } + // if (getCurrentSessionState(this.instanceId).customSelection) { + // updateStateForInstance(this.instanceId, { customSelection: getCurrentSessionState(this.instanceId).customSelection.split(",").map(parseFloat) }) + // // getCustomSelection(this.instanceId) = getCustomSelection(this.instanceId).split(",").map(parseFloat) + // } + } else { + console.log("NOTNULL22222", this.instanceId) + this.setCurrentDataSet(null); + // this.projectorScatterPlotAdapter + } + } + metadataEdit(metadataColumn: string, metadataLabel: string) { + this.selectedPointIndices.forEach( + (i) => (this.dataSet.points[i].metadata[metadataColumn] = metadataLabel) + ); + this.neighborsOfFirstPoint.forEach( + (p) => + (this.dataSet.points[p.index].metadata[metadataColumn] = metadataLabel) + ); + this.dataSet.spriteAndMetadataInfo.stats = analyzeMetadata( + this.dataSet.spriteAndMetadataInfo.stats.map((s) => s.name), + this.dataSet.points.map((p) => p.metadata) + ); + this.metadataChanged(this.dataSet.spriteAndMetadataInfo); + this.metadataEditorContext(true, metadataColumn); + } + metadataChanged( + spriteAndMetadata: SpriteAndMetadataInfo, + metadataFile?: string + ) { + if (metadataFile != null) { + this.metadataFile = metadataFile; + } + + this.dataSet.spriteAndMetadataInfo = spriteAndMetadata; + // this.projectionsPanel.metadataChanged(spriteAndMetadata); + this.inspectorPanel.metadataChanged(spriteAndMetadata); + // this.dataPanel.metadataChanged(spriteAndMetadata, this.metadataFile); + if (this.selectedPointIndices.length > 0) { + // at least one selected point + this.metadataCard.updateMetadata( + // show metadata for first selected point + this.dataSet.points[this.selectedPointIndices[0]].metadata + ); + } else { + // no points selected + this.metadataCard.updateMetadata(null); // clear metadata + } + this.setSelectedLabelOption(this.selectedLabelOption); + } + metadataEditorContext(enabled: boolean, metadataColumn: string) { + if (this.inspectorPanel) { + this.inspectorPanel.metadataEditorContext(enabled, metadataColumn); + } + } + setSelectedTensor(run: string, tensorInfo: EmbeddingInfo) { + this.bookmarkPanel.setSelectedTensor(run, tensorInfo, this.dataProvider); + } + updateBackgroundImg() { + this.projectorScatterPlotAdapter.updateBackground() + } + /** + * Registers a listener to be called any time the selected point set changes. + */ + registerSelectionChangedListener(listener: SelectionChangedListener) { + this.selectionChangedListeners.push(listener); + } + filterDataset(pointIndices: number[], filter?: boolean, highlightedPointIndices?: number[], predChangeIndices?: number[], confChangeIndices?: number[],contraVisHighlightIndices?:number[]) { + const selectionSize = this.selectedPointIndices.length; + /* + if (this.dataSetBeforeFilter == null) { + this.dataSetBeforeFilter = this.dataSet; + }*/ + //console.log('now',pointIndices.length,this.dataSet) + + this.dataSet.setDVIFilteredData(pointIndices); + // this.setCurrentDataSet(this.dataSet.getSubset(pointIndices)); + this.dataSetFilterIndices = pointIndices; + this.projectorScatterPlotAdapter.updateScatterPlotPositions(); + // console.log( predChangeIndices); + // console.log(highlightedPointIndices) + this.projectorScatterPlotAdapter.updateScatterPlotAttributes(filter, highlightedPointIndices, predChangeIndices, confChangeIndices, contraVisHighlightIndices); + // this.projectorScatterPlotAdapter.updateBackground() + + this.projectorScatterPlotAdapter.render() + // this.adjustSelectionAndHover(util.range(selectionSize)); + + if (getIsAdjustingSel(this.instanceId)) { + // this.boundingSelectionBtn.classList.add('actived') + this.setMouseMode(MouseMode.AREA_SELECT) + } + } + resetFilterDataset(num?) { + const originalPointIndices = this.selectedPointIndices.map( + (filteredIndex) => this.dataSet.points[filteredIndex].index + ); + + /* + this.setCurrentDataSet(this.dataSetBeforeFilter); + if (this.projection != null) { + this.projection.dataSet = this.dataSetBeforeFilter; + } + this.dataSetBeforeFilter = null;*/ + // setDVIfilter all data + let total = this.dataSet.DVIValidPointNumber[this.dataSet.tSNEIteration] + if (num) { + total = num + } + + var indices: number[]; + indices = []; + for (let i = 0; i < total; i++) { + indices.push(i); + } + this.dataSetFilterIndices = indices; + this.dataSet.setDVIFilteredData(indices); + this.projectorScatterPlotAdapter.updateScatterPlotPositions(); + this.projectorScatterPlotAdapter.updateScatterPlotAttributes(); + // this.adjustSelectionAndHover(util.range(selectionSize)); + + } + /// + setDynamicNoisy() { + // this.setDynamicStop() + if (!getCustomSelection(this.instanceId)) { + updateStateForInstance(this.instanceId, { customSelection: [] }) + // getCustomSelection(this.instanceId) = [] + } + if (!getQueryResAnormalCleanIndecates(this.instanceId)) { + updateStateForInstance(this.instanceId, { queryResAnormalCleanIndecates: [] }) + // getQueryResAnormalCleanIndecates(this.instanceId) = [] + } + let indecates = getQueryResAnormalCleanIndecates(this.instanceId).concat(getCustomSelection(this.instanceId)) + if (indecates && indecates.length) { + this.filterDataset(indecates) + } + // this.filterDataset(this.selectedPointIndices) + this.currentIteration = getIteration(this.instanceId) + + let current = 1 + let positions = getAllResPositions(this.instanceId)?.results + let interationList = [] + if (getAllResPositions(this.instanceId) && getAllResPositions(this.instanceId).bgimgList) { + updateStateForInstance(this.instanceId, { sceneBackgroundImg: getAllResPositions(this.instanceId)?.bgimgList }) + // getSceneBackgroundImg(this.instanceId) = getAllResPositions(this.instanceId)?.bgimgList + } + for (let key of Object.keys(getAllResPositions(this.instanceId)?.results)) { + interationList.push(Number(key)) + } + current = Number(interationList[0]) + let count = 0 + if (this.intervalFlag) { + this.intervalFlag = false + this.timer = window.setInterval(() => { + + this.inspectorPanel.updateCurrentPlayEpoch(current) + updateStateForInstance(this.instanceId, { iteration: current }) + // getIteration(this.instanceId) = current; + let length = this.dataSet.points.length + if (length === 60002) { + let point1 = this.dataSet.points[length - 2]; + let point2 = this.dataSet.points[length - 1]; + point1.projections['tsne-0'] = getAllResPositions(this.instanceId).grid[current][0] + point1.projections['tsne-1'] = getAllResPositions(this.instanceId).grid[current][1] + point2.projections['tsne-0'] = getAllResPositions(this.instanceId).grid[current][2] + point2.projections['tsne-1'] = getAllResPositions(this.instanceId).grid[current][3] + // point.projections['tsne-0'] = + } + + for (let i = 0; i < this.dataSet.points.length; i++) { + const point = this.dataSet.points[i]; + if (!getCustomSelection(this.instanceId) || !getCustomSelection(this.instanceId).length || getCustomSelection(this.instanceId).indexOf(i) !== -1 || getQueryResAnormalCleanIndecates(this.instanceId)?.indexOf(i) !== -1) { + point.projections['tsne-0'] = positions[current][i][0]; + point.projections['tsne-1'] = positions[current][i][1]; + point.projections['tsne-2'] = 0; + } + } + // this.dataSet.updateProjection(current) + this.projectorScatterPlotAdapter.updateScatterPlotPositions(); + this.projectorScatterPlotAdapter.updateScatterPlotAttributes(); + this.updateBackgroundImg(); + this.onIterationChange(current); + // this.projectorScatterPlotAdapter.updateScatterPlotAttributes() + this.projectorScatterPlotAdapter.render() + if (count == interationList.length - 1) { + this.inspectorPanel.playAnimationFinished() + this.setDynamicStop() + current = interationList[0] + count = 0 + + } else { + current = interationList[++count] + } + }, 1200) + } + + } + + updatePosByIndicates(current: number) { + let positions = getAllResPositions(this.instanceId)?.results + for (let i = 0; i < this.dataSet.points.length; i++) { + const point = this.dataSet.points[i]; + if (!this.selectedPointIndices.length || this.selectedPointIndices.indexOf(i) !== -1) { + point.projections['tsne-0'] = positions[current][i][0]; + point.projections['tsne-1'] = positions[current][i][1]; + point.projections['tsne-2'] = 0; + } + } + // this.dataSet.updateProjection(current) + this.projectorScatterPlotAdapter.updateScatterPlotPositions(); + this.projectorScatterPlotAdapter.updateScatterPlotAttributes(); + this.updateBackgroundImg(); + this.onIterationChange(current); + } + setDynamicStop() { + updateStateForInstance(this.instanceId, { isAnimatating: false }) + // getIsAnimating(this.instanceId) = false + if (this.timer && !this.intervalFlag) { + window.clearInterval(this.timer) + this.intervalFlag = true + this.resetFilterDataset() + } + let end = setInterval(function () { }, 10000); + for (let i = 1; i <= end; i++) { + clearInterval(i); + } + + this.iteration = this.currentIteration + let length = this.dataSet.points.length + if (length === 60002) { + let point1 = this.dataSet.points[length - 2]; + let point2 = this.dataSet.points[length - 1]; + point1.projections['tsne-0'] = getAllResPositions(this.instanceId).grid[this.iteration][0] + point1.projections['tsne-1'] = getAllResPositions(this.instanceId).grid[this.iteration][1] + point2.projections['tsne-0'] = getAllResPositions(this.instanceId).grid[this.iteration][2] + point2.projections['tsne-1'] = getAllResPositions(this.instanceId).grid[this.iteration][3] + // point.projections['tsne-0'] = + } + updateStateForInstance(this.instanceId, { iteration: this.currentIteration }) + // getIteration(this.instanceId) = this.currentIteration + this.updatePosByIndicates(getIteration(this.instanceId)) + } + + renderInTraceLine(inTrace: boolean) { + this.projectorScatterPlotAdapter.setRenderInTraceLine(inTrace) + } + + refresh() { + // this.projectorScatterPlotAdapter.scatterPlot.render() + this.metadataCard.updateCustomList(this.dataSet.points, this as ProjectorEventContext) + this.metadataCard.updateRejectList(this.dataSet.points, this as ProjectorEventContext) + // this.projectorScatterPlotAdapter.scatterPlot.render() + this.projectorScatterPlotAdapter.updateScatterPlotAttributes() + this.projectorScatterPlotAdapter.render() + } + removecustomInMetaCard() { + this.metadataCard.updateCustomList(this.dataSet.points, this as ProjectorEventContext) + this.metadataCard.updateRejectList(this.dataSet.points, this as ProjectorEventContext) + // this.inspectorPanel.refreshSearchResult() + this.inspectorPanel.updateSessionStorage() + this.projectorScatterPlotAdapter.updateScatterPlotAttributes() + this.projectorScatterPlotAdapter.render() + } + /** + * Used by clients to indicate that a selection has occurred. + */ + async notifySelectionChanged(newSelectedPointIndices: number[], selectMode?: boolean, selectionType?: string) { + performance.mark('startProcessing2'); + console.log("startttt", newSelectedPointIndices) + if (!this.registered) { + this.readyregis() + } + if (!getAcceptIndicates(this.instanceId)) { + updateStateForInstance(this.instanceId, { acceptIndicates: [] }) + } + if (!getRejectIndicates(this.instanceId)) { + updateStateForInstance(this.instanceId, { rejectIndicates: [] }) + } + updateStateForInstance(this.instanceId, { customSelection: getAcceptIndicates(this.instanceId).concat(getRejectIndicates(this.instanceId)) }) + if (selectionType === 'isALQuery' || selectionType === 'normal' || selectionType === 'isAnormalyQuery' || selectionType === 'boundingbox') { + updateStateForInstance(this.instanceId, { queryResPointIndices: newSelectedPointIndices }) + if (selectionType === 'isALQuery') { + updateStateForInstance(this.instanceId, { alQueryResPointIndices: newSelectedPointIndices }) + } else { + updateStateForInstance(this.instanceId, { alQueryResPointIndices: [] }) + } + } + + if (selectionType === 'isShowSelected') { + for (let i = 0; i < getPreviousIndecates(this.instanceId)?.length; i++) { + let index = getPreviousIndecates(this.instanceId)[i] + if (getCheckBoxDom(this.instanceId)[index]) { + + // Update the customSelection array in the state + // Clone the checkboxDom array to avoid direct mutation + const newCheckboxDom = getCheckBoxDom(this.instanceId); + + // Modify the specific checkbox's checked property + if (newCheckboxDom[index]) { + + getCheckBoxDom(this.instanceId)[index].checked = true; + } + + // Update the state with the modified checkboxDom + updateStateForInstance(this.instanceId, { checkboxDom: newCheckboxDom }); + // getCheckBoxDom(this.instanceId)[index].checked = true + } + // } + } + this.metadataCard.updateCustomList(this.dataSet.points, this as ProjectorEventContext) + this.metadataCard.updateRejectList(this.dataSet.points, this as ProjectorEventContext) + this.projectorScatterPlotAdapter.updateScatterPlotAttributes() + this.projectorScatterPlotAdapter.render() + return + } + if (selectionType === 'boundingbox') { + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + + await fetch(`http://${this.DVIServer}/boundingbox_record`, { + method: 'POST', + mode: 'cors', + body: JSON.stringify({ + "username": window.sessionStorage.username, + }), + headers: headers, + }).then(() => { + console.log('123323') + }) + updateStateForInstance(this.instanceId, { alSuggestLabelList: [] }) + updateStateForInstance(this.instanceId, { alSuggestScoreList: [] }) + // this.state.alSuggestLabelList = [] + // this.state.alSuggestScoreList = [] + updateStateForInstance(this.instanceId, {queryResPointIndices:newSelectedPointIndices}) + this.selectedPointIndices = newSelectedPointIndices + updateStateForInstance(this.instanceId, { alQueryResPointIndices: [] }) + // this.state.alQueryResPointIndices = [] + this.inspectorPanel.refreshSearchResByList(newSelectedPointIndices) + this.projectorScatterPlotAdapter.updateScatterPlotAttributes() + this.projectorScatterPlotAdapter.render() + this.selectionChangedListeners.forEach((l) => + l(this.selectedPointIndices, []) + ); + return + } + + let neighbors: knn.NearestEntry[] = []; + if ( + this.editMode && // point selection toggle in existing selection + newSelectedPointIndices.length > 0 + ) { + + // selection required + if (this.selectedPointIndices.length === 1) { + // main point with neighbors + let main_point_vector = this.dataSet.points[ + this.selectedPointIndices[0] + ].vector; + neighbors = this.neighborsOfFirstPoint.filter( + ( + n // deselect + ) => newSelectedPointIndices.filter((p) => p == n.index).length == 0 + ); + newSelectedPointIndices.forEach((p) => { + // add additional neighbors + if ( + p != this.selectedPointIndices[0] && // not main point + this.neighborsOfFirstPoint.filter((n) => n.index == p).length == 0 + ) { + let p_vector = this.dataSet.points[p].vector; + let n_dist = this.inspectorPanel.distFunc( + main_point_vector, + p_vector + ); + let pos = 0; // insertion position into dist ordered neighbors + while ( + pos < neighbors.length && + neighbors[pos].dist < n_dist // find pos + ) + pos = pos + 1; // move up the sorted neighbors list according to dist + neighbors.splice(pos, 0, { index: p, dist: n_dist }); // add new neighbor + } + }); + } else { + + // multiple selections + let updatedSelectedPointIndices = this.selectedPointIndices.filter( + (n) => newSelectedPointIndices.filter((p) => p == n).length == 0 + ); // deselect + newSelectedPointIndices.forEach((p) => { + // add additional selections + if (this.selectedPointIndices.filter((s) => s == p).length == 0) + // unselected + updatedSelectedPointIndices.push(p); + }); + this.selectedPointIndices = updatedSelectedPointIndices; // update selection + if (this.selectedPointIndices.length > 0) { + // at least one selected point + this.metadataCard.updateMetadata( + // show metadata for first selected point + this.dataSet.points[this.selectedPointIndices[0]].metadata + ); + } else { + // no points selected + this.metadataCard.updateMetadata(null); // clear metadata + } + } + } else if (selectMode == true) { + // for bounding box selection + // multiple selections + let updatedSelectedPointIndices = this.selectedPointIndices.filter( + (n) => newSelectedPointIndices.filter((p) => p == n).length == 0 + ); // deselect + + newSelectedPointIndices.forEach((p) => { + // add additional selections + if (this.selectedPointIndices.filter((s) => s == p).length == 0) + // unselected + updatedSelectedPointIndices.push(p); + }); + + this.selectedPointIndices = updatedSelectedPointIndices; // update selection + if (this.selectedPointIndices.length > 0) { + // at least one selected point + // if (this.selectedPointIndices.length == 1) { + // console.log("beforemeta") + // console.log( "metadata", this.dataSet.points[this.selectedPointIndices[0]].metadata) + // this.metadataCard.updateMetadata( + // // show metadata for first selected point + // this.dataSet.points[this.selectedPointIndices[0]].metadata + // ); + // console.log("aftermeta") + // } else { + this.metadataCard.updateMetadata(null); + // } + } else { + // no points selected + this.metadataCard.updateMetadata(null); // clear metadata + } + console.log("newselectpoint", newSelectedPointIndices) + this.inspectorPanel.updateBoundingBoxSelection(newSelectedPointIndices); + } else { + console.log("middle", newSelectedPointIndices) + // normal selection mode + this.selectedPointIndices = newSelectedPointIndices; + if (newSelectedPointIndices.length === 1 && this.dataSet.points[newSelectedPointIndices[0]].metadata.label != "background") { + /* + neighbors = this.dataSet.findNeighbors( + newSelectedPointIndices[0], + this.inspectorPanel.distFunc, + this.inspectorPanel.numNN + );*/ + + if (this.dataSet.points[newSelectedPointIndices[0]].metadata.label != "background") { + + neighbors[0] = { + index: newSelectedPointIndices[0], + dist: 0 + }; + + } + + } + + else { + this.metadataCard.updateMetadata(null); + } + + this.inspectorPanel.updateBoundingBoxSelection(newSelectedPointIndices); + } + + console.log("attttt", this.selectedPointIndices, neighbors) + this.selectionChangedListeners.forEach((l) => + l(this.selectedPointIndices, neighbors) + ); + performance.mark('endProcessing2'); + + // Measure the duration of the request + performance.measure('ProcessingDuration2', 'startProcessing2', 'endProcessing2'); + + const measure = performance.getEntriesByName('ProcessingDuration2')[0]; + console.log(`The good time was ${measure.duration} milliseconds.`); + } + updateMetaDataByIndices(indices: number, src: string) { + console.log(' updateMetaDataByIndices') + if (indices === -1) { + this.metadataCard.updateMetadata(null); + return + } + this.metadataCard.updateMetadata( + this.dataSet.points[indices].metadata, src, this.dataSet.points[indices] + ); + } + + updateMetaByIndices(indices: number) { + if (indices === -1) { + this.metadataCard.updateMetadata(null); + return + } + + // console.log("window.sessionStorage.selectedType ", window.sessionStorage.selectedType ) + if (window.sessionStorage.selectedType == "text") { + + this.dataSet.getSpriteText(indices, (textData: any) => { + let text = textData.texts + + this.metadataCard.updateMetadata( + this.dataSet.points[indices].metadata, null, this.dataSet.points[indices], indices,text=text + ); + }) + } else if (window.sessionStorage.selectedType == "image"){ + + this.dataSet.getSpriteImage(indices, (imgData: any) => { + let src = imgData.imgUrl + this.metadataCard.updateMetadata( + this.dataSet.points[indices].metadata, src, this.dataSet.points[indices], indices, null + ); + }) + } + // } else { + // console.log("unknownType!") + // return + // } + + } + + /** + * Registers a listener to be called any time the mouse hovers over a point. + */ + registerHoverListener(listener: HoverListener) { + this.hoverListeners.push(listener); + } + /** + * Used by clients to indicate that a hover is occurring. + */ + private timer = null + notifyHoverOverPoint(pointIndex: number) { + let highlightedPointIndices; + let predChangeIndices; + let confChangeIndices; + let contraVisHighlightIndices; + + + + if (getHighlightedPointIndices(this.instanceId) && getHighlightedPointIndices(this.instanceId)[this.iteration] && this.showVisError) { + highlightedPointIndices = setIntersection([ + new Set(getHighlightedPointIndices(this.instanceId)[this.iteration]), + new Set(getNowShowIndicates(this.instanceId)), + ]) + // highlightedPointIndices = getHighlightedPointIndices(this.instanceId)[this.iteration].filter(value => getNowShowIndicates(this.instanceId).includes(value)) + + } + + else if (getPredChangeIndices(this.instanceId) && this.highlightChange) { + // predChangeIndices = getPredChangeIndices(this.instanceId).filter(value => getNowShowIndicates(this.instanceId).includes(value)) + predChangeIndices = setIntersection([ + new Set(getPredChangeIndices(this.instanceId)), + new Set(getNowShowIndicates(this.instanceId)), + ]); + } + + else if (getConfChangeIndices(this.instanceId) && this.highlightConfChange) { + // confChangeIndices = getConfChangeIndices(this.instanceId).filter(value => getNowShowIndicates(this.instanceId).includes(value)) + confChangeIndices = setIntersection([ + new Set(getConfChangeIndices(this.instanceId)), + new Set(getNowShowIndicates(this.instanceId)), + ]); + } + else if (getcontraVisHighlightIndices(this.instanceId)) { + contraVisHighlightIndices = setIntersection([ + new Set(getcontraVisHighlightIndices(this.instanceId)), + new Set(getNowShowIndicates(this.instanceId)), + ]); + // contraVisHighlightIndices = getcontraVisHighlightIndices(this.instanceId).filter(value => getNowShowIndicates(this.instanceId).includes(value)) + + } + // console.log(highlightedPointIndices) + // console.log(predChangeIndices) + + + this.hoverListeners.forEach((l) => l(pointIndex, highlightedPointIndices, predChangeIndices, confChangeIndices, contraVisHighlightIndices)); + + let timeNow = new Date().getTime() + if (this.timer === null || timeNow - this.timer > 0) { + + if (getIteration(this.instanceId) && pointIndex !== undefined && pointIndex !== null && getPreviousHover(this.instanceId) !== pointIndex) { + this.timer = timeNow + // used to show picture info when hover over a point + this.updateMetaByIndices(pointIndex) + + updateStateForInstance(this.instanceId, { previousHover: pointIndex }) + // getPreviousHover(this.instanceId) = pointIndex + } + } + + this.currentHoverIndex = pointIndex + + } + registerProjectionChangedListener(listener: ProjectionChangedListener) { + this.projectionChangedListeners.push(listener); + } + notifyProjectionChanged(projection: Projection) { + this.projectionChangedListeners.forEach((l) => l(projection)); + } + registerDistanceMetricChangedListener(l: DistanceMetricChangedListener) { + this.distanceMetricChangedListeners.push(l); + } + notifyDistanceMetricChanged(distMetric: DistanceFunction) { + this.distanceMetricChangedListeners.forEach((l) => l(distMetric)); + } + + @observe('dataProto') + _dataProtoChanged(dataProtoString: string) { + let dataProto = dataProtoString + ? (JSON.parse(dataProtoString) as DataProto) + : null; + this.initializeDataProvider(dataProto); + } + private makeDefaultPointsInfoAndStats( + points: DataPoint[] + ): [PointMetadata[], ColumnStats[]] { + let pointsInfo: PointMetadata[] = []; + points.forEach((p) => { + let pointInfo: PointMetadata = {}; + pointInfo[INDEX_METADATA_FIELD] = p.index; + pointsInfo.push(pointInfo); + }); + let stats: ColumnStats[] = [ + { + name: INDEX_METADATA_FIELD, + isNumeric: false, + tooManyUniqueValues: true, + min: 0, + max: pointsInfo.length - 1, + }, + ]; + return [pointsInfo, stats]; + } + private initializeDataProvider(dataProto?: DataProto) { + + if (this.servingMode === 'demo') { + let projectorConfigUrl: string; + // Only in demo mode do we allow the config being passed via URL. + let urlParams = util.getURLParams(initialURLQueryString); + if ('config' in urlParams) { + projectorConfigUrl = urlParams['config']; + } else { + projectorConfigUrl = this.projectorConfigJsonPath; + } + + this.dataProvider = new DemoDataProvider(projectorConfigUrl, this.instanceId); + + } else if (this.servingMode === 'server') { + if (!this.routePrefix) { + throw 'route-prefix is a required parameter'; + } + this.dataProvider = new ServerDataProvider(this.routePrefix, this.instanceId); + } else if (this.servingMode === 'proto' && dataProto != null) { + + this.dataProvider = new ProtoDataProvider(dataProto, this.instanceId); + } else { + // The component is not ready yet - waiting for the dataProto field. + return; + } + // if (this.projectorScatterPlotAdapter != null) { + + // this.projectorScatterPlotAdapter.updateScatterPlotPositions(); + // this.projectorScatterPlotAdapter.updateScatterPlotAttributes(); + // this.projectorScatterPlotAdapter.resize(); + // this.projectorScatterPlotAdapter.render(); + + // } + + + // this.projectorScatterPlotAdapter.setLabelPointAccessor(null); + // this.setProjection(null); + // if (getIteration(this.instanceId)) { + // this.projectionsPanel.jumpTo(Number(getIteration(this.instanceId))) + // } else { + // this.projectionsPanel.jumpTo(Number(1)) + // } + this.dataPanel.initialize(this, this.dataProvider, this.instanceId); + } + private getLegendPointColorer( + colorOption: ColorOption + ): (ds: DataSet, index: number) => string { + if (colorOption == null || colorOption.map == null) { + return null; + } + const colorer = (ds: DataSet, i: number) => { + let value = ds.points[i].metadata[this.selectedColorOption.name]; + if (value == null) { + return POINT_COLOR_MISSING; + } + return ds.points[i].color; + //return colorOption.map(value); + }; + return colorer; + } + private get3DLabelModeButton(): any { + return this.$$('#labels3DMode'); + } + private get3DLabelMode(): boolean { + const label3DModeButton = this.get3DLabelModeButton(); + return (label3DModeButton as any).active; + } + adjustSelectionAndHover(selectedPointIndices: number[], hoverIndex?: number) { + this.notifySelectionChanged(selectedPointIndices); + this.notifyHoverOverPoint(hoverIndex); + this.setMouseMode(MouseMode.CAMERA_AND_CLICK_SELECT); + } + setMouseMode(mouseMode: MouseMode) { + let selectModeButton = this.$$('#selectMode'); + (selectModeButton as any).active = mouseMode === MouseMode.AREA_SELECT; + this.projectorScatterPlotAdapter.scatterPlot.setMouseMode(mouseMode); + } + private setCurrentDataSet(ds: DataSet) { + this.adjustSelectionAndHover([]); + if (this.dataSet != null) { + this.dataSet.stopTSNE(); + } + if (ds != null && this.normalizeData) { + ds.normalize(); + } + this.dim = ds == null ? 0 : ds.dim[1]; + (this.$$('span.numDataPoints') as HTMLSpanElement).innerText = + ds == null ? '0' : '' + ds.dim[0]; + (this.$$('span.dim') as HTMLSpanElement).innerText = + ds == null ? '0' : '' + ds.dim[1]; + this.dataSet = ds; + this.projectionsPanel.dataSetUpdated( + this.dataSet, + this.originalDataSet, + this.dim + ); + this.projectorScatterPlotAdapter.setDataSet(this.dataSet); + this.projectorScatterPlotAdapter.scatterPlot.setCameraParametersForNextCameraCreation( + null, + true + ); + } + private setupUIControls() { + + { + this.projectorScatterPlotAdapter = new ProjectorScatterPlotAdapter( + this.getScatterContainer("left"), + this as ProjectorEventContext, + this.instanceId + ); + + this.projectorScatterPlotAdapter.setLabelPointAccessor( + this.selectedLabelOption + ); + } + + // View controls + this.helpBtn.addEventListener('click', () => { + (this.$.help3dDialog as any).open(); + }) + this.$$('#reset-zoom').addEventListener('click', () => { + this.projectorScatterPlotAdapter.scatterPlot.resetZoom(); + this.projectorScatterPlotAdapter.scatterPlot.startOrbitAnimation(); + }); + let selectModeButton = this.$$('#selectMode'); + selectModeButton.addEventListener('click', (event) => { + this.setMouseMode( + (selectModeButton as any).active + ? MouseMode.AREA_SELECT + : MouseMode.CAMERA_AND_CLICK_SELECT + ); + }); + let nightModeButton = this.$$('#nightDayMode'); + nightModeButton.addEventListener('click', () => { + this.projectorScatterPlotAdapter.scatterPlot.setDayNightMode( + (nightModeButton as any).active + ); + }); + let hiddenBackground = this.$$('#hiddenBackground'); + hiddenBackground.addEventListener('click', () => { + updateStateForInstance(this.instanceId, { hiddenBackground: (hiddenBackground as any).active }) + // getHiddenBackground(this.instanceId) = (hiddenBackground as any).active + for (let i = 0; i < this.dataSet.points.length; i++) { + const point = this.dataSet.points[i]; + if (point.metadata[this.selectedLabelOption]) { + let hoverText = point.metadata[this.selectedLabelOption].toString(); + if (hoverText == 'background') { + if ((hiddenBackground as any).active) { + // getScene(this.instanceId).remove(this.state.backgroundMesh) + point.color = '#ffffff' + } else { + point.color = point.DVI_color[1] + // getScene(this.instanceId).add(this.state.backgroundMesh) + } + } + } + } + // Clone the scene object + const newScene = getScene(this.instanceId) ; + + // Check and update the 'visible' property for specific children + if (newScene.children && newScene.children[2] && newScene.children[2].type === 'Mesh') { + newScene.children = newScene.children.map((child, index) => { + if (index >= 2) { + return { + ...child, + visible: !getHiddenBackground(this.instanceId) + }; + } + return child; + }); + } + + // Update the state with the modified scene + updateStateForInstance(this.instanceId, { scene: newScene }); + + + // // if(getScene(this.instanceId).children) + // if (getScene(this.instanceId).children[2] && getScene(this.instanceId).children[2].type === 'Mesh') { + // for (let i = 2; i < getScene(this.instanceId).children.length; i++) { + + // getScene(this.instanceId).children[i].visible = !getHiddenBackground(this.instanceId) + // } + + // } + this.projectorScatterPlotAdapter.scatterPlot.render() + // this.projectorScatterPlotAdapter.scatterPlot.hiddenBackground( + // (hiddenBackground as any).active, + // ); + }) + + let editModeButton = this.$$('#editMode'); + editModeButton.addEventListener('click', (event) => { + this.editMode = (editModeButton as any).active; + }); + const labels3DModeButton = this.get3DLabelModeButton(); + labels3DModeButton.addEventListener('click', () => { + this.projectorScatterPlotAdapter.set3DLabelMode(this.get3DLabelMode()); + }); + // + let triangleModeBtn = this.$$("#triangleMode"); + triangleModeBtn.addEventListener('click', () => { + this.projectorScatterPlotAdapter.setTriangleMode((triangleModeBtn as any).active) + }) + + window.addEventListener('resize', () => { + this.projectorScatterPlotAdapter.resize(); + }); + + this.projectorScatterPlotAdapter.scatterPlot.onCameraMove( + (cameraPosition: Vector3, cameraTarget: Vector3) => + this.bookmarkPanel.clearStateSelection() + ); + this.registerHoverListener((hoverIndex: number) => { + this.onHover(hoverIndex) + } + + ); + this.registerProjectionChangedListener((projection: Projection) => + this.onProjectionChanged(projection) + ); + this.registerSelectionChangedListener( + ( + selectedPointIndices: number[], + neighborsOfFirstPoint: knn.NearestEntry[] + ) => this.onSelectionChanged(selectedPointIndices, neighborsOfFirstPoint) + ); + + if (!this.isContraVis) { + this.showConfChangeButton.addEventListener('click', () => { + + if (this.confChangeInput < 0 || this.confChangeInput > 1) { + logging.setErrorMessage("Invaild Input!", null); + this.showConfChangeButton.disabled = false; + return; + } + else if (!(this.showUnlabeled || this.showTesting || this.showlabeled) || this.showVisError || this.highlightChange) { + this.showConfChangeButton.disabled = false; // Uncheck 'showVisError' + // Display your dialog warning + (this.$.showConfChangeWarning as any).open(); + return; + } + + this.showConfChange(this.confChangeInput) + }); + } + + + } + private onHover(hoverIndex: number) { + this.hoverPointIndex = hoverIndex; + let hoverText = null; + if (hoverIndex != null) { + const point = this.dataSet.points[hoverIndex]; + if (point.metadata[this.selectedLabelOption]) { + hoverText = point.metadata[this.selectedLabelOption].toString(); + + } + } + if (this.selectedPointIndices.length === 0) { + this.statusBar.style.display = hoverText ? null : 'none'; + this.statusBar.innerText = hoverText; + } + } + private getScatterContainer(pos: string): HTMLDivElement { + if (pos == "left") { + return this.$$('#scatter1') as HTMLDivElement; + } else if (pos == "right") { + return this.$$('#scatter2') as HTMLDivElement; + } else { + logging.setErrorMessage('wrong pos!'); + } + } + private onSelectionChanged( + selectedPointIndices: number[], + neighborsOfFirstPoint: knn.NearestEntry[] + ) { + this.selectedPointIndices = selectedPointIndices; + this.neighborsOfFirstPoint = neighborsOfFirstPoint; + + // this.dataPanel.onProjectorSelectionChanged( + // selectedPointIndices, + // neighborsOfFirstPoint + // ); + + let totalNumPoints = + this.selectedPointIndices.length + neighborsOfFirstPoint.length; + this.statusBar.innerText = `Selected ${totalNumPoints} points`; + this.statusBar.style.display = totalNumPoints > 0 ? null : 'none'; + + } + onProjectionChanged(projection?: Projection) { + // this.dataPanel.projectionChanged(projection); + this.updateBackgroundImg() + this.inspectorPanel.clearQueryResList(); + this.notifySelectionChanged([]); + this.projectorScatterPlotAdapter.render(); + } + setProjection(projection: Projection) { + this.projection = projection; + if (projection != null) { + this.analyticsLogger.logProjectionChanged(projection.projectionType); + } + this.notifyProjectionChanged(projection); + } + // notifyProjectionPositionsUpdated(newSelection?: any[]) { + // this.projectorScatterPlotAdapter.notifyProjectionPositionsUpdated(newSelection); + // } + notifyProjectionPositionsUpdated() { + this.projectorScatterPlotAdapter.notifyProjectionPositionsUpdated(); + this.metadataCard.updateCustomList(this.dataSet.points, this as ProjectorEventContext) + this.metadataCard.updateRejectList(this.dataSet.points, this as ProjectorEventContext) + } + + hiddenOrShowScatter(type: string) { + let dom1 = this.$$('#scatter1') as HTMLElement + let dom2 = this.$$('#scatter2') as HTMLElement + if (type === '') { + this._showNotAvaliable = false + } else { + this._showNotAvaliable = true + } + } + refreshnoisyBtn() { + this.inspectorPanel.refreshBtnStyle() + } + /** + * Gets the current view of the embedding and saves it as a State object. + */ + getCurrentState(): State { + const state = new State(); + // Save the individual datapoint projections. + state.projections = []; + for (let i = 0; i < this.dataSet.points.length; i++) { + const point = this.dataSet.points[i]; + const projections: { + [key: string]: number; + } = {}; + const keys = Object.keys(point.projections); + for (let j = 0; j < keys.length; ++j) { + projections[keys[j]] = point.projections[keys[j]]; + } + state.projections.push(projections); + } + state.selectedProjection = this.projection.projectionType; + state.dataSetDimensions = this.dataSet.dim; + state.tSNEIteration = this.dataSet.tSNEIteration; + state.selectedPoints = this.selectedPointIndices; + state.filteredPoints = this.dataSetFilterIndices; + this.projectorScatterPlotAdapter.populateBookmarkFromUI(state); + // state.selectedColorOptionName = this.dataPanel.selectedColorOptionName; + // state.forceCategoricalColoring = this.dataPanel.forceCategoricalColoring; + state.selectedLabelOption = this.selectedLabelOption; + // this.projectionsPanel.populateBookmarkFromUI(state); + return state; + } + /** Loads a State object into the world. */ + loadState(state: State) { + this.setProjection(null); + { + // this.projectionsPanel.disablePolymerChangesTriggerReprojection(); + if (this.dataSetBeforeFilter != null) { + this.resetFilterDataset(); + } + if (state.filteredPoints != null) { + this.filterDataset(state.filteredPoints); + } + // this.projectionsPanel.enablePolymerChangesTriggerReprojection(); + } + for (let i = 0; i < state.projections.length; i++) { + const point = this.dataSet.points[i]; + const projection = state.projections[i]; + const keys = Object.keys(projection); + for (let j = 0; j < keys.length; ++j) { + point.projections[keys[j]] = projection[keys[j]]; + } + } + this.dataSet.hasTSNERun = state.selectedProjection === 'tsne'; + this.dataSet.tSNEIteration = state.tSNEIteration; + // this.projectionsPanel.restoreUIFromBookmark(state); + this.inspectorPanel.restoreUIFromBookmark(state); + // this.dataPanel.selectedColorOptionName = state.selectedColorOptionName; + // this.dataPanel.setForceCategoricalColoring( + // !!state.forceCategoricalColoring + // ); + this.selectedLabelOption = state.selectedLabelOption; + this.projectorScatterPlotAdapter.restoreUIFromBookmark(state); + { + const dimensions = stateGetAccessorDimensions(state); + const components = getProjectionComponents( + state.selectedProjection, + dimensions + ); + const projection = new Projection( + state.selectedProjection, + components, + dimensions.length, + this.dataSet + ); + this.setProjection(projection); + } + this.notifySelectionChanged(state.selectedPoints); + } + + // retrainBySelections(iteration: number, newSel: number[]) { + // this.projectionsPanel.retrainBySelections(iteration, newSel) + // } + + + /** + * query for indices in inspector panel + */ + query(query: string, inRegexMode: boolean, fieldName: string, currPredicates: { [key: string]: any }, iteration: number, confidenceThresholdFrom: any, confidenceThresholdTo: any, + callback: (indices: any) => void) { + + let confidenceThreshold = [] + var dummyCurrPredicates: { [key: string]: any } = {}; + Object.keys(currPredicates).forEach((key) => { + dummyCurrPredicates[key] = currPredicates[key] + }); + + dummyCurrPredicates[fieldName] = query; + if (confidenceThresholdFrom || confidenceThresholdTo) { + dummyCurrPredicates['confidence'] = [Number(confidenceThresholdFrom), Number(confidenceThresholdTo)] + } + const msgId = logging.setModalMessage('Querying...'); + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + fetch(`http://${this.DVIServer}/query`, { + method: 'POST', + body: JSON.stringify({ + "predicates": dummyCurrPredicates, "content_path": window.sessionStorage.content_path || this.dataSet.DVIsubjectModelPath, + "iteration": iteration, "username": window.sessionStorage.username, + "vis_method": window.sessionStorage.vis_method, 'setting': window.sessionStorage.selectedSetting + }), + headers: headers, + mode: 'cors' + }).then(response => response.json()).then(data => { + const indices = data.selectedPoints; + updateStateForInstance(this.instanceId, { alSuggestLabelList: [] }) + // this.state.alSuggestLabelList = [] + logging.setModalMessage(null, msgId); + callback(indices); + }).catch(error => { + logging.setErrorMessage('querying for indices'); + callback(null); + }); + } + + + getAllResPosList(callback: (data: any) => void) { + if (getAllResPositions(this.instanceId) && getAllResPositions(this.instanceId).results && getAllResPositions(this.instanceId).bgimgList) { + callback(getAllResPositions(this.instanceId)) + return + } + const msgId = logging.setModalMessage('Querying...'); + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + fetch(`http://${this.DVIServer}/all_result_list`, { + method: 'POST', + body: JSON.stringify({ + "iteration_start": 1, + "iteration_end": 2, + "content_path": this.dataSet.DVIsubjectModelPath, + "username": window.sessionStorage.username + }), + headers: headers, + mode: 'cors' + }).then(response => response.json()).then(data => { + const indices = data.selectedPoints; + logging.setModalMessage(null, msgId); + callback(data) + }).catch(error => { + logging.setErrorMessage('querying for indices'); + + }); + } + + /** + * query for predicates + */ + simpleQuery(predicates: { [key: string]: any }, iteration: number) { + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + fetch(`http://${this.DVIServer}/query`, { + method: 'POST', + body: JSON.stringify({ + "predicates": predicates, "content_path": window.sessionStorage.content_path || this.dataSet.DVIsubjectModelPath, + "iteration": iteration, "username": window.sessionStorage.username, "vis_method": window.sessionStorage.vis_method, 'setting': window.sessionStorage.selectedSetting + }), + headers: headers, + mode: 'cors' + }).then(response => response.json()).then(data => { + const indices = data.selectedPoints; + this.inspectorPanel.filteredPoints = indices; + updateStateForInstance(this.instanceId, { alSuggestLabelList: [] }) + // this.state.alSuggestLabelList = [] + }).catch(error => { + logging.setErrorMessage('querying for indices'); + }); + } + // active learning + queryByAL(iteration: number, strategy: string, budget: number, acceptIndicates: number[], rejectIndicates: number[], isRecommend: boolean, + callback: (indices: any, scores: any, labels: any) => void) { + const msgId = logging.setModalMessage('Querying...'); + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + + + let accIndicates = [] + if (getAcceptIndicates(this.instanceId)) { + accIndicates = getAcceptIndicates(this.instanceId).filter((item, i, arr) => { + //函数自身返回的是一个布尔值,只当返回值为true时,当前元素才会存入新的数组中。 + return getProperties(this.instanceId)[getIteration(this.instanceId)][item] === 1 + }) + } + let rejIndicates = [] + if (getRejectIndicates(this.instanceId)) { + rejIndicates = getRejectIndicates(this.instanceId).filter((item, i, arr) => { + //函数自身返回的是一个布尔值,只当返回值为true时,当前元素才会存入新的数组中。 + return getProperties(this.instanceId)[getIteration(this.instanceId)][item] === 1 + }) + } + + fetch(`http://${this.DVIServer}/al_query`, { + method: 'POST', + body: JSON.stringify({ + "iteration": iteration, + "strategy": strategy, + "budget": budget, + "content_path": window.sessionStorage.content_path || this.dataSet.DVIsubjectModelPath, + "accIndices": accIndicates, + "rejIndices": rejIndicates, + "isRecommend": isRecommend, + "username": window.sessionStorage.username, + "vis_method": window.sessionStorage.vis_method, + 'setting': window.sessionStorage.selectedSetting + }), + headers: headers, + mode: 'cors' + }).then(response => response.json()).then(data => { + const indices = data.selectedPoints; + const labels = data.suggestLabels; + const scores = data.scores + logging.setModalMessage(null, msgId); + + + callback(indices, scores, labels); + }).catch(error => { + logging.setErrorMessage('querying for indices'); + callback(null, [], []); + }); + } + // anormaly detection + queryAnormalyStrategy(budget: number, cls: number, currentIndices: number[], comfirm_info: any[], accIndicates: number[], rejIndicates: number[], strategy: string, isRecommend: boolean, + callback: (indices: any, cleanIndices?: any) => void) { + const msgId = logging.setModalMessage('Querying...'); + let headers = new Headers(); + if (!accIndicates) { + accIndicates = [] + } + if (!rejIndicates) { + rejIndicates = [] + } + let accIn = [] + + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + fetch(`http://${this.DVIServer}/anomaly_query`, { + method: 'POST', + body: JSON.stringify({ + "budget": budget, + "cls": cls, + "indices": currentIndices, + "content_path": window.sessionStorage.content_path || this.dataSet.DVIsubjectModelPath, + "comfirm_info": comfirm_info, + "accIndices": accIndicates, + "rejIndices": rejIndicates, + "strategy": strategy, + "username": window.sessionStorage.username, + "isRecommend": isRecommend, + "vis_method": window.sessionStorage.vis_method, + 'setting': window.sessionStorage.selectedSetting + }), + headers: headers, + mode: 'cors' + }).then(response => response.json()).then(data => { + const indices = data.selectedPoints; + const labels = data.suggestLabels; + const scores = data.scores + const cleanIndices = data.cleanList + updateStateForInstance(this.instanceId, { alSuggestScoreList: data.scores }) + updateStateForInstance(this.instanceId, { alSuggestLabelList: data.suggestLabels }) + // this.state.alSuggestScoreList = data.scores + // this.state.alSuggestLabelList = data.suggestLabels; + logging.setModalMessage(null, msgId); + callback(indices, cleanIndices); + }).catch(error => { + logging.setErrorMessage('querying for indices'); + callback(null); + }); + } + + querySuggestion(iteration: number, indices: number[], k: number, + callback: (indices: any) => void) { + const msgId = logging.setModalMessage('Querying...'); + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + fetch(`http://${this.DVIServer}/al_suggest_similar`, { + method: 'POST', + body: JSON.stringify({ + "iteration": iteration, + "selectIndices": indices, + "k": k, + "content_path": window.sessionStorage.content_path || this.dataSet.DVIsubjectModelPath, + "vis_method": window.sessionStorage.vis_method, + 'setting': window.sessionStorage.selectedSetting + }), + headers: headers, + mode: 'cors' + }).then(response => response.json()).then(data => { + const indices = data.similarIndices; + logging.setModalMessage(null, msgId); + callback(indices); + }).catch(error => { + // logging.setErrorMessage('querying for indices'); + callback(null); + }); + } + + + saveDVISelection(indices: number[], callback: (msg: string) => void) { + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + fetch(`http://${this.DVIServer}/saveDVIselections`, { + method: 'POST', + body: JSON.stringify({ + "newIndices": indices, + "content_path": window.sessionStorage.content_path || this.dataSet.DVIsubjectModelPath, + "iteration": this.iteration, + "vis_method": window.sessionStorage.vis_method, + 'setting': window.sessionStorage.selectedSetting + }), + headers: headers, + mode: 'cors' + }).then(response => response.json()).then(data => { + const msg = data.message; + callback(msg); + }).catch(error => { + logging.setErrorMessage('saving indices'); + }); + } + + + + // queryCurrentFocus(iteration: number, focusIndices: number[], + // callback: (indices: any) => void) { + // const msgId = logging.setModalMessage('Querying...'); + // let headers = new Headers(); + // headers.append('Content-Type', 'application/json'); + // headers.append('Accept', 'application/json'); + // await fetch(`http://${this.DVIServer}/get_focus`, { + // method: 'POST', + // body: JSON.stringify({ + // "iteration": iteration, + // "content_path": window.sessionStorage.content_path, + // "vis_method": window.sessionStorage.vis_method, + // 'setting':window.sessionStorage.selectedSetting + // }), + // headers: headers, + // mode: 'cors' + // }).then(response => response.json()).then(data => { + + // // update projection to use new embeddings + // this.data.projectDVI() + // logging.setModalMessage(null, msgId); + // callback(indices); + // }).catch(error => { + // // logging.setErrorMessage('querying for indices'); + // callback(null); + // }); + // } + highlightCriticalChange() { + if (!getPredChangeIndices(this.instanceId)) { + updateStateForInstance(this.instanceId, { predChangeIndices: [] }) + // getPredChangeIndices(this.instanceId) = []; + } + const requestOptions = { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + "path": window.sessionStorage.content_path, + "iteration": this.iteration, + "last_iteration": getLastIteration(this.instanceId), + "username": window.sessionStorage.username, + "vis_method": window.sessionStorage.vis_method, + 'setting': window.sessionStorage.selectedSetting, + "content_path": window.sessionStorage.content_path + }), + }; + + fetch(`http://${this.DVIServer}/highlightCriticalChange`, requestOptions) + .then(response => { + if (!response.ok) { + throw new Error(`Server responded with status: ${response.status}`); + } + return response.json(); + }) + .then(data => { + updateStateForInstance(this.instanceId, { predChangeIndices: data.predChangeIndices }) + // getPredChangeIndices(this.instanceId) = data.predChangeIndices; + }) + .catch(error => { + console.error('Error during highlightCriticalChange fetch:', error); + logging.setErrorMessage('An error occurred while highlighting critical changes.'); + }); + } + + + + + + showConfChange(confChangeInput: number) { + // const msgId = logging.setModalMessage('loading...'); + this.showConfChangeButton.disabled = true; + + if (!getConfChangeIndices(this.instanceId)) { + updateStateForInstance(this.instanceId, { confChangeIndices: [] }) + // getConfChangeIndices(this.instanceId) = []; + } + const requestOptions = { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + "path": window.sessionStorage.content_path, + "iteration": this.iteration, + "last_iteration": getLastIteration(this.instanceId), + "username": window.sessionStorage.username, + "vis_method": window.sessionStorage.vis_method, + 'setting': window.sessionStorage.selectedSetting, + "content_path": window.sessionStorage.content_path, + "confChangeInput": confChangeInput + }), + }; + + fetch(`http://${this.DVIServer}/highlightConfChange`, requestOptions) + .then(response => { + if (!response.ok) { + throw new Error(`Server responded with status: ${response.status}`); + } + return response.json(); + }) + .then(data => { + updateStateForInstance(this.instanceId, { confChangeIndices: data.confChangeIndices }) + // getConfChangeIndices(this.instanceId) = data.confChangeIndices; + this.highlightConfChange = true; + + }) + .catch(error => { + console.error('Error during highlightCriticalChange fetch:', error); + logging.setErrorMessage('An error occurred while highlighting conf changes.'); + }); + + let confChangeIndices; + + confChangeIndices = getConfChangeIndices(this.instanceId) + confChangeIndices = confChangeIndices.filter(value => getNowShowIndicates(this.instanceId).includes(value)) + + this.filterDataset(getNowShowIndicates(this.instanceId), false, undefined, undefined, confChangeIndices = confChangeIndices) + + this.showConfChangeButton.disabled = false; + + // this.dataSet.projectDVI(iterationInput, this.projector.inspectorPanel.currentPredicate, + // (iteration: number | null, evaluation: any, newSelection: any[], indices: number[], totalIter?: number) => { + // /** + // * get filter index + // */ + // //get search predicates or indices + // var filterIndices: number[]; + // filterIndices = [] + // if (this.temporalStatus) { + // //search predicate + // this.projector.inspectorPanel.filterIndices = indices; + // } + // //indices + // filterIndices = this.projector.inspectorPanel.filterIndices; + + // this.projector.dataSet.setDVIFilteredData(filterIndices); + + // if (iteration != null) { + // this.iterationLabelTsne.innerText = '' + iteration; + // this.totalIterationLabelDVI.innerText = '' + totalIter; + // this.updateEvaluationInformation(evaluation); + + // this.projector.notifyProjectionPositionsUpdated(); + // this.projector.onProjectionChanged(); + // this.projector.onIterationChange(iteration); + // if (this.dataSet.tSNEIteration > 1) { + // this.previousDVIButton.disabled = false; + // } + // if (this.dataSet.tSNETotalIter != this.dataSet.tSNEIteration) { + // this.nextDVIButton.disabled = false; + // } + // } else { + // this.nextDVIButton.disabled = false; + // this.projector.onProjectionChanged(); + // } + // logging.setModalMessage(null, msgId); + // this.jumpDVIButton.disabled = false; + // }); + } + // In your component's connectedCallback or equivalent initialization method + + // connectedCallback() { + // super.connectedCallback(); + + // // Add an event listener for the stateUpdated event + // window.addEventListener(STATE_UPDATED_EVENT, this.handleStateUpdate.bind(this)); + // } + + // // In your component's disconnectedCallback or equivalent cleanup method + + // disconnectedCallback() { + // super.disconnectedCallback(); + + // // Remove the event listener when the component is removed + // window.removeEventListener(STATE_UPDATED_EVENT, this.handleStateUpdate.bind(this)); + // } + + // // Handler for the stateUpdated event + + // handleStateUpdate(event) { + // const { instanceId, newState } = event.detail; + + // // Check if the updated state is for this instance + // if (instanceId === this.instanceId) { + // // Update the component's state or react to the changes as needed + // this.state = {...this.state, ...newState}; + // // Update the component's view or internal data based on the new state + // } + // } + + + + // } + + + + } \ No newline at end of file diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-login-app.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-login-app.ts new file mode 100644 index 0000000000000000000000000000000000000000..56fd3887deacf4c8e4bbffde839386999b4ba84f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-login-app.ts @@ -0,0 +1,55 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {PolymerElement, html} from '@polymer/polymer'; +import {customElement, property} from '@polymer/decorators'; + +import '../../../components/polymer/irons_and_papers'; + +import './styles'; +import './vz-projector'; + +@customElement('vz-login-app') +class VzLoginApp extends PolymerElement { + static readonly template = html` + + +
    + + + 密码 + +
    + + `; + @property({type: String}) + username: string = ''; + @property({type: String}) + routePrefix: string = ''; + @property({type: String}) + servingMode: string = ''; + @property({type: String}) + documentationLink: string = ''; + @property({type: String}) + bugReportLink: string = ''; +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-app.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-app.ts new file mode 100644 index 0000000000000000000000000000000000000000..ea680deae56a5fc5d731b5ae9e4e178cf654a560 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-app.ts @@ -0,0 +1,171 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {PolymerElement, html} from '@polymer/polymer'; +import {customElement, property} from '@polymer/decorators'; + +import '../../../components/polymer/irons_and_papers'; + +import './styles'; +import './vz-projector-container'; +import './vz-comparator-container'; + + +@customElement('vz-projector-app') +class VzProjectorApp extends PolymerElement { + static readonly template = html` + + + +
    + + + + + + +
    + `; + @property({type: Boolean}) + pageViewLogging: boolean = false; + @property({type: Boolean}) + eventLogging: boolean = false; + @property({type: String}) + projectorConfigJsonPath: string = ''; + @property({type: String}) + routePrefix: string = 'http://172.26.190.152:6006'; + @property({type: String}) + servingMode: string = ''; + @property({type: String}) + documentationLink: string = ''; + @property({type: String}) + bugReportLink: string = ''; + @property({type: String}) + currentView: string = 'projector'; + + @property({type: String}) + title:string = `Deep Debugger | task: ${window.sessionStorage.taskType==='active learning'?'Sample Selection':'Fault Localization'}` + + connectedCallback() { + super.connectedCallback(); + // Check the saved state on page load and set the currentView + const savedView = localStorage.getItem('currentView'); + if (savedView) { + this.currentView = savedView; + } + } + + handleChangeMode() { + // Save the desired view state before reloading + const nextView = this.currentView === 'projector' ? 'comparator' : 'projector'; + localStorage.setItem('currentView', nextView); + + // Perform a full page reload + window.location.reload(); + } + + isProjectorView(view : String) : boolean{ + return view === 'projector'; + } + + isComparatorView(view : String) : boolean{ + return view === 'comparator'; + } + + +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-bookmark-panel.html.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-bookmark-panel.html.ts new file mode 100644 index 0000000000000000000000000000000000000000..e507fd2198bedd066ea6cd8eaeaff737f9eb6bf4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-bookmark-panel.html.ts @@ -0,0 +1,214 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {html} from '@polymer/polymer'; + +import '../../../components/polymer/irons_and_papers'; + +import './styles'; + +export const template = html` + + + + +
    + + + +
    + + + + +
    + + + + +
    +
    +
    +
    +`; diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-bookmark-panel.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-bookmark-panel.ts new file mode 100644 index 0000000000000000000000000000000000000000..70f924fd37d91019250bb0ed7bfd9948df8b24c0 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-bookmark-panel.ts @@ -0,0 +1,262 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {PolymerElement} from '@polymer/polymer'; +import {customElement, property} from '@polymer/decorators'; + +import '../../../components/polymer/irons_and_papers'; +import {LegacyElementMixin} from '../../../components/polymer/legacy_element_mixin'; + +import {template} from './vz-projector-bookmark-panel.html'; +import {State} from './data'; +import {ProjectorEventContext} from './projectorEventContext'; +import {DataProvider, EmbeddingInfo} from './data-provider'; +import * as logging from './logging'; + +@customElement('vz-projector-bookmark-panel') +class BookmarkPanel extends LegacyElementMixin(PolymerElement) { + static readonly template = template; + + @property({type: Object}) + savedStates: Array; + // Keep a separate polymer property because the savedStates doesn't change + // when adding and removing states. + @property({type: Boolean}) + hasStates: boolean = false; + @property({type: Number}) + selectedState: number; + + private projector: any; + private ignoreNextProjectionEvent: boolean; + private expandLessButton: HTMLButtonElement; + private expandMoreButton: HTMLButtonElement; + + ready() { + super.ready(); + this.savedStates = []; + this.setupUploadButton(); + this.ignoreNextProjectionEvent = false; + this.expandLessButton = this.$$('#expand-less') as HTMLButtonElement; + this.expandMoreButton = this.$$('#expand-more') as HTMLButtonElement; + } + initialize(projector: any, projectorEventContext: ProjectorEventContext) { + this.projector = projector; + projectorEventContext.registerProjectionChangedListener(() => { + if (this.ignoreNextProjectionEvent) { + this.ignoreNextProjectionEvent = false; + } else { + this.clearStateSelection(); + } + }); + } + setSelectedTensor( + run: string, + tensorInfo: EmbeddingInfo, + dataProvider: DataProvider + ) { + // Clear any existing bookmarks. + this.addStates(null); + if (tensorInfo && tensorInfo.bookmarksPath) { + // Get any bookmarks that may come when the projector starts up. + dataProvider.getBookmarks(run, tensorInfo.tensorName, (bookmarks) => { + this.addStates(bookmarks); + this._expandMore(); + }); + } else { + this._expandLess(); + } + } + /** Handles a click on show bookmarks tray button. */ + _expandMore() { + (this.$.panel as any).show(); + this.expandMoreButton.style.display = 'none'; + this.expandLessButton.style.display = ''; + } + /** Handles a click on hide bookmarks tray button. */ + _expandLess() { + (this.$.panel as any).hide(); + this.expandMoreButton.style.display = ''; + this.expandLessButton.style.display = 'none'; + } + /** Handles a click on the add bookmark button. */ + _addBookmark() { + let currentState = this.projector.getCurrentState(); + currentState.label = 'State ' + this.savedStates.length; + currentState.isSelected = true; + this.selectedState = this.savedStates.length; + for (let i = 0; i < this.savedStates.length; i++) { + this.savedStates[i].isSelected = false; + // We have to call notifyPath so that polymer knows this element was + // updated. + this.notifyPath('savedStates.' + i + '.isSelected', false); + } + this.push('savedStates', currentState as any); + this.updateHasStates(); + } + /** Handles a click on the download bookmarks button. */ + _downloadFile() { + let serializedState = this.serializeAllSavedStates(); + let blob = new Blob([serializedState], {type: 'text/plain'}); + // TODO(b/162788443): Undo conformance workaround. + let textFile = window.URL['createObjectURL'](blob); + // Force a download. + let a = document.createElement('a'); + document.body.appendChild(a); + a.style.display = 'none'; + // TODO(b/162788443): Undo conformance workaround. + Object.assign(a, {href: textFile}); + (a as any).download = 'state'; + a.click(); + document.body.removeChild(a); + window.URL.revokeObjectURL(textFile); + } + /** Handles a click on the upload bookmarks button. */ + _uploadFile() { + let fileInput = this.$$('#state-file'); + (fileInput as HTMLInputElement).click(); + } + private setupUploadButton() { + // Show and setup the load view button. + const fileInput = this.$$('#state-file') as HTMLInputElement; + fileInput.onchange = () => { + const file: File = fileInput.files[0]; + // Clear out the value of the file chooser. This ensures that if the user + // selects the same file, we'll re-read it. + fileInput.value = ''; + const fileReader = new FileReader(); + fileReader.onload = (evt) => { + const str: string = fileReader.result as string; + const savedStates = JSON.parse(str); + // Verify the bookmarks match. + if (this.savedStatesValid(savedStates)) { + this.addStates(savedStates); + this.loadSavedState(0); + } else { + logging.setWarningMessage( + `Unable to load bookmarks: wrong dataset, expected dataset ` + + `with shape (${savedStates[0].dataSetDimensions}).` + ); + } + }; + fileReader.readAsText(file); + }; + } + addStates(savedStates?: State[]) { + if (savedStates == null) { + this.savedStates = []; + } else { + for (let i = 0; i < savedStates.length; i++) { + savedStates[i].isSelected = false; + this.push('savedStates', savedStates[i] as any); + } + } + this.updateHasStates(); + } + /** Deselects any selected state selection. */ + clearStateSelection() { + for (let i = 0; i < this.savedStates.length; i++) { + this.setSelectionState(i, false); + } + } + /** Handles a radio button click on a saved state. */ + _radioButtonHandler(evt: Event) { + const index = this.getParentDataIndex(evt); + this.loadSavedState(index); + this.setSelectionState(index, true); + } + loadSavedState(index: number) { + for (let i = 0; i < this.savedStates.length; i++) { + if (this.savedStates[i].isSelected) { + this.setSelectionState(i, false); + } else if (index === i) { + this.setSelectionState(i, true); + this.ignoreNextProjectionEvent = true; + this.projector.loadState(this.savedStates[i]); + } + } + } + private setSelectionState(stateIndex: number, selected: boolean) { + this.savedStates[stateIndex].isSelected = selected; + const path = 'savedStates.' + stateIndex + '.isSelected'; + this.notifyPath(path, selected); + } + /** + * Crawls up the DOM to find an ancestor with a data-index attribute. This is + * used to match events to their bookmark index. + */ + private getParentDataIndex(evt: Event) { + for (let i = 0; i < (evt as any).path.length; i++) { + let elem = (evt as any).path[i]; + if (elem instanceof HTMLElement) { + let dataIndex = elem.getAttribute('data-index'); + if (dataIndex != null) { + return +dataIndex; + } + } + } + return -1; + } + /** Handles a clear button click on a bookmark. */ + _clearButtonHandler(evt: Event) { + let index = this.getParentDataIndex(evt); + this.splice('savedStates', index, 1); + this.updateHasStates(); + } + /** Handles a label change event on a bookmark. */ + _labelChange(evt: Event) { + let index = this.getParentDataIndex(evt); + this.savedStates[index].label = (evt.target as any).value; + } + /** + * Used to determine whether to select the radio button for a given bookmark. + */ + _isSelectedState(index: number) { + return index === this.selectedState; + } + _isNotSelectedState(index: number) { + return index !== this.selectedState; + } + /** + * Gets all of the saved states as a serialized string. + */ + serializeAllSavedStates(): string { + return JSON.stringify(this.savedStates); + } + /** + * Loads all of the serialized states and shows them in the list of + * viewable states. + */ + loadSavedStates(serializedStates: string) { + this.savedStates = JSON.parse(serializedStates); + this.updateHasStates(); + } + /** + * Updates the hasState polymer property. + */ + private updateHasStates() { + this.hasStates = this.savedStates.length !== 0; + } + /** Sanity checks a State array to ensure it matches the current dataset. */ + private savedStatesValid(states: State[]): boolean { + for (let i = 0; i < states.length; i++) { + if ( + states[i].dataSetDimensions[0] !== this.projector.dataSet.dim[0] || + states[i].dataSetDimensions[1] !== this.projector.dataSet.dim[1] + ) { + return false; + } + } + return true; + } +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-container.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-container.ts new file mode 100644 index 0000000000000000000000000000000000000000..d499ed8e2ecaf879dee4490012bcdd58e15165eb --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-container.ts @@ -0,0 +1,68 @@ + +import {PolymerElement, html} from '@polymer/polymer'; +import {customElement, property} from '@polymer/decorators'; + +import '../../../components/polymer/irons_and_papers'; + +import './styles'; +import './vz-projector'; + +@customElement('vz-projector-container') +class VzProjectorContainer extends PolymerElement { + static get template() { + return html` + +
    + + +
    + `; + } + + @property({ type: String }) + routePrefix: string; + + @property({ type: String }) + servingMode: string; + + @property({ type: String }) + projectorConfigJsonPath: string; + + @property({ type: Boolean }) + pageViewLogging: boolean; + + @property({ type: Boolean }) + eventLogging: boolean; + + @property({ type: Number }) + instanceId: number = 1; + + @property({ type: Boolean }) + isContraVis: boolean = false; + + _checkSessionStorage() { + const isContraVis = window.sessionStorage.getItem('isContraVis'); + this.isContraVis = isContraVis === 'true'; + } + + connectedCallback() { + super.connectedCallback(); + this._checkSessionStorage(); + window.addEventListener('storage', (event) => { + if (event.key === 'isContraVis') { + this._checkSessionStorage(); + } + }); + } +} + + + + diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-dashboard.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-dashboard.ts new file mode 100644 index 0000000000000000000000000000000000000000..6f4960c4b3b300bea3abc11bc8c8e950b90c7551 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-dashboard.ts @@ -0,0 +1,109 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {PolymerElement, html} from '@polymer/polymer'; +import {customElement, property} from '@polymer/decorators'; + +@customElement('vz-projector-dashboard') +class VzProjectorDashboard extends PolymerElement { + static readonly template = html` + + + `; + @property({type: Boolean}) + dataNotFound: boolean; + + @property({type: String}) + _routePrefix: string = '.'; + + @property({type: Boolean}) + _initialized: boolean; + + reload() { + // Do not reload the embedding projector. Reloading could take a long time. + } + + connectedCallback() { + super.connectedCallback(); + + if (this._initialized) { + return; + } + let xhr = new XMLHttpRequest(); + xhr.open('GET', this._routePrefix + '/runs'); + xhr.onload = () => { + // Set this to true so we only initialize once. + this._initialized = true; + let runs = JSON.parse(xhr.responseText); + this.set('dataNotFound', runs.length === 0); + }; + xhr.onerror = () => { + this.set('dataNotFound', false); + }; + xhr.send(); + } + +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-data-panel.html.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-data-panel.html.ts new file mode 100644 index 0000000000000000000000000000000000000000..fd09d8f9192c0852268e9de3df26176b79ade84c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-data-panel.html.ts @@ -0,0 +1,647 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {html} from '@polymer/polymer'; + +import './styles'; +import '../../../components/tf_wbr_string/tf-wbr-string'; + +export const template = html` + + +
    DATA
    +
    + + + + + +
    +
    + + + + + + + + + + + + +
    +
    + Use categorical coloring + + + For metadata fields that have many unique values we use a gradient + color map by default. This checkbox allows you to force categorical + coloring by a given metadata field. + +
    + +
    + +
    + + + Load data from your computer + + Load + +
    +
    + +

    Load data from your computer

    + +
    +
    +
    + Step 1: Load a TSV file of + vectors. +
    +
    +
    +
    + Example of 3 vectors with dimension 4: +
    + 0.1 0.2 + 0.5 0.9
    + 0.2 0.1 + 5.0 0.2
    + 0.4 0.1 + 7.0 0.8 +
    +
    +
    + Choose file + +
    +
    +
    +
    +
    +
    + Step 2 (optional): + Load a TSV file of metadata. +
    +
    +
    +
    + Example of 3 data points and 2 columns.
    + Note: If there is more than one column, the first row will be + parsed as column labels. +
    + Pokémon Species
    + Wartortle Turtle
    + Venusaur Seed
    + Charmeleon Flame +
    +
    +
    + Choose file + +
    +
    +
    +
    +
    Click outside to dismiss.
    +
    + +

    Publish your embedding visualization and data

    + +
    +

    + If you'd like to share your visualization with the world, follow + these simple steps. See + this tutorial + for more. +

    +

    Step 1: Make data public

    +

    + Host tensors, metadata, sprite image, and bookmarks TSV files + publicly on the web. +

    +

    + One option is using a + github gist. If you choose this approach, make sure to link directly to the + raw file. +

    +
    +
    +

    Step 2: Projector config

    +
    + Optional: +
    + Metadata +
    +
    + Sprite +
    +
    + Bookmarks +
    +
    +
    + +
    +

    + Step 3: Host projector config +

    + After you have hosted the projector config JSON file you built + above, paste the URL to the config below. +
    + + + +
    +
    Click outside to dismiss.
    +
    +
    + + Sphereize data + + + The data is normalized by shifting each point by the centroid and making + it unit norm. + + +
    + + + + + + + + + +
    Checkpoint: + + + +
    Metadata: + + + +
    +
    +
    +`; diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-data-panel.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-data-panel.ts new file mode 100644 index 0000000000000000000000000000000000000000..90e3d43723ca3d36547b4682ffcba4439fbd297a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-data-panel.ts @@ -0,0 +1,757 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {PolymerElement} from '@polymer/polymer'; +import {customElement, property, observe} from '@polymer/decorators'; +import {schemeCategory10, scaleOrdinal, scaleLinear} from 'd3'; + +import {LegacyElementMixin} from '../../../components/polymer/legacy_element_mixin'; +import '../../../components/polymer/irons_and_papers'; + +import {template} from './vz-projector-data-panel.html'; +import { + ColorLegendThreshold, + ColorLegendRenderInfo, +} from './vz-projector-legend'; +import './vz-projector-legend'; +import { + ColumnStats, + ColorOption, + SpriteAndMetadataInfo, + Projection, +} from './data'; +import { + DataProvider, + EmbeddingInfo, + ProjectorConfig, + parseRawMetadata, + parseRawTensors, +} from './data-provider'; +import * as knn from './knn'; +import * as util from './util'; + +@customElement('vz-projector-data-panel') +class DataPanel extends LegacyElementMixin(PolymerElement) { + static readonly template = template; + + @property({type: String}) + selectedTensor: string; + @property({type: String}) + selectedRun: string; + @property({type: String, notify: true}) + selectedColorOptionName: string; + @property({type: String, notify: true}) + selectedLabelOption: string; + @property({type: Boolean}) + normalizeData: boolean; + @property({type: Boolean}) + showForceCategoricalColorsCheckbox: boolean; + @property({type: String}) + metadataEditorInput: string; + @property({type: String}) + metadataEditorInputLabel: string = 'Tag selection as'; + @property({type: String}) + metadataEditorColumn: string; + @property({type: Boolean}) + metadataEditorButtonDisabled: boolean; + @property({type: String}) + superviseInput: string; + @property({type: String}) + superviseInputLabel: string = 'Ignored label'; + @property({type: String}) + superviseColumn: string; + @property({type: Boolean}) + showSuperviseSettings: boolean = false; + @property({type: Boolean}) + showEditSettings: boolean = false; + @property({type: Boolean}) + showDVISettings: boolean = false; + + @property({type: String}) + readonly _wordDelimiter = '[/=_,-]'; + + private labelOptions: string[]; + private colorOptions: ColorOption[]; + forceCategoricalColoring: boolean = false; + private superviseInputSelected: string; + private selectedPointIndices: number[]; + private neighborsOfFirstPoint: knn.NearestEntry[]; + private dataProvider: DataProvider; + private tensorNames: { + name: string; + shape: number[]; + }[]; + private runNames: string[]; + private projector: any; // Projector; type omitted b/c LegacyElement + private projectorConfig: ProjectorConfig; + private colorLegendRenderInfo: ColorLegendRenderInfo; + private spriteAndMetadata: SpriteAndMetadataInfo; + private metadataFile: string; + private metadataFields: string[]; + private instanceId: number; + + ready() { + super.ready(); + this.normalizeData = true; + this.superviseInputSelected = ''; + } + initialize(projector: any, dp: DataProvider, instanceId:number) { + this.projector = projector; + this.dataProvider = dp; + this.instanceId = instanceId + this.setupUploadButtons(); + // Tell the projector whenever the data normalization changes. + // Unknown why, but the polymer checkbox button stops working as soon as + + this.$$('#normalize-data-checkbox').addEventListener('change', () => { + this.projector.setNormalizeData(this.normalizeData); + }); + let forceCategoricalColoringCheckbox = this.$$( + '#force-categorical-checkbox' + ); + forceCategoricalColoringCheckbox.addEventListener('change', () => { + this.setForceCategoricalColoring( + (forceCategoricalColoringCheckbox as HTMLInputElement).checked + ); + }); + // Get all the runs. + this.dataProvider.retrieveRuns((runs) => { + + this.runNames = runs; + // Choose the first run by default. + if (this.runNames.length > 0) { + if (this.selectedRun != runs[0]) { + // This set operation will automatically trigger the observer. + this.selectedRun = runs[0]; + } else { + // Explicitly load the projector config. We explicitly load because + // the run name stays the same, which means that the observer won't + // actually be triggered by setting the selected run. + this._generateUiForNewCheckpointForRun(this.selectedRun); + } + } + }); + } + setForceCategoricalColoring(forceCategoricalColoring: boolean) { + this.forceCategoricalColoring = forceCategoricalColoring; + (this.$$( + '#force-categorical-checkbox' + ) as HTMLInputElement).checked = this.forceCategoricalColoring; + this.updateMetadataUI(this.spriteAndMetadata.stats, this.metadataFile); + // The selected color option name doesn't change when we switch to using + // categorical coloring for stats with too many unique values, so we + // manually call this polymer observer so that we update the UI. + this._selectedColorOptionNameChanged(); + } + getSeparatorClass(isSeparator: boolean): string { + return isSeparator ? 'separator' : null; + } + metadataChanged( + spriteAndMetadata: SpriteAndMetadataInfo, + metadataFile?: string + ) { + this.spriteAndMetadata = spriteAndMetadata; + if (metadataFile != null) { + this.metadataFile = metadataFile; + } + this.updateMetadataUI(this.spriteAndMetadata.stats, this.metadataFile); + if ( + this.selectedColorOptionName == null || + this.colorOptions.filter((c) => c.name === this.selectedColorOptionName) + .length === 0 + ) { + this.selectedColorOptionName = this.colorOptions[0].name; + } + let labelIndex = -1; + this.metadataFields = spriteAndMetadata.stats.map((stats, i) => { + if (!stats.isNumeric && labelIndex === -1) { + labelIndex = i; + } + return stats.name; + }); + if ( + this.metadataEditorColumn == null || + this.metadataFields.filter((name) => name === this.metadataEditorColumn) + .length === 0 + ) { + // Make the default label the first non-numeric column. + this.metadataEditorColumn = this.metadataFields[Math.max(0, labelIndex)]; + } + if ( + this.superviseColumn == null || + this.metadataFields.filter((name) => name === this.superviseColumn) + .length === 0 + ) { + // Make the default supervise class the first non-numeric column. + this.superviseColumn = this.metadataFields[Math.max(0, labelIndex)]; + this.superviseInput = ''; + } + this.superviseInputChange(); + } + projectionChanged(projection: Projection) { + if (projection) { + switch (projection.projectionType) { + case 'tsne': + this.set('showSuperviseSettings', false); + this.set('showDVISettings', true); + break; + default: + this.set('showSuperviseSettings', false); + } + } + } + onProjectorSelectionChanged( + selectedPointIndices: number[], + neighborsOfFirstPoint: knn.NearestEntry[] + ) { + this.selectedPointIndices = selectedPointIndices; + this.neighborsOfFirstPoint = neighborsOfFirstPoint; + this.metadataEditorInputChange(); + } + private updateMetadataUI(columnStats: ColumnStats[], metadataFile: string) { + // Label by options. + let labelIndex = -1; + this.labelOptions = columnStats.map((stats, i) => { + // Make the default label by the first non-numeric column. + if (!stats.isNumeric && labelIndex === -1) { + labelIndex = i; + } + return stats.name; + }); + if ( + this.selectedLabelOption == null || + this.labelOptions.filter((name) => name === this.selectedLabelOption) + .length === 0 + ) { + this.selectedLabelOption = this.labelOptions[Math.max(0, labelIndex)]; + } + if ( + this.metadataEditorColumn == null || + this.labelOptions.filter((name) => name === this.metadataEditorColumn) + .length === 0 + ) { + this.metadataEditorColumn = this.labelOptions[Math.max(0, labelIndex)]; + } + // Color by options. + const standardColorOption: ColorOption[] = [{name: 'No color map'}]; + const metadataColorOption: ColorOption[] = columnStats + .filter((stats) => { + return !stats.tooManyUniqueValues || stats.isNumeric; + }) + .map((stats) => { + let map; + let items: { + label: string; + count: number; + }[]; + let thresholds: ColorLegendThreshold[]; + let isCategorical = + this.forceCategoricalColoring || !stats.tooManyUniqueValues; + let desc; + if (isCategorical) { + const scale = scaleOrdinal(schemeCategory10); + let range = scale.range(); + // Re-order the range. + let newRange = range.map((color, i) => { + let index = (i * 3) % range.length; + return range[index]; + }); + items = stats.uniqueEntries; + scale.range(newRange).domain(items.map((x) => x.label)); + map = scale; + const len = stats.uniqueEntries.length; + desc = + `${len} ${len > range.length ? ' non-unique' : ''} ` + `colors`; + } else { + thresholds = [ + {color: '#ffffdd', value: stats.min}, + {color: '#1f2d86', value: stats.max}, + ]; + map = + scaleLinear() + .domain(thresholds.map((t) => t.value)) + .range(thresholds.map((t) => t.color)); + desc = 'gradient'; + } + return { + name: stats.name, + desc: desc, + map: map, + items: items, + thresholds: thresholds, + tooManyUniqueValues: stats.tooManyUniqueValues, + }; + }); + if (metadataColorOption.length > 0) { + // Add a separator line between built-in color maps + // and those based on metadata columns. + standardColorOption.push({name: 'Metadata', isSeparator: true}); + } + this.colorOptions = standardColorOption.concat(metadataColorOption); + } + private metadataEditorContext(enabled: boolean) { + this.metadataEditorButtonDisabled = !enabled; + if (this.projector) { + this.projector.metadataEditorContext(enabled, this.metadataEditorColumn); + } + } + private metadataEditorInputChange() { + let col = this.metadataEditorColumn; + let value = this.metadataEditorInput; + let selectionSize = + this.selectedPointIndices.length + this.neighborsOfFirstPoint.length; + if (selectionSize > 0) { + if (value != null && value.trim() !== '') { + if ( + this.spriteAndMetadata.stats.filter((s) => s.name === col)[0] + .isNumeric && + isNaN(+value) + ) { + this.metadataEditorInputLabel = `Label must be numeric`; + this.metadataEditorContext(false); + } else { + let numMatches = this.projector.dataSet.points.filter( + (p) => p.metadata[col].toString() === value.trim() + ).length; + if (numMatches === 0) { + this.metadataEditorInputLabel = `Tag ${selectionSize} with new label`; + } else { + this.metadataEditorInputLabel = `Tag ${selectionSize} points as`; + } + this.metadataEditorContext(true); + } + } else { + this.metadataEditorInputLabel = 'Tag selection as'; + this.metadataEditorContext(false); + } + } else { + this.metadataEditorContext(false); + if (value != null && value.trim() !== '') { + this.metadataEditorInputLabel = 'Select points to tag'; + } else { + this.metadataEditorInputLabel = 'Tag selection as'; + } + } + } + private metadataEditorInputKeydown(e) { + // Check if 'Enter' was pressed + if (e.keyCode === 13) { + this.metadataEditorButtonClicked(); + } + e.stopPropagation(); + } + private metadataEditorColumnChange() { + this.metadataEditorInputChange(); + } + private metadataEditorButtonClicked() { + if (!this.metadataEditorButtonDisabled) { + let value = this.metadataEditorInput.trim(); + let selectionSize = + this.selectedPointIndices.length + this.neighborsOfFirstPoint.length; + this.projector.metadataEdit(this.metadataEditorColumn, value); + this.projector.metadataEditorContext(true, this.metadataEditorColumn); + this.metadataEditorInputLabel = `${selectionSize} labeled as '${value}'`; + } + } + private downloadMetadataClicked() { + if ( + this.projector && + this.projector.dataSet && + this.projector.dataSet.spriteAndMetadataInfo + ) { + let tsvFile = this.projector.dataSet.spriteAndMetadataInfo.stats + .map((s) => s.name) + .join('\t'); + this.projector.dataSet.spriteAndMetadataInfo.pointsInfo.forEach((p) => { + let vals = []; + for (const column in p) { + vals.push(p[column]); + } + tsvFile += '\n' + vals.join('\t'); + }); + const textBlob = new Blob([tsvFile], {type: 'text/plain'}); + const anyDownloadMetadataLink = this.$.downloadMetadataLink as any; + anyDownloadMetadataLink.download = 'metadata-edited.tsv'; + // TODO(b/162788443): Undo conformance workaround. + Object.assign(anyDownloadMetadataLink, { + href: window.URL['createObjectURL'](textBlob), + }); + anyDownloadMetadataLink.click(); + } + } + private superviseInputTyping() { + let value = this.superviseInput.trim(); + if (value == null || value.trim() === '') { + if (this.superviseInputSelected === '') { + this.superviseInputLabel = 'No ignored label'; + } else { + this.superviseInputLabel = `Supervising without '${this.superviseInputSelected}'`; + } + return; + } + if (this.projector && this.projector.dataSet) { + let numMatches = this.projector.dataSet.points.filter( + (p) => p.metadata[this.superviseColumn].toString().trim() === value + ).length; + if (numMatches === 0) { + this.superviseInputLabel = 'Label not found'; + } else { + if (this.projector.dataSet.superviseInput != value) { + this.superviseInputLabel = `Supervise without '${value}' [${numMatches} points]`; + } + } + } + } + private superviseInputChange() { + let value = this.superviseInput.trim(); + if (value == null || value.trim() === '') { + this.superviseInputSelected = ''; + this.superviseInputLabel = 'No ignored label'; + this.setSupervision(this.superviseColumn, ''); + return; + } + if (this.projector && this.projector.dataSet) { + let numMatches = this.projector.dataSet.points.filter( + (p) => p.metadata[this.superviseColumn].toString().trim() === value + ).length; + if (numMatches === 0) { + this.superviseInputLabel = `Supervising without '${this.superviseInputSelected}'`; + } else { + this.superviseInputSelected = value; + this.superviseInputLabel = `Supervising without '${value}' [${numMatches} points]`; + this.setSupervision(this.superviseColumn, value); + } + } + } + private superviseColumnChanged() { + this.superviseInput = ''; + this.superviseInputChange(); + } + private setSupervision(superviseColumn: string, superviseInput: string) { + if (this.projector && this.projector.dataSet) { + this.projector.dataSet.setSupervision(superviseColumn, superviseInput); + } + } + setNormalizeData(normalizeData: boolean) { + this.normalizeData = normalizeData; + } + @observe('selectedTensor') + _selectedTensorChanged() { + this.projector.updateDataSet(null, null, null); + if (this.selectedTensor == null) { + return; + } + this.dataProvider.retrieveTensor( + this.selectedRun, + this.selectedTensor, + (ds) => { + let metadataFile = this.getEmbeddingInfoByName(this.selectedTensor) + .metadataPath; + this.dataProvider.retrieveSpriteAndMetadata( + this.selectedRun, + this.selectedTensor, + (metadata) => { + this.projector.updateDataSet(ds, metadata, metadataFile); + } + ); + } + ); + + this.projector.setSelectedTensor( + this.selectedRun, + this.getEmbeddingInfoByName(this.selectedTensor) + ); + } + @observe('selectedRun') + _generateUiForNewCheckpointForRun(selectedRun) { + this.dataProvider.retrieveProjectorConfig(selectedRun, (info) => { + this.projectorConfig = info; + // let names = this.projectorConfig.embeddings + // .map((e) => e.tensorName) + // .filter((name) => { + // let shape = this.getEmbeddingInfoByName(name).tensorShape; + // return shape.length === 2 && shape[0] > 1 && shape[1] > 1; + // }) + // .sort((a, b) => { + // let embA = this.getEmbeddingInfoByName(a); + // let embB = this.getEmbeddingInfoByName(b); + // // Prefer tensors with metadata. + // if (util.xor(!!embA.metadataPath, !!embB.metadataPath)) { + // return embA.metadataPath ? -1 : 1; + // } + // // Prefer non-generated tensors. + // let isGenA = util.tensorIsGenerated(a); + // let isGenB = util.tensorIsGenerated(b); + // if (util.xor(isGenA, isGenB)) { + // return isGenB ? -1 : 1; + // } + // // Prefer bigger tensors. + // let sizeA = embA.tensorShape[0]; + // let sizeB = embB.tensorShape[0]; + // if (sizeA !== sizeB) { + // return sizeB - sizeA; + // } + // // Sort alphabetically by tensor name. + // return a <= b ? -1 : 1; + // }); + + // this.tensorNames = names.map((name) => { + // return {name, shape: this.getEmbeddingInfoByName(name).tensorShape}; + // }); + + + // // If in demo mode, let the order decide which tensor to load by default. + const defaultTensor = + this.projectorConfig.embeddings[0].tensorName + + + // const defaultTensor = + // this.projector.servingMode === 'demo' + // ? this.projectorConfig.embeddings[0].tensorName + // : names[0]; + // if (this.selectedTensor === defaultTensor) { + // // Explicitly call the observer. Polymer won't call it if the previous + // // string matches the current string. + // this._selectedTensorChanged(); + // } else { + this.selectedTensor = defaultTensor; + + }); + } + + @observe('selectedLabelOption') + _selectedLabelOptionChanged() { + this.projector.setSelectedLabelOption(this.selectedLabelOption); + } + @observe('selectedColorOptionName') + _selectedColorOptionNameChanged() { + let colorOption: ColorOption; + for (let i = 0; i < this.colorOptions.length; i++) { + if (this.colorOptions[i].name === this.selectedColorOptionName) { + colorOption = this.colorOptions[i]; + break; + } + } + if (!colorOption) { + return; + } + this.showForceCategoricalColorsCheckbox = !!colorOption.tooManyUniqueValues; + if (colorOption.map == null) { + this.colorLegendRenderInfo = null; + } else if (colorOption.items) { + let items = colorOption.items.map((item) => { + return { + color: colorOption.map(item.label), + label: item.label, + count: item.count, + }; + }); + this.colorLegendRenderInfo = {items, thresholds: null}; + } else { + this.colorLegendRenderInfo = { + items: null, + thresholds: colorOption.thresholds, + }; + } + // this.projector.setSelectedColorOption(colorOption); + } + private tensorWasReadFromFile(rawContents: ArrayBuffer, fileName: string) { + parseRawTensors(rawContents, this.instanceId, (ds) => { + const checkpointFile = this.$$('#checkpoint-file') as HTMLSpanElement; + checkpointFile.innerText = fileName; + checkpointFile.title = fileName; + this.projector.updateDataSet(ds); + }); + } + private metadataWasReadFromFile(rawContents: ArrayBuffer, fileName: string) { + parseRawMetadata(rawContents, (metadata) => { + this.projector.updateDataSet(this.projector.dataSet, metadata, fileName); + }); + } + private getEmbeddingInfoByName(tensorName: string): EmbeddingInfo { + for (let i = 0; i < this.projectorConfig.embeddings.length; i++) { + const e = this.projectorConfig.embeddings[i]; + if (e.tensorName === tensorName) { + return e; + } + } + } + private setupUploadButtons() { + // Show and setup the upload button. + const fileInput = this.$$('#file') as HTMLInputElement; + fileInput.onchange = () => { + const file: File = fileInput.files[0]; + // Clear out the value of the file chooser. This ensures that if the user + // selects the same file, we'll re-read it. + fileInput.value = ''; + const fileReader = new FileReader(); + fileReader.onload = (evt) => { + const content: ArrayBuffer = fileReader.result as ArrayBuffer; + this.tensorWasReadFromFile(content, file.name); + }; + fileReader.readAsArrayBuffer(file); + }; + const uploadButton = this.$$('#upload-tensors') as HTMLButtonElement; + uploadButton.onclick = () => { + fileInput.click(); + }; + // Show and setup the upload metadata button. + const fileMetadataInput = this.$$('#file-metadata') as HTMLInputElement; + fileMetadataInput.onchange = () => { + const file: File = fileMetadataInput.files[0]; + // Clear out the value of the file chooser. This ensures that if the user + // selects the same file, we'll re-read it. + fileMetadataInput.value = ''; + const fileReader = new FileReader(); + fileReader.onload = (evt) => { + const contents: ArrayBuffer = fileReader.result as ArrayBuffer; + this.metadataWasReadFromFile(contents, file.name); + }; + fileReader.readAsArrayBuffer(file); + }; + const uploadMetadataButton = this.$$( + '#upload-metadata' + ) as HTMLButtonElement; + uploadMetadataButton.onclick = () => { + fileMetadataInput.click(); + }; + if (this.projector.servingMode !== 'demo') { + (this.$$('#publish-container') as HTMLElement).style.display = 'none'; + (this.$$('#upload-tensors-step-container') as HTMLElement).style.display = + 'none'; + (this.$$('#upload-metadata-label') as HTMLElement).style.display = 'none'; + } + (this.$$('#demo-data-buttons-container') as HTMLElement).style.display = + 'flex'; + // Fill out the projector config. + const projectorConfigTemplate = this.$$( + '#projector-config-template' + ) as HTMLTextAreaElement; + const projectorConfigTemplateJson: ProjectorConfig = { + embeddings: [ + { + tensorName: 'My tensor', + tensorShape: [1000, 50], + tensorPath: 'https://raw.githubusercontent.com/.../tensors.tsv', + metadataPath: + 'https://raw.githubusercontent.com/.../optional.metadata.tsv', + }, + ], + }; + this.setProjectorConfigTemplateJson( + projectorConfigTemplate, + projectorConfigTemplateJson + ); + // Set up optional field checkboxes. + const spriteFieldCheckbox = this.$$( + '#config-sprite-checkbox' + ) as HTMLInputElement; + spriteFieldCheckbox.onchange = () => { + if ((spriteFieldCheckbox as any).checked) { + projectorConfigTemplateJson.embeddings[0].sprite = { + imagePath: 'https://github.com/.../optional.sprite.png', + singleImageDim: [32, 32], + }; + } else { + delete projectorConfigTemplateJson.embeddings[0].sprite; + } + this.setProjectorConfigTemplateJson( + projectorConfigTemplate, + projectorConfigTemplateJson + ); + }; + const bookmarksFieldCheckbox = this.$$( + '#config-bookmarks-checkbox' + ) as HTMLInputElement; + bookmarksFieldCheckbox.onchange = () => { + if ((bookmarksFieldCheckbox as any).checked) { + projectorConfigTemplateJson.embeddings[0].bookmarksPath = + 'https://raw.githubusercontent.com/.../bookmarks.txt'; + } else { + delete projectorConfigTemplateJson.embeddings[0].bookmarksPath; + } + this.setProjectorConfigTemplateJson( + projectorConfigTemplate, + projectorConfigTemplateJson + ); + }; + const metadataFieldCheckbox = this.$$( + '#config-metadata-checkbox' + ) as HTMLInputElement; + metadataFieldCheckbox.onchange = () => { + if ((metadataFieldCheckbox as HTMLInputElement).checked) { + projectorConfigTemplateJson.embeddings[0].metadataPath = + 'https://raw.githubusercontent.com/.../optional.metadata.tsv'; + } else { + delete projectorConfigTemplateJson.embeddings[0].metadataPath; + } + this.setProjectorConfigTemplateJson( + projectorConfigTemplate, + projectorConfigTemplateJson + ); + }; + // Update the link and the readonly shareable URL. + const projectorConfigUrlInput = this.$$( + '#projector-config-url' + ) as HTMLInputElement; + const projectorConfigDemoUrlInput = this.$$('#projector-share-url'); + const projectorConfigDemoUrlLink = this.$$('#projector-share-url-link'); + projectorConfigUrlInput.onchange = () => { + let projectorDemoUrl = + location.protocol + + '//' + + location.host + + location.pathname + + '?config=' + + (projectorConfigUrlInput as HTMLInputElement).value; + (projectorConfigDemoUrlInput as HTMLInputElement).value = projectorDemoUrl; + // TODO(b/162788443): Undo conformance workaround. + Object.assign(projectorConfigDemoUrlLink as HTMLLinkElement, { + href: projectorDemoUrl, + }); + }; + } + private setProjectorConfigTemplateJson( + projectorConfigTemplate: HTMLTextAreaElement, + config: ProjectorConfig + ) { + projectorConfigTemplate.value = JSON.stringify( + config, + null, + /** replacer */ 2 /** white space */ + ); + } + _getNumTensorsLabel(): string { + return this.tensorNames.length === 1 + ? '1 tensor' + : this.tensorNames.length + ' tensors'; + } + _getNumRunsLabel(): string { + return this.runNames.length === 1 + ? '1 run' + : this.runNames.length + ' runs'; + } + _hasChoice(choices: any[]): boolean { + return choices.length > 0; + } + _hasChoices(choices: any[]): boolean { + return choices.length > 1; + } + _openDataDialog(): void { + (this.$.dataDialog as any).open(); + } + _openConfigDialog(): void { + (this.$.projectorConfigDialog as any).open(); + } +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-input.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-input.ts new file mode 100644 index 0000000000000000000000000000000000000000..0be80c963148e585db5b4a3d8425cd071de312fe --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-input.ts @@ -0,0 +1,154 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {PolymerElement, html} from '@polymer/polymer'; +import {customElement, property} from '@polymer/decorators'; + +import {LegacyElementMixin} from '../../../components/polymer/legacy_element_mixin'; +import '../../../components/polymer/irons_and_papers'; + +import './styles'; + +export interface InputChangedListener { + (value: string, inRegexMode: boolean): void; +} + +@customElement('vz-projector-input') +class ProjectorInput extends LegacyElementMixin(PolymerElement) { + static readonly template = html` + + + + +
    /
    +
    /
    +
    + .* +
    +
    + + Enable/disable regex mode. + + [[message]] + `; + @property({type: String}) + label: string; + + @property({type: Boolean}) + noShowRegex: boolean; + + /** Message that will be displayed at the bottom of the input control. */ + @property({type: String}) + message: string; + + private textChangedListeners: InputChangedListener[]; + private paperInput: HTMLInputElement; + private inRegexModeButton: HTMLButtonElement; + private inRegexMode: boolean; + + /** Subscribe to be called everytime the input changes. */ + registerInputChangedListener(listener: InputChangedListener) { + this.textChangedListeners.push(listener); + } + ready() { + super.ready(); + this.inRegexMode = false; + this.noShowRegex = false; + this.textChangedListeners = []; + this.paperInput = this.$$('paper-input') as HTMLInputElement; + this.inRegexModeButton = this.$$('paper-button') as HTMLButtonElement; + this.paperInput.setAttribute('error-message', 'Invalid regex'); + this.paperInput.addEventListener('input', () => { + this.onTextChanged(); + }); + this.paperInput.addEventListener('keydown', (event) => { + event.stopPropagation(); + }); + this.inRegexModeButton.addEventListener('click', () => + this.onClickRegexModeButton() + ); + this.updateRegexModeDisplaySlashes(); + this.onTextChanged(); + } + private onClickRegexModeButton() { + this.inRegexMode = (this.inRegexModeButton as any).active; + this.updateRegexModeDisplaySlashes(); + this.onTextChanged(); + } + private notifyInputChanged(value: string, inRegexMode: boolean) { + this.textChangedListeners.forEach((l) => l(value, inRegexMode)); + } + private onTextChanged() { + try { + if (this.inRegexMode) { + new RegExp(this.paperInput.value); + } + } catch (invalidRegexException) { + this.paperInput.setAttribute('invalid', 'true'); + this.message = ''; + this.notifyInputChanged(null, true); + return; + } + this.paperInput.removeAttribute('invalid'); + this.notifyInputChanged(this.paperInput.value, this.inRegexMode); + } + private updateRegexModeDisplaySlashes() { + const slashes = this.paperInput.querySelectorAll('.slash'); + const display = this.inRegexMode ? '' : 'none'; + for (let i = 0; i < slashes.length; i++) { + (slashes[i] as HTMLDivElement).style.display = display; + } + } + getValue(): string { + return this.paperInput.value; + } + getInRegexMode(): boolean { + return this.inRegexMode; + } + setValue(value: string, inRegexMode: boolean) { + (this.inRegexModeButton as any).active = inRegexMode; + this.paperInput.value = value; + this.onClickRegexModeButton(); + } +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-inspector-panel.html.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-inspector-panel.html.ts new file mode 100644 index 0000000000000000000000000000000000000000..b09a5eb08b31eb572c60688123bdb60fbf09d9cd --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-inspector-panel.html.ts @@ -0,0 +1,668 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import { html } from '@polymer/polymer'; + +export const template = html` + + + +
    + +
    +
    + + + Query By Actived Learning + + + + + + Query By Actived Learning + + +
    + Normal Query +
    + + Normal Query + +
    +
    + + +
    +
    +
    + + + + + + + +
    +
    +
    + + + + + +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + query By active Learning + + +
    + + +
    + + + +
    +
    + +
    +
    + + + + +
    + + +
    + + +
    + + +
    +
    +
    + + + + + + + + + +
    + + + +
    +`; diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-inspector-panel.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-inspector-panel.ts new file mode 100644 index 0000000000000000000000000000000000000000..462f22e153e4082991159f30aae4e58f48b5b7f5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-inspector-panel.ts @@ -0,0 +1,1726 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { PolymerElement } from '@polymer/polymer'; +import { customElement, observe, property } from '@polymer/decorators'; + +import { LegacyElementMixin } from '../../../components/polymer/legacy_element_mixin'; +import '../../../components/polymer/irons_and_papers'; + +import { DistanceFunction, SpriteAndMetadataInfo, State, DataSet } from './data'; +import { template } from './vz-projector-inspector-panel.html'; +import './vz-projector-input'; +import { dist2color, normalizeDist } from './projectorScatterPlotAdapter'; +import { ProjectorEventContext } from './projectorEventContext'; +import { ScatterPlot, MouseMode } from './scatterPlot'; +import './globalState'; + +import { ProjectorScatterPlotAdapter } from './projectorScatterPlotAdapter'; + +import * as knn from './knn'; +import * as vector from './vector'; +import * as util from './util'; +import * as logging from './logging'; +import { updateSessionStateForInstance, updateStateForInstance, getAlSuggestLabelList, getFlagindecatesList,getQueryResAnormalCleanIndecates, getLineGeomertryList, getAcceptInputList, getAlSuggestScoreList, getRejectInputList, getTaskType, getAcceptIndicates, getQueryResAnormalIndecates, getCustomSelection, getModelMath, getCheckBoxDom, getQueryResPointIndices, getRejectIndicates, getPreviousIndecates, getIteration } from './globalState'; + +const LIMIT_RESULTS = 10000; +const DEFAULT_NEIGHBORS = 100; + +type SpriteMetadata = { + imagePath?: string; + singleImageDim?: number[]; + aspectRatio?: number; + nCols?: number; +}; + +@customElement('vz-projector-inspector-panel') +class InspectorPanel extends LegacyElementMixin(PolymerElement) { + static readonly template = template; + + dataSet: DataSet; + + @property({ type: String }) + selectedStratergy: string = 'Interest potential'; + + @property({ type: String }) + selectedAnormalyStratergy: string; + + @property({ type: Number }) + selectedAnormalyClass: number = 0; + + @property({ type: Number }) + budget: number + + @property({ type: Number }) + anomalyRecNum: number + + @property({ type: Number }) + suggestKNum: number + + @property({ type: String }) + selectedMetadataField: string; + + @property({ type: Array }) + metadataFields: Array; + + @property({ type: String }) + metadataColumn: string; + + @property({ type: Number }) + numNN: number = DEFAULT_NEIGHBORS; + + @property({ type: Object }) + spriteMeta: SpriteMetadata; + + @property({ type: Boolean }) + showNeighborImages: boolean = true; + + @property({ type: Number }) + confidenceThresholdFrom: number + + @property({ type: Number }) + confidenceThresholdTo: number + + @property({ type: Boolean }) + disabledAlExBase: boolean = false + + + // @property({ type: Number }) + // epochFrom: number + + // @property({ type: Number }) + // epochTo: number + + @property({ type: Boolean }) + showTrace: false + + @property({ type: Number }) + currentPlayedEpoch: number + + @property({ type: Number }) + totalEpoch: number + + @property({ type: Boolean }) + spriteImagesAvailable: Boolean = true; + + @property({ type: Boolean }) + noShow: Boolean = false; + + @property({ type: Boolean }) + isCollapsed: boolean = false; + + @property({ type: Boolean }) + checkAllQueryRes: boolean = false + + @property({ type: String }) + collapseIcon: string = 'expand-less'; + + @property({ type: Boolean }) + showAnomaly: boolean = false + + @property({ type: Boolean }) + isControlGroup: boolean = false + + @property({ type: Boolean }) + shownormal: boolean = false + + @property({ type: String }) + queryResultListTitle: string = 'Query Result List' + + @property({ type: Boolean }) + showCheckAllQueryRes: boolean = true + + @property({ type: Boolean }) + showMoreRecommend: boolean = true + + + @property({ type: Boolean }) + showPlayAndStop: boolean = false + + + @property({ type: Number }) + moreRecommednNum: number = 10 + + @property({ type: Boolean }) + accAll: boolean = false + + @property({ type: Boolean }) + rejAll: boolean = false + + + @property({ type: Boolean }) + showUnlabeledChecked: boolean = true + + @property({ type: Number }) + instanceId: number + + + distFunc: DistanceFunction; + + public scatterPlot: ScatterPlot; + private projectorEventContext: ProjectorEventContext; + private projectionsPanel: any; + private displayContexts: string[]; + private projector: any; // Projector; type omitted b/c LegacyElement + private selectedPointIndices: number[]; + private neighborsOfFirstPoint: knn.NearestEntry[]; + private searchBox: any; // ProjectorInput; type omitted b/c LegacyElement + + private queryByStrategtBtn: HTMLButtonElement; + private moreRecommend: HTMLButtonElement; + private queryAnomalyBtn: HTMLButtonElement; + private showSelectionBtn: HTMLButtonElement; + private noisyshowSelectionBtn: HTMLButtonElement; + + private boundingSelectionBtn: HTMLButtonElement; + private isAlSelecting: boolean; + private trainBySelBtn: HTMLButtonElement; + + private resetFilterButton: HTMLButtonElement; + private setFilterButton: HTMLButtonElement; + private clearSelectionButton: HTMLButtonElement; + private searchButton: HTMLButtonElement; + private addButton: HTMLButtonElement; + private resetButton: HTMLButtonElement; + private sentButton: HTMLButtonElement; + private showButton: HTMLButtonElement; + private selectinMessage: HTMLElement; + + private noisyBtn: HTMLButtonElement; + private stopBtn: HTMLButtonElement; + private scatterPlotContainer: HTMLElement; + + private limitMessage: HTMLDivElement; + private _currentNeighbors: any; + // save current predicates + private currentPredicate: { [key: string]: any }; // dictionary + private queryIndices: number[]; + private searchPredicate: string; + private searchInRegexMode: boolean; + private filterIndices: number[]; + private searchFields: string[]; + private statergyList: string[]; + private anormalyStatergyList: string[]; + private classOptionsList: any; + private boundingBoxSelection: number[]; + private currentBoundingBoxSelection: number[]; + private projectorScatterPlotAdapter: ProjectorScatterPlotAdapter; + + private rejAllRadio: any; + private accAllRadio: any; + + + private currentFilterType: string + + private labelMap: any + private state: any; + + constructor() { + super(); + + // other constructor code +} + + ready() { + super.ready(); + + + this.isAlSelecting = false + + this.currentFilterType = 'normal' + + + + this.showAnomaly = window.sessionStorage.taskType == 'anormaly detection' + this.shownormal = window.sessionStorage.taskType == 'active learning' || getTaskType(this.instanceId) == 'active learning' + this.isControlGroup = window.sessionStorage.isControlGroup == 'true' + + // this.showUnlabeledChecked = window.sessionStorage.taskType == 'active learning' || window.taskType == 'active learning' + + // if (window.sessionStorage.taskType == 'active learning') { + // this.moreRecommednNum = 100 + // } + + this.queryByStrategtBtn = this.$$('.query-by-stratergy') as HTMLButtonElement; + this.moreRecommend = this.$$('.query-by-sel-btn') as HTMLButtonElement; + this.showSelectionBtn = this.$$('.show-selection') as HTMLButtonElement; + this.noisyshowSelectionBtn = this.$$('.noisy-show-selection') as HTMLButtonElement + this.queryAnomalyBtn = this.$$('.query-anomaly') as HTMLButtonElement; + + this.accAllRadio = this.$$('#accAllRadio') as HTMLElement; + this.rejAllRadio = this.$$('#rejAllRadio') as HTMLElement; + // this.boundingSelectionBtn = this.$$('.bounding-selection') as HTMLButtonElement; + + // this.resetFilterButton = this.$$('.reset-filter') as HTMLButtonElement; + // this.setFilterButton = this.$$('.set-filter') as HTMLButtonElement; + // this.clearSelectionButton = this.$$( + // '.clear-selection' + // ) as HTMLButtonElement; + this.noisyBtn = this.$$('.show-noisy-btn') as HTMLButtonElement + this.stopBtn = this.$$('.stop-animation-btn') as HTMLButtonElement + + this.searchButton = this.$$('.search') as HTMLButtonElement; + this.addButton = this.$$('.add') as HTMLButtonElement; + this.resetButton = this.$$('.reset') as HTMLButtonElement; + this.sentButton = this.$$('.sent') as HTMLButtonElement; + this.showButton = this.$$('.show') as HTMLButtonElement; + // this.selectinMessage = this.$$('.boundingBoxSelection') as HTMLElement; + this.trainBySelBtn = this.$$('.train-by-selection') as HTMLButtonElement + this.projectionsPanel = this.$['projections-panel'] as any; // ProjectionsPanel + + + this.limitMessage = this.$$('.limit-msg') as HTMLDivElement; + this.searchBox = this.$$('#search-box') as any; // ProjectorInput + this.displayContexts = []; + // show noisy points + + this.currentPredicate = {}; + this.queryIndices = []; + this.filterIndices = []; + this.boundingBoxSelection = []; + this.currentBoundingBoxSelection = []; + // this.selectinMessage.innerText = "0 seleted."; + this.confidenceThresholdFrom = 0 + this.confidenceThresholdTo = 1 + + this.disabledAlExBase = false + // this.epochFrom = 1 + // this.epochTo = 1 + this.showTrace = false + this.checkAllQueryRes = false + + this.budget = 10 + this.anomalyRecNum = 10 + this.suggestKNum = 10 + } + initialize(projector: any, projectorEventContext: ProjectorEventContext) { + this.projector = projector; + this.projectorEventContext = projectorEventContext; + this.setupUI(projector); + this.labelMap = { + "0": "plane", + "1": "car", + "2": "bird", + "3": "cat", + "4": "deer", + "5": "dog", + "6": "frog", + "7": "horse", + "8": "ship", + "9": "truck" + } + projectorEventContext.registerSelectionChangedListener( + (selection, neighbors) => this.updateInspectorPane(selection, neighbors) + ); + // TODO change them based on metadata fields + this.searchFields = ["type", "label"] + // active learning statergy + this.statergyList = ["Interest potential", "Random"] + // anormaly detection statergy + this.anormalyStatergyList = ['anormalyStageone', 'anormalyStageTwo', 'anormalyStageThree'] + // anormaly detcttion classes + this.classOptionsList = [{ value: 0, label: 'airplane' }, { value: 1, label: 'car' }, { value: 2, label: 'bird' }, { value: 3, label: 'cat' }, { value: 4, label: 'deer' }, { value: 5, label: 'dog' }, { value: 6, label: 'frog' }, { value: 7, label: 'horse' }, { value: 8, label: 'ship' }, { value: 9, label: 'truck' }] + // TODO read real points length from dataSet + for (let i = 0; i < 70000; i++) { + this.filterIndices.push(i); + } + this.noisyBtn.style.visibility = Boolean(getCustomSelection(this.instanceId)?.length) ? '' : 'hidden' + + this.stopBtn.style.visibility = Boolean(getCustomSelection(this.instanceId)?.length) ? '' : 'hidden' + } + /** Updates the nearest neighbors list in the inspector. */ + private updateInspectorPane( + indices: number[], + neighbors: knn.NearestEntry[] + ) { + this.neighborsOfFirstPoint = neighbors; + this.selectedPointIndices = indices; + // this.updateFilterButtons(indices.length + neighbors.length); + // this.updateFilterButtons(indices.length); + this.updateNeighborsList(neighbors); + if (neighbors.length === 0) { + this.updateSearchResults(indices); + } else { + this.updateSearchResults([]); + } + } + private enableResetFilterButton(enabled: boolean) { + // this.resetFilterButton.disabled = !enabled; + } + + /** Handles toggle of metadata-container. */ + _toggleMetadataContainer() { + (this.$$('#metadata-container') as any).toggle(); + this.isCollapsed = !this.isCollapsed; + this.set('collapseIcon', this.isCollapsed ? 'expand-more' : 'expand-less'); + } + refreshBtnStyle() { + this.noisyBtn.style.visibility = Boolean(getCustomSelection(this.instanceId)?.length) ? '' : 'hidden' + this.stopBtn.style.visibility = Boolean(getCustomSelection(this.instanceId)?.length) ? '' : 'hidden' + } + restoreUIFromBookmark(bookmark: State) { + this.enableResetFilterButton(bookmark.filteredPoints != null); + } + metadataChanged(spriteAndMetadata: SpriteAndMetadataInfo) { + let labelIndex = -1; + this.metadataFields = spriteAndMetadata.stats.map((stats, i) => { + if (!stats.isNumeric && labelIndex === -1) { + labelIndex = i; + } + return stats.name; + }); + if ( + spriteAndMetadata.spriteMetadata && + spriteAndMetadata.spriteMetadata.imagePath + ) { + const [ + spriteWidth, + spriteHeight, + ] = spriteAndMetadata.spriteMetadata.singleImageDim; + this.spriteMeta = { + imagePath: spriteAndMetadata.spriteImage?.src, + aspectRatio: spriteWidth / spriteHeight, + nCols: Math.floor(spriteAndMetadata.spriteImage?.width / spriteWidth), + singleImageDim: [spriteWidth, spriteHeight], + }; + } else { + this.spriteMeta = {}; + } + this.spriteImagesAvailable = !!this.spriteMeta.imagePath; + if ( + this.selectedMetadataField == null || + this.metadataFields.filter((name) => name === this.selectedMetadataField) + .length === 0 + ) { + // Make the default label the first non-numeric column. + this.selectedMetadataField = this.metadataFields[Math.max(0, labelIndex)]; + } + this.updateInspectorPane( + this.selectedPointIndices, + this.neighborsOfFirstPoint + ); + } + datasetChanged() { + this.enableResetFilterButton(false); + } + + @observe('showNeighborImages', 'spriteImagesAvailable') + _refreshNeighborsList() { + this.updateNeighborsList(); + } + + @observe('accAll') + _accAllRes() { + if (this.accAll) { + console.log(12333) + } + + } + + + + @observe('showTrace') + _refreshScatterplot() { + if (this.showTrace) { + this.projectorEventContext?.renderInTraceLine(true) + } else { + this.projectorEventContext?.renderInTraceLine(false) + } + } + @observe('checkAllQueryRes') + _checkAll() { + // if (!getCheckBoxDom(this.instanceId)) { + // console.error('checkboxDom is not defined in the state'); + // return; + // } + if (this.checkAllQueryRes) { + + if (getCheckBoxDom(this.instanceId)) { + + if (getQueryResPointIndices(this.instanceId) && getQueryResPointIndices(this.instanceId).length) { + for (let i = 0; i < getQueryResPointIndices(this.instanceId).length; i++) { + let index = getQueryResPointIndices(this.instanceId)[i] + if (getCustomSelection(this.instanceId).indexOf(index) === -1) { + if (getCheckBoxDom(this.instanceId)[index]) { + + // updateStateForInstance(this.instanceId, {che}) + // Clone the checkboxDom array to avoid direct mutation + const newCheckboxDom = getCheckBoxDom(this.instanceId); + + // Modify the specific checkbox's checked property + if (newCheckboxDom[index]) { + newCheckboxDom[index].checked = true; + } + + // Update the state with the modified checkboxDom + updateStateForInstance(this.instanceId, { checkboxDom: newCheckboxDom }); + // getCheckBoxDom(this.instanceId)[index].checked = true + } + // Create a new array with the additional index + const newCustomSelection = getCustomSelection(this.instanceId); + newCustomSelection.push(index); + + // Update the state with the new array + updateStateForInstance(this.instanceId, { customSelection: newCustomSelection }); + // getCustomSelection(this.instanceId).push(index) + } + } + this.projectorEventContext.refresh() + } + } + } else { + if (getCheckBoxDom(this.instanceId)) { + if (getQueryResPointIndices(this.instanceId) && getQueryResPointIndices(this.instanceId).length) { + for (let i = 0; i < getQueryResPointIndices(this.instanceId).length; i++) { + let index = getQueryResPointIndices(this.instanceId)[i] + if (getCustomSelection(this.instanceId).indexOf(index) !== -1) { + let m = getCustomSelection(this.instanceId).indexOf(index) + if (getCheckBoxDom(this.instanceId)[index]) { + const newCheckboxDom = getCheckBoxDom(this.instanceId); + + // Modify the specific checkbox's checked property + if (newCheckboxDom[index]) { + newCheckboxDom[index].checked = false; + } + + // Update the state with the modified checkboxDom + updateStateForInstance(this.instanceId, { checkboxDom: newCheckboxDom }); + + // getCheckBoxDom(this.instanceId)[index].checked = false + } + const newCustomSelection = getCustomSelection(this.instanceId); + + // Perform the splice operation on the new array + newCustomSelection.splice(m, 1); + + // Update the state with the modified array + updateStateForInstance(this.instanceId, { customSelection: newCustomSelection }); + // getCustomSelection(this.instanceId).splice(m, 1) + this.noisyBtn.style.visibility = Boolean(getCustomSelection(this.instanceId)?.length) ? '' : 'hidden' + this.stopBtn.style.visibility = Boolean(getCustomSelection(this.instanceId)?.length) ? '' : 'hidden' + } + } + this.projectorEventContext.refresh() + } + } + } + } + + metadataEditorContext(enabled: boolean, metadataColumn: string) { + if (!this.projector || !this.projector.dataSet) { + return; + } + let stat = this.projector.dataSet.spriteAndMetadataInfo.stats.filter( + (s) => s.name === metadataColumn + ); + if (!enabled || stat.length === 0 || stat[0].tooManyUniqueValues) { + this.removeContext('.metadata-info'); + return; + } + this.metadataColumn = metadataColumn; + this.addContext('.metadata-info'); + let list = this.$$('.metadata-list') as HTMLDivElement; + list.textContent = ''; + let entries = stat[0].uniqueEntries.sort((a, b) => a.count - b.count); + let maxCount = entries[entries.length - 1].count; + entries.forEach((e) => { + const metadataElement = document.createElement('div'); + metadataElement.className = 'metadata'; + const metadataElementLink = document.createElement('a'); + metadataElementLink.className = 'metadata-link'; + metadataElementLink.title = e.label; + const labelValueElement = document.createElement('div'); + labelValueElement.className = 'label-and-value'; + const labelElement = document.createElement('div'); + labelElement.className = 'label'; + labelElement.style.color = dist2color(this.distFunc, maxCount, e.count); + labelElement.innerText = e.label; + const valueElement = document.createElement('div'); + valueElement.className = 'value'; + valueElement.innerText = e.count.toString(); + labelValueElement.appendChild(labelElement); + labelValueElement.appendChild(valueElement); + const barElement = document.createElement('div'); + barElement.className = 'bar'; + const barFillElement = document.createElement('div'); + barFillElement.className = 'fill'; + barFillElement.style.borderTopColor = dist2color( + this.distFunc, + maxCount, + e.count + ); + barFillElement.style.width = + normalizeDist(this.distFunc, maxCount, e.count) * 100 + '%'; + barElement.appendChild(barFillElement); + for (let j = 1; j < 4; j++) { + const tickElement = document.createElement('div'); + tickElement.className = 'tick'; + tickElement.style.left = (j * 100) / 4 + '%'; + barElement.appendChild(tickElement); + } + metadataElementLink.appendChild(labelValueElement); + metadataElementLink.appendChild(barElement); + metadataElement.appendChild(metadataElementLink); + list.appendChild(metadataElement); + metadataElementLink.onclick = () => { + this.projector.metadataEdit(metadataColumn, e.label); + }; + }); + } + + private addContext(context: string) { + if (this.displayContexts.indexOf(context) === -1) { + this.displayContexts.push(context); + } + this.displayContexts.forEach((c) => { + (this.$$(c) as HTMLDivElement).style.display = 'none'; + }); + (this.$$(context) as HTMLDivElement).style.display = null; + } + private removeContext(context: string) { + this.displayContexts = this.displayContexts.filter((c) => c !== context); + (this.$$(context) as HTMLDivElement).style.display = 'none'; + if (this.displayContexts.length > 0) { + let lastContext = this.displayContexts[this.displayContexts.length - 1]; + (this.$$(lastContext) as HTMLDivElement).style.display = null; + } + } + clearQueryResList() { + this.updateSearchResults([]) + } + refreshSearchResult() { + this.updateSearchResults(this.queryIndices) + } + + refreshSearchResByList(list: any) { + this.updateSearchResults(list) + } + private async updateSearchResults(indices: number[]) { + if (this.accAllRadio?.checked || this.rejAllRadio?.checked) { + this.accAllRadio.checked = false + this.rejAllRadio.checked = false + } + const container = this.$$('.matches-list') as HTMLDivElement; + const list = container.querySelector('.list') as HTMLDivElement; + list.textContent = ''; + if (indices.length === 0) { + this.removeContext('.matches-list'); + return; + } + this.addContext('.matches-list'); + this.limitMessage.style.display = + indices.length <= LIMIT_RESULTS ? 'none' : null; + indices = indices.slice(0, LIMIT_RESULTS); + this.moreRecommend = container.querySelector('.query-by-sel-btn') as HTMLButtonElement + + // const msgId = logging.setModalMessage('Fetching sprite image...'); + if (this.moreRecommend) { + + this.moreRecommend.onclick = () => { + if (!getAcceptIndicates(this.instanceId) || !getRejectIndicates(this.instanceId)) { + logging.setErrorMessage('Please confirm some selection first'); + return + } + if (window.sessionStorage.taskType === 'active learning') { + // let accIndices = [] + // let rejIndices = [] + // if (!window.previousIndecates) { + // window.previousIndecates = [] + // } + // if (!window.acceptIndicates) { + // window.acceptIndicates = [] + // } else { + // for (let i = 0; i < window.acceptIndicates.length; i++) { + // if (window.previousIndecates.indexOf(window.customSelection[i]) == -1) { + // accIndices.push(window.customSelection[i]) + // } else { + // previoustIIndices.push(window.customSelection[i]) + // } + // } + // } + this.queryByAl(this.projector, getAcceptIndicates(this.instanceId), getRejectIndicates(this.instanceId), this.moreRecommednNum, false) + } else if (window.sessionStorage.taskType === 'anormaly detection') { + let confirmInfo: any[] = [] + + // Iterate through queryResAnormalIndecates and update confirmInfo and newPreviousIndecates + for (let i = 0; i < getQueryResAnormalIndecates(this.instanceId).length; i++) { + let index = getQueryResAnormalIndecates(this.instanceId)[i]; + let value = Boolean(getCustomSelection(this.instanceId).indexOf(index) !== -1); + confirmInfo.push(value); + if (value && getPreviousIndecates(this.instanceId).indexOf(index) === -1) { + const newPreviousIndecates = getPreviousIndecates(this.instanceId); + + newPreviousIndecates.push(index); + updateStateForInstance(this.instanceId, { previousIndecates: newPreviousIndecates }); + } + } + + + // for (let i = 0; i < getQueryResAnormalIndecates(this.instanceId).length; i++) { + // let value = Boolean(getCustomSelection(this.instanceId).indexOf(getQueryResAnormalIndecates(this.instanceId)[i]) !== -1) + // confirmInfo.push(value) + // if (value && getPreviousIndecates(this.instanceId).indexOf(getQueryResAnormalIndecates(this.instanceId)[i]) === -1) { + // getPreviousIndecates(this.instanceId).push(getQueryResAnormalIndecates(this.instanceId)[i]) + // } + // } + let AnormalyStrategy = 'Feedback' + // if is control group + if (window.sessionStorage.isControlGroup == 'true') { + AnormalyStrategy = 'TBSampling' + } + this.projector.queryAnormalyStrategy( + + Number(this.moreRecommednNum), this.selectedAnormalyClass, getQueryResAnormalIndecates(this.instanceId), confirmInfo, getAcceptIndicates(this.instanceId), getRejectIndicates(this.instanceId), AnormalyStrategy, false, + (indices: any, cleansIndices: any) => { + if (indices != null) { + // this.queryIndices = indices; + if (this.queryIndices.length == 0) { + this.searchBox.message = '0 matches.'; + } else { + this.searchBox.message = `${this.queryIndices.length} matches.`; + } + updateStateForInstance(this.instanceId, { queryResAnormalIndecates: indices }) + updateStateForInstance(this.instanceId, { queryResAnormalCleanIndecates: cleansIndices }) + // getQueryResAnormalIndecates(this.instanceId) = indices + // getQueryResAnormalCleanIndecates(this.instanceId) = cleansIndices + + this.queryIndices = indices.concat(cleansIndices) + + + if (!this.isAlSelecting) { + this.isAlSelecting = true + updateStateForInstance(this.instanceId, { isAdjustingSel: true }) + // getIsAdjustingSel(this.instanceId) = true + // this.boundingSelectionBtn.classList.add('actived') + this.projectorEventContext.setMouseMode(MouseMode.AREA_SELECT) + } + // this.projectorScatterPlotAdapter.scatterPlot.setMouseMode(MouseMode.AREA_SELECT); + this.showCheckAllQueryRes = true + this.showMoreRecommend = true + // if (this.state.sessionStorage.isControlGroup == 'true') { + // this.showMoreRecommend = false + // } else { + // this.showMoreRecommend = true + // } + this.checkAllQueryRes = false + this.queryResultListTitle = 'Possible Abnormal Point List' + // let dom = this.$$("#queryResheader") + + // dom.innerHTML = 'label' + this.projectorEventContext.notifySelectionChanged(this.queryIndices, false, 'isAnormalyQuery'); + } + }) + + } + } + } + let DVIServer = window.sessionStorage.ipAddress; + let basePath = getModelMath(this.instanceId) + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + updateStateForInstance(this.instanceId, { suggestionIndicates: [] }) + // this.state.suggestionIndicates = [] + updateStateForInstance(this.instanceId, { checkboxDom: [] }) + // getCheckBoxDom(this.instanceId) = [] + updateStateForInstance(this.instanceId, { acceptInputList: [] }) + updateStateForInstance(this.instanceId, { rejectInputList: [] }) + // this.state.acceptInputList = [] + // this.state.rejectInputList = [] + if (!getAcceptIndicates(this.instanceId)) { + updateStateForInstance(this.instanceId, { acceptIndicates: [] }) + // getAcceptIndicates(this.instanceId) = [] + } + if (!getRejectIndicates(this.instanceId)) { + updateStateForInstance(this.instanceId, { rejectIndicates: [] }) + // getRejectIndicates(this.instanceId) = [] + } + + + const queryListTable = document.createElement('table'); + queryListTable.className = 'resTable' + if (this.showCheckAllQueryRes === true) { + this.accAllRadio = this.$$('#accAllRadio') as any; + this.rejAllRadio = this.$$('#rejAllRadio') as any; + // if (this.accAllRadio && this.rejAllRadio) { + // setTimeout(()=>{ + this.accAllRadio.addEventListener('change', (e) => { + + if (this.accAllRadio.checked) { + // Get the current state + + + // Copy the arrays to avoid direct mutation + const newAcceptIndicates = getAcceptIndicates(this.instanceId); + const newRejectIndicates = getRejectIndicates(this.instanceId) + const newAcceptInputList = getAcceptInputList(this.instanceId) + const newRejectInputList = getRejectInputList(this.instanceId) + + // Iterate through indices and update the accept and reject lists + for (let i = 0; i < indices.length; i++) { + const index = indices[i]; + + // Update acceptInputList and rejectInputList + if (newAcceptInputList[index]) { + newAcceptInputList[index].checked = true; + } + if (newRejectInputList[index]) { + newRejectInputList[index].checked = false; + } + + // Update acceptIndicates + if (!newAcceptIndicates.includes(index)) { + newAcceptIndicates.push(index); + } + + // Update rejectIndicates + const rejectIndex = newRejectIndicates.indexOf(index); + if (rejectIndex !== -1) { + let newIndex = newRejectIndicates.indexOf(index) + newRejectIndicates.splice(newIndex, 1); + } + } + + // Update the state + updateStateForInstance(this.instanceId, { + acceptIndicates: newAcceptIndicates, + rejectIndicates: newRejectIndicates, + acceptInputList: newAcceptInputList, + rejectInputList: newRejectInputList + }); + + + // for (let i = 0; i < indices.length; i++) { + // this.state.acceptInputList[indices[i]].checked = true + // this.state.rejectInputList[indices[i]].checked = false + // if (getAcceptIndicates(this.instanceId).indexOf(indices[i]) === -1) { + // getAcceptIndicates(this.instanceId).push(indices[i]) + // } + // if (getRejectIndicates(this.instanceId).indexOf(indices[i]) !== -1) { + // let index = getRejectIndicates(this.instanceId).indexOf(indices[i]) + // getRejectIndicates(this.instanceId).splice(index, 1) + // } + // } + } + + // getCustomSelection(this.instanceId) = getRejectIndicates(this.instanceId).concat(getAcceptIndicates(this.instanceId)) + updateStateForInstance(this.instanceId, { customSelection: getRejectIndicates(this.instanceId).concat(getAcceptIndicates(this.instanceId)) }) + this.noisyBtn.style.visibility = Boolean(getCustomSelection(this.instanceId)?.length) ? '' : 'hidden' + this.stopBtn.style.visibility = Boolean(getCustomSelection(this.instanceId)?.length) ? '' : 'hidden' + this.updateSessionStorage() + this.projectorEventContext.refresh() + }) + this.rejAllRadio.addEventListener('change', (e) => { + + // Get the current state + + + // Copy the arrays to avoid direct mutation + const newAcceptIndicates = getAcceptIndicates(this.instanceId); + const newRejectIndicates = getRejectIndicates(this.instanceId) + const newAcceptInputList = getAcceptInputList(this.instanceId) + const newRejectInputList = getRejectInputList(this.instanceId) + // Iterate through indices and update the accept and reject lists + for (let i = 0; i < indices.length; i++) { + const index = indices[i]; + + // Update acceptInputList and rejectInputList + if (newAcceptInputList[index]) { + newAcceptInputList[index].checked = false; + } + if (newRejectInputList[index]) { + newRejectInputList[index].checked = true; + } + + // Update rejectIndicates + if (!newRejectIndicates.includes(index)) { + newRejectIndicates.push(index); + } + + // Update acceptIndicates + const acceptIndex = newAcceptIndicates.indexOf(index); + if (acceptIndex !== -1) { + let newIndex = newAcceptIndicates.indexOf(index) + newAcceptIndicates.splice(newIndex, 1); + } + } + + // Update the state + updateStateForInstance(this.instanceId, { + acceptIndicates: newAcceptIndicates, + rejectIndicates: newRejectIndicates, + acceptInputList: newAcceptInputList, + rejectInputList: newRejectInputList + }); + + + // for (let i = 0; i < indices.length; i++) { + // this.state.acceptInputList[indices[i]].checked = false + // this.state.rejectInputList[indices[i]].checked = true + // if (getRejectIndicates(this.instanceId).indexOf(indices[i]) === -1) { + // getRejectIndicates(this.instanceId).push(indices[i]) + // } + // if (getAcceptIndicates(this.instanceId).indexOf(indices[i]) !== -1) { + // let index = getAcceptIndicates(this.instanceId).indexOf(indices[i]) + // getAcceptIndicates(this.instanceId).splice(index, 1) + // } + // } + updateStateForInstance(this.instanceId, { customSelection: getRejectIndicates(this.instanceId).concat(getAcceptIndicates(this.instanceId)) }) + // getCustomSelection(this.instanceId) = getRejectIndicates(this.instanceId).concat(getAcceptIndicates(this.instanceId)) + this.noisyBtn.style.visibility = Boolean(getCustomSelection(this.instanceId)?.length) ? '' : 'hidden' + this.stopBtn.style.visibility = Boolean(getCustomSelection(this.instanceId)?.length) ? '' : 'hidden' + this.updateSessionStorage() + this.projectorEventContext.refresh() + }) + // }) + + // } + } + if (indices.length > 2000) { + indices.length = 2000 + } + for (let i = 0; i < indices.length; i++) { + const index = indices[i]; + const row = document.createElement('th'); + row.className = 'row'; + + // const rowLink = document.createElement('a'); + // rowLink.className = 'label'; + // rowLink.title = label; + // rowLink.innerHTML = label; + row.onmouseenter = () => { + this.projectorEventContext.notifyHoverOverPoint(index); + }; + row.onmouseleave = () => { + this.projectorEventContext.notifyHoverOverPoint(null); + }; + if (this.showCheckAllQueryRes === true) { + + let newacctd: any = document.createElement('td') + let accInput: any = document.createElement('input'); + accInput.setAttribute('name', `op${index}`) + accInput.setAttribute('id', `accept${index}`) + accInput.setAttribute('type', `radio`) + accInput.className = 'inputColumn'; + accInput.setAttribute('value', `accept`) + + + const newAcceptInputList = getAcceptInputList(this.instanceId); + newAcceptInputList[indices[i]] = accInput; + updateStateForInstance(this.instanceId, { acceptInputList: newAcceptInputList }); + + + // this.state.acceptInputList[indices[i]] = accInput + + newacctd.append(accInput) + if (getQueryResAnormalCleanIndecates(this.instanceId) && getQueryResAnormalCleanIndecates(this.instanceId).indexOf(index) !== -1) { + let span = document.createElement('span'); + span.innerText = " " + let newtd: any = document.createElement('td') + newtd.style.width = "50px" + newtd.append(span) + + row.appendChild(newtd) + } else { + row.appendChild(newacctd) + } + + + + accInput.addEventListener('mouseup', (e: any) => { + if (accInput.checked) { + // accInput.prop("checked", false); + accInput.checked = false + const newAcceptInputList = getAcceptIndicates(this.instanceId); + newAcceptInputList.splice(getAcceptIndicates(this.instanceId).indexOf(index), 1) + updateStateForInstance(this.instanceId, { acceptIndicates: newAcceptInputList }); + + // getAcceptIndicates(this.instanceId).splice(getAcceptIndicates(this.instanceId).indexOf(index), 1) + } + // if(newacctd.) + }) + accInput.addEventListener('change', () => { + + + if (accInput.checked) { + if (getAcceptIndicates(this.instanceId).indexOf(index) === -1) { + const newAcceptInputList = getAcceptIndicates(this.instanceId) ; + newAcceptInputList.push(index) + updateStateForInstance(this.instanceId, { acceptIndicates: newAcceptInputList }); + // getAcceptIndicates(this.instanceId).push(index) + } + if (getRejectIndicates(this.instanceId).indexOf(index) !== -1) { + const newRejectInputList = getRejectIndicates(this.instanceId) ; + newRejectInputList.splice(getRejectIndicates(this.instanceId).indexOf(index), 1) + updateStateForInstance(this.instanceId, { rejectIndicates: newRejectInputList }); + // getAcceptIndicates(this.instanceId).push(index) + // getRejectIndicates(this.instanceId).splice(getRejectIndicates(this.instanceId).indexOf(index), 1) + } + this.accAllRadio.checked = false + this.rejAllRadio.checked = false + + } else { + if (getAcceptIndicates(this.instanceId).indexOf(index) !== -1) { + const newAcceptInputList = getAcceptIndicates(this.instanceId) ; + newAcceptInputList.splice(getAcceptIndicates(this.instanceId).indexOf(index), 1) + updateStateForInstance(this.instanceId, { acceptIndicates: newAcceptInputList }); + + // getAcceptIndicates(this.instanceId).splice(getAcceptIndicates(this.instanceId).indexOf(index), 1) + } + } + updateStateForInstance(this.instanceId, { customSelection: getAcceptIndicates(this.instanceId).concat(getRejectIndicates(this.instanceId)) }) + // getCustomSelection(this.instanceId) = getAcceptIndicates(this.instanceId).concat(getRejectIndicates(this.instanceId)) + this.noisyBtn.style.visibility = Boolean(getCustomSelection(this.instanceId)?.length) ? '' : 'hidden' + this.stopBtn.style.visibility = Boolean(getCustomSelection(this.instanceId)?.length) ? '' : 'hidden' + this.updateSessionStorage() + this.projectorEventContext.refresh() + + }) + + + let newrejtd = document.createElement('td') + let rejectInput = document.createElement('input'); + // Assuming indices[i] is the index in the rejectInputList array that you want to update + const newRejectInputList = getRejectInputList(this.instanceId); + newRejectInputList[indices[i]] = rejectInput; // rejectInput is the new value for the specific index + updateStateForInstance(this.instanceId, { rejectInputList: newRejectInputList }); + + // this.state.rejectInputList[indices[i]] = rejectInput + + rejectInput.setAttribute('type', `radio`) + rejectInput.setAttribute('name', `op${index}`) + accInput.setAttribute('id', `reject${index}`) + rejectInput.setAttribute('value', `reject`) + newrejtd.append(rejectInput) + if (getQueryResAnormalCleanIndecates(this.instanceId) && getQueryResAnormalCleanIndecates(this.instanceId).indexOf(index) !== -1) { + let span = document.createElement('span'); + span.innerText = " " + let newtd: any = document.createElement('td') + newtd.style.width = "50px" + newtd.append(span) + row.appendChild(newtd) + } else { + row.appendChild(newrejtd) + } + + + rejectInput.addEventListener('change', () => { + if (rejectInput.checked) { + if (getRejectIndicates(this.instanceId).indexOf(index) === -1) { + const newRejectInputList = getRejectIndicates(this.instanceId) ; + newRejectInputList.push(index) + updateStateForInstance(this.instanceId, { rejectIndicates: newRejectInputList }); + // getRejectIndicates(this.instanceId).push(index) + } + if (getAcceptIndicates(this.instanceId).indexOf(index) !== -1) { + + const newAcceptInputList = getAcceptIndicates(this.instanceId) ; + newAcceptInputList.splice(getAcceptIndicates(this.instanceId).indexOf(index), 1) + updateStateForInstance(this.instanceId, { acceptIndicates: newAcceptInputList }); + + // getAcceptIndicates(this.instanceId).splice(getAcceptIndicates(this.instanceId).indexOf(index), 1) + } + this.accAllRadio.checked = false + this.rejAllRadio.checked = false + + } else { + if (getRejectIndicates(this.instanceId).indexOf(index) !== -1) { + const newRejectInputList = getRejectIndicates(this.instanceId) ; + newRejectInputList.splice(getRejectIndicates(this.instanceId).indexOf(index), 1) + updateStateForInstance(this.instanceId, { rejectIndicates: newRejectInputList }); + // getRejectIndicates(this.instanceId).splice(getRejectIndicates(this.instanceId).indexOf(index), 1) + } + } + updateStateForInstance(this.instanceId, { customSelection: getAcceptIndicates(this.instanceId).concat(getRejectIndicates(this.instanceId)) }); + // getCustomSelection(this.instanceId) = getAcceptIndicates(this.instanceId).concat(getRejectIndicates(this.instanceId)) + this.noisyBtn.style.visibility = Boolean(getCustomSelection(this.instanceId)?.length) ? '' : 'hidden' + this.stopBtn.style.visibility = Boolean(getCustomSelection(this.instanceId)?.length) ? '' : 'hidden' + this.updateSessionStorage() + this.projectorEventContext.refresh() + }) + + // row.appendChild(input); + } + const label = this.getLabelFromIndex(index); + let arr = label.split("|") + for (let i = 0; i < arr.length; i++) { + let newtd = document.createElement('td'); + newtd.className = 'queryResColumn'; + newtd.innerText = arr[i] + row.appendChild(newtd) + } + + + row.onmouseenter = async () => { + await fetch(`http://${DVIServer}/sprite?index=${indices[i]}&path=${basePath}&username=${window.sessionStorage.username}`, { + method: 'GET', + mode: 'cors' + }).then(response => response.json()).then(data => { + // console.log("response", data); + let imgsrc = data.imgUrl; + // this.projectorEventContext.updateMetaDataByIndices(indices[i], imgsrc) + this.projectorEventContext.notifyHoverOverPoint(index); + // logging.setModalMessage(null, msgId); + }).catch(error => { + console.log("error", error); + }); + + }; + row.onmouseleave = () => { + // this.projectorEventContext.updateMetaDataByIndices(-1, '') + this.projectorEventContext.notifyHoverOverPoint(null); + }; + + row.className = 'row-img'; + // row.appendChild(rowLink); + queryListTable.appendChild(row) + list.appendChild(queryListTable); + } + } + updateSessionStorage() { + + // getAcceptIndicates(this.instanceId) = getAcceptIndicates(this.instanceId).join(",") + // getRejectIndicates(this.instanceId) = getRejectIndicates(this.instanceId).join(",") + // getCustomSelection(this.instanceId) = getCustomSelection(this.instanceId).join(",") + updateSessionStateForInstance(this.instanceId, {acceptIndicates:getAcceptIndicates(this.instanceId).join(",")}) + updateSessionStateForInstance(this.instanceId, {rejectIndicates:getRejectIndicates(this.instanceId).join(",")}) + updateSessionStateForInstance(this.instanceId, {customSelection:getCustomSelection(this.instanceId).join(",")}) + // window.sessionStorage.setItem('acceptIndicates', window.acceptIndicates.join(",")) + // window.sessionStorage.setItem('rejectIndicates', window.rejectIndicates.join(",")) + // window.sessionStorage.setItem('customSelection', window.customSelection.join(",")) + } + private getLabelFromIndex(pointIndex: number): string { + if (!getFlagindecatesList(this.instanceId)) { + updateStateForInstance(this.instanceId, { flagindecatesList: [] }) + // getFlagindecatesList(this.instanceId) = [] + } + const metadata = this.projector.dataSet.points[pointIndex]?.metadata[ + this.selectedMetadataField + ]; + let prediction = this.projector.dataSet.points[pointIndex]?.current_prediction; + if (prediction == undefined) { + prediction = `Unknown`; + } + + let original_label = this.projector.dataSet.points[pointIndex]?.original_label; + if (original_label == undefined) { + original_label = `Unknown`; + } + let index = getQueryResPointIndices(this.instanceId)?.indexOf(pointIndex) + + let suggest_label = this.labelMap[getAlSuggestLabelList(this.instanceId)[index]] + + + if (original_label == undefined) { + original_label = `Unknown`; + } + let score = getAlSuggestScoreList(this.instanceId)[index]?.toFixed(3) + const stringMetaData = metadata !== undefined ? String(metadata) : `Unknown #${pointIndex}`; + + const displayprediction = prediction + const displayStringMetaData = stringMetaData + + const displayPointIndex = String(pointIndex) + // return String(pointIndex) + "Label: " + stringMetaData + " Prediction: " + prediction + " Original label: " + original_label; + let prediction_res = suggest_label === prediction || getAlSuggestLabelList(this.instanceId).length === 0 ? ' - ' : ' ❗️ ' + if (getQueryResAnormalCleanIndecates(this.instanceId) && getQueryResAnormalCleanIndecates(this.instanceId).indexOf(pointIndex) !== -1) { + return `${displayPointIndex}|${displayStringMetaData}| majority` + } + if (getQueryResAnormalIndecates(this.instanceId) && getQueryResAnormalIndecates(this.instanceId).indexOf(pointIndex) !== -1) { + let prediction_res = suggest_label === displayStringMetaData ? ' - ' : ' ❗️ ' + + if (window.sessionStorage.isControlGroup == 'true') { + return `${displayPointIndex}|${displayprediction}|${score !== undefined ? score : '-'}` + } else { + if (prediction_res !== " - ") { + if (getFlagindecatesList(this.instanceId).indexOf(pointIndex) === -1) { + const newflag = getFlagindecatesList(this.instanceId) ; + newflag.push(pointIndex) + updateStateForInstance(this.instanceId, { flagindecatesList: newflag }); + // getFlagindecatesList(this.instanceId).push(pointIndex) + } + } + // return `${displayPointIndex}|${displayStringMetaData}|${prediction_res}|${score !== undefined ? score : '-'}` + return `${displayPointIndex}|${displayprediction}|${score !== undefined ? score : '-'}` + } + + } + if (this.showCheckAllQueryRes == false) { + if (window.sessionStorage.isControlGroup == 'true') { + return `${displayPointIndex}|${displayprediction}` + } else { + if (prediction_res !== " - ") { + if (getFlagindecatesList(this.instanceId).indexOf(pointIndex) === -1) { + const newflag = getFlagindecatesList(this.instanceId) ; + newflag.push(pointIndex) + updateStateForInstance(this.instanceId, { flagindecatesList: newflag }); + // getFlagindecatesList(this.instanceId).push(pointIndex) + } + } + return `${displayPointIndex}|${displayprediction}` + } + } + if (window.sessionStorage.isControlGroup == 'true') { + return `${displayPointIndex}|${displayprediction}|${score !== undefined ? score : '-'}` + } else { + if (prediction_res !== " - ") { + if (getFlagindecatesList(this.instanceId).indexOf(pointIndex) === -1) { + const newflag = getFlagindecatesList(this.instanceId) ; + newflag.push(pointIndex) + updateStateForInstance(this.instanceId, { flagindecatesList: newflag }); + // getFlagindecatesList(this.instanceId).push(pointIndex) + } + } + // return `${displayPointIndex}|${displayprediction}|${prediction_res}|${score !== undefined ? score : '-'}` + return `${displayPointIndex}|${displayprediction}|${score !== undefined ? score : '-'}` + } + } + private getnnLabelFromIndex(pointIndex: number): string { + const metadata = this.projector.dataSet.points[pointIndex].metadata[ + this.selectedMetadataField + ]; + let prediction = this.projector.dataSet.points[pointIndex]?.current_prediction; + if (prediction == undefined) { + prediction = `Unknown`; + } + let original_label = this.projector.dataSet.points[pointIndex].original_label; + if (original_label == undefined) { + original_label = `Unknown`; + } + if (original_label == undefined) { + original_label = `Unknown`; + } + const stringMetaData = metadata !== undefined ? String(metadata) : `Unknown #${pointIndex}`; + const displayprediction = prediction + const displayStringMetaData = stringMetaData + const displayPointIndex = String(pointIndex) + // return String(pointIndex) + "Label: " + stringMetaData + " Prediction: " + prediction + " Original label: " + original_label; + let prediction_res = stringMetaData === prediction ? ' - ' : ' ❗️ ' + return `index:${displayPointIndex} | label:${displayStringMetaData}| prediction:${displayprediction} | ${prediction_res}` + } + private spriteImageRenderer() { + const spriteImagePath = this.spriteMeta.imagePath; + const { aspectRatio, nCols } = this.spriteMeta as any; + const paddingBottom = 100 / aspectRatio + '%'; + const backgroundSize = `${nCols * 100}% ${nCols * 100}%`; + const backgroundImage = `url(${CSS.escape(spriteImagePath)})`; + return (neighbor: knn.NearestEntry): HTMLElement => { + const spriteElementImage = document.createElement('div'); + spriteElementImage.className = 'sprite-image'; + spriteElementImage.style.backgroundImage = backgroundImage; + spriteElementImage.style.paddingBottom = paddingBottom; + spriteElementImage.style.backgroundSize = backgroundSize; + const [row, col] = [ + Math.floor(neighbor.index / nCols), + neighbor.index % nCols, + ]; + const [top, left] = [ + (row / (nCols - 1)) * 100, + (col / (nCols - 1)) * 100, + ]; + spriteElementImage.style.backgroundPosition = `${left}% ${top}%`; + return spriteElementImage; + }; + } + updateCurrentPlayEpoch(num: number) { + this.currentPlayedEpoch = num + } + private updateNeighborsList(neighbors?: knn.NearestEntry[]) { + neighbors = neighbors || this._currentNeighbors; + this._currentNeighbors = neighbors; + if (neighbors == null) { + return; + } + const nnlist = this.$$('.nn-list') as HTMLDivElement; + nnlist.textContent = ''; + if (neighbors.length === 0) { + this.removeContext('.nn'); + return; + } + this.addContext('.nn'); + this.searchBox.message = ''; + const minDist = neighbors.length > 0 ? neighbors[0].dist : 0; + if (this.spriteImagesAvailable && this.showNeighborImages) { + var imageRenderer = this.spriteImageRenderer(); + } + for (let i = 0; i < neighbors.length; i++) { + const neighbor = neighbors[i]; + const neighborElement = document.createElement('div'); + neighborElement.className = 'neighbor'; + const neighborElementLink = document.createElement('a'); + neighborElementLink.className = 'neighbor-link'; + neighborElementLink.title = this.getnnLabelFromIndex(neighbor.index); + const labelValueElement = document.createElement('div'); + labelValueElement.className = 'label-and-value'; + const labelElement = document.createElement('div'); + labelElement.className = 'label'; + labelElement.style.color = dist2color( + this.distFunc, + neighbor.dist, + minDist + ); + labelElement.innerText = this.getnnLabelFromIndex(neighbor.index); + const valueElement = document.createElement('div'); + valueElement.className = 'value'; + valueElement.innerText = this.projector.dataSet.points[neighbor.index]?.current_inv_acc?.toFixed(3); + labelValueElement.appendChild(labelElement); + labelValueElement.appendChild(valueElement); + const barElement = document.createElement('div'); + barElement.className = 'bar'; + const barFillElement = document.createElement('div'); + barFillElement.className = 'fill'; + barFillElement.style.borderTopColor = dist2color( + this.distFunc, + neighbor.dist, + minDist + ); + barFillElement.style.width = + normalizeDist(this.distFunc, neighbor.dist, minDist) * 100 + '%'; + barElement.appendChild(barFillElement); + for (let j = 1; j < 4; j++) { + const tickElement = document.createElement('div'); + tickElement.className = 'tick'; + tickElement.style.left = (j * 100) / 4 + '%'; + barElement.appendChild(tickElement); + } + if (this.spriteImagesAvailable && this.showNeighborImages) { + const neighborElementImage = imageRenderer(neighbor); + neighborElement.appendChild(neighborElementImage); + } + neighborElementLink.appendChild(labelValueElement); + neighborElementLink.appendChild(barElement); + neighborElement.appendChild(neighborElementLink); + nnlist.appendChild(neighborElement); + neighborElementLink.onmouseenter = () => { + this.projectorEventContext.notifyHoverOverPoint(neighbor.index); + }; + neighborElementLink.onmouseleave = () => { + this.projectorEventContext.notifyHoverOverPoint(null); + }; + neighborElementLink.onclick = () => { + this.projectorEventContext.notifySelectionChanged([neighbor.index]); + }; + } + } + private updateFilterButtons(numPoints: number) { + if (numPoints) { + this.setFilterButton.innerText = `Filter ${numPoints}`; + if (numPoints > 1) { + this.setFilterButton.disabled = null; + } + this.clearSelectionButton.disabled = null; + } else { + this.setFilterButton.innerText = `Filter selection`; + this.setFilterButton.disabled = true; + this.clearSelectionButton.disabled = true; + } + } + private setupUI(projector: any) { + + const self = this; + const inkTabs = this.root.querySelectorAll('.ink-tab'); + for (let i = 0; i < inkTabs.length; i++) { + inkTabs[i].addEventListener('click', function () { + let id = this.getAttribute('data-tab'); + self.showTab(id); + }); + } + if (window) + if (window.sessionStorage.taskType === 'anormaly detection' && window.sessionStorage.isControlGroup !== 'true' + ) { + self.showTab('anomaly'); + } else if (window.sessionStorage.taskType === 'active learning') { + self.showTab('advanced'); + } + else { + self.showTab('normal'); + this.showMoreRecommend = false + // this.updateSearchResults([]); + } + + + + + this.queryByStrategtBtn.onclick = () => { + this.queryByAl(projector, getAcceptIndicates(this.instanceId), getRejectIndicates(this.instanceId), this.budget, true) + } + + // if(this.showSelectionBtn){ + this.showSelectionBtn.onclick = () => { + + for (let i = 0; i < getPreviousIndecates(this.instanceId)?.length; i++) { + if (getCustomSelection(this.instanceId).indexOf(getPreviousIndecates(this.instanceId)[i]) === -1) { + const newflag = getCustomSelection(this.instanceId) ; + newflag.push(getPreviousIndecates(this.instanceId)[i]) + updateStateForInstance(this.instanceId, { customSelection: newflag }); + // getCustomSelection(this.instanceId).push(getPreviousIndecates(this.instanceId)[i]) + } + } + this.projectorEventContext.notifySelectionChanged(this.queryIndices, false, 'isShowSelected'); + // this.updateSearchResults(this.queryIndices) + } + // } + this.noisyshowSelectionBtn.onclick = () => { + for (let i = 0; i < getPreviousIndecates(this.instanceId)?.length; i++) { + if (getCustomSelection(this.instanceId).indexOf(getPreviousIndecates(this.instanceId)[i]) === -1) { + const newflag = getCustomSelection(this.instanceId) ; + newflag.push(getPreviousIndecates(this.instanceId)[i]) + updateStateForInstance(this.instanceId, { customSelection: newflag }); + // getCustomSelection(this.instanceId).push(getPreviousIndecates(this.instanceId)[i]) + } + } + this.projectorEventContext.notifySelectionChanged(this.queryIndices, false, 'isShowSelected'); + // this.updateSearchResults(this.queryIndices) + } + + this.queryAnomalyBtn.onclick = () => { + projector.queryAnormalyStrategy( + Number(this.anomalyRecNum), this.selectedAnormalyClass, [], [], getAcceptIndicates(this.instanceId), getRejectIndicates(this.instanceId), 'TBSampling', true, + (indices: any, cleansIndices: any) => { + if (indices != null) { + // this.queryIndices = indices; + if (this.queryIndices.length == 0) { + this.searchBox.message = '0 matches.'; + } else { + this.searchBox.message = `${this.queryIndices.length} matches.`; + } + updateStateForInstance(this.instanceId, { queryResAnormalIndecates: indices }) + updateStateForInstance(this.instanceId, { queryResAnormalCleanIndecates: cleansIndices }) + // getQueryResAnormalIndecates(this.instanceId) = indices + // getQueryResAnormalCleanIndecates(this.instanceId) = cleansIndices + + this.queryIndices = indices.concat(cleansIndices) + if (!this.isAlSelecting) { + this.isAlSelecting = true + updateStateForInstance(this.instanceId, { isAdjustingSel: true }) + // getIsAdjustingSel(this.instanceId) = true + // this.boundingSelectionBtn.classList.add('actived') + this.projectorEventContext.setMouseMode(MouseMode.AREA_SELECT) + } + // this.projectorScatterPlotAdapter.scatterPlot.setMouseMode(MouseMode.AREA_SELECT); + this.showCheckAllQueryRes = true + this.showMoreRecommend = true + // if (window.sessionStorage.isControlGroup == 'true') { + // this.showMoreRecommend = false + // } else { + // this.showMoreRecommend = true + // } + this.checkAllQueryRes = false + this.queryResultListTitle = 'Possible Abnormal Point List' + // let dom = this.$$("#queryResheader") + + // dom.innerHTML = 'label' + this.projectorEventContext.notifySelectionChanged(this.queryIndices, false, 'isAnormalyQuery'); + } + }) + } + + + this.trainBySelBtn.onclick = () => { + if (getAcceptIndicates(this.instanceId)?.length < 500) { + logging.setErrorMessage(`Current selected interested samples: ${getAcceptIndicates(this.instanceId)?.length}, + Please Select 500 interest samples`); + return + } + this.resetStatus() + // this.boundingSelectionBtn.classList.remove('actived') + // this.projectorEventContext.setMouseMode(MouseMode.CAMERA_AND_CLICK_SELECT); + // console.log(window.cus) + let retrainList = getPreviousIndecates(this.instanceId) + retrainList + for (let i = 0; i < getCustomSelection(this.instanceId).length; i++) { + if (getPreviousIndecates(this.instanceId).indexOf(getCustomSelection(this.instanceId)[i]) === -1) { + retrainList.push(getCustomSelection(this.instanceId)[i]) + } + } + function func(a, b) { + return a - b; + } + retrainList.sort(func) + this.projector.retrainBySelections(this.projector.iteration, getAcceptIndicates(this.instanceId), getRejectIndicates(this.instanceId)) + // this.projectionsPanel.reTrainBySel(this.projector.iteration,this.selectedPointIndices) + } + this.distFunc = vector.cosDist; + const eucDist = this.$$('.distance a.euclidean') as HTMLLinkElement; + eucDist.onclick = () => { + const links = this.root.querySelectorAll('.distance a'); + for (let i = 0; i < links.length; i++) { + util.classed(links[i] as HTMLElement, 'selected', false); + } + util.classed(eucDist as HTMLElement, 'selected', true); + this.distFunc = vector.dist; + this.projectorEventContext.notifyDistanceMetricChanged(this.distFunc); + const neighbors = projector.dataSet.findNeighbors( + this.selectedPointIndices[0], + this.distFunc, + this.numNN + ); + this.updateNeighborsList(neighbors); + }; + const cosDist = this.$$('.distance a.cosine') as HTMLLinkElement; + cosDist.onclick = () => { + const links = this.root.querySelectorAll('.distance a'); + for (let i = 0; i < links.length; i++) { + util.classed(links[i] as HTMLElement, 'selected', false); + } + util.classed(cosDist, 'selected', true); + this.distFunc = vector.cosDist; + this.projectorEventContext.notifyDistanceMetricChanged(this.distFunc); + const neighbors = projector.dataSet.findNeighbors( + this.selectedPointIndices[0], + this.distFunc, + this.numNN + ); + this.updateNeighborsList(neighbors); + }; + + + this.noisyBtn.onclick = () => { + + if (getCustomSelection(this.instanceId).length == 0) { + alert('please confirm some points first') + return + } + updateStateForInstance(this.instanceId, { isAnimatating: true }) + // this.state.isAnimatating = true + projector.getAllResPosList((data: any) => { + if (data && data.results) { + updateStateForInstance(this.instanceId, { allResPositions: data }) + // this.state.allResPositions = data + this.totalEpoch = Object.keys(data.results).length + this.projectorEventContext.setDynamicNoisy() + this.noisyBtn.disabled = true; + this.stopBtn.disabled = false; + } + }) + } + + + this.stopBtn.onclick = () => { + updateStateForInstance(this.instanceId, { isAnimatating: false }) + // this.state.isAnimatating = false + this.projectorEventContext.setDynamicStop() + this.noisyBtn.disabled = false; + this.stopBtn.disabled = true; + // this.projectorEventContext.renderInTraceLine(false, 1, 1) + if (getLineGeomertryList(this.instanceId)?.length) { + for (let i = 0; i < getLineGeomertryList(this.instanceId); i++) { getLineGeomertryList(this.instanceId)[i].parent.remove(getLineGeomertryList(this.instanceId)[i]) } + } + } + + this.enableResetFilterButton(false); + + const updateInput = (value: string, inRegexMode: boolean) => { + this.searchPredicate = value; + this.searchInRegexMode = inRegexMode + }; + this.searchBox.registerInputChangedListener((value, inRegexMode) => { + updateInput(value, inRegexMode); + }); + this.searchButton.onclick = () => { + // read search box input and update indices + + if (this.searchPredicate == null || this.searchPredicate.trim() === '') { + this.searchBox.message = ''; + this.projectorEventContext.notifySelectionChanged([]); + return; + } + + projector.query( + this.searchPredicate, + this.searchInRegexMode, + this.selectedMetadataField, + this.currentPredicate, + getIteration(this.instanceId), + this.confidenceThresholdFrom, + this.confidenceThresholdTo, + (indices: any) => { + if (indices != null) { + this.queryIndices = indices; + if (this.queryIndices.length == 0) { + this.searchBox.message = '0 matches.'; + } else { + this.searchBox.message = `${this.queryIndices.length} matches.`; + } + this.showCheckAllQueryRes = true + this.showMoreRecommend = false + this.projectorEventContext.notifySelectionChanged(this.queryIndices, false, 'normal'); + this.queryResultListTitle = 'Query Result List' + } + } + ); + } + + } + + + + private queryByAl(projector, acceptIndicates, rejectIndicates, querNum?, isRecommend?) { + let that = this + let num = Number(this.budget) + let stratergy = this.selectedStratergy + if (this.selectedStratergy === 'Interest potential') { + stratergy = 'TBSampling' + } + if (querNum) { + num = Number(querNum) + } + if (isRecommend === false) { + if (window.sessionStorage.isControlGroup == 'true') { + stratergy = 'TBSampling' + } else { + stratergy = 'Feedback' + } + } + if (!acceptIndicates) { + acceptIndicates = [] + } + if (!rejectIndicates) { + rejectIndicates = [] + } + projector.queryByAL( + this.projector.iteration, + stratergy, + num, + acceptIndicates, + rejectIndicates, + isRecommend, + (indices: any, scores: any, labels: any) => { + if (indices != null) { + this.queryIndices = indices; + if (this.queryIndices.length == 0) { + this.searchBox.message = '0 matches.'; + } else { + this.searchBox.message = `${this.queryIndices.length} matches.`; + } + updateStateForInstance(this.instanceId, { alSuggestScoreList: scores }) + updateStateForInstance(this.instanceId, { alSuggestLabelList: labels }) + // this.state.alSuggestScoreList = scores + // getAlSuggestLabelList(this.instanceId) = labels + + if (!this.isAlSelecting) { + this.isAlSelecting = true + updateStateForInstance(this.instanceId, { isAdjustingSel: true }) + // getIsAdjustingSel(this.instanceId) = true + // this.boundingSelectionBtn.classList.add('actived') + this.projectorEventContext.setMouseMode(MouseMode.AREA_SELECT) + } + this.showCheckAllQueryRes = true + this.showMoreRecommend = true + // if (window.sessionStorage.isControlGroup == 'true') { + // this.showMoreRecommend = false + // } else { + // this.showMoreRecommend = true + // } + this.checkAllQueryRes = false + this.queryResultListTitle = 'Active Learning suggestion' + let dom = this.$$("#queryResheader") + dom.innerHTML = 'predict' + this.projectorEventContext.notifySelectionChanged(this.queryIndices, false, 'isALQuery'); + // this.projectorScatterPlotAdapter.scatterPlot.setMouseMode(MouseMode.AREA_SELECT); + + } + } + ); + } + + resetStatus() { + this.isAlSelecting = false + updateStateForInstance(this.instanceId, { isAdjustingSel: false }) + // getIsAdjustingSel(this.instanceId) = false + } + + playAnimationFinished() { + this.noisyBtn.disabled = false; + this.stopBtn.disabled = true; + } + + public showTab(id: string) { + this.currentFilterType = id; + const tab = this.$$('.ink-tab[data-tab="' + id + '"]') as HTMLElement; + const allTabs = this.root.querySelectorAll('.ink-tab'); + for (let i = 0; i < allTabs.length; i++) { + util.classed(allTabs[i] as HTMLElement, 'active', false); + } + util.classed(tab, 'active', true); + const allTabContent = this.root.querySelectorAll('.ink-panel-content'); + for (let i = 0; i < allTabContent.length; i++) { + util.classed(allTabContent[i] as HTMLElement, 'active', false); + } + util.classed( + this.$$('.ink-panel-content[data-panel="' + id + '"]') as HTMLElement, + 'active', + true + ); + // guard for unit tests, where polymer isn't attached and $ doesn't exist. + if (this.$ != null) { + const main = this.$['main']; + // In order for the projections panel to animate its height, we need to + // set it explicitly. + requestAnimationFrame(() => { + this.style.height = main?.clientHeight + 'px'; + }); + } + if (id === 'normal') { + this.showMoreRecommend = false + } + this.updateSearchResults([]); + updateStateForInstance(this.instanceId, { alSuggestScoreList: [] }) + // this.state.alSuggestScoreList = [] + + } + + + updateDisabledStatues(value: boolean) { + this.disabledAlExBase = value + } + + + //todo is it inspector + updateBoundingBoxSelection(indices: number[]) { + this.currentBoundingBoxSelection = indices; + if (!getCustomSelection(this.instanceId)) { + updateStateForInstance(this.instanceId, { customSelection: [] }) + // getCustomSelection(this.instanceId) = [] + } + + for (let i = 0; i < this.currentBoundingBoxSelection.length; i++) { + if (getCustomSelection(this.instanceId).indexOf(this.currentBoundingBoxSelection[i]) < 0) { + // Assuming indices[i] is the index in the rejectInputList array that you want to update + const newRejectInputList = getCustomSelection(this.instanceId); + newRejectInputList.push(this.currentBoundingBoxSelection[i]); + updateStateForInstance(this.instanceId, { customSelection: newRejectInputList }); + + // getCustomSelection(this.instanceId).push(this.currentBoundingBoxSelection[i]); + } else { + let index = getCustomSelection(this.instanceId).indexOf(this.currentBoundingBoxSelection[i]) + const newRejectInputList = getCustomSelection(this.instanceId); + newRejectInputList.splice(index, 1) + updateStateForInstance(this.instanceId, { customSelection: newRejectInputList }); + // getCustomSelection(this.instanceId).splice(index, 1) + } + } + this.noisyBtn.style.visibility = Boolean(getCustomSelection(this.instanceId)?.length) ? '' : 'hidden' + this.stopBtn.style.visibility = Boolean(getCustomSelection(this.instanceId)?.length) ? '' : 'hidden' + // window.customSelection = this.currentBoundingBoxSelection + } + private updateNumNN() { + if (this.selectedPointIndices != null) { + this.projectorEventContext.notifySelectionChanged([ + this.selectedPointIndices[0], + ]); + } + } + +} \ No newline at end of file diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-legend.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-legend.ts new file mode 100644 index 0000000000000000000000000000000000000000..ba7131cf7991598d708c3d1c1b2eb67d59ecb809 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-legend.ts @@ -0,0 +1,147 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {PolymerElement, html} from '@polymer/polymer'; +import {customElement, observe, property} from '@polymer/decorators'; + +import {LegacyElementMixin} from '../../../components/polymer/legacy_element_mixin'; + +import './styles'; + +export interface ColorLegendRenderInfo { + // To be used for categorical map. + items: ColorLegendItem[]; + // To be used for gradient map. + thresholds: ColorLegendThreshold[]; +} +/** An item in the categorical color legend. */ +export interface ColorLegendItem { + color: string; + label: string; + count: number; +} +/** An item in the gradient color legend. */ +export interface ColorLegendThreshold { + color: string; + value: number; +} + +@customElement('vz-projector-legend') +class Legend extends LegacyElementMixin(PolymerElement) { + static readonly template = html` + + + + + + + `; + @property({type: Object}) + renderInfo: ColorLegendRenderInfo; + + @observe('renderInfo') + _renderInfoChanged() { + if (this.renderInfo == null) { + return; + } + if (this.renderInfo.thresholds) { + // is under dom-if so we should wait for it to be + // inserted in the dom tree using async(). + this.async(() => this.setupLinearGradient()); + } + } + _getLastThreshold(): number { + if (this.renderInfo == null || this.renderInfo.thresholds == null) { + return; + } + return this.renderInfo.thresholds[this.renderInfo.thresholds.length - 1] + .value; + } + private getOffset(value: number): string { + const min = this.renderInfo.thresholds[0].value; + const max = this.renderInfo.thresholds[ + this.renderInfo.thresholds.length - 1 + ].value; + return ((100 * (value - min)) / (max - min)).toFixed(2) + '%'; + } + private setupLinearGradient() { + const linearGradient = this.$$('#gradient') as SVGLinearGradientElement; + const width = (this.$$('svg.gradient') as SVGElement).clientWidth; + // Set the svg to be the width of its parent. + (this.$$('svg.gradient rect') as SVGRectElement).style.width = width + 'px'; + // Remove all children from before. + linearGradient.textContent = ''; + // Add a child in for each gradient threshold. + this.renderInfo.thresholds.forEach((t) => { + const stopElement = document.createElementNS( + 'http://www.w3.org/2000/svg', + 'stop' + ); + stopElement.setAttribute('offset', this.getOffset(t.value)); + stopElement.setAttribute('stop-color', t.color); + }); + } +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-metadata-card.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-metadata-card.ts new file mode 100644 index 0000000000000000000000000000000000000000..83755668335026d8f0e06b2a505eb962bd3d86cc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-metadata-card.ts @@ -0,0 +1,575 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { PolymerElement, html } from '@polymer/polymer'; +import { customElement, observe, property } from '@polymer/decorators'; +import {getRejectInputList, getAcceptInputList, updateStateForInstance, getAcceptIndicates, getRejectIndicates, getModelMath, getPreviousIndecates, getIteration, getProperties,getCustomSelection } from './globalState'; +import * as logging from './logging'; + +import { LegacyElementMixin } from '../../../components/polymer/legacy_element_mixin'; +import '../../../components/polymer/irons_and_papers'; + +import { PointMetadata } from './data'; +import { ProjectorEventContext } from './projectorEventContext'; + +@customElement('vz-projector-metadata-card') +class MetadataCard extends LegacyElementMixin(PolymerElement) { + static readonly template = html` + + +
    +
    + + +
    + + + + +
    selected list | [[selectedNum]]
    + Interest([[interestNum]])Not Interest([[notInterestNum]]) +
    + +
    +
    +
    + Interest + +
    +
    + Not Interest + +
    +
    + +
    + + `; + + @property({ type: Boolean }) + hasMetadata: boolean = true; + + @property({ type: Boolean }) + showImg: boolean = false; + + @property({ type: Boolean }) + showText: boolean = false; + + @property({ type: Number }) + selectedNum: Number = 0; + + @property({ type: Number}) + interestNum: Number = 0; + + @property({ type: Number}) + notInterestNum: Number = 0 + + @property({ type: Boolean }) + isCollapsed: boolean = false; + + @property({ type: String }) + collapseIcon: string = 'expand-less'; + + @property({ type: Array }) + metadata: Array<{ + key: string; + value: string; + }>; + @property({ type: Array }) + customMetadata: Array<{ + key: string; + value: string; + src?: string; + }>; + + @property({ type: Array }) + rejectMetadata: Array<{ + key: string; + value: string; + src?: string; + }>; + + @property({ type: Number }) + currentRemove: Number = null + + @property({ type: String }) + label: string; + + @property({ type: Number }) + instanceId: number; + + private labelOption: string; + private pointMetadata: PointMetadata; + private resultImg: HTMLElement; + private resultText: HTMLElement; + private points: any + private projectorEventContext: ProjectorEventContext + + + /** Handles toggle of metadata-container. */ + _toggleMetadataContainer() { + (this.$$('#metadata-container') as any).toggle(); + this.isCollapsed = !this.isCollapsed; + this.set('collapseIcon', this.isCollapsed ? 'expand-more' : 'expand-less'); + } + isNotShowBoth(showImg:boolean, showText:boolean) { + return !showImg && !showText + } + + isShowEither(showImg:boolean, showText:boolean) { + return showImg || showText + } + + @observe('currentRemove') + _remove() { + console.log('111', this.currentRemove) + } + + + + updateMetadata(pointMetadata?: PointMetadata, src?: string, point?: any, indicate?: number, text?: string) { + // src is imgURL , text is possible text passed + this.pointMetadata = pointMetadata; + + //todo consider text + // console.log("srcccc", src) + // console.log("texxxxx", text) + this.showImg = pointMetadata != null && src !=null + this.showText = pointMetadata != null && text !=null; + // console.log("showImg",this.showImg) + // console.log("showText",this.showText) + this.hasMetadata = true + + if (!getPreviousIndecates(this.instanceId)) { + updateStateForInstance(this.instanceId, {previousIndecates:[]}) + // state.previousIndecates = [] + } + if (pointMetadata) { + let metadata = []; + for (let metadataKey in pointMetadata) { + if (!pointMetadata.hasOwnProperty(metadataKey)) { + continue; + } + + let value = pointMetadata[metadataKey] + if (getProperties(this.instanceId)[getIteration(this.instanceId)] && indicate !== undefined) { + if (getProperties(this.instanceId)[getIteration(this.instanceId)][indicate] === 1) { + value = 'unlabeled' + } + } + metadata.push({ index:indicate, key: metadataKey, value: value, prediction: point['current_prediction'], possibelWroung: value !== point['current_prediction'], isSelected: getPreviousIndecates(this.instanceId)?.indexOf(indicate) !== -1 }); + } + this.metadata = metadata; + this.label = '' + this.pointMetadata[this.labelOption]; + //img + setTimeout(() => { + if (this.showImg) { + this.resultImg = this.$$('#metaImg') as HTMLAnchorElement; + // console.log("resultimg", this.resultImg) + if (src?.length) { + this.resultImg?.setAttribute("style", "display:block;") + this.resultImg?.setAttribute('src', src) + } else { + this.resultImg?.setAttribute("style", "display:none;") + } + } else if (this.showText) { + this.resultText = this.$$('#metaText') as HTMLAnchorElement; + if (text?.length) { + + this.resultText?.setAttribute("style", "display:block;"); + // console.log("TEXXXXXXX", text) + this.resultText.textContent = text; + } else { + this.resultText?.setAttribute("style", "display:none;"); + } + } + }, 100) + // need additional parameter to pass text + + + } + } + + async updateCustomList(points: any, projectorEventContext?: ProjectorEventContext) { + this.projectorEventContext = projectorEventContext + if (points) { + this.points = points + } + + + if (!getAcceptIndicates(this.instanceId) || getAcceptIndicates(this.instanceId).length === 0) { + this.customMetadata = [] + } + this.hasMetadata = true; + this.selectedNum = getAcceptIndicates(this.instanceId)?.length + getRejectIndicates(this.instanceId)?.length + this.interestNum = getAcceptIndicates(this.instanceId)?.length + this.notInterestNum = getRejectIndicates(this.instanceId)?.length + let metadata = []; + let DVIServer = window.sessionStorage.ipAddress; + let basePath = getModelMath(this.instanceId) + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + if (getAcceptIndicates(this.instanceId)) { + let msgId + if (getAcceptIndicates(this.instanceId).length > 1000) { + msgId = logging.setModalMessage('Update ing...'); + } + + await fetch(`http://${DVIServer}/spriteList`, { + method: 'POST', + mode: 'cors', + body: JSON.stringify({ + "path": basePath, "index": getAcceptIndicates(this.instanceId), + }), + headers: headers, + }).then(response => response.json()).then(data => { + for (let i = 0; i < getAcceptIndicates(this.instanceId).length; i++) { + let src = data.urlList[getAcceptIndicates(this.instanceId)[i]] + // let flag = points[getAcceptIndicates(this.instanceId)[i]]?.metadata.label === points[getAcceptIndicates(this.instanceId)[i]]?.current_prediction ? '' : '❗️' + let flag = "" + // if(state.flagindecatesList?.indexOf(getAcceptIndicates(this.instanceId)[i]) !== -1){ + // flag = '❗️' + // } + // if (state.sessionStorage.isControlGroup === 'true') { + // flag = '' + // } + metadata.push({ key: getAcceptIndicates(this.instanceId)[i], value: points[getAcceptIndicates(this.instanceId)[i]].metadata.label, src: src, prediction: points[getAcceptIndicates(this.instanceId)[i]].current_prediction, flag: flag }); + } + if (msgId) { + logging.setModalMessage(null, msgId); + } + }).catch(error => { + console.log("error", error); + if (msgId) { + logging.setModalMessage(null, msgId); + } + for (let i = 0; i < getAcceptIndicates(this.instanceId).length; i++) { + let src = '' + // let flag = points[getAcceptIndicates(this.instanceId)[i]]?.metadata.label === points[getAcceptIndicates(this.instanceId)[i]]?.current_prediction ? '' : '❗️' + let flag = "" + // if(state.flagindecatesList?.indexOf(getRejectIndicates(this.instanceId)[i]) !== -1){ + // flag = '❗️' + // } + metadata.push({ key: getAcceptIndicates(this.instanceId)[i], value: points[getAcceptIndicates(this.instanceId)[i]].metadata.label, src: src, prediction: points[getAcceptIndicates(this.instanceId)[i]].current_prediction, flag: flag }); + } + }); + + } + console.log("currInstance", this.instanceId) + updateStateForInstance(this.instanceId, {customMetadata:metadata}) + // state.customMetadata = metadata + this.customMetadata = metadata; + + setTimeout(() => { + this.addBtnListener() + }, 3000) + } + + async updateRejectList(points: any, projectorEventContext?: ProjectorEventContext) { + this.projectorEventContext = projectorEventContext + if (points) { + this.points = points + } + + + if (!getRejectIndicates(this.instanceId) || getRejectIndicates(this.instanceId).length === 0) { + this.rejectMetadata = [] + } + this.hasMetadata = true; + this.selectedNum = getAcceptIndicates(this.instanceId)?.length + getRejectIndicates(this.instanceId)?.length + this.interestNum = getAcceptIndicates(this.instanceId)?.length + this.notInterestNum = getRejectIndicates(this.instanceId)?.length + let metadata = []; + let DVIServer = window.sessionStorage.ipAddress; + let basePath = getModelMath(this.instanceId) + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + if (getRejectIndicates(this.instanceId)) { + let msgId + if (getRejectIndicates(this.instanceId).length > 1000) { + msgId = logging.setModalMessage('Update ing...'); + } + + await fetch(`http://${DVIServer}/spriteList`, { + method: 'POST', + mode: 'cors', + body: JSON.stringify({ + "path": basePath, "index": getRejectIndicates(this.instanceId), + }), + headers: headers, + }).then(response => response.json()).then(data => { + for (let i = 0; i < getRejectIndicates(this.instanceId).length; i++) { + let src = data.urlList[getRejectIndicates(this.instanceId)[i]] + // let flag = points[getRejectIndicates(this.instanceId)[i]]?.metadata.label === points[getRejectIndicates(this.instanceId)[i]]?.current_prediction ? '' : '❗️' + let flag = "" + // if(state.flagindecatesList?.indexOf(getRejectIndicates(this.instanceId)[i]) !== -1){ + // flag = '❗️' + // } + // if (state.sessionStorage.isControlGroup === 'true') { + // flag = '' + // } + metadata.push({ key: getRejectIndicates(this.instanceId)[i], value: points[getRejectIndicates(this.instanceId)[i]].metadata.label, src: src, prediction: points[getRejectIndicates(this.instanceId)[i]].current_prediction, flag: flag }); + } + if (msgId) { + logging.setModalMessage(null, msgId); + } + }).catch(error => { + console.log("error", error); + if (msgId) { + logging.setModalMessage(null, msgId); + } + for (let i = 0; i < getRejectIndicates(this.instanceId).length; i++) { + let src = '' + + // let flag = points[getRejectIndicates(this.instanceId)[i]]?.metadata.label === points[getRejectIndicates(this.instanceId)[i]]?.current_prediction ? '' : '❗️' + // if(state.sessionStorage.taskType === 'anormaly detection'){ + // flag = points[getRejectIndicates(this.instanceId)[i]]?.metadata.label === points[getRejectIndicates(this.instanceId)[i]]?.current_prediction ? '' : '❗️' + // } + let flag = "" + // if(state.flagindecatesList?.indexOf(getRejectIndicates(this.instanceId)[i]) !== -1){ + // flag = '❗️' + // } + metadata.push({ key: getRejectIndicates(this.instanceId)[i], value: points[getRejectIndicates(this.instanceId)[i]].metadata.label, src: src, prediction: points[getRejectIndicates(this.instanceId)[i]].current_prediction, flag: flag }); + } + }); + + } + // state.customMetadata = metadata + this.rejectMetadata = metadata; + + setTimeout(() => { + this.addBtnListener() + }, 100) + } + + addBtnListener() { + const container = this.$$('#metadata-container') as any + let btns = container?.querySelectorAll('.custom-list-Row') + for (let i = 0; i < btns?.length; i++) { + let btn = btns[i]; + btn.addEventListener('mouseenter', () => { + this.projectorEventContext?.notifyHoverOverPoint(Number(btn.id)) + }) + } + } + removeCustomListItem(i: number) { + this.customMetadata.splice(i, 1) + getCustomSelection(this.instanceId).splice(i, 1) + + } + setLabelOption(labelOption: string) { + this.labelOption = labelOption; + if (this.pointMetadata) { + this.label = '' + this.pointMetadata[this.labelOption]; + } + } + removeacceptSelItem(e: any) { + + let index = getAcceptIndicates(this.instanceId).indexOf(Number(e.target.id)) + // state.customSelection.indexOf(7893) + console.log('index22',index) + if (index >= 0) { + getAcceptIndicates(this.instanceId).splice(index, 1) + if(getAcceptInputList(this.instanceId) && getAcceptInputList(this.instanceId)[e.target.id]){ + getAcceptInputList(this.instanceId)[e.target.id].checked = false + } + + this.removeFromCustomSelection(Number(e.target.id)) + } + console.log('index22',index) + // getAcceptInputList(this.instanceId)[e.target.id].checked = false + this.projectorEventContext.removecustomInMetaCard() + } + removerejectSelItem(e: any) { + + let index = getRejectIndicates(this.instanceId).indexOf(Number(e.target.id)) + // state.customSelection.indexOf(7893) + if (index >= 0) { + getRejectIndicates(this.instanceId).splice(index, 1) + if(getAcceptInputList(this.instanceId) && getRejectInputList(this.instanceId)[e.target.id]){ + getRejectInputList(this.instanceId)[e.target.id].checked = false + } + this.removeFromCustomSelection(Number(e.target.id)) + } + // getRejectInputList(this.instanceId)[e.target.id].checked = false + this.projectorEventContext.removecustomInMetaCard() + } + removeFromCustomSelection(indicate:number){ + + let index = getCustomSelection(this.instanceId).indexOf(indicate) + if(index !== -1){ + getCustomSelection(this.instanceId).splice(index,1) + } + this.projectorEventContext.refreshnoisyBtn() + } +} diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-projections-panel.html.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-projections-panel.html.ts new file mode 100644 index 0000000000000000000000000000000000000000..0080c4de153296f27927b99792c19a96314af550 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-projections-panel.html.ts @@ -0,0 +1,609 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import { html } from '@polymer/polymer'; + +import './styles'; + + +export const template = html` + + +
    +
    + +
    +
    +
    + + + + + + + + + + + + +
    + +
    +
    + +
    +
    +
    +

    + +

    +

    + For faster results, the data will be sampled down to + [[getUmapSampleSizeText()]] points. +

    +

    + + + Learn more about UMAP. + +

    +
    + +
    + + + + + + + +
    + +
    +

    Iteration: 0

    +

    Total Iteration: 0

    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + + + +
    Visualization Confidence
    traintest
    nnNA NA
    boundaryNANA
    PPRNA NA
    +

    Accuracy:

    +

    train: NA test: NA

    +
    +

    +

    + + + + + + +
    + + + + + + + + + + + + +
    +

    Task Model Accuracy

    +
    Train AccTest Acc
    NANA
    +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + +

    +

    +
    + +
    +
    +
    + + + + +
    #
    +
    Variance (%)
    +
    + +
    +
    + + + +
    #
    +
    Variance (%)
    +
    + +
    +
    +
    +
    + + + + +
    #
    +
    Variance (%)
    +
    + +
    +
    +
    +
    +

    + PCA is approximate. + +

    +
    Total variance
    + + For fast results, the data was sampled to [[getPcaSampleSizeText()]] + points and randomly projected down to [[getPcaSampledDimText()]] + dimensions. + +
    + +
    + + + + + +
    + + +
    +
    + + +
    +
    +
    +
    + + + +`; diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-projections-panel.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-projections-panel.ts new file mode 100644 index 0000000000000000000000000000000000000000..926ce1ab78033bb9f0df0ff203e3926c1f0bb3df --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector-projections-panel.ts @@ -0,0 +1,1192 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. +this.updateMetadataUI(this.spriteAndMetadata.stats, this.metadataFile); +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { updateStateForInstance } from './globalState'; +import { PolymerElement } from '@polymer/polymer'; +import { customElement, observe, property } from '@polymer/decorators'; +import { + ColorLegendThreshold, + ColorLegendRenderInfo, +} from './vz-projector-legend'; +import {schemeCategory10,scaleOrdinal, scaleLinear} from 'd3'; +import { LegacyElementMixin } from '../../../components/polymer/legacy_element_mixin'; +import '../../../components/polymer/irons_and_papers'; + +import { template } from './vz-projector-projections-panel.html'; +import './vz-projector-input'; +import { + DataSet, + getProjectionComponents, + PCA_SAMPLE_DIM, + PCA_SAMPLE_SIZE, + Projection, + ProjectionType, + SpriteAndMetadataInfo, + ColorOption, + ColumnStats, + State, + TSNE_SAMPLE_SIZE, + UMAP_SAMPLE_SIZE, +} from './data'; +import * as vector from './vector'; +import * as util from './util'; +import * as logging from './logging'; + +const NUM_PCA_COMPONENTS = 10; + +type InputControlName = 'xLeft' | 'xRight' | 'yUp' | 'yDown'; +type CentroidResult = { + centroid?: vector.Vector; + numMatches?: number; +}; +type Centroids = { + [key: string]: vector.Vector; + xLeft: vector.Vector; + xRight: vector.Vector; + yUp: vector.Vector; + yDown: vector.Vector; +}; +/** + * A polymer component which handles the projection tabs in the projector. + */ +@customElement('vz-projector-projections-panel') +class ProjectionsPanel extends LegacyElementMixin(PolymerElement) { + static readonly template = template; + + @property({ type: String, notify: true }) + selectedColorOptionName: string; + @property({ type: String, notify: true }) + selectedLabelOption: string; + @property({ type: String }) + metadataEditorColumn: string; + @property({ type: Boolean }) + showForceCategoricalColorsCheckbox: boolean; + + @property({ type: Boolean }) + _showFilter: boolean = false + @property({ type: String }) + selectedArchitecture: string = 'ResNet-18' + @property({ type: String }) + selectedLr: string = '0.01' + @property({ type: Number }) + selectedTotalEpoch: number = 190 + + + + @property({ type: Boolean }) + tSNEis3d: boolean = false; + @property({ type: Number }) + superviseFactor: number = 0; + // UMAP parameters + + // PCA projection. + @property({ type: Array }) + pcaComponents: Array<{ + id: number; + componentNumber: number; + percVariance: string; + }>; + @property({ type: Number }) + pcaX: number = 0; + @property({ type: Number }) + pcaY: number = 1; + @property({ type: Number }) + pcaZ: number = 2; + // Custom projection. + @property({ type: String }) + customSelectedSearchByMetadataOption: string; + + @property({ type: String }) + subjectModelPathEditorInput: string = ""; + + @property({ type: String }) + resolutionEditorInput: number; + + @property({ type: Number }) + iterationEditorInput: number; + + @property({ type: Boolean }) + keepSearchPredicate: boolean = true; + // Decide wether to keep indices or search predicates, true represents search predicates + + @property({ type: Number }) + instanceId: number; + + temporalStatus: boolean = true; //true for keepSearchPredicate + + private projector: any; // Projector; type omitted b/c LegacyElement + private labelOptions: string[]; + private colorOptions: ColorOption[]; + private currentProjection: ProjectionType; + private polymerChangesTriggerReprojection: boolean; + private dataSet: DataSet; + private originalDataSet: DataSet; + private dim: number; + /** T-SNE perplexity. Roughly how many neighbors each point influences. */ + private perplexity: number; + /** T-SNE learning rate. */ + private learningRate: number; + /** T-SNE perturb interval identifier, required to terminate perturbation. */ + private perturbInterval: number; + private searchByMetadataOptions: string[]; + /** Centroids for custom projections. */ + private centroidValues: any; + private centroids: Centroids; + /** The centroid across all points. */ + private allCentroid: number[]; + /** Polymer elements. */ + private runTsneButton: HTMLButtonElement; + private pauseTsneButton: HTMLButtonElement; + //private perturbTsneButton: HTMLButtonElement; + private previousDVIButton: HTMLButtonElement; + private nextDVIButton: HTMLButtonElement; + private jumpDVIButton: HTMLButtonElement; + private refreshDVIButton: HTMLButtonElement; + //private perplexitySlider: HTMLInputElement; + //private learningRateInput: HTMLInputElement; + //private superviseFactorInput: HTMLInputElement; + private zDropdown: HTMLElement; + private iterationLabelTsne: HTMLElement; + private totalIterationLabelDVI: HTMLElement; + + private customProjectionXLeftInput: any; // ProjectorInput; type ommited + private customProjectionXRightInput: any; // ProjectorInput; type ommited + private customProjectionYUpInput: any; // ProjectorInput; type ommited + private customProjectionYDownInput: any; // ProjectorInput; type ommited + + + private colorLegendRenderInfo: ColorLegendRenderInfo; + /*Evaluation Information*/ + private nnTrain15: HTMLElement; + private nnTest15: HTMLElement; + private boundTrain15: HTMLElement; + private boundTest15: HTMLElement; + /* + private invNnTrain10: HTMLElement; + private invNnTrain15: HTMLElement; + private invNnTrain30: HTMLElement; + private invNnTest10: HTMLElement; + private invNnTest15: HTMLElement; + private invNnTest30: HTMLElement; + */ + private invAccTrain: HTMLElement; + private invAccTest: HTMLElement; + // private invConfTrain: HTMLElement; + // private invConfTest: HTMLElement; + private accTrain: HTMLElement; + private accTest: HTMLElement; + + private iterationInput: number; + + private learningRateList: string[]; + private architectureList: string[]; + private totalEpochList: number[] + + private totalAccTrain: HTMLElement; + private totalAccTest: HTMLElement; + + private baseTrainAcc: any; + private baseTestAcc: any; + + + private timer: any; + + + initialize(projector: any) { + + + this.polymerChangesTriggerReprojection = true; + this.projector = projector; + // Set up TSNE projections. + this.perplexity = 30; + this.learningRate = 10; + // Setup Custom projections. + this.centroidValues = { xLeft: null, xRight: null, yUp: null, yDown: null }; + this.clearCentroids(); + this.setupUIControls(); + console.log("INitalized finsiehd") + } + + ready() { + super.ready(); + console.log('[projeciton] method called'); + this.learningRateList = ['0.1', '0.01', '0.001'] + this.architectureList = ['ResNet-18', 'ResNet-34', 'VGG-18'] + this.totalEpochList = [190, 200] + this._showFilter = window.sessionStorage.taskType == 'anormaly detection' && window.sessionStorage.username !== 'tutorial' + this.zDropdown = this.$$('#z-dropdown') as HTMLElement; + //this.runTsneButton = this.$$('.run-tsne') as HTMLButtonElement; + //this.runTsneButton.innerText = 'Run'; + // this.pauseTsneButton = this.$$('.pause-tsne') as HTMLButtonElement; + //this.pauseTsneButton.disabled = true; + //this.perturbTsneButton = this.$$('.perturb-tsne') as HTMLButtonElement; + this.previousDVIButton = this.$$('.previous-dvi') as HTMLButtonElement; + + + this.previousDVIButton.disabled = true; + this.nextDVIButton = this.$$('.next-dvi') as HTMLButtonElement; + this.jumpDVIButton = this.$$('.jump-dvi') as HTMLButtonElement; + this.refreshDVIButton = this.$$('.refresh-dvi') as HTMLButtonElement; + this.jumpDVIButton.disabled = true; + // this.vis_method = this.$$('[name="vis_method_projector"]'); + + // this.vis_method_projector = this.$$('.') + // let vis_method = document.getElementsByName("vis_method"); + // let setting = document.getElementsByName("setting"); + this.timer = null + + //this.nextDVIButton.disabled = true; + //this.perplexitySlider = this.$$('#perplexity-slider') as HTMLInputElement; + /* + this.learningRateInput = this.$$( + '#learning-rate-slider' + ) as HTMLInputElement; + this.superviseFactorInput = this.$$( + '#supervise-factor-slider' + ) as HTMLInputElement;*/ + + this.iterationLabelTsne = this.$$('.run-tsne-iter') as HTMLElement; + this.totalIterationLabelDVI = this.$$('.dvi-total-iter') as HTMLElement; + + + /*evaluation information*/ + this.nnTrain15 = this.$$('.nn_train_15') as HTMLElement; + this.nnTest15 = this.$$('.nn_test_15') as HTMLElement; + this.boundTrain15 = this.$$('.bound_train_15') as HTMLElement; + this.boundTest15 = this.$$('.bound_test_15') as HTMLElement; + + this.invAccTrain = this.$$('.inv_acc_train') as HTMLElement; + this.invAccTest = this.$$('.inv_acc_test') as HTMLElement; + // this.invConfTrain = this.$$('.inv_conf_train') as HTMLElement; + // this.invConfTest = this.$$('.inv_conf_test') as HTMLElement; + this.accTrain = this.$$('.acc_train') as HTMLElement; + this.accTest = this.$$('.acc_test') as HTMLElement; + this.totalAccTrain = this.$$('.total_acc_train') as HTMLElement; + this.totalAccTest = this.$$('.total_acc_test') as HTMLElement; + if (window.sessionStorage.taskType == 'anormaly detection') { + this.subjectModelPathEditorInput = window.sessionStorage.unormaly_content_path + } else { + this.subjectModelPathEditorInput = window.sessionStorage.normal_content_path + } + updateStateForInstance(this.instanceId, {modelMath:this.subjectModelPathEditorInput}) + // this.state.modelMath = this.subjectModelPathEditorInput + if (this.dataSet) { + this.dataSet.DVIsubjectModelPath = this.subjectModelPathEditorInput; + } + + console.log("REady finished") + } + disablePolymerChangesTriggerReprojection() { + this.polymerChangesTriggerReprojection = false; + } + enablePolymerChangesTriggerReprojection() { + this.polymerChangesTriggerReprojection = true; + } + + private subjectModelPathEditorInputChange() { + updateStateForInstance(this.instanceId, {modelMath:this.subjectModelPathEditorInput}) + // this.state.modelMath = this.subjectModelPathEditorInput + if (window.sessionStorage.taskType == 'anormaly detection') { + window.sessionStorage.setItem('unormaly_content_path', this.subjectModelPathEditorInput) + } else { + window.sessionStorage.setItem('normal_content_path', this.subjectModelPathEditorInput) + } + this.dataSet.DVIsubjectModelPath = this.subjectModelPathEditorInput; + } + private resolutionEditorInputChange() { + this.dataSet.DVIResolution = this.resolutionEditorInput; + } + private iterationEditorInputChange() { + this.iterationInput = Number(this.iterationEditorInput); + + } + private updateEvaluationInformation(evaluation: any) { + this.nnTrain15.innerText = '' + evaluation.nn_train_15; + this.nnTest15.innerText = '' + evaluation.nn_test_15; + this.boundTrain15.innerText = '' + evaluation.bound_train_15; + this.boundTest15.innerText = '' + evaluation.bound_test_15; + + this.invAccTrain.innerText = '' + evaluation.ppr_train; + this.invAccTest.innerText = '' + evaluation.ppr_test; + + this.accTrain.innerText = '' + evaluation.acc_train; + this.accTest.innerText = '' + evaluation.acc_test; + this.totalAccTest.innerText = '' + Number(evaluation.test_acc * 100).toFixed(2) + '%'; + this.totalAccTrain.innerText = '' + Number(evaluation.train_acc * 100).toFixed(2) + '%'; + this.baseTrainAcc = evaluation.train_acc + this.baseTestAcc = evaluation.test_acc + } + + private reRenderVzProjectorApp(): void { + const parentContainer: HTMLElement | null = document.getElementById('bodyContent')?.parentNode as HTMLElement; + + if (!parentContainer) { + console.error("Parent container not found"); + return; + } + + // Remove the existing vz-projector-app component + const oldElement: HTMLElement | null = document.getElementById('bodyContent'); + if (oldElement) { + parentContainer.removeChild(oldElement); + } + + // Create a new vz-projector-app component + const newElement: HTMLElement = document.createElement('vz-projector-app'); + newElement.id = 'bodyContent'; + newElement.setAttribute('documentation-link', 'https://www.tensorflow.org/get_started/embedding_viz'); + newElement.setAttribute('bug-report-link', 'https://github.com/tensorflow/tensorboard/issues'); + newElement.setAttribute('serving-mode', 'demo'); + newElement.setAttribute('projector-config-json-path', 'standalone_projector_config.json'); + + + // Append the new vz-projector-app to the parent container + parentContainer.appendChild(newElement); + + setTimeout(() => { + newElement.style.visibility = 'visible'; + }, 5000); // example: 5 seconds timeout, adjust as needed +} + + + private setupUIControls() { + { + const self = this; + const inkTabs = this.root.querySelectorAll('.ink-tab'); + for (let i = 0; i < inkTabs.length; i++) { + inkTabs[i].addEventListener('click', function () { + let id = this.getAttribute('data-tab'); + self.showTab(id); + }); + } + } + + this.refreshDVIButton.addEventListener('click', async () => { + + try { + + const vis_method_element = this.shadowRoot.getElementById("vis_method_projector") as HTMLSelectElement + const vis_method = vis_method_element.value + window.sessionStorage.setItem('vis_method', vis_method) + const setting_element = this.shadowRoot.getElementById("setting_projector") as HTMLSelectElement + const setting = setting_element.value + + window.sessionStorage.setItem('selectedSetting', setting) + window.sessionStorage.selectedSetting = setting + + if (window.sessionStorage.selectedSetting == 'normal') { + window.sessionStorage.setItem('taskType', 'anomaly detection'); + + + } else { + window.sessionStorage.setItem('taskType', 'active learning'); + + } + + const content_path_element = this.shadowRoot.getElementById("contentPathInput_projector") as HTMLSelectElement; + + + const content_path = content_path_element.value; + + const DVIServer_element = this.shadowRoot.getElementById("ipAddressInput_projector") as HTMLSelectElement; + + const DVIServer = DVIServer_element.value; + + window.sessionStorage.setItem('content_path', content_path); + window.sessionStorage.setItem('ipAddress', DVIServer); + + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + + const response = await fetch(`http://${DVIServer}/login`, { + method: 'POST', + body: JSON.stringify({ "content_path": content_path }), + headers: headers, + mode: 'cors' + }); + + const data = await response.json(); + + + if (data.normal_content_path && data.unormaly_content_path) { + this.reRenderVzProjectorApp(); + window.sessionStorage.setItem('normal_content_path', data.normal_content_path); + window.sessionStorage.setItem('unormaly_content_path', data.unormaly_content_path); + window.sessionStorage.setItem('isControlGroup', data.isControl ? data.isControl : false); + setTimeout(() => { + location.reload(); + }, 1); + } else { + alert(data.message); + } + + } catch (error) { + console.error(error); + //stepCallback(null, null, null, null, null); + } + }); + + + this.previousDVIButton.addEventListener('click', () => { + const msgId = logging.setModalMessage('loading...'); + this.nextDVIButton.disabled = true; + this.previousDVIButton.disabled = true; + this.jumpDVIButton.disabled = true; + this.refreshDVIButton.disabled = true; + if (this.dataSet.tSNEIteration <= 2) { + this.previousDVIButton.disabled = true; + } + console.log("projectDVI start to call") + this.dataSet.projectDVI(this.dataSet.tSNEIteration - 1, this.projector.inspectorPanel.currentPredicate, + (iteration: number | null, evaluation: any, new_selection: any[], indices: number[], totalIter?: number) => { + /** + * get filter index + */ + //get search predicates or indices + var filterIndices: number[]; + filterIndices = [] + if (this.temporalStatus) { + //search predicate + this.projector.inspectorPanel.filterIndices = indices; + } + //indices + filterIndices = this.projector.inspectorPanel.filterIndices; + + this.projector.dataSet.setDVIFilteredData(filterIndices); + if (iteration != null) { + this.iterationLabelTsne.innerText = '' + iteration; + this.totalIterationLabelDVI.innerText = '' + totalIter; + this.updateEvaluationInformation(evaluation); + this.projector.notifyProjectionPositionsUpdated(); + this.projector.onProjectionChanged(); + + this.projector.onIterationChange(iteration); + } else { + this.projector.onProjectionChanged(); + } + if (this.dataSet.tSNEIteration > 1) { + this.previousDVIButton.disabled = false; + } + logging.setModalMessage(null, msgId); + this.nextDVIButton.disabled = false; + this.jumpDVIButton.disabled = false; + this.refreshDVIButton.disabled = false; + }); + }); + this.nextDVIButton.addEventListener('click', () => { + const msgId = logging.setModalMessage('loading...'); + this.nextDVIButton.disabled = true; + this.previousDVIButton.disabled = true; + this.jumpDVIButton.disabled = true; + this.refreshDVIButton.disabled = true; + this.dataSet.projectDVI(this.dataSet.tSNEIteration + 1, this.projector.inspectorPanel.currentPredicate, + (iteration: number | null, evaluation: any, newSelection: any[], indices: number[], totalIter?: number) => { + /** + * get filter index + */ + //get search predicates or indices + if (iteration == null && evaluation == null) { + this.nextDVIButton.disabled = false; + return + } + var filterIndices: number[]; + filterIndices = [] + if (this.temporalStatus) { + //search predicate + this.projector.inspectorPanel.filterIndices = indices; + } + //indices + filterIndices = this.projector.inspectorPanel.filterIndices; + + this.projector.dataSet.setDVIFilteredData(filterIndices); + + if (iteration != null) { + this.iterationLabelTsne.innerText = '' + iteration; + this.totalIterationLabelDVI.innerText = '' + totalIter; + this.updateEvaluationInformation(evaluation); + + this.projector.notifyProjectionPositionsUpdated(); + this.projector.onProjectionChanged(); + + this.projector.onIterationChange(iteration); + if (this.dataSet.tSNEIteration > 1) { + this.previousDVIButton.disabled = false; + } + if (this.dataSet.tSNETotalIter != this.dataSet.tSNEIteration) { + this.nextDVIButton.disabled = false; + } + } else { + this.nextDVIButton.disabled = false; + this.projector.onProjectionChanged(); + } + logging.setModalMessage(null, msgId); + this.jumpDVIButton.disabled = false; + this.refreshDVIButton.disabled = false; + }); + }); + this.jumpDVIButton.addEventListener('click', () => { + if (this.iterationInput > this.dataSet.tSNETotalIter || this.iterationInput < 1) { + logging.setErrorMessage("Invaild Input!", null); + this.jumpDVIButton.disabled = false; + return; + } else if (this.iterationInput == this.dataSet.tSNEIteration) { + logging.setWarningMessage("current iteration!"); + this.jumpDVIButton.disabled = false; + // logging.setModalMessage(null, msgId); + return; + } + this.jumpTo(this.iterationInput) + }); + + this.setupCustomProjectionInputFields(); + // TODO: figure out why `--paper-input-container-input` css mixin didn't + // work. + const inputs = this.root.querySelectorAll( + 'paper-dropdown-menu paper-input input' + ); + for (let i = 0; i < inputs.length; i++) { + (inputs[i] as HTMLElement).style.fontSize = '14px'; + } + } + + + jumpTo(iterationInput) { + const msgId = logging.setModalMessage('loading...'); + this.jumpDVIButton.disabled = true; + this.nextDVIButton.disabled = true; + this.previousDVIButton.disabled = true; + this.dataSet.projectDVI(iterationInput, this.projector.inspectorPanel.currentPredicate, + (iteration: number | null, evaluation: any, newSelection: any[], indices: number[], totalIter?: number) => { + /** + * get filter index + */ + //get search predicates or indices + var filterIndices: number[]; + filterIndices = [] + if (this.temporalStatus) { + //search predicate + this.projector.inspectorPanel.filterIndices = indices; + } + //indices + filterIndices = this.projector.inspectorPanel.filterIndices; + + this.projector.dataSet.setDVIFilteredData(filterIndices); + + if (iteration != null) { + this.iterationLabelTsne.innerText = '' + iteration; + this.totalIterationLabelDVI.innerText = '' + totalIter; + this.updateEvaluationInformation(evaluation); + + this.projector.notifyProjectionPositionsUpdated(); + this.projector.onProjectionChanged(); + + this.projector.onIterationChange(iteration); + if (this.dataSet.tSNEIteration > 1) { + this.previousDVIButton.disabled = false; + } + if (this.dataSet.tSNETotalIter != this.dataSet.tSNEIteration) { + this.nextDVIButton.disabled = false; + } + } else { + this.nextDVIButton.disabled = false; + this.projector.onProjectionChanged(); + } + logging.setModalMessage(null, msgId); + this.jumpDVIButton.disabled = false; + }); + } + retrainBySelections(iteration: number, selections: number[], rejections: number[]) { + + const msgId = logging.setModalMessage('training and loading...') + + // Get the tensor. + let percent = 0 + this.timer = window.setInterval(() => { + percent = percent+0.1; + logging.setModalMessage( + `training and loading... ${Number(percent.toFixed(1))}%`, + msgId); + if(percent > 98){ + clearInterval(this.timer) + } + }, 250) + + // let xhr = new XMLHttpRequest(); + // xhr.open('GET', tensorsPath); + // xhr.responseType = 'arraybuffer'; + // xhr.onprogress = (ev) => { + + + // }; + this.dataSet.reTrainByDVI(iteration, selections, rejections, + (iteration: number | null, evaluation: any, new_selection: any[], indices: number[], totalIter?: number) => { + /** + * get filter index + */ + //get search predicates or indices + var filterIndices: number[]; + filterIndices = [] + if (this.temporalStatus) { + //search predicate + this.projector.inspectorPanel.filterIndices = indices; + } + //indices + filterIndices = this.projector.inspectorPanel.filterIndices; + // TODO initilize dataset, set inspector filter indices to be all + this.projector.dataSet.setDVIFilteredData(filterIndices); + if (iteration != null) { + this.iterationLabelTsne.innerText = '' + iteration; + this.totalIterationLabelDVI.innerText = '' + totalIter; + this.updateEvaluationInformation(evaluation); + // this.projector.notifyProjectionPositionsUpdated(new_selection); + this.projector.notifyProjectionPositionsUpdated(); + this.projector.onProjectionChanged(); + + this.projector.onIterationChange(iteration); + this.projector.initialTree() + } else { + this.projector.onProjectionChanged(); + } + if (this.dataSet.tSNEIteration > 1) { + this.previousDVIButton.disabled = false; + } + logging.setModalMessage(null, msgId); + window.clearInterval(this.timer) + this.nextDVIButton.disabled = false; + this.jumpDVIButton.disabled = false; + }); + } + + restoreUIFromBookmark(bookmark: State) { + this.disablePolymerChangesTriggerReprojection(); + // PCA + this.pcaX = bookmark.pcaComponentDimensions[0]; + this.pcaY = bookmark.pcaComponentDimensions[1]; + if (bookmark.pcaComponentDimensions.length === 3) { + this.pcaZ = bookmark.pcaComponentDimensions[2]; + } + + // custom + this.customSelectedSearchByMetadataOption = + bookmark.customSelectedSearchByMetadataOption; + if (this.customProjectionXLeftInput) { + this.customProjectionXLeftInput.set( + bookmark.customXLeftText, + bookmark.customXLeftRegex + ); + } + if (this.customProjectionXRightInput) { + this.customProjectionXRightInput.set( + bookmark.customXRightText, + bookmark.customXRightRegex + ); + } + if (this.customProjectionYUpInput) { + this.customProjectionYUpInput.set( + bookmark.customYUpText, + bookmark.customYUpRegex + ); + } + if (this.customProjectionYDownInput) { + this.customProjectionYDownInput.set( + bookmark.customYDownText, + bookmark.customYDownRegex + ); + } + this.computeAllCentroids(); + + //this.updateTSNEPerplexityFromSliderChange(); + //this.updateTSNELearningRateFromUIChange(); + if (this.iterationLabelTsne) { + this.iterationLabelTsne.innerText = bookmark.tSNEIteration.toString(); + } + if (bookmark.selectedProjection != null) { + this.showTab(bookmark.selectedProjection); + } + this.enablePolymerChangesTriggerReprojection(); + } + + populateBookmarkFromUI(bookmark: State) { + this.disablePolymerChangesTriggerReprojection(); + // PCA + bookmark.pcaComponentDimensions = [this.pcaX, this.pcaY]; + + + + // custom + bookmark.customSelectedSearchByMetadataOption = this.customSelectedSearchByMetadataOption; + if (this.customProjectionXLeftInput != null) { + bookmark.customXLeftText = this.customProjectionXLeftInput.getValue(); + bookmark.customXLeftRegex = this.customProjectionXLeftInput.getInRegexMode(); + } + if (this.customProjectionXRightInput != null) { + bookmark.customXRightText = this.customProjectionXRightInput.getValue(); + bookmark.customXRightRegex = this.customProjectionXRightInput.getInRegexMode(); + } + if (this.customProjectionYUpInput != null) { + bookmark.customYUpText = this.customProjectionYUpInput.getValue(); + bookmark.customYUpRegex = this.customProjectionYUpInput.getInRegexMode(); + } + if (this.customProjectionYDownInput != null) { + bookmark.customYDownText = this.customProjectionYDownInput.getValue(); + bookmark.customYDownRegex = this.customProjectionYDownInput.getInRegexMode(); + } + this.enablePolymerChangesTriggerReprojection(); + } + // This method is marked as public as it is used as the view method that + // abstracts DOM manipulation so we can stub it in a test. + // TODO(nsthorat): Move this to its own class as the glue between this class + // and the DOM. + dataSetUpdated(dataSet: DataSet, originalDataSet: DataSet, dim: number) { + this.dataSet = dataSet; + this.originalDataSet = originalDataSet; + this.dim = dim; + const pointCount = dataSet == null ? 0 : dataSet.points.length; + //const perplexity = Math.max(5, Math.ceil(Math.sqrt(pointCount) / 4)); + //this.perplexitySlider.value = perplexity.toString(); + //this.updateTSNEPerplexityFromSliderChange(); + this.clearCentroids(); + (this.$$('#tsne-sampling') as HTMLElement).style.display = + pointCount > TSNE_SAMPLE_SIZE ? null : 'none'; + const wasSampled = + dataSet == null + ? false + : dataSet.dim[0] > PCA_SAMPLE_DIM || dataSet.dim[1] > PCA_SAMPLE_DIM; + (this.$$('#pca-sampling') as HTMLElement).style.display = wasSampled + ? null + : 'none'; + this.showTab('tsne'); + } + @observe('selectedLabelOption') + _selectedLabelOptionChanged() { + this.projector.setSelectedLabelOption(this.selectedLabelOption); + } + @observe('selectedColorOptionName') + _selectedColorOptionNameChanged() { + let colorOption: ColorOption; + for (let i = 0; i < this.colorOptions.length; i++) { + if (this.colorOptions[i].name === this.selectedColorOptionName) { + colorOption = this.colorOptions[i]; + break; + } + } + if (!colorOption) { + return; + } + this.showForceCategoricalColorsCheckbox = !!colorOption.tooManyUniqueValues; + if (colorOption.map == null) { + this.colorLegendRenderInfo = null; + } else if (colorOption.items) { + let items = colorOption.items.map((item) => { + return { + color: colorOption.map(item.label), + label: item.label, + count: item.count, + }; + }); + this.colorLegendRenderInfo = { items, thresholds: null }; + } else { + this.colorLegendRenderInfo = { + items: null, + thresholds: colorOption.thresholds, + }; + } + this.projector.setSelectedColorOption(colorOption); + } + + @observe('temporalStatus') + _DVITemporalStatusObserver() { + + } + @observe('selectedArchitecture') + // TODO + _selectedArchitectureChanged() { + this.updateTrainTestRessult() + } + @observe('selectedTotalEpoch') + _selectedTotalEpochChanged() { + updateStateForInstance(this.instanceId, {selectedTotalEpoch:this.selectedTotalEpoch}) + // this.state.selectedTotalEpoch = this.selectedTotalEpoch + this.updateTrainTestRessult() + } + @observe('selectedLr') + _selectedLrChanged() { + // TODO + this.updateTrainTestRessult() + } + + updateTrainTestRessult() { + if (this.projector) { + if (this.selectedArchitecture == 'ResNet-18' && this.selectedLr == '0.01') { + this.projector.hiddenOrShowScatter('') + if (this.totalAccTrain) { + this.totalAccTrain.innerText = '' + Number(this.baseTrainAcc * 100).toFixed(2) + '%'; + this.totalAccTest.innerText = '' + Number(this.baseTestAcc * 100).toFixed(2) + '%'; + } + this.projector.initialTree() + } + else if (this.selectedArchitecture == 'ResNet-18' && this.selectedLr == '0.1' && this.selectedTotalEpoch == 190) { + this.projector.hiddenOrShowScatter('hidden') + if (this.totalAccTrain) { + this.totalAccTrain.innerText = '95.66%'; + this.totalAccTest.innerText = '78.23%'; + } + this.projector.initialTree(this.selectedTotalEpoch) + } + else if (this.selectedArchitecture == 'ResNet-18' && this.selectedLr == '0.001' && this.selectedTotalEpoch == 190) { + this.projector.hiddenOrShowScatter('hidden') + if (this.totalAccTrain) { + this.totalAccTrain.innerText = '94.22%'; + this.totalAccTest.innerText = '78.26%'; + } + this.projector.initialTree(this.selectedTotalEpoch) + } + else if (this.selectedArchitecture == 'ResNet-34' && this.selectedLr == '0.01' && this.selectedTotalEpoch == 190) { + this.projector.hiddenOrShowScatter('hidden') + if (this.totalAccTrain) { + this.totalAccTrain.innerText = '98.23%'; + this.totalAccTest.innerText = '78.61%'; + } + this.projector.initialTree(this.selectedTotalEpoch) + + } else if (this.selectedArchitecture == 'VGG-18' && this.selectedLr == '0.01' && this.selectedTotalEpoch == 190) { + this.projector.hiddenOrShowScatter('hidden') + if (this.totalAccTrain) { + this.totalAccTrain.innerText = '96.38%'; + this.totalAccTest.innerText = '79.93%'; + } + this.projector.initialTree(this.selectedTotalEpoch) + } else if (this.selectedTotalEpoch == 200 && !(this.selectedArchitecture == 'ResNet-18' && this.selectedLr == '0.01')) { + this.projector.hiddenOrShowScatter('hidden') + this.projector.initialTree(this.selectedTotalEpoch, true) + if (this.totalAccTrain) { + this.totalAccTrain.innerText = '-' + '%'; + this.totalAccTest.innerText = '-' + '%'; + } + } else { + this.projector.hiddenOrShowScatter('hidden') + this.projector.initialTree(this.selectedTotalEpoch, true) + if (this.totalAccTrain) { + this.totalAccTrain.innerText = '-' + '%'; + this.totalAccTest.innerText = '-' + '%'; + } + } + } + } + // @observe('selectedTotalEpoch') + // _selectedTotalChanged() { + // // TODO + // if (this.projector) { + // if (this.projector) { + // if (this.selectedArchitecture == 'ResNet-18' && this.selectedLr == '0.01' && this.selectedTotalEpoch == 190) { + + // this.projector.hiddenOrShowScatter('') + // if (this.totalAccTrain) { + // this.totalAccTrain.innerText = '' + Number(this.baseTrainAcc * 100).toFixed(2) + '%'; + // this.totalAccTest.innerText = '' + Number(this.baseTestAcc * 100).toFixed(2) + '%'; + // } + + // } else { + // this.projector.hiddenOrShowScatter('hidden') + // // if (this.totalAccTrain) { + // this.totalAccTrain.innerText = '-' + Number((this.baseTrainAcc) * 100).toFixed(2) + '%'; + // this.totalAccTest.innerText = '-' + Number((this.baseTestAcc) * 100).toFixed(2) + '%'; + // // } + // } + // } + // } + // } + metadataChanged(spriteAndMetadata: SpriteAndMetadataInfo, metadataFile?: string) { + // Project by options for custom projections. + if (metadataFile != null) { + // this.metadataFile = metadataFile; + } + this.updateMetadataUI(spriteAndMetadata.stats); + if ( + this.selectedColorOptionName == null || + this.colorOptions.filter((c) => c.name === this.selectedColorOptionName) + .length === 0 + ) { + this.selectedColorOptionName = this.colorOptions[0].name; + } + let searchByMetadataIndex = -1; + this.searchByMetadataOptions = spriteAndMetadata.stats.map((stats, i) => { + // Make the default label by the first non-numeric column. + if (!stats.isNumeric && searchByMetadataIndex === -1) { + searchByMetadataIndex = i; + } + return stats.name; + }); + this.customSelectedSearchByMetadataOption = this.searchByMetadataOptions[ + Math.max(0, searchByMetadataIndex) + ]; + } + private updateMetadataUI(columnStats: ColumnStats[]) { + // Label by options. + let labelIndex = -1; + this.labelOptions = columnStats.map((stats, i) => { + // Make the default label by the first non-numeric column. + if (!stats.isNumeric && labelIndex === -1) { + labelIndex = i; + } + return stats.name; + }); + if ( + this.selectedLabelOption == null || + this.labelOptions.filter((name) => name === this.selectedLabelOption) + .length === 0 + ) { + this.selectedLabelOption = this.labelOptions[Math.max(0, labelIndex)]; + } + if ( + this.metadataEditorColumn == null || + this.labelOptions.filter((name) => name === this.metadataEditorColumn) + .length === 0 + ) { + this.metadataEditorColumn = this.labelOptions[Math.max(0, labelIndex)]; + } + //Color by options. + const standardColorOption: ColorOption[] = [{ name: 'No color map' }]; + const metadataColorOption: ColorOption[] = columnStats + .filter((stats) => { + return !stats.tooManyUniqueValues || stats.isNumeric; + }) + .map((stats) => { + let map; + let items: { + label: string; + count: number; + }[]; + let thresholds: ColorLegendThreshold[]; + let isCategorical = !stats.tooManyUniqueValues; + let desc; + if (isCategorical) { + const scale = scaleOrdinal(schemeCategory10); + let range = scale.range(); + // Re-order the range. + let newRange = range.map((color, i) => { + let index = (i * 3) % range.length; + return range[index]; + }); + items = stats.uniqueEntries; + scale.range(newRange).domain(items.map((x) => x.label)); + map = scale; + const len = stats.uniqueEntries.length; + desc = + `${len} ${len > range.length ? ' non-unique' : ''} ` + `colors`; + } else { + thresholds = [ + { color: '#ffffdd', value: stats.min }, + { color: '#1f2d86', value: stats.max }, + ]; + map = + scaleLinear() + .domain(thresholds.map((t) => t.value)) + .range(thresholds.map((t) => t.color)); + desc = 'gradient'; + } + return { + name: stats.name, + desc: desc, + map: map, + items: items, + thresholds: thresholds, + tooManyUniqueValues: stats.tooManyUniqueValues, + }; + }); + if (metadataColorOption.length > 0) { + // Add a separator line between built-in color maps + // and those based on metadata columns. + standardColorOption.push({ name: 'Metadata', isSeparator: true }); + } + this.colorOptions = metadataColorOption.concat(standardColorOption); + } + public showTab(id: ProjectionType) { + this.currentProjection = id; + const tab = this.$$('.ink-tab[data-tab="' + id + '"]') as HTMLElement; + const allTabs = this.root.querySelectorAll('.ink-tab'); + for (let i = 0; i < allTabs.length; i++) { + util.classed(allTabs[i] as HTMLElement, 'active', false); + } + util.classed(tab, 'active', true); + const allTabContent = this.root.querySelectorAll('.ink-panel-content'); + for (let i = 0; i < allTabContent.length; i++) { + util.classed(allTabContent[i] as HTMLElement, 'active', false); + } + util.classed( + this.$$('.ink-panel-content[data-panel="' + id + '"]') as HTMLElement, + 'active', + true + ); + // guard for unit tests, where polymer isn't attached and $ doesn't exist. + if (this.$ != null) { + const main = this.$['main']; + // In order for the projections panel to animate its height, we need to + // set it explicitly. + requestAnimationFrame(() => { + this.style.height = main.clientHeight + 'px'; + }); + } + + this.beginProjection(id); + } + private beginProjection(projection: ProjectionType) { + if (this.polymerChangesTriggerReprojection === false) { + return; + } + else if (projection === 'tsne') { + this.showTSNE(); + } else if (projection === 'custom') { + if (this.dataSet != null) { + this.dataSet.stopTSNE(); + } + this.computeAllCentroids(); + this.reprojectCustom(); + } + } + private showTSNE() { + const dataSet = this.dataSet; + if (dataSet == null) { + return; + } + const accessors = getProjectionComponents('tsne', [ + 0, + 1, + this.tSNEis3d ? 2 : null, + ]); + const dimensionality = this.tSNEis3d ? 3 : 2; + const projection = new Projection( + 'tsne', + accessors, + dimensionality, + dataSet + ); + this.projector.setProjection(projection); + if (this.dataSet.hasTSNERun) { + this.projector.notifyProjectionPositionsUpdated(); + } + } + + + + private reprojectCustom() { + if ( + this.centroids == null || + this.centroids.xLeft == null || + this.centroids.xRight == null || + this.centroids.yUp == null || + this.centroids.yDown == null + ) { + return; + } + const xDir = vector.sub(this.centroids.xRight, this.centroids.xLeft); + this.dataSet.projectLinear(xDir, 'linear-x'); + const yDir = vector.sub(this.centroids.yUp, this.centroids.yDown); + this.dataSet.projectLinear(yDir, 'linear-y'); + const accessors = getProjectionComponents('custom', ['x', 'y']); + const projection = new Projection('custom', accessors, 2, this.dataSet); + this.projector.setProjection(projection); + } + clearCentroids(): void { + this.centroids = { xLeft: null, xRight: null, yUp: null, yDown: null }; + this.allCentroid = null; + } + @observe('customSelectedSearchByMetadataOption') + _customSelectedSearchByMetadataOptionChanged(newVal: string, oldVal: string) { + if (this.polymerChangesTriggerReprojection === false) { + return; + } + if (this.currentProjection === 'custom') { + this.computeAllCentroids(); + this.reprojectCustom(); + } + } + private setupCustomProjectionInputFields() { + this.customProjectionXLeftInput = this.setupCustomProjectionInputField( + 'xLeft' + ); + this.customProjectionXRightInput = this.setupCustomProjectionInputField( + 'xRight' + ); + this.customProjectionYUpInput = this.setupCustomProjectionInputField('yUp'); + this.customProjectionYDownInput = this.setupCustomProjectionInputField( + 'yDown' + ); + } + private computeAllCentroids() { + this.computeCentroid('xLeft'); + this.computeCentroid('xRight'); + this.computeCentroid('yUp'); + this.computeCentroid('yDown'); + } + private computeCentroid(name: InputControlName) { + const input = this.$$('#' + name) as any; + if (input == null) { + return; + } + const value = input.getValue(); + if (value == null) { + return; + } + let inRegexMode = input.getInRegexMode(); + let result = this.getCentroid(value, inRegexMode); + if (result.numMatches === 0) { + input.message = '0 matches. Using a random vector.'; + result.centroid = vector.rn(this.dim); + } else { + input.message = `${result.numMatches} matches.`; + } + this.centroids[name] = result.centroid; + this.centroidValues[name] = value; + } + private setupCustomProjectionInputField(name: InputControlName): any { + let input = this.$$('#' + name) as any; + input.registerInputChangedListener((input, inRegexMode) => { + if (this.polymerChangesTriggerReprojection) { + this.computeCentroid(name); + this.reprojectCustom(); + } + }); + return input; + } + private getCentroid(pattern: string, inRegexMode: boolean): CentroidResult { + if (pattern == null || pattern === '') { + return { numMatches: 0 }; + } + // Search by the original dataset since we often want to filter and project + // only the nearest neighbors of A onto B-C where B and C are not nearest + // neighbors of A. + let accessor = (i: number) => this.originalDataSet.points[i].vector; + let result = this.originalDataSet.query( + pattern, + inRegexMode, + this.customSelectedSearchByMetadataOption + ); + let r = result[1]; + return { centroid: vector.centroid(r, accessor), numMatches: r.length }; + } + getPcaSampledDimText() { + return PCA_SAMPLE_DIM.toLocaleString(); + } + getPcaSampleSizeText() { + return PCA_SAMPLE_SIZE.toLocaleString(); + } + getTsneSampleSizeText() { + return TSNE_SAMPLE_SIZE.toLocaleString(); + } + getUmapSampleSizeText() { + return UMAP_SAMPLE_SIZE.toLocaleString(); + } +} \ No newline at end of file diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector.html.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector.html.ts new file mode 100644 index 0000000000000000000000000000000000000000..dd259ba7bb200ac64499ec118b650a92110b5b8b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector.html.ts @@ -0,0 +1,666 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import { html } from '@polymer/polymer'; + +import './styles'; + + +export const template = html` + + + + +

    + +
    +
    +
    + +
    +
    + Close +
    +
    +
    +
    +
    + +
    + + + +
    +
    + + + +
    +
    + +
    + + Bounding box selection + + + + + + + + + Hidden/Show background + + + + + + +
    +
    + Points: Loading... +
    + +
    + Dimension: Loading... +
    + + +
    + +
    + + Reset zoom to fit all points +
    + + +
    + +
    + + + + + testing + + + +
    + + + +
    + +
    + + + +
    + + + + + + +
    + +
    + + + + + + + + Help with interaction controls. + +
    + Classes + Number 10
    +

    3D Label Intro

    + recommned: 👍
    + custom interest: ✅
    + custom not interest: ❌
    + + majority: 🟢
    + +
    Click anywhere to dismiss.
    +
    +
    + + +

    Warning

    +

    You need to check data related box first before selecting "show visualization error".

    +
    + OK +
    +
    + + +

    Warning

    +

    You need to check data related box first before selecting "fix visualization error".

    +
    + OK +
    +
    + + +

    Warning

    +

    You need to check data related box first before selecting "highlight critical change".

    +
    + OK +
    +
    + + +

    Warning

    +

    You need to check data related box first before highlighting points with defined confidence change.

    +
    + OK +
    +
    + + + +

    Warning

    +

    Current number of points in focus is greater than 2000, please focus on less number of points!

    +
    + OK +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + +
    +
    + + + + + + +
    + + +`; diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector.ts b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector.ts new file mode 100644 index 0000000000000000000000000000000000000000..89b94d1d22e6076a3afe1afc746676d8fa1802e1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/vz-projector.ts @@ -0,0 +1,2444 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governin g permissions and +limitations under the License. +==============================================================================*/ +import './globalState'; +import { PolymerElement } from '@polymer/polymer'; +import { customElement, observe, property } from '@polymer/decorators'; +import {Vector3} from 'three'; + +import { LegacyElementMixin } from '../../../components/polymer/legacy_element_mixin'; +import '../../../components/polymer/irons_and_papers'; + +import { AnalyticsLogger } from './analyticsLogger'; +import { template } from './vz-projector.html'; +import { + ColorOption, + ColumnStats, + DistanceFunction, + DataPoint, + DataProto, + DataSet, + getProjectionComponents, + PointMetadata, + Projection, + SpriteAndMetadataInfo, + State, + stateGetAccessorDimensions +} from './data'; +import './vz-projector-metadata-card'; +import { + ServingMode, + DataProvider, + analyzeMetadata, + EmbeddingInfo +} from './data-provider'; +import { DemoDataProvider } from './data-provider-demo'; +import { ProtoDataProvider } from './data-provider-proto'; +import { ServerDataProvider } from './data-provider-server'; +import './vz-projector-projections-panel'; +import './vz-projector-bookmark-panel'; +import './vz-projector-data-panel'; +import './vz-projector-inspector-panel'; +import { ProjectorScatterPlotAdapter } from './projectorScatterPlotAdapter'; +import { + DistanceMetricChangedListener, + HoverListener, + ProjectionChangedListener, + ProjectorEventContext, + SelectionChangedListener, +} from './projectorEventContext'; +import * as knn from './knn'; +import * as logging from './logging'; +import * as util from './util'; +import { MouseMode } from './scatterPlot'; +import{ getCurrentSessionState, updateSessionStateForInstance, getIsAnimating, getLastIteration, getScene, getHiddenBackground, getHighlightedPointIndices, getConfChangeIndices, getNowShowIndicates, getProperties, getPreviousHover, getAllResPositions, getPredChangeIndices, getSelectedTotalEpoch, getIteration, getIsAdjustingSel, updateStateForInstance, getQueryResAnormalCleanIndecates, getAcceptIndicates, getCustomSelection, getCheckBoxDom, getRejectIndicates, getPreviousIndecates } from './globalState'; + + +/** + * The minimum number of dimensions the data should have to automatically + * decide to normalize the data. + */ +const THRESHOLD_DIM_NORMALIZE = 50; +const POINT_COLOR_MISSING = 'black'; +const INDEX_METADATA_FIELD = '__index__'; + +/** + * Save the initial URL query params, before the AppRoutingEffects initialize. + */ +const initialURLQueryString = window.location.search; + +@customElement('vz-projector') +export class Projector + extends LegacyElementMixin(PolymerElement) + implements ProjectorEventContext { + static readonly template = template; + + @property({ type: String }) + routePrefix: string; + + @property({ type: String }) + dataProto: string; + + @property({ type: String }) + servingMode: ServingMode; + + // The path to the projector config JSON file for demo mode. + @property({ type: String }) + projectorConfigJsonPath: string; + + @property({ type: Boolean }) + pageViewLogging: boolean; + + @property({ type: Boolean }) + eventLogging: boolean; + + @property({ type: Object }) + metadataStyle: any + + /** + * DVI properties + */ + @property({ type: String }) + DVIServer: string + + @property({ type: Boolean }) + showlabeled: boolean = true; + + @property({ type: Boolean }) + showUnlabeled: boolean = false; + + @property({ type: Boolean }) + showTesting: boolean = false; + + @property({ type: Boolean }) + showVisError: boolean = false; + + @property({ type: Boolean }) + fixVisError: boolean = false; + + @property({ type: Boolean }) + highlightChange: boolean = false; + + @property({ type: Boolean }) + highlightConfChange: boolean = false; + + @property({ type: Boolean }) + _showNotAvaliable: boolean = false + + @property({ type: Boolean }) + showUnlabeledCheckbox: boolean = false + + @property({ type: Number }) + confEditorInput: number; + + @property({ type: Number }) + instanceId: number; + + @property({type:Boolean}) + isContraVis: boolean + // The working subset of the data source's original data set. + dataSet: DataSet; + iteration: number; + last_iteration: number; + private selectionChangedListeners: SelectionChangedListener[]; + private hoverListeners: HoverListener[]; + private projectionChangedListeners: ProjectionChangedListener[]; + private distanceMetricChangedListeners: DistanceMetricChangedListener[]; + private originalDataSet: DataSet; + private dataSetBeforeFilter: DataSet; + private projectorScatterPlotAdapter: ProjectorScatterPlotAdapter; + private dim: number; + private dataSetFilterIndices: number[]; + private selectedPointIndices: number[]; + private neighborsOfFirstPoint: knn.NearestEntry[]; + private hoverPointIndex: number; + private editMode: boolean; + private dataProvider: DataProvider; + private selectedColorOption: ColorOption; + private selectedLabelOption: string; + private normalizeData: boolean; + private projection: Projection; + private metadataFile: string; + /** Polymer component panels */ + private inspectorPanel: any; + private dataPanel: any; + private bookmarkPanel: any; + private projectionsPanel: any; + private metadataCard: any; + private statusBar: HTMLDivElement; + private analyticsLogger: AnalyticsLogger; + private backgroundPoints: any; + private currentIteration: number + + private goDownBtn: any; + private goUpBtn: any; + private goLeftBtn: any; + private goRightBtn: any; + + private helpBtn: any; + + private timer: any; + + private intervalFlag: boolean + + private registered: boolean + private showConfChangeButton: HTMLButtonElement; + private confChangeInput: number; + + + async ready() { + super.ready(); + + logging.setDomContainer(this as HTMLElement); + this.analyticsLogger = new AnalyticsLogger( + this.pageViewLogging, + this.eventLogging + ); + this.analyticsLogger.logPageView('embeddings'); + const hasWebGLSupport = await util.hasWebGLSupport(); + if (!hasWebGLSupport) { + this.analyticsLogger.logWebGLDisabled(); + logging.setErrorMessage( + 'Your browser or device does not have WebGL enabled. Please enable ' + + 'hardware acceleration, or use a browser that supports WebGL.' + ); + return; + } + this.selectionChangedListeners = []; + this.hoverListeners = []; + this.projectionChangedListeners = []; + this.distanceMetricChangedListeners = []; + this.selectedPointIndices = []; + this.neighborsOfFirstPoint = []; + this.timer = null + this.editMode = false; + this.dataPanel = this.$['data-panel'] as any; // DataPanel + this.inspectorPanel = this.$['inspector-panel'] as any; // InspectorPanel + this.projectionsPanel = this.$['projections-panel'] as any; // ProjectionsPanel + this.bookmarkPanel = this.$['bookmark-panel'] as any; // BookmarkPanel + this.metadataCard = this.$['metadata-card'] as any; // MetadataCard + this.statusBar = this.$$('#status-bar') as HTMLDivElement; + this.helpBtn = this.$$('#help-3d-icon') as HTMLElement; + this.inspectorPanel.initialize(this, this as ProjectorEventContext); + this.projectionsPanel.initialize(this); + this.bookmarkPanel.initialize(this, this as ProjectorEventContext); + if (!this.isContraVis) { + this.showConfChangeButton = this.$$('.show-button') as HTMLButtonElement; + this.showConfChangeButton.disabled = false; + } + this.setupUIControls(); + this.initializeDataProvider(); + + this.d3loader() + this.iteration = 0; + this.last_iteration = 1; + this.currentIteration = 0 + + this.showlabeled = true + this.showUnlabeled = false + this.showTesting = false + this.showVisError = false + this.fixVisError = false + this.highlightChange = false + this.highlightConfChange = false; + + this.registered = false + + this.showUnlabeledCheckbox = window.sessionStorage.taskType === 'active learning' + + + this.intervalFlag = true + this._showNotAvaliable = false + + this.metadataStyle = { + left: '320px', + top: '120px' + } + + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + // await fetch("standalone_projector_config.json", { method: 'GET' }) + // .then(response => response.json()) + // .then(data => { this.DVIServer = data.DVIServerIP + ":" + data.DVIServerPort; }) + this.DVIServer = window.sessionStorage.ipAddress + }; + d3loader() { + let that = this + new Promise((resolve) => { + let url = "https://d3js.org/d3.v5.min.js" + + let script = document.createElement('script') + script.setAttribute('src', url) + + script.onload = () => { + resolve(true) + + that.initialTree() + } + document.body.append(script) + }) + } +// d3loader function + + + + async initialTree(only?: number, needRemove?: boolean) { + const d3 = window.d3 + // // Assume you have a container element for each instance's SVG + let curr_id = this.instanceId + // Create an SVG element for this instance + let svgDom: any = this.$$("#mysvg-"+curr_id); + + + + while (svgDom?.firstChild) { + svgDom.removeChild(svgDom.lastChild); + } + if (needRemove) { + return + } + + + + let headers = new Headers(); + await fetch(`http://${window.sessionStorage.ipAddress}/get_itertaion_structure?path=${window.sessionStorage.content_path}`, { + method: 'POST', + headers: headers, + mode: 'cors' + }) + .then(response => response.json()) + .then(res => { + + if (only) { + res.structure = [{ value: only, name: only, pid: "" }] + } + let total = res.structure?.length + res.structure.length = getSelectedTotalEpoch(this.instanceId) + updateStateForInstance(this.instanceId, { treejson: res.structure }) + // this.state.treejson = res.structure + + let data = res.structure + if (only) { + + } + + function tranListToTreeData(arr) { + + const newArr = [] + // 1. 构建一个字典:能够快速根据id找到对象。 + const map = {} + // { + // '01': {id:"01", pid:"", "name":"老王",children: [] }, + // '02': {id:"02", pid:"01", "name":"小张",children: [] }, + // } + arr.forEach(item => { + // 为了计算方便,统一添加children + item.children = [] + // 构建一个字典 + const key = item.value + map[key] = item + }) + + // 2. 对于arr中的每一项 + arr.forEach(item => { + const parent = map[item.pid] + if (parent) { + // 如果它有父级,把当前对象添加父级元素的children中 + parent.children.push(item) + } else { + // 如果它没有父级(pid:''),直接添加到newArr + newArr.push(item) + } + }) + + return newArr + } + + data = tranListToTreeData(data)[0] + + var margin = 50; + var svg = d3.select(svgDom); + var width = svg.attr("width"); + var height = svg.attr("height"); + + //create group + var g = svg.append("g") + .attr("transform", "translate(" + margin + "," + 20 + ")"); + + + //create layer layout + var hierarchyData = d3.hierarchy(data) + .sum(function (d, i) { + return d.value; + }); + + + + //create tree + let len = total + let svgWidth = len * 45 + if (window.sessionStorage.taskType === 'active learning') { + svgWidth = 1000 + } + + svgDom.style.width = svgWidth + 200 + if (window.sessionStorage.selectedSetting !== 'active learning' && window.sessionStorage.selectedSetting !== 'dense al') { + svgDom.style.height = 90 + } + + + var tree = d3.tree() + .size([100, svgWidth]) + .separation(function (a, b) { + return (a.parent == b.parent ? 1 : 2) / a.depth; + }); + + //init + var treeData = tree(hierarchyData) + + //line node + var nodes = treeData.descendants(); + var links = treeData.links(); + + //line + var link = d3.linkHorizontal() + .x(function (d) { + return d.y; + }) //linkHorizontal + .y(function (d) { + return d.x; + }); + + + //path + g.append('g') + .selectAll('path') + .data(links) + .enter() + .append('path') + .attr('d', function (d, i) { + var start = { + x: d.source.x, + y: d.source.y + }; + var end = { + x: d.target.x, + y: d.target.y + }; + return link({ + source: start, + target: end + }); + }) + .attr('stroke', '#452d8a') + .attr('stroke-width', 1) + .attr('fill', 'none'); + + + //创建节点与文字分组 + var gs = g.append('g') + .selectAll('.g') + .data(nodes) + .enter() + .append('g') + .attr('transform', function (d, i) { + return 'translate(' + d.y + ',' + d.x + ')'; + }); + + //绘制文字和节点 + if(getIteration(this.instanceId) == undefined){ + updateStateForInstance(this.instanceId, {iteration:1}) + } + gs.append('circle') + .attr('r', 8) + .attr('fill', function (d, i) { + return d.data.value == getIteration(this.instanceId) ? 'orange' : '#452d8a' + }) + .attr('stroke-width', 1) + .attr('stroke', function (d, i) { + return d.data.value == getIteration(this.instanceId) ? 'orange' : '#452d8a' + }) + + gs.append('text') + .attr('x', function (d, i) { + return d.children ? 5 : 10; + }) + .attr('y', function (d, i) { + return d.children ? -20 : -5; + }) + .attr('dy', 10) + .text(function (d, i) { + if (window.sessionStorage.taskType === 'active learning') { + return `${d.data.value}|${d.data.name}`; + } else { + return `${d.data.value}`; + } + + }) + }) + + let that = this + setTimeout(() => { + let list = svgDom.querySelectorAll("circle"); + for (let i = 0; i <= list.length; i++) { + let c = list[i] + if (c) { + c.style.cursor = "pointer" + if (!only) { + c.addEventListener('click', (e: any) => { + if (e.target.nextSibling.innerHTML != getIteration(this.instanceId)) { + let value = e.target.nextSibling.innerHTML.split("|")[0] + that.projectionsPanel.jumpTo(Number(value)) + updateSessionStateForInstance(this.instanceId, {acceptIndicates:""}) + updateSessionStateForInstance(this.instanceId, {rejectIndicates:""}) + + // updateStateForInstance(this.instanceId, { acceptIndicates: "" }) + // updateStateForInstance(this.instanceId, { rejectIndicates: "" }) + // getAcceptIndicates(this.instanceId) = "" + // getRejectIndicates(this.instanceId) = "" + // window.sessionStorage.setItem('acceptIndicates', "") + // window.sessionStorage.setItem('rejectIndicates', "") + this.initialTree() + } + }) + } + } + } + }, 2000) + } + + readyregis() { + let el: any = this.$$('#metadata-card') + if (!el) { + return + } + let that = this + this.registered = true + el.onmousedown = function (e: any) { + e = e || window.event; + document.body.style.cursor = 'move' + + // 初始位置 + let offleft = Number(that.metadataStyle.left.replace('px', '')) || 0; + let offTop = Number(that.metadataStyle.top.replace('px', '')) || 0; + // 鼠标点击位置 + let startX = e.clientX; + let startY = e.clientY; + + el.setCapture && el.setCapture(); + + + const handler = function (event: any) { + event = event || window.event; + + // mouse stop position + let endX = event.clientX; + let endY = event.clientY; + + // distance + let moveX = endX - startX; + let moveY = endY - startY; + + // final position + let lastX = offleft + moveX; + let lastY = offTop + moveY; + + //boundry + if ( + lastX > + document.documentElement.clientWidth - el.clientWidth - 20 + ) { + lastX = document.documentElement.clientWidth - el.clientWidth - 20; + } else if (lastX < 20) { + lastX = 0; + } + + if ( + lastY > + document.documentElement.clientWidth - el.clientWidth - 20 + ) { + lastY = + document.documentElement.clientHeight - el.clientHeight - 20; + } else if (lastY < 20) { + lastY = 0; + } + + el.style.left = lastX + "px"; + el.style.top = lastY + "px"; + that.metadataStyle = { + left: lastX + "px", + top: lastY + "px" + } + }; + document.addEventListener('mousemove', handler, false); + document.addEventListener( + 'mouseup', + () => { + document.body.style.cursor = 'default' + document.removeEventListener('mousemove', handler); + }, + false, + ); + // + document.onmouseup = function () { + document.ontouchmove = null; + //@ts-ignore + document.releaseCapture && document.releaseCapture(); + }; + return false; + } + } + //Observe changes for all relevant properties. + @observe('showUnlabeled', 'showlabeled', 'showTesting', 'showVisError') + _combinedShowCheckboxChanged() { + // Check if 'showVisError' is checked without any other box checked + if (this.showVisError && !(this.showUnlabeled || this.showTesting || this.showlabeled)) { + this.showVisError = false; // Uncheck 'showVisError' + // Display your dialog warning + this.highlightConfChange = false; + (this.$.showVisWarning as any).open(); + return; + } + + } + + @observe('showUnlabeled', 'showlabeled', 'showTesting', 'fixVisError') + _combinedFixCheckboxChanged() { + // Check if 'showVisError' is checked without any other box checked + if (this.fixVisError && !(this.showUnlabeled || this.showTesting || this.showlabeled)) { + this.fixVisError = false; // Uncheck 'showVisError' + // Display your dialog warning + (this.$.showFixVisWarning as any).open(); + return; + } + + } + + @observe('showUnlabeled', 'showlabeled', 'showTesting', 'highlightChange') + _combinedHighlightChangeCheckboxChanged() { + // Check if 'showVisError' is checked without any other box checked + if (this.highlightChange && !(this.showUnlabeled || this.showTesting || this.showlabeled)) { + this.highlightChange = false; // Uncheck 'showVisError' + // Display your dialog warning + this.highlightConfChange = false; + (this.$.showHighlightChangeWarning as any).open(); + return; + } + + } + + + @observe('highlightChange') + _combinedshowVisHighlightChangeCheckboxChanged() { + // Check if 'showVisError' is checked without any other box checked + if (this.showVisError) { + this.highlightChange = false; // Uncheck 'showVisError' + // Display your dialog warning + this.highlightConfChange = false; + (this.$.showHighlightChangeWarning as any).open(); + return; + } + + } + @observe('showVisError') + _combinedHighlightChangeShowVisCheckboxChanged() { + // Check if 'showVisError' is checked without any other box checked + if (this.highlightChange) { + this.showVisError = false; // Uncheck 'showVisError' + // Display your dialog warning + this.highlightConfChange = false; + (this.$.showVisWarning as any).open(); + return; + } + } + // @observe('highlightVisError') + // _combinedHighlightConfChangeShowVisCheckboxChanged() { + // // Check if 'showVisError' is checked without any other box checked + // if (this.highlightConfChange) { + // this.showVisError = false; // Uncheck 'showVisError' + // // Display your dialog warning + // (this.$.showVisWarning as any).open(); + // return; + // } + // }_ + // @observe('fixVisError') + // _fixVisChanged() { + // var left = this.state.currentFocus[0] + // var right = this.state.currentFocus[1] + // var bottom = this.state.currentFocus[2] + // var top = this.state.currentFocus[3] + // var allPointsPositions = this.state.worldSpacePointPositions[getIteration(this.instanceId)] + // let currVisErrorIndices = getHighlightedPointIndices(this.instanceId) + // let lens = currVisErrorIndices.length + // let focusPointsIndices = Array.from({ length: 2000 }); + // let currIndex = 0 + // // only count the number of vis error points, if exceeds 2000, throws a warning + // for (let j = 0; j < lens; j++) { + // if (currIndex >= 2000) { + // this.fixVisError = false; + // (this.$.showExceedMaxWarning as any).open(); + // return; + // } + // let start = currVisErrorIndices[j] * 3 + // let posX = allPointsPositions[start] + // let posY = allPointsPositions[start + 1] + + // if (posX >= left && posX <= right && posY >= bottom && posY <= top) { + // focusPointsIndices[currIndex] = currVisErrorIndices[j] + // currIndex += 1 + // } + // } + + // this.projectionsPanel.projectDVI() + // // this allows data points positions to be updated on canvas + // queryCurrentFocus(focusPointsIndices) + // } + + @observe('showlabeled', 'showVisError') + _labeledChanged() { + this.highlightConfChange = false; + let indicates = [] + if (getNowShowIndicates(this.instanceId)) { + if (this.showlabeled) { + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] + if (indicate === 0 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + // this.projector.filterDataset(getNowShowIndicates(this.instanceId)) + } else { + ///隐藏labeled + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 0 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + } + let highlightedPointIndices; + + if (this.showVisError) { + highlightedPointIndices = getHighlightedPointIndices(this.instanceId)[this.iteration] + highlightedPointIndices = highlightedPointIndices.filter(value => getNowShowIndicates(this.instanceId).includes(value)) + this.filterDataset(getNowShowIndicates(this.instanceId), false, highlightedPointIndices = highlightedPointIndices, undefined) + } else { + this.filterDataset(getNowShowIndicates(this.instanceId)) + } + } + } + + + @observe('showUnlabeled', 'showVisError') + _unLabelChanged() { + this.highlightConfChange = false; + let indicates = [] + if (getNowShowIndicates(this.instanceId)) { + if (this.showUnlabeled) { + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] + if (indicate === 1 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + // this.projector.filterDataset(getNowShowIndicates(this.instanceId)) + } else { + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 1 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + } + let highlightedPointIndices; + if (this.showVisError) { + highlightedPointIndices = getHighlightedPointIndices(this.instanceId)[this.iteration] + highlightedPointIndices = highlightedPointIndices.filter(value => getNowShowIndicates(this.instanceId).includes(value)) + this.filterDataset(getNowShowIndicates(this.instanceId), false, highlightedPointIndices = highlightedPointIndices, undefined) + } else { + this.filterDataset(getNowShowIndicates(this.instanceId)) + } + } + } + + @observe('showTesting', 'showVisError') + _testingChanged() { + this.highlightConfChange = false; + let indicates = [] + if (getNowShowIndicates(this.instanceId)) { + if (this.showTesting) { + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] + if (indicate === 2 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + // this.projector.filterDataset(getNowShowIndicates(this.instanceId)) + } else { + + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 2 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + } + let highlightedPointIndices; + if (this.showVisError) { + highlightedPointIndices = getHighlightedPointIndices(this.instanceId)[this.iteration] + + highlightedPointIndices = highlightedPointIndices.filter(value => getNowShowIndicates(this.instanceId).includes(value)) + + this.filterDataset(getNowShowIndicates(this.instanceId), false, highlightedPointIndices = highlightedPointIndices, undefined) + } else { + this.filterDataset(getNowShowIndicates(this.instanceId)) + } + } + } + + + // @observe('showVisError') + // _visErrorChanged() { + // let indicates = [] + // if (getNowShowIndicates(this.instanceId)) { + // if (this.showVisError) { + // for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + // let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] + // if (indicate === 3 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + // indicates.push(i) + // } + // } + // getNowShowIndicates(this.instanceId) = indicates + // //this.projector.filterDataset(getNowShowIndicates(this.instanceId)) + // } else { + + // for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + // if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 3 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + // indicates.push(i) + // } + // } + // getNowShowIndicates(this.instanceId) = indicates + // } + // this.filterDataset(getNowShowIndicates(this.instanceId)) + // } + // } + + + @observe('showlabeled', 'highlightChange') + _predLabeledChanged() { + this.highlightConfChange = false; + let indicates = [] + if (getNowShowIndicates(this.instanceId)) { + if (this.showlabeled) { + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] + if (indicate === 0 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + // this.projector.filterDataset(getNowShowIndicates(this.instanceId)) + } else { + ///隐藏labeled + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 0 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + } + let predChangeIndices; + + if (this.highlightChange) { + this.highlightCriticalChange() + predChangeIndices = getPredChangeIndices(this.instanceId) + predChangeIndices = predChangeIndices.filter(value => getNowShowIndicates(this.instanceId).includes(value)) + this.filterDataset(getNowShowIndicates(this.instanceId), false, undefined, predChangeIndices = predChangeIndices) + } else { + this.filterDataset(getNowShowIndicates(this.instanceId)) + } + } + } + + @observe('showUnlabeled', 'highlightChange') + _predUnLabelChanged() { + this.highlightConfChange = false; + let indicates = [] + if (getNowShowIndicates(this.instanceId)) { + if (this.showUnlabeled) { + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] + if (indicate === 1 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + // this.projector.filterDataset(getNowShowIndicates(this.instanceId)) + } else { + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 1 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + } + let predChangeIndices; + if (this.highlightChange) { + this.highlightCriticalChange() + predChangeIndices = getPredChangeIndices(this.instanceId) + predChangeIndices = predChangeIndices.filter(value => getNowShowIndicates(this.instanceId).includes(value)) + this.filterDataset(getNowShowIndicates(this.instanceId), false, undefined, predChangeIndices = predChangeIndices) + } else { + this.filterDataset(getNowShowIndicates(this.instanceId)) + } + } + } + + @observe('showTesting', 'highlightChange') + _predTestingChanged() { + this.highlightConfChange = false; + let indicates = [] + if (getNowShowIndicates(this.instanceId)) { + if (this.showTesting) { + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] + if (indicate === 2 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + // this.projector.filterDataset(getNowShowIndicates(this.instanceId)) + } else { + + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 2 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + } + let predChangeIndices; + if (this.highlightChange) { + this.highlightCriticalChange() + predChangeIndices = getPredChangeIndices(this.instanceId) + + predChangeIndices = predChangeIndices.filter(value => getNowShowIndicates(this.instanceId).includes(value)) + + this.filterDataset(getNowShowIndicates(this.instanceId), false, undefined, predChangeIndices = predChangeIndices) + } else { + this.filterDataset(getNowShowIndicates(this.instanceId)) + } + } + } + + + // @observe('highlightChange') + // _predChanged() { + // let indicates = [] + // if (getNowShowIndicates(this.instanceId)) { + // if (this.showVisError) { + // for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + // let indicate = getProperties(this.instanceId)[getIteration(this.instanceId)][i] + // if (indicate === 3 || getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + // indicates.push(i) + // } + // } + // getNowShowIndicates(this.instanceId) = indicates + // //this.projector.filterDataset(getNowShowIndicates(this.instanceId)) + // } else { + + // for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + // if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 3 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + // indicates.push(i) + // } + // } + // getNowShowIndicates(this.instanceId) = indicates + // } + // this.filterDataset(getNowShowIndicates(this.instanceId)) + // } + // } + + onIterationChange(num: number) { + + updateSessionStateForInstance(this.instanceId, {iteration:String(num)}) + // updateStateForInstance(this.instanceId, {iteration:num}) + // getIteration(this.instanceId) = String(num) + + // window.sessionStorage.setItem('iteration', String(num)) + // window.iteration = num; + let indicates = [] + this.iteration = num; + + + if (!getIsAnimating(this.instanceId)) { + if (this.showTesting === false) { + for (let i = 0; i < getProperties(this.instanceId)[getIteration(this.instanceId)].length; i++) { + if (getProperties(this.instanceId)[getIteration(this.instanceId)][i] !== 2 && getNowShowIndicates(this.instanceId).indexOf(i) !== -1) { + indicates.push(i) + } + } + updateStateForInstance(this.instanceId, { nowShowIndicates: indicates }) + // getNowShowIndicates(this.instanceId) = indicates + } + this.filterDataset(getNowShowIndicates(this.instanceId)) + + } + if (this.inspectorPanel) { + if (window.sessionStorage.taskType === 'active learning' && getIteration(this.instanceId) !== 1) { + this.inspectorPanel.updateDisabledStatues(true) + } else { + this.inspectorPanel.updateDisabledStatues(false) + } + + } + this.initialTree() + } + + private confEditorInputChange() { + this.confChangeInput = Number(this.confEditorInput); + + } + + setSelectedLabelOption(labelOption: string) { + this.selectedLabelOption = labelOption; + this.metadataCard.setLabelOption(this.selectedLabelOption); + this.projectorScatterPlotAdapter.setLabelPointAccessor(labelOption); + this.projectorScatterPlotAdapter.updateScatterPlotAttributes(); + this.projectorScatterPlotAdapter.render(); + } + setSelectedColorOption(colorOption: ColorOption) { + this.selectedColorOption = colorOption; + this.projectorScatterPlotAdapter.setLegendPointColorer( + this.getLegendPointColorer(colorOption) + ); + this.projectorScatterPlotAdapter.updateScatterPlotAttributes(); + this.projectorScatterPlotAdapter.render(); + } + setNormalizeData(normalizeData: boolean) { + this.normalizeData = normalizeData; + this.setCurrentDataSet(this.originalDataSet.getSubset()); + } + updateDataSet( + ds: DataSet, + spriteAndMetadata?: SpriteAndMetadataInfo, + metadataFile?: string + ) { + this.dataSetFilterIndices = null; + this.originalDataSet = ds; + if (ds != null) { + this.normalizeData = + this.originalDataSet.dim[1] >= THRESHOLD_DIM_NORMALIZE; + spriteAndMetadata = spriteAndMetadata || {}; + if (spriteAndMetadata.pointsInfo == null) { + let [pointsInfo, stats] = this.makeDefaultPointsInfoAndStats(ds.points); + spriteAndMetadata.pointsInfo = pointsInfo; + spriteAndMetadata.stats = stats; + } + let metadataMergeSucceeded = ds.mergeMetadata(spriteAndMetadata); + if (!metadataMergeSucceeded) { + return; + } + } + if (this.projectorScatterPlotAdapter != null) { + if (ds == null) { + this.projectorScatterPlotAdapter.setLabelPointAccessor(null); + this.setProjection(null); + } else { + this.projectorScatterPlotAdapter.updateScatterPlotPositions(); + this.projectorScatterPlotAdapter.updateScatterPlotAttributes(); + this.projectorScatterPlotAdapter.resize(); + this.projectorScatterPlotAdapter.render(); + } + } + if (ds != null) { + this.dataPanel.setNormalizeData(this.normalizeData); + this.setCurrentDataSet(ds.getSubset()); + this.projectorScatterPlotAdapter.setLabelPointAccessor( + this.selectedLabelOption + ); + this.inspectorPanel.datasetChanged(); + this.inspectorPanel.metadataChanged(spriteAndMetadata); + this.projectionsPanel.metadataChanged(spriteAndMetadata); + this.dataPanel.metadataChanged(spriteAndMetadata, metadataFile); + //reset + if (getCurrentSessionState(this.instanceId).iteration) { + this.projectionsPanel.jumpTo(Number(getCurrentSessionState(this.instanceId).iteration)) + } else { + this.projectionsPanel.jumpTo(Number(1)) + } + //RECALL + //reset + if (getCurrentSessionState(this.instanceId).acceptIndicates) { + // console.log("go fuck you") + // console.log("yourmom",getAcceptIndicates(this.instanceId)) + updateStateForInstance(this.instanceId, { acceptIndicates: getCurrentSessionState(this.instanceId).acceptIndicates.split(",").map(parseFloat) }) + + // getAcceptIndicates(this.instanceId) = getAcceptIndicates(this.instanceId).split(",").map(parseFloat) + } + if (getCurrentSessionState(this.instanceId).rejectIndicates) { + updateStateForInstance(this.instanceId, { rejectIndicates: getCurrentSessionState(this.instanceId).rejectIndicates.split(",").map(parseFloat) }) + // getRejectIndicates(this.instanceId) = getRejectIndicates(this.instanceId).split(",").map(parseFloat) + } + if (getCurrentSessionState(this.instanceId).customSelection) { + updateStateForInstance(this.instanceId, { customSelection: getCurrentSessionState(this.instanceId).customSelection.split(",").map(parseFloat) }) + // getCustomSelection(this.instanceId) = getCustomSelection(this.instanceId).split(",").map(parseFloat) + } + } else { + this.setCurrentDataSet(null); + // this.projectorScatterPlotAdapter + } + } + metadataEdit(metadataColumn: string, metadataLabel: string) { + this.selectedPointIndices.forEach( + (i) => (this.dataSet.points[i].metadata[metadataColumn] = metadataLabel) + ); + this.neighborsOfFirstPoint.forEach( + (p) => + (this.dataSet.points[p.index].metadata[metadataColumn] = metadataLabel) + ); + this.dataSet.spriteAndMetadataInfo.stats = analyzeMetadata( + this.dataSet.spriteAndMetadataInfo.stats.map((s) => s.name), + this.dataSet.points.map((p) => p.metadata) + ); + this.metadataChanged(this.dataSet.spriteAndMetadataInfo); + this.metadataEditorContext(true, metadataColumn); + } + metadataChanged( + spriteAndMetadata: SpriteAndMetadataInfo, + metadataFile?: string + ) { + if (metadataFile != null) { + this.metadataFile = metadataFile; + } + + this.dataSet.spriteAndMetadataInfo = spriteAndMetadata; + this.projectionsPanel.metadataChanged(spriteAndMetadata); + this.inspectorPanel.metadataChanged(spriteAndMetadata); + this.dataPanel.metadataChanged(spriteAndMetadata, this.metadataFile); + if (this.selectedPointIndices.length > 0) { + // at least one selected point + this.metadataCard.updateMetadata( + // show metadata for first selected point + this.dataSet.points[this.selectedPointIndices[0]].metadata + ); + } else { + // no points selected + this.metadataCard.updateMetadata(null); // clear metadata + } + this.setSelectedLabelOption(this.selectedLabelOption); + } + metadataEditorContext(enabled: boolean, metadataColumn: string) { + if (this.inspectorPanel) { + this.inspectorPanel.metadataEditorContext(enabled, metadataColumn); + } + } + setSelectedTensor(run: string, tensorInfo: EmbeddingInfo) { + this.bookmarkPanel.setSelectedTensor(run, tensorInfo, this.dataProvider); + } + updateBackgroundImg() { + this.projectorScatterPlotAdapter.updateBackground() + } + /** + * Registers a listener to be called any time the selected point set changes. + */ + registerSelectionChangedListener(listener: SelectionChangedListener) { + this.selectionChangedListeners.push(listener); + } + filterDataset(pointIndices: number[], filter?: boolean, highlightedPointIndices?: number[], predChangeIndices?: number[], confChangeIndices?: number[]) { + const selectionSize = this.selectedPointIndices.length; + /* + if (this.dataSetBeforeFilter == null) { + this.dataSetBeforeFilter = this.dataSet; + }*/ + //console.log('now',pointIndices.length,this.dataSet) + + this.dataSet.setDVIFilteredData(pointIndices); + // this.setCurrentDataSet(this.dataSet.getSubset(pointIndices)); + this.dataSetFilterIndices = pointIndices; + this.projectorScatterPlotAdapter.updateScatterPlotPositions(); + // console.log( predChangeIndices); + // console.log(highlightedPointIndices) + this.projectorScatterPlotAdapter.updateScatterPlotAttributes(filter, highlightedPointIndices, predChangeIndices, confChangeIndices); + // this.projectorScatterPlotAdapter.updateBackground() + + this.projectorScatterPlotAdapter.render() + // this.adjustSelectionAndHover(util.range(selectionSize)); + + if (getIsAdjustingSel(this.instanceId)) { + // this.boundingSelectionBtn.classList.add('actived') + this.setMouseMode(MouseMode.AREA_SELECT) + } + } + resetFilterDataset(num?) { + const originalPointIndices = this.selectedPointIndices.map( + (filteredIndex) => this.dataSet.points[filteredIndex].index + ); + + /* + this.setCurrentDataSet(this.dataSetBeforeFilter); + if (this.projection != null) { + this.projection.dataSet = this.dataSetBeforeFilter; + } + this.dataSetBeforeFilter = null;*/ + // setDVIfilter all data + let total = this.dataSet.DVIValidPointNumber[this.dataSet.tSNEIteration] + if (num) { + total = num + } + + var indices: number[]; + indices = []; + for (let i = 0; i < total; i++) { + indices.push(i); + } + this.dataSetFilterIndices = indices; + this.dataSet.setDVIFilteredData(indices); + this.projectorScatterPlotAdapter.updateScatterPlotPositions(); + this.projectorScatterPlotAdapter.updateScatterPlotAttributes(); + // this.adjustSelectionAndHover(util.range(selectionSize)); + + } + /// + setDynamicNoisy() { + // this.setDynamicStop() + if (!getCustomSelection(this.instanceId)) { + updateStateForInstance(this.instanceId, { customSelection: [] }) + // getCustomSelection(this.instanceId) = [] + } + if (!getQueryResAnormalCleanIndecates(this.instanceId)) { + updateStateForInstance(this.instanceId, { queryResAnormalCleanIndecates: [] }) + // getQueryResAnormalCleanIndecates(this.instanceId) = [] + } + let indecates = getQueryResAnormalCleanIndecates(this.instanceId).concat(getCustomSelection(this.instanceId)) + if (indecates && indecates.length) { + this.filterDataset(indecates) + } + // this.filterDataset(this.selectedPointIndices) + this.currentIteration = getIteration(this.instanceId) + + let current = 1 + let positions = getAllResPositions(this.instanceId)?.results + let interationList = [] + if (getAllResPositions(this.instanceId) && getAllResPositions(this.instanceId).bgimgList) { + updateStateForInstance(this.instanceId, { sceneBackgroundImg: getAllResPositions(this.instanceId)?.bgimgList }) + // getSceneBackgroundImg(this.instanceId) = getAllResPositions(this.instanceId)?.bgimgList + } + for (let key of Object.keys(getAllResPositions(this.instanceId)?.results)) { + interationList.push(Number(key)) + } + current = Number(interationList[0]) + let count = 0 + if (this.intervalFlag) { + this.intervalFlag = false + this.timer = window.setInterval(() => { + + this.inspectorPanel.updateCurrentPlayEpoch(current) + updateStateForInstance(this.instanceId, { iteration: current }) + // getIteration(this.instanceId) = current; + let length = this.dataSet.points.length + if (length === 60002) { + let point1 = this.dataSet.points[length - 2]; + let point2 = this.dataSet.points[length - 1]; + point1.projections['tsne-0'] = getAllResPositions(this.instanceId).grid[current][0] + point1.projections['tsne-1'] = getAllResPositions(this.instanceId).grid[current][1] + point2.projections['tsne-0'] = getAllResPositions(this.instanceId).grid[current][2] + point2.projections['tsne-1'] = getAllResPositions(this.instanceId).grid[current][3] + // point.projections['tsne-0'] = + } + + for (let i = 0; i < this.dataSet.points.length; i++) { + const point = this.dataSet.points[i]; + if (!getCustomSelection(this.instanceId) || !getCustomSelection(this.instanceId).length || getCustomSelection(this.instanceId).indexOf(i) !== -1 || getQueryResAnormalCleanIndecates(this.instanceId)?.indexOf(i) !== -1) { + point.projections['tsne-0'] = positions[current][i][0]; + point.projections['tsne-1'] = positions[current][i][1]; + point.projections['tsne-2'] = 0; + } + } + // this.dataSet.updateProjection(current) + this.projectorScatterPlotAdapter.updateScatterPlotPositions(); + this.projectorScatterPlotAdapter.updateScatterPlotAttributes(); + this.updateBackgroundImg(); + + this.onIterationChange(current); + // this.projectorScatterPlotAdapter.updateScatterPlotAttributes() + this.projectorScatterPlotAdapter.render() + if (count == interationList.length - 1) { + this.inspectorPanel.playAnimationFinished() + this.setDynamicStop() + current = interationList[0] + count = 0 + + } else { + current = interationList[++count] + } + }, 1200) + } + + } + + updatePosByIndicates(current: number) { + let positions = getAllResPositions(this.instanceId)?.results + for (let i = 0; i < this.dataSet.points.length; i++) { + const point = this.dataSet.points[i]; + if (!this.selectedPointIndices.length || this.selectedPointIndices.indexOf(i) !== -1) { + point.projections['tsne-0'] = positions[current][i][0]; + point.projections['tsne-1'] = positions[current][i][1]; + point.projections['tsne-2'] = 0; + } + } + // this.dataSet.updateProjection(current) + this.projectorScatterPlotAdapter.updateScatterPlotPositions(); + this.projectorScatterPlotAdapter.updateScatterPlotAttributes(); + this.updateBackgroundImg(); + + this.onIterationChange(current); + } + setDynamicStop() { + updateStateForInstance(this.instanceId, { isAnimatating: false }) + // getIsAnimating(this.instanceId) = false + if (this.timer && !this.intervalFlag) { + window.clearInterval(this.timer) + this.intervalFlag = true + this.resetFilterDataset() + } + let end = setInterval(function () { }, 10000); + for (let i = 1; i <= end; i++) { + clearInterval(i); + } + + this.iteration = this.currentIteration + let length = this.dataSet.points.length + if (length === 60002) { + let point1 = this.dataSet.points[length - 2]; + let point2 = this.dataSet.points[length - 1]; + point1.projections['tsne-0'] = getAllResPositions(this.instanceId).grid[this.iteration][0] + point1.projections['tsne-1'] = getAllResPositions(this.instanceId).grid[this.iteration][1] + point2.projections['tsne-0'] = getAllResPositions(this.instanceId).grid[this.iteration][2] + point2.projections['tsne-1'] = getAllResPositions(this.instanceId).grid[this.iteration][3] + // point.projections['tsne-0'] = + } + updateStateForInstance(this.instanceId, { iteration: this.currentIteration }) + // getIteration(this.instanceId) = this.currentIteration + this.updatePosByIndicates(getIteration(this.instanceId)) + } + + renderInTraceLine(inTrace: boolean) { + this.projectorScatterPlotAdapter.setRenderInTraceLine(inTrace) + } + + refresh() { + // this.projectorScatterPlotAdapter.scatterPlot.render() + this.metadataCard.updateCustomList(this.dataSet.points, this as ProjectorEventContext) + this.metadataCard.updateRejectList(this.dataSet.points, this as ProjectorEventContext) + // this.projectorScatterPlotAdapter.scatterPlot.render() + this.projectorScatterPlotAdapter.updateScatterPlotAttributes() + this.projectorScatterPlotAdapter.render() + } + removecustomInMetaCard() { + this.metadataCard.updateCustomList(this.dataSet.points, this as ProjectorEventContext) + this.metadataCard.updateRejectList(this.dataSet.points, this as ProjectorEventContext) + // this.inspectorPanel.refreshSearchResult() + this.inspectorPanel.updateSessionStorage() + this.projectorScatterPlotAdapter.updateScatterPlotAttributes() + this.projectorScatterPlotAdapter.render() + } + /** + * Used by clients to indicate that a selection has occurred. + */ + async notifySelectionChanged(newSelectedPointIndices: number[], selectMode?: boolean, selectionType?: string) { + + if (!this.registered) { + this.readyregis() + } + if (!getAcceptIndicates(this.instanceId)) { + updateStateForInstance(this.instanceId, { acceptIndicates: [] }) + // getAcceptIndicates(this.instanceId) = [] + } + if (!getRejectIndicates(this.instanceId)) { + updateStateForInstance(this.instanceId, { rejectIndicates: [] }) + // getRejectIndicates(this.instanceId) = [] + } + updateStateForInstance(this.instanceId, { customSelection: getAcceptIndicates(this.instanceId).concat(getRejectIndicates(this.instanceId)) }) + // getCustomSelection(this.instanceId) = getAcceptIndicates(this.instanceId).concat(getRejectIndicates(this.instanceId)) + if (selectionType === 'isALQuery' || selectionType === 'normal' || selectionType === 'isAnormalyQuery' || selectionType === 'boundingbox') { + // getCustomSelection(this.instanceId) = [] + updateStateForInstance(this.instanceId, { queryResPointIndices: newSelectedPointIndices }) + // getQueryResPointIndices(this.instanceId) = newSelectedPointIndices + if (selectionType === 'isALQuery') { + updateStateForInstance(this.instanceId, { alQueryResPointIndices: newSelectedPointIndices }) + // this.state.alQueryResPointIndices = newSelectedPointIndices + } else { + updateStateForInstance(this.instanceId, { alQueryResPointIndices: [] }) + // this.state.alQueryResPointIndices = [] + } + } + if (selectionType === 'isShowSelected') { + for (let i = 0; i < getPreviousIndecates(this.instanceId)?.length; i++) { + // if(getCustomSelection(this.instanceId).indexOf(this.state.previousIndecates[i]) === -1){ + let index = getPreviousIndecates(this.instanceId)[i] + if (getCheckBoxDom(this.instanceId)[index]) { + + // Update the customSelection array in the state + // Clone the checkboxDom array to avoid direct mutation + const newCheckboxDom = getCheckBoxDom(this.instanceId); + + // Modify the specific checkbox's checked property + if (newCheckboxDom[index]) { + + newCheckboxDom[index].checked = true; + } + + // Update the state with the modified checkboxDom + updateStateForInstance(this.instanceId, { checkboxDom: newCheckboxDom }); + // getCheckBoxDom(this.instanceId)[index].checked = true + } + // } + } + this.metadataCard.updateCustomList(this.dataSet.points, this as ProjectorEventContext) + this.metadataCard.updateRejectList(this.dataSet.points, this as ProjectorEventContext) + this.projectorScatterPlotAdapter.updateScatterPlotAttributes() + this.projectorScatterPlotAdapter.render() + return + } + if (selectionType === 'boundingbox') { + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + + await fetch(`http://${this.DVIServer}/boundingbox_record`, { + method: 'POST', + mode: 'cors', + body: JSON.stringify({ + "username": window.sessionStorage.username, + }), + headers: headers, + }).then(() => { + console.log('123323') + }) + updateStateForInstance(this.instanceId, { alSuggestLabelList: [] }) + updateStateForInstance(this.instanceId, { alSuggestScoreList: [] }) + // this.state.alSuggestLabelList = [] + // this.state.alSuggestScoreList = [] + updateStateForInstance(this.instanceId, {queryResPointIndices:newSelectedPointIndices}) + this.selectedPointIndices = newSelectedPointIndices + updateStateForInstance(this.instanceId, { alQueryResPointIndices: [] }) + // this.state.alQueryResPointIndices = [] + this.inspectorPanel.refreshSearchResByList(newSelectedPointIndices) + this.projectorScatterPlotAdapter.updateScatterPlotAttributes() + this.projectorScatterPlotAdapter.render() + this.selectionChangedListeners.forEach((l) => + l(this.selectedPointIndices, []) + ); + return + } + + let neighbors: knn.NearestEntry[] = []; + if ( + this.editMode && // point selection toggle in existing selection + newSelectedPointIndices.length > 0 + ) { + // selection required + if (this.selectedPointIndices.length === 1) { + // main point with neighbors + let main_point_vector = this.dataSet.points[ + this.selectedPointIndices[0] + ].vector; + neighbors = this.neighborsOfFirstPoint.filter( + ( + n // deselect + ) => newSelectedPointIndices.filter((p) => p == n.index).length == 0 + ); + newSelectedPointIndices.forEach((p) => { + // add additional neighbors + if ( + p != this.selectedPointIndices[0] && // not main point + this.neighborsOfFirstPoint.filter((n) => n.index == p).length == 0 + ) { + let p_vector = this.dataSet.points[p].vector; + let n_dist = this.inspectorPanel.distFunc( + main_point_vector, + p_vector + ); + let pos = 0; // insertion position into dist ordered neighbors + while ( + pos < neighbors.length && + neighbors[pos].dist < n_dist // find pos + ) + pos = pos + 1; // move up the sorted neighbors list according to dist + neighbors.splice(pos, 0, { index: p, dist: n_dist }); // add new neighbor + } + }); + } else { + // multiple selections + let updatedSelectedPointIndices = this.selectedPointIndices.filter( + (n) => newSelectedPointIndices.filter((p) => p == n).length == 0 + ); // deselect + newSelectedPointIndices.forEach((p) => { + // add additional selections + if (this.selectedPointIndices.filter((s) => s == p).length == 0) + // unselected + updatedSelectedPointIndices.push(p); + }); + this.selectedPointIndices = updatedSelectedPointIndices; // update selection + if (this.selectedPointIndices.length > 0) { + // at least one selected point + this.metadataCard.updateMetadata( + // show metadata for first selected point + this.dataSet.points[this.selectedPointIndices[0]].metadata + ); + } else { + // no points selected + this.metadataCard.updateMetadata(null); // clear metadata + } + } + } else if (selectMode == true) { + // for bounding box selection + // multiple selections + let updatedSelectedPointIndices = this.selectedPointIndices.filter( + (n) => newSelectedPointIndices.filter((p) => p == n).length == 0 + ); // deselect + newSelectedPointIndices.forEach((p) => { + // add additional selections + if (this.selectedPointIndices.filter((s) => s == p).length == 0) + // unselected + updatedSelectedPointIndices.push(p); + }); + this.selectedPointIndices = updatedSelectedPointIndices; // update selection + if (this.selectedPointIndices.length > 0) { + // at least one selected point + if (this.selectedPointIndices.length == 1) { + this.metadataCard.updateMetadata( + // show metadata for first selected point + this.dataSet.points[this.selectedPointIndices[0]].metadata + ); + } else { + this.metadataCard.updateMetadata(null); + } + } else { + // no points selected + this.metadataCard.updateMetadata(null); // clear metadata + } + this.inspectorPanel.updateBoundingBoxSelection(newSelectedPointIndices); + } else { + // normal selection mode + this.selectedPointIndices = newSelectedPointIndices; + if (newSelectedPointIndices.length === 1 && this.dataSet.points[newSelectedPointIndices[0]].metadata.label != "background") { + /* + neighbors = this.dataSet.findNeighbors( + newSelectedPointIndices[0], + this.inspectorPanel.distFunc, + this.inspectorPanel.numNN + );*/ + if (this.dataSet.points[newSelectedPointIndices[0]].metadata.label != "background") + neighbors[0] = { + index: newSelectedPointIndices[0], + dist: 0 + }; + + } else { + this.metadataCard.updateMetadata(null); + } + } + this.selectionChangedListeners.forEach((l) => + l(this.selectedPointIndices, neighbors) + ); + } + updateMetaDataByIndices(indices: number, src: string) { + console.log(' updateMetaDataByIndices') + if (indices === -1) { + this.metadataCard.updateMetadata(null); + return + } + this.metadataCard.updateMetadata( + this.dataSet.points[indices].metadata, src, this.dataSet.points[indices] + ); + } + + updateMetaByIndices(indices: number) { + if (indices === -1) { + this.metadataCard.updateMetadata(null); + return + } + + // console.log("window.sessionStorage.selectedType ", window.sessionStorage.selectedType ) + if (window.sessionStorage.selectedType == "text") { + + this.dataSet.getSpriteText(indices, (textData: any) => { + let text = textData.texts + + this.metadataCard.updateMetadata( + this.dataSet.points[indices].metadata, null, this.dataSet.points[indices], indices,text=text + ); + }) + } else if (window.sessionStorage.selectedType == "image"){ + + this.dataSet.getSpriteImage(indices, (imgData: any) => { + let src = imgData.imgUrl + this.metadataCard.updateMetadata( + this.dataSet.points[indices].metadata, src, this.dataSet.points[indices], indices, null + ); + }) + } + // } else { + // console.log("unknownType!") + // return + // } + + } + + /** + * Registers a listener to be called any time the mouse hovers over a point. + */ + registerHoverListener(listener: HoverListener) { + this.hoverListeners.push(listener); + } + /** + * Used by clients to indicate that a hover is occurring. + */ + private timer = null + notifyHoverOverPoint(pointIndex: number) { + let highlightedPointIndices; + let predChangeIndices; + let confChangeIndices; + if (getHighlightedPointIndices(this.instanceId) && getHighlightedPointIndices(this.instanceId)[this.iteration] && this.showVisError) { + highlightedPointIndices = getHighlightedPointIndices(this.instanceId)[this.iteration].filter(value => getNowShowIndicates(this.instanceId).includes(value)) + + } + + else if (getPredChangeIndices(this.instanceId) && this.highlightChange) { + predChangeIndices = getPredChangeIndices(this.instanceId).filter(value => getNowShowIndicates(this.instanceId).includes(value)) + } + + else if (getConfChangeIndices(this.instanceId) && this.highlightConfChange) { + confChangeIndices = getConfChangeIndices(this.instanceId).filter(value => getNowShowIndicates(this.instanceId).includes(value)) + } + // console.log(highlightedPointIndices) + // console.log(predChangeIndices) + this.hoverListeners.forEach((l) => l(pointIndex, highlightedPointIndices, predChangeIndices, confChangeIndices)); + + let timeNow = new Date().getTime() + if (this.timer === null || timeNow - this.timer > 10) { + if (getIteration(this.instanceId) && pointIndex !== undefined && pointIndex !== null && getPreviousHover(this.instanceId) !== pointIndex) { + this.timer = timeNow + this.updateMetaByIndices(pointIndex) + updateStateForInstance(this.instanceId, { previousHover: pointIndex }) + // getPreviousHover(this.instanceId) = pointIndex + } + } + } + registerProjectionChangedListener(listener: ProjectionChangedListener) { + this.projectionChangedListeners.push(listener); + } + notifyProjectionChanged(projection: Projection) { + this.projectionChangedListeners.forEach((l) => l(projection)); + } + registerDistanceMetricChangedListener(l: DistanceMetricChangedListener) { + this.distanceMetricChangedListeners.push(l); + } + notifyDistanceMetricChanged(distMetric: DistanceFunction) { + this.distanceMetricChangedListeners.forEach((l) => l(distMetric)); + } + + @observe('dataProto') + _dataProtoChanged(dataProtoString: string) { + let dataProto = dataProtoString + ? (JSON.parse(dataProtoString) as DataProto) + : null; + this.initializeDataProvider(dataProto); + } + private makeDefaultPointsInfoAndStats( + points: DataPoint[] + ): [PointMetadata[], ColumnStats[]] { + let pointsInfo: PointMetadata[] = []; + points.forEach((p) => { + let pointInfo: PointMetadata = {}; + pointInfo[INDEX_METADATA_FIELD] = p.index; + pointsInfo.push(pointInfo); + }); + let stats: ColumnStats[] = [ + { + name: INDEX_METADATA_FIELD, + isNumeric: false, + tooManyUniqueValues: true, + min: 0, + max: pointsInfo.length - 1, + }, + ]; + return [pointsInfo, stats]; + } + private initializeDataProvider(dataProto?: DataProto) { + + if (this.servingMode === 'demo') { + let projectorConfigUrl: string; + // Only in demo mode do we allow the config being passed via URL. + let urlParams = util.getURLParams(initialURLQueryString); + if ('config' in urlParams) { + projectorConfigUrl = urlParams['config']; + } else { + projectorConfigUrl = this.projectorConfigJsonPath; + } + + this.dataProvider = new DemoDataProvider(projectorConfigUrl, this.instanceId); + + } else if (this.servingMode === 'server') { + if (!this.routePrefix) { + throw 'route-prefix is a required parameter'; + } + this.dataProvider = new ServerDataProvider(this.routePrefix, this.instanceId); + } else if (this.servingMode === 'proto' && dataProto != null) { + + this.dataProvider = new ProtoDataProvider(dataProto, this.instanceId); + } else { + // The component is not ready yet - waiting for the dataProto field. + return; + } + this.dataPanel.initialize(this, this.dataProvider, this.instanceId); + + } + private getLegendPointColorer( + colorOption: ColorOption + ): (ds: DataSet, index: number) => string { + if (colorOption == null || colorOption.map == null) { + return null; + } + const colorer = (ds: DataSet, i: number) => { + let value = ds.points[i].metadata[this.selectedColorOption.name]; + if (value == null) { + return POINT_COLOR_MISSING; + } + return ds.points[i].color; + //return colorOption.map(value); + }; + return colorer; + } + private get3DLabelModeButton(): any { + return this.$$('#labels3DMode'); + } + private get3DLabelMode(): boolean { + const label3DModeButton = this.get3DLabelModeButton(); + return (label3DModeButton as any).active; + } + adjustSelectionAndHover(selectedPointIndices: number[], hoverIndex?: number) { + this.notifySelectionChanged(selectedPointIndices); + this.notifyHoverOverPoint(hoverIndex); + this.setMouseMode(MouseMode.CAMERA_AND_CLICK_SELECT); + } + setMouseMode(mouseMode: MouseMode) { + let selectModeButton = this.$$('#selectMode'); + (selectModeButton as any).active = mouseMode === MouseMode.AREA_SELECT; + this.projectorScatterPlotAdapter.scatterPlot.setMouseMode(mouseMode); + } + private setCurrentDataSet(ds: DataSet) { + this.adjustSelectionAndHover([]); + if (this.dataSet != null) { + this.dataSet.stopTSNE(); + } + if (ds != null && this.normalizeData) { + ds.normalize(); + } + this.dim = ds == null ? 0 : ds.dim[1]; + (this.$$('span.numDataPoints') as HTMLSpanElement).innerText = + ds == null ? '0' : '' + ds.dim[0]; + (this.$$('span.dim') as HTMLSpanElement).innerText = + ds == null ? '0' : '' + ds.dim[1]; + this.dataSet = ds; + this.projectionsPanel.dataSetUpdated( + this.dataSet, + this.originalDataSet, + this.dim + ); + this.projectorScatterPlotAdapter.setDataSet(this.dataSet); + this.projectorScatterPlotAdapter.scatterPlot.setCameraParametersForNextCameraCreation( + null, + true + ); + } + private setupUIControls() { + + { + this.projectorScatterPlotAdapter = new ProjectorScatterPlotAdapter( + this.getScatterContainer("left"), + this as ProjectorEventContext, + this.instanceId + ); + + this.projectorScatterPlotAdapter.setLabelPointAccessor( + this.selectedLabelOption + ); + } + + // View controls + this.helpBtn.addEventListener('click', () => { + (this.$.help3dDialog as any).open(); + }) + this.$$('#reset-zoom').addEventListener('click', () => { + this.projectorScatterPlotAdapter.scatterPlot.resetZoom(); + this.projectorScatterPlotAdapter.scatterPlot.startOrbitAnimation(); + }); + let selectModeButton = this.$$('#selectMode'); + selectModeButton.addEventListener('click', (event) => { + this.setMouseMode( + (selectModeButton as any).active + ? MouseMode.AREA_SELECT + : MouseMode.CAMERA_AND_CLICK_SELECT + ); + }); + let nightModeButton = this.$$('#nightDayMode'); + nightModeButton.addEventListener('click', () => { + this.projectorScatterPlotAdapter.scatterPlot.setDayNightMode( + (nightModeButton as any).active + ); + }); + let hiddenBackground = this.$$('#hiddenBackground'); + hiddenBackground.addEventListener('click', () => { + updateStateForInstance(this.instanceId, { hiddenBackground: (hiddenBackground as any).active }) + // getHiddenBackground(this.instanceId) = (hiddenBackground as any).active + for (let i = 0; i < this.dataSet.points.length; i++) { + const point = this.dataSet.points[i]; + if (point.metadata[this.selectedLabelOption]) { + let hoverText = point.metadata[this.selectedLabelOption].toString(); + if (hoverText == 'background') { + if ((hiddenBackground as any).active) { + // getScene(this.instanceId).remove(this.state.backgroundMesh) + point.color = '#ffffff' + } else { + point.color = point.DVI_color[1] + // getScene(this.instanceId).add(this.state.backgroundMesh) + } + } + } + } + + + // if(getScene(this.instanceId).children) + if (getScene(this.instanceId).children[2] && getScene(this.instanceId).children[2].type === 'Mesh') { + for (let i = 2; i < getScene(this.instanceId).children.length; i++) { + + const newScene = getScene(this.instanceId) ; + newScene.children[i].visible = !getHiddenBackground(this.instanceId) + + updateStateForInstance(this.instanceId, { scene: newScene }); + } + + } + + + + this.projectorScatterPlotAdapter.scatterPlot.render() + // this.projectorScatterPlotAdapter.scatterPlot.hiddenBackground( + // (hiddenBackground as any).active, + // ); + }) + + let editModeButton = this.$$('#editMode'); + editModeButton.addEventListener('click', (event) => { + this.editMode = (editModeButton as any).active; + }); + const labels3DModeButton = this.get3DLabelModeButton(); + labels3DModeButton.addEventListener('click', () => { + this.projectorScatterPlotAdapter.set3DLabelMode(this.get3DLabelMode()); + }); + // + let triangleModeBtn = this.$$("#triangleMode"); + triangleModeBtn.addEventListener('click', () => { + this.projectorScatterPlotAdapter.setTriangleMode((triangleModeBtn as any).active) + }) + + window.addEventListener('resize', () => { + this.projectorScatterPlotAdapter.resize(); + }); + + this.projectorScatterPlotAdapter.scatterPlot.onCameraMove( + (cameraPosition: Vector3, cameraTarget: Vector3) => + this.bookmarkPanel.clearStateSelection() + ); + this.registerHoverListener((hoverIndex: number) => { + this.onHover(hoverIndex) + } + + ); + this.registerProjectionChangedListener((projection: Projection) => + this.onProjectionChanged(projection) + ); + this.registerSelectionChangedListener( + ( + selectedPointIndices: number[], + neighborsOfFirstPoint: knn.NearestEntry[] + ) => this.onSelectionChanged(selectedPointIndices, neighborsOfFirstPoint) + ); + + if (!this.isContraVis) { + this.showConfChangeButton.addEventListener('click', () => { + + if (this.confChangeInput < 0 || this.confChangeInput > 1) { + logging.setErrorMessage("Invaild Input!", null); + this.showConfChangeButton.disabled = false; + return; + } + else if (!(this.showUnlabeled || this.showTesting || this.showlabeled) || this.showVisError || this.highlightChange) { + this.showConfChangeButton.disabled = false; // Uncheck 'showVisError' + // Display your dialog warning + (this.$.showConfChangeWarning as any).open(); + return; + } + + this.showConfChange(this.confChangeInput) + }); + } + + + } + private onHover(hoverIndex: number) { + this.hoverPointIndex = hoverIndex; + + let hoverText = null; + if (hoverIndex != null) { + const point = this.dataSet.points[hoverIndex]; + if (point.metadata[this.selectedLabelOption]) { + hoverText = point.metadata[this.selectedLabelOption].toString(); + + } + } + if (this.selectedPointIndices.length === 0) { + this.statusBar.style.display = hoverText ? null : 'none'; + this.statusBar.innerText = hoverText; + } + } + private getScatterContainer(pos: string): HTMLDivElement { + if (pos == "left") { + return this.$$('#scatter1') as HTMLDivElement; + } else if (pos == "right") { + return this.$$('#scatter2') as HTMLDivElement; + } else { + logging.setErrorMessage('wrong pos!'); + } + } + private onSelectionChanged( + selectedPointIndices: number[], + neighborsOfFirstPoint: knn.NearestEntry[] + ) { + this.selectedPointIndices = selectedPointIndices; + this.neighborsOfFirstPoint = neighborsOfFirstPoint; + this.dataPanel.onProjectorSelectionChanged( + selectedPointIndices, + neighborsOfFirstPoint + ); + let totalNumPoints = + this.selectedPointIndices.length + neighborsOfFirstPoint.length; + this.statusBar.innerText = `Selected ${totalNumPoints} points`; + this.statusBar.style.display = totalNumPoints > 0 ? null : 'none'; + } + onProjectionChanged(projection?: Projection) { + this.dataPanel.projectionChanged(projection); + this.updateBackgroundImg() + this.inspectorPanel.clearQueryResList(); + this.notifySelectionChanged([]); + this.projectorScatterPlotAdapter.render(); + } + setProjection(projection: Projection) { + this.projection = projection; + if (projection != null) { + this.analyticsLogger.logProjectionChanged(projection.projectionType); + } + this.notifyProjectionChanged(projection); + } + // notifyProjectionPositionsUpdated(newSelection?: any[]) { + // this.projectorScatterPlotAdapter.notifyProjectionPositionsUpdated(newSelection); + // } + notifyProjectionPositionsUpdated() { + this.projectorScatterPlotAdapter.notifyProjectionPositionsUpdated(); + this.metadataCard.updateCustomList(this.dataSet.points, this as ProjectorEventContext) + this.metadataCard.updateRejectList(this.dataSet.points, this as ProjectorEventContext) + } + + hiddenOrShowScatter(type: string) { + let dom1 = this.$$('#scatter1') as HTMLElement + let dom2 = this.$$('#scatter2') as HTMLElement + if (type === '') { + this._showNotAvaliable = false + } else { + this._showNotAvaliable = true + } + } + refreshnoisyBtn() { + this.inspectorPanel.refreshBtnStyle() + } + /** + * Gets the current view of the embedding and saves it as a State object. + */ + getCurrentState(): State { + const state = new State(); + // Save the individual datapoint projections. + state.projections = []; + for (let i = 0; i < this.dataSet.points.length; i++) { + const point = this.dataSet.points[i]; + const projections: { + [key: string]: number; + } = {}; + const keys = Object.keys(point.projections); + for (let j = 0; j < keys.length; ++j) { + projections[keys[j]] = point.projections[keys[j]]; + } + state.projections.push(projections); + } + state.selectedProjection = this.projection.projectionType; + state.dataSetDimensions = this.dataSet.dim; + state.tSNEIteration = this.dataSet.tSNEIteration; + state.selectedPoints = this.selectedPointIndices; + state.filteredPoints = this.dataSetFilterIndices; + this.projectorScatterPlotAdapter.populateBookmarkFromUI(state); + state.selectedColorOptionName = this.dataPanel.selectedColorOptionName; + state.forceCategoricalColoring = this.dataPanel.forceCategoricalColoring; + state.selectedLabelOption = this.selectedLabelOption; + this.projectionsPanel.populateBookmarkFromUI(state); + return state; + } + /** Loads a State object into the world. */ + loadState(state: State) { + this.setProjection(null); + { + this.projectionsPanel.disablePolymerChangesTriggerReprojection(); + if (this.dataSetBeforeFilter != null) { + this.resetFilterDataset(); + } + if (state.filteredPoints != null) { + this.filterDataset(state.filteredPoints); + } + this.projectionsPanel.enablePolymerChangesTriggerReprojection(); + } + for (let i = 0; i < state.projections.length; i++) { + const point = this.dataSet.points[i]; + const projection = state.projections[i]; + const keys = Object.keys(projection); + for (let j = 0; j < keys.length; ++j) { + point.projections[keys[j]] = projection[keys[j]]; + } + } + this.dataSet.hasTSNERun = state.selectedProjection === 'tsne'; + this.dataSet.tSNEIteration = state.tSNEIteration; + this.projectionsPanel.restoreUIFromBookmark(state); + this.inspectorPanel.restoreUIFromBookmark(state); + this.dataPanel.selectedColorOptionName = state.selectedColorOptionName; + this.dataPanel.setForceCategoricalColoring( + !!state.forceCategoricalColoring + ); + this.selectedLabelOption = state.selectedLabelOption; + this.projectorScatterPlotAdapter.restoreUIFromBookmark(state); + { + const dimensions = stateGetAccessorDimensions(state); + const components = getProjectionComponents( + state.selectedProjection, + dimensions + ); + const projection = new Projection( + state.selectedProjection, + components, + dimensions.length, + this.dataSet + ); + this.setProjection(projection); + } + this.notifySelectionChanged(state.selectedPoints); + } + + retrainBySelections(iteration: number, newSel: number[]) { + this.projectionsPanel.retrainBySelections(iteration, newSel) + } + + + /** + * query for indices in inspector panel + */ + query(query: string, inRegexMode: boolean, fieldName: string, currPredicates: { [key: string]: any }, iteration: number, confidenceThresholdFrom: any, confidenceThresholdTo: any, + callback: (indices: any) => void) { + + let confidenceThreshold = [] + var dummyCurrPredicates: { [key: string]: any } = {}; + Object.keys(currPredicates).forEach((key) => { + dummyCurrPredicates[key] = currPredicates[key] + }); + + dummyCurrPredicates[fieldName] = query; + if (confidenceThresholdFrom || confidenceThresholdTo) { + dummyCurrPredicates['confidence'] = [Number(confidenceThresholdFrom), Number(confidenceThresholdTo)] + } + const msgId = logging.setModalMessage('Querying...'); + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + fetch(`http://${this.DVIServer}/query`, { + method: 'POST', + body: JSON.stringify({ + "predicates": dummyCurrPredicates, "content_path": window.sessionStorage.content_path || this.dataSet.DVIsubjectModelPath, + "iteration": iteration, "username": window.sessionStorage.username, + "vis_method": window.sessionStorage.vis_method, 'setting': window.sessionStorage.selectedSetting + }), + headers: headers, + mode: 'cors' + }).then(response => response.json()).then(data => { + const indices = data.selectedPoints; + updateStateForInstance(this.instanceId, { alSuggestLabelList: [] }) + // this.state.alSuggestLabelList = [] + logging.setModalMessage(null, msgId); + callback(indices); + }).catch(error => { + logging.setErrorMessage('querying for indices'); + callback(null); + }); + } + + + getAllResPosList(callback: (data: any) => void) { + if (getAllResPositions(this.instanceId) && getAllResPositions(this.instanceId).results && getAllResPositions(this.instanceId).bgimgList) { + callback(getAllResPositions(this.instanceId)) + return + } + const msgId = logging.setModalMessage('Querying...'); + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + fetch(`http://${this.DVIServer}/all_result_list`, { + method: 'POST', + body: JSON.stringify({ + "iteration_start": 1, + "iteration_end": 2, + "content_path": this.dataSet.DVIsubjectModelPath, + "username": window.sessionStorage.username + }), + headers: headers, + mode: 'cors' + }).then(response => response.json()).then(data => { + const indices = data.selectedPoints; + logging.setModalMessage(null, msgId); + callback(data) + }).catch(error => { + logging.setErrorMessage('querying for indices'); + + }); + } + + /** + * query for predicates + */ + simpleQuery(predicates: { [key: string]: any }, iteration: number) { + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + fetch(`http://${this.DVIServer}/query`, { + method: 'POST', + body: JSON.stringify({ + "predicates": predicates, "content_path": window.sessionStorage.content_path || this.dataSet.DVIsubjectModelPath, + "iteration": iteration, "username": window.sessionStorage.username, "vis_method": window.sessionStorage.vis_method, 'setting': window.sessionStorage.selectedSetting + }), + headers: headers, + mode: 'cors' + }).then(response => response.json()).then(data => { + const indices = data.selectedPoints; + this.inspectorPanel.filteredPoints = indices; + updateStateForInstance(this.instanceId, { alSuggestLabelList: [] }) + // this.state.alSuggestLabelList = [] + }).catch(error => { + logging.setErrorMessage('querying for indices'); + }); + } + // active learning + queryByAL(iteration: number, strategy: string, budget: number, acceptIndicates: number[], rejectIndicates: number[], isRecommend: boolean, + callback: (indices: any, scores: any, labels: any) => void) { + const msgId = logging.setModalMessage('Querying...'); + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + + + let accIndicates = [] + if (getAcceptIndicates(this.instanceId)) { + accIndicates = getAcceptIndicates(this.instanceId).filter((item, i, arr) => { + //函数自身返回的是一个布尔值,只当返回值为true时,当前元素才会存入新的数组中。 + return getProperties(this.instanceId)[getIteration(this.instanceId)][item] === 1 + }) + } + let rejIndicates = [] + if (getRejectIndicates(this.instanceId)) { + rejIndicates = getRejectIndicates(this.instanceId).filter((item, i, arr) => { + //函数自身返回的是一个布尔值,只当返回值为true时,当前元素才会存入新的数组中。 + return getProperties(this.instanceId)[getIteration(this.instanceId)][item] === 1 + }) + } + + fetch(`http://${this.DVIServer}/al_query`, { + method: 'POST', + body: JSON.stringify({ + "iteration": iteration, + "strategy": strategy, + "budget": budget, + "content_path": window.sessionStorage.content_path || this.dataSet.DVIsubjectModelPath, + "accIndices": accIndicates, + "rejIndices": rejIndicates, + "isRecommend": isRecommend, + "username": window.sessionStorage.username, + "vis_method": window.sessionStorage.vis_method, + 'setting': window.sessionStorage.selectedSetting + }), + headers: headers, + mode: 'cors' + }).then(response => response.json()).then(data => { + const indices = data.selectedPoints; + const labels = data.suggestLabels; + const scores = data.scores + logging.setModalMessage(null, msgId); + + + callback(indices, scores, labels); + }).catch(error => { + logging.setErrorMessage('querying for indices'); + callback(null, [], []); + }); + } + // anormaly detection + queryAnormalyStrategy(budget: number, cls: number, currentIndices: number[], comfirm_info: any[], accIndicates: number[], rejIndicates: number[], strategy: string, isRecommend: boolean, + callback: (indices: any, cleanIndices?: any) => void) { + const msgId = logging.setModalMessage('Querying...'); + let headers = new Headers(); + if (!accIndicates) { + accIndicates = [] + } + if (!rejIndicates) { + rejIndicates = [] + } + let accIn = [] + + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + fetch(`http://${this.DVIServer}/anomaly_query`, { + method: 'POST', + body: JSON.stringify({ + "budget": budget, + "cls": cls, + "indices": currentIndices, + "content_path": window.sessionStorage.content_path || this.dataSet.DVIsubjectModelPath, + "comfirm_info": comfirm_info, + "accIndices": accIndicates, + "rejIndices": rejIndicates, + "strategy": strategy, + "username": window.sessionStorage.username, + "isRecommend": isRecommend, + "vis_method": window.sessionStorage.vis_method, + 'setting': window.sessionStorage.selectedSetting + }), + headers: headers, + mode: 'cors' + }).then(response => response.json()).then(data => { + const indices = data.selectedPoints; + const labels = data.suggestLabels; + const scores = data.scores + const cleanIndices = data.cleanList + updateStateForInstance(this.instanceId, { alSuggestScoreList: data.scores }) + updateStateForInstance(this.instanceId, { alSuggestLabelList: data.suggestLabels }) + // this.state.alSuggestScoreList = data.scores + // this.state.alSuggestLabelList = data.suggestLabels; + logging.setModalMessage(null, msgId); + callback(indices, cleanIndices); + }).catch(error => { + logging.setErrorMessage('querying for indices'); + callback(null); + }); + } + + querySuggestion(iteration: number, indices: number[], k: number, + callback: (indices: any) => void) { + const msgId = logging.setModalMessage('Querying...'); + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + fetch(`http://${this.DVIServer}/al_suggest_similar`, { + method: 'POST', + body: JSON.stringify({ + "iteration": iteration, + "selectIndices": indices, + "k": k, + "content_path": window.sessionStorage.content_path || this.dataSet.DVIsubjectModelPath, + "vis_method": window.sessionStorage.vis_method, + 'setting': window.sessionStorage.selectedSetting + }), + headers: headers, + mode: 'cors' + }).then(response => response.json()).then(data => { + const indices = data.similarIndices; + logging.setModalMessage(null, msgId); + callback(indices); + }).catch(error => { + // logging.setErrorMessage('querying for indices'); + callback(null); + }); + } + + + saveDVISelection(indices: number[], callback: (msg: string) => void) { + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + fetch(`http://${this.DVIServer}/saveDVIselections`, { + method: 'POST', + body: JSON.stringify({ + "newIndices": indices, + "content_path": window.sessionStorage.content_path || this.dataSet.DVIsubjectModelPath, + "iteration": this.iteration, + "vis_method": window.sessionStorage.vis_method, + 'setting': window.sessionStorage.selectedSetting + }), + headers: headers, + mode: 'cors' + }).then(response => response.json()).then(data => { + const msg = data.message; + callback(msg); + }).catch(error => { + logging.setErrorMessage('saving indices'); + }); + } + + + + // queryCurrentFocus(iteration: number, focusIndices: number[], + // callback: (indices: any) => void) { + // const msgId = logging.setModalMessage('Querying...'); + // let headers = new Headers(); + // headers.append('Content-Type', 'application/json'); + // headers.append('Accept', 'application/json'); + // await fetch(`http://${this.DVIServer}/get_focus`, { + // method: 'POST', + // body: JSON.stringify({ + // "iteration": iteration, + // "content_path": window.sessionStorage.content_path, + // "vis_method": window.sessionStorage.vis_method, + // 'setting':window.sessionStorage.selectedSetting + // }), + // headers: headers, + // mode: 'cors' + // }).then(response => response.json()).then(data => { + + // // update projection to use new embeddings + // this.data.projectDVI() + // logging.setModalMessage(null, msgId); + // callback(indices); + // }).catch(error => { + // // logging.setErrorMessage('querying for indices'); + // callback(null); + // }); + // } + highlightCriticalChange() { + if (!getPredChangeIndices(this.instanceId)) { + updateStateForInstance(this.instanceId, { predChangeIndices: [] }) + // getPredChangeIndices(this.instanceId) = []; + } + const requestOptions = { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + "path": window.sessionStorage.content_path, + "iteration": this.iteration, + "last_iteration": getLastIteration(this.instanceId), + "username": window.sessionStorage.username, + "vis_method": window.sessionStorage.vis_method, + 'setting': window.sessionStorage.selectedSetting, + "content_path": window.sessionStorage.content_path + }), + }; + + fetch(`http://${this.DVIServer}/highlightCriticalChange`, requestOptions) + .then(response => { + if (!response.ok) { + throw new Error(`Server responded with status: ${response.status}`); + } + return response.json(); + }) + .then(data => { + updateStateForInstance(this.instanceId, { predChangeIndices: data.predChangeIndices }) + // getPredChangeIndices(this.instanceId) = data.predChangeIndices; + }) + .catch(error => { + console.error('Error during highlightCriticalChange fetch:', error); + logging.setErrorMessage('An error occurred while highlighting critical changes.'); + }); + } + + + + + + showConfChange(confChangeInput: number) { + // const msgId = logging.setModalMessage('loading...'); + this.showConfChangeButton.disabled = true; + + if (!getConfChangeIndices(this.instanceId)) { + updateStateForInstance(this.instanceId, { confChangeIndices: [] }) + // getConfChangeIndices(this.instanceId) = []; + } + const requestOptions = { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + "path": window.sessionStorage.content_path, + "iteration": this.iteration, + "last_iteration": getLastIteration(this.instanceId), + "username": window.sessionStorage.username, + "vis_method": window.sessionStorage.vis_method, + 'setting': window.sessionStorage.selectedSetting, + "content_path": window.sessionStorage.content_path, + "confChangeInput": confChangeInput + }), + }; + + fetch(`http://${this.DVIServer}/highlightConfChange`, requestOptions) + .then(response => { + if (!response.ok) { + throw new Error(`Server responded with status: ${response.status}`); + } + return response.json(); + }) + .then(data => { + updateStateForInstance(this.instanceId, { confChangeIndices: data.confChangeIndices }) + // getConfChangeIndices(this.instanceId) = data.confChangeIndices; + this.highlightConfChange = true; + + }) + .catch(error => { + console.error('Error during highlightCriticalChange fetch:', error); + logging.setErrorMessage('An error occurred while highlighting conf changes.'); + }); + + let confChangeIndices; + + confChangeIndices = getConfChangeIndices(this.instanceId) + confChangeIndices = confChangeIndices.filter(value => getNowShowIndicates(this.instanceId).includes(value)) + this.filterDataset(getNowShowIndicates(this.instanceId), false, undefined, undefined, confChangeIndices = confChangeIndices) + this.showConfChangeButton.disabled = false; + } + + } \ No newline at end of file diff --git a/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/webpack_config.js b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/webpack_config.js new file mode 100644 index 0000000000000000000000000000000000000000..65ab2bc53e212ddcfe72134e1f39b0db6f56b291 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/plugins/projector/vz_projector/webpack_config.js @@ -0,0 +1,28 @@ +const path = require('path'); +const TerserPlugin = require('terser-webpack-plugin'); +console.log(11111111111111111111111111111111111111111) +module.exports = { + mode: 'production', + entry: 'bundle.ts', + output: { + filename: 'bundle_min.js', + path: path.resolve(__dirname, 'test'), + }, + module: { + rules: [ + { + test: /\.ts$/, + use: 'ts-loader', + exclude: /node_modules/, + }, + ], + }, + resolve: { + extensions: ['.ts', '.js'], + }, + optimization: { + minimize: true, + minimizer: [new TerserPlugin()], + }, + +}; diff --git a/saved_models/tensorboard/tensorboard/scripts/BUILD b/saved_models/tensorboard/tensorboard/scripts/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..e0877697ed345a69bb59dc1fca169be4c94dfd32 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/scripts/BUILD @@ -0,0 +1,24 @@ +# Description: +# Some useful scripts that are bundled with TensorBoard. + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +py_binary( + name = "generate_testdata", + srcs = ["generate_testdata.py"], + srcs_version = "PY2AND3", + deps = [ + "//tensorboard:expect_numpy_installed", + "//tensorboard:expect_tensorflow_installed", + "@org_pythonhosted_six", + ], +) + +py_binary( + name = "execrooter", + srcs = ["execrooter.py"], + srcs_version = "PY2AND3", + visibility = ["//visibility:public"], +) diff --git a/saved_models/tensorboard/tensorboard/scripts/__init__.py b/saved_models/tensorboard/tensorboard/scripts/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..85c94f4b6bd7567796755895505a320405a40777 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/scripts/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2017 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== diff --git a/saved_models/tensorboard/tensorboard/scripts/execrooter.py b/saved_models/tensorboard/tensorboard/scripts/execrooter.py new file mode 100644 index 0000000000000000000000000000000000000000..526e560156c0875ed870cb13e2949b6cce2a971d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/scripts/execrooter.py @@ -0,0 +1,96 @@ +# Copyright 2017 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Utility for running programs in a symlinked execroot.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import json +import os +import shutil +import subprocess +import sys +import tempfile + + +def run(inputs, program, outputs): + """Creates temp symlink tree, runs program, and copies back outputs. + + Args: + inputs: List of fake paths to real paths, which are used for symlink tree. + program: List containing real path of program and its arguments. The + execroot directory will be appended as the last argument. + outputs: List of fake outputted paths to copy back to real paths. + Returns: + 0 if succeeded or nonzero if failed. + """ + root = tempfile.mkdtemp() + try: + cwd = os.getcwd() + for fake, real in inputs: + parent = os.path.join(root, os.path.dirname(fake)) + if not os.path.exists(parent): + os.makedirs(parent) + # Use symlink if possible and not on Windows, since on Windows 10 + # symlinks exist but they require administrator privileges to use. + if hasattr(os, "symlink") and not os.name == "nt": + os.symlink(os.path.join(cwd, real), os.path.join(root, fake)) + else: + shutil.copyfile( + os.path.join(cwd, real), os.path.join(root, fake) + ) + if subprocess.call(program + [root]) != 0: + return 1 + for fake, real in outputs: + shutil.copyfile(os.path.join(root, fake), real) + return 0 + finally: + try: + shutil.rmtree(root) + except EnvironmentError: + # Ignore "file in use" errors on Windows; ok since it's just a tmpdir. + pass + + +def main(args): + """Invokes run function using a JSON file config. + + Args: + args: CLI args, which can be a JSON file containing an object whose + attributes are the parameters to the run function. If multiple JSON + files are passed, their contents are concatenated. + Returns: + 0 if succeeded or nonzero if failed. + Raises: + Exception: If input data is missing. + """ + if not args: + raise Exception("Please specify at least one JSON config path") + inputs = [] + program = [] + outputs = [] + for arg in args: + with open(arg) as fd: + config = json.load(fd) + inputs.extend(config.get("inputs", [])) + program.extend(config.get("program", [])) + outputs.extend(config.get("outputs", [])) + if not program: + raise Exception("Please specify a program") + return run(inputs, program, outputs) + + +if __name__ == "__main__": + sys.exit(main(sys.argv[1:])) diff --git a/saved_models/tensorboard/tensorboard/scripts/generate_testdata.py b/saved_models/tensorboard/tensorboard/scripts/generate_testdata.py new file mode 100644 index 0000000000000000000000000000000000000000..d6f5d3f592b0de658b58a9994807ecd98c1d6e3a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/scripts/generate_testdata.py @@ -0,0 +1,243 @@ +# Copyright 2015 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +"""Generate some standard test data for debugging TensorBoard.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import bisect +import math +import os +import os.path +import random +import shutil + +from absl import app +from absl import flags +import numpy as np +from six.moves import xrange # pylint: disable=redefined-builtin +import tensorflow as tf + + +flags.DEFINE_string( + "target", None, """The directory where serialized data will be written""", +) + +flags.DEFINE_boolean( + "overwrite", + False, + """Whether to remove and overwrite TARGET if it already exists.""", +) + +FLAGS = flags.FLAGS + +# Hardcode a start time and reseed so script always generates the same data. +_start_time = 0 +random.seed(0) + + +def _MakeHistogramBuckets(): + v = 1e-12 + buckets = [] + neg_buckets = [] + while v < 1e20: + buckets.append(v) + neg_buckets.append(-v) + v *= 1.1 + # Should include DBL_MAX, but won't bother for test data. + return neg_buckets[::-1] + [0] + buckets + + +def _MakeHistogram(values): + """Convert values into a histogram proto using logic from histogram.cc.""" + limits = _MakeHistogramBuckets() + counts = [0] * len(limits) + for v in values: + idx = bisect.bisect_left(limits, v) + counts[idx] += 1 + + limit_counts = [ + (limits[i], counts[i]) for i in xrange(len(limits)) if counts[i] + ] + bucket_limit = [lc[0] for lc in limit_counts] + bucket = [lc[1] for lc in limit_counts] + sum_sq = sum(v * v for v in values) + return tf.compat.v1.HistogramProto( + min=min(values), + max=max(values), + num=len(values), + sum=sum(values), + sum_squares=sum_sq, + bucket_limit=bucket_limit, + bucket=bucket, + ) + + +def WriteScalarSeries(writer, tag, f, n=5): + """Write a series of scalar events to writer, using f to create values.""" + step = 0 + wall_time = _start_time + for i in xrange(n): + v = f(i) + value = tf.Summary.Value(tag=tag, simple_value=v) + summary = tf.Summary(value=[value]) + event = tf.Event(wall_time=wall_time, step=step, summary=summary) + writer.add_event(event) + step += 1 + wall_time += 10 + + +def WriteHistogramSeries(writer, tag, mu_sigma_tuples, n=20): + """Write a sequence of normally distributed histograms to writer.""" + step = 0 + wall_time = _start_time + for [mean, stddev] in mu_sigma_tuples: + data = [random.normalvariate(mean, stddev) for _ in xrange(n)] + histo = _MakeHistogram(data) + summary = tf.Summary(value=[tf.Summary.Value(tag=tag, histo=histo)]) + event = tf.Event(wall_time=wall_time, step=step, summary=summary) + writer.add_event(event) + step += 10 + wall_time += 100 + + +def WriteImageSeries(writer, tag, n_images=1): + """Write a few dummy images to writer.""" + step = 0 + session = tf.compat.v1.Session() + p = tf.compat.v1.placeholder("uint8", (1, 4, 4, 3)) + s = tf.compat.v1.summary.image(tag, p) + for _ in xrange(n_images): + im = np.random.random_integers(0, 255, (1, 4, 4, 3)) + summ = session.run(s, feed_dict={p: im}) + writer.add_summary(summ, step) + step += 20 + session.close() + + +def WriteAudioSeries(writer, tag, n_audio=1): + """Write a few dummy audio clips to writer.""" + step = 0 + session = tf.compat.v1.Session() + + min_frequency_hz = 440 + max_frequency_hz = 880 + sample_rate = 4000 + duration_frames = sample_rate // 2 # 0.5 seconds. + frequencies_per_run = 1 + num_channels = 2 + + p = tf.compat.v1.placeholder( + "float32", (frequencies_per_run, duration_frames, num_channels) + ) + s = tf.compat.v1.summary.audio(tag, p, sample_rate) + + for _ in xrange(n_audio): + # Generate a different frequency for each channel to show stereo works. + frequencies = np.random.random_integers( + min_frequency_hz, + max_frequency_hz, + size=(frequencies_per_run, num_channels), + ) + tiled_frequencies = np.tile(frequencies, (1, duration_frames)) + tiled_increments = np.tile( + np.arange(0, duration_frames), (num_channels, 1) + ).T.reshape(1, duration_frames * num_channels) + tones = np.sin( + 2.0 * np.pi * tiled_frequencies * tiled_increments / sample_rate + ) + tones = tones.reshape( + frequencies_per_run, duration_frames, num_channels + ) + + summ = session.run(s, feed_dict={p: tones}) + writer.add_summary(summ, step) + step += 20 + session.close() + + +def GenerateTestData(path): + """Generates the test data directory.""" + run1_path = os.path.join(path, "run1") + os.makedirs(run1_path) + writer1 = tf.summary.FileWriter(run1_path) + WriteScalarSeries(writer1, "foo/square", lambda x: x * x) + WriteScalarSeries(writer1, "bar/square", lambda x: x * x) + WriteScalarSeries(writer1, "foo/sin", math.sin) + WriteScalarSeries(writer1, "foo/cos", math.cos) + WriteHistogramSeries( + writer1, "histo1", [[0, 1], [0.3, 1], [0.5, 1], [0.7, 1], [1, 1]] + ) + WriteImageSeries(writer1, "im1") + WriteImageSeries(writer1, "im2") + WriteAudioSeries(writer1, "au1") + + run2_path = os.path.join(path, "run2") + os.makedirs(run2_path) + writer2 = tf.summary.FileWriter(run2_path) + WriteScalarSeries(writer2, "foo/square", lambda x: x * x * 2) + WriteScalarSeries(writer2, "bar/square", lambda x: x * x * 3) + WriteScalarSeries(writer2, "foo/cos", lambda x: math.cos(x) * 2) + WriteHistogramSeries( + writer2, "histo1", [[0, 2], [0.3, 2], [0.5, 2], [0.7, 2], [1, 2]] + ) + WriteHistogramSeries( + writer2, "histo2", [[0, 1], [0.3, 1], [0.5, 1], [0.7, 1], [1, 1]] + ) + WriteImageSeries(writer2, "im1") + WriteAudioSeries(writer2, "au2") + + graph_def = tf.compat.v1.GraphDef() + node1 = graph_def.node.add() + node1.name = "a" + node1.op = "matmul" + node2 = graph_def.node.add() + node2.name = "b" + node2.op = "matmul" + node2.input.extend(["a:0"]) + + writer1.add_graph(graph_def) + node3 = graph_def.node.add() + node3.name = "c" + node3.op = "matmul" + node3.input.extend(["a:0", "b:0"]) + writer2.add_graph(graph_def) + writer1.close() + writer2.close() + + +def main(unused_argv=None): + target = FLAGS.target + if not target: + print("The --target flag is required.") + return -1 + if os.path.exists(target): + if FLAGS.overwrite: + if os.path.isdir(target): + shutil.rmtree(target) + else: + os.remove(target) + else: + print( + "Refusing to overwrite target %s without --overwrite" % target + ) + return -2 + GenerateTestData(target) + return 0 + + +if __name__ == "__main__": + app.run(main) diff --git a/saved_models/tensorboard/tensorboard/webapp/BUILD b/saved_models/tensorboard/tensorboard/webapp/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..56751a044e75fd9e2146d5bd0ffd7902edef23fd --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/BUILD @@ -0,0 +1,350 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_js_binary", "tf_ng_web_test_suite", "tf_sass_binary", "tf_sass_library", "tf_svg_bundle") +load("//tensorboard/defs:web.bzl", "tf_web_library") +load("//tensorboard/defs:vulcanize.bzl", "tensorboard_html_binary") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "oss_plugins_module", + srcs = [ + "oss_plugins_module.ts", + ], + deps = [ + "//tensorboard/plugins/debugger_v2/tf_debugger_v2_plugin:debugger_v2", + "//tensorboard/webapp/metrics", + "//tensorboard/webapp/plugins/npmi", + "//tensorboard/webapp/plugins/text_v2", + "@npm//@angular/core", + ], +) + +ng_module( + name = "reducer_config", + srcs = [ + "reducer_config.ts", + ], + deps = [ + "@npm//@angular/core", + "@npm//@ngrx/store", + ], +) + +ng_module( + name = "selectors", + srcs = [ + "selectors.ts", + ], + deps = [ + "//tensorboard/webapp/alert/store", + "//tensorboard/webapp/app_routing/store", + "//tensorboard/webapp/experiments/store:selectors", + "//tensorboard/webapp/metrics/store", + "//tensorboard/webapp/runs/store:selectors", + "//tensorboard/webapp/util:ui_selectors", + ], +) + +ng_module( + name = "mat_icon", + srcs = [ + "mat_icon_module.ts", + ], + deps = [ + "//tensorboard/webapp/angular:expect_angular_material_icon", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + ], +) + +# Angular module for the top-level app component together with all of its +# injectable dependencies. I.e., the entire Angular app. +ng_module( + name = "app", + srcs = [ + "app_container.ts", + "app_module.ts", + ], + assets = [ + "app_container.css", + "app_container.ng.html", + ], + deps = [ + ":mat_icon", + ":oss_plugins_module", + ":reducer_config", + "//tensorboard/webapp/alert", + "//tensorboard/webapp/alert/views:alert_snackbar", + "//tensorboard/webapp/angular:expect_angular_platform_browser_animations", + "//tensorboard/webapp/app_routing", + "//tensorboard/webapp/app_routing:route_registry", + "//tensorboard/webapp/app_routing/views", + "//tensorboard/webapp/core", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/core/views:hash_storage", + "//tensorboard/webapp/core/views:page_title", + "//tensorboard/webapp/experiments", + "//tensorboard/webapp/feature_flag", + "//tensorboard/webapp/header", + "//tensorboard/webapp/plugins", + "//tensorboard/webapp/reloader", + "//tensorboard/webapp/routes", + "//tensorboard/webapp/runs", + "//tensorboard/webapp/runs_legacy", + "//tensorboard/webapp/settings", + "//tensorboard/webapp/tb_wrapper", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + ], +) + +ng_module( + name = "app_state", + srcs = [ + "app_state.ts", + ], + deps = [ + "//tensorboard/webapp/app_routing/store:types", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/experiments/store:types", + "//tensorboard/webapp/feature_flag/store:types", + "//tensorboard/webapp/metrics/store:types", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/text_v2/store:types", + "//tensorboard/webapp/runs/store:types", + ], +) + +# TODO(stephanwlee): at the moment, there is no development build. Reinstate it. +# Wrapper that prepares Angular app for deployment, dealing with browser +# compatibility, Vulcanization, and configuration (e.g. prod vs. dev). +ng_module( + name = "ng_main", + srcs = [ + "bootstrap.ts", + "main_prod.ts", + ], + deps = [ + ":app", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@angular/router", + "@npm//zone.js", + ], +) + +# Compile the prepared Angular app to a JS binary. +tf_js_binary( + name = "tb_webapp_binary", + compile = 1, + entry_point = "main_prod.ts", + deps = [ + ":ng_main", + "//tensorboard/webapp/angular:expect_angular_material_tabs", + "//tensorboard/webapp/angular:expect_angular_material_toolbar", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@angular/material", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//rxjs", + "@npm//zone.js", + ], +) + +# Wrap the Angular app JS binary as a library. +tf_web_library( + name = "tb_webapp", + srcs = [ + ":tb_webapp_binary.js", + ], + path = "/tb-webapp", + deps = [ + ":tb_webapp_binary", + ], +) + +genrule( + name = "gen_index_polymer3.html", + srcs = ["index_polymer3.uninlined.html"], + outs = ["index_polymer3.inlined.html"], + cmd = "$(execpath //tensorboard/logo:inline_favicon) $< >$@", + tools = ["//tensorboard/logo:inline_favicon"], +) + +# Bundle the Angular app with the Polymer components and plugins, as a library. +tf_web_library( + name = "tensorboard-webapp", + srcs = [ + "index_polymer3.inlined.html", + ":styles.css", + "//tensorboard/components:polymer3_lib_binary.js", + ], + path = "/", + deps = [ + ":tb_webapp", + "//tensorboard/components/tf_imports:roboto", + "//tensorboard/plugins/debugger_v2/tf_debugger_v2_plugin/views/source_code/monaco:requirejs", + ], +) + +# A Vulcanized html binary for the complete app (both Angular and Polymer parts) +tensorboard_html_binary( + name = "index", + input_path = "/index_polymer3.inlined.html", + js_path = "/index.js", + output_path = "/index.html", + deps = [":tensorboard-webapp"], +) + +# Karma has overhead of bootstrap/tearDown. Combine as much testcases +# as possible into one test target and use test sharding to speed up. +tf_ng_web_test_suite( + name = "karma_test", + deps = [ + "//tensorboard/webapp/alert:test_lib", + "//tensorboard/webapp/alert/store:test_lib", + "//tensorboard/webapp/alert/views:views_test", + "//tensorboard/webapp/app_routing:app_routing_test", + "//tensorboard/webapp/app_routing:route_config_test", + "//tensorboard/webapp/app_routing:testing", + "//tensorboard/webapp/app_routing/effects:effects_tests", + "//tensorboard/webapp/app_routing/store:store_test_lib", + "//tensorboard/webapp/app_routing/store:testing", + "//tensorboard/webapp/app_routing/views:views_tests", + "//tensorboard/webapp/core/effects:core_effects_test_lib", + "//tensorboard/webapp/core/store:core_store_test_lib", + "//tensorboard/webapp/core/views:test_lib", + "//tensorboard/webapp/deeplink:deeplink_test_lib", + "//tensorboard/webapp/feature_flag/effects:effects_test_lib", + "//tensorboard/webapp/feature_flag/store:store_test_lib", + "//tensorboard/webapp/header:test_lib", + "//tensorboard/webapp/metrics:test_lib", + "//tensorboard/webapp/metrics/data_source:metrics_data_source_test", + "//tensorboard/webapp/metrics/effects:effects_test", + "//tensorboard/webapp/metrics/store:store_test", + "//tensorboard/webapp/metrics/views:views_test", + "//tensorboard/webapp/metrics/views/card_renderer:card_renderer_tests", + "//tensorboard/webapp/metrics/views/main_view:main_view_tests", + "//tensorboard/webapp/metrics/views/right_pane:right_pane_test", + "//tensorboard/webapp/plugins:plugins_container_test_lib", + "//tensorboard/webapp/plugins/npmi:npmi_test_lib", + "//tensorboard/webapp/plugins/npmi/data_source:data_source_test_lib", + "//tensorboard/webapp/plugins/npmi/effects:effects_test_lib", + "//tensorboard/webapp/plugins/npmi/store:store_test_lib", + "//tensorboard/webapp/plugins/npmi/util:coordinate_data_test_lib", + "//tensorboard/webapp/plugins/npmi/util:csv_result_test_lib", + "//tensorboard/webapp/plugins/npmi/util:filter_annotations_test_lib", + "//tensorboard/webapp/plugins/npmi/util:metric_type_test_lib", + "//tensorboard/webapp/plugins/npmi/util:sort_annotations_test_lib", + "//tensorboard/webapp/plugins/npmi/util:violin_data_test_lib", + "//tensorboard/webapp/plugins/npmi/views/annotations_list:annotations_list_test_lib", + "//tensorboard/webapp/plugins/npmi/views/annotations_list/annotation:annotation_test_lib", + "//tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar:annotations_list_toolbar_test_lib", + "//tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search:annotations_search_test_lib", + "//tensorboard/webapp/plugins/npmi/views/annotations_list/header:header_test_lib", + "//tensorboard/webapp/plugins/npmi/views/annotations_list/legend:legend_test_lib", + "//tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element:legend_element_test_lib", + "//tensorboard/webapp/plugins/npmi/views/data_selection:data_selection_test_lib", + "//tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic:metric_arithmetic_test_lib", + "//tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element:metric_arithmetic_element_test_lib", + "//tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_operator:metric_arithmetic_operator_test_lib", + "//tensorboard/webapp/plugins/npmi/views/data_selection/metric_search:metric_search_test_lib", + "//tensorboard/webapp/plugins/npmi/views/data_selection/results_download:results_download_test_lib", + "//tensorboard/webapp/plugins/npmi/views/main:main_test_lib", + "//tensorboard/webapp/plugins/npmi/views/selected_annotations:selected_annotations_test_lib", + "//tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates:parallel_coordinates_test_lib", + "//tensorboard/webapp/plugins/npmi/views/violin_filters:violin_filters_test_lib", + "//tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter:violin_filter_test_lib", + "//tensorboard/webapp/plugins/text_v2/data_source:data_source_test_lib", + "//tensorboard/webapp/plugins/text_v2/effects:effects_test_lib", + "//tensorboard/webapp/plugins/text_v2/store:store_test_lib", + "//tensorboard/webapp/reloader:test_lib", + "//tensorboard/webapp/routes:routes_test_lib", + "//tensorboard/webapp/runs/data_source:runs_data_source_test", + "//tensorboard/webapp/runs/effects:effects_test", + "//tensorboard/webapp/runs/store:store_test", + "//tensorboard/webapp/runs/store:testing", + "//tensorboard/webapp/runs/views/runs_selector:runs_selector_test", + "//tensorboard/webapp/runs/views/runs_table:runs_table_test", + "//tensorboard/webapp/settings:test_lib", + "//tensorboard/webapp/tbdev_upload:test_lib", + "//tensorboard/webapp/util:util_tests", + "//tensorboard/webapp/webapp_data_source:feature_flag_test_lib", + "//tensorboard/webapp/webapp_data_source:http_client_test", + "//tensorboard/webapp/webapp_data_source:webapp_data_source_test_lib", + "//tensorboard/webapp/widgets:resize_detector_test", + "//tensorboard/webapp/widgets:resize_detector_testing", + "//tensorboard/webapp/widgets/histogram:histogram_test", + "//tensorboard/webapp/widgets/line_chart:line_chart_test", + "//tensorboard/webapp/widgets/line_chart_v2/lib:lib_tests", + "//tensorboard/webapp/widgets/range_input:range_input_tests", + "//tensorboard/webapp/widgets/text:text_tests", + ], +) + +tf_svg_bundle( + name = "svg_bundle", + srcs = [ + # When modifying below, please make sure to update + # //tensorboard/webapp/testing/mat_icon_module.ts. + # 'com_google_material_design_icon' in third_party/js.bzl + "@com_google_material_design_icon//:arrow_downward_24px.svg", + "@com_google_material_design_icon//:arrow_upward_24px.svg", + "@com_google_material_design_icon//:bug_report_24px.svg", + "@com_google_material_design_icon//:cancel_24px.svg", + "@com_google_material_design_icon//:chevron_left_24px.svg", + "@com_google_material_design_icon//:chevron_right_24px.svg", + "@com_google_material_design_icon//:clear_24px.svg", + "@com_google_material_design_icon//:close_24px.svg", + "@com_google_material_design_icon//:content_copy_24px.svg", + "@com_google_material_design_icon//:error_24px.svg", + "@com_google_material_design_icon//:expand_less_24px.svg", + "@com_google_material_design_icon//:expand_more_24px.svg", + "@com_google_material_design_icon//:filter_alt_24px.svg", + "@com_google_material_design_icon//:flag_24px.svg", + "@com_google_material_design_icon//:fullscreen_24px.svg", + "@com_google_material_design_icon//:fullscreen_exit_24px.svg", + "@com_google_material_design_icon//:get_app_24px.svg", + "@com_google_material_design_icon//:help_outline_24px.svg", + "@com_google_material_design_icon//:image_search_24px.svg", + "@com_google_material_design_icon//:info_outline_24px.svg", + "@com_google_material_design_icon//:keep_24px.svg", + "@com_google_material_design_icon//:keep_outline_24px.svg", + "@com_google_material_design_icon//:line_weight_24px.svg", + "@com_google_material_design_icon//:more_vert_24px.svg", + "@com_google_material_design_icon//:refresh_24px.svg", + "@com_google_material_design_icon//:search_24px.svg", + "@com_google_material_design_icon//:settings_24px.svg", + "@com_google_material_design_icon//:settings_backup_restore_24px.svg", + "@com_google_material_design_icon//:settings_overscan_24px.svg", + "@com_google_material_design_icon//:visibility_off_24px.svg", + "@com_google_material_design_icon//:warning_24px.svg", + ], + out = "icon_bundle.svg", +) + +tf_sass_library( + name = "angular_material_theming", + srcs = [ + "_angular_material_theming.scss", + "@npm//:node_modules/@angular/material/_theming.scss", + ], +) + +# TODO(stephanwlee): remove the alias when all usages, internal, too, +# //tensorboard/webapp:theme are removed. +alias( + name = "theme", + actual = "//tensorboard/webapp/theme", +) + +tf_sass_binary( + name = "styles", + src = "styles.scss", +) diff --git a/saved_models/tensorboard/tensorboard/webapp/_angular_material_theming.scss b/saved_models/tensorboard/tensorboard/webapp/_angular_material_theming.scss new file mode 100644 index 0000000000000000000000000000000000000000..6f9b8a2bba39fa496f1a11842d4798cdbbd0e80b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/_angular_material_theming.scss @@ -0,0 +1,16 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +@import '@angular/material/theming'; diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/BUILD b/saved_models/tensorboard/tensorboard/webapp/alert/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..4b22d824ee46f3937b43abdf5b6052257e5c2ece --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/BUILD @@ -0,0 +1,69 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "alert", + srcs = [ + "alert_module.ts", + ], + deps = [ + ":alert_action", + "//tensorboard/webapp/alert/effects", + "//tensorboard/webapp/alert/store", + "//tensorboard/webapp/alert/store:types", + "//tensorboard/webapp/alert/views:alert_snackbar", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + ], +) + +ng_module( + name = "alert_action", + srcs = [ + "alert_action_module.ts", + ], + deps = [ + ":types", + "@npm//@angular/core", + "@npm//@ngrx/store", + ], +) + +tf_ts_library( + name = "types", + srcs = [ + "types.ts", + ], + deps = [ + "//tensorboard/webapp:app_state", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "test_lib", + testonly = True, + srcs = [ + "alert_action_test.ts", + ], + deps = [ + ":alert_action", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/alert/actions", + "//tensorboard/webapp/alert/effects", + "//tensorboard/webapp/alert/store", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "@npm//@angular/common", + "@npm//@angular/compiler", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/actions/BUILD b/saved_models/tensorboard/tensorboard/webapp/alert/actions/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..77089a499248b35e930e97ae3513feced3dd6a92 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/actions/BUILD @@ -0,0 +1,17 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +tf_ts_library( + name = "actions", + srcs = [ + "index.ts", + ], + visibility = [ + "//tensorboard/webapp/alert:__subpackages__", + ], + deps = [ + "//tensorboard/webapp/alert:types", + "@npm//@ngrx/store", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/actions/index.ts b/saved_models/tensorboard/tensorboard/webapp/alert/actions/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..b27614ceb7f2f5ccc9f9b5e1a6a1a4c1a1cbb5ae --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/actions/index.ts @@ -0,0 +1,28 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {createAction, props} from '@ngrx/store'; + +import {AlertReport} from '../types'; + +/** @typehack */ import * as _typeHackModels from '@ngrx/store/src/models'; +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +/** + * Fires when an alert is to be reported. + */ +export const alertReported = createAction( + '[Alert] Alert Reported', + props() +); diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/alert_action_module.ts b/saved_models/tensorboard/tensorboard/webapp/alert/alert_action_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..9acdad37f3a595b1264ee582bdc2c566917f4241 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/alert_action_module.ts @@ -0,0 +1,119 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + Inject, + ModuleWithProviders, + NgModule, + Optional, + InjectionToken, +} from '@angular/core'; +import {Action, ActionCreator, Creator} from '@ngrx/store'; +import {AlertReport} from './types'; + +// While this token is not used outside, it must be exported so that stricter +// build tools may discover it during compilation. +export const ACTION_TO_ALERT_PROVIDER = new InjectionToken< + ActionToAlertConfig[] +>('[Alert] Action-To-Alert Provider'); + +export type ActionToAlertTransformer = (action: Action) => AlertReport | null; + +export interface ActionToAlertConfig { + /** + * The action to listen for. + */ + actionCreator: ActionCreator; + + /** + * A function that returns an alert report, or null, when the action is + * received. + */ + alertFromAction: ActionToAlertTransformer; +} + +/** + * An NgModule that provides alert-producing actions. These action configs are + * collected by AlertModule, which tracks application alerts. + * + * When the configured action fires, the AlertModule may respond. + * + * @NgModule({ + * imports: [ + * AlertActionModule.registerAlertActions([ + * { + * action: fetchKeysFailed, + * alertFromAction: () => {localizedMessage: "Keys failed to fetch."}, + * }, + * { + * action: greenButtonClicked, + * alertFromAction: (actionPayload) => { + * if (!actionPayload.wasButtonEnabled) { + * return {localizedMessage: "Green button failed."}; + * } + * return null; + * } + * } + * ]), + * ], + * }) + */ +@NgModule({}) +export class AlertActionModule { + /** + * Map from action creator type to transformer function. + */ + private readonly providers = new Map(); + + constructor( + @Optional() + @Inject(ACTION_TO_ALERT_PROVIDER) + providers: ActionToAlertConfig[][] + ) { + for (const configs of providers || []) { + for (const config of configs) { + if (this.providers.has(config.actionCreator.type)) { + throw new RangeError( + `"${config.actionCreator.type}" is already registered for alerts.` + + ' Multiple alerts for the same action is not allowed.' + ); + } + this.providers.set(config.actionCreator.type, config.alertFromAction); + } + } + } + + getAlertFromAction(action: Action): AlertReport | null { + const lambda = this.providers.get(action.type); + if (!lambda) { + return null; + } + return lambda(action); + } + + static registerAlertActions( + providerFactory: () => ActionToAlertConfig[] + ): ModuleWithProviders { + return { + ngModule: AlertActionModule, + providers: [ + { + provide: ACTION_TO_ALERT_PROVIDER, + multi: true, + useFactory: providerFactory, + }, + ], + }; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/alert_action_test.ts b/saved_models/tensorboard/tensorboard/webapp/alert/alert_action_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..5c3d7d7e1472621382be3a04c586a77110e24558 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/alert_action_test.ts @@ -0,0 +1,87 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed} from '@angular/core/testing'; +import {EffectsModule} from '@ngrx/effects'; +import {provideMockActions} from '@ngrx/effects/testing'; +import {Action, createAction, Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import {ReplaySubject} from 'rxjs'; +import {State} from '../app_state'; +import * as alertActions from './actions'; +import {AlertActionModule} from './alert_action_module'; +import {AlertEffects} from './effects'; + +const alertActionOccurred = createAction('[Test] Action Occurred (need alert)'); +const noAlertActionOccurred = createAction('[Test] Action Occurred (no alert)'); + +describe('alert_effects', () => { + let actions$: ReplaySubject; + let store: MockStore>; + let recordedActions: Action[] = []; + let shouldReportAlert: boolean; + + beforeEach(async () => { + shouldReportAlert = false; + actions$ = new ReplaySubject(1); + + await TestBed.configureTestingModule({ + imports: [ + AlertActionModule.registerAlertActions(() => [ + { + actionCreator: alertActionOccurred, + alertFromAction: (action: Action) => { + if (shouldReportAlert) { + return {localizedMessage: 'alert details'}; + } + return null; + }, + }, + ]), + EffectsModule.forFeature([AlertEffects]), + EffectsModule.forRoot([]), + ], + providers: [provideMockActions(actions$), provideMockStore({})], + }).compileComponents(); + + store = TestBed.inject>(Store) as MockStore; + recordedActions = []; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + recordedActions.push(action); + }); + }); + + it(`reports an alert when 'alertFromAction' returns a report`, () => { + shouldReportAlert = true; + actions$.next(alertActionOccurred); + + expect(recordedActions).toEqual([ + alertActions.alertReported({localizedMessage: 'alert details'}), + ]); + }); + + it(`does not alert when 'alertFromAction' returns null`, () => { + shouldReportAlert = false; + actions$.next(alertActionOccurred); + + expect(recordedActions).toEqual([]); + }); + + it(`does not alert when a non-matching action is fired`, () => { + shouldReportAlert = true; + actions$.next(noAlertActionOccurred); + + expect(recordedActions).toEqual([]); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/alert_module.ts b/saved_models/tensorboard/tensorboard/webapp/alert/alert_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..db4f5f1452e60bec415ae48af00eb829028a8bcd --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/alert_module.ts @@ -0,0 +1,32 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; +import {EffectsModule} from '@ngrx/effects'; +import {StoreModule} from '@ngrx/store'; +import {AlertActionModule} from './alert_action_module'; +import {AlertEffects} from './effects'; +import {reducers} from './store'; +import {ALERT_FEATURE_KEY} from './store/alert_types'; +import {AlertSnackbarModule} from './views/alert_snackbar_module'; + +@NgModule({ + imports: [ + AlertActionModule, + AlertSnackbarModule, + StoreModule.forFeature(ALERT_FEATURE_KEY, reducers), + EffectsModule.forFeature([AlertEffects]), + ], +}) +export class AlertModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/effects/BUILD b/saved_models/tensorboard/tensorboard/webapp/alert/effects/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..b43a30c7bbc33adc62cc269c06b2012c4884605c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/effects/BUILD @@ -0,0 +1,19 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "effects", + srcs = [ + "index.ts", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/alert:alert_action", + "//tensorboard/webapp/alert/actions", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/effects/index.ts b/saved_models/tensorboard/tensorboard/webapp/alert/effects/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..8c8fa38e436dd93170e3da8245eb45dd71ee3f60 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/effects/index.ts @@ -0,0 +1,49 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {Actions, createEffect} from '@ngrx/effects'; +import {Store} from '@ngrx/store'; +import {tap} from 'rxjs/operators'; +import {State} from '../../app_state'; +import {alertReported} from '../actions'; +import {AlertActionModule} from '../alert_action_module'; + +/** @typehack */ import * as _typeHackNgrxEffects from '@ngrx/effects/effects'; +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Injectable() +export class AlertEffects { + constructor( + private readonly actions$: Actions, + private readonly store: Store, + private readonly alertActionModule: AlertActionModule + ) {} + + /** @export */ + reportRegisteredActionAlerts$ = createEffect( + () => { + return this.actions$.pipe( + tap((action) => { + const alertInfo = this.alertActionModule.getAlertFromAction(action); + if (alertInfo) { + this.store.dispatch(alertReported(alertInfo)); + } + }) + ); + }, + {dispatch: false} + ); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/store/BUILD b/saved_models/tensorboard/tensorboard/webapp/alert/store/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..7a13ca254eaf4805cf546f44ccb4a6113666b107 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/store/BUILD @@ -0,0 +1,53 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +tf_ts_library( + name = "store", + srcs = [ + "alert_reducers.ts", + "alert_selectors.ts", + "index.ts", + ], + deps = [ + ":types", + "//tensorboard/webapp/alert:types", + "//tensorboard/webapp/alert/actions", + "@npm//@ngrx/store", + ], +) + +tf_ts_library( + name = "types", + srcs = [ + "alert_types.ts", + ], + deps = [ + "//tensorboard/webapp/alert:types", + ], +) + +tf_ts_library( + name = "testing", + testonly = True, + srcs = ["testing.ts"], + deps = [ + ":types", + ], +) + +tf_ts_library( + name = "test_lib", + testonly = True, + srcs = [ + "alert_reducers_test.ts", + "alert_selectors_test.ts", + ], + deps = [ + ":store", + ":testing", + ":types", + "//tensorboard/webapp/alert/actions", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/store/alert_reducers.ts b/saved_models/tensorboard/tensorboard/webapp/alert/store/alert_reducers.ts new file mode 100644 index 0000000000000000000000000000000000000000..3585f35bad1bccfe09de5388523e3271abe27c84 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/store/alert_reducers.ts @@ -0,0 +1,40 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Action, createReducer, on} from '@ngrx/store'; +import * as actions from '../actions'; +import {AlertState} from './alert_types'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store/store'; + +const initialState: AlertState = { + latestAlert: null, +}; + +const reducer = createReducer( + initialState, + on( + actions.alertReported, + (state: AlertState, {localizedMessage}): AlertState => { + return { + ...state, + latestAlert: {localizedMessage, created: Date.now()}, + }; + } + ) +); + +export function reducers(state: AlertState | undefined, action: Action) { + return reducer(state, action); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/store/alert_reducers_test.ts b/saved_models/tensorboard/tensorboard/webapp/alert/store/alert_reducers_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..ecf63a1f73fa50c965e8a37fa474c651ee458af6 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/store/alert_reducers_test.ts @@ -0,0 +1,60 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as alertActions from '../actions'; +import * as alertReducers from './alert_reducers'; +import {buildAlertState} from './testing'; + +describe('alert_reducers', () => { + it('saves alerts with a timestamp', () => { + spyOn(Date, 'now').and.returnValues(123, 234); + const action1 = alertActions.alertReported({ + localizedMessage: 'Foo1 failed', + }); + const action2 = alertActions.alertReported({ + localizedMessage: 'Foo2 failed', + }); + const state1 = buildAlertState({latestAlert: null}); + + const state2 = alertReducers.reducers(state1, action1); + expect(state2.latestAlert!).toEqual({ + localizedMessage: 'Foo1 failed', + created: 123, + }); + + const state3 = alertReducers.reducers(state2, action2); + expect(state3.latestAlert!).toEqual({ + localizedMessage: 'Foo2 failed', + created: 234, + }); + }); + + it('updates state with a different alert if the report is the same', () => { + const action1 = alertActions.alertReported({ + localizedMessage: 'Foo failed again', + }); + const action2 = alertActions.alertReported({ + localizedMessage: 'Foo failed again', + }); + const state1 = buildAlertState({latestAlert: null}); + + const state2 = alertReducers.reducers(state1, action1); + const state2LatestAlert = state2.latestAlert; + + const state3 = alertReducers.reducers(state2, action2); + const state3LatestAlert = state3.latestAlert; + + expect(state2LatestAlert).not.toBe(state3LatestAlert); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/store/alert_selectors.ts b/saved_models/tensorboard/tensorboard/webapp/alert/store/alert_selectors.ts new file mode 100644 index 0000000000000000000000000000000000000000..81a0b32da0a1c7b4e839936baf5837432a8425a5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/store/alert_selectors.ts @@ -0,0 +1,31 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {createSelector, createFeatureSelector} from '@ngrx/store'; +import {AlertInfo} from '../types'; +import {AlertState, State, ALERT_FEATURE_KEY} from './alert_types'; + +/** @typehack */ import * as _typeHackSelector from '@ngrx/store/src/selector'; +/** @typehack */ import * as _typeHackStore from '@ngrx/store/store'; + +const selectAlertState = createFeatureSelector( + ALERT_FEATURE_KEY +); + +export const getLatestAlert = createSelector( + selectAlertState, + (state: AlertState): AlertInfo | null => { + return state.latestAlert; + } +); diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/store/alert_selectors_test.ts b/saved_models/tensorboard/tensorboard/webapp/alert/store/alert_selectors_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..98265ba73ab36050dc4ce8bf27da157fd26dadba --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/store/alert_selectors_test.ts @@ -0,0 +1,49 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as selectors from './alert_selectors'; +import {buildAlertState, buildStateFromAlertState} from './testing'; + +describe('alert_selectors', () => { + describe('getAlert', () => { + beforeEach(() => { + // Clear the memoization. + selectors.getLatestAlert.release(); + }); + + it('returns null when there is no alert', () => { + const state = buildStateFromAlertState( + buildAlertState({ + latestAlert: null, + }) + ); + expect(selectors.getLatestAlert(state)).toBe(null); + }); + + it('returns the current alert', () => { + const state = buildStateFromAlertState( + buildAlertState({ + latestAlert: { + localizedMessage: 'The sky is orange', + created: 2020, + }, + }) + ); + expect(selectors.getLatestAlert(state)).toEqual({ + localizedMessage: 'The sky is orange', + created: 2020, + }); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/store/alert_types.ts b/saved_models/tensorboard/tensorboard/webapp/alert/store/alert_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..b36fe3828815256145c001f9420e5e0ae65696b6 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/store/alert_types.ts @@ -0,0 +1,25 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {AlertInfo} from '../types'; + +export const ALERT_FEATURE_KEY = 'alerts'; + +export interface AlertState { + latestAlert: AlertInfo | null; +} + +export interface State { + [ALERT_FEATURE_KEY]?: AlertState; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/store/index.ts b/saved_models/tensorboard/tensorboard/webapp/alert/store/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..b0cb37baaab99daca9e3e1f0435ffa1071b5a9bb --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/store/index.ts @@ -0,0 +1,18 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export * from './alert_reducers'; +export * from './alert_selectors'; +export {State} from './alert_types'; diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/store/testing.ts b/saved_models/tensorboard/tensorboard/webapp/alert/store/testing.ts new file mode 100644 index 0000000000000000000000000000000000000000..cf3cb8e15981f5d002379b14f13c64deeef92690 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/store/testing.ts @@ -0,0 +1,26 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ALERT_FEATURE_KEY, AlertState, State} from './alert_types'; + +export function buildAlertState(override: Partial): AlertState { + return { + latestAlert: null, + ...override, + }; +} + +export function buildStateFromAlertState(runsState: AlertState): State { + return {[ALERT_FEATURE_KEY]: runsState}; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/types.ts b/saved_models/tensorboard/tensorboard/webapp/alert/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..fd797f4f4ba0358c86525e1595d6cb89e8cd27fd --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/types.ts @@ -0,0 +1,45 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Action, Store} from '@ngrx/store'; +import {State} from '../app_state'; + +/** + * An alert structure used when creating newly reported alerts. + */ +export interface AlertReport { + /** + * Localized text describing the alert. + */ + localizedMessage: string; + + followupAction?: { + /** + * Localized name of a followup action. + */ + localizedLabel: string; + + /** + * A factory that defines how to create the followup action. At the time + * when the followup action is requested, a newly created Promise will be + * awaited, and the resulting action is dispatched. + */ + getFollowupAction: (store: Store) => Promise; + }; +} + +/** + * An alert exposed by the feature's selectors. + */ +export type AlertInfo = AlertReport & {created: number}; diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/views/BUILD b/saved_models/tensorboard/tensorboard/webapp/alert/views/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..0328b705ad202781c9a0d81630ca12a5c8a16af2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/views/BUILD @@ -0,0 +1,61 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +tf_sass_binary( + name = "alert_display_snackbar_styles", + src = "alert_display_snackbar_container.scss", +) + +ng_module( + name = "alert_snackbar", + srcs = [ + "alert_display_snackbar_container.ts", + "alert_snackbar_container.ts", + "alert_snackbar_module.ts", + ], + assets = [ + ":alert_display_snackbar_styles", + "alert_display_snackbar_container.ng.html", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/alert:types", + "//tensorboard/webapp/alert/store", + "//tensorboard/webapp/alert/store:types", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_snackbar", + "//tensorboard/webapp/util:string", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "views_test", + testonly = True, + srcs = [ + "alert_snackbar_test.ts", + ], + deps = [ + ":alert_snackbar", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/alert/store", + "//tensorboard/webapp/alert/store:testing", + "//tensorboard/webapp/angular:expect_angular_cdk_overlay", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_snackbar", + "//tensorboard/webapp/angular:expect_angular_platform_browser_animations", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/views/alert_display_snackbar_container.ng.html b/saved_models/tensorboard/tensorboard/webapp/alert/views/alert_display_snackbar_container.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..2b9500df69dfeba6a4184d11145c139e19f30daa --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/views/alert_display_snackbar_container.ng.html @@ -0,0 +1,47 @@ + +
    + + + {{ piece.text }} + + + {{ piece.text }} + + +
    +
    + + +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/views/alert_display_snackbar_container.scss b/saved_models/tensorboard/tensorboard/webapp/alert/views/alert_display_snackbar_container.scss new file mode 100644 index 0000000000000000000000000000000000000000..4aed87692e5dfbfee24f421055621a9b2e6c52a8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/views/alert_display_snackbar_container.scss @@ -0,0 +1,38 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +:host { + display: flex; + flex-wrap: wrap; +} + +.message { + font-size: 14px; + align-self: center; + margin: 5px 0; + word-break: break-word; +} + +.message a { + color: inherit; +} + +.controls { + white-space: nowrap; + margin-left: auto; +} + +button { + text-transform: uppercase; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/views/alert_display_snackbar_container.ts b/saved_models/tensorboard/tensorboard/webapp/alert/views/alert_display_snackbar_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..ec891d1f027306376e1fe14e270d5ef33499ef0c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/views/alert_display_snackbar_container.ts @@ -0,0 +1,52 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component, Inject} from '@angular/core'; +import {MAT_SNACK_BAR_DATA, MatSnackBarRef} from '@angular/material/snack-bar'; +import {State} from '../../app_state'; +import {AlertInfo} from '../types'; +import {Store} from '@ngrx/store'; +import {splitByURL} from '../../util/string'; + +@Component({ + selector: 'alert-display-snackbar', + templateUrl: './alert_display_snackbar_container.ng.html', + styleUrls: ['./alert_display_snackbar_container.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AlertDisplaySnackbarContainer { + readonly alert: AlertInfo; + readonly splitByURL = splitByURL; + + constructor( + private readonly snackBarRef: MatSnackBarRef, + @Inject(MAT_SNACK_BAR_DATA) readonly unknownData: unknown, + private readonly store: Store + ) { + this.alert = unknownData as AlertInfo; + } + + async onActionButtonClicked() { + this.snackBarRef.dismiss(); + + const followupAction = await this.alert.followupAction!.getFollowupAction( + this.store + ); + this.store.dispatch(followupAction); + } + + onCloseButtonClicked() { + this.snackBarRef.dismiss(); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/views/alert_snackbar_container.ts b/saved_models/tensorboard/tensorboard/webapp/alert/views/alert_snackbar_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..376a51cdbe2b0102b3044aced1be86b5c09a4b9f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/views/alert_snackbar_container.ts @@ -0,0 +1,72 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + OnDestroy, + OnInit, +} from '@angular/core'; +import {MatSnackBar} from '@angular/material/snack-bar'; +import {Store} from '@ngrx/store'; +import {Subject} from 'rxjs'; +import {filter, takeUntil} from 'rxjs/operators'; + +import {State} from '../store/alert_types'; +import {getLatestAlert} from '../../selectors'; +import {AlertDisplaySnackbarContainer} from './alert_display_snackbar_container'; +import {AlertInfo} from '../types'; + +/** + * Renders alerts in a 'snackbar' to indicate them to the user. + */ +@Component({ + selector: 'alert-snackbar', + template: '', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AlertSnackbarContainer implements OnInit, OnDestroy { + private readonly ngUnsubscribe = new Subject(); + + constructor( + private readonly store: Store, + private readonly snackBar: MatSnackBar + ) {} + + ngOnInit() { + this.store + .select(getLatestAlert) + .pipe( + takeUntil(this.ngUnsubscribe), + filter((alert) => Boolean(alert)) + ) + .subscribe((alert) => { + this.showAlert(alert!); + }); + } + + ngOnDestroy() { + this.ngUnsubscribe.next(); + this.ngUnsubscribe.complete(); + } + + private showAlert(alertInfo: AlertInfo) { + this.snackBar.openFromComponent(AlertDisplaySnackbarContainer, { + duration: 5000, + horizontalPosition: 'start', + verticalPosition: 'bottom', + data: alertInfo, + }); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/views/alert_snackbar_module.ts b/saved_models/tensorboard/tensorboard/webapp/alert/views/alert_snackbar_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..dbdf2c46f0589efcf6b9a7ed0b4314606054fae4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/views/alert_snackbar_module.ts @@ -0,0 +1,35 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {MatButtonModule} from '@angular/material/button'; +import {MatSnackBarModule} from '@angular/material/snack-bar'; + +import {AlertSnackbarContainer} from './alert_snackbar_container'; +import {AlertDisplaySnackbarContainer} from './alert_display_snackbar_container'; + +/** + * Provides the 'alert snackbar' view. + */ +@NgModule({ + declarations: [AlertSnackbarContainer, AlertDisplaySnackbarContainer], + exports: [AlertSnackbarContainer], + imports: [CommonModule, MatButtonModule, MatSnackBarModule], + entryComponents: [ + // Required for non-Ivy Angular apps. + AlertDisplaySnackbarContainer, + ], +}) +export class AlertSnackbarModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/alert/views/alert_snackbar_test.ts b/saved_models/tensorboard/tensorboard/webapp/alert/views/alert_snackbar_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..731de599f48cc00aec10555e18841d5efb4a8260 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/alert/views/alert_snackbar_test.ts @@ -0,0 +1,242 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {OverlayContainer} from '@angular/cdk/overlay'; +import {TestBed} from '@angular/core/testing'; +import {MatSnackBar, MatSnackBarModule} from '@angular/material/snack-bar'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Action, createAction, props, Store} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; +import {AlertSnackbarContainer} from './alert_snackbar_container'; +import {State} from '../store'; +import * as selectors from '../../selectors'; +import {buildStateFromAlertState, buildAlertState} from '../store/testing'; +import {AlertDisplaySnackbarContainer} from './alert_display_snackbar_container'; +import {MatButtonModule} from '@angular/material/button'; + +const testAction = createAction('[Test] Action Occurred'); +const testActionWithProps = createAction( + '[Test] Action With Props Occurred', + props<{foo: boolean}>() +); + +const Selectors = { + SNACKBAR: 'alert-display-snackbar', + FOLLOWUP_BUTTON: '.followup-button', + DISMISS_BUTTON: '.dismiss-button', +}; + +describe('alert snackbar', () => { + let store: MockStore; + let snackBarOpenSpy: jasmine.Spy; + let recordedActions: Action[] = []; + let overlayContainer: OverlayContainer; + let snackbar: MatSnackBar; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [NoopAnimationsModule, MatButtonModule, MatSnackBarModule], + providers: [ + provideMockStore({ + initialState: buildStateFromAlertState(buildAlertState({})), + }), + ], + declarations: [AlertSnackbarContainer, AlertDisplaySnackbarContainer], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + recordedActions = []; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + recordedActions.push(action); + }); + overlayContainer = TestBed.inject(OverlayContainer); + snackbar = TestBed.inject(MatSnackBar); + snackBarOpenSpy = spyOn(snackbar, 'openFromComponent').and.callThrough(); + }); + + afterEach(() => { + snackbar.dismiss(); + }); + + it('opens the snackbar on each alert', () => { + const fixture = TestBed.createComponent(AlertSnackbarContainer); + fixture.detectChanges(); + expect(snackBarOpenSpy).not.toHaveBeenCalled(); + + store.overrideSelector(selectors.getLatestAlert, { + localizedMessage: 'Foo failed', + created: 0, + }); + store.refreshState(); + + expect(snackBarOpenSpy.calls.count()).toBe(1); + expect(snackBarOpenSpy.calls.mostRecent().args[1].data).toEqual({ + localizedMessage: 'Foo failed', + created: 0, + }); + + store.overrideSelector(selectors.getLatestAlert, { + localizedMessage: 'Foo2 failed', + created: 1, + }); + store.refreshState(); + + expect(snackBarOpenSpy.calls.count()).toBe(2); + expect(snackBarOpenSpy.calls.mostRecent().args[1].data).toEqual({ + localizedMessage: 'Foo2 failed', + created: 1, + }); + }); + + it('opens the snackbar again on receiving the same alert', () => { + const fixture = TestBed.createComponent(AlertSnackbarContainer); + fixture.detectChanges(); + expect(snackBarOpenSpy).not.toHaveBeenCalled(); + + store.overrideSelector(selectors.getLatestAlert, { + localizedMessage: 'Foo failed again', + created: 0, + }); + store.refreshState(); + + expect(snackBarOpenSpy.calls.count()).toBe(1); + expect(snackBarOpenSpy.calls.mostRecent().args[1].data).toEqual({ + localizedMessage: 'Foo failed again', + created: 0, + }); + + store.overrideSelector(selectors.getLatestAlert, { + localizedMessage: 'Foo failed again', + created: 1, + }); + store.refreshState(); + + expect(snackBarOpenSpy.calls.count()).toBe(2); + expect(snackBarOpenSpy.calls.mostRecent().args[1].data).toEqual({ + localizedMessage: 'Foo failed again', + created: 1, + }); + }); + + it('closes the snackbar on click', async () => { + const fixture = TestBed.createComponent(AlertSnackbarContainer); + fixture.detectChanges(); + store.overrideSelector(selectors.getLatestAlert, { + localizedMessage: 'Foo failed', + created: 0, + }); + store.refreshState(); + + const dismissEl = overlayContainer + .getContainerElement() + .querySelector(Selectors.DISMISS_BUTTON); + expect(dismissEl).toBeTruthy(); + (dismissEl as HTMLButtonElement).click(); + fixture.detectChanges(); + await fixture.whenStable(); + + const snackbarAfterEl = overlayContainer + .getContainerElement() + .querySelector(Selectors.SNACKBAR); + expect(snackbarAfterEl).not.toBeTruthy(); + }); + + it('shows the followup action if needed', () => { + const fixture = TestBed.createComponent(AlertSnackbarContainer); + fixture.detectChanges(); + store.overrideSelector(selectors.getLatestAlert, { + localizedMessage: 'Foo failed', + followupAction: { + localizedLabel: 'Try again?', + getFollowupAction: async () => testAction(), + }, + created: 0, + }); + store.refreshState(); + + expect( + overlayContainer + .getContainerElement() + .querySelector(Selectors.FOLLOWUP_BUTTON) + ).toBeTruthy(); + }); + + it('does not show the followup button if there is no followup', () => { + const fixture = TestBed.createComponent(AlertSnackbarContainer); + fixture.detectChanges(); + store.overrideSelector(selectors.getLatestAlert, { + localizedMessage: 'Foo failed', + created: 0, + }); + store.refreshState(); + + const followupEl = overlayContainer + .getContainerElement() + .querySelector(Selectors.FOLLOWUP_BUTTON); + expect(followupEl).not.toBeTruthy(); + }); + + it('dispatches a followup action and closes', async () => { + const fixture = TestBed.createComponent(AlertSnackbarContainer); + fixture.detectChanges(); + store.overrideSelector(selectors.getLatestAlert, { + localizedMessage: 'Foo failed', + followupAction: { + localizedLabel: 'Try again?', + getFollowupAction: async () => testAction(), + }, + created: 0, + }); + store.refreshState(); + + const followupEl = overlayContainer + .getContainerElement() + .querySelector(Selectors.FOLLOWUP_BUTTON); + (followupEl as HTMLButtonElement).click(); + fixture.detectChanges(); + await fixture.whenStable(); + + expect(recordedActions).toEqual([testAction()]); + const snackbarAfterEl = overlayContainer + .getContainerElement() + .querySelector(Selectors.SNACKBAR); + expect(snackbarAfterEl).not.toBeTruthy(); + }); + + it('dispatches a followup action with payload and closes', async () => { + const fixture = TestBed.createComponent(AlertSnackbarContainer); + fixture.detectChanges(); + store.overrideSelector(selectors.getLatestAlert, { + localizedMessage: 'Foo failed', + followupAction: { + localizedLabel: 'Try again?', + getFollowupAction: async () => testActionWithProps({foo: true}), + }, + created: 0, + }); + store.refreshState(); + + const followupEl = overlayContainer + .getContainerElement() + .querySelector(Selectors.FOLLOWUP_BUTTON); + (followupEl as HTMLButtonElement).click(); + fixture.detectChanges(); + await fixture.whenStable(); + + expect(recordedActions).toEqual([testActionWithProps({foo: true})]); + const snackbarAfterEl = overlayContainer + .getContainerElement() + .querySelector(Selectors.SNACKBAR); + expect(snackbarAfterEl).not.toBeTruthy(); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/angular/BUILD b/saved_models/tensorboard/tensorboard/webapp/angular/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..35bc6f26f846adc51923a93b9e64df14e4da9b70 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/angular/BUILD @@ -0,0 +1,293 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +# This is a dummy rule used as a @angular/common/http dependency. +# This is not a replacement for @angular/common dependency. +tf_ts_library( + name = "expect_angular_common_http", + srcs = [], + visibility = [ + "//tensorboard/webapp/webapp_data_source:__subpackages__", + ], + deps = [ + "@npm//@angular/common", + ], +) + +# This is a dummy rule used as a @angular/common/testing dependency. +# This is not a replacement for @angular/common dependency. +tf_ts_library( + name = "expect_angular_common_http_testing", + srcs = [], + visibility = [ + "//tensorboard/webapp/webapp_data_source:__subpackages__", + ], + deps = [ + "@npm//@angular/common", + ], +) + +# This is a dummy rule used as a @angular/material/cdk_clipboard dependency. +tf_ts_library( + name = "expect_angular_cdk_clipboard", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/core/testing dependency. +# This is not a replacement for @angular/core dependency. +tf_ts_library( + name = "expect_angular_core_testing", + srcs = [], + deps = [ + "@npm//@angular/core", + ], +) + +# This is a dummy rule used as a @angular/material/autocomplete dependency. +tf_ts_library( + name = "expect_angular_material_autocomplete", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/checkbox dependency. +tf_ts_library( + name = "expect_angular_material_checkbox", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/button dependency. +tf_ts_library( + name = "expect_angular_material_button", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/button_toggle dependency. +tf_ts_library( + name = "expect_angular_material_button_toggle", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/chips dependency. +tf_ts_library( + name = "expect_angular_material_chips", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/dialog dependency. +tf_ts_library( + name = "expect_angular_material_dialog", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/expansion dependency. +tf_ts_library( + name = "expect_angular_material_expansion", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/icon dependency. +tf_ts_library( + name = "expect_angular_material_icon", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/input dependency. +tf_ts_library( + name = "expect_angular_material_input", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/menu dependency. +tf_ts_library( + name = "expect_angular_material_menu", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/paginator dependency. +tf_ts_library( + name = "expect_angular_material_paginator", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/progress_spinner dependency. +tf_ts_library( + name = "expect_angular_material_progress_spinner", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/select dependency. +tf_ts_library( + name = "expect_angular_material_select", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/slide_toggle dependency. +tf_ts_library( + name = "expect_angular_material_slide_toggle", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/slider dependency. +tf_ts_library( + name = "expect_angular_material_slider", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/snackbar dependency. +tf_ts_library( + name = "expect_angular_material_snackbar", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/sort dependency. +tf_ts_library( + name = "expect_angular_material_sort", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/table dependency. +tf_ts_library( + name = "expect_angular_material_table", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/tabs dependency. +tf_ts_library( + name = "expect_angular_material_tabs", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/toolbar dependency. +tf_ts_library( + name = "expect_angular_material_toolbar", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/material/tooltip dependency. +tf_ts_library( + name = "expect_angular_material_tooltip", + srcs = [], + deps = [ + "@npm//@angular/material", + ], +) + +# This is a dummy rule used as a @angular/platform-browser/animations dependency. +# This is not a replacement for @angular/platform-browser dependency. +tf_ts_library( + name = "expect_angular_platform_browser_animations", + srcs = [], + deps = ["@npm//@angular/platform-browser"], +) + +# This is a dummy rule used as a @angular/platform-browser-dynamic/testing dependency. +# This is not a replacement for @angular/platform-browser-dynamic dependency. +tf_ts_library( + name = "expect_angular_platform_browser_dynamic_testing", + srcs = [], + deps = ["@npm//@angular/platform-browser-dynamic"], +) + +# This is a dummy rule used as a @angular/cdk/drag_drop dependency. +tf_ts_library( + name = "expect_angular_cdk_drag_drop", + srcs = [], + deps = [ + "@npm//@angular/cdk", + ], +) + +# This is a dummy rule used as a @angular/cdk/overlay dependency. +tf_ts_library( + name = "expect_angular_cdk_overlay", + srcs = [], + deps = [ + "@npm//@angular/cdk", + ], +) + +# This is a dummy rule used as a @angular/cdk/scrolling dependency. +tf_ts_library( + name = "expect_angular_cdk_scrolling", + srcs = [], + deps = [ + "@npm//@angular/cdk", + ], +) + +# This is a dummy rule used as a @ngrx/store/testing dependency. +# This is not a replacement for @ngrx/store dependency. +tf_ts_library( + name = "expect_ngrx_store_testing", + testonly = True, + srcs = [], + deps = [ + "@npm//@ngrx/store", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/app_container.css b/saved_models/tensorboard/tensorboard/webapp/app_container.css new file mode 100644 index 0000000000000000000000000000000000000000..32a19d62227bc9c71359643e0a9df870f000084b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_container.css @@ -0,0 +1,39 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +html, +body { + font-family: Roboto, sans-serif; + height: 100%; + margin: 0; + padding: 0; +} + +:host { + background: #f5f5f5; + display: flex; + flex-direction: column; + height: 100%; +} + +app-header { + box-shadow: 0 1px 3px 3px rgba(0, 0, 0, 0.25); + flex: 0 0; + z-index: 1; /* The box shadow needs to extend out of the app-header. */ +} + +main { + flex-grow: 1; + overflow: auto; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_container.ng.html b/saved_models/tensorboard/tensorboard/webapp/app_container.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..3cbceef28050c9188ac679434687fbad43f7ea55 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_container.ng.html @@ -0,0 +1,25 @@ + + + +
    + +
    + + + + diff --git a/saved_models/tensorboard/tensorboard/webapp/app_container.ts b/saved_models/tensorboard/tensorboard/webapp/app_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..8509e9ef458a84a97d6fec20fdb0f34fce4bee7c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_container.ts @@ -0,0 +1,39 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, OnInit, ViewContainerRef} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {coreLoaded} from './core/actions'; +import {State} from './core/store'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'tb-webapp', + templateUrl: './app_container.ng.html', + styleUrls: ['./app_container.css'], +}) +export class AppContainer implements OnInit { + // vcRef is required by ngx-color-picker in order for it to place the popup + // in the root node in a modal mode. + // https://github.com/zefoy/ngx-color-picker/blob/94a7c862bb61d7207f21281526fcd94453219b54/projects/lib/src/lib/color-picker.directive.ts#L168-L175 + constructor( + private readonly store: Store, + readonly vcRef: ViewContainerRef + ) {} + + ngOnInit() { + this.store.dispatch(coreLoaded()); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_module.ts b/saved_models/tensorboard/tensorboard/webapp/app_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..7a3986726399dbe0fa3af199f8278303f56dd406 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_module.ts @@ -0,0 +1,83 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {BrowserModule} from '@angular/platform-browser'; +import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; +import {NgModule} from '@angular/core'; +import {StoreModule, META_REDUCERS} from '@ngrx/store'; +import {EffectsModule} from '@ngrx/effects'; + +import {AppContainer} from './app_container'; +import {AppRoutingModule} from './app_routing/app_routing_module'; +import {AppRoutingViewModule} from './app_routing/views/app_routing_view_module'; +import {CoreModule} from './core/core_module'; +import {ExperimentsModule} from './experiments/experiments_module'; +import {AlertModule} from './alert/alert_module'; +import {AlertSnackbarModule} from './alert/views/alert_snackbar_module'; +import {HashStorageModule} from './core/views/hash_storage_module'; +import {PageTitleModule} from './core/views/page_title_module'; +import {FeatureFlagModule} from './feature_flag/feature_flag_module'; +import {HeaderModule} from './header/header_module'; +import {MatIconModule} from './mat_icon_module'; +import {PluginsModule} from './plugins/plugins_module'; +import {ROOT_REDUCERS, loggerMetaReducerFactory} from './reducer_config'; +import {RunsModule} from './runs/runs_module'; +import {SettingsModule} from './settings/settings_module'; +import {TensorBoardWrapperModule} from './tb_wrapper/tb_wrapper_module'; +import {OssPluginsModule} from './oss_plugins_module'; + +import {RouteRegistryModule} from './app_routing/route_registry_module'; +import {routesFactory} from './routes'; + +@NgModule({ + declarations: [AppContainer], + imports: [ + // Ensure feature flags are enabled before they are consumed. + FeatureFlagModule, + BrowserModule, + BrowserAnimationsModule, + AppRoutingModule, + AppRoutingViewModule, + RouteRegistryModule.registerRoutes(routesFactory), + AlertModule, + AlertSnackbarModule, + TensorBoardWrapperModule, + CoreModule, + ExperimentsModule, + HashStorageModule, + HeaderModule, + MatIconModule, + PageTitleModule, + PluginsModule, + RunsModule, + SettingsModule, + StoreModule.forRoot(ROOT_REDUCERS, { + runtimeChecks: { + strictStateSerializability: false, + strictActionSerializability: true, + }, + }), + EffectsModule.forRoot([]), + OssPluginsModule, + ], + providers: [ + { + provide: META_REDUCERS, + useFactory: loggerMetaReducerFactory, + multi: true, + }, + ], + bootstrap: [AppContainer], +}) +export class AppModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/BUILD b/saved_models/tensorboard/tensorboard/webapp/app_routing/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..075eca48b9c25770cebb97ae8249e2bcd6891e24 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/BUILD @@ -0,0 +1,177 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "app_routing", + srcs = [ + "app_routing_module.ts", + ], + deps = [ + ":location", + ":programmatical_navigation_module", + ":route_registry", + "//tensorboard/webapp/app_routing/effects", + "//tensorboard/webapp/app_routing/store", + "//tensorboard/webapp/app_routing/store:types", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + ], +) + +ng_module( + name = "location", + srcs = [ + "location.ts", + "location_module.ts", + ], + deps = [ + ":internal_utils", + ":types", + "@npm//@angular/core", + "@npm//rxjs", + ], +) + +ng_module( + name = "route_registry", + srcs = [ + "route_registry_module.ts", + "route_registry_types.ts", + ], + deps = [ + ":route_config", + ":types", + "@npm//@angular/core", + ], +) + +tf_ts_library( + name = "types", + srcs = [ + "types.ts", + ], +) + +ng_module( + name = "programmatical_navigation_module", + srcs = [ + "programmatical_navigation_module.ts", + "programmatical_navigation_types.ts", + ], + deps = [ + ":types", + "@npm//@angular/core", + "@npm//@ngrx/store", + ], +) + +ng_module( + name = "deep_link_provider", + srcs = [ + "deep_link_provider.ts", + ], + deps = [ + ":types", + "//tensorboard/webapp:app_state", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +ng_module( + name = "route_config", + srcs = [ + "route_config.ts", + "route_config_types.ts", + ], + deps = [ + ":deep_link_provider", + ":types", + "@npm//@angular/core", + ], +) + +ng_module( + name = "route_config_test", + testonly = True, + srcs = [ + "route_config_test.ts", + ], + deps = [ + ":route_config", + ":types", + "@npm//@angular/core", + "@npm//@types/jasmine", + ], +) + +tf_ts_library( + name = "route_contexted_reducer_helper", + srcs = [ + "route_contexted_reducer_helper.ts", + ], + deps = [ + ":internal_utils", + "//tensorboard/webapp/app_routing/actions", + "@npm//@ngrx/store", + ], +) + +tf_ts_library( + name = "internal_utils", + srcs = [ + "internal_utils.ts", + ], + visibility = [ + "//tensorboard/webapp/app_routing:__subpackages__", + ], + deps = [":types"], +) + +ng_module( + name = "testing", + testonly = True, + srcs = [ + "testing.ts", + ], + deps = [ + ":location", + ":types", + "//tensorboard/webapp/app_routing/actions", + "@npm//@angular/core", + "@npm//rxjs", + ], +) + +ng_module( + name = "app_routing_test", + testonly = True, + srcs = [ + "internal_utils_test.ts", + "location_test.ts", + "programmatical_navigation_module_test.ts", + "route_contexted_reducer_helper_test.ts", + "route_registry_module_test.ts", + ], + deps = [ + ":internal_utils", + ":location", + ":programmatical_navigation_module", + ":route_contexted_reducer_helper", + ":route_registry", + ":testing", + ":types", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/app_routing/actions", + "//tensorboard/webapp/util:ngrx", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/actions/BUILD b/saved_models/tensorboard/tensorboard/webapp/app_routing/actions/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..8ff111466a2b04c2bedb8cd147d6b9d0d2008dc9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/actions/BUILD @@ -0,0 +1,17 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "actions", + srcs = [ + "app_routing_actions.ts", + "index.ts", + ], + deps = [ + "//tensorboard/webapp/app_routing:types", + "@npm//@ngrx/store", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/actions/app_routing_actions.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/actions/app_routing_actions.ts new file mode 100644 index 0000000000000000000000000000000000000000..b2b363daefb199e6bee8b4d0759bef13caecdc5a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/actions/app_routing_actions.ts @@ -0,0 +1,66 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {createAction, props} from '@ngrx/store'; + +import {Navigation, Route, RouteKind} from '../types'; + +/** @typehack */ import * as _typeHackModels from '@ngrx/store/src/models'; +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +/** + * Created when router rehydrates state from the URL after a browser initiated + * event. Please do note that the action is fired before `navigated` so make + * sure the view can handle inconsistent state right before a navigation. + */ +export const stateRehydratedFromUrl = createAction( + '[App Routing] State Rehydrated From Url', + props<{ + routeKind: RouteKind; + partialState: {}; + }>() +); + +/** + * Created when user intends to navigate in the application + */ +export const navigationRequested = createAction( + '[App Routing] In App Navigation Requested', + props() +); + +export interface NavigatingPayload { + after: Route; +} + +/** + * Created after a route is matched but before navigated. + */ +export const navigating = createAction( + '[App Routing] In App Navigating', + props() +); + +export interface NavigatedPayload { + before: Route | null; + after: Route; +} + +/** + * Created after navigation is successful. + */ +export const navigated = createAction( + '[App Routing] In App Navigated', + props() +); diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/actions/index.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/actions/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..8e3407dcea31507faed95a5c94cca7ef5e2ef2cc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/actions/index.ts @@ -0,0 +1,15 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export * from './app_routing_actions'; diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/app_routing_module.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/app_routing_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..670204a6e512c6db5b2e089a7a9da55c14019c2f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/app_routing_module.ts @@ -0,0 +1,33 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; +import {EffectsModule} from '@ngrx/effects'; +import {StoreModule} from '@ngrx/store'; + +import {AppRoutingEffects} from './effects'; +import {LocationModule} from './location_module'; +import {ProgrammaticalNavigationModule} from './programmatical_navigation_module'; +import {reducers} from './store/app_routing_reducers'; +import {APP_ROUTING_FEATURE_KEY} from './store/app_routing_types'; + +@NgModule({ + imports: [ + StoreModule.forFeature(APP_ROUTING_FEATURE_KEY, reducers), + EffectsModule.forFeature([AppRoutingEffects]), + LocationModule, + ], + providers: [ProgrammaticalNavigationModule], +}) +export class AppRoutingModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/deep_link_provider.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/deep_link_provider.ts new file mode 100644 index 0000000000000000000000000000000000000000..fff5a94850b8d110a0dea6087853b3d3ffa4c9cc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/deep_link_provider.ts @@ -0,0 +1,30 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {Observable} from 'rxjs'; + +import {State} from '../app_state'; + +import {SerializableQueryParams} from './types'; + +@Injectable() +export abstract class DeepLinkProvider { + abstract serializeStateToQueryParams( + store: Store + ): Observable; + + abstract deserializeQueryParams(queryParams: SerializableQueryParams): object; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/effects/BUILD b/saved_models/tensorboard/tensorboard/webapp/app_routing/effects/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..3ea93b1a14f7f57d6fdf5324a7b4a74c994db482 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/effects/BUILD @@ -0,0 +1,52 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "effects", + srcs = [ + "app_routing_effects.ts", + "index.ts", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/app_routing:internal_utils", + "//tensorboard/webapp/app_routing:location", + "//tensorboard/webapp/app_routing:programmatical_navigation_module", + "//tensorboard/webapp/app_routing:route_config", + "//tensorboard/webapp/app_routing:route_registry", + "//tensorboard/webapp/app_routing:types", + "//tensorboard/webapp/app_routing/actions", + "//tensorboard/webapp/app_routing/store", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +ng_module( + name = "effects_tests", + testonly = True, + srcs = ["app_routing_effects_test.ts"], + deps = [ + ":effects", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/app_routing:location", + "//tensorboard/webapp/app_routing:programmatical_navigation_module", + "//tensorboard/webapp/app_routing:route_registry", + "//tensorboard/webapp/app_routing:testing", + "//tensorboard/webapp/app_routing:types", + "//tensorboard/webapp/app_routing/actions", + "//tensorboard/webapp/app_routing/store", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/effects/app_routing_effects.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/effects/app_routing_effects.ts new file mode 100644 index 0000000000000000000000000000000000000000..831f8bc6ec74cb9831892de598ba6f3c3819a39e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/effects/app_routing_effects.ts @@ -0,0 +1,283 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {Actions, createEffect, ofType} from '@ngrx/effects'; +import {Action, createAction, Store} from '@ngrx/store'; +import {merge, Observable, of} from 'rxjs'; +import { + debounceTime, + delay, + filter, + map, + switchMap, + tap, + withLatestFrom, +} from 'rxjs/operators'; + +import {State} from '../../app_state'; +import { + navigated, + navigating, + navigationRequested, + stateRehydratedFromUrl, +} from '../actions'; +import {areRoutesEqual, getRouteId} from '../internal_utils'; +import {Location} from '../location'; +import {ProgrammaticalNavigationModule} from '../programmatical_navigation_module'; +import {RouteConfigs} from '../route_config'; +import {RouteRegistryModule} from '../route_registry_module'; +import {getActiveRoute} from '../store/app_routing_selectors'; +import {Navigation, Route} from '../types'; + +/** @typehack */ import * as _typeHackNgrxEffects from '@ngrx/effects/effects'; +/** @typehack */ import * as _typeHackModels from '@ngrx/store/src/models'; +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +const initAction = createAction('[App Routing] Effects Init'); + +interface InternalNavigation extends Navigation { + browserInitiated?: boolean; +} + +@Injectable() +export class AppRoutingEffects { + private readonly routeConfigs: RouteConfigs | null; + + constructor( + private readonly actions$: Actions, + private readonly store: Store, + private readonly location: Location, + registry: RouteRegistryModule, + private readonly programmaticalNavModule: ProgrammaticalNavigationModule + ) { + this.routeConfigs = registry.getRouteConfigs(); + } + + private readonly onNavigationRequested$ = this.actions$.pipe( + ofType(navigationRequested) + ); + + private readonly onInit$: Observable = this.actions$ + .pipe(ofType(initAction)) + .pipe( + delay(0), + map(() => { + return { + pathname: this.location.getPath(), + queryParams: this.location.getSearch(), + replaceState: true, + browserInitiated: true, + }; + }) + ); + + private readonly userInitNavRoute$ = merge( + this.onNavigationRequested$, + this.onInit$, + this.location.onPopState().pipe( + map((navigation) => { + return {...navigation, browserInitiated: true}; + }) + ) + ).pipe( + map((navigation) => { + return { + ...navigation, + pathname: this.location.getResolvedPath(navigation.pathname), + }; + }), + map((navigationWithAbsolutePath) => { + const routeMatch = this.routeConfigs + ? this.routeConfigs.match(navigationWithAbsolutePath) + : null; + return { + routeMatch, + options: { + replaceState: navigationWithAbsolutePath.replaceState, + browserInitiated: navigationWithAbsolutePath.browserInitiated, + }, + }; + }) + ); + + private readonly programmticalNavRoute$ = this.actions$.pipe( + map((action) => { + return this.programmaticalNavModule.getNavigation(action); + }), + filter((nav) => { + return nav !== null; + }), + map((programmaticalNavigation) => { + const {routeKind, routeParams} = programmaticalNavigation!; + const routeMatch = this.routeConfigs + ? this.routeConfigs.matchByRouteKind(routeKind, routeParams) + : null; + return { + routeMatch, + options: { + replaceState: false, + browserInitiated: false, + }, + }; + }) + ); + + private readonly validatedRoute$ = merge( + this.userInitNavRoute$, + this.programmticalNavRoute$ + ).pipe( + filter(({routeMatch}) => Boolean(routeMatch)), + map((routeMatchAndOptions) => { + return { + routeMatch: routeMatchAndOptions.routeMatch!, + options: routeMatchAndOptions.options, + }; + }) + ); + + /** + * @export + */ + fireNavigatedIfValidRoute$ = createEffect(() => { + return this.validatedRoute$.pipe( + tap(({routeMatch, options}) => { + if (options.browserInitiated && routeMatch.deepLinkProvider) { + const rehydratingState = routeMatch.deepLinkProvider.deserializeQueryParams( + this.location.getSearch() + ); + this.store.dispatch( + stateRehydratedFromUrl({ + routeKind: routeMatch.routeKind, + partialState: rehydratingState, + }) + ); + } + }), + switchMap(({routeMatch, options}) => { + const navigationOptions = { + replaceState: options.replaceState ?? false, + }; + + const routeObservableWithoutQuery: Observable = of({ + routeKind: routeMatch.routeKind, + params: routeMatch.params, + pathname: routeMatch.pathname, + queryParams: [], + navigationOptions, + }); + + if (routeMatch.deepLinkProvider === null) { + return routeObservableWithoutQuery; + } + + return routeMatch + .deepLinkProvider!.serializeStateToQueryParams(this.store) + .pipe( + map((queryParams, index) => { + return { + routeKind: routeMatch.routeKind, + params: routeMatch.params, + pathname: routeMatch.pathname, + queryParams, + navigationOptions: + index === 0 + ? navigationOptions + : { + ...navigationOptions, + replaceState: true, + }, + }; + }) + ); + }), + tap((route) => { + // b/160185039: Allows the route store + router outlet to change + // before the route change so all components do not have to + // safeguard against the case when `routeId` (routeKind and + // routeParams) do not have unexpected values. Because we + // debounceTime, technically, it does not fire two actions + // sequentially. + this.store.dispatch(navigating({after: route})); + }), + // Let the router-outlet flush the change in a microtask. + debounceTime(0), + withLatestFrom(this.store.select(getActiveRoute)), + map(([route, oldRoute]) => { + return navigated({before: oldRoute, after: route}); + }) + ); + }); + + // TODO(stephanwlee): move this to a "view". + /** @export */ + changeBrowserUrl$ = createEffect( + () => { + return this.actions$.pipe( + ofType(navigated), + withLatestFrom(this.store.select(getActiveRoute)), + filter(([, route]) => Boolean(route)), + map(([navigatedAction, route]) => { + // The URL hash can be set via HashStorageComponent (which uses + // Polymer's tf-storage). DeepLinkProviders also modify the URL when + // a provider's serializeStateToQueryParams() emits. These result in + // the URL updated without the previous hash. HashStorageComponent + // makes no attempt to restore the hash, so it is dropped. + + // This results in bad behavior when refreshing (e.g. lost active + // plugin) and when changing dashboards (e.g. lost tagFilter). + + // TODO(b/169799696): either AppRouting should manage the URL entirely + // (including hash), or we make the app wait for AppRouting to + // initialize before setting the active plugin hash. + // See https://github.com/tensorflow/tensorboard/issues/4207. + const oldRoute = navigatedAction.before; + const preserveHash = + oldRoute === null || + getRouteId(oldRoute.routeKind, oldRoute.params) === + getRouteId(route!.routeKind, route!.params); + return { + preserveHash, + route: route!, + }; + }), + filter(({route}) => { + return !areRoutesEqual(route, { + pathname: this.location.getPath(), + queryParams: this.location.getSearch(), + }); + }), + tap(({preserveHash, route}) => { + if (route.navigationOptions.replaceState) { + this.location.replaceState( + this.location.getFullPathFromRouteOrNav(route, preserveHash) + ); + } else { + this.location.pushState( + this.location.getFullPathFromRouteOrNav(route, preserveHash) + ); + } + }) + ); + }, + {dispatch: false} + ); + + /** @export */ + ngrxOnInitEffects(): Action { + return initAction(); + } +} + +export const TEST_ONLY = {initAction}; diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/effects/app_routing_effects_test.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/effects/app_routing_effects_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..fffde9a441e0d287b36a9792e8edca6a13de4826 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/effects/app_routing_effects_test.ts @@ -0,0 +1,727 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {Component} from '@angular/core'; +import {fakeAsync, flush, TestBed, tick} from '@angular/core/testing'; +import {provideMockActions} from '@ngrx/effects/testing'; +import {Action, createAction, Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import {of, ReplaySubject} from 'rxjs'; + +import {State} from '../../app_state'; +import * as actions from '../actions'; +import {Location} from '../location'; +import { + NavigateToExperiments, + ProgrammaticalNavigationModule, +} from '../programmatical_navigation_module'; +import {RouteRegistryModule} from '../route_registry_module'; +import {getActiveRoute} from '../store/app_routing_selectors'; +import {buildRoute, provideLocationTesting, TestableLocation} from '../testing'; +import {Navigation, Route, RouteKind, SerializableQueryParams} from '../types'; + +import {AppRoutingEffects, TEST_ONLY} from './app_routing_effects'; + +@Component({selector: 'test', template: ''}) +class TestableComponent {} + +const testAction = createAction('[TEST] test actions'); + +describe('app_routing_effects', () => { + let effects: AppRoutingEffects; + let store: MockStore; + let action: ReplaySubject; + let location: Location; + let actualActions: Action[]; + let onPopStateSubject: ReplaySubject; + let serializeStateToQueryParamsSpy: jasmine.Spy; + let deserializeQueryParamsSpy: jasmine.Spy; + + beforeEach(async () => { + action = new ReplaySubject(1); + + serializeStateToQueryParamsSpy = jasmine + .createSpy() + .and.returnValue(of([])); + deserializeQueryParamsSpy = jasmine.createSpy().and.returnValue({a: 1}); + function routeFactory() { + return [ + { + routeKind: RouteKind.EXPERIMENT, + path: '/experiment/:experimentId', + ngComponent: TestableComponent, + }, + { + routeKind: RouteKind.EXPERIMENTS, + path: '/experiments', + ngComponent: TestableComponent, + }, + { + routeKind: RouteKind.COMPARE_EXPERIMENT, + path: '/compare', + ngComponent: TestableComponent, + deepLinkProvider: { + serializeStateToQueryParams: serializeStateToQueryParamsSpy, + deserializeQueryParams: deserializeQueryParamsSpy, + }, + }, + ]; + } + + function programmaticalNavigationFactory() { + return { + actionCreator: testAction, + lambda: (action: typeof testAction) => { + return { + routeKind: RouteKind.EXPERIMENTS, + routeParams: {}, + } as NavigateToExperiments; + }, + }; + } + + await TestBed.configureTestingModule({ + imports: [ + RouteRegistryModule.registerRoutes(routeFactory), + ProgrammaticalNavigationModule.registerProgrammaticalNavigation( + programmaticalNavigationFactory + ), + ], + providers: [ + provideMockActions(action), + AppRoutingEffects, + provideMockStore(), + provideLocationTesting(), + ], + }).compileComponents(); + + store = TestBed.inject>(Store) as MockStore; + + actualActions = []; + + location = TestBed.inject(TestableLocation) as Location; + onPopStateSubject = new ReplaySubject(1); + spyOn(location, 'onPopState').and.returnValue(onPopStateSubject); + store.overrideSelector(getActiveRoute, null); + + effects = TestBed.inject(AppRoutingEffects); + }); + + describe('fireNavigatedIfValidRoute$', () => { + let getPathSpy: jasmine.Spy; + let getSearchSpy: jasmine.Spy; + let actualActions: Action[]; + + beforeEach(() => { + actualActions = []; + + spyOn(store, 'dispatch').and.callFake((action: Action) => { + actualActions.push(action); + }); + effects.fireNavigatedIfValidRoute$.subscribe((action) => { + actualActions.push(action); + }); + + getPathSpy = spyOn(location, 'getPath'); + getSearchSpy = spyOn(location, 'getSearch'); + }); + + afterEach(fakeAsync(() => { + // Flush away all the asychronusity scheduled. + flush(); + })); + + it( + 'fires navigating and navigated when current activeRoute differs from ' + + 'new route', + fakeAsync(() => { + store.overrideSelector(getActiveRoute, null); + store.refreshState(); + + action.next( + actions.navigationRequested({ + pathname: '/experiments', + }) + ); + + expect(actualActions).toEqual([ + actions.navigating({ + after: buildRoute({ + routeKind: RouteKind.EXPERIMENTS, + params: {}, + pathname: '/experiments', + queryParams: [], + }), + }), + ]); + + tick(); + expect(actualActions).toEqual([ + jasmine.any(Object), + actions.navigated({ + before: null, + after: buildRoute({ + routeKind: RouteKind.EXPERIMENTS, + params: {}, + pathname: '/experiments', + queryParams: [], + }), + }), + ]); + }) + ); + + it('reacts to browser popstate', () => { + onPopStateSubject.next({ + pathname: '/experiments', + }); + + expect(actualActions).toEqual([ + actions.navigating({ + after: buildRoute({ + routeKind: RouteKind.EXPERIMENTS, + params: {}, + pathname: '/experiments', + queryParams: [], + navigationOptions: { + replaceState: false, + }, + }), + }), + ]); + }); + + describe('deeplink reads', () => { + beforeEach(() => { + store.overrideSelector(getActiveRoute, null); + store.refreshState(); + }); + + [ + { + name: 'init', + actionCreator: () => { + action.next(TEST_ONLY.initAction()); + }, + }, + { + name: 'popstate', + actionCreator: () => { + onPopStateSubject.next({pathname: '/compare'}); + }, + }, + ].forEach(({actionCreator, name}) => { + it(`dispatches stateRehydratedFromUrl on browser initiated ${name}`, fakeAsync(() => { + deserializeQueryParamsSpy.and.returnValue({a: 'A', b: 'B'}); + getPathSpy.and.returnValue('/compare'); + + actionCreator(); + tick(); + + expect(actualActions).toEqual([ + actions.stateRehydratedFromUrl({ + routeKind: RouteKind.COMPARE_EXPERIMENT, + partialState: {a: 'A', b: 'B'}, + }), + actions.navigating({ + after: buildRoute(({ + routeKind: RouteKind.COMPARE_EXPERIMENT, + params: {}, + pathname: '/compare', + queryParams: [], + // Do not care about the replaceState for this spec. + navigationOptions: jasmine.any(Object), + } as unknown) as Route), + }), + actions.navigated({ + before: null, + after: buildRoute(({ + routeKind: RouteKind.COMPARE_EXPERIMENT, + params: {}, + pathname: '/compare', + queryParams: [], + navigationOptions: jasmine.any(Object), + } as unknown) as Route), + }), + ]); + })); + }); + }); + + describe('deeplinks writes', () => { + let serializeStateToQueryParamsSubject: ReplaySubject; + + beforeEach(() => { + serializeStateToQueryParamsSubject = new ReplaySubject(1); + serializeStateToQueryParamsSpy.and.returnValue( + serializeStateToQueryParamsSubject + ); + store.overrideSelector(getActiveRoute, null); + store.refreshState(); + }); + + it( + 'waits for deeplink state to provide values before dispatching' + + ' navigating', + fakeAsync(() => { + action.next(actions.navigationRequested({pathname: '/compare'})); + + expect(actualActions).toEqual([]); + + serializeStateToQueryParamsSubject.next([]); + tick(); + + expect(actualActions).toEqual([ + actions.navigating({ + after: buildRoute({ + routeKind: RouteKind.COMPARE_EXPERIMENT, + params: {}, + pathname: '/compare', + queryParams: [], + navigationOptions: {replaceState: false}, + }), + }), + actions.navigated({ + before: null, + after: buildRoute({ + routeKind: RouteKind.COMPARE_EXPERIMENT, + params: {}, + pathname: '/compare', + queryParams: [], + navigationOptions: {replaceState: false}, + }), + }), + ]); + }) + ); + + it('fires actions when store emits changes', fakeAsync(() => { + action.next(actions.navigationRequested({pathname: '/compare'})); + + serializeStateToQueryParamsSubject.next([]); + tick(); + + serializeStateToQueryParamsSubject.next([{key: 'a', value: 'a_value'}]); + tick(); + + expect(actualActions).toEqual([ + // already tested by test spec above. + jasmine.any(Object), + jasmine.any(Object), + actions.navigating({ + after: buildRoute({ + routeKind: RouteKind.COMPARE_EXPERIMENT, + params: {}, + pathname: '/compare', + queryParams: [{key: 'a', value: 'a_value'}], + navigationOptions: {replaceState: true}, + }), + }), + actions.navigated({ + before: null, + after: buildRoute({ + routeKind: RouteKind.COMPARE_EXPERIMENT, + params: {}, + pathname: '/compare', + queryParams: [{key: 'a', value: 'a_value'}], + navigationOptions: {replaceState: true}, + }), + }), + ]); + })); + + it( + 'fires actions with replaceState = true to prevent pushing new ' + + 'history entry on state changes', + fakeAsync(() => { + action.next(actions.navigationRequested({pathname: '/compare'})); + + serializeStateToQueryParamsSubject.next([]); + tick(); + + serializeStateToQueryParamsSubject.next([ + {key: 'a', value: 'a_value'}, + ]); + tick(); + + expect(actualActions).toEqual([ + jasmine.any(Object), + jasmine.any(Object), + actions.navigating({ + after: buildRoute({ + routeKind: RouteKind.COMPARE_EXPERIMENT, + params: {}, + pathname: '/compare', + queryParams: [{key: 'a', value: 'a_value'}], + navigationOptions: {replaceState: true}, + }), + }), + actions.navigated({ + before: null, + after: buildRoute({ + routeKind: RouteKind.COMPARE_EXPERIMENT, + params: {}, + pathname: '/compare', + queryParams: [{key: 'a', value: 'a_value'}], + navigationOptions: {replaceState: true}, + }), + }), + ]); + }) + ); + }); + + describe('bootstrap', () => { + it('does not fire navigated when effects inits right away', () => { + getPathSpy.and.returnValue('/experiments'); + getSearchSpy.and.returnValue([]); + + action.next(effects.ngrxOnInitEffects()); + + expect(actualActions).toEqual([]); + }); + + it('fires navigated when effects inits after a tick', fakeAsync(() => { + getPathSpy.and.returnValue('/experiments'); + getSearchSpy.and.returnValue([]); + + action.next(effects.ngrxOnInitEffects()); + + tick(); + + expect(actualActions).toEqual([ + jasmine.any(Object), + jasmine.any(Object), + ]); + })); + + it('fires navigated with replaceState = true', fakeAsync(() => { + getPathSpy.and.returnValue('/experiments'); + getSearchSpy.and.returnValue([]); + + action.next(effects.ngrxOnInitEffects()); + + tick(); + + expect(actualActions).toEqual([ + actions.navigating({ + after: buildRoute({ + routeKind: RouteKind.EXPERIMENTS, + params: {}, + pathname: '/experiments', + queryParams: [], + navigationOptions: { + replaceState: true, + }, + }), + }), + actions.navigated({ + before: null, + after: buildRoute({ + routeKind: RouteKind.EXPERIMENTS, + params: {}, + pathname: '/experiments', + queryParams: [], + navigationOptions: { + replaceState: true, + }, + }), + }), + ]); + })); + }); + + it('resolves pathname from navigationRequest', () => { + const getResolvePathSpy = spyOn( + location, + 'getResolvedPath' + ).and.returnValue('/experiments'); + store.overrideSelector(getActiveRoute, null); + store.refreshState(); + + action.next( + actions.navigationRequested({ + pathname: '../experiments', + }) + ); + + expect(actualActions).toEqual([ + actions.navigating({ + after: buildRoute({ + routeKind: RouteKind.EXPERIMENTS, + params: {}, + pathname: '/experiments', + queryParams: [], + }), + }), + ]); + expect(getResolvePathSpy).toHaveBeenCalledWith('../experiments'); + }); + + it('fires action even when prev route is the same as new route', fakeAsync(() => { + store.overrideSelector( + getActiveRoute, + buildRoute({ + routeKind: RouteKind.EXPERIMENTS, + pathname: '/experiments', + queryParams: [], + }) + ); + store.refreshState(); + + action.next( + actions.navigationRequested({ + pathname: '/experiments', + }) + ); + + tick(); + expect(actualActions).toEqual([ + actions.navigating({ + after: buildRoute({ + routeKind: RouteKind.EXPERIMENTS, + pathname: '/experiments', + queryParams: [], + }), + }), + actions.navigated({ + before: buildRoute({ + routeKind: RouteKind.EXPERIMENTS, + pathname: '/experiments', + queryParams: [], + }), + after: buildRoute({ + routeKind: RouteKind.EXPERIMENTS, + pathname: '/experiments', + queryParams: [], + }), + }), + ]); + })); + + describe('programmatical navigation', () => { + it('navigates on the action', () => { + store.overrideSelector(getActiveRoute, null); + store.refreshState(); + + action.next(testAction()); + + expect(actualActions).toEqual([ + actions.navigating({ + after: buildRoute({ + routeKind: RouteKind.EXPERIMENTS, + params: {}, + pathname: '/experiments', + queryParams: [], + }), + }), + ]); + }); + }); + }); + + describe('changeBrowserUrl$', () => { + let replaceStateSpy: jasmine.Spy; + let pushStateSpy: jasmine.Spy; + let getHashSpy: jasmine.Spy; + let getPathSpy: jasmine.Spy; + let getSearchSpy: jasmine.Spy; + + beforeEach(() => { + effects.changeBrowserUrl$.subscribe(() => {}); + + replaceStateSpy = spyOn(location, 'replaceState'); + pushStateSpy = spyOn(location, 'pushState'); + getHashSpy = spyOn(location, 'getHash'); + getPathSpy = spyOn(location, 'getPath'); + getSearchSpy = spyOn(location, 'getSearch'); + }); + + it('noops if the new route matches current URL', () => { + const activeRoute = buildRoute({ + routeKind: RouteKind.EXPERIMENTS, + pathname: '/experiments', + queryParams: [], + navigationOptions: { + replaceState: false, + }, + }); + store.overrideSelector(getActiveRoute, activeRoute); + store.refreshState(); + getHashSpy.and.returnValue(''); + getPathSpy.and.returnValue('/experiments'); + getSearchSpy.and.returnValue([]); + + action.next( + actions.navigated({ + before: null, + after: activeRoute, + }) + ); + + expect(pushStateSpy).not.toHaveBeenCalled(); + expect(replaceStateSpy).not.toHaveBeenCalled(); + }); + + it('pushes state if path and search do not match new route on navigated', () => { + const activeRoute = buildRoute({ + routeKind: RouteKind.EXPERIMENTS, + pathname: '/experiments', + queryParams: [], + navigationOptions: { + replaceState: false, + }, + }); + store.overrideSelector(getActiveRoute, activeRoute); + store.refreshState(); + getHashSpy.and.returnValue(''); + getPathSpy.and.returnValue('meow'); + getSearchSpy.and.returnValue([]); + + action.next( + actions.navigated({ + before: null, + after: activeRoute, + }) + ); + + expect(pushStateSpy).toHaveBeenCalledWith('/experiments'); + }); + + it('replaces state if route navigationOption says so', () => { + const activeRoute = buildRoute({ + routeKind: RouteKind.EXPERIMENTS, + pathname: '/experiments', + queryParams: [], + navigationOptions: { + replaceState: true, + }, + }); + store.overrideSelector(getActiveRoute, activeRoute); + store.refreshState(); + getHashSpy.and.returnValue(''); + getPathSpy.and.returnValue('meow'); + getSearchSpy.and.returnValue([]); + + action.next( + actions.navigated({ + before: null, + after: activeRoute, + }) + ); + + expect(pushStateSpy).not.toHaveBeenCalled(); + expect(replaceStateSpy).toHaveBeenCalledWith('/experiments'); + }); + + it('preserves hash upon replace for initial navigation', () => { + const activeRoute = buildRoute({ + routeKind: RouteKind.EXPERIMENTS, + pathname: '/experiments', + queryParams: [], + navigationOptions: { + replaceState: true, + }, + }); + store.overrideSelector(getActiveRoute, activeRoute); + store.refreshState(); + getHashSpy.and.returnValue('#foo'); + getPathSpy.and.returnValue('meow'); + getSearchSpy.and.returnValue([]); + + action.next( + actions.navigated({ + before: null, + after: activeRoute, + }) + ); + + expect(replaceStateSpy).toHaveBeenCalledWith('/experiments#foo'); + }); + + // This hash preservation spec may become obsolete. If we enable app_routing + // to properly set the URL hash, and all TB embedders use app_routing, then + // this spec can be removed. + it('preserves hash upon navigations to the same route id', () => { + const activeRoute = buildRoute({ + routeKind: RouteKind.EXPERIMENT, + pathname: '/experiment', + queryParams: [], + navigationOptions: { + replaceState: true, + }, + }); + const nextActiveRoute = buildRoute({ + routeKind: RouteKind.EXPERIMENT, + pathname: '/experiment', + queryParams: [{key: 'q', value: 'new_value'}], + navigationOptions: { + replaceState: true, + }, + }); + store.overrideSelector(getActiveRoute, nextActiveRoute); + store.refreshState(); + getHashSpy.and.returnValue('#foo'); + getPathSpy.and.returnValue('meow'); + getSearchSpy.and.returnValue([]); + + action.next( + actions.navigated({ + before: activeRoute, + after: nextActiveRoute, + }) + ); + + expect(replaceStateSpy).toHaveBeenCalledWith( + '/experiment?q=new_value#foo' + ); + }); + + it('discards hash upon navigations to a new route id', () => { + const activeRoute = buildRoute({ + routeKind: RouteKind.EXPERIMENTS, + pathname: '/experiments', + queryParams: [], + navigationOptions: { + replaceState: true, + }, + }); + const nextActiveRoute = buildRoute({ + routeKind: RouteKind.EXPERIMENT, + pathname: '/experiment', + // Changing route params produces a new route id. + params: {experimentId: '123'}, + queryParams: [], + navigationOptions: { + replaceState: true, + }, + }); + store.overrideSelector(getActiveRoute, nextActiveRoute); + store.refreshState(); + getHashSpy.and.returnValue('#foo'); + getPathSpy.and.returnValue('meow'); + getSearchSpy.and.returnValue([]); + + action.next( + actions.navigated({ + before: activeRoute, + after: nextActiveRoute, + }) + ); + + expect(replaceStateSpy).toHaveBeenCalledWith('/experiment'); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/effects/index.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/effects/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..682833c8ad8080991167e1551e6929bd84d5b6e8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/effects/index.ts @@ -0,0 +1,15 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export * from './app_routing_effects'; diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/internal_utils.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/internal_utils.ts new file mode 100644 index 0000000000000000000000000000000000000000..a44b4984794f9842e8476eb5d3bd9190d8c5d0b4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/internal_utils.ts @@ -0,0 +1,140 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + CompareRouteParams, + DEFAULT_EXPERIMENT_ID, + ExperimentRouteParams, + Route, + RouteKind, + RouteParams, + SerializableQueryParams, +} from './types'; + +/** + * Parses short experiment name to id map encoded in string for compare route. + * + * e.g., /compare/exp1:12345,exp2:99999 results, + * [ + * {name: 'exp1', id: '12345'}, + * {name: 'exp2', id: '99999'} + * ] + */ +export function parseCompareExperimentStr( + eidStr: string +): Array<{name: string; id: string}> { + return eidStr.split(',').map((nameToIdStr) => { + const colonIndex = nameToIdStr.indexOf(':'); + if (colonIndex < 0) { + throw new Error(`Expect colon delimiting name and ID: ${nameToIdStr}`); + } + const name = nameToIdStr.slice(0, colonIndex); + const id = nameToIdStr.slice(colonIndex + 1); + + if (!name) { + throw new Error(`Expect name to be non-falsy: ${nameToIdStr}`); + } + + if (!id) { + throw new Error(`Expect id to be non-falsy: ${nameToIdStr}`); + } + + return {name, id}; + }); +} + +/** + * Returns experimentIds from route parameter. For a route that does not contain + * any experiment ids, it returns null. + */ +export function getExperimentIdsFromRouteParams( + routeKind: RouteKind, + params: RouteParams +): string[] | null { + switch (routeKind) { + case RouteKind.EXPERIMENT: { + // The route may rely on the implicit, default experiment id, if the URL + // does not contain the experiment param. + if (Object.prototype.hasOwnProperty.call(params, 'experimentId')) { + return [(params as ExperimentRouteParams).experimentId]; + } + return [DEFAULT_EXPERIMENT_ID]; + } + case RouteKind.COMPARE_EXPERIMENT: { + const typedParams = params as CompareRouteParams; + return parseCompareExperimentStr(typedParams.experimentIds).map( + ({id}) => id + ); + } + case RouteKind.EXPERIMENTS: + default: + return null; + } +} + +/** + * Returns an identifier that identifies known top-level routes. It is similar + * to `url` but ignores hash and returns "unknown" for unknown routes. + */ +export function getRouteId(routeKind: RouteKind, params: RouteParams): string { + switch (routeKind) { + case RouteKind.COMPARE_EXPERIMENT: { + const typedParams = params as CompareRouteParams; + return `${routeKind}/${typedParams.experimentIds}`; + } + case RouteKind.EXPERIMENT: { + const typedParams = params as ExperimentRouteParams; + return `${routeKind}/${typedParams.experimentId}`; + } + case RouteKind.EXPERIMENTS: + return String(routeKind); + default: + return ''; + } +} + +export function createURLSearchParamsFromSerializableQueryParams( + params: SerializableQueryParams +): URLSearchParams { + const searchParams = new URLSearchParams(); + for (const {key, value} of params) { + searchParams.append(key, value); + } + return searchParams; +} + +/** + * Checks whether two RouteOrNavs are equal. RouteOrNav is defined to be Route + * or Navigation. + * + * Limitations: currently, they only match pathname and query parameter (order + * of the params have to be equal too; e.g., a=1&b=2 will not equal b=2&a=1). + */ +export function areRoutesEqual( + aRoute: Pick, + bRoute: Pick +): boolean { + // TODO(stephanwlee): support hashes. + if ( + aRoute.pathname !== bRoute.pathname || + aRoute.queryParams.length !== bRoute.queryParams.length + ) { + return false; + } + + return aRoute.queryParams.every((paramA, index) => { + const paramB = bRoute.queryParams[index]; + return paramA.key === paramB.key && paramA.value === paramB.value; + }); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/internal_utils_test.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/internal_utils_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..06f3c6483468181bba4b056a86779400f3d71fbb --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/internal_utils_test.ts @@ -0,0 +1,235 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import * as utils from './internal_utils'; +import {RouteKind} from './types'; + +describe('app_routing/utils', () => { + describe('#parseCompareExperimentStr', () => { + it('parses the map correctly', () => { + expect(utils.parseCompareExperimentStr('exp1:123,exp2:999')).toEqual([ + {name: 'exp1', id: '123'}, + {name: 'exp2', id: '999'}, + ]); + }); + + it('handles single name map, too', () => { + expect(utils.parseCompareExperimentStr('exp1:123')).toEqual([ + {name: 'exp1', id: '123'}, + ]); + }); + + it('permits colons in individual experiment IDs', () => { + expect( + utils.parseCompareExperimentStr('exp1:foo:my-universe:123') + ).toEqual([{name: 'exp1', id: 'foo:my-universe:123'}]); + }); + + it('throws error when the map is malformed', () => { + expect(() => utils.parseCompareExperimentStr('exp1')).toThrow(); + expect(() => utils.parseCompareExperimentStr('exp1:')).toThrow(); + expect(() => utils.parseCompareExperimentStr('foo,bar,baz')).toThrow(); + }); + }); + + describe('#getExperimentIdsFromRouteParams', () => { + it('returns ids from compare route', () => { + const actual = utils.getExperimentIdsFromRouteParams( + RouteKind.COMPARE_EXPERIMENT, + {experimentIds: 'e1:1,e2:2'} + ); + expect(actual).toEqual(['1', '2']); + }); + + it('returns id from experiment route', () => { + const actual = utils.getExperimentIdsFromRouteParams( + RouteKind.EXPERIMENT, + {experimentId: '1234'} + ); + expect(actual).toEqual(['1234']); + }); + + it('returns null for UNKNOWN route', () => { + const actual = utils.getExperimentIdsFromRouteParams( + RouteKind.UNKNOWN, + {} + ); + expect(actual).toBeNull(); + }); + + it('returns null for EXPERIMENTS route', () => { + const actual = utils.getExperimentIdsFromRouteParams( + RouteKind.EXPERIMENTS, + {} + ); + expect(actual).toBeNull(); + }); + }); + + describe('getRouteId', () => { + [ + { + kind: RouteKind.COMPARE_EXPERIMENT, + params: {experimentIds: 'bar:123'}, + expectedVal: `${RouteKind.COMPARE_EXPERIMENT}/bar:123`, + }, + { + kind: RouteKind.EXPERIMENTS, + params: {}, + expectedVal: `${RouteKind.EXPERIMENTS}`, + }, + { + kind: RouteKind.EXPERIMENT, + params: {experimentId: '123'}, + expectedVal: `${RouteKind.EXPERIMENT}/123`, + }, + { + kind: RouteKind.UNKNOWN, + params: {random: 1}, + expectedVal: '', + }, + ].forEach(({kind, params, expectedVal}) => { + it(`returns unique identifier for ${RouteKind[kind]}`, () => { + const actual = utils.getRouteId(kind, params); + expect(actual).toBe(expectedVal); + }); + }); + + it('uniquely differentiate compare of same eids when display names differ', () => { + const id1 = utils.getRouteId(RouteKind.COMPARE_EXPERIMENT, { + experimentIds: 'foo:123', + }); + const id2 = utils.getRouteId(RouteKind.COMPARE_EXPERIMENT, { + experimentIds: 'bar:123', + }); + expect(id1).toBe(`${RouteKind.COMPARE_EXPERIMENT}/foo:123`); + expect(id2).toBe(`${RouteKind.COMPARE_EXPERIMENT}/bar:123`); + }); + }); + + describe('#createURLSearchParamsFromSerializableQueryParams', () => { + it('creates URLSearchParams', () => { + const param = utils.createURLSearchParamsFromSerializableQueryParams([ + {key: 'a', value: '1'}, + {key: 'b', value: '2'}, + {key: 'a', value: '3'}, + {key: 'c', value: ''}, + ]); + + expect(param.getAll('a')).toEqual(['1', '3']); + expect(param.getAll('b')).toEqual(['2']); + expect(param.getAll('c')).toEqual(['']); + }); + }); + + describe('#areRoutesEqual', () => { + it('returns true if they are equal', () => { + expect( + utils.areRoutesEqual( + { + pathname: '/foo', + queryParams: [], + }, + { + pathname: '/foo', + queryParams: [], + } + ) + ).toBe(true); + + expect( + utils.areRoutesEqual( + { + pathname: '/foo/bar', + queryParams: [{key: 'a', value: '1'}], + }, + { + pathname: '/foo/bar', + queryParams: [{key: 'a', value: '1'}], + } + ) + ).toBe(true); + }); + + it('returns false if paths are different', () => { + expect( + utils.areRoutesEqual( + { + pathname: '/foo/bar', + queryParams: [], + }, + { + pathname: '/foo/baz', + queryParams: [], + } + ) + ).toBe(false); + }); + + it('returns false if query params values are different', () => { + expect( + utils.areRoutesEqual( + { + pathname: '/foo/bar', + queryParams: [{key: 'a', value: '1'}], + }, + { + pathname: '/foo/bar', + queryParams: [{key: 'a', value: '2'}], + } + ) + ).toBe(false); + }); + + it('returns false if query params has more values', () => { + expect( + utils.areRoutesEqual( + { + pathname: '/foo/bar', + queryParams: [{key: 'a', value: '1'}], + }, + { + pathname: '/foo/bar', + queryParams: [ + {key: 'a', value: '1'}, + {key: 'a', value: '2'}, + ], + } + ) + ).toBe(false); + }); + + it('returns false when orders are different', () => { + expect( + utils.areRoutesEqual( + { + pathname: '/foo/bar', + queryParams: [ + {key: 'b', value: '2'}, + {key: 'a', value: '1'}, + ], + }, + { + pathname: '/foo/bar', + queryParams: [ + {key: 'a', value: '1'}, + {key: 'b', value: '2'}, + ], + } + ) + ).toBe(false); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/location.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/location.ts new file mode 100644 index 0000000000000000000000000000000000000000..c4e8e70e30c4b597331170dd765d46c53510c842 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/location.ts @@ -0,0 +1,122 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {fromEvent, Observable} from 'rxjs'; +import {map} from 'rxjs/operators'; + +import {createURLSearchParamsFromSerializableQueryParams} from './internal_utils'; +import {Navigation, Route, SerializableQueryParams} from './types'; + +export interface LocationInterface { + getSearch(): SerializableQueryParams; + + getHash(): string; + + getPath(): string; + + replaceState(path: string): void; + + pushState(path: string): void; + + onPopState(): Observable; + + getResolvedPath(relativePath: string): string; + + getFullPathFromRouteOrNav(routeLike: Route | Navigation): string; +} + +const utils = { + getHref() { + return window.location.href; + }, +}; + +function isNavigation( + navOrRoute: Navigation | Route +): navOrRoute is Navigation { + return ( + navOrRoute.hasOwnProperty('pathname') && + !navOrRoute.hasOwnProperty('queryParams') + ); +} + +@Injectable() +export class Location implements LocationInterface { + getSearch(): SerializableQueryParams { + const searchParams = new URLSearchParams(window.location.search); + const serializableSearchParams: SerializableQueryParams = []; + + // URLSearchParams is a Iterable but TypeScript does not know about that. + searchParams.forEach((value: string, key: string) => { + serializableSearchParams.push({key, value}); + }); + + return serializableSearchParams; + } + + getHash(): string { + return window.location.hash; + } + + getPath(): string { + return window.location.pathname; + } + + replaceState(path: string): void { + window.history.replaceState(null, '', path); + } + + pushState(path: string): void { + window.history.pushState(null, '', path); + } + + onPopState(): Observable { + return fromEvent(window, 'popstate').pipe( + map(() => { + return { + pathname: this.getPath(), + queryParams: this.getSearch(), + }; + }) + ); + } + + getResolvedPath(relativePath: string): string { + const url = new URL(relativePath, utils.getHref()); + return url.pathname; + } + + getFullPathFromRouteOrNav( + routeLike: Route | Navigation, + shouldPreserveHash?: boolean + ): string { + // TODO(stephanwlee): support hashes in the routeLike. + const pathname = this.getResolvedPath(routeLike.pathname); + let search = ''; + if (!isNavigation(routeLike) && routeLike.queryParams.length) { + search = + '?' + + createURLSearchParamsFromSerializableQueryParams( + routeLike.queryParams + ).toString(); + } + const hash = shouldPreserveHash ? this.getHash() : ''; + return `${pathname}${search}${hash}`; + } +} + +export const TEST_ONLY = { + utils, +}; diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/location_module.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/location_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..298c2e25e8fdc668a3fb5de98fa626984b5c7bfa --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/location_module.ts @@ -0,0 +1,21 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; +import {Location} from './location'; + +@NgModule({ + providers: [Location], +}) +export class LocationModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/location_test.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/location_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..f5e71de026cc74a1d1b5a8bd2234b7e9a2262173 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/location_test.ts @@ -0,0 +1,74 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {Location, TEST_ONLY} from './location'; + +describe('location', () => { + let location: Location; + + beforeEach(() => { + location = new Location(); + }); + + describe('#getResolvedPath', () => { + it('forms absolute path from current href', () => { + spyOn(TEST_ONLY.utils, 'getHref').and.returnValue( + 'https://t.b/is/cool/product' + ); + expect(location.getResolvedPath('/foo')).toBe('/foo'); + }); + + it('resolves absolute path', () => { + spyOn(TEST_ONLY.utils, 'getHref').and.returnValue( + 'https://t.b/is/cool/product' + ); + expect(location.getResolvedPath('/foo/bar')).toBe('/foo/bar'); + }); + + it('resolves relative path', () => { + spyOn(TEST_ONLY.utils, 'getHref').and.returnValue( + 'https://t.b/is/cool/product' + ); + expect(location.getResolvedPath('../foo/')).toBe('/is/foo/'); + }); + + it('resolves path without slash or dot', () => { + spyOn(TEST_ONLY.utils, 'getHref').and.returnValue( + 'https://t.b/is/cool/product' + ); + expect(location.getResolvedPath('foo/')).toBe('/is/cool/foo/'); + }); + }); + + describe('#getFullPathFromRouteOrNav', () => { + it('forms the full path', () => { + expect( + location.getFullPathFromRouteOrNav({ + pathname: '/foo/bar/baz', + queryParams: [{key: 'a', value: '1'}], + }) + ).toBe('/foo/bar/baz?a=1'); + }); + + it('does not add "?" when queryParams is empty', () => { + expect( + location.getFullPathFromRouteOrNav({ + pathname: '/foo', + queryParams: [], + }) + ).toBe('/foo'); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/programmatical_navigation_module.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/programmatical_navigation_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..6bbfc5e96ef21a462e415dc0eefcd59ce5843e88 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/programmatical_navigation_module.ts @@ -0,0 +1,100 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Inject, ModuleWithProviders, NgModule, Optional} from '@angular/core'; +import {Action, ActionCreator, Creator} from '@ngrx/store'; + +import { + NAVIGATION_PROVIDER, + NavigationLambda, + ProgrammaticalNavigation, +} from './programmatical_navigation_types'; + +export { + NavigateToCompare, + NavigateToExperiment, + NavigateToExperiments, +} from './programmatical_navigation_types'; + +@NgModule({}) +export class ProgrammaticalNavigationModule { + private readonly providers = new Map(); + + constructor( + @Optional() @Inject(NAVIGATION_PROVIDER) providers: NavigationLambda[] + ) { + for (const provider of providers || []) { + if (this.providers.has(provider.actionCreator.type)) { + throw new RangeError( + `"${provider.actionCreator.type}" is already registered for nav.` + + ' Multiple navigations on same kick is not allowed.' + ); + } + this.providers.set(provider.actionCreator.type, provider.lambda); + } + } + + getNavigation(action: Action): ProgrammaticalNavigation | null { + const lambda = this.providers.get(action.type); + if (!lambda) { + return null; + } + return lambda(action); + } + + /** + * An NgModule that provides programmmatic navigation routines. + * On an action subscribed fire, it invokes a navigation. + * + * WARN: internally, it is implemented with Ngrx composite actions so there + * may be a timing issue. Mitigate the issue by account for potential data + * inconsistency issue in the container. + * + * function provider() { + * return { + * actionCreator: somethingHappened, + * lambda: (action: typeof somethingHappened) => { + * return {routeKind: RouteKind.EXPERIMENT, routeParams: {}}; + * }, + * }; + * } + * + * @NgModule({ + * imports: [ + * RouteRegistryModule.registerProgrammaticalNavigation(provider), + * RouteRegistryModule.registerProgrammaticalNavigation(anotherProvider), + * ], + * }) + */ + static registerProgrammaticalNavigation< + AC extends ActionCreator, + U extends Action = Action + >( + providerFactory: () => { + actionCreator: AC; + lambda: (action: U) => ProgrammaticalNavigation; + } + ): ModuleWithProviders { + return { + ngModule: ProgrammaticalNavigationModule, + providers: [ + { + provide: NAVIGATION_PROVIDER, + multi: true, + useFactory: providerFactory, + }, + ], + }; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/programmatical_navigation_module_test.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/programmatical_navigation_module_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..ed532cc6db80157f8909a6a36940b700058884c9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/programmatical_navigation_module_test.ts @@ -0,0 +1,129 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {TestBed} from '@angular/core/testing'; +import {createAction} from '@ngrx/store'; + +import { + NavigateToCompare, + NavigateToExperiments, + ProgrammaticalNavigationModule, +} from './programmatical_navigation_module'; +import {RouteKind} from './types'; + +const testAction = createAction('[TEST] My Test Action'); +const otherTestAction = createAction('[TEST] My Other Test Action'); + +describe('programmatical navigation module test', () => { + it('registers a navigation provider', async () => { + function provider() { + return { + actionCreator: testAction, + lambda: (action: typeof testAction) => { + if (action.type !== testAction.type) { + throw new Error( + 'Expected be invoked only with the action that I subscribed.' + ); + } + return { + routeKind: RouteKind.EXPERIMENTS, + routeParams: {}, + } as NavigateToExperiments; + }, + }; + } + + await TestBed.configureTestingModule({ + imports: [ + ProgrammaticalNavigationModule.registerProgrammaticalNavigation( + provider + ), + ], + }).compileComponents(); + + const module = TestBed.inject(ProgrammaticalNavigationModule); + expect(module.getNavigation(testAction())).toEqual({ + routeKind: RouteKind.EXPERIMENTS, + routeParams: {}, + }); + }); + + it('returns null when getting nav for not provided action', async () => { + function provider() { + return { + actionCreator: testAction, + lambda: (action: typeof testAction) => { + return { + routeKind: RouteKind.EXPERIMENTS, + routeParams: {}, + } as NavigateToExperiments; + }, + }; + } + + await TestBed.configureTestingModule({ + imports: [ + ProgrammaticalNavigationModule.registerProgrammaticalNavigation( + provider + ), + ], + }).compileComponents(); + + const module = TestBed.inject(ProgrammaticalNavigationModule); + expect(module.getNavigation(otherTestAction())).toBe(null); + }); + + it('throws invariant error if same action is registered twice', async () => { + function provider1() { + return { + actionCreator: testAction, + lambda: (action: typeof testAction) => { + return { + routeKind: RouteKind.EXPERIMENTS, + routeParams: {}, + } as NavigateToExperiments; + }, + }; + } + + function provider2() { + return { + actionCreator: testAction, + lambda: (action: typeof testAction) => { + return { + routeKind: RouteKind.COMPARE_EXPERIMENT, + routeParams: {experimentIds: 'foo'}, + } as NavigateToCompare; + }, + }; + } + + await TestBed.configureTestingModule({ + imports: [ + ProgrammaticalNavigationModule.registerProgrammaticalNavigation( + provider1 + ), + ProgrammaticalNavigationModule.registerProgrammaticalNavigation( + provider2 + ), + ], + }).compileComponents(); + + expect(() => TestBed.inject(ProgrammaticalNavigationModule)).toThrowError( + RangeError, + /already registered for nav./ + ); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/programmatical_navigation_types.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/programmatical_navigation_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..de1d788c7125a415ca38d908af0535a3ceb95266 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/programmatical_navigation_types.ts @@ -0,0 +1,47 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {InjectionToken} from '@angular/core'; +import {Action, ActionCreator, Creator} from '@ngrx/store'; + +import {CompareRouteParams, ExperimentRouteParams, RouteKind} from './types'; + +export const NAVIGATION_PROVIDER = new InjectionToken( + '[App Routing] Programmatical Navigation Provider' +); + +export interface NavigateToExperiment { + routeKind: RouteKind.EXPERIMENT; + routeParams: ExperimentRouteParams; +} + +export interface NavigateToCompare { + routeKind: RouteKind.COMPARE_EXPERIMENT; + routeParams: CompareRouteParams; +} + +export interface NavigateToExperiments { + routeKind: RouteKind.EXPERIMENTS; + routeParams: {}; +} + +export type ProgrammaticalNavigation = + | NavigateToExperiment + | NavigateToCompare + | NavigateToExperiments; + +export interface NavigationLambda { + actionCreator: ActionCreator; + lambda(action: Action): ProgrammaticalNavigation; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/route_config.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/route_config.ts new file mode 100644 index 0000000000000000000000000000000000000000..fbdabf8c295dab09a4dac337a40bb9c9ab45e035 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/route_config.ts @@ -0,0 +1,388 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ConcreteRouteDef, RouteDef} from './route_config_types'; +import {Route, RouteKind, RouteParams} from './types'; + +interface NegativeMatch { + result: false; +} + +interface PositiveMatch { + result: true; + params: RouteParams; + pathParts: string[]; + isRedirection: boolean; +} + +type Match = NegativeMatch | PositiveMatch; + +type PathPartMatch = + | { + isParamPathPart: false; + partMatched: boolean; + } + | { + partMatched: boolean; + isParamPathPart: true; + paramName: string; + paramValue: string; + }; + +type PathMatcher = (pathPartQuery: string) => PathPartMatch; + +interface NonParamPathFragment { + pathPart: string; + isParam: false; +} + +interface ParamPathFragment { + pathPart: string; + isParam: true; + paramName: string; +} + +type PathFragment = ParamPathFragment | NonParamPathFragment; + +function getPathFragments(path: string): PathFragment[] { + const parts = getPathParts(path); + return parts.map((part) => { + const isParam = part.startsWith(':'); + if (!isParam) { + return {pathPart: part, isParam}; + } + return { + pathPart: part, + isParam: true, + paramName: part.slice(1), + }; + }); +} + +class RouteConfigMatcher { + private readonly pathFragments: PathFragment[]; + private readonly pathMatchers: PathMatcher[]; + private readonly redirectionFragments: PathFragment[] | null; + + constructor(readonly config: RouteDef) { + this.validateConfig(config); + this.pathFragments = getPathFragments(config.path); + this.pathMatchers = this.getPathMatchers(this.pathFragments); + this.redirectionFragments = + config.routeKind === null + ? getPathFragments(config.redirectionPath) + : null; + } + + private validateConfig({path}: RouteDef) { + if (!path.startsWith('/')) { + throw new RangeError(`config.path should start with '/'. ${path}`); + } + + let colonIndex = 0; + while ((colonIndex = path.indexOf(':', colonIndex + 1)) >= 0) { + if (path[colonIndex - 1] !== '/') { + throw new RangeError( + `config.path parameter should come after '/'. ${path}` + ); + } + if (path[colonIndex + 1] === undefined || path[colonIndex + 1] === '/') { + throw new RangeError( + `config.path parameter should have non-empty name. ${path}` + ); + } + } + } + + private getPathMatchers(pathFragments: PathFragment[]): PathMatcher[] { + return pathFragments.map((fragment) => { + const {pathPart} = fragment; + if (fragment.isParam) { + return (pathPartQuery: string) => { + return { + isParamPathPart: true, + partMatched: true, + paramName: fragment.paramName, + paramValue: pathPartQuery, + }; + }; + } + return (pathPartQuery: string) => { + return { + isParamPathPart: false, + partMatched: pathPartQuery === pathPart, + }; + }; + }); + } + + /** + * In case of parameter reprojection failure (cannot create redirection + * pathname from parameter present in current pathname), it throws a + * RangeError. + */ + match(pathParts: string[]): Match { + let combinedParams: Record = {}; + if (this.pathMatchers.length !== pathParts.length) { + return {result: false}; + } + + let pathIndex = 0; + for (const matcher of this.pathMatchers) { + const pathToMatch = pathParts[pathIndex++]; + const match = matcher(pathToMatch); + if (!match.partMatched) { + return {result: false}; + } + if (match.isParamPathPart) { + combinedParams = { + ...combinedParams, + [match.paramName]: match.paramValue, + }; + } + } + + if (this.redirectionFragments) { + const newPathParts = this.reprojectPathByParams( + this.redirectionFragments, + combinedParams + ); + return { + result: true, + params: combinedParams, + pathParts: newPathParts, + isRedirection: true, + }; + } + + return { + result: true, + params: combinedParams, + pathParts, + isRedirection: false, + }; + } + + /** + * Reprojects route parameter values to path fragments for path parts. + */ + private reprojectPathByParams( + pathFragments: PathFragment[], + params: RouteParams + ): string[] { + const pathParts: string[] = []; + for (const fragment of pathFragments) { + if (fragment.isParam) { + const {paramName} = fragment; + if (!params.hasOwnProperty(paramName)) { + throw new RangeError( + `Failed to reproject parameter. "${paramName}" parameter ` + + 'should be present.' + ); + } + pathParts.push(params[paramName]); + } else { + pathParts.push(fragment.pathPart); + } + } + return pathParts; + } + + /** + * In case of parameter projection failure (cannot create pathname), it throws + * a RangeError. + */ + matchByParams(params: RouteParams): PositiveMatch { + const pathParts = this.reprojectPathByParams(this.pathFragments, params); + + return { + result: true, + params, + pathParts, + isRedirection: false, + }; + } +} + +export interface RouteMatch { + routeKind: Route['routeKind']; + pathname: Route['pathname']; + params: Route['params']; + deepLinkProvider: ConcreteRouteDef['deepLinkProvider'] | null; +} + +export class RouteConfigs { + private readonly routeKindToConfigMatchers: Map< + RouteKind, + RouteConfigMatcher + >; + private readonly configMatchers: RouteConfigMatcher[]; + private readonly defaultRouteConfig: RouteConfigMatcher | null; + + constructor( + configs: RouteDef[], + private readonly maxRedirection: number = 3 + ) { + if (maxRedirection < 0) { + throw new RangeError('maxRedirection has to be non-negative number'); + } + + this.validateRouteConfigs(configs); + + this.defaultRouteConfig = null; + this.routeKindToConfigMatchers = new Map(); + this.configMatchers = []; + + for (const config of configs) { + const matcher = new RouteConfigMatcher(config); + + this.configMatchers.push(matcher); + + if (matcher.config.routeKind !== null) { + this.routeKindToConfigMatchers.set(matcher.config.routeKind, matcher); + + if (matcher.config.defaultRoute) { + this.defaultRouteConfig = matcher; + } + } + } + } + + private validateRouteConfigs(configs: RouteDef[]) { + const defaultRoutes = configs.filter((routeDef) => { + return Boolean(routeDef.routeKind !== null && routeDef.defaultRoute); + }); + + if (defaultRoutes.length > 1) { + const paths = defaultRoutes.map(({path}) => path).join(', '); + throw new RangeError(`There are more than one defaultRoutes. ${paths}`); + } else if (defaultRoutes.length === 1) { + const {path} = defaultRoutes[0]; + const hasParam = Boolean( + getPathFragments(path).find(({isParam}) => isParam) + ); + + if (hasParam) { + throw new RangeError(`A defaultRoute cannot have any params. ${path}`); + } + } + + const routeKindConfig = new Set(); + for (const {routeKind} of configs) { + if (routeKind === null) { + continue; + } + + if (routeKindConfig.has(routeKind)) { + throw new RangeError( + `Multiple route configuration for kind: ${routeKind}. ` + + 'Configurations should have unique routeKinds' + ); + } + routeKindConfig.add(routeKind); + } + } + + match(navigation: {pathname: string}): RouteMatch | null { + if (!navigation.pathname.startsWith('/')) { + throw new RangeError( + 'Navigation has to made with pathname that starts with "/"' + ); + } + + let pathParts = getPathParts(navigation.pathname); + let redirectionCount = 0; + + while (true) { + let wasRedirected = false; + + for (const matcher of this.configMatchers) { + const match = matcher.match(pathParts); + if (match.result) { + const {params, pathParts: newPathParts, isRedirection} = match; + if (isRedirection) { + pathParts = newPathParts; + wasRedirected = true; + break; + } + + const config = matcher.config as ConcreteRouteDef; + return { + routeKind: config.routeKind, + params, + pathname: getPathFromParts(newPathParts), + deepLinkProvider: config.deepLinkProvider || null, + }; + } + } + if (wasRedirected) { + redirectionCount++; + } + if (redirectionCount > this.maxRedirection || !wasRedirected) { + // If not redirected, no need to rematch the routes. Abort. + break; + } + } + + if (redirectionCount > this.maxRedirection) { + throw new Error( + `Potential redirection loop (redirecting more than ` + + `${this.maxRedirection} times. Please do not have cycles in the ` + + `routes.` + ); + } + + if (this.defaultRouteConfig) { + const config = this.defaultRouteConfig.config as ConcreteRouteDef; + return { + routeKind: config.routeKind, + params: {}, + pathname: config.path, + deepLinkProvider: config.deepLinkProvider || null, + }; + } + + return null; + } + + matchByRouteKind( + routeKind: RouteKind, + params: RouteParams + ): RouteMatch | null { + const matcher = this.routeKindToConfigMatchers.get(routeKind); + + if (!matcher || !matcher.config.routeKind) { + throw new RangeError( + `Requires configuration for routeKind: ${routeKind}` + ); + } + + const match = matcher.matchByParams(params); + const config = matcher.config; + return { + routeKind, + params, + pathname: getPathFromParts(match.pathParts), + deepLinkProvider: config.deepLinkProvider || null, + }; + } +} + +function getPathParts(path: string): string[] { + return path.split('/').slice(1); +} + +function getPathFromParts(pathParts: string[]): string { + return '/' + pathParts.join('/'); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/route_config_test.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/route_config_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..f3694f8ad69c3bd64aa6660fe9aff8a89c8e2353 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/route_config_test.ts @@ -0,0 +1,506 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {Component} from '@angular/core'; + +import {RouteConfigs, RouteMatch} from './route_config'; +import {ConcreteRouteDef, RedirectionRouteDef} from './route_config_types'; +import {Navigation, RouteKind} from './types'; + +@Component({selector: 'test', template: ''}) +class TestableComponent {} + +function buildConcreteRouteDef(override: Partial) { + return { + routeKind: RouteKind.UNKNOWN, + path: 'unknown', + ngComponent: TestableComponent, + ...override, + }; +} + +function buildRedirectionRouteDef(override: Partial) { + return { + routeKind: null, + path: 'unknown', + redirectionPath: 'unknown', + ...override, + }; +} + +function buildNavigation( + override: Partial & {pathname: string} +): Navigation { + return { + ...override, + }; +} + +function buildRouteMatch(override: Partial = {}): RouteMatch { + return { + routeKind: RouteKind.UNKNOWN, + pathname: '', + params: {}, + deepLinkProvider: null, + ...override, + }; +} + +describe('route config', () => { + describe('validation', () => { + it('throws if there are more than one instances of defaultRoute', () => { + expect(() => { + return new RouteConfigs([ + buildConcreteRouteDef({ + routeKind: RouteKind.UNKNOWN, + path: 'foo', + defaultRoute: true, + }), + buildConcreteRouteDef({ + routeKind: RouteKind.EXPERIMENT, + path: 'bar', + defaultRoute: false, + }), + buildConcreteRouteDef({ + routeKind: RouteKind.EXPERIMENTS, + path: 'baz', + defaultRoute: true, + }), + ]); + }).toThrowError(RangeError, /more than one defaultRoutes/); + }); + + it('throws if the default route has param', () => { + expect(() => { + return new RouteConfigs([ + buildConcreteRouteDef({path: 'foo/:bar', defaultRoute: true}), + ]); + }).toThrowError(RangeError, /defaultRoute cannot have any params/); + }); + + it('throws when a path does not start with "/"', () => { + expect(() => { + return new RouteConfigs([buildConcreteRouteDef({path: 'foo'})]); + }).toThrowError(RangeError, /should start with '\/'/); + }); + + it('throws if it param is mixed with path', () => { + expect(() => { + return new RouteConfigs([ + buildConcreteRouteDef({path: '/tensor:flow'}), + ]); + }).toThrowError(RangeError, /should come after '\/'/); + }); + + it('throws if it param name is missing', () => { + expect(() => { + return new RouteConfigs([buildConcreteRouteDef({path: '/t/:/'})]); + }).toThrowError(RangeError, /non-empty name/); + }); + + it('throws if there are configurations with the same routeKind', () => { + expect(() => { + return new RouteConfigs([ + buildConcreteRouteDef({ + routeKind: RouteKind.EXPERIMENTS, + path: '/foo', + }), + buildConcreteRouteDef({ + routeKind: RouteKind.EXPERIMENTS, + path: '/bar', + }), + buildConcreteRouteDef({ + routeKind: RouteKind.UNKNOWN, + path: '/baz', + }), + ]); + }).toThrowError(RangeError, /Multiple route configuration for kind/); + }); + }); + + describe('match', () => { + it('throws if navigation path does not start with "/"', () => { + const config = new RouteConfigs([buildConcreteRouteDef({path: '/tb'})]); + + expect(() => { + return config.match(buildNavigation({pathname: 'tb'})); + }).toThrowError(RangeError, /that starts with "\/"/); + }); + + it('matches the exact matches when there is no variable', () => { + const config = new RouteConfigs([buildConcreteRouteDef({path: '/tb'})]); + + expect(config.match(buildNavigation({pathname: '/tb'}))).toEqual( + buildRouteMatch({ + routeKind: RouteKind.UNKNOWN, + pathname: '/tb', + params: {}, + }) + ); + }); + + it('matches longer elaborate path', () => { + const config = new RouteConfigs([ + buildConcreteRouteDef({path: '/tb/bar/baz'}), + ]); + + expect(config.match(buildNavigation({pathname: '/tb/bar/baz'}))).toEqual( + buildRouteMatch({ + routeKind: RouteKind.UNKNOWN, + pathname: '/tb/bar/baz', + params: {}, + }) + ); + }); + + it('matches the param', () => { + const config = new RouteConfigs([ + buildConcreteRouteDef({path: '/tb/:bar/baz'}), + ]); + + expect(config.match(buildNavigation({pathname: '/tb/foo/baz'}))).toEqual( + buildRouteMatch({ + routeKind: RouteKind.UNKNOWN, + pathname: '/tb/foo/baz', + params: {bar: 'foo'}, + }) + ); + }); + + it('populates the queryParams of the navigation', () => { + const config = new RouteConfigs([ + buildConcreteRouteDef({ + path: '/tb/bar/baz', + }), + ]); + + expect( + config.match( + buildNavigation({ + pathname: '/tb/bar/baz', + }) + ) + ).toEqual( + buildRouteMatch({ + routeKind: RouteKind.UNKNOWN, + pathname: '/tb/bar/baz', + params: {}, + }) + ); + }); + + it('carries queryParam from the navigation when there is no match', () => { + const config = new RouteConfigs([ + buildConcreteRouteDef({ + routeKind: RouteKind.EXPERIMENT, + path: '/tb/bestest', + defaultRoute: true, + }), + buildConcreteRouteDef({ + routeKind: RouteKind.EXPERIMENTS, + path: '/tb/good', + }), + ]); + + expect( + config.match( + buildNavigation({ + pathname: '/tb/best', + }) + ) + ).toEqual( + buildRouteMatch({ + routeKind: RouteKind.EXPERIMENT, + pathname: '/tb/bestest', + params: {}, + }) + ); + }); + + it('does not when the route is different', () => { + const config = new RouteConfigs([ + buildConcreteRouteDef({path: '/tb/bar/baz'}), + ]); + + expect( + config.match(buildNavigation({pathname: '/tf/bar/baz'})) + ).toBeNull(); + }); + + it('does not when the route is different length', () => { + const config = new RouteConfigs([ + buildConcreteRouteDef({path: '/tb/bar/baz'}), + ]); + + expect(config.match(buildNavigation({pathname: '/tb/bar'}))).toBeNull(); + }); + + it('returns defaultRoute if it matches nothing', () => { + const config = new RouteConfigs([ + buildConcreteRouteDef({ + routeKind: RouteKind.EXPERIMENT, + path: '/tb', + defaultRoute: true, + }), + buildConcreteRouteDef({ + routeKind: RouteKind.EXPERIMENTS, + path: '/tf', + }), + buildConcreteRouteDef({ + routeKind: RouteKind.UNKNOWN, + path: '/flow', + }), + ]); + + expect(config.match(buildNavigation({pathname: '/board'}))).toEqual( + buildRouteMatch({ + routeKind: RouteKind.EXPERIMENT, + pathname: '/tb', + params: {}, + }) + ); + }); + }); + + describe('matchByRouteKind', () => { + it('matches a route by route kind and params', () => { + const config = new RouteConfigs([ + buildConcreteRouteDef({routeKind: RouteKind.EXPERIMENT, path: '/tb'}), + ]); + + expect(config.matchByRouteKind(RouteKind.EXPERIMENT, {})).toEqual({ + routeKind: RouteKind.EXPERIMENT, + params: {}, + pathname: '/tb', + deepLinkProvider: null, + }); + }); + + it('reprojects parameter in object to the pathname', () => { + const config = new RouteConfigs([ + buildConcreteRouteDef({ + routeKind: RouteKind.EXPERIMENT, + path: '/tb/:foo/bar/:baz', + }), + ]); + + const match = config.matchByRouteKind(RouteKind.EXPERIMENT, { + foo: 'a', + bar: 'b', + baz: 'c', + }); + + expect(match).not.toBeNull(); + expect(match!.pathname).toBe('/tb/a/bar/c'); + }); + + it('throws when routeKind is not matching any known config', () => { + const config = new RouteConfigs([ + buildConcreteRouteDef({routeKind: RouteKind.EXPERIMENT, path: '/tb'}), + ]); + + expect(() => config.matchByRouteKind(RouteKind.UNKNOWN, {})).toThrowError( + RangeError, + /Requires configuration for routeKind/ + ); + }); + + it('throws when parameter misses one declared by route path', () => { + const config = new RouteConfigs([ + buildConcreteRouteDef({ + routeKind: RouteKind.EXPERIMENT, + path: '/tb/:foo/', + }), + ]); + + expect(() => + config.matchByRouteKind(RouteKind.EXPERIMENT, {}) + ).toThrowError( + RangeError, + /Failed to reproject parameter. "foo" parameter/ + ); + }); + }); + + describe('redirection', () => { + it('redirects a path to another route', () => { + const config = new RouteConfigs([ + buildConcreteRouteDef({ + routeKind: RouteKind.EXPERIMENT, + path: '/board/', + }), + buildRedirectionRouteDef({path: '/tensor', redirectionPath: '/board/'}), + ]); + + expect(config.match(buildNavigation({pathname: '/tensor'}))).toEqual( + buildRouteMatch({ + routeKind: RouteKind.EXPERIMENT, + pathname: '/board/', + params: {}, + }) + ); + }); + + it('redirects to a route with correct parameters', () => { + const config = new RouteConfigs([ + buildRedirectionRouteDef({ + path: '/tensor/:eid', + redirectionPath: '/board/:eid', + }), + buildConcreteRouteDef({ + routeKind: RouteKind.EXPERIMENT, + path: '/board/:eid', + }), + ]); + + expect(config.match(buildNavigation({pathname: '/tensor/123'}))).toEqual( + buildRouteMatch({ + routeKind: RouteKind.EXPERIMENT, + pathname: '/board/123', + params: {eid: '123'}, + }) + ); + }); + + it('redirects to another redirection', () => { + const config = new RouteConfigs([ + buildRedirectionRouteDef({path: '/a', redirectionPath: '/b'}), + buildRedirectionRouteDef({path: '/b', redirectionPath: '/c'}), + buildConcreteRouteDef({routeKind: RouteKind.UNKNOWN, path: '/c'}), + ]); + + expect(config.match(buildNavigation({pathname: '/a'}))).toEqual( + buildRouteMatch({ + routeKind: RouteKind.UNKNOWN, + pathname: '/c', + params: {}, + }) + ); + }); + + it('throws error if reprojection fails due to missing param', () => { + const config = new RouteConfigs([ + buildRedirectionRouteDef({ + path: '/tensor/:eid', + redirectionPath: '/board/:not_eid', + }), + ]); + + expect(() => + config.match(buildNavigation({pathname: '/tensor/123'})) + ).toThrowError(Error, /Failed to reproject parameter. "not_eid"/); + }); + + it('reprojects from param-ful to param-less', () => { + const config = new RouteConfigs([ + buildRedirectionRouteDef({ + path: '/tensor/:eid', + redirectionPath: '/board/', + }), + buildConcreteRouteDef({ + path: '/board/', + }), + ]); + + expect(config.match(buildNavigation({pathname: '/tensor/123'}))).toEqual( + buildRouteMatch({ + pathname: '/board/', + params: {}, + }) + ); + }); + + it('throws error when there is a cycle in redirection', () => { + const config = new RouteConfigs([ + buildRedirectionRouteDef({path: '/a', redirectionPath: '/b'}), + buildRedirectionRouteDef({path: '/b', redirectionPath: '/c'}), + buildRedirectionRouteDef({path: '/c', redirectionPath: '/a'}), + ]); + + expect(() => + config.match(buildNavigation({pathname: '/a'})) + ).toThrowError(Error, /Potential redirection loop/); + }); + + it('throws error when there are more than N number of redirections', () => { + const config = new RouteConfigs( + [ + buildRedirectionRouteDef({path: '/a', redirectionPath: '/b'}), + buildRedirectionRouteDef({path: '/b', redirectionPath: '/c'}), + buildRedirectionRouteDef({path: '/c', redirectionPath: '/concrete'}), + buildConcreteRouteDef({ + path: '/concrete', + }), + ], + 2 /* maxRedirection */ + ); + + expect(() => + config.match(buildNavigation({pathname: '/a'})) + ).toThrowError(Error, /Potential redirection loop/); + }); + + it('supports the mode where we set maxRedirection to 0', () => { + const config = new RouteConfigs( + [ + buildRedirectionRouteDef({path: '/a', redirectionPath: '/concrete/'}), + buildConcreteRouteDef({ + routeKind: RouteKind.UNKNOWN, + path: '/concrete', + }), + buildConcreteRouteDef({ + routeKind: RouteKind.EXPERIMENT, + path: '/default', + defaultRoute: true, + }), + ], + 0 /* maxRedirection */ + ); + + expect(() => + config.match(buildNavigation({pathname: '/a'})) + ).toThrowError(Error, /Potential redirection loop/); + + expect(config.match(buildNavigation({pathname: '/concrete'}))).toEqual( + buildRouteMatch({ + routeKind: RouteKind.UNKNOWN, + pathname: '/concrete', + params: {}, + }) + ); + + expect(config.match(buildNavigation({pathname: '/foo'}))).toEqual( + buildRouteMatch({ + routeKind: RouteKind.EXPERIMENT, + pathname: '/default', + params: {}, + }) + ); + }); + + it('redirects to default route if redirectionPath is not known', () => { + const config = new RouteConfigs([ + buildRedirectionRouteDef({path: '/a', redirectionPath: '/b'}), + buildConcreteRouteDef({path: '/c', defaultRoute: true}), + ]); + + expect(config.match(buildNavigation({pathname: '/a'}))).toEqual( + buildRouteMatch({ + pathname: '/c', + }) + ); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/route_config_types.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/route_config_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..688dd3ad384fb2c07f671abe6e3718c10c923bf7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/route_config_types.ts @@ -0,0 +1,55 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, Type} from '@angular/core'; + +import {DeepLinkProvider} from './deep_link_provider'; +import {RouteKind} from './types'; + +export interface ConcreteRouteDef { + routeKind: RouteKind; + // Has similar syntax as Angular Router's route spec.m + // e.g., + // '/experiments' + // '/experiment/:experimentId' + // Parameter has to be denoted with ":" prefix and "/" has to precede it. + path: string; + + ngComponent: Type; + + // Redirect to this `path` if current navigation does not match any known + // routes. Only one RouteConfig can have defaultRoute = true. + defaultRoute?: boolean; + + // In TensorBoard, query parameters are only used to reflect certain state in + // the application that can be used to bootstrap the application. It provides, + // for user, to open TensorBoard in specific state with a link. + // + // Because only handful of application state should be reflected so URL is + // more readable and more maintainable and because the state that is pertinent + // to current view is tied strongly to the route, the deep linking will be + // defined as part of the route configuration. + // + // The function is called when navigating to this route. The Observable can + // emit when the state that needs to be persisted changes. + deepLinkProvider?: DeepLinkProvider; +} + +export interface RedirectionRouteDef { + routeKind: null; + path: string; + redirectionPath: string; +} + +export type RouteDef = ConcreteRouteDef | RedirectionRouteDef; diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/route_contexted_reducer_helper.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/route_contexted_reducer_helper.ts new file mode 100644 index 0000000000000000000000000000000000000000..42f44e8d7f5908db9d84ec0fa5a00774e7f0b733 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/route_contexted_reducer_helper.ts @@ -0,0 +1,168 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview Reducer helper for maintaining states that are are associated + * with a routeId. + * + * Each TensorBoard experiment/compare view is regarded as a + * separate instance of "app" where no states are shared. As a result, a run + * selection in an experiment/1 should differ from experiment/2. This module + * facilitates maintaining such states. + * + * The helper helps maintain the route-dependent (or routeful) states by + * maintaining a dictionary of routeId to the route-dependent states. It + * abstracts routes by, upon navigation, storing current route-dependent state + * in the dictionary and reading/applying the state for the new route from the + * dictionary. When the dictionary is empty, it applies the initialState. Client + * can assume the values of the non-"private" top-level properties appropriately + * combine the values for route-independent state with state for the active + * route. + * + * Clients should never peek into or modify the property, + * `privateRouteContextedState`. + * + * For discussion, please refer to docs/design/route-contexted-state.md. + */ + +import {ActionReducer, createReducer, on} from '@ngrx/store'; + +import {navigated} from './actions'; +import {getRouteId} from './internal_utils'; + +// `privateRouteContextedState` loosely typed only for ease of writing tests. +// Otherwise, all the reducers that has routeful state has to change the test +// to create an object that satisfy the typing. +// During the runtime, it always has value because of `initialState`. +interface PrivateState { + privateRouteContextedState?: { + [routeId: string]: RoutefulState; + }; +} + +/** + * Complete type definition of route contexted state. + * + * Example usage: + * type ReducerState = RouteContextedState< + * {myRoutefulState: number}, + * {nonRoutefulState: string}, + * >; + */ +export type RouteContextedState< + RoutefulState extends {}, + NonRoutefulState extends {} +> = NonRoutefulState & RoutefulState & PrivateState; + +/** + * Utility for managing routeful states. It returns route contexted + * `initialState` and `reducers` that help manage the routeful state. + * + * An optional `onRouteIdChanged` function will modify the state after it + * is loaded from the cache. + * + * Example usage: + * + * const {initialState, reducers: routeReducers} = + * createRouteContextedState( + * {myRoutefulState: 0}, + * {nonRoutefulState: 'one'}, + * (state) => { + * console.log('Reset state upon mounting a new route'); + * return {myRoutefulState: 0, nonRoutefulState: 'one'}; + * } + * ); + * + * export const reducers = composeReducers(routeReducers, reducer); + */ +export function createRouteContextedState< + RoutefulState extends {}, + NonRoutefulState extends {} +>( + routefulInitialState: RoutefulState, + nonRoutefulInitialState: NonRoutefulState, + onRouteIdChanged?: ( + state: RouteContextedState + ) => RouteContextedState +): { + initialState: RouteContextedState; + reducers: ActionReducer>; +} { + type FullState = RouteContextedState; + const keys = Object.keys(routefulInitialState) as Array; + + const initialState = { + ...routefulInitialState, + ...nonRoutefulInitialState, + privateRouteContextedState: {}, + } as FullState; + + const reducers = createReducer( + {} as FullState, + on(navigated, (state, {before, after}) => { + const afterRouteId = getRouteId(after.routeKind, after.params); + const beforeRouteId = before + ? getRouteId(before.routeKind, before.params) + : null; + + // When the routeIds are the same, do not modify the state. + if (beforeRouteId === afterRouteId) { + return state; + } + + let nextContextedStateCache = {...state.privateRouteContextedState}; + + if (beforeRouteId) { + const currRoutefulState = {} as RoutefulState; + for (const key of keys) { + currRoutefulState[key] = state[key]; + } + nextContextedStateCache = { + ...nextContextedStateCache, + [beforeRouteId]: currRoutefulState, + }; + } + + let nextRoutefulState = + state.privateRouteContextedState && + state.privateRouteContextedState[afterRouteId] + ? state.privateRouteContextedState[afterRouteId] + : null; + + // Set `nextRoutefulState` to the initialState when `before` + // is non-empty. On the initial load when `before` is null, the + // `state` can already have values from bootstraping deeplinks and it + // should not overwrite the values. + if (beforeRouteId && nextRoutefulState === null) { + nextRoutefulState = routefulInitialState; + } + + let nextFullState = { + ...state, + ...nextRoutefulState, + privateRouteContextedState: nextContextedStateCache, + }; + + if (onRouteIdChanged) { + return onRouteIdChanged(nextFullState); + } + return nextFullState; + }) + ); + + return { + initialState, + reducers, + }; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/route_contexted_reducer_helper_test.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/route_contexted_reducer_helper_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..485d6774f20ecc98506ece11f5650370f41fdc04 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/route_contexted_reducer_helper_test.ts @@ -0,0 +1,328 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {createAction, createReducer, on} from '@ngrx/store'; + +import {composeReducers} from '../util/ngrx'; + +import {navigated} from './actions'; +import { + createRouteContextedState, + RouteContextedState, +} from './route_contexted_reducer_helper'; +import {buildNavigatedToNewRouteIdAction, buildRoute} from './testing'; +import {RouteKind} from './types'; + +interface RoutefulState { + routeful: number; +} + +interface NonRoutefulState { + notRouteful: number; +} + +type ContextedState = RouteContextedState; + +const incrementRouteful = createAction('[TEST] Toggle Routeful'); +const incrementNotRouteful = createAction('[TEST] Toggle Not Routeful'); + +const {initialState, reducers: routeReducers} = createRouteContextedState< + RoutefulState, + NonRoutefulState +>({routeful: 0}, {notRouteful: 1}); + +const reducer = createReducer( + initialState, + on(incrementRouteful, (state) => { + return {...state, routeful: state.routeful + 1}; + }), + on(incrementNotRouteful, (state) => { + return {...state, notRouteful: state.notRouteful + 1}; + }) +); + +const reducers = composeReducers(routeReducers, reducer); + +describe('route_contexted_reducer_helper', () => { + describe('helper reducers', () => { + it('stows routeful state to the context', () => { + const state1 = { + routeful: 1, + notRouteful: 2, + privateRouteContextedState: { + '2/abc': { + routeful: 10, + }, + }, + }; + + const state2 = routeReducers( + state1, + navigated({ + before: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'xyz'}, + queryParams: [], + }), + after: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'abc'}, + queryParams: [], + }), + }) + ); + + expect(state2.routeful).toBe(10); + + const state3 = routeReducers( + state2, + navigated({ + before: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'abc'}, + queryParams: [], + }), + after: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'xyz'}, + queryParams: [], + }), + }) + ); + + expect(state3.routeful).toBe(1); + }); + + it('sets initialValue when navigating to cache miss route', () => { + const state = { + routeful: 2000, + notRouteful: 2, + privateRouteContextedState: {}, + }; + + const nextState = routeReducers( + state, + navigated({ + before: buildRoute({ + routeKind: RouteKind.EXPERIMENTS, + params: {}, + queryParams: [], + }), + after: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'xyz'}, + queryParams: [], + }), + }) + ); + + expect(nextState.routeful).toBe(initialState.routeful); + }); + + it( + 'does not modify state when `before` is empty since it can have value ' + + 'from deeplinks', + () => { + const state = { + routeful: 1337, + notRouteful: 2, + privateRouteContextedState: {}, + }; + + const nextState = routeReducers( + state, + navigated({ + before: null, + after: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'xyz'}, + queryParams: [], + }), + }) + ); + + expect(nextState.routeful).toBe(1337); + } + ); + + it('does not overwrite existing state when navigating to same routeId', () => { + const state = { + routeful: 2000, + notRouteful: 2, + privateRouteContextedState: { + '2/xyz': { + routeful: 3, + }, + }, + }; + + const nextState = routeReducers( + state, + navigated({ + before: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'xyz'}, + queryParams: [], + }), + after: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'xyz'}, + queryParams: [], + }), + }) + ); + + expect(nextState.routeful).toBe(2000); + expect(nextState.notRouteful).toBe(2); + }); + + it('ignores routeful state when `before` is null', () => { + const state1 = { + routeful: 2000, + notRouteful: 2, + privateRouteContextedState: { + '2/abc': { + routeful: 10, + }, + }, + }; + + const state2 = routeReducers( + state1, + navigated({ + before: null, + after: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'abc'}, + queryParams: [], + }), + }) + ); + + expect(state2.routeful).toBe(10); + + const state3 = routeReducers( + state2, + navigated({ + before: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'abc'}, + queryParams: [], + }), + after: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'xyz'}, + queryParams: [], + }), + }) + ); + + expect(state3.routeful).toBe(initialState.routeful); + }); + }); + + describe('integration', () => { + it('does not change behavior of reducers', () => { + const state = { + routeful: 1, + notRouteful: 10, + privateRouteContextedState: {}, + }; + const routefulNextState = reducers(state, incrementRouteful()); + expect(routefulNextState.routeful).toBe(2); + + const notRoutefulNextState = reducers(state, incrementNotRouteful()); + expect(notRoutefulNextState.notRouteful).toBe(11); + }); + + it('keeps helper reducers still functional', () => { + const state1 = { + routeful: 1, + notRouteful: 2, + privateRouteContextedState: { + '2/abc': { + routeful: 10, + }, + }, + }; + + const state2 = reducers( + state1, + navigated({ + before: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'xyz'}, + queryParams: [], + }), + after: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'abc'}, + queryParams: [], + }), + }) + ); + + expect(state2.routeful).toBe(10); + + const state3 = reducers(state2, buildNavigatedToNewRouteIdAction()); + + expect(state3.routeful).toBe(1); + }); + }); + + describe('onRouteIdChanged', () => { + it('transforms the state', () => { + const {reducers: routeReducers} = createRouteContextedState< + RoutefulState, + NonRoutefulState + >({routeful: 0}, {notRouteful: 1}, (state) => { + return {...state, routeful: 999}; + }); + + const state1 = { + routeful: 0, + notRouteful: 1, + }; + const state2 = routeReducers(state1, buildNavigatedToNewRouteIdAction()); + + expect(state2.routeful).toBe(999); + }); + + it('transforms state before reducers', () => { + const {initialState, reducers: routeReducers} = createRouteContextedState< + RoutefulState, + NonRoutefulState + >({routeful: 0}, {notRouteful: 1}, (state) => { + return {...state, routeful: 999}; + }); + + const reducer = createReducer( + initialState, + on(navigated, (state) => { + return {...state, routeful: 123}; + }) + ); + const reducers = composeReducers(routeReducers, reducer); + + const state1 = { + routeful: 0, + notRouteful: 1, + }; + const state2 = reducers(state1, buildNavigatedToNewRouteIdAction()); + + expect(state2.routeful).toBe(123); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/route_registry_module.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/route_registry_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..73f80d8f14bb355e09c4bc7de0aae2e78d1d1633 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/route_registry_module.ts @@ -0,0 +1,107 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + Component, + Inject, + ModuleWithProviders, + NgModule, + Optional, + Type, +} from '@angular/core'; + +import {RouteConfigs} from './route_config'; +import {RouteDef} from './route_config_types'; +import {ROUTE_CONFIGS_TOKEN} from './route_registry_types'; +import {RouteKind} from './types'; + +@NgModule({}) +export class RouteRegistryModule { + private readonly routeConfigs: RouteConfigs | null = null; + private readonly routeKindToNgComponent = new Map< + RouteKind, + Type + >(); + + constructor( + @Optional() @Inject(ROUTE_CONFIGS_TOKEN) configsList: RouteDef[][] + ) { + if (!configsList) { + return; + } + const configs: RouteDef[] = []; + for (const routeDefList of configsList) { + for (const routeDef of routeDefList) { + configs.push(routeDef); + } + } + this.routeConfigs = new RouteConfigs(configs); + configs.forEach((config) => { + if (config.routeKind) { + this.routeKindToNgComponent.set(config.routeKind, config.ngComponent); + } + }); + } + + /** + * Returns RouteConfigs of current route configuration. Returnsn null if no + * routes are registered. + */ + getRouteConfigs(): RouteConfigs | null { + return this.routeConfigs; + } + + getNgComponentByRouteKind(routeKind: RouteKind): Type | null { + return this.routeKindToNgComponent.get(routeKind) || null; + } + + /** + * An NgModule that registers routes. + * + * Note: especially because Polymer based TensorBoard requires relative paths + * for making requests, although not required, prefer to have path that ends + * with "/". + * + * Example: + * + * function routeProvider() { + * return [{ + * path: '/experiments/', + * ngComponent: ScalarsDashboard, + * routeKind: RouteKind.EXPERIMENTS, + * }]; + * } + * + * @NgModule({ + * imports: [ + * RouteRegistryModule.registerRoutes(routesProvider), + * ], + * entryComponents: [ScalarsDashboard] + * }) + */ + static registerRoutes( + routeConfigProvider: () => RouteDef[] + ): ModuleWithProviders { + return { + ngModule: RouteRegistryModule, + providers: [ + { + provide: ROUTE_CONFIGS_TOKEN, + multi: true, + useFactory: routeConfigProvider, + }, + ], + }; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/route_registry_module_test.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/route_registry_module_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..2d43792ecb2478a122a9d645186d7f5b030e0505 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/route_registry_module_test.ts @@ -0,0 +1,72 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {Component} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; + +import {RouteRegistryModule} from './route_registry_module'; +import {RouteKind} from './types'; + +@Component({ + selector: 'experiment', + template: 'I am experiment', +}) +class Experiment {} + +@Component({ + selector: 'experiments', + template: 'List of experiment', +}) +class Experiments {} + +describe('route_registry_module', () => { + let registry: RouteRegistryModule; + + beforeEach(async () => { + function routeFactory() { + return [ + { + routeKind: RouteKind.EXPERIMENT, + path: '/experiment/:experimentId', + ngComponent: Experiment, + }, + { + routeKind: RouteKind.EXPERIMENTS, + path: '/experiments', + ngComponent: Experiments, + }, + ]; + } + + await TestBed.configureTestingModule({ + imports: [RouteRegistryModule.registerRoutes(routeFactory)], + declarations: [Experiments, Experiment], + }).compileComponents(); + + registry = TestBed.inject(RouteRegistryModule); + }); + + describe('getNgComponentByRouteKind', () => { + it('finds a component for routeKind', () => { + expect(registry.getNgComponentByRouteKind(RouteKind.EXPERIMENT)).toBe( + Experiment + ); + expect(registry.getNgComponentByRouteKind(RouteKind.EXPERIMENTS)).toBe( + Experiments + ); + expect(registry.getNgComponentByRouteKind(RouteKind.UNKNOWN)).toBeNull(); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/route_registry_types.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/route_registry_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..e5a4f14cf4499fc545ba3c41da909ad89170d998 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/route_registry_types.ts @@ -0,0 +1,20 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {InjectionToken} from '@angular/core'; +import {RouteDef} from './route_config_types'; + +export const ROUTE_CONFIGS_TOKEN = new InjectionToken( + '[App Routing] Route Config' +); diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/store/BUILD b/saved_models/tensorboard/tensorboard/webapp/app_routing/store/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..571bf53fccd317c27f91252906f0cf9e5ffebec0 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/store/BUILD @@ -0,0 +1,59 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "store", + srcs = [ + "app_routing_reducers.ts", + "app_routing_selectors.ts", + ], + deps = [ + ":types", + "//tensorboard/webapp/app_routing:internal_utils", + "//tensorboard/webapp/app_routing:types", + "//tensorboard/webapp/app_routing/actions", + "@npm//@ngrx/store", + ], +) + +tf_ts_library( + name = "types", + srcs = [ + "app_routing_types.ts", + ], + deps = [ + "//tensorboard/webapp/app_routing:types", + ], +) + +tf_ts_library( + name = "testing", + testonly = True, + srcs = [ + "testing.ts", + ], + deps = [ + ":store", + ":types", + ], +) + +tf_ts_library( + name = "store_test_lib", + testonly = True, + srcs = [ + "app_routing_reducers_test.ts", + "app_routing_selectors_test.ts", + ], + deps = [ + ":store", + ":testing", + "//tensorboard/webapp/app_routing:testing", + "//tensorboard/webapp/app_routing:types", + "//tensorboard/webapp/app_routing/actions", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/store/app_routing_reducers.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/store/app_routing_reducers.ts new file mode 100644 index 0000000000000000000000000000000000000000..48c91628cf7092a3fe0ac6ca6641165df6baef48 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/store/app_routing_reducers.ts @@ -0,0 +1,36 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Action, createReducer, on} from '@ngrx/store'; +import * as actions from '../actions'; +import {AppRoutingState} from './app_routing_types'; + +const initialState: AppRoutingState = { + activeRoute: null, + nextRoute: null, +}; + +const reducer = createReducer( + initialState, + on(actions.navigating, (state, {after}) => { + return {...state, nextRoute: after}; + }), + on(actions.navigated, (state, {after}) => { + return {...state, activeRoute: after, nextRoute: null}; + }) +); + +export function reducers(state: AppRoutingState, action: Action) { + return reducer(state, action); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/store/app_routing_reducers_test.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/store/app_routing_reducers_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..ad7179081256a8d97cf11f48329349ac1d79d802 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/store/app_routing_reducers_test.ts @@ -0,0 +1,103 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import * as actions from '../actions'; +import {buildRoute} from '../testing'; +import {RouteKind} from '../types'; + +import * as appRoutingReducers from './app_routing_reducers'; +import {buildAppRoutingState} from './testing'; + +describe('app_routing_reducers', () => { + describe('navigating', () => { + it('sets the new route onto activeRoute', () => { + const state = buildAppRoutingState({ + activeRoute: null, + nextRoute: null, + }); + + const nextState = appRoutingReducers.reducers( + state, + actions.navigating({ + after: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + pathname: '/experiment/234', + params: { + experimentId: '234', + }, + queryParams: [], + navigationOptions: { + replaceState: true, + }, + }), + }) + ); + + expect(nextState.nextRoute).toEqual( + buildRoute({ + routeKind: RouteKind.EXPERIMENT, + pathname: '/experiment/234', + params: { + experimentId: '234', + }, + queryParams: [], + navigationOptions: { + replaceState: true, + }, + }) + ); + }); + }); + + describe('navigated', () => { + it('sets the new route onto activeRoute', () => { + const state = buildAppRoutingState({ + activeRoute: null, + }); + + const nextState = appRoutingReducers.reducers( + state, + actions.navigated({ + before: null, + after: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + pathname: '/experiment/234', + params: { + experimentId: '234', + }, + queryParams: [], + navigationOptions: { + replaceState: true, + }, + }), + }) + ); + + expect(nextState.activeRoute).toEqual( + buildRoute({ + routeKind: RouteKind.EXPERIMENT, + pathname: '/experiment/234', + params: { + experimentId: '234', + }, + queryParams: [], + navigationOptions: { + replaceState: true, + }, + }) + ); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/store/app_routing_selectors.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/store/app_routing_selectors.ts new file mode 100644 index 0000000000000000000000000000000000000000..f5fa1054b0eff808c989f97ce5b1a06004658b4d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/store/app_routing_selectors.ts @@ -0,0 +1,95 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {createFeatureSelector, createSelector} from '@ngrx/store'; + +import { + getExperimentIdsFromRouteParams, + getRouteId as getRouteIdFromKindAndParams, + parseCompareExperimentStr, +} from '../internal_utils'; +import {CompareRouteParams, Route, RouteKind} from '../types'; + +import { + APP_ROUTING_FEATURE_KEY, + AppRoutingState, + State, +} from './app_routing_types'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +const getAppRoutingState = createFeatureSelector( + APP_ROUTING_FEATURE_KEY +); + +export const getActiveRoute = createSelector( + getAppRoutingState, + (state: AppRoutingState) => { + return state.activeRoute; + } +); + +export const getNextRouteForRouterOutletOnly = createSelector( + getAppRoutingState, + (state: AppRoutingState): Route | null => { + return state.nextRoute; + } +); + +export const getRouteKind = createSelector(getActiveRoute, (activeRoute) => { + return activeRoute ? activeRoute.routeKind : RouteKind.UNKNOWN; +}); + +export const getRouteParams = createSelector(getActiveRoute, (activeRoute) => { + return activeRoute ? activeRoute.params : {}; +}); + +/** + * Returns experiment ids activated by route. The value can be null if current + * route does not have eids. + */ +export const getExperimentIdsFromRoute = createSelector( + getRouteKind, + getRouteParams, + (routeKind, routeParams): string[] | null => { + return getExperimentIdsFromRouteParams(routeKind, routeParams); + } +); + +export const getRouteId = createSelector( + getRouteKind, + getRouteParams, + (routeKind, routeParams): string => { + return getRouteIdFromKindAndParams(routeKind, routeParams); + } +); + +export const getExperimentIdToAliasMap = createSelector( + getRouteKind, + getRouteParams, + (routeKind, routeParams) => { + const idToDisplayName: {[id: string]: string} = {}; + + if (routeKind !== RouteKind.COMPARE_EXPERIMENT) { + return idToDisplayName; + } + + const compareParams = routeParams as CompareRouteParams; + const nameAndIds = parseCompareExperimentStr(compareParams.experimentIds); + for (const {id, name} of nameAndIds) { + idToDisplayName[id] = name; + } + return idToDisplayName; + } +); diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/store/app_routing_selectors_test.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/store/app_routing_selectors_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..7677e7c7a96b89a314d24d760c7ca108d3fc4921 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/store/app_routing_selectors_test.ts @@ -0,0 +1,150 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {buildRoute} from '../testing'; +import {RouteKind} from '../types'; + +import * as selectors from './app_routing_selectors'; +import {buildAppRoutingState, buildStateFromAppRoutingState} from './testing'; + +describe('app_routing_selectors', () => { + describe('getActiveRoute', () => { + beforeEach(() => { + selectors.getActiveRoute.release(); + }); + + it('returns activeRoute', () => { + const state = buildStateFromAppRoutingState( + buildAppRoutingState({ + activeRoute: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + pathname: '/experiment/234', + params: { + experimentId: '234', + }, + queryParams: [], + navigationOptions: { + replaceState: false, + }, + }), + }) + ); + + expect(selectors.getActiveRoute(state)).toEqual({ + routeKind: RouteKind.EXPERIMENT, + pathname: '/experiment/234', + params: { + experimentId: '234', + }, + queryParams: [], + navigationOptions: { + replaceState: false, + }, + }); + }); + }); + + describe('getRouteKind', () => { + beforeEach(() => { + selectors.getRouteKind.release(); + }); + + it('returns routeKind of activeRoute', () => { + const state = buildStateFromAppRoutingState( + buildAppRoutingState({ + activeRoute: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + pathname: '/experiment/234', + params: { + experimentId: '234', + }, + queryParams: [], + }), + }) + ); + + expect(selectors.getRouteKind(state)).toBe(RouteKind.EXPERIMENT); + }); + }); + + describe('getRouteParams', () => { + beforeEach(() => { + selectors.getRouteParams.release(); + }); + + it('returns param of activeRoute', () => { + const state = buildStateFromAppRoutingState( + buildAppRoutingState({ + activeRoute: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + pathname: '/experiment/234', + params: { + experimentId: '234', + }, + queryParams: [], + }), + }) + ); + + expect(selectors.getRouteParams(state)).toEqual({ + experimentId: '234', + }); + }); + }); + + describe('getExperimentIdToAliasMap', () => { + beforeEach(() => { + selectors.getExperimentIdToAliasMap.release(); + }); + + it('returns a map of id to alias for COMPARE route', () => { + const state = buildStateFromAppRoutingState( + buildAppRoutingState({ + activeRoute: buildRoute({ + routeKind: RouteKind.COMPARE_EXPERIMENT, + // exp2 maps to two experiment ids. This is illegal but FE should not + // break because of it. + pathname: '/compare/exp1:123,exp2:234,exp2:345', + params: { + experimentIds: 'exp1:123,exp2:234,exp2:345', + }, + queryParams: [], + }), + }) + ); + + expect(selectors.getExperimentIdToAliasMap(state)).toEqual({ + 123: 'exp1', + 234: 'exp2', + 345: 'exp2', + }); + }); + + it('returns an empty map for non-compare route', () => { + const state = buildStateFromAppRoutingState( + buildAppRoutingState({ + activeRoute: buildRoute({ + routeKind: RouteKind.UNKNOWN, + pathname: '/foob', + params: {}, + queryParams: [], + }), + }) + ); + + expect(selectors.getExperimentIdToAliasMap(state)).toEqual({}); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/store/app_routing_types.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/store/app_routing_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..9750919f7a3795943bf2578f2b2e06380fba0dfc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/store/app_routing_types.ts @@ -0,0 +1,29 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Route} from '../types'; + +export const APP_ROUTING_FEATURE_KEY = 'app_routing'; + +export interface AppRoutingState { + activeRoute: Route | null; + // Transient state that tells certain components like the router-outlet to + // make changes before a route change. `ntextRoute` is non-null only while + // we are navigating. + nextRoute: Route | null; +} + +export interface State { + [APP_ROUTING_FEATURE_KEY]?: AppRoutingState; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/store/testing.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/store/testing.ts new file mode 100644 index 0000000000000000000000000000000000000000..c5e6daf2af5745bee05d533292777d9f74589574 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/store/testing.ts @@ -0,0 +1,34 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + APP_ROUTING_FEATURE_KEY, + AppRoutingState, + State, +} from './app_routing_types'; + +export function buildAppRoutingState( + override?: Partial +): AppRoutingState { + return { + activeRoute: null, + nextRoute: null, + ...override, + }; +} +export function buildStateFromAppRoutingState( + appRoutingState: AppRoutingState +): State { + return {[APP_ROUTING_FEATURE_KEY]: appRoutingState}; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/testing.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/testing.ts new file mode 100644 index 0000000000000000000000000000000000000000..0be64b8209840d033ceacc2d9deeed99d3372704 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/testing.ts @@ -0,0 +1,97 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable, Provider} from '@angular/core'; + +import {of} from 'rxjs'; + +import {navigated} from './actions'; +import {Location} from './location'; +import {Route, RouteKind} from './types'; + +/** @typehack */ import * as _typeHackModels from '@ngrx/store/src/models'; +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +export function buildRoute(routeOverride: Partial = {}): Route { + return { + routeKind: RouteKind.EXPERIMENTS, + pathname: '/experiments', + params: {}, + queryParams: [], + navigationOptions: { + replaceState: false, + }, + ...routeOverride, + }; +} + +export function buildNavigatedAction(routeOverride: Partial = {}) { + return navigated({ + before: null, + after: buildRoute(routeOverride), + }); +} + +/** + * A navigation that corresponds to a change in route id (new route context) + * will be created. + */ +export function buildNavigatedToNewRouteIdAction() { + return navigated({ + before: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'abc'}, + }), + after: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'xyz'}, + }), + }); +} + +@Injectable() +export class TestableLocation extends Location { + getSearch() { + return []; + } + + getHash() { + return ''; + } + + getPath() { + return '/is/cool/'; + } + + replaceState(path: string) {} + + pushState(path: string) {} + + onPopState() { + return of({ + pathname: '/is/cool/', + queryParams: [], + }); + } +} + +export function provideLocationTesting(): Provider { + return [ + TestableLocation, + { + provide: Location, + useExisting: TestableLocation, + }, + ]; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/types.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..241a8d2ec6371c8a785dfa78499677737c78aa08 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/types.ts @@ -0,0 +1,59 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * TensorBoard currently requires store/actions to be serializable. + * + * This means, we cannot use URLSearchParams. We also cannot use + * Record since we can lose information when "?a=1&a=2" which + * is a legal query parameter. + */ +export type SerializableQueryParams = Array<{key: string; value: string}>; + +export interface RouteParams { + [key: string]: any; +} + +export enum RouteKind { + UNKNOWN, + EXPERIMENTS, + EXPERIMENT, + COMPARE_EXPERIMENT, +} + +export const DEFAULT_EXPERIMENT_ID = 'defaultExperimentId'; + +export interface CompareRouteParams { + experimentIds: string; +} + +export interface ExperimentRouteParams { + experimentId: string; +} + +export interface Navigation { + pathname: string; + replaceState?: boolean; + // Cannot change hash yet. +} + +export interface Route { + routeKind: RouteKind; + params: RouteParams; + pathname: string; + queryParams: SerializableQueryParams; + navigationOptions: { + replaceState: boolean; + }; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/views/BUILD b/saved_models/tensorboard/tensorboard/webapp/app_routing/views/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..0116d4c72697b6b9a9620d5914be1b3dd173f052 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/views/BUILD @@ -0,0 +1,56 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "views", + srcs = [ + "app_routing_view_module.ts", + "router_link_directive_container.ts", + "router_outlet_component.ts", + "router_outlet_container.ts", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/app_routing:internal_utils", + "//tensorboard/webapp/app_routing:location", + "//tensorboard/webapp/app_routing:route_registry", + "//tensorboard/webapp/app_routing:types", + "//tensorboard/webapp/app_routing/actions", + "//tensorboard/webapp/app_routing/store", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "views_tests", + testonly = True, + srcs = [ + "router_link_test.ts", + "router_outlet_test.ts", + ], + deps = [ + ":views", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_platform_browser_animations", + "//tensorboard/webapp/angular:expect_angular_platform_browser_dynamic_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/app_routing:location", + "//tensorboard/webapp/app_routing:route_registry", + "//tensorboard/webapp/app_routing:testing", + "//tensorboard/webapp/app_routing:types", + "//tensorboard/webapp/app_routing/actions", + "//tensorboard/webapp/app_routing/store", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/views/app_routing_view_module.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/views/app_routing_view_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..2ce4bd2cc40042b61a240ffb1505ebd9ccc90ea8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/views/app_routing_view_module.ts @@ -0,0 +1,34 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; + +import {RouteRegistryModule} from '../route_registry_module'; + +import {RouterLinkDirectiveContainer} from './router_link_directive_container'; +import {RouterOutletComponent} from './router_outlet_component'; +import {RouterOutletContainer} from './router_outlet_container'; +import {LocationModule} from '../location_module'; + +@NgModule({ + imports: [CommonModule, LocationModule, RouteRegistryModule], + exports: [RouterOutletContainer, RouterLinkDirectiveContainer], + declarations: [ + RouterOutletContainer, + RouterOutletComponent, + RouterLinkDirectiveContainer, + ], +}) +export class AppRoutingViewModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/views/router_link_directive_container.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/views/router_link_directive_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..2dab0d9fe93bef55b7d0b927a8b568ef752711bc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/views/router_link_directive_container.ts @@ -0,0 +1,76 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Directive, HostBinding, HostListener, Input} from '@angular/core'; +import {Store} from '@ngrx/store'; + +import {State} from '../../app_state'; +import {navigationRequested} from '../actions'; +import {Location} from '../location'; + +@Directive({selector: 'a[routerLink]'}) +export class RouterLinkDirectiveContainer { + private pathname: string | null = null; + + constructor( + private readonly store: Store, + private readonly location: Location + ) {} + + @HostListener('click', ['$event']) + handleClick(event: MouseEvent) { + if (!this.pathname || event.ctrlKey || event.metaKey) { + return; + } + + event.preventDefault(); + event.stopPropagation(); + this.store.dispatch( + navigationRequested({ + pathname: this.pathname, + }) + ); + } + + @HostBinding('attr.href') + get href() { + if (!this.pathname) return null; + + return this.location.getFullPathFromRouteOrNav({ + pathname: this.pathname, + }); + } + + /** + * Add pathname to a route. + * + * Unlike @angular/router's `routerLink`, the path is made sure to end with + * "/". + * e.g., -> 'foo/bar/'. + */ + @Input() + set routerLink(pathParts: string[] | string) { + if (typeof pathParts === 'string') { + pathParts = [pathParts]; + } + + if (pathParts.length === 0) { + throw new RangeError('routeLink should have proper path. Got nothing.'); + } + + // Append "/" suffix. + const pathname = [...pathParts].join('/'); + this.pathname = pathname.endsWith('/') ? pathname : pathname + '/'; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/views/router_link_test.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/views/router_link_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..5f26b0561d653c1bcae4bbd0858caf6266146c68 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/views/router_link_test.ts @@ -0,0 +1,165 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {Component, DebugElement, Input, NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Action, Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; + +import {State} from '../../app_state'; +import {navigationRequested} from '../actions'; +import {LocationModule} from '../location_module'; + +import {RouterLinkDirectiveContainer} from './router_link_directive_container'; + +@Component({ + selector: 'test', + template: 'testable link', +}) +class TestableComponent { + @Input() link!: string | string[]; +} + +describe('router_link', () => { + let actualDispatches: Action[]; + + beforeEach(async () => { + actualDispatches = []; + await TestBed.configureTestingModule({ + imports: [LocationModule, NoopAnimationsModule], + providers: [provideMockStore()], + declarations: [RouterLinkDirectiveContainer, TestableComponent], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + + const store = TestBed.inject>(Store) as MockStore; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + actualDispatches.push(action); + }); + }); + + function createComponentAndGetAnchorDebugElement( + link: string | string[] + ): DebugElement { + const fixture = TestBed.createComponent(TestableComponent); + fixture.componentInstance.link = link; + fixture.detectChanges(); + return fixture.debugElement.query(By.css('a')); + } + + it('renders the path as href', () => { + const anchorStr = createComponentAndGetAnchorDebugElement('/foobar'); + expect(anchorStr.attributes['href']).toBe('/foobar/'); + + const anchorArr = createComponentAndGetAnchorDebugElement([ + '/foobar', + 'baz', + ]); + expect(anchorArr.attributes['href']).toBe('/foobar/baz/'); + }); + + it('dispatches navigate when clicked on the anchor', () => { + const link = createComponentAndGetAnchorDebugElement('/foobar'); + const event = new MouseEvent('click'); + link.triggerEventHandler('click', event); + + expect(actualDispatches).toEqual([ + navigationRequested({ + pathname: '/foobar/', + }), + ]); + }); + + it('supports relative path (..)', () => { + const link = createComponentAndGetAnchorDebugElement('../foobar'); + const event = new MouseEvent('click'); + link.triggerEventHandler('click', event); + + expect(actualDispatches).toEqual([ + navigationRequested({ + pathname: '../foobar/', + }), + ]); + }); + + it('supports relative path (no slash)', () => { + const link = createComponentAndGetAnchorDebugElement('foobar'); + const event = new MouseEvent('click'); + link.triggerEventHandler('click', event); + + expect(actualDispatches).toEqual([ + navigationRequested({ + pathname: 'foobar/', + }), + ]); + }); + + it('makes sure the path ends with "/"', () => { + const event = new MouseEvent('click'); + const link1 = createComponentAndGetAnchorDebugElement('./foobar'); + link1.triggerEventHandler('click', event); + const link2 = createComponentAndGetAnchorDebugElement('./foobar/'); + link2.triggerEventHandler('click', event); + const link3 = createComponentAndGetAnchorDebugElement('/'); + link3.triggerEventHandler('click', event); + + expect(actualDispatches).toEqual([ + navigationRequested({ + pathname: './foobar/', + }), + navigationRequested({ + pathname: './foobar/', + }), + navigationRequested({ + pathname: '/', + }), + ]); + }); + + it('prevents default behavior when clicked', () => { + const link = createComponentAndGetAnchorDebugElement('/foobar'); + const event = new MouseEvent('click'); + const preventDefault = spyOn(event, 'preventDefault'); + link.triggerEventHandler('click', event); + + expect(preventDefault).toHaveBeenCalledTimes(1); + expect(event.cancelBubble).toBe(true); + }); + + it('ignores the click when pressed ctrl', () => { + const link = createComponentAndGetAnchorDebugElement('/foobar'); + const event = new MouseEvent('click', {ctrlKey: true}); + link.triggerEventHandler('click', event); + + expect(actualDispatches).toEqual([]); + }); + + it('ignores the click when pressed meta key', () => { + const link = createComponentAndGetAnchorDebugElement('/foobar'); + const event = new MouseEvent('click', {metaKey: true}); + link.triggerEventHandler('click', event); + + expect(actualDispatches).toEqual([]); + }); + + it('requires path to be non-emtpy', () => { + expect(() => createComponentAndGetAnchorDebugElement([])).toThrowError( + RangeError, + /should have proper path/ + ); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/views/router_outlet_component.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/views/router_outlet_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..1dbef85ce3c029fecffdfb1c4091cc5fdac931e1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/views/router_outlet_component.ts @@ -0,0 +1,53 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + ComponentFactoryResolver, + Input, + OnChanges, + SimpleChanges, + ViewChild, + ViewContainerRef, +} from '@angular/core'; + +@Component({ + selector: 'router-outlet-component', + template: ` `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class RouterOutletComponent implements OnChanges { + @ViewChild('routeContainer', {static: true, read: ViewContainerRef}) + private readonly routeContainer!: ViewContainerRef; + + @Input() activeNgComponent!: unknown | null; + + constructor( + private readonly componentFactoryResolver: ComponentFactoryResolver + ) {} + + ngOnChanges(changes: SimpleChanges) { + const activeComponentChange = changes['activeNgComponent']; + if (activeComponentChange) { + this.routeContainer.clear(); + if (activeComponentChange.currentValue) { + const componentFactory = this.componentFactoryResolver.resolveComponentFactory( + activeComponentChange.currentValue + ); + this.routeContainer.createComponent(componentFactory); + } + } + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/views/router_outlet_container.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/views/router_outlet_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..edbf580abfc1f637754d6d5092bb8c1b2fd1e60c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/views/router_outlet_container.ts @@ -0,0 +1,63 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {combineLatest} from 'rxjs'; +import {map} from 'rxjs/operators'; + +import {State} from '../../app_state'; +import {getRouteId} from '../internal_utils'; +import {RouteRegistryModule} from '../route_registry_module'; +import { + getActiveRoute, + getNextRouteForRouterOutletOnly, +} from '../store/app_routing_selectors'; + +/** @typehack */ import * as _typeHackAngularCore from '@angular/core/core'; +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'router-outlet', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class RouterOutletContainer { + activeNgComponent$ = combineLatest([ + this.store.select(getActiveRoute), + this.store.select(getNextRouteForRouterOutletOnly), + ]).pipe( + map(([activeRoute, nextRoute]) => { + if (!activeRoute) { + return null; + } + const isRouteTransitioning = + nextRoute !== null && + getRouteId(nextRoute.routeKind, nextRoute.params) !== + getRouteId(activeRoute.routeKind, activeRoute.params); + return isRouteTransitioning + ? null + : this.registry.getNgComponentByRouteKind(activeRoute.routeKind); + }) + ); + + constructor( + private readonly store: Store, + private readonly registry: RouteRegistryModule + ) {} +} diff --git a/saved_models/tensorboard/tensorboard/webapp/app_routing/views/router_outlet_test.ts b/saved_models/tensorboard/tensorboard/webapp/app_routing/views/router_outlet_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..b4c94f11504dbc46dcd0724e280d4137690af029 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_routing/views/router_outlet_test.ts @@ -0,0 +1,224 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {Component, NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; +import {BrowserDynamicTestingModule} from '@angular/platform-browser-dynamic/testing'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; + +import {State} from '../../app_state'; +import {RouteRegistryModule} from '../route_registry_module'; +import { + getActiveRoute, + getNextRouteForRouterOutletOnly, +} from '../store/app_routing_selectors'; +import {buildRoute} from '../testing'; +import {RouteKind} from '../types'; + +import {RouterOutletComponent} from './router_outlet_component'; +import {RouterOutletContainer} from './router_outlet_container'; + +@Component({ + selector: 'first', + template: 'I am a test', +}) +class FirstTestableComponent {} + +@Component({ + selector: 'second', + template: 'I am inevitable', +}) +class SecondTestableComponent {} + +describe('router_outlet', () => { + let store: MockStore; + let getNgComponentByRouteKindSpy: jasmine.Spy; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [NoopAnimationsModule, RouteRegistryModule], + providers: [provideMockStore()], + declarations: [ + RouterOutletComponent, + RouterOutletContainer, + FirstTestableComponent, + SecondTestableComponent, + ], + schemas: [NO_ERRORS_SCHEMA], + }) + .overrideModule(BrowserDynamicTestingModule, { + set: { + entryComponents: [FirstTestableComponent, SecondTestableComponent], + }, + }) + .compileComponents(); + + store = TestBed.inject>(Store) as MockStore; + store.overrideSelector(getActiveRoute, null); + store.overrideSelector(getNextRouteForRouterOutletOnly, null); + + const registry = TestBed.inject(RouteRegistryModule); + getNgComponentByRouteKindSpy = spyOn(registry, 'getNgComponentByRouteKind'); + }); + + function setActiveRoute(routeKind: RouteKind) { + store.overrideSelector( + getActiveRoute, + buildRoute({ + routeKind, + pathname: 'test', + queryParams: [], + params: {}, + }) + ); + store.refreshState(); + } + + it('renders nothing when activeRoute is null', () => { + store.overrideSelector(getActiveRoute, null); + + const fixture = TestBed.createComponent(RouterOutletContainer); + fixture.detectChanges(); + + expect(fixture.nativeElement.innerText).toBe(''); + }); + + it('renders ngComponent in the active route', () => { + setActiveRoute(RouteKind.UNKNOWN); + getNgComponentByRouteKindSpy.and.returnValue(FirstTestableComponent); + + const fixture = TestBed.createComponent(RouterOutletContainer); + fixture.detectChanges(); + + expect(fixture.nativeElement.innerText).toBe('I am a test'); + }); + + it('changes the ngComponent when activeRoute changes', () => { + setActiveRoute(RouteKind.EXPERIMENT); + getNgComponentByRouteKindSpy + .withArgs(RouteKind.EXPERIMENT) + .and.returnValue(FirstTestableComponent) + .withArgs(RouteKind.COMPARE_EXPERIMENT) + .and.returnValue(SecondTestableComponent); + const fixture = TestBed.createComponent(RouterOutletContainer); + fixture.detectChanges(); + + setActiveRoute(RouteKind.COMPARE_EXPERIMENT); + fixture.detectChanges(); + + expect(fixture.nativeElement.innerText).toBe('I am inevitable'); + }); + + it('removes current page while navigating to a new route', () => { + store.overrideSelector( + getActiveRoute, + buildRoute({ + routeKind: RouteKind.EXPERIMENT, + pathname: 'test', + queryParams: [], + params: {experimentId: 'foobar'}, + }) + ); + store.overrideSelector( + getNextRouteForRouterOutletOnly, + buildRoute({ + routeKind: RouteKind.EXPERIMENT, + pathname: 'test', + queryParams: [], + params: {experimentId: 'foobarbaz'}, + }) + ); + getNgComponentByRouteKindSpy.and.returnValue(FirstTestableComponent); + const fixture = TestBed.createComponent(RouterOutletContainer); + fixture.detectChanges(); + + expect(fixture.nativeElement.innerText).toBe(''); + + store.overrideSelector(getNextRouteForRouterOutletOnly, null); + store.refreshState(); + fixture.detectChanges(); + + expect(fixture.nativeElement.innerText).toBe('I am a test'); + }); + + it('does not remove page when navigating to the same routeId', () => { + store.overrideSelector( + getActiveRoute, + buildRoute({ + routeKind: RouteKind.EXPERIMENT, + pathname: 'test', + queryParams: [], + params: {experimentId: 'foobar'}, + }) + ); + store.overrideSelector( + getNextRouteForRouterOutletOnly, + buildRoute({ + routeKind: RouteKind.EXPERIMENT, + pathname: 'test', + queryParams: [], + params: {experimentId: 'foobar'}, + }) + ); + getNgComponentByRouteKindSpy.and.returnValue(FirstTestableComponent); + const fixture = TestBed.createComponent(RouterOutletContainer); + fixture.detectChanges(); + + expect(fixture.nativeElement.innerText).toBe('I am a test'); + + store.overrideSelector( + getNextRouteForRouterOutletOnly, + buildRoute({ + routeKind: RouteKind.EXPERIMENT, + pathname: 'test', + queryParams: [], + params: {experimentId: 'foobarbaz'}, + }) + ); + store.refreshState(); + fixture.detectChanges(); + + expect(fixture.nativeElement.innerText).toBe(''); + }); + + it('does not reuse the DOM even if the ngComponent is the same', () => { + setActiveRoute(RouteKind.EXPERIMENT); + getNgComponentByRouteKindSpy + .withArgs(RouteKind.EXPERIMENT) + .and.returnValue(FirstTestableComponent) + .withArgs(RouteKind.COMPARE_EXPERIMENT) + .and.returnValue(SecondTestableComponent); + const fixture = TestBed.createComponent(RouterOutletContainer); + fixture.detectChanges(); + + const beforeElement = fixture.debugElement.query( + By.css('router-outlet-component') + ).nativeElement.firstElementChild; + + setActiveRoute(RouteKind.COMPARE_EXPERIMENT); + fixture.detectChanges(); + + setActiveRoute(RouteKind.EXPERIMENT); + fixture.detectChanges(); + + const afterElement = fixture.debugElement.query( + By.css('router-outlet-component') + ).nativeElement.firstElementChild; + expect(beforeElement).not.toBe(afterElement); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/app_state.ts b/saved_models/tensorboard/tensorboard/webapp/app_state.ts new file mode 100644 index 0000000000000000000000000000000000000000..df3f31f72bb013fc44ad160570ee33a6c86633a8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/app_state.ts @@ -0,0 +1,32 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {State as AppRoutingState} from './app_routing/store/app_routing_types'; +import {State as CoreState} from './core/store/core_types'; +import {State as ExperimentsState} from './experiments/store/experiments_types'; +import {State as FeatureFlagState} from './feature_flag/store/feature_flag_types'; +import {State as MetricsState} from './metrics/store/metrics_types'; +import {State as NpmiState} from './plugins/npmi/store/npmi_types'; +import {State as RunsState} from './runs/store/runs_types'; +import {State as TextState} from './plugins/text_v2/store/text_types'; + +export type State = AppRoutingState & + CoreState & + ExperimentsState & + FeatureFlagState & + MetricsState & + NpmiState & + RunsState & + TextState; diff --git a/saved_models/tensorboard/tensorboard/webapp/bootstrap.ts b/saved_models/tensorboard/tensorboard/webapp/bootstrap.ts new file mode 100644 index 0000000000000000000000000000000000000000..846d0c9f8c724932ce5cc7eac88554c933445f30 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/bootstrap.ts @@ -0,0 +1,25 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {platformBrowser} from '@angular/platform-browser'; +import 'zone.js/dist/zone.js'; // Angular runtime dep + +import {AppModule} from './app_module'; + +// Bootstrap needs to happen after body is ready but we cannot reliably +// controls the order in which script gets loaded (Vulcanization inlines +// the script in ). +window.addEventListener('DOMContentLoaded', () => { + platformBrowser().bootstrapModule(AppModule); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/core/BUILD b/saved_models/tensorboard/tensorboard/webapp/core/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..0d215dce919f4b2ce632d180a07ac4e96f44ad69 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/BUILD @@ -0,0 +1,27 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "core", + srcs = [ + "core_module.ts", + ], + deps = [ + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/core/effects", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/deeplink", + "//tensorboard/webapp/webapp_data_source", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + ], +) + +ng_module( + name = "types", + srcs = [ + "types.ts", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/core/actions/BUILD b/saved_models/tensorboard/tensorboard/webapp/core/actions/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..54391fe9239f2273859b78014d9cd34894e509dc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/actions/BUILD @@ -0,0 +1,16 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +tf_ts_library( + name = "actions", + srcs = [ + "core_actions.ts", + "index.ts", + ], + deps = [ + "//tensorboard/webapp/core:types", + "//tensorboard/webapp/types", + "@npm//@ngrx/store", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/core/actions/core_actions.ts b/saved_models/tensorboard/tensorboard/webapp/core/actions/core_actions.ts new file mode 100644 index 0000000000000000000000000000000000000000..1667e63059da8f2f0aed0a8f740a7030c87e4310 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/actions/core_actions.ts @@ -0,0 +1,101 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {createAction, props} from '@ngrx/store'; +import {Environment, PluginId, PluginsListing} from '../../types/api'; + +import {PluginsListFailureCode, Run, RunId} from '../types'; + +// HACK: Below import is for type inference. +// https://github.com/bazelbuild/rules_nodejs/issues/1013 +/** @typehack */ import * as _typeHackModels from '@ngrx/store/src/models'; + +/** + * User has clicked on a button in the header to change the plugin. + */ +export const changePlugin = createAction( + '[Core] Plugin Changed', + props<{plugin: PluginId}>() +); + +/** + * Plugin information in the hash is changed by user action. + * e.g., user can use browser navigation button to change the hash. + */ +export const pluginUrlHashChanged = createAction( + '[Core] Plugin Url Hash Changed', + props<{plugin: PluginId}>() +); + +export const coreLoaded = createAction('[Core] Loaded'); + +export const manualReload = createAction('[Core] User Triggered Reload'); + +export const reload = createAction('[Core] Auto Reload'); + +export const pluginsListingRequested = createAction( + '[Core] PluginListing Fetch Requested' +); +export const pluginsListingLoaded = createAction( + '[Core] PluginListing Fetch Successful', + props<{plugins: PluginsListing}>() +); +export const pluginsListingFailed = createAction( + '[Core] PluginListing Fetch Failed', + props<{failureCode: PluginsListFailureCode}>() +); + +/** + * Action for when Environment data has been loaded from the WebApp server. + */ +export const environmentLoaded = createAction( + '[Core] Environment Fetch Successful', + props<{environment: Environment}>() +); + +/** + * Action for when user wants to enable/disable reload. + */ +export const toggleReloadEnabled = createAction('[Core] Reload Enable Toggled'); + +/** + * Action for when user wants to change the reload period. + */ +export const changeReloadPeriod = createAction( + '[Core] Reload Period Change', + props<{periodInMs: number}>() +); + +/** + * Action for when user wants to an item count in a page of a paginated view. + */ +export const changePageSize = createAction( + '[Core] Page Size Change', + props<{size: number}>() +); + +/** + * Action for when user wants to change the runs selection in the tf-runs-selector. + * + * Action is reserved for the wrapper for the Polymer based tf-runs-selector. + */ +export const polymerInteropRunSelectionChanged = createAction( + '[Core] Run Selection Changed', + props<{nextSelection: RunId[]}>() +); + +export const fetchRunSucceeded = createAction( + '[Core] Run Fetch Successful', + props<{runs: Run[]}>() +); diff --git a/saved_models/tensorboard/tensorboard/webapp/core/actions/index.ts b/saved_models/tensorboard/tensorboard/webapp/core/actions/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..5635c15a70d35f432d5079e1baa816cf46d6452c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/actions/index.ts @@ -0,0 +1,16 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export * from './core_actions'; diff --git a/saved_models/tensorboard/tensorboard/webapp/core/core_module.ts b/saved_models/tensorboard/tensorboard/webapp/core/core_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..55769ee8162e3b11e20ca829149cbfef1852517c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/core_module.ts @@ -0,0 +1,45 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; +import {StoreModule} from '@ngrx/store'; +import {EffectsModule} from '@ngrx/effects'; + +import {TBServerDataSourceModule} from '../webapp_data_source/tb_server_data_source_module'; + +import {reducers} from './store'; +import {CoreEffects} from './effects'; +import {CORE_FEATURE_KEY} from './store/core_types'; +import { + CORE_STORE_CONFIG_TOKEN, + getConfig, +} from './store/core_initial_state_provider'; +import {DeepLinkModule} from '../deeplink/deeplink_module'; +import {HashDeepLinker} from '../deeplink'; + +@NgModule({ + imports: [ + EffectsModule.forFeature([CoreEffects]), + StoreModule.forFeature(CORE_FEATURE_KEY, reducers, CORE_STORE_CONFIG_TOKEN), + TBServerDataSourceModule, + ], + providers: [ + { + provide: CORE_STORE_CONFIG_TOKEN, + deps: [HashDeepLinker], + useFactory: getConfig, + }, + ], +}) +export class CoreModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/core/effects/BUILD b/saved_models/tensorboard/tensorboard/webapp/core/effects/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..78ef1753614fab0b0e42c14710d0125f9e1ab713 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/effects/BUILD @@ -0,0 +1,55 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "effects", + srcs = [ + "core_effects.ts", + "index.ts", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/core:types", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/feature_flag/store", + "//tensorboard/webapp/types", + "//tensorboard/webapp/webapp_data_source", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "core_effects_test_lib", + testonly = True, + srcs = [ + "core_effects_test.ts", + ], + deps = [ + ":effects", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core:types", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/feature_flag/store", + "//tensorboard/webapp/types", + "//tensorboard/webapp/webapp_data_source", + "//tensorboard/webapp/webapp_data_source:http_client_testing", + "@npm//@angular/common", + "@npm//@angular/compiler", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/core/effects/core_effects.ts b/saved_models/tensorboard/tensorboard/webapp/core/effects/core_effects.ts new file mode 100644 index 0000000000000000000000000000000000000000..d7c9acf4cd17cee514c04b80b587ef22ca0d07a7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/effects/core_effects.ts @@ -0,0 +1,162 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {Actions, ofType, createEffect} from '@ngrx/effects'; +import {EMPTY, from, zip} from 'rxjs'; +import { + map, + mergeMap, + catchError, + withLatestFrom, + filter, + tap, + distinctUntilChanged, + take, +} from 'rxjs/operators'; +import { + coreLoaded, + environmentLoaded, + manualReload, + reload, + pluginsListingRequested, + pluginsListingLoaded, + pluginsListingFailed, + changePlugin, +} from '../actions'; +import {getPluginsListLoaded, getActivePlugin} from '../store'; +import {PluginsListFailureCode} from '../types'; +import {DataLoadState} from '../../types/data'; +import { + TBServerDataSource, + TBServerError, +} from '../../webapp_data_source/tb_server_data_source'; +import {getEnabledExperimentalPlugins} from '../../feature_flag/store/feature_flag_selectors'; +import {State} from '../../app_state'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; +/** @typehack */ import * as _typeHackNgrx from '@ngrx/store/src/models'; +/** @typehack */ import * as _typeHackNgrxEffects from '@ngrx/effects'; + +@Injectable() +export class CoreEffects { + // Ngrx assumes all Effect classes have properties that inherit from the base + // JS Object. `tf_backend` does not, so we wrap it. + private readonly tfBackend = { + ref: (document.createElement('tf-backend') as any).tf_backend, + }; + + /** + * Force a data load for the Polymer-specific portion of the app. This leads + * to duplicate requests but hopefully the state is temporary until we migrate + * everything from Polymer to Angular. + * + * This is intentionally called in core/ rather than runs/ so that TB + * embedders may use runs outside of the core dashboard page, without relying + * on the Polymer runsStore. + */ + private refreshPolymerRuns() { + return from(this.tfBackend.ref.runsStore.refresh()); + } + + /** + * Requires to be exported for JSCompiler. JSCompiler, otherwise, + * think it is unused property and deadcode eliminate away. + */ + /** @export */ + readonly fetchWebAppData$ = createEffect( + () => + this.actions$.pipe( + ofType(coreLoaded, reload, manualReload), + withLatestFrom( + this.store.select(getPluginsListLoaded), + this.store.select(getEnabledExperimentalPlugins) + ), + filter(([, {state}]) => state !== DataLoadState.LOADING), + tap(() => this.store.dispatch(pluginsListingRequested())), + mergeMap(([, , enabledExperimentalPlugins]) => { + return zip( + this.webappDataSource.fetchPluginsListing( + enabledExperimentalPlugins + ), + this.fetchEnvironment(), + this.refreshPolymerRuns() + ).pipe( + map(([plugins]) => { + this.store.dispatch(pluginsListingLoaded({plugins})); + }), + catchError((e) => { + if (e instanceof TBServerError) { + this.store.dispatch( + pluginsListingFailed({failureCode: e.failureCode}) + ); + } else { + this.store.dispatch( + pluginsListingFailed({ + failureCode: PluginsListFailureCode.UNKNOWN, + }) + ); + } + return EMPTY; + }) + ); + }) + ), + {dispatch: false} + ); + + /** + * HACK: COMPOSITE ACTION -- Fire `changePlugin` on first truthy value of + * activePlugin on coreLoaded or pluginsListingLoaded. + * + * Rationale: most plugins want to be able to tell when it becomes active in + * order to, for example, fetch necessary data. By firing changePlugin on + * activePlugin first value set, we can prevent (1) other feature developer + * from responding to values changes from the store (creates composite + * actions) and (2) re-implement complex and brittle observable pattern. + * + * @export + */ + readonly dispatchChangePlugin$ = createEffect( + () => { + return this.actions$.pipe( + ofType(coreLoaded, pluginsListingLoaded), + withLatestFrom(this.store.select(getActivePlugin)), + map(([, activePlugin]) => activePlugin), + distinctUntilChanged(), + filter((activePlugin) => activePlugin !== null), + take(1), + tap((plugin) => { + this.store.dispatch(changePlugin({plugin: plugin!})); + }) + ); + }, + {dispatch: false} + ); + + private fetchEnvironment() { + return this.webappDataSource.fetchEnvironment().pipe( + tap((environment) => { + this.store.dispatch(environmentLoaded({environment})); + }) + ); + } + + constructor( + private actions$: Actions, + private store: Store, + private webappDataSource: TBServerDataSource + ) {} +} diff --git a/saved_models/tensorboard/tensorboard/webapp/core/effects/core_effects_test.ts b/saved_models/tensorboard/tensorboard/webapp/core/effects/core_effects_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..ccff14b0c0db34f6037da2e7ca132a697439bd8d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/effects/core_effects_test.ts @@ -0,0 +1,385 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed} from '@angular/core/testing'; + +import {provideMockActions} from '@ngrx/effects/testing'; +import {Action, Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import {Subject, ReplaySubject, of} from 'rxjs'; + +import {CoreEffects} from './core_effects'; +import * as coreActions from '../actions'; +import {State} from '../../app_state'; + +import { + createEnvironment, + createPluginMetadata, + createState, + createCoreState, +} from '../testing'; +import {PluginsListFailureCode, Run} from '../types'; + +import {PluginsListing} from '../../types/api'; +import {DataLoadState} from '../../types/data'; +import {TBServerDataSource} from '../../webapp_data_source/tb_server_data_source'; +import {getEnabledExperimentalPlugins} from '../../feature_flag/store/feature_flag_selectors'; +import { + TBHttpClientTestingModule, + HttpTestingController, +} from '../../webapp_data_source/tb_http_client_testing'; +import {getActivePlugin} from '../store'; + +describe('core_effects', () => { + let httpMock: HttpTestingController; + let coreEffects: CoreEffects; + let action: ReplaySubject; + let store: MockStore>; + let fetchEnvironment: jasmine.Spy; + let fetchPolymerRunsSubjects: Array>>; + let recordedActions: Action[] = []; + let createElementSpy; + + beforeEach(async () => { + action = new ReplaySubject(1); + + const initialState = createState( + createCoreState({ + pluginsListLoaded: { + state: DataLoadState.NOT_LOADED, + lastLoadedTimeInMs: null, + failureCode: null, + }, + }) + ); + await TestBed.configureTestingModule({ + imports: [TBHttpClientTestingModule], + providers: [ + provideMockActions(action), + CoreEffects, + TBServerDataSource, + provideMockStore({initialState}), + ], + }).compileComponents(); + + fetchPolymerRunsSubjects = []; + createElementSpy = spyOn(document, 'createElement'); + createElementSpy.withArgs('tf-backend').and.returnValue({ + tf_backend: { + runsStore: { + refresh() { + const fetchRunSubject = new Subject>(); + fetchPolymerRunsSubjects.push(fetchRunSubject); + return fetchRunSubject; + }, + }, + }, + }); + createElementSpy.and.callThrough(); + + coreEffects = TestBed.inject(CoreEffects); + httpMock = TestBed.inject(HttpTestingController); + store = TestBed.inject>(Store) as MockStore; + + recordedActions = []; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + recordedActions.push(action); + }); + + const dataSource = TestBed.inject(TBServerDataSource); + fetchEnvironment = spyOn(dataSource, 'fetchEnvironment') + .withArgs() + .and.returnValue(of(createEnvironment())); + + store.overrideSelector(getEnabledExperimentalPlugins, []); + }); + + afterEach(() => { + httpMock.verify(); + }); + + [ + {specSetName: '#coreLoaded', onAction: coreActions.coreLoaded()}, + {specSetName: '#reload', onAction: coreActions.reload()}, + {specSetName: '#manualReload', onAction: coreActions.manualReload()}, + ].forEach(({specSetName, onAction}) => { + describe(specSetName, () => { + beforeEach(() => { + coreEffects.fetchWebAppData$.subscribe(() => {}); + }); + + it('fetches webapp data and fires success action', () => { + store.overrideSelector(getEnabledExperimentalPlugins, []); + store.refreshState(); + + const pluginsListing: PluginsListing = { + core: createPluginMetadata('Core'), + }; + + action.next(onAction); + + fetchPolymerRunsSubjects[0].next([{id: '1', name: 'Run 1'}]); + fetchPolymerRunsSubjects[0].complete(); + // Flushing the request response invokes above subscription sychronously. + httpMock.expectOne('data/plugins_listing').flush(pluginsListing); + expect(fetchEnvironment).toHaveBeenCalled(); + + expect(recordedActions).toEqual([ + coreActions.pluginsListingRequested(), + coreActions.environmentLoaded({ + environment: createEnvironment(), + }), + coreActions.pluginsListingLoaded({ + plugins: pluginsListing, + }), + ]); + }); + + it('handles error when fetching webapp data', () => { + action.next(onAction); + + httpMock + .expectOne('data/plugins_listing') + .error(new ErrorEvent('FakeError'), {status: 404}); + + expect(recordedActions).toEqual([ + coreActions.pluginsListingRequested(), + coreActions.environmentLoaded({ + environment: createEnvironment(), + }), + coreActions.pluginsListingFailed({ + failureCode: PluginsListFailureCode.NOT_FOUND, + }), + ]); + }); + + it( + 'appends query params to the data/plugins_listing when ' + + 'getEnabledExperimentalPlugins is non-empty', + () => { + store.overrideSelector(getEnabledExperimentalPlugins, [ + 'alpha', + 'beta', + ]); + store.refreshState(); + + const pluginsListing: PluginsListing = { + core: createPluginMetadata('Core'), + }; + + action.next(onAction); + // Flushing the request response invokes above subscription sychronously. + httpMock + .expectOne( + 'data/plugins_listing?experimentalPlugin=alpha&' + + 'experimentalPlugin=beta' + ) + .flush(pluginsListing); + + expect(fetchEnvironment).toHaveBeenCalled(); + + fetchPolymerRunsSubjects[0].next([{id: '1', name: 'Run 1'}]); + fetchPolymerRunsSubjects[0].complete(); + expect(recordedActions).toEqual([ + coreActions.pluginsListingRequested(), + coreActions.environmentLoaded({ + environment: createEnvironment(), + }), + coreActions.pluginsListingLoaded({ + plugins: pluginsListing, + }), + ]); + } + ); + + it('ignores the action when loadState is loading', () => { + store.setState( + createState( + createCoreState({ + pluginsListLoaded: { + state: DataLoadState.LOADING, + lastLoadedTimeInMs: null, + failureCode: null, + }, + }) + ) + ); + const pluginsListing: PluginsListing = { + core: createPluginMetadata('Core'), + }; + + action.next(onAction); + httpMock.expectNone('data/plugins_listing'); + + action.next(onAction); + httpMock.expectNone('data/plugins_listing'); + + expect(recordedActions).toEqual([]); + + store.setState( + createState( + createCoreState({ + pluginsListLoaded: { + state: DataLoadState.FAILED, + lastLoadedTimeInMs: null, + failureCode: PluginsListFailureCode.NOT_FOUND, + }, + }) + ) + ); + + action.next(onAction); + httpMock.expectOne('data/plugins_listing').flush(pluginsListing); + fetchPolymerRunsSubjects[0].next([{id: '1', name: 'Run 1'}]); + fetchPolymerRunsSubjects[0].complete(); + expect(recordedActions).toEqual([ + coreActions.pluginsListingRequested(), + coreActions.environmentLoaded({ + environment: createEnvironment(), + }), + coreActions.pluginsListingLoaded({ + plugins: pluginsListing, + }), + ]); + + store.setState( + createState( + createCoreState({ + pluginsListLoaded: { + state: DataLoadState.LOADING, + lastLoadedTimeInMs: null, + failureCode: null, + }, + }) + ) + ); + + action.next(onAction); + httpMock.expectNone('data/plugins_listing'); + }); + }); + }); + + describe('#dispatchChangePlugin', () => { + function createPluginsListing(): PluginsListing { + return {foo: createPluginMetadata('Foo')}; + } + + beforeEach(() => { + coreEffects.dispatchChangePlugin$.subscribe(() => {}); + }); + + it('dispatches changePlugin when coreLoaded and activePlugin exists', () => { + store.overrideSelector(getActivePlugin, 'foo'); + store.refreshState(); + + action.next(coreActions.coreLoaded()); + + expect(recordedActions).toEqual([ + coreActions.changePlugin({ + plugin: 'foo', + }), + ]); + }); + + it('does not dispatch when coreLoaded but activePlugin DNE', () => { + store.overrideSelector(getActivePlugin, null); + store.refreshState(); + + action.next(coreActions.coreLoaded()); + + expect(recordedActions).toEqual([]); + }); + + it('dispatches when plugins listing is loaded', () => { + store.overrideSelector(getActivePlugin, 'foo'); + store.refreshState(); + + action.next( + coreActions.pluginsListingLoaded({plugins: createPluginsListing()}) + ); + + expect(recordedActions).toEqual([ + coreActions.changePlugin({ + plugin: 'foo', + }), + ]); + }); + + it('does not dispatch when plugins listing loads no active plugin', () => { + store.overrideSelector(getActivePlugin, null); + store.refreshState(); + + action.next( + coreActions.pluginsListingLoaded({plugins: createPluginsListing()}) + ); + + expect(recordedActions).toEqual([]); + }); + + it('does not dispatch on repeated plugins listing loads', () => { + store.overrideSelector(getActivePlugin, 'foo'); + store.refreshState(); + + action.next( + coreActions.pluginsListingLoaded({plugins: createPluginsListing()}) + ); + + expect(recordedActions).toEqual([ + coreActions.changePlugin({ + plugin: 'foo', + }), + ]); + + store.overrideSelector(getActivePlugin, 'bar'); + store.refreshState(); + + expect(recordedActions).toEqual([ + coreActions.changePlugin({ + plugin: 'foo', + }), + ]); + }); + + it( + 'ignores plugins listing loaded when activePlugin was present at the time of' + + ' coreLoaded', + () => { + store.overrideSelector(getActivePlugin, 'bar'); + store.refreshState(); + + action.next(coreActions.coreLoaded()); + + expect(recordedActions).toEqual([ + coreActions.changePlugin({ + plugin: 'bar', + }), + ]); + + store.overrideSelector(getActivePlugin, 'foo'); + store.refreshState(); + + action.next( + coreActions.pluginsListingLoaded({plugins: createPluginsListing()}) + ); + + expect(recordedActions).toEqual([ + coreActions.changePlugin({ + plugin: 'bar', + }), + ]); + } + ); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/core/effects/index.ts b/saved_models/tensorboard/tensorboard/webapp/core/effects/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..2a044ba95d43484a6493d1166b8a1c4d3d2cded8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/effects/index.ts @@ -0,0 +1,16 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export * from './core_effects'; diff --git a/saved_models/tensorboard/tensorboard/webapp/core/store/BUILD b/saved_models/tensorboard/tensorboard/webapp/core/store/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..c0f7f128282dcc3b3fbf8987c9e4ba83022422a3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/store/BUILD @@ -0,0 +1,43 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "store", + srcs = [ + "core_initial_state_provider.ts", + "core_reducers.ts", + "core_selectors.ts", + "core_types.ts", + "index.ts", + ], + deps = [ + "//tensorboard/webapp/core:types", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/deeplink", + "//tensorboard/webapp/types", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "core_store_test_lib", + testonly = True, + srcs = [ + "core_initial_state_provider_test.ts", + "core_reducers_test.ts", + "core_selectors_test.ts", + ], + deps = [ + ":store", + "//tensorboard/webapp/core:types", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/deeplink", + "//tensorboard/webapp/types", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/core/store/core_initial_state_provider.ts b/saved_models/tensorboard/tensorboard/webapp/core/store/core_initial_state_provider.ts new file mode 100644 index 0000000000000000000000000000000000000000..a881cd0882d5e4b5ce137e1f7a365ea936b26e40 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/store/core_initial_state_provider.ts @@ -0,0 +1,35 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {InjectionToken} from '@angular/core'; +import {StoreConfig} from '@ngrx/store'; + +import {CoreState} from './core_types'; +import {HashDeepLinker} from '../../deeplink'; +import {initialState} from './core_types'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +export const CORE_STORE_CONFIG_TOKEN = new InjectionToken< + StoreConfig +>('Core Feature Config'); + +export function getConfig(deepLinker: HashDeepLinker): StoreConfig { + return { + initialState: { + ...initialState, + activePlugin: deepLinker.getPluginId() || null, + } as CoreState, + }; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/core/store/core_initial_state_provider_test.ts b/saved_models/tensorboard/tensorboard/webapp/core/store/core_initial_state_provider_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..2a3b8cdcbc77218314e972796286d644e50e15d6 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/store/core_initial_state_provider_test.ts @@ -0,0 +1,81 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {getConfig} from './core_initial_state_provider'; +import {DeepLinkerInterface, SetStringOption} from '../../deeplink/types'; +import {HashDeepLinker} from '../../deeplink/hash'; +import {CoreState} from './core_types'; + +class TestableDeepLinker implements DeepLinkerInterface { + getString(key: string): string { + throw new Error('Method not implemented.'); + } + setString( + key: string, + value: string, + options?: SetStringOption | undefined + ): void { + throw new Error('Method not implemented.'); + } + getPluginId(): string { + throw new Error('Method not implemented.'); + } + setPluginId(pluginId: string, options?: SetStringOption | undefined): void { + throw new Error('Method not implemented.'); + } +} + +describe('core_initial_state_provider', () => { + describe('#getConfig', () => { + let deeplinker: HashDeepLinker; + let getPluginIdSpy: jasmine.Spy; + + beforeEach(() => { + deeplinker = new TestableDeepLinker() as HashDeepLinker; + getPluginIdSpy = spyOn(deeplinker, 'getPluginId').and.returnValue('foo'); + }); + + it('returns initialState', () => { + const config = getConfig(deeplinker); + + expect(config.initialState).toBeDefined(); + }); + + it('returns type of CoreState', () => { + const config = getConfig(deeplinker); + const state = config.initialState as CoreState; + + expect(state.activePlugin).toBeDefined(); + expect(state.pageSize).toBeDefined(); + expect(state.plugins).toBeDefined(); + expect(state.pluginsListLoaded).toBeDefined(); + expect(state.reloadEnabled).toBeDefined(); + expect(state.reloadPeriodInMs).toBeDefined(); + }); + + it('sets activePlugin from the deeplinker', () => { + getPluginIdSpy.and.returnValue('bar'); + const config = getConfig(deeplinker); + + expect((config.initialState as CoreState).activePlugin).toBe('bar'); + }); + + it('sets null if deeplinker does not have activePluginId', () => { + getPluginIdSpy.and.returnValue(''); + const config = getConfig(deeplinker); + + expect((config.initialState as CoreState).activePlugin).toBeNull(); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/core/store/core_reducers.ts b/saved_models/tensorboard/tensorboard/webapp/core/store/core_reducers.ts new file mode 100644 index 0000000000000000000000000000000000000000..dc251087752335273ccca2dc6877a74915c68f77 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/store/core_reducers.ts @@ -0,0 +1,123 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Action, createReducer, on} from '@ngrx/store'; +import {DataLoadState} from '../../types/data'; +import * as actions from '../actions'; +import {CoreState, initialState} from './core_types'; + +// HACK: These imports are for type inference. +// https://github.com/bazelbuild/rules_nodejs/issues/1013 +/** @typehack */ import * as _typeHackStore from '@ngrx/store/store'; + +const reducer = createReducer( + initialState, + on( + actions.changePlugin, + actions.pluginUrlHashChanged, + (state: CoreState, {plugin}): CoreState => { + return {...state, activePlugin: plugin}; + } + ), + on( + actions.pluginsListingRequested, + (state: CoreState): CoreState => { + return { + ...state, + pluginsListLoaded: { + ...state.pluginsListLoaded, + state: DataLoadState.LOADING, + }, + }; + } + ), + on( + actions.pluginsListingFailed, + (state: CoreState, {failureCode}): CoreState => { + return { + ...state, + pluginsListLoaded: { + ...state.pluginsListLoaded, + state: DataLoadState.FAILED, + failureCode, + }, + }; + } + ), + on( + actions.pluginsListingLoaded, + (state: CoreState, {plugins}): CoreState => { + const firstEnabledPluginId = + Object.keys(plugins).find((pluginId) => { + return plugins[pluginId].enabled; + }) || null; + const activePlugin = state.activePlugin || firstEnabledPluginId; + return { + ...state, + activePlugin, + plugins, + pluginsListLoaded: { + state: DataLoadState.LOADED, + lastLoadedTimeInMs: Date.now(), + failureCode: null, + }, + }; + } + ), + on( + actions.environmentLoaded, + (state: CoreState, {environment}): CoreState => { + return {...state, environment: environment}; + } + ), + on( + actions.toggleReloadEnabled, + (state: CoreState): CoreState => { + return { + ...state, + reloadEnabled: !state.reloadEnabled, + }; + } + ), + on( + actions.changeReloadPeriod, + (state: CoreState, {periodInMs}): CoreState => { + const nextReloadPeriod = + periodInMs > 0 ? periodInMs : state.reloadPeriodInMs; + return { + ...state, + reloadPeriodInMs: nextReloadPeriod, + }; + } + ), + on(actions.changePageSize, (state: CoreState, {size}) => { + const nextPageSize = size > 0 ? size : state.pageSize; + return { + ...state, + pageSize: nextPageSize, + }; + }), + on(actions.fetchRunSucceeded, (state, {runs}) => { + // Do not modify the runSelection since the Polymer component is the + // source of truth for the Polymer Interop. + return {...state, polymerInteropRuns: runs}; + }), + on(actions.polymerInteropRunSelectionChanged, (state, {nextSelection}) => { + return {...state, polymerInteropRunSelection: new Set(nextSelection)}; + }) +); + +export function reducers(state: CoreState | undefined, action: Action) { + return reducer(state, action); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/core/store/core_reducers_test.ts b/saved_models/tensorboard/tensorboard/webapp/core/store/core_reducers_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..7c810c80c2533ed429f57e1882566bb351177e18 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/store/core_reducers_test.ts @@ -0,0 +1,367 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as actions from '../actions'; +import {reducers} from './core_reducers'; +import { + buildPluginMetadata, + createEnvironment, + createPluginMetadata, + createCoreState, +} from '../testing'; +import {DataLoadState} from '../../types/data'; +import {PluginsListFailureCode} from '../types'; + +function createPluginsListing() { + return { + core: createPluginMetadata('Core'), + scalars: createPluginMetadata('Scalars'), + }; +} + +describe('core reducer', () => { + [ + { + action: actions.changePlugin({plugin: 'bar'}), + }, + { + action: actions.pluginUrlHashChanged({plugin: 'bar'}), + }, + ].forEach(({action}) => { + describe(action.type, () => { + it('sets activePlugin to the one in action payload', () => { + const state = createCoreState({activePlugin: 'foo', plugins: {}}); + + const nextState = reducers(state, action); + + expect(nextState.activePlugin).toBe('bar'); + }); + + it('does not change plugins when activePlugin changes', () => { + const state = createCoreState({ + activePlugin: 'foo', + plugins: createPluginsListing(), + }); + + const nextState = reducers(state, action); + + expect(nextState.plugins).toEqual(createPluginsListing()); + }); + }); + }); + + describe('#pluginsListingRequested', () => { + it('changes the pluginsListLoaded state to LOADING', () => { + const state = createCoreState({ + pluginsListLoaded: { + lastLoadedTimeInMs: null, + state: DataLoadState.NOT_LOADED, + failureCode: null, + }, + }); + const nextState = reducers(state, actions.pluginsListingRequested()); + + expect(nextState.pluginsListLoaded.state).toEqual(DataLoadState.LOADING); + }); + + it('keeps the lastLoadedTimeInMs the same', () => { + const state = createCoreState({ + pluginsListLoaded: { + lastLoadedTimeInMs: 1337, + state: DataLoadState.NOT_LOADED, + failureCode: null, + }, + }); + const nextState = reducers(state, actions.pluginsListingRequested()); + + expect(nextState.pluginsListLoaded.lastLoadedTimeInMs).toBe(1337); + }); + + it('keeps the failureCode', () => { + const state = createCoreState({ + pluginsListLoaded: { + lastLoadedTimeInMs: null, + state: DataLoadState.FAILED, + failureCode: PluginsListFailureCode.NOT_FOUND, + }, + }); + const nextState = reducers(state, actions.pluginsListingRequested()); + + expect(nextState.pluginsListLoaded.failureCode).toEqual( + PluginsListFailureCode.NOT_FOUND + ); + }); + }); + + describe('#pluginsListingFailed', () => { + it('changes the pluginsListLoaded state to FAILED', () => { + const state = createCoreState({ + pluginsListLoaded: { + lastLoadedTimeInMs: null, + state: DataLoadState.LOADING, + failureCode: null, + }, + }); + const nextState = reducers( + state, + actions.pluginsListingFailed({ + failureCode: PluginsListFailureCode.UNKNOWN, + }) + ); + + expect(nextState.pluginsListLoaded.state).toEqual(DataLoadState.FAILED); + }); + + it('keeps the lastLoadedTimeInMs the same', () => { + const state = createCoreState({ + pluginsListLoaded: { + lastLoadedTimeInMs: 1337, + state: DataLoadState.LOADING, + failureCode: null, + }, + }); + const nextState = reducers( + state, + actions.pluginsListingFailed({ + failureCode: PluginsListFailureCode.UNKNOWN, + }) + ); + + expect(nextState.pluginsListLoaded.lastLoadedTimeInMs).toBe(1337); + }); + + it('sets the failureCode', () => { + const state = createCoreState({ + pluginsListLoaded: { + lastLoadedTimeInMs: null, + state: DataLoadState.LOADING, + failureCode: null, + }, + }); + const nextState = reducers( + state, + actions.pluginsListingFailed({ + failureCode: PluginsListFailureCode.NOT_FOUND, + }) + ); + + expect(nextState.pluginsListLoaded.failureCode).toEqual( + PluginsListFailureCode.NOT_FOUND + ); + }); + }); + + describe('#pluginsListingLoaded', () => { + beforeEach(() => { + // Angular's zonejs installs mock clock by default. No need for another. + jasmine.clock().mockDate(new Date(1000)); + }); + + it('sets plugins with the payload', () => { + const state = createCoreState({activePlugin: 'foo', plugins: {}}); + const nextState = reducers( + state, + actions.pluginsListingLoaded({plugins: createPluginsListing()}) + ); + + expect(nextState.plugins).toEqual(createPluginsListing()); + }); + + it('sets the pluginsListLoaded', () => { + const state = createCoreState({ + activePlugin: 'foo', + plugins: {}, + pluginsListLoaded: { + state: DataLoadState.NOT_LOADED, + lastLoadedTimeInMs: null, + failureCode: null, + }, + }); + const nextState = reducers( + state, + actions.pluginsListingLoaded({plugins: createPluginsListing()}) + ); + + expect(nextState.pluginsListLoaded).toEqual({ + state: DataLoadState.LOADED, + lastLoadedTimeInMs: 1000, + failureCode: null, + }); + }); + + it('sets activePlugin to the first enabled plugin when not defined', () => { + const state = createCoreState({activePlugin: null, plugins: {}}); + + const nextState = reducers( + state, + actions.pluginsListingLoaded({ + plugins: { + foo: buildPluginMetadata({tab_name: 'foo', enabled: false}), + bar: buildPluginMetadata({tab_name: 'bar', enabled: true}), + }, + }) + ); + + expect(nextState.activePlugin).toBe('bar'); + }); + + it('sets the plugin to null when nothing is active', () => { + const state = createCoreState({activePlugin: null, plugins: {}}); + + const nextState = reducers( + state, + actions.pluginsListingLoaded({ + plugins: { + foo: buildPluginMetadata({tab_name: 'foo', enabled: false}), + bar: buildPluginMetadata({tab_name: 'bar', enabled: false}), + }, + }) + ); + + expect(nextState.activePlugin).toBeNull(); + }); + + it('does not change activePlugin when already defined', () => { + const state = createCoreState({activePlugin: 'foo', plugins: {}}); + + const nextState = reducers( + state, + actions.pluginsListingLoaded({plugins: createPluginsListing()}) + ); + + expect(nextState.activePlugin).toBe('foo'); + }); + + it('clears the failureCode', () => { + const state = createCoreState({ + pluginsListLoaded: { + lastLoadedTimeInMs: null, + state: DataLoadState.LOADING, + failureCode: PluginsListFailureCode.UNKNOWN, + }, + }); + const nextState = reducers( + state, + actions.pluginsListingLoaded({plugins: createPluginsListing()}) + ); + + expect(nextState.pluginsListLoaded.failureCode).toBeNull(); + }); + }); + + describe('#environmentLoaded', () => { + it('sets environment with the payload', () => { + const state = createCoreState({ + environment: createEnvironment({data_location: '/original/location'}), + }); + const nextState = reducers( + state, + actions.environmentLoaded({ + environment: createEnvironment({data_location: '/new/location'}), + }) + ); + + expect(nextState.environment.data_location).toEqual('/new/location'); + }); + }); + + describe('#toggleReloadEnabled', () => { + it('toggles reloadEnabled', () => { + const state1 = createCoreState({reloadEnabled: false}); + + const state2 = reducers(state1, actions.toggleReloadEnabled()); + + expect(state2.reloadEnabled).toBe(true); + + const state3 = reducers(state2, actions.toggleReloadEnabled()); + + expect(state3.reloadEnabled).toBe(false); + }); + }); + + describe('#changeReloadPeriod', () => { + it('sets the reloadPeriodInMs', () => { + const state = createCoreState({reloadPeriodInMs: 1}); + + const nextState = reducers( + state, + actions.changeReloadPeriod({periodInMs: 1000}) + ); + + expect(nextState.reloadPeriodInMs).toBe(1000); + }); + + it('ignores the action when periodInMs is non-positive', () => { + const baseState = createCoreState({reloadPeriodInMs: 1}); + + const state1 = reducers( + baseState, + actions.changeReloadPeriod({periodInMs: 0}) + ); + expect(state1.reloadPeriodInMs).toBe(1); + + const state2 = reducers( + baseState, + actions.changeReloadPeriod({periodInMs: -1000}) + ); + expect(state2.reloadPeriodInMs).toBe(1); + }); + }); + + describe('#fetchRunSucceeded', () => { + it('sets polymerInteropRuns', () => { + const state = createCoreState({polymerInteropRuns: []}); + + const nextState = reducers( + state, + actions.fetchRunSucceeded({ + runs: [ + {id: '1', name: 'Run name 1'}, + {id: '2', name: 'Run name 2'}, + ], + }) + ); + + expect(nextState.polymerInteropRuns).toEqual([ + {id: '1', name: 'Run name 1'}, + {id: '2', name: 'Run name 2'}, + ]); + }); + }); + + describe('#polymerInteropRunSelectionChanged', () => { + it('changes the polymerInteropRunSelection', () => { + const state = createCoreState({ + polymerInteropRuns: [ + {id: '1', name: 'Run name 1'}, + {id: '2', name: 'Run name 2'}, + {id: '3', name: 'Run name 3'}, + {id: '4', name: 'Run name 4'}, + ], + polymerInteropRunSelection: new Set(), + }); + + const nextState = reducers( + state, + actions.polymerInteropRunSelectionChanged({ + nextSelection: ['1', '2', '4'], + }) + ); + + expect(nextState.polymerInteropRunSelection).toEqual( + new Set(['1', '2', '4']) + ); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/core/store/core_selectors.ts b/saved_models/tensorboard/tensorboard/webapp/core/store/core_selectors.ts new file mode 100644 index 0000000000000000000000000000000000000000..ea83085c9a355966e1d01698061ade58d452ac66 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/store/core_selectors.ts @@ -0,0 +1,80 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {createSelector, createFeatureSelector} from '@ngrx/store'; +import {Environment, PluginId, PluginsListing} from '../../types/api'; +import { + CoreState, + State, + CORE_FEATURE_KEY, + PluginsListLoadState, +} from './core_types'; +import {Run, RunId} from '../types'; + +// HACK: These imports are for type inference. +// https://github.com/bazelbuild/rules_nodejs/issues/1013 +/** @typehack */ import * as _typeHackSelector from '@ngrx/store/src/selector'; +/** @typehack */ import * as _typeHackStore from '@ngrx/store/store'; + +const selectCoreState = createFeatureSelector( + CORE_FEATURE_KEY +); + +export const getPluginsListLoaded = createSelector( + selectCoreState, + (state: CoreState): PluginsListLoadState => state.pluginsListLoaded +); + +export const getActivePlugin = createSelector( + selectCoreState, + (state: CoreState): PluginId | null => { + return state.activePlugin; + } +); + +export const getPlugins = createSelector( + selectCoreState, + (state: CoreState): PluginsListing => { + return state.plugins; + } +); + +export const getEnvironment = createSelector( + selectCoreState, + (state: CoreState): Environment => { + return state.environment; + } +); + +export const getReloadEnabled = createSelector( + selectCoreState, + (state: CoreState): boolean => { + return state.reloadEnabled; + } +); + +export const getReloadPeriodInMs = createSelector( + selectCoreState, + (state: CoreState): number => { + return state.reloadPeriodInMs; + } +); + +export const getPageSize = createSelector( + selectCoreState, + (state: CoreState): number => { + return state.pageSize; + } +); diff --git a/saved_models/tensorboard/tensorboard/webapp/core/store/core_selectors_test.ts b/saved_models/tensorboard/tensorboard/webapp/core/store/core_selectors_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..80211fdbd130ef1159934cbc474e01dcf1cafd23 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/store/core_selectors_test.ts @@ -0,0 +1,18 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as selectors from './core_selectors'; +import {createState, createCoreState} from '../testing'; + +describe('core selectors', () => {}); diff --git a/saved_models/tensorboard/tensorboard/webapp/core/store/core_types.ts b/saved_models/tensorboard/tensorboard/webapp/core/store/core_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..e8d608158b7e482f05d55ad463e04488b13a21c9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/store/core_types.ts @@ -0,0 +1,97 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +// It is an abstraction leak to incorporate the API types directly into our +// state. However, it's OK for now, in that it's expedient and avoids keeping +// redundant copies in sync. If the state shape and the API types need to +// diverge in the future, that's straightforward: we'll leave types/api in place, +// remove this import, and write the divergent state types explicitly here. +import {Environment, PluginId, PluginsListing} from '../../types/api'; +import {DataLoadState, LoadState} from '../../types/data'; + +import {PluginsListFailureCode, Run, RunId} from '../types'; + +export const CORE_FEATURE_KEY = 'core'; + +export interface CoreState { + activePlugin: PluginId | null; + plugins: PluginsListing; + pluginsListLoaded: PluginsListLoadState; + reloadPeriodInMs: number; + reloadEnabled: boolean; + // Size of a page in a general paginated view that is configurable by user via + // settings. + pageSize: number; + environment: Environment; + // TODO(stephanwlee): move these state to the `runs` features. + // For now, we want them here for Polymer interop states reasons, too. + polymerInteropRuns: Run[]; + polymerInteropRunSelection: Set; +} + +/* + * LoadState enhanced with a failureCode field. + */ +export type PluginsListLoadState = + | NotLoadedPluginsListLoadState + | LoadedPluginsListLoadState + | LoadingPluginsListLoadState + | FailedPluginsListLoadState; + +interface NotLoadedPluginsListLoadState extends LoadState { + state: DataLoadState.NOT_LOADED; + failureCode: null; +} + +interface LoadedPluginsListLoadState extends LoadState { + state: DataLoadState.LOADED; + failureCode: null; +} + +interface LoadingPluginsListLoadState extends LoadState { + state: DataLoadState.LOADING; + // Reason for failure of most recently completed request. This should not be + // set if there has not been a failure or if the most recently completed + // request was successful. + failureCode: PluginsListFailureCode | null; +} + +interface FailedPluginsListLoadState extends LoadState { + state: DataLoadState.FAILED; + failureCode: PluginsListFailureCode; +} + +export interface State { + [CORE_FEATURE_KEY]?: CoreState; +} + +export const initialState: CoreState = { + activePlugin: null, + plugins: {}, + pluginsListLoaded: { + state: DataLoadState.NOT_LOADED, + lastLoadedTimeInMs: null, + failureCode: null, + }, + reloadPeriodInMs: 30000, + reloadEnabled: false, + pageSize: 12, + environment: { + data_location: '', + window_title: '', + }, + polymerInteropRuns: [], + polymerInteropRunSelection: new Set(), +}; diff --git a/saved_models/tensorboard/tensorboard/webapp/core/store/index.ts b/saved_models/tensorboard/tensorboard/webapp/core/store/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..5f959f4a3f7be950e29d82efd1155745e00342af --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/store/index.ts @@ -0,0 +1,18 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export * from './core_reducers'; +export * from './core_selectors'; +export {State} from './core_types'; diff --git a/saved_models/tensorboard/tensorboard/webapp/core/testing/BUILD b/saved_models/tensorboard/tensorboard/webapp/core/testing/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..b193b81be06c067f3f5f0f2a9c1809dff11f06c1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/testing/BUILD @@ -0,0 +1,13 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +tf_ts_library( + name = "testing", + testonly = True, + srcs = ["index.ts"], + deps = [ + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/types", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/core/testing/index.ts b/saved_models/tensorboard/tensorboard/webapp/core/testing/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..c21810cc5e625aea11ff0f44c5d6a36d8dfccbdf --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/testing/index.ts @@ -0,0 +1,75 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + Environment, + LoadingMechanismType, + PluginMetadata, +} from '../../types/api'; +import {DataLoadState} from '../../types/data'; +import {CoreState, State, CORE_FEATURE_KEY} from '../store/core_types'; + +export function buildPluginMetadata( + override: Partial +): PluginMetadata { + return { + disable_reload: false, + enabled: true, + loading_mechanism: { + type: LoadingMechanismType.NONE, + }, + tab_name: 'foo', + remove_dom: false, + ...override, + }; +} + +export function createPluginMetadata(displayName: string): PluginMetadata { + return buildPluginMetadata({ + tab_name: displayName, + }); +} + +export function createEnvironment( + override?: Partial +): Environment { + return { + data_location: 'test/dir', + window_title: 'TensorBoard', + ...override, + }; +} + +export function createCoreState(override?: Partial): CoreState { + return { + activePlugin: null, + plugins: {}, + pluginsListLoaded: { + state: DataLoadState.NOT_LOADED, + lastLoadedTimeInMs: null, + failureCode: null, + }, + reloadPeriodInMs: 30000, + reloadEnabled: true, + pageSize: 10, + environment: createEnvironment(), + polymerInteropRuns: [], + polymerInteropRunSelection: new Set(), + ...override, + }; +} + +export function createState(coreState: CoreState): State { + return {[CORE_FEATURE_KEY]: coreState}; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/core/types.ts b/saved_models/tensorboard/tensorboard/webapp/core/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..e4401d566282ebfad059e85826b8af6b5cd91f51 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/types.ts @@ -0,0 +1,25 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export type RunId = string; + +export interface Run { + id: RunId; + name: string; +} + +export enum PluginsListFailureCode { + UNKNOWN = 'UNKNOWN', + NOT_FOUND = 'NOT_FOUND', +} diff --git a/saved_models/tensorboard/tensorboard/webapp/core/views/BUILD b/saved_models/tensorboard/tensorboard/webapp/core/views/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..acfbd3afa6985150ea70616d23b08b717e7f04ee --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/views/BUILD @@ -0,0 +1,61 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "hash_storage", + srcs = [ + "hash_storage_component.ts", + "hash_storage_container.ts", + "hash_storage_module.ts", + ], + deps = [ + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/deeplink", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@ngrx/store", + ], +) + +ng_module( + name = "page_title", + srcs = [ + "page_title_component.ts", + "page_title_container.ts", + "page_title_module.ts", + ], + deps = [ + "//tensorboard/webapp/core/store", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "test_lib", + testonly = True, + srcs = [ + "hash_storage_test.ts", + ], + deps = [ + ":hash_storage", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_platform_browser_animations", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/deeplink", + "@npm//@angular/common", + "@npm//@angular/compiler", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/core/views/hash_storage_component.ts b/saved_models/tensorboard/tensorboard/webapp/core/views/hash_storage_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..3d9a30cdd675751fee240cce12a67b243da33148 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/views/hash_storage_component.ts @@ -0,0 +1,92 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + Input, + OnChanges, + SimpleChanges, + OnInit, + OnDestroy, + Output, + EventEmitter, +} from '@angular/core'; + +import {HashDeepLinker} from '../../deeplink/hash'; +import {SetStringOption} from '../../deeplink/types'; +export enum ChangedProp { + ACTIVE_PLUGIN, +} + +@Component({ + selector: 'hash-storage-component', + template: '', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class HashStorageComponent implements OnInit, OnChanges, OnDestroy { + private readonly onHashChange = this.onHashChangedImpl.bind(this); + + constructor(private readonly deepLinker: HashDeepLinker) {} + + @Input() + activePluginId!: string | null; + + @Output() + onValueChange = new EventEmitter<{prop: ChangedProp; value: string}>(); + + private onHashChangedImpl() { + const activePluginId = this.deepLinker.getPluginId(); + + if (activePluginId !== this.activePluginId) { + this.onValueChange.emit({ + prop: ChangedProp.ACTIVE_PLUGIN, + value: activePluginId, + }); + } + } + + ngOnInit() { + // Cannot use the tf_storage hash listener because it binds to event before the + // zone.js patch. According to [1], zone.js patches various asynchronos calls and + // event listeners to detect "changes" and mark components as dirty for re-render. + // When using tf_storage hash listener, it causes bad renders in Angular due to + // missing dirtiness detection. + // [1]: https://blog.angular-university.io/how-does-angular-2-change-detection-really-work/ + window.addEventListener('hashchange', this.onHashChange); + } + + ngOnDestroy() { + window.removeEventListener('hashchange', this.onHashChange); + } + + ngOnChanges(changes: SimpleChanges) { + if (changes['activePluginId']) { + const activePluginIdChange = changes['activePluginId']; + + const option: SetStringOption = { + defaultValue: '', + useLocationReplace: + activePluginIdChange.previousValue === null || + activePluginIdChange.firstChange, + }; + + const value = + activePluginIdChange.currentValue === null + ? '' + : activePluginIdChange.currentValue; + this.deepLinker.setPluginId(value, option); + } + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/core/views/hash_storage_container.ts b/saved_models/tensorboard/tensorboard/webapp/core/views/hash_storage_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..7203b8b8ac9492a34f653fc6676913a32071da78 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/views/hash_storage_container.ts @@ -0,0 +1,56 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component} from '@angular/core'; +import {Store, select} from '@ngrx/store'; + +import {getActivePlugin} from '../store'; +import {State} from '../store/core_types'; +import {pluginUrlHashChanged} from '../actions'; + +import {ChangedProp} from './hash_storage_component'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'hash-storage', + template: ` + + + `, + styles: [ + ` + :host { + display: none; + } + `, + ], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class HashStorageContainer { + readonly activePluginId$ = this.store.pipe(select(getActivePlugin)); + + constructor(private readonly store: Store) {} + + onValueChanged(change: {prop: ChangedProp; value: string}) { + switch (change.prop) { + case ChangedProp.ACTIVE_PLUGIN: + this.store.dispatch(pluginUrlHashChanged({plugin: change.value})); + break; + } + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/core/views/hash_storage_module.ts b/saved_models/tensorboard/tensorboard/webapp/core/views/hash_storage_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..802b552df10fb0f3b4ebeed86342847a6776d93e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/views/hash_storage_module.ts @@ -0,0 +1,27 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; + +import {HashStorageContainer} from './hash_storage_container'; +import {HashStorageComponent} from './hash_storage_component'; +import {DeepLinkModule} from '../../deeplink/deeplink_module'; + +@NgModule({ + declarations: [HashStorageContainer, HashStorageComponent], + exports: [HashStorageContainer], + imports: [CommonModule, DeepLinkModule], +}) +export class HashStorageModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/core/views/hash_storage_test.ts b/saved_models/tensorboard/tensorboard/webapp/core/views/hash_storage_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..f85293db8e720c976796f32fae0edbc037291bed --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/views/hash_storage_test.ts @@ -0,0 +1,169 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed} from '@angular/core/testing'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Store} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; +import {CommonModule} from '@angular/common'; + +import {getActivePlugin} from '../store'; +import {State} from '../store/core_types'; +import {pluginUrlHashChanged} from '../actions'; +import {SetStringOption} from '../../deeplink/types'; + +import {HashStorageContainer} from './hash_storage_container'; +import {HashStorageComponent} from './hash_storage_component'; +import {HashDeepLinker, DeepLinkerInterface} from '../../deeplink'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; +/** @typehack */ import * as _typeHackStoreTesting from '@ngrx/store/testing'; + +class TestableDeeplinker implements DeepLinkerInterface { + getString(key: string) { + return key; + } + setString(key: string, value: string) {} + getPluginId() { + return 'plugin'; + } + setPluginId(pluginId: string) {} +} + +describe('hash storage test', () => { + let store: MockStore; + let dispatchSpy: jasmine.Spy; + let setPluginIdSpy: jasmine.Spy; + let getPluginIdSpy: jasmine.Spy; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [NoopAnimationsModule, CommonModule], + providers: [ + provideMockStore(), + HashStorageContainer, + {provide: HashDeepLinker, useClass: TestableDeeplinker}, + ], + declarations: [HashStorageContainer, HashStorageComponent], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + dispatchSpy = spyOn(store, 'dispatch'); + + const deepLinker = TestBed.inject(HashDeepLinker); + setPluginIdSpy = spyOn(deepLinker, 'setPluginId'); + getPluginIdSpy = spyOn(deepLinker, 'getPluginId'); + }); + + it('sets hash to plugin id when plugin id changes from null to value', () => { + const setPluginIdCalls: Array<{ + id: string | null; + option: SetStringOption; + }> = []; + setPluginIdSpy.and.callFake( + (id: string | null, option: SetStringOption) => { + setPluginIdCalls.push({ + id, + option, + }); + } + ); + store.overrideSelector(getActivePlugin, null); + const fixture = TestBed.createComponent(HashStorageContainer); + fixture.detectChanges(); + + store.overrideSelector(getActivePlugin, null); + store.refreshState(); + fixture.detectChanges(); + + store.overrideSelector(getActivePlugin, 'foo'); + store.refreshState(); + fixture.detectChanges(); + + store.overrideSelector(getActivePlugin, null); + store.refreshState(); + fixture.detectChanges(); + + expect(setPluginIdCalls).toEqual([ + { + id: '', + option: { + useLocationReplace: true, + defaultValue: '', + }, + }, + { + id: 'foo', + option: { + useLocationReplace: true, + defaultValue: '', + }, + }, + { + id: '', + option: { + useLocationReplace: false, + defaultValue: '', + }, + }, + ]); + }); + + it('sets the hash to empty string when activePlugin is not set', () => { + store.overrideSelector(getActivePlugin, null); + const fixture = TestBed.createComponent(HashStorageContainer); + fixture.detectChanges(); + + expect(setPluginIdSpy).toHaveBeenCalledWith('', { + useLocationReplace: true, + defaultValue: '', + }); + }); + + it('sets the hash to empty string when activePlugin is empty string', () => { + store.overrideSelector(getActivePlugin, ''); + const fixture = TestBed.createComponent(HashStorageContainer); + fixture.detectChanges(); + + expect(setPluginIdSpy).toHaveBeenCalledWith('', { + useLocationReplace: true, + defaultValue: '', + }); + }); + + it('changes hash with new pluginId on subsequent changes', () => { + store.overrideSelector(getActivePlugin, 'foo'); + const fixture = TestBed.createComponent(HashStorageContainer); + fixture.detectChanges(); + getPluginIdSpy.and.returnValue('foo'); + + store.overrideSelector(getActivePlugin, 'bar'); + store.refreshState(); + fixture.detectChanges(); + + expect(setPluginIdSpy).toHaveBeenCalledTimes(2); + expect(setPluginIdSpy).toHaveBeenCalledWith('bar', jasmine.any(Object)); + }); + + it('dispatches plugin changed event when hash changes', () => { + store.overrideSelector(getActivePlugin, 'foo'); + const fixture = TestBed.createComponent(HashStorageContainer); + fixture.detectChanges(); + getPluginIdSpy.and.returnValue('bar'); + + window.dispatchEvent(new Event('hashchange')); + expect(dispatchSpy).toHaveBeenCalledWith( + pluginUrlHashChanged({plugin: 'bar'}) + ); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/core/views/page_title_component.ts b/saved_models/tensorboard/tensorboard/webapp/core/views/page_title_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..fe91068453a853d2de50a7e371de7ec1783315ad --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/views/page_title_component.ts @@ -0,0 +1,37 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + Input, + OnChanges, + SimpleChanges, +} from '@angular/core'; + +@Component({ + selector: 'page-title-component', + template: '', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PageTitleComponent implements OnChanges { + @Input() + title!: string; + + ngOnChanges(changes: SimpleChanges) { + if (changes['title']) { + document.title = changes['title'].currentValue; + } + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/core/views/page_title_container.ts b/saved_models/tensorboard/tensorboard/webapp/core/views/page_title_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..1e30e4569702aaf2f139b92d0ba3d7baa6f0812c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/views/page_title_container.ts @@ -0,0 +1,47 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component} from '@angular/core'; +import {Store, select} from '@ngrx/store'; +import {distinctUntilChanged, map} from 'rxjs/operators'; + +import {getEnvironment} from '../store'; +import {State} from '../store/core_types'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'page-title', + template: ` + + `, + styles: [ + ` + :host { + display: none; + } + `, + ], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PageTitleContainer { + readonly title$ = this.store.pipe( + select(getEnvironment), + map((env) => env.window_title || 'TensorBoard'), + // (it's an empty string when the `--window_title` flag is not set) + distinctUntilChanged() + ); + + constructor(private readonly store: Store) {} +} diff --git a/saved_models/tensorboard/tensorboard/webapp/core/views/page_title_module.ts b/saved_models/tensorboard/tensorboard/webapp/core/views/page_title_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..ca3cd0f9cd8c8f091fa633ddaee38b6642aed8f2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/core/views/page_title_module.ts @@ -0,0 +1,26 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; + +import {PageTitleContainer} from './page_title_container'; +import {PageTitleComponent} from './page_title_component'; + +@NgModule({ + declarations: [PageTitleContainer, PageTitleComponent], + exports: [PageTitleContainer], + imports: [CommonModule], +}) +export class PageTitleModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/deeplink/BUILD b/saved_models/tensorboard/tensorboard/webapp/deeplink/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..d68e703e74827c5c303b9322caf385828ce1577b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/deeplink/BUILD @@ -0,0 +1,29 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "deeplink", + srcs = [ + "deeplink_module.ts", + "hash.ts", + "index.ts", + "types.ts", + ], + deps = [ + "@npm//@angular/core", + ], +) + +ng_module( + name = "deeplink_test_lib", + testonly = True, + srcs = [ + "deeplink_test.ts", + ], + deps = [ + ":deeplink", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/deeplink/deeplink_module.ts b/saved_models/tensorboard/tensorboard/webapp/deeplink/deeplink_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..384d89f39e3df952d6410814e52ef05410d9968f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/deeplink/deeplink_module.ts @@ -0,0 +1,22 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; + +import {HashDeepLinker} from './hash'; + +@NgModule({ + providers: [HashDeepLinker], +}) +export class DeepLinkModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/deeplink/deeplink_test.ts b/saved_models/tensorboard/tensorboard/webapp/deeplink/deeplink_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..047ac89c32b6ce258581828dacf7b861040ba553 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/deeplink/deeplink_test.ts @@ -0,0 +1,82 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed} from '@angular/core/testing'; + +import {HashDeepLinker, TEST_ONLY} from './hash'; + +describe('deeplink', () => { + let deepLinker: HashDeepLinker; + let setStringSpy: jasmine.Spy; + let getStringSpy: jasmine.Spy; + let migrateLegacyURLSchemeSpy: jasmine.Spy; + let setUseHashSpy: jasmine.Spy; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + providers: [HashDeepLinker], + }).compileComponents(); + + setStringSpy = jasmine.createSpy(); + getStringSpy = jasmine.createSpy(); + migrateLegacyURLSchemeSpy = jasmine.createSpy(); + setUseHashSpy = jasmine.createSpy(); + + // Cannot safely stub out window.location.hash or rely on test framework + // to not make use of the hash (it does). + + // Do not rely on Polymer bundle in the test. + const createElementSpy = spyOn(document, 'createElement'); + createElementSpy.withArgs('tf-storage').and.returnValue({ + tf_storage: { + setString: setStringSpy, + getString: getStringSpy, + migrateLegacyURLScheme: migrateLegacyURLSchemeSpy, + }, + } as any); + createElementSpy.withArgs('tf-globals').and.returnValue({ + tf_globals: { + setUseHash: setUseHashSpy, + }, + } as any); + createElementSpy.and.callThrough(); + + deepLinker = TestBed.inject(HashDeepLinker); + }); + + it('uses real hash and migrates legacy URLs', () => { + expect(setUseHashSpy).toHaveBeenCalledWith(true); + expect(migrateLegacyURLSchemeSpy).toHaveBeenCalled(); + }); + + it('#getString calls tf_storage getString', () => { + getStringSpy.withArgs('foo').and.returnValue('bar'); + expect(deepLinker.getString('foo')).toBe('bar'); + }); + + it('#setString calls tf_storage setString', () => { + deepLinker.setString('foo', 'bar'); + expect(setStringSpy).toHaveBeenCalledWith('foo', 'bar', undefined); + }); + + it('#getPluginId calls tf_storage getString with predefined key', () => { + getStringSpy.withArgs(TEST_ONLY.TAB).and.returnValue('bar'); + expect(deepLinker.getPluginId()).toBe('bar'); + }); + + it('#setPluginId calls tf_storage setString with predefined key', () => { + deepLinker.setPluginId('bar'); + expect(setStringSpy).toHaveBeenCalledWith(TEST_ONLY.TAB, 'bar', undefined); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/deeplink/hash.ts b/saved_models/tensorboard/tensorboard/webapp/deeplink/hash.ts new file mode 100644 index 0000000000000000000000000000000000000000..7f884c88cfa4f6bd59aba2fa8fffe4033e0e7ca0 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/deeplink/hash.ts @@ -0,0 +1,72 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {Injectable} from '@angular/core'; + +import {DeepLinkerInterface, SetStringOption} from './types'; + +// TODO(tensorboard-team): merge this module with tf_storage/storage.ts when +// tf_ts_library can be referenced by tf_web_library. +const TAB = '__tab__'; + +interface TfGlobalsElement extends HTMLElement { + tf_globals: { + setUseHash(use: boolean): void; + }; +} + +interface TfStorageElement extends HTMLElement { + tf_storage: { + setString(key: string, value: string, options?: SetStringOption): void; + getString(key: string): string; + migrateLegacyURLScheme(): void; + }; +} + +@Injectable() +export class HashDeepLinker implements DeepLinkerInterface { + private readonly tfStorage: TfStorageElement; + + constructor() { + this.tfStorage = document.createElement('tf-storage') as TfStorageElement; + const tfGlobals = document.createElement('tf-globals') as TfGlobalsElement; + + // Note: `migrateLegacyURLScheme()` must be called before `setUseHash`, so + // that tfStorage reads from the actual URL, not the fake hash for tests + // only. + tfGlobals.tf_globals.setUseHash(true); + this.tfStorage.tf_storage.migrateLegacyURLScheme(); + } + + getString(key: string): string { + return this.tfStorage.tf_storage.getString(key); + } + + setString(key: string, value: string, options?: SetStringOption): void { + this.tfStorage.tf_storage.setString(key, value, options); + } + + getPluginId(): string { + return this.getString(TAB); + } + + setPluginId(pluginId: string, options?: SetStringOption): void { + this.setString(TAB, pluginId, options); + } +} + +export const TEST_ONLY = { + TAB, +}; diff --git a/saved_models/tensorboard/tensorboard/webapp/deeplink/hash_test.ts b/saved_models/tensorboard/tensorboard/webapp/deeplink/hash_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..1ab4c8b38be9f623c630408b7a24788e61cdbed8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/deeplink/hash_test.ts @@ -0,0 +1,94 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed} from '@angular/core/testing'; + +import {HashStorageComponent} from './hash'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; +/** @typehack */ import * as _typeHackStoreTesting from '@ngrx/store/testing'; + +describe('hash storage test', () => { + let store: MockStore; + let dispatchSpy: jasmine.Spy; + let setStringSpy: jasmine.Spy; + let getStringSpy: jasmine.Spy; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [NoopAnimationsModule, CommonModule], + providers: [provideMockStore(), HashStorageContainer], + declarations: [HashStorageContainer, HashStorageComponent], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + dispatchSpy = spyOn(store, 'dispatch'); + + setStringSpy = jasmine.createSpy(); + getStringSpy = jasmine.createSpy(); + + // Cannot safely stub out window.location.hash or rely on test framework + // to not make use of the hash (it does). + + // Do not rely on Polymer bundle in the test. + const createElement = spyOn(document, 'createElement'); + createElement.withArgs('tf-storage').and.returnValue({ + tf_storage: { + setString: setStringSpy, + getString: getStringSpy, + }, + } as any); + createElement.withArgs('tf-globals').and.returnValue({ + tf_globals: { + setUseHash: jasmine.createSpy(), + }, + } as any); + createElement.and.callThrough(); + }); + + it('sets the hash to plugin id by replacing on first load', () => { + store.overrideSelector(getActivePlugin, 'foo'); + const fixture = TestBed.createComponent(HashStorageContainer); + fixture.detectChanges(); + + expect(setStringSpy).toHaveBeenCalledWith(jasmine.any(String), 'foo', { + useLocationReplace: true, + }); + }); + + it('changes hash with new pluginId on subsequent changes', () => { + store.overrideSelector(getActivePlugin, 'foo'); + const fixture = TestBed.createComponent(HashStorageContainer); + fixture.detectChanges(); + getStringSpy.and.returnValue('foo'); + + store.overrideSelector(getActivePlugin, 'bar'); + store.refreshState(); + fixture.detectChanges(); + + expect(setStringSpy).toHaveBeenCalledTimes(2); + expect(setStringSpy).toHaveBeenCalledWith(jasmine.any(String), 'bar', {}); + }); + + it('dispatches plugin changed event when hash changes', () => { + store.overrideSelector(getActivePlugin, 'foo'); + const fixture = TestBed.createComponent(HashStorageContainer); + fixture.detectChanges(); + getStringSpy.and.returnValue('bar'); + + window.dispatchEvent(new Event('hashchange')); + expect(dispatchSpy).toHaveBeenCalledWith( + pluginUrlHashChanged({plugin: 'bar'}) + ); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/deeplink/index.ts b/saved_models/tensorboard/tensorboard/webapp/deeplink/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..3ff40032e9c3009d53e211972bbd0daabcf9e035 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/deeplink/index.ts @@ -0,0 +1,17 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export * from './types'; +export * from './hash'; diff --git a/saved_models/tensorboard/tensorboard/webapp/deeplink/types.ts b/saved_models/tensorboard/tensorboard/webapp/deeplink/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..2b02ba3fd42b058444ba67858d0c31092394ce6a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/deeplink/types.ts @@ -0,0 +1,28 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export interface SetStringOption { + defaultValue?: string; + // When true, setting the string does not push a new state onto the history. + // i.e., it uses `history.replaceState` instead of `history.pushState`. + useLocationReplace?: boolean; +} + +export interface DeepLinkerInterface { + getString(key: string): string; + setString(key: string, value: string, options?: SetStringOption): void; + getPluginId(): string; + setPluginId(pluginId: string, options?: SetStringOption): void; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/experiments/BUILD b/saved_models/tensorboard/tensorboard/webapp/experiments/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..1e523e38bc68c52cac9dd033b11cf291e2b4b6af --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/experiments/BUILD @@ -0,0 +1,26 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "experiments", + srcs = [ + "experiments_module.ts", + ], + deps = [ + "//tensorboard/webapp/experiments/store", + "//tensorboard/webapp/experiments/store:types", + "@npm//@angular/core", + "@npm//@ngrx/store", + ], +) + +tf_ts_library( + name = "types", + srcs = [ + "types.ts", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/experiments/experiments_module.ts b/saved_models/tensorboard/tensorboard/webapp/experiments/experiments_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..5a5b8a71be42d60446bd6543409831cf02951402 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/experiments/experiments_module.ts @@ -0,0 +1,24 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; +import {StoreModule} from '@ngrx/store'; + +import {reducers} from './store'; +import {EXPERIMENTS_FEATURE_KEY} from './store/experiments_types'; + +@NgModule({ + imports: [StoreModule.forFeature(EXPERIMENTS_FEATURE_KEY, reducers)], +}) +export class ExperimentsModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/experiments/store/BUILD b/saved_models/tensorboard/tensorboard/webapp/experiments/store/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..908932a8447cf0c5ff1b906dde6e1a8be5d1b189 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/experiments/store/BUILD @@ -0,0 +1,70 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "store", + srcs = [ + "experiments_reducers.ts", + "index.ts", + ], + deps = [ + ":types", + "//tensorboard/webapp/app_routing:types", + "//tensorboard/webapp/experiments:types", + "//tensorboard/webapp/types", + "@npm//@ngrx/store", + ], +) + +tf_ts_library( + name = "selectors", + srcs = [ + "experiments_selectors.ts", + ], + deps = [ + ":types", + "//tensorboard/webapp/experiments:types", + "//tensorboard/webapp/types", + "@npm//@ngrx/store", + ], +) + +tf_ts_library( + name = "types", + srcs = [ + "experiments_types.ts", + ], + deps = [ + "//tensorboard/webapp/experiments:types", + "//tensorboard/webapp/types", + ], +) + +tf_ts_library( + name = "testing", + testonly = True, + srcs = [ + "testing.ts", + ], + deps = [ + ":types", + "//tensorboard/webapp/experiments:types", + ], +) + +tf_ts_library( + name = "store_test_lib", + testonly = True, + srcs = [ + "experiments_selectors_test.ts", + ], + deps = [ + ":selectors", + ":testing", + "//tensorboard/webapp/types", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/experiments/store/experiments_reducers.ts b/saved_models/tensorboard/tensorboard/webapp/experiments/store/experiments_reducers.ts new file mode 100644 index 0000000000000000000000000000000000000000..1466a94e8945c98692ea7e0056c30ca494b8ec36 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/experiments/store/experiments_reducers.ts @@ -0,0 +1,42 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + Action, + ActionReducer, + combineReducers, + createReducer, +} from '@ngrx/store'; + +import {DEFAULT_EXPERIMENT_ID} from '../../app_routing/types'; + +import {ExperimentsDataState, ExperimentsState} from './experiments_types'; + +const defaultExperiment = { + id: DEFAULT_EXPERIMENT_ID, + name: 'Default experiment', + start_time: 0, +}; + +const initialDataState: ExperimentsDataState = { + experimentMap: {[defaultExperiment.id]: defaultExperiment}, +}; + +const dataReducer: ActionReducer = createReducer( + initialDataState +); + +export function reducers(state: ExperimentsState, action: Action) { + return combineReducers({data: dataReducer})(state, action); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/experiments/store/experiments_selectors.ts b/saved_models/tensorboard/tensorboard/webapp/experiments/store/experiments_selectors.ts new file mode 100644 index 0000000000000000000000000000000000000000..21cef5386b8a86f8e3e9ff088e86d97b7f540170 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/experiments/store/experiments_selectors.ts @@ -0,0 +1,51 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {createFeatureSelector, createSelector} from '@ngrx/store'; + +import {Experiment} from '../types'; + +import { + EXPERIMENTS_FEATURE_KEY, + ExperimentsDataState, + ExperimentsState, + State, +} from './experiments_types'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +const getExperimentsState = createFeatureSelector( + EXPERIMENTS_FEATURE_KEY +); + +const getDataState = createSelector( + getExperimentsState, + (state): ExperimentsDataState => { + return state.data; + } +); + +/** + * Returns Observable that emits an experiment. + */ +export const getExperiment = createSelector( + getDataState, + ( + state: ExperimentsDataState, + props: {experimentId: string} + ): Experiment | null => { + const {experimentId} = props; + return state.experimentMap[experimentId] || null; + } +); diff --git a/saved_models/tensorboard/tensorboard/webapp/experiments/store/experiments_selectors_test.ts b/saved_models/tensorboard/tensorboard/webapp/experiments/store/experiments_selectors_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..e0359b303d6c9f07b890716031cae00b285ca1c6 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/experiments/store/experiments_selectors_test.ts @@ -0,0 +1,50 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as selectors from './experiments_selectors'; +import {buildExperiment, buildStateFromExperimentsState} from './testing'; + +describe('experiments selectors', () => { + describe('#getExperiment', () => { + beforeEach(() => { + // Clear the memoization. + selectors.getExperiment.release(); + }); + + it('returns an experiment', () => { + const pooh = buildExperiment({id: 'pooh'}); + const tigger = buildExperiment({id: 'tigger'}); + const state = buildStateFromExperimentsState({ + data: { + experimentMap: {pooh, tigger}, + }, + }); + expect(selectors.getExperiment(state, {experimentId: 'pooh'})).toEqual( + pooh + ); + }); + + it('returns null if not found', () => { + const pooh = buildExperiment({id: 'pooh'}); + const state = buildStateFromExperimentsState({ + data: { + experimentMap: {pooh}, + }, + }); + expect(selectors.getExperiment(state, {experimentId: 'tigger'})).toEqual( + null + ); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/experiments/store/experiments_types.ts b/saved_models/tensorboard/tensorboard/webapp/experiments/store/experiments_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..7fe5c1fa34d808dd9a548a3d4a82a03d2b270fb8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/experiments/store/experiments_types.ts @@ -0,0 +1,35 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Experiment} from '../types'; + +export const EXPERIMENTS_FEATURE_KEY = 'experiments'; + +export interface ExperimentsDataState { + experimentMap: {[experimentId: string]: Experiment}; +} + +/** + * Interface that describes state structure of the experiments. + */ +export interface ExperimentsState { + data: ExperimentsDataState; +} + +/** + * Fragment of application state with the ExperimentsState. + */ +export interface State { + [EXPERIMENTS_FEATURE_KEY]?: ExperimentsState; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/experiments/store/index.ts b/saved_models/tensorboard/tensorboard/webapp/experiments/store/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..d928d67ad9938265bb316661e30ad683f0c9ae48 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/experiments/store/index.ts @@ -0,0 +1,15 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export * from './experiments_reducers'; diff --git a/saved_models/tensorboard/tensorboard/webapp/experiments/store/testing.ts b/saved_models/tensorboard/tensorboard/webapp/experiments/store/testing.ts new file mode 100644 index 0000000000000000000000000000000000000000..d761316c702453a38488f76fc7d6f71e5dc0cce2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/experiments/store/testing.ts @@ -0,0 +1,44 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Experiment} from '../types'; +import { + EXPERIMENTS_FEATURE_KEY, + ExperimentsState, + State, +} from './experiments_types'; + +/** + * Builds an experiment from default. Can override fields by providing + * `override`. + */ +export function buildExperiment(override?: Partial) { + return { + id: '1', + description: undefined, + name: 'Default Experiment', + start_time: 1, + tags: undefined, + ...override, + }; +} + +/** + * Get application state from an experiment state. + */ +export function buildStateFromExperimentsState( + experimentsState: ExperimentsState +): State { + return {[EXPERIMENTS_FEATURE_KEY]: experimentsState}; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/experiments/types.ts b/saved_models/tensorboard/tensorboard/webapp/experiments/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..28bc608be562896164780efffd8900058d1efea9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/experiments/types.ts @@ -0,0 +1,24 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export interface Experiment { + id: string; + name: string; + start_time: number; + owner?: string; + description?: string; + hparams?: string; + tags?: string[]; + related_links?: Array<{name: string; url: string}>; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/feature_flag/BUILD b/saved_models/tensorboard/tensorboard/webapp/feature_flag/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..ea374e5f2fe8065fd9a8cd93fad0cadfd3716584 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/feature_flag/BUILD @@ -0,0 +1,29 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "feature_flag", + srcs = [ + "feature_flag_module.ts", + ], + deps = [ + "//tensorboard/webapp/feature_flag/effects", + "//tensorboard/webapp/feature_flag/store", + "//tensorboard/webapp/feature_flag/store:types", + "//tensorboard/webapp/webapp_data_source:feature_flag", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + ], +) + +ng_module( + name = "types", + srcs = [ + "types.ts", + ], + deps = [ + "//tensorboard/webapp/webapp_data_source:feature_flag", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/feature_flag/actions/BUILD b/saved_models/tensorboard/tensorboard/webapp/feature_flag/actions/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..3e9442a9c01ce5d7779348464c529f4eab046f43 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/feature_flag/actions/BUILD @@ -0,0 +1,15 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "actions", + srcs = [ + "feature_flag_actions.ts", + ], + deps = [ + "//tensorboard/webapp/feature_flag:types", + "//tensorboard/webapp/feature_flag/store:types", + "@npm//@ngrx/store", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/feature_flag/actions/feature_flag_actions.ts b/saved_models/tensorboard/tensorboard/webapp/feature_flag/actions/feature_flag_actions.ts new file mode 100644 index 0000000000000000000000000000000000000000..5beb332911f91ed7e6bdea97d2c7c6cb2c1125af --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/feature_flag/actions/feature_flag_actions.ts @@ -0,0 +1,29 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {createAction, props} from '@ngrx/store'; + +import {FeatureFlags} from '../store/feature_flag_types'; +import {FeatureValue} from '../types'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store/store'; +/** @typehack */ import * as _typeHackStoreModel from '@ngrx/store/src/models'; + +export const featuresLoaded = createAction( + '[FEATURE FLAG] Features Loaded', + props<{ + features: FeatureFlags; + }>() +); diff --git a/saved_models/tensorboard/tensorboard/webapp/feature_flag/effects/BUILD b/saved_models/tensorboard/tensorboard/webapp/feature_flag/effects/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..7c4037976a0acb02409b4c98a71d3be901cdf7a8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/feature_flag/effects/BUILD @@ -0,0 +1,38 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "effects", + srcs = [ + "feature_flag_effects.ts", + ], + deps = [ + "//tensorboard/webapp/feature_flag/actions", + "//tensorboard/webapp/webapp_data_source:feature_flag", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +ng_module( + name = "effects_test_lib", + testonly = True, + srcs = [ + "feature_flag_effects_test.ts", + ], + deps = [ + ":effects", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/feature_flag/actions", + "//tensorboard/webapp/feature_flag/store:types", + "//tensorboard/webapp/webapp_data_source:feature_flag_testing", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/feature_flag/effects/feature_flag_effects.ts b/saved_models/tensorboard/tensorboard/webapp/feature_flag/effects/feature_flag_effects.ts new file mode 100644 index 0000000000000000000000000000000000000000..8c41ca626f058631ed95e54329ee276a9358461c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/feature_flag/effects/feature_flag_effects.ts @@ -0,0 +1,52 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {Injectable} from '@angular/core'; +import {createAction, Action} from '@ngrx/store'; +import {Actions, ofType, createEffect} from '@ngrx/effects'; +import {map} from 'rxjs/operators'; + +import {TBFeatureFlagDataSource} from '../../webapp_data_source/tb_feature_flag_data_source_types'; +import {featuresLoaded} from '../actions/feature_flag_actions'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; +/** @typehack */ import * as _typeHackNgrx from '@ngrx/store/src/models'; +/** @typehack */ import * as _typeHackNgrxEffects from '@ngrx/effects'; + +const effectsInitialized = createAction('[FEATURE FLAG] Effects Init'); + +@Injectable() +export class FeatureFlagEffects { + /** @export */ + readonly getFeatureFlags$ = createEffect(() => + this.actions$.pipe( + ofType(effectsInitialized), + map(() => { + const features = this.dataSource.getFeatures(); + return featuresLoaded({features}); + }) + ) + ); + + constructor( + private readonly actions$: Actions, + private readonly dataSource: TBFeatureFlagDataSource + ) {} + + /** @export */ + ngrxOnInitEffects(): Action { + return effectsInitialized(); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/feature_flag/effects/feature_flag_effects_test.ts b/saved_models/tensorboard/tensorboard/webapp/feature_flag/effects/feature_flag_effects_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..a24050d0efc11b765fc3db4bb94cb6160d897381 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/feature_flag/effects/feature_flag_effects_test.ts @@ -0,0 +1,78 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {TestBed} from '@angular/core/testing'; + +import {provideMockActions} from '@ngrx/effects/testing'; +import {Action, Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import {ReplaySubject} from 'rxjs'; + +import {State} from '../store/feature_flag_types'; +import { + TBFeatureFlagTestingModule, + TestingTBFeatureFlagDataSource, +} from '../../webapp_data_source/tb_feature_flag_testing'; +import {FeatureFlagEffects} from './feature_flag_effects'; +import {featuresLoaded} from '../actions/feature_flag_actions'; + +describe('feature_flag_effects', () => { + let actions: ReplaySubject; + let store: MockStore; + let dataSource: TestingTBFeatureFlagDataSource; + let effects: FeatureFlagEffects; + + beforeEach(async () => { + actions = new ReplaySubject(1); + await TestBed.configureTestingModule({ + imports: [TBFeatureFlagTestingModule], + providers: [ + provideMockActions(actions), + FeatureFlagEffects, + provideMockStore(), + ], + }).compileComponents(); + effects = TestBed.inject(FeatureFlagEffects); + store = TestBed.inject>(Store) as MockStore; + dataSource = TestBed.inject(TestingTBFeatureFlagDataSource); + }); + + describe('getFeatureFlags$', () => { + let recordedActions: Action[]; + + beforeEach(() => { + recordedActions = []; + effects.getFeatureFlags$.subscribe((action) => { + recordedActions.push(action); + }); + }); + + it('loads features from the data source on init', () => { + spyOn(dataSource, 'getFeatures').and.returnValue({ + enabledExperimentalPlugins: ['foo', 'bar'], + }); + + actions.next(effects.ngrxOnInitEffects()); + + expect(recordedActions).toEqual([ + featuresLoaded({ + features: { + enabledExperimentalPlugins: ['foo', 'bar'], + }, + }), + ]); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/feature_flag/feature_flag_module.ts b/saved_models/tensorboard/tensorboard/webapp/feature_flag/feature_flag_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..4d6ac9bbd558012658333a7ebb4538f9453d6dbe --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/feature_flag/feature_flag_module.ts @@ -0,0 +1,33 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {NgModule} from '@angular/core'; +import {StoreModule} from '@ngrx/store'; +import {EffectsModule} from '@ngrx/effects'; + +import {TBFeatureFlagModule} from '../webapp_data_source/tb_feature_flag_module'; + +import {FEAUTURE_FLAG_FEATURE_KEY} from './store/feature_flag_types'; +import {reducers} from './store/feature_flag_reducers'; +import {FeatureFlagEffects} from './effects/feature_flag_effects'; + +@NgModule({ + imports: [ + TBFeatureFlagModule, + StoreModule.forFeature(FEAUTURE_FLAG_FEATURE_KEY, reducers), + EffectsModule.forFeature([FeatureFlagEffects]), + ], +}) +export class FeatureFlagModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/BUILD b/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..c166651ea17e7c4729ec05baa85aebe2cfec3e33 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/BUILD @@ -0,0 +1,47 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "store", + srcs = [ + "feature_flag_reducers.ts", + "feature_flag_selectors.ts", + ], + deps = [ + ":types", + "//tensorboard/webapp/feature_flag:types", + "//tensorboard/webapp/feature_flag/actions", + "//tensorboard/webapp/webapp_data_source:feature_flag", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +ng_module( + name = "types", + srcs = [ + "feature_flag_types.ts", + ], + deps = [ + "//tensorboard/webapp/feature_flag:types", + ], +) + +ng_module( + name = "store_test_lib", + testonly = True, + srcs = [ + "feature_flag_reducers_test.ts", + "feature_flag_selectors_test.ts", + "testing.ts", + ], + deps = [ + ":store", + ":types", + "//tensorboard/webapp/feature_flag:types", + "//tensorboard/webapp/feature_flag/actions", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/feature_flag_reducers.ts b/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/feature_flag_reducers.ts new file mode 100644 index 0000000000000000000000000000000000000000..874288d497d7c362e2c3426281a30fb984a92762 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/feature_flag_reducers.ts @@ -0,0 +1,45 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Action, createReducer, on} from '@ngrx/store'; +import * as actions from '../actions/feature_flag_actions'; +import {FeatureFlagState} from './feature_flag_types'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store/store'; + +const initialState: FeatureFlagState = { + isFeatureFlagsLoaded: false, + features: { + enabledExperimentalPlugins: [], + inColab: false, + }, +}; + +const reducer = createReducer( + initialState, + on(actions.featuresLoaded, (state, {features}) => { + return { + ...state, + isFeatureFlagsLoaded: true, + features: { + ...state.features, + ...features, + }, + }; + }) +); + +export function reducers(state: FeatureFlagState, action: Action) { + return reducer(state, action); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/feature_flag_reducers_test.ts b/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/feature_flag_reducers_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..18f473153bd8635781a19e50edf80f8b83ec4725 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/feature_flag_reducers_test.ts @@ -0,0 +1,62 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as actions from '../actions/feature_flag_actions'; +import {reducers} from './feature_flag_reducers'; +import {buildFeatureFlagState} from './testing'; + +describe('feature_flag_reducers', () => { + describe('featuresLoaded', () => { + it('sets the new feature flags onto the state', () => { + const prevState = buildFeatureFlagState({ + isFeatureFlagsLoaded: false, + features: { + enabledExperimentalPlugins: ['foo'], + }, + }); + const nextState = reducers( + prevState, + actions.featuresLoaded({ + features: { + enabledExperimentalPlugins: ['foo', 'bar'], + }, + }) + ); + + expect(nextState.features.enabledExperimentalPlugins).toEqual([ + 'foo', + 'bar', + ]); + }); + + it('sets the feature value of other features', () => { + const prevState = buildFeatureFlagState({ + features: { + enabledExperimentalPlugins: [], + }, + }); + const nextState = reducers( + prevState, + actions.featuresLoaded({ + features: { + enabledExperimentalPlugins: [], + enableMagicalFeature: true, + }, + }) + ); + + expect(nextState.features['enableMagicalFeature']).toBe(true); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/feature_flag_selectors.ts b/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/feature_flag_selectors.ts new file mode 100644 index 0000000000000000000000000000000000000000..a0dc1d2d91444a9bfe4e79d068b967a9185aecd5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/feature_flag_selectors.ts @@ -0,0 +1,58 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {createSelector, createFeatureSelector} from '@ngrx/store'; + +import { + FeatureFlags, + FeatureFlagState, + FEAUTURE_FLAG_FEATURE_KEY, + State, +} from './feature_flag_types'; +import {FeatureValue} from '../types'; + +/** @typehack */ import * as _typeHackNgrxStore from '@ngrx/store'; + +const selectFeatureFlagState = createFeatureSelector( + FEAUTURE_FLAG_FEATURE_KEY +); + +export const getIsFeatureFlagsLoaded = createSelector( + selectFeatureFlagState, + (state) => { + return state.isFeatureFlagsLoaded; + } +); + +export const getFeature = createSelector( + selectFeatureFlagState, + ( + state: FeatureFlagState, + featureId: keyof FeatureFlags + ): FeatureValue | null => { + return state.features[featureId] || null; + } +); + +export const getEnabledExperimentalPlugins = createSelector( + selectFeatureFlagState, + (state) => { + return state.features.enabledExperimentalPlugins || []; + } +); + +export const getIsInColab = createSelector(selectFeatureFlagState, (state) => { + return !!state.features.inColab; +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/feature_flag_selectors_test.ts b/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/feature_flag_selectors_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..623d090f4f36ac99fd9fea59d2a63143d3c6981e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/feature_flag_selectors_test.ts @@ -0,0 +1,83 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as selectors from './feature_flag_selectors'; +import {buildFeatureFlagState, buildState} from './testing'; + +describe('feature_flag_selectors', () => { + describe('getFeature', () => { + it('returns a current feature', () => { + const state = buildState( + buildFeatureFlagState({ + features: { + enableMagicFeature: true, + }, + }) + ); + const actual = selectors.getFeature(state, 'enableMagicFeature'); + + expect(actual).toBe(true); + }); + + it('returns null if the value is not present', () => { + const state = buildState( + buildFeatureFlagState({ + features: { + enabledExperimentalPlugins: ['foo'], + }, + }) + ); + const actual = selectors.getFeature(state, 'bar'); + + expect(actual).toBeNull(); + }); + }); + + describe('getEnabledExperimentalPlugins', () => { + it('returns value in array', () => { + const state = buildState( + buildFeatureFlagState({ + features: { + enabledExperimentalPlugins: ['bar'], + }, + }) + ); + const actual = selectors.getFeature(state, 'enabledExperimentalPlugins'); + + expect(actual).toEqual(['bar']); + }); + }); + + describe('getIsInColab', () => { + it('returns the proper value', () => { + let state = buildState( + buildFeatureFlagState({ + features: { + inColab: true, + }, + }) + ); + expect(selectors.getIsInColab(state)).toEqual(true); + + state = buildState( + buildFeatureFlagState({ + features: { + inColab: false, + }, + }) + ); + expect(selectors.getIsInColab(state)).toEqual(false); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/feature_flag_types.ts b/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/feature_flag_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..e446f17dbb5608531054d1a88851bfef35ee09cd --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/feature_flag_types.ts @@ -0,0 +1,33 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {FeatureValue} from '../types'; + +export const FEAUTURE_FLAG_FEATURE_KEY = 'feature'; + +export interface FeatureFlags { + enabledExperimentalPlugins?: string[]; + inColab?: boolean; + [featureId: string]: FeatureValue | undefined; +} + +export interface FeatureFlagState { + isFeatureFlagsLoaded: boolean; + features: FeatureFlags; +} + +export interface State { + [FEAUTURE_FLAG_FEATURE_KEY]?: FeatureFlagState; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/testing.ts b/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/testing.ts new file mode 100644 index 0000000000000000000000000000000000000000..678b29ebdfdef61f50af924d11c962fa3361e3f1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/feature_flag/store/testing.ts @@ -0,0 +1,40 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import { + FeatureFlagState, + FEAUTURE_FLAG_FEATURE_KEY, +} from './feature_flag_types'; + +export function buildFeatureFlagState( + override: Partial = {} +) { + const {features: featuresOverride, ...restOverride} = override; + return { + isFeatureFlagsLoaded: false, + ...restOverride, + features: { + enabledExperimentalPlugins: ['foo'], + inColab: false, + ...featuresOverride, + }, + }; +} + +export function buildState(featureFlagState: FeatureFlagState) { + return { + [FEAUTURE_FLAG_FEATURE_KEY]: featureFlagState, + }; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/feature_flag/types.ts b/saved_models/tensorboard/tensorboard/webapp/feature_flag/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..62826e314e40e6aaafd64e8454823ca1ec04510b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/feature_flag/types.ts @@ -0,0 +1,16 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export {FeatureValue} from '../webapp_data_source/tb_feature_flag_data_source_types'; diff --git a/saved_models/tensorboard/tensorboard/webapp/header/BUILD b/saved_models/tensorboard/tensorboard/webapp/header/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..e1dc418a393c8a4230f87b41d0244030917cabff --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/header/BUILD @@ -0,0 +1,74 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "styles", + src = "plugin_selector_component.scss", +) + +ng_module( + name = "header", + srcs = [ + "header_component.ts", + "header_module.ts", + "plugin_selector_component.ts", + "plugin_selector_container.ts", + "reload_container.ts", + "types.ts", + ], + assets = [ + ":styles", + "plugin_selector_component.ng.html", + ], + deps = [ + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/angular:expect_angular_material_select", + "//tensorboard/webapp/angular:expect_angular_material_tabs", + "//tensorboard/webapp/angular:expect_angular_material_toolbar", + "//tensorboard/webapp/core", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/settings", + "//tensorboard/webapp/tbdev_upload", + "//tensorboard/webapp/types", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "test_lib", + testonly = True, + srcs = [ + "header_test.ts", + ], + deps = [ + ":header", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_select", + "//tensorboard/webapp/angular:expect_angular_material_tabs", + "//tensorboard/webapp/angular:expect_angular_material_toolbar", + "//tensorboard/webapp/angular:expect_angular_platform_browser_animations", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/settings", + "//tensorboard/webapp/testing:mat_icon", + "//tensorboard/webapp/types", + "@npm//@angular/common", + "@npm//@angular/compiler", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/header/header_component.ts b/saved_models/tensorboard/tensorboard/webapp/header/header_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..5e7051299cf715369ec09a5560f841e4f6d72aa5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/header/header_component.ts @@ -0,0 +1,76 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component} from '@angular/core'; + +@Component({ + selector: 'app-header', + template: ` + + TensorBoard + + + + + + + + + `, + styles: [ + ` + mat-toolbar { + align-items: center; + display: flex; + height: 64px; + overflow: hidden; + width: 100%; + } + + tbdev-upload-button.shown { + margin: 0 8px 0 16px; + } + + .brand, + .readme, + app-header-reload, + settings-button { + flex: 0 0 auto; + } + + .brand { + letter-spacing: -0.025em; + margin-left: 10px; + text-rendering: optimizeLegibility; + } + + .plugins { + align-items: center; + display: flex; + flex: 1 1 auto; + font-size: 14px; + height: 100%; + overflow: hidden; + } + `, + ], +}) +export class HeaderComponent {} diff --git a/saved_models/tensorboard/tensorboard/webapp/header/header_module.ts b/saved_models/tensorboard/tensorboard/webapp/header/header_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..b489c4080c2875240b6553b0c1abfde1d53e0a31 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/header/header_module.ts @@ -0,0 +1,55 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; +// Uses `async` pipe. +import {CommonModule} from '@angular/common'; + +import {MatButtonModule} from '@angular/material/button'; +import {MatIconModule} from '@angular/material/icon'; +import {MatSelectModule} from '@angular/material/select'; +import {MatTabsModule} from '@angular/material/tabs'; +import {MatToolbarModule} from '@angular/material/toolbar'; + +import {CoreModule} from '../core/core_module'; +import {SettingsModule} from '../settings/settings_module'; +import {TbdevUploadModule} from '../tbdev_upload/tbdev_upload_module'; + +import {HeaderComponent} from './header_component'; +import {PluginSelectorComponent} from './plugin_selector_component'; +import {PluginSelectorContainer} from './plugin_selector_container'; +import {ReloadContainer} from './reload_container'; + +@NgModule({ + declarations: [ + HeaderComponent, + PluginSelectorComponent, + PluginSelectorContainer, + ReloadContainer, + ], + exports: [HeaderComponent, PluginSelectorContainer, ReloadContainer], + providers: [], + imports: [ + MatButtonModule, + MatIconModule, + MatTabsModule, + MatToolbarModule, + MatSelectModule, + CommonModule, + CoreModule, + SettingsModule, + TbdevUploadModule, + ], +}) +export class HeaderModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/header/header_test.ts b/saved_models/tensorboard/tensorboard/webapp/header/header_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..c1a09124f5f3c6e074517ec4fb1f2918945780be --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/header/header_test.ts @@ -0,0 +1,309 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {DebugElement, NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {MatButtonModule} from '@angular/material/button'; +import {MatTabsModule} from '@angular/material/tabs'; +import {MatToolbarModule} from '@angular/material/toolbar'; +import {MatSelectModule} from '@angular/material/select'; +import {By} from '@angular/platform-browser'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Store} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {MatIconTestingModule} from '../testing/mat_icon_module'; +import {HeaderComponent} from './header_component'; +import {PluginSelectorComponent} from './plugin_selector_component'; +import {PluginSelectorContainer} from './plugin_selector_container'; +import {ReloadContainer} from './reload_container'; +import { + getPluginsListLoaded, + getActivePlugin, + getPlugins, +} from '../core/store/core_selectors'; +import {DataLoadState} from '../types/data'; + +import {changePlugin, manualReload} from '../core/actions'; +import {State} from '../core/store'; +import { + createPluginMetadata, + createState, + createCoreState, + buildPluginMetadata, +} from '../core/testing'; +import {PluginId} from '../types/api'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('header test', () => { + let store: MockStore; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + MatButtonModule, + MatIconTestingModule, + MatSelectModule, + MatTabsModule, + MatToolbarModule, + NoopAnimationsModule, + ], + providers: [ + provideMockStore({ + initialState: createState( + createCoreState({ + plugins: { + foo: createPluginMetadata('Foo Fighter'), + bar: createPluginMetadata('Barber'), + }, + }) + ), + }), + HeaderComponent, + ], + declarations: [ + HeaderComponent, + PluginSelectorComponent, + PluginSelectorContainer, + ReloadContainer, + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + store.overrideSelector(getPlugins, { + foo: createPluginMetadata('Foo Fighter'), + bar: createPluginMetadata('Barber'), + }); + store.overrideSelector(getActivePlugin, 'foo'); + }); + + function assertDebugElementText(el: DebugElement, text: string) { + expect(el.nativeElement.innerText.trim().toUpperCase()).toBe(text); + } + + function setActivePlugin(activePlugin: PluginId | null) { + store.overrideSelector(getActivePlugin, activePlugin); + store.refreshState(); + } + + it('renders pluginsList', () => { + const fixture = TestBed.createComponent(HeaderComponent); + fixture.detectChanges(); + + const els = fixture.debugElement.queryAll(By.css('.mat-tab-label')); + expect(els.length).toBe(2); + + assertDebugElementText(els[0], 'FOO FIGHTER'); + assertDebugElementText(els[1], 'BARBER'); + }); + + it('updates list of tabs when pluginsList updates', async () => { + const fixture = TestBed.createComponent(HeaderComponent); + fixture.detectChanges(); + + store.overrideSelector(getPlugins, { + cat: createPluginMetadata('Meow'), + dog: createPluginMetadata('Woof'), + elephant: createPluginMetadata('Trumpet'), + }); + setActivePlugin(null); + fixture.detectChanges(); + await fixture.whenStable(); + + const els = fixture.debugElement.queryAll(By.css('.mat-tab-label')); + expect(els.length).toBe(3); + assertDebugElementText(els[0], 'MEOW'); + assertDebugElementText(els[1], 'WOOF'); + assertDebugElementText(els[2], 'TRUMPET'); + }); + + it('selects 0th element by default', () => { + const fixture = TestBed.createComponent(HeaderComponent); + fixture.detectChanges(); + + const group = fixture.debugElement.query(By.css('mat-tab-group')); + expect(group.componentInstance.selectedIndex).toBe(0); + }); + + it('sets tab group selection to match index of activePlugin', async () => { + const fixture = TestBed.createComponent(HeaderComponent); + fixture.detectChanges(); + + setActivePlugin('bar'); + fixture.detectChanges(); + await fixture.whenStable(); + + const group = fixture.debugElement.query(By.css('mat-tab-group')); + expect(group.componentInstance.selectedIndex).toBe(1); + }); + + it('fires an action when a tab is clicked', async () => { + const dispatch = spyOn(store, 'dispatch'); + const fixture = TestBed.createComponent(HeaderComponent); + fixture.detectChanges(); + + const [, barEl] = fixture.debugElement.queryAll(By.css('.plugin-name')); + barEl.nativeElement.click(); + fixture.detectChanges(); + await fixture.whenStable(); + + expect(dispatch).toHaveBeenCalledTimes(1); + expect(dispatch).toHaveBeenCalledWith(changePlugin({plugin: 'bar'})); + }); + + describe('reload', () => { + it('dispatches manual reload when clicking on the reload button', () => { + const dispatch = spyOn(store, 'dispatch'); + const fixture = TestBed.createComponent(HeaderComponent); + fixture.detectChanges(); + + const button = fixture.debugElement.query( + By.css('app-header-reload button') + ); + button.nativeElement.click(); + fixture.detectChanges(); + + expect(dispatch).toHaveBeenCalledTimes(1); + expect(dispatch).toHaveBeenCalledWith(manualReload()); + }); + + it('renders the time of refresh in title', () => { + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.LOADED, + lastLoadedTimeInMs: new Date('2000/01/01').getTime(), + failureCode: null, + }); + const fixture = TestBed.createComponent(HeaderComponent); + fixture.detectChanges(); + + const button = fixture.debugElement.query( + By.css('app-header-reload button') + ); + expect(button.properties['title']).toBe( + 'Last Updated: Jan 1, 2000, 12:00:00 AM' + ); + }); + + it('renders "Loading" if it was never loaded before', () => { + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.NOT_LOADED, + lastLoadedTimeInMs: null, + failureCode: null, + }); + const fixture = TestBed.createComponent(HeaderComponent); + fixture.detectChanges(); + + const button = fixture.debugElement.query( + By.css('app-header-reload button') + ); + expect(button.properties['title']).toBe('Loading...'); + }); + + it('spins the indicator when loading', () => { + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.NOT_LOADED, + lastLoadedTimeInMs: null, + failureCode: null, + }); + const fixture = TestBed.createComponent(HeaderComponent); + fixture.detectChanges(); + + const buttonBefore = fixture.debugElement.query( + By.css('app-header-reload button') + ); + expect(buttonBefore.classes['loading']).not.toBeDefined(); + + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.LOADING, + lastLoadedTimeInMs: null, + failureCode: null, + }); + store.refreshState(); + fixture.detectChanges(); + + const buttonAfter = fixture.debugElement.query( + By.css('app-header-reload button') + ); + expect(buttonAfter.classes['loading']).toBe(true); + }); + + it('stops spinner when going from loading to loaded', () => { + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.LOADING, + lastLoadedTimeInMs: null, + failureCode: null, + }); + const fixture = TestBed.createComponent(HeaderComponent); + fixture.detectChanges(); + + const buttonBefore = fixture.debugElement.query( + By.css('app-header-reload button') + ); + expect(buttonBefore.classes['loading']).toBe(true); + + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.LOADED, + lastLoadedTimeInMs: 1, + failureCode: null, + }); + store.refreshState(); + fixture.detectChanges(); + + const buttonAfter = fixture.debugElement.query( + By.css('app-header-reload button') + ); + expect(buttonAfter.classes['loading']).not.toBeDefined(); + }); + + it('disables the reload button if active plugin does not want reload', () => { + store.overrideSelector(getPlugins, { + foo: buildPluginMetadata({ + disable_reload: true, + tab_name: 'Foo', + }), + }); + store.overrideSelector(getActivePlugin, 'foo'); + const fixture = TestBed.createComponent(HeaderComponent); + fixture.detectChanges(); + + const button = fixture.debugElement.query( + By.css('app-header-reload button') + ); + expect(button.attributes['disabled']).toBe('true'); + }); + + it('does not spin the spinner when reload is disabled', () => { + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.LOADING, + lastLoadedTimeInMs: null, + failureCode: null, + }); + store.overrideSelector(getPlugins, { + foo: buildPluginMetadata({ + disable_reload: true, + tab_name: 'Foo', + }), + }); + store.overrideSelector(getActivePlugin, 'foo'); + const fixture = TestBed.createComponent(HeaderComponent); + fixture.detectChanges(); + + const buttonBefore = fixture.debugElement.query( + By.css('app-header-reload button') + ); + expect(buttonBefore.classes['loading']).not.toBeDefined(); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/header/plugin_selector_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/header/plugin_selector_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..3e2c3ac54d4775af1b13cd82e08fc001159697a2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/header/plugin_selector_component.ng.html @@ -0,0 +1,51 @@ + + + + + + + {{plugin.tab_name}} + + + + + + Inactive + + + {{ plugin.tab_name }} + + + diff --git a/saved_models/tensorboard/tensorboard/webapp/header/plugin_selector_component.scss b/saved_models/tensorboard/tensorboard/webapp/header/plugin_selector_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..a0aa6b1328a3c01eb353fa8e75a520aa27059625 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/header/plugin_selector_component.scss @@ -0,0 +1,105 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +:host { + align-items: center; + display: flex; + flex: 1 1 auto; + font-size: 14px; + height: 100%; + overflow: hidden; +} + +mat-form-field { + flex: 0 0; + /* visually center align with _text_ of the select to the center. */ + margin-top: 5px; + /* default width is 180px */ + width: 130px; +} + +mat-label, +mat-select, +mat-option { + font-weight: 500; + text-transform: uppercase; +} + +.active-plugin-list { + align-self: stretch; + flex: 1 1 auto; + overflow: hidden; +} + +.plugin-name { + align-items: center; + display: inline-flex; + height: 100%; + justify-content: center; + padding: 0 12px; + width: 100%; +} + +:host ::ng-deep .active-plugin-list { + // Override mat-tab styling. By default, mat-tab has the right styling but, + // here, we are using it under dark header background. Must invert the color. + + &.mat-primary .mat-ink-bar { + background-color: currentColor; + } + + .mat-tab-label, + .mat-tab-link { + // Inherit from `color` on the toolbar. + color: inherit; + // default is .6 and it is too dark against dark background. + opacity: 0.7; + + &.mat-tab-label-active { + opacity: 1; + } + } + + .mat-tab-header-pagination-chevron { + border-color: currentColor; + } + + .mat-tab-header-pagination-disabled { + visibility: hidden; + } + + .mat-tab-disabled { + display: none; + } + + .mat-tab-header, + .mat-tab-labels, + .mat-tab-label { + height: 100%; + } + + .mat-tab-label { + min-width: 48px; /* default is 160px which is too big for us */ + padding: 0; /* default is 24px */ + text-transform: uppercase; + } + + .mat-tab-label-content { + height: 100%; + } + + mat-tab-header:not(.mat-tab-header-pagination-controls-enabled) { + padding: 0 36px; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/header/plugin_selector_component.ts b/saved_models/tensorboard/tensorboard/webapp/header/plugin_selector_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..e244e38a4ff3cbc3d1dcbc997724bca066e2464d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/header/plugin_selector_component.ts @@ -0,0 +1,51 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, Input, Output, EventEmitter} from '@angular/core'; +import {MatSelectChange} from '@angular/material/select'; + +import {PluginId} from '../types/api'; +import {UiPluginMetadata} from './types'; + +@Component({ + selector: 'plugin-selector-component', + templateUrl: './plugin_selector_component.ng.html', + styleUrls: ['./plugin_selector_component.css'], +}) +export class PluginSelectorComponent { + @Input() + activePlugins!: UiPluginMetadata[]; + + @Input() + disabledPlugins!: UiPluginMetadata[]; + + @Input() + selectedPlugin!: PluginId; + + @Output() + onPluginSelectionChanged = new EventEmitter(); + + getActivePluginIndex() { + return this.activePlugins.findIndex(({id}) => id === this.selectedPlugin); + } + + onActivePluginSelection(event: Event, pluginId: PluginId) { + event.stopPropagation(); + this.onPluginSelectionChanged.emit(pluginId); + } + + onDisabledPluginSelectionChanged(selectChangeEvent: MatSelectChange) { + this.onPluginSelectionChanged.emit(selectChangeEvent.value); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/header/plugin_selector_container.ts b/saved_models/tensorboard/tensorboard/webapp/header/plugin_selector_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..14e557a0de4340848d0b60c0977fe9794508793a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/header/plugin_selector_container.ts @@ -0,0 +1,56 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component} from '@angular/core'; +import {Store, select, createSelector} from '@ngrx/store'; + +import {getActivePlugin, getPlugins, State} from '../core/store'; +import {changePlugin} from '../core/actions'; + +import {PluginId} from '../types/api'; +import {UiPluginMetadata} from './types'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +const getUiPlugins = createSelector(getPlugins, (listing): UiPluginMetadata[] => + Object.keys(listing).map((key) => Object.assign({}, {id: key}, listing[key])) +); + +const getDisabledPlugins = createSelector( + getUiPlugins, + (plugins): UiPluginMetadata[] => plugins.filter((plugin) => !plugin.enabled) +); + +@Component({ + selector: 'plugin-selector', + template: ` + + `, +}) +export class PluginSelectorContainer { + readonly activePlugin$ = this.store.pipe(select(getActivePlugin)); + readonly plugins$ = this.store.pipe(select(getUiPlugins)); + readonly disabledPlugins$ = this.store.pipe(select(getDisabledPlugins)); + + constructor(private readonly store: Store) {} + + onPluginSelectionChange(pluginId: PluginId) { + this.store.dispatch(changePlugin({plugin: pluginId})); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/header/reload_container.ts b/saved_models/tensorboard/tensorboard/webapp/header/reload_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..e928b9e2595f44c1d4c0ee5f95bca95c412daf6b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/header/reload_container.ts @@ -0,0 +1,114 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component} from '@angular/core'; +import {Store, createSelector} from '@ngrx/store'; +import {Observable} from 'rxjs'; +import {map, withLatestFrom} from 'rxjs/operators'; + +import {State} from '../core/store/core_types'; +import { + getPlugins, + getActivePlugin, + getPluginsListLoaded, +} from '../core/store/core_selectors'; +import {manualReload} from '../core/actions'; +import {DataLoadState} from '../types/data'; + +const isReloadDisabledByPlugin = createSelector( + getPlugins, + getActivePlugin, + (plugins, id) => { + if (!id || !plugins[id]) return false; + return plugins[id].disable_reload; + } +); + +@Component({ + selector: 'app-header-reload', + template: ` + + `, + styles: [ + ` + .reload-button, + .refresh-icon { + align-items: center; + display: flex; + justify-content: center; + } + + .reload-button.loading { + animation: rotate 2s linear infinite; + } + + @keyframes rotate { + 0% { + transform: rotate(0deg); + } + 50% { + transform: rotate(180deg); + } + 100% { + transform: rotate(360deg); + } + } + `, + ], +}) +export class ReloadContainer { + readonly reloadDisabled$: Observable = this.store.select( + isReloadDisabledByPlugin + ); + + isReloading$: Observable = this.store + .select(getPluginsListLoaded) + .pipe( + withLatestFrom(this.reloadDisabled$), + map(([loaded, reloadDisabled]) => { + return !reloadDisabled && loaded.state === DataLoadState.LOADING; + }) + ); + + lastLoadedTimeInMs$: Observable = this.store + .select(getPluginsListLoaded) + .pipe( + map((loaded) => { + return loaded.lastLoadedTimeInMs; + }) + ); + + constructor(private readonly store: Store) {} + + triggerReload() { + this.store.dispatch(manualReload()); + } + + getReloadTitle(dateString: string | null) { + if (!dateString) { + return 'Loading...'; + } + + return `Last Updated: ${dateString}`; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/header/types.ts b/saved_models/tensorboard/tensorboard/webapp/header/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..ffd271fd93d5057cbcfce1240bec9d6322b8e01a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/header/types.ts @@ -0,0 +1,20 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {PluginMetadata, PluginId} from '../types/api'; + +export interface UiPluginMetadata extends PluginMetadata { + id: PluginId; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/index_polymer3.uninlined.html b/saved_models/tensorboard/tensorboard/webapp/index_polymer3.uninlined.html new file mode 100644 index 0000000000000000000000000000000000000000..068b50009a8ebb90eaf3f803127f07049c2fdab1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/index_polymer3.uninlined.html @@ -0,0 +1,60 @@ + + + +TensorBoard + + + + + + + + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/webapp/main.ts b/saved_models/tensorboard/tensorboard/webapp/main.ts new file mode 100644 index 0000000000000000000000000000000000000000..a193a633e3bc9d1c2cf46d36f83a97521e6ebd7d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/main.ts @@ -0,0 +1,15 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import './bootstrap'; diff --git a/saved_models/tensorboard/tensorboard/webapp/main_prod.ts b/saved_models/tensorboard/tensorboard/webapp/main_prod.ts new file mode 100644 index 0000000000000000000000000000000000000000..638fc60979396b5701bd15220e88b7726a905dba --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/main_prod.ts @@ -0,0 +1,19 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {enableProdMode} from '@angular/core'; + +import './bootstrap'; + +enableProdMode(); diff --git a/saved_models/tensorboard/tensorboard/webapp/mat_icon_module.ts b/saved_models/tensorboard/tensorboard/webapp/mat_icon_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..69aec6c42a25465738026ecfdbeb69db453e8161 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/mat_icon_module.ts @@ -0,0 +1,29 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {DomSanitizer} from '@angular/platform-browser'; +import {NgModule} from '@angular/core'; +import { + MatIconModule as NgMatIconModule, + MatIconRegistry, +} from '@angular/material/icon'; + +const SVG_PATH = './icon_bundle.svg'; + +@NgModule({ + imports: [NgMatIconModule], +}) +export class MatIconModule { + constructor(domSanitizer: DomSanitizer, iconRegistry: MatIconRegistry) { + const url = domSanitizer.bypassSecurityTrustResourceUrl(SVG_PATH); + iconRegistry.addSvgIconSet(url); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/BUILD b/saved_models/tensorboard/tensorboard/webapp/metrics/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..87ab0a3c108e54e3012bfbccda215197c2d92214 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/BUILD @@ -0,0 +1,59 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "metrics", + srcs = [ + "metrics_module.ts", + ], + deps = [ + "//tensorboard/webapp/alert:alert_action", + "//tensorboard/webapp/metrics/actions", + "//tensorboard/webapp/metrics/data_source", + "//tensorboard/webapp/metrics/effects", + "//tensorboard/webapp/metrics/store", + "//tensorboard/webapp/metrics/views", + "//tensorboard/webapp/plugins:plugin_registry", + "//tensorboard/webapp/runs/views/runs_selector", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + ], +) + +tf_ts_library( + name = "types", + srcs = [ + "types.ts", + ], + deps = [ + "//tensorboard/webapp/metrics/data_source", + "//tensorboard/webapp/widgets/histogram:types", + "//tensorboard/webapp/widgets/line_chart", + ], +) + +tf_ts_library( + name = "test_lib", + testonly = True, + srcs = [ + "testing.ts", + ], + deps = [ + ":types", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/metrics/data_source", + "//tensorboard/webapp/metrics/store", + "//tensorboard/webapp/metrics/store:types", + "//tensorboard/webapp/types", + "//tensorboard/webapp/widgets/histogram:types", + "@npm//@angular/core", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/actions/BUILD b/saved_models/tensorboard/tensorboard/webapp/metrics/actions/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..a83dbd722024a59de447aeea935bc9d5781c1689 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/actions/BUILD @@ -0,0 +1,17 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "actions", + srcs = [ + "index.ts", + ], + deps = [ + "//tensorboard/webapp/metrics:types", + "//tensorboard/webapp/metrics/data_source", + "@npm//@ngrx/store", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/actions/index.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/actions/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..414b3e0c209e9e8b5760a7d874130a54a0e1c9cb --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/actions/index.ts @@ -0,0 +1,132 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {createAction, props} from '@ngrx/store'; + +import { + TagMetadata, + TimeSeriesRequest, + TimeSeriesResponse, +} from '../data_source'; +import {CardId, HistogramMode, TooltipSort, XAxisType} from '../types'; + +/** @typehack */ import * as _typeHackModels from '@ngrx/store/src/models'; +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +export const metricsTagMetadataRequested = createAction( + '[Metrics] Metrics Tag Metadata Requested' +); + +export const metricsTagMetadataLoaded = createAction( + '[Metrics] Metrics Tag Metadata Loaded', + props<{tagMetadata: TagMetadata}>() +); + +export const metricsTagMetadataFailed = createAction( + '[Metrics] Metrics Tag Metadata Failed' +); + +export const metricsChangeTooltipSort = createAction( + '[Metrics] Metrics Settings Change Tooltip', + props<{sort: TooltipSort}>() +); + +export const metricsToggleShowDataDownload = createAction( + '[Metrics] Metrics Settings Toggle Show Data Download' +); + +export const metricsToggleIgnoreOutliers = createAction( + '[Metrics] Metrics Setting Toggle Ignore Outlier' +); + +export const metricsChangeXAxisType = createAction( + '[Metrics] Metrics Setting Change X Axis Type', + props<{xAxisType: XAxisType}>() +); + +export const metricsChangeScalarSmoothing = createAction( + '[Metrics] Metrics Setting Change Scalar Smoothing', + props<{smoothing: number}>() +); + +export const metricsChangeImageBrightness = createAction( + '[Metrics] Metrics Setting Change Image Brightness', + props<{brightnessInMilli: number}>() +); + +export const metricsChangeImageContrast = createAction( + '[Metrics] Metrics Setting Change Image Contrast', + props<{contrastInMilli: number}>() +); + +export const metricsResetImageBrightness = createAction( + '[Metrics] Image Brightness Setting Reset' +); + +export const metricsResetImageContrast = createAction( + '[Metrics] Image Contrast Setting Reset' +); + +export const metricsToggleImageShowActualSize = createAction( + '[Metrics] Metrics Setting Toggle Image Show Actual Size' +); + +export const metricsChangeHistogramMode = createAction( + '[Metrics] Metrics Setting Change Histogram Mode', + props<{histogramMode: HistogramMode}>() +); + +export const multipleTimeSeriesRequested = createAction( + '[Metrics] Multiple Time Series Requested', + props<{requests: TimeSeriesRequest[]}>() +); + +export const fetchTimeSeriesFailed = createAction( + '[Metrics] Fetch Time Series Request Failed', + props<{request: TimeSeriesRequest}>() +); + +export const fetchTimeSeriesLoaded = createAction( + '[Metrics] Fetch Time Series Response Loaded', + props<{response: TimeSeriesResponse}>() +); + +/** + * An event when some cards enter or exit the viewport. The card sets must be + * mutually exclusive. + */ +export const cardVisibilityChanged = createAction( + '[Metrics] Card Visibility Changed', + props<{enteredCards: Set; exitedCards: Set}>() +); + +export const cardStepSliderChanged = createAction( + '[Metrics] Card Step Slider Changed', + props<{cardId: CardId; stepIndex: number}>() +); + +export const metricsTagFilterChanged = createAction( + '[Metrics] Tag Filter Changed', + props<{tagFilter: string}>() +); + +export const metricsTagGroupExpansionChanged = createAction( + '[Metrics] Metrics Tag Group Expansion Changed', + props<{tagGroup: string}>() +); + +export const cardPinStateToggled = createAction( + '[Metrics] Card Pin State Toggled', + props<{cardId: CardId; canCreateNewPins: boolean; wasPinned: boolean}>() +); diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/BUILD b/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..029e9bdb5da2c24e6ac1129bdbb4a446465cbf02 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/BUILD @@ -0,0 +1,59 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "data_source", + srcs = [ + "index.ts", + "metrics_data_source.ts", + "metrics_data_source_module.ts", + ], + deps = [ + ":backend_types", + ":types", + "//tensorboard/webapp/webapp_data_source:http_client", + "@npm//@angular/core", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "types", + srcs = [ + "types.ts", + ], + deps = [ + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "backend_types", + srcs = [ + "metrics_backend_types.ts", + ], + visibility = ["//visibility:private"], + deps = [ + ":types", + ], +) + +tf_ts_library( + name = "metrics_data_source_test", + testonly = True, + srcs = [ + "metrics_data_source_test.ts", + ], + deps = [ + ":backend_types", + ":data_source", + ":types", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/webapp_data_source:http_client_testing", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/index.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..b09db8f6869fd58f5296a76b673b34c9c79ceb94 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/index.ts @@ -0,0 +1,17 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export * from './metrics_data_source'; +export * from './metrics_data_source_module'; +export * from './types'; diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/metrics_backend_types.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/metrics_backend_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..127048f19d3b13e86758d778d88cb460aebc6197 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/metrics_backend_types.ts @@ -0,0 +1,81 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview Types produced only by the backend data source. + * + * Types defined in `plugins/metrics/http_api.md`. + */ + +import { + HistogramStepDatum, + ImageStepDatum, + PluginType, + RunToTags, + ScalarStepDatum, + TagToDescription, + TagToRunSampledInfo, +} from './types'; + +export interface BackendNonSampledTagMetadata { + runTagInfo: RunToTags; + tagDescriptions: TagToDescription; +} + +export type BackendSampledTagMetadata = { + tagDescriptions: TagToDescription; + tagRunSampledInfo: TagToRunSampledInfo; +}; + +export type BackendTagMetadata = { + [PluginType.SCALARS]: BackendNonSampledTagMetadata; + [PluginType.HISTOGRAMS]: BackendNonSampledTagMetadata; + [PluginType.IMAGES]: BackendSampledTagMetadata; +}; + +export interface BackendTimeSeriesRequest { + plugin: PluginType; + tag: string; + run?: string; + sample?: number; +} + +export type BackendRunToSeries = + | { + [run: string]: ScalarStepDatum[]; + } + | {[run: string]: HistogramStepDatum[]} + | {[run: string]: ImageStepDatum[]}; + +export interface BackendTimeSeriesSuccessfulResponse { + plugin: PluginType; + tag: string; + run?: string; + sample?: number; + runToSeries: BackendRunToSeries; + error?: undefined; +} + +export interface BackendTimeSeriesFailedResponse { + plugin: PluginType; + tag: string; + run?: string; + sample?: number; + error: string; + runToSeries?: undefined; +} + +export type BackendTimeSeriesResponse = + | BackendTimeSeriesSuccessfulResponse + | BackendTimeSeriesFailedResponse; diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/metrics_data_source.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/metrics_data_source.ts new file mode 100644 index 0000000000000000000000000000000000000000..2a1b11995f790c5b75e759517893e626e57ecb5b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/metrics_data_source.ts @@ -0,0 +1,272 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {TBHttpClient} from '../../webapp_data_source/tb_http_client'; +import {forkJoin, Observable} from 'rxjs'; +import {map} from 'rxjs/operators'; + +import { + BackendTagMetadata, + BackendTimeSeriesRequest, + BackendTimeSeriesResponse, +} from './metrics_backend_types'; +import { + ImageId, + isSampledPlugin, + isSingleRunPlugin, + MetricsDataSource, + MultiRunTimeSeriesRequest, + PluginType, + RunSampledInfo, + RunToSeries, + RunToTags, + SingleRunTimeSeriesRequest, + TagMetadata, + TagToRunSampledInfo, + TimeSeriesRequest, + TimeSeriesResponse, +} from './types'; + +const HTTP_PATH_PREFIX = 'data/plugin/timeseries'; + +function parseRunId(runId: string): {run: string; experimentId: string} { + const slashIndex = runId.indexOf('/'); + return { + run: runId.substring(slashIndex + 1), + experimentId: runId.substring(0, slashIndex), + }; +} + +function runToRunId(run: string, experimentId: string) { + return `${experimentId}/${run}`; +} + +function buildFrontendTimeSeriesResponse( + backendResponse: BackendTimeSeriesResponse, + experimentId: string +): TimeSeriesResponse { + const {runToSeries, run, ...responseRest} = backendResponse; + const response = {...responseRest} as TimeSeriesResponse; + if (runToSeries) { + response.runToSeries = buildRunIdKeyedObject( + runToSeries, + experimentId + ); + } + if (run) { + response.runId = runToRunId(run, experimentId); + } + return response; +} + +function buildRunIdKeyedObject( + backendObject: T, + experimentId: string +): T { + const frontendObject = {} as Record; + for (const run in backendObject) { + if (backendObject.hasOwnProperty(run)) { + const runId = runToRunId(run, experimentId); + frontendObject[runId] = backendObject[run]; + } + } + return frontendObject as T; +} + +function buildFrontendTagMetadata( + backendTagMetadata: BackendTagMetadata, + experimentId: string +): TagMetadata { + const tagMetadata = {} as TagMetadata; + for (const pluginType of Object.keys(backendTagMetadata)) { + const plugin = pluginType as PluginType; + if (isSampledPlugin(plugin)) { + const {tagRunSampledInfo, ...rest} = backendTagMetadata[plugin]; + const frontendTagRunSampledInfo = {} as TagToRunSampledInfo; + for (const tag in tagRunSampledInfo) { + if (tagRunSampledInfo.hasOwnProperty(tag)) { + frontendTagRunSampledInfo[tag] = buildRunIdKeyedObject< + RunSampledInfo + >(tagRunSampledInfo[tag], experimentId); + } + } + tagMetadata[plugin] = { + ...rest, + tagRunSampledInfo: frontendTagRunSampledInfo, + }; + } else { + const {runTagInfo, ...rest} = backendTagMetadata[plugin]; + tagMetadata[plugin] = { + ...rest, + runTagInfo: buildRunIdKeyedObject(runTagInfo, experimentId), + }; + } + } + return tagMetadata; +} + +function buildCombinedTagMetadata(results: TagMetadata[]): TagMetadata { + // Collate results from different experiments. + const tagMetadata = {} as TagMetadata; + for (const experimentTagMetadata of results) { + for (const plugin of Object.values(PluginType)) { + if (isSampledPlugin(plugin)) { + tagMetadata[plugin] = tagMetadata[plugin] || { + tagDescriptions: {}, + tagRunSampledInfo: {}, + }; + const {tagDescriptions, tagRunSampledInfo} = experimentTagMetadata[ + plugin + ]; + tagMetadata[plugin].tagDescriptions = { + ...tagMetadata[plugin].tagDescriptions, + ...tagDescriptions, + }; + const combinedTagRunSampledInfo = tagMetadata[plugin].tagRunSampledInfo; + for (const tag of Object.keys(tagRunSampledInfo)) { + combinedTagRunSampledInfo[tag] = combinedTagRunSampledInfo[tag] || {}; + for (const runId of Object.keys(tagRunSampledInfo[tag])) { + combinedTagRunSampledInfo[tag][runId] = + tagRunSampledInfo[tag][runId]; + } + } + } else { + tagMetadata[plugin] = tagMetadata[plugin] || { + tagDescriptions: {}, + runTagInfo: {}, + }; + const {tagDescriptions, runTagInfo} = experimentTagMetadata[plugin]; + tagMetadata[plugin].tagDescriptions = { + ...tagMetadata[plugin].tagDescriptions, + ...tagDescriptions, + }; + tagMetadata[plugin].runTagInfo = { + ...tagMetadata[plugin].runTagInfo, + ...runTagInfo, + }; + } + } + } + return tagMetadata; +} + +/** + * An implementation of MetricsDataSource that treats RunIds as identifiers + * containing run name and experimentId. + */ +@Injectable() +export class TBMetricsDataSource implements MetricsDataSource { + constructor(private readonly http: TBHttpClient) {} + + fetchTagMetadata(experimentIds: string[]) { + const fetches = experimentIds.map((experimentId) => { + const url = `/experiment/${experimentId}/${HTTP_PATH_PREFIX}/tags`; + return this.http.get(url).pipe( + map((tagMetadata) => { + return buildFrontendTagMetadata(tagMetadata, experimentId); + }) + ); + }); + return forkJoin(fetches).pipe( + map((results) => buildCombinedTagMetadata(results)) + ); + } + + /** + * TODO(psybuzz): we only request 1 at a time, consider updating the backend to + * take a BackendTimeSeriesRequest instead of an array. + */ + fetchTimeSeries(requests: TimeSeriesRequest[]) { + const fetches = requests.map((request) => { + // One single-run request. + if (isSingleRunPlugin(request.plugin)) { + const {runId, ...requestRest} = request as SingleRunTimeSeriesRequest; + const {run, experimentId} = parseRunId(runId); + const backendRequest = {...requestRest, run}; + return this.fetchTimeSeriesBackendRequest( + backendRequest, + experimentId + ).pipe( + map(({response, experimentId}) => { + return buildFrontendTimeSeriesResponse(response, experimentId); + }) + ); + } + + // One multi-run request generates many responses with different + // 'runToSeries', 'error' fields. Combine them into one. + const { + experimentIds, + ...requestRest + } = request as MultiRunTimeSeriesRequest; + const perExperimentRequests = experimentIds.map((experimentId) => { + return this.fetchTimeSeriesBackendRequest(requestRest, experimentId); + }); + return forkJoin(perExperimentRequests).pipe( + map((perExperimentResults) => { + const { + runToSeries, + error, + ...responseRest + } = perExperimentResults[0].response; + const combinedResponse = responseRest as TimeSeriesResponse; + for (const {response, experimentId} of perExperimentResults) { + const frontendResponse = buildFrontendTimeSeriesResponse( + response, + experimentId + ); + if (combinedResponse.error) { + continue; + } + const {runToSeries, error} = frontendResponse; + if (error) { + combinedResponse.error = error; + combinedResponse.runToSeries = undefined; + } else { + combinedResponse.runToSeries = combinedResponse.runToSeries || {}; + for (const run of Object.keys(runToSeries!)) { + combinedResponse.runToSeries[run] = runToSeries![run]; + } + } + } + return combinedResponse; + }) + ); + }); + return forkJoin(fetches); + } + + private fetchTimeSeriesBackendRequest( + backendRequest: BackendTimeSeriesRequest, + experimentId: string + ): Observable<{response: BackendTimeSeriesResponse; experimentId: string}> { + const body = new FormData(); + body.append('requests', JSON.stringify([backendRequest])); + return this.http + .post( + `/experiment/${experimentId}/${HTTP_PATH_PREFIX}/timeSeries`, + body + ) + .pipe( + map((responses: BackendTimeSeriesResponse[]) => { + return {response: responses[0], experimentId}; + }) + ); + } + + imageUrl(imageId: ImageId) { + return `${HTTP_PATH_PREFIX}/imageData?imageId=${imageId}`; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/metrics_data_source_module.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/metrics_data_source_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..0145b86e2701a27a508e7fd2665be2f65f5115d9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/metrics_data_source_module.ts @@ -0,0 +1,25 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; +import {TBHttpClientModule} from '../../webapp_data_source/tb_http_client_module'; + +import {TBMetricsDataSource} from './metrics_data_source'; +import {MetricsDataSource} from './types'; + +@NgModule({ + imports: [TBHttpClientModule], + providers: [{provide: MetricsDataSource, useClass: TBMetricsDataSource}], +}) +export class MetricsDataSourceModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/metrics_data_source_test.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/metrics_data_source_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..0144052d3fae6f1179a3e665d8bd0b2f7ccf2872 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/metrics_data_source_test.ts @@ -0,0 +1,302 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed} from '@angular/core/testing'; +import { + HttpTestingController, + TBHttpClientTestingModule, +} from '../../webapp_data_source/tb_http_client_testing'; + +import { + BackendTagMetadata, + BackendTimeSeriesResponse, +} from './metrics_backend_types'; +import {TBMetricsDataSource} from './metrics_data_source'; +import {MetricsDataSource, PluginType} from './types'; + +describe('TBMetricsDataSource test', () => { + let httpMock: HttpTestingController; + let dataSource: MetricsDataSource; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TBHttpClientTestingModule], + providers: [{provide: MetricsDataSource, useClass: TBMetricsDataSource}], + }).compileComponents(); + + httpMock = TestBed.inject(HttpTestingController); + dataSource = TestBed.inject(MetricsDataSource); + }); + + afterEach(() => { + httpMock.verify(); + }); + + describe('fetchTagMetadata', () => { + it('does not fetch when no experiment is passed', () => { + const resultSpy = jasmine.createSpy(); + dataSource.fetchTagMetadata([]).subscribe(resultSpy); + + expect(resultSpy).not.toHaveBeenCalled(); + }); + + it('converts run names to runIds', () => { + const resultSpy = jasmine.createSpy(); + dataSource.fetchTagMetadata(['exp1']).subscribe(resultSpy); + + const req = httpMock.expectOne( + '/experiment/exp1/data/plugin/timeseries/tags' + ); + req.flush({ + scalars: { + tagDescriptions: {}, + runTagInfo: {run1: ['tag1']}, + }, + histograms: { + tagDescriptions: {}, + runTagInfo: {run1: ['tag2']}, + }, + images: { + tagDescriptions: {}, + tagRunSampledInfo: {tag3: {run1: {maxSamplesPerStep: 1}}}, + }, + } as BackendTagMetadata); + + expect(resultSpy).toHaveBeenCalledWith({ + scalars: { + tagDescriptions: {}, + runTagInfo: {'exp1/run1': ['tag1']}, + }, + histograms: { + tagDescriptions: {}, + runTagInfo: {'exp1/run1': ['tag2']}, + }, + images: { + tagDescriptions: {}, + tagRunSampledInfo: {tag3: {'exp1/run1': {maxSamplesPerStep: 1}}}, + }, + }); + }); + + it('combines tag data from multiple experiments', () => { + const resultSpy = jasmine.createSpy(); + dataSource.fetchTagMetadata(['exp1', 'exp2']).subscribe(resultSpy); + + const req1 = httpMock.expectOne( + '/experiment/exp1/data/plugin/timeseries/tags' + ); + req1.flush({ + scalars: { + tagDescriptions: {tag1: 'tag1 is Foo'}, + runTagInfo: {run1: ['tag1']}, + }, + histograms: { + tagDescriptions: {}, + runTagInfo: {run1: ['tag2']}, + }, + images: { + tagDescriptions: {}, + tagRunSampledInfo: {tag3: {run1: {maxSamplesPerStep: 1}}}, + }, + } as BackendTagMetadata); + + const req2 = httpMock.expectOne( + '/experiment/exp2/data/plugin/timeseries/tags' + ); + req2.flush({ + scalars: { + tagDescriptions: {tag1: 'tag1 is Bar'}, + runTagInfo: {run1: ['tag1']}, + }, + histograms: { + tagDescriptions: {}, + runTagInfo: {run1: ['tag2']}, + }, + images: { + tagDescriptions: {}, + tagRunSampledInfo: { + tag3: { + run1: {maxSamplesPerStep: 1}, + run2: {maxSamplesPerStep: 1}, + }, + }, + }, + } as BackendTagMetadata); + + expect(resultSpy).toHaveBeenCalledWith({ + scalars: { + tagDescriptions: {tag1: 'tag1 is Bar'}, + runTagInfo: {'exp1/run1': ['tag1'], 'exp2/run1': ['tag1']}, + }, + histograms: { + tagDescriptions: {}, + runTagInfo: {'exp1/run1': ['tag2'], 'exp2/run1': ['tag2']}, + }, + images: { + tagDescriptions: {}, + tagRunSampledInfo: { + tag3: { + 'exp1/run1': {maxSamplesPerStep: 1}, + 'exp2/run1': {maxSamplesPerStep: 1}, + 'exp2/run2': {maxSamplesPerStep: 1}, + }, + }, + }, + }); + }); + }); + + describe('fetchTimeSeries', () => { + it('does not fetch when no experiment is passed', () => { + const resultSpy = jasmine.createSpy(); + dataSource.fetchTimeSeries([]).subscribe(resultSpy); + + expect(resultSpy).not.toHaveBeenCalled(); + }); + + it('does not fetch when request has empty experiment ids', () => { + const resultSpy = jasmine.createSpy(); + dataSource + .fetchTimeSeries([ + { + plugin: PluginType.SCALARS, + tag: 'tag1', + experimentIds: [], + }, + ]) + .subscribe(resultSpy); + + expect(resultSpy).not.toHaveBeenCalled(); + }); + + it('makes requests per experiment id', () => { + const resultSpy = jasmine.createSpy(); + dataSource + .fetchTimeSeries([ + { + plugin: PluginType.SCALARS, + tag: 'tag1', + experimentIds: ['exp1', 'exp2'], + }, + ]) + .subscribe(resultSpy); + + const req1 = httpMock.expectOne( + '/experiment/exp1/data/plugin/timeseries/timeSeries' + ); + req1.flush([ + { + plugin: PluginType.SCALARS, + tag: 'tag1', + runToSeries: {run1: []}, + }, + ] as BackendTimeSeriesResponse[]); + + const req2 = httpMock.expectOne( + '/experiment/exp2/data/plugin/timeseries/timeSeries' + ); + req2.flush([ + { + plugin: PluginType.SCALARS, + tag: 'tag1', + runToSeries: {run1: []}, + }, + ] as BackendTimeSeriesResponse[]); + + expect(resultSpy).toHaveBeenCalledWith([ + { + plugin: PluginType.SCALARS, + tag: 'tag1', + runToSeries: {'exp1/run1': [], 'exp2/run1': []}, + }, + ]); + }); + + it('drops series data if one experiment had an error', () => { + const resultSpy = jasmine.createSpy(); + dataSource + .fetchTimeSeries([ + { + plugin: PluginType.SCALARS, + tag: 'tag1', + experimentIds: ['exp1', 'exp2'], + }, + ]) + .subscribe(resultSpy); + + const req1 = httpMock.expectOne( + '/experiment/exp1/data/plugin/timeseries/timeSeries' + ); + req1.flush([ + { + plugin: PluginType.SCALARS, + tag: 'tag1', + error: 'Something bad happened', + }, + ] as BackendTimeSeriesResponse[]); + + const req2 = httpMock.expectOne( + '/experiment/exp2/data/plugin/timeseries/timeSeries' + ); + req2.flush([ + { + plugin: PluginType.SCALARS, + tag: 'tag1', + runToSeries: {run1: []}, + }, + ] as BackendTimeSeriesResponse[]); + + expect(resultSpy).toHaveBeenCalledWith([ + { + plugin: PluginType.SCALARS, + tag: 'tag1', + error: 'Something bad happened', + runToSeries: undefined, + }, + ]); + }); + + it('makes single-run requests', () => { + const resultSpy = jasmine.createSpy(); + dataSource + .fetchTimeSeries([ + { + plugin: PluginType.HISTOGRAMS, + tag: 'tag1', + runId: 'exp1/run1', + }, + ]) + .subscribe(resultSpy); + + const req1 = httpMock.expectOne( + '/experiment/exp1/data/plugin/timeseries/timeSeries' + ); + req1.flush([ + { + plugin: PluginType.HISTOGRAMS, + tag: 'tag1', + runToSeries: {run1: []}, + }, + ] as BackendTimeSeriesResponse[]); + + expect(resultSpy).toHaveBeenCalledWith([ + { + plugin: PluginType.HISTOGRAMS, + tag: 'tag1', + runToSeries: {'exp1/run1': []}, + }, + ]); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/types.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..9fb7769b7045b8fb23d4752df03808b51ff11f22 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/data_source/types.ts @@ -0,0 +1,182 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Observable} from 'rxjs'; + +export const METRICS_PLUGIN_ID = 'timeseries'; + +export type RunToTags = { + [runId: string]: string[]; +}; + +export type TagToDescription = { + [tag: string]: string; +}; + +export interface NonSampledTagMetadata { + runTagInfo: RunToTags; + tagDescriptions: TagToDescription; +} + +export interface SampledTimeSeriesInfo { + maxSamplesPerStep: number; +} + +export interface RunSampledInfo { + [runId: string]: SampledTimeSeriesInfo; +} + +export interface TagToRunSampledInfo { + [tag: string]: RunSampledInfo; +} + +export type SampledTagMetadata = { + tagDescriptions: TagToDescription; + tagRunSampledInfo: TagToRunSampledInfo; +}; + +export enum PluginType { + SCALARS = 'scalars', + HISTOGRAMS = 'histograms', + IMAGES = 'images', +} + +export function isPluginType(text: string): text is PluginType { + return ( + text === PluginType.SCALARS || + text === PluginType.HISTOGRAMS || + text === PluginType.IMAGES + ); +} + +export type SampledPluginType = PluginType.IMAGES; +const sampledPluginTypes = [PluginType.IMAGES]; + +export type NonSampledPluginType = Exclude; + +export function isSampledPlugin( + plugin: PluginType +): plugin is SampledPluginType { + return sampledPluginTypes.includes(plugin); +} + +export type SingleRunPluginType = PluginType.HISTOGRAMS | PluginType.IMAGES; +const singleRunPluginTypes = [PluginType.HISTOGRAMS, PluginType.IMAGES]; + +export type MultiRunPluginType = Exclude; + +export function isSingleRunPlugin( + plugin: PluginType +): plugin is SingleRunPluginType { + return singleRunPluginTypes.includes(plugin); +} + +export type TagMetadata = { + [PluginType.SCALARS]: NonSampledTagMetadata; + [PluginType.HISTOGRAMS]: NonSampledTagMetadata; + [PluginType.IMAGES]: SampledTagMetadata; +}; + +export interface SingleRunTimeSeriesRequest { + plugin: SingleRunPluginType; + tag: string; + sample?: number; + runId: string; +} + +export interface MultiRunTimeSeriesRequest { + plugin: MultiRunPluginType; + tag: string; + sample?: number; + experimentIds: string[]; +} + +export type TimeSeriesRequest = + | SingleRunTimeSeriesRequest + | MultiRunTimeSeriesRequest; + +export function isSingleRunTimeSeriesRequest( + request: TimeSeriesRequest +): request is SingleRunTimeSeriesRequest { + return isSingleRunPlugin(request.plugin); +} + +export type RunToSeries = + | { + [runId: string]: ScalarStepDatum[]; + } + | {[runId: string]: HistogramStepDatum[]} + | {[runId: string]: ImageStepDatum[]}; + +export interface TimeSeriesSuccessfulResponse { + plugin: PluginType; + tag: string; + runId?: string; + sample?: number; + runToSeries: RunToSeries; + error?: undefined; +} + +export interface TimeSeriesFailedResponse { + plugin: PluginType; + tag: string; + runId?: string; + sample?: number; + error: string; + runToSeries?: undefined; +} + +export type TimeSeriesResponse = + | TimeSeriesSuccessfulResponse + | TimeSeriesFailedResponse; + +export interface ScalarStepDatum { + step: number; + wallTime: number; + value: number; +} + +export interface HistogramBin { + min: number; + max: number; + count: number; +} + +export interface HistogramStepDatum { + step: number; + wallTime: number; + bins: HistogramBin[]; +} + +export type ImageId = string; + +export interface ImageStepDatum { + step: number; + wallTime: number; + imageId: ImageId; +} + +export abstract class MetricsDataSource { + abstract fetchTagMetadata(experimentIds: string[]): Observable; + abstract fetchTimeSeries( + requests: TimeSeriesRequest[] + ): Observable; + abstract imageUrl(imageId: ImageId): string; +} + +export function isFailedTimeSeriesResponse( + response: TimeSeriesResponse +): response is TimeSeriesFailedResponse { + return response.hasOwnProperty('error'); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/effects/BUILD b/saved_models/tensorboard/tensorboard/webapp/metrics/effects/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..da80fc751cd92c0ca2e2d1bc6f5aab69e84ef8a5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/effects/BUILD @@ -0,0 +1,55 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "effects", + srcs = ["index.ts"], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/app_routing/actions", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/metrics:types", + "//tensorboard/webapp/metrics/actions", + "//tensorboard/webapp/metrics/data_source", + "//tensorboard/webapp/metrics/store", + "//tensorboard/webapp/types", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "effects_test", + testonly = True, + srcs = ["metrics_effects_test.ts"], + deps = [ + ":effects", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/app_routing:testing", + "//tensorboard/webapp/app_routing:types", + "//tensorboard/webapp/app_routing/actions", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/metrics:test_lib", + "//tensorboard/webapp/metrics:types", + "//tensorboard/webapp/metrics/actions", + "//tensorboard/webapp/metrics/data_source", + "//tensorboard/webapp/metrics/store", + "//tensorboard/webapp/types", + "//tensorboard/webapp/webapp_data_source:http_client_testing", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/effects/index.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/effects/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..2171473fdada0af76817a4fd5a26986b29393ca3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/effects/index.ts @@ -0,0 +1,293 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {Actions, createEffect, ofType, OnInitEffects} from '@ngrx/effects'; +import {Action, createAction, createSelector, Store} from '@ngrx/store'; +import * as coreActions from '../../core/actions'; +import {getActivePlugin} from '../../core/store'; +import {DataLoadState} from '../../types/data'; +import {forkJoin, merge, Observable, of} from 'rxjs'; +import { + catchError, + filter, + map, + mergeMap, + switchMap, + take, + tap, + withLatestFrom, +} from 'rxjs/operators'; + +import * as routingActions from '../../app_routing/actions'; +import {State} from '../../app_state'; +import * as selectors from '../../selectors'; +import * as actions from '../actions'; +import { + isFailedTimeSeriesResponse, + isSingleRunPlugin, + METRICS_PLUGIN_ID, + MetricsDataSource, + TagMetadata, + TimeSeriesRequest, + TimeSeriesResponse, +} from '../data_source/index'; +import { + getCardLoadState, + getCardMetadata, + getMetricsTagMetadataLoaded, +} from '../store'; +import {CardId, CardMetadata} from '../types'; + +/** @typehack */ import * as _typeHackNgrxEffects from '@ngrx/effects/effects'; +/** @typehack */ import * as _typeHackModels from '@ngrx/store/src/models'; +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +export type CardFetchInfo = CardMetadata & { + id: CardId; + loadState: DataLoadState; +}; + +const getCardFetchInfo = createSelector(getCardLoadState, getCardMetadata, ( + loadState, + maybeMetadata, + cardId /* props */ +): CardFetchInfo | null => { + if (!maybeMetadata) { + return null; + } + return {...maybeMetadata, loadState, id: cardId}; +}); + +const initAction = createAction('[Metrics Effects] Init'); + +@Injectable() +export class MetricsEffects implements OnInitEffects { + constructor( + private readonly actions$: Actions, + private readonly store: Store, + private readonly dataSource: MetricsDataSource + ) {} + + /** @export */ + ngrxOnInitEffects(): Action { + return initAction(); + } + + /** + * Our effects react when the plugin dashboard is fully "shown" and experiment + * ids are available. The `activePlugin` acts as our proxy to know whether it + * is shown. + * + * [Metrics Effects] Init - the initial `activePlugin` is set. + * [Core] Plugin Changed - subsequent `activePlugin` updates. + * [App Routing] Navigated - experiment id updates. + */ + private readonly dashboardShownWithoutData$ = this.actions$.pipe( + ofType(initAction, coreActions.changePlugin, routingActions.navigated), + withLatestFrom( + this.store.select(getActivePlugin), + this.store.select(getMetricsTagMetadataLoaded) + ), + filter(([, activePlugin, tagLoadState]) => { + return ( + activePlugin === METRICS_PLUGIN_ID && + tagLoadState === DataLoadState.NOT_LOADED + ); + }) + ); + + private readonly reloadRequestedWhileShown$ = this.actions$.pipe( + ofType(coreActions.reload, coreActions.manualReload), + withLatestFrom(this.store.select(getActivePlugin)), + filter(([, activePlugin]) => { + return activePlugin === METRICS_PLUGIN_ID; + }) + ); + + private readonly loadTagMetadata$ = merge( + this.dashboardShownWithoutData$, + this.reloadRequestedWhileShown$ + ).pipe( + withLatestFrom( + this.store.select(getMetricsTagMetadataLoaded), + this.store.select(selectors.getExperimentIdsFromRoute) + ), + filter(([, tagLoadState, experimentIds]) => { + /** + * When `experimentIds` is null, the actual ids have not + * appeared in the store yet. + */ + return tagLoadState !== DataLoadState.LOADING && experimentIds !== null; + }), + tap(() => { + this.store.dispatch(actions.metricsTagMetadataRequested()); + }), + switchMap(([, , experimentIds]) => { + return this.dataSource.fetchTagMetadata(experimentIds!).pipe( + tap((tagMetadata: TagMetadata) => { + this.store.dispatch(actions.metricsTagMetadataLoaded({tagMetadata})); + }), + catchError(() => { + this.store.dispatch(actions.metricsTagMetadataFailed()); + return of(null); + }) + ); + }) + ); + + private getVisibleCardFetchInfos(): Observable { + const visibleCardIds$ = this.store.select(selectors.getVisibleCardIds); + return visibleCardIds$.pipe( + switchMap((cardIds) => { + // Explicitly notify subscribers that there are no visible cards, + // since `forkJoin` does not emit when passed an empty array. + if (!cardIds.length) { + return of([]); + } + const observables = cardIds.map((cardId) => { + return this.store.select(getCardFetchInfo, cardId).pipe(take(1)); + }); + return forkJoin(observables); + }), + map((fetchInfos) => { + return fetchInfos.filter(Boolean) as CardFetchInfo[]; + }) + ); + } + + private fetchTimeSeries(request: TimeSeriesRequest) { + return this.dataSource.fetchTimeSeries([request]).pipe( + tap((responses: TimeSeriesResponse[]) => { + const errors = responses.filter(isFailedTimeSeriesResponse); + if (errors.length) { + console.error('Time series response contained errors:', errors); + } + this.store.dispatch( + actions.fetchTimeSeriesLoaded({response: responses[0]}) + ); + }), + catchError(() => { + this.store.dispatch(actions.fetchTimeSeriesFailed({request})); + return of(null); + }) + ); + } + + private fetchTimeSeriesForCards( + fetchInfos: CardFetchInfo[], + experimentIds: string[] + ) { + /** + * TODO(psybuzz): if 2 cards require the same data, we should dedupe instead of + * making 2 identical requests. + */ + const requests: TimeSeriesRequest[] = fetchInfos.map((fetchInfo) => { + const {plugin, tag, runId, sample} = fetchInfo; + return isSingleRunPlugin(plugin) + ? {plugin, tag, sample, runId: runId!} + : {plugin, tag, sample, experimentIds}; + }); + + // Fetch and handle responses. + return of(requests).pipe( + tap((requests) => { + this.store.dispatch(actions.multipleTimeSeriesRequested({requests})); + }), + mergeMap((requests: TimeSeriesRequest[]) => { + const observables = requests.map((request) => + this.fetchTimeSeries(request) + ); + return merge(...observables); + }) + ); + } + + private readonly visibleCardsWithoutDataChanged$ = this.actions$.pipe( + ofType(actions.cardVisibilityChanged), + switchMap(() => this.getVisibleCardFetchInfos().pipe(take(1))), + map((fetchInfos) => { + return fetchInfos.filter((fetchInfo) => { + return fetchInfo.loadState === DataLoadState.NOT_LOADED; + }); + }) + ); + + private readonly visibleCardsReloaded$ = this.reloadRequestedWhileShown$.pipe( + switchMap(() => this.getVisibleCardFetchInfos().pipe(take(1))), + map((fetchInfos) => { + return fetchInfos.filter((fetchInfo) => { + return fetchInfo.loadState !== DataLoadState.LOADING; + }); + }) + ); + + private readonly loadTimeSeries$ = merge( + this.visibleCardsWithoutDataChanged$, + this.visibleCardsReloaded$ + ).pipe( + filter((fetchInfos) => fetchInfos.length > 0), + + // Ignore card visibility events until we have non-null + // experimentIds. + withLatestFrom( + this.store + .select(selectors.getExperimentIdsFromRoute) + .pipe(filter((experimentIds) => experimentIds !== null)) + ), + mergeMap(([fetchInfos, experimentIds]) => { + return this.fetchTimeSeriesForCards(fetchInfos, experimentIds!); + }) + ); + + /** + * In general, this effect dispatch the following actions: + * + * On dashboard shown with visible cards: + * - metricsTagMetadataRequested + * - multipleTimeSeriesRequested + * + * On reloads: + * - metricsTagMetadataRequested + * - multipleTimeSeriesRequested + * + * On data source responses: + * - metricsTagMetadataLoaded + * - metricsTagMetadataFailed + * - fetchTimeSeriesLoaded + * - fetchTimeSeriesFailed + */ + /** @export */ + readonly allEffects$ = createEffect( + () => { + return merge( + /** + * Subscribes to: dashboard shown, route navigation, reloads. + */ + this.loadTagMetadata$, + + /** + * Subscribes to: card visibility, reloads. + */ + this.loadTimeSeries$ + ); + }, + {dispatch: false} + ); +} + +export const TEST_ONLY = { + getCardFetchInfo, + initAction, +}; diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/effects/metrics_effects_test.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/effects/metrics_effects_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..3180d50ccbce50fe30043ecb94d005488017371f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/effects/metrics_effects_test.ts @@ -0,0 +1,633 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed} from '@angular/core/testing'; +import {provideMockActions} from '@ngrx/effects/testing'; +import {Action, Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import * as coreActions from '../../core/actions'; +import {getActivePlugin} from '../../core/store'; +import * as coreTesting from '../../core/testing'; +import {DataLoadState} from '../../types/data'; +import {TBHttpClientTestingModule} from '../../webapp_data_source/tb_http_client_testing'; +import {of, Subject} from 'rxjs'; + +import {buildNavigatedAction} from '../../app_routing/testing'; +import {State} from '../../app_state'; +import * as selectors from '../../selectors'; +import * as actions from '../actions'; +import { + METRICS_PLUGIN_ID, + MetricsDataSource, + MultiRunPluginType, + PluginType, + SingleRunPluginType, + TagMetadata, + TimeSeriesResponse, +} from '../data_source'; +import {getMetricsTagMetadataLoaded} from '../store'; +import { + appStateFromMetricsState, + buildDataSourceTagMetadata, + buildMetricsState, + createScalarStepData, + provideTestingMetricsDataSource, +} from '../testing'; +import {CardId} from '../types'; + +import {CardFetchInfo, MetricsEffects, TEST_ONLY} from './index'; + +describe('metrics effects', () => { + let dataSource: MetricsDataSource; + let effects: MetricsEffects; + let store: MockStore; + let actions$: Subject; + let actualActions: Action[] = []; + + beforeEach(async () => { + actions$ = new Subject(); + actualActions = []; + + await TestBed.configureTestingModule({ + imports: [TBHttpClientTestingModule], + providers: [ + provideMockActions(actions$), + provideTestingMetricsDataSource(), + MetricsEffects, + provideMockStore({ + initialState: { + ...appStateFromMetricsState(buildMetricsState()), + ...coreTesting.createState(coreTesting.createCoreState()), + }, + }), + ], + }).compileComponents(); + + store = TestBed.inject>(Store) as MockStore; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + actualActions.push(action); + }); + effects = TestBed.inject(MetricsEffects); + dataSource = TestBed.inject(MetricsDataSource); + store.overrideSelector(selectors.getExperimentIdsFromRoute, null); + store.overrideSelector(selectors.getRouteId, 'route1'); + effects.allEffects$.subscribe(); + }); + + describe('loadTagMetadata', () => { + let fetchTagMetadataSpy: jasmine.Spy; + let fetchTagMetadataSubject: Subject; + + beforeEach(() => { + fetchTagMetadataSubject = new Subject(); + fetchTagMetadataSpy = spyOn( + dataSource, + 'fetchTagMetadata' + ).and.returnValue(fetchTagMetadataSubject); + }); + + it('loads TagMetadata on dashboard open if data is not loaded', () => { + store.overrideSelector(selectors.getExperimentIdsFromRoute, null); + store.overrideSelector( + getMetricsTagMetadataLoaded, + DataLoadState.NOT_LOADED + ); + store.overrideSelector(getActivePlugin, null); + store.refreshState(); + + expect(fetchTagMetadataSpy).not.toHaveBeenCalled(); + expect(actualActions).toEqual([]); + + // Assume activePlugin's initial bootstrap occurs by the time we init. + store.overrideSelector(getActivePlugin, METRICS_PLUGIN_ID); + store.refreshState(); + actions$.next(TEST_ONLY.initAction()); + + expect(fetchTagMetadataSpy).not.toHaveBeenCalled(); + expect(actualActions).toEqual([]); + + // Assume experimentIds in the activeRoute are set on navigation. + store.overrideSelector(selectors.getExperimentIdsFromRoute, ['exp1']); + store.refreshState(); + actions$.next(buildNavigatedAction()); + + fetchTagMetadataSubject.next(buildDataSourceTagMetadata()); + + expect(fetchTagMetadataSpy).toHaveBeenCalled(); + expect(actualActions).toEqual([ + actions.metricsTagMetadataRequested(), + actions.metricsTagMetadataLoaded({ + tagMetadata: buildDataSourceTagMetadata(), + }), + ]); + }); + + it('loads TagMetadata when switching to dashboard with experiment', () => { + store.overrideSelector(selectors.getExperimentIdsFromRoute, ['exp1']); + store.overrideSelector( + getMetricsTagMetadataLoaded, + DataLoadState.NOT_LOADED + ); + store.overrideSelector(getActivePlugin, null); + store.refreshState(); + + expect(fetchTagMetadataSpy).not.toHaveBeenCalled(); + expect(actualActions).toEqual([]); + + // Assume activePlugin's initial bootstrap occurs by the time we init. + store.overrideSelector(getActivePlugin, METRICS_PLUGIN_ID); + store.refreshState(); + actions$.next(coreActions.changePlugin({plugin: METRICS_PLUGIN_ID})); + + fetchTagMetadataSubject.next(buildDataSourceTagMetadata()); + + expect(fetchTagMetadataSpy).toHaveBeenCalled(); + expect(actualActions).toEqual([ + actions.metricsTagMetadataRequested(), + actions.metricsTagMetadataLoaded({ + tagMetadata: buildDataSourceTagMetadata(), + }), + ]); + }); + + it('does not fetch TagMetadata if data was loaded when opening', () => { + store.overrideSelector(getMetricsTagMetadataLoaded, DataLoadState.LOADED); + store.overrideSelector(getActivePlugin, METRICS_PLUGIN_ID); + store.refreshState(); + actions$.next(TEST_ONLY.initAction()); + + fetchTagMetadataSubject.next(buildDataSourceTagMetadata()); + + expect(fetchTagMetadataSpy).not.toHaveBeenCalled(); + expect(actualActions).toEqual([]); + }); + + it('does not fetch TagMetadata if data was loading when opening', () => { + store.overrideSelector( + getMetricsTagMetadataLoaded, + DataLoadState.LOADING + ); + store.overrideSelector(getActivePlugin, METRICS_PLUGIN_ID); + store.refreshState(); + actions$.next(TEST_ONLY.initAction()); + + fetchTagMetadataSubject.next(buildDataSourceTagMetadata()); + + expect(fetchTagMetadataSpy).not.toHaveBeenCalled(); + expect(actualActions).toEqual([]); + }); + }); + + describe('reloading', () => { + let fetchTagMetadataSpy: jasmine.Spy; + let fetchTimeSeriesSpy: jasmine.Spy; + let selectSpy: jasmine.Spy; + + beforeEach(() => { + fetchTagMetadataSpy = spyOn( + dataSource, + 'fetchTagMetadata' + ).and.returnValue(of(buildDataSourceTagMetadata())); + fetchTimeSeriesSpy = spyOn(dataSource, 'fetchTimeSeries'); + selectSpy = spyOn(store, 'select').and.callThrough(); + }); + + function provideCardFetchInfo( + specs: Array & {id: CardId}> + ) { + for (const {id, ...rest} of specs) { + selectSpy.withArgs(TEST_ONLY.getCardFetchInfo, id).and.returnValue( + of({ + id, + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + sample: undefined, + loadState: DataLoadState.NOT_LOADED, + ...rest, + }) + ); + } + } + + function buildTimeSeriesResponse() { + return { + plugin: PluginType.SCALARS, + tag: 'tagA', + sample: undefined, + runToSeries: { + run1: createScalarStepData(), + }, + }; + } + + const reloadSpecs = [ + {reloadAction: coreActions.manualReload, reloadName: 'manual reload'}, + {reloadAction: coreActions.reload, reloadName: 'auto reload'}, + ]; + for (const {reloadAction, reloadName} of reloadSpecs) { + it(`re-fetches data on ${reloadName}, while dashboard is open`, () => { + store.overrideSelector(selectors.getExperimentIdsFromRoute, ['exp1']); + store.overrideSelector( + getMetricsTagMetadataLoaded, + DataLoadState.LOADED + ); + store.overrideSelector(getActivePlugin, METRICS_PLUGIN_ID); + store.overrideSelector(selectors.getVisibleCardIds, ['card1', 'card2']); + provideCardFetchInfo([{id: 'card1'}, {id: 'card2'}]); + store.refreshState(); + fetchTimeSeriesSpy.and.returnValue(of([buildTimeSeriesResponse()])); + + actions$.next(reloadAction()); + + expect(fetchTagMetadataSpy).toHaveBeenCalled(); + expect(fetchTimeSeriesSpy).toHaveBeenCalledTimes(2); + expect(actualActions).toEqual([ + actions.metricsTagMetadataRequested(), + actions.metricsTagMetadataLoaded({ + tagMetadata: buildDataSourceTagMetadata(), + }), + + // Currently we expect 2x the same requests if the cards are the same. + // Ideally we should dedupe requests for the same info. + actions.multipleTimeSeriesRequested({ + requests: [ + { + plugin: PluginType.SCALARS as MultiRunPluginType, + tag: 'tagA', + experimentIds: ['exp1'], + sample: undefined, + }, + { + plugin: PluginType.SCALARS as MultiRunPluginType, + tag: 'tagA', + experimentIds: ['exp1'], + sample: undefined, + }, + ], + }), + actions.fetchTimeSeriesLoaded({response: buildTimeSeriesResponse()}), + actions.fetchTimeSeriesLoaded({response: buildTimeSeriesResponse()}), + ]); + }); + + it(`re-fetches data on ${reloadName}, only for non-loading cards`, () => { + store.overrideSelector(selectors.getExperimentIdsFromRoute, ['exp1']); + store.overrideSelector( + getMetricsTagMetadataLoaded, + DataLoadState.LOADING + ); + store.overrideSelector(getActivePlugin, METRICS_PLUGIN_ID); + store.overrideSelector(selectors.getVisibleCardIds, ['card1', 'card2']); + provideCardFetchInfo([ + {id: 'card1', loadState: DataLoadState.LOADED}, + {id: 'card2', loadState: DataLoadState.LOADING}, + ]); + store.refreshState(); + fetchTimeSeriesSpy.and.returnValue(of([buildTimeSeriesResponse()])); + + actions$.next(reloadAction()); + + expect(fetchTagMetadataSpy).not.toHaveBeenCalled(); + expect(fetchTimeSeriesSpy).toHaveBeenCalledTimes(1); + expect(actualActions).toEqual([ + actions.multipleTimeSeriesRequested({ + requests: [ + { + plugin: PluginType.SCALARS as MultiRunPluginType, + tag: 'tagA', + experimentIds: ['exp1'], + sample: undefined, + }, + ], + }), + actions.fetchTimeSeriesLoaded({response: buildTimeSeriesResponse()}), + ]); + }); + } + + it('does not re-fetch data on reload, if open and already loading', () => { + store.overrideSelector( + getMetricsTagMetadataLoaded, + DataLoadState.LOADING + ); + store.overrideSelector(getActivePlugin, METRICS_PLUGIN_ID); + store.overrideSelector(selectors.getVisibleCardIds, ['card1', 'card2']); + provideCardFetchInfo([ + {id: 'card1', loadState: DataLoadState.LOADING}, + {id: 'card2', loadState: DataLoadState.LOADING}, + ]); + store.refreshState(); + fetchTimeSeriesSpy.and.returnValue(of([buildTimeSeriesResponse()])); + + actions$.next(coreActions.manualReload()); + actions$.next(coreActions.reload()); + + expect(fetchTagMetadataSpy).not.toHaveBeenCalled(); + expect(fetchTimeSeriesSpy).not.toHaveBeenCalled(); + expect(actualActions).toEqual([]); + }); + + it('does not re-fetch tag metadata if dashboard is inactive', () => { + store.overrideSelector(getActivePlugin, null); + store.refreshState(); + + actions$.next(coreActions.manualReload()); + actions$.next(coreActions.reload()); + + expect(fetchTagMetadataSpy).not.toHaveBeenCalled(); + expect(actualActions).toEqual([]); + }); + + it('does not re-fetch time series, if no cards are visible', () => { + store.overrideSelector(getActivePlugin, METRICS_PLUGIN_ID); + store.overrideSelector(selectors.getVisibleCardIds, []); + store.refreshState(); + fetchTimeSeriesSpy.and.returnValue(of([buildTimeSeriesResponse()])); + + actions$.next(coreActions.manualReload()); + actions$.next(coreActions.reload()); + + expect(fetchTimeSeriesSpy).not.toHaveBeenCalled(); + }); + + it('does not re-fetch time series, until a valid experiment id', () => { + // Reset any `getExperimentIdsFromRoute` overrides above. + store.resetSelectors(); + store.overrideSelector(selectors.getRouteId, 'route1'); + store.overrideSelector(getActivePlugin, METRICS_PLUGIN_ID); + store.overrideSelector(selectors.getVisibleCardIds, ['card1']); + provideCardFetchInfo([{id: 'card1', loadState: DataLoadState.LOADED}]); + store.overrideSelector(selectors.getExperimentIdsFromRoute, null); + store.refreshState(); + fetchTimeSeriesSpy.and.returnValue(of([buildTimeSeriesResponse()])); + + actions$.next(coreActions.manualReload()); + actions$.next(coreActions.reload()); + + expect(fetchTimeSeriesSpy).not.toHaveBeenCalled(); + + store.overrideSelector(selectors.getExperimentIdsFromRoute, ['exp1']); + store.refreshState(); + + actions$.next(coreActions.manualReload()); + actions$.next(coreActions.reload()); + + expect(fetchTimeSeriesSpy).toHaveBeenCalledTimes(2); + }); + }); + + describe('loadTimeSeriesForVisibleCardsWithoutData', () => { + let fetchTimeSeriesSpy: jasmine.Spy; + const runToSeries = {run1: createScalarStepData()}; + const sampleBackendResponses: TimeSeriesResponse[] = [ + { + plugin: PluginType.SCALARS, + tag: 'scalarTag', + runToSeries: runToSeries, + }, + { + plugin: PluginType.SCALARS, + tag: 'scalarTag2', + runToSeries: runToSeries, + }, + ]; + + it('does not fetch when nothing is visible', () => { + fetchTimeSeriesSpy = spyOn(dataSource, 'fetchTimeSeries').and.returnValue( + of(sampleBackendResponses) + ); + store.overrideSelector(selectors.getExperimentIdsFromRoute, ['exp1']); + store.overrideSelector(TEST_ONLY.getCardFetchInfo, { + id: 'card1', + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + loadState: DataLoadState.NOT_LOADED, + }); + store.refreshState(); + + actions$.next( + actions.cardVisibilityChanged({ + enteredCards: new Set(), + exitedCards: new Set(), + }) + ); + + expect(fetchTimeSeriesSpy).not.toHaveBeenCalled(); + expect(actualActions).toEqual([]); + }); + + it('fetches only once when hiding then showing a card', () => { + fetchTimeSeriesSpy = spyOn(dataSource, 'fetchTimeSeries').and.returnValue( + of(sampleBackendResponses) + ); + store.overrideSelector(selectors.getExperimentIdsFromRoute, ['exp1']); + store.overrideSelector(TEST_ONLY.getCardFetchInfo, { + id: 'card1', + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + loadState: DataLoadState.NOT_LOADED, + }); + + store.overrideSelector(selectors.getVisibleCardIds, []); + store.refreshState(); + actions$.next( + actions.cardVisibilityChanged({ + enteredCards: new Set(), + exitedCards: new Set(['card1']), + }) + ); + + expect(fetchTimeSeriesSpy).not.toHaveBeenCalled(); + expect(actualActions).toEqual([]); + + store.overrideSelector(selectors.getVisibleCardIds, ['card1']); + store.refreshState(); + actions$.next( + actions.cardVisibilityChanged({ + enteredCards: new Set(['card1']), + exitedCards: new Set(), + }) + ); + + const expectedRequest = { + plugin: PluginType.SCALARS as MultiRunPluginType, + tag: 'tagA', + experimentIds: ['exp1'], + sample: undefined, + }; + expect(fetchTimeSeriesSpy.calls.count()).toBe(1); + expect(fetchTimeSeriesSpy).toHaveBeenCalledWith([expectedRequest]); + expect(actualActions).toEqual([ + actions.multipleTimeSeriesRequested({requests: [expectedRequest]}), + actions.fetchTimeSeriesLoaded({response: sampleBackendResponses[0]}), + ]); + }); + + it('does not fetch when a loaded card exits and re-enters', () => { + fetchTimeSeriesSpy = spyOn(dataSource, 'fetchTimeSeries').and.returnValue( + of(sampleBackendResponses) + ); + store.overrideSelector(selectors.getExperimentIdsFromRoute, ['exp1']); + store.overrideSelector(TEST_ONLY.getCardFetchInfo, { + id: 'card1', + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + loadState: DataLoadState.LOADED, + }); + + // Initial load. + store.overrideSelector(selectors.getVisibleCardIds, ['card1']); + store.refreshState(); + actions$.next( + actions.cardVisibilityChanged({ + enteredCards: new Set(['card1']), + exitedCards: new Set(), + }) + ); + + expect(fetchTimeSeriesSpy).not.toHaveBeenCalled(); + expect(actualActions).toEqual([]); + + // Exit. + store.overrideSelector(selectors.getVisibleCardIds, []); + store.refreshState(); + actions$.next( + actions.cardVisibilityChanged({ + enteredCards: new Set(), + exitedCards: new Set(['card1']), + }) + ); + + expect(fetchTimeSeriesSpy).not.toHaveBeenCalled(); + expect(actualActions).toEqual([]); + + // Re-enter. + store.overrideSelector(selectors.getVisibleCardIds, ['card1']); + store.refreshState(); + actions$.next( + actions.cardVisibilityChanged({ + enteredCards: new Set(['card1']), + exitedCards: new Set(), + }) + ); + + expect(fetchTimeSeriesSpy).not.toHaveBeenCalled(); + expect(actualActions).toEqual([]); + }); + + it('fetches multiple card data', () => { + store.overrideSelector(selectors.getExperimentIdsFromRoute, ['exp1']); + const selectSpy = spyOn(store, 'select').and.callThrough(); + selectSpy.withArgs(TEST_ONLY.getCardFetchInfo, 'card1').and.returnValue( + of({ + id: 'card1', + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + sample: undefined, + loadState: DataLoadState.NOT_LOADED, + }) + ); + selectSpy.withArgs(TEST_ONLY.getCardFetchInfo, 'card2').and.returnValue( + of({ + id: 'card2', + plugin: PluginType.IMAGES, + tag: 'tagB', + runId: 'run1', + sample: 5, + loadState: DataLoadState.NOT_LOADED, + }) + ); + + const expectedRequests = [ + { + plugin: PluginType.SCALARS as MultiRunPluginType, + tag: 'tagA', + experimentIds: ['exp1'], + sample: undefined, + }, + { + plugin: PluginType.IMAGES as SingleRunPluginType, + tag: 'tagB', + runId: 'run1', + sample: 5, + }, + ]; + fetchTimeSeriesSpy = spyOn(dataSource, 'fetchTimeSeries'); + fetchTimeSeriesSpy + .withArgs([expectedRequests[0]]) + .and.returnValue(of([sampleBackendResponses[0]])); + fetchTimeSeriesSpy + .withArgs([expectedRequests[1]]) + .and.returnValue(of([sampleBackendResponses[1]])); + + store.overrideSelector(selectors.getVisibleCardIds, ['card1', 'card2']); + store.refreshState(); + actions$.next( + actions.cardVisibilityChanged({ + enteredCards: new Set(['card1', 'card2']), + exitedCards: new Set(), + }) + ); + + expect(fetchTimeSeriesSpy.calls.allArgs()).toEqual([ + [[expectedRequests[0]]], + [[expectedRequests[1]]], + ]); + expect(actualActions).toEqual([ + actions.multipleTimeSeriesRequested({requests: expectedRequests}), + actions.fetchTimeSeriesLoaded({response: sampleBackendResponses[0]}), + actions.fetchTimeSeriesLoaded({response: sampleBackendResponses[1]}), + ]); + }); + + const metaSpec = [ + {loadState: DataLoadState.FAILED, tag: 'failed'}, + {loadState: DataLoadState.LOADED, tag: 'loaded'}, + {loadState: DataLoadState.LOADING, tag: 'loading'}, + ]; + for (const spec of metaSpec) { + const {loadState, tag} = spec; + const title = `should not fetch when load state is ${tag}`; + it(title, () => { + const selectSpy = spyOn(store, 'select').and.callThrough(); + selectSpy.withArgs(TEST_ONLY.getCardFetchInfo, 'card1').and.returnValue( + of({ + id: 'card1', + plugin: PluginType.SCALARS, + tag: 'tagA', + loadState, + }) + ); + fetchTimeSeriesSpy = spyOn(dataSource, 'fetchTimeSeries'); + + store.overrideSelector(selectors.getVisibleCardIds, ['card1']); + store.refreshState(); + actions$.next( + actions.cardVisibilityChanged({ + enteredCards: new Set(['card1']), + exitedCards: new Set(), + }) + ); + + expect(fetchTimeSeriesSpy).not.toHaveBeenCalled(); + expect(actualActions).toEqual([]); + }); + } + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/metrics_module.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/metrics_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..918a50696024618a2815d2f6fc48e2d2e48466d7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/metrics_module.ts @@ -0,0 +1,74 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {EffectsModule} from '@ngrx/effects'; +import {Action, StoreModule} from '@ngrx/store'; +import {PluginRegistryModule} from '../plugins/plugin_registry_module'; + +import {RunsSelectorModule} from '../runs/views/runs_selector/runs_selector_module'; + +import {METRICS_PLUGIN_ID, MetricsDataSourceModule} from './data_source'; +import {MetricsEffects} from './effects'; +import {METRICS_FEATURE_KEY, reducers} from './store'; +import {MetricsDashboardContainer} from './views/metrics_container'; +import {MetricsViewsModule} from './views/metrics_views_module'; +import {AlertActionModule} from '../alert/alert_action_module'; +import * as actions from './actions'; + +/** @typehack */ import * as _typeHackModels from '@ngrx/store/src/models'; +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +const CREATE_PIN_MAX_EXCEEDED_TEXT = + `Max pin limit exceeded. Remove existing` + + ` pins before adding more. See ` + + `https://github.com/tensorflow/tensorboard/issues/4242`; + +// Note: Angular can only reference symbols from the @NgModule if they are +// exported. +export function alertActionProvider() { + return [ + { + actionCreator: actions.cardPinStateToggled, + alertFromAction: (action: Action) => { + const {wasPinned, canCreateNewPins} = action as ReturnType< + typeof actions.cardPinStateToggled + >; + if (!wasPinned && !canCreateNewPins) { + return {localizedMessage: CREATE_PIN_MAX_EXCEEDED_TEXT}; + } + return null; + }, + }, + ]; +} + +@NgModule({ + imports: [ + CommonModule, + RunsSelectorModule, + PluginRegistryModule.forPlugin( + METRICS_PLUGIN_ID, + MetricsDashboardContainer + ), + MetricsDataSourceModule, + MetricsViewsModule, + StoreModule.forFeature(METRICS_FEATURE_KEY, reducers), + EffectsModule.forFeature([MetricsEffects]), + AlertActionModule.registerAlertActions(alertActionProvider), + ], + entryComponents: [MetricsDashboardContainer], +}) +export class MetricsModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/store/BUILD b/saved_models/tensorboard/tensorboard/webapp/metrics/store/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..d9b50f8b6dcfd72dcade9250c2f54d6b0d5229f2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/store/BUILD @@ -0,0 +1,81 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +tf_ts_library( + name = "store", + srcs = [ + "index.ts", + "metrics_reducers.ts", + "metrics_selectors.ts", + ], + deps = [ + ":internal_utils", + ":types", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/app_routing:route_contexted_reducer_helper", + "//tensorboard/webapp/app_routing:types", + "//tensorboard/webapp/app_routing/actions", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/metrics:types", + "//tensorboard/webapp/metrics/actions", + "//tensorboard/webapp/metrics/data_source", + "//tensorboard/webapp/types", + "//tensorboard/webapp/util:lang", + "//tensorboard/webapp/util:ngrx", + "//tensorboard/webapp/util:types", + "@npm//@ngrx/store", + ], +) + +tf_ts_library( + name = "internal_utils", + srcs = [ + "metrics_store_internal_utils.ts", + ], + visibility = ["//tensorboard/webapp/metrics/store:__subpackages__"], + deps = [ + ":types", + "//tensorboard/webapp/metrics:types", + "//tensorboard/webapp/metrics/data_source", + "//tensorboard/webapp/types", + ], +) + +tf_ts_library( + name = "types", + srcs = [ + "metrics_types.ts", + ], + deps = [ + "//tensorboard/webapp/app_routing:route_contexted_reducer_helper", + "//tensorboard/webapp/metrics:types", + "//tensorboard/webapp/metrics/data_source", + "//tensorboard/webapp/types", + ], +) + +tf_ts_library( + name = "store_test", + testonly = True, + srcs = [ + "metrics_reducers_test.ts", + "metrics_selectors_test.ts", + "metrics_store_internal_utils_test.ts", + ], + deps = [ + ":internal_utils", + ":store", + ":types", + "//tensorboard/webapp/app_routing:testing", + "//tensorboard/webapp/app_routing:types", + "//tensorboard/webapp/app_routing/actions", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/metrics:test_lib", + "//tensorboard/webapp/metrics:types", + "//tensorboard/webapp/metrics/actions", + "//tensorboard/webapp/metrics/data_source", + "//tensorboard/webapp/types", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/store/index.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/store/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..a01b8d8263a20eb0682c3483c1e9994bdcf93e2a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/store/index.ts @@ -0,0 +1,17 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export * from './metrics_types'; +export * from './metrics_reducers'; +export * from './metrics_selectors'; diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_reducers.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_reducers.ts new file mode 100644 index 0000000000000000000000000000000000000000..d719aa1452f40a301eabfd2902d82ea4602150ea --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_reducers.ts @@ -0,0 +1,770 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Action, createReducer, on} from '@ngrx/store'; +import * as coreActions from '../../core/actions'; +import {DataLoadState} from '../../types/data'; + +import {stateRehydratedFromUrl} from '../../app_routing/actions'; +import {createRouteContextedState} from '../../app_routing/route_contexted_reducer_helper'; +import {RouteKind} from '../../app_routing/types'; +import {mapObjectValues} from '../../util/lang'; +import {composeReducers} from '../../util/ngrx'; +import * as actions from '../actions'; +import { + isFailedTimeSeriesResponse, + isSampledPlugin, + isSingleRunPlugin, + isSingleRunTimeSeriesRequest, + NonSampledPluginType, + PluginType, + TagMetadata as DataSourceTagMetadata, + TimeSeriesRequest, + TimeSeriesResponse, +} from '../data_source'; +import { + CardId, + CardUniqueInfo, + CardMetadata, + HistogramMode, + TooltipSort, + URLDeserializedState, + XAxisType, +} from '../types'; + +import { + buildOrReturnStateWithUnresolvedImportedPins, + buildOrReturnStateWithPinnedCopy, + canCreateNewPins, + createPluginDataWithLoadable, + createRunToLoadState, + getCardId, + getPinnedCardId, + getRunIds, + getTimeSeriesLoadable, +} from './metrics_store_internal_utils'; +import { + CardMetadataMap, + CardStepIndexMap, + CardToPinnedCard, + MetricsRoutefulState, + MetricsRoutelessState, + MetricsState, + NonSampledPluginTagMetadata, + PinnedCardToCard, + TagMetadata, + TimeSeriesData, + TimeSeriesLoadable, +} from './metrics_types'; + +function buildCardMetadataList(tagMetadata: TagMetadata): CardMetadata[] { + const results: CardMetadata[] = []; + for (let pluginKey of Object.keys(tagMetadata)) { + const plugin = pluginKey as PluginType; + let tagToRuns; + + if (isSampledPlugin(plugin)) { + if (isSingleRunPlugin(plugin)) { + // Single-run, sampled format (e.g. Images). + const tagRunSampleInfo = tagMetadata[plugin].tagRunSampledInfo; + for (const tag of Object.keys(tagRunSampleInfo)) { + for (const runId of Object.keys(tagRunSampleInfo[tag])) { + const {maxSamplesPerStep} = tagRunSampleInfo[tag][runId]; + for (let i = 0; i < maxSamplesPerStep; i++) { + results.push({plugin, tag, runId, sample: i}); + } + } + } + } else { + throw new Error( + 'Multi-run, sampled plugin support not yet implemented' + ); + } + } else { + if (isSingleRunPlugin(plugin)) { + // Single-run, unsampled format (e.g. Histograms). + tagToRuns = tagMetadata[plugin].tagToRuns; + for (const tag of Object.keys(tagToRuns)) { + for (const runId of tagToRuns[tag]) { + results.push({plugin, tag, runId}); + } + } + } else { + // Multi-run, unsampled format (e.g. Scalars). + tagToRuns = tagMetadata[plugin].tagToRuns; + for (const tag of Object.keys(tagToRuns)) { + results.push({plugin, tag, runId: null}); + } + } + } + } + return results; +} + +function getMaxStepIndex( + cardId: CardId, + cardMetadataMap: CardMetadataMap, + timeSeriesData: TimeSeriesData +): number | null { + const {plugin, tag, runId, sample} = cardMetadataMap[cardId]; + const loadable = getTimeSeriesLoadable(timeSeriesData, plugin, tag, sample); + if (loadable) { + if (runId !== null && loadable.runToSeries.hasOwnProperty(runId)) { + const seriesLength = loadable.runToSeries[runId].length; + return seriesLength > 0 ? seriesLength - 1 : null; + } + const seriesLengths = Object.values(loadable.runToSeries).map( + (series) => series.length + ); + if (seriesLengths.length) { + return Math.max(...seriesLengths) - 1; + } + } + return null; +} + +/** + * Normalizes the step for cards in the step index map. This includes + * - assign a default step + * - reselect the max step, if the previous series' max was selected + * - clamp to the new series' max + * - set to `null` if the series contains no step data + */ +function buildNormalizedCardStepIndexMap( + cardMetadataMap: CardMetadataMap, + cardStepIndex: CardStepIndexMap, + timeSeriesData: TimeSeriesData, + prevTimeSeriesData: TimeSeriesData +): CardStepIndexMap { + const result = {...cardStepIndex}; + for (const cardId in cardMetadataMap) { + if (!cardMetadataMap.hasOwnProperty(cardId)) { + continue; + } + const maxStepIndex = getMaxStepIndex( + cardId, + cardMetadataMap, + timeSeriesData + ); + if (maxStepIndex === null) { + if (cardStepIndex.hasOwnProperty(cardId)) { + result[cardId] = null; + } + continue; + } + const stepIndex = cardStepIndex.hasOwnProperty(cardId) + ? cardStepIndex[cardId] + : null; + const prevMaxStepIndex = getMaxStepIndex( + cardId, + cardMetadataMap, + prevTimeSeriesData + ); + + const prevWasMax = stepIndex !== null && stepIndex === prevMaxStepIndex; + const shouldClamp = stepIndex !== null && stepIndex > maxStepIndex; + const shouldAutoSelectMax = stepIndex === null || prevWasMax; + if (shouldClamp || shouldAutoSelectMax) { + result[cardId] = maxStepIndex; + } + } + return result; +} + +/** + * Builds a new loadable whose runToLoadState represents a state where nothing + * is loaded, and runToSeries is preserved. + */ +function buildResetLoadable(loadable: TimeSeriesLoadable) { + const runToLoadState = mapObjectValues( + loadable.runToLoadState, + (loadState) => { + return loadState === DataLoadState.LOADING + ? DataLoadState.LOADING + : DataLoadState.NOT_LOADED; + } + ); + return {...loadable, runToLoadState}; +} + +/** + * Returns an identifier useful for comparing a card in storage with a real card + * with loaded metadata. + */ +function serializeCardUniqueInfo( + plugin: string, + tag: string, + runId?: string | null, + sample?: number +): string { + return JSON.stringify([plugin, tag, runId || '', sample]); +} + +const {initialState, reducers: routeContextReducer} = createRouteContextedState( + { + // Backend data. + tagMetadataLoaded: DataLoadState.NOT_LOADED, + tagMetadata: { + scalars: { + tagDescriptions: {}, + tagToRuns: {}, + }, + histograms: { + tagDescriptions: {}, + tagToRuns: {}, + }, + images: { + tagDescriptions: {}, + tagRunSampledInfo: {}, + }, + }, + + // Cards. + cardList: [], + cardToPinnedCopy: new Map(), + pinnedCardToOriginal: new Map(), + unresolvedImportedPinnedCards: [], + cardMetadataMap: {}, + cardStepIndex: {}, + + tagFilter: '', + tagGroupExpanded: new Map(), + } as MetricsRoutefulState, + + { + timeSeriesData: { + scalars: {}, + histograms: {}, + images: {}, + }, + settings: { + tooltipSort: TooltipSort.DEFAULT, + ignoreOutliers: true, + xAxisType: XAxisType.STEP, + scalarSmoothing: 0.6, + imageBrightnessInMilli: 1000, + imageContrastInMilli: 1000, + imageShowActualSize: false, + histogramMode: HistogramMode.OFFSET, + }, + visibleCards: new Set(), + } as MetricsRoutelessState, + + /** onRouteIdChanged */ + (state) => { + return { + ...state, + // Reset visible cards in case we resume a route that was left dirty. + // Since visibility tracking is async, the state may not have received + // 'exited card' updates when it was cached by the router. + visibleCards: new Set(), + }; + } +); + +const reducer = createReducer( + initialState, + on(stateRehydratedFromUrl, (state, {routeKind, partialState}) => { + if ( + routeKind !== RouteKind.EXPERIMENT && + routeKind !== RouteKind.COMPARE_EXPERIMENT + ) { + return state; + } + // The URL contains pinned cards + unresolved imported pins. Keep these sets + // mutually exclusive, and do not add duplicate any unresolved imported + // cards. + const serializedCardUniqueInfos = new Set(); + + // Visit existing pins. + for (const pinnedCardId of state.pinnedCardToOriginal.keys()) { + const {plugin, tag, runId, sample} = state.cardMetadataMap[pinnedCardId]; + serializedCardUniqueInfos.add( + serializeCardUniqueInfo(plugin, tag, runId, sample) + ); + } + + // We need to include previous unresolved imported pins, because the new + // hydrated state might not include them. For example, navigating from + // experiment A (with pins) --> B --> A, we want to ensure that rehydration + // does not drop the old unresolved pins on A. + const hydratedState = partialState as URLDeserializedState; + const unresolvedImportedPinnedCards = [] as CardUniqueInfo[]; + for (const card of [ + ...state.unresolvedImportedPinnedCards, + ...hydratedState.metrics.pinnedCards, + ]) { + const cardUniqueInfoString = serializeCardUniqueInfo( + card.plugin, + card.tag, + card.runId, + card.sample + ); + if (!serializedCardUniqueInfos.has(cardUniqueInfoString)) { + serializedCardUniqueInfos.add(cardUniqueInfoString); + unresolvedImportedPinnedCards.push(card); + } + } + + const resolvedResult = buildOrReturnStateWithUnresolvedImportedPins( + unresolvedImportedPinnedCards, + state.cardList, + state.cardMetadataMap, + state.cardToPinnedCopy, + state.pinnedCardToOriginal, + state.cardStepIndex + ); + return { + ...state, + ...resolvedResult, + }; + }), + on(coreActions.reload, coreActions.manualReload, (state) => { + const nextTagMetadataLoaded = + state.tagMetadataLoaded === DataLoadState.LOADING + ? DataLoadState.LOADING + : DataLoadState.NOT_LOADED; + + const nextTimeSeriesData = mapObjectValues( + state.timeSeriesData, + (pluginData, plugin) => { + return mapObjectValues(pluginData, (tagData) => { + if (!isSampledPlugin(plugin as PluginType)) { + return buildResetLoadable(tagData); + } + return mapObjectValues(tagData, (sampleData) => { + return buildResetLoadable(sampleData); + }); + }); + } + ); + + return { + ...state, + tagMetadataLoaded: nextTagMetadataLoaded, + timeSeriesData: nextTimeSeriesData, + }; + }), + on( + actions.metricsTagMetadataRequested, + (state: MetricsState): MetricsState => { + return { + ...state, + tagMetadataLoaded: DataLoadState.LOADING, + }; + } + ), + on( + actions.metricsTagMetadataFailed, + (state: MetricsState): MetricsState => { + return { + ...state, + tagMetadataLoaded: DataLoadState.FAILED, + }; + } + ), + on( + actions.metricsTagMetadataLoaded, + ( + state: MetricsState, + {tagMetadata}: {tagMetadata: DataSourceTagMetadata} + ): MetricsState => { + const nextTagMetadata: TagMetadata = { + scalars: buildPluginTagData(tagMetadata, PluginType.SCALARS), + histograms: buildPluginTagData(tagMetadata, PluginType.HISTOGRAMS), + images: tagMetadata[PluginType.IMAGES], + }; + + // Carry over pre-existing card metadata, even if the new tag + // metadata does not include it. + const nextCardMetadataMap = {...state.cardMetadataMap}; + const nextCardMetadataList = buildCardMetadataList(nextTagMetadata); + const newCardIds = []; + + // Create new cards for unseen metadata. + for (const cardMetadata of nextCardMetadataList) { + const cardId = getCardId(cardMetadata); + if (!state.cardMetadataMap.hasOwnProperty(cardId)) { + nextCardMetadataMap[cardId] = cardMetadata; + newCardIds.push(cardId); + } + } + + const nextCardList = [...state.cardList, ...newCardIds]; + + const resolvedResult = buildOrReturnStateWithUnresolvedImportedPins( + state.unresolvedImportedPinnedCards, + newCardIds, + nextCardMetadataMap, + state.cardToPinnedCopy, + state.pinnedCardToOriginal, + state.cardStepIndex + ); + + return { + ...state, + ...resolvedResult, + tagMetadataLoaded: DataLoadState.LOADED, + tagMetadata: nextTagMetadata, + cardList: nextCardList, + }; + } + ), + on(actions.metricsTagFilterChanged, (state, {tagFilter}) => { + return { + ...state, + tagFilter, + }; + }), + on(actions.metricsChangeTooltipSort, (state, {sort}) => { + return { + ...state, + settings: { + ...state.settings, + tooltipSort: sort, + }, + }; + }), + on(actions.metricsToggleIgnoreOutliers, (state) => { + return { + ...state, + settings: { + ...state.settings, + ignoreOutliers: !state.settings.ignoreOutliers, + }, + }; + }), + on(actions.metricsChangeXAxisType, (state, {xAxisType}) => { + return { + ...state, + settings: { + ...state.settings, + xAxisType, + }, + }; + }), + on(actions.metricsChangeScalarSmoothing, (state, {smoothing}) => { + return { + ...state, + settings: { + ...state.settings, + scalarSmoothing: smoothing, + }, + }; + }), + on(actions.metricsChangeImageBrightness, (state, {brightnessInMilli}) => { + return { + ...state, + settings: { + ...state.settings, + imageBrightnessInMilli: brightnessInMilli, + }, + }; + }), + on(actions.metricsChangeImageContrast, (state, {contrastInMilli}) => { + return { + ...state, + settings: { + ...state.settings, + imageContrastInMilli: contrastInMilli, + }, + }; + }), + on(actions.metricsResetImageBrightness, (state) => { + return { + ...state, + settings: { + ...state.settings, + imageBrightnessInMilli: initialState.settings.imageBrightnessInMilli, + }, + }; + }), + on(actions.metricsResetImageContrast, (state) => { + return { + ...state, + settings: { + ...state.settings, + imageContrastInMilli: initialState.settings.imageContrastInMilli, + }, + }; + }), + on(actions.metricsToggleImageShowActualSize, (state) => { + return { + ...state, + settings: { + ...state.settings, + imageShowActualSize: !state.settings.imageShowActualSize, + }, + }; + }), + on(actions.metricsChangeHistogramMode, (state, {histogramMode}) => { + return { + ...state, + settings: { + ...state.settings, + histogramMode, + }, + }; + }), + on( + actions.multipleTimeSeriesRequested, + ( + state: MetricsState, + {requests}: {requests: TimeSeriesRequest[]} + ): MetricsState => { + if (!requests.length) { + return state; + } + + // TODO(psybuzz): the `experimentIds` field on requests is currently + // ignored. Ideally this reducer should support requesting a + // subset of all experiments. + const nextTimeSeriesData = {...state.timeSeriesData}; + for (const request of requests) { + const {plugin, tag, sample} = request; + nextTimeSeriesData[plugin] = createPluginDataWithLoadable( + nextTimeSeriesData, + plugin, + tag, + sample + ) as {}; + + const loadable = getTimeSeriesLoadable( + nextTimeSeriesData, + plugin, + tag, + sample + )!; + const runIds = isSingleRunTimeSeriesRequest(request) + ? [request.runId] + : getRunIds(state.tagMetadata, plugin, tag, sample); + loadable.runToLoadState = createRunToLoadState( + DataLoadState.LOADING, + runIds, + loadable.runToLoadState + ); + } + return {...state, timeSeriesData: nextTimeSeriesData}; + } + ), + on( + actions.fetchTimeSeriesFailed, + ( + state: MetricsState, + {request}: {request: TimeSeriesRequest} + ): MetricsState => { + const nextTimeSeriesData = {...state.timeSeriesData}; + const {plugin, tag, sample} = request; + nextTimeSeriesData[plugin] = createPluginDataWithLoadable( + nextTimeSeriesData, + plugin, + tag, + sample + ) as {}; + + const loadable = getTimeSeriesLoadable( + nextTimeSeriesData, + plugin, + tag, + sample + )!; + const runIds = isSingleRunTimeSeriesRequest(request) + ? [request.runId] + : getRunIds(state.tagMetadata, plugin, tag, sample); + loadable.runToLoadState = createRunToLoadState( + DataLoadState.FAILED, + runIds, + loadable.runToLoadState + ); + return {...state, timeSeriesData: nextTimeSeriesData}; + } + ), + on( + actions.fetchTimeSeriesLoaded, + ( + state: MetricsState, + {response}: {response: TimeSeriesResponse} + ): MetricsState => { + // Update time series. + const nextTimeSeriesData = {...state.timeSeriesData}; + const {plugin, tag, runId, sample} = response; + nextTimeSeriesData[plugin] = createPluginDataWithLoadable( + nextTimeSeriesData, + plugin, + tag, + sample + ) as {}; + + const loadable = getTimeSeriesLoadable( + nextTimeSeriesData, + plugin, + tag, + sample + )!; + if (isFailedTimeSeriesResponse(response)) { + const runIds = runId + ? [runId] + : getRunIds(state.tagMetadata, plugin, tag, sample); + loadable.runToLoadState = createRunToLoadState( + DataLoadState.FAILED, + runIds, + loadable.runToLoadState + ); + } else { + const runToSeries = response.runToSeries; + loadable.runToSeries = {...loadable.runToSeries}; + loadable.runToLoadState = {...loadable.runToLoadState}; + for (const runId in runToSeries) { + if (runToSeries.hasOwnProperty(runId)) { + loadable.runToSeries[runId] = runToSeries[runId]; + loadable.runToLoadState[runId] = DataLoadState.LOADED; + } + } + } + + const nextState = { + ...state, + timeSeriesData: nextTimeSeriesData, + cardStepIndex: buildNormalizedCardStepIndexMap( + state.cardMetadataMap, + state.cardStepIndex, + nextTimeSeriesData, + state.timeSeriesData + ), + }; + return nextState; + } + ), + on(actions.cardStepSliderChanged, (state, {cardId, stepIndex}) => { + const maxStepIndex = getMaxStepIndex( + cardId, + state.cardMetadataMap, + state.timeSeriesData + ); + let nextStepIndex: number | null = stepIndex; + if (maxStepIndex === null) { + nextStepIndex = null; + } else if (stepIndex > maxStepIndex) { + nextStepIndex = maxStepIndex; + } + return { + ...state, + cardStepIndex: {...state.cardStepIndex, [cardId]: nextStepIndex}, + }; + }), + on(actions.metricsTagGroupExpansionChanged, (state, {tagGroup}) => { + const tagGroupExpanded = new Map(state.tagGroupExpanded); + tagGroupExpanded.set(tagGroup, !tagGroupExpanded.get(tagGroup)); + + return {...state, tagGroupExpanded}; + }), + on(actions.cardVisibilityChanged, (state, {enteredCards, exitedCards}) => { + if (enteredCards.size === 0 && exitedCards.size === 0) { + return state; + } + + const visibleCards = new Set(state.visibleCards); + enteredCards.forEach((cardId) => { + visibleCards.add(cardId); + }); + exitedCards.forEach((cardId) => { + visibleCards.delete(cardId); + + if (enteredCards.has(cardId)) { + throw new Error( + `A 'cardVisibilityChanged' with an invalid ` + + `payload contains overlapping sets` + ); + } + }); + return {...state, visibleCards}; + }), + on(actions.cardPinStateToggled, (state, {cardId}) => { + const isPinnedCopy = state.pinnedCardToOriginal.has(cardId); + const shouldPin = isPinnedCopy + ? false + : !state.cardToPinnedCopy.has(cardId); + + if (shouldPin && !canCreateNewPins(state)) { + return state; + } + + let nextCardToPinnedCopy = new Map(state.cardToPinnedCopy); + let nextPinnedCardToOriginal = new Map(state.pinnedCardToOriginal); + let nextCardMetadataMap = {...state.cardMetadataMap}; + let nextCardStepIndexMap = {...state.cardStepIndex}; + + if (isPinnedCopy) { + const originalCardId = state.pinnedCardToOriginal.get(cardId); + nextCardToPinnedCopy.delete(originalCardId!); + nextPinnedCardToOriginal.delete(cardId); + delete nextCardMetadataMap[cardId]; + delete nextCardStepIndexMap[cardId]; + } else { + if (shouldPin) { + const resolvedResult = buildOrReturnStateWithPinnedCopy( + cardId, + nextCardToPinnedCopy, + nextPinnedCardToOriginal, + nextCardStepIndexMap, + nextCardMetadataMap + ); + nextCardToPinnedCopy = resolvedResult.cardToPinnedCopy; + nextPinnedCardToOriginal = resolvedResult.pinnedCardToOriginal; + nextCardMetadataMap = resolvedResult.cardMetadataMap; + nextCardStepIndexMap = resolvedResult.cardStepIndex; + } else { + const pinnedCardId = state.cardToPinnedCopy.get(cardId)!; + nextCardToPinnedCopy.delete(cardId); + nextPinnedCardToOriginal.delete(pinnedCardId); + delete nextCardMetadataMap[pinnedCardId]; + delete nextCardStepIndexMap[pinnedCardId]; + } + } + return { + ...state, + cardMetadataMap: nextCardMetadataMap, + cardStepIndex: nextCardStepIndexMap, + cardToPinnedCopy: nextCardToPinnedCopy, + pinnedCardToOriginal: nextPinnedCardToOriginal, + }; + }) +); + +export function reducers(state: MetricsState, action: Action) { + return composeReducers(reducer, routeContextReducer)(state, action); +} + +function buildPluginTagData( + tagMetadata: DataSourceTagMetadata, + pluginType: NonSampledPluginType +): NonSampledPluginTagMetadata { + return { + tagDescriptions: tagMetadata[pluginType].tagDescriptions, + tagToRuns: buildTagToRuns(tagMetadata[pluginType].runTagInfo), + }; +} + +/** + * Takes a run-to-tag map and inverts it. + */ +function buildTagToRuns(runTagInfo: {[run: string]: string[]}) { + const tagToRuns: {[tag: string]: string[]} = {}; + for (const run in runTagInfo) { + for (const tag of runTagInfo[run]) { + tagToRuns[tag] = [...(tagToRuns[tag] || []), run]; + } + } + return tagToRuns; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_reducers_test.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_reducers_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..e226341aed0cb06690b2c29bbbc39ed27c028614 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_reducers_test.ts @@ -0,0 +1,1598 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as coreActions from '../../core/actions'; +import {DataLoadState} from '../../types/data'; + +import * as routingActions from '../../app_routing/actions'; +import {buildRoute} from '../../app_routing/testing'; +import {RouteKind} from '../../app_routing/types'; +import * as actions from '../actions'; +import { + PluginType, + ScalarStepDatum, + TagMetadata as DataSourceTagMetadata, +} from '../data_source'; +import { + buildDataSourceTagMetadata, + buildMetricsSettingsState, + buildMetricsState, + buildTagMetadata, + buildTimeSeriesData, + createCardMetadata, + createHistogramStepData, + createImageStepData, + createScalarStepData, + createTimeSeriesData, +} from '../testing'; +import { + CardId, + CardMetadata, + HistogramMode, + TooltipSort, + XAxisType, +} from '../types'; + +import {reducers} from './metrics_reducers'; +import {getCardId, getPinnedCardId} from './metrics_store_internal_utils'; +import { + CardMetadataMap, + MetricsState, + RunToLoadState, + TagMetadata, +} from './metrics_types'; + +function createScalarCardMetadata(): CardMetadata { + return {plugin: PluginType.SCALARS, tag: 'tagA', runId: null}; +} + +/** + * Creates a fake array of time series data of the desired length. + */ +function createScalarStepSeries(length: number): ScalarStepDatum[] { + const series = []; + for (let i = 0; i < length; i++) { + series.push({step: i, wallTime: i + 100, value: Math.random()}); + } + return series; +} + +describe('metrics reducers', () => { + describe('loading tag metadata', () => { + const tagMetadataSample: { + backendForm: DataSourceTagMetadata; + storeForm: TagMetadata; + } = { + backendForm: { + scalars: { + tagDescriptions: {tagA: 'Describing tagA'}, + runTagInfo: { + test: ['tagB'], + train: ['tagA', 'tagB'], + }, + }, + histograms: { + tagDescriptions: {histogramTagA: 'Describing histogram tagA'}, + runTagInfo: { + test: ['histogramTagA'], + train: ['histogramTagA'], + }, + }, + images: { + tagDescriptions: {imageTagA: 'Describing image tagA'}, + tagRunSampledInfo: { + imageTagA: { + test: {maxSamplesPerStep: 1}, + train: {maxSamplesPerStep: 2}, + }, + imageTagB: {test: {maxSamplesPerStep: 3}}, + }, + }, + }, + storeForm: { + scalars: { + tagDescriptions: {tagA: 'Describing tagA'}, + tagToRuns: { + tagA: ['train'], + tagB: ['test', 'train'], + }, + }, + histograms: { + tagDescriptions: {histogramTagA: 'Describing histogram tagA'}, + tagToRuns: {histogramTagA: ['test', 'train']}, + }, + images: { + tagDescriptions: {imageTagA: 'Describing image tagA'}, + tagRunSampledInfo: { + imageTagA: { + test: {maxSamplesPerStep: 1}, + train: {maxSamplesPerStep: 2}, + }, + imageTagB: {test: {maxSamplesPerStep: 3}}, + }, + }, + }, + }; + + [ + { + action: actions.metricsTagMetadataRequested(), + actionName: 'metricsTagMetadataRequested', + beforeState: buildMetricsState({ + tagMetadataLoaded: DataLoadState.NOT_LOADED, + }), + expectedState: buildMetricsState({ + tagMetadataLoaded: DataLoadState.LOADING, + tagMetadata: buildTagMetadata(), + }), + }, + { + action: actions.metricsTagMetadataFailed(), + actionName: 'metricsTagMetadataFailed', + beforeState: buildMetricsState({ + tagMetadataLoaded: DataLoadState.LOADING, + tagMetadata: tagMetadataSample.storeForm, + }), + expectedState: buildMetricsState({ + tagMetadataLoaded: DataLoadState.FAILED, + tagMetadata: tagMetadataSample.storeForm, + }), + }, + { + action: actions.metricsTagMetadataLoaded({ + tagMetadata: tagMetadataSample.backendForm, + }), + actionName: 'metricsTagMetadataLoaded', + beforeState: buildMetricsState({ + tagMetadataLoaded: DataLoadState.LOADING, + }), + expectedState: buildMetricsState({ + tagMetadataLoaded: DataLoadState.LOADED, + tagMetadata: tagMetadataSample.storeForm, + }), + }, + ].forEach((metaSpec) => { + describe(metaSpec.actionName, () => { + it(`sets the loadState on ${metaSpec.actionName}`, () => { + const nextState = reducers(metaSpec.beforeState, metaSpec.action); + expect(nextState.tagMetadataLoaded).toEqual( + metaSpec.expectedState.tagMetadataLoaded + ); + expect(nextState.tagMetadata).toEqual( + metaSpec.expectedState.tagMetadata + ); + }); + }); + }); + + it('sets cardMetadataMap and cardList on tag metadata loaded', () => { + const beforeState = buildMetricsState(); + const tagMetadata: DataSourceTagMetadata = { + scalars: { + tagDescriptions: {}, + runTagInfo: {run1: ['tagA']}, + }, + histograms: { + tagDescriptions: {}, + runTagInfo: {run2: ['tagB']}, + }, + images: { + tagDescriptions: {}, + tagRunSampledInfo: { + tagC: {run3: {maxSamplesPerStep: 3}}, + }, + }, + }; + + const action = actions.metricsTagMetadataLoaded({tagMetadata}); + const nextState = reducers(beforeState, action); + + const expectedCardMetadataList = [ + {plugin: PluginType.SCALARS, tag: 'tagA', runId: null}, + {plugin: PluginType.HISTOGRAMS, tag: 'tagB', runId: 'run2'}, + {plugin: PluginType.IMAGES, tag: 'tagC', runId: 'run3', sample: 0}, + {plugin: PluginType.IMAGES, tag: 'tagC', runId: 'run3', sample: 1}, + {plugin: PluginType.IMAGES, tag: 'tagC', runId: 'run3', sample: 2}, + ]; + const expectedCardMetadataMap: CardMetadataMap = {}; + for (const cardMetadata of expectedCardMetadataList) { + expectedCardMetadataMap[getCardId(cardMetadata)] = cardMetadata; + } + expect(nextState.cardMetadataMap).toEqual(expectedCardMetadataMap); + expect(nextState.cardList).toEqual(Object.keys(expectedCardMetadataMap)); + }); + + it('does not add pinned copies to cardList on tag metadata loaded', () => { + const cardMetadata = { + plugin: PluginType.HISTOGRAMS, + tag: 'tagA', + runId: 'run1', + }; + const cardId = getCardId(cardMetadata); + const pinnedCopyId = getPinnedCardId(cardId); + const beforeState = buildMetricsState({ + cardMetadataMap: { + [cardId]: cardMetadata, + [pinnedCopyId]: cardMetadata, + }, + cardList: [cardId], + cardToPinnedCopy: new Map([[cardId, pinnedCopyId]]), + }); + const action = actions.metricsTagMetadataLoaded({ + tagMetadata: { + ...buildDataSourceTagMetadata(), + [PluginType.HISTOGRAMS]: { + tagDescriptions: {}, + runTagInfo: {run1: ['tagA']}, + }, + }, + }); + const nextState = reducers(beforeState, action); + + const expectedState = buildMetricsState({ + cardMetadataMap: { + [cardId]: cardMetadata, + [pinnedCopyId]: cardMetadata, + }, + cardList: [cardId], + cardToPinnedCopy: new Map([[cardId, pinnedCopyId]]), + }); + expect(nextState.cardMetadataMap).toEqual(expectedState.cardMetadataMap); + expect(nextState.cardList).toEqual(expectedState.cardList); + expect(nextState.cardToPinnedCopy).toEqual( + expectedState.cardToPinnedCopy + ); + }); + + it('resolves imported pins by automatically creating pinned copies', () => { + const fakeCardMetadata = { + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }; + const stepCount = 10; + const expectedCardId = getCardId(fakeCardMetadata); + const expectedPinnedCopyId = getPinnedCardId(expectedCardId); + const beforeState = buildMetricsState({ + cardMetadataMap: {}, + cardList: [], + cardStepIndex: { + [expectedCardId]: stepCount - 1, + }, + cardToPinnedCopy: new Map(), + pinnedCardToOriginal: new Map(), + unresolvedImportedPinnedCards: [ + {plugin: PluginType.SCALARS, tag: 'tagA'}, + {plugin: PluginType.SCALARS, tag: 'tagB'}, + ], + }); + const nextState = reducers( + beforeState, + actions.metricsTagMetadataLoaded({ + tagMetadata: { + ...buildDataSourceTagMetadata(), + [PluginType.SCALARS]: { + tagDescriptions: {}, + runTagInfo: {run1: ['tagA']}, + }, + }, + }) + ); + + const { + cardMetadataMap, + cardList, + cardStepIndex, + cardToPinnedCopy, + pinnedCardToOriginal, + unresolvedImportedPinnedCards, + } = nextState; + expect({ + cardMetadataMap, + cardList, + cardStepIndex, + cardToPinnedCopy, + pinnedCardToOriginal, + unresolvedImportedPinnedCards, + }).toEqual({ + cardMetadataMap: { + [expectedCardId]: fakeCardMetadata, + [expectedPinnedCopyId]: fakeCardMetadata, + }, + cardList: [expectedCardId], + cardStepIndex: { + [expectedCardId]: stepCount - 1, + [expectedPinnedCopyId]: stepCount - 1, + }, + cardToPinnedCopy: new Map([[expectedCardId, expectedPinnedCopyId]]), + pinnedCardToOriginal: new Map([[expectedPinnedCopyId, expectedCardId]]), + unresolvedImportedPinnedCards: [ + {plugin: PluginType.SCALARS, tag: 'tagB'}, + ], + }); + }); + + it('does not resolve mismatching imported pins', () => { + const beforeState = buildMetricsState({ + cardToPinnedCopy: new Map(), + pinnedCardToOriginal: new Map(), + unresolvedImportedPinnedCards: [ + {plugin: PluginType.IMAGES, tag: 'tagA', runId: 'run1', sample: 5}, + {plugin: PluginType.IMAGES, tag: 'tagB', runId: 'run1', sample: 5}, + ], + }); + const nextState = reducers( + beforeState, + actions.metricsTagMetadataLoaded({ + tagMetadata: { + ...buildDataSourceTagMetadata(), + [PluginType.IMAGES]: { + tagDescriptions: {}, + tagRunSampledInfo: { + tagA: { + // Matching run, but incorrect sample. + run1: {maxSamplesPerStep: 1}, + }, + tagB: { + // Matching tag, sample, but incorrect run. + run10: {maxSamplesPerStep: 10}, + }, + }, + }, + }, + }) + ); + + expect(nextState.cardToPinnedCopy).toEqual(new Map()); + expect(nextState.pinnedCardToOriginal).toEqual(new Map()); + expect(nextState.unresolvedImportedPinnedCards).toEqual([ + {plugin: PluginType.IMAGES, tag: 'tagA', runId: 'run1', sample: 5}, + {plugin: PluginType.IMAGES, tag: 'tagB', runId: 'run1', sample: 5}, + ]); + }); + + it('does not drop existing data', () => { + const beforeState = { + ...buildMetricsState(), + cardMetadataMap: {'': createScalarCardMetadata()}, + }; + const origCardMetadata = beforeState.cardMetadataMap['']; + const tagMetadata: DataSourceTagMetadata = { + ...buildDataSourceTagMetadata(), + scalars: { + tagDescriptions: {}, + runTagInfo: {run1: ['tagA']}, + }, + }; + + const action = actions.metricsTagMetadataLoaded({tagMetadata}); + const nextState = reducers(beforeState, action); + + expect(nextState.cardMetadataMap['']).toEqual( + createScalarCardMetadata() + ); + expect(nextState.cardMetadataMap['']).toBe(origCardMetadata); + }); + }); + + describe('mark tags as stale', () => { + const reloadSpecs = [ + {reloadAction: coreActions.manualReload, reloadName: 'manual reload'}, + {reloadAction: coreActions.reload, reloadName: 'auto reload'}, + ]; + for (const {reloadAction, reloadName} of reloadSpecs) { + describe(`on ${reloadName}`, () => { + it(`preserves existing data`, () => { + const prevState = buildMetricsState({ + cardMetadataMap: {'': createScalarCardMetadata()}, + tagMetadata: buildTagMetadata(), + timeSeriesData: { + ...createTimeSeriesData(), + [PluginType.SCALARS]: { + tagA: { + runToSeries: {run1: createScalarStepData()}, + runToLoadState: {run1: DataLoadState.FAILED}, + }, + }, + }, + }); + const expectedData = { + cardMetadataMap: {'': createScalarCardMetadata()}, + tagMetadata: buildTagMetadata(), + timeSeriesData: { + ...createTimeSeriesData(), + [PluginType.SCALARS]: { + tagA: { + runToSeries: {run1: createScalarStepData()}, + runToLoadState: {run1: DataLoadState.FAILED}, + }, + }, + }, + }; + + const nextState = reducers(prevState, reloadAction); + + expect(nextState.cardMetadataMap).toBe(prevState.cardMetadataMap); + expect(nextState.cardMetadataMap).toEqual( + expectedData.cardMetadataMap + ); + expect(nextState.tagMetadata).toBe(prevState.tagMetadata); + expect(nextState.tagMetadata).toEqual(expectedData.tagMetadata); + + // For time series data, we expect the 'runToSeries' part to be the + // same. + expect( + nextState.timeSeriesData[PluginType.SCALARS]['tagA'].runToSeries + ).toBe( + prevState.timeSeriesData[PluginType.SCALARS]['tagA'].runToSeries + ); + expect( + nextState.timeSeriesData[PluginType.SCALARS]['tagA'].runToSeries + ).toEqual( + expectedData.timeSeriesData[PluginType.SCALARS]['tagA'].runToSeries + ); + }); + + it(`marks loaded tag metadata as stale`, () => { + const prevState = buildMetricsState({ + tagMetadataLoaded: DataLoadState.LOADED, + tagMetadata: buildTagMetadata(), + }); + + const nextState = reducers(prevState, reloadAction); + expect(nextState.tagMetadataLoaded).toBe(DataLoadState.NOT_LOADED); + }); + + it(`does not change tag load state if already loading`, () => { + const prevState = buildMetricsState({ + tagMetadataLoaded: DataLoadState.LOADING, + tagMetadata: buildTagMetadata(), + }); + + const nextState = reducers(prevState, reloadAction); + expect(nextState.tagMetadataLoaded).toBe(DataLoadState.LOADING); + }); + + it( + `marks loaded time series as stale unless already ` + `loading`, + () => { + const prevState = buildMetricsState({ + timeSeriesData: { + ...createTimeSeriesData(), + [PluginType.SCALARS]: { + tagA: { + runToSeries: { + run1: createScalarStepData(), + run2: createScalarStepData(), + }, + runToLoadState: { + run1: DataLoadState.LOADED, + run2: DataLoadState.LOADING, + }, + }, + }, + }, + }); + + const nextState = reducers(prevState, reloadAction); + const runToLoadState = + nextState.timeSeriesData[PluginType.SCALARS]['tagA'] + .runToLoadState; + expect(runToLoadState).toEqual({ + run1: DataLoadState.NOT_LOADED, + run2: DataLoadState.LOADING, + }); + } + ); + }); + } + }); + + describe('route id changes', () => { + it('resets data when mounting a new route', () => { + const prevState = buildMetricsState({ + visibleCards: new Set(['card1', 'card2']), + }); + + const navigateFrom1to2 = routingActions.navigated({ + before: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'exp1'}, + }), + after: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'exp2'}, + }), + }); + const navigateFrom2to1 = routingActions.navigated({ + before: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'exp2'}, + }), + after: buildRoute({ + routeKind: RouteKind.EXPERIMENT, + params: {experimentId: 'exp1'}, + }), + }); + + let nextState = reducers(prevState, navigateFrom1to2); + nextState = reducers(nextState, navigateFrom2to1); + + const expectedState = buildMetricsState({ + visibleCards: new Set(), + }); + expect(nextState.visibleCards).toEqual(expectedState.visibleCards); + }); + }); + + describe('settings', () => { + it('changes tooltipSort on metricsChangeTooltipSort', () => { + const prevState = buildMetricsState({ + settings: buildMetricsSettingsState({ + tooltipSort: TooltipSort.ASCENDING, + }), + }); + const nextState = reducers( + prevState, + actions.metricsChangeTooltipSort({sort: TooltipSort.NEAREST}) + ); + expect(nextState.settings.tooltipSort).toBe(TooltipSort.NEAREST); + }); + + it('changes ignoreOutliers on metricsToggleIgnoreOutliers', () => { + const prevState = buildMetricsState({ + settings: buildMetricsSettingsState({ + ignoreOutliers: true, + }), + }); + const nextState = reducers( + prevState, + actions.metricsToggleIgnoreOutliers() + ); + expect(nextState.settings.ignoreOutliers).toBe(false); + }); + + it('changes xAxisType on metricsChangeXAxisType', () => { + const prevState = buildMetricsState({ + settings: buildMetricsSettingsState({ + xAxisType: XAxisType.STEP, + }), + }); + const nextState = reducers( + prevState, + actions.metricsChangeXAxisType({xAxisType: XAxisType.WALL_TIME}) + ); + expect(nextState.settings.xAxisType).toBe(XAxisType.WALL_TIME); + }); + + it('changes scalarSmoothing on metricsChangeScalarSmoothing', () => { + const prevState = buildMetricsState({ + settings: buildMetricsSettingsState({ + scalarSmoothing: 0.3, + }), + }); + const nextState = reducers( + prevState, + actions.metricsChangeScalarSmoothing({smoothing: 0.1}) + ); + expect(nextState.settings.scalarSmoothing).toBe(0.1); + }); + + it('changes imageBrightnessInMilli on metricsChangeImageBrightness', () => { + const prevState = buildMetricsState({ + settings: buildMetricsSettingsState({ + imageBrightnessInMilli: 300, + }), + }); + const nextState = reducers( + prevState, + actions.metricsChangeImageBrightness({brightnessInMilli: 1000}) + ); + expect(nextState.settings.imageBrightnessInMilli).toBe(1000); + }); + + it('changes imageContrastInMilli on metricsChangeImageContrast', () => { + const prevState = buildMetricsState({ + settings: buildMetricsSettingsState({ + imageContrastInMilli: 200, + }), + }); + const nextState = reducers( + prevState, + actions.metricsChangeImageContrast({contrastInMilli: 500}) + ); + expect(nextState.settings.imageContrastInMilli).toBe(500); + }); + + it('resets imageBrightnessInMilli', () => { + const prevState = buildMetricsState({ + settings: buildMetricsSettingsState({ + imageBrightnessInMilli: 300, + }), + }); + const nextState = reducers( + prevState, + actions.metricsResetImageBrightness() + ); + expect(nextState.settings.imageBrightnessInMilli).toBe(1000); + }); + + it('resets imageContrastInMilli', () => { + const prevState = buildMetricsState({ + settings: buildMetricsSettingsState({ + imageContrastInMilli: 300, + }), + }); + const nextState = reducers( + prevState, + actions.metricsResetImageContrast() + ); + expect(nextState.settings.imageContrastInMilli).toBe(1000); + }); + + it('changes imageShowActualSize on metricsToggleImageShowActualSize', () => { + const prevState = buildMetricsState({ + settings: buildMetricsSettingsState({ + imageShowActualSize: true, + }), + }); + const nextState = reducers( + prevState, + actions.metricsToggleImageShowActualSize() + ); + expect(nextState.settings.imageShowActualSize).toBe(false); + }); + + it('changes histogramMode on metricsChangeHistogramMode', () => { + const prevState = buildMetricsState({ + settings: buildMetricsSettingsState({ + histogramMode: HistogramMode.OFFSET, + }), + }); + const nextState = reducers( + prevState, + actions.metricsChangeHistogramMode({ + histogramMode: HistogramMode.OVERLAY, + }) + ); + expect(nextState.settings.histogramMode).toBe(HistogramMode.OVERLAY); + }); + }); + + describe('loading time series data', () => { + it('updates store on fetch requested', () => { + const beforeState = buildMetricsState({ + tagMetadata: { + ...buildTagMetadata(), + scalars: { + tagDescriptions: {}, + tagToRuns: {tagA: ['exp1/run1', 'exp1/run2']}, + }, + }, + }); + const action = actions.multipleTimeSeriesRequested({ + requests: [ + {plugin: PluginType.SCALARS, tag: 'tagA', experimentIds: ['exp1']}, + ], + }); + const nextState = reducers(beforeState, action); + expect(nextState.timeSeriesData).toEqual({ + scalars: { + tagA: { + runToSeries: {}, + runToLoadState: { + 'exp1/run1': DataLoadState.LOADING, + 'exp1/run2': DataLoadState.LOADING, + }, + }, + }, + histograms: {}, + images: {}, + }); + }); + + it('updates store on fetch failure', () => { + const beforeState = buildMetricsState({ + tagMetadata: { + scalars: { + tagDescriptions: {}, + tagToRuns: {tagA: ['exp1/run1', 'exp1/run2']}, + }, + histograms: { + tagDescriptions: {}, + tagToRuns: {tagB: ['exp1/run1', 'exp1/run2']}, + }, + images: { + tagDescriptions: {}, + tagRunSampledInfo: { + tagC: { + 'exp1/run1': {maxSamplesPerStep: 1}, + 'exp1/run2': {maxSamplesPerStep: 2}, + }, + }, + }, + }, + }); + let nextState = reducers( + beforeState, + actions.fetchTimeSeriesFailed({ + request: { + plugin: PluginType.SCALARS, + tag: 'tagA', + experimentIds: ['exp1'], + }, + }) + ); + nextState = reducers( + nextState, + actions.fetchTimeSeriesFailed({ + request: { + plugin: PluginType.HISTOGRAMS, + tag: 'tagB', + runId: 'exp1/run1', + }, + }) + ); + nextState = reducers( + nextState, + actions.fetchTimeSeriesFailed({ + request: { + plugin: PluginType.IMAGES, + tag: 'tagC', + runId: 'exp1/run1', + sample: 0, + }, + }) + ); + expect(nextState.timeSeriesData).toEqual({ + scalars: { + tagA: { + runToSeries: {}, + runToLoadState: { + 'exp1/run1': DataLoadState.FAILED, + 'exp1/run2': DataLoadState.FAILED, + }, + }, + }, + histograms: { + tagB: { + runToSeries: {}, + runToLoadState: { + 'exp1/run1': DataLoadState.FAILED, + }, + }, + }, + images: { + tagC: { + 0: { + runToSeries: {}, + runToLoadState: { + 'exp1/run1': DataLoadState.FAILED, + }, + }, + }, + }, + }); + }); + + it('updates store on fetch loaded successfully', () => { + const beforeState = buildMetricsState({ + tagMetadata: { + scalars: { + tagDescriptions: {}, + tagToRuns: {tagA: ['run1', 'run2']}, + }, + histograms: { + tagDescriptions: {}, + tagToRuns: {tagB: ['run1', 'run2']}, + }, + images: { + tagDescriptions: {}, + tagRunSampledInfo: { + tagC: { + run1: {maxSamplesPerStep: 1}, + run2: {maxSamplesPerStep: 2}, + }, + }, + }, + }, + }); + + const sample = 9; + let nextState = reducers( + beforeState, + actions.fetchTimeSeriesLoaded({ + response: { + plugin: PluginType.SCALARS, + tag: 'tagA', + runToSeries: {run1: createScalarStepData()}, + }, + }) + ); + nextState = reducers( + nextState, + actions.fetchTimeSeriesLoaded({ + response: { + plugin: PluginType.HISTOGRAMS, + tag: 'tagB', + runId: 'run1', + runToSeries: {run1: createHistogramStepData()}, + }, + }) + ); + nextState = reducers( + nextState, + actions.fetchTimeSeriesLoaded({ + response: { + plugin: PluginType.IMAGES, + tag: 'tagC', + runId: 'run1', + sample, + runToSeries: {run1: createImageStepData()}, + }, + }) + ); + expect(nextState.timeSeriesData).toEqual({ + scalars: { + tagA: { + runToSeries: {run1: createScalarStepData()}, + runToLoadState: {run1: DataLoadState.LOADED}, + }, + }, + histograms: { + tagB: { + runToSeries: {run1: createHistogramStepData()}, + runToLoadState: {run1: DataLoadState.LOADED}, + }, + }, + images: { + tagC: { + [sample]: { + runToSeries: {run1: createImageStepData()}, + runToLoadState: {run1: DataLoadState.LOADED}, + }, + }, + }, + }); + }); + + it('updates store on fetch loaded with some errors', () => { + const beforeState = buildMetricsState({ + tagMetadata: { + scalars: { + tagDescriptions: {}, + tagToRuns: {tagA: ['run1', 'run2']}, + }, + histograms: { + tagDescriptions: {}, + tagToRuns: {tagB: ['run1', 'run2']}, + }, + images: { + tagDescriptions: {}, + tagRunSampledInfo: {tagC: {run1: {maxSamplesPerStep: 1}}}, + }, + }, + }); + const badSample = 9; + const goodResponses = [ + { + plugin: PluginType.HISTOGRAMS, + tag: 'tagB', + runId: 'run1', + runToSeries: {run1: createHistogramStepData()}, + }, + ]; + const badResponses = [ + {plugin: PluginType.SCALARS, tag: 'tagA', error: 'No data found'}, + { + plugin: PluginType.IMAGES, + tag: 'tagC', + runId: 'run1', + sample: badSample, + error: 'Invalid sample', + }, + ]; + let nextState = beforeState; + for (const response of [...goodResponses, ...badResponses]) { + nextState = reducers( + nextState, + actions.fetchTimeSeriesLoaded({response}) + ); + } + expect(nextState.timeSeriesData).toEqual({ + scalars: { + tagA: { + runToSeries: {}, + runToLoadState: { + run1: DataLoadState.FAILED, + run2: DataLoadState.FAILED, + }, + }, + }, + histograms: { + tagB: { + runToSeries: {run1: createHistogramStepData()}, + runToLoadState: {run1: DataLoadState.LOADED}, + }, + }, + images: { + tagC: { + [badSample]: { + runToSeries: {}, + runToLoadState: {run1: DataLoadState.FAILED}, + }, + }, + }, + }); + }); + + it('preserves store when load actions have no effect', () => { + const beforeState = buildMetricsState({ + timeSeriesData: createTimeSeriesData(), + }); + const nextState = reducers( + beforeState, + actions.multipleTimeSeriesRequested({requests: []}) + ); + + expect(nextState.timeSeriesData).toBe(beforeState.timeSeriesData); + expect(nextState.timeSeriesData).toEqual(createTimeSeriesData()); + }); + }); + + describe('card ui', () => { + function createScalarCardLoadedState( + cardId: CardId, + runToSeries: {[runId: string]: ScalarStepDatum[]}, + tag?: string + ) { + tag = tag || 'tagA'; + const runToLoadState: RunToLoadState = {}; + for (const run of Object.keys(runToSeries)) { + runToLoadState[run] = DataLoadState.LOADED; + } + + return buildMetricsState({ + timeSeriesData: { + scalars: {[tag]: {runToSeries, runToLoadState}}, + histograms: {}, + images: {}, + }, + cardMetadataMap: { + [cardId]: {plugin: PluginType.SCALARS, tag, runId: null}, + }, + }); + } + describe('step index changes via slider', () => { + it('updates to new step slider value within max time series', () => { + const shortLength = 3; + const runToSeries = { + shortRun: createScalarStepSeries(shortLength), + longRun: createScalarStepSeries(shortLength + 10), + }; + const beforeState = createScalarCardLoadedState('card1', runToSeries); + + const nextStepIndex = shortLength + 1; + const action = actions.cardStepSliderChanged({ + cardId: 'card1', + stepIndex: nextStepIndex, + }); + const nextState = reducers(beforeState, action); + expect(nextState.cardStepIndex).toEqual({card1: nextStepIndex}); + }); + + it('slider value clamps to time series length', () => { + const runToSeries = { + run1: createScalarStepSeries(3), + }; + const beforeState = createScalarCardLoadedState('card1', runToSeries); + + const action = actions.cardStepSliderChanged({ + cardId: 'card1', + stepIndex: 100, + }); + const nextState = reducers(beforeState, action); + expect(nextState.cardStepIndex).toEqual({card1: 2}); + }); + + it('sets step index to null when there is no time series', () => { + const runToSeries = {}; + const beforeState = createScalarCardLoadedState('card1', runToSeries); + + const action = actions.cardStepSliderChanged({ + cardId: 'card1', + stepIndex: 100, + }); + const nextState = reducers(beforeState, action); + expect(nextState.cardStepIndex).toEqual({card1: null}); + }); + }); + + describe('time series updates affect steps (including pinned)', () => { + function stateWithPinnedCopy( + state: MetricsState, + originalCardId: CardId, + pinnedCardId: CardId + ) { + return { + ...state, + cardMetadataMap: { + ...state.cardMetadataMap, + [pinnedCardId]: state.cardMetadataMap[originalCardId], + }, + cardToPinnedCopy: new Map([[originalCardId, pinnedCardId]]), + pinnedCardToOriginal: new Map([[pinnedCardId, originalCardId]]), + }; + } + + it('does not alter existing non-max step indices', () => { + const runToSeries = {run1: createScalarStepSeries(5)}; + let beforeState = createScalarCardLoadedState( + 'card1', + runToSeries, + 'tagA' + ); + beforeState = { + ...stateWithPinnedCopy(beforeState, 'card1', 'pinnedCopy1'), + cardStepIndex: {card1: 2, pinnedCopy1: 2}, + }; + + const action = actions.fetchTimeSeriesLoaded({ + response: { + plugin: PluginType.SCALARS, + tag: 'tagA', + runToSeries: {run1: createScalarStepSeries(5)}, + }, + }); + const nextState = reducers(beforeState, action); + expect(nextState.cardStepIndex).toEqual({ + card1: 2, + pinnedCopy1: 2, + }); + }); + + it('updates existing step indices that were at the max', () => { + const stepCount = 5; + const runToSeries = {run1: createScalarStepSeries(stepCount)}; + let beforeState = createScalarCardLoadedState( + 'card1', + runToSeries, + 'tagA' + ); + beforeState = { + ...stateWithPinnedCopy(beforeState, 'card1', 'pinnedCopy1'), + cardStepIndex: {card1: stepCount - 1, pinnedCopy1: stepCount - 1}, + }; + + const newStepCount = 10; + const action = actions.fetchTimeSeriesLoaded({ + response: { + plugin: PluginType.SCALARS, + tag: 'tagA', + runToSeries: {run1: createScalarStepSeries(newStepCount)}, + }, + }); + const nextState = reducers(beforeState, action); + expect(nextState.cardStepIndex).toEqual({ + card1: newStepCount - 1, + pinnedCopy1: newStepCount - 1, + }); + }); + + it('clamps step index to max time series length', () => { + const runToSeries = { + run1: createScalarStepSeries(5), + run2: createScalarStepSeries(10), + }; + let beforeState = createScalarCardLoadedState( + 'card1', + runToSeries, + 'tagA' + ); + beforeState = { + ...stateWithPinnedCopy(beforeState, 'card1', 'pinnedCopy1'), + cardStepIndex: {card1: 9, pinnedCopy1: 9}, + }; + + const action = actions.fetchTimeSeriesLoaded({ + response: { + plugin: PluginType.SCALARS, + tag: 'tagA', + runToSeries: { + run1: createScalarStepSeries(1), + run2: createScalarStepSeries(3), + }, + }, + }); + const nextState = reducers(beforeState, action); + expect(nextState.cardStepIndex).toEqual({ + card1: 2, + pinnedCopy1: 2, + }); + }); + + it('auto-selects step index if it was missing', () => { + const runToSeries = {}; + let beforeState = createScalarCardLoadedState( + 'card1', + runToSeries, + 'tagA' + ); + beforeState = { + ...stateWithPinnedCopy(beforeState, 'card1', 'pinnedCopy1'), + cardStepIndex: {}, + }; + + const action = actions.fetchTimeSeriesLoaded({ + response: { + plugin: PluginType.SCALARS, + tag: 'tagA', + runToSeries: { + run1: createScalarStepSeries(1), + run2: createScalarStepSeries(3), + }, + }, + }); + const nextState = reducers(beforeState, action); + expect(nextState.cardStepIndex).toEqual({ + card1: 2, + pinnedCopy1: 2, + }); + }); + + it('sets step index to null if time series is empty', () => { + const runToSeries = {}; + let beforeState = createScalarCardLoadedState( + 'card1', + runToSeries, + 'tagA' + ); + beforeState = { + ...stateWithPinnedCopy(beforeState, 'card1', 'pinnedCopy1'), + cardStepIndex: {card1: 5, pinnedCopy1: 5}, + }; + + const action = actions.fetchTimeSeriesLoaded({ + response: { + plugin: PluginType.SCALARS, + tag: 'tagA', + runToSeries: {}, + }, + }); + const nextState = reducers(beforeState, action); + expect(nextState.cardStepIndex).toEqual({ + card1: null, + pinnedCopy1: null, + }); + }); + }); + }); + + describe('card visibility', () => { + it('no-ops when nothing is changed', () => { + const beforeState = buildMetricsState({ + visibleCards: new Set(['card1']), + }); + + const action = actions.cardVisibilityChanged({ + enteredCards: new Set(), + exitedCards: new Set(), + }); + const nextState = reducers(beforeState, action); + expect(nextState.visibleCards).toEqual(new Set(['card1'])); + expect(nextState).toBe(beforeState); + }); + + it('handles bad payloads', () => { + const beforeState = buildMetricsState({ + visibleCards: new Set(['card1']), + }); + + const action = actions.cardVisibilityChanged({ + enteredCards: new Set(['duplicateCard']), + exitedCards: new Set(['duplicateCard']), + }); + let nextState = beforeState; + expect(() => { + nextState = reducers(beforeState, action); + }).toThrow(); + expect(nextState).toBe(beforeState); + }); + + it('handles adding and removing cards', () => { + const beforeState = buildMetricsState({ + visibleCards: new Set(['existingCard1', 'existingCard2']), + }); + + const action = actions.cardVisibilityChanged({ + enteredCards: new Set(['existingCard1', 'newCard1']), + exitedCards: new Set(['existingCard2', 'newCard2']), + }); + const nextState = reducers(beforeState, action); + expect(nextState.visibleCards).toEqual( + new Set(['existingCard1', 'newCard1']) + ); + }); + }); + + describe('cardPinStateToggled', () => { + it('unpins a pinned copy', () => { + const beforeState = buildMetricsState({ + cardMetadataMap: { + card1: createScalarCardMetadata(), + pinnedCopy1: createScalarCardMetadata(), + }, + cardList: ['card1'], + cardStepIndex: { + card1: 10, + pinnedCopy1: 20, + }, + cardToPinnedCopy: new Map([['card1', 'pinnedCopy1']]), + pinnedCardToOriginal: new Map([['pinnedCopy1', 'card1']]), + }); + const nextState = reducers( + beforeState, + actions.cardPinStateToggled({ + cardId: 'pinnedCopy1', + canCreateNewPins: true, + wasPinned: true, + }) + ); + + const expectedState = buildMetricsState({ + cardMetadataMap: { + card1: createScalarCardMetadata(), + }, + cardList: ['card1'], + cardStepIndex: { + card1: 10, + }, + cardToPinnedCopy: new Map(), + pinnedCardToOriginal: new Map(), + }); + expect(nextState).toEqual(expectedState); + }); + + it('unpins a card, removing its pinned copy', () => { + const beforeState = buildMetricsState({ + cardMetadataMap: { + card1: createScalarCardMetadata(), + pinnedCopy1: createScalarCardMetadata(), + }, + cardList: ['card1'], + cardStepIndex: { + card1: 10, + pinnedCopy1: 20, + }, + cardToPinnedCopy: new Map([['card1', 'pinnedCopy1']]), + pinnedCardToOriginal: new Map([['pinnedCopy1', 'card1']]), + }); + const nextState = reducers( + beforeState, + actions.cardPinStateToggled({ + cardId: 'card1', + canCreateNewPins: true, + wasPinned: true, + }) + ); + + const expectedState = buildMetricsState({ + cardMetadataMap: { + card1: createScalarCardMetadata(), + }, + cardList: ['card1'], + cardStepIndex: { + card1: 10, + }, + cardToPinnedCopy: new Map(), + pinnedCardToOriginal: new Map(), + }); + expect(nextState).toEqual(expectedState); + }); + + it('creates a pinned copy with the same metadata, step index', () => { + const cardMetadata = { + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }; + const stepCount = 10; + const timeSeriesData = { + ...buildTimeSeriesData(), + scalars: { + tagA: { + runToSeries: {run1: createScalarStepSeries(stepCount)}, + runToLoadState: {run1: DataLoadState.LOADED}, + }, + }, + }; + const beforeState = buildMetricsState({ + cardMetadataMap: { + card1: cardMetadata, + }, + cardList: ['card1'], + cardStepIndex: { + card1: stepCount - 1, + }, + cardToPinnedCopy: new Map(), + pinnedCardToOriginal: new Map(), + timeSeriesData, + }); + const nextState = reducers( + beforeState, + actions.cardPinStateToggled({ + cardId: 'card1', + canCreateNewPins: true, + wasPinned: false, + }) + ); + + const expectedPinnedCopyId = getPinnedCardId('card1'); + const expectedState = buildMetricsState({ + cardMetadataMap: { + card1: cardMetadata, + [expectedPinnedCopyId]: cardMetadata, + }, + cardList: ['card1'], + cardStepIndex: { + card1: stepCount - 1, + [expectedPinnedCopyId]: stepCount - 1, + }, + cardToPinnedCopy: new Map([['card1', expectedPinnedCopyId]]), + pinnedCardToOriginal: new Map([[expectedPinnedCopyId, 'card1']]), + timeSeriesData, + }); + expect(nextState).toEqual(expectedState); + }); + + it('throws an error when pinning a card without metadata', () => { + const beforeState = buildMetricsState({ + cardMetadataMap: {}, + cardList: ['card1'], + cardToPinnedCopy: new Map(), + pinnedCardToOriginal: new Map(), + }); + const action = actions.cardPinStateToggled({ + cardId: 'card1', + canCreateNewPins: true, + wasPinned: false, + }); + + expect(() => { + return reducers(beforeState, action); + }).toThrow(); + }); + + it('throws an error when pinning an unknown card', () => { + const beforeState = buildMetricsState({ + cardMetadataMap: {}, + cardList: ['card1'], + cardToPinnedCopy: new Map(), + pinnedCardToOriginal: new Map(), + }); + const action = actions.cardPinStateToggled({ + cardId: 'cardUnknown', + canCreateNewPins: true, + wasPinned: false, + }); + + expect(() => { + return reducers(beforeState, action); + }).toThrow(); + }); + }); + + describe('metricsTagFilterChanged', () => { + it('sets the tagFilter state', () => { + const state = buildMetricsState({tagFilter: 'foo'}); + const action = actions.metricsTagFilterChanged({tagFilter: 'foobar'}); + const nextState = reducers(state, action); + expect(nextState.tagFilter).toBe('foobar'); + }); + }); + + describe('metricsTagGroupExpansionChanged', () => { + it('toggles tagGroup expansion state', () => { + const state1 = buildMetricsState({ + tagGroupExpanded: new Map([['foo', true]]), + }); + + const state2 = reducers( + state1, + actions.metricsTagGroupExpansionChanged({tagGroup: 'foo'}) + ); + expect(state2.tagGroupExpanded).toEqual(new Map([['foo', false]])); + + const state3 = reducers( + state2, + actions.metricsTagGroupExpansionChanged({tagGroup: 'foo'}) + ); + expect(state3.tagGroupExpanded).toEqual(new Map([['foo', true]])); + }); + + it('expands new tagGroup', () => { + const state = buildMetricsState({ + tagGroupExpanded: new Map(), + }); + + const nextState = reducers( + state, + actions.metricsTagGroupExpansionChanged({tagGroup: 'foo'}) + ); + expect(nextState.tagGroupExpanded).toEqual(new Map([['foo', true]])); + }); + }); + + describe('pinned card hydration', () => { + it('ignores RouteKind EXPERIMENTS', () => { + const beforeState = buildMetricsState({ + unresolvedImportedPinnedCards: [], + }); + const action = routingActions.stateRehydratedFromUrl({ + routeKind: RouteKind.EXPERIMENTS, + partialState: { + metrics: { + pinnedCards: [{plugin: PluginType.SCALARS, tag: 'accuracy'}], + }, + }, + }); + const nextState = reducers(beforeState, action); + + expect(nextState.unresolvedImportedPinnedCards).toEqual([]); + }); + + it('populates ngrx store with unresolved imported pins', () => { + const beforeState = buildMetricsState({ + unresolvedImportedPinnedCards: [], + }); + const action = routingActions.stateRehydratedFromUrl({ + routeKind: RouteKind.EXPERIMENT, + partialState: { + metrics: { + pinnedCards: [{plugin: PluginType.SCALARS, tag: 'accuracy'}], + }, + }, + }); + const nextState = reducers(beforeState, action); + + expect(nextState.unresolvedImportedPinnedCards).toEqual([ + {plugin: PluginType.SCALARS, tag: 'accuracy'}, + ]); + }); + + it('resolves imported pins', () => { + const fakeMetadata = { + ...createCardMetadata(PluginType.SCALARS), + tag: 'accuracy', + }; + const beforeState = buildMetricsState({ + cardList: ['card1'], + cardMetadataMap: { + card1: fakeMetadata, + }, + tagMetadataLoaded: DataLoadState.LOADED, + tagMetadata: { + ...buildTagMetadata(), + [PluginType.SCALARS]: { + tagDescriptions: {}, + tagToRuns: {accuracy: ['run1']}, + }, + }, + }); + const action = routingActions.stateRehydratedFromUrl({ + routeKind: RouteKind.EXPERIMENT, + partialState: { + metrics: { + pinnedCards: [{plugin: PluginType.SCALARS, tag: 'accuracy'}], + }, + }, + }); + const nextState = reducers(beforeState, action); + + const pinnedCopyId = getPinnedCardId('card1'); + expect(nextState.pinnedCardToOriginal).toEqual( + new Map([[pinnedCopyId, 'card1']]) + ); + expect(nextState.cardToPinnedCopy).toEqual( + new Map([['card1', pinnedCopyId]]) + ); + expect(nextState.unresolvedImportedPinnedCards).toEqual([]); + }); + + it('does not add resolved pins to the unresolved imported pins', () => { + const fakeMetadata = {...createCardMetadata(), tag: 'accuracy'}; + const beforeState = buildMetricsState({ + cardMetadataMap: { + 'card-pin1': fakeMetadata, + card1: fakeMetadata, + }, + pinnedCardToOriginal: new Map([['card-pin1', 'card1']]), + unresolvedImportedPinnedCards: [], + }); + const action = routingActions.stateRehydratedFromUrl({ + routeKind: RouteKind.EXPERIMENT, + partialState: { + metrics: { + pinnedCards: [{plugin: PluginType.SCALARS, tag: 'accuracy'}], + }, + }, + }); + const nextState = reducers(beforeState, action); + + expect(nextState.unresolvedImportedPinnedCards).toEqual([]); + }); + + it('does not create duplicate unresolved imported pins', () => { + const beforeState = buildMetricsState({ + unresolvedImportedPinnedCards: [ + {plugin: PluginType.SCALARS, tag: 'accuracy'}, + ], + }); + const action = routingActions.stateRehydratedFromUrl({ + routeKind: RouteKind.EXPERIMENT, + partialState: { + metrics: { + pinnedCards: [{plugin: PluginType.SCALARS, tag: 'accuracy'}], + }, + }, + }); + const nextState = reducers(beforeState, action); + + expect(nextState.unresolvedImportedPinnedCards).toEqual([ + {plugin: PluginType.SCALARS, tag: 'accuracy'}, + ]); + }); + + it('does not create duplicates if URL contained duplicates', () => { + const beforeState = buildMetricsState(); + const action = routingActions.stateRehydratedFromUrl({ + routeKind: RouteKind.EXPERIMENT, + partialState: { + metrics: { + pinnedCards: [ + {plugin: PluginType.SCALARS, tag: 'accuracyAgain'}, + {plugin: PluginType.SCALARS, tag: 'accuracyAgain'}, + ], + }, + }, + }); + const nextState = reducers(beforeState, action); + + expect(nextState.unresolvedImportedPinnedCards).toEqual([ + {plugin: PluginType.SCALARS, tag: 'accuracyAgain'}, + ]); + }); + + it('does not clear unresolved imported pins if hydration is empty', () => { + const beforeState = buildMetricsState({ + unresolvedImportedPinnedCards: [ + {plugin: PluginType.SCALARS, tag: 'accuracy'}, + ], + }); + const action = routingActions.stateRehydratedFromUrl({ + routeKind: RouteKind.EXPERIMENT, + partialState: { + metrics: { + pinnedCards: [], + }, + }, + }); + const nextState = reducers(beforeState, action); + + expect(nextState.unresolvedImportedPinnedCards).toEqual([ + {plugin: PluginType.SCALARS, tag: 'accuracy'}, + ]); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_selectors.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_selectors.ts new file mode 100644 index 0000000000000000000000000000000000000000..3a4128e41492fb230f16baca6f6ba2e8a2a42ed8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_selectors.ts @@ -0,0 +1,313 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {createFeatureSelector, createSelector} from '@ngrx/store'; +import {DataLoadState} from '../../types/data'; + +import {State} from '../../app_state'; +import {DeepReadonly} from '../../util/types'; +import { + CardId, + CardIdWithMetadata, + CardUniqueInfo, + CardMetadata, + HistogramMode, + NonPinnedCardId, + PinnedCardId, + TooltipSort, + XAxisType, +} from '../types'; + +import * as storeUtils from './metrics_store_internal_utils'; +import { + CardMetadataMap, + METRICS_FEATURE_KEY, + MetricsState, + RunToSeries, + TagMetadata, +} from './metrics_types'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +const selectMetricsState = createFeatureSelector( + METRICS_FEATURE_KEY +); + +export const getMetricsTagMetadataLoaded = createSelector( + selectMetricsState, + (state: MetricsState): DataLoadState => state.tagMetadataLoaded +); + +export const getMetricsTagMetadata = createSelector( + selectMetricsState, + (state: MetricsState): DeepReadonly => { + return state.tagMetadata; + } +); + +/** + * Cards + */ +const getCardIds = createSelector(selectMetricsState, (state): CardId[] => { + return state.cardList; +}); + +export const getCardLoadState = createSelector( + selectMetricsState, + (state: MetricsState, cardId: CardId): DataLoadState => { + if (!state.cardMetadataMap.hasOwnProperty(cardId)) { + return DataLoadState.NOT_LOADED; + } + const {plugin, tag, runId, sample} = state.cardMetadataMap[cardId]; + const loadable = storeUtils.getTimeSeriesLoadable( + state.timeSeriesData, + plugin, + tag, + sample + ); + if (!loadable) { + return DataLoadState.NOT_LOADED; + } + const runToLoadState = loadable.runToLoadState; + if (runId) { + return runToLoadState.hasOwnProperty(runId) + ? runToLoadState[runId] + : DataLoadState.NOT_LOADED; + } + + const runIds = storeUtils.getRunIds(state.tagMetadata, plugin, tag, sample); + if (!runIds.length) { + throw new Error('Cannot load a card whose tag has no runs'); + } + if ( + runIds.every((runId) => runToLoadState[runId] === DataLoadState.LOADED) + ) { + return DataLoadState.LOADED; + } + return runIds.some( + (runId) => runToLoadState[runId] === DataLoadState.LOADING + ) + ? DataLoadState.LOADING + : DataLoadState.NOT_LOADED; + } +); + +export const getCardTimeSeries = createSelector( + selectMetricsState, + (state: MetricsState, cardId: CardId): DeepReadonly | null => { + if (!state.cardMetadataMap.hasOwnProperty(cardId)) { + return null; + } + const {plugin, tag, sample} = state.cardMetadataMap[cardId]; + const loadable = storeUtils.getTimeSeriesLoadable( + state.timeSeriesData, + plugin, + tag, + sample + ); + return loadable ? loadable.runToSeries : null; + } +); + +const getCardMetadataMap = createSelector( + selectMetricsState, + (state: MetricsState): CardMetadataMap => { + return state.cardMetadataMap; + } +); + +export const getCardMetadata = createSelector( + getCardMetadataMap, + ( + metadataMap: CardMetadataMap, + cardId: CardId + ): DeepReadonly | null => { + if (!metadataMap.hasOwnProperty(cardId)) { + return null; + } + return metadataMap[cardId]; + } +); + +// A cheap identity selector to skip recomputing selectors. +const getVisibleCardIdSet = createSelector( + selectMetricsState, + (state): Set => { + return state.visibleCards; + } +); + +export const getVisibleCardIds = createSelector( + getVisibleCardIdSet, + (cardIdSet: Set): CardId[] => { + return [...cardIdSet]; + } +); + +/** + * Returns current list of card data whose metadata is loaded. + */ +export const getNonEmptyCardIdsWithMetadata = createSelector( + getCardIds, + getCardMetadataMap, + ( + cardIds: CardId[], + metadataMap: CardMetadataMap + ): DeepReadonly => { + return cardIds + .filter((cardId) => { + return metadataMap.hasOwnProperty(cardId); + }) + .map((cardId) => { + return {cardId, ...metadataMap[cardId]}; + }); + } +); + +/** + * The index into the step values array for a card's UI. This may be greater + * than the number of step values available, if time series data is not loaded. + */ +export const getCardStepIndex = createSelector( + selectMetricsState, + (state: MetricsState, cardId: CardId): number | null => { + if (!state.cardStepIndex.hasOwnProperty(cardId)) { + return null; + } + return state.cardStepIndex[cardId]; + } +); + +const getCardToPinnedCopy = createSelector( + selectMetricsState, + (state): Map => { + return state.cardToPinnedCopy; + } +); + +const getPinnedCardToOriginal = createSelector( + selectMetricsState, + (state): Map => { + return state.pinnedCardToOriginal; + } +); + +/** + * Returns an ordered list of the cards in the pinned location. + */ +export const getPinnedCardsWithMetadata = createSelector( + getCardToPinnedCopy, + getCardMetadataMap, + ( + cardToPinnedCopy: Map, + metadataMap: CardMetadataMap + ): DeepReadonly => { + return [...cardToPinnedCopy.values()] + .filter((cardId) => { + return metadataMap.hasOwnProperty(cardId); + }) + .map((cardId) => { + return {cardId, ...metadataMap[cardId]}; + }); + } +); + +/** + * Returns true if a card is pinned or a separate card exists that is a pinned + * copy of this card. Defaults to false if the card is unknown. + */ +export const getCardPinnedState = createSelector( + getCardToPinnedCopy, + getPinnedCardToOriginal, + ( + cardToPinnedCopy: Map, + pinnedCardToOriginal: Map, + cardId: NonPinnedCardId | PinnedCardId + ): boolean => { + return cardToPinnedCopy.has(cardId) || pinnedCardToOriginal.has(cardId); + } +); + +export const getUnresolvedImportedPinnedCards = createSelector( + selectMetricsState, + (state: MetricsState): CardUniqueInfo[] => { + return state.unresolvedImportedPinnedCards; + } +); + +/** + * Whether the UI is allowed to pin more cards. This may be limited if the URL + * contains too many pins already. + */ +export const getCanCreateNewPins = createSelector( + selectMetricsState, + (state: MetricsState): boolean => { + return storeUtils.canCreateNewPins(state); + } +); + +/** + * Settings. + */ +export const getMetricsTooltipSort = createSelector( + selectMetricsState, + (state): TooltipSort => state.settings.tooltipSort +); + +export const getMetricsIgnoreOutliers = createSelector( + selectMetricsState, + (state): boolean => state.settings.ignoreOutliers +); + +export const getMetricsXAxisType = createSelector( + selectMetricsState, + (state): XAxisType => state.settings.xAxisType +); + +export const getMetricsHistogramMode = createSelector( + selectMetricsState, + (state): HistogramMode => state.settings.histogramMode +); + +export const getMetricsScalarSmoothing = createSelector( + selectMetricsState, + (state): number => state.settings.scalarSmoothing +); + +export const getMetricsImageBrightnessInMilli = createSelector( + selectMetricsState, + (state): number => state.settings.imageBrightnessInMilli +); + +export const getMetricsImageContrastInMilli = createSelector( + selectMetricsState, + (state): number => state.settings.imageContrastInMilli +); + +export const getMetricsImageShowActualSize = createSelector( + selectMetricsState, + (state): boolean => state.settings.imageShowActualSize +); + +export const getMetricsTagFilter = createSelector( + selectMetricsState, + (state): string => state.tagFilter +); + +export const getMetricsTagGroupExpansionState = createSelector( + selectMetricsState, + (state: MetricsState, tagGroup: string): boolean => { + return Boolean(state.tagGroupExpanded.get(tagGroup)); + } +); diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_selectors_test.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_selectors_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..2095d710d32180a6dc6bafdcb710cdbb0d957ed3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_selectors_test.ts @@ -0,0 +1,694 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {DataLoadState} from '../../types/data'; + +import {PluginType} from '../data_source'; +import { + appStateFromMetricsState, + buildMetricsSettingsState, + buildMetricsState, + createCardMetadata, + createImageStepData, + createScalarStepData, + createTimeSeriesData, +} from '../testing'; +import {HistogramMode, TooltipSort, XAxisType} from '../types'; + +import * as selectors from './metrics_selectors'; + +describe('metrics selectors', () => { + beforeEach(() => { + // Clear the memoization. + selectors.getMetricsTagMetadataLoaded.release(); + }); + + it('returns loaded state', () => { + const state = appStateFromMetricsState( + buildMetricsState({ + tagMetadataLoaded: DataLoadState.LOADED, + }) + ); + expect(selectors.getMetricsTagMetadataLoaded(state)).toBe( + DataLoadState.LOADED + ); + }); + + describe('getCardLoadState', () => { + it('returns a card load state', () => { + selectors.getCardLoadState.release(); + + const loadable = { + runToSeries: {run1: createScalarStepData()}, + runToLoadState: {run1: DataLoadState.LOADED}, + }; + const metricsState = buildMetricsState({ + timeSeriesData: { + ...createTimeSeriesData(), + [PluginType.SCALARS]: {tagA: loadable}, + }, + cardMetadataMap: { + '': { + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }, + }, + }); + metricsState.tagMetadata.scalars.tagToRuns = {tagA: ['run1']}; + const state = appStateFromMetricsState(metricsState); + expect(selectors.getCardLoadState(state, '')).toBe( + DataLoadState.LOADED + ); + }); + + it('returns a card load state for a specific run', () => { + selectors.getCardLoadState.release(); + + const loadable = { + runToSeries: {}, + runToLoadState: { + run1: DataLoadState.LOADING, + run2: DataLoadState.FAILED, + }, + }; + const metricsState = buildMetricsState({ + timeSeriesData: { + ...createTimeSeriesData(), + [PluginType.IMAGES]: {tagA: {0: loadable}}, + }, + cardMetadataMap: { + '': { + plugin: PluginType.IMAGES, + tag: 'tagA', + runId: 'run2', + sample: 0, + }, + }, + }); + metricsState.tagMetadata.images.tagRunSampledInfo = { + tagA: { + run1: {maxSamplesPerStep: 1}, + run2: {maxSamplesPerStep: 1}, + }, + }; + const state = appStateFromMetricsState(metricsState); + expect(selectors.getCardLoadState(state, '')).toBe( + DataLoadState.FAILED + ); + }); + + it('returns not-loaded when no time series is available', () => { + selectors.getCardLoadState.release(); + + const state = appStateFromMetricsState( + buildMetricsState({ + cardMetadataMap: { + '': { + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }, + }, + }) + ); + expect(selectors.getCardLoadState(state, '')).toBe( + DataLoadState.NOT_LOADED + ); + }); + + it('returns not-loaded when card is not available', () => { + selectors.getCardLoadState.release(); + + const state = appStateFromMetricsState(buildMetricsState()); + expect(selectors.getCardLoadState(state, '')).toBe( + DataLoadState.NOT_LOADED + ); + }); + + it('returns loading when some runs are loading', () => { + selectors.getCardLoadState.release(); + + const loadable = { + runToSeries: {run1: createScalarStepData()}, + runToLoadState: { + run1: DataLoadState.LOADED, + run2: DataLoadState.LOADING, + }, + }; + const metricsState = buildMetricsState({ + timeSeriesData: { + ...createTimeSeriesData(), + [PluginType.SCALARS]: {tagA: loadable}, + }, + cardMetadataMap: { + '': { + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }, + }, + }); + metricsState.tagMetadata.scalars.tagToRuns = {tagA: ['run1', 'run2']}; + const state = appStateFromMetricsState(metricsState); + expect(selectors.getCardLoadState(state, '')).toBe( + DataLoadState.LOADING + ); + }); + + it( + 'returns not-loaded when some runs are not loaded and nothing is ' + + 'loading', + () => { + selectors.getCardLoadState.release(); + + const loadable = { + runToSeries: {run1: createScalarStepData()}, + runToLoadState: { + run1: DataLoadState.NOT_LOADED, + run2: DataLoadState.LOADED, + }, + }; + const metricsState = buildMetricsState({ + timeSeriesData: { + ...createTimeSeriesData(), + [PluginType.SCALARS]: {tagA: loadable}, + }, + cardMetadataMap: { + '': { + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }, + }, + }); + metricsState.tagMetadata.scalars.tagToRuns = { + tagA: ['run1', 'run2'], + }; + const state = appStateFromMetricsState(metricsState); + expect(selectors.getCardLoadState(state, '')).toBe( + DataLoadState.NOT_LOADED + ); + } + ); + }); + + describe('getCardMetadata', () => { + it('returns card metadata', () => { + selectors.getCardMetadata.release(); + + const state = appStateFromMetricsState( + buildMetricsState({ + cardMetadataMap: { + '': { + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }, + }, + }) + ); + expect(selectors.getCardMetadata(state, '')).toEqual({ + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }); + }); + + it('returns null when metadata is not available', () => { + selectors.getCardMetadata.release(); + + const state = appStateFromMetricsState(buildMetricsState()); + expect(selectors.getCardMetadata(state, '')).toBe(null); + }); + }); + + describe('getNonEmptyCardIdsWithMetadata', () => { + beforeEach(() => { + selectors.getNonEmptyCardIdsWithMetadata.release(); + }); + + it('returns an emtpy array when cardList is empty', () => { + const state = appStateFromMetricsState( + buildMetricsState({ + cardMetadataMap: {}, + cardList: [], + }) + ); + expect(selectors.getNonEmptyCardIdsWithMetadata(state)).toEqual([]); + }); + + it('returns card list with metadata', () => { + const state = appStateFromMetricsState( + buildMetricsState({ + cardMetadataMap: { + card1: createCardMetadata(PluginType.SCALARS), + card2: createCardMetadata(PluginType.HISTOGRAMS), + }, + cardList: ['card1', 'card2'], + }) + ); + expect(selectors.getNonEmptyCardIdsWithMetadata(state)).toEqual([ + { + cardId: 'card1', + ...createCardMetadata(PluginType.SCALARS), + }, + { + cardId: 'card2', + ...createCardMetadata(PluginType.HISTOGRAMS), + }, + ]); + }); + + it('omits card metadata that is not part of current cardList', () => { + const state = appStateFromMetricsState( + buildMetricsState({ + cardMetadataMap: { + card1: createCardMetadata(PluginType.SCALARS), + card2: createCardMetadata(PluginType.HISTOGRAMS), + }, + cardList: ['card2'], + }) + ); + expect(selectors.getNonEmptyCardIdsWithMetadata(state)).toEqual([ + { + cardId: 'card2', + ...createCardMetadata(PluginType.HISTOGRAMS), + }, + ]); + }); + }); + + describe('getVisibleCardIds', () => { + beforeEach(() => { + selectors.getVisibleCardIds.release(); + }); + + it('returns an emtpy array', () => { + const state = appStateFromMetricsState( + buildMetricsState({ + visibleCards: new Set(), + }) + ); + expect(selectors.getVisibleCardIds(state)).toEqual([]); + }); + + it('returns a non-empty array', () => { + const state = appStateFromMetricsState( + buildMetricsState({ + visibleCards: new Set(['card1', 'card2']), + }) + ); + expect(selectors.getVisibleCardIds(state)).toEqual(['card1', 'card2']); + }); + }); + + describe('getCardTimeSeries', () => { + it('getCardTimeSeries', () => { + selectors.getCardTimeSeries.release(); + + const sampleScalarRunToSeries = { + run1: createScalarStepData(), + run2: createScalarStepData(), + }; + const sampleImageRunToSeries = {run1: createImageStepData()}; + const state = appStateFromMetricsState( + buildMetricsState({ + timeSeriesData: { + ...createTimeSeriesData(), + scalars: { + tagA: { + runToLoadState: { + run1: DataLoadState.LOADED, + run2: DataLoadState.LOADED, + }, + runToSeries: sampleScalarRunToSeries, + }, + }, + images: { + tagB: { + 0: { + runToLoadState: {run1: DataLoadState.LOADED}, + runToSeries: sampleImageRunToSeries, + }, + }, + }, + }, + cardMetadataMap: { + card1: { + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }, + card2: { + plugin: PluginType.IMAGES, + tag: 'tagB', + runId: 'run1', + sample: 0, + }, + }, + }) + ); + expect(selectors.getCardTimeSeries(state, 'card1')).toEqual( + sampleScalarRunToSeries + ); + expect(selectors.getCardTimeSeries(state, 'card2')).toEqual( + sampleImageRunToSeries + ); + expect(selectors.getCardTimeSeries(state, 'card-nonexistent')).toBe(null); + }); + }); + + describe('getCardStepIndex', () => { + it('returns null if no card exists', () => { + selectors.getCardStepIndex.release(); + + const state = appStateFromMetricsState( + buildMetricsState({ + cardStepIndex: {}, + }) + ); + expect(selectors.getCardStepIndex(state, 'card1')).toBe(null); + }); + + it('properly returns card ids', () => { + selectors.getCardStepIndex.release(); + + const state = appStateFromMetricsState( + buildMetricsState({ + cardStepIndex: {card1: 5}, + }) + ); + expect(selectors.getCardStepIndex(state, 'card1')).toBe(5); + }); + }); + + describe('getPinnedCardsWithMetadata', () => { + beforeEach(() => { + selectors.getPinnedCardsWithMetadata.release(); + }); + + it('returns an emtpy array when there are no pinned copies', () => { + const state = appStateFromMetricsState( + buildMetricsState({ + cardMetadataMap: {}, + cardToPinnedCopy: new Map(), + }) + ); + expect(selectors.getPinnedCardsWithMetadata(state)).toEqual([]); + }); + + it('does not return cards that have no metadata', () => { + const state = appStateFromMetricsState( + buildMetricsState({ + cardMetadataMap: {}, + cardToPinnedCopy: new Map([['card1', 'pinnedCopy1']]), + }) + ); + expect(selectors.getPinnedCardsWithMetadata(state)).toEqual([]); + }); + + it('does not rely on the list of original, non-pinned cards', () => { + const state = appStateFromMetricsState( + buildMetricsState({ + cardMetadataMap: { + card1: createCardMetadata(PluginType.SCALARS), + }, + cardToPinnedCopy: new Map(), + cardList: ['card1'], + }) + ); + expect(selectors.getPinnedCardsWithMetadata(state)).toEqual([]); + }); + + it(`returns list with the pinned copy's metadata`, () => { + const state = appStateFromMetricsState( + buildMetricsState({ + cardMetadataMap: { + pinnedCopy1: createCardMetadata(PluginType.SCALARS), + card1: createCardMetadata(PluginType.HISTOGRAMS), + }, + cardToPinnedCopy: new Map([['card1', 'pinnedCopy1']]), + }) + ); + expect(selectors.getPinnedCardsWithMetadata(state)).toEqual([ + { + cardId: 'pinnedCopy1', + ...createCardMetadata(PluginType.SCALARS), + }, + ]); + }); + }); + + describe('getCardPinnedState', () => { + it('returns false if no card exists', () => { + selectors.getCardPinnedState.release(); + + const state = appStateFromMetricsState( + buildMetricsState({ + cardToPinnedCopy: new Map(), + cardList: [], + }) + ); + expect(selectors.getCardPinnedState(state, 'card1')).toBe(false); + }); + + it('returns false if the card is not pinned', () => { + selectors.getCardPinnedState.release(); + + const state = appStateFromMetricsState( + buildMetricsState({ + cardMetadataMap: { + card1: createCardMetadata(PluginType.HISTOGRAMS), + }, + cardToPinnedCopy: new Map(), + cardList: ['card1'], + }) + ); + expect(selectors.getCardPinnedState(state, 'card1')).toBe(false); + }); + + it('returns true if the card has a pinned copy', () => { + selectors.getCardPinnedState.release(); + + const state = appStateFromMetricsState( + buildMetricsState({ + cardMetadataMap: { + card1: createCardMetadata(PluginType.HISTOGRAMS), + }, + cardToPinnedCopy: new Map([['card1', 'pinnedCopy1']]), + pinnedCardToOriginal: new Map([['pinnedCopy1', 'card1']]), + cardList: ['card1'], + }) + ); + expect(selectors.getCardPinnedState(state, 'card1')).toBe(true); + }); + + it('returns true if the card is a pinned copy', () => { + selectors.getCardPinnedState.release(); + + const state = appStateFromMetricsState( + buildMetricsState({ + cardMetadataMap: { + card1: createCardMetadata(PluginType.HISTOGRAMS), + }, + cardToPinnedCopy: new Map([['card1', 'pinnedCopy1']]), + pinnedCardToOriginal: new Map([['pinnedCopy1', 'card1']]), + cardList: ['card1'], + }) + ); + expect(selectors.getCardPinnedState(state, 'pinnedCopy1')).toBe(true); + }); + }); + + describe('getUnresolvedImportedPinnedCards', () => { + it('returns unresolved imported pinned cards', () => { + selectors.getUnresolvedImportedPinnedCards.release(); + + const state = appStateFromMetricsState( + buildMetricsState({ + unresolvedImportedPinnedCards: [ + {plugin: PluginType.SCALARS, tag: 'accuracy'}, + { + plugin: PluginType.IMAGES, + tag: 'output', + runId: 'exp1/run1', + sample: 5, + }, + ], + }) + ); + expect(selectors.getUnresolvedImportedPinnedCards(state)).toEqual([ + {plugin: PluginType.SCALARS, tag: 'accuracy'}, + { + plugin: PluginType.IMAGES, + tag: 'output', + runId: 'exp1/run1', + sample: 5, + }, + ]); + }); + }); + + describe('settings', () => { + it('returns tooltipSort when called getMetricsTooltipSort', () => { + selectors.getMetricsTooltipSort.release(); + const state = appStateFromMetricsState( + buildMetricsState({ + settings: buildMetricsSettingsState({ + tooltipSort: TooltipSort.ASCENDING, + }), + }) + ); + expect(selectors.getMetricsTooltipSort(state)).toBe( + TooltipSort.ASCENDING + ); + }); + + it('returns ignoreOutliers when called getMetricsIgnoreOutliers', () => { + selectors.getMetricsIgnoreOutliers.release(); + const state = appStateFromMetricsState( + buildMetricsState({ + settings: buildMetricsSettingsState({ + ignoreOutliers: false, + }), + }) + ); + expect(selectors.getMetricsIgnoreOutliers(state)).toBe(false); + }); + + it('returns xAxis when called getMetricsXAxisType', () => { + selectors.getMetricsXAxisType.release(); + const state = appStateFromMetricsState( + buildMetricsState({ + settings: buildMetricsSettingsState({ + xAxisType: XAxisType.WALL_TIME, + }), + }) + ); + expect(selectors.getMetricsXAxisType(state)).toBe(XAxisType.WALL_TIME); + }); + + it('returns scalarSmoothing when called getMetricsScalarSmoothing', () => { + selectors.getMetricsScalarSmoothing.release(); + const state = appStateFromMetricsState( + buildMetricsState({ + settings: buildMetricsSettingsState({ + scalarSmoothing: 0, + }), + }) + ); + expect(selectors.getMetricsScalarSmoothing(state)).toBe(0); + }); + + it('returns imageBrightnessInMilli when called getMetricsImageBrightnessInMilli', () => { + selectors.getMetricsImageBrightnessInMilli.release(); + const state = appStateFromMetricsState( + buildMetricsState({ + settings: buildMetricsSettingsState({ + imageBrightnessInMilli: 1000, + }), + }) + ); + expect(selectors.getMetricsImageBrightnessInMilli(state)).toBe(1000); + }); + + it('returns imageContrastInMilli when called getMetricsImageContrastInMilli', () => { + selectors.getMetricsImageContrastInMilli.release(); + const state = appStateFromMetricsState( + buildMetricsState({ + settings: buildMetricsSettingsState({ + imageContrastInMilli: 20, + }), + }) + ); + expect(selectors.getMetricsImageContrastInMilli(state)).toBe(20); + }); + + it('returns imageShowActualSize when called getMetricsImageShowActualSize', () => { + selectors.getMetricsImageShowActualSize.release(); + const state = appStateFromMetricsState( + buildMetricsState({ + settings: buildMetricsSettingsState({ + imageShowActualSize: true, + }), + }) + ); + expect(selectors.getMetricsImageShowActualSize(state)).toBe(true); + }); + + it('returns histogramMode when called getMetricsHistogramMode', () => { + selectors.getMetricsHistogramMode.release(); + const state = appStateFromMetricsState( + buildMetricsState({ + settings: buildMetricsSettingsState({ + histogramMode: HistogramMode.OVERLAY, + }), + }) + ); + expect(selectors.getMetricsHistogramMode(state)).toBe( + HistogramMode.OVERLAY + ); + }); + }); + + describe('getMetricsTagFilter', () => { + it('returns tagFilter', () => { + selectors.getMetricsTagFilter.release(); + const state = appStateFromMetricsState( + buildMetricsState({tagFilter: 'hello'}) + ); + expect(selectors.getMetricsTagFilter(state)).toBe('hello'); + }); + }); + + describe('getMetricsTagGroupExpansionState', () => { + beforeEach(() => { + selectors.getMetricsTagGroupExpansionState.release(); + }); + + it('returns tag group expansion state: true', () => { + const state = appStateFromMetricsState( + buildMetricsState({ + tagGroupExpanded: new Map([['hello', true]]), + }) + ); + expect(selectors.getMetricsTagGroupExpansionState(state, 'hello')).toBe( + true + ); + }); + + it('returns tag group expansion state: false', () => { + const state = appStateFromMetricsState( + buildMetricsState({ + tagGroupExpanded: new Map([['hello', false]]), + }) + ); + expect(selectors.getMetricsTagGroupExpansionState(state, 'hello')).toBe( + false + ); + }); + + it('returns tag group expansion state as false for unseen one', () => { + const state = appStateFromMetricsState( + buildMetricsState({ + tagGroupExpanded: new Map(), + }) + ); + expect(selectors.getMetricsTagGroupExpansionState(state, 'world')).toBe( + false + ); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_store_internal_utils.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_store_internal_utils.ts new file mode 100644 index 0000000000000000000000000000000000000000..d8b7bb1ce8a684c8735295a3c9fddf70bfaeda9d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_store_internal_utils.ts @@ -0,0 +1,312 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview Utilities used internally by the Metrics feature's NgRx store. + */ + +import {DataLoadState} from '../../types/data'; + +import {isSampledPlugin, PluginType, SampledPluginType} from '../data_source'; +import {CardId, CardMetadata, CardUniqueInfo, NonPinnedCardId} from '../types'; + +import { + CardMetadataMap, + CardStepIndexMap, + CardToPinnedCard, + MetricsState, + PinnedCardToCard, + RunToLoadState, + TagMetadata, + TimeSeriesData, + TimeSeriesLoadables, +} from './metrics_types'; + +type ResolvedPinPartialState = Pick< + MetricsState, + | 'cardMetadataMap' + | 'cardToPinnedCopy' + | 'pinnedCardToOriginal' + | 'cardStepIndex' +>; + +/** + * Returns the loadable information for a specific tag, containing its series + * data and load state. Returns `null` when the requested tag has no initial + * loadable in `timeSeriesData`. + */ +export function getTimeSeriesLoadable( + timeSeriesData: TimeSeriesData, + plugin: PluginType, + tag: string, + sample?: number +): TimeSeriesLoadables[typeof plugin] | null { + const pluginData = timeSeriesData[plugin]; + if (!pluginData.hasOwnProperty(tag)) { + return null; + } + if (isSampledPlugin(plugin)) { + if (!timeSeriesData[plugin][tag].hasOwnProperty(sample!)) { + return null; + } + return timeSeriesData[plugin][tag][sample!]; + } + return timeSeriesData[plugin][tag]; +} + +/** + * Create a new plugin data with new references to a new time series loadable. + * The return object is a shallow clone, so consumers must clone fields as + * needed. + */ +export function createPluginDataWithLoadable( + timeSeriesData: TimeSeriesData, + plugin: PluginType, + tag: string, + sample?: number +): TimeSeriesData[typeof plugin] { + if (isSampledPlugin(plugin)) { + const pluginData = {...timeSeriesData[plugin]}; + const tagData = createSampledTagDataWithLoadable( + pluginData, + tag, + sample! + ); + pluginData[tag] = tagData; + return pluginData; + } + + const pluginData = {...timeSeriesData[plugin]}; + const hasTag = pluginData.hasOwnProperty(tag); + pluginData[tag] = hasTag + ? {...pluginData[tag]} + : buildTimeSeriesLoadable(); + return pluginData; +} + +function createSampledTagDataWithLoadable

    ( + pluginData: TimeSeriesData[SampledPluginType], + tag: string, + sample: number +) { + const hasTag = pluginData.hasOwnProperty(tag); + const tagData = hasTag ? {...pluginData[tag]} : {}; + + const hasSample = tagData.hasOwnProperty(sample); + tagData[sample] = hasSample + ? {...tagData[sample]} + : buildTimeSeriesLoadable

    (); + return tagData; +} + +function buildTimeSeriesLoadable< + P extends PluginType +>(): TimeSeriesLoadables[P] { + return { + runToSeries: {}, + runToLoadState: {}, + }; +} + +/** + * Note: do not rely on the implementation details of these ID generators below. + * Clients should operate on `CardId`s, whose type may be open to change. + */ + +export function getCardId(cardMetadata: CardMetadata) { + return JSON.stringify(cardMetadata); +} + +export function getPinnedCardId(baseCardId: CardId) { + return JSON.stringify({baseCardId}); +} + +/** + * Creates a RunToLoadState with a specific load state for all specified runs. + */ +export function createRunToLoadState( + loadState: DataLoadState, + runs: string[], + prevRunToLoadState?: RunToLoadState +): RunToLoadState { + const runToLoadState = {...prevRunToLoadState} as RunToLoadState; + for (const run of runs) { + runToLoadState[run] = loadState; + } + return runToLoadState; +} + +export function getRunIds( + tagMetadata: TagMetadata, + plugin: PluginType, + tag: string, + sample?: number +) { + if (isSampledPlugin(plugin)) { + const tagRunSampledInfo = tagMetadata[plugin].tagRunSampledInfo; + if (!tagRunSampledInfo.hasOwnProperty(tag)) { + return []; + } + const runIds = Object.keys(tagRunSampledInfo[tag]); + return runIds.filter((runId) => { + return sample! < tagRunSampledInfo[tag][runId].maxSamplesPerStep; + }); + } + const tagToRunIds = tagMetadata[plugin].tagToRuns; + return tagToRunIds.hasOwnProperty(tag) ? tagToRunIds[tag] : []; +} + +/** + * Returns whether the CardMetadata exactly matches the pinned card from + * storage. + */ +function cardMatchesCardUniqueInfo( + cardMetadata: CardMetadata, + cardUniqueInfo: CardUniqueInfo +): boolean { + const noRunId = !cardMetadata.runId && !cardUniqueInfo.runId; + return ( + cardMetadata.plugin === cardUniqueInfo.plugin && + cardMetadata.tag === cardUniqueInfo.tag && + cardMetadata.sample === cardUniqueInfo.sample && + (cardMetadata.runId === cardUniqueInfo.runId || noRunId) + ); +} + +/** + * Attempts to resolve the imported pins against the list of non-pinned cards + * provided. Returns the resulting state. + * + * Note: this assumes input has already been sanitized and validated. Untrusted + * data from URLs must be cleaned before being passed to the store. + */ +export function buildOrReturnStateWithUnresolvedImportedPins( + unresolvedImportedPinnedCards: CardUniqueInfo[], + nonPinnedCards: NonPinnedCardId[], + cardMetadataMap: CardMetadataMap, + cardToPinnedCopy: CardToPinnedCard, + pinnedCardToOriginal: PinnedCardToCard, + cardStepIndexMap: CardStepIndexMap +): ResolvedPinPartialState & {unresolvedImportedPinnedCards: CardUniqueInfo[]} { + const unresolvedPinSet = new Set(unresolvedImportedPinnedCards); + const nonPinnedCardsWithMatch = []; + for (const unresolvedPin of unresolvedImportedPinnedCards) { + for (const nonPinnedCardId of nonPinnedCards) { + const cardMetadata = cardMetadataMap[nonPinnedCardId]; + if (cardMatchesCardUniqueInfo(cardMetadata, unresolvedPin)) { + nonPinnedCardsWithMatch.push(nonPinnedCardId); + unresolvedPinSet.delete(unresolvedPin); + break; + } + } + } + + if (!nonPinnedCardsWithMatch.length) { + return { + unresolvedImportedPinnedCards, + cardMetadataMap, + cardToPinnedCopy, + pinnedCardToOriginal, + cardStepIndex: cardStepIndexMap, + }; + } + + let stateWithResolvedPins = { + cardToPinnedCopy, + pinnedCardToOriginal, + cardStepIndex: cardStepIndexMap, + cardMetadataMap, + }; + for (const cardToPin of nonPinnedCardsWithMatch) { + stateWithResolvedPins = buildOrReturnStateWithPinnedCopy( + cardToPin, + stateWithResolvedPins.cardToPinnedCopy, + stateWithResolvedPins.pinnedCardToOriginal, + stateWithResolvedPins.cardStepIndex, + stateWithResolvedPins.cardMetadataMap + ); + } + + return { + ...stateWithResolvedPins, + unresolvedImportedPinnedCards: [...unresolvedPinSet], + }; +} + +/** + * Return the state produced by creating a new pinned copy of the provided card. + * May throw if the card provided has no metadata. + */ +export function buildOrReturnStateWithPinnedCopy( + cardId: NonPinnedCardId, + cardToPinnedCopy: CardToPinnedCard, + pinnedCardToOriginal: PinnedCardToCard, + cardStepIndexMap: CardStepIndexMap, + cardMetadataMap: CardMetadataMap +): ResolvedPinPartialState { + // No-op if the card already has a pinned copy. + if (cardToPinnedCopy.has(cardId)) { + return { + cardToPinnedCopy, + pinnedCardToOriginal, + cardStepIndex: cardStepIndexMap, + cardMetadataMap, + }; + } + + const nextCardToPinnedCopy = new Map(cardToPinnedCopy); + const nextPinnedCardToOriginal = new Map(pinnedCardToOriginal); + const nextCardStepIndexMap = {...cardStepIndexMap}; + const nextCardMetadataMap = {...cardMetadataMap}; + + // Create a pinned copy. Copies step index from the original card. + const pinnedCardId = getPinnedCardId(cardId); + nextCardToPinnedCopy.set(cardId, pinnedCardId); + nextPinnedCardToOriginal.set(pinnedCardId, cardId); + if (cardStepIndexMap.hasOwnProperty(cardId)) { + nextCardStepIndexMap[pinnedCardId] = cardStepIndexMap[cardId]; + } + + const metadata = cardMetadataMap[cardId]; + if (!metadata) { + throw new Error('Cannot pin a card without metadata'); + } + nextCardMetadataMap[pinnedCardId] = metadata; + + return { + cardToPinnedCopy: nextCardToPinnedCopy, + pinnedCardToOriginal: nextPinnedCardToOriginal, + cardStepIndex: nextCardStepIndexMap, + cardMetadataMap: nextCardMetadataMap, + }; +} + +/** + * The maximum number of pins we allow the user to create. This is intentionally + * finite at the moment to mitigate super long URL lengths, until there is more + * durable value storage for pins. + * https://github.com/tensorflow/tensorboard/issues/4242 + */ +const util = { + MAX_PIN_COUNT: 10, +}; + +export function canCreateNewPins(state: MetricsState) { + const pinCountInURL = + state.pinnedCardToOriginal.size + + state.unresolvedImportedPinnedCards.length; + return pinCountInURL < util.MAX_PIN_COUNT; +} + +export const TEST_ONLY = {util}; diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_store_internal_utils_test.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_store_internal_utils_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..112cd1ae45325d0bc95b6bac1ca7098f77783dff --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_store_internal_utils_test.ts @@ -0,0 +1,505 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {DataLoadState} from '../../types/data'; + +import {PluginType} from '../data_source'; +import { + buildTagMetadata, + createCardMetadata, + buildMetricsState, +} from '../testing'; + +import { + buildOrReturnStateWithPinnedCopy, + buildOrReturnStateWithUnresolvedImportedPins, + createPluginDataWithLoadable, + createRunToLoadState, + getCardId, + getPinnedCardId, + getRunIds, + getTimeSeriesLoadable, + canCreateNewPins, + TEST_ONLY, +} from './metrics_store_internal_utils'; +import {ImageTimeSeriesData} from './metrics_types'; + +describe('metrics store utils', () => { + it('getTimeSeriesLoadable properly gets loadables', () => { + const loadables = { + scalars: {runToLoadState: {}, runToSeries: {}}, + histograms: {runToLoadState: {}, runToSeries: {}}, + images: {runToLoadState: {}, runToSeries: {}}, + }; + const timeSeriesData = { + scalars: {tagA: loadables.scalars}, + histograms: {tagB: loadables.histograms}, + images: {tagC: {0: loadables.images}}, + }; + + const foundCases = [ + { + actual: getTimeSeriesLoadable( + timeSeriesData, + PluginType.SCALARS, + 'tagA' + ), + expected: loadables.scalars, + }, + { + actual: getTimeSeriesLoadable( + timeSeriesData, + PluginType.HISTOGRAMS, + 'tagB' + ), + expected: loadables.histograms, + }, + { + actual: getTimeSeriesLoadable( + timeSeriesData, + PluginType.IMAGES, + 'tagC', + 0 + ), + expected: loadables.images, + }, + ]; + + const nullCases = [ + { + actual: getTimeSeriesLoadable( + timeSeriesData, + PluginType.SCALARS, + 'tagB' + ), + expected: null, + }, + { + actual: getTimeSeriesLoadable( + timeSeriesData, + PluginType.IMAGES, + 'tagC', + 9 + ), + expected: null, + }, + ]; + + const cases = [...foundCases, ...nullCases]; + for (const testCase of cases) { + expect(testCase.actual).toBe(testCase.expected); + } + }); + + describe('createPluginDataWithLoadable', () => { + function createSampleTimeSeriesData() { + const loadables = { + scalars: {runToLoadState: {}, runToSeries: {}}, + histograms: {runToLoadState: {}, runToSeries: {}}, + images: {runToLoadState: {}, runToSeries: {}}, + }; + return { + scalars: {tagA: loadables.scalars}, + histograms: {tagB: loadables.histograms}, + images: {tagC: {0: loadables.images}}, + }; + } + + it('creates a copy of an existing loadable', () => { + const prevTimeSeriesData = createSampleTimeSeriesData(); + const pluginData = createPluginDataWithLoadable( + prevTimeSeriesData, + PluginType.SCALARS, + 'tagA' + ); + + const origPluginData = createSampleTimeSeriesData()[PluginType.SCALARS]; + const prevPluginData = prevTimeSeriesData[PluginType.SCALARS]; + expect(pluginData).toEqual(origPluginData); + expect(prevPluginData).toEqual(origPluginData); + expect(pluginData).not.toBe(prevPluginData); + expect(pluginData['tagA']).not.toBe(prevPluginData['tagA']); + }); + + it('creates a new loadable if needed', () => { + const prevTimeSeriesData = createSampleTimeSeriesData(); + const pluginData = createPluginDataWithLoadable( + prevTimeSeriesData, + PluginType.SCALARS, + 'tagUnknown' + ); + + const prevPluginData = prevTimeSeriesData[PluginType.SCALARS]; + expect(pluginData).not.toBe(prevPluginData); + expect(pluginData['tagA']).toBe(prevPluginData['tagA']); + expect(pluginData['tagUnknown']).toEqual({ + runToSeries: {}, + runToLoadState: {}, + }); + }); + + it('creates a copy of an existing image loadable', () => { + const prevTimeSeriesData = createSampleTimeSeriesData(); + const existingSample = 0; + const pluginData = createPluginDataWithLoadable( + prevTimeSeriesData, + PluginType.IMAGES, + 'tagC', + existingSample + ) as ImageTimeSeriesData; + + const origPluginData = createSampleTimeSeriesData()[PluginType.IMAGES]; + const prevPluginData = prevTimeSeriesData[PluginType.IMAGES]; + expect(pluginData).toEqual(origPluginData); + expect(prevPluginData).toEqual(origPluginData); + expect(pluginData).not.toBe(prevPluginData); + expect(pluginData['tagC']).not.toBe(prevPluginData['tagC']); + expect(pluginData['tagC'][existingSample]).not.toBe( + prevPluginData['tagC'][existingSample] + ); + }); + + it('creates a new image loadable if needed', () => { + const prevTimeSeriesData = createSampleTimeSeriesData(); + const newSample = 999; + const pluginData = createPluginDataWithLoadable( + prevTimeSeriesData, + PluginType.IMAGES, + 'tagC', + newSample + ) as ImageTimeSeriesData; + + const existingSample = 0; + const prevPluginData = prevTimeSeriesData[PluginType.IMAGES]; + expect(pluginData).not.toBe(prevPluginData); + expect(pluginData['tagC'][existingSample]).toBe( + prevPluginData['tagC'][existingSample] + ); + expect(pluginData['tagC'][newSample]).toEqual({ + runToSeries: {}, + runToLoadState: {}, + }); + }); + }); + + describe('getCardId', () => { + it('creates the same id only when metadata match', () => { + const sameId1 = getCardId({ + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }); + const sameId2 = getCardId({ + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }); + const id3 = getCardId({ + plugin: PluginType.SCALARS, + tag: 'tag-different', + runId: null, + }); + expect(sameId1).toBe(sameId2); + expect(sameId1).not.toBe(id3); + }); + }); + + describe('createRunToLoadState', () => { + it('creates an empty object', () => { + expect(createRunToLoadState(DataLoadState.LOADING, [])).toEqual({}); + }); + + it('creates a new object from runs', () => { + expect( + createRunToLoadState(DataLoadState.LOADING, ['run1', 'run2']) + ).toEqual({ + run1: DataLoadState.LOADING, + run2: DataLoadState.LOADING, + }); + }); + + it('partially reuses previous load state', () => { + const result = createRunToLoadState( + DataLoadState.NOT_LOADED, + ['run2', 'run3'], + { + run1: DataLoadState.LOADED, + run2: DataLoadState.LOADED, + } + ); + expect(result).toEqual({ + run1: DataLoadState.LOADED, + run2: DataLoadState.NOT_LOADED, + run3: DataLoadState.NOT_LOADED, + }); + }); + }); + + describe('getRunIds', () => { + it('returns empty when no run ids exist', () => { + expect( + getRunIds( + { + ...buildTagMetadata(), + [PluginType.SCALARS]: { + tagDescriptions: {}, + tagToRuns: {tagA: []}, + }, + }, + PluginType.SCALARS, + 'tagA' + ) + ).toEqual([]); + }); + + it('returns empty when arguments do not match store structure', () => { + expect( + getRunIds( + { + ...buildTagMetadata(), + [PluginType.SCALARS]: { + tagDescriptions: {}, + tagToRuns: {tagA: []}, + }, + }, + PluginType.SCALARS, + 'unknown tag' + ) + ).toEqual([]); + + // Mismatched plugin type. + expect( + getRunIds( + { + ...buildTagMetadata(), + [PluginType.SCALARS]: { + tagDescriptions: {}, + tagToRuns: {tagA: []}, + }, + }, + PluginType.IMAGES, + 'tagA' + ) + ).toEqual([]); + + // Mismatched sample. + expect( + getRunIds( + { + ...buildTagMetadata(), + [PluginType.IMAGES]: { + tagDescriptions: {}, + tagRunSampledInfo: {tagA: {run1: {maxSamplesPerStep: 5}}}, + }, + }, + PluginType.IMAGES, + 'tagA', + 10 /* sample */ + ) + ).toEqual([]); + }); + + it('gets run ids for non-sampled plugin type', () => { + expect( + getRunIds( + { + ...buildTagMetadata(), + [PluginType.SCALARS]: { + tagDescriptions: {}, + tagToRuns: {tagA: ['run1', 'run2']}, + }, + }, + PluginType.SCALARS, + 'tagA' + ) + ).toEqual(['run1', 'run2']); + }); + + it('gets run ids for sampled plugin type', () => { + expect( + getRunIds( + { + ...buildTagMetadata(), + [PluginType.IMAGES]: { + tagDescriptions: {}, + tagRunSampledInfo: { + tagA: { + run1: {maxSamplesPerStep: 5}, + run2: {maxSamplesPerStep: 1}, + run3: {maxSamplesPerStep: 5}, + }, + tagB: { + run4: {maxSamplesPerStep: 5}, + }, + }, + }, + }, + PluginType.IMAGES, + 'tagA', + 4 /* sample */ + ) + ).toEqual(['run1', 'run3']); + }); + }); + + describe('buildOrReturnStateWithUnresolvedImportedPins', () => { + it('resolves imported pins', () => { + const matchingInfo = {plugin: PluginType.SCALARS, tag: 'accuracy'}; + const nonMatchingInfo = {plugin: PluginType.SCALARS, tag: 'accuracy2'}; + const result = buildOrReturnStateWithUnresolvedImportedPins( + [matchingInfo, nonMatchingInfo], + ['card1'], + {card1: {plugin: PluginType.SCALARS, tag: 'accuracy', runId: null}}, + new Map(), + new Map(), + {card1: 2} + ); + + const pinnedCardId = getPinnedCardId('card1'); + expect(result.unresolvedImportedPinnedCards).toEqual([nonMatchingInfo]); + expect(result.cardToPinnedCopy).toEqual( + new Map([['card1', pinnedCardId]]) + ); + expect(result.pinnedCardToOriginal).toEqual( + new Map([[pinnedCardId, 'card1']]) + ); + }); + }); + + describe('buildOrReturnStateWithPinnedCopy', () => { + it('adds a pinned copy properly', () => { + const { + cardToPinnedCopy, + pinnedCardToOriginal, + cardStepIndex, + cardMetadataMap, + } = buildOrReturnStateWithPinnedCopy( + 'card1', + new Map(), + new Map(), + {card1: 2}, + {card1: createCardMetadata()} + ); + const pinnedCardId = getPinnedCardId('card1'); + + expect(cardToPinnedCopy).toEqual(new Map([['card1', pinnedCardId]])); + expect(pinnedCardToOriginal).toEqual(new Map([[pinnedCardId, 'card1']])); + expect(cardStepIndex).toEqual({ + card1: 2, + [pinnedCardId]: 2, + }); + expect(cardMetadataMap).toEqual({ + card1: createCardMetadata(), + [pinnedCardId]: createCardMetadata(), + }); + }); + + it('throws if the original card does not have metadata', () => { + expect(() => { + buildOrReturnStateWithPinnedCopy('card1', new Map(), new Map(), {}, {}); + }).toThrow(); + }); + + it('no-ops if the card already has a pinned copy', () => { + const cardToPinnedCopy = new Map([['card1', 'card-pin1']]); + const pinnedCardToOriginal = new Map([['card-pin1', 'card1']]); + const cardStepIndexMap = {}; + const cardMetadataMap = {card1: createCardMetadata()}; + const originals = { + cardToPinnedCopy: new Map(cardToPinnedCopy), + pinnedCardToOriginal: new Map(pinnedCardToOriginal), + cardStepIndexMap: {...cardStepIndexMap}, + cardMetadataMap: {...cardMetadataMap}, + }; + + const result = buildOrReturnStateWithPinnedCopy( + 'card1', + cardToPinnedCopy, + pinnedCardToOriginal, + cardStepIndexMap, + cardMetadataMap + ); + + expect(result.cardToPinnedCopy).toEqual(originals.cardToPinnedCopy); + expect(result.pinnedCardToOriginal).toEqual( + originals.pinnedCardToOriginal + ); + expect(result.cardStepIndex).toEqual(originals.cardStepIndexMap); + expect(result.cardMetadataMap).toEqual(originals.cardMetadataMap); + }); + }); + + describe('canCreateNewPins', () => { + const originalMaxPinCount = TEST_ONLY.util.MAX_PIN_COUNT; + + afterEach(() => { + TEST_ONLY.util.MAX_PIN_COUNT = originalMaxPinCount; + }); + + it('returns true when pins are under the limit', () => { + TEST_ONLY.util.MAX_PIN_COUNT = 3; + const state = buildMetricsState({ + pinnedCardToOriginal: new Map([['pinnedCard1', 'card1']]), + unresolvedImportedPinnedCards: [ + {plugin: PluginType.SCALARS, tag: 'loss'}, + ], + }); + + expect(canCreateNewPins(state)).toBe(true); + }); + + it('returns false when resolved pins reaches the limit', () => { + TEST_ONLY.util.MAX_PIN_COUNT = 3; + const state = buildMetricsState({ + pinnedCardToOriginal: new Map([ + ['pinnedCard1', 'card1'], + ['pinnedCard2', 'card2'], + ['pinnedCard3', 'card3'], + ]), + unresolvedImportedPinnedCards: [], + }); + + expect(canCreateNewPins(state)).toBe(false); + }); + + it('returns false when unresolved pins reaches the limit', () => { + TEST_ONLY.util.MAX_PIN_COUNT = 3; + const state = buildMetricsState({ + pinnedCardToOriginal: new Map(), + unresolvedImportedPinnedCards: [ + {plugin: PluginType.SCALARS, tag: 'loss1'}, + {plugin: PluginType.SCALARS, tag: 'loss2'}, + {plugin: PluginType.SCALARS, tag: 'loss3'}, + ], + }); + + expect(canCreateNewPins(state)).toBe(false); + }); + + it('returns false when pins + unresolved pins reaches the limit', () => { + TEST_ONLY.util.MAX_PIN_COUNT = 3; + const state = buildMetricsState({ + pinnedCardToOriginal: new Map([ + ['pinnedCard1', 'card1'], + ['pinnedCard2', 'card2'], + ]), + unresolvedImportedPinnedCards: [ + {plugin: PluginType.SCALARS, tag: 'loss1'}, + ], + }); + + expect(canCreateNewPins(state)).toBe(false); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_types.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..79e4ced14bea46a2beced44e2cc48a401037f4c8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/store/metrics_types.ts @@ -0,0 +1,186 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {DataLoadState} from '../../types/data'; + +import {RouteContextedState} from '../../app_routing/route_contexted_reducer_helper'; +import { + HistogramStepDatum, + ImageStepDatum, + NonSampledPluginType, + PluginType, + SampledPluginType, + ScalarStepDatum, + TagToDescription, + TagToRunSampledInfo, +} from '../data_source'; +import { + CardId, + CardUniqueInfo, + CardMetadata, + HistogramMode, + NonPinnedCardId, + PinnedCardId, + TooltipSort, + XAxisType, +} from '../types'; + +export const METRICS_FEATURE_KEY = 'metrics'; + +type RunId = string; + +type tagToRunIds = Record; + +export interface NonSampledPluginTagMetadata { + tagDescriptions: TagToDescription; + tagToRuns: tagToRunIds; +} + +export interface SampledPluginTagMetadata { + tagDescriptions: TagToDescription; + tagRunSampledInfo: TagToRunSampledInfo; +} + +export type TagMetadata = { + [NSPT in NonSampledPluginType]: NonSampledPluginTagMetadata; +} & + { + [SPT in SampledPluginType]: SampledPluginTagMetadata; + }; + +export interface StepDatum { + [PluginType.SCALARS]: ScalarStepDatum; + [PluginType.HISTOGRAMS]: HistogramStepDatum; + [PluginType.IMAGES]: ImageStepDatum; +} + +export interface RunToSeries { + [runId: string]: StepDatum[T][]; +} + +export interface RunToLoadState { + [runId: string]: DataLoadState; +} + +interface BaseTimeSeriesLoadable { + runToSeries: RunToSeries; + runToLoadState: RunToLoadState; +} + +export type ScalarTimeSeriesLoadable = BaseTimeSeriesLoadable< + PluginType.SCALARS +>; +export type HistogramTimeSeriesLoadable = BaseTimeSeriesLoadable< + PluginType.HISTOGRAMS +>; +export type ImageTimeSeriesLoadable = BaseTimeSeriesLoadable; + +export type TimeSeriesLoadables = { + [PluginType.SCALARS]: ScalarTimeSeriesLoadable; + [PluginType.HISTOGRAMS]: HistogramTimeSeriesLoadable; + [PluginType.IMAGES]: ImageTimeSeriesLoadable; +}; + +export type TimeSeriesLoadable = TimeSeriesLoadables[PluginType]; + +export interface ScalarTimeSeriesData { + [tag: string]: ScalarTimeSeriesLoadable; +} + +export interface HistogramTimeSeriesData { + [tag: string]: HistogramTimeSeriesLoadable; +} + +export interface ImageTimeSeriesData { + [tag: string]: {[sample: number]: ImageTimeSeriesLoadable}; +} + +export type TimeSeriesData = { + [PluginType.SCALARS]: ScalarTimeSeriesData; + [PluginType.HISTOGRAMS]: HistogramTimeSeriesData; + [PluginType.IMAGES]: ImageTimeSeriesData; +}; + +export type CardMetadataMap = Record< + NonPinnedCardId | PinnedCardId, + CardMetadata +>; + +/** + * Map from cards to their step index into the time series. Step index may be + * null when the time series becomes empty. + */ +export type CardStepIndexMap = Record< + NonPinnedCardId | PinnedCardId, + number | null +>; + +export type CardToPinnedCard = Map; + +export type PinnedCardToCard = Map; + +export interface MetricsRoutefulState { + tagMetadataLoaded: DataLoadState; + tagMetadata: TagMetadata; + // A list of card ids in the main content area, excluding pinned copies. + cardList: NonPinnedCardId[]; + cardToPinnedCopy: CardToPinnedCard; + pinnedCardToOriginal: PinnedCardToCard; + /** + * Pinned cards imported from storage that do not yet have a corresponding + * card (e.g. tag metadata might not be loaded yet). Resolving an imported + * card requires comparing its CardUniqueInfo to a resolved card. After + * resolution, it is removed from this collection and added to the + * appropriate data structures (e.g. pinnedCardToOriginal). + * + * These may become stale if runs are deleted from the experiment. + */ + unresolvedImportedPinnedCards: CardUniqueInfo[]; + cardMetadataMap: CardMetadataMap; + cardStepIndex: CardStepIndexMap; + tagFilter: string; + tagGroupExpanded: Map; +} + +export interface MetricsRoutelessState { + timeSeriesData: TimeSeriesData; + settings: { + tooltipSort: TooltipSort; + ignoreOutliers: boolean; + xAxisType: XAxisType; + scalarSmoothing: number; + /** + * A non-negative, unitless number. A value of 5000 corresponds to 500% + * increased brightness from normal. + */ + imageBrightnessInMilli: number; + /** + * A non-negative, unitless number. A value of 5000 corresponds to 500% + * increased contrast from normal. + */ + imageContrastInMilli: number; + imageShowActualSize: boolean; + histogramMode: HistogramMode; + }; + visibleCards: Set; +} + +export type MetricsState = RouteContextedState< + MetricsRoutefulState, + MetricsRoutelessState +>; + +export interface State { + [METRICS_FEATURE_KEY]?: MetricsState; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/testing.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/testing.ts new file mode 100644 index 0000000000000000000000000000000000000000..132e83fee59e70dae872ef17c8d800c2bbfcb5ad --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/testing.ts @@ -0,0 +1,304 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {DataLoadState} from '../types/data'; +import {of} from 'rxjs'; + +import {State} from '../app_state'; +import {HistogramMode} from '../widgets/histogram/histogram_types'; + +import { + HistogramStepDatum, + ImageId, + ImageStepDatum, + MetricsDataSource, + PluginType, + ScalarStepDatum, + TagMetadata as DataSourceTagMetadata, + TimeSeriesRequest, +} from './data_source'; +import { + METRICS_FEATURE_KEY, + MetricsState, + TagMetadata, + TimeSeriesData, +} from './store'; +import * as selectors from './store/metrics_selectors'; +import {RunToSeries, StepDatum} from './store/metrics_types'; +import {CardId, CardMetadata, TooltipSort, XAxisType} from './types'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +export function buildMetricsSettingsState( + overrides?: Partial +): MetricsState['settings'] { + return { + tooltipSort: TooltipSort.NEAREST, + ignoreOutliers: false, + xAxisType: XAxisType.WALL_TIME, + scalarSmoothing: 0.3, + imageBrightnessInMilli: 123, + imageContrastInMilli: 123, + imageShowActualSize: true, + histogramMode: HistogramMode.OFFSET, + ...overrides, + }; +} + +function buildBlankState(): MetricsState { + return { + tagMetadataLoaded: DataLoadState.NOT_LOADED, + tagMetadata: { + scalars: { + tagDescriptions: {}, + tagToRuns: {}, + }, + histograms: { + tagDescriptions: {}, + tagToRuns: {}, + }, + images: { + tagDescriptions: {}, + tagRunSampledInfo: {}, + }, + }, + timeSeriesData: { + scalars: {}, + histograms: {}, + images: {}, + }, + settings: buildMetricsSettingsState(), + cardList: [], + cardToPinnedCopy: new Map(), + pinnedCardToOriginal: new Map(), + unresolvedImportedPinnedCards: [], + cardMetadataMap: {}, + cardStepIndex: {}, + visibleCards: new Set(), + tagFilter: '', + tagGroupExpanded: new Map(), + }; +} + +export function buildMetricsState( + overrides?: Partial +): MetricsState { + return {...buildBlankState(), ...overrides}; +} + +export function appStateFromMetricsState(metricsState?: MetricsState): State { + return { + [METRICS_FEATURE_KEY]: metricsState || buildMetricsState(), + }; +} + +export function buildTagMetadata(): TagMetadata { + return { + scalars: { + tagDescriptions: {}, + tagToRuns: {}, + }, + histograms: { + tagDescriptions: {}, + tagToRuns: {}, + }, + images: { + tagDescriptions: {}, + tagRunSampledInfo: {}, + }, + }; +} + +export function buildDataSourceTagMetadata(): DataSourceTagMetadata { + return { + scalars: { + tagDescriptions: {}, + runTagInfo: {}, + }, + histograms: { + tagDescriptions: {}, + runTagInfo: {}, + }, + images: { + tagDescriptions: {}, + tagRunSampledInfo: {}, + }, + }; +} + +export function createScalarStepData(): ScalarStepDatum[] { + return [ + {step: 0, wallTime: 123, value: 42}, + {step: 1, wallTime: 124, value: -42}, + {step: 99, wallTime: 125, value: 0}, + ]; +} + +export function createHistogramStepData(): HistogramStepDatum[] { + return [ + {step: 0, wallTime: 123, bins: [{min: 0, max: 100, count: 42}]}, + {step: 1, wallTime: 124, bins: [{min: 0, max: 100, count: 42}]}, + {step: 99, wallTime: 125, bins: [{min: 0, max: 100, count: 42}]}, + ]; +} + +export function createImageStepData(): ImageStepDatum[] { + return [ + {step: 0, wallTime: 123, imageId: ''}, + {step: 1, wallTime: 124, imageId: ''}, + {step: 99, wallTime: 125, imageId: ''}, + ]; +} + +function createStepData(plugin: PluginType) { + switch (plugin) { + case PluginType.SCALARS: + return createScalarStepData(); + case PluginType.HISTOGRAMS: + return createHistogramStepData(); + case PluginType.IMAGES: + return createImageStepData(); + default: + throw new Error('Cannot create step data for unknown plugin type.'); + } +} + +export function buildTimeSeriesData(): TimeSeriesData { + return { + scalars: {}, + histograms: {}, + images: {}, + }; +} + +export function createTimeSeriesData(): TimeSeriesData { + return { + scalars: { + tagA: { + runToSeries: {run1: createScalarStepData()}, + runToLoadState: {run1: DataLoadState.FAILED}, + }, + }, + histograms: { + tagB: { + runToSeries: {run1: createHistogramStepData()}, + runToLoadState: {run1: DataLoadState.FAILED}, + }, + }, + images: { + tagC: { + 9: { + runToSeries: {run1: createImageStepData()}, + runToLoadState: {run1: DataLoadState.FAILED}, + }, + }, + }, + }; +} + +export function createCardMetadata(plugin?: PluginType): CardMetadata { + switch (plugin) { + case PluginType.IMAGES: + return {plugin, tag: 'tagA', runId: 'run1', sample: 999}; + case PluginType.HISTOGRAMS: + return { + plugin, + tag: 'tagA', + runId: 'run1', + }; + case PluginType.SCALARS: + default: + return { + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }; + } +} + +export function provideMockCardSeriesData( + storeSelectSpy: jasmine.Spy, + plugin: PluginType, + cardId: CardId, + metadataOverride?: Partial | null, + timeSeries?: StepDatum[typeof plugin][] | null, + stepIndex: number | null = 0 +) { + const cardMetadata = {...createCardMetadata(plugin), ...metadataOverride}; + let runToSeries = null; + if (timeSeries !== null) { + runToSeries = { + [cardMetadata.runId as string]: timeSeries || createStepData(plugin), + }; + } + + storeSelectSpy + .withArgs(selectors.getCardMetadata, cardId) + .and.returnValue(of(cardMetadata)); + storeSelectSpy + .withArgs(selectors.getCardTimeSeries, cardId) + .and.returnValue(of(runToSeries)); + storeSelectSpy + .withArgs(selectors.getCardStepIndex, cardId) + .and.returnValue(of(stepIndex)); +} + +export function provideMockCardRunToSeriesData( + storeSelectSpy: jasmine.Spy, + plugin: PluginType, + cardId: CardId, + metadataOverride?: Partial | null, + runToSeries?: RunToSeries | null, + stepIndex: number | null = 0 +) { + const cardMetadata = {...createCardMetadata(plugin), ...metadataOverride}; + if (runToSeries !== null) { + runToSeries = runToSeries || { + [cardMetadata.runId as string]: createStepData(plugin), + }; + } + + storeSelectSpy + .withArgs(selectors.getCardMetadata, cardId) + .and.returnValue(of(cardMetadata)); + storeSelectSpy + .withArgs(selectors.getCardTimeSeries, cardId) + .and.returnValue(of(runToSeries)); + storeSelectSpy + .withArgs(selectors.getCardStepIndex, cardId) + .and.returnValue(of(stepIndex)); +} + +@Injectable() +export class TestingMetricsDataSource implements MetricsDataSource { + fetchTagMetadata(experimentIds: string[]) { + return of(buildDataSourceTagMetadata()); + } + + fetchTimeSeries(requests: TimeSeriesRequest[]) { + return of([]); + } + + imageUrl(imageId: ImageId) { + return ''; + } +} + +export function provideTestingMetricsDataSource() { + return [ + TestingMetricsDataSource, + {provide: MetricsDataSource, useExisting: TestingMetricsDataSource}, + ]; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/types.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..cc8102e7f57bbe5aa3630222ec4d9dee124326ee --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/types.ts @@ -0,0 +1,79 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {HistogramMode} from '../widgets/histogram/histogram_types'; +import {TooltipSortingMethod} from '../widgets/line_chart/polymer_interop_types'; + +import {PluginType} from './data_source'; + +export {HistogramMode}; +export {TooltipSortingMethod as TooltipSort}; + +export enum XAxisType { + STEP, + RELATIVE, + WALL_TIME, +} + +export interface CardMetadata { + plugin: PluginType; + tag: string; + sample?: number; + + /** + * A `null` runId indicates all runs. + */ + runId: string | null; +} + +/** + * Identifier for a card which, itself, is not a pinned copy of another card. + * Views may treat a non-pinned card as having "truthy pin state" if another + * `PinnedCardId` is associated to it. + */ +export type NonPinnedCardId = string; + +export type PinnedCardId = string; + +/** + * A unique identifier to a specific card instance in the UI. This is an opaque + * ID, meaning that consumers should never peer into/parse it and never assume + * that it will always be a string. + */ +export type CardId = NonPinnedCardId | PinnedCardId; + +export type CardIdWithMetadata = CardMetadata & { + cardId: CardId; +}; + +/** + * The most minimal representation of a card that uniquely identifies it across + * a browser session. This information may be persisted in storage, retrieved, + * and used to match against an existing card with the same metadata. + */ +export interface CardUniqueInfo { + plugin: string; + tag: string; + runId?: string; + sample?: number; +} + +/** + * The metrics-related state created by deserializing a URL. + */ +export interface URLDeserializedState { + metrics: { + pinnedCards: CardUniqueInfo[]; + }; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/BUILD b/saved_models/tensorboard/tensorboard/webapp/metrics/views/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..2e46740599b43f28c99535c18ad5572de4239373 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/BUILD @@ -0,0 +1,75 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_sass_library", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +tf_sass_library( + name = "metrics_common_styles", + srcs = [ + "_common.scss", + ], +) + +tf_sass_binary( + name = "metrics_container_styles", + src = "metrics_container.scss", +) + +ng_module( + name = "views", + srcs = [ + "metrics_container.ts", + "metrics_views_module.ts", + ], + assets = [ + ":metrics_container_styles", + ], + deps = [ + "//tensorboard/webapp/metrics/views/main_view", + "//tensorboard/webapp/metrics/views/right_pane", + "//tensorboard/webapp/runs/views/runs_selector", + "@npm//@angular/core", + ], +) + +tf_ts_library( + name = "types", + srcs = [ + "metrics_view_types.ts", + ], + deps = ["//tensorboard/webapp/metrics:types"], +) + +tf_ts_library( + name = "utils", + srcs = [ + "utils.ts", + ], + deps = [ + ":types", + "//tensorboard/webapp/util:types", + ], +) + +tf_ts_library( + name = "views_test", + testonly = True, + srcs = [ + "metrics_container_test.ts", + "utils_test.ts", + ], + deps = [ + ":types", + ":utils", + ":views", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_platform_browser_animations", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/metrics/data_source", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/_common.scss b/saved_models/tensorboard/tensorboard/webapp/metrics/views/_common.scss new file mode 100644 index 0000000000000000000000000000000000000000..967522a049c2d4869febbfba26777c75f23c6053 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/_common.scss @@ -0,0 +1,39 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +$metrics-preferred-gap: 16px; + +// TODO(psybuzz): This is likely not metrics-specific. Consider moving to OSS in +// webapp/theme/_tb_theme.template.scss +$metrics-button-background-color-on-gray: #fff; + +$metrics-min-card-width: 335px; +$metrics-min-card-height: 320px; + +@mixin metrics-card-group-toolbar { + background-color: #fff; + height: 42px; + padding: 0 16px; +} + +@mixin metrics-card-group-title { + font-size: 14px; + font-weight: 500; +} + +@mixin metrics-card-group-count-text { + font-size: 12px; + font-weight: 400; + color: mat-color($tb-foreground, secondary-text); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/BUILD b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..9e8d1b5604daf676fad3820147d75b795bbf0b8b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/BUILD @@ -0,0 +1,247 @@ +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +tf_sass_binary( + name = "card_view_styles", + src = "card_view_container.scss", +) + +ng_module( + name = "card_renderer", + srcs = [ + "card_lazy_loader.ts", + "card_renderer_module.ts", + "card_view_component.ts", + "card_view_container.ts", + ], + assets = [ + ":card_view_styles", + "card_view_component.ng.html", + ], + deps = [ + ":histogram_card", + ":image_card", + ":scalar_card", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/metrics:types", + "//tensorboard/webapp/metrics/actions", + "//tensorboard/webapp/metrics/data_source", + "//tensorboard/webapp/types:ui", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_sass_binary( + name = "histogram_card_styles", + src = "histogram_card_component.scss", + deps = [ + "//tensorboard/webapp/metrics/views:metrics_common_styles", + ], +) + +ng_module( + name = "histogram_card", + srcs = [ + "histogram_card_component.ts", + "histogram_card_container.ts", + "histogram_card_module.ts", + ], + assets = [ + ":histogram_card_styles", + "histogram_card_component.ng.html", + ], + deps = [ + ":run_name", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/angular:expect_angular_material_progress_spinner", + "//tensorboard/webapp/metrics:types", + "//tensorboard/webapp/metrics/data_source", + "//tensorboard/webapp/metrics/store", + "//tensorboard/webapp/metrics/views:types", + "//tensorboard/webapp/metrics/views:utils", + "//tensorboard/webapp/types", + "//tensorboard/webapp/types:ui", + "//tensorboard/webapp/widgets:resize_detector", + "//tensorboard/webapp/widgets/histogram", + "//tensorboard/webapp/widgets/histogram:types", + "//tensorboard/webapp/widgets/text:truncated_path", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//@types/resize-observer-browser", + "@npm//rxjs", + ], +) + +tf_sass_binary( + name = "image_card_styles", + src = "image_card_component.scss", + deps = [ + "//tensorboard/webapp/metrics/views:metrics_common_styles", + ], +) + +ng_module( + name = "image_card", + srcs = [ + "image_card_component.ts", + "image_card_container.ts", + "image_card_module.ts", + ], + assets = [ + ":image_card_styles", + "image_card_component.ng.html", + ], + deps = [ + ":run_name", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/angular:expect_angular_material_progress_spinner", + "//tensorboard/webapp/angular:expect_angular_material_slider", + "//tensorboard/webapp/metrics:types", + "//tensorboard/webapp/metrics/actions", + "//tensorboard/webapp/metrics/data_source", + "//tensorboard/webapp/metrics/store", + "//tensorboard/webapp/metrics/views:types", + "//tensorboard/webapp/metrics/views:utils", + "//tensorboard/webapp/types", + "//tensorboard/webapp/types:ui", + "//tensorboard/webapp/widgets/text:truncated_path", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +ng_module( + name = "run_name", + srcs = [ + "run_name_component.ts", + "run_name_container.ts", + "run_name_module.ts", + ], + deps = [ + ":utils", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "utils", + srcs = [ + "utils.ts", + ], + deps = [ + "//tensorboard/webapp/runs/store:types", + ], +) + +tf_sass_binary( + name = "scalar_card_styles", + src = "scalar_card_component.scss", + deps = [ + "//tensorboard/webapp/metrics/views:metrics_common_styles", + ], +) + +ng_module( + name = "scalar_card", + srcs = [ + "scalar_card_component.ts", + "scalar_card_container.ts", + "scalar_card_module.ts", + ], + assets = [ + ":scalar_card_styles", + "scalar_card_component.ng.html", + ], + deps = [ + ":utils", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/angular:expect_angular_material_menu", + "//tensorboard/webapp/angular:expect_angular_material_progress_spinner", + "//tensorboard/webapp/metrics:types", + "//tensorboard/webapp/metrics/data_source", + "//tensorboard/webapp/metrics/store", + "//tensorboard/webapp/metrics/views:types", + "//tensorboard/webapp/metrics/views:utils", + "//tensorboard/webapp/runs/store:types", + "//tensorboard/webapp/types", + "//tensorboard/webapp/types:ui", + "//tensorboard/webapp/util:value_formatter", + "//tensorboard/webapp/widgets:resize_detector", + "//tensorboard/webapp/widgets/line_chart", + "//tensorboard/webapp/widgets/text:truncated_path", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//@types/resize-observer-browser", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "card_renderer_tests", + testonly = True, + srcs = [ + "card_lazy_loader_test.ts", + "card_view_test.ts", + "histogram_card_test.ts", + "image_card_test.ts", + "run_name_test.ts", + "scalar_card_test.ts", + "utils_test.ts", + ], + deps = [ + ":card_renderer", + ":histogram_card", + ":image_card", + ":run_name", + ":scalar_card", + ":utils", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_cdk_overlay", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_menu", + "//tensorboard/webapp/angular:expect_angular_material_progress_spinner", + "//tensorboard/webapp/angular:expect_angular_material_slider", + "//tensorboard/webapp/angular:expect_angular_platform_browser_animations", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/metrics:test_lib", + "//tensorboard/webapp/metrics:types", + "//tensorboard/webapp/metrics/actions", + "//tensorboard/webapp/metrics/data_source", + "//tensorboard/webapp/metrics/store", + "//tensorboard/webapp/runs/store:testing", + "//tensorboard/webapp/runs/store:types", + "//tensorboard/webapp/testing:mat_icon", + "//tensorboard/webapp/types", + "//tensorboard/webapp/types:ui", + "//tensorboard/webapp/widgets:resize_detector_testing", + "//tensorboard/webapp/widgets/histogram:types", + "//tensorboard/webapp/widgets/line_chart", + "//tensorboard/webapp/widgets/text:truncated_path", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//@types/resize-observer-browser", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_lazy_loader.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_lazy_loader.ts new file mode 100644 index 0000000000000000000000000000000000000000..1723cc656df194f692b0b145204748abbd7b850c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_lazy_loader.ts @@ -0,0 +1,188 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Directive, ElementRef, Input, OnDestroy, OnInit} from '@angular/core'; +import {Store} from '@ngrx/store'; + +import {State} from '../../../app_state'; +import * as actions from '../../actions'; +import {CardId} from '../../types'; + +const elementToCardIdMap = new WeakMap(); + +type CardObserverCallback = ( + enteredCards: Set, + exitedCards: Set +) => void; + +export class CardObserver { + private intersectionObserver?: IntersectionObserver; + private intersectionCallback?: CardObserverCallback; + private readonly destroyedTargets = new Set(); + + /** + * Buffer determines how far a card can be, beyond the root's bounding rect, + * and still be loaded. It corresponds to an IntersectionObserver's + * 'rootMargin'. For example, "50px 0 100px 0"' will treat observed elements + * as 'intersecting' when they come within 50px of the root top or within + * 100px of the root's bottom. Adding buffer allows nearby, offscreen cards + * to load, preventing blank cards from being seen too often. + * + * If positive 'rootMargin' is provided, a scrollable 'root' is required. + * + * https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverinit-rootmargin + * https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API + */ + constructor( + private readonly root?: Element, + private readonly buffer?: string + ) {} + + initialize(intersectionCallback: CardObserverCallback) { + if (this.intersectionObserver) { + return; + } + this.intersectionCallback = intersectionCallback; + this.intersectionObserver = new IntersectionObserver( + this.onCardIntersection.bind(this), + {threshold: 0, root: this.root, rootMargin: this.buffer} + ); + } + + add(target: Element) { + if (this.ensureInitialized()) { + this.intersectionObserver!.observe(target); + } + } + + /** + * Adds a target to a list of elements to-be-destroyed, so that we can notify + * listeners that they become 'exitedCards' before unobserving it. + */ + willDestroy(target: Element) { + if (this.ensureInitialized()) { + this.destroyedTargets.add(target); + } + } + + private ensureInitialized() { + if (!this.intersectionObserver) { + throw new Error('CardObserver must be initialized before use'); + } + return true; + } + + private onCardIntersection(entries: IntersectionObserverEntry[]) { + /** + * Within a single callback firing, `entries` may include separate entries + * representing the same target element entering (isIntersecting) and + * leaving (!isIntersecting). To account for this, we sort entries by + * increasing timestamp and respect the latest one. + */ + entries.sort((a, b) => a.time - b.time); + + const enteredCards = new Set(); + const exitedCards = new Set(); + for (const entry of entries) { + const target = entry.target; + const cardId = elementToCardIdMap.get(target); + if (!cardId) { + throw new Error( + 'A CardObserver element must be associated with a CardId' + ); + } + + if (entry.isIntersecting) { + enteredCards.add(cardId); + exitedCards.delete(cardId); + } else { + enteredCards.delete(cardId); + exitedCards.add(cardId); + } + + /** + * Cleanup destroyed targets. Defend against speculative case when + * - A enters viewport + * - B added to destroyed targets + * - Callback fires for just A, unobserving B + * - B's callback never fires + */ + if (this.destroyedTargets.has(target) && !entry.isIntersecting) { + this.destroyedTargets.delete(target); + this.intersectionObserver!.unobserve(target); + } + } + this.intersectionCallback!(enteredCards, exitedCards); + } + + onCardIntersectionForTest(entries: IntersectionObserverEntry[]) { + this.onCardIntersection(entries); + } +} + +/** + * A directive applied to elements that represent a card container. When the + * element is ready to be loaded, this is responsible for marking cardId as + * visible. + * + * Card container: + * + *

    + * + * Card container that can load within 100px of a scrollable element's bounding + * box: + * + *
    + */ +@Directive({ + selector: '[cardLazyLoader]', +}) +export class CardLazyLoader implements OnInit, OnDestroy { + @Input('cardLazyLoader') cardId!: CardId; + @Input() cardObserver?: CardObserver; + + constructor( + private readonly host: ElementRef, + private readonly store: Store + ) {} + + onCardIntersection(enteredCards: Set, exitedCards: Set) { + this.store.dispatch( + actions.cardVisibilityChanged({enteredCards, exitedCards}) + ); + } + + ngOnInit() { + elementToCardIdMap.set(this.host.nativeElement, this.cardId); + + if (!this.cardObserver) { + this.cardObserver = new CardObserver(); + } + this.cardObserver.initialize(this.onCardIntersection.bind(this)); + this.cardObserver.add(this.host.nativeElement); + } + + ngOnDestroy() { + if (this.cardObserver) { + this.cardObserver.willDestroy(this.host.nativeElement); + } + } + + hostForTest() { + return this.host; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_lazy_loader_test.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_lazy_loader_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..1b1da79b9591f1910d638e6566ee0e877adc49bd --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_lazy_loader_test.ts @@ -0,0 +1,175 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, Input, NO_ERRORS_SCHEMA} from '@angular/core'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Action, Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import {State} from '../../../app_state'; + +import * as actions from '../../actions'; +import {appStateFromMetricsState, buildMetricsState} from '../../testing'; +import {CardId} from '../../types'; +import {CardLazyLoader, CardObserver} from '../card_renderer/card_lazy_loader'; + +@Component({ + selector: 'card-view', + template: `{{ cardId }}`, +}) +class TestableCard { + @Input() cardId!: CardId; +} + +interface TestableCardConfig { + cardId: CardId; + visible: boolean; +} + +@Component({ + selector: 'testable-cards', + template: ` + + + + `, +}) +class TestableCards { + @Input() configs!: TestableCardConfig[]; +} + +describe('card view test', () => { + let store: MockStore; + let dispatchedActions: Action[] = []; + let observeSpy: jasmine.Spy; + let unobserveSpy: jasmine.Spy; + + function buildIntersectionObserverEntry( + override: Partial & {target: Element} + ): IntersectionObserverEntry { + return { + time: 0, + isIntersecting: false, + boundingClientRect: new DOMRectReadOnly(), + intersectionRatio: 0, + intersectionRect: new DOMRectReadOnly(), + rootBounds: new DOMRectReadOnly(), + ...override, + }; + } + + function getCardLazyLoaders( + fixture: ComponentFixture + ): CardLazyLoader[] { + const cardDebugElements = fixture.debugElement.queryAll( + By.css('card-view') + ); + return cardDebugElements.map((debugElement) => { + return debugElement.injector.get(CardLazyLoader); + }); + } + + function simulateIntersection( + cardObserver: CardObserver, + entries: Array & {target: Element}> + ) { + cardObserver.onCardIntersectionForTest( + entries.map(buildIntersectionObserverEntry) + ); + } + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [NoopAnimationsModule], + declarations: [CardLazyLoader, TestableCard, TestableCards], + providers: [ + provideMockStore({ + initialState: appStateFromMetricsState(buildMetricsState()), + }), + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + + dispatchedActions = []; + store = TestBed.inject>(Store) as MockStore; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + dispatchedActions.push(action); + }); + + observeSpy = spyOn(IntersectionObserver.prototype, 'observe'); + unobserveSpy = spyOn(IntersectionObserver.prototype, 'unobserve'); + }); + + it('tracks card removal', () => { + const fixture = TestBed.createComponent(TestableCards); + fixture.componentInstance.configs = [ + {cardId: 'card1', visible: true}, + ] as TestableCardConfig[]; + fixture.detectChanges(); + + expect(observeSpy).toHaveBeenCalled(); + + const directives = getCardLazyLoaders(fixture); + const cardObserver = directives[0].cardObserver!; + + // Destroy the element. + fixture.componentInstance.configs = [ + {cardId: 'card1', visible: false}, + ] as TestableCardConfig[]; + fixture.detectChanges(); + + // Simulate a pending 'isIntersecting' event. + simulateIntersection(cardObserver, [ + { + time: 10, + target: directives[0].hostForTest().nativeElement, + isIntersecting: true, + }, + ]); + + expect(unobserveSpy).not.toHaveBeenCalled(); + expect(dispatchedActions).toEqual([ + actions.cardVisibilityChanged({ + enteredCards: new Set(['card1']), + exitedCards: new Set(), + }), + ]); + + // Simulate the exiting event. + simulateIntersection(cardObserver, [ + { + time: 20, + target: directives[0].hostForTest().nativeElement, + isIntersecting: false, + }, + ]); + + expect(unobserveSpy).toHaveBeenCalled(); + expect(dispatchedActions).toEqual([ + actions.cardVisibilityChanged({ + enteredCards: new Set(['card1']), + exitedCards: new Set(), + }), + actions.cardVisibilityChanged({ + enteredCards: new Set(), + exitedCards: new Set(['card1']), + }), + ]); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_renderer_module.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_renderer_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..745432931e92865108c7c2c941d4bba11adc7850 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_renderer_module.ts @@ -0,0 +1,35 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; + +import {CardLazyLoader} from './card_lazy_loader'; +import {CardViewComponent} from './card_view_component'; +import {CardViewContainer} from './card_view_container'; +import {HistogramCardModule} from './histogram_card_module'; +import {ImageCardModule} from './image_card_module'; +import {ScalarCardModule} from './scalar_card_module'; + +@NgModule({ + declarations: [CardLazyLoader, CardViewComponent, CardViewContainer], + exports: [CardLazyLoader, CardViewContainer], + imports: [ + CommonModule, + ImageCardModule, + ScalarCardModule, + HistogramCardModule, + ], +}) +export class CardRendererModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_view_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_view_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..a6bb030c786ad7092e643e1227ea0818ab31dfd4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_view_component.ng.html @@ -0,0 +1,50 @@ + + + + + + + + + + +
    Placeholder error for: {{ cardId }}
    +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_view_component.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_view_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..5647a449662faaa04c52a36a7655faadd79064e0 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_view_component.ts @@ -0,0 +1,55 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; + +import {RunColorScale} from '../../../types/ui'; +import {PluginType} from '../../data_source'; +import {CardId} from '../../types'; + +@Component({ + selector: 'card-view-component', + templateUrl: 'card_view_component.ng.html', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CardViewComponent { + readonly PluginType = PluginType; + + @Input() cardId!: CardId; + @Input() groupName!: string | null; + @Input() pluginType!: PluginType; + @Input() runColorScale!: RunColorScale; + + @Output() fullWidthChanged = new EventEmitter(); + @Output() fullHeightChanged = new EventEmitter(); + @Output() pinStateChanged = new EventEmitter(); + + onFullWidthChanged(showFullWidth: boolean) { + this.fullWidthChanged.emit(showFullWidth); + } + + onFullHeightChanged(showFullHeight: boolean) { + this.fullHeightChanged.emit(showFullHeight); + } + + onPinStateChanged() { + this.pinStateChanged.emit(); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_view_container.scss b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_view_container.scss new file mode 100644 index 0000000000000000000000000000000000000000..ffc7242b040e297c1a0179c467895b9a2a8c23f3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_view_container.scss @@ -0,0 +1,21 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +$_background: map-get($tb-theme, background); + +:host { + background-color: mat-color($_background, card); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_view_container.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_view_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..63e5afb8a28f4e8f283c818cd954cb07181c944e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_view_container.ts @@ -0,0 +1,111 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + HostBinding, + Input, +} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {Observable} from 'rxjs'; +import {map, take, throttleTime, withLatestFrom} from 'rxjs/operators'; + +import {State} from '../../../app_state'; +import * as selectors from '../../../selectors'; +import {RunColorScale} from '../../../types/ui'; +import * as actions from '../../actions'; +import {PluginType} from '../../data_source'; +import {CardId} from '../../types'; + +// Since vz-line-chart only updates every 350ms, it does not make sense to +// update the Polymer component more frequently. +// [1]: +// tensorboard/components/vz_line_chart2/vz-line-chart2.js?l=343-360 +const RUN_COLOR_UPDATE_THROTTLE_TIME_IN_MS = 350; + +@Component({ + selector: 'card-view', + template: ` + + + `, + styleUrls: ['card_view_container.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CardViewContainer { + constructor(private readonly store: Store) {} + + @Input() cardId!: CardId; + @Input() groupName!: string | null; + @Input() pluginType!: PluginType; + + @HostBinding('class.full-width') showFullWidth: boolean = false; + @HostBinding('class.full-height') showFullHeight: boolean = false; + + readonly runColorScale$: Observable = this.store + .select(selectors.getRunColorMap) + .pipe( + throttleTime(RUN_COLOR_UPDATE_THROTTLE_TIME_IN_MS, undefined, { + leading: true, + trailing: true, + }), + map((colorMap) => { + return (runId: string) => { + if (!colorMap.hasOwnProperty(runId)) { + throw new Error(`[Color scale] unknown runId: ${runId}.`); + } + return colorMap[runId]; + }; + }) + ); + + onFullWidthChanged(showFullWidth: boolean) { + this.showFullWidth = showFullWidth; + } + + onFullHeightChanged(showFullHeight: boolean) { + this.showFullHeight = showFullHeight; + } + + onPinStateChanged() { + this.store + .select(selectors.getCardPinnedState, this.cardId) + .pipe( + take(1), + withLatestFrom(this.store.select(selectors.getCanCreateNewPins)) + ) + .subscribe(([wasPinned, canCreateNewPins]) => { + this.store.dispatch( + actions.cardPinStateToggled({ + cardId: this.cardId, + canCreateNewPins, + wasPinned, + }) + ); + }); + } +} + +export const TEST_ONLY = { + RUN_COLOR_UPDATE_THROTTLE_TIME_IN_MS, +}; diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_view_test.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_view_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..a0ef4efece3cd63840e6d95cc1e0c0c1c61eb0ee --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/card_view_test.ts @@ -0,0 +1,204 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + Component, + EventEmitter, + Input, + NO_ERRORS_SCHEMA, + Output, +} from '@angular/core'; +import {fakeAsync, flush, TestBed, tick} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Action, Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import {State} from '../../../app_state'; + +import * as selectors from '../../../selectors'; +import {RunColorScale} from '../../../types/ui'; +import * as actions from '../../actions'; +import {MetricsDataSourceModule, PluginType} from '../../data_source'; +import {appStateFromMetricsState, buildMetricsState} from '../../testing'; + +import {CardViewComponent} from './card_view_component'; +import {CardViewContainer, TEST_ONLY} from './card_view_container'; + +@Component({ + selector: 'scalar-card', + template: ``, +}) +class TestableScalarCard { + @Input() runColorScale!: RunColorScale; + @Output() fullWidthChanged = new EventEmitter(); + @Output() fullHeightChanged = new EventEmitter(); + @Output() pinStateChanged = new EventEmitter(); +} + +describe('card view test', () => { + let store: MockStore; + let dispatchedActions: Action[] = []; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [NoopAnimationsModule, MetricsDataSourceModule], + declarations: [CardViewComponent, CardViewContainer, TestableScalarCard], + providers: [ + provideMockStore({ + initialState: appStateFromMetricsState(buildMetricsState()), + }), + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + + dispatchedActions = []; + store = TestBed.inject>(Store) as MockStore; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + dispatchedActions.push(action); + }); + store.overrideSelector(selectors.getRunColorMap, {}); + }); + + [ + {tagName: 'scalar-card', pluginType: PluginType.SCALARS}, + {tagName: 'image-card', pluginType: PluginType.IMAGES}, + {tagName: 'histogram-card', pluginType: PluginType.HISTOGRAMS}, + ].forEach(({tagName, pluginType}) => { + it(`renders proper component for pluginType: ${pluginType}`, () => { + const fixture = TestBed.createComponent(CardViewContainer); + fixture.componentInstance.cardId = 'cardId'; + fixture.componentInstance.pluginType = pluginType; + fixture.detectChanges(); + + expect(fixture.debugElement.query(By.css(tagName))).not.toBeNull(); + }); + }); + + it('updates full width upon card notification', () => { + const fixture = TestBed.createComponent(CardViewContainer); + fixture.componentInstance.cardId = 'cardId'; + fixture.componentInstance.pluginType = PluginType.SCALARS; + fixture.detectChanges(); + + expect(fixture.debugElement.classes['full-width']).not.toBeTruthy(); + + const scalarCard = fixture.debugElement.query(By.css('scalar-card')); + scalarCard.componentInstance.fullWidthChanged.emit(true); + fixture.detectChanges(); + + expect(fixture.debugElement.classes['full-width']).toBe(true); + + scalarCard.componentInstance.fullWidthChanged.emit(false); + fixture.detectChanges(); + + expect(fixture.debugElement.classes['full-width']).not.toBeTruthy(); + }); + + it('updates full height upon card notification', () => { + const fixture = TestBed.createComponent(CardViewContainer); + fixture.componentInstance.cardId = 'cardId'; + fixture.componentInstance.pluginType = PluginType.SCALARS; + fixture.detectChanges(); + + expect(fixture.debugElement.classes['full-height']).not.toBeTruthy(); + + const scalarCard = fixture.debugElement.query(By.css('scalar-card')); + scalarCard.componentInstance.fullHeightChanged.emit(true); + fixture.detectChanges(); + + expect(fixture.debugElement.classes['full-height']).toBe(true); + + scalarCard.componentInstance.fullHeightChanged.emit(false); + fixture.detectChanges(); + + expect(fixture.debugElement.classes['full-height']).not.toBeTruthy(); + }); + + it('dispatches action when pin state changes', () => { + const fixture = TestBed.createComponent(CardViewContainer); + fixture.componentInstance.cardId = 'cardId'; + fixture.componentInstance.pluginType = PluginType.SCALARS; + fixture.detectChanges(); + + const scalarCard = fixture.debugElement.query(By.css('scalar-card')); + scalarCard.componentInstance.pinStateChanged.emit(true); + fixture.detectChanges(); + + expect(dispatchedActions).toEqual([ + actions.cardPinStateToggled({ + cardId: 'cardId', + canCreateNewPins: true, + wasPinned: false, + }), + ]); + + store.overrideSelector(selectors.getCardPinnedState, true); + store.refreshState(); + scalarCard.componentInstance.pinStateChanged.emit(false); + fixture.detectChanges(); + + expect(dispatchedActions).toEqual([ + actions.cardPinStateToggled({ + cardId: 'cardId', + canCreateNewPins: true, + wasPinned: false, + }), + actions.cardPinStateToggled({ + cardId: 'cardId', + canCreateNewPins: true, + wasPinned: true, + }), + ]); + }); + + it(`throttles updates to colorScale`, fakeAsync(() => { + store.overrideSelector(selectors.getRunColorMap, {run1: '#000'}); + const fixture = TestBed.createComponent(CardViewContainer); + fixture.componentInstance.cardId = 'cardId'; + fixture.componentInstance.pluginType = PluginType.SCALARS; + fixture.detectChanges(); + + const scalarCard = fixture.debugElement.query(By.css('scalar-card')); + expect(scalarCard.componentInstance.runColorScale('run1')).toBe('#000'); + + store.overrideSelector(selectors.getRunColorMap, {run1: '#555'}); + store.refreshState(); + fixture.detectChanges(); + + expect(scalarCard.componentInstance.runColorScale('run1')).toBe('#000'); + + store.overrideSelector(selectors.getRunColorMap, {run1: '#aaa'}); + store.refreshState(); + fixture.detectChanges(); + + tick(TEST_ONLY.RUN_COLOR_UPDATE_THROTTLE_TIME_IN_MS); + fixture.detectChanges(); + + expect(scalarCard.componentInstance.runColorScale('run1')).toBe('#aaa'); + flush(); + })); + + it('getting unknown color throws error', () => { + store.overrideSelector(selectors.getRunColorMap, {run1: '#000'}); + const fixture = TestBed.createComponent(CardViewContainer); + fixture.componentInstance.cardId = 'cardId'; + fixture.componentInstance.pluginType = PluginType.SCALARS; + fixture.detectChanges(); + + const scalarCard = fixture.debugElement.query(By.css('scalar-card')); + expect(() => { + scalarCard.componentInstance.runColorScale('meow'); + }).toThrowError(Error, '[Color scale] unknown runId: meow.'); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/histogram_card_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/histogram_card_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..ac900ebdcc1a61b95f1d42abdcff9445ff2c5bf4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/histogram_card_component.ng.html @@ -0,0 +1,74 @@ + +
    + +
    + + +
    + + + + + + + +
    + + +
    + Data failed to load. +
    +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/histogram_card_component.scss b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/histogram_card_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..7ba0bd53df5e19d0df9355ae3560bfc68f36a258 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/histogram_card_component.scss @@ -0,0 +1,110 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; +@import '../common'; + +$_title-to-heading-gap: 12px; + +:host { + display: flex; + flex-direction: column; + box-sizing: border-box; + height: 100%; + overflow: auto; + padding: $metrics-preferred-gap; + padding-top: $metrics-preferred-gap - $_title-to-heading-gap; +} + +.heading { + $heading-content-gap: 4px; + + align-items: center; + display: grid; + grid-template-areas: + 'tag controls' + 'run spinner'; + grid-template-columns: 1fr auto; + font-size: 14px; + margin-bottom: $heading-content-gap; +} + +.tag { + grid-area: tag; + overflow: hidden; +} + +.pin-button mat-icon { + height: 18px; +} + +.run { + grid-area: run; + display: flex; + white-space: nowrap; + font-size: 13px; + color: mat-color($tb-foreground, secondary-text); + + .dot { + flex: none; + display: inline-block; + width: 13px; + height: 13px; + border-radius: 50%; + margin-right: 4px; + } + + .run-text { + overflow: hidden; + text-overflow: ellipsis; + max-width: 120px; + } +} + +.controls { + color: mat-color($tb-foreground, secondary-text); + grid-area: controls; + justify-self: flex-end; + flex-shrink: 0; + // TODO(psybuzz) do not use negative margin. + margin-right: -1 * $_title-to-heading-gap; + white-space: nowrap; +} + +.spinner { + display: flex; + grid-area: spinner; + height: 100%; + justify-content: center; + position: relative; +} + +mat-spinner { + top: 0; + right: 0; + // mat-spinner has 18px height but the `run` container naturally has 15px + // height. We do not want the histogram area height to change when loading + // so we "lift" the spinner. + position: absolute; +} + +tb-histogram { + flex-grow: 1; + overflow: hidden; +} + +.empty-message { + margin-top: 1em; + font-size: 13px; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/histogram_card_component.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/histogram_card_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..b65f9ca63e6a8caf6e288462af62e82249531af8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/histogram_card_component.ts @@ -0,0 +1,87 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + ElementRef, + EventEmitter, + Input, + Output, + ViewChild, +} from '@angular/core'; +import {DataLoadState} from '../../../types/data'; + +import {RunColorScale} from '../../../types/ui'; +import {HistogramComponent} from '../../../widgets/histogram/histogram_component'; +import { + HistogramDatum, + HistogramMode, + TimeProperty, +} from '../../../widgets/histogram/histogram_types'; +import {XAxisType} from '../../types'; + +const RESIZE_REDRAW_DEBOUNCE_TIME_IN_MS = 50; + +@Component({ + selector: 'histogram-card-component', + templateUrl: 'histogram_card_component.ng.html', + styleUrls: ['histogram_card_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class HistogramCardComponent { + readonly RESIZE_REDRAW_DEBOUNCE_TIME_IN_MS = RESIZE_REDRAW_DEBOUNCE_TIME_IN_MS; + readonly DataLoadState = DataLoadState; + + @Input() loadState!: DataLoadState; + @Input() title!: string; + @Input() tag!: string; + @Input() runId!: string; + @Input() data!: HistogramDatum[]; + @Input() mode!: HistogramMode; + @Input() xAxisType!: XAxisType; + @Input() runColorScale!: RunColorScale; + @Input() showFullSize!: boolean; + @Input() isPinned!: boolean; + + @Output() onFullSizeToggle = new EventEmitter(); + @Output() onPinClicked = new EventEmitter(); + + /* the component is rendered inside *ngIf */ + @ViewChild(HistogramComponent) histogramComponent?: HistogramComponent; + + constructor(private readonly ref: ElementRef) {} + + timeProperty(xAxisType: XAxisType) { + switch (xAxisType) { + case XAxisType.STEP: + return TimeProperty.STEP; + case XAxisType.WALL_TIME: + return TimeProperty.WALL_TIME; + case XAxisType.RELATIVE: + return TimeProperty.RELATIVE; + default: + throw new Error('Invalid xAxisType for histogram time property.'); + } + } + + redraw() { + if (this.histogramComponent) { + // Only redraw when it is visible (and thus have width and height). + if (this.ref.nativeElement.clientHeight) { + this.histogramComponent.redraw(); + } + } + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/histogram_card_container.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/histogram_card_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..fca4b3e18e73df39e43b4c9783d75c6a1b8694c7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/histogram_card_container.ts @@ -0,0 +1,169 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + OnInit, + Output, +} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {DataLoadState} from '../../../types/data'; +import {combineLatest, Observable} from 'rxjs'; +import {filter, map} from 'rxjs/operators'; + +import {State} from '../../../app_state'; +import {RunColorScale} from '../../../types/ui'; +import {HistogramDatum} from '../../../widgets/histogram/histogram_types'; +import {buildNormalizedHistograms} from '../../../widgets/histogram/histogram_util'; +import {HistogramStepDatum, PluginType} from '../../data_source'; +import { + getCardLoadState, + getCardMetadata, + getCardPinnedState, + getCardTimeSeries, + getMetricsHistogramMode, + getMetricsXAxisType, +} from '../../store'; +import {CardId, CardMetadata} from '../../types'; +import {CardRenderer} from '../metrics_view_types'; +import {getTagDisplayName} from '../utils'; + +type HistogramCardMetadata = CardMetadata & { + plugin: PluginType.HISTOGRAMS; + runId: string; +}; + +@Component({ + selector: 'histogram-card', + template: ` + + `, + styles: [ + ` + :host { + display: block; + height: 100%; + } + `, + ], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class HistogramCardContainer implements CardRenderer, OnInit { + constructor(private readonly store: Store) {} + + @Input() cardId!: CardId; + @Input() groupName!: string | null; + @Input() runColorScale!: RunColorScale; + @Output() fullWidthChanged = new EventEmitter(); + @Output() fullHeightChanged = new EventEmitter(); + @Output() pinStateChanged = new EventEmitter(); + + loadState$?: Observable; + title$?: Observable; + tag$?: Observable; + runId$?: Observable; + data$?: Observable; + mode$ = this.store.select(getMetricsHistogramMode); + xAxisType$ = this.store.select(getMetricsXAxisType); + showFullSize = false; + isPinned$?: Observable; + + private isHistogramCardMetadata( + cardMetadata: CardMetadata + ): cardMetadata is HistogramCardMetadata { + const {plugin} = cardMetadata; + return plugin === PluginType.HISTOGRAMS; + } + + onFullSizeToggle() { + this.showFullSize = !this.showFullSize; + this.fullWidthChanged.emit(this.showFullSize); + this.fullHeightChanged.emit(this.showFullSize); + } + + /** + * Build observables once cardId is defined (after onInit). + */ + ngOnInit() { + const selectCardMetadata$ = this.store.select(getCardMetadata, this.cardId); + const cardMetadata$ = selectCardMetadata$.pipe( + filter((cardMetadata) => { + return !!cardMetadata && this.isHistogramCardMetadata(cardMetadata); + }), + map((cardMetadata) => { + return cardMetadata as HistogramCardMetadata; + }) + ); + + const metadataAndSeries$ = combineLatest([ + cardMetadata$, + this.store.select(getCardTimeSeries, this.cardId), + ]); + this.data$ = metadataAndSeries$.pipe( + map(([cardMetadata, runToSeries]) => { + const runId = cardMetadata.runId; + if (!runToSeries || !runToSeries.hasOwnProperty(runId)) { + return []; + } + const series = runToSeries[runId] as HistogramStepDatum[]; + const result: HistogramDatum[] = series.map((datum) => { + const {wallTime, step} = datum; + const bins = datum.bins.map((bin) => { + return {x: bin.min, dx: bin.max - bin.min, y: bin.count}; + }); + return {wallTime, step, bins}; + }); + return buildNormalizedHistograms(result); + }) + ); + + this.loadState$ = this.store.select(getCardLoadState, this.cardId); + + this.tag$ = cardMetadata$.pipe( + map((cardMetadata) => { + return cardMetadata.tag; + }) + ); + + this.title$ = this.tag$.pipe( + map((tag) => { + return getTagDisplayName(tag, this.groupName); + }) + ); + + this.runId$ = cardMetadata$.pipe( + map((cardMetadata) => { + return cardMetadata.runId; + }) + ); + + this.isPinned$ = this.store.select(getCardPinnedState, this.cardId); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/histogram_card_module.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/histogram_card_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..b96600adabfc2566d7dbe962069d3dbf2cb82017 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/histogram_card_module.ts @@ -0,0 +1,43 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; + +import {MatButtonModule} from '@angular/material/button'; +import {MatIconModule} from '@angular/material/icon'; +import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; +import {HistogramModule} from '../../../widgets/histogram/histogram_module'; +import {ResizeDetectorModule} from '../../../widgets/resize_detector_module'; +import {TruncatedPathModule} from '../../../widgets/text/truncated_path_module'; + +import {HistogramCardComponent} from './histogram_card_component'; +import {HistogramCardContainer} from './histogram_card_container'; +import {RunNameModule} from './run_name_module'; + +@NgModule({ + declarations: [HistogramCardContainer, HistogramCardComponent], + exports: [HistogramCardContainer], + imports: [ + CommonModule, + HistogramModule, + MatButtonModule, + MatIconModule, + MatProgressSpinnerModule, + ResizeDetectorModule, + RunNameModule, + TruncatedPathModule, + ], +}) +export class HistogramCardModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/histogram_card_test.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/histogram_card_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..f65494aa10fe2414aa955289b12eb6c8e03906b9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/histogram_card_test.ts @@ -0,0 +1,323 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, Input} from '@angular/core'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; +import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; +import {By} from '@angular/platform-browser'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import {State} from '../../../app_state'; +import {DataLoadState} from '../../../types/data'; + +import { + getExperimentIdForRunId, + getExperimentIdToAliasMap, + getRun, +} from '../../../selectors'; +import {MatIconTestingModule} from '../../../testing/mat_icon_module'; +import { + ColorScale, + HistogramData, + HistogramMode, + TimeProperty, +} from '../../../widgets/histogram/histogram_types'; +import {buildNormalizedHistograms} from '../../../widgets/histogram/histogram_util'; +import {ResizeDetectorTestingModule} from '../../../widgets/resize_detector_testing_module'; +import {TruncatedPathModule} from '../../../widgets/text/truncated_path_module'; +import {PluginType} from '../../data_source'; +import * as selectors from '../../store/metrics_selectors'; +import { + appStateFromMetricsState, + buildMetricsState, + provideMockCardSeriesData, +} from '../../testing'; +import {XAxisType} from '../../types'; + +import {HistogramCardComponent} from './histogram_card_component'; +import {HistogramCardContainer} from './histogram_card_container'; +import {RunNameModule} from './run_name_module'; + +@Component({ + selector: 'tb-histogram', + template: ``, +}) +class TestableHistogramWidget { + @Input() mode!: HistogramMode; + @Input() timeProperty!: TimeProperty; + @Input() colorScale!: ColorScale; + @Input() name!: string; + @Input() data!: HistogramData; + + element = { + setSeriesData: () => {}, + }; + + redraw() {} +} + +function createHistogramCardContainer(): ComponentFixture< + HistogramCardContainer +> { + const fixture = TestBed.createComponent(HistogramCardContainer); + fixture.componentInstance.cardId = 'card1'; + fixture.componentInstance.runColorScale = (run: string) => '#fff'; + + return fixture; +} + +describe('histogram card', () => { + let store: MockStore; + let selectSpy: jasmine.Spy; + let resizeTester: ResizeDetectorTestingModule; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, + MatIconTestingModule, + MatProgressSpinnerModule, + ResizeDetectorTestingModule, + RunNameModule, + TruncatedPathModule, + ], + declarations: [ + HistogramCardComponent, + HistogramCardContainer, + TestableHistogramWidget, + ], + providers: [ + provideMockStore({ + initialState: appStateFromMetricsState(buildMetricsState()), + }), + ], + }).compileComponents(); + + store = TestBed.inject>(Store) as MockStore; + selectSpy = spyOn(store, 'select').and.callThrough(); + resizeTester = TestBed.inject(ResizeDetectorTestingModule); + store.overrideSelector(getExperimentIdForRunId, null); + store.overrideSelector(getExperimentIdToAliasMap, {}); + store.overrideSelector(getRun, null); + }); + + it('renders empty message when there is no data', () => { + const cardMetadata = { + plugin: PluginType.HISTOGRAMS, + tag: 'tagA', + run: 'run1', + }; + provideMockCardSeriesData( + selectSpy, + PluginType.HISTOGRAMS, + 'card1', + cardMetadata, + null /* timeSeries */ + ); + + const fixture = createHistogramCardContainer(); + fixture.detectChanges(); + + const headingEl = fixture.debugElement.query(By.css('.heading')); + const histogramEl = fixture.debugElement.query(By.css('tb-histogram')); + expect(headingEl.nativeElement.textContent).toContain('tagA'); + expect(fixture.nativeElement.textContent).not.toContain( + 'Data failed to load' + ); + expect(histogramEl).not.toBeTruthy(); + + store.overrideSelector(selectors.getCardLoadState, DataLoadState.FAILED); + store.refreshState(); + fixture.detectChanges(); + + expect(fixture.nativeElement.textContent).toContain('Data failed to load'); + }); + + it('renders loading spinner when loading', () => { + provideMockCardSeriesData(selectSpy, PluginType.HISTOGRAMS, 'card1'); + store.overrideSelector( + selectors.getCardLoadState, + DataLoadState.NOT_LOADED + ); + store.refreshState(); + + const fixture = createHistogramCardContainer(); + fixture.detectChanges(); + let loadingEl = fixture.debugElement.query(By.css('mat-spinner')); + expect(loadingEl).not.toBeTruthy(); + + store.overrideSelector(selectors.getCardLoadState, DataLoadState.LOADING); + store.refreshState(); + fixture.detectChanges(); + loadingEl = fixture.debugElement.query(By.css('mat-spinner')); + expect(loadingEl).toBeTruthy(); + + store.overrideSelector(selectors.getCardLoadState, DataLoadState.LOADED); + store.refreshState(); + fixture.detectChanges(); + loadingEl = fixture.debugElement.query(By.css('mat-spinner')); + expect(loadingEl).not.toBeTruthy(); + + store.overrideSelector(selectors.getCardLoadState, DataLoadState.FAILED); + store.refreshState(); + fixture.detectChanges(); + loadingEl = fixture.debugElement.query(By.css('mat-spinner')); + expect(loadingEl).not.toBeTruthy(); + }); + + it('renders data', () => { + const cardMetadata = { + plugin: PluginType.HISTOGRAMS, + tag: 'tagA', + run: 'run1', + }; + const timeSeries = [ + {wallTime: 100, step: 333, bins: [{min: 0, max: 100, count: 42}]}, + {wallTime: 101, step: 555, bins: [{min: 0, max: 100, count: 42}]}, + {wallTime: 102, step: 777, bins: [{min: 0, max: 100, count: 42}]}, + ]; + provideMockCardSeriesData( + selectSpy, + PluginType.HISTOGRAMS, + 'card1', + cardMetadata, + timeSeries + ); + + const fixture = createHistogramCardContainer(); + fixture.detectChanges(); + + const headingEl = fixture.debugElement.query(By.css('.heading')); + const emptyEl = fixture.debugElement.query(By.css('.empty-message')); + const histogramEl = fixture.debugElement.query(By.css('tb-histogram')); + expect(headingEl.nativeElement.textContent).toContain('tagA'); + expect(emptyEl).not.toBeTruthy(); + expect(histogramEl).toBeTruthy(); + expect(histogramEl.componentInstance.name).toBe('run1'); + expect(histogramEl.componentInstance.data).toEqual( + buildNormalizedHistograms([ + {wallTime: 100, step: 333, bins: [{x: 0, dx: 100, y: 42}]}, + {wallTime: 101, step: 555, bins: [{x: 0, dx: 100, y: 42}]}, + {wallTime: 102, step: 777, bins: [{x: 0, dx: 100, y: 42}]}, + ]) + ); + }); + + it('respects settings from the store', () => { + provideMockCardSeriesData(selectSpy, PluginType.HISTOGRAMS, 'card1'); + store.overrideSelector( + selectors.getMetricsHistogramMode, + HistogramMode.OFFSET + ); + store.overrideSelector(selectors.getMetricsXAxisType, XAxisType.STEP); + + const fixture = createHistogramCardContainer(); + fixture.detectChanges(); + + const histogramEl = fixture.debugElement.query(By.css('tb-histogram')); + expect(histogramEl.componentInstance.mode).toBe(HistogramMode.OFFSET); + expect(histogramEl.componentInstance.timeProperty).toBe(TimeProperty.STEP); + + store.overrideSelector( + selectors.getMetricsHistogramMode, + HistogramMode.OVERLAY + ); + store.overrideSelector(selectors.getMetricsXAxisType, XAxisType.WALL_TIME); + store.refreshState(); + + fixture.detectChanges(); + + expect(histogramEl.componentInstance.mode).toBe(HistogramMode.OVERLAY); + expect(histogramEl.componentInstance.timeProperty).toBe( + TimeProperty.WALL_TIME + ); + }); + + describe('full size', () => { + beforeEach(() => { + provideMockCardSeriesData(selectSpy, PluginType.HISTOGRAMS, 'card1'); + }); + + it('requests full size on toggle', () => { + const onFullWidthChanged = jasmine.createSpy(); + const onFullHeightChanged = jasmine.createSpy(); + const fixture = createHistogramCardContainer(); + fixture.detectChanges(); + + fixture.componentInstance.fullWidthChanged.subscribe(onFullWidthChanged); + fixture.componentInstance.fullHeightChanged.subscribe( + onFullHeightChanged + ); + const button = fixture.debugElement.query( + By.css('[aria-label="Toggle full size mode"]') + ); + + button.nativeElement.click(); + expect(onFullWidthChanged.calls.allArgs()).toEqual([[true]]); + expect(onFullHeightChanged.calls.allArgs()).toEqual([[true]]); + + button.nativeElement.click(); + expect(onFullWidthChanged.calls.allArgs()).toEqual([[true], [false]]); + expect(onFullHeightChanged.calls.allArgs()).toEqual([[true], [false]]); + }); + }); + + describe('resize', () => { + let redrawSpy: jasmine.Spy; + + function createCard(): ComponentFixture { + const fixture = createHistogramCardContainer(); + fixture.detectChanges(); + + const component = fixture.debugElement.query( + By.directive(HistogramCardComponent) + ); + const widget = fixture.debugElement.query( + By.directive(TestableHistogramWidget) + ); + // HACK: we are using viewChild in HistogramCardComponent and there is + // no good way to provide a stub implementation. Manually set what + // would be populated by ViewChild decorator. + component.componentInstance.histogramComponent = widget.componentInstance; + + redrawSpy = spyOn(widget.componentInstance, 'redraw'); + return fixture; + } + + beforeEach(() => { + provideMockCardSeriesData(selectSpy, PluginType.HISTOGRAMS, 'card1'); + }); + + it('calls redraw on resize', () => { + const fixture = createCard(); + + resizeTester.simulateResize(fixture); + + expect(redrawSpy).toHaveBeenCalledTimes(1); + }); + + it('does not call the redraw when the card is invisible', () => { + const fixture = createCard(); + + fixture.nativeElement.style.display = 'none'; + resizeTester.simulateResize(fixture); + expect(redrawSpy).not.toHaveBeenCalled(); + + fixture.nativeElement.style.display = 'block'; + resizeTester.simulateResize(fixture); + expect(redrawSpy).toHaveBeenCalledTimes(1); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/image_card_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/image_card_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..2397c70d03dcae615b7797482933b4bd1c9526c7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/image_card_component.ng.html @@ -0,0 +1,90 @@ + +
    + +
    + + +
    +
    + Step {{ stepValues[stepIndex] }} + +
    + + + + +
    + +
    + +
    +
    + Image at step {{ stepValues[stepIndex] }} +
    +
    + +
    + Data failed to load. +
    +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/image_card_component.scss b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/image_card_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..fc299e53e60162c79da52db4a92dd7e650c958aa --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/image_card_component.scss @@ -0,0 +1,148 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; +@import '../common'; + +$_title-to-heading-gap: 12px; +$_second-row-height: 15px; + +:host { + display: flex; + flex-direction: column; + box-sizing: border-box; + height: 100%; + overflow: auto; + padding: $metrics-preferred-gap; + padding-top: $metrics-preferred-gap - $_title-to-heading-gap; +} + +:host.actual-size { + height: auto; +} + +.heading { + $heading-content-gap: 4px; + + align-items: center; + display: grid; + grid-template-areas: + 'tag controls' + 'run step'; + grid-template-columns: 1fr auto; + font-size: 14px; + margin-bottom: $heading-content-gap; + position: relative; +} + +.tag { + grid-area: tag; + overflow: hidden; +} + +.pin-button mat-icon { + height: 18px; +} + +.run { + grid-area: run; + display: flex; + white-space: nowrap; + + .dot { + flex: none; + display: inline-block; + width: 13px; + height: 13px; + border-radius: 50%; + margin-right: 4px; + } + + .run-text { + overflow: hidden; + text-overflow: ellipsis; + max-width: 120px; + } +} + +.step { + grid-area: step; + display: flex; + + mat-spinner { + $mat-icon-button-diameter: 40px; + $spinner-diameter: 18px; + + margin-left: 4px; + margin-right: 0; + } +} + +.run, +.step { + font-size: 13px; + color: mat-color($tb-foreground, secondary-text); + height: $_second-row-height; +} + +.controls { + color: mat-color($tb-foreground, secondary-text); + grid-area: controls; + justify-self: flex-end; + flex-shrink: 0; + // TODO(psybuzz) do not use negative margin. + margin-right: -1 * $_title-to-heading-gap; + white-space: nowrap; +} + +.img-container { + flex: 1 1 0; + overflow-y: auto; + position: relative; +} + +:host.actual-size .img-container { + overflow: auto; + flex: none; +} + +:host:not(.actual-size) img { + position: absolute; + max-height: 100%; + max-width: 100%; + width: auto; + height: 100%; + object-fit: contain; +} + +.slider-row { + display: flex; + align-items: center; + // Reset mat-slider's internal extra space on top + // https://github.com/angular/components/blob/master/src/material/slider/slider.scss#L10 + height: 24px; +} + +.step-slider { + flex: 1; +} + +:host ::ng-deep .mat-slider-min-value .mat-slider-thumb { + background-color: mat-color($tb-primary); +} + +.empty-message { + margin-top: 1em; + font-size: 13px; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/image_card_component.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/image_card_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..e16f640dd96f400459529e8141dfc205ecc0cdd3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/image_card_component.ts @@ -0,0 +1,70 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; +import {DataLoadState} from '../../../types/data'; + +import {RunColorScale} from '../../../types/ui'; + +@Component({ + selector: 'image-card-component', + templateUrl: 'image_card_component.ng.html', + styleUrls: ['image_card_component.css'], + host: { + '[class.actual-size]': 'showActualSize', + }, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ImageCardComponent { + readonly DataLoadState = DataLoadState; + + @Input() loadState!: DataLoadState; + @Input() title!: string; + @Input() tag!: string; + @Input() runId!: string; + @Input() sample!: string; + @Input() imageUrl!: string | null; + @Input() stepIndex!: number | null; + @Input() stepValues!: number[]; + @Input() brightnessInMilli!: number; + @Input() contrastInMilli!: number; + @Input() showActualSize!: boolean; + @Input() runColorScale!: RunColorScale; + @Input() allowToggleActualSize!: boolean; + @Input() isPinned!: boolean; + + @Output() onActualSizeToggle = new EventEmitter(); + @Output() stepIndexChange = new EventEmitter(); + @Output() onPinClicked = new EventEmitter(); + + cssFilter() { + const brightnessScale = this.brightnessInMilli / 1000; + const contrastPercent = this.contrastInMilli / 10; + return `contrast(${contrastPercent}%) brightness(${brightnessScale})`; + } + + onSliderInput($event: any) { + // Angular Material Slider's MatSliderChange has a loose `number | null` + // type for 'value'. However, it's actual implementation can only emit a + // `number` on input events. + // https://github.com/angular/components/blob/master/src/material/slider/slider.ts + this.stepIndexChange.emit($event.value as number); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/image_card_container.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/image_card_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..d589dbc376b59a7124deaff9d25fa33455087b0b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/image_card_container.ts @@ -0,0 +1,257 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + OnDestroy, + OnInit, + Output, +} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {DataLoadState} from '../../../types/data'; +import {BehaviorSubject, combineLatest, Observable, Subject} from 'rxjs'; +import { + distinctUntilChanged, + filter, + map, + shareReplay, + takeUntil, + tap, +} from 'rxjs/operators'; + +import {State} from '../../../app_state'; +import {RunColorScale} from '../../../types/ui'; +import * as actions from '../../actions'; +import { + ImageStepDatum, + MetricsDataSource, + PluginType, +} from '../../data_source/index'; +import { + getCardLoadState, + getCardMetadata, + getCardPinnedState, + getCardStepIndex, + getCardTimeSeries, + getMetricsImageBrightnessInMilli, + getMetricsImageContrastInMilli, + getMetricsImageShowActualSize, +} from '../../store'; +import {CardId, CardMetadata} from '../../types'; +import {CardRenderer} from '../metrics_view_types'; +import {getTagDisplayName} from '../utils'; + +type ImageCardMetadata = CardMetadata & { + plugin: PluginType.IMAGES; + sample: number; + runId: string; +}; + +@Component({ + selector: 'image-card', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ImageCardContainer implements CardRenderer, OnInit, OnDestroy { + constructor( + private readonly store: Store, + private readonly dataSource: MetricsDataSource + ) {} + + @Input() cardId!: CardId; + @Input() groupName!: string | null; + @Input() runColorScale!: RunColorScale; + @Output() fullWidthChanged = new EventEmitter(); + @Output() pinStateChanged = new EventEmitter(); + + onStepIndexChanged($event: number) { + this.store.dispatch( + actions.cardStepSliderChanged({ + cardId: this.cardId, + stepIndex: $event, + }) + ); + } + + loadState$?: Observable; + title$?: Observable; + tag$?: Observable; + runId$?: Observable; + sample$?: Observable; + imageUrl$?: Observable; + stepIndex$?: Observable; + stepValues$?: Observable; + isPinned$?: Observable; + brightnessInMilli$ = this.store.select(getMetricsImageBrightnessInMilli); + contrastInMilli$ = this.store.select(getMetricsImageContrastInMilli); + actualSizeGlobalSetting$ = this.store.select(getMetricsImageShowActualSize); + showActualSize = false; + + // The UI toggle is overridden by the global setting. + private actualSizeUiToggled = false; + private readonly actualSizeUiToggleSubject = new BehaviorSubject( + this.actualSizeUiToggled + ); + private readonly ngUnsubscribe = new Subject(); + + private isImageCardMetadata( + cardMetadata: CardMetadata + ): cardMetadata is ImageCardMetadata { + const {plugin} = cardMetadata; + return plugin === PluginType.IMAGES; + } + + onActualSizeToggle() { + this.actualSizeUiToggled = !this.actualSizeUiToggled; + this.actualSizeUiToggleSubject.next(this.actualSizeUiToggled); + } + + /** + * Build observables once cardId is defined (after onInit). + */ + ngOnInit() { + combineLatest([ + this.actualSizeGlobalSetting$, + this.actualSizeUiToggleSubject, + ]) + .pipe( + takeUntil(this.ngUnsubscribe), + tap(([settingEnabled, uiToggleEnabled]) => { + // Actual size mode requires a full width card. + this.showActualSize = settingEnabled || uiToggleEnabled; + this.fullWidthChanged.emit(this.showActualSize); + }) + ) + .subscribe(() => {}); + + const selectCardMetadata$ = this.store.select(getCardMetadata, this.cardId); + const cardMetadata$ = selectCardMetadata$.pipe( + filter((cardMetadata) => { + return !!cardMetadata && this.isImageCardMetadata(cardMetadata); + }), + map((cardMetadata) => { + return cardMetadata as ImageCardMetadata; + }), + shareReplay(1) + ); + + const metadataAndSeries$ = combineLatest([ + cardMetadata$, + this.store.select(getCardTimeSeries, this.cardId), + ]); + const timeSeries$ = metadataAndSeries$.pipe( + map(([cardMetadata, runToSeries]) => { + const runId = cardMetadata.runId; + if (!runToSeries || !runToSeries.hasOwnProperty(runId)) { + return []; + } + return runToSeries[runId] as ImageStepDatum[]; + }), + distinctUntilChanged((series1, series2) => { + if (series1.length === series2.length && series1.length === 0) { + return true; + } + return series1 === series2; + }), + shareReplay(1) + ); + + this.stepIndex$ = this.store.select(getCardStepIndex, this.cardId); + this.loadState$ = this.store.select(getCardLoadState, this.cardId); + + const timeSeriesAndStepIndex$ = combineLatest([ + timeSeries$, + this.stepIndex$, + ]); + const stepDatum$ = timeSeriesAndStepIndex$.pipe( + map(([timeSeries, stepIndex]) => { + if (stepIndex === null || !timeSeries[stepIndex]) { + return null; + } + return timeSeries[stepIndex]; + }) + ); + + this.tag$ = cardMetadata$.pipe( + map((cardMetadata) => { + return cardMetadata.tag; + }) + ); + + this.title$ = this.tag$.pipe( + map((tag) => { + return getTagDisplayName(tag, this.groupName); + }) + ); + + this.runId$ = cardMetadata$.pipe( + map((cardMetadata) => { + return cardMetadata.runId; + }) + ); + + this.sample$ = cardMetadata$.pipe( + map((cardMetadata) => { + return cardMetadata.sample; + }) + ); + + this.imageUrl$ = stepDatum$.pipe( + map((stepDatum: ImageStepDatum | null) => { + if (!stepDatum) { + return null; + } + return this.dataSource.imageUrl(stepDatum.imageId); + }) + ); + + this.stepValues$ = timeSeries$.pipe( + map((series: ImageStepDatum[]) => { + return series.map((stepDatum) => { + return stepDatum.step; + }); + }) + ); + + this.isPinned$ = this.store.select(getCardPinnedState, this.cardId); + } + + ngOnDestroy() { + this.ngUnsubscribe.next(); + this.ngUnsubscribe.complete(); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/image_card_module.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/image_card_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..4908183a5bc9a9ea09657662db3b74c3281ef9e4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/image_card_module.ts @@ -0,0 +1,40 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {MatButtonModule} from '@angular/material/button'; +import {MatIconModule} from '@angular/material/icon'; +import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; +import {MatSliderModule} from '@angular/material/slider'; + +import {TruncatedPathModule} from '../../../widgets/text/truncated_path_module'; +import {ImageCardComponent} from './image_card_component'; +import {ImageCardContainer} from './image_card_container'; +import {RunNameModule} from './run_name_module'; + +@NgModule({ + declarations: [ImageCardContainer, ImageCardComponent], + exports: [ImageCardContainer], + imports: [ + CommonModule, + MatButtonModule, + MatIconModule, + MatProgressSpinnerModule, + MatSliderModule, + RunNameModule, + TruncatedPathModule, + ], +}) +export class ImageCardModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/image_card_test.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/image_card_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..c74623336cde470db18f4f07a0c3f07cf8a04536 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/image_card_test.ts @@ -0,0 +1,463 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, Input} from '@angular/core'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; +import {MatButtonModule} from '@angular/material/button'; +import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; +import {MatSliderModule} from '@angular/material/slider'; +import {By} from '@angular/platform-browser'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Action, Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import {State} from '../../../app_state'; +import {DataLoadState} from '../../../types/data'; + +import { + getExperimentIdForRunId, + getExperimentIdToAliasMap, + getRun, +} from '../../../selectors'; +import {MatIconTestingModule} from '../../../testing/mat_icon_module'; +import {TruncatedPathModule} from '../../../widgets/text/truncated_path_module'; +import * as actions from '../../actions'; +import { + MetricsDataSource, + MetricsDataSourceModule, + PluginType, +} from '../../data_source'; +import * as selectors from '../../store/metrics_selectors'; +import { + appStateFromMetricsState, + buildMetricsState, + provideMockCardSeriesData, +} from '../../testing'; +import {CardId} from '../../types'; + +import {ImageCardComponent} from './image_card_component'; +import {ImageCardContainer} from './image_card_container'; +import {RunNameModule} from './run_name_module'; + +@Component({ + selector: 'card-view', + template: ` + + `, +}) +class TestableCardView { + @Input() cardId!: CardId; + @Input() runColorScale = (run: string) => '#fff'; + + onFullWidthChanged(showFullWidth: boolean): void {} +} + +function createImageCardContainer(cardId: CardId) { + const fixture = TestBed.createComponent(ImageCardContainer); + fixture.componentInstance.cardId = cardId; + fixture.componentInstance.runColorScale = (run: string) => '#fff'; + + return fixture; +} + +describe('image card', () => { + let store: MockStore; + let selectSpy: jasmine.Spy; + let dataSource: MetricsDataSource; + let dispatchedActions: Action[] = []; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, + MetricsDataSourceModule, + MatButtonModule, + MatIconTestingModule, + MatProgressSpinnerModule, + MatSliderModule, + RunNameModule, + TruncatedPathModule, + ], + declarations: [ImageCardContainer, ImageCardComponent, TestableCardView], + providers: [ + provideMockStore({ + initialState: appStateFromMetricsState(buildMetricsState()), + }), + ], + }).compileComponents(); + + dispatchedActions = []; + store = TestBed.inject>(Store) as MockStore; + dataSource = TestBed.inject(MetricsDataSource); + selectSpy = spyOn(store, 'select').and.callThrough(); + spyOn(store, 'dispatch').and.callFake((action: Action) => { + dispatchedActions.push(action); + }); + + store.overrideSelector(getExperimentIdForRunId, null); + store.overrideSelector(getExperimentIdToAliasMap, {}); + store.overrideSelector(getRun, null); + }); + + function expectImageSliderUI( + fixture: ComponentFixture, + imageId: string, + stepIndex: number | null + ) { + const imgEl = fixture.debugElement.query(By.css('img')); + const slider = fixture.debugElement.query(By.css('.step-slider')); + expect( + imgEl.nativeElement.src.endsWith(`/imageData?imageId=${imageId}`) + ).toBe(true); + expect(slider.componentInstance.value).toBe(stepIndex); + } + + it('renders empty message when there is no data', () => { + const cardMetadata = { + plugin: PluginType.IMAGES, + tag: 'tagA', + run: 'run1', + sample: 999, + }; + provideMockCardSeriesData( + selectSpy, + PluginType.IMAGES, + 'card1', + cardMetadata, + null /* timeSeries */ + ); + + const fixture = createImageCardContainer('card1'); + fixture.detectChanges(); + + const metadataEl = fixture.debugElement.query(By.css('.heading')); + const imgEl = fixture.debugElement.query(By.css('img')); + expect(metadataEl.nativeElement.textContent).toContain('tagA'); + expect(fixture.nativeElement.textContent).not.toContain( + 'Data failed to load' + ); + expect(imgEl).not.toBeTruthy(); + + const slider = fixture.debugElement.query(By.css('.step-slider')); + expect(slider).not.toBeTruthy(); + + store.overrideSelector(selectors.getCardLoadState, DataLoadState.FAILED); + store.refreshState(); + fixture.detectChanges(); + + expect(fixture.nativeElement.textContent).toContain('Data failed to load'); + }); + + it('renders loading spinner when loading', () => { + provideMockCardSeriesData(selectSpy, PluginType.IMAGES, 'card1'); + store.overrideSelector( + selectors.getCardLoadState, + DataLoadState.NOT_LOADED + ); + store.refreshState(); + + const fixture = createImageCardContainer('card1'); + fixture.detectChanges(); + let loadingEl = fixture.debugElement.query(By.css('mat-spinner')); + expect(loadingEl).not.toBeTruthy(); + + store.overrideSelector(selectors.getCardLoadState, DataLoadState.LOADING); + store.refreshState(); + fixture.detectChanges(); + loadingEl = fixture.debugElement.query(By.css('mat-spinner')); + expect(loadingEl).toBeTruthy(); + + store.overrideSelector(selectors.getCardLoadState, DataLoadState.LOADED); + store.refreshState(); + fixture.detectChanges(); + loadingEl = fixture.debugElement.query(By.css('mat-spinner')); + expect(loadingEl).not.toBeTruthy(); + + store.overrideSelector(selectors.getCardLoadState, DataLoadState.FAILED); + store.refreshState(); + fixture.detectChanges(); + loadingEl = fixture.debugElement.query(By.css('mat-spinner')); + expect(loadingEl).not.toBeTruthy(); + }); + + it('renders data', () => { + const cardMetadata = { + plugin: PluginType.IMAGES, + tag: 'tagA', + run: 'run1', + sample: 999, + }; + const timeSeries = [ + {wallTime: 100, imageId: 'imageId1', step: 333}, + {wallTime: 101, imageId: 'imageId2', step: 555}, + {wallTime: 102, imageId: 'imageId3', step: 777}, + ]; + provideMockCardSeriesData( + selectSpy, + PluginType.IMAGES, + 'card1', + cardMetadata, + timeSeries, + 1 /* stepIndex */ + ); + + const fixture = createImageCardContainer('card1'); + fixture.detectChanges(); + + const metadataEl = fixture.debugElement.query(By.css('.heading')); + const emptyEl = fixture.debugElement.query(By.css('.empty-message')); + expect(metadataEl.nativeElement.textContent).toContain('tagA'); + expect(emptyEl).not.toBeTruthy(); + expect(fixture.nativeElement.textContent).toContain('Step 555'); + expectImageSliderUI(fixture, 'imageId2', 1); + }); + + it(`renders the slider based on the number of steps`, () => { + const timeSeries = [ + {wallTime: 100, imageId: 'ImageId1', step: 10}, + {wallTime: 101, imageId: 'ImageId2', step: 20}, + {wallTime: 102, imageId: 'ImageId3', step: 30}, + ]; + provideMockCardSeriesData( + selectSpy, + PluginType.IMAGES, + 'card1', + null /* metadataOverride */, + timeSeries + ); + + const fixture = createImageCardContainer('card1'); + fixture.detectChanges(); + + const slider = fixture.debugElement.query(By.css('.step-slider')); + expect(slider.componentInstance.disabled).toBe(false); + expect(slider.componentInstance.min).toBe(0); + expect(slider.componentInstance.max).toBe(2); + }); + + it('does not render a step index that is out of range', () => { + const timeSeries = [{wallTime: 100, imageId: 'ImageId1', step: 10}]; + provideMockCardSeriesData( + selectSpy, + PluginType.IMAGES, + 'card1', + null /* metadataOverride */, + timeSeries, + 5 /* stepIndex */ + ); + + const fixture = createImageCardContainer('card1'); + fixture.detectChanges(); + + const imgEl = fixture.debugElement.query(By.css('img')); + expect(imgEl).not.toBeTruthy(); + + const slider = fixture.debugElement.query(By.css('.step-slider')); + expect(slider).not.toBeTruthy(); + }); + + it('dispatches event when step slider changes', () => { + const timeSeries = [ + {wallTime: 100, imageId: 'ImageId1', step: 10}, + {wallTime: 101, imageId: 'ImageId2', step: 20}, + {wallTime: 102, imageId: 'ImageId3', step: 30}, + ]; + provideMockCardSeriesData( + selectSpy, + PluginType.IMAGES, + 'card1', + null /* metadataOverride */, + timeSeries, + 2 /* stepIndex */ + ); + + const fixture = createImageCardContainer('card1'); + fixture.detectChanges(); + + const slider = fixture.debugElement.query(By.css('.step-slider')); + expect(fixture.nativeElement.textContent).toContain('Step 30'); + expectImageSliderUI(fixture, 'ImageId3', 2); + + // Adjust slider. + slider.triggerEventHandler('input', {value: 1}); + fixture.detectChanges(); + + expect(dispatchedActions).toEqual([ + actions.cardStepSliderChanged({cardId: 'card1', stepIndex: 1}), + ]); + }); + + it('disables slider when only 1 step exists', () => { + const timeSeries = [{wallTime: 100, imageId: 'ImageId1', step: 10}]; + provideMockCardSeriesData( + selectSpy, + PluginType.IMAGES, + 'card1', + null /* metadataOverride */, + timeSeries + ); + + const fixture = createImageCardContainer('card1'); + fixture.detectChanges(); + + const slider = fixture.debugElement.query(By.css('.step-slider')); + expect(slider.componentInstance.disabled).toBe(true); + }); + + it('respects settings from the store', () => { + provideMockCardSeriesData(selectSpy, PluginType.IMAGES, 'card1'); + store.overrideSelector(selectors.getMetricsImageBrightnessInMilli, 2000); + store.overrideSelector(selectors.getMetricsImageContrastInMilli, 1000); + + const fixture = createImageCardContainer('card1'); + fixture.detectChanges(); + + const imgEl = fixture.debugElement.query(By.css('img')); + expect(imgEl.styles['filter']).toContain('brightness(2)'); + expect(imgEl.styles['filter']).toContain('contrast(100%)'); + + store.overrideSelector(selectors.getMetricsImageBrightnessInMilli, 9876); + store.overrideSelector(selectors.getMetricsImageContrastInMilli, 0); + store.refreshState(); + fixture.detectChanges(); + + expect(imgEl.styles['filter']).toContain('brightness(9.876)'); + expect(imgEl.styles['filter']).toContain('contrast(0%)'); + }); + + describe('actual size', () => { + it('sets actual size, full width when global setting changes', () => { + provideMockCardSeriesData(selectSpy, PluginType.IMAGES, 'card1'); + store.overrideSelector(selectors.getMetricsImageShowActualSize, false); + + const fixture = TestBed.createComponent(TestableCardView); + const fullWidthSpy = spyOn( + fixture.componentInstance, + 'onFullWidthChanged' + ); + fixture.componentInstance.cardId = 'card1'; + fixture.detectChanges(); + + const imgCardEl = fixture.debugElement.query( + By.css('image-card-component') + ); + expect(imgCardEl.classes['actual-size']).not.toBeTruthy(); + expect(fullWidthSpy.calls.allArgs()).toEqual([[false]]); + + store.overrideSelector(selectors.getMetricsImageShowActualSize, true); + store.refreshState(); + fixture.detectChanges(); + + expect(imgCardEl.classes['actual-size']).toBe(true); + expect(fullWidthSpy.calls.allArgs()).toEqual([[false], [true]]); + }); + + it('sets actual size, full width when UI is toggled', () => { + provideMockCardSeriesData(selectSpy, PluginType.IMAGES, 'card1'); + store.overrideSelector(selectors.getMetricsImageShowActualSize, false); + store.refreshState(); + + const fixture = TestBed.createComponent(TestableCardView); + const fullWidthSpy = spyOn( + fixture.componentInstance, + 'onFullWidthChanged' + ); + fixture.componentInstance.cardId = 'card1'; + fixture.detectChanges(); + + const imgCardEl = fixture.debugElement.query( + By.css('image-card-component') + ); + expect(imgCardEl.classes['actual-size']).not.toBeTruthy(); + expect(fullWidthSpy.calls.allArgs()).toEqual([[false]]); + + // Toggle on. + const button = fixture.debugElement.query( + By.css('[aria-label="Toggle actual image size"]') + ); + button.nativeElement.click(); + fixture.detectChanges(); + + expect(imgCardEl.classes['actual-size']).toBe(true); + expect(fullWidthSpy.calls.allArgs()).toEqual([[false], [true]]); + + // Toggle off. + button.nativeElement.click(); + fixture.detectChanges(); + + expect(imgCardEl.classes['actual-size']).not.toBeTruthy(); + expect(fullWidthSpy.calls.allArgs()).toEqual([[false], [true], [false]]); + }); + + it('disables UI toggle when global setting is on', () => { + provideMockCardSeriesData(selectSpy, PluginType.IMAGES, 'card1'); + store.overrideSelector(selectors.getMetricsImageShowActualSize, false); + store.refreshState(); + + const fixture = createImageCardContainer('card1'); + fixture.detectChanges(); + + const button = fixture.debugElement.query( + By.css('[aria-label="Toggle actual image size"]') + ); + expect(button.attributes['disabled']).not.toBeTruthy(); + + store.overrideSelector(selectors.getMetricsImageShowActualSize, true); + store.refreshState(); + fixture.detectChanges(); + + expect(button.attributes['disabled']).toBe('true'); + }); + + it('does not clear local UI toggle state on global setting changes', () => { + provideMockCardSeriesData(selectSpy, PluginType.IMAGES, 'card1'); + store.overrideSelector(selectors.getMetricsImageShowActualSize, false); + store.refreshState(); + + const fixture = TestBed.createComponent(TestableCardView); + const fullWidthSpy = spyOn( + fixture.componentInstance, + 'onFullWidthChanged' + ); + fixture.componentInstance.cardId = 'card1'; + fixture.detectChanges(); + + // Toggle on. + const button = fixture.debugElement.query( + By.css('[aria-label="Toggle actual image size"]') + ); + button.nativeElement.click(); + fixture.detectChanges(); + + // Enable global setting. + store.overrideSelector(selectors.getMetricsImageShowActualSize, true); + store.refreshState(); + fixture.detectChanges(); + + // Disable global setting. + store.overrideSelector(selectors.getMetricsImageShowActualSize, false); + store.refreshState(); + fixture.detectChanges(); + + const imgCardEl = fixture.debugElement.query( + By.css('image-card-component') + ); + expect(imgCardEl.classes['actual-size']).toBe(true); + expect(fullWidthSpy.calls.mostRecent().args).toEqual([true]); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/run_name_component.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/run_name_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..d49d309632913fd1ab2d5b7b89f100829b65f382 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/run_name_component.ts @@ -0,0 +1,24 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component, Input} from '@angular/core'; + +@Component({ + selector: 'card-run-name-component', + template: '{{ name }}', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class RunNameComponent { + @Input() name!: string; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/run_name_container.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/run_name_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..03c33671e81e2f13fd579de08712a60fe6a3760c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/run_name_container.ts @@ -0,0 +1,64 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component, Input, OnInit} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {combineLatest, Observable} from 'rxjs'; +import {map} from 'rxjs/operators'; + +import {State} from '../../../app_state'; +import { + getExperimentIdForRunId, + getExperimentIdToAliasMap, + getRun, +} from '../../../selectors'; + +import {getDisplayNameForRun} from './utils'; + +@Component({ + selector: 'card-run-name', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class RunNameContainer implements OnInit { + @Input() runId!: string; + + name$?: Observable; + + constructor(private readonly store: Store) {} + + /** + * Build observables once runId is defined (after onInit). + */ + ngOnInit() { + this.name$ = combineLatest([ + this.store.select(getRun, {runId: this.runId}), + this.store.select(getExperimentIdForRunId, {runId: this.runId}), + this.store.select(getExperimentIdToAliasMap), + ]).pipe( + map(([run, experimentId, idToAlias]) => { + return getDisplayNameForRun( + this.runId, + run, + experimentId ? idToAlias[experimentId] : null + ); + }) + ); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/run_name_module.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/run_name_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..c29d50c3601b241539b9d64bc0c011eee1a0bef6 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/run_name_module.ts @@ -0,0 +1,26 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; + +import {RunNameComponent} from './run_name_component'; +import {RunNameContainer} from './run_name_container'; + +@NgModule({ + declarations: [RunNameContainer, RunNameComponent], + exports: [RunNameContainer], + imports: [CommonModule], +}) +export class RunNameModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/run_name_test.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/run_name_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..fc30eb53f27bfe3d9256f4c0e45febae4317cca3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/run_name_test.ts @@ -0,0 +1,82 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed} from '@angular/core/testing'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import {State} from '../../../app_state'; + +import {buildRun} from '../../../runs/store/testing'; +import { + getExperimentIdForRunId, + getExperimentIdToAliasMap, + getRun, +} from '../../../selectors'; + +import {RunNameComponent} from './run_name_component'; +import {RunNameContainer} from './run_name_container'; + +describe('card run name', () => { + let store: MockStore; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [NoopAnimationsModule], + declarations: [RunNameContainer, RunNameComponent], + providers: [provideMockStore()], + }).compileComponents(); + + store = TestBed.inject>(Store) as MockStore; + store.overrideSelector(getExperimentIdForRunId, 'eid'); + store.overrideSelector(getExperimentIdToAliasMap, {}); + store.overrideSelector(getRun, null); + }); + + it('renders exp display name and run name', () => { + store.overrideSelector(getExperimentIdForRunId, 'eid'); + store.overrideSelector(getExperimentIdToAliasMap, {eid: 'Cat'}); + store.overrideSelector(getRun, buildRun({id: 'rid', name: 'Meow'})); + + const fixture = TestBed.createComponent(RunNameContainer); + fixture.componentInstance.runId = 'rid'; + fixture.detectChanges(); + + expect(fixture.nativeElement.textContent).toBe('Cat/Meow'); + }); + + it('renders only run name when there is no exp display name', () => { + store.overrideSelector(getExperimentIdForRunId, 'eid'); + store.overrideSelector(getExperimentIdToAliasMap, {cat: 'Cat'}); + store.overrideSelector(getRun, buildRun({id: 'rid', name: 'Bark/woof'})); + + const fixture = TestBed.createComponent(RunNameContainer); + fixture.componentInstance.runId = 'rid'; + fixture.detectChanges(); + + expect(fixture.nativeElement.textContent).toBe('Bark/woof'); + }); + + it('renders "Unknown run" if the `runId` does not exist in store', () => { + store.overrideSelector(getExperimentIdForRunId, null); + store.overrideSelector(getExperimentIdToAliasMap, {cat: 'Cat'}); + store.overrideSelector(getRun, null); + + const fixture = TestBed.createComponent(RunNameContainer); + fixture.componentInstance.runId = 'rid'; + fixture.detectChanges(); + + expect(fixture.nativeElement.textContent).toBe('rid'); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/scalar_card_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/scalar_card_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..48b7de491a30df88e05b31f829b85a5da5884fc1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/scalar_card_component.ng.html @@ -0,0 +1,99 @@ + +
    + + + + + + + + + + + +
    +
    + + +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/scalar_card_component.scss b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/scalar_card_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..a7ea72a08d9a4644e1dc3e3d656e6b9153d12956 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/scalar_card_component.scss @@ -0,0 +1,80 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; +@import '../common'; + +$_title-to-heading-gap: 12px; + +:host { + display: flex; + flex-direction: column; + box-sizing: border-box; + height: 100%; + overflow: auto; + padding: $metrics-preferred-gap; + // When vertically centered, the title's text-top contains extra space above + // the text, which counts towards the visually perceived white space. + padding-top: $metrics-preferred-gap - $_title-to-heading-gap; +} + +.heading { + $heading-content-gap: 4px; + + align-items: center; + display: flex; + justify-content: space-between; + font-size: 14px; + margin-bottom: $heading-content-gap; + position: relative; +} + +.tag { + overflow: hidden; +} + +.pin-button mat-icon { + height: 18px; +} + +.controls { + color: mat-color($tb-foreground, secondary-text); + flex-shrink: 0; + // TODO(psybuzz) do not use negative margin. + margin-right: -1 * $_title-to-heading-gap; + white-space: nowrap; +} + +.chart-container { + position: relative; + flex: 1; + + mat-spinner { + $mat-icon-button-diameter: 40px; + $spinner-diameter: 18px; + $spinner-to-container-edge: ($mat-icon-button-diameter - $spinner-diameter) / + 2; + + // Position horizontally to be centered with the 'more options' button. + // Position vertically to be equidistant to the chart's top/right edges. + position: absolute; + right: $spinner-to-container-edge; + top: $spinner-to-container-edge; + } + + tb-line-chart { + display: block; + height: 100%; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/scalar_card_component.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/scalar_card_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..0152a908c82e81fd500ab28741580f6535a65645 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/scalar_card_component.ts @@ -0,0 +1,166 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + ElementRef, + EventEmitter, + Input, + Output, + ViewChild, +} from '@angular/core'; +import {DataLoadState} from '../../../types/data'; + +import {RunColorScale} from '../../../types/ui'; +import { + formatNumber, + formatRelativeTimeInMs, +} from '../../../util/value_formatter'; +import {LineChartComponent} from '../../../widgets/line_chart/line_chart_component'; +import { + EvaluationPoint, + Point, + SeriesData, + TooltipColumnSpec, + XAxisType as ChartXAxisType, + YAxisType, +} from '../../../widgets/line_chart/line_chart_types'; +import {ScalarStepDatum} from '../../data_source'; +import {TooltipSort, XAxisType} from '../../types'; + +const RESIZE_REDRAW_DEBOUNCE_TIME_IN_MS = 50; + +interface Metadata { + displayName: string; +} + +type StepDatum = ScalarStepDatum; + +export type SeriesPoint = Point; + +export type SeriesDataList = Array>; + +export type ScalarChartEvalPoint = EvaluationPoint; + +export type TooltipColumns = Array>; + +const DEFAULT_TOOLTIP_COLUMNS: TooltipColumns = [ + { + title: 'Name', + evaluate: (d: ScalarChartEvalPoint) => { + return d.dataset.metadata().meta.displayName; + }, + }, + { + title: 'Value', + evaluate: (d: ScalarChartEvalPoint) => { + return formatNumber(d.datum.y); + }, + }, + { + title: 'Step', + evaluate: (d: ScalarChartEvalPoint) => { + return d.datum.step.toString(); + }, + }, + { + title: 'Time', + evaluate: (d: ScalarChartEvalPoint) => { + // sec to ms. + const date = new Date(d.datum.wallTime * 1000); + return date.toLocaleString(); + }, + }, + { + title: 'Relative', + evaluate: (d: ScalarChartEvalPoint) => { + const data = d.dataset.data(); + const firstTime = data.length > 0 ? data[0].wallTime : 0; + const relativeTimeInMs = (d.datum.wallTime - firstTime) * 1000; + return formatRelativeTimeInMs(relativeTimeInMs); + }, + }, +]; + +@Component({ + selector: 'scalar-card-component', + templateUrl: 'scalar_card_component.ng.html', + styleUrls: ['scalar_card_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ScalarCardComponent { + readonly RESIZE_REDRAW_DEBOUNCE_TIME_IN_MS = RESIZE_REDRAW_DEBOUNCE_TIME_IN_MS; + readonly DataLoadState = DataLoadState; + + @Input() loadState!: DataLoadState; + @Input() title!: string; + @Input() tag!: string; + @Input() seriesDataList!: SeriesDataList; + @Input() tooltipSort!: TooltipSort; + @Input() ignoreOutliers!: boolean; + @Input() xAxisType!: XAxisType; + @Input() scalarSmoothing!: number; + @Input() runColorScale!: RunColorScale; + @Input() showFullSize!: boolean; + @Input() isPinned!: boolean; + + @Output() onFullSizeToggle = new EventEmitter(); + @Output() onPinClicked = new EventEmitter(); + + // Line chart may not exist when no data is present (*ngIf). + @ViewChild(LineChartComponent) + lineChart?: LineChartComponent; + + constructor(private readonly ref: ElementRef) {} + + yAxisType = YAxisType.LINEAR; + + chartXAxisType() { + switch (this.xAxisType) { + case XAxisType.STEP: + return ChartXAxisType.STEP; + case XAxisType.WALL_TIME: + return ChartXAxisType.WALL_TIME; + case XAxisType.RELATIVE: + return ChartXAxisType.RELATIVE; + default: + throw new Error('Invalid xAxisType for line chart.'); + } + } + + tooltipColumns: Array< + TooltipColumnSpec + > = DEFAULT_TOOLTIP_COLUMNS; + + toggleYAxisType() { + this.yAxisType = + this.yAxisType === YAxisType.LINEAR ? YAxisType.LOG : YAxisType.LINEAR; + } + + resetDomain() { + if (this.lineChart) { + this.lineChart.resetDomain(); + } + } + + redraw() { + if (this.lineChart) { + // Only redraw when it is visible (and thus have width and height). + if (this.ref.nativeElement.clientWidth) { + this.lineChart.redraw(); + } + } + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/scalar_card_container.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/scalar_card_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..4daae90d544c6fa48d7a9200e6f9cf8d19c09455 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/scalar_card_container.ts @@ -0,0 +1,276 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + OnInit, + Output, +} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {DataLoadState} from '../../../types/data'; +import {combineLatest, Observable, of} from 'rxjs'; +import { + combineLatestWith, + debounceTime, + distinctUntilChanged, + filter, + map, + startWith, + switchMap, +} from 'rxjs/operators'; + +import {State} from '../../../app_state'; +import { + getCardPinnedState, + getCurrentRouteRunSelection, + getExperimentIdForRunId, + getExperimentIdToAliasMap, + getRun, +} from '../../../selectors'; +import {RunColorScale} from '../../../types/ui'; +import {PluginType, ScalarStepDatum} from '../../data_source'; +import { + getCardLoadState, + getCardMetadata, + getCardTimeSeries, + getMetricsIgnoreOutliers, + getMetricsScalarSmoothing, + getMetricsTooltipSort, + getMetricsXAxisType, + RunToSeries, +} from '../../store'; +import {CardId, CardMetadata, XAxisType} from '../../types'; +import {CardRenderer} from '../metrics_view_types'; +import {getTagDisplayName} from '../utils'; + +import {SeriesDataList, SeriesPoint} from './scalar_card_component'; +import {getDisplayNameForRun} from './utils'; + +type ScalarCardMetadata = CardMetadata & { + plugin: PluginType.SCALARS; +}; + +function areSeriesDataListEqual( + listA: SeriesDataList, + listB: SeriesDataList +): boolean { + if (listA.length !== listB.length) { + return false; + } + return listA.every((listAVal, index) => { + const listBVal = listB[index]; + const listAPoints = listAVal.points; + const listBPoints = listBVal.points; + return ( + listAVal.seriesId === listBVal.seriesId && + listAVal.metadata.displayName === listBVal.metadata.displayName && + listAVal.visible === listBVal.visible && + listAPoints.length === listBPoints.length && + listAPoints.every((listAPoint, index) => { + const listBPoint = listBPoints[index]; + return listAPoint.x === listBPoint.x && listAPoint.y === listBPoint.y; + }) + ); + }); +} + +@Component({ + selector: 'scalar-card', + template: ` + + `, + styles: [ + ` + :host { + display: block; + height: 100%; + } + `, + ], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ScalarCardContainer implements CardRenderer, OnInit { + constructor(private readonly store: Store) {} + + @Input() cardId!: CardId; + @Input() groupName!: string | null; + @Input() runColorScale!: RunColorScale; + @Output() fullWidthChanged = new EventEmitter(); + @Output() fullHeightChanged = new EventEmitter(); + @Output() pinStateChanged = new EventEmitter(); + + loadState$?: Observable; + title$?: Observable; + tag$?: Observable; + seriesDataList$?: Observable = of([]); + isPinned$?: Observable; + readonly tooltipSort$ = this.store.select(getMetricsTooltipSort); + readonly ignoreOutliers$ = this.store.select(getMetricsIgnoreOutliers); + readonly xAxisType$ = this.store.select(getMetricsXAxisType); + readonly scalarSmoothing$ = this.store.select(getMetricsScalarSmoothing); + showFullSize = false; + + private isScalarCardMetadata( + cardMetadata: CardMetadata + ): cardMetadata is ScalarCardMetadata { + const {plugin} = cardMetadata; + return plugin === PluginType.SCALARS; + } + + onFullSizeToggle() { + this.showFullSize = !this.showFullSize; + this.fullWidthChanged.emit(this.showFullSize); + this.fullHeightChanged.emit(this.showFullSize); + } + + /** + * Build observables once cardId is defined (after onInit). + */ + ngOnInit() { + const selectCardMetadata$ = this.store.select(getCardMetadata, this.cardId); + const cardMetadata$ = selectCardMetadata$.pipe( + filter((cardMetadata) => { + return !!cardMetadata && this.isScalarCardMetadata(cardMetadata); + }), + map((cardMetadata) => { + return cardMetadata as ScalarCardMetadata; + }) + ); + + const settingsAndTimeSeries$ = combineLatest([ + this.store.select(getMetricsXAxisType), + this.store.select(getCardTimeSeries, this.cardId), + ]); + const runIdAndPoints$ = settingsAndTimeSeries$.pipe( + filter(([xAxisType, runToSeries]) => !!runToSeries), + map( + ([xAxisType, runToSeries]) => + ({xAxisType, runToSeries} as { + xAxisType: XAxisType; + runToSeries: RunToSeries; + }) + ), + map(({xAxisType, runToSeries}) => { + const runIds = Object.keys(runToSeries); + const results = runIds.map((runId) => { + return { + runId, + points: this.stepSeriesToLineSeries(runToSeries[runId], xAxisType), + }; + }); + return results; + }) + ); + + this.seriesDataList$ = runIdAndPoints$.pipe( + switchMap((runIdAndPoints) => { + if (!runIdAndPoints.length) { + return of([]); + } + + return combineLatest( + runIdAndPoints.map((runIdAndPoint) => { + return this.getRunDisplayNameAndPoints(runIdAndPoint); + }) + ); + }), + combineLatestWith(this.store.select(getCurrentRouteRunSelection)), + // When the `fetchRunsSucceeded` action fires, the run selection + // map and the metadata change. To prevent quick fire of changes, + // debounce by a microtask to emit only single change for the runs + // store change. + debounceTime(0), + map(([result, runSelectionMap]) => { + return result.map(({runId, displayName, points}) => { + return { + seriesId: runId, + metadata: {displayName}, + points, + visible: Boolean(runSelectionMap && runSelectionMap.get(runId)), + }; + }); + }), + startWith([]), + distinctUntilChanged(areSeriesDataListEqual) + ); + + this.loadState$ = this.store.select(getCardLoadState, this.cardId); + + this.tag$ = cardMetadata$.pipe( + map((cardMetadata) => { + return cardMetadata.tag; + }) + ); + + this.title$ = this.tag$.pipe( + map((tag) => { + return getTagDisplayName(tag, this.groupName); + }) + ); + + this.isPinned$ = this.store.select(getCardPinnedState, this.cardId); + } + + private getRunDisplayNameAndPoints(runIdAndPoint: { + runId: string; + points: SeriesPoint[]; + }): Observable<{runId: string; displayName: string; points: SeriesPoint[]}> { + const {runId, points} = runIdAndPoint; + return combineLatest([ + this.store.select(getExperimentIdForRunId, {runId}), + this.store.select(getExperimentIdToAliasMap), + this.store.select(getRun, {runId}), + ]).pipe( + map(([experimentId, idToAlias, run]) => { + const displayName = getDisplayNameForRun( + runId, + run, + experimentId ? idToAlias[experimentId] : null + ); + return {runId, displayName, points}; + }) + ); + } + + private stepSeriesToLineSeries( + stepSeries: ScalarStepDatum[], + xAxisType: XAxisType + ) { + const isStepBased = xAxisType === XAxisType.STEP; + return stepSeries.map((stepDatum) => { + return { + ...stepDatum, + x: isStepBased ? stepDatum.step : stepDatum.wallTime, + y: stepDatum.value, + }; + }); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/scalar_card_module.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/scalar_card_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..9682a870ea253283a3bc2dcddc2df32d82b67f28 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/scalar_card_module.ts @@ -0,0 +1,42 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {MatButtonModule} from '@angular/material/button'; +import {MatIconModule} from '@angular/material/icon'; +import {MatMenuModule} from '@angular/material/menu'; +import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; + +import {LineChartModule} from '../../../widgets/line_chart/line_chart_module'; +import {ResizeDetectorModule} from '../../../widgets/resize_detector_module'; +import {TruncatedPathModule} from '../../../widgets/text/truncated_path_module'; +import {ScalarCardComponent} from './scalar_card_component'; +import {ScalarCardContainer} from './scalar_card_container'; + +@NgModule({ + declarations: [ScalarCardContainer, ScalarCardComponent], + exports: [ScalarCardContainer], + imports: [ + CommonModule, + LineChartModule, + MatButtonModule, + MatIconModule, + MatMenuModule, + MatProgressSpinnerModule, + ResizeDetectorModule, + TruncatedPathModule, + ], +}) +export class ScalarCardModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/scalar_card_test.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/scalar_card_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..0004bd50daf92a97fe794209c99cd856ece2a929 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/scalar_card_test.ts @@ -0,0 +1,921 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {OverlayContainer} from '@angular/cdk/overlay'; +import {Component, Input} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {ComponentFixture, fakeAsync, flush, tick} from '@angular/core/testing'; +import {MatMenuModule} from '@angular/material/menu'; +import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; +import {By} from '@angular/platform-browser'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import {State} from '../../../app_state'; +import {DataLoadState} from '../../../types/data'; +import {of, ReplaySubject} from 'rxjs'; + +import {Run} from '../../../runs/store/runs_types'; +import {buildRun} from '../../../runs/store/testing'; +import * as selectors from '../../../selectors'; +import {MatIconTestingModule} from '../../../testing/mat_icon_module'; +import {RunColorScale} from '../../../types/ui'; +import { + XAxisType as ChartXAxisType, + YAxisType, +} from '../../../widgets/line_chart/line_chart_types'; +import {TooltipSortingMethod} from '../../../widgets/line_chart/polymer_interop_types'; +import {ResizeDetectorTestingModule} from '../../../widgets/resize_detector_testing_module'; +import {TruncatedPathModule} from '../../../widgets/text/truncated_path_module'; +import {PluginType} from '../../data_source'; +import { + appStateFromMetricsState, + buildMetricsState, + provideMockCardRunToSeriesData, +} from '../../testing'; +import {TooltipSort, XAxisType} from '../../types'; + +import { + ScalarCardComponent, + ScalarChartEvalPoint, + SeriesDataList, + TooltipColumns, +} from './scalar_card_component'; +import {ScalarCardContainer} from './scalar_card_container'; + +@Component({ + selector: 'tb-line-chart', + template: '', +}) +class TestableLineChart { + @Input() colorScale!: RunColorScale; + @Input() tooltipColumns!: TooltipColumns; + @Input() seriesDataList!: SeriesDataList; + @Input() smoothingEnabled!: boolean; + @Input() ignoreYOutliers!: boolean; + @Input() smoothingWeight!: number; + @Input() xAxisType!: ChartXAxisType; + @Input() yAxisType!: YAxisType; + @Input() tooltipSortingMethod!: TooltipSortingMethod; + redraw() {} + resetDomain() {} +} + +describe('scalar card', () => { + let store: MockStore; + let selectSpy: jasmine.Spy; + let overlayContainer: OverlayContainer; + let resizeTester: ResizeDetectorTestingModule; + + function openOverflowMenu(fixture: ComponentFixture) { + const menuButton = fixture.debugElement.query( + By.css('[aria-label="More line chart options"]') + ); + menuButton.nativeElement.click(); + fixture.detectChanges(); + } + + function getMenuButton(buttonAriaLabel: string) { + const buttons = overlayContainer + .getContainerElement() + .querySelectorAll(`[aria-label="${buttonAriaLabel}"]`); + expect(buttons.length).toBe(1); + return buttons[0] as HTMLButtonElement; + } + + function createComponent( + cardId: string + ): ComponentFixture { + const fixture = TestBed.createComponent(ScalarCardContainer); + fixture.componentInstance.cardId = cardId; + // Let the observables to be subscribed. + fixture.detectChanges(); + // Flush the debounce on the `seriesDataList$`. + tick(0); + // Redraw based on the flushed `seriesDataList$`. + fixture.detectChanges(); + + const scalarCardComponent = fixture.debugElement.query( + By.directive(ScalarCardComponent) + ); + const lineChartComponent = fixture.debugElement.query( + By.directive(TestableLineChart) + ); + + // LineChart is rendered inside *ngIf. Set it only when it is rendered. + if (lineChartComponent) { + // HACK: we are using viewChild in ScalarCardComponent and there is + // no good way to provide a stub implementation. Manually set what + // would be populated by ViewChild decorator. + scalarCardComponent.componentInstance.lineChart = + lineChartComponent.componentInstance; + } + return fixture; + } + + function triggerStoreUpdate() { + store.refreshState(); + // Flush the debounce on the `seriesDataList$`. + tick(0); + } + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + MatIconTestingModule, + MatMenuModule, + MatProgressSpinnerModule, + NoopAnimationsModule, + ResizeDetectorTestingModule, + TruncatedPathModule, + ], + declarations: [ + ScalarCardContainer, + ScalarCardComponent, + TestableLineChart, + ], + providers: [ + provideMockStore({ + initialState: appStateFromMetricsState(buildMetricsState()), + }), + ], + }).compileComponents(); + + store = TestBed.inject>(Store) as MockStore; + selectSpy = spyOn(store, 'select').and.callThrough(); + overlayContainer = TestBed.inject(OverlayContainer); + resizeTester = TestBed.inject(ResizeDetectorTestingModule); + store.overrideSelector(selectors.getCurrentRouteRunSelection, new Map()); + store.overrideSelector(selectors.getExperimentIdForRunId, null); + store.overrideSelector(selectors.getExperimentIdToAliasMap, {}); + store.overrideSelector(selectors.getRun, null); + }); + + it('renders empty chart when there is no data', fakeAsync(() => { + const cardMetadata = { + plugin: PluginType.SCALARS, + tag: 'tagA', + run: null, + }; + provideMockCardRunToSeriesData( + selectSpy, + PluginType.SCALARS, + 'card1', + cardMetadata, + null /* runToSeries */ + ); + + const fixture = createComponent('card1'); + + const metadataEl = fixture.debugElement.query(By.css('.heading')); + expect(metadataEl.nativeElement.textContent).toContain('tagA'); + + const lineChartEl = fixture.debugElement.query( + By.directive(TestableLineChart) + ); + expect(lineChartEl).toBeTruthy(); + expect(lineChartEl.componentInstance.seriesDataList.length).toBe(0); + })); + + it('renders loading spinner when loading', fakeAsync(() => { + provideMockCardRunToSeriesData(selectSpy, PluginType.SCALARS, 'card1'); + store.overrideSelector( + selectors.getCardLoadState, + DataLoadState.NOT_LOADED + ); + triggerStoreUpdate(); + + const fixture = createComponent('card1'); + let loadingEl = fixture.debugElement.query(By.css('mat-spinner')); + expect(loadingEl).not.toBeTruthy(); + + store.overrideSelector(selectors.getCardLoadState, DataLoadState.LOADING); + triggerStoreUpdate(); + fixture.detectChanges(); + loadingEl = fixture.debugElement.query(By.css('mat-spinner')); + expect(loadingEl).toBeTruthy(); + + store.overrideSelector(selectors.getCardLoadState, DataLoadState.LOADED); + triggerStoreUpdate(); + fixture.detectChanges(); + loadingEl = fixture.debugElement.query(By.css('mat-spinner')); + expect(loadingEl).not.toBeTruthy(); + + store.overrideSelector(selectors.getCardLoadState, DataLoadState.FAILED); + triggerStoreUpdate(); + fixture.detectChanges(); + loadingEl = fixture.debugElement.query(By.css('mat-spinner')); + expect(loadingEl).not.toBeTruthy(); + })); + + it('renders data', fakeAsync(() => { + const cardMetadata = { + plugin: PluginType.SCALARS, + tag: 'tagA', + run: null, + }; + const runToSeries = { + run1: [ + {wallTime: 100, value: 1, step: 333}, + {wallTime: 101, value: 2, step: 555}, + ], + }; + provideMockCardRunToSeriesData( + selectSpy, + PluginType.SCALARS, + 'card1', + cardMetadata, + runToSeries + ); + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([['run1', true]]) + ); + store.overrideSelector(selectors.getMetricsXAxisType, XAxisType.STEP); + selectSpy + .withArgs(selectors.getRun, {runId: 'run1'}) + .and.returnValue(of(buildRun({name: 'Run1 name'}))); + + const fixture = createComponent('card1'); + + const metadataEl = fixture.debugElement.query(By.css('.heading')); + const emptyEl = fixture.debugElement.query(By.css('.empty-message')); + expect(metadataEl.nativeElement.textContent).toContain('tagA'); + expect(emptyEl).not.toBeTruthy(); + + const lineChartEl = fixture.debugElement.query( + By.directive(TestableLineChart) + ); + expect(lineChartEl).toBeTruthy(); + + expect(lineChartEl.componentInstance.seriesDataList.length).toBe(1); + const { + seriesId, + metadata, + points, + visible, + } = lineChartEl.componentInstance.seriesDataList[0]; + expect(seriesId).toBe('run1'); + expect(metadata).toEqual({displayName: 'Run1 name'}); + expect(visible).toBe(true); + expect( + points.map((p: {x: number; y: number}) => ({x: p.x, y: p.y})) + ).toEqual([ + {x: 333, y: 1}, + {x: 555, y: 2}, + ]); + })); + + describe('displayName', () => { + beforeEach(() => { + const cardMetadata = { + plugin: PluginType.SCALARS, + tag: 'tagA', + run: null, + }; + const runToSeries = {run1: [{wallTime: 101, value: 2, step: 555}]}; + provideMockCardRunToSeriesData( + selectSpy, + PluginType.SCALARS, + 'card1', + cardMetadata, + runToSeries + ); + }); + + it('sets correct displayName when there is a experiment map', fakeAsync(() => { + selectSpy + .withArgs(selectors.getExperimentIdForRunId, {runId: 'run1'}) + .and.returnValue(of('eid1')); + selectSpy + .withArgs(selectors.getRun, {runId: 'run1'}) + .and.returnValue(of(buildRun({name: 'Run1 name'}))); + store.overrideSelector(selectors.getExperimentIdToAliasMap, { + eid1: 'existing_exp', + eid2: 'ERROR!', + }); + + const fixture = createComponent('card1'); + + const lineChartEl = fixture.debugElement.query( + By.directive(TestableLineChart) + ); + const { + seriesId, + metadata, + } = lineChartEl.componentInstance.seriesDataList[0]; + + expect(seriesId).toBe('run1'); + expect(metadata).toEqual({displayName: 'existing_exp/Run1 name'}); + })); + + it('sets run id if a run and experiment are not found', fakeAsync(() => { + selectSpy + .withArgs(selectors.getExperimentIdForRunId, {runId: 'run1'}) + .and.returnValue(of(null)); + selectSpy + .withArgs(selectors.getRun, {runId: 'run1'}) + .and.returnValue(of(null)); + store.overrideSelector(selectors.getExperimentIdToAliasMap, {}); + + const fixture = createComponent('card1'); + + const lineChartEl = fixture.debugElement.query( + By.directive(TestableLineChart) + ); + const { + seriesId, + metadata, + } = lineChartEl.componentInstance.seriesDataList[0]; + + expect(seriesId).toBe('run1'); + expect(metadata).toEqual({displayName: 'run1'}); + })); + + it('shows experiment id and "..." if only run is not found (maybe loading)', fakeAsync(() => { + selectSpy + .withArgs(selectors.getExperimentIdForRunId, {runId: 'run1'}) + .and.returnValue(of('eid1')); + selectSpy + .withArgs(selectors.getRun, {runId: 'run1'}) + .and.returnValue(of(null)); + store.overrideSelector(selectors.getExperimentIdToAliasMap, { + eid1: 'existing_exp', + }); + + const fixture = createComponent('card1'); + + const lineChartEl = fixture.debugElement.query( + By.directive(TestableLineChart) + ); + expect(lineChartEl.componentInstance.seriesDataList.length).toBe(1); + + const { + seriesId, + metadata, + } = lineChartEl.componentInstance.seriesDataList[0]; + expect(seriesId).toBe('run1'); + expect(metadata).toEqual({displayName: 'existing_exp/...'}); + })); + + it('updates displayName with run when run populates', fakeAsync(() => { + const getRun = new ReplaySubject(1); + getRun.next(null); + selectSpy + .withArgs(selectors.getExperimentIdForRunId, {runId: 'run1'}) + .and.returnValue(of('eid1')); + selectSpy + .withArgs(selectors.getRun, {runId: 'run1'}) + .and.returnValue(getRun); + store.overrideSelector(selectors.getExperimentIdToAliasMap, { + eid1: 'existing_exp', + }); + + const fixture = createComponent('card1'); + + getRun.next(buildRun({name: 'Foobar'})); + triggerStoreUpdate(); + fixture.detectChanges(); + + const lineChartEl = fixture.debugElement.query( + By.directive(TestableLineChart) + ); + const {metadata} = lineChartEl.componentInstance.seriesDataList[0]; + expect(metadata).toEqual({displayName: 'existing_exp/Foobar'}); + })); + }); + + describe('xAxisType setting', () => { + beforeEach(() => { + const runToSeries = { + run1: [ + {wallTime: 100, value: 1, step: 333}, + {wallTime: 101, value: 2, step: 555}, + ], + }; + provideMockCardRunToSeriesData( + selectSpy, + PluginType.SCALARS, + 'card1', + null /* metadataOverride */, + runToSeries + ); + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([['run1', true]]) + ); + }); + + const expectedPoints = { + step: [ + {x: 333, y: 1}, + {x: 555, y: 2}, + ], + wallTime: [ + {x: 100, y: 1}, + {x: 101, y: 2}, + ], + }; + + const specs = [ + { + name: 'step', + xType: XAxisType.STEP, + expectedPoints: expectedPoints.step, + }, + { + name: 'wall_time', + xType: XAxisType.WALL_TIME, + expectedPoints: expectedPoints.wallTime, + }, + { + name: 'relative', + xType: XAxisType.RELATIVE, + expectedPoints: expectedPoints.wallTime, + }, + ]; + for (const spec of specs) { + it(`formats series data when xAxisType is: ${spec.name}`, fakeAsync(() => { + store.overrideSelector(selectors.getMetricsXAxisType, spec.xType); + selectSpy + .withArgs(selectors.getRun, {runId: 'run1'}) + .and.returnValue(of(buildRun({name: 'Run1 name'}))); + const fixture = createComponent('card1'); + + const lineChartEl = fixture.debugElement.query( + By.directive(TestableLineChart) + ); + expect(lineChartEl.componentInstance.seriesDataList.length).toBe(1); + const { + seriesId, + metadata, + points, + visible, + } = lineChartEl.componentInstance.seriesDataList[0]; + expect(seriesId).toBe('run1'); + expect(metadata).toEqual({displayName: 'Run1 name'}); + expect(visible).toBe(true); + expect( + points.map((p: {x: number; y: number}) => ({x: p.x, y: p.y})) + ).toEqual(spec.expectedPoints); + })); + } + }); + + it('uses proper default tooltip columns', fakeAsync(() => { + const pointData1 = [ + {x: 10, y: 20, step: 10, wallTime: 120, value: 20}, + {x: 11, y: -20, step: 11, wallTime: 125, value: -20}, + ]; + const pointData2 = [{x: 12, y: 2, step: 12, wallTime: 130, value: 2}]; + const dataset1 = { + metadata: () => ({meta: {displayName: 'run1'}}), + data: () => pointData1, + }; + const dataset2 = { + metadata: () => ({meta: {displayName: 'run2'}}), + data: () => pointData2, + }; + const testChartPoints: ScalarChartEvalPoint[] = [ + {datum: pointData1[0], dataset: dataset1}, + {datum: pointData1[1], dataset: dataset1}, + {datum: pointData2[0], dataset: dataset2}, + ]; + + const fixture = createComponent('cardId'); + const tooltipColumns: TooltipColumns = fixture.debugElement.query( + By.directive(ScalarCardComponent) + ).componentInstance.tooltipColumns; + const results = tooltipColumns.map((column) => { + return { + title: column.title, + results: testChartPoints.map((d) => column.evaluate(d)), + }; + }); + + const resultsWithoutTime = results.filter((r) => r.title !== 'Time'); + expect(resultsWithoutTime).toEqual([ + { + title: 'Name', + results: ['run1', 'run1', 'run2'], + }, + { + title: 'Value', + results: ['20', '-20', '2'], + }, + { + title: 'Step', + results: ['10', '11', '12'], + }, + { + title: 'Relative', + results: ['0s', '5s', '0s'], + }, + ]); + })); + + it('respects settings from the store', fakeAsync(() => { + const runToSeries = { + run1: [ + {wallTime: 100, value: 1, step: 333}, + {wallTime: 101, value: 2, step: 555}, + ], + }; + const expectedPoints = { + step: [ + {x: 333, y: 1}, + {x: 555, y: 2}, + ], + wallTime: [ + {x: 100, y: 1}, + {x: 101, y: 2}, + ], + }; + provideMockCardRunToSeriesData( + selectSpy, + PluginType.SCALARS, + 'card1', + null /* metadataOverride */, + runToSeries + ); + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([['run1', true]]) + ); + store.overrideSelector( + selectors.getMetricsTooltipSort, + TooltipSort.ASCENDING + ); + store.overrideSelector(selectors.getMetricsIgnoreOutliers, true); + store.overrideSelector(selectors.getMetricsXAxisType, XAxisType.STEP); + store.overrideSelector(selectors.getMetricsScalarSmoothing, 1); + + const fixture = createComponent('card1'); + + const lineChart = fixture.debugElement.query( + By.directive(TestableLineChart) + ).componentInstance; + expect(lineChart.tooltipSortingMethod).toBe(TooltipSort.ASCENDING); + expect(lineChart.ignoreYOutliers).toBe(true); + expect(lineChart.xAxisType).toBe(ChartXAxisType.STEP); + expect(lineChart.smoothingEnabled).toBe(true); + expect(lineChart.smoothingWeight).toBe(1); + expect(lineChart.seriesDataList.length).toBe(1); + const pointsBefore = lineChart.seriesDataList[0].points.map( + (p: {x: number; y: number}) => { + return {x: p.x, y: p.y}; + } + ); + expect(pointsBefore).toEqual(expectedPoints.step); + + store.overrideSelector( + selectors.getMetricsTooltipSort, + TooltipSort.DESCENDING + ); + store.overrideSelector(selectors.getMetricsIgnoreOutliers, false); + store.overrideSelector(selectors.getMetricsXAxisType, XAxisType.WALL_TIME); + store.overrideSelector(selectors.getMetricsScalarSmoothing, 0); + triggerStoreUpdate(); + + fixture.detectChanges(); + + expect(lineChart.tooltipSortingMethod).toBe(TooltipSort.DESCENDING); + expect(lineChart.ignoreYOutliers).toBe(false); + expect(lineChart.xAxisType).toBe(ChartXAxisType.WALL_TIME); + expect(lineChart.smoothingEnabled).toBe(false); + expect(lineChart.smoothingWeight).toBe(0); + expect(lineChart.seriesDataList.length).toBe(1); + const pointsAfter = lineChart.seriesDataList[0].points.map( + (p: {x: number; y: number}) => { + return {x: p.x, y: p.y}; + } + ); + expect(pointsAfter).toEqual(expectedPoints.wallTime); + })); + + it('respects run selection state', fakeAsync(() => { + const runToSeries = { + run1: [{wallTime: 100, value: 1, step: 333}], + run2: [{wallTime: 100, value: 1, step: 333}], + run3: [{wallTime: 100, value: 1, step: 333}], + }; + provideMockCardRunToSeriesData( + selectSpy, + PluginType.SCALARS, + 'card1', + null /* metadataOverride */, + runToSeries + ); + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([ + ['run1', true], + ['run2', false], + ]) + ); + + const fixture = createComponent('card1'); + + const lineChart = fixture.debugElement.query( + By.directive(TestableLineChart) + ).componentInstance as TestableLineChart; + let visibleRunIds = lineChart.seriesDataList + .filter((x) => x.visible) + .map((x) => x.seriesId); + expect(lineChart.seriesDataList.length).toBe(3); + expect(visibleRunIds).toEqual(['run1']); + + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([ + ['run1', false], + ['run3', true], + ]) + ); + triggerStoreUpdate(); + fixture.detectChanges(); + + visibleRunIds = lineChart.seriesDataList + .filter((x) => x.visible) + .map((x) => x.seriesId); + expect(lineChart.seriesDataList.length).toBe(3); + expect(visibleRunIds).toEqual(['run3']); + })); + + describe('overflow menu', () => { + beforeEach(() => { + const runToSeries = { + run1: [ + {wallTime: 100, value: 1, step: 333}, + {wallTime: 101, value: 2, step: 555}, + ], + }; + provideMockCardRunToSeriesData( + selectSpy, + PluginType.SCALARS, + 'card1', + null /* metadataOverride */, + runToSeries + ); + }); + + it('toggles yAxisType when you click on button in overflow menu', fakeAsync(() => { + const fixture = createComponent('card1'); + + openOverflowMenu(fixture); + getMenuButton('Toggle Y-axis log scale on line chart').click(); + fixture.detectChanges(); + + const lineChartEl = fixture.debugElement.query( + By.directive(TestableLineChart) + ); + expect(lineChartEl.componentInstance.yAxisType).toBe(YAxisType.LOG); + + openOverflowMenu(fixture); + getMenuButton('Toggle Y-axis log scale on line chart').click(); + fixture.detectChanges(); + + expect(lineChartEl.componentInstance.yAxisType).toBe(YAxisType.LINEAR); + + // Clicking on overflow menu and mat button enqueue asyncs. Flush them. + flush(); + })); + + it('resets domain when user clicks on reset button', fakeAsync(() => { + const fixture = createComponent('card1'); + + const lineChartEl = fixture.debugElement.query( + By.directive(TestableLineChart) + ); + const resetDomainSpy = spyOn( + lineChartEl.componentInstance, + 'resetDomain' + ); + + openOverflowMenu(fixture); + getMenuButton('Fit line chart domains to data').click(); + fixture.detectChanges(); + + expect(resetDomainSpy).toHaveBeenCalledTimes(1); + + // Clicking on overflow menu and mat button enqueue asyncs. Flush them. + flush(); + })); + + it('disables the resetDomain button when there are no runs', fakeAsync(() => { + const runToSeries = {}; + provideMockCardRunToSeriesData( + selectSpy, + PluginType.SCALARS, + 'card1', + null /* metadataOverride */, + runToSeries + ); + const fixture = createComponent('card1'); + + openOverflowMenu(fixture); + const button = getMenuButton('Fit line chart domains to data'); + expect(button.disabled).toBe(true); + + // Clicking on overflow menu enqueues async. + flush(); + })); + }); + + describe('full size', () => { + beforeEach(() => { + provideMockCardRunToSeriesData( + selectSpy, + PluginType.SCALARS, + 'card1', + null /* metadataOverride */ + ); + }); + + it('requests full size on toggle', fakeAsync(() => { + const onFullWidthChanged = jasmine.createSpy(); + const onFullHeightChanged = jasmine.createSpy(); + const fixture = createComponent('card1'); + fixture.detectChanges(); + + fixture.componentInstance.fullWidthChanged.subscribe(onFullWidthChanged); + fixture.componentInstance.fullHeightChanged.subscribe( + onFullHeightChanged + ); + const button = fixture.debugElement.query( + By.css('[aria-label="Toggle full size mode"]') + ); + + button.nativeElement.click(); + expect(onFullWidthChanged.calls.allArgs()).toEqual([[true]]); + expect(onFullHeightChanged.calls.allArgs()).toEqual([[true]]); + + button.nativeElement.click(); + expect(onFullWidthChanged.calls.allArgs()).toEqual([[true], [false]]); + expect(onFullHeightChanged.calls.allArgs()).toEqual([[true], [false]]); + })); + }); + + describe('resize', () => { + beforeEach(() => { + const runToSeries = { + run1: [ + {wallTime: 100, value: 1, step: 333}, + {wallTime: 101, value: 2, step: 555}, + ], + }; + provideMockCardRunToSeriesData( + selectSpy, + PluginType.SCALARS, + 'card1', + null /* metadataOverride */, + runToSeries + ); + }); + + it('calls redraw on resize', fakeAsync(() => { + const fixture = createComponent('card1'); + const lineChartComponent = fixture.debugElement.query( + By.directive(TestableLineChart) + ); + + const redrawSpy = spyOn(lineChartComponent.componentInstance, 'redraw'); + + resizeTester.simulateResize(fixture); + + expect(redrawSpy).toHaveBeenCalledTimes(1); + })); + }); + + describe('perf', () => { + it('does not update `seriesDataList` for irrelevant runSelection changes', fakeAsync(() => { + const runToSeries = {run1: []}; + provideMockCardRunToSeriesData( + selectSpy, + PluginType.SCALARS, + 'card1', + null /* metadataOverride */, + runToSeries + ); + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([['run1', true]]) + ); + + const fixture = createComponent('card1'); + const lineChartComponent = fixture.debugElement.query( + By.directive(TestableLineChart) + ); + const before = lineChartComponent.componentInstance.seriesDataList; + + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([ + ['run1', true], + ['shouldBeNoop', true], + ]) + ); + triggerStoreUpdate(); + fixture.detectChanges(); + + const after = lineChartComponent.componentInstance.seriesDataList; + expect(before).toBe(after); + })); + + it('updates `seriesDataList` for relevant runSelection changes', fakeAsync(() => { + const runToSeries = {run1: []}; + provideMockCardRunToSeriesData( + selectSpy, + PluginType.SCALARS, + 'card1', + null /* metadataOverride */, + runToSeries + ); + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([['run1', true]]) + ); + + const fixture = createComponent('card1'); + const lineChartComponent = fixture.debugElement.query( + By.directive(TestableLineChart) + ); + const before = lineChartComponent.componentInstance.seriesDataList; + + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([['run1', false]]) + ); + triggerStoreUpdate(); + fixture.detectChanges(); + + const after = lineChartComponent.componentInstance.seriesDataList; + expect(before).not.toBe(after); + })); + + it('updates `seriesDataList` for xAxisType changes', fakeAsync(() => { + const runToSeries = { + run1: [ + {wallTime: 100, value: 1, step: 333}, + {wallTime: 101, value: 2, step: 555}, + ], + }; + provideMockCardRunToSeriesData( + selectSpy, + PluginType.SCALARS, + 'card1', + null /* metadataOverride */, + runToSeries + ); + store.overrideSelector(selectors.getMetricsXAxisType, XAxisType.STEP); + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([['run1', true]]) + ); + + const fixture = createComponent('card1'); + const lineChartComponent = fixture.debugElement.query( + By.directive(TestableLineChart) + ); + const before = lineChartComponent.componentInstance.seriesDataList; + + store.overrideSelector( + selectors.getMetricsXAxisType, + XAxisType.WALL_TIME + ); + triggerStoreUpdate(); + fixture.detectChanges(); + + const after = lineChartComponent.componentInstance.seriesDataList; + expect(before).not.toBe(after); + })); + + it('does not call the redraw when the card is invisible', fakeAsync(() => { + const fixture = createComponent('card1'); + const lineChartComponent = fixture.debugElement.query( + By.directive(TestableLineChart) + ); + + const redrawSpy = spyOn(lineChartComponent.componentInstance, 'redraw'); + + fixture.nativeElement.style.display = 'none'; + resizeTester.simulateResize(fixture); + expect(redrawSpy).not.toHaveBeenCalled(); + + fixture.nativeElement.style.display = 'block'; + resizeTester.simulateResize(fixture); + expect(redrawSpy).toHaveBeenCalledTimes(1); + })); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/utils.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/utils.ts new file mode 100644 index 0000000000000000000000000000000000000000..c8d564ca8aa48f6eaf502af70c9328c7881d21aa --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/utils.ts @@ -0,0 +1,31 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Run} from '../../../runs/store/runs_types'; + +export function getDisplayNameForRun( + runId: string, + run: Run | null, + experimentName: string | null | undefined +): string { + if (!run && !experimentName) { + return runId; + } + + const displayName = [experimentName, run ? run.name : '...'] + .filter(Boolean) + .join('/'); + + return displayName; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/utils_test.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/utils_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..9774476bb7d94345dd32d9b77b1745ec49640d5e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/card_renderer/utils_test.ts @@ -0,0 +1,41 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {buildRun} from '../../../runs/store/testing'; + +import {getDisplayNameForRun} from './utils'; + +describe('metrics card_renderer utils test', () => { + describe('#getDisplayNameForRun', () => { + it('returns runId when Run and experimentId are not present', () => { + expect(getDisplayNameForRun('rid', null, null)).toBe('rid'); + }); + + it('returns only run name when only experiment name is not present', () => { + expect(getDisplayNameForRun('rid', buildRun({name: 'foo'}), null)).toBe( + 'foo' + ); + }); + + it('returns "..." for run name, when only run is not present', () => { + expect(getDisplayNameForRun('rid', null, 'eid')).toBe('eid/...'); + }); + + it('returns exp and run name delimited by "/" when both are present', () => { + expect( + getDisplayNameForRun('rid', buildRun({name: 'foo/bar'}), 'eid') + ).toBe('eid/foo/bar'); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/BUILD b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..e2ee07b09ae97bda038a37d27b1da62df3a61c7d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/BUILD @@ -0,0 +1,139 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +tf_sass_binary( + name = "main_view_styles", + src = "main_view_component.scss", + deps = [ + "//tensorboard/webapp/metrics/views:metrics_common_styles", + ], +) + +tf_sass_binary( + name = "filter_input_component_styles", + src = "filter_input_component.scss", +) + +tf_sass_binary( + name = "filtered_view_component_styles", + src = "filtered_view_component.scss", + deps = [ + "//tensorboard/webapp/metrics/views:metrics_common_styles", + ], +) + +tf_sass_binary( + name = "pinned_view_component_styles", + src = "pinned_view_component.scss", + deps = [ + "//tensorboard/webapp/metrics/views:metrics_common_styles", + ], +) + +tf_sass_binary( + name = "card_grid_component_styles", + src = "card_grid_component.scss", + deps = [ + "//tensorboard/webapp/metrics/views:metrics_common_styles", + ], +) + +tf_sass_binary( + name = "card_groups_component_styles", + src = "card_groups_component.scss", + deps = [ + "//tensorboard/webapp/metrics/views:metrics_common_styles", + ], +) + +ng_module( + name = "main_view", + srcs = [ + "card_grid_component.ts", + "card_grid_container.ts", + "card_groups_component.ts", + "card_groups_container.ts", + "filter_input_component.ts", + "filter_input_container.ts", + "filtered_view_component.ts", + "filtered_view_container.ts", + "main_view_component.ts", + "main_view_container.ts", + "main_view_module.ts", + "pinned_view_component.ts", + "pinned_view_container.ts", + ], + assets = [ + "card_grid_component.ng.html", + "filter_input_component.ng.html", + "main_view_component.ng.html", + ":card_grid_component_styles", + ":card_groups_component_styles", + ":filter_input_component_styles", + ":filtered_view_component_styles", + ":main_view_styles", + ":pinned_view_component_styles", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_material_autocomplete", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/angular:expect_angular_material_input", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/metrics/actions", + "//tensorboard/webapp/metrics/data_source", + "//tensorboard/webapp/metrics/store", + "//tensorboard/webapp/metrics/store:types", + "//tensorboard/webapp/metrics/views:types", + "//tensorboard/webapp/metrics/views:utils", + "//tensorboard/webapp/metrics/views/card_renderer", + "//tensorboard/webapp/metrics/views/right_pane", + "//tensorboard/webapp/types:ui", + "//tensorboard/webapp/util:string", + "//tensorboard/webapp/util:types", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "main_view_tests", + testonly = True, + srcs = [ + "filter_input_test.ts", + "main_view_test.ts", + ], + deps = [ + ":main_view", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_cdk_overlay", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_material_autocomplete", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_input", + "//tensorboard/webapp/angular:expect_angular_platform_browser_animations", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/metrics:test_lib", + "//tensorboard/webapp/metrics:types", + "//tensorboard/webapp/metrics/actions", + "//tensorboard/webapp/metrics/data_source", + "//tensorboard/webapp/metrics/store", + "//tensorboard/webapp/metrics/views/card_renderer", + "//tensorboard/webapp/testing:dom", + "//tensorboard/webapp/testing:mat_icon", + "//tensorboard/webapp/testing:material", + "//tensorboard/webapp/types:ui", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_grid_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_grid_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..7ea1ecf25d4455554e4ed35a54a04f57db0a685c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_grid_component.ng.html @@ -0,0 +1,102 @@ + + + +
    + + +
    + + + + +
    + + + + + + + + + + + of {{ numPages }} + + + +
    +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_grid_component.scss b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_grid_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..ca6026bc0b8e232bec5595b7d652fc0d551d199f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_grid_component.scss @@ -0,0 +1,87 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; +@import '../common'; + +$_background: map-get($tb-theme, background); + +.card-grid { + display: grid; + grid-template-columns: repeat( + auto-fill, + minmax($metrics-min-card-width, auto) + ); + gap: $metrics-preferred-gap; + padding: $metrics-preferred-gap; +} + +card-view { + border: 1px solid #ddd; + border-radius: 4px; + box-sizing: border-box; + contain: strict; + height: 100%; + min-height: $metrics-min-card-height; + + &.full-width { + // Remove `contain: size` to let the content's intrinsic size define height. + contain: layout paint; + grid-column-start: 1; + grid-column-end: -1; + } + + &.full-height { + min-height: $metrics-min-card-height * 1.5; + } +} + +.group-controls { + color: mat-color($tb-foreground, secondary-text); + display: grid; + align-items: center; + grid-template-columns: 1fr 1fr 1fr; + gap: $metrics-preferred-gap; + padding: 0 $metrics-preferred-gap; +} + +.group-controls:first-of-type { + padding-top: $metrics-preferred-gap; +} + +.group-controls:last-of-type { + padding-bottom: $metrics-preferred-gap; +} + +.prev-container { + justify-self: flex-start; +} + +.expand-container { + justify-self: center; +} + +.input-and-next-container { + justify-self: flex-end; +} + +.pagination-input { + margin-right: $metrics-preferred-gap; +} + +.expand-group-button, +.pagination-button { + background-color: $metrics-button-background-color-on-gray; + color: mat-color($tb-foreground, secondary-text); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_grid_component.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_grid_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..4aa7021fd47a8c2007a307cd7833800aafdee444 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_grid_component.ts @@ -0,0 +1,83 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; + +import {PluginType} from '../../data_source'; +import {CardObserver} from '../card_renderer/card_lazy_loader'; + +import {CardIdWithMetadata} from '../metrics_view_types'; + +@Component({ + selector: 'metrics-card-grid-component', + templateUrl: './card_grid_component.ng.html', + styleUrls: ['./card_grid_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CardGridComponent { + readonly PluginType = PluginType; + + @Input() isGroupExpandable!: boolean; + @Input() isGroupExpanded!: boolean; + @Input() groupName!: string | null; + @Input() pageIndex!: number; + @Input() numPages!: number; + @Input() cardIdsWithMetadata!: CardIdWithMetadata[]; + @Input() cardObserver!: CardObserver; + @Input() showPaginationControls!: boolean; + + @Output() pageIndexChanged = new EventEmitter(); + @Output() groupExpansionToggled = new EventEmitter(); + + showExpand(isBottomControl: boolean) { + return isBottomControl ? this.isGroupExpandable : false; + } + + showPaginationInput(isBottomControl: boolean) { + return isBottomControl; + } + + trackByCards(index: number, cardIdWithMetadata: CardIdWithMetadata) { + return cardIdWithMetadata.cardId; + } + + onPaginationInputChange(event: Event) { + const input = event.target as HTMLInputElement; + + if (event.type === 'input' && input.value === '') { + return; + } + + const currentValue = Number(input.value) - 1; + const nextValue = Math.min(Math.max(0, currentValue), this.numPages - 1); + + // Rectifying logic is at the container but the rectified value does not + // appropriately make changes to the ``. + // Speculation: Angular seems to have some check on the template level that + // does shallow equals and prevent changing on the same value. + // Evidence: pageIndex change does fire, but `ngOnChanges` does not get + // triggered when the value is the same (rectified value). + if (input.value !== String(nextValue + 1)) { + input.value = String(nextValue + 1); + } + + this.pageIndexChanged.emit(nextValue); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_grid_container.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_grid_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..fc5a099aaf6e1e2d5b0cfd5bb8571de95a562b36 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_grid_container.ts @@ -0,0 +1,175 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + Input, + OnChanges, + SimpleChanges, +} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {getPageSize} from '../../../core/store/core_selectors'; +import {BehaviorSubject, combineLatest, Observable, of} from 'rxjs'; +import {map, shareReplay, switchMap, tap} from 'rxjs/operators'; + +import {State} from '../../../app_state'; +import {getMetricsTagGroupExpansionState} from '../../../selectors'; +import {metricsTagGroupExpansionChanged} from '../../actions'; +import {CardObserver} from '../card_renderer/card_lazy_loader'; +import {CardIdWithMetadata} from '../metrics_view_types'; + +// Tag group can be collapsed. Even when it is collapsed, we show three cards. +const ITEMS_COLLAPSED_CLIP_SIZE = 3; + +@Component({ + selector: 'metrics-card-grid', + template: ` + + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CardGridContainer implements OnChanges { + // groupName must be non-null if the group should be collapse/expand-able. + @Input() groupName: string | null = null; + @Input() cardIdsWithMetadata!: CardIdWithMetadata[]; + @Input() cardObserver!: CardObserver; + + private readonly groupName$ = new BehaviorSubject(null); + readonly pageIndex$ = new BehaviorSubject(0); + private readonly items$ = new BehaviorSubject([]); + + readonly numPages$ = combineLatest([ + this.items$, + this.store.select(getPageSize), + ]).pipe( + map(([items, pageSize]) => { + return Math.ceil(items.length / pageSize); + }) + ); + + readonly isGroupExpanded$: Observable = this.groupName$.pipe( + switchMap((groupName) => { + return groupName !== null + ? this.store.select(getMetricsTagGroupExpansionState, groupName) + : of(true); + }) + ); + + readonly showPaginationControls$ = combineLatest([ + this.numPages$, + this.store.select(getPageSize), + this.isGroupExpanded$, + ]).pipe( + map(([numPages, pageSize, isGroupExpanded]) => { + if (numPages <= 1) { + return false; + } + return pageSize <= ITEMS_COLLAPSED_CLIP_SIZE || isGroupExpanded; + }) + ); + + readonly isGroupExpandable$ = combineLatest([ + this.items$, + this.store.select(getPageSize), + ]).pipe( + map(([items, pageSize]) => { + if ( + this.groupName === null || + pageSize <= ITEMS_COLLAPSED_CLIP_SIZE || + items.length <= ITEMS_COLLAPSED_CLIP_SIZE + ) { + return false; + } + return true; + }) + ); + + readonly normalizedPageIndex$ = combineLatest([ + this.pageIndex$, + this.numPages$, + ]).pipe( + tap(([pageIndex, numPages]) => { + // Cycle in the Observable but only loops when pageIndex is not + // valid and does not repeat more than once. + if (numPages === 0) { + return; + } + if (pageIndex >= numPages) { + this.pageIndex$.next(numPages - 1); + } else if (pageIndex < 0) { + this.pageIndex$.next(0); + } + }), + map(([pageIndex, numPages]) => { + return Math.min(Math.max(pageIndex, 0), numPages - 1); + }), + shareReplay(1) + ); + + readonly pagedItems$ = combineLatest([ + this.items$, + this.store.select(getPageSize), + this.normalizedPageIndex$, + this.isGroupExpanded$, + ]).pipe( + map(([items, pageSize, pageIndex, expanded]) => { + const startIndex = pageSize * pageIndex; + // We only render 3 cards when collapsed. + const endIndex = + pageSize * pageIndex + + Math.min(expanded ? pageSize : ITEMS_COLLAPSED_CLIP_SIZE, pageSize); + return items.slice(startIndex, endIndex); + }) + ); + + constructor(private readonly store: Store) {} + + ngOnChanges(changes: SimpleChanges) { + if (changes['cardIdsWithMetadata']) { + this.items$.next(this.cardIdsWithMetadata); + } + + if (changes['groupName']) { + this.groupName$.next(this.groupName); + } + } + + onPageIndexChanged(newIndex: number) { + this.pageIndex$.next(newIndex); + } + + onGroupExpansionToggled() { + if (this.groupName === null) { + throw new RangeError( + 'Invariant error: expansion cannot be toggled when groupName is null' + ); + } + this.store.dispatch( + metricsTagGroupExpansionChanged({tagGroup: this.groupName}) + ); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_groups_component.scss b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_groups_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..92c6577864eb51c8f1f4ea1e286b067b9ff89733 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_groups_component.scss @@ -0,0 +1,37 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; +@import '../common'; + +.group-toolbar { + @include metrics-card-group-toolbar; + display: flex; + align-items: center; + border-top: 1px solid mat-color($tb-foreground, border); + border-bottom: 1px solid mat-color($tb-foreground, border); +} + +.card-group:first-of-type .group-toolbar { + border-top: none; +} + +.group-title { + @include metrics-card-group-title; +} + +.group-card-count { + @include metrics-card-group-count-text; + margin-left: 6px; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_groups_component.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_groups_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..ab9407d8b09dfaba42c655ed76cf324ea9cb4228 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_groups_component.ts @@ -0,0 +1,62 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component, Input} from '@angular/core'; + +import {PluginType} from '../../data_source'; +import {CardObserver} from '../card_renderer/card_lazy_loader'; + +import {CardGroup} from '../metrics_view_types'; + +@Component({ + selector: 'metrics-card-groups-component', + template: ` +
    +
    + + {{ group.groupName }} + {{ group.items.length }} cards + +
    + +
    + `, + styleUrls: [`card_groups_component.css`], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CardGroupsComponent { + readonly PluginType = PluginType; + + @Input() cardGroups!: CardGroup[]; + @Input() cardObserver!: CardObserver; + + trackByGroup(index: number, cardGroup: CardGroup) { + return cardGroup.groupName; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_groups_container.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_groups_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..633e63eaab995f231e01c88a1018542e5dda4350 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/card_groups_container.ts @@ -0,0 +1,59 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component, Input} from '@angular/core'; +import {createSelector, Store} from '@ngrx/store'; +import {Observable} from 'rxjs'; +import {map} from 'rxjs/operators'; + +import {State} from '../../../app_state'; +import {getCurrentRouteRunSelection} from '../../../selectors'; +import {isSingleRunPlugin} from '../../data_source'; +import {getNonEmptyCardIdsWithMetadata} from '../../store'; +import {CardObserver} from '../card_renderer/card_lazy_loader'; +import {CardGroup} from '../metrics_view_types'; +import {groupCardIdWithMetdata} from '../utils'; + +const getRenderableCardIdsWithMetadata = createSelector( + getNonEmptyCardIdsWithMetadata, + getCurrentRouteRunSelection, + (cardList, runSelectionMap) => { + return cardList.filter((card) => { + if (!isSingleRunPlugin(card.plugin)) { + return true; + } + return Boolean(runSelectionMap && runSelectionMap.get(card.runId!)); + }); + } +); + +@Component({ + selector: 'metrics-card-groups', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CardGroupsContainer { + @Input() cardObserver!: CardObserver; + + constructor(private readonly store: Store) {} + + readonly cardGroups$: Observable = this.store + .select(getRenderableCardIdsWithMetadata) + .pipe(map((cardList) => groupCardIdWithMetdata(cardList))); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filter_input_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filter_input_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..b96a247ae9ed9cecb9dd6080dba2181bd99e1b9c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filter_input_component.ng.html @@ -0,0 +1,42 @@ + +
    + + + +
    + + {{ completion }} + diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filter_input_component.scss b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filter_input_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..487a41c8670d340023f591c19da365305a84bcdc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filter_input_component.scss @@ -0,0 +1,49 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +.tag-filter { + display: flex; + position: relative; +} + +mat-icon { + color: mat-color($tb-foreground, secondary-text); + flex: none; + margin-right: 5px; +} + +:host { + color: mat-color($tb-foreground, text); + font-size: 13px; + + &:not(.valid) { + $_error-color: mat-color($tb-warn, 800); + + color: $_error-color; + + input { + caret-color: currentColor; + } + + .error-icon { + color: $_error-color; + + // Allow the autocomplete width calculation to ignore the icon size. + position: absolute; + right: 0; + } + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filter_input_component.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filter_input_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..736a350c0c038a4c1d1fdf31608c9045d29a00c6 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filter_input_component.ts @@ -0,0 +1,52 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + HostBinding, + Input, + Output, + ViewChild, +} from '@angular/core'; +import {MatAutocompleteTrigger} from '@angular/material/autocomplete'; + +import {escapeForRegex} from '../../../util/string'; + +@Component({ + selector: 'metrics-tag-filter-component', + templateUrl: 'filter_input_component.ng.html', + styleUrls: [`filter_input_component.css`], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MetricsFilterInputComponent { + @Input() regexFilterValue!: string; + @HostBinding('class.valid') @Input() isRegexFilterValid!: boolean; + @Input() completions!: string[]; + @Output() onRegexFilterValueChange = new EventEmitter(); + + @ViewChild(MatAutocompleteTrigger, {static: true}) + autocompleteTrigger!: MatAutocompleteTrigger; + + onFilterKeyUp(event: KeyboardEvent) { + if (event.key === 'Enter') { + this.autocompleteTrigger.closePanel(); + } + } + + onCompletionAccepted(completion: string) { + this.onRegexFilterValueChange.emit(escapeForRegex(completion)); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filter_input_container.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filter_input_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..570ea32713641fae6b247cc4c8b8c8ed1892a0c8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filter_input_container.ts @@ -0,0 +1,90 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {combineLatest, of} from 'rxjs'; +import {filter, map, switchMap} from 'rxjs/operators'; + +import {State} from '../../../app_state'; +import { + getMetricsTagFilter, + getNonEmptyCardIdsWithMetadata, +} from '../../../selectors'; +import {metricsTagFilterChanged} from '../../actions'; +import {compareTagNames} from '../utils'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'metrics-tag-filter', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MetricsFilterInputContainer { + constructor(private readonly store: Store) {} + + readonly tagFilter$ = this.store.select(getMetricsTagFilter); + + readonly isTagFilterRegexValid$ = this.tagFilter$.pipe( + map((tagFilterString) => { + try { + // tslint:disable-next-line:no-unused-expression Check for validity of filter. + new RegExp(tagFilterString); + return true; + } catch (err) { + return false; + } + }) + ); + + readonly completions$ = this.store + .select(getNonEmptyCardIdsWithMetadata) + .pipe( + map((cardList) => cardList.map(({tag}) => tag)), + switchMap((cardList) => { + return combineLatest([ + of(cardList), + this.store.select(getMetricsTagFilter), + ]); + }), + map<[string[], string], [string[], RegExp | null]>( + ([tags, tagFilter]) => { + try { + const regex = new RegExp(tagFilter); + return [tags, regex]; + } catch (e) { + return [tags, null]; + } + } + ), + filter(([, tagFilterRegex]) => tagFilterRegex !== null), + map(([tags, tagFilterRegex]) => { + return tags + .filter((tag: string) => tagFilterRegex!.test(tag)) + .sort(compareTagNames); + }) + ); + + onTagFilterChange(tagFilter: string) { + this.store.dispatch(metricsTagFilterChanged({tagFilter})); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filter_input_test.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filter_input_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..6f19dff28183ef8c436489297022ad2cf52aafd1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filter_input_test.ts @@ -0,0 +1,250 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {OverlayContainer} from '@angular/cdk/overlay'; +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {MatAutocompleteModule} from '@angular/material/autocomplete'; +import {MatButtonModule} from '@angular/material/button'; +import {MatInputModule} from '@angular/material/input'; +import {By} from '@angular/platform-browser'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Action, Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; + +import {State} from '../../../app_state'; +import {sendKeys} from '../../../testing/dom'; +import {MatIconTestingModule} from '../../../testing/mat_icon_module'; +import {getAutocompleteOptions} from '../../../testing/material'; +import {metricsTagFilterChanged} from '../../actions'; +import {PluginType} from '../../data_source'; +import * as selectors from '../../store/metrics_selectors'; +import {appStateFromMetricsState, buildMetricsState} from '../../testing'; + +import {MetricsFilterInputComponent} from './filter_input_component'; +import {MetricsFilterInputContainer} from './filter_input_container'; + +describe('metrics filter input', () => { + let store: MockStore; + let dispatchedActions: Action[]; + let overlayContainer: OverlayContainer; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, + MatAutocompleteModule, + MatButtonModule, + MatIconTestingModule, + MatInputModule, + ], + declarations: [MetricsFilterInputComponent, MetricsFilterInputContainer], + providers: [ + provideMockStore({ + initialState: appStateFromMetricsState(buildMetricsState()), + }), + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + + overlayContainer = TestBed.inject(OverlayContainer); + store = TestBed.inject>(Store) as MockStore; + + dispatchedActions = []; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + dispatchedActions.push(action); + }); + + store.overrideSelector(selectors.getMetricsTagFilter, ''); + store.overrideSelector(selectors.getNonEmptyCardIdsWithMetadata, [ + { + cardId: 'card1', + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }, + { + cardId: 'card1', + plugin: PluginType.IMAGES, + tag: 'tagA/Images', + runId: 'run1', + sample: 0, + }, + { + cardId: 'card3', + plugin: PluginType.IMAGES, + tag: 'tagB/meow/cat', + runId: 'run1', + sample: 0, + }, + ]); + }); + + describe('input interaction', () => { + it('dispatches metricsTagFilterChanged when typing on input', () => { + const fixture = TestBed.createComponent(MetricsFilterInputContainer); + fixture.detectChanges(); + + const input = fixture.debugElement.query(By.css('input')); + sendKeys(fixture, input, 'ab'); + + expect(dispatchedActions).toEqual([ + metricsTagFilterChanged({tagFilter: 'a'}), + metricsTagFilterChanged({tagFilter: 'ab'}), + ]); + }); + }); + + describe('autocomplete', () => { + it('shows all tags on focus', () => { + store.overrideSelector(selectors.getMetricsTagFilter, ''); + const fixture = TestBed.createComponent(MetricsFilterInputContainer); + fixture.detectChanges(); + + const input = fixture.debugElement.query(By.css('input')); + input.nativeElement.focus(); + fixture.detectChanges(); + + const options = getAutocompleteOptions(overlayContainer); + expect( + options.map((option) => option.nativeElement.textContent) + ).toEqual(['tagA', 'tagA/Images', 'tagB/meow/cat']); + }); + + it('renders empty when no tags match', () => { + store.overrideSelector( + selectors.getMetricsTagFilter, + 'YOU CANNOT MATCH ME' + ); + const fixture = TestBed.createComponent(MetricsFilterInputContainer); + fixture.detectChanges(); + + const input = fixture.debugElement.query(By.css('input')); + input.nativeElement.focus(); + fixture.detectChanges(); + + const options = getAutocompleteOptions(overlayContainer); + expect(options.map((option) => option.nativeElement.textContent)).toEqual( + [] + ); + }); + + it('filters by regex', () => { + store.overrideSelector(selectors.getMetricsTagFilter, '[/I]m'); + const fixture = TestBed.createComponent(MetricsFilterInputContainer); + fixture.detectChanges(); + + const input = fixture.debugElement.query(By.css('input')); + input.nativeElement.focus(); + fixture.detectChanges(); + + const options = getAutocompleteOptions(overlayContainer); + expect( + options.map((option) => option.nativeElement.textContent) + ).toEqual(['tagA/Images', 'tagB/meow/cat']); + }); + + it('responds to input changes', () => { + store.overrideSelector(selectors.getMetricsTagFilter, ''); + const fixture = TestBed.createComponent(MetricsFilterInputContainer); + fixture.detectChanges(); + + const input = fixture.debugElement.query(By.css('input')); + input.nativeElement.focus(); + fixture.detectChanges(); + + store.overrideSelector(selectors.getMetricsTagFilter, 'tagA$'); + store.refreshState(); + fixture.detectChanges(); + + const options = getAutocompleteOptions(overlayContainer); + expect( + options.map((option) => option.nativeElement.textContent) + ).toEqual(['tagA']); + }); + + it('dispatches action when clicking on option', () => { + store.overrideSelector(selectors.getMetricsTagFilter, ''); + const fixture = TestBed.createComponent(MetricsFilterInputContainer); + fixture.detectChanges(); + + const input = fixture.debugElement.query(By.css('input')); + input.nativeElement.focus(); + fixture.detectChanges(); + + const options = getAutocompleteOptions(overlayContainer); + options[0].nativeElement.click(); + + expect(dispatchedActions).toEqual([ + metricsTagFilterChanged({tagFilter: 'tagA'}), + ]); + }); + + it('applies a regex-escaped version upon clicking the option', () => { + store.overrideSelector(selectors.getNonEmptyCardIdsWithMetadata, [ + { + cardId: 'card1', + plugin: PluginType.SCALARS, + tag: 'tagA.(foo)', + runId: null, + }, + ]); + const fixture = TestBed.createComponent(MetricsFilterInputContainer); + fixture.detectChanges(); + + const input = fixture.debugElement.query(By.css('input')); + input.nativeElement.focus(); + fixture.detectChanges(); + + const options = getAutocompleteOptions(overlayContainer); + expect( + options.map((option) => option.nativeElement.textContent) + ).toEqual(['tagA.(foo)']); + + options[0].nativeElement.click(); + + expect(dispatchedActions).toEqual([ + metricsTagFilterChanged({tagFilter: 'tagA\\.\\(foo\\)'}), + ]); + }); + + it('shows error icon for an invalid regex', () => { + store.overrideSelector(selectors.getMetricsTagFilter, '*'); + const fixture = TestBed.createComponent(MetricsFilterInputContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.query(By.css('.error-icon'))).not.toBeNull(); + }); + + it('closes autocomplete on Enter', () => { + store.overrideSelector(selectors.getMetricsTagFilter, ''); + const fixture = TestBed.createComponent(MetricsFilterInputContainer); + fixture.detectChanges(); + + const input = fixture.debugElement.query(By.css('input')); + input.nativeElement.focus(); + fixture.detectChanges(); + + const options = getAutocompleteOptions(overlayContainer); + expect(options.length).toBeGreaterThan(1); + + input.nativeElement.dispatchEvent( + new KeyboardEvent('keyup', {key: 'Enter'}) + ); + + const options2 = getAutocompleteOptions(overlayContainer); + expect(options2.length).toBe(0); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filtered_view_component.scss b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filtered_view_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..a4aebba7d22ca77d154dbd7b5549b4226fccec72 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filtered_view_component.scss @@ -0,0 +1,37 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; +@import '../common'; + +.group-toolbar { + @include metrics-card-group-toolbar; + display: flex; + align-items: center; + border-bottom: 1px solid mat-color($tb-foreground, border); +} + +.group-text { + display: flex; + align-items: baseline; +} + +.group-title { + @include metrics-card-group-title; +} + +.group-card-count { + @include metrics-card-group-count-text; + margin-left: 6px; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filtered_view_component.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filtered_view_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..cf28a76035dd6dc41c226cb3ca36f20cda653791 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filtered_view_component.ts @@ -0,0 +1,44 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component, Input} from '@angular/core'; + +import {CardObserver} from '../card_renderer/card_lazy_loader'; +import {CardIdWithMetadata} from '../metrics_view_types'; + +@Component({ + selector: 'metrics-filtered-view-component', + template: ` +
    + + Tags matching filter + {{ cardIdsWithMetadata.length }} cards + +
    + + `, + styleUrls: ['filtered_view_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class FilteredViewComponent { + @Input() cardObserver!: CardObserver; + @Input() cardIdsWithMetadata!: CardIdWithMetadata[]; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filtered_view_container.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filtered_view_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..6f274d2fe9c43638be43b387daab9f41cc652925 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/filtered_view_container.ts @@ -0,0 +1,101 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component, Input} from '@angular/core'; +import {createSelector, Store} from '@ngrx/store'; +import {combineLatest, Observable, of} from 'rxjs'; +import { + distinctUntilChanged, + filter, + map, + startWith, + switchMap, +} from 'rxjs/operators'; + +import {State} from '../../../app_state'; +import {getCurrentRouteRunSelection} from '../../../selectors'; +import {isSingleRunPlugin} from '../../data_source'; +import {getMetricsTagFilter, getNonEmptyCardIdsWithMetadata} from '../../store'; +import {CardObserver} from '../card_renderer/card_lazy_loader'; + +import {CardIdWithMetadata} from '../metrics_view_types'; +import {compareTagNames} from '../utils'; + +const getRenderableCardIdsWithMetadata = createSelector( + getNonEmptyCardIdsWithMetadata, + getCurrentRouteRunSelection, + (cardList, runSelectionMap) => { + return cardList.filter((card) => { + if (!isSingleRunPlugin(card.plugin)) { + return true; + } + return Boolean(runSelectionMap && runSelectionMap.get(card.runId!)); + }); + } +); + +/** + * An area showing cards that match the tag filter. + */ +@Component({ + selector: 'metrics-filtered-view', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class FilteredViewContainer { + @Input() cardObserver!: CardObserver; + + constructor(private readonly store: Store) {} + + readonly cardIdsWithMetadata$: Observable< + CardIdWithMetadata[] + > = this.store.select(getRenderableCardIdsWithMetadata).pipe( + switchMap((cardList) => { + return combineLatest([ + of(cardList), + this.store.select(getMetricsTagFilter), + ]); + }), + map(([cardList, tagFilter]) => { + try { + return {cardList, regex: new RegExp(tagFilter)}; + } catch (e) { + return {cardList, regex: null}; + } + }), + filter(({regex}) => regex !== null), + map(({cardList, regex}) => { + return cardList.filter(({tag}) => regex!.test(tag)); + }), + map((cardList) => { + return cardList.sort((cardA, cardB) => { + return compareTagNames(cardA.tag, cardB.tag); + }); + }), + distinctUntilChanged((prev, updated) => { + if (prev.length !== updated.length) { + return false; + } + return prev.every((prevVal, index) => { + return prevVal.cardId === updated[index].cardId; + }); + }), + startWith([]) + ); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/main_view_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/main_view_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..46dced5f76697fd868c12548915f0adf21ff82b7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/main_view_component.ng.html @@ -0,0 +1,71 @@ + +
    + +
    + +
    +
    +
    +
    + + + + + +
    + +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/main_view_component.scss b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/main_view_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..8b407932e0ec390cff890c9161709f4327c1691d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/main_view_component.scss @@ -0,0 +1,113 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; +@import '../common'; + +$_foreground-border-color: mat-color($tb-foreground, border); + +:host { + display: flex; + flex-direction: column; + height: 100%; +} + +.toolbar { + flex: none; + display: flex; + align-items: center; + justify-content: space-between; + height: 48px; + padding: 0 $metrics-preferred-gap; + background-color: #fff; + border-bottom: 1px solid $_foreground-border-color; + + metrics-tag-filter { + flex: 1 1 100px; + } + + .right-items { + border-left: 1px solid $_foreground-border-color; + margin-left: $metrics-preferred-gap; + padding-left: $metrics-preferred-gap; + } +} + +.split-content { + display: flex; + overflow-y: auto; + flex: 1; +} + +.main, +.sidebar { + overflow-x: hidden; + overflow-y: auto; + will-change: transform; + contain: strict; +} + +.main { + background-color: mat-color($tf-slate, 200); + flex: 1 1; + display: flex; + flex-direction: column; + + metrics-filtered-view, + metrics-pinned-view { + border-bottom: 1px solid $_foreground-border-color; + } +} + +.sidebar { + flex: 0 0 250px; + background-color: #fff; + border-left: 1px solid $_foreground-border-color; + + .header { + display: flex; + align-items: center; + justify-content: space-between; + height: 42px; + padding: 0 $metrics-preferred-gap; + border-bottom: 1px solid $_foreground-border-color; + + .title { + font-size: 18px; + font-weight: 400; + line-height: normal; + margin: 0; + } + } +} + +/** TODO(psybuzz): consider making a tb-button instead. */ +.settings-button { + color: mat-color($tb-foreground, secondary-text); + display: inline-flex; + + &.checked { + background-color: mat-color($mat-gray, 300); + border-color: mat-color($mat-gray, 300); + } + + ::ng-deep .mat-button-wrapper { + display: inline-flex; + align-items: center; + } + + mat-icon { + margin-right: 4px; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/main_view_component.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/main_view_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..c07c47c2efdab24724a825e52055334e02322c06 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/main_view_component.ts @@ -0,0 +1,51 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + ElementRef, + EventEmitter, + Input, + Output, +} from '@angular/core'; + +import {CardObserver} from '../card_renderer/card_lazy_loader'; + +@Component({ + selector: 'metrics-main-view-component', + templateUrl: 'main_view_component.ng.html', + styleUrls: ['main_view_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MainViewComponent { + @Input() showFilteredView!: boolean; + + @Input() isSidepaneOpen!: boolean; + + @Output() onSettingsButtonClicked = new EventEmitter(); + + @Output() onCloseSidepaneButtonClicked = new EventEmitter(); + + constructor(private readonly host: ElementRef) {} + + /** + * Load cards that are not yet visible, if they are roughly 1 card row away in + * scroll distance. + */ + readonly cardObserver = new CardObserver( + this.host.nativeElement, + '600px 0px 600px 0px' + ); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/main_view_container.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/main_view_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..db4673d3c4d66f8d436a3be9868fa248f832fe83 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/main_view_container.ts @@ -0,0 +1,54 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {map} from 'rxjs/operators'; + +import {State} from '../../../app_state'; +import {getMetricsTagFilter} from '../../store'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'metrics-main-view', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MainViewContainer { + constructor(private readonly store: Store) {} + + isSidepaneOpen = true; + + readonly showFilteredView$ = this.store.select(getMetricsTagFilter).pipe( + map((filter) => { + return filter.length > 0; + }) + ); + + onSettingsButtonClicked() { + this.isSidepaneOpen = !this.isSidepaneOpen; + } + + onCloseSidepaneButtonClicked() { + this.isSidepaneOpen = false; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/main_view_module.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/main_view_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..1d822b2d3add8e141005aac19a23f714ce6ed189 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/main_view_module.ts @@ -0,0 +1,64 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {MatAutocompleteModule} from '@angular/material/autocomplete'; +import {MatButtonModule} from '@angular/material/button'; +import {MatIconModule} from '@angular/material/icon'; +import {MatInputModule} from '@angular/material/input'; + +import {CardRendererModule} from '../card_renderer/card_renderer_module'; +import {RightPaneModule} from '../right_pane/right_pane_module'; + +import {CardGridComponent} from './card_grid_component'; +import {CardGridContainer} from './card_grid_container'; +import {CardGroupsComponent} from './card_groups_component'; +import {CardGroupsContainer} from './card_groups_container'; +import {MetricsFilterInputComponent} from './filter_input_component'; +import {MetricsFilterInputContainer} from './filter_input_container'; +import {FilteredViewComponent} from './filtered_view_component'; +import {FilteredViewContainer} from './filtered_view_container'; +import {MainViewComponent} from './main_view_component'; +import {MainViewContainer} from './main_view_container'; +import {PinnedViewComponent} from './pinned_view_component'; +import {PinnedViewContainer} from './pinned_view_container'; + +@NgModule({ + declarations: [ + CardGridComponent, + CardGridContainer, + CardGroupsComponent, + CardGroupsContainer, + FilteredViewComponent, + FilteredViewContainer, + MainViewComponent, + MainViewContainer, + MetricsFilterInputComponent, + MetricsFilterInputContainer, + PinnedViewComponent, + PinnedViewContainer, + ], + exports: [MainViewContainer], + imports: [ + CommonModule, + CardRendererModule, + MatAutocompleteModule, + MatButtonModule, + MatIconModule, + MatInputModule, + RightPaneModule, + ], +}) +export class MainViewModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/main_view_test.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/main_view_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..e4018b40ec18327782adede1184061240132692c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/main_view_test.ts @@ -0,0 +1,1317 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + Component, + DebugElement, + Input, + NO_ERRORS_SCHEMA, + Type, +} from '@angular/core'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Action, Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import {State} from '../../../app_state'; +import {getPageSize} from '../../../core/store/core_selectors'; +import {of, ReplaySubject} from 'rxjs'; + +import * as selectors from '../../../selectors'; +import {getMetricsTagGroupExpansionState} from '../../../selectors'; +import {KeyType, sendKey, sendKeys} from '../../../testing/dom'; +import {RunColorScale} from '../../../types/ui'; +import * as actions from '../../actions'; +import {PluginType} from '../../data_source'; +import { + appStateFromMetricsState, + buildMetricsState, + createCardMetadata, +} from '../../testing'; +import {CardId} from '../../types'; +import {CardLazyLoader, CardObserver} from '../card_renderer/card_lazy_loader'; + +import {CardGridComponent} from './card_grid_component'; +import {CardGridContainer} from './card_grid_container'; +import {CardGroupsComponent} from './card_groups_component'; +import {CardGroupsContainer} from './card_groups_container'; +import {FilteredViewComponent} from './filtered_view_component'; +import {FilteredViewContainer} from './filtered_view_container'; +import {MainViewComponent} from './main_view_component'; +import {MainViewContainer} from './main_view_container'; +import {PinnedViewComponent} from './pinned_view_component'; +import {PinnedViewContainer} from './pinned_view_container'; + +@Component({ + selector: 'card-view', + template: `{{ pluginType }}: {{ cardId }}`, +}) +class TestableCard { + @Input() pluginType!: PluginType; + @Input() cardId!: CardId; + @Input() runColorScale!: RunColorScale; +} + +function createNScalarCards(size: number) { + return [...new Array(size)].map((unused, index) => { + return { + cardId: `card${index}`, + plugin: PluginType.SCALARS, + tag: `tagA/Scalars_${index}`, + runId: null, + }; + }); +} + +const EXPAND_BUTTON = By.css('[aria-label="Expand group"]'); +const PAGINATION_INPUT = By.css('.pagination-input'); + +describe('metrics main view', () => { + let store: MockStore; + let dispatchedActions: Action[] = []; + + function getCardGroupNames(debugElement: DebugElement): string[] { + return debugElement + .queryAll(By.css('metrics-card-groups .group-title')) + .map((debugEl) => debugEl.nativeElement.textContent); + } + + function getCardGroupCounts( + fixture: ComponentFixture + ): string[] { + return fixture.debugElement + .queryAll(By.css('metrics-card-groups .group-toolbar')) + .map((debugEl) => { + const debugCardCount = debugEl.query(By.css('.group-card-count')); + return debugCardCount ? debugCardCount.nativeElement.textContent : ''; + }); + } + + function getCardsInGroup( + fixture: ComponentFixture, + groupIndex: number + ) { + const groups = fixture.debugElement.queryAll(By.css('.card-group')); + expect(groups.length).toBeGreaterThan(groupIndex); + return getCards(groups[groupIndex]); + } + + function getCards(debugElement: DebugElement) { + return debugElement.queryAll(By.css('card-view')); + } + + function getCardContents(debugElements: DebugElement[]): string[] { + return debugElements.map((debugEl) => debugEl.nativeElement.textContent); + } + + function getCardLazyLoaders( + cardDebugElements: DebugElement[] + ): CardLazyLoader[] { + return cardDebugElements.map((debugElement) => { + return debugElement.injector.get(CardLazyLoader); + }); + } + + function assertPagination( + fixture: ComponentFixture, + currentIndex: number, + size: number + ) { + const pagination = fixture.debugElement.query(PAGINATION_INPUT); + expect(pagination).toBeDefined(); + + const indexText = pagination.query(By.css('input')).nativeElement.value; + const otherText = pagination.nativeElement.textContent; + expect(`${indexText}${otherText}`).toEqual(`${currentIndex} of ${size}`); + } + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [NoopAnimationsModule], + declarations: [ + CardGridComponent, + CardGridContainer, + CardGroupsComponent, + CardGroupsContainer, + FilteredViewComponent, + FilteredViewContainer, + MainViewComponent, + MainViewContainer, + PinnedViewComponent, + PinnedViewContainer, + TestableCard, + CardLazyLoader, + ], + providers: [ + provideMockStore({ + initialState: appStateFromMetricsState(buildMetricsState()), + }), + ], + // Skip errors for card renderers, which are tested separately. + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + + dispatchedActions = []; + store = TestBed.inject>(Store) as MockStore; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + dispatchedActions.push(action); + }); + store.overrideSelector(getPageSize, 10); + store.overrideSelector(selectors.getMetricsTagFilter, ''); + store.overrideSelector(getMetricsTagGroupExpansionState, false); + store.overrideSelector(selectors.getCurrentRouteRunSelection, new Map()); + store.overrideSelector(selectors.getRunColorMap, {}); + }); + + describe('card grid', () => { + it('renders group by tag name', () => { + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([['run1', true]]) + ); + store.overrideSelector(selectors.getNonEmptyCardIdsWithMetadata, [ + { + cardId: 'card1', + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }, + { + cardId: 'card2', + plugin: PluginType.IMAGES, + tag: 'tagA/Images', + runId: 'run1', + sample: 0, + }, + { + cardId: 'card3', + plugin: PluginType.IMAGES, + tag: 'tagB/meow/cat', + runId: 'run1', + sample: 0, + }, + ]); + + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + // Group name includes card count if > 1. + expect(getCardGroupCounts(fixture)).toEqual(['2 cards', '']); + expect(getCardGroupNames(fixture.debugElement)).toEqual(['tagA', 'tagB']); + + expect(getCardsInGroup(fixture, 0).length).toBe(2); + expect(getCardsInGroup(fixture, 1).length).toBe(1); + }); + + it('renders plugins', async () => { + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([['run1', true]]) + ); + store.overrideSelector(selectors.getNonEmptyCardIdsWithMetadata, [ + { + cardId: 'card1', + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }, + { + cardId: 'card2', + plugin: PluginType.IMAGES, + tag: 'tagB', + runId: 'run1', + sample: 0, + }, + ]); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(getCardContents(getCards(fixture.debugElement))).toEqual([ + 'scalars: card1', + 'images: card2', + ]); + }); + + it('handles going from non-empty cardList to empty cardList', async () => { + store.overrideSelector(selectors.getNonEmptyCardIdsWithMetadata, [ + { + cardId: 'card1', + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }, + ]); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + expect(fixture.debugElement.queryAll(By.css('.card-group')).length).toBe( + 1 + ); + + store.overrideSelector(selectors.getNonEmptyCardIdsWithMetadata, []); + store.refreshState(); + fixture.detectChanges(); + + expect(fixture.debugElement.queryAll(By.css('.card-group')).length).toBe( + 0 + ); + }); + + it('hides single-run cards based on the run selection', () => { + store.overrideSelector(selectors.getNonEmptyCardIdsWithMetadata, [ + { + cardId: 'card1', + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }, + { + cardId: 'card2', + plugin: PluginType.IMAGES, + tag: 'tagA/Images', + runId: 'run1', + sample: 0, + }, + { + cardId: 'card3', + plugin: PluginType.IMAGES, + tag: 'tagB/meow/cat', + runId: 'run2', + sample: 0, + }, + ]); + + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([ + ['run1', false], + ['run2', true], + ]) + ); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(getCardContents(getCards(fixture.debugElement))).toEqual([ + 'scalars: card1', + 'images: card3', + ]); + + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([ + ['run1', true], + ['run2', false], + ]) + ); + store.refreshState(); + fixture.detectChanges(); + + expect(getCardContents(getCards(fixture.debugElement))).toEqual([ + 'scalars: card1', + 'images: card2', + ]); + }); + + describe('lazy loading', () => { + function createScalarCardMetadata(count: number) { + const results = []; + for (let i = 0; i < count; i++) { + results.push({ + cardId: `card${i}`, + plugin: PluginType.SCALARS, + tag: `tag${i}`, + runId: null, + }); + } + return results; + } + + function buildIntersectionObserverEntry( + override: Partial & {target: Element} + ): IntersectionObserverEntry { + return { + time: 0, + isIntersecting: false, + boundingClientRect: new DOMRectReadOnly(), + intersectionRatio: 0, + intersectionRect: new DOMRectReadOnly(), + rootBounds: new DOMRectReadOnly(), + ...override, + }; + } + + function simulateIntersection( + cardObserver: CardObserver, + entries: Array & {target: Element}> + ) { + cardObserver.onCardIntersectionForTest( + entries.map(buildIntersectionObserverEntry) + ); + } + + it('reuses the same observer for multiple cards', () => { + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createScalarCardMetadata(3) + ); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + const directives = getCardLazyLoaders(getCards(fixture.debugElement)); + const cardObservers = directives.map((x) => x.cardObserver); + expect(cardObservers.length).toBe(3); + expect(cardObservers.every((x) => x === cardObservers[0])).toBe(true); + }); + + it('dispatches actions when observers fire', () => { + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createScalarCardMetadata(3) + ); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + const directives = getCardLazyLoaders(getCards(fixture.debugElement)); + const cardObserver = directives[0].cardObserver!; + simulateIntersection(cardObserver, [ + { + time: 10, + target: directives[0].hostForTest().nativeElement, + isIntersecting: true, + }, + ]); + + expect(dispatchedActions).toEqual([ + actions.cardVisibilityChanged({ + enteredCards: new Set([directives[0].cardId]), + exitedCards: new Set(), + }), + ]); + + simulateIntersection(cardObserver, [ + { + time: 20, + target: directives[0].hostForTest().nativeElement, + isIntersecting: false, + }, + { + time: 20, + target: directives[1].hostForTest().nativeElement, + isIntersecting: true, + }, + { + time: 20, + target: directives[2].hostForTest().nativeElement, + isIntersecting: true, + }, + ]); + + expect(dispatchedActions).toEqual([ + actions.cardVisibilityChanged({ + enteredCards: new Set([directives[0].cardId]), + exitedCards: new Set(), + }), + actions.cardVisibilityChanged({ + enteredCards: new Set([directives[1].cardId, directives[2].cardId]), + exitedCards: new Set([directives[0].cardId]), + }), + ]); + }); + + it('respects the latest of competing observer entries', () => { + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createScalarCardMetadata(1) + ); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + const directives = getCardLazyLoaders(getCards(fixture.debugElement)); + const cardObserver = directives[0].cardObserver!; + simulateIntersection(cardObserver, [ + { + time: 10, + target: directives[0].hostForTest().nativeElement, + isIntersecting: true, + }, + { + time: 20, + target: directives[0].hostForTest().nativeElement, + isIntersecting: false, + }, + ]); + + // The more recent entry does not intersect. + expect(dispatchedActions).toEqual([ + actions.cardVisibilityChanged({ + enteredCards: new Set(), + exitedCards: new Set([directives[0].cardId]), + }), + ]); + + simulateIntersection(cardObserver, [ + { + time: 30, + target: directives[0].hostForTest().nativeElement, + isIntersecting: false, + }, + { + time: 40, + target: directives[0].hostForTest().nativeElement, + isIntersecting: true, + }, + ]); + + expect(dispatchedActions).toEqual([ + actions.cardVisibilityChanged({ + enteredCards: new Set(), + exitedCards: new Set([directives[0].cardId]), + }), + actions.cardVisibilityChanged({ + enteredCards: new Set([directives[0].cardId]), + exitedCards: new Set(), + }), + ]); + }); + }); + + describe('pagination', () => { + beforeEach(() => { + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([['run1', true]]) + ); + store.overrideSelector(getPageSize, 2); + store.overrideSelector(selectors.getNonEmptyCardIdsWithMetadata, [ + { + cardId: 'card1', + plugin: PluginType.SCALARS, + tag: 'tagA/Scalars', + runId: null, + }, + { + cardId: 'card2', + plugin: PluginType.IMAGES, + tag: 'tagA/Images', + runId: 'run1', + sample: 0, + }, + { + cardId: 'card3', + plugin: PluginType.HISTOGRAMS, + tag: 'tagA/Hist', + runId: 'run1', + sample: 0, + }, + ]); + store.overrideSelector(getMetricsTagGroupExpansionState, true); + }); + + it('renders only single page', () => { + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(getCardsInGroup(fixture, 0).length).toBe(2); + expect(getCardContents(getCardsInGroup(fixture, 0))).toEqual([ + 'histograms: card3', + 'images: card2', + ]); + + store.overrideSelector(getPageSize, 10); + store.refreshState(); + fixture.detectChanges(); + expect(getCardsInGroup(fixture, 0).length).toBe(3); + }); + + it('responds to page size changes', () => { + store.overrideSelector(getMetricsTagGroupExpansionState, true); + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createNScalarCards(20) + ); + store.overrideSelector(getPageSize, 50); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(getCards(fixture.debugElement).length).toBe(20); + expect(fixture.debugElement.query(PAGINATION_INPUT)).toBeNull(); + + store.overrideSelector(getPageSize, 10); + store.refreshState(); + fixture.detectChanges(); + + expect(getCards(fixture.debugElement).length).toBe(10); + assertPagination(fixture, 1, 2); + + store.overrideSelector(getPageSize, 3); + store.refreshState(); + fixture.detectChanges(); + + expect(getCards(fixture.debugElement).length).toBe(3); + assertPagination(fixture, 1, 7); + }); + + it('navigates pages by click on buttons', () => { + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + const prevButton = fixture.debugElement.query(By.css('.prev')); + const nextButton = fixture.debugElement.query(By.css('.next')); + nextButton.nativeElement.click(); + fixture.detectChanges(); + + expect(getCardContents(getCardsInGroup(fixture, 0))).toEqual([ + 'scalars: card1', + ]); + assertPagination(fixture, 2, 2); + + // Clipped since we are at the max. + nextButton.nativeElement.click(); + fixture.detectChanges(); + + expect(getCardContents(getCardsInGroup(fixture, 0))).toEqual([ + 'scalars: card1', + ]); + assertPagination(fixture, 2, 2); + + prevButton.nativeElement.click(); + fixture.detectChanges(); + + expect(getCardContents(getCardsInGroup(fixture, 0))).toEqual([ + 'histograms: card3', + 'images: card2', + ]); + assertPagination(fixture, 1, 2); + + // Stay at 1 when clicking on prev from 1. + prevButton.nativeElement.click(); + fixture.detectChanges(); + + expect(getCardContents(getCardsInGroup(fixture, 0))).toEqual([ + 'histograms: card3', + 'images: card2', + ]); + assertPagination(fixture, 1, 2); + }); + + function changeInputValue( + fixture: ComponentFixture, + newIndex: number + ) { + const input = fixture.debugElement.query(By.css('input')); + sendKeys(fixture, input, String(newIndex)); + sendKey(fixture, input, { + type: KeyType.SPECIAL, + prevString: String(newIndex), + key: 'Enter', + startingCursorIndex: 0, + }); + input.triggerEventHandler('change', {target: input.nativeElement}); + fixture.detectChanges(); + } + + it('navigates when interacting with the input', () => { + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + changeInputValue(fixture, 2); + expect(getCardContents(getCardsInGroup(fixture, 0))).toEqual([ + 'scalars: card1', + ]); + + changeInputValue(fixture, 1); + expect(getCardContents(getCardsInGroup(fixture, 0))).toEqual([ + 'histograms: card3', + 'images: card2', + ]); + + // clips to the max length. + changeInputValue(fixture, 5); + expect(getCardContents(getCardsInGroup(fixture, 0))).toEqual([ + 'scalars: card1', + ]); + assertPagination(fixture, 2, 2); + + // clips to 1. + changeInputValue(fixture, 0); + expect(getCardContents(getCardsInGroup(fixture, 0))).toEqual([ + 'histograms: card3', + 'images: card2', + ]); + assertPagination(fixture, 1, 2); + }); + + it('rectifies the input to be max/min', () => { + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + changeInputValue(fixture, 2000); + assertPagination(fixture, 2, 2); + + changeInputValue(fixture, -10); + assertPagination(fixture, 1, 2); + }); + + it('does not cause inf loop when items=[] with rectification', () => { + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + store.overrideSelector(selectors.getNonEmptyCardIdsWithMetadata, []); + store.refreshState(); + fixture.detectChanges(); + + expect( + fixture.debugElement.queryAll(By.css('.card-group')).length + ).toBe(0); + }); + }); + }); + + describe('expansion', () => { + let selectSpy: jasmine.Spy; + + beforeEach(() => { + selectSpy = spyOn(store, 'select').and.callThrough(); + selectSpy + .withArgs(getMetricsTagGroupExpansionState, jasmine.any(String)) + .and.throwError( + 'getMetricsTagGroupExpansionState called with unknown groupName' + ); + + store.overrideSelector(getPageSize, 2); + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createNScalarCards(5) + ); + }); + + it('renders 3 cards in a collapsed group', () => { + selectSpy + .withArgs(getMetricsTagGroupExpansionState, 'tagA') + .and.returnValue(of(false)); + store.overrideSelector(getPageSize, 5); + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createNScalarCards(10) + ); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.query(EXPAND_BUTTON)).not.toBeNull(); + expect(getCardContents(getCards(fixture.debugElement))).toEqual([ + 'scalars: card0', + 'scalars: card1', + 'scalars: card2', + ]); + }); + + it('renders 3 cards even when items.length < pageSize', () => { + selectSpy + .withArgs(getMetricsTagGroupExpansionState, 'tagA') + .and.returnValue(of(false)); + store.overrideSelector(getPageSize, 10); + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createNScalarCards(4) + ); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.query(EXPAND_BUTTON)).not.toBeNull(); + expect(getCardContents(getCards(fixture.debugElement))).toEqual([ + 'scalars: card0', + 'scalars: card1', + 'scalars: card2', + ]); + }); + + it('renders N = pageSize cards when expanded', () => { + selectSpy + .withArgs(getMetricsTagGroupExpansionState, 'tagA') + .and.returnValue(of(true)); + store.overrideSelector(getPageSize, 5); + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createNScalarCards(10) + ); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.query(EXPAND_BUTTON)).not.toBeNull(); + expect(getCards(fixture.debugElement).length).toBe(5); + }); + + it('renders N = pageSize < 3 even when cards are not expanded', () => { + selectSpy + .withArgs(getMetricsTagGroupExpansionState, 'tagA') + .and.returnValue(of(false)); + store.overrideSelector(getPageSize, 2); + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createNScalarCards(5) + ); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(getCards(fixture.debugElement).length).toBe(2); + }); + + it('does not render expansion toggle when # items is < 3', () => { + selectSpy + .withArgs(getMetricsTagGroupExpansionState, 'tagA') + .and.returnValue(of(false)); + store.overrideSelector(getPageSize, 5); + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createNScalarCards(2) + ); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.query(EXPAND_BUTTON)).toBeNull(); + }); + + it('does not render expansion toggle when pageSize items is < 3', () => { + selectSpy + .withArgs(getMetricsTagGroupExpansionState, 'tagA') + .and.returnValue(of(false)); + store.overrideSelector(getPageSize, 2); + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createNScalarCards(5) + ); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.query(EXPAND_BUTTON)).toBeNull(); + }); + + it('does not render next or prev when collapsed', () => { + selectSpy + .withArgs(getMetricsTagGroupExpansionState, 'tagA') + .and.returnValue(of(false)); + store.overrideSelector(getPageSize, 5); + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createNScalarCards(15) + ); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.query(By.css('.prev'))).toBeNull(); + expect(fixture.debugElement.query(By.css('.next'))).toBeNull(); + }); + + it('renders next or prev even when collapsed if pageSize < 3', () => { + selectSpy + .withArgs(getMetricsTagGroupExpansionState, 'tagA') + .and.returnValue(of(false)); + store.overrideSelector(getPageSize, 2); + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createNScalarCards(5) + ); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.query(By.css('.prev'))).not.toBeNull(); + expect(fixture.debugElement.query(By.css('.next'))).not.toBeNull(); + }); + + it('responds to expansion change', () => { + const getExpansionStateSubject = new ReplaySubject(1); + getExpansionStateSubject.next(false); + selectSpy + .withArgs(getMetricsTagGroupExpansionState, 'tagA') + .and.returnValue(getExpansionStateSubject); + store.overrideSelector(getPageSize, 5); + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createNScalarCards(10) + ); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(getCards(fixture.debugElement).length).toBe(3); + + getExpansionStateSubject.next(true); + fixture.detectChanges(); + + expect(getCards(fixture.debugElement).length).toBe(5); + + getExpansionStateSubject.next(false); + fixture.detectChanges(); + + expect(getCards(fixture.debugElement).length).toBe(3); + }); + + it( + 'dispatches `metricsTagGroupExpansionChanged` action when expansion ' + + 'toggle is clicked', + () => { + selectSpy + .withArgs(getMetricsTagGroupExpansionState, 'tagA') + .and.returnValue(of(true)); + store.overrideSelector(getPageSize, 5); + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createNScalarCards(10) + ); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + fixture.debugElement.query(EXPAND_BUTTON).nativeElement.click(); + expect(dispatchedActions).toEqual([ + actions.metricsTagGroupExpansionChanged({tagGroup: 'tagA'}), + ]); + } + ); + }); + + describe('filter view', () => { + beforeEach(() => { + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([ + ['run1', true], + ['run2', true], + ]) + ); + store.overrideSelector(selectors.getNonEmptyCardIdsWithMetadata, [ + { + cardId: 'card1', + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }, + { + cardId: 'card2', + plugin: PluginType.IMAGES, + tag: 'tagA/Images', + runId: 'run1', + sample: 0, + }, + { + cardId: 'card3', + plugin: PluginType.IMAGES, + tag: 'tagB/meow/cat', + runId: 'run2', + sample: 0, + }, + ]); + }); + + function getFilterViewContainer( + fixture: ComponentFixture + ): DebugElement { + return fixture.debugElement.query(By.directive(FilteredViewContainer)); + } + + function getFilterviewCardContents( + fixture: ComponentFixture + ) { + return getCardContents(getCards(getFilterViewContainer(fixture))); + } + + it('shows flat list of matching cards', () => { + store.overrideSelector(selectors.getMetricsTagFilter, 'tagA'); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(getCardGroupNames(getFilterViewContainer(fixture))).toEqual([]); + expect(getFilterviewCardContents(fixture)).toEqual([ + 'scalars: card1', + 'images: card2', + ]); + }); + + it('hides the main, pinned views while the filter view is active', () => { + store.overrideSelector(selectors.getMetricsTagFilter, 'tagA'); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + const mainView = fixture.debugElement.query( + By.css('.main metrics-card-groups') + ); + const pinnedView = fixture.debugElement.query( + By.css('.main metrics-pinned-view') + ); + expect(mainView.styles['display']).toBe('none'); + expect(pinnedView).not.toBeTruthy(); + }); + + it('updates the list on tagFilter change', () => { + store.overrideSelector(selectors.getMetricsTagFilter, 'tagA'); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + store.overrideSelector(selectors.getMetricsTagFilter, 'tagA/'); + store.refreshState(); + fixture.detectChanges(); + + expect(getFilterviewCardContents(fixture)).toEqual(['images: card2']); + }); + + it('does not show the collapse/expand control', () => { + store.overrideSelector(selectors.getMetricsTagFilter, 'tagA'); + store.overrideSelector(getPageSize, 5); + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createNScalarCards(10) + ); + + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(getFilterViewContainer(fixture).query(EXPAND_BUTTON)).toBeNull(); + }); + + it('does not limit number of items to 3', () => { + store.overrideSelector(selectors.getMetricsTagFilter, 'tagA'); + store.overrideSelector(getPageSize, 5); + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createNScalarCards(10) + ); + + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(getFilterviewCardContents(fixture)).toEqual([ + 'scalars: card0', + 'scalars: card1', + 'scalars: card2', + 'scalars: card3', + 'scalars: card4', + ]); + }); + + it('shows an empty list when started with malformed regex filter', () => { + store.overrideSelector(selectors.getMetricsTagFilter, '*'); + store.overrideSelector(getPageSize, 5); + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createNScalarCards(10) + ); + + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(getFilterviewCardContents(fixture)).toEqual([]); + }); + + it( + 'shows previous list when changed to malformed regex and it shows ' + + 'the correct list when regex is fixed', + () => { + store.overrideSelector(selectors.getMetricsTagFilter, 'tagA'); + store.overrideSelector(getPageSize, 5); + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + createNScalarCards(10) + ); + + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + store.overrideSelector(selectors.getMetricsTagFilter, 'tagA/Scalars_['); + store.refreshState(); + fixture.detectChanges(); + + expect(getFilterviewCardContents(fixture)).toEqual([ + 'scalars: card0', + 'scalars: card1', + 'scalars: card2', + 'scalars: card3', + 'scalars: card4', + ]); + + store.overrideSelector( + selectors.getMetricsTagFilter, + 'tagA/Scalars_[0-2]' + ); + store.refreshState(); + fixture.detectChanges(); + + expect(getFilterviewCardContents(fixture)).toEqual([ + 'scalars: card0', + 'scalars: card1', + 'scalars: card2', + ]); + } + ); + + it('hides single-run cards based on the run selection', () => { + store.overrideSelector(selectors.getMetricsTagFilter, 'tag'); + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([ + ['run1', false], + ['run2', true], + ]) + ); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(getFilterviewCardContents(fixture)).toEqual([ + 'scalars: card1', + 'images: card3', + ]); + + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([ + ['run1', true], + ['run2', false], + ]) + ); + store.refreshState(); + fixture.detectChanges(); + + expect(getFilterviewCardContents(fixture)).toEqual([ + 'scalars: card1', + 'images: card2', + ]); + }); + + describe('perf', () => { + beforeEach(() => { + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([ + ['run1', true], + ['run2', true], + ]) + ); + store.overrideSelector(selectors.getNonEmptyCardIdsWithMetadata, [ + { + cardId: 'card1', + plugin: PluginType.SCALARS, + tag: 'tagA', + runId: null, + }, + { + cardId: 'card2', + plugin: PluginType.IMAGES, + tag: 'tagA/Images', + runId: 'run1', + sample: 0, + }, + { + cardId: 'card3', + plugin: PluginType.IMAGES, + tag: 'tagB/meow/cat', + runId: 'run2', + sample: 0, + }, + ]); + }); + + it('does not update the card when irrelevant runSelection changes', () => { + store.overrideSelector(selectors.getMetricsTagFilter, 'tagA'); + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([ + ['run1', true], + ['run2', true], + ]) + ); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + const gridContainer = fixture.debugElement.query( + By.directive(CardGridContainer) + ); + + const before = gridContainer.componentInstance.cardIdsWithMetadata; + + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([ + ['run1', true], + ['run2', true], + ['run3', false], + ]) + ); + store.refreshState(); + fixture.detectChanges(); + + const after = gridContainer.componentInstance.cardIdsWithMetadata; + expect(before).toBe(after); + }); + + it('updates the card when relevant runSelection changes', () => { + store.overrideSelector(selectors.getMetricsTagFilter, 'tagA'); + // All scalar and image cards are rendered. + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([ + ['run1', true], + ['run2', true], + ]) + ); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + const gridContainer = fixture.debugElement.query( + By.directive(CardGridContainer) + ); + + const before = gridContainer.componentInstance.cardIdsWithMetadata; + + // While the scalar is still rendered, the image card ('card2') does + // not render and, thus, should change the cardIdsWithMetadata. + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([ + ['run1', false], + ['run2', true], + ]) + ); + store.refreshState(); + fixture.detectChanges(); + + const after = gridContainer.componentInstance.cardIdsWithMetadata; + expect(before).not.toBe(after); + }); + }); + }); + + describe('pinned view', () => { + function queryDirective( + fixture: ComponentFixture, + directive: Type + ): DebugElement { + return fixture.debugElement.query(By.directive(directive)); + } + + it('appears only when not filtering', () => { + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(queryDirective(fixture, PinnedViewContainer)).toBeTruthy(); + expect(queryDirective(fixture, FilteredViewContainer)).not.toBeTruthy(); + + store.overrideSelector(selectors.getMetricsTagFilter, 'tagA'); + store.refreshState(); + fixture.detectChanges(); + + expect(queryDirective(fixture, PinnedViewContainer)).not.toBeTruthy(); + expect(queryDirective(fixture, FilteredViewContainer)).toBeTruthy(); + }); + + it('shows an empty message only when there are no pinned cards', () => { + store.overrideSelector(selectors.getPinnedCardsWithMetadata, []); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + const emptyMessage = 'Pin cards for a quick view and comparison'; + const pinnedViewDebugEl = queryDirective(fixture, PinnedViewContainer); + expect(pinnedViewDebugEl.nativeElement.textContent).toContain( + emptyMessage + ); + + store.overrideSelector(selectors.getPinnedCardsWithMetadata, [ + {cardId: 'card1', ...createCardMetadata()}, + ]); + store.refreshState(); + fixture.detectChanges(); + + expect(pinnedViewDebugEl.nativeElement.textContent).not.toContain( + emptyMessage + ); + }); + + it('shows pinned card copies', () => { + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([['run1', true]]) + ); + store.overrideSelector(selectors.getPinnedCardsWithMetadata, [ + {cardId: 'card1', ...createCardMetadata(PluginType.SCALARS)}, + {cardId: 'card2', ...createCardMetadata(PluginType.IMAGES)}, + ]); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + const pinnedViewDebugEl = queryDirective(fixture, PinnedViewContainer); + const cardContents = getCardContents(getCards(pinnedViewDebugEl)); + expect(cardContents).toEqual(['scalars: card1', 'images: card2']); + }); + + it('ignores the run selection filter', () => { + store.overrideSelector( + selectors.getCurrentRouteRunSelection, + new Map([['run1', false]]) + ); + const originalCardMetadata = [ + { + cardId: 'card1', + plugin: PluginType.IMAGES, + tag: 'tagA/Images', + runId: 'run1', + sample: 0, + }, + ]; + store.overrideSelector( + selectors.getNonEmptyCardIdsWithMetadata, + originalCardMetadata + ); + store.overrideSelector(selectors.getPinnedCardsWithMetadata, [ + {...originalCardMetadata[0], cardId: 'pinnedCopy1'}, + ]); + store.overrideSelector(selectors.getMetricsTagFilter, ''); + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + const pinnedViewDebugEl = queryDirective(fixture, PinnedViewContainer); + const cardContents = getCardContents(getCards(pinnedViewDebugEl)); + expect(cardContents).toEqual(['images: pinnedCopy1']); + }); + }); + + describe('sidepane', () => { + it('settings button should toggle side pane', () => { + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.query(By.css('.sidebar'))).toBeTruthy(); + + const settingsButton = fixture.debugElement.query( + By.css('[aria-label="Toggle settings side pane"]') + ); + settingsButton.nativeElement.click(); + fixture.detectChanges(); + + expect(fixture.debugElement.query(By.css('.sidebar'))).not.toBeTruthy(); + + settingsButton.nativeElement.click(); + fixture.detectChanges(); + + expect(fixture.debugElement.query(By.css('.sidebar'))).toBeTruthy(); + }); + + it('closes upon clicking the sidepane close button', () => { + const fixture = TestBed.createComponent(MainViewContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.query(By.css('.sidebar'))).toBeTruthy(); + + const closeButton = fixture.debugElement.query( + By.css('[aria-label="Close side pane"]') + ); + closeButton.nativeElement.click(); + fixture.detectChanges(); + + expect(fixture.debugElement.query(By.css('.sidebar'))).not.toBeTruthy(); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/pinned_view_component.scss b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/pinned_view_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..ea1d40c6474babd0c49c29e91ba4726faa14453c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/pinned_view_component.scss @@ -0,0 +1,51 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; +@import '../common'; + +.group-toolbar { + @include metrics-card-group-toolbar; + display: flex; + align-items: center; + border-bottom: 1px solid mat-color($tb-foreground, border); +} + +mat-icon { + color: mat-color($tb-foreground, secondary-text); + flex: none; + margin-right: 5px; +} + +.group-text { + display: flex; + align-items: baseline; +} + +.group-title { + @include metrics-card-group-title; +} + +.group-card-count { + @include metrics-card-group-count-text; + margin-left: 6px; +} + +.empty-message { + color: mat-color($tb-foreground, secondary-text); + text-align: center; + padding: 16px; + font-size: 13px; + font-style: italic; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/pinned_view_component.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/pinned_view_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..cf2f5185daf0fb973c68474a7ab8595a4df7dc9f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/pinned_view_component.ts @@ -0,0 +1,48 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component, Input} from '@angular/core'; +import {CardObserver} from '../card_renderer/card_lazy_loader'; +import {CardIdWithMetadata} from '../metrics_view_types'; + +@Component({ + selector: 'metrics-pinned-view-component', + template: ` +
    + + + Pinned + {{ cardIdsWithMetadata.length }} cards + +
    + + +
    Pin cards for a quick view and comparison
    +
    + `, + styleUrls: ['pinned_view_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PinnedViewComponent { + @Input() cardObserver!: CardObserver; + @Input() cardIdsWithMetadata!: CardIdWithMetadata[]; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/pinned_view_container.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/pinned_view_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..e5cd242373b9473483ff83abb6fb450936e1455d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/main_view/pinned_view_container.ts @@ -0,0 +1,44 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component, Input} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {Observable} from 'rxjs'; +import {startWith} from 'rxjs/operators'; + +import {State} from '../../../app_state'; +import {DeepReadonly} from '../../../util/types'; +import {getPinnedCardsWithMetadata} from '../../store'; +import {CardObserver} from '../card_renderer/card_lazy_loader'; +import {CardIdWithMetadata} from '../metrics_view_types'; + +@Component({ + selector: 'metrics-pinned-view', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PinnedViewContainer { + @Input() cardObserver!: CardObserver; + + constructor(private readonly store: Store) {} + + readonly cardIdsWithMetadata$: Observable< + DeepReadonly + > = this.store.select(getPinnedCardsWithMetadata).pipe(startWith([])); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/metrics_container.scss b/saved_models/tensorboard/tensorboard/webapp/metrics/views/metrics_container.scss new file mode 100644 index 0000000000000000000000000000000000000000..5b1795801b3086e3749d64ef591b23855f017a7b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/metrics_container.scss @@ -0,0 +1,30 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +:host { + display: flex; + height: 100%; +} + +nav { + border-right: 1px solid mat-color($tb-foreground, border); + flex: none; + width: 340px; +} + +metrics-main-view { + flex: 1 1; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/metrics_container.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/metrics_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..210fc208ee86ea461b01721d7fdece3a8da20888 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/metrics_container.ts @@ -0,0 +1,28 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component} from '@angular/core'; + +@Component({ + selector: 'metrics-dashboard', + template: ` + + + `, + styleUrls: ['metrics_container.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MetricsDashboardContainer {} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/metrics_container_test.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/metrics_container_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..4639bddd5b157923e1cd79e1ad422219d00c0714 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/metrics_container_test.ts @@ -0,0 +1,47 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import {State} from '../../app_state'; + +import {MetricsDashboardContainer} from './metrics_container'; + +describe('metrics view', () => { + let store: MockStore; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [NoopAnimationsModule], + declarations: [MetricsDashboardContainer], + providers: [provideMockStore()], + // Ignore errors from components that are out-of-scope for this test: + // 'runs-selector'. + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + + store = TestBed.inject>(Store) as MockStore; + }); + + it('renders', () => { + const fixture = TestBed.createComponent(MetricsDashboardContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.query(By.css('runs-selector'))).not.toBeNull(); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/metrics_view_types.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/metrics_view_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..37792be9849aa64ac6b5a20e0d9eb77e7b7fc834 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/metrics_view_types.ts @@ -0,0 +1,28 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CardId, CardMetadata} from '../types'; + +export interface CardRenderer { + cardId: CardId; +} + +export type CardIdWithMetadata = CardMetadata & { + cardId: CardId; +}; + +export interface CardGroup { + groupName: string; + items: CardIdWithMetadata[]; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/metrics_views_module.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/metrics_views_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..65e5ac31cff40e8a573b00180c2b42a823b145f3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/metrics_views_module.ts @@ -0,0 +1,29 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; + +import {RunsSelectorModule} from '../../runs/views/runs_selector/runs_selector_module'; + +import {MainViewModule} from './main_view/main_view_module'; +import {MetricsDashboardContainer} from './metrics_container'; +import {RightPaneModule} from './right_pane/right_pane_module'; + +@NgModule({ + declarations: [MetricsDashboardContainer], + exports: [MetricsDashboardContainer], + imports: [CommonModule, RightPaneModule, RunsSelectorModule, MainViewModule], +}) +export class MetricsViewsModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/BUILD b/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..04390f882a9b7b3944a43a787cb59a62926bbb6c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/BUILD @@ -0,0 +1,66 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +tf_sass_binary( + name = "settings_view_styles", + src = "settings_view_component.scss", +) + +ng_module( + name = "right_pane", + srcs = [ + "right_pane_component.ts", + "right_pane_module.ts", + "settings_view_component.ts", + "settings_view_container.ts", + ], + assets = [ + ":settings_view_styles", + "settings_view_component.ng.html", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_button_toggle", + "//tensorboard/webapp/angular:expect_angular_material_checkbox", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/angular:expect_angular_material_select", + "//tensorboard/webapp/angular:expect_angular_material_slider", + "//tensorboard/webapp/metrics:types", + "//tensorboard/webapp/metrics/actions", + "//tensorboard/webapp/metrics/store", + "//tensorboard/webapp/widgets/dropdown", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "right_pane_test", + testonly = True, + srcs = [ + "right_pane_test.ts", + ], + deps = [ + ":right_pane", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_material_button_toggle", + "//tensorboard/webapp/angular:expect_angular_material_checkbox", + "//tensorboard/webapp/angular:expect_angular_material_select", + "//tensorboard/webapp/angular:expect_angular_material_slider", + "//tensorboard/webapp/angular:expect_angular_platform_browser_animations", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/metrics:types", + "//tensorboard/webapp/metrics/actions", + "//tensorboard/webapp/metrics/store", + "//tensorboard/webapp/widgets/dropdown", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/right_pane_component.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/right_pane_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..4ca9fe63b7bf4ce31b3d8af3c19e71f8c19662ae --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/right_pane_component.ts @@ -0,0 +1,22 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component} from '@angular/core'; + +@Component({ + selector: 'metrics-dashboard-right-pane', + template: ``, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class RightPaneComponent {} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/right_pane_module.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/right_pane_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..092ac53b966c88f15339a3d6215d490fc3709dea --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/right_pane_module.ts @@ -0,0 +1,47 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {MatButtonModule} from '@angular/material/button'; +import {MatButtonToggleModule} from '@angular/material/button-toggle'; +import {MatCheckboxModule} from '@angular/material/checkbox'; +import {MatIconModule} from '@angular/material/icon'; +import {MatSelectModule} from '@angular/material/select'; +import {MatSliderModule} from '@angular/material/slider'; + +import {DropdownModule} from '../../../widgets/dropdown/dropdown_module'; +import {RightPaneComponent} from './right_pane_component'; +import {SettingsViewComponent} from './settings_view_component'; +import {SettingsViewContainer} from './settings_view_container'; + +@NgModule({ + declarations: [ + RightPaneComponent, + SettingsViewComponent, + SettingsViewContainer, + ], + exports: [RightPaneComponent], + imports: [ + CommonModule, + DropdownModule, + MatButtonModule, + MatButtonToggleModule, + MatCheckboxModule, + MatIconModule, + MatSelectModule, + MatSliderModule, + ], +}) +export class RightPaneModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/right_pane_test.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/right_pane_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..6b0c16a1da17a97d049cecee9b3b0ec39a254184 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/right_pane_test.ts @@ -0,0 +1,248 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {DebugElement, NO_ERRORS_SCHEMA} from '@angular/core'; +import { + ComponentFixture, + fakeAsync, + TestBed, + tick, +} from '@angular/core/testing'; +import {MatButtonToggleModule} from '@angular/material/button-toggle'; +import {MatCheckboxModule} from '@angular/material/checkbox'; +import {MatSelectModule} from '@angular/material/select'; +import {MatSliderModule} from '@angular/material/slider'; +import {By} from '@angular/platform-browser'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import {State} from '../../../app_state'; + +import {DropdownModule} from '../../../widgets/dropdown/dropdown_module'; +import * as actions from '../../actions'; +import * as selectors from '../../store/metrics_selectors'; +import {HistogramMode, TooltipSort, XAxisType} from '../../types'; + +import {RightPaneComponent} from './right_pane_component'; +import {SettingsViewComponent, TEST_ONLY} from './settings_view_component'; +import {SettingsViewContainer} from './settings_view_container'; + +describe('metrics right_pane', () => { + let store: MockStore; + let dispatchSpy: jasmine.Spy; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, + DropdownModule, + MatButtonToggleModule, + MatCheckboxModule, + MatSelectModule, + MatSliderModule, + ], + declarations: [ + RightPaneComponent, + SettingsViewComponent, + SettingsViewContainer, + ], + providers: [provideMockStore()], + // Ignore errors from components that are out-of-scope for this test: + // 'runs-selector'. + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + + store = TestBed.inject>(Store) as MockStore; + dispatchSpy = spyOn(store, 'dispatch'); + }); + + describe('settings pane', () => { + beforeEach(() => { + store.overrideSelector( + selectors.getMetricsTooltipSort, + TooltipSort.DEFAULT + ); + store.overrideSelector(selectors.getMetricsIgnoreOutliers, false); + store.overrideSelector(selectors.getMetricsXAxisType, XAxisType.STEP); + store.overrideSelector(selectors.getMetricsScalarSmoothing, 0.2); + store.overrideSelector(selectors.getMetricsImageBrightnessInMilli, 200); + store.overrideSelector(selectors.getMetricsImageContrastInMilli, 10); + store.overrideSelector(selectors.getMetricsImageShowActualSize, false); + store.overrideSelector( + selectors.getMetricsHistogramMode, + HistogramMode.OFFSET + ); + }); + + function getMatSliderValue(el: DebugElement): string { + return el.query(By.css('.mat-slider-thumb-label-text')).nativeElement + .textContent; + } + + function select( + fixture: ComponentFixture, + cssSelector: string + ): DebugElement { + return fixture.debugElement.query(By.css(cssSelector)); + } + + it('renders', () => { + store.overrideSelector( + selectors.getMetricsTooltipSort, + TooltipSort.DEFAULT + ); + store.overrideSelector(selectors.getMetricsIgnoreOutliers, false); + store.overrideSelector(selectors.getMetricsXAxisType, XAxisType.STEP); + store.overrideSelector(selectors.getMetricsScalarSmoothing, 0.3); + store.overrideSelector(selectors.getMetricsImageBrightnessInMilli, 100); + store.overrideSelector(selectors.getMetricsImageContrastInMilli, 200); + store.overrideSelector(selectors.getMetricsImageShowActualSize, true); + + const fixture = TestBed.createComponent(SettingsViewContainer); + fixture.detectChanges(); + + const tooltipSortSelect = select(fixture, '.tooltip-sort tb-dropdown'); + // In the test setting, material component's DOM does not reflect the + // value. + expect(tooltipSortSelect.componentInstance.value).toBe( + TooltipSort.DEFAULT + ); + + expect( + select(fixture, '.scalars-ignore-outliers input').attributes[ + 'aria-checked' + ] + ).toBe('false'); + + const xAxisTypeSelect = select(fixture, '.x-axis-type tb-dropdown'); + expect(xAxisTypeSelect.componentInstance.value).toBe(XAxisType.STEP); + + const histogramModeSelect = select( + fixture, + '.histogram-mode tb-dropdown' + ); + expect(histogramModeSelect.componentInstance.value).toBe( + HistogramMode.OFFSET + ); + + const scalarSmoothingInput = select( + fixture, + '.scalars-smoothing .slider-input' + ); + expect(scalarSmoothingInput.nativeElement.value).toBe('0.3'); + expect( + getMatSliderValue(select(fixture, '.scalars-smoothing mat-slider')) + ).toBe('0.30'); + + expect( + getMatSliderValue(select(fixture, '.image-brightness mat-slider')) + ).toBe('0.1'); + + expect( + getMatSliderValue(select(fixture, '.image-contrast mat-slider')) + ).toBe('0.2'); + + expect( + select(fixture, '.image-show-actual-size input').attributes[ + 'aria-checked' + ] + ).toBe('true'); + }); + + it('dispatches smoothing changed action on input', fakeAsync(() => { + const fixture = TestBed.createComponent(SettingsViewContainer); + fixture.detectChanges(); + + const scalarSmoothingInput = select( + fixture, + '.scalars-smoothing .slider-input' + ); + scalarSmoothingInput.nativeElement.value = '0.3'; + scalarSmoothingInput.nativeElement.dispatchEvent(new Event('input')); + tick(TEST_ONLY.SLIDER_AUDIT_TIME_MS); + expect(dispatchSpy).toHaveBeenCalledWith( + actions.metricsChangeScalarSmoothing({smoothing: 0.3}) + ); + })); + + it('dispatches corrected smoothing values on input', fakeAsync(() => { + const fixture = TestBed.createComponent(SettingsViewContainer); + fixture.detectChanges(); + + const scalarSmoothingInput = select( + fixture, + '.scalars-smoothing .slider-input' + ); + scalarSmoothingInput.nativeElement.value = '-0.3'; + scalarSmoothingInput.nativeElement.dispatchEvent(new Event('input')); + tick(TEST_ONLY.SLIDER_AUDIT_TIME_MS); + + expect(scalarSmoothingInput.nativeElement.value).toBe('0'); + expect(dispatchSpy).toHaveBeenCalledWith( + actions.metricsChangeScalarSmoothing({smoothing: 0}) + ); + + scalarSmoothingInput.nativeElement.value = '1.3'; + scalarSmoothingInput.nativeElement.dispatchEvent(new Event('input')); + tick(TEST_ONLY.SLIDER_AUDIT_TIME_MS); + + expect(scalarSmoothingInput.nativeElement.value).toBe('1'); + expect(dispatchSpy).toHaveBeenCalledWith( + actions.metricsChangeScalarSmoothing({smoothing: 1}) + ); + })); + + it('does not dispatch values on invalid input', fakeAsync(() => { + const fixture = TestBed.createComponent(SettingsViewContainer); + fixture.detectChanges(); + + // Value can be empty string when invalid. + const scalarSmoothingInput = select( + fixture, + '.scalars-smoothing .slider-input' + ); + scalarSmoothingInput.nativeElement.value = ''; + scalarSmoothingInput.nativeElement.dispatchEvent(new Event('input')); + tick(TEST_ONLY.SLIDER_AUDIT_TIME_MS); + + expect(scalarSmoothingInput.nativeElement.value).toBe(''); + expect(dispatchSpy).not.toHaveBeenCalled(); + })); + + it('dispatches metricsToggleIgnoreOutliers on toggle', () => { + const fixture = TestBed.createComponent(SettingsViewContainer); + fixture.detectChanges(); + + select(fixture, '.scalars-ignore-outliers input').nativeElement.click(); + + expect(dispatchSpy).toHaveBeenCalledWith( + actions.metricsToggleIgnoreOutliers() + ); + }); + + it('dispatches metricsToggleImageShowActualSize on toggle', () => { + const fixture = TestBed.createComponent(SettingsViewContainer); + fixture.detectChanges(); + + select(fixture, '.image-show-actual-size input').nativeElement.click(); + + expect(dispatchSpy).toHaveBeenCalledWith( + actions.metricsToggleImageShowActualSize() + ); + }); + + // mat-select does not render `input` or a DOM that can be manipulated. + // skip the test for now. + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/settings_view_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/settings_view_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..e493be1cec8b8477cdc667a718752a5033d2d4aa --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/settings_view_component.ng.html @@ -0,0 +1,156 @@ + +
    +

    General

    + +
    +
    Horizontal Axis
    + + +
    +
    + +
    +

    Scalars

    + +
    +
    Smoothing
    +
    + + +
    +
    + +
    +
    Tooltip sorting method
    + + +
    + +
    + Ignore outliers in chart scaling +
    +
    + +
    +

    Histograms

    + +
    +
    Mode
    + + +
    +
    + +
    +

    Images

    +
    +
    Brightness
    +
    + + +
    +
    + +
    +
    Contrast
    +
    + + +
    +
    + +
    + Show actual image size +
    +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/settings_view_component.scss b/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/settings_view_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..cf35cabe9ec829ed65296d1c137b764a9cc2ae29 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/settings_view_component.scss @@ -0,0 +1,75 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +:host { + color: mat-color($tb-foreground, secondary-text); + font-size: 12px; +} + +section { + border-bottom: 1px solid mat-color($tb-foreground, border); + padding: 16px; +} + +.section-title { + color: mat-color($tb-foreground, text); + text-transform: uppercase; + font-weight: 500; + font-size: 13px; + line-height: normal; + margin: 0 0 12px 0; +} + +section .control-row:not(:last-child) { + margin-bottom: 12px; +} + +.control-name { + margin-bottom: 8px; +} + +.slider-row { + display: flex; + align-items: center; + // Reset mat-slider's internal extra space on top + // https://github.com/angular/components/blob/master/src/material/slider/slider.scss#L10 + height: 28px; + + .reset-button { + margin-left: 6px; + } + + .slider-input { + border: 1px solid mat-color($tf-slate, 500); + border-radius: 2px; + box-sizing: border-box; + height: 100%; + margin-left: 12px; + padding: 0 4px; + } +} + +mat-slider { + flex: 1; + // Reset mat-slider's internal extra space on left/right sides + // https://github.com/angular/components/blob/master/src/material/slider/slider.scss#L10 + margin-left: -8px; + margin-right: -8px; +} + +tb-dropdown { + display: block; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/settings_view_component.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/settings_view_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..2510528d30ddf05f34d969f5a88d8b371a2ceed9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/settings_view_component.ts @@ -0,0 +1,123 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {formatNumber} from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Inject, + Input, + LOCALE_ID, + Output, +} from '@angular/core'; +import {auditTime} from 'rxjs/operators'; + +import {DropdownOption} from '../../../widgets/dropdown/dropdown_component'; +import {HistogramMode, TooltipSort, XAxisType} from '../../types'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +const SLIDER_AUDIT_TIME_MS = 250; + +@Component({ + selector: 'metrics-dashboard-settings-component', + templateUrl: 'settings_view_component.ng.html', + changeDetection: ChangeDetectionStrategy.OnPush, + styleUrls: [`settings_view_component.css`], +}) +export class SettingsViewComponent { + constructor(@Inject(LOCALE_ID) private readonly locale: string) {} + + readonly TooltipSortDropdownOptions: DropdownOption[] = [ + {value: TooltipSort.DEFAULT, displayText: 'Default'}, + {value: TooltipSort.ASCENDING, displayText: 'Ascending'}, + {value: TooltipSort.DESCENDING, displayText: 'Descending'}, + {value: TooltipSort.NEAREST, displayText: 'Nearest'}, + ]; + @Input() tooltipSort!: TooltipSort; + @Output() tooltipSortChanged = new EventEmitter(); + + @Input() ignoreOutliers!: boolean; + @Output() ignoreOutliersChanged = new EventEmitter(); + + readonly XAxisTypeDropdownOptions: DropdownOption[] = [ + {value: XAxisType.STEP, displayText: 'Step'}, + {value: XAxisType.RELATIVE, displayText: 'Relative'}, + {value: XAxisType.WALL_TIME, displayText: 'Wall'}, + ]; + @Input() xAxisType!: XAxisType; + @Output() xAxisTypeChanged = new EventEmitter(); + + readonly HistogramModeDropdownOptions: DropdownOption[] = [ + {value: HistogramMode.OFFSET, displayText: 'Offset'}, + {value: HistogramMode.OVERLAY, displayText: 'Overlay'}, + ]; + @Input() histogramMode!: HistogramMode; + @Output() histogramModeChanged = new EventEmitter(); + + readonly scalarSmoothingControlChanged$ = new EventEmitter(); + @Input() scalarSmoothing!: number; + @Output() + scalarSmoothingChanged = this.scalarSmoothingControlChanged$.pipe( + auditTime(SLIDER_AUDIT_TIME_MS) + ); + + onScalarSmoothingInput(event: Event) { + const input = event.target as HTMLInputElement; + if (!input.value) { + return; + } + const nextValue = Math.min(Math.max(0, parseFloat(input.value)), 1); + + // Rectify here in case Angular does not trigger ngOnChanges when expected. + if (nextValue !== parseFloat(input.value)) { + input.value = String(nextValue); + } + this.scalarSmoothingControlChanged$.emit(nextValue); + } + + readonly imageBrightnessSliderChanged$ = new EventEmitter(); + @Input() imageBrightnessInMilli!: number; + @Output() + imageBrightnessInMilliChanged = this.imageBrightnessSliderChanged$.pipe( + auditTime(SLIDER_AUDIT_TIME_MS) + ); + @Output() imageBrightnessReset = new EventEmitter(); + + readonly imageContrastSliderChanged$ = new EventEmitter(); + @Input() imageContrastInMilli!: number; + @Output() + imageContrastInMilliChanged = this.imageContrastSliderChanged$.pipe( + auditTime(SLIDER_AUDIT_TIME_MS) + ); + @Output() imageContrastReset = new EventEmitter(); + + @Input() imageShowActualSize!: boolean; + @Output() imageShowActualSizeChanged = new EventEmitter(); + + formatMilliToZeroth(num: number): string { + return formatNumber( + num / 1000, + // Our app does not, yet, specify LOCALE_ID. Default to en-US. + this.locale || 'en-US', + // The slider cannot fit 3 decimals. + '1.0-2' + ); + } +} + +export const TEST_ONLY = { + SLIDER_AUDIT_TIME_MS, +}; diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/settings_view_container.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/settings_view_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..03410513f4c6c7a0adaaa1f33cb830ee4b11a028 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/right_pane/settings_view_container.ts @@ -0,0 +1,126 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component} from '@angular/core'; +import {Store} from '@ngrx/store'; + +import {State} from '../../../app_state'; +import { + metricsChangeHistogramMode, + metricsChangeImageBrightness, + metricsChangeImageContrast, + metricsChangeScalarSmoothing, + metricsChangeTooltipSort, + metricsChangeXAxisType, + metricsResetImageBrightness, + metricsResetImageContrast, + metricsToggleIgnoreOutliers, + metricsToggleImageShowActualSize, +} from '../../actions'; +import * as selectors from '../../store/metrics_selectors'; +import {HistogramMode, TooltipSort, XAxisType} from '../../types'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'metrics-dashboard-settings', + template: ` + + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SettingsViewContainer { + constructor(private readonly store: Store) {} + + readonly tooltipSort$ = this.store.select(selectors.getMetricsTooltipSort); + readonly ignoreOutliers$ = this.store.select( + selectors.getMetricsIgnoreOutliers + ); + readonly xAxisType$ = this.store.select(selectors.getMetricsXAxisType); + readonly histogramMode$ = this.store.select( + selectors.getMetricsHistogramMode + ); + readonly scalarSmoothing$ = this.store.select( + selectors.getMetricsScalarSmoothing + ); + readonly imageBrightnessInMilli$ = this.store.select( + selectors.getMetricsImageBrightnessInMilli + ); + readonly imageContrastInMilli$ = this.store.select( + selectors.getMetricsImageContrastInMilli + ); + readonly imageShowActualSize$ = this.store.select( + selectors.getMetricsImageShowActualSize + ); + + onTooltipSortChanged(sort: TooltipSort) { + this.store.dispatch(metricsChangeTooltipSort({sort})); + } + + onIgnoreOutliersChanged() { + this.store.dispatch(metricsToggleIgnoreOutliers()); + } + + onXAxisTypeChanged(xAxisType: XAxisType) { + this.store.dispatch(metricsChangeXAxisType({xAxisType})); + } + + onHistogramModeChanged(histogramMode: HistogramMode) { + this.store.dispatch(metricsChangeHistogramMode({histogramMode})); + } + + onScalarSmoothingChanged(smoothing: number) { + this.store.dispatch(metricsChangeScalarSmoothing({smoothing})); + } + + onImageBrightnessInMilliChanged(brightnessInMilli: number) { + this.store.dispatch(metricsChangeImageBrightness({brightnessInMilli})); + } + + onImageBrightnessReset() { + this.store.dispatch(metricsResetImageBrightness()); + } + + onImageContrastReset() { + this.store.dispatch(metricsResetImageContrast()); + } + + onImageContrastInMilliChanged(contrastInMilli: number) { + this.store.dispatch(metricsChangeImageContrast({contrastInMilli})); + } + + onImageShowActualSizeChanged() { + this.store.dispatch(metricsToggleImageShowActualSize()); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/utils.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/utils.ts new file mode 100644 index 0000000000000000000000000000000000000000..ce6e6e62babd3f9cec4c8c1762bdd8e3c98feeb8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/utils.ts @@ -0,0 +1,178 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {DeepReadonly} from '../../util/types'; +import {CardGroup, CardIdWithMetadata} from './metrics_view_types'; + +export function groupCardIdWithMetdata( + cards: DeepReadonly +): CardGroup[] { + const tagPrefix = new Map(); + + const sortedCards = cards.slice().sort((cardA, cardB) => { + return compareTagNames(cardA.tag, cardB.tag); + }); + + for (const card of sortedCards) { + const groupName = getTagGroupName(card.tag); + + if (!tagPrefix.has(groupName)) { + tagPrefix.set(groupName, {groupName, items: []}); + } + + tagPrefix.get(groupName)!.items.push(card); + } + + return [...tagPrefix.values()]; +} + +function getTagGroupName(tag: string): string { + return tag.split('/', 1)[0]; +} + +const IGNORED_TAG_SUFFIX = '/scalar_summary'; + +export function getTagDisplayName( + tag: string, + groupName: string | null +): string { + // Remove group name prefix. + let result = tag; + if (groupName && tag.startsWith(groupName + '/')) { + result = tag.slice(groupName.length + 1); + } + + // Remove the V1 scalar summary suffix. See traditional TB logic in + // tensorboard/plugins/scalar/tf_scalar_dashboard/tf-scalar-dashboard.html + if (result.endsWith(IGNORED_TAG_SUFFIX)) { + result = result.slice(0, -IGNORED_TAG_SUFFIX.length); + } + + return result || tag; +} + +// TODO(b/154055328): combine this with the OSS ts_library compat version. +// Adopted from tensorboard/components/vz_sorting/sorting.js +// Delta: +// - better typing +// - human readable variable names +// - removed componentization by "_". + +/** + * Compares tag names asciinumerically broken into components. + * + * Unlike the standard asciibetical comparator, this function knows that 'a10b' + * > 'a2b'. Fixed point and engineering notation are supported. This function + * also splits the input by slash to perform array comparison. Therefore it + * knows that 'a/a' < 'a+/a' even though '+' < '/' in the ASCII table. + */ +export function compareTagNames(tagA: string, tagB: string) { + let aIndex = 0; + let bIndex = 0; + + while (true) { + if (aIndex === tagA.length) { + return bIndex === tagB.length ? 0 : -1; + } + if (bIndex === tagB.length) { + return 1; + } + + if (isDigit(tagA[aIndex]) && isDigit(tagB[bIndex])) { + const aNumberStart = aIndex; + const bNumberStart = bIndex; + aIndex = consumeNumber(tagA, aIndex + 1); + bIndex = consumeNumber(tagB, bIndex + 1); + const an = Number(tagA.slice(aNumberStart, aIndex)); + const bn = Number(tagB.slice(bNumberStart, bIndex)); + if (an < bn) { + return -1; + } + if (an > bn) { + return 1; + } + continue; + } + + if (isBreak(tagA[aIndex])) { + if (!isBreak(tagB[bIndex])) { + return -1; + } + } else if (isBreak(tagB[bIndex])) { + return 1; + } else if (tagA[aIndex] < tagB[bIndex]) { + return -1; + } else if (tagA[aIndex] > tagB[bIndex]) { + return 1; + } + + aIndex++; + bIndex++; + } +} + +/** + * Returns endIndex of a number sequence in string starting from startIndex. + * + * The method can handle scientific notation, real and natural numbers, and + * numbers with exponents. Do note that it does not treat decimals that start + * with "." as a real number. + */ +function consumeNumber(s: string, startIndex: number): number { + enum State { + NATURAL, + REAL, + EXPONENT_SIGN, + EXPONENT, + } + + let state = State.NATURAL; + let i = startIndex; + for (; i < s.length; i++) { + if (state === State.NATURAL) { + if (s[i] === '.') { + state = State.REAL; + } else if (s[i] === 'e' || s[i] === 'E') { + state = State.EXPONENT_SIGN; + } else if (!isDigit(s[i])) { + break; + } + } else if (state === State.REAL) { + if (s[i] === 'e' || s[i] === 'E') { + state = State.EXPONENT_SIGN; + } else if (!isDigit(s[i])) { + break; + } + } else if (state === State.EXPONENT_SIGN) { + if (isDigit(s[i]) || s[i] === '+' || s[i] === '-') { + state = State.EXPONENT; + } else { + break; + } + } else if (state === State.EXPONENT) { + if (!isDigit(s[i])) { + break; + } + } + } + return i; +} + +function isDigit(character: string): boolean { + return '0' <= character && character <= '9'; +} + +function isBreak(character: string): boolean { + return character === '/' || isDigit(character); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/metrics/views/utils_test.ts b/saved_models/tensorboard/tensorboard/webapp/metrics/views/utils_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..bfa388e5198e465fa8eaa383ed1e1294039f5c32 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/metrics/views/utils_test.ts @@ -0,0 +1,207 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {PluginType} from '../data_source'; + +import {CardIdWithMetadata} from './metrics_view_types'; +import { + compareTagNames, + getTagDisplayName, + groupCardIdWithMetdata, +} from './utils'; + +function buildCardIdWithMetadata( + override: Partial +): CardIdWithMetadata { + return { + cardId: 'foo', + plugin: PluginType.SCALARS, + tag: 'tag', + runId: null, + ...override, + }; +} + +describe('metrics utils', () => { + it('groups card ids with metadata by tag prefix', () => { + const cards = [ + buildCardIdWithMetadata({cardId: 'foo', tag: 'a/b/c'}), + buildCardIdWithMetadata({cardId: 'bar', tag: 'a/b/c/d'}), + buildCardIdWithMetadata({cardId: 'baz', tag: 'b'}), + buildCardIdWithMetadata({cardId: 'qaz', tag: 'c/c/d'}), + ]; + + const groups = groupCardIdWithMetdata(cards); + + expect(groups).toEqual([ + { + groupName: 'a', + items: [ + buildCardIdWithMetadata({cardId: 'foo', tag: 'a/b/c'}), + buildCardIdWithMetadata({cardId: 'bar', tag: 'a/b/c/d'}), + ], + }, + { + groupName: 'b', + items: [buildCardIdWithMetadata({cardId: 'baz', tag: 'b'})], + }, + { + groupName: 'c', + items: [buildCardIdWithMetadata({cardId: 'qaz', tag: 'c/c/d'})], + }, + ]); + }); + + it('sorts the groups by tag name', () => { + const cards = [ + buildCardIdWithMetadata({cardId: 'baz', tag: 'b'}), + buildCardIdWithMetadata({cardId: 'bar', tag: 'a/b/c/d'}), + buildCardIdWithMetadata({cardId: 'foo', tag: 'a/b/c'}), + buildCardIdWithMetadata({cardId: 'qaz', tag: 'c/c/d'}), + ]; + + const groups = groupCardIdWithMetdata(cards); + + expect(groups).toEqual([ + { + groupName: 'a', + items: [ + buildCardIdWithMetadata({cardId: 'foo', tag: 'a/b/c'}), + buildCardIdWithMetadata({cardId: 'bar', tag: 'a/b/c/d'}), + ], + }, + { + groupName: 'b', + items: [buildCardIdWithMetadata({cardId: 'baz', tag: 'b'})], + }, + { + groupName: 'c', + items: [buildCardIdWithMetadata({cardId: 'qaz', tag: 'c/c/d'})], + }, + ]); + }); + + it('handles weird tag names', () => { + // Traditional TensorBoard handles it like below which is less than ideal. + // TODO(stephanwlee, psybuzz): find the better UX for this. + const cards = [ + buildCardIdWithMetadata({cardId: 'baz', tag: '/'}), + buildCardIdWithMetadata({cardId: 'foo', tag: '/a/'}), + ]; + + const groups = groupCardIdWithMetdata(cards); + + expect(groups).toEqual([ + { + groupName: '', + items: [ + buildCardIdWithMetadata({cardId: 'baz', tag: '/'}), + buildCardIdWithMetadata({cardId: 'foo', tag: '/a/'}), + ], + }, + ]); + }); + + describe('getTagDisplayName', () => { + it('removes group prefix and suffix if possible', () => { + expect(getTagDisplayName('layer/foo', 'layer')).toBe('foo'); + expect(getTagDisplayName('layer/foo', 'loss')).toBe('layer/foo'); + expect(getTagDisplayName('layerfoo', 'layer')).toBe('layerfoo'); + expect(getTagDisplayName('layer/foo/scalar_summary', 'layer')).toBe( + 'foo' + ); + expect(getTagDisplayName('foo/scalar_summary', '')).toBe('foo'); + expect(getTagDisplayName('fooscalar_summary', '')).toBe( + 'fooscalar_summary' + ); + expect(getTagDisplayName('layer/scalar_summary', '')).toBe('layer'); + expect(getTagDisplayName('layer//foo', 'layer')).toBe('/foo'); + }); + + it('handles null group name', () => { + expect(getTagDisplayName('layer/foo', null)).toBe('layer/foo'); + expect(getTagDisplayName('foo/scalar_summary', null)).toBe('foo'); + expect(getTagDisplayName('fooscalar_summary', null)).toBe( + 'fooscalar_summary' + ); + expect(getTagDisplayName('layer/scalar_summary', null)).toBe('layer'); + }); + + it('uses tag as fallback if removal leaves empty string', () => { + expect(getTagDisplayName('layer/', 'layer')).toBe('layer/'); + expect(getTagDisplayName('/scalar_summary', '')).toBe('/scalar_summary'); + }); + }); + + describe('#compareTagNames', () => { + function sortTagNames(tags: string[]): string[] { + return tags.sort(compareTagNames); + } + + it('sorts asciibetical when no number or separators are present', () => { + expect(sortTagNames(['a', 'b'])).toEqual(['a', 'b']); + expect(sortTagNames(['a', 'B'])).toEqual(['B', 'a']); + }); + + it('sorts integer portions', () => { + expect(sortTagNames(['03', '1'])).toEqual(['1', '03']); + expect(sortTagNames(['a03', 'a1'])).toEqual(['a1', 'a03']); + expect(sortTagNames(['a03', 'b1'])).toEqual(['a03', 'b1']); + expect(sortTagNames(['x0a03', 'x0a1'])).toEqual(['x0a1', 'x0a03']); + expect(sortTagNames(['a/b/03', 'a/b/1'])).toEqual(['a/b/1', 'a/b/03']); + }); + + it('sorts fixed point numbers', () => { + expect(sortTagNames(['a0.1', 'a0.01'])).toEqual(['a0.01', 'a0.1']); + }); + + it('sorts engineering notation', () => { + expect(sortTagNames(['a1e9', 'a9e8'])).toEqual(['a9e8', 'a1e9']); + expect(sortTagNames(['a1e+9', 'a9e+8'])).toEqual(['a9e+8', 'a1e+9']); + expect(sortTagNames(['a1e+5', 'a9e-6'])).toEqual(['a9e-6', 'a1e+5']); + expect(sortTagNames(['a1.0e9', 'a9.0e8'])).toEqual(['a9.0e8', 'a1.0e9']); + expect(sortTagNames(['a1.0e+9', 'a9.0e+8'])).toEqual([ + 'a9.0e+8', + 'a1.0e+9', + ]); + }); + + it('sorts fragments componentized by slash', () => { + expect(sortTagNames(['a+/a', 'a/a', 'ab/c', 'ab/a'])).toEqual([ + 'a/a', + 'a+/a', + 'ab/a', + 'ab/c', + ]); + }); + + it('sorts fragments componentized by number boundaries', () => { + expect(sortTagNames(['a+0a', 'a0a', 'ab0a'])).toEqual([ + 'a0a', + 'a+0a', + 'ab0a', + ]); + }); + + it('sorts to make empty string comes the first', () => { + expect(sortTagNames(['a', '//', '/', ''])).toEqual(['', '/', '//', 'a']); + }); + + it('parses decimal correctly', () => { + expect(sortTagNames(['0.2', '0.03'])).toEqual(['0.03', '0.2']); + expect(sortTagNames(['0..2', '0..03'])).toEqual(['0..2', '0..03']); + expect(sortTagNames(['.2', '.03'])).toEqual(['.2', '.03']); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/oss_plugins_module.ts b/saved_models/tensorboard/tensorboard/webapp/oss_plugins_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..4c781b3dceb9a169d127ceb4a806b596f71b5b9d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/oss_plugins_module.ts @@ -0,0 +1,30 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +/** + * @fileoverview This module enumerates all Angular based plugins TensorBoard supports. + */ + +import {NgModule} from '@angular/core'; + +import {DebuggerModule} from '../plugins/debugger_v2/tf_debugger_v2_plugin/debugger_module'; +import {MetricsModule} from './metrics/metrics_module'; +import {NpmiModule} from './plugins/npmi/npmi_module'; +import {TextV2Module} from './plugins/text_v2/text_v2_module'; + +@NgModule({ + imports: [DebuggerModule, MetricsModule, NpmiModule, TextV2Module], +}) +export class OssPluginsModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..6dbc9cb254a9aea9cb96e4acd3fc052bd9c8dce5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/BUILD @@ -0,0 +1,68 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "plugins", + srcs = [ + "plugins_component.ts", + "plugins_container.ts", + "plugins_module.ts", + ], + assets = [ + "plugins_component.ng.html", + ], + deps = [ + ":plugin_registry", + "//tensorboard/webapp/core", + "//tensorboard/webapp/core:types", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/types", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +ng_module( + name = "plugin_registry", + srcs = [ + "plugin_registry_module.ts", + "plugin_registry_types.ts", + ], + deps = [ + "@npm//@angular/common", + "@npm//@angular/core", + ], +) + +tf_ts_library( + name = "plugins_container_test_lib", + testonly = True, + srcs = [ + "plugins_container_test.ts", + ], + deps = [ + ":plugin_registry", + ":plugins", + "//tensorboard/plugins/debugger_v2/tf_debugger_v2_plugin/testing", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core", + "//tensorboard/webapp/core:types", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/plugins/testing", + "//tensorboard/webapp/types", + "@npm//@angular/common", + "@npm//@angular/compiler", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..cb7e1c64c5e461025a08bfea0bd02975ef66e84f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/BUILD @@ -0,0 +1,67 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "npmi_component_styles", + src = "npmi_component.scss", +) + +ng_module( + name = "npmi", + srcs = [ + "npmi_component.ts", + "npmi_container.ts", + "npmi_module.ts", + ], + assets = [ + ":npmi_component_styles", + "npmi_component.ng.html", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/core:types", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/plugins:plugin_registry", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/data_source", + "//tensorboard/webapp/plugins/npmi/effects", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/views/inactive", + "//tensorboard/webapp/plugins/npmi/views/main", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "npmi_test_lib", + testonly = True, + srcs = [ + "npmi_container_test.ts", + ], + deps = [ + ":npmi", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/plugins/npmi/views/inactive", + "//tensorboard/webapp/plugins/npmi/views/main", + "@npm//@angular/common", + "@npm//@angular/compiler", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/actions/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/actions/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..6d047d1c24d56e505bd8fbec3b07af8cde0efafa --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/actions/BUILD @@ -0,0 +1,18 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "actions", + srcs = [ + "index.ts", + "npmi_actions.ts", + ], + deps = [ + "//tensorboard/webapp/plugins/npmi/data_source", + "//tensorboard/webapp/plugins/npmi/store:types", + "@npm//@ngrx/store", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/actions/index.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/actions/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..dd1956308254b294556d401c1a71fb60108f0265 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/actions/index.ts @@ -0,0 +1,16 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export * from './npmi_actions'; diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/actions/npmi_actions.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/actions/npmi_actions.ts new file mode 100644 index 0000000000000000000000000000000000000000..a05c1f5b888940e770f296b14b2b5839e2de8a9a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/actions/npmi_actions.ts @@ -0,0 +1,123 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {createAction, props} from '@ngrx/store'; +import { + AnnotationDataListing, + MetricListing, + EmbeddingListing, +} from '../store/npmi_types'; + +// HACK: Below import is for type inference. +// https://github.com/bazelbuild/rules_nodejs/issues/1013 +/** @typehack */ import * as _typeHackModels from '@ngrx/store/src/models'; + +/** + * Actions for the NPMI Component. + */ +export const npmiLoaded = createAction('[NPMI] nPMI Loaded'); + +export const npmiPluginDataRequested = createAction( + '[NPMI] nPMI Plugin Data Requested' +); + +export const npmiPluginDataLoaded = createAction( + '[NPMI] nPMI Plugin Data Loaded', + props<{ + annotationData: AnnotationDataListing; + metrics: MetricListing; + embeddingData: EmbeddingListing; + }>() +); + +export const npmiPluginDataRequestFailed = createAction( + '[NPMI] nPMI Plugin Data Request Failed' +); + +export const npmiToggleSelectedAnnotations = createAction( + '[NPMI] Adding/Removing Annotations to/from Selected', + props<{annotations: string[]}>() +); + +export const npmiSetSelectedAnnotations = createAction( + '[NPMI] Annotations Set', + props<{annotations: string[]}>() +); + +export const npmiClearSelectedAnnotations = createAction( + '[NPMI] Clearing the Annotation Selection' +); + +export const npmiToggleAnnotationFlags = createAction( + '[NPMI] Adding/Removing Annotations to/from Flagged', + props<{annotations: string[]}>() +); + +export const npmiToggleAnnotationsHidden = createAction( + '[NPMI] Adding/Removing Annotations to/from Hidden', + props<{annotations: string[]}>() +); + +export const npmiAnnotationsRegexChanged = createAction( + '[NPMI] Annotations Regex Changed', + props<{regex: string}>() +); + +export const npmiMetricsRegexChanged = createAction( + '[NPMI] Metrics Regex Changed', + props<{regex: string}>() +); + +export const npmiAddMetricFilter = createAction( + '[NPMI] Metric Filter Added', + props<{metric: string}>() +); + +export const npmiRemoveMetricFilter = createAction( + '[NPMI] Metric Filter Removed', + props<{metric: string}>() +); + +export const npmiChangeMetricFilter = createAction( + '[NPMI] Metric Filter Changed', + props<{metric: string; max: number; min: number; includeNaN: boolean}>() +); + +export const npmiChangeAnnotationSort = createAction( + '[NPMI] Change Annotation Sort', + props<{metric: string}>() +); + +export const npmiToggleParallelCoordinatesExpanded = createAction( + '[NPMI] Toggle PC Expanded' +); + +export const npmiToggleAnnotationsExpanded = createAction( + '[NPMI] Toggle Annotations Expanded' +); + +export const npmiToggleSidebarExpanded = createAction( + '[NPMI] Toggle Sidebar Expanded' +); + +export const npmiToggleShowCounts = createAction('[NPMI] Toggle Show Counts'); + +export const npmiToggleShowHiddenAnnotations = createAction( + '[NPMI] Toggle Show Hidden Annotations' +); + +export const npmiChangeSidebarWidth = createAction( + '[NPMI] Change Sidebar Width', + props<{sidebarWidth: number}>() +); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/data_source/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/data_source/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..344b8f0222df996f06f8d044e3e99abd5c3611a1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/data_source/BUILD @@ -0,0 +1,37 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "data_source", + srcs = [ + "npmi_data_source.ts", + "npmi_data_source_module.ts", + ], + deps = [ + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/util:metric_type", + "//tensorboard/webapp/webapp_data_source:http_client", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "data_source_test_lib", + testonly = True, + srcs = [ + "npmi_data_source_test.ts", + ], + deps = [ + ":data_source", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/webapp_data_source:http_client_testing", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/data_source/npmi_data_source.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/data_source/npmi_data_source.ts new file mode 100644 index 0000000000000000000000000000000000000000..3ac52ae8d8c516cff44fae86ecbe249fbe99e971 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/data_source/npmi_data_source.ts @@ -0,0 +1,146 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; + +import {Observable, of, forkJoin, throwError} from 'rxjs'; +import {map, catchError} from 'rxjs/operators'; + +import { + TBHttpClient, + HttpErrorResponse, +} from '../../../webapp_data_source/tb_http_client'; +import * as metric_type from '../util/metric_type'; +import { + MetricListing, + AnnotationDataListing, + ValueData, + EmbeddingListing, +} from './../store/npmi_types'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +export abstract class NpmiDataSource { + abstract fetchData(): Observable<{ + annotationData: AnnotationDataListing; + metrics: MetricListing; + embeddingData: EmbeddingListing; + }>; +} + +interface AnnotationListing { + [runId: string]: string[]; +} + +interface ValueListing { + [runId: string]: number[][]; +} + +interface RunEmbeddingListing { + [runId: string]: number[][]; +} + +@Injectable() +export class NpmiHttpServerDataSource implements NpmiDataSource { + private readonly httpPathPrefix = 'data/plugin/npmi'; + + constructor(private readonly http: TBHttpClient) {} + + fetchData() { + return forkJoin( + this.fetchAnnotations(), + this.fetchMetrics(), + this.fetchValues(), + this.fetchEmbeddings() + ).pipe( + map(([annotations, metrics, values, embeddings]) => { + const annotationData: AnnotationDataListing = {}; + const embeddingData: EmbeddingListing = {}; + for (const run of Object.keys(annotations)) { + for (const annotationIndex in annotations[run]) { + const annotation = annotations[run][annotationIndex]; + if (embeddings[run][annotationIndex]) { + embeddingData[annotation] = embeddings[run][annotationIndex]; + } + const metricToDataElements = new Map(); + for (const metricIndex in metrics[run]) { + const metric = metrics[run][metricIndex]; + const metricString = metric_type.stripMetricString(metric); + let dataElement = metricToDataElements.get(metricString); + if (!dataElement) { + dataElement = { + nPMIValue: null, + countValue: null, + annotation: annotation, + metric: metricString, + run: run, + }; + metricToDataElements.set(metricString, dataElement); + } + if (metric_type.metricIsMetricCount(metric)) { + dataElement.countValue = + values[run][annotationIndex][metricIndex]; + } else if (metric_type.metricIsNpmi(metric)) { + dataElement.nPMIValue = + values[run][annotationIndex][metricIndex]; + } + } + const existing = annotationData[annotation] + ? annotationData[annotation] + : []; + annotationData[annotation] = [ + ...existing, + ...metricToDataElements.values(), + ]; + } + } + return {annotationData, metrics, embeddingData}; + }), + catchError((error) => { + if ( + error instanceof HttpErrorResponse && + 400 <= error.status && + error.status < 500 + ) { + return of({ + annotationData: {}, + metrics: {}, + embeddingData: {}, + }); + } + return throwError(error); + }) + ); + } + + private fetchAnnotations() { + return this.http.get( + this.httpPathPrefix + '/annotations' + ); + } + + private fetchMetrics() { + return this.http.get(this.httpPathPrefix + '/metrics'); + } + + private fetchValues() { + return this.http.get(this.httpPathPrefix + '/values'); + } + + private fetchEmbeddings() { + return this.http.get( + this.httpPathPrefix + '/embeddings' + ); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/data_source/npmi_data_source_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/data_source/npmi_data_source_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..5307f107a1354ea4f08e08f5857c0b2d42a2e41e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/data_source/npmi_data_source_module.ts @@ -0,0 +1,23 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; +import {NpmiHttpServerDataSource} from './npmi_data_source'; +import {TBHttpClientModule} from '../../../webapp_data_source/tb_http_client_module'; + +@NgModule({ + imports: [TBHttpClientModule], + providers: [NpmiHttpServerDataSource], +}) +export class NpmiServerDataSourceModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/data_source/npmi_data_source_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/data_source/npmi_data_source_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..e54e05950326d900e13cdd102f7d98a1102f57ed --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/data_source/npmi_data_source_test.ts @@ -0,0 +1,164 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed} from '@angular/core/testing'; +import { + HttpTestingController, + TBHttpClientTestingModule, +} from '../../../webapp_data_source/tb_http_client_testing'; + +import {NpmiHttpServerDataSource} from './npmi_data_source'; + +describe('runs_data_source', () => { + let httpMock: HttpTestingController; + let dataSource: NpmiHttpServerDataSource; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TBHttpClientTestingModule], + providers: [NpmiHttpServerDataSource], + }).compileComponents(); + + httpMock = TestBed.inject(HttpTestingController); + dataSource = TestBed.inject(NpmiHttpServerDataSource); + }); + + describe('fetch data', () => { + it( + 'calls /annotations, /metrics, /values and /embeddings to return map ' + + 'of annotation to ValueData and map of runId to metrics', + () => { + const returnValue = jasmine.createSpy(); + dataSource.fetchData().subscribe(returnValue); + httpMock.expectOne('data/plugin/npmi/annotations').flush({ + run_1: ['annotation_1', 'annotation_2'], + run_2: ['annotation_2', 'annotation_3'], + }); + httpMock.expectOne('data/plugin/npmi/metrics').flush({ + run_1: ['count@test', 'nPMI@test'], + run_2: ['count@test', 'nPMI@test'], + }); + httpMock.expectOne('data/plugin/npmi/values').flush({ + run_1: [ + [1000, 0.2618], + [15298, -0.74621], + ], + run_2: [ + [3598, 0.135], + [8327, -0.1572], + ], + }); + httpMock.expectOne('data/plugin/npmi/embeddings').flush({ + run_1: [ + [0.15125, 0.2618], + [1.51251, -0.74621], + ], + run_2: [ + [1.51251, -0.74621], + [-0.8327, -0.1572], + ], + }); + + expect(returnValue).toHaveBeenCalledWith({ + annotationData: { + annotation_1: [ + { + nPMIValue: 0.2618, + countValue: 1000, + annotation: 'annotation_1', + metric: 'test', + run: 'run_1', + }, + ], + annotation_2: [ + { + nPMIValue: -0.74621, + countValue: 15298, + annotation: 'annotation_2', + metric: 'test', + run: 'run_1', + }, + { + nPMIValue: 0.135, + countValue: 3598, + annotation: 'annotation_2', + metric: 'test', + run: 'run_2', + }, + ], + annotation_3: [ + { + nPMIValue: -0.1572, + countValue: 8327, + annotation: 'annotation_3', + metric: 'test', + run: 'run_2', + }, + ], + }, + metrics: { + run_1: ['count@test', 'nPMI@test'], + run_2: ['count@test', 'nPMI@test'], + }, + embeddingData: { + annotation_1: [0.15125, 0.2618], + annotation_2: [1.51251, -0.74621], + annotation_3: [-0.8327, -0.1572], + }, + }); + } + ); + + it('does not break when responses is empty', () => { + const returnValue = jasmine.createSpy(); + dataSource.fetchData().subscribe(returnValue); + httpMock.expectOne('data/plugin/npmi/annotations').flush({}); + httpMock.expectOne('data/plugin/npmi/metrics').flush({}); + httpMock.expectOne('data/plugin/npmi/values').flush({}); + httpMock.expectOne('data/plugin/npmi/embeddings').flush({}); + + expect(returnValue).toHaveBeenCalledWith({ + annotationData: {}, + metrics: {}, + embeddingData: {}, + }); + }); + + it('returns empty data when backend responds with 400', () => { + const returnValue = jasmine.createSpy(); + dataSource.fetchData().subscribe(returnValue); + httpMock + .expectOne('data/plugin/npmi/annotations') + .error(new ErrorEvent('400 error'), {status: 400}); + + expect(returnValue).toHaveBeenCalledWith({ + annotationData: {}, + metrics: {}, + embeddingData: {}, + }); + }); + + it('throws error when response is >= 500', () => { + const returnValue = jasmine.createSpy(); + const errorValue = jasmine.createSpy(); + dataSource.fetchData().subscribe(returnValue, errorValue); + httpMock + .expectOne('data/plugin/npmi/values') + .error(new ErrorEvent('501 Internal Server Error'), {status: 501}); + + expect(returnValue).not.toHaveBeenCalled(); + expect(errorValue).toHaveBeenCalled(); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/effects/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/effects/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..f9c79afde84ab1ab35f5f88302ee1c7f55e6d6d2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/effects/BUILD @@ -0,0 +1,49 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "effects", + srcs = [ + "index.ts", + "npmi_effects.ts", + ], + deps = [ + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/data_source", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "effects_test_lib", + testonly = True, + srcs = [ + "npmi_effects_test.ts", + ], + deps = [ + ":effects", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/data_source", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/testing", + "//tensorboard/webapp/webapp_data_source:http_client_testing", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/effects/index.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/effects/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..088b30e7ef047ca7b18721fbf353df760a4a5c9b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/effects/index.ts @@ -0,0 +1,15 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export * from './npmi_effects'; diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/effects/npmi_effects.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/effects/npmi_effects.ts new file mode 100644 index 0000000000000000000000000000000000000000..fd46ae36a9036b26a43e92387eb1528a50cfa5ed --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/effects/npmi_effects.ts @@ -0,0 +1,90 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {Actions, createEffect, ofType} from '@ngrx/effects'; + +import {merge, Observable, EMPTY} from 'rxjs'; +import { + filter, + map, + mergeMap, + tap, + withLatestFrom, + catchError, +} from 'rxjs/operators'; + +import {NpmiHttpServerDataSource} from '../data_source/npmi_data_source'; +import {State, DataLoadState} from './../store/npmi_types'; +import {getPluginDataLoaded} from './../store/npmi_selectors'; +import { + npmiLoaded, + npmiPluginDataRequested, + npmiPluginDataLoaded, + npmiPluginDataRequestFailed, +} from './../actions'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; +/** @typehack */ import * as _typeHackNgrxStore from '@ngrx/store/src/models'; +/** @typehack */ import * as _typeHackNgrxEffects from '@ngrx/effects/effects'; + +@Injectable() +export class NpmiEffects { + /** + * Observable that loads: + * - runs list + * - number of executions + * - execution digest + * - execution details + */ + /** @export */ + readonly loadData$: Observable<{}>; + + private loadPluginData() { + return this.actions$.pipe( + ofType(npmiLoaded), + withLatestFrom(this.store.select(getPluginDataLoaded)), + filter(([, {state}]) => state !== DataLoadState.LOADING), + tap(() => this.store.dispatch(npmiPluginDataRequested())), + mergeMap(() => { + return this.dataSource.fetchData().pipe( + tap((result) => { + this.store.dispatch(npmiPluginDataLoaded(result)); + }), + map(() => void null), + catchError(() => { + this.store.dispatch(npmiPluginDataRequestFailed()); + return EMPTY; + }) + ); + }) + ); + } + + constructor( + private actions$: Actions, + private store: Store, + private dataSource: NpmiHttpServerDataSource + ) { + this.loadData$ = createEffect( + () => { + const loadPluginData$ = this.loadPluginData(); + + return merge(loadPluginData$).pipe(map(() => ({}))); + }, + {dispatch: false} + ); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/effects/npmi_effects_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/effects/npmi_effects_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..28afaa093e3b854a91e4a3c901a16302028f60be --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/effects/npmi_effects_test.ts @@ -0,0 +1,168 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed} from '@angular/core/testing'; +import {provideMockActions} from '@ngrx/effects/testing'; +import {Action, Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import {TBHttpClientTestingModule} from '../../../webapp_data_source/tb_http_client_testing'; +import {Subject} from 'rxjs'; + +import {NpmiHttpServerDataSource} from '../data_source/npmi_data_source'; +import {NpmiEffects} from '.'; +import {createNpmiState} from '../testing'; +import {State} from '../../../app_state'; +import { + DataLoadState, + AnnotationDataListing, + MetricListing, + EmbeddingListing, +} from '../store/npmi_types'; +import {getPluginDataLoaded} from '../store/npmi_selectors'; +import * as actions from '../actions'; + +describe('npmi effects', () => { + let dataSource: NpmiHttpServerDataSource; + let effects: NpmiEffects; + let store: MockStore; + let actions$: Subject; + let actualActions: Action[] = []; + + beforeEach(async () => { + actions$ = new Subject(); + actualActions = []; + + await TestBed.configureTestingModule({ + imports: [TBHttpClientTestingModule], + providers: [ + provideMockActions(actions$), + { + provide: NpmiHttpServerDataSource, + }, + NpmiEffects, + provideMockStore({ + initialState: createNpmiState(), + }), + ], + }).compileComponents(); + + store = TestBed.inject>(Store) as MockStore; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + actualActions.push(action); + }); + effects = TestBed.inject(NpmiEffects); + dataSource = TestBed.inject(NpmiHttpServerDataSource); + store.overrideSelector(getPluginDataLoaded, { + state: DataLoadState.NOT_LOADED, + lastLoadedTimeInMs: null, + }); + effects.loadData$.subscribe(); + }); + + describe('load Plugin Data', () => { + let fetchDataSpy: jasmine.Spy; + let fetchDataSubject: Subject<{ + annotationData: AnnotationDataListing; + metrics: MetricListing; + embeddingData: EmbeddingListing; + }>; + + beforeEach(() => { + fetchDataSubject = new Subject(); + fetchDataSpy = spyOn(dataSource, 'fetchData').and.returnValue( + fetchDataSubject + ); + }); + + it('loads Plugin Data on plugin open if data is not loaded', () => { + expect(fetchDataSpy).not.toHaveBeenCalled(); + expect(actualActions).toEqual([]); + + actions$.next(actions.npmiLoaded()); + fetchDataSubject.next({ + annotationData: { + annotation_new_1: [ + { + nPMIValue: 0.1687, + countValue: 1671, + annotation: 'annotation_1', + metric: 'newtest1', + run: 'run_1', + }, + ], + annotation_new_2: [ + { + nPMIValue: 0.68761, + countValue: 189, + annotation: 'annotation_1', + metric: 'newtest1', + run: 'run_1', + }, + ], + }, + metrics: {run_1: ['count@test', 'npmi@test']}, + embeddingData: { + annotation_new_1: [0.0513, 1.3157], + annotation_new_2: [1.0513, 0.3157], + }, + }); + + expect(fetchDataSpy).toHaveBeenCalled(); + expect(actualActions).toEqual([ + actions.npmiPluginDataRequested(), + actions.npmiPluginDataLoaded({ + annotationData: { + annotation_new_1: [ + { + nPMIValue: 0.1687, + countValue: 1671, + annotation: 'annotation_1', + metric: 'newtest1', + run: 'run_1', + }, + ], + annotation_new_2: [ + { + nPMIValue: 0.68761, + countValue: 189, + annotation: 'annotation_1', + metric: 'newtest1', + run: 'run_1', + }, + ], + }, + metrics: {run_1: ['count@test', 'npmi@test']}, + embeddingData: { + annotation_new_1: [0.0513, 1.3157], + annotation_new_2: [1.0513, 0.3157], + }, + }), + ]); + }); + + it('fails to load Metrics and Values on plugin open', () => { + expect(fetchDataSpy).not.toHaveBeenCalled(); + expect(actualActions).toEqual([]); + + actions$.next(actions.npmiLoaded()); + fetchDataSubject.error('loading failed'); + + expect(fetchDataSpy).toHaveBeenCalled(); + expect(actualActions).toEqual([ + actions.npmiPluginDataRequested(), + actions.npmiPluginDataRequestFailed(), + ]); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/npmi_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/npmi_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..7c9dbd466038c780c71fa16ac413d99cb9e3db6e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/npmi_component.ng.html @@ -0,0 +1,24 @@ + +
    + + + + +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/npmi_component.scss b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/npmi_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..4c15a1972c34d02a533917e2dfb85522f1131e4e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/npmi_component.scss @@ -0,0 +1,22 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +:host { + display: flex; + height: 100%; +} + +.npmi-container { + flex: 1 1; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/npmi_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/npmi_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..3910b4df75e4a22e88dbb6b34c24356eba7039f4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/npmi_component.ts @@ -0,0 +1,26 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component, Input} from '@angular/core'; +import {RunId} from '../../core/types'; + +@Component({ + selector: 'npmi-component', + templateUrl: './npmi_component.ng.html', + styleUrls: ['./npmi_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class NpmiComponent { + @Input() runs!: Map; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/npmi_container.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/npmi_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..1fd1dc81da0df04f416b829ec55f29bfd03521f6 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/npmi_container.ts @@ -0,0 +1,36 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, OnInit} from '@angular/core'; +import {select, Store} from '@ngrx/store'; + +import {npmiLoaded} from './actions'; +import {State} from '../../app_state'; +import {getCurrentRouteRunSelection} from '../../selectors'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'npmi', + template: ` `, +}) +export class NpmiContainer implements OnInit { + readonly runs$ = this.store.pipe(select(getCurrentRouteRunSelection)); + + constructor(private readonly store: Store) {} + + ngOnInit(): void { + this.store.dispatch(npmiLoaded()); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/npmi_container_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/npmi_container_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..9e99ea817ebc829a7b975015712f60022ca66a51 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/npmi_container_test.ts @@ -0,0 +1,72 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * Unit tests for the NPMI Container. + */ +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; + +import {Store} from '@ngrx/store'; +import {State} from '../../app_state'; +import {getCurrentRouteRunSelection} from './../../selectors'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {NpmiComponent} from './npmi_component'; +import {NpmiContainer} from './npmi_container'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('Npmi Container', () => { + let store: MockStore; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [NpmiComponent, NpmiContainer], + providers: [provideMockStore({}), NpmiContainer], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + }); + + it('renders npmi component initially with inactive component', () => { + store.overrideSelector(getCurrentRouteRunSelection, new Map()); + const fixture = TestBed.createComponent(NpmiContainer); + fixture.detectChanges(); + + const inactiveElement = fixture.debugElement.query( + By.css('npmi-inactive-view') + ); + expect(inactiveElement).toBeTruthy(); + const mainElement = fixture.debugElement.query(By.css('npmi-main')); + expect(mainElement).toBeNull(); + }); + + it('renders npmi component', () => { + store.overrideSelector( + getCurrentRouteRunSelection, + new Map([['run_1', true]]) + ); + const fixture = TestBed.createComponent(NpmiContainer); + fixture.detectChanges(); + + const inactiveElement = fixture.debugElement.query( + By.css('npmi-inactive-component') + ); + expect(inactiveElement).toBeNull(); + const npmiElement = fixture.debugElement.query(By.css('npmi-main')); + expect(npmiElement).toBeTruthy(); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/npmi_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/npmi_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..c4ac1ca953cb638ba5008afb0192034b9b871dff --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/npmi_module.ts @@ -0,0 +1,47 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {StoreModule} from '@ngrx/store'; +import {EffectsModule} from '@ngrx/effects'; + +import {NpmiComponent} from './npmi_component'; +import {NpmiContainer} from './npmi_container'; + +import {NpmiServerDataSourceModule} from './data_source/npmi_data_source_module'; +import {NpmiEffects} from './effects'; +import {reducers} from './store/npmi_reducers'; +import {NPMI_FEATURE_KEY} from './store/npmi_types'; + +import {InactiveModule} from './views/inactive/inactive_module'; +import {MainModule} from './views/main/main_module'; + +import {PluginRegistryModule} from '../../plugins/plugin_registry_module'; + +@NgModule({ + declarations: [NpmiComponent, NpmiContainer], + imports: [ + CommonModule, + InactiveModule, + MainModule, + NpmiServerDataSourceModule, + StoreModule.forFeature(NPMI_FEATURE_KEY, reducers), + EffectsModule.forFeature([NpmiEffects]), + PluginRegistryModule.forPlugin('npmi', NpmiContainer), + ], + exports: [NpmiContainer], + entryComponents: [NpmiContainer], +}) +export class NpmiModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..74791e78190a07d41a68df83b1892463f3d51605 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/BUILD @@ -0,0 +1,49 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "store", + srcs = [ + "index.ts", + "npmi_reducers.ts", + "npmi_selectors.ts", + ], + deps = [ + ":types", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/data_source", + "//tensorboard/webapp/plugins/npmi/util:metric_type", + "@npm//@ngrx/store", + ], +) + +ng_module( + name = "types", + srcs = [ + "npmi_types.ts", + ], + deps = [ + "//tensorboard/webapp/types", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "store_test_lib", + testonly = True, + srcs = [ + "npmi_reducers_test.ts", + "npmi_selectors_test.ts", + ], + deps = [ + ":store", + ":types", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/data_source", + "//tensorboard/webapp/plugins/npmi/testing", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/index.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..4f6cbd0b178dfbd86a05a8bbb2499174da6fc19a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/index.ts @@ -0,0 +1,18 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export * from './npmi_reducers'; +export * from './npmi_selectors'; +export {NPMI_FEATURE_KEY, NpmiState, State} from './npmi_types'; diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/npmi_reducers.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/npmi_reducers.ts new file mode 100644 index 0000000000000000000000000000000000000000..52c6d792f1004505032f0355694429e0cdfc9170 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/npmi_reducers.ts @@ -0,0 +1,369 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Action, createReducer, on} from '@ngrx/store'; + +import * as actions from '../actions'; +import { + NpmiState, + DataLoadState, + MetricListing, + SortOrder, + ArithmeticElement, + Operator, + ArithmeticKind, +} from './npmi_types'; +import * as metricType from '../util/metric_type'; + +// HACK: These imports are for type inference. +// https://github.com/bazelbuild/rules_nodejs/issues/1013 +/** @typehack */ import * as _typeHackStore from '@ngrx/store/store'; + +const initialState: NpmiState = { + pluginDataLoaded: { + state: DataLoadState.NOT_LOADED, + lastLoadedTimeInMs: null, + }, + annotationData: {}, + runToMetrics: {}, + embeddingData: {}, + selectedAnnotations: [], + flaggedAnnotations: [], + hiddenAnnotations: [], + annotationsRegex: '', + metricsRegex: '', + metricArithmetic: [], + metricFilters: {}, + sort: { + metric: '', + order: SortOrder.DOWN, + }, + pcExpanded: true, + annotationsExpanded: true, + sidebarExpanded: true, + showCounts: true, + showHiddenAnnotations: false, + sidebarWidth: 300, +}; + +const reducer = createReducer( + initialState, + on( + actions.npmiPluginDataRequested, + (state: NpmiState): NpmiState => { + return { + ...state, + pluginDataLoaded: { + ...state.pluginDataLoaded, + state: DataLoadState.LOADING, + }, + }; + } + ), + on( + actions.npmiPluginDataRequestFailed, + (state: NpmiState): NpmiState => { + return { + ...state, + pluginDataLoaded: { + ...state.pluginDataLoaded, + state: DataLoadState.FAILED, + }, + }; + } + ), + on( + actions.npmiPluginDataLoaded, + (state: NpmiState, {annotationData, metrics, embeddingData}): NpmiState => { + const runToMetrics: MetricListing = {}; + for (const key in metrics) { + // Init Metrics Data + runToMetrics[key] = []; + for (const value of metrics[key]) { + if (metricType.metricIsNpmi(value)) { + runToMetrics[key].push(value); + } + } + } + return { + ...state, + runToMetrics: runToMetrics, + annotationData: annotationData, + embeddingData: embeddingData, + pluginDataLoaded: { + state: DataLoadState.LOADED, + lastLoadedTimeInMs: Date.now(), + }, + }; + } + ), + on( + actions.npmiToggleSelectedAnnotations, + (state: NpmiState, {annotations}): NpmiState => { + const combinedSelectedAnnotations = new Set([ + ...state.selectedAnnotations, + ...annotations, + ]); + if ( + combinedSelectedAnnotations.size === state.selectedAnnotations.length + ) { + // If all annotations are already flagged, user wants to remove them + for (const annotation of annotations) { + combinedSelectedAnnotations.delete(annotation); + } + } + return { + ...state, + selectedAnnotations: [...combinedSelectedAnnotations], + }; + } + ), + on( + actions.npmiSetSelectedAnnotations, + (state: NpmiState, {annotations}): NpmiState => { + return { + ...state, + selectedAnnotations: annotations, + }; + } + ), + on( + actions.npmiClearSelectedAnnotations, + (state: NpmiState): NpmiState => { + return { + ...state, + selectedAnnotations: [], + }; + } + ), + on( + actions.npmiToggleAnnotationFlags, + (state: NpmiState, {annotations}): NpmiState => { + const combinedFlaggedAnnotations = new Set([ + ...state.flaggedAnnotations, + ...annotations, + ]); + if (combinedFlaggedAnnotations.size === state.flaggedAnnotations.length) { + // If all annotations are already flagged, user wants to remove them + for (const annotation of annotations) { + combinedFlaggedAnnotations.delete(annotation); + } + } + return { + ...state, + flaggedAnnotations: [...combinedFlaggedAnnotations], + selectedAnnotations: [], + }; + } + ), + on( + actions.npmiToggleAnnotationsHidden, + (state: NpmiState, {annotations}): NpmiState => { + const combinedHiddenAnnotations = new Set([ + ...state.hiddenAnnotations, + ...annotations, + ]); + if (combinedHiddenAnnotations.size === state.hiddenAnnotations.length) { + // If all annotations are already flagged, user wants to remove them + for (const annotation of annotations) { + combinedHiddenAnnotations.delete(annotation); + } + } + return { + ...state, + hiddenAnnotations: [...combinedHiddenAnnotations], + selectedAnnotations: [], + }; + } + ), + on( + actions.npmiAnnotationsRegexChanged, + (state: NpmiState, {regex}): NpmiState => { + return { + ...state, + annotationsRegex: regex, + }; + } + ), + on( + actions.npmiMetricsRegexChanged, + (state: NpmiState, {regex}): NpmiState => { + return { + ...state, + metricsRegex: regex, + }; + } + ), + on( + actions.npmiAddMetricFilter, + (state: NpmiState, {metric}): NpmiState => { + // Only add if not already in active filters + if (state.metricFilters[metric]) { + return state; + } + // Add so that arithmetic is still correct + const newContent: ArithmeticElement[] = []; + if (state.metricArithmetic.length !== 0) { + newContent.push({ + kind: ArithmeticKind.OPERATOR, + operator: Operator.AND, + }); + } + newContent.push({kind: ArithmeticKind.METRIC, metric: metric}); + return { + ...state, + metricArithmetic: [...state.metricArithmetic, ...newContent], + metricFilters: { + ...state.metricFilters, + [metric]: { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + }, + sort: { + metric, + order: SortOrder.DOWN, + }, + }; + } + ), + on( + actions.npmiRemoveMetricFilter, + (state: NpmiState, {metric}): NpmiState => { + if (!state.metricFilters[metric]) { + return state; + } + // Remove the correct elements of the arithmetic as well + let arithmeticIndex = 0; + let startSlice = 0; + let endSlice = 2; + const {[metric]: value, ...map} = state.metricFilters; + for (const index in state.metricArithmetic) { + const element = state.metricArithmetic[index]; + if (element.kind === ArithmeticKind.METRIC) { + if (element.metric === metric) { + arithmeticIndex = parseInt(index); + } + } + } + if (arithmeticIndex !== 0) { + startSlice = arithmeticIndex - 1; + endSlice = arithmeticIndex + 1; + } + return { + ...state, + metricArithmetic: [ + ...state.metricArithmetic.slice(0, startSlice), + ...state.metricArithmetic.slice(endSlice), + ], + metricFilters: map, + }; + } + ), + on( + actions.npmiChangeMetricFilter, + (state: NpmiState, {metric, max, min, includeNaN}): NpmiState => { + if (!state.metricFilters[metric]) { + return state; + } + return { + ...state, + metricFilters: { + ...state.metricFilters, + [metric]: { + max: max, + min: min, + includeNaN: includeNaN, + }, + }, + }; + } + ), + on( + actions.npmiChangeAnnotationSort, + (state: NpmiState, {metric}): NpmiState => { + const newSort = { + metric: metric, + order: SortOrder.DOWN, + }; + if (state.sort.metric === metric && state.sort.order === SortOrder.DOWN) { + newSort.order = SortOrder.UP; + } + return { + ...state, + sort: newSort, + }; + } + ), + on( + actions.npmiToggleParallelCoordinatesExpanded, + (state: NpmiState): NpmiState => { + return { + ...state, + pcExpanded: !state.pcExpanded, + }; + } + ), + on( + actions.npmiToggleAnnotationsExpanded, + (state: NpmiState): NpmiState => { + return { + ...state, + annotationsExpanded: !state.annotationsExpanded, + }; + } + ), + on( + actions.npmiToggleSidebarExpanded, + (state: NpmiState): NpmiState => { + return { + ...state, + sidebarExpanded: !state.sidebarExpanded, + }; + } + ), + + on( + actions.npmiToggleShowCounts, + (state: NpmiState): NpmiState => { + return { + ...state, + showCounts: !state.showCounts, + }; + } + ), + on( + actions.npmiToggleShowHiddenAnnotations, + (state: NpmiState): NpmiState => { + return { + ...state, + showHiddenAnnotations: !state.showHiddenAnnotations, + }; + } + ), + on( + actions.npmiChangeSidebarWidth, + (state: NpmiState, {sidebarWidth}): NpmiState => { + return { + ...state, + sidebarWidth, + }; + } + ) +); + +export function reducers(state: NpmiState, action: Action) { + return reducer(state, action); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/npmi_reducers_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/npmi_reducers_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..611617b4974d8d4d8073bd3a68ad802d9c7d5603 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/npmi_reducers_test.ts @@ -0,0 +1,957 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import * as actions from '../actions'; +import {reducers} from './npmi_reducers'; +import {DataLoadState, Operator, SortOrder, ArithmeticKind} from './npmi_types'; +import {createNpmiState} from '../testing'; + +describe('npmi_reducers', () => { + describe('Data loading', () => { + it('sets pluginDataLoaded to loading on requesting Data', () => { + const state = createNpmiState(); + const nextState = reducers(state, actions.npmiPluginDataRequested()); + expect(nextState.pluginDataLoaded.state).toBe(DataLoadState.LOADING); + expect(nextState.pluginDataLoaded.lastLoadedTimeInMs).toBeNull(); + }); + + it('sets pluginDataLoaded to failed on request failure', () => { + const state = createNpmiState({ + pluginDataLoaded: { + state: DataLoadState.LOADING, + lastLoadedTimeInMs: null, + }, + }); + const nextState = reducers(state, actions.npmiPluginDataRequestFailed()); + expect(nextState.pluginDataLoaded.state).toBe(DataLoadState.FAILED); + expect(nextState.pluginDataLoaded.lastLoadedTimeInMs).toBeNull(); + }); + + it('sets pluginDataLoaded and plugin Data on successful load', () => { + const state = createNpmiState(); + const t0 = Date.now(); + const nextState = reducers( + state, + actions.npmiPluginDataLoaded({ + annotationData: { + annotation_1: [ + { + nPMIValue: 0.16871, + countValue: 16719, + annotation: 'annotation_1', + metric: 'test1', + run: 'run_1', + }, + { + nPMIValue: -0.37206, + countValue: 513767, + annotation: 'annotation_1', + metric: 'test2', + run: 'run_1', + }, + ], + annotation_2: [ + { + nPMIValue: 0.687616, + countValue: 1896, + annotation: 'annotation_1', + metric: 'test1', + run: 'run_1', + }, + { + nPMIValue: 0.68116, + countValue: 638967, + annotation: 'annotation_1', + metric: 'test2', + run: 'run_1', + }, + ], + }, + metrics: { + run_1: [ + 'count@test2', + 'count', + 'nPMI@test1', + 'count@test1', + 'nPMI@test2', + ], + }, + embeddingData: { + annotation_1: [0.1257, -1.3256], + }, + }) + ); + expect(nextState.pluginDataLoaded.state).toBe(DataLoadState.LOADED); + expect( + nextState.pluginDataLoaded.lastLoadedTimeInMs + ).toBeGreaterThanOrEqual(t0); + expect(nextState.annotationData).toEqual({ + annotation_1: [ + { + nPMIValue: 0.16871, + countValue: 16719, + annotation: 'annotation_1', + metric: 'test1', + run: 'run_1', + }, + { + nPMIValue: -0.37206, + countValue: 513767, + annotation: 'annotation_1', + metric: 'test2', + run: 'run_1', + }, + ], + annotation_2: [ + { + nPMIValue: 0.687616, + countValue: 1896, + annotation: 'annotation_1', + metric: 'test1', + run: 'run_1', + }, + { + nPMIValue: 0.68116, + countValue: 638967, + annotation: 'annotation_1', + metric: 'test2', + run: 'run_1', + }, + ], + }); + expect(nextState.runToMetrics).toEqual({ + run_1: ['nPMI@test1', 'nPMI@test2'], + }); + expect(nextState.embeddingData).toEqual({ + annotation_1: [0.1257, -1.3256], + }); + }); + + it('overrides existing annotations on successful loading of annotations', () => { + const state = createNpmiState({ + pluginDataLoaded: { + state: DataLoadState.LOADED, + lastLoadedTimeInMs: 0, + }, + annotationData: { + annotation_1: [ + { + nPMIValue: 0.16871, + countValue: 16719, + annotation: 'annotation_1', + metric: 'test1', + run: 'run_1', + }, + { + nPMIValue: -0.37206, + countValue: 513767, + annotation: 'annotation_1', + metric: 'test2', + run: 'run_1', + }, + ], + annotation_2: [ + { + nPMIValue: 0.687616, + countValue: 1896, + annotation: 'annotation_1', + metric: 'test1', + run: 'run_1', + }, + { + nPMIValue: 0.68116, + countValue: 638967, + annotation: 'annotation_1', + metric: 'test2', + run: 'run_1', + }, + ], + }, + runToMetrics: { + run_1: ['nPMI@test1', 'nPMI@test2'], + }, + embeddingData: { + annotation_1: [0.1257, -1.3256], + }, + }); + const t0 = Date.now(); + const nextState = reducers( + state, + actions.npmiPluginDataLoaded({ + annotationData: { + annotation_new_1: [ + { + nPMIValue: 0.1687, + countValue: 1671, + annotation: 'annotation_1', + metric: 'newtest1', + run: 'run_1', + }, + { + nPMIValue: -0.372, + countValue: 51376, + annotation: 'annotation_1', + metric: 'newtest2', + run: 'run_1', + }, + ], + annotation_new_2: [ + { + nPMIValue: 0.68761, + countValue: 189, + annotation: 'annotation_1', + metric: 'newtest1', + run: 'run_1', + }, + { + nPMIValue: 0.6811, + countValue: 63896, + annotation: 'annotation_1', + metric: 'newtest2', + run: 'run_1', + }, + ], + }, + metrics: { + run_1: [ + 'count', + 'count@newtest1', + 'count@newtest2', + 'nPMI@newtest1', + 'nPMI@newtest2', + ], + }, + embeddingData: { + annotation_1: [1.1257, -0.3256], + }, + }) + ); + expect(nextState.pluginDataLoaded.state).toBe(DataLoadState.LOADED); + expect( + nextState.pluginDataLoaded.lastLoadedTimeInMs + ).toBeGreaterThanOrEqual(t0); + expect(nextState.annotationData).toEqual({ + annotation_new_1: [ + { + nPMIValue: 0.1687, + countValue: 1671, + annotation: 'annotation_1', + metric: 'newtest1', + run: 'run_1', + }, + { + nPMIValue: -0.372, + countValue: 51376, + annotation: 'annotation_1', + metric: 'newtest2', + run: 'run_1', + }, + ], + annotation_new_2: [ + { + nPMIValue: 0.68761, + countValue: 189, + annotation: 'annotation_1', + metric: 'newtest1', + run: 'run_1', + }, + { + nPMIValue: 0.6811, + countValue: 63896, + annotation: 'annotation_1', + metric: 'newtest2', + run: 'run_1', + }, + ], + }); + expect(nextState.runToMetrics).toEqual({ + run_1: ['nPMI@newtest1', 'nPMI@newtest2'], + }); + expect(nextState.embeddingData).toEqual({ + annotation_1: [1.1257, -0.3256], + }); + }); + }); + + describe('Annotation Selection', () => { + it('selects annotations when no annotation is already selected', () => { + const state = createNpmiState(); + const nextState = reducers( + state, + actions.npmiToggleSelectedAnnotations({ + annotations: ['annotation_1', 'annotation_2', 'annotation_3'], + }) + ); + expect(nextState.selectedAnnotations).toEqual([ + 'annotation_1', + 'annotation_2', + 'annotation_3', + ]); + }); + + it('selects annotations with some already selected', () => { + const state = createNpmiState({ + selectedAnnotations: ['annotation_1', 'annotation_3'], + }); + const nextState = reducers( + state, + actions.npmiToggleSelectedAnnotations({ + annotations: ['annotation_1', 'annotation_2', 'annotation_3'], + }) + ); + expect(nextState.selectedAnnotations).toEqual([ + 'annotation_1', + 'annotation_3', + 'annotation_2', + ]); + }); + + it('deselects a set of annotations if they are all selected', () => { + const state = createNpmiState({ + selectedAnnotations: ['annotation_1', 'annotation_2', 'annotation_3'], + }); + const nextState = reducers( + state, + actions.npmiToggleSelectedAnnotations({ + annotations: ['annotation_1', 'annotation_3'], + }) + ); + expect(nextState.selectedAnnotations).toEqual(['annotation_2']); + }); + + it('sets the selected annotations to a specified set', () => { + const state = createNpmiState({ + selectedAnnotations: ['annotation_1', 'annotation_2'], + }); + const nextState = reducers( + state, + actions.npmiSetSelectedAnnotations({ + annotations: ['annotation_1', 'annotation_3'], + }) + ); + expect(nextState.selectedAnnotations).toEqual([ + 'annotation_1', + 'annotation_3', + ]); + }); + + it('clears all selected annotations', () => { + const state = createNpmiState({ + selectedAnnotations: ['annotation_1', 'annotation_2'], + }); + const nextState = reducers(state, actions.npmiClearSelectedAnnotations()); + expect(nextState.selectedAnnotations).toEqual([]); + }); + }); + + describe('Annotation Flagging', () => { + it('flags annotations when no annotation is already flagged', () => { + const state = createNpmiState(); + const nextState = reducers( + state, + actions.npmiToggleAnnotationFlags({ + annotations: ['annotation_1', 'annotation_2', 'annotation_3'], + }) + ); + expect(nextState.flaggedAnnotations).toEqual([ + 'annotation_1', + 'annotation_2', + 'annotation_3', + ]); + }); + + it('flags annotations with some already flagged', () => { + const state = createNpmiState({ + flaggedAnnotations: ['annotation_1', 'annotation_3'], + }); + const nextState = reducers( + state, + actions.npmiToggleAnnotationFlags({ + annotations: ['annotation_1', 'annotation_2', 'annotation_3'], + }) + ); + expect(nextState.flaggedAnnotations).toEqual([ + 'annotation_1', + 'annotation_3', + 'annotation_2', + ]); + }); + + it('unflags a set of annotations if they are all flagged', () => { + const state = createNpmiState({ + flaggedAnnotations: ['annotation_1', 'annotation_2', 'annotation_3'], + }); + const nextState = reducers( + state, + actions.npmiToggleAnnotationFlags({ + annotations: ['annotation_1', 'annotation_3'], + }) + ); + expect(nextState.flaggedAnnotations).toEqual(['annotation_2']); + }); + }); + + describe('Hiding Annotations', () => { + it('hides annotations with no annotation already hidden', () => { + const state = createNpmiState(); + const nextState = reducers( + state, + actions.npmiToggleAnnotationsHidden({ + annotations: ['annotation_1', 'annotation_2', 'annotation_3'], + }) + ); + expect(nextState.hiddenAnnotations).toEqual([ + 'annotation_1', + 'annotation_2', + 'annotation_3', + ]); + }); + + it('hides annotations with some already hidden', () => { + const state = createNpmiState({ + hiddenAnnotations: ['annotation_1', 'annotation_3'], + }); + const nextState = reducers( + state, + actions.npmiToggleAnnotationsHidden({ + annotations: ['annotation_1', 'annotation_2', 'annotation_3'], + }) + ); + expect(nextState.hiddenAnnotations).toEqual([ + 'annotation_1', + 'annotation_3', + 'annotation_2', + ]); + }); + + it('unhides a set of annotations if they are all hidden', () => { + const state = createNpmiState({ + hiddenAnnotations: ['annotation_1', 'annotation_2', 'annotation_3'], + }); + const nextState = reducers( + state, + actions.npmiToggleAnnotationsHidden({ + annotations: ['annotation_1', 'annotation_3'], + }) + ); + expect(nextState.hiddenAnnotations).toEqual(['annotation_2']); + }); + }); + + describe('Regex Filter Changes', () => { + it('changes the annotation regex', () => { + const state = createNpmiState({annotationsRegex: 'test'}); + const nextState = reducers( + state, + actions.npmiAnnotationsRegexChanged({regex: 'new_regex'}) + ); + expect(nextState.annotationsRegex).toBe('new_regex'); + }); + + it('changes the metrics regex', () => { + const state = createNpmiState({metricsRegex: 'test'}); + const nextState = reducers( + state, + actions.npmiMetricsRegexChanged({regex: 'new_regex'}) + ); + expect(nextState.metricsRegex).toBe('new_regex'); + }); + }); + + describe('Metric Filters', () => { + describe('Adding Filters', () => { + it('adds a new metric filter with none present, and adjusts sorting', () => { + const state = createNpmiState(); + const nextState = reducers( + state, + actions.npmiAddMetricFilter({metric: 'nPMI@test'}) + ); + expect(nextState.metricFilters).toEqual({ + 'nPMI@test': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + }); + expect(nextState.metricArithmetic).toEqual([ + {kind: ArithmeticKind.METRIC, metric: 'nPMI@test'}, + ]); + expect(nextState.sort).toEqual({ + metric: 'nPMI@test', + order: SortOrder.DOWN, + }); + }); + + it('adds a new metric filter after the first one', () => { + const state = createNpmiState({ + metricFilters: { + 'nPMI@test': { + max: 0.3, + min: -1.0, + includeNaN: true, + }, + }, + metricArithmetic: [ + {kind: ArithmeticKind.METRIC, metric: 'nPMI@test'}, + ], + }); + const nextState = reducers( + state, + actions.npmiAddMetricFilter({metric: 'nPMI@second'}) + ); + expect(nextState.metricFilters).toEqual({ + 'nPMI@test': { + max: 0.3, + min: -1.0, + includeNaN: true, + }, + 'nPMI@second': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + }); + expect(nextState.metricArithmetic).toEqual([ + {kind: ArithmeticKind.METRIC, metric: 'nPMI@test'}, + {kind: ArithmeticKind.OPERATOR, operator: Operator.AND}, + {kind: ArithmeticKind.METRIC, metric: 'nPMI@second'}, + ]); + }); + + it('does not add a new metric filter if it is already active', () => { + const state = createNpmiState({ + metricFilters: { + 'nPMI@test': { + max: 0.3, + min: -1.0, + includeNaN: true, + }, + }, + metricArithmetic: [ + {kind: ArithmeticKind.METRIC, metric: 'nPMI@test'}, + ], + }); + const nextState = reducers( + state, + actions.npmiAddMetricFilter({metric: 'nPMI@test'}) + ); + expect(nextState.metricFilters).toEqual({ + 'nPMI@test': { + max: 0.3, + min: -1.0, + includeNaN: true, + }, + }); + expect(nextState.metricArithmetic).toEqual([ + {kind: ArithmeticKind.METRIC, metric: 'nPMI@test'}, + ]); + }); + }); + + describe('Removing Filters', () => { + it('removes the last remaining metric filter', () => { + const state = createNpmiState({ + metricFilters: { + 'nPMI@test': { + max: 0.3, + min: -1.0, + includeNaN: true, + }, + }, + metricArithmetic: [ + {kind: ArithmeticKind.METRIC, metric: 'nPMI@test'}, + ], + }); + const nextState = reducers( + state, + actions.npmiRemoveMetricFilter({metric: 'nPMI@test'}) + ); + expect(nextState.metricFilters).toEqual({}); + expect(nextState.metricArithmetic).toEqual([]); + }); + + it('removes the first metric filter of more', () => { + const state = createNpmiState({ + metricFilters: { + 'nPMI@test': { + max: 0.3, + min: -1.0, + includeNaN: true, + }, + 'nPMI@second': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + 'nPMI@third': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + }, + metricArithmetic: [ + {kind: ArithmeticKind.METRIC, metric: 'nPMI@test'}, + {kind: ArithmeticKind.OPERATOR, operator: Operator.AND}, + {kind: ArithmeticKind.METRIC, metric: 'nPMI@second'}, + {kind: ArithmeticKind.OPERATOR, operator: Operator.AND}, + {kind: ArithmeticKind.METRIC, metric: 'nPMI@third'}, + ], + }); + const nextState = reducers( + state, + actions.npmiRemoveMetricFilter({metric: 'nPMI@test'}) + ); + expect(nextState.metricFilters).toEqual({ + 'nPMI@second': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + 'nPMI@third': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + }); + expect(nextState.metricArithmetic).toEqual([ + {kind: ArithmeticKind.METRIC, metric: 'nPMI@second'}, + {kind: ArithmeticKind.OPERATOR, operator: Operator.AND}, + {kind: ArithmeticKind.METRIC, metric: 'nPMI@third'}, + ]); + }); + + it('removes a metric filter in the middle', () => { + const state = createNpmiState({ + metricFilters: { + 'nPMI@test': { + max: 0.3, + min: -1.0, + includeNaN: true, + }, + 'nPMI@second': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + 'nPMI@third': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + }, + metricArithmetic: [ + {kind: ArithmeticKind.METRIC, metric: 'nPMI@test'}, + {kind: ArithmeticKind.OPERATOR, operator: Operator.AND}, + {kind: ArithmeticKind.METRIC, metric: 'nPMI@second'}, + {kind: ArithmeticKind.OPERATOR, operator: Operator.AND}, + {kind: ArithmeticKind.METRIC, metric: 'nPMI@third'}, + ], + }); + const nextState = reducers( + state, + actions.npmiRemoveMetricFilter({metric: 'nPMI@second'}) + ); + expect(nextState.metricFilters).toEqual({ + 'nPMI@test': { + max: 0.3, + min: -1.0, + includeNaN: true, + }, + 'nPMI@third': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + }); + expect(nextState.metricArithmetic).toEqual([ + {kind: ArithmeticKind.METRIC, metric: 'nPMI@test'}, + {kind: ArithmeticKind.OPERATOR, operator: Operator.AND}, + {kind: ArithmeticKind.METRIC, metric: 'nPMI@third'}, + ]); + }); + + it('does not remove anything if the filter is not active', () => { + const state = createNpmiState({ + metricFilters: { + 'nPMI@test': { + max: 0.3, + min: -1.0, + includeNaN: true, + }, + 'nPMI@second': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + 'nPMI@third': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + }, + metricArithmetic: [ + {kind: ArithmeticKind.METRIC, metric: 'nPMI@test'}, + {kind: ArithmeticKind.OPERATOR, operator: Operator.AND}, + {kind: ArithmeticKind.METRIC, metric: 'nPMI@second'}, + {kind: ArithmeticKind.OPERATOR, operator: Operator.AND}, + {kind: ArithmeticKind.METRIC, metric: 'nPMI@third'}, + ], + }); + const nextState = reducers( + state, + actions.npmiRemoveMetricFilter({metric: 'nPMI@inactive'}) + ); + expect(nextState.metricFilters).toEqual({ + 'nPMI@test': { + max: 0.3, + min: -1.0, + includeNaN: true, + }, + 'nPMI@second': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + 'nPMI@third': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + }); + expect(nextState.metricArithmetic).toEqual([ + {kind: ArithmeticKind.METRIC, metric: 'nPMI@test'}, + {kind: ArithmeticKind.OPERATOR, operator: Operator.AND}, + {kind: ArithmeticKind.METRIC, metric: 'nPMI@second'}, + {kind: ArithmeticKind.OPERATOR, operator: Operator.AND}, + {kind: ArithmeticKind.METRIC, metric: 'nPMI@third'}, + ]); + }); + }); + + describe('Change a Filter', () => { + it('changes a metric filter', () => { + const state = createNpmiState({ + metricFilters: { + 'nPMI@test': { + max: 0.3, + min: -1.0, + includeNaN: true, + }, + 'nPMI@second': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + 'nPMI@third': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + }, + }); + const nextState = reducers( + state, + actions.npmiChangeMetricFilter({ + metric: 'nPMI@third', + max: 0.5, + min: -0.5, + includeNaN: false, + }) + ); + expect(nextState.metricFilters).toEqual({ + 'nPMI@test': { + max: 0.3, + min: -1.0, + includeNaN: true, + }, + 'nPMI@second': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + 'nPMI@third': { + max: 0.5, + min: -0.5, + includeNaN: false, + }, + }); + }); + + it('does not change anything if not in metric filters', () => { + const state = createNpmiState({ + metricFilters: { + 'nPMI@test': { + max: 0.3, + min: -1.0, + includeNaN: true, + }, + 'nPMI@second': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + 'nPMI@third': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + }, + }); + const nextState = reducers( + state, + actions.npmiChangeMetricFilter({ + metric: 'nPMI@inactive', + max: 0.5, + min: -0.5, + includeNaN: false, + }) + ); + expect(nextState.metricFilters).toEqual({ + 'nPMI@test': { + max: 0.3, + min: -1.0, + includeNaN: true, + }, + 'nPMI@second': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + 'nPMI@third': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + }); + }); + }); + }); + + describe('Annotation Sort', () => { + it('changes the metric by which to sort', () => { + const state = createNpmiState(); + const nextState = reducers( + state, + actions.npmiChangeAnnotationSort({metric: 'test'}) + ); + expect(nextState.sort).toEqual({ + metric: 'test', + order: SortOrder.DOWN, + }); + }); + + it('changes the sort from up to down', () => { + const state = createNpmiState({ + sort: {metric: 'test', order: SortOrder.DOWN}, + }); + const nextState = reducers( + state, + actions.npmiChangeAnnotationSort({metric: 'test'}) + ); + expect(nextState.sort).toEqual({ + metric: 'test', + order: SortOrder.UP, + }); + }); + }); + + describe('UI Preferences', () => { + it('hides the parallel coordinates view', () => { + const state = createNpmiState(); + const nextState = reducers( + state, + actions.npmiToggleParallelCoordinatesExpanded() + ); + expect(nextState.pcExpanded).toBeFalse(); + }); + + it('shows the hidden parallel coordinates view', () => { + const state = createNpmiState({pcExpanded: false}); + const nextState = reducers( + state, + actions.npmiToggleParallelCoordinatesExpanded() + ); + expect(nextState.pcExpanded).toBeTrue(); + }); + + it('hides the annotations list', () => { + const state = createNpmiState(); + const nextState = reducers( + state, + actions.npmiToggleAnnotationsExpanded() + ); + expect(nextState.annotationsExpanded).toBeFalse(); + }); + + it('shows the hidden annotations list', () => { + const state = createNpmiState({annotationsExpanded: false}); + const nextState = reducers( + state, + actions.npmiToggleAnnotationsExpanded() + ); + expect(nextState.annotationsExpanded).toBeTrue(); + }); + + it('hides the sidebar', () => { + const state = createNpmiState(); + const nextState = reducers(state, actions.npmiToggleSidebarExpanded()); + expect(nextState.sidebarExpanded).toBeFalse(); + }); + + it('shows the hidden sidebar', () => { + const state = createNpmiState({sidebarExpanded: false}); + const nextState = reducers(state, actions.npmiToggleSidebarExpanded()); + expect(nextState.sidebarExpanded).toBeTrue(); + }); + + it('hides the count values', () => { + const state = createNpmiState(); + const nextState = reducers(state, actions.npmiToggleShowCounts()); + expect(nextState.showCounts).toBeFalse(); + }); + + it('shows the hidden count values', () => { + const state = createNpmiState({showCounts: false}); + const nextState = reducers(state, actions.npmiToggleShowCounts()); + expect(nextState.showCounts).toBeTrue(); + }); + + it('shows the hidden annotations', () => { + const state = createNpmiState(); + const nextState = reducers( + state, + actions.npmiToggleShowHiddenAnnotations() + ); + expect(nextState.showHiddenAnnotations).toBeTrue(); + }); + + it('hides the display of hidden annotations', () => { + const state = createNpmiState({showHiddenAnnotations: true}); + const nextState = reducers( + state, + actions.npmiToggleShowHiddenAnnotations() + ); + expect(nextState.showHiddenAnnotations).toBeFalse(); + }); + + it('changes the sidebar width', () => { + const state = createNpmiState(); + const nextState = reducers( + state, + actions.npmiChangeSidebarWidth({sidebarWidth: 500}) + ); + expect(nextState.sidebarWidth).toBe(500); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/npmi_selectors.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/npmi_selectors.ts new file mode 100644 index 0000000000000000000000000000000000000000..713cc2a3597321f11f93128d3539583fb88b53dc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/npmi_selectors.ts @@ -0,0 +1,154 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {createSelector, createFeatureSelector} from '@ngrx/store'; +import { + NPMI_FEATURE_KEY, + NpmiState, + LoadState, + AnnotationDataListing, + MetricListing, + State, + ArithmeticElement, + MetricFilterListing, + AnnotationSort, +} from './npmi_types'; + +// HACK: These imports are for type inference. +// https://github.com/bazelbuild/rules_nodejs/issues/1013 +/** @typehack */ import * as _typeHackSelector from '@ngrx/store/src/selector'; +/** @typehack */ import * as _typeHackStore from '@ngrx/store/store'; + +const selectNpmiState = createFeatureSelector( + NPMI_FEATURE_KEY +); + +export const getPluginDataLoaded = createSelector( + selectNpmiState, + (state: NpmiState): LoadState => { + return state.pluginDataLoaded; + } +); + +export const getAnnotationData = createSelector( + selectNpmiState, + (state: NpmiState): AnnotationDataListing => { + return state.annotationData; + } +); + +export const getRunToMetrics = createSelector( + selectNpmiState, + (state: NpmiState): MetricListing => { + return state.runToMetrics; + } +); + +export const getSelectedAnnotations = createSelector( + selectNpmiState, + (state: NpmiState): string[] => { + return state.selectedAnnotations; + } +); + +export const getFlaggedAnnotations = createSelector( + selectNpmiState, + (state: NpmiState): string[] => { + return state.flaggedAnnotations; + } +); + +export const getHiddenAnnotations = createSelector( + selectNpmiState, + (state: NpmiState): string[] => { + return state.hiddenAnnotations; + } +); + +export const getAnnotationsRegex = createSelector( + selectNpmiState, + (state: NpmiState): string => { + return state.annotationsRegex; + } +); + +export const getMetricsRegex = createSelector( + selectNpmiState, + (state: NpmiState): string => { + return state.metricsRegex; + } +); + +export const getMetricArithmetic = createSelector( + selectNpmiState, + (state: NpmiState): ArithmeticElement[] => { + return state.metricArithmetic; + } +); + +export const getMetricFilters = createSelector( + selectNpmiState, + (state: NpmiState): MetricFilterListing => { + return state.metricFilters; + } +); + +export const getAnnotationSort = createSelector( + selectNpmiState, + (state: NpmiState): AnnotationSort => { + return state.sort; + } +); + +export const getPCExpanded = createSelector( + selectNpmiState, + (state: NpmiState): boolean => { + return state.pcExpanded; + } +); + +export const getAnnotationsExpanded = createSelector( + selectNpmiState, + (state: NpmiState): boolean => { + return state.annotationsExpanded; + } +); + +export const getSidebarExpanded = createSelector( + selectNpmiState, + (state: NpmiState): boolean => { + return state.sidebarExpanded; + } +); + +export const getShowCounts = createSelector( + selectNpmiState, + (state: NpmiState): boolean => { + return state.showCounts; + } +); + +export const getShowHiddenAnnotations = createSelector( + selectNpmiState, + (state: NpmiState): boolean => { + return state.showHiddenAnnotations; + } +); + +export const getSidebarWidth = createSelector( + selectNpmiState, + (state: NpmiState): number => { + return state.sidebarWidth; + } +); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/npmi_selectors_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/npmi_selectors_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..fe93e4d74ad7759cc069216030947158009683a2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/npmi_selectors_test.ts @@ -0,0 +1,403 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + getPluginDataLoaded, + getAnnotationData, + getRunToMetrics, + getSelectedAnnotations, + getFlaggedAnnotations, + getHiddenAnnotations, + getAnnotationsRegex, + getMetricsRegex, + getMetricArithmetic, + getMetricFilters, + getAnnotationSort, + getPCExpanded, + getAnnotationsExpanded, + getShowCounts, + getShowHiddenAnnotations, + getSidebarWidth, + getSidebarExpanded, +} from './npmi_selectors'; +import {DataLoadState, Operator, SortOrder, ArithmeticKind} from './npmi_types'; +import {createNpmiState, createState} from '../testing'; + +describe('npmi selectors', () => { + describe('getPluginDataLoadState', () => { + it('returns the correct NOT_LOADED state', () => { + const state = createState(createNpmiState()); + const annotationsLoaded = getPluginDataLoaded(state); + expect(annotationsLoaded.state).toBe(DataLoadState.NOT_LOADED); + }); + + it('returns the correct LOADING state', () => { + const state = createState( + createNpmiState({ + pluginDataLoaded: { + state: DataLoadState.LOADING, + lastLoadedTimeInMs: null, + }, + }) + ); + const annotationsLoaded = getPluginDataLoaded(state); + expect(annotationsLoaded.state).toBe(DataLoadState.LOADING); + expect(annotationsLoaded.lastLoadedTimeInMs).toBe(null); + }); + + it('returns the correct LOADED state', () => { + const state = createState( + createNpmiState({ + pluginDataLoaded: { + state: DataLoadState.LOADED, + lastLoadedTimeInMs: 1234, + }, + }) + ); + const loaded = getPluginDataLoaded(state); + expect(loaded.state).toBe(DataLoadState.LOADED); + expect(loaded.lastLoadedTimeInMs).toBe(1234); + }); + }); + + describe('getAnnotationData', () => { + it('returns the correct empty object', () => { + const state = createState(createNpmiState()); + expect(getAnnotationData(state)).toEqual({}); + }); + + it('returns the correct data', () => { + const state = createState( + createNpmiState({ + annotationData: { + annotation_new_1: [ + { + nPMIValue: 0.1687, + countValue: 1671, + annotation: 'annotation_1', + metric: 'newtest1', + run: 'run_1', + }, + ], + annotation_new_2: [ + { + nPMIValue: 0.68761, + countValue: 189, + annotation: 'annotation_1', + metric: 'newtest1', + run: 'run_1', + }, + ], + }, + }) + ); + expect(getAnnotationData(state)).toEqual({ + annotation_new_1: [ + { + nPMIValue: 0.1687, + countValue: 1671, + annotation: 'annotation_1', + metric: 'newtest1', + run: 'run_1', + }, + ], + annotation_new_2: [ + { + nPMIValue: 0.68761, + countValue: 189, + annotation: 'annotation_1', + metric: 'newtest1', + run: 'run_1', + }, + ], + }); + }); + }); + + describe('getRunToMetrics', () => { + it('returns the correct empty object', () => { + const state = createState(createNpmiState()); + expect(getRunToMetrics(state)).toEqual({}); + }); + + it('returns the correct data', () => { + const state = createState( + createNpmiState({ + runToMetrics: { + run_1: ['npmi_metric_1', 'npmi_metric_2'], + }, + }) + ); + expect(getRunToMetrics(state)).toEqual({ + run_1: ['npmi_metric_1', 'npmi_metric_2'], + }); + }); + }); + + describe('getSelectedAnnotations', () => { + it('returns correct empty array', () => { + const state = createState(createNpmiState()); + expect(getSelectedAnnotations(state)).toEqual([]); + }); + + it('returns correct state', () => { + const state = createState( + createNpmiState({ + selectedAnnotations: ['annotation_1', 'annotation_2'], + }) + ); + expect(getSelectedAnnotations(state)).toEqual([ + 'annotation_1', + 'annotation_2', + ]); + }); + }); + + describe('getFlaggedAnnotations', () => { + it('returns correct empty array', () => { + const state = createState(createNpmiState()); + expect(getFlaggedAnnotations(state)).toEqual([]); + }); + + it('returns correct state', () => { + const state = createState( + createNpmiState({ + flaggedAnnotations: ['annotation_1', 'annotation_2'], + }) + ); + expect(getFlaggedAnnotations(state)).toEqual([ + 'annotation_1', + 'annotation_2', + ]); + }); + }); + + describe('getHiddenAnnotations', () => { + it('returns correct empty array', () => { + const state = createState(createNpmiState()); + expect(getHiddenAnnotations(state)).toEqual([]); + }); + + it('returns correct state', () => { + const state = createState( + createNpmiState({ + hiddenAnnotations: ['annotation_1', 'annotation_2'], + }) + ); + expect(getHiddenAnnotations(state)).toEqual([ + 'annotation_1', + 'annotation_2', + ]); + }); + }); + + describe('getAnnotationsRegex', () => { + it('returns correct empty string', () => { + const state = createState(createNpmiState()); + expect(getAnnotationsRegex(state)).toEqual(''); + }); + + it('returns correct value', () => { + const state = createState( + createNpmiState({ + annotationsRegex: 'test', + }) + ); + expect(getAnnotationsRegex(state)).toBe('test'); + }); + }); + + describe('getMetricsRegex', () => { + it('returns correct empty string', () => { + const state = createState(createNpmiState()); + expect(getMetricsRegex(state)).toEqual(''); + }); + + it('returns correct value', () => { + const state = createState( + createNpmiState({ + metricsRegex: 'test', + }) + ); + expect(getMetricsRegex(state)).toBe('test'); + }); + }); + + describe('getMetricArithmetic', () => { + it('return correct empty array', () => { + const state = createState(createNpmiState()); + expect(getMetricArithmetic(state)).toEqual([]); + }); + + it('return correct arithmetic', () => { + const state = createState( + createNpmiState({ + metricArithmetic: [ + {kind: ArithmeticKind.METRIC, metric: 'test'}, + {kind: ArithmeticKind.OPERATOR, operator: Operator.AND}, + {kind: ArithmeticKind.METRIC, metric: 'test2'}, + ], + }) + ); + expect(getMetricArithmetic(state)).toEqual([ + {kind: ArithmeticKind.METRIC, metric: 'test'}, + {kind: ArithmeticKind.OPERATOR, operator: Operator.AND}, + {kind: ArithmeticKind.METRIC, metric: 'test2'}, + ]); + }); + }); + + describe('getMetricFilters', () => { + it('returns correct empty object', () => { + const state = createState(createNpmiState()); + expect(getMetricFilters(state)).toEqual({}); + }); + + it('returns correct filters objext', () => { + const state = createState( + createNpmiState({ + metricFilters: { + test: {max: 1.0, min: -1.0, includeNaN: true}, + test2: {max: 1.0, min: 0, includeNaN: false}, + }, + }) + ); + expect(getMetricFilters(state)).toEqual({ + test: {max: 1.0, min: -1.0, includeNaN: true}, + test2: {max: 1.0, min: 0, includeNaN: false}, + }); + }); + }); + + describe('getAnnotationSort', () => { + it('returns correct inital object', () => { + const state = createState(createNpmiState()); + expect(getAnnotationSort(state)).toEqual({ + metric: '', + order: SortOrder.DOWN, + }); + }); + + it('returns correct state', () => { + const state = createState( + createNpmiState({ + sort: { + metric: 'test', + order: SortOrder.UP, + }, + }) + ); + expect(getAnnotationSort(state)).toEqual({ + metric: 'test', + order: SortOrder.UP, + }); + }); + }); + + describe('getPCExpanded', () => { + it('returns correct true state', () => { + const state = createState(createNpmiState()); + expect(getPCExpanded(state)).toBeTrue(); + }); + + it('returns correct state', () => { + const state = createState( + createNpmiState({ + pcExpanded: false, + }) + ); + expect(getPCExpanded(state)).toBeFalse(); + }); + }); + + describe('getAnnotationsExpanded', () => { + it('returns correct true state', () => { + const state = createState(createNpmiState()); + expect(getAnnotationsExpanded(state)).toBeTrue(); + }); + + it('returns correct state', () => { + const state = createState( + createNpmiState({ + annotationsExpanded: false, + }) + ); + expect(getAnnotationsExpanded(state)).toBeFalse(); + }); + }); + + describe('getSidebarExpanded', () => { + it('returns correct true state', () => { + const state = createState(createNpmiState()); + expect(getSidebarExpanded(state)).toBeTrue(); + }); + + it('returns correct state', () => { + const state = createState( + createNpmiState({ + sidebarExpanded: false, + }) + ); + expect(getSidebarExpanded(state)).toBeFalse(); + }); + }); + + describe('getShowCounts', () => { + it('returns correct true state', () => { + const state = createState(createNpmiState()); + expect(getShowCounts(state)).toBeTrue(); + }); + + it('returns correct state', () => { + const state = createState( + createNpmiState({ + showCounts: false, + }) + ); + expect(getShowCounts(state)).toBeFalse(); + }); + }); + + describe('getShowHiddenAnnotations', () => { + it('returns correct false state', () => { + const state = createState(createNpmiState()); + expect(getShowHiddenAnnotations(state)).toBeFalse(); + }); + + it('returns correct state', () => { + const state = createState( + createNpmiState({ + showHiddenAnnotations: true, + }) + ); + expect(getShowHiddenAnnotations(state)).toBeTrue(); + }); + }); + + describe('getSidebarWidth', () => { + it('returns correct initial state', () => { + const state = createState(createNpmiState()); + expect(getSidebarWidth(state)).toBe(300); + }); + + it('returns correct state', () => { + const state = createState( + createNpmiState({ + sidebarWidth: 100, + }) + ); + expect(getSidebarWidth(state)).toBe(100); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/npmi_types.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/npmi_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..91648b630e3082bc784cb18edabbea60e25c244a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/store/npmi_types.ts @@ -0,0 +1,101 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {DataLoadState, LoadState} from '../../../types/data'; + +export {DataLoadState, LoadState}; + +export const NPMI_FEATURE_KEY = 'npmi'; + +type Metric = string; +export type Annotation = string; +export type AnnotationDataListing = Record; +export type ArithmeticElement = + | {kind: ArithmeticKind.METRIC; metric: string} + | {kind: ArithmeticKind.OPERATOR; operator: Operator}; +export enum Operator { + AND, +} +export enum ArithmeticKind { + METRIC, + OPERATOR, +} + +export interface ValueData { + nPMIValue: number | null; + countValue: number | null; + annotation: Annotation; + metric: Metric; + run: string; +} + +export interface MetricListing { + [runId: string]: Metric[]; +} + +export interface MetricFilterListing { + [metric: string]: MetricFilter; +} + +export interface EmbeddingListing { + [annotation: string]: number[]; +} + +export interface MetricFilter { + max: number; + min: number; + includeNaN: boolean; +} + +export interface AnnotationSort { + metric: string; + order: SortOrder; +} + +export enum SortOrder { + DOWN, + UP, +} + +export interface NpmiState { + // coming from backend + pluginDataLoaded: LoadState; + annotationData: AnnotationDataListing; + runToMetrics: MetricListing; + embeddingData: EmbeddingListing; + + // based on user interaction + selectedAnnotations: Annotation[]; + flaggedAnnotations: Annotation[]; + hiddenAnnotations: Annotation[]; + annotationsRegex: string; + metricsRegex: string; + metricArithmetic: ArithmeticElement[]; + metricFilters: MetricFilterListing; + sort: AnnotationSort; + pcExpanded: boolean; + annotationsExpanded: boolean; + sidebarExpanded: boolean; + showCounts: boolean; + showHiddenAnnotations: boolean; + sidebarWidth: number; +} + +export interface State { + [NPMI_FEATURE_KEY]?: NpmiState; +} + +export interface TfColorScale extends HTMLElement { + runsColorScale?: (runName: string) => string; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/testing/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/testing/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..375c879e44f8e3c5fc6b33635ca58020e660b645 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/testing/BUILD @@ -0,0 +1,15 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +tf_ts_library( + name = "testing", + testonly = True, + srcs = ["index.ts"], + deps = [ + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "@npm//@angular/core", + "@npm//@ngrx/store", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/testing/index.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/testing/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..ada609d0b280b7520412931bceb39f5b04128e54 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/testing/index.ts @@ -0,0 +1,156 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + NpmiState, + DataLoadState, + NPMI_FEATURE_KEY, + State, + SortOrder, +} from '../store/npmi_types'; + +export function createNpmiState(override?: Partial): NpmiState { + return { + pluginDataLoaded: { + state: DataLoadState.NOT_LOADED, + lastLoadedTimeInMs: null, + }, + annotationData: {}, + runToMetrics: {}, + embeddingData: {}, + selectedAnnotations: [], + flaggedAnnotations: [], + hiddenAnnotations: [], + annotationsRegex: '', + metricsRegex: '', + metricArithmetic: [], + metricFilters: {}, + sort: { + metric: '', + order: SortOrder.DOWN, + }, + pcExpanded: true, + annotationsExpanded: true, + sidebarExpanded: true, + showCounts: true, + showHiddenAnnotations: false, + sidebarWidth: 300, + ...override, + }; +} + +export function createState(npmiState: NpmiState): State { + return {[NPMI_FEATURE_KEY]: npmiState}; +} + +export function appStateFromNpmiState(metricsState?: NpmiState): State { + return { + [NPMI_FEATURE_KEY]: metricsState || createNpmiState(), + }; +} + +export function buildSampleAnnotationData() { + return { + annotation_1: [ + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_1', + nPMIValue: 0.5178, + countValue: 100, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_1', + nPMIValue: 0.815, + countValue: 100, + }, + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_2', + nPMIValue: 0.02157, + countValue: 101, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_2', + nPMIValue: -0.02157, + countValue: 101, + }, + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_3', + nPMIValue: -0.31, + countValue: 53, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_3', + nPMIValue: -1.0, + countValue: 53, + }, + ], + annotation_2: [ + { + annotation: 'annotation_2', + metric: 'test', + run: 'run_1', + nPMIValue: null, + countValue: 572, + }, + { + annotation: 'annotation_2', + metric: 'other', + run: 'run_1', + nPMIValue: -1.0, + countValue: 53, + }, + ], + annotation_3: [ + { + annotation: 'annotation_3', + metric: 'test', + run: 'run_1', + nPMIValue: 0.757, + countValue: 572, + }, + { + annotation: 'annotation3', + metric: 'other', + run: 'run_1', + nPMIValue: 0.05, + countValue: 53, + }, + { + annotation: 'annotation_3', + metric: 'test', + run: 'run_2', + nPMIValue: -0.157, + countValue: 572, + }, + { + annotation: 'annotation3', + metric: 'other', + run: 'run_2', + nPMIValue: -0.05, + countValue: 53, + }, + ], + }; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..fca9954802c2f6b58b3d9939c9fc65e8dc75f8e0 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/BUILD @@ -0,0 +1,178 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "metric_type", + srcs = [ + "metric_type.ts", + ], +) + +tf_ts_library( + name = "metric_type_test_lib", + testonly = True, + srcs = ["metric_type_test.ts"], + deps = [ + ":metric_type", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/core/testing", + "@npm//@angular/common", + "@npm//@angular/compiler", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) + +ng_module( + name = "filter_annotations", + srcs = [ + "filter_annotations.ts", + ], + deps = [ + ":metric_type", + "//tensorboard/webapp/plugins/npmi/store:types", + ], +) + +tf_ts_library( + name = "filter_annotations_test_lib", + testonly = True, + srcs = ["filter_annotations_test.ts"], + deps = [ + ":filter_annotations", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/testing", + "@npm//@angular/common", + "@npm//@angular/compiler", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) + +ng_module( + name = "violin_data", + srcs = [ + "violin_data.ts", + ], + deps = [ + ":metric_type", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/third_party:d3", + ], +) + +tf_ts_library( + name = "violin_data_test_lib", + testonly = True, + srcs = ["violin_data_test.ts"], + deps = [ + ":violin_data", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/testing", + "@npm//@angular/common", + "@npm//@angular/compiler", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) + +ng_module( + name = "sort_annotations", + srcs = [ + "sort_annotations.ts", + ], + deps = [ + ":metric_type", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/third_party:d3", + ], +) + +tf_ts_library( + name = "sort_annotations_test_lib", + testonly = True, + srcs = ["sort_annotations_test.ts"], + deps = [ + ":sort_annotations", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/testing", + "@npm//@angular/common", + "@npm//@angular/compiler", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) + +ng_module( + name = "coordinate_data", + srcs = [ + "coordinate_data.ts", + ], + deps = [ + "//tensorboard/webapp/plugins/npmi/store:types", + ], +) + +tf_ts_library( + name = "coordinate_data_test_lib", + testonly = True, + srcs = ["coordinate_data_test.ts"], + deps = [ + ":coordinate_data", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/testing", + "@npm//@angular/common", + "@npm//@angular/compiler", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) + +ng_module( + name = "csv_result", + srcs = [ + "csv_result.ts", + ], + deps = [ + ":metric_type", + "//tensorboard/webapp/plugins/npmi/store:types", + ], +) + +tf_ts_library( + name = "csv_result_test_lib", + testonly = True, + srcs = ["csv_result_test.ts"], + deps = [ + ":csv_result", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/plugins/npmi/store:types", + "@npm//@angular/common", + "@npm//@angular/compiler", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/coordinate_data.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/coordinate_data.ts new file mode 100644 index 0000000000000000000000000000000000000000..1e28ea230ba1ac7aee050f3c71a8720e24583e44 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/coordinate_data.ts @@ -0,0 +1,73 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ValueData, AnnotationDataListing} from '../store/npmi_types'; + +export type Coordinate = { + runId: string; + annotation: string; + values: ValueData[]; +}; + +export function convertToCoordinateData( + annotationData: AnnotationDataListing, + selectedAnnotations: string[], + activeRuns: string[], + activeMetrics: string[] +): {coordinates: Coordinate[]; extremes: {min: number; max: number}} { + const result: Coordinate[] = []; + const extremeValues = {max: -1.0, min: 1.0}; + const allRuns = new Set(activeRuns); + const allMetrics = new Set(activeMetrics); + if ( + allRuns.size === 0 || + allMetrics.size === 0 || + Object.keys(annotationData).length === 0 + ) { + return {coordinates: [], extremes: {min: -1.0, max: 1.0}}; + } + selectedAnnotations.forEach((annotation) => { + const data = annotationData[annotation]; + const runResult: {[runId: string]: ValueData[]} = {}; + data.forEach((entry) => { + if (!allRuns.has(entry.run) || !allMetrics.has(entry.metric)) { + return; + } + if (runResult[entry.run]) { + runResult[entry.run].push(entry); + } else { + runResult[entry.run] = [entry]; + } + if (entry.nPMIValue !== null) { + extremeValues.max = Math.max(extremeValues.max, entry.nPMIValue); + extremeValues.min = Math.min(extremeValues.min, entry.nPMIValue); + } else { + extremeValues.max = Math.max(extremeValues.max, 0); + extremeValues.min = Math.min(extremeValues.min, 0); + } + }); + for (const key of Object.keys(runResult)) { + result.push({ + annotation, + runId: key, + values: runResult[key], + }); + } + }); + if (extremeValues.max < extremeValues.min) { + extremeValues.max = 1.0; + extremeValues.min = -1.0; + } + return {coordinates: result, extremes: extremeValues}; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/coordinate_data_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/coordinate_data_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..68b7afc96d879a95191d422847d80072c1d57e23 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/coordinate_data_test.ts @@ -0,0 +1,120 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {AnnotationDataListing} from '../store/npmi_types'; +import {convertToCoordinateData} from './coordinate_data'; +import {buildSampleAnnotationData} from '../testing'; + +describe('coordinate data utils', () => { + it('creates coordinate data', () => { + const annotationData: AnnotationDataListing = buildSampleAnnotationData(); + const selectedAnnotations = ['annotation_1']; + const activeRuns = ['run_1', 'run_3']; + const activeMetrics = ['test', 'other']; + const data = convertToCoordinateData( + annotationData, + selectedAnnotations, + activeRuns, + activeMetrics + ); + expect(data.extremes).toEqual({min: -1, max: 0.815}); + expect(data.coordinates).toEqual([ + { + runId: 'run_1', + annotation: 'annotation_1', + values: [ + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_1', + nPMIValue: 0.5178, + countValue: 100, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_1', + nPMIValue: 0.815, + countValue: 100, + }, + ], + }, + { + runId: 'run_3', + annotation: 'annotation_1', + values: [ + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_3', + nPMIValue: -0.31, + countValue: 53, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_3', + nPMIValue: -1.0, + countValue: 53, + }, + ], + }, + ]); + }); + + it('returns empty coordinates when no runs active', () => { + const annotationData: AnnotationDataListing = buildSampleAnnotationData(); + const selectedAnnotations = ['annotation_1']; + const activeRuns: string[] = []; + const activeMetrics = ['test', 'other']; + const data = convertToCoordinateData( + annotationData, + selectedAnnotations, + activeRuns, + activeMetrics + ); + expect(data.extremes).toEqual({min: -1.0, max: 1.0}); + expect(data.coordinates).toEqual([]); + }); + + it('returns empty coordinates when no annotations are present', () => { + const annotationData: AnnotationDataListing = {}; + const selectedAnnotations: string[] = []; + const activeRuns = ['run_1']; + const activeMetrics = ['test', 'other']; + const data = convertToCoordinateData( + annotationData, + selectedAnnotations, + activeRuns, + activeMetrics + ); + expect(data.extremes).toEqual({min: -1.0, max: 1.0}); + expect(data.coordinates).toEqual([]); + }); + + it('returns empty coordinates when nothing matches the active metrics', () => { + const annotationData: AnnotationDataListing = buildSampleAnnotationData(); + const selectedAnnotations = ['annotation_1']; + const activeRuns = ['run_1']; + const activeMetrics = ['more', 'metrics']; + const data = convertToCoordinateData( + annotationData, + selectedAnnotations, + activeRuns, + activeMetrics + ); + expect(data.extremes).toEqual({min: -1.0, max: 1.0}); + expect(data.coordinates).toEqual([]); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/csv_result.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/csv_result.ts new file mode 100644 index 0000000000000000000000000000000000000000..1396952081ce3d8d3bc6ff27d396ebce2f56e26c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/csv_result.ts @@ -0,0 +1,49 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ValueData} from '../store/npmi_types'; +import {stripMetricString} from './metric_type'; + +export function convertToCSVResult( + flaggedData: [string, ValueData[]][], + run: string, + metrics: string[] +): string { + const result = [[run, ...metrics]]; + if (!metrics.length || !flaggedData.length) { + const csvContent = + 'data:text/csv;charset=utf-8,' + + result.map((e) => e.join(',')).join('\n'); + return csvContent; + } + const strippedMetrics = metrics.map((metric) => stripMetricString(metric)); + for (const [annotation, valueDataList] of flaggedData) { + const runValues = valueDataList.filter((values) => values.run === run); + if (runValues.length) { + const elementResult = [annotation]; + for (const metric of strippedMetrics) { + const metricValue = runValues.find((value) => value.metric === metric); + if (metricValue === undefined) { + elementResult.push('null'); + } else { + elementResult.push(`${metricValue.nPMIValue}`); + } + } + result.push(elementResult); + } + } + const csvContent = + 'data:text/csv;charset=utf-8,' + result.map((e) => e.join(',')).join('\n'); + return csvContent; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/csv_result_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/csv_result_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..99774a89d2f59dee344069b99ec8127201fbad66 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/csv_result_test.ts @@ -0,0 +1,155 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ValueData} from '../store/npmi_types'; +import {convertToCSVResult} from './csv_result'; + +describe('csv result utils', () => { + it('returns converted csv result', () => { + const flaggedData: [string, ValueData[]][] = [ + [ + 'annotation_1', + [ + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_1', + nPMIValue: 0.5178, + countValue: 100, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_1', + nPMIValue: 0.02157, + countValue: 101, + }, + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_3', + nPMIValue: -0.31, + countValue: 53, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_3', + nPMIValue: -1.0, + countValue: 53, + }, + ], + ], + [ + 'annotation_3', + [ + { + annotation: 'annotation_3', + metric: 'test', + run: 'run_1', + nPMIValue: null, + countValue: 572, + }, + { + annotation: 'annotation_3', + metric: 'third', + run: 'run_1', + nPMIValue: -0.157, + countValue: 572, + }, + ], + ], + ]; + const run = 'run_1'; + const metrics = ['nPMI@test', 'nPMI@other']; + + const result = convertToCSVResult(flaggedData, run, metrics); + expect(result).toEqual( + 'data:text/csv;charset=utf-8,run_1,nPMI@test,nPMI@other\nannotation_1,0.5178,0.02157\nannotation_3,null,null' + ); + }); + + it('returns empty result when no metrics active', () => { + const flaggedData: [string, ValueData[]][] = [ + [ + 'annotation_1', + [ + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_1', + nPMIValue: 0.5178, + countValue: 100, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_1', + nPMIValue: 0.02157, + countValue: 101, + }, + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_3', + nPMIValue: -0.31, + countValue: 53, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_3', + nPMIValue: -1.0, + countValue: 53, + }, + ], + ], + [ + 'annotation_3', + [ + { + annotation: 'annotation_3', + metric: 'test', + run: 'run_1', + nPMIValue: null, + countValue: 572, + }, + { + annotation: 'annotation_3', + metric: 'third', + run: 'run_1', + nPMIValue: -0.157, + countValue: 572, + }, + ], + ], + ]; + const run = 'run_1'; + const metrics: string[] = []; + + const result = convertToCSVResult(flaggedData, run, metrics); + expect(result).toEqual('data:text/csv;charset=utf-8,run_1'); + }); + + it('returns empty result when no flagged data', () => { + const flaggedData: [string, ValueData[]][] = []; + const run = 'run_1'; + const metrics = ['nPMI@test', 'nPMI@other']; + + const result = convertToCSVResult(flaggedData, run, metrics); + expect(result).toEqual( + 'data:text/csv;charset=utf-8,run_1,nPMI@test,nPMI@other' + ); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/filter_annotations.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/filter_annotations.ts new file mode 100644 index 0000000000000000000000000000000000000000..924db409a7aa67a3d95734ae29b4048ab73b64e9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/filter_annotations.ts @@ -0,0 +1,106 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + AnnotationDataListing, + ArithmeticElement, + MetricFilterListing, + ArithmeticKind, + ValueData, +} from './../store/npmi_types'; +import {stripMetricString} from './metric_type'; + +export function filterAnnotations( + annotationData: AnnotationDataListing, + activeRuns: string[], + metricArithmetic: ArithmeticElement[], + metricFilters: MetricFilterListing, + metrics: string[], + annotationsRegex: string +): AnnotationDataListing { + const data: AnnotationDataListing = {}; + const allRuns = new Set(activeRuns); + const allMetrics = new Set( + metrics.map((metric) => stripMetricString(metric)) + ); + const filterRegex = new RegExp(annotationsRegex, 'i'); + Object.entries(annotationData).forEach((entry) => { + if (!filterRegex.test(entry[0])) { + return; + } + let valueDataElements = entry[1]; + // Remove all inactive runs and keep only metrics currently displayed + valueDataElements = valueDataElements.filter((valueDataElement) => { + return ( + allRuns.has(valueDataElement.run) && + allMetrics.has(valueDataElement.metric) + ); + }); + if ( + checkValuesPassMetricArithmetic( + metricArithmetic, + metricFilters, + valueDataElements + ) + ) { + if (valueDataElements.length !== 0) { + data[entry[0]] = valueDataElements; + } + } + }); + return data; +} + +export function removeHiddenAnnotations( + annotationData: AnnotationDataListing, + hiddenAnnotations: string[], + showHidden: boolean +): AnnotationDataListing { + if (showHidden) { + return annotationData; + } + const data = {...annotationData}; + hiddenAnnotations.forEach((annotation) => delete data[annotation]); + return data; +} + +function checkValuesPassMetricArithmetic( + metricArithmetic: ArithmeticElement[], + metricFilters: MetricFilterListing, + valueDataElements: ValueData[] +): boolean { + // Check all parts of the arithemetic + return metricArithmetic.every((element) => { + if (element.kind === ArithmeticKind.OPERATOR) { + return true; + } + const metricFilter = metricFilters[element.metric]; + if (metricFilter === undefined) { + return true; + } + return valueDataElements.some((valueDataElement) => { + if (valueDataElement.metric === stripMetricString(element.metric)) { + if (!valueDataElement.nPMIValue && metricFilter.includeNaN) { + return true; + } else { + return ( + valueDataElement.nPMIValue! <= metricFilter.max && + valueDataElement.nPMIValue! >= metricFilter.min + ); + } + } + return false; + }); + }); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/filter_annotations_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/filter_annotations_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..f05a287fa9a724c54fcf7e43b616c5ab6438d144 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/filter_annotations_test.ts @@ -0,0 +1,388 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + AnnotationDataListing, + ArithmeticElement, + ArithmeticKind, + Operator, + MetricFilterListing, +} from '../store/npmi_types'; +import {filterAnnotations, removeHiddenAnnotations} from './filter_annotations'; +import {buildSampleAnnotationData} from '../testing'; + +describe('filter annotations utils', () => { + const annotationData: AnnotationDataListing = buildSampleAnnotationData(); + const activeRuns = ['run_1', 'run_2']; + const metricArithmetic: ArithmeticElement[] = [ + {kind: ArithmeticKind.METRIC, metric: 'nPMI@test'}, + {kind: ArithmeticKind.OPERATOR, operator: Operator.AND}, + {kind: ArithmeticKind.METRIC, metric: 'nPMI@other'}, + ]; + const metricFilters: MetricFilterListing = { + 'nPMI@test': { + max: 1.0, + min: -1.0, + includeNaN: false, + }, + 'nPMI@other': { + max: 1.0, + min: 0, + includeNaN: false, + }, + }; + const metrics = ['nPMI@test', 'nPMI@other']; + const hiddenAnnotations = ['annotation_2', 'annotation_3']; + + describe('filter annotations', () => { + it('returns correct result filtered by runs, active metrics, and metric filters', () => { + const result = filterAnnotations( + annotationData, + activeRuns, + metricArithmetic, + metricFilters, + metrics, + '' + ); + expect(result).toEqual({ + annotation_1: [ + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_1', + nPMIValue: 0.5178, + countValue: 100, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_1', + nPMIValue: 0.815, + countValue: 100, + }, + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_2', + nPMIValue: 0.02157, + countValue: 101, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_2', + nPMIValue: -0.02157, + countValue: 101, + }, + ], + annotation_3: [ + { + annotation: 'annotation_3', + metric: 'test', + run: 'run_1', + nPMIValue: 0.757, + countValue: 572, + }, + { + annotation: 'annotation3', + metric: 'other', + run: 'run_1', + nPMIValue: 0.05, + countValue: 53, + }, + { + annotation: 'annotation_3', + metric: 'test', + run: 'run_2', + nPMIValue: -0.157, + countValue: 572, + }, + { + annotation: 'annotation3', + metric: 'other', + run: 'run_2', + nPMIValue: -0.05, + countValue: 53, + }, + ], + }); + }); + + it('returns correct result if no filters active', () => { + const result = filterAnnotations( + annotationData, + activeRuns, + [], + {}, + metrics, + '' + ); + expect(result).toEqual({ + annotation_1: [ + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_1', + nPMIValue: 0.5178, + countValue: 100, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_1', + nPMIValue: 0.815, + countValue: 100, + }, + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_2', + nPMIValue: 0.02157, + countValue: 101, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_2', + nPMIValue: -0.02157, + countValue: 101, + }, + ], + annotation_2: [ + { + annotation: 'annotation_2', + metric: 'test', + run: 'run_1', + nPMIValue: null, + countValue: 572, + }, + { + annotation: 'annotation_2', + metric: 'other', + run: 'run_1', + nPMIValue: -1.0, + countValue: 53, + }, + ], + annotation_3: [ + { + annotation: 'annotation_3', + metric: 'test', + run: 'run_1', + nPMIValue: 0.757, + countValue: 572, + }, + { + annotation: 'annotation3', + metric: 'other', + run: 'run_1', + nPMIValue: 0.05, + countValue: 53, + }, + { + annotation: 'annotation_3', + metric: 'test', + run: 'run_2', + nPMIValue: -0.157, + countValue: 572, + }, + { + annotation: 'annotation3', + metric: 'other', + run: 'run_2', + nPMIValue: -0.05, + countValue: 53, + }, + ], + }); + }); + + it('returns empty result if no runs active', () => { + const result = filterAnnotations( + annotationData, + [], + metricArithmetic, + metricFilters, + metrics, + '' + ); + expect(result).toEqual({}); + }); + + it('returns empty result if no metrics active', () => { + const result = filterAnnotations( + annotationData, + activeRuns, + metricArithmetic, + metricFilters, + [], + '' + ); + expect(result).toEqual({}); + }); + + it('returns empty result if no annotation data', () => { + const result = filterAnnotations( + {}, + activeRuns, + metricArithmetic, + metricFilters, + metrics, + '' + ); + expect(result).toEqual({}); + }); + + it('returns correct result with annotations regex active', () => { + const result = filterAnnotations( + annotationData, + activeRuns, + metricArithmetic, + metricFilters, + metrics, + 'Ann.+_1$' + ); + expect(result).toEqual({ + annotation_1: [ + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_1', + nPMIValue: 0.5178, + countValue: 100, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_1', + nPMIValue: 0.815, + countValue: 100, + }, + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_2', + nPMIValue: 0.02157, + countValue: 101, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_2', + nPMIValue: -0.02157, + countValue: 101, + }, + ], + }); + }); + + it('returns empty result if filters exclude all annotations', () => { + const result = filterAnnotations( + annotationData, + activeRuns, + metricArithmetic, + { + 'nPMI@test': { + max: 1.0, + min: 0.8, + includeNaN: false, + }, + 'nPMI@other': { + max: 0, + min: -1.0, + includeNaN: false, + }, + }, + metrics, + '' + ); + expect(result).toEqual({}); + }); + }); + + describe('remove hidden annotations', () => { + it('returns correct non-hidden annotations', () => { + const result = removeHiddenAnnotations( + annotationData, + hiddenAnnotations, + false + ); + expect(result).toEqual({ + annotation_1: [ + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_1', + nPMIValue: 0.5178, + countValue: 100, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_1', + nPMIValue: 0.815, + countValue: 100, + }, + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_2', + nPMIValue: 0.02157, + countValue: 101, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_2', + nPMIValue: -0.02157, + countValue: 101, + }, + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_3', + nPMIValue: -0.31, + countValue: 53, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_3', + nPMIValue: -1.0, + countValue: 53, + }, + ], + }); + }); + + it('returns all annotations if showHidden is true', () => { + const result = removeHiddenAnnotations( + annotationData, + hiddenAnnotations, + true + ); + expect(result).toEqual(annotationData); + }); + + it('returns all annotations if no annotations hidden', () => { + const result = removeHiddenAnnotations(annotationData, [], false); + expect(result).toEqual(annotationData); + }); + + it('returns empty object if no annotation data', () => { + const result = removeHiddenAnnotations({}, hiddenAnnotations, false); + expect(result).toEqual({}); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/metric_type.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/metric_type.ts new file mode 100644 index 0000000000000000000000000000000000000000..ef78a7929ec0ffd2bb7aa9fdebaa4a708ce580ff --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/metric_type.ts @@ -0,0 +1,30 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export function metricIsMetricCount(metric: string): boolean { + return metric.startsWith('count@'); +} + +export function metricIsNpmi(metric: string): boolean { + return metric.startsWith('nPMI@') || metric.startsWith('nPMI_diff@'); +} + +export function metricIsNpmiAndNotDiff(metric: string): boolean { + return metric.startsWith('nPMI@'); +} + +export function stripMetricString(metricString: string): string { + const strippedString = metricString.split('@', 2)[1]; + return strippedString; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/metric_type_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/metric_type_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..ddb7ed0520877c8fa5462fc52f8d5829dd5b9540 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/metric_type_test.ts @@ -0,0 +1,105 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + metricIsMetricCount, + metricIsNpmi, + metricIsNpmiAndNotDiff, + stripMetricString, +} from './metric_type'; + +describe('metric type utils', () => { + describe('metric is count', () => { + it('returns true if the metric starts with count@', () => { + const metric = 'count@test'; + expect(metricIsMetricCount(metric)).toBeTrue(); + }); + + it('returns false if the metric does not start with count@', () => { + const metric = 'nPMI@test'; + expect(metricIsMetricCount(metric)).toBeFalse(); + }); + + it('returns false if the metric only contains count@', () => { + const metric = 'foo@count@'; + expect(metricIsMetricCount(metric)).toBeFalse(); + }); + }); + + describe('metric is npmi', () => { + it('returns true if the metric starts with nPMI@', () => { + const metric = 'nPMI@test'; + expect(metricIsNpmi(metric)).toBeTrue(); + }); + + it('returns true if the metric starts with nPMI_diff@', () => { + const metric = 'nPMI_diff@test'; + expect(metricIsNpmi(metric)).toBeTrue(); + }); + + it('returns false if the metric does not start with nPMI', () => { + const metric = 'count@test'; + expect(metricIsNpmi(metric)).toBeFalse(); + }); + + it('returns false if the metric only contains nPMI@', () => { + const metric = 'foo@nPMI@'; + expect(metricIsNpmi(metric)).toBeFalse(); + }); + + it('returns false if the metric starts with npmi@', () => { + const metric = 'npmi@test'; + expect(metricIsNpmi(metric)).toBeFalse(); + }); + + it('returns false if the metric and prefix are not separated by @', () => { + const metric = 'nPMItest'; + expect(metricIsNpmi(metric)).toBeFalse(); + }); + }); + + describe('metric is npmi and not diff', () => { + it('returns true if the metric starts with nPMI@', () => { + const metric = 'nPMI@test'; + expect(metricIsNpmiAndNotDiff(metric)).toBeTrue(); + }); + + it('returns false if the metric starts with nPMI_diff@', () => { + const metric = 'nPMI_diff@test'; + expect(metricIsNpmiAndNotDiff(metric)).toBeFalse(); + }); + + it('returns false if the metric only contains nPMI@', () => { + const metric = 'foo@nPMI@'; + expect(metricIsNpmiAndNotDiff(metric)).toBeFalse(); + }); + }); + + describe('strip metric string', () => { + it('returns stripped metric for nPMI@', () => { + const metric = 'nPMI@test'; + expect(stripMetricString(metric)).toBe('test'); + }); + + it('returns stripped metric for nPMI_diff@', () => { + const metric = 'nPMI_diff@test'; + expect(stripMetricString(metric)).toBe('test'); + }); + + it('returns stripped metric for count@', () => { + const metric = 'count@test'; + expect(stripMetricString(metric)).toBe('test'); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/sort_annotations.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/sort_annotations.ts new file mode 100644 index 0000000000000000000000000000000000000000..5f667e731778249c1747a95d49b060bfe2e2fc44 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/sort_annotations.ts @@ -0,0 +1,61 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + AnnotationDataListing, + AnnotationSort, + SortOrder, +} from '../store/npmi_types'; +import {stripMetricString} from './metric_type'; + +export function sortAnnotations( + annotationData: AnnotationDataListing, + sort: AnnotationSort +): string[] { + let result = Object.keys(annotationData); + const strippedMetric = stripMetricString(sort.metric); + if (sort.metric === '') { + return result; + } + if (sort.order === SortOrder.DOWN) { + const maxData: {[annotation: string]: number} = {}; + for (const annotation of result) { + maxData[annotation] = Math.max( + ...annotationData[annotation] + .filter((annotation) => annotation.metric === strippedMetric) + .map((filtered) => + filtered.nPMIValue === null ? -Infinity : filtered.nPMIValue + ) + ); + } + result = result.sort((a, b) => { + return maxData[b] - maxData[a]; + }); + } else if (sort.order === SortOrder.UP) { + const minData: {[annotation: string]: number} = {}; + for (const annotation of result) { + minData[annotation] = Math.min( + ...annotationData[annotation] + .filter((annotation) => annotation.metric === strippedMetric) + .map((filtered) => + filtered.nPMIValue === null ? Infinity : filtered.nPMIValue + ) + ); + } + result = result.sort((a, b) => { + return minData[a] - minData[b]; + }); + } + return result; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/sort_annotations_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/sort_annotations_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..98d4730ad1a23decc03a7e5ef599967bcc39c5fb --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/sort_annotations_test.ts @@ -0,0 +1,65 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + AnnotationDataListing, + SortOrder, + AnnotationSort, +} from '../store/npmi_types'; +import {sortAnnotations} from './sort_annotations'; +import {buildSampleAnnotationData} from '../testing'; + +describe('sort annotations utils', () => { + it('sorts annotations upwards', () => { + const annotationData: AnnotationDataListing = buildSampleAnnotationData(); + const sort: AnnotationSort = { + metric: 'nPMI@test', + order: SortOrder.UP, + }; + const annotations = sortAnnotations(annotationData, sort); + expect(annotations).toEqual([ + 'annotation_1', + 'annotation_3', + 'annotation_2', + ]); + }); + + it('sorts annotations downwards', () => { + const annotationData: AnnotationDataListing = buildSampleAnnotationData(); + const sort: AnnotationSort = { + metric: 'nPMI@test', + order: SortOrder.DOWN, + }; + const annotations = sortAnnotations(annotationData, sort); + expect(annotations).toEqual([ + 'annotation_3', + 'annotation_1', + 'annotation_2', + ]); + }); + + it('does not sort annotations if no metric specified', () => { + const annotationData: AnnotationDataListing = buildSampleAnnotationData(); + const sort: AnnotationSort = { + metric: '', + order: SortOrder.UP, + }; + const annotations = sortAnnotations(annotationData, sort); + expect(annotations).toEqual([ + 'annotation_1', + 'annotation_2', + 'annotation_3', + ]); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/violin_data.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/violin_data.ts new file mode 100644 index 0000000000000000000000000000000000000000..02bc5b9178470c4614ae492ab812c796791d01a8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/violin_data.ts @@ -0,0 +1,87 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {AnnotationDataListing} from './../store/npmi_types'; +import {stripMetricString} from './metric_type'; + +import * as d3 from '../../../third_party/d3'; + +export type ViolinChartData = {[runId: string]: ViolinBin[]}; +export type ViolinBin = d3.Bin; + +/** + * Returns the data needed for the nPMI violin plots. + * + * @param annotationData the data that comes from the backend + * @param activeRuns currently active runs to filter the data by + * @param metricName selected metric to filter the data by + */ +export function violinData( + annotationData: AnnotationDataListing, + activeRuns: string[], + metricName: string +): { + violinData: ViolinChartData; + extremes: {min: number; max: number}; +} { + const histogramData: {[run: string]: number[]} = {}; + const histogramDataNull: {[run: string]: any[]} = {}; + const allRuns = new Set(activeRuns); + const strippedMetric = stripMetricString(metricName); + const extremeValues = {max: -1.0, min: 1.0}; + Object.values(annotationData).forEach((annotationEntry) => { + annotationEntry.forEach((valueDataElement) => { + const run = valueDataElement.run; + if (!allRuns.has(run) || valueDataElement.metric !== strippedMetric) { + return; + } + if (valueDataElement.nPMIValue === null) { + if (histogramDataNull[run]) { + histogramDataNull[run].push(null); + } else { + histogramDataNull[run] = [null]; + } + } else { + const nPMIValue = valueDataElement.nPMIValue; + extremeValues.max = + extremeValues.max < nPMIValue ? nPMIValue : extremeValues.max; + extremeValues.min = + extremeValues.min > nPMIValue ? nPMIValue : extremeValues.min; + if (histogramData[valueDataElement.run]) { + histogramData[run].push(nPMIValue); + } else { + histogramData[run] = [nPMIValue]; + } + } + }); + }); + const result: ViolinChartData = {}; + const bin = d3 + .histogram() + .domain([extremeValues.min, extremeValues.max]) + .value((d) => d); + const binNaN = d3 + .histogram() + .domain([-Infinity, Infinity]) + .thresholds(0) + .value((d) => d); + for (const run of allRuns) { + result[run] = bin(histogramData[run]); + if (histogramDataNull[run]) { + const buckets = binNaN(histogramDataNull[run]); + result[run].unshift(buckets[0]); + } + } + return {violinData: result, extremes: extremeValues}; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/violin_data_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/violin_data_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..1e0282750c8f631cd11f5859e5e1c39d40e2e203 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/util/violin_data_test.ts @@ -0,0 +1,54 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {AnnotationDataListing} from '../store/npmi_types'; +import {violinData} from './violin_data'; +import {buildSampleAnnotationData} from '../testing'; + +class TestableBin extends Array { + x0: number; + x1: number; + constructor(array: number[] | any[], x0: number, x1: number) { + if (array.length === 1) { + super(); + this.push(array[0]); + } else { + super(...array); + } + this.x0 = x0; + this.x1 = x1; + } +} + +describe('violin data utils', () => { + it('creates violin data containing only selected metric and active runs', () => { + const annotationData: AnnotationDataListing = buildSampleAnnotationData(); + const activeRuns = ['run_1', 'run_3']; + const metric = 'nPMI@test'; + const data = violinData(annotationData, activeRuns, metric); + expect(data.extremes).toEqual({min: -0.31, max: 0.757}); + expect(data.violinData).toEqual({ + run_1: [ + new TestableBin([null], -Infinity, Infinity), + new TestableBin([], -0.31, 0), + new TestableBin([], 0, 0.5), + new TestableBin([0.5178, 0.757], 0.5, 0.757), + ], + run_3: [ + new TestableBin([-0.31], -0.31, 0), + new TestableBin([], 0, 0.757), + ], + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..0e40e1981db14287e2b271424cb5fc140dfdd3b0 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/BUILD @@ -0,0 +1,72 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "annotations_list_component_styles", + src = "annotations_list_component.scss", +) + +ng_module( + name = "annotations_list", + srcs = [ + "annotations_list_component.ts", + "annotations_list_container.ts", + "annotations_list_module.ts", + ], + assets = [ + "annotations_list_component.ng.html", + ":annotations_list_component_styles", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_cdk_scrolling", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/util:filter_annotations", + "//tensorboard/webapp/plugins/npmi/util:metric_type", + "//tensorboard/webapp/plugins/npmi/util:sort_annotations", + "//tensorboard/webapp/plugins/npmi/views/annotations_list/annotation", + "//tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar", + "//tensorboard/webapp/plugins/npmi/views/annotations_list/header", + "//tensorboard/webapp/plugins/npmi/views/annotations_list/legend", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "annotations_list_test_lib", + testonly = True, + srcs = [ + "annotations_list_test.ts", + ], + deps = [ + ":annotations_list", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_cdk_scrolling", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/testing", + "//tensorboard/webapp/plugins/npmi/util:filter_annotations", + "//tensorboard/webapp/plugins/npmi/util:metric_type", + "@npm//@angular/core", + "@npm//@angular/forms", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..ceba6af8abe8bafc34d95f9369fa91bc987797a6 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/BUILD @@ -0,0 +1,64 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "annotation_component_styles", + src = "annotation_component.scss", +) + +ng_module( + name = "annotation", + srcs = [ + "annotation_component.ts", + "annotation_container.ts", + "annotation_module.ts", + ], + assets = [ + "annotation_component.ng.html", + ":annotation_component_styles", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_material_checkbox", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/util:metric_type", + "//tensorboard/webapp/third_party:d3", + "@npm//@angular/core", + "@npm//@angular/forms", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "annotation_test_lib", + testonly = True, + srcs = [ + "annotation_test.ts", + ], + deps = [ + ":annotation", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_material_checkbox", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/testing", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/annotation_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/annotation_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..2fd225f64daad8e49223c1c9a0a336e25c8b4d2d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/annotation_component.ng.html @@ -0,0 +1,47 @@ + +
    + + {{annotation}} + + +
    +
    + + + + + + + +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/annotation_component.scss b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/annotation_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..a882ddfe6c6f7b6dcb1ff11af9b267a91c36495e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/annotation_component.scss @@ -0,0 +1,74 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +:host { + padding-top: 5px; +} + +.annotation-title { + align-items: center; + display: flex; + font-size: 13px; + height: 20px; + padding: 0 10px; + user-select: none; +} + +.selected-row { + background-color: mat-color($tb-background, selected-button); + display: block; +} + +.flagged-annotation { + color: mat-color($tb-primary); +} + +.hidden-annotation { + color: mat-color($tb-foreground, disabled-text); +} + +.annotation-checkbox { + padding-right: 5px; +} + +.flagged-icon { + transform: scale(0.6); +} + +.hidden-icon { + transform: scale(0.6); +} + +.chart-div { + border-bottom: 1px solid mat-color($tb-foreground, border); +} + +.chart-svg { + width: 100%; + user-select: none; +} + +.default-text { + fill: mat-color($tb-foreground, base); +} + +.flag-text { + fill: mat-color($tb-primary); +} + +.hidden-text { + fill: mat-color($tb-foreground, disabled-text); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/annotation_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/annotation_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..4f26e7052f57d9f33d1b11810d3961a392a33e34 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/annotation_component.ts @@ -0,0 +1,532 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + Input, + AfterViewInit, + OnChanges, + SimpleChanges, + ViewChild, + ElementRef, + ViewEncapsulation, + HostBinding, + HostListener, +} from '@angular/core'; +import {ValueData, TfColorScale} from '../../../store/npmi_types'; +import * as d3 from '../../../../../third_party/d3'; +import {stripMetricString} from '../../../util/metric_type'; + +@Component({ + selector: 'annotation-component', + templateUrl: './annotation_component.ng.html', + styleUrls: ['./annotation_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, +}) +export class AnnotationComponent implements AfterViewInit, OnChanges { + @Input() data!: ValueData[]; + @Input() maxCount!: number; + @Input() selectedAnnotations!: string[]; + @Input() flaggedAnnotations!: string[]; + @Input() hiddenAnnotations!: string[]; + @Input() activeMetrics!: string[]; + @Input() numActiveRuns!: number; + @Input() showCounts!: boolean; + @Input() annotation!: string; + @Input() runHeight!: number; + // Only to trigger OnChanges to re-render the component. + @Input() sidebarWidth!: number; + @ViewChild('chart', {static: true, read: ElementRef}) + private readonly annotationContainer!: ElementRef; + @ViewChild('hintClip', {static: true, read: ElementRef}) + private readonly clipPathElement!: ElementRef; + @HostBinding('class.selected-row') selected = false; + @HostListener('window:resize') + onResize(event: Event) { + this.redraw(); + } + private width: number = 10; + private chartWidth: number = 10; + private chartHeight: number = 10; + private readonly maxDotRadius = 10; + private readonly countDotOffset = 70; + private readonly countTextPadding = 2; + private readonly margin = {top: 0, right: 0, bottom: 0, left: 100}; + private readonly strokeColor = '#fff'; + private textClass = 'default-text'; + private runs: string[] = []; + private colorScale: (runName: string) => string = () => '#333333'; + // Drawing containers + private svg!: d3.Selection< + SVGElement, + unknown, + HTMLElement | null, + undefined + >; + private mainContainer!: d3.Selection< + SVGGElement, + unknown, + HTMLElement | null, + undefined + >; + private barsGroup!: d3.Selection< + SVGGElement, + unknown, + HTMLElement | null, + undefined + >; + private countDotsGroup!: d3.Selection< + SVGGElement, + unknown, + HTMLElement | null, + undefined + >; + private textsGroup!: d3.Selection< + SVGGElement, + unknown, + HTMLElement | null, + undefined + >; + private countTextsGroup!: d3.Selection< + SVGGElement, + unknown, + HTMLElement | null, + undefined + >; + private runHintGroup!: d3.Selection< + SVGGElement, + unknown, + HTMLElement | null, + undefined + >; + // Scales + private xScale!: d3.ScalePoint; + private yScale!: d3.ScalePoint; + private sizeScale!: d3.ScaleLinear; + private countSizeScale!: d3.ScaleLinear; + + ngAfterViewInit(): void { + const runsColorScale = (document.createElement( + 'tf-color-scale' + ) as TfColorScale).runsColorScale; + this.colorScale = runsColorScale ? runsColorScale : this.colorScale; + this.svg = d3.select(this.annotationContainer.nativeElement).select('svg'); + this.xScale = d3.scalePoint().padding(0); + this.yScale = d3.scalePoint().padding(0); + this.sizeScale = d3.scaleLinear().domain([0.0, 1.0]); + this.countSizeScale = d3.scaleLinear().range([2, this.maxDotRadius]); + this.mainContainer = this.svg + .append('g') + .attr('transform', `translate(${this.margin.left}, ${this.margin.top})`); + this.barsGroup = this.mainContainer.append('g'); + this.countDotsGroup = this.mainContainer.append('g'); + this.textsGroup = this.mainContainer.append('g'); + this.countTextsGroup = this.mainContainer.append('g'); + this.runHintGroup = this.svg.append('g'); + this.redraw(); + } + + ngOnChanges(changes: SimpleChanges) { + if (this.svg) { + this.redraw(); + } + } + + private redraw() { + this.selected = this.selectedAnnotations.includes(this.annotation); + this.updateDimensions(); + this.setTextClass(); + this.updateAxes(); + this.draw(); + } + + // Initializing/Updating the visualization props. + private updateDimensions() { + const runs = new Set(); + this.data.forEach((element) => { + runs.add(element.run); + }); + this.runs = [...runs]; + // Needs to be numActiveRuns * runHeight because of cdk-virtual-croll + this.svg.style('height', `${this.numActiveRuns * this.runHeight}px`); + // Needs to be runs.length * runHeight as this is used for y-pos scales + this.chartHeight = + this.runs.length * this.runHeight - this.margin.top - this.margin.bottom; + this.width = this.annotationContainer.nativeElement.clientWidth || 10; + this.chartWidth = this.width - this.margin.left - this.margin.right; + } + + private setTextClass() { + this.textClass = 'default-text'; + if (this.flaggedAnnotations.includes(this.annotation)) { + this.textClass = 'flag-text'; + } else if (this.hiddenAnnotations.includes(this.annotation)) { + this.textClass = 'hidden-text'; + } + } + + private updateAxes() { + this.xScale + .rangeRound([ + 0, + this.chartWidth - this.chartWidth / this.activeMetrics.length, + ]) + .domain(this.activeMetrics.map((d) => stripMetricString(d))); + + this.yScale + .rangeRound([0, this.chartHeight - this.runHeight]) + .domain(this.runs); + + this.sizeScale.range([0, this.chartWidth / this.activeMetrics.length]); + + this.countSizeScale.domain([0, this.maxCount]); + } + + // Drawing UI + private draw() { + this.drawRunIndicators(); + this.drawRunHintTexts(); + this.drawBars(); + this.drawTexts(); + if (this.showCounts) { + this.drawCountDots(); + this.drawCountTexts(); + } else { + this.countDotsGroup.selectAll('.count-dot').remove(); + this.countTextsGroup.selectAll('.count-background-text').remove(); + this.countTextsGroup.selectAll('.count-text').remove(); + } + } + + private drawRunIndicators() { + d3.select(this.clipPathElement.nativeElement) + .select('rect') + .attr('width', this.margin.left - 30) + .attr('height', this.chartHeight); + + const indicators = this.runHintGroup + .selectAll('.hint') + .data(this.runs); + + const indicatorEnters = indicators + .enter() + .append('g') + .attr('class', 'hint'); + + indicatorEnters + .append('path') + .attr('d', 'M 0 0 L 15 0 L 10 10 L 15 20 L 0 20 Z'); + + indicatorEnters + .merge(indicators) + .attr( + 'transform', + function (this: AnnotationComponent, d: string) { + return `translate(10, ${this.yScale(d)! + 5})`; + }.bind(this) + ) + .attr( + 'fill', + function (this: AnnotationComponent, d: string) { + return this.colorScale(d); + }.bind(this) + ); + + indicators.exit().remove(); + } + + private drawRunHintTexts() { + const hintTexts = this.runHintGroup + .selectAll('.hint-text') + .data(this.runs); + + const hintTextEnters = hintTexts + .enter() + .append('text') + .attr('x', 25) + .attr('font-size', '10px') + .attr('alignment-baseline', 'middle') + .attr('clip-path', 'url(#hint-clip)'); + + hintTextEnters + .merge(hintTexts) + .attr( + 'y', + function (this: AnnotationComponent, d: string) { + return this.yScale(d)! + 15; + }.bind(this) + ) + .attr('class', `hint-text ${this.textClass}`) + .text((d: string) => d); + + hintTexts.exit().remove(); + } + + private drawBars() { + const bars = this.barsGroup + .selectAll('.bar') + .data(this.data); + + const barEnters = bars + .enter() + .append('rect') + .attr('class', 'bar') + .attr('height', 20); + + barEnters + .merge(bars) + .attr('fill', (d: ValueData) => { + if (d.nPMIValue === null) { + return ''; + } else if (d.nPMIValue >= 0) { + return d3.interpolateBlues(d.nPMIValue); + } else { + return d3.interpolateReds(d.nPMIValue * -1); + } + }) + .attr( + 'x', + function (this: AnnotationComponent, d: ValueData) { + return this.xScale(d.metric)!; + }.bind(this) + ) + .attr( + 'y', + function (this: AnnotationComponent, d: ValueData) { + return this.yScale(d.run)! + 5; + }.bind(this) + ) + .attr( + 'width', + function (this: AnnotationComponent, d: ValueData) { + if (d.nPMIValue === null) { + return 0; + } else { + return this.sizeScale(Math.abs(d.nPMIValue)); + } + }.bind(this) + ); + + bars.exit().remove(); + } + + private drawCountDots() { + const countDots = this.countDotsGroup + .selectAll('.count-dot') + .data(this.data); + + const countDotEnters = countDots + .enter() + .append('circle') + .attr('class', 'count-dot') + .attr('stroke', 'black'); + + countDotEnters + .merge(countDots) + .attr( + 'fill', + function (this: AnnotationComponent, d: ValueData) { + if (d.countValue === null) { + return ''; + } else { + return d3.interpolateGreys(d.countValue / this.maxCount); + } + }.bind(this) + ) + .attr( + 'cx', + function (this: AnnotationComponent, d: ValueData) { + return this.xScale(d.metric)! + this.countDotOffset; + }.bind(this) + ) + .attr( + 'cy', + function (this: AnnotationComponent, d: ValueData) { + return this.yScale(d.run)! + this.runHeight / 2.0; + }.bind(this) + ) + .attr( + 'r', + function (this: AnnotationComponent, d: ValueData) { + if (d.countValue === null) { + return 0; + } else { + return this.countSizeScale(d.countValue); + } + }.bind(this) + ); + + countDots.exit().remove(); + } + + private drawTexts() { + const backgroundTexts = this.textsGroup + .selectAll('.npmi-background-text') + .data(this.data); + + const backgroundTextEnters = backgroundTexts + .enter() + .append('text') + .attr('class', 'npmi-background-text') + .attr('stroke-width', 3) + .attr('stroke-linejoin', 'round') + .attr('stroke', this.strokeColor) + .attr('font-size', '13px') + .attr('alignment-baseline', 'middle'); + + backgroundTextEnters + .merge(backgroundTexts) + .attr( + 'x', + function (this: AnnotationComponent, d: ValueData) { + return this.xScale(d.metric)! + 5; + }.bind(this) + ) + .attr( + 'y', + function (this: AnnotationComponent, d: ValueData) { + return this.yScale(d.run)! + this.runHeight / 2.0; + }.bind(this) + ) + .text((d: ValueData) => { + let value = + d.nPMIValue === null + ? 'null' + : Math.round((d.nPMIValue + Number.EPSILON) * 1000) / 1000; + return value; + }); + + backgroundTexts.exit().remove(); + + const texts = this.textsGroup + .selectAll('.npmi-text') + .data(this.data); + + const textEnters = texts + .enter() + .append('text') + .attr('class', 'npmi-text') + .attr('font-size', '13px') + .attr('alignment-baseline', 'middle'); + + textEnters + .merge(texts) + .attr( + 'x', + function (this: AnnotationComponent, d: ValueData) { + return this.xScale(d.metric)! + 5; + }.bind(this) + ) + .attr( + 'y', + function (this: AnnotationComponent, d: ValueData) { + return this.yScale(d.run)! + this.runHeight / 2.0; + }.bind(this) + ) + .text((d: ValueData) => { + let value = + d.nPMIValue === null + ? 'null' + : Math.round((d.nPMIValue + Number.EPSILON) * 1000) / 1000; + return value; + }); + + texts.exit().remove(); + } + + private drawCountTexts() { + const countBackgroundTexts = this.countTextsGroup + .selectAll('.count-background-text') + .data(this.data); + + const countBackgroundTextEnters = countBackgroundTexts + .enter() + .append('text') + .attr('class', 'count-background-text') + .attr('stroke-width', 3) + .attr('stroke-linejoin', 'round') + .attr('stroke', this.strokeColor) + .attr('font-size', '10px') + .attr('alignment-baseline', 'middle'); + + countBackgroundTextEnters + .merge(countBackgroundTexts) + .attr( + 'x', + function (this: AnnotationComponent, d: ValueData) { + return ( + this.xScale(d.metric)! + + this.countDotOffset + + this.countTextPadding + + this.maxDotRadius + ); + }.bind(this) + ) + .attr( + 'y', + function (this: AnnotationComponent, d: ValueData) { + return this.yScale(d.run)! + this.runHeight / 2.0; + }.bind(this) + ) + .text((d: ValueData) => { + if (d.countValue === null) { + return ''; + } + return Intl.NumberFormat().format(d.countValue); + }); + + countBackgroundTexts.exit().remove(); + + const countTexts = this.countTextsGroup + .selectAll('.count-text') + .data(this.data); + + const countTextEnters = countTexts + .enter() + .append('text') + .attr('class', 'count-text') + .attr('font-size', '10px') + .attr('alignment-baseline', 'middle'); + + countTextEnters + .merge(countTexts) + .attr( + 'x', + function (this: AnnotationComponent, d: ValueData) { + return ( + this.xScale(d.metric)! + + this.countDotOffset + + this.countTextPadding + + this.maxDotRadius + ); + }.bind(this) + ) + .attr( + 'y', + function (this: AnnotationComponent, d: ValueData) { + return this.yScale(d.run)! + this.runHeight / 2.0; + }.bind(this) + ) + .text((d: ValueData) => { + if (d.countValue === null) { + return ''; + } + return Intl.NumberFormat().format(d.countValue); + }); + + countTexts.exit().remove(); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/annotation_container.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/annotation_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..5b9452a85c5422c13cb7175d94a82c1bab1c2aa4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/annotation_container.ts @@ -0,0 +1,64 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, ChangeDetectionStrategy, Input} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {State} from '../../../../../app_state'; + +import { + getSelectedAnnotations, + getFlaggedAnnotations, + getHiddenAnnotations, + getShowCounts, + getSidebarWidth, +} from '../../../store'; +import {ValueData} from '../../../store/npmi_types'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'npmi-annotation', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AnnotationContainer { + @Input() data!: ValueData[]; + @Input() maxCount!: number; + @Input() activeMetrics!: string[]; + @Input() numActiveRuns!: number; + @Input() annotation!: string; + @Input() runHeight!: number; + + readonly flaggedAnnotations$ = this.store.select(getFlaggedAnnotations); + readonly hiddenAnnotations$ = this.store.select(getHiddenAnnotations); + readonly selectedAnnotations$ = this.store.select(getSelectedAnnotations); + readonly showCounts$ = this.store.select(getShowCounts); + readonly sidebarWidth$ = this.store.select(getSidebarWidth); + + constructor(private readonly store: Store) {} +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/annotation_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/annotation_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..a3205816e142619bf0aa980745816e3396ee8864 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/annotation_module.ts @@ -0,0 +1,30 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {FormsModule} from '@angular/forms'; + +import {MatCheckboxModule} from '@angular/material/checkbox'; +import {MatIconModule} from '@angular/material/icon'; + +import {AnnotationComponent} from './annotation_component'; +import {AnnotationContainer} from './annotation_container'; + +@NgModule({ + declarations: [AnnotationContainer, AnnotationComponent], + imports: [CommonModule, FormsModule, MatCheckboxModule, MatIconModule], + exports: [AnnotationContainer], +}) +export class AnnotationModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/annotation_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/annotation_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..d01f9fba9eb218724d4df57171fcd0f75089bfdc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotation/annotation_test.ts @@ -0,0 +1,240 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed, ComponentFixture} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; + +import {Action, Store} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {MatCheckboxModule} from '@angular/material/checkbox'; + +import {State} from '../../../../../app_state'; +import {appStateFromNpmiState, createNpmiState} from '../../../testing'; +import {AnnotationComponent} from './annotation_component'; +import {AnnotationContainer} from './annotation_container'; +import { + getSelectedAnnotations, + getFlaggedAnnotations, + getHiddenAnnotations, + getShowCounts, +} from '../../../store'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('Npmi Annotations List Row', () => { + let store: MockStore; + let dispatchedActions: Action[]; + function createComponentInstance(): ComponentFixture { + const fixture = TestBed.createComponent(AnnotationContainer); + fixture.componentInstance.data = [ + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_1', + nPMIValue: 0.5178, + countValue: 100, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_1', + nPMIValue: 0.02157, + countValue: 101, + }, + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_2', + nPMIValue: null, + countValue: null, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_2', + nPMIValue: -0.1, + countValue: 53, + }, + ]; + fixture.componentInstance.activeMetrics = ['nPMI@test', 'nPMI@other']; + fixture.componentInstance.runHeight = 30; + fixture.componentInstance.maxCount = 101; + fixture.componentInstance.annotation = 'annotation_1'; + fixture.componentInstance.numActiveRuns = 2; + return fixture; + } + + const css = { + FLAGGED_ANNOTATION: By.css('.flagged-annotation'), + HIDDEN_ANNOTATION: By.css('.hidden-annotation'), + CHECKBOX: By.css('.annotation-checkbox'), + CHECKBOX_CHECKED: 'mat-checkbox-checked', + FLAGGED_ICON: By.css('.flagged-icon'), + HIDDEN_ICON: By.css('.hidden-icon'), + RUN_INDICATORS: By.css('.hint'), + RUN_HINT_TEXTS: By.css('.hint-text'), + BARS: By.css('.bar'), + COUNT_DOTS: By.css('.count-dot'), + NPMI_BACKGROUND_TEXTS: By.css('.npmi-background-text'), + NPMI_TEXTS: By.css('.npmi-text'), + COUNT_BACKGROUND_TEXTS: By.css('.count-background-text'), + COUNT_TEXTS: By.css('.count-text'), + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [AnnotationContainer, AnnotationComponent], + imports: [MatCheckboxModule], + providers: [ + provideMockStore({ + initialState: appStateFromNpmiState(createNpmiState()), + }), + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + + dispatchedActions = []; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + dispatchedActions.push(action); + }); + }); + + it('renders annotation', () => { + const fixture = createComponentInstance(); + fixture.detectChanges(); + + const flaggedAnnotation = fixture.debugElement.query( + css.FLAGGED_ANNOTATION + ); + expect(flaggedAnnotation).toBeFalsy(); + + const hiddenAnnotation = fixture.debugElement.query(css.HIDDEN_ANNOTATION); + expect(hiddenAnnotation).toBeFalsy(); + + const selectedCheckbox = fixture.debugElement.query(css.CHECKBOX); + expect(selectedCheckbox).toBeTruthy(); + expect(selectedCheckbox.classes[css.CHECKBOX_CHECKED]).toBeFalsy(); + + const flagIcon = fixture.debugElement.query(css.FLAGGED_ICON); + expect(flagIcon).toBeFalsy(); + + const hiddenIcon = fixture.debugElement.query(css.HIDDEN_ICON); + expect(hiddenIcon).toBeFalsy(); + + const runIndicators = fixture.debugElement.queryAll(css.RUN_INDICATORS); + expect(runIndicators.length).toBe(2); + + const runHinTexts = fixture.debugElement.queryAll(css.RUN_INDICATORS); + expect(runHinTexts.length).toBe(2); + + const bars = fixture.debugElement.queryAll(css.BARS); + expect(bars.length).toBe(4); + + const dots = fixture.debugElement.queryAll(css.COUNT_DOTS); + expect(dots.length).toBe(4); + + const npmiBackgroundTexts = fixture.debugElement.queryAll( + css.NPMI_BACKGROUND_TEXTS + ); + expect(npmiBackgroundTexts.length).toBe(4); + + const npmiTexts = fixture.debugElement.queryAll(css.NPMI_TEXTS); + expect(npmiTexts.length).toBe(4); + + const countBackgroundTexts = fixture.debugElement.queryAll( + css.COUNT_BACKGROUND_TEXTS + ); + expect(countBackgroundTexts.length).toBe(4); + + const countTexts = fixture.debugElement.queryAll(css.COUNT_TEXTS); + expect(countTexts.length).toBe(4); + }); + + it('renders selected annotation', () => { + store.overrideSelector(getSelectedAnnotations, ['annotation_1']); + const fixture = createComponentInstance(); + fixture.detectChanges(); + + const selectedCheckbox = fixture.debugElement.query(css.CHECKBOX); + expect(selectedCheckbox).toBeTruthy(); + expect(selectedCheckbox.classes[css.CHECKBOX_CHECKED]).toBeTrue(); + }); + + it('renders flagged annotation', () => { + store.overrideSelector(getFlaggedAnnotations, ['annotation_1']); + const fixture = createComponentInstance(); + fixture.detectChanges(); + + const flaggedAnnotation = fixture.debugElement.query( + css.FLAGGED_ANNOTATION + ); + expect(flaggedAnnotation).toBeTruthy(); + + const flagIcon = fixture.debugElement.query(css.FLAGGED_ICON); + expect(flagIcon).toBeTruthy(); + }); + + it('renders hidden annotation', () => { + store.overrideSelector(getHiddenAnnotations, ['annotation_1']); + const fixture = createComponentInstance(); + fixture.detectChanges(); + + const hiddenAnnotation = fixture.debugElement.query(css.HIDDEN_ANNOTATION); + expect(hiddenAnnotation).toBeTruthy(); + + const hiddenIcon = fixture.debugElement.query(css.HIDDEN_ICON); + expect(hiddenIcon).toBeTruthy(); + }); + + it('renders annotation that is both flagged and hidden', () => { + store.overrideSelector(getHiddenAnnotations, ['annotation_1']); + store.overrideSelector(getFlaggedAnnotations, ['annotation_1']); + const fixture = createComponentInstance(); + fixture.detectChanges(); + + const flaggedAnnotation = fixture.debugElement.query( + css.FLAGGED_ANNOTATION + ); + expect(flaggedAnnotation).toBeTruthy(); + + const flagIcon = fixture.debugElement.query(css.FLAGGED_ICON); + expect(flagIcon).toBeTruthy(); + + const hiddenAnnotation = fixture.debugElement.query(css.HIDDEN_ANNOTATION); + expect(hiddenAnnotation).toBeFalsy(); + + const hiddenIcon = fixture.debugElement.query(css.HIDDEN_ICON); + expect(hiddenIcon).toBeTruthy(); + }); + + it('does not render the counts when not active', () => { + store.overrideSelector(getShowCounts, false); + const fixture = createComponentInstance(); + fixture.detectChanges(); + + const dots = fixture.debugElement.queryAll(css.COUNT_DOTS); + expect(dots.length).toBe(0); + + const countBackgroundTexts = fixture.debugElement.queryAll( + css.COUNT_BACKGROUND_TEXTS + ); + expect(countBackgroundTexts.length).toBe(0); + + const countTexts = fixture.debugElement.queryAll(css.COUNT_TEXTS); + expect(countTexts.length).toBe(0); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..93fc2e8e3d948dbde560f6b908bb14f1a20e0448 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_component.ng.html @@ -0,0 +1,47 @@ + + + + + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_component.scss b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..9ed41ad9aed4986139e6174230dd8e7e86ca3a0b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_component.scss @@ -0,0 +1,31 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +:host { + background-color: mat-color($tb-background, card); + border: 1px solid mat-color($tb-foreground, border); + display: flex; + flex-direction: column; + height: calc(100% - 2px); // Because of Border + width: calc(100% - 2px); // Because of Boder +} + +.annotation-rows { + display: flex; + flex-direction: column; + flex: 1 1; + overflow-y: auto; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..5dd0ed6cf0b95d81d0bf5672fa2b7c072c6001a7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_component.ts @@ -0,0 +1,72 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + Input, + Output, + EventEmitter, +} from '@angular/core'; + +import {AnnotationDataListing, AnnotationSort} from '../../store/npmi_types'; + +@Component({ + selector: 'annotations-list-component', + templateUrl: './annotations_list_component.ng.html', + styleUrls: ['./annotations_list_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AnnotationsListComponent { + @Input() annotations!: AnnotationDataListing; + @Input() annotationsExpanded!: boolean; + @Input() numAnnotations!: number; + @Input() annotationSort!: AnnotationSort; + @Input() activeMetrics!: string[]; + @Input() numActiveRuns!: number; + @Input() sortedAnnotations!: string[]; + @Input() selectedAnnotations!: string[]; + @Input() maxCount!: number; + @Output() onRowClick = new EventEmitter(); + readonly runHeight = 30; + + rowClicked(event: MouseEvent, annotation: string) { + // Shift pressed, handle multiple annotations + if (event.shiftKey) { + let annotationIndex = this.sortedAnnotations.indexOf(annotation); + if (this.selectedAnnotations.length === 0) { + this.onRowClick.emit( + this.sortedAnnotations.slice(0, annotationIndex + 1) + ); + } else { + let lastAnnotation = this.selectedAnnotations[ + this.selectedAnnotations.length - 1 + ]; + const lastIndex = this.sortedAnnotations.indexOf(lastAnnotation); + if (lastIndex < annotationIndex) { + this.onRowClick.emit( + this.sortedAnnotations.slice(lastIndex, annotationIndex + 1) + ); + } else { + this.onRowClick.emit( + this.sortedAnnotations.slice(annotationIndex, lastIndex + 1) + ); + } + } + } else { + // No shift, only one annotation clicked + this.onRowClick.emit([annotation]); + } + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_container.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..57b5bc89da14df55d9e313fc2fa307dc542b66c8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_container.ts @@ -0,0 +1,175 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, ChangeDetectionStrategy} from '@angular/core'; + +import {select, Store} from '@ngrx/store'; +import {map, share} from 'rxjs/operators'; +import {combineLatest} from 'rxjs'; + +import {State} from '../../../../app_state'; +import { + getAnnotationData, + getMetricArithmetic, + getMetricFilters, + getRunToMetrics, + getShowHiddenAnnotations, + getHiddenAnnotations, + getAnnotationsExpanded, + getSelectedAnnotations, + getAnnotationSort, + getAnnotationsRegex, +} from '../../store'; +import {getCurrentRouteRunSelection} from '../../../../selectors'; +import { + filterAnnotations, + removeHiddenAnnotations, +} from '../../util/filter_annotations'; +import {metricIsNpmiAndNotDiff} from '../../util/metric_type'; +import * as npmiActions from '../../actions'; +import {sortAnnotations} from '../../util/sort_annotations'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'npmi-annotations-list', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AnnotationsListContainer { + readonly annotationsExpanded$ = this.store.pipe( + select(getAnnotationsExpanded) + ); + readonly activeRuns$ = this.store + .pipe(select(getCurrentRouteRunSelection)) + .pipe( + map((runSelection) => { + if (!runSelection) return []; + return Array.from(runSelection.entries()) + .filter((run) => run[1]) + .map((run) => run[0]); + }) + ); + readonly numActiveRuns$ = this.activeRuns$.pipe(map((runs) => runs.length)); + readonly activeMetrics$ = combineLatest([ + this.store.select(getRunToMetrics), + this.activeRuns$, + this.store.select(getMetricFilters), + ]).pipe( + map(([runToMetrics, activeRuns, metricFilters]) => { + let metrics: string[] = []; + for (const run of activeRuns) { + if (runToMetrics[run]) { + metrics = metrics.concat( + runToMetrics[run].filter((key) => metricIsNpmiAndNotDiff(key)) + ); + } + } + metrics = [...new Set([...Object.keys(metricFilters), ...metrics])]; + return metrics; + }) + ); + readonly visibleAnnotations$ = combineLatest([ + this.store.select(getAnnotationData), + this.store.select(getHiddenAnnotations), + this.store.select(getShowHiddenAnnotations), + ]).pipe( + map(([annotationData, hiddenAnnotations, showHiddenAnnotations]) => { + return removeHiddenAnnotations( + annotationData, + hiddenAnnotations, + showHiddenAnnotations + ); + }) + ); + readonly filteredAnnotations$ = combineLatest([ + this.visibleAnnotations$, + this.store.select(getMetricArithmetic), + this.store.select(getMetricFilters), + this.activeRuns$, + this.activeMetrics$, + this.store.select(getAnnotationsRegex), + ]) + .pipe( + map( + ([ + visibleAnnotations, + metricArithmetic, + metricFilters, + activeRuns, + activeMetrics, + annotationsRegex, + ]) => { + return filterAnnotations( + visibleAnnotations, + activeRuns, + metricArithmetic, + metricFilters, + activeMetrics, + annotationsRegex + ); + } + ) + ) + .pipe(share()); + readonly numAnnotations$ = this.filteredAnnotations$.pipe( + map((annotations) => { + return Object.keys(annotations).length; + }) + ); + readonly sortedAnnotations$ = combineLatest([ + this.filteredAnnotations$, + this.store.pipe(select(getAnnotationSort)), + ]).pipe( + map(([annotations, sort]) => { + return sortAnnotations(annotations, sort); + }) + ); + readonly selectedAnnotations$ = this.store.pipe( + select(getSelectedAnnotations) + ); + readonly maxCount$ = this.filteredAnnotations$.pipe( + map((annotations) => { + let max = 0; + Object.values(annotations).forEach((annotation) => { + annotation.forEach((values) => { + if (values.countValue) { + max = Math.max(max, values.countValue); + } + }); + }); + return max; + }) + ); + + constructor(private readonly store: Store) {} + + rowClicked(annotations: string[]) { + this.store.dispatch( + npmiActions.npmiToggleSelectedAnnotations({annotations}) + ); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..651600569bdd2cad173769b4736813b18911da2c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_module.ts @@ -0,0 +1,38 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {ScrollingModule} from '@angular/cdk/scrolling'; + +import {AnnotationsListComponent} from './annotations_list_component'; +import {AnnotationsListContainer} from './annotations_list_container'; +import {AnnotationsListToolbarModule} from './annotations_list_toolbar/annotations_list_toolbar_module'; +import {HeaderModule} from './header/header_module'; +import {LegendModule} from './legend/legend_module'; +import {AnnotationModule} from './annotation/annotation_module'; + +@NgModule({ + declarations: [AnnotationsListComponent, AnnotationsListContainer], + imports: [ + CommonModule, + AnnotationsListToolbarModule, + HeaderModule, + LegendModule, + ScrollingModule, + AnnotationModule, + ], + exports: [AnnotationsListContainer], +}) +export class AnnotationsListModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..da0cc92005869612b6a8cb4f19706cb999a7a9a9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_test.ts @@ -0,0 +1,78 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; + +import {Store} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {State} from '../../../../app_state'; +import * as selectors from '../../../../selectors'; +import {getAnnotationsExpanded} from '../../store'; +import {appStateFromNpmiState, createNpmiState} from '../../testing'; +import {createState, createCoreState} from '../../../../core/testing'; +import {AnnotationsListComponent} from './annotations_list_component'; +import {AnnotationsListContainer} from './annotations_list_container'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('Npmi Annotations List Container', () => { + let store: MockStore; + const css = { + TOOLBAR: By.css('npmi-annotations-list-toolbar'), + HEADER: By.css('npmi-annotations-list-header'), + LEGEND: By.css('npmi-annotations-legend'), + ROWS: By.css('.annotation-rows'), + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [AnnotationsListComponent, AnnotationsListContainer], + imports: [], + providers: [ + provideMockStore({ + initialState: { + ...createState(createCoreState()), + ...appStateFromNpmiState(createNpmiState()), + }, + }), + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + store.overrideSelector(selectors.getCurrentRouteRunSelection, new Map()); + }); + + it('renders expanded annotations list', () => { + const fixture = TestBed.createComponent(AnnotationsListContainer); + fixture.detectChanges(); + + const annotationsToolbar = fixture.debugElement.query(css.TOOLBAR); + expect(annotationsToolbar).toBeTruthy(); + }); + + it('renders non-expanded annotations list', () => { + store.overrideSelector(getAnnotationsExpanded, false); + const fixture = TestBed.createComponent(AnnotationsListContainer); + fixture.detectChanges(); + + const annotationsToolbar = fixture.debugElement.query(css.TOOLBAR); + expect(annotationsToolbar).toBeTruthy(); + + const rows = fixture.debugElement.query(css.ROWS); + expect(rows).toBeFalsy(); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..8a2cd8fa6ddcded64cee681c21a4c6ec5e7a10ce --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/BUILD @@ -0,0 +1,70 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "annotations_list_toolbar_component_styles", + src = "annotations_list_toolbar_component.scss", +) + +ng_module( + name = "annotations_list_toolbar", + srcs = [ + "annotations_list_toolbar_component.ts", + "annotations_list_toolbar_container.ts", + "annotations_list_toolbar_module.ts", + ], + assets = [ + "annotations_list_toolbar_component.ng.html", + ":annotations_list_toolbar_component_styles", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/angular:expect_angular_material_slide_toggle", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search", + "@npm//@angular/core", + "@npm//@angular/forms", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "annotations_list_toolbar_test_lib", + testonly = True, + srcs = [ + "annotations_list_toolbar_test.ts", + ], + deps = [ + ":annotations_list_toolbar", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/angular:expect_angular_material_slide_toggle", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/testing", + "//tensorboard/webapp/runs_legacy", + "//tensorboard/webapp/testing:mat_icon", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@angular/forms", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_list_toolbar_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_list_toolbar_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..38711dde5e2f4c64ea8860c67aaff9745e96b9e7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_list_toolbar_component.ng.html @@ -0,0 +1,71 @@ + +
    +

    Annotations ({{numAnnotations}})

    + + + + +
    + + + Sample Count + + + Show Hidden + + + + diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_list_toolbar_component.scss b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_list_toolbar_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..2af872b48261313efae07aebfdca5dce0dec7d21 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_list_toolbar_component.scss @@ -0,0 +1,44 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +:host { + align-items: center; + box-sizing: border-box; + display: flex; + flex-direction: row; + padding: 0 16px; + width: 100%; +} + +.annotations-title { + display: inline; + font-size: 0.9em; + font-weight: 500; + padding-right: 10px; +} + +.annotations-title-container { + align-items: center; + display: flex; + flex-wrap: nowrap; + flex: 1 1; + height: 42px; +} + +.show-toggle { + font-size: 0.9em; + margin-right: 0.8em; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_list_toolbar_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_list_toolbar_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..db0cd1b4034405fdafea1e28ee8445859cddf9e8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_list_toolbar_component.ts @@ -0,0 +1,41 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + Input, + Output, + EventEmitter, +} from '@angular/core'; + +@Component({ + selector: 'npmi-annotations-list-toolbar-component', + templateUrl: './annotations_list_toolbar_component.ng.html', + styleUrls: ['./annotations_list_toolbar_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AnnotationsListToolbarComponent { + @Input() numAnnotations!: number; + @Input() expanded!: boolean; + @Input() selectedAnnotations!: string[]; + @Input() annotationsExpanded!: boolean; + @Input() showCounts!: boolean; + @Input() showHidden!: boolean; + @Output() onFlagAnnotations = new EventEmitter(); + @Output() onHideAnnotations = new EventEmitter(); + @Output() onToggleExpanded = new EventEmitter(); + @Output() onToggleShowCounts = new EventEmitter(); + @Output() onToggleShowHidden = new EventEmitter(); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_list_toolbar_container.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_list_toolbar_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..3b97db0aba84f588df6ecfc24e0941334856a68b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_list_toolbar_container.ts @@ -0,0 +1,103 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, ChangeDetectionStrategy, Input} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {State} from '../../../../../app_state'; +import {map} from 'rxjs/operators'; +import * as npmiActions from '../../../actions'; + +import { + getSelectedAnnotations, + getAnnotationsExpanded, + getShowCounts, + getAnnotationsRegex, + getShowHiddenAnnotations, +} from '../../../store'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'npmi-annotations-list-toolbar', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AnnotationsListToolbarContainer { + @Input() numAnnotations!: number; + @Input() expanded!: boolean; + readonly selectedAnnotations$ = this.store.select(getSelectedAnnotations); + readonly annotationsExpanded$ = this.store.select(getAnnotationsExpanded); + readonly showCounts$ = this.store.select(getShowCounts); + readonly showHidden$ = this.store.select(getShowHiddenAnnotations); + readonly annotationsFilter$ = this.store.select(getAnnotationsRegex); + readonly isAnnotationsFilterValid$ = this.annotationsFilter$.pipe( + map((filterString) => { + try { + return Boolean(new RegExp(filterString)); + } catch (err) { + return false; + } + }) + ); + + constructor(private readonly store: Store) {} + + filterChange(filter: string) { + this.store.dispatch( + npmiActions.npmiAnnotationsRegexChanged({regex: filter}) + ); + } + + flagAnnotations(annotations: string[]) { + this.store.dispatch( + npmiActions.npmiToggleAnnotationFlags({ + annotations, + }) + ); + } + + hideAnnotations(annotations: string[]) { + this.store.dispatch( + npmiActions.npmiToggleAnnotationsHidden({ + annotations, + }) + ); + } + + toggleExpanded() { + this.store.dispatch(npmiActions.npmiToggleAnnotationsExpanded()); + } + + toggleShowCounts() { + this.store.dispatch(npmiActions.npmiToggleShowCounts()); + } + + toggleShowHidden() { + this.store.dispatch(npmiActions.npmiToggleShowHiddenAnnotations()); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_list_toolbar_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_list_toolbar_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..9c341c15d64f100b0882370b23b755184505e57a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_list_toolbar_module.ts @@ -0,0 +1,42 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {FormsModule} from '@angular/forms'; + +import {MatButtonModule} from '@angular/material/button'; +import {MatIconModule} from '@angular/material/icon'; +import {MatSlideToggleModule} from '@angular/material/slide-toggle'; + +import {AnnotationsListToolbarComponent} from './annotations_list_toolbar_component'; +import {AnnotationsListToolbarContainer} from './annotations_list_toolbar_container'; +import {AnnotationsSearchModule} from './annotations_search/annotations_search_module'; + +@NgModule({ + declarations: [ + AnnotationsListToolbarComponent, + AnnotationsListToolbarContainer, + ], + imports: [ + CommonModule, + FormsModule, + MatIconModule, + MatButtonModule, + MatSlideToggleModule, + AnnotationsSearchModule, + ], + exports: [AnnotationsListToolbarContainer], +}) +export class AnnotationsListToolbarModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_list_toolbar_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_list_toolbar_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..aed6932c148744169db70d708ca1f6d4d82f5be2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_list_toolbar_test.ts @@ -0,0 +1,195 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; + +import {Store, Action} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {State} from '../../../../../app_state'; +import {AnnotationsListToolbarComponent} from './annotations_list_toolbar_component'; +import {AnnotationsListToolbarContainer} from './annotations_list_toolbar_container'; +import {appStateFromNpmiState, createNpmiState} from '../../../testing'; +import * as npmiActions from '../../../actions'; +import {getSelectedAnnotations} from '../../../store'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('Npmi Annotations List Toolbar Container', () => { + let store: MockStore; + let dispatchedActions: Action[]; + const css = { + TITLE: By.css('.annotations-title'), + BUTTON: By.css('button'), + ICON: By.css('mat-icon'), + EXPAND_BUTTON: By.css('.expand-button'), + TOGGLE: By.css('mat-slide-toggle'), + ANNOTATIONS_SEARCH: By.css('npmi-annotations-search'), + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ + AnnotationsListToolbarComponent, + AnnotationsListToolbarContainer, + ], + providers: [ + provideMockStore({ + initialState: appStateFromNpmiState(createNpmiState()), + }), + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + + dispatchedActions = []; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + dispatchedActions.push(action); + }); + }); + + it('renders toolbar in non-expanded state', () => { + const fixture = TestBed.createComponent(AnnotationsListToolbarContainer); + fixture.componentInstance.numAnnotations = 3; + fixture.componentInstance.expanded = false; + fixture.detectChanges(); + + const title = fixture.debugElement.query(css.TITLE); + expect(title).toBeTruthy(); + expect(title.nativeElement.textContent.trim()).toBe('Annotations (3)'); + + const buttons = fixture.debugElement.queryAll(css.BUTTON); + expect(buttons.length).toBe(1); + + const expandButton = fixture.debugElement.query(css.EXPAND_BUTTON); + expect(expandButton).toBeTruthy(); + + const toggles = fixture.debugElement.queryAll(css.TOGGLE); + expect(toggles.length).toBe(0); + + const annotationsSearch = fixture.debugElement.query( + css.ANNOTATIONS_SEARCH + ); + expect(annotationsSearch).toBeNull(); + }); + + it('renders toolbar in expanded state with no annotations selected', () => { + const fixture = TestBed.createComponent(AnnotationsListToolbarContainer); + fixture.componentInstance.numAnnotations = 3; + fixture.componentInstance.expanded = true; + fixture.detectChanges(); + + const title = fixture.debugElement.query(css.TITLE); + expect(title).toBeTruthy(); + expect(title.nativeElement.textContent.trim()).toBe('Annotations (3)'); + + const buttons = fixture.debugElement.queryAll(css.BUTTON); + expect(buttons.length).toBe(3); + expect(buttons[0].nativeElement.disabled).toBeTrue(); + expect(buttons[1].nativeElement.disabled).toBeTrue(); + + const expandButton = fixture.debugElement.query(css.EXPAND_BUTTON); + expect(expandButton).toBeTruthy(); + + const toggles = fixture.debugElement.queryAll(css.TOGGLE); + expect(toggles.length).toBe(2); + + const annotationsSearch = fixture.debugElement.query( + css.ANNOTATIONS_SEARCH + ); + expect(annotationsSearch).toBeTruthy(); + }); + + it('renders toolbar in expanded state with annotations selected', () => { + store.overrideSelector(getSelectedAnnotations, ['test', 'test2']); + const fixture = TestBed.createComponent(AnnotationsListToolbarContainer); + fixture.componentInstance.expanded = true; + fixture.detectChanges(); + + const buttons = fixture.debugElement.queryAll(css.BUTTON); + expect(buttons.length).toBe(3); + expect(buttons[0].nativeElement.disabled).toBeFalse(); + expect(buttons[1].nativeElement.disabled).toBeFalse(); + }); + + describe('interacting with flagging and hiding', () => { + it('dispatches action when annotations are flagged', () => { + store.overrideSelector(getSelectedAnnotations, ['test', 'test2']); + const fixture = TestBed.createComponent(AnnotationsListToolbarContainer); + fixture.componentInstance.expanded = true; + fixture.detectChanges(); + + const buttons = fixture.debugElement.queryAll(css.BUTTON); + buttons[0].nativeElement.click(); + expect(dispatchedActions).toEqual([ + npmiActions.npmiToggleAnnotationFlags({annotations: ['test', 'test2']}), + ]); + }); + + it('dispatches action when annotations are hidden', () => { + store.overrideSelector(getSelectedAnnotations, ['test', 'test2']); + const fixture = TestBed.createComponent(AnnotationsListToolbarContainer); + fixture.componentInstance.expanded = true; + fixture.detectChanges(); + + const buttons = fixture.debugElement.queryAll(css.BUTTON); + buttons[1].nativeElement.click(); + expect(dispatchedActions).toEqual([ + npmiActions.npmiToggleAnnotationsHidden({ + annotations: ['test', 'test2'], + }), + ]); + }); + }); + + it('dispatches toggleExpanded when toggled', () => { + const fixture = TestBed.createComponent(AnnotationsListToolbarContainer); + fixture.detectChanges(); + + const expandButton = fixture.debugElement.query(css.EXPAND_BUTTON); + expandButton.nativeElement.click(); + + expect(dispatchedActions).toEqual([ + npmiActions.npmiToggleAnnotationsExpanded(), + ]); + }); + + describe('interacting with toggles', () => { + it('dispatches toggleShowCounts when toggled', () => { + const fixture = TestBed.createComponent(AnnotationsListToolbarContainer); + fixture.componentInstance.expanded = true; + fixture.detectChanges(); + + const toggles = fixture.debugElement.queryAll(css.TOGGLE); + toggles[0].triggerEventHandler('change', null); + + expect(dispatchedActions).toEqual([npmiActions.npmiToggleShowCounts()]); + }); + + it('dispatches toggleShowHidden when toggled', () => { + const fixture = TestBed.createComponent(AnnotationsListToolbarContainer); + fixture.componentInstance.expanded = true; + fixture.detectChanges(); + + const toggles = fixture.debugElement.queryAll(css.TOGGLE); + toggles[1].triggerEventHandler('change', null); + + expect(dispatchedActions).toEqual([ + npmiActions.npmiToggleShowHiddenAnnotations(), + ]); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..ec97de01e7a090087320183bb005daa32d132264 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/BUILD @@ -0,0 +1,66 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "annotations_search_component_styles", + src = "annotations_search_component.scss", +) + +ng_module( + name = "annotations_search", + srcs = [ + "annotations_search_component.ts", + "annotations_search_container.ts", + "annotations_search_module.ts", + ], + assets = [ + "annotations_search_component.ng.html", + ":annotations_search_component_styles", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/angular:expect_angular_material_input", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "@npm//@angular/core", + "@npm//@angular/forms", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "annotations_search_test_lib", + testonly = True, + srcs = [ + "annotations_search_test.ts", + ], + deps = [ + ":annotations_search", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/angular:expect_angular_material_input", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/testing", + "//tensorboard/webapp/testing:mat_icon", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@angular/forms", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/annotations_search_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/annotations_search_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..95eddd0741bd0985a4e3b363b8c546943c4ae100 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/annotations_search_component.ng.html @@ -0,0 +1,30 @@ + + + + + diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/annotations_search_component.scss b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/annotations_search_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..22d7b6b60674bf30ffaed4e222b24d9cca12e78f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/annotations_search_component.scss @@ -0,0 +1,36 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +:host { + display: flex; + position: relative; + + &:not(.valid) { + $_error-color: mat-color($tb-warn, 800); + color: $_error-color; + + input { + caret-color: currentColor; + } + + .error-icon { + color: $_error-color; + // Allow the autocomplete width calculation to ignore the icon size. + position: absolute; + right: 0; + } + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/annotations_search_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/annotations_search_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..2114a1259fd68394068f3f2affeb5e489d2f9f2a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/annotations_search_component.ts @@ -0,0 +1,34 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + Input, + Output, + EventEmitter, + HostBinding, +} from '@angular/core'; + +@Component({ + selector: 'npmi-annotations-search-component', + templateUrl: './annotations_search_component.ng.html', + styleUrls: ['./annotations_search_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AnnotationsSearchComponent { + @Input() regexFilterValue!: string; + @Output() onRegexFilterValueChange = new EventEmitter(); + @HostBinding('class.valid') @Input() isRegexFilterValid!: boolean; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/annotations_search_container.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/annotations_search_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..143683c9a1e7ec35c05a52cb6e23fd0d8fb2c5ec --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/annotations_search_container.ts @@ -0,0 +1,57 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, ChangeDetectionStrategy} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {State} from '../../../../../../app_state'; +import {map} from 'rxjs/operators'; +import * as npmiActions from '../../../../actions'; + +import {getAnnotationsRegex} from '../../../../store'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'npmi-annotations-search', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AnnotationsSearchContainer { + readonly annotationsFilter$ = this.store.select(getAnnotationsRegex); + readonly isAnnotationsFilterValid$ = this.annotationsFilter$.pipe( + map((filterString) => { + try { + // tslint:disable-next-line:no-unused-expression Check for validity of filter. + new RegExp(filterString); + return true; + } catch (err) { + return false; + } + }) + ); + + constructor(private readonly store: Store) {} + + filterChange(filter: string) { + this.store.dispatch( + npmiActions.npmiAnnotationsRegexChanged({regex: filter}) + ); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/annotations_search_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/annotations_search_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..83b0fcc4e6b8fb5a325e1ac9857f5a69226c7cfa --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/annotations_search_module.ts @@ -0,0 +1,30 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {FormsModule} from '@angular/forms'; + +import {MatIconModule} from '@angular/material/icon'; +import {MatInputModule} from '@angular/material/input'; + +import {AnnotationsSearchComponent} from './annotations_search_component'; +import {AnnotationsSearchContainer} from './annotations_search_container'; + +@NgModule({ + declarations: [AnnotationsSearchComponent, AnnotationsSearchContainer], + imports: [CommonModule, FormsModule, MatIconModule, MatInputModule], + exports: [AnnotationsSearchContainer], +}) +export class AnnotationsSearchModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/annotations_search_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/annotations_search_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..5cd900af806bce0515a97db174e277c259446375 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/annotations_list_toolbar/annotations_search/annotations_search_test.ts @@ -0,0 +1,102 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * Unit tests for the Annotations Search. + */ +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; +import {FormsModule} from '@angular/forms'; +import {CommonModule} from '@angular/common'; + +import {MatInputModule} from '@angular/material/input'; + +import {Action, Store} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {State} from '../../../../../../app_state'; +import * as npmiActions from '../../../../actions'; +import {appStateFromNpmiState, createNpmiState} from '../../../../testing'; +import {AnnotationsSearchContainer} from './annotations_search_container'; +import {AnnotationsSearchComponent} from './annotations_search_component'; +import {getAnnotationsRegex} from '../../../../store'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('Npmi Annotations Search Container', () => { + let store: MockStore; + let dispatchedActions: Action[]; + const css = { + ERROR_ICON: By.css('.error-icon'), + INPUT: By.css('input'), + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [AnnotationsSearchComponent, AnnotationsSearchContainer], + imports: [CommonModule, FormsModule, MatInputModule], + providers: [ + provideMockStore({ + initialState: appStateFromNpmiState(createNpmiState()), + }), + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + + store = TestBed.inject>(Store) as MockStore; + + dispatchedActions = []; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + dispatchedActions.push(action); + }); + }); + + it('renders npmi annotations search component', () => { + const fixture = TestBed.createComponent(AnnotationsSearchContainer); + fixture.detectChanges(); + + const filterDiv = fixture.debugElement.query(css.INPUT); + expect(filterDiv).toBeTruthy(); + + expect(fixture.debugElement.query(css.ERROR_ICON)).toBeNull(); + }); + + describe('input interaction', () => { + it('dispatches changeAnnotationsRegex when typing on input', () => { + const fixture = TestBed.createComponent(AnnotationsSearchContainer); + fixture.detectChanges(); + + const input = fixture.debugElement.query(css.INPUT); + input.nativeElement.focus(); + fixture.detectChanges(); + + input.nativeElement.value = 'a'; + input.nativeElement.dispatchEvent(new InputEvent('input', {data: 'a'})); + fixture.detectChanges(); + + expect(dispatchedActions).toEqual([ + npmiActions.npmiAnnotationsRegexChanged({regex: 'a'}), + ]); + }); + }); + + it('shows error icon for an invalid regex', () => { + store.overrideSelector(getAnnotationsRegex, '*'); + const fixture = TestBed.createComponent(AnnotationsSearchContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.query(css.ERROR_ICON)).not.toBeNull(); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..8b15e3a780d6e0cf33799bb23b3f3a29f54ee59f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/BUILD @@ -0,0 +1,62 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "header_component_styles", + src = "header_component.scss", +) + +ng_module( + name = "header", + srcs = [ + "header_component.ts", + "header_container.ts", + "header_module.ts", + ], + assets = [ + ":header_component_styles", + "header_component.ng.html", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_material_checkbox", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/util:metric_type", + "@npm//@angular/core", + "@npm//@angular/forms", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "header_test_lib", + testonly = True, + srcs = [ + "header_test.ts", + ], + deps = [ + ":header", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/testing", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/header_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/header_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..4bb04d95fbffa2c45a3d0b1557ea641e379056e1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/header_component.ng.html @@ -0,0 +1,43 @@ + +
    + +
    +
    +
    +
    +
    + {{stripMetric(metric)}} + +
    +
    +
    +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/header_component.scss b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/header_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..c50f20be6534c7c9fe8958e826127fabc186acc1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/header_component.scss @@ -0,0 +1,53 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +:host { + border-bottom: 2px solid mat-color($tb-foreground, border); + display: flex; + height: 28px; + align-items: flex-end; + margin-top: 8px; +} + +.annotations-header-containers { + display: flex; + font-size: 0.9em; + font-weight: 500; + flex-grow: 1; +} + +.header-column { + flex: 1 1; +} + +.header-container { + display: inline-block; +} + +.header-clickable { + cursor: pointer; + display: flex; + outline: none; +} + +.toggle-all-container { + margin-left: 10px; + width: 90px; +} + +.sort-icon { + height: 16px; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/header_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/header_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..f62e46c856be58a60655aa3d96017b1f4e6fbe39 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/header_component.ts @@ -0,0 +1,43 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + Input, + Output, + EventEmitter, +} from '@angular/core'; +import {stripMetricString} from '../../../util/metric_type'; +import {AnnotationSort, SortOrder} from '../../../store/npmi_types'; + +@Component({ + selector: 'npmi-annotations-list-header-component', + templateUrl: './header_component.ng.html', + styleUrls: ['./header_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class HeaderComponent { + @Input() numAnnotations!: number; + @Input() selectedAnnotations!: string[]; + @Input() activeMetrics!: string[]; + @Input() sort!: AnnotationSort; + @Output() onChangeSort = new EventEmitter(); + @Output() onAllAnnotationsToggled = new EventEmitter(); + readonly SortOrder = SortOrder; + + stripMetric(metric: string): string { + return stripMetricString(metric); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/header_container.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/header_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..d776e73ee64986c7d297b10b8ca9c6bfa9b5a02c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/header_container.ts @@ -0,0 +1,67 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, ChangeDetectionStrategy, Input} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {State} from '../../../../../app_state'; + +import {getSelectedAnnotations, getAnnotationSort} from '../../../store'; +import {AnnotationDataListing} from './../../../store/npmi_types'; +import * as npmiActions from '../../../actions'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'npmi-annotations-list-header', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class HeaderContainer { + @Input() numAnnotations!: number; + @Input() annotations!: AnnotationDataListing; + @Input() activeMetrics!: string[]; + readonly selectedAnnotations$ = this.store.select(getSelectedAnnotations); + readonly annotationSort$ = this.store.select(getAnnotationSort); + + constructor(private readonly store: Store) {} + + changeSort(newMetric: string) { + this.store.dispatch( + npmiActions.npmiChangeAnnotationSort({metric: newMetric}) + ); + } + + allAnnotationsToggled(checked: boolean) { + if (checked) { + this.store.dispatch( + npmiActions.npmiSetSelectedAnnotations({ + annotations: Object.keys(this.annotations), + }) + ); + } else { + this.store.dispatch( + npmiActions.npmiSetSelectedAnnotations({annotations: []}) + ); + } + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/header_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/header_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..4c0d2fc5106f2bbee17065f33d6da5e9bf108a1b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/header_module.ts @@ -0,0 +1,30 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {FormsModule} from '@angular/forms'; + +import {MatCheckboxModule} from '@angular/material/checkbox'; +import {MatIconModule} from '@angular/material/icon'; + +import {HeaderComponent} from './header_component'; +import {HeaderContainer} from './header_container'; + +@NgModule({ + declarations: [HeaderComponent, HeaderContainer], + imports: [CommonModule, FormsModule, MatCheckboxModule, MatIconModule], + exports: [HeaderContainer], +}) +export class HeaderModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/header_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/header_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..c20cdd48796f7b2e9fa02d62c8fb9241a8ee9c39 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/header/header_test.ts @@ -0,0 +1,174 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed, ComponentFixture} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; + +import {Store, Action} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {State} from '../../../../../app_state'; +import {HeaderComponent} from './header_component'; +import {HeaderContainer} from './header_container'; +import * as npmiActions from '../../../actions'; +import {SortOrder} from '../../../store/npmi_types'; +import {appStateFromNpmiState, createNpmiState} from '../../../testing'; +import {getAnnotationSort} from '../../../store'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('Npmi Annotations List Header Container', () => { + let store: MockStore; + let dispatchedActions: Action[]; + let fixture: ComponentFixture; + const css = { + CHECKBOX_CONTAINER: By.css('.toggle-all-container'), + ANNOTATIONS_HEADER_CONTAINER: By.css('.annotations-header-containers'), + CHECKBOX: By.css('mat-checkbox'), + HEADER: By.css('.header-clickable'), + UP_ICON: By.css('.up-icon'), + DOWN_ICON: By.css('.down-icon'), + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [HeaderComponent, HeaderContainer], + imports: [], + providers: [ + provideMockStore({ + initialState: appStateFromNpmiState(createNpmiState()), + }), + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + + dispatchedActions = []; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + dispatchedActions.push(action); + }); + + fixture = TestBed.createComponent(HeaderContainer); + fixture.componentInstance.activeMetrics = [ + 'nPMI@test', + 'nPMI@test2', + 'nPMI_diff@(test-test2)', + ]; + fixture.componentInstance.numAnnotations = 2; + fixture.componentInstance.annotations = { + annotation_1: [ + { + annotation: 'annotation_1', + metric: 'test', + run: 'test', + nPMIValue: 1.0, + countValue: 100, + }, + ], + annotation_2: [ + { + annotation: 'annotation_2', + metric: 'test', + run: 'test', + nPMIValue: 1.0, + countValue: 100, + }, + ], + }; + fixture.detectChanges(); + }); + + it('renders checkbox and container', () => { + const checkboxContainer = fixture.debugElement.query( + css.CHECKBOX_CONTAINER + ); + expect(checkboxContainer).toBeTruthy(); + + const checkbox = fixture.debugElement.query(css.CHECKBOX); + expect(checkbox.nativeElement.checked).toBeFalsy(); + + const headerContainer = fixture.debugElement.query( + css.ANNOTATIONS_HEADER_CONTAINER + ); + expect(headerContainer).toBeTruthy(); + + const headerMetrics = fixture.debugElement.queryAll(css.HEADER); + expect(headerMetrics[0].nativeElement.textContent.trim()).toBe('test'); + expect(headerMetrics[1].nativeElement.textContent.trim()).toBe('test2'); + expect(headerMetrics[2].nativeElement.textContent.trim()).toBe( + '(test-test2)' + ); + }); + + it('renders down arrow when sort active and down', () => { + store.overrideSelector(getAnnotationSort, { + metric: 'nPMI@test', + order: SortOrder.DOWN, + }); + fixture = TestBed.createComponent(HeaderContainer); + fixture.componentInstance.activeMetrics = [ + 'nPMI@test', + 'nPMI@test2', + 'nPMI_diff@(test-test2)', + ]; + fixture.detectChanges(); + const headerMetric = fixture.debugElement.query(css.HEADER); + expect(headerMetric.nativeElement.textContent.trim()).toBe('test'); + + const sortIcon = headerMetric.query(css.DOWN_ICON); + expect(sortIcon).toBeTruthy(); + }); + + it('renders sort up arrow when sort active and up', () => { + store.overrideSelector(getAnnotationSort, { + metric: 'nPMI@test', + order: SortOrder.UP, + }); + fixture = TestBed.createComponent(HeaderContainer); + fixture.componentInstance.activeMetrics = [ + 'nPMI@test', + 'nPMI@test2', + 'nPMI_diff@(test-test2)', + ]; + fixture.detectChanges(); + const headerMetric = fixture.debugElement.query(css.HEADER); + expect(headerMetric.nativeElement.textContent.trim()).toBe('test'); + + const sortIcon = headerMetric.query(css.UP_ICON); + expect(sortIcon).toBeTruthy(); + }); + + it('dispatches npmiSetSelectedAnnotations action with all annotations when checkbox is clicked', () => { + const checkbox = fixture.debugElement.query(css.CHECKBOX); + checkbox.triggerEventHandler('change', {checked: true}); + fixture.detectChanges(); + expect(dispatchedActions).toEqual([ + npmiActions.npmiSetSelectedAnnotations({ + annotations: ['annotation_1', 'annotation_2'], + }), + ]); + }); + + it('dispatches npmiChangeannotationSort action when metric is clicked', () => { + const headerMetric = fixture.debugElement.query(css.HEADER); + headerMetric.nativeElement.click(); + fixture.detectChanges(); + expect(dispatchedActions).toEqual([ + npmiActions.npmiChangeAnnotationSort({ + metric: 'nPMI@test', + }), + ]); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..75f349c7d037e375b42535a7a711f9f95965b474 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/BUILD @@ -0,0 +1,43 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "legend_component_styles", + src = "legend_component.scss", +) + +ng_module( + name = "legend", + srcs = [ + "legend_component.ts", + "legend_module.ts", + ], + assets = [ + "legend_component.ng.html", + ":legend_component_styles", + ], + deps = [ + "//tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element", + "@npm//@angular/core", + ], +) + +tf_ts_library( + name = "legend_test_lib", + testonly = True, + srcs = [ + "legend_test.ts", + ], + deps = [ + ":legend", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/core/testing", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..de6a9f1db6841b17ab05f621d9bb0b3754ff6226 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_component.ng.html @@ -0,0 +1,40 @@ + + + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_component.scss b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..58127e09a33c161382251b27c98209ccf1cbb15d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_component.scss @@ -0,0 +1,18 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +:host { + display: flex; + padding: 0 16px; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..d2e7be9bd3cfd3056545f6a775ec31f7304cd34f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_component.ts @@ -0,0 +1,22 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component} from '@angular/core'; + +@Component({ + selector: 'npmi-annotations-list-legend', + templateUrl: './legend_component.ng.html', + styleUrls: ['./legend_component.css'], +}) +export class LegendComponent {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..b8d30a4b5405f1741aa253dd7589a78e23aab3b1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element/BUILD @@ -0,0 +1,48 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "legend_element_component_styles", + src = "legend_element_component.scss", +) + +ng_module( + name = "legend_element", + srcs = [ + "legend_element_component.ts", + "legend_element_module.ts", + ], + assets = [ + "legend_element_component.ng.html", + ":legend_element_component_styles", + ], + deps = [ + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/third_party:d3", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "legend_element_test_lib", + testonly = True, + srcs = [ + "legend_element_test.ts", + ], + deps = [ + ":legend_element", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/core/testing", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element/legend_element_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element/legend_element_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..01a2c1209235e1db78cbde9fe60eea966deaab98 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element/legend_element_component.ng.html @@ -0,0 +1,18 @@ + + +
    {{text}}
    diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element/legend_element_component.scss b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element/legend_element_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..7a71bea07777a1f61dac257454415ee2f621e1d0 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element/legend_element_component.scss @@ -0,0 +1,29 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +:host { + align-items: center; + display: flex; + padding-right: 10px; +} + +.legend-element-title { + font-size: 0.8em; + padding-left: 5px; +} + +.glyph { + width: 10px; + height: 10px; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element/legend_element_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element/legend_element_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..46350e3d810ddaf6d9947b8d28b6d863a53e82a2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element/legend_element_component.ts @@ -0,0 +1,73 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + Input, + AfterViewInit, + ViewChild, + ElementRef, +} from '@angular/core'; +import * as d3 from '../../../../../../third_party/d3'; + +@Component({ + selector: 'npmi-legend-element', + templateUrl: './legend_element_component.ng.html', + styleUrls: ['./legend_element_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class LegendElementComponent implements AfterViewInit { + @Input() text!: string; + @Input() color!: string; + @Input() shape!: string; + @ViewChild('glyph', {static: true, read: ElementRef}) + private readonly glyphSVG!: ElementRef; + // Drawing containers + private svg: any; + private mainContainer: any; + + ngAfterViewInit(): void { + this.svg = d3.select(this.glyphSVG.nativeElement); + this.mainContainer = this.svg.append('g'); + this.draw(); + } + + private draw() { + if (this.shape == 'circle') { + this.mainContainer + .append('circle') + .attr('fill', this.color) + .attr('stroke', 'black') + .attr('cx', 5) + .attr('cy', 5) + .attr('r', 5); + } else if (this.shape == 'bar') { + this.mainContainer + .append('rect') + .attr('fill', this.color) + .attr('x', 0) + .attr('y', 0) + .attr('width', 10) + .attr('height', 10); + } else if (this.shape == 'runIndicator') { + this.mainContainer + .append('g') + .append('path') + .attr('fill', this.color) + .attr('stroke', 'black') + .attr('d', 'M 2 0 L 10 0 L 7 5 L 10 10 L 2 10 Z'); + } + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element/legend_element_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element/legend_element_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..6272dac2b1a48718f1c19d0fa041fa58561c721f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element/legend_element_module.ts @@ -0,0 +1,25 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; + +import {LegendElementComponent} from './legend_element_component'; + +@NgModule({ + declarations: [LegendElementComponent], + imports: [CommonModule], + exports: [LegendElementComponent], +}) +export class LegendElementModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element/legend_element_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element/legend_element_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..cf8137f5bde48e9653c6a359bf314e96065ecdb6 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_element/legend_element_test.ts @@ -0,0 +1,85 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed, ComponentFixture} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; + +import {LegendElementComponent} from './legend_element_component'; + +describe('Npmi Annotations Legend Element Container', () => { + let fixture: ComponentFixture; + const css = { + GLYPH: By.css('svg'), + TITLE: By.css('.legend-element-title'), + CIRCLE: By.css('circle'), + BAR: By.css('rect'), + RUN: By.css('path'), + }; + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [LegendElementComponent], + imports: [], + providers: [], + }).compileComponents(); + + fixture = TestBed.createComponent(LegendElementComponent); + fixture.componentInstance.text = 'test'; + fixture.componentInstance.color = 'red'; + }); + + it('renders circle', () => { + fixture.componentInstance.shape = 'circle'; + fixture.detectChanges(); + + const glyph = fixture.debugElement.query(css.GLYPH); + expect(glyph).toBeTruthy(); + + const circle = fixture.debugElement.query(css.CIRCLE); + expect(circle).toBeTruthy(); + + const title = fixture.debugElement.query(css.TITLE); + expect(title).toBeTruthy(); + expect(title.nativeElement.textContent.trim()).toBe('test'); + }); + + it('renders bar', () => { + fixture.componentInstance.shape = 'bar'; + fixture.detectChanges(); + + const glyph = fixture.debugElement.query(css.GLYPH); + expect(glyph).toBeTruthy(); + + const bar = fixture.debugElement.query(css.BAR); + expect(bar).toBeTruthy(); + + const title = fixture.debugElement.query(css.TITLE); + expect(title).toBeTruthy(); + expect(title.nativeElement.textContent.trim()).toBe('test'); + }); + + it('renders run glyph', () => { + fixture.componentInstance.shape = 'runIndicator'; + fixture.detectChanges(); + + const glyph = fixture.debugElement.query(css.GLYPH); + expect(glyph).toBeTruthy(); + + const run = fixture.debugElement.query(css.RUN); + expect(run).toBeTruthy(); + + const title = fixture.debugElement.query(css.TITLE); + expect(title).toBeTruthy(); + expect(title.nativeElement.textContent.trim()).toBe('test'); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..0fb45faed74f35622fd863de794fbcde4dd54f06 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_module.ts @@ -0,0 +1,25 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; + +import {LegendComponent} from './legend_component'; +import {LegendElementModule} from './legend_element/legend_element_module'; + +@NgModule({ + declarations: [LegendComponent], + imports: [LegendElementModule], + exports: [LegendComponent], +}) +export class LegendModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..703131218bf1d98b55961337f56cb5a2999f7b8f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/annotations_list/legend/legend_test.ts @@ -0,0 +1,38 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; + +import {LegendComponent} from './legend_component'; + +describe('Npmi Annotations Legend Container', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [LegendComponent], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + }); + + it('renders annotations legend', () => { + const fixture = TestBed.createComponent(LegendComponent); + fixture.detectChanges(); + + const annotationsLegendElements = fixture.debugElement.queryAll( + By.css('npmi-legend-element') + ); + expect(annotationsLegendElements.length).toBe(4); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..7f2f590baa970d2f9fd9506b4b5cc6a28bd772fc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/BUILD @@ -0,0 +1,57 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "data_selection_component_styles", + src = "data_selection_component.scss", +) + +ng_module( + name = "data_selection", + srcs = [ + "data_selection_component.ts", + "data_selection_module.ts", + ], + assets = [ + ":data_selection_component_styles", + "data_selection_component.ng.html", + ], + deps = [ + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic", + "//tensorboard/webapp/plugins/npmi/views/data_selection/metric_search", + "//tensorboard/webapp/plugins/npmi/views/data_selection/results_download", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "data_selection_test_lib", + testonly = True, + srcs = [ + "data_selection_test.ts", + ], + deps = [ + ":data_selection", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/testing", + "//tensorboard/webapp/testing:mat_icon", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/data_selection_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/data_selection_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..9e8628c694c5710611dcf0397b312975c65b7681 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/data_selection_component.ng.html @@ -0,0 +1,21 @@ + +
    + + +
    + diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/data_selection_component.scss b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/data_selection_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..ba789756ee7818a8d9ede47c00cb4e4f252b97e9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/data_selection_component.scss @@ -0,0 +1,32 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +:host { + display: flex; + flex-direction: column; + background-color: #fff; + border: 1px solid mat-color($tb-foreground, border); + padding: 10px 20px; +} + +.data-selection { + display: flex; + align-items: center; +} + +.metrics-selector { + flex: 1 1; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/data_selection_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/data_selection_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..8a52bcef0a526b0bbb2e74ad3c1e63b4fc1d1ce0 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/data_selection_component.ts @@ -0,0 +1,23 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component, Input} from '@angular/core'; + +@Component({ + selector: 'npmi-data-selection', + templateUrl: './data_selection_component.ng.html', + styleUrls: ['./data_selection_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class DataSelectionComponent {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/data_selection_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/data_selection_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..8ee641f4b569ff71fa0747887469e2e7e2257dd3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/data_selection_module.ts @@ -0,0 +1,33 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; + +import {MetricSearchModule} from './metric_search/metric_search_module'; +import {MetricArithmeticModule} from './metric_arithmetic/metric_arithmetic_module'; +import {ResultsDownloadModule} from './results_download/results_download_module'; +import {DataSelectionComponent} from './data_selection_component'; + +@NgModule({ + declarations: [DataSelectionComponent], + imports: [ + CommonModule, + MetricSearchModule, + MetricArithmeticModule, + ResultsDownloadModule, + ], + exports: [DataSelectionComponent], +}) +export class DataSelectionModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/data_selection_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/data_selection_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..062447026badbccef44771299d588cd2e981b7e2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/data_selection_test.ts @@ -0,0 +1,61 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * Unit tests for the data selection. + */ +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; + +import {Store} from '@ngrx/store'; +import {State} from '../../../../app_state'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {DataSelectionComponent} from './data_selection_component'; +import {appStateFromNpmiState, createNpmiState} from '../../testing'; +import {createState, createCoreState} from '../../../../core/testing'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('Npmi Data Selection Container', () => { + let store: MockStore; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [DataSelectionComponent], + imports: [], + providers: [ + provideMockStore({ + initialState: { + ...createState(createCoreState()), + ...appStateFromNpmiState(createNpmiState()), + }, + }), + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + }); + + it('renders npmi data selection component', () => { + const fixture = TestBed.createComponent(DataSelectionComponent); + fixture.detectChanges(); + + const metricSearchElement = fixture.debugElement.query( + By.css('npmi-metric-search') + ); + expect(metricSearchElement).toBeTruthy(); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..a4113f7251e580890f13ca5dae19fe509187fbb7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/BUILD @@ -0,0 +1,57 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "metric_arithmetic_component_styles", + src = "metric_arithmetic_component.scss", +) + +ng_module( + name = "metric_arithmetic", + srcs = [ + "metric_arithmetic_component.ts", + "metric_arithmetic_container.ts", + "metric_arithmetic_module.ts", + ], + assets = [ + ":metric_arithmetic_component_styles", + "metric_arithmetic_component.ng.html", + ], + deps = [ + "//tensorboard/webapp/angular:expect_angular_material_chips", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element", + "//tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_operator", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "metric_arithmetic_test_lib", + testonly = True, + srcs = [ + "metric_arithmetic_test.ts", + ], + deps = [ + ":metric_arithmetic", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/testing", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..8f43da774f687932e52ac22fef3a3729de91f25f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_component.ng.html @@ -0,0 +1,30 @@ + + +
    + + + + +
    +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_component.scss b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..5ea6e1aae7b9e1c6262ca7e79943268331a1c015 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_component.scss @@ -0,0 +1,20 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +:host { + align-items: center; + display: flex; + flex-direction: row; + flex-wrap: wrap; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..8ca5f1412b06c9380e47d3853429967b383a9f6c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_component.ts @@ -0,0 +1,27 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component, Input} from '@angular/core'; +import {ArithmeticElement, ArithmeticKind} from './../../../store/npmi_types'; + +@Component({ + selector: 'metric-arithmetic-component', + templateUrl: './metric_arithmetic_component.ng.html', + styleUrls: ['./metric_arithmetic_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MetricArithmeticComponent { + @Input() metricArithmetic!: ArithmeticElement[]; + readonly ArithmeticKind = ArithmeticKind; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_container.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..ad98f5f7c77a0ab5ac694b4e9924fb368e235190 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_container.ts @@ -0,0 +1,35 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, ChangeDetectionStrategy} from '@angular/core'; +import {select, Store} from '@ngrx/store'; +import {State} from '../../../store/npmi_types'; +import {getMetricArithmetic} from '../../../store'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'npmi-metric-arithmetic', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MetricArithmeticContainer { + readonly metricArithmetic$ = this.store.pipe(select(getMetricArithmetic)); + + constructor(private readonly store: Store) {} +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..7d500f545fa684a886e1060c8f21ea39713d3908 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/BUILD @@ -0,0 +1,68 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "metric_arithmetic_element_component_styles", + src = "metric_arithmetic_element_component.scss", +) + +ng_module( + name = "metric_arithmetic_element", + srcs = [ + "metric_arithmetic_element_component.ts", + "metric_arithmetic_element_container.ts", + "metric_arithmetic_element_module.ts", + ], + assets = [ + ":metric_arithmetic_element_component_styles", + "metric_arithmetic_element_component.ng.html", + ], + deps = [ + "//tensorboard/webapp/angular:expect_angular_material_chips", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/angular:expect_angular_material_input", + "//tensorboard/webapp/angular:expect_angular_material_tooltip", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "@npm//@angular/core", + "@npm//@angular/forms", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "metric_arithmetic_element_test_lib", + testonly = True, + srcs = [ + "metric_arithmetic_element_test.ts", + ], + deps = [ + ":metric_arithmetic_element", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_material_chips", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/angular:expect_angular_material_input", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/testing", + "//tensorboard/webapp/runs_legacy", + "//tensorboard/webapp/testing:mat_icon", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@angular/forms", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/metric_arithmetic_element_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/metric_arithmetic_element_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..13d09c62420917f659d8174fc542ae6b2c59a7ce --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/metric_arithmetic_element_component.ng.html @@ -0,0 +1,52 @@ + + + {{metric}} +
    + [ + + ; + + ] +
    + +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/metric_arithmetic_element_component.scss b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/metric_arithmetic_element_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..1103b7418dc8c0ebca68992cc58a4671f325619e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/metric_arithmetic_element_component.scss @@ -0,0 +1,50 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +.filter-chip { + align-items: center; + display: flex; + margin-left: 5px; +} + +.metric-arithmetic-element-range { + align-items: center; + background-color: mat-color($tb-background, card); + font-size: 0.8em; + height: 30px; + justify-content: center; + line-height: 30px; + padding: 0 5px; + margin-left: 5px; +} + +.input-field { + background-color: transparent; + border: none; + font-family: monospace; + font-size: 1.1em; + transition: width 1s; + + &:focus { + background-color: mat-color($tb-background, focused-button); + border: none; + outline: none; + } +} + +.value-invalid { + color: mat-color($tb-warn); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/metric_arithmetic_element_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/metric_arithmetic_element_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..33de0fe1c6e964cfe53c4eab8bfc62e31d494074 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/metric_arithmetic_element_component.ts @@ -0,0 +1,146 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + Input, + Output, + EventEmitter, + OnDestroy, + OnInit, + OnChanges, + SimpleChanges, +} from '@angular/core'; +import {Validators, FormControl, ValidationErrors} from '@angular/forms'; +import {takeUntil} from 'rxjs/operators'; +import {Subject} from 'rxjs'; + +@Component({ + selector: 'metric-arithmetic-element-component', + templateUrl: './metric_arithmetic_element_component.ng.html', + styleUrls: ['./metric_arithmetic_element_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MetricArithmeticElementComponent + implements OnInit, OnDestroy, OnChanges { + @Input() metric!: string; + @Input() filterValues!: {min: number; max: number}; + @Output() onRemove = new EventEmitter(); + @Output() onFilterChange = new EventEmitter<{min: number; max: number}>(); + focusMin = false; + focusMax = false; + private ngUnsubscribe = new Subject(); + minFormControl!: FormControl; + maxFormControl!: FormControl; + + ngOnInit() { + this.minFormControl = new FormControl(this.filterValues.min, [ + Validators.required, + Validators.min(-1.0), + Validators.max(1.0), + this.minValueValidator.bind(this), + ]); + this.maxFormControl = new FormControl(this.filterValues.max, [ + Validators.required, + Validators.min(-1.0), + Validators.max(1.0), + this.maxValueValidator.bind(this), + ]); + + this.minFormControl.valueChanges + .pipe(takeUntil(this.ngUnsubscribe)) + .subscribe(() => { + if (this.minFormControl.valid && this.maxFormControl.valid) { + this.onFilterChange.emit({ + min: parseFloat(this.minFormControl.value), + max: parseFloat(this.maxFormControl.value), + }); + } + }); + this.maxFormControl.valueChanges + .pipe(takeUntil(this.ngUnsubscribe)) + .subscribe(() => { + if (this.minFormControl.valid && this.maxFormControl.valid) { + this.onFilterChange.emit({ + min: parseFloat(this.minFormControl.value), + max: parseFloat(this.maxFormControl.value), + }); + } + }); + } + + ngOnChanges(changes: SimpleChanges) { + if (this.minFormControl && this.maxFormControl) { + this.minFormControl.setValue(this.filterValues.min, {emitEvent: false}); + this.maxFormControl.setValue(this.filterValues.max, {emitEvent: false}); + } + } + + ngOnDestroy() { + this.ngUnsubscribe.next(); + this.ngUnsubscribe.complete(); + } + + minValueValidator( + this: MetricArithmeticElementComponent, + control: FormControl + ): ValidationErrors | null { + if (!this.maxFormControl || control.value === 'NaN') { + return null; + } else if (isNaN(parseFloat(control.value))) { + return {value: 'the string you entered is neither NaN nor a number'}; + } else if ( + parseFloat(control.value) > parseFloat(this.maxFormControl.value) + ) { + return {value: 'the number you entered is larger than the max value'}; + } + return null; + } + + maxValueValidator( + this: MetricArithmeticElementComponent, + control: FormControl + ): ValidationErrors | null { + if (!this.minFormControl) { + return null; + } else if ( + // Max NaN only if min also NaN + this.minFormControl.value === 'NaN' && + control.value === 'NaN' + ) { + return null; + } else if (isNaN(parseFloat(control.value))) { + return {value: 'the string you entered is neither NaN nor a number'}; + } else if (control.value < this.minFormControl.value) { + return {value: 'the number you entered is smaller than the min value'}; + } + return null; + } + + getErrorDescription(errors: ValidationErrors | null): string { + if (errors) { + const firstKey = Object.keys(errors)[0]; + if (firstKey === 'required') { + return 'you did not enter anything'; + } else if (firstKey === 'min') { + return 'the number must be at least -1.0'; + } else if (firstKey === 'max') { + return 'the number is bigger than 1.0'; + } + return errors[firstKey]; + } + return ''; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/metric_arithmetic_element_container.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/metric_arithmetic_element_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..ebf0a3bc68c7ac5c2f7b28bdc6c8a83f62608242 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/metric_arithmetic_element_container.ts @@ -0,0 +1,80 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, ChangeDetectionStrategy, Input} from '@angular/core'; +import {select, Store} from '@ngrx/store'; + +import {map} from 'rxjs/operators'; + +import {State} from '../../../../store/npmi_types'; +import {getMetricFilters} from '../../../../store'; +import * as npmiActions from '../../../../actions'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'npmi-metric-arithmetic-element', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MetricArithmeticElementContainer { + @Input() metric!: string; + readonly filterValues$ = this.store.pipe(select(getMetricFilters)).pipe( + map((filters) => { + const filter = filters[this.metric]; + if (!filter) { + return {min: -1.0, max: 1.0}; + } + const min = filter.includeNaN + ? 'NaN' + : this.roundToThreeDecimalPoints(filter.min); + const max = + filter.max < filter.min + ? 'NaN' + : this.roundToThreeDecimalPoints(filter.max); + return {min: min, max: max}; + }) + ); + + constructor(private readonly store: Store) {} + + remove(metric: string) { + this.store.dispatch(npmiActions.npmiRemoveMetricFilter({metric: metric})); + } + + filterChange(newValues: {min: number; max: number}) { + const min = isNaN(newValues.min) ? -1 : newValues.min; + const max = isNaN(newValues.max) ? -2 : newValues.max; + const includeNaN = isNaN(newValues.min); + this.store.dispatch( + npmiActions.npmiChangeMetricFilter({ + metric: this.metric, + max: max, + min: min, + includeNaN: includeNaN, + }) + ); + } + + private roundToThreeDecimalPoints(value: number): number { + return Math.round((value + Number.EPSILON) * 1000) / 1000; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/metric_arithmetic_element_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/metric_arithmetic_element_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..2242b2e20cc4c63302a004960f7f7263e7fe87ff --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/metric_arithmetic_element_module.ts @@ -0,0 +1,40 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {FormsModule, ReactiveFormsModule} from '@angular/forms'; +import {MatIconModule} from '@angular/material/icon'; +import {MatChipsModule} from '@angular/material/chips'; +import {MatTooltipModule} from '@angular/material/tooltip'; + +import {MetricArithmeticElementComponent} from './metric_arithmetic_element_component'; +import {MetricArithmeticElementContainer} from './metric_arithmetic_element_container'; + +@NgModule({ + declarations: [ + MetricArithmeticElementComponent, + MetricArithmeticElementContainer, + ], + imports: [ + CommonModule, + FormsModule, + ReactiveFormsModule, + MatIconModule, + MatChipsModule, + MatTooltipModule, + ], + exports: [MetricArithmeticElementContainer], +}) +export class MetricArithmeticElementModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/metric_arithmetic_element_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/metric_arithmetic_element_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..dd5d8fc34398ead4fc2fa174569c3f3ff4a72483 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_element/metric_arithmetic_element_test.ts @@ -0,0 +1,345 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * Unit tests for the metric arithmetic element. + */ +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; +import {FormsModule, ReactiveFormsModule} from '@angular/forms'; + +import {MatInputModule} from '@angular/material/input'; +import {MatChipsModule} from '@angular/material/chips'; + +import {Action, Store} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {State} from '../../../../../../app_state'; +import {getMetricFilters} from '../../../../store/npmi_selectors'; +import * as npmiActions from '../../../../actions'; +import {appStateFromNpmiState, createNpmiState} from '../../../../testing'; +import {MetricArithmeticElementContainer} from './metric_arithmetic_element_container'; +import {MetricArithmeticElementComponent} from './metric_arithmetic_element_component'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('Npmi Metric Arithmetic Element Container', () => { + let store: MockStore; + let dispatchedActions: Action[]; + const css = { + FILTER_CHIP: By.css('.filter-chip'), + ELEMENT_REMOVE: By.css('.mat-chip-remove'), + INPUT: By.css('input'), + VALUE_INVALID: By.css('.value-invalid'), + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ + MetricArithmeticElementContainer, + MetricArithmeticElementComponent, + ], + imports: [ + FormsModule, + ReactiveFormsModule, + MatInputModule, + MatChipsModule, + ], + providers: [ + provideMockStore({ + initialState: appStateFromNpmiState(createNpmiState()), + }), + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + + store = TestBed.inject>(Store) as MockStore; + + dispatchedActions = []; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + dispatchedActions.push(action); + }); + store.overrideSelector(getMetricFilters, { + 'npmi@test': {max: 1.0, min: -1.0, includeNaN: false}, + }); + }); + + it('renders npmi metric arithmetic element component', () => { + const fixture = TestBed.createComponent(MetricArithmeticElementContainer); + fixture.componentInstance.metric = 'npmi@test'; + fixture.detectChanges(); + + const filterDiv = fixture.debugElement.query(css.FILTER_CHIP); + expect(filterDiv).toBeTruthy(); + }); + + it('removes metric on click on remove button', () => { + const fixture = TestBed.createComponent(MetricArithmeticElementContainer); + fixture.componentInstance.metric = 'npmi@test'; + fixture.detectChanges(); + + const removeButton = fixture.debugElement.query(css.ELEMENT_REMOVE); + removeButton.nativeElement.click(); + expect(dispatchedActions).toEqual([ + npmiActions.npmiRemoveMetricFilter({metric: 'npmi@test'}), + ]); + }); + + describe('input interaction', () => { + describe('min input', () => { + it('changes the filter when interacting with the input', () => { + const fixture = TestBed.createComponent( + MetricArithmeticElementContainer + ); + fixture.componentInstance.metric = 'npmi@test'; + fixture.detectChanges(); + + const inputs = fixture.debugElement.queryAll(css.INPUT); + const input = inputs[0]; + input.nativeElement.focus(); + fixture.detectChanges(); + + input.nativeElement.value = '0.2'; + input.nativeElement.dispatchEvent( + new InputEvent('input', {data: '0.2'}) + ); + fixture.detectChanges(); + + expect(dispatchedActions).toEqual([ + npmiActions.npmiChangeMetricFilter({ + metric: 'npmi@test', + max: 1.0, + min: 0.2, + includeNaN: false, + }), + ]); + }); + + it('changes the filter to NaN', () => { + const fixture = TestBed.createComponent( + MetricArithmeticElementContainer + ); + fixture.componentInstance.metric = 'npmi@test'; + fixture.detectChanges(); + + const inputs = fixture.debugElement.queryAll(css.INPUT); + const input = inputs[0]; + input.nativeElement.focus(); + fixture.detectChanges(); + + input.nativeElement.value = 'NaN'; + input.nativeElement.dispatchEvent( + new InputEvent('input', {data: 'NaN'}) + ); + fixture.detectChanges(); + + expect(dispatchedActions).toEqual([ + npmiActions.npmiChangeMetricFilter({ + metric: 'npmi@test', + max: 1.0, + min: -1.0, + includeNaN: true, + }), + ]); + }); + + it('does not change the filter when an incorrect value is entered', () => { + const fixture = TestBed.createComponent( + MetricArithmeticElementContainer + ); + fixture.componentInstance.metric = 'npmi@test'; + fixture.detectChanges(); + + const inputs = fixture.debugElement.queryAll(css.INPUT); + const input = inputs[0]; + input.nativeElement.focus(); + fixture.detectChanges(); + + input.nativeElement.value = '-'; + input.nativeElement.dispatchEvent(new InputEvent('input', {data: '-'})); + fixture.detectChanges(); + + expect(dispatchedActions).toEqual([]); + + const invalidInput = fixture.debugElement.query(css.VALUE_INVALID); + expect(invalidInput).toBeTruthy(); + }); + + it('does not change the filter when min is larger than max', () => { + store.overrideSelector(getMetricFilters, { + 'npmi@test': {max: 0.5, min: -1.0, includeNaN: false}, + }); + const fixture = TestBed.createComponent( + MetricArithmeticElementContainer + ); + fixture.componentInstance.metric = 'npmi@test'; + fixture.detectChanges(); + + const inputs = fixture.debugElement.queryAll(css.INPUT); + const input = inputs[0]; + input.nativeElement.focus(); + fixture.detectChanges(); + + input.nativeElement.value = '0.6'; + input.nativeElement.dispatchEvent( + new InputEvent('input', {data: '0.6'}) + ); + fixture.detectChanges(); + + expect(dispatchedActions).toEqual([]); + + const invalidInput = fixture.debugElement.query(css.VALUE_INVALID); + expect(invalidInput).toBeTruthy(); + }); + }); + + describe('max input', () => { + it('changes the filter when interacting with the input', () => { + const fixture = TestBed.createComponent( + MetricArithmeticElementContainer + ); + fixture.componentInstance.metric = 'npmi@test'; + fixture.detectChanges(); + + const inputs = fixture.debugElement.queryAll(css.INPUT); + const input = inputs[1]; + input.nativeElement.focus(); + fixture.detectChanges(); + + input.nativeElement.value = '0.2'; + input.nativeElement.dispatchEvent( + new InputEvent('input', {data: '0.2'}) + ); + fixture.detectChanges(); + + expect(dispatchedActions).toEqual([ + npmiActions.npmiChangeMetricFilter({ + metric: 'npmi@test', + max: 0.2, + min: -1.0, + includeNaN: false, + }), + ]); + }); + + it('does not change the filter when max is smaler than min', () => { + store.overrideSelector(getMetricFilters, { + 'npmi@test': {max: 1.0, min: 0.2, includeNaN: false}, + }); + const fixture = TestBed.createComponent( + MetricArithmeticElementContainer + ); + fixture.componentInstance.metric = 'npmi@test'; + fixture.detectChanges(); + + const inputs = fixture.debugElement.queryAll(css.INPUT); + const input = inputs[1]; + input.nativeElement.focus(); + fixture.detectChanges(); + + input.nativeElement.value = '0.1'; + input.nativeElement.dispatchEvent( + new InputEvent('input', {data: '0.1'}) + ); + fixture.detectChanges(); + + expect(dispatchedActions).toEqual([]); + + const invalidInput = fixture.debugElement.query(css.VALUE_INVALID); + expect(invalidInput).toBeTruthy(); + }); + + it('does not change the filter when NaN is entered but min is not NaN', () => { + const fixture = TestBed.createComponent( + MetricArithmeticElementContainer + ); + fixture.componentInstance.metric = 'npmi@test'; + fixture.detectChanges(); + + const inputs = fixture.debugElement.queryAll(css.INPUT); + const input = inputs[1]; + input.nativeElement.focus(); + fixture.detectChanges(); + + input.nativeElement.value = 'NaN'; + input.nativeElement.dispatchEvent( + new InputEvent('input', {data: 'NaN'}) + ); + fixture.detectChanges(); + + expect(dispatchedActions).toEqual([]); + + const invalidInput = fixture.debugElement.query(css.VALUE_INVALID); + expect(invalidInput).toBeTruthy(); + }); + + it('changes the filter when NaN is entered and min is also NaN', () => { + store.overrideSelector(getMetricFilters, { + 'npmi@test': {max: 1.0, min: -1.0, includeNaN: true}, + }); + const fixture = TestBed.createComponent( + MetricArithmeticElementContainer + ); + fixture.componentInstance.metric = 'npmi@test'; + fixture.detectChanges(); + + const inputs = fixture.debugElement.queryAll(css.INPUT); + const input = inputs[1]; + input.nativeElement.focus(); + fixture.detectChanges(); + + input.nativeElement.value = 'NaN'; + input.nativeElement.dispatchEvent( + new InputEvent('input', {data: 'NaN'}) + ); + fixture.detectChanges(); + + expect(dispatchedActions).toEqual([ + npmiActions.npmiChangeMetricFilter({ + metric: 'npmi@test', + max: -2.0, + min: -1.0, + includeNaN: true, + }), + ]); + + const invalidInput = fixture.debugElement.query(css.VALUE_INVALID); + expect(invalidInput).toBeNull(); + }); + }); + + it('changes the form controls when the filter is updated', () => { + store.overrideSelector(getMetricFilters, { + 'npmi@test': {max: 1.0, min: -1.0, includeNaN: true}, + }); + const fixture = TestBed.createComponent(MetricArithmeticElementContainer); + fixture.componentInstance.metric = 'npmi@test'; + fixture.detectChanges(); + + const inputs = fixture.debugElement.queryAll(css.INPUT); + expect(inputs[0].nativeElement.value).toBe('NaN'); + expect(inputs[1].nativeElement.value).toBe('1'); + + store.overrideSelector(getMetricFilters, { + 'npmi@test': {max: 0.0, min: -0.3, includeNaN: false}, + }); + store.refreshState(); + fixture.detectChanges(); + + expect(inputs[0].nativeElement.value).toBe('-0.3'); + expect(inputs[1].nativeElement.value).toBe('0'); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..b4e29324503b9a499b575b7b96d99cfa29d47e8a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_module.ts @@ -0,0 +1,34 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {MatChipsModule} from '@angular/material/chips'; + +import {MetricArithmeticComponent} from './metric_arithmetic_component'; +import {MetricArithmeticContainer} from './metric_arithmetic_container'; +import {MetricArithmeticElementModule} from './metric_arithmetic_element/metric_arithmetic_element_module'; +import {MetricArithmeticOperatorModule} from './metric_arithmetic_operator/metric_arithmetic_operator_module'; + +@NgModule({ + declarations: [MetricArithmeticComponent, MetricArithmeticContainer], + imports: [ + CommonModule, + MatChipsModule, + MetricArithmeticElementModule, + MetricArithmeticOperatorModule, + ], + exports: [MetricArithmeticContainer], +}) +export class MetricArithmeticModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_operator/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_operator/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..711204e12f5828b92dd0feaa41faa3dc9f5efcaa --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_operator/BUILD @@ -0,0 +1,41 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "metric_arithmetic_operator", + srcs = [ + "metric_arithmetic_operator_component.ts", + "metric_arithmetic_operator_module.ts", + ], + deps = [ + "//tensorboard/webapp/angular:expect_angular_material_chips", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "metric_arithmetic_operator_test_lib", + testonly = True, + srcs = [ + "metric_arithmetic_operator_test.ts", + ], + deps = [ + ":metric_arithmetic_operator", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/plugins/npmi/store:types", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_operator/metric_arithmetic_operator_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_operator/metric_arithmetic_operator_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..ef4faace113685ab07a39ea85029815c581e78c4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_operator/metric_arithmetic_operator_component.ts @@ -0,0 +1,30 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component, Input} from '@angular/core'; +import {Operator} from '../../../../store/npmi_types'; + +@Component({ + selector: 'npmi-metric-arithmetic-operator', + template: ` + + {{ operator === Operator.AND ? '&' : '' }} + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MetricArithmeticOperatorComponent { + @Input() operator!: Operator; + readonly Operator = Operator; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_operator/metric_arithmetic_operator_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_operator/metric_arithmetic_operator_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..cb6250f4c0362097e9269f2463900ab802fdf6a1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_operator/metric_arithmetic_operator_module.ts @@ -0,0 +1,26 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {MatChipsModule} from '@angular/material/chips'; + +import {MetricArithmeticOperatorComponent} from './metric_arithmetic_operator_component'; + +@NgModule({ + declarations: [MetricArithmeticOperatorComponent], + imports: [CommonModule, MatChipsModule], + exports: [MetricArithmeticOperatorComponent], +}) +export class MetricArithmeticOperatorModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_operator/metric_arithmetic_operator_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_operator/metric_arithmetic_operator_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..19edd2a32ddf8437ad94559d1c69950ad723eaff --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_operator/metric_arithmetic_operator_test.ts @@ -0,0 +1,40 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * Unit tests for the metric arithmetic operator. + */ +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; + +import {MetricArithmeticOperatorComponent} from './metric_arithmetic_operator_component'; +import {Operator} from '../../../../store/npmi_types'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('Npmi Metric Arithmetic Operator Component', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [MetricArithmeticOperatorComponent], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + }); + + it('renders AND operator correctly', () => { + const fixture = TestBed.createComponent(MetricArithmeticOperatorComponent); + fixture.componentInstance.operator = Operator.AND; + fixture.detectChanges(); + expect(fixture.nativeElement.textContent.trim()).toBe('&'); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..2d3038d915a622e6837e75938e0af5c287b875db --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_arithmetic/metric_arithmetic_test.ts @@ -0,0 +1,102 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * Unit tests for the metric arithmetic. + */ +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; + +import {Store} from '@ngrx/store'; +import {State} from '../../../../../app_state'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {MetricArithmeticContainer} from './metric_arithmetic_container'; +import {MetricArithmeticComponent} from './metric_arithmetic_component'; +import {appStateFromNpmiState, createNpmiState} from '../../../testing'; +import { + getMetricArithmetic, + getMetricFilters, +} from './../../../store/npmi_selectors'; +import {ArithmeticKind, Operator} from '../../../store/npmi_types'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('Npmi Metric Arithmetic Container', () => { + let store: MockStore; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [MetricArithmeticComponent, MetricArithmeticContainer], + imports: [], + providers: [ + provideMockStore({ + initialState: appStateFromNpmiState(createNpmiState()), + }), + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + }); + + it('renders no metrics when none active', () => { + const fixture = TestBed.createComponent(MetricArithmeticContainer); + fixture.detectChanges(); + + const metricArithmeticElement = fixture.debugElement.query( + By.css('npmi-metric-arithmetic-element') + ); + expect(metricArithmeticElement).toBeFalsy(); + }); + + it('renders a metric when one is active', () => { + store.overrideSelector(getMetricArithmetic, [ + {kind: ArithmeticKind.METRIC, metric: 'test_metric'}, + ]); + store.overrideSelector(getMetricFilters, { + test_metric: {max: 1.0, min: -1.0, includeNaN: false}, + }); + const fixture = TestBed.createComponent(MetricArithmeticContainer); + fixture.detectChanges(); + + const metricArithmeticElement = fixture.debugElement.query( + By.css('npmi-metric-arithmetic-element') + ); + expect(metricArithmeticElement).toBeTruthy(); + }); + + it('renders metrics when at least two active', () => { + store.overrideSelector(getMetricArithmetic, [ + {kind: ArithmeticKind.METRIC, metric: 'test_metric'}, + {kind: ArithmeticKind.OPERATOR, operator: Operator.AND}, + {kind: ArithmeticKind.METRIC, metric: 'test_metric_2'}, + ]); + store.overrideSelector(getMetricFilters, { + test_metric: {max: 1.0, min: -1.0, includeNaN: false}, + test_metric_2: {max: 1.0, min: -1.0, includeNaN: false}, + }); + const fixture = TestBed.createComponent(MetricArithmeticContainer); + fixture.detectChanges(); + + const metricArithmeticElement = fixture.debugElement.query( + By.css('npmi-metric-arithmetic-element') + ); + expect(metricArithmeticElement).toBeTruthy(); + const metricArithmeticOperator = fixture.debugElement.query( + By.css('npmi-metric-arithmetic-operator') + ); + expect(metricArithmeticOperator).toBeTruthy(); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..6c27c01d41ae7d4fd5383c974561262033125a46 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/BUILD @@ -0,0 +1,73 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "metric_search_component_styles", + src = "metric_search_component.scss", +) + +ng_module( + name = "metric_search", + srcs = [ + "metric_search_component.ts", + "metric_search_container.ts", + "metric_search_module.ts", + ], + assets = [ + ":metric_search_component_styles", + "metric_search_component.ng.html", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_material_autocomplete", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/angular:expect_angular_material_input", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@angular/forms", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "metric_search_test_lib", + testonly = True, + srcs = [ + "metric_search_test.ts", + ], + deps = [ + ":metric_search", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_cdk_overlay", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_material_autocomplete", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/angular:expect_angular_material_input", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/testing", + "//tensorboard/webapp/runs_legacy", + "//tensorboard/webapp/testing:mat_icon", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@angular/forms", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/metric_search_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/metric_search_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..03ba6a4b0e11f6421dbd0eeb2cfdba6b730a0472 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/metric_search_component.ng.html @@ -0,0 +1,42 @@ + + + + + + + {{completion}} + diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/metric_search_component.scss b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/metric_search_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..e81561f7b2f0e6b3a799538ea783607e0306d85b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/metric_search_component.scss @@ -0,0 +1,35 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +mat-icon { + flex: none; + margin-right: 5px; +} + +:host { + display: flex; + padding: 0 10px; + position: relative; + font-size: 0.9em; + + &:not(.valid) { + color: mat-color($tb-warn, 800); + + input { + caret-color: currentColor; + } + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/metric_search_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/metric_search_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..6919df96b3149bf9ca407c02fca93225ee55db3d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/metric_search_component.ts @@ -0,0 +1,46 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + Input, + Output, + EventEmitter, + HostBinding, +} from '@angular/core'; +import {MatAutocompleteSelectedEvent} from '@angular/material/autocomplete'; + +@Component({ + selector: 'metric-search-component', + templateUrl: './metric_search_component.ng.html', + styleUrls: ['./metric_search_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MetricSearchComponent { + @Input() completions!: string[]; + @Input() regexFilterValue!: string; + @HostBinding('class.valid') @Input() isRegexFilterValid!: boolean; + @Output() onRegexFilterValueChange = new EventEmitter(); + @Output() onAddFilter = new EventEmitter(); + + onOptionSelected( + event: MatAutocompleteSelectedEvent, + matInput: HTMLInputElement + ) { + this.onAddFilter.emit(event.option.value); + // matInput.value needs to be cleared manually, since the Angular Material Component may be modifying the input value outside of change detection + matInput.value = ''; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/metric_search_container.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/metric_search_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..31e1ddf7c5fae3ef0c99b1b059f63beced2751b4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/metric_search_container.ts @@ -0,0 +1,117 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, ChangeDetectionStrategy} from '@angular/core'; +import {select, Store} from '@ngrx/store'; + +import {map} from 'rxjs/operators'; +import {combineLatest} from 'rxjs'; + +import {State} from '../../../../../app_state'; +import { + getMetricFilters, + getMetricsRegex, + getRunToMetrics, +} from '../../../store'; +import {getCurrentRouteRunSelection} from '../../../../../selectors'; +import * as npmiActions from '../../../actions'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'npmi-metric-search', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MetricSearchContainer { + readonly metricsRegex$ = this.store.select(getMetricsRegex); + readonly activeRuns$ = this.store + .pipe(select(getCurrentRouteRunSelection)) + .pipe( + map((runSelection) => { + if (!runSelection) return []; + return Array.from(runSelection.entries()) + .filter((run) => run[1]) + .map((run) => run[0]); + }) + ); + readonly metricsForActiveRuns$ = combineLatest( + this.activeRuns$, + this.store.select(getRunToMetrics) + ).pipe( + map(([activeRuns, runToMetrics]) => { + const metrics = new Set(); + for (const run of activeRuns) { + if (runToMetrics[run]) { + for (const metric of runToMetrics[run]) { + metrics.add(metric); + } + } + } + return [...metrics]; + }) + ); + readonly isMetricsFilterValid$ = this.metricsRegex$.pipe( + map((filterString) => { + try { + return Boolean(new RegExp(filterString)); + } catch (err) { + return false; + } + }) + ); + readonly metricFilterKeys$ = this.store.pipe(select(getMetricFilters)).pipe( + map((metricFilters) => { + return Object.keys(metricFilters); + }) + ); + readonly completions$ = combineLatest( + this.metricsForActiveRuns$, + this.metricsRegex$, + this.metricFilterKeys$ + ).pipe( + map(([metrics, metricsRegex, metricsWithFilters]) => { + const filteredMetrics = metrics.filter( + (metric: string) => !metricsWithFilters.includes(metric) + ); + try { + const filterRegex = new RegExp(metricsRegex, 'i'); + return filteredMetrics + .filter((metric: string) => filterRegex.test(metric)) + .sort(); + } catch (err) { + return []; + } + }) + ); + + onFilterChange(filter: string) { + this.store.dispatch(npmiActions.npmiMetricsRegexChanged({regex: filter})); + } + + onAddFilter(metric: string) { + this.store.dispatch(npmiActions.npmiAddMetricFilter({metric})); + this.store.dispatch(npmiActions.npmiMetricsRegexChanged({regex: ''})); + } + + constructor(private readonly store: Store) {} +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/metric_search_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/metric_search_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..9008ad08936430f5930901cc629803e0daa8428e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/metric_search_module.ts @@ -0,0 +1,30 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; + +import {MatIconModule} from '@angular/material/icon'; +import {MatAutocompleteModule} from '@angular/material/autocomplete'; +import {MatInputModule} from '@angular/material/input'; + +import {MetricSearchComponent} from './metric_search_component'; +import {MetricSearchContainer} from './metric_search_container'; + +@NgModule({ + declarations: [MetricSearchComponent, MetricSearchContainer], + imports: [CommonModule, MatIconModule, MatInputModule, MatAutocompleteModule], + exports: [MetricSearchContainer], +}) +export class MetricSearchModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/metric_search_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/metric_search_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..4ad644df2eb9d145a0774ad384d73eb5d001a056 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/metric_search/metric_search_test.ts @@ -0,0 +1,265 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * Unit tests for the Metric Search. + */ +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; +import {FormsModule} from '@angular/forms'; +import {CommonModule} from '@angular/common'; +import {OverlayContainer} from '@angular/cdk/overlay'; +import {DebugElement, getDebugNode, NO_ERRORS_SCHEMA} from '@angular/core'; + +import {MatAutocompleteModule} from '@angular/material/autocomplete'; +import {MatInputModule} from '@angular/material/input'; + +import {Action, Store} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {State} from '../../../../../app_state'; +import {getCurrentRouteRunSelection} from '../../../../../selectors'; +import { + getMetricFilters, + getMetricsRegex, + getRunToMetrics, +} from './../../../store/npmi_selectors'; +import * as npmiActions from '../../../actions'; +import {appStateFromNpmiState, createNpmiState} from '../../../testing'; +import {MetricSearchComponent} from './metric_search_component'; +import {MetricSearchContainer} from './metric_search_container'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('Npmi Metric Search Container', () => { + let store: MockStore; + let dispatchedActions: Action[]; + let overlayContainer: OverlayContainer; + const css = { + INPUT: By.css('input'), + ERROR_ICON: By.css('.error-icon'), + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [MetricSearchComponent, MetricSearchContainer], + imports: [ + CommonModule, + FormsModule, + MatInputModule, + MatAutocompleteModule, + ], + providers: [ + provideMockStore({ + initialState: appStateFromNpmiState(createNpmiState()), + }), + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + + overlayContainer = TestBed.inject(OverlayContainer); + store = TestBed.inject>(Store) as MockStore; + + dispatchedActions = []; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + dispatchedActions.push(action); + }); + + store.overrideSelector( + getCurrentRouteRunSelection, + new Map([ + ['run1', true], + ['run2', true], + ]) + ); + store.overrideSelector(getRunToMetrics, { + run1: ['metric_1', 'metric_2'], + run2: ['metric_1'], + }); + }); + + it('renders npmi metrics search component', () => { + const fixture = TestBed.createComponent(MetricSearchContainer); + fixture.detectChanges(); + + const filterDiv = fixture.debugElement.query(css.INPUT); + expect(filterDiv).toBeTruthy(); + }); + + describe('input interaction', () => { + it('dispatches changeMetricRegex when typing on input', () => { + const fixture = TestBed.createComponent(MetricSearchContainer); + fixture.detectChanges(); + + const input = fixture.debugElement.query(css.INPUT); + input.nativeElement.focus(); + fixture.detectChanges(); + + input.nativeElement.value = 'a'; + input.nativeElement.dispatchEvent(new InputEvent('input', {data: 'a'})); + fixture.detectChanges(); + + expect(dispatchedActions).toEqual([ + npmiActions.npmiMetricsRegexChanged({regex: 'a'}), + ]); + }); + }); + + describe('autocomplete', () => { + it('shows all metrics on focus', () => { + const fixture = TestBed.createComponent(MetricSearchContainer); + fixture.detectChanges(); + + const input = fixture.debugElement.query(css.INPUT); + input.nativeElement.focus(); + fixture.detectChanges(); + + const optionElements = overlayContainer + .getContainerElement() + .querySelectorAll('mat-option'); + const options = Array.from(optionElements).map( + (optionEl: Element): DebugElement => + getDebugNode(optionEl) as DebugElement + ); + + expect( + options.map((option) => option.nativeElement.textContent) + ).toEqual(['metric_1', 'metric_2']); + }); + + it('shows remaining metrics if some are already filtered for', () => { + store.overrideSelector(getMetricFilters, { + metric_1: {max: 1.0, min: -1.0, includeNaN: false}, + }); + const fixture = TestBed.createComponent(MetricSearchContainer); + fixture.detectChanges(); + + const input = fixture.debugElement.query(css.INPUT); + input.nativeElement.focus(); + fixture.detectChanges(); + + const optionElements = overlayContainer + .getContainerElement() + .querySelectorAll('mat-option'); + const options = Array.from(optionElements).map( + (optionEl: Element): DebugElement => + getDebugNode(optionEl) as DebugElement + ); + + expect( + options.map((option) => option.nativeElement.textContent) + ).toEqual(['metric_2']); + }); + + it('renders empty when no metrics match', () => { + store.overrideSelector(getMetricsRegex, 'YOU CANNOT MATCH ME'); + const fixture = TestBed.createComponent(MetricSearchContainer); + fixture.detectChanges(); + + const input = fixture.debugElement.query(css.INPUT); + input.nativeElement.focus(); + fixture.detectChanges(); + + const optionElements = overlayContainer + .getContainerElement() + .querySelectorAll('mat-option'); + const options = Array.from(optionElements).map( + (optionEl: Element): DebugElement => + getDebugNode(optionEl) as DebugElement + ); + + expect(options.map((option) => option.nativeElement.textContent)).toEqual( + [] + ); + }); + + it('filters by regex, case-insensitive', () => { + store.overrideSelector(getMetricsRegex, '[A-Z]+_1'); + const fixture = TestBed.createComponent(MetricSearchContainer); + fixture.detectChanges(); + + const input = fixture.debugElement.query(css.INPUT); + input.nativeElement.focus(); + fixture.detectChanges(); + + const optionElements = overlayContainer + .getContainerElement() + .querySelectorAll('mat-option'); + const options = Array.from(optionElements).map( + (optionEl: Element): DebugElement => + getDebugNode(optionEl) as DebugElement + ); + + expect( + options.map((option) => option.nativeElement.textContent) + ).toEqual(['metric_1']); + }); + + it('responds to input changes', () => { + const fixture = TestBed.createComponent(MetricSearchContainer); + fixture.detectChanges(); + + const input = fixture.debugElement.query(css.INPUT); + input.nativeElement.focus(); + fixture.detectChanges(); + + store.overrideSelector(getMetricsRegex, '2$'); + store.refreshState(); + fixture.detectChanges(); + + const optionElements = overlayContainer + .getContainerElement() + .querySelectorAll('mat-option'); + const options = Array.from(optionElements).map( + (optionEl: Element): DebugElement => + getDebugNode(optionEl) as DebugElement + ); + + expect( + options.map((option) => option.nativeElement.textContent) + ).toEqual(['metric_2']); + }); + + it('dispatches action when selecting an option', () => { + const fixture = TestBed.createComponent(MetricSearchContainer); + fixture.detectChanges(); + + const input = fixture.debugElement.query(css.INPUT); + input.nativeElement.focus(); + fixture.detectChanges(); + + const optionElements = overlayContainer + .getContainerElement() + .querySelectorAll('mat-option'); + const options = Array.from(optionElements).map( + (optionEl: Element): DebugElement => + getDebugNode(optionEl) as DebugElement + ); + options[0].nativeElement.click(); + + expect(dispatchedActions).toEqual([ + npmiActions.npmiAddMetricFilter({metric: 'metric_1'}), + npmiActions.npmiMetricsRegexChanged({regex: ''}), + ]); + }); + + it('shows error icon for an invalid regex', () => { + store.overrideSelector(getMetricsRegex, '*'); + const fixture = TestBed.createComponent(MetricSearchContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.query(css.ERROR_ICON)).not.toBeNull(); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..bdfcebdecd1c9fd7abc7be12d5b8b71f9b6bfc39 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/BUILD @@ -0,0 +1,63 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "results_download_component_styles", + src = "results_download_component.scss", +) + +ng_module( + name = "results_download", + srcs = [ + "results_download_component.ts", + "results_download_container.ts", + "results_download_module.ts", + ], + assets = [ + ":results_download_component_styles", + "results_download_component.ng.html", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/util:csv_result", + "//tensorboard/webapp/plugins/npmi/util:metric_type", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "results_download_test_lib", + testonly = True, + srcs = [ + "results_download_test.ts", + ], + deps = [ + ":results_download", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/testing", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/results_download_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/results_download_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..5661ee8fa73dde745396af04713a6e8f1170383c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/results_download_component.ng.html @@ -0,0 +1,28 @@ + + diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/results_download_component.scss b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/results_download_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..e34138b7b24c09d2a4fcac5265b67556fb587552 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/results_download_component.scss @@ -0,0 +1,31 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +.active-button { + background-color: mat-color($tb-primary, 500); + border: 1px solid map-get($tb-foreground, border); + color: map-get($tb-background, raised-button); +} + +.button-contents { + align-items: center; + display: flex; + text-transform: uppercase; +} + +mat-icon { + margin-right: 6px; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/results_download_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/results_download_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..1556c3ba6387c68fad8d29e8dfb2ccf30b304927 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/results_download_component.ts @@ -0,0 +1,41 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component, Input} from '@angular/core'; +import {ValueData} from './../../../store/npmi_types'; + +import {convertToCSVResult} from '../../../util/csv_result'; + +@Component({ + selector: 'results-download-component', + templateUrl: './results_download_component.ng.html', + styleUrls: ['./results_download_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ResultsDownloadComponent { + @Input() numFlaggedAnnotations!: number; + @Input() runs!: string[]; + @Input() flaggedData!: [string, ValueData[]][]; + @Input() metrics!: string[]; + + downloadResults() { + for (const run of this.runs) { + const csvData = convertToCSVResult(this.flaggedData, run, this.metrics); + const element = document.createElement('a'); + element.setAttribute('href', csvData); + element.setAttribute('download', `report_${run}.csv`); + element.click(); + } + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/results_download_container.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/results_download_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..05b2060ae9f852eddbf3226f5dba2be7992d5237 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/results_download_container.ts @@ -0,0 +1,90 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, ChangeDetectionStrategy} from '@angular/core'; +import {Store} from '@ngrx/store'; + +import {combineLatest} from 'rxjs'; +import {map} from 'rxjs/operators'; + +import {State} from '../../../../../app_state'; +import { + getFlaggedAnnotations, + getAnnotationData, + getRunToMetrics, + getMetricFilters, +} from '../../../store'; +import {getCurrentRouteRunSelection} from '../../../../../selectors'; +import {metricIsNpmiAndNotDiff} from '../../../util/metric_type'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'npmi-results-download', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ResultsDownloadContainer { + readonly flaggedAnnotations$ = this.store.select(getFlaggedAnnotations); + readonly numFlaggedAnnotations$ = this.flaggedAnnotations$.pipe( + map((flaggedAnnotations) => flaggedAnnotations.length) + ); + readonly activeRuns$ = this.store.select(getCurrentRouteRunSelection).pipe( + map((runSelection) => { + if (!runSelection) return []; + return Array.from(runSelection.entries()) + .filter((run) => run[1]) + .map((run) => run[0]); + }) + ); + readonly flaggedData$ = combineLatest([ + this.store.select(getAnnotationData), + this.flaggedAnnotations$, + ]).pipe( + map(([annotationData, flaggedAnnotations]) => { + const flagSet = new Set(flaggedAnnotations); + const flaggedData = Object.entries(annotationData).filter((entry) => + flagSet.has(entry[0]) + ); + return flaggedData; + }) + ); + readonly metrics$ = combineLatest([ + this.store.select(getRunToMetrics), + this.activeRuns$, + this.store.select(getMetricFilters), + ]).pipe( + map(([runToMetrics, activeRuns, metricFilters]) => { + let metrics = Object.keys(metricFilters); + for (const run of activeRuns) { + if (runToMetrics[run]) { + metrics = metrics.concat( + runToMetrics[run].filter((key) => metricIsNpmiAndNotDiff(key)) + ); + } + } + metrics = [...new Set(metrics)]; + return metrics; + }) + ); + + constructor(private readonly store: Store) {} +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/results_download_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/results_download_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..6aab6791e24e6f117fdd2aad2b1b851c75f825b7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/results_download_module.ts @@ -0,0 +1,29 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; + +import {MatIconModule} from '@angular/material/icon'; +import {MatButtonModule} from '@angular/material/button'; + +import {ResultsDownloadComponent} from './results_download_component'; +import {ResultsDownloadContainer} from './results_download_container'; + +@NgModule({ + declarations: [ResultsDownloadComponent, ResultsDownloadContainer], + imports: [CommonModule, MatIconModule, MatButtonModule], + exports: [ResultsDownloadContainer], +}) +export class ResultsDownloadModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/results_download_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/results_download_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..8cca69c7d9984ed66156db6c456f18956509e8e3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/data_selection/results_download/results_download_test.ts @@ -0,0 +1,88 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * Unit tests for the Result Downloads. + */ +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; + +import {Store} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {State} from '../../../../../app_state'; +import * as selectors from '../../../../../selectors'; +import {appStateFromNpmiState, createNpmiState} from '../../../testing'; +import {createState, createCoreState} from '../../../../../core/testing'; +import {ResultsDownloadContainer} from './results_download_container'; +import {ResultsDownloadComponent} from './results_download_component'; + +import {getFlaggedAnnotations} from '../../../store'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('Npmi Results Download', () => { + let store: MockStore; + const css = { + DOWNLOAD_BUTTON: By.css('button'), + DOWNLOAD_BUTTON_ACTIVE: By.css('.active-button'), + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ResultsDownloadComponent, ResultsDownloadContainer], + providers: [ + provideMockStore({ + initialState: { + ...createState(createCoreState()), + ...appStateFromNpmiState(createNpmiState()), + }, + }), + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + store.overrideSelector(selectors.getCurrentRouteRunSelection, new Map()); + }); + + it('renders disabled button when no annotations are flagged', () => { + const fixture = TestBed.createComponent(ResultsDownloadContainer); + fixture.detectChanges(); + + const downloadButton = fixture.debugElement.query(css.DOWNLOAD_BUTTON); + expect(downloadButton).toBeTruthy(); + expect(downloadButton.nativeElement.disabled).toBeTrue(); + + const downloadButtonActive = fixture.debugElement.query( + css.DOWNLOAD_BUTTON_ACTIVE + ); + expect(downloadButtonActive).toBeNull(); + }); + + it('renders enabled button when annotations are flagged', () => { + store.overrideSelector(getFlaggedAnnotations, ['test', 'test2']); + const fixture = TestBed.createComponent(ResultsDownloadContainer); + fixture.detectChanges(); + + const downloadButton = fixture.debugElement.query(css.DOWNLOAD_BUTTON); + expect(downloadButton).toBeTruthy(); + expect(downloadButton.nativeElement.disabled).toBeFalse(); + + const downloadButtonActive = fixture.debugElement.query( + css.DOWNLOAD_BUTTON_ACTIVE + ); + expect(downloadButtonActive).toBeTruthy(); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/inactive/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/inactive/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..b11888a64ec47c9a2ff366f3c3c23284847beb6c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/inactive/BUILD @@ -0,0 +1,22 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "inactive", + srcs = [ + "inactive_component.ts", + "inactive_module.ts", + ], + assets = [ + "inactive_component.css", + "inactive_component.ng.html", + ], + deps = [ + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/inactive/inactive_component.css b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/inactive/inactive_component.css new file mode 100644 index 0000000000000000000000000000000000000000..45a80fdaeac39a73c0c7b8c6a43f11698ba4a1fc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/inactive/inactive_component.css @@ -0,0 +1,26 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +.container { + height: 100%; + font-family: Roboto; + font-size: 15px; + padding: 50px; +} + +.title { + font-size: 135%; + font-weight: bold; + margin-bottom: 25px; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/inactive/inactive_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/inactive/inactive_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..31af6c160a23d188e0005530d387c606054409ef --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/inactive/inactive_component.ng.html @@ -0,0 +1,26 @@ + +
    +
    +
    nPMI is inactive because no data is available.
    + +
    + To use the nPMI, calculate nPMI values, and log them using the summary + writer. +
    +
    +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/inactive/inactive_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/inactive/inactive_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..48c349fcae6a193bbd26d81d04d9759c9a0ef85e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/inactive/inactive_component.ts @@ -0,0 +1,22 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component} from '@angular/core'; + +@Component({ + selector: 'npmi-inactive-view', + templateUrl: './inactive_component.ng.html', + styleUrls: ['./inactive_component.css'], +}) +export class InactiveComponent {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/inactive/inactive_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/inactive/inactive_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..fc5a250275e13290cde59303018eea3250572968 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/inactive/inactive_module.ts @@ -0,0 +1,23 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; + +import {InactiveComponent} from './inactive_component'; + +@NgModule({ + declarations: [InactiveComponent], + exports: [InactiveComponent], +}) +export class InactiveModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..3e3485a71ae943de7119d9d48c37e5f44bd4d648 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/BUILD @@ -0,0 +1,70 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "main_component_styles", + src = "main_component.scss", +) + +ng_module( + name = "main", + srcs = [ + "main_component.ts", + "main_container.ts", + "main_module.ts", + ], + assets = [ + ":main_component_styles", + "main_component.ng.html", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_checkbox", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/core:types", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/views/annotations_list", + "//tensorboard/webapp/plugins/npmi/views/data_selection", + "//tensorboard/webapp/plugins/npmi/views/selected_annotations", + "//tensorboard/webapp/plugins/npmi/views/violin_filters", + "//tensorboard/webapp/runs_legacy", + "@npm//@angular/core", + "@npm//@angular/forms", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "main_test_lib", + testonly = True, + srcs = [ + "main_container_test.ts", + ], + deps = [ + ":main", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/testing", + "//tensorboard/webapp/runs_legacy", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/main_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/main_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..49136f57275e89ac8c0e747a1fe09afee70f0b10 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/main_component.ng.html @@ -0,0 +1,58 @@ + + +
    + +
    +
    + + +
    + +
    You need to select at least one run.
    +
    +
    + +
    + +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/main_component.scss b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/main_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..245fffb715adb9b05f0485cca3a4eb6f099ac6a1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/main_component.scss @@ -0,0 +1,85 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +:host { + display: flex; + flex-direction: column; + height: 100%; +} + +.content { + display: flex; + flex: 1; + min-height: 0px; + width: 100%; +} + +.sidebar-container { + height: 100%; + overflow: hidden; +} + +.sidebar-contents { + height: 100%; + display: flex; + flex-direction: column; + min-width: 150px; +} + +.analysis-container { + display: flex; + flex-direction: column; + height: 100%; + flex: 1 1; +} + +.run-selector { + padding: 10px; + width: calc(100% - 20px); +} + +.violin-filters { + min-height: 0px; + width: 100%; +} + +.side-toggle { + width: 30px; + height: 30px; + position: absolute; + left: 10px; + bottom: 10px; + border: 1px solid mat-color($tb-foreground, border); + border-radius: 3px; + display: flex; + align-items: center; + justify-content: center; +} + +.grabber { + content: ''; + cursor: ew-resize; + height: 100%; + width: 3px; + overflow: hidden; + background-color: mat-color($tb-foreground, divider); +} + +.annotations-list { + width: 100%; + min-height: 0px; + flex: 1 1; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/main_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/main_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..3feb503270383779fee6ae390bb4f7f2df872605 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/main_component.ts @@ -0,0 +1,38 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + Input, + Output, + EventEmitter, +} from '@angular/core'; +import {Store} from '@ngrx/store'; + +@Component({ + selector: 'main-component', + templateUrl: './main_component.ng.html', + styleUrls: ['./main_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MainComponent { + @Input() runActive!: boolean; + @Input() sidebarExpanded!: boolean; + @Input() sidebarWidth!: number; + @Output() toggleSidebarExpanded = new EventEmitter(); + @Output() resizeTriggered = new EventEmitter(); + @Output() resizeGrabbed = new EventEmitter(); + @Output() resizeReleased = new EventEmitter(); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/main_container.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/main_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..0bbaebd22afc430f2820d6496a6177210125b3b2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/main_container.ts @@ -0,0 +1,83 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, ChangeDetectionStrategy} from '@angular/core'; +import {select, Store} from '@ngrx/store'; + +import {map} from 'rxjs/operators'; + +import {State} from '../../../../app_state'; +import {getCurrentRouteRunSelection} from '../../../../selectors'; +import { + getSidebarExpanded, + getSidebarWidth, +} from './../../store/npmi_selectors'; +import * as npmiActions from '../../actions'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'npmi-main', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MainContainer { + readonly runActive$ = this.store + .pipe(select(getCurrentRouteRunSelection)) + .pipe( + map((runs) => { + if (!runs) { + return false; + } + return [...runs.values()].includes(true); + }) + ); + readonly sidebarExpanded$ = this.store.pipe(select(getSidebarExpanded)); + readonly sidebarWidth$ = this.store.pipe(select(getSidebarWidth)); + resizing = false; + + constructor(private readonly store: Store) {} + + onToggleSidebarExpanded() { + this.store.dispatch(npmiActions.npmiToggleSidebarExpanded()); + } + + onResizeTriggered(event: MouseEvent) { + if (this.resizing) { + this.store.dispatch( + npmiActions.npmiChangeSidebarWidth({ + sidebarWidth: event.clientX, + }) + ); + } + } + + onResizeGrabbed() { + this.resizing = true; + } + + onResizeReleased() { + this.resizing = false; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/main_container_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/main_container_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..b14d7668f76f224365d944b69dbd0dc5a4d53ea1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/main_container_test.ts @@ -0,0 +1,191 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * Unit tests for the Main Container. + */ +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; + +import {Store, Action} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {State} from '../../../../app_state'; +import {getCurrentRouteRunSelection} from './../../../../selectors'; +import {getSidebarExpanded} from '../../store'; +import {appStateFromNpmiState, createNpmiState} from '../../testing'; +import {createState, createCoreState} from '../../../../core/testing'; +import {MainComponent} from './main_component'; +import {MainContainer} from './main_container'; +import * as npmiActions from '../../actions'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; +import {NO_ERRORS_SCHEMA} from '@angular/core'; + +describe('Npmi Main Container', () => { + let store: MockStore; + let dispatchedActions: Action[]; + const css = { + ANALYSIS_CONTAINER: By.css('.analysis-container'), + SIDEBAR_CONTAINER: By.css('.sidebar-container'), + SIDE_TOGGLE: By.css('.side-toggle'), + GRABBER: By.css('.grabber'), + CONTENT: By.css('.content'), + RUN_SELECTOR: By.css('tb-legacy-runs-selector'), + BUTTON: By.css('button'), + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [MainComponent, MainContainer], + imports: [], + providers: [ + provideMockStore({ + initialState: { + ...createState(createCoreState()), + ...appStateFromNpmiState(createNpmiState()), + }, + }), + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + store.overrideSelector(getCurrentRouteRunSelection, new Map()); + + dispatchedActions = []; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + dispatchedActions.push(action); + }); + }); + + it('renders npmi main component without runs', () => { + store.overrideSelector(getCurrentRouteRunSelection, new Map()); + const fixture = TestBed.createComponent(MainContainer); + fixture.detectChanges(); + + const runsElement = fixture.debugElement.query(css.RUN_SELECTOR); + expect(runsElement).toBeTruthy(); + + const analysisElement = fixture.debugElement.query(css.ANALYSIS_CONTAINER); + expect(analysisElement).toBeNull(); + }); + + it('renders npmi main component with run', () => { + store.overrideSelector( + getCurrentRouteRunSelection, + new Map([['run_1', true]]) + ); + const fixture = TestBed.createComponent(MainContainer); + fixture.detectChanges(); + + const runsElement = fixture.debugElement.query(css.RUN_SELECTOR); + expect(runsElement).toBeTruthy(); + + const analysisElement = fixture.debugElement.query(css.ANALYSIS_CONTAINER); + expect(analysisElement).toBeTruthy(); + }); + + it('renders npmi main component without active run', () => { + store.overrideSelector( + getCurrentRouteRunSelection, + new Map([['run_1', false]]) + ); + const fixture = TestBed.createComponent(MainContainer); + fixture.detectChanges(); + + const runsElement = fixture.debugElement.query(css.RUN_SELECTOR); + expect(runsElement).toBeTruthy(); + + const analysisElement = fixture.debugElement.query(css.ANALYSIS_CONTAINER); + expect(analysisElement).toBeNull(); + }); + + it('renders npmi main component with multiple runs, some active, some inactive', () => { + store.overrideSelector( + getCurrentRouteRunSelection, + new Map([ + ['run_1', false], + ['run_2', true], + ['run_3', false], + ]) + ); + const fixture = TestBed.createComponent(MainContainer); + fixture.detectChanges(); + + const runsElement = fixture.debugElement.query(css.RUN_SELECTOR); + expect(runsElement).toBeTruthy(); + + const analysisElement = fixture.debugElement.query(css.ANALYSIS_CONTAINER); + expect(analysisElement).toBeTruthy(); + }); + + it('does not render sidebar or grabber when sidebar hidden', () => { + store.overrideSelector(getSidebarExpanded, false); + const fixture = TestBed.createComponent(MainContainer); + fixture.detectChanges(); + + const sidebarElement = fixture.debugElement.query(css.SIDEBAR_CONTAINER); + expect(sidebarElement).toBeNull(); + const grabber = fixture.debugElement.query(css.GRABBER); + expect(grabber).toBeNull(); + }); + + it('dispatches sidebar toggle when disabled and toggle button clicked', () => { + store.overrideSelector(getSidebarExpanded, false); + const fixture = TestBed.createComponent(MainContainer); + fixture.detectChanges(); + const sideToggle = fixture.debugElement.query(css.SIDE_TOGGLE); + expect(sideToggle).toBeTruthy(); + const expansionButton = sideToggle.query(css.BUTTON); + expansionButton.nativeElement.click(); + + expect(dispatchedActions).toEqual([ + npmiActions.npmiToggleSidebarExpanded(), + ]); + }); + + it('renders sidebar and grabber when enabled', () => { + const fixture = TestBed.createComponent(MainContainer); + fixture.detectChanges(); + + const sidebarElement = fixture.debugElement.query(css.SIDEBAR_CONTAINER); + expect(sidebarElement).toBeTruthy(); + const grabberElement = fixture.debugElement.query(css.GRABBER); + expect(grabberElement).toBeTruthy(); + const sideToggle = fixture.debugElement.query(css.SIDE_TOGGLE); + expect(sideToggle).toBeNull(); + }); + + it('dispatches change sidebarWidth when interacted with grabber', () => { + const fixture = TestBed.createComponent(MainContainer); + fixture.detectChanges(); + + const grabberElement = fixture.debugElement.query(css.GRABBER); + grabberElement.triggerEventHandler('mousedown', {clientX: 301}); + const contentElement = fixture.debugElement.query(css.CONTENT); + contentElement.triggerEventHandler('mousemove', {clientX: 50}); + expect(dispatchedActions).toEqual([ + npmiActions.npmiChangeSidebarWidth({sidebarWidth: 50}), + ]); + }); + + it('does not dispatch change sidebarWidth when grabber not selected', () => { + const fixture = TestBed.createComponent(MainContainer); + fixture.detectChanges(); + + const contentElement = fixture.debugElement.query(css.CONTENT); + contentElement.triggerEventHandler('mousemove', {clientX: 50}); + expect(dispatchedActions).toEqual([]); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/main_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/main_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..c2e268c3b4c8675caa124ffabb2a3f01fd6bf2bf --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/main/main_module.ts @@ -0,0 +1,47 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {FormsModule} from '@angular/forms'; + +import {MatCheckboxModule} from '@angular/material/checkbox'; +import {MatButtonModule} from '@angular/material/button'; +import {MatIconModule} from '@angular/material/icon'; + +import {MainComponent} from './main_component'; +import {MainContainer} from './main_container'; +import {RunsModule} from '../../../../runs_legacy/runs_module'; +import {DataSelectionModule} from './../data_selection/data_selection_module'; +import {ViolinFiltersModule} from './../violin_filters/violin_filters_module'; +import {AnnotationsListModule} from '../annotations_list/annotations_list_module'; +import {SelectedAnnotationsModule} from './../selected_annotations/selected_annotations_module'; + +@NgModule({ + declarations: [MainComponent, MainContainer], + imports: [ + CommonModule, + FormsModule, + MatCheckboxModule, + MatIconModule, + RunsModule, + DataSelectionModule, + MatButtonModule, + ViolinFiltersModule, + AnnotationsListModule, + SelectedAnnotationsModule, + ], + exports: [MainContainer], +}) +export class MainModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..f1f702969ef9362c87d686c2049042839424bc63 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/BUILD @@ -0,0 +1,62 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "selected_annotations_component_styles", + src = "selected_annotations_component.scss", +) + +ng_module( + name = "selected_annotations", + srcs = [ + "selected_annotations_component.ts", + "selected_annotations_container.ts", + "selected_annotations_module.ts", + ], + assets = [ + "selected_annotations_component.ng.html", + ":selected_annotations_component_styles", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "selected_annotations_test_lib", + testonly = True, + srcs = [ + "selected_annotations_test.ts", + ], + deps = [ + ":selected_annotations", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/testing", + "//tensorboard/webapp/runs_legacy", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..c7df623bc684e9b57f3a1f95c64e8e0b6ca77cad --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/BUILD @@ -0,0 +1,63 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "parallel_coordinates_component_styles", + src = "parallel_coordinates_component.scss", +) + +ng_module( + name = "parallel_coordinates", + srcs = [ + "parallel_coordinates_component.ts", + "parallel_coordinates_container.ts", + "parallel_coordinates_module.ts", + ], + assets = [ + "parallel_coordinates_component.ng.html", + ":parallel_coordinates_component_styles", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/util:coordinate_data", + "//tensorboard/webapp/plugins/npmi/util:metric_type", + "//tensorboard/webapp/third_party:d3", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "parallel_coordinates_test_lib", + testonly = True, + srcs = [ + "parallel_coordinates_test.ts", + ], + deps = [ + ":parallel_coordinates", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/testing", + "//tensorboard/webapp/runs_legacy", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/parallel_coordinates_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/parallel_coordinates_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..b0228b3d7505bc178d3b1903bdebd7dd5920dc55 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/parallel_coordinates_component.ng.html @@ -0,0 +1,17 @@ + + diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/parallel_coordinates_component.scss b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/parallel_coordinates_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..cf533f9fbc1db473e8eff27f8ad6a015d87e5203 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/parallel_coordinates_component.scss @@ -0,0 +1,18 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +.pc-chart { + height: 300px; + width: 100%; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/parallel_coordinates_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/parallel_coordinates_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..f9010a41a18b3f7a41d8dc916492f3288eb1fc9c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/parallel_coordinates_component.ts @@ -0,0 +1,339 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + AfterViewInit, + OnChanges, + SimpleChanges, + Input, + ViewChild, + ElementRef, + HostListener, +} from '@angular/core'; +import * as d3 from '../../../../../third_party/d3'; +import {Coordinate} from '../../../util/coordinate_data'; +import {ValueData, TfColorScale} from './../../../store/npmi_types'; + +@Component({ + selector: 'parallel-coordinates-component', + templateUrl: './parallel_coordinates_component.ng.html', + styleUrls: ['./parallel_coordinates_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ParallelCoordinatesComponent implements AfterViewInit, OnChanges { + @Input() activeMetrics!: string[]; + @Input() coordinateData!: { + coordinates: Coordinate[]; + extremes: {max: number; min: number}; + }; + // Only to trigger OnChanges to re-render the component. + @Input() sidebarWidth!: number; + @ViewChild('chart', {static: true, read: ElementRef}) + private readonly svgElement!: ElementRef; + @HostListener('window:resize', ['$event']) + onResize(event: Event) { + this.redraw(); + } + private width: number = 0; + private chartWidth: number = 0; + private readonly height: number = 300; + private readonly margin = {top: 20, right: 40, bottom: 20, left: 40}; + private readonly chartHeight = + this.height - this.margin.top - this.margin.bottom; + private colorScale: (runName: string) => string = () => '#333333'; + // Drawing containers + private svg!: d3.Selection< + SVGElement, + unknown, + HTMLElement | null, + undefined + >; + private mainContainer!: d3.Selection< + SVGGElement, + unknown, + HTMLElement | null, + undefined + >; + private coordinatesGroup!: d3.Selection< + SVGGElement, + unknown, + HTMLElement | null, + undefined + >; + private labelsGroup!: d3.Selection< + SVGGElement, + unknown, + HTMLElement | null, + undefined + >; + // Scales and Axis + private axisGroup!: d3.Selection< + SVGGElement, + unknown, + HTMLElement | null, + undefined + >; + // Scales + private xScale!: d3.ScalePoint; + private yScale!: d3.ScaleLinear; + private yAxis?: d3.Axis; + + ngAfterViewInit(): void { + const runsColorScale = (document.createElement( + 'tf-color-scale' + ) as TfColorScale).runsColorScale; + this.colorScale = runsColorScale ? runsColorScale : this.colorScale; + this.svg = d3.select(this.svgElement.nativeElement); + this.mainContainer = this.svg + .append('g') + .attr('transform', `translate(${this.margin.left}, ${this.margin.top})`); + this.coordinatesGroup = this.mainContainer.append('g'); + this.labelsGroup = this.mainContainer.append('g'); + this.axisGroup = this.mainContainer.append('g'); + this.xScale = d3.scalePoint().padding(0.1); + this.yScale = d3.scaleLinear().range([this.chartHeight, 0]); + this.yAxis = d3.axisRight(this.yScale); + this.redraw(); + } + + ngOnChanges(changes: SimpleChanges): void { + if (this.svg) { + this.redraw(); + } + } + + private redraw() { + this.updateDimensions(); + this.updateAxes(); + this.draw(); + } + + private updateDimensions() { + this.width = this.svgElement.nativeElement.clientWidth || 10; + this.chartWidth = this.width - this.margin.left - this.margin.right; + } + + private updateAxes() { + this.xScale.rangeRound([0, this.chartWidth]).domain(this.activeMetrics); + this.yScale.domain([ + this.coordinateData.extremes.min, + this.coordinateData.extremes.max, + ]); + } + + private draw() { + this.drawAxes(); + this.drawAxisLabels(); + this.drawCoordinates(); + this.drawLabels(); + } + + private drawAxes() { + const axes = this.axisGroup + .selectAll('.axis-y') + .data(this.activeMetrics); + + const axisEnters = axes.enter().append('g').attr('class', 'axis-y'); + + axisEnters + .merge(axes) + .attr( + 'transform', + function (this: ParallelCoordinatesComponent, d: string) { + return `translate(${this.xScale(d)}, 0)`; + }.bind(this) + ) + .call(this.yAxis!); + + axes.exit().remove(); + } + + private drawAxisLabels() { + const axisBackgroundTexts = this.axisGroup + .selectAll('.axis-bg-text') + .data(this.activeMetrics); + + const axisBackgroundTextEnters = axisBackgroundTexts + .enter() + .append('text') + .attr('class', 'axis-bg-text') + .attr('font-size', '13px') + .attr('stroke-width', 2) + .attr('stroke-linejoin', 'round') + .attr('stroke', 'white'); + + axisBackgroundTextEnters + .merge(axisBackgroundTexts) + .text((d: string) => d) + .attr( + 'transform', + function (this: ParallelCoordinatesComponent, d: string) { + return `translate(${this.xScale(d)! - 5}, ${this.yScale( + this.coordinateData.extremes.min + )}) rotate(-90)`; + }.bind(this) + ); + + axisBackgroundTexts.exit().remove(); + + const axisTexts = this.axisGroup + .selectAll('.axis-text') + .data(this.activeMetrics); + + const axisTextEnters = axisTexts + .enter() + .append('text') + .attr('font-size', '13px') + .attr('class', 'axis-text'); + + axisTextEnters + .merge(axisTexts) + .text((d: string) => d) + .attr( + 'transform', + function (this: ParallelCoordinatesComponent, d: string) { + return `translate(${this.xScale(d)! - 5}, ${this.yScale( + this.coordinateData.extremes.min + )}) rotate(-90)`; + }.bind(this) + ); + + axisTexts.exit().remove(); + } + + private drawCoordinates() { + // Draw the coordinate paths + const coords = this.coordinatesGroup + .selectAll('.coord') + .data(this.coordinateData.coordinates); + + const coordEnters = coords + .enter() + .append('path') + .attr('class', 'coord') + .attr('fill', 'none'); + + coordEnters + .merge(coords) + .attr('d', this.path.bind(this)) + .attr( + 'stroke', + function (this: ParallelCoordinatesComponent, d: Coordinate) { + return this.colorScale(d.runId); + }.bind(this) + ); + + coords.exit().remove(); + + // Draw invisible paths for a broader hover area + const hiddenCoords = this.coordinatesGroup + .selectAll('.hiddenCoord') + .data(this.coordinateData.coordinates); + + const hiddenCoordEnters = hiddenCoords + .enter() + .append('path') + .attr('class', 'hiddenCoord') + .attr('stroke-width', '10px') + .attr('fill', 'none') + .attr('stroke', 'rgba(0, 0, 0, 0.0)') + .on('mouseover', this.handleCoordinateMouseOver.bind(this)) + .on('mouseout', this.handleCoordinateMouseOut.bind(this)); + + hiddenCoordEnters.merge(hiddenCoords).attr('d', this.path.bind(this)); + + hiddenCoords.exit().remove(); + } + + private path(d: Coordinate) { + const sorted = d.values.sort( + (a, b) => + this.activeMetrics.indexOf(a.metric) - + this.activeMetrics.indexOf(b.metric) + ); + return d3.line()( + d.values.map( + function (this: any, p: ValueData) { + let yPos = this.yScale(p.nPMIValue); + return [this.xScale(p.metric), yPos] as [number, number]; + }.bind(this) + ) + ); + } + + private handleCoordinateMouseOver( + this: ParallelCoordinatesComponent, + d: Coordinate, + i: number + ) { + this.labelsGroup + .selectAll('.coordinate-label') + .filter(function (x: Coordinate) { + return !(x.annotation === d.annotation); + }) + .style('opacity', 0.1); + this.coordinatesGroup + .selectAll('.coord') + .filter(function (x: Coordinate) { + return !(x.annotation === d.annotation); + }) + .style('opacity', 0.1); + } + + private handleCoordinateMouseOut(this: ParallelCoordinatesComponent) { + this.labelsGroup.selectAll('.coordinate-label').style('opacity', 1.0); + this.coordinatesGroup.selectAll('.coord').style('opacity', 1.0); + } + + private drawLabels() { + const interpolationFactor = 30 / this.xScale.step(); + const data = + this.coordinateData.coordinates.length < 30 + ? this.coordinateData.coordinates + : []; + + const coordinateLabels = this.labelsGroup + .selectAll('.coordinate-label') + .data(data); + + const coordinateLabelEnters = coordinateLabels + .enter() + .append('text') + .attr('class', 'coordinate-label') + .attr('font-size', '10px'); + + coordinateLabelEnters + .merge(coordinateLabels) + .text(function (d: Coordinate) { + return d.annotation; + }) + .attr('x', this.xScale(this.activeMetrics[0])! + 30) + .attr( + 'y', + function (this: ParallelCoordinatesComponent, d: Coordinate) { + const y0 = this.yScale( + d.values[0].nPMIValue ? d.values[0].nPMIValue : 0 + ); + const y1 = this.yScale( + d.values[1].nPMIValue ? d.values[1].nPMIValue : 0 + ); + return (1 - interpolationFactor) * y0 + interpolationFactor * y1; + }.bind(this) + ); + + coordinateLabels.exit().remove(); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/parallel_coordinates_container.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/parallel_coordinates_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..68a24c4f824a37df347cb2f7b4db402dce729b5e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/parallel_coordinates_container.ts @@ -0,0 +1,94 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, ChangeDetectionStrategy} from '@angular/core'; +import {select, Store} from '@ngrx/store'; +import {State} from '../../../../../app_state'; + +import {combineLatest} from 'rxjs'; +import {map} from 'rxjs/operators'; + +import { + getSelectedAnnotations, + getRunToMetrics, + getMetricFilters, + getAnnotationData, + getSidebarWidth, +} from '../../../store'; +import {getCurrentRouteRunSelection} from '../../../../../selectors'; +import {metricIsNpmiAndNotDiff} from '../../../util/metric_type'; +import {convertToCoordinateData} from '../../../util/coordinate_data'; +import {stripMetricString} from '../../../util/metric_type'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'npmi-parallel-coordinates', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ParallelCoordinatesContainer { + readonly activeRuns$ = this.store + .pipe(select(getCurrentRouteRunSelection)) + .pipe( + map((runSelection) => { + if (!runSelection) return []; + return Array.from(runSelection.entries()) + .filter((run) => run[1]) + .map((run) => run[0]); + }) + ); + readonly activeMetrics$ = combineLatest( + this.store.select(getRunToMetrics), + this.activeRuns$, + this.store.select(getMetricFilters) + ).pipe( + map(([runToMetrics, activeRuns, metricFilters]) => { + let metrics: string[] = []; + for (const run of activeRuns) { + if (runToMetrics[run]) { + metrics = metrics.concat( + runToMetrics[run].filter((key) => metricIsNpmiAndNotDiff(key)) + ); + } + } + metrics = [...new Set([...Object.keys(metricFilters), ...metrics])]; + return metrics.map((metric) => stripMetricString(metric)); + }) + ); + readonly coordinateData$ = combineLatest([ + this.store.select(getAnnotationData), + this.store.select(getSelectedAnnotations), + this.activeRuns$, + this.activeMetrics$, + ]).pipe( + map(([annotationData, selectedAnnotations, runs, metrics]) => { + return convertToCoordinateData( + annotationData, + selectedAnnotations, + runs, + metrics + ); + }) + ); + readonly sidebarWidth$ = this.store.select(getSidebarWidth); + + constructor(private readonly store: Store) {} +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/parallel_coordinates_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/parallel_coordinates_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..7dee3b9e613cbbb2742272983c204a568790a738 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/parallel_coordinates_module.ts @@ -0,0 +1,26 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; + +import {ParallelCoordinatesComponent} from './parallel_coordinates_component'; +import {ParallelCoordinatesContainer} from './parallel_coordinates_container'; + +@NgModule({ + declarations: [ParallelCoordinatesComponent, ParallelCoordinatesContainer], + imports: [CommonModule], + exports: [ParallelCoordinatesContainer], +}) +export class ParallelCoordinatesModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/parallel_coordinates_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/parallel_coordinates_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..62f10f68cb096f61e3579428babbcd32205cc7fa --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/parallel_coordinates/parallel_coordinates_test.ts @@ -0,0 +1,263 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; + +import {Store} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {State} from '../../../../../app_state'; +import {appStateFromNpmiState, createNpmiState} from '../../../testing'; +import {createState, createCoreState} from '../../../../../core/testing'; +import {ParallelCoordinatesComponent} from './parallel_coordinates_component'; +import {ParallelCoordinatesContainer} from './parallel_coordinates_container'; +import { + getSelectedAnnotations, + getRunToMetrics, + getMetricFilters, + getAnnotationData, +} from '../../../store'; +import {getCurrentRouteRunSelection} from '../../../../../selectors'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('Npmi Parallel Coordinates Container', () => { + let store: MockStore; + const css = { + PC_CHART: By.css('.pc-chart'), + AXES: By.css('.axis-y'), + AXIS_LABELS: By.css('.axis-text'), + AXIS_BG_LABELS: By.css('.axis-bg-text'), + COORDINATES: By.css('.coord'), + COORDINATES_BG: By.css('.hiddenCoord'), + COORDINATE_LABELS: By.css('.coordinate-label'), + }; + const annotationData = { + annotation_1: [ + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_1', + nPMIValue: 0.5178, + countValue: 100, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_1', + nPMIValue: -0.1, + countValue: 53, + }, + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_2', + nPMIValue: 0.02157, + countValue: 101, + }, + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_3', + nPMIValue: -0.1, + countValue: 53, + }, + { + annotation: 'annotation_1', + metric: 'other', + run: 'run_3', + nPMIValue: -0.1, + countValue: 53, + }, + { + annotation: 'annotation_1', + metric: '(test - other)', + run: 'run_3', + nPMIValue: -0.1, + countValue: 53, + }, + ], + annotation_2: [ + { + annotation: 'annotation_2', + metric: 'test', + run: 'run_1', + nPMIValue: null, + countValue: 572, + }, + ], + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ + ParallelCoordinatesComponent, + ParallelCoordinatesContainer, + ], + providers: [ + provideMockStore({ + initialState: { + ...createState(createCoreState()), + ...appStateFromNpmiState(createNpmiState()), + }, + }), + ], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + }); + + it('renders parallel coordinates without selected annoations', () => { + store.overrideSelector( + getCurrentRouteRunSelection, + new Map([ + ['run_1', true], + ['run_2', false], + ['run_3', true], + ]) + ); + store.overrideSelector(getAnnotationData, annotationData); + store.overrideSelector(getRunToMetrics, { + run_1: ['nPMI@test', 'nPMI@other'], + run_2: ['nPMI@test'], + run_3: ['nPMI@test', 'nPMI@other', 'nPMI_diff@(test - other)'], + }); + const fixture = TestBed.createComponent(ParallelCoordinatesContainer); + fixture.detectChanges(); + + const pcChart = fixture.debugElement.query(css.PC_CHART); + expect(pcChart).toBeTruthy(); + + const axes = fixture.debugElement.queryAll(css.AXES); + expect(axes.length).toBe(2); + + const axisLabels = fixture.debugElement.queryAll(css.AXIS_LABELS); + expect(axisLabels.length).toBe(2); + + const axisBackgroundLabels = fixture.debugElement.queryAll( + css.AXIS_BG_LABELS + ); + expect(axisBackgroundLabels.length).toBe(2); + + const coordinates = fixture.debugElement.queryAll(css.COORDINATES); + expect(coordinates.length).toBe(0); + + const coordinatesBackground = fixture.debugElement.queryAll( + css.COORDINATES_BG + ); + expect(coordinatesBackground.length).toBe(0); + + const coordinateLabels = fixture.debugElement.queryAll( + css.COORDINATE_LABELS + ); + expect(coordinateLabels.length).toBe(0); + }); + + it('renders parallel coordinates with selected annoations', () => { + store.overrideSelector( + getCurrentRouteRunSelection, + new Map([ + ['run_1', true], + ['run_2', false], + ['run_3', true], + ]) + ); + store.overrideSelector(getAnnotationData, annotationData); + store.overrideSelector(getSelectedAnnotations, ['annotation_1']); + store.overrideSelector(getRunToMetrics, { + run_1: ['nPMI@test', 'nPMI@other'], + run_2: ['nPMI@test'], + run_3: ['nPMI@test', 'nPMI@other', 'nPMI_diff@(test - other)'], + }); + const fixture = TestBed.createComponent(ParallelCoordinatesContainer); + fixture.detectChanges(); + + const pcChart = fixture.debugElement.query(css.PC_CHART); + expect(pcChart).toBeTruthy(); + + const axes = fixture.debugElement.queryAll(css.AXES); + expect(axes.length).toBe(2); + + const axisLabels = fixture.debugElement.queryAll(css.AXIS_LABELS); + expect(axisLabels.length).toBe(2); + + const axisBackgroundLabels = fixture.debugElement.queryAll( + css.AXIS_BG_LABELS + ); + expect(axisBackgroundLabels.length).toBe(2); + + const coordinates = fixture.debugElement.queryAll(css.COORDINATES); + expect(coordinates.length).toBe(2); + + const coordinatesBackground = fixture.debugElement.queryAll( + css.COORDINATES_BG + ); + expect(coordinatesBackground.length).toBe(2); + + const coordinateLabels = fixture.debugElement.queryAll( + css.COORDINATE_LABELS + ); + expect(coordinateLabels.length).toBe(2); + }); + + it('renders parallel coordinates with additional metric filter', () => { + store.overrideSelector( + getCurrentRouteRunSelection, + new Map([ + ['run_1', true], + ['run_2', false], + ['run_3', true], + ]) + ); + store.overrideSelector(getAnnotationData, annotationData); + store.overrideSelector(getSelectedAnnotations, ['annotation_1']); + store.overrideSelector(getRunToMetrics, { + run_1: ['nPMI@test', 'nPMI@other'], + run_2: ['nPMI@test'], + run_3: ['nPMI@test', 'nPMI@other', 'nPMI_diff@(test - other)'], + }); + store.overrideSelector(getMetricFilters, { + 'nPMI_diff@(test - other)': {max: 1.0, min: -1.0, includeNaN: false}, + }); + const fixture = TestBed.createComponent(ParallelCoordinatesContainer); + fixture.detectChanges(); + + const pcChart = fixture.debugElement.query(css.PC_CHART); + expect(pcChart).toBeTruthy(); + + const axes = fixture.debugElement.queryAll(css.AXES); + expect(axes.length).toBe(3); + + const axisLabels = fixture.debugElement.queryAll(css.AXIS_LABELS); + expect(axisLabels.length).toBe(3); + + const axisBackgroundLabels = fixture.debugElement.queryAll( + css.AXIS_BG_LABELS + ); + expect(axisBackgroundLabels.length).toBe(3); + + const coordinates = fixture.debugElement.queryAll(css.COORDINATES); + expect(coordinates.length).toBe(2); + + const coordinatesBackground = fixture.debugElement.queryAll( + css.COORDINATES_BG + ); + expect(coordinatesBackground.length).toBe(2); + + const coordinateLabels = fixture.debugElement.queryAll( + css.COORDINATE_LABELS + ); + expect(coordinateLabels.length).toBe(2); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/selected_annotations_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/selected_annotations_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..59e6f724047218f5cf0426f445ce99c1b62c3b76 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/selected_annotations_component.ng.html @@ -0,0 +1,49 @@ + +
    +
    +

    Selected Annotations

    + + +
    + +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/selected_annotations_component.scss b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/selected_annotations_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..9dcae57b7bcc2fdd820436b5bc60535b55dec805 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/selected_annotations_component.scss @@ -0,0 +1,35 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +.pc-container { + background-color: mat-color($tb-background, card); + border: 1px solid mat-color($tb-foreground, border); +} + +.pc-toolbar { + align-items: center; + border-bottom: 1px solid mat-color($tb-foreground, border); + display: flex; + height: 42px; + padding: 0 16px; +} + +.pc-title { + font-size: 14px; + font-weight: 500; + display: inline; + flex: 1 1; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/selected_annotations_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/selected_annotations_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..3b8c0d3a2b011a018c9954cc20e86eb5147f52e4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/selected_annotations_component.ts @@ -0,0 +1,34 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + Input, + Output, + EventEmitter, +} from '@angular/core'; + +@Component({ + selector: 'selected-annotations-component', + templateUrl: './selected_annotations_component.ng.html', + styleUrls: ['./selected_annotations_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SelectedAnnotationsComponent { + @Input() pcExpanded!: boolean; + @Input() selectedAnnotations!: string[]; + @Output() onClearSelectedAnnotations = new EventEmitter(); + @Output() onToggleExpanded = new EventEmitter(); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/selected_annotations_container.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/selected_annotations_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..223ff43aca2ad944680e7758247f680f89d1b5d3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/selected_annotations_container.ts @@ -0,0 +1,49 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, ChangeDetectionStrategy} from '@angular/core'; +import {select, Store} from '@ngrx/store'; +import {State} from '../../../../app_state'; + +import {getPCExpanded, getSelectedAnnotations} from '../../store'; +import * as npmiActions from '../../actions'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'npmi-selected-annotations', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SelectedAnnotationsContainer { + readonly pcExpanded$ = this.store.pipe(select(getPCExpanded)); + readonly selectedAnnotations$ = this.store.select(getSelectedAnnotations); + + constructor(private readonly store: Store) {} + + clearSelectedAnnotations() { + this.store.dispatch(npmiActions.npmiClearSelectedAnnotations()); + } + + toggleExpanded() { + this.store.dispatch(npmiActions.npmiToggleParallelCoordinatesExpanded()); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/selected_annotations_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/selected_annotations_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..aa92e91101659a1d42c0bef4c620f7877ed352cc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/selected_annotations_module.ts @@ -0,0 +1,35 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; + +import {MatButtonModule} from '@angular/material/button'; +import {MatIconModule} from '@angular/material/icon'; + +import {SelectedAnnotationsComponent} from './selected_annotations_component'; +import {SelectedAnnotationsContainer} from './selected_annotations_container'; +import {ParallelCoordinatesModule} from './parallel_coordinates/parallel_coordinates_module'; + +@NgModule({ + declarations: [SelectedAnnotationsComponent, SelectedAnnotationsContainer], + imports: [ + CommonModule, + MatIconModule, + MatButtonModule, + ParallelCoordinatesModule, + ], + exports: [SelectedAnnotationsContainer], +}) +export class SelectedAnnotationsModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/selected_annotations_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/selected_annotations_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..d0bb469ccff2504ab26a60ef3c1fe9d25a497c42 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/selected_annotations/selected_annotations_test.ts @@ -0,0 +1,137 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * Unit tests for the Selected Annotations. + */ +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; + +import {Store, Action} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {State} from '../../../../app_state'; +import {appStateFromNpmiState, createNpmiState} from '../../testing'; +import {SelectedAnnotationsContainer} from './selected_annotations_container'; +import {SelectedAnnotationsComponent} from './selected_annotations_component'; +import * as npmiActions from '../../actions'; +import {getPCExpanded, getSelectedAnnotations} from '../../store'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('Npmi Selected Annotations', () => { + let store: MockStore; + let dispatchedActions: Action[]; + const css = { + TITLE: By.css('.pc-title'), + BUTTONS: By.css('button'), + EXPAND_ICON: By.css('.expand-icon'), + EXPAND_LESS_ICON: By.css('.expand-less-icon'), + CLEAR_BUTTON: By.css('.clear-button'), + EXPAND_BUTTON: By.css('.expand-button'), + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ + SelectedAnnotationsComponent, + SelectedAnnotationsContainer, + ], + imports: [], + providers: [ + provideMockStore({ + initialState: appStateFromNpmiState(createNpmiState()), + }), + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + + dispatchedActions = []; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + dispatchedActions.push(action); + }); + }); + + it('renders selected annotations component expanded', () => { + const fixture = TestBed.createComponent(SelectedAnnotationsContainer); + fixture.detectChanges(); + + const title = fixture.debugElement.query(css.TITLE); + expect(title.nativeElement.textContent.trim()).toBe('Selected Annotations'); + + const buttons = fixture.debugElement.queryAll(css.BUTTONS); + expect(buttons.length).toBe(2); + + const expandIcon = fixture.debugElement.query(css.EXPAND_ICON); + expect(expandIcon).toBeNull(); + + const expandLessIcon = fixture.debugElement.query(css.EXPAND_LESS_ICON); + expect(expandLessIcon).toBeTruthy(); + }); + + it('renders selected annotations component not expanded', () => { + store.overrideSelector(getPCExpanded, false); + const fixture = TestBed.createComponent(SelectedAnnotationsContainer); + fixture.detectChanges(); + + const title = fixture.debugElement.query(css.TITLE); + expect(title.nativeElement.textContent.trim()).toBe('Selected Annotations'); + + const buttons = fixture.debugElement.queryAll(css.BUTTONS); + expect(buttons.length).toBe(2); + + const expandIcon = fixture.debugElement.query(css.EXPAND_ICON); + expect(expandIcon).toBeTruthy(); + + const expandLessIcon = fixture.debugElement.query(css.EXPAND_LESS_ICON); + expect(expandLessIcon).toBeNull(); + }); + + it('dispatches toggle expanded when button clicked', () => { + const fixture = TestBed.createComponent(SelectedAnnotationsContainer); + fixture.detectChanges(); + + const toggleButton = fixture.debugElement.query(css.EXPAND_BUTTON); + toggleButton.nativeElement.click(); + + expect(dispatchedActions).toEqual([ + npmiActions.npmiToggleParallelCoordinatesExpanded(), + ]); + }); + + it('dispatches clear selected when button clicked', () => { + store.overrideSelector(getSelectedAnnotations, ['test', 'test2']); + const fixture = TestBed.createComponent(SelectedAnnotationsContainer); + fixture.detectChanges(); + + const clearButton = fixture.debugElement.query(css.CLEAR_BUTTON); + clearButton.nativeElement.click(); + + expect(dispatchedActions).toEqual([ + npmiActions.npmiClearSelectedAnnotations(), + ]); + }); + + it('does not dispatch clear selected when nothing selected', () => { + const fixture = TestBed.createComponent(SelectedAnnotationsContainer); + fixture.detectChanges(); + + const clearButton = fixture.debugElement.query(css.CLEAR_BUTTON); + clearButton.nativeElement.click(); + + expect(dispatchedActions).toEqual([]); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..b6d490de3cb7e069bd958347680cf1b1fdc6d816 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/BUILD @@ -0,0 +1,64 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "violin_filters_component_styles", + src = "violin_filters_component.scss", +) + +ng_module( + name = "violin_filters", + srcs = [ + "violin_filters_component.ts", + "violin_filters_container.ts", + "violin_filters_module.ts", + ], + assets = [ + ":violin_filters_component_styles", + "violin_filters_component.ng.html", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter", + "@npm//@angular/core", + "@npm//@angular/forms", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "violin_filters_test_lib", + testonly = True, + srcs = [ + "violin_filters_test.ts", + ], + deps = [ + ":violin_filters", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/testing", + "//tensorboard/webapp/runs_legacy", + "//tensorboard/webapp/testing:mat_icon", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..60b4adde0eab9e5c1350d4e0757e4e3b0bac6b7f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/BUILD @@ -0,0 +1,70 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "violin_filter_component_styles", + src = "violin_filter_component.scss", +) + +ng_module( + name = "violin_filter", + srcs = [ + "violin_filter_component.ts", + "violin_filter_container.ts", + "violin_filter_module.ts", + ], + assets = [ + "violin_filter_component.ng.html", + ":violin_filter_component_styles", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/util:filter_annotations", + "//tensorboard/webapp/plugins/npmi/util:violin_data", + "//tensorboard/webapp/third_party:d3", + "@npm//@angular/core", + "@npm//@angular/forms", + "@npm//@ngrx/store", + "@npm//@types/d3", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "violin_filter_test_lib", + testonly = True, + srcs = [ + "violin_filter_test.ts", + ], + deps = [ + ":violin_filter", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/plugins/npmi/actions", + "//tensorboard/webapp/plugins/npmi/store", + "//tensorboard/webapp/plugins/npmi/store:types", + "//tensorboard/webapp/plugins/npmi/testing", + "//tensorboard/webapp/runs_legacy", + "//tensorboard/webapp/testing:mat_icon", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/violin_filter_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/violin_filter_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..b52a507bc4fe1e84901e0c0c8f486ab907025ba4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/violin_filter_component.ng.html @@ -0,0 +1,35 @@ + +
    +
    +
    {{metricName}}
    + +
    +
    + +
    +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/violin_filter_component.scss b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/violin_filter_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..79477b2f06824d151bc3e0a69a45de340894653f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/violin_filter_component.scss @@ -0,0 +1,50 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +.chart-container { + background-color: mat-color($tb-background, card); + border-bottom: 1px solid mat-color($tb-foreground, border); + display: flex; + flex-direction: column; + overflow: hidden; +} + +.chart { + height: 300px; + width: 100%; +} + +.chart-head { + align-items: center; + display: flex; + justify-content: space-between; +} + +.chart-heading { + font-size: 13px; + padding-left: 10px; + padding-top: 10px; +} + +.draw-area { + height: 100%; + width: 100%; +} + +.stroked-line { + stroke: mat-color($tb-foreground, divider); + stroke-dasharray: 3 3; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/violin_filter_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/violin_filter_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..1d230791b345fbda9e578351e30d56d2463d8972 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/violin_filter_component.ts @@ -0,0 +1,422 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + Input, + Output, + AfterViewInit, + OnChanges, + SimpleChanges, + EventEmitter, + ViewChild, + ElementRef, +} from '@angular/core'; + +import * as d3 from '../../../../../third_party/d3'; + +import {MetricFilter, TfColorScale} from './../../../store/npmi_types'; +import {ViolinChartData, ViolinBin} from './../../../util/violin_data'; + +@Component({ + selector: 'violin-filter-component', + templateUrl: './violin_filter_component.ng.html', + styleUrls: ['./violin_filter_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ViolinFilterComponent implements AfterViewInit, OnChanges { + @Input() metricName!: string; + @Input() filter!: MetricFilter; + @Input() chartData!: { + violinData: ViolinChartData; + extremes: {min: number; max: number}; + }; + @Input() width!: number; + @Output() onRemove = new EventEmitter(); + @Output() onUpdateFilter = new EventEmitter(); + @ViewChild('chart', {static: true, read: ElementRef}) + private readonly chartContainer!: ElementRef; + private readonly height = 300; + private chartWidth: number = 0; + private chartHeight: number = 0; + private drawHeight: number = 0; + private drawWidth: number = 0; + private readonly margin = {top: 20, right: 10, bottom: 20, left: 10}; + private readonly drawMargin = {top: 0, right: 0, bottom: 20, left: 20}; + private colorScale: (runName: string) => string = () => '#333333'; + // Drawing containers + private svg!: d3.Selection< + SVGElement, + unknown, + HTMLElement | null, + undefined + >; + private mainContainer!: d3.Selection< + SVGGElement, + unknown, + HTMLElement | null, + undefined + >; + private drawContainer!: d3.Selection< + SVGGElement, + unknown, + HTMLElement | null, + undefined + >; + // Containers for axis and dots + private dotsGroup!: d3.Selection< + SVGGElement, + unknown, + HTMLElement | null, + undefined + >; + private xAxisGroup!: d3.Selection< + SVGGElement, + unknown, + HTMLElement | null, + undefined + >; + private yAxisGroup!: d3.Selection< + SVGGElement, + unknown, + HTMLElement | null, + undefined + >; + private miscGroup!: d3.Selection< + SVGGElement, + unknown, + HTMLElement | null, + undefined + >; + // Scales and axis + private xScale!: d3.ScalePoint; + private xAxis?: d3.Axis; + private yScale!: d3.ScaleLinear; + private yAxis?: d3.Axis; + private xScaleNum!: d3.ScaleLinear; + // Brush + private readonly brush: d3.BrushBehavior = d3.brushY(); + // Misc + private nanLine!: d3.Selection< + SVGLineElement, + unknown, + HTMLElement | null, + undefined + >; + private nanText!: d3.Selection< + SVGTextElement, + unknown, + HTMLElement | null, + undefined + >; + private zeroLine!: d3.Selection< + SVGLineElement, + unknown, + HTMLElement | null, + undefined + >; + + private maxBinSize = 0; + private readonly area = d3 + .area() + .x0( + function (this: ViolinFilterComponent, d: ViolinBin) { + return this.xScaleNum(-d.length); + }.bind(this) + ) + .x1( + function (this: ViolinFilterComponent, d: ViolinBin) { + return this.xScaleNum(d.length); + }.bind(this) + ) + .y( + function (this: ViolinFilterComponent, d: ViolinBin) { + if (d.x0! === -Infinity) { + return this.chartHeight - this.drawMargin.top; + } + return this.yScale((d.x1! + d.x0!) / 2.0); + }.bind(this) + ) + .curve(d3.curveCatmullRom); + + ngAfterViewInit(): void { + this.updateDimensions(); + const runsColorScale = (document.createElement( + 'tf-color-scale' + ) as TfColorScale).runsColorScale; + this.colorScale = runsColorScale ? runsColorScale : this.colorScale; + this.svg = d3.select(this.chartContainer.nativeElement).select('svg'); + this.mainContainer = this.svg + .append('g') + .attr('transform', `translate(${this.margin.left}, ${this.margin.top})`); + this.drawContainer = this.mainContainer + .append('g') + .attr( + 'transform', + `translate(${this.drawMargin.left}, ${this.drawMargin.top})` + ); + this.dotsGroup = this.drawContainer.append('g').attr('class', 'dotsGroup'); + this.yAxisGroup = this.mainContainer + .append('g') + .attr('class', 'axis axis--y'); + this.xAxisGroup = this.mainContainer + .append('g') + .attr('class', 'axis axis--x'); + this.miscGroup = this.drawContainer.append('g'); + this.xScale = d3.scaleBand().padding(0.05); + this.xAxis = d3.axisBottom(this.xScale); + this.yScale = d3.scaleLinear().range([this.drawHeight, 0]); + this.yAxis = d3.axisLeft(this.yScale); + this.xScaleNum = d3.scaleLinear(); + this.initializeBrush(); + this.drawMisc(); + this.redraw(); + } + + ngOnChanges(changes: SimpleChanges) { + if (this.svg) { + this.redraw(); + } + } + + redraw() { + this.updateDimensions(); + this.setMaxBinSize(); + this.updateAxes(); + this.draw(); + } + + // Initializing/Updating the visualization props + private updateDimensions() { + this.chartWidth = this.width - this.margin.left - this.margin.right; + this.drawWidth = + this.chartWidth - this.drawMargin.left - this.drawMargin.right; + this.chartHeight = this.height - this.margin.top - this.margin.bottom; + this.drawHeight = + this.chartHeight - this.drawMargin.top - this.drawMargin.bottom; + } + + setMaxBinSize() { + Object.values(this.chartData.violinData).forEach((dataElement) => { + const lengths = dataElement.map((bin) => bin.length); + const longest: number = Math.max(...lengths); + this.maxBinSize = Math.max(longest, this.maxBinSize); + }); + } + + updateAxes() { + this.xScale + .range([0, this.drawWidth]) + .domain(Object.keys(this.chartData.violinData)); + + this.yScale.domain([ + this.chartData.extremes.min, + this.chartData.extremes.max, + ]); + + this.xScaleNum + .range([0, this.xScale.bandwidth()]) + .domain([-this.maxBinSize, this.maxBinSize]); + } + + initializeBrush() { + this.brush.on('end', this.brushMoved.bind(this)); + } + + // Drawing UI + draw() { + this.drawAxes(); + this.drawPlot(); + this.refreshMisc(); + this.refreshBrush(); + } + + drawAxes() { + this.yAxisGroup + .attr( + 'transform', + `translate(${this.drawMargin.left}, + ${this.drawMargin.top})` + ) + .call(this.yAxis!); + this.xAxisGroup + .attr( + 'transform', + `translate(${this.drawMargin.left}, + ${this.drawMargin.top + this.chartHeight})` + ) + .call(this.xAxis!); + } + + drawPlot() { + const plots = this.dotsGroup + .selectAll('.violin-plot') + .data(Object.entries(this.chartData.violinData)); + + plots + .enter() + .append('path') + .attr('class', 'violin-plot') + .style( + 'stroke', + function ( + this: ViolinFilterComponent, + d: [string, ViolinBin[]] + ): string { + return this.colorScale(d[0]); + }.bind(this) + ) + .style( + 'fill', + function ( + this: ViolinFilterComponent, + d: [string, ViolinBin[]] + ): string { + return `${this.colorScale(d[0])}33`; + }.bind(this) + ) + .attr( + 'transform', + function ( + this: ViolinFilterComponent, + d: [string, ViolinBin[]] + ): string { + return `translate(${this.xScale(d[0])}, 0)`; + }.bind(this) + ) + .datum(function (d: [string, ViolinBin[]]): ViolinBin[] { + return d[1]; + }) + .attr('d', this.area); + + plots + .attr( + 'transform', + function ( + this: ViolinFilterComponent, + d: [string, ViolinBin[]] + ): string { + return `translate(${this.xScale(d[0])}, 0)`; + }.bind(this) + ) + .datum(function (d: [string, ViolinBin[]]): ViolinBin[] { + return d[1]; + }) + .attr('d', this.area); + + plots.exit().remove(); + } + + drawMisc() { + this.zeroLine = this.miscGroup + .append('line') + .style('stroke', 'black') + .attr('x1', 0) + .attr('y1', this.yScale(0)) + .attr('x2', this.drawWidth) + .attr('y2', this.yScale(0)); + this.nanText = this.miscGroup + .append('text') + .style('fill', 'black') + .text('NaN') + .attr('font-size', '10px') + .attr('text-anchor', 'end') + .attr('alignment-baseline', 'middle') + .attr('x', -5) + .attr('y', this.chartHeight - this.drawMargin.top); + this.nanLine = this.miscGroup + .append('line') + .style('stroke', 'grey') + .style('stroke-dasharray', '3, 3') + .attr('x1', 0) + .attr('y1', this.chartHeight - this.drawMargin.top) + .attr('x2', this.drawWidth) + .attr('y2', this.chartHeight - this.drawMargin.top); + } + + refreshMisc() { + this.zeroLine + .attr('y1', this.yScale(0)) + .attr('x2', this.drawWidth) + .attr('y2', this.yScale(0)); + this.nanText.attr('y', this.chartHeight - this.drawMargin.top); + this.nanLine + .attr('y1', this.drawHeight + this.drawMargin.top) + .attr('x2', this.drawWidth) + .attr('y2', this.drawHeight + this.drawMargin.top); + } + + private refreshBrush() { + this.brush.extent([ + [0, 0], + [this.drawWidth, this.drawHeight + this.margin.top], + ]); + const brushPosition = [0, this.drawHeight + this.margin.top]; + if (this.filter.max < this.filter.min) { + if (this.filter.includeNaN) { + // Only NaN selected + brushPosition[0] = this.yScale(this.chartData.extremes.min); + } else { + // Nothing selected + brushPosition[0] = brushPosition[1]; + } + } else { + if (!this.filter.includeNaN) { + // Min does not reach NaN + const min = Math.max(this.chartData.extremes.min, this.filter.min); + brushPosition[1] = this.yScale(min); + } + const max = Math.min(this.chartData.extremes.max, this.filter.max); + brushPosition[0] = this.yScale(max); + } + + this.drawContainer.call(this.brush).call(this.brush.move, brushPosition); + } + + // Called on Interaction + brushMoved() { + if (!d3.event) return; + if (!d3.event.sourceEvent) return; + const extent = d3.event.selection; + if (extent) { + let includeNaN = false; + let max = -2.0; + let min = this.chartData.extremes.min; + if ( + extent[0] <= this.drawHeight + this.margin.top && + extent[1] >= this.drawHeight + ) { + includeNaN = true; + } + if (extent[0] < this.drawHeight) { + max = this.yScale.invert(extent[0]); + } + if (extent[1] < this.drawHeight) { + min = this.yScale.invert(extent[1]); + } + this.onUpdateFilter.emit({ + max: max, + min: min, + includeNaN: includeNaN, + }); + } else { + this.onUpdateFilter.emit({ + max: 1.0, + min: -1.0, + includeNaN: true, + }); + } + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/violin_filter_container.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/violin_filter_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..dc57d058e56fa30ccc0b89e2ee7ba170c575968a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/violin_filter_container.ts @@ -0,0 +1,110 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, ChangeDetectionStrategy, Input, OnInit} from '@angular/core'; +import {Store, select} from '@ngrx/store'; + +import {Observable, combineLatest} from 'rxjs'; +import {map} from 'rxjs/operators'; + +import {State} from '../../../../../app_state'; +import {getCurrentRouteRunSelection} from '../../../../../selectors'; +import { + getAnnotationData, + getHiddenAnnotations, + getShowHiddenAnnotations, + getSidebarWidth, +} from './../../../store/npmi_selectors'; +import {MetricFilter} from '../../../store/npmi_types'; +import * as npmiActions from '../../../actions'; +import {removeHiddenAnnotations} from '../../../util/filter_annotations'; +import {violinData, ViolinChartData} from '../../../util/violin_data'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'npmi-violin-filter', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ViolinFilterContainer implements OnInit { + @Input() metricName!: string; + @Input() filter!: MetricFilter; + readonly activeRuns$ = this.store + .pipe(select(getCurrentRouteRunSelection)) + .pipe( + map((runSelection) => { + if (!runSelection) return []; + return Array.from(runSelection.entries()) + .filter((run) => run[1]) + .map((run) => run[0]); + }) + ); + readonly visibleAnnotations$ = combineLatest([ + this.store.select(getAnnotationData), + this.store.select(getHiddenAnnotations), + this.store.select(getShowHiddenAnnotations), + ]).pipe( + map(([annotationData, hiddenAnnotations, showHiddenAnnotations]) => { + return removeHiddenAnnotations( + annotationData, + hiddenAnnotations, + showHiddenAnnotations + ); + }) + ); + readonly chartWidth$ = this.store.pipe(select(getSidebarWidth)).pipe( + map((width) => { + return Math.max(150, width); + }) + ); + chartData$?: Observable<{ + violinData: ViolinChartData; + extremes: {min: number; max: number}; + }>; + + constructor(private readonly store: Store) {} + + ngOnInit() { + this.chartData$ = combineLatest([ + this.visibleAnnotations$, + this.activeRuns$, + ]).pipe( + map(([visibleAnnotations, activeRuns]) => { + return violinData(visibleAnnotations, activeRuns, this.metricName); + }) + ); + } + + removeMetric() { + this.store.dispatch( + npmiActions.npmiRemoveMetricFilter({metric: this.metricName}) + ); + } + + updateFilter(filter: MetricFilter) { + this.store.dispatch( + npmiActions.npmiChangeMetricFilter({metric: this.metricName, ...filter}) + ); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/violin_filter_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/violin_filter_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..d1fc9c60378081c7361c12db89be8ba324434328 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/violin_filter_module.ts @@ -0,0 +1,30 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {FormsModule} from '@angular/forms'; + +import {MatButtonModule} from '@angular/material/button'; +import {MatIconModule} from '@angular/material/icon'; + +import {ViolinFilterComponent} from './violin_filter_component'; +import {ViolinFilterContainer} from './violin_filter_container'; + +@NgModule({ + declarations: [ViolinFilterComponent, ViolinFilterContainer], + imports: [CommonModule, FormsModule, MatButtonModule, MatIconModule], + exports: [ViolinFilterContainer], +}) +export class ViolinFilterModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/violin_filter_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/violin_filter_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..70202327ee4892f5bdbee59f327f61332a03ad63 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filter/violin_filter_test.ts @@ -0,0 +1,164 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * Unit tests for a violin filter. + */ +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed, ComponentFixture} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; + +import {Action, Store} from '@ngrx/store'; +import {State} from '../../../../../app_state'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {ViolinFilterComponent} from './violin_filter_component'; +import {ViolinFilterContainer} from './violin_filter_container'; +import {appStateFromNpmiState, createNpmiState} from '../../../testing'; +import {createState, createCoreState} from '../../../../../core/testing'; +import * as npmiActions from '../../../actions'; +import {getAnnotationData} from '../../../store'; +import {getCurrentRouteRunSelection} from '../../../../../selectors'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('Npmi Violin Filter Container', () => { + let store: MockStore; + let dispatchedActions: Action[]; + let fixture: ComponentFixture; + const css = { + CHART_CONTAINER: By.css('.chart-container'), + REMOVE_BUTTON: By.css('button'), + HEADING: By.css('.chart-heading'), + CHART: By.css('.chart'), + VIOLIN_PLOTS: By.css('.violin-plot'), + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ViolinFilterContainer, ViolinFilterComponent], + imports: [], + providers: [ + provideMockStore({ + initialState: { + ...createState(createCoreState()), + ...appStateFromNpmiState(createNpmiState()), + }, + }), + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + + dispatchedActions = []; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + dispatchedActions.push(action); + }); + + store.overrideSelector( + getCurrentRouteRunSelection, + new Map([ + ['run_1', true], + ['run_2', false], + ['run_3', true], + ]) + ); + store.overrideSelector(getAnnotationData, { + annotation_1: [ + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_1', + nPMIValue: 0.5178, + countValue: 100, + }, + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_2', + nPMIValue: 0.02157, + countValue: 101, + }, + { + annotation: 'annotation_1', + metric: 'test', + run: 'run_3', + nPMIValue: -0.1, + countValue: 53, + }, + ], + annotation_2: [ + { + annotation: 'annotation_2', + metric: 'test', + run: 'run_1', + nPMIValue: -0.5178, + countValue: 572, + }, + { + annotation: 'annotation_2', + metric: 'test', + run: 'run_2', + nPMIValue: 0.351, + countValue: 101, + }, + { + annotation: 'annotation_2', + metric: 'test', + run: 'run_3', + nPMIValue: 0.1, + countValue: 53, + }, + ], + }); + fixture = TestBed.createComponent(ViolinFilterContainer); + fixture.componentInstance.metricName = 'nPMI@test'; + fixture.componentInstance.filter = { + max: 1.0, + min: -1.0, + includeNaN: false, + }; + fixture.detectChanges(); + }); + + it('renders npmi violin filter component', () => { + const chartContainer = fixture.debugElement.query(css.CHART_CONTAINER); + expect(chartContainer).toBeTruthy(); + + const removeButton = fixture.debugElement.queryAll(css.REMOVE_BUTTON); + expect(removeButton).toBeTruthy(); + + const chartHeading = fixture.debugElement.query(css.HEADING); + expect(chartHeading).toBeTruthy(); + expect(chartHeading.nativeElement.textContent.trim()).toBe('nPMI@test'); + + const chart = fixture.debugElement.query(css.CHART); + expect(chart).toBeTruthy(); + }); + + it('renders one plot per active run', () => { + const plots = fixture.debugElement.queryAll(css.VIOLIN_PLOTS); + expect(plots.length).toBe(2); + }); + + it('dispatches removeFilter action when button clicked', () => { + const removeButton = fixture.debugElement.query(css.REMOVE_BUTTON); + expect(removeButton).toBeTruthy(); + removeButton.nativeElement.click(); + + expect(dispatchedActions).toEqual([ + npmiActions.npmiRemoveMetricFilter({metric: 'nPMI@test'}), + ]); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filters_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filters_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..53d51961eaadfef18b63231c385f4f051eff1f00 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filters_component.ng.html @@ -0,0 +1,40 @@ + +
    +

    Active Filters

    +
    + +
    +
    +
    + + +
    +
    + You can add more filters at the top. +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filters_component.scss b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filters_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..a5d0f2a930fcaad8ffcbe0def3171a5a53030b44 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filters_component.scss @@ -0,0 +1,62 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +:host { + display: flex; + flex-direction: column; + height: 100%; +} + +.filters-toolbar { + align-items: center; + border-bottom: 1px solid mat-color($tb-foreground, border); + display: flex; + height: 42px; + justify-content: space-between; + padding: 0 10px; +} + +.filters-title { + display: inline; + font-size: 14px; + font-weight: 500; +} + +.side-toggle { + align-items: center; + background-color: mat-color($tb-background, raised-button); + border-radius: 3px; + border: 1px solid mat-color($tb-foreground, border); + display: flex; + height: 30px; + justify-content: center; + width: 30px; +} + +.filters { + overflow-y: auto; +} + +.filters-hint { + align-items: center; + display: flex; + height: 42px; + padding: 0 16px; +} + +.filters-hint-text { + color: mat-color($tb-foreground, hint-text); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filters_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filters_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..04919ec6454a3625a1c082177ea348140d1f3057 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filters_component.ts @@ -0,0 +1,34 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + Input, + Output, + EventEmitter, +} from '@angular/core'; +import {MetricFilter} from '../../store/npmi_types'; + +@Component({ + selector: 'violin-filters-component', + templateUrl: './violin_filters_component.ng.html', + styleUrls: ['./violin_filters_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ViolinFiltersComponent { + @Input() sidebarExpanded!: boolean; + @Input() metricFilters!: [string, MetricFilter][]; + @Output() toggleSidebarExpanded = new EventEmitter(); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filters_container.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filters_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..b31c9acb128304a06fc163a218bfc00d583e03e0 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filters_container.ts @@ -0,0 +1,50 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, ChangeDetectionStrategy, Input} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {State} from '../../../../app_state'; + +import {map} from 'rxjs/operators'; + +import {getSidebarExpanded, getMetricFilters} from '../../store'; +import * as npmiActions from '../../actions'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'npmi-violin-filters', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ViolinFiltersContainer { + readonly sidebarExpanded$ = this.store.select(getSidebarExpanded); + readonly metricFilters$ = this.store.select(getMetricFilters).pipe( + map((filters) => { + return Object.entries(filters); + }) + ); + + constructor(private readonly store: Store) {} + + onToggleSidebarExpanded() { + this.store.dispatch(npmiActions.npmiToggleSidebarExpanded()); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filters_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filters_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..ed8548ae99238b1acac86e8e963befea570688b0 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filters_module.ts @@ -0,0 +1,37 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {FormsModule} from '@angular/forms'; + +import {MatButtonModule} from '@angular/material/button'; +import {MatIconModule} from '@angular/material/icon'; + +import {ViolinFiltersComponent} from './violin_filters_component'; +import {ViolinFiltersContainer} from './violin_filters_container'; +import {ViolinFilterModule} from './violin_filter/violin_filter_module'; + +@NgModule({ + declarations: [ViolinFiltersComponent, ViolinFiltersContainer], + imports: [ + CommonModule, + FormsModule, + MatIconModule, + MatButtonModule, + ViolinFilterModule, + ], + exports: [ViolinFiltersContainer], +}) +export class ViolinFiltersModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filters_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filters_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..495c6e92ff32cca61d8c4064857f278c582d949b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/npmi/views/violin_filters/violin_filters_test.ts @@ -0,0 +1,116 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * Unit tests for the violin filters. + */ +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; + +import {Action, Store} from '@ngrx/store'; +import {State} from '../../../../app_state'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {ViolinFiltersComponent} from './violin_filters_component'; +import {ViolinFiltersContainer} from './violin_filters_container'; +import {appStateFromNpmiState, createNpmiState} from '../../testing'; +import {createState, createCoreState} from '../../../../core/testing'; +import * as npmiActions from '../../actions'; +import {getSidebarExpanded, getMetricFilters} from '../../store'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('Npmi Violin Filters Container', () => { + let store: MockStore; + let dispatchedActions: Action[]; + const css = { + FILTERS_TOOLBAR: By.css('.filters-toolbar'), + SIDE_TOGGLE: By.css('.side-toggle'), + BUTTON: By.css('button'), + FILTERS_HINT: By.css('.filters-hint'), + VIOLIN_FILTERS: By.css('npmi-violin-filter'), + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ViolinFiltersContainer, ViolinFiltersComponent], + imports: [], + providers: [ + provideMockStore({ + initialState: { + ...createState(createCoreState()), + ...appStateFromNpmiState(createNpmiState()), + }, + }), + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + + dispatchedActions = []; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + dispatchedActions.push(action); + }); + }); + + it('renders npmi violin filters component without filters', () => { + store.overrideSelector(getMetricFilters, {}); + const fixture = TestBed.createComponent(ViolinFiltersContainer); + fixture.detectChanges(); + + const violinFilters = fixture.debugElement.query(css.FILTERS_TOOLBAR); + expect(violinFilters).toBeTruthy(); + + const filters = fixture.debugElement.queryAll(css.VIOLIN_FILTERS); + expect(filters.length).toBe(0); + + const filterHint = fixture.debugElement.query(css.FILTERS_HINT); + expect(filterHint).toBeTruthy(); + }); + + it('renders npmi violin filters component with filters', () => { + store.overrideSelector(getMetricFilters, { + filter_1: {max: 1.0, min: -1.0, includeNaN: false}, + filter_2: {max: 1.0, min: -1.0, includeNaN: false}, + }); + const fixture = TestBed.createComponent(ViolinFiltersContainer); + fixture.detectChanges(); + + const violinFilters = fixture.debugElement.query(css.FILTERS_TOOLBAR); + expect(violinFilters).toBeTruthy(); + + const filters = fixture.debugElement.queryAll(css.VIOLIN_FILTERS); + expect(filters.length).toBe(2); + + const filterHint = fixture.debugElement.query(css.FILTERS_HINT); + expect(filterHint).toBeNull(); + }); + + it('dispatches toggle expanded action when hide button clicked', () => { + store.overrideSelector(getSidebarExpanded, true); + const fixture = TestBed.createComponent(ViolinFiltersContainer); + fixture.detectChanges(); + + const sideToggle = fixture.debugElement.query(css.SIDE_TOGGLE); + expect(sideToggle).toBeTruthy(); + const hideButton = sideToggle.query(css.BUTTON); + expect(hideButton).toBeTruthy(); + hideButton.nativeElement.click(); + + expect(dispatchedActions).toEqual([ + npmiActions.npmiToggleSidebarExpanded(), + ]); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/plugin_registry_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/plugin_registry_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..9aedac662e7040d2f7828c71c9cb4b40277a7561 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/plugin_registry_module.ts @@ -0,0 +1,78 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + NgModule, + Component, + Type, + ModuleWithProviders, + Inject, + Optional, +} from '@angular/core'; +import {PluginConfig, PLUGIN_CONFIG_TOKEN} from './plugin_registry_types'; + +const pluginNameToComponent = new Map>(); + +@NgModule({}) +export class PluginRegistryModule { + constructor( + @Optional() @Inject(PLUGIN_CONFIG_TOKEN) configs: PluginConfig[] + ) { + if (!configs) { + return; + } + const pluginNames = new Set(configs.map((config) => config.pluginName)); + console.assert( + pluginNames.size === configs.length, + 'Cannot register the same plugin multiple times.' + ); + + for (const config of configs) { + const {pluginName, componentClass} = config; + pluginNameToComponent.set(pluginName, componentClass as Type); + } + } + + /** + * An NgModule that declares a Component can call this method to register the + * Component to be rendered when a plugin is requested by name. Modules + * register by adding the following configuration: + * + * @NgModule({ + * imports: [ + * PluginRegistryModule.forPlugin('scalars', ScalarsDashboard) + * ], + * entryComponents: [ScalarsDashboard] + * }) + */ + static forPlugin( + pluginName: string, + componentClass: any + ): ModuleWithProviders { + return { + ngModule: PluginRegistryModule, + providers: [ + { + provide: PLUGIN_CONFIG_TOKEN, + multi: true, + useValue: {pluginName, componentClass}, + }, + ], + }; + } + + getComponent(pluginName: string): Type | null { + return pluginNameToComponent.get(pluginName) || null; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/plugin_registry_types.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/plugin_registry_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..9694666614ede2e875a09703903f85ad98c321a4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/plugin_registry_types.ts @@ -0,0 +1,27 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {InjectionToken} from '@angular/core'; + +export interface PluginConfig { + pluginName: string; + componentClass: any; +} + +// This DI token must not be defined in the same file as PluginRegistryModule +// or else its constructor injection causes Angular's AOT compiler to think +// there is a circular dependency. +export const PLUGIN_CONFIG_TOKEN = new InjectionToken( + '[plugins] Plugin registry config' +); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/plugins_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/plugins/plugins_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..5106f0c72706cbab654465c8270b7befb6c08206 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/plugins_component.ng.html @@ -0,0 +1,119 @@ + +
    + + + + + +
    + +
    +
    + + + + + + + + + + + + + +

    + There’s no dashboard by the name of “{{activePluginId}}”. +

    +

    You can select a dashboard from the list above.

    +

    + +

    +
    + + +

    + No dashboards are active for the current data set. +

    +

    Probable causes:

    +
      +
    • You haven’t written any data to your event files.
    • +
    • TensorBoard can’t find your event files.
    • +
    + + If you’re new to using TensorBoard, and want to find out how to add data + and set up your event files, check out the + README + and perhaps the + TensorBoard tutorial. +

    + If you think TensorBoard is configured properly, please see + the section of the README devoted to missing data problems + and consider filing an issue on GitHub. +

    + +

    + +

    +
    +
    +
    + + + +

    Data could not be loaded.

    +

    The TensorBoard server may be down or inaccessible.

    +

    + +

    +
    + + + + Last reload: {{lastUpdated | date: 'medium'}} +

    + Log directory: {{dataLocation}} +

    +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/plugins_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/plugins_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..cdf188b073081fe16730ff4485bd245d095b656d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/plugins_component.ts @@ -0,0 +1,263 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * Renders an active plugin's dashboard. + * + * Note that, for Polymer and iframe-based dashboards, it caches the DOM elements. + */ + +import { + ChangeDetectionStrategy, + Component, + ElementRef, + Input, + OnChanges, + SimpleChanges, + ViewChild, + ComponentFactoryResolver, + ViewContainerRef, + TemplateRef, +} from '@angular/core'; + +import {UiPluginMetadata} from './plugins_container'; +import { + LoadingMechanismType, + CustomElementLoadingMechanism, +} from '../types/api'; +import {PluginRegistryModule} from './plugin_registry_module'; + +interface ExperimentalPluginHostLib extends HTMLElement { + registerPluginIframe(iframe: HTMLIFrameElement, plugin_id: string): void; +} + +interface PolymerDashboard extends HTMLElement { + reload?: () => void; +} + +export enum PluginLoadState { + ENVIRONMENT_FAILURE_NOT_FOUND, + ENVIRONMENT_FAILURE_UNKNOWN, + NO_ENABLED_PLUGINS, + UNKNOWN_PLUGIN_ID, + LOADED, + LOADING, +} + +@Component({ + selector: 'plugins-component', + templateUrl: './plugins_component.ng.html', + styles: [ + ` + :host { + display: block; + position: relative; + } + .plugins { + height: 100%; + position: relative; + } + .warning { + background-color: #fff; + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; + } + .warning-message { + margin: 80px auto 0; + max-width: 540px; + } + .last-reload-time { + font-style: italic; + } + .plugins ::ng-deep iframe { + border: 0; + height: 100%; + width: 100%; + } + `, + ], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PluginsComponent implements OnChanges { + private readonly experimentPluginHostLib = document.createElement( + 'tf-experimental-plugin-host-lib' + ) as ExperimentalPluginHostLib; + + constructor( + private readonly componentFactoryResolver: ComponentFactoryResolver, + private readonly pluginRegistry: PluginRegistryModule + ) {} + + @ViewChild('pluginContainer', {static: true, read: ElementRef}) + private readonly pluginsContainer!: ElementRef; + + @ViewChild('ngPluginContainer', {static: true, read: ViewContainerRef}) + private readonly ngPluginContainer!: ViewContainerRef; + + @Input() + activePluginId!: string | null; + + @Input() + activeKnownPlugin!: UiPluginMetadata | null; + + @Input() + pluginLoadState!: PluginLoadState; + + @Input() + dataLocation!: string; + + @Input() + lastUpdated?: number; + + @Input() + environmentFailureNotFoundTemplate?: TemplateRef; + + @Input() + environmentFailureUnknownTemplate?: TemplateRef; + + readonly PluginLoadState = PluginLoadState; + readonly LoadingMechanismType = LoadingMechanismType; + + private readonly pluginInstances = new Map(); + + ngOnChanges(change: SimpleChanges): void { + const shouldCreatePlugin = Boolean( + this.activeKnownPlugin && + !this.pluginInstances.has(this.activeKnownPlugin.id) + ); + + if (change['activeKnownPlugin'] && this.activeKnownPlugin) { + const prevActiveKnownPlugin = change['activeKnownPlugin'].previousValue; + if ( + prevActiveKnownPlugin && + prevActiveKnownPlugin.id !== this.activeKnownPlugin.id + ) { + this.hidePlugin(prevActiveKnownPlugin); + } + if (shouldCreatePlugin) { + const pluginElement = this.createPlugin(this.activeKnownPlugin); + if (pluginElement) { + this.pluginInstances.set(this.activeKnownPlugin.id, pluginElement); + } + } else { + this.showPlugin(this.activeKnownPlugin); + } + } + if ( + this.activeKnownPlugin && + (shouldCreatePlugin || change['lastUpdated']) + ) { + this.reload(this.activeKnownPlugin, shouldCreatePlugin); + } + } + + private hidePlugin(plugin: UiPluginMetadata) { + // In case the active plugin does not have a DOM, for example, core plugin, the + // instance can be falsy. + if (!this.pluginInstances.has(plugin.id)) return; + + const instance = this.pluginInstances.get(plugin.id) as HTMLElement; + Object.assign(instance.style, { + maxHeight: 0, + overflow: 'hidden', + /** + * We further make containers invisible. Some elements may anchor to + * the viewport instead of the container, in which case setting the max + * height here to 0 will not hide them. + **/ + visibility: 'hidden', + position: 'absolute', + }); + } + + private showPlugin(plugin: UiPluginMetadata) { + // In case the active plugin does not have a DOM, for example, core plugin, the + // instance can be falsy. + if (!this.pluginInstances.has(plugin.id)) return; + + const instance = this.pluginInstances.get(plugin.id) as HTMLElement; + Object.assign(instance.style, { + maxHeight: null, + overflow: null, + visibility: null, + position: null, + }); + } + + private createPlugin(plugin: UiPluginMetadata): HTMLElement | null { + let pluginElement = null; + switch (plugin.loading_mechanism.type) { + case LoadingMechanismType.CUSTOM_ELEMENT: { + const customElementPlugin = plugin.loading_mechanism as CustomElementLoadingMechanism; + pluginElement = document.createElement( + customElementPlugin.element_name + ); + (pluginElement as any).reloadOnReady = false; + this.pluginsContainer.nativeElement.appendChild(pluginElement); + break; + } + case LoadingMechanismType.IFRAME: { + pluginElement = document.createElement('iframe'); + // Ideally should use the DOMSanitizer but it is not usable in TypeScript. + pluginElement.setAttribute( + 'src', + `data/plugin_entry.html?name=${plugin.id}` + ); + this.experimentPluginHostLib.registerPluginIframe( + pluginElement, + plugin.id + ); + this.pluginsContainer.nativeElement.appendChild(pluginElement); + break; + } + case LoadingMechanismType.NG_COMPONENT: + const ngComponentClass = this.pluginRegistry.getComponent(plugin.id); + if (ngComponentClass) { + const componentFactory = this.componentFactoryResolver.resolveComponentFactory( + ngComponentClass + ); + const pluginComponent = this.ngPluginContainer.createComponent( + componentFactory + ); + pluginElement = pluginComponent.location.nativeElement; + } else { + console.error( + `No registered Angular component for plugin: ${plugin.id}` + ); + } + break; + case LoadingMechanismType.NONE: + break; + default: + console.error('Unexpected plugin'); + } + return pluginElement; + } + + private reload(plugin: UiPluginMetadata, initialStamp: boolean) { + if (!initialStamp && plugin.disable_reload) { + return; + } + + const maybeDashboard = this.pluginInstances.get( + plugin.id + ) as PolymerDashboard; + if (maybeDashboard && maybeDashboard.reload) { + maybeDashboard.reload(); + } + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/plugins_container.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/plugins_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..c6e83f08f24bbeb9e58755d03dc1dd09f6a639cb --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/plugins_container.ts @@ -0,0 +1,130 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + Input, + TemplateRef, +} from '@angular/core'; +import {Store, createSelector} from '@ngrx/store'; +import {combineLatest} from 'rxjs'; +import {map} from 'rxjs/operators'; + +import { + getPlugins, + getActivePlugin, + getPluginsListLoaded, + getEnvironment, +} from '../core/store'; +import {PluginsListFailureCode} from '../core/types'; +import {PluginMetadata} from '../types/api'; +import {LoadState, DataLoadState} from '../types/data'; +import {State} from '../core/store/core_types'; + +import {PluginLoadState} from './plugins_component'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +export interface UiPluginMetadata extends PluginMetadata { + id: string; +} + +const activePlugin = createSelector( + getPlugins, + getActivePlugin, + (plugins, id): UiPluginMetadata | null => { + if (!id || !plugins[id]) return null; + return Object.assign({id}, plugins[id]); + } +); + +const lastLoadedTimeInMs = createSelector( + getPluginsListLoaded, + (loadState: LoadState) => { + return loadState.lastLoadedTimeInMs; + } +); + +@Component({ + selector: 'plugins', + template: ` + + `, + styles: ['plugins-component { height: 100%; }'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PluginsContainer { + readonly activeKnownPlugin$ = this.store.select(activePlugin); + readonly activePluginId$ = this.store.select(getActivePlugin); + + @Input() + environmentFailureNotFoundTemplate?: TemplateRef; + + @Input() + environmentFailureUnknownTemplate?: TemplateRef; + + readonly pluginLoadState$ = combineLatest( + this.activeKnownPlugin$, + this.activePluginId$, + this.store.select(getPluginsListLoaded) + ).pipe( + map(([activePlugin, activePluginId, loadState]) => { + if (loadState.failureCode !== null) { + // Despite its 'Plugins'-specific name, getPluginsListLoaded actually + // encapsulates multiple requests to load different parts of the + // environment. + if (loadState.failureCode === PluginsListFailureCode.NOT_FOUND) { + return PluginLoadState.ENVIRONMENT_FAILURE_NOT_FOUND; + } else { + return PluginLoadState.ENVIRONMENT_FAILURE_UNKNOWN; + } + } + + if (activePlugin !== null) { + return PluginLoadState.LOADED; + } + + if ( + loadState.lastLoadedTimeInMs === null && + loadState.state === DataLoadState.LOADING + ) { + return PluginLoadState.LOADING; + } + + if (activePluginId) { + return PluginLoadState.UNKNOWN_PLUGIN_ID; + } + + return PluginLoadState.NO_ENABLED_PLUGINS; + }) + ); + + readonly lastLoadedTimeInMs$ = this.store.select(lastLoadedTimeInMs); + readonly dataLocation$ = this.store.select(getEnvironment).pipe( + map((env) => { + return env.data_location; + }) + ); + + constructor(private readonly store: Store) {} +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/plugins_container_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/plugins_container_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..4c31c1675aef173cfbb13455a8ee9a9a386fbe55 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/plugins_container_test.ts @@ -0,0 +1,670 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; +import {Store} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {PluginsContainer} from './plugins_container'; +import {PluginsComponent} from './plugins_component'; +import {PluginRegistryModule} from './plugin_registry_module'; +import {ExtraDashboardModule} from './testing'; + +import { + PluginId, + LoadingMechanismType, + CustomElementLoadingMechanism, + IframeLoadingMechanism, + NgElementLoadingMechanism, + NoLoadingMechanism, +} from '../types/api'; +import {DataLoadState} from '../types/data'; +import {State} from '../core/store'; +import { + getPlugins, + getActivePlugin, + getPluginsListLoaded, + getEnvironment, +} from '../core/store/core_selectors'; +import {PluginsListFailureCode} from '../core/types'; +import {TestingDebuggerModule} from '../../plugins/debugger_v2/tf_debugger_v2_plugin/testing'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +function expectPluginIframe(element: HTMLElement, name: string) { + expect(element.tagName).toBe('IFRAME'); + expect((element as HTMLIFrameElement).src).toContain( + `data/plugin_entry.html?name=${name}` + ); +} + +/** + * A Component used to test that custom error templates can be passed to + * the `plugins` component. + */ +@Component({ + template: ` + +

    Custom Not Found Error

    +
    + +

    Custom Unknown Error

    +
    + + + `, +}) +class CustomizedErrorTemplatesComponent {} + +class TestableCustomElement extends HTMLElement { + constructor() { + super(); + + const shadow = this.attachShadow({mode: 'open'}); + const wrapper = document.createElement('div'); + wrapper.textContent = 'Test TensorBoard'; + shadow.appendChild(wrapper); + } +} + +customElements.define('tb-bar', TestableCustomElement); + +interface TbElement extends HTMLElement { + reload: () => void; +} + +describe('plugins_component', () => { + let store: MockStore; + let createElementSpy: jasmine.Spy; + + const PLUGINS = { + bar: { + disable_reload: false, + enabled: true, + loading_mechanism: { + type: LoadingMechanismType.CUSTOM_ELEMENT, + element_name: 'tb-bar', + } as CustomElementLoadingMechanism, + tab_name: 'Bar', + remove_dom: false, + }, + 'extra-plugin': { + disable_reload: false, + enabled: true, + loading_mechanism: { + type: LoadingMechanismType.NG_COMPONENT, + } as NgElementLoadingMechanism, + tab_name: 'Extra', + remove_dom: false, + }, + foo: { + disable_reload: false, + enabled: true, + loading_mechanism: { + type: LoadingMechanismType.IFRAME, + // This will cause 404 as test bundles do not serve + // data file in the karma server. + module_path: 'random_esmodule.js', + } as IframeLoadingMechanism, + tab_name: 'Bar', + remove_dom: false, + }, + }; + + function setActivePlugin(plugin: PluginId) { + store.overrideSelector(getActivePlugin, plugin); + store.refreshState(); + } + + beforeEach(async () => { + await TestBed.configureTestingModule({ + providers: [provideMockStore(), PluginsContainer, PluginRegistryModule], + declarations: [ + PluginsContainer, + PluginsComponent, + CustomizedErrorTemplatesComponent, + ], + imports: [TestingDebuggerModule, ExtraDashboardModule], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + store.overrideSelector(getPlugins, PLUGINS); + store.overrideSelector(getActivePlugin, null); + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.NOT_LOADED, + lastLoadedTimeInMs: null, + failureCode: null, + }); + store.overrideSelector(getEnvironment, { + data_location: 'foobar', + window_title: 'Tests!', + }); + + createElementSpy = spyOn(document, 'createElement').and.callThrough(); + createElementSpy + .withArgs('tf-experimental-plugin-host-lib') + .and.returnValue({ + registerPluginIframe: () => {}, + }); + }); + + describe('plugin DOM creation', () => { + it('creates no plugin when there is no activePlugin', () => { + const fixture = TestBed.createComponent(PluginsContainer); + fixture.detectChanges(); + const el = fixture.debugElement.query(By.css('.plugins')); + expect(el.nativeElement.childElementCount).toBe(0); + }); + + it('creates no plugin when plugins are not loaded', () => { + store.overrideSelector(getPlugins, {}); + store.overrideSelector(getActivePlugin, 'foo'); + const fixture = TestBed.createComponent(PluginsContainer); + fixture.detectChanges(); + const el = fixture.debugElement.query(By.css('.plugins')); + expect(el.nativeElement.childElementCount).toBe(0); + }); + + it('creates an element for CUSTOM_ELEMENT type of plugin', async () => { + const fixture = TestBed.createComponent(PluginsContainer); + fixture.detectChanges(); + + setActivePlugin('bar'); + + fixture.detectChanges(); + await fixture.whenStable(); + + const {nativeElement} = fixture.debugElement.query(By.css('.plugins')); + expect(nativeElement.childElementCount).toBe(1); + const pluginElement = nativeElement.children[0]; + expect(pluginElement.tagName).toBe('TB-BAR'); + }); + + it('creates an element for IFRAME type of plugin', async () => { + const registerPluginIframeSpy = jasmine.createSpy(); + createElementSpy + .withArgs('tf-experimental-plugin-host-lib') + .and.returnValue({ + registerPluginIframe: registerPluginIframeSpy, + }); + const fixture = TestBed.createComponent(PluginsContainer); + fixture.detectChanges(); + + setActivePlugin('foo'); + + fixture.detectChanges(); + await fixture.whenStable(); + + const {nativeElement} = fixture.debugElement.query(By.css('.plugins')); + expect(nativeElement.childElementCount).toBe(1); + const pluginElement = nativeElement.children[0]; + expectPluginIframe(pluginElement, 'foo'); + expect(registerPluginIframeSpy).toHaveBeenCalledWith( + pluginElement, + 'foo' + ); + }); + + it('keeps instance of plugin after being inactive but hides it', async () => { + const fixture = TestBed.createComponent(PluginsContainer); + fixture.detectChanges(); + + setActivePlugin('foo'); + + fixture.detectChanges(); + await fixture.whenStable(); + + expect( + fixture.debugElement.query(By.css('.plugins')).nativeElement + .childElementCount + ).toBe(1); + + setActivePlugin('bar'); + + fixture.detectChanges(); + await fixture.whenStable(); + + const {nativeElement} = fixture.debugElement.query(By.css('.plugins')); + expect(nativeElement.childElementCount).toBe(2); + const [fooElement, barElement] = nativeElement.children; + expectPluginIframe(fooElement, 'foo'); + expect(fooElement.style.visibility).toBe('hidden'); + expect(barElement.tagName).toBe('TB-BAR'); + expect(barElement.style.visibility).not.toBe('hidden'); + }); + + it('does not create same instance of plugin', async () => { + const fixture = TestBed.createComponent(PluginsContainer); + fixture.detectChanges(); + + setActivePlugin('foo'); + + fixture.detectChanges(); + await fixture.whenStable(); + + setActivePlugin('bar'); + + fixture.detectChanges(); + await fixture.whenStable(); + + setActivePlugin('foo'); + + fixture.detectChanges(); + await fixture.whenStable(); + + const {nativeElement} = fixture.debugElement.query(By.css('.plugins')); + expect(nativeElement.childElementCount).toBe(2); + const [fooElement] = nativeElement.children; + expectPluginIframe(fooElement, 'foo'); + expect(fooElement.style.visibility).not.toBe('hidden'); + }); + + it('creates components for plugins registered dynamically', async () => { + const fixture = TestBed.createComponent(PluginsContainer); + fixture.detectChanges(); + + setActivePlugin('extra-plugin'); + + fixture.detectChanges(); + await fixture.whenStable(); + + const {nativeElement} = fixture.debugElement.query(By.css('.plugins')); + expect(nativeElement.childElementCount).toBe(1); + const pluginElement = nativeElement.children[0]; + expect(pluginElement.tagName).toBe('EXTRA-DASHBOARD'); + }); + + it('hides inactive plugin but keeps their width', async () => { + setActivePlugin('bar'); + + const fixture = TestBed.createComponent(PluginsContainer); + fixture.detectChanges(); + + setActivePlugin('foo'); + fixture.detectChanges(); + + const {nativeElement} = fixture.debugElement.query(By.css('.plugins')); + const [barElement] = nativeElement.children; + expect(barElement.shadowRoot.firstElementChild.textContent).toBe( + 'Test TensorBoard' + ); + expect( + barElement.shadowRoot.firstElementChild.clientWidth + ).toBeGreaterThan(0); + }); + }); + + describe('reload', () => { + function setLastLoadedTime( + timeInMs: number | null, + state = DataLoadState.LOADED + ) { + store.overrideSelector(getPluginsListLoaded, { + state: + timeInMs !== null ? DataLoadState.LOADED : DataLoadState.NOT_LOADED, + lastLoadedTimeInMs: timeInMs, + failureCode: null, + }); + store.refreshState(); + } + + let alphaEl: TbElement; + let betaEl: TbElement; + let gammaEl: TbElement; + + beforeEach(() => { + const PLUGINS = { + alpha: { + disable_reload: false, + enabled: true, + loading_mechanism: { + type: LoadingMechanismType.CUSTOM_ELEMENT, + element_name: 'tb-alpha', + } as CustomElementLoadingMechanism, + tab_name: 'Alpha', + remove_dom: false, + }, + beta: { + disable_reload: false, + enabled: true, + loading_mechanism: { + type: LoadingMechanismType.CUSTOM_ELEMENT, + element_name: 'tb-beta', + } as CustomElementLoadingMechanism, + tab_name: 'Beta', + remove_dom: false, + }, + gamma: { + disable_reload: true, + enabled: true, + loading_mechanism: { + type: LoadingMechanismType.CUSTOM_ELEMENT, + element_name: 'tb-gamma', + } as CustomElementLoadingMechanism, + tab_name: 'Gamma', + remove_dom: false, + }, + zeta: { + disable_reload: true, + enabled: true, + loading_mechanism: { + type: LoadingMechanismType.NONE, + } as NoLoadingMechanism, + tab_name: 'zeta', + remove_dom: false, + }, + }; + store.overrideSelector(getPlugins, PLUGINS); + + alphaEl = document.createElement('span') as any; + alphaEl.reload = jasmine.createSpy(); + betaEl = document.createElement('span') as any; + betaEl.reload = jasmine.createSpy(); + gammaEl = document.createElement('span') as any; + gammaEl.reload = jasmine.createSpy(); + + createElementSpy.withArgs('tb-alpha').and.returnValue(alphaEl); + createElementSpy.withArgs('tb-beta').and.returnValue(betaEl); + createElementSpy.withArgs('tb-gamma').and.returnValue(gammaEl); + }); + + it('invokes reload on initial page render and new plugin stamp', () => { + const fixture = TestBed.createComponent(PluginsContainer); + // When TensorBoard starts, the new dashboard is stamped only after plugins + // listing is loaded and thus the last loaded time is not zero. + setLastLoadedTime(100, DataLoadState.LOADED); + fixture.detectChanges(); + + setActivePlugin('alpha'); + fixture.detectChanges(); + + expect(alphaEl.reload).toHaveBeenCalledTimes(1); + + // Without changing the lastLoadedTime, stamp a new dashboard. + setActivePlugin('beta'); + fixture.detectChanges(); + + expect(betaEl.reload).toHaveBeenCalledTimes(1); + + // Even for the plugin that disabled the auto reload, it should invoke reload once + // at the stamp time. + setActivePlugin('gamma'); + fixture.detectChanges(); + + expect(gammaEl.reload).toHaveBeenCalledTimes(1); + }); + + it('does not break when acitvePlugin id changes to one without UI', () => { + const fixture = TestBed.createComponent(PluginsContainer); + setLastLoadedTime(100, DataLoadState.LOADED); + fixture.detectChanges(); + + setActivePlugin('alpha'); + fixture.detectChanges(); + + // zeta does not have a DOM and it definitely cannot have `reload` method called. + setActivePlugin('zeta'); + fixture.detectChanges(); + }); + + it('invokes reload method on the dashboard DOM on data load time changes', () => { + const fixture = TestBed.createComponent(PluginsContainer); + + setLastLoadedTime(null, DataLoadState.NOT_LOADED); + setActivePlugin('alpha'); + fixture.detectChanges(); + setActivePlugin('beta'); + fixture.detectChanges(); + setActivePlugin('alpha'); + fixture.detectChanges(); + + // Initial stamp reloads. + expect(alphaEl.reload).toHaveBeenCalledTimes(1); + expect(betaEl.reload).toHaveBeenCalledTimes(1); + + setLastLoadedTime(1); + fixture.detectChanges(); + expect(alphaEl.reload).toHaveBeenCalledTimes(2); + expect(betaEl.reload).toHaveBeenCalledTimes(1); + + setLastLoadedTime(1); + fixture.detectChanges(); + expect(alphaEl.reload).toHaveBeenCalledTimes(2); + expect(betaEl.reload).toHaveBeenCalledTimes(1); + + setLastLoadedTime(2); + fixture.detectChanges(); + expect(alphaEl.reload).toHaveBeenCalledTimes(3); + expect(betaEl.reload).toHaveBeenCalledTimes(1); + + setActivePlugin('beta'); + fixture.detectChanges(); + + setLastLoadedTime(3); + fixture.detectChanges(); + expect(alphaEl.reload).toHaveBeenCalledTimes(3); + expect(betaEl.reload).toHaveBeenCalledTimes(2); + }); + + it('does not invoke reload method on dom if disable_reload', () => { + const fixture = TestBed.createComponent(PluginsContainer); + + setLastLoadedTime(100, DataLoadState.NOT_LOADED); + setActivePlugin('gamma'); + fixture.detectChanges(); + + expect(gammaEl.reload).toHaveBeenCalledTimes(1); + + setLastLoadedTime(1); + fixture.detectChanges(); + + expect(gammaEl.reload).toHaveBeenCalledTimes(1); + }); + }); + + describe('warning pages', () => { + it('does not show any warning while fetching when list was never fetched', () => { + store.overrideSelector(getPlugins, {}); + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.LOADING, + lastLoadedTimeInMs: null, + failureCode: null, + }); + store.overrideSelector(getActivePlugin, null); + + const fixture = TestBed.createComponent(PluginsContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.query(By.css('.warning'))).toBeNull(); + }); + + it('shows warning when plugin id is not known', () => { + store.overrideSelector(getActivePlugin, 'you_do_not_know_me'); + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.LOADED, + lastLoadedTimeInMs: 123, + failureCode: null, + }); + const fixture = TestBed.createComponent(PluginsContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.nativeElement.textContent).toContain( + 'There’s no dashboard by the name of “you_do_not_know_me”' + ); + }); + + it( + 'shows warning when plugin id is not known when pluginList is cached and' + + 'is loading (updating)', + () => { + store.overrideSelector(getPlugins, PLUGINS); + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.LOADING, + lastLoadedTimeInMs: 123, + failureCode: null, + }); + store.overrideSelector(getActivePlugin, 'you_do_not_know_me'); + const fixture = TestBed.createComponent(PluginsContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.nativeElement.textContent).toContain( + 'There’s no dashboard by the name of “you_do_not_know_me”' + ); + } + ); + + it('shows warning when environment failed NOT_FOUND', () => { + store.overrideSelector(getActivePlugin, null); + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.FAILED, + lastLoadedTimeInMs: null, + failureCode: PluginsListFailureCode.NOT_FOUND, + }); + const fixture = TestBed.createComponent(PluginsContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.nativeElement.textContent).toContain( + 'Data could not be loaded.' + ); + }); + + it('shows warning when environment failed UNKNOWN', () => { + store.overrideSelector(getActivePlugin, null); + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.FAILED, + lastLoadedTimeInMs: null, + failureCode: PluginsListFailureCode.UNKNOWN, + }); + const fixture = TestBed.createComponent(PluginsContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.nativeElement.textContent).toContain( + 'Data could not be loaded.' + ); + }); + + it( + 'shows no active plugin warning even when loading when list was previous ' + + 'loaded', + () => { + store.overrideSelector(getActivePlugin, null); + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.LOADING, + lastLoadedTimeInMs: 123, + failureCode: null, + }); + const fixture = TestBed.createComponent(PluginsContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.nativeElement.textContent).toContain( + 'No dashboards are active for the current data set.' + ); + } + ); + + it('shows warning when no plugin is active after list is loaded', () => { + store.overrideSelector(getActivePlugin, null); + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.LOADED, + lastLoadedTimeInMs: 123, + failureCode: null, + }); + const fixture = TestBed.createComponent(PluginsContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.nativeElement.textContent).toContain( + 'No dashboards are active for the current data set.' + ); + }); + + describe('custom error templates', () => { + it('shows warning when environment failed NOT_FOUND', () => { + store.overrideSelector(getActivePlugin, null); + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.FAILED, + lastLoadedTimeInMs: null, + failureCode: PluginsListFailureCode.NOT_FOUND, + }); + const fixture = TestBed.createComponent( + CustomizedErrorTemplatesComponent + ); + fixture.detectChanges(); + + expect(fixture.debugElement.nativeElement.textContent).toBe( + 'Custom Not Found Error' + ); + }); + + it('shows warning when environment failed UNKNOWN', () => { + store.overrideSelector(getActivePlugin, null); + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.FAILED, + lastLoadedTimeInMs: null, + failureCode: PluginsListFailureCode.UNKNOWN, + }); + const fixture = TestBed.createComponent( + CustomizedErrorTemplatesComponent + ); + fixture.detectChanges(); + + expect(fixture.debugElement.nativeElement.textContent).toBe( + 'Custom Unknown Error' + ); + }); + }); + + describe('data location', () => { + it('rendersin the warning', () => { + store.overrideSelector(getEnvironment, { + data_location: 'my-location', + window_title: '', + }); + store.overrideSelector(getActivePlugin, null); + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.LOADED, + lastLoadedTimeInMs: 123, + failureCode: null, + }); + const fixture = TestBed.createComponent(PluginsContainer); + fixture.detectChanges(); + + expect( + fixture.debugElement.query(By.css('.data-location')).nativeElement + .textContent + ).toBe('Log directory: my-location'); + }); + + it('does not render when it is empty', () => { + store.overrideSelector(getEnvironment, { + data_location: '', + window_title: '', + }); + store.overrideSelector(getActivePlugin, null); + store.overrideSelector(getPluginsListLoaded, { + state: DataLoadState.LOADED, + lastLoadedTimeInMs: 123, + failureCode: null, + }); + const fixture = TestBed.createComponent(PluginsContainer); + fixture.detectChanges(); + + expect(fixture.debugElement.query(By.css('.data-location'))).toBeNull(); + }); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/plugins_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/plugins_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..6e435e28b62a352e14a84b8f3eba8f773bfb361b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/plugins_module.ts @@ -0,0 +1,28 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; + +import {PluginsContainer} from './plugins_container'; +import {PluginsComponent} from './plugins_component'; +import {CoreModule} from '../core/core_module'; +import {PluginRegistryModule} from './plugin_registry_module'; + +@NgModule({ + declarations: [PluginsContainer, PluginsComponent], + exports: [PluginsContainer], + imports: [CoreModule, CommonModule, PluginRegistryModule], +}) +export class PluginsModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/testing/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/testing/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..811e536b62d7227eb0ec4c2cf827bdb76d75b921 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/testing/BUILD @@ -0,0 +1,18 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "testing", + testonly = True, + srcs = [ + "index.ts", + ], + deps = [ + "//tensorboard/webapp/plugins:plugin_registry", + "@npm//@angular/common", + "@npm//@angular/core", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/testing/index.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/testing/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..0e0f74102c9b6ce6cdb26d725f3c939d0fba5237 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/testing/index.ts @@ -0,0 +1,31 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, NgModule} from '@angular/core'; +import {PluginRegistryModule} from '../plugin_registry_module'; + +@Component({ + selector: 'extra-dashboard', + template: `
    I'm the extra Angular dashboard!
    `, +}) +export class ExtraDashboardComponent {} + +@NgModule({ + declarations: [ExtraDashboardComponent], + imports: [ + PluginRegistryModule.forPlugin('extra-plugin', ExtraDashboardComponent), + ], + entryComponents: [ExtraDashboardComponent], +}) +export class ExtraDashboardModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..d8af784f6773bf6cb535672f55543c1fd1acccf4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/BUILD @@ -0,0 +1,45 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "text_v2", + srcs = [ + "text_v2_module.ts", + ], + deps = [ + "//tensorboard/webapp/plugins:plugin_registry", + "//tensorboard/webapp/plugins/text_v2/data_source", + "//tensorboard/webapp/plugins/text_v2/effects", + "//tensorboard/webapp/plugins/text_v2/store", + "//tensorboard/webapp/plugins/text_v2/views/text_dashboard", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + ], +) + +tf_ts_library( + name = "testing", + testonly = True, + srcs = [ + "testing.ts", + ], + deps = [ + "//tensorboard/webapp/plugins/text_v2/data_source", + ], +) + +tf_ts_library( + name = "types", + srcs = [ + "types.ts", + ], + deps = [ + "//tensorboard/components/tf_categorization_utils", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/actions/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/actions/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..1e1925279cd65aa8c342aeeb3382db4329e5b9cf --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/actions/BUILD @@ -0,0 +1,19 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "actions", + srcs = [ + "index.ts", + "text_actions.ts", + ], + deps = [ + "//tensorboard/webapp/plugins/text_v2:types", + "//tensorboard/webapp/plugins/text_v2/data_source", + "//tensorboard/webapp/plugins/text_v2/store:types", + "@npm//@ngrx/store", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/actions/index.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/actions/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..6dd51d9a1ab7f2314d0c13cfd24c0cf6adc4b02b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/actions/index.ts @@ -0,0 +1,16 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export * from './text_actions'; diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/actions/text_actions.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/actions/text_actions.ts new file mode 100644 index 0000000000000000000000000000000000000000..40b7ebea244bf09a7ad68b5dc7cc4972f5347a44 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/actions/text_actions.ts @@ -0,0 +1,50 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {createAction, props} from '@ngrx/store'; + +import {StepDatum} from '../data_source'; +import {TagGroup} from '../types'; + +// HACK: Below import is for type inference. +// https://github.com/bazelbuild/rules_nodejs/issues/1013 +/** @typehack */ import * as _typeHackModels from '@ngrx/store/src/models'; + +export const textPluginLoaded = createAction('[Text] Text Plugin Loaded'); + +export const textRunToTagsLoaded = createAction( + '[Text] Runs To Tag Loaded', + props<{runToTags: Map}>() +); + +export const textTagGroupVisibilityChanged = createAction( + '[Text] Tag Group Visibility Changed', + props<{ + tagGroup: TagGroup; + visibleTextCards: Array<{ + run: string; + tag: string; + }>; + }>() +); + +export const textDataLoaded = createAction( + '[Text] Text Data Loaded Loaded', + props<{ + run: string; + tag: string; + stepData: StepDatum[]; + }>() +); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/data_source/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/data_source/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..639312a31e69750e6f9b26abd3bd1ff34ef36b69 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/data_source/BUILD @@ -0,0 +1,33 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "data_source", + srcs = [ + "index.ts", + "text_v2_data_source.ts", + "text_v2_data_source_module.ts", + "text_v2_server_data_source.ts", + ], + deps = [ + "//tensorboard/webapp/webapp_data_source:http_client", + "@npm//@angular/core", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "data_source_test_lib", + testonly = True, + srcs = [ + "text_v2_data_source_test.ts", + ], + deps = [ + ":data_source", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/webapp_data_source:http_client_testing", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/data_source/index.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/data_source/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..6005f977a080b2da863d08425c1a6ba8d736707e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/data_source/index.ts @@ -0,0 +1,15 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export * from './text_v2_data_source'; diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/data_source/text_v2_data_source.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/data_source/text_v2_data_source.ts new file mode 100644 index 0000000000000000000000000000000000000000..b694df3e0a0bd536c5450999c997d44f84efffbd --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/data_source/text_v2_data_source.ts @@ -0,0 +1,32 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {Observable} from 'rxjs'; + +export interface StepDatum { + originalShape: number[]; + step: number; + stringArray: string[][]; + wallTimeInMs: number; + truncated: boolean; +} + +export type RunToTags = Map; + +@Injectable() +export abstract class TextV2DataSource { + abstract fetchRunToTag(): Observable; + abstract fetchTextData(run: string, tag: string): Observable; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/data_source/text_v2_data_source_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/data_source/text_v2_data_source_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..cbeaf2cb3d26656d01fb1db8ade410ddabbaf7a5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/data_source/text_v2_data_source_module.ts @@ -0,0 +1,29 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; + +import {TBHttpClientModule} from '../../../webapp_data_source/tb_http_client_module'; + +import {TextV2DataSource} from './text_v2_data_source'; +import {TextV2ServerDataSource} from './text_v2_server_data_source'; + +@NgModule({ + imports: [TBHttpClientModule], + providers: [ + TextV2ServerDataSource, + {provide: TextV2DataSource, useExisting: TextV2ServerDataSource}, + ], +}) +export class TextV2DataSourceModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/data_source/text_v2_data_source_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/data_source/text_v2_data_source_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..698215fc4a84bc105a9a3a63a3f076a59ea6b0fc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/data_source/text_v2_data_source_test.ts @@ -0,0 +1,91 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed} from '@angular/core/testing'; + +import { + TBHttpClientTestingModule, + HttpTestingController, +} from '../../../webapp_data_source/tb_http_client_testing'; + +import {TextV2ServerDataSource} from './text_v2_server_data_source'; + +describe('tb_server_data_source', () => { + describe('TextV2ServerDataSource', () => { + let dataSource: TextV2ServerDataSource; + let httpMock: HttpTestingController; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TBHttpClientTestingModule], + providers: [TextV2ServerDataSource], + }).compileComponents(); + + httpMock = TestBed.inject(HttpTestingController); + dataSource = TestBed.inject(TextV2ServerDataSource); + }); + + describe('fetchRunToTag', () => { + it('fetches from correct endpoint', () => { + dataSource.fetchRunToTag().subscribe(jasmine.createSpy()); + httpMock.expectOne('data/plugin/text_v2/tags'); + }); + + it('converts object to a map', () => { + const spy = jasmine.createSpy(); + dataSource.fetchRunToTag().subscribe(spy); + httpMock.expectOne('data/plugin/text_v2/tags').flush({ + run1: ['tag1', 'tag2'], + }); + + expect(spy).toHaveBeenCalledWith(new Map([['run1', ['tag1', 'tag2']]])); + }); + }); + + describe('fetchTextData', () => { + it('fetches from correct endpoint', () => { + dataSource + .fetchTextData('runName', 'tagName') + .subscribe(jasmine.createSpy()); + httpMock.expectOne('data/plugin/text_v2/text?run=runName&tag=tagName'); + }); + + it('reshapes response into frontend data structure', () => { + const spy = jasmine.createSpy(); + dataSource.fetchTextData('runName', 'tagName').subscribe(spy); + httpMock + .expectOne('data/plugin/text_v2/text?run=runName&tag=tagName') + .flush([ + { + original_shape: [1], + step: 3, + string_array: [['foo']], + wall_time: 123, + truncated: false, + }, + ]); + + expect(spy).toHaveBeenCalledWith([ + { + originalShape: [1], + step: 3, + stringArray: [['foo']], + wallTimeInMs: 123000, + truncated: false, + }, + ]); + }); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/data_source/text_v2_server_data_source.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/data_source/text_v2_server_data_source.ts new file mode 100644 index 0000000000000000000000000000000000000000..df94a64429ff312a7807548de389669929bcb8b8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/data_source/text_v2_server_data_source.ts @@ -0,0 +1,76 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {map} from 'rxjs/operators'; + +import {TBHttpClient} from '../../../webapp_data_source/tb_http_client'; + +import {TextV2DataSource} from './text_v2_data_source'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +interface BackendRunToTagsMap { + [runName: string]: string[]; +} + +interface BackendStepDatum { + original_shape: number[]; + step: number; + string_array: string[][]; + wall_time: number; + truncated: boolean; +} + +@Injectable() +export class TextV2ServerDataSource implements TextV2DataSource { + private readonly httpPathPrefix = 'data/plugin/text_v2'; + + constructor(private http: TBHttpClient) {} + + fetchRunToTag() { + return this.http + .get(this.httpPathPrefix + '/tags') + .pipe( + map((runToTagObject) => { + const runToTag = new Map(); + Object.entries(runToTagObject).forEach(([runName, tags]) => { + runToTag.set(runName, tags); + }); + return runToTag; + }) + ); + } + + fetchTextData(run: string, tag: string) { + const searchParams = new URLSearchParams({run, tag}); + return this.http + .get( + this.httpPathPrefix + `/text?${searchParams.toString()}` + ) + .pipe( + map((dataList) => { + return dataList.map((datum) => { + return { + originalShape: datum.original_shape, + step: datum.step, + stringArray: datum.string_array, + wallTimeInMs: datum.wall_time * 1000, + truncated: datum.truncated, + }; + }); + }) + ); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/effects/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/effects/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..2c92141c13b2d9f57eede5d99a5f41dba2eb4d9e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/effects/BUILD @@ -0,0 +1,50 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "effects", + srcs = [ + "index.ts", + "text_effects.ts", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/plugins/text_v2:types", + "//tensorboard/webapp/plugins/text_v2/actions", + "//tensorboard/webapp/plugins/text_v2/data_source", + "//tensorboard/webapp/plugins/text_v2/store", + "//tensorboard/webapp/plugins/text_v2/store:types", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "effects_test_lib", + testonly = True, + srcs = [ + "text_effects_test.ts", + ], + deps = [ + ":effects", + "//tensorboard/components/tf_categorization_utils", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/plugins/text_v2/actions", + "//tensorboard/webapp/plugins/text_v2/data_source", + "//tensorboard/webapp/plugins/text_v2/store", + "//tensorboard/webapp/webapp_data_source:http_client_testing", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/effects/index.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/effects/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..932a68e05993d91cbdcc2e5dd763503cb2023cc3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/effects/index.ts @@ -0,0 +1,16 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export * from './text_effects'; diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/effects/text_effects.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/effects/text_effects.ts new file mode 100644 index 0000000000000000000000000000000000000000..56ef277458a3323c0653125ac2085ba9d0a00f65 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/effects/text_effects.ts @@ -0,0 +1,126 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {Actions, createEffect, ofType} from '@ngrx/effects'; +import {forkJoin, Observable, merge} from 'rxjs'; +import { + map, + mergeMap, + tap, + switchMap, + last, + withLatestFrom, +} from 'rxjs/operators'; + +import { + textPluginLoaded, + textRunToTagsLoaded, + textTagGroupVisibilityChanged, + textDataLoaded, +} from '../actions'; +import {TextV2DataSource} from '../data_source/text_v2_data_source'; +import {State} from '../../../app_state'; +import { + getTextData, + getTextAllVisibleRunTags, +} from '../store/text_v2_selectors'; +import {manualReload, reload} from '../../../core/actions'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; +/** @typehack */ import * as _typeHackNgrxStore from '@ngrx/store/src/models'; +/** @typehack */ import * as _typeHackNgrxEffects from '@ngrx/effects/effects'; + +@Injectable() +export class TextEffects { + /** @export */ + readonly loadRunToTags$ = createEffect( + () => { + return this.actions$.pipe( + ofType(textPluginLoaded), + switchMap(() => { + return this.dataSource.fetchRunToTag().pipe( + tap((runToTags) => { + this.store.dispatch(textRunToTagsLoaded({runToTags})); + }), + map(() => void null) + ); + }) + ); + }, + {dispatch: false} + ); + + /** @export */ + readonly loadData$ = createEffect( + () => { + const fetchOnNewCardVisible = this.actions$.pipe( + ofType(textTagGroupVisibilityChanged), + switchMap(({visibleTextCards}) => { + // Fetch existing data. + const existingTextData = visibleTextCards.map(({run, tag}) => { + return this.store.select(getTextData, {run, tag}).pipe( + last(), + map((textData) => { + return {run, tag, textData}; + }) + ); + }); + return forkJoin(existingTextData).pipe( + map((textData) => { + // Filter out the tuple if the data already exists. + return textData + .filter(({textData}) => textData === null) + .map(({run, tag}) => ({run, tag})); + }) + ); + }) + ); + + const fetchVisibleCardsOnReload = this.actions$.pipe( + ofType(manualReload, reload), + withLatestFrom(this.store.select(getTextAllVisibleRunTags)), + map(([, runTagList]) => runTagList) + ); + + return merge(fetchOnNewCardVisible, fetchVisibleCardsOnReload).pipe( + mergeMap((runTagPairs) => { + return forkJoin( + runTagPairs.map((runAndTag) => { + return this.fetchTextData(runAndTag); + }) + ); + }) + ); + }, + {dispatch: false} + ); + + private fetchTextData(props: {run: string; tag: string}): Observable { + const {run, tag} = props; + return this.dataSource.fetchTextData(run, tag).pipe( + tap((stepData) => { + this.store.dispatch(textDataLoaded({run, tag, stepData})); + }), + map(() => void null) + ); + } + + constructor( + private readonly actions$: Actions, + private readonly store: Store, + private readonly dataSource: TextV2DataSource + ) {} +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/effects/text_effects_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/effects/text_effects_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..4f06355fd1301d070e68891ccce66787e813e520 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/effects/text_effects_test.ts @@ -0,0 +1,158 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed} from '@angular/core/testing'; + +import {provideMockActions} from '@ngrx/effects/testing'; +import {Action, Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import {ReplaySubject, of} from 'rxjs'; + +import {TextEffects} from './text_effects'; +import { + textRunToTagsLoaded, + textPluginLoaded, + textTagGroupVisibilityChanged, + textDataLoaded, +} from '../actions'; +import {State} from '../../../app_state'; +import { + TextV2DataSource, + RunToTags, + StepDatum, +} from '../data_source/text_v2_data_source'; +import {CategoryType} from '../../../../components/tf_categorization_utils/categorizationUtils'; +import { + getTextData, + getTextAllVisibleRunTags, +} from '../store/text_v2_selectors'; +import {reload, manualReload} from '../../../core/actions'; +import {TextV2DataSourceModule} from '../data_source/text_v2_data_source_module'; + +describe('text_effects', () => { + let textEffects: TextEffects; + let action: ReplaySubject; + let store: MockStore>; + let recordedActions: Action[] = []; + let fetchRunToTagsSubjects: ReplaySubject[]; + let fetchDataSujects: ReplaySubject[]; + let fetchTextDataSpy: jasmine.Spy; + let selectSpy: jasmine.Spy; + + beforeEach(async () => { + action = new ReplaySubject(1); + await TestBed.configureTestingModule({ + imports: [TextV2DataSourceModule], + providers: [provideMockActions(action), provideMockStore(), TextEffects], + }).compileComponents(); + + textEffects = TestBed.inject(TextEffects); + store = TestBed.inject>(Store) as MockStore; + + store.overrideSelector(getTextAllVisibleRunTags, []); + selectSpy = spyOn(store, 'select').and.callThrough(); + + recordedActions = []; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + recordedActions.push(action); + }); + + const dataSource = TestBed.inject(TextV2DataSource); + + fetchRunToTagsSubjects = []; + spyOn(dataSource, 'fetchRunToTag').and.callFake(() => { + const subject = new ReplaySubject(1); + fetchRunToTagsSubjects.push(subject); + return subject; + }); + + fetchDataSujects = []; + fetchTextDataSpy = spyOn(dataSource, 'fetchTextData').and.callFake(() => { + const fetchDataSuject = new ReplaySubject(); + fetchDataSujects.push(fetchDataSuject); + return fetchDataSuject; + }); + }); + + beforeEach(() => { + textEffects.loadRunToTags$.subscribe(() => {}); + textEffects.loadData$.subscribe(() => {}); + }); + + it('fetches run to tags on plugins loaded', () => { + action.next(textPluginLoaded()); + + fetchRunToTagsSubjects[0].next(new Map([['run1', ['tag1', 'tag2']]])); + fetchRunToTagsSubjects[0].complete(); + + expect(recordedActions).toEqual([ + textRunToTagsLoaded({runToTags: new Map([['run1', ['tag1', 'tag2']]])}), + ]); + }); + + describe('on visibility changed', () => { + it('fetches data for run tag tuple that has not been loaded yet', () => { + selectSpy + .withArgs(getTextData, {run: 'run1', tag: 'tag1'}) + .and.returnValue(of([])); + selectSpy + .withArgs(getTextData, {run: 'run1', tag: 'tag2'}) + .and.returnValue(of(null)); + store.refreshState(); + + action.next( + textTagGroupVisibilityChanged({ + tagGroup: {type: CategoryType.PREFIX_GROUP, name: 'foo'}, + visibleTextCards: [ + {run: 'run1', tag: 'tag1'}, + {run: 'run1', tag: 'tag2'}, + ], + }) + ); + + expect(fetchDataSujects.length).toBe(1); + fetchDataSujects[0].next([]); + fetchDataSujects[0].complete(); + + expect(recordedActions).toEqual([ + textDataLoaded({run: 'run1', tag: 'tag2', stepData: []}), + ]); + }); + + [ + {name: 'auto reload', actionPayload: reload()}, + {name: 'manual reload', actionPayload: manualReload()}, + ].forEach(({name, actionPayload}) => { + it(`fetches data for visible cards when ${name} fires`, () => { + selectSpy + .withArgs(getTextData, {run: 'run1', tag: 'tag1'}) + .and.returnValue(of([])); + store.overrideSelector(getTextAllVisibleRunTags, [ + {run: 'run1', tag: 'tag1'}, + ]); + store.refreshState(); + + action.next(actionPayload); + + expect(fetchDataSujects.length).toBe(1); + fetchDataSujects[0].next([]); + fetchDataSujects[0].complete(); + + expect(recordedActions).toEqual([ + textDataLoaded({run: 'run1', tag: 'tag1', stepData: []}), + ]); + }); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..44f06232d16e83deff82f483a31325bd5e086f80 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/BUILD @@ -0,0 +1,48 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "store", + srcs = [ + "index.ts", + "text_v2_reducers.ts", + "text_v2_selectors.ts", + ], + deps = [ + ":types", + "//tensorboard/webapp/plugins/text_v2:types", + "//tensorboard/webapp/plugins/text_v2/data_source", + "@npm//@ngrx/store", + ], +) + +ng_module( + name = "types", + srcs = [ + "text_types.ts", + ], + deps = [ + "//tensorboard/webapp/plugins/text_v2/data_source", + "//tensorboard/webapp/types", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "store_test_lib", + testonly = True, + srcs = [ + "testing.ts", + "text_v2_selectors_test.ts", + ], + deps = [ + ":store", + ":types", + "//tensorboard/webapp/plugins/text_v2:testing", + "//tensorboard/webapp/plugins/text_v2/data_source", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/index.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..6b204fe4c6a17d50f62ee5bab0d1f9a798ede0d0 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/index.ts @@ -0,0 +1,15 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export * from './text_types'; diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/testing.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/testing.ts new file mode 100644 index 0000000000000000000000000000000000000000..c151b73ca013da5f832d839583531035a4af64d9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/testing.ts @@ -0,0 +1,31 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {TextState, TEXT_FEATURE_KEY} from './text_types'; + +export function buildTextState(override: Partial) { + return { + runToTags: new Map(), + data: new Map(), + visibleRunTags: new Map(), + ...override, + }; +} + +export function buildState(textState: TextState) { + return { + [TEXT_FEATURE_KEY]: textState, + }; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/text_types.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/text_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..e12ee88372f0e38b6be60455cbf8fd5a336e451b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/text_types.ts @@ -0,0 +1,30 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {StepDatum} from '../data_source'; + +export const TEXT_FEATURE_KEY = 'text'; + +type RunId = string; +type TagId = string; + +export interface TextState { + visibleRunTags: Map>; + runToTags: Map; + data: Map>; +} + +export interface State { + [TEXT_FEATURE_KEY]?: TextState; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/text_v2_reducers.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/text_v2_reducers.ts new file mode 100644 index 0000000000000000000000000000000000000000..bd5d2684f40079ce65f1a8402016a37386eb6c76 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/text_v2_reducers.ts @@ -0,0 +1,91 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Action, createReducer, on} from '@ngrx/store'; + +import {TextState} from './text_types'; + +// HACK: These imports are for type inference. +// https://github.com/bazelbuild/rules_nodejs/issues/1013 +/** @typehack */ import * as _typeHackStore from '@ngrx/store/store'; + +const DATA_A_B_RUN1 = [ + { + originalShape: [3], + step: 0, + stringArray: [['foo', 'bar', 'baz']], + wallTimeInMs: 1577865600000, + truncated: false, + }, + { + originalShape: [3], + step: 1, + stringArray: [['foo', 'baz']], + wallTimeInMs: 1577865601000, + truncated: false, + }, +]; + +const DATA_A_C_RUN1 = [ + { + originalShape: [3], + step: 0, + stringArray: [ + [ + 'We conducted an experiment and found the following data:\n\nPounds of chocolate | Happiness\n---|---\n0 | 1\n1 | 4\n2 | 9\n3 | 16\n4 | 25\n5 | 36\n6 | 49\n7 | 64\n8 | 81\n9 | 100\n10 | 121', + ], + ], + wallTimeInMs: 1577865600000, + truncated: false, + }, + { + originalShape: [3], + step: 1, + stringArray: [ + ['\u00d7', '**0**', '**1**', '**2**', '**3**', '**4**', '**5**'], + ['**0**', '0', '0', '0', '0', '0', '0'], + ['**1**', '0', '1', '2', '3', '4', '5'], + ['**2**', '0', '2', '4', '6', '8', '10'], + ['**3**', '0', '3', '6', '9', '12', '15'], + ['**4**', '0', '4', '8', '12', '16', '20'], + ['**5**', '0', '5', '10', '15', '20', '25'], + ], + wallTimeInMs: 1577865601000, + truncated: false, + }, +]; + +const initialState = { + runToTags: new Map([ + ['run1', ['a/b', 'a/c']], + ['run2', ['a/b', 'a/d']], + ['run3', ['c', 'a/b']], + ]), + data: new Map([ + [ + 'run1', + new Map([ + ['a/b', DATA_A_B_RUN1], + ['a/c', DATA_A_C_RUN1], + ]), + ], + ]), + visibleRunTags: new Map(), +}; + +const reducer = createReducer(initialState); + +export function reducers(state: TextState | undefined, action: Action) { + return reducer(state, action); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/text_v2_selectors.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/text_v2_selectors.ts new file mode 100644 index 0000000000000000000000000000000000000000..0fb6661962b7f1f77fc3839db81cd213685d112a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/text_v2_selectors.ts @@ -0,0 +1,70 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {createSelector, createFeatureSelector} from '@ngrx/store'; +import {TextState, State, TEXT_FEATURE_KEY} from './text_types'; + +import {StepDatum} from '../data_source'; +import {RunTag} from '../types'; + +// HACK: These imports are for type inference. +// https://github.com/bazelbuild/rules_nodejs/issues/1013 +/** @typehack */ import * as _typeHackSelector from '@ngrx/store/src/selector'; +/** @typehack */ import * as _typeHackStore from '@ngrx/store/store'; + +const selectTextState = createFeatureSelector( + TEXT_FEATURE_KEY +); + +export const getTextRunToTags = createSelector( + selectTextState, + (state: TextState) => state.runToTags +); + +/** + * Returns de-duplicated list of tuple for cards that are visible + * in the UI. + */ +export const getTextAllVisibleRunTags = createSelector( + selectTextState, + (state: TextState): RunTag[] => { + const serializedRunTagTuples = new Set(); + const allVisibleRunTagTuples = new Set(); + for (const runTagTuples of state.visibleRunTags.values()) { + for (const runTag of runTagTuples) { + const serializedRunTag = JSON.stringify(runTag); + if (serializedRunTagTuples.has(serializedRunTag)) { + continue; + } + serializedRunTagTuples.add(serializedRunTag); + allVisibleRunTagTuples.add(runTag); + } + } + return [...allVisibleRunTagTuples]; + } +); + +export const getTextData = createSelector( + selectTextState, + (state: TextState, props: {run: string; tag: string}): StepDatum[] | null => { + // Refactor to `state.data.get(props.run)?.get(props.tag) || null` when prettier + // supports TypeScript 3.8 (prettier 2.x). + const tagToSteps = state.data.get(props.run); + if (!tagToSteps) { + return null; + } + + return tagToSteps.get(props.tag) || null; + } +); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/text_v2_selectors_test.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/text_v2_selectors_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..b269895aade4e6b27d4926035b76b95ac7d18a02 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/store/text_v2_selectors_test.ts @@ -0,0 +1,72 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {buildStepDatum} from '../testing'; + +import * as selectors from './text_v2_selectors'; +import {buildState, buildTextState} from './testing'; + +describe('core selectors', () => { + describe('#getTextRunToTags', () => { + beforeEach(() => { + selectors.getTextRunToTags.release(); + }); + + it('returns state', () => { + const state = buildState( + buildTextState({ + runToTags: new Map([['run', ['tag1', 'tag2']]]), + }) + ); + expect(selectors.getTextRunToTags(state)).toEqual( + new Map([['run', ['tag1', 'tag2']]]) + ); + }); + }); + + describe('#getTextData', () => { + beforeEach(() => { + selectors.getTextData.release(); + }); + + it('returns state', () => { + const state = buildState( + buildTextState({ + data: new Map([['run1', new Map([['tag1', [buildStepDatum({})]]])]]), + }) + ); + expect(selectors.getTextData(state, {run: 'run1', tag: 'tag1'})).toEqual([ + buildStepDatum({}), + ]); + }); + + it('returns null when accessing tag that is not present', () => { + const state = buildState( + buildTextState({ + data: new Map([['run1', new Map([['tag1', [buildStepDatum({})]]])]]), + }) + ); + expect(selectors.getTextData(state, {run: 'run1', tag: '??'})).toBeNull(); + }); + + it('returns null when accessing run that is not present', () => { + const state = buildState( + buildTextState({ + data: new Map([['run1', new Map([['tag1', [buildStepDatum({})]]])]]), + }) + ); + expect(selectors.getTextData(state, {run: '??', tag: 'tag1'})).toBeNull(); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/testing.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/testing.ts new file mode 100644 index 0000000000000000000000000000000000000000..5a7857575f42dd77ac62ad29951daa8eed56b388 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/testing.ts @@ -0,0 +1,26 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {StepDatum} from './data_source'; + +export function buildStepDatum(override: Partial): StepDatum { + return { + originalShape: [1], + step: 0, + stringArray: [['hello']], + wallTimeInMs: 123, + truncated: false, + }; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/text_v2_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/text_v2_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..c7d3fc587cd421dd09dc20a93047606b1ae45a9c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/text_v2_module.ts @@ -0,0 +1,40 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {EffectsModule} from '@ngrx/effects'; +import {StoreModule} from '@ngrx/store'; + +import {PluginRegistryModule} from '../plugin_registry_module'; +import {TextDashboardComponent} from './views/text_dashboard/text_dashboard_component'; +import {TextDashboardModule} from './views/text_dashboard/text_dashboard_module'; +import {TextV2DataSourceModule} from './data_source/text_v2_data_source_module'; +import {TextEffects} from './effects/text_effects'; +import {reducers} from './store/text_v2_reducers'; +import {TEXT_FEATURE_KEY} from './store'; + +@NgModule({ + imports: [ + CommonModule, + TextDashboardModule, + PluginRegistryModule.forPlugin('text_v2', TextDashboardComponent), + TextV2DataSourceModule, + StoreModule.forFeature(TEXT_FEATURE_KEY, reducers), + EffectsModule.forFeature([TextEffects]), + ], + entryComponents: [TextDashboardComponent], +}) +export class TextV2Module {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/types.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..185fe4d9cc970f537295cb462821518a624a7f98 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/types.ts @@ -0,0 +1,28 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {CategoryType} from '../../../components/tf_categorization_utils/categorizationUtils'; + +export const PLUGIN_ID = 'text_v2'; + +export interface TagGroup { + type: CategoryType; + name: string; +} + +export interface RunTag { + run: string; + tag: string; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/views/text_dashboard/BUILD b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/views/text_dashboard/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..0b5ef332dc43e55f3d686a805661645fb610de3b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/views/text_dashboard/BUILD @@ -0,0 +1,16 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "text_dashboard", + srcs = [ + "text_dashboard_component.ts", + "text_dashboard_module.ts", + ], + deps = [ + "@npm//@angular/core", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/views/text_dashboard/text_dashboard_component.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/views/text_dashboard/text_dashboard_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..2ced5cec38c2dbf11a4c72a29c5a26165ce7715c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/views/text_dashboard/text_dashboard_component.ts @@ -0,0 +1,22 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component} from '@angular/core'; + +@Component({ + selector: 'text-dashboard', + template: ` This is the text dashboard `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TextDashboardComponent {} diff --git a/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/views/text_dashboard/text_dashboard_module.ts b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/views/text_dashboard/text_dashboard_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..14ac675bc939ae001425d1040c258db12b5171d2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/plugins/text_v2/views/text_dashboard/text_dashboard_module.ts @@ -0,0 +1,23 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; + +import {TextDashboardComponent} from './text_dashboard_component'; + +@NgModule({ + declarations: [TextDashboardComponent], + exports: [TextDashboardComponent], +}) +export class TextDashboardModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/reducer_config.ts b/saved_models/tensorboard/tensorboard/webapp/reducer_config.ts new file mode 100644 index 0000000000000000000000000000000000000000..cc82612abfd1473ebcb2d05bc1bbdb9998c92890 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/reducer_config.ts @@ -0,0 +1,51 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {InjectionToken, isDevMode} from '@angular/core'; +import { + Action, + ActionReducer, + ActionReducerMap, + MetaReducer, +} from '@ngrx/store'; + +export interface State {} + +// console.log all actions +function logger(reducer: ActionReducer): ActionReducer { + return (state, action) => { + const result = reducer(state, action); + console.groupCollapsed(action.type); + console.log('prev state', state); + console.log('action', action); + console.log('next state', result); + console.groupEnd(); + + return result; + }; +} + +export function loggerMetaReducerFactory(): MetaReducer { + return !isDevMode() + ? (reducer) => (state, action) => { + return reducer(state, action); + } + : logger; +} + +export const ROOT_REDUCERS = new InjectionToken< + ActionReducerMap +>('Root reducers token', { + factory: () => ({}), +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/reloader/BUILD b/saved_models/tensorboard/tensorboard/webapp/reloader/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..1823540bdd19f65fc76dedef81c1d54dbd62179f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/reloader/BUILD @@ -0,0 +1,42 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "reloader", + srcs = [ + "reloader_component.ts", + "reloader_module.ts", + ], + deps = [ + "//tensorboard/webapp/core", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/core/store", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "test_lib", + testonly = True, + srcs = [ + "reloader_component_test.ts", + ], + deps = [ + ":reloader", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/core/testing", + "@npm//@angular/common", + "@npm//@angular/compiler", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/reloader/reloader_component.ts b/saved_models/tensorboard/tensorboard/webapp/reloader/reloader_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..45fb01a65d6f304772dda0eb1ccc3f0ee929bcb4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/reloader/reloader_component.ts @@ -0,0 +1,90 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {DOCUMENT} from '@angular/common'; +import {Component, ChangeDetectionStrategy, Inject} from '@angular/core'; +import {Store, select} from '@ngrx/store'; +import {combineLatest} from 'rxjs'; +import {distinctUntilChanged} from 'rxjs/operators'; + +import {getReloadEnabled, getReloadPeriodInMs, State} from '../core/store'; +import {reload} from '../core/actions'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'reloader', + template: '', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ReloaderComponent { + private readonly onVisibilityChange = this.onVisibilityChangeImpl.bind(this); + private readonly reloadEnabled$ = this.store.pipe(select(getReloadEnabled)); + private readonly reloadPeriodInMs$ = this.store.pipe( + select(getReloadPeriodInMs) + ); + private reloadTimerId: ReturnType | null = null; + private missedAutoReload: boolean = false; + + constructor( + private store: Store, + @Inject(DOCUMENT) private readonly document: Document + ) {} + + ngOnInit() { + this.document.addEventListener('visibilitychange', this.onVisibilityChange); + combineLatest( + this.reloadEnabled$.pipe(distinctUntilChanged()), + this.reloadPeriodInMs$.pipe(distinctUntilChanged()) + ).subscribe(([enabled, reloadPeriodInMs]) => { + this.cancelLoad(); + if (enabled) { + this.load(reloadPeriodInMs as number); + } + }); + } + + private onVisibilityChangeImpl() { + if (this.document.visibilityState === 'visible' && this.missedAutoReload) { + this.missedAutoReload = false; + this.store.dispatch(reload()); + } + } + + private load(reloadPeriodInMs: number) { + this.reloadTimerId = setTimeout(() => { + if (this.document.visibilityState === 'visible') { + this.store.dispatch(reload()); + } else { + this.missedAutoReload = true; + } + this.load(reloadPeriodInMs); + }, reloadPeriodInMs); + } + + private cancelLoad() { + if (this.reloadTimerId !== null) { + clearTimeout(this.reloadTimerId); + } + this.reloadTimerId = null; + } + + ngOnDestroy() { + this.cancelLoad(); + this.document.removeEventListener( + 'visibilitychange', + this.onVisibilityChange + ); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/reloader/reloader_component_test.ts b/saved_models/tensorboard/tensorboard/webapp/reloader/reloader_component_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..58f6d2e93b7c8623dbb624b068fb78f0f01ded5a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/reloader/reloader_component_test.ts @@ -0,0 +1,345 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {DOCUMENT} from '@angular/common'; +import {TestBed, fakeAsync, tick} from '@angular/core/testing'; +import {Store} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {ReloaderComponent} from './reloader_component'; + +import {reload} from '../core/actions'; +import {State} from '../core/store'; +import {createState, createCoreState} from '../core/testing'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('reloader_component', () => { + let store: MockStore; + let dispatchSpy: jasmine.Spy; + let fakeDocument: Document; + + function createFakeDocument() { + return { + visibilityState: 'visible', + addEventListener: document.addEventListener.bind(document), + removeEventListener: document.removeEventListener.bind(document), + // DOMTestComponentRenderer injects DOCUMENT and requires the following + // properties to function. + querySelectorAll: document.querySelectorAll.bind(document), + body: document.body, + }; + } + + function simulateVisibilityChange(visible: boolean) { + Object.defineProperty(fakeDocument, 'visibilityState', { + get: () => (visible ? 'visible' : 'hidden'), + }); + document.dispatchEvent(new Event('visibilitychange')); + } + + beforeEach(async () => { + await TestBed.configureTestingModule({ + providers: [ + { + provide: DOCUMENT, + useFactory: createFakeDocument, + }, + provideMockStore({ + initialState: createState( + createCoreState({ + reloadPeriodInMs: 5, + reloadEnabled: true, + }) + ), + }), + ReloaderComponent, + ], + declarations: [ReloaderComponent], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + fakeDocument = TestBed.inject(DOCUMENT); + dispatchSpy = spyOn(store, 'dispatch'); + }); + + it('dispatches reload action every reload period', fakeAsync(() => { + store.setState( + createState( + createCoreState({ + reloadPeriodInMs: 5, + reloadEnabled: true, + }) + ) + ); + const fixture = TestBed.createComponent(ReloaderComponent); + fixture.detectChanges(); + + expect(dispatchSpy).not.toHaveBeenCalled(); + + tick(5); + expect(dispatchSpy).toHaveBeenCalledTimes(1); + expect(dispatchSpy).toHaveBeenCalledWith(reload()); + + tick(5); + expect(dispatchSpy).toHaveBeenCalledTimes(2); + expect(dispatchSpy).toHaveBeenCalledWith(reload()); + + // Manually invoke destruction of the component so we can cleanup the + // timer. + fixture.destroy(); + })); + + it('disables reload when it is not enabled', fakeAsync(() => { + store.setState( + createState( + createCoreState({ + reloadPeriodInMs: 5, + reloadEnabled: false, + }) + ) + ); + const fixture = TestBed.createComponent(ReloaderComponent); + fixture.detectChanges(); + + tick(10); + + expect(dispatchSpy).not.toHaveBeenCalled(); + + fixture.destroy(); + })); + + it('respects reload period', fakeAsync(() => { + store.setState( + createState( + createCoreState({ + reloadPeriodInMs: 50, + reloadEnabled: true, + }) + ) + ); + const fixture = TestBed.createComponent(ReloaderComponent); + fixture.detectChanges(); + + expect(dispatchSpy).not.toHaveBeenCalled(); + + tick(5); + expect(dispatchSpy).not.toHaveBeenCalled(); + + tick(45); + expect(dispatchSpy).toHaveBeenCalledTimes(1); + expect(dispatchSpy).toHaveBeenCalledWith(reload()); + + fixture.destroy(); + })); + + it('only resets timer when store values changes', fakeAsync(() => { + store.setState( + createState( + createCoreState({ + reloadPeriodInMs: 5, + reloadEnabled: true, + }) + ) + ); + const fixture = TestBed.createComponent(ReloaderComponent); + fixture.detectChanges(); + + tick(4); + store.setState( + createState( + createCoreState({ + reloadPeriodInMs: 5, + reloadEnabled: true, + }) + ) + ); + fixture.detectChanges(); + expect(dispatchSpy).not.toHaveBeenCalled(); + + tick(1); + expect(dispatchSpy).toHaveBeenCalledTimes(1); + + tick(4); + store.setState( + createState( + createCoreState({ + reloadPeriodInMs: 3, + reloadEnabled: true, + }) + ) + ); + + tick(1); + expect(dispatchSpy).toHaveBeenCalledTimes(1); + + tick(2); + expect(dispatchSpy).toHaveBeenCalledTimes(2); + + fixture.destroy(); + })); + + it('does not reload if document is not visible', fakeAsync(() => { + store.setState( + createState( + createCoreState({ + reloadPeriodInMs: 5, + reloadEnabled: true, + }) + ) + ); + const fixture = TestBed.createComponent(ReloaderComponent); + fixture.detectChanges(); + + tick(5); + expect(dispatchSpy).toHaveBeenCalledTimes(1); + + simulateVisibilityChange(false); + tick(5); + expect(dispatchSpy).toHaveBeenCalledTimes(1); + + fixture.destroy(); + })); + + it('reloads when document becomes visible if missed reload', fakeAsync(() => { + store.setState( + createState( + createCoreState({ + reloadPeriodInMs: 5, + reloadEnabled: true, + }) + ) + ); + const fixture = TestBed.createComponent(ReloaderComponent); + fixture.detectChanges(); + + // Miss a reload because not visible. + simulateVisibilityChange(false); + tick(5); + expect(dispatchSpy).toHaveBeenCalledTimes(0); + + // Dispatch a reload when next visible. + simulateVisibilityChange(true); + expect(dispatchSpy).toHaveBeenCalledTimes(1); + + fixture.destroy(); + })); + + it('reloads when document becomes visible if missed reload, regardless of how long not visible', fakeAsync(() => { + store.setState( + createState( + createCoreState({ + reloadPeriodInMs: 5, + reloadEnabled: true, + }) + ) + ); + const fixture = TestBed.createComponent(ReloaderComponent); + fixture.detectChanges(); + + tick(5); + expect(dispatchSpy).toHaveBeenCalledTimes(1); + + // Document is not visible during time period that includes missed auto + // reload but is less than reloadPeriodInMs. + tick(2); + simulateVisibilityChange(false); + tick(3); + // No reload is dispatched. + expect(dispatchSpy).toHaveBeenCalledTimes(1); + + // Dispatch a reload when next visible. + simulateVisibilityChange(true); + expect(dispatchSpy).toHaveBeenCalledTimes(2); + + fixture.destroy(); + })); + + it('does not reload when document becomes visible if there was not a missed reload', fakeAsync(() => { + store.setState( + createState( + createCoreState({ + reloadPeriodInMs: 5, + reloadEnabled: true, + }) + ) + ); + const fixture = TestBed.createComponent(ReloaderComponent); + fixture.detectChanges(); + + tick(5); + expect(dispatchSpy).toHaveBeenCalledTimes(1); + + // Document is not visible during time period that does not include + // missed auto reload. + simulateVisibilityChange(false); + tick(3); + simulateVisibilityChange(true); + expect(dispatchSpy).toHaveBeenCalledTimes(1); + + fixture.destroy(); + })); + + it('does not reload when document becomes visible if missed reload was already handled', fakeAsync(() => { + store.setState( + createState( + createCoreState({ + reloadPeriodInMs: 5, + reloadEnabled: true, + }) + ) + ); + const fixture = TestBed.createComponent(ReloaderComponent); + fixture.detectChanges(); + + // Miss a reload because not visible. + simulateVisibilityChange(false); + tick(6); + expect(dispatchSpy).toHaveBeenCalledTimes(0); + + // Dispatch a reload when next visible. + simulateVisibilityChange(true); + expect(dispatchSpy).toHaveBeenCalledTimes(1); + + // Document is not visible during time period that does not include + // another missed reload. + simulateVisibilityChange(false); + tick(2); + simulateVisibilityChange(true); + // No additional reload dispatched. + expect(dispatchSpy).toHaveBeenCalledTimes(1); + + fixture.destroy(); + })); + + it('does not reload when document becomes visible if auto reload is off', fakeAsync(() => { + store.setState( + createState( + createCoreState({ + reloadPeriodInMs: 5, + reloadEnabled: false, + }) + ) + ); + const fixture = TestBed.createComponent(ReloaderComponent); + fixture.detectChanges(); + + simulateVisibilityChange(false); + tick(5); + + simulateVisibilityChange(true); + expect(dispatchSpy).toHaveBeenCalledTimes(0); + + fixture.destroy(); + })); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/reloader/reloader_module.ts b/saved_models/tensorboard/tensorboard/webapp/reloader/reloader_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..e45e5838038c402c91abbe3f54773453e624a578 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/reloader/reloader_module.ts @@ -0,0 +1,23 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; + +import {ReloaderComponent} from './reloader_component'; + +@NgModule({ + declarations: [ReloaderComponent], + exports: [ReloaderComponent], +}) +export class ReloaderModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/routes/BUILD b/saved_models/tensorboard/tensorboard/webapp/routes/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..18935709a9e25e45dc926e419caa8cfb9d30e32d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/routes/BUILD @@ -0,0 +1,62 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "routes", + srcs = [ + "index.ts", + ], + deps = [ + ":core_deeplink_provider", + "//tensorboard/webapp/app_routing:route_config", + "//tensorboard/webapp/app_routing:types", + "//tensorboard/webapp/tb_wrapper", + "@npm//@angular/core", + ], +) + +tf_ts_library( + name = "core_deeplink_provider", + srcs = [ + "core_deeplink_provider.ts", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/app_routing:deep_link_provider", + "//tensorboard/webapp/app_routing:route_config", + "//tensorboard/webapp/app_routing:types", + "//tensorboard/webapp/metrics:types", + "//tensorboard/webapp/metrics/data_source:types", + "//tensorboard/webapp/tb_wrapper", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "routes_test_lib", + testonly = True, + srcs = [ + "core_deeplink_provider_test.ts", + ], + deps = [ + ":core_deeplink_provider", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/app_routing:deep_link_provider", + "//tensorboard/webapp/app_routing:types", + "//tensorboard/webapp/metrics:test_lib", + "//tensorboard/webapp/metrics/data_source:types", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/routes/core_deeplink_provider.ts b/saved_models/tensorboard/tensorboard/webapp/routes/core_deeplink_provider.ts new file mode 100644 index 0000000000000000000000000000000000000000..374720042b0040a52d3b7dd3f12beae9e0c298d7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/routes/core_deeplink_provider.ts @@ -0,0 +1,171 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {DeepLinkProvider} from '../app_routing/deep_link_provider'; +import {SerializableQueryParams} from '../app_routing/types'; +import { + CardUniqueInfo, + URLDeserializedState as MetricsURLDeserializedState, +} from '../metrics/types'; +import { + isSampledPlugin, + isSingleRunPlugin, + isPluginType, +} from '../metrics/data_source/types'; +import {combineLatest, Observable} from 'rxjs'; +import {map} from 'rxjs/operators'; + +import {State} from '../app_state'; +import * as selectors from '../selectors'; + +export type DeserializedState = MetricsURLDeserializedState; + +/** + * Provides deeplinking for the core dashboards page. + */ +@Injectable() +export class CoreDeepLinkProvider extends DeepLinkProvider { + private getMetricsPinnedCards( + store: Store + ): Observable { + return combineLatest([ + store.select(selectors.getPinnedCardsWithMetadata), + store.select(selectors.getUnresolvedImportedPinnedCards), + ]).pipe( + map(([pinnedCards, unresolvedImportedPinnedCards]) => { + if (!pinnedCards.length && !unresolvedImportedPinnedCards.length) { + return []; + } + + const pinnedCardsToStore = pinnedCards.map( + ({plugin, tag, sample, runId}) => { + const info = {plugin, tag} as CardUniqueInfo; + if (isSingleRunPlugin(plugin)) { + info.runId = runId!; + } + if (isSampledPlugin(plugin)) { + info.sample = sample!; + } + return info; + } + ); + // Intentionally order unresolved cards last, so that cards pinned by + // the user in this session have priority. + const cardsToStore = [ + ...pinnedCardsToStore, + ...unresolvedImportedPinnedCards, + ]; + return [{key: 'pinnedCards', value: JSON.stringify(cardsToStore)}]; + }) + ); + } + + serializeStateToQueryParams( + store: Store + ): Observable { + return this.getMetricsPinnedCards(store); + } + + deserializeQueryParams( + queryParams: SerializableQueryParams + ): DeserializedState { + let pinnedCards = null; + for (const {key, value} of queryParams) { + if (key === 'pinnedCards') { + pinnedCards = extractPinnedCardsFromURLText(value); + break; + } + } + return { + metrics: { + pinnedCards: pinnedCards || [], + }, + }; + } +} + +function extractPinnedCardsFromURLText( + urlText: string +): CardUniqueInfo[] | null { + // Check that the URL text parses. + let object; + try { + object = JSON.parse(urlText) as unknown; + } catch { + return null; + } + if (!Array.isArray(object)) { + return null; + } + + const result = []; + for (const item of object) { + // Validate types. + const isPluginString = typeof item.plugin === 'string'; + const isRunString = typeof item.runId === 'string'; + const isSampleNumber = typeof item.sample === 'number'; + const isTagString = typeof item.tag === 'string'; + const isRunTypeValid = isRunString || typeof item.runId === 'undefined'; + const isSampleTypeValid = + isSampleNumber || typeof item.sample === 'undefined'; + if ( + !isPluginString || + !isTagString || + !isRunTypeValid || + !isSampleTypeValid + ) { + continue; + } + + // Required fields and range errors. + if (!isPluginType(item.plugin)) { + continue; + } + if (!item.tag) { + continue; + } + if (isSingleRunPlugin(item.plugin)) { + // A single run plugin must specify a non-empty run. + if (!item.runId) { + continue; + } + } else { + // A multi run plugin must not specify a run. + if (item.runId) { + continue; + } + } + if (isSampleNumber) { + if (!isSampledPlugin(item.plugin)) { + continue; + } + if (!Number.isInteger(item.sample) || item.sample < 0) { + continue; + } + } + + // Assemble result. + const resultItem = {plugin: item.plugin, tag: item.tag} as CardUniqueInfo; + if (isRunString) { + resultItem.runId = item.runId; + } + if (isSampleNumber) { + resultItem.sample = item.sample; + } + result.push(resultItem); + } + return result; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/routes/core_deeplink_provider_test.ts b/saved_models/tensorboard/tensorboard/webapp/routes/core_deeplink_provider_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..a11aa25f468809c74b1861bdf4b5cb6665d94575 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/routes/core_deeplink_provider_test.ts @@ -0,0 +1,233 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed} from '@angular/core/testing'; +import {Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import {skip} from 'rxjs/operators'; + +import * as selectors from '../selectors'; +import {DeepLinkProvider} from '../app_routing/deep_link_provider'; +import {SerializableQueryParams} from '../app_routing/types'; +import {State} from '../app_state'; +import {appStateFromMetricsState, buildMetricsState} from '../metrics/testing'; +import {PluginType} from '../metrics/data_source/types'; +import {CoreDeepLinkProvider} from './core_deeplink_provider'; + +describe('core deeplink provider', () => { + let store: MockStore; + let provider: DeepLinkProvider; + let queryParamsSerialized: SerializableQueryParams[]; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + providers: [ + provideMockStore({ + initialState: { + ...appStateFromMetricsState(buildMetricsState()), + }, + }), + ], + }).compileComponents(); + + store = TestBed.inject>(Store) as MockStore; + queryParamsSerialized = []; + + provider = new CoreDeepLinkProvider(); + provider + .serializeStateToQueryParams(store) + .pipe( + // Skip the initial bootstrap. + skip(1) + ) + .subscribe((queryParams) => { + queryParamsSerialized.push(queryParams); + }); + }); + + describe('time series', () => { + it('serializes pinned card state when store updates', () => { + store.overrideSelector(selectors.getPinnedCardsWithMetadata, [ + { + cardId: 'card1', + plugin: PluginType.SCALARS, + tag: 'accuracy', + runId: null, + }, + ]); + store.overrideSelector(selectors.getUnresolvedImportedPinnedCards, [ + { + plugin: PluginType.SCALARS, + tag: 'loss', + }, + ]); + store.refreshState(); + + expect(queryParamsSerialized[queryParamsSerialized.length - 1]).toEqual([ + { + key: 'pinnedCards', + value: + '[{"plugin":"scalars","tag":"accuracy"},{"plugin":"scalars","tag":"loss"}]', + }, + ]); + + store.overrideSelector(selectors.getPinnedCardsWithMetadata, [ + { + cardId: 'card1', + plugin: PluginType.SCALARS, + tag: 'accuracy2', + runId: null, + }, + ]); + store.overrideSelector(selectors.getUnresolvedImportedPinnedCards, [ + { + plugin: PluginType.SCALARS, + tag: 'loss2', + }, + ]); + store.refreshState(); + + expect(queryParamsSerialized[queryParamsSerialized.length - 1]).toEqual([ + { + key: 'pinnedCards', + value: + '[{"plugin":"scalars","tag":"accuracy2"},{"plugin":"scalars","tag":"loss2"}]', + }, + ]); + }); + + it('serializes nothing when states are empty', () => { + store.overrideSelector(selectors.getPinnedCardsWithMetadata, []); + store.overrideSelector(selectors.getUnresolvedImportedPinnedCards, []); + store.refreshState(); + + expect(queryParamsSerialized[queryParamsSerialized.length - 1]).toEqual( + [] + ); + }); + + it('deserializes empty pinned cards', () => { + const state = provider.deserializeQueryParams([]); + + expect(state).toEqual({metrics: {pinnedCards: []}}); + }); + + it('deserializes valid pinned cards', () => { + const state = provider.deserializeQueryParams([ + { + key: 'pinnedCards', + value: + '[{"plugin":"scalars","tag":"accuracy"},{"plugin":"images","tag":"loss","runId":"exp1/123","sample":5}]', + }, + ]); + + expect(state).toEqual({ + metrics: { + pinnedCards: [ + {plugin: PluginType.SCALARS, tag: 'accuracy'}, + { + plugin: PluginType.IMAGES, + tag: 'loss', + runId: 'exp1/123', + sample: 5, + }, + ], + }, + }); + }); + + it('sanitizes pinned cards on deserialization', () => { + const cases = [ + { + // malformed URL value + serializedValue: 'blah[{"plugin":"scalars","tag":"accuracy"}]', + expectedPinnedCards: [], + }, + { + // no plugin + serializedValue: + '[{"tag":"loss"},{"plugin":"scalars","tag":"default"}]', + expectedPinnedCards: [{plugin: PluginType.SCALARS, tag: 'default'}], + }, + { + // unknown plugin + serializedValue: + '[{"plugin":"unknown","tag":"loss"},{"plugin":"scalars","tag":"default"}]', + expectedPinnedCards: [{plugin: PluginType.SCALARS, tag: 'default'}], + }, + { + // tag is not a string + serializedValue: + '[{"plugin":"scalars","tag":5},{"plugin":"scalars","tag":"default"}]', + expectedPinnedCards: [{plugin: PluginType.SCALARS, tag: 'default'}], + }, + { + // tag is empty + serializedValue: + '[{"plugin":"scalars","tag":""},{"plugin":"scalars","tag":"default"}]', + expectedPinnedCards: [{plugin: PluginType.SCALARS, tag: 'default'}], + }, + { + // runId is not a string + serializedValue: + '[{"plugin":"images","tag":"loss","runId":123},{"plugin":"scalars","tag":"default"}]', + expectedPinnedCards: [{plugin: PluginType.SCALARS, tag: 'default'}], + }, + { + // runId is empty + serializedValue: + '[{"plugin":"images","tag":"loss","runId":""},{"plugin":"scalars","tag":"default"}]', + expectedPinnedCards: [{plugin: PluginType.SCALARS, tag: 'default'}], + }, + { + // runId provided with multi-run plugin + serializedValue: + '[{"plugin":"scalars","tag":"loss","runId":"123"},{"plugin":"scalars","tag":"default"}]', + expectedPinnedCards: [{plugin: PluginType.SCALARS, tag: 'default'}], + }, + { + // sample provided with non-sampled plugin + serializedValue: + '[{"plugin":"scalars","tag":"loss","sample":5},{"plugin":"scalars","tag":"default"}]', + expectedPinnedCards: [{plugin: PluginType.SCALARS, tag: 'default'}], + }, + { + // sample is not a number + serializedValue: + '[{"plugin":"images","tag":"loss","sample":"5"},{"plugin":"scalars","tag":"default"}]', + expectedPinnedCards: [{plugin: PluginType.SCALARS, tag: 'default'}], + }, + { + // sample is not an integer + serializedValue: + '[{"plugin":"images","tag":"loss","sample":5.5},{"plugin":"scalars","tag":"default"}]', + expectedPinnedCards: [{plugin: PluginType.SCALARS, tag: 'default'}], + }, + { + // sample is negative + serializedValue: + '[{"plugin":"images","tag":"loss","sample":-5},{"plugin":"scalars","tag":"default"}]', + expectedPinnedCards: [{plugin: PluginType.SCALARS, tag: 'default'}], + }, + ]; + for (const {serializedValue, expectedPinnedCards} of cases) { + const state = provider.deserializeQueryParams([ + {key: 'pinnedCards', value: serializedValue}, + ]); + + expect(state).toEqual({metrics: {pinnedCards: expectedPinnedCards}}); + } + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/routes/index.ts b/saved_models/tensorboard/tensorboard/webapp/routes/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..cc087a27e13a3e429080736a5ecc12dd6d631c34 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/routes/index.ts @@ -0,0 +1,32 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, Type} from '@angular/core'; + +import {TensorBoardWrapperComponent} from '../tb_wrapper/tb_wrapper_component'; +import {RouteDef} from '../app_routing/route_config_types'; +import {RouteKind} from '../app_routing/types'; +import {CoreDeepLinkProvider} from './core_deeplink_provider'; + +export function routesFactory(): RouteDef[] { + return [ + { + routeKind: RouteKind.EXPERIMENT, + path: '/', + ngComponent: TensorBoardWrapperComponent as Type, + defaultRoute: true, + deepLinkProvider: new CoreDeepLinkProvider(), + }, + ]; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/BUILD b/saved_models/tensorboard/tensorboard/webapp/runs/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..512ce199c71dfb2c1400a033f643fa97800e209a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/BUILD @@ -0,0 +1,32 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "runs", + srcs = [ + "runs_module.ts", + ], + deps = [ + "//tensorboard/webapp/alert:alert_action", + "//tensorboard/webapp/runs/actions", + "//tensorboard/webapp/runs/data_source", + "//tensorboard/webapp/runs/effects", + "//tensorboard/webapp/runs/store", + "//tensorboard/webapp/runs/store:types", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + ], +) + +tf_ts_library( + name = "types", + srcs = [ + "types.ts", + ], + deps = ["//tensorboard/webapp/runs/data_source"], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/actions/BUILD b/saved_models/tensorboard/tensorboard/webapp/runs/actions/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..d5b90c20475d58d4c147d8dfb5b7db0aa97a5cdc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/actions/BUILD @@ -0,0 +1,19 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "actions", + srcs = [ + "index.ts", + "runs_actions.ts", + ], + deps = [ + "//tensorboard/webapp/runs:types", + "//tensorboard/webapp/runs/data_source", + "//tensorboard/webapp/types:ui", + "@npm//@ngrx/store", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/actions/index.ts b/saved_models/tensorboard/tensorboard/webapp/runs/actions/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..80bd7cede24840fea996e1ce46a906ffe2ae06b2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/actions/index.ts @@ -0,0 +1,15 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export * from './runs_actions'; diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/actions/runs_actions.ts b/saved_models/tensorboard/tensorboard/webapp/runs/actions/runs_actions.ts new file mode 100644 index 0000000000000000000000000000000000000000..b78cde04f27007edd5efa49a7452c5ef976c7938 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/actions/runs_actions.ts @@ -0,0 +1,122 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview Experiments Ngrx actions. + */ + +import {createAction, props} from '@ngrx/store'; + +import {SortDirection} from '../../types/ui'; +import {Run} from '../data_source/runs_data_source_types'; +import {DiscreteHparamValues, ExperimentIdToRunsAndMetadata} from '../types'; + +/** @typehack */ import * as _typeHackModels from '@ngrx/store/src/models'; +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +/** + * The action can fire when no requests are actually made (i.e., an empty + * requestedExperimentIds). + */ +export const fetchRunsRequested = createAction( + '[Runs] Fetch Runs Requested', + props<{experimentIds: string[]; requestedExperimentIds: string[]}>() +); + +/** + * The action can fire when no requests are actually made (i.e., an empty + * requestedExperimentIds). + */ +export const fetchRunsSucceeded = createAction( + '[Runs] Fetch Runs Succeeded', + props<{ + experimentIds: string[]; + runsForAllExperiments: Run[]; + newRunsAndMetadata: ExperimentIdToRunsAndMetadata; + }>() +); + +export const fetchRunsFailed = createAction( + '[Runs] Fetch Runs Failed', + props<{experimentIds: string[]; requestedExperimentIds: string[]}>() +); + +export const runSelectionToggled = createAction( + '[Runs] Run Selection Toggled', + props<{experimentIds: string[]; runId: string}>() +); + +export const runPageSelectionToggled = createAction( + '[Runs] Run Page Selection Toggled', + props<{experimentIds: string[]; runIds: string[]}>() +); + +export const runsSelectAll = createAction( + '[Runs] Runs Select All', + props<{experimentIds: string[]}>() +); + +export const runSelectorPaginationOptionChanged = createAction( + '[Runs] Run Selector Pagination Option Changed', + props<{pageSize: number; pageIndex: number}>() +); + +export const runSelectorSortChanged = createAction( + '[Runs] Run Selector Sort Changed', + props<{column: string; direction: SortDirection}>() +); + +export const runSelectorRegexFilterChanged = createAction( + '[Runs] Run Selector Regex Filter Changed', + props<{regexString: string}>() +); + +export const runColorChanged = createAction( + '[Runs] Run Color Changed', + props<{runId: string; newColor: string}>() +); + +export const runTableShown = createAction( + '[Runs] Run Table Shown', + props<{experimentIds: string[]}>() +); + +export const runDiscreteHparamFilterChanged = createAction( + '[Runs] Run Discrete Hparam Filter Changed', + props<{ + hparamName: string; + filterValues: DiscreteHparamValues; + includeUndefined: boolean; + }>() +); + +export const runIntervalHparamFilterChanged = createAction( + '[Runs] Run Interval Hparam Filter Changed', + props<{ + hparamName: string; + filterLowerValue: number; + filterUpperValue: number; + includeUndefined: boolean; + }>() +); + +export const runMetricFilterChanged = createAction( + '[Runs] Run Metric Filter Changed', + props<{ + metricTag: string; + filterLowerValue: number; + filterUpperValue: number; + includeUndefined: boolean; + }>() +); diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/data_source/BUILD b/saved_models/tensorboard/tensorboard/webapp/runs/data_source/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..771fa950f11990603349e86e65a069a0b7baaf56 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/data_source/BUILD @@ -0,0 +1,57 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "data_source", + srcs = [ + "runs_data_source.ts", + "runs_data_source_module.ts", + "runs_data_source_types.ts", + ], + deps = [ + ":backend_types", + "//tensorboard/webapp/webapp_data_source:http_client", + "@npm//@angular/core", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "backend_types", + srcs = [ + "runs_backend_types.ts", + ], + visibility = ["//visibility:private"], +) + +ng_module( + name = "testing", + testonly = True, + srcs = [ + "testing.ts", + ], + deps = [ + ":backend_types", + ":data_source", + "@npm//@angular/core", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "runs_data_source_test", + testonly = True, + srcs = [ + "runs_data_source_test.ts", + ], + deps = [ + ":data_source", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/webapp_data_source:http_client_testing", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/data_source/runs_backend_types.ts b/saved_models/tensorboard/tensorboard/webapp/runs/data_source/runs_backend_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..5bb3932419f9c9d0b53ce0af33b5060090e40bec --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/data_source/runs_backend_types.ts @@ -0,0 +1,139 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview Types defined in tensorboard/plugins/hparams/api.proto and + * tensorboard/plugins/hparams/http_api.md. + */ + +export enum DatasetType { + DATASET_UNKNOWN = 'DATASET_UNKNOWN', + DATASET_TRAINING = 'DATASET_TRAINING', + DATASET_VALIDATION = 'DATASET_VALIDATION', +} + +export enum RunStatus { + STATUS_UNKNOWN = 'STATUS_UNKNOWN', + STATUS_SUCCESS = 'STATUS_SUCCESS', + STATUS_FAILURE = 'STATUS_FAILURE', + STATUS_RUNNING = 'STATUS_RUNNING', +} + +export enum BackendHparamsValueType { + DATA_TYPE_UNSET = 'DATA_TYPE_UNSET', + DATA_TYPE_STRING = 'DATA_TYPE_STRING', + DATA_TYPE_BOOL = 'DATA_TYPE_BOOL', + DATA_TYPE_FLOAT64 = 'DATA_TYPE_FLOAT64', +} + +export interface MetricName { + tag: string; + group: string; +} + +export interface MetricSpec { + name: MetricName; + displayName: string; + description: string; + datasetType: DatasetType; +} + +interface BaseHparamSpec { + description: string; + displayName: string; + name: string; + type: BackendHparamsValueType; +} + +export interface IntervalDomainHparamSpec extends BaseHparamSpec { + domainInterval: {minValue: number; maxValue: number}; +} + +// https://github.com/tensorflow/tensorboard/blob/11f649a981cb840ca9193c5c6672becabb063aa6/tensorboard/plugins/hparams/summary_v2.py#L477-L491 +export type DiscreteHparamValues = string[] | number[] | boolean[]; + +export type DiscreteHparamValue = DiscreteHparamValues[number]; + +export type HparamValue = DiscreteHparamValue | number; + +export interface DiscreteDomainHparamSpec extends BaseHparamSpec { + domainDiscrete: DiscreteHparamValues; +} + +export type HparamSpec = IntervalDomainHparamSpec | DiscreteDomainHparamSpec; + +export function isIntervalDomainHparamSpec( + spec: HparamSpec +): spec is IntervalDomainHparamSpec { + return spec.hasOwnProperty('domainInterval'); +} + +export function isDiscreteDomainHparamSpec( + spec: HparamSpec +): spec is DiscreteDomainHparamSpec { + return spec.hasOwnProperty('domainDiscrete'); +} + +export interface BackendHparamsExperimentResponse { + description: string; + hparamInfos: HparamSpec[]; + metricInfos: MetricSpec[]; + name: string; + timeCreatedSecs: number; + user: string; +} + +interface HparamsColFilterParams { + hparam: string; +} + +interface MetricsColFilterParams { + metric: MetricName; +} + +export interface BackendListSessionGroupRequest { + experimentName: string; + allowedStatuses: RunStatus[]; + colParams: Array; + startIndex: number; + sliceSize: number; +} + +export interface Session { + endTimeSecs: number; + metricValues: MetricsValue[]; + modelUri: string; + monitorUrl: string; + name: string; + startTimeSecs: number; + status: RunStatus; +} + +export interface MetricsValue { + name: MetricName; + trainingStep: number; + value: number; + wallTimeSecs: number; +} + +export interface SessionGroup { + name: string; + hparams: {[hparamName: string]: DiscreteHparamValue | number}; + sessions: Session[]; +} + +export interface BackendListSessionGroupResponse { + sessionGroups: SessionGroup[]; + totalSize: number; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/data_source/runs_data_source.ts b/saved_models/tensorboard/tensorboard/webapp/runs/data_source/runs_data_source.ts new file mode 100644 index 0000000000000000000000000000000000000000..636d0eb38e01dcbecdc9a4f45fc71d610e27ac61 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/data_source/runs_data_source.ts @@ -0,0 +1,62 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {Observable, of} from 'rxjs'; +import {map} from 'rxjs/operators'; + +import {TBHttpClient} from '../../webapp_data_source/tb_http_client'; + +import { + HparamsAndMetadata, + Run, + RunsDataSource, +} from './runs_data_source_types'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +type BackendGetRunsResponse = string[]; + +function runToRunId(run: string, experimentId: string) { + return `${experimentId}/${run}`; +} + +@Injectable() +export class TBRunsDataSource implements RunsDataSource { + constructor(private readonly http: TBHttpClient) {} + + fetchRuns(experimentId: string): Observable { + return this.http.get('data/runs').pipe( + map((runs) => { + return runs.map((run) => { + return { + id: runToRunId(run, experimentId), + name: run, + // Use a dummy startTime for now, until there is backend support. + startTime: 0, + }; + }); + }) + ); + } + + fetchHparamsMetadata(experimentId: string): Observable { + // Return a stub implementation. + return of({ + hparamSpecs: [], + metricSpecs: [], + runToHparamsAndMetrics: {}, + }); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/data_source/runs_data_source_module.ts b/saved_models/tensorboard/tensorboard/webapp/runs/data_source/runs_data_source_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..48ff68485bacbe2ad363d83e72e8bd073f3b4724 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/data_source/runs_data_source_module.ts @@ -0,0 +1,23 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; + +import {TBRunsDataSource} from './runs_data_source'; +import {RunsDataSource} from './runs_data_source_types'; + +@NgModule({ + providers: [{provide: RunsDataSource, useClass: TBRunsDataSource}], +}) +export class RunsDataSourceModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/data_source/runs_data_source_test.ts b/saved_models/tensorboard/tensorboard/webapp/runs/data_source/runs_data_source_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..806a3bd49609b465709c83245f8fcc5c4ed68a72 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/data_source/runs_data_source_test.ts @@ -0,0 +1,54 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {fakeAsync, flush, TestBed} from '@angular/core/testing'; + +import { + HttpTestingController, + TBHttpClientTestingModule, +} from '../../webapp_data_source/tb_http_client_testing'; + +import {TBRunsDataSource} from './runs_data_source'; +import {RunsDataSource} from './runs_data_source_types'; + +describe('TBRunsDataSource test', () => { + let httpMock: HttpTestingController; + let dataSource: RunsDataSource; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TBHttpClientTestingModule], + providers: [{provide: RunsDataSource, useClass: TBRunsDataSource}], + }).compileComponents(); + + httpMock = TestBed.inject(HttpTestingController); + dataSource = TestBed.inject(RunsDataSource); + }); + + describe('fetchRuns', () => { + it('fetches from "data/runs"', fakeAsync(() => { + const results = jasmine.createSpy(); + dataSource.fetchRuns('exp1').subscribe(results); + + httpMock.expectOne('data/runs').flush(['foo', 'bar']); + // Flush the promise in the microtask. + flush(); + + expect(results).toHaveBeenCalledWith([ + {id: 'exp1/foo', name: 'foo', startTime: 0}, + {id: 'exp1/bar', name: 'bar', startTime: 0}, + ]); + })); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/data_source/runs_data_source_types.ts b/saved_models/tensorboard/tensorboard/webapp/runs/data_source/runs_data_source_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..4add0d4746df74f71293908e42b95e73a40ec434 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/data_source/runs_data_source_types.ts @@ -0,0 +1,89 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {Observable} from 'rxjs'; + +import * as backendTypes from './runs_backend_types'; + +export { + BackendHparamsValueType as HparamsValueType, + DatasetType, + DiscreteHparamValue, + DiscreteHparamValues, +} from './runs_backend_types'; + +export interface HparamValue { + name: string; + value: backendTypes.DiscreteHparamValue | number; +} + +export interface MetricValue { + tag: string; + trainingStep: number; + value: number; +} + +export interface RunToHparamsAndMetrics { + [runName: string]: { + hparams: HparamValue[]; + metrics: MetricValue[]; + }; +} + +export enum DomainType { + DISCRETE, + INTERVAL, +} + +interface IntervalDomain { + type: DomainType.INTERVAL; + minValue: number; + maxValue: number; +} + +interface DiscreteDomain { + type: DomainType.DISCRETE; + values: backendTypes.DiscreteHparamValues; +} + +export type Domain = IntervalDomain | DiscreteDomain; +export interface HparamSpec + extends Omit { + domain: Domain; +} + +export interface MetricSpec extends Omit { + tag: string; +} + +export interface HparamsAndMetadata { + hparamSpecs: HparamSpec[]; + metricSpecs: MetricSpec[]; + runToHparamsAndMetrics: RunToHparamsAndMetrics; +} + +export interface Run { + id: string; + name: string; + startTime: number; +} + +@Injectable({providedIn: 'root'}) +export abstract class RunsDataSource { + abstract fetchRuns(experimentId: string): Observable; + abstract fetchHparamsMetadata( + experimentId: string + ): Observable; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/data_source/testing.ts b/saved_models/tensorboard/tensorboard/webapp/runs/data_source/testing.ts new file mode 100644 index 0000000000000000000000000000000000000000..c28ab7f526b1eda78ce1ed7b424140e85a668b40 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/data_source/testing.ts @@ -0,0 +1,73 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {of} from 'rxjs'; + +import {BackendHparamsValueType, DatasetType} from './runs_backend_types'; +import { + DomainType, + HparamsAndMetadata, + RunsDataSource, +} from './runs_data_source_types'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +export function buildHparamsAndMetadata( + override: Partial +): HparamsAndMetadata { + return { + hparamSpecs: [ + { + description: 'This is a hyper parameter', + displayName: 'Param 1', + domain: {type: DomainType.INTERVAL, minValue: 0, maxValue: 1}, + name: 'param', + type: BackendHparamsValueType.DATA_TYPE_UNSET, + }, + ], + metricSpecs: [ + { + tag: 'metric', + displayName: 'Metric', + description: 'This is a metric', + datasetType: DatasetType.DATASET_TRAINING, + }, + ], + runToHparamsAndMetrics: {}, + ...override, + }; +} + +@Injectable() +export class TestingRunsDataSource implements RunsDataSource { + fetchRuns(experimentId: string) { + return of([]); + } + + fetchHparamsMetadata(experimentId: string) { + return of({ + hparamSpecs: [], + metricSpecs: [], + runToHparamsAndMetrics: {}, + }); + } +} + +export function provideTestingRunsDataSource() { + return [ + TestingRunsDataSource, + {provide: RunsDataSource, useExisting: TestingRunsDataSource}, + ]; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/effects/BUILD b/saved_models/tensorboard/tensorboard/webapp/runs/effects/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..ce1d4fe38f08b1fcb9abcc2ad89a6f3b1ea72661 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/effects/BUILD @@ -0,0 +1,53 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "effects", + srcs = [ + "index.ts", + "runs_effects.ts", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/app_routing/actions", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/runs:types", + "//tensorboard/webapp/runs/actions", + "//tensorboard/webapp/runs/data_source", + "//tensorboard/webapp/types", + "@npm//@angular/core", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "effects_test", + testonly = True, + srcs = [ + "runs_effects_test.ts", + ], + deps = [ + ":effects", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/app_routing:testing", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/runs/actions", + "//tensorboard/webapp/runs/data_source", + "//tensorboard/webapp/runs/data_source:testing", + "//tensorboard/webapp/types", + "@npm//@ngrx/effects", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/effects/index.ts b/saved_models/tensorboard/tensorboard/webapp/runs/effects/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..fa09df9501f12d68556fbf68b70de97299bf49bf --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/effects/index.ts @@ -0,0 +1,15 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export * from './runs_effects'; diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/effects/runs_effects.ts b/saved_models/tensorboard/tensorboard/webapp/runs/effects/runs_effects.ts new file mode 100644 index 0000000000000000000000000000000000000000..33cb5cd8fd71e53d0c8a11113d3e6565e0ab36d1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/effects/runs_effects.ts @@ -0,0 +1,281 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {Actions, createEffect, ofType} from '@ngrx/effects'; +import {Store} from '@ngrx/store'; +import * as coreActions from '../../core/actions'; +import {DataLoadState, LoadState} from '../../types/data'; +import {forkJoin, merge, Observable, of, throwError} from 'rxjs'; +import { + catchError, + distinctUntilChanged, + filter, + map, + mergeMap, + take, + tap, + withLatestFrom, +} from 'rxjs/operators'; + +import {navigated} from '../../app_routing/actions'; +import {State} from '../../app_state'; +import { + getExperimentIdsFromRoute, + getRouteId, + getRuns, + getRunsLoadState, +} from '../../selectors'; +import * as actions from '../actions'; +import {Run} from '../data_source/runs_data_source_types'; +import {RunsDataSource} from '../data_source/runs_data_source_types'; +import {HparamsAndMetadata} from '../data_source/runs_data_source_types'; +import {ExperimentIdToRunsAndMetadata} from '../types'; + +/** @typehack */ import * as _typeHackNgrxEffects from '@ngrx/effects/effects'; + +/** + * Runs effect for fetching data from the backend. + */ +@Injectable() +export class RunsEffects { + /** + * Ensures runs are loaded when a run table is shown. + * + * @export + */ + loadRunsOnRunTableShown$ = createEffect( + () => + this.actions$.pipe( + ofType(actions.runTableShown), + mergeMap(({experimentIds}) => { + const experimentsToFetch$ = this.getExperimentsWithLoadState( + experimentIds, + (state) => { + return ( + state === DataLoadState.FAILED || + state === DataLoadState.NOT_LOADED + ); + } + ); + return experimentsToFetch$.pipe( + filter((experimentIds) => !!experimentIds.length), + mergeMap((experimentIdsToBeFetched) => { + return this.fetchAllRunsList( + experimentIds, + experimentIdsToBeFetched + ); + }) + ); + }) + ), + {dispatch: false} + ); + + constructor( + private readonly actions$: Actions, + private readonly store: Store, + private readonly runsDataSource: RunsDataSource + ) {} + + private getRunsListLoadState(experimentId: string): Observable { + return this.store.select(getRunsLoadState, {experimentId}).pipe(take(1)); + } + + private getExperimentsWithLoadState( + experimentIds: string[], + loadStateMatcher: (loadState: DataLoadState) => boolean + ) { + return forkJoin( + experimentIds.map((eid) => { + return this.getRunsListLoadState(eid); + }) + ).pipe( + map((loadStates) => { + return experimentIds.filter((unused, index) => { + return loadStateMatcher(loadStates[index].state); + }); + }) + ); + } + + private readonly experimentsWithStaleRunsOnRouteChange$ = this.actions$.pipe( + ofType(navigated), + withLatestFrom(this.store.select(getRouteId)), + distinctUntilChanged(([, prevRouteId], [, currRouteId]) => { + return prevRouteId === currRouteId; + }), + withLatestFrom(this.store.select(getExperimentIdsFromRoute)), + filter(([, experimentIds]) => !!experimentIds), + map(([, experimentIds]) => experimentIds!), + mergeMap((experimentIds) => { + return this.getExperimentsWithLoadState(experimentIds, (state) => { + return ( + state === DataLoadState.FAILED || state === DataLoadState.NOT_LOADED + ); + }).pipe( + map((experimentIdsToBeFetched) => { + return {experimentIds, experimentIdsToBeFetched}; + }) + ); + }) + ); + + private readonly experimentsWithStaleRunsOnReload$ = this.actions$.pipe( + ofType(coreActions.reload, coreActions.manualReload), + withLatestFrom(this.store.select(getExperimentIdsFromRoute)), + filter(([, experimentIds]) => !!experimentIds), + map(([, experimentIds]) => experimentIds!), + mergeMap((experimentIds) => { + return this.getExperimentsWithLoadState(experimentIds, (state) => { + return state !== DataLoadState.LOADING; + }).pipe( + map((experimentIdsToBeFetched) => { + return {experimentIds, experimentIdsToBeFetched}; + }) + ); + }) + ); + + /** + * Fetches runs on navigation or in-app reload. + * + * @export + */ + loadRunsOnNavigationOrReload$ = createEffect( + () => { + return merge( + this.experimentsWithStaleRunsOnRouteChange$, + this.experimentsWithStaleRunsOnReload$ + ).pipe( + mergeMap(({experimentIds, experimentIdsToBeFetched}) => { + return this.fetchAllRunsList(experimentIds, experimentIdsToBeFetched); + }) + ); + }, + {dispatch: false} + ); + + /** + * IMPORTANT: actions are dispatched even when there are no experiments to + * fetch. + * + * Observable organization: + * 1. dispatch requested action + * 2. make requests for experiments that require fetching while waiting for + * runs if already loading and return runs + * 3. combine the result from local + server where server data takaes + * precedence. + * 4. dispatch succeeded if successful. else, dispatch failed. + */ + private fetchAllRunsList( + experimentIds: string[], + experimentIdsToBeFetched: string[] + ): Observable { + return of({experimentIds, experimentIdsToBeFetched}).pipe( + tap(() => { + this.store.dispatch( + actions.fetchRunsRequested({ + experimentIds, + requestedExperimentIds: experimentIdsToBeFetched, + }) + ); + }), + mergeMap(() => { + const eidsToBeFetched = new Set(experimentIdsToBeFetched); + + const fetchOrGetRuns = experimentIds.map((experimentId) => { + if (eidsToBeFetched.has(experimentId)) { + return this.fetchRunsForExperiment(experimentId); + } + return this.maybeWaitForRunsAndGetRuns(experimentId); + }); + return forkJoin(fetchOrGetRuns); + }), + map((runsAndMedataList) => { + const newRunsAndMetadata = {} as ExperimentIdToRunsAndMetadata; + const runsForAllExperiments = []; + + for (const runsAndMedata of runsAndMedataList) { + runsForAllExperiments.push(...runsAndMedata.runs); + if (runsAndMedata.fromRemote) { + newRunsAndMetadata[runsAndMedata.experimentId] = { + runs: runsAndMedata.runs, + metadata: runsAndMedata.metadata, + }; + } + } + return {newRunsAndMetadata, runsForAllExperiments}; + }), + tap(({newRunsAndMetadata, runsForAllExperiments}) => { + this.store.dispatch( + actions.fetchRunsSucceeded({ + experimentIds, + newRunsAndMetadata, + runsForAllExperiments, + }) + ); + }), + catchError((error) => { + this.store.dispatch( + actions.fetchRunsFailed({ + experimentIds, + requestedExperimentIds: experimentIdsToBeFetched, + }) + ); + return of(null); + }), + map(() => null) + ); + } + + private maybeWaitForRunsAndGetRuns( + experimentId: string + ): Observable<{ + fromRemote: false; + experimentId: string; + runs: Run[]; + }> { + return this.store.select(getRunsLoadState, {experimentId}).pipe( + filter((loadState) => loadState.state !== DataLoadState.LOADING), + take(1), + mergeMap((loadState) => { + if (loadState.state === DataLoadState.FAILED) { + return throwError(new Error('Pending request failed')); + } + return of(loadState); + }), + withLatestFrom(this.store.select(getRuns, {experimentId})), + map(([, runs]) => ({fromRemote: false, experimentId, runs})) + ); + } + + private fetchRunsForExperiment( + experimentId: string + ): Observable<{ + fromRemote: true; + experimentId: string; + runs: Run[]; + metadata: HparamsAndMetadata; + }> { + return forkJoin([ + this.runsDataSource.fetchRuns(experimentId), + this.runsDataSource.fetchHparamsMetadata(experimentId), + ]).pipe( + map(([runs, metadata]) => { + return {fromRemote: true, experimentId, runs, metadata}; + }) + ); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/effects/runs_effects_test.ts b/saved_models/tensorboard/tensorboard/webapp/runs/effects/runs_effects_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..33fd4b6e750f65f4bc5d34708e4c9031f46e1ba3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/effects/runs_effects_test.ts @@ -0,0 +1,906 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed} from '@angular/core/testing'; +import {provideMockActions} from '@ngrx/effects/testing'; +import {Action, Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import * as coreActions from '../../core/actions'; +import {DataLoadState} from '../../types/data'; +import {of, ReplaySubject} from 'rxjs'; + +import {buildNavigatedAction} from '../../app_routing/testing'; +import {State} from '../../app_state'; +import { + getExperimentIdsFromRoute, + getRouteId, + getRuns, + getRunsLoadState, +} from '../../selectors'; +import {Run} from '../data_source/runs_data_source_types'; +import * as actions from '../actions'; +import {HparamsAndMetadata} from '../data_source/runs_data_source_types'; +import { + buildHparamsAndMetadata, + provideTestingRunsDataSource, + TestingRunsDataSource, +} from '../data_source/testing'; + +import {RunsEffects} from './index'; + +function createRun(override: Partial = {}) { + return { + id: '123', + name: 'foo', + startTime: 0, + ...override, + }; +} + +describe('runs_effects', () => { + let runsDataSource: TestingRunsDataSource; + let effects: RunsEffects; + let store: MockStore; + let action: ReplaySubject; + let fetchRunsSubjects: Array>; + let fetchHparamsMetadataSubjects: Array>; + let dispatchSpy: jasmine.Spy; + let actualActions: Action[]; + let selectSpy: jasmine.Spy; + + function flushFetchRuns(requestIndex: number, runs: Run[]) { + expect(fetchRunsSubjects.length).toBeGreaterThan(requestIndex); + fetchRunsSubjects[requestIndex].next(runs); + fetchRunsSubjects[requestIndex].complete(); + } + + function flushRunsError(requestIndex: number) { + expect(fetchRunsSubjects.length).toBeGreaterThan(requestIndex); + fetchRunsSubjects[requestIndex].error(new ErrorEvent('error')); + fetchRunsSubjects[requestIndex].complete(); + } + + function flushFetchHparamsMetadata( + requestIndex: number, + metadata: HparamsAndMetadata + ) { + expect(fetchHparamsMetadataSubjects.length).toBeGreaterThan(requestIndex); + fetchHparamsMetadataSubjects[requestIndex].next(metadata); + fetchHparamsMetadataSubjects[requestIndex].complete(); + } + + beforeEach(async () => { + action = new ReplaySubject(1); + + await TestBed.configureTestingModule({ + providers: [ + provideMockActions(action), + RunsEffects, + provideMockStore(), + provideTestingRunsDataSource(), + ], + }).compileComponents(); + + store = TestBed.inject>(Store) as MockStore; + selectSpy = spyOn(store, 'select').and.callThrough(); + + actualActions = []; + dispatchSpy = spyOn(store, 'dispatch').and.callFake((action: Action) => { + actualActions.push(action); + }); + effects = TestBed.inject(RunsEffects); + runsDataSource = TestBed.inject(TestingRunsDataSource); + fetchRunsSubjects = []; + spyOn(runsDataSource, 'fetchRuns').and.callFake(() => { + const subject = new ReplaySubject(1); + fetchRunsSubjects.push(subject); + return subject; + }); + + fetchHparamsMetadataSubjects = []; + spyOn(runsDataSource, 'fetchHparamsMetadata').and.callFake(() => { + const subject = new ReplaySubject(1); + fetchHparamsMetadataSubjects.push(subject); + return subject; + }); + + store.overrideSelector(getRunsLoadState, { + state: DataLoadState.NOT_LOADED, + lastLoadedTimeInMs: 0, + }); + store.overrideSelector(getExperimentIdsFromRoute, null); + store.overrideSelector(getRouteId, 'foo'); + }); + + describe('loadRunsOnRunTableShown', () => { + beforeEach(() => { + // Subscribes to effects.loadRunsOnRunTableShown$ change. Must subscribe + // after settings the action payload before. + effects.loadRunsOnRunTableShown$.subscribe(() => {}); + }); + + [ + { + runLoadState: DataLoadState.NOT_LOADED, + }, + { + runLoadState: DataLoadState.FAILED, + }, + ].forEach(({runLoadState}) => { + it( + 'fetches runs and hparams when runLoadState is ' + + DataLoadState[runLoadState], + () => { + store.overrideSelector(getRunsLoadState, { + state: runLoadState, + lastLoadedTimeInMs: 0, + }); + // Force store to emit change and make selector to fetch the latest + // data. + store.refreshState(); + + action.next(actions.runTableShown({experimentIds: ['a']})); + const createRuns = () => [ + createRun({ + id: 'a/runA', + name: 'runA', + }), + createRun({ + id: 'a/runA/runB', + name: 'runA/runB', + }), + ]; + flushFetchRuns(0, createRuns()); + flushFetchHparamsMetadata( + 0, + buildHparamsAndMetadata({ + runToHparamsAndMetrics: { + 'a/runA': {hparams: [{name: 'param', value: 1}], metrics: []}, + }, + }) + ); + + const expectedExperimentId = 'a'; + + expect(actualActions).toEqual([ + actions.fetchRunsRequested({ + experimentIds: [expectedExperimentId], + requestedExperimentIds: [expectedExperimentId], + }), + actions.fetchRunsSucceeded({ + experimentIds: ['a'], + runsForAllExperiments: createRuns(), + newRunsAndMetadata: { + [expectedExperimentId]: { + runs: createRuns(), + metadata: buildHparamsAndMetadata({ + runToHparamsAndMetrics: { + 'a/runA': { + hparams: [{name: 'param', value: 1}], + metrics: [], + }, + }, + }), + }, + }, + }), + ]); + } + ); + }); + + [ + { + runLoadState: DataLoadState.LOADED, + }, + { + runLoadState: DataLoadState.LOADING, + }, + ].forEach(({runLoadState}) => { + it(`does not fetch runs when runLoadState is ${DataLoadState[runLoadState]}`, () => { + store.overrideSelector(getRunsLoadState, { + state: runLoadState, + lastLoadedTimeInMs: 0, + }); + store.refreshState(); + + action.next(actions.runTableShown({experimentIds: ['a']})); + + expect(fetchRunsSubjects.length).toBe(0); + + expect(actualActions).toEqual([]); + }); + }); + + it('fires FAILED action when failed to fetch runs', () => { + action.next(actions.runTableShown({experimentIds: ['a']})); + const expectedExperimentId = 'a'; + + expect(fetchRunsSubjects.length).toBe(1); + flushRunsError(0); + + expect(actualActions).toEqual([ + actions.fetchRunsRequested({ + experimentIds: [expectedExperimentId], + requestedExperimentIds: [expectedExperimentId], + }), + actions.fetchRunsFailed({ + experimentIds: [expectedExperimentId], + requestedExperimentIds: [expectedExperimentId], + }), + ]); + }); + + it('fires FAILED action when failed to fetch hparams', () => { + action.next(actions.runTableShown({experimentIds: ['a']})); + const expectedExperimentId = 'a'; + + fetchHparamsMetadataSubjects[0].error(new ErrorEvent('error')); + fetchHparamsMetadataSubjects[0].complete(); + + expect(actualActions).toEqual([ + actions.fetchRunsRequested({ + experimentIds: [expectedExperimentId], + requestedExperimentIds: [expectedExperimentId], + }), + actions.fetchRunsFailed({ + experimentIds: [expectedExperimentId], + requestedExperimentIds: [expectedExperimentId], + }), + ]); + }); + + it('allows concurrent requests that arrive out of order', () => { + const firstExperimentId = 'a'; + const secondExperimentId = 'b'; + + action.next(actions.runTableShown({experimentIds: [firstExperimentId]})); + action.next(actions.runTableShown({experimentIds: [secondExperimentId]})); + + // fetchRuns are still pending. + expect(actualActions).toEqual([ + actions.fetchRunsRequested({ + experimentIds: [firstExperimentId], + requestedExperimentIds: [firstExperimentId], + }), + actions.fetchRunsRequested({ + experimentIds: [secondExperimentId], + requestedExperimentIds: [secondExperimentId], + }), + ]); + + const RUN_A = createRun({id: '0', name: 'runA'}); + const RUN_B = createRun({id: '1', name: 'runB'}); + const RUN_B_1 = createRun({id: '2', name: 'runB/1'}); + // fetchRuns arrived out of order. + expect(fetchRunsSubjects.length).toBe(2); + flushFetchRuns(1, [RUN_B, RUN_B_1]); + flushFetchHparamsMetadata(1, buildHparamsAndMetadata({})); + flushFetchRuns(0, [RUN_A]); + flushFetchHparamsMetadata(0, buildHparamsAndMetadata({})); + + expect(actualActions).toEqual([ + actions.fetchRunsRequested({ + experimentIds: [firstExperimentId], + requestedExperimentIds: [firstExperimentId], + }), + actions.fetchRunsRequested({ + experimentIds: [secondExperimentId], + requestedExperimentIds: [secondExperimentId], + }), + actions.fetchRunsSucceeded({ + experimentIds: ['b'], + runsForAllExperiments: [RUN_B, RUN_B_1], + newRunsAndMetadata: { + [secondExperimentId]: { + runs: [RUN_B, RUN_B_1], + metadata: buildHparamsAndMetadata({}), + }, + }, + }), + actions.fetchRunsSucceeded({ + experimentIds: ['a'], + runsForAllExperiments: [RUN_A], + newRunsAndMetadata: { + [firstExperimentId]: { + runs: [RUN_A], + metadata: buildHparamsAndMetadata({}), + }, + }, + }), + ]); + }); + }); + + describe('loadRunsOnNavigationOrReload', () => { + beforeEach(() => { + effects.loadRunsOnNavigationOrReload$.subscribe(() => {}); + }); + + [ + {specAction: buildNavigatedAction, specName: 'navigation'}, + {specAction: coreActions.manualReload, specName: 'manual reload'}, + {specAction: coreActions.reload, specName: 'auto reload'}, + ].forEach(({specAction, specName}) => { + describe(`on ${specName}`, () => { + it(`fetches runs and hparams based on expIds in the route`, () => { + store.overrideSelector(getRouteId, 'c,exp1:123,exp2:456'); + store.overrideSelector(getExperimentIdsFromRoute, ['123', '456']); + const createFooRuns = () => [ + createRun({ + id: 'foo/runA', + name: 'runA', + }), + ]; + const createBarRuns = () => [ + createRun({ + id: 'bar/runB', + name: 'runB', + }), + ]; + store.refreshState(); + + action.next(specAction()); + // Flush second request first to spice things up. + flushFetchRuns(1, createBarRuns()); + flushFetchHparamsMetadata(1, buildHparamsAndMetadata({})); + flushFetchRuns(0, createFooRuns()); + flushFetchHparamsMetadata(0, buildHparamsAndMetadata({})); + + expect(actualActions).toEqual([ + actions.fetchRunsRequested({ + experimentIds: ['123', '456'], + requestedExperimentIds: ['123', '456'], + }), + actions.fetchRunsSucceeded({ + experimentIds: ['123', '456'], + runsForAllExperiments: [...createFooRuns(), ...createBarRuns()], + newRunsAndMetadata: { + 456: { + runs: createBarRuns(), + metadata: buildHparamsAndMetadata({}), + }, + 123: { + runs: createFooRuns(), + metadata: buildHparamsAndMetadata({}), + }, + }, + }), + ]); + }); + + it('fetches only runs that are not loading', () => { + const createFooRuns = () => [ + createRun({ + id: 'foo/runA', + name: 'runA', + }), + ]; + const createBarRuns = () => [ + createRun({ + id: 'bar/runB', + name: 'runB', + }), + ]; + + const get123LoadState = new ReplaySubject(1); + get123LoadState.next({ + state: DataLoadState.LOADING, + lastLoadedTimeInMs: 0, + }); + selectSpy + .withArgs(getRuns, {experimentId: '123'}) + .and.returnValue(of(createFooRuns())); + selectSpy + .withArgs(getRuns, {experimentId: '456'}) + .and.returnValue(of(createBarRuns())); + selectSpy + .withArgs(getRunsLoadState, {experimentId: '123'}) + .and.returnValue(get123LoadState); + selectSpy + .withArgs(getRunsLoadState, {experimentId: '456'}) + .and.returnValue( + of({ + state: DataLoadState.NOT_LOADED, + lastLoadedTimeInMs: null, + }) + ); + store.overrideSelector(getRouteId, 'c,exp1:123,exp2:456'); + store.overrideSelector(getExperimentIdsFromRoute, ['123', '456']); + store.refreshState(); + + action.next(specAction()); + flushFetchRuns(0, createBarRuns()); + flushFetchHparamsMetadata(0, buildHparamsAndMetadata({})); + + expect(actualActions).toEqual([ + actions.fetchRunsRequested({ + experimentIds: ['123', '456'], + requestedExperimentIds: ['456'], + }), + ]); + + // Since the stream is waiting until the loading runs are + // resolved, we need to change the load state in order to get the + // `fetchRunsSucceeded`. + get123LoadState.next({ + state: DataLoadState.LOADED, + lastLoadedTimeInMs: 123, + }); + + expect(actualActions).toEqual([ + actions.fetchRunsRequested({ + experimentIds: ['123', '456'], + requestedExperimentIds: ['456'], + }), + actions.fetchRunsSucceeded({ + experimentIds: ['123', '456'], + runsForAllExperiments: [...createFooRuns(), ...createBarRuns()], + newRunsAndMetadata: { + 456: { + runs: createBarRuns(), + metadata: buildHparamsAndMetadata({}), + }, + }, + }), + ]); + }); + }); + }); + + describe('on navigation', () => { + it('fetches for runs if not loaded before', () => { + const createFooRuns = () => [ + createRun({ + id: 'foo/runA', + name: 'runA', + }), + ]; + const createBarRuns = () => [ + createRun({ + id: 'bar/runB', + name: 'runB', + }), + ]; + + selectSpy + .withArgs(getRuns, {experimentId: '123'}) + .and.returnValue(of(createFooRuns())); + selectSpy + .withArgs(getRuns, {experimentId: '456'}) + .and.returnValue(of(createBarRuns())); + selectSpy + .withArgs(getRunsLoadState, {experimentId: '123'}) + .and.returnValue( + of({ + state: DataLoadState.LOADED, + lastLoadedTimeInMs: 0, + }) + ); + selectSpy + .withArgs(getRunsLoadState, {experimentId: '456'}) + .and.returnValue( + of({ + state: DataLoadState.NOT_LOADED, + lastLoadedTimeInMs: null, + }) + ); + store.overrideSelector(getRouteId, 'c,exp1:123,exp2:456'); + store.overrideSelector(getExperimentIdsFromRoute, ['123', '456']); + store.refreshState(); + + action.next(buildNavigatedAction()); + flushFetchRuns(0, createBarRuns()); + flushFetchHparamsMetadata(0, buildHparamsAndMetadata({})); + + expect(actualActions).toEqual([ + actions.fetchRunsRequested({ + experimentIds: ['123', '456'], + requestedExperimentIds: ['456'], + }), + actions.fetchRunsSucceeded({ + experimentIds: ['123', '456'], + runsForAllExperiments: [...createFooRuns(), ...createBarRuns()], + newRunsAndMetadata: { + 456: { + runs: createBarRuns(), + metadata: buildHparamsAndMetadata({}), + }, + }, + }), + ]); + }); + + it('ignores a navigation to the same routeId (hash changes)', () => { + store.overrideSelector(getRouteId, 'e,123'); + store.overrideSelector(getExperimentIdsFromRoute, ['123']); + const createFooRuns = () => [ + createRun({ + id: 'foo/runA', + name: 'runA', + }), + ]; + + selectSpy + .withArgs(getRuns, {experimentId: '123'}) + .and.returnValue(of(createFooRuns())); + store.overrideSelector(getRunsLoadState, { + state: DataLoadState.LOADED, + lastLoadedTimeInMs: 0, + }); + store.refreshState(); + + // Only the first one goes through. + action.next(buildNavigatedAction()); + + expect(actualActions).toEqual([ + actions.fetchRunsRequested({ + experimentIds: ['123'], + requestedExperimentIds: [], + }), + actions.fetchRunsSucceeded({ + experimentIds: ['123'], + runsForAllExperiments: [...createFooRuns()], + newRunsAndMetadata: {}, + }), + ]); + + action.next(buildNavigatedAction()); + action.next(buildNavigatedAction()); + expect(actualActions.length).toBe(2); + }); + + it('dispatches fetchRunsSucceeded even if data is already loaded', () => { + const createFooRuns = () => [ + createRun({ + id: 'foo/runA', + name: 'runA', + }), + ]; + + selectSpy + .withArgs(getRuns, {experimentId: 'foo'}) + .and.returnValue(of(createFooRuns())); + selectSpy + .withArgs(getRunsLoadState, {experimentId: 'foo'}) + .and.returnValue( + of({ + state: DataLoadState.LOADED, + lastLoadedTimeInMs: 0, + }) + ); + store.overrideSelector(getExperimentIdsFromRoute, ['foo']); + store.refreshState(); + + action.next(buildNavigatedAction()); + + expect(actualActions).toEqual([ + actions.fetchRunsRequested({ + experimentIds: ['foo'], + requestedExperimentIds: [], + }), + actions.fetchRunsSucceeded({ + experimentIds: ['foo'], + runsForAllExperiments: [...createFooRuns()], + newRunsAndMetadata: {}, + }), + ]); + }); + }); + + it('does not hang because one run failed to fetch', () => { + store.overrideSelector(getRouteId, 'c,exp1:123,exp2:456'); + store.overrideSelector(getExperimentIdsFromRoute, ['123', '456']); + store.refreshState(); + + action.next(buildNavigatedAction()); + + flushRunsError(0); + flushFetchRuns(1, [createRun({id: 'bar/runB', name: 'runB'})]); + flushFetchHparamsMetadata(0, buildHparamsAndMetadata({})); + flushFetchHparamsMetadata(1, buildHparamsAndMetadata({})); + + expect(actualActions).toEqual([ + actions.fetchRunsRequested({ + experimentIds: ['123', '456'], + requestedExperimentIds: ['123', '456'], + }), + actions.fetchRunsFailed({ + experimentIds: ['123', '456'], + requestedExperimentIds: ['123', '456'], + }), + ]); + }); + + it('does not cancel request even if user navigates away', () => { + store.overrideSelector(getRouteId, 'e,123'); + store.overrideSelector(getExperimentIdsFromRoute, ['123']); + + const createFooRuns = () => [ + createRun({ + id: 'foo/runA', + name: 'runA', + }), + ]; + const createBarRuns = () => [ + createRun({ + id: 'bar/runB', + name: 'runB', + }), + ]; + store.refreshState(); + + action.next(buildNavigatedAction()); + + // Emulate navigation to a new experiment route. + store.overrideSelector(getRouteId, 'e,456'); + store.overrideSelector(getExperimentIdsFromRoute, ['456']); + // Force selectors to re-evaluate with a change in store. + store.refreshState(); + + action.next(buildNavigatedAction()); + + flushFetchRuns(1, createBarRuns()); + flushFetchHparamsMetadata(1, buildHparamsAndMetadata({})); + flushFetchRuns(0, createFooRuns()); + flushFetchHparamsMetadata(0, buildHparamsAndMetadata({})); + + expect(actualActions).toEqual([ + actions.fetchRunsRequested({ + experimentIds: ['123'], + requestedExperimentIds: ['123'], + }), + actions.fetchRunsRequested({ + experimentIds: ['456'], + requestedExperimentIds: ['456'], + }), + actions.fetchRunsSucceeded({ + experimentIds: ['456'], + runsForAllExperiments: createBarRuns(), + newRunsAndMetadata: { + 456: {runs: createBarRuns(), metadata: buildHparamsAndMetadata({})}, + }, + }), + actions.fetchRunsSucceeded({ + experimentIds: ['123'], + runsForAllExperiments: createFooRuns(), + newRunsAndMetadata: { + 123: {runs: createFooRuns(), metadata: buildHparamsAndMetadata({})}, + }, + }), + ]); + }); + + it('fires FAILED action when at least one runs fetch failed', () => { + store.overrideSelector(getRouteId, 'c,exp1:123,exp2:456'); + store.overrideSelector(getExperimentIdsFromRoute, ['123', '456']); + store.refreshState(); + + action.next(buildNavigatedAction()); + + flushRunsError(0); + flushFetchHparamsMetadata(0, buildHparamsAndMetadata({})); + flushFetchRuns(1, []); + flushFetchHparamsMetadata(1, buildHparamsAndMetadata({})); + + expect(actualActions).toEqual([ + actions.fetchRunsRequested({ + experimentIds: ['123', '456'], + requestedExperimentIds: ['123', '456'], + }), + actions.fetchRunsFailed({ + experimentIds: ['123', '456'], + requestedExperimentIds: ['123', '456'], + }), + ]); + }); + + it('fires FAILED action when at least one hparams fetch failed', () => { + store.overrideSelector(getRouteId, 'c,exp1:123,exp2:456'); + store.overrideSelector(getExperimentIdsFromRoute, ['123', '456']); + store.refreshState(); + + action.next(buildNavigatedAction()); + + flushFetchRuns(0, [createRun({id: 'foo/runA', name: 'runA'})]); + fetchHparamsMetadataSubjects[0].error(new ErrorEvent('error')); + fetchHparamsMetadataSubjects[0].complete(); + flushFetchRuns(1, []); + flushFetchHparamsMetadata(1, buildHparamsAndMetadata({})); + + expect(actualActions).toEqual([ + actions.fetchRunsRequested({ + experimentIds: ['123', '456'], + requestedExperimentIds: ['123', '456'], + }), + actions.fetchRunsFailed({ + experimentIds: ['123', '456'], + requestedExperimentIds: ['123', '456'], + }), + ]); + }); + + describe('multiple actions', () => { + it('waits for already loading runs so actions do not fire out of order', () => { + // When actions are fired out of order, then the list of runs can be + // stale and lead to incorrect run selection. + const createFooBeforeRuns = () => [ + createRun({ + id: 'foo/runA', + name: 'runA', + }), + ]; + const createFooAfterRuns = () => [ + createRun({ + id: 'foo/runA', + name: 'runA', + }), + createRun({ + id: 'foo/runB', + name: 'runB', + }), + ]; + const createBarRuns = () => [ + createRun({ + id: 'bar/runB', + name: 'runB', + }), + ]; + + const runsSubject = new ReplaySubject(1); + runsSubject.next(createFooBeforeRuns()); + const runsLoadStateSubject = new ReplaySubject(1); + runsLoadStateSubject.next({ + state: DataLoadState.NOT_LOADED, + lastLoadedTimeInMs: 0, + }); + + store.overrideSelector(getExperimentIdsFromRoute, ['foo']); + selectSpy + .withArgs(getRuns, {experimentId: 'foo'}) + .and.returnValue(runsSubject); + selectSpy + .withArgs(getRunsLoadState, {experimentId: 'foo'}) + .and.returnValue(runsLoadStateSubject); + selectSpy + .withArgs(getRuns, {experimentId: 'bar'}) + .and.returnValue(of(null)); + selectSpy + .withArgs(getRunsLoadState, {experimentId: 'bar'}) + .and.returnValue( + of({ + state: DataLoadState.NOT_LOADED, + lastLoadedTimeInMs: 0, + }) + ); + store.refreshState(); + + // User triggered reload on `/experiment/foo/` + action.next(coreActions.manualReload()); + + // User navigates to `/compare/a:foo,b:bar/` + store.overrideSelector(getExperimentIdsFromRoute, ['foo', 'bar']); + runsLoadStateSubject.next({ + state: DataLoadState.LOADING, + lastLoadedTimeInMs: 0, + }); + store.refreshState(); + action.next(buildNavigatedAction()); + + // Flush the request for `bar`'s runs. + flushFetchRuns(1, createBarRuns()); + flushFetchHparamsMetadata(1, buildHparamsAndMetadata({})); + + // Flush the request for `foo`'s runs. + flushFetchRuns(0, createFooAfterRuns()); + flushFetchHparamsMetadata(0, buildHparamsAndMetadata({})); + runsSubject.next(createFooAfterRuns()); + runsLoadStateSubject.next({ + state: DataLoadState.LOADED, + lastLoadedTimeInMs: 123, + }); + + expect(actualActions).toEqual([ + actions.fetchRunsRequested({ + experimentIds: ['foo'], + requestedExperimentIds: ['foo'], + }), + actions.fetchRunsRequested({ + experimentIds: ['foo', 'bar'], + requestedExperimentIds: ['bar'], + }), + actions.fetchRunsSucceeded({ + experimentIds: ['foo'], + runsForAllExperiments: [...createFooAfterRuns()], + newRunsAndMetadata: { + foo: { + runs: createFooAfterRuns(), + metadata: buildHparamsAndMetadata({}), + }, + }, + }), + actions.fetchRunsSucceeded({ + experimentIds: ['foo', 'bar'], + runsForAllExperiments: [ + ...createFooAfterRuns(), + ...createBarRuns(), + ], + newRunsAndMetadata: { + bar: { + runs: createBarRuns(), + metadata: buildHparamsAndMetadata({}), + }, + }, + }), + ]); + }); + + it('dispatches action when an already loading run fails to load', () => { + const createFooRuns = () => []; + + const runsSubject = new ReplaySubject(1); + runsSubject.next(createFooRuns()); + const runsLoadStateSubject = new ReplaySubject(1); + runsLoadStateSubject.next({ + state: DataLoadState.NOT_LOADED, + lastLoadedTimeInMs: 0, + }); + + store.overrideSelector(getExperimentIdsFromRoute, ['foo']); + selectSpy + .withArgs(getRuns, {experimentId: 'foo'}) + .and.returnValue(runsSubject); + selectSpy + .withArgs(getRunsLoadState, {experimentId: 'foo'}) + .and.returnValue(runsLoadStateSubject); + store.refreshState(); + + action.next(coreActions.reload()); + + runsLoadStateSubject.next({ + state: DataLoadState.LOADING, + lastLoadedTimeInMs: 0, + }); + store.refreshState(); + action.next(coreActions.manualReload()); + + flushRunsError(0); + flushFetchHparamsMetadata(0, buildHparamsAndMetadata({})); + runsLoadStateSubject.next({ + state: DataLoadState.FAILED, + lastLoadedTimeInMs: 0, + }); + + expect(actualActions).toEqual([ + actions.fetchRunsRequested({ + experimentIds: ['foo'], + requestedExperimentIds: ['foo'], + }), + actions.fetchRunsRequested({ + experimentIds: ['foo'], + requestedExperimentIds: [], + }), + actions.fetchRunsFailed({ + experimentIds: ['foo'], + requestedExperimentIds: ['foo'], + }), + actions.fetchRunsFailed({ + experimentIds: ['foo'], + requestedExperimentIds: [], + }), + ]); + }); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/runs_module.ts b/saved_models/tensorboard/tensorboard/webapp/runs/runs_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..721e3bc54453766b951599d073452a55a6c82636 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/runs_module.ts @@ -0,0 +1,52 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview Module for runs. + */ + +import {NgModule} from '@angular/core'; +import {EffectsModule} from '@ngrx/effects'; +import {StoreModule} from '@ngrx/store'; + +import {AlertActionModule} from '../alert/alert_action_module'; +import * as actions from './actions'; +import {RunsDataSourceModule} from './data_source/runs_data_source_module'; +import {RunsEffects} from './effects'; +import {reducers} from './store'; +import {RUNS_FEATURE_KEY} from './store/runs_types'; + +/** @typehack */ import * as _typeHackModels from '@ngrx/store/src/models'; +/** @typehack */ import * as _typeHackStore from '@ngrx/store/store'; + +export function alertActionProvider() { + return [ + { + actionCreator: actions.fetchRunsFailed, + alertFromAction: () => { + return {localizedMessage: 'Failed to fetch runs'}; + }, + }, + ]; +} + +@NgModule({ + imports: [ + StoreModule.forFeature(RUNS_FEATURE_KEY, reducers), + EffectsModule.forFeature([RunsEffects]), + RunsDataSourceModule, + AlertActionModule.registerAlertActions(alertActionProvider), + ], +}) +export class RunsModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/store/BUILD b/saved_models/tensorboard/tensorboard/webapp/runs/store/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..25b5e526ebc3295415a71c9c43d2088c47c7b0b3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/store/BUILD @@ -0,0 +1,100 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "store", + srcs = [ + "index.ts", + "runs_reducers.ts", + ], + deps = [ + ":types", + ":utils", + "//tensorboard/webapp/app_routing:route_contexted_reducer_helper", + "//tensorboard/webapp/runs:types", + "//tensorboard/webapp/runs/actions", + "//tensorboard/webapp/types", + "//tensorboard/webapp/types:ui", + "//tensorboard/webapp/util:colors", + "//tensorboard/webapp/util:ngrx", + "@npm//@ngrx/store", + ], +) + +tf_ts_library( + name = "utils", + srcs = ["utils.ts"], + visibility = [ + "//visibility:private", + ], +) + +tf_ts_library( + name = "selectors", + srcs = ["runs_selectors.ts"], + deps = [ + ":types", + ":utils", + "//tensorboard/webapp/runs:types", + "//tensorboard/webapp/types", + "//tensorboard/webapp/types:ui", + "@npm//@ngrx/store", + ], +) + +tf_ts_library( + name = "types", + srcs = [ + "runs_selectors_utils.ts", + "runs_types.ts", + ], + deps = [ + "//tensorboard/webapp/app_routing:route_contexted_reducer_helper", + "//tensorboard/webapp/runs:types", + "//tensorboard/webapp/runs/data_source", + "//tensorboard/webapp/types", + "//tensorboard/webapp/types:ui", + ], +) + +tf_ts_library( + name = "testing", + testonly = True, + srcs = ["testing.ts"], + deps = [ + ":types", + "//tensorboard/webapp/runs:types", + "//tensorboard/webapp/runs/data_source", + "//tensorboard/webapp/types:ui", + ], +) + +tf_ts_library( + name = "store_test", + testonly = True, + srcs = [ + "runs_reducers_test.ts", + "runs_selectors_test.ts", + "runs_selectors_utils_test.ts", + "utils_test.ts", + ], + deps = [ + ":selectors", + ":store", + ":testing", + ":types", + ":utils", + "//tensorboard/webapp/runs:types", + "//tensorboard/webapp/runs/actions", + "//tensorboard/webapp/runs/data_source", + "//tensorboard/webapp/runs/data_source:testing", + "//tensorboard/webapp/testing:lang", + "//tensorboard/webapp/types", + "//tensorboard/webapp/types:ui", + "//tensorboard/webapp/util:colors", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/store/index.ts b/saved_models/tensorboard/tensorboard/webapp/runs/store/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..20fb0d231c08431ee15cac824b5a4a17fb88a146 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/store/index.ts @@ -0,0 +1,15 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export * from './runs_reducers'; diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_reducers.ts b/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_reducers.ts new file mode 100644 index 0000000000000000000000000000000000000000..83737b188c8f3cc5e9658b4a824c9eb359ae2343 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_reducers.ts @@ -0,0 +1,489 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + Action, + ActionReducer, + combineReducers, + createReducer, + on, +} from '@ngrx/store'; +import {DataLoadState} from '../../types/data'; + +import {createRouteContextedState} from '../../app_routing/route_contexted_reducer_helper'; +import {SortDirection} from '../../types/ui'; +import * as colorUtils from '../../util/colors'; +import {composeReducers} from '../../util/ngrx'; +import * as runsActions from '../actions'; +import { + DiscreteFilter, + DiscreteHparamValue, + DomainType, + IntervalFilter, +} from '../types'; + +import { + MAX_NUM_RUNS_TO_ENABLE_BY_DEFAULT, + RunsDataState, + RunsState, + RunsUiRoutefulState, + RunsUiRoutelessState, + RunsUiState, +} from './runs_types'; +import {serializeExperimentIds} from './utils'; + +const dataInitialState: RunsDataState = { + runIds: {}, + runIdToExpId: {}, + runMetadata: {}, + runsLoadState: {}, + hparamAndMetricSpec: {}, + selectionState: new Map(), +}; + +const dataReducer: ActionReducer = createReducer( + dataInitialState, + on(runsActions.fetchRunsRequested, (state, action) => { + const nextRunsLoadState = {...state.runsLoadState}; + for (const eid of action.requestedExperimentIds) { + nextRunsLoadState[eid] = { + lastLoadedTimeInMs: null, + ...nextRunsLoadState[eid], + state: DataLoadState.LOADING, + }; + } + + return {...state, runsLoadState: nextRunsLoadState}; + }), + on(runsActions.fetchRunsSucceeded, (state, action) => { + const nextRunIds = {...state.runIds}; + const nextRunMetadata = {...state.runMetadata}; + const nextRunIdToExpId = {...state.runIdToExpId}; + const nextRunsLoadState = {...state.runsLoadState}; + const nextHparamAndMetricSpec = {...state.hparamAndMetricSpec}; + const nextSelectionState = new Map(state.selectionState); + + for (const eid of Object.keys(action.newRunsAndMetadata)) { + const {runs, metadata} = action.newRunsAndMetadata[eid]; + nextRunIds[eid] = runs.map(({id}) => id); + nextRunsLoadState[eid] = { + ...nextRunsLoadState[eid], + lastLoadedTimeInMs: Date.now(), + state: DataLoadState.LOADED, + }; + + for (const run of runs) { + const hparamAndMetrics = metadata.runToHparamsAndMetrics[run.id]; + nextRunMetadata[run.id] = { + ...run, + hparams: hparamAndMetrics ? hparamAndMetrics.hparams : null, + metrics: hparamAndMetrics ? hparamAndMetrics.metrics : null, + }; + nextRunIdToExpId[run.id] = eid; + } + + nextHparamAndMetricSpec[eid] = { + hparams: metadata.hparamSpecs, + metrics: metadata.metricSpecs, + }; + } + + const eidsBasedKey = serializeExperimentIds(action.experimentIds); + if (!nextSelectionState.has(eidsBasedKey)) { + const selectionMap = new Map(); + const runSelected = + action.runsForAllExperiments.length <= + MAX_NUM_RUNS_TO_ENABLE_BY_DEFAULT; + for (const run of action.runsForAllExperiments) { + selectionMap.set(run.id, runSelected); + } + nextSelectionState.set(eidsBasedKey, selectionMap); + } else { + // There could be new runs that were previously unseen. + // Populate their selection states. + const selectionMap = new Map(nextSelectionState.get(eidsBasedKey)!); + for (const run of action.runsForAllExperiments) { + if (!selectionMap.has(run.id)) { + selectionMap.set(run.id, false); + } + } + nextSelectionState.set(eidsBasedKey, selectionMap); + } + + return { + ...state, + runIds: nextRunIds, + runIdToExpId: nextRunIdToExpId, + runMetadata: nextRunMetadata, + runsLoadState: nextRunsLoadState, + hparamAndMetricSpec: nextHparamAndMetricSpec, + selectionState: nextSelectionState, + }; + }), + on(runsActions.fetchRunsFailed, (state, action) => { + const nextRunsLoadState = {...state.runsLoadState}; + for (const eid of action.requestedExperimentIds) { + nextRunsLoadState[eid] = { + lastLoadedTimeInMs: null, + ...nextRunsLoadState[eid], + state: DataLoadState.FAILED, + }; + } + return {...state, runsLoadState: nextRunsLoadState}; + }), + on(runsActions.runSelectionToggled, (state, {experimentIds, runId}) => { + const stateKey = serializeExperimentIds(experimentIds); + const nextSelectionState = new Map(state.selectionState); + const subSelectionState = new Map(nextSelectionState.get(stateKey) ?? []); + + subSelectionState.set(runId, !Boolean(subSelectionState.get(runId))); + nextSelectionState.set(stateKey, subSelectionState); + + return { + ...state, + selectionState: nextSelectionState, + }; + }), + on(runsActions.runPageSelectionToggled, (state, {experimentIds, runIds}) => { + const stateKey = serializeExperimentIds(experimentIds); + const nextSelectionState = new Map(state.selectionState); + const subSelectionState = new Map(nextSelectionState.get(stateKey) ?? []); + + const nextValue = !runIds.every((runId) => { + return Boolean(subSelectionState.get(runId)); + }); + for (const runId of runIds) { + subSelectionState.set(runId, nextValue); + } + + nextSelectionState.set(stateKey, subSelectionState); + + return { + ...state, + selectionState: nextSelectionState, + }; + }), + on(runsActions.runsSelectAll, (state, {experimentIds}) => { + const stateKey = serializeExperimentIds(experimentIds); + const nextSelectionState = new Map(state.selectionState); + const subSelectionState = new Map(nextSelectionState.get(stateKey) ?? []); + + for (const experimentId of experimentIds) { + for (const runId of state.runIds[experimentId]) { + subSelectionState.set(runId, true); + } + } + + nextSelectionState.set(stateKey, subSelectionState); + + return { + ...state, + selectionState: nextSelectionState, + }; + }) +); + +const { + initialState: uiInitialState, + reducers: uiRouteContextReducers, +} = createRouteContextedState( + { + paginationOption: { + pageIndex: 0, + pageSize: 10, + }, + regexFilter: '', + sort: { + column: null, + direction: SortDirection.UNSET, + }, + hparamFilters: new Map(), + metricFilters: new Map(), + runColorOverride: new Map(), + } as RunsUiRoutefulState, + { + hparamDefaultFilters: new Map(), + metricDefaultFilters: new Map(), + defaultRunColor: new Map(), + } as RunsUiRoutelessState +); + +const uiReducer: ActionReducer = createReducer( + uiInitialState, + on( + runsActions.runSelectorPaginationOptionChanged, + (state, {pageSize, pageIndex}) => { + return { + ...state, + paginationOption: { + pageSize, + pageIndex, + }, + }; + } + ), + on(runsActions.runSelectorRegexFilterChanged, (state, action) => { + return { + ...state, + regexFilter: action.regexString, + paginationOption: { + ...state.paginationOption, + // Reset the page index to 0 to emulate mat-table behavior. + pageIndex: 0, + }, + }; + }), + on(runsActions.runSelectorSortChanged, (state, action) => { + return { + ...state, + sort: { + column: action.column, + direction: action.direction, + }, + }; + }), + on(runsActions.fetchRunsSucceeded, (state, action) => { + const nextDefaultRunColor = new Map(state.defaultRunColor); + + action.runsForAllExperiments + .filter((run) => !Boolean(nextDefaultRunColor.get(run.id))) + .forEach((run) => { + nextDefaultRunColor.set(run.id, colorUtils.getNextChartColor()); + }); + + return { + ...state, + defaultRunColor: nextDefaultRunColor, + }; + }), + on(runsActions.runColorChanged, (state, {runId, newColor}) => { + const nextRunColorOverride = new Map(state.runColorOverride); + + nextRunColorOverride.set(runId, newColor); + + return {...state, runColorOverride: nextRunColorOverride}; + }), + on( + runsActions.runDiscreteHparamFilterChanged, + (state, {hparamName, filterValues, includeUndefined}) => { + const defaultFilter = state.hparamDefaultFilters.get(hparamName); + if (!defaultFilter) { + throw new Error(`Unknown hparams: ${hparamName}`); + } + if (defaultFilter.type === DomainType.INTERVAL) { + throw new Error( + `Invariant error: Hparams filter is INTERVAL but got a ' + + 'DISCRETE change` + ); + } + + const existingFilter = { + ...defaultFilter, + ...state.hparamFilters.get(hparamName), + } as DiscreteFilter; + const newHparamFilters = new Map(state.hparamFilters); + newHparamFilters.set(hparamName, { + ...existingFilter, + includeUndefined, + filterValues, + }); + return {...state, hparamFilters: newHparamFilters}; + } + ), + on(runsActions.runIntervalHparamFilterChanged, (state, action) => { + const { + hparamName, + filterLowerValue, + filterUpperValue, + includeUndefined, + } = action; + const defaultFilter = state.hparamDefaultFilters.get(hparamName); + if (!defaultFilter) { + throw new Error(`Unknown hparams: ${hparamName}`); + } + if (defaultFilter.type === DomainType.DISCRETE) { + throw new Error( + `Invariant error: Hparams filter is DISCRETE but got a ' + + 'INTERVAL change` + ); + } + + const existingFilter = { + ...defaultFilter, + ...state.hparamFilters.get(hparamName), + } as IntervalFilter; + const newHparamFilters = new Map(state.hparamFilters); + newHparamFilters.set(hparamName, { + ...existingFilter, + includeUndefined, + filterLowerValue, + filterUpperValue, + }); + return {...state, hparamFilters: newHparamFilters}; + }), + on(runsActions.runMetricFilterChanged, (state, change) => { + const { + metricTag, + filterLowerValue, + filterUpperValue, + includeUndefined, + } = change; + const defaultFilter = state.metricDefaultFilters.get(metricTag); + if (!defaultFilter) { + throw new Error(`Unknown metric: ${metricTag}`); + } + + const existingFilter = { + ...defaultFilter, + ...state.metricFilters.get(metricTag), + } as IntervalFilter; + const newMetricFilters = new Map(state.metricFilters); + newMetricFilters.set(metricTag, { + ...existingFilter, + filterLowerValue, + filterUpperValue, + includeUndefined, + }); + return {...state, metricFilters: newMetricFilters}; + }), + /** + * Sets default filter values. + * + * Implementation note: hparam values are defined as part of the spec but + * metrics are defined with the `runToHparamsAndMetrics`. We need to collect + * all the values for metrics, then compute the bound to create the default + * filter value. When the metric values are missing, we set the bound to (0, + * 1). + */ + on(runsActions.fetchRunsSucceeded, (state, action) => { + if (Object.keys(action.newRunsAndMetadata).length === 0) { + return state; + } + + const newHparamFilters = new Map(); + const newMetricFilters = new Map(); + + const discreteHparams = new Map>(); + const intervalHparams = new Map< + string, + {minValue: number; maxValue: number} + >(); + // Arbitrary ordered collection of metric values collected across + // experiments and runs to compute extents of metrics. + const metricValueMinAndMax = new Map(); + const metricTags = new Set(); + + for (const eid of Object.keys(action.newRunsAndMetadata)) { + const {runs, metadata} = action.newRunsAndMetadata[eid]; + // Tabulate all the metric values from runs. + for (const run of runs) { + const hparamAndMetrics = metadata.runToHparamsAndMetrics[run.id]; + if (!hparamAndMetrics) { + continue; + } + for (const metric of hparamAndMetrics.metrics) { + const minAndMax = metricValueMinAndMax.get(metric.tag); + metricValueMinAndMax.set(metric.tag, { + min: minAndMax + ? Math.min(minAndMax.min, metric.value) + : metric.value, + max: minAndMax + ? Math.max(minAndMax.max, metric.value) + : metric.value, + }); + } + } + + // Record and combine all hparam specs (multiple experiments can + // have hparams of same name but disjoint set of domain). + for (const {name, domain} of metadata.hparamSpecs) { + if (domain.type === DomainType.DISCRETE) { + const values = discreteHparams.get(name) || new Set(); + for (const value of domain.values) { + values.add(value); + } + discreteHparams.set(name, values); + } else { + const existing = intervalHparams.get(name); + intervalHparams.set(name, { + minValue: existing + ? Math.min(domain.minValue, existing.minValue) + : domain.minValue, + maxValue: existing + ? Math.max(domain.maxValue, existing.maxValue) + : domain.maxValue, + }); + } + } + + for (const metricSpec of metadata.metricSpecs) { + metricTags.add(metricSpec.tag); + } + } + + for (const [name, values] of discreteHparams) { + newHparamFilters.set(name, { + type: DomainType.DISCRETE, + includeUndefined: true, + possibleValues: [...values], + filterValues: [...values], + }); + } + + for (const [name, {minValue, maxValue}] of intervalHparams) { + newHparamFilters.set(name, { + type: DomainType.INTERVAL, + includeUndefined: true, + minValue, + maxValue, + filterLowerValue: minValue, + filterUpperValue: maxValue, + }); + } + + for (const metricTag of metricTags) { + const minAndMax = metricValueMinAndMax.get(metricTag); + + newMetricFilters.set(metricTag, { + type: DomainType.INTERVAL, + includeUndefined: true, + minValue: minAndMax?.min ?? 0, + maxValue: minAndMax?.max ?? 0, + filterLowerValue: minAndMax?.min ?? 0, + filterUpperValue: minAndMax?.max ?? 0, + }); + } + + return { + ...state, + hparamDefaultFilters: newHparamFilters, + metricDefaultFilters: newMetricFilters, + }; + }) +); + +const routeStatefulUiReducers = composeReducers( + uiReducer, + uiRouteContextReducers +); + +/** + * Reducers for the experiments. + */ +export function reducers(state: RunsState, action: Action) { + return combineReducers({ + data: dataReducer, + ui: routeStatefulUiReducers, + })(state, action); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_reducers_test.ts b/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_reducers_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..a00d4187f23ab963c6c3bad63cc8c6355f925900 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_reducers_test.ts @@ -0,0 +1,1247 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {DataLoadState} from '../../types/data'; + +import {deepFreeze} from '../../testing/lang'; +import {SortDirection} from '../../types/ui'; +import * as colorUtils from '../../util/colors'; +import * as actions from '../actions'; +import {buildHparamsAndMetadata} from '../data_source/testing'; +import {DiscreteFilter, IntervalFilter} from '../types'; + +import * as runsReducers from './runs_reducers'; +import {DomainType, MAX_NUM_RUNS_TO_ENABLE_BY_DEFAULT} from './runs_types'; +import { + buildDiscreteFilter, + buildHparamSpec, + buildIntervalFilter, + buildMetricSpec, + buildRun, + buildRunsState, +} from './testing'; + +describe('runs_reducers', () => { + [ + { + action: actions.fetchRunsRequested, + actionName: 'fetchRunsRequested', + expectedStatus: DataLoadState.LOADING, + }, + { + action: actions.fetchRunsFailed, + actionName: 'fetchRunsFailed', + expectedStatus: DataLoadState.FAILED, + }, + ].forEach((metaSpec) => { + describe(metaSpec.actionName, () => { + it(`sets the loadState as ${ + DataLoadState[metaSpec.expectedStatus] + }`, () => { + const state = buildRunsState({ + runsLoadState: { + id1: {state: DataLoadState.LOADED, lastLoadedTimeInMs: null}, + id3: {state: DataLoadState.LOADED, lastLoadedTimeInMs: null}, + }, + }); + const nextState = runsReducers.reducers( + state, + metaSpec.action({ + experimentIds: ['id1', 'id2', 'id3'], + requestedExperimentIds: ['id1', 'id2'], + }) + ); + + expect(nextState.data.runsLoadState['id1']).toEqual({ + lastLoadedTimeInMs: null, + state: metaSpec.expectedStatus, + }); + expect(nextState.data.runsLoadState['id2']).toEqual({ + lastLoadedTimeInMs: null, + state: metaSpec.expectedStatus, + }); + expect(nextState.data.runsLoadState['id3']).toEqual({ + lastLoadedTimeInMs: null, + state: DataLoadState.LOADED, + }); + }); + + it('keeps lastLoadedTimeInMs and runs the same', () => { + const state = deepFreeze( + buildRunsState({ + runIds: { + id1: ['Foo', 'Foo/bar'], + }, + runMetadata: { + Foo: buildRun({id: 'Foo'}), + 'Foo/bar': buildRun({id: 'Foo/bar'}), + }, + runsLoadState: { + id1: {state: DataLoadState.LOADED, lastLoadedTimeInMs: 12345}, + }, + }) + ); + const nextState = runsReducers.reducers( + state, + metaSpec.action({ + experimentIds: ['id1'], + requestedExperimentIds: ['id1'], + }) + ); + + expect(nextState.data.runIds).toBe(state.data.runIds); + expect(nextState.data.runMetadata).toBe(state.data.runMetadata); + expect(nextState.data.runsLoadState['id1'].lastLoadedTimeInMs).toEqual( + 12345 + ); + }); + + it('adds to new key if existing state did not have it', () => { + const state = deepFreeze( + buildRunsState({ + runsLoadState: { + id1: {state: DataLoadState.LOADED, lastLoadedTimeInMs: 12345}, + }, + }) + ); + const nextState = runsReducers.reducers( + state, + metaSpec.action({ + experimentIds: ['id2'], + requestedExperimentIds: ['id2'], + }) + ); + + expect(nextState.data.runsLoadState['id1'].state).toEqual( + DataLoadState.LOADED + ); + expect(nextState.data.runsLoadState['id2'].state).toEqual( + metaSpec.expectedStatus + ); + }); + }); + }); + + describe('fetchRunsSucceeded', () => { + it('updates experiment and loadState', () => { + // Zone.js installs mock clock and gets in the way of Jasmine mockClock. + spyOn(Date, 'now').and.returnValue(12345); + const state = buildRunsState({ + runIds: {eid1: []}, + runIdToExpId: {rid5: 'eid5'}, + runMetadata: {}, + runsLoadState: { + eid1: {state: DataLoadState.LOADING, lastLoadedTimeInMs: null}, + }, + }); + const action = actions.fetchRunsSucceeded({ + experimentIds: [], + runsForAllExperiments: [], + newRunsAndMetadata: { + eid1: { + runs: [ + {id: 'rid1', name: 'Run 1', startTime: 1}, + {id: 'rid2', name: 'Run 2', startTime: 1}, + ], + metadata: buildHparamsAndMetadata({ + runToHparamsAndMetrics: { + rid1: {hparams: [{name: 'foo', value: 'bar'}], metrics: []}, + }, + }), + }, + }, + }); + + const nextState = runsReducers.reducers(state, action); + + expect(nextState.data.runIds).toEqual({eid1: ['rid1', 'rid2']}); + expect(nextState.data.runIdToExpId).toEqual({ + rid1: 'eid1', + rid2: 'eid1', + rid5: 'eid5', + }); + expect(nextState.data.runMetadata).toEqual({ + rid1: { + id: 'rid1', + name: 'Run 1', + startTime: 1, + hparams: [{name: 'foo', value: 'bar'}], + metrics: [], + }, + rid2: { + id: 'rid2', + name: 'Run 2', + startTime: 1, + hparams: null, + metrics: null, + }, + }); + expect(nextState.data.runsLoadState).toEqual({ + eid1: {state: DataLoadState.LOADED, lastLoadedTimeInMs: 12345}, + }); + }); + + it('assigns default color to new runs', () => { + spyOn(colorUtils, 'getNextChartColor').and.returnValues('#ccc', '#ddd'); + const state = buildRunsState(undefined, { + defaultRunColor: new Map([ + ['foo', '#aaa'], + ['bar', '#bbb'], + ]), + }); + const action = actions.fetchRunsSucceeded({ + experimentIds: ['eid1'], + runsForAllExperiments: [ + buildRun({id: 'baz'}), + buildRun({id: 'foo'}), + buildRun({id: 'qaz'}), + ], + newRunsAndMetadata: { + eid1: { + runs: [ + buildRun({id: 'baz'}), + buildRun({id: 'foo'}), + buildRun({id: 'qaz'}), + ], + metadata: buildHparamsAndMetadata({}), + }, + }, + }); + + const nextState = runsReducers.reducers(state, action); + + expect(nextState.ui.defaultRunColor).toEqual( + new Map([ + ['foo', '#aaa'], + ['bar', '#bbb'], + ['baz', '#ccc'], + ['qaz', '#ddd'], + ]) + ); + }); + + it('selects runs if num runs are less than N', () => { + const state = buildRunsState({selectionState: new Map()}); + + const action = actions.fetchRunsSucceeded({ + experimentIds: ['id1'], + runsForAllExperiments: [ + buildRun({id: 'baz'}), + buildRun({id: 'foo'}), + buildRun({id: 'qaz'}), + ], + newRunsAndMetadata: { + id1: { + runs: [ + buildRun({id: 'baz'}), + buildRun({id: 'foo'}), + buildRun({id: 'qaz'}), + ], + metadata: buildHparamsAndMetadata({}), + }, + }, + }); + const nextState = runsReducers.reducers(state, action); + + expect(action.runsForAllExperiments.length).toBeLessThanOrEqual( + MAX_NUM_RUNS_TO_ENABLE_BY_DEFAULT + ); + expect(nextState.data.selectionState).toEqual( + new Map([ + [ + '["id1"]', + new Map([ + ['baz', true], + ['foo', true], + ['qaz', true], + ]), + ], + ]) + ); + }); + + it('sets all selectionState to false if num runs exceeded N', () => { + const state = buildRunsState({selectionState: new Map()}); + + const action = actions.fetchRunsSucceeded({ + experimentIds: ['b'], + runsForAllExperiments: [ + ...new Array(MAX_NUM_RUNS_TO_ENABLE_BY_DEFAULT * 1.5), + ].map((unused, index) => { + return buildRun({id: `id1_${index}`}); + }), + newRunsAndMetadata: { + b: { + runs: [...new Array(MAX_NUM_RUNS_TO_ENABLE_BY_DEFAULT * 1.5)].map( + (unused, index) => { + return buildRun({id: `id1_${index}`}); + } + ), + metadata: buildHparamsAndMetadata({}), + }, + }, + }); + const nextState = runsReducers.reducers(state, action); + + Array.from(nextState.data.selectionState.get('["b"]')!.values()).forEach( + (value) => { + expect(value).toBe(false); + } + ); + }); + + it('sets hparam and metric specs on experiment level', () => { + const state = buildRunsState({ + hparamAndMetricSpec: {}, + }); + + const action = actions.fetchRunsSucceeded({ + experimentIds: [], + runsForAllExperiments: [], + newRunsAndMetadata: { + eid1: { + runs: [], + metadata: buildHparamsAndMetadata({ + hparamSpecs: [buildHparamSpec({name: 'hparamName'})], + metricSpecs: [], + }), + }, + }, + }); + const nextState = runsReducers.reducers(state, action); + + expect(nextState.data.hparamAndMetricSpec).toEqual({ + eid1: { + hparams: [buildHparamSpec({name: 'hparamName'})], + metrics: [], + }, + }); + }); + + it('sets hparam and metric filter on ui state', () => { + const state = buildRunsState(undefined, { + hparamFilters: new Map(), + metricFilters: new Map(), + }); + + const action = actions.fetchRunsSucceeded({ + experimentIds: [], + runsForAllExperiments: [], + newRunsAndMetadata: { + eid1: { + runs: [ + buildRun({id: 'r1'}), + buildRun({id: 'r2'}), + buildRun({id: 'r3'}), + ], + metadata: buildHparamsAndMetadata({ + runToHparamsAndMetrics: { + r1: { + hparams: [], + metrics: [{tag: 'm1', trainingStep: 1, value: 1}], + }, + r2: { + hparams: [], + metrics: [{tag: 'm1', trainingStep: 1, value: 0.1}], + }, + r3: { + hparams: [], + metrics: [{tag: 'm2', trainingStep: 1, value: 100}], + }, + }, + hparamSpecs: [ + buildHparamSpec({ + name: 'h1', + domain: {type: DomainType.INTERVAL, minValue: 0, maxValue: 1}, + }), + buildHparamSpec({ + name: 'h2', + domain: { + type: DomainType.DISCRETE, + values: ['a', 'b', 'c'], + }, + }), + ], + metricSpecs: [ + buildMetricSpec({tag: 'm1'}), + buildMetricSpec({tag: 'm2'}), + buildMetricSpec({tag: 'm3'}), + ], + }), + }, + }, + }); + const nextState = runsReducers.reducers(state, action); + + expect(nextState.ui.hparamDefaultFilters).toEqual( + new Map([ + [ + 'h1', + buildIntervalFilter({ + includeUndefined: true, + minValue: 0, + maxValue: 1, + filterLowerValue: 0, + filterUpperValue: 1, + }), + ], + [ + 'h2', + buildDiscreteFilter({ + includeUndefined: true, + possibleValues: ['a', 'b', 'c'], + filterValues: ['a', 'b', 'c'], + }), + ], + ]) + ); + expect(nextState.ui.metricDefaultFilters).toEqual( + new Map([ + [ + 'm1', + buildIntervalFilter({ + includeUndefined: true, + minValue: 0.1, + maxValue: 1, + filterLowerValue: 0.1, + filterUpperValue: 1, + }), + ], + [ + 'm2', + buildIntervalFilter({ + includeUndefined: true, + minValue: 100, + maxValue: 100, + filterLowerValue: 100, + filterUpperValue: 100, + }), + ], + [ + 'm3', + buildIntervalFilter({ + includeUndefined: true, + minValue: 0, + maxValue: 0, + filterLowerValue: 0, + filterUpperValue: 0, + }), + ], + ]) + ); + }); + + it('combines hparam and metrics across experiments', () => { + const state = buildRunsState(undefined, { + hparamFilters: new Map(), + metricFilters: new Map(), + }); + + const action = actions.fetchRunsSucceeded({ + experimentIds: [], + runsForAllExperiments: [], + newRunsAndMetadata: { + eid1: { + runs: [buildRun({id: 'r1'})], + metadata: buildHparamsAndMetadata({ + runToHparamsAndMetrics: { + r1: { + hparams: [], + metrics: [{tag: 'm1', trainingStep: 0, value: 1}], + }, + }, + hparamSpecs: [ + buildHparamSpec({ + name: 'h1', + domain: {type: DomainType.INTERVAL, minValue: 5, maxValue: 9}, + }), + buildHparamSpec({ + name: 'h2', + domain: { + type: DomainType.DISCRETE, + values: ['a', 'b', 'c'], + }, + }), + ], + metricSpecs: [ + buildMetricSpec({tag: 'm1'}), + buildMetricSpec({tag: 'm2'}), + ], + }), + }, + eid2: { + runs: [buildRun({id: 'r2'})], + metadata: buildHparamsAndMetadata({ + runToHparamsAndMetrics: { + r2: { + hparams: [], + metrics: [ + {tag: 'm1', trainingStep: 1, value: 5}, + {tag: 'm2', trainingStep: 1, value: 2}, + ], + }, + }, + hparamSpecs: [ + buildHparamSpec({ + name: 'h1', + domain: { + type: DomainType.INTERVAL, + minValue: 0, + maxValue: 100, + }, + }), + buildHparamSpec({ + name: 'h2', + domain: { + type: DomainType.DISCRETE, + values: ['c', 'd'], + }, + }), + ], + metricSpecs: [ + buildMetricSpec({tag: 'm1'}), + buildMetricSpec({tag: 'm2'}), + buildMetricSpec({tag: 'm3'}), + ], + }), + }, + }, + }); + const nextState = runsReducers.reducers(state, action); + + expect(nextState.ui.hparamDefaultFilters).toEqual( + new Map([ + [ + 'h1', + buildIntervalFilter({ + includeUndefined: true, + minValue: 0, + maxValue: 100, + filterLowerValue: 0, + filterUpperValue: 100, + }), + ], + [ + 'h2', + buildDiscreteFilter({ + includeUndefined: true, + possibleValues: ['a', 'b', 'c', 'd'], + filterValues: ['a', 'b', 'c', 'd'], + }), + ], + ]) + ); + expect(nextState.ui.metricDefaultFilters).toEqual( + new Map([ + [ + 'm1', + buildIntervalFilter({ + includeUndefined: true, + minValue: 1, + maxValue: 5, + filterLowerValue: 1, + filterUpperValue: 5, + }), + ], + [ + 'm2', + buildIntervalFilter({ + includeUndefined: true, + minValue: 2, + maxValue: 2, + filterLowerValue: 2, + filterUpperValue: 2, + }), + ], + [ + 'm3', + buildIntervalFilter({ + includeUndefined: true, + minValue: 0, + maxValue: 0, + filterLowerValue: 0, + filterUpperValue: 0, + }), + ], + ]) + ); + }); + + it('does not overwrite the filter information when result in empty', () => { + const state = buildRunsState(undefined, { + hparamDefaultFilters: new Map([ + [ + 'conv_layers', + buildDiscreteFilter({ + includeUndefined: true, + possibleValues: ['a'], + filterValues: ['a'], + }), + ], + ]), + metricFilters: new Map(), + }); + + const action = actions.fetchRunsSucceeded({ + experimentIds: [], + runsForAllExperiments: [], + newRunsAndMetadata: {}, + }); + const nextState = runsReducers.reducers(state, action); + + expect(nextState.ui.hparamDefaultFilters).toEqual( + new Map([ + [ + 'conv_layers', + buildDiscreteFilter({ + includeUndefined: true, + possibleValues: ['a'], + filterValues: ['a'], + }), + ], + ]) + ); + }); + }); + + describe('runSelectionToggled', () => { + it('toggles the run selection state for a runId', () => { + const state = buildRunsState({ + runIds: {eid1: ['r1', 'r2']}, + selectionState: new Map([['["eid1"]', new Map([['foo', true]])]]), + }); + + const nextState = runsReducers.reducers( + state, + actions.runSelectionToggled({ + experimentIds: ['eid1'], + runId: 'foo', + }) + ); + + expect(nextState.data.selectionState).toEqual( + new Map([['["eid1"]', new Map([['foo', false]])]]) + ); + }); + + it('sets true for previously un-set runId', () => { + const state = buildRunsState({ + runIds: {eid1: ['r1', 'r2']}, + selectionState: new Map([['["eid1"]', new Map([['foo', true]])]]), + }); + + const nextState = runsReducers.reducers( + state, + actions.runSelectionToggled({ + experimentIds: ['eid1'], + runId: 'bar', + }) + ); + + expect(nextState.data.selectionState).toEqual( + new Map([ + [ + '["eid1"]', + new Map([ + ['foo', true], + ['bar', true], + ]), + ], + ]) + ); + }); + }); + + describe('runPageSelectionToggled', () => { + it('toggles all items to on when they were all previously off', () => { + const state = buildRunsState({ + selectionState: new Map([['["eid"]', new Map([['foo', false]])]]), + }); + + const nextState = runsReducers.reducers( + state, + actions.runPageSelectionToggled({ + experimentIds: ['eid'], + runIds: ['foo', 'bar'], + }) + ); + + expect(nextState.data.selectionState).toEqual( + new Map([ + [ + '["eid"]', + new Map([ + ['foo', true], + ['bar', true], + ]), + ], + ]) + ); + }); + + it('toggles all items to on when they were partially off', () => { + const state = buildRunsState({ + selectionState: new Map([['["eid"]', new Map([['foo', true]])]]), + }); + + const nextState = runsReducers.reducers( + state, + actions.runPageSelectionToggled({ + experimentIds: ['eid'], + runIds: ['foo', 'bar'], + }) + ); + + expect(nextState.data.selectionState).toEqual( + new Map([ + [ + '["eid"]', + new Map([ + ['foo', true], + ['bar', true], + ]), + ], + ]) + ); + }); + + it( + 'toggles all items to on when they were partially off (bar explicitly' + + 'off)', + () => { + const state = buildRunsState({ + selectionState: new Map([ + [ + '["eid"]', + new Map([ + ['foo', true], + ['bar', false], + ]), + ], + ]), + }); + + const nextState = runsReducers.reducers( + state, + actions.runPageSelectionToggled({ + experimentIds: ['eid'], + runIds: ['foo', 'bar'], + }) + ); + + expect(nextState.data.selectionState).toEqual( + new Map([ + [ + '["eid"]', + new Map([ + ['foo', true], + ['bar', true], + ]), + ], + ]) + ); + } + ); + + it('deselects all items if they were on', () => { + const state = buildRunsState({ + selectionState: new Map([ + [ + '["eid"]', + new Map([ + ['foo', true], + ['bar', true], + ]), + ], + ]), + }); + + const nextState = runsReducers.reducers( + state, + actions.runPageSelectionToggled({ + experimentIds: ['eid'], + runIds: ['foo', 'bar'], + }) + ); + + expect(nextState.data.selectionState).toEqual( + new Map([ + [ + '["eid"]', + new Map([ + ['foo', false], + ['bar', false], + ]), + ], + ]) + ); + }); + }); + + describe('runsSelectAll', () => { + it('selects all runs', () => { + const state = buildRunsState({ + runIds: { + e1: ['r1', 'r2'], + e2: ['r3'], + }, + selectionState: new Map([['["e1","e2"]', new Map([['r1', false]])]]), + }); + + const nextState = runsReducers.reducers( + state, + actions.runsSelectAll({ + experimentIds: ['e1', 'e2'], + }) + ); + + expect(nextState.data.selectionState).toEqual( + new Map([ + [ + '["e1","e2"]', + new Map([ + ['r1', true], + ['r2', true], + ['r3', true], + ]), + ], + ]) + ); + }); + }); + + describe('runSelectorPaginationOptionChanged', () => { + it('updates the pagination option', () => { + const state = buildRunsState(undefined, { + paginationOption: { + pageSize: 20, + pageIndex: 2, + }, + }); + + const nextState = runsReducers.reducers( + state, + actions.runSelectorPaginationOptionChanged({ + pageSize: 10, + pageIndex: 0, + }) + ); + + expect(nextState.ui.paginationOption).toEqual({ + pageSize: 10, + pageIndex: 0, + }); + }); + }); + + describe('runSelectorRegexFilterChanged', () => { + it('updates the regex filter', () => { + const state = buildRunsState(undefined, { + regexFilter: 'foo', + }); + + const nextState = runsReducers.reducers( + state, + actions.runSelectorRegexFilterChanged({regexString: 'foo rocks'}) + ); + + expect(nextState.ui.regexFilter).toBe('foo rocks'); + }); + + it('resets the pagination index', () => { + const state = buildRunsState(undefined, { + regexFilter: 'foo', + paginationOption: { + pageSize: 10, + pageIndex: 100, + }, + }); + + const nextState = runsReducers.reducers( + state, + actions.runSelectorRegexFilterChanged({regexString: 'bar'}) + ); + + expect(nextState.ui.paginationOption.pageIndex).toBe(0); + }); + }); + + describe('runSelectorSortChanged', () => { + it('updates the sort changed', () => { + const state = buildRunsState(undefined, { + sort: { + column: null, + direction: SortDirection.UNSET, + }, + }); + + const nextState = runsReducers.reducers( + state, + actions.runSelectorSortChanged({ + column: 'experiment_name', + direction: SortDirection.ASC, + }) + ); + + expect(nextState.ui.sort).toEqual({ + column: 'experiment_name', + direction: SortDirection.ASC, + }); + }); + }); + + describe('runColorChanged', () => { + it('updates color for the run', () => { + const state = buildRunsState(undefined, { + runColorOverride: new Map([['foo', '#aaa']]), + }); + + const nextState = runsReducers.reducers( + state, + actions.runColorChanged({ + runId: 'foo', + newColor: '#000', + }) + ); + + expect(nextState.ui.runColorOverride).toEqual(new Map([['foo', '#000']])); + }); + + it('sets run color for a value that did not exist', () => { + const state = buildRunsState(undefined, { + runColorOverride: new Map([['foo', '#aaa']]), + }); + + const nextState = runsReducers.reducers( + state, + actions.runColorChanged({ + runId: 'bar', + newColor: '#fff', + }) + ); + + expect(nextState.ui.runColorOverride).toEqual( + new Map([ + ['foo', '#aaa'], + ['bar', '#fff'], + ]) + ); + }); + }); + + describe('runIntervalHparamFilterChanged', () => { + it('sets initial interval hparam filter', () => { + const state = buildRunsState(undefined, { + hparamDefaultFilters: new Map([['dropout', buildIntervalFilter()]]), + }); + + const nextState = runsReducers.reducers( + state, + actions.runIntervalHparamFilterChanged({ + hparamName: 'dropout', + includeUndefined: true, + filterLowerValue: 0.5, + filterUpperValue: 0.5, + }) + ); + + expect(nextState.ui.hparamFilters).toEqual( + new Map([ + [ + 'dropout', + buildIntervalFilter({ + includeUndefined: true, + filterLowerValue: 0.5, + filterUpperValue: 0.5, + }), + ], + ]) + ); + }); + + it('updates existing interval hparam filter', () => { + const state = buildRunsState(undefined, { + hparamDefaultFilters: new Map([['dropout', buildIntervalFilter()]]), + hparamFilters: new Map([ + [ + 'dropout', + buildIntervalFilter({ + includeUndefined: true, + filterLowerValue: 0.003, + filterUpperValue: 0.5, + }), + ], + ]), + }); + + const nextState = runsReducers.reducers( + state, + actions.runIntervalHparamFilterChanged({ + hparamName: 'dropout', + includeUndefined: true, + filterLowerValue: 0.5, + filterUpperValue: 0.5, + }) + ); + + expect(nextState.ui.hparamFilters).toEqual( + new Map([ + [ + 'dropout', + buildIntervalFilter({ + includeUndefined: true, + filterLowerValue: 0.5, + filterUpperValue: 0.5, + }), + ], + ]) + ); + }); + + it('throws error when setting interval hparam that did not exist', () => { + const state = buildRunsState(undefined, { + hparamDefaultFilters: new Map(), + hparamFilters: new Map([['dropout', buildIntervalFilter()]]), + }); + + const action = actions.runIntervalHparamFilterChanged({ + hparamName: 'random_seed', + includeUndefined: true, + filterLowerValue: 0.5, + filterUpperValue: 0.5, + }); + + expect(() => runsReducers.reducers(state, action)).toThrow(); + }); + + it('throws when setting interval on discrete hparam', () => { + const state = buildRunsState(undefined, { + hparamDefaultFilters: new Map([['dropout', buildDiscreteFilter()]]), + }); + + const action = actions.runIntervalHparamFilterChanged({ + hparamName: 'dropout', + includeUndefined: true, + filterLowerValue: 0.5, + filterUpperValue: 0.5, + }); + + expect(() => runsReducers.reducers(state, action)).toThrow(); + }); + }); + + describe('runDiscreteHparamFilterChanged', () => { + it('sets initial discrete hparam filter', () => { + const state = buildRunsState(undefined, { + hparamDefaultFilters: new Map([ + [ + 'dropout', + buildDiscreteFilter({ + includeUndefined: true, + filterValues: [1, 10, 100], + }), + ], + ]), + }); + + const nextState = runsReducers.reducers( + state, + actions.runDiscreteHparamFilterChanged({ + hparamName: 'dropout', + includeUndefined: true, + filterValues: [10, 100], + }) + ); + + expect(nextState.ui.hparamFilters).toEqual( + new Map([ + [ + 'dropout', + buildDiscreteFilter({ + includeUndefined: true, + filterValues: [10, 100], + }), + ], + ]) + ); + }); + + it('updates existing discrete hparam filter', () => { + const state = buildRunsState(undefined, { + hparamDefaultFilters: new Map([ + [ + 'dropout', + buildDiscreteFilter({ + includeUndefined: true, + filterValues: [1, 10, 100], + }), + ], + ]), + hparamFilters: new Map([ + [ + 'dropout', + buildDiscreteFilter({ + includeUndefined: true, + filterValues: [2, 200], + }), + ], + ]), + }); + + const nextState = runsReducers.reducers( + state, + actions.runDiscreteHparamFilterChanged({ + hparamName: 'dropout', + includeUndefined: true, + filterValues: [10, 100], + }) + ); + + expect(nextState.ui.hparamFilters).toEqual( + new Map([ + [ + 'dropout', + buildDiscreteFilter({ + includeUndefined: true, + filterValues: [10, 100], + }), + ], + ]) + ); + }); + + it('throws error when setting discrete hparam that did not exist', () => { + const state = buildRunsState(undefined, { + hparamDefaultFilters: new Map(), + }); + + const action = actions.runDiscreteHparamFilterChanged({ + hparamName: 'optimizer', + includeUndefined: true, + filterValues: ['adam', 'adagrad'], + }); + + expect(() => runsReducers.reducers(state, action)).toThrow(); + }); + + it('throws when setting discrete change on interval hparam', () => { + const state = buildRunsState(undefined, { + hparamDefaultFilters: new Map([['dropout', buildIntervalFilter()]]), + hparamFilters: new Map([['dropout', buildIntervalFilter()]]), + }); + + const action = actions.runDiscreteHparamFilterChanged({ + hparamName: 'dropout', + includeUndefined: true, + filterValues: ['adam', 'adagrad'], + }); + + expect(() => runsReducers.reducers(state, action)).toThrow(); + }); + }); + + describe('runMetricFilterChanged', () => { + it('sets initial metric filters', () => { + const state = buildRunsState(undefined, { + metricDefaultFilters: new Map([ + [ + 'loss', + buildIntervalFilter({ + includeUndefined: true, + filterLowerValue: 0.2, + filterUpperValue: 0.5, + }), + ], + ]), + }); + + const nextState = runsReducers.reducers( + state, + actions.runMetricFilterChanged({ + metricTag: 'loss', + includeUndefined: false, + filterLowerValue: 0.1, + filterUpperValue: 0.5, + }) + ); + + expect(nextState.ui.metricFilters).toEqual( + new Map([ + [ + 'loss', + buildIntervalFilter({ + includeUndefined: false, + filterLowerValue: 0.1, + filterUpperValue: 0.5, + }), + ], + ]) + ); + }); + + it('updates existing metric filters', () => { + const state = buildRunsState(undefined, { + metricDefaultFilters: new Map([['loss', buildIntervalFilter()]]), + metricFilters: new Map([ + [ + 'loss', + buildIntervalFilter({ + includeUndefined: true, + filterLowerValue: 0.2, + filterUpperValue: 0.5, + }), + ], + ]), + }); + + const nextState = runsReducers.reducers( + state, + actions.runMetricFilterChanged({ + metricTag: 'loss', + includeUndefined: false, + filterLowerValue: 0.1, + filterUpperValue: 0.5, + }) + ); + + expect(nextState.ui.metricFilters).toEqual( + new Map([ + [ + 'loss', + buildIntervalFilter({ + includeUndefined: false, + filterLowerValue: 0.1, + filterUpperValue: 0.5, + }), + ], + ]) + ); + }); + + it('throws error if it sets filter that does not exist', () => { + const state = buildRunsState(undefined, { + metricDefaultFilters: new Map([['loss', buildIntervalFilter()]]), + metricFilters: new Map([['loss', buildIntervalFilter()]]), + }); + + const action = actions.runMetricFilterChanged({ + metricTag: 'accuracy', + includeUndefined: true, + filterLowerValue: 0, + filterUpperValue: 1, + }); + expect(() => runsReducers.reducers(state, action)).toThrow(); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_selectors.ts b/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_selectors.ts new file mode 100644 index 0000000000000000000000000000000000000000..19720dd7435ef052c6a9e930051862a1a2df83e1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_selectors.ts @@ -0,0 +1,239 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {createFeatureSelector, createSelector} from '@ngrx/store'; +import {DataLoadState, LoadState} from '../../types/data'; + +import {SortDirection} from '../../types/ui'; +import {DiscreteFilter, IntervalFilter} from '../types'; + +import {combineHparamAndMetricSpecs} from './runs_selectors_utils'; +import { + ExperimentToHparamAndMetricSpec, + HparamAndMetricSpec, + Run, + RUNS_FEATURE_KEY, + RunsDataState, + RunsState, + RunsUiState, + State, +} from './runs_types'; +import {serializeExperimentIds} from './utils'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +const getRunsState = createFeatureSelector(RUNS_FEATURE_KEY); + +const getDataState = createSelector( + getRunsState, + (state: RunsState): RunsDataState => { + return state.data; + } +); + +/** + * Returns Observable that emits run object. + */ +export const getExperimentIdForRunId = createSelector( + getDataState, + (state: RunsDataState, props: {runId: string}): string | null => { + return state.runIdToExpId[props.runId] ?? null; + } +); + +/** + * Returns Observable that emits run object. + */ +export const getRun = createSelector( + getDataState, + (state: RunsDataState, props: {runId: string}): Run | null => { + return state.runMetadata[props.runId] ?? null; + } +); + +/** + * Returns Observable that emits runs list for an experiment. + */ +export const getRuns = createSelector( + getDataState, + (state: RunsDataState, props: {experimentId: string}): Run[] => { + const runIds = state.runIds[props.experimentId] || []; + return runIds + .filter((id) => Boolean(state.runMetadata[id])) + .map((id) => state.runMetadata[id]); + } +); + +/** + * Returns Observable that emits load state of the runs list. + */ +export const getRunsLoadState = createSelector( + getDataState, + (state: RunsDataState, props: {experimentId: string}): LoadState => { + return ( + state.runsLoadState[props.experimentId] || { + lastLoadedTimeInMs: null, + state: DataLoadState.NOT_LOADED, + } + ); + } +); + +/** + * `selectHparamAndMetricSpec` is meant for performance optimization that + * leverages the memoization. + */ +const selectHparamAndMetricSpec = createSelector( + getDataState, + (state: RunsDataState): ExperimentToHparamAndMetricSpec => { + return state.hparamAndMetricSpec; + } +); + +/** + * Returns Observable that emits hparams and metrics specs of experiments. + */ +export const getExperimentsHparamsAndMetrics = createSelector( + selectHparamAndMetricSpec, + ( + record: ExperimentToHparamAndMetricSpec, + props: {experimentIds: string[]} + ): HparamAndMetricSpec => { + return combineHparamAndMetricSpecs( + ...props.experimentIds.map((eid) => record[eid]).filter(Boolean) + ); + } +); + +/** + * Returns Observable that emits selection state of runs. If the runs for the + * current route are desired, please see ui_selectors.ts's + * getCurrentRouteRunSelection instead. + */ +export const getRunSelectionMap = createSelector( + getDataState, + ( + dataState: RunsDataState, + props: {experimentIds: string[]} + ): Map => { + const stateKey = serializeExperimentIds(props.experimentIds); + return dataState.selectionState.get(stateKey) || new Map(); + } +); + +const getUiState = createSelector( + getRunsState, + (state: RunsState): RunsUiState => { + return state.ui; + } +); + +/** + * Returns Observable that emits pagination option on the run selector. + */ +export const getRunSelectorPaginationOption = createSelector( + getUiState, + (state: RunsUiState): {pageIndex: number; pageSize: number} => { + return state.paginationOption; + } +); + +/** + * Returns Observable that emits regex filter on the run selector. + */ +export const getRunSelectorRegexFilter = createSelector( + getUiState, + (state: RunsUiState): string => { + return state.regexFilter; + } +); + +/** + * Returns Observable that emits sort options on the run selector. + */ +export const getRunSelectorSort = createSelector( + getUiState, + (state: RunsUiState): {column: string | null; direction: SortDirection} => { + return state.sort; + } +); + +/** + * Returns Observable that emits map of run id to run color (hex). + */ +export const getRunColorMap = createSelector( + getUiState, + (state: RunsUiState): Record => { + const map = new Map([...state.defaultRunColor, ...state.runColorOverride]); + const colorObject: Record = {}; + map.forEach((value, key) => { + colorObject[key] = value; + }); + return colorObject; + } +); + +// Cheap identity selectors to skip recomputing selectors. +const getHparamDefaultFilter = createSelector( + getUiState, + (state): Map => { + return state.hparamDefaultFilters; + } +); + +const getHparamFilter = createSelector( + getUiState, + (state): Map => { + return state.hparamFilters; + } +); + +const getMetricDefaultFilter = createSelector( + getUiState, + (state): Map => { + return state.metricDefaultFilters; + } +); + +const getMetricFilter = createSelector( + getUiState, + (state): Map => { + return state.metricFilters; + } +); + +/** + * Returns Observable that emits map of hparam name to filter values. + */ +export const getRunHparamFilterMap = createSelector( + getHparamDefaultFilter, + getHparamFilter, + ( + defaultFilterMap, + filterMap + ): Map => { + return new Map([...defaultFilterMap, ...filterMap]); + } +); + +/** + * Returns Observable that emits map of metric tag to filter values. + */ +export const getRunMetricFilterMap = createSelector( + getMetricDefaultFilter, + getMetricFilter, + (defaultFilterMap, filterMap): Map => { + return new Map([...defaultFilterMap, ...filterMap]); + } +); diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_selectors_test.ts b/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_selectors_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..64027af172b502c8d021f38f513456dc55f7064d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_selectors_test.ts @@ -0,0 +1,492 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {DataLoadState} from '../../types/data'; + +import {SortDirection} from '../../types/ui'; + +import * as selectors from './runs_selectors'; +import { + buildDiscreteFilter, + buildHparamSpec, + buildIntervalFilter, + buildMetricSpec, + buildRun, + buildRunsState, + buildStateFromRunsState, +} from './testing'; + +describe('runs_selectors', () => { + describe('#getExperimentIdForRunId', () => { + beforeEach(() => { + // Clear the memoization. + selectors.getExperimentIdForRunId.release(); + }); + + it('returns eid', () => { + const state = buildStateFromRunsState( + buildRunsState({ + runIdToExpId: { + run1: 'eid1', + run2: 'eid1', + run3: 'eid2', + }, + }) + ); + expect( + selectors.getExperimentIdForRunId(state, { + runId: 'run1', + }) + ).toBe('eid1'); + expect( + selectors.getExperimentIdForRunId(state, { + runId: 'run2', + }) + ).toBe('eid1'); + expect( + selectors.getExperimentIdForRunId(state, { + runId: 'run3', + }) + ).toBe('eid2'); + }); + + it('returns `null` if the runId is unknown', () => { + const state = buildStateFromRunsState( + buildRunsState({ + runIdToExpId: {run1: 'eid1'}, + }) + ); + expect( + selectors.getExperimentIdForRunId(state, { + runId: 'run4', + }) + ).toBe(null); + }); + }); + + describe('#getRun', () => { + beforeEach(() => { + // Clear the memoization. + selectors.getRun.release(); + }); + + it('returns run', () => { + const state = buildStateFromRunsState( + buildRunsState({ + runMetadata: { + run1: buildRun({id: 'run1'}), + }, + }) + ); + + expect(selectors.getRun(state, {runId: 'run1'})).toEqual( + buildRun({ + id: 'run1', + }) + ); + }); + + it('returns `null` if run with `runId` does not exist', () => { + const state = buildStateFromRunsState( + buildRunsState({ + runMetadata: { + run1: buildRun({id: 'run1'}), + }, + }) + ); + + expect(selectors.getRun(state, {runId: 'run10'})).toBe(null); + }); + }); + + describe('#getRuns', () => { + beforeEach(() => { + // Clear the memoization. + selectors.getRuns.release(); + }); + + it('returns runs', () => { + const state = buildStateFromRunsState( + buildRunsState({ + runIds: { + eid: ['run1'], + }, + runMetadata: { + run1: buildRun({id: 'run1'}), + }, + }) + ); + expect(selectors.getRuns(state, {experimentId: 'eid'})).toEqual([ + buildRun({ + id: 'run1', + }), + ]); + }); + + it('returns runs for the ones that has metadata', () => { + const state = buildStateFromRunsState( + buildRunsState({ + runIds: { + eid: ['run1', 'run2'], + }, + runMetadata: { + run1: buildRun({id: 'run1'}), + }, + }) + ); + expect(selectors.getRuns(state, {experimentId: 'eid'})).toEqual([ + buildRun({ + id: 'run1', + }), + ]); + }); + + it('returns empty list if experiment id does not exist', () => { + const state = buildStateFromRunsState(buildRunsState()); + expect( + selectors.getRuns(state, { + experimentId: 'i_do_not_exist', + }) + ).toEqual([]); + }); + }); + + describe('#getRunsLoadState', () => { + beforeEach(() => { + // Clear the memoization. + selectors.getRunsLoadState.release(); + }); + + it('returns loadState', () => { + const loadState = { + state: DataLoadState.FAILED, + lastLoadedTimeInMs: 1337, + }; + + const state = buildStateFromRunsState( + buildRunsState({runsLoadState: {id1: loadState}}) + ); + expect( + selectors.getRunsLoadState(state, { + experimentId: 'id1', + }) + ).toEqual(loadState); + }); + + it('returns NOT_LOADED state if experiment id does not exist', () => { + const state = buildStateFromRunsState( + buildRunsState({ + runsLoadState: { + id1: {state: DataLoadState.FAILED, lastLoadedTimeInMs: 1337}, + }, + }) + ); + expect(selectors.getRunsLoadState(state, {experimentId: 'id2'})).toEqual({ + lastLoadedTimeInMs: null, + state: DataLoadState.NOT_LOADED, + }); + }); + }); + + describe('#getExperimentsHparamsAndMetrics', () => { + beforeEach(() => { + // Clear the memoization. + selectors.getExperimentsHparamsAndMetrics.release(); + }); + + it('returns hparams and metrics of experimentIds passed', () => { + const state = buildStateFromRunsState( + buildRunsState({ + hparamAndMetricSpec: { + id1: { + hparams: [buildHparamSpec({name: 'param1'})], + metrics: [buildMetricSpec({tag: 'acc'})], + }, + id2: {hparams: [], metrics: [buildMetricSpec({tag: 'loss'})]}, + id3: {hparams: [], metrics: [buildMetricSpec({tag: 'xent'})]}, + }, + }) + ); + + expect( + selectors.getExperimentsHparamsAndMetrics(state, { + experimentIds: ['id1', 'id2'], + }) + ).toEqual({ + hparams: [buildHparamSpec({name: 'param1'})], + metrics: [ + buildMetricSpec({tag: 'acc'}), + buildMetricSpec({tag: 'loss'}), + ], + }); + }); + }); + + describe('#getRunSelectionMap', () => { + beforeEach(() => { + // Clear the memoization. + selectors.getRunSelectionMap.release(); + }); + + it('returns selection map of runId passed', () => { + const state = buildStateFromRunsState( + buildRunsState({ + runIds: {eid: ['r1', 'r2']}, + selectionState: new Map([ + [ + '["eid"]', + new Map([ + ['r1', false], + ['r2', true], + ]), + ], + ]), + }) + ); + + const actual = selectors.getRunSelectionMap(state, { + experimentIds: ['eid'], + }); + expect(actual).toEqual( + new Map([ + ['r1', false], + ['r2', true], + ]) + ); + }); + }); + + describe('#getRunSelectorPaginationOption', () => { + beforeEach(() => { + // Clear the memoization. + selectors.getRunSelectorPaginationOption.release(); + }); + + it('returns pagination option', () => { + const state = buildStateFromRunsState( + buildRunsState(undefined, { + paginationOption: { + pageIndex: 1, + pageSize: 20, + }, + }) + ); + + expect(selectors.getRunSelectorPaginationOption(state)).toEqual({ + pageIndex: 1, + pageSize: 20, + }); + }); + }); + + describe('#getRunSelectorRegexFilter', () => { + beforeEach(() => { + // Clear the memoization. + selectors.getRunSelectorRegexFilter.release(); + }); + + it('returns regex filter', () => { + const state = buildStateFromRunsState( + buildRunsState(undefined, {regexFilter: 'meow'}) + ); + + expect(selectors.getRunSelectorRegexFilter(state)).toBe('meow'); + }); + }); + + describe('#getRunSelectorSort', () => { + beforeEach(() => { + // Clear the memoization. + selectors.getRunSelectorSort.release(); + }); + + it('returns sort options', () => { + const state = buildStateFromRunsState( + buildRunsState(undefined, { + sort: {column: 'hey', direction: SortDirection.UNSET}, + }) + ); + + expect(selectors.getRunSelectorSort(state)).toEqual({ + column: 'hey', + direction: SortDirection.UNSET, + }); + }); + }); + + describe('#getRunColorMap', () => { + beforeEach(() => { + // Clear the memoization. + selectors.getRunColorMap.release(); + }); + + it('returns color map by runs', () => { + const state = buildStateFromRunsState( + buildRunsState(undefined, { + defaultRunColor: new Map([ + ['foo', '#aaa'], + ['bar', '#bbb'], + ]), + }) + ); + + expect(selectors.getRunColorMap(state)).toEqual({ + foo: '#aaa', + bar: '#bbb', + }); + }); + + it('combines override with the default colors', () => { + const state = buildStateFromRunsState( + buildRunsState(undefined, { + defaultRunColor: new Map([ + ['foo', '#aaa'], + ['bar', '#bbb'], + ]), + runColorOverride: new Map([['foo', '#000']]), + }) + ); + + expect(selectors.getRunColorMap(state)).toEqual({ + foo: '#000', + bar: '#bbb', + }); + }); + }); + + describe('#getRunHparamFilterMap', () => { + beforeEach(() => { + // Clear the memoization. + selectors.getRunHparamFilterMap.release(); + }); + + it('returns default hparam filter map', () => { + const state = buildStateFromRunsState( + buildRunsState(undefined, { + hparamDefaultFilters: new Map([['optimizer', buildDiscreteFilter()]]), + }) + ); + + expect(selectors.getRunHparamFilterMap(state)).toEqual( + new Map([['optimizer', buildDiscreteFilter()]]) + ); + }); + + it('returns custom hparam filter map', () => { + const state = buildStateFromRunsState( + buildRunsState(undefined, { + hparamDefaultFilters: new Map([ + [ + 'optimizer', + buildDiscreteFilter({ + filterValues: ['a', 'b', 'c'], + }), + ], + ]), + hparamFilters: new Map([ + [ + 'optimizer', + buildDiscreteFilter({ + filterValues: ['d', 'e', 'f'], + }), + ], + ]), + }) + ); + + expect(selectors.getRunHparamFilterMap(state)).toEqual( + new Map([ + [ + 'optimizer', + buildDiscreteFilter({ + filterValues: ['d', 'e', 'f'], + }), + ], + ]) + ); + }); + }); + + describe('#getRunMetricFilterMap', () => { + beforeEach(() => { + // Clear the memoization. + selectors.getRunMetricFilterMap.release(); + }); + + it('returns default metric filter map', () => { + const state = buildStateFromRunsState( + buildRunsState(undefined, { + metricDefaultFilters: new Map([ + [ + 'loss', + buildIntervalFilter({ + minValue: 0.1, + maxValue: 1, + }), + ], + ]), + }) + ); + + expect(selectors.getRunMetricFilterMap(state)).toEqual( + new Map([ + [ + 'loss', + buildIntervalFilter({ + minValue: 0.1, + maxValue: 1, + }), + ], + ]) + ); + }); + + it('returns custom metric filter map', () => { + const state = buildStateFromRunsState( + buildRunsState(undefined, { + metricDefaultFilters: new Map([ + [ + 'loss', + buildIntervalFilter({ + minValue: 100, + maxValue: 200, + }), + ], + ]), + metricFilters: new Map([ + [ + 'loss', + buildIntervalFilter({ + minValue: 0.1, + maxValue: 1, + }), + ], + ]), + }) + ); + + expect(selectors.getRunMetricFilterMap(state)).toEqual( + new Map([ + [ + 'loss', + buildIntervalFilter({ + minValue: 0.1, + maxValue: 1, + }), + ], + ]) + ); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_selectors_utils.ts b/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_selectors_utils.ts new file mode 100644 index 0000000000000000000000000000000000000000..bdfbfd440285bca2674f87e7508ba155a36828d5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_selectors_utils.ts @@ -0,0 +1,137 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + DomainType, + HparamSpec, + MetricSpec, +} from '../data_source/runs_data_source_types'; + +import {HparamAndMetricSpec} from './runs_types'; + +/** + * Combines hparams and metrics spec from different experiments. + * + * Different experiments can be testing hypothesis on different sets of hparams + * and metrics. This utility combines the specs when possible and throws + * validation errors when key (`name` for hparams and `tag` for metrics) collide + * with different specs. + */ +export function combineHparamAndMetricSpecs( + ...specs: HparamAndMetricSpec[] +): HparamAndMetricSpec { + const hparams = new Map(); + const hparamDisplayNames = new Map>(); + const metrics = new Map(); + const metricDisplayNames = new Map>(); + const validationError: string[] = []; + + for (const spec of specs) { + for (const hparamSpec of spec.hparams) { + if (!hparamDisplayNames.has(hparamSpec.name)) { + hparamDisplayNames.set(hparamSpec.name, new Set()); + } + hparamDisplayNames.get(hparamSpec.name)!.add(hparamSpec.displayName); + if (!hparams.has(hparamSpec.name)) { + hparams.set(hparamSpec.name, {...hparamSpec}); + } else { + const specA = hparams.get(hparamSpec.name)!; + const specB = hparamSpec; + if (specA.type !== specB.type) { + validationError.push( + `Hparam, ${specB.name}, types have to match. Got: ` + + `${specA.type} vs. ${specB.type}` + ); + } + + if ( + specA.domain.type === DomainType.INTERVAL && + specB.domain.type === DomainType.INTERVAL + ) { + if ( + specA.domain.minValue !== specB.domain.minValue || + specA.domain.maxValue !== specB.domain.maxValue + ) { + validationError.push( + `Hparam, ${specB.name}, domains have to match. ` + + `Got: ${specA.domain} vs. ${specB.domain}` + ); + } + } else if ( + specA.domain.type === DomainType.DISCRETE && + specB.domain.type === DomainType.DISCRETE + ) { + const valueSet = new Set([ + ...specA.domain.values, + ...specB.domain.values, + ]); + if ( + specA.domain.values.length !== specB.domain.values.length || + specA.domain.values.length !== valueSet.size + ) { + validationError.push( + `Hparam, ${specB.name}, domains have to match. ` + + `Got: ${specA.domain} vs. ${specB.domain}` + ); + } + } else { + validationError.push( + `Hparam, ${specB.name}, domains have to match. ` + + `Got: ${specA.domain} vs. ${specB.domain}` + ); + } + } + } + + for (const metricSpec of spec.metrics) { + if (!metricDisplayNames.has(metricSpec.tag)) { + metricDisplayNames.set(metricSpec.tag, new Set()); + } + metricDisplayNames.get(metricSpec.tag)!.add(metricSpec.displayName); + if (!metrics.has(metricSpec.tag)) { + metrics.set(metricSpec.tag, {...metricSpec}); + } else { + const specA = metrics.get(metricSpec.tag)!; + const specB = metricSpec; + if (specA.datasetType !== specB.datasetType) { + validationError.push( + `Metric, ${specB.tag}, datasetTypes have to match. Got: ` + + `${specA.datasetType} vs. ${specB.datasetType}` + ); + } + } + } + } + + if (validationError.length) { + // TODO(b/157733179): handle the error gracefully on the view side. + throw new Error(`Validation error: +${validationError.join('\n')}`); + } + + return { + hparams: [...hparams].map(([hparamName, spec]) => { + return { + ...spec, + displayName: [...hparamDisplayNames.get(hparamName)!].join(' or '), + }; + }), + metrics: [...metrics].map(([metricTag, spec]) => { + return { + ...spec, + displayName: [...metricDisplayNames.get(metricTag)!].join(' or '), + }; + }), + }; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_selectors_utils_test.ts b/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_selectors_utils_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..9ec102d2e96c9a882043e083c1b7f02216a51663 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_selectors_utils_test.ts @@ -0,0 +1,341 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + DatasetType, + DomainType, + HparamsValueType, +} from '../data_source/runs_data_source_types'; + +import {combineHparamAndMetricSpecs} from './runs_selectors_utils'; +import {buildHparamSpec} from './testing'; + +describe('runs selectors utils test', () => { + describe('#combineHparamAndMetricSpecs', () => { + it('combines hparams', () => { + const specs = [ + { + hparams: [ + buildHparamSpec({ + displayName: 'Param 1', + domain: {type: DomainType.INTERVAL, minValue: 0, maxValue: 1}, + name: 'param1', + type: HparamsValueType.DATA_TYPE_FLOAT64, + }), + buildHparamSpec({ + displayName: 'Param 2', + domain: {type: DomainType.INTERVAL, minValue: 0, maxValue: 100}, + name: 'param2', + type: HparamsValueType.DATA_TYPE_FLOAT64, + }), + ], + metrics: [], + }, + { + hparams: [ + buildHparamSpec({ + displayName: 'Param 1', + domain: {type: DomainType.INTERVAL, minValue: 0, maxValue: 1}, + name: 'param1', + type: HparamsValueType.DATA_TYPE_FLOAT64, + }), + buildHparamSpec({ + displayName: 'Param 3', + domain: {type: DomainType.DISCRETE, values: ['A', 'B']}, + name: 'param3', + type: HparamsValueType.DATA_TYPE_STRING, + }), + ], + metrics: [], + }, + ]; + + expect(combineHparamAndMetricSpecs(...specs)).toEqual({ + hparams: [ + buildHparamSpec({ + displayName: 'Param 1', + domain: {type: DomainType.INTERVAL, minValue: 0, maxValue: 1}, + name: 'param1', + type: HparamsValueType.DATA_TYPE_FLOAT64, + }), + buildHparamSpec({ + displayName: 'Param 2', + domain: {type: DomainType.INTERVAL, minValue: 0, maxValue: 100}, + name: 'param2', + type: HparamsValueType.DATA_TYPE_FLOAT64, + }), + buildHparamSpec({ + description: '', + displayName: 'Param 3', + domain: {type: DomainType.DISCRETE, values: ['A', 'B']}, + name: 'param3', + type: HparamsValueType.DATA_TYPE_STRING, + }), + ], + metrics: [], + }); + }); + + it('combines metrics', () => { + const specs = [ + { + hparams: [], + metrics: [ + { + tag: 'acc', + displayName: 'Accuracy', + description: '', + datasetType: DatasetType.DATASET_TRAINING, + }, + { + tag: 'loss', + displayName: 'Loss', + description: '', + datasetType: DatasetType.DATASET_TRAINING, + }, + ], + }, + { + hparams: [], + metrics: [ + { + tag: 'acc', + displayName: 'Accuracy', + description: '', + datasetType: DatasetType.DATASET_TRAINING, + }, + ], + }, + ]; + + expect(combineHparamAndMetricSpecs(...specs)).toEqual({ + hparams: [], + metrics: [ + { + tag: 'acc', + displayName: 'Accuracy', + description: '', + datasetType: DatasetType.DATASET_TRAINING, + }, + { + tag: 'loss', + displayName: 'Loss', + description: '', + datasetType: DatasetType.DATASET_TRAINING, + }, + ], + }); + }); + + it('throws error when hparams with same name mismatch in type', () => { + const specs = [ + { + hparams: [ + buildHparamSpec({ + displayName: 'Param 1', + domain: {type: DomainType.INTERVAL, minValue: 0, maxValue: 1}, + name: 'param1', + type: HparamsValueType.DATA_TYPE_FLOAT64, + }), + buildHparamSpec({ + displayName: 'Param 1', + domain: {type: DomainType.DISCRETE, values: ['A']}, + name: 'param1', + type: HparamsValueType.DATA_TYPE_FLOAT64, + }), + ], + metrics: [], + }, + ]; + + expect(() => combineHparamAndMetricSpecs(...specs)).toThrowMatching( + (thrown) => { + return thrown.message.includes('param1, domains have to match'); + } + ); + }); + + it( + 'throws error when hparams with same name mismatch in interval ' + + 'bounds', + () => { + const specs = [ + { + hparams: [ + buildHparamSpec({ + displayName: 'Param 1', + domain: {type: DomainType.INTERVAL, minValue: 0, maxValue: 1}, + name: 'param1', + type: HparamsValueType.DATA_TYPE_FLOAT64, + }), + buildHparamSpec({ + displayName: 'Param 1', + domain: {type: DomainType.INTERVAL, minValue: 0, maxValue: 100}, + name: 'param1', + type: HparamsValueType.DATA_TYPE_FLOAT64, + }), + ], + metrics: [], + }, + ]; + + expect(() => combineHparamAndMetricSpecs(...specs)).toThrowMatching( + (thrown) => { + return thrown.message.includes('param1, domains have to match'); + } + ); + } + ); + + it( + 'throws error when hparams with same name mismatch in discrete' + 'value', + () => { + const specs = [ + { + hparams: [ + buildHparamSpec({ + displayName: 'Param 1', + domain: {type: DomainType.DISCRETE, values: ['foo', 'bar']}, + name: 'param1', + type: HparamsValueType.DATA_TYPE_FLOAT64, + }), + buildHparamSpec({ + displayName: 'Param 1', + domain: { + type: DomainType.DISCRETE, + values: ['foo', 'bar', 'baz'], + }, + name: 'param1', + type: HparamsValueType.DATA_TYPE_FLOAT64, + }), + ], + metrics: [], + }, + ]; + + expect(() => combineHparamAndMetricSpecs(...specs)).toThrowMatching( + (thrown) => { + return thrown.message.includes('param1, domains have to match'); + } + ); + } + ); + + it('throws error when metrics with the same tag mismatch', () => { + const specs = [ + { + hparams: [], + metrics: [ + { + tag: 'acc', + displayName: 'Accuracy', + description: '', + datasetType: DatasetType.DATASET_TRAINING, + }, + { + tag: 'acc', + displayName: 'Accuracy', + description: '', + datasetType: DatasetType.DATASET_VALIDATION, + }, + ], + }, + ]; + + expect(() => combineHparamAndMetricSpecs(...specs)).toThrowMatching( + (thrown) => { + return thrown.message.includes('acc, datasetTypes have to match'); + } + ); + }); + + it('combines displayName when they are different', () => { + const specs = [ + { + hparams: [ + buildHparamSpec({ + displayName: 'Param 1', + domain: {type: DomainType.INTERVAL, minValue: 0, maxValue: 1}, + name: 'param1', + type: HparamsValueType.DATA_TYPE_FLOAT64, + }), + buildHparamSpec({ + displayName: 'Param 2', + domain: {type: DomainType.INTERVAL, minValue: 0, maxValue: 100}, + name: 'param2', + type: HparamsValueType.DATA_TYPE_FLOAT64, + }), + ], + metrics: [ + { + tag: 'acc', + displayName: 'Accuracy', + description: '', + datasetType: DatasetType.DATASET_TRAINING, + }, + ], + }, + { + hparams: [ + buildHparamSpec({ + displayName: 'Param 1 Modified', + domain: {type: DomainType.INTERVAL, minValue: 0, maxValue: 1}, + name: 'param1', + type: HparamsValueType.DATA_TYPE_FLOAT64, + }), + buildHparamSpec({ + displayName: 'Param 2', + domain: {type: DomainType.INTERVAL, minValue: 0, maxValue: 100}, + name: 'param2', + type: HparamsValueType.DATA_TYPE_FLOAT64, + }), + ], + metrics: [ + { + tag: 'acc', + displayName: 'Acc', + description: '', + datasetType: DatasetType.DATASET_TRAINING, + }, + ], + }, + ]; + + expect(combineHparamAndMetricSpecs(...specs)).toEqual({ + hparams: [ + buildHparamSpec({ + displayName: 'Param 1 or Param 1 Modified', + domain: {type: DomainType.INTERVAL, minValue: 0, maxValue: 1}, + name: 'param1', + type: HparamsValueType.DATA_TYPE_FLOAT64, + }), + buildHparamSpec({ + displayName: 'Param 2', + domain: {type: DomainType.INTERVAL, minValue: 0, maxValue: 100}, + name: 'param2', + type: HparamsValueType.DATA_TYPE_FLOAT64, + }), + ], + metrics: [ + { + tag: 'acc', + displayName: 'Accuracy or Acc', + description: '', + datasetType: DatasetType.DATASET_TRAINING, + }, + ], + }); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_types.ts b/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..5a6715dbcee4801bacc05dddf1d1915f9d6c8444 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/store/runs_types.ts @@ -0,0 +1,122 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview Types of experiments that come from the backend. + */ + +import {LoadState} from '../../types/data'; + +import {RouteContextedState} from '../../app_routing/route_contexted_reducer_helper'; +import {SortDirection} from '../../types/ui'; +import {HparamValue} from '../data_source/runs_data_source_types'; +import {HparamSpec, MetricSpec} from '../data_source/runs_data_source_types'; +import {DiscreteFilter, IntervalFilter} from '../types'; + +export {Domain, DomainType} from '../data_source/runs_data_source_types'; + +/** + * Metadata about a run. + */ +export interface Run { + id: string; + name: string; + startTime: number; + hparams: null | HparamValue[]; + metrics: null | Array<{tag: string; value: number}>; +} + +/** + * Key used to namespace the experiments reducer. + */ +export const RUNS_FEATURE_KEY = 'runs'; + +export type ExperimentId = string; +export type RunId = string; +type HparamName = string; +type MetricName = string; + +export interface HparamAndMetricSpec { + hparams: HparamSpec[]; + metrics: MetricSpec[]; +} + +export type ExperimentToHparamAndMetricSpec = Record< + ExperimentId, + HparamAndMetricSpec +>; + +/** + * Interface that describes shape of the `data` state in the runs feature. + */ +export interface RunsDataState { + runIds: Record; + runIdToExpId: Record; + runMetadata: Record; + runsLoadState: Record; + hparamAndMetricSpec: ExperimentToHparamAndMetricSpec; + // Run selection is tied to a list of experimentIds which is somewhat related + // to route but not strictly. For instance, if we want to render the + // run-selector in both experiment list and dashboard routes sharing the + // state, they need to share a key. + selectionState: Map>; +} + +export interface RunsUiRoutefulState { + paginationOption: {pageIndex: number; pageSize: number}; + regexFilter: string; + sort: {column: string | null; direction: SortDirection}; + + // Each route may keep track of its own hparam/metric filter values that + // overrides the default filters. + hparamFilters: Map; + metricFilters: Map; + runColorOverride: Map; +} + +export interface RunsUiRoutelessState { + hparamDefaultFilters: Map; + metricDefaultFilters: Map; + defaultRunColor: Map; +} + +/** + * Interface that describes shape of the `ui` state in the runs feature. + */ +export type RunsUiState = RouteContextedState< + RunsUiRoutefulState, + RunsUiRoutelessState +>; + +/** + * Interface that describes state structure of the runs reducer. + */ +export interface RunsState { + data: RunsDataState; + ui: RunsUiState; +} + +/** + * Fragment of application state with the RunsState. + */ +export interface State { + [RUNS_FEATURE_KEY]?: RunsState; +} + +/** + * When runs selector was never modified by user and there are less than or + * equal to MAX_NUM_RUNS_TO_ENABLE_BY_DEFAULT in an experiment, we default + * select all runs. + */ +export const MAX_NUM_RUNS_TO_ENABLE_BY_DEFAULT = 40; diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/store/testing.ts b/saved_models/tensorboard/tensorboard/webapp/runs/store/testing.ts new file mode 100644 index 0000000000000000000000000000000000000000..150676e3f3f743b6926ff40a71f7391704ccd242 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/store/testing.ts @@ -0,0 +1,140 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview Testing utility for testing runs. + */ + +import {SortDirection} from '../../types/ui'; +import { + DatasetType, + HparamSpec, + HparamsValueType, + MetricSpec, +} from '../data_source/runs_data_source_types'; +import {DiscreteFilter, DomainType, IntervalFilter} from '../types'; + +import { + Run, + RUNS_FEATURE_KEY, + RunsDataState, + RunsState, + RunsUiState, + State, +} from './runs_types'; + +/** + * Builds an experiment from default. Can override fields by providing + * `override`. + */ +export function buildRun(override?: Partial): Run { + return { + id: '1', + name: 'Default Run', + startTime: 1, + hparams: null, + metrics: null, + ...override, + }; +} + +/** + * Builds a runs state. + */ +export function buildRunsState( + dataOverride?: Partial, + uiOverride?: Partial +): RunsState { + return { + data: { + runIds: {}, + runIdToExpId: {}, + runMetadata: {}, + runsLoadState: {}, + hparamAndMetricSpec: {}, + selectionState: new Map(), + ...dataOverride, + }, + ui: { + paginationOption: {pageIndex: 0, pageSize: 0}, + regexFilter: '', + sort: {column: null, direction: SortDirection.UNSET}, + defaultRunColor: new Map(), + runColorOverride: new Map(), + hparamFilters: new Map(), + metricFilters: new Map(), + hparamDefaultFilters: new Map(), + metricDefaultFilters: new Map(), + ...uiOverride, + }, + }; +} + +/** + * Get application state from a runs state. + */ +export function buildStateFromRunsState(runsState: RunsState): State { + return {[RUNS_FEATURE_KEY]: runsState}; +} + +export function buildHparamSpec( + override: Partial = {} +): HparamSpec { + return { + description: '', + displayName: 'Sample Param', + domain: {type: DomainType.INTERVAL, minValue: 0, maxValue: 1}, + name: 'sample_param', + type: HparamsValueType.DATA_TYPE_FLOAT64, + ...override, + }; +} + +export function buildMetricSpec( + override: Partial = {} +): MetricSpec { + return { + tag: 'tag', + displayName: 'Tag', + description: 'This is a tags', + datasetType: DatasetType.DATASET_TRAINING, + ...override, + }; +} + +export function buildDiscreteFilter( + override: Partial = {} +): DiscreteFilter { + return { + type: DomainType.DISCRETE, + includeUndefined: true, + possibleValues: [1, 10, 100], + filterValues: [1, 100], + ...override, + }; +} + +export function buildIntervalFilter( + override: Partial = {} +): IntervalFilter { + return { + type: DomainType.INTERVAL, + includeUndefined: true, + minValue: 0, + maxValue: 100, + filterLowerValue: 5, + filterUpperValue: 10, + ...override, + }; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/store/utils.ts b/saved_models/tensorboard/tensorboard/webapp/runs/store/utils.ts new file mode 100644 index 0000000000000000000000000000000000000000..2c2b21d9eaf9fcb9cfcafe45041b8d17e9464c87 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/store/utils.ts @@ -0,0 +1,17 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export function serializeExperimentIds(experimentIds: string[]): string { + return JSON.stringify(experimentIds.slice().sort()); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/store/utils_test.ts b/saved_models/tensorboard/tensorboard/webapp/runs/store/utils_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..62a6409fc22e67823ddfc6b8ccf78842c8023b5b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/store/utils_test.ts @@ -0,0 +1,32 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {serializeExperimentIds} from './utils'; + +describe('run store utils test', () => { + describe('#serializeExperimentIds', () => { + it('serializes experiment ids into a string', () => { + const actual = serializeExperimentIds(['b', 'c', 'd']); + + expect(actual).toBe('["b","c","d"]'); + }); + + it('sorts the experiment ids so order does not matter', () => { + const a = serializeExperimentIds(['a', 'c', 'b']); + const b = serializeExperimentIds(['b', 'a', 'c']); + + expect(a).toBe(b); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/types.ts b/saved_models/tensorboard/tensorboard/webapp/runs/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..93f12bb9658a39d2b4bd93bae772fae3f7fb14b4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/types.ts @@ -0,0 +1,52 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + DiscreteHparamValues, + DomainType, + HparamsAndMetadata, + Run, +} from './data_source/runs_data_source_types'; + +export { + DiscreteHparamValue, + DiscreteHparamValues, + DomainType, +} from './data_source/runs_data_source_types'; + +export interface DiscreteFilter { + type: DomainType.DISCRETE; + includeUndefined: boolean; + possibleValues: DiscreteHparamValues; + // Subset of `possibleValues` + filterValues: DiscreteHparamValues; +} + +export interface IntervalFilter { + type: DomainType.INTERVAL; + includeUndefined: boolean; + minValue: number; + maxValue: number; + // Filter values have to be in between min and max values (inclusive). + filterLowerValue: number; + filterUpperValue: number; +} + +export type ExperimentIdToRunsAndMetadata = Record< + string, + { + runs: Run[]; + metadata: HparamsAndMetadata; + } +>; diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_selector/BUILD b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_selector/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..0ed90a2ecfb7396ec6835c99dedd9ecb54abd2fa --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_selector/BUILD @@ -0,0 +1,48 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "runs_selector", + srcs = [ + "runs_selector_component.ts", + "runs_selector_container.ts", + "runs_selector_module.ts", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/runs/store:types", + "//tensorboard/webapp/runs/views/runs_table", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "runs_selector_test", + testonly = True, + srcs = [ + "runs_selector_test.ts", + ], + deps = [ + ":runs_selector", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_platform_browser_animations", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/runs/store:testing", + "//tensorboard/webapp/runs/views/runs_table", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_selector/runs_selector_component.ts b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_selector/runs_selector_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..9f11cffb20f613d5b89c4ed31ffb8dcc046b5886 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_selector/runs_selector_component.ts @@ -0,0 +1,44 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component, Input} from '@angular/core'; + +import {HparamAndMetricSpec} from '../../store/runs_types'; +import {RunsTableColumn} from '../runs_table/types'; + +@Component({ + selector: 'runs-selector-component', + template: ` + + `, + styles: [ + ` + runs-table { + height: 100%; + } + `, + ], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class RunsSelectorComponent { + @Input() experimentIds!: string[]; + @Input() showHparamsAndMetrics?: boolean; + @Input() columns!: RunsTableColumn[]; + @Input() hparamAndMetricSpecs!: HparamAndMetricSpec; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_selector/runs_selector_container.ts b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_selector/runs_selector_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..601c0832beccbdc0cc0b60f1ddfe78c09459f507 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_selector/runs_selector_container.ts @@ -0,0 +1,52 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component, Input} from '@angular/core'; +import {Store} from '@ngrx/store'; +import {map} from 'rxjs/operators'; + +import {State} from '../../../app_state'; +import {getExperimentIdsFromRoute} from '../../../selectors'; +import {RunsTableColumn} from '../runs_table/types'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +@Component({ + selector: 'runs-selector', + template: ` + + `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class RunsSelectorContainer { + @Input() showHparamsAndMetrics?: boolean; + + readonly experimentIds$ = this.store.select(getExperimentIdsFromRoute); + readonly columns$ = this.store.select(getExperimentIdsFromRoute).pipe( + map((ids) => { + return [ + RunsTableColumn.CHECKBOX, + RunsTableColumn.RUN_NAME, + ids && ids.length > 1 ? RunsTableColumn.EXPERIMENT_NAME : null, + RunsTableColumn.RUN_COLOR, + ].filter((col) => col !== null) as RunsTableColumn[]; + }) + ); + + constructor(private readonly store: Store) {} +} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_selector/runs_selector_module.ts b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_selector/runs_selector_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..257e282904076ff4584c46110fd2913291d32253 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_selector/runs_selector_module.ts @@ -0,0 +1,35 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview Module for rendering a table that lists all the runs from + * different experiments with checkbox for run selection. + * + * Note that this an instance of the runs table with different configuration. + */ + +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; + +import {RunsTableModule} from '../runs_table/runs_table_module'; + +import {RunsSelectorComponent} from './runs_selector_component'; +import {RunsSelectorContainer} from './runs_selector_container'; + +@NgModule({ + imports: [CommonModule, RunsTableModule], + exports: [RunsSelectorContainer], + declarations: [RunsSelectorComponent, RunsSelectorContainer], +}) +export class RunsSelectorModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_selector/runs_selector_test.ts b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_selector/runs_selector_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..0b68568f7b9ee18c6a7188ec664c3a3c6c7aa854 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_selector/runs_selector_test.ts @@ -0,0 +1,114 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import {of} from 'rxjs'; + +import {State} from '../../../app_state'; +import { + getExperimentIdsFromRoute, + getExperimentsHparamsAndMetrics, +} from '../../../selectors'; +import {buildMetricSpec} from '../../store/testing'; +import {RunsTableColumn} from '../runs_table/types'; + +import {RunsSelectorComponent} from './runs_selector_component'; +import {RunsSelectorContainer} from './runs_selector_container'; + +describe('runs selector test', () => { + let store: MockStore; + let selectSpy: jasmine.Spy; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [NoopAnimationsModule], + providers: [provideMockStore()], + declarations: [RunsSelectorContainer, RunsSelectorComponent], + // Ignore implementation detail of runs-table; it has own test. + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + store.overrideSelector(getExperimentsHparamsAndMetrics, { + hparams: [], + metrics: [], + }); + selectSpy = spyOn(store, 'select').and.callThrough(); + }); + + describe('runs table', () => { + it('renders no exp name when only one exp is being viewed', () => { + store.overrideSelector(getExperimentIdsFromRoute, ['123']); + const fixture = TestBed.createComponent(RunsSelectorContainer); + fixture.detectChanges(); + + const runsTable = fixture.debugElement.query(By.css('runs-table')) + .componentInstance; + expect(runsTable.columns).toEqual([ + RunsTableColumn.CHECKBOX, + RunsTableColumn.RUN_NAME, + RunsTableColumn.RUN_COLOR, + ]); + }); + + it('renders exp name when more than one exp being viewed', () => { + store.overrideSelector(getExperimentIdsFromRoute, ['123', '456']); + const fixture = TestBed.createComponent(RunsSelectorContainer); + fixture.detectChanges(); + + const runsTable = fixture.debugElement.query(By.css('runs-table')) + .componentInstance; + expect(runsTable.columns).toEqual([ + RunsTableColumn.CHECKBOX, + RunsTableColumn.RUN_NAME, + RunsTableColumn.EXPERIMENT_NAME, + RunsTableColumn.RUN_COLOR, + ]); + }); + + it('does not render exp name when getExperimentIds return null', () => { + store.overrideSelector(getExperimentIdsFromRoute, null); + const fixture = TestBed.createComponent(RunsSelectorContainer); + fixture.detectChanges(); + + const runsTable = fixture.debugElement.query(By.css('runs-table')) + .componentInstance; + expect(runsTable.columns).toEqual([ + RunsTableColumn.CHECKBOX, + RunsTableColumn.RUN_NAME, + RunsTableColumn.RUN_COLOR, + ]); + }); + + describe('hparams and metrics', () => { + beforeEach(() => { + store.overrideSelector(getExperimentIdsFromRoute, ['123', '456']); + selectSpy + .withArgs(getExperimentsHparamsAndMetrics, { + experimentIds: ['123', '456'], + }) + .and.returnValue( + of({ + hparams: [], + metrics: [buildMetricSpec({tag: 'foo'})], + }) + ); + }); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/BUILD b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..f2c5655b10e043de9253bef7f07cf3b950b2980d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/BUILD @@ -0,0 +1,89 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "runs_table_styles", + src = "runs_table_component.scss", +) + +ng_module( + name = "runs_table", + srcs = [ + "runs_table_component.ts", + "runs_table_container.ts", + "runs_table_module.ts", + "types.ts", + ], + assets = [ + ":runs_table_styles", + "runs_table_component.ng.html", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_checkbox", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/angular:expect_angular_material_input", + "//tensorboard/webapp/angular:expect_angular_material_menu", + "//tensorboard/webapp/angular:expect_angular_material_paginator", + "//tensorboard/webapp/angular:expect_angular_material_progress_spinner", + "//tensorboard/webapp/angular:expect_angular_material_sort", + "//tensorboard/webapp/angular:expect_angular_material_table", + "//tensorboard/webapp/runs:types", + "//tensorboard/webapp/runs/actions", + "//tensorboard/webapp/runs/data_source", + "//tensorboard/webapp/runs/store:types", + "//tensorboard/webapp/types", + "//tensorboard/webapp/types:ui", + "//tensorboard/webapp/widgets/range_input", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//ngx-color-picker", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "runs_table_test", + testonly = True, + srcs = [ + "runs_table_test.ts", + ], + deps = [ + ":runs_table", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/angular:expect_angular_cdk_overlay", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_material_checkbox", + "//tensorboard/webapp/angular:expect_angular_material_menu", + "//tensorboard/webapp/angular:expect_angular_material_paginator", + "//tensorboard/webapp/angular:expect_angular_material_progress_spinner", + "//tensorboard/webapp/angular:expect_angular_material_sort", + "//tensorboard/webapp/angular:expect_angular_material_table", + "//tensorboard/webapp/angular:expect_angular_platform_browser_animations", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/experiments/store:testing", + "//tensorboard/webapp/runs:types", + "//tensorboard/webapp/runs/actions", + "//tensorboard/webapp/runs/data_source", + "//tensorboard/webapp/runs/store:testing", + "//tensorboard/webapp/runs/store:types", + "//tensorboard/webapp/testing:dom", + "//tensorboard/webapp/testing:mat_icon", + "//tensorboard/webapp/types", + "//tensorboard/webapp/types:ui", + "//tensorboard/webapp/widgets/range_input", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + "@npm//rxjs", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/runs_table_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/runs_table_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..473762ad03e12f0b64d53cc8eb202a4bd73fcea9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/runs_table_component.ng.html @@ -0,0 +1,271 @@ + +
    +
    + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + Experiment + + {{ item.experimentAlias }} + + Run + {{ item.run.name }} + + +
    + All runs in this page are selected but not all runs ({{ + numSelectedItems }} of {{ allItemsLength }}) are selected. +
    +
    + {{ column.displayName || column.name }} + + + +
    + (show empty value) +
    + +
    + +
    +
    + +
    + {{ value }} +
    +
    +
    +
    +
    + {{ item.hparams.get(column.name) }} + + {{ column.displayName || column.tag }} + + + + +
    + (show empty value) +
    +
    + +
    +
    +
    +
    + {{ item.metrics.get(column.tag) }} +
    + +
    + +
    + +
    No Runs
    + +
    + No runs match "{{ regexFilter }}" +
    +
    + + diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/runs_table_component.scss b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/runs_table_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..ed03db130c2352f605e39e99035d666fc16ba931 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/runs_table_component.scss @@ -0,0 +1,178 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +// 42px + 1px for border. +$_table-content-row-min-height: 43px; + +:host { + display: block; + overflow: hidden; + background-color: #fff; +} + +.table-container { + contain: layout paint; + max-width: 100%; + overflow-x: auto; + will-change: transform; +} + +:host.flex-layout { + display: flex; + flex-direction: column; + + .table-container { + flex: 1 1 0; + overflow-x: hidden; + overflow-y: auto; + + td.name { + word-break: break-word; + overflow-wrap: break-word; + } + } + + mat-paginator { + border-top: 1px solid mat-color($tb-foreground, border); + padding-bottom: 12px; + } +} + +table { + width: 100%; + + th, + td { + font-size: 13px; + padding: 5px; + + &:not(.name) { + text-align: center; + } + + &:first-of-type { + padding-left: 24px; + } + + &:last-of-type { + padding-right: 24px; + } + } + + th { + color: mat-color($tb-foreground, text); + } + + tr:not(.select-all) th { + white-space: nowrap; + } + + .mat-header-row, + .mat-row { + height: $_table-content-row-min-height; + } +} + +.loading, +.no-runs { + align-items: center; + border: 0; + border-bottom-width: 1px; + border-color: #0000001f; + border-style: solid; + display: flex; + height: 48px; + padding: 0 24px; +} + +.loading { + justify-content: center; +} + +.select-all th { + padding-bottom: 12px; + padding-top: 12px; +} + +:host tr.select-all:not(.show-select-all) { + display: none; +} + +.select-all-content, +.select-all-content button { + font-size: 13px; + font-weight: 400; + line-height: 1.6; + text-align: left; +} + +.select-all-content button { + font-weight: 500; + padding: 0 4px; +} + +.filter-row { + display: flex; + align-items: center; + height: 48px; + padding: 0 16px; + border-bottom: 1px solid mat-color($tb-foreground, border); +} + +.run-filter { + display: flex; + color: mat-color($tb-foreground, text); + font-size: 13px; + flex: 1; + + mat-icon { + color: mat-color($tb-foreground, secondary-text); + flex: none; + margin-left: 5px; + margin-right: 5px; + } +} + +// Prevents the table column for checkbox and run_color from growing beyond +// their sizes. +.mat-column-checkbox, +.mat-column-run_color { + width: 20px; +} + +.run-color-swatch { + $_swatch-size: 20px; + + border-radius: 100%; + border: 1px solid mat-color($tb-foreground, border); + height: $_swatch-size; + width: $_swatch-size; + outline: none; + + &.no-color { + border-color: mat-color($tf-slate, 300); + border-width: 2px; + } +} + +.range-input-container { + // Undo mat-menu-item's default 48px height. + height: auto; +} + +:host ::ng-deep mat-paginator mat-form-field { + margin: 0; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/runs_table_component.ts b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/runs_table_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..21bbd3332b86be4ac47a45b1b7ae55db3e24c025 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/runs_table_component.ts @@ -0,0 +1,318 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + Component, + ElementRef, + EventEmitter, + Injectable, + Input, + OnChanges, + Output, + ViewChild, +} from '@angular/core'; +import {MatPaginator} from '@angular/material/paginator'; +import {MatPaginatorIntl} from '@angular/material/paginator'; +import {MatSort, Sort} from '@angular/material/sort'; +import {MatTableDataSource} from '@angular/material/table'; + +import {SortDirection} from '../../../types/ui'; +import { + DiscreteFilter, + DiscreteHparamValues, + IntervalFilter, +} from '../../types'; +import {DiscreteHparamValue, DomainType} from '../../types'; + +import {HparamSpec, MetricSpec, RunsTableColumn, RunTableItem} from './types'; + +/** + * Exported because Angular compiler requires decorated classes to be exported. + */ +@Injectable() +export class RunsPaginatorIntl extends MatPaginatorIntl { + itemsPerPageLabel = 'Show runs:'; +} + +export interface HparamColumn { + displayName: string; + name: string; + filter: IntervalFilter | DiscreteFilter; +} + +export interface MetricColumn { + displayName: string; + tag: string; + filter: IntervalFilter; +} + +export interface IntervalFilterChange { + name: string; + includeUndefined: boolean; + filterLowerValue: number; + filterUpperValue: number; +} + +@Component({ + selector: 'runs-table-component', + templateUrl: 'runs_table_component.ng.html', + host: { + '[class.flex-layout]': 'useFlexibleLayout', + }, + styleUrls: ['runs_table_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, + // Use Element Provider since this text is unique to this element hierarchy. + providers: [{provide: MatPaginatorIntl, useClass: RunsPaginatorIntl}], +}) +export class RunsTableComponent implements OnChanges { + readonly dataSource = new MatTableDataSource(); + readonly DomainType = DomainType; + + @Input() showExperimentName!: boolean; + @Input() columns!: RunsTableColumn[]; + @Input() hparamColumns!: HparamSpec[]; + @Input() metricColumns!: MetricSpec[]; + @Input() allItemsLength!: number; + @Input() filteredItemsLength!: number; + @Input() useFlexibleLayout!: boolean; + @Input() usePagination!: boolean; + + /** + * `RunTableItem`s for a given page. + */ + @Input() pageItems!: RunTableItem[]; + @Input() loading!: boolean; + @Input() numSelectedItems!: number; + @Input() + sortOption!: {column: RunsTableColumn | null; direction: SortDirection}; + @Input() paginationOption!: {pageSize: number; pageIndex: number}; + @Input() regexFilter!: string; + + @Output() onRegexFilterChange = new EventEmitter(); + @Output() onSelectionToggle = new EventEmitter(); + @Output() onPageSelectionToggle = new EventEmitter<{items: RunTableItem[]}>(); + @Output() onSelectAllPages = new EventEmitter(); + @Output() + onPaginationChange = new EventEmitter<{ + pageIndex: number; + pageSize: number; + }>(); + @Output() + onSortChange = new EventEmitter<{ + column: RunsTableColumn; + direction: SortDirection; + }>(); + @Output() + onRunColorChange = new EventEmitter<{runId: string; newColor: string}>(); + + @Output() + onHparamDiscreteFilterChanged = new EventEmitter<{ + hparamName: string; + includeUndefined: boolean; + filterValues: DiscreteHparamValues; + }>(); + + @Output() + onHparamIntervalFilterChanged = new EventEmitter(); + + @Output() onMetricFilterChanged = new EventEmitter(); + + @ViewChild('filter', {static: true, read: ElementRef}) + filter!: ElementRef; + + @ViewChild(MatPaginator, {static: true}) paginator!: MatPaginator; + @ViewChild(MatSort, {static: true}) sort!: MatSort; + + ngOnChanges() { + this.dataSource.data = this.pageItems; + } + + getHparamColumnId(spec: HparamSpec) { + return `h:${spec.name}`; + } + + getMetricColumnId(spec: MetricSpec) { + return `m:${spec.tag}`; + } + + getColumnIds() { + return [ + ...this.columns, + ...this.hparamColumns.map(this.getHparamColumnId), + ...this.metricColumns.map(this.getMetricColumnId), + ]; + } + + /** + * Returns true when all items in the page are selected. Returns false when + * there are no items at all. + */ + allPageItemsSelected() { + return ( + Boolean(this.pageItems.length) && + this.pageItems.every((item) => item.selected) + ); + } + + somePageItemsSelected() { + return this.pageItems.some((item) => item.selected); + } + + handlePageToggle() { + this.onPageSelectionToggle.emit({items: this.pageItems}); + } + + handleSortChange(sort: Sort) { + let direction: SortDirection; + switch (sort.direction) { + case 'asc': + direction = SortDirection.ASC; + break; + case 'desc': + direction = SortDirection.DESC; + break; + default: + direction = SortDirection.UNSET; + } + this.onSortChange.emit({ + column: sort.active as RunsTableColumn, + direction, + }); + } + + onFilterKeyUp(event: KeyboardEvent) { + const input = event.target! as HTMLInputElement; + this.onRegexFilterChange.emit(input.value); + } + + tableTrackBy(index: number, item: RunTableItem) { + return item.run.id; + } + + handleHparamIncludeUndefinedToggled(hparamColumn: HparamColumn) { + const {name, filter} = hparamColumn; + + if (!filter) { + throw new RangeError( + 'Invariant error: require filter to exist for it to change' + ); + } + + if (filter.type === DomainType.DISCRETE) { + this.onHparamDiscreteFilterChanged.emit({ + hparamName: name, + includeUndefined: !filter.includeUndefined, + filterValues: filter.filterValues, + }); + } else { + this.onHparamIntervalFilterChanged.emit({ + name, + includeUndefined: !filter.includeUndefined, + filterLowerValue: filter.filterLowerValue, + filterUpperValue: filter.filterUpperValue, + }); + } + } + + handleHparamIntervalChanged( + hparamColumn: HparamColumn, + newValue: {lowerValue: number; upperValue: number} + ) { + const {name, filter} = hparamColumn; + + if (!filter) { + throw new RangeError( + 'Invariant error: require filter to exist for it to change' + ); + } + + this.onHparamIntervalFilterChanged.emit({ + name, + includeUndefined: filter.includeUndefined, + filterLowerValue: newValue.lowerValue, + filterUpperValue: newValue.upperValue, + }); + } + + handleHparamDiscreteChanged( + hparamColumn: HparamColumn, + toggledValue: DiscreteHparamValue + ) { + const {name, filter} = hparamColumn; + + if (!filter) { + throw new RangeError( + 'Invariant error: require filter to exist for it to change' + ); + } + + if (filter.type !== DomainType.DISCRETE) { + throw new RangeError( + `Invariant error: expected discrete domain for ${name}` + ); + } + + const newValues = new Set([...filter.filterValues]); + if (newValues.has(toggledValue)) { + newValues.delete(toggledValue); + } else { + newValues.add(toggledValue); + } + this.onHparamDiscreteFilterChanged.emit({ + hparamName: name, + includeUndefined: filter.includeUndefined, + filterValues: [...newValues] as DiscreteHparamValues, + }); + } + + handleMetricIncludeUndefinedChanged(metricColumn: MetricColumn) { + if (!metricColumn.filter) { + throw new RangeError( + 'Invariant error: require filter to exist for it to change' + ); + } + this.onMetricFilterChanged.emit({ + name: metricColumn.tag, + includeUndefined: !metricColumn.filter.includeUndefined, + filterLowerValue: metricColumn.filter.filterLowerValue, + filterUpperValue: metricColumn.filter.filterUpperValue, + }); + } + + handleMetricFilterChanged( + metricColumn: MetricColumn, + newValue: {lowerValue: number; upperValue: number} + ) { + if (!metricColumn.filter) { + throw new RangeError( + 'Invariant error: require filter to exist for it to change' + ); + } + + this.onMetricFilterChanged.emit({ + name: metricColumn.tag, + includeUndefined: metricColumn.filter.includeUndefined, + filterLowerValue: newValue.lowerValue, + filterUpperValue: newValue.upperValue, + }); + } + + trackByHparamColumn(hparamColumn: HparamColumn) { + return hparamColumn.name; + } + trackByMetricColumn(metricColumn: MetricColumn) { + return metricColumn.tag; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/runs_table_container.ts b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/runs_table_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..c4d82c54d8b390c590de50940e866c264c8b632e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/runs_table_container.ts @@ -0,0 +1,557 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component, Input, OnInit} from '@angular/core'; +import {createSelector, Store} from '@ngrx/store'; +import {DataLoadState, LoadState} from '../../../types/data'; +import {combineLatest, Observable, of} from 'rxjs'; +import {combineLatestWith, map, shareReplay} from 'rxjs/operators'; + +import {State} from '../../../app_state'; +import { + getCurrentRouteRunSelection, + getExperiment, + getExperimentIdToAliasMap, + getExperimentsHparamsAndMetrics, + getRunColorMap, + getRunHparamFilterMap, + getRunMetricFilterMap, + getRuns, + getRunSelectorPaginationOption, + getRunSelectorRegexFilter, + getRunSelectorSort, + getRunsLoadState, +} from '../../../selectors'; +import {SortDirection} from '../../../types/ui'; +import { + runColorChanged, + runDiscreteHparamFilterChanged, + runIntervalHparamFilterChanged, + runMetricFilterChanged, + runPageSelectionToggled, + runSelectionToggled, + runSelectorPaginationOptionChanged, + runSelectorRegexFilterChanged, + runSelectorSortChanged, + runsSelectAll, + runTableShown, +} from '../../actions'; +import { + DiscreteFilter, + DiscreteHparamValue, + DiscreteHparamValues, + DomainType, + IntervalFilter, +} from '../../types'; + +import { + HparamColumn, + IntervalFilterChange, + MetricColumn, +} from './runs_table_component'; +import {RunsTableColumn, RunTableItem} from './types'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +const getRunsLoading = createSelector< + State, + {experimentId: string}, + LoadState, + boolean +>(getRunsLoadState, (loadState) => loadState.state === DataLoadState.LOADING); + +function getPropsForSort( + item: RunTableItem, + sortColumn: RunsTableColumn +): Array { + switch (sortColumn) { + case RunsTableColumn.EXPERIMENT_NAME: + return [item.experimentAlias, item.run.name, item.run.id]; + case RunsTableColumn.RUN_NAME: + return [item.run.name, item.experimentAlias, item.run.id]; + default: + throw new Error(`Not yet implemented: ${sortColumn}`); + } +} + +function sortRunTableItems( + items: RunTableItem[], + sort: {column: RunsTableColumn | null; direction: SortDirection} +): RunTableItem[] { + const sortedItems = [...items]; + if (!sort.column || sort.direction === SortDirection.UNSET) { + return sortedItems; + } + + sortedItems.sort((a, b) => { + const aProps = getPropsForSort(a, sort.column!); + const bProps = getPropsForSort(b, sort.column!); + if (aProps.length !== bProps.length) { + throw new Error( + 'Invariant error: a given sort should result in same number of ' + + `items: ${sort}` + ); + } + + for (let index = 0; index < aProps.length; index++) { + const valA = aProps[index]; + const valB = bProps[index]; + if (valA === valB) { + continue; + } + + if (typeof valA !== typeof valB) { + throw new Error( + `Cannot compare values of different types: ` + + `${typeof valA} vs. ${typeof valB}` + ); + } + return valA < valB === (sort.direction === SortDirection.ASC) ? -1 : 1; + } + return 0; + }); + return sortedItems; +} + +function matchFilter( + filter: DiscreteFilter | IntervalFilter, + value: number | DiscreteHparamValue | undefined +): boolean { + if (value === undefined) { + return filter.includeUndefined; + } + if (filter.type === DomainType.DISCRETE) { + // (upcast to work around bad TypeScript libdefs) + const values: Readonly> = + filter.filterValues; + return values.includes(value); + } else if (filter.type === DomainType.INTERVAL) { + return filter.filterLowerValue <= value && value <= filter.filterUpperValue; + } + return false; +} + +/** + * Renders list of experiments. + * + * Note: all @Inputs are read once upon initialization. This component does not + * update when input bindings change. + */ +@Component({ + selector: 'runs-table', + template: ` + + `, + host: { + '[class.flex-layout]': 'useFlexibleLayout', + }, + styles: [ + ` + :host.flex-layout { + display: flex; + } + + :host.flex-layout > runs-table-component { + width: 100%; + } + `, + ], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class RunsTableContainer implements OnInit { + private allUnsortedRunTableItems$?: Observable; + loading$: Observable | null = null; + filteredItemsLength$?: Observable; + allItemsLength$?: Observable; + pageItems$?: Observable; + numSelectedItems$?: Observable; + + hparamColumns$: Observable = of([]); + metricColumns$: Observable = of([]); + + /** + * Enables a layout mode intended for scenarios when changing the # of runs + * should have no effect on the table's size. + * + * - height and width span the container height and width + * - run list scrolls vertically, not horizontally + * - 'name' cells wrap text + */ + @Input() useFlexibleLayout?: boolean = false; + + /** + * Whether to use pagination options from the store. If false, the table will + * show a single page with all runs. + */ + @Input() usePagination?: boolean = false; + + // Column to disable in the table. The columns are rendered in the order as + // defined by this input. + @Input() + columns: RunsTableColumn[] = [RunsTableColumn.RUN_NAME]; + + @Input() experimentIds!: string[]; + @Input() showHparamsAndMetrics = false; + + sortOption$ = this.store.select(getRunSelectorSort); + paginationOption$ = this.store.select(getRunSelectorPaginationOption); + regexFilter$ = this.store.select(getRunSelectorRegexFilter); + + constructor(private readonly store: Store) {} + + isExperimentNameVisible() { + return this.columns.some((column) => { + return column === RunsTableColumn.EXPERIMENT_NAME; + }); + } + + ngOnInit() { + const getRunTableItemsPerExperiment = this.experimentIds.map((id) => + this.getRunTableItemsForExperiment(id) + ); + + this.allUnsortedRunTableItems$ = combineLatest( + getRunTableItemsPerExperiment + ).pipe( + map((itemsForExperiments: RunTableItem[][]) => { + const items = [] as RunTableItem[]; + return items.concat(...itemsForExperiments); + }), + shareReplay(1) + ); + this.allItemsLength$ = this.allUnsortedRunTableItems$.pipe( + map((items) => items.length) + ); + + const getFilteredItems$ = this.getFilteredItems$( + this.allUnsortedRunTableItems$ + ).pipe(shareReplay(1)); + + this.filteredItemsLength$ = getFilteredItems$.pipe( + map((items) => items.length) + ); + this.pageItems$ = this.sortedAndSlicedItems$(getFilteredItems$); + this.numSelectedItems$ = this.allUnsortedRunTableItems$.pipe( + map((items) => { + return items.reduce((count, item) => { + return count + Number(item.selected); + }, 0); + }) + ); + + const getRunsLoadingPerExperiment = this.experimentIds.map((id) => { + return this.store.select(getRunsLoading, {experimentId: id}); + }); + this.loading$ = combineLatest(getRunsLoadingPerExperiment).pipe( + map((experimentsLoading) => { + return experimentsLoading.some((isLoading) => isLoading); + }) + ); + + if (this.showHparamsAndMetrics) { + const getHparamAndMetrics$ = this.store.select( + getExperimentsHparamsAndMetrics, + {experimentIds: this.experimentIds} + ); + + // combineLatest, when initializing, emits twice + this.hparamColumns$ = combineLatest([ + this.store.select(getRunHparamFilterMap), + getHparamAndMetrics$, + ]).pipe( + map(([filterMap, {hparams}]) => { + return hparams.map(({name, displayName, domain}) => { + const filter = filterMap.get(name); + if (!filter) { + throw new RangeError( + `Invariant error: a filter for ${name} must exist` + + ` when the hparam exists` + ); + } + return {displayName, name, filter}; + }); + }) + ); + + this.metricColumns$ = combineLatest([ + this.store.select(getRunMetricFilterMap), + getHparamAndMetrics$, + ]).pipe( + map(([filterMap, {metrics}]) => { + return metrics.map(({tag, displayName}) => { + const filter = filterMap.get(tag); + if (!filter) { + throw new RangeError( + `Invariant error: a filter for ${tag} must exist ` + + `when the metric exists` + ); + } + return {displayName, tag, filter}; + }); + }) + ); + } + + this.store.dispatch(runTableShown({experimentIds: this.experimentIds})); + } + + private getFilteredItems$(runItems$: Observable) { + return combineLatest([ + runItems$, + this.store.select(getRunSelectorRegexFilter), + ]).pipe( + map(([items, regexString]) => { + if (!regexString) { + return items; + } + + let regex: RegExp | null = null; + + // Do not break all the future updates because of malformed + // regexString. User can be still modifying it. + try { + regex = regexString ? new RegExp(regexString) : null; + } catch (e) {} + + if (!regex) { + return []; + } + + const shouldIncludeExperimentName = this.columns.includes( + RunsTableColumn.EXPERIMENT_NAME + ); + return items.filter((item) => { + if (!shouldIncludeExperimentName) { + return regex!.test(item.run.name); + } + return ( + regex!.test(item.run.name) || regex!.test(item.experimentAlias) + ); + }); + }), + combineLatestWith( + this.store.select(getRunHparamFilterMap), + this.store.select(getRunMetricFilterMap) + ), + map(([items, hparamFilters, metricFilters]) => { + if (!this.showHparamsAndMetrics) { + return items; + } + return items.filter(({hparams, metrics}) => { + const hparamMatches = [...hparamFilters.entries()].every( + ([hparamName, filter]) => { + const value = hparams.get(hparamName); + return matchFilter(filter, value); + } + ); + + return ( + hparamMatches && + [...metricFilters.entries()].every(([metricTag, filter]) => { + const value = metrics.get(metricTag); + return matchFilter(filter, value); + }) + ); + }); + }) + ); + } + + private sortedAndSlicedItems$(filteredItems$: Observable) { + const sortedItems = combineLatest([ + filteredItems$, + this.store.select(getRunSelectorSort), + ]).pipe( + map(([items, sort]) => { + const column = sort.column as RunsTableColumn | null; + const direction = sort.direction; + return sortRunTableItems(items, {column, direction}); + }) + ); + + const slicedItems = combineLatest([ + sortedItems, + this.store.select(getRunSelectorPaginationOption), + ]).pipe( + map(([items, paginationOption]) => { + if (!this.usePagination) { + return items.slice(); + } + const {pageSize, pageIndex} = paginationOption; + return items.slice(pageIndex * pageSize, (pageIndex + 1) * pageSize); + }) + ); + + return slicedItems; + } + + private getRunTableItemsForExperiment( + experimentId: string + ): Observable { + return combineLatest([ + this.store.select(getRuns, {experimentId}), + this.store.select(getExperiment, {experimentId}), + this.store.select(getCurrentRouteRunSelection), + this.store.select(getRunColorMap), + this.store.select(getExperimentIdToAliasMap), + ]).pipe( + map(([runs, experiment, selectionMap, colorMap, experimentIdToAlias]) => { + return runs.map((run) => { + const hparamMap: RunTableItem['hparams'] = new Map(); + (run.hparams || []).forEach((hparam) => { + hparamMap.set(hparam.name, hparam.value); + }); + const metricMap: RunTableItem['metrics'] = new Map(); + (run.metrics || []).forEach((metric) => { + metricMap.set(metric.tag, metric.value); + }); + return { + run, + experimentName: experiment?.name || '', + experimentAlias: experimentIdToAlias[experimentId], + selected: Boolean(selectionMap && selectionMap.get(run.id)), + runColor: colorMap[run.id], + hparams: hparamMap, + metrics: metricMap, + }; + }); + }) + ); + } + + onRunSelectionToggle(item: RunTableItem) { + this.store.dispatch( + runSelectionToggled({ + experimentIds: this.experimentIds, + runId: item.run.id, + }) + ); + } + + // When `usePagination` is false, page selection affects the single page, + // containing all items. + onPageSelectionToggle(event: {items: RunTableItem[]}) { + const {items} = event; + const runIds = items.map(({run}) => run.id); + + this.store.dispatch( + runPageSelectionToggled({ + experimentIds: this.experimentIds, + runIds, + }) + ); + } + + onSelectAllPages() { + if (!this.usePagination) { + throw new Error( + 'Select all events cannot be dispatched when pagination is disabled' + ); + } + + this.store.dispatch(runsSelectAll({experimentIds: this.experimentIds})); + } + + onPaginationChange(event: {pageIndex: number; pageSize: number}) { + if (!this.usePagination) { + throw new Error( + 'Pagination events cannot be dispatched when pagination is disabled' + ); + } + const {pageIndex, pageSize} = event; + this.store.dispatch( + runSelectorPaginationOptionChanged({pageIndex, pageSize}) + ); + } + + onSortChange(sort: {column: RunsTableColumn; direction: SortDirection}) { + this.store.dispatch(runSelectorSortChanged(sort)); + } + + onRegexFilterChange(regexString: string) { + this.store.dispatch(runSelectorRegexFilterChanged({regexString})); + } + + onRunColorChange({runId, newColor}: {runId: string; newColor: string}) { + this.store.dispatch(runColorChanged({runId, newColor})); + } + + onHparamDiscreteFilterChanged(event: { + hparamName: string; + includeUndefined: boolean; + filterValues: DiscreteHparamValues; + }) { + const {hparamName, filterValues, includeUndefined} = event; + this.store.dispatch( + runDiscreteHparamFilterChanged({ + hparamName, + filterValues, + includeUndefined, + }) + ); + } + + onHparamIntervalFilterChanged(event: IntervalFilterChange) { + const {name, filterLowerValue, filterUpperValue, includeUndefined} = event; + this.store.dispatch( + runIntervalHparamFilterChanged({ + hparamName: name, + filterLowerValue, + filterUpperValue, + includeUndefined, + }) + ); + } + + onMetricFilterChanged(event: IntervalFilterChange) { + const {name, includeUndefined, filterLowerValue, filterUpperValue} = event; + this.store.dispatch( + runMetricFilterChanged({ + metricTag: name, + includeUndefined, + filterLowerValue, + filterUpperValue, + }) + ); + } +} + +export const TEST_ONLY = { + getRunsLoading, +}; diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/runs_table_module.ts b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/runs_table_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..d8cf1aa9cfbb3e27d1602572fff2d949be3b3041 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/runs_table_module.ts @@ -0,0 +1,55 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview Module for rendering list of runs from experiments in a table. + */ + +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {MatButtonModule} from '@angular/material/button'; +import {MatCheckboxModule} from '@angular/material/checkbox'; +import {MatIconModule} from '@angular/material/icon'; +import {MatInputModule} from '@angular/material/input'; +import {MatMenuModule} from '@angular/material/menu'; +import {MatPaginatorModule} from '@angular/material/paginator'; +import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; +import {MatSortModule} from '@angular/material/sort'; +import {MatTableModule} from '@angular/material/table'; +import {ColorPickerModule} from 'ngx-color-picker'; + +import {RangeInputModule} from '../../../widgets/range_input/range_input_module'; + +import {RunsTableComponent} from './runs_table_component'; +import {RunsTableContainer} from './runs_table_container'; + +@NgModule({ + imports: [ + ColorPickerModule, + CommonModule, + MatButtonModule, + MatCheckboxModule, + MatIconModule, + MatInputModule, + MatMenuModule, + MatPaginatorModule, + MatProgressSpinnerModule, + MatSortModule, + MatTableModule, + RangeInputModule, + ], + exports: [RunsTableContainer], + declarations: [RunsTableContainer, RunsTableComponent], +}) +export class RunsTableModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/runs_table_test.ts b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/runs_table_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..3b8dab3d1c767a0a9b19c7228bc8e300a44c8d5b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/runs_table_test.ts @@ -0,0 +1,2402 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {OverlayContainer} from '@angular/cdk/overlay'; +import { + Directive, + EventEmitter, + Injectable, + NO_ERRORS_SCHEMA, + Output, +} from '@angular/core'; +import { + ComponentFixture, + fakeAsync, + flushMicrotasks, + TestBed, +} from '@angular/core/testing'; +import {MatCheckboxModule} from '@angular/material/checkbox'; +import {MatMenuModule} from '@angular/material/menu'; +import {MatPaginatorModule} from '@angular/material/paginator'; +import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; +import {MatSortModule} from '@angular/material/sort'; +import {MatTableModule} from '@angular/material/table'; +import {By} from '@angular/platform-browser'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Store} from '@ngrx/store'; +import {MockStore, provideMockStore} from '@ngrx/store/testing'; +import {DataLoadState} from '../../../types/data'; +import {of, ReplaySubject} from 'rxjs'; + +import {State} from '../../../app_state'; +import {buildExperiment} from '../../../experiments/store/testing'; +import { + getCurrentRouteRunSelection, + getExperiment, + getExperimentIdToAliasMap, + getExperimentsHparamsAndMetrics, + getRunColorMap, + getRunHparamFilterMap, + getRunMetricFilterMap, + getRuns, + getRunSelectorPaginationOption, + getRunSelectorRegexFilter, + getRunSelectorSort, + getRunsLoadState, +} from '../../../selectors'; +import {sendKeys} from '../../../testing/dom'; +import {MatIconTestingModule} from '../../../testing/mat_icon_module'; +import {SortDirection} from '../../../types/ui'; +import {RangeInputModule} from '../../../widgets/range_input/range_input_module'; +import { + runColorChanged, + runDiscreteHparamFilterChanged, + runIntervalHparamFilterChanged, + runMetricFilterChanged, + runPageSelectionToggled, + runSelectionToggled, + runSelectorPaginationOptionChanged, + runSelectorRegexFilterChanged, + runSelectorSortChanged, + runsSelectAll, + runTableShown, +} from '../../actions'; +import {DomainType} from '../../data_source/runs_data_source_types'; +import {Run} from '../../store/runs_types'; +import { + buildDiscreteFilter, + buildHparamSpec, + buildIntervalFilter, + buildMetricSpec, + buildRun, +} from '../../store/testing'; +import {DiscreteFilter, IntervalFilter} from '../../types'; + +import {RunsTableComponent} from './runs_table_component'; +import {RunsTableContainer, TEST_ONLY} from './runs_table_container'; +import {HparamSpec, MetricSpec, RunsTableColumn} from './types'; + +@Injectable() +class ColorPickerTestHelper { + private readonly onColorPickerChanges: Array<(color: string) => void> = []; + + /** + * Triggers `colorPickerChange` on the TestableColorPicker. Since the + * ColorPicker does not know about `run` and there can be many instances of + * the picker, we use index of registered components. + */ + triggerColorPickerChangeForTest(index: number, newColor: string) { + if (!this.onColorPickerChanges[index]) { + throw new Error( + 'Expected `internalSetOnColorPickerChange` to have been ' + + 'called before calling `triggerColorPickerChangeForTest`.' + ); + } + this.onColorPickerChanges[index](newColor); + } + + internalSetOnColorPickerChange(callback: (color: string) => void) { + this.onColorPickerChanges.push(callback); + } +} + +/** + * ColorPickerModule is not provider in test due to template compilation issue. + * This provides very simple version that can trigger changed event + * programmatically. + */ +@Directive({ + selector: '[colorPicker]', +}) +class TestableColorPicker { + @Output() colorPickerChange = new EventEmitter(); + constructor(testHelper: ColorPickerTestHelper) { + testHelper.internalSetOnColorPickerChange((color: string) => { + this.colorPickerChange.emit(color); + }); + } +} + +describe('runs_table', () => { + let store: MockStore; + let dispatchSpy: jasmine.Spy; + let overlayContainer: OverlayContainer; + + function createComponent( + experimentIds: string[], + columns?: RunsTableColumn[], + usePagination?: boolean + ) { + const fixture = TestBed.createComponent(RunsTableContainer); + fixture.componentInstance.experimentIds = experimentIds; + if (columns) { + fixture.componentInstance.columns = columns; + } + fixture.componentInstance.usePagination = usePagination; + fixture.detectChanges(); + + return fixture; + } + + function getTableRowTextContent( + fixture: ComponentFixture + ) { + const rows = [...fixture.nativeElement.querySelectorAll('tbody tr')]; + return rows.map((row) => { + const columns = [...row.querySelectorAll('td')]; + return columns.map((column) => column.textContent.trim()); + }); + } + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + MatCheckboxModule, + MatIconTestingModule, + MatMenuModule, + MatPaginatorModule, + MatProgressSpinnerModule, + MatSortModule, + MatTableModule, + NoopAnimationsModule, + RangeInputModule, + ], + declarations: [ + RunsTableComponent, + RunsTableContainer, + RunsTableContainer, + TestableColorPicker, + ], + providers: [provideMockStore(), ColorPickerTestHelper], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + + store = TestBed.inject>(Store) as MockStore; + store.overrideSelector(getRuns, []); + store.overrideSelector(getRunsLoadState, { + state: DataLoadState.NOT_LOADED, + lastLoadedTimeInMs: null, + }); + store.overrideSelector(getExperiment, null); + store.overrideSelector(getCurrentRouteRunSelection, new Map()); + store.overrideSelector(getRunSelectorPaginationOption, { + pageIndex: 0, + pageSize: 10, + }); + store.overrideSelector(getRunSelectorRegexFilter, ''); + store.overrideSelector(getRunSelectorSort, { + column: null, + direction: SortDirection.UNSET, + }); + store.overrideSelector(getRunColorMap, {}); + store.overrideSelector(getExperimentIdToAliasMap, { + rowling: 'Harry Potter', + tolkien: 'The Lord of the Rings', + }); + store.overrideSelector(getRunHparamFilterMap, new Map()); + store.overrideSelector(getRunMetricFilterMap, new Map()); + store.overrideSelector(getExperimentsHparamsAndMetrics, { + hparams: [], + metrics: [], + }); + dispatchSpy = spyOn(store, 'dispatch'); + overlayContainer = TestBed.inject(OverlayContainer); + }); + + describe('list renders', () => { + let selectSpy: jasmine.Spy; + + beforeEach(() => { + // To make sure we only return the runs when called with the right props. + selectSpy = spyOn(store, 'select').and.callThrough(); + }); + + it('renders list of runs in a table', async () => { + selectSpy + .withArgs(TEST_ONLY.getRunsLoading, {experimentId: 'book'}) + .and.returnValue(of(false)); + selectSpy + .withArgs(getRuns, {experimentId: 'book'}) + .and.returnValue( + of([ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + ]) + ); + selectSpy.withArgs(getExperiment, {experimentId: 'book'}).and.returnValue( + of( + buildExperiment({ + name: 'Harry Potter', + }) + ) + ); + store.overrideSelector(getExperimentIdToAliasMap, {book: 'Harry Potter'}); + + const fixture = createComponent( + ['book'], + [RunsTableColumn.EXPERIMENT_NAME, RunsTableColumn.RUN_NAME] + ); + fixture.detectChanges(); + await fixture.whenStable(); + + // mat-table's content somehow does not end up in DebugElement. + const rows = fixture.nativeElement.querySelectorAll('tbody tr'); + expect(rows.length).toBe(2); + + const [book1, book2] = rows; + expect( + [...book1.querySelectorAll('td')].map((node) => node.textContent) + ).toEqual(['Harry Potter', "The Philosopher's Stone"]); + + expect( + [...book2.querySelectorAll('td')].map((node) => node.textContent) + ).toEqual(['Harry Potter', 'The Chamber Of Secrets']); + }); + + it('dispatches `runTableShown` when shown', () => { + const fixture = createComponent( + ['book'], + [RunsTableColumn.EXPERIMENT_NAME, RunsTableColumn.RUN_NAME] + ); + fixture.detectChanges(); + + expect(dispatchSpy).toHaveBeenCalledWith( + runTableShown({ + experimentIds: ['book'], + }) + ); + }); + + it('concats runs from multiple experimentIds into the table', async () => { + selectSpy + .withArgs(TEST_ONLY.getRunsLoading, {experimentId: 'rowling'}) + .and.returnValue(of(false)); + selectSpy + .withArgs(getRuns, {experimentId: 'rowling'}) + .and.returnValue( + of([ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + ]) + ); + selectSpy + .withArgs(TEST_ONLY.getRunsLoading, {experimentId: 'tolkien'}) + .and.returnValue(of(false)); + selectSpy + .withArgs(getRuns, {experimentId: 'tolkien'}) + .and.returnValue( + of([buildRun({id: 'book3', name: 'The Fellowship of the Ring'})]) + ); + selectSpy + .withArgs(getExperiment, {experimentId: 'rowling'}) + .and.returnValue( + of( + buildExperiment({ + name: 'Harry Potter', + }) + ) + ); + selectSpy + .withArgs(getExperiment, {experimentId: 'tolkien'}) + .and.returnValue( + of( + buildExperiment({ + name: 'The Lord of the Rings', + }) + ) + ); + store.overrideSelector(getExperimentIdToAliasMap, { + rowling: 'HP', + tolkien: 'LoTR', + }); + + const fixture = createComponent( + ['tolkien', 'rowling'], + [RunsTableColumn.EXPERIMENT_NAME, RunsTableColumn.RUN_NAME] + ); + fixture.detectChanges(); + await fixture.whenStable(); + + // mat-table's content somehow does not end up in DebugElement. + const rows = fixture.nativeElement.querySelectorAll('tbody tr'); + expect(rows.length).toBe(3); + + const [book1, book2, book3] = rows; + expect( + [...book1.querySelectorAll('td')].map((node) => node.textContent) + ).toEqual(['LoTR', 'The Fellowship of the Ring']); + expect( + [...book2.querySelectorAll('td')].map((node) => node.textContent) + ).toEqual(['HP', "The Philosopher's Stone"]); + expect( + [...book3.querySelectorAll('td')].map((node) => node.textContent) + ).toEqual(['HP', 'The Chamber Of Secrets']); + }); + + it('honors the order of `columns` when rendering', async () => { + selectSpy + .withArgs(TEST_ONLY.getRunsLoading, {experimentId: 'book'}) + .and.returnValue(of(false)); + selectSpy + .withArgs(getRuns, {experimentId: 'book'}) + .and.returnValue( + of([buildRun({id: 'book1', name: 'The Fellowship of the Ring'})]) + ); + store.overrideSelector(getExperimentIdToAliasMap, { + book: 'The Lord of the Rings', + }); + const fixture = createComponent( + ['book'], + [RunsTableColumn.RUN_NAME, RunsTableColumn.EXPERIMENT_NAME] + ); + fixture.detectChanges(); + await fixture.whenStable(); + + // mat-table's content somehow does not end up in DebugElement. + const [book1] = fixture.nativeElement.querySelectorAll('tbody tr'); + expect( + [...book1.querySelectorAll('td')].map((node) => node.textContent) + ).toEqual(['The Fellowship of the Ring', 'The Lord of the Rings']); + }); + + it('updates the list of runs', async () => { + // To make sure we only return the runs when called with the right props. + const runs = new ReplaySubject(1); + selectSpy + .withArgs(TEST_ONLY.getRunsLoading, {experimentId: 'book'}) + .and.returnValue(of(false)); + selectSpy.withArgs(getRuns, {experimentId: 'book'}).and.returnValue(runs); + + runs.next([ + buildRun({id: 'Harry', name: 'Harry'}), + buildRun({id: 'Potter', name: 'Potter'}), + ]); + const fixture = createComponent(['book']); + fixture.detectChanges(); + await fixture.whenStable(); + + const rowsBefore = fixture.nativeElement.querySelectorAll('tbody tr'); + expect(rowsBefore.length).toBe(2); + + runs.next([buildRun({id: 'Potter', name: 'Potter'})]); + fixture.detectChanges(); + + const rowsAfter = fixture.nativeElement.querySelectorAll('tbody tr'); + expect(rowsAfter.length).toBe(1); + const [potter] = rowsAfter; + expect(potter.querySelector('td').textContent).toBe('Potter'); + }); + + it('renders checkboxes according to the map', async () => { + selectSpy + .withArgs(TEST_ONLY.getRunsLoading, {experimentId: 'book'}) + .and.returnValue(of(false)); + selectSpy + .withArgs(getRuns, {experimentId: 'book'}) + .and.returnValue( + of([ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + ]) + ); + selectSpy.withArgs(getCurrentRouteRunSelection).and.returnValue( + of( + new Map([ + ['book1', true], + ['book2', false], + ]) + ) + ); + + const fixture = createComponent( + ['book'], + [RunsTableColumn.CHECKBOX, RunsTableColumn.RUN_NAME] + ); + fixture.detectChanges(); + await fixture.whenStable(); + + // mat-table's content somehow does not end up in DebugElement. + const [book1, book2] = fixture.nativeElement.querySelectorAll('tbody tr'); + expect(book1.querySelector('mat-checkbox input').checked).toBe(true); + expect(book2.querySelector('mat-checkbox input').checked).toBe(false); + }); + + it('renders run colors', () => { + selectSpy + .withArgs(TEST_ONLY.getRunsLoading, {experimentId: 'book'}) + .and.returnValue(of(false)); + selectSpy + .withArgs(getRuns, {experimentId: 'book'}) + .and.returnValue( + of([ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + ]) + ); + store.overrideSelector(getExperimentIdToAliasMap, { + book: "The Philosopher's Stone", + }); + store.overrideSelector( + getCurrentRouteRunSelection, + new Map([ + ['book1', true], + ['book2', false], + ]) + ); + store.overrideSelector(getRunColorMap, { + book1: '#000', + }); + + const fixture = createComponent( + ['book'], + [RunsTableColumn.RUN_NAME, RunsTableColumn.RUN_COLOR] + ); + fixture.detectChanges(); + + const [book1, book2] = fixture.nativeElement.querySelectorAll('tbody tr'); + const [book1Name, book1Color] = book1.querySelectorAll('td'); + expect(book1Name.textContent).toBe("The Philosopher's Stone"); + expect(book1Color.querySelector('button').style.background).toBe( + 'rgb(0, 0, 0)' + ); + expect( + book1Color.querySelector('button').classList.contains('no-color') + ).toBe(false); + + const [book2Name, book2Color] = book2.querySelectorAll('td'); + expect(book2Name.textContent).toBe('The Chamber Of Secrets'); + expect(book2Color.querySelector('button').style.background).toBe(''); + expect( + book2Color.querySelector('button').classList.contains('no-color') + ).toBe(true); + }); + + it('dispatches `runColorChanged` when color changes', () => { + const testHelper = TestBed.inject(ColorPickerTestHelper); + selectSpy + .withArgs(TEST_ONLY.getRunsLoading, {experimentId: 'book'}) + .and.returnValue(of(false)); + selectSpy + .withArgs(getRuns, {experimentId: 'book'}) + .and.returnValue(of([buildRun({id: 'book1', name: 'Book name'})])); + store.overrideSelector(getRunColorMap, { + book1: '#000', + }); + + const fixture = createComponent( + ['book'], + [RunsTableColumn.RUN_NAME, RunsTableColumn.RUN_COLOR] + ); + fixture.detectChanges(); + + testHelper.triggerColorPickerChangeForTest(0, '#ccc'); + expect(dispatchSpy).toHaveBeenCalledWith( + runColorChanged({ + runId: 'book1', + newColor: '#ccc', + }) + ); + }); + }); + + describe('loading', () => { + it('renders loading indicator when at least one content is loading', () => { + const selectSpy = spyOn(store, 'select'); + selectSpy.and.callThrough(); + selectSpy + .withArgs(getRunsLoadState, {experimentId: 'book'}) + .and.returnValue( + of({state: DataLoadState.LOADING, lastLoadedTimeInMs: null}) + ); + selectSpy + .withArgs(getRunsLoadState, {experimentId: 'movie'}) + .and.returnValue( + of({state: DataLoadState.LOADED, lastLoadedTimeInMs: 0}) + ); + + const fixture = createComponent(['book', 'movie']); + fixture.detectChanges(); + + const spinner = fixture.debugElement.query(By.css('mat-spinner')); + expect(spinner).toBeDefined(); + }); + + it('does not render spinner when everything is loaded', () => { + const selectSpy = spyOn(store, 'select'); + selectSpy.and.callThrough(); + selectSpy + .withArgs(getRunsLoadState, {experimentId: 'book'}) + .and.returnValue( + of({state: DataLoadState.LOADED, lastLoadedTimeInMs: 0}) + ); + selectSpy + .withArgs(getRunsLoadState, {experimentId: 'movie'}) + .and.returnValue( + of({state: DataLoadState.LOADED, lastLoadedTimeInMs: 0}) + ); + + const fixture = createComponent(['book', 'movie']); + fixture.detectChanges(); + + const spinner = fixture.debugElement.query(By.css('mat-spinner')); + expect(spinner).toBeNull(); + }); + }); + + describe('empty', () => { + it('does not render no runs text when content is loading', () => { + store.overrideSelector(getRunsLoadState, { + state: DataLoadState.LOADING, + lastLoadedTimeInMs: null, + }); + store.overrideSelector(getRuns, []); + const fixture = createComponent(['book']); + fixture.detectChanges(); + + const spinner = fixture.debugElement.query(By.css('no-runs')); + expect(spinner).toBeNull(); + }); + + it('renders no runs when content is loading', () => { + store.overrideSelector(getRunsLoadState, { + state: DataLoadState.LOADING, + lastLoadedTimeInMs: null, + }); + store.overrideSelector(getRuns, []); + const fixture = createComponent(['book']); + fixture.detectChanges(); + + const spinner = fixture.debugElement.query(By.css('no-runs')); + expect(spinner).toBeDefined(); + }); + }); + + describe('paginator', () => { + /** + * Updates the mat-table and mat-paginator. Must be called inside a + * fakeAsync. + * + * 1. detectChanges causes mat-table to update which... + * 2. triggers Promise.resolve to update the mat-paginator in the + * table-data-source [1]. So we use flushMicroTask to synchronously + * resolve the promise. It marks the paginator dirty, so... + * 3. detectChanges to check for dirty DOM and update the paginator. + * [1]: + * https://github.com/angular/components/blob/master/src/material/table/table-data-source.ts#L301 + */ + function updateTableAndPaginator( + fixture: ComponentFixture + ) { + fixture.detectChanges(); + flushMicrotasks(); + fixture.detectChanges(); + } + + function createAndSetRuns(numberOfRuns: number) { + const runs = Array.from({length: numberOfRuns}).map( + (notUsed, index) => { + const name = `run_${index}`; + return buildRun({ + id: name, + name, + }); + } + ); + store.overrideSelector(getRuns, runs); + } + + beforeEach(() => { + // Limit the page size to 5. + store.overrideSelector(getRunSelectorPaginationOption, { + pageIndex: 0, + pageSize: 5, + }); + }); + + it('shows all items without pagination by default', () => { + store.overrideSelector(getRunSelectorPaginationOption, { + pageIndex: 0, + pageSize: 2, + }); + createAndSetRuns(5); + const fixture = createComponent(['book']); + fixture.detectChanges(); + + const rows = fixture.nativeElement.querySelectorAll('tbody tr'); + expect(rows.length).toBe(5); + expect( + fixture.debugElement.query(By.css('mat-paginator')) + ).not.toBeTruthy(); + expect(getTableRowTextContent(fixture)).toEqual([ + ['run_0'], + ['run_1'], + ['run_2'], + ['run_3'], + ['run_4'], + ]); + }); + + it('displays the correct text on the paginator', () => { + const fixture = createComponent( + ['book'], + undefined, + true /* usePagination */ + ); + fixture.detectChanges(); + + const label = fixture.debugElement.query( + By.css('.mat-paginator-page-size-label') + ); + expect(label.nativeElement.textContent).toContain('Show runs:'); + }); + + it('fires action when pressing next, last, first button', fakeAsync(() => { + const PAGE_SIZE = 5; + const NUM_PAGES = 4; + store.overrideSelector(getRunSelectorPaginationOption, { + pageIndex: 1, + pageSize: PAGE_SIZE, + }); + createAndSetRuns(PAGE_SIZE * NUM_PAGES); + const fixture = createComponent( + ['book'], + undefined, + true /* usePagination */ + ); + updateTableAndPaginator(fixture); + + const rows = fixture.nativeElement.querySelectorAll('tbody tr'); + // By default, mat-paginator take the lowest pageSizeOptions. + expect(rows.length).toBe(PAGE_SIZE); + const [beforeFirstEl] = rows; + expect(beforeFirstEl.querySelector('td').textContent).toBe('run_5'); + + fixture.debugElement + .query(By.css('[aria-label="Next page"]')) + .nativeElement.click(); + expect(dispatchSpy).toHaveBeenCalledWith( + runSelectorPaginationOptionChanged({ + pageIndex: 2, + pageSize: PAGE_SIZE, + }) + ); + + fixture.debugElement + .query(By.css('[aria-label="Last page"]')) + .nativeElement.click(); + expect(dispatchSpy).toHaveBeenCalledWith( + runSelectorPaginationOptionChanged({ + // index starts from 0. + pageIndex: NUM_PAGES - 1, + pageSize: PAGE_SIZE, + }) + ); + + fixture.debugElement + .query(By.css('[aria-label="First page"]')) + .nativeElement.click(); + expect(dispatchSpy).toHaveBeenCalledWith( + runSelectorPaginationOptionChanged({ + pageIndex: 0, + pageSize: PAGE_SIZE, + }) + ); + })); + + it('shows content from other pages', fakeAsync(() => { + store.overrideSelector(getRunSelectorPaginationOption, { + pageIndex: 0, + pageSize: 5, + }); + createAndSetRuns(20); + const fixture = createComponent( + ['book'], + undefined, + true /* usePagination */ + ); + updateTableAndPaginator(fixture); + + const rows = fixture.nativeElement.querySelectorAll('tbody tr'); + // By default, mat-paginator take the lowest pageSizeOptions. + expect(rows.length).toBe(5); + const [beforeFirstEl] = rows; + expect(beforeFirstEl.querySelector('td').textContent).toBe('run_0'); + + store.overrideSelector(getRunSelectorPaginationOption, { + pageIndex: 1, + pageSize: 5, + }); + store.refreshState(); + fixture.detectChanges(); + + expect(getTableRowTextContent(fixture)).toEqual([ + ['run_5'], + ['run_6'], + ['run_7'], + ['run_8'], + ['run_9'], + ]); + store.overrideSelector(getRunSelectorPaginationOption, { + pageIndex: 1, + pageSize: 3, + }); + store.refreshState(); + fixture.detectChanges(); + + expect(getTableRowTextContent(fixture)).toEqual([ + ['run_3'], + ['run_4'], + ['run_5'], + ]); + })); + + it('shows correct number of items when filtering', fakeAsync(() => { + store.overrideSelector(getRunSelectorPaginationOption, { + pageIndex: 1, + pageSize: 5, + }); + store.overrideSelector(getRunSelectorRegexFilter, 'run_[0-9]$'); + createAndSetRuns(20); + const fixture = createComponent( + ['book'], + undefined, + true /* usePagination */ + ); + updateTableAndPaginator(fixture); + + const label = fixture.nativeElement.querySelector( + '.mat-paginator-range-label' + ); + // By default, mat-paginator take the lowest pageSizeOptions. + expect(label.textContent).toContain('6 – 10 of 10'); + + store.overrideSelector(getRunSelectorPaginationOption, { + pageIndex: 0, + pageSize: 5, + }); + store.overrideSelector(getRunSelectorRegexFilter, 'run_[4-6]'); + store.refreshState(); + updateTableAndPaginator(fixture); + + expect(label.textContent).toContain('1 – 3 of 3'); + })); + }); + + describe('sort', () => { + let selectSpy: jasmine.Spy; + + beforeEach(() => { + // To make sure we only return the runs when called with the right props. + selectSpy = spyOn(store, 'select').and.callThrough(); + }); + + it('dispatches action when sorting', () => { + selectSpy + .withArgs(TEST_ONLY.getRunsLoading, jasmine.any) + .and.returnValue(of(false)); + selectSpy + .withArgs(getRuns, {experimentId: 'rowling'}) + .and.returnValue( + of([ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + ]) + ); + + const fixture = createComponent( + ['rowling'], + [RunsTableColumn.EXPERIMENT_NAME, RunsTableColumn.RUN_NAME] + ); + fixture.detectChanges(); + + const [expButton, runButton] = fixture.nativeElement.querySelectorAll( + 'th .mat-sort-header-container' + ); + + expButton.click(); + expect(dispatchSpy).toHaveBeenCalledWith( + runSelectorSortChanged({ + column: 'experiment_name', + direction: SortDirection.ASC, + }) + ); + + runButton.click(); + expect(dispatchSpy).toHaveBeenCalledWith( + runSelectorSortChanged({ + column: 'run_name', + direction: SortDirection.ASC, + }) + ); + }); + + it('sorts by experiment name', () => { + const sortSubject = new ReplaySubject<{ + column: RunsTableColumn; + direction: SortDirection; + }>(1); + sortSubject.next({ + column: RunsTableColumn.EXPERIMENT_NAME, + direction: SortDirection.UNSET, + }); + selectSpy.withArgs(getRunSelectorSort).and.returnValue(sortSubject); + selectSpy + .withArgs(TEST_ONLY.getRunsLoading, jasmine.any) + .and.returnValue(of(false)); + selectSpy + .withArgs(getRuns, {experimentId: 'rowling'}) + .and.returnValue( + of([ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + ]) + ); + store.overrideSelector(getExperimentIdToAliasMap, { + rowling: 'Harry Potter', + tolkien: 'The Lord of the Rings', + }); + selectSpy + .withArgs(getRuns, {experimentId: 'tolkien'}) + .and.returnValue( + of([buildRun({id: 'book3', name: 'The Fellowship of the Ring'})]) + ); + + const fixture = createComponent( + ['rowling', 'tolkien'], + [RunsTableColumn.EXPERIMENT_NAME, RunsTableColumn.RUN_NAME] + ); + fixture.detectChanges(); + + expect(getTableRowTextContent(fixture)).toEqual([ + ['Harry Potter', "The Philosopher's Stone"], + ['Harry Potter', 'The Chamber Of Secrets'], + ['The Lord of the Rings', 'The Fellowship of the Ring'], + ]); + + sortSubject.next({ + column: RunsTableColumn.EXPERIMENT_NAME, + direction: SortDirection.ASC, + }); + fixture.detectChanges(); + + expect(getTableRowTextContent(fixture)).toEqual([ + ['Harry Potter', 'The Chamber Of Secrets'], + ['Harry Potter', "The Philosopher's Stone"], + ['The Lord of the Rings', 'The Fellowship of the Ring'], + ]); + + sortSubject.next({ + column: RunsTableColumn.EXPERIMENT_NAME, + direction: SortDirection.DESC, + }); + fixture.detectChanges(); + + expect(getTableRowTextContent(fixture)).toEqual([ + ['The Lord of the Rings', 'The Fellowship of the Ring'], + ['Harry Potter', "The Philosopher's Stone"], + ['Harry Potter', 'The Chamber Of Secrets'], + ]); + }); + + it('sorts by run name', () => { + const sortSubject = new ReplaySubject<{ + column: RunsTableColumn; + direction: SortDirection; + }>(1); + sortSubject.next({ + column: RunsTableColumn.RUN_NAME, + direction: SortDirection.UNSET, + }); + selectSpy.withArgs(getRunSelectorSort).and.returnValue(sortSubject); + selectSpy + .withArgs(TEST_ONLY.getRunsLoading, jasmine.any) + .and.returnValue(of(false)); + selectSpy + .withArgs(getRuns, {experimentId: 'rowling'}) + .and.returnValue( + of([ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + buildRun({id: 'book3', name: "The Philosopher's Stone"}), + ]) + ); + store.overrideSelector(getExperimentIdToAliasMap, { + rowling: 'Harry Potter', + tolkien: 'The Lord of the Rings', + }); + selectSpy + .withArgs(getRuns, {experimentId: 'tolkien'}) + .and.returnValue( + of([buildRun({id: 'book3', name: 'The Fellowship of the Ring'})]) + ); + + const fixture = createComponent( + ['rowling', 'tolkien'], + [RunsTableColumn.EXPERIMENT_NAME, RunsTableColumn.RUN_NAME] + ); + fixture.detectChanges(); + + expect(getTableRowTextContent(fixture)).toEqual([ + ['Harry Potter', "The Philosopher's Stone"], + ['Harry Potter', 'The Chamber Of Secrets'], + ['Harry Potter', "The Philosopher's Stone"], + ['The Lord of the Rings', 'The Fellowship of the Ring'], + ]); + + sortSubject.next({ + column: RunsTableColumn.RUN_NAME, + direction: SortDirection.ASC, + }); + fixture.detectChanges(); + + expect(getTableRowTextContent(fixture)).toEqual([ + ['Harry Potter', 'The Chamber Of Secrets'], + ['The Lord of the Rings', 'The Fellowship of the Ring'], + ['Harry Potter', "The Philosopher's Stone"], + ['Harry Potter', "The Philosopher's Stone"], + ]); + + sortSubject.next({ + column: RunsTableColumn.RUN_NAME, + direction: SortDirection.DESC, + }); + fixture.detectChanges(); + + expect(getTableRowTextContent(fixture)).toEqual([ + ['Harry Potter', "The Philosopher's Stone"], + ['Harry Potter', "The Philosopher's Stone"], + ['The Lord of the Rings', 'The Fellowship of the Ring'], + ['Harry Potter', 'The Chamber Of Secrets'], + ]); + }); + }); + + describe('regex filtering', () => { + let selectSpy: jasmine.Spy; + + beforeEach(() => { + // To make sure we only return the runs when called with the right props. + selectSpy = spyOn(store, 'select').and.callThrough(); + }); + + [ + { + regexString: '', + expectedTableContent: [ + ['Harry Potter', "The Philosopher's Stone"], + ['Harry Potter', 'The Chamber Of Secrets'], + ['The Lord of the Rings', 'The Fellowship of the Ring'], + ['The Lord of the Rings', 'The Silmarillion'], + ], + }, + { + regexString: '.*', + expectedTableContent: [ + ['Harry Potter', "The Philosopher's Stone"], + ['Harry Potter', 'The Chamber Of Secrets'], + ['The Lord of the Rings', 'The Fellowship of the Ring'], + ['The Lord of the Rings', 'The Silmarillion'], + ], + }, + { + regexString: '.+arr', + expectedTableContent: [ + ['Harry Potter', "The Philosopher's Stone"], + ['Harry Potter', 'The Chamber Of Secrets'], + ], + }, + { + regexString: 'mar', + expectedTableContent: [['The Lord of the Rings', 'The Silmarillion']], + }, + { + regexString: '[m,H]ar', + expectedTableContent: [ + ['Harry Potter', "The Philosopher's Stone"], + ['Harry Potter', 'The Chamber Of Secrets'], + ['The Lord of the Rings', 'The Silmarillion'], + ], + }, + ].forEach(({regexString, expectedTableContent}) => { + it(`filters with regex string: ${regexString}`, () => { + const filterSubject = new ReplaySubject(1); + filterSubject.next(''); + selectSpy + .withArgs(getRunSelectorRegexFilter) + .and.returnValue(filterSubject); + selectSpy + .withArgs(TEST_ONLY.getRunsLoading, jasmine.any) + .and.returnValue(of(false)); + selectSpy + .withArgs(getRuns, {experimentId: 'rowling'}) + .and.returnValue( + of([ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + ]) + ); + store.overrideSelector(getExperimentIdToAliasMap, { + rowling: 'Harry Potter', + tolkien: 'The Lord of the Rings', + }); + selectSpy + .withArgs(getRuns, {experimentId: 'tolkien'}) + .and.returnValue( + of([ + buildRun({id: 'book3', name: 'The Fellowship of the Ring'}), + buildRun({id: 'book4', name: 'The Silmarillion'}), + ]) + ); + + filterSubject.next(regexString); + + const fixture = createComponent( + ['rowling', 'tolkien'], + [RunsTableColumn.EXPERIMENT_NAME, RunsTableColumn.RUN_NAME] + ); + fixture.detectChanges(); + + expect(getTableRowTextContent(fixture)).toEqual(expectedTableContent); + }); + }); + + it('filters only by run name when experiment column is omitted', () => { + selectSpy + .withArgs(TEST_ONLY.getRunsLoading, jasmine.any) + .and.returnValue(of(false)); + selectSpy + .withArgs(getRuns, {experimentId: 'rowling'}) + .and.returnValue( + of([ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + ]) + ); + selectSpy + .withArgs(getRuns, {experimentId: 'tolkien'}) + .and.returnValue( + of([ + buildRun({id: 'book3', name: 'The Fellowship of the Ring'}), + buildRun({id: 'book4', name: 'The Silmarillion'}), + ]) + ); + // If experiment name were to be matched, it would match "Lord". + store.overrideSelector(getRunSelectorRegexFilter, 'o\\w*r'); + + const fixture = createComponent( + ['rowling', 'tolkien'], + [RunsTableColumn.RUN_NAME] + ); + fixture.detectChanges(); + + expect(getTableRowTextContent(fixture)).toEqual([ + ["The Philosopher's Stone"], + ]); + }); + + it('does not break app when regex string is illegal RegExp', () => { + selectSpy + .withArgs(getRuns, {experimentId: 'rowling'}) + .and.returnValue( + of([ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + ]) + ); + selectSpy + .withArgs(getRuns, {experimentId: 'tolkien'}) + .and.returnValue( + of([ + buildRun({id: 'book3', name: 'The Fellowship of the Ring'}), + buildRun({id: 'book4', name: 'The Silmarillion'}), + ]) + ); + store.overrideSelector(getExperimentIdToAliasMap, { + rowling: 'Harry Potter', + tolkien: 'The Lord of the Rings', + }); + + // Square bracket needs to be closed. + store.overrideSelector(getRunSelectorRegexFilter, '[The Fellow'); + + const fixture = createComponent( + ['rowling', 'tolkien'], + [RunsTableColumn.EXPERIMENT_NAME, RunsTableColumn.RUN_NAME] + ); + fixture.detectChanges(); + + // Renders an empty table when there is an error. + expect(getTableRowTextContent(fixture)).toEqual([]); + + // Test the update afterwards and see if it works. + store.overrideSelector(getRunSelectorRegexFilter, 'The Fellow'); + store.refreshState(); + fixture.detectChanges(); + + expect(getTableRowTextContent(fixture)).toEqual([ + ['The Lord of the Rings', 'The Fellowship of the Ring'], + ]); + }); + + it('does not render select all when no items match the regex', () => { + selectSpy + .withArgs(getRuns, {experimentId: 'rowling'}) + .and.returnValue( + of([ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + ]) + ); + store.overrideSelector(getExperimentIdToAliasMap, { + rowling: 'Harry Potter', + }); + + store.overrideSelector(getRunSelectorRegexFilter, 'YOUWILLNOTMATCHME'); + + const fixture = createComponent( + ['rowling'], + [RunsTableColumn.EXPERIMENT_NAME, RunsTableColumn.RUN_NAME] + ); + fixture.detectChanges(); + + // Renders an empty table when there is an error. + expect(getTableRowTextContent(fixture)).toEqual([]); + + expect( + fixture.nativeElement.querySelector('.show-select-all') + ).toBeNull(); + }); + + it('dispatches action when user types on the input field', () => { + selectSpy + .withArgs(getRuns, {experimentId: 'rowling'}) + .and.returnValue( + of([ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + ]) + ); + + // Square bracket needs to be closed. + store.overrideSelector(getRunSelectorRegexFilter, '[The Fellow'); + + const fixture = createComponent( + ['rowling'], + [RunsTableColumn.EXPERIMENT_NAME, RunsTableColumn.RUN_NAME] + ); + fixture.detectChanges(); + + sendKeys(fixture, fixture.debugElement.query(By.css('input')), 'hA'); + + expect(dispatchSpy).toHaveBeenCalledWith( + runSelectorRegexFilterChanged({ + regexString: 'hA', + }) + ); + }); + + it('shows no match string when regex does not match any item', () => { + selectSpy + .withArgs(getRuns, {experimentId: 'rowling'}) + .and.returnValue( + of([ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + ]) + ); + store.overrideSelector(getExperimentIdToAliasMap, { + rowling: 'Harry Potter', + }); + + store.overrideSelector(getRunSelectorRegexFilter, 'DO_NOT_MATCH'); + + const fixture = createComponent( + ['rowling'], + [RunsTableColumn.EXPERIMENT_NAME, RunsTableColumn.RUN_NAME] + ); + fixture.detectChanges(); + + expect( + fixture.debugElement.query(By.css('.no-runs')).nativeElement.textContent + ).toContain('No runs match "DO_NOT_MATCH"'); + }); + }); + + describe('checkbox', () => { + it('renders header checkbox as check when all items in a page are selected', () => { + store.overrideSelector(getRunSelectorPaginationOption, { + pageIndex: 0, + pageSize: 2, + }); + // pageSize is 2 so book3 is out of current page. + store.overrideSelector( + getCurrentRouteRunSelection, + new Map([ + ['book1', true], + ['book2', true], + ['book3', false], + ]) + ); + store.overrideSelector(getRuns, [ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + buildRun({id: 'book3', name: 'The Prisoner of Azkaban'}), + ]); + store.overrideSelector(getExperimentIdToAliasMap, { + rowling: 'Harry Potter', + }); + + const fixture = createComponent( + ['rowling'], + [RunsTableColumn.CHECKBOX, RunsTableColumn.RUN_NAME], + true /* usePagination */ + ); + fixture.detectChanges(); + + const checkbox = fixture.nativeElement.querySelector( + 'thead mat-checkbox' + ); + + expect(checkbox.classList.contains('mat-checkbox-checked')).toBe(true); + }); + + it( + 'renders header checkbox as a line when partial items in a page are ' + + 'selected', + async () => { + store.overrideSelector(getRunSelectorPaginationOption, { + pageIndex: 0, + pageSize: 2, + }); + store.overrideSelector( + getCurrentRouteRunSelection, + new Map([ + ['book1', true], + ['book2', false], + ['book3', true], + ]) + ); + store.overrideSelector(getRuns, [ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + buildRun({id: 'book3', name: 'The Prisoner of Azkaban'}), + ]); + + const fixture = createComponent( + ['rowling'], + [RunsTableColumn.CHECKBOX, RunsTableColumn.RUN_NAME], + true /* usePagination */ + ); + fixture.detectChanges(); + + const checkbox = fixture.nativeElement.querySelector( + 'thead mat-checkbox' + ); + + expect(checkbox.classList.contains('mat-checkbox-indeterminate')).toBe( + true + ); + } + ); + + it('dispatches runSelectionToggled on checkbox click', async () => { + store.overrideSelector(getRuns, [ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + buildRun({id: 'book3', name: 'The Prisoner of Azkaban'}), + ]); + + const fixture = createComponent( + ['rowling'], + [RunsTableColumn.CHECKBOX, RunsTableColumn.RUN_NAME], + true /* usePagination */ + ); + fixture.detectChanges(); + await fixture.whenStable(); + + // mat-table's content somehow does not end up in DebugElement. + const rows = fixture.nativeElement.querySelectorAll('tbody tr'); + const [book1, book2] = rows; + book2.querySelector('td mat-checkbox input').click(); + book1.querySelector('td mat-checkbox input').click(); + + expect(dispatchSpy).toHaveBeenCalledWith( + runSelectionToggled({ + experimentIds: ['rowling'], + runId: 'book2', + }) + ); + expect(dispatchSpy).toHaveBeenCalledWith( + runSelectionToggled({ + experimentIds: ['rowling'], + runId: 'book1', + }) + ); + }); + + it( + 'dispatches runPageSelectionToggled with current page when click on ' + + 'header', + () => { + store.overrideSelector(getRunSelectorPaginationOption, { + pageIndex: 0, + pageSize: 2, + }); + store.overrideSelector(getRuns, [ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + buildRun({id: 'book3', name: 'The Prisoner of Azkaban'}), + ]); + + const fixture = createComponent( + ['rowling'], + [RunsTableColumn.CHECKBOX, RunsTableColumn.RUN_NAME], + true /* usePagination */ + ); + fixture.detectChanges(); + + fixture.nativeElement.querySelector('thead mat-checkbox input').click(); + + expect(dispatchSpy).toHaveBeenCalledWith( + runPageSelectionToggled({ + experimentIds: ['rowling'], + runIds: ['book1', 'book2'], + }) + ); + } + ); + + it('does not render select all button when pagination is disabled', () => { + store.overrideSelector(getRunSelectorPaginationOption, { + pageIndex: 0, + pageSize: 2, + }); + store.overrideSelector(getRuns, [ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + buildRun({id: 'book3', name: 'The Prisoner of Azkaban'}), + ]); + store.overrideSelector( + getCurrentRouteRunSelection, + new Map([ + ['book1', true], + ['book2', true], + ['book3', false], + ]) + ); + + const fixture = createComponent( + ['tolkien'], + [RunsTableColumn.CHECKBOX, RunsTableColumn.RUN_NAME], + false /* usePagination */ + ); + fixture.detectChanges(); + + const showAll = fixture.nativeElement.querySelector( + '.select-all.show-select-all' + ); + expect(showAll).not.toBeTruthy(); + }); + + it('renders select all button when page is selected but not all items', () => { + store.overrideSelector(getRunSelectorPaginationOption, { + pageIndex: 0, + pageSize: 2, + }); + store.overrideSelector(getRuns, [ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + buildRun({id: 'book3', name: 'The Prisoner of Azkaban'}), + ]); + store.overrideSelector( + getCurrentRouteRunSelection, + new Map([ + ['book1', true], + ['book2', true], + ['book3', false], + ]) + ); + + const fixture = createComponent( + ['tolkien'], + [RunsTableColumn.CHECKBOX, RunsTableColumn.RUN_NAME], + true /* usePagination */ + ); + fixture.detectChanges(); + + const showAll = fixture.nativeElement.querySelector( + '.select-all.show-select-all' + ); + expect(showAll.textContent).toContain( + 'All runs in this page are selected but not all runs (2 of 3)' + ); + }); + + it('does not render select if everything is selected', () => { + store.overrideSelector(getRunSelectorPaginationOption, { + pageIndex: 0, + pageSize: 2, + }); + store.overrideSelector(getRuns, [ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + buildRun({id: 'book3', name: 'The Prisoner of Azkaban'}), + ]); + store.overrideSelector( + getCurrentRouteRunSelection, + new Map([ + ['book1', true], + ['book2', true], + ['book3', true], + ]) + ); + + const fixture = createComponent( + ['rowling'], + [RunsTableColumn.CHECKBOX, RunsTableColumn.RUN_NAME], + true /* usePagination */ + ); + fixture.detectChanges(); + + const showAll = fixture.nativeElement.querySelector( + '.select-all.show-select-all' + ); + expect(showAll).toBeNull(); + }); + + it('does not render select all if page is not all selected', () => { + store.overrideSelector(getRunSelectorPaginationOption, { + pageIndex: 0, + pageSize: 2, + }); + store.overrideSelector(getRuns, [ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + buildRun({id: 'book3', name: 'The Prisoner of Azkaban'}), + ]); + store.overrideSelector( + getCurrentRouteRunSelection, + new Map([ + ['book1', true], + ['book2', false], + ['book3', true], + ]) + ); + + const fixture = createComponent( + ['rowling'], + [RunsTableColumn.CHECKBOX, RunsTableColumn.RUN_NAME], + true /* usePagination */ + ); + fixture.detectChanges(); + + const showAll = fixture.nativeElement.querySelector( + '.select-all.show-select-all' + ); + expect(showAll).toBeNull(); + }); + + it('renders select all even when all filtered items are selected', () => { + store.overrideSelector(getRunSelectorRegexFilter, '[oO]f'); + store.overrideSelector(getRunSelectorPaginationOption, { + pageIndex: 0, + pageSize: 2, + }); + store.overrideSelector(getRuns, [ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + buildRun({id: 'book3', name: 'The Prisoner of Azkaban'}), + ]); + store.overrideSelector( + getCurrentRouteRunSelection, + new Map([ + ['book1', false], + ['book2', true], + ['book3', true], + ]) + ); + + const fixture = createComponent( + ['tolkien'], + [RunsTableColumn.CHECKBOX, RunsTableColumn.RUN_NAME], + true /* usePagination */ + ); + fixture.detectChanges(); + + const showAll = fixture.nativeElement.querySelector( + '.select-all.show-select-all' + ); + expect(showAll.textContent).toContain( + 'All runs in this page are selected but not all runs (2 of 3)' + ); + }); + + it('dispatches runsSelectAll when click on select', () => { + store.overrideSelector(getRunSelectorPaginationOption, { + pageIndex: 0, + pageSize: 2, + }); + store.overrideSelector(getRuns, [ + buildRun({id: 'book1', name: "The Philosopher's Stone"}), + buildRun({id: 'book2', name: 'The Chamber Of Secrets'}), + buildRun({id: 'book3', name: 'The Prisoner of Azkaban'}), + ]); + store.overrideSelector( + getCurrentRouteRunSelection, + new Map([ + ['book1', true], + ['book2', true], + ['book3', false], + ]) + ); + + const fixture = createComponent( + ['rowling'], + [RunsTableColumn.CHECKBOX, RunsTableColumn.RUN_NAME], + true /* usePagination */ + ); + fixture.detectChanges(); + + const button = fixture.nativeElement.querySelector('.select-all button'); + button.click(); + + expect(dispatchSpy).toHaveBeenCalledWith( + runsSelectAll({ + experimentIds: ['rowling'], + }) + ); + }); + }); + + describe('hparams and metrics', () => { + function createComponent( + hparamSpecs: HparamSpec[], + metricSpecs: MetricSpec[], + showHparamsAndMetrics = true + ) { + store.overrideSelector(getExperimentsHparamsAndMetrics, { + hparams: hparamSpecs, + metrics: metricSpecs, + }); + store.overrideSelector(getExperimentIdToAliasMap, {library: 'Library'}); + const fixture = TestBed.createComponent(RunsTableContainer); + fixture.componentInstance.experimentIds = ['library']; + fixture.componentInstance.showHparamsAndMetrics = showHparamsAndMetrics; + fixture.detectChanges(); + return fixture; + } + + it('renders hparams and metrics when they exist', () => { + const hparamSpecs = [ + buildHparamSpec({ + name: 'batch_size', + displayName: 'Batch size', + domain: {type: DomainType.INTERVAL, minValue: 16, maxValue: 128}, + }), + buildHparamSpec({ + name: 'dropout', + displayName: '', + domain: {type: DomainType.INTERVAL, minValue: 0.3, maxValue: 0.8}, + }), + ]; + const metricSpecs = [ + buildMetricSpec({tag: 'acc', displayName: 'Accuracy'}), + buildMetricSpec({tag: 'loss', displayName: ''}), + ]; + store.overrideSelector( + getRunHparamFilterMap, + new Map([ + [ + 'batch_size', + buildIntervalFilter({filterLowerValue: 16, filterUpperValue: 128}), + ], + [ + 'dropout', + buildIntervalFilter({filterLowerValue: 0.3, filterUpperValue: 0.8}), + ], + ]) + ); + store.overrideSelector( + getRunMetricFilterMap, + new Map([ + [ + 'acc', + buildIntervalFilter({ + includeUndefined: true, + filterLowerValue: 0, + filterUpperValue: 1, + }), + ], + [ + 'loss', + buildIntervalFilter({ + includeUndefined: true, + filterLowerValue: 0, + filterUpperValue: 1, + }), + ], + ]) + ); + store.overrideSelector(getRuns, [ + buildRun({ + id: 'book1', + name: 'Book 1', + hparams: [{name: 'batch_size', value: 32}], + }), + buildRun({ + id: 'book2', + name: 'Book 2', + hparams: [ + {name: 'batch_size', value: 128}, + {name: 'dropout', value: 0.3}, + ], + metrics: [{tag: 'acc', value: 0.91}], + }), + buildRun({ + id: 'book3', + name: 'Book 3', + metrics: [ + {tag: 'acc', value: 0.7}, + {tag: 'loss', value: 0}, + ], + }), + ]); + + const fixture = createComponent(hparamSpecs, metricSpecs); + const columnHeaders = fixture.nativeElement.querySelectorAll( + '.columns th .name' + ); + expect([...columnHeaders].map((header) => header.textContent)).toEqual([ + 'Batch size', + 'dropout', + 'Accuracy', + 'loss', + ]); + + expect(getTableRowTextContent(fixture)).toEqual([ + ['Book 1', '32', '', '', ''], + ['Book 2', '128', '0.3', '0.91', ''], + ['Book 3', '', '', '0.7', '0'], + ]); + }); + + describe('filtering', () => { + let TEST_HPARAM_SPECS: HparamSpec[]; + let TEST_METRIC_SPECS: MetricSpec[]; + + function buildHparamFilterMap( + otherValues: Array<[string, IntervalFilter | DiscreteFilter]> = [] + ): Map { + return new Map([ + [ + 'batch_size', + buildIntervalFilter({filterLowerValue: 16, filterUpperValue: 128}), + ], + [ + 'qaz', + buildIntervalFilter({filterLowerValue: 0.3, filterUpperValue: 0.8}), + ], + ['foo', buildDiscreteFilter({filterValues: ['faz', 'bar']})], + ...otherValues, + ]); + } + + function buildMetricFilterMap( + otherValues: Array<[string, IntervalFilter]> = [] + ): Map { + return new Map([ + [ + 'acc', + buildIntervalFilter({filterLowerValue: 0, filterUpperValue: 1}), + ], + [ + 'loss', + buildIntervalFilter({filterLowerValue: 0.5, filterUpperValue: 1}), + ], + ...otherValues, + ]); + } + + beforeEach(() => { + TEST_HPARAM_SPECS = [ + buildHparamSpec({ + name: 'batch_size', + displayName: 'Batch size', + domain: {type: DomainType.INTERVAL, minValue: 16, maxValue: 128}, + }), + buildHparamSpec({ + name: 'qaz', + displayName: '', + domain: {type: DomainType.INTERVAL, minValue: 0.3, maxValue: 0.8}, + }), + buildHparamSpec({ + name: 'foo', + displayName: '', + domain: {type: DomainType.DISCRETE, values: ['faz', 'bar', 'baz']}, + }), + ]; + TEST_METRIC_SPECS = [ + buildMetricSpec({tag: 'acc', displayName: 'Accuracy'}), + buildMetricSpec({tag: 'loss', displayName: ''}), + ]; + store.overrideSelector(getRunHparamFilterMap, buildHparamFilterMap()); + store.overrideSelector(getRunMetricFilterMap, buildMetricFilterMap()); + }); + + it('filters by discrete hparams', () => { + store.overrideSelector(getRuns, [ + buildRun({ + id: 'id1', + name: 'Book 1', + hparams: [{name: 'foo', value: 'bar'}], + }), + buildRun({ + id: 'id2', + name: 'Book 2', + hparams: [{name: 'foo', value: 'baz'}], + }), + buildRun({ + id: 'id3', + name: 'Book 3', + hparams: [{name: 'foo', value: 'faz'}], + }), + buildRun({id: 'id4', name: 'Book 4', hparams: []}), + ]); + store.overrideSelector( + getRunHparamFilterMap, + buildHparamFilterMap([ + [ + 'foo', + buildDiscreteFilter({ + includeUndefined: false, + filterValues: ['bar', 'faz'], + }), + ], + ]) + ); + + const fixture = createComponent(TEST_HPARAM_SPECS, TEST_METRIC_SPECS); + fixture.detectChanges(); + + expect(getTableRowTextContent(fixture)).toEqual([ + ['Book 1', '', '', 'bar', '', ''], + ['Book 3', '', '', 'faz', '', ''], + ]); + }); + + it('allows filter for only undefined hparam value', () => { + store.overrideSelector(getRuns, [ + buildRun({ + id: 'id1', + name: 'Book 1', + hparams: [{name: 'foo', value: 'bar'}], + }), + buildRun({ + id: 'id2', + name: 'Book 2', + hparams: [{name: 'foo', value: 'baz'}], + }), + buildRun({id: 'id3', name: 'Book 3', hparams: []}), + buildRun({id: 'id4', name: 'Book 4', hparams: []}), + ]); + store.overrideSelector( + getRunHparamFilterMap, + buildHparamFilterMap([ + [ + 'foo', + buildDiscreteFilter({includeUndefined: true, filterValues: []}), + ], + ]) + ); + + const fixture = createComponent(TEST_HPARAM_SPECS, TEST_METRIC_SPECS); + fixture.detectChanges(); + + expect(getTableRowTextContent(fixture)).toEqual([ + ['Book 3', '', '', '', '', ''], + ['Book 4', '', '', '', '', ''], + ]); + }); + + it('filters by interval hparams', () => { + store.overrideSelector(getRuns, [ + buildRun({ + id: 'id1', + name: 'Book 1', + hparams: [{name: 'qaz', value: 0.5}], + }), + buildRun({ + id: 'id2', + name: 'Book 2', + hparams: [{name: 'qaz', value: 1}], + }), + buildRun({ + id: 'id3', + name: 'Book 3', + hparams: [{name: 'qaz', value: 0}], + }), + buildRun({id: 'id4', name: 'Book 4', hparams: []}), + ]); + store.overrideSelector( + getRunHparamFilterMap, + buildHparamFilterMap([ + [ + 'qaz', + buildIntervalFilter({ + includeUndefined: false, + filterLowerValue: 0.4, + filterUpperValue: 1, + }), + ], + ]) + ); + + const fixture = createComponent(TEST_HPARAM_SPECS, TEST_METRIC_SPECS); + fixture.detectChanges(); + + expect(getTableRowTextContent(fixture)).toEqual([ + ['Book 1', '', '0.5', '', '', ''], + ['Book 2', '', '1', '', '', ''], + ]); + }); + + it('filters by metric', () => { + store.overrideSelector(getRuns, [ + buildRun({ + id: 'id1', + name: 'Book 1', + metrics: [{tag: 'acc', value: 0.5}], + }), + buildRun({ + id: 'id2', + name: 'Book 2', + metrics: [{tag: 'acc', value: 1}], + }), + buildRun({ + id: 'id3', + name: 'Book 3', + metrics: [{tag: 'acc', value: 0}], + }), + ]); + store.overrideSelector( + getRunMetricFilterMap, + buildMetricFilterMap([ + [ + 'acc', + buildIntervalFilter({ + includeUndefined: false, + filterLowerValue: 0.4, + filterUpperValue: 1, + }), + ], + ]) + ); + + const fixture = createComponent(TEST_HPARAM_SPECS, TEST_METRIC_SPECS); + fixture.detectChanges(); + + expect(getTableRowTextContent(fixture)).toEqual([ + ['Book 1', '', '', '', '0.5', ''], + ['Book 2', '', '', '', '1', ''], + ]); + }); + + it('allows filter for only undefined metric value', () => { + store.overrideSelector(getRuns, [ + buildRun({ + id: 'id1', + name: 'Book 1', + metrics: [{tag: 'acc', value: 0.5}], + }), + buildRun({ + id: 'id2', + name: 'Book 2', + metrics: [{tag: 'acc', value: 1}], + }), + buildRun({id: 'id3', name: 'Book 3', metrics: []}), + ]); + store.overrideSelector( + getRunMetricFilterMap, + buildMetricFilterMap([ + [ + 'acc', + buildIntervalFilter({ + includeUndefined: true, + filterLowerValue: 5, + filterUpperValue: 5, + }), + ], + ]) + ); + + const fixture = createComponent(TEST_HPARAM_SPECS, TEST_METRIC_SPECS); + fixture.detectChanges(); + + expect(getTableRowTextContent(fixture)).toEqual([ + ['Book 3', '', '', '', '', ''], + ]); + }); + + it('does not filter by hparams or metrics when it does not show one', () => { + store.overrideSelector(getRuns, [ + buildRun({ + id: 'id1', + name: 'Book 1', + hparams: [ + {name: 'foo', value: 'bar'}, + {name: 'qaz', value: 0.3}, + ], + metrics: [{tag: 'acc', value: 0.3}], + }), + buildRun({ + id: 'id2', + name: 'Book 2', + hparams: [ + {name: 'foo', value: 'baz'}, + {name: 'qaz', value: 0.5}, + ], + }), + buildRun({ + id: 'id3', + name: 'Book 3', + hparams: [{name: 'foo', value: 'faz'}], + metrics: [{tag: 'acc', value: 0.5}], + }), + buildRun({id: 'id4', name: 'Book 4', hparams: []}), + ]); + store.overrideSelector( + getRunHparamFilterMap, + new Map([ + [ + 'foo', + buildDiscreteFilter({ + includeUndefined: false, + filterValues: ['bar', 'faz'], + }), + ], + ]) + ); + store.overrideSelector( + getRunMetricFilterMap, + new Map([ + [ + 'acc', + buildIntervalFilter({ + includeUndefined: false, + filterLowerValue: 0.4, + filterUpperValue: 0.5, + }), + ], + ]) + ); + + const showHparamAndMetric = false; + const fixture = createComponent( + TEST_HPARAM_SPECS, + TEST_METRIC_SPECS, + showHparamAndMetric + ); + fixture.detectChanges(); + + expect(getTableRowTextContent(fixture)).toEqual([ + ['Book 1'], + ['Book 2'], + ['Book 3'], + ['Book 4'], + ]); + }); + + it('responds to filter changes', () => { + store.overrideSelector(getRuns, [ + buildRun({ + id: 'id1', + name: 'Book 1', + hparams: [{name: 'foo', value: 'bar'}], + }), + buildRun({ + id: 'id2', + name: 'Book 2', + hparams: [{name: 'foo', value: 'baz'}], + }), + buildRun({ + id: 'id3', + name: 'Book 3', + hparams: [{name: 'foo', value: 'faz'}], + }), + buildRun({id: 'id4', name: 'Book 4', hparams: []}), + ]); + + store.overrideSelector( + getRunHparamFilterMap, + buildHparamFilterMap([ + [ + 'foo', + buildDiscreteFilter({ + includeUndefined: false, + filterValues: ['bar', 'faz'], + }), + ], + ]) + ); + + const fixture = createComponent(TEST_HPARAM_SPECS, TEST_METRIC_SPECS); + fixture.detectChanges(); + + store.overrideSelector( + getRunHparamFilterMap, + buildHparamFilterMap([ + [ + 'foo', + buildDiscreteFilter({ + includeUndefined: false, + filterValues: ['faz'], + }), + ], + ]) + ); + store.refreshState(); + fixture.detectChanges(); + + expect(getTableRowTextContent(fixture)).toEqual([ + ['Book 3', '', '', 'faz', '', ''], + ]); + }); + + describe('filtering ui', () => { + function getOverlayMenuItems() { + return Array.from( + overlayContainer + .getContainerElement() + .querySelectorAll('[mat-menu-item]') + ); + } + + beforeEach(() => { + store.overrideSelector(getRuns, [ + buildRun({ + id: 'id1', + name: 'Book 1', + hparams: [{name: 'foo', value: 'bar'}], + }), + buildRun({ + id: 'id2', + name: 'Book 2', + hparams: [{name: 'foo', value: 'baz'}], + metrics: [{tag: 'acc', value: 0.995}], + }), + buildRun({ + id: 'id3', + name: 'Book 3', + hparams: [{name: 'foo', value: 'faz'}], + metrics: [{tag: 'acc', value: 0.25}], + }), + buildRun({id: 'id4', name: 'Book 4', hparams: []}), + ]); + }); + + it('shows discrete hparams with checkboxes', () => { + store.overrideSelector( + getRunHparamFilterMap, + buildHparamFilterMap([ + [ + 'foo', + buildDiscreteFilter({ + possibleValues: ['faz', 'bar', 'baz'], + }), + ], + ]) + ); + const fixture = createComponent(TEST_HPARAM_SPECS, TEST_METRIC_SPECS); + fixture.detectChanges(); + + const columnHeaders = fixture.nativeElement.querySelectorAll('th'); + columnHeaders[3].querySelector('button').click(); + const menuItems = getOverlayMenuItems(); + + expect(menuItems.length).toBe(4); + expect( + menuItems.map((menuItem) => { + return menuItem + .querySelector('mat-checkbox')! + .textContent!.trim(); + }) + ).toEqual(['(show empty value)', 'faz', 'bar', 'baz']); + }); + + it('dispatches hparam action when clicking on the checkbox', () => { + store.overrideSelector( + getRunHparamFilterMap, + buildHparamFilterMap([ + [ + 'foo', + buildDiscreteFilter({ + includeUndefined: false, + possibleValues: ['faz', 'bar', 'baz'], + filterValues: ['bar', 'faz'], + }), + ], + ]) + ); + const fixture = createComponent(TEST_HPARAM_SPECS, TEST_METRIC_SPECS); + fixture.detectChanges(); + + const columnHeaders = fixture.nativeElement.querySelectorAll('th'); + columnHeaders[3].querySelector('button').click(); + const [, menuItemFoo] = getOverlayMenuItems(); + + const checkbox = menuItemFoo.querySelector( + 'mat-checkbox input' + ) as HTMLElement; + checkbox.click(); + expect(dispatchSpy).toHaveBeenCalledWith( + runDiscreteHparamFilterChanged({ + hparamName: 'foo', + includeUndefined: false, + filterValues: ['bar'], + }) + ); + }); + + it('dispatches includeUndefined change for discrete hparam change', () => { + store.overrideSelector( + getRunHparamFilterMap, + buildHparamFilterMap([ + [ + 'foo', + buildDiscreteFilter({ + includeUndefined: false, + possibleValues: ['faz', 'bar', 'baz'], + filterValues: ['bar', 'faz'], + }), + ], + ]) + ); + const fixture = createComponent(TEST_HPARAM_SPECS, TEST_METRIC_SPECS); + fixture.detectChanges(); + + const columnHeaders = fixture.nativeElement.querySelectorAll('th'); + columnHeaders[3].querySelector('button').click(); + const [includeUndefined] = getOverlayMenuItems(); + + const checkbox = includeUndefined.querySelector( + 'mat-checkbox input' + ) as HTMLElement; + checkbox.click(); + expect(dispatchSpy).toHaveBeenCalledWith( + runDiscreteHparamFilterChanged({ + hparamName: 'foo', + includeUndefined: true, + filterValues: ['bar', 'faz'], + }) + ); + }); + + it('shows interval hparams with tb-range-input', () => { + store.overrideSelector( + getRunHparamFilterMap, + buildHparamFilterMap([ + [ + 'batch_size', + buildIntervalFilter({ + includeUndefined: true, + filterLowerValue: 16, + filterUpperValue: 128, + }), + ], + ]) + ); + const fixture = createComponent(TEST_HPARAM_SPECS, TEST_METRIC_SPECS); + fixture.detectChanges(); + + const columnHeaders = fixture.nativeElement.querySelectorAll('th'); + columnHeaders[1].querySelector('button').click(); + const menuItems = getOverlayMenuItems(); + + expect(menuItems.length).toBe(2); + const [min, max] = Array.from(menuItems[1].querySelectorAll('input')); + expect(min.value).toBe('16'); + expect(max.value).toBe('128'); + }); + + it('dispatches hparam action when tb-range-input changes', () => { + store.overrideSelector( + getRunHparamFilterMap, + buildHparamFilterMap([ + [ + 'batch_size', + buildIntervalFilter({ + includeUndefined: true, + filterLowerValue: 16, + filterUpperValue: 128, + }), + ], + ]) + ); + const fixture = createComponent(TEST_HPARAM_SPECS, TEST_METRIC_SPECS); + fixture.detectChanges(); + + const columnHeaders = fixture.nativeElement.querySelectorAll('th'); + columnHeaders[1].querySelector('button').click(); + const [, slider] = getOverlayMenuItems(); + + const minValue = slider.querySelectorAll( + 'tb-range-input input' + )[0] as HTMLInputElement; + minValue.value = '32'; + minValue.dispatchEvent(new Event('change')); + expect(dispatchSpy).toHaveBeenCalledWith( + runIntervalHparamFilterChanged({ + hparamName: 'batch_size', + includeUndefined: true, + filterLowerValue: 32, + filterUpperValue: 128, + }) + ); + }); + + it('dispatches includeUndefined change for interval hparam change', () => { + store.overrideSelector( + getRunHparamFilterMap, + buildHparamFilterMap([ + [ + 'batch_size', + buildIntervalFilter({ + includeUndefined: true, + filterLowerValue: 16, + filterUpperValue: 128, + }), + ], + ]) + ); + const fixture = createComponent(TEST_HPARAM_SPECS, TEST_METRIC_SPECS); + fixture.detectChanges(); + + const columnHeaders = fixture.nativeElement.querySelectorAll('th'); + columnHeaders[1].querySelector('button').click(); + const [includeUndefined] = getOverlayMenuItems(); + + const checkbox = includeUndefined.querySelector( + 'mat-checkbox input' + ) as HTMLElement; + checkbox.click(); + expect(dispatchSpy).toHaveBeenCalledWith( + runIntervalHparamFilterChanged({ + hparamName: 'batch_size', + includeUndefined: false, + filterLowerValue: 16, + filterUpperValue: 128, + }) + ); + }); + + it('shows metric value with tb-range-input based on runs', () => { + store.overrideSelector( + getRunMetricFilterMap, + buildMetricFilterMap([ + [ + 'acc', + buildIntervalFilter({ + includeUndefined: false, + filterLowerValue: 0.25, + filterUpperValue: 0.995, + }), + ], + ]) + ); + const fixture = createComponent(TEST_HPARAM_SPECS, TEST_METRIC_SPECS); + fixture.detectChanges(); + + const columnHeaders = fixture.nativeElement.querySelectorAll('th'); + columnHeaders[4].querySelector('button').click(); + const menuItems = getOverlayMenuItems(); + + expect(menuItems.length).toBe(2); + const [min, max] = Array.from(menuItems[1].querySelectorAll('input')); + expect(min.value).toBe('0.25'); + expect(max.value).toBe('0.995'); + }); + + it('dispatches metric action when tb-range-input changes', () => { + store.overrideSelector( + getRunMetricFilterMap, + buildMetricFilterMap([ + [ + 'acc', + buildIntervalFilter({ + includeUndefined: false, + filterLowerValue: 0.25, + filterUpperValue: 1, + }), + ], + ]) + ); + const fixture = createComponent(TEST_HPARAM_SPECS, TEST_METRIC_SPECS); + fixture.detectChanges(); + + const columnHeaders = fixture.nativeElement.querySelectorAll('th'); + columnHeaders[4].querySelector('button').click(); + const [, slider] = getOverlayMenuItems(); + + const maxValue = slider.querySelectorAll( + 'tb-range-input input' + )[1] as HTMLInputElement; + maxValue.value = '0.32'; + maxValue.dispatchEvent(new Event('change')); + expect(dispatchSpy).toHaveBeenCalledWith( + runMetricFilterChanged({ + metricTag: 'acc', + includeUndefined: false, + filterLowerValue: 0.25, + filterUpperValue: 0.32, + }) + ); + }); + + it('dispatches metric action for includeUndefined change', () => { + store.overrideSelector( + getRunMetricFilterMap, + buildMetricFilterMap([ + [ + 'acc', + buildIntervalFilter({ + includeUndefined: false, + filterLowerValue: 0.25, + filterUpperValue: 1, + }), + ], + ]) + ); + const fixture = createComponent(TEST_HPARAM_SPECS, TEST_METRIC_SPECS); + fixture.detectChanges(); + + const columnHeaders = fixture.nativeElement.querySelectorAll('th'); + columnHeaders[4].querySelector('button').click(); + const [checkbox] = getOverlayMenuItems(); + const input = checkbox.querySelector('input') as HTMLInputElement; + + input.click(); + + expect(dispatchSpy).toHaveBeenCalledWith( + runMetricFilterChanged({ + metricTag: 'acc', + includeUndefined: true, + filterLowerValue: 0.25, + filterUpperValue: 1, + }) + ); + }); + }); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/types.ts b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..fc8a9aaef09b91bc84a33e3defe7363339944fa2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs/views/runs_table/types.ts @@ -0,0 +1,45 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + HparamValue, + MetricValue, +} from '../../data_source/runs_data_source_types'; +import {Run} from '../../store/runs_types'; + +export {HparamValue} from '../../data_source/runs_data_source_types'; +export { + DiscreteHparamValue, + DiscreteHparamValues, + Domain, + DomainType, + HparamSpec, + MetricSpec, +} from '../../data_source/runs_data_source_types'; + +export enum RunsTableColumn { + CHECKBOX = 'checkbox', + RUN_NAME = 'run_name', + EXPERIMENT_NAME = 'experiment_name', + RUN_COLOR = 'run_color', +} + +export interface RunTableItem { + run: Run; + experimentAlias: string; + experimentName: string; + selected: boolean; + hparams: Map; + metrics: Map; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs_legacy/BUILD b/saved_models/tensorboard/tensorboard/webapp/runs_legacy/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..50175d6bb4a2193526a42b3449cdf510a48d93a5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs_legacy/BUILD @@ -0,0 +1,14 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "runs_legacy", + srcs = [ + "runs_module.ts", + ], + deps = [ + "//tensorboard/webapp/runs_legacy/views/legacy_runs_selector", + "@npm//@angular/core", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/runs_legacy/runs_module.ts b/saved_models/tensorboard/tensorboard/webapp/runs_legacy/runs_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..89b936c7ea2a69cb39b634dc15c0d2143c0d30e0 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs_legacy/runs_module.ts @@ -0,0 +1,22 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; + +import {LegacyRunsSelectorModule as LegacyRunsSelectorViewModule} from './views/legacy_runs_selector/legacy_runs_selector_module'; + +@NgModule({ + exports: [LegacyRunsSelectorViewModule], +}) +export class RunsModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs_legacy/views/legacy_runs_selector/BUILD b/saved_models/tensorboard/tensorboard/webapp/runs_legacy/views/legacy_runs_selector/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..b5fa4f95e0cd8d90450b0ea7478fad11f3b55fb5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs_legacy/views/legacy_runs_selector/BUILD @@ -0,0 +1,42 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "legacy_runs_selector", + srcs = [ + "legacy_runs_selector_component.ts", + "legacy_runs_selector_container.ts", + "legacy_runs_selector_module.ts", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/core/actions", + "@npm//@angular/core", + "@npm//@ngrx/store", + ], +) + +tf_ts_library( + name = "test_lib", + testonly = True, + srcs = [ + "legacy_runs_selector_test.ts", + ], + deps = [ + ":legacy_runs_selector", + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_platform_browser_animations", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/core/testing", + "@npm//@angular/common", + "@npm//@angular/compiler", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/runs_legacy/views/legacy_runs_selector/legacy_runs_selector_component.ts b/saved_models/tensorboard/tensorboard/webapp/runs_legacy/views/legacy_runs_selector/legacy_runs_selector_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..156ba70a58a8852484018138945e6c005f9070bb --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs_legacy/views/legacy_runs_selector/legacy_runs_selector_component.ts @@ -0,0 +1,55 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + AfterViewInit, + Component, + ElementRef, + EventEmitter, + ViewChild, + Output, +} from '@angular/core'; + +interface PolymerChangeEvent extends CustomEvent { + detail: {value: any}; +} + +@Component({ + selector: 'tb-legacy-runs-selector-component', + template: ` `, +}) +export class LegacyRunsSelectorComponent implements AfterViewInit { + @Output() + onSelectionChange = new EventEmitter(); + + @ViewChild('selector', {static: true}) + private selector!: ElementRef; + + ngAfterViewInit() { + /** + * The event is dispatched by Polymer when `selectedRuns` prop changes because it + * notifies (it is implicitly fired by Polymer library). + */ + this.selector.nativeElement.addEventListener( + 'selected-runs-changed', + (event: PolymerChangeEvent) => { + this.onSelectionChange.emit(event.detail.value as string[]); + } + ); + setTimeout(() => { + // Dispatch the initial value from the component. + this.onSelectionChange.emit(this.selector.nativeElement.selectedRuns); + }); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs_legacy/views/legacy_runs_selector/legacy_runs_selector_container.ts b/saved_models/tensorboard/tensorboard/webapp/runs_legacy/views/legacy_runs_selector/legacy_runs_selector_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..72e7ba7581f0fe5d3c66ea91ad3115b62631fc87 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs_legacy/views/legacy_runs_selector/legacy_runs_selector_container.ts @@ -0,0 +1,37 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component} from '@angular/core'; +import {Store} from '@ngrx/store'; + +import {State} from '../../../app_state'; +import {polymerInteropRunSelectionChanged} from '../../../core/actions'; + +@Component({ + selector: 'tb-legacy-runs-selector', + template: ` + + `, +}) +export class LegacyRunsSelectorContainer { + constructor(private readonly store: Store) {} + + onSelectionChange(runs: string[]) { + this.store.dispatch( + polymerInteropRunSelectionChanged({nextSelection: runs}) + ); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs_legacy/views/legacy_runs_selector/legacy_runs_selector_module.ts b/saved_models/tensorboard/tensorboard/webapp/runs_legacy/views/legacy_runs_selector/legacy_runs_selector_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..543b93dcb81aa23a75294ace6a7f54c44fe7e623 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs_legacy/views/legacy_runs_selector/legacy_runs_selector_module.ts @@ -0,0 +1,25 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule, CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; + +import {LegacyRunsSelectorComponent} from './legacy_runs_selector_component'; +import {LegacyRunsSelectorContainer} from './legacy_runs_selector_container'; + +@NgModule({ + declarations: [LegacyRunsSelectorComponent, LegacyRunsSelectorContainer], + exports: [LegacyRunsSelectorContainer], + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class LegacyRunsSelectorModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/runs_legacy/views/legacy_runs_selector/legacy_runs_selector_test.ts b/saved_models/tensorboard/tensorboard/webapp/runs_legacy/views/legacy_runs_selector/legacy_runs_selector_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..c3461924327e7b7a6eca66ffabd9e73b523bd1f8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/runs_legacy/views/legacy_runs_selector/legacy_runs_selector_test.ts @@ -0,0 +1,102 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {By} from '@angular/platform-browser'; +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Store, Action} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {State} from '../../../app_state'; +import {createState, createCoreState} from '../../../core/testing'; +import {polymerInteropRunSelectionChanged} from '../../../core/actions'; + +import {LegacyRunsSelectorContainer} from './legacy_runs_selector_container'; +import {LegacyRunsSelectorComponent} from './legacy_runs_selector_component'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('legacy_runs_selector test', () => { + let store: MockStore; + let recordedActions: Action[]; + let testableRunSelector: HTMLElement; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [NoopAnimationsModule], + providers: [ + provideMockStore({ + initialState: createState(createCoreState({})), + }), + ], + declarations: [LegacyRunsSelectorContainer, LegacyRunsSelectorComponent], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + + recordedActions = []; + spyOn(store, 'dispatch').and.callFake((action: Action) => { + recordedActions.push(action); + }); + + testableRunSelector = document.createElement('div'); + testableRunSelector.classList.add('test'); + spyOn(document, 'createElement') + .and.callThrough() + .withArgs('tf-runs-selector') + .and.returnValue(testableRunSelector); + }); + + it('creates the tf-runs-selector', () => { + const fixture = TestBed.createComponent(LegacyRunsSelectorContainer); + fixture.detectChanges(); + + const element = fixture.debugElement.query(By.css('.test')); + + expect(element.nativeElement).toBe(testableRunSelector); + }); + + it('dispatches initial selection from the Polymer component', () => { + (testableRunSelector as any).selectedRuns = ['foo']; + const fixture = TestBed.createComponent(LegacyRunsSelectorContainer); + fixture.detectChanges(); + + expect(recordedActions).toEqual([ + polymerInteropRunSelectionChanged({ + nextSelection: ['foo'], + }), + ]); + }); + + it('dispatches action when polymer component dispatches change', () => { + (testableRunSelector as any).selectedRuns = ['foo']; + const fixture = TestBed.createComponent(LegacyRunsSelectorContainer); + fixture.detectChanges(); + + const event = new CustomEvent('selected-runs-changed', { + detail: { + value: ['foo', 'bar'], + }, + }); + testableRunSelector.dispatchEvent(event); + + expect(recordedActions).toEqual([ + jasmine.any(Object), + polymerInteropRunSelectionChanged({ + nextSelection: ['foo', 'bar'], + }), + ]); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/selectors.ts b/saved_models/tensorboard/tensorboard/webapp/selectors.ts new file mode 100644 index 0000000000000000000000000000000000000000..b707091e716a3972a4de5e6456468069d16032ad --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/selectors.ts @@ -0,0 +1,20 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export * from './app_routing/store/app_routing_selectors'; +export * from './experiments/store/experiments_selectors'; +export * from './alert/store/alert_selectors'; +export * from './metrics/store/metrics_selectors'; +export * from './runs/store/runs_selectors'; +export * from './util/ui_selectors'; diff --git a/saved_models/tensorboard/tensorboard/webapp/settings/BUILD b/saved_models/tensorboard/tensorboard/webapp/settings/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..e87444eaf393b6a6d4a0b14c264a9e9c9a7e7b2c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/settings/BUILD @@ -0,0 +1,65 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "settings", + srcs = [ + "dialog_component.ts", + "polymer_interop_container.ts", + "settings_button_component.ts", + "settings_module.ts", + ], + assets = [ + "dialog_component.css", + ], + deps = [ + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_checkbox", + "//tensorboard/webapp/angular:expect_angular_material_dialog", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/angular:expect_angular_material_input", + "//tensorboard/webapp/core", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/core/store", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@angular/forms", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "test_lib", + testonly = True, + srcs = [ + "polymer_interop_test.ts", + "settings_test.ts", + ], + deps = [ + ":settings", + "//tensorboard/webapp/angular:expect_angular_cdk_overlay", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_checkbox", + "//tensorboard/webapp/angular:expect_angular_material_dialog", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/angular:expect_angular_material_input", + "//tensorboard/webapp/angular:expect_angular_platform_browser_animations", + "//tensorboard/webapp/angular:expect_angular_platform_browser_dynamic_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/testing:mat_icon", + "@npm//@angular/common", + "@npm//@angular/compiler", + "@npm//@angular/core", + "@npm//@angular/forms", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/settings/dialog_component.css b/saved_models/tensorboard/tensorboard/webapp/settings/dialog_component.css new file mode 100644 index 0000000000000000000000000000000000000000..4dd687235ce1b6a43b42211a8809e2c80d3375f2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/settings/dialog_component.css @@ -0,0 +1,37 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +:host { + font-size: 15px; +} + +:host > div { + margin: 10px 0; +} + +:host > :first-child { + margin-top: 0; +} + +:host > :last-child { + margin-bottom: 0; +} + +h3 { + font-size: 20px; +} + +.reload-toggle { + margin-bottom: 10px; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/settings/dialog_component.ts b/saved_models/tensorboard/tensorboard/webapp/settings/dialog_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..cc66d2e97c2d3c282af86aae8fd6182a19331f4b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/settings/dialog_component.ts @@ -0,0 +1,183 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, OnInit, OnDestroy} from '@angular/core'; +import { + FormControl, + Validators, + AbstractControl, + ValidatorFn, +} from '@angular/forms'; +import {Store, select, createSelector} from '@ngrx/store'; + +import {Subject} from 'rxjs'; +import {takeUntil, debounceTime, filter} from 'rxjs/operators'; + +import { + getReloadEnabled, + getReloadPeriodInMs, + State, + getPageSize, +} from '../core/store'; +import { + toggleReloadEnabled, + changeReloadPeriod, + changePageSize, +} from '../core/actions'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +const getReloadPeriodInSec = createSelector(getReloadPeriodInMs, (periodInMs) => + Math.round(periodInMs / 1000) +); + +export function createIntegerValidator(): ValidatorFn { + return (control: AbstractControl): {[key: string]: any} | null => { + const numValue = Number(control.value); + const valid = Math.round(numValue) === control.value; + return valid ? null : {integer: {value: control.value}}; + }; +} + +@Component({ + selector: 'settings-dialog', + template: ` +

    Settings

    +
    +
    + Reload data +
    +
    + + + + + Reload period has to be minimum of 15 seconds. + +
    +
    +
    + + + + + Page size has to be a positive integer. + +
    + `, + styleUrls: ['./dialog_component.css'], +}) +export class SettingsDialogComponent implements OnInit, OnDestroy { + readonly reloadEnabled$ = this.store.pipe(select(getReloadEnabled)); + readonly pageSize$ = this.store.pipe(select(getPageSize)); + private readonly reloadPeriodInSec$ = this.store.pipe( + select(getReloadPeriodInSec) + ); + readonly reloadPeriodControl = new FormControl(15, [ + Validators.required, + Validators.min(15), + ]); + readonly paginationControl = new FormControl(1, [ + Validators.required, + Validators.min(1), + createIntegerValidator(), + ]); + + private ngUnsubscribe = new Subject(); + + constructor(private store: Store) {} + + ngOnInit() { + this.reloadPeriodInSec$ + .pipe( + takeUntil(this.ngUnsubscribe), + filter((value) => value !== this.reloadPeriodControl.value) + ) + .subscribe((value) => { + this.reloadPeriodControl.setValue(value); + }); + + this.reloadEnabled$ + .pipe(takeUntil(this.ngUnsubscribe)) + .subscribe((value) => { + if (value) this.reloadPeriodControl.enable(); + else this.reloadPeriodControl.disable(); + }); + + this.reloadPeriodControl.valueChanges + .pipe( + takeUntil(this.ngUnsubscribe), + debounceTime(500), + filter(() => this.reloadPeriodControl.valid) + ) + .subscribe(() => { + if (!this.reloadPeriodControl.valid) { + return; + } + const periodInMs = this.reloadPeriodControl.value * 1000; + this.store.dispatch(changeReloadPeriod({periodInMs})); + }); + + this.pageSize$ + .pipe( + takeUntil(this.ngUnsubscribe), + filter((value) => value !== this.paginationControl.value) + ) + .subscribe((value) => { + this.paginationControl.setValue(value); + }); + + this.paginationControl.valueChanges + .pipe( + takeUntil(this.ngUnsubscribe), + debounceTime(500), + filter(() => this.paginationControl.valid) + ) + .subscribe(() => { + this.store.dispatch( + changePageSize({size: this.paginationControl.value}) + ); + }); + } + + ngOnDestroy() { + this.ngUnsubscribe.next(); + this.ngUnsubscribe.complete(); + } + + onReloadToggle(): void { + this.store.dispatch(toggleReloadEnabled()); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/settings/dialog_component_test.ts b/saved_models/tensorboard/tensorboard/webapp/settings/dialog_component_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..43fbcb349ee91446340c849787345c6f0391c5f9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/settings/dialog_component_test.ts @@ -0,0 +1,233 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {OverlayContainer} from '@angular/cdk/overlay'; +import {TestBed, tick, flush, fakeAsync} from '@angular/core/testing'; +import {FormsModule, ReactiveFormsModule} from '@angular/forms'; +import {MatButtonModule} from '@angular/material/button'; +import {MatCheckboxModule} from '@angular/material/checkbox'; +import {MatDialogModule} from '@angular/material/dialog'; +import {MatInputModule} from '@angular/material/input'; +import {By} from '@angular/platform-browser'; +import {BrowserDynamicTestingModule} from '@angular/platform-browser-dynamic/testing'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Store} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {SettingsDialogComponent} from './dialog_component'; +import {SettingsButtonComponent} from './settings_button_component'; + +import {MatIconTestingModule} from '../testing/mat_icon_module'; +import { + toggleReloadEnabled, + changeReloadPeriod, + changePageSize, +} from '../core/actions'; +import {createCoreState, createState} from '../core/testing'; +import {State} from '../core/store'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('settings test', () => { + let store: MockStore; + let dispatchSpy: jasmine.Spy; + let overlayContainer: OverlayContainer; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + FormsModule, + MatButtonModule, + MatCheckboxModule, + MatDialogModule, + MatIconTestingModule, + MatInputModule, + NoopAnimationsModule, + ReactiveFormsModule, + ], + providers: [ + provideMockStore({ + initialState: createState( + createCoreState({ + reloadPeriodInMs: 30000, + reloadEnabled: true, + }) + ), + }), + ], + declarations: [SettingsDialogComponent, SettingsButtonComponent], + }) + .overrideModule(BrowserDynamicTestingModule, { + set: { + entryComponents: [SettingsDialogComponent], + }, + }) + .compileComponents(); + store = TestBed.inject>(Store) as MockStore; + dispatchSpy = spyOn(store, 'dispatch'); + overlayContainer = TestBed.inject(OverlayContainer); + }); + + it('opens a dialog when clicking on the button', async () => { + const fixture = TestBed.createComponent(SettingsButtonComponent); + fixture.detectChanges(); + + const settingDialogsBefore = overlayContainer + .getContainerElement() + .querySelectorAll('settings-dialog'); + expect(settingDialogsBefore.length).toBe(0); + + fixture.debugElement.query(By.css('button')).nativeElement.click(); + fixture.detectChanges(); + await fixture.whenStable(); + + const settingDialogsAfter = overlayContainer + .getContainerElement() + .querySelectorAll('settings-dialog'); + + expect(settingDialogsAfter.length).toBe(1); + }); + + it('renders settings', () => { + const fixture = TestBed.createComponent(SettingsDialogComponent); + fixture.detectChanges(); + + const checkbox = fixture.debugElement.query(By.css('mat-checkbox')); + expect(checkbox.classes['mat-checkbox-checked']).toBe(true); + + const reloadPeriod = fixture.debugElement.query(By.css('.reload-period')); + expect(reloadPeriod.nativeElement.value).toBe('30'); + }); + + it('updates the UI according to store changes.', () => { + const fixture = TestBed.createComponent(SettingsDialogComponent); + fixture.detectChanges(); + + // sanity to make sure it really did change. + const checkbox = fixture.debugElement.query(By.css('mat-checkbox')); + expect(checkbox.classes['mat-checkbox-checked']).toBe(true); + + store.setState( + createState( + createCoreState({ + reloadPeriodInMs: 60000, + reloadEnabled: false, + }) + ) + ); + fixture.detectChanges(); + + expect(checkbox.classes['mat-checkbox-checked']).toBe(false); + + const reloadPeriod = fixture.debugElement.query(By.css('.reload-period')); + expect(reloadPeriod.nativeElement.value).toBe('60'); + }); + + describe('toggleReloadEnabled', () => { + it('dispatches when clicking on checkbox', fakeAsync(() => { + const fixture = TestBed.createComponent(SettingsDialogComponent); + fixture.detectChanges(); + + const checkbox = fixture.debugElement.query(By.css('mat-checkbox input')); + checkbox.nativeElement.click(); + + expect(dispatchSpy).toHaveBeenCalledWith(toggleReloadEnabled()); + })); + }); + + describe('changeReloadPeriod', () => { + it('dispatches changing the value', fakeAsync(async () => { + const fixture = TestBed.createComponent(SettingsDialogComponent); + fixture.detectChanges(); + + const reloadPeriod = fixture.debugElement.query(By.css('.reload-period')); + reloadPeriod.nativeElement.value = 20; + reloadPeriod.nativeElement.dispatchEvent(new Event('input')); + + expect(dispatchSpy).not.toHaveBeenCalled(); + + // We debounce it so it does not spam other components on very keystroke. + tick(500); + + expect(dispatchSpy).toHaveBeenCalledWith( + changeReloadPeriod({periodInMs: 20000}) + ); + })); + + it('does not dispatch when input is invalid', fakeAsync(async () => { + const fixture = TestBed.createComponent(SettingsDialogComponent); + fixture.detectChanges(); + + const reloadPeriod = fixture.debugElement.query(By.css('.reload-period')); + reloadPeriod.nativeElement.value = 5; + reloadPeriod.nativeElement.dispatchEvent(new Event('input')); + + tick(1e10); + + expect(dispatchSpy).not.toHaveBeenCalled(); + })); + + it('does not set state when reload is disabled', fakeAsync(() => { + store.setState( + createState( + createCoreState({ + reloadPeriodInMs: 30000, + reloadEnabled: false, + }) + ) + ); + const fixture = TestBed.createComponent(SettingsDialogComponent); + fixture.detectChanges(); + + const reloadPeriod = fixture.debugElement.query(By.css('.reload-period')); + reloadPeriod.nativeElement.value = 30; + reloadPeriod.nativeElement.dispatchEvent(new Event('input')); + + tick(1e10); + + expect(dispatchSpy).not.toHaveBeenCalled(); + })); + }); + + describe('changePageSize', () => { + it('dispatches changing the value', fakeAsync(async () => { + const fixture = TestBed.createComponent(SettingsDialogComponent); + fixture.detectChanges(); + + const reloadPeriod = fixture.debugElement.query(By.css('.page-size')); + reloadPeriod.nativeElement.value = 20; + reloadPeriod.nativeElement.dispatchEvent(new Event('input')); + + expect(dispatchSpy).not.toHaveBeenCalled(); + + // We debounce it so it does not spam other components on very keystroke. + flush(); + + expect(dispatchSpy).toHaveBeenCalledWith(changePageSize({size: 20})); + })); + + it('does not dispatch when input is invalid', fakeAsync(async () => { + const fixture = TestBed.createComponent(SettingsDialogComponent); + fixture.detectChanges(); + + const reloadPeriod = fixture.debugElement.query(By.css('.reload-period')); + reloadPeriod.nativeElement.value = 0; + reloadPeriod.nativeElement.dispatchEvent(new Event('input')); + + flush(); + + expect(dispatchSpy).not.toHaveBeenCalled(); + })); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/settings/polymer_interop_container.ts b/saved_models/tensorboard/tensorboard/webapp/settings/polymer_interop_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..2c71942145bedbfa99251187ac343551613c6ec6 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/settings/polymer_interop_container.ts @@ -0,0 +1,66 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {Component, ChangeDetectionStrategy} from '@angular/core'; +import {Store, select} from '@ngrx/store'; +import {Subject} from 'rxjs'; +import {takeUntil, distinctUntilChanged} from 'rxjs/operators'; + +import {State, getPageSize} from '../core/store'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +interface TfPaginatedViewStore extends HTMLElement { + tf_paginated_view: { + setLimit(limit: number): void; + }; +} + +/** + * SettingsPolymerInterop is a temporary interop module that writes settings in + * Ngrx store to Polymer-based TensorBoard components. As long as TensorBoard + * renders Polymer components, this module should be used. + * + * NOTE: there are two classes of settings in the Polymer land: (1) ones + * persisted in URL and (2) ones stored in JavaScript. This module interops with + * only (2) kinds. For (1), please refer to the hash_storage. + */ +@Component({ + selector: 'settings-polymer-interop', + template: '', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SettingsPolymerInteropContainer { + private readonly ngUnsubscribe = new Subject(); + private readonly getPageSize$ = this.store.pipe(select(getPageSize)); + private readonly paginatedViewStore = (document.createElement( + 'tf-paginated-view-store' + ) as TfPaginatedViewStore).tf_paginated_view; + + constructor(private store: Store) {} + + ngOnInit() { + this.getPageSize$ + .pipe(takeUntil(this.ngUnsubscribe), distinctUntilChanged()) + .subscribe((pageSize) => { + this.paginatedViewStore.setLimit(pageSize); + }); + } + + ngOnDestroy() { + this.ngUnsubscribe.next(); + this.ngUnsubscribe.complete(); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/settings/polymer_interop_test.ts b/saved_models/tensorboard/tensorboard/webapp/settings/polymer_interop_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..9977e5734952b9ff049018c7a0311bf97343180d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/settings/polymer_interop_test.ts @@ -0,0 +1,84 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {DebugElement} from '@angular/core'; +import {TestBed, fakeAsync, tick} from '@angular/core/testing'; +import {Store} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {SettingsPolymerInteropContainer} from './polymer_interop_container'; + +import {getPageSize, State} from '../core/store'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('settings polymer_interop', () => { + let store: MockStore; + let setLimitCalls: number[]; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + providers: [provideMockStore()], + declarations: [SettingsPolymerInteropContainer], + }).compileComponents(); + + store = TestBed.inject>(Store) as MockStore; + store.overrideSelector(getPageSize, 5); + + setLimitCalls = []; + const createElementSpy = spyOn(document, 'createElement').and.callThrough(); + createElementSpy.withArgs('tf-paginated-view-store').and.returnValue(({ + tf_paginated_view: { + setLimit: (limit: number) => { + setLimitCalls.push(limit); + }, + }, + } as unknown) as HTMLElement); + }); + + it('sets pagination limit when pageSize changes', () => { + store.overrideSelector(getPageSize, 5); + const fixture = TestBed.createComponent(SettingsPolymerInteropContainer); + fixture.detectChanges(); + + expect(setLimitCalls).toEqual([5]); + + store.overrideSelector(getPageSize, 10); + store.refreshState(); + fixture.detectChanges(); + + expect(setLimitCalls).toEqual([5, 10]); + }); + + it('does not set limit when the value does not change', () => { + store.overrideSelector(getPageSize, 5); + const fixture = TestBed.createComponent(SettingsPolymerInteropContainer); + fixture.detectChanges(); + + expect(setLimitCalls).toEqual([5]); + + store.overrideSelector(getPageSize, 5); + store.refreshState(); + fixture.detectChanges(); + + expect(setLimitCalls).toEqual([5]); + + store.overrideSelector(getPageSize, 10); + store.refreshState(); + fixture.detectChanges(); + + expect(setLimitCalls).toEqual([5, 10]); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/settings/settings_button_component.ts b/saved_models/tensorboard/tensorboard/webapp/settings/settings_button_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..8ed75c7cc972f57eec2a7bf43dba2393a4f0d2ae --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/settings/settings_button_component.ts @@ -0,0 +1,36 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component} from '@angular/core'; +import {MatDialog} from '@angular/material/dialog'; + +import {SettingsDialogComponent} from './dialog_component'; + +@Component({ + selector: 'settings-button', + template: ` + + `, +}) +export class SettingsButtonComponent { + constructor(private dialog: MatDialog) {} + + openDialog(): void { + this.dialog.open(SettingsDialogComponent, { + width: '400px', + }); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/settings/settings_module.ts b/saved_models/tensorboard/tensorboard/webapp/settings/settings_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..d4db1e988fff7e68b3ef6bc81d91933829b3daa7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/settings/settings_module.ts @@ -0,0 +1,47 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule, ReactiveFormsModule} from '@angular/forms'; +import {MatButtonModule} from '@angular/material/button'; +import {MatCheckboxModule} from '@angular/material/checkbox'; +import {MatDialogModule} from '@angular/material/dialog'; +import {MatIconModule} from '@angular/material/icon'; +import {MatInputModule} from '@angular/material/input'; + +import {SettingsButtonComponent} from './settings_button_component'; +import {SettingsDialogComponent} from './dialog_component'; +import {SettingsPolymerInteropContainer} from './polymer_interop_container'; + +@NgModule({ + declarations: [ + SettingsButtonComponent, + SettingsDialogComponent, + SettingsPolymerInteropContainer, + ], + exports: [SettingsButtonComponent, SettingsPolymerInteropContainer], + entryComponents: [SettingsDialogComponent], + imports: [ + CommonModule, + FormsModule, + ReactiveFormsModule, + MatButtonModule, + MatCheckboxModule, + MatDialogModule, + MatIconModule, + MatInputModule, + ], +}) +export class SettingsModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/settings/settings_test.ts b/saved_models/tensorboard/tensorboard/webapp/settings/settings_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..6dc105fbe83b8bb357075bf07b6ce54a8b69e0f2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/settings/settings_test.ts @@ -0,0 +1,198 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {OverlayContainer} from '@angular/cdk/overlay'; +import {TestBed, tick, fakeAsync} from '@angular/core/testing'; +import {FormsModule, ReactiveFormsModule} from '@angular/forms'; +import {MatButtonModule} from '@angular/material/button'; +import {MatCheckboxModule} from '@angular/material/checkbox'; +import {MatDialogModule} from '@angular/material/dialog'; +import {MatInputModule} from '@angular/material/input'; +import {By} from '@angular/platform-browser'; +import {BrowserDynamicTestingModule} from '@angular/platform-browser-dynamic/testing'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Store} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {SettingsDialogComponent} from './dialog_component'; +import {SettingsButtonComponent} from './settings_button_component'; + +import {MatIconTestingModule} from '../testing/mat_icon_module'; +import {toggleReloadEnabled, changeReloadPeriod} from '../core/actions'; +import {createCoreState, createState} from '../core/testing'; +import {State} from '../core/store'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +describe('settings test', () => { + let store: MockStore; + let dispatchSpy: jasmine.Spy; + let overlayContainer: OverlayContainer; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + FormsModule, + MatButtonModule, + MatCheckboxModule, + MatDialogModule, + MatIconTestingModule, + MatInputModule, + NoopAnimationsModule, + ReactiveFormsModule, + ], + providers: [ + provideMockStore({ + initialState: createState( + createCoreState({ + reloadPeriodInMs: 30000, + reloadEnabled: true, + }) + ), + }), + ], + declarations: [SettingsDialogComponent, SettingsButtonComponent], + }) + .overrideModule(BrowserDynamicTestingModule, { + set: { + entryComponents: [SettingsDialogComponent], + }, + }) + .compileComponents(); + store = TestBed.inject>(Store) as MockStore; + dispatchSpy = spyOn(store, 'dispatch'); + overlayContainer = TestBed.inject(OverlayContainer); + }); + + it('opens a dialog when clicking on the button', async () => { + const fixture = TestBed.createComponent(SettingsButtonComponent); + fixture.detectChanges(); + + const settingDialogsBefore = overlayContainer + .getContainerElement() + .querySelectorAll('settings-dialog'); + expect(settingDialogsBefore.length).toBe(0); + + fixture.debugElement.query(By.css('button')).nativeElement.click(); + fixture.detectChanges(); + await fixture.whenStable(); + + const settingDialogsAfter = overlayContainer + .getContainerElement() + .querySelectorAll('settings-dialog'); + + expect(settingDialogsAfter.length).toBe(1); + }); + + it('renders settings', () => { + const fixture = TestBed.createComponent(SettingsDialogComponent); + fixture.detectChanges(); + + const checkbox = fixture.debugElement.query(By.css('mat-checkbox input')); + expect(checkbox.nativeElement.checked).toBe(true); + + const reloadPeriod = fixture.debugElement.query(By.css('.reload-period')); + expect(reloadPeriod.nativeElement.value).toBe('30'); + }); + + it('updates the UI according to store changes.', () => { + const fixture = TestBed.createComponent(SettingsDialogComponent); + fixture.detectChanges(); + + // sanity to make sure it really did change. + const checkbox = fixture.debugElement.query(By.css('mat-checkbox input')); + expect(checkbox.nativeElement.checked).toBe(true); + + store.setState( + createState( + createCoreState({ + reloadPeriodInMs: 60000, + reloadEnabled: false, + }) + ) + ); + fixture.detectChanges(); + + expect(checkbox.nativeElement.checked).toBe(false); + + const reloadPeriod = fixture.debugElement.query(By.css('.reload-period')); + expect(reloadPeriod.nativeElement.value).toBe('60'); + }); + + describe('toggleReloadEnabled', () => { + it('dispatches when clicking on checkbox', fakeAsync(() => { + const fixture = TestBed.createComponent(SettingsDialogComponent); + fixture.detectChanges(); + + const checkbox = fixture.debugElement.query(By.css('mat-checkbox input')); + checkbox.nativeElement.click(); + + expect(dispatchSpy).toHaveBeenCalledWith(toggleReloadEnabled()); + })); + }); + + describe('changeReloadPeriod', () => { + it('dispatches changing the value', fakeAsync(async () => { + const fixture = TestBed.createComponent(SettingsDialogComponent); + fixture.detectChanges(); + + const reloadPeriod = fixture.debugElement.query(By.css('.reload-period')); + reloadPeriod.nativeElement.value = 20; + reloadPeriod.nativeElement.dispatchEvent(new Event('input')); + + expect(dispatchSpy).not.toHaveBeenCalled(); + + // We debounce it so it does not spam other components on very keystroke. + tick(500); + + expect(dispatchSpy).toHaveBeenCalledWith( + changeReloadPeriod({periodInMs: 20000}) + ); + })); + + it('does not dispatch when input is invalid', fakeAsync(async () => { + const fixture = TestBed.createComponent(SettingsDialogComponent); + fixture.detectChanges(); + + const reloadPeriod = fixture.debugElement.query(By.css('.reload-period')); + reloadPeriod.nativeElement.value = 5; + reloadPeriod.nativeElement.dispatchEvent(new Event('input')); + + tick(1e10); + + expect(dispatchSpy).not.toHaveBeenCalled(); + })); + + it('does not set state when reload is disabled', fakeAsync(() => { + store.setState( + createState( + createCoreState({ + reloadPeriodInMs: 30000, + reloadEnabled: false, + }) + ) + ); + const fixture = TestBed.createComponent(SettingsDialogComponent); + fixture.detectChanges(); + + const reloadPeriod = fixture.debugElement.query(By.css('.reload-period')); + reloadPeriod.nativeElement.value = 30; + reloadPeriod.nativeElement.dispatchEvent(new Event('input')); + + tick(1e10); + + expect(dispatchSpy).not.toHaveBeenCalled(); + })); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/styles.scss b/saved_models/tensorboard/tensorboard/webapp/styles.scss new file mode 100644 index 0000000000000000000000000000000000000000..b3400ff2ac4a336a8216d47fa05dfe63507449e1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/styles.scss @@ -0,0 +1,16 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +@import 'tensorboard/webapp/theme/tb_theme'; diff --git a/saved_models/tensorboard/tensorboard/webapp/tb_wrapper/BUILD b/saved_models/tensorboard/tensorboard/webapp/tb_wrapper/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..e280ca0923125b1449efe7ca97e57e90195b6a31 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/tb_wrapper/BUILD @@ -0,0 +1,19 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "tb_wrapper", + srcs = [ + "tb_wrapper_component.ts", + "tb_wrapper_module.ts", + ], + deps = [ + "//tensorboard/webapp/plugins", + "//tensorboard/webapp/reloader", + "@npm//@angular/common", + "@npm//@angular/core", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/tb_wrapper/tb_wrapper_component.ts b/saved_models/tensorboard/tensorboard/webapp/tb_wrapper/tb_wrapper_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..bd8ea6edbeb0ba8966850d2fa2f278dd185c83a2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/tb_wrapper/tb_wrapper_component.ts @@ -0,0 +1,40 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ChangeDetectionStrategy, Component} from '@angular/core'; + +@Component({ + selector: 'tensorboard-wrapper-component', + template: ` + + + `, + styles: [ + ` + :host { + display: flex; + flex-direction: column; + height: 100%; + } + + .plugins { + flex: 1 1; + overflow: auto; + position: relative; + } + `, + ], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TensorBoardWrapperComponent {} diff --git a/saved_models/tensorboard/tensorboard/webapp/tb_wrapper/tb_wrapper_module.ts b/saved_models/tensorboard/tensorboard/webapp/tb_wrapper/tb_wrapper_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..203909a13353d5b4060ec6e3b072d771276620b9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/tb_wrapper/tb_wrapper_module.ts @@ -0,0 +1,31 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; + +import {PluginsModule} from '../plugins/plugins_module'; +import {ReloaderModule} from '../reloader/reloader_module'; +import {TensorBoardWrapperComponent} from './tb_wrapper_component'; + +/** + * Provides the wrapper component that renders the main dashboard page. + */ +@NgModule({ + declarations: [TensorBoardWrapperComponent], + imports: [CommonModule, PluginsModule, ReloaderModule], + exports: [TensorBoardWrapperComponent], + entryComponents: [TensorBoardWrapperComponent], +}) +export class TensorBoardWrapperModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/BUILD b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..204a0491293a26bbdc96c57d2e0cbb560a43d303 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/BUILD @@ -0,0 +1,70 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "tbdev_upload", + srcs = [ + "tbdev_upload_button_component.ts", + "tbdev_upload_dialog_component.ts", + "tbdev_upload_dialog_container.ts", + "tbdev_upload_module.ts", + ], + assets = [ + ":tbdev_upload_button_component_css", + ":tbdev_upload_dialog_component_css", + "tbdev_upload_button_component.ng.html", + "tbdev_upload_dialog_component.ng.html", + ], + deps = [ + "//tensorboard/webapp/angular:expect_angular_cdk_clipboard", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_dialog", + "//tensorboard/webapp/angular:expect_angular_material_icon", + "//tensorboard/webapp/core", + "//tensorboard/webapp/core/store", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +tf_sass_binary( + name = "tbdev_upload_button_component_css", + src = "tbdev_upload_button_component.scss", +) + +tf_sass_binary( + name = "tbdev_upload_dialog_component_css", + src = "tbdev_upload_dialog_component.scss", +) + +tf_ts_library( + name = "test_lib", + testonly = True, + srcs = [ + "tbdev_upload_test.ts", + ], + deps = [ + ":tbdev_upload", + "//tensorboard/webapp/angular:expect_angular_cdk_clipboard", + "//tensorboard/webapp/angular:expect_angular_cdk_overlay", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_material_button", + "//tensorboard/webapp/angular:expect_angular_material_dialog", + "//tensorboard/webapp/angular:expect_angular_platform_browser_animations", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core/actions", + "//tensorboard/webapp/core/store", + "//tensorboard/webapp/core/testing", + "//tensorboard/webapp/testing:mat_icon", + "@npm//@angular/common", + "@npm//@angular/compiler", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_button_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_button_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..e87bb40496e58e96e05c272ea9d8d8269fd2cc88 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_button_component.ng.html @@ -0,0 +1,22 @@ + + diff --git a/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_button_component.scss b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_button_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..8616c8b2e2c54fd4573e7cadbc458745413675c9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_button_component.scss @@ -0,0 +1,31 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +/* Override material styling with more precise selector. */ +:host button.mat-stroked-button { + background-color: mat-color($tb-primary, 500); + border: 1px solid map-get($tb-foreground, border); +} + +.button-contents { + align-items: center; + display: flex; + text-transform: uppercase; +} + +mat-icon { + margin-right: 6px; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_button_component.ts b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_button_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..e92ec76bcd5b4e7be6274bab045bb0fddeeb2926 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_button_component.ts @@ -0,0 +1,43 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, HostBinding, Inject} from '@angular/core'; +import {MatDialog} from '@angular/material/dialog'; + +import {TbdevUploadDialogContainer} from './tbdev_upload_dialog_container'; + +// A list of hostname values that will trigger the button to appear. +const LOCAL_HOSTNAMES: string[] = ['localhost', '127.0.0.1']; + +@Component({ + selector: 'tbdev-upload-button', + templateUrl: './tbdev_upload_button_component.ng.html', + styleUrls: ['./tbdev_upload_button_component.css'], +}) +export class TbdevUploadButtonComponent { + @HostBinding('class.shown') shown: boolean; + + constructor( + @Inject('window') readonly window: Window, + private readonly dialog: MatDialog + ) { + this.shown = LOCAL_HOSTNAMES.includes(window.location.hostname); + } + + openDialog(): void { + this.dialog.open(TbdevUploadDialogContainer, { + width: '560px', + }); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_dialog_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_dialog_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..8a72483dcc9517061efb18b45521f88bf430bdb3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_dialog_component.ng.html @@ -0,0 +1,61 @@ + +

    Upload to TensorBoard.dev

    +

    + + TensorBoard.dev + enables you to easily host, track, and share your ML experiments with + everyone. You can share a link to the uploaded TensorBoard in papers, blog + posts, and social media. This can showcase the results more effectively and + helps reproducibility. +

    +

    To upload a logdir to TensorBoard.dev, run the command:

    +
    +
    {{getCommandText()}}
    + +
    +

    + Only certain plugins are currently supported. Uploaded TensorBoards are public + and visible to everyone; do not upload sensitive data. +

    +
    + + + Learn more + +
    diff --git a/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_dialog_component.scss b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_dialog_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..4289b17e43989713180ec86c792de98b7a261d3b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_dialog_component.scss @@ -0,0 +1,80 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +div, +p { + margin: 16px 0; +} + +:host > :first-child { + margin-top: 0; +} + +:host > :last-child { + margin-bottom: 0; +} + +h3 { + font-size: 14px; + font-weight: 500; + line-height: 1.5; +} + +p { + color: map-get($tb-foreground, text); + font-size: 12px; + line-height: 1.5; +} + +.anchor-text { + color: map-get($tb-foreground, link); + text-decoration: none; +} + +.command { + align-items: center; + background: #f5f6f7; + border-radius: 4px; + display: flex; + justify-content: space-between; + padding: 2px 12px; +} + +pre { + overflow-x: auto; +} + +code { + font-size: 14px; + line-height: 1.5; +} + +.bottom-buttons { + align-items: center; + display: flex; + justify-content: flex-end; +} + +.close-button { + color: map-get($tb-foreground, secondary-text); + text-transform: uppercase; + margin-right: 8px; +} + +.learn-more-button { + color: map-get($tb-foreground, link); + text-transform: uppercase; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_dialog_component.ts b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_dialog_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..08f2e9447766279407a9fa685c5397c7d0c9ff2a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_dialog_component.ts @@ -0,0 +1,52 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, Input} from '@angular/core'; +import {MatDialogRef} from '@angular/material/dialog'; + +@Component({ + selector: 'tbdev-upload-dialog-component', + templateUrl: './tbdev_upload_dialog_component.ng.html', + styleUrls: ['./tbdev_upload_dialog_component.css'], +}) +export class TbdevUploadDialogComponent { + readonly tensorboardDotDevUrl: string = + 'https://tensorboard.dev/?utm_source=tensorboard'; + + constructor( + private readonly dialogRef: MatDialogRef + ) {} + + @Input() + logdir!: string; + + onClose(): void { + this.dialogRef.close(); + } + + getCommandText(): string { + if (!this.logdir) { + // Without logdir we print a literal '{logdir}' string that user will + // have to manually substitute. + return 'tensorboard dev upload --logdir {logdir}'; + } else { + // With logdir we substitute the value into the command for the user. + // We assume that logdir is sufficiently long that we want to print it on + // the next line. If the logdir value is still too long then the CSS will + // render a scrollbar underneath. + const escapedLogdir = this.logdir.replace(/'/g, "'\\''"); + return "tensorboard dev upload --logdir \\\n '" + escapedLogdir + "'"; + } + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_dialog_container.ts b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_dialog_container.ts new file mode 100644 index 0000000000000000000000000000000000000000..923fc9127e591a6086095323d0d4af2f5f9a762b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_dialog_container.ts @@ -0,0 +1,39 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component} from '@angular/core'; +import {Store, select, createSelector} from '@ngrx/store'; + +import {getEnvironment, State} from '../core/store'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +const getLogdir = createSelector( + getEnvironment, + (environment): string => environment.data_location +); + +@Component({ + selector: 'tbdev-upload-dialog', + template: ` + + `, +}) +export class TbdevUploadDialogContainer { + readonly logdir$ = this.store.pipe(select(getLogdir)); + + constructor(private readonly store: Store) {} +} diff --git a/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_module.ts b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..e9b3dc5bf4b36df2d5d19580afbec2e598c510ea --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_module.ts @@ -0,0 +1,43 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {ClipboardModule} from '@angular/cdk/clipboard'; +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {MatButtonModule} from '@angular/material/button'; +import {MatDialogModule} from '@angular/material/dialog'; +import {MatIconModule} from '@angular/material/icon'; + +import {TbdevUploadButtonComponent} from './tbdev_upload_button_component'; +import {TbdevUploadDialogComponent} from './tbdev_upload_dialog_component'; +import {TbdevUploadDialogContainer} from './tbdev_upload_dialog_container'; + +@NgModule({ + declarations: [ + TbdevUploadButtonComponent, + TbdevUploadDialogComponent, + TbdevUploadDialogContainer, + ], + exports: [TbdevUploadButtonComponent], + entryComponents: [TbdevUploadDialogContainer], + imports: [ + ClipboardModule, + CommonModule, + MatButtonModule, + MatDialogModule, + MatIconModule, + ], + providers: [{provide: 'window', useValue: window}], +}) +export class TbdevUploadModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_test.ts b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..f62163e4fa31d63bd2e4698ec6440d6db9adce94 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/tbdev_upload/tbdev_upload_test.ts @@ -0,0 +1,200 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Clipboard, ClipboardModule} from '@angular/cdk/clipboard'; +import {OverlayContainer} from '@angular/cdk/overlay'; +import {TestBed} from '@angular/core/testing'; +import {MatButtonModule} from '@angular/material/button'; +import {MatDialogModule, MatDialogRef} from '@angular/material/dialog'; +import {By} from '@angular/platform-browser'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {Store} from '@ngrx/store'; +import {provideMockStore, MockStore} from '@ngrx/store/testing'; + +import {State} from '../core/store'; +import {TbdevUploadButtonComponent} from './tbdev_upload_button_component'; +import {TbdevUploadDialogComponent} from './tbdev_upload_dialog_component'; +import {TbdevUploadDialogContainer} from './tbdev_upload_dialog_container'; + +import {createCoreState, createEnvironment, createState} from '../core/testing'; +import {MatIconTestingModule} from '../testing/mat_icon_module'; + +describe('tbdev upload test', () => { + let store: MockStore; + const clipboardSpy = jasmine.createSpyObj('Clipboard', ['copy']); + const fakeWindow: any = {}; + const matDialogRefSpy = jasmine.createSpyObj('MatDialogRef', ['close']); + let overlayContainer: OverlayContainer; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + ClipboardModule, + MatButtonModule, + MatDialogModule, + MatIconTestingModule, + NoopAnimationsModule, + ], + declarations: [ + TbdevUploadButtonComponent, + TbdevUploadDialogComponent, + TbdevUploadDialogContainer, + ], + providers: [ + provideMockStore({ + initialState: createState( + createCoreState({ + environment: createEnvironment({ + data_location: '', + }), + }) + ), + }), + {provide: Clipboard, useValue: clipboardSpy}, + {provide: 'window', useValue: fakeWindow}, + {provide: MatDialogRef, useValue: matDialogRefSpy}, + ], + }).compileComponents(); + store = TestBed.inject>(Store) as MockStore; + overlayContainer = TestBed.inject(OverlayContainer); + fakeWindow.location = { + hostname: 'localhost', + }; + }); + + it('does not show upload button if hostname is not localhost', async () => { + fakeWindow.location.hostname = 'notlocalhost.com'; + const fixture = TestBed.createComponent(TbdevUploadButtonComponent); + fixture.detectChanges(); + await fixture.whenStable(); + + expect(fixture.debugElement.classes['shown']).toBeUndefined(); + expect(fixture.debugElement.children.length).toEqual(0); + }); + + it('shows upload button if hostname is localhost', async () => { + fakeWindow.location.hostname = 'localhost'; + const fixture = TestBed.createComponent(TbdevUploadButtonComponent); + fixture.detectChanges(); + await fixture.whenStable(); + + expect(fixture.debugElement.classes['shown']).toBeDefined(); + expect(fixture.debugElement.children.length).toEqual(1); + }); + + it('shows upload button if hostname is 127.0.0.1', async () => { + fakeWindow.location.hostname = '127.0.0.1'; + const fixture = TestBed.createComponent(TbdevUploadButtonComponent); + fixture.detectChanges(); + await fixture.whenStable(); + + expect(fixture.debugElement.classes['shown']).toBeDefined(); + expect(fixture.debugElement.children.length).toEqual(1); + }); + + it('opens a dialog when clicking on the button', async () => { + const fixture = TestBed.createComponent(TbdevUploadButtonComponent); + fixture.detectChanges(); + + const tbdevUploadDialogsBefore = overlayContainer + .getContainerElement() + .querySelectorAll('tbdev-upload-dialog'); + expect(tbdevUploadDialogsBefore.length).toBe(0); + + fixture.debugElement.query(By.css('button')).nativeElement.click(); + fixture.detectChanges(); + await fixture.whenStable(); + + const tbdevUploadDialogsAfter = overlayContainer + .getContainerElement() + .querySelectorAll('tbdev-upload-dialog'); + + expect(tbdevUploadDialogsAfter.length).toBe(1); + }); + + it('prints command and allows it to be copied', async () => { + const fixture = TestBed.createComponent(TbdevUploadDialogContainer); + fixture.detectChanges(); + + const codeElement = fixture.debugElement.query(By.css('code')); + expect(codeElement.nativeElement.textContent).toBe( + 'tensorboard dev upload --logdir {logdir}' + ); + + const copyElement = fixture.debugElement.query(By.css('.command-copy')); + copyElement.nativeElement.click(); + + expect(clipboardSpy.copy).toHaveBeenCalledWith( + 'tensorboard dev upload --logdir {logdir}' + ); + }); + + it('updates with data_location', async () => { + const fixture = TestBed.createComponent(TbdevUploadDialogContainer); + fixture.detectChanges(); + + store.setState( + createState( + createCoreState({ + environment: createEnvironment({ + data_location: '/some/data/location', + }), + }) + ) + ); + fixture.detectChanges(); + + const codeElement = fixture.debugElement.query(By.css('code')); + expect(codeElement.nativeElement.textContent).toBe( + "tensorboard dev upload --logdir \\\n '/some/data/location'" + ); + + const copyElement = fixture.debugElement.query(By.css('.command-copy')); + copyElement.nativeElement.click(); + + expect(clipboardSpy.copy).toHaveBeenCalledWith( + "tensorboard dev upload --logdir \\\n '/some/data/location'" + ); + }); + + it('escapes single quotes in data_location', async () => { + const fixture = TestBed.createComponent(TbdevUploadDialogContainer); + fixture.detectChanges(); + + store.setState( + createState( + createCoreState({ + environment: createEnvironment({ + data_location: "/loc' || echo $PWD'", + }), + }) + ) + ); + fixture.detectChanges(); + + const codeElement = fixture.debugElement.query(By.css('code')); + expect(codeElement.nativeElement.textContent).toBe( + "tensorboard dev upload --logdir \\\n '/loc'\\'' || echo $PWD'\\'''" + ); + }); + + it('can be closed with button', async () => { + const fixture = TestBed.createComponent(TbdevUploadDialogContainer); + fixture.detectChanges(); + + const copyElement = fixture.debugElement.query(By.css('.close-button')); + copyElement.nativeElement.click(); + expect(matDialogRefSpy.close).toHaveBeenCalled(); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/testing/BUILD b/saved_models/tensorboard/tensorboard/webapp/testing/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..b91895adcc5cfd4bf6bd0c1e41bbbfb117eeb2eb --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/testing/BUILD @@ -0,0 +1,70 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package( + default_testonly = True, + default_visibility = ["//tensorboard:internal"], +) + +licenses(["notice"]) + +filegroup( + name = "test_support_lib", + srcs = [ + ":rxjs_shims.js", + "@npm//:node_modules/rxjs/dist/bundles/rxjs.umd.js", + "@npm//:node_modules/tslib/tslib.js", + ], +) + +tf_ts_library( + name = "initialize_testbed", + srcs = [ + "initialize_testbed.ts", + ], + deps = [ + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_platform_browser_dynamic_testing", + ], +) + +ng_module( + name = "mat_icon", + srcs = [ + "mat_icon_module.ts", + ], + deps = [ + "@npm//@angular/core", + ], +) + +ng_module( + name = "dom", + srcs = [ + "dom.ts", + ], + deps = [ + "//tensorboard/webapp/angular:expect_angular_core_testing", + "@npm//@angular/core", + ], +) + +tf_ts_library( + name = "lang", + srcs = [ + "lang.ts", + ], +) + +ng_module( + name = "material", + srcs = [ + "material.ts", + ], + deps = [ + "//tensorboard/webapp/angular:expect_angular_cdk_overlay", + "@npm//@angular/core", + ], +) + +exports_files(["require_js_karma_config.js"]) diff --git a/saved_models/tensorboard/tensorboard/webapp/testing/dom.ts b/saved_models/tensorboard/tensorboard/webapp/testing/dom.ts new file mode 100644 index 0000000000000000000000000000000000000000..0f119c4d1d41cf4dfb9f1d655837c44d35457b78 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/testing/dom.ts @@ -0,0 +1,179 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {DebugElement} from '@angular/core'; +import {ComponentFixture} from '@angular/core/testing'; + +export enum KeyType { + SPECIAL, + CHARACTER, +} + +export interface SendKeyCharArgs { + type: KeyType.CHARACTER; + key: string; + prevString: string; + startingCursorIndex: number; +} + +export interface SendKeySpecialArg { + type: KeyType.SPECIAL; + key: + | 'Backspace' + | 'Space' + | 'Tab' + | 'Enter' + | 'ArrowLeft' + | 'ArrowRight' + | 'Escape'; + prevString: string; + startingCursorIndex: number; +} + +export type SendKeyArgs = SendKeyCharArgs | SendKeySpecialArg; + +/** + * Poorman's webdriver sendKey. Sends a character simulating keyboard key + * presses. + */ +export function sendKey( + fixture: ComponentFixture, + eventTarget: DebugElement, + args: SendKeyArgs +) { + const {prevString, key, startingCursorIndex} = args; + + const el = eventTarget.nativeElement; + const canSetCursor = + el instanceof HTMLInputElement && + el.type !== 'date' && + el.type !== 'number'; + + let nextString: string; + let nextCursorIndex: number; + // KeyCode is deprecated but some Angular material components make use of it. + let keyCode: number; + let emitKeyPressAndInput = true; + + switch (key) { + case 'Backspace': + nextString = + prevString.slice(0, startingCursorIndex - 1) + + prevString.slice(startingCursorIndex); + nextCursorIndex = startingCursorIndex - 1; + keyCode = 0x08; + break; + case 'Space': + nextString = + prevString.slice(0, startingCursorIndex) + + ' ' + + prevString.slice(startingCursorIndex); + nextCursorIndex = startingCursorIndex + 1; + keyCode = 0x20; + break; + case 'ArrowLeft': + nextString = prevString; + nextCursorIndex = startingCursorIndex - 1; + keyCode = 0x25; + emitKeyPressAndInput = false; + break; + case 'ArrowRight': + nextString = prevString; + nextCursorIndex = startingCursorIndex + 1; + keyCode = 0x27; + emitKeyPressAndInput = false; + break; + case 'Tab': + nextString = prevString; + nextCursorIndex = startingCursorIndex; + keyCode = 0x09; + break; + case 'Enter': + nextString = prevString; + nextCursorIndex = startingCursorIndex; + keyCode = 0x0d; + break; + case 'Escape': + nextString = prevString; + nextCursorIndex = startingCursorIndex; + keyCode = 0x1b; + emitKeyPressAndInput = false; + break; + default: + nextString = + prevString.slice(0, startingCursorIndex) + + key + + prevString.slice(startingCursorIndex); + nextCursorIndex = startingCursorIndex + 1; + keyCode = key.charCodeAt(0); + break; + } + + el.focus(); + el.value = prevString; + if (canSetCursor) { + el.setSelectionRange(startingCursorIndex, startingCursorIndex); + } + + // Convert typing to object. Sadly, because keyCode is deprecated, it is not + // typed properly. + const keyboardEventArg = {key, keyCode} as {}; + el.dispatchEvent(new KeyboardEvent('keydown', keyboardEventArg)); + + // This is technically incorrect. For modifier key event, the keydown triggers + // but the keypress does not. + + if (emitKeyPressAndInput) { + el.dispatchEvent(new KeyboardEvent('keypress', keyboardEventArg)); + } + + el.value = nextString; + if (canSetCursor) { + el.setSelectionRange(nextCursorIndex, nextCursorIndex); + } + + if (emitKeyPressAndInput) { + el.dispatchEvent(new InputEvent('input', {data: key})); + } + + document.dispatchEvent(new Event('selectionchange')); + + el.dispatchEvent(new KeyboardEvent('keyup', keyboardEventArg)); + fixture.detectChanges(); +} + +/** + * Send keys to an input target. + * + * It makes sure fixture is up-to-date by triggering the change detection. + * It clears the value, then type each character in `str` one by one. + */ +export function sendKeys( + fixture: ComponentFixture, + eventTarget: DebugElement, + str: string +) { + let prevString = ''; + let cursorIndex = 0; + for (const key of str) { + sendKey(fixture, eventTarget, { + type: KeyType.CHARACTER, + prevString, + key, + startingCursorIndex: cursorIndex, + }); + cursorIndex++; + prevString += key; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/testing/initialize_testbed.ts b/saved_models/tensorboard/tensorboard/webapp/testing/initialize_testbed.ts new file mode 100644 index 0000000000000000000000000000000000000000..87dbcfcb2c1ccc3bd9ccb80718bc738377fc839e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/testing/initialize_testbed.ts @@ -0,0 +1,24 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed} from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting, +} from '@angular/platform-browser-dynamic/testing'; + +TestBed.initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); diff --git a/saved_models/tensorboard/tensorboard/webapp/testing/lang.ts b/saved_models/tensorboard/tensorboard/webapp/testing/lang.ts new file mode 100644 index 0000000000000000000000000000000000000000..21fc2a38cad15e7b0f2075c6ab8d46b5992d7b0f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/testing/lang.ts @@ -0,0 +1,26 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * Recursively freezes an object and all of its fields. The given object is + * assumed not to have reference loops. + */ +export function deepFreeze(obj: T): T { + for (const val of Object.values(obj)) { + if (val && typeof val === 'object') { + deepFreeze(val); + } + } + return Object.freeze(obj); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/testing/mat_icon_module.ts b/saved_models/tensorboard/tensorboard/webapp/testing/mat_icon_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..e3a0f8ecf541e4ad3dde4ec42e3547c6ae97919b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/testing/mat_icon_module.ts @@ -0,0 +1,108 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, Input, NgModule} from '@angular/core'; + +// Keep in sync with the 'svg_bundle' target in tensorboard/webapp/BUILD. +const KNOWN_SVG_ICON = new Set([ + 'arrow_downward_24px', + 'arrow_upward_24px', + 'bug_report_24px', + 'cancel_24px', + 'chevron_left_24px', + 'chevron_right_24px', + 'clear_24px', + 'close_24px', + 'content_copy_24px', + 'error_24px', + 'expand_less_24px', + 'expand_more_24px', + 'filter_alt_24px', + 'flag_24px', + 'fullscreen_24px', + 'fullscreen_exit_24px', + 'get_app_24px', + 'help_outline_24px', + 'image_search_24px', + 'info_outline_24px', + 'keep_24px', + 'keep_outline_24px', + 'line_weight_24px', + 'more_vert_24px', + 'refresh_24px', + 'search_24px', + 'settings_24px', + 'settings_backup_restore_24px', + 'settings_overscan_24px', + 'warning_24px', + 'visibility_off_24px', +]); + +/** + * Requires to be exported for AOT. Do not use it otherwise. + * + * Does not extend MatIcon since its implementation detail (such as ngOnChanges) + * can interfere with the stub implementation. If TensorBoard makes use of a new + * input on MatIcon that is not present here, it will fail at the test + * compilation time due to unknown input onto the template. + */ +@Component({ + template: '{{svgIcon}}', + selector: 'mat-icon', +}) +export class MatIcon { + private internalSvgIcon: string = ''; + + @Input() + set svgIcon(svgIcon: string) { + if (!KNOWN_SVG_ICON.has(svgIcon)) { + const humanReadableIconNames = Array.from(KNOWN_SVG_ICON.values()).join( + ', ' + ); + // Below will cause test to fail if a component makes use of unknown + // SVG. + throw new RangeError( + [ + `Unknown SVG mat-icon, "${svgIcon}".`, + `Must be one of [${humanReadableIconNames}].`, + ].join(' ') + ); + } + this.internalSvgIcon = svgIcon; + } + get svgIcon() { + return this.internalSvgIcon; + } + + @Input() + set fontSet(value: string) { + throw new Error( + 'Usage of fontSet is disallowed in TensorBoard. Use svgIcon.' + ); + } + + /** Name of an icon within a font set. */ + @Input() + set fontIcon(icon: string) { + throw new Error( + 'Usage of fontIcon is disallowed in TensorBoard. Use svgIcon.' + ); + } +} + +@NgModule({ + exports: [MatIcon], + declarations: [MatIcon], +}) +export class MatIconTestingModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/testing/material.ts b/saved_models/tensorboard/tensorboard/webapp/testing/material.ts new file mode 100644 index 0000000000000000000000000000000000000000..e80415fb4ebbf626147e88ffdaf2a5d40a3988ce --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/testing/material.ts @@ -0,0 +1,25 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {OverlayContainer} from '@angular/cdk/overlay'; +import {DebugElement, getDebugNode} from '@angular/core'; + +export function getAutocompleteOptions(overlayContainer: OverlayContainer) { + const options = overlayContainer + .getContainerElement() + .querySelectorAll('mat-option'); + return Array.from(options).map( + (optionEl: Element): DebugElement => getDebugNode(optionEl) as DebugElement + ); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/testing/require_js_karma_config.js b/saved_models/tensorboard/tensorboard/webapp/testing/require_js_karma_config.js new file mode 100644 index 0000000000000000000000000000000000000000..b64b246c8dc3ae19079bc562625b2eb0c3927da1 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/testing/require_js_karma_config.js @@ -0,0 +1,21 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +require.config({ + paths: { + lodash: '/base/npm/node_modules/lodash/lodash', + d3: '/base/npm/node_modules/d3/dist/d3', + three: '/base/npm/node_modules/three/build/three', + }, +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/testing/rxjs_shims.js b/saved_models/tensorboard/tensorboard/webapp/testing/rxjs_shims.js new file mode 100644 index 0000000000000000000000000000000000000000..f0efb69b79fc71fac4547eed072d571b3e0676b2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/testing/rxjs_shims.js @@ -0,0 +1,66 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * This is a fork from https://github.com/angular/angular-bazel-example/blob/master/src/rxjs_shims.js that + * is originally licensed as below. + * This fork reformat the code using prettier. + * This shim is required as long as we use rxjs (even in a transitive dependency) and Karma based testing + * that uses concatjs to create a bundle. Concatjs drastically improves speed of incremental build but + * it requires modules to use UMD style. + */ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** + * @fileoverview these provide named UMD modules so that we can bundle + * the application along with rxjs using the concatjs bundler. + */ + +// rxjs/operators +(function (factory) { + if (typeof module === 'object' && typeof module.exports === 'object') { + var v = factory(require, exports); + if (v !== undefined) module.exports = v; + } else if (typeof define === 'function' && define.amd) { + define('rxjs/operators', ['exports', 'rxjs'], factory); + } +})(function (exports, rxjs) { + 'use strict'; + Object.keys(rxjs.operators).forEach(function (key) { + exports[key] = rxjs.operators[key]; + }); + Object.defineProperty(exports, '__esModule', {value: true}); +}); + +// rxjs/testing +(function (factory) { + if (typeof module === 'object' && typeof module.exports === 'object') { + var v = factory(require, exports); + if (v !== undefined) module.exports = v; + } else if (typeof define === 'function' && define.amd) { + define('rxjs/testing', ['exports', 'rxjs'], factory); + } +})(function (exports, rxjs) { + 'use strict'; + Object.keys(rxjs.testing).forEach(function (key) { + exports[key] = rxjs.testing[key]; + }); + Object.defineProperty(exports, '__esModule', {value: true}); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/theme/BUILD b/saved_models/tensorboard/tensorboard/webapp/theme/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..bad4221c14c84424e643c114473940a9c3ac3874 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/theme/BUILD @@ -0,0 +1,26 @@ +load("//tensorboard/defs:defs.bzl", "tf_sass_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_library( + name = "theme", + srcs = [ + "_tb_palette.scss", + "_tb_theme.scss", + ], + deps = [ + "//tensorboard/webapp:angular_material_theming", + ], +) + +genrule( + name = "inline_palette", + srcs = [ + "_variable.scss", + "_tb_theme.template.scss", + ], + outs = ["_tb_theme.scss"], + cmd = "cat $(SRCS) > $@", +) diff --git a/saved_models/tensorboard/tensorboard/webapp/theme/_tb_palette.scss b/saved_models/tensorboard/tensorboard/webapp/theme/_tb_palette.scss new file mode 100644 index 0000000000000000000000000000000000000000..392f807a5247ba468f8c6d4276c44fd470007411 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/theme/_tb_palette.scss @@ -0,0 +1,59 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +@import 'tensorboard/webapp/angular_material_theming'; + +$tf-slate: ( + 100: #f5f6f7, + 200: #f5f6f7, + 300: #c6cad1, + 400: #8e98a3, + 500: #8e98a3, + 700: #425066, + 900: #293241, + contrast: ( + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $light-primary-text, + 700: $light-primary-text, + 900: $light-primary-text, + ), +); + +/* The tf-orange palette predates the migration to Angular and is not + well-defined and is not well-mapped to the tf-slate palette. It could use + more work. One source to consider is tensorboard-color.html, which contains + several orange values, but only one of them (--tb-orange-strong) is used + widely. */ +$tf-orange: ( + 100: mat-color($mat-orange, 500), + 200: mat-color($mat-orange, 500), + 300: mat-color($mat-orange, 500), + 400: mat-color($mat-orange, 500), + 500: mat-color($mat-orange, 500), + 700: mat-color($mat-orange, 700), + 900: mat-color($mat-orange, 700), + contrast: ( + 100: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $light-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 900: $light-primary-text, + ), +); diff --git a/saved_models/tensorboard/tensorboard/webapp/theme/_tb_theme.template.scss b/saved_models/tensorboard/tensorboard/webapp/theme/_tb_theme.template.scss new file mode 100644 index 0000000000000000000000000000000000000000..45e166a34ec0879f741a2060fbf08a907e77715d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/theme/_tb_theme.template.scss @@ -0,0 +1,54 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +@import 'tensorboard/webapp/angular_material_theming'; + +/*********************************************************** + * VARIABLE FILE IS INLINED WITH GENRULE. DO NOT IMPORT IT. + * Variable file declares values for $tb-primary, $tb-accent + * and $tb-warn + **********************************************************/ + +// Angular Material theme definition. + +// Include non-theme styles for core. +@include mat-core(); + +$tb-theme: mat-light-theme($tb-primary, $tb-accent, $tb-warn); + +// Overriding mat-light-theme-foreground variables. +$tb-foreground: map_merge( + $mat-light-theme-foreground, + ( + text: mat-color($mat-gray, 900), + secondary-text: mat-color($mat-gray, 700), + disabled-text: mat-color($mat-gray, 600), + // TB specific variable. + border: #ebebeb, + link: mat-color($mat-blue, 700), + ) +); + +$tb-theme: map_merge( + $tb-theme, + ( + foreground: $tb-foreground, + ) +); + +$tb-background: map-get($tb-theme, background); + +// Include all theme-styles for the components based on the current theme. +@include angular-material-theme($tb-theme); diff --git a/saved_models/tensorboard/tensorboard/webapp/theme/_variable.scss b/saved_models/tensorboard/tensorboard/webapp/theme/_variable.scss new file mode 100644 index 0000000000000000000000000000000000000000..e28dc23bfe2006246af6b55448c97b7fda382e31 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/theme/_variable.scss @@ -0,0 +1,20 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/angular_material_theming'; +@import 'tensorboard/webapp/theme/tb_palette'; + +$tb-primary: mat-palette($tf-orange, 700, 400, 700); +$tb-accent: mat-palette($tf-orange); +$tb-warn: mat-palette($mat-red); diff --git a/saved_models/tensorboard/tensorboard/webapp/third_party/BUILD b/saved_models/tensorboard/tensorboard/webapp/third_party/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..331a5265ee6db5500c43ef5d68129e51ecf4d3bc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/third_party/BUILD @@ -0,0 +1,24 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "d3", + srcs = ["d3.ts"], + deps = [ + "@npm//@types/d3", + "@npm//d3", + ], +) + +tf_ts_library( + name = "tfjs", + srcs = ["tfjs.ts"], + deps = [ + "@npm//@tensorflow/tfjs-backend-cpu", + "@npm//@tensorflow/tfjs-backend-webgl", + "@npm//@tensorflow/tfjs-core", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/third_party/d3.ts b/saved_models/tensorboard/tensorboard/webapp/third_party/d3.ts new file mode 100644 index 0000000000000000000000000000000000000000..0050d3ab17c63eb48297f6d3d25dc3ab5dee9f71 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/third_party/d3.ts @@ -0,0 +1,25 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview This is an d3 interop that papers over the differences within + * google internal repository and the external repository. Please depend on this + * module instead of depending on the d3 directly. + * + * Due to differences in the module system, there is no easy way to make a d3 + * import consistent in both places. The problem goes away when the Polymer + * based TensorBoard no longer includes d3 in the global context (i.e., they + * use the same bundler and exist as a single bundle). + */ +export * from 'd3'; diff --git a/saved_models/tensorboard/tensorboard/webapp/third_party/tfjs.ts b/saved_models/tensorboard/tensorboard/webapp/third_party/tfjs.ts new file mode 100644 index 0000000000000000000000000000000000000000..b70abe02549229b09a13b879e6da30dc1e4e7e96 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/third_party/tfjs.ts @@ -0,0 +1,18 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export * from '@tensorflow/tfjs-core'; + +import '@tensorflow/tfjs-backend-cpu'; +import '@tensorflow/tfjs-backend-webgl'; diff --git a/saved_models/tensorboard/tensorboard/webapp/types/BUILD b/saved_models/tensorboard/tensorboard/webapp/types/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..a59ee48132d1ae39e4dd247fff19b1feba2cc03c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/types/BUILD @@ -0,0 +1,20 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +# TODO(stephanwlee): move this into shareable place and use it in Polymer-based +# modules when Angular is ready to be built as part of TensorBoard. +tf_ts_library( + name = "types", + srcs = [ + "api.ts", + "data.ts", + ], +) + +tf_ts_library( + name = "ui", + srcs = ["ui.ts"], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/types/api.ts b/saved_models/tensorboard/tensorboard/webapp/types/api.ts new file mode 100644 index 0000000000000000000000000000000000000000..4945a86cec8814fec174724248ee88e706af3a34 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/types/api.ts @@ -0,0 +1,83 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export type PluginId = string; + +export enum LoadingMechanismType { + CUSTOM_ELEMENT = 'CUSTOM_ELEMENT', + IFRAME = 'IFRAME', + NG_COMPONENT = 'NG_COMPONENT', + NONE = 'NONE', +} + +export interface NgElementLoadingMechanism { + /** @export */ + type: LoadingMechanismType.NG_COMPONENT; +} + +export interface CustomElementLoadingMechanism { + /** @export */ + type: LoadingMechanismType.CUSTOM_ELEMENT; + /** @export */ + element_name: string; +} + +export interface IframeLoadingMechanism { + /** @export */ + type: LoadingMechanismType.IFRAME; + /** @export */ + module_path: string; +} + +export interface NoLoadingMechanism { + /** @export */ + type: LoadingMechanismType.NONE; +} + +export interface PluginMetadata { + /** @export */ + disable_reload: boolean; + /** @export */ + enabled: boolean; + /** @export */ + loading_mechanism: + | NgElementLoadingMechanism + | CustomElementLoadingMechanism + | IframeLoadingMechanism + | NoLoadingMechanism; + /** @export */ + tab_name: string; + /** @export */ + remove_dom: boolean; +} + +export type PluginsListing = { + [pluginName: string]: PluginMetadata; +}; + +export interface Environment { + /** @export */ + data_location: string; + /** @export */ + window_title: string; + /** @export */ + experiment_name?: string; + /** @export */ + experiment_description?: string; + /** @export */ + creation_time?: number; +} + +export type GetRunsResponse = string[]; diff --git a/saved_models/tensorboard/tensorboard/webapp/types/data.ts b/saved_models/tensorboard/tensorboard/webapp/types/data.ts new file mode 100644 index 0000000000000000000000000000000000000000..c35a3592e0652bc7ebca34b8e6ed179421e4dc75 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/types/data.ts @@ -0,0 +1,29 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +/** Data-related types */ + +export enum DataLoadState { + NOT_LOADED, + LOADED, + LOADING, + FAILED, +} + +export interface LoadState { + state: DataLoadState; + // Time of last successful load. Time since epoch. + lastLoadedTimeInMs: number | null; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/types/ui.ts b/saved_models/tensorboard/tensorboard/webapp/types/ui.ts new file mode 100644 index 0000000000000000000000000000000000000000..54ab6bb558f04d095a43838236d1917cc3883b45 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/types/ui.ts @@ -0,0 +1,60 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview Type definition of the UI data that spans action, store, view, + * and data sources. + */ + +export enum SortDirection { + ASC = 'asc', + DESC = 'desc', + UNSET = '', +} + +export enum SearchTokenKey { + USER = 'user', + BEFORE = 'before', + AFTER = 'after', + REGEX = 'regex', +} + +interface Token { + key: SearchTokenKey; + stringValue: string; +} + +export interface UserSearchToken extends Token { + key: SearchTokenKey.USER; +} + +export interface DateSearchToken extends Token { + key: SearchTokenKey.BEFORE | SearchTokenKey.AFTER; +} + +export interface RegexSearchToken extends Token { + key: SearchTokenKey.REGEX; +} + +/** + * key-value token for queries in the search input box. For instance, Gmail has + * from:foo@gmail.com where "from" would be the key and "foo@gmail.com" would be + * the value. + */ +export type SearchToken = UserSearchToken | DateSearchToken | RegexSearchToken; + +/** + * Returns run color for a given runId in hex. + */ +export type RunColorScale = (runId: string) => string; diff --git a/saved_models/tensorboard/tensorboard/webapp/util/BUILD b/saved_models/tensorboard/tensorboard/webapp/util/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..714bb7c88568f0b4ff49dafabb37ba8f39c6b296 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/util/BUILD @@ -0,0 +1,89 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_ts_library( + name = "lang", + srcs = [ + "lang.ts", + ], +) + +tf_ts_library( + name = "string", + srcs = [ + "string.ts", + ], +) + +tf_ts_library( + name = "types", + srcs = [ + "types.ts", + ], +) + +tf_ts_library( + name = "ngrx", + srcs = [ + "ngrx.ts", + ], + deps = ["@npm//@ngrx/store"], +) + +tf_ts_library( + name = "value_formatter", + srcs = [ + "value_formatter.ts", + ], +) + +tf_ts_library( + name = "colors", + srcs = [ + "colors.ts", + ], +) + +tf_ts_library( + name = "ui_selectors", + srcs = [ + "ui_selectors.ts", + ], + deps = [ + "//tensorboard/webapp:app_state", + "//tensorboard/webapp/app_routing/store", + "//tensorboard/webapp/runs/store:selectors", + "@npm//@ngrx/store", + ], +) + +tf_ts_library( + name = "util_tests", + testonly = True, + srcs = [ + "colors_test.ts", + "lang_test.ts", + "ngrx_test.ts", + "string_test.ts", + "ui_selectors_test.ts", + "value_formatter_test.ts", + ], + deps = [ + ":colors", + ":lang", + ":ngrx", + ":string", + ":ui_selectors", + ":value_formatter", + "//tensorboard/webapp:selectors", + "//tensorboard/webapp/app_routing:testing", + "//tensorboard/webapp/app_routing:types", + "//tensorboard/webapp/app_routing/store:testing", + "//tensorboard/webapp/runs/store:testing", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/util/colors.ts b/saved_models/tensorboard/tensorboard/webapp/util/colors.ts new file mode 100644 index 0000000000000000000000000000000000000000..07a560a1f3e90f3611c9c5e54b4223161d2555a8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/util/colors.ts @@ -0,0 +1,34 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +const CHART_COLOR_PALLETE = [ + '#425066', // Slate 1 + '#12b5cb', // Cyan 600 + '#e52592', // Pink 600 + '#f9ab00', // Yellow 600 + '#9334e6', // Purple 600 + '#7cb342', // Lt green 600 + '#e8710a', // Orange 600 +]; + +let colorIndex = 0; + +/** + * Returns hex color for charts. + */ +export function getNextChartColor(): string { + const color = CHART_COLOR_PALLETE[colorIndex]; + colorIndex = (colorIndex + 1) % CHART_COLOR_PALLETE.length; + return color; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/util/colors_test.ts b/saved_models/tensorboard/tensorboard/webapp/util/colors_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..b25809168f7c36d33d7db38cb72537d238b0b92a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/util/colors_test.ts @@ -0,0 +1,26 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {getNextChartColor} from './colors'; + +describe('colors test', () => { + it('returns new color when called', () => { + expect(getNextChartColor()).not.toBe(getNextChartColor()); + }); + + it('returns 7 colors', () => { + const uniqueColors = new Set([...new Array(20)].map(getNextChartColor)); + expect(uniqueColors.size).toBe(7); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/util/lang.ts b/saved_models/tensorboard/tensorboard/webapp/util/lang.ts new file mode 100644 index 0000000000000000000000000000000000000000..aa79196dd446376ff104c4036ad68295a111a35e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/util/lang.ts @@ -0,0 +1,34 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +type MapObjectValuesTransformer = (value: any, key: string) => any; + +/** + * Returns a new object where all values have been transformed. + * For familiarity, the API signature was made to be as close as possible to the + * signatures of equivalent functions in popular libraries: + * - https://lodash.com/docs/#mapValues + * - https://underscorejs.org/#mapObject + */ +export function mapObjectValues( + object: Record, + transform: MapObjectValuesTransformer +) { + const result = {} as Record; + for (const key of Object.keys(object)) { + const typedKey = key as keyof T; + result[typedKey] = transform(object[typedKey], key); + } + return result as T; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/util/lang_test.ts b/saved_models/tensorboard/tensorboard/webapp/util/lang_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..520790cbfcc8f215b43ff35f3cdc2bf9c21fbb9f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/util/lang_test.ts @@ -0,0 +1,28 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {mapObjectValues} from './lang'; + +describe('mapObjectValues test', () => { + it('returns a newly transformed object', () => { + const obj = {x: 'a', y: 'b'}; + const result = mapObjectValues(obj, (value: string, key: string) => { + return key + value; + }); + + expect(obj).toEqual({x: 'a', y: 'b'}); + expect(result).not.toBe(obj); + expect(result).toEqual({x: 'xa', y: 'yb'}); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/util/ngrx.ts b/saved_models/tensorboard/tensorboard/webapp/util/ngrx.ts new file mode 100644 index 0000000000000000000000000000000000000000..26f0454b14953919331b7a1db8e83fa6846781f8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/util/ngrx.ts @@ -0,0 +1,27 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Action, ActionReducer} from '@ngrx/store'; + +export function composeReducers( + ...actionReducers: Array> +): ActionReducer { + return (state, action) => { + let intermediateState = state; + for (const reducer of actionReducers) { + intermediateState = reducer(intermediateState, action); + } + return intermediateState!; + }; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/util/ngrx_test.ts b/saved_models/tensorboard/tensorboard/webapp/util/ngrx_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..9940697c7f22578cf222a298f10816832993716d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/util/ngrx_test.ts @@ -0,0 +1,82 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {createAction, createReducer, on} from '@ngrx/store'; + +import {composeReducers} from './ngrx'; + +const incrementFoo = createAction('[UTIL TEST] Increment Foo'); +const incrementBar = createAction('[UTIL TEST] Increment Bar'); +const incrementBaz = createAction('[UTIL TEST] Increment Baz'); + +interface State { + foo: number; + bar: number; + baz: number; +} + +function buildState({foo = 10, bar = 100, baz = 5}: Partial = {}) { + return {foo, bar, baz}; +} + +const reducer1 = createReducer( + buildState(), + on(incrementFoo, (state) => { + return {...state, foo: state.foo + 1}; + }), + on(incrementBaz, (state) => { + return {...state, baz: state.baz + 1}; + }), + // This is legal in Ngrx. + on(incrementBaz, (state) => { + return {...state, baz: state.baz + 2}; + }) +); + +const reducer2 = createReducer( + buildState(), + on(incrementFoo, (state) => { + return {...state, foo: state.foo + 5}; + }), + on(incrementBar, (state) => { + return {...state, bar: state.bar + 5}; + }) +); + +describe('ngrx util', () => { + it('composes multiple reducers and run all their reducers', () => { + const reducers = composeReducers(reducer1, reducer2); + + const newState = reducers(buildState({bar: 10}), incrementBar()); + + expect(newState.bar).toBe(15); + }); + + it('calls incrementFoo handler on all reducers', () => { + const reducers = composeReducers(reducer1, reducer2); + + const newState = reducers(buildState({foo: 3}), incrementFoo()); + + // 3 + 5 + 1 + expect(newState.foo).toBe(9); + }); + + it('supports multiple handlers handling same action within a reducer', () => { + const reducers = composeReducers(reducer1, reducer2); + + const newState = reducers(buildState({baz: 4}), incrementBaz()); + + expect(newState.baz).toBe(7); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/util/string.ts b/saved_models/tensorboard/tensorboard/webapp/util/string.ts new file mode 100644 index 0000000000000000000000000000000000000000..973d6f98c6b0eec6684a7971a41742c72b11edec --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/util/string.ts @@ -0,0 +1,124 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * This regex escape character set is also used in lodash's `escapeRegExp`. + */ +const REGEXP_ESCAPE_CHARS = /[\\^$.*+?()[\]{}|]/g; + +/** + * Converts a string into a form that has been escaped for use as a literal + * argument to a regular expression constructor. + * + * Takes a string V and escapes characters to produce a new string E, such that + * new RegExp(E).test(V) === true. + */ +export function escapeForRegex(value: string): string { + // '$&' in a regex replacement indicates the last match. + return value.replace(REGEXP_ESCAPE_CHARS, '\\$&'); +} + +/** + * Processes text from left-to-right, splitting it into pieces based on the + * regex. Each piece is either an unmatched or a matched substring. + * + * For example, + * splitByRegex("a input1 b input2 c input3", /input\d/) + * returns + * [ + * {index: 0, matchesRegex: false, text: "a "}, + * {index: 2, matchesRegex: true, text: "input1"}, + * {index: 8, matchesRegex: false, text: " b "}, + * {index: 11, matchesRegex: true, text: "input2"}, + * {index: 17, matchesRegex: false, text: " c "}, + * {index: 20, matchesRegex: true, text: "input3"}, + * ] + */ +export function splitByRegex( + text: string, + regex: RegExp +): Array<{index: number; matchesRegex: boolean; text: string}> { + // 'matchAll' requires a regex with the 'global' flag. + if (!regex.flags.includes('g')) { + regex = new RegExp(regex, regex.flags + 'g'); + } + + const result = []; + + // Index of the earliest unvisited character. + let lastIndex = 0; + for (const match of text.matchAll(regex)) { + const index = match.index as number; + const matchingText = match[0]; + + // Add any text between the last match and this current one. + if (index > lastIndex) { + result.push({ + index: lastIndex, + text: text.substring(lastIndex, index), + matchesRegex: false, + }); + } + + result.push({ + index, + text: matchingText, + matchesRegex: true, + }); + + lastIndex = index + matchingText.length; + } + + // Add the remaining text piece, if any. + if (text.length > lastIndex) { + result.push({ + index: lastIndex, + text: text.substring(lastIndex, text.length), + matchesRegex: false, + }); + } + + return result; +} + +// Based on +// https://cs.chromium.org/chromium/src/third_party/devtools-frontend/src/front_end/console/ConsoleViewMessage.js?q=linkstringregex +const URL_CONTROL_CODES = '\\u0000-\\u0020\\u007f-\\u009f'; +const LINKIFY_URL_REGEX = new RegExp( + '(?:[a-zA-Z][a-zA-Z0-9+.-]{2,}:\\/\\/|data:|www\\.)[^\\s' + + URL_CONTROL_CODES + + '"]{2,}[^\\s' + + URL_CONTROL_CODES + + '"\')}\\],:;.!?]', + 'gu' +); + +/** + * Splits the string into pieces that are URLs and non-URLs for linkification. + * Invalid links (e.g. 'javascript:') are not linkified. + * + * For example, + * splitByURL("visit http://example.com today") + * Returns + * [ + * {isUrl: false, text: "visit "}, + * {isUrl: true, text: "http://example.com"}, + * {isUrl: false, text: " today"}, + * ] + */ +export function splitByURL(text: string): {isURL: boolean; text: string}[] { + return splitByRegex(text, LINKIFY_URL_REGEX).map(({matchesRegex, text}) => { + return {isURL: matchesRegex, text}; + }); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/util/string_test.ts b/saved_models/tensorboard/tensorboard/webapp/util/string_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..ff099fc67ea49abc85f2a8d14b9e15c5c75b1b55 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/util/string_test.ts @@ -0,0 +1,113 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {escapeForRegex, splitByRegex, splitByURL} from './string'; + +describe('escapeForRegex test', () => { + it('escapes unsafe characters', () => { + expect(escapeForRegex('.')).toEqual('\\.'); + + // Multiple occurrences. + expect(escapeForRegex('...')).toEqual('\\.\\.\\.'); + + // Multiple different characters. + expect(escapeForRegex('\\foo.bar[baz]')).toEqual('\\\\foo\\.bar\\[baz\\]'); + }); + + it('does not alter safe characters', () => { + expect(escapeForRegex('foo://bar@baz')).toEqual('foo://bar@baz'); + expect(escapeForRegex('1 - 2')).toEqual('1 - 2'); + expect(escapeForRegex('a_b')).toEqual('a_b'); + }); +}); + +describe('splitByRegex', () => { + it('properly splits when there is no match', () => { + expect(splitByRegex('foo', /bar/g)).toEqual([ + {index: 0, matchesRegex: false, text: 'foo'}, + ]); + }); + + it('properly splits when there is a match', () => { + expect(splitByRegex('bar', /bar/g)).toEqual([ + {index: 0, matchesRegex: true, text: 'bar'}, + ]); + }); + + it('properly splits on match - nomatch', () => { + expect(splitByRegex('bar foo', /bar/g)).toEqual([ + {index: 0, matchesRegex: true, text: 'bar'}, + {index: 3, matchesRegex: false, text: ' foo'}, + ]); + }); + + it('properly splits on nomatch - match', () => { + expect(splitByRegex('foo bar', /bar/g)).toEqual([ + {index: 0, matchesRegex: false, text: 'foo '}, + {index: 4, matchesRegex: true, text: 'bar'}, + ]); + }); + + it('properly splits on match - nomatch - match', () => { + expect(splitByRegex('bar foo bar', /bar/g)).toEqual([ + {index: 0, matchesRegex: true, text: 'bar'}, + {index: 3, matchesRegex: false, text: ' foo '}, + {index: 8, matchesRegex: true, text: 'bar'}, + ]); + }); + + it('properly splits multiple matches from left to right', () => { + expect(splitByRegex('aaaaa', /aa/g)).toEqual([ + {index: 0, matchesRegex: true, text: 'aa'}, + {index: 2, matchesRegex: true, text: 'aa'}, + {index: 4, matchesRegex: false, text: 'a'}, + ]); + }); + + it('adds the global flag if needed', () => { + expect(splitByRegex('aaaaa', /aa/)).toEqual([ + {index: 0, matchesRegex: true, text: 'aa'}, + {index: 2, matchesRegex: true, text: 'aa'}, + {index: 4, matchesRegex: false, text: 'a'}, + ]); + }); +}); + +describe('splitByURL', () => { + it('properly extracts proper URLs', () => { + expect(splitByURL('hi http://hello bye')).toEqual([ + {isURL: false, text: 'hi '}, + {isURL: true, text: 'http://hello'}, + {isURL: false, text: ' bye'}, + ]); + + expect(splitByURL('hi http://hello:6006 bye')).toEqual([ + {isURL: false, text: 'hi '}, + {isURL: true, text: 'http://hello:6006'}, + {isURL: false, text: ' bye'}, + ]); + + expect(splitByURL('hi www.example.com bye')).toEqual([ + {isURL: false, text: 'hi '}, + {isURL: true, text: 'www.example.com'}, + {isURL: false, text: ' bye'}, + ]); + }); + + it('does not extract invalid URLs', () => { + expect(splitByURL('hi javascript:foo bye')).toEqual([ + {isURL: false, text: 'hi javascript:foo bye'}, + ]); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/util/types.ts b/saved_models/tensorboard/tensorboard/webapp/util/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..b55509dc3f52d32c64293b6f8dfbbe0d6cb5243e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/util/types.ts @@ -0,0 +1,21 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview General utility types. + */ + +export type DeepReadonly = { + readonly [P in keyof T]: DeepReadonly; +}; diff --git a/saved_models/tensorboard/tensorboard/webapp/util/ui_selectors.ts b/saved_models/tensorboard/tensorboard/webapp/util/ui_selectors.ts new file mode 100644 index 0000000000000000000000000000000000000000..b3476f5741bfb21339d400debc816b017413096a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/util/ui_selectors.ts @@ -0,0 +1,50 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview Module that provides convenience selector for UI. + * + * NOTE: For accessing a specific feature, please define and use the selectors + * provided by the feature. + * + * This module provides selectors that access states across multiple features + * for convenience of the UI[1]. + * + * [1]: In most cases, one should be able to use combination of rxjs primitives + * like `mergeMap` and `withLatestFrom` to achieve the same thing. + */ + +import {createSelector} from '@ngrx/store'; + +import {getExperimentIdsFromRoute} from '../app_routing/store/app_routing_selectors'; +import {State} from '../app_state'; +import {getRunSelectionMap} from '../runs/store/runs_selectors'; + +/** @typehack */ import * as _typeHackStore from '@ngrx/store'; + +/** + * Selects the run selection (runId to boolean) of current routeId. + * + * Note that emits null when current route is not about an experiment. + */ +export const getCurrentRouteRunSelection = createSelector( + (state: State): Map | null => { + const experimentIds = getExperimentIdsFromRoute(state); + if (experimentIds === null) { + return null; + } + return getRunSelectionMap(state, {experimentIds}); + }, + (runSelection) => runSelection +); diff --git a/saved_models/tensorboard/tensorboard/webapp/util/ui_selectors_test.ts b/saved_models/tensorboard/tensorboard/webapp/util/ui_selectors_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..194651489dbdb1432d3f93fafbb2f26751dbe8ec --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/util/ui_selectors_test.ts @@ -0,0 +1,103 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + buildAppRoutingState, + buildStateFromAppRoutingState, +} from '../app_routing/store/testing'; +import {buildRoute} from '../app_routing/testing'; +import {RouteKind} from '../app_routing/types'; +import {buildRunsState, buildStateFromRunsState} from '../runs/store/testing'; +import { + getExperimentIdsFromRoute, + getRouteId, + getRunSelectionMap, +} from '../selectors'; + +import {getCurrentRouteRunSelection} from './ui_selectors'; + +describe('ui_selectors test', () => { + beforeEach(() => { + // Clear memoization in the internal selectors. + getExperimentIdsFromRoute.release(); + getRouteId.release(); + getRunSelectionMap.release(); + getCurrentRouteRunSelection.release(); + }); + + describe('#getCurrentRouteRunSelection', () => { + it('returns selection map of current eid', () => { + const state = { + ...buildStateFromAppRoutingState( + buildAppRoutingState({ + activeRoute: buildRoute({ + routeKind: RouteKind.COMPARE_EXPERIMENT, + pathname: '/compare/exp1:123,exp2:234/', + params: {experimentIds: 'exp1:123,exp2:234'}, + }), + }) + ), + ...buildStateFromRunsState( + buildRunsState({ + selectionState: new Map([ + [ + '["123","234"]', + new Map([ + ['r1', true], + ['r2', false], + ]), + ], + ]), + }) + ), + }; + + expect(getCurrentRouteRunSelection(state)).toEqual( + new Map([ + ['r1', true], + ['r2', false], + ]) + ); + }); + + it('returns null if current route does not have experimentIds', () => { + const state = { + ...buildStateFromAppRoutingState( + buildAppRoutingState({ + activeRoute: buildRoute({ + routeKind: RouteKind.UNKNOWN, + pathname: '/foobar/234', + params: {}, + }), + }) + ), + ...buildStateFromRunsState( + buildRunsState({ + selectionState: new Map([ + [ + '["234"]', + new Map([ + ['r1', true], + ['r2', false], + ]), + ], + ]), + }) + ), + }; + + expect(getCurrentRouteRunSelection(state)).toBeNull(); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/util/value_formatter.ts b/saved_models/tensorboard/tensorboard/webapp/util/value_formatter.ts new file mode 100644 index 0000000000000000000000000000000000000000..cc36d6d673832a5cba7cd7c01905e0e7487b23b3 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/util/value_formatter.ts @@ -0,0 +1,73 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview Utilities related to formatting values. + */ + +/** + * Formats a time, given as number of hours. e.g. + * > formatRelativeTimeInMs(10555 * 60 * 60) + * "10h 33m 17s" + */ +export function formatRelativeTimeInMs(timeInMs: number): string { + // We will always show 2 units of precision, e.g days and hours, or + // minutes and seconds, but not hours and minutes and seconds. + const result: string[] = []; + const timeInHours = timeInMs / (1000 * 60 * 60); + const days = Math.floor(timeInHours / 24); + if (days) { + result.push(days.toString() + 'd'); + } + + const remainingHours = timeInHours - days * 24; + const hours = Math.floor(remainingHours); + if (hours || days) { + result.push(hours.toString() + 'h'); + } + + const remainingMinutes = (remainingHours - hours) * 60; + const minutes = Math.floor(remainingMinutes); + if (minutes || hours || days) { + result.push(minutes.toString() + 'm'); + } + + const remainingSeconds = (remainingMinutes - minutes) * 60; + const seconds = Math.floor(remainingSeconds); + result.push(seconds.toString() + 's'); + + return result.join(' '); +} + +/** + * Integers less than this number can be safely formatted as-is. + */ +const MAX_SMALL_INTEGER = Math.pow(10, 4); + +/** + * This numeric formatter currently covers common cases only. + * + * The Polymer version relies on D3, which gives more features for free: + * selecting decimal vs exponent notation, rounding to significant digits, and + * removing insignificant trailing zeros. + */ +export function formatNumber(value: number): string { + if (isNaN(value) || !Number.isFinite(value)) { + return value.toString(); + } + if (Number.isInteger(value) && Math.abs(value) < MAX_SMALL_INTEGER) { + return value.toString(); + } + return value.toPrecision(4); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/util/value_formatter_test.ts b/saved_models/tensorboard/tensorboard/webapp/util/value_formatter_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..39211e0faa05469763d82d7a0ef9e2f4112df10e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/util/value_formatter_test.ts @@ -0,0 +1,41 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {formatNumber, formatRelativeTimeInMs} from './value_formatter'; + +describe('value formatter test', () => { + it('formatHoursRelative properly formats', () => { + const oneHourInMs = 1000 * 60 * 60; + expect(formatRelativeTimeInMs(oneHourInMs * 10.555)).toBe('10h 33m 17s'); + expect(formatRelativeTimeInMs(oneHourInMs * NaN)).toBe('NaNs'); + expect(formatRelativeTimeInMs(oneHourInMs * 10)).toBe('10h 0m 0s'); + expect(formatRelativeTimeInMs(oneHourInMs * 0.5)).toBe('30m 0s'); + expect(formatRelativeTimeInMs(oneHourInMs * 0.01)).toBe('36s'); + expect(formatRelativeTimeInMs(oneHourInMs * 0.0001)).toBe('0s'); + }); + + it('formatNumber properly formats', () => { + expect(formatNumber(1)).toBe('1'); + expect(formatNumber(10.55)).toBe('10.55'); + expect(formatNumber(-10.55)).toBe('-10.55'); + expect(formatNumber(-10.555555)).toBe('-10.56'); + expect(formatNumber(10.555555)).toBe('10.56'); + expect(formatNumber(0.000001234567)).toBe('0.000001235'); + expect(formatNumber(0.0000001234567)).toBe('1.235e-7'); + expect(formatNumber(100000.123456789)).toBe('1.000e+5'); + expect(formatNumber(NaN)).toBe('NaN'); + expect(formatNumber(2e23)).toBe('2.000e+23'); + expect(formatNumber(-2e-23)).toBe('-2.000e-23'); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/BUILD b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..2cf2798810a8a0e746cd7d78e977811fb8a51c4a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/BUILD @@ -0,0 +1,131 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +ng_module( + name = "webapp_data_source", + srcs = [ + "tb_server_data_source.ts", + "tb_server_data_source_module.ts", + ], + deps = [ + ":http_client", + "//tensorboard/webapp/core:types", + "//tensorboard/webapp/types", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//rxjs", + ], +) + +ng_module( + name = "webapp_data_source_test_lib", + testonly = True, + srcs = [ + "tb_server_data_source_test.ts", + ], + deps = [ + ":http_client_testing", + ":webapp_data_source", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/core:types", + "@npm//@types/jasmine", + ], +) + +ng_module( + name = "http_client", + srcs = [ + "tb_http_client.ts", + "tb_http_client_module.ts", + "tb_http_client_types.ts", + ], + deps = [ + "//tensorboard/webapp/angular:expect_angular_common_http", + "//tensorboard/webapp/feature_flag", + "//tensorboard/webapp/feature_flag:types", + "//tensorboard/webapp/feature_flag/store", + "//tensorboard/webapp/feature_flag/store:types", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//@ngrx/store", + "@npm//rxjs", + ], +) + +ng_module( + name = "http_client_test", + testonly = True, + srcs = [ + "tb_http_client_test.ts", + ], + deps = [ + ":feature_flag_testing", + ":http_client", + ":http_client_testing", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/core:types", + "//tensorboard/webapp/feature_flag/store", + "//tensorboard/webapp/feature_flag/store:types", + "@npm//@ngrx/store", + "@npm//@types/jasmine", + ], +) + +ng_module( + name = "feature_flag", + srcs = [ + "tb_feature_flag_data_source.ts", + "tb_feature_flag_data_source_types.ts", + "tb_feature_flag_module.ts", + ], + deps = [ + "//tensorboard/webapp/types", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//rxjs", + ], +) + +ng_module( + name = "feature_flag_testing", + testonly = True, + srcs = [ + "tb_feature_flag_testing.ts", + ], + deps = [ + ":feature_flag", + "@npm//@angular/core", + ], +) + +ng_module( + name = "feature_flag_test_lib", + testonly = True, + srcs = [ + "tb_feature_flag_data_source_test.ts", + ], + deps = [ + ":feature_flag", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "@npm//@angular/core", + "@npm//@types/jasmine", + ], +) + +ng_module( + name = "http_client_testing", + testonly = True, + srcs = [ + "tb_http_client_testing.ts", + ], + deps = [ + ":http_client", + "//tensorboard/webapp/angular:expect_angular_common_http_testing", + "//tensorboard/webapp/angular:expect_ngrx_store_testing", + "//tensorboard/webapp/feature_flag/store:store_test_lib", + "@npm//@angular/core", + "@npm//@ngrx/store", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_feature_flag_data_source.ts b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_feature_flag_data_source.ts new file mode 100644 index 0000000000000000000000000000000000000000..f9bfe821b2b40b6f6f5a974710218a1dfa17e6b7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_feature_flag_data_source.ts @@ -0,0 +1,41 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; + +import {TBFeatureFlagDataSource} from './tb_feature_flag_data_source_types'; + +/** + * Save the initial URL query params, before the AppRoutingEffects initialize. + */ +const initialURLSearchParams = new URLSearchParams(window.location.search); + +const util = { + getParams() { + return initialURLSearchParams; + }, +}; + +@Injectable() +export class QueryParamsFeatureFlagDataSource extends TBFeatureFlagDataSource { + getFeatures() { + const params = util.getParams(); + return { + enabledExperimentalPlugins: params.getAll('experimentalPlugin'), + inColab: params.get('tensorboardColab') === 'true', + }; + } +} + +export const TEST_ONLY = {util}; diff --git a/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_feature_flag_data_source_test.ts b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_feature_flag_data_source_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..caa378491181676aa321ceeb470ec01450a29b4c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_feature_flag_data_source_test.ts @@ -0,0 +1,75 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed} from '@angular/core/testing'; + +import { + QueryParamsFeatureFlagDataSource, + TEST_ONLY, +} from './tb_feature_flag_data_source'; + +describe('tb_feature_flag_data_source', () => { + describe('QueryParamsFeatureFlagDataSource', () => { + let dataSource: QueryParamsFeatureFlagDataSource; + beforeEach(async () => { + await TestBed.configureTestingModule({ + providers: [QueryParamsFeatureFlagDataSource], + }).compileComponents(); + + dataSource = TestBed.inject(QueryParamsFeatureFlagDataSource); + }); + + describe('getFeatures', () => { + it('returns enabledExperimentalPlugins from the query params', () => { + spyOn(TEST_ONLY.util, 'getParams').and.returnValue( + new URLSearchParams('experimentalPlugin=a&experimentalPlugin=b') + ); + expect(dataSource.getFeatures()).toEqual({ + enabledExperimentalPlugins: ['a', 'b'], + inColab: false, + }); + }); + + it('returns isInColab when true', () => { + spyOn(TEST_ONLY.util, 'getParams').and.returnValue( + new URLSearchParams('tensorboardColab=true') + ); + expect(dataSource.getFeatures()).toEqual({ + enabledExperimentalPlugins: [], + inColab: true, + }); + }); + + it('returns isInColab when false', () => { + spyOn(TEST_ONLY.util, 'getParams').and.returnValue( + new URLSearchParams('tensorboardColab=false') + ); + expect(dataSource.getFeatures()).toEqual({ + enabledExperimentalPlugins: [], + inColab: false, + }); + }); + + it('returns empty enabledExperimentalPlugins when empty', () => { + spyOn(TEST_ONLY.util, 'getParams').and.returnValue( + new URLSearchParams('') + ); + expect(dataSource.getFeatures()).toEqual({ + enabledExperimentalPlugins: [], + inColab: false, + }); + }); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_feature_flag_data_source_types.ts b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_feature_flag_data_source_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..36f156a5bdbec69eb0ce71e4ca9fd2b2722d64b7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_feature_flag_data_source_types.ts @@ -0,0 +1,39 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; + +/** + * Example of the feature value: + * + * reload interval: number + * is feature enabled: boolean + * enabled experimental plugins: string[] + */ +export type FeatureValue = string | boolean | number | string[]; + +@Injectable() +export abstract class TBFeatureFlagDataSource { + /** + * Gets feature flags defined. + * + * The "feature" is very loosely defined so other applications can define more + * flags. It is up to the application to better type the flags and create necessary + * facilities (e.g., strongly typed selector). + */ + abstract getFeatures(): { + enabledExperimentalPlugins: string[]; + [featureKey: string]: FeatureValue; + }; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_feature_flag_module.ts b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_feature_flag_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..1f82aefd0e3677c787e9c4aa0683201a92dc267e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_feature_flag_module.ts @@ -0,0 +1,29 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {NgModule} from '@angular/core'; + +import {TBFeatureFlagDataSource} from './tb_feature_flag_data_source_types'; +import {QueryParamsFeatureFlagDataSource} from './tb_feature_flag_data_source'; + +@NgModule({ + providers: [ + { + provide: TBFeatureFlagDataSource, + useClass: QueryParamsFeatureFlagDataSource, + }, + ], +}) +export class TBFeatureFlagModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_feature_flag_testing.ts b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_feature_flag_testing.ts new file mode 100644 index 0000000000000000000000000000000000000000..72f85a4ef76e4f28aa923fabf14a195141394863 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_feature_flag_testing.ts @@ -0,0 +1,38 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {NgModule, Injectable} from '@angular/core'; + +import {TBFeatureFlagDataSource} from './tb_feature_flag_data_source_types'; + +@Injectable() +export class TestingTBFeatureFlagDataSource extends TBFeatureFlagDataSource { + getFeatures() { + return { + enabledExperimentalPlugins: [] as string[], + }; + } +} + +@NgModule({ + providers: [ + TestingTBFeatureFlagDataSource, + { + provide: TBFeatureFlagDataSource, + useExisting: TestingTBFeatureFlagDataSource, + }, + ], +}) +export class TBFeatureFlagTestingModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_http_client.ts b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_http_client.ts new file mode 100644 index 0000000000000000000000000000000000000000..1d8a74664b10a4e4e28f863b92000e8c70d1b767 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_http_client.ts @@ -0,0 +1,101 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {HttpClient} from '@angular/common/http'; +import {Store} from '@ngrx/store'; +import {Observable} from 'rxjs'; +import {filter, mergeMap, take, withLatestFrom} from 'rxjs/operators'; + +// Intentionally import directly from feature_flag/, not the hourglass +// AppState/selectors. AppState depends on code from feature directories that +// use TBHttpClient themselves, so we avoid a possible circular dependency. +import {State} from '../feature_flag/store/feature_flag_types'; +import { + getIsFeatureFlagsLoaded, + getIsInColab, +} from '../feature_flag/store/feature_flag_selectors'; + +import { + DeleteOptions, + GetOptions, + PostOptions, + PutOptions, + TBHttpClientInterface, +} from './tb_http_client_types'; + +export {HttpErrorResponse} from '@angular/common/http'; + +function convertFormDataToObject(formData: FormData) { + const result = {} as {[param: string]: string | string[]}; + for (const [key, value] of formData.entries()) { + result[key] = value as string; + } + return result; +} + +@Injectable() +export class TBHttpClient implements TBHttpClientInterface { + constructor( + private readonly http: HttpClient, + private readonly store: Store + ) {} + + get( + path: string, + options: GetOptions = {} + ): Observable { + return this.http.get(path, options); + } + + post( + path: string, + body: FormData, + options: PostOptions = {} + ): Observable { + return this.store.select(getIsFeatureFlagsLoaded).pipe( + filter((isLoaded) => Boolean(isLoaded)), + take(1), + withLatestFrom(this.store.select(getIsInColab)), + mergeMap(([, isInColab]) => { + // Google-internal Colab does not support HTTP POST requests, so we fall + // back to HTTP GET (even though public Colab supports POST) + // See b/72932164. + if (isInColab) { + return this.http.get(path, { + headers: options.headers, + params: convertFormDataToObject(body), + }); + } else { + return this.http.post(path, body, options); + } + }) + ); + } + + put( + path: string, + body: any, + options: PutOptions = {} + ): Observable { + return this.http.put(path, body, options); + } + + delete( + path: string, + options: DeleteOptions = {} + ): Observable { + return this.http.delete(path, options); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_http_client_module.ts b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_http_client_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..5436b53709aeefff670984ceeab77faf1d834751 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_http_client_module.ts @@ -0,0 +1,23 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; +import {HttpClientModule} from '@angular/common/http'; +import {TBHttpClient} from './tb_http_client'; + +@NgModule({ + imports: [HttpClientModule], + providers: [TBHttpClient], +}) +export class TBHttpClientModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_http_client_test.ts b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_http_client_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..e7abcb800fd07b577756338dd6fa2b266ff22b54 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_http_client_test.ts @@ -0,0 +1,94 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {TestBed} from '@angular/core/testing'; +import {Store} from '@ngrx/store'; +import {MockStore} from '@ngrx/store/testing'; + +import {State} from '../feature_flag/store/feature_flag_types'; +import { + getIsFeatureFlagsLoaded, + getIsInColab, +} from '../feature_flag/store/feature_flag_selectors'; +import {TBFeatureFlagTestingModule} from './tb_feature_flag_testing'; +import { + HttpTestingController, + TBHttpClientTestingModule, +} from './tb_http_client_testing'; +import {TBHttpClient} from './tb_http_client'; + +describe('TBHttpClient', () => { + let tbHttpClient: TBHttpClient; + let httpMock: HttpTestingController; + let store: MockStore; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TBFeatureFlagTestingModule, TBHttpClientTestingModule], + providers: [TBHttpClient], + }).compileComponents(); + + store = TestBed.inject>(Store) as MockStore; + httpMock = TestBed.inject(HttpTestingController); + tbHttpClient = TestBed.inject(TBHttpClient); + }); + + it('waits for feature flags before making POST request', () => { + const body = new FormData(); + body.append('formKey', 'value'); + store.overrideSelector(getIsFeatureFlagsLoaded, false); + tbHttpClient.post('foo', body).subscribe(jasmine.createSpy()); + httpMock.expectNone('foo'); + + store.overrideSelector(getIsFeatureFlagsLoaded, true); + store.refreshState(); + httpMock.expectOne((req) => { + return ( + req.method === 'POST' && + req.urlWithParams === 'foo' && + JSON.stringify(req.body) === JSON.stringify(body) + ); + }); + }); + + it('makes POST requests when not in Colab', () => { + const body = new FormData(); + body.append('formKey', 'value'); + store.overrideSelector(getIsFeatureFlagsLoaded, true); + store.overrideSelector(getIsInColab, false); + tbHttpClient.post('foo', body).subscribe(jasmine.createSpy()); + httpMock.expectOne((req) => { + return ( + req.method === 'POST' && + req.urlWithParams === 'foo' && + JSON.stringify(req.body) === JSON.stringify(body) + ); + }); + }); + + it('converts POST requests to GET when in Colab', () => { + const body = new FormData(); + body.append('formKey', 'value'); + store.overrideSelector(getIsFeatureFlagsLoaded, true); + store.overrideSelector(getIsInColab, true); + tbHttpClient.post('foo', body).subscribe(jasmine.createSpy()); + httpMock.expectOne((req) => { + return ( + req.method === 'GET' && + req.urlWithParams === 'foo?formKey=value' && + !req.body + ); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_http_client_testing.ts b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_http_client_testing.ts new file mode 100644 index 0000000000000000000000000000000000000000..8bc1d926e5e740b9e0925d8dcb0451946e51b83c --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_http_client_testing.ts @@ -0,0 +1,40 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export {HttpTestingController} from '@angular/common/http/testing'; + +import {NgModule} from '@angular/core'; +import {HttpClientTestingModule} from '@angular/common/http/testing'; +import {provideMockStore} from '@ngrx/store/testing'; + +import { + buildState as buildFeatureFlagAppState, + buildFeatureFlagState, +} from '../feature_flag/store/testing'; + +import {TBHttpClientModule} from './tb_http_client_module'; + +@NgModule({ + imports: [TBHttpClientModule, HttpClientTestingModule], + providers: [ + provideMockStore({ + initialState: buildFeatureFlagAppState( + buildFeatureFlagState({ + isFeatureFlagsLoaded: true, + }) + ), + }), + ], +}) +export class TBHttpClientTestingModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_http_client_types.ts b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_http_client_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..63f753d99b2c806ea8aa2a327062e1cbb2a7a1c2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_http_client_types.ts @@ -0,0 +1,50 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {HttpHeaders, HttpParams} from '@angular/common/http'; +import {Observable} from 'rxjs'; + +export interface HttpOptions { + headers?: HttpHeaders; + params?: HttpParams | {[paramKey: string]: string | string[]}; +} + +export type GetOptions = HttpOptions; +export type PostOptions = HttpOptions; +export type PutOptions = HttpOptions; +export type DeleteOptions = HttpOptions; + +export interface TBHttpClientInterface { + get( + path: string, + option?: GetOptions + ): Observable; + + post( + path: string, + body: any, + options?: PostOptions + ): Observable; + + put( + path: string, + body: any, + options?: PutOptions + ): Observable; + + delete( + path: string, + options?: DeleteOptions + ): Observable; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_server_data_source.ts b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_server_data_source.ts new file mode 100644 index 0000000000000000000000000000000000000000..a27c1219ee7e3b80cb7a53ba31a2bd1eb663eb3b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_server_data_source.ts @@ -0,0 +1,85 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Injectable} from '@angular/core'; +import {from, forkJoin, throwError, Observable} from 'rxjs'; +import {catchError, map} from 'rxjs/operators'; + +import {Environment, PluginsListing} from '../types/api'; +import {PluginsListFailureCode} from '../core/types'; + +import {HttpErrorResponse, TBHttpClient} from './tb_http_client'; + +/** @typehack */ import * as _typeHackRxjs from 'rxjs'; + +function getPluginsListingQueryParams(enabledExperimentPluginIds: string[]) { + if (!enabledExperimentPluginIds.length) { + return null; + } + + const params = new URLSearchParams(); + for (const pluginId of enabledExperimentPluginIds) { + params.append('experimentalPlugin', pluginId); + } + return params; +} + +function handleError(e: any) { + let status = PluginsListFailureCode.UNKNOWN; + if (e instanceof HttpErrorResponse) { + if (e.status === 404) { + status = PluginsListFailureCode.NOT_FOUND; + } + } + return throwError(new TBServerError(status)); +} + +export class TBServerError { + constructor(public readonly failureCode: PluginsListFailureCode) {} +} + +@Injectable() +export class TBServerDataSource { + // TODO(soergel): implements WebappDataSource + private tfBackend = (document.createElement('tf-backend') as any).tf_backend; + + constructor(private http: TBHttpClient) {} + + fetchPluginsListing(enabledExperimentPluginIds: string[]) { + const params = getPluginsListingQueryParams(enabledExperimentPluginIds); + const pathWithParams = params + ? `data/plugins_listing?${params.toString()}` + : 'data/plugins_listing'; + return this.http + .get(pathWithParams) + .pipe(catchError(handleError)); + } + + fetchEnvironment(): Observable { + // Make a request for data for the angular-specific portion of the app. + const dataFetch = this.http.get('data/environment'); + // Force a data load for the polymer-specific portion of the app. + // This leads to duplicate requests but hopefully the state is temporary until + // we migrate everything from polymer to angular. + const polymerEnvironmentRefresh = from( + this.tfBackend.environmentStore.refresh() + ); + // Wait for both operations to complete and return the response from the + // explicit http get call. + return forkJoin([dataFetch, polymerEnvironmentRefresh]).pipe( + map(([data]) => data), + catchError(handleError) + ); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_server_data_source_module.ts b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_server_data_source_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..0c8fa6f5941237a2d54d3eb0dcad4b955a6f1bbb --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_server_data_source_module.ts @@ -0,0 +1,24 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; + +import {TBHttpClientModule} from './tb_http_client_module'; +import {TBServerDataSource} from './tb_server_data_source'; + +@NgModule({ + imports: [TBHttpClientModule], + providers: [TBServerDataSource], +}) +export class TBServerDataSourceModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_server_data_source_test.ts b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_server_data_source_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..8e99c9e95891ec69c4c1a0abeadcdefda58b2123 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/webapp_data_source/tb_server_data_source_test.ts @@ -0,0 +1,167 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {fakeAsync, flush, TestBed} from '@angular/core/testing'; + +import {TBServerDataSource, TBServerError} from './tb_server_data_source'; +import { + TBHttpClientTestingModule, + HttpTestingController, +} from './tb_http_client_testing'; +import {PluginsListFailureCode} from '../core/types'; + +describe('tb_server_data_source', () => { + describe('TBServerDataSource', () => { + let dataSource: TBServerDataSource; + let httpMock: HttpTestingController; + let tbBackend: any; + + beforeEach(async () => { + tbBackend = { + tf_backend: { + environmentStore: { + refresh: jasmine.createSpy().and.callFake(() => Promise.resolve()), + }, + }, + }; + + const createElementSpy = spyOn( + document, + 'createElement' + ).and.callThrough(); + + createElementSpy.withArgs('tf-backend').and.returnValue(tbBackend); + + await TestBed.configureTestingModule({ + imports: [TBHttpClientTestingModule], + providers: [TBServerDataSource], + }).compileComponents(); + + httpMock = TestBed.inject(HttpTestingController); + dataSource = TestBed.inject(TBServerDataSource); + }); + + describe('fetchPluginsListing', () => { + it('fetches from "data/plugins_listing"', () => { + dataSource.fetchPluginsListing([]).subscribe(jasmine.createSpy()); + httpMock.expectOne('data/plugins_listing'); + }); + + it('passes query parameter, "experimentalPlugin"', () => { + dataSource + .fetchPluginsListing(['foo', 'bar']) + .subscribe(jasmine.createSpy()); + httpMock.expectOne( + 'data/plugins_listing?experimentalPlugin=foo&experimentalPlugin=bar' + ); + }); + + it('handles "data/plugins_listing" failures', fakeAsync(() => { + const results = jasmine.createSpy(); + const error = jasmine.createSpy(); + dataSource.fetchPluginsListing([]).subscribe(results, error); + + httpMock + .expectOne('data/plugins_listing') + .error(new ErrorEvent('FakeError'), {status: 501}); + // Flush the promise in the microtask. + flush(); + + expect(results).not.toHaveBeenCalled(); + expect(error).toHaveBeenCalledWith( + new TBServerError(PluginsListFailureCode.UNKNOWN) + ); + })); + }); + + describe('fetchEnvironment', () => { + it('fetches from "data/environment"', fakeAsync(() => { + const results = jasmine.createSpy(); + dataSource.fetchEnvironment().subscribe(results); + + httpMock.expectOne('data/environment').flush({ + data_location: '/dev/null', + window_title: 'my_environment_test', + }); + // Flush the promise in the microtask. + flush(); + + expect(results).toHaveBeenCalledWith({ + data_location: '/dev/null', + window_title: 'my_environment_test', + }); + })); + + it('calls the polymer API to refresh the polymer store', () => { + dataSource.fetchEnvironment().subscribe(() => {}); + expect( + tbBackend.tf_backend.environmentStore.refresh + ).toHaveBeenCalled(); + }); + + it('handles "data/environment" failures', fakeAsync(() => { + const results = jasmine.createSpy(); + const error = jasmine.createSpy(); + dataSource.fetchEnvironment().subscribe(results, error); + + httpMock + .expectOne('data/environment') + .error(new ErrorEvent('FakeError'), {status: 444}); + // Flush the promise in the microtask. + flush(); + + expect(results).not.toHaveBeenCalled(); + expect(error).toHaveBeenCalledWith( + new TBServerError(PluginsListFailureCode.UNKNOWN) + ); + })); + }); + + describe('handleError', () => { + it('handles 404 failures as NOT_FOUND', fakeAsync(() => { + const error = jasmine.createSpy(); + dataSource + .fetchPluginsListing([]) + .subscribe(jasmine.createSpy(), error); + + httpMock + .expectOne('data/plugins_listing') + .error(new ErrorEvent('FakeError'), {status: 404}); + // Flush the promise in the microtask. + flush(); + + expect(error).toHaveBeenCalledWith( + new TBServerError(PluginsListFailureCode.NOT_FOUND) + ); + })); + + it('handles other failures as UNKNOWN', fakeAsync(() => { + const error = jasmine.createSpy(); + dataSource + .fetchPluginsListing([]) + .subscribe(jasmine.createSpy(), error); + + httpMock + .expectOne('data/plugins_listing') + .error(new ErrorEvent('FakeError'), {status: 500}); + // Flush the promise in the microtask. + flush(); + + expect(error).toHaveBeenCalledWith( + new TBServerError(PluginsListFailureCode.UNKNOWN) + ); + })); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/BUILD b/saved_models/tensorboard/tensorboard/webapp/widgets/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..3277af5f21f17121e424b97ca32116a27543c23b --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/BUILD @@ -0,0 +1,47 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "resize_detector", + srcs = [ + "resize_detector_directive.ts", + "resize_detector_module.ts", + ], + deps = [ + "@npm//@angular/core", + "@npm//@types/resize-observer-browser", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "resize_detector_test", + testonly = True, + srcs = [ + "resize_detector_test.ts", + ], + deps = [ + ":resize_detector", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "@npm//@angular/core", + "@npm//@types/jasmine", + "@npm//@types/resize-observer-browser", + ], +) + +ng_module( + name = "resize_detector_testing", + testonly = True, + srcs = [ + "resize_detector_testing_module.ts", + ], + deps = [ + "//tensorboard/webapp/angular:expect_angular_core_testing", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/dropdown/BUILD b/saved_models/tensorboard/tensorboard/webapp/widgets/dropdown/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..153e00653cdb1ce84d552a757c641971cbfa1b17 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/dropdown/BUILD @@ -0,0 +1,26 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "dropdown_styles", + src = "dropdown_component.scss", +) + +ng_module( + name = "dropdown", + srcs = [ + "dropdown_component.ts", + "dropdown_module.ts", + ], + assets = [ + ":dropdown_styles", + ], + deps = [ + "//tensorboard/webapp/angular:expect_angular_material_select", + "@npm//@angular/core", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/dropdown/dropdown_component.scss b/saved_models/tensorboard/tensorboard/webapp/widgets/dropdown/dropdown_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..6a2bf5caa8bde043776a47d6106c6fc70ca59c1e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/dropdown/dropdown_component.scss @@ -0,0 +1,22 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +mat-select { + border: 1px solid mat-color($tf-slate, 500); + border-radius: 3px; + box-sizing: border-box; + padding: 6px; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/dropdown/dropdown_component.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/dropdown/dropdown_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..b6a3bf6b791e49942a827f468e3b0daa4685b6fa --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/dropdown/dropdown_component.ts @@ -0,0 +1,40 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, EventEmitter, Input, Output} from '@angular/core'; + +export interface DropdownOption { + value: any; + displayText: string; +} + +@Component({ + selector: 'tb-dropdown', + template: ` + + + {{ option.displayText }} + + + `, + styleUrls: [`dropdown_component.css`], +}) +export class DropdownComponent { + @Input() value = ''; + @Input() options: DropdownOption[] = []; + @Output() selectionChange = new EventEmitter(); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/dropdown/dropdown_module.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/dropdown/dropdown_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..919060492580cba871f648b90a19ca7a834fbf16 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/dropdown/dropdown_module.ts @@ -0,0 +1,26 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {MatSelectModule} from '@angular/material/select'; + +import {DropdownComponent} from './dropdown_component'; + +@NgModule({ + declarations: [DropdownComponent], + exports: [DropdownComponent], + imports: [CommonModule, MatSelectModule], +}) +export class DropdownModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/BUILD b/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..7bb1c4880bef814a1714ff4661160a065883dbd5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/BUILD @@ -0,0 +1,43 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "histogram", + srcs = [ + "histogram_component.ts", + "histogram_module.ts", + ], + deps = [ + ":types", + "@npm//@angular/core", + ], +) + +tf_ts_library( + name = "histogram_test", + testonly = True, + srcs = [ + "histogram_test.ts", + "histogram_util_test.ts", + ], + deps = [ + ":histogram", + ":types", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_platform_browser_animations", + "@npm//@angular/core", + "@npm//@types/jasmine", + ], +) + +tf_ts_library( + name = "types", + srcs = [ + "histogram_types.ts", + "histogram_util.ts", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/histogram_component.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/histogram_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..4d0c0f08bafa2a7636ba9daecd74336338d1f82a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/histogram_component.ts @@ -0,0 +1,126 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + Component, + ElementRef, + Input, + OnChanges, + OnInit, + SimpleChanges, +} from '@angular/core'; + +import { + ColorScale, + HistogramData, + HistogramMode, + TimeProperty, +} from './histogram_types'; + +export interface VzHistogramTimeSeries extends HTMLElement { + mode: HistogramMode; + timeProperty: TimeProperty; + colorScale: ColorScale; + setSeriesData: (name: string, data: VzHistogramDatum[]) => void; + redraw(): void; +} + +interface VzHistogramDatum { + wall_time: number; + step: number; + bins: Array<{x: number; dx: number; y: number}>; +} + +@Component({ + selector: 'tb-histogram', + template: '', + styles: [ + ` + :host { + display: flex; + } + `, + ], +}) +export class HistogramComponent implements OnInit, OnChanges { + private readonly element: VzHistogramTimeSeries; + + @Input() mode: HistogramMode = HistogramMode.OFFSET; + + @Input() timeProperty: TimeProperty = TimeProperty.STEP; + + /** + * TODO(psybuzz): VzHistogram only needs 'name', 'colorScale' properties to + * determine the histogram color. We could replace these with a single 'color' + * property to make the interface simpler. + */ + @Input() colorScale?: ColorScale; + + @Input() name!: string; + + @Input() data!: HistogramData; + + constructor(private readonly host: ElementRef) { + this.element = document.createElement( + 'vz-histogram-timeseries' + ) as VzHistogramTimeSeries; + + // Must set optional input values here since they won't be part of the + // ngOnChanges if the parent does not override the value. + this.element.mode = this.mode; + this.element.timeProperty = this.timeProperty; + } + + ngOnInit() { + this.host.nativeElement.appendChild(this.element); + } + + /** + * TODO(psybuzz): perform the same re-bucketing logic as the Polymer side, + * instead of accepting the data as-is. + * + * The Polymer side forces the histogram at each step into a compressed + * histogram with exactly 30 bins for a couple reasons: + * - High number of bins will render visual artifacts. + * - VzHistogramTimeseries expects all histograms at each step to have the + * same number of bins. Hovering over a HistogramComponent with bin count + * inequality throws errors. + * See tensorboard/plugins/histogram/tf_histogram_dashboard/histogramCore.ts + */ + ngOnChanges(changes: SimpleChanges) { + if (changes['name'] || changes['data']) { + const formattedData = this.data.map((datum) => { + const {step, bins} = datum; + return {step, bins, wall_time: datum.wallTime}; + }); + this.element.setSeriesData(this.name, formattedData); + } + + if (changes['mode']) { + this.element.mode = this.mode; + } + + if (changes['timeProperty']) { + this.element.timeProperty = this.timeProperty; + } + + if (changes['colorScale'] && this.colorScale) { + this.element.colorScale = this.colorScale; + } + } + + redraw() { + this.element.redraw(); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/histogram_module.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/histogram_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..51a712931fd79371804bb604129549afe8e76b05 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/histogram_module.ts @@ -0,0 +1,23 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; + +import {HistogramComponent} from './histogram_component'; + +@NgModule({ + declarations: [HistogramComponent], + exports: [HistogramComponent], +}) +export class HistogramModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/histogram_test.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/histogram_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..b2215e09360946dc10115ef3b3671ef0b053fb1e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/histogram_test.ts @@ -0,0 +1,143 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, Input} from '@angular/core'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; + +import {HistogramComponent, VzHistogramTimeSeries} from './histogram_component'; +import { + ColorScale, + HistogramData, + HistogramMode, + TimeProperty, +} from './histogram_types'; + +// Wrapper component required to properly trigger Angular lifecycles. +// Without it, ngOnChanges do not get triggered before ngOnInit. +@Component({ + selector: 'testable-tb-histogram', + template: ` + + + `, +}) +class TestableComponent { + @Input() mode!: HistogramMode; + + @Input() timeProperty!: TimeProperty; + + @Input() colorScale!: ColorScale; + + @Input() name!: string; + + @Input() data!: HistogramData; +} + +describe('histogram', () => { + let setSeriesDataSpy: jasmine.Spy; + let redrawSpy: jasmine.Spy; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [NoopAnimationsModule], + declarations: [HistogramComponent, TestableComponent], + }).compileComponents(); + + // Impossible to implement the interface instead since it needs to inherit + // Element while not calling the constructor (ES5 downcompile converts it to + // function declaration). + // Create a random HTMLElement instead then manually override the + // properties. + const vzHistogram = document.createElement( + 'testable-vz-histogram-timeseries' + ) as VzHistogramTimeSeries; + setSeriesDataSpy = jasmine.createSpy(); + vzHistogram.setSeriesData = setSeriesDataSpy; + redrawSpy = jasmine.createSpy(); + vzHistogram.redraw = redrawSpy; + + spyOn(document, 'createElement') + .and.callThrough() + .withArgs('vz-histogram-timeseries') + .and.returnValue((vzHistogram as unknown) as VzHistogramTimeSeries); + }); + + function createComponent( + name: string, + data: HistogramData + ): ComponentFixture { + const fixture = TestBed.createComponent(TestableComponent); + fixture.componentInstance.name = name; + fixture.componentInstance.data = data; + fixture.componentInstance.mode = HistogramMode.OFFSET; + fixture.componentInstance.timeProperty = TimeProperty.STEP; + fixture.componentInstance.colorScale = (name) => '#fff'; + return fixture; + } + + function getComponent(fixture: ComponentFixture) { + return fixture.nativeElement.querySelector( + 'testable-vz-histogram-timeseries' + ); + } + + it('renders vz-histogram-timeseries', () => { + const fixture = createComponent('foo', []); + fixture.componentInstance.mode = HistogramMode.OFFSET; + fixture.componentInstance.timeProperty = TimeProperty.STEP; + fixture.detectChanges(); + const component = getComponent(fixture); + + expect(component.mode).toBe(HistogramMode.OFFSET); + expect(component.timeProperty).toBe(TimeProperty.STEP); + expect(setSeriesDataSpy).toHaveBeenCalledWith('foo', []); + }); + + it('updates data when new data comes in', () => { + const fixture = createComponent('foo', []); + fixture.detectChanges(); + + fixture.componentInstance.data = [ + { + wallTime: 0, + step: 0, + bins: [ + {x: 1, y: 2, dx: 1}, + {x: 2, y: 3, dx: 1}, + ], + }, + {wallTime: 123.1, step: 2, bins: [{x: 3, y: 2, dx: 1}]}, + ]; + fixture.detectChanges(); + + expect(setSeriesDataSpy).toHaveBeenCalledWith('foo', [ + { + wall_time: 0, + step: 0, + bins: [ + {x: 1, y: 2, dx: 1}, + {x: 2, y: 3, dx: 1}, + ], + }, + {wall_time: 123.1, step: 2, bins: [{x: 3, y: 2, dx: 1}]}, + ]); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/histogram_types.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/histogram_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..be6429b0b6ba8cf8ad6ed3e7d5943525880c235f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/histogram_types.ts @@ -0,0 +1,45 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +export interface ColorScale { + (runName: string): string; +} + +export interface Bin { + x: number; + /** + * A non-negative number. + */ + dx: number; + y: number; +} + +export interface HistogramDatum { + wallTime: number; + step: number; + bins: Bin[]; +} + +export type HistogramData = HistogramDatum[]; + +export enum TimeProperty { + STEP = 'step', + WALL_TIME = 'wall_time', + RELATIVE = 'relative', +} + +export enum HistogramMode { + OFFSET = 'offset', + OVERLAY = 'overlay', +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/histogram_util.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/histogram_util.ts new file mode 100644 index 0000000000000000000000000000000000000000..795dae035c3d03ce5a2700651a2c46dda5ae39c6 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/histogram_util.ts @@ -0,0 +1,177 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview Utilities for formatting histogram data. + * + * For the traditional TensorBoard logic, see + * third_party/tensorboard/plugins/histogram/tf_histogram_dashboard/histogramCore.ts + */ + +import {Bin, HistogramDatum} from './histogram_types'; + +interface Range { + left: number; + right: number; +} + +const DEFAULT_BIN_COUNT = 30; + +/** + * Histogram normalization logic. + * + * - Create a normalized bin template with 'binCount' # of bins. The range of + * all histograms should fit into this new bin list. + * - Each histogram gets its own copy of the normalized bins. + * - Each histogram's old counts are redistributed among their new bins. + */ +export function buildNormalizedHistograms( + histograms: HistogramDatum[], + binCount: number = DEFAULT_BIN_COUNT +): HistogramDatum[] { + if (!histograms.length || binCount < 1) { + return []; + } + const range = getBinRange(histograms); + // If the output range is 0 width, use a default non 0 range. + if (range && range.left === range.right) { + range.right = range.right * 1.1 + 1; + range.left = range.left / 1.1 - 1; + } + + return histograms.map((histogram) => { + return { + step: histogram.step, + wallTime: histogram.wallTime, + bins: range ? rebuildBins(histogram.bins, range, binCount) : [], + }; + }); +} + +/** + * Computes a range that covers the bins of all input histograms. Fields may + * be null if the histogram bins were empty. + * + * For example, + * histogram[0]: [ ][ ] + * histogram[1]: [ ] + * result: [ ] + */ +function getBinRange(histograms: HistogramDatum[]): Range | null { + let left = null; + let right = null; + + for (const {bins} of histograms) { + if (!bins.length) { + continue; + } + + const lastBin = bins[bins.length - 1]; + const histogramLeft = bins[0].x; + const histogramRight = lastBin.x + lastBin.dx; + if (left === null || histogramLeft < left) { + left = histogramLeft; + } + if (right === null || histogramRight > right) { + right = histogramRight; + } + } + if (left === null || right === null) { + return null; + } + return {left, right}; +} + +/** + * Builds a new list of 'binCount' bins.The 'y' counts from input bins are + * distributed among the new bins based on amount of overlap. + * Input bins must be sorted in increasing order and non-overlapping. + * + * Characteristics: + * - The output bins are guaranteed contiguous, non-overlapping, equal width, + * and nonzero width. + * - Handles 0 width input bins. When a 0 width bin is between 2 output bins, + * its counts are distributed evenly between the neighboring bins. + * + * For example, + * bins: [ 5 ][ 10 ] + * range: [ ] + * binsCount: 2 + * results: [ 10 ][ 5 ] + */ +function rebuildBins(bins: Bin[], range: Range, binCount: number): Bin[] { + const results: Bin[] = []; + const {left, right} = range; + const dx = (right - left) / binCount; + + let binIndex = 0; + let nextBinContribution = 0; + for (let i = 0; i < binCount; i++) { + const resultLeft = left + i * dx; + const resultRight = resultLeft + dx; + const isLastResultBin = i === binCount - 1; + + let resultY = nextBinContribution; + nextBinContribution = 0; + while (binIndex < bins.length) { + const bin = bins[binIndex]; + const contribution = getBinContribution( + bin, + resultLeft, + resultRight, + !isLastResultBin + ); + resultY += contribution.curr; + nextBinContribution += contribution.next; + + // When the result bin completes, break without incrementing binIndex, in + // case it contributes to the the next result bin. + if (bin.x + bin.dx > resultRight) { + break; + } + binIndex++; + } + results.push({x: resultLeft, dx, y: resultY}); + } + return results; +} + +/** + * Computes how much of the input bin's 'y' counts should be allocated to a new + * range. For 0 width input bins, the allocation may be split in half across 2 + * bins. + */ +function getBinContribution( + bin: Bin, + resultLeft: number, + resultRight: number, + resultHasRightNeighbor: boolean +): {curr: number; next: number} { + const binLeft = bin.x; + const binRight = bin.x + bin.dx; + if (binLeft > resultRight || binRight < resultLeft) { + return {curr: 0, next: 0}; + } + + if (bin.dx === 0) { + if (resultHasRightNeighbor && binRight === resultRight) { + return {curr: 0.5 * bin.y, next: 0.5 * bin.y}; + } + return {curr: bin.y, next: 0}; + } + + const intersection = + Math.min(binRight, resultRight) - Math.max(binLeft, resultLeft); + return {curr: (bin.y * intersection) / bin.dx, next: 0}; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/histogram_util_test.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/histogram_util_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..3f96406520ecbb450513f13ad73927dca317b70a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/histogram/histogram_util_test.ts @@ -0,0 +1,431 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {Bin, HistogramDatum} from './histogram_types'; +import {buildNormalizedHistograms} from './histogram_util'; + +function createBins(count: number = 1) { + const result = []; + for (let i = 0; i < count; i++) { + result.push({x: i, dx: 1, y: 1}); + } + return result; +} + +function binsToHistogram(bins: Bin[]): HistogramDatum { + return {step: 0, wallTime: 0, bins}; +} + +function histogramsToBins(histograms: HistogramDatum[]) { + return histograms.map((histogram) => histogram.bins); +} + +describe('histogram util', () => { + describe('buildNormalizedHistograms', () => { + describe('empty or invalid inputs', () => { + it('handles no histograms', () => { + expect(histogramsToBins(buildNormalizedHistograms([], 3))).toEqual([]); + }); + + it('handles histogram with no bins', () => { + expect( + histogramsToBins(buildNormalizedHistograms([binsToHistogram([])], 3)) + ).toEqual([[]]); + }); + + it('handles invalid bin count request', () => { + expect( + histogramsToBins( + buildNormalizedHistograms([binsToHistogram(createBins())], 0) + ) + ).toEqual([]); + }); + }); + + describe('single histogram', () => { + it('converts a 0 width bin into a default bin', () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [binsToHistogram([{x: 0, dx: 0, y: 300}])], + 1 + ) + ) + ).toEqual([[{x: -1, dx: 2, y: 300}]]); + }); + + it('preserves a single bin', () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [binsToHistogram([{x: 0, dx: 10, y: 300}])], + 1 + ) + ) + ).toEqual([[{x: 0, dx: 10, y: 300}]]); + }); + + it('splits a single bin into multiple', () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [binsToHistogram([{x: 0, dx: 9, y: 300}])], + 3 + ) + ) + ).toEqual([ + [ + {x: 0, dx: 3, y: 100}, + {x: 3, dx: 3, y: 100}, + {x: 6, dx: 3, y: 100}, + ], + ]); + }); + + it('merges multiple bins into one', () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [ + binsToHistogram([ + {x: 0, dx: 3, y: 100}, + {x: 3, dx: 3, y: 200}, + {x: 6, dx: 3, y: 300}, + ]), + ], + 1 + ) + ) + ).toEqual([[{x: 0, dx: 9, y: 600}]]); + }); + + it('handles unequal sizes', () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [ + binsToHistogram([ + {x: 0, dx: 3, y: 100}, + {x: 3, dx: 6, y: 200}, + ]), + ], + 1 + ) + ) + ).toEqual([[{x: 0, dx: 9, y: 300}]]); + }); + + it('handles non-contiguous bins', () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [ + binsToHistogram([ + {x: 0, dx: 3, y: 100}, + {x: 7, dx: 3, y: 200}, + ]), + ], + 1 + ) + ) + ).toEqual([[{x: 0, dx: 10, y: 300}]]); + }); + + it('handles duplicate bins', () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [ + binsToHistogram([ + {x: 0, dx: 10, y: 100}, + {x: 0, dx: 10, y: 200}, + ]), + ], + 1 + ) + ) + ).toEqual([[{x: 0, dx: 10, y: 300}]]); + }); + + it('handles partially overlapping bins', () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [ + binsToHistogram([ + {x: 0, dx: 8, y: 100}, + {x: 2, dx: 8, y: 200}, + ]), + ], + 1 + ) + ) + ).toEqual([[{x: 0, dx: 10, y: 300}]]); + }); + + it('N bin to N bin, non-contiguous, N > 1', () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [ + binsToHistogram([ + {x: 0, dx: 3, y: 100}, + {x: 7, dx: 3, y: 200}, + ]), + ], + 2 + ) + ) + ).toEqual([ + [ + {x: 0, dx: 5, y: 100}, + {x: 5, dx: 5, y: 200}, + ], + ]); + }); + + it('N bin to N+1 bin, non-contiguous, N > 1', () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [ + binsToHistogram([ + {x: 0, dx: 3, y: 100}, + {x: 6, dx: 3, y: 200}, + ]), + ], + 3 + ) + ) + ).toEqual([ + [ + {x: 0, dx: 3, y: 100}, + {x: 3, dx: 3, y: 0}, + {x: 6, dx: 3, y: 200}, + ], + ]); + }); + + it('redistributes across multiple result bins', () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [ + binsToHistogram([ + {x: 0, dx: 3, y: 300}, + {x: 3, dx: 7, y: 700}, + ]), + ], + 2 + ) + ) + ).toEqual([ + [ + {x: 0, dx: 5, y: 500}, + {x: 5, dx: 5, y: 500}, + ], + ]); + }); + + it('redistributes 0 width bins', () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [ + binsToHistogram([ + {x: 0, dx: 0, y: 300}, + {x: 10, dx: 0, y: 700}, + ]), + ], + 2 + ) + ) + ).toEqual([ + [ + {x: 0, dx: 5, y: 300}, + {x: 5, dx: 5, y: 700}, + ], + ]); + }); + + it('redistributes 0 width bin evenly over edges of result bins', () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [ + binsToHistogram([ + {x: 0, dx: 1, y: 0}, + {x: 5, dx: 0, y: 200}, + {x: 9, dx: 1, y: 0}, + ]), + ], + 2 + ) + ) + ).toEqual([ + [ + {x: 0, dx: 5, y: 100}, + {x: 5, dx: 5, y: 100}, + ], + ]); + }); + + it('redistributes 0 width bins at the edges', () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [ + binsToHistogram([ + {x: 0, dx: 0, y: 100}, + {x: 10, dx: 0, y: 200}, + ]), + ], + 2 + ) + ) + ).toEqual([ + [ + {x: 0, dx: 5, y: 100}, + {x: 5, dx: 5, y: 200}, + ], + ]); + }); + + it( + 'preserves 0 width bin counts in a result bin that has no other ' + + 'contributions', + () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [ + binsToHistogram([ + {x: 0, dx: 1, y: 0}, + {x: 5, dx: 0, y: 200}, + {x: 8, dx: 1, y: 0}, + ]), + ], + 3 + ) + ) + ).toEqual([ + [ + {x: 0, dx: 3, y: 0}, + {x: 3, dx: 3, y: 200}, + {x: 6, dx: 3, y: 0}, + ], + ]); + } + ); + + it('merges counts from multiple 0 width bins', () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [ + binsToHistogram([ + {x: 0, dx: 0, y: 100}, + {x: 10, dx: 0, y: 200}, + ]), + ], + 1 + ) + ) + ).toEqual([[{x: 0, dx: 10, y: 300}]]); + }); + + it( + 'produces result bins with full and partial contributions from ' + + 'multiple 0 width bins', + () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [ + binsToHistogram([ + {x: 0, dx: 1, y: 0}, + {x: 5, dx: 0, y: 200}, + {x: 10, dx: 0, y: 100}, + ]), + ], + 2 + ) + ) + ).toEqual([ + [ + {x: 0, dx: 5, y: 100}, + {x: 5, dx: 5, y: 200}, + ], + ]); + } + ); + }); + + describe('multiple histograms', () => { + it('preserves counts across histograms', () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [ + binsToHistogram([{x: 0, dx: 10, y: 100}]), + binsToHistogram([{x: 0, dx: 10, y: 200}]), + ], + 1 + ) + ) + ).toEqual([[{x: 0, dx: 10, y: 100}], [{x: 0, dx: 10, y: 200}]]); + }); + + it('produces bins over the full range', () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [ + binsToHistogram([{x: 0, dx: 1, y: 100}]), + binsToHistogram([{x: 9, dx: 1, y: 200}]), + ], + 1 + ) + ) + ).toEqual([[{x: 0, dx: 10, y: 100}], [{x: 0, dx: 10, y: 200}]]); + }); + + it('redistributes bins over the full range', () => { + expect( + histogramsToBins( + buildNormalizedHistograms( + [ + binsToHistogram([{x: 0, dx: 6, y: 100}]), + binsToHistogram([{x: 3, dx: 6, y: 200}]), + ], + 3 + ) + ) + ).toEqual([ + [ + {x: 0, dx: 3, y: 50}, + {x: 3, dx: 3, y: 50}, + {x: 6, dx: 3, y: 0}, + ], + [ + {x: 0, dx: 3, y: 0}, + {x: 3, dx: 3, y: 100}, + {x: 6, dx: 3, y: 100}, + ], + ]); + }); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart/BUILD b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..f248f89d36acdaba10e30256f370fd97422fb52a --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart/BUILD @@ -0,0 +1,35 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +ng_module( + name = "line_chart", + srcs = [ + "line_chart_component.ts", + "line_chart_module.ts", + "line_chart_types.ts", + "polymer_interop_types.ts", + ], + deps = [ + "//tensorboard/webapp/types:ui", + "@npm//@angular/core", + ], +) + +tf_ts_library( + name = "line_chart_test", + testonly = True, + srcs = ["line_chart_test.ts"], + deps = [ + ":line_chart", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_platform_browser_animations", + "//tensorboard/webapp/types:ui", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart/line_chart_component.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart/line_chart_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..789edceb8ac7c9d34e8f5869f36e59870bc511d4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart/line_chart_component.ts @@ -0,0 +1,221 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + Component, + ElementRef, + Input, + OnChanges, + OnInit, + SimpleChanges, + ViewEncapsulation, +} from '@angular/core'; + +import {RunColorScale} from '../../types/ui'; + +import {Point, SeriesData, TooltipColumnSpec} from './line_chart_types'; +import { + AxisRange, + NoReservedPointFields, + TooltipPosition, + TooltipSortingMethod, + VzLineChart2, + XAxisType, + YAxisType, +} from './polymer_interop_types'; + +@Component({ + selector: 'tb-line-chart', + template: ``, + styles: [ + ` + tb-line-chart > vz-line-chart2 { + height: 100%; + } + `, + ], + // Angular's emulated view encapsulation prevents component styles from + // applying to DOM created outside of its template ('vz-line-chart2'). + encapsulation: ViewEncapsulation.None, +}) +export class LineChartComponent< + SeriesMetadata extends {} = {}, + ExtraPointData extends NoReservedPointFields = {} +> implements OnInit, OnChanges { + private readonly element: VzLineChart2>; + + /** + * Directly forwarded properties. + * + * Note that `xComponentsCreationMethod` is not used. Passing `xType` causes + * VzLineChart2 to ignore any `xComponentsCreationMethod`. + * + * For details on VzLineChart2 properties, see + * tensorboard/components/vz_line_chart2/vz-line-chart2.ts + */ + @Input() colorScale?: RunColorScale; + @Input() defaultXRange?: AxisRange; + @Input() defaultYRange?: AxisRange; + @Input() ignoreYOutliers = false; + @Input() smoothingEnabled = false; + @Input() smoothingWeight = 0.6; + @Input() + tooltipColumns: Array< + TooltipColumnSpec> + > = []; + @Input() tooltipPosition = TooltipPosition.AUTO; + @Input() tooltipSortingMethod = TooltipSortingMethod.DEFAULT; + + /** + * Indirectly applied properties, without a 1:1 Polymer mapping. + */ + @Input() + seriesDataList: Array> = []; + @Input() xAxisType: XAxisType = XAxisType.STEP; + @Input() yAxisType: YAxisType = YAxisType.LINEAR; + + constructor(private readonly host: ElementRef) { + this.element = document.createElement('vz-line-chart2') as VzLineChart2< + SeriesMetadata, + Point + >; + this.element.yValueAccessor = (d: Point) => d.y; + + // Must set optional input values here since they won't be part of the + // ngOnChanges if the parent does not override the value. + this.element.ignoreYOutliers = this.ignoreYOutliers; + this.element.smoothingEnabled = this.smoothingEnabled; + this.element.smoothingWeight = this.smoothingWeight; + this.element.tooltipColumns = this.tooltipColumns; + this.element.tooltipPosition = this.tooltipPosition; + this.element.tooltipSortingMethod = this.tooltipSortingMethod; + this.element.xType = this.xAxisType; + this.element.yScaleType = this.yAxisType; + } + + ngOnInit() { + this.host.nativeElement.appendChild(this.element); + } + + ngOnChanges(changes: SimpleChanges) { + // Record state before changing any values. + const wasDomainFitToData = this.element.isDataFitToDomain(); + + if (changes['colorScale'] && this.colorScale) { + this.element.colorScale = {scale: this.colorScale}; + } + if (changes['defaultXRange']) { + this.element.defaultXRange = this.defaultXRange; + } + if (changes['defaultYRange']) { + this.element.defaultYRange = this.defaultYRange; + } + if (changes['ignoreYOutliers']) { + this.element.ignoreYOutliers = this.ignoreYOutliers; + } + if (changes['smoothingEnabled']) { + this.element.smoothingEnabled = this.smoothingEnabled; + } + if (changes['smoothingWeight']) { + this.element.smoothingWeight = this.smoothingWeight; + } + if (changes['tooltipColumns']) { + this.element.tooltipColumns = this.tooltipColumns; + } + if (changes['tooltipPosition']) { + this.element.tooltipPosition = this.tooltipPosition; + } + if (changes['tooltipSortingMethod']) { + this.element.tooltipSortingMethod = this.tooltipSortingMethod; + } + if (changes['xAxisType']) { + this.element.xType = this.xAxisType; + } + if (changes['yAxisType']) { + this.element.yScaleType = this.yAxisType; + } + + if (this.shouldUpdateSeriesData(changes)) { + this.updateSeriesData(); + } + + // Preserve fit-to-domain if the data points may have changed. + if ( + wasDomainFitToData && + (changes['seriesDataList'] || + changes['smoothingEnabled'] || + (changes['smoothingWeight'] && this.smoothingEnabled)) + ) { + this.element.resetDomain(); + } + + this.element.redraw(); + } + + private shouldUpdateSeriesData(changes: SimpleChanges) { + if (!!changes['seriesDataList']) { + return true; + } + // The series data format expected by VzLineChart2 depends on the `xType`. + const prevXAxisType = changes['xAxisType'] + ? changes['xAxisType'].previousValue + : null; + if ( + prevXAxisType && + this.isWallTimeBased(prevXAxisType) !== + this.isWallTimeBased(this.xAxisType) + ) { + return true; + } + return false; + } + + private updateSeriesData() { + for (const seriesData of this.seriesDataList) { + const {seriesId, metadata, points} = seriesData; + const formattedPoints = this.formatByXAxisType(points); + this.element.setSeriesData(seriesId, formattedPoints); + this.element.setSeriesMetadata(seriesId, metadata); + } + + const visibleSeries = this.seriesDataList + .filter((seriesData) => seriesData.visible) + .map(({seriesId}) => seriesId); + this.element.setVisibleSeries(visibleSeries); + this.element.commitChanges(); + } + + private isWallTimeBased(xAxisType: XAxisType) { + return ( + xAxisType === XAxisType.WALL_TIME || xAxisType === XAxisType.RELATIVE + ); + } + + private formatByXAxisType(seriesData: Point[]) { + return seriesData.map((datum) => { + if (this.isWallTimeBased(this.xAxisType)) { + return {...datum, wall_time: new Date(datum.x)}; + } + return {...datum, step: datum.x}; + }); + } + + resetDomain() { + this.element.resetDomain(); + } + + redraw() { + this.element.redraw(); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart/line_chart_module.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart/line_chart_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..9259b94029e3b1991da2a5135681f495a9e48bb2 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart/line_chart_module.ts @@ -0,0 +1,23 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; + +import {LineChartComponent} from './line_chart_component'; + +@NgModule({ + declarations: [LineChartComponent], + exports: [LineChartComponent], +}) +export class LineChartModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart/line_chart_test.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart/line_chart_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..9f4dcc03dd168053f0178226e7041b6138d68fc5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart/line_chart_test.ts @@ -0,0 +1,408 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, Input} from '@angular/core'; +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; + +import {RunColorScale} from '../../types/ui'; + +import {LineChartComponent} from './line_chart_component'; +import {SeriesData, TooltipColumnSpec} from './line_chart_types'; +import { + AxisRange, + TooltipPosition, + TooltipSortingMethod, + VzLineChart2, + XAxisType, + YAxisType, +} from './polymer_interop_types'; + +// Wrapper component required to properly trigger Angular lifecycles. +// Without it, ngOnChanges do not get triggered before ngOnInit. +@Component({ + selector: 'testable-line-chart', + template: ` + + + `, +}) +class TestableComponent { + @Input() colorScale?: RunColorScale; + @Input() defaultXRange?: AxisRange; + @Input() defaultYRange?: AxisRange; + @Input() ignoreYOutliers?: boolean; + @Input() smoothingEnabled?: boolean; + @Input() smoothingWeight?: number; + @Input() tooltipColumns: Array> = []; + @Input() tooltipPosition?: TooltipPosition; + @Input() tooltipSortingMethod?: TooltipSortingMethod; + @Input() seriesDataList: Array> = []; + @Input() xAxisType?: XAxisType; + @Input() yAxisType?: YAxisType; +} + +describe('LineChart', () => { + let vzLineChartEl: VzLineChart2<{}, {}>; + let methodSpies = {} as {[method: string]: jasmine.Spy}; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [NoopAnimationsModule], + declarations: [LineChartComponent, TestableComponent], + }).compileComponents(); + + // Create a random HTMLElement instead then manually override the + // properties. + vzLineChartEl = document.createElement( + 'testable-vz-line-chart' + ) as VzLineChart2<{}, {}>; + const methods = [ + 'commitChanges', + 'isDataFitToDomain', + 'redraw', + 'resetDomain', + 'setSeriesData', + 'setSeriesMetadata', + 'setVisibleSeries', + 'yValueAccessor', + ]; + for (const method of methods) { + methodSpies[method] = (vzLineChartEl as any)[ + method + ] = jasmine.createSpy(); + } + (methodSpies['getExporter'] = vzLineChartEl[ + 'getExporter' + ] = jasmine.createSpy().and.callFake(() => { + return { + exportAsString: jasmine.createSpy(), + }; + })), + spyOn(document, 'createElement') + .and.callThrough() + .withArgs('vz-line-chart2') + .and.returnValue((vzLineChartEl as unknown) as VzLineChart2<{}, {}>); + }); + + it('renders vz-line-chart', () => { + const fakeSeriesDataList = [ + { + seriesId: 'series1', + metadata: {}, + points: [{x: 10, y: 20, flavor: 'spicy'}], + visible: true, + }, + ]; + + const fixture = TestBed.createComponent(TestableComponent); + + fixture.componentInstance.colorScale = () => '#fff'; + fixture.componentInstance.defaultXRange = [0, 1]; + fixture.componentInstance.defaultYRange = [2, 3]; + fixture.componentInstance.ignoreYOutliers = true; + fixture.componentInstance.smoothingEnabled = true; + fixture.componentInstance.smoothingWeight = 1; + fixture.componentInstance.tooltipColumns = [ + { + title: 'column1', + evaluate: () => 'tooltipValue', + }, + ]; + fixture.componentInstance.tooltipPosition = TooltipPosition.RIGHT; + fixture.componentInstance.tooltipSortingMethod = + TooltipSortingMethod.ASCENDING; + fixture.componentInstance.seriesDataList = fakeSeriesDataList; + fixture.componentInstance.xAxisType = XAxisType.WALL_TIME; + fixture.componentInstance.yAxisType = YAxisType.LOG; + + const setSeriesDataCallArgs: any[] = []; + methodSpies['setSeriesData'].and.callFake((...args: any[]) => { + setSeriesDataCallArgs.push(args); + }); + + fixture.detectChanges(); + + const fakeEvaluationPoint = { + dataset: { + data: () => [], + metadata: () => ({meta: {}}), + }, + datum: {}, + }; + expect(vzLineChartEl.colorScale.scale('run1')).toBe('#fff'); + expect(vzLineChartEl.defaultXRange).toEqual([0, 1]); + expect(vzLineChartEl.defaultYRange).toEqual([2, 3]); + expect(vzLineChartEl.ignoreYOutliers).toBe(true); + expect(vzLineChartEl.smoothingEnabled).toBe(true); + expect(vzLineChartEl.smoothingWeight).toBe(1); + expect(vzLineChartEl.tooltipColumns[0].title).toBe('column1'); + expect(vzLineChartEl.tooltipColumns[0].evaluate(fakeEvaluationPoint)).toBe( + 'tooltipValue' + ); + expect(vzLineChartEl.tooltipPosition).toBe(TooltipPosition.RIGHT); + expect(vzLineChartEl.tooltipSortingMethod).toEqual( + TooltipSortingMethod.ASCENDING + ); + expect(setSeriesDataCallArgs).toEqual([ + [ + 'series1', + [ + { + ...fakeSeriesDataList[0].points[0], + wall_time: new Date(fakeSeriesDataList[0].points[0].x), + }, + ], + ], + ]); + expect(vzLineChartEl.setSeriesMetadata).toHaveBeenCalledWith('series1', {}); + expect(vzLineChartEl.setVisibleSeries).toHaveBeenCalledWith(['series1']); + expect(vzLineChartEl.commitChanges).toHaveBeenCalled(); + expect(vzLineChartEl.xType).toBe(XAxisType.WALL_TIME); + expect(vzLineChartEl.yScaleType).toBe(YAxisType.LOG); + expect(vzLineChartEl.yValueAccessor(fakeSeriesDataList[0].points[0])).toBe( + 20 + ); + expect(vzLineChartEl.redraw).toHaveBeenCalled(); + }); + + it('sets inputs with default values to the vz-line-chart2', () => { + TestBed.createComponent(TestableComponent); + + expect(vzLineChartEl.ignoreYOutliers).toBe(false); + expect(vzLineChartEl.smoothingEnabled).toBe(false); + expect(vzLineChartEl.smoothingWeight).toBe(0.6); + expect(vzLineChartEl.xType).toBe(XAxisType.STEP); + expect(vzLineChartEl.yScaleType).toBe(YAxisType.LINEAR); + }); + + it('updates series data depending on xAxisType', () => { + let setSeriesDataCallArgs: any[] = []; + methodSpies['setSeriesData'].and.callFake((...args: any[]) => { + setSeriesDataCallArgs.push(args); + }); + + const fakePoints1 = [{x: 10, y: 20, flavor: 'spicy'}]; + const fakePoints2 = [{x: 30, y: 40, flavor: 'bitter'}]; + const fakeSeriesDataList1 = [ + { + seriesId: 'series1', + metadata: {}, + points: fakePoints1, + visible: true, + }, + ]; + const fakeSeriesDataList2 = [ + { + seriesId: 'series2', + metadata: {}, + points: fakePoints2, + visible: true, + }, + ]; + const fixture = TestBed.createComponent(TestableComponent); + + fixture.componentInstance.seriesDataList = fakeSeriesDataList1; + fixture.componentInstance.xAxisType = XAxisType.WALL_TIME; + fixture.detectChanges(); + + fixture.componentInstance.xAxisType = XAxisType.RELATIVE; + fixture.detectChanges(); + + expect(setSeriesDataCallArgs).toEqual([ + ['series1', [{...fakePoints1[0], wall_time: new Date(fakePoints1[0].x)}]], + ]); + + fixture.componentInstance.xAxisType = XAxisType.STEP; + fixture.detectChanges(); + + expect(setSeriesDataCallArgs).toEqual([ + setSeriesDataCallArgs[0], + ['series1', [{...fakePoints1[0], step: fakePoints1[0].x}]], + ]); + + fixture.componentInstance.seriesDataList = fakeSeriesDataList2; + fixture.detectChanges(); + + expect(setSeriesDataCallArgs).toEqual([ + setSeriesDataCallArgs[0], + setSeriesDataCallArgs[1], + ['series2', [{...fakePoints2[0], step: fakePoints2[0].x}]], + ]); + }); + + it('calls setVisibleSeries only on visible series', () => { + const fakeSeriesDataList = [ + { + seriesId: 'series1', + metadata: {}, + points: [], + visible: false, + }, + { + seriesId: 'series2', + metadata: {}, + points: [], + visible: true, + }, + { + seriesId: 'series3', + metadata: {}, + points: [], + visible: false, + }, + ]; + const fixture = TestBed.createComponent(TestableComponent); + + fixture.componentInstance.seriesDataList = fakeSeriesDataList; + fixture.detectChanges(); + + expect(methodSpies['setVisibleSeries']).toHaveBeenCalledWith(['series2']); + }); + + it('resets domain on chart when `resetDomain` is called', () => { + const fixture = TestBed.createComponent(TestableComponent); + const lineChart = fixture.debugElement.query(By.css('tb-line-chart')); + lineChart.componentInstance.resetDomain(); + + expect(methodSpies['resetDomain']).toHaveBeenCalled(); + }); + + it('resets domain on updates, if already fit', () => { + const fixture = TestBed.createComponent(TestableComponent); + fixture.componentInstance.seriesDataList = []; + fixture.detectChanges(); + methodSpies['isDataFitToDomain'].calls.reset(); + methodSpies['isDataFitToDomain'].and.returnValue(true); + + fixture.componentInstance.seriesDataList = [ + { + seriesId: 'series1', + metadata: {}, + points: [{x: 0, y: 2}], + visible: true, + }, + ]; + fixture.detectChanges(); + + expect(methodSpies['resetDomain']).toHaveBeenCalled(); + }); + + it('does not reset domain on updates, if not already fit', () => { + const fixture = TestBed.createComponent(TestableComponent); + fixture.componentInstance.seriesDataList = []; + fixture.detectChanges(); + methodSpies['isDataFitToDomain'].calls.reset(); + methodSpies['isDataFitToDomain'].and.returnValue(false); + + fixture.componentInstance.seriesDataList = [ + { + seriesId: 'series1', + metadata: {}, + points: [{x: 0, y: 2}], + visible: true, + }, + ]; + fixture.detectChanges(); + + expect(methodSpies['resetDomain']).not.toHaveBeenCalled(); + }); + + it( + 'resets domain on smoothing updates, if smoothing enabled and data ' + + 'fits', + () => { + const fixture = TestBed.createComponent(TestableComponent); + fixture.componentInstance.smoothingWeight = 0.5; + fixture.componentInstance.smoothingEnabled = false; + fixture.detectChanges(); + methodSpies['isDataFitToDomain'].calls.reset(); + methodSpies['isDataFitToDomain'].and.returnValue(true); + + fixture.componentInstance.smoothingWeight = 0.6; + fixture.detectChanges(); + + expect(methodSpies['resetDomain']).not.toHaveBeenCalled(); + + fixture.componentInstance.smoothingEnabled = true; + fixture.componentInstance.smoothingWeight = 0.7; + fixture.detectChanges(); + + expect(methodSpies['resetDomain']).toHaveBeenCalled(); + } + ); + + it('does not reset domain on smoothing updates, if not already fit', () => { + const fixture = TestBed.createComponent(TestableComponent); + fixture.componentInstance.smoothingWeight = 0.5; + fixture.detectChanges(); + methodSpies['isDataFitToDomain'].calls.reset(); + methodSpies['isDataFitToDomain'].and.returnValue(false); + + fixture.componentInstance.smoothingWeight = 0.9; + fixture.detectChanges(); + + expect(methodSpies['resetDomain']).not.toHaveBeenCalled(); + }); + + it('resets domain on smoothing enabled, if already fit', () => { + const fixture = TestBed.createComponent(TestableComponent); + fixture.componentInstance.smoothingEnabled = true; + fixture.detectChanges(); + methodSpies['isDataFitToDomain'].calls.reset(); + methodSpies['isDataFitToDomain'].and.returnValue(true); + + fixture.componentInstance.smoothingEnabled = false; + fixture.detectChanges(); + + expect(methodSpies['resetDomain']).toHaveBeenCalled(); + + fixture.componentInstance.smoothingEnabled = true; + fixture.detectChanges(); + + expect(methodSpies['resetDomain']).toHaveBeenCalledTimes(2); + }); + + it('does not reset domain on smoothing enabled, if not already fit', () => { + const fixture = TestBed.createComponent(TestableComponent); + fixture.componentInstance.smoothingEnabled = true; + fixture.detectChanges(); + methodSpies['isDataFitToDomain'].calls.reset(); + methodSpies['isDataFitToDomain'].and.returnValue(false); + + fixture.componentInstance.smoothingEnabled = false; + fixture.detectChanges(); + + expect(methodSpies['resetDomain']).not.toHaveBeenCalled(); + + fixture.componentInstance.smoothingEnabled = true; + fixture.detectChanges(); + + expect(methodSpies['resetDomain']).not.toHaveBeenCalled(); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart/line_chart_types.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart/line_chart_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..7b2b0c0908ca83919a5e308bee5a1dc578301b0e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart/line_chart_types.ts @@ -0,0 +1,60 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {EvaluationPoint as VzEvaluationPoint} from './polymer_interop_types'; + +export {XAxisType, YAxisType} from './polymer_interop_types'; + +/** + * The data associated with each point in a series. + */ +export type Point = T & { + x: number; + y: number; +}; + +/** + * Data for a single series in a line chart. Extra point data can be + * attached to inform TooltipColumnSpec's `evaluate()`. + */ +export interface SeriesData { + seriesId: string; + metadata: Metadata; + points: Array>; + visible: boolean; +} + +/** + * Tooltips appear as users hover the mouse over points on a line chart. + */ +export interface TooltipColumnSpec< + Metadata extends {}, + ExtraPointData extends {} +> { + /** + * Column header text. + */ + title: string; + + /** + * Method used to produce a final text value displayed in a specific cell + * in the tooltip table. + */ + evaluate: (point: EvaluationPoint) => string; +} + +export type EvaluationPoint< + Metadata extends {}, + ExtraPointData extends {} +> = VzEvaluationPoint>; diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart/polymer_interop_types.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart/polymer_interop_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..184a4339a9b692c0871c3f38d2131773a7c30a20 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart/polymer_interop_types.ts @@ -0,0 +1,132 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +/** + * @fileoverview Types used to interop with Polymer's VzLineChart2 custom + * element. + * + * 1) This file should not depend on any other file, nor be aware of Angular, + * NgRx. + * + * 2) Do not make breaking changes to types in this file unless something in the + * Polymer side changes, likely: + * - tensorboard/components/vz_chart_helpers/ + * - tensorboard/components/vz_line_chart2/ + */ + +/** + * Note: several properties and methods are ignored by the Polymer component + * until the chart is completely loaded and fires 'chart-attached'. + * These include: + * `redraw`, `resetDomain`, `setSeriesData`, `setSeriesMetadata`, + * `smoothingEnabled`, `smoothingWeight`, `ignoreOutliers`, + * `tooltipSortingMethod` + */ +export interface VzLineChart2< + SeriesMetadata extends {}, + PointData extends {} = {} +> extends HTMLElement { + colorScale: ColorScale; + defaultXRange?: AxisRange; + defaultYRange?: AxisRange; + ignoreYOutliers: boolean; + smoothingEnabled: boolean; + smoothingWeight: number; + tooltipColumns: Array>; + tooltipPosition: TooltipPosition; + tooltipSortingMethod: TooltipSortingMethod; + xType: string; + yScaleType: string; + getExporter: () => { + exportAsString: () => string; + }; + isDataFitToDomain: () => boolean; + redraw: () => void; + resetDomain: () => void; + setSeriesData: (seriesName: string, data: PointData[]) => void; + setSeriesMetadata: (seriesName: string, metadata: SeriesMetadata) => void; + setVisibleSeries: (seriesNames: string[]) => void; + commitChanges: () => void; + yValueAccessor: (d: PointData) => number; +} + +/** + * On the Polymer side, LineChart may internally override some fields on the + * datum provided. + * See tensorboard/components/vz_line_chart2/line-chart.ts + */ +export interface NoReservedPointFields extends Object { + name?: never; + displayY?: never; + relative?: never; + smoothed?: never; +} + +export interface ColorScale { + scale: (runName: string) => string; +} + +export enum TooltipPosition { + BOTTOM = 'bottom', + RIGHT = 'right', + AUTO = 'auto', +} + +export enum TooltipSortingMethod { + DEFAULT = 'default', + ASCENDING = 'ascending', + DESCENDING = 'descending', + NEAREST = 'nearest', +} + +export enum XAxisType { + /** Linear scale using the "step" property of the datum. */ + STEP = 'step', + + /** + * Temporal scale using the earliest datum's "wall_time" as a baseline. + */ + RELATIVE = 'relative', + + /** Temporal scale using the "wall_time" property of the datum. */ + WALL_TIME = 'wall_time', +} + +export enum YAxisType { + LINEAR = 'linear', + LOG = 'log', +} + +export type AxisRange = [number, number]; + +export interface EvaluationPoint< + SeriesMetadata extends {}, + PointData extends {} +> { + dataset: { + data: () => PointData[]; + metadata: () => { + meta: SeriesMetadata; + }; + }; + datum: PointData; +} + +export interface TooltipColumnSpec< + SeriesMetadata extends {}, + PointData extends {} = {} +> { + title: string; + evaluate: (point: EvaluationPoint) => string; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/BUILD b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..67332b5cb689af89db6c3e040d058dfe282e02d6 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/BUILD @@ -0,0 +1,78 @@ +load("//tensorboard/defs:defs.bzl", "tf_ts_library") + +package(default_visibility = ["//tensorboard:internal"]) + +tf_ts_library( + name = "types", + srcs = [ + "scale_types.ts", + "types.ts", + ], +) + +tf_ts_library( + name = "worker_pool", + srcs = ["worker_pool.ts"], + deps = [ + ":worker", + ], +) + +tf_ts_library( + name = "coordinator", + srcs = [ + "coordinator.ts", + "threejs_coordinator.ts", + ], + deps = [ + ":scale", + ":types", + ":utils", + "@npm//three", + ], +) + +tf_ts_library( + name = "worker", + srcs = ["worker.ts"], + visibility = ["//visibility:private"], +) + +tf_ts_library( + name = "scale", + srcs = [ + "scale.ts", + ], + deps = [ + ":types", + "//tensorboard/webapp/third_party:d3", + ], +) + +tf_ts_library( + name = "utils", + srcs = [ + "utils.ts", + ], + deps = [ + ":types", + ], +) + +tf_ts_library( + name = "lib_tests", + testonly = True, + srcs = [ + "coordinator_test.ts", + "scale_test.ts", + "worker_pool_test.ts", + ], + deps = [ + ":coordinator", + ":scale", + ":types", + ":worker", + ":worker_pool", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/README.md b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/README.md new file mode 100644 index 0000000000000000000000000000000000000000..7479371065e621bf61905f1b20fb153327f56b12 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/README.md @@ -0,0 +1,15 @@ +# Line chart library + +This is a generic charting library with a focus on performance. + +### Design goals + +- Agnostic to HTMLCanvas vs. OffscreenCanvas +- Generic to different implementation of renderer; SVG vs. WebGL. +- Minimize cache eviction and try to do a minimal work for render + +### Jargons we define + +- coordinatior: A utility module for converting coordinate systems. Abstracts + away certain renderer quirks and holds onto state, helping with performance + optimizations. diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/coordinator.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/coordinator.ts new file mode 100644 index 0000000000000000000000000000000000000000..bcb947d3b40c1a86a94e6ce7c946f01322d71646 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/coordinator.ts @@ -0,0 +1,110 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {createScale, Scale} from './scale'; +import {Rect, ScaleType} from './types'; +import {convertRectToExtent} from './utils'; + +/** + * A stateful convenient utility around scale for converting coordinate systems. + * + * Definitions. + * + * Example for better illustration: we are viewing a diagonal line that goes from + * <0, 0> -> <1, 2> onto a canvas with size <100, 200>. + * + * - data coordinate: coordinate in raw data space. For example above, you would have a + * line by connecting two points at <0, 0> and <1, 2>. + * - ui coordinate: coordinate of a data in pixel/view-space. For example above, a data at + * <0.5, 0.5> will be on <50, 100> in UI coordinates. + * - internal coordinate: in case like webgl, you can use an internal static + * coordinate system separate from the ui coordinate. + * - view box: a rect in data coordinate that describes what should be visible + * on the screen. + */ +export class Coordinator { + protected xScale: Scale = createScale(ScaleType.LINEAR); + protected yScale: Scale = createScale(ScaleType.LINEAR); + protected domContainerRect: Rect = { + x: 0, + width: 1, + y: 0, + height: 1, + }; + + protected lastUpdated: number = 0; + private currentViewBoxRect: Rect = { + x: 0, + width: 1, + y: 0, + height: 1, + }; + + getUpdateIdentifier() { + return this.lastUpdated; + } + + private updateIdentifier() { + this.lastUpdated++; + } + + setXScale(scale: Scale) { + this.xScale = scale; + this.updateIdentifier(); + } + + setYScale(scale: Scale) { + this.yScale = scale; + this.updateIdentifier(); + } + + getCurrentViewBoxRect(): Rect { + return this.currentViewBoxRect; + } + + setViewBoxRect(rectInDataCoordinate: Rect) { + this.currentViewBoxRect = rectInDataCoordinate; + this.updateIdentifier(); + } + + setDomContainerRect(rect: Rect) { + this.domContainerRect = rect; + this.updateIdentifier(); + } + + /** + * Converts data coordinate into ui coordinates where the ui coordinate bounds are + * specified in `rectInUiCoordinate`. + */ + transformDataToUiCoord( + rectInUiCoordinate: Rect, + dataCoordinate: [number, number] + ): [number, number] { + const rect = rectInUiCoordinate; + const domain = convertRectToExtent(this.currentViewBoxRect); + return [ + this.xScale.forward( + domain.x, + [rect.x, rect.x + rect.width], + dataCoordinate[0] + ), + this.yScale.forward( + domain.y, + [rect.y + rect.height, rect.y], + dataCoordinate[1] + ), + ]; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/coordinator_test.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/coordinator_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..a41070c7b146276764963b7ca271bf0f44c3cee8 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/coordinator_test.ts @@ -0,0 +1,205 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {ScaleType} from './types'; +import {createScale} from './scale'; +import {Coordinator} from './coordinator'; +import {ThreeCoordinator} from './threejs_coordinator'; + +describe('line_chart_v2/lib/coordinator test', () => { + describe('base coordinator', () => { + let coordinator: Coordinator; + + beforeEach(() => { + coordinator = new Coordinator(); + }); + + describe('state identifier', () => { + [ + { + updatingProp: 'xScale', + updater: () => + void coordinator.setXScale(createScale(ScaleType.LOG10)), + }, + { + updatingProp: 'yScale', + updater: () => + void coordinator.setYScale(createScale(ScaleType.LOG10)), + }, + { + updatingProp: 'viewBoxRect', + updater: () => { + coordinator.setViewBoxRect({ + x: 0, + y: 0, + width: 1000, + height: 1000, + }); + }, + }, + { + updatingProp: 'domContainerRect', + updater: () => { + coordinator.setDomContainerRect({ + x: 0, + y: 0, + width: 500, + height: 500, + }); + }, + }, + ].forEach(({updatingProp, updater}) => { + it(`updates updateIdentifier when setting ${updatingProp}`, () => { + const before = coordinator.getUpdateIdentifier(); + updater(); + expect(coordinator.getUpdateIdentifier()).not.toBe(before); + }); + }); + }); + + describe('#getCurrentViewBoxRect', () => { + it('returns currently set viewBox', () => { + coordinator.setViewBoxRect({ + x: 0, + y: 0, + width: 1000, + height: 1000, + }); + expect(coordinator.getCurrentViewBoxRect()).toEqual({ + x: 0, + y: 0, + width: 1000, + height: 1000, + }); + }); + + it('returns a default viewBox when viewBox is never set', () => { + expect(coordinator.getCurrentViewBoxRect()).toEqual({ + x: 0, + y: 0, + width: 1, + height: 1, + }); + }); + }); + + describe('#transformDataToUiCoord', () => { + beforeEach(() => { + coordinator.setViewBoxRect({ + x: 50, + y: 50, + width: 100, + height: 100, + }); + coordinator.setDomContainerRect({ + x: 0, + y: 0, + width: 1000, + height: 1000, + }); + }); + + // y-axis is flipped since data's origin assumes bottom-left as opposed to DOM's + // coordinate system that has origin at top-left. + it('converts the coordinate system but flips y-axis', () => { + const layout = { + x: 500, + y: 250, + width: 500, + height: 500, + }; + + expect(coordinator.transformDataToUiCoord(layout, [50, 50])).toEqual([ + 500, + 750, + ]); + expect(coordinator.transformDataToUiCoord(layout, [150, 150])).toEqual([ + 1000, + 250, + ]); + + // Outside of the viewBox. + expect(coordinator.transformDataToUiCoord(layout, [0, 0])).toEqual([ + 250, + 1000, + ]); + }); + }); + }); + + describe('ThreeCoordinator', () => { + let coordinator: ThreeCoordinator; + + beforeEach(() => { + coordinator = new ThreeCoordinator(); + coordinator.setViewBoxRect({ + x: 0, + y: 0, + width: 5, + height: 5, + }); + coordinator.setDomContainerRect({ + x: 50, + y: 50, + width: 50, + height: 50, + }); + }); + + describe('#transformDataToUiCoord', () => { + beforeEach(() => { + coordinator.setViewBoxRect({ + x: 50, + y: 0, + width: 100, + height: 100, + }); + coordinator.setDomContainerRect({ + x: 0, + y: 0, + width: 5, + height: 5, + }); + }); + + // unlike the base class, y-axis is not flipped since we are not rendering onto the + // DOM where <0, 0> is top-left. Unlike DOM, threejs's scene looks like ordinary + // cartesian coordinate with z-axis pointing up. + it('converts into internal coordinate system [0, 1000], no y-axis flipped', () => { + const layout = { + x: 2, + y: 0, + width: 3, + height: 5, + }; + + expect(coordinator.transformDataToUiCoord(layout, [50, 50])).toEqual([ + 400, + 500, + ]); + expect(coordinator.transformDataToUiCoord(layout, [150, 100])).toEqual([ + 1000, + 1000, + ]); + + // Outside of the viewBox. + expect(coordinator.transformDataToUiCoord(layout, [0, -100])).toEqual([ + 100, + -1000, + ]); + }); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/scale.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/scale.ts new file mode 100644 index 0000000000000000000000000000000000000000..956efe74559b88cc4229d5d5190ad865fe301b68 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/scale.ts @@ -0,0 +1,228 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {scaleLinear, scaleLog} from '../../../third_party/d3'; + +import {ScaleType} from './scale_types'; + +/** + * A `Scale` takes `domain` and sometimes `range` and provide coordinate system + * transformation and convenience method around interval. Similar abstraction as d3.scale. + * + * Unlike d3.scale, it is pure and does not have performance impact. + * + * Important: both `domain` and `range` require to be finite numbers. The order of the + * values do not matter (e.g., domain[1] < domain[0] is okay). + */ +export interface Scale { + /** + * Converts `x` in `domain` coordinates into `range` coordinates. + */ + forward(domain: [number, number], range: [number, number], x: number): number; + + /** + * Converts `x` in `range` coordinates into `domain` coordinates. + */ + reverse(domain: [number, number], range: [number, number], x: number): number; + + /** + * Attempts to transform domain into nice round numbers. Analogous to `d3.nice`. + * + * @param domain Two finite numbers to compuute round number from. + */ + niceDomain(domain: [number, number]): [number, number]; + + /** + * Returns "human friendly" numbers between the `domain` that can be used for ticks and + * grid. + * + * In case the spread of an interval is 0 or negligible, it can return an empty array + * depending on an implementation. + * + * Examples: + * ticks([0, 10], 5) -> [0, 2, 4, 6, 8, 10] + * ticks([10, 0], 5) -> [10, 8, 6, 4, 2, 0] + * ticks([10, 10], 5) -> [] + * + * @param domain Interval in which tick should be created. + * @param sizeGuidance approximate number of the ticks. Depending on the domain, it + * may return less or more ticks. + */ + ticks(domain: [number, number], sizeGuidance: number): number[]; +} + +export function createScale(type: ScaleType): Scale { + switch (type) { + case ScaleType.LINEAR: + return new LinearScale(); + case ScaleType.LOG10: + return new Log10Scale(); + default: + const _: never = type; + throw new RangeError(`ScaleType ${_} not supported.`); + } +} + +const PADDING_RATIO = 0.05; +const MIN_SIGNIFICANT_PADDING = 0.01; + +class LinearScale implements Scale { + private transform( + inputSpace: [number, number], + outputSpace: [number, number], + x: number + ): number { + const [inputMin, inputMax] = inputSpace; + const inputSpread = inputMax - inputMin; + const [outputMin, outputMax] = outputSpace; + const outputSpread = outputMax - outputMin; + + if (inputSpread === 0) { + return outputMin; + } + + return (outputSpread / inputSpread) * (x - inputMin) + outputMin; + } + + forward( + domain: [number, number], + range: [number, number], + x: number + ): number { + return this.transform(domain, range, x); + } + + reverse( + domain: [number, number], + range: [number, number], + x: number + ): number { + return this.transform(range, domain, x); + } + + niceDomain(domain: [number, number]): [number, number] { + let [min, max] = domain; + if (max < min) { + throw new Error('Unexpected input: min is larger than max'); + } + + const scale = scaleLinear(); + const padding = + max === min + ? // In case both `min` and `max` are 0, we want some padding. + Math.max(min * PADDING_RATIO, MIN_SIGNIFICANT_PADDING) + : (max - min + Number.EPSILON) * PADDING_RATIO; + const [niceMin, niceMax] = scale + .domain([min - padding, max + padding]) + .nice() + .domain(); + return [niceMin, niceMax]; + } + + ticks(domain: [number, number], sizeGuidance: number): number[] { + return scaleLinear().domain(domain).ticks(sizeGuidance); + } +} + +class Log10Scale implements Scale { + private transform(x: number): number { + return Math.log10(x > 0 ? x : Number.MIN_VALUE); + } + + private untransform(x: number): number { + return Math.exp(x / Math.LOG10E); + } + + forward( + domain: [number, number], + range: [number, number], + x: number + ): number { + if (x <= 0) { + return range[0]; + } + + const [domainMin, domainMax] = domain; + const [rangeMin, rangeMax] = range; + + const transformedMin = this.transform(domainMin); + const transformedMax = this.transform(domainMax); + const domainSpread = transformedMax - transformedMin; + const rangeSpread = rangeMax - rangeMin; + x = this.transform(x); + + return ( + (rangeSpread / (domainSpread + Number.EPSILON)) * (x - transformedMin) + + rangeMin + ); + } + + reverse( + domain: [number, number], + range: [number, number], + x: number + ): number { + const [domainMin, domainMax] = domain; + const [rangeMin, rangeMax] = range; + + const transformedMin = this.transform(domainMin); + const transformedMax = this.transform(domainMax); + const domainSpread = transformedMax - transformedMin; + const rangeSpread = rangeMax - rangeMin; + + const val = + (domainSpread / (rangeSpread + Number.EPSILON)) * (x - rangeMin) + + transformedMin; + return this.untransform(val); + } + + niceDomain(domain: [number, number]): [number, number] { + const [min, max] = domain; + if (min > max) { + throw new Error('Unexpected input: min is larger than max'); + } + + const adjustedMin = Math.max(min, Number.MIN_VALUE); + const adjustedMax = Math.max(max, Number.MIN_VALUE); + if (min <= 0 || max <= 0) { + return [adjustedMin, adjustedMax]; + } + + const numericMinLogValue = this.transform(Number.MIN_VALUE); + const minLogValue = this.transform(adjustedMin); + const maxLogValue = this.transform(adjustedMax); + + const spreadInLog = maxLogValue - minLogValue; + const padInLog = + spreadInLog > 0 + ? spreadInLog * PADDING_RATIO + : // In case `minLogValue` is 0 (i.e., log_10(1) = 0), we want some padding. + Math.max( + Math.abs(minLogValue * PADDING_RATIO), + MIN_SIGNIFICANT_PADDING + ); + + return [ + this.untransform(Math.max(numericMinLogValue, minLogValue - padInLog)), + this.untransform(maxLogValue + padInLog), + ]; + } + + ticks(domain: [number, number], sizeGuidance: number): number[] { + const low = domain[0] <= 0 ? Number.MIN_VALUE : domain[0]; + const high = domain[1] <= 0 ? Number.MIN_VALUE : domain[1]; + const ticks = scaleLog().domain([low, high]).ticks(sizeGuidance); + return ticks.length ? ticks : domain; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/scale_test.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/scale_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..3ddc06ba8e2159c5890131898073e5f92ed58c1d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/scale_test.ts @@ -0,0 +1,296 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {Scale, createScale} from './scale'; +import {ScaleType} from './scale_types'; + +describe('line_chart_v2/lib/scale test', () => { + describe('linear', () => { + let scale: Scale; + + beforeEach(() => { + scale = createScale(ScaleType.LINEAR); + }); + + describe('#forward and #reverse', () => { + it('converts value from domain space to range space', () => { + expect(scale.forward([0, 1], [-100, 100], 0)).toBe(-100); + expect(scale.forward([0, 1], [-100, 100], 0.5)).toBe(0); + expect(scale.forward([0, 1], [-100, 100], 1)).toBe(100); + + expect(scale.forward([0, 1], [-100, 100], -1)).toBe(-300); + expect(scale.forward([0, 1], [-100, 100], 5)).toBe(900); + }); + + it('allows flipping order of the range', () => { + expect(scale.forward([0, 1], [100, -100], 0)).toBe(100); + expect(scale.forward([0, 1], [100, -100], 0.5)).toBe(0); + expect(scale.forward([0, 1], [100, -100], 1)).toBe(-100); + + expect(scale.forward([0, 1], [100, -100], -1)).toBe(300); + expect(scale.forward([0, 1], [100, -100], 5)).toBe(-900); + }); + + it('returns range min value when domain spread is 0', () => { + expect(scale.forward([1, 1], [0, 100], 1)).toBe(0); + expect(scale.forward([1, 1], [0, 100], 0)).toBe(0); + }); + + it('does not choke when range spread is 0', () => { + expect(scale.forward([0, 1], [100, 100], 0)).toBe(100); + expect(scale.forward([0, 1], [100, 100], 1)).toBe(100); + }); + + it('reverse the scale from range to domain', () => { + expect(scale.reverse([0, 1], [-100, 100], 0)).toBe(0.5); + expect(scale.reverse([0, 1], [-100, 100], -100)).toBe(0); + expect(scale.reverse([0, 1], [-100, 100], 100)).toBe(1); + + expect(scale.reverse([0, 1], [-100, 100], -101)).toBe(-0.005); + expect(scale.reverse([0, 1], [-100, 100], 500)).toBe(3); + }); + }); + + describe('#niceDomain', () => { + it('puts "nice" (~5%) padding around and round value of min and max', () => { + expect(scale.niceDomain([0, 100])).toEqual([-10, 110]); + expect(scale.niceDomain([-0.011, 99.5])).toEqual([-10, 110]); + expect(scale.niceDomain([5.44, 95.12])).toEqual([0, 100]); + }); + + it('puts padding of 5% of value when min == max', () => { + expect(scale.niceDomain([100, 100])).toEqual([95, 105]); + expect(scale.niceDomain([1, 1])).toEqual([0.95, 1.05]); + expect(scale.niceDomain([10000, 10000])).toEqual([9500, 10500]); + expect(scale.niceDomain([0, 0])).toEqual([-0.01, 0.01]); + }); + + it('throws an error when min is larger than max', () => { + expect(() => void scale.niceDomain([100, 0])).toThrowError(Error); + }); + }); + + // This is basically exercising d3.scale#ticks but it is good to test so we are not + // surprised by any behavior changes. + describe('#tick', () => { + it('returns ticks in between min and max', () => { + expect(scale.ticks([0, 100], 5)).toEqual([0, 20, 40, 60, 80, 100]); + expect(scale.ticks([300, 1000], 5)).toEqual([ + 300, + 400, + 500, + 600, + 700, + 800, + 900, + 1000, + ]); + expect(scale.ticks([0.01, 0.05], 5)).toEqual([ + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + ]); + // Another example of sizeGuidance not being exact. + expect(scale.ticks([0.01, 0.05], 3)).toEqual([ + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + ]); + }); + }); + }); + + describe('log10', () => { + let scale: Scale; + + beforeEach(() => { + scale = createScale(ScaleType.LOG10); + }); + + describe('#forward and #reverse', () => { + it('converts value from domain space to range space', () => { + expect(scale.forward([0, 1], [-100, 100], 0)).toBe(-100); + expect(scale.forward([0, 1], [-100, 0], 0.5)).toBeCloseTo(-0.09, 2); + expect(scale.forward([0, 1], [-100, 100], 1)).toBe(100); + + expect(scale.forward([0, 1], [-100, 100], -1)).toBe(-100); + expect(scale.forward([0, 1], [-100, 100], 5)).toBeCloseTo(100, -1); + + expect(scale.forward([1, 1000], [0, 1], 100)).toBeCloseTo(0.666, 2); + expect(scale.forward([0.00001, 1], [0, 5], 0.01)).toBeCloseTo(3); + }); + + // Kind of tentative behavior: it is more correct to return NaN and let + // UI elements show the right treatment; we would also need to exclude it + // when computed extents but it is out of scope for now. + it('handles negative value by treating it min float value', () => { + expect(scale.forward([1, 100], [0, 3], -3)).toBe(0); + }); + + it('permits negative value in domain by clipping it to min number', () => { + // Because -100 is treated as min number, the domain is effectively + // [Number.MIN_VALUE, 100] and log of MIN_VALUE is about -324. So, `1` is much + // closer to the end of the range. + expect(scale.forward([-100, 100], [0, 1], 1)).toBeCloseTo(1, 1); + }); + + it('allows flipping order of the range', () => { + expect(scale.forward([0, 1], [100, -100], 0)).toBe(100); + expect(scale.forward([0, 1], [100, -100], 0.5)).toBeCloseTo(-100, 0); + expect(scale.forward([0, 1], [100, -100], 1)).toBe(-100); + + // -1 is illegal in especially log domain so it is clipped to min range. + expect(scale.forward([0, 1], [100, -100], -1)).toBe(100); + expect(scale.forward([0, 1], [100, -100], 5)).toBeCloseTo(-100, 0); + }); + + it('returns range min value when domain spread is 0', () => { + expect(scale.forward([1, 1], [0, 100], 1)).toBe(0); + expect(scale.forward([1, 1], [0, 100], 0)).toBe(0); + }); + + it('does not choke when range spread is 0', () => { + expect(scale.forward([0, 1], [100, 100], 0)).toBe(100); + expect(scale.forward([0, 1], [100, 100], 1)).toBe(100); + }); + + it('reverse the scale from range to domain', () => { + expect(scale.reverse([1, 1000], [-100, 100], 0)).toBeCloseTo(31.6, 0); + expect(scale.reverse([1, 1000], [-100, 100], -100)).toBe(1); + expect(scale.reverse([1, 1000], [-100, 100], 100)).toBeCloseTo(1000, 0); + + expect(scale.reverse([1, 1000], [-100, 100], -101)).toBeCloseTo( + 0.966, + 1 + ); + expect(scale.reverse([1, 1000], [-100, 100], 300)).toBeCloseTo( + 1000000, + 0 + ); + }); + + it('returns cyclic consistent value', () => { + const initialX = 100; + const forward = scale.forward([1, 1000], [-100, 100], initialX); + const inverse = scale.reverse([1, 1000], [-100, 100], forward); + expect(inverse).toBeCloseTo(initialX, 0); + }); + }); + + describe('#niceDomain', () => { + // Carrying over the behavior from existing vz_line_chart + it('puts "nice" (~5%) padding around but does not round values', () => { + let low: number; + let high: number; + + [low, high] = scale.niceDomain([0, 100]); + expect(low).toBe(Number.MIN_VALUE); + expect(high).toBeCloseTo(100, 0); + + [low, high] = scale.niceDomain([0.001, 75]); + // spread is about log_10(75) - log_10(0.001) = 4.875 + // We add 5% padding with that spread (~0.2438) before we convert it back with + // exponential. low turns into -3.244, so we exp(-3.244 / log_10(E)) ~ 0.00057. + expect(low).toBeCloseTo(0.00057, 4); + expect(high).toBeCloseTo(131, 0); + + [low, high] = scale.niceDomain([100, 1e6]); + expect(low).toBeCloseTo(63, 0); + expect(high).toBeCloseTo(1.585e6, -4); + }); + + it('puts padding of 5% of value when min == max', () => { + let low: number; + let high: number; + [low, high] = scale.niceDomain([100, 100]); + expect(low).toBeCloseTo(79, 0); + expect(high).toBeCloseTo(126, 0); + + [low, high] = scale.niceDomain([1, 1]); + expect(low).toBeCloseTo(0.977, 2); + expect(high).toBeCloseTo(1.023, 2); + + [low, high] = scale.niceDomain([10000, 10000]); + expect(low).toBeCloseTo(6310, 0); + expect(high).toBeCloseTo(15849, 0); + }); + + it('throws an error when min is larger than max', () => { + expect(() => void scale.niceDomain([100, 0])).toThrowError(Error); + }); + }); + + describe('#tick', () => { + it('returns ticks in between min and max', () => { + expect(scale.ticks([1, 100], 5)).toEqual([ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 20, + 30, + 40, + 50, + 60, + 70, + 80, + 90, + 100, + ]); + expect(scale.ticks([300, 1000], 5)).toEqual([ + 300, + 400, + 500, + 600, + 700, + 800, + 900, + 1000, + ]); + expect(scale.ticks([0.01, 0.05], 5)).toEqual([ + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + ]); + // Another example of sizeGuidance not being exact. + expect(scale.ticks([0.01, 0.05], 3)).toEqual([ + 0.01, + 0.02, + 0.03, + 0.04, + 0.05, + ]); + }); + + // This is less than ideal; with any zeros, we will be stuck on 1e-324. + it('handles non-positive values correctly', () => { + expect(scale.ticks([0, 0.01], 3)).toEqual([1e-300, 1e-200, 1e-100]); + expect(scale.ticks([-100, 0.01], 3)).toEqual([1e-300, 1e-200, 1e-100]); + }); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/scale_types.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/scale_types.ts new file mode 100644 index 0000000000000000000000000000000000000000..1ac9ca35498c50923a05eec37f752e4497fbee09 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/scale_types.ts @@ -0,0 +1,19 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export enum ScaleType { + LINEAR, + LOG10, +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/threejs_coordinator.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/threejs_coordinator.ts new file mode 100644 index 0000000000000000000000000000000000000000..2d8da8ad62235d6e0bdd49c710d3bd14f6606ab5 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/threejs_coordinator.ts @@ -0,0 +1,71 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import * as THREE from 'three'; + +import {Coordinator} from './coordinator'; +import {createScale} from './scale'; +import {Rect, ScaleType} from './types'; +import {convertRectToExtent} from './utils'; + +/** + * Unlike Coordinator, ThreeCoordinator uses internal coordinate system. + * + * Three.js has a notion of camera and it can efficiently update the canvas when the + * canvas dimension changes; it does not have to re-transform coordinates of each + * DataSeries, but, instead, only have to update the camera. + * + * In this coordinator, the output coordinate system is static from [0, 1000]. + */ +export class ThreeCoordinator extends Coordinator { + private readonly CAMERA_MIN = 0; + private readonly CAMERA_MAX = 1000; + private readonly domToCameraScale = createScale(ScaleType.LINEAR); + private readonly camera = new THREE.OrthographicCamera( + this.CAMERA_MIN, + this.CAMERA_MAX, + this.CAMERA_MAX, + this.CAMERA_MIN, + 0, + 100 + ); + + transformDataToUiCoord( + rectInUiCoordinate: Rect, + dataCoordinate: [number, number] + ): [number, number] { + const containerRect = this.domContainerRect; + const uiCoordinates = super.transformDataToUiCoord( + rectInUiCoordinate, + dataCoordinate + ); + + const xInCamera = this.domToCameraScale.forward( + [containerRect.x, containerRect.x + containerRect.width], + [this.CAMERA_MIN, this.CAMERA_MAX], + uiCoordinates[0] + ); + const yInCamera = this.domToCameraScale.forward( + [containerRect.y + containerRect.height, containerRect.y], + [this.CAMERA_MIN, this.CAMERA_MAX], + uiCoordinates[1] + ); + return [xInCamera, yInCamera]; + } + + getCamera() { + return this.camera; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/types.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..38c7ba88063a0b6451a385466254d0689a710b30 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/types.ts @@ -0,0 +1,33 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +export * from './scale_types'; + +export interface Dimension { + width: number; + height: number; +} + +export interface Rect { + x: number; + width: number; + y: number; + height: number; +} + +export interface Extent { + x: [number, number]; + y: [number, number]; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/utils.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/utils.ts new file mode 100644 index 0000000000000000000000000000000000000000..cd8de171509b3c4771c01e9df6499a9471bd5e11 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/utils.ts @@ -0,0 +1,23 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {Extent, Rect} from './types'; + +export function convertRectToExtent(rect: Rect): Extent { + return { + x: [rect.x, rect.x + rect.width], + y: [rect.y, rect.y + rect.height], + }; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/worker.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/worker.ts new file mode 100644 index 0000000000000000000000000000000000000000..f0fb6bd4f1a23e68f83658cc98ed0ea8d7893e83 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/worker.ts @@ -0,0 +1,27 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +/** + * Creates a new worker that loads and executes the JavaScript at the given URL. + * + * This module exists to conform to internal requirements. + * + * @param workerResourcePath URL pathanme to the JavaScript resource served by + * TensorBoard. TensorBoard disallows fetching JavaScript resources from a differnt + * origin. + */ +export function getWorker(workerResourcePath: string): Worker { + return new Worker(workerResourcePath); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/worker_pool.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/worker_pool.ts new file mode 100644 index 0000000000000000000000000000000000000000..9c2d814f1a73bc74af7df993eed015a39eb82d8f --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/worker_pool.ts @@ -0,0 +1,106 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {getWorker} from './worker'; + +/** + * An object that that provides facility to interact with a Worker process. Because + * WorkerPool maintains lifecycle of a Worker, it does not permit `terminate` or any other + * direct binding to Worker events. + * + * For listening to events from Worker, please use MessageChannel pattern: + * https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel + */ +export interface WorkerProxy { + activeCount: number; + postMessage: (message: any, transfer: Transferable[]) => void; + free: () => void; +} + +/** + * Worker pool load balancing module. + * + * Module attempts, without knowing the CPU workload, balance number of active users while + * minimally instantiating Workers. + * + * For a transient or for more control over Worker, please instiate one manually. + * + * Example usage: + * + * ```ts + * const workerPool = new WorkerPool('my_js_path.js'); + * + * @Component({...}) + * export class MyComponent { + * this.worker = workerPool.getNext(); + * + * ngOnDestory() { + * this.worker.free(); + * } + * } + * ``` + */ +export class WorkerPool { + private readonly workers: WorkerProxy[] = []; + constructor( + private readonly workerResourcePath: string, + private readonly maxPoolSize = 10, + private readonly workerFactory: (resourcePath: string) => Worker = getWorker + ) { + // TODO(tensorboard-team): consider pre-allocating with the IdleCallback. + } + + /** + * Returns a worker-like object that can be used to offload computation like Worker. + * This method allocates new Worker upto 10 instances. Depending on its usage (not by CPU + * utilization but merely number of instance holder), it allocates the freest one. Upon + * disposal (e.g., Angular's ngOnDestroy), please invoke `free` for recycle. Failing to + * invoke `free` will impact load balancing, but it will not impact correctness of the + * program. Similarly, invoking `free` multiple times do not impact correctness but + * impacts load balancing; please invoke it correctly. + * + * Important: to reduce the overhead of fetch and instantiating a worker, we do not + * terminate a worker once it is completedly freed up. For more control over the lifecycle + * of a Worker, please instantiate a Worker directly. + */ + getNext(): WorkerProxy { + let workerLike: WorkerProxy; + + const shouldAllocateNew = + this.workers.every(({activeCount}) => activeCount > 0) && + this.workers.length < this.maxPoolSize; + + if (shouldAllocateNew) { + const worker = this.workerFactory(this.workerResourcePath); + workerLike = { + activeCount: 0, + postMessage: (message: any, transfer: Transferable[]) => { + worker.postMessage(message, transfer); + }, + free: () => { + workerLike.activeCount = Math.max(workerLike.activeCount - 1, 0); + }, + }; + this.workers.push(workerLike); + } else { + const activeCounts = this.workers.map(({activeCount}) => activeCount); + const freestIndex = activeCounts.indexOf(Math.min(...activeCounts)); + workerLike = this.workers[freestIndex]; + } + + workerLike.activeCount++; + return workerLike; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/worker_pool_test.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/worker_pool_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..06e808aadd384aabf2b68af73d2397967a36d0b7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/line_chart_v2/lib/worker_pool_test.ts @@ -0,0 +1,94 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {WorkerPool} from './worker_pool'; + +describe('line_chart_v2/lib/worker_pool', () => { + let workerFactory: jasmine.Spy; + + beforeEach(() => { + workerFactory = jasmine.createSpy().and.callFake(() => { + return {postMessage: jasmine.createSpy()}; + }); + }); + + it('returns a worker like that it can postMessage to', () => { + const worker = {postMessage: jasmine.createSpy()}; + workerFactory.and.returnValue(worker); + + const workerLike = new WorkerPool('testing', 2, workerFactory).getNext(); + workerLike.postMessage('foo', []); + + expect(workerFactory).toHaveBeenCalledTimes(1); + expect(worker.postMessage).toHaveBeenCalledTimes(1); + expect(worker.postMessage).toHaveBeenCalledWith('foo', []); + }); + + describe('allocation', () => { + it('allocates pools even when instantiated pool with the same path', () => { + new WorkerPool('a', 1, workerFactory).getNext(); + new WorkerPool('a', 1, workerFactory).getNext(); + expect(workerFactory).toHaveBeenCalledTimes(2); + }); + + it('allocates upto maxPoolSize then allocates from first one again', () => { + const pool = new WorkerPool('a', 3, workerFactory); + const workers = [...new Array(5)].map(() => { + return pool.getNext(); + }); + + expect(workerFactory).toHaveBeenCalledTimes(3); + expect(workers[0]).toBe(workers[3]); + }); + }); + + describe('freeing', () => { + it('supports freeing and allocates freed one first', () => { + const pool = new WorkerPool('a', 3, workerFactory); + + const firstWorker = pool.getNext(); + const secondWorker = pool.getNext(); + secondWorker.free(); + + const thirdWorker = pool.getNext(); + thirdWorker.postMessage('bar', []); + + expect(firstWorker).not.toBe(thirdWorker); + expect(secondWorker).toBe(thirdWorker); + }); + + it('allocates the freest worker', () => { + const pool = new WorkerPool('a', 3, workerFactory); + const workers = [...new Array(15)].map(() => pool.getNext()); + + workers[1].free(); + workers[2].free(); + workers[5].free(); + workers[8].free(); + + // Because 3rd one is the freest, allocating a new instance will return it. + expect(pool.getNext()).toBe(workers[2]); + // 3rd one is still freest: activeCount = [5, 4, 3]. + expect(pool.getNext()).toBe(workers[2]); + // Now, activeCont is [5, 4, 4]. Because 2nd one comes first in array index, + // it wins. + expect(pool.getNext()).toBe(workers[1]); + // 3rd one is allocated again. + expect(pool.getNext()).toBe(workers[2]); + // Now that every one has 5 active clients, 0th index one gets returned. + expect(pool.getNext()).toBe(workers[0]); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/range_input/BUILD b/saved_models/tensorboard/tensorboard/webapp/widgets/range_input/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..b522ee399c4eecf19adb7dcae61b06f33f0f8f1e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/range_input/BUILD @@ -0,0 +1,41 @@ +load("//tensorboard/defs:defs.bzl", "tf_sass_binary", "tf_ts_library") +load("@npm_angular_bazel//:index.bzl", "ng_module") + +package(default_visibility = ["//tensorboard:internal"]) + +tf_sass_binary( + name = "range_input_styles", + src = "range_input_component.scss", +) + +ng_module( + name = "range_input", + srcs = [ + "range_input_component.ts", + "range_input_module.ts", + ], + assets = [ + ":range_input_styles", + "range_input_component.ng.html", + ], + deps = [ + "//tensorboard/webapp/angular:expect_angular_cdk_drag_drop", + "@npm//@angular/common", + "@npm//@angular/core", + "@npm//rxjs", + ], +) + +tf_ts_library( + name = "range_input_tests", + testonly = True, + srcs = ["range_input_test.ts"], + deps = [ + ":range_input", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "//tensorboard/webapp/angular:expect_angular_platform_browser_animations", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/range_input/range_input_component.ng.html b/saved_models/tensorboard/tensorboard/webapp/widgets/range_input/range_input_component.ng.html new file mode 100644 index 0000000000000000000000000000000000000000..7f8421c38f0c5acd6cac297908d2ef0df7d1e2d7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/range_input/range_input_component.ng.html @@ -0,0 +1,49 @@ + + + + + + + + + + diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/range_input/range_input_component.scss b/saved_models/tensorboard/tensorboard/webapp/widgets/range_input/range_input_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..b91e49ddcc4632745d61cde478ec1ec6e29f347d --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/range_input/range_input_component.scss @@ -0,0 +1,87 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +@import 'tensorboard/webapp/theme/tb_theme'; + +// Keep this in sync with range_input_component.ts's `THUMB_SIZE_PX`. +$_thumb-size: 12px; + +:host { + box-sizing: border-box; + display: inline-grid; + grid-gap: 10px; + grid-template-areas: + 'lower-input upper-input' + 'slider slider'; + font-size: 0; + lower-width: 100px; + padding: $_thumb-size / 2; +} + +input { + box-sizing: border-box; + overflow: hidden; + width: 100%; +} + +.lower-input { + grid-area: lower-input; +} + +.upper-input { + grid-area: upper-input; + justify-self: flex-end; +} + +.container { + grid-area: slider; + align-items: center; + box-sizing: border-box; + display: inline-flex; + height: $_thumb-size; + justify-content: center; + position: relative; + width: 100%; +} + +.slider-track { + background: map-get($tb-foreground, slider-off); + height: 2px; + width: 100%; +} + +.slider-track-fill { + background: mat-color($tb-primary); + position: absolute; + height: 2px; +} + +.thumb { + background: mat-color($tb-primary); + border-radius: 100%; + display: inline-block; + height: $_thumb-size; + margin-left: -$_thumb-size / 2; + position: absolute; + top: 0; + transform-origin: center; + transition: transform 0.3s ease; + box-shadow: 0 0 0 1px map-get($tb-foreground, slider-off); + width: $_thumb-size; + will-change: transform; +} + +.thumb.active { + transform: scale(1.2); +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/range_input/range_input_component.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/range_input/range_input_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..a019f01579a618bab97639b997d40b665efac57e --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/range_input/range_input_component.ts @@ -0,0 +1,302 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + ElementRef, + EventEmitter, + Input, + OnDestroy, + OnInit, + Output, + ViewChild, +} from '@angular/core'; +import {fromEvent, Subject} from 'rxjs'; +import {takeUntil} from 'rxjs/operators'; + +// Keep this in sync with range_input_component.scss's `$_thumb-size`. +const THUMB_SIZE_PX = 12; + +enum Position { + NONE, + LEFT, + RIGHT, +} + +/** + * Double thumbed slider component used for selecting a numeric range. + * + * Anatomy of the component: + * + * left input right input + * +-----------------+ +----------------+ + * | | | | + * +-----------------+ +----------------+ + * + * + * left thumb right thumb + * +---+ +---+ + * | + track + | + * x+--------+===================+---------+x + * | + + | + * +---+ +---+ + * + * + * Features: + * - you can drag a thumb to change lowerValue or upperValue + * - you cannot click on track to change any value + * - a thumb is centered (origin of the circle) w.r.t a value. + * - when lowerValue cross upperValue, lowerValue = upperValue and upperValue + * changes. Converse is true, too. + * - does not validate input (e.g., lowerValue can be lower than min) but thumbs + * are clipped to `min` and `max`. Also, when emitting changes, the values can + * never exceed `min` and `max`. + */ +@Component({ + selector: 'tb-range-input', + templateUrl: './range_input_component.ng.html', + styleUrls: ['./range_input_component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class RangeInputComponent implements OnInit, OnDestroy { + @ViewChild('container', {static: true, read: ElementRef}) + container!: ElementRef; + + /** + * Minimum number of the slider. This would set the minimum of the slider + * tracker. + */ + @Input() min!: number; + + /** + * Maximum number of the slider. This would set the maximum of the slider + * tracker. + */ + @Input() max!: number; + + /** + * Minimum value for the slider thumb. Expect the number to be greater than + * or equal to `min`. If lower, the thumb will still be clipped to the `min` + * value. + */ + @Input() lowerValue!: number; + + /** + * Maximum value for the slider thumb. Expect the number to be greater than + * or equal to `max`. If lower, the thumb will still be clipped to the `max` + * value. + */ + @Input() upperValue!: number; + + /** + * `null` denotes contiguous "ticks" + */ + @Input() tickCount: number | null = 20; + + @Output() + value = new EventEmitter<{lowerValue: number; upperValue: number}>(); + + readonly Position = Position; + + private activeThumb = Position.NONE; + + /** + * Accounts for position of cursor when pressing down on the thumb. + * + * To illustrate the point, imagine the case when min=0, max=1, thumb has + * radius of 100px, the thumb is set to max, and the input is positioned from + * (0, 0) in the viewport. User can change max by mouse downing at (51, 0) but + * that should not change the upperValue to 0.51. Instead, it should stay + * at 1. In this case, since you cannot move the mouse past (0, 0), you can + * never set the value to <= 49 but, normnally, the input does not get + * rendered in (0, 0), thumb radius is 6px, and user can mouse down at middle + * of the thumb. + */ + private offsetXFromOriginOfActiveThumb: number = 0; + + private readonly ngUnsubscribe = new Subject(); + + constructor(private readonly changeDetector: ChangeDetectorRef) {} + + getThumbPosition(value: number): string { + const clippedValue = this.getClippedValue(value); + const boundSize = this.max - this.min; + + if (boundSize <= 0) { + return '50%'; + } + + const percentDifference = ((clippedValue - this.min) / boundSize) * 100; + return `${percentDifference}%`; + } + + getTrackWidth(): string { + const boundSize = this.max - this.min; + + if (boundSize <= 0) { + return '0%'; + } + + const valDiff = + this.getClippedValue(this.upperValue) - + this.getClippedValue(this.lowerValue); + const percentDifference = (valDiff / boundSize) * 100; + return `${percentDifference}%`; + } + + private getClippedValue(value: number) { + return Math.min(Math.max(value, this.min), this.max); + } + + ngOnDestroy() { + this.ngUnsubscribe.next(); + this.ngUnsubscribe.complete(); + } + + ngOnInit() { + fromEvent(document, 'mousemove', {passive: true}) + .pipe(takeUntil(this.ngUnsubscribe)) + .subscribe((event) => { + this.handleMouseMove(event as MouseEvent); + }); + fromEvent(document, 'mouseup', {passive: true}) + .pipe(takeUntil(this.ngUnsubscribe)) + .subscribe((event) => { + this.handleMouseOut(event as MouseEvent); + }); + } + + handleMouseDown(event: MouseEvent, position: Position) { + this.activeThumb = position; + // Mouse event reports cursor position w.r.t the top left edge of the target + // (in this case, a thumb) element. + const offsetXFromLeftOfThumb = event.offsetX; + // The thumb is visually centered w.r.t. a value using negative margin of + // THUMB_SIZE_PX / 2. Account for cursor offset w.r.t the origin of the + // active thumb so the value does not change simply by mousing down on the + // thumb. + const offsetXFromCenterOfThumb = THUMB_SIZE_PX / 2 - offsetXFromLeftOfThumb; + this.offsetXFromOriginOfActiveThumb = offsetXFromCenterOfThumb; + } + + private calculateValueFromMouseEvent(event: MouseEvent) { + const {left, right} = this.container.nativeElement.getBoundingClientRect(); + // Compute cursor position relative to left edge of the range-input element. + const relativeXPx = event.clientX - left; + // Compensate for cursor offset from origin of the active thumb. + const compensatedRelativeXInPx = + relativeXPx + this.offsetXFromOriginOfActiveThumb; + + let xPositionInPercent: number; + if (this.tickCount !== null && this.tickCount > 0) { + const tickWidthInPx = (right - left) / this.tickCount; + const tickStuckRelativePx = + Math.round(compensatedRelativeXInPx / tickWidthInPx) * tickWidthInPx; + xPositionInPercent = tickStuckRelativePx / (right - left); + } else { + xPositionInPercent = compensatedRelativeXInPx / (right - left); + } + + return this.getClippedValue( + this.min + (this.max - this.min) * xPositionInPercent + ); + } + + /** + * Handles `mousemove` event in the document and, if dragging (mousedown on + * thumb happened before), compute new relative position of the active thumb + * and, if changed, event it to parent. If the left thumb is dragged past the + * right thumb, the effect (from the user perspective) is that the left thumb + * stays where the right thumb was, and the drag continues, moving the right + * thumb instead. + * + * Implementation note: especially when `lowerValue` and `upperValue` are + * nearby, you need to know which value is currently being changed (imagine + * the cursor being right in between): to disambiguate, we have + * `this.activeThumb`. However, of course, when `lowerValue` crosses + * `upperValue`, or vice a versa, we need to update the `this.activeThumb` + * accordingly. This is especially important because the component is a + * "controlled component" [1] and, when props update, we do not know whether + * `lowerValue` or `upperValue` correspond to the activeThumb (i.e., if this + * were completely uncontrolled component, we can take initial position of the + * thumb via prop, track DOM/position of active and inactive thumbs to + * update/move the correct DOM). + * + * [1]: https://reactjs.org/docs/forms.html#controlled-components + */ + private handleMouseMove(event: MouseEvent) { + if (this.activeThumb === Position.NONE) { + return; + } + + const newValue = this.calculateValueFromMouseEvent(event); + + let nextValues: [number, number] = [this.lowerValue, this.upperValue]; + + if (this.activeThumb === Position.LEFT) { + if (newValue > this.upperValue) { + this.activeThumb = Position.RIGHT; + } + nextValues = [newValue, this.upperValue]; + } else { + if (newValue < this.lowerValue) { + this.activeThumb = Position.LEFT; + } + nextValues = [this.lowerValue, newValue]; + } + + this.maybeNotifyNextValue(nextValues); + this.changeDetector.markForCheck(); + } + + private maybeNotifyNextValue(minAndMax: [number, number]) { + const [lowerValue, upperValue] = minAndMax.sort((a, b) => a - b); + if (this.lowerValue !== lowerValue || this.upperValue !== upperValue) { + this.value.emit({lowerValue, upperValue}); + } + } + + private handleMouseOut(event: MouseEvent) { + if (this.activeThumb !== Position.NONE) { + this.activeThumb = Position.NONE; + this.changeDetector.markForCheck(); + } + } + + handleInputChange(event: InputEvent, position: Position) { + const input = event.target! as HTMLInputElement; + const numValue = this.getClippedValue(Number(input.value)); + if (isNaN(numValue)) { + return; + } + + let nextValues: [number, number] = [this.lowerValue, this.upperValue]; + if (position === Position.LEFT) { + nextValues = [numValue, this.upperValue]; + } else { + nextValues = [this.lowerValue, numValue]; + } + this.maybeNotifyNextValue(nextValues); + } + + isThumbActive(position: Position) { + return this.activeThumb === position; + } +} + +export const TEST_ONLY = { + THUMB_SIZE_PX, +}; diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/range_input/range_input_module.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/range_input/range_input_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..62b1144b0e8336d80b70599944fc8cca4f4c67bd --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/range_input/range_input_module.ts @@ -0,0 +1,25 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; + +import {RangeInputComponent} from './range_input_component'; + +@NgModule({ + imports: [CommonModule], + exports: [RangeInputComponent], + declarations: [RangeInputComponent], +}) +export class RangeInputModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/range_input/range_input_test.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/range_input/range_input_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..f1f3350eefd3f6c6b02dd6b9bff2c2ecdb4dc7a9 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/range_input/range_input_test.ts @@ -0,0 +1,345 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {Component, Input} from '@angular/core'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; + +import {RangeInputComponent, TEST_ONLY} from './range_input_component'; + +@Component({ + selector: 'testable-range-input', + template: ` + + `, + styles: [ + ` + tb-range-input { + position: fixed; + /* account for 6px padding and align left of track to 100px. */ + left: ${100 - TEST_ONLY.THUMB_SIZE_PX / 2}px; + top: 50px; + width: ${200 + TEST_ONLY.THUMB_SIZE_PX}px; + } + `, + ], +}) +class TestableComponent { + @Input() min!: number; + + @Input() max!: number; + + @Input() lowerValue!: number; + + @Input() upperValue!: number; + + @Input() tickCount!: number | null; + + @Input() onValue!: (event: {lowerValue: number; upperValue: number}) => void; +} + +describe('range input test', () => { + interface CreateComponentInput { + min?: number; + max?: number; + tickCount?: number | null; + lowerValue: number; + upperValue: number; + } + + function createComponent(props: CreateComponentInput) { + const propsWithDefault = { + min: -5, + max: 5, + tickCount: 10, + ...props, + }; + const fixture = TestBed.createComponent(TestableComponent); + + const onValue = jasmine.createSpy(); + fixture.componentInstance.lowerValue = propsWithDefault.lowerValue; + fixture.componentInstance.upperValue = propsWithDefault.upperValue; + fixture.componentInstance.min = propsWithDefault.min; + fixture.componentInstance.max = propsWithDefault.max; + fixture.componentInstance.tickCount = propsWithDefault.tickCount; + fixture.componentInstance.onValue = onValue; + fixture.detectChanges(); + return {fixture, onValue}; + } + + function getThumbs( + fixture: ComponentFixture + ): HTMLElement[] { + const thumbs = fixture.debugElement.queryAll(By.css('.thumb')); + return thumbs.map((thumbDebugElement) => thumbDebugElement.nativeElement); + } + + function getInputs( + fixture: ComponentFixture + ): HTMLInputElement[] { + const input = fixture.debugElement.queryAll(By.css('input')); + return input.map((inputDebugElement) => inputDebugElement.nativeElement); + } + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [RangeInputComponent, TestableComponent], + }).compileComponents(); + }); + + describe('render', () => { + function getThumbsStyleLeft( + fixture: ComponentFixture + ): string[] { + return getThumbs(fixture).map((debugEl) => { + return debugEl.style.left; + }); + } + + it('renders correct thumb positions', () => { + const {fixture} = createComponent({lowerValue: 2, upperValue: 3}); + + expect(getThumbsStyleLeft(fixture)).toEqual(['70%', '80%']); + }); + + it('clips min and max within the slider', () => { + const {fixture} = createComponent({lowerValue: -100, upperValue: 100}); + + expect(getThumbsStyleLeft(fixture)).toEqual(['0%', '100%']); + }); + + it('does not check lowerValue > upperValue and render them', () => { + const {fixture} = createComponent({lowerValue: 3, upperValue: -1}); + + expect(getThumbsStyleLeft(fixture)).toEqual(['80%', '40%']); + }); + + it('puts thumb at 50% when min === max', () => { + const {fixture} = createComponent({ + min: 10, + max: 10, + lowerValue: 10, + upperValue: 10, + }); + + expect(getThumbsStyleLeft(fixture)).toEqual(['50%', '50%']); + }); + }); + + describe('move', () => { + function startMovingThumb( + thumb: HTMLElement, + relativePosition: number = TEST_ONLY.THUMB_SIZE_PX / 2 + ) { + const {left} = thumb.getBoundingClientRect(); + // Simulate clicking right in the middle of the thumb. + const mouseDownEvent = new MouseEvent('mousedown', { + clientX: left + relativePosition, + }); + thumb.dispatchEvent(mouseDownEvent); + } + + function moveThumb( + thumb: HTMLElement, + absolutePositionInScreenInPx: number + ) { + const mouseMoveEvent = new MouseEvent('mousemove', { + clientX: absolutePositionInScreenInPx, + }); + document.dispatchEvent(mouseMoveEvent); + } + + it('calls `value` when thumb is dragged', () => { + const {fixture, onValue} = createComponent({ + lowerValue: -1, + upperValue: 1, + tickCount: null, + }); + const [leftThumb] = getThumbs(fixture); + startMovingThumb(leftThumb); + // range-input starts from 100px and ends at 300px. + moveThumb(leftThumb, 120); + expect(onValue).toHaveBeenCalledWith({lowerValue: -4, upperValue: 1}); + }); + + it('compensates position of mousedown relative to thumb center', () => { + const {fixture, onValue} = createComponent({ + lowerValue: -1, + upperValue: 1, + tickCount: null, + }); + const values: Array<{lowerValue: number; upperValue: number}> = []; + onValue.and.callFake( + (value: {lowerValue: number; upperValue: number}) => { + values.push(value); + } + ); + const [leftThumb] = getThumbs(fixture); + startMovingThumb(leftThumb, TEST_ONLY.THUMB_SIZE_PX); + // Because we started to drag from right edge of the thumb, moving the + // thumb to 120 is equivalent to putting it at 126px (thumb radius is + // 6px). + moveThumb(leftThumb, 120); + expect(values).toEqual([{lowerValue: -4.3, upperValue: 1}]); + + startMovingThumb(leftThumb, 0); + // Because we started to drag from left edge of the thumb, moving the + // thumb to 120 is equivalent to putting it at 114px (thumb radius is + // 6px). + moveThumb(leftThumb, 120); + expect(values).toEqual([ + {lowerValue: -4.3, upperValue: 1}, + {lowerValue: -3.7, upperValue: 1}, + ]); + }); + + it('ignores mousemove when mousedown never happened', () => { + const {fixture, onValue} = createComponent({ + lowerValue: -1, + upperValue: 1, + }); + const [leftThumb] = getThumbs(fixture); + + moveThumb(leftThumb, 0); + expect(onValue).not.toHaveBeenCalled(); + + moveThumb(leftThumb, 1000); + expect(onValue).not.toHaveBeenCalled(); + }); + + it('does not trigger change when value does not change', () => { + const {fixture, onValue} = createComponent({ + lowerValue: -5, + upperValue: 1, + tickCount: 10, + }); + const [leftThumb] = getThumbs(fixture); + startMovingThumb(leftThumb); + + moveThumb(leftThumb, 101); + expect(onValue).not.toHaveBeenCalled(); + }); + + it('emits change when moved by more than one', () => { + const {fixture, onValue} = createComponent({ + lowerValue: -5, + upperValue: 1, + tickCount: 10, + }); + const [leftThumb] = getThumbs(fixture); + startMovingThumb(leftThumb); + + moveThumb(leftThumb, 109); + expect(onValue).not.toHaveBeenCalled(); + + // In 200px wide slider, we have 10 ticks which means every tick should + // occupy 20px. When you move the cursor a little bit left/right between + // two ticks, we change the value. + moveThumb(leftThumb, 111); + expect(onValue).toHaveBeenCalledWith({lowerValue: -4, upperValue: 1}); + }); + + it('triggers change for minute movement when tickCount is null', () => { + const {fixture, onValue} = createComponent({ + lowerValue: -5, + upperValue: 1, + tickCount: null, + }); + const [leftThumb] = getThumbs(fixture); + startMovingThumb(leftThumb); + + moveThumb(leftThumb, 101); + expect(onValue).toHaveBeenCalledWith({lowerValue: -4.95, upperValue: 1}); + }); + + it('changes upperValue when min knob crosses upperValue', () => { + const {fixture, onValue} = createComponent({ + lowerValue: -5, + upperValue: 0, + tickCount: null, + }); + const [leftThumb] = getThumbs(fixture); + startMovingThumb(leftThumb); + + moveThumb(leftThumb, 250); + expect(onValue).toHaveBeenCalledWith({lowerValue: 0, upperValue: 2.5}); + }); + + it('does not change anything when min === max', () => { + const {fixture, onValue} = createComponent({ + min: 10, + max: 10, + lowerValue: 10, + upperValue: 10, + }); + + const [leftThumb] = getThumbs(fixture); + startMovingThumb(leftThumb); + + moveThumb(leftThumb, 250); + expect(onValue).not.toHaveBeenCalled(); + }); + }); + + describe('input control', () => { + let fixture: ComponentFixture; + let onValue: jasmine.Spy; + + beforeEach(() => { + const fixtureAndOnValue = createComponent({ + min: 0, + max: 10, + lowerValue: 5, + upperValue: 5, + }); + + fixture = fixtureAndOnValue.fixture; + onValue = fixtureAndOnValue.onValue; + }); + + it('emits change when user changes input', () => { + const [minInput] = getInputs(fixture); + minInput.value = '0'; + minInput.dispatchEvent(new InputEvent('change')); + + expect(onValue).toHaveBeenCalledWith({lowerValue: 0, upperValue: 5}); + }); + + it('does not react to keydown or input', () => { + const [minInput] = getInputs(fixture); + minInput.value = '0'; + minInput.dispatchEvent(new InputEvent('keydown')); + minInput.dispatchEvent(new InputEvent('input')); + minInput.dispatchEvent(new InputEvent('up')); + + expect(onValue).not.toHaveBeenCalled(); + }); + + it('swaps min and max when new upperValue is smaller than lowerValue', () => { + const [, maxInput] = getInputs(fixture); + maxInput.value = '2'; + maxInput.dispatchEvent(new InputEvent('change')); + + expect(onValue).toHaveBeenCalledWith({lowerValue: 2, upperValue: 5}); + }); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/resize_detector_directive.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/resize_detector_directive.ts new file mode 100644 index 0000000000000000000000000000000000000000..fa10b4d9d869c1d0b68f086a31ecc24ef1486bc7 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/resize_detector_directive.ts @@ -0,0 +1,68 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import { + Directive, + ElementRef, + EventEmitter, + Input, + OnDestroy, + OnInit, + Output, +} from '@angular/core'; +import {Subject} from 'rxjs'; +import {debounceTime, skip, takeUntil} from 'rxjs/operators'; + +/** + * A directive that calls `onResize` when a host element is resized. + * + * It does not emit `onResize` on the initial render. + */ +@Directive({selector: '[detectResize]'}) +export class ResizeDetectorDirective implements OnDestroy, OnInit { + @Input() resizeEventDebouncePeriodInMs: number = 100; + @Output() onResize = new EventEmitter(); + + private readonly ngUnsubscribe$ = new Subject(); + private readonly onResize$ = new Subject(); + + constructor(ref: ElementRef) { + const resizeObserver = new ResizeObserver(() => { + this.onResize$.next(); + }); + resizeObserver.observe(ref.nativeElement); + this.ngUnsubscribe$.subscribe(() => { + resizeObserver.unobserve(ref.nativeElement); + }); + } + + ngOnInit() { + this.onResize$ + .pipe( + // When ResizeObserver is initially created, it calls the callback. + // Ignore that since it is not really a resize. + skip(1), + debounceTime(this.resizeEventDebouncePeriodInMs), + takeUntil(this.ngUnsubscribe$) + ) + .subscribe(() => { + this.onResize.emit(); + }); + } + + ngOnDestroy() { + this.ngUnsubscribe$.next(); + this.ngUnsubscribe$.complete(); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/resize_detector_module.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/resize_detector_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..d2722548381e08f01c68c9c07f0bbf240f599afc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/resize_detector_module.ts @@ -0,0 +1,23 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {NgModule} from '@angular/core'; + +import {ResizeDetectorDirective} from './resize_detector_directive'; + +@NgModule({ + exports: [ResizeDetectorDirective], + declarations: [ResizeDetectorDirective], +}) +export class ResizeDetectorModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/resize_detector_test.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/resize_detector_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..c3cb536ef50de2b04de1c9b37a0f21e7704d6ddf --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/resize_detector_test.ts @@ -0,0 +1,111 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {Component, Input} from '@angular/core'; +import {fakeAsync, TestBed, tick} from '@angular/core/testing'; + +import {ResizeDetectorDirective} from './resize_detector_directive'; + +@Component({ + selector: 'testing-component', + template: ` +
    + `, +}) +class TestableComponent { + @Input() renderDirective: boolean = true; + @Input() resizeEventDebouncePeriodInMs?: number; + @Input() onResize!: () => void; +} + +describe('resize detector', () => { + let triggerResize: () => void; + let resizeObservers: ResizeObserver[]; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [TestableComponent, ResizeDetectorDirective], + }).compileComponents(); + + resizeObservers = []; + spyOn(window, 'ResizeObserver').and.callFake(function ( + callback: ResizeObserverCallback + ) { + const resizeObserver: ResizeObserver = { + disconnect: () => {}, + observe: () => {}, + unobserve: () => {}, + }; + triggerResize = () => { + callback([], resizeObserver); + }; + resizeObservers.push(resizeObserver); + return resizeObserver; + }); + }); + + it('does not call onResize on initial render without resize', fakeAsync(() => { + const fixture = TestBed.createComponent(TestableComponent); + const onResize = jasmine.createSpy(); + fixture.componentInstance.resizeEventDebouncePeriodInMs = 50; + fixture.componentInstance.onResize = onResize; + fixture.detectChanges(); + + // When ResizeObserver is initially created, it calls the callback. + // Ignore that. + triggerResize(); + tick(10000); + expect(onResize).not.toHaveBeenCalled(); + })); + + it('calls onResize on debounce', fakeAsync(() => { + const fixture = TestBed.createComponent(TestableComponent); + const onResize = jasmine.createSpy(); + fixture.componentInstance.resizeEventDebouncePeriodInMs = 50; + fixture.componentInstance.onResize = onResize; + fixture.detectChanges(); + + triggerResize(); + expect(onResize).not.toHaveBeenCalled(); + + tick(10); + triggerResize(); + expect(onResize).not.toHaveBeenCalled(); + + tick(50); + expect(onResize).toHaveBeenCalledTimes(1); + })); + + it('unregisters when the directive is removed', () => { + const fixture = TestBed.createComponent(TestableComponent); + const onResize = jasmine.createSpy(); + fixture.componentInstance.onResize = onResize; + fixture.detectChanges(); + const unobserveSpy = spyOn(resizeObservers[0], 'unobserve'); + + fixture.componentInstance.renderDirective = false; + fixture.detectChanges(); + + triggerResize(); + + expect(unobserveSpy).toHaveBeenCalled(); + expect(onResize).not.toHaveBeenCalled(); + }); +}); diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/resize_detector_testing_module.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/resize_detector_testing_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..7a81c7e9e9b2b73a7ce43fc1ce49fa0f1bef3c98 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/resize_detector_testing_module.ts @@ -0,0 +1,40 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Directive, EventEmitter, Input, NgModule, Output} from '@angular/core'; +import {ComponentFixture} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; + +@Directive({selector: '[detectResize]'}) +class ResizeDetectorTestingDirective { + @Input() resizeEventDebouncePeriodInMs: number = 100; + @Output() onResize = new EventEmitter(); + + simulateResize() { + this.onResize.emit(); + } +} + +@NgModule({ + exports: [ResizeDetectorTestingDirective], + declarations: [ResizeDetectorTestingDirective], +}) +export class ResizeDetectorTestingModule { + simulateResize(fixture: ComponentFixture) { + const directive = fixture.debugElement + .query(By.directive(ResizeDetectorTestingDirective)) + .injector.get(ResizeDetectorTestingDirective); + directive.simulateResize(); + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/text/BUILD b/saved_models/tensorboard/tensorboard/webapp/widgets/text/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..fa4e7363c2f68becad6799ea2bd4e7026bc802d0 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/text/BUILD @@ -0,0 +1,39 @@ +load("@npm_angular_bazel//:index.bzl", "ng_module") +load("//tensorboard/defs:defs.bzl", "tf_sass_binary") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +tf_sass_binary( + name = "truncated_path_styles", + src = "truncated_path_component.scss", +) + +ng_module( + name = "truncated_path", + srcs = [ + "truncated_path_component.ts", + "truncated_path_module.ts", + ], + assets = [ + ":truncated_path_styles", + ], + deps = [ + "@npm//@angular/common", + "@npm//@angular/core", + ], +) + +ng_module( + name = "text_tests", + testonly = True, + srcs = ["truncated_path_test.ts"], + deps = [ + ":truncated_path", + "//tensorboard/webapp/angular:expect_angular_core_testing", + "@npm//@angular/core", + "@npm//@angular/platform-browser", + "@npm//@types/jasmine", + ], +) diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/text/truncated_path_component.scss b/saved_models/tensorboard/tensorboard/webapp/widgets/text/truncated_path_component.scss new file mode 100644 index 0000000000000000000000000000000000000000..4f37bbab40aff57f7604774d3e917ab1833408b4 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/text/truncated_path_component.scss @@ -0,0 +1,30 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +:host { + display: inline-flex; + white-space: nowrap; +} + +.first-text-part { + // Give basis to keep the first part visible, if the second part is very long. + flex: 1 1 4ch; + max-width: max-content; +} + +.first-text-part, +.second-text-part { + overflow: hidden; + text-overflow: ellipsis; +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/text/truncated_path_component.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/text/truncated_path_component.ts new file mode 100644 index 0000000000000000000000000000000000000000..3f74dc2b3638f87f4a1be22db1265dda22fcf782 --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/text/truncated_path_component.ts @@ -0,0 +1,55 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {Component, Input} from '@angular/core'; + +/** + * A component for rendering a '/' delimited path. When text exceeds its + * container's width, it will try to show as much of the last '/' slash piece as + * possible. If there is no slash piece, it simply truncates from the right with + * ellipsis. + */ +@Component({ + selector: 'tb-truncated-path', + template: ` + {{ + firstTextPart() + }} + {{ secondTextPart() }} + `, + styleUrls: [`truncated_path_component.css`], +}) +export class TruncatedPathComponent { + // The text to render. + @Input() value!: string; + + private parseValue() { + const lastPieceIndex = this.value.lastIndexOf('/'); + if (lastPieceIndex === -1) { + return {first: '', second: this.value}; + } + return { + first: this.value.slice(0, lastPieceIndex), + second: this.value.slice(lastPieceIndex), + }; + } + + firstTextPart() { + return this.parseValue().first; + } + + secondTextPart() { + return this.parseValue().second; + } +} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/text/truncated_path_module.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/text/truncated_path_module.ts new file mode 100644 index 0000000000000000000000000000000000000000..7bcdec748686c982274ec1a0a772b3bf6fd746ba --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/text/truncated_path_module.ts @@ -0,0 +1,28 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; + +import {TruncatedPathComponent} from './truncated_path_component'; + +/** + * Provides a TruncatedPathComponent for rendering a '/' delimited path. + */ +@NgModule({ + declarations: [TruncatedPathComponent], + exports: [TruncatedPathComponent], + imports: [CommonModule], +}) +export class TruncatedPathModule {} diff --git a/saved_models/tensorboard/tensorboard/webapp/widgets/text/truncated_path_test.ts b/saved_models/tensorboard/tensorboard/webapp/widgets/text/truncated_path_test.ts new file mode 100644 index 0000000000000000000000000000000000000000..3a16e52be4bb0c193ef7b9b3fd0eb80ac6b7a7fc --- /dev/null +++ b/saved_models/tensorboard/tensorboard/webapp/widgets/text/truncated_path_test.ts @@ -0,0 +1,86 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +import {TestBed} from '@angular/core/testing'; +import {By} from '@angular/platform-browser'; + +import {TruncatedPathComponent} from './truncated_path_component'; + +describe('truncated path', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [TruncatedPathComponent], + }).compileComponents(); + }); + + describe('render', () => { + it('renders properly', () => { + const fixture = TestBed.createComponent(TruncatedPathComponent); + fixture.componentInstance.value = 'foo'; + fixture.detectChanges(); + + expect(fixture.nativeElement.textContent).toBe('foo'); + }); + + it('splits text based on last slash piece', () => { + const fixture = TestBed.createComponent(TruncatedPathComponent); + fixture.componentInstance.value = 'abc/def/ghi/jkl/mno'; + fixture.detectChanges(); + + const firstPart = fixture.debugElement.query(By.css('.first-text-part')); + const secondPart = fixture.debugElement.query( + By.css('.second-text-part') + ); + + expect(fixture.nativeElement.textContent).toBe('abc/def/ghi/jkl/mno'); + expect(firstPart.nativeElement.textContent).toBe('abc/def/ghi/jkl'); + expect(secondPart.nativeElement.textContent).toBe('/mno'); + }); + + it('does not split a text without slashes', () => { + const fixture = TestBed.createComponent(TruncatedPathComponent); + fixture.componentInstance.value = 'abcdefghijabcdefghijabcdefghij'; + fixture.detectChanges(); + + const firstPart = fixture.debugElement.query(By.css('.first-text-part')); + const secondPart = fixture.debugElement.query( + By.css('.second-text-part') + ); + + expect(firstPart).not.toBeTruthy(); + expect(fixture.nativeElement.textContent).toBe( + 'abcdefghijabcdefghijabcdefghij' + ); + expect(secondPart.nativeElement.textContent).toBe( + 'abcdefghijabcdefghijabcdefghij' + ); + }); + + it('splits short text that contains no slashes', () => { + const fixture = TestBed.createComponent(TruncatedPathComponent); + fixture.componentInstance.value = 'abcdefghijklmno'; + fixture.detectChanges(); + + const firstPart = fixture.debugElement.query(By.css('.first-text-part')); + const secondPart = fixture.debugElement.query( + By.css('.second-text-part') + ); + + expect(firstPart).not.toBeTruthy(); + expect(fixture.nativeElement.textContent).toBe('abcdefghijklmno'); + expect(secondPart.nativeElement.textContent).toBe('abcdefghijklmno'); + }); + }); +}); diff --git a/saved_models/tensorboard/third_party/BUILD b/saved_models/tensorboard/third_party/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..e4629f778513486740c721e5dc0988cddbe312b0 --- /dev/null +++ b/saved_models/tensorboard/third_party/BUILD @@ -0,0 +1,9 @@ +package(default_visibility = ["//tensorboard:internal"]) + +filegroup( + name = "jspbfix", + srcs = ["jspbfix.js"], + visibility = ["//visibility:public"], +) + +exports_files(glob(["*.LICENSE"])) diff --git a/saved_models/tensorboard/third_party/bh_tsne.LICENSE b/saved_models/tensorboard/third_party/bh_tsne.LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..8f5ebc93eba720747aee27563a529ce4d0dac3dc --- /dev/null +++ b/saved_models/tensorboard/third_party/bh_tsne.LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Andrej Karpathy + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/saved_models/tensorboard/third_party/bleach.BUILD b/saved_models/tensorboard/third_party/bleach.BUILD new file mode 100644 index 0000000000000000000000000000000000000000..8911d637c1da4aeadaea9de8206269482f49a0f1 --- /dev/null +++ b/saved_models/tensorboard/third_party/bleach.BUILD @@ -0,0 +1,27 @@ +# Description: +# Build file for Bleach. +# License: +# Apache 2.0 +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +exports_files(["LICENSE"]) + +py_library( + name = "org_mozilla_bleach", + srcs = [ + "bleach/__init__.py", + "bleach/callbacks.py", + "bleach/encoding.py", + "bleach/linkifier.py", + "bleach/sanitizer.py", + "bleach/utils.py", + "bleach/version.py", + ], + srcs_version = "PY2AND3", + deps = [ + "@org_html5lib", + "@org_pythonhosted_six", + ], +) diff --git a/saved_models/tensorboard/third_party/chromium/BUILD b/saved_models/tensorboard/third_party/chromium/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..60beaa021c0b71f09bbbed1d2672ef5ab2ebcdc6 --- /dev/null +++ b/saved_models/tensorboard/third_party/chromium/BUILD @@ -0,0 +1,38 @@ +load("@io_bazel_rules_webtesting//web:web.bzl", "web_test_archive") + +package(default_visibility = ["//tensorboard:internal"]) + +licenses(["notice"]) + +config_setting( + name = "mac", + values = {"cpu": "darwin"}, +) + +config_setting( + name = "linux", + values = {"cpu": "k8"}, +) + +web_test_archive( + name = "chromium", + archive = "@org_chromium_chromium//file", + extract = "build", + named_files = select({ + ":linux": { + "CHROMIUM": "chrome-linux/chrome", + }, + ":mac": { + "CHROMIUM": "chrome-mac/Chromium.app/Contents/MacOS/chromium", + }, + }), + visibility = ["//tensorboard/functionaltests/browsers:__pkg__"], +) + +web_test_archive( + name = "chromedriver", + archive = "@org_chromium_chromedriver//file", + extract = "build", + named_files = {"CHROMEDRIVER": "chromedriver"}, + visibility = ["//tensorboard/functionaltests/browsers:__pkg__"], +) diff --git a/saved_models/tensorboard/third_party/clutz.BUILD b/saved_models/tensorboard/third_party/clutz.BUILD new file mode 100644 index 0000000000000000000000000000000000000000..99deb2c23a9bb800de8dc6915d0e24cfd6874c42 --- /dev/null +++ b/saved_models/tensorboard/third_party/clutz.BUILD @@ -0,0 +1,46 @@ +# Description: +# Build tool for making TypeScript .d.ts files from Closure JavaScript. + +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) # MIT + +exports_files([ + "LICENSE", + "src/resources/closure.lib.d.ts", +]) + +JVM_FLAGS = [ + "-Xss20m", # JSCompiler needs big stacks for recursive parsing + "-XX:+UseParallelGC", # Best GC when app isn't latency sensitive +] + +java_binary( + name = "clutz", + srcs = glob(["src/main/java/com/google/javascript/clutz/**/*.java"]), + jvm_flags = JVM_FLAGS, + main_class = "com.google.javascript.clutz.DeclarationGenerator", + deps = [ + "@args4j", + "@com_google_code_findbugs_jsr305", + "@com_google_code_gson", + "@com_google_guava", + "@com_google_javascript_closure_compiler", + "@org_apache_commons_lang3", + "@org_apache_commons_text", + ], +) + +java_binary( + name = "gents", + srcs = glob(["src/main/java/com/google/javascript/gents/**/*.java"]), + jvm_flags = JVM_FLAGS, + main_class = "com.google.javascript.gents.TypeScriptGenerator", + deps = [ + "@args4j", + "@com_google_code_findbugs_jsr305", + "@com_google_code_gson", + "@com_google_guava", + "@com_google_javascript_closure_compiler", + ], +) diff --git a/saved_models/tensorboard/third_party/clutz.bzl b/saved_models/tensorboard/third_party/clutz.bzl new file mode 100644 index 0000000000000000000000000000000000000000..c7de1728c1c9158d68a74f250873d46e09818868 --- /dev/null +++ b/saved_models/tensorboard/third_party/clutz.bzl @@ -0,0 +1,83 @@ +# Copyright 2017 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Build definitions for TypeScript from Closure JavaScript libraries.""" + +load("@io_bazel_rules_closure//closure/private:defs.bzl", + "JS_FILE_TYPE", + "collect_js", + "unfurl") + +DEPRECATED_CLUTZ_ATTRIBUTES = { + "_clutz": attr.label( + default=Label("@io_angular_clutz//:clutz"), + executable=True, + cfg="host"), + "_clutz_externs": attr.label_list( + default=[ + Label("//third_party:jspbfix"), + Label("@com_google_javascript_closure_compiler_externs"), + ], + allow_files=True), +} + +def deprecated_extract_dts_from_closure_libraries(ctx): + """Extracts type definitions from closure dependencies. + + This just generates one big .d.ts file for all transitive Closure sources, + and does not pass it down. That means each rule has to duplicate the effort, + but on the other hand allows transitive dependencies on shared rules without + causing duplicate definition errors. + + Args: + ctx: A Skylark context. + Returns: + The generated Clutz typings file, or None if there were no JS deps. + """ + deps = unfurl(ctx.attr.deps, provider="closure_js_library") + js = collect_js(deps, ctx.files._closure_library_base) + if not js.srcs: + return None + js_typings = ctx.actions.declare_file("%s-js-typings.d.ts" % ctx.label.name) + # File.extension does not have leading "." whereas JS_FILE_TYPE does. + clutz_js_externs = [f for f in ctx.files._clutz_externs + if '.%s' % f.extension in JS_FILE_TYPE] + srcs = depset(transitive=[depset(clutz_js_externs), js.srcs]) + args = ["-o", js_typings.path] + for src in srcs.to_list(): + args.append(src.path) + if getattr(ctx.attr, "clutz_entry_points", None): + args.append("--closure_entry_points") + args.extend(ctx.attr.clutz_entry_points) + ctx.actions.run( + inputs=srcs, + outputs=[js_typings], + executable=ctx.executable._clutz, + arguments=args, + mnemonic="Clutz", + progress_message="Running Clutz on %d JS files %s" % ( + len(srcs.to_list()), ctx.label)) + return js_typings + +################################################################################ +# The following definitions are for API compatibility with internal deprecated_clutz.bzl + +DEPRECATED_CLUTZ_OUTPUTS = {} + +def _clutz_aspect_impl(target, ctx): + return struct() + +deprecated_clutz_aspect = aspect( + implementation=_clutz_aspect_impl, + attr_aspects=["exports"]) diff --git a/saved_models/tensorboard/third_party/fonts.bzl b/saved_models/tensorboard/third_party/fonts.bzl new file mode 100644 index 0000000000000000000000000000000000000000..7136dd184e033b391e0edf047b37e8f7b2eb48ad --- /dev/null +++ b/saved_models/tensorboard/third_party/fonts.bzl @@ -0,0 +1,916 @@ +# Copyright 2017 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the 'License'); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an 'AS IS' BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load("@io_bazel_rules_closure//closure:defs.bzl", "filegroup_external") + +def tensorboard_fonts_workspace(): + """Downloads TensorBoard fonts.""" + + # bazel run //tensorboard/tools:import_google_fonts -- --url='https://fonts.googleapis.com/css?family=Roboto:400,300,300italic,400italic,500,500italic,700,700italic;https://fonts.googleapis.com/css?family=Roboto+Mono:400,700' + filegroup_external( + name = "com_google_fonts_roboto", + licenses = ["notice"], # Apache 2.0 + sha256_urls = { + "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/roboto/ba03b84b90b50afd99f9688059447bc545e5c0e1/LICENSE", + "https://raw.githubusercontent.com/google/roboto/ba03b84b90b50afd99f9688059447bc545e5c0e1/LICENSE", + ], + # Roboto (cyrillic) + "41720926981ffb6dc229f06fc0bbf0f43e45ba032d126726ebee481c2a6559e2": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/uYECMKoHcO9x1wdmbyHIm3-_kf6ByYO6CLYdB4HQE-Y.woff2", + "https://fonts.gstatic.com/s/roboto/v18/uYECMKoHcO9x1wdmbyHIm3-_kf6ByYO6CLYdB4HQE-Y.woff2", + ], + # Roboto (cyrillic-ext) + "90a0ad0b48861588a6e33a5905b17e1219ea87ab6f07ccc41e7c2cddf38967a8": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/sTdaA6j0Psb920Vjv-mrzH-_kf6ByYO6CLYdB4HQE-Y.woff2", + "https://fonts.gstatic.com/s/roboto/v18/sTdaA6j0Psb920Vjv-mrzH-_kf6ByYO6CLYdB4HQE-Y.woff2", + ], + # Roboto (greek) + "949e287846b0940817e4ea0f65accc4481a46b8733dc12aa0265293a4645c661": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/_VYFx-s824kXq_Ul2BHqYH-_kf6ByYO6CLYdB4HQE-Y.woff2", + "https://fonts.gstatic.com/s/roboto/v18/_VYFx-s824kXq_Ul2BHqYH-_kf6ByYO6CLYdB4HQE-Y.woff2", + ], + # Roboto (greek-ext) + "e5b2e29a16d8ef4c5a123b40786af72da589c4aad634eab40d90eef8bb4418aa": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/tnj4SB6DNbdaQnsM8CFqBX-_kf6ByYO6CLYdB4HQE-Y.woff2", + "https://fonts.gstatic.com/s/roboto/v18/tnj4SB6DNbdaQnsM8CFqBX-_kf6ByYO6CLYdB4HQE-Y.woff2", + ], + # Roboto (latin) + "4352380f92ce7f9a4a4a23306b992bed10055dbfffe90987cc72083e583fc280": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2", + "https://fonts.gstatic.com/s/roboto/v18/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2", + ], + # Roboto (latin-ext) + "80fa23b4804621ce7f16b5c56d524dd90ea09d792622eeac9adf0ee6317b9e3a": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/Ks_cVxiCiwUWVsFWFA3Bjn-_kf6ByYO6CLYdB4HQE-Y.woff2", + "https://fonts.gstatic.com/s/roboto/v18/Ks_cVxiCiwUWVsFWFA3Bjn-_kf6ByYO6CLYdB4HQE-Y.woff2", + ], + # Roboto (vietnamese) + "a0a893b2ff1c82d49ac0c09ace71cf8178c0830f6a988103c779b6fc12c0da78": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/NJ4vxlgWwWbEsv18dAhqnn-_kf6ByYO6CLYdB4HQE-Y.woff2", + "https://fonts.gstatic.com/s/roboto/v18/NJ4vxlgWwWbEsv18dAhqnn-_kf6ByYO6CLYdB4HQE-Y.woff2", + ], + # Roboto Bold (cyrillic) + "6082aa2f5aab855120cd58f560f58975579097c484d23cc7854977a529f91bc4": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/isZ-wbCXNKAbnjo6_TwHToX0hVgzZQUfRDuZrPvH3D8.woff2", + "https://fonts.gstatic.com/s/roboto/v18/isZ-wbCXNKAbnjo6_TwHToX0hVgzZQUfRDuZrPvH3D8.woff2", + ], + # Roboto Bold (cyrillic-ext) + "616eb767627d16bef2b9be2218bb5f1bbbb97cfbd06c4e5241c8b532b56467aa": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/77FXFjRbGzN4aCrSFhlh3oX0hVgzZQUfRDuZrPvH3D8.woff2", + "https://fonts.gstatic.com/s/roboto/v18/77FXFjRbGzN4aCrSFhlh3oX0hVgzZQUfRDuZrPvH3D8.woff2", + ], + # Roboto Bold (greek) + "28959a3f1fea0c7f7feca26f92465f5263f2e8fdec17030e0e7a9e6a8cb321af": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/jSN2CGVDbcVyCnfJfjSdfIX0hVgzZQUfRDuZrPvH3D8.woff2", + "https://fonts.gstatic.com/s/roboto/v18/jSN2CGVDbcVyCnfJfjSdfIX0hVgzZQUfRDuZrPvH3D8.woff2", + ], + # Roboto Bold (greek-ext) + "e94a5635cb68464d332cd374fd57b95913fc5b549f1967fbb73829b2084efd98": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/UX6i4JxQDm3fVTc1CPuwqoX0hVgzZQUfRDuZrPvH3D8.woff2", + "https://fonts.gstatic.com/s/roboto/v18/UX6i4JxQDm3fVTc1CPuwqoX0hVgzZQUfRDuZrPvH3D8.woff2", + ], + # Roboto Bold (latin) + "1be216dbc059d96e288b0c1f399a1a80ee8c65e4c1272dbc4574bd6d23cf45d9": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2", + "https://fonts.gstatic.com/s/roboto/v18/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2", + ], + # Roboto Bold (latin-ext) + "6c8be972381d4da037f47c33ef1e31b88f0130ded1432730d4d792331f983839": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/97uahxiqZRoncBaCEI3aW4X0hVgzZQUfRDuZrPvH3D8.woff2", + "https://fonts.gstatic.com/s/roboto/v18/97uahxiqZRoncBaCEI3aW4X0hVgzZQUfRDuZrPvH3D8.woff2", + ], + # Roboto Bold (vietnamese) + "5f162f1ca2441cae368e97ed42b56332d7b68b1ffbbf9f7e4b648420667acee5": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/PwZc-YbIL414wB9rB1IAPYX0hVgzZQUfRDuZrPvH3D8.woff2", + "https://fonts.gstatic.com/s/roboto/v18/PwZc-YbIL414wB9rB1IAPYX0hVgzZQUfRDuZrPvH3D8.woff2", + ], + # Roboto Bold Italic (cyrillic) + "bb4e478b0fe2ae7fbd6369c94d126060ffa697df189d7f3653f23f521f906cd8": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/t6Nd4cfPRhZP44Q5QAjcC14sYYdJg5dU2qzJEVSuta0.woff2", + "https://fonts.gstatic.com/s/roboto/v18/t6Nd4cfPRhZP44Q5QAjcC14sYYdJg5dU2qzJEVSuta0.woff2", + ], + # Roboto Bold Italic (cyrillic-ext) + "9fc911647b05ecdbadfe6693d6ff306a0a34829999b2055ad2e474e3ad0b778d": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/t6Nd4cfPRhZP44Q5QAjcC_ZraR2Tg8w2lzm7kLNL0-w.woff2", + "https://fonts.gstatic.com/s/roboto/v18/t6Nd4cfPRhZP44Q5QAjcC_ZraR2Tg8w2lzm7kLNL0-w.woff2", + ], + # Roboto Bold Italic (greek) + "62509e2b63168ae83848cb3f76d2c47177de8618ac918af119cc7ae90c71213b": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/t6Nd4cfPRhZP44Q5QAjcCwt_Rm691LTebKfY2ZkKSmI.woff2", + "https://fonts.gstatic.com/s/roboto/v18/t6Nd4cfPRhZP44Q5QAjcCwt_Rm691LTebKfY2ZkKSmI.woff2", + ], + # Roboto Bold Italic (greek-ext) + "07a2e7b4a480176f0f0bc9f7ca757d8467bf41f86e3b1eed374be06ff1b51b56": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/t6Nd4cfPRhZP44Q5QAjcC1BW26QxpSj-_ZKm_xT4hWw.woff2", + "https://fonts.gstatic.com/s/roboto/v18/t6Nd4cfPRhZP44Q5QAjcC1BW26QxpSj-_ZKm_xT4hWw.woff2", + ], + # Roboto Bold Italic (latin) + "556e09ad66d48078d2ea341eff36e93dafdb56fed15e9d92e052a7cb3910e2e9": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/t6Nd4cfPRhZP44Q5QAjcC4gp9Q8gbYrhqGlRav_IXfk.woff2", + "https://fonts.gstatic.com/s/roboto/v18/t6Nd4cfPRhZP44Q5QAjcC4gp9Q8gbYrhqGlRav_IXfk.woff2", + ], + # Roboto Bold Italic (latin-ext) + "5f6115b8655a4e9e0bb6440956b2d7b7d52e90193c6be53731fcf97d1fc45ec3": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/t6Nd4cfPRhZP44Q5QAjcC6E8kM4xWR1_1bYURRojRGc.woff2", + "https://fonts.gstatic.com/s/roboto/v18/t6Nd4cfPRhZP44Q5QAjcC6E8kM4xWR1_1bYURRojRGc.woff2", + ], + # Roboto Bold Italic (vietnamese) + "b75ce2f4333ea21c1d0aeb0061edcf81b7fffe022a732dae52834a8b62615c5f": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/t6Nd4cfPRhZP44Q5QAjcC9DiNsR5a-9Oe_Ivpu8XWlY.woff2", + "https://fonts.gstatic.com/s/roboto/v18/t6Nd4cfPRhZP44Q5QAjcC9DiNsR5a-9Oe_Ivpu8XWlY.woff2", + ], + # Roboto Italic (cyrillic) + "38602b65e115ae1b267627d5533c2607f446aba939b9ca9143cc4373bd285b83": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/OpXUqTo0UgQQhGj_SFdLWBkAz4rYn47Zy2rvigWQf6w.woff2", + "https://fonts.gstatic.com/s/roboto/v18/OpXUqTo0UgQQhGj_SFdLWBkAz4rYn47Zy2rvigWQf6w.woff2", + ], + # Roboto Italic (cyrillic-ext) + "d04ce842e235d3e6abfcd37d6598138007f56e391a035167d78edf9088d3035a": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/WxrXJa0C3KdtC7lMafG4dRkAz4rYn47Zy2rvigWQf6w.woff2", + "https://fonts.gstatic.com/s/roboto/v18/WxrXJa0C3KdtC7lMafG4dRkAz4rYn47Zy2rvigWQf6w.woff2", + ], + # Roboto Italic (greek) + "aa9a8db3e6de8124291c3f2fd0bbd0aca8c796f365204d78414536067115be07": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/cDKhRaXnQTOVbaoxwdOr9xkAz4rYn47Zy2rvigWQf6w.woff2", + "https://fonts.gstatic.com/s/roboto/v18/cDKhRaXnQTOVbaoxwdOr9xkAz4rYn47Zy2rvigWQf6w.woff2", + ], + # Roboto Italic (greek-ext) + "785896def5be5b35967d63f5589ce67fc8d3b452153a37323a4d9b886d828c60": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/1hZf02POANh32k2VkgEoUBkAz4rYn47Zy2rvigWQf6w.woff2", + "https://fonts.gstatic.com/s/roboto/v18/1hZf02POANh32k2VkgEoUBkAz4rYn47Zy2rvigWQf6w.woff2", + ], + # Roboto Italic (latin) + "64565561ddb338a11ffce5b84aa53fa6e8fd203c34208e61eb5602cd08bf527f": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/vPcynSL0qHq_6dX7lKVByXYhjbSpvc47ee6xR_80Hnw.woff2", + "https://fonts.gstatic.com/s/roboto/v18/vPcynSL0qHq_6dX7lKVByXYhjbSpvc47ee6xR_80Hnw.woff2", + ], + # Roboto Italic (latin-ext) + "d5b2d7e9efe90feef0c4507d90b2b4e464c6929efd05ad4294d3d5057db57b97": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/vSzulfKSK0LLjjfeaxcREhkAz4rYn47Zy2rvigWQf6w.woff2", + "https://fonts.gstatic.com/s/roboto/v18/vSzulfKSK0LLjjfeaxcREhkAz4rYn47Zy2rvigWQf6w.woff2", + ], + # Roboto Italic (vietnamese) + "5d875731e35140f94bc4cb23944d104688d3c6d372833ddae8d22d3aa802beb4": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/K23cxWVTrIFD6DJsEVi07RkAz4rYn47Zy2rvigWQf6w.woff2", + "https://fonts.gstatic.com/s/roboto/v18/K23cxWVTrIFD6DJsEVi07RkAz4rYn47Zy2rvigWQf6w.woff2", + ], + # Roboto Light (cyrillic) + "cb94537350a4c593515c0b9066a22f0d74284173b88521c50b894a3179402e46": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/Fl4y0QdOxyyTHEGMXX8kcYX0hVgzZQUfRDuZrPvH3D8.woff2", + "https://fonts.gstatic.com/s/roboto/v18/Fl4y0QdOxyyTHEGMXX8kcYX0hVgzZQUfRDuZrPvH3D8.woff2", + ], + # Roboto Light (cyrillic-ext) + "66a095c96771a94d2772c7e19a32c6585d4bed3a989faa9e595bb270a2621608": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/0eC6fl06luXEYWpBSJvXCIX0hVgzZQUfRDuZrPvH3D8.woff2", + "https://fonts.gstatic.com/s/roboto/v18/0eC6fl06luXEYWpBSJvXCIX0hVgzZQUfRDuZrPvH3D8.woff2", + ], + # Roboto Light (greek) + "f0e3a88ae70245bcac12d2640792e50a165ce618d3b5979b735913e582d204f7": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/I3S1wsgSg9YCurV6PUkTOYX0hVgzZQUfRDuZrPvH3D8.woff2", + "https://fonts.gstatic.com/s/roboto/v18/I3S1wsgSg9YCurV6PUkTOYX0hVgzZQUfRDuZrPvH3D8.woff2", + ], + # Roboto Light (greek-ext) + "40a162d49fd25da223ea81454616f469270020fc186fe2f109534fb1f72e1bcb": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/-L14Jk06m6pUHB-5mXQQnYX0hVgzZQUfRDuZrPvH3D8.woff2", + "https://fonts.gstatic.com/s/roboto/v18/-L14Jk06m6pUHB-5mXQQnYX0hVgzZQUfRDuZrPvH3D8.woff2", + ], + # Roboto Light (latin) + "f7c386915e39d8a925fe10d15744a9da95ac8f90423e12728e7fc3c5e34f4559": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/Hgo13k-tfSpn0qi1SFdUfZBw1xU1rKptJj_0jans920.woff2", + "https://fonts.gstatic.com/s/roboto/v18/Hgo13k-tfSpn0qi1SFdUfZBw1xU1rKptJj_0jans920.woff2", + ], + # Roboto Light (latin-ext) + "bbeeb150a0f72cbd898ba36ed908bb95ef2386d41158c943aa3af4e0c8430639": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/Pru33qjShpZSmG3z6VYwnYX0hVgzZQUfRDuZrPvH3D8.woff2", + "https://fonts.gstatic.com/s/roboto/v18/Pru33qjShpZSmG3z6VYwnYX0hVgzZQUfRDuZrPvH3D8.woff2", + ], + # Roboto Light (vietnamese) + "5a4e99d1db8c9fd38f6b1c92582c2351cf27075f5ccef89404a8d673fa8e7b26": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/NYDWBdD4gIq26G5XYbHsFIX0hVgzZQUfRDuZrPvH3D8.woff2", + "https://fonts.gstatic.com/s/roboto/v18/NYDWBdD4gIq26G5XYbHsFIX0hVgzZQUfRDuZrPvH3D8.woff2", + ], + # Roboto Light Italic (cyrillic) + "4160dc56c5afc7320243a73cdf025d1c64ea19e035b98bad9c170e37c98ee5e2": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/7m8l7TlFO-S3VkhHuR0at14sYYdJg5dU2qzJEVSuta0.woff2", + "https://fonts.gstatic.com/s/roboto/v18/7m8l7TlFO-S3VkhHuR0at14sYYdJg5dU2qzJEVSuta0.woff2", + ], + # Roboto Light Italic (cyrillic-ext) + "d95d953cff5e309f22a680e48981070d2cbebf75daba25b078834bf0c4f143e4": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/7m8l7TlFO-S3VkhHuR0at_ZraR2Tg8w2lzm7kLNL0-w.woff2", + "https://fonts.gstatic.com/s/roboto/v18/7m8l7TlFO-S3VkhHuR0at_ZraR2Tg8w2lzm7kLNL0-w.woff2", + ], + # Roboto Light Italic (greek) + "8d649207dfd9e6f53614ee7ee8e0865789e38b39244ab1546ee5117ab6f6ed2f": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/7m8l7TlFO-S3VkhHuR0atwt_Rm691LTebKfY2ZkKSmI.woff2", + "https://fonts.gstatic.com/s/roboto/v18/7m8l7TlFO-S3VkhHuR0atwt_Rm691LTebKfY2ZkKSmI.woff2", + ], + # Roboto Light Italic (greek-ext) + "a1153c52da99d21ed2f036e5849c3b2a5d7d3d5913d63ceac983d388288420b4": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/7m8l7TlFO-S3VkhHuR0at1BW26QxpSj-_ZKm_xT4hWw.woff2", + "https://fonts.gstatic.com/s/roboto/v18/7m8l7TlFO-S3VkhHuR0at1BW26QxpSj-_ZKm_xT4hWw.woff2", + ], + # Roboto Light Italic (latin) + "c4fc2fd6457f67718ccff3434f39a84a83be98defa8e23ac1942580ea53a925e": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/7m8l7TlFO-S3VkhHuR0at4gp9Q8gbYrhqGlRav_IXfk.woff2", + "https://fonts.gstatic.com/s/roboto/v18/7m8l7TlFO-S3VkhHuR0at4gp9Q8gbYrhqGlRav_IXfk.woff2", + ], + # Roboto Light Italic (latin-ext) + "fd5b96eb1adc32b3fd7823f6a9e3c14122a060d5665091c33d9243f2541b016c": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/7m8l7TlFO-S3VkhHuR0at6E8kM4xWR1_1bYURRojRGc.woff2", + "https://fonts.gstatic.com/s/roboto/v18/7m8l7TlFO-S3VkhHuR0at6E8kM4xWR1_1bYURRojRGc.woff2", + ], + # Roboto Light Italic (vietnamese) + "ced9470e7e60d5edeccf4d3a0ab2f57ef653ec9de3097e6950bc06c64157aa5a": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/7m8l7TlFO-S3VkhHuR0at9DiNsR5a-9Oe_Ivpu8XWlY.woff2", + "https://fonts.gstatic.com/s/roboto/v18/7m8l7TlFO-S3VkhHuR0at9DiNsR5a-9Oe_Ivpu8XWlY.woff2", + ], + # Roboto Medium (cyrillic) + "74f08a5b16db96fd23eeca2c2e6c354d08a95b3360aa2bb6ea0890517bb10469": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/oHi30kwQWvpCWqAhzHcCSIX0hVgzZQUfRDuZrPvH3D8.woff2", + "https://fonts.gstatic.com/s/roboto/v18/oHi30kwQWvpCWqAhzHcCSIX0hVgzZQUfRDuZrPvH3D8.woff2", + ], + # Roboto Medium (cyrillic-ext) + "2aa57d00d0cac3b30aef28a19e9cfea12b45daf9562b4fa623750c8145c0767b": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/ZLqKeelYbATG60EpZBSDy4X0hVgzZQUfRDuZrPvH3D8.woff2", + "https://fonts.gstatic.com/s/roboto/v18/ZLqKeelYbATG60EpZBSDy4X0hVgzZQUfRDuZrPvH3D8.woff2", + ], + # Roboto Medium (greek) + "b95a36dd1483f97002a0c8aba87106f7fefbd67f22bc25a2bf21352bb4f316ef": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/mx9Uck6uB63VIKFYnEMXrYX0hVgzZQUfRDuZrPvH3D8.woff2", + "https://fonts.gstatic.com/s/roboto/v18/mx9Uck6uB63VIKFYnEMXrYX0hVgzZQUfRDuZrPvH3D8.woff2", + ], + # Roboto Medium (greek-ext) + "399cdbc9a94414d94fb15b0386888c6bc8ce4d6140cc3a9a571406a76cf47bb5": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/rGvHdJnr2l75qb0YND9NyIX0hVgzZQUfRDuZrPvH3D8.woff2", + "https://fonts.gstatic.com/s/roboto/v18/rGvHdJnr2l75qb0YND9NyIX0hVgzZQUfRDuZrPvH3D8.woff2", + ], + # Roboto Medium (latin) + "b79781efede37903be212fcdf63955e41c8649e678b6b83adf824459d240a188": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2", + "https://fonts.gstatic.com/s/roboto/v18/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2", + ], + # Roboto Medium (latin-ext) + "ba99e38768dd8358450dc363431400b1642c7cd7e5b47830e30aa8ec80fb4790": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/oOeFwZNlrTefzLYmlVV1UIX0hVgzZQUfRDuZrPvH3D8.woff2", + "https://fonts.gstatic.com/s/roboto/v18/oOeFwZNlrTefzLYmlVV1UIX0hVgzZQUfRDuZrPvH3D8.woff2", + ], + # Roboto Medium (vietnamese) + "e785fcb2332a43e5f489c0e7457001a93800b459bdf5173cffbb880f350077eb": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/mbmhprMH69Zi6eEPBYVFhYX0hVgzZQUfRDuZrPvH3D8.woff2", + "https://fonts.gstatic.com/s/roboto/v18/mbmhprMH69Zi6eEPBYVFhYX0hVgzZQUfRDuZrPvH3D8.woff2", + ], + # Roboto Medium Italic (cyrillic) + "e9f24fd84cfbdad488d4f05d97ca2e009af8248044def329f0c78c04e12c32cb": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/OLffGBTaF0XFOW1gnuHF0V4sYYdJg5dU2qzJEVSuta0.woff2", + "https://fonts.gstatic.com/s/roboto/v18/OLffGBTaF0XFOW1gnuHF0V4sYYdJg5dU2qzJEVSuta0.woff2", + ], + # Roboto Medium Italic (cyrillic-ext) + "ecfda0e4317641a395971d71435ad1a3dce0499bccc9bcdcaaebffb714588a4e": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/OLffGBTaF0XFOW1gnuHF0fZraR2Tg8w2lzm7kLNL0-w.woff2", + "https://fonts.gstatic.com/s/roboto/v18/OLffGBTaF0XFOW1gnuHF0fZraR2Tg8w2lzm7kLNL0-w.woff2", + ], + # Roboto Medium Italic (greek) + "510c1001aa3c1ae574eba6eaa5a404414dd0f5d5cd8c213fe0fac404c1fbbd7c": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/OLffGBTaF0XFOW1gnuHF0Qt_Rm691LTebKfY2ZkKSmI.woff2", + "https://fonts.gstatic.com/s/roboto/v18/OLffGBTaF0XFOW1gnuHF0Qt_Rm691LTebKfY2ZkKSmI.woff2", + ], + # Roboto Medium Italic (greek-ext) + "e5343e5d46125f688c2f266369983a1f92dbefa8d16f131b09768cdd4a5cebd4": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/OLffGBTaF0XFOW1gnuHF0VBW26QxpSj-_ZKm_xT4hWw.woff2", + "https://fonts.gstatic.com/s/roboto/v18/OLffGBTaF0XFOW1gnuHF0VBW26QxpSj-_ZKm_xT4hWw.woff2", + ], + # Roboto Medium Italic (latin) + "76d779c16f21b55a95fb182bf7552447ee340d15556e53a99dd789383f6d8c32": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/OLffGBTaF0XFOW1gnuHF0Ygp9Q8gbYrhqGlRav_IXfk.woff2", + "https://fonts.gstatic.com/s/roboto/v18/OLffGBTaF0XFOW1gnuHF0Ygp9Q8gbYrhqGlRav_IXfk.woff2", + ], + # Roboto Medium Italic (latin-ext) + "a69b0c33d809b7aac3e9648bfc995bc38cd5e426efeb006dc3b31523f4867f73": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/OLffGBTaF0XFOW1gnuHF0aE8kM4xWR1_1bYURRojRGc.woff2", + "https://fonts.gstatic.com/s/roboto/v18/OLffGBTaF0XFOW1gnuHF0aE8kM4xWR1_1bYURRojRGc.woff2", + ], + # Roboto Medium Italic (vietnamese) + "2c94704be76a8ec87995f3427911e50987cfcaa13c5749c770419559fe836509": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/roboto/v18/OLffGBTaF0XFOW1gnuHF0dDiNsR5a-9Oe_Ivpu8XWlY.woff2", + "https://fonts.gstatic.com/s/roboto/v18/OLffGBTaF0XFOW1gnuHF0dDiNsR5a-9Oe_Ivpu8XWlY.woff2", + ], + # Roboto Mono (cyrillic) + "2c9fae8205ea404d8400b9731423d5f8261788efcb26b651ad1031c70c895824": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/robotomono/v5/hMqPNLsu_dywMa4C_DEpY14sYYdJg5dU2qzJEVSuta0.woff2", + "https://fonts.gstatic.com/s/robotomono/v5/hMqPNLsu_dywMa4C_DEpY14sYYdJg5dU2qzJEVSuta0.woff2", + ], + # Roboto Mono (cyrillic-ext) + "671d1df350d3ccfd9a5ebbc9e92810a274d6215a648099f0f6e3e256b2bdae02": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/robotomono/v5/hMqPNLsu_dywMa4C_DEpY_ZraR2Tg8w2lzm7kLNL0-w.woff2", + "https://fonts.gstatic.com/s/robotomono/v5/hMqPNLsu_dywMa4C_DEpY_ZraR2Tg8w2lzm7kLNL0-w.woff2", + ], + # Roboto Mono (greek) + "eb84188b287e62e965be53c788b6562554cefcc0a3520f792ba91bb60d40e607": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/robotomono/v5/hMqPNLsu_dywMa4C_DEpYwt_Rm691LTebKfY2ZkKSmI.woff2", + "https://fonts.gstatic.com/s/robotomono/v5/hMqPNLsu_dywMa4C_DEpYwt_Rm691LTebKfY2ZkKSmI.woff2", + ], + # Roboto Mono (greek-ext) + "978a5db5af1654146da5ec93980c273df7010a2d045f1360ac3b9d85bd890299": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/robotomono/v5/hMqPNLsu_dywMa4C_DEpY1BW26QxpSj-_ZKm_xT4hWw.woff2", + "https://fonts.gstatic.com/s/robotomono/v5/hMqPNLsu_dywMa4C_DEpY1BW26QxpSj-_ZKm_xT4hWw.woff2", + ], + # Roboto Mono (latin) + "ecc28128233f90171df8f8915d60cdc59ff70b9194e1d93061816d3e3cd1f320": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/robotomono/v5/hMqPNLsu_dywMa4C_DEpY4gp9Q8gbYrhqGlRav_IXfk.woff2", + "https://fonts.gstatic.com/s/robotomono/v5/hMqPNLsu_dywMa4C_DEpY4gp9Q8gbYrhqGlRav_IXfk.woff2", + ], + # Roboto Mono (latin-ext) + "9a7b6e1f38e9a47867ad5c2f403ff4f4477a03bbec300d4e345bf67d5d0da262": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/robotomono/v5/hMqPNLsu_dywMa4C_DEpY6E8kM4xWR1_1bYURRojRGc.woff2", + "https://fonts.gstatic.com/s/robotomono/v5/hMqPNLsu_dywMa4C_DEpY6E8kM4xWR1_1bYURRojRGc.woff2", + ], + # Roboto Mono (vietnamese) + "b568a2d630d5924e40b73489cc4a8720fb9fb0249b8117d6d45cfc95d249c1da": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/robotomono/v5/hMqPNLsu_dywMa4C_DEpY9DiNsR5a-9Oe_Ivpu8XWlY.woff2", + "https://fonts.gstatic.com/s/robotomono/v5/hMqPNLsu_dywMa4C_DEpY9DiNsR5a-9Oe_Ivpu8XWlY.woff2", + ], + # Roboto Mono Bold (cyrillic) + "656e4cb0b042d18f6b889948f3c9a1f87b70340bd20a38a0d738b0e32a7f00ee": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/robotomono/v5/N4duVc9C58uwPiY8_59Fz1x-M1I1w5OMiqnVF8xBLhU.woff2", + "https://fonts.gstatic.com/s/robotomono/v5/N4duVc9C58uwPiY8_59Fz1x-M1I1w5OMiqnVF8xBLhU.woff2", + ], + # Roboto Mono Bold (cyrillic-ext) + "0d5221a5f914d57a674049b718a37b8f09a0e79647af8b187273f35ab0d8376c": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/robotomono/v5/N4duVc9C58uwPiY8_59FzwXaAXup5mZlfK6xRLrhsco.woff2", + "https://fonts.gstatic.com/s/robotomono/v5/N4duVc9C58uwPiY8_59FzwXaAXup5mZlfK6xRLrhsco.woff2", + ], + # Roboto Mono Bold (greek) + "41553f58ea074adde7eaaefe9b220b49021128f6b68b8be384072c4db430603f": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/robotomono/v5/N4duVc9C58uwPiY8_59Fzwn6Wqxo-xwxilDXPU8chVU.woff2", + "https://fonts.gstatic.com/s/robotomono/v5/N4duVc9C58uwPiY8_59Fzwn6Wqxo-xwxilDXPU8chVU.woff2", + ], + # Roboto Mono Bold (greek-ext) + "27798d63b7fadca6c6a2d17ea7673855d44baf75e8172fa9749888898ce04125": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/robotomono/v5/N4duVc9C58uwPiY8_59Fz1T7aJLK6nKpn36IMwTcMMc.woff2", + "https://fonts.gstatic.com/s/robotomono/v5/N4duVc9C58uwPiY8_59Fz1T7aJLK6nKpn36IMwTcMMc.woff2", + ], + # Roboto Mono Bold (latin) + "8b827f046df0acf54d80954ae05f0b5e87fdf09bc4c1bf02e8edb0d928e259b7": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/robotomono/v5/N4duVc9C58uwPiY8_59Fz_79_ZuUxCigM2DespTnFaw.woff2", + "https://fonts.gstatic.com/s/robotomono/v5/N4duVc9C58uwPiY8_59Fz_79_ZuUxCigM2DespTnFaw.woff2", + ], + # Roboto Mono Bold (latin-ext) + "b38383e889863e1c25c2334087e6b00835cef283f8448c8b2a2d5d51489d202b": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/robotomono/v5/N4duVc9C58uwPiY8_59Fz4gd9OEPUCN3AdYW0e8tat4.woff2", + "https://fonts.gstatic.com/s/robotomono/v5/N4duVc9C58uwPiY8_59Fz4gd9OEPUCN3AdYW0e8tat4.woff2", + ], + # Roboto Mono Bold (vietnamese) + "03b9c55ee9bf53c57c9b9dcb739bc92ada5b97fc81deb5a57e4e8347c4eee8bb": [ + "http://mirror.tensorflow.org/fonts.gstatic.com/s/robotomono/v5/N4duVc9C58uwPiY8_59Fz8bIQSYZnWLaWC9QNCpTK_U.woff2", + "https://fonts.gstatic.com/s/robotomono/v5/N4duVc9C58uwPiY8_59Fz8bIQSYZnWLaWC9QNCpTK_U.woff2", + ], + }, + generated_rule_name = "files", + extra_build_file_content = "\n".join([ + 'load("@io_bazel_rules_closure//closure:defs.bzl", "web_library")', + '', + 'licenses(["notice"]) # Apache 2.0', + '', + 'exports_files(["LICENSE"]) # Apache 2.0', + '', + 'web_library(', + ' name = "com_google_fonts_roboto",', + ' path = "/font-roboto",', + ' srcs = [', + ' "roboto.html",', + ' ":files",', + ' ],', + ')', + '', + 'genrule(', + ' name = "html",', + ' outs = ["roboto.html"],', + ' cmd = "\\n".join([', + ' "cat <<\'EOF\' >$@",', + " '',", + " '',", + " '',", + " '',", + ' "EOF",', + ' ]),', + ')', + ]), + ) diff --git a/saved_models/tensorboard/third_party/html5lib.BUILD b/saved_models/tensorboard/third_party/html5lib.BUILD new file mode 100644 index 0000000000000000000000000000000000000000..51be9a9bb2ee51002d2908ffa2d3b1275d736a5a --- /dev/null +++ b/saved_models/tensorboard/third_party/html5lib.BUILD @@ -0,0 +1,53 @@ +# Description: +# Import of html5lib library. + +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) # BSD-like notice-style license, see LICENSE file + +exports_files(["LICENSE"]) + +py_library( + name = "org_html5lib", + srcs = [ + "html5lib/__init__.py", + "html5lib/_ihatexml.py", + "html5lib/_inputstream.py", + "html5lib/_tokenizer.py", + "html5lib/_trie/__init__.py", + "html5lib/_trie/_base.py", + "html5lib/_trie/datrie.py", + "html5lib/_trie/py.py", + "html5lib/_utils.py", + "html5lib/constants.py", + "html5lib/filters/__init__.py", + "html5lib/filters/alphabeticalattributes.py", + "html5lib/filters/base.py", + "html5lib/filters/inject_meta_charset.py", + "html5lib/filters/lint.py", + "html5lib/filters/optionaltags.py", + "html5lib/filters/sanitizer.py", + "html5lib/filters/whitespace.py", + "html5lib/html5parser.py", + "html5lib/serializer.py", + "html5lib/treeadapters/__init__.py", + "html5lib/treeadapters/genshi.py", + "html5lib/treeadapters/sax.py", + "html5lib/treebuilders/__init__.py", + "html5lib/treebuilders/base.py", + "html5lib/treebuilders/dom.py", + "html5lib/treebuilders/etree.py", + "html5lib/treebuilders/etree_lxml.py", + "html5lib/treewalkers/__init__.py", + "html5lib/treewalkers/base.py", + "html5lib/treewalkers/dom.py", + "html5lib/treewalkers/etree.py", + "html5lib/treewalkers/etree_lxml.py", + "html5lib/treewalkers/genshi.py", + ], + srcs_version = "PY2AND3", + deps = [ + "@org_pythonhosted_six", + "@org_pythonhosted_webencodings", + ], +) diff --git a/saved_models/tensorboard/third_party/js.bzl b/saved_models/tensorboard/third_party/js.bzl new file mode 100644 index 0000000000000000000000000000000000000000..47b927322cf8351e48c49879890e3384140a158c --- /dev/null +++ b/saved_models/tensorboard/third_party/js.bzl @@ -0,0 +1,629 @@ +# Copyright 2017 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the 'License'); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an 'AS IS' BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +TensorBoard external JS dependencies (both infrastructure and frontend libs) +""" + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +load("@io_bazel_rules_closure//closure:defs.bzl", "filegroup_external", "web_library_external") + +def tensorboard_js_workspace(): + """TensorBoard JavaScript dependencies.""" + + ############################################################################## + # TensorBoard Build Tools + + filegroup_external( + name = "org_nodejs", + # MIT with portions licensed: + # - MIT + # - Old MIT + # - 2-Clause-BSD + # - 3-Clause-BSD + # - ISC + # - Unicode + # - zlib + # - Artistic 2.0 + licenses = ["notice"], + sha256_urls_extract_macos = { + "910395e1e98fb351c62b5702a9deef22aaecf05d6df1d7edc283337542207f3f": [ + "http://mirror.tensorflow.org/nodejs.org/dist/v6.9.1/node-v6.9.1-darwin-x64.tar.xz", + "http://nodejs.org/dist/v6.9.1/node-v6.9.1-darwin-x64.tar.xz", + ], + }, + sha256_urls_windows = { + "1914bfb950be8d576ce9e49c8a0e51c9f2402560fe3c19093e69bc1306a56e9e": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/nodejs/node/v6.9.1/LICENSE", + "https://raw.githubusercontent.com/nodejs/node/v6.9.1/LICENSE", + ], + "513923b0490ebb7466a56483a62595814ed9d036d6f35476debb0cd606bec526": [ + "http://mirror.tensorflow.org/nodejs.org/dist/v6.9.1/win-x64/node.exe", + "http://nodejs.org/dist/v6.9.1/win-x64/node.exe", + ], + "3951aefa4afd6fb836ab06468b1fc2a69fa75bd66ec2f5a0e08c4e32547681e3": [ + "http://mirror.tensorflow.org/nodejs.org/dist/v6.9.1/win-x64/node.lib", + "http://nodejs.org/dist/v6.9.1/win-x64/node.lib", + ], + }, + sha256_urls_extract = { + "d4eb161e4715e11bbef816a6c577974271e2bddae9cf008744627676ff00036a": [ + "http://mirror.tensorflow.org/nodejs.org/dist/v6.9.1/node-v6.9.1-linux-x64.tar.xz", + "http://nodejs.org/dist/v6.9.1/node-v6.9.1-linux-x64.tar.xz", + ], + }, + sha256_urls_extract_ppc64le = { + "6f6362cba63c20eab4914c2983edd9699c1082792d0a35ef9c54d18b6c488e59": [ + "http://nodejs.org/dist/v6.9.1/node-v6.9.1-linux-ppc64le.tar.xz", + ], + }, + strip_prefix = { + "node-v6.9.1-darwin-x64.tar.xz": "node-v6.9.1-darwin-x64", + "node-v6.9.1-linux-x64.tar.xz": "node-v6.9.1-linux-x64", + "node-v6.9.1-linux-ppc64le.tar.xz": "node-v6.9.1-linux-ppc64le", + }, + executable = [ + "node", + "node.exe", + ], + ) + + filegroup_external( + name = "com_microsoft_typescript", + licenses = ["notice"], + sha256_urls = { + "a7d00bfd54525bc694b6e32f64c7ebcf5e6b7ae3657be5cc12767bce74654a47": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/Microsoft/TypeScript/v2.7.2/LICENSE.txt", + "https://raw.githubusercontent.com/Microsoft/TypeScript/v2.9.2/LICENSE.txt", + ], + "9632bfccde117a8c82690a324bc5c18c3869e9b89ac536fc134ba655d7ec1e98": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/Microsoft/TypeScript/v2.9.2/lib/tsc.js", + "https://raw.githubusercontent.com/Microsoft/TypeScript/v2.9.2/lib/tsc.js", + ], + "529c9f8b45939e0fa80950208bf80452ccb982b460cc25433813c919b67a3b2f": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/Microsoft/TypeScript/v2.9.2/lib/lib.es6.d.ts", + "https://raw.githubusercontent.com/Microsoft/TypeScript/v2.9.2/lib/lib.es6.d.ts", + ], + "f6e6efe57fb9fcf72eed013e2755d04505300f32b78577118ca5dacc85ec852d": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/Microsoft/TypeScript/v2.9.2/lib/lib.dom.d.ts", + "https://raw.githubusercontent.com/Microsoft/TypeScript/v2.9.2/lib/lib.dom.d.ts", + ], + }, + extra_build_file_content = "\n".join([ + "sh_binary(", + " name = \"tsc\",", + " srcs = [\"tsc.sh\"],", + " data = [", + " \"tsc.js\",", + " \"@org_nodejs\",", + " ],", + ")", + "", + "genrule(", + " name = \"tsc_sh\",", + " outs = [\"tsc.sh\"],", + " cmd = \"cat >$@ <<'EOF'\\n\" +", + " \"#!/bin/bash\\n\" +", + " \"NODE=external/org_nodejs/bin/node\\n\" +", + " \"if [[ -e external/org_nodejs/node.exe ]]; then\\n\" +", + " \" NODE=external/org_nodejs/node.exe\\n\" +", + " \"fi\\n\" +", + " \"exec $${NODE} external/com_microsoft_typescript/tsc.js \\\"$$@\\\"\\n\" +", + " \"EOF\",", + " executable = True,", + ")", + ]), + ) + + http_archive( + name = "io_angular_clutz", + build_file = str(Label("//third_party:clutz.BUILD")), + sha256 = "b3eee38fda6b942eaf99208f9714f033974308eaeebf2300f61c828a3e1a5879", + # An upgrade to io_bazel_rules_closure updated Closure compiler, which + # required Clutz upgrades that are not in any release. Thus, this is + # pinned to HEAD. + strip_prefix = "clutz-7ef7cdb156cd5f0359eb3b22b259d780e3ad825d", + urls = [ + "http://mirror.tensorflow.org/github.com/angular/clutz/archive/7ef7cdb156cd5f0359eb3b22b259d780e3ad825d.tar.gz", # 2019-10-23 + "https://github.com/angular/clutz/archive/7ef7cdb156cd5f0359eb3b22b259d780e3ad825d.tar.gz", + ], + ) + + filegroup_external( + name = "com_google_javascript_closure_compiler_externs", + licenses = ["notice"], + sha256_urls_extract = { + "4f0cc3cf9928905993072bdd1f81a4444bd8b7fff0a12f119e2dd2a9a68cdd82": [ + # tag v20190513 resolves to commit 938e347e4f79f4d7b124e160145b6ea3418b4c56 (2019-05-13 16:28:32 -0700) + "http://mirror.tensorflow.org/github.com/google/closure-compiler/archive/v20190513.tar.gz", + "https://github.com/google/closure-compiler/archive/v20190513.tar.gz", + ], + }, + strip_prefix = {"v20190513.tar.gz": "closure-compiler-20190513/externs"}, + ) + + filegroup_external( + name = "org_threejs", + # no @license header + licenses = ["notice"], # MIT + sha256_urls = { + "90f3af9ebfaf34f642b05f3baeeca2c5547d1b8ba6872803990c26804f4067b1": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/mrdoob/three.js/r108/LICENSE", + "https://raw.githubusercontent.com/mrdoob/three.js/r108/LICENSE", + ], + "545db828b1d52f926026d5f04f32dbc6f9ff7c62a2d8e2da9dfda09b155a490a": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/mrdoob/three.js/r108/build/three.js", + "https://raw.githubusercontent.com/mrdoob/three.js/r108/build/three.js", + ], + "cec663b016fb04c118ac7d6d1365eb9ad81567843e6c584ade4217d4adaf0ca0": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/mrdoob/three.js/r108/examples/js/controls/OrbitControls.js", + "https://raw.githubusercontent.com/mrdoob/three.js/r108/examples/js/controls/OrbitControls.js", + ], + }, + ) + + ############################################################################## + # TensorBoard JavaScript Production Dependencies + + web_library_external( + name = "com_lodash", + licenses = ["notice"], # MIT + sha256 = "6c5fa80d0fa9dc4eba634ab042404ff7c162dcb4cfe3473338801aeca0042285", + urls = [ + "http://mirror.tensorflow.org/github.com/lodash/lodash/archive/4.17.5.tar.gz", + "https://github.com/lodash/lodash/archive/4.17.5.tar.gz", + ], + strip_prefix = "lodash-4.17.5", + path = "/lodash", + srcs = ["lodash.js"], + extra_build_file_content = "exports_files([\"LICENSE\"])", + ) + + filegroup_external( + name = "com_numericjs", + # no @license header + licenses = ["notice"], # MIT + sha256_urls = { + "0e94aada97f12dee6118064add9170484c55022f5d53206ee4407143cd36ddcd": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/sloisel/numeric/v1.2.6/license.txt", + "https://raw.githubusercontent.com/sloisel/numeric/v1.2.6/license.txt", + ], + "5dcaba2016fd237091e3a17b0dc272fb21f0e2b15d7628f95a0ad0cd4cdf4020": [ + "http://mirror.tensorflow.org/cdnjs.cloudflare.com/ajax/libs/numeric/1.2.6/numeric.js", + "https://cdnjs.cloudflare.com/ajax/libs/numeric/1.2.6/numeric.js", + ], + }, + rename = {"numeric-1.2.6.js": "numeric.js"}, + ) + + filegroup_external( + name = "ai_google_pair_umap_js", + # no @license header + licenses = ["notice"], # Apache License 2.0 + sha256_urls = { + "035fede477f10b909dd64a2ea01c031149ee523f54fb9bbe48a170eb04d53825": [ + "http://mirror.tensorflow.org/unpkg.com/umap-js@1.2.2/lib/umap-js.min.js", + "https://unpkg.com/umap-js@1.2.2/lib/umap-js.min.js", + ], + }, + ) + + filegroup_external( + name = "com_palantir_plottable", + # no @license header + licenses = ["notice"], # MIT + sha256_urls_extract = { + # Plottable doesn't have a release tarball on GitHub. Using the + # sources directly from git also requires running Node tooling + # beforehand to generate files. NPM is the only place to get it. + "08df639782baf9b8cfeeb5fcdfbe3a1ce25b5a916903fc580e201a0a1142a6c4": [ + "http://mirror.tensorflow.org/registry.npmjs.org/plottable/-/plottable-3.7.0.tgz", + "https://registry.npmjs.org/plottable/-/plottable-3.7.0.tgz", + ], + }, + ) + + filegroup_external( + name = "io_github_cpettitt_dagre", + # no @license header + licenses = ["notice"], # MIT + sha256_urls = { + "6a349742a6cb219d5a2fc8d0844f6d89a6efc62e20c664450d884fc7ff2d6015": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/cpettitt/dagre/v0.8.2/LICENSE", + "https://raw.githubusercontent.com/cpettitt/dagre/v0.8.2/LICENSE", + ], + "43cb4e919196c177c149b63880d262074670af99db6a1e174b25e266da4935a9": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/cpettitt/dagre/v0.8.2/dist/dagre.core.js", + "https://raw.githubusercontent.com/cpettitt/dagre/v0.8.2/dist/dagre.core.js", + ], + }, + ) + + filegroup_external( + name = "io_github_cpettitt_graphlib", + licenses = ["notice"], # MIT + sha256_urls = { + "6a349742a6cb219d5a2fc8d0844f6d89a6efc62e20c664450d884fc7ff2d6015": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/cpettitt/graphlib/v2.1.5/LICENSE", + "https://raw.githubusercontent.com/cpettitt/graphlib/v2.1.5/LICENSE", + ], + "ddc33a6aaf955ee24b0e0d30110adf350c65eedc5c0f2c424ca85bc128199a66": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/cpettitt/graphlib/v2.1.5/dist/graphlib.core.js", + "https://raw.githubusercontent.com/cpettitt/graphlib/v2.1.5/dist/graphlib.core.js", + ], + }, + ) + + web_library_external( + name = "vaadin_vaadin_split_layout", + licenses = ["notice"], # Apache License 2.0 + sha256 = "44fb83628edb77cb8392c165d4d99734750a6fbb00e5391f033962e56f14eba3", + urls = [ + "http://mirror.tensorflow.org/github.com/vaadin/vaadin-split-layout/archive/v1.1.0.tar.gz", + "https://github.com/vaadin/vaadin-split-layout/archive/v1.1.0.tar.gz", + ], + srcs = ["vaadin-split-layout.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_resizable_behavior", + ], + strip_prefix = "vaadin-split-layout-1.1.0", + path = "/vaadin-split-layout", + ) + + web_library_external( + name = "vaadin_vaadin_grid", + licenses = ["notice"], # Apache License 2.0 + sha256 = "834679bedc1b6bafecac7e7f0e3458d99ace6cddbf154c56631ef6428b787fd1", + urls = [ + "http://mirror.tensorflow.org/github.com/vaadin/vaadin-grid/archive/v3.0.2.tar.gz", + "https://github.com/vaadin/vaadin-grid/archive/v3.0.2.tar.gz", + ], + glob = ["*.html"], + exclude = [ + "index.html", + ], + deps = [ + "@org_polymer_iron_resizable_behavior", + "@org_polymer_iron_scroll_target_behavior", + "@org_polymer_iron_a11y_keys_behavior", + "@org_polymer_iron_a11y_announcer", + "@org_polymer", + ], + strip_prefix = "vaadin-grid-3.0.2", + path = "/vaadin-grid", + ) + + ############################################################################## + # TensorBoard Testing Dependencies + + web_library_external( + name = "org_npmjs_registry_accessibility_developer_tools", + licenses = ["notice"], # Apache License 2.0 + sha256 = "1d6a72f401c9d53f68238c617dd43a05cd85ca5aa2e676a5b3c352711448e093", + urls = [ + "http://mirror.tensorflow.org/registry.npmjs.org/accessibility-developer-tools/-/accessibility-developer-tools-2.10.0.tgz", + "https://registry.npmjs.org/accessibility-developer-tools/-/accessibility-developer-tools-2.10.0.tgz", + ], + strip_prefix = "package", + path = "/accessibility-developer-tools", + suppress = ["strictDependencies"], + ) + + web_library_external( + name = "org_npmjs_registry_async", + licenses = ["notice"], # MIT + sha256 = "08655255ae810bf4d1cb1642df57658fcce823776d3ba8f4b46f4bbff6c87ece", + urls = [ + "http://mirror.tensorflow.org/registry.npmjs.org/async/-/async-1.5.0.tgz", + "https://registry.npmjs.org/async/-/async-1.5.0.tgz", + ], + strip_prefix = "package", + path = "/async", + ) + + web_library_external( + name = "org_npmjs_registry_chai", + licenses = ["notice"], # MIT + sha256 = "aca8137bed5bb295bd7173325b7ad604cd2aeb341d739232b4f9f0b26745be90", + urls = [ + "http://mirror.tensorflow.org/registry.npmjs.org/chai/-/chai-3.5.0.tgz", + "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", + ], + strip_prefix = "package", + path = "/chai", + ) + + web_library_external( + name = "org_npmjs_registry_mocha", + licenses = ["notice"], # MIT + sha256 = "13ef37a071196a2fba680799b906555d3f0ab61e80a7e8f73f93e77914590dd4", + urls = [ + "http://mirror.tensorflow.org/registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", + "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", + ], + suppress = ["strictDependencies"], + strip_prefix = "package", + path = "/mocha", + ) + + web_library_external( + name = "org_npmjs_registry_sinon", + licenses = ["notice"], # BSD-3-Clause + sha256 = "49edb057695fc9019aae992bf7e677a07de7c6ce2bf9f9facde4a245045d1532", + urls = [ + "http://mirror.tensorflow.org/registry.npmjs.org/sinon/-/sinon-1.17.4.tgz", + "https://registry.npmjs.org/sinon/-/sinon-1.17.4.tgz", + ], + strip_prefix = "package/pkg", + path = "/sinonjs", + ) + + web_library_external( + name = "org_npmjs_registry_sinon_chai", + licenses = ["notice"], # BSD-3-Clause + sha256 = "b85fc56f713832960b56fe9269ee4bb2cd41edd2ceb130b0936e5bdbed5dea63", + urls = [ + "http://mirror.tensorflow.org/registry.npmjs.org/sinon-chai/-/sinon-chai-2.8.0.tgz", + "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.8.0.tgz", + ], + strip_prefix = "package", + path = "/sinon-chai", + ) + + web_library_external( + name = "org_npmjs_registry_stacky", + licenses = ["notice"], # BSD-3-Clause + sha256 = "c659e60f7957d9d80c23a7aacc4d71b19c6421a08f91174c0062de369595acae", + urls = [ + "http://mirror.tensorflow.org/registry.npmjs.org/stacky/-/stacky-1.3.1.tgz", + "https://registry.npmjs.org/stacky/-/stacky-1.3.1.tgz", + ], + strip_prefix = "package", + path = "/stacky", + ) + + web_library_external( + name = "org_npmjs_registry_web_component_tester", + licenses = ["notice"], # BSD-3-Clause + sha256 = "9d4ebd4945df8a936916d4d32b7f280f2a3afa35f79e7ca8ad3ed0a42770c537", + urls = [ + "http://mirror.tensorflow.org/registry.npmjs.org/web-component-tester/-/web-component-tester-4.3.6.tgz", + "https://registry.npmjs.org/web-component-tester/-/web-component-tester-4.3.6.tgz", + ], + strip_prefix = "package", + path = "/web-component-tester", + suppress = [ + "absolutePaths", + "strictDependencies", + ], + deps = [ + "@com_lodash", + "@org_npmjs_registry_accessibility_developer_tools", + "@org_npmjs_registry_async", + "@org_npmjs_registry_chai", + "@org_npmjs_registry_mocha", + "@org_npmjs_registry_sinon", + "@org_npmjs_registry_sinon_chai", + "@org_npmjs_registry_stacky", + "@org_polymer_test_fixture", + ], + ) + + web_library_external( + name = "org_polymer_test_fixture", + licenses = ["notice"], # BSD-3-Clause + sha256 = "59d6cfb1187733b71275becfea181fe0aa1f734df5ff77f5850c806bbbf9a0d9", + strip_prefix = "test-fixture-2.0.1", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/test-fixture/archive/v2.0.1.tar.gz", + "https://github.com/PolymerElements/test-fixture/archive/v2.0.1.tar.gz", + ], + path = "/test-fixture", + exclude = ["test/**"], + ) + + filegroup_external( + name = "org_tensorflow_graphics_lib", + licenses = ["notice"], # MIT + sha256_urls = { + "76ebbb763969cad7f66fadf24d97a8beec6b6e9c64da568139ad739a1c46ba14": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/tensorflow/graphics/fa0fc3496d86f0235d614a5f9a27257a1898cae2/tensorflow_graphics/tensorboard/mesh_visualizer/tf_mesh_dashboard/array-buffer-data-provider.js", + "https://raw.githubusercontent.com/tensorflow/graphics/fa0fc3496d86f0235d614a5f9a27257a1898cae2/tensorflow_graphics/tensorboard/mesh_visualizer/tf_mesh_dashboard/array-buffer-data-provider.js", + ], + "0e25af04903d91bb4471d2abc6035ed35c1681993a269feff32ba404a7d9bb9f": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/tensorflow/graphics/fa0fc3496d86f0235d614a5f9a27257a1898cae2/tensorflow_graphics/tensorboard/mesh_visualizer/tf_mesh_dashboard/mesh-viewer.js", + "https://raw.githubusercontent.com/tensorflow/graphics/fa0fc3496d86f0235d614a5f9a27257a1898cae2/tensorflow_graphics/tensorboard/mesh_visualizer/tf_mesh_dashboard/mesh-viewer.js", + ], + }, + ) + + filegroup_external( + name = "com_google_material_design_icon", + licenses = ["notice"], + sha256_urls = { + "fa4ad2661739c9ecefa121c41f5c95de878d4990ee86413124585a3af7d7dffb": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/3.0.1/content/svg/production/ic_content_copy_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/3.0.1/content/svg/production/ic_content_copy_24px.svg", + ], + "962aee2433f026ed7843790f6757dc3c25c34f349feb9b4fe816629b1b22442d": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/3.0.1/action/svg/production/ic_help_outline_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/3.0.1/action/svg/production/ic_help_outline_24px.svg", + ], + "f3d6e717a2d6fa6caec61221fb4b838663abbd1a58933dd7d2824b408932d3fe": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/3.0.1/action/svg/production/ic_info_outline_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/3.0.1/action/svg/production/ic_info_outline_24px.svg", + ], + "b4d30acd39de79f490eff59d72fb1f06502c117c8815359d539e4f20515494de": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/3.0.1/navigation/svg/production/ic_refresh_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/3.0.1/navigation/svg/production/ic_refresh_24px.svg", + ], + "d0872fb94037822164c8cea43a2ebeafdd1b664ff0fdc9387f0e1e1a7ee74628": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/3.0.1/action/svg/production/ic_settings_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/3.0.1/action/svg/production/ic_settings_24px.svg", + ], + "6105c83ef3637bbb1f1f8ceceacb51df818e867238ee6c49e0a8d1ca7f858b72": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/3.0.1/action/svg/production/ic_search_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/3.0.1/action/svg/production/ic_search_24px.svg", + ], + "4ab47484995ab72bd8b7175bd36273d3e8787cf3e1e28a4f695fee07e8d0884d": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/3.0.1/alert/svg/production/ic_error_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/3.0.1/alert/svg/production/ic_error_24px.svg", + ], + "ad918f7ec0ff89298e84586b5b98cdf628c8457cd067dc592031fae783f71a1d": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/3.0.1/navigation/svg/production/ic_chevron_left_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/224895a86501195e7a7ff3dde18e39f00b8e3d5a/navigation/svg/production/ic_chevron_left_24px.svg", + ], + "83f0da9735a4e475b0eca23b708ba09b2b7411e7d711b2d6be24bc2371d67ec8": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/3.0.1/navigation/svg/production/ic_chevron_right_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/224895a86501195e7a7ff3dde18e39f00b8e3d5a/navigation/svg/production/ic_chevron_right_24px.svg", + ], + "b1e7ec6fcc3a0aeefe585abd0860e60dabd39b884be8b52cd886acb3e0635ec3": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/3.0.1/action/svg/production/ic_visibility_off_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/224895a86501195e7a7ff3dde18e39f00b8e3d5a/action/svg/production/ic_visibility_off_24px.svg", + ], + "cbb30ec622923b6e0442d67277e30eaa1ba429223b132fde3289d125f2c62c88": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/3.0.1/content/svg/production/ic_flag_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/224895a86501195e7a7ff3dde18e39f00b8e3d5a/content/svg/production/ic_flag_24px.svg", + ], + "6d4ccf520d400755057a1739a66c0feda3c98bbc34e8e7f79afa630b2e43f87e": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/3.0.1/content/svg/production/ic_clear_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/224895a86501195e7a7ff3dde18e39f00b8e3d5a/content/svg/production/ic_clear_24px.svg", + ], + "f83d9a4e6a9af95c9321a34f2564e9d45483834fa17f5da5a3a403500636360a": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/3.0.1/navigation/svg/production/ic_expand_more_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/224895a86501195e7a7ff3dde18e39f00b8e3d5a/navigation/svg/production/ic_expand_more_24px.svg", + ], + "e52d4acf9d020f85e9fc674479d3ed60ccdd1aa1e6ef3b75f8cd75f1c2284030": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/3.0.1/navigation/svg/production/ic_expand_less_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/224895a86501195e7a7ff3dde18e39f00b8e3d5a/navigation/svg/production/ic_expand_less_24px.svg", + ], + "0ea7671d0b99f8245208eda58e3bc3c633f715bc8ceb9fb2cf60ea5eeda9bda9": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/3.0.1/navigation/svg/production/ic_cancel_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/224895a86501195e7a7ff3dde18e39f00b8e3d5a/navigation/svg/production/ic_cancel_24px.svg", + ], + "dd8deb85c82313c5aeb4936857fd99cb38a617507fb65afddf289941b99ae9f2": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/3.0.1/navigation/svg/production/ic_arrow_downward_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/3.0.1/navigation/svg/production/ic_arrow_downward_24px.svg", + ], + "76d31a5591d1044d0461ee6dc482580e9797101dc96a47bbd53cef9930777f85": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/3.0.1/navigation/svg/production/ic_arrow_upward_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/3.0.1/navigation/svg/production/ic_arrow_upward_24px.svg", + ], + "b887b20de9d7850bac7629bbc72519f5f76c1ae988c692f1970e70cec7498456": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/3.0.1/action/svg/production/ic_get_app_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/224895a86501195e7a7ff3dde18e39f00b8e3d5a/action/svg/production/ic_get_app_24px.svg", + ], + "93e72d0395250e7a75c702dc0df010e6756dded05ffcebe72bb9715788518a8f": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/content/push_pin/materialicons/24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/content/push_pin/materialicons/24px.svg", + ], + "eca3a04cd5362207d925dfb9a1633e133bf4612abaa2060b840c9ebc868b958a": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/content/push_pin/materialiconsoutlined/24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/content/push_pin/materialiconsoutlined/24px.svg", + ], + "925221f8db5bc0358834bbd61bcd082624374e3da86bc64d04db21106fe72458": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/bug_report/materialicons/24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/bug_report/materialicons/24px.svg", + ], + "b54342456d5a7f2da53795147f8af36ec76fbf5b57d792fe75f07538e6c6783e": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/navigation/close/materialicons/24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/navigation/close/materialicons/24px.svg", + ], + "f934b1a5a54e89d82cbbb334e1c7dc28d69fc779c1bec59889facd5de899e8ac": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/filter_alt/materialicons/24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/filter_alt/materialicons/24px.svg", + ], + "3e6e96299b5cb5ea6faec369d1db09313dc957ec28f56a25cbe1bbd5ac55e820": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/navigation/fullscreen/materialicons/24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/navigation/fullscreen/materialicons/24px.svg", + ], + "20f6c4f110effafe35778bba8ce3789b0c6a9c02b5a0f6bcf18c192a94e80a1d": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/navigation/fullscreen_exit/materialicons/24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/navigation/fullscreen_exit/materialicons/24px.svg", + ], + "d147e90c69c346cd82fb45f519d9cb45dd8d61ab4f5bba8156c36545d9abc62f": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/image/image_search/materialicons/24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/image/image_search/materialicons/24px.svg", + ], + "ccae3a4f752212fa288aa0035d49bc2c1d5daca78931f3065fb1e0be98d82493": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/line_weight/materialicons/24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/line_weight/materialicons/24px.svg", + ], + "4f59e208f5babcf58c07505356ca1f109a9e1972e839b991dff19f709a28eeba": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/navigation/more_vert/materialicons/24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/navigation/more_vert/materialicons/24px.svg", + ], + "a558348444b0f80697a8f343767408288ab10be989550b651404641c717c7c0f": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/settings_backup_restore/materialicons/24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/settings_backup_restore/materialicons/24px.svg", + ], + "608da1f1bba357551f222bb44512de328da8394b3c910724415b3156ebb08ca3": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/settings_overscan/materialicons/24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/settings_overscan/materialicons/24px.svg", + ], + "a9706960208156a1de89bbfca8abeffa8771ba9332fcb9605e277bfd8b4eb3b8": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/alert/warning/materialicons/24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/alert/warning/materialicons/24px.svg", + ], + }, + rename = { + "ic_arrow_downward_24px.svg": "arrow_downward_24px.svg", + "ic_arrow_upward_24px.svg": "arrow_upward_24px.svg", + "ic_cancel_24px.svg": "cancel_24px.svg", + "ic_chevron_left_24px.svg": "chevron_left_24px.svg", + "ic_chevron_right_24px.svg": "chevron_right_24px.svg", + "ic_clear_24px.svg": "clear_24px.svg", + "ic_content_copy_24px.svg": "content_copy_24px.svg", + "ic_error_24px.svg": "error_24px.svg", + "ic_expand_less_24px.svg": "expand_less_24px.svg", + "ic_expand_more_24px.svg": "expand_more_24px.svg", + "ic_flag_24px.svg": "flag_24px.svg", + "ic_get_app_24px.svg": "get_app_24px.svg", + "ic_help_outline_24px.svg": "help_outline_24px.svg", + "ic_info_outline_24px.svg": "info_outline_24px.svg", + "ic_push_pin_24px.svg": "push_pin_24px.svg", + "ic_push_pin_outline_24px.svg": "push_pin_outline_24px.svg", + "ic_refresh_24px.svg": "refresh_24px.svg", + "ic_search_24px.svg": "search_24px.svg", + "ic_settings_24px.svg": "settings_24px.svg", + "ic_visibility_off_24px.svg": "visibility_off_24px.svg", + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/bug_report/materialicons/24px.svg": "bug_report_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/bug_report/materialicons/24px.svg": "bug_report_24px.svg", + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/navigation/close/materialicons/24px.svg": "close_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/navigation/close/materialicons/24px.svg": "close_24px.svg", + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/filter_alt/materialicons/24px.svg": "filter_alt_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/filter_alt/materialicons/24px.svg": "filter_alt_24px.svg", + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/navigation/fullscreen/materialicons/24px.svg": "fullscreen_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/navigation/fullscreen/materialicons/24px.svg": "fullscreen_24px.svg", + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/navigation/fullscreen_exit/materialicons/24px.svg": "fullscreen_exit_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/navigation/fullscreen_exit/materialicons/24px.svg": "fullscreen_exit_24px.svg", + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/image/image_search/materialicons/24px.svg": "image_search_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/image/image_search/materialicons/24px.svg": "image_search_24px.svg", + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/content/push_pin/materialicons/24px.svg": "keep_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/content/push_pin/materialicons/24px.svg": "keep_24px.svg", + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/content/push_pin/materialiconsoutlined/24px.svg": "keep_outline_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/content/push_pin/materialiconsoutlined/24px.svg": "keep_outline_24px.svg", + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/line_weight/materialicons/24px.svg": "line_weight_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/line_weight/materialicons/24px.svg": "line_weight_24px.svg", + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/navigation/more_vert/materialicons/24px.svg": "more_vert_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/navigation/more_vert/materialicons/24px.svg": "more_vert_24px.svg", + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/settings_backup_restore/materialicons/24px.svg": "settings_backup_restore_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/settings_backup_restore/materialicons/24px.svg": "settings_backup_restore_24px.svg", + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/settings_overscan/materialicons/24px.svg": "settings_overscan_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/action/settings_overscan/materialicons/24px.svg": "settings_overscan_24px.svg", + "http://mirror.tensorflow.org/raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/alert/warning/materialicons/24px.svg": "warning_24px.svg", + "https://raw.githubusercontent.com/google/material-design-icons/b3f05bfbf4329a5b63f50a720f867c2bac163f98/src/alert/warning/materialicons/24px.svg": "warning_24px.svg", + }, + ) diff --git a/saved_models/tensorboard/third_party/jspbfix.js b/saved_models/tensorboard/third_party/jspbfix.js new file mode 100644 index 0000000000000000000000000000000000000000..6833a566e96f7458c8b8cdeda8a32fc58535bbdf --- /dev/null +++ b/saved_models/tensorboard/third_party/jspbfix.js @@ -0,0 +1,24 @@ +// Copyright 2017 The TensorFlow Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Kludges for compiling JSPB. + * @externs + */ + +/** + * NodeJS API explicitly referenced by binary/utils.js oddly enough. + * @type {Function} + */ +var Buffer; diff --git a/saved_models/tensorboard/third_party/markdown.BUILD b/saved_models/tensorboard/third_party/markdown.BUILD new file mode 100644 index 0000000000000000000000000000000000000000..fa3e85d5304083ed0de521c93c5ea1df1f477349 --- /dev/null +++ b/saved_models/tensorboard/third_party/markdown.BUILD @@ -0,0 +1,15 @@ +# Description: +# Markdown processor + +package(default_visibility = ["//visibility:public"]) + +# This software says they use a BSD license. +licenses(["notice"]) + +exports_files(["LICENSE.md"]) + +py_library( + name = "org_pythonhosted_markdown", + srcs = glob(["markdown/**/*.py"]), + srcs_version = "PY2AND3", +) diff --git a/saved_models/tensorboard/third_party/mock.BUILD b/saved_models/tensorboard/third_party/mock.BUILD new file mode 100644 index 0000000000000000000000000000000000000000..841af364cdcda95a171c3fe9b750cd89c6405843 --- /dev/null +++ b/saved_models/tensorboard/third_party/mock.BUILD @@ -0,0 +1,15 @@ +# Description: +# Rolling backport of unittest.mock for all Pythons + +licenses(["notice"]) # MIT + +exports_files(["LICENSE"]) + +py_library( + name = "org_pythonhosted_mock", + srcs = [ + "mock.py", + ], + srcs_version = "PY2AND3", + visibility = ["//visibility:public"], +) diff --git a/saved_models/tensorboard/third_party/mock_call_assertions.patch b/saved_models/tensorboard/third_party/mock_call_assertions.patch new file mode 100644 index 0000000000000000000000000000000000000000..bc28e1b633fd013f34ea0b8dc3d450308a146df1 --- /dev/null +++ b/saved_models/tensorboard/third_party/mock_call_assertions.patch @@ -0,0 +1,59 @@ +--- mock.py 2012-10-07 18:00:10.000000000 +0100 ++++ mock.py 2019-10-24 22:19:25.657417082 -0700 +@@ -286,6 +286,12 @@ + if not _is_instance_mock(mock): + return + ++ def assert_called(*args, **kwargs): ++ return mock.assert_called(*args, **kwargs) ++ def assert_not_called(*args, **kwargs): ++ return mock.assert_not_called(*args, **kwargs) ++ def assert_called_once(*args, **kwargs): ++ return mock.assert_called_once(*args, **kwargs) + def assert_called_with(*args, **kwargs): + return mock.assert_called_with(*args, **kwargs) + def assert_called_once_with(*args, **kwargs): +@@ -318,6 +324,9 @@ + funcopy.assert_has_calls = assert_has_calls + funcopy.assert_any_call = assert_any_call + funcopy.reset_mock = reset_mock ++ funcopy.assert_called = assert_called ++ funcopy.assert_not_called = assert_not_called ++ funcopy.assert_called_once = assert_called_once + + mock._mock_delegate = funcopy + +@@ -809,6 +818,33 @@ + return message % (expected_string, actual_string) + + ++ def assert_not_called(_mock_self): ++ """assert that the mock was never called. ++ """ ++ self = _mock_self ++ if self.call_count != 0: ++ msg = ("Expected '%s' to not have been called. Called %s times." % ++ (self._mock_name or 'mock', self.call_count)) ++ raise AssertionError(msg) ++ ++ def assert_called(_mock_self): ++ """assert that the mock was called at least once ++ """ ++ self = _mock_self ++ if self.call_count == 0: ++ msg = ("Expected '%s' to have been called." % ++ self._mock_name or 'mock') ++ raise AssertionError(msg) ++ ++ def assert_called_once(_mock_self): ++ """assert that the mock was called only once. ++ """ ++ self = _mock_self ++ if not self.call_count == 1: ++ msg = ("Expected '%s' to have been called once. Called %s times." % ++ (self._mock_name or 'mock', self.call_count)) ++ raise AssertionError(msg) ++ + def assert_called_with(_mock_self, *args, **kwargs): + """assert that the mock was called with the specified arguments. + diff --git a/saved_models/tensorboard/third_party/polymer.bzl b/saved_models/tensorboard/third_party/polymer.bzl new file mode 100644 index 0000000000000000000000000000000000000000..c30d44c72f360a6b845138e3b4474470ba3676a0 --- /dev/null +++ b/saved_models/tensorboard/third_party/polymer.bzl @@ -0,0 +1,1347 @@ +# Copyright 2017 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the 'License'); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an 'AS IS' BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# TensorBoard Polymer Dependencies + +load("@io_bazel_rules_closure//closure:defs.bzl", "web_library_external") + +def tensorboard_polymer_workspace(): + web_library_external( + name = "org_polymer", + licenses = ["notice"], # BSD-3-Clause + sha256 = "604dbbb0bc90d833abfc24cbe67e98c628c50ee28a828b8d97551c2732b8e3ba", + strip_prefix = "polymer-2.7.0", + # IMPORTANT: Keep this in sync with @org_polymer_externs + urls = [ + "http://mirror.tensorflow.org/github.com/polymer/polymer/archive/v2.7.0.tar.gz", + "https://github.com/polymer/polymer/archive/v2.7.0.tar.gz", + ], + path = "/polymer", + srcs = [ + "lib/elements/array-selector.html", + "lib/elements/custom-style.html", + "lib/elements/dom-bind.html", + "lib/elements/dom-if.html", + "lib/elements/dom-module.html", + "lib/elements/dom-repeat.html", + "lib/legacy/class.html", + "lib/legacy/legacy-element-mixin.html", + "lib/legacy/mutable-data-behavior.html", + "lib/legacy/polymer-fn.html", + "lib/legacy/polymer.dom.html", + "lib/legacy/templatizer-behavior.html", + "lib/mixins/dir-mixin.html", + "lib/mixins/disable-upgrade-mixin.html", + "lib/mixins/element-mixin.html", + "lib/mixins/gesture-event-listeners.html", + "lib/mixins/mutable-data.html", + "lib/mixins/properties-changed.html", + "lib/mixins/properties-mixin.html", + "lib/mixins/property-accessors.html", + "lib/mixins/property-effects.html", + "lib/mixins/template-stamp.html", + "lib/utils/array-splice.html", + "lib/utils/async.html", + "lib/utils/boot.html", + "lib/utils/case-map.html", + "lib/utils/debounce.html", + "lib/utils/flattened-nodes-observer.html", + "lib/utils/flush.html", + "lib/utils/gestures.html", + "lib/utils/html-tag.html", + "lib/utils/import-href.html", + "lib/utils/mixin.html", + "lib/utils/path.html", + "lib/utils/render-status.html", + "lib/utils/resolve-url.html", + "lib/utils/settings.html", + "lib/utils/style-gather.html", + "lib/utils/telemetry.html", + "lib/utils/templatize.html", + "lib/utils/unresolved.html", + "LICENSE.txt", + "polymer-element.html", + "polymer.html", + ], + deps = ["@org_webcomponents_shadycss"], + ) + + web_library_external( + name = "org_polymer_externs", + licenses = ["notice"], # BSD-3-Clause + sha256 = "604dbbb0bc90d833abfc24cbe67e98c628c50ee28a828b8d97551c2732b8e3ba", + strip_prefix = "polymer-2.7.0", + urls = [ + "http://mirror.tensorflow.org/github.com/polymer/polymer/archive/v2.7.0.tar.gz", + "https://github.com/polymer/polymer/archive/v2.7.0.tar.gz", + ], + path = "/polymer", + srcs = [ + "externs/closure-types.js", + "externs/polymer-externs.js", + "externs/polymer-internal-shared-types.js", + "externs/webcomponents-externs.js", + ], + ) + + web_library_external( + name = "org_webcomponents_shadycss", + licenses = ["notice"], # BSD-3-Clause + sha256 = "1842b62b8101c8c083d813daf9b79b44cd009ba59f7971f2e357b206db23d1ae", + urls = [ + "http://mirror.tensorflow.org/github.com/webcomponents/shadycss/archive/v1.9.1.tar.gz", + "https://github.com/webcomponents/shadycss/archive/v1.9.1.tar.gz", + ], + strip_prefix = "shadycss-1.9.1", + path = "/shadycss", + srcs = [ + "apply-shim.html", + "apply-shim.min.js", + "custom-style-interface.html", + "custom-style-interface.min.js", + ], + ) + + web_library_external( + name = "org_polymer_iron_a11y_announcer", + licenses = ["notice"], # BSD-3-Clause + sha256 = "355f9a0b0509acbe9abb0aaab4cdd3d8621a56ca55a9bbf696dde9c68a2ff304", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-a11y-announcer/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/iron-a11y-announcer/archive/v2.1.0.tar.gz", + ], + strip_prefix = "iron-a11y-announcer-2.1.0", + path = "/iron-a11y-announcer", + srcs = ["iron-a11y-announcer.html"], + deps = ["@org_polymer"], + ) + + web_library_external( + name = "org_polymer_iron_a11y_keys_behavior", + licenses = ["notice"], # BSD-3-Clause + sha256 = "0cb94443c5277b2eb022bbf6f64d1573e087ed528f3ad39da40de5d6f51c3af0", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-a11y-keys-behavior/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/iron-a11y-keys-behavior/archive/v2.1.0.tar.gz", + ], + strip_prefix = "iron-a11y-keys-behavior-2.1.0", + path = "/iron-a11y-keys-behavior", + srcs = ["iron-a11y-keys-behavior.html"], + deps = ["@org_polymer"], + ) + + web_library_external( + name = "org_polymer_iron_autogrow_textarea", + licenses = ["notice"], # BSD-3-Clause + sha256 = "a6a20edde3621f6d99d5a1ec9f4ba499d02d9d8d74ddf95e29bf0966fc55e812", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-autogrow-textarea/archive/v2.2.0.tar.gz", + "https://github.com/PolymerElements/iron-autogrow-textarea/archive/v2.2.0.tar.gz", + ], + strip_prefix = "iron-autogrow-textarea-2.2.0", + path = "/iron-autogrow-textarea", + srcs = ["iron-autogrow-textarea.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_behaviors", + "@org_polymer_iron_flex_layout", + "@org_polymer_iron_form_element_behavior", + "@org_polymer_iron_validatable_behavior", + ], + ) + + web_library_external( + name = "org_polymer_iron_behaviors", + licenses = ["notice"], # BSD-3-Clause + sha256 = "71ecbe6a01bc302cdea01c80bf7b5801e1f570c88cc4ac491591e5cf19fdedfe", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-behaviors/archive/v2.1.1.tar.gz", + "https://github.com/PolymerElements/iron-behaviors/archive/v2.1.1.tar.gz", + ], + strip_prefix = "iron-behaviors-2.1.1", + path = "/iron-behaviors", + srcs = [ + "iron-button-state.html", + "iron-control-state.html", + ], + deps = [ + "@org_polymer", + "@org_polymer_iron_a11y_keys_behavior", + ], + ) + + web_library_external( + name = "org_polymer_iron_checked_element_behavior", + licenses = ["notice"], # BSD-3-Clause + sha256 = "3037ede91593eb2880cf2e0c8d0198ae0b5802221e7386578263ab831a058bfc", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-checked-element-behavior/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/iron-checked-element-behavior/archive/v2.1.0.tar.gz", + ], + strip_prefix = "iron-checked-element-behavior-2.1.0", + path = "/iron-checked-element-behavior", + srcs = ["iron-checked-element-behavior.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_form_element_behavior", + "@org_polymer_iron_validatable_behavior", + ], + ) + + web_library_external( + name = "org_polymer_iron_collapse", + licenses = ["notice"], # BSD-3-Clause + sha256 = "cf2a12b6709f5b3e2be42b034028e2a7ccdbba870f2ddf1e1a864c116ce25f6b", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-collapse/archive/v2.2.1.tar.gz", + "https://github.com/PolymerElements/iron-collapse/archive/v2.2.1.tar.gz", + ], + strip_prefix = "iron-collapse-2.2.1", + path = "/iron-collapse", + srcs = ["iron-collapse.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_resizable_behavior", + ], + ) + + web_library_external( + name = "org_polymer_iron_demo_helpers", + licenses = ["notice"], # BSD-3-Clause + sha256 = "4e7c148fc35ad1b8d0cf90fca1bc535801513b4ed62953faf37a2d664100a27f", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-demo-helpers/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/iron-demo-helpers/archive/v2.1.0.tar.gz", + ], + strip_prefix = "iron-demo-helpers-2.1.0", + path = "/iron-demo-helpers", + srcs = [ + "demo-pages-shared-styles.html", + "demo-snippet.html", + ], + deps = [ + "@org_polymer", + "@com_google_fonts_roboto", + "@org_polymer_iron_flex_layout", + "@org_polymer_iron_icons", + "@org_polymer_marked_element", + "@org_polymer_paper_icon_button", + "@org_polymer_paper_styles", + "@org_polymer_prism_element", + ], + ) + + web_library_external( + name = "org_polymer_iron_dropdown", + licenses = ["notice"], # BSD-3-Clause + sha256 = "021a9344278f1bd8e8b430ae8d195dcefe27621e4e5c9cbc3d77f237a4fefbcc", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-dropdown/archive/v2.2.1.tar.gz", + "https://github.com/PolymerElements/iron-dropdown/archive/v2.2.1.tar.gz", + ], + strip_prefix = "iron-dropdown-2.2.1", + path = "/iron-dropdown", + srcs = [ + "iron-dropdown.html", + "iron-dropdown-scroll-manager.html", + ], + deps = [ + "@org_polymer", + "@org_polymer_iron_a11y_keys_behavior", + "@org_polymer_iron_behaviors", + "@org_polymer_iron_overlay_behavior", + "@org_polymer_iron_resizable_behavior", + "@org_polymer_neon_animation", + ], + ) + + web_library_external( + name = "org_polymer_iron_fit_behavior", + licenses = ["notice"], # BSD-3-Clause + sha256 = "112f2b8e9812c323855a6c2a4138a72740d31ab8ae83f741b0d17e222a76531f", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-fit-behavior/archive/v2.2.1.tar.gz", + "https://github.com/PolymerElements/iron-fit-behavior/archive/v2.2.1.tar.gz", + ], + strip_prefix = "iron-fit-behavior-2.2.1", + path = "/iron-fit-behavior", + srcs = ["iron-fit-behavior.html"], + deps = ["@org_polymer"], + ) + + web_library_external( + name = "org_polymer_iron_flex_layout", + licenses = ["notice"], # BSD-3-Clause + sha256 = "2c147ed1e99870f44aa6e36ff718eee056e49417f64d0ca25caaed781d479ffc", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-flex-layout/archive/v2.0.3.tar.gz", + "https://github.com/PolymerElements/iron-flex-layout/archive/v2.0.3.tar.gz", + ], + strip_prefix = "iron-flex-layout-2.0.3", + path = "/iron-flex-layout", + srcs = [ + # "classes/iron-flex-layout.html", # Deprecated, but needed by paper-styles component. + # "classes/iron-shadow-flex-layout.html", + "iron-flex-layout.html", + "iron-flex-layout-classes.html", + ], + deps = ["@org_polymer"], + ) + + web_library_external( + name = "org_polymer_iron_form_element_behavior", + licenses = ["notice"], # BSD-3-Clause + sha256 = "1ce5ea0434ff23d9ebabff484f2ea99f51668c2616fe5b1aee147ef1262a227e", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-form-element-behavior/archive/v2.1.3.tar.gz", + "https://github.com/PolymerElements/iron-form-element-behavior/archive/v2.1.3.tar.gz", + ], + strip_prefix = "iron-form-element-behavior-2.1.3", + path = "/iron-form-element-behavior", + srcs = ["iron-form-element-behavior.html"], + deps = ["@org_polymer"], + ) + + web_library_external( + name = "org_polymer_iron_icon", + licenses = ["notice"], # BSD-3-Clause + sha256 = "5030eb65f935ee75bec682e71c6b55a421ff365f9f876f0e920080625fc63694", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-icon/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/iron-icon/archive/v2.1.0.tar.gz", + ], + strip_prefix = "iron-icon-2.1.0", + path = "/iron-icon", + srcs = ["iron-icon.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_flex_layout", + "@org_polymer_iron_meta", + ], + ) + + web_library_external( + name = "org_polymer_iron_icons", + licenses = ["notice"], # BSD-3-Clause + sha256 = "779174b4acd9ac8fbbb3e1bf81394db13189f294bd6683c4a0e79f68da8f1911", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-icons/archive/v2.1.1.tar.gz", + "https://github.com/PolymerElements/iron-icons/archive/v2.1.1.tar.gz", + ], + strip_prefix = "iron-icons-2.1.1", + path = "/iron-icons", + srcs = [ + "av-icons.html", + "communication-icons.html", + "device-icons.html", + "editor-icons.html", + "hardware-icons.html", + "image-icons.html", + "iron-icons.html", + "maps-icons.html", + "notification-icons.html", + "places-icons.html", + "social-icons.html", + ], + deps = [ + "@org_polymer_iron_icon", + "@org_polymer_iron_iconset_svg", + ], + ) + + web_library_external( + name = "org_polymer_iron_iconset_svg", + licenses = ["notice"], # BSD-3-Clause + sha256 = "31c513ea52648d7b6e716909fea5921272e6244bd560c23571eb2a50e37694de", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-iconset-svg/archive/v2.2.0.tar.gz", + "https://github.com/PolymerElements/iron-iconset-svg/archive/v2.2.0.tar.gz", + ], + strip_prefix = "iron-iconset-svg-2.2.0", + path = "/iron-iconset-svg", + srcs = ["iron-iconset-svg.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_meta", + ], + ) + + web_library_external( + name = "org_polymer_iron_image", + licenses = ["notice"], # BSD-3-Clause + sha256 = "0a3e10cc6a1d911ebc1c3f3c6e107e98aa777e606de4fbbf4ac2c3ec8cf08d5f", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-image/archive/v2.2.1.tar.gz", + "https://github.com/PolymerElements/iron-image/archive/v2.2.1.tar.gz", + ], + strip_prefix = "iron-image-2.2.1", + path = "/iron-image", + srcs = ["iron-image.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_flex_layout", + ], + ) + + web_library_external( + name = "org_polymer_iron_input", + licenses = ["notice"], # BSD-3-Clause + sha256 = "c7749825ad28bcf7ccc66b21efeeff9301fc03f07ada120f00f7fc880f1c1af7", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-input/archive/v2.1.3.tar.gz", + "https://github.com/PolymerElements/iron-input/archive/v2.1.3.tar.gz", + ], + strip_prefix = "iron-input-2.1.3", + path = "/iron-input", + srcs = ["iron-input.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_a11y_announcer", + "@org_polymer_iron_validatable_behavior", + ], + ) + + web_library_external( + name = "org_polymer_iron_list", + licenses = ["notice"], # BSD-3-Clause + sha256 = "5606e3a70d00355b34f2bd70628763bc353eb8cc18f410233678a4abcb6be594", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-list/archive/v2.0.19.tar.gz", + "https://github.com/PolymerElements/iron-list/archive/v2.0.19.tar.gz", + ], + strip_prefix = "iron-list-2.0.19", + path = "/iron-list", + srcs = ["iron-list.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_a11y_keys_behavior", + "@org_polymer_iron_resizable_behavior", + "@org_polymer_iron_scroll_target_behavior", + ], + ) + + web_library_external( + name = "org_polymer_iron_menu_behavior", + licenses = ["notice"], # BSD-3-Clause + sha256 = "482c3cad0ad1857fdfeb55d1e22378246379f77e7ac0eb747c248afd87f77146", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-menu-behavior/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/iron-menu-behavior/archive/v2.1.0.tar.gz", + ], + strip_prefix = "iron-menu-behavior-2.1.0", + path = "/iron-menu-behavior", + srcs = [ + "iron-menu-behavior.html", + "iron-menubar-behavior.html", + ], + deps = [ + "@org_polymer", + "@org_polymer_iron_a11y_keys_behavior", + "@org_polymer_iron_selector", + ], + ) + + web_library_external( + name = "org_polymer_iron_meta", + licenses = ["notice"], # BSD-3-Clause + sha256 = "65366ae55474fd058e052aac01f379a5ca3fd8219e0f51cb9e379e2766d607d7", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-meta/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/iron-meta/archive/v2.1.0.tar.gz", + ], + strip_prefix = "iron-meta-2.1.0", + path = "/iron-meta", + srcs = ["iron-meta.html"], + deps = ["@org_polymer"], + ) + + web_library_external( + name = "org_polymer_iron_overlay_behavior", + licenses = ["notice"], # BSD-3-Clause + sha256 = "1f678414a71ab0fe6ed4b8df1f47ed820191073063d3abe8a61d05dff266078f", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-overlay-behavior/archive/v2.3.3.tar.gz", + "https://github.com/PolymerElements/iron-overlay-behavior/archive/v2.3.3.tar.gz", + ], + strip_prefix = "iron-overlay-behavior-2.3.3", + path = "/iron-overlay-behavior", + srcs = [ + "iron-focusables-helper.html", + "iron-overlay-backdrop.html", + "iron-overlay-behavior.html", + "iron-overlay-manager.html", + "iron-scroll-manager.html", + ], + deps = [ + "@org_polymer", + "@org_polymer_iron_a11y_keys_behavior", + "@org_polymer_iron_fit_behavior", + "@org_polymer_iron_resizable_behavior", + ], + ) + + web_library_external( + name = "org_polymer_iron_pages", + licenses = ["notice"], # BSD-3-Clause + sha256 = "2db73155902d0f24e3ba19ef680ca620c22ebef204e9dacab470aa25677cbc7d", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-pages/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/iron-pages/archive/v2.1.0.tar.gz", + ], + strip_prefix = "iron-pages-2.1.0", + path = "/iron-pages", + srcs = ["iron-pages.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_resizable_behavior", + "@org_polymer_iron_selector", + ], + ) + + web_library_external( + name = "org_polymer_iron_range_behavior", + licenses = ["notice"], # BSD-3-Clause + sha256 = "79c2c1b7f03bf41d7b3a798cbd074419945576add48bfb7c2994f45ac3782fd7", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-range-behavior/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/iron-range-behavior/archive/v2.1.0.tar.gz", + ], + strip_prefix = "iron-range-behavior-2.1.0", + path = "/iron-range-behavior", + srcs = ["iron-range-behavior.html"], + deps = ["@org_polymer"], + ) + + web_library_external( + name = "org_polymer_iron_resizable_behavior", + licenses = ["notice"], # BSD-3-Clause + sha256 = "1bd7875d419a63f3c8d4ca3309b53ecf93d8dddb9703913f5442d04903a89976", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-resizable-behavior/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/iron-resizable-behavior/archive/v2.1.0.tar.gz", + ], + strip_prefix = "iron-resizable-behavior-2.1.0", + path = "/iron-resizable-behavior", + srcs = ["iron-resizable-behavior.html"], + deps = ["@org_polymer"], + ) + + web_library_external( + name = "org_polymer_iron_scroll_target_behavior", + licenses = ["notice"], # BSD-3-Clause + sha256 = "9fd59de543198d88e5ca314091954aececf8e5509df6df5bd62232e36886cb58", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-scroll-target-behavior/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/iron-scroll-target-behavior/archive/v2.1.0.tar.gz", + ], + strip_prefix = "iron-scroll-target-behavior-2.1.0", + path = "/iron-scroll-target-behavior", + srcs = ["iron-scroll-target-behavior.html"], + deps = ["@org_polymer"], + ) + + web_library_external( + name = "org_polymer_iron_selector", + licenses = ["notice"], # BSD-3-Clause + sha256 = "dcd7e180f05c9b66c30eedaee030a30e2f87d997f0de132e08ea4a58d494b01b", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-selector/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/iron-selector/archive/v2.1.0.tar.gz", + ], + strip_prefix = "iron-selector-2.1.0", + path = "/iron-selector", + srcs = [ + "iron-multi-selectable.html", + "iron-selectable.html", + "iron-selection.html", + "iron-selector.html", + ], + deps = ["@org_polymer"], + ) + + web_library_external( + name = "org_polymer_iron_validatable_behavior", + licenses = ["notice"], # BSD-3-Clause + sha256 = "3d60d1770c9ea57ba9dff8a43f7c07f258c5c233e2b1b307b5ef6ed31573d45d", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-validatable-behavior/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/iron-validatable-behavior/archive/v2.1.0.tar.gz", + ], + strip_prefix = "iron-validatable-behavior-2.1.0", + path = "/iron-validatable-behavior", + srcs = ["iron-validatable-behavior.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_meta", + ], + ) + + web_library_external( + name = "org_polymer_iron_validator_behavior", + srcs = ["iron-validator-behavior.html"], + licenses = ["notice"], # BSD-3-Clause + path = "/iron-validator-behavior", + sha256 = "f50c3960684b44f881b27128c92a03895f6aae8c5eb465b57563d3c7aacbf783", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/iron-validator-behavior/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/iron-validator-behavior/archive/v2.1.0.tar.gz", + ], + strip_prefix = "iron-validator-behavior-2.1.0", + deps = [ + "@org_polymer", + "@org_polymer_iron_meta", + ], + ) + + web_library_external( + name = "org_polymer_marked", + licenses = ["notice"], # MIT + sha256 = "dd5a84bdf5a52558a09c2fe948e9be9c4f535901845240f3a60f97f092674aa0", + urls = [ + "http://mirror.tensorflow.org/github.com/chjj/marked/archive/v0.3.2.tar.gz", + "https://github.com/chjj/marked/archive/v0.3.2.tar.gz", + ], + strip_prefix = "marked-0.3.2", + path = "/marked", + srcs = ["lib/marked.js"], + ) + + web_library_external( + name = "org_polymer_marked_element", + licenses = ["notice"], # BSD-3-Clause + sha256 = "27abd2ef1cc122d4db32d5308c724e9a4cf9cdb1c224a4409d92cd1f5677e0c1", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/marked-element/archive/v2.4.0.tar.gz", + "https://github.com/PolymerElements/marked-element/archive/v2.4.0.tar.gz", + ], + strip_prefix = "marked-element-2.4.0", + path = "/marked-element", + srcs = [ + "marked-element.html", + "marked-import.html", + ], + deps = [ + "@org_polymer", + "@org_polymer_marked", + ], + ) + + web_library_external( + name = "org_polymer_neon_animation", + licenses = ["notice"], # BSD-3-Clause + sha256 = "64dfd4f0603a6670ae2558eb8cae39920c089961bedf8811ddab426fc1e21372", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/neon-animation/archive/v2.2.1.tar.gz", + "https://github.com/PolymerElements/neon-animation/archive/v2.2.1.tar.gz", + ], + strip_prefix = "neon-animation-2.2.1", + path = "/neon-animation", + srcs = [ + "animations/cascaded-animation.html", + "animations/fade-in-animation.html", + "animations/fade-out-animation.html", + "animations/hero-animation.html", + "animations/opaque-animation.html", + "animations/reverse-ripple-animation.html", + "animations/ripple-animation.html", + "animations/scale-down-animation.html", + "animations/scale-up-animation.html", + "animations/slide-down-animation.html", + "animations/slide-from-bottom-animation.html", + "animations/slide-from-left-animation.html", + "animations/slide-from-right-animation.html", + "animations/slide-from-top-animation.html", + "animations/slide-left-animation.html", + "animations/slide-right-animation.html", + "animations/slide-up-animation.html", + "animations/transform-animation.html", + "neon-animatable.html", + "neon-animatable-behavior.html", + "neon-animated-pages.html", + "neon-animation.html", + "neon-animation-behavior.html", + "neon-animation-runner-behavior.html", + "neon-animations.html", + "neon-shared-element-animatable-behavior.html", + "neon-shared-element-animation-behavior.html", + # web-animations polyfill SHOULD NOT be loaded when + # web-animations-next-lite.js is loaded. To save devs from making the + # mistake, we will omit loading below file. + # "web-animations.html", + ], + deps = [ + "@org_polymer", + "@org_polymer_iron_meta", + "@org_polymer_iron_resizable_behavior", + "@org_polymer_iron_selector", + "@org_polymer_web_animations_js", + ], + ) + + web_library_external( + name = "org_polymer_paper_behaviors", + licenses = ["notice"], # BSD-3-Clause + sha256 = "74090426df1f50d1071095591cf35deb5d645b9116299b2d8e9d538490bd7f32", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-behaviors/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/paper-behaviors/archive/v2.1.0.tar.gz", + ], + strip_prefix = "paper-behaviors-2.1.0", + path = "/paper-behaviors", + srcs = [ + "paper-button-behavior.html", + "paper-checked-element-behavior.html", + "paper-inky-focus-behavior.html", + "paper-ripple-behavior.html", + ], + deps = [ + "@org_polymer", + "@org_polymer_iron_behaviors", + "@org_polymer_iron_checked_element_behavior", + "@org_polymer_paper_ripple", + ], + ) + + web_library_external( + name = "org_polymer_paper_card", + licenses = ["notice"], # BSD-3-Clause + sha256 = "7cad4022654485f45a71e815db194818690f6375da34acb6ed4403b0da0ebd35", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-card/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/paper-card/archive/v2.1.0.tar.gz", + ], + strip_prefix = "paper-card-2.1.0", + path = "/paper-card", + srcs = ["paper-card.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_flex_layout", + "@org_polymer_iron_image", + "@org_polymer_paper_styles", + "@org_polymer_paper_material", + ], + ) + + web_library_external( + name = "org_polymer_paper_button", + licenses = ["notice"], # BSD-3-Clause + sha256 = "c3a21e81822f824ab50fe3f36d9fa3f182fefc9884d95ebebd2c3c7878f6dd00", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-button/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/paper-button/archive/v2.1.0.tar.gz", + ], + strip_prefix = "paper-button-2.1.0", + path = "/paper-button", + srcs = ["paper-button.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_flex_layout", + "@org_polymer_paper_behaviors", + "@org_polymer_paper_material", + "@org_polymer_paper_ripple", + "@org_polymer_paper_styles", + ], + ) + + web_library_external( + name = "org_polymer_paper_checkbox", + licenses = ["notice"], # BSD-3-Clause + sha256 = "029ccba430b0c9a5ee48f337a5a32b7cdff444bd129b4c4715b27d7bcd48f9e5", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-checkbox/archive/v2.0.3.tar.gz", + "https://github.com/PolymerElements/paper-checkbox/archive/v2.0.3.tar.gz", + ], + strip_prefix = "paper-checkbox-2.0.3", + path = "/paper-checkbox", + srcs = ["paper-checkbox.html"], + deps = [ + "@org_polymer", + "@org_polymer_paper_behaviors", + "@org_polymer_paper_styles", + ], + ) + + web_library_external( + name = "org_polymer_paper_dialog", + licenses = ["notice"], # BSD-3-Clause + sha256 = "ddc83d55f98161e8109fa6bfdbc908902c221ff92134b4215ca4765c386b0c97", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-dialog/archive/v2.1.1.tar.gz", + "https://github.com/PolymerElements/paper-dialog/archive/v2.1.1.tar.gz", + ], + strip_prefix = "paper-dialog-2.1.1", + path = "/paper-dialog", + srcs = ["paper-dialog.html"], + deps = [ + "@org_polymer", + "@org_polymer_neon_animation", + "@org_polymer_paper_dialog_behavior", + ], + ) + + web_library_external( + name = "org_polymer_paper_dialog_behavior", + licenses = ["notice"], # BSD-3-Clause + sha256 = "17ce63bcfe9b4480b747182208fa892b4d67da292a5dd18900b18849a492db11", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-dialog-behavior/archive/v2.2.2.tar.gz", + "https://github.com/PolymerElements/paper-dialog-behavior/archive/v2.2.2.tar.gz", + ], + strip_prefix = "paper-dialog-behavior-2.2.2", + path = "/paper-dialog-behavior", + srcs = [ + "paper-dialog-behavior.d.ts", + "paper-dialog-behavior.html", + "paper-dialog-shared-styles.d.ts", + "paper-dialog-shared-styles.html", + ], + deps = [ + "@org_polymer", + "@org_polymer_iron_flex_layout", + "@org_polymer_iron_overlay_behavior", + "@org_polymer_paper_styles", + ], + ) + + web_library_external( + name = "org_polymer_paper_dialog_scrollable", + licenses = ["notice"], # BSD-3-Clause + sha256 = "e25a40f3bbc7416485e804bdbfcd683d86c2d900cf60951985ef225c482d5fce", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-dialog-scrollable/archive/v2.2.0.tar.gz", + "https://github.com/PolymerElements/paper-dialog-scrollable/archive/v2.2.0.tar.gz", + ], + strip_prefix = "paper-dialog-scrollable-2.2.0", + path = "/paper-dialog-scrollable", + srcs = ["paper-dialog-scrollable.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_flex_layout", + "@org_polymer_paper_dialog_behavior", + "@org_polymer_paper_styles", + ], + ) + + web_library_external( + name = "org_polymer_paper_dropdown_menu", + licenses = ["notice"], # BSD-3-Clause + sha256 = "8e0fdf973abdcb7c4e3dd3bf15c48d049deb43b81012bef18b42f1db192e3473", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-dropdown-menu/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/paper-dropdown-menu/archive/v2.1.0.tar.gz", + ], + strip_prefix = "paper-dropdown-menu-2.1.0", + path = "/paper-dropdown-menu", + srcs = [ + "paper-dropdown-menu.html", + "paper-dropdown-menu-icons.html", + "paper-dropdown-menu-light.html", + "paper-dropdown-menu-shared-styles.html", + ], + deps = [ + "@org_polymer", + "@org_polymer_iron_a11y_keys_behavior", + "@org_polymer_iron_behaviors", + "@org_polymer_iron_form_element_behavior", + "@org_polymer_iron_icon", + "@org_polymer_iron_iconset_svg", + "@org_polymer_iron_validatable_behavior", + "@org_polymer_paper_behaviors", + "@org_polymer_paper_input", + "@org_polymer_paper_menu_button", + "@org_polymer_paper_ripple", + "@org_polymer_paper_styles", + ], + ) + + web_library_external( + name = "org_polymer_paper_header_panel", + licenses = ["notice"], # BSD-3-Clause + sha256 = "a1e87dbeca6a9edfbef350f23f79448079f2644b6759ae8141cad2bb48974366", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-header-panel/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/paper-header-panel/archive/v2.1.0.tar.gz", + ], + strip_prefix = "paper-header-panel-2.1.0", + path = "/paper-header-panel", + srcs = ["paper-header-panel.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_flex_layout", + ], + ) + + web_library_external( + name = "org_polymer_paper_icon_button", + licenses = ["notice"], # BSD-3-Clause + sha256 = "3026c61abdfaf9621070c879b9a6dbbdd0236d4453467b54f5672e1c22af4c27", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-icon-button/archive/v2.2.0.tar.gz", + "https://github.com/PolymerElements/paper-icon-button/archive/v2.2.0.tar.gz", + ], + strip_prefix = "paper-icon-button-2.2.0", + path = "/paper-icon-button", + srcs = [ + "paper-icon-button.html", + "paper-icon-button-light.html", + ], + deps = [ + "@org_polymer", + "@org_polymer_iron_icon", + "@org_polymer_paper_behaviors", + "@org_polymer_paper_styles", + ], + ) + + web_library_external( + name = "org_polymer_paper_input", + licenses = ["notice"], # BSD-3-Clause + sha256 = "e151b1c6cf646c88cb18cd3555d58f797f37e5591bbf77b4155b4f401e28c95b", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-input/archive/v2.2.3.tar.gz", + "https://github.com/PolymerElements/paper-input/archive/v2.2.3.tar.gz", + ], + strip_prefix = "paper-input-2.2.3", + path = "/paper-input", + srcs = [ + "paper-input.html", + "paper-input-addon-behavior.html", + "paper-input-behavior.html", + "paper-input-char-counter.html", + "paper-input-container.html", + "paper-input-error.html", + "paper-textarea.html", + ], + deps = [ + "@org_polymer", + "@org_polymer_iron_a11y_keys_behavior", + "@org_polymer_iron_autogrow_textarea", + "@org_polymer_iron_behaviors", + "@org_polymer_iron_flex_layout", + "@org_polymer_iron_form_element_behavior", + "@org_polymer_iron_input", + "@org_polymer_paper_styles", + ], + ) + + web_library_external( + name = "org_polymer_paper_item", + licenses = ["notice"], # BSD-3-Clause + sha256 = "710dc8ae3d3aad12513de4d111aab3b0bcb31159d9fb73c9ef6d02642df4bce2", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-item/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/paper-item/archive/v2.1.0.tar.gz", + ], + strip_prefix = "paper-item-2.1.0", + path = "/paper-item", + srcs = [ + "paper-icon-item.html", + "paper-item.html", + "paper-item-behavior.html", + "paper-item-body.html", + "paper-item-shared-styles.html", + ], + deps = [ + "@org_polymer", + "@org_polymer_iron_behaviors", + "@org_polymer_iron_flex_layout", + "@org_polymer_paper_styles", + ], + ) + + web_library_external( + name = "org_polymer_paper_listbox", + licenses = ["notice"], # BSD-3-Clause + sha256 = "294819be85502bef21fe3aa240597f8a60f38d81075acb15ede06ed0867c7832", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-listbox/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/paper-listbox/archive/v2.1.0.tar.gz", + ], + strip_prefix = "paper-listbox-2.1.0", + path = "/paper-listbox", + srcs = ["paper-listbox.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_menu_behavior", + "@org_polymer_paper_styles", + ], + ) + + web_library_external( + name = "org_polymer_paper_material", + licenses = ["notice"], # BSD-3-Clause + sha256 = "065935ba7946d3f94c61fb536db79658bc87b20d6c44b9914512f496527845fc", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-material/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/paper-material/archive/v2.1.0.tar.gz", + ], + strip_prefix = "paper-material-2.1.0", + path = "/paper-material", + srcs = [ + "paper-material.html", + "paper-material-shared-styles.html", + ], + deps = [ + "@org_polymer", + "@org_polymer_paper_styles", + ], + ) + + web_library_external( + name = "org_polymer_paper_menu_button", + licenses = ["notice"], # BSD-3-Clause + sha256 = "c5d6a5a9b43673da5400ddcbd7069a57d57260148642d6136a5ed4c0862e6dfc", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-menu-button/archive/v2.1.1.tar.gz", + "https://github.com/PolymerElements/paper-menu-button/archive/v2.1.1.tar.gz", + ], + strip_prefix = "paper-menu-button-2.1.1", + path = "/paper-menu-button", + srcs = [ + "paper-menu-button.html", + "paper-menu-button-animations.html", + ], + deps = [ + "@org_polymer", + "@org_polymer_iron_a11y_keys_behavior", + "@org_polymer_iron_behaviors", + "@org_polymer_iron_dropdown", + "@org_polymer_neon_animation", + "@org_polymer_paper_styles", + ], + ) + + web_library_external( + name = "org_polymer_paper_progress", + licenses = ["notice"], # BSD-3-Clause + sha256 = "01557e6385f8ab8fa3fc21fb8eab467ecc3f30a58dc650a6a17032befe427b0c", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-progress/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/paper-progress/archive/v2.1.0.tar.gz", + ], + strip_prefix = "paper-progress-2.1.0", + path = "/paper-progress", + srcs = ["paper-progress.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_flex_layout", + "@org_polymer_iron_range_behavior", + "@org_polymer_paper_styles", + ], + ) + + web_library_external( + name = "org_polymer_paper_radio_button", + licenses = ["notice"], # BSD-3-Clause + sha256 = "7dece68725e512273e754821dd30019006bdb31064dcd3287d373de4c06d8c1e", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-radio-button/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/paper-radio-button/archive/v2.1.0.tar.gz", + ], + strip_prefix = "paper-radio-button-2.1.0", + path = "/paper-radio-button", + srcs = ["paper-radio-button.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_flex_layout", + "@org_polymer_paper_behaviors", + "@org_polymer_paper_styles", + ], + ) + + web_library_external( + name = "org_polymer_paper_radio_group", + licenses = ["notice"], # BSD-3-Clause + sha256 = "d7f83c4ae7b529760c766bfff3a67a198e67e96201029fd68b574a70cbb49360", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-radio-group/archive/v2.2.0.tar.gz", + "https://github.com/PolymerElements/paper-radio-group/archive/v2.2.0.tar.gz", + ], + strip_prefix = "paper-radio-group-2.2.0", + path = "/paper-radio-group", + srcs = ["paper-radio-group.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_a11y_keys_behavior", + "@org_polymer_iron_menu_behavior", + "@org_polymer_iron_selector", + "@org_polymer_paper_radio_button", + ], + ) + + web_library_external( + name = "org_polymer_paper_ripple", + licenses = ["notice"], # BSD-3-Clause + sha256 = "e7a032f1c194e6222b3b4c80e04f28a201c5d12c7e94a33b77f10ab371a19d84", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-ripple/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/paper-ripple/archive/v2.1.0.tar.gz", + ], + strip_prefix = "paper-ripple-2.1.0", + path = "/paper-ripple", + srcs = ["paper-ripple.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_a11y_keys_behavior", + ], + ) + + web_library_external( + name = "org_polymer_paper_slider", + licenses = ["notice"], # BSD-3-Clause + sha256 = "5d922f348e3058d9b52bbccd8847a6d6c9e39c4282317ecd6acaa90d59c0212f", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-slider/archive/v2.0.6.tar.gz", + "https://github.com/PolymerElements/paper-slider/archive/v2.0.6.tar.gz", + ], + strip_prefix = "paper-slider-2.0.6", + path = "/paper-slider", + srcs = ["paper-slider.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_a11y_keys_behavior", + "@org_polymer_iron_flex_layout", + "@org_polymer_iron_form_element_behavior", + "@org_polymer_iron_range_behavior", + "@org_polymer_paper_behaviors", + "@org_polymer_paper_input", + "@org_polymer_paper_progress", + "@org_polymer_paper_styles", + ], + ) + + web_library_external( + name = "org_polymer_paper_spinner", + licenses = ["notice"], # BSD-3-Clause + sha256 = "df74ce25bdf16df7f82d4567b0a353073de811f6d3d38df95477b7cefa773688", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-spinner/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/paper-spinner/archive/v2.1.0.tar.gz", + ], + strip_prefix = "paper-spinner-2.1.0", + path = "/paper-spinner", + srcs = [ + "paper-spinner-behavior.html", + "paper-spinner-lite.html", + "paper-spinner-styles.html", + "paper-spinner.html", + ], + deps = [ + "@org_polymer", + "@org_polymer_iron_flex_layout", + "@org_polymer_paper_styles", + ], + ) + + web_library_external( + name = "org_polymer_paper_styles", + licenses = ["notice"], # BSD-3-Clause + sha256 = "37359c72f96f1f3dd90fe7a9ba50d079dc32241de359d5c19c013b564b48bd3f", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-styles/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/paper-styles/archive/v2.1.0.tar.gz", + ], + strip_prefix = "paper-styles-2.1.0", + path = "/paper-styles", + # Deliberately omitting "classes/global.html" from srcs below. + srcs = [ + "classes/shadow.html", + "classes/typography.html", + "color.html", + "default-theme.html", + "demo-pages.html", + "element-styles/paper-item-styles.html", + "element-styles/paper-material-styles.html", + "paper-styles-classes.html", + "paper-styles.html", + "shadow.html", + "typography.html", + ], + deps = [ + "@org_polymer", + "@com_google_fonts_roboto", + "@org_polymer_iron_flex_layout", + ], + ) + + web_library_external( + name = "org_polymer_paper_tabs", + licenses = ["notice"], # BSD-3-Clause + sha256 = "c09fcd78d1e1c79451c6c12c203ec32c6b36f063f25ad6cdf18da81e33bd9a2d", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-tabs/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/paper-tabs/archive/v2.1.0.tar.gz", + ], + strip_prefix = "paper-tabs-2.1.0", + path = "/paper-tabs", + srcs = [ + "paper-tab.html", + "paper-tabs.html", + "paper-tabs-icons.html", + ], + deps = [ + "@org_polymer", + "@org_polymer_iron_behaviors", + "@org_polymer_iron_flex_layout", + "@org_polymer_iron_icon", + "@org_polymer_iron_iconset_svg", + "@org_polymer_iron_menu_behavior", + "@org_polymer_iron_resizable_behavior", + "@org_polymer_paper_behaviors", + "@org_polymer_paper_icon_button", + "@org_polymer_paper_styles", + ], + ) + + web_library_external( + name = "org_polymer_paper_toast", + licenses = ["notice"], # BSD-3-Clause + sha256 = "d47c0be0387d0f13fa756413f192c4719e1b36c0aa0e2373176733d6224e7001", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-toast/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/paper-toast/archive/v2.1.0.tar.gz", + ], + strip_prefix = "paper-toast-2.1.0", + path = "/paper-toast", + srcs = ["paper-toast.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_a11y_announcer", + "@org_polymer_iron_overlay_behavior", + ], + ) + + web_library_external( + name = "org_polymer_paper_toggle_button", + licenses = ["notice"], # BSD-3-Clause + sha256 = "35f304cb0eb505e6303ad3ad2a7f9ffa44338b27a6daeacb58dcea6c9864f297", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-toggle-button/archive/v2.1.1.tar.gz", + "https://github.com/PolymerElements/paper-toggle-button/archive/v2.1.1.tar.gz", + ], + strip_prefix = "paper-toggle-button-2.1.1", + path = "/paper-toggle-button", + srcs = ["paper-toggle-button.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_flex_layout", + "@org_polymer_paper_behaviors", + "@org_polymer_paper_styles", + ], + ) + + web_library_external( + name = "org_polymer_paper_toolbar", + licenses = ["notice"], # BSD-3-Clause + sha256 = "6ce97a7cd55b7aadbe0fbd2c1ef768759e5f8f516645c61a2871018828dccffe", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-toolbar/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/paper-toolbar/archive/v2.1.0.tar.gz", + ], + strip_prefix = "paper-toolbar-2.1.0", + path = "/paper-toolbar", + srcs = ["paper-toolbar.html"], + deps = [ + "@org_polymer", + "@org_polymer_iron_flex_layout", + "@org_polymer_paper_styles", + ], + ) + + web_library_external( + name = "org_polymer_paper_tooltip", + licenses = ["notice"], # BSD-3-Clause + sha256 = "07eacd783507d4aad3e5e6e0c128c3816aa7e3149bf8f7dfce525ea5568d0565", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/paper-tooltip/archive/v2.1.1.tar.gz", + "https://github.com/PolymerElements/paper-tooltip/archive/v2.1.1.tar.gz", + ], + strip_prefix = "paper-tooltip-2.1.1", + path = "/paper-tooltip", + srcs = ["paper-tooltip.html"], + deps = [ + "@org_polymer", + "@org_polymer_neon_animation", + ], + ) + + web_library_external( + name = "org_polymer_prism", + licenses = ["notice"], # MIT + sha256 = "a703e9ada2849752ca62382e0213d09399a74cb5005eba61fd6ea281f6a606ca", + urls = [ + "http://mirror.tensorflow.org/github.com/PrismJS/prism/archive/v1.16.0.tar.gz", + "https://github.com/PrismJS/prism/archive/v1.16.0.tar.gz", + ], + strip_prefix = "prism-1.16.0", + path = "/prism", + srcs = [ + "prism.js", + "themes/prism.css", + ], + ) + + web_library_external( + name = "org_polymer_prism_element", + licenses = ["notice"], # BSD-3-Clause + sha256 = "b7c222f2f9254eae469ef6fa0baa208b376d37b33f7511a4a2471db35bdc40c7", + urls = [ + "http://mirror.tensorflow.org/github.com/PolymerElements/prism-element/archive/v2.1.0.tar.gz", + "https://github.com/PolymerElements/prism-element/archive/v2.1.0.tar.gz", + ], + strip_prefix = "prism-element-2.1.0", + path = "/prism-element", + srcs = [ + "prism-highlighter.html", + "prism-import.html", + "prism-theme-default.html", + ], + deps = [ + "@org_polymer", + "@org_polymer_prism", + ], + ) + + web_library_external( + name = "org_polymer_web_animations_js", + licenses = ["notice"], # BSD-3-Clause + sha256 = "f8bd760cbdeba131f6790bd5abe170bcbf7b1755ff58ed16d0b82fa8a7f34a7f", + urls = [ + "http://mirror.tensorflow.org/github.com/web-animations/web-animations-js/archive/2.2.1.tar.gz", + "https://github.com/web-animations/web-animations-js/archive/2.2.1.tar.gz", + ], + strip_prefix = "web-animations-js-2.2.1", + path = "/web-animations-js", + srcs = ["web-animations-next-lite.min.js"], + ) + + web_library_external( + name = "org_polymer_webcomponentsjs", + licenses = ["notice"], # BSD-3-Clause + sha256 = "c3a4082a1f6930fb149191930c05a46ddaa5c272a7d0bfa9c3af413b858d1eb2", + urls = [ + # The latest version of webcomponentsjs (2.x) only distribute in a way + # that is difficult to incorporate into our build system. Given that + # the most relevant differs betwen 1.x and 2.x is the HTMLImports + # polyfill, it is okay for TensorBoard to stay on 1.3.3. + # For more info: https://github.com/webcomponents/webcomponentsjs#changes-in-version-2x + "http://mirror.tensorflow.org/github.com/webcomponents/webcomponentsjs/archive/v1.3.3.tar.gz", + "https://github.com/webcomponents/webcomponentsjs/archive/v1.3.3.tar.gz", # 2019-04-29 + ], + strip_prefix = "webcomponentsjs-1.3.3", + path = "/webcomponentsjs", + srcs = [ + "webcomponents-lite.js", + ], + ) diff --git a/saved_models/tensorboard/third_party/portpicker.BUILD b/saved_models/tensorboard/third_party/portpicker.BUILD new file mode 100644 index 0000000000000000000000000000000000000000..a291b3ee9bb21d0f43beb02d84715f9c78ee3dc7 --- /dev/null +++ b/saved_models/tensorboard/third_party/portpicker.BUILD @@ -0,0 +1,13 @@ +# Description: +# Import of portpicker library. + +licenses(["notice"]) # BSD-like notice-style license, see LICENSE file + +exports_files(["LICENSE"]) + +py_library( + name = "org_python_pypi_portpicker", + srcs = glob(["*.py"]), + srcs_version = "PY2AND3", + visibility = ["//visibility:public"], +) diff --git a/saved_models/tensorboard/third_party/protobuf/BUILD b/saved_models/tensorboard/third_party/protobuf/BUILD new file mode 100644 index 0000000000000000000000000000000000000000..7007cdad333eae199d336d0e6fe267d110768584 --- /dev/null +++ b/saved_models/tensorboard/third_party/protobuf/BUILD @@ -0,0 +1 @@ +package(default_visibility = ["//tensorboard:internal"]) diff --git a/saved_models/tensorboard/third_party/python.bzl b/saved_models/tensorboard/third_party/python.bzl new file mode 100644 index 0000000000000000000000000000000000000000..854a5c5a3a93dc7118b7027edf6f38c0e7296e51 --- /dev/null +++ b/saved_models/tensorboard/third_party/python.bzl @@ -0,0 +1,147 @@ +# Copyright 2017 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the 'License'); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an 'AS IS' BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# TensorBoard external dependencies that are used on the python side. +# Protobuf and six were deliberately left in the top-level workspace, as they +# are used in TensorFlow as well. + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +def tensorboard_python_workspace(): + """Initialize the TensorBoard Python workspace.""" + + http_archive( + name = "org_pythonhosted_markdown", + urls = [ + "http://mirror.tensorflow.org/pypi.python.org/packages/1d/25/3f6d2cb31ec42ca5bd3bfbea99b63892b735d76e26f20dd2dcc34ffe4f0d/Markdown-2.6.8.tar.gz", + "https://pypi.python.org/packages/1d/25/3f6d2cb31ec42ca5bd3bfbea99b63892b735d76e26f20dd2dcc34ffe4f0d/Markdown-2.6.8.tar.gz", + ], + strip_prefix = "Markdown-2.6.8", + sha256 = "0ac8a81e658167da95d063a9279c9c1b2699f37c7c4153256a458b3a43860e33", + build_file = str(Label("//third_party:markdown.BUILD")), + ) + + http_archive( + name = "org_pythonhosted_urllib3", + urls = [ + "http://mirror.tensorflow.org/pypi.python.org/packages/cb/34/db09a2f1e27c6ded5dd42afb0e3e2cf6f51ace7d75726385e8a3b1993b17/urllib3-1.25.tar.gz", + "https://pypi.python.org/packages/cb/34/db09a2f1e27c6ded5dd42afb0e3e2cf6f51ace7d75726385e8a3b1993b17/urllib3-1.25.tar.gz", + "https://files.pythonhosted.org/packages/cb/34/db09a2f1e27c6ded5dd42afb0e3e2cf6f51ace7d75726385e8a3b1993b17/urllib3-1.25.tar.gz", + ], + sha256 = "f03eeb431c77b88cf8747d47e94233a91d0e0fdae1cf09e0b21405a885700266", + strip_prefix = "urllib3-1.25/src", + build_file = str(Label("//third_party:urllib3.BUILD")), + ) + + http_archive( + name = "org_html5lib", + urls = [ + "http://mirror.tensorflow.org/github.com/html5lib/html5lib-python/archive/1.0.1.tar.gz", + "https://github.com/html5lib/html5lib-python/archive/1.0.1.tar.gz", + ], + sha256 = "fabbebd6a55d07842087f13849076eeed350aa8bb6c9ec840f6a6aba9388db06", + strip_prefix = "html5lib-python-1.0.1", + build_file = str(Label("//third_party:html5lib.BUILD")), + ) + + http_archive( + name = "org_mozilla_bleach", + urls = [ + "http://mirror.tensorflow.org/github.com/mozilla/bleach/archive/v2.0.tar.gz", + "https://github.com/mozilla/bleach/archive/v2.0.tar.gz", + ], + strip_prefix = "bleach-2.0", + sha256 = "789dcf3e7daf79c4c78518c6ebafd51bbaf111ac4263a97c08cf8d6a27eda820", + build_file = str(Label("//third_party:bleach.BUILD")), + ) + + http_archive( + name = "org_pocoo_werkzeug", + urls = [ + "http://mirror.tensorflow.org/files.pythonhosted.org/packages/59/2d/b24bab64b409e22f026fee6705b035cb0698399a7b69449c49442b30af47/Werkzeug-0.15.4.tar.gz", + "https://files.pythonhosted.org/packages/59/2d/b24bab64b409e22f026fee6705b035cb0698399a7b69449c49442b30af47/Werkzeug-0.15.4.tar.gz", + ], + strip_prefix = "Werkzeug-0.15.4", + sha256 = "a0b915f0815982fb2a09161cb8f31708052d0951c3ba433ccc5e1aa276507ca6", + build_file = str(Label("//third_party:werkzeug.BUILD")), + ) + + http_archive( + name = "org_pythonhosted_webencodings", + urls = [ + "http://mirror.tensorflow.org/files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", + "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", + ], + strip_prefix = "webencodings-0.5.1", + sha256 = "b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", + build_file = str(Label("//third_party:webencodings.BUILD")), + patches = [ + # The `webencodings` PyPI package is licensed as BSD, and + # the Git repository has a LICENSE file, but this license + # file is not included in the actual .tar.gz archive + # downloaded from PyPI. This was fixed in PR #13 [1], so any + # future releases of `webencodings` should not have this + # problem. Until then, we patch in the license file by hand. + # + # [1]: https://github.com/gsnedders/python-webencodings/pull/13 + "//third_party:webencodings_license.patch", + ], + ) + + # We use `mock==1.0.0` because later versions depend on `pbr`, which + # doesn't work well in a hermetic context (it tries to look up some + # global configuration files; see GitHub pull request #2132). + # + # This dependency can go away entirely once we drop Python 2 support + # and can just depend on `unittest.mock`. + http_archive( + name = "org_pythonhosted_mock", + urls = [ + "http://mirror.tensorflow.org/files.pythonhosted.org/packages/85/60/ec8c1af81337bab0caba188b218b6758bc94f125f49062f7c5f0647749d2/mock-1.0.0.tar.gz", + "https://files.pythonhosted.org/packages/85/60/ec8c1af81337bab0caba188b218b6758bc94f125f49062f7c5f0647749d2/mock-1.0.0.tar.gz", + ], + sha256 = "2d9fbe67001d2e8f02692075257f3c11e1b0194bd838c8ce3f49b31fc6c3f033", + strip_prefix = "mock-1.0.0", + build_file = str(Label("//third_party:mock.BUILD")), + patches = [ + # `mock==1.0.0` lacks some assertion methods present in + # later versions of `mock` (see comment above for why we pin + # to this version). Patch created by diffing the pinned + # `mock.py` with GitHub head and identifying all the bits + # that looked related to the methods in question. + "//third_party:mock_call_assertions.patch", + ], + ) + + http_archive( + name = "org_pythonhosted_six", + urls = [ + "http://mirror.tensorflow.org/pypi.python.org/packages/source/s/six/six-1.13.0.tar.gz", + "https://pypi.python.org/packages/source/s/six/six-1.13.0.tar.gz", + ], + sha256 = "30f610279e8b2578cab6db20741130331735c781b56053c59c4076da27f06b66", + strip_prefix = "six-1.13.0", + build_file = str(Label("//third_party:six.BUILD")), + ) + + http_archive( + name = "org_python_pypi_portpicker", + urls = [ + "http://mirror.tensorflow.org/pypi.python.org/packages/96/48/0e1f20fdc0b85cc8722284da3c5b80222ae4036ad73210a97d5362beaa6d/portpicker-1.1.1.tar.gz", + "https://pypi.python.org/packages/96/48/0e1f20fdc0b85cc8722284da3c5b80222ae4036ad73210a97d5362beaa6d/portpicker-1.1.1.tar.gz", + ], + sha256 = "2f88edf7c6406034d7577846f224aff6e53c5f4250e3294b1904d8db250f27ec", + strip_prefix = "portpicker-1.1.1/src", + build_file = str(Label("//third_party:portpicker.BUILD")), + ) diff --git a/saved_models/tensorboard/third_party/six.BUILD b/saved_models/tensorboard/third_party/six.BUILD new file mode 100644 index 0000000000000000000000000000000000000000..93e70569ea4a813acfe0a156e12ad4e0c3f6bceb --- /dev/null +++ b/saved_models/tensorboard/third_party/six.BUILD @@ -0,0 +1,14 @@ +# Description: +# Six provides simple utilities for wrapping over differences between Python 2 +# and Python 3. + +licenses(["notice"]) # MIT + +exports_files(["LICENSE"]) + +py_library( + name = "org_pythonhosted_six", + srcs = ["six.py"], + srcs_version = "PY2AND3", + visibility = ["//visibility:public"], +) diff --git a/saved_models/tensorboard/third_party/typings.bzl b/saved_models/tensorboard/third_party/typings.bzl new file mode 100644 index 0000000000000000000000000000000000000000..6cb10350b167b09415fbb71942c73bc5b7c77d8b --- /dev/null +++ b/saved_models/tensorboard/third_party/typings.bzl @@ -0,0 +1,387 @@ +# Copyright 2017 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the 'License'); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an 'AS IS' BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# TensorBoard typing dependencies + +load("@io_bazel_rules_closure//closure:defs.bzl", "filegroup_external") + +def tensorboard_typings_workspace(): + """Add repositories for TypeScript type definitions (`.d.ts` files).""" + filegroup_external( + name = "org_definitelytyped", + licenses = ["notice"], # MIT + sha256_urls = { + "b7da645f6e5555feb7aeede73775da0023ce2257df9c8e76c9159266035a9c0d": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/ebc69904eb78f94030d5d517b42db20867f679c0/chai/chai.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/ebc69904eb78f94030d5d517b42db20867f679c0/chai/chai.d.ts", + ], + "a285ca43837c03640134d31fb64a52625f65f4a2890194414d695fbc050b289e": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/5d0f2126c8dac8fce0ff020218aea06607213b0d/google.analytics/ga.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/5d0f2126c8dac8fce0ff020218aea06607213b0d/google.analytics/ga.d.ts", + ], + # TODO(jart): Upgrade to Lodash v4 typing: Lodash package is broken + # down into small subpackages with many smaller type files. Loading + # one type file is no longer enough. + "e4cd3d5de0eb3bc7b1063b50d336764a0ac82a658b39b5cf90511f489ffdee60": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/efd40e67ff323f7147651bdbef03c03ead7b1675/lodash/lodash.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/efd40e67ff323f7147651bdbef03c03ead7b1675/lodash/lodash.d.ts", + ], + "695a03dd2ccb238161d97160b239ab841562710e5c4e42886aefd4ace2ce152e": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/ebc69904eb78f94030d5d517b42db20867f679c0/mocha/mocha.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/ebc69904eb78f94030d5d517b42db20867f679c0/mocha/mocha.d.ts", + ], + "513ccd9ee1c708881120eeacd56788fc3b3da8e5c6172b20324cebbe858803fe": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/708609e0764daeb5eb64104af7aca50c520c4e6e/sinon/sinon.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/708609e0764daeb5eb64104af7aca50c520c4e6e/sinon/sinon.d.ts", + ], + "44eba36339bd1c0792072b7b204ee926fe5ffe1e9e2da916e67ac55548e3668a": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/a872802c0c84ba98ff207d5e673a1fa867c67fd6/polymer/polymer.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/a872802c0c84ba98ff207d5e673a1fa867c67fd6/polymer/polymer.d.ts", # 2016-09-22 + ], + "7ce67447146eb2b9e9cdaaf8bf45b3209865378022cc8acf86616d3be84f6481": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/8cb9ee3fdfe352cfef672bdfdb5f9c428f915e9f/threejs/three.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/8cb9ee3fdfe352cfef672bdfdb5f9c428f915e9f/threejs/three.d.ts", # r74 @ 2016-04-06 + ], + "691756a6eb455f340c9e834de0d49fff269e7b8c1799c2454465dcd6a4435b80": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/46719185c564694c5583c4b7ad94dbb786ecad46/webcomponents.js/webcomponents.js.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/46719185c564694c5583c4b7ad94dbb786ecad46/webcomponents.js/webcomponents.js.d.ts", + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_array", + licenses = ["notice"], # MIT + sha256_urls = { + # TODO(stephanwlee): d3-array is pinned at b6746d. number[] does not + # cast to d3.ArrayLike for some reason. + "61e7abb7b1f01fbcb0cab8cf39003392f422566209edd681fbd070eaa84ca000": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/b6746d73a2ddf103c6825449ee2b0953f716d994/types/d3-array/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/b6746d73a2ddf103c6825449ee2b0953f716d994/types/d3-array/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_axis", + licenses = ["notice"], # MIT + sha256_urls = { + "6a43110a41bbf3190ef6c515fc8b932086122b7d2fd32e841f4756ba507406c3": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-axis/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-axis/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_brush", + licenses = ["notice"], # MIT + sha256_urls = { + "fb5d5bef5af05e086085892946769b9ec8c0f9217876933671038b665a6ec603": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-brush/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-brush/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_chord", + licenses = ["notice"], # MIT + sha256_urls = { + "9a06f750a483ae5ce10ceda48c5004cd918c4d803762661dca52eedfd2ed7afd": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-chord/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-chord/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_collection", + licenses = ["notice"], # MIT + sha256_urls = { + "8f6ec0925d0ba17efa0dcfea9ab8b3f73114222a569704849e8a169533ea0f95": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-collection/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-collection/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_color", + licenses = ["notice"], # MIT + sha256_urls = { + "83a206846be71cca27273fa5c39544b7d51c9aab8336ae6b5135c6b71a178bbf": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-color/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-color/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_dispatch", + licenses = ["notice"], # MIT + sha256_urls = { + "4ddaa6005cfd5fd07df24e8af735d2c1a90d896bd5cacc2f657fe8748ae25af9": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-dispatch/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-dispatch/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_drag", + licenses = ["notice"], # MIT + sha256_urls = { + "99c4e6872495378bcb768d8cc99551aaee43ba2324fd56282f8f03d81c499975": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-drag/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-drag/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_dsv", + licenses = ["notice"], # MIT + sha256_urls = { + "5fccc13fc4d3b1c6a434cb277c491ac8d47baed9baba86bdb441ee18ec5bc76e": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-dsv/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-dsv/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_ease", + licenses = ["notice"], # MIT + sha256_urls = { + "d5a9be5316b2d1823a3faa7f75de1e2c2efda5c75f0631b44a0f7b69e11f3a90": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-ease/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-ease/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_force", + licenses = ["notice"], # MIT + sha256_urls = { + "a6941d869584c8f426d5dfbe89ad0f082c104477f81c7d2fe432ccae3cc2ece8": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-force/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-force/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_format", + licenses = ["notice"], # MIT + sha256_urls = { + "b5b8cf2707e4c60ea98341e3c5c913f1af2e2bd7c61b90a8329260692fe1f694": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-format/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-format/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_hierarchy", + licenses = ["notice"], # MIT + sha256_urls = { + "eb527ec61d4a7d81db35f823104fa57cb3def41d72eaa9ce827295d440283206": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-hierarchy/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-hierarchy/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_interpolate", + licenses = ["notice"], # MIT + sha256_urls = { + "e2f3ebafe2b7c6011fe76d19f9e32d8c8b67076b39f7cfa945d543e39f3ef18f": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-interpolate/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-interpolate/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_path", + licenses = ["notice"], # MIT + sha256_urls = { + "daad2baf9dd5af11d3c3095c6fb93f7749e581943873b29b6dfc4a6f22d3d6e2": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-path/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-path/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_polygon", + licenses = ["notice"], # MIT + sha256_urls = { + "a76d53d353351cabaaca7f149a57c5ffc7d90c0f181d7f3f40e4a51424289a75": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-polygon/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-polygon/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_quadtree", + licenses = ["notice"], # MIT + sha256_urls = { + "4ebfae1202903a6d8d2ab52dede7631f2d8d277cbec8107607df7372d19ebbb6": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-quadtree/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-quadtree/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_queue", + licenses = ["notice"], # MIT + sha256_urls = { + "3d48a2e31ee7b4bc687a6b85b49bcb37e043e0dec4c83fcda8baad27fda7c114": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-queue/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-queue/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_random", + licenses = ["notice"], # MIT + sha256_urls = { + "e30e9105a9c2e11410a452a02e320aebe66a1856e6b9410035ee7b3ad7d80839": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-random/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-random/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_request", + licenses = ["notice"], # MIT + sha256_urls = { + "fc2b7c2c05498011eb039825aab76a7916698fb3e7133e278fc92ae529ae99f0": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-request/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-request/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_scale", + licenses = ["notice"], # MIT + sha256_urls = { + # TODO(stephanwlee): Pinned at ff2359 because versions after this + # upgrades to d3-scale v2 which is part of d3 v5. In d3 v5, it splits + # d3-scale into d3-scale and d3-scale-chromatic and deprecates + # d3.schemeCategory20. + "58646b85fbbeaa88ff29342e9f1a89cea2d6fa8cb1b5549dc7ec8e9f7e021894": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/ff2359e74ce1c539097e47dc586d49d348a94587/types/d3-scale/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/ff2359e74ce1c539097e47dc586d49d348a94587/types/d3-scale/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_selection", + licenses = ["notice"], # MIT + sha256_urls = { + "0e1bf1308ca27649010d5ae91783decd1337bda581b66aaa8be12060110662fa": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-selection/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-selection/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_shape", + licenses = ["notice"], # MIT + sha256_urls = { + "47c61d4d8ba88c113fe9f3b37585656c66eddd95262554108a6507674a6c3b3a": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-shape/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-shape/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_time", + licenses = ["notice"], # MIT + sha256_urls = { + "39fb4b2ad57ef393eabd017356f05854a44268a6b98cd2b235c8732fb9989d83": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-time/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-time/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_timer", + licenses = ["notice"], # MIT + sha256_urls = { + "79021d12162bdd6a850ce4c1a9014b342067db30816f907d4118578c2a59db76": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-timer/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-timer/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_transition", + licenses = ["notice"], # MIT + sha256_urls = { + "88e6d462d5a592a2ebbdad7865142160341c93698c50701c4186bcb65a7685a7": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-transition/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-transition/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_voronoi", + licenses = ["notice"], # MIT + sha256_urls = { + "8936e0e6b0f0416c4c08f79e1555869a8553dc04723c4d8fa12990e755f460f5": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-voronoi/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-voronoi/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_d3_zoom", + licenses = ["notice"], # MIT + sha256_urls = { + "65ea463a1297778ebf88e37444722bacd4d33db9a59ac69e78127e1c23670dd3": [ + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-zoom/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/526dd2e57684fa586452445a181d37369533d02e/types/d3-zoom/index.d.ts", # 2018-08-06 + ], + }, + ) + + filegroup_external( + name = "org_definitelytyped_types_sinon_chai", + licenses = ["notice"], # MIT + sha256_urls = { + "ec72d630fc807ae2cc25d0cf707ed77cca55e08d058f591a9eb4257cd6229d98": [ + # Version of sinon-chai is tied to that of web-component-tester. + "http://mirror.tensorflow.org/raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/b4715b48d6a64a288f4ca6d0d2efcbffb36dd1cf/types/sinon-chai/v2/index.d.ts", + "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/b4715b48d6a64a288f4ca6d0d2efcbffb36dd1cf/types/sinon-chai/v2/index.d.ts", # 2019-06-05 + ], + }, + ) diff --git a/saved_models/tensorboard/third_party/urllib3.BUILD b/saved_models/tensorboard/third_party/urllib3.BUILD new file mode 100644 index 0000000000000000000000000000000000000000..0de3202603710a2560fae4c0494563d3f3c89dd0 --- /dev/null +++ b/saved_models/tensorboard/third_party/urllib3.BUILD @@ -0,0 +1,14 @@ +# Description: +# urllib3, another url library + +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) # MIT + +exports_files(["LICENSE.md"]) + +py_library( + name = "org_pythonhosted_urllib3", + srcs = glob(["urllib3/**/*.py"]), + srcs_version = "PY2AND3", +) diff --git a/saved_models/tensorboard/third_party/webencodings.BUILD b/saved_models/tensorboard/third_party/webencodings.BUILD new file mode 100644 index 0000000000000000000000000000000000000000..64bb4a8f94f35e06705188e8d5af4aa21d8fee59 --- /dev/null +++ b/saved_models/tensorboard/third_party/webencodings.BUILD @@ -0,0 +1,18 @@ +# Description: +# Character encoding aliases for legacy web content + +licenses(["notice"]) # BSD + +exports_files(["LICENSE"]) + +py_library( + name = "org_pythonhosted_webencodings", + srcs = [ + "webencodings/__init__.py", + "webencodings/labels.py", + "webencodings/mklabels.py", + "webencodings/x_user_defined.py", + ], + srcs_version = "PY2AND3", + visibility = ["//visibility:public"], +) diff --git a/saved_models/tensorboard/third_party/webencodings_license.patch b/saved_models/tensorboard/third_party/webencodings_license.patch new file mode 100644 index 0000000000000000000000000000000000000000..58ac4aeeb9da8d048eb9877c9f8fa1bf84ff0c56 --- /dev/null +++ b/saved_models/tensorboard/third_party/webencodings_license.patch @@ -0,0 +1,34 @@ +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ LICENSE 2012-12-06 23:02:28.000000000 +0100 +@@ -0,0 +1,31 @@ ++Copyright (c) 2012 by Simon Sapin. ++ ++Some rights reserved. ++ ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++ ++ * Redistributions of source code must retain the above copyright ++ notice, this list of conditions and the following disclaimer. ++ ++ * Redistributions in binary form must reproduce the above ++ copyright notice, this list of conditions and the following ++ disclaimer in the documentation and/or other materials provided ++ with the distribution. ++ ++ * The names of the contributors may not be used to endorse or ++ promote products derived from this software without specific ++ prior written permission. ++ ++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ++"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ++LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ++A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ++OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ++SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ++LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ++DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ++THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ++OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/saved_models/tensorboard/third_party/werkzeug.BUILD b/saved_models/tensorboard/third_party/werkzeug.BUILD new file mode 100644 index 0000000000000000000000000000000000000000..41688ab579e59720acf6da12e995f23bdb29bb5f --- /dev/null +++ b/saved_models/tensorboard/third_party/werkzeug.BUILD @@ -0,0 +1,14 @@ +# Description: +# Werkzeug provides utilities for making WSGI applications + +licenses(["notice"]) # BSD 3-Clause + +exports_files(["LICENSE"]) + +# Note: this library includes test code. Consider creating a testonly target. +py_library( + name = "org_pocoo_werkzeug", + srcs = glob(["werkzeug/**/*.py"]), + srcs_version = "PY2AND3", + visibility = ["//visibility:public"], +) diff --git a/saved_models/tensorboard/third_party/workspace.bzl b/saved_models/tensorboard/third_party/workspace.bzl new file mode 100644 index 0000000000000000000000000000000000000000..9b6c344ed4d27d099315d4af5eb2966f96668be5 --- /dev/null +++ b/saved_models/tensorboard/third_party/workspace.bzl @@ -0,0 +1,107 @@ +# Copyright 2017 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the 'License'); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an 'AS IS' BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +TensorBoard external dependencies that can be loaded in WORKSPACE files. +""" + +load("@bazel_tools//tools/build_defs/repo:java.bzl", "java_import_external") +load("@io_bazel_rules_webtesting//web/internal:platform_http_file.bzl", "platform_http_file") # buildifier: disable=bzl-visibility +load("@npm_bazel_typescript//:index.bzl", "ts_setup_workspace") +load("//third_party:fonts.bzl", "tensorboard_fonts_workspace") +load("//third_party:polymer.bzl", "tensorboard_polymer_workspace") +load("//third_party:python.bzl", "tensorboard_python_workspace") +load("//third_party:js.bzl", "tensorboard_js_workspace") +load("//third_party:typings.bzl", "tensorboard_typings_workspace") + +def tensorboard_workspace(name = ""): + """Add repositories needed to build TensorBoard. + + Args: + name: name of Bazel rule passed to this macro. The value is ignored. + """ + tensorboard_fonts_workspace() + tensorboard_polymer_workspace() + tensorboard_python_workspace() + tensorboard_typings_workspace() + tensorboard_js_workspace() + + # Set up TypeScript toolchain. + ts_setup_workspace() + + # Protobuf's BUILD file depends on //external:six. + native.bind( + name = "six", + actual = "@org_pythonhosted_six", + ) + + platform_http_file( + name = "org_chromium_chromium", # pinned to Chromium 84.0.4147.0 + licenses = ["notice"], # BSD 3-clause (maybe more?) + amd64_sha256 = + "49b25bf32b797558eb7957ac7c60e065433bdef278f669291f71edd329505e27", + amd64_urls = [ + "https://commondatastorage.googleapis.com/chromium-browser-snapshots/Linux_x64/768959/chrome-linux.zip", + ], + macos_sha256 = + "f0c7dc5c26061e2f179d1cb9819cb786d2c37cca9f53155e57ac2b6ab60c5cbc", + macos_urls = [ + "https://commondatastorage.googleapis.com/chromium-browser-snapshots/Mac/768938/chrome-mac.zip", + ], + windows_sha256 = + "f441a079046a35afc249a95d29356f33945c0a60b59236b9cf6db532c69dba6f", + windows_urls = [ + "https://commondatastorage.googleapis.com/chromium-browser-snapshots/Win_x64/768952/chrome-win.zip", + ], + ) + + platform_http_file( + name = "org_chromium_chromedriver", + licenses = ["reciprocal"], # BSD 3-clause, ICU, MPL 1.1, libpng (BSD/MIT-like), Academic Free License v. 2.0, BSD 2-clause, MIT + amd64_sha256 = + "71eafe087900dbca4bc0b354a1d172df48b31a4a502e21f7c7b156d7e76c95c7", + amd64_urls = [ + "https://chromedriver.storage.googleapis.com/2.41/chromedriver_linux64.zip", + ], + macos_sha256 = + "fd32a27148f44796a55f5ce3397015c89ebd9f600d9dda2bcaca54575e2497ae", + macos_urls = [ + "https://chromedriver.storage.googleapis.com/2.41/chromedriver_mac64.zip", + ], + windows_sha256 = + "a8fa028acebef7b931ef9cb093f02865f9f7495e49351f556e919f7be77f072e", + windows_urls = [ + "https://chromedriver.storage.googleapis.com/2.38/chromedriver_win32.zip", + ], + ) + + java_import_external( + name = "org_apache_commons_lang3", + jar_sha256 = "de2e1dcdcf3ef917a8ce858661a06726a9a944f28e33ad7f9e08bea44dc3c230", + jar_urls = [ + "http://mirror.tensorflow.org/repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar", + "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar", + ], + licenses = ["notice"], # Apache 2.0 + ) + + java_import_external( + name = "org_apache_commons_text", + jar_sha256 = "df45e56549b63e0fe716953c9d43cc158f8bf008baf60498e7c17f3faa00a70b", + jar_urls = [ + "http://mirror.tensorflow.org/repo1.maven.org/maven2/org/apache/commons/commons-text/1.6/commons-text-1.6.jar", + "https://repo1.maven.org/maven2/org/apache/commons/commons-text/1.6/commons-text-1.6.jar", + ], + licenses = ["notice"], # Apache 2.0 + ) diff --git a/saved_models/tensorboard/tsconfig-lax.json b/saved_models/tensorboard/tsconfig-lax.json new file mode 100644 index 0000000000000000000000000000000000000000..e7cefb1d6067b798238bec213029950541cb3595 --- /dev/null +++ b/saved_models/tensorboard/tsconfig-lax.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "downlevelIteration": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "importHelpers": true, + "inlineSourceMap": true, + "inlineSources": true, + "lib": ["dom", "es2020"], + "moduleResolution": "node", + "noEmitOnError": false, + "noErrorTruncation": false, + "noResolve": true, + "preserveConstEnums": false, + "skipLibCheck": true, + "sourceMap": false, + "target": "es5" + } +} diff --git a/saved_models/tensorboard/tsconfig-test.json b/saved_models/tensorboard/tsconfig-test.json new file mode 100644 index 0000000000000000000000000000000000000000..f6a827adabc2492697b34392c6901a9bd885f456 --- /dev/null +++ b/saved_models/tensorboard/tsconfig-test.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "importHelpers": true, + "types": ["jasmine"] + } +} diff --git a/saved_models/tensorboard/tsconfig.json b/saved_models/tensorboard/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..aa47ce86415aad03ccc765cb30e3b3c88d8e1190 --- /dev/null +++ b/saved_models/tensorboard/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "downlevelIteration": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "importHelpers": true, + "inlineSourceMap": true, + "lib": ["dom", "es2020", "dom.iterable"], + "moduleResolution": "node", + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "skipLibCheck": true, + "strict": true, + // Don't scan the node_modules/@types folder for ambient types. + // This would force us to have all the types in the dependencies of + // each library. + // Instead we'll be explicit about declaring ambient type dependencies + // using the /// syntax. + "types": [] + } +} diff --git a/saved_models/tensorboard/webpack.config.js b/saved_models/tensorboard/webpack.config.js new file mode 100644 index 0000000000000000000000000000000000000000..6c7d81e6ca4559a59dd7550fd35cafb6f7c85801 --- /dev/null +++ b/saved_models/tensorboard/webpack.config.js @@ -0,0 +1,27 @@ +const path = require('path'); +const TerserPlugin = require('terser-webpack-plugin'); + +module.exports = { + mode: 'production', + entry: 'tensorboard/plugins/projector/vz_projector/bundle.ts', // Adjust this path to your main TypeScript file + output: { + filename: 'bundle.min.js', + path: path.resolve(__dirname, 'shrink-bin'), // Adjust this path to where you want your output + }, + module: { + rules: [ + { + test: /\.ts$/, + use: 'ts-loader', + exclude: /node_modules/, + }, + ], + }, + resolve: { + extensions: ['.ts', '.js'], + }, + optimization: { + minimize: true, + minimizer: [new TerserPlugin()], + }, +}; diff --git a/saved_models/tensorboard/yarn.lock b/saved_models/tensorboard/yarn.lock new file mode 100644 index 0000000000000000000000000000000000000000..f7c57a97d8e5d86644d99c8ce7ba15d5bd45597d --- /dev/null +++ b/saved_models/tensorboard/yarn.lock @@ -0,0 +1,6373 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@angular-devkit/architect@0.901.12": + version "0.901.12" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.901.12.tgz#e0f78b7282f851d27af6802dc7a261022421b2d5" + integrity sha512-gLlsxa+3JPV1m1gRvRMujOs4xKox6I5BkYmOD1zfu+dB6y3LuBAvHfXA6FaTDVOMBrmSlWnE4PmOmB6xd7wxMA== + dependencies: + "@angular-devkit/core" "9.1.12" + rxjs "6.5.4" + +"@angular-devkit/core@9.1.12": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-9.1.12.tgz#7cebce51918fe7f3462d8c58c9fbd5a3e2c3b3e7" + integrity sha512-D/GnBeSlmdgGn7EhuE32HuPuRAjvUuxi7Q6WywBI8PSsXKAGnrypghBwMATNnOA24//CgbW2533Y9VWHaeXdeA== + dependencies: + ajv "6.12.3" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.5.4" + source-map "0.7.3" + +"@angular-devkit/schematics@9.1.12": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-9.1.12.tgz#bbf457f1b35941fddeeb1ee77336dd04ca60b8ba" + integrity sha512-+GYnUzmIy1/QpYitCC8mI7jcrViGHTtOKvvDPEFjU2nggjNEQaMmsHcdIsjrqggEc23ZZyebNAIewT8CMkJyrQ== + dependencies: + "@angular-devkit/core" "9.1.12" + ora "4.0.3" + rxjs "6.5.4" + +"@angular/animations@^9.0.0": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-9.1.12.tgz#1c9c1a792be4b52b196cab1e5c88bd319b60716d" + integrity sha512-tphpf9QHnOPoL2Jl7KpR+R5aHNW3oifLEmRUTajJYJGvo1uzdUDE82+V9OGOinxJsYseCth9gYJhN24aYTB9NA== + +"@angular/bazel@^9.0.0": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/bazel/-/bazel-9.1.12.tgz#93a952c1fe45554ae187e8fb078293aca22fe308" + integrity sha512-lQYQzGDjkYNkASUJm8IkZOy1BldWm/WQGuH3qh8vRWMChGVC9j8xx1xpuFqKrEBYhI16DnLMDMNe+1ELnsLFIg== + dependencies: + "@microsoft/api-extractor" "^7.3.9" + shelljs "0.8.2" + tsickle "^0.38.0" + +"@angular/cdk@^9.0.0": + version "9.2.4" + resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-9.2.4.tgz#8413958bd275e4c34be3b96f56444671dd30ba93" + integrity sha512-iw2+qHMXHYVC6K/fttHeNHIieSKiTEodVutZoOEcBu9rmRTGbLB26V/CRsfIRmA1RBk+uFYWc6UQZnMC3RdnJQ== + optionalDependencies: + parse5 "^5.0.0" + +"@angular/cli@^9.1.2": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-9.1.12.tgz#c6e41c80c387200766fc52a6b42fde869dcc0cef" + integrity sha512-B0yOab5WbD84bIRRUKOPAJnpka8Qj+CRt61wJfjsqpd/Rj7pD/3ubmdCNoBH7Xa6UlOb0tdYqRPsqfK7uEL0sw== + dependencies: + "@angular-devkit/architect" "0.901.12" + "@angular-devkit/core" "9.1.12" + "@angular-devkit/schematics" "9.1.12" + "@schematics/angular" "9.1.12" + "@schematics/update" "0.901.12" + "@yarnpkg/lockfile" "1.1.0" + ansi-colors "4.1.1" + debug "4.1.1" + ini "1.3.5" + inquirer "7.1.0" + npm-package-arg "8.0.1" + npm-pick-manifest "6.0.0" + open "7.0.3" + pacote "9.5.12" + read-package-tree "5.3.1" + rimraf "3.0.2" + semver "7.1.3" + symbol-observable "1.2.0" + universal-analytics "0.4.20" + uuid "7.0.2" + +"@angular/common@^9.0.0": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-9.1.12.tgz#731701fae63ae8e2ee2ce00e7d51f458ecd00c7c" + integrity sha512-XSIqkbM6VV1yixF9zuzeE5eqN1VsiXS517K2VU0XgCRSAzhVhLOeKsdYjeLf7PdSu/HgW/Tr81H+isi9A9I0YA== + +"@angular/compiler-cli@^9.0.0": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-9.1.12.tgz#37ba1a8b483ab1382414d0a13a35a1fd2020abd1" + integrity sha512-bbqJ+fbY+aQejSYuHUjE1qYJCXkZBM5Hru9eN7m/j376u83MQ5jWdC290uYx+ipsXcPTa/YRZ44jpL+5cCzIrg== + dependencies: + canonical-path "1.0.0" + chokidar "^3.0.0" + convert-source-map "^1.5.1" + dependency-graph "^0.7.2" + fs-extra "4.0.2" + magic-string "^0.25.0" + minimist "^1.2.0" + reflect-metadata "^0.1.2" + semver "^6.3.0" + source-map "^0.6.1" + sourcemap-codec "^1.4.8" + yargs "15.3.0" + +"@angular/compiler@^9.0.0": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-9.1.12.tgz#3066a637bfe09642dd5c4a4dd029e7a771988311" + integrity sha512-suefk0OFkaJpUUKnV+phbL4T8fmVGHvzkereY5eqybQlumOez8NPL1PJcygAylh/E6OIAYm8SWookYwM6ZY9dg== + +"@angular/core@^9.0.0": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-9.1.12.tgz#e7e10f72f84f0787551424ad86279436e0b5edbe" + integrity sha512-WVA/eh3fzjx0apOzkKot4YRRUsGkHj50zFQWrAOMgivGaj1YVrvhf+m3hpglj5fn/BkLiFDl8RT0wAE8z9X+gQ== + +"@angular/forms@^9.0.0": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-9.1.12.tgz#8ae7ac480031e1e4097eeff9b45f5e6d2cce6b7c" + integrity sha512-LhjnZlC4WEsEsAJfOZLte+Lks3WBAFVeRv2lzoQNFVr/IMzBNDVfjEaaSqKF1cei3cjY39Df2nYDMJM7HfqbJA== + +"@angular/http@^7.2.16": + version "7.2.16" + resolved "https://registry.npmmirror.com/@angular/http/-/http-7.2.16.tgz#f05337dd56faa86ce05b0dc378218a00fb337040" + integrity sha512-yvjbNyzFSmmz4UTjCdy5M8mk0cZqf9TvSf8yN5UVIwtw4joyuUdlgJCuin0qSbQOKIf/JjHoofpO2JkPCGSNww== + dependencies: + tslib "^1.9.0" + +"@angular/localize@^9.1.7": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-9.1.12.tgz#60377a644c620be4ac408b77db9c547f44ac1514" + integrity sha512-31OalfES+dLrxN0VXCxxtT5dWoOSlQ40KYmzMS8X+mQ20gy9eFiZK4qf3DEq3JPqRltBMdEDnwR38uGIMAu2gQ== + dependencies: + "@babel/core" "7.8.3" + glob "7.1.2" + yargs "15.3.0" + +"@angular/material@^9.0.0": + version "9.2.4" + resolved "https://registry.yarnpkg.com/@angular/material/-/material-9.2.4.tgz#2666ef606fbb88d60f8e2f18c5e4f94a3dd572d8" + integrity sha512-LkoTXE6B0slvMhvfZDdPWaz4yaYLkaAp5VSPunI9pxGsPxzqEV9e210wC1/sjG/76Nk8Ep7/2z9XKac8Q9bMwA== + +"@angular/platform-browser-dynamic@^9.0.0": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-9.1.12.tgz#332935d5ec4b44daaad1beae496dd994e2847a03" + integrity sha512-NmwUZaQeMnA6f+vP9Fp9P+qjL72H8dKlxLS76ujlKHVf75pP5oahWS8wfl7KXel1tKW3FQWMMffmKf5/NHRiSw== + +"@angular/platform-browser@^9.0.0": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-9.1.12.tgz#f99fc360c40efd013677cc9ef4ead13425084a91" + integrity sha512-rPa/hJcLfdId6bYB0b6pFUo3QIgjZlvUlmtKMGdrLNLYR8XQxPa2Y/UdN/5YeZ12htGw6GXrX9U8U7nTbUSpkw== + +"@angular/router@^9.0.0": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-9.1.12.tgz#4f7fc170e1e7ef72ca1714dbc7a3888aedc33f2d" + integrity sha512-+qCaXa9y0nsRhzjAYBqmGoQ2YkrdXgftZwuFDf6t4qEi30EXa0oS97KrlFq0M5GKdLIDGrbUm9PcdHSTOI+ZhA== + +"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/core@7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.3.tgz#30b0ebb4dd1585de6923a0b4d179e0b9f5d82941" + integrity sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.3" + "@babel/helpers" "^7.8.3" + "@babel/parser" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.10.5", "@babel/generator@^7.8.3": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.5.tgz#1b903554bc8c583ee8d25f1e8969732e6b829a69" + integrity sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig== + dependencies: + "@babel/types" "^7.10.5" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-split-export-declaration@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz#2c70576eaa3b5609b24cb99db2888cc3fc4251d1" + integrity sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helpers@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" + integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.10.4", "@babel/parser@^7.10.5", "@babel/parser@^7.8.3": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.5.tgz#e7c6bf5a7deff957cec9f04b551e2762909d826b" + integrity sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ== + +"@babel/template@^7.10.4", "@babel/template@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.10.4", "@babel/traverse@^7.8.3": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.5.tgz#77ce464f5b258be265af618d8fddf0536f20b564" + integrity sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.10.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/parser" "^7.10.5" + "@babel/types" "^7.10.5" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.8.3": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.5.tgz#d88ae7e2fde86bfbfe851d4d81afa70a997b5d15" + integrity sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@bazel/bazel-darwin_x64@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@bazel/bazel-darwin_x64/-/bazel-darwin_x64-2.1.0.tgz#c36c37080841618f142996884f07ac0e3d6a9598" + integrity sha512-9waB/6UT6JmQh8qxlRK9IfSY4Ef+4iGwy5eYK2hoc1zXYDnnZoZoC4eXiq68cWTpyCcT7SNGEb9B3wL5Y5rA9A== + +"@bazel/bazel-linux_x64@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@bazel/bazel-linux_x64/-/bazel-linux_x64-2.1.0.tgz#3185cc3d2533641d6a539bf613247d628425ebf0" + integrity sha512-ag6ZwYMJblf1YuPhNRAMyCYf164mY8jhdIwPSVFI1CMiBRnSDJBkSg7rVIczPh+8Gp7TDqAno9MMTnfUXzxogA== + +"@bazel/bazel-win32_x64@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@bazel/bazel-win32_x64/-/bazel-win32_x64-2.1.0.tgz#013960fe506ddb8dc08f5d54b52420c818eb4264" + integrity sha512-Y6cs3frmCqoAsrDmEp0msyS8VYE13JvjVoyvdIXTOh5Cc4fOeWzSPb02VS08asaV1jCnOQbv15Ud286hcxAvxg== + +"@bazel/bazel@2.1": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@bazel/bazel/-/bazel-2.1.0.tgz#25a4d3b4171bfb637374133d29878bbcb36b4c92" + integrity sha512-3Dhs0uJ69ImqC+VIRcifnptPXytxCNWHqyTMFYf0F5AJCVHHW7uRE0tt3Vhm5BseFpdOsjqcghgxGzR/yo10qw== + dependencies: + "@bazel/hide-bazel-files" latest + optionalDependencies: + "@bazel/bazel-darwin_x64" "2.1.0" + "@bazel/bazel-linux_x64" "2.1.0" + "@bazel/bazel-win32_x64" "2.1.0" + +"@bazel/hide-bazel-files@latest": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@bazel/hide-bazel-files/-/hide-bazel-files-1.7.0.tgz#7cb140c23c4269d6464c24be0a2acf0241d2a31d" + integrity sha512-pvdyRX/EsU8n+oElFb+OZ9i5M48HNFR+Z4D3vc0qDGiJ8oly9fZcUb2gbw4CzyeovJz0IzjSxjqMS6cp5gKoeg== + +"@bazel/ibazel@^0.12.4": + version "0.12.4" + resolved "https://registry.yarnpkg.com/@bazel/ibazel/-/ibazel-0.12.4.tgz#ddda7c8ead6e29dc8d637af446086a750f395218" + integrity sha512-FzOy+esB/fXVDbAmL6Ce2yCEy+PESZih8GypKhi0B8XzoZHAAn3QNnQcMNwo9PrIfp3G1989nM/JQ1b8jwEinQ== + +"@bazel/jasmine@^1.6.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@bazel/jasmine/-/jasmine-1.7.0.tgz#429df76e6628aa139176340434729cc091e371d7" + integrity sha512-LXq6nfBBEczjsDLwFW9kesGdewRrnFiAOZzXAAivCV3xtq516xK4QnVWA9tQGq+R1DnY50IaODpCJhh8PDezdg== + dependencies: + jasmine "~3.5.0" + jasmine-core "~3.5.0" + jasmine-reporters "~2.3.2" + v8-coverage "1.0.9" + +"@bazel/karma@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@bazel/karma/-/karma-1.6.0.tgz#98950b71114dd9ec169e6778a35d31ae1f578655" + integrity sha512-9cX0E1SiMWwA70ZMFnMzeqSRn3biduGx03bGV77FSUYKocZpyfU2cOEygYGfxAqHnyM7x4cS8nflRv3+ZE0Aqg== + dependencies: + tmp "0.1.0" + +"@bazel/protractor@^1.6.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@bazel/protractor/-/protractor-1.7.0.tgz#1ced325a64d77bccca4bf881e62982d017d6b639" + integrity sha512-sLbejWwmwTupCS3JKdBeiZMUbylLpJxJdlrz8sZ9t4KV6YiFAXNOloCScrrdOkeiJz5QQZRG3p3rqHbIszUAwQ== + +"@bazel/rollup@^1.6.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@bazel/rollup/-/rollup-1.7.0.tgz#5c0f0d51d2f3f14e78781a4b9e6a9ffba87f1579" + integrity sha512-Pp5aCJw3gwu77zn6/fQgZ39ArrWEI5O3dja5wKadBnfOQ66PImIEr+bf7JgROoWvACH1kGxaS423rq51fiuCsA== + +"@bazel/terser@^1.6.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@bazel/terser/-/terser-1.7.0.tgz#c43e711e13b9a71c7abd3ade04fb4650d547ad01" + integrity sha512-u/UXk0WUinvkk1g5xxfqGieBz3r12Bj2y2m25lC5GjHBgCpGk7DyeGGi9H3QQNO1Wmpw51QSE9gaPzKzjUVGug== + +"@bazel/typescript@^1.6.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-1.7.0.tgz#8dc02b8a161f4fff3285186066b5f73666793452" + integrity sha512-M6JPXJZ+W6457QZfPHmGg/Mejnp7//YTnffGmnmeK9vDqybXeCCRWW1/iEOwopLJYQViBHfaoulde0VXelx9sA== + dependencies: + protobufjs "6.8.8" + semver "5.6.0" + source-map-support "0.5.9" + tsutils "2.27.2" + +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.3": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.22" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" + integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@microsoft/api-extractor-model@7.8.12": + version "7.8.12" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.8.12.tgz#d089193ef29275b8b20802498c6bdfab80dcef59" + integrity sha512-lE9xcNStS2hf5K+ZQy4L9DQ9Xd62bNsMqW+SyPQWXuQ5HJqUBSXJ2yxCWXP/+rcAkFCvZrikbql9M8Z88nKvwQ== + dependencies: + "@microsoft/tsdoc" "0.12.19" + "@rushstack/node-core-library" "3.25.0" + +"@microsoft/api-extractor@^7.3.9": + version "7.9.2" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.9.2.tgz#3bb8c93f4280fcb94171e4214d714e1639f4fbd4" + integrity sha512-R4b3zXlYdicoS8bRLXEChTKLPyhUHrG1cb0GDtOX0zdoxlovU1p0JaPt97A/vC7N3Gm2E8gd2qsDWElKU3/wKQ== + dependencies: + "@microsoft/api-extractor-model" "7.8.12" + "@microsoft/tsdoc" "0.12.19" + "@rushstack/node-core-library" "3.25.0" + "@rushstack/ts-command-line" "4.4.6" + colors "~1.2.1" + lodash "~4.17.15" + resolve "~1.17.0" + semver "~7.3.0" + source-map "~0.6.1" + typescript "~3.9.5" + +"@microsoft/tsdoc@0.12.19": + version "0.12.19" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.12.19.tgz#2173ccb92469aaf62031fa9499d21b16d07f9b57" + integrity sha512-IpgPxHrNxZiMNUSXqR1l/gePKPkfAmIKoDRP9hp7OwjU29ZR8WCJsOJ8iBKgw0Qk+pFwR+8Y1cy8ImLY6e9m4A== + +"@ngrx/effects@^9.0.0": + version "9.2.0" + resolved "https://registry.yarnpkg.com/@ngrx/effects/-/effects-9.2.0.tgz#155bfcfd528aa993fd19f60f9536385984a80910" + integrity sha512-8V09zDIPehGpzgfcgyczelovsVYJvDQhN9wHt37K5A+YCG0CI8nj8FmKokHATwv/S62YqFrOVnr/TZacxpDhBw== + +"@ngrx/store@^9.0.0": + version "9.2.0" + resolved "https://registry.yarnpkg.com/@ngrx/store/-/store-9.2.0.tgz#39f663f98b5332b33c8d197be3ab08bafd85bc88" + integrity sha512-V8AI3mxbMztVpbZpALkLZYlGkofKcu9GaOCY5e+sZ1VcJ90oxhFjBpnmd6MuVdmhep1XAHALb1B8ZbBFn+xsgQ== + +"@polymer/decorators@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@polymer/decorators/-/decorators-3.0.0.tgz#e4212ac976d9abd1210f560b6e1be4165c1c0183" + integrity sha512-qh+VID9nDV9q3ABvIfWgm7/+udl7v2HKsMLPXFm8tj1fI7qr7yWJMFwS3xWBkMmuNPtmkS8MDP0vqLAQIEOWzg== + dependencies: + "@polymer/polymer" "^3.0.5" + +"@polymer/font-roboto@^3.0.1": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@polymer/font-roboto/-/font-roboto-3.0.2.tgz#80cdaa7225db2359130dfb2c6d9a3be1820020c3" + integrity sha512-tx5TauYSmzsIvmSqepUPDYbs4/Ejz2XbZ1IkD7JEGqkdNUJlh+9KU85G56Tfdk/xjEZ8zorFfN09OSwiMrIQWA== + +"@polymer/iron-a11y-announcer@^3.0.0", "@polymer/iron-a11y-announcer@^3.0.0-pre.26": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@polymer/iron-a11y-announcer/-/iron-a11y-announcer-3.1.0.tgz#3d3712a165070ed3cdfc39e54f95515c913c9613" + integrity sha512-lc5i4NKB8kSQHH0Hwu8WS3ym93m+J69OHJWSSBxwd17FI+h2wmgxDzeG9LI4ojMMck17/uc2pLe7g/UHt5/K/A== + dependencies: + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-a11y-keys-behavior@^3.0.0", "@polymer/iron-a11y-keys-behavior@^3.0.0-pre.26": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/iron-a11y-keys-behavior/-/iron-a11y-keys-behavior-3.0.1.tgz#2868ea72912d2007ffab4734684a91f5aac49b84" + integrity sha512-lnrjKq3ysbBPT/74l0Fj0U9H9C35Tpw2C/tpJ8a+5g8Y3YJs1WSZYnEl1yOkw6sEyaxOq/1DkzH0+60gGu5/PQ== + dependencies: + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-autogrow-textarea@^3.0.0-pre.26": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@polymer/iron-autogrow-textarea/-/iron-autogrow-textarea-3.0.3.tgz#b75dbebc23ce47d428a26156709d4a8a4c05823e" + integrity sha512-5r0VkWrIlm0JIp5E5wlnvkw7slK72lFRZXncmrsLZF+6n1dg2rI8jt7xpFzSmUWrqpcyXwyKaGaDvUjl3j4JLA== + dependencies: + "@polymer/iron-behaviors" "^3.0.0-pre.26" + "@polymer/iron-flex-layout" "^3.0.0-pre.26" + "@polymer/iron-validatable-behavior" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-behaviors@^3.0.0-pre.26", "@polymer/iron-behaviors@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/iron-behaviors/-/iron-behaviors-3.0.1.tgz#a3b6f876779a7f0a91a15e4423890968b6525901" + integrity sha512-IMEwcv1lhf1HSQxuyWOUIL0lOBwmeaoSTpgCJeP9IBYnuB1SPQngmfRuHKgK6/m9LQ9F9miC7p3HeQQUdKAE0w== + dependencies: + "@polymer/iron-a11y-keys-behavior" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-checked-element-behavior@^3.0.0-pre.26": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/iron-checked-element-behavior/-/iron-checked-element-behavior-3.0.1.tgz#7a4b49646603657ab2c5e5ca7bd97f34444fdaf5" + integrity sha512-aDr0cbCNVq49q+pOqa6CZutFh+wWpwPMLpEth9swx+GkAj+gCURhuQkaUYhIo5f2egDbEioR1aeHMnPlU9dQZA== + dependencies: + "@polymer/iron-form-element-behavior" "^3.0.0-pre.26" + "@polymer/iron-validatable-behavior" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-collapse@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/iron-collapse/-/iron-collapse-3.0.1.tgz#6417c84f5405ed909187765d9242e3b87ba4626f" + integrity sha512-yg6q5ZyckQR9VL9VmLrSTkSFXWy9AcJC8KtnD5cg0EHRPbakE8I9S/gVAgeP4nMWV2a/BjLLC4IBygcCMDhAGw== + dependencies: + "@polymer/iron-resizable-behavior" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-dropdown@^3.0.0-pre.26": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/iron-dropdown/-/iron-dropdown-3.0.1.tgz#c573faa1a08c179d201ae877c1c726018314bff3" + integrity sha512-22yLhepfcKjuQMfFmRHi/9MPKTqkzgRrmWWW0P5uqK++xle53k2QBO5VYUAYiCN3ZcxIi9lEhZ9YWGeQj2JBig== + dependencies: + "@polymer/iron-behaviors" "^3.0.0-pre.26" + "@polymer/iron-overlay-behavior" "^3.0.0-pre.27" + "@polymer/neon-animation" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-fit-behavior@^3.0.0-pre.26": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@polymer/iron-fit-behavior/-/iron-fit-behavior-3.0.2.tgz#2ec460d8a6b0151394b55631a72a68b92e14e2e0" + integrity sha512-JndryJYbBR3gSN5IlST4rCHsd01+OyvYpRO6z5Zd3C6u5V/m07TwAtcf3aXwZ8WBNt2eLG28OcvdSO7XR2v2pg== + dependencies: + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-flex-layout@^3.0.0-pre.26", "@polymer/iron-flex-layout@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/iron-flex-layout/-/iron-flex-layout-3.0.1.tgz#36f9e1a8eb792d279b2bc75d362628721ad37f0c" + integrity sha512-7gB869czArF+HZcPTVSgvA7tXYFze9EKckvM95NB7SqYF+NnsQyhoXgKnpFwGyo95lUjUW9TFDLUwDXnCYFtkw== + dependencies: + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-form-element-behavior@^3.0.0-pre.26": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/iron-form-element-behavior/-/iron-form-element-behavior-3.0.1.tgz#4c79e1981d7796ce659e997f3b8f5e14b4a075a4" + integrity sha512-G/e2KXyL5AY7mMjmomHkGpgS0uAf4ovNpKhkuUTRnMuMJuf589bKqE85KN4ovE1Tzhv2hJoh/igyD6ekHiYU1A== + dependencies: + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-icon@^3.0.0", "@polymer/iron-icon@^3.0.0-pre.26", "@polymer/iron-icon@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/iron-icon/-/iron-icon-3.0.1.tgz#93211c39d8825fe4965a68419566036c1df291eb" + integrity sha512-QLPwirk+UPZNaLnMew9VludXA4CWUCenRewgEcGYwdzVgDPCDbXxy6vRJjmweZobMQv/oVLppT2JZtJFnPxX6g== + dependencies: + "@polymer/iron-flex-layout" "^3.0.0-pre.26" + "@polymer/iron-meta" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-icons@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/iron-icons/-/iron-icons-3.0.1.tgz#c1bd31d8483afbdb5422cdc384081e19c9267cfe" + integrity sha512-xtEI8erH2GIBiF3QxEMyW81XuVjguu6Le5WjEEpX67qd9z7jjmc4T/ke3zRUlnDydex9p8ytcwVpMIKcyvjYAQ== + dependencies: + "@polymer/iron-icon" "^3.0.0-pre.26" + "@polymer/iron-iconset-svg" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-iconset-svg@^3.0.0", "@polymer/iron-iconset-svg@^3.0.0-pre.26", "@polymer/iron-iconset-svg@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/iron-iconset-svg/-/iron-iconset-svg-3.0.1.tgz#568d6e7dbc120299dae63be3600aeba0d30ddbea" + integrity sha512-XNwURbNHRw6u2fJe05O5fMYye6GSgDlDqCO+q6K1zAnKIrpgZwf2vTkBd5uCcZwsN0FyCB3mvNZx4jkh85dRDw== + dependencies: + "@polymer/iron-meta" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-input@^3.0.0-pre.26": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/iron-input/-/iron-input-3.0.1.tgz#dc866a25107f9b38d9ca4512dd9a3e51b78b4915" + integrity sha512-WLx13kEcbH9GKbj9+pWR6pbJkA5kxn3796ynx6eQd2rueMyUfVTR3GzOvadBKsciUuIuzrxpBWZ2+3UcueVUQQ== + dependencies: + "@polymer/iron-a11y-announcer" "^3.0.0-pre.26" + "@polymer/iron-validatable-behavior" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-list@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@polymer/iron-list/-/iron-list-3.1.0.tgz#9b525249a90a53b6ae249330640b54b12141202a" + integrity sha512-Eiv6xd3h3oPmn8SXFntXVfC3ZnegH+KHAxiKLKcOASFSRY3mHnr2AdcnExUJ9ItoCMA5UzKaM/0U22eWzGERtA== + dependencies: + "@polymer/iron-a11y-keys-behavior" "^3.0.0-pre.26" + "@polymer/iron-resizable-behavior" "^3.0.0-pre.26" + "@polymer/iron-scroll-target-behavior" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-menu-behavior@^3.0.0-pre.26": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@polymer/iron-menu-behavior/-/iron-menu-behavior-3.0.2.tgz#f8fa2d59af472a4cb4fb0359c704b808bc2c105d" + integrity sha512-8dpASkFNBIkxAJWsFLWIO1M7tKM0+wKs3PqdeF/dDdBciwoaaFgC2K1XCZFZnbe2t9/nJgemXxVugGZAWpYCGg== + dependencies: + "@polymer/iron-a11y-keys-behavior" "^3.0.0-pre.26" + "@polymer/iron-flex-layout" "^3.0.0-pre.26" + "@polymer/iron-selector" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-meta@^3.0.0-pre.26": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/iron-meta/-/iron-meta-3.0.1.tgz#7f140628d127b0a284f882f1bb323a261bc125f5" + integrity sha512-pWguPugiLYmWFV9UWxLWzZ6gm4wBwQdDy4VULKwdHCqR7OP7u98h+XDdGZsSlDPv6qoryV/e3tGHlTIT0mbzJA== + dependencies: + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-overlay-behavior@^3.0.0-pre.27": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@polymer/iron-overlay-behavior/-/iron-overlay-behavior-3.0.3.tgz#29c198e19e05bb2bcf7d86d3c11848cb93301d00" + integrity sha512-Q/Fp0+uOQQ145ebZ7T8Cxl4m1tUKYjyymkjcL2rXUm+aDQGb1wA1M1LYxUF5YBqd+9lipE0PTIiYwA2ZL/sznA== + dependencies: + "@polymer/iron-a11y-keys-behavior" "^3.0.0-pre.26" + "@polymer/iron-fit-behavior" "^3.0.0-pre.26" + "@polymer/iron-resizable-behavior" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-pages@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/iron-pages/-/iron-pages-3.0.1.tgz#b0c3639a4d51e405464c8b8bcccbe055fab401c0" + integrity sha512-PQe8S1JKHPcsIvFOaQP+9+AXmqUIL9fPqC6xT63OAZQxYCeZJDKgT9GKBx+VRryYBUlj2FLEXkUVpG+PTotdjg== + dependencies: + "@polymer/iron-resizable-behavior" "^3.0.0-pre.26" + "@polymer/iron-selector" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-range-behavior@^3.0.0-pre.26": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/iron-range-behavior/-/iron-range-behavior-3.0.1.tgz#0aba35addb0a390bd3eafc307c35389cddbe8677" + integrity sha512-+jtL9v45M/T1RJleWyQaNH84S9/mIIR+AjNbYIttbKGp1eG+98j8MDWe7LXNtg79V2LQnE/+VS82cBeELyGVeg== + dependencies: + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-resizable-behavior@^3.0.0", "@polymer/iron-resizable-behavior@^3.0.0-pre.26": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/iron-resizable-behavior/-/iron-resizable-behavior-3.0.1.tgz#e284348ed7c1c7e263f7039297532fa954025ea2" + integrity sha512-FyHxRxFspVoRaeZSWpT3y0C9awomb4tXXolIJcZ7RvXhMP632V5lez+ch5G5SwK0LpnAPkg35eB0LPMFv+YMMQ== + dependencies: + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-scroll-target-behavior@^3.0.0", "@polymer/iron-scroll-target-behavior@^3.0.0-pre.26": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/iron-scroll-target-behavior/-/iron-scroll-target-behavior-3.0.1.tgz#29fa644b320fb29ab6c68eb6d08a6520157764ac" + integrity sha512-xg1WanG25BIkQE8rhuReqY9zx1K5M7F+YAIYpswEp5eyDIaZ1Y3vUmVeQ3KG+hiSugzI1M752azXN7kvyhOBcQ== + dependencies: + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-selector@^3.0.0-pre.26": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/iron-selector/-/iron-selector-3.0.1.tgz#e845bec58489c96b4e7609525532437869ad5a88" + integrity sha512-sBVk2uas6prW0glUe2xEJJYlvxmYzM40Au9OKbfDK2Qekou/fLKcBRyIYI39kuI8zWRaip8f3CI8qXcUHnKb1A== + dependencies: + "@polymer/polymer" "^3.0.0" + +"@polymer/iron-validatable-behavior@^3.0.0-pre.26": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/iron-validatable-behavior/-/iron-validatable-behavior-3.0.1.tgz#73538f005a07741c31b6fc1e981168c3d3e0d92b" + integrity sha512-wwpYh6wOa4fNI+jH5EYKC7TVPYQ2OfgQqocWat7GsNWcsblKYhLYbwsvEY5nO0n2xKqNfZzDLrUom5INJN7msQ== + dependencies: + "@polymer/iron-meta" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/neon-animation@^3.0.0-pre.26": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/neon-animation/-/neon-animation-3.0.1.tgz#6658e4b524abc057477772a7473292493d366c24" + integrity sha512-cDDc0llpVCe0ATbDS3clDthI54Bc8YwZIeTGGmBJleKOvbRTUC5+ssJmRL+VwVh+VM5FlnQlx760ppftY3uprg== + dependencies: + "@polymer/iron-resizable-behavior" "^3.0.0-pre.26" + "@polymer/iron-selector" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-behaviors@^3.0.0-pre.27": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-behaviors/-/paper-behaviors-3.0.1.tgz#83f1cd06489f484c1b108a2967fb01952df722ad" + integrity sha512-6knhj69fPJejv8qR0kCSUY+Q0XjaUf0OSnkjRjmTJPAwSrRYtgqE+l6P1FfA+py1X/cUjgne9EF5rMZAKJIg1g== + dependencies: + "@polymer/iron-behaviors" "^3.0.0-pre.26" + "@polymer/iron-checked-element-behavior" "^3.0.0-pre.26" + "@polymer/paper-ripple" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-button@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-button/-/paper-button-3.0.1.tgz#f13b019137e3f6ccc4d04d0b1f27f4830ea5774d" + integrity sha512-JRNBc+Oj9EWnmyLr7FcCr8T1KAnEHPh6mosln9BUdkM+qYaYsudSICh3cjTIbnj6AuF5OJidoLkM1dlyj0j6Zg== + dependencies: + "@polymer/iron-flex-layout" "^3.0.0-pre.26" + "@polymer/paper-behaviors" "^3.0.0-pre.27" + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-checkbox@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@polymer/paper-checkbox/-/paper-checkbox-3.1.0.tgz#66b903ae5814db237d027deb4a3f3430f48d905b" + integrity sha512-kXm6yDG1tT8if0XuJ2cc9NF+g8Ev4wG+rnf0a+Sx+O7J6fn1jcnBlYn72FlrfjVjDQZDBFmT6nynhD5PvFw8iQ== + dependencies: + "@polymer/iron-a11y-keys-behavior" "^3.0.0-pre.26" + "@polymer/iron-checked-element-behavior" "^3.0.0-pre.26" + "@polymer/paper-behaviors" "^3.0.0-pre.27" + "@polymer/paper-ripple" "^3.0.0-pre.26" + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-dialog-behavior@^3.0.0-pre.26": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-dialog-behavior/-/paper-dialog-behavior-3.0.1.tgz#819b2fbb9444c1c318ddf55f02819bb29a85657b" + integrity sha512-wbI4kCK8le/9MHT+IXzvHjoatxf3kd3Yn0tgozAiAwfSZ7N4Ubpi5MHrK0m9S9PeIxKokAgBYdTUrezSE5378A== + dependencies: + "@polymer/iron-overlay-behavior" "^3.0.0-pre.27" + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-dialog-scrollable@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-dialog-scrollable/-/paper-dialog-scrollable-3.0.1.tgz#42fd30380320e6dd6d4d68b2ac4e45ee9e5e024f" + integrity sha512-1E8B9kNdL58jUrJ/BwqJeOoNVcxNrB559z//d1V0rVHWT5bWCCZegwS3G06iFK5MjxWFbIKzleVTLrT0opiZkA== + dependencies: + "@polymer/iron-flex-layout" "^3.0.0-pre.26" + "@polymer/paper-dialog-behavior" "^3.0.0-pre.26" + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-dialog@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-dialog/-/paper-dialog-3.0.1.tgz#728ebdbfc4d35ec1485e543434cef5dba476f15e" + integrity sha512-KvglYbEq7AWJvui2j6WKLnOvgVMeGjovAydGrPRj7kVzCiD49Eq/hpYFJTRV5iDcalWH+mORUpw+jrFnG9+Kgw== + dependencies: + "@polymer/iron-overlay-behavior" "^3.0.0-pre.27" + "@polymer/neon-animation" "^3.0.0-pre.26" + "@polymer/paper-dialog-behavior" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-dropdown-menu@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@polymer/paper-dropdown-menu/-/paper-dropdown-menu-3.1.0.tgz#3983baafc9a05c1475a680a7aa6512f994c89c88" + integrity sha512-orxH2FzBCjUleXex//STZHjgWXm7z09+JRPnhJld7xEheRDE7XrKsrsS0Xl7f8bBqUrisdaL9HTX9yBJ/k8bbQ== + dependencies: + "@polymer/iron-a11y-keys-behavior" "^3.0.0-pre.26" + "@polymer/iron-form-element-behavior" "^3.0.0-pre.26" + "@polymer/iron-icon" "^3.0.0-pre.26" + "@polymer/iron-iconset-svg" "^3.0.0-pre.26" + "@polymer/iron-validatable-behavior" "^3.0.0-pre.26" + "@polymer/paper-behaviors" "^3.0.0-pre.27" + "@polymer/paper-input" "^3.1.0" + "@polymer/paper-menu-button" "^3.0.0-pre.26" + "@polymer/paper-ripple" "^3.0.0-pre.26" + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.3.1" + +"@polymer/paper-header-panel@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-header-panel/-/paper-header-panel-3.0.1.tgz#a5ed591b54ac620d8505ffe8931d1476c35eac28" + integrity sha512-aaugJS3Dt+J467GM7B2Ea3GVSusMoXvwZKfA/0ZbMmG6wjZwkc4wnP8fDZjm5BZDD9CyI+PFo7aWa4K0WMF9mQ== + dependencies: + "@polymer/iron-flex-layout" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-icon-button@^3.0.0-pre.26", "@polymer/paper-icon-button@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@polymer/paper-icon-button/-/paper-icon-button-3.0.2.tgz#a1254faadc2c8dd135ce1ae33bcc161a94c31f65" + integrity sha512-kOdxQgnKL097bggFF6PWvsBYuWg+MCcoHoTHX6bh/MuZoWFZNjrFntFqwuB4oEbpjCpfm4moA33muPJFj7CihQ== + dependencies: + "@polymer/iron-icon" "^3.0.0-pre.26" + "@polymer/paper-behaviors" "^3.0.0-pre.27" + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-input@^3.0.0-pre.26", "@polymer/paper-input@^3.1.0", "@polymer/paper-input@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-input/-/paper-input-3.2.1.tgz#0fd0d30de3b43ba7d2c8d5d76f870d257b667ebf" + integrity sha512-6ghgwQKM6mS0hAQxQqj+tkeEY1VUBqAsrasAm8V5RpNcfSWQC/hhRFxU0beGuKTAhndzezDzWYP6Zz4b8fExGg== + dependencies: + "@polymer/iron-a11y-keys-behavior" "^3.0.0-pre.26" + "@polymer/iron-autogrow-textarea" "^3.0.0-pre.26" + "@polymer/iron-behaviors" "^3.0.0-pre.26" + "@polymer/iron-form-element-behavior" "^3.0.0-pre.26" + "@polymer/iron-input" "^3.0.0-pre.26" + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-item@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-item/-/paper-item-3.0.1.tgz#05b3543483e556cd5532431cd1751a84343989b5" + integrity sha512-KTk2N+GsYiI/HuubL3sxebZ6tteQbBOAp4QVLAnbjSPmwl+mJSDWk+omuadesU0bpkCwaWVs3fHuQsmXxy4pkw== + dependencies: + "@polymer/iron-behaviors" "^3.0.0-pre.26" + "@polymer/iron-flex-layout" "^3.0.0-pre.26" + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-listbox@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-listbox/-/paper-listbox-3.0.1.tgz#fe05094781b359e4afbc5bec89a07758a303a957" + integrity sha512-vMLWFpYcggAPmEDBmK+96fFefacOG3GLB1EguTn8+ZkqI+328hNfw1MzHjH68rgCIIUtjmm+9qgB1Sy/MN0a/A== + dependencies: + "@polymer/iron-behaviors" "^3.0.0-pre.26" + "@polymer/iron-menu-behavior" "^3.0.0-pre.26" + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-material@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-material/-/paper-material-3.0.1.tgz#2d5f7673d21ac65270e4a687439d16b980aa517b" + integrity sha512-FUa3iqEcwjYtUzMqIh9cEfdTJE8ZtRasAzxVbck5GChthA/T2HwnhjAyqzN4lusVMyafdl3rjNEwhVPK/Pmykg== + dependencies: + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-menu-button@^3.0.0-pre.26", "@polymer/paper-menu-button@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-menu-button/-/paper-menu-button-3.0.1.tgz#318fc4d884a01d42ed0f3f3b5a6f78548d64befa" + integrity sha512-Rxte2Fp7N2BMI2FMM7tB25IkvD11DhjMklcg97JP1jnlHbJNrXPh5SSX2bdtabz49UE8vejIsrxZ+AGsB5nqIQ== + dependencies: + "@polymer/iron-a11y-keys-behavior" "^3.0.0-pre.26" + "@polymer/iron-behaviors" "^3.0.0-pre.26" + "@polymer/iron-dropdown" "^3.0.0-pre.26" + "@polymer/iron-fit-behavior" "^3.0.0-pre.26" + "@polymer/neon-animation" "^3.0.0-pre.26" + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-progress@^3.0.0-pre.26", "@polymer/paper-progress@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-progress/-/paper-progress-3.0.1.tgz#2943054a909ad381236b3c7aecee078123bba839" + integrity sha512-5nguG+tmnyoaWKVNG8Smtno2uLSPBgEsT3f20JY8yJTjUBYWaqa8E3l5RLkTRXgA4x9OnvLb8/CdlQWXQIogBg== + dependencies: + "@polymer/iron-flex-layout" "^3.0.0-pre.26" + "@polymer/iron-range-behavior" "^3.0.0-pre.26" + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-radio-button@^3.0.0-pre.26", "@polymer/paper-radio-button@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-radio-button/-/paper-radio-button-3.0.1.tgz#89d7033ff976a28a76ac7f516b86ea09cb3a4bf7" + integrity sha512-ltCdgolOrmTeG3IxHhfMgxRc9AloNpoIwRMInrTI5Nzva4yOzSpP01bfpEwBpTl11o0NYxqfYYCxCjLQGRq9ng== + dependencies: + "@polymer/iron-checked-element-behavior" "^3.0.0-pre.26" + "@polymer/iron-flex-layout" "^3.0.0-pre.26" + "@polymer/paper-behaviors" "^3.0.0-pre.27" + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-radio-group@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-radio-group/-/paper-radio-group-3.0.1.tgz#f1a1bc34ad5a9579b59287f2144e29b92073bb21" + integrity sha512-VYUWj6Y7/1sJncbtKJ4+aKJ0U98cLPXWu6mTgMREoA2jOKrb41JxtnKNrKMjs+lBHCZj4wvtmHwzeS//HFULfA== + dependencies: + "@polymer/iron-a11y-keys-behavior" "^3.0.0-pre.26" + "@polymer/iron-menu-behavior" "^3.0.0-pre.26" + "@polymer/paper-radio-button" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-ripple@^3.0.0-pre.26": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@polymer/paper-ripple/-/paper-ripple-3.0.2.tgz#52566f5ee367942022ceaa991368105d21403de5" + integrity sha512-DnLNvYIMsiayeICroYxx6Q6Hg1cUU8HN2sbutXazlemAlGqdq80qz3TIaVdbpbt/pvjcFGX2HtntMlPstCge8Q== + dependencies: + "@polymer/iron-a11y-keys-behavior" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-slider@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-slider/-/paper-slider-3.0.1.tgz#f252af4b41f7ce72bd4fb761e6b1efd55ca75550" + integrity sha512-TNA8nEQci1fe3vTQQaFwkPj9p9yTLSr9Mhe8xQSTHpFNKun1rsp91LlKJmiKJDO7xU9RGZmA2mRlQwaj6kgR3g== + dependencies: + "@polymer/iron-a11y-keys-behavior" "^3.0.0-pre.26" + "@polymer/iron-behaviors" "^3.0.0-pre.26" + "@polymer/iron-flex-layout" "^3.0.0-pre.26" + "@polymer/iron-form-element-behavior" "^3.0.0-pre.26" + "@polymer/paper-behaviors" "^3.0.0-pre.27" + "@polymer/paper-input" "^3.0.0-pre.26" + "@polymer/paper-progress" "^3.0.0-pre.26" + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-spinner@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@polymer/paper-spinner/-/paper-spinner-3.0.2.tgz#c857c79f0494bc74e9ae293839d00f37fcf29f78" + integrity sha512-XUzu8/4NH+pnNZUTI2MxtOKFAr0EOsW7eGhTg3VBhTh7DDW/q3ewzwYRWnqNJokX9BEnxKMiXXaIeTEBq4k2dw== + dependencies: + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-styles@^3.0.0-pre.26", "@polymer/paper-styles@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-styles/-/paper-styles-3.0.1.tgz#bd4962b83ab8432cd1cf197bb5222d3a08f135e1" + integrity sha512-y6hmObLqlCx602TQiSBKHqjwkE7xmDiFkoxdYGaNjtv4xcysOTdVJsDR/R9UHwIaxJ7gHlthMSykir1nv78++g== + dependencies: + "@polymer/font-roboto" "^3.0.1" + "@polymer/iron-flex-layout" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-tabs@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@polymer/paper-tabs/-/paper-tabs-3.1.0.tgz#a173839d20703fdd5fca97a9d878f7b0e6257150" + integrity sha512-t8G+3CiyI0R+wA077UNQXR/oG9GlsqRRO1KMsFHHjBSsYqWXghNsqxUG827wEj+PafI5u9tZ3vVt1S++Lg4B2g== + dependencies: + "@polymer/iron-behaviors" "^3.0.0-pre.26" + "@polymer/iron-flex-layout" "^3.0.0-pre.26" + "@polymer/iron-icon" "^3.0.0-pre.26" + "@polymer/iron-iconset-svg" "^3.0.0-pre.26" + "@polymer/iron-menu-behavior" "^3.0.0-pre.26" + "@polymer/iron-resizable-behavior" "^3.0.0-pre.26" + "@polymer/paper-behaviors" "^3.0.0-pre.27" + "@polymer/paper-icon-button" "^3.0.0-pre.26" + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-toast@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-toast/-/paper-toast-3.0.1.tgz#213aa3373909cee7c8e17299cf70fa2603bfb358" + integrity sha512-pizuogzObniDdICUc6dSLrnDt2VzzoRne1gCmbD6sfOATVv5tc8UfrqhA2iHngbNBEbniBiciS3iogdp5KTVUQ== + dependencies: + "@polymer/iron-a11y-announcer" "^3.0.0-pre.26" + "@polymer/iron-fit-behavior" "^3.0.0-pre.26" + "@polymer/iron-overlay-behavior" "^3.0.0-pre.27" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-toggle-button@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-toggle-button/-/paper-toggle-button-3.0.1.tgz#7d855420f0df96e7f812a9f1bdcfbc5ab082e819" + integrity sha512-jadZB60fycT7YnSAH0H23LYo6/2HYmMZTtNr9LpdSIRFPLX6mqqxewex92cFz019bMKaRJgORn308hRlJo2u6A== + dependencies: + "@polymer/iron-checked-element-behavior" "^3.0.0-pre.26" + "@polymer/paper-behaviors" "^3.0.0-pre.27" + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-toolbar@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-toolbar/-/paper-toolbar-3.0.1.tgz#2472c747f7e19fc2a74eea37fd099f121633050b" + integrity sha512-tEdHRorVmnN3kvJg3xxRPnEiEBdGmGwcDNbIcYuXxoRDF0nAB74SW5+He8OlFT1Lw2Hz/xlvMn+wHuqxIJeyQw== + dependencies: + "@polymer/iron-flex-layout" "^3.0.0-pre.26" + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/paper-tooltip@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@polymer/paper-tooltip/-/paper-tooltip-3.0.1.tgz#cdbb06442737513f081437c6302842170ce714dc" + integrity sha512-yiUk09opTEnE1lK+tb501ENb+yQBi4p++Ep0eGJAHesVYKVMPNgPphVKkIizkDaU+n0SE+zXfTsRbYyOMDYXSg== + dependencies: + "@polymer/paper-styles" "^3.0.0-pre.26" + "@polymer/polymer" "^3.0.0" + +"@polymer/polymer@^3.0.0", "@polymer/polymer@^3.0.5", "@polymer/polymer@^3.3.1", "@polymer/polymer@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@polymer/polymer/-/polymer-3.4.1.tgz#333bef25711f8411bb5624fb3eba8212ef8bee96" + integrity sha512-KPWnhDZibtqKrUz7enIPOiO4ZQoJNOuLwqrhV2MXzIt3VVnUVJVG5ORz4Z2sgO+UZ+/UZnPD0jqY+jmw/+a9mQ== + dependencies: + "@webcomponents/shadycss" "^1.9.1" + +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78= + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A= + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU= + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E= + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik= + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0= + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q= + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= + +"@rollup/plugin-commonjs@^14.0.0": + version "14.0.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-14.0.0.tgz#4285f9ec2db686a31129e5a2b415c94aa1f836f0" + integrity sha512-+PSmD9ePwTAeU106i9FRdc+Zb3XUWyW26mo5Atr2mk82hor8+nPwkztEjFo8/B1fJKfaQDg9aM2bzQkjhi7zOw== + dependencies: + "@rollup/pluginutils" "^3.0.8" + commondir "^1.0.1" + estree-walker "^1.0.1" + glob "^7.1.2" + is-reference "^1.1.2" + magic-string "^0.25.2" + resolve "^1.11.0" + +"@rollup/plugin-node-resolve@^8.4.0": + version "8.4.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-8.4.0.tgz#261d79a680e9dc3d86761c14462f24126ba83575" + integrity sha512-LFqKdRLn0ShtQyf6SBYO69bGE1upV6wUhBX0vFOUnLAyzx5cwp8svA0eHUnu8+YU57XOkrMtfG63QOpQx25pHQ== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deep-freeze "^0.0.1" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.17.0" + +"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@rushstack/node-core-library@3.25.0": + version "3.25.0" + resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-3.25.0.tgz#ba40bc1b188ab5d31f5705999cd2b3b56b8a32cf" + integrity sha512-e2NCFtAu/eu14b8nlzRX6ZrE9Sb3J2wVt+pninQmTn/IgfnRLAtM0D4PzUO4+ktZwF9fCnpqrOGokLzw6RSVNw== + dependencies: + "@types/node" "10.17.13" + colors "~1.2.1" + fs-extra "~7.0.1" + jju "~1.4.0" + semver "~7.3.0" + timsort "~0.3.0" + z-schema "~3.18.3" + +"@rushstack/ts-command-line@4.4.6": + version "4.4.6" + resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.4.6.tgz#7818f19e444274e68564a756ef62a2b4e0ced0f8" + integrity sha512-ue3p2m773Yea/s4Ef2Q3gEyLd9T0NDjXCl+PlodGTrJHgxoiRwbROSWHAdYJL/LceGWa6Biqizu9qxUDEWFweQ== + dependencies: + "@types/argparse" "1.0.38" + argparse "~1.0.9" + colors "~1.2.1" + +"@schematics/angular@9.1.12": + version "9.1.12" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-9.1.12.tgz#608e25dbd517d867002781f695336b51f05417a2" + integrity sha512-r4+aPAGhstsKFMwW/kOen1ACnzuLpz+vMxEpndXOqqVXLkAMsuAbQUFYjIlMy6fH4zdhpI90EJZ1PbOrAXvKxA== + dependencies: + "@angular-devkit/core" "9.1.12" + "@angular-devkit/schematics" "9.1.12" + +"@schematics/update@0.901.12": + version "0.901.12" + resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.901.12.tgz#7e410ac7a163b71e30d8cc56d7959adf9225078c" + integrity sha512-SxGVYLTHhBC0rSF0OWSWPuJUB1Jhfqkl3o5bBgCC9//DutWiN6WoCCBTrCxR7F5vR2iiD7WqOe9CuvWYfvV8oQ== + dependencies: + "@angular-devkit/core" "9.1.12" + "@angular-devkit/schematics" "9.1.12" + "@yarnpkg/lockfile" "1.1.0" + ini "1.3.5" + npm-package-arg "^8.0.0" + pacote "9.5.12" + rxjs "6.5.4" + semver "7.1.3" + semver-intersect "1.4.0" + +"@sinonjs/commons@^1", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.4.0", "@sinonjs/commons@^1.7.0": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" + integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw== + dependencies: + type-detect "4.0.8" + +"@sinonjs/formatio@^3.2.1": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.2.tgz#771c60dfa75ea7f2d68e3b94c7e888a78781372c" + integrity sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ== + dependencies: + "@sinonjs/commons" "^1" + "@sinonjs/samsam" "^3.1.0" + +"@sinonjs/samsam@^3.1.0", "@sinonjs/samsam@^3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.3.tgz#46682efd9967b259b81136b9f120fd54585feb4a" + integrity sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ== + dependencies: + "@sinonjs/commons" "^1.3.0" + array-from "^2.1.1" + lodash "^4.17.15" + +"@sinonjs/text-encoding@^0.7.1": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" + integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== + +"@tensorflow/tfjs-backend-cpu@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-2.3.0.tgz#31176038bfeb321a49a2b30bedbdb6c239025f95" + integrity sha512-Ycf8mZywZYJrRIcZBqrloDxBc/lmV6aLLfj18wo8WE4aX9UxLNmSXF2iSs+x8icx7YmvLLglvTVST6tzL4sUSg== + dependencies: + "@types/seedrandom" "2.4.27" + seedrandom "2.4.3" + +"@tensorflow/tfjs-backend-webgl@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-2.3.0.tgz#74ebd6a07a1fcc0f706f07cbf66c85ea01620a24" + integrity sha512-xTwAAASFPNHpIyShynCc+4Z2JtruJvEUosV28TDCNv9ZNuarxxpGimTBohjKFqzcjGIi4II0NyXbjMxTJcJkqw== + dependencies: + "@tensorflow/tfjs-backend-cpu" "2.3.0" + "@types/offscreencanvas" "~2019.3.0" + "@types/seedrandom" "2.4.27" + "@types/webgl-ext" "0.0.30" + "@types/webgl2" "0.0.4" + seedrandom "2.4.3" + +"@tensorflow/tfjs-converter@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-2.3.0.tgz#359a8cbb5da78c7aefcf5045b4db3754d9846965" + integrity sha512-Q6rXAhL4XN9jo8bnXnDoc3sB3dC5T/gIWnLX+DGmDfgIARBCKG+QZdemBvg64qw48gdK6oxd75aaTsvCjuQ6ww== + +"@tensorflow/tfjs-core@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-2.3.0.tgz#272f9e6c143c6ff8c092aacf98707cec49d1bd2d" + integrity sha512-XJ8B/VQexYVtyyoIUCqzIbEgwaWZzv9lq1E4LKafJeuT9DldJGHS7IWIkNnZDBfmQvfYHU+fAvGRRPdQPoYeRg== + dependencies: + "@types/offscreencanvas" "~2019.3.0" + "@types/seedrandom" "2.4.27" + "@types/webgl-ext" "0.0.30" + "@types/webgl2" "0.0.4" + node-fetch "~2.1.2" + seedrandom "2.4.3" + +"@tensorflow/tfjs-data@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-data/-/tfjs-data-2.3.0.tgz#debb569353441ee4433f2cdf29ed8a9561b3e2a9" + integrity sha512-uDSZTDJaoR4axYVate22gspdNJC89iqW9IHf8wC9iMZ0xSBWoX9qChcI3xpTzP5couHxaBSUkFVXczuqvnFsfg== + dependencies: + "@types/node-fetch" "^2.1.2" + node-fetch "~2.1.2" + +"@tensorflow/tfjs-layers@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-layers/-/tfjs-layers-2.3.0.tgz#43dd9ecfe43fd474c80c5add039b33bd5686554c" + integrity sha512-8bXikhI/SvnOxRDELBxVB2kYKH78pQEEeXheMrSD38CA/QoKbH7sdPPmP7qpEz8kzU/k5sXnn8c5CIAFpO7sug== + +"@tensorflow/tfjs@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs/-/tfjs-2.3.0.tgz#f9020b9fb89241d5766a5b0271a9094c7dcb9d3f" + integrity sha512-84vrkbktqnPYESZZOT2AN/LFm3qCF0UleGI7P+wgdsOYcwBoe8eZcVdhje/u9O4GYqwmn0+a8F+Kk4TmcFdrEw== + dependencies: + "@tensorflow/tfjs-backend-cpu" "2.3.0" + "@tensorflow/tfjs-backend-webgl" "2.3.0" + "@tensorflow/tfjs-converter" "2.3.0" + "@tensorflow/tfjs-core" "2.3.0" + "@tensorflow/tfjs-data" "2.3.0" + "@tensorflow/tfjs-layers" "2.3.0" + argparse "^1.0.10" + chalk "^4.1.0" + core-js "3" + regenerator-runtime "^0.13.5" + +"@types/argparse@1.0.38": + version "1.0.38" + resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-1.0.38.tgz#a81fd8606d481f873a3800c6ebae4f1d768a56a9" + integrity sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA== + +"@types/chai@^4.2.7": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.12.tgz#6160ae454cd89dae05adc3bb97997f488b608201" + integrity sha512-aN5IAC8QNtSUdQzxu7lGBgYAOuU1tmRU4c9dIq5OKGf/SBVjXo+ffM2wEjudAWbgpOhy60nLoAGH1xm8fpCKFQ== + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/d3-array@*": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-2.0.0.tgz#a0d63a296a2d8435a9ec59393dcac746c6174a96" + integrity sha512-rGqfPVowNDTszSFvwoZIXvrPG7s/qKzm9piCRIH6xwTTRu7pPZ3ootULFnPkTt74B6i5lN0FpLQL24qGOw1uZA== + +"@types/d3-array@^1": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-1.2.7.tgz#34dc654d34fc058c41c31dbca1ed68071a8fcc17" + integrity sha512-51vHWuUyDOi+8XuwPrTw3cFqyh2Slg9y8COYkRfjCPG9TfYqY0hoNPzv/8BrcAy0FeQBzqEo/D/8Nk2caOQJnA== + +"@types/d3-axis@*": + version "1.0.12" + resolved "https://registry.yarnpkg.com/@types/d3-axis/-/d3-axis-1.0.12.tgz#8c124edfcc02f3b3a9cdaa2a28b8a20341401799" + integrity sha512-BZISgSD5M8TgURyNtcPAmUB9sk490CO1Thb6/gIn0WZTt3Y50IssX+2Z0vTccoqZksUDTep0b+o4ofXslvNbqg== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-brush@*": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/d3-brush/-/d3-brush-1.1.1.tgz#906875ce42db22fc9cde6d1fb2808f17ecd2ea93" + integrity sha512-Exx14trm/q2cskHyMjCrdDllOQ35r1/pmZXaOIt8bBHwYNk722vWY3VxHvN0jdFFX7p2iL3+gD+cGny/aEmhlw== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-chord@*": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@types/d3-chord/-/d3-chord-1.0.9.tgz#ccc5de03ff079025491b7aa6b750670a140b45ae" + integrity sha512-UA6lI9CVW5cT5Ku/RV4hxoFn4mKySHm7HEgodtfRthAj1lt9rKZEPon58vyYfk+HIAm33DtJJgZwMXy2QgyPXw== + +"@types/d3-collection@*": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/d3-collection/-/d3-collection-1.0.8.tgz#aa9552c570a96e33c132e0fd20e331f64baa9dd5" + integrity sha512-y5lGlazdc0HNO0F3UUX2DPE7OmYvd9Kcym4hXwrJcNUkDaypR5pX+apuMikl9LfTxKItJsY9KYvzBulpCKyvuQ== + +"@types/d3-color@*": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-1.2.2.tgz#80cf7cfff7401587b8f89307ba36fe4a576bc7cf" + integrity sha512-6pBxzJ8ZP3dYEQ4YjQ+NVbQaOflfgXq/JbDiS99oLobM2o72uAST4q6yPxHv6FOTCRC/n35ktuo8pvw/S4M7sw== + +"@types/d3-contour@*": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@types/d3-contour/-/d3-contour-1.3.0.tgz#1a408b121fa5e341f715e3055303ef3079fc7eb0" + integrity sha512-AUCUIjEnC5lCGBM9hS+MryRaFLIrPls4Rbv6ktqbd+TK/RXZPwOy9rtBWmGpbeXcSOYCJTUDwNJuEnmYPJRxHQ== + dependencies: + "@types/d3-array" "*" + "@types/geojson" "*" + +"@types/d3-dispatch@*": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/d3-dispatch/-/d3-dispatch-1.0.8.tgz#eaeb2ad089d6a0d2685dfa2f2cbbfb7509aae014" + integrity sha512-lCDtqoYez0TgFN3FljBXrz2icqeSzD0gufGook6DPBia+NOh2TBfogjHIsmNa/a+ZOewlHtq4cgLY80O1uLymw== + +"@types/d3-drag@*": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/d3-drag/-/d3-drag-1.2.3.tgz#d8ddccca28e939e9c689bea6f40a937e48c39051" + integrity sha512-rWB5SPvkYVxW3sqUxHOJUZwifD0KqvKwvt1bhNqcLpW6Azsd0BJgRNcyVW8GAferaAk5r8dzeZnf9zKlg9+xMQ== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-dsv@*": + version "1.0.36" + resolved "https://registry.yarnpkg.com/@types/d3-dsv/-/d3-dsv-1.0.36.tgz#e91129d7c02b1b814838d001e921e8b9a67153d0" + integrity sha512-jbIWQ27QJcBNMZbQv0NSQMHnBDCmxghAxePxgyiPH1XPCRkOsTBei7jcdi3fDrUCGpCV3lKrSZFSlOkhUQVClA== + +"@types/d3-ease@*": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@types/d3-ease/-/d3-ease-1.0.9.tgz#1dd849bd7edef6426e915e220ed9970db5ea4e04" + integrity sha512-U5ADevQ+W6fy32FVZZC9EXallcV/Mi12A5Tkd0My5MrC7T8soMQEhlDAg88XUWm0zoCQlB4XV0en/24LvuDB4Q== + +"@types/d3-fetch@*": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@types/d3-fetch/-/d3-fetch-1.1.5.tgz#51601f79dd4653b5d84e6a3176d78145e065db5e" + integrity sha512-o9c0ItT5/Gl3wbNuVpzRnYX1t3RghzeWAjHUVLuyZJudiTxC4f/fC0ZPFWLQ2lVY8pAMmxpV8TJ6ETYCgPeI3A== + dependencies: + "@types/d3-dsv" "*" + +"@types/d3-force@*": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/d3-force/-/d3-force-1.2.1.tgz#c28803ea36fe29788db69efa0ad6c2dc09544e83" + integrity sha512-jqK+I36uz4kTBjyk39meed5y31Ab+tXYN/x1dn3nZEus9yOHCLc+VrcIYLc/aSQ0Y7tMPRlIhLetulME76EiiA== + +"@types/d3-format@*": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@types/d3-format/-/d3-format-1.3.1.tgz#35bf88264bd6bcda39251165bb827f67879c4384" + integrity sha512-KAWvReOKMDreaAwOjdfQMm0HjcUMlQG47GwqdVKgmm20vTd2pucj0a70c3gUSHrnsmo6H2AMrkBsZU2UhJLq8A== + +"@types/d3-geo@*": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@types/d3-geo/-/d3-geo-1.11.1.tgz#e96ec91f16221d87507fec66b2cc889f52d2493e" + integrity sha512-Ox8WWOG3igDRoep/dNsGbOiSJYdUG3ew/6z0ETvHyAtXZVBjOE0S96zSSmzgl0gqQ3RdZjn2eeJOj9oRcMZPkQ== + dependencies: + "@types/geojson" "*" + +"@types/d3-hierarchy@*": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@types/d3-hierarchy/-/d3-hierarchy-1.1.6.tgz#4c017521900813ea524c9ecb8d7985ec26a9ad9a" + integrity sha512-vvSaIDf/Ov0o3KwMT+1M8+WbnnlRiGjlGD5uvk83a1mPCTd/E5x12bUJ/oP55+wUY/4Kb5kc67rVpVGJ2KUHxg== + +"@types/d3-interpolate@*": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-1.3.1.tgz#1c280511f622de9b0b47d463fa55f9a4fd6f5fc8" + integrity sha512-z8Zmi08XVwe8e62vP6wcA+CNuRhpuUU5XPEfqpG0hRypDE5BWNthQHB1UNWWDB7ojCbGaN4qBdsWp5kWxhT1IQ== + dependencies: + "@types/d3-color" "*" + +"@types/d3-path@*": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-1.0.8.tgz#48e6945a8ff43ee0a1ce85c8cfa2337de85c7c79" + integrity sha512-AZGHWslq/oApTAHu9+yH/Bnk63y9oFOMROtqPAtxl5uB6qm1x2lueWdVEjsjjV3Qc2+QfuzKIwIR5MvVBakfzA== + +"@types/d3-polygon@*": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@types/d3-polygon/-/d3-polygon-1.0.7.tgz#7b3947aa2d48287ff535230d3d396668ab17bfdf" + integrity sha512-Xuw0eSjQQKs8jTiNbntWH0S+Xp+JyhqxmQ0YAQ3rDu6c3kKMFfgsaGN7Jv5u3zG6yVX/AsLP/Xs/QRjmi9g43Q== + +"@types/d3-quadtree@*": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@types/d3-quadtree/-/d3-quadtree-1.0.7.tgz#8e29464ff5b326f6612c1428d9362b4b35de2b70" + integrity sha512-0ajFawWicfjsaCLh6NzxOyVDYhQAmMFbsiI3MPGLInorauHFEh9/Cl6UHNf+kt/J1jfoxKY/ZJaKAoDpbvde5Q== + +"@types/d3-queue@*": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@types/d3-queue/-/d3-queue-3.0.8.tgz#fad6212f14f34a549fc67144e354f032fb25a447" + integrity sha512-1FWOiI/MYwS5Z1Sa9EvS1Xet3isiVIIX5ozD6iGnwHonGcqL+RcC1eThXN5VfDmAiYt9Me9EWNEv/9J9k9RIKQ== + +"@types/d3-random@*": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/d3-random/-/d3-random-1.1.2.tgz#6f77e8b7bb64ac393f92d33fe8f71038bc4f3cde" + integrity sha512-Jui+Zn28pQw/3EayPKaN4c/PqTvqNbIPjHkgIIFnxne1FdwNjfHtAIsZIBMKlquQNrrMjFzCrlF2gPs3xckqaA== + +"@types/d3-request@*": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/d3-request/-/d3-request-1.0.5.tgz#a2717ab95cd1e504662f52802aff1476af38cce4" + integrity sha512-X+/c/qXp92o056C5Qbcp7jL27YRHpmIqOchHb/WB7NwFFqkBtAircqO7oKWv2GTtX4LyEqiDF9gqXsV+ldOlIg== + dependencies: + "@types/d3-dsv" "*" + +"@types/d3-scale-chromatic@*": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@types/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz#315367557d51b823bec848614fac095325613fc3" + integrity sha512-9/D7cOBKdZdTCPc6re0HeSUFBM0aFzdNdmYggUWT9SRRiYSOa6Ys2xdTwHKgc1WS3gGfwTMatBOdWCS863REsg== + +"@types/d3-scale@*": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-2.2.0.tgz#e5987a2857365823eb26ed5eb21bc566c4dcf1c0" + integrity sha512-oQFanN0/PiR2oySHfj+zAAkK1/p4LD32Nt1TMVmzk+bYHk7vgIg/iTXQWitp1cIkDw4LMdcgvO63wL+mNs47YA== + dependencies: + "@types/d3-time" "*" + +"@types/d3-scale@^1": + version "1.0.14" + resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-1.0.14.tgz#4544e4eb61e3712dacaba9dd8910e745bb7a9840" + integrity sha512-dW6Ii8bH+10klJzVVPPeeQvRpCbX3BO3x9cLTngu/+lXNDbk2uC51aFAA/XhocehZroaG5ajwAFelMFsgpClMg== + dependencies: + "@types/d3-time" "*" + +"@types/d3-selection@*": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@types/d3-selection/-/d3-selection-1.4.2.tgz#72dcd61a3aeb9ce3e8d443e3bef7685ffea3413f" + integrity sha512-ksY8UxvTXpzD91Dy3D9zZg98yF2ZEPMKJd8ZQJlZt1QH3Xxr08s6fESEdC2l0Kbe6Xd9VhaoJX06cRaMR1lEnA== + +"@types/d3-shape@*", "@types/d3-shape@^1.2.5": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/d3-shape/-/d3-shape-1.3.2.tgz#a41d9d6b10d02e221696b240caf0b5d0f5a588ec" + integrity sha512-LtD8EaNYCaBRzHzaAiIPrfcL3DdIysc81dkGlQvv7WQP3+YXV7b0JJTtR1U3bzeRieS603KF4wUo+ZkJVenh8w== + dependencies: + "@types/d3-path" "*" + +"@types/d3-time-format@*": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@types/d3-time-format/-/d3-time-format-2.1.1.tgz#dd2c79ec4575f1355484ab6b10407824668eba42" + integrity sha512-tJSyXta8ZyJ52wDDHA96JEsvkbL6jl7wowGmuf45+fAkj5Y+SQOnz0N7/H68OWmPshPsAaWMQh+GAws44IzH3g== + +"@types/d3-time@*": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-1.0.10.tgz#d338c7feac93a98a32aac875d1100f92c7b61f4f" + integrity sha512-aKf62rRQafDQmSiv1NylKhIMmznsjRN+MnXRXTqHoqm0U/UZzVpdrtRnSIfdiLS616OuC1soYeX1dBg2n1u8Xw== + +"@types/d3-timer@*": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-1.0.9.tgz#aed1bde0cf18920d33f5d44839d73de393633fd3" + integrity sha512-WvfJ3LFxBbWjqRGz9n7GJt08RrTHPJDVsIwwoCMROlqF+iDacYiAFjf9oqnq0mXpb2juA2N/qjKP+MKdal3YNQ== + +"@types/d3-transition@*": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@types/d3-transition/-/d3-transition-1.1.6.tgz#7e52da29749d874866cc803fad13925713a372da" + integrity sha512-/F+O2r4oz4G9ATIH3cuSCMGphAnl7VDx7SbENEK0NlI/FE8Jx2oiIrv0uTrpg7yF/AmuWbqp7AGdEHAPIh24Gg== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-voronoi@*": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@types/d3-voronoi/-/d3-voronoi-1.1.9.tgz#7bbc210818a3a5c5e0bafb051420df206617c9e5" + integrity sha512-DExNQkaHd1F3dFPvGA/Aw2NGyjMln6E9QzsiqOcBgnE+VInYnFBHBBySbZQts6z6xD+5jTfKCP7M4OqMyVjdwQ== + +"@types/d3-zoom@*": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@types/d3-zoom/-/d3-zoom-1.7.4.tgz#9226ffd2bd3846ec0e4a4e2bff211612d3aafad5" + integrity sha512-5jnFo/itYhJeB2khO/lKe730kW/h2EbKMOvY0uNp3+7NdPm4w63DwPEMxifQZ7n902xGYK5DdU67FmToSoy4VA== + dependencies: + "@types/d3-interpolate" "*" + "@types/d3-selection" "*" + +"@types/d3@5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@types/d3/-/d3-5.7.2.tgz#52235eb71a1d3ca171d6dca52a58f5ccbe0254cc" + integrity sha512-7/wClB8ycneWGy3jdvLfXKTd5SoTg9hji7IdJ0RuO9xTY54YpJ8zlcFADcXhY1J3kCBwxp+/1jeN6a5OMwgYOw== + dependencies: + "@types/d3-array" "^1" + "@types/d3-axis" "*" + "@types/d3-brush" "*" + "@types/d3-chord" "*" + "@types/d3-collection" "*" + "@types/d3-color" "*" + "@types/d3-contour" "*" + "@types/d3-dispatch" "*" + "@types/d3-drag" "*" + "@types/d3-dsv" "*" + "@types/d3-ease" "*" + "@types/d3-fetch" "*" + "@types/d3-force" "*" + "@types/d3-format" "*" + "@types/d3-geo" "*" + "@types/d3-hierarchy" "*" + "@types/d3-interpolate" "*" + "@types/d3-path" "*" + "@types/d3-polygon" "*" + "@types/d3-quadtree" "*" + "@types/d3-random" "*" + "@types/d3-scale" "*" + "@types/d3-scale-chromatic" "*" + "@types/d3-selection" "*" + "@types/d3-shape" "*" + "@types/d3-time" "*" + "@types/d3-time-format" "*" + "@types/d3-timer" "*" + "@types/d3-transition" "*" + "@types/d3-voronoi" "*" + "@types/d3-zoom" "*" + +"@types/d3@^4.13.0": + version "4.13.2" + resolved "https://registry.yarnpkg.com/@types/d3/-/d3-4.13.2.tgz#c3db6ed6f6b07dde404fc3f43ee463ef5207ec8f" + integrity sha512-jaMix9nFUgLeBSdU0md3usx5BaZfnO9Z0idyRmEq7mo7Ux7FpenW1SvyLXI0e59BtrgyPGNHMaZ0y2rJcSCMiw== + dependencies: + "@types/d3-array" "^1" + "@types/d3-axis" "*" + "@types/d3-brush" "*" + "@types/d3-chord" "*" + "@types/d3-collection" "*" + "@types/d3-color" "*" + "@types/d3-dispatch" "*" + "@types/d3-drag" "*" + "@types/d3-dsv" "*" + "@types/d3-ease" "*" + "@types/d3-force" "*" + "@types/d3-format" "*" + "@types/d3-geo" "*" + "@types/d3-hierarchy" "*" + "@types/d3-interpolate" "*" + "@types/d3-path" "*" + "@types/d3-polygon" "*" + "@types/d3-quadtree" "*" + "@types/d3-queue" "*" + "@types/d3-random" "*" + "@types/d3-request" "*" + "@types/d3-scale" "^1" + "@types/d3-selection" "*" + "@types/d3-shape" "*" + "@types/d3-time" "*" + "@types/d3-time-format" "*" + "@types/d3-timer" "*" + "@types/d3-transition" "*" + "@types/d3-voronoi" "*" + "@types/d3-zoom" "*" + +"@types/eslint-scope@^3.7.3": + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.56.2" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.2.tgz#1c72a9b794aa26a8b94ad26d5b9aa51c8a6384bb" + integrity sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "0.0.45" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" + integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/estree@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/geojson@*": + version "7946.0.7" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.7.tgz#c8fa532b60a0042219cdf173ca21a975ef0666ad" + integrity sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ== + +"@types/is-plain-object@^0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@types/is-plain-object/-/is-plain-object-0.0.2.tgz#25bca7b656ba23fb03799a060dba201a7952103d" + integrity sha1-Jbyntla6I/sDeZoGDbogGnlSED0= + +"@types/jasmine@^3.5.10": + version "3.5.11" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.5.11.tgz#ba8e80639dffbe277f49c708b45373a320d158e2" + integrity sha512-fg1rOd/DehQTIJTifGqGVY6q92lDgnLfs7C6t1ccSwQrMyoTGSoH6wWzhJDZb6ezhsdwAX4EIBLe8w5fXWmEng== + +"@types/json-schema@*", "@types/json-schema@^7.0.8": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/lodash@^4.14.109", "@types/lodash@^4.14.158": + version "4.14.158" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.158.tgz#b38ea8b6fe799acd076d7a8d7ab71c26ef77f785" + integrity sha512-InCEXJNTv/59yO4VSfuvNrZHt7eeNtWQEgnieIA+mIC+MOWM9arOWG2eQ8Vhk6NbOre6/BidiXhkZYeDY9U35w== + +"@types/long@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" + integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== + +"@types/node-fetch@^2.1.2": + version "2.5.7" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.7.tgz#20a2afffa882ab04d44ca786449a276f9f6bbf3c" + integrity sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + +"@types/node@*": + version "14.0.27" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" + integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== + +"@types/node@10.17.13": + version "10.17.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.13.tgz#ccebcdb990bd6139cd16e84c39dc2fb1023ca90c" + integrity sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg== + +"@types/node@^10.1.0": + version "10.17.28" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.28.tgz#0e36d718a29355ee51cec83b42d921299200f6d9" + integrity sha512-dzjES1Egb4c1a89C7lKwQh8pwjYmlOAG9dW1pBgxEk57tMrLnssOfEthz8kdkNaBd7lIqQx7APm5+mZ619IiCQ== + +"@types/node@^13.13.1": + version "13.13.15" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.15.tgz#fe1cc3aa465a3ea6858b793fd380b66c39919766" + integrity sha512-kwbcs0jySLxzLsa2nWUAGOd/s21WU1jebrEdtzhsj1D4Yps1EOuyI1Qcu+FD56dL7NRNIJtDDjcqIG22NwkgLw== + +"@types/offscreencanvas@~2019.3.0": + version "2019.3.0" + resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz#3336428ec7e9180cf4566dfea5da04eb586a6553" + integrity sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q== + +"@types/requirejs@^2.1.31": + version "2.1.32" + resolved "https://registry.yarnpkg.com/@types/requirejs/-/requirejs-2.1.32.tgz#c936a1f4b08f0a8bc10a380d7b837ccf9137d4b9" + integrity sha512-TM8LeNLJkEKDcx2414tsU+aKX+Pcfx8siRgZJWsb16KT77TT2FxINO48dLLkx8a5fEuJYb+rcfgPcvq6vt96NQ== + +"@types/resize-observer-browser@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@types/resize-observer-browser/-/resize-observer-browser-0.1.3.tgz#5cca2445e6fc34a380760bd6ef8c492863469c47" + integrity sha512-3tGjLIDH8L57fWOfC7NVn/BbGQD7pXwbkk2+8Z4hK/S7kOIv1MUN4nkKjfx0qg4ctkukjzp3Bgr/Z+Hq5ZQZTQ== + +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" + +"@types/seedrandom@2.4.27": + version "2.4.27" + resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-2.4.27.tgz#9db563937dd86915f69092bc43259d2f48578e41" + integrity sha1-nbVjk33YaRX2kJK8QyWdL0hXjkE= + +"@types/sinon@^7.5.2": + version "7.5.2" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.5.2.tgz#5e2f1d120f07b9cda07e5dedd4f3bf8888fccdb9" + integrity sha512-T+m89VdXj/eidZyejvmoP9jivXgBDdkOSBVQjU9kF349NEx10QdPNGxHeZUaj1IlJ32/ewdyXJjnJxyxJroYwg== + +"@types/webgl-ext@0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/webgl-ext/-/webgl-ext-0.0.30.tgz#0ce498c16a41a23d15289e0b844d945b25f0fb9d" + integrity sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg== + +"@types/webgl2@0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@types/webgl2/-/webgl2-0.0.4.tgz#c3b0f9d6b465c66138e84e64cb3bdf8373c2c279" + integrity sha512-PACt1xdErJbMUOUweSrbVM7gSIYm1vTncW2hF6Os/EeWi6TXYAYMPp+8v6rzHmypE5gHrxaxZNXgMkJVIdZpHw== + +"@vaadin/vaadin-checkbox@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@vaadin/vaadin-checkbox/-/vaadin-checkbox-2.3.0.tgz#2323eb29d730c00a125c0e9010054f32486c7459" + integrity sha512-f3yyBBTj58gZDudYh8nGn2ZNOrubg2e05mp7d7roI7xEVcfwT/Y4a/D9bHeBcOgI8LvwN8fToxIIFBt5b8UA6g== + dependencies: + "@polymer/polymer" "^3.0.0" + "@vaadin/vaadin-control-state-mixin" "^2.1.1" + "@vaadin/vaadin-element-mixin" "^2.3.0" + "@vaadin/vaadin-lumo-styles" "^1.4.1" + "@vaadin/vaadin-material-styles" "^1.2.0" + "@vaadin/vaadin-themable-mixin" "^1.2.1" + +"@vaadin/vaadin-control-state-mixin@^2.1.1": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@vaadin/vaadin-control-state-mixin/-/vaadin-control-state-mixin-2.2.3.tgz#da9456374f5a1f2348b4fa2cc01b0f32ee607824" + integrity sha512-a0a+Hh99fQ5ueKTmY6F0i94jOfdOwKFS9ppNs0amfQwO+Js5ZC84naLnyVMVtY87K98FQ1vEYqpzxDYZy6duPw== + dependencies: + "@polymer/polymer" "^3.0.0" + +"@vaadin/vaadin-development-mode-detector@^2.0.0": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@vaadin/vaadin-development-mode-detector/-/vaadin-development-mode-detector-2.0.4.tgz#f49c8009856bead92d248377c36b295b5aae78e5" + integrity sha512-S+PaFrZpK8uBIOnIHxjntTrgumd5ztuCnZww96ydGKXgo9whXfZsbMwDuD/102a/IuPUMyF+dh/n3PbWzJ6igA== + +"@vaadin/vaadin-element-mixin@^2.3.0", "@vaadin/vaadin-element-mixin@^2.3.2": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@vaadin/vaadin-element-mixin/-/vaadin-element-mixin-2.4.1.tgz#af65828a33169cb45ef2889aa7efe62a5bcd0db4" + integrity sha512-Ie7fwcOmg1C71UFuRwcuo2GKS+HbKvLedfs3hGdICiuwJ56cQvQsbIlxa4utKWWCVlf6yuSvMrny8efPPenfTA== + dependencies: + "@polymer/polymer" "^3.0.0" + "@vaadin/vaadin-development-mode-detector" "^2.0.0" + "@vaadin/vaadin-usage-statistics" "^2.1.0" + +"@vaadin/vaadin-grid@^5.6.6": + version "5.6.6" + resolved "https://registry.yarnpkg.com/@vaadin/vaadin-grid/-/vaadin-grid-5.6.6.tgz#354ee231fa9182c424d5be66b3ceedac3a9e518c" + integrity sha512-gsd+N5uPmG1RGSyoyVHIf4Cmq7k/wjkJ5Yl00LGzHaEph0VVAl/yt0rLDIXUgbHZ/fQoMPYAKkLY44AW5N4KUw== + dependencies: + "@polymer/iron-a11y-announcer" "^3.0.0" + "@polymer/iron-a11y-keys-behavior" "^3.0.0" + "@polymer/iron-resizable-behavior" "^3.0.0" + "@polymer/iron-scroll-target-behavior" "^3.0.0" + "@polymer/polymer" "^3.0.0" + "@vaadin/vaadin-checkbox" "^2.3.0" + "@vaadin/vaadin-element-mixin" "^2.3.2" + "@vaadin/vaadin-lumo-styles" "^1.6.0" + "@vaadin/vaadin-material-styles" "^1.3.2" + "@vaadin/vaadin-text-field" "^2.6.0" + "@vaadin/vaadin-themable-mixin" "^1.5.2" + +"@vaadin/vaadin-lumo-styles@^1.4.1", "@vaadin/vaadin-lumo-styles@^1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@vaadin/vaadin-lumo-styles/-/vaadin-lumo-styles-1.6.0.tgz#4b682f3a073054f8950ef460dda9cb4555372113" + integrity sha512-MTJ2JssEVF3Go5b+zIe86Jw8nNtaN91wHmO2Ic1eI27PEJ5dRRGcLWX9CjTEx/8Zu9+3Fk4YeVP9ABWhiZZGUw== + dependencies: + "@polymer/iron-icon" "^3.0.0" + "@polymer/iron-iconset-svg" "^3.0.0" + "@polymer/polymer" "^3.0.0" + +"@vaadin/vaadin-material-styles@^1.2.0", "@vaadin/vaadin-material-styles@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@vaadin/vaadin-material-styles/-/vaadin-material-styles-1.3.2.tgz#d2c1bd290db16721152ae672dbe052c381686696" + integrity sha512-EFrvGScoxhLNrPnWtT2Ia77whjF2TD4jrcyeh1jv9joCA2n5SUba+4XJciVSGmopqqQato6lwRnZSvMLJX7cyw== + dependencies: + "@polymer/polymer" "^3.0.0" + +"@vaadin/vaadin-text-field@^2.6.0": + version "2.6.2" + resolved "https://registry.yarnpkg.com/@vaadin/vaadin-text-field/-/vaadin-text-field-2.6.2.tgz#2a7bd48ec08066386fa775742b189efd190ca822" + integrity sha512-8s27dgNFjy2zGwiCbz8Hlpgc+9UyCvQ9yFdja0BunJGGMIeZg8MpZSNckVf9ivlZkaOhXNBSOMYlDvyCkKGi6A== + dependencies: + "@polymer/polymer" "^3.0.0" + "@vaadin/vaadin-control-state-mixin" "^2.1.1" + "@vaadin/vaadin-element-mixin" "^2.3.0" + "@vaadin/vaadin-lumo-styles" "^1.6.0" + "@vaadin/vaadin-material-styles" "^1.3.2" + "@vaadin/vaadin-themable-mixin" "^1.2.1" + +"@vaadin/vaadin-themable-mixin@^1.2.1", "@vaadin/vaadin-themable-mixin@^1.5.2": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@vaadin/vaadin-themable-mixin/-/vaadin-themable-mixin-1.6.1.tgz#febaeea211a23e3a9f060345252bfe101284a469" + integrity sha512-UXjOlEfMEk/QxpBjpiO0QTjPOSiO88bhhtV+0UTfpqk8ILvJYO+6vbwcja33xY5Wi9sTAXtHixAjM0LthyXglQ== + dependencies: + "@polymer/polymer" "^3.0.0" + lit-element "^2.0.0" + +"@vaadin/vaadin-usage-statistics@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@vaadin/vaadin-usage-statistics/-/vaadin-usage-statistics-2.1.0.tgz#9c0fd71dded80f401bcdfbcb3f45b5640fc4256d" + integrity sha512-e81nbqY5zsaYhLJuOVkJkB/Um1pGK5POIqIlTNhUfjeoyGaJ63tiX8+D5n6F+GgVxUTLUarsKa6SKRcQel0AzA== + dependencies: + "@vaadin/vaadin-development-mode-detector" "^2.0.0" + +"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" + integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== + +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== + +"@webassemblyjs/helper-buffer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" + integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== + +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== + +"@webassemblyjs/helper-wasm-section@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" + integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" + integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-opt" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/wast-printer" "1.11.6" + +"@webassemblyjs/wasm-gen@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" + integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" + integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + +"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" + integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" + integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webcomponents/shadycss@^1.9.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@webcomponents/shadycss/-/shadycss-1.10.1.tgz#6f377b313c96a93a690f25206b32a20eada4b2a9" + integrity sha512-XEVDA7oH6o4Au9apyRDucjcIzvP44Ur4sqTMGRKCcE6sCAeKiOkRE03TCYNJAFkzckMWWT8Xx3IxG3iwjAcsRQ== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +"@yarnpkg/lockfile@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +JSONStream@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +accepts@~1.3.4: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-import-assertions@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" + integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== + +acorn@^8.7.1, acorn@^8.8.2: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= + +agent-base@4, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== + dependencies: + humanize-ms "^1.2.1" + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@6.12.3, ajv@^6.5.5: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +argparse@^1.0.10, argparse@~1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +array-from@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" + integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU= + +arraybuffer.slice@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== + +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" + integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== + +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= + +base64id@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" + integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +better-assert@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= + dependencies: + callsite "1.0.0" + +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + +blob@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" + integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== + +bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +body-parser@^1.16.1: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.21.10: + version "4.22.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6" + integrity sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A== + dependencies: + caniuse-lite "^1.0.30001580" + electron-to-chromium "^1.4.648" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +builtin-modules@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" + integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^12.0.0, cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-lite@^1.0.30001580: + version "1.0.30001584" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001584.tgz#5e3ea0625d048d5467670051687655b1f7bf7dfd" + integrity sha512-LOz7CCQ9M1G7OjJOF9/mzmqmj3jE/7VOmrfw6Mgs0E8cjOsbRXQJHsPBfmBOXDskXKrHLyyW3n7kpDW/4BsfpQ== + +canonical-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/canonical-path/-/canonical-path-1.0.0.tgz#fcb470c23958def85081856be7a86e904f180d1d" + integrity sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chai@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" + integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + pathval "^1.1.0" + type-detect "^4.0.5" + +chalk@^2.0.0, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + +chokidar@^3.0.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" + integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + +chownr@^1.1.1, chownr@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.2.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.4.0.tgz#c6256db216b878cfba4720e719cec7cf72685d7f" + integrity sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA== + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colors@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +colors@~1.2.1: + version "1.2.5" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.5.tgz#89c7ad9a374bc030df8013241f68136ed8835afc" + integrity sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg== + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@2, commander@^2.20.0, commander@^2.7.1: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= + +component-emitter@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect@^3.6.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.5.1, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +core-js@3: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cross-spawn@^4: + version "4.0.2" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" + integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE= + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +custom-event@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" + integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +d3-array@1, d3-array@^1.1.1, d3-array@^1.2.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" + integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== + +d3-array@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.1.tgz#d1ca33de2f6ac31efadb8e050a021d7e2396d5dc" + integrity sha512-CyINJQ0SOUHojDdFDH4JEM0552vCR1utGyLHegJHyYH0JyCpSeTPxi4OBqHMA2jJZq4NH782LtaJWBImqI/HBw== + +d3-axis@1: + version "1.0.12" + resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-1.0.12.tgz#cdf20ba210cfbb43795af33756886fb3638daac9" + integrity sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ== + +d3-axis@1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-1.0.8.tgz#31a705a0b535e65759de14173a31933137f18efa" + integrity sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo= + +d3-brush@1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-1.1.5.tgz#066b8e84d17b192986030446c97c0fba7e1bacdc" + integrity sha512-rEaJ5gHlgLxXugWjIkolTA0OyMvw8UWU1imYXy1v642XyyswmI1ybKOv05Ft+ewq+TFmdliD3VuK0pRp1VT/5A== + dependencies: + d3-dispatch "1" + d3-drag "1" + d3-interpolate "1" + d3-selection "1" + d3-transition "1" + +d3-brush@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-1.0.4.tgz#00c2f238019f24f6c0a194a26d41a1530ffe7bc4" + integrity sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q= + dependencies: + d3-dispatch "1" + d3-drag "1" + d3-interpolate "1" + d3-selection "1" + d3-transition "1" + +d3-chord@1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-1.0.6.tgz#309157e3f2db2c752f0280fedd35f2067ccbb15f" + integrity sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA== + dependencies: + d3-array "1" + d3-path "1" + +d3-chord@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-1.0.4.tgz#7dec4f0ba886f713fe111c45f763414f6f74ca2c" + integrity sha1-fexPC6iG9xP+ERxF92NBT290yiw= + dependencies: + d3-array "1" + d3-path "1" + +d3-collection@1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e" + integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== + +d3-collection@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.4.tgz#342dfd12837c90974f33f1cc0a785aea570dcdc2" + integrity sha1-NC39EoN8kJdPM/HMCnha6lcNzcI= + +d3-color@1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.1.tgz#c52002bf8846ada4424d55d97982fef26eb3bc8a" + integrity sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q== + +d3-color@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.0.3.tgz#bc7643fca8e53a8347e2fbdaffa236796b58509b" + integrity sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs= + +d3-contour@1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/d3-contour/-/d3-contour-1.3.2.tgz#652aacd500d2264cb3423cee10db69f6f59bead3" + integrity sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg== + dependencies: + d3-array "^1.1.1" + +d3-dispatch@1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.6.tgz#00d37bcee4dd8cd97729dd893a0ac29caaba5d58" + integrity sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA== + +d3-dispatch@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.3.tgz#46e1491eaa9b58c358fce5be4e8bed626e7871f8" + integrity sha1-RuFJHqqbWMNY/OW+TovtYm54cfg= + +d3-drag@1: + version "1.2.5" + resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.2.5.tgz#2537f451acd39d31406677b7dc77c82f7d988f70" + integrity sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w== + dependencies: + d3-dispatch "1" + d3-selection "1" + +d3-drag@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.2.1.tgz#df8dd4c502fb490fc7462046a8ad98a5c479282d" + integrity sha512-Cg8/K2rTtzxzrb0fmnYOUeZHvwa4PHzwXOLZZPwtEs2SKLLKLXeYwZKBB+DlOxUvFmarOnmt//cU4+3US2lyyQ== + dependencies: + d3-dispatch "1" + d3-selection "1" + +d3-dsv@1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.2.0.tgz#9d5f75c3a5f8abd611f74d3f5847b0d4338b885c" + integrity sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g== + dependencies: + commander "2" + iconv-lite "0.4" + rw "1" + +d3-dsv@1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.0.8.tgz#907e240d57b386618dc56468bacfe76bf19764ae" + integrity sha512-IVCJpQ+YGe3qu6odkPQI0KPqfxkhbP/oM1XhhE/DFiYmcXKfCRub4KXyiuehV1d4drjWVXHUWx4gHqhdZb6n/A== + dependencies: + commander "2" + iconv-lite "0.4" + rw "1" + +d3-ease@1, d3-ease@^1.0.0: + version "1.0.6" + resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.6.tgz#ebdb6da22dfac0a22222f2d4da06f66c416a0ec0" + integrity sha512-SZ/lVU7LRXafqp7XtIcBdxnWl8yyLpgOmzAk0mWBI9gXNzLDx5ybZgnRbH9dN/yY5tzVBqCQ9avltSnqVwessQ== + +d3-ease@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.3.tgz#68bfbc349338a380c44d8acc4fbc3304aa2d8c0e" + integrity sha1-aL+8NJM4o4DETYrMT7wzBKotjA4= + +d3-fetch@1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-1.2.0.tgz#15ce2ecfc41b092b1db50abd2c552c2316cf7fc7" + integrity sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA== + dependencies: + d3-dsv "1" + +d3-force@1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.2.1.tgz#fd29a5d1ff181c9e7f0669e4bd72bdb0e914ec0b" + integrity sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg== + dependencies: + d3-collection "1" + d3-dispatch "1" + d3-quadtree "1" + d3-timer "1" + +d3-force@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.1.0.tgz#cebf3c694f1078fcc3d4daf8e567b2fbd70d4ea3" + integrity sha512-2HVQz3/VCQs0QeRNZTYb7GxoUCeb6bOzMp/cGcLa87awY9ZsPvXOGeZm0iaGBjXic6I1ysKwMn+g+5jSAdzwcg== + dependencies: + d3-collection "1" + d3-dispatch "1" + d3-quadtree "1" + d3-timer "1" + +d3-format@1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.4.tgz#356925f28d0fd7c7983bfad593726fce46844030" + integrity sha512-TWks25e7t8/cqctxCmxpUuzZN11QxIA7YrMbram94zMQ0PXjE4LVIMe/f6a4+xxL8HQ3OsAFULOINQi1pE62Aw== + +d3-format@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.2.2.tgz#1a39c479c8a57fe5051b2e67a3bee27061a74e7a" + integrity sha512-zH9CfF/3C8zUI47nsiKfD0+AGDEuM8LwBIP7pBVpyR4l/sKkZqITmMtxRp04rwBrlshIZ17XeFAaovN3++wzkw== + +d3-geo@1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.12.1.tgz#7fc2ab7414b72e59fbcbd603e80d9adc029b035f" + integrity sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg== + dependencies: + d3-array "1" + +d3-geo@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.9.1.tgz#157e3b0f917379d0f73bebfff3be537f49fa7356" + integrity sha512-l9wL/cEQkyZQYXw3xbmLsH3eQ5ij+icNfo4r0GrLa5rOCZR/e/3am45IQ0FvQ5uMsv+77zBRunLc9ufTWSQYFA== + dependencies: + d3-array "1" + +d3-hierarchy@1: + version "1.1.9" + resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz#2f6bee24caaea43f8dc37545fa01628559647a83" + integrity sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ== + +d3-hierarchy@1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz#a1c845c42f84a206bcf1c01c01098ea4ddaa7a26" + integrity sha1-ochFxC+Eoga88cAcAQmOpN2qeiY= + +d3-interpolate@1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz#526e79e2d80daa383f9e0c1c1c7dcc0f0583e987" + integrity sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA== + dependencies: + d3-color "1" + +d3-interpolate@1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.6.tgz#2cf395ae2381804df08aa1bf766b7f97b5f68fb6" + integrity sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A== + dependencies: + d3-color "1" + +d3-path@1: + version "1.0.9" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" + integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== + +d3-path@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.5.tgz#241eb1849bd9e9e8021c0d0a799f8a0e8e441764" + integrity sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q= + +d3-polygon@1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-1.0.6.tgz#0bf8cb8180a6dc107f518ddf7975e12abbfbd38e" + integrity sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ== + +d3-polygon@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-1.0.3.tgz#16888e9026460933f2b179652ad378224d382c62" + integrity sha1-FoiOkCZGCTPysXllKtN4Ik04LGI= + +d3-quadtree@1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.7.tgz#ca8b84df7bb53763fe3c2f24bd435137f4e53135" + integrity sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA== + +d3-quadtree@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.3.tgz#ac7987e3e23fe805a990f28e1b50d38fcb822438" + integrity sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg= + +d3-queue@3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/d3-queue/-/d3-queue-3.0.7.tgz#c93a2e54b417c0959129d7d73f6cf7d4292e7618" + integrity sha1-yTouVLQXwJWRKdfXP2z31Ckudhg= + +d3-random@1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-1.1.2.tgz#2833be7c124360bf9e2d3fd4f33847cfe6cab291" + integrity sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ== + +d3-random@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-1.1.0.tgz#6642e506c6fa3a648595d2b2469788a8d12529d3" + integrity sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM= + +d3-request@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/d3-request/-/d3-request-1.0.6.tgz#a1044a9ef4ec28c824171c9379fae6d79474b19f" + integrity sha512-FJj8ySY6GYuAJHZMaCQ83xEYE4KbkPkmxZ3Hu6zA1xxG2GD+z6P+Lyp+zjdsHf0xEbp2xcluDI50rCS855EQ6w== + dependencies: + d3-collection "1" + d3-dispatch "1" + d3-dsv "1" + xmlhttprequest "1" + +d3-scale-chromatic@1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz#54e333fc78212f439b14641fb55801dd81135a98" + integrity sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg== + dependencies: + d3-color "1" + d3-interpolate "1" + +d3-scale@1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.7.tgz#fa90324b3ea8a776422bd0472afab0b252a0945d" + integrity sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw== + dependencies: + d3-array "^1.2.0" + d3-collection "1" + d3-color "1" + d3-format "1" + d3-interpolate "1" + d3-time "1" + d3-time-format "2" + +d3-scale@2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-2.2.2.tgz#4e880e0b2745acaaddd3ede26a9e908a9e17b81f" + integrity sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw== + dependencies: + d3-array "^1.2.0" + d3-collection "1" + d3-format "1" + d3-interpolate "1" + d3-time "1" + d3-time-format "2" + +d3-selection@1, d3-selection@^1.1.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.2.tgz#dcaa49522c0dbf32d6c1858afc26b6094555bc5c" + integrity sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg== + +d3-selection@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.3.0.tgz#d53772382d3dc4f7507bfb28bcd2d6aed2a0ad6d" + integrity sha512-qgpUOg9tl5CirdqESUAu0t9MU/t3O9klYfGfyKsXEmhyxyzLpzpeh08gaxBUTQw1uXIOkr/30Ut2YRjSSxlmHA== + +d3-shape@1, d3-shape@^1.0.0: + version "1.3.7" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7" + integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw== + dependencies: + d3-path "1" + +d3-shape@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.2.0.tgz#45d01538f064bafd05ea3d6d2cb748fd8c41f777" + integrity sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c= + dependencies: + d3-path "1" + +d3-time-format@2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.2.3.tgz#0c9a12ee28342b2037e5ea1cf0b9eb4dd75f29cb" + integrity sha512-RAHNnD8+XvC4Zc4d2A56Uw0yJoM7bsvOlJR33bclxq399Rak/b9bhvu/InjxdWhPtkgU53JJcleJTGkNRnN6IA== + dependencies: + d3-time "1" + +d3-time-format@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.1.1.tgz#85b7cdfbc9ffca187f14d3c456ffda268081bb31" + integrity sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw== + dependencies: + d3-time "1" + +d3-time@1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1" + integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA== + +d3-time@1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.8.tgz#dbd2d6007bf416fe67a76d17947b784bffea1e84" + integrity sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ== + +d3-timer@1: + version "1.0.10" + resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.10.tgz#dfe76b8a91748831b13b6d9c793ffbd508dd9de5" + integrity sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw== + +d3-timer@1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.7.tgz#df9650ca587f6c96607ff4e60cc38229e8dd8531" + integrity sha512-vMZXR88XujmG/L5oB96NNKH5lCWwiLM/S2HyyAQLcjWJCloK5shxta4CwOFYLZoY3AWX73v8Lgv4cCAdWtRmOA== + +d3-transition@1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.3.2.tgz#a98ef2151be8d8600543434c1ca80140ae23b398" + integrity sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA== + dependencies: + d3-color "1" + d3-dispatch "1" + d3-ease "1" + d3-interpolate "1" + d3-selection "^1.1.0" + d3-timer "1" + +d3-transition@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.1.1.tgz#d8ef89c3b848735b060e54a39b32aaebaa421039" + integrity sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ== + dependencies: + d3-color "1" + d3-dispatch "1" + d3-ease "1" + d3-interpolate "1" + d3-selection "^1.1.0" + d3-timer "1" + +d3-voronoi@1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.4.tgz#dd3c78d7653d2bb359284ae478645d95944c8297" + integrity sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg== + +d3-voronoi@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.2.tgz#1687667e8f13a2d158c80c1480c5a29cb0d8973c" + integrity sha1-Fodmfo8TotFYyAwUgMWinLDYlzw= + +d3-zoom@1: + version "1.8.3" + resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.8.3.tgz#b6a3dbe738c7763121cd05b8a7795ffe17f4fc0a" + integrity sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ== + dependencies: + d3-dispatch "1" + d3-drag "1" + d3-interpolate "1" + d3-selection "1" + d3-transition "1" + +d3-zoom@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.7.1.tgz#02f43b3c3e2db54f364582d7e4a236ccc5506b63" + integrity sha512-sZHQ55DGq5BZBFGnRshUT8tm2sfhPHFnOlmPbbwTkAoPeVdRTkB4Xsf9GCY0TSHrTD8PeJPZGmP/TpGicwJDJQ== + dependencies: + d3-dispatch "1" + d3-drag "1" + d3-interpolate "1" + d3-selection "1" + d3-transition "1" + +d3@5.7.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/d3/-/d3-5.7.0.tgz#f189d338bdde62acf02f308918e0ec34dd7568f9" + integrity sha512-8KEIfx+dFm8PlbJN9PI0suazrZ41QcaAufsKE9PRcqYPWLngHIyWJZX96n6IQKePGgeSu0l7rtlueSSNq8Zc3g== + dependencies: + d3-array "1" + d3-axis "1" + d3-brush "1" + d3-chord "1" + d3-collection "1" + d3-color "1" + d3-contour "1" + d3-dispatch "1" + d3-drag "1" + d3-dsv "1" + d3-ease "1" + d3-fetch "1" + d3-force "1" + d3-format "1" + d3-geo "1" + d3-hierarchy "1" + d3-interpolate "1" + d3-path "1" + d3-polygon "1" + d3-quadtree "1" + d3-random "1" + d3-scale "2" + d3-scale-chromatic "1" + d3-selection "1" + d3-shape "1" + d3-time "1" + d3-time-format "2" + d3-timer "1" + d3-transition "1" + d3-voronoi "1" + d3-zoom "1" + +d3@^4.13.0: + version "4.13.0" + resolved "https://registry.yarnpkg.com/d3/-/d3-4.13.0.tgz#ab236ff8cf0cfc27a81e69bf2fb7518bc9b4f33d" + integrity sha512-l8c4+0SldjVKLaE2WG++EQlqD7mh/dmQjvi2L2lKPadAVC+TbJC4ci7Uk9bRi+To0+ansgsS0iWfPjD7DBy+FQ== + dependencies: + d3-array "1.2.1" + d3-axis "1.0.8" + d3-brush "1.0.4" + d3-chord "1.0.4" + d3-collection "1.0.4" + d3-color "1.0.3" + d3-dispatch "1.0.3" + d3-drag "1.2.1" + d3-dsv "1.0.8" + d3-ease "1.0.3" + d3-force "1.1.0" + d3-format "1.2.2" + d3-geo "1.9.1" + d3-hierarchy "1.1.5" + d3-interpolate "1.1.6" + d3-path "1.0.5" + d3-polygon "1.0.3" + d3-quadtree "1.0.3" + d3-queue "3.0.7" + d3-random "1.1.0" + d3-request "1.0.6" + d3-scale "1.0.7" + d3-selection "1.3.0" + d3-shape "1.2.0" + d3-time "1.0.8" + d3-time-format "2.1.1" + d3-timer "1.0.7" + d3-transition "1.1.1" + d3-voronoi "1.1.2" + d3-zoom "1.7.1" + +dagre@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/dagre/-/dagre-0.8.5.tgz#ba30b0055dac12b6c1fcc247817442777d06afee" + integrity sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw== + dependencies: + graphlib "^2.1.8" + lodash "^4.17.15" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +date-format@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" + integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA== + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@3.1.0, debug@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@4.1.1, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +debug@^3.0.0, debug@^3.1.0, debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + +decamelize@^1.1.1, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +deep-freeze@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/deep-freeze/-/deep-freeze-0.0.1.tgz#3a0b0005de18672819dfd38cd31f91179c893e84" + integrity sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ= + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +dependency-graph@^0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.7.2.tgz#91db9de6eb72699209d88aea4c1fd5221cac1c49" + integrity sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ== + +dezalgo@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= + dependencies: + asap "^2.0.0" + wrappy "1" + +di@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" + integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= + +diff@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +dom-serialize@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" + integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= + dependencies: + custom-event "~1.0.0" + ent "~2.2.0" + extend "^3.0.0" + void-elements "^2.0.0" + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.4.648: + version "1.4.656" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.656.tgz#b374fb7cab9b782a5bc967c0ce0e19826186b9c9" + integrity sha512-9AQB5eFTHyR3Gvt2t/NwR0le2jBSUNwCnMbUCejFWHD+so4tH40/dRLgoE+jxlPeWS43XJewyvCv+I8LPMl49Q== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +encoding@^0.1.11: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +engine.io-client@~3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36" + integrity sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw== + dependencies: + component-emitter "1.2.1" + component-inherit "0.0.3" + debug "~3.1.0" + engine.io-parser "~2.1.1" + has-cors "1.1.0" + indexof "0.0.1" + parseqs "0.0.5" + parseuri "0.0.5" + ws "~3.3.1" + xmlhttprequest-ssl "~1.5.4" + yeast "0.1.2" + +engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" + integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA== + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.5" + blob "0.0.5" + has-binary2 "~1.0.2" + +engine.io@~3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.1.tgz#b60281c35484a70ee0351ea0ebff83ec8c9522a2" + integrity sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w== + dependencies: + accepts "~1.3.4" + base64id "1.0.0" + cookie "0.3.1" + debug "~3.1.0" + engine.io-parser "~2.1.0" + ws "~3.3.1" + +enhanced-resolve@^5.15.0: + version "5.15.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +ent@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= + +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: + version "1.17.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" + integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.0" + is-regex "^1.1.0" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-module-lexer@^1.2.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" + integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +eventemitter3@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@2.1.0, fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.12.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.12.1.tgz#de54a6205311b93d60398ebc01cf7015682312b6" + integrity sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg== + +foreground-child@^1.5.6: + version "1.5.6" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" + integrity sha1-T9ca0t/elnibmApcCilZN8svXOk= + dependencies: + cross-spawn "^4" + signal-exit "^3.0.0" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" + integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b" + integrity sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^7.0.1, fs-extra@~7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +genfun@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" + integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphlib@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.8.tgz#5761d414737870084c92ec7b5dbcb0592c9d35da" + integrity sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A== + dependencies: + lodash "^4.17.15" + +handlebars@^4.0.3: + version "4.7.6" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" + integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-binary2@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" + integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== + dependencies: + isarray "2.0.1" + +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +hosted-git-info@^3.0.2: + version "3.0.5" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.5.tgz#bea87905ef7317442e8df3087faa3c842397df03" + integrity sha512-i4dpK6xj9BIpVOTboXIlKG9+8HMKggcrMX7WA24xZtKwX0TPelq/rbaS5rCKeNX8sJXZJGdSxpnEGtta+wismQ== + dependencies: + lru-cache "^6.0.0" + +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + dependencies: + agent-base "4" + debug "3.1.0" + +http-proxy@^1.13.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-proxy-agent@^2.2.3: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + +iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +inquirer@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" + integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^3.0.0" + cli-cursor "^3.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.5.3" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +ip@1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +is-any-array@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/is-any-array/-/is-any-array-0.0.3.tgz#cbdd8c7189d47b53b050969245f4ef7e55550b9b" + integrity sha512-Lr5SRykZv6uuYMZURz7+YpigT1ziTBHOTgFJ1zK7gL+9Wbet5Ha1ws6S84Jo/lH4zep02b95sk6o4+MTk97mPQ== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-callable@^1.1.4, is-callable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-docker@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b" + integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-reference@^1.1.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + +is-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" + integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== + dependencies: + has-symbols "^1.0.1" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-wsl@^2.1.0, is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isbinaryfile@^4.0.2: + version "4.0.6" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.6.tgz#edcb62b224e2b4710830b67498c8e4e5a4d2610b" + integrity sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" + integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== + +istanbul-lib-report@^1.1.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" + integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw== + dependencies: + istanbul-lib-coverage "^1.2.1" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-reports@^1.3.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" + integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw== + dependencies: + handlebars "^4.0.3" + +jasmine-core@^3.5.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.6.0.tgz#491f3bb23941799c353ceb7a45b38a950ebc5a20" + integrity sha512-8uQYa7zJN8hq9z+g8z1bqCfdC8eoDAeVnM5sfqs7KHv9/ifoJ500m018fpFc7RDaO6SWCLCXwo/wPSNcdYTgcw== + +jasmine-core@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.5.0.tgz#132c23e645af96d85c8bca13c8758b18429fc1e4" + integrity sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA== + +jasmine-reporters@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/jasmine-reporters/-/jasmine-reporters-2.3.2.tgz#898818ffc234eb8b3f635d693de4586f95548d43" + integrity sha512-u/7AT9SkuZsUfFBLLzbErohTGNsEUCKaQbsVYnLFW1gEuL2DzmBL4n8v90uZsqIqlWvWUgian8J6yOt5Fyk/+A== + dependencies: + mkdirp "^0.5.1" + xmldom "^0.1.22" + +jasmine@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.5.0.tgz#7101eabfd043a1fc82ac24e0ab6ec56081357f9e" + integrity sha512-DYypSryORqzsGoMazemIHUfMkXM7I7easFaxAvNM3Mr6Xz3Fy36TupTrAOxZWN8MVKEU5xECv22J4tUQf3uBzQ== + dependencies: + glob "^7.1.4" + jasmine-core "~3.5.0" + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jju@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" + integrity sha1-o6vicYryQaKykE+EpiWXDzia4yo= + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@^2.1.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +just-extend@^4.0.2: + version "4.1.0" + resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.1.0.tgz#7278a4027d889601640ee0ce0e5a00b992467da4" + integrity sha512-ApcjaOdVTJ7y4r08xI5wIqpvwS48Q0PBG4DJROcEkH1f8MdAiNFyFxz3xoL0LWAVwjrwPYZdVHHxhRHcx/uGLA== + +karma-chrome-launcher@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz#805a586799a4d05f4e54f72a204979f3f3066738" + integrity sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg== + dependencies: + which "^1.2.1" + +karma-firefox-launcher@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-1.3.0.tgz#ebcbb1d1ddfada6be900eb8fae25bcf2dcdc8171" + integrity sha512-Fi7xPhwrRgr+94BnHX0F5dCl1miIW4RHnzjIGxF8GaIEp7rNqX7LSi7ok63VXs3PS/5MQaQMhGxw+bvD+pibBQ== + dependencies: + is-wsl "^2.1.0" + +karma-jasmine@^3.1.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-3.3.1.tgz#c01b1a2ec973e1531c1f6535e1d7d66b8e4275c2" + integrity sha512-Nxh7eX9mOQMyK0VSsMxdod+bcqrR/ikrmEiWj5M6fwuQ7oI+YEF1FckaDsWfs6TIpULm9f0fTKMjF7XcrvWyqQ== + dependencies: + jasmine-core "^3.5.0" + +karma-requirejs@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/karma-requirejs/-/karma-requirejs-1.1.0.tgz#fddae2cb87d7ebc16fb0222893564d7fee578798" + integrity sha1-/driy4fX68FvsCIok1ZNf+5Xh5g= + +karma-sourcemap-loader@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8" + integrity sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg= + dependencies: + graceful-fs "^4.1.2" + +karma@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/karma/-/karma-5.0.2.tgz#e404373dac6e3fa08409ae4d9eda7d83adb43ee5" + integrity sha512-RpUuCuGJfN3WnjYPGIH+VBF8023Lfm3TQH6D1kcNL+FxtEPc2UUz/nVjbVAGXH4Pm+Q7FVOAQjdAeFUpXpQ3IA== + dependencies: + body-parser "^1.16.1" + braces "^3.0.2" + chokidar "^3.0.0" + colors "^1.1.0" + connect "^3.6.0" + di "^0.0.1" + dom-serialize "^2.2.0" + flatted "^2.0.0" + glob "^7.1.1" + graceful-fs "^4.1.2" + http-proxy "^1.13.0" + isbinaryfile "^4.0.2" + lodash "^4.17.14" + log4js "^4.0.0" + mime "^2.3.1" + minimatch "^3.0.2" + qjobs "^1.1.4" + range-parser "^1.2.0" + rimraf "^2.6.0" + socket.io "2.1.1" + source-map "^0.6.1" + tmp "0.0.33" + ua-parser-js "0.7.21" + yargs "^15.3.1" + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +lit-element@^2.0.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/lit-element/-/lit-element-2.3.1.tgz#73343b978fa1e73d60526c6bb6ad60f53a16c343" + integrity sha512-tOcUAmeO3BzwiQ7FGWdsshNvC0HVHcTFYw/TLIImmKwXYoV0E7zCBASa8IJ7DiP4cen/Yoj454gS0qqTnIGsFA== + dependencies: + lit-html "^1.1.1" + +lit-html@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-1.2.1.tgz#1fb933dc1e2ddc095f60b8086277d4fcd9d62cc8" + integrity sha512-GSJHHXMGLZDzTRq59IUfL9FCdAlGfqNp/dEa7k7aBaaWD+JKaCjsAk9KYm2V12ItonVaYx2dprN66Zdm1AuBTQ== + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.get@^4.0.0: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.isequal@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= + +lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@~4.17.15: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + +log-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + +log4js@^4.0.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.5.1.tgz#e543625e97d9e6f3e6e7c9fc196dd6ab2cae30b5" + integrity sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw== + dependencies: + date-format "^2.0.0" + debug "^4.1.1" + flatted "^2.0.0" + rfdc "^1.1.4" + streamroller "^1.0.6" + +lolex@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.2.0.tgz#ddbd7f6213ca1ea5826901ab1222b65d714b3cd7" + integrity sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg== + +lolex@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" + integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== + dependencies: + "@sinonjs/commons" "^1.7.0" + +long@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@0.25.7, magic-string@^0.25.0, magic-string@^0.25.2: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +make-fetch-happen@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== + dependencies: + agentkeepalive "^3.4.1" + cacache "^12.0.0" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime-types@^2.1.27: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@^2.3.1: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + +mimic-fn@^2.0.0, mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^3.0.2, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +ml-array-max@^1.1.1, ml-array-max@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ml-array-max/-/ml-array-max-1.1.2.tgz#ac14a4954ebdb9f401774cc1572fce439e12f94d" + integrity sha512-it2hYUSuYEwIRO6hjTWfe6gbGutF4Tuct7jxt3LiLE4wKFs6ku5FLNIRKtOL2jyH+Jdwt1ddbqKMX8inBM8RxA== + dependencies: + is-any-array "^0.0.3" + +ml-array-min@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ml-array-min/-/ml-array-min-1.1.2.tgz#a084370fe78998a4131d566d066ee01bccce253a" + integrity sha512-92QzvsyK7TxGz618pno6bu0LXYcRKssbimP85qRllk2xX5Z4gnVxlOmrMjSerUut9zzbt1eQB4byXNCwT0vgwA== + dependencies: + is-any-array "^0.0.3" + +ml-array-rescale@^1.2.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/ml-array-rescale/-/ml-array-rescale-1.3.1.tgz#7e55871af8741d212e2b47b8acd55571936c822b" + integrity sha512-PMj/f3MXBf5j2is8E4ugfNx6txi5y6qO4iVizfGjUVcpBl9RpXhznsoOz5iLtVtW1uDiWl+ToHaW4IGwoG+rmg== + dependencies: + is-any-array "^0.0.3" + ml-array-max "^1.1.2" + ml-array-min "^1.1.2" + +ml-levenberg-marquardt@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/ml-levenberg-marquardt/-/ml-levenberg-marquardt-1.0.4.tgz#68cdc235edf9d9acb1e18115c166f6a31be1d300" + integrity sha512-BtvQkRwhqn/y2ZJrq7BiFYZkHoSAlAK0ZzdWtivNp/IbcYtjh9QXFgTZ1fFMto4CqEXX4OUj4SRQuMD0259fuA== + dependencies: + ml-matrix "^5.3.0" + +ml-matrix@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ml-matrix/-/ml-matrix-5.3.0.tgz#2154902a3380f6a0874ab9a2539a09e873e8db92" + integrity sha512-DuvdXYwfGRpM+7MVdvi/zSjiazn+8QPrACT3Xi0pQpYx5SXZ1WuFYwUDXTSmV9+hrCxRhrC4hrzesNcfjpvOsw== + dependencies: + ml-array-max "^1.1.1" + ml-array-rescale "^1.2.1" + +monaco-editor-core@^0.20.0: + version "0.20.0" + resolved "https://registry.yarnpkg.com/monaco-editor-core/-/monaco-editor-core-0.20.0.tgz#d5ce01307d298dbca6ab9194812812b32b50433f" + integrity sha512-4mdmfEejTvRZzrEIn70jqqNl3g15vnkRdTkJ8uMK4jiljntlwhiSc5vknZOLt1QM8za16C3tDrSl2mTL9ma2Sg== + +monaco-languages@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/monaco-languages/-/monaco-languages-1.10.0.tgz#1e1b0f2b02c8c311b9db1ddb83f5c654f2f92fe1" + integrity sha512-ARAws17Xh0K4WsZYkJY6CqHn9EYdYN8CjzK6w/jgXIwU0owzCdUWxzu+FNJ/LeDLcKxL/YK3phcwGFj9IqX2yw== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.0.0, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.6.0, neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +ngx-color-picker@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/ngx-color-picker/-/ngx-color-picker-9.1.0.tgz#402b18a527702f06e7aa9ca61de5f96990e40638" + integrity sha512-ViYBfXb4IL1UbM15LaZHYqHyHPYVEKg+rZB1GWSLqXVuDol3Cgt38D8XfOcivVAO60CziQ77k3ThDo31T6wC6A== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +nise@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.3.tgz#9d2cfe37d44f57317766c6e9408a359c5d3ac1f7" + integrity sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ== + dependencies: + "@sinonjs/formatio" "^3.2.1" + "@sinonjs/text-encoding" "^0.7.1" + just-extend "^4.0.2" + lolex "^5.0.1" + path-to-regexp "^1.7.0" + +node-fetch-npm@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" + integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg== + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + +node-fetch@~2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" + integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U= + +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + +normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.4.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-install-checks@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" + integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-package-arg@8.0.1, npm-package-arg@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.0.1.tgz#9d76f8d7667b2373ffda60bb801a27ef71e3e270" + integrity sha512-/h5Fm6a/exByzFSTm7jAyHbgOqErl9qSNJDQF32Si/ZzgwT2TERVxRxn3Jurw1wflgyVVAxnFR4fRHPM7y1ClQ== + dependencies: + hosted-git-info "^3.0.2" + semver "^7.0.0" + validate-npm-package-name "^3.0.0" + +npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== + dependencies: + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" + +npm-packlist@^1.1.12: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.0.0.tgz#bfde7abe95f2670aed1629a3c18245ccb3cc2eb8" + integrity sha512-PdJpXMvjqt4nftNEDpCgjBUF8yI3Q3MyuAmVB9nemnnCg32F4BPL/JFBfdj8DubgHCYUFQhtLWmBPvdsFtjWMg== + dependencies: + npm-install-checks "^4.0.0" + npm-package-arg "^8.0.0" + semver "^7.0.0" + +npm-pick-manifest@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" + integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== + dependencies: + figgy-pudding "^3.5.1" + npm-package-arg "^6.0.0" + semver "^5.4.1" + +npm-registry-fetch@^4.0.0: + version "4.0.5" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.5.tgz#cb87cf7f25bfb048d6c3ee19d115bebf93ea5bfa" + integrity sha512-yQ0/U4fYpCCqmueB2g8sc+89ckQ3eXpmU4+Yi2j5o/r0WkKvE2+Y0tK3DEILAtn2UaQTkjTHxIXe2/CSdit+/Q== + dependencies: + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + npm-package-arg "^6.1.0" + safe-buffer "^5.2.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +numeric@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/numeric/-/numeric-1.2.6.tgz#765b02bef97988fcf880d4eb3f36b80fa31335aa" + integrity sha1-dlsCvvl5iPz4gNTrPza4D6MTNao= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-component@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= + +object-inspect@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.getownpropertydescriptors@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + +open@7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/open/-/open-7.0.3.tgz#db551a1af9c7ab4c7af664139930826138531c48" + integrity sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +ora@4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.3.tgz#752a1b7b4be4825546a7a3d59256fa523b6b6d05" + integrity sha512-fnDebVFyz309A73cqCipVL1fBZewq4vwgSHfxh43vVy31mbyoQ8sCH3Oeaog/owYOs/lLlGVPCISQonTneg6Pg== + dependencies: + chalk "^3.0.0" + cli-cursor "^3.1.0" + cli-spinners "^2.2.0" + is-interactive "^1.0.0" + log-symbols "^3.0.0" + mute-stream "0.0.8" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-homedir@^1.0.0, os-homedir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pacote@9.5.12: + version "9.5.12" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.12.tgz#1e11dd7a8d736bcc36b375a9804d41bb0377bf66" + integrity sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ== + dependencies: + bluebird "^3.5.3" + cacache "^12.0.2" + chownr "^1.1.2" + figgy-pudding "^3.5.1" + get-stream "^4.1.0" + glob "^7.1.3" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + minimatch "^3.0.4" + minipass "^2.3.5" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.4.0" + npm-normalize-package-bin "^1.0.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.1.12" + npm-pick-manifest "^3.0.0" + npm-registry-fetch "^4.0.0" + osenv "^0.1.5" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + protoduck "^5.0.1" + rimraf "^2.6.2" + safe-buffer "^5.1.2" + semver "^5.6.0" + ssri "^6.0.1" + tar "^4.4.10" + unique-filename "^1.1.1" + which "^1.3.1" + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse5@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parseqs@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= + dependencies: + better-assert "~1.0.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.5, path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +pathval@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" + integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +plottable@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/plottable/-/plottable-3.9.0.tgz#b1365b24b866f8e333d492aafa77acb6d02f41a3" + integrity sha512-QodLrGBL8SS4Asb1biRIXpWVNHpK9/V7nfPPIQwcZDTrYxKLfYtuMT1soCskCk8YcotzjNVKkCaeawc42y/WSA== + dependencies: + "@types/d3" "^4.13.0" + "@types/d3-shape" "^1.2.5" + "@types/is-plain-object" "^0.0.2" + "@types/lodash" "^4.14.109" + d3 "^4.13.0" + d3-ease "^1.0.0" + d3-shape "^1.0.0" + is-plain-object "^2.0.4" + lodash "^4.17.10" + tslib "~1.8.0" + typesettable "4.1.0" + +prettier@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.1.tgz#d9485dd5e499daa6cb547023b87a6cf51bee37d6" + integrity sha512-9bY+5ZWCfqj3ghYBLxApy2zf6m+NJo5GzmLTpr9FsApsfjriNnS2dahWReHMi7qNPhhHl9SYHJs2cHZLgexNIw== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + +protobufjs@6.8.8: + version "6.8.8" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.8.8.tgz#c8b4f1282fd7a90e6f5b109ed11c84af82908e7c" + integrity sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.0" + "@types/node" "^10.1.0" + long "^4.0.0" + +protoduck@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" + integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== + dependencies: + genfun "^5.0.0" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qjobs@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" + integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +read-package-json@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" + integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== + dependencies: + glob "^7.1.1" + json-parse-better-errors "^1.0.1" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.2" + +read-package-tree@5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + +read-pkg-up@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" + integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== + dependencies: + find-up "^3.0.0" + read-pkg "^3.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdir-scoped-modules@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +reflect-metadata@^0.1.2: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + +regenerator-runtime@^0.13.5: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +request@^2.88.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requirejs@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.6.tgz#e5093d9601c2829251258c0b9445d4d19fa9e7c9" + integrity sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.17.0, resolve@^1.3.2, resolve@~1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + +rfdc@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2" + integrity sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug== + +rimraf@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.2, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rollup@^2.26.4: + version "2.26.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.26.4.tgz#a8350fd6bd56fce9873a7db2bd9547d40de3992b" + integrity sha512-6+qsGuP0MXGd7vlYmk72utm1MrgZj5GfXibGL+cRkKQ9+ZL/BnFThDl0D5bcl7AqlzMjAQXRAwZX1HVm22M/4Q== + optionalDependencies: + fsevents "~2.1.2" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rw@1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= + +rxjs@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" + integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== + dependencies: + tslib "^1.9.0" + +rxjs@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.0.0-beta.0.tgz#41f730761e00ba7b5a28955e0f177afba8e2a134" + integrity sha512-MMsqDczs2RzsTvBiH6SKjJkdAh7WaI6Q0axP/DX+1ljwFm6+18AhQ3kVT8gD7G0dHIVfh5hDFoqLaW79pkiGag== + dependencies: + tslib "^1.9.0" + +rxjs@^6.5.3: + version "6.6.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.0.tgz#af2901eedf02e3a83ffa7f886240ff9018bbec84" + integrity sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg== + dependencies: + tslib "^1.9.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +schema-utils@^3.1.1, schema-utils@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +search-query-parser@^1.5.5: + version "1.5.5" + resolved "https://registry.yarnpkg.com/search-query-parser/-/search-query-parser-1.5.5.tgz#dfd829f4fb567a9a3a5b70327576dff4d5be071d" + integrity sha512-8hKmRbHShAc+LJtUu7mu4L/oWVgICG1GCzWZtlR11Vl3T/v4aTGv+Ie2bPg+8ueJn+l8zMHCQhzrBNMoV/t2qw== + +seedrandom@2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.3.tgz#2438504dad33917314bff18ac4d794f16d6aaecc" + integrity sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw= + +semver-intersect@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/semver-intersect/-/semver-intersect-1.4.0.tgz#bdd9c06bedcdd2fedb8cd352c3c43ee8c61321f3" + integrity sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ== + dependencies: + semver "^5.0.0" + +"semver@2 || 3 || 4 || 5", semver@^5.0.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== + +semver@7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6" + integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.0.0, semver@^7.1.1, semver@~7.3.0: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +serialize-javascript@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shelljs@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.2.tgz#345b7df7763f4c2340d584abb532c5f752ca9e35" + integrity sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +sinon@^7.4.1: + version "7.5.0" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.5.0.tgz#e9488ea466070ea908fd44a3d6478fd4923c67ec" + integrity sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q== + dependencies: + "@sinonjs/commons" "^1.4.0" + "@sinonjs/formatio" "^3.2.1" + "@sinonjs/samsam" "^3.3.3" + diff "^3.5.0" + lolex "^4.2.0" + nise "^1.5.2" + supports-color "^5.5.0" + +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== + +socket.io-adapter@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" + integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== + +socket.io-client@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.1.1.tgz#dcb38103436ab4578ddb026638ae2f21b623671f" + integrity sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ== + dependencies: + backo2 "1.0.2" + base64-arraybuffer "0.1.5" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "~3.1.0" + engine.io-client "~3.2.0" + has-binary2 "~1.0.2" + has-cors "1.1.0" + indexof "0.0.1" + object-component "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + socket.io-parser "~3.2.0" + to-array "0.1.4" + +socket.io-parser@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077" + integrity sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA== + dependencies: + component-emitter "1.2.1" + debug "~3.1.0" + isarray "2.0.1" + +socket.io@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980" + integrity sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA== + dependencies: + debug "~3.1.0" + engine.io "~3.2.0" + has-binary2 "~1.0.2" + socket.io-adapter "~1.1.0" + socket.io-client "2.1.1" + socket.io-parser "~3.2.0" + +socks-proxy-agent@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" + +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + +source-map-support@0.5.9: + version "0.5.9" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" + integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spawn-wrap@^1.4.2: + version "1.4.3" + resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.3.tgz#81b7670e170cca247d80bf5faf0cfb713bdcf848" + integrity sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw== + dependencies: + foreground-child "^1.5.6" + mkdirp "^0.5.0" + os-homedir "^1.0.1" + rimraf "^2.6.2" + signal-exit "^3.0.2" + which "^1.3.0" + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.0, ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +streamroller@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.6.tgz#8167d8496ed9f19f05ee4b158d9611321b8cacd9" + integrity sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg== + dependencies: + async "^2.6.2" + date-format "^2.0.0" + debug "^3.2.6" + fs-extra "^7.0.1" + lodash "^4.17.14" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.trimend@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimstart@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +supports-color@^3.1.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +symbol-observable@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +tar@^4.4.10: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +terser-webpack-plugin@^5.3.10: + version "5.3.10" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.20" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.26.0" + +terser@^4.6.3: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +terser@^5.26.0: + version "5.27.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.27.0.tgz#70108689d9ab25fef61c4e93e808e9fd092bf20c" + integrity sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +test-exclude@^5.2.2: + version "5.2.3" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" + integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== + dependencies: + glob "^7.1.3" + minimatch "^3.0.4" + read-pkg-up "^4.0.0" + require-main-filename "^2.0.0" + +three@~0.108.0: + version "0.108.0" + resolved "https://registry.yarnpkg.com/three/-/three-0.108.0.tgz#53d26597c7932f214bb43f4655e566d2058143b5" + integrity sha512-d1ysIXwi8qTlbmMwrTxi5pYiiYIflEr0e48krP0LAY8ndS8c6fkLHn6NvRT+o76/Fs9PBLxFViuI62iGVWwwlg== + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +"through@>=2.2.7 <3", through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +timsort@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tmp@0.0.33, tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" + integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== + dependencies: + rimraf "^2.6.3" + +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tsickle@^0.38.0: + version "0.38.1" + resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.38.1.tgz#30762db759d40c435943093b6972c7f2efb384ef" + integrity sha512-4xZfvC6+etRu6ivKCNqMOd1FqcY/m6JY3Y+yr5+Xw+i751ciwrWINi6x/3l1ekcODH9GZhlf0ny2LpzWxnjWYA== + +tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + +tslib@~1.8.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.8.1.tgz#6946af2d1d651a7b1863b531d6e5afa41aa44eac" + integrity sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw= + +tsutils@2.27.2: + version "2.27.2" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.27.2.tgz#60ba88a23d6f785ec4b89c6e8179cac9b431f1c7" + integrity sha512-qf6rmT84TFMuxAKez2pIfR8UCai49iQsfB7YWVjV1bKpy/d0PWT5rEOSM6La9PiHZ0k1RRZQiwVdVJfQ3BPHgg== + dependencies: + tslib "^1.8.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-is@~1.6.17: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@3.8.3: + version "3.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" + integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== + +typescript@~3.9.5: + version "3.9.7" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== + +typesettable@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/typesettable/-/typesettable-4.1.0.tgz#9dc4f539fabad7db4de2c3b08e286ff72a60f038" + integrity sha512-8JYVOPZiEP/YPNUyhDi+nzA9ZqtaKfanISeP56/7zOBnf9Ci7WYUWojjp456xXUNc20jJgvJXgaIewti45bRxA== + +ua-parser-js@0.7.21: + version "0.7.21" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777" + integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== + +uglify-js@^3.1.4: + version "3.10.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.10.0.tgz#397a7e6e31ce820bfd1cb55b804ee140c587a9e7" + integrity sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA== + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +umap-js@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/umap-js/-/umap-js-1.3.2.tgz#367bbe400e05a86b54d9462a051f974ee7d66f8f" + integrity sha512-qZoXYx0jA+s+j5A9n2RUEBnuCO7avdYeD/+5z6dVVnVcpodPSI2qADktx5OluVYcfs/WsuFO1hcaROCm4RSYHg== + dependencies: + ml-levenberg-marquardt "^1.0.3" + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universal-analytics@0.4.20: + version "0.4.20" + resolved "https://registry.yarnpkg.com/universal-analytics/-/universal-analytics-0.4.20.tgz#d6b64e5312bf74f7c368e3024a922135dbf24b03" + integrity sha512-gE91dtMvNkjO+kWsPstHRtSwHXz0l2axqptGYp5ceg4MsuurloM0PU3pdOfpb5zBXUvyjT4PwhWK2m39uczZuw== + dependencies: + debug "^3.0.0" + request "^2.88.0" + uuid "^3.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= + dependencies: + object.getownpropertydescriptors "^2.0.3" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.2.tgz#7ff5c203467e91f5e0d85cfcbaaf7d2ebbca9be6" + integrity sha512-vy9V/+pKG+5ZTYKf+VcphF5Oc6EFiu3W8Nv3P3zIh0EqVI80ZxOzuPfe9EHjkFNvf8+xuTHVeei4Drydlx4zjw== + +uuid@^3.0.0, uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-coverage@1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/v8-coverage/-/v8-coverage-1.0.9.tgz#780889680c0fea0f587adf22e2b5f443b9434745" + integrity sha512-JolsCH1JDI2QULrxkAGZaovJPvg/Q0p20Uj0F5N8fPtYDtz38gNBRPQ/WVXlLLd3d8WHvKN96AfE4XFk4u0g2g== + dependencies: + debug "^3.1.0" + foreground-child "^1.5.6" + istanbul-lib-coverage "^1.2.0" + istanbul-lib-report "^1.1.3" + istanbul-reports "^1.3.0" + mkdirp "^0.5.1" + rimraf "^2.6.2" + signal-exit "^3.0.2" + spawn-wrap "^1.4.2" + test-exclude "^5.2.2" + uuid "^3.3.2" + v8-to-istanbul "1.2.0" + yargs "^11.0.0" + +v8-to-istanbul@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-1.2.0.tgz#f6a22ffb08b2202aaba8c2be497d1d41fe8fb4b6" + integrity sha512-rVSmjdEfJmOHN8GYCbg+XUhbzXZr7DzdaXIslB9DdcopGZEMsW5x5qIdxr/8DcW7msULHNnvs/xUY1TszvhKRw== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + dependencies: + builtins "^1.0.3" + +validator@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-8.2.0.tgz#3c1237290e37092355344fef78c231249dab77b9" + integrity sha512-Yw5wW34fSv5spzTXNkokD6S6/Oq92d8q/t14TqsS3fAiA1RYnxSFSIZ+CY3n6PGGRCq5HhJTSepQvFUS2QUDxA== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +web-animations-js@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/web-animations-js/-/web-animations-js-2.3.2.tgz#a51963a359c543f97b47c7d4bc2d811f9fc9e153" + integrity sha512-TOMFWtQdxzjWp8qx4DAraTWTsdhxVSiWa6NkPFSaPtZ1diKUxTn4yTix73A1euG1WbSOMMPcY51cnjTIHrGtDA== + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.90.1: + version "5.90.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.90.1.tgz#62ab0c097d7cbe83d32523dbfbb645cdb7c3c01c" + integrity sha512-SstPdlAC5IvgFnhiRok8hqJo/+ArAbNv7rhU4fnWGHNVfN59HSQFaxZDSAL3IFG2YmqxuRs+IU33milSxbPlog== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^1.0.5" + "@webassemblyjs/ast" "^1.11.5" + "@webassemblyjs/wasm-edit" "^1.11.5" + "@webassemblyjs/wasm-parser" "^1.11.5" + acorn "^8.7.1" + acorn-import-assertions "^1.9.0" + browserslist "^4.21.10" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.15.0" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.2.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.10" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.1, which@^1.2.9, which@^1.3.0, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@~3.3.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +xmldom@^0.1.22: + version "0.1.31" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff" + integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ== + +xmlhttprequest-ssl@~1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" + integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= + +xmlhttprequest@1: + version "1.8.0" + resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" + integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= + +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^18.1.0, yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= + dependencies: + camelcase "^4.1.0" + +yargs@15.3.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.0.tgz#403af6edc75b3ae04bf66c94202228ba119f0976" + integrity sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.0" + +yargs@^11.0.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" + integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw== + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^9.0.2" + +yargs@^15.3.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= + +z-schema@~3.18.3: + version "3.18.4" + resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-3.18.4.tgz#ea8132b279533ee60be2485a02f7e3e42541a9a2" + integrity sha512-DUOKC/IhbkdLKKiV89gw9DUauTV8U/8yJl1sjf6MtDmzevLKOF2duNJ495S3MFVjqZarr+qNGCPbkg4mu4PpLw== + dependencies: + lodash.get "^4.0.0" + lodash.isequal "^4.0.0" + validator "^8.0.0" + optionalDependencies: + commander "^2.7.1" + +zone.js@^0.10.2: + version "0.10.3" + resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.10.3.tgz#3e5e4da03c607c9dcd92e37dd35687a14a140c16" + integrity sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg== diff --git a/training-visualization-frontend b/training-visualization-frontend deleted file mode 160000 index aef249fd3b60bc39ebe445f2e251c25a60bf3fb0..0000000000000000000000000000000000000000 --- a/training-visualization-frontend +++ /dev/null @@ -1 +0,0 @@ -Subproject commit aef249fd3b60bc39ebe445f2e251c25a60bf3fb0